105 lines
2.6 MiB
105 lines
2.6 MiB
var Bn=Object.defineProperty;var Vn=(n,e,t)=>e in n?Bn(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var P=(n,e,t)=>(Vn(n,typeof e!="symbol"?e+"":e,t),t);var commonjsGlobal=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getDefaultExportFromCjs(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}function getAugmentedNamespace(n){if(n.__esModule)return n;var e=n.default;if(typeof e=="function"){var t=function r(){return this instanceof r?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};t.prototype=e.prototype}else t={};return Object.defineProperty(t,"__esModule",{value:!0}),Object.keys(n).forEach(function(r){var i=Object.getOwnPropertyDescriptor(n,r);Object.defineProperty(t,r,i.get?i:{enumerable:!0,get:function(){return n[r]}})}),t}var jquery={exports:{}};/*!
|
||
* jQuery JavaScript Library v3.7.1
|
||
* https://jquery.com/
|
||
*
|
||
* Copyright OpenJS Foundation and other contributors
|
||
* Released under the MIT license
|
||
* https://jquery.org/license
|
||
*
|
||
* Date: 2023-08-28T13:37Z
|
||
*/(function(n){(function(e,t){n.exports=e.document?t(e,!0):function(r){if(!r.document)throw new Error("jQuery requires a window with a document");return t(r)}})(typeof window<"u"?window:commonjsGlobal,function(e,t){var r=[],i=Object.getPrototypeOf,s=r.slice,l=r.flat?function(o){return r.flat.call(o)}:function(o){return r.concat.apply([],o)},u=r.push,h=r.indexOf,d={},m=d.toString,_=d.hasOwnProperty,S=_.toString,C=S.call(Object),T={},O=function(a){return typeof a=="function"&&typeof a.nodeType!="number"&&typeof a.item!="function"},H=function(a){return a!=null&&a===a.window},R=e.document,Z={type:!0,src:!0,nonce:!0,noModule:!0};function V(o,a,c){c=c||R;var p,g,E=c.createElement("script");if(E.text=o,a)for(p in Z)g=a[p]||a.getAttribute&&a.getAttribute(p),g&&E.setAttribute(p,g);c.head.appendChild(E).parentNode.removeChild(E)}function q(o){return o==null?o+"":typeof o=="object"||typeof o=="function"?d[m.call(o)]||"object":typeof o}var ee="3.7.1",B=/HTML$/i,f=function(o,a){return new f.fn.init(o,a)};f.fn=f.prototype={jquery:ee,constructor:f,length:0,toArray:function(){return s.call(this)},get:function(o){return o==null?s.call(this):o<0?this[o+this.length]:this[o]},pushStack:function(o){var a=f.merge(this.constructor(),o);return a.prevObject=this,a},each:function(o){return f.each(this,o)},map:function(o){return this.pushStack(f.map(this,function(a,c){return o.call(a,c,a)}))},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(f.grep(this,function(o,a){return(a+1)%2}))},odd:function(){return this.pushStack(f.grep(this,function(o,a){return a%2}))},eq:function(o){var a=this.length,c=+o+(o<0?a:0);return this.pushStack(c>=0&&c<a?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:r.sort,splice:r.splice},f.extend=f.fn.extend=function(){var o,a,c,p,g,E,y=arguments[0]||{},A=1,b=arguments.length,N=!1;for(typeof y=="boolean"&&(N=y,y=arguments[A]||{},A++),typeof y!="object"&&!O(y)&&(y={}),A===b&&(y=this,A--);A<b;A++)if((o=arguments[A])!=null)for(a in o)p=o[a],!(a==="__proto__"||y===p)&&(N&&p&&(f.isPlainObject(p)||(g=Array.isArray(p)))?(c=y[a],g&&!Array.isArray(c)?E=[]:!g&&!f.isPlainObject(c)?E={}:E=c,g=!1,y[a]=f.extend(N,E,p)):p!==void 0&&(y[a]=p));return y},f.extend({expando:"jQuery"+(ee+Math.random()).replace(/\D/g,""),isReady:!0,error:function(o){throw new Error(o)},noop:function(){},isPlainObject:function(o){var a,c;return!o||m.call(o)!=="[object Object]"?!1:(a=i(o),a?(c=_.call(a,"constructor")&&a.constructor,typeof c=="function"&&S.call(c)===C):!0)},isEmptyObject:function(o){var a;for(a in o)return!1;return!0},globalEval:function(o,a,c){V(o,{nonce:a&&a.nonce},c)},each:function(o,a){var c,p=0;if(Y(o))for(c=o.length;p<c&&a.call(o[p],p,o[p])!==!1;p++);else for(p in o)if(a.call(o[p],p,o[p])===!1)break;return o},text:function(o){var a,c="",p=0,g=o.nodeType;if(!g)for(;a=o[p++];)c+=f.text(a);return g===1||g===11?o.textContent:g===9?o.documentElement.textContent:g===3||g===4?o.nodeValue:c},makeArray:function(o,a){var c=a||[];return o!=null&&(Y(Object(o))?f.merge(c,typeof o=="string"?[o]:o):u.call(c,o)),c},inArray:function(o,a,c){return a==null?-1:h.call(a,o,c)},isXMLDoc:function(o){var a=o&&o.namespaceURI,c=o&&(o.ownerDocument||o).documentElement;return!B.test(a||c&&c.nodeName||"HTML")},merge:function(o,a){for(var c=+a.length,p=0,g=o.length;p<c;p++)o[g++]=a[p];return o.length=g,o},grep:function(o,a,c){for(var p,g=[],E=0,y=o.length,A=!c;E<y;E++)p=!a(o[E],E),p!==A&&g.push(o[E]);return g},map:function(o,a,c){var p,g,E=0,y=[];if(Y(o))for(p=o.length;E<p;E++)g=a(o[E],E,c),g!=null&&y.push(g);else for(E in o)g=a(o[E],E,c),g!=null&&y.push(g);return l(y)},guid:1,support:T}),typeof Symbol=="function"&&(f.fn[Symbol.iterator]=r[Symbol.iterator]),f.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(o,a){d["[object "+a+"]"]=a.toLowerCase()});function Y(o){var a=!!o&&"length"in o&&o.length,c=q(o);return O(o)||H(o)?!1:c==="array"||a===0||typeof a=="number"&&a>0&&a-1 in o}function U(o,a){return o.nodeName&&o.nodeName.toLowerCase()===a.toLowerCase()}var L=r.pop,z=r.sort,K=r.splice,G="[\\x20\\t\\r\\n\\f]",oe=new RegExp("^"+G+"+|((?:^|[^\\\\])(?:\\\\.)*)"+G+"+$","g");f.contains=function(o,a){var c=a&&a.parentNode;return o===c||!!(c&&c.nodeType===1&&(o.contains?o.contains(c):o.compareDocumentPosition&&o.compareDocumentPosition(c)&16))};var ue=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function de(o,a){return a?o==="\0"?"<22>":o.slice(0,-1)+"\\"+o.charCodeAt(o.length-1).toString(16)+" ":"\\"+o}f.escapeSelector=function(o){return(o+"").replace(ue,de)};var le=R,ve=u;(function(){var o,a,c,p,g,E=ve,y,A,b,N,M,j=f.expando,D=0,W=0,ae=Ut(),ye=Ut(),pe=Ut(),Pe=Ut(),xe=function(v,w){return v===w&&(g=!0),0},Ye="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ze="(?:\\\\[\\da-fA-F]{1,6}"+G+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",Ee="\\["+G+"*("+ze+")(?:"+G+"*([*^$|!~]?=)"+G+`*(?:'((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)"|(`+ze+"))|)"+G+"*\\]",ht=":("+ze+`)(?:\\((('((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|`+Ee+")*)|.*)\\)|)",_e=new RegExp(G+"+","g"),Oe=new RegExp("^"+G+"*,"+G+"*"),Rt=new RegExp("^"+G+"*([>+~]|"+G+")"+G+"*"),cr=new RegExp(G+"|>"),Xe=new RegExp(ht),Pt=new RegExp("^"+ze+"$"),Qe={ID:new RegExp("^#("+ze+")"),CLASS:new RegExp("^\\.("+ze+")"),TAG:new RegExp("^("+ze+"|[*])"),ATTR:new RegExp("^"+Ee),PSEUDO:new RegExp("^"+ht),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+G+"*(even|odd|(([+-]|)(\\d*)n|)"+G+"*(?:([+-]|)"+G+"*(\\d+)|))"+G+"*\\)|)","i"),bool:new RegExp("^(?:"+Ye+")$","i"),needsContext:new RegExp("^"+G+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+G+"*((?:-\\d)?\\d*)"+G+"*\\)|)(?=[^-]|$)","i")},st=/^(?:input|select|textarea|button)$/i,at=/^h\d$/i,Ue=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ur=/[+~]/,nt=new RegExp("\\\\[\\da-fA-F]{1,6}"+G+"?|\\\\([^\\r\\n\\f])","g"),it=function(v,w){var x="0x"+v.slice(1)-65536;return w||(x<0?String.fromCharCode(x+65536):String.fromCharCode(x>>10|55296,x&1023|56320))},In=function(){lt()},Ln=Gt(function(v){return v.disabled===!0&&U(v,"fieldset")},{dir:"parentNode",next:"legend"});function Mn(){try{return y.activeElement}catch{}}try{E.apply(r=s.call(le.childNodes),le.childNodes),r[le.childNodes.length].nodeType}catch{E={apply:function(w,x){ve.apply(w,s.call(x))},call:function(w){ve.apply(w,s.call(arguments,1))}}}function Ae(v,w,x,I){var k,X,Q,ne,J,me,se,ce=w&&w.ownerDocument,ge=w?w.nodeType:9;if(x=x||[],typeof v!="string"||!v||ge!==1&&ge!==9&&ge!==11)return x;if(!I&&(lt(w),w=w||y,b)){if(ge!==11&&(J=Ue.exec(v)))if(k=J[1]){if(ge===9)if(Q=w.getElementById(k)){if(Q.id===k)return E.call(x,Q),x}else return x;else if(ce&&(Q=ce.getElementById(k))&&Ae.contains(w,Q)&&Q.id===k)return E.call(x,Q),x}else{if(J[2])return E.apply(x,w.getElementsByTagName(v)),x;if((k=J[3])&&w.getElementsByClassName)return E.apply(x,w.getElementsByClassName(k)),x}if(!Pe[v+" "]&&(!N||!N.test(v))){if(se=v,ce=w,ge===1&&(cr.test(v)||Rt.test(v))){for(ce=ur.test(v)&&fr(w.parentNode)||w,(ce!=w||!T.scope)&&((ne=w.getAttribute("id"))?ne=f.escapeSelector(ne):w.setAttribute("id",ne=j)),me=It(v),X=me.length;X--;)me[X]=(ne?"#"+ne:":scope")+" "+Wt(me[X]);se=me.join(",")}try{return E.apply(x,ce.querySelectorAll(se)),x}catch{Pe(v,!0)}finally{ne===j&&w.removeAttribute("id")}}}return zr(v.replace(oe,"$1"),w,x,I)}function Ut(){var v=[];function w(x,I){return v.push(x+" ")>a.cacheLength&&delete w[v.shift()],w[x+" "]=I}return w}function Ke(v){return v[j]=!0,v}function Tt(v){var w=y.createElement("fieldset");try{return!!v(w)}catch{return!1}finally{w.parentNode&&w.parentNode.removeChild(w),w=null}}function kn(v){return function(w){return U(w,"input")&&w.type===v}}function jn(v){return function(w){return(U(w,"input")||U(w,"button"))&&w.type===v}}function Kr(v){return function(w){return"form"in w?w.parentNode&&w.disabled===!1?"label"in w?"label"in w.parentNode?w.parentNode.disabled===v:w.disabled===v:w.isDisabled===v||w.isDisabled!==!v&&Ln(w)===v:w.disabled===v:"label"in w?w.disabled===v:!1}}function mt(v){return Ke(function(w){return w=+w,Ke(function(x,I){for(var k,X=v([],x.length,w),Q=X.length;Q--;)x[k=X[Q]]&&(x[k]=!(I[k]=x[k]))})})}function fr(v){return v&&typeof v.getElementsByTagName<"u"&&v}function lt(v){var w,x=v?v.ownerDocument||v:le;return x==y||x.nodeType!==9||!x.documentElement||(y=x,A=y.documentElement,b=!f.isXMLDoc(y),M=A.matches||A.webkitMatchesSelector||A.msMatchesSelector,A.msMatchesSelector&&le!=y&&(w=y.defaultView)&&w.top!==w&&w.addEventListener("unload",In),T.getById=Tt(function(I){return A.appendChild(I).id=f.expando,!y.getElementsByName||!y.getElementsByName(f.expando).length}),T.disconnectedMatch=Tt(function(I){return M.call(I,"*")}),T.scope=Tt(function(){return y.querySelectorAll(":scope")}),T.cssHas=Tt(function(){try{return y.querySelector(":has(*,:jqfake)"),!1}catch{return!0}}),T.getById?(a.filter.ID=function(I){var k=I.replace(nt,it);return function(X){return X.getAttribute("id")===k}},a.find.ID=function(I,k){if(typeof k.getElementById<"u"&&b){var X=k.getElementById(I);return X?[X]:[]}}):(a.filter.ID=function(I){var k=I.replace(nt,it);return function(X){var Q=typeof X.getAttributeNode<"u"&&X.getAttributeNode("id");return Q&&Q.value===k}},a.find.ID=function(I,k){if(typeof k.getElementById<"u"&&b){var X,Q,ne,J=k.getElementById(I);if(J){if(X=J.getAttributeNode("id"),X&&X.value===I)return[J];for(ne=k.getElementsByName(I),Q=0;J=ne[Q++];)if(X=J.getAttributeNode("id"),X&&X.value===I)return[J]}return[]}}),a.find.TAG=function(I,k){return typeof k.getElementsByTagName<"u"?k.getElementsByTagName(I):k.querySelectorAll(I)},a.find.CLASS=function(I,k){if(typeof k.getElementsByClassName<"u"&&b)return k.getElementsByClassName(I)},N=[],Tt(function(I){var k;A.appendChild(I).innerHTML="<a id='"+j+"' href='' disabled='disabled'></a><select id='"+j+"-\r\\' disabled='disabled'><option selected=''></option></select>",I.querySelectorAll("[selected]").length||N.push("\\["+G+"*(?:value|"+Ye+")"),I.querySelectorAll("[id~="+j+"-]").length||N.push("~="),I.querySelectorAll("a#"+j+"+*").length||N.push(".#.+[+~]"),I.querySelectorAll(":checked").length||N.push(":checked"),k=y.createElement("input"),k.setAttribute("type","hidden"),I.appendChild(k).setAttribute("name","D"),A.appendChild(I).disabled=!0,I.querySelectorAll(":disabled").length!==2&&N.push(":enabled",":disabled"),k=y.createElement("input"),k.setAttribute("name",""),I.appendChild(k),I.querySelectorAll("[name='']").length||N.push("\\["+G+"*name"+G+"*="+G+`*(?:''|"")`)}),T.cssHas||N.push(":has"),N=N.length&&new RegExp(N.join("|")),xe=function(I,k){if(I===k)return g=!0,0;var X=!I.compareDocumentPosition-!k.compareDocumentPosition;return X||(X=(I.ownerDocument||I)==(k.ownerDocument||k)?I.compareDocumentPosition(k):1,X&1||!T.sortDetached&&k.compareDocumentPosition(I)===X?I===y||I.ownerDocument==le&&Ae.contains(le,I)?-1:k===y||k.ownerDocument==le&&Ae.contains(le,k)?1:p?h.call(p,I)-h.call(p,k):0:X&4?-1:1)}),y}Ae.matches=function(v,w){return Ae(v,null,null,w)},Ae.matchesSelector=function(v,w){if(lt(v),b&&!Pe[w+" "]&&(!N||!N.test(w)))try{var x=M.call(v,w);if(x||T.disconnectedMatch||v.document&&v.document.nodeType!==11)return x}catch{Pe(w,!0)}return Ae(w,y,null,[v]).length>0},Ae.contains=function(v,w){return(v.ownerDocument||v)!=y&<(v),f.contains(v,w)},Ae.attr=function(v,w){(v.ownerDocument||v)!=y&<(v);var x=a.attrHandle[w.toLowerCase()],I=x&&_.call(a.attrHandle,w.toLowerCase())?x(v,w,!b):void 0;return I!==void 0?I:v.getAttribute(w)},Ae.error=function(v){throw new Error("Syntax error, unrecognized expression: "+v)},f.uniqueSort=function(v){var w,x=[],I=0,k=0;if(g=!T.sortStable,p=!T.sortStable&&s.call(v,0),z.call(v,xe),g){for(;w=v[k++];)w===v[k]&&(I=x.push(k));for(;I--;)K.call(v,x[I],1)}return p=null,v},f.fn.uniqueSort=function(){return this.pushStack(f.uniqueSort(s.apply(this)))},a=f.expr={cacheLength:50,createPseudo:Ke,match:Qe,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(v){return v[1]=v[1].replace(nt,it),v[3]=(v[3]||v[4]||v[5]||"").replace(nt,it),v[2]==="~="&&(v[3]=" "+v[3]+" "),v.slice(0,4)},CHILD:function(v){return v[1]=v[1].toLowerCase(),v[1].slice(0,3)==="nth"?(v[3]||Ae.error(v[0]),v[4]=+(v[4]?v[5]+(v[6]||1):2*(v[3]==="even"||v[3]==="odd")),v[5]=+(v[7]+v[8]||v[3]==="odd")):v[3]&&Ae.error(v[0]),v},PSEUDO:function(v){var w,x=!v[6]&&v[2];return Qe.CHILD.test(v[0])?null:(v[3]?v[2]=v[4]||v[5]||"":x&&Xe.test(x)&&(w=It(x,!0))&&(w=x.indexOf(")",x.length-w)-x.length)&&(v[0]=v[0].slice(0,w),v[2]=x.slice(0,w)),v.slice(0,3))}},filter:{TAG:function(v){var w=v.replace(nt,it).toLowerCase();return v==="*"?function(){return!0}:function(x){return U(x,w)}},CLASS:function(v){var w=ae[v+" "];return w||(w=new RegExp("(^|"+G+")"+v+"("+G+"|$)"))&&ae(v,function(x){return w.test(typeof x.className=="string"&&x.className||typeof x.getAttribute<"u"&&x.getAttribute("class")||"")})},ATTR:function(v,w,x){return function(I){var k=Ae.attr(I,v);return k==null?w==="!=":w?(k+="",w==="="?k===x:w==="!="?k!==x:w==="^="?x&&k.indexOf(x)===0:w==="*="?x&&k.indexOf(x)>-1:w==="$="?x&&k.slice(-x.length)===x:w==="~="?(" "+k.replace(_e," ")+" ").indexOf(x)>-1:w==="|="?k===x||k.slice(0,x.length+1)===x+"-":!1):!0}},CHILD:function(v,w,x,I,k){var X=v.slice(0,3)!=="nth",Q=v.slice(-4)!=="last",ne=w==="of-type";return I===1&&k===0?function(J){return!!J.parentNode}:function(J,me,se){var ce,ge,ie,Se,He,Ie=X!==Q?"nextSibling":"previousSibling",We=J.parentNode,Je=ne&&J.nodeName.toLowerCase(),wt=!se&&!ne,Le=!1;if(We){if(X){for(;Ie;){for(ie=J;ie=ie[Ie];)if(ne?U(ie,Je):ie.nodeType===1)return!1;He=Ie=v==="only"&&!He&&"nextSibling"}return!0}if(He=[Q?We.firstChild:We.lastChild],Q&&wt){for(ge=We[j]||(We[j]={}),ce=ge[v]||[],Se=ce[0]===D&&ce[1],Le=Se&&ce[2],ie=Se&&We.childNodes[Se];ie=++Se&&ie&&ie[Ie]||(Le=Se=0)||He.pop();)if(ie.nodeType===1&&++Le&&ie===J){ge[v]=[D,Se,Le];break}}else if(wt&&(ge=J[j]||(J[j]={}),ce=ge[v]||[],Se=ce[0]===D&&ce[1],Le=Se),Le===!1)for(;(ie=++Se&&ie&&ie[Ie]||(Le=Se=0)||He.pop())&&!((ne?U(ie,Je):ie.nodeType===1)&&++Le&&(wt&&(ge=ie[j]||(ie[j]={}),ge[v]=[D,Le]),ie===J)););return Le-=k,Le===I||Le%I===0&&Le/I>=0}}},PSEUDO:function(v,w){var x,I=a.pseudos[v]||a.setFilters[v.toLowerCase()]||Ae.error("unsupported pseudo: "+v);return I[j]?I(w):I.length>1?(x=[v,v,"",w],a.setFilters.hasOwnProperty(v.toLowerCase())?Ke(function(k,X){for(var Q,ne=I(k,w),J=ne.length;J--;)Q=h.call(k,ne[J]),k[Q]=!(X[Q]=ne[J])}):function(k){return I(k,0,x)}):I}},pseudos:{not:Ke(function(v){var w=[],x=[],I=mr(v.replace(oe,"$1"));return I[j]?Ke(function(k,X,Q,ne){for(var J,me=I(k,null,ne,[]),se=k.length;se--;)(J=me[se])&&(k[se]=!(X[se]=J))}):function(k,X,Q){return w[0]=k,I(w,null,Q,x),w[0]=null,!x.pop()}}),has:Ke(function(v){return function(w){return Ae(v,w).length>0}}),contains:Ke(function(v){return v=v.replace(nt,it),function(w){return(w.textContent||f.text(w)).indexOf(v)>-1}}),lang:Ke(function(v){return Pt.test(v||"")||Ae.error("unsupported lang: "+v),v=v.replace(nt,it).toLowerCase(),function(w){var x;do if(x=b?w.lang:w.getAttribute("xml:lang")||w.getAttribute("lang"))return x=x.toLowerCase(),x===v||x.indexOf(v+"-")===0;while((w=w.parentNode)&&w.nodeType===1);return!1}}),target:function(v){var w=e.location&&e.location.hash;return w&&w.slice(1)===v.id},root:function(v){return v===A},focus:function(v){return v===Mn()&&y.hasFocus()&&!!(v.type||v.href||~v.tabIndex)},enabled:Kr(!1),disabled:Kr(!0),checked:function(v){return U(v,"input")&&!!v.checked||U(v,"option")&&!!v.selected},selected:function(v){return v.parentNode&&v.parentNode.selectedIndex,v.selected===!0},empty:function(v){for(v=v.firstChild;v;v=v.nextSibling)if(v.nodeType<6)return!1;return!0},parent:function(v){return!a.pseudos.empty(v)},header:function(v){return at.test(v.nodeName)},input:function(v){return st.test(v.nodeName)},button:function(v){return U(v,"input")&&v.type==="button"||U(v,"button")},text:function(v){var w;return U(v,"input")&&v.type==="text"&&((w=v.getAttribute("type"))==null||w.toLowerCase()==="text")},first:mt(function(){return[0]}),last:mt(function(v,w){return[w-1]}),eq:mt(function(v,w,x){return[x<0?x+w:x]}),even:mt(function(v,w){for(var x=0;x<w;x+=2)v.push(x);return v}),odd:mt(function(v,w){for(var x=1;x<w;x+=2)v.push(x);return v}),lt:mt(function(v,w,x){var I;for(x<0?I=x+w:x>w?I=w:I=x;--I>=0;)v.push(I);return v}),gt:mt(function(v,w,x){for(var I=x<0?x+w:x;++I<w;)v.push(I);return v})}},a.pseudos.nth=a.pseudos.eq;for(o in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})a.pseudos[o]=kn(o);for(o in{submit:!0,reset:!0})a.pseudos[o]=jn(o);function Yr(){}Yr.prototype=a.filters=a.pseudos,a.setFilters=new Yr;function It(v,w){var x,I,k,X,Q,ne,J,me=ye[v+" "];if(me)return w?0:me.slice(0);for(Q=v,ne=[],J=a.preFilter;Q;){(!x||(I=Oe.exec(Q)))&&(I&&(Q=Q.slice(I[0].length)||Q),ne.push(k=[])),x=!1,(I=Rt.exec(Q))&&(x=I.shift(),k.push({value:x,type:I[0].replace(oe," ")}),Q=Q.slice(x.length));for(X in a.filter)(I=Qe[X].exec(Q))&&(!J[X]||(I=J[X](I)))&&(x=I.shift(),k.push({value:x,type:X,matches:I}),Q=Q.slice(x.length));if(!x)break}return w?Q.length:Q?Ae.error(v):ye(v,ne).slice(0)}function Wt(v){for(var w=0,x=v.length,I="";w<x;w++)I+=v[w].value;return I}function Gt(v,w,x){var I=w.dir,k=w.next,X=k||I,Q=x&&X==="parentNode",ne=W++;return w.first?function(J,me,se){for(;J=J[I];)if(J.nodeType===1||Q)return v(J,me,se);return!1}:function(J,me,se){var ce,ge,ie=[D,ne];if(se){for(;J=J[I];)if((J.nodeType===1||Q)&&v(J,me,se))return!0}else for(;J=J[I];)if(J.nodeType===1||Q)if(ge=J[j]||(J[j]={}),k&&U(J,k))J=J[I]||J;else{if((ce=ge[X])&&ce[0]===D&&ce[1]===ne)return ie[2]=ce[2];if(ge[X]=ie,ie[2]=v(J,me,se))return!0}return!1}}function dr(v){return v.length>1?function(w,x,I){for(var k=v.length;k--;)if(!v[k](w,x,I))return!1;return!0}:v[0]}function Hn(v,w,x){for(var I=0,k=w.length;I<k;I++)Ae(v,w[I],x);return x}function qt(v,w,x,I,k){for(var X,Q=[],ne=0,J=v.length,me=w!=null;ne<J;ne++)(X=v[ne])&&(!x||x(X,I,k))&&(Q.push(X),me&&w.push(ne));return Q}function pr(v,w,x,I,k,X){return I&&!I[j]&&(I=pr(I)),k&&!k[j]&&(k=pr(k,X)),Ke(function(Q,ne,J,me){var se,ce,ge,ie,Se=[],He=[],Ie=ne.length,We=Q||Hn(w||"*",J.nodeType?[J]:J,[]),Je=v&&(Q||!w)?qt(We,Se,v,J,me):We;if(x?(ie=k||(Q?v:Ie||I)?[]:ne,x(Je,ie,J,me)):ie=Je,I)for(se=qt(ie,He),I(se,[],J,me),ce=se.length;ce--;)(ge=se[ce])&&(ie[He[ce]]=!(Je[He[ce]]=ge));if(Q){if(k||v){if(k){for(se=[],ce=ie.length;ce--;)(ge=ie[ce])&&se.push(Je[ce]=ge);k(null,ie=[],se,me)}for(ce=ie.length;ce--;)(ge=ie[ce])&&(se=k?h.call(Q,ge):Se[ce])>-1&&(Q[se]=!(ne[se]=ge))}}else ie=qt(ie===ne?ie.splice(Ie,ie.length):ie),k?k(null,ne,ie,me):E.apply(ne,ie)})}function hr(v){for(var w,x,I,k=v.length,X=a.relative[v[0].type],Q=X||a.relative[" "],ne=X?1:0,J=Gt(function(ce){return ce===w},Q,!0),me=Gt(function(ce){return h.call(w,ce)>-1},Q,!0),se=[function(ce,ge,ie){var Se=!X&&(ie||ge!=c)||((w=ge).nodeType?J(ce,ge,ie):me(ce,ge,ie));return w=null,Se}];ne<k;ne++)if(x=a.relative[v[ne].type])se=[Gt(dr(se),x)];else{if(x=a.filter[v[ne].type].apply(null,v[ne].matches),x[j]){for(I=++ne;I<k&&!a.relative[v[I].type];I++);return pr(ne>1&&dr(se),ne>1&&Wt(v.slice(0,ne-1).concat({value:v[ne-2].type===" "?"*":""})).replace(oe,"$1"),x,ne<I&&hr(v.slice(ne,I)),I<k&&hr(v=v.slice(I)),I<k&&Wt(v))}se.push(x)}return dr(se)}function Fn(v,w){var x=w.length>0,I=v.length>0,k=function(X,Q,ne,J,me){var se,ce,ge,ie=0,Se="0",He=X&&[],Ie=[],We=c,Je=X||I&&a.find.TAG("*",me),wt=D+=We==null?1:Math.random()||.1,Le=Je.length;for(me&&(c=Q==y||Q||me);Se!==Le&&(se=Je[Se])!=null;Se++){if(I&&se){for(ce=0,!Q&&se.ownerDocument!=y&&(lt(se),ne=!b);ge=v[ce++];)if(ge(se,Q||y,ne)){E.call(J,se);break}me&&(D=wt)}x&&((se=!ge&&se)&&ie--,X&&He.push(se))}if(ie+=Se,x&&Se!==ie){for(ce=0;ge=w[ce++];)ge(He,Ie,Q,ne);if(X){if(ie>0)for(;Se--;)He[Se]||Ie[Se]||(Ie[Se]=L.call(J));Ie=qt(Ie)}E.apply(J,Ie),me&&!X&&Ie.length>0&&ie+w.length>1&&f.uniqueSort(J)}return me&&(D=wt,c=We),He};return x?Ke(k):k}function mr(v,w){var x,I=[],k=[],X=pe[v+" "];if(!X){for(w||(w=It(v)),x=w.length;x--;)X=hr(w[x]),X[j]?I.push(X):k.push(X);X=pe(v,Fn(k,I)),X.selector=v}return X}function zr(v,w,x,I){var k,X,Q,ne,J,me=typeof v=="function"&&v,se=!I&&It(v=me.selector||v);if(x=x||[],se.length===1){if(X=se[0]=se[0].slice(0),X.length>2&&(Q=X[0]).type==="ID"&&w.nodeType===9&&b&&a.relative[X[1].type]){if(w=(a.find.ID(Q.matches[0].replace(nt,it),w)||[])[0],w)me&&(w=w.parentNode);else return x;v=v.slice(X.shift().value.length)}for(k=Qe.needsContext.test(v)?0:X.length;k--&&(Q=X[k],!a.relative[ne=Q.type]);)if((J=a.find[ne])&&(I=J(Q.matches[0].replace(nt,it),ur.test(X[0].type)&&fr(w.parentNode)||w))){if(X.splice(k,1),v=I.length&&Wt(X),!v)return E.apply(x,I),x;break}}return(me||mr(v,se))(I,w,!b,x,!w||ur.test(v)&&fr(w.parentNode)||w),x}T.sortStable=j.split("").sort(xe).join("")===j,lt(),T.sortDetached=Tt(function(v){return v.compareDocumentPosition(y.createElement("fieldset"))&1}),f.find=Ae,f.expr[":"]=f.expr.pseudos,f.unique=f.uniqueSort,Ae.compile=mr,Ae.select=zr,Ae.setDocument=lt,Ae.tokenize=It,Ae.escape=f.escapeSelector,Ae.getText=f.text,Ae.isXML=f.isXMLDoc,Ae.selectors=f.expr,Ae.support=f.support,Ae.uniqueSort=f.uniqueSort})();var he=function(o,a,c){for(var p=[],g=c!==void 0;(o=o[a])&&o.nodeType!==9;)if(o.nodeType===1){if(g&&f(o).is(c))break;p.push(o)}return p},De=function(o,a){for(var c=[];o;o=o.nextSibling)o.nodeType===1&&o!==a&&c.push(o);return c},fe=f.expr.match.needsContext,be=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function we(o,a,c){return O(a)?f.grep(o,function(p,g){return!!a.call(p,g,p)!==c}):a.nodeType?f.grep(o,function(p){return p===a!==c}):typeof a!="string"?f.grep(o,function(p){return h.call(a,p)>-1!==c}):f.filter(a,o,c)}f.filter=function(o,a,c){var p=a[0];return c&&(o=":not("+o+")"),a.length===1&&p.nodeType===1?f.find.matchesSelector(p,o)?[p]:[]:f.find.matches(o,f.grep(a,function(g){return g.nodeType===1}))},f.fn.extend({find:function(o){var a,c,p=this.length,g=this;if(typeof o!="string")return this.pushStack(f(o).filter(function(){for(a=0;a<p;a++)if(f.contains(g[a],this))return!0}));for(c=this.pushStack([]),a=0;a<p;a++)f.find(o,g[a],c);return p>1?f.uniqueSort(c):c},filter:function(o){return this.pushStack(we(this,o||[],!1))},not:function(o){return this.pushStack(we(this,o||[],!0))},is:function(o){return!!we(this,typeof o=="string"&&fe.test(o)?f(o):o||[],!1).length}});var Ne,F=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,te=f.fn.init=function(o,a,c){var p,g;if(!o)return this;if(c=c||Ne,typeof o=="string")if(o[0]==="<"&&o[o.length-1]===">"&&o.length>=3?p=[null,o,null]:p=F.exec(o),p&&(p[1]||!a))if(p[1]){if(a=a instanceof f?a[0]:a,f.merge(this,f.parseHTML(p[1],a&&a.nodeType?a.ownerDocument||a:R,!0)),be.test(p[1])&&f.isPlainObject(a))for(p in a)O(this[p])?this[p](a[p]):this.attr(p,a[p]);return this}else return g=R.getElementById(p[2]),g&&(this[0]=g,this.length=1),this;else return!a||a.jquery?(a||c).find(o):this.constructor(a).find(o);else{if(o.nodeType)return this[0]=o,this.length=1,this;if(O(o))return c.ready!==void 0?c.ready(o):o(f)}return f.makeArray(o,this)};te.prototype=f.fn,Ne=f(R);var Te=/^(?:parents|prev(?:Until|All))/,$e={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({has:function(o){var a=f(o,this),c=a.length;return this.filter(function(){for(var p=0;p<c;p++)if(f.contains(this,a[p]))return!0})},closest:function(o,a){var c,p=0,g=this.length,E=[],y=typeof o!="string"&&f(o);if(!fe.test(o)){for(;p<g;p++)for(c=this[p];c&&c!==a;c=c.parentNode)if(c.nodeType<11&&(y?y.index(c)>-1:c.nodeType===1&&f.find.matchesSelector(c,o))){E.push(c);break}}return this.pushStack(E.length>1?f.uniqueSort(E):E)},index:function(o){return o?typeof o=="string"?h.call(f(o),this[0]):h.call(this,o.jquery?o[0]:o):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(o,a){return this.pushStack(f.uniqueSort(f.merge(this.get(),f(o,a))))},addBack:function(o){return this.add(o==null?this.prevObject:this.prevObject.filter(o))}});function Me(o,a){for(;(o=o[a])&&o.nodeType!==1;);return o}f.each({parent:function(o){var a=o.parentNode;return a&&a.nodeType!==11?a:null},parents:function(o){return he(o,"parentNode")},parentsUntil:function(o,a,c){return he(o,"parentNode",c)},next:function(o){return Me(o,"nextSibling")},prev:function(o){return Me(o,"previousSibling")},nextAll:function(o){return he(o,"nextSibling")},prevAll:function(o){return he(o,"previousSibling")},nextUntil:function(o,a,c){return he(o,"nextSibling",c)},prevUntil:function(o,a,c){return he(o,"previousSibling",c)},siblings:function(o){return De((o.parentNode||{}).firstChild,o)},children:function(o){return De(o.firstChild)},contents:function(o){return o.contentDocument!=null&&i(o.contentDocument)?o.contentDocument:(U(o,"template")&&(o=o.content||o),f.merge([],o.childNodes))}},function(o,a){f.fn[o]=function(c,p){var g=f.map(this,a,c);return o.slice(-5)!=="Until"&&(p=c),p&&typeof p=="string"&&(g=f.filter(p,g)),this.length>1&&($e[o]||f.uniqueSort(g),Te.test(o)&&g.reverse()),this.pushStack(g)}});var Ce=/[^\x20\t\r\n\f]+/g;function Ze(o){var a={};return f.each(o.match(Ce)||[],function(c,p){a[p]=!0}),a}f.Callbacks=function(o){o=typeof o=="string"?Ze(o):f.extend({},o);var a,c,p,g,E=[],y=[],A=-1,b=function(){for(g=g||o.once,p=a=!0;y.length;A=-1)for(c=y.shift();++A<E.length;)E[A].apply(c[0],c[1])===!1&&o.stopOnFalse&&(A=E.length,c=!1);o.memory||(c=!1),a=!1,g&&(c?E=[]:E="")},N={add:function(){return E&&(c&&!a&&(A=E.length-1,y.push(c)),function M(j){f.each(j,function(D,W){O(W)?(!o.unique||!N.has(W))&&E.push(W):W&&W.length&&q(W)!=="string"&&M(W)})}(arguments),c&&!a&&b()),this},remove:function(){return f.each(arguments,function(M,j){for(var D;(D=f.inArray(j,E,D))>-1;)E.splice(D,1),D<=A&&A--}),this},has:function(M){return M?f.inArray(M,E)>-1:E.length>0},empty:function(){return E&&(E=[]),this},disable:function(){return g=y=[],E=c="",this},disabled:function(){return!E},lock:function(){return g=y=[],!c&&!a&&(E=c=""),this},locked:function(){return!!g},fireWith:function(M,j){return g||(j=j||[],j=[M,j.slice?j.slice():j],y.push(j),a||b()),this},fire:function(){return N.fireWith(this,arguments),this},fired:function(){return!!p}};return N};function Fe(o){return o}function ct(o){throw o}function Lt(o,a,c,p){var g;try{o&&O(g=o.promise)?g.call(o).done(a).fail(c):o&&O(g=o.then)?g.call(o,a,c):a.apply(void 0,[o].slice(p))}catch(E){c.apply(void 0,[E])}}f.extend({Deferred:function(o){var a=[["notify","progress",f.Callbacks("memory"),f.Callbacks("memory"),2],["resolve","done",f.Callbacks("once memory"),f.Callbacks("once memory"),0,"resolved"],["reject","fail",f.Callbacks("once memory"),f.Callbacks("once memory"),1,"rejected"]],c="pending",p={state:function(){return c},always:function(){return g.done(arguments).fail(arguments),this},catch:function(E){return p.then(null,E)},pipe:function(){var E=arguments;return f.Deferred(function(y){f.each(a,function(A,b){var N=O(E[b[4]])&&E[b[4]];g[b[1]](function(){var M=N&&N.apply(this,arguments);M&&O(M.promise)?M.promise().progress(y.notify).done(y.resolve).fail(y.reject):y[b[0]+"With"](this,N?[M]:arguments)})}),E=null}).promise()},then:function(E,y,A){var b=0;function N(M,j,D,W){return function(){var ae=this,ye=arguments,pe=function(){var xe,Ye;if(!(M<b)){if(xe=D.apply(ae,ye),xe===j.promise())throw new TypeError("Thenable self-resolution");Ye=xe&&(typeof xe=="object"||typeof xe=="function")&&xe.then,O(Ye)?W?Ye.call(xe,N(b,j,Fe,W),N(b,j,ct,W)):(b++,Ye.call(xe,N(b,j,Fe,W),N(b,j,ct,W),N(b,j,Fe,j.notifyWith))):(D!==Fe&&(ae=void 0,ye=[xe]),(W||j.resolveWith)(ae,ye))}},Pe=W?pe:function(){try{pe()}catch(xe){f.Deferred.exceptionHook&&f.Deferred.exceptionHook(xe,Pe.error),M+1>=b&&(D!==ct&&(ae=void 0,ye=[xe]),j.rejectWith(ae,ye))}};M?Pe():(f.Deferred.getErrorHook?Pe.error=f.Deferred.getErrorHook():f.Deferred.getStackHook&&(Pe.error=f.Deferred.getStackHook()),e.setTimeout(Pe))}}return f.Deferred(function(M){a[0][3].add(N(0,M,O(A)?A:Fe,M.notifyWith)),a[1][3].add(N(0,M,O(E)?E:Fe)),a[2][3].add(N(0,M,O(y)?y:ct))}).promise()},promise:function(E){return E!=null?f.extend(E,p):p}},g={};return f.each(a,function(E,y){var A=y[2],b=y[5];p[y[1]]=A.add,b&&A.add(function(){c=b},a[3-E][2].disable,a[3-E][3].disable,a[0][2].lock,a[0][3].lock),A.add(y[3].fire),g[y[0]]=function(){return g[y[0]+"With"](this===g?void 0:this,arguments),this},g[y[0]+"With"]=A.fireWith}),p.promise(g),o&&o.call(g,g),g},when:function(o){var a=arguments.length,c=a,p=Array(c),g=s.call(arguments),E=f.Deferred(),y=function(A){return function(b){p[A]=this,g[A]=arguments.length>1?s.call(arguments):b,--a||E.resolveWith(p,g)}};if(a<=1&&(Lt(o,E.done(y(c)).resolve,E.reject,!a),E.state()==="pending"||O(g[c]&&g[c].then)))return E.then();for(;c--;)Lt(g[c],y(c),E.reject);return E.promise()}});var Kt=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;f.Deferred.exceptionHook=function(o,a){e.console&&e.console.warn&&o&&Kt.test(o.name)&&e.console.warn("jQuery.Deferred exception: "+o.message,o.stack,a)},f.readyException=function(o){e.setTimeout(function(){throw o})};var gt=f.Deferred();f.fn.ready=function(o){return gt.then(o).catch(function(a){f.readyException(a)}),this},f.extend({isReady:!1,readyWait:1,ready:function(o){(o===!0?--f.readyWait:f.isReady)||(f.isReady=!0,!(o!==!0&&--f.readyWait>0)&>.resolveWith(R,[f]))}}),f.ready.then=gt.then;function ut(){R.removeEventListener("DOMContentLoaded",ut),e.removeEventListener("load",ut),f.ready()}R.readyState==="complete"||R.readyState!=="loading"&&!R.documentElement.doScroll?e.setTimeout(f.ready):(R.addEventListener("DOMContentLoaded",ut),e.addEventListener("load",ut));var Ge=function(o,a,c,p,g,E,y){var A=0,b=o.length,N=c==null;if(q(c)==="object"){g=!0;for(A in c)Ge(o,a,A,c[A],!0,E,y)}else if(p!==void 0&&(g=!0,O(p)||(y=!0),N&&(y?(a.call(o,p),a=null):(N=a,a=function(M,j,D){return N.call(f(M),D)})),a))for(;A<b;A++)a(o[A],c,y?p:p.call(o[A],A,a(o[A],c)));return g?o:N?a.call(o):b?a(o[0],c):E},Yt=/^-ms-/,et=/-([a-z])/g;function Et(o,a){return a.toUpperCase()}function Be(o){return o.replace(Yt,"ms-").replace(et,Et)}var ot=function(o){return o.nodeType===1||o.nodeType===9||!+o.nodeType};function tt(){this.expando=f.expando+tt.uid++}tt.uid=1,tt.prototype={cache:function(o){var a=o[this.expando];return a||(a={},ot(o)&&(o.nodeType?o[this.expando]=a:Object.defineProperty(o,this.expando,{value:a,configurable:!0}))),a},set:function(o,a,c){var p,g=this.cache(o);if(typeof a=="string")g[Be(a)]=c;else for(p in a)g[Be(p)]=a[p];return g},get:function(o,a){return a===void 0?this.cache(o):o[this.expando]&&o[this.expando][Be(a)]},access:function(o,a,c){return a===void 0||a&&typeof a=="string"&&c===void 0?this.get(o,a):(this.set(o,a,c),c!==void 0?c:a)},remove:function(o,a){var c,p=o[this.expando];if(p!==void 0){if(a!==void 0)for(Array.isArray(a)?a=a.map(Be):(a=Be(a),a=a in p?[a]:a.match(Ce)||[]),c=a.length;c--;)delete p[a[c]];(a===void 0||f.isEmptyObject(p))&&(o.nodeType?o[this.expando]=void 0:delete o[this.expando])}},hasData:function(o){var a=o[this.expando];return a!==void 0&&!f.isEmptyObject(a)}};var re=new tt,Re=new tt,Mt=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,kt=/[A-Z]/g;function Xr(o){return o==="true"?!0:o==="false"?!1:o==="null"?null:o===+o+""?+o:Mt.test(o)?JSON.parse(o):o}function gr(o,a,c){var p;if(c===void 0&&o.nodeType===1)if(p="data-"+a.replace(kt,"-$&").toLowerCase(),c=o.getAttribute(p),typeof c=="string"){try{c=Xr(c)}catch{}Re.set(o,a,c)}else c=void 0;return c}f.extend({hasData:function(o){return Re.hasData(o)||re.hasData(o)},data:function(o,a,c){return Re.access(o,a,c)},removeData:function(o,a){Re.remove(o,a)},_data:function(o,a,c){return re.access(o,a,c)},_removeData:function(o,a){re.remove(o,a)}}),f.fn.extend({data:function(o,a){var c,p,g,E=this[0],y=E&&E.attributes;if(o===void 0){if(this.length&&(g=Re.get(E),E.nodeType===1&&!re.get(E,"hasDataAttrs"))){for(c=y.length;c--;)y[c]&&(p=y[c].name,p.indexOf("data-")===0&&(p=Be(p.slice(5)),gr(E,p,g[p])));re.set(E,"hasDataAttrs",!0)}return g}return typeof o=="object"?this.each(function(){Re.set(this,o)}):Ge(this,function(A){var b;if(E&&A===void 0)return b=Re.get(E,o),b!==void 0||(b=gr(E,o),b!==void 0)?b:void 0;this.each(function(){Re.set(this,o,A)})},null,a,arguments.length>1,null,!0)},removeData:function(o){return this.each(function(){Re.remove(this,o)})}}),f.extend({queue:function(o,a,c){var p;if(o)return a=(a||"fx")+"queue",p=re.get(o,a),c&&(!p||Array.isArray(c)?p=re.access(o,a,f.makeArray(c)):p.push(c)),p||[]},dequeue:function(o,a){a=a||"fx";var c=f.queue(o,a),p=c.length,g=c.shift(),E=f._queueHooks(o,a),y=function(){f.dequeue(o,a)};g==="inprogress"&&(g=c.shift(),p--),g&&(a==="fx"&&c.unshift("inprogress"),delete E.stop,g.call(o,y,E)),!p&&E&&E.empty.fire()},_queueHooks:function(o,a){var c=a+"queueHooks";return re.get(o,c)||re.access(o,c,{empty:f.Callbacks("once memory").add(function(){re.remove(o,[a+"queue",c])})})}}),f.fn.extend({queue:function(o,a){var c=2;return typeof o!="string"&&(a=o,o="fx",c--),arguments.length<c?f.queue(this[0],o):a===void 0?this:this.each(function(){var p=f.queue(this,o,a);f._queueHooks(this,o),o==="fx"&&p[0]!=="inprogress"&&f.dequeue(this,o)})},dequeue:function(o){return this.each(function(){f.dequeue(this,o)})},clearQueue:function(o){return this.queue(o||"fx",[])},promise:function(o,a){var c,p=1,g=f.Deferred(),E=this,y=this.length,A=function(){--p||g.resolveWith(E,[E])};for(typeof o!="string"&&(a=o,o=void 0),o=o||"fx";y--;)c=re.get(E[y],o+"queueHooks"),c&&c.empty&&(p++,c.empty.add(A));return A(),g.promise(a)}});var Er=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,$t=new RegExp("^(?:([+-])=|)("+Er+")([a-z%]*)$","i"),rt=["Top","Right","Bottom","Left"],ft=R.documentElement,yt=function(o){return f.contains(o.ownerDocument,o)},Qr={composed:!0};ft.getRootNode&&(yt=function(o){return f.contains(o.ownerDocument,o)||o.getRootNode(Qr)===o.ownerDocument});var jt=function(o,a){return o=a||o,o.style.display==="none"||o.style.display===""&&yt(o)&&f.css(o,"display")==="none"};function yr(o,a,c,p){var g,E,y=20,A=p?function(){return p.cur()}:function(){return f.css(o,a,"")},b=A(),N=c&&c[3]||(f.cssNumber[a]?"":"px"),M=o.nodeType&&(f.cssNumber[a]||N!=="px"&&+b)&&$t.exec(f.css(o,a));if(M&&M[3]!==N){for(b=b/2,N=N||M[3],M=+b||1;y--;)f.style(o,a,M+N),(1-E)*(1-(E=A()/b||.5))<=0&&(y=0),M=M/E;M=M*2,f.style(o,a,M+N),c=c||[]}return c&&(M=+M||+b||0,g=c[1]?M+(c[1]+1)*c[2]:+c[2],p&&(p.unit=N,p.start=M,p.end=g)),g}var _r={};function Jr(o){var a,c=o.ownerDocument,p=o.nodeName,g=_r[p];return g||(a=c.body.appendChild(c.createElement(p)),g=f.css(a,"display"),a.parentNode.removeChild(a),g==="none"&&(g="block"),_r[p]=g,g)}function _t(o,a){for(var c,p,g=[],E=0,y=o.length;E<y;E++)p=o[E],p.style&&(c=p.style.display,a?(c==="none"&&(g[E]=re.get(p,"display")||null,g[E]||(p.style.display="")),p.style.display===""&&jt(p)&&(g[E]=Jr(p))):c!=="none"&&(g[E]="none",re.set(p,"display",c)));for(E=0;E<y;E++)g[E]!=null&&(o[E].style.display=g[E]);return o}f.fn.extend({show:function(){return _t(this,!0)},hide:function(){return _t(this)},toggle:function(o){return typeof o=="boolean"?o?this.show():this.hide():this.each(function(){jt(this)?f(this).show():f(this).hide()})}});var Ct=/^(?:checkbox|radio)$/i,vr=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,br=/^$|^module$|\/(?:java|ecma)script/i;(function(){var o=R.createDocumentFragment(),a=o.appendChild(R.createElement("div")),c=R.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),T.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="<textarea>x</textarea>",T.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,a.innerHTML="<option></option>",T.option=!!a.lastChild})();var Ve={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,"",""]};Ve.tbody=Ve.tfoot=Ve.colgroup=Ve.caption=Ve.thead,Ve.th=Ve.td,T.option||(Ve.optgroup=Ve.option=[1,"<select multiple='multiple'>","</select>"]);function ke(o,a){var c;return typeof o.getElementsByTagName<"u"?c=o.getElementsByTagName(a||"*"):typeof o.querySelectorAll<"u"?c=o.querySelectorAll(a||"*"):c=[],a===void 0||a&&U(o,a)?f.merge([o],c):c}function zt(o,a){for(var c=0,p=o.length;c<p;c++)re.set(o[c],"globalEval",!a||re.get(a[c],"globalEval"))}var Zr=/<|&#?\w+;/;function Ar(o,a,c,p,g){for(var E,y,A,b,N,M,j=a.createDocumentFragment(),D=[],W=0,ae=o.length;W<ae;W++)if(E=o[W],E||E===0)if(q(E)==="object")f.merge(D,E.nodeType?[E]:E);else if(!Zr.test(E))D.push(a.createTextNode(E));else{for(y=y||j.appendChild(a.createElement("div")),A=(vr.exec(E)||["",""])[1].toLowerCase(),b=Ve[A]||Ve._default,y.innerHTML=b[1]+f.htmlPrefilter(E)+b[2],M=b[0];M--;)y=y.lastChild;f.merge(D,y.childNodes),y=j.firstChild,y.textContent=""}for(j.textContent="",W=0;E=D[W++];){if(p&&f.inArray(E,p)>-1){g&&g.push(E);continue}if(N=yt(E),y=ke(j.appendChild(E),"script"),N&&zt(y),c)for(M=0;E=y[M++];)br.test(E.type||"")&&c.push(E)}return j}var Sr=/^([^.]*)(?:\.(.+)|)/;function vt(){return!0}function bt(){return!1}function Xt(o,a,c,p,g,E){var y,A;if(typeof a=="object"){typeof c!="string"&&(p=p||c,c=void 0);for(A in a)Xt(o,A,c,p,a[A],E);return o}if(p==null&&g==null?(g=c,p=c=void 0):g==null&&(typeof c=="string"?(g=p,p=void 0):(g=p,p=c,c=void 0)),g===!1)g=bt;else if(!g)return o;return E===1&&(y=g,g=function(b){return f().off(b),y.apply(this,arguments)},g.guid=y.guid||(y.guid=f.guid++)),o.each(function(){f.event.add(this,a,g,p,c)})}f.event={global:{},add:function(o,a,c,p,g){var E,y,A,b,N,M,j,D,W,ae,ye,pe=re.get(o);if(ot(o))for(c.handler&&(E=c,c=E.handler,g=E.selector),g&&f.find.matchesSelector(ft,g),c.guid||(c.guid=f.guid++),(b=pe.events)||(b=pe.events=Object.create(null)),(y=pe.handle)||(y=pe.handle=function(Pe){return typeof f<"u"&&f.event.triggered!==Pe.type?f.event.dispatch.apply(o,arguments):void 0}),a=(a||"").match(Ce)||[""],N=a.length;N--;)A=Sr.exec(a[N])||[],W=ye=A[1],ae=(A[2]||"").split(".").sort(),W&&(j=f.event.special[W]||{},W=(g?j.delegateType:j.bindType)||W,j=f.event.special[W]||{},M=f.extend({type:W,origType:ye,data:p,handler:c,guid:c.guid,selector:g,needsContext:g&&f.expr.match.needsContext.test(g),namespace:ae.join(".")},E),(D=b[W])||(D=b[W]=[],D.delegateCount=0,(!j.setup||j.setup.call(o,p,ae,y)===!1)&&o.addEventListener&&o.addEventListener(W,y)),j.add&&(j.add.call(o,M),M.handler.guid||(M.handler.guid=c.guid)),g?D.splice(D.delegateCount++,0,M):D.push(M),f.event.global[W]=!0)},remove:function(o,a,c,p,g){var E,y,A,b,N,M,j,D,W,ae,ye,pe=re.hasData(o)&&re.get(o);if(!(!pe||!(b=pe.events))){for(a=(a||"").match(Ce)||[""],N=a.length;N--;){if(A=Sr.exec(a[N])||[],W=ye=A[1],ae=(A[2]||"").split(".").sort(),!W){for(W in b)f.event.remove(o,W+a[N],c,p,!0);continue}for(j=f.event.special[W]||{},W=(p?j.delegateType:j.bindType)||W,D=b[W]||[],A=A[2]&&new RegExp("(^|\\.)"+ae.join("\\.(?:.*\\.|)")+"(\\.|$)"),y=E=D.length;E--;)M=D[E],(g||ye===M.origType)&&(!c||c.guid===M.guid)&&(!A||A.test(M.namespace))&&(!p||p===M.selector||p==="**"&&M.selector)&&(D.splice(E,1),M.selector&&D.delegateCount--,j.remove&&j.remove.call(o,M));y&&!D.length&&((!j.teardown||j.teardown.call(o,ae,pe.handle)===!1)&&f.removeEvent(o,W,pe.handle),delete b[W])}f.isEmptyObject(b)&&re.remove(o,"handle events")}},dispatch:function(o){var a,c,p,g,E,y,A=new Array(arguments.length),b=f.event.fix(o),N=(re.get(this,"events")||Object.create(null))[b.type]||[],M=f.event.special[b.type]||{};for(A[0]=b,a=1;a<arguments.length;a++)A[a]=arguments[a];if(b.delegateTarget=this,!(M.preDispatch&&M.preDispatch.call(this,b)===!1)){for(y=f.event.handlers.call(this,b,N),a=0;(g=y[a++])&&!b.isPropagationStopped();)for(b.currentTarget=g.elem,c=0;(E=g.handlers[c++])&&!b.isImmediatePropagationStopped();)(!b.rnamespace||E.namespace===!1||b.rnamespace.test(E.namespace))&&(b.handleObj=E,b.data=E.data,p=((f.event.special[E.origType]||{}).handle||E.handler).apply(g.elem,A),p!==void 0&&(b.result=p)===!1&&(b.preventDefault(),b.stopPropagation()));return M.postDispatch&&M.postDispatch.call(this,b),b.result}},handlers:function(o,a){var c,p,g,E,y,A=[],b=a.delegateCount,N=o.target;if(b&&N.nodeType&&!(o.type==="click"&&o.button>=1)){for(;N!==this;N=N.parentNode||this)if(N.nodeType===1&&!(o.type==="click"&&N.disabled===!0)){for(E=[],y={},c=0;c<b;c++)p=a[c],g=p.selector+" ",y[g]===void 0&&(y[g]=p.needsContext?f(g,this).index(N)>-1:f.find(g,this,null,[N]).length),y[g]&&E.push(p);E.length&&A.push({elem:N,handlers:E})}}return N=this,b<a.length&&A.push({elem:N,handlers:a.slice(b)}),A},addProp:function(o,a){Object.defineProperty(f.Event.prototype,o,{enumerable:!0,configurable:!0,get:O(a)?function(){if(this.originalEvent)return a(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[o]},set:function(c){Object.defineProperty(this,o,{enumerable:!0,configurable:!0,writable:!0,value:c})}})},fix:function(o){return o[f.expando]?o:new f.Event(o)},special:{load:{noBubble:!0},click:{setup:function(o){var a=this||o;return Ct.test(a.type)&&a.click&&U(a,"input")&&Ht(a,"click",!0),!1},trigger:function(o){var a=this||o;return Ct.test(a.type)&&a.click&&U(a,"input")&&Ht(a,"click"),!0},_default:function(o){var a=o.target;return Ct.test(a.type)&&a.click&&U(a,"input")&&re.get(a,"click")||U(a,"a")}},beforeunload:{postDispatch:function(o){o.result!==void 0&&o.originalEvent&&(o.originalEvent.returnValue=o.result)}}}};function Ht(o,a,c){if(!c){re.get(o,a)===void 0&&f.event.add(o,a,vt);return}re.set(o,a,!1),f.event.add(o,a,{namespace:!1,handler:function(p){var g,E=re.get(this,a);if(p.isTrigger&1&&this[a]){if(E)(f.event.special[a]||{}).delegateType&&p.stopPropagation();else if(E=s.call(arguments),re.set(this,a,E),this[a](),g=re.get(this,a),re.set(this,a,!1),E!==g)return p.stopImmediatePropagation(),p.preventDefault(),g}else E&&(re.set(this,a,f.event.trigger(E[0],E.slice(1),this)),p.stopPropagation(),p.isImmediatePropagationStopped=vt)}})}f.removeEvent=function(o,a,c){o.removeEventListener&&o.removeEventListener(a,c)},f.Event=function(o,a){if(!(this instanceof f.Event))return new f.Event(o,a);o&&o.type?(this.originalEvent=o,this.type=o.type,this.isDefaultPrevented=o.defaultPrevented||o.defaultPrevented===void 0&&o.returnValue===!1?vt:bt,this.target=o.target&&o.target.nodeType===3?o.target.parentNode:o.target,this.currentTarget=o.currentTarget,this.relatedTarget=o.relatedTarget):this.type=o,a&&f.extend(this,a),this.timeStamp=o&&o.timeStamp||Date.now(),this[f.expando]=!0},f.Event.prototype={constructor:f.Event,isDefaultPrevented:bt,isPropagationStopped:bt,isImmediatePropagationStopped:bt,isSimulated:!1,preventDefault:function(){var o=this.originalEvent;this.isDefaultPrevented=vt,o&&!this.isSimulated&&o.preventDefault()},stopPropagation:function(){var o=this.originalEvent;this.isPropagationStopped=vt,o&&!this.isSimulated&&o.stopPropagation()},stopImmediatePropagation:function(){var o=this.originalEvent;this.isImmediatePropagationStopped=vt,o&&!this.isSimulated&&o.stopImmediatePropagation(),this.stopPropagation()}},f.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},f.event.addProp),f.each({focus:"focusin",blur:"focusout"},function(o,a){function c(p){if(R.documentMode){var g=re.get(this,"handle"),E=f.event.fix(p);E.type=p.type==="focusin"?"focus":"blur",E.isSimulated=!0,g(p),E.target===E.currentTarget&&g(E)}else f.event.simulate(a,p.target,f.event.fix(p))}f.event.special[o]={setup:function(){var p;if(Ht(this,o,!0),R.documentMode)p=re.get(this,a),p||this.addEventListener(a,c),re.set(this,a,(p||0)+1);else return!1},trigger:function(){return Ht(this,o),!0},teardown:function(){var p;if(R.documentMode)p=re.get(this,a)-1,p?re.set(this,a,p):(this.removeEventListener(a,c),re.remove(this,a));else return!1},_default:function(p){return re.get(p.target,o)},delegateType:a},f.event.special[a]={setup:function(){var p=this.ownerDocument||this.document||this,g=R.documentMode?this:p,E=re.get(g,a);E||(R.documentMode?this.addEventListener(a,c):p.addEventListener(o,c,!0)),re.set(g,a,(E||0)+1)},teardown:function(){var p=this.ownerDocument||this.document||this,g=R.documentMode?this:p,E=re.get(g,a)-1;E?re.set(g,a,E):(R.documentMode?this.removeEventListener(a,c):p.removeEventListener(o,c,!0),re.remove(g,a))}}}),f.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(o,a){f.event.special[o]={delegateType:a,bindType:a,handle:function(c){var p,g=this,E=c.relatedTarget,y=c.handleObj;return(!E||E!==g&&!f.contains(g,E))&&(c.type=y.origType,p=y.handler.apply(this,arguments),c.type=a),p}}}),f.fn.extend({on:function(o,a,c,p){return Xt(this,o,a,c,p)},one:function(o,a,c,p){return Xt(this,o,a,c,p,1)},off:function(o,a,c){var p,g;if(o&&o.preventDefault&&o.handleObj)return p=o.handleObj,f(o.delegateTarget).off(p.namespace?p.origType+"."+p.namespace:p.origType,p.selector,p.handler),this;if(typeof o=="object"){for(g in o)this.off(g,a,o[g]);return this}return(a===!1||typeof a=="function")&&(c=a,a=void 0),c===!1&&(c=bt),this.each(function(){f.event.remove(this,o,c,a)})}});var en=/<script|<style|<link/i,tn=/checked\s*(?:[^=]|=\s*.checked.)/i,rn=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function Tr(o,a){return U(o,"table")&&U(a.nodeType!==11?a:a.firstChild,"tr")&&f(o).children("tbody")[0]||o}function nn(o){return o.type=(o.getAttribute("type")!==null)+"/"+o.type,o}function on(o){return(o.type||"").slice(0,5)==="true/"?o.type=o.type.slice(5):o.removeAttribute("type"),o}function wr(o,a){var c,p,g,E,y,A,b;if(a.nodeType===1){if(re.hasData(o)&&(E=re.get(o),b=E.events,b)){re.remove(a,"handle events");for(g in b)for(c=0,p=b[g].length;c<p;c++)f.event.add(a,g,b[g][c])}Re.hasData(o)&&(y=Re.access(o),A=f.extend({},y),Re.set(a,A))}}function sn(o,a){var c=a.nodeName.toLowerCase();c==="input"&&Ct.test(o.type)?a.checked=o.checked:(c==="input"||c==="textarea")&&(a.defaultValue=o.defaultValue)}function At(o,a,c,p){a=l(a);var g,E,y,A,b,N,M=0,j=o.length,D=j-1,W=a[0],ae=O(W);if(ae||j>1&&typeof W=="string"&&!T.checkClone&&tn.test(W))return o.each(function(ye){var pe=o.eq(ye);ae&&(a[0]=W.call(this,ye,pe.html())),At(pe,a,c,p)});if(j&&(g=Ar(a,o[0].ownerDocument,!1,o,p),E=g.firstChild,g.childNodes.length===1&&(g=E),E||p)){for(y=f.map(ke(g,"script"),nn),A=y.length;M<j;M++)b=g,M!==D&&(b=f.clone(b,!0,!0),A&&f.merge(y,ke(b,"script"))),c.call(o[M],b,M);if(A)for(N=y[y.length-1].ownerDocument,f.map(y,on),M=0;M<A;M++)b=y[M],br.test(b.type||"")&&!re.access(b,"globalEval")&&f.contains(N,b)&&(b.src&&(b.type||"").toLowerCase()!=="module"?f._evalUrl&&!b.noModule&&f._evalUrl(b.src,{nonce:b.nonce||b.getAttribute("nonce")},N):V(b.textContent.replace(rn,""),b,N))}return o}function $r(o,a,c){for(var p,g=a?f.filter(a,o):o,E=0;(p=g[E])!=null;E++)!c&&p.nodeType===1&&f.cleanData(ke(p)),p.parentNode&&(c&&yt(p)&&zt(ke(p,"script")),p.parentNode.removeChild(p));return o}f.extend({htmlPrefilter:function(o){return o},clone:function(o,a,c){var p,g,E,y,A=o.cloneNode(!0),b=yt(o);if(!T.noCloneChecked&&(o.nodeType===1||o.nodeType===11)&&!f.isXMLDoc(o))for(y=ke(A),E=ke(o),p=0,g=E.length;p<g;p++)sn(E[p],y[p]);if(a)if(c)for(E=E||ke(o),y=y||ke(A),p=0,g=E.length;p<g;p++)wr(E[p],y[p]);else wr(o,A);return y=ke(A,"script"),y.length>0&&zt(y,!b&&ke(o,"script")),A},cleanData:function(o){for(var a,c,p,g=f.event.special,E=0;(c=o[E])!==void 0;E++)if(ot(c)){if(a=c[re.expando]){if(a.events)for(p in a.events)g[p]?f.event.remove(c,p):f.removeEvent(c,p,a.handle);c[re.expando]=void 0}c[Re.expando]&&(c[Re.expando]=void 0)}}}),f.fn.extend({detach:function(o){return $r(this,o,!0)},remove:function(o){return $r(this,o)},text:function(o){return Ge(this,function(a){return a===void 0?f.text(this):this.empty().each(function(){(this.nodeType===1||this.nodeType===11||this.nodeType===9)&&(this.textContent=a)})},null,o,arguments.length)},append:function(){return At(this,arguments,function(o){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var a=Tr(this,o);a.appendChild(o)}})},prepend:function(){return At(this,arguments,function(o){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var a=Tr(this,o);a.insertBefore(o,a.firstChild)}})},before:function(){return At(this,arguments,function(o){this.parentNode&&this.parentNode.insertBefore(o,this)})},after:function(){return At(this,arguments,function(o){this.parentNode&&this.parentNode.insertBefore(o,this.nextSibling)})},empty:function(){for(var o,a=0;(o=this[a])!=null;a++)o.nodeType===1&&(f.cleanData(ke(o,!1)),o.textContent="");return this},clone:function(o,a){return o=o??!1,a=a??o,this.map(function(){return f.clone(this,o,a)})},html:function(o){return Ge(this,function(a){var c=this[0]||{},p=0,g=this.length;if(a===void 0&&c.nodeType===1)return c.innerHTML;if(typeof a=="string"&&!en.test(a)&&!Ve[(vr.exec(a)||["",""])[1].toLowerCase()]){a=f.htmlPrefilter(a);try{for(;p<g;p++)c=this[p]||{},c.nodeType===1&&(f.cleanData(ke(c,!1)),c.innerHTML=a);c=0}catch{}}c&&this.empty().append(a)},null,o,arguments.length)},replaceWith:function(){var o=[];return At(this,arguments,function(a){var c=this.parentNode;f.inArray(this,o)<0&&(f.cleanData(ke(this)),c&&c.replaceChild(a,this))},o)}}),f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(o,a){f.fn[o]=function(c){for(var p,g=[],E=f(c),y=E.length-1,A=0;A<=y;A++)p=A===y?this:this.clone(!0),f(E[A])[a](p),u.apply(g,p.get());return this.pushStack(g)}});var Qt=new RegExp("^("+Er+")(?!px)[a-z%]+$","i"),Jt=/^--/,Ft=function(o){var a=o.ownerDocument.defaultView;return(!a||!a.opener)&&(a=e),a.getComputedStyle(o)},Cr=function(o,a,c){var p,g,E={};for(g in a)E[g]=o.style[g],o.style[g]=a[g];p=c.call(o);for(g in a)o.style[g]=E[g];return p},an=new RegExp(rt.join("|"),"i");(function(){function o(){if(N){b.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",N.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",ft.appendChild(b).appendChild(N);var M=e.getComputedStyle(N);c=M.top!=="1%",A=a(M.marginLeft)===12,N.style.right="60%",E=a(M.right)===36,p=a(M.width)===36,N.style.position="absolute",g=a(N.offsetWidth/3)===12,ft.removeChild(b),N=null}}function a(M){return Math.round(parseFloat(M))}var c,p,g,E,y,A,b=R.createElement("div"),N=R.createElement("div");N.style&&(N.style.backgroundClip="content-box",N.cloneNode(!0).style.backgroundClip="",T.clearCloneStyle=N.style.backgroundClip==="content-box",f.extend(T,{boxSizingReliable:function(){return o(),p},pixelBoxStyles:function(){return o(),E},pixelPosition:function(){return o(),c},reliableMarginLeft:function(){return o(),A},scrollboxSize:function(){return o(),g},reliableTrDimensions:function(){var M,j,D,W;return y==null&&(M=R.createElement("table"),j=R.createElement("tr"),D=R.createElement("div"),M.style.cssText="position:absolute;left:-11111px;border-collapse:separate",j.style.cssText="box-sizing:content-box;border:1px solid",j.style.height="1px",D.style.height="9px",D.style.display="block",ft.appendChild(M).appendChild(j).appendChild(D),W=e.getComputedStyle(j),y=parseInt(W.height,10)+parseInt(W.borderTopWidth,10)+parseInt(W.borderBottomWidth,10)===j.offsetHeight,ft.removeChild(M)),y}}))})();function Ot(o,a,c){var p,g,E,y,A=Jt.test(a),b=o.style;return c=c||Ft(o),c&&(y=c.getPropertyValue(a)||c[a],A&&y&&(y=y.replace(oe,"$1")||void 0),y===""&&!yt(o)&&(y=f.style(o,a)),!T.pixelBoxStyles()&&Qt.test(y)&&an.test(a)&&(p=b.width,g=b.minWidth,E=b.maxWidth,b.minWidth=b.maxWidth=b.width=y,y=c.width,b.width=p,b.minWidth=g,b.maxWidth=E)),y!==void 0?y+"":y}function Or(o,a){return{get:function(){if(o()){delete this.get;return}return(this.get=a).apply(this,arguments)}}}var Nr=["Webkit","Moz","ms"],xr=R.createElement("div").style,Dr={};function ln(o){for(var a=o[0].toUpperCase()+o.slice(1),c=Nr.length;c--;)if(o=Nr[c]+a,o in xr)return o}function Zt(o){var a=f.cssProps[o]||Dr[o];return a||(o in xr?o:Dr[o]=ln(o)||o)}var cn=/^(none|table(?!-c[ea]).+)/,un={position:"absolute",visibility:"hidden",display:"block"},Rr={letterSpacing:"0",fontWeight:"400"};function Pr(o,a,c){var p=$t.exec(a);return p?Math.max(0,p[2]-(c||0))+(p[3]||"px"):a}function er(o,a,c,p,g,E){var y=a==="width"?1:0,A=0,b=0,N=0;if(c===(p?"border":"content"))return 0;for(;y<4;y+=2)c==="margin"&&(N+=f.css(o,c+rt[y],!0,g)),p?(c==="content"&&(b-=f.css(o,"padding"+rt[y],!0,g)),c!=="margin"&&(b-=f.css(o,"border"+rt[y]+"Width",!0,g))):(b+=f.css(o,"padding"+rt[y],!0,g),c!=="padding"?b+=f.css(o,"border"+rt[y]+"Width",!0,g):A+=f.css(o,"border"+rt[y]+"Width",!0,g));return!p&&E>=0&&(b+=Math.max(0,Math.ceil(o["offset"+a[0].toUpperCase()+a.slice(1)]-E-b-A-.5))||0),b+N}function Ir(o,a,c){var p=Ft(o),g=!T.boxSizingReliable()||c,E=g&&f.css(o,"boxSizing",!1,p)==="border-box",y=E,A=Ot(o,a,p),b="offset"+a[0].toUpperCase()+a.slice(1);if(Qt.test(A)){if(!c)return A;A="auto"}return(!T.boxSizingReliable()&&E||!T.reliableTrDimensions()&&U(o,"tr")||A==="auto"||!parseFloat(A)&&f.css(o,"display",!1,p)==="inline")&&o.getClientRects().length&&(E=f.css(o,"boxSizing",!1,p)==="border-box",y=b in o,y&&(A=o[b])),A=parseFloat(A)||0,A+er(o,a,c||(E?"border":"content"),y,p,A)+"px"}f.extend({cssHooks:{opacity:{get:function(o,a){if(a){var c=Ot(o,"opacity");return c===""?"1":c}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!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,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(o,a,c,p){if(!(!o||o.nodeType===3||o.nodeType===8||!o.style)){var g,E,y,A=Be(a),b=Jt.test(a),N=o.style;if(b||(a=Zt(A)),y=f.cssHooks[a]||f.cssHooks[A],c!==void 0){if(E=typeof c,E==="string"&&(g=$t.exec(c))&&g[1]&&(c=yr(o,a,g),E="number"),c==null||c!==c)return;E==="number"&&!b&&(c+=g&&g[3]||(f.cssNumber[A]?"":"px")),!T.clearCloneStyle&&c===""&&a.indexOf("background")===0&&(N[a]="inherit"),(!y||!("set"in y)||(c=y.set(o,c,p))!==void 0)&&(b?N.setProperty(a,c):N[a]=c)}else return y&&"get"in y&&(g=y.get(o,!1,p))!==void 0?g:N[a]}},css:function(o,a,c,p){var g,E,y,A=Be(a),b=Jt.test(a);return b||(a=Zt(A)),y=f.cssHooks[a]||f.cssHooks[A],y&&"get"in y&&(g=y.get(o,!0,c)),g===void 0&&(g=Ot(o,a,p)),g==="normal"&&a in Rr&&(g=Rr[a]),c===""||c?(E=parseFloat(g),c===!0||isFinite(E)?E||0:g):g}}),f.each(["height","width"],function(o,a){f.cssHooks[a]={get:function(c,p,g){if(p)return cn.test(f.css(c,"display"))&&(!c.getClientRects().length||!c.getBoundingClientRect().width)?Cr(c,un,function(){return Ir(c,a,g)}):Ir(c,a,g)},set:function(c,p,g){var E,y=Ft(c),A=!T.scrollboxSize()&&y.position==="absolute",b=A||g,N=b&&f.css(c,"boxSizing",!1,y)==="border-box",M=g?er(c,a,g,N,y):0;return N&&A&&(M-=Math.ceil(c["offset"+a[0].toUpperCase()+a.slice(1)]-parseFloat(y[a])-er(c,a,"border",!1,y)-.5)),M&&(E=$t.exec(p))&&(E[3]||"px")!=="px"&&(c.style[a]=p,p=f.css(c,a)),Pr(c,p,M)}}}),f.cssHooks.marginLeft=Or(T.reliableMarginLeft,function(o,a){if(a)return(parseFloat(Ot(o,"marginLeft"))||o.getBoundingClientRect().left-Cr(o,{marginLeft:0},function(){return o.getBoundingClientRect().left}))+"px"}),f.each({margin:"",padding:"",border:"Width"},function(o,a){f.cssHooks[o+a]={expand:function(c){for(var p=0,g={},E=typeof c=="string"?c.split(" "):[c];p<4;p++)g[o+rt[p]+a]=E[p]||E[p-2]||E[0];return g}},o!=="margin"&&(f.cssHooks[o+a].set=Pr)}),f.fn.extend({css:function(o,a){return Ge(this,function(c,p,g){var E,y,A={},b=0;if(Array.isArray(p)){for(E=Ft(c),y=p.length;b<y;b++)A[p[b]]=f.css(c,p[b],!1,E);return A}return g!==void 0?f.style(c,p,g):f.css(c,p)},o,a,arguments.length>1)}});function je(o,a,c,p,g){return new je.prototype.init(o,a,c,p,g)}f.Tween=je,je.prototype={constructor:je,init:function(o,a,c,p,g,E){this.elem=o,this.prop=c,this.easing=g||f.easing._default,this.options=a,this.start=this.now=this.cur(),this.end=p,this.unit=E||(f.cssNumber[c]?"":"px")},cur:function(){var o=je.propHooks[this.prop];return o&&o.get?o.get(this):je.propHooks._default.get(this)},run:function(o){var a,c=je.propHooks[this.prop];return this.options.duration?this.pos=a=f.easing[this.easing](o,this.options.duration*o,0,1,this.options.duration):this.pos=a=o,this.now=(this.end-this.start)*a+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):je.propHooks._default.set(this),this}},je.prototype.init.prototype=je.prototype,je.propHooks={_default:{get:function(o){var a;return o.elem.nodeType!==1||o.elem[o.prop]!=null&&o.elem.style[o.prop]==null?o.elem[o.prop]:(a=f.css(o.elem,o.prop,""),!a||a==="auto"?0:a)},set:function(o){f.fx.step[o.prop]?f.fx.step[o.prop](o):o.elem.nodeType===1&&(f.cssHooks[o.prop]||o.elem.style[Zt(o.prop)]!=null)?f.style(o.elem,o.prop,o.now+o.unit):o.elem[o.prop]=o.now}}},je.propHooks.scrollTop=je.propHooks.scrollLeft={set:function(o){o.elem.nodeType&&o.elem.parentNode&&(o.elem[o.prop]=o.now)}},f.easing={linear:function(o){return o},swing:function(o){return .5-Math.cos(o*Math.PI)/2},_default:"swing"},f.fx=je.prototype.init,f.fx.step={};var St,Bt,fn=/^(?:toggle|show|hide)$/,dn=/queueHooks$/;function tr(){Bt&&(R.hidden===!1&&e.requestAnimationFrame?e.requestAnimationFrame(tr):e.setTimeout(tr,f.fx.interval),f.fx.tick())}function Lr(){return e.setTimeout(function(){St=void 0}),St=Date.now()}function Vt(o,a){var c,p=0,g={height:o};for(a=a?1:0;p<4;p+=2-a)c=rt[p],g["margin"+c]=g["padding"+c]=o;return a&&(g.opacity=g.width=o),g}function Mr(o,a,c){for(var p,g=(qe.tweeners[a]||[]).concat(qe.tweeners["*"]),E=0,y=g.length;E<y;E++)if(p=g[E].call(c,a,o))return p}function pn(o,a,c){var p,g,E,y,A,b,N,M,j="width"in a||"height"in a,D=this,W={},ae=o.style,ye=o.nodeType&&jt(o),pe=re.get(o,"fxshow");c.queue||(y=f._queueHooks(o,"fx"),y.unqueued==null&&(y.unqueued=0,A=y.empty.fire,y.empty.fire=function(){y.unqueued||A()}),y.unqueued++,D.always(function(){D.always(function(){y.unqueued--,f.queue(o,"fx").length||y.empty.fire()})}));for(p in a)if(g=a[p],fn.test(g)){if(delete a[p],E=E||g==="toggle",g===(ye?"hide":"show"))if(g==="show"&&pe&&pe[p]!==void 0)ye=!0;else continue;W[p]=pe&&pe[p]||f.style(o,p)}if(b=!f.isEmptyObject(a),!(!b&&f.isEmptyObject(W))){j&&o.nodeType===1&&(c.overflow=[ae.overflow,ae.overflowX,ae.overflowY],N=pe&&pe.display,N==null&&(N=re.get(o,"display")),M=f.css(o,"display"),M==="none"&&(N?M=N:(_t([o],!0),N=o.style.display||N,M=f.css(o,"display"),_t([o]))),(M==="inline"||M==="inline-block"&&N!=null)&&f.css(o,"float")==="none"&&(b||(D.done(function(){ae.display=N}),N==null&&(M=ae.display,N=M==="none"?"":M)),ae.display="inline-block")),c.overflow&&(ae.overflow="hidden",D.always(function(){ae.overflow=c.overflow[0],ae.overflowX=c.overflow[1],ae.overflowY=c.overflow[2]})),b=!1;for(p in W)b||(pe?"hidden"in pe&&(ye=pe.hidden):pe=re.access(o,"fxshow",{display:N}),E&&(pe.hidden=!ye),ye&&_t([o],!0),D.done(function(){ye||_t([o]),re.remove(o,"fxshow");for(p in W)f.style(o,p,W[p])})),b=Mr(ye?pe[p]:0,p,D),p in pe||(pe[p]=b.start,ye&&(b.end=b.start,b.start=0))}}function hn(o,a){var c,p,g,E,y;for(c in o)if(p=Be(c),g=a[p],E=o[c],Array.isArray(E)&&(g=E[1],E=o[c]=E[0]),c!==p&&(o[p]=E,delete o[c]),y=f.cssHooks[p],y&&"expand"in y){E=y.expand(E),delete o[p];for(c in E)c in o||(o[c]=E[c],a[c]=g)}else a[p]=g}function qe(o,a,c){var p,g,E=0,y=qe.prefilters.length,A=f.Deferred().always(function(){delete b.elem}),b=function(){if(g)return!1;for(var j=St||Lr(),D=Math.max(0,N.startTime+N.duration-j),W=D/N.duration||0,ae=1-W,ye=0,pe=N.tweens.length;ye<pe;ye++)N.tweens[ye].run(ae);return A.notifyWith(o,[N,ae,D]),ae<1&&pe?D:(pe||A.notifyWith(o,[N,1,0]),A.resolveWith(o,[N]),!1)},N=A.promise({elem:o,props:f.extend({},a),opts:f.extend(!0,{specialEasing:{},easing:f.easing._default},c),originalProperties:a,originalOptions:c,startTime:St||Lr(),duration:c.duration,tweens:[],createTween:function(j,D){var W=f.Tween(o,N.opts,j,D,N.opts.specialEasing[j]||N.opts.easing);return N.tweens.push(W),W},stop:function(j){var D=0,W=j?N.tweens.length:0;if(g)return this;for(g=!0;D<W;D++)N.tweens[D].run(1);return j?(A.notifyWith(o,[N,1,0]),A.resolveWith(o,[N,j])):A.rejectWith(o,[N,j]),this}}),M=N.props;for(hn(M,N.opts.specialEasing);E<y;E++)if(p=qe.prefilters[E].call(N,o,M,N.opts),p)return O(p.stop)&&(f._queueHooks(N.elem,N.opts.queue).stop=p.stop.bind(p)),p;return f.map(M,Mr,N),O(N.opts.start)&&N.opts.start.call(o,N),N.progress(N.opts.progress).done(N.opts.done,N.opts.complete).fail(N.opts.fail).always(N.opts.always),f.fx.timer(f.extend(b,{elem:o,anim:N,queue:N.opts.queue})),N}f.Animation=f.extend(qe,{tweeners:{"*":[function(o,a){var c=this.createTween(o,a);return yr(c.elem,o,$t.exec(a),c),c}]},tweener:function(o,a){O(o)?(a=o,o=["*"]):o=o.match(Ce);for(var c,p=0,g=o.length;p<g;p++)c=o[p],qe.tweeners[c]=qe.tweeners[c]||[],qe.tweeners[c].unshift(a)},prefilters:[pn],prefilter:function(o,a){a?qe.prefilters.unshift(o):qe.prefilters.push(o)}}),f.speed=function(o,a,c){var p=o&&typeof o=="object"?f.extend({},o):{complete:c||!c&&a||O(o)&&o,duration:o,easing:c&&a||a&&!O(a)&&a};return f.fx.off?p.duration=0:typeof p.duration!="number"&&(p.duration in f.fx.speeds?p.duration=f.fx.speeds[p.duration]:p.duration=f.fx.speeds._default),(p.queue==null||p.queue===!0)&&(p.queue="fx"),p.old=p.complete,p.complete=function(){O(p.old)&&p.old.call(this),p.queue&&f.dequeue(this,p.queue)},p},f.fn.extend({fadeTo:function(o,a,c,p){return this.filter(jt).css("opacity",0).show().end().animate({opacity:a},o,c,p)},animate:function(o,a,c,p){var g=f.isEmptyObject(o),E=f.speed(a,c,p),y=function(){var A=qe(this,f.extend({},o),E);(g||re.get(this,"finish"))&&A.stop(!0)};return y.finish=y,g||E.queue===!1?this.each(y):this.queue(E.queue,y)},stop:function(o,a,c){var p=function(g){var E=g.stop;delete g.stop,E(c)};return typeof o!="string"&&(c=a,a=o,o=void 0),a&&this.queue(o||"fx",[]),this.each(function(){var g=!0,E=o!=null&&o+"queueHooks",y=f.timers,A=re.get(this);if(E)A[E]&&A[E].stop&&p(A[E]);else for(E in A)A[E]&&A[E].stop&&dn.test(E)&&p(A[E]);for(E=y.length;E--;)y[E].elem===this&&(o==null||y[E].queue===o)&&(y[E].anim.stop(c),g=!1,y.splice(E,1));(g||!c)&&f.dequeue(this,o)})},finish:function(o){return o!==!1&&(o=o||"fx"),this.each(function(){var a,c=re.get(this),p=c[o+"queue"],g=c[o+"queueHooks"],E=f.timers,y=p?p.length:0;for(c.finish=!0,f.queue(this,o,[]),g&&g.stop&&g.stop.call(this,!0),a=E.length;a--;)E[a].elem===this&&E[a].queue===o&&(E[a].anim.stop(!0),E.splice(a,1));for(a=0;a<y;a++)p[a]&&p[a].finish&&p[a].finish.call(this);delete c.finish})}}),f.each(["toggle","show","hide"],function(o,a){var c=f.fn[a];f.fn[a]=function(p,g,E){return p==null||typeof p=="boolean"?c.apply(this,arguments):this.animate(Vt(a,!0),p,g,E)}}),f.each({slideDown:Vt("show"),slideUp:Vt("hide"),slideToggle:Vt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(o,a){f.fn[o]=function(c,p,g){return this.animate(a,c,p,g)}}),f.timers=[],f.fx.tick=function(){var o,a=0,c=f.timers;for(St=Date.now();a<c.length;a++)o=c[a],!o()&&c[a]===o&&c.splice(a--,1);c.length||f.fx.stop(),St=void 0},f.fx.timer=function(o){f.timers.push(o),f.fx.start()},f.fx.interval=13,f.fx.start=function(){Bt||(Bt=!0,tr())},f.fx.stop=function(){Bt=null},f.fx.speeds={slow:600,fast:200,_default:400},f.fn.delay=function(o,a){return o=f.fx&&f.fx.speeds[o]||o,a=a||"fx",this.queue(a,function(c,p){var g=e.setTimeout(c,o);p.stop=function(){e.clearTimeout(g)}})},function(){var o=R.createElement("input"),a=R.createElement("select"),c=a.appendChild(R.createElement("option"));o.type="checkbox",T.checkOn=o.value!=="",T.optSelected=c.selected,o=R.createElement("input"),o.value="t",o.type="radio",T.radioValue=o.value==="t"}();var kr,Nt=f.expr.attrHandle;f.fn.extend({attr:function(o,a){return Ge(this,f.attr,o,a,arguments.length>1)},removeAttr:function(o){return this.each(function(){f.removeAttr(this,o)})}}),f.extend({attr:function(o,a,c){var p,g,E=o.nodeType;if(!(E===3||E===8||E===2)){if(typeof o.getAttribute>"u")return f.prop(o,a,c);if((E!==1||!f.isXMLDoc(o))&&(g=f.attrHooks[a.toLowerCase()]||(f.expr.match.bool.test(a)?kr:void 0)),c!==void 0){if(c===null){f.removeAttr(o,a);return}return g&&"set"in g&&(p=g.set(o,c,a))!==void 0?p:(o.setAttribute(a,c+""),c)}return g&&"get"in g&&(p=g.get(o,a))!==null?p:(p=f.find.attr(o,a),p??void 0)}},attrHooks:{type:{set:function(o,a){if(!T.radioValue&&a==="radio"&&U(o,"input")){var c=o.value;return o.setAttribute("type",a),c&&(o.value=c),a}}}},removeAttr:function(o,a){var c,p=0,g=a&&a.match(Ce);if(g&&o.nodeType===1)for(;c=g[p++];)o.removeAttribute(c)}}),kr={set:function(o,a,c){return a===!1?f.removeAttr(o,c):o.setAttribute(c,c),c}},f.each(f.expr.match.bool.source.match(/\w+/g),function(o,a){var c=Nt[a]||f.find.attr;Nt[a]=function(p,g,E){var y,A,b=g.toLowerCase();return E||(A=Nt[b],Nt[b]=y,y=c(p,g,E)!=null?b:null,Nt[b]=A),y}});var mn=/^(?:input|select|textarea|button)$/i,gn=/^(?:a|area)$/i;f.fn.extend({prop:function(o,a){return Ge(this,f.prop,o,a,arguments.length>1)},removeProp:function(o){return this.each(function(){delete this[f.propFix[o]||o]})}}),f.extend({prop:function(o,a,c){var p,g,E=o.nodeType;if(!(E===3||E===8||E===2))return(E!==1||!f.isXMLDoc(o))&&(a=f.propFix[a]||a,g=f.propHooks[a]),c!==void 0?g&&"set"in g&&(p=g.set(o,c,a))!==void 0?p:o[a]=c:g&&"get"in g&&(p=g.get(o,a))!==null?p:o[a]},propHooks:{tabIndex:{get:function(o){var a=f.find.attr(o,"tabindex");return a?parseInt(a,10):mn.test(o.nodeName)||gn.test(o.nodeName)&&o.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),T.optSelected||(f.propHooks.selected={get:function(o){var a=o.parentNode;return a&&a.parentNode&&a.parentNode.selectedIndex,null},set:function(o){var a=o.parentNode;a&&(a.selectedIndex,a.parentNode&&a.parentNode.selectedIndex)}}),f.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){f.propFix[this.toLowerCase()]=this});function dt(o){var a=o.match(Ce)||[];return a.join(" ")}function pt(o){return o.getAttribute&&o.getAttribute("class")||""}function rr(o){return Array.isArray(o)?o:typeof o=="string"?o.match(Ce)||[]:[]}f.fn.extend({addClass:function(o){var a,c,p,g,E,y;return O(o)?this.each(function(A){f(this).addClass(o.call(this,A,pt(this)))}):(a=rr(o),a.length?this.each(function(){if(p=pt(this),c=this.nodeType===1&&" "+dt(p)+" ",c){for(E=0;E<a.length;E++)g=a[E],c.indexOf(" "+g+" ")<0&&(c+=g+" ");y=dt(c),p!==y&&this.setAttribute("class",y)}}):this)},removeClass:function(o){var a,c,p,g,E,y;return O(o)?this.each(function(A){f(this).removeClass(o.call(this,A,pt(this)))}):arguments.length?(a=rr(o),a.length?this.each(function(){if(p=pt(this),c=this.nodeType===1&&" "+dt(p)+" ",c){for(E=0;E<a.length;E++)for(g=a[E];c.indexOf(" "+g+" ")>-1;)c=c.replace(" "+g+" "," ");y=dt(c),p!==y&&this.setAttribute("class",y)}}):this):this.attr("class","")},toggleClass:function(o,a){var c,p,g,E,y=typeof o,A=y==="string"||Array.isArray(o);return O(o)?this.each(function(b){f(this).toggleClass(o.call(this,b,pt(this),a),a)}):typeof a=="boolean"&&A?a?this.addClass(o):this.removeClass(o):(c=rr(o),this.each(function(){if(A)for(E=f(this),g=0;g<c.length;g++)p=c[g],E.hasClass(p)?E.removeClass(p):E.addClass(p);else(o===void 0||y==="boolean")&&(p=pt(this),p&&re.set(this,"__className__",p),this.setAttribute&&this.setAttribute("class",p||o===!1?"":re.get(this,"__className__")||""))}))},hasClass:function(o){var a,c,p=0;for(a=" "+o+" ";c=this[p++];)if(c.nodeType===1&&(" "+dt(pt(c))+" ").indexOf(a)>-1)return!0;return!1}});var En=/\r/g;f.fn.extend({val:function(o){var a,c,p,g=this[0];return arguments.length?(p=O(o),this.each(function(E){var y;this.nodeType===1&&(p?y=o.call(this,E,f(this).val()):y=o,y==null?y="":typeof y=="number"?y+="":Array.isArray(y)&&(y=f.map(y,function(A){return A==null?"":A+""})),a=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()],(!a||!("set"in a)||a.set(this,y,"value")===void 0)&&(this.value=y))})):g?(a=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()],a&&"get"in a&&(c=a.get(g,"value"))!==void 0?c:(c=g.value,typeof c=="string"?c.replace(En,""):c??"")):void 0}}),f.extend({valHooks:{option:{get:function(o){var a=f.find.attr(o,"value");return a??dt(f.text(o))}},select:{get:function(o){var a,c,p,g=o.options,E=o.selectedIndex,y=o.type==="select-one",A=y?null:[],b=y?E+1:g.length;for(E<0?p=b:p=y?E:0;p<b;p++)if(c=g[p],(c.selected||p===E)&&!c.disabled&&(!c.parentNode.disabled||!U(c.parentNode,"optgroup"))){if(a=f(c).val(),y)return a;A.push(a)}return A},set:function(o,a){for(var c,p,g=o.options,E=f.makeArray(a),y=g.length;y--;)p=g[y],(p.selected=f.inArray(f.valHooks.option.get(p),E)>-1)&&(c=!0);return c||(o.selectedIndex=-1),E}}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]={set:function(o,a){if(Array.isArray(a))return o.checked=f.inArray(f(o).val(),a)>-1}},T.checkOn||(f.valHooks[this].get=function(o){return o.getAttribute("value")===null?"on":o.value})});var xt=e.location,jr={guid:Date.now()},nr=/\?/;f.parseXML=function(o){var a,c;if(!o||typeof o!="string")return null;try{a=new e.DOMParser().parseFromString(o,"text/xml")}catch{}return c=a&&a.getElementsByTagName("parsererror")[0],(!a||c)&&f.error("Invalid XML: "+(c?f.map(c.childNodes,function(p){return p.textContent}).join(`
|
||
`):o)),a};var Hr=/^(?:focusinfocus|focusoutblur)$/,Fr=function(o){o.stopPropagation()};f.extend(f.event,{trigger:function(o,a,c,p){var g,E,y,A,b,N,M,j,D=[c||R],W=_.call(o,"type")?o.type:o,ae=_.call(o,"namespace")?o.namespace.split("."):[];if(E=j=y=c=c||R,!(c.nodeType===3||c.nodeType===8)&&!Hr.test(W+f.event.triggered)&&(W.indexOf(".")>-1&&(ae=W.split("."),W=ae.shift(),ae.sort()),b=W.indexOf(":")<0&&"on"+W,o=o[f.expando]?o:new f.Event(W,typeof o=="object"&&o),o.isTrigger=p?2:3,o.namespace=ae.join("."),o.rnamespace=o.namespace?new RegExp("(^|\\.)"+ae.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,o.result=void 0,o.target||(o.target=c),a=a==null?[o]:f.makeArray(a,[o]),M=f.event.special[W]||{},!(!p&&M.trigger&&M.trigger.apply(c,a)===!1))){if(!p&&!M.noBubble&&!H(c)){for(A=M.delegateType||W,Hr.test(A+W)||(E=E.parentNode);E;E=E.parentNode)D.push(E),y=E;y===(c.ownerDocument||R)&&D.push(y.defaultView||y.parentWindow||e)}for(g=0;(E=D[g++])&&!o.isPropagationStopped();)j=E,o.type=g>1?A:M.bindType||W,N=(re.get(E,"events")||Object.create(null))[o.type]&&re.get(E,"handle"),N&&N.apply(E,a),N=b&&E[b],N&&N.apply&&ot(E)&&(o.result=N.apply(E,a),o.result===!1&&o.preventDefault());return o.type=W,!p&&!o.isDefaultPrevented()&&(!M._default||M._default.apply(D.pop(),a)===!1)&&ot(c)&&b&&O(c[W])&&!H(c)&&(y=c[b],y&&(c[b]=null),f.event.triggered=W,o.isPropagationStopped()&&j.addEventListener(W,Fr),c[W](),o.isPropagationStopped()&&j.removeEventListener(W,Fr),f.event.triggered=void 0,y&&(c[b]=y)),o.result}},simulate:function(o,a,c){var p=f.extend(new f.Event,c,{type:o,isSimulated:!0});f.event.trigger(p,null,a)}}),f.fn.extend({trigger:function(o,a){return this.each(function(){f.event.trigger(o,a,this)})},triggerHandler:function(o,a){var c=this[0];if(c)return f.event.trigger(o,a,c,!0)}});var yn=/\[\]$/,Br=/\r?\n/g,_n=/^(?:submit|button|image|reset|file)$/i,vn=/^(?:input|select|textarea|keygen)/i;function ir(o,a,c,p){var g;if(Array.isArray(a))f.each(a,function(E,y){c||yn.test(o)?p(o,y):ir(o+"["+(typeof y=="object"&&y!=null?E:"")+"]",y,c,p)});else if(!c&&q(a)==="object")for(g in a)ir(o+"["+g+"]",a[g],c,p);else p(o,a)}f.param=function(o,a){var c,p=[],g=function(E,y){var A=O(y)?y():y;p[p.length]=encodeURIComponent(E)+"="+encodeURIComponent(A??"")};if(o==null)return"";if(Array.isArray(o)||o.jquery&&!f.isPlainObject(o))f.each(o,function(){g(this.name,this.value)});else for(c in o)ir(c,o[c],a,g);return p.join("&")},f.fn.extend({serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var o=f.prop(this,"elements");return o?f.makeArray(o):this}).filter(function(){var o=this.type;return this.name&&!f(this).is(":disabled")&&vn.test(this.nodeName)&&!_n.test(o)&&(this.checked||!Ct.test(o))}).map(function(o,a){var c=f(this).val();return c==null?null:Array.isArray(c)?f.map(c,function(p){return{name:a.name,value:p.replace(Br,`\r
|
||
`)}}):{name:a.name,value:c.replace(Br,`\r
|
||
`)}}).get()}});var bn=/%20/g,An=/#.*$/,Sn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)$/mg,wn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,$n=/^(?:GET|HEAD)$/,Cn=/^\/\//,Vr={},or={},Ur="*/".concat("*"),sr=R.createElement("a");sr.href=xt.href;function Wr(o){return function(a,c){typeof a!="string"&&(c=a,a="*");var p,g=0,E=a.toLowerCase().match(Ce)||[];if(O(c))for(;p=E[g++];)p[0]==="+"?(p=p.slice(1)||"*",(o[p]=o[p]||[]).unshift(c)):(o[p]=o[p]||[]).push(c)}}function Gr(o,a,c,p){var g={},E=o===or;function y(A){var b;return g[A]=!0,f.each(o[A]||[],function(N,M){var j=M(a,c,p);if(typeof j=="string"&&!E&&!g[j])return a.dataTypes.unshift(j),y(j),!1;if(E)return!(b=j)}),b}return y(a.dataTypes[0])||!g["*"]&&y("*")}function ar(o,a){var c,p,g=f.ajaxSettings.flatOptions||{};for(c in a)a[c]!==void 0&&((g[c]?o:p||(p={}))[c]=a[c]);return p&&f.extend(!0,o,p),o}function On(o,a,c){for(var p,g,E,y,A=o.contents,b=o.dataTypes;b[0]==="*";)b.shift(),p===void 0&&(p=o.mimeType||a.getResponseHeader("Content-Type"));if(p){for(g in A)if(A[g]&&A[g].test(p)){b.unshift(g);break}}if(b[0]in c)E=b[0];else{for(g in c){if(!b[0]||o.converters[g+" "+b[0]]){E=g;break}y||(y=g)}E=E||y}if(E)return E!==b[0]&&b.unshift(E),c[E]}function Nn(o,a,c,p){var g,E,y,A,b,N={},M=o.dataTypes.slice();if(M[1])for(y in o.converters)N[y.toLowerCase()]=o.converters[y];for(E=M.shift();E;)if(o.responseFields[E]&&(c[o.responseFields[E]]=a),!b&&p&&o.dataFilter&&(a=o.dataFilter(a,o.dataType)),b=E,E=M.shift(),E){if(E==="*")E=b;else if(b!=="*"&&b!==E){if(y=N[b+" "+E]||N["* "+E],!y){for(g in N)if(A=g.split(" "),A[1]===E&&(y=N[b+" "+A[0]]||N["* "+A[0]],y)){y===!0?y=N[g]:N[g]!==!0&&(E=A[0],M.unshift(A[1]));break}}if(y!==!0)if(y&&o.throws)a=y(a);else try{a=y(a)}catch(j){return{state:"parsererror",error:y?j:"No conversion from "+b+" to "+E}}}}return{state:"success",data:a}}f.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:xt.href,type:"GET",isLocal:wn.test(xt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Ur,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":f.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(o,a){return a?ar(ar(o,f.ajaxSettings),a):ar(f.ajaxSettings,o)},ajaxPrefilter:Wr(Vr),ajaxTransport:Wr(or),ajax:function(o,a){typeof o=="object"&&(a=o,o=void 0),a=a||{};var c,p,g,E,y,A,b,N,M,j,D=f.ajaxSetup({},a),W=D.context||D,ae=D.context&&(W.nodeType||W.jquery)?f(W):f.event,ye=f.Deferred(),pe=f.Callbacks("once memory"),Pe=D.statusCode||{},xe={},Ye={},ze="canceled",Ee={readyState:0,getResponseHeader:function(_e){var Oe;if(b){if(!E)for(E={};Oe=Tn.exec(g);)E[Oe[1].toLowerCase()+" "]=(E[Oe[1].toLowerCase()+" "]||[]).concat(Oe[2]);Oe=E[_e.toLowerCase()+" "]}return Oe==null?null:Oe.join(", ")},getAllResponseHeaders:function(){return b?g:null},setRequestHeader:function(_e,Oe){return b==null&&(_e=Ye[_e.toLowerCase()]=Ye[_e.toLowerCase()]||_e,xe[_e]=Oe),this},overrideMimeType:function(_e){return b==null&&(D.mimeType=_e),this},statusCode:function(_e){var Oe;if(_e)if(b)Ee.always(_e[Ee.status]);else for(Oe in _e)Pe[Oe]=[Pe[Oe],_e[Oe]];return this},abort:function(_e){var Oe=_e||ze;return c&&c.abort(Oe),ht(0,Oe),this}};if(ye.promise(Ee),D.url=((o||D.url||xt.href)+"").replace(Cn,xt.protocol+"//"),D.type=a.method||a.type||D.method||D.type,D.dataTypes=(D.dataType||"*").toLowerCase().match(Ce)||[""],D.crossDomain==null){A=R.createElement("a");try{A.href=D.url,A.href=A.href,D.crossDomain=sr.protocol+"//"+sr.host!=A.protocol+"//"+A.host}catch{D.crossDomain=!0}}if(D.data&&D.processData&&typeof D.data!="string"&&(D.data=f.param(D.data,D.traditional)),Gr(Vr,D,a,Ee),b)return Ee;N=f.event&&D.global,N&&f.active++===0&&f.event.trigger("ajaxStart"),D.type=D.type.toUpperCase(),D.hasContent=!$n.test(D.type),p=D.url.replace(An,""),D.hasContent?D.data&&D.processData&&(D.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&(D.data=D.data.replace(bn,"+")):(j=D.url.slice(p.length),D.data&&(D.processData||typeof D.data=="string")&&(p+=(nr.test(p)?"&":"?")+D.data,delete D.data),D.cache===!1&&(p=p.replace(Sn,"$1"),j=(nr.test(p)?"&":"?")+"_="+jr.guid+++j),D.url=p+j),D.ifModified&&(f.lastModified[p]&&Ee.setRequestHeader("If-Modified-Since",f.lastModified[p]),f.etag[p]&&Ee.setRequestHeader("If-None-Match",f.etag[p])),(D.data&&D.hasContent&&D.contentType!==!1||a.contentType)&&Ee.setRequestHeader("Content-Type",D.contentType),Ee.setRequestHeader("Accept",D.dataTypes[0]&&D.accepts[D.dataTypes[0]]?D.accepts[D.dataTypes[0]]+(D.dataTypes[0]!=="*"?", "+Ur+"; q=0.01":""):D.accepts["*"]);for(M in D.headers)Ee.setRequestHeader(M,D.headers[M]);if(D.beforeSend&&(D.beforeSend.call(W,Ee,D)===!1||b))return Ee.abort();if(ze="abort",pe.add(D.complete),Ee.done(D.success),Ee.fail(D.error),c=Gr(or,D,a,Ee),!c)ht(-1,"No Transport");else{if(Ee.readyState=1,N&&ae.trigger("ajaxSend",[Ee,D]),b)return Ee;D.async&&D.timeout>0&&(y=e.setTimeout(function(){Ee.abort("timeout")},D.timeout));try{b=!1,c.send(xe,ht)}catch(_e){if(b)throw _e;ht(-1,_e)}}function ht(_e,Oe,Rt,cr){var Xe,Pt,Qe,st,at,Ue=Oe;b||(b=!0,y&&e.clearTimeout(y),c=void 0,g=cr||"",Ee.readyState=_e>0?4:0,Xe=_e>=200&&_e<300||_e===304,Rt&&(st=On(D,Ee,Rt)),!Xe&&f.inArray("script",D.dataTypes)>-1&&f.inArray("json",D.dataTypes)<0&&(D.converters["text script"]=function(){}),st=Nn(D,st,Ee,Xe),Xe?(D.ifModified&&(at=Ee.getResponseHeader("Last-Modified"),at&&(f.lastModified[p]=at),at=Ee.getResponseHeader("etag"),at&&(f.etag[p]=at)),_e===204||D.type==="HEAD"?Ue="nocontent":_e===304?Ue="notmodified":(Ue=st.state,Pt=st.data,Qe=st.error,Xe=!Qe)):(Qe=Ue,(_e||!Ue)&&(Ue="error",_e<0&&(_e=0))),Ee.status=_e,Ee.statusText=(Oe||Ue)+"",Xe?ye.resolveWith(W,[Pt,Ue,Ee]):ye.rejectWith(W,[Ee,Ue,Qe]),Ee.statusCode(Pe),Pe=void 0,N&&ae.trigger(Xe?"ajaxSuccess":"ajaxError",[Ee,D,Xe?Pt:Qe]),pe.fireWith(W,[Ee,Ue]),N&&(ae.trigger("ajaxComplete",[Ee,D]),--f.active||f.event.trigger("ajaxStop")))}return Ee},getJSON:function(o,a,c){return f.get(o,a,c,"json")},getScript:function(o,a){return f.get(o,void 0,a,"script")}}),f.each(["get","post"],function(o,a){f[a]=function(c,p,g,E){return O(p)&&(E=E||g,g=p,p=void 0),f.ajax(f.extend({url:c,type:a,dataType:E,data:p,success:g},f.isPlainObject(c)&&c))}}),f.ajaxPrefilter(function(o){var a;for(a in o.headers)a.toLowerCase()==="content-type"&&(o.contentType=o.headers[a]||"")}),f._evalUrl=function(o,a,c){return f.ajax({url:o,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(p){f.globalEval(p,a,c)}})},f.fn.extend({wrapAll:function(o){var a;return this[0]&&(O(o)&&(o=o.call(this[0])),a=f(o,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&a.insertBefore(this[0]),a.map(function(){for(var c=this;c.firstElementChild;)c=c.firstElementChild;return c}).append(this)),this},wrapInner:function(o){return O(o)?this.each(function(a){f(this).wrapInner(o.call(this,a))}):this.each(function(){var a=f(this),c=a.contents();c.length?c.wrapAll(o):a.append(o)})},wrap:function(o){var a=O(o);return this.each(function(c){f(this).wrapAll(a?o.call(this,c):o)})},unwrap:function(o){return this.parent(o).not("body").each(function(){f(this).replaceWith(this.childNodes)}),this}}),f.expr.pseudos.hidden=function(o){return!f.expr.pseudos.visible(o)},f.expr.pseudos.visible=function(o){return!!(o.offsetWidth||o.offsetHeight||o.getClientRects().length)},f.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch{}};var xn={0:200,1223:204},Dt=f.ajaxSettings.xhr();T.cors=!!Dt&&"withCredentials"in Dt,T.ajax=Dt=!!Dt,f.ajaxTransport(function(o){var a,c;if(T.cors||Dt&&!o.crossDomain)return{send:function(p,g){var E,y=o.xhr();if(y.open(o.type,o.url,o.async,o.username,o.password),o.xhrFields)for(E in o.xhrFields)y[E]=o.xhrFields[E];o.mimeType&&y.overrideMimeType&&y.overrideMimeType(o.mimeType),!o.crossDomain&&!p["X-Requested-With"]&&(p["X-Requested-With"]="XMLHttpRequest");for(E in p)y.setRequestHeader(E,p[E]);a=function(A){return function(){a&&(a=c=y.onload=y.onerror=y.onabort=y.ontimeout=y.onreadystatechange=null,A==="abort"?y.abort():A==="error"?typeof y.status!="number"?g(0,"error"):g(y.status,y.statusText):g(xn[y.status]||y.status,y.statusText,(y.responseType||"text")!=="text"||typeof y.responseText!="string"?{binary:y.response}:{text:y.responseText},y.getAllResponseHeaders()))}},y.onload=a(),c=y.onerror=y.ontimeout=a("error"),y.onabort!==void 0?y.onabort=c:y.onreadystatechange=function(){y.readyState===4&&e.setTimeout(function(){a&&c()})},a=a("abort");try{y.send(o.hasContent&&o.data||null)}catch(A){if(a)throw A}},abort:function(){a&&a()}}}),f.ajaxPrefilter(function(o){o.crossDomain&&(o.contents.script=!1)}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(o){return f.globalEval(o),o}}}),f.ajaxPrefilter("script",function(o){o.cache===void 0&&(o.cache=!1),o.crossDomain&&(o.type="GET")}),f.ajaxTransport("script",function(o){if(o.crossDomain||o.scriptAttrs){var a,c;return{send:function(p,g){a=f("<script>").attr(o.scriptAttrs||{}).prop({charset:o.scriptCharset,src:o.url}).on("load error",c=function(E){a.remove(),c=null,E&&g(E.type==="error"?404:200,E.type)}),R.head.appendChild(a[0])},abort:function(){c&&c()}}}});var qr=[],lr=/(=)\?(?=&|$)|\?\?/;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var o=qr.pop()||f.expando+"_"+jr.guid++;return this[o]=!0,o}}),f.ajaxPrefilter("json jsonp",function(o,a,c){var p,g,E,y=o.jsonp!==!1&&(lr.test(o.url)?"url":typeof o.data=="string"&&(o.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&lr.test(o.data)&&"data");if(y||o.dataTypes[0]==="jsonp")return p=o.jsonpCallback=O(o.jsonpCallback)?o.jsonpCallback():o.jsonpCallback,y?o[y]=o[y].replace(lr,"$1"+p):o.jsonp!==!1&&(o.url+=(nr.test(o.url)?"&":"?")+o.jsonp+"="+p),o.converters["script json"]=function(){return E||f.error(p+" was not called"),E[0]},o.dataTypes[0]="json",g=e[p],e[p]=function(){E=arguments},c.always(function(){g===void 0?f(e).removeProp(p):e[p]=g,o[p]&&(o.jsonpCallback=a.jsonpCallback,qr.push(p)),E&&O(g)&&g(E[0]),E=g=void 0}),"script"}),T.createHTMLDocument=function(){var o=R.implementation.createHTMLDocument("").body;return o.innerHTML="<form></form><form></form>",o.childNodes.length===2}(),f.parseHTML=function(o,a,c){if(typeof o!="string")return[];typeof a=="boolean"&&(c=a,a=!1);var p,g,E;return a||(T.createHTMLDocument?(a=R.implementation.createHTMLDocument(""),p=a.createElement("base"),p.href=R.location.href,a.head.appendChild(p)):a=R),g=be.exec(o),E=!c&&[],g?[a.createElement(g[1])]:(g=Ar([o],a,E),E&&E.length&&f(E).remove(),f.merge([],g.childNodes))},f.fn.load=function(o,a,c){var p,g,E,y=this,A=o.indexOf(" ");return A>-1&&(p=dt(o.slice(A)),o=o.slice(0,A)),O(a)?(c=a,a=void 0):a&&typeof a=="object"&&(g="POST"),y.length>0&&f.ajax({url:o,type:g||"GET",dataType:"html",data:a}).done(function(b){E=arguments,y.html(p?f("<div>").append(f.parseHTML(b)).find(p):b)}).always(c&&function(b,N){y.each(function(){c.apply(this,E||[b.responseText,N,b])})}),this},f.expr.pseudos.animated=function(o){return f.grep(f.timers,function(a){return o===a.elem}).length},f.offset={setOffset:function(o,a,c){var p,g,E,y,A,b,N,M=f.css(o,"position"),j=f(o),D={};M==="static"&&(o.style.position="relative"),A=j.offset(),E=f.css(o,"top"),b=f.css(o,"left"),N=(M==="absolute"||M==="fixed")&&(E+b).indexOf("auto")>-1,N?(p=j.position(),y=p.top,g=p.left):(y=parseFloat(E)||0,g=parseFloat(b)||0),O(a)&&(a=a.call(o,c,f.extend({},A))),a.top!=null&&(D.top=a.top-A.top+y),a.left!=null&&(D.left=a.left-A.left+g),"using"in a?a.using.call(o,D):j.css(D)}},f.fn.extend({offset:function(o){if(arguments.length)return o===void 0?this:this.each(function(g){f.offset.setOffset(this,o,g)});var a,c,p=this[0];if(p)return p.getClientRects().length?(a=p.getBoundingClientRect(),c=p.ownerDocument.defaultView,{top:a.top+c.pageYOffset,left:a.left+c.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var o,a,c,p=this[0],g={top:0,left:0};if(f.css(p,"position")==="fixed")a=p.getBoundingClientRect();else{for(a=this.offset(),c=p.ownerDocument,o=p.offsetParent||c.documentElement;o&&(o===c.body||o===c.documentElement)&&f.css(o,"position")==="static";)o=o.parentNode;o&&o!==p&&o.nodeType===1&&(g=f(o).offset(),g.top+=f.css(o,"borderTopWidth",!0),g.left+=f.css(o,"borderLeftWidth",!0))}return{top:a.top-g.top-f.css(p,"marginTop",!0),left:a.left-g.left-f.css(p,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var o=this.offsetParent;o&&f.css(o,"position")==="static";)o=o.offsetParent;return o||ft})}}),f.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(o,a){var c=a==="pageYOffset";f.fn[o]=function(p){return Ge(this,function(g,E,y){var A;if(H(g)?A=g:g.nodeType===9&&(A=g.defaultView),y===void 0)return A?A[a]:g[E];A?A.scrollTo(c?A.pageXOffset:y,c?y:A.pageYOffset):g[E]=y},o,p,arguments.length)}}),f.each(["top","left"],function(o,a){f.cssHooks[a]=Or(T.pixelPosition,function(c,p){if(p)return p=Ot(c,a),Qt.test(p)?f(c).position()[a]+"px":p})}),f.each({Height:"height",Width:"width"},function(o,a){f.each({padding:"inner"+o,content:a,"":"outer"+o},function(c,p){f.fn[p]=function(g,E){var y=arguments.length&&(c||typeof g!="boolean"),A=c||(g===!0||E===!0?"margin":"border");return Ge(this,function(b,N,M){var j;return H(b)?p.indexOf("outer")===0?b["inner"+o]:b.document.documentElement["client"+o]:b.nodeType===9?(j=b.documentElement,Math.max(b.body["scroll"+o],j["scroll"+o],b.body["offset"+o],j["offset"+o],j["client"+o])):M===void 0?f.css(b,N,A):f.style(b,N,M,A)},a,y?g:void 0,y)}})}),f.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(o,a){f.fn[a]=function(c){return this.on(a,c)}}),f.fn.extend({bind:function(o,a,c){return this.on(o,null,a,c)},unbind:function(o,a){return this.off(o,null,a)},delegate:function(o,a,c,p){return this.on(a,o,c,p)},undelegate:function(o,a,c){return arguments.length===1?this.off(o,"**"):this.off(a,o||"**",c)},hover:function(o,a){return this.on("mouseenter",o).on("mouseleave",a||o)}}),f.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(o,a){f.fn[a]=function(c,p){return arguments.length>0?this.on(a,null,c,p):this.trigger(a)}});var Dn=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;f.proxy=function(o,a){var c,p,g;if(typeof a=="string"&&(c=o[a],a=o,o=c),!!O(o))return p=s.call(arguments,2),g=function(){return o.apply(a||this,p.concat(s.call(arguments)))},g.guid=o.guid=o.guid||f.guid++,g},f.holdReady=function(o){o?f.readyWait++:f.ready(!0)},f.isArray=Array.isArray,f.parseJSON=JSON.parse,f.nodeName=U,f.isFunction=O,f.isWindow=H,f.camelCase=Be,f.type=q,f.now=Date.now,f.isNumeric=function(o){var a=f.type(o);return(a==="number"||a==="string")&&!isNaN(o-parseFloat(o))},f.trim=function(o){return o==null?"":(o+"").replace(Dn,"$1")};var Rn=e.jQuery,Pn=e.$;return f.noConflict=function(o){return e.$===f&&(e.$=Pn),o&&e.jQuery===f&&(e.jQuery=Rn),f},typeof t>"u"&&(e.jQuery=e.$=f),f})})(jquery);var jqueryExports=jquery.exports;const $=getDefaultExportFromCjs(jqueryExports),bootstrap="",actionAddins={};class MustInputAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="必須チェック",this.actionProps=[],this.register(),this.props={field:{code:""},message:""},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("message"in e.ActionValue))return i;this.props=e.ActionValue;const s=t.record;if(!(this.props.field.code in s))throw new Error(`フィールド[${this.props.field.code}]が見つかりませんでした。`);const l=s[this.props.field.code].value;if(l===void 0||l==="")return s[this.props.field.code].error=this.props.message,i;i={canNext:!0,result:!0}}catch(s){r.errors.handleError(s,e),i.canNext=!1}return i}register(){actionAddins[this.name]=this}}new MustInputAction;class Formatter{static numberFormat(e,t){let r=Math.floor(Math.abs(e)).toString(),i=Math.abs(e).toString().split(".")[1]||"",s=e<0,l=t.includes("%");l&&(e*=100,r=Math.floor(Math.abs(e)).toString(),i=Math.abs(e).toString().split(".")[1]||"");let[u,h]=t.split(".");if(r=u?r.padStart(u.replace(/[^0]/g,"").length,"0"):r,i=i.padEnd(h?h.length:0,"0"),/,/.test(u)){const m=[];for(;r.length;)m.unshift(r.slice(-3)),r=r.slice(0,-3);r=m.join(",")}let d=h?`${r}.${i}`:r;return d=s?`-${d}`:d,l?`${d}%`:d}static dateFormat(e,t){const r=e.getFullYear(),i=e.getMonth()+1,s=e.getDate(),l=e.getHours(),u=e.getMinutes(),h=e.getSeconds(),d=e.getMilliseconds(),m=-e.getTimezoneOffset()/60,_={yyyy:r.toString(),yy:r.toString().slice(-2),MM:i.toString().padStart(2,"0"),M:i.toString(),dd:s.toString().padStart(2,"0"),d:s.toString(),HH:l.toString().padStart(2,"0"),H:l.toString(),hh:(l>12?l-12:l).toString().padStart(2,"0"),h:(l>12?l-12:l).toString(),mm:u.toString().padStart(2,"0"),m:u.toString(),ss:h.toString().padStart(2,"0"),s:h.toString(),fff:d.toString().padStart(3,"0"),zzz:(m>=0?"+":"-")+Math.abs(m).toString().padStart(2,"0")+":00"};return t.replace(/yyyy|yy|MM|M|dd|d|HH|H|hh|h|mm|m|ss|s|fff|zzz/g,S=>_[S]||S)}}class AutoNumbering{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="自動採番する",this.actionProps=[],this.register(),this.props={field:{code:""},format:"",prefix:"",suffix:"",verName:{name:""}},globalThis.window.$format=this.format,this.register()}async process(n,e,t){let r={canNext:!1,result:!1};try{if(this.actionProps=n.actionProps,!("field"in n.ActionValue)&&!("format"in n.ActionValue))return r;this.props=n.ActionValue;const i=e.record,s=await this.createNumber(this.props);return i[this.props.field.code].value=s,this.props.verName&&this.props.verName.name!==""&&(t.variables[this.props.verName.name]=s),r={canNext:!0,result:!0},r}catch(i){return t.errors.handleError(i,n),{canNext:!1,result:!1}}}execTemplate(n){if(n===void 0)return"";const e=/\$\{([^}]+)\}/g;return n.replace(e,(t,r)=>this.execEval(t,r))}execEval(match,expr){return console.log(match),eval(expr)}format(n){const e=new Date;return Formatter.dateFormat(e,n)}async createNumber(n){let e="",t="",r="",i=1;try{i=await this.fetchNo()}catch(s){console.log(s)}return n.format!==void 0&&n.format!==""?e=Formatter.numberFormat(i,n.format):e=i.toString(10),n.prefix!==void 0&&n.prefix!==""&&(t=this.execTemplate(n.prefix)),n.suffix!==void 0&&n.suffix!==""&&(r=this.execTemplate(n.suffix)),`${t}${e}${r}`}async fetchNo(){let n=1;return await new kintone.Promise((e,t)=>{const r=kintone.api.url("/k/v1/records",!0),i={app:kintone.app.getId(),fields:["$id"],query:"limit 1"};return kintone.api(r,"GET",i).then(s=>{s.records[0]!==null&&(n=parseInt(s.records[0].$id.value,10)+1),e(n)}).catch(s=>{t(s)})})}register(){actionAddins[this.name]=this}}new AutoNumbering;class GroupNode{constructor(e,t){P(this,"index");P(this,"type");P(this,"children");P(this,"parent");P(this,"logicalOperator");this.index=0,this.type=t==null?"root":"logicgroup",this.logicalOperator=e,this.parent=t,this.children=[]}get label(){return this.logicalOperator}get header(){return this.type==="root"?"root":"generic"}get expanded(){return this.children.length>0}static fromJSON(e,t=null){const r=new GroupNode(e.logicalOperator,t);return r.index=e.index,r.children=e.children.map(i=>i.type==="logicgroup"?GroupNode.fromJSON(i,r):ConditionNode.fromJSON(i,r)),r}}class ConditionNode{constructor(e,t,r,i){P(this,"index");P(this,"type");P(this,"parent");P(this,"object");P(this,"operator");P(this,"value");this.index=0,this.type="condition",this.object=e,this.operator=t,this.value=r,this.parent=i}get logicalOperator(){return this.parent.logicalOperator}get header(){return"generic"}static fromJSON(e,t){const r=new ConditionNode(e.object,e.operator,e.value,t);return r.index=e.index,r}}class ConditionTree{constructor(){P(this,"root");P(this,"maxIndex");this.maxIndex=0,this.root=new GroupNode("AND",null)}addNode(e,t){this.maxIndex++,t.index=this.maxIndex,e.children.push(t)}removeNode(e){if(e.parent===null)throw new Error("ルートノード削除できません");{const t=e.parent,r=t.children.indexOf(e);r>-1&&t.children.splice(r,1)}}findByIndex(e){return this.findChildren(this.root,e)}findChildren(e,t){if(e.index===t)return e;for(const r of e.children){if(r.index===t)return r;if(r.type!=="condition"){const i=this.findChildren(r,t);if(i)return i}}}getMaxIndex(e){let t=e.index;return e.type!=="condition"&&e.children.forEach(i=>{const s=this.getMaxIndex(i);s>t&&(t=s)}),t}buildConditionString(e){if(e.type!=="condition"){let t="(";const r=e;for(let i=0;i<r.children.length;i++){const s=this.buildConditionString(r.children[i]);s!==""&&(t+=s,i<r.children.length-1&&(t+=` ${r.logicalOperator} `))}return t+=")",t}else{const t=e;if(t.object&&t.operator){let r=t.value;return r&&typeof r=="object"&&"label"in r&&(r=t.value.label),`${t.object.name} ${t.operator} '${r}'`}else return""}}getConditions(e){const t=[];return e.children.forEach(r=>{r.type==="condition"?t.push(r):t.push(...this.getConditions(r))}),t}getGroups(e){const t=[];return t.push(e.index),e.children.forEach(r=>{r.type!=="condition"&&t.push(...this.getGroups(r))}),t}fromJson(e){const t=JSON.parse(e);return this.root=GroupNode.fromJSON(t),this.maxIndex=this.getMaxIndex(this.root),this.root}toJson(){return JSON.stringify(this.root,(e,t)=>e==="parent"?t?t.type:null:t)}evaluate(e,t){if(e.type==="condition")return this.evaluateCondition(e,t);if(e.type==="logicgroup"||e.type==="root"){const r=e,i=r.children.map(s=>this.evaluate(s,t));if(r.logicalOperator==="AND")return i.every(s=>s);if(r.logicalOperator==="OR")return i.some(s=>s);throw new Error("Unsupported logical operator")}else throw new Error("Unsupported node type")}getCodeValue(e){return e&&typeof e=="object"&&"code"in e?e.code:e}convertCodeValue(e){return Array.isArray(e)?e.map(t=>this.getCodeValue(t)):this.getCodeValue(e)}getContextVarByPath(e,t){return t.split(".").reduce((r,i)=>(r||{})[i],e)}getObjectValue(e,t){if(!(!e||typeof e!="object"||!("objectType"in e))){if(e.objectType==="field"){const r=t.record[e.code];return r.type==="NUMBER"&&r.value!==void 0?Number(r.value):this.convertCodeValue(r.value)}else if(e.objectType==="variable"){const r=this.getContextVarByPath(t.variables,e.name.name);return this.convertCodeValue(r)}else if(e.objectType==="text")return e.sharedText}}getConditionValue(e,t){if(!e||typeof e!="object")return e;if("objectType"in e)return this.getObjectValue(e,t);if("sharedText"in e)return e.sharedText;if("label"in e)return e.label;if("value"in e)return e.value;if("name"in e)return e.name}evaluateCondition(e,t){const{object:r,operator:i,value:s}=e,l=this.getObjectValue(r,t),u=this.getConditionValue(s,t),h=Array.isArray(l),d=Array.isArray(u);if(h&&l.length>1||d&&u.length>1)return this.compareArray(i,l,u);const m=h?l[0]:l,_=d?u[0]:u;switch(i){case"=":case"!=":case">":case">=":case"<":case"<=":return this.compare(i,m,_);case"contains":return this.contains(m,_);case"not contains":return!this.contains(m,_);case"start With":return this.startWith(m,_);case"not start with":return!this.startWith(m,_);case"end with":return this.endsWith(m,_);case"not end with":return this.endsWith(m,_);default:throw new Error("Unsupported operator")}}compare(e,t,r){if((t==null||t==="")&&(r==null||r==="")&&(t="",r=""),t instanceof Date){const i=new Date(r);isNaN(i.getTime())||(r=i)}else if(typeof t=="number"){const i=Number(r);isNaN(i)||(r=i)}else typeof t=="string"&&(r=String(r));switch(e){case"=":return t===r;case"!=":return t!==r;case">":return t>r;case">=":return t>=r;case"<":return t<r;case"<=":return t<=r;default:throw new Error("Unsupported operator for comparison")}}compareArray(e,t,r){const i=Array.isArray(t),s=Array.isArray(r),l=d=>d.slice().sort();t=i?t:[t],r=s?r:[r];const u=l(t),h=l(r);switch(e){case"=":return u.length===h.length&&u.every((d,m)=>d===h[m]);case"!=":return u.length!==h.length||!u.every((d,m)=>d===h[m]);case"contains":return h.length>0&&h.every(d=>u.includes(d));case"not contains":return h.length===0||!h.every(d=>u.includes(d));default:return!1}}contains(e,t){return typeof e=="string"&&typeof t=="string"?e.includes(t):!1}startWith(e,t){return typeof e=="string"&&typeof t=="string"?e.startsWith(t):!1}endsWith(e,t){return typeof e=="string"&&typeof t=="string"?e.endsWith(t):!1}}class FieldShownAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="表示/非表示",this.actionProps=[],this.props={field:{code:""},show:"",condition:""},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{return this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("show"in e.ActionValue)||(this.props=e.ActionValue,this.getConditionResult(r)&&(this.props.show==="表示"?kintone.app.record.setFieldShown(this.props.field.code,!0):this.props.show==="非表示"&&kintone.app.record.setFieldShown(this.props.field.code,!1)),i={canNext:!0,result:!0}),i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}getConditionResult(e){const t=this.getCondition(this.props.condition);return t?t.evaluate(t.root,e):!0}getCondition(e){try{const t=new ConditionTree;return t.fromJson(e),t.getConditions(t.root).length>0?t:null}catch{return null}}register(){actionAddins[this.name]=this}}new FieldShownAction;class ErrorShowAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="エラー表示",this.actionProps=[],this.props={message:"",condition:""},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("message"in e.ActionValue)&&!("condition"in e.ActionValue))return i;this.props=e.ActionValue;const s=this.getConditionResult(r);return console.log("条件結果:",s),s&&(t.error=this.props.message,i.canNext=!1),i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}getConditionResult(e){const t=this.getCondition(this.props.condition);return t?t.evaluate(t.root,e):!0}getCondition(e){try{const t=new ConditionTree;return t.fromJson(e),t.getConditions(t.root).length>0?t:null}catch{return null}}register(){actionAddins[this.name]=this}}new ErrorShowAction;const buttonAdd="";class ButtonAddAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="ボタンの配置",this.actionProps=[],this.props={buttonName:"",position:"",eventName:""},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("buttonName"in e.ActionValue)&&!("position"in e.ActionValue))return i;this.props=e.ActionValue;let s;if(this.props.space&&this.props.space.elementId?s=kintone.app.record.getSpaceElement(this.props.space.elementId):s=kintone.app.record.getHeaderMenuSpaceElement(),!s)return i;const l=$(`<button id='${this.props.eventName}' class='alc-button-normal' >${this.props.buttonName}</button>`);this.props.position==="一番左に追加する"?$(s).prepend(l):$(s).append(l);const u=`${t.type}.customButtonClick.${this.props.eventName}`;return l.on("click",()=>{$(document).trigger(u,t)}),i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}register(){actionAddins[this.name]=this}}new ButtonAddAction;class ConditionAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="条件式",this.actionProps=[],this.props={condition:"",verName:{name:""}},this.register()}async process(e,t,r){let i={canNext:!0,result:""};try{if(this.actionProps=e.actionProps,!("condition"in e.ActionValue)&&!("verName"in e.ActionValue))return i;this.props=e.ActionValue;const s=this.getConditionResult(r);return console.log("条件計算結果:",s),s?i={canNext:!0,result:"はい"}:i={canNext:!0,result:"いいえ"},this.props.verName&&this.props.verName.name!==""&&(r.variables[this.props.verName.name]=i.result),i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}getConditionResult(e){const t=this.getCondition(this.props.condition);return t?t.evaluate(t.root,e):!0}getCondition(e){try{const t=new ConditionTree;return t.fromJson(e),t.getConditions(t.root).length>0?t:null}catch{return null}}register(){actionAddins[this.name]=this}}new ConditionAction;var index_browser={},platform$2={};(function(n){Object.defineProperty(n,"__esModule",{value:!0}),n.injectPlatformDeps=n.platformDeps=void 0,n.platformDeps={readFileFromPath:function(){throw new Error("not implemented")},getRequestToken:function(){throw new Error("not implemented")},getDefaultAuth:function(){throw new Error("not implemented")},buildPlatformDependentConfig:function(){throw new Error("not implemented")},buildHeaders:function(){throw new Error("not implemented")},buildFormDataValue:function(){throw new Error("not implemented")},buildBaseUrl:function(){throw new Error("not implemented")},getVersion:function(){throw new Error("not implemented")}};var e=function(t){t.readFileFromPath&&(n.platformDeps.readFileFromPath=t.readFileFromPath),t.getRequestToken&&(n.platformDeps.getRequestToken=t.getRequestToken),t.getDefaultAuth&&(n.platformDeps.getDefaultAuth=t.getDefaultAuth),t.buildPlatformDependentConfig&&(n.platformDeps.buildPlatformDependentConfig=t.buildPlatformDependentConfig),t.buildHeaders&&(n.platformDeps.buildHeaders=t.buildHeaders),t.buildFormDataValue&&(n.platformDeps.buildFormDataValue=t.buildFormDataValue),t.buildBaseUrl&&(n.platformDeps.buildBaseUrl=t.buildBaseUrl),t.getVersion&&(n.platformDeps.getVersion=t.getVersion)};n.injectPlatformDeps=e})(platform$2);var browser$2={},UnsupportedPlatformError$1={},__extends$8=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(r[s]=i[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(UnsupportedPlatformError$1,"__esModule",{value:!0});UnsupportedPlatformError$1.UnsupportedPlatformError=void 0;var UnsupportedPlatformError=function(n){__extends$8(e,n);function e(t){var r=this,i="This function is not supported in ".concat(t," environment");return r=n.call(this,i)||this,Error.captureStackTrace&&Error.captureStackTrace(r,e),r.name="UnsupportedPlatformError",r.platform=t,Object.setPrototypeOf(r,e.prototype),r}return e}(Error);UnsupportedPlatformError$1.UnsupportedPlatformError=UnsupportedPlatformError;function Mime$1(){this._types=Object.create(null),this._extensions=Object.create(null);for(let n=0;n<arguments.length;n++)this.define(arguments[n]);this.define=this.define.bind(this),this.getType=this.getType.bind(this),this.getExtension=this.getExtension.bind(this)}Mime$1.prototype.define=function(n,e){for(let t in n){let r=n[t].map(function(i){return i.toLowerCase()});t=t.toLowerCase();for(let i=0;i<r.length;i++){const s=r[i];if(s[0]!=="*"){if(!e&&s in this._types)throw new Error('Attempt to change mapping for "'+s+'" extension from "'+this._types[s]+'" to "'+t+'". Pass `force=true` to allow this, otherwise remove "'+s+'" from the list of extensions for "'+t+'".');this._types[s]=t}}if(e||!this._extensions[t]){const i=r[0];this._extensions[t]=i[0]!=="*"?i:i.substr(1)}}};Mime$1.prototype.getType=function(n){n=String(n);let e=n.replace(/^.*[/\\]/,"").toLowerCase(),t=e.replace(/^.*\./,"").toLowerCase(),r=e.length<n.length;return(t.length<e.length-1||!r)&&this._types[t]||null};Mime$1.prototype.getExtension=function(n){return n=/^\s*([^;\s]*)/.test(n)&&RegExp.$1,n&&this._extensions[n.toLowerCase()]||null};var Mime_1=Mime$1,standard={"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomdeleted+xml":["atomdeleted"],"application/atomsvc+xml":["atomsvc"],"application/atsc-dwd+xml":["dwd"],"application/atsc-held+xml":["held"],"application/atsc-rsat+xml":["rsat"],"application/bdoc":["bdoc"],"application/calendar+xml":["xcs"],"application/ccxml+xml":["ccxml"],"application/cdfx+xml":["cdfx"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mpd"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["es","ecma"],"application/emma+xml":["emma"],"application/emotionml+xml":["emotionml"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/express":["exp"],"application/fdt+xml":["fdt"],"application/font-tdpfr":["pfr"],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hjson":["hjson"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/its+xml":["its"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js","mjs"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lgr+xml":["lgr"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mmt-aei+xml":["maei"],"application/mmt-usd+xml":["musd"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/n-quads":["nq"],"application/n-triples":["nt"],"application/node":["cjs"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/p2p-overlay+xml":["relo"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/provenance+xml":["provx"],"application/pskc+xml":["pskcxml"],"application/raml+yaml":["raml"],"application/rdf+xml":["rdf","owl"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/route-apd+xml":["rapd"],"application/route-s-tsid+xml":["sls"],"application/route-usd+xml":["rusd"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/senml+xml":["senmlx"],"application/sensml+xml":["sensmlx"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/sieve":["siv","sieve"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/swid+xml":["swidtag"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/toml":["toml"],"application/trig":["trig"],"application/ttml+xml":["ttml"],"application/ubjson":["ubj"],"application/urc-ressheet+xml":["rsheet"],"application/urc-targetdesc+xml":["td"],"application/voicexml+xml":["vxml"],"application/wasm":["wasm"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/xaml+xml":["xaml"],"application/xcap-att+xml":["xav"],"application/xcap-caps+xml":["xca"],"application/xcap-diff+xml":["xdf"],"application/xcap-el+xml":["xel"],"application/xcap-ns+xml":["xns"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xliff+xml":["xlf"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["*xsl","xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":["*3gpp"],"audio/adpcm":["adp"],"audio/amr":["amr"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mobile-xmf":["mxmf"],"audio/mp3":["*mp3"],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx","opus"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/wav":["wav"],"audio/wave":["*wav"],"audio/webm":["weba"],"audio/xm":["xm"],"font/collection":["ttc"],"font/otf":["otf"],"font/ttf":["ttf"],"font/woff":["woff"],"font/woff2":["woff2"],"image/aces":["exr"],"image/apng":["apng"],"image/avif":["avif"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/dicom-rle":["drle"],"image/emf":["emf"],"image/fits":["fits"],"image/g3fax":["g3"],"image/gif":["gif"],"image/heic":["heic"],"image/heic-sequence":["heics"],"image/heif":["heif"],"image/heif-sequence":["heifs"],"image/hej2k":["hej2"],"image/hsj2":["hsj2"],"image/ief":["ief"],"image/jls":["jls"],"image/jp2":["jp2","jpg2"],"image/jpeg":["jpeg","jpg","jpe"],"image/jph":["jph"],"image/jphc":["jhc"],"image/jpm":["jpm"],"image/jpx":["jpx","jpf"],"image/jxr":["jxr"],"image/jxra":["jxra"],"image/jxrs":["jxrs"],"image/jxs":["jxs"],"image/jxsc":["jxsc"],"image/jxsi":["jxsi"],"image/jxss":["jxss"],"image/ktx":["ktx"],"image/ktx2":["ktx2"],"image/png":["png"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/t38":["t38"],"image/tiff":["tif","tiff"],"image/tiff-fx":["tfx"],"image/webp":["webp"],"image/wmf":["wmf"],"message/disposition-notification":["disposition-notification"],"message/global":["u8msg"],"message/global-delivery-status":["u8dsn"],"message/global-disposition-notification":["u8mdn"],"message/global-headers":["u8hdr"],"message/rfc822":["eml","mime"],"model/3mf":["3mf"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/mtl":["mtl"],"model/obj":["obj"],"model/step+xml":["stpx"],"model/step+zip":["stpz"],"model/step-xml+zip":["stpxz"],"model/stl":["stl"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["*x3db","x3dbz"],"model/x3d+fastinfoset":["x3db"],"model/x3d+vrml":["*x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"model/x3d-vrml":["x3dv"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["markdown","md"],"text/mathml":["mml"],"text/mdx":["mdx"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/richtext":["rtx"],"text/rtf":["*rtf"],"text/sgml":["sgml","sgm"],"text/shex":["shex"],"text/slim":["slim","slm"],"text/spdx":["spdx"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vtt":["vtt"],"text/xml":["*xml"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/iso.segment":["m4s"],"video/jpeg":["jpgv"],"video/jpm":["*jpm","jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/webm":["webm"]};let Mime=Mime_1;var lite=new Mime(standard);const name="@kintone/rest-api-client",version="5.5.2",publishConfig={access:"public"},author={name:"Cybozu, Inc.",url:"https://cybozu.co.jp"},description="Kintone REST API client for JavaScript",main$1="lib/src/index.js",module="esm/src/index.js",browser$1="lib/src/index.browser.js",types="lib/src/index.d.ts",scripts={prebuild:"pnpm clean",build:"tsc --build --force",postbuild:"run-p build:*",lint:"eslint 'src/**/*.ts' --max-warnings 0",prepublishOnly:"run-p build:umd_*",test:"cross-env NODE_OPTIONS=--experimental-vm-modules npx jest","test:ci":"cross-env NODE_OPTIONS=--experimental-vm-modules npx jest --runInBand","build:umd_dev":"rollup -c --environment BUILD:development","build:umd_prod":"rollup -c --environment BUILD:production",clean:"rimraf lib esm umd",fix:"pnpm lint --fix",start:"pnpm build --watch"},repository={type:"git",url:"git+https://github.com/kintone/js-sdk.git",directory:"packages/rest-api-client"},files=["esm","lib","umd","index.mjs"],keywords=["kintone","rest","api-client"],license="MIT",bugs={url:"https://github.com/kintone/js-sdk/issues"},homepage="https://github.com/kintone/js-sdk/tree/main/packages/rest-api-client#readme",engines={node:">=18"},devDependencies={"@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^26.0.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-node-resolve":"^15.2.3","@rollup/plugin-terser":"^0.4.4","@types/core-js":"^2.5.8","@types/js-base64":"^3.3.1","@types/mime":"^3.0.4","@types/qs":"^6.9.15",rollup:"^4.18.0","rollup-plugin-ecma-version-validator":"^0.2.13","rollup-plugin-license":"^3.4.0","rollup-plugin-node-globals":"^1.4.0","rollup-plugin-polyfill-node":"^0.13.0",webpack:"^5.92.0","webpack-cli":"^5.1.4","babel-loader":"^9.1.3",vite:"^5.2.13",rimraf:"^5.0.7","cross-env":"^7.0.3"},dependencies={"core-js":"^3.37.1",axios:"^1.7.2","form-data":"^4.0.0","js-base64":"^3.7.7",mime:"^3.0.0",qs:"^6.12.1"},exports={".":{types:{import:"./esm/src/index.d.ts",require:"./lib/src/index.d.ts",default:"./lib/src/index.d.ts"},node:{import:"./index.mjs",require:"./lib/src/index.js",default:"./lib/src/index.js"},browser:"./lib/src/index.browser.js"},"./package.json":"./package.json"},require$$2={name,version,publishConfig,author,description,main:main$1,module,browser:browser$1,types,scripts,repository,files,keywords,license,bugs,homepage,engines,devDependencies,dependencies,exports};var __awaiter$5=commonjsGlobal&&commonjsGlobal.__awaiter||function(n,e,t,r){function i(s){return s instanceof t?s:new t(function(l){l(s)})}return new(t||(t=Promise))(function(s,l){function u(m){try{d(r.next(m))}catch(_){l(_)}}function h(m){try{d(r.throw(m))}catch(_){l(_)}}function d(m){m.done?s(m.value):i(m.value).then(u,h)}d((r=r.apply(n,e||[])).next())})},__generator$5=commonjsGlobal&&commonjsGlobal.__generator||function(n,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},r,i,s,l;return l={next:u(0),throw:u(1),return:u(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function u(d){return function(m){return h([d,m])}}function h(d){if(r)throw new TypeError("Generator is already executing.");for(;l&&(l=0,d[0]&&(t=0)),t;)try{if(r=1,i&&(s=d[0]&2?i.return:d[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,d[1])).done)return s;switch(i=0,s&&(d=[d[0]&2,s.value]),d[0]){case 0:case 1:s=d;break;case 4:return t.label++,{value:d[1],done:!1};case 5:t.label++,i=d[1],d=[0];continue;case 7:d=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(d[0]===6||d[0]===2)){t=0;continue}if(d[0]===3&&(!s||d[1]>s[0]&&d[1]<s[3])){t.label=d[1];break}if(d[0]===6&&t.label<s[1]){t.label=s[1],s=d;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(d);break}s[2]&&t.ops.pop(),t.trys.pop();continue}d=e.call(n,t)}catch(m){d=[6,m],i=0}finally{r=s=0}if(d[0]&5)throw d[1];return{value:d[0]?d[1]:void 0,done:!0}}},__importDefault$3=commonjsGlobal&&commonjsGlobal.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(browser$2,"__esModule",{value:!0});browser$2.getVersion=browser$2.buildBaseUrl=browser$2.buildFormDataValue=browser$2.buildHeaders=browser$2.buildPlatformDependentConfig=browser$2.getDefaultAuth=browser$2.getRequestToken=browser$2.readFileFromPath=void 0;var UnsupportedPlatformError_1$2=UnsupportedPlatformError$1,lite_1=__importDefault$3(lite),package_json_1=__importDefault$3(require$$2),readFileFromPath=function(n){throw new UnsupportedPlatformError_1$2.UnsupportedPlatformError("Browser")};browser$2.readFileFromPath=readFileFromPath;var getRequestToken=function(){return __awaiter$5(void 0,void 0,void 0,function(){var n,e;return __generator$5(this,function(t){if(typeof kintone=="object"&&kintone!==null&&typeof kintone.getRequestToken=="function")return[2,kintone.getRequestToken()];if(typeof garoon=="object"&&garoon!==null&&typeof((e=(n=garoon.connect)===null||n===void 0?void 0:n.kintone)===null||e===void 0?void 0:e.getRequestToken)=="function")return[2,garoon.connect.kintone.getRequestToken()];throw new Error("session authentication must specify a request token")})})};browser$2.getRequestToken=getRequestToken;var getDefaultAuth=function(){return{type:"session"}};browser$2.getDefaultAuth=getDefaultAuth;var buildPlatformDependentConfig=function(){return{}};browser$2.buildPlatformDependentConfig=buildPlatformDependentConfig;var buildHeaders=function(){return{}};browser$2.buildHeaders=buildHeaders;var buildFormDataValue=function(n,e){var t={};return e&&(t.type=lite_1.default.getType(e)||void 0),new Blob([n],t)};browser$2.buildFormDataValue=buildFormDataValue;var buildBaseUrl=function(n){if(n)return n;if(location===void 0)throw new Error("The baseUrl parameter is required for this environment");var e=location.host,t=location.protocol;return"".concat(t,"//").concat(e)};browser$2.buildBaseUrl=buildBaseUrl;var getVersion=function(){return package_json_1.default.version};browser$2.getVersion=getVersion;var KintoneRestAPIClient$1={},BulkRequestClient$1={},BaseClient$1={},url={};Object.defineProperty(url,"__esModule",{value:!0});url.buildPath=void 0;var buildPath=function(n){var e=n.endpointName,t=n.guestSpaceId,r=n.preview,i=t!==void 0?"/guest/".concat(t):"",s=r?"/preview":"";return"/k".concat(i,"/v1").concat(s,"/").concat(e,".json")};url.buildPath=buildPath;var __assign$7=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$7=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i])}return n},__assign$7.apply(this,arguments)};Object.defineProperty(BaseClient$1,"__esModule",{value:!0});BaseClient$1.BaseClient=void 0;var url_1=url,BaseClient=function(){function n(e,t){this.client=e,this.guestSpaceId=t}return n.prototype.buildPathWithGuestSpaceId=function(e){return(0,url_1.buildPath)(__assign$7(__assign$7({},e),{guestSpaceId:this.guestSpaceId}))},n.prototype.buildPath=function(e){return(0,url_1.buildPath)(e)},n}();BaseClient$1.BaseClient=BaseClient;var __extends$7=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(r[s]=i[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),__assign$6=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$6=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i])}return n},__assign$6.apply(this,arguments)},__rest$3=commonjsGlobal&&commonjsGlobal.__rest||function(n,e){var t={};for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&e.indexOf(r)<0&&(t[r]=n[r]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(n);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(n,r[i])&&(t[r[i]]=n[r[i]]);return t};Object.defineProperty(BulkRequestClient$1,"__esModule",{value:!0});BulkRequestClient$1.BulkRequestClient=void 0;var BaseClient_1$4=BaseClient$1,BulkRequestClient=function(n){__extends$7(e,n);function e(t,r){var i=n.call(this,t,r)||this;return i.REQUESTS_LENGTH_LIMIT=20,i}return e.prototype.send=function(t){var r=this,i=t.requests,s=i.map(function(u){if("endpointName"in u){var h=u.endpointName,d=__rest$3(u,["endpointName"]);return __assign$6({api:r.buildPathWithGuestSpaceId({endpointName:h})},d)}return u}),l=this.buildPathWithGuestSpaceId({endpointName:"bulkRequest"});return this.client.post(l,{requests:s})},e}(BaseClient_1$4.BaseClient);BulkRequestClient$1.BulkRequestClient=BulkRequestClient;var AppClient$1={},__extends$6=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(r[s]=i[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),__assign$5=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$5=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i])}return n},__assign$5.apply(this,arguments)},__awaiter$4=commonjsGlobal&&commonjsGlobal.__awaiter||function(n,e,t,r){function i(s){return s instanceof t?s:new t(function(l){l(s)})}return new(t||(t=Promise))(function(s,l){function u(m){try{d(r.next(m))}catch(_){l(_)}}function h(m){try{d(r.throw(m))}catch(_){l(_)}}function d(m){m.done?s(m.value):i(m.value).then(u,h)}d((r=r.apply(n,e||[])).next())})},__generator$4=commonjsGlobal&&commonjsGlobal.__generator||function(n,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},r,i,s,l;return l={next:u(0),throw:u(1),return:u(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function u(d){return function(m){return h([d,m])}}function h(d){if(r)throw new TypeError("Generator is already executing.");for(;l&&(l=0,d[0]&&(t=0)),t;)try{if(r=1,i&&(s=d[0]&2?i.return:d[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,d[1])).done)return s;switch(i=0,s&&(d=[d[0]&2,s.value]),d[0]){case 0:case 1:s=d;break;case 4:return t.label++,{value:d[1],done:!1};case 5:t.label++,i=d[1],d=[0];continue;case 7:d=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(d[0]===6||d[0]===2)){t=0;continue}if(d[0]===3&&(!s||d[1]>s[0]&&d[1]<s[3])){t.label=d[1];break}if(d[0]===6&&t.label<s[1]){t.label=s[1],s=d;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(d);break}s[2]&&t.ops.pop(),t.trys.pop();continue}d=e.call(n,t)}catch(m){d=[6,m],i=0}finally{r=s=0}if(d[0]&5)throw d[1];return{value:d[0]?d[1]:void 0,done:!0}}},__rest$2=commonjsGlobal&&commonjsGlobal.__rest||function(n,e){var t={};for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&e.indexOf(r)<0&&(t[r]=n[r]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(n);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(n,r[i])&&(t[r[i]]=n[r[i]]);return t};Object.defineProperty(AppClient$1,"__esModule",{value:!0});AppClient$1.AppClient=void 0;var BaseClient_1$3=BaseClient$1,AppClient=function(n){__extends$6(e,n);function e(){return n!==null&&n.apply(this,arguments)||this}return e.prototype.getFormFields=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/form/fields",preview:r});return this.client.get(s,__assign$5({},i))},e.prototype.addFormFields=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/form/fields",preview:!0});return this.client.post(r,t)},e.prototype.updateFormFields=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/form/fields",preview:!0});return this.client.put(r,t)},e.prototype.deleteFormFields=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/form/fields",preview:!0});return this.client.delete(r,t)},e.prototype.getFormLayout=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/form/layout",preview:r});return this.client.get(s,__assign$5({},i))},e.prototype.updateFormLayout=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/form/layout",preview:!0});return this.client.put(r,t)},e.prototype.getViews=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/views",preview:r});return this.client.get(s,i)},e.prototype.updateViews=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/views",preview:!0});return this.client.put(r,t)},e.prototype.getApp=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app"});return this.client.get(r,t)},e.prototype.getApps=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"apps"});return this.client.get(r,t)},e.prototype.addApp=function(t){return __awaiter$4(this,void 0,void 0,function(){var r,i,s,l,u;return __generator$4(this,function(h){switch(h.label){case 0:return r=t.name,i=t.space,s=this.buildPathWithGuestSpaceId({endpointName:"app",preview:!0}),i?(l=this.buildPathWithGuestSpaceId({endpointName:"space"}),[4,this.client.get(l,{id:i})]):[3,2];case 1:return u=h.sent().defaultThread,[2,this.client.post(s,__assign$5(__assign$5({},t),{thread:u}))];case 2:return[2,this.client.post(s,{name:r})]}})})},e.prototype.getAppSettings=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/settings",preview:r});return this.client.get(s,i)},e.prototype.updateAppSettings=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/settings",preview:!0});return this.client.put(r,t)},e.prototype.getProcessManagement=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/status",preview:r});return this.client.get(s,i)},e.prototype.updateProcessManagement=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/status",preview:!0});return this.client.put(r,t)},e.prototype.getDeployStatus=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/deploy",preview:!0});return this.client.get(r,t)},e.prototype.deployApp=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/deploy",preview:!0});return this.client.post(r,t)},e.prototype.getFieldAcl=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"field/acl",preview:r});return this.client.get(s,__assign$5({},i))},e.prototype.updateFieldAcl=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"field/acl",preview:!0});return this.client.put(r,t)},e.prototype.getAppAcl=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/acl",preview:r});return this.client.get(s,__assign$5({},i))},e.prototype.updateAppAcl=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/acl",preview:!0});return this.client.put(r,t)},e.prototype.evaluateRecordsAcl=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"records/acl/evaluate"});return this.client.get(r,t)},e.prototype.getRecordAcl=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"record/acl",preview:r});return this.client.get(s,__assign$5({},i))},e.prototype.updateRecordAcl=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record/acl",preview:!0});return this.client.put(r,t)},e.prototype.getAppCustomize=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/customize",preview:r});return this.client.get(s,__assign$5({},i))},e.prototype.updateAppCustomize=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/customize",preview:!0});return this.client.put(r,t)},e.prototype.getGeneralNotifications=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/notifications/general",preview:r});return this.client.get(s,__assign$5({},i))},e.prototype.updateGeneralNotifications=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/notifications/general",preview:!0});return this.client.put(r,t)},e.prototype.getPerRecordNotifications=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/notifications/perRecord",preview:r});return this.client.get(s,i)},e.prototype.updatePerRecordNotifications=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/notifications/perRecord",preview:!0});return this.client.put(r,t)},e.prototype.getReminderNotifications=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/notifications/reminder",preview:r});return this.client.get(s,i)},e.prototype.updateReminderNotifications=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/notifications/reminder",preview:!0});return this.client.put(r,t)},e.prototype.getReports=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/reports",preview:r});return this.client.get(s,i)},e.prototype.updateReports=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/reports",preview:!0});return this.client.put(r,t)},e.prototype.getAppActions=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/actions",preview:r});return this.client.get(s,i)},e.prototype.updateAppActions=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/actions",preview:!0});return this.client.put(r,t)},e}(BaseClient_1$3.BaseClient);AppClient$1.AppClient=AppClient;var RecordClient$1={},error={},KintoneAbortSearchError$1={},__extends$5=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(r[s]=i[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(KintoneAbortSearchError$1,"__esModule",{value:!0});KintoneAbortSearchError$1.KintoneAbortSearchError=void 0;var KintoneAbortSearchError=function(n){__extends$5(e,n);function e(t){var r=n.call(this,t)||this;return r.name="KintoneAbortSearchError",r.message=t,Object.setPrototypeOf(r,e.prototype),r}return e}(Error);KintoneAbortSearchError$1.KintoneAbortSearchError=KintoneAbortSearchError;var KintoneAllRecordsError$1={},__extends$4=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(r[s]=i[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(KintoneAllRecordsError$1,"__esModule",{value:!0});KintoneAllRecordsError$1.KintoneAllRecordsError=void 0;var KintoneAllRecordsError=function(n){__extends$4(e,n);function e(t,r,i,s,l){var u=this,h=i-r.length,d=e.extractErrorIndex(h,s,l),m=e.buildErrorMessage(h,i,d);return u=n.call(this,m)||this,u.name="KintoneAllRecordsError",u.processedRecordsResult=t,u.unprocessedRecords=r,u.error=s,u.errorIndex=d,u.message=m,u.numOfProcessedRecords=h,u.numOfAllRecords=i,Object.setPrototypeOf(u,e.prototype),u}return e.parseErrorIndex=function(t){var r=[];return Object.keys(t).forEach(function(i){var s=i.match(/records\[(\d+)\]/);s&&r.push(Number(s[1]))}),r.length>0?Math.min.apply(Math,r):null},e.extractErrorIndex=function(t,r,i){if(r.bulkRequestIndex!==void 0&&r.errors){var s=e.parseErrorIndex(r.errors);if(s!==null)return t+r.bulkRequestIndex*i+s}},e.buildErrorMessage=function(t,r,i){var s="";return i!==void 0&&(s="An error occurred at records[".concat(i,"]. ")),s+="".concat(t,"/").concat(r," records are processed successfully"),s},e}(Error);KintoneAllRecordsError$1.KintoneAllRecordsError=KintoneAllRecordsError;var KintoneRestAPIError$1={},__extends$3=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(r[s]=i[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(KintoneRestAPIError$1,"__esModule",{value:!0});KintoneRestAPIError$1.KintoneRestAPIError=void 0;var KintoneRestAPIError=function(n){__extends$3(e,n);function e(t){var r=this,i=e.buildErrorResponseDateWithIndex(t),s=i.data,l=i.bulkRequestIndex;return r=n.call(this,s.message)||this,r.name="KintoneRestAPIError",r.id=s.id,r.code=s.code,r.errors=s.errors,r.status=t.status,r.bulkRequestIndex=l,r.headers=t.headers,r.message="[".concat(t.status,"] [").concat(r.code,"] ").concat(r.message," (").concat(r.id,")"),Error.captureStackTrace&&Error.captureStackTrace(r,e),Object.setPrototypeOf(r,e.prototype),r}return e.findErrorResponseDataWithIndex=function(t){for(var r=0;r<t.length;r++)if(Object.keys(t[r]).length!==0){var i=t[r];return{data:i,bulkRequestIndex:r}}throw Error("Missing response data in `results`. This error is likely caused by a bug in Kintone REST API Client. Please file an issue.")},e.buildErrorResponseDateWithIndex=function(t){return"results"in t.data?e.findErrorResponseDataWithIndex(t.data.results):{data:t.data}},e}(Error);KintoneRestAPIError$1.KintoneRestAPIError=KintoneRestAPIError;(function(n){var e=commonjsGlobal&&commonjsGlobal.__createBinding||(Object.create?function(r,i,s,l){l===void 0&&(l=s);var u=Object.getOwnPropertyDescriptor(i,s);(!u||("get"in u?!i.__esModule:u.writable||u.configurable))&&(u={enumerable:!0,get:function(){return i[s]}}),Object.defineProperty(r,l,u)}:function(r,i,s,l){l===void 0&&(l=s),r[l]=i[s]}),t=commonjsGlobal&&commonjsGlobal.__exportStar||function(r,i){for(var s in r)s!=="default"&&!Object.prototype.hasOwnProperty.call(i,s)&&e(i,r,s)};Object.defineProperty(n,"__esModule",{value:!0}),t(KintoneAbortSearchError$1,n),t(KintoneAllRecordsError$1,n),t(KintoneRestAPIError$1,n)})(error);var __extends$2=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(r[s]=i[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),__assign$4=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$4=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i])}return n},__assign$4.apply(this,arguments)},__awaiter$3=commonjsGlobal&&commonjsGlobal.__awaiter||function(n,e,t,r){function i(s){return s instanceof t?s:new t(function(l){l(s)})}return new(t||(t=Promise))(function(s,l){function u(m){try{d(r.next(m))}catch(_){l(_)}}function h(m){try{d(r.throw(m))}catch(_){l(_)}}function d(m){m.done?s(m.value):i(m.value).then(u,h)}d((r=r.apply(n,e||[])).next())})},__generator$3=commonjsGlobal&&commonjsGlobal.__generator||function(n,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},r,i,s,l;return l={next:u(0),throw:u(1),return:u(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function u(d){return function(m){return h([d,m])}}function h(d){if(r)throw new TypeError("Generator is already executing.");for(;l&&(l=0,d[0]&&(t=0)),t;)try{if(r=1,i&&(s=d[0]&2?i.return:d[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,d[1])).done)return s;switch(i=0,s&&(d=[d[0]&2,s.value]),d[0]){case 0:case 1:s=d;break;case 4:return t.label++,{value:d[1],done:!1};case 5:t.label++,i=d[1],d=[0];continue;case 7:d=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(d[0]===6||d[0]===2)){t=0;continue}if(d[0]===3&&(!s||d[1]>s[0]&&d[1]<s[3])){t.label=d[1];break}if(d[0]===6&&t.label<s[1]){t.label=s[1],s=d;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(d);break}s[2]&&t.ops.pop(),t.trys.pop();continue}d=e.call(n,t)}catch(m){d=[6,m],i=0}finally{r=s=0}if(d[0]&5)throw d[1];return{value:d[0]?d[1]:void 0,done:!0}}},__rest$1=commonjsGlobal&&commonjsGlobal.__rest||function(n,e){var t={};for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&e.indexOf(r)<0&&(t[r]=n[r]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(n);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(n,r[i])&&(t[r[i]]=n[r[i]]);return t},__spreadArray=commonjsGlobal&&commonjsGlobal.__spreadArray||function(n,e,t){if(t||arguments.length===2)for(var r=0,i=e.length,s;r<i;r++)(s||!(r in e))&&(s||(s=Array.prototype.slice.call(e,0,r)),s[r]=e[r]);return n.concat(s||Array.prototype.slice.call(e))};Object.defineProperty(RecordClient$1,"__esModule",{value:!0});RecordClient$1.RecordClient=void 0;var error_1$1=error,BaseClient_1$2=BaseClient$1,ADD_RECORDS_LIMIT=100,UPDATE_RECORDS_LIMIT=100,DELETE_RECORDS_LIMIT=100,GET_RECORDS_LIMIT=500,RecordClient=function(n){__extends$2(e,n);function e(t,r,i){var s=n.call(this,t,i)||this;return s.bulkRequestClient=r,s.didWarnMaximumOffsetValue=!1,s}return e.prototype.getRecord=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record"});return this.client.get(r,t)},e.prototype.addRecord=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record"});return this.client.post(r,t)},e.prototype.updateRecord=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record"});return this.client.put(r,t)},e.prototype.upsertRecord=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,i,s,l,u,h;return __generator$3(this,function(d){switch(d.label){case 0:return r=t.app,i=t.updateKey,s=t.record,[4,this.getRecords({app:r,query:"".concat(i.field,' = "').concat(i.value,'"')})];case 1:return l=d.sent().records,l.length>0?l[0].$id.type!=="__ID__"?[3,3]:[4,this.updateRecord(t)]:[3,4];case 2:return u=d.sent().revision,[2,{id:l[0].$id.value,revision:u}];case 3:throw new Error("Missing `$id` in `getRecords` response. This error is likely caused by a bug in Kintone REST API Client. Please file an issue.");case 4:return[2,this.addRecord({app:r,record:Object.assign({},s,(h={},h[i.field]={value:i.value},h))})]}})})},e.prototype.getRecords=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,i;return __generator$3(this,function(s){switch(s.label){case 0:return r=this.buildPathWithGuestSpaceId({endpointName:"records"}),[4,this.client.get(r,t)];case 1:return i=s.sent(),this.warnMaximumOffsetValueIfNeeded(t.query),[2,i]}})})},e.prototype.warnMaximumOffsetValueIfNeeded=function(t){if(t){var r=/offset\s+(\d+)/i,i=t.match(r);!this.didWarnMaximumOffsetValue&&i&&Number(i[1])>1e4&&(this.didWarnMaximumOffsetValue=!0,console.warn("Warning: The maximum offset value will be limited to 10,000 in the future. Please use `createCursor()` and `getRecordsByCursor()` instead."))}},e.prototype.addRecords=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,i,s,l;return __generator$3(this,function(u){switch(u.label){case 0:return r=this.buildPathWithGuestSpaceId({endpointName:"records"}),[4,this.client.post(r,t)];case 1:return i=u.sent(),s=i.ids,l=i.revisions,[2,{ids:s,revisions:l,records:s.map(function(h,d){return{id:h,revision:l[d]}})}]}})})},e.prototype.updateRecords=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"records"});return this.client.put(r,t)},e.prototype.deleteRecords=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"records"});return this.client.delete(r,t)},e.prototype.createCursor=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"records/cursor"});return this.client.post(r,t)},e.prototype.getRecordsByCursor=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"records/cursor"});return this.client.get(r,t)},e.prototype.deleteCursor=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"records/cursor"});return this.client.delete(r,t)},e.prototype.getAllRecords=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,i,s,l,u,h,d;return __generator$3(this,function(m){return r=t.condition,i=t.orderBy,s=t.withCursor,l=s===void 0?!0:s,u=__rest$1(t,["condition","orderBy","withCursor"]),i?l?(h=r?"".concat(r," "):"",d="".concat(h).concat(i?"order by ".concat(i):""),[2,this.getAllRecordsWithCursor(__assign$4(__assign$4({},u),{query:d}))]):[2,this.getAllRecordsWithOffset(__assign$4(__assign$4({},u),{orderBy:i,condition:r}))]:[2,this.getAllRecordsWithId(__assign$4(__assign$4({},u),{condition:r}))]})})},e.prototype.getAllRecordsWithId=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,i,s,l,u,h,d,m,_,S;return __generator$3(this,function(C){switch(C.label){case 0:r=t.fields,i=t.condition,s=__rest$1(t,["fields","condition"]),l=r,l&&l.length>0&&l.indexOf("$id")===-1&&(l=__spreadArray(__spreadArray([],l,!0),["$id"],!1)),u=i?"(".concat(i,") and "):"",h=[],d="0",C.label=1;case 1:return m="".concat(u,"$id > ").concat(d," order by $id asc limit ").concat(GET_RECORDS_LIMIT),[4,this.getRecords(__assign$4(__assign$4({},s),{fields:l,query:m}))];case 2:if(_=C.sent(),h=h.concat(_.records),_.records.length<GET_RECORDS_LIMIT)return[3,3];if(S=_.records[_.records.length-1],S.$id.type==="__ID__")d=S.$id.value;else throw new Error("Missing `$id` in `getRecords` response. This error is likely caused by a bug in Kintone REST API Client. Please file an issue.");return[3,1];case 3:return[2,h]}})})},e.prototype.getAllRecordsWithOffset=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,i,s,l,u,h,d,m;return __generator$3(this,function(_){switch(_.label){case 0:r=t.condition,i=t.orderBy,s=__rest$1(t,["condition","orderBy"]),l=r?"".concat(r," "):"",u=[],h=0,_.label=1;case 1:return d="".concat(l).concat(i?"order by ".concat(i," "):"","limit ").concat(GET_RECORDS_LIMIT," offset ").concat(h),[4,this.getRecords(__assign$4(__assign$4({},s),{query:d}))];case 2:return m=_.sent(),u=u.concat(m.records),m.records.length<GET_RECORDS_LIMIT?[3,3]:(h+=GET_RECORDS_LIMIT,[3,1]);case 3:return[2,u]}})})},e.prototype.getAllRecordsWithCursor=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,i,s,l;return __generator$3(this,function(u){switch(u.label){case 0:return[4,this.createCursor(t)];case 1:r=u.sent().id,u.label=2;case 2:u.trys.push([2,6,,8]),i=[],u.label=3;case 3:return[4,this.getRecordsByCursor({id:r})];case 4:return s=u.sent(),i=i.concat(s.records),s.next?[3,3]:[3,5];case 5:return[2,i];case 6:return l=u.sent(),[4,this.deleteCursor({id:r})];case 7:throw u.sent(),l;case 8:return[2]}})})},e.prototype.addAllRecords=function(t){return __awaiter$3(this,void 0,void 0,function(){return __generator$3(this,function(r){if(!t.records.every(function(i){return!Array.isArray(i)&&i instanceof Object}))throw new Error("the `records` parameter must be an array of object.");return[2,this.addAllRecordsRecursive(t,t.records.length,[])]})})},e.prototype.addAllRecordsRecursive=function(t,r,i){return __awaiter$3(this,void 0,void 0,function(){var s,l,u,h,d,m;return __generator$3(this,function(_){switch(_.label){case 0:if(s=this.bulkRequestClient.REQUESTS_LENGTH_LIMIT*ADD_RECORDS_LIMIT,l=t.app,u=t.records,h=u.slice(0,s),h.length===0)return[2,{records:i}];_.label=1;case 1:return _.trys.push([1,3,,4]),[4,this.addAllRecordsWithBulkRequest({app:l,records:h})];case 2:return d=_.sent(),[3,4];case 3:throw m=_.sent(),new error_1$1.KintoneAllRecordsError({records:i},u,r,m,ADD_RECORDS_LIMIT);case 4:return[2,this.addAllRecordsRecursive({app:l,records:u.slice(s)},r,i.concat(d))]}})})},e.prototype.addAllRecordsWithBulkRequest=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,i,s;return __generator$3(this,function(l){switch(l.label){case 0:return r=this.separateArrayRecursive(ADD_RECORDS_LIMIT,[],t.records),i=r.map(function(u){return{method:"POST",endpointName:"records",payload:{app:t.app,records:u}}}),[4,this.bulkRequestClient.send({requests:i})];case 1:return s=l.sent().results,[2,s.map(function(u){var h=u.ids,d=u.revisions;return h.map(function(m,_){return{id:m,revision:d[_]}})}).reduce(function(u,h){return u.concat(h)},[])]}})})},e.prototype.updateAllRecords=function(t){return __awaiter$3(this,void 0,void 0,function(){return __generator$3(this,function(r){return[2,this.updateAllRecordsRecursive(t,t.records.length,[])]})})},e.prototype.updateAllRecordsRecursive=function(t,r,i){return __awaiter$3(this,void 0,void 0,function(){var s,l,u,h,d,m;return __generator$3(this,function(_){switch(_.label){case 0:if(s=this.bulkRequestClient.REQUESTS_LENGTH_LIMIT*UPDATE_RECORDS_LIMIT,l=t.app,u=t.records,h=u.slice(0,s),h.length===0)return[2,{records:i}];_.label=1;case 1:return _.trys.push([1,3,,4]),[4,this.updateAllRecordsWithBulkRequest({app:l,records:h})];case 2:return d=_.sent(),[3,4];case 3:throw m=_.sent(),new error_1$1.KintoneAllRecordsError({records:i},u,r,m,UPDATE_RECORDS_LIMIT);case 4:return[2,this.updateAllRecordsRecursive({app:l,records:u.slice(s)},r,i.concat(d))]}})})},e.prototype.updateAllRecordsWithBulkRequest=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,i,s;return __generator$3(this,function(l){switch(l.label){case 0:return r=this.separateArrayRecursive(UPDATE_RECORDS_LIMIT,[],t.records),i=r.map(function(u){return{method:"PUT",endpointName:"records",payload:{app:t.app,records:u}}}),[4,this.bulkRequestClient.send({requests:i})];case 1:return s=l.sent().results,[2,s.map(function(u){return u.records}).reduce(function(u,h){return u.concat(h)},[])]}})})},e.prototype.deleteAllRecords=function(t){return this.deleteAllRecordsRecursive(t,t.records.length)},e.prototype.deleteAllRecordsRecursive=function(t,r){return __awaiter$3(this,void 0,void 0,function(){var i,s,l,u,h;return __generator$3(this,function(d){switch(d.label){case 0:if(i=this.bulkRequestClient.REQUESTS_LENGTH_LIMIT*DELETE_RECORDS_LIMIT,s=t.app,l=t.records,u=l.slice(0,i),u.length===0)return[2,{}];d.label=1;case 1:return d.trys.push([1,3,,4]),[4,this.deleteAllRecordsWithBulkRequest({app:s,records:u})];case 2:return d.sent(),[3,4];case 3:throw h=d.sent(),new error_1$1.KintoneAllRecordsError({},l,r,h,DELETE_RECORDS_LIMIT);case 4:return[2,this.deleteAllRecordsRecursive({app:s,records:l.slice(i)},r)]}})})},e.prototype.deleteAllRecordsWithBulkRequest=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,i;return __generator$3(this,function(s){switch(s.label){case 0:return r=this.separateArrayRecursive(DELETE_RECORDS_LIMIT,[],t.records),i=r.map(function(l){return{method:"DELETE",endpointName:"records",payload:{app:t.app,ids:l.map(function(u){return u.id}),revisions:l.map(function(u){return u.revision})}}}),[4,this.bulkRequestClient.send({requests:i})];case 1:return s.sent(),[2]}})})},e.prototype.separateArrayRecursive=function(t,r,i){var s=i.slice(0,t);return s.length===0?r:this.separateArrayRecursive(t,__spreadArray(__spreadArray([],r,!0),[s],!1),i.slice(t))},e.prototype.addRecordComment=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record/comment"});return this.client.post(r,t)},e.prototype.deleteRecordComment=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record/comment"});return this.client.delete(r,t)},e.prototype.getRecordComments=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record/comments"});return this.client.get(r,t)},e.prototype.updateRecordAssignees=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record/assignees"});return this.client.put(r,t)},e.prototype.updateRecordStatus=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record/status"});return this.client.put(r,t)},e.prototype.updateRecordsStatus=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"records/status"});return this.client.put(r,t)},e}(BaseClient_1$2.BaseClient);RecordClient$1.RecordClient=RecordClient;var SpaceClient$1={},__extends$1=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(r[s]=i[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(SpaceClient$1,"__esModule",{value:!0});SpaceClient$1.SpaceClient=void 0;var BaseClient_1$1=BaseClient$1,SpaceClient=function(n){__extends$1(e,n);function e(){return n!==null&&n.apply(this,arguments)||this}return e.prototype.getSpace=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space"});return this.client.get(r,t)},e.prototype.deleteSpace=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space"});return this.client.delete(r,t)},e.prototype.updateSpaceBody=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space/body"});return this.client.put(r,t)},e.prototype.getSpaceMembers=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space/members"});return this.client.get(r,t)},e.prototype.updateSpaceMembers=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space/members"});return this.client.put(r,t)},e.prototype.updateThread=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space/thread"});return this.client.put(r,t)},e.prototype.addThreadComment=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space/thread/comment"});return this.client.post(r,t)},e.prototype.addGuests=function(t){var r=this.buildPath({endpointName:"guests"});return this.client.post(r,t)},e.prototype.deleteGuests=function(t){var r=this.buildPath({endpointName:"guests"});return this.client.delete(r,t)},e.prototype.updateSpaceGuests=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space/guests"});return this.client.put(r,t)},e.prototype.addSpaceFromTemplate=function(t){var r=this.buildPath({endpointName:"template/space"});return this.client.post(r,t)},e}(BaseClient_1$1.BaseClient);SpaceClient$1.SpaceClient=SpaceClient;var FileClient$1={},browser=typeof self=="object"?self.FormData:window.FormData,__extends=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(r[s]=i[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),__awaiter$2=commonjsGlobal&&commonjsGlobal.__awaiter||function(n,e,t,r){function i(s){return s instanceof t?s:new t(function(l){l(s)})}return new(t||(t=Promise))(function(s,l){function u(m){try{d(r.next(m))}catch(_){l(_)}}function h(m){try{d(r.throw(m))}catch(_){l(_)}}function d(m){m.done?s(m.value):i(m.value).then(u,h)}d((r=r.apply(n,e||[])).next())})},__generator$2=commonjsGlobal&&commonjsGlobal.__generator||function(n,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},r,i,s,l;return l={next:u(0),throw:u(1),return:u(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function u(d){return function(m){return h([d,m])}}function h(d){if(r)throw new TypeError("Generator is already executing.");for(;l&&(l=0,d[0]&&(t=0)),t;)try{if(r=1,i&&(s=d[0]&2?i.return:d[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,d[1])).done)return s;switch(i=0,s&&(d=[d[0]&2,s.value]),d[0]){case 0:case 1:s=d;break;case 4:return t.label++,{value:d[1],done:!1};case 5:t.label++,i=d[1],d=[0];continue;case 7:d=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(d[0]===6||d[0]===2)){t=0;continue}if(d[0]===3&&(!s||d[1]>s[0]&&d[1]<s[3])){t.label=d[1];break}if(d[0]===6&&t.label<s[1]){t.label=s[1],s=d;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(d);break}s[2]&&t.ops.pop(),t.trys.pop();continue}d=e.call(n,t)}catch(m){d=[6,m],i=0}finally{r=s=0}if(d[0]&5)throw d[1];return{value:d[0]?d[1]:void 0,done:!0}}},__importDefault$2=commonjsGlobal&&commonjsGlobal.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(FileClient$1,"__esModule",{value:!0});FileClient$1.FileClient=void 0;var form_data_1$1=__importDefault$2(browser),platform_1$2=platform$2,UnsupportedPlatformError_1$1=UnsupportedPlatformError$1,BaseClient_1=BaseClient$1,FileClient=function(n){__extends(e,n);function e(){return n!==null&&n.apply(this,arguments)||this}return e.prototype.uploadFile=function(t){return __awaiter$2(this,void 0,void 0,function(){var r,i,s,l,m,u,h,d,m,_;return __generator$2(this,function(S){switch(S.label){case 0:if(r=this.buildPathWithGuestSpaceId({endpointName:"file"}),i=new form_data_1$1.default,!("path"in t.file))return[3,5];S.label=1;case 1:return S.trys.push([1,3,,4]),[4,platform_1$2.platformDeps.readFileFromPath(t.file.path)];case 2:return s=S.sent(),l=s.name,m=s.data,i.append("file",m,l),[3,4];case 3:throw u=S.sent(),u instanceof UnsupportedPlatformError_1$1.UnsupportedPlatformError?new Error("uploadFile doesn't allow to accept a file path in ".concat(u.platform," environment.")):u;case 4:return[3,6];case 5:h=t.file,d=h.name,m=h.data,_=platform_1$2.platformDeps.buildFormDataValue(m,d),i.append("file",_,d),S.label=6;case 6:return[2,this.client.postData(r,i)]}})})},e.prototype.downloadFile=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"file"});return this.client.getData(r,t)},e}(BaseClient_1.BaseClient);FileClient$1.FileClient=FileClient;var http={},AxiosClient$1={};function bind$2(n,e){return function(){return n.apply(e,arguments)}}const{toString}=Object.prototype,{getPrototypeOf}=Object,kindOf=(n=>e=>{const t=toString.call(e);return n[t]||(n[t]=t.slice(8,-1).toLowerCase())})(Object.create(null)),kindOfTest=n=>(n=n.toLowerCase(),e=>kindOf(e)===n),typeOfTest=n=>e=>typeof e===n,{isArray:isArray$4}=Array,isUndefined=typeOfTest("undefined");function isBuffer$1(n){return n!==null&&!isUndefined(n)&&n.constructor!==null&&!isUndefined(n.constructor)&&isFunction(n.constructor.isBuffer)&&n.constructor.isBuffer(n)}const isArrayBuffer=kindOfTest("ArrayBuffer");function isArrayBufferView(n){let e;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?e=ArrayBuffer.isView(n):e=n&&n.buffer&&isArrayBuffer(n.buffer),e}const isString$1=typeOfTest("string"),isFunction=typeOfTest("function"),isNumber$1=typeOfTest("number"),isObject=n=>n!==null&&typeof n=="object",isBoolean$1=n=>n===!0||n===!1,isPlainObject=n=>{if(kindOf(n)!=="object")return!1;const e=getPrototypeOf(n);return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Symbol.toStringTag in n)&&!(Symbol.iterator in n)},isDate$1=kindOfTest("Date"),isFile=kindOfTest("File"),isBlob=kindOfTest("Blob"),isFileList=kindOfTest("FileList"),isStream=n=>isObject(n)&&isFunction(n.pipe),isFormData=n=>{let e;return n&&(typeof FormData=="function"&&n instanceof FormData||isFunction(n.append)&&((e=kindOf(n))==="formdata"||e==="object"&&isFunction(n.toString)&&n.toString()==="[object FormData]"))},isURLSearchParams=kindOfTest("URLSearchParams"),[isReadableStream,isRequest,isResponse,isHeaders]=["ReadableStream","Request","Response","Headers"].map(kindOfTest),trim=n=>n.trim?n.trim():n.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function forEach(n,e,{allOwnKeys:t=!1}={}){if(n===null||typeof n>"u")return;let r,i;if(typeof n!="object"&&(n=[n]),isArray$4(n))for(r=0,i=n.length;r<i;r++)e.call(null,n[r],r,n);else{const s=t?Object.getOwnPropertyNames(n):Object.keys(n),l=s.length;let u;for(r=0;r<l;r++)u=s[r],e.call(null,n[u],u,n)}}function findKey(n,e){e=e.toLowerCase();const t=Object.keys(n);let r=t.length,i;for(;r-- >0;)if(i=t[r],e===i.toLowerCase())return i;return null}const _global=(()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:commonjsGlobal)(),isContextDefined=n=>!isUndefined(n)&&n!==_global;function merge$1(){const{caseless:n}=isContextDefined(this)&&this||{},e={},t=(r,i)=>{const s=n&&findKey(e,i)||i;isPlainObject(e[s])&&isPlainObject(r)?e[s]=merge$1(e[s],r):isPlainObject(r)?e[s]=merge$1({},r):isArray$4(r)?e[s]=r.slice():e[s]=r};for(let r=0,i=arguments.length;r<i;r++)arguments[r]&&forEach(arguments[r],t);return e}const extend=(n,e,t,{allOwnKeys:r}={})=>(forEach(e,(i,s)=>{t&&isFunction(i)?n[s]=bind$2(i,t):n[s]=i},{allOwnKeys:r}),n),stripBOM=n=>(n.charCodeAt(0)===65279&&(n=n.slice(1)),n),inherits=(n,e,t,r)=>{n.prototype=Object.create(e.prototype,r),n.prototype.constructor=n,Object.defineProperty(n,"super",{value:e.prototype}),t&&Object.assign(n.prototype,t)},toFlatObject=(n,e,t,r)=>{let i,s,l;const u={};if(e=e||{},n==null)return e;do{for(i=Object.getOwnPropertyNames(n),s=i.length;s-- >0;)l=i[s],(!r||r(l,n,e))&&!u[l]&&(e[l]=n[l],u[l]=!0);n=t!==!1&&getPrototypeOf(n)}while(n&&(!t||t(n,e))&&n!==Object.prototype);return e},endsWith=(n,e,t)=>{n=String(n),(t===void 0||t>n.length)&&(t=n.length),t-=e.length;const r=n.indexOf(e,t);return r!==-1&&r===t},toArray=n=>{if(!n)return null;if(isArray$4(n))return n;let e=n.length;if(!isNumber$1(e))return null;const t=new Array(e);for(;e-- >0;)t[e]=n[e];return t},isTypedArray=(n=>e=>n&&e instanceof n)(typeof Uint8Array<"u"&&getPrototypeOf(Uint8Array)),forEachEntry=(n,e)=>{const r=(n&&n[Symbol.iterator]).call(n);let i;for(;(i=r.next())&&!i.done;){const s=i.value;e.call(n,s[0],s[1])}},matchAll=(n,e)=>{let t;const r=[];for(;(t=n.exec(e))!==null;)r.push(t);return r},isHTMLForm=kindOfTest("HTMLFormElement"),toCamelCase=n=>n.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(t,r,i){return r.toUpperCase()+i}),hasOwnProperty=(({hasOwnProperty:n})=>(e,t)=>n.call(e,t))(Object.prototype),isRegExp$2=kindOfTest("RegExp"),reduceDescriptors=(n,e)=>{const t=Object.getOwnPropertyDescriptors(n),r={};forEach(t,(i,s)=>{let l;(l=e(i,s,n))!==!1&&(r[s]=l||i)}),Object.defineProperties(n,r)},freezeMethods=n=>{reduceDescriptors(n,(e,t)=>{if(isFunction(n)&&["arguments","caller","callee"].indexOf(t)!==-1)return!1;const r=n[t];if(isFunction(r)){if(e.enumerable=!1,"writable"in e){e.writable=!1;return}e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+t+"'")})}})},toObjectSet=(n,e)=>{const t={},r=i=>{i.forEach(s=>{t[s]=!0})};return isArray$4(n)?r(n):r(String(n).split(e)),t},noop$1=()=>{},toFiniteNumber=(n,e)=>n!=null&&Number.isFinite(n=+n)?n:e,ALPHA="abcdefghijklmnopqrstuvwxyz",DIGIT="0123456789",ALPHABET={DIGIT,ALPHA,ALPHA_DIGIT:ALPHA+ALPHA.toUpperCase()+DIGIT},generateString=(n=16,e=ALPHABET.ALPHA_DIGIT)=>{let t="";const{length:r}=e;for(;n--;)t+=e[Math.random()*r|0];return t};function isSpecCompliantForm(n){return!!(n&&isFunction(n.append)&&n[Symbol.toStringTag]==="FormData"&&n[Symbol.iterator])}const toJSONObject=n=>{const e=new Array(10),t=(r,i)=>{if(isObject(r)){if(e.indexOf(r)>=0)return;if(!("toJSON"in r)){e[i]=r;const s=isArray$4(r)?[]:{};return forEach(r,(l,u)=>{const h=t(l,i+1);!isUndefined(h)&&(s[u]=h)}),e[i]=void 0,s}}return r};return t(n,0)},isAsyncFn=kindOfTest("AsyncFunction"),isThenable=n=>n&&(isObject(n)||isFunction(n))&&isFunction(n.then)&&isFunction(n.catch);var utils$1$1={isArray:isArray$4,isArrayBuffer,isBuffer:isBuffer$1,isFormData,isArrayBufferView,isString:isString$1,isNumber:isNumber$1,isBoolean:isBoolean$1,isObject,isPlainObject,isReadableStream,isRequest,isResponse,isHeaders,isUndefined,isDate:isDate$1,isFile,isBlob,isRegExp:isRegExp$2,isFunction,isStream,isURLSearchParams,isTypedArray,isFileList,forEach,merge:merge$1,extend,trim,stripBOM,inherits,toFlatObject,kindOf,kindOfTest,endsWith,toArray,forEachEntry,matchAll,isHTMLForm,hasOwnProperty,hasOwnProp:hasOwnProperty,reduceDescriptors,freezeMethods,toObjectSet,toCamelCase,noop:noop$1,toFiniteNumber,findKey,global:_global,isContextDefined,ALPHABET,generateString,isSpecCompliantForm,toJSONObject,isAsyncFn,isThenable};function AxiosError(n,e,t,r,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=n,this.name="AxiosError",e&&(this.code=e),t&&(this.config=t),r&&(this.request=r),i&&(this.response=i)}utils$1$1.inherits(AxiosError,Error,{toJSON:function n(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:utils$1$1.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const prototype$1=AxiosError.prototype,descriptors={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(n=>{descriptors[n]={value:n}});Object.defineProperties(AxiosError,descriptors);Object.defineProperty(prototype$1,"isAxiosError",{value:!0});AxiosError.from=(n,e,t,r,i,s)=>{const l=Object.create(prototype$1);return utils$1$1.toFlatObject(n,l,function(h){return h!==Error.prototype},u=>u!=="isAxiosError"),AxiosError.call(l,n.message,e,t,r,i),l.cause=n,l.name=n.name,s&&Object.assign(l,s),l};var httpAdapter=null;function isVisitable(n){return utils$1$1.isPlainObject(n)||utils$1$1.isArray(n)}function removeBrackets(n){return utils$1$1.endsWith(n,"[]")?n.slice(0,-2):n}function renderKey(n,e,t){return n?n.concat(e).map(function(i,s){return i=removeBrackets(i),!t&&s?"["+i+"]":i}).join(t?".":""):e}function isFlatArray(n){return utils$1$1.isArray(n)&&!n.some(isVisitable)}const predicates=utils$1$1.toFlatObject(utils$1$1,{},null,function n(e){return/^is[A-Z]/.test(e)});function toFormData(n,e,t){if(!utils$1$1.isObject(n))throw new TypeError("target must be an object");e=e||new FormData,t=utils$1$1.toFlatObject(t,{metaTokens:!0,dots:!1,indexes:!1},!1,function(O,H){return!utils$1$1.isUndefined(H[O])});const r=t.metaTokens,i=t.visitor||m,s=t.dots,l=t.indexes,h=(t.Blob||typeof Blob<"u"&&Blob)&&utils$1$1.isSpecCompliantForm(e);if(!utils$1$1.isFunction(i))throw new TypeError("visitor must be a function");function d(T){if(T===null)return"";if(utils$1$1.isDate(T))return T.toISOString();if(!h&&utils$1$1.isBlob(T))throw new AxiosError("Blob is not supported. Use a Buffer instead.");return utils$1$1.isArrayBuffer(T)||utils$1$1.isTypedArray(T)?h&&typeof Blob=="function"?new Blob([T]):Buffer.from(T):T}function m(T,O,H){let R=T;if(T&&!H&&typeof T=="object"){if(utils$1$1.endsWith(O,"{}"))O=r?O:O.slice(0,-2),T=JSON.stringify(T);else if(utils$1$1.isArray(T)&&isFlatArray(T)||(utils$1$1.isFileList(T)||utils$1$1.endsWith(O,"[]"))&&(R=utils$1$1.toArray(T)))return O=removeBrackets(O),R.forEach(function(V,q){!(utils$1$1.isUndefined(V)||V===null)&&e.append(l===!0?renderKey([O],q,s):l===null?O:O+"[]",d(V))}),!1}return isVisitable(T)?!0:(e.append(renderKey(H,O,s),d(T)),!1)}const _=[],S=Object.assign(predicates,{defaultVisitor:m,convertValue:d,isVisitable});function C(T,O){if(!utils$1$1.isUndefined(T)){if(_.indexOf(T)!==-1)throw Error("Circular reference detected in "+O.join("."));_.push(T),utils$1$1.forEach(T,function(R,Z){(!(utils$1$1.isUndefined(R)||R===null)&&i.call(e,R,utils$1$1.isString(Z)?Z.trim():Z,O,S))===!0&&C(R,O?O.concat(Z):[Z])}),_.pop()}}if(!utils$1$1.isObject(n))throw new TypeError("data must be an object");return C(n),e}function encode$1(n){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(n).replace(/[!'()~]|%20|%00/g,function(r){return e[r]})}function AxiosURLSearchParams(n,e){this._pairs=[],n&&toFormData(n,this,e)}const prototype=AxiosURLSearchParams.prototype;prototype.append=function n(e,t){this._pairs.push([e,t])};prototype.toString=function n(e){const t=e?function(r){return e.call(this,r,encode$1)}:encode$1;return this._pairs.map(function(i){return t(i[0])+"="+t(i[1])},"").join("&")};function encode$2(n){return encodeURIComponent(n).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function buildURL(n,e,t){if(!e)return n;const r=t&&t.encode||encode$2,i=t&&t.serialize;let s;if(i?s=i(e,t):s=utils$1$1.isURLSearchParams(e)?e.toString():new AxiosURLSearchParams(e,t).toString(r),s){const l=n.indexOf("#");l!==-1&&(n=n.slice(0,l)),n+=(n.indexOf("?")===-1?"?":"&")+s}return n}class InterceptorManager{constructor(){this.handlers=[]}use(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){utils$1$1.forEach(this.handlers,function(r){r!==null&&e(r)})}}var InterceptorManager$1=InterceptorManager,transitionalDefaults={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},URLSearchParams$1=typeof URLSearchParams<"u"?URLSearchParams:AxiosURLSearchParams,FormData$1=typeof FormData<"u"?FormData:null,Blob$1=typeof Blob<"u"?Blob:null,platform$1={isBrowser:!0,classes:{URLSearchParams:URLSearchParams$1,FormData:FormData$1,Blob:Blob$1},protocols:["http","https","file","blob","url","data"]};const hasBrowserEnv=typeof window<"u"&&typeof document<"u",hasStandardBrowserEnv=(n=>hasBrowserEnv&&["ReactNative","NativeScript","NS"].indexOf(n)<0)(typeof navigator<"u"&&navigator.product),hasStandardBrowserWebWorkerEnv=(()=>typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function")(),origin=hasBrowserEnv&&window.location.href||"http://localhost";var utils$3=Object.freeze({__proto__:null,hasBrowserEnv,hasStandardBrowserWebWorkerEnv,hasStandardBrowserEnv,origin}),platform={...utils$3,...platform$1};function toURLEncodedForm(n,e){return toFormData(n,new platform.classes.URLSearchParams,Object.assign({visitor:function(t,r,i,s){return platform.isNode&&utils$1$1.isBuffer(t)?(this.append(r,t.toString("base64")),!1):s.defaultVisitor.apply(this,arguments)}},e))}function parsePropPath(n){return utils$1$1.matchAll(/\w+|\[(\w*)]/g,n).map(e=>e[0]==="[]"?"":e[1]||e[0])}function arrayToObject$1(n){const e={},t=Object.keys(n);let r;const i=t.length;let s;for(r=0;r<i;r++)s=t[r],e[s]=n[s];return e}function formDataToJSON(n){function e(t,r,i,s){let l=t[s++];if(l==="__proto__")return!0;const u=Number.isFinite(+l),h=s>=t.length;return l=!l&&utils$1$1.isArray(i)?i.length:l,h?(utils$1$1.hasOwnProp(i,l)?i[l]=[i[l],r]:i[l]=r,!u):((!i[l]||!utils$1$1.isObject(i[l]))&&(i[l]=[]),e(t,r,i[l],s)&&utils$1$1.isArray(i[l])&&(i[l]=arrayToObject$1(i[l])),!u)}if(utils$1$1.isFormData(n)&&utils$1$1.isFunction(n.entries)){const t={};return utils$1$1.forEachEntry(n,(r,i)=>{e(parsePropPath(r),i,t,0)}),t}return null}function stringifySafely(n,e,t){if(utils$1$1.isString(n))try{return(e||JSON.parse)(n),utils$1$1.trim(n)}catch(r){if(r.name!=="SyntaxError")throw r}return(t||JSON.stringify)(n)}const defaults$2={transitional:transitionalDefaults,adapter:["xhr","http","fetch"],transformRequest:[function n(e,t){const r=t.getContentType()||"",i=r.indexOf("application/json")>-1,s=utils$1$1.isObject(e);if(s&&utils$1$1.isHTMLForm(e)&&(e=new FormData(e)),utils$1$1.isFormData(e))return i?JSON.stringify(formDataToJSON(e)):e;if(utils$1$1.isArrayBuffer(e)||utils$1$1.isBuffer(e)||utils$1$1.isStream(e)||utils$1$1.isFile(e)||utils$1$1.isBlob(e)||utils$1$1.isReadableStream(e))return e;if(utils$1$1.isArrayBufferView(e))return e.buffer;if(utils$1$1.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let u;if(s){if(r.indexOf("application/x-www-form-urlencoded")>-1)return toURLEncodedForm(e,this.formSerializer).toString();if((u=utils$1$1.isFileList(e))||r.indexOf("multipart/form-data")>-1){const h=this.env&&this.env.FormData;return toFormData(u?{"files[]":e}:e,h&&new h,this.formSerializer)}}return s||i?(t.setContentType("application/json",!1),stringifySafely(e)):e}],transformResponse:[function n(e){const t=this.transitional||defaults$2.transitional,r=t&&t.forcedJSONParsing,i=this.responseType==="json";if(utils$1$1.isResponse(e)||utils$1$1.isReadableStream(e))return e;if(e&&utils$1$1.isString(e)&&(r&&!this.responseType||i)){const l=!(t&&t.silentJSONParsing)&&i;try{return JSON.parse(e)}catch(u){if(l)throw u.name==="SyntaxError"?AxiosError.from(u,AxiosError.ERR_BAD_RESPONSE,this,null,this.response):u}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:platform.classes.FormData,Blob:platform.classes.Blob},validateStatus:function n(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};utils$1$1.forEach(["delete","get","head","post","put","patch"],n=>{defaults$2.headers[n]={}});var defaults$1$1=defaults$2;const ignoreDuplicateOf=utils$1$1.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);var parseHeaders=n=>{const e={};let t,r,i;return n&&n.split(`
|
||
`).forEach(function(l){i=l.indexOf(":"),t=l.substring(0,i).trim().toLowerCase(),r=l.substring(i+1).trim(),!(!t||e[t]&&ignoreDuplicateOf[t])&&(t==="set-cookie"?e[t]?e[t].push(r):e[t]=[r]:e[t]=e[t]?e[t]+", "+r:r)}),e};const $internals=Symbol("internals");function normalizeHeader(n){return n&&String(n).trim().toLowerCase()}function normalizeValue(n){return n===!1||n==null?n:utils$1$1.isArray(n)?n.map(normalizeValue):String(n)}function parseTokens(n){const e=Object.create(null),t=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=t.exec(n);)e[r[1]]=r[2];return e}const isValidHeaderName=n=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(n.trim());function matchHeaderValue(n,e,t,r,i){if(utils$1$1.isFunction(r))return r.call(this,e,t);if(i&&(e=t),!!utils$1$1.isString(e)){if(utils$1$1.isString(r))return e.indexOf(r)!==-1;if(utils$1$1.isRegExp(r))return r.test(e)}}function formatHeader(n){return n.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,r)=>t.toUpperCase()+r)}function buildAccessors(n,e){const t=utils$1$1.toCamelCase(" "+e);["get","set","has"].forEach(r=>{Object.defineProperty(n,r+t,{value:function(i,s,l){return this[r].call(this,e,i,s,l)},configurable:!0})})}class AxiosHeaders{constructor(e){e&&this.set(e)}set(e,t,r){const i=this;function s(u,h,d){const m=normalizeHeader(h);if(!m)throw new Error("header name must be a non-empty string");const _=utils$1$1.findKey(i,m);(!_||i[_]===void 0||d===!0||d===void 0&&i[_]!==!1)&&(i[_||h]=normalizeValue(u))}const l=(u,h)=>utils$1$1.forEach(u,(d,m)=>s(d,m,h));if(utils$1$1.isPlainObject(e)||e instanceof this.constructor)l(e,t);else if(utils$1$1.isString(e)&&(e=e.trim())&&!isValidHeaderName(e))l(parseHeaders(e),t);else if(utils$1$1.isHeaders(e))for(const[u,h]of e.entries())s(h,u,r);else e!=null&&s(t,e,r);return this}get(e,t){if(e=normalizeHeader(e),e){const r=utils$1$1.findKey(this,e);if(r){const i=this[r];if(!t)return i;if(t===!0)return parseTokens(i);if(utils$1$1.isFunction(t))return t.call(this,i,r);if(utils$1$1.isRegExp(t))return t.exec(i);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=normalizeHeader(e),e){const r=utils$1$1.findKey(this,e);return!!(r&&this[r]!==void 0&&(!t||matchHeaderValue(this,this[r],r,t)))}return!1}delete(e,t){const r=this;let i=!1;function s(l){if(l=normalizeHeader(l),l){const u=utils$1$1.findKey(r,l);u&&(!t||matchHeaderValue(r,r[u],u,t))&&(delete r[u],i=!0)}}return utils$1$1.isArray(e)?e.forEach(s):s(e),i}clear(e){const t=Object.keys(this);let r=t.length,i=!1;for(;r--;){const s=t[r];(!e||matchHeaderValue(this,this[s],s,e,!0))&&(delete this[s],i=!0)}return i}normalize(e){const t=this,r={};return utils$1$1.forEach(this,(i,s)=>{const l=utils$1$1.findKey(r,s);if(l){t[l]=normalizeValue(i),delete t[s];return}const u=e?formatHeader(s):String(s).trim();u!==s&&delete t[s],t[u]=normalizeValue(i),r[u]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return utils$1$1.forEach(this,(r,i)=>{r!=null&&r!==!1&&(t[i]=e&&utils$1$1.isArray(r)?r.join(", "):r)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join(`
|
||
`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const r=new this(e);return t.forEach(i=>r.set(i)),r}static accessor(e){const r=(this[$internals]=this[$internals]={accessors:{}}).accessors,i=this.prototype;function s(l){const u=normalizeHeader(l);r[u]||(buildAccessors(i,l),r[u]=!0)}return utils$1$1.isArray(e)?e.forEach(s):s(e),this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);utils$1$1.reduceDescriptors(AxiosHeaders.prototype,({value:n},e)=>{let t=e[0].toUpperCase()+e.slice(1);return{get:()=>n,set(r){this[t]=r}}});utils$1$1.freezeMethods(AxiosHeaders);var AxiosHeaders$1=AxiosHeaders;function transformData(n,e){const t=this||defaults$1$1,r=e||t,i=AxiosHeaders$1.from(r.headers);let s=r.data;return utils$1$1.forEach(n,function(u){s=u.call(t,s,i.normalize(),e?e.status:void 0)}),i.normalize(),s}function isCancel(n){return!!(n&&n.__CANCEL__)}function CanceledError(n,e,t){AxiosError.call(this,n??"canceled",AxiosError.ERR_CANCELED,e,t),this.name="CanceledError"}utils$1$1.inherits(CanceledError,AxiosError,{__CANCEL__:!0});function settle(n,e,t){const r=t.config.validateStatus;!t.status||!r||r(t.status)?n(t):e(new AxiosError("Request failed with status code "+t.status,[AxiosError.ERR_BAD_REQUEST,AxiosError.ERR_BAD_RESPONSE][Math.floor(t.status/100)-4],t.config,t.request,t))}function parseProtocol(n){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(n);return e&&e[1]||""}function speedometer(n,e){n=n||10;const t=new Array(n),r=new Array(n);let i=0,s=0,l;return e=e!==void 0?e:1e3,function(h){const d=Date.now(),m=r[s];l||(l=d),t[i]=h,r[i]=d;let _=s,S=0;for(;_!==i;)S+=t[_++],_=_%n;if(i=(i+1)%n,i===s&&(s=(s+1)%n),d-l<e)return;const C=m&&d-m;return C?Math.round(S*1e3/C):void 0}}function throttle(n,e){let t=0;const r=1e3/e;let i=null;return function(){const l=this===!0,u=Date.now();if(l||u-t>r)return i&&(clearTimeout(i),i=null),t=u,n.apply(null,arguments);i||(i=setTimeout(()=>(i=null,t=Date.now(),n.apply(null,arguments)),r-(u-t)))}}var progressEventReducer=(n,e,t=3)=>{let r=0;const i=speedometer(50,250);return throttle(s=>{const l=s.loaded,u=s.lengthComputable?s.total:void 0,h=l-r,d=i(h),m=l<=u;r=l;const _={loaded:l,total:u,progress:u?l/u:void 0,bytes:h,rate:d||void 0,estimated:d&&u&&m?(u-l)/d:void 0,event:s,lengthComputable:u!=null};_[e?"download":"upload"]=!0,n(_)},t)},isURLSameOrigin=platform.hasStandardBrowserEnv?function n(){const e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a");let r;function i(s){let l=s;return e&&(t.setAttribute("href",l),l=t.href),t.setAttribute("href",l),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:t.pathname.charAt(0)==="/"?t.pathname:"/"+t.pathname}}return r=i(window.location.href),function(l){const u=utils$1$1.isString(l)?i(l):l;return u.protocol===r.protocol&&u.host===r.host}}():function n(){return function(){return!0}}(),cookies=platform.hasStandardBrowserEnv?{write(n,e,t,r,i,s){const l=[n+"="+encodeURIComponent(e)];utils$1$1.isNumber(t)&&l.push("expires="+new Date(t).toGMTString()),utils$1$1.isString(r)&&l.push("path="+r),utils$1$1.isString(i)&&l.push("domain="+i),s===!0&&l.push("secure"),document.cookie=l.join("; ")},read(n){const e=document.cookie.match(new RegExp("(^|;\\s*)("+n+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove(n){this.write(n,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function isAbsoluteURL(n){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(n)}function combineURLs(n,e){return e?n.replace(/\/?\/$/,"")+"/"+e.replace(/^\/+/,""):n}function buildFullPath(n,e){return n&&!isAbsoluteURL(e)?combineURLs(n,e):e}const headersToObject=n=>n instanceof AxiosHeaders$1?{...n}:n;function mergeConfig(n,e){e=e||{};const t={};function r(d,m,_){return utils$1$1.isPlainObject(d)&&utils$1$1.isPlainObject(m)?utils$1$1.merge.call({caseless:_},d,m):utils$1$1.isPlainObject(m)?utils$1$1.merge({},m):utils$1$1.isArray(m)?m.slice():m}function i(d,m,_){if(utils$1$1.isUndefined(m)){if(!utils$1$1.isUndefined(d))return r(void 0,d,_)}else return r(d,m,_)}function s(d,m){if(!utils$1$1.isUndefined(m))return r(void 0,m)}function l(d,m){if(utils$1$1.isUndefined(m)){if(!utils$1$1.isUndefined(d))return r(void 0,d)}else return r(void 0,m)}function u(d,m,_){if(_ in e)return r(d,m);if(_ in n)return r(void 0,d)}const h={url:s,method:s,data:s,baseURL:l,transformRequest:l,transformResponse:l,paramsSerializer:l,timeout:l,timeoutMessage:l,withCredentials:l,withXSRFToken:l,adapter:l,responseType:l,xsrfCookieName:l,xsrfHeaderName:l,onUploadProgress:l,onDownloadProgress:l,decompress:l,maxContentLength:l,maxBodyLength:l,beforeRedirect:l,transport:l,httpAgent:l,httpsAgent:l,cancelToken:l,socketPath:l,responseEncoding:l,validateStatus:u,headers:(d,m)=>i(headersToObject(d),headersToObject(m),!0)};return utils$1$1.forEach(Object.keys(Object.assign({},n,e)),function(m){const _=h[m]||i,S=_(n[m],e[m],m);utils$1$1.isUndefined(S)&&_!==u||(t[m]=S)}),t}var resolveConfig=n=>{const e=mergeConfig({},n);let{data:t,withXSRFToken:r,xsrfHeaderName:i,xsrfCookieName:s,headers:l,auth:u}=e;e.headers=l=AxiosHeaders$1.from(l),e.url=buildURL(buildFullPath(e.baseURL,e.url),n.params,n.paramsSerializer),u&&l.set("Authorization","Basic "+btoa((u.username||"")+":"+(u.password?unescape(encodeURIComponent(u.password)):"")));let h;if(utils$1$1.isFormData(t)){if(platform.hasStandardBrowserEnv||platform.hasStandardBrowserWebWorkerEnv)l.setContentType(void 0);else if((h=l.getContentType())!==!1){const[d,...m]=h?h.split(";").map(_=>_.trim()).filter(Boolean):[];l.setContentType([d||"multipart/form-data",...m].join("; "))}}if(platform.hasStandardBrowserEnv&&(r&&utils$1$1.isFunction(r)&&(r=r(e)),r||r!==!1&&isURLSameOrigin(e.url))){const d=i&&s&&cookies.read(s);d&&l.set(i,d)}return e};const isXHRAdapterSupported=typeof XMLHttpRequest<"u";var xhrAdapter=isXHRAdapterSupported&&function(n){return new Promise(function(t,r){const i=resolveConfig(n);let s=i.data;const l=AxiosHeaders$1.from(i.headers).normalize();let{responseType:u}=i,h;function d(){i.cancelToken&&i.cancelToken.unsubscribe(h),i.signal&&i.signal.removeEventListener("abort",h)}let m=new XMLHttpRequest;m.open(i.method.toUpperCase(),i.url,!0),m.timeout=i.timeout;function _(){if(!m)return;const C=AxiosHeaders$1.from("getAllResponseHeaders"in m&&m.getAllResponseHeaders()),O={data:!u||u==="text"||u==="json"?m.responseText:m.response,status:m.status,statusText:m.statusText,headers:C,config:n,request:m};settle(function(R){t(R),d()},function(R){r(R),d()},O),m=null}"onloadend"in m?m.onloadend=_:m.onreadystatechange=function(){!m||m.readyState!==4||m.status===0&&!(m.responseURL&&m.responseURL.indexOf("file:")===0)||setTimeout(_)},m.onabort=function(){m&&(r(new AxiosError("Request aborted",AxiosError.ECONNABORTED,i,m)),m=null)},m.onerror=function(){r(new AxiosError("Network Error",AxiosError.ERR_NETWORK,i,m)),m=null},m.ontimeout=function(){let T=i.timeout?"timeout of "+i.timeout+"ms exceeded":"timeout exceeded";const O=i.transitional||transitionalDefaults;i.timeoutErrorMessage&&(T=i.timeoutErrorMessage),r(new AxiosError(T,O.clarifyTimeoutError?AxiosError.ETIMEDOUT:AxiosError.ECONNABORTED,i,m)),m=null},s===void 0&&l.setContentType(null),"setRequestHeader"in m&&utils$1$1.forEach(l.toJSON(),function(T,O){m.setRequestHeader(O,T)}),utils$1$1.isUndefined(i.withCredentials)||(m.withCredentials=!!i.withCredentials),u&&u!=="json"&&(m.responseType=i.responseType),typeof i.onDownloadProgress=="function"&&m.addEventListener("progress",progressEventReducer(i.onDownloadProgress,!0)),typeof i.onUploadProgress=="function"&&m.upload&&m.upload.addEventListener("progress",progressEventReducer(i.onUploadProgress)),(i.cancelToken||i.signal)&&(h=C=>{m&&(r(!C||C.type?new CanceledError(null,n,m):C),m.abort(),m=null)},i.cancelToken&&i.cancelToken.subscribe(h),i.signal&&(i.signal.aborted?h():i.signal.addEventListener("abort",h)));const S=parseProtocol(i.url);if(S&&platform.protocols.indexOf(S)===-1){r(new AxiosError("Unsupported protocol "+S+":",AxiosError.ERR_BAD_REQUEST,n));return}m.send(s||null)})};const composeSignals=(n,e)=>{let t=new AbortController,r;const i=function(h){if(!r){r=!0,l();const d=h instanceof Error?h:this.reason;t.abort(d instanceof AxiosError?d:new CanceledError(d instanceof Error?d.message:d))}};let s=e&&setTimeout(()=>{i(new AxiosError(`timeout ${e} of ms exceeded`,AxiosError.ETIMEDOUT))},e);const l=()=>{n&&(s&&clearTimeout(s),s=null,n.forEach(h=>{h&&(h.removeEventListener?h.removeEventListener("abort",i):h.unsubscribe(i))}),n=null)};n.forEach(h=>h&&h.addEventListener&&h.addEventListener("abort",i));const{signal:u}=t;return u.unsubscribe=l,[u,()=>{s&&clearTimeout(s),s=null}]};var composeSignals$1=composeSignals;const streamChunk=function*(n,e){let t=n.byteLength;if(!e||t<e){yield n;return}let r=0,i;for(;r<t;)i=r+e,yield n.slice(r,i),r=i},readBytes=async function*(n,e,t){for await(const r of n)yield*streamChunk(ArrayBuffer.isView(r)?r:await t(String(r)),e)},trackStream=(n,e,t,r,i)=>{const s=readBytes(n,e,i);let l=0;return new ReadableStream({type:"bytes",async pull(u){const{done:h,value:d}=await s.next();if(h){u.close(),r();return}let m=d.byteLength;t&&t(l+=m),u.enqueue(new Uint8Array(d))},cancel(u){return r(u),s.return()}},{highWaterMark:2})},fetchProgressDecorator=(n,e)=>{const t=n!=null;return r=>setTimeout(()=>e({lengthComputable:t,total:n,loaded:r}))},isFetchSupported=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",isReadableStreamSupported=isFetchSupported&&typeof ReadableStream=="function",encodeText=isFetchSupported&&(typeof TextEncoder=="function"?(n=>e=>n.encode(e))(new TextEncoder):async n=>new Uint8Array(await new Response(n).arrayBuffer())),supportsRequestStream=isReadableStreamSupported&&(()=>{let n=!1;const e=new Request(platform.origin,{body:new ReadableStream,method:"POST",get duplex(){return n=!0,"half"}}).headers.has("Content-Type");return n&&!e})(),DEFAULT_CHUNK_SIZE=64*1024,supportsResponseStream=isReadableStreamSupported&&!!(()=>{try{return utils$1$1.isReadableStream(new Response("").body)}catch{}})(),resolvers={stream:supportsResponseStream&&(n=>n.body)};isFetchSupported&&(n=>{["text","arrayBuffer","blob","formData","stream"].forEach(e=>{!resolvers[e]&&(resolvers[e]=utils$1$1.isFunction(n[e])?t=>t[e]():(t,r)=>{throw new AxiosError(`Response type '${e}' is not supported`,AxiosError.ERR_NOT_SUPPORT,r)})})})(new Response);const getBodyLength=async n=>{if(n==null)return 0;if(utils$1$1.isBlob(n))return n.size;if(utils$1$1.isSpecCompliantForm(n))return(await new Request(n).arrayBuffer()).byteLength;if(utils$1$1.isArrayBufferView(n))return n.byteLength;if(utils$1$1.isURLSearchParams(n)&&(n=n+""),utils$1$1.isString(n))return(await encodeText(n)).byteLength},resolveBodyLength=async(n,e)=>{const t=utils$1$1.toFiniteNumber(n.getContentLength());return t??getBodyLength(e)};var fetchAdapter=isFetchSupported&&(async n=>{let{url:e,method:t,data:r,signal:i,cancelToken:s,timeout:l,onDownloadProgress:u,onUploadProgress:h,responseType:d,headers:m,withCredentials:_="same-origin",fetchOptions:S}=resolveConfig(n);d=d?(d+"").toLowerCase():"text";let[C,T]=i||s||l?composeSignals$1([i,s],l):[],O,H;const R=()=>{!O&&setTimeout(()=>{C&&C.unsubscribe()}),O=!0};let Z;try{if(h&&supportsRequestStream&&t!=="get"&&t!=="head"&&(Z=await resolveBodyLength(m,r))!==0){let B=new Request(e,{method:"POST",body:r,duplex:"half"}),f;utils$1$1.isFormData(r)&&(f=B.headers.get("content-type"))&&m.setContentType(f),B.body&&(r=trackStream(B.body,DEFAULT_CHUNK_SIZE,fetchProgressDecorator(Z,progressEventReducer(h)),null,encodeText))}utils$1$1.isString(_)||(_=_?"cors":"omit"),H=new Request(e,{...S,signal:C,method:t.toUpperCase(),headers:m.normalize().toJSON(),body:r,duplex:"half",withCredentials:_});let V=await fetch(H);const q=supportsResponseStream&&(d==="stream"||d==="response");if(supportsResponseStream&&(u||q)){const B={};["status","statusText","headers"].forEach(Y=>{B[Y]=V[Y]});const f=utils$1$1.toFiniteNumber(V.headers.get("content-length"));V=new Response(trackStream(V.body,DEFAULT_CHUNK_SIZE,u&&fetchProgressDecorator(f,progressEventReducer(u,!0)),q&&R,encodeText),B)}d=d||"text";let ee=await resolvers[utils$1$1.findKey(resolvers,d)||"text"](V,n);return!q&&R(),T&&T(),await new Promise((B,f)=>{settle(B,f,{data:ee,headers:AxiosHeaders$1.from(V.headers),status:V.status,statusText:V.statusText,config:n,request:H})})}catch(V){throw R(),V&&V.name==="TypeError"&&/fetch/i.test(V.message)?Object.assign(new AxiosError("Network Error",AxiosError.ERR_NETWORK,n,H),{cause:V.cause||V}):AxiosError.from(V,V&&V.code,n,H)}});const knownAdapters={http:httpAdapter,xhr:xhrAdapter,fetch:fetchAdapter};utils$1$1.forEach(knownAdapters,(n,e)=>{if(n){try{Object.defineProperty(n,"name",{value:e})}catch{}Object.defineProperty(n,"adapterName",{value:e})}});const renderReason=n=>`- ${n}`,isResolvedHandle=n=>utils$1$1.isFunction(n)||n===null||n===!1;var adapters={getAdapter:n=>{n=utils$1$1.isArray(n)?n:[n];const{length:e}=n;let t,r;const i={};for(let s=0;s<e;s++){t=n[s];let l;if(r=t,!isResolvedHandle(t)&&(r=knownAdapters[(l=String(t)).toLowerCase()],r===void 0))throw new AxiosError(`Unknown adapter '${l}'`);if(r)break;i[l||"#"+s]=r}if(!r){const s=Object.entries(i).map(([u,h])=>`adapter ${u} `+(h===!1?"is not supported by the environment":"is not available in the build"));let l=e?s.length>1?`since :
|
||
`+s.map(renderReason).join(`
|
||
`):" "+renderReason(s[0]):"as no adapter specified";throw new AxiosError("There is no suitable adapter to dispatch the request "+l,"ERR_NOT_SUPPORT")}return r},adapters:knownAdapters};function throwIfCancellationRequested(n){if(n.cancelToken&&n.cancelToken.throwIfRequested(),n.signal&&n.signal.aborted)throw new CanceledError(null,n)}function dispatchRequest(n){return throwIfCancellationRequested(n),n.headers=AxiosHeaders$1.from(n.headers),n.data=transformData.call(n,n.transformRequest),["post","put","patch"].indexOf(n.method)!==-1&&n.headers.setContentType("application/x-www-form-urlencoded",!1),adapters.getAdapter(n.adapter||defaults$1$1.adapter)(n).then(function(r){return throwIfCancellationRequested(n),r.data=transformData.call(n,n.transformResponse,r),r.headers=AxiosHeaders$1.from(r.headers),r},function(r){return isCancel(r)||(throwIfCancellationRequested(n),r&&r.response&&(r.response.data=transformData.call(n,n.transformResponse,r.response),r.response.headers=AxiosHeaders$1.from(r.response.headers))),Promise.reject(r)})}const VERSION$1="1.7.2",validators$1={};["object","boolean","number","function","string","symbol"].forEach((n,e)=>{validators$1[n]=function(r){return typeof r===n||"a"+(e<1?"n ":" ")+n}});const deprecatedWarnings={};validators$1.transitional=function n(e,t,r){function i(s,l){return"[Axios v"+VERSION$1+"] Transitional option '"+s+"'"+l+(r?". "+r:"")}return(s,l,u)=>{if(e===!1)throw new AxiosError(i(l," has been removed"+(t?" in "+t:"")),AxiosError.ERR_DEPRECATED);return t&&!deprecatedWarnings[l]&&(deprecatedWarnings[l]=!0,console.warn(i(l," has been deprecated since v"+t+" and will be removed in the near future"))),e?e(s,l,u):!0}};function assertOptions(n,e,t){if(typeof n!="object")throw new AxiosError("options must be an object",AxiosError.ERR_BAD_OPTION_VALUE);const r=Object.keys(n);let i=r.length;for(;i-- >0;){const s=r[i],l=e[s];if(l){const u=n[s],h=u===void 0||l(u,s,n);if(h!==!0)throw new AxiosError("option "+s+" must be "+h,AxiosError.ERR_BAD_OPTION_VALUE);continue}if(t!==!0)throw new AxiosError("Unknown option "+s,AxiosError.ERR_BAD_OPTION)}}var validator={assertOptions,validators:validators$1};const validators=validator.validators;class Axios{constructor(e){this.defaults=e,this.interceptors={request:new InterceptorManager$1,response:new InterceptorManager$1}}async request(e,t){try{return await this._request(e,t)}catch(r){if(r instanceof Error){let i;Error.captureStackTrace?Error.captureStackTrace(i={}):i=new Error;const s=i.stack?i.stack.replace(/^.+\n/,""):"";try{r.stack?s&&!String(r.stack).endsWith(s.replace(/^.+\n.+\n/,""))&&(r.stack+=`
|
||
`+s):r.stack=s}catch{}}throw r}}_request(e,t){typeof e=="string"?(t=t||{},t.url=e):t=e||{},t=mergeConfig(this.defaults,t);const{transitional:r,paramsSerializer:i,headers:s}=t;r!==void 0&&validator.assertOptions(r,{silentJSONParsing:validators.transitional(validators.boolean),forcedJSONParsing:validators.transitional(validators.boolean),clarifyTimeoutError:validators.transitional(validators.boolean)},!1),i!=null&&(utils$1$1.isFunction(i)?t.paramsSerializer={serialize:i}:validator.assertOptions(i,{encode:validators.function,serialize:validators.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase();let l=s&&utils$1$1.merge(s.common,s[t.method]);s&&utils$1$1.forEach(["delete","get","head","post","put","patch","common"],T=>{delete s[T]}),t.headers=AxiosHeaders$1.concat(l,s);const u=[];let h=!0;this.interceptors.request.forEach(function(O){typeof O.runWhen=="function"&&O.runWhen(t)===!1||(h=h&&O.synchronous,u.unshift(O.fulfilled,O.rejected))});const d=[];this.interceptors.response.forEach(function(O){d.push(O.fulfilled,O.rejected)});let m,_=0,S;if(!h){const T=[dispatchRequest.bind(this),void 0];for(T.unshift.apply(T,u),T.push.apply(T,d),S=T.length,m=Promise.resolve(t);_<S;)m=m.then(T[_++],T[_++]);return m}S=u.length;let C=t;for(_=0;_<S;){const T=u[_++],O=u[_++];try{C=T(C)}catch(H){O.call(this,H);break}}try{m=dispatchRequest.call(this,C)}catch(T){return Promise.reject(T)}for(_=0,S=d.length;_<S;)m=m.then(d[_++],d[_++]);return m}getUri(e){e=mergeConfig(this.defaults,e);const t=buildFullPath(e.baseURL,e.url);return buildURL(t,e.params,e.paramsSerializer)}}utils$1$1.forEach(["delete","get","head","options"],function n(e){Axios.prototype[e]=function(t,r){return this.request(mergeConfig(r||{},{method:e,url:t,data:(r||{}).data}))}});utils$1$1.forEach(["post","put","patch"],function n(e){function t(r){return function(s,l,u){return this.request(mergeConfig(u||{},{method:e,headers:r?{"Content-Type":"multipart/form-data"}:{},url:s,data:l}))}}Axios.prototype[e]=t(),Axios.prototype[e+"Form"]=t(!0)});var Axios$1=Axios;class CancelToken{constructor(e){if(typeof e!="function")throw new TypeError("executor must be a function.");let t;this.promise=new Promise(function(s){t=s});const r=this;this.promise.then(i=>{if(!r._listeners)return;let s=r._listeners.length;for(;s-- >0;)r._listeners[s](i);r._listeners=null}),this.promise.then=i=>{let s;const l=new Promise(u=>{r.subscribe(u),s=u}).then(i);return l.cancel=function(){r.unsubscribe(s)},l},e(function(s,l,u){r.reason||(r.reason=new CanceledError(s,l,u),t(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}static source(){let e;return{token:new CancelToken(function(i){e=i}),cancel:e}}}var CancelToken$1=CancelToken;function spread(n){return function(t){return n.apply(null,t)}}function isAxiosError(n){return utils$1$1.isObject(n)&&n.isAxiosError===!0}const HttpStatusCode={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(HttpStatusCode).forEach(([n,e])=>{HttpStatusCode[e]=n});var HttpStatusCode$1=HttpStatusCode;function createInstance(n){const e=new Axios$1(n),t=bind$2(Axios$1.prototype.request,e);return utils$1$1.extend(t,Axios$1.prototype,e,{allOwnKeys:!0}),utils$1$1.extend(t,e,null,{allOwnKeys:!0}),t.create=function(i){return createInstance(mergeConfig(n,i))},t}const axios=createInstance(defaults$1$1);axios.Axios=Axios$1;axios.CanceledError=CanceledError;axios.CancelToken=CancelToken$1;axios.isCancel=isCancel;axios.VERSION=VERSION$1;axios.toFormData=toFormData;axios.AxiosError=AxiosError;axios.Cancel=axios.CanceledError;axios.all=function n(e){return Promise.all(e)};axios.spread=spread;axios.isAxiosError=isAxiosError;axios.mergeConfig=mergeConfig;axios.AxiosHeaders=AxiosHeaders$1;axios.formToJSON=n=>formDataToJSON(utils$1$1.isHTMLForm(n)?new FormData(n):n);axios.getAdapter=adapters.getAdapter;axios.HttpStatusCode=HttpStatusCode$1;axios.default=axios;var axios_1$1=axios,__assign$3=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$3=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i])}return n},__assign$3.apply(this,arguments)},__awaiter$1=commonjsGlobal&&commonjsGlobal.__awaiter||function(n,e,t,r){function i(s){return s instanceof t?s:new t(function(l){l(s)})}return new(t||(t=Promise))(function(s,l){function u(m){try{d(r.next(m))}catch(_){l(_)}}function h(m){try{d(r.throw(m))}catch(_){l(_)}}function d(m){m.done?s(m.value):i(m.value).then(u,h)}d((r=r.apply(n,e||[])).next())})},__generator$1=commonjsGlobal&&commonjsGlobal.__generator||function(n,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},r,i,s,l;return l={next:u(0),throw:u(1),return:u(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function u(d){return function(m){return h([d,m])}}function h(d){if(r)throw new TypeError("Generator is already executing.");for(;l&&(l=0,d[0]&&(t=0)),t;)try{if(r=1,i&&(s=d[0]&2?i.return:d[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,d[1])).done)return s;switch(i=0,s&&(d=[d[0]&2,s.value]),d[0]){case 0:case 1:s=d;break;case 4:return t.label++,{value:d[1],done:!1};case 5:t.label++,i=d[1],d=[0];continue;case 7:d=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(d[0]===6||d[0]===2)){t=0;continue}if(d[0]===3&&(!s||d[1]>s[0]&&d[1]<s[3])){t.label=d[1];break}if(d[0]===6&&t.label<s[1]){t.label=s[1],s=d;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(d);break}s[2]&&t.ops.pop(),t.trys.pop();continue}d=e.call(n,t)}catch(m){d=[6,m],i=0}finally{r=s=0}if(d[0]&5)throw d[1];return{value:d[0]?d[1]:void 0,done:!0}}},__importDefault$1=commonjsGlobal&&commonjsGlobal.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(AxiosClient$1,"__esModule",{value:!0});AxiosClient$1.AxiosClient=void 0;var axios_1=__importDefault$1(axios_1$1),AxiosClient=function(){function n(e){var t=e.responseHandler,r=e.requestConfigBuilder;this.responseHandler=t,this.requestConfigBuilder=r}return n.prototype.get=function(e,t){return __awaiter$1(this,void 0,void 0,function(){var r;return __generator$1(this,function(i){switch(i.label){case 0:return[4,this.requestConfigBuilder.build("get",e,t)];case 1:return r=i.sent(),[4,this.sendRequest(r)];case 2:return[2,i.sent()]}})})},n.prototype.getData=function(e,t){return __awaiter$1(this,void 0,void 0,function(){var r;return __generator$1(this,function(i){switch(i.label){case 0:return[4,this.requestConfigBuilder.build("get",e,t,{responseType:"arraybuffer"})];case 1:return r=i.sent(),[4,this.sendRequest(r)];case 2:return[2,i.sent()]}})})},n.prototype.post=function(e,t){return __awaiter$1(this,void 0,void 0,function(){var r;return __generator$1(this,function(i){switch(i.label){case 0:return[4,this.requestConfigBuilder.build("post",e,t)];case 1:return r=i.sent(),[4,this.sendRequest(r)];case 2:return[2,i.sent()]}})})},n.prototype.postData=function(e,t){return __awaiter$1(this,void 0,void 0,function(){var r;return __generator$1(this,function(i){switch(i.label){case 0:return[4,this.requestConfigBuilder.build("post",e,t)];case 1:return r=i.sent(),[4,this.sendRequest(r)];case 2:return[2,i.sent()]}})})},n.prototype.put=function(e,t){return __awaiter$1(this,void 0,void 0,function(){var r;return __generator$1(this,function(i){switch(i.label){case 0:return[4,this.requestConfigBuilder.build("put",e,t)];case 1:return r=i.sent(),[4,this.sendRequest(r)];case 2:return[2,i.sent()]}})})},n.prototype.delete=function(e,t){return __awaiter$1(this,void 0,void 0,function(){var r;return __generator$1(this,function(i){switch(i.label){case 0:return[4,this.requestConfigBuilder.build("delete",e,t)];case 1:return r=i.sent(),[4,this.sendRequest(r)];case 2:return[2,i.sent()]}})})},n.prototype.sendRequest=function(e){return this.responseHandler.handle((0,axios_1.default)(__assign$3(__assign$3({},e),{maxBodyLength:1/0,maxContentLength:1/0})))},n}();AxiosClient$1.AxiosClient=AxiosClient;(function(n){Object.defineProperty(n,"__esModule",{value:!0}),n.DefaultHttpClient=void 0;var e=AxiosClient$1;Object.defineProperty(n,"DefaultHttpClient",{enumerable:!0,get:function(){return e.AxiosClient}})})(http);var KintoneRequestConfigBuilder$1={},esErrors=Error,_eval=EvalError,range=RangeError,ref=ReferenceError,syntax=SyntaxError,type=TypeError,uri=URIError,shams=function n(){if(typeof Symbol!="function"||typeof Object.getOwnPropertySymbols!="function")return!1;if(typeof Symbol.iterator=="symbol")return!0;var e={},t=Symbol("test"),r=Object(t);if(typeof t=="string"||Object.prototype.toString.call(t)!=="[object Symbol]"||Object.prototype.toString.call(r)!=="[object Symbol]")return!1;var i=42;e[t]=i;for(t in e)return!1;if(typeof Object.keys=="function"&&Object.keys(e).length!==0||typeof Object.getOwnPropertyNames=="function"&&Object.getOwnPropertyNames(e).length!==0)return!1;var s=Object.getOwnPropertySymbols(e);if(s.length!==1||s[0]!==t||!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if(typeof Object.getOwnPropertyDescriptor=="function"){var l=Object.getOwnPropertyDescriptor(e,t);if(l.value!==i||l.enumerable!==!0)return!1}return!0},origSymbol=typeof Symbol<"u"&&Symbol,hasSymbolSham=shams,hasSymbols$1=function n(){return typeof origSymbol!="function"||typeof Symbol!="function"||typeof origSymbol("foo")!="symbol"||typeof Symbol("bar")!="symbol"?!1:hasSymbolSham()},test={__proto__:null,foo:{}},$Object=Object,hasProto$1=function n(){return{__proto__:test}.foo===test.foo&&!(test instanceof $Object)},ERROR_MESSAGE="Function.prototype.bind called on incompatible ",toStr$1=Object.prototype.toString,max$1=Math.max,funcType="[object Function]",concatty=function n(e,t){for(var r=[],i=0;i<e.length;i+=1)r[i]=e[i];for(var s=0;s<t.length;s+=1)r[s+e.length]=t[s];return r},slicy=function n(e,t){for(var r=[],i=t||0,s=0;i<e.length;i+=1,s+=1)r[s]=e[i];return r},joiny=function(n,e){for(var t="",r=0;r<n.length;r+=1)t+=n[r],r+1<n.length&&(t+=e);return t},implementation$1=function n(e){var t=this;if(typeof t!="function"||toStr$1.apply(t)!==funcType)throw new TypeError(ERROR_MESSAGE+t);for(var r=slicy(arguments,1),i,s=function(){if(this instanceof i){var m=t.apply(this,concatty(r,arguments));return Object(m)===m?m:this}return t.apply(e,concatty(r,arguments))},l=max$1(0,t.length-r.length),u=[],h=0;h<l;h++)u[h]="$"+h;if(i=Function("binder","return function ("+joiny(u,",")+"){ return binder.apply(this,arguments); }")(s),t.prototype){var d=function(){};d.prototype=t.prototype,i.prototype=new d,d.prototype=null}return i},implementation=implementation$1,functionBind=Function.prototype.bind||implementation,call=Function.prototype.call,$hasOwn=Object.prototype.hasOwnProperty,bind$1=functionBind,hasown=bind$1.call(call,$hasOwn),undefined$1,$Error=esErrors,$EvalError=_eval,$RangeError=range,$ReferenceError=ref,$SyntaxError$1=syntax,$TypeError$3=type,$URIError=uri,$Function=Function,getEvalledConstructor=function(n){try{return $Function('"use strict"; return ('+n+").constructor;")()}catch{}},$gOPD$1=Object.getOwnPropertyDescriptor;if($gOPD$1)try{$gOPD$1({},"")}catch{$gOPD$1=null}var throwTypeError=function(){throw new $TypeError$3},ThrowTypeError=$gOPD$1?function(){try{return arguments.callee,throwTypeError}catch{try{return $gOPD$1(arguments,"callee").get}catch{return throwTypeError}}}():throwTypeError,hasSymbols=hasSymbols$1(),hasProto=hasProto$1(),getProto=Object.getPrototypeOf||(hasProto?function(n){return n.__proto__}:null),needsEval={},TypedArray=typeof Uint8Array>"u"||!getProto?undefined$1:getProto(Uint8Array),INTRINSICS={__proto__:null,"%AggregateError%":typeof AggregateError>"u"?undefined$1:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?undefined$1:ArrayBuffer,"%ArrayIteratorPrototype%":hasSymbols&&getProto?getProto([][Symbol.iterator]()):undefined$1,"%AsyncFromSyncIteratorPrototype%":undefined$1,"%AsyncFunction%":needsEval,"%AsyncGenerator%":needsEval,"%AsyncGeneratorFunction%":needsEval,"%AsyncIteratorPrototype%":needsEval,"%Atomics%":typeof Atomics>"u"?undefined$1:Atomics,"%BigInt%":typeof BigInt>"u"?undefined$1:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?undefined$1:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?undefined$1:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?undefined$1:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":$Error,"%eval%":eval,"%EvalError%":$EvalError,"%Float32Array%":typeof Float32Array>"u"?undefined$1:Float32Array,"%Float64Array%":typeof Float64Array>"u"?undefined$1:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?undefined$1:FinalizationRegistry,"%Function%":$Function,"%GeneratorFunction%":needsEval,"%Int8Array%":typeof Int8Array>"u"?undefined$1:Int8Array,"%Int16Array%":typeof Int16Array>"u"?undefined$1:Int16Array,"%Int32Array%":typeof Int32Array>"u"?undefined$1:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":hasSymbols&&getProto?getProto(getProto([][Symbol.iterator]())):undefined$1,"%JSON%":typeof JSON=="object"?JSON:undefined$1,"%Map%":typeof Map>"u"?undefined$1:Map,"%MapIteratorPrototype%":typeof Map>"u"||!hasSymbols||!getProto?undefined$1:getProto(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?undefined$1:Promise,"%Proxy%":typeof Proxy>"u"?undefined$1:Proxy,"%RangeError%":$RangeError,"%ReferenceError%":$ReferenceError,"%Reflect%":typeof Reflect>"u"?undefined$1:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?undefined$1:Set,"%SetIteratorPrototype%":typeof Set>"u"||!hasSymbols||!getProto?undefined$1:getProto(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?undefined$1:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":hasSymbols&&getProto?getProto(""[Symbol.iterator]()):undefined$1,"%Symbol%":hasSymbols?Symbol:undefined$1,"%SyntaxError%":$SyntaxError$1,"%ThrowTypeError%":ThrowTypeError,"%TypedArray%":TypedArray,"%TypeError%":$TypeError$3,"%Uint8Array%":typeof Uint8Array>"u"?undefined$1:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?undefined$1:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?undefined$1:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?undefined$1:Uint32Array,"%URIError%":$URIError,"%WeakMap%":typeof WeakMap>"u"?undefined$1:WeakMap,"%WeakRef%":typeof WeakRef>"u"?undefined$1:WeakRef,"%WeakSet%":typeof WeakSet>"u"?undefined$1:WeakSet};if(getProto)try{null.error}catch(n){var errorProto=getProto(getProto(n));INTRINSICS["%Error.prototype%"]=errorProto}var doEval=function n(e){var t;if(e==="%AsyncFunction%")t=getEvalledConstructor("async function () {}");else if(e==="%GeneratorFunction%")t=getEvalledConstructor("function* () {}");else if(e==="%AsyncGeneratorFunction%")t=getEvalledConstructor("async function* () {}");else if(e==="%AsyncGenerator%"){var r=n("%AsyncGeneratorFunction%");r&&(t=r.prototype)}else if(e==="%AsyncIteratorPrototype%"){var i=n("%AsyncGenerator%");i&&getProto&&(t=getProto(i.prototype))}return INTRINSICS[e]=t,t},LEGACY_ALIASES={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},bind=functionBind,hasOwn$1=hasown,$concat$1=bind.call(Function.call,Array.prototype.concat),$spliceApply=bind.call(Function.apply,Array.prototype.splice),$replace$1=bind.call(Function.call,String.prototype.replace),$strSlice=bind.call(Function.call,String.prototype.slice),$exec=bind.call(Function.call,RegExp.prototype.exec),rePropName=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,reEscapeChar=/\\(\\)?/g,stringToPath=function n(e){var t=$strSlice(e,0,1),r=$strSlice(e,-1);if(t==="%"&&r!=="%")throw new $SyntaxError$1("invalid intrinsic syntax, expected closing `%`");if(r==="%"&&t!=="%")throw new $SyntaxError$1("invalid intrinsic syntax, expected opening `%`");var i=[];return $replace$1(e,rePropName,function(s,l,u,h){i[i.length]=u?$replace$1(h,reEscapeChar,"$1"):l||s}),i},getBaseIntrinsic=function n(e,t){var r=e,i;if(hasOwn$1(LEGACY_ALIASES,r)&&(i=LEGACY_ALIASES[r],r="%"+i[0]+"%"),hasOwn$1(INTRINSICS,r)){var s=INTRINSICS[r];if(s===needsEval&&(s=doEval(r)),typeof s>"u"&&!t)throw new $TypeError$3("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:i,name:r,value:s}}throw new $SyntaxError$1("intrinsic "+e+" does not exist!")},getIntrinsic=function n(e,t){if(typeof e!="string"||e.length===0)throw new $TypeError$3("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof t!="boolean")throw new $TypeError$3('"allowMissing" argument must be a boolean');if($exec(/^%?[^%]*%?$/,e)===null)throw new $SyntaxError$1("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var r=stringToPath(e),i=r.length>0?r[0]:"",s=getBaseIntrinsic("%"+i+"%",t),l=s.name,u=s.value,h=!1,d=s.alias;d&&(i=d[0],$spliceApply(r,$concat$1([0,1],d)));for(var m=1,_=!0;m<r.length;m+=1){var S=r[m],C=$strSlice(S,0,1),T=$strSlice(S,-1);if((C==='"'||C==="'"||C==="`"||T==='"'||T==="'"||T==="`")&&C!==T)throw new $SyntaxError$1("property names with quotes must have matching quotes");if((S==="constructor"||!_)&&(h=!0),i+="."+S,l="%"+i+"%",hasOwn$1(INTRINSICS,l))u=INTRINSICS[l];else if(u!=null){if(!(S in u)){if(!t)throw new $TypeError$3("base intrinsic for "+e+" exists, but the property is not available.");return}if($gOPD$1&&m+1>=r.length){var O=$gOPD$1(u,S);_=!!O,_&&"get"in O&&!("originalValue"in O.get)?u=O.get:u=u[S]}else _=hasOwn$1(u,S),u=u[S];_&&!h&&(INTRINSICS[l]=u)}}return u},callBind$1={exports:{}},esDefineProperty,hasRequiredEsDefineProperty;function requireEsDefineProperty(){if(hasRequiredEsDefineProperty)return esDefineProperty;hasRequiredEsDefineProperty=1;var n=getIntrinsic,e=n("%Object.defineProperty%",!0)||!1;if(e)try{e({},"a",{value:1})}catch{e=!1}return esDefineProperty=e,esDefineProperty}var GetIntrinsic$3=getIntrinsic,$gOPD=GetIntrinsic$3("%Object.getOwnPropertyDescriptor%",!0);if($gOPD)try{$gOPD([],"length")}catch{$gOPD=null}var gopd$1=$gOPD,$defineProperty$1=requireEsDefineProperty(),$SyntaxError=syntax,$TypeError$2=type,gopd=gopd$1,defineDataProperty=function n(e,t,r){if(!e||typeof e!="object"&&typeof e!="function")throw new $TypeError$2("`obj` must be an object or a function`");if(typeof t!="string"&&typeof t!="symbol")throw new $TypeError$2("`property` must be a string or a symbol`");if(arguments.length>3&&typeof arguments[3]!="boolean"&&arguments[3]!==null)throw new $TypeError$2("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&typeof arguments[4]!="boolean"&&arguments[4]!==null)throw new $TypeError$2("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&typeof arguments[5]!="boolean"&&arguments[5]!==null)throw new $TypeError$2("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&typeof arguments[6]!="boolean")throw new $TypeError$2("`loose`, if provided, must be a boolean");var i=arguments.length>3?arguments[3]:null,s=arguments.length>4?arguments[4]:null,l=arguments.length>5?arguments[5]:null,u=arguments.length>6?arguments[6]:!1,h=!!gopd&&gopd(e,t);if($defineProperty$1)$defineProperty$1(e,t,{configurable:l===null&&h?h.configurable:!l,enumerable:i===null&&h?h.enumerable:!i,value:r,writable:s===null&&h?h.writable:!s});else if(u||!i&&!s&&!l)e[t]=r;else throw new $SyntaxError("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.")},$defineProperty=requireEsDefineProperty(),hasPropertyDescriptors=function n(){return!!$defineProperty};hasPropertyDescriptors.hasArrayLengthDefineBug=function n(){if(!$defineProperty)return null;try{return $defineProperty([],"length",{value:1}).length!==1}catch{return!0}};var hasPropertyDescriptors_1=hasPropertyDescriptors,GetIntrinsic$2=getIntrinsic,define=defineDataProperty,hasDescriptors=hasPropertyDescriptors_1(),gOPD=gopd$1,$TypeError$1=type,$floor$1=GetIntrinsic$2("%Math.floor%"),setFunctionLength=function n(e,t){if(typeof e!="function")throw new $TypeError$1("`fn` is not a function");if(typeof t!="number"||t<0||t>4294967295||$floor$1(t)!==t)throw new $TypeError$1("`length` must be a positive 32-bit integer");var r=arguments.length>2&&!!arguments[2],i=!0,s=!0;if("length"in e&&gOPD){var l=gOPD(e,"length");l&&!l.configurable&&(i=!1),l&&!l.writable&&(s=!1)}return(i||s||!r)&&(hasDescriptors?define(e,"length",t,!0,!0):define(e,"length",t)),e};(function(n){var e=functionBind,t=getIntrinsic,r=setFunctionLength,i=type,s=t("%Function.prototype.apply%"),l=t("%Function.prototype.call%"),u=t("%Reflect.apply%",!0)||e.call(l,s),h=requireEsDefineProperty(),d=t("%Math.max%");n.exports=function(S){if(typeof S!="function")throw new i("a function is required");var C=u(e,l,arguments);return r(C,1+d(0,S.length-(arguments.length-1)),!0)};var m=function(){return u(e,s,arguments)};h?h(n.exports,"apply",{value:m}):n.exports.apply=m})(callBind$1);var callBindExports=callBind$1.exports,GetIntrinsic$1=getIntrinsic,callBind=callBindExports,$indexOf=callBind(GetIntrinsic$1("String.prototype.indexOf")),callBound$1=function n(e,t){var r=GetIntrinsic$1(e,!!t);return typeof r=="function"&&$indexOf(e,".prototype.")>-1?callBind(r):r};const __viteBrowserExternal={},__viteBrowserExternal$1=Object.freeze(Object.defineProperty({__proto__:null,default:__viteBrowserExternal},Symbol.toStringTag,{value:"Module"})),require$$0=getAugmentedNamespace(__viteBrowserExternal$1);var hasMap=typeof Map=="function"&&Map.prototype,mapSizeDescriptor=Object.getOwnPropertyDescriptor&&hasMap?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,mapSize=hasMap&&mapSizeDescriptor&&typeof mapSizeDescriptor.get=="function"?mapSizeDescriptor.get:null,mapForEach=hasMap&&Map.prototype.forEach,hasSet=typeof Set=="function"&&Set.prototype,setSizeDescriptor=Object.getOwnPropertyDescriptor&&hasSet?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,setSize=hasSet&&setSizeDescriptor&&typeof setSizeDescriptor.get=="function"?setSizeDescriptor.get:null,setForEach=hasSet&&Set.prototype.forEach,hasWeakMap=typeof WeakMap=="function"&&WeakMap.prototype,weakMapHas=hasWeakMap?WeakMap.prototype.has:null,hasWeakSet=typeof WeakSet=="function"&&WeakSet.prototype,weakSetHas=hasWeakSet?WeakSet.prototype.has:null,hasWeakRef=typeof WeakRef=="function"&&WeakRef.prototype,weakRefDeref=hasWeakRef?WeakRef.prototype.deref:null,booleanValueOf=Boolean.prototype.valueOf,objectToString=Object.prototype.toString,functionToString=Function.prototype.toString,$match=String.prototype.match,$slice=String.prototype.slice,$replace=String.prototype.replace,$toUpperCase=String.prototype.toUpperCase,$toLowerCase=String.prototype.toLowerCase,$test=RegExp.prototype.test,$concat=Array.prototype.concat,$join=Array.prototype.join,$arrSlice=Array.prototype.slice,$floor=Math.floor,bigIntValueOf=typeof BigInt=="function"?BigInt.prototype.valueOf:null,gOPS=Object.getOwnPropertySymbols,symToString=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Symbol.prototype.toString:null,hasShammedSymbols=typeof Symbol=="function"&&typeof Symbol.iterator=="object",toStringTag=typeof Symbol=="function"&&Symbol.toStringTag&&(typeof Symbol.toStringTag===hasShammedSymbols||"symbol")?Symbol.toStringTag:null,isEnumerable=Object.prototype.propertyIsEnumerable,gPO=(typeof Reflect=="function"?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(n){return n.__proto__}:null);function addNumericSeparator(n,e){if(n===1/0||n===-1/0||n!==n||n&&n>-1e3&&n<1e3||$test.call(/e/,e))return e;var t=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(typeof n=="number"){var r=n<0?-$floor(-n):$floor(n);if(r!==n){var i=String(r),s=$slice.call(e,i.length+1);return $replace.call(i,t,"$&_")+"."+$replace.call($replace.call(s,/([0-9]{3})/g,"$&_"),/_$/,"")}}return $replace.call(e,t,"$&_")}var utilInspect=require$$0,inspectCustom=utilInspect.custom,inspectSymbol=isSymbol(inspectCustom)?inspectCustom:null,objectInspect=function n(e,t,r,i){var s=t||{};if(has$3(s,"quoteStyle")&&s.quoteStyle!=="single"&&s.quoteStyle!=="double")throw new TypeError('option "quoteStyle" must be "single" or "double"');if(has$3(s,"maxStringLength")&&(typeof s.maxStringLength=="number"?s.maxStringLength<0&&s.maxStringLength!==1/0:s.maxStringLength!==null))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var l=has$3(s,"customInspect")?s.customInspect:!0;if(typeof l!="boolean"&&l!=="symbol")throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(has$3(s,"indent")&&s.indent!==null&&s.indent!==" "&&!(parseInt(s.indent,10)===s.indent&&s.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(has$3(s,"numericSeparator")&&typeof s.numericSeparator!="boolean")throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var u=s.numericSeparator;if(typeof e>"u")return"undefined";if(e===null)return"null";if(typeof e=="boolean")return e?"true":"false";if(typeof e=="string")return inspectString(e,s);if(typeof e=="number"){if(e===0)return 1/0/e>0?"0":"-0";var h=String(e);return u?addNumericSeparator(e,h):h}if(typeof e=="bigint"){var d=String(e)+"n";return u?addNumericSeparator(e,d):d}var m=typeof s.depth>"u"?5:s.depth;if(typeof r>"u"&&(r=0),r>=m&&m>0&&typeof e=="object")return isArray$3(e)?"[Array]":"[Object]";var _=getIndent(s,r);if(typeof i>"u")i=[];else if(indexOf(i,e)>=0)return"[Circular]";function S(G,oe,ue){if(oe&&(i=$arrSlice.call(i),i.push(oe)),ue){var de={depth:s.depth};return has$3(s,"quoteStyle")&&(de.quoteStyle=s.quoteStyle),n(G,de,r+1,i)}return n(G,s,r+1,i)}if(typeof e=="function"&&!isRegExp$1(e)){var C=nameOf(e),T=arrObjKeys(e,S);return"[Function"+(C?": "+C:" (anonymous)")+"]"+(T.length>0?" { "+$join.call(T,", ")+" }":"")}if(isSymbol(e)){var O=hasShammedSymbols?$replace.call(String(e),/^(Symbol\(.*\))_[^)]*$/,"$1"):symToString.call(e);return typeof e=="object"&&!hasShammedSymbols?markBoxed(O):O}if(isElement$2(e)){for(var H="<"+$toLowerCase.call(String(e.nodeName)),R=e.attributes||[],Z=0;Z<R.length;Z++)H+=" "+R[Z].name+"="+wrapQuotes(quote(R[Z].value),"double",s);return H+=">",e.childNodes&&e.childNodes.length&&(H+="..."),H+="</"+$toLowerCase.call(String(e.nodeName))+">",H}if(isArray$3(e)){if(e.length===0)return"[]";var V=arrObjKeys(e,S);return _&&!singleLineValues(V)?"["+indentedJoin(V,_)+"]":"[ "+$join.call(V,", ")+" ]"}if(isError(e)){var q=arrObjKeys(e,S);return!("cause"in Error.prototype)&&"cause"in e&&!isEnumerable.call(e,"cause")?"{ ["+String(e)+"] "+$join.call($concat.call("[cause]: "+S(e.cause),q),", ")+" }":q.length===0?"["+String(e)+"]":"{ ["+String(e)+"] "+$join.call(q,", ")+" }"}if(typeof e=="object"&&l){if(inspectSymbol&&typeof e[inspectSymbol]=="function"&&utilInspect)return utilInspect(e,{depth:m-r});if(l!=="symbol"&&typeof e.inspect=="function")return e.inspect()}if(isMap(e)){var ee=[];return mapForEach&&mapForEach.call(e,function(G,oe){ee.push(S(oe,e,!0)+" => "+S(G,e))}),collectionOf("Map",mapSize.call(e),ee,_)}if(isSet(e)){var B=[];return setForEach&&setForEach.call(e,function(G){B.push(S(G,e))}),collectionOf("Set",setSize.call(e),B,_)}if(isWeakMap(e))return weakCollectionOf("WeakMap");if(isWeakSet(e))return weakCollectionOf("WeakSet");if(isWeakRef(e))return weakCollectionOf("WeakRef");if(isNumber(e))return markBoxed(S(Number(e)));if(isBigInt(e))return markBoxed(S(bigIntValueOf.call(e)));if(isBoolean(e))return markBoxed(booleanValueOf.call(e));if(isString(e))return markBoxed(S(String(e)));if(typeof window<"u"&&e===window)return"{ [object Window] }";if(typeof globalThis<"u"&&e===globalThis||typeof commonjsGlobal<"u"&&e===commonjsGlobal)return"{ [object globalThis] }";if(!isDate(e)&&!isRegExp$1(e)){var f=arrObjKeys(e,S),Y=gPO?gPO(e)===Object.prototype:e instanceof Object||e.constructor===Object,U=e instanceof Object?"":"null prototype",L=!Y&&toStringTag&&Object(e)===e&&toStringTag in e?$slice.call(toStr(e),8,-1):U?"Object":"",z=Y||typeof e.constructor!="function"?"":e.constructor.name?e.constructor.name+" ":"",K=z+(L||U?"["+$join.call($concat.call([],L||[],U||[]),": ")+"] ":"");return f.length===0?K+"{}":_?K+"{"+indentedJoin(f,_)+"}":K+"{ "+$join.call(f,", ")+" }"}return String(e)};function wrapQuotes(n,e,t){var r=(t.quoteStyle||e)==="double"?'"':"'";return r+n+r}function quote(n){return $replace.call(String(n),/"/g,""")}function isArray$3(n){return toStr(n)==="[object Array]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isDate(n){return toStr(n)==="[object Date]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isRegExp$1(n){return toStr(n)==="[object RegExp]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isError(n){return toStr(n)==="[object Error]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isString(n){return toStr(n)==="[object String]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isNumber(n){return toStr(n)==="[object Number]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isBoolean(n){return toStr(n)==="[object Boolean]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isSymbol(n){if(hasShammedSymbols)return n&&typeof n=="object"&&n instanceof Symbol;if(typeof n=="symbol")return!0;if(!n||typeof n!="object"||!symToString)return!1;try{return symToString.call(n),!0}catch{}return!1}function isBigInt(n){if(!n||typeof n!="object"||!bigIntValueOf)return!1;try{return bigIntValueOf.call(n),!0}catch{}return!1}var hasOwn=Object.prototype.hasOwnProperty||function(n){return n in this};function has$3(n,e){return hasOwn.call(n,e)}function toStr(n){return objectToString.call(n)}function nameOf(n){if(n.name)return n.name;var e=$match.call(functionToString.call(n),/^function\s*([\w$]+)/);return e?e[1]:null}function indexOf(n,e){if(n.indexOf)return n.indexOf(e);for(var t=0,r=n.length;t<r;t++)if(n[t]===e)return t;return-1}function isMap(n){if(!mapSize||!n||typeof n!="object")return!1;try{mapSize.call(n);try{setSize.call(n)}catch{return!0}return n instanceof Map}catch{}return!1}function isWeakMap(n){if(!weakMapHas||!n||typeof n!="object")return!1;try{weakMapHas.call(n,weakMapHas);try{weakSetHas.call(n,weakSetHas)}catch{return!0}return n instanceof WeakMap}catch{}return!1}function isWeakRef(n){if(!weakRefDeref||!n||typeof n!="object")return!1;try{return weakRefDeref.call(n),!0}catch{}return!1}function isSet(n){if(!setSize||!n||typeof n!="object")return!1;try{setSize.call(n);try{mapSize.call(n)}catch{return!0}return n instanceof Set}catch{}return!1}function isWeakSet(n){if(!weakSetHas||!n||typeof n!="object")return!1;try{weakSetHas.call(n,weakSetHas);try{weakMapHas.call(n,weakMapHas)}catch{return!0}return n instanceof WeakSet}catch{}return!1}function isElement$2(n){return!n||typeof n!="object"?!1:typeof HTMLElement<"u"&&n instanceof HTMLElement?!0:typeof n.nodeName=="string"&&typeof n.getAttribute=="function"}function inspectString(n,e){if(n.length>e.maxStringLength){var t=n.length-e.maxStringLength,r="... "+t+" more character"+(t>1?"s":"");return inspectString($slice.call(n,0,e.maxStringLength),e)+r}var i=$replace.call($replace.call(n,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,lowbyte);return wrapQuotes(i,"single",e)}function lowbyte(n){var e=n.charCodeAt(0),t={8:"b",9:"t",10:"n",12:"f",13:"r"}[e];return t?"\\"+t:"\\x"+(e<16?"0":"")+$toUpperCase.call(e.toString(16))}function markBoxed(n){return"Object("+n+")"}function weakCollectionOf(n){return n+" { ? }"}function collectionOf(n,e,t,r){var i=r?indentedJoin(t,r):$join.call(t,", ");return n+" ("+e+") {"+i+"}"}function singleLineValues(n){for(var e=0;e<n.length;e++)if(indexOf(n[e],`
|
||
`)>=0)return!1;return!0}function getIndent(n,e){var t;if(n.indent===" ")t=" ";else if(typeof n.indent=="number"&&n.indent>0)t=$join.call(Array(n.indent+1)," ");else return null;return{base:t,prev:$join.call(Array(e+1),t)}}function indentedJoin(n,e){if(n.length===0)return"";var t=`
|
||
`+e.prev+e.base;return t+$join.call(n,","+t)+`
|
||
`+e.prev}function arrObjKeys(n,e){var t=isArray$3(n),r=[];if(t){r.length=n.length;for(var i=0;i<n.length;i++)r[i]=has$3(n,i)?e(n[i],n):""}var s=typeof gOPS=="function"?gOPS(n):[],l;if(hasShammedSymbols){l={};for(var u=0;u<s.length;u++)l["$"+s[u]]=s[u]}for(var h in n)has$3(n,h)&&(t&&String(Number(h))===h&&h<n.length||hasShammedSymbols&&l["$"+h]instanceof Symbol||($test.call(/[^\w$]/,h)?r.push(e(h,n)+": "+e(n[h],n)):r.push(h+": "+e(n[h],n))));if(typeof gOPS=="function")for(var d=0;d<s.length;d++)isEnumerable.call(n,s[d])&&r.push("["+e(s[d])+"]: "+e(n[s[d]],n));return r}var GetIntrinsic=getIntrinsic,callBound=callBound$1,inspect=objectInspect,$TypeError=type,$WeakMap=GetIntrinsic("%WeakMap%",!0),$Map=GetIntrinsic("%Map%",!0),$weakMapGet=callBound("WeakMap.prototype.get",!0),$weakMapSet=callBound("WeakMap.prototype.set",!0),$weakMapHas=callBound("WeakMap.prototype.has",!0),$mapGet=callBound("Map.prototype.get",!0),$mapSet=callBound("Map.prototype.set",!0),$mapHas=callBound("Map.prototype.has",!0),listGetNode=function(n,e){for(var t=n,r;(r=t.next)!==null;t=r)if(r.key===e)return t.next=r.next,r.next=n.next,n.next=r,r},listGet=function(n,e){var t=listGetNode(n,e);return t&&t.value},listSet=function(n,e,t){var r=listGetNode(n,e);r?r.value=t:n.next={key:e,next:n.next,value:t}},listHas=function(n,e){return!!listGetNode(n,e)},sideChannel=function n(){var e,t,r,i={assert:function(s){if(!i.has(s))throw new $TypeError("Side channel does not contain "+inspect(s))},get:function(s){if($WeakMap&&s&&(typeof s=="object"||typeof s=="function")){if(e)return $weakMapGet(e,s)}else if($Map){if(t)return $mapGet(t,s)}else if(r)return listGet(r,s)},has:function(s){if($WeakMap&&s&&(typeof s=="object"||typeof s=="function")){if(e)return $weakMapHas(e,s)}else if($Map){if(t)return $mapHas(t,s)}else if(r)return listHas(r,s);return!1},set:function(s,l){$WeakMap&&s&&(typeof s=="object"||typeof s=="function")?(e||(e=new $WeakMap),$weakMapSet(e,s,l)):$Map?(t||(t=new $Map),$mapSet(t,s,l)):(r||(r={key:{},next:null}),listSet(r,s,l))}};return i},replace=String.prototype.replace,percentTwenties=/%20/g,Format={RFC1738:"RFC1738",RFC3986:"RFC3986"},formats$3={default:Format.RFC3986,formatters:{RFC1738:function(n){return replace.call(n,percentTwenties,"+")},RFC3986:function(n){return String(n)}},RFC1738:Format.RFC1738,RFC3986:Format.RFC3986},formats$2=formats$3,has$2=Object.prototype.hasOwnProperty,isArray$2=Array.isArray,hexTable=function(){for(var n=[],e=0;e<256;++e)n.push("%"+((e<16?"0":"")+e.toString(16)).toUpperCase());return n}(),compactQueue=function n(e){for(;e.length>1;){var t=e.pop(),r=t.obj[t.prop];if(isArray$2(r)){for(var i=[],s=0;s<r.length;++s)typeof r[s]<"u"&&i.push(r[s]);t.obj[t.prop]=i}}},arrayToObject=function n(e,t){for(var r=t&&t.plainObjects?Object.create(null):{},i=0;i<e.length;++i)typeof e[i]<"u"&&(r[i]=e[i]);return r},merge=function n(e,t,r){if(!t)return e;if(typeof t!="object"){if(isArray$2(e))e.push(t);else if(e&&typeof e=="object")(r&&(r.plainObjects||r.allowPrototypes)||!has$2.call(Object.prototype,t))&&(e[t]=!0);else return[e,t];return e}if(!e||typeof e!="object")return[e].concat(t);var i=e;return isArray$2(e)&&!isArray$2(t)&&(i=arrayToObject(e,r)),isArray$2(e)&&isArray$2(t)?(t.forEach(function(s,l){if(has$2.call(e,l)){var u=e[l];u&&typeof u=="object"&&s&&typeof s=="object"?e[l]=n(u,s,r):e.push(s)}else e[l]=s}),e):Object.keys(t).reduce(function(s,l){var u=t[l];return has$2.call(s,l)?s[l]=n(s[l],u,r):s[l]=u,s},i)},assign=function n(e,t){return Object.keys(t).reduce(function(r,i){return r[i]=t[i],r},e)},decode=function(n,e,t){var r=n.replace(/\+/g," ");if(t==="iso-8859-1")return r.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(r)}catch{return r}},limit=1024,encode=function n(e,t,r,i,s){if(e.length===0)return e;var l=e;if(typeof e=="symbol"?l=Symbol.prototype.toString.call(e):typeof e!="string"&&(l=String(e)),r==="iso-8859-1")return escape(l).replace(/%u[0-9a-f]{4}/gi,function(C){return"%26%23"+parseInt(C.slice(2),16)+"%3B"});for(var u="",h=0;h<l.length;h+=limit){for(var d=l.length>=limit?l.slice(h,h+limit):l,m=[],_=0;_<d.length;++_){var S=d.charCodeAt(_);if(S===45||S===46||S===95||S===126||S>=48&&S<=57||S>=65&&S<=90||S>=97&&S<=122||s===formats$2.RFC1738&&(S===40||S===41)){m[m.length]=d.charAt(_);continue}if(S<128){m[m.length]=hexTable[S];continue}if(S<2048){m[m.length]=hexTable[192|S>>6]+hexTable[128|S&63];continue}if(S<55296||S>=57344){m[m.length]=hexTable[224|S>>12]+hexTable[128|S>>6&63]+hexTable[128|S&63];continue}_+=1,S=65536+((S&1023)<<10|d.charCodeAt(_)&1023),m[m.length]=hexTable[240|S>>18]+hexTable[128|S>>12&63]+hexTable[128|S>>6&63]+hexTable[128|S&63]}u+=m.join("")}return u},compact=function n(e){for(var t=[{obj:{o:e},prop:"o"}],r=[],i=0;i<t.length;++i)for(var s=t[i],l=s.obj[s.prop],u=Object.keys(l),h=0;h<u.length;++h){var d=u[h],m=l[d];typeof m=="object"&&m!==null&&r.indexOf(m)===-1&&(t.push({obj:l,prop:d}),r.push(m))}return compactQueue(t),e},isRegExp=function n(e){return Object.prototype.toString.call(e)==="[object RegExp]"},isBuffer=function n(e){return!e||typeof e!="object"?!1:!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},combine=function n(e,t){return[].concat(e,t)},maybeMap=function n(e,t){if(isArray$2(e)){for(var r=[],i=0;i<e.length;i+=1)r.push(t(e[i]));return r}return t(e)},utils$2={arrayToObject,assign,combine,compact,decode,encode,isBuffer,isRegExp,maybeMap,merge},getSideChannel=sideChannel,utils$1=utils$2,formats$1=formats$3,has$1=Object.prototype.hasOwnProperty,arrayPrefixGenerators={brackets:function n(e){return e+"[]"},comma:"comma",indices:function n(e,t){return e+"["+t+"]"},repeat:function n(e){return e}},isArray$1=Array.isArray,push=Array.prototype.push,pushToArray=function(n,e){push.apply(n,isArray$1(e)?e:[e])},toISO=Date.prototype.toISOString,defaultFormat=formats$1.default,defaults$1={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:utils$1.encode,encodeValuesOnly:!1,format:defaultFormat,formatter:formats$1.formatters[defaultFormat],indices:!1,serializeDate:function n(e){return toISO.call(e)},skipNulls:!1,strictNullHandling:!1},isNonNullishPrimitive=function n(e){return typeof e=="string"||typeof e=="number"||typeof e=="boolean"||typeof e=="symbol"||typeof e=="bigint"},sentinel={},stringify$1=function n(e,t,r,i,s,l,u,h,d,m,_,S,C,T,O,H,R,Z){for(var V=e,q=Z,ee=0,B=!1;(q=q.get(sentinel))!==void 0&&!B;){var f=q.get(e);if(ee+=1,typeof f<"u"){if(f===ee)throw new RangeError("Cyclic object value");B=!0}typeof q.get(sentinel)>"u"&&(ee=0)}if(typeof m=="function"?V=m(t,V):V instanceof Date?V=C(V):r==="comma"&&isArray$1(V)&&(V=utils$1.maybeMap(V,function(De){return De instanceof Date?C(De):De})),V===null){if(l)return d&&!H?d(t,defaults$1.encoder,R,"key",T):t;V=""}if(isNonNullishPrimitive(V)||utils$1.isBuffer(V)){if(d){var Y=H?t:d(t,defaults$1.encoder,R,"key",T);return[O(Y)+"="+O(d(V,defaults$1.encoder,R,"value",T))]}return[O(t)+"="+O(String(V))]}var U=[];if(typeof V>"u")return U;var L;if(r==="comma"&&isArray$1(V))H&&d&&(V=utils$1.maybeMap(V,d)),L=[{value:V.length>0?V.join(",")||null:void 0}];else if(isArray$1(m))L=m;else{var z=Object.keys(V);L=_?z.sort(_):z}var K=h?t.replace(/\./g,"%2E"):t,G=i&&isArray$1(V)&&V.length===1?K+"[]":K;if(s&&isArray$1(V)&&V.length===0)return G+"[]";for(var oe=0;oe<L.length;++oe){var ue=L[oe],de=typeof ue=="object"&&typeof ue.value<"u"?ue.value:V[ue];if(!(u&&de===null)){var le=S&&h?ue.replace(/\./g,"%2E"):ue,ve=isArray$1(V)?typeof r=="function"?r(G,le):G:G+(S?"."+le:"["+le+"]");Z.set(e,ee);var he=getSideChannel();he.set(sentinel,Z),pushToArray(U,n(de,ve,r,i,s,l,u,h,r==="comma"&&H&&isArray$1(V)?null:d,m,_,S,C,T,O,H,R,he))}}return U},normalizeStringifyOptions=function n(e){if(!e)return defaults$1;if(typeof e.allowEmptyArrays<"u"&&typeof e.allowEmptyArrays!="boolean")throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(typeof e.encodeDotInKeys<"u"&&typeof e.encodeDotInKeys!="boolean")throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(e.encoder!==null&&typeof e.encoder<"u"&&typeof e.encoder!="function")throw new TypeError("Encoder has to be a function.");var t=e.charset||defaults$1.charset;if(typeof e.charset<"u"&&e.charset!=="utf-8"&&e.charset!=="iso-8859-1")throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var r=formats$1.default;if(typeof e.format<"u"){if(!has$1.call(formats$1.formatters,e.format))throw new TypeError("Unknown format option provided.");r=e.format}var i=formats$1.formatters[r],s=defaults$1.filter;(typeof e.filter=="function"||isArray$1(e.filter))&&(s=e.filter);var l;if(e.arrayFormat in arrayPrefixGenerators?l=e.arrayFormat:"indices"in e?l=e.indices?"indices":"repeat":l=defaults$1.arrayFormat,"commaRoundTrip"in e&&typeof e.commaRoundTrip!="boolean")throw new TypeError("`commaRoundTrip` must be a boolean, or absent");var u=typeof e.allowDots>"u"?e.encodeDotInKeys===!0?!0:defaults$1.allowDots:!!e.allowDots;return{addQueryPrefix:typeof e.addQueryPrefix=="boolean"?e.addQueryPrefix:defaults$1.addQueryPrefix,allowDots:u,allowEmptyArrays:typeof e.allowEmptyArrays=="boolean"?!!e.allowEmptyArrays:defaults$1.allowEmptyArrays,arrayFormat:l,charset:t,charsetSentinel:typeof e.charsetSentinel=="boolean"?e.charsetSentinel:defaults$1.charsetSentinel,commaRoundTrip:e.commaRoundTrip,delimiter:typeof e.delimiter>"u"?defaults$1.delimiter:e.delimiter,encode:typeof e.encode=="boolean"?e.encode:defaults$1.encode,encodeDotInKeys:typeof e.encodeDotInKeys=="boolean"?e.encodeDotInKeys:defaults$1.encodeDotInKeys,encoder:typeof e.encoder=="function"?e.encoder:defaults$1.encoder,encodeValuesOnly:typeof e.encodeValuesOnly=="boolean"?e.encodeValuesOnly:defaults$1.encodeValuesOnly,filter:s,format:r,formatter:i,serializeDate:typeof e.serializeDate=="function"?e.serializeDate:defaults$1.serializeDate,skipNulls:typeof e.skipNulls=="boolean"?e.skipNulls:defaults$1.skipNulls,sort:typeof e.sort=="function"?e.sort:null,strictNullHandling:typeof e.strictNullHandling=="boolean"?e.strictNullHandling:defaults$1.strictNullHandling}},stringify_1=function(n,e){var t=n,r=normalizeStringifyOptions(e),i,s;typeof r.filter=="function"?(s=r.filter,t=s("",t)):isArray$1(r.filter)&&(s=r.filter,i=s);var l=[];if(typeof t!="object"||t===null)return"";var u=arrayPrefixGenerators[r.arrayFormat],h=u==="comma"&&r.commaRoundTrip;i||(i=Object.keys(t)),r.sort&&i.sort(r.sort);for(var d=getSideChannel(),m=0;m<i.length;++m){var _=i[m];r.skipNulls&&t[_]===null||pushToArray(l,stringify$1(t[_],_,u,h,r.allowEmptyArrays,r.strictNullHandling,r.skipNulls,r.encodeDotInKeys,r.encode?r.encoder:null,r.filter,r.sort,r.allowDots,r.serializeDate,r.format,r.formatter,r.encodeValuesOnly,r.charset,d))}var S=l.join(r.delimiter),C=r.addQueryPrefix===!0?"?":"";return r.charsetSentinel&&(r.charset==="iso-8859-1"?C+="utf8=%26%2310003%3B&":C+="utf8=%E2%9C%93&"),S.length>0?C+S:""},utils=utils$2,has=Object.prototype.hasOwnProperty,isArray=Array.isArray,defaults={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!1,decoder:utils.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},interpretNumericEntities=function(n){return n.replace(/&#(\d+);/g,function(e,t){return String.fromCharCode(parseInt(t,10))})},parseArrayValue=function(n,e){return n&&typeof n=="string"&&e.comma&&n.indexOf(",")>-1?n.split(","):n},isoSentinel="utf8=%26%2310003%3B",charsetSentinel="utf8=%E2%9C%93",parseValues=function n(e,t){var r={__proto__:null},i=t.ignoreQueryPrefix?e.replace(/^\?/,""):e;i=i.replace(/%5B/gi,"[").replace(/%5D/gi,"]");var s=t.parameterLimit===1/0?void 0:t.parameterLimit,l=i.split(t.delimiter,s),u=-1,h,d=t.charset;if(t.charsetSentinel)for(h=0;h<l.length;++h)l[h].indexOf("utf8=")===0&&(l[h]===charsetSentinel?d="utf-8":l[h]===isoSentinel&&(d="iso-8859-1"),u=h,h=l.length);for(h=0;h<l.length;++h)if(h!==u){var m=l[h],_=m.indexOf("]="),S=_===-1?m.indexOf("="):_+1,C,T;S===-1?(C=t.decoder(m,defaults.decoder,d,"key"),T=t.strictNullHandling?null:""):(C=t.decoder(m.slice(0,S),defaults.decoder,d,"key"),T=utils.maybeMap(parseArrayValue(m.slice(S+1),t),function(H){return t.decoder(H,defaults.decoder,d,"value")})),T&&t.interpretNumericEntities&&d==="iso-8859-1"&&(T=interpretNumericEntities(T)),m.indexOf("[]=")>-1&&(T=isArray(T)?[T]:T);var O=has.call(r,C);O&&t.duplicates==="combine"?r[C]=utils.combine(r[C],T):(!O||t.duplicates==="last")&&(r[C]=T)}return r},parseObject=function(n,e,t,r){for(var i=r?e:parseArrayValue(e,t),s=n.length-1;s>=0;--s){var l,u=n[s];if(u==="[]"&&t.parseArrays)l=t.allowEmptyArrays&&i===""?[]:[].concat(i);else{l=t.plainObjects?Object.create(null):{};var h=u.charAt(0)==="["&&u.charAt(u.length-1)==="]"?u.slice(1,-1):u,d=t.decodeDotInKeys?h.replace(/%2E/g,"."):h,m=parseInt(d,10);!t.parseArrays&&d===""?l={0:i}:!isNaN(m)&&u!==d&&String(m)===d&&m>=0&&t.parseArrays&&m<=t.arrayLimit?(l=[],l[m]=i):d!=="__proto__"&&(l[d]=i)}i=l}return i},parseKeys=function n(e,t,r,i){if(e){var s=r.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,l=/(\[[^[\]]*])/,u=/(\[[^[\]]*])/g,h=r.depth>0&&l.exec(s),d=h?s.slice(0,h.index):s,m=[];if(d){if(!r.plainObjects&&has.call(Object.prototype,d)&&!r.allowPrototypes)return;m.push(d)}for(var _=0;r.depth>0&&(h=u.exec(s))!==null&&_<r.depth;){if(_+=1,!r.plainObjects&&has.call(Object.prototype,h[1].slice(1,-1))&&!r.allowPrototypes)return;m.push(h[1])}return h&&m.push("["+s.slice(h.index)+"]"),parseObject(m,t,r,i)}},normalizeParseOptions=function n(e){if(!e)return defaults;if(typeof e.allowEmptyArrays<"u"&&typeof e.allowEmptyArrays!="boolean")throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(typeof e.decodeDotInKeys<"u"&&typeof e.decodeDotInKeys!="boolean")throw new TypeError("`decodeDotInKeys` option can only be `true` or `false`, when provided");if(e.decoder!==null&&typeof e.decoder<"u"&&typeof e.decoder!="function")throw new TypeError("Decoder has to be a function.");if(typeof e.charset<"u"&&e.charset!=="utf-8"&&e.charset!=="iso-8859-1")throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t=typeof e.charset>"u"?defaults.charset:e.charset,r=typeof e.duplicates>"u"?defaults.duplicates:e.duplicates;if(r!=="combine"&&r!=="first"&&r!=="last")throw new TypeError("The duplicates option must be either combine, first, or last");var i=typeof e.allowDots>"u"?e.decodeDotInKeys===!0?!0:defaults.allowDots:!!e.allowDots;return{allowDots:i,allowEmptyArrays:typeof e.allowEmptyArrays=="boolean"?!!e.allowEmptyArrays:defaults.allowEmptyArrays,allowPrototypes:typeof e.allowPrototypes=="boolean"?e.allowPrototypes:defaults.allowPrototypes,allowSparse:typeof e.allowSparse=="boolean"?e.allowSparse:defaults.allowSparse,arrayLimit:typeof e.arrayLimit=="number"?e.arrayLimit:defaults.arrayLimit,charset:t,charsetSentinel:typeof e.charsetSentinel=="boolean"?e.charsetSentinel:defaults.charsetSentinel,comma:typeof e.comma=="boolean"?e.comma:defaults.comma,decodeDotInKeys:typeof e.decodeDotInKeys=="boolean"?e.decodeDotInKeys:defaults.decodeDotInKeys,decoder:typeof e.decoder=="function"?e.decoder:defaults.decoder,delimiter:typeof e.delimiter=="string"||utils.isRegExp(e.delimiter)?e.delimiter:defaults.delimiter,depth:typeof e.depth=="number"||e.depth===!1?+e.depth:defaults.depth,duplicates:r,ignoreQueryPrefix:e.ignoreQueryPrefix===!0,interpretNumericEntities:typeof e.interpretNumericEntities=="boolean"?e.interpretNumericEntities:defaults.interpretNumericEntities,parameterLimit:typeof e.parameterLimit=="number"?e.parameterLimit:defaults.parameterLimit,parseArrays:e.parseArrays!==!1,plainObjects:typeof e.plainObjects=="boolean"?e.plainObjects:defaults.plainObjects,strictNullHandling:typeof e.strictNullHandling=="boolean"?e.strictNullHandling:defaults.strictNullHandling}},parse$1=function(n,e){var t=normalizeParseOptions(e);if(n===""||n===null||typeof n>"u")return t.plainObjects?Object.create(null):{};for(var r=typeof n=="string"?parseValues(n,t):n,i=t.plainObjects?Object.create(null):{},s=Object.keys(r),l=0;l<s.length;++l){var u=s[l],h=parseKeys(u,r[u],t,typeof n=="string");i=utils.merge(i,h,t)}return t.allowSparse===!0?i:utils.compact(i)},stringify=stringify_1,parse=parse$1,formats=formats$3,lib={formats,parse,stringify},base64={exports:{}};(function(n,e){(function(t,r){n.exports=r()})(typeof self<"u"?self:typeof window<"u"?window:commonjsGlobal,function(){var t="3.7.7",r=t,i=typeof Buffer=="function",s=typeof TextDecoder=="function"?new TextDecoder:void 0,l=typeof TextEncoder=="function"?new TextEncoder:void 0,u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",h=Array.prototype.slice.call(u),d=function(F){var te={};return F.forEach(function(Te,$e){return te[Te]=$e}),te}(h),m=/^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/,_=String.fromCharCode.bind(String),S=typeof Uint8Array.from=="function"?Uint8Array.from.bind(Uint8Array):function(F){return new Uint8Array(Array.prototype.slice.call(F,0))},C=function(F){return F.replace(/=/g,"").replace(/[+\/]/g,function(te){return te=="+"?"-":"_"})},T=function(F){return F.replace(/[^A-Za-z0-9\+\/]/g,"")},O=function(F){for(var te,Te,$e,Me,Ce="",Ze=F.length%3,Fe=0;Fe<F.length;){if((Te=F.charCodeAt(Fe++))>255||($e=F.charCodeAt(Fe++))>255||(Me=F.charCodeAt(Fe++))>255)throw new TypeError("invalid character found");te=Te<<16|$e<<8|Me,Ce+=h[te>>18&63]+h[te>>12&63]+h[te>>6&63]+h[te&63]}return Ze?Ce.slice(0,Ze-3)+"===".substring(Ze):Ce},H=typeof btoa=="function"?function(F){return btoa(F)}:i?function(F){return Buffer.from(F,"binary").toString("base64")}:O,R=i?function(F){return Buffer.from(F).toString("base64")}:function(F){for(var te=4096,Te=[],$e=0,Me=F.length;$e<Me;$e+=te)Te.push(_.apply(null,F.subarray($e,$e+te)));return H(Te.join(""))},Z=function(F,te){return te===void 0&&(te=!1),te?C(R(F)):R(F)},V=function(F){if(F.length<2){var te=F.charCodeAt(0);return te<128?F:te<2048?_(192|te>>>6)+_(128|te&63):_(224|te>>>12&15)+_(128|te>>>6&63)+_(128|te&63)}else{var te=65536+(F.charCodeAt(0)-55296)*1024+(F.charCodeAt(1)-56320);return _(240|te>>>18&7)+_(128|te>>>12&63)+_(128|te>>>6&63)+_(128|te&63)}},q=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,ee=function(F){return F.replace(q,V)},B=i?function(F){return Buffer.from(F,"utf8").toString("base64")}:l?function(F){return R(l.encode(F))}:function(F){return H(ee(F))},f=function(F,te){return te===void 0&&(te=!1),te?C(B(F)):B(F)},Y=function(F){return f(F,!0)},U=/[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g,L=function(F){switch(F.length){case 4:var te=(7&F.charCodeAt(0))<<18|(63&F.charCodeAt(1))<<12|(63&F.charCodeAt(2))<<6|63&F.charCodeAt(3),Te=te-65536;return _((Te>>>10)+55296)+_((Te&1023)+56320);case 3:return _((15&F.charCodeAt(0))<<12|(63&F.charCodeAt(1))<<6|63&F.charCodeAt(2));default:return _((31&F.charCodeAt(0))<<6|63&F.charCodeAt(1))}},z=function(F){return F.replace(U,L)},K=function(F){if(F=F.replace(/\s+/g,""),!m.test(F))throw new TypeError("malformed base64.");F+="==".slice(2-(F.length&3));for(var te,Te="",$e,Me,Ce=0;Ce<F.length;)te=d[F.charAt(Ce++)]<<18|d[F.charAt(Ce++)]<<12|($e=d[F.charAt(Ce++)])<<6|(Me=d[F.charAt(Ce++)]),Te+=$e===64?_(te>>16&255):Me===64?_(te>>16&255,te>>8&255):_(te>>16&255,te>>8&255,te&255);return Te},G=typeof atob=="function"?function(F){return atob(T(F))}:i?function(F){return Buffer.from(F,"base64").toString("binary")}:K,oe=i?function(F){return S(Buffer.from(F,"base64"))}:function(F){return S(G(F).split("").map(function(te){return te.charCodeAt(0)}))},ue=function(F){return oe(le(F))},de=i?function(F){return Buffer.from(F,"base64").toString("utf8")}:s?function(F){return s.decode(oe(F))}:function(F){return z(G(F))},le=function(F){return T(F.replace(/[-_]/g,function(te){return te=="-"?"+":"/"}))},ve=function(F){return de(le(F))},he=function(F){if(typeof F!="string")return!1;var te=F.replace(/\s+/g,"").replace(/={0,2}$/,"");return!/[^\s0-9a-zA-Z\+/]/.test(te)||!/[^\s0-9a-zA-Z\-_]/.test(te)},De=function(F){return{value:F,enumerable:!1,writable:!0,configurable:!0}},fe=function(){var F=function(te,Te){return Object.defineProperty(String.prototype,te,De(Te))};F("fromBase64",function(){return ve(this)}),F("toBase64",function(te){return f(this,te)}),F("toBase64URI",function(){return f(this,!0)}),F("toBase64URL",function(){return f(this,!0)}),F("toUint8Array",function(){return ue(this)})},be=function(){var F=function(te,Te){return Object.defineProperty(Uint8Array.prototype,te,De(Te))};F("toBase64",function(te){return Z(this,te)}),F("toBase64URI",function(){return Z(this,!0)}),F("toBase64URL",function(){return Z(this,!0)})},we=function(){fe(),be()},Ne={version:t,VERSION:r,atob:G,atobPolyfill:K,btoa:H,btoaPolyfill:O,fromBase64:ve,toBase64:f,encode:f,encodeURI:Y,encodeURL:Y,utob:ee,btou:z,decode:ve,isValid:he,fromUint8Array:Z,toUint8Array:ue,extendString:fe,extendUint8Array:be,extendBuiltins:we};return Ne.Base64={},Object.keys(Ne).forEach(function(F){return Ne.Base64[F]=Ne[F]}),Ne})})(base64);var base64Exports=base64.exports,__assign$2=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$2=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i])}return n},__assign$2.apply(this,arguments)},__awaiter=commonjsGlobal&&commonjsGlobal.__awaiter||function(n,e,t,r){function i(s){return s instanceof t?s:new t(function(l){l(s)})}return new(t||(t=Promise))(function(s,l){function u(m){try{d(r.next(m))}catch(_){l(_)}}function h(m){try{d(r.throw(m))}catch(_){l(_)}}function d(m){m.done?s(m.value):i(m.value).then(u,h)}d((r=r.apply(n,e||[])).next())})},__generator=commonjsGlobal&&commonjsGlobal.__generator||function(n,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},r,i,s,l;return l={next:u(0),throw:u(1),return:u(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function u(d){return function(m){return h([d,m])}}function h(d){if(r)throw new TypeError("Generator is already executing.");for(;l&&(l=0,d[0]&&(t=0)),t;)try{if(r=1,i&&(s=d[0]&2?i.return:d[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,d[1])).done)return s;switch(i=0,s&&(d=[d[0]&2,s.value]),d[0]){case 0:case 1:s=d;break;case 4:return t.label++,{value:d[1],done:!1};case 5:t.label++,i=d[1],d=[0];continue;case 7:d=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(d[0]===6||d[0]===2)){t=0;continue}if(d[0]===3&&(!s||d[1]>s[0]&&d[1]<s[3])){t.label=d[1];break}if(d[0]===6&&t.label<s[1]){t.label=s[1],s=d;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(d);break}s[2]&&t.ops.pop(),t.trys.pop();continue}d=e.call(n,t)}catch(m){d=[6,m],i=0}finally{r=s=0}if(d[0]&5)throw d[1];return{value:d[0]?d[1]:void 0,done:!0}}},__importDefault=commonjsGlobal&&commonjsGlobal.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(KintoneRequestConfigBuilder$1,"__esModule",{value:!0});KintoneRequestConfigBuilder$1.KintoneRequestConfigBuilder=void 0;var form_data_1=__importDefault(browser),qs_1=__importDefault(lib),js_base64_1=base64Exports,platform_1$1=platform$2,DEFAULT_PROXY_PROTOCOL="http",THRESHOLD_AVOID_REQUEST_URL_TOO_LARGE=4096,KintoneRequestConfigBuilder=function(){function n(e){if(this.baseUrl=e.baseUrl,this.auth=e.auth,this.headers=this.buildHeaders({basicAuth:e.basicAuth,userAgent:e.userAgent}),"httpsAgent"in e){if("clientCertAuth"in e)throw new Error("Cannot specify clientCertAuth along with httpsAgent.");this.httpsAgent=e.httpsAgent}else"clientCertAuth"in e&&(this.clientCertAuth=e.clientCertAuth);this.proxy=e.proxy,this.requestToken=null,this.socketTimeout=e.socketTimeout}return n.prototype.build=function(e,t,r,i){return __awaiter(this,void 0,void 0,function(){var s,l,_,u,h,d,m,_,S,C,T,O,H;return __generator(this,function(R){switch(R.label){case 0:switch(s=__assign$2(__assign$2(__assign$2({method:e,headers:this.headers,url:"".concat(this.baseUrl).concat(t)},i||{}),platform_1$1.platformDeps.buildPlatformDependentConfig({httpsAgent:this.httpsAgent,clientCertAuth:this.clientCertAuth,socketTimeout:this.socketTimeout})),{proxy:this.buildProxyConfig(this.proxy)}),l=e,l){case"get":return[3,1];case"post":return[3,4];case"put":return[3,8];case"delete":return[3,10]}return[3,12];case 1:return _=this.buildRequestUrl(t,r),_.length>THRESHOLD_AVOID_REQUEST_URL_TOO_LARGE?(u=[__assign$2({},s)],T={method:"post",headers:__assign$2(__assign$2({},this.headers),{"X-HTTP-Method-Override":"GET"})},[4,this.buildData(r)]):[3,3];case 2:return[2,__assign$2.apply(void 0,u.concat([(T.data=R.sent(),T)]))];case 3:return[2,__assign$2(__assign$2({},s),{url:_})];case 4:return r instanceof form_data_1.default?[4,this.buildData(r)]:[3,6];case 5:return h=R.sent(),[2,__assign$2(__assign$2({},s),{headers:typeof h.getHeaders=="function"?__assign$2(__assign$2({},this.headers),h.getHeaders()):this.headers,data:h})];case 6:return d=[__assign$2({},s)],O={},[4,this.buildData(r)];case 7:return[2,__assign$2.apply(void 0,d.concat([(O.data=R.sent(),O)]))];case 8:return m=[__assign$2({},s)],H={},[4,this.buildData(r)];case 9:return[2,__assign$2.apply(void 0,m.concat([(H.data=R.sent(),H)]))];case 10:return S=this.buildRequestUrl,C=[t],[4,this.buildData(r)];case 11:return _=S.apply(this,C.concat([R.sent()])),[2,__assign$2(__assign$2({},s),{url:_})];case 12:throw new Error("".concat(e," method is not supported"));case 13:return[2]}})})},n.prototype.buildProxyConfig=function(e){var t;if(e!==void 0){if(e===!1)return!1;var r=e;return r.auth&&(r.auth.username.length===0||r.auth.password.length===0)&&(r.auth=void 0),r.protocol=(t=r.protocol)!==null&&t!==void 0?t:DEFAULT_PROXY_PROTOCOL,r}},n.prototype.buildRequestUrl=function(e,t){return"".concat(this.baseUrl).concat(e,"?").concat(qs_1.default.stringify(t))},n.prototype.buildData=function(e){return __awaiter(this,void 0,void 0,function(){var t;return __generator(this,function(r){switch(r.label){case 0:return this.auth.type!=="session"?[3,2]:[4,this.getRequestToken()];case 1:return t=r.sent(),e instanceof form_data_1.default?(e.append("__REQUEST_TOKEN__",t),[2,e]):[2,__assign$2({__REQUEST_TOKEN__:t},e)];case 2:return[2,e]}})})},n.prototype.buildHeaders=function(e){var t=e.basicAuth,r=e.userAgent,i=t?{Authorization:"Basic ".concat(js_base64_1.Base64.encode("".concat(t.username,":").concat(t.password)))}:{},s=platform_1$1.platformDeps.buildHeaders({userAgent:r}),l=__assign$2(__assign$2({},s),i);switch(this.auth.type){case"password":return __assign$2(__assign$2({},l),{"X-Cybozu-Authorization":js_base64_1.Base64.encode("".concat(this.auth.username,":").concat(this.auth.password))});case"apiToken":{var u=this.auth.apiToken;return Array.isArray(u)?__assign$2(__assign$2({},l),{"X-Cybozu-API-Token":u.join(",")}):__assign$2(__assign$2({},l),{"X-Cybozu-API-Token":u})}case"oAuthToken":return __assign$2(__assign$2({},l),{Authorization:"Bearer ".concat(this.auth.oAuthToken)});default:return __assign$2(__assign$2({},l),{"X-Requested-With":"XMLHttpRequest"})}},n.prototype.getRequestToken=function(){return __awaiter(this,void 0,void 0,function(){var e;return __generator(this,function(t){switch(t.label){case 0:return this.requestToken!==null?[3,2]:(e=this,[4,platform_1$1.platformDeps.getRequestToken()]);case 1:e.requestToken=t.sent(),t.label=2;case 2:return[2,this.requestToken]}})})},n}();KintoneRequestConfigBuilder$1.KintoneRequestConfigBuilder=KintoneRequestConfigBuilder;var KintoneResponseHandler$1={},__assign$1=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$1=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i])}return n},__assign$1.apply(this,arguments)},__rest=commonjsGlobal&&commonjsGlobal.__rest||function(n,e){var t={};for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&e.indexOf(r)<0&&(t[r]=n[r]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(n);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(n,r[i])&&(t[r[i]]=n[r[i]]);return t};Object.defineProperty(KintoneResponseHandler$1,"__esModule",{value:!0});KintoneResponseHandler$1.KintoneResponseHandler=void 0;var error_1=error,KintoneResponseHandler=function(){function n(e){var t=e.enableAbortSearchError;this.enableAbortSearchError=t}return n.prototype.handle=function(e){var t=this;return e.then(function(r){return t.handleSuccessResponse(r)},function(r){return t.handleErrorResponse(r)})},n.prototype.handleSuccessResponse=function(e){if(this.enableAbortSearchError&&/Filter aborted because of too many search results/.test(e.headers["x-cybozu-warning"]))throw new error_1.KintoneAbortSearchError(e.headers["x-cybozu-warning"]);return e.data},n.prototype.handleErrorResponse=function(e){if(!e.response)throw/mac verify failure/.test(e.toString())?new Error("invalid clientCertAuth setting"):e;var t=e.response,r=t.data,i=__rest(t,["data"]);throw typeof r=="string"?new Error("".concat(i.status,": ").concat(i.statusText)):new error_1.KintoneRestAPIError(__assign$1({data:r},i))},n}();KintoneResponseHandler$1.KintoneResponseHandler=KintoneResponseHandler;var __assign=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i])}return n},__assign.apply(this,arguments)};Object.defineProperty(KintoneRestAPIClient$1,"__esModule",{value:!0});KintoneRestAPIClient$1.KintoneRestAPIClient=void 0;var BulkRequestClient_1=BulkRequestClient$1,AppClient_1=AppClient$1,RecordClient_1=RecordClient$1,SpaceClient_1=SpaceClient$1,FileClient_1=FileClient$1,http_1=http,KintoneRequestConfigBuilder_1=KintoneRequestConfigBuilder$1,KintoneResponseHandler_1=KintoneResponseHandler$1,platform_1=platform$2,UnsupportedPlatformError_1=UnsupportedPlatformError$1,buildDiscriminatedAuth=function(n){if("username"in n)return __assign({type:"password"},n);if("apiToken"in n)return __assign({type:"apiToken"},n);if("oAuthToken"in n)return __assign({type:"oAuthToken"},n);try{return platform_1.platformDeps.getDefaultAuth()}catch(e){throw e instanceof UnsupportedPlatformError_1.UnsupportedPlatformError?new Error("session authentication is not supported in ".concat(e.platform," environment.")):e}},KintoneRestAPIClient=function(){function n(e){e===void 0&&(e={});var t,r,i;validateOptions(e),this.baseUrl=platform_1.platformDeps.buildBaseUrl(e.baseUrl).replace(/\/+$/,"");var s=buildDiscriminatedAuth((t=e.auth)!==null&&t!==void 0?t:{}),l=new KintoneRequestConfigBuilder_1.KintoneRequestConfigBuilder(__assign(__assign({},e),{baseUrl:this.baseUrl,auth:s})),u=new KintoneResponseHandler_1.KintoneResponseHandler({enableAbortSearchError:(i=(r=e.featureFlags)===null||r===void 0?void 0:r.enableAbortSearchError)!==null&&i!==void 0?i:!1}),h=new http_1.DefaultHttpClient({responseHandler:u,requestConfigBuilder:l}),d=e.guestSpaceId;this.bulkRequest_=new BulkRequestClient_1.BulkRequestClient(h,d),this.record=new RecordClient_1.RecordClient(h,this.bulkRequest_,d),this.app=new AppClient_1.AppClient(h,d),this.space=new SpaceClient_1.SpaceClient(h,d),this.file=new FileClient_1.FileClient(h,d)}return Object.defineProperty(n,"version",{get:function(){return platform_1.platformDeps.getVersion()},enumerable:!1,configurable:!0}),n.prototype.getBaseUrl=function(){return this.baseUrl},n.prototype.bulkRequest=function(e){return this.bulkRequest_.send(e)},n}();KintoneRestAPIClient$1.KintoneRestAPIClient=KintoneRestAPIClient;var validateOptions=function(n){validateBaseUrl(n.baseUrl),validateGuestSpaceId(n.guestSpaceId),validateSocketTimeout(n.socketTimeout)},validateBaseUrl=function(n){if(n!==void 0){var e=new URL(n);if(e.hostname!=="localhost"&&e.protocol!=="https:")throw new Error('The protocol of baseUrl must be "https".')}},validateGuestSpaceId=function(n){if(n===""||n===null)throw new Error("invalid guestSpaceId: got [".concat(n,"]"))},validateSocketTimeout=function(n){if(n!==void 0){var e=parseFloat(n.toString());if(isNaN(e)||e<0)throw new Error("Invalid socketTimeout. Must be a positive number.")}};(function(n){var e=commonjsGlobal&&commonjsGlobal.__createBinding||(Object.create?function(h,d,m,_){_===void 0&&(_=m);var S=Object.getOwnPropertyDescriptor(d,m);(!S||("get"in S?!d.__esModule:S.writable||S.configurable))&&(S={enumerable:!0,get:function(){return d[m]}}),Object.defineProperty(h,_,S)}:function(h,d,m,_){_===void 0&&(_=m),h[_]=d[m]}),t=commonjsGlobal&&commonjsGlobal.__setModuleDefault||(Object.create?function(h,d){Object.defineProperty(h,"default",{enumerable:!0,value:d})}:function(h,d){h.default=d}),r=commonjsGlobal&&commonjsGlobal.__importStar||function(h){if(h&&h.__esModule)return h;var d={};if(h!=null)for(var m in h)m!=="default"&&Object.prototype.hasOwnProperty.call(h,m)&&e(d,h,m);return t(d,h),d},i=commonjsGlobal&&commonjsGlobal.__exportStar||function(h,d){for(var m in h)m!=="default"&&!Object.prototype.hasOwnProperty.call(d,m)&&e(d,h,m)};Object.defineProperty(n,"__esModule",{value:!0}),n.KintoneRestAPIClient=void 0;var s=platform$2,l=r(browser$2);(0,s.injectPlatformDeps)(l);var u=KintoneRestAPIClient$1;Object.defineProperty(n,"KintoneRestAPIClient",{enumerable:!0,get:function(){return u.KintoneRestAPIClient}}),i(error,n)})(index_browser);var FieldType=(n=>(n.CALC="CALC",n.CATEGORY="CATEGORY",n.CHECK_BOX="CHECK_BOX",n.CREATED_TIME="CREATED_TIME",n.CREATOR="CREATOR",n.DATE="DATE",n.DATETIME="DATETIME",n.DROP_DOWN="DROP_DOWN",n.FILE="FILE",n.GROUP="GROUP",n.GROUP_SELECT="GROUP_SELECT",n.LINK="LINK",n.MODIFIER="MODIFIER",n.MULTI_LINE_TEXT="MULTI_LINE_TEXT",n.MULTI_SELECT="MULTI_SELECT",n.NUMBER="NUMBER",n.ORGANIZATION_SELECT="ORGANIZATION_SELECT",n.RADIO_BUTTON="RADIO_BUTTON",n.RECORD_NUMBER="RECORD_NUMBER",n.REFERENCE_TABLE="REFERENCE_TABLE",n.RICH_TEXT="RICH_TEXT",n.SINGLE_LINE_TEXT="SINGLE_LINE_TEXT",n.STATUS="STATUS",n.STATUS_ASSIGNEE="STATUS_ASSIGNEE",n.SUBTABLE="SUBTABLE",n.TIME="TIME",n.UPDATED_TIME="UPDATED_TIME",n.USER_SELECT="USER_SELECT",n))(FieldType||{}),CalcFormat=(n=>(n.NUMBER="NUMBER",n.NUMBER_DIGIT="NUMBER_DIGIT",n.DATETIME="DATETIME",n.DATE="DATE",n.TIME="TIME",n.HOUR_MINUTE="HOUR_MINUTE",n.DAY_HOUR_MINUTE="DAY_HOUR_MINUTE",n))(CalcFormat||{});class Aggregator{constructor(e,t){P(this,"data");P(this,"field");this.data=e,this.field=t}toNumberArray(){return this.data.map(t=>{const r=Number(t);if(isNaN(r))throw new Error(`フィールド「${this.field.code} 」は数値に変換できないため、計算を実行できません。`);return r})}sum(){return this.data.length===0?null:this.toNumberArray().reduce((t,r)=>t+r,0)}avg(){if(this.data.length===0)return null;const e=this.toNumberArray();return e.reduce((r,i)=>r+i,0)/e.length}max(){if(this.data.length===0)return null;if(this.field.type===FieldType.NUMBER){const e=this.toNumberArray();return Math.max(...e)}if(this.field.type===FieldType.CALC){const e=this.field;if(e.format===CalcFormat.NUMBER||e.format===CalcFormat.NUMBER_DIGIT){const t=this.toNumberArray();return Math.max(...t)}}return this.data.reduce((e,t)=>t>e?t:e,this.data[0])}min(){if(this.data.length===0)return null;if(this.field.type===FieldType.NUMBER){const e=this.toNumberArray();return Math.min(...e)}if(this.field.type===FieldType.CALC){const e=this.field;if(e.format===CalcFormat.NUMBER||e.format===CalcFormat.NUMBER_DIGIT){const t=this.toNumberArray();return Math.min(...t)}}return this.data===null||this.data.length===0?null:this.data.reduce((e,t)=>t<e?t:e,this.data[0])}count(){return this.data.length}first(){return this.data.length?this.data[0]:null}last(){return this.data.length?this.data[this.data.length-1]:null}calculate(e){switch(e){case"SUM":return this.sum();case"AVG":return this.avg();case"MAX":return this.max();case"MIN":return this.min();case"COUNT":return this.count();case"FIRST":return this.first();case"LAST":return this.last();default:return null}}}class DataProcessingAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");P(this,"getQuery",(e,t)=>{console.log(e);const r=/var\((.*?)\)/g;let i;for(;(i=r.exec(e))!==null;){const s=i[1];if(s in t)e=e.replace(i[0],t[s]);else throw new Error(`変数${s}が見つかりません`)}return console.log(e),e});P(this,"selectData",async e=>{const t=new index_browser.KintoneRestAPIClient,r=this.props.sources.fields.map(l=>l.code),i=await t.record.getAllRecords({app:this.props.sources.app.id,fields:r,condition:e}),s={};return i.forEach(l=>{for(const[u,h]of Object.entries(l))s[u]||(s[u]={type:h.type,value:[]}),s[u].value.push(h.value)}),s});this.name="データ処理",this.actionProps=[],this.props={displayName:"",condition:"",sources:{app:{id:""},fields:[]}},this.register()}async process(e,t,r){this.actionProps=e.actionProps,this.props=e.ActionValue;const i=JSON.parse(this.props.condition);let s={canNext:!0,result:""};try{if(!this.props)return s;const l=this.getQuery(i.queryString,r.variables),u=await this.selectData(l);if(console.log("data ",u),this.props.verName){const h=this.props.verName.vars.reduce((d,m)=>{const _=u[m.field.code].value,C=new Aggregator(_,m.field).calculate(m.logicalOperator.operator);return d[m.vName]=C,d},{});r.variables[this.props.verName.name]=h,console.log("context ",r)}return s}catch(l){return r.errors.handleError(l,e),s.canNext=!1,s}}register(){actionAddins[this.name]=this}}new DataProcessingAction;class DataUpdateAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"dataMappingProps");this.name="データ更新",this.actionProps=[],this.dataMappingProps={},this.register()}async process(e,t,r){this.actionProps=e.actionProps,this.dataMappingProps=e.ActionValue,console.log(r);let i={canNext:!0,result:""};try{const s=await getLookupFixedFieldCodes(this.dataMappingProps.sources.app.id);this.dataMappingProps.dataMapping.createWithNull?await doUpdate(this.dataMappingProps.dataMapping.data,this.dataMappingProps.sources.app.id,r,!0,s):this.dataMappingProps.dataMapping.data.map(l=>l.isKey).find(l=>l===!0)?await doUpdate(this.dataMappingProps.dataMapping.data,this.dataMappingProps.sources.app.id,r,!1,s):await doCreate(this.dataMappingProps.dataMapping.data,this.dataMappingProps.sources.app.id,r,s)}catch(s){r.errors.handleError(s,e),i.canNext=!1}return console.log("dataMappingProps",this.dataMappingProps),i}register(){actionAddins[this.name]=this}}new DataUpdateAction;const getContextVarByPath=(n,e)=>e.split(".").reduce((t,r)=>(t||{})[r],n),client=new index_browser.KintoneRestAPIClient,getFromValue=(n,e)=>{if(n.from.objectType==="variable"){const t=n.from;return getContextVarByPath(e.variables,t.name.name)}else if(n.from.objectType==="field"){const t=n.from;return e.record[t.code].value}else return n.from.sharedText},doUpdate=async(n,e,t,r,i)=>{const s=await findUpdateField(n,e,t);if(console.log(s),s.records.length===0&&r)await doCreate(n,e,t,i);else{const l=n.filter(h=>Object.keys(h.from).length>0&&!i.includes(h.to.fields[0].code)).map(h=>{if(h.from.objectType==="variable"){const d=h.from;return{value:getContextVarByPath(t.variables,d.name.name),code:h.to.fields[0].code}}else if(h.from.objectType==="field"){const d=h.from;return{value:t.record[d.code].value,code:h.to.fields[0].code}}else return{value:h.from.sharedText,code:h.to.fields[0].code}}),u=s.records.map(h=>{const d={};for(const m of l)h[m.code]&&(d[m.code]={value:m.value});return{id:h.$id.value,record:d}});console.log(u),await client.record.updateRecords({app:e,records:u})}},makeQuery=(n,e)=>{if(n.type===FieldType.NUMBER||n.type===FieldType.RECORD_NUMBER)return`${n.code} = ${Number(e)}`;if(typeof e=="string")return`${n.code} = "${e}"`},findUpdateField=async(n,e,t)=>{const r=n.filter(i=>i.to.app&&i.to.fields&&i.to.fields.length>0&&i.isKey).map(i=>{if(i.from.objectType==="variable"){const s=i.from;return makeQuery(i.to.fields[0],getContextVarByPath(t.variables,s.name.name))}else if(i.from.objectType==="field"){const s=i.from;return makeQuery(i.to.fields[0],t.record[s.code].value)}else return makeQuery(i.to.fields[0],i.from.sharedText)}).join("&");return r.length===0?{records:[]}:await client.record.getRecords({app:e,query:r})},doCreate=async(n,e,t,r)=>{const i=l=>!l.to.fields||l.to.fields.length===0?!1:!!(l.from.objectType==="variable"&&l.from.name.name||l.from.objectType==="field"&&l.from.code||l.from.objectType==="text"&&l.from.sharedText!==null),s=n.filter(i).filter(l=>!r.includes(l.to.fields[0].code)).reduce((l,u)=>({...l,[u.to.fields[0].code]:{value:getFromValue(u,t)}}),{});s&&Object.keys(s).length>0&&(console.log(s),await client.record.addRecord({app:e,record:s}))},getLookupFixedFieldCodes=async n=>await client.app.getFormFields({app:n}).then(e=>Object.values(e.properties).filter(t=>t.lookup!==void 0).flatMap(t=>t.lookup.fieldMappings.map(r=>r.field)));class CurrentFieldGetAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="フィールドの値を取得する",this.actionProps=[],this.props={},this.register()}async process(e,t,r){this.props=e.ActionValue,this.actionProps=e.actionProps;let i={canNext:!0,result:""};try{const s=t.record;if(!(this.props.field.code in s))throw new Error(`フィールド[${this.props.field.code}]が見つかりませんでした。`);this.props.verName&&this.props.verName.name!==""&&(r.variables[this.props.verName.name]=s[this.props.field.code].value)}catch(s){r.errors.handleError(s,e),i.canNext=!1}return i}register(){actionAddins[this.name]=this}}new CurrentFieldGetAction;class RegularCheckAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="正規表現チェック",this.actionProps=[],this.props={field:{code:""},message:"",regExpression:""},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("message"in e.ActionValue)&&!("regExpression"in e.ActionValue))return i;this.props=e.ActionValue;const s=t.record,l=s[this.props.field.code].value;return new RegExp(this.props.regExpression).test(l)?s[this.props.field.code].error=null:s[this.props.field.code].error=this.props.message,i={canNext:!0,result:!0},i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}register(){actionAddins[this.name]=this}}new RegularCheckAction;class MailCheckAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="メールアドレスチェック",this.actionProps=[],this.props={field:{code:""},message:"",emailCheck:""},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("message"in e.ActionValue)&&!("emailCheck"in e.ActionValue))return i;this.props=e.ActionValue;const s=t.record;if(!(this.props.field.code in s))throw new Error(`フィールド[${this.props.field.code}]が見つかりませんでした。`);const l=s[this.props.field.code].value;return this.props.emailCheck==="厳格"?/^[a-zA-Z0-9_-¥.]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/.test(l)?(s[this.props.field.code].error=null,i.result=!0):s[this.props.field.code].error=this.props.message:this.props.emailCheck==="ゆるめ"?/^[^@]+@[^@]+$/.test(l)?(s[this.props.field.code].error=null,i.result=!0):s[this.props.field.code].error=this.props.message:i={canNext:!0,result:!0},i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}register(){actionAddins[this.name]=this}}new MailCheckAction;class StrCountCheckAciton{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="文字数チェック",this.actionProps=[],this.props={field:{code:""},message:"",maxLength:0},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("message"in e.ActionValue)&&!("strExpression"in e.ActionValue))return i;this.props=e.ActionValue;const s=t.record,l=s[this.props.field.code].value,u=this.props.maxLength;return l===void 0||l===""||(u<l.length?s[this.props.field.code].error=this.props.message:s[this.props.field.code].error=null,i={canNext:!0,result:!0}),i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}register(){actionAddins[this.name]=this}}new StrCountCheckAciton;class DatetimeGetterAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="現在日時",this.actionProps=[],this.props={verName:{name:""}},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("verName"in e.ActionValue))return i;this.props=e.ActionValue;let s=new Date;return this.props.verName&&this.props.verName.name!==""&&(r.variables[this.props.verName.name]=s.toISOString()),i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}register(){actionAddins[this.name]=this}}new DatetimeGetterAction;class InsertValueAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="値を挿入する",this.actionProps=[],this.props={field:{code:""},condition:"",value:"",show:""},this.register()}checkInputValueBlank(e,t,r,i,s){let l;if(l=t.match(/^(\s| )*$/),l!==null||t===null||t===""){if(e==="NUMBER"||e==="DATE"||e==="DATETIME"||e==="TIME"||e==="USER_SELECT"||e==="ORGANIZATION_SELECT"||e==="GROUP_SELECT"||e==="RADIO_BUTTON"||e==="DROP_DOWN"||e==="CHECK_BOX"||e==="MULTI_SELECT")throw s.record[r].error="「"+r+"」に挿入しようとした、値は空白文字です。",new Error("「"+r+"」に挿入しようとした、値は空白文字です。「値を挿入する」コンポーネントの処理を中断しました。");if(i)throw s.record[r].error="「"+r+"」フィールドは必須項目のため、空白文字は挿入できません。",new Error("「"+r+"」フィールドは必須項目のため、空白文字は挿入できません。「値を挿入する」コンポーネントの処理を中断しました。")}return!0}checkVariableValueBlank(e,t,r,i,s){let l;for(let u=0;u<t.length;u++)typeof t[u]=="string"&&(l=t[u].match(/^(\s| )*$/));if(l!=null&&l!==""&&t.length===0){if(e==="NUMBER"||e==="DATE"||e==="DATETIME"||e==="TIME"||e==="USER_SELECT"||e==="ORGANIZATION_SELECT"||e==="GROUP_SELECT"||e==="RADIO_BUTTON"||e==="DROP_DOWN"||e==="CHECK_BOX"||e==="MULTI_SELECT")throw s.record[r].error="「"+r+"」に挿入しようとした、変数の値は空白文字です。",new Error("「"+r+"」に挿入しようとした、変数の値は空白文字です。「値を挿入する」コンポーネントの処理を中断しました。");if(i)throw s.record[r].error="「"+r+"」フィールドは必須項目であり、空白・空白文字の値の変数は、挿入できません。",new Error("「"+r+"」フィールドは必須項目であり、空白・空白文字の値の変数は、挿入できません。「値を挿入する」コンポーネントの処理を中断しました。")}return!0}checkInputNumber(e,t,r){let i=Number(e);if(!isFinite(i))throw r.record[t].error="「"+t+"」フィールドに入れようとした値は、無効な日付形式です。",new Error("「"+t+"」フィールドに入れようとした値は、有効な数値ではありません。「値を挿入する」コンポーネントの処理を中断しました。");return!0}checkInputDate(e,t,r){let i=e.match(/(\d{4})-(\d{2})-(\d{2})$/),s=e.match(/(\d{4})-(\d{1})-(\d{1})$/),l=e.match(/(\d{4})-(\d{1})-(\d{2})$/),u=e.match(/(\d{4})-(\d{2})-(\d{1})$/),h=e.match(/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}).(\d{2,3})Z$/),d=e.match(/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$/),m;if(m=new Date(e),m!==void 0&&!isNaN(m.getDate())&&i===null&&l===null&&u===null&&s===null&&d===null&&h===null)throw r.record[t].error="「"+t+"」フィールドに入れようとした値は、無効な日付形式です。",new Error("「"+t+"」フィールドに入れようとした値は、無効な日付形式です。「値を挿入する」コンポーネントの処理を中断しました。");return!0}checkInputTime(e,t,r){if(e.match(/^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/)===null)throw r.record[t].error="「"+t+"」フィールドに入れようとした値は、無効な時刻形式です。",new Error("「"+t+"」フィールドに入れようとした値は、無効な時刻形式です。「値を挿入する」コンポーネントの処理を中断しました。「1~2桁 : 2桁」の値を指定してください。");return!0}changeDateFormat(e,t,r,i){let s,l;if(l=new Date(e),l!==void 0&&!isNaN(l.getDate())){if(t==="DATETIME")return s=l.toISOString(),s;let u=e.match(/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}).(\d{2,3})Z$/),h=e.match(/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$/);if(u!==null||h!==null){let m=l.toLocaleString("ja-JP",{timeZone:"Asia/Tokyo"});console.log(m);let _=m.match(/(\d{4})\/(\d{1,2})\/(\d{1,2})/);if(_!==null){let S=1,C=2,T=3;return`${_[S]}-${_[C]}-${_[T]}`}}let d=e.match(/(\d{4})-(\d{1,2})-(\d{1,2})$/);if(d!==null){let m=1,_=2,S=3;return`${d[m]}-${d[_]}-${d[S]}`}}throw i.record[r].error="「"+r+"」フィールドに入れようとした値は、無効な日付形式です。",new Error("「"+r+"」フィールドに入れようとした値は、無効な日付形式です。「値を挿入する」コンポーネントの処理を中断しました。")}checkInputOption(e,t,r,i){if(t!==void 0){let l=Object.keys(t);for(var s in l)if(l[s]===e)return!0}throw i.record[r].error="「"+r+"」には、存在しない値を挿入しようとしたため、処理を中断しました。",new Error("「"+r+"」には、存在しない値を挿入しようとしたため、処理を中断しました。「値を挿入する」コンポーネントの処理を中断しました。")}async setInputUser(e){let t=[];try{let i=(await kintone.api(kintone.api.url("/v1/users",!0),"GET",{codes:e.join(",")})).users;if(i.length!==e.length)throw new Error;for(let s in i)for(let l in e)i[s].code===e[l]&&t.push(i[s].name);if(t===void 0)throw new Error}catch{return!1}return t}async setInputOrganization(e){let t;try{const i=await kintone.api(kintone.api.url("/v1/organizations.json",!0),"GET",{codes:[e]});if(i.organizations[0].code===e&&(t=i.organizations[0].name),t===void 0)throw new Error}catch{return!1}return t}async setInputGroup(e){let t;try{const i=await kintone.api(kintone.api.url("/v1/groups.json",!0),"GET",{codes:[e]});if(i.groups[0].code===e&&(t=i.groups[0].name),t===void 0)throw new Error}catch{return!1}return t}setValueOfUserObject(e,t,r,i){let s=[];if(r==="NUMBER"||r==="DATE"||r==="DATETIME"||r==="TIME")throw new Error("「"+i+"」フィールドには、ユーザー情報を挿入できません。処理を中断しました。");if(r==="USER_SELECT")if(!Array.isArray(t))s.push(t.code);else for(let l=0;l<t.length;l++)s.push(t[l].code);else if(e.includes(".name")||e.includes(".email")||e.includes(".employeeNumber")||e.includes(".extensionNumber")||e.includes(".id")||e.includes(".isGuest")||e.includes(".timezone")||e.includes(".language")||e.includes(".mobilePhone")||e.includes(".phone")||e.includes(".url")){let l=e.split(".")[1];if(!Array.isArray(t))s.push(t[l]);else for(let u=0;u<t.length;u++)s.push(t[u][l])}else if(!Array.isArray(t))s.push(t.code);else for(let l=0;l<t.length;l++)s.push(t[l].code);if(s===void 0)throw new Error("「"+i+"」フィールドに入れようとした変数は、無効な入力形式です。");return s}async process(e,t,r){let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("value"in e.ActionValue))return i;const s=1,l=this.actionProps[s].props.modelValue.type;if(l===null)throw new Error("「値を挿入する」コンポーネントで、値を挿入するフィールドが指定されていなかったため、処理が中断されました。");if(l==="FILE"||l==="SUBTABLE"||l==="CATEGORY"||l==="STATUS"||l==="STATUS_ASSIGNEE"||l==="CREATOR"||l==="MODIFIER"||l==="__REVISION__"||l==="RECORD_NUMBER"||l==="__ID__"||l==="CALC"||l==="CREATED_TIME"||l==="UPDATED_TIME")throw new Error("「値を挿入する」コンポーネントで、選択されたフィールドは、値を挿入するコンポーネントでは非対応のフィールドのため、処理を中断しました。");this.props=e.ActionValue;let u=this.props.value;const h=this.props.field.type,d=this.props.field.required,m=this.props.field.code,_=this.props.show;let S=this.props.field.options,C,T=[],O,H;if(_==="変数"){const q=(f,Y)=>Y.split(".").reduce((U,L)=>(U||{})[L],f);if(H=Object.keys(r.variables),H.length===0)throw new Error("「"+m+"」フィールドに挿入しようとした変数は、存在しないため、処理を中断しました。");let ee;u.includes(".")?ee=u.split(".")[0]:ee=u;let B;for(let f=0;f<H.length;f++)ee===H[f]&&(B=!0);if(!B)throw new Error("「"+m+"」フィールドに挿入しようとした変数は、存在しないため、処理を中断しました。");if(ee&&(C=q(r.variables,ee)),(C===""||C===null)&&(h==="NUMBER"||h==="DATE"||h==="DATETIME"||h==="TIME"||h==="USER_SELECT"||h==="ORGANIZATION_SELECT"||h==="GROUP_SELECT"||h==="RADIO_BUTTON"||h==="DROP_DOWN"||h==="CHECK_BOX"||h==="MULTI_SELECT"))throw new Error("「"+m+"」フィールドに挿入しようとした変数は、値がnullのため、処理を中断しました。");if(typeof C=="object"){let f=[];if(C.length>0?f=Object.keys(C[0]):f=Object.keys(C),f.includes("code")&&f.includes("name")){C=this.setValueOfUserObject(u,C,h,m);for(const Y of C)T.push(Y)}}else C=r.variables[u],T[0]=C;if(T===void 0)throw new Error("「"+m+"」フィールドに入れようとした変数は、無効な入力形式です。");O=this.checkVariableValueBlank(h,T,m,d,t)}else T.push(u),O=this.checkInputValueBlank(h,u,m,d,t);let R,Z=[];if(O){if(h==="SINGLE_LINE_TEXT"||h==="MULTI_LINE_TEXT"||h==="RICH_TEXT"||h==="LINK")R=T.join(",");else if(h==="NUMBER")this.checkInputNumber(T[0],m,t)&&(R=Number(T[0]));else if(h==="DATE"||h==="DATETIME"){if(this.checkInputDate(T[0],m,t)){let q=this.changeDateFormat(T[0],h,m,t);q&&(R=q)}}else if(h==="TIME")this.checkInputTime(T[0],m,t)&&(R=T[0]);else if(h==="RADIO_BUTTON"||h==="DROP_DOWN")this.checkInputOption(T[0],S,m,t)&&(R=T[0]);else if(h==="CHECK_BOX"||h==="MULTI_SELECT")this.checkInputOption(T[0],S,m,t)&&(Z[0]=T[0]);else if(h==="USER_SELECT"){let q=await this.setInputUser(T);if(!q)throw t.record[m].error="ユーザー選択に、挿入しようとしたユーザー情報は見つかりませんでした。「値を挿入する」コンポーネントの処理を中断しました。",new Error("ユーザー選択に、挿入しようとしたユーザー情報は見つかりませんでした。「値を挿入する」コンポーネントの処理を中断しました。");for(let ee in T)Z.push({code:T[ee],name:q[ee]})}else if(h==="ORGANIZATION_SELECT"){let q=await this.setInputOrganization(u);if(q)R=[{code:u,name:q}];else throw t.record[m].error="組織選択フィールドに、挿入しようとした組織情報は見つかりませんでした。「値を挿入する」コンポーネントの処理を中断しました。",new Error("組織選択フィールドに、挿入しようとした組織情報は見つかりませんでした。「値を挿入する」コンポーネントの処理を中断しました。")}else if(h==="GROUP_SELECT"){let q=await this.setInputGroup(u);if(q)R=[{code:u,name:q}];else throw t.record[m].error="グループ選択フィールドに、挿入しようとしたグループ情報は見つかりませんでした。「値を挿入する」コンポーネントの処理を中断しました。",new Error("グループ選択フィールドに、挿入しようとしたグループ情報は見つかりませんでした。「値を挿入する」コンポーネントの処理を中断しました。")}}const V=this.getConditionResult(r);if(!t.type.includes("success"))V&&(R!==void 0?t.record[m].value=R:t.record[m].value=Z);else{async function q(B,f,Y,U,L){U!==void 0?Y.record[f].value=U:Y.record[f].value=L,B&&(U!==void 0?await ee(f,Y,U):await ee(f,Y,L))}async function ee(B,f,Y){try{var U={app:f.appId,id:f.recordId,record:{[B]:{value:Y}}};const L=await kintone.api(kintone.api.url("/k/v1/record",!0),"PUT",U)}catch{return!1}}q(V,m,t,R,Z)}return i={canNext:!0,result:!0},i}catch(s){return r.errors.handleError(s,e),i.canNext=!0,i}}getConditionResult(e){const t=this.getCondition(this.props.condition);return t?t.evaluate(t.root,e):!0}getCondition(e){try{const t=new ConditionTree;return t.fromJson(e),t.getConditions(t.root).length>0?t:null}catch{return null}}register(){actionAddins[this.name]=this}}new InsertValueAction;class GetValueAciton{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="値を取得する",this.actionProps=[],this.props={field:{code:""},verName:{name:""}},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("verName"in e.ActionValue))return i;this.props=e.ActionValue;const l=t.record[this.props.field.code].value;return this.props.verName&&this.props.verName.name!==""&&(r.variables[this.props.verName.name]=l),i={canNext:!0,result:!0},i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}register(){actionAddins[this.name]=this}}new GetValueAciton;class StringJoinAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="文字結合",this.actionProps=[],this.register(),this.props={saveField:{code:""},joinField1:{code:""},joinField2:{code:""},delimiter:""},this.register()}async process(e,t){let r={canNext:!1,result:!1};try{let i=function(C,T,O,H){var R,Z,V,q,ee,B,f,Y,U,L,z,K,G,oe,ue,de;if((((R=H.record[O])==null?void 0:R.value)===void 0||((Z=H.record[O])==null?void 0:Z.value)===null)&&(H.record[O].value=""),T==="CREATOR"||T==="MODIFIER")C=(V=H.record[O])==null?void 0:V.value.name;else if(T==="DATETIME"||T==="CREATED_TIME"||T==="UPDATED_TIME")((q=H.record[O])==null?void 0:q.value)!==void 0&&((ee=H.record[O])==null?void 0:ee.value)!==""?C=Formatter.dateFormat(new Date((B=H.record[O])==null?void 0:B.value),"yyyy-MM-dd HH:mm"):C=(f=H.record[O])==null?void 0:f.value;else if(T==="USER_SELECT"||T==="ORGANIZATION_SELECT"||T==="GROUP_SELECT"||T==="FILE"||T==="STATUS_ASSIGNEE")if(((Y=H.record[O])==null?void 0:Y.value)===void 0||((U=H.record[O])==null?void 0:U.value)==="")C=(L=H.record[O])==null?void 0:L.value;else{const le=(z=H.record[O])==null?void 0:z.value;let ve=[];for(let he=0;he<le.length;he++)ve.push(le[he].name);C=ve.join()}else if(T==="CATEGORY"||T==="CHECK_BOX"||T==="MULTI_SELECT")if(((K=H.record[O])==null?void 0:K.value)===void 0||((G=H.record[O])==null?void 0:G.value)==="")C=(oe=H.record[O])==null?void 0:oe.value;else{const le=(ue=H.record[O])==null?void 0:ue.value;let ve=[];for(let he=0;he<le.length;he++)ve.push(le[he]);C=ve.join()}else T==="STATUS"&&H.type.includes("process")?C=H.nextStatus.value:C=(de=H.record[O])==null?void 0:de.value;return C==null&&(C=""),C};if(this.actionProps=e.actionProps,!("saveField"in e.ActionValue)&&!("joinField1"in e.ActionValue)&&!("joinField2"in e.ActionValue))return r;this.props=e.ActionValue;const s=t.record,l=this.props.joinField1.type,u=this.props.joinField2.type,h=this.props.saveField.type;if(!(h==="SINGLE_LINE_TEXT"||h==="MULTI_LINE_TEXT"||h==="RICH_TEXT"))return t.error="[エラーメッセージ]:結合保存先対応不可。結合しません",t.type.includes("success")&&window.alert("[windows alert]:"+t.error),r={canNext:!1,result:!1},r;let d="";d=i(d,l,this.props.joinField1.code,t);let m="";m=i(m,u,this.props.joinField2.code,t);const _=this.props.delimiter;let S="";if(d===""&&m===""?S="":d===""&&m!==""?S=m:m===""&&d!==""?S=d:d!==""&&m!==""&&(S=`${d}${_}${m}`),!t.type.includes("success"))s[this.props.saveField.code].value=S;else{async function C(T,O){return new Promise((H,R)=>{var Z={app:O.appId,id:O.recordId,record:{[T]:{value:S}}};kintone.api(kintone.api.url("/k/v1/record",!0),"PUT",Z,V=>{H(V)},V=>{R(V)})})}s[this.props.saveField.code].value=S,await C(this.props.saveField.code,t),t.type.includes("index")&&window.alert("文字結合には、一覧画面更新成功後自動リロードしません。必要に応じて手動リロードください。")}return r={canNext:!0,result:!0},r}catch(i){return t.type.includes("success")&&window.alert("[windows alert]:処理中異常が発生しました。結合しません。システム担当者へお問合せください。errorメッセージ:"+i),t.error="[エラーメッセージ]:処理中異常が発生しました。結合しません。システム担当者へお問合せください。errorメッセージ:"+i,{canNext:!1,result:!1}}}register(){actionAddins[this.name]=this}}new StringJoinAction;class FullWidthAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="全角チェック",this.actionProps=[],this.props={field:{code:""}},this.register()}async process(e,t,r){var s;let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue))return i;this.props=e.ActionValue;const l=t.record;if(!(this.props.field.code in l))throw new Error(`フィールド「${this.props.field.code}」が見つかりません。`);const u=(s=l[this.props.field.code])==null?void 0:s.value;return(u===void 0||u==="")&&(l[this.props.field.code].error=null),!this.containsFullWidthChars(u)&&!(u===void 0||u==="")?(l[this.props.field.code].error="半角が含まれています",i.canNext=!1):l[this.props.field.code].error=null,i={canNext:!0,result:!0},i}catch(l){return r.errors.handleError(l,e),i.canNext=!1,i}}containsFullWidthChars(e){const t="^[^-~。-゚]+$";return new RegExp(t).test(e)}register(){actionAddins[this.name]=this}}new FullWidthAction;class HalfWidthAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="半角チェック",this.actionProps=[],this.props={field:{code:""}},this.register()}async process(e,t,r){var s;let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue))return i;this.props=e.ActionValue;const l=t.record;if(!(this.props.field.code in l))throw new Error(`フィールド「${this.props.field.code}」が見つかりません。`);const u=(s=l[this.props.field.code])==null?void 0:s.value;return(u===void 0||u==="")&&(l[this.props.field.code].error=null),this.containsHalfWidthChars(u)?l[this.props.field.code].error=null:(l[this.props.field.code].error="全角が含まれています",i.canNext=!1),i={canNext:!0,result:!0},i}catch(l){return r.errors.handleError(l,e),i.canNext=!1,i}}containsHalfWidthChars(e){const t="^[-~。-゚]+$";return new RegExp(t).test(e)}register(){actionAddins[this.name]=this}}new HalfWidthAction;const fullWidthToHalfWidthMap={ガ:"ガ",ギ:"ギ",グ:"グ",ゲ:"ゲ",ゴ:"ゴ",ザ:"ザ",ジ:"ジ",ズ:"ズ",ゼ:"ゼ",ゾ:"ゾ",ダ:"ダ",ヂ:"ヂ",ヅ:"ヅ",デ:"デ",ド:"ド",バ:"バ",ビ:"ビ",ブ:"ブ",ベ:"ベ",ボ:"ボ",パ:"パ",ピ:"ピ",プ:"プ",ペ:"ペ",ポ:"ポ",ヴ:"ヴ",ヷ:"ヷ",ヺ:"ヺ",ア:"ア",イ:"イ",ウ:"ウ",エ:"エ",オ:"オ",カ:"カ",キ:"キ",ク:"ク",ケ:"ケ",コ:"コ",サ:"サ",シ:"シ",ス:"ス",セ:"セ",ソ:"ソ",タ:"タ",チ:"チ",ツ:"ツ",テ:"テ",ト:"ト",ナ:"ナ",ニ:"ニ",ヌ:"ヌ",ネ:"ネ",ノ:"ノ",ハ:"ハ",ヒ:"ヒ",フ:"フ",ヘ:"ヘ",ホ:"ホ",マ:"マ",ミ:"ミ",ム:"ム",メ:"メ",モ:"モ",ヤ:"ヤ",ユ:"ユ",ヨ:"ヨ",ラ:"ラ",リ:"リ",ル:"ル",レ:"レ",ロ:"ロ",ワ:"ワ",ヲ:"ヲ",ン:"ン",ァ:"ァ",ィ:"ィ",ゥ:"ゥ",ェ:"ェ",ォ:"ォ",ッ:"ッ",ャ:"ャ",ュ:"ュ",ョ:"ョ","。":"。","、":"、",ー:"ー","「":"「","」":"」","・":"・"," ":" "},halfWidthToFullWidthMap={ガ:"ガ",ギ:"ギ",グ:"グ",ゲ:"ゲ",ゴ:"ゴ",ザ:"ザ",ジ:"ジ",ズ:"ズ",ゼ:"ゼ",ゾ:"ゾ",ダ:"ダ",ヂ:"ヂ",ヅ:"ヅ",デ:"デ",ド:"ド",バ:"バ",ビ:"ビ",ブ:"ブ",ベ:"ベ",ボ:"ボ",パ:"パ",ピ:"ピ",プ:"プ",ペ:"ペ",ポ:"ポ",ヴ:"ヴ",ヷ:"ヷ",ヺ:"ヺ",ア:"ア",イ:"イ",ウ:"ウ",エ:"エ",オ:"オ",カ:"カ",キ:"キ",ク:"ク",ケ:"ケ",コ:"コ",サ:"サ",シ:"シ",ス:"ス",セ:"セ",ソ:"ソ",タ:"タ",チ:"チ",ツ:"ツ",テ:"テ",ト:"ト",ナ:"ナ",ニ:"ニ",ヌ:"ヌ",ネ:"ネ",ノ:"ノ",ハ:"ハ",ヒ:"ヒ",フ:"フ",ヘ:"ヘ",ホ:"ホ",マ:"マ",ミ:"ミ",ム:"ム",メ:"メ",モ:"モ",ヤ:"ヤ",ユ:"ユ",ヨ:"ヨ",ラ:"ラ",リ:"リ",ル:"ル",レ:"レ",ロ:"ロ",ワ:"ワ",ヲ:"ヲ",ン:"ン",ァ:"ァ",ィ:"ィ",ゥ:"ゥ",ェ:"ェ",ォ:"ォ",ッ:"ッ",ャ:"ャ",ュ:"ュ",ョ:"ョ","。":"。","、":"、",ー:"ー","「":"「","」":"」","・":"・"," ":" "};class FullHalfConversionAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="全角/半角変換",this.actionProps=[],this.props={field:{code:""},conversion:"",verName:{name:""}},this.register()}async process(e,t,r){var s;let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("conversion"in e.ActionValue)&&!("verName"in e.ActionValue))return i;this.props=e.ActionValue;const l=t.record;if(!(this.props.field.code in l))throw new Error(`フィールド「${this.props.field.code}」が見つかりません。`);const u=(s=l[this.props.field.code])==null?void 0:s.value;return(u===void 0||u==="")&&(l[this.props.field.code].error=null),this.props.conversion==="全角"&&(r.variables[this.props.verName.name]=this.toFullWidth(u)),this.props.conversion==="半角"?r.variables[this.props.verName.name]=this.toHalfWidth(u):l[this.props.field.code].error=null,i={canNext:!0,result:!0},i}catch(l){return r.errors.handleError(l,e),i.canNext=!1,i}}toFullWidth(e){let t=e.replace(/[A-Za-z0-9!-~]/g,function(r){return String.fromCharCode(r.charCodeAt(0)+65248)});return t=t.replace(/[\uFF61-\uFF9F ]/g,function(r){return halfWidthToFullWidthMap[r]||r}),t}toHalfWidth(e){let t=e.replace(/[!-~]/g,function(r){return String.fromCharCode(r.charCodeAt(0)-65248)});return t=t.replace(/[ガ-ヴァ-ン。、ー「」・ ]/g,function(r){return fullWidthToHalfWidthMap[r]||r}),t}register(){actionAddins[this.name]=this}}new FullHalfConversionAction;class LoginUserGetterAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="ログインユーザー取得",this.actionProps=[],this.register(),this.props={verName:{name:""}},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{return this.actionProps=e.actionProps,"verName"in e.ActionValue&&(this.props=e.ActionValue,this.props.verName&&this.props.verName.name!==""&&(r.variables[this.props.verName.name]=kintone.getLoginUser()),i={canNext:!0,result:!0}),i}catch(s){return r.errors.handleError(s,e),{canNext:!1,result:!1}}}register(){actionAddins[this.name]=this}}new LoginUserGetterAction;const autoLookup="";var modal={exports:{}},baseComponent={exports:{}},data={exports:{}};/*!
|
||
* Bootstrap data.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/var hasRequiredData;function requireData(){return hasRequiredData||(hasRequiredData=1,function(n,e){(function(t,r){n.exports=r()})(commonjsGlobal,function(){const t=new Map;return{set(i,s,l){t.has(i)||t.set(i,new Map);const u=t.get(i);if(!u.has(s)&&u.size!==0){console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(u.keys())[0]}.`);return}u.set(s,l)},get(i,s){return t.has(i)&&t.get(i).get(s)||null},remove(i,s){if(!t.has(i))return;const l=t.get(i);l.delete(s),l.size===0&&t.delete(i)}}})}(data)),data.exports}var eventHandler={exports:{}},util={exports:{}};/*!
|
||
* Bootstrap index.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/var hasRequiredUtil;function requireUtil(){return hasRequiredUtil||(hasRequiredUtil=1,function(n,e){(function(t,r){r(e)})(commonjsGlobal,function(t){const s="transitionend",l=L=>(L&&window.CSS&&window.CSS.escape&&(L=L.replace(/#([^\s"#']+)/g,(z,K)=>`#${CSS.escape(K)}`)),L),u=L=>L==null?`${L}`:Object.prototype.toString.call(L).match(/\s([a-z]+)/i)[1].toLowerCase(),h=L=>{do L+=Math.floor(Math.random()*1e6);while(document.getElementById(L));return L},d=L=>{if(!L)return 0;let{transitionDuration:z,transitionDelay:K}=window.getComputedStyle(L);const G=Number.parseFloat(z),oe=Number.parseFloat(K);return!G&&!oe?0:(z=z.split(",")[0],K=K.split(",")[0],(Number.parseFloat(z)+Number.parseFloat(K))*1e3)},m=L=>{L.dispatchEvent(new Event(s))},_=L=>!L||typeof L!="object"?!1:(typeof L.jquery<"u"&&(L=L[0]),typeof L.nodeType<"u"),S=L=>_(L)?L.jquery?L[0]:L:typeof L=="string"&&L.length>0?document.querySelector(l(L)):null,C=L=>{if(!_(L)||L.getClientRects().length===0)return!1;const z=getComputedStyle(L).getPropertyValue("visibility")==="visible",K=L.closest("details:not([open])");if(!K)return z;if(K!==L){const G=L.closest("summary");if(G&&G.parentNode!==K||G===null)return!1}return z},T=L=>!L||L.nodeType!==Node.ELEMENT_NODE||L.classList.contains("disabled")?!0:typeof L.disabled<"u"?L.disabled:L.hasAttribute("disabled")&&L.getAttribute("disabled")!=="false",O=L=>{if(!document.documentElement.attachShadow)return null;if(typeof L.getRootNode=="function"){const z=L.getRootNode();return z instanceof ShadowRoot?z:null}return L instanceof ShadowRoot?L:L.parentNode?O(L.parentNode):null},H=()=>{},R=L=>{L.offsetHeight},Z=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,V=[],q=L=>{document.readyState==="loading"?(V.length||document.addEventListener("DOMContentLoaded",()=>{for(const z of V)z()}),V.push(L)):L()},ee=()=>document.documentElement.dir==="rtl",B=L=>{q(()=>{const z=Z();if(z){const K=L.NAME,G=z.fn[K];z.fn[K]=L.jQueryInterface,z.fn[K].Constructor=L,z.fn[K].noConflict=()=>(z.fn[K]=G,L.jQueryInterface)}})},f=(L,z=[],K=L)=>typeof L=="function"?L(...z):K,Y=(L,z,K=!0)=>{if(!K){f(L);return}const G=5,oe=d(z)+G;let ue=!1;const de=({target:le})=>{le===z&&(ue=!0,z.removeEventListener(s,de),f(L))};z.addEventListener(s,de),setTimeout(()=>{ue||m(z)},oe)},U=(L,z,K,G)=>{const oe=L.length;let ue=L.indexOf(z);return ue===-1?!K&&G?L[oe-1]:L[0]:(ue+=K?1:-1,G&&(ue=(ue+oe)%oe),L[Math.max(0,Math.min(ue,oe-1))])};t.defineJQueryPlugin=B,t.execute=f,t.executeAfterTransition=Y,t.findShadowRoot=O,t.getElement=S,t.getNextActiveElement=U,t.getTransitionDurationFromElement=d,t.getUID=h,t.getjQuery=Z,t.isDisabled=T,t.isElement=_,t.isRTL=ee,t.isVisible=C,t.noop=H,t.onDOMContentLoaded=q,t.parseSelector=l,t.reflow=R,t.toType=u,t.triggerTransitionEnd=m,Object.defineProperty(t,Symbol.toStringTag,{value:"Module"})})}(util,util.exports)),util.exports}/*!
|
||
* Bootstrap event-handler.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/var hasRequiredEventHandler;function requireEventHandler(){return hasRequiredEventHandler||(hasRequiredEventHandler=1,function(n,e){(function(t,r){n.exports=r(requireUtil())})(commonjsGlobal,function(t){const r=/[^.]*(?=\..*)\.|.*/,i=/\..*/,s=/::\d+$/,l={};let u=1;const h={mouseenter:"mouseover",mouseleave:"mouseout"},d=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function m(B,f){return f&&`${f}::${u++}`||B.uidEvent||u++}function _(B){const f=m(B);return B.uidEvent=f,l[f]=l[f]||{},l[f]}function S(B,f){return function Y(U){return ee(U,{delegateTarget:B}),Y.oneOff&&q.off(B,U.type,f),f.apply(B,[U])}}function C(B,f,Y){return function U(L){const z=B.querySelectorAll(f);for(let{target:K}=L;K&&K!==this;K=K.parentNode)for(const G of z)if(G===K)return ee(L,{delegateTarget:K}),U.oneOff&&q.off(B,L.type,f,Y),Y.apply(K,[L])}}function T(B,f,Y=null){return Object.values(B).find(U=>U.callable===f&&U.delegationSelector===Y)}function O(B,f,Y){const U=typeof f=="string",L=U?Y:f||Y;let z=V(B);return d.has(z)||(z=B),[U,L,z]}function H(B,f,Y,U,L){if(typeof f!="string"||!B)return;let[z,K,G]=O(f,Y,U);f in h&&(K=(De=>function(fe){if(!fe.relatedTarget||fe.relatedTarget!==fe.delegateTarget&&!fe.delegateTarget.contains(fe.relatedTarget))return De.call(this,fe)})(K));const oe=_(B),ue=oe[G]||(oe[G]={}),de=T(ue,K,z?Y:null);if(de){de.oneOff=de.oneOff&&L;return}const le=m(K,f.replace(r,"")),ve=z?C(B,Y,K):S(B,K);ve.delegationSelector=z?Y:null,ve.callable=K,ve.oneOff=L,ve.uidEvent=le,ue[le]=ve,B.addEventListener(G,ve,z)}function R(B,f,Y,U,L){const z=T(f[Y],U,L);z&&(B.removeEventListener(Y,z,!!L),delete f[Y][z.uidEvent])}function Z(B,f,Y,U){const L=f[Y]||{};for(const[z,K]of Object.entries(L))z.includes(U)&&R(B,f,Y,K.callable,K.delegationSelector)}function V(B){return B=B.replace(i,""),h[B]||B}const q={on(B,f,Y,U){H(B,f,Y,U,!1)},one(B,f,Y,U){H(B,f,Y,U,!0)},off(B,f,Y,U){if(typeof f!="string"||!B)return;const[L,z,K]=O(f,Y,U),G=K!==f,oe=_(B),ue=oe[K]||{},de=f.startsWith(".");if(typeof z<"u"){if(!Object.keys(ue).length)return;R(B,oe,K,z,L?Y:null);return}if(de)for(const le of Object.keys(oe))Z(B,oe,le,f.slice(1));for(const[le,ve]of Object.entries(ue)){const he=le.replace(s,"");(!G||f.includes(he))&&R(B,oe,K,ve.callable,ve.delegationSelector)}},trigger(B,f,Y){if(typeof f!="string"||!B)return null;const U=t.getjQuery(),L=V(f),z=f!==L;let K=null,G=!0,oe=!0,ue=!1;z&&U&&(K=U.Event(f,Y),U(B).trigger(K),G=!K.isPropagationStopped(),oe=!K.isImmediatePropagationStopped(),ue=K.isDefaultPrevented());const de=ee(new Event(f,{bubbles:G,cancelable:!0}),Y);return ue&&de.preventDefault(),oe&&B.dispatchEvent(de),de.defaultPrevented&&K&&K.preventDefault(),de}};function ee(B,f={}){for(const[Y,U]of Object.entries(f))try{B[Y]=U}catch{Object.defineProperty(B,Y,{configurable:!0,get(){return U}})}return B}return q})}(eventHandler)),eventHandler.exports}var config={exports:{}},manipulator={exports:{}};/*!
|
||
* Bootstrap manipulator.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/var hasRequiredManipulator;function requireManipulator(){return hasRequiredManipulator||(hasRequiredManipulator=1,function(n,e){(function(t,r){n.exports=r()})(commonjsGlobal,function(){function t(s){if(s==="true")return!0;if(s==="false")return!1;if(s===Number(s).toString())return Number(s);if(s===""||s==="null")return null;if(typeof s!="string")return s;try{return JSON.parse(decodeURIComponent(s))}catch{return s}}function r(s){return s.replace(/[A-Z]/g,l=>`-${l.toLowerCase()}`)}return{setDataAttribute(s,l,u){s.setAttribute(`data-bs-${r(l)}`,u)},removeDataAttribute(s,l){s.removeAttribute(`data-bs-${r(l)}`)},getDataAttributes(s){if(!s)return{};const l={},u=Object.keys(s.dataset).filter(h=>h.startsWith("bs")&&!h.startsWith("bsConfig"));for(const h of u){let d=h.replace(/^bs/,"");d=d.charAt(0).toLowerCase()+d.slice(1,d.length),l[d]=t(s.dataset[h])}return l},getDataAttribute(s,l){return t(s.getAttribute(`data-bs-${r(l)}`))}}})}(manipulator)),manipulator.exports}/*!
|
||
* Bootstrap config.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/var hasRequiredConfig;function requireConfig(){return hasRequiredConfig||(hasRequiredConfig=1,function(n,e){(function(t,r){n.exports=r(requireManipulator(),requireUtil())})(commonjsGlobal,function(t,r){class i{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(l){return l=this._mergeConfigObj(l),l=this._configAfterMerge(l),this._typeCheckConfig(l),l}_configAfterMerge(l){return l}_mergeConfigObj(l,u){const h=r.isElement(u)?t.getDataAttribute(u,"config"):{};return{...this.constructor.Default,...typeof h=="object"?h:{},...r.isElement(u)?t.getDataAttributes(u):{},...typeof l=="object"?l:{}}}_typeCheckConfig(l,u=this.constructor.DefaultType){for(const[h,d]of Object.entries(u)){const m=l[h],_=r.isElement(m)?"element":r.toType(m);if(!new RegExp(d).test(_))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${h}" provided type "${_}" but expected type "${d}".`)}}}return i})}(config)),config.exports}/*!
|
||
* Bootstrap base-component.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/var hasRequiredBaseComponent;function requireBaseComponent(){return hasRequiredBaseComponent||(hasRequiredBaseComponent=1,function(n,e){(function(t,r){n.exports=r(requireData(),requireEventHandler(),requireConfig(),requireUtil())})(commonjsGlobal,function(t,r,i,s){const l="5.3.3";class u extends i{constructor(d,m){super(),d=s.getElement(d),d&&(this._element=d,this._config=this._getConfig(m),t.set(this._element,this.constructor.DATA_KEY,this))}dispose(){t.remove(this._element,this.constructor.DATA_KEY),r.off(this._element,this.constructor.EVENT_KEY);for(const d of Object.getOwnPropertyNames(this))this[d]=null}_queueCallback(d,m,_=!0){s.executeAfterTransition(d,m,_)}_getConfig(d){return d=this._mergeConfigObj(d,this._element),d=this._configAfterMerge(d),this._typeCheckConfig(d),d}static getInstance(d){return t.get(s.getElement(d),this.DATA_KEY)}static getOrCreateInstance(d,m={}){return this.getInstance(d)||new this(d,typeof m=="object"?m:null)}static get VERSION(){return l}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(d){return`${d}${this.EVENT_KEY}`}}return u})}(baseComponent)),baseComponent.exports}var selectorEngine={exports:{}};/*!
|
||
* Bootstrap selector-engine.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/var hasRequiredSelectorEngine;function requireSelectorEngine(){return hasRequiredSelectorEngine||(hasRequiredSelectorEngine=1,function(n,e){(function(t,r){n.exports=r(requireUtil())})(commonjsGlobal,function(t){const r=s=>{let l=s.getAttribute("data-bs-target");if(!l||l==="#"){let u=s.getAttribute("href");if(!u||!u.includes("#")&&!u.startsWith("."))return null;u.includes("#")&&!u.startsWith("#")&&(u=`#${u.split("#")[1]}`),l=u&&u!=="#"?u.trim():null}return l?l.split(",").map(u=>t.parseSelector(u)).join(","):null},i={find(s,l=document.documentElement){return[].concat(...Element.prototype.querySelectorAll.call(l,s))},findOne(s,l=document.documentElement){return Element.prototype.querySelector.call(l,s)},children(s,l){return[].concat(...s.children).filter(u=>u.matches(l))},parents(s,l){const u=[];let h=s.parentNode.closest(l);for(;h;)u.push(h),h=h.parentNode.closest(l);return u},prev(s,l){let u=s.previousElementSibling;for(;u;){if(u.matches(l))return[u];u=u.previousElementSibling}return[]},next(s,l){let u=s.nextElementSibling;for(;u;){if(u.matches(l))return[u];u=u.nextElementSibling}return[]},focusableChildren(s){const l=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(u=>`${u}:not([tabindex^="-"])`).join(",");return this.find(l,s).filter(u=>!t.isDisabled(u)&&t.isVisible(u))},getSelectorFromElement(s){const l=r(s);return l&&i.findOne(l)?l:null},getElementFromSelector(s){const l=r(s);return l?i.findOne(l):null},getMultipleElementsFromSelector(s){const l=r(s);return l?i.find(l):[]}};return i})}(selectorEngine)),selectorEngine.exports}var backdrop={exports:{}};/*!
|
||
* Bootstrap backdrop.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/var hasRequiredBackdrop;function requireBackdrop(){return hasRequiredBackdrop||(hasRequiredBackdrop=1,function(n,e){(function(t,r){n.exports=r(requireEventHandler(),requireConfig(),requireUtil())})(commonjsGlobal,function(t,r,i){const s="backdrop",l="fade",u="show",h=`mousedown.bs.${s}`,d={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},m={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class _ extends r{constructor(C){super(),this._config=this._getConfig(C),this._isAppended=!1,this._element=null}static get Default(){return d}static get DefaultType(){return m}static get NAME(){return s}show(C){if(!this._config.isVisible){i.execute(C);return}this._append();const T=this._getElement();this._config.isAnimated&&i.reflow(T),T.classList.add(u),this._emulateAnimation(()=>{i.execute(C)})}hide(C){if(!this._config.isVisible){i.execute(C);return}this._getElement().classList.remove(u),this._emulateAnimation(()=>{this.dispose(),i.execute(C)})}dispose(){this._isAppended&&(t.off(this._element,h),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const C=document.createElement("div");C.className=this._config.className,this._config.isAnimated&&C.classList.add(l),this._element=C}return this._element}_configAfterMerge(C){return C.rootElement=i.getElement(C.rootElement),C}_append(){if(this._isAppended)return;const C=this._getElement();this._config.rootElement.append(C),t.on(C,h,()=>{i.execute(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(C){i.executeAfterTransition(C,this._getElement(),this._config.isAnimated)}}return _})}(backdrop)),backdrop.exports}var componentFunctions={exports:{}};/*!
|
||
* Bootstrap component-functions.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/var hasRequiredComponentFunctions;function requireComponentFunctions(){return hasRequiredComponentFunctions||(hasRequiredComponentFunctions=1,function(n,e){(function(t,r){r(e,requireEventHandler(),requireSelectorEngine(),requireUtil())})(commonjsGlobal,function(t,r,i,s){const l=(u,h="hide")=>{const d=`click.dismiss${u.EVENT_KEY}`,m=u.NAME;r.on(document,d,`[data-bs-dismiss="${m}"]`,function(_){if(["A","AREA"].includes(this.tagName)&&_.preventDefault(),s.isDisabled(this))return;const S=i.getElementFromSelector(this)||this.closest(`.${m}`);u.getOrCreateInstance(S)[h]()})};t.enableDismissTrigger=l,Object.defineProperty(t,Symbol.toStringTag,{value:"Module"})})}(componentFunctions,componentFunctions.exports)),componentFunctions.exports}var focustrap={exports:{}};/*!
|
||
* Bootstrap focustrap.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/var hasRequiredFocustrap;function requireFocustrap(){return hasRequiredFocustrap||(hasRequiredFocustrap=1,function(n,e){(function(t,r){n.exports=r(requireEventHandler(),requireSelectorEngine(),requireConfig())})(commonjsGlobal,function(t,r,i){const s="focustrap",u=".bs.focustrap",h=`focusin${u}`,d=`keydown.tab${u}`,m="Tab",_="forward",S="backward",C={autofocus:!0,trapElement:null},T={autofocus:"boolean",trapElement:"element"};class O extends i{constructor(R){super(),this._config=this._getConfig(R),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return C}static get DefaultType(){return T}static get NAME(){return s}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),t.off(document,u),t.on(document,h,R=>this._handleFocusin(R)),t.on(document,d,R=>this._handleKeydown(R)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,t.off(document,u))}_handleFocusin(R){const{trapElement:Z}=this._config;if(R.target===document||R.target===Z||Z.contains(R.target))return;const V=r.focusableChildren(Z);V.length===0?Z.focus():this._lastTabNavDirection===S?V[V.length-1].focus():V[0].focus()}_handleKeydown(R){R.key===m&&(this._lastTabNavDirection=R.shiftKey?S:_)}}return O})}(focustrap)),focustrap.exports}var scrollbar={exports:{}};/*!
|
||
* Bootstrap scrollbar.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/var hasRequiredScrollbar;function requireScrollbar(){return hasRequiredScrollbar||(hasRequiredScrollbar=1,function(n,e){(function(t,r){n.exports=r(requireManipulator(),requireSelectorEngine(),requireUtil())})(commonjsGlobal,function(t,r,i){const s=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",l=".sticky-top",u="padding-right",h="margin-right";class d{constructor(){this._element=document.body}getWidth(){const _=document.documentElement.clientWidth;return Math.abs(window.innerWidth-_)}hide(){const _=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,u,S=>S+_),this._setElementAttributes(s,u,S=>S+_),this._setElementAttributes(l,h,S=>S-_)}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,u),this._resetElementAttributes(s,u),this._resetElementAttributes(l,h)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(_,S,C){const T=this.getWidth(),O=H=>{if(H!==this._element&&window.innerWidth>H.clientWidth+T)return;this._saveInitialAttribute(H,S);const R=window.getComputedStyle(H).getPropertyValue(S);H.style.setProperty(S,`${C(Number.parseFloat(R))}px`)};this._applyManipulationCallback(_,O)}_saveInitialAttribute(_,S){const C=_.style.getPropertyValue(S);C&&t.setDataAttribute(_,S,C)}_resetElementAttributes(_,S){const C=T=>{const O=t.getDataAttribute(T,S);if(O===null){T.style.removeProperty(S);return}t.removeDataAttribute(T,S),T.style.setProperty(S,O)};this._applyManipulationCallback(_,C)}_applyManipulationCallback(_,S){if(i.isElement(_)){S(_);return}for(const C of r.find(_,this._element))S(C)}}return d})}(scrollbar)),scrollbar.exports}/*!
|
||
* Bootstrap modal.js v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/(function(n,e){(function(t,r){n.exports=r(requireBaseComponent(),requireEventHandler(),requireSelectorEngine(),requireBackdrop(),requireComponentFunctions(),requireFocustrap(),requireUtil(),requireScrollbar())})(commonjsGlobal,function(t,r,i,s,l,u,h,d){const m="modal",S=".bs.modal",C=".data-api",T="Escape",O=`hide${S}`,H=`hidePrevented${S}`,R=`hidden${S}`,Z=`show${S}`,V=`shown${S}`,q=`resize${S}`,ee=`click.dismiss${S}`,B=`mousedown.dismiss${S}`,f=`keydown.dismiss${S}`,Y=`click${S}${C}`,U="modal-open",L="fade",z="show",K="modal-static",G=".modal.show",oe=".modal-dialog",ue=".modal-body",de='[data-bs-toggle="modal"]',le={backdrop:!0,focus:!0,keyboard:!0},ve={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class he extends t{constructor(fe,be){super(fe,be),this._dialog=i.findOne(oe,this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new d,this._addEventListeners()}static get Default(){return le}static get DefaultType(){return ve}static get NAME(){return m}toggle(fe){return this._isShown?this.hide():this.show(fe)}show(fe){this._isShown||this._isTransitioning||r.trigger(this._element,Z,{relatedTarget:fe}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(U),this._adjustDialog(),this._backdrop.show(()=>this._showElement(fe)))}hide(){!this._isShown||this._isTransitioning||r.trigger(this._element,O).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(z),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated()))}dispose(){r.off(window,S),r.off(this._dialog,S),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new s({isVisible:!!this._config.backdrop,isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new u({trapElement:this._element})}_showElement(fe){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const be=i.findOne(ue,this._dialog);be&&(be.scrollTop=0),h.reflow(this._element),this._element.classList.add(z);const we=()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,r.trigger(this._element,V,{relatedTarget:fe})};this._queueCallback(we,this._dialog,this._isAnimated())}_addEventListeners(){r.on(this._element,f,fe=>{if(fe.key===T){if(this._config.keyboard){this.hide();return}this._triggerBackdropTransition()}}),r.on(window,q,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),r.on(this._element,B,fe=>{r.one(this._element,ee,be=>{if(!(this._element!==fe.target||this._element!==be.target)){if(this._config.backdrop==="static"){this._triggerBackdropTransition();return}this._config.backdrop&&this.hide()}})})}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(U),this._resetAdjustments(),this._scrollBar.reset(),r.trigger(this._element,R)})}_isAnimated(){return this._element.classList.contains(L)}_triggerBackdropTransition(){if(r.trigger(this._element,H).defaultPrevented)return;const be=this._element.scrollHeight>document.documentElement.clientHeight,we=this._element.style.overflowY;we==="hidden"||this._element.classList.contains(K)||(be||(this._element.style.overflowY="hidden"),this._element.classList.add(K),this._queueCallback(()=>{this._element.classList.remove(K),this._queueCallback(()=>{this._element.style.overflowY=we},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const fe=this._element.scrollHeight>document.documentElement.clientHeight,be=this._scrollBar.getWidth(),we=be>0;if(we&&!fe){const Ne=h.isRTL()?"paddingLeft":"paddingRight";this._element.style[Ne]=`${be}px`}if(!we&&fe){const Ne=h.isRTL()?"paddingRight":"paddingLeft";this._element.style[Ne]=`${be}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(fe,be){return this.each(function(){const we=he.getOrCreateInstance(this,fe);if(typeof fe=="string"){if(typeof we[fe]>"u")throw new TypeError(`No method named "${fe}"`);we[fe](be)}})}}return r.on(document,Y,de,function(De){const fe=i.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&De.preventDefault(),r.one(fe,Z,Ne=>{Ne.defaultPrevented||r.one(fe,R,()=>{h.isVisible(this)&&this.focus()})});const be=i.findOne(G);be&&he.getInstance(be).hide(),he.getOrCreateInstance(fe).toggle(this)}),l.enableDismissTrigger(he),h.defineJQueryPlugin(he),he})})(modal);var top="top",bottom="bottom",right="right",left="left",auto="auto",basePlacements=[top,bottom,right,left],start="start",end="end",clippingParents="clippingParents",viewport="viewport",popper="popper",reference="reference",variationPlacements=basePlacements.reduce(function(n,e){return n.concat([e+"-"+start,e+"-"+end])},[]),placements=[].concat(basePlacements,[auto]).reduce(function(n,e){return n.concat([e,e+"-"+start,e+"-"+end])},[]),beforeRead="beforeRead",read="read",afterRead="afterRead",beforeMain="beforeMain",main="main",afterMain="afterMain",beforeWrite="beforeWrite",write="write",afterWrite="afterWrite",modifierPhases=[beforeRead,read,afterRead,beforeMain,main,afterMain,beforeWrite,write,afterWrite];function getNodeName(n){return n?(n.nodeName||"").toLowerCase():null}function getWindow(n){if(n==null)return window;if(n.toString()!=="[object Window]"){var e=n.ownerDocument;return e&&e.defaultView||window}return n}function isElement$1(n){var e=getWindow(n).Element;return n instanceof e||n instanceof Element}function isHTMLElement(n){var e=getWindow(n).HTMLElement;return n instanceof e||n instanceof HTMLElement}function isShadowRoot(n){if(typeof ShadowRoot>"u")return!1;var e=getWindow(n).ShadowRoot;return n instanceof e||n instanceof ShadowRoot}function applyStyles(n){var e=n.state;Object.keys(e.elements).forEach(function(t){var r=e.styles[t]||{},i=e.attributes[t]||{},s=e.elements[t];!isHTMLElement(s)||!getNodeName(s)||(Object.assign(s.style,r),Object.keys(i).forEach(function(l){var u=i[l];u===!1?s.removeAttribute(l):s.setAttribute(l,u===!0?"":u)}))})}function effect$2(n){var e=n.state,t={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,t.popper),e.styles=t,e.elements.arrow&&Object.assign(e.elements.arrow.style,t.arrow),function(){Object.keys(e.elements).forEach(function(r){var i=e.elements[r],s=e.attributes[r]||{},l=Object.keys(e.styles.hasOwnProperty(r)?e.styles[r]:t[r]),u=l.reduce(function(h,d){return h[d]="",h},{});!isHTMLElement(i)||!getNodeName(i)||(Object.assign(i.style,u),Object.keys(s).forEach(function(h){i.removeAttribute(h)}))})}}const applyStyles$1={name:"applyStyles",enabled:!0,phase:"write",fn:applyStyles,effect:effect$2,requires:["computeStyles"]};function getBasePlacement(n){return n.split("-")[0]}var max=Math.max,min=Math.min,round=Math.round;function getUAString(){var n=navigator.userAgentData;return n!=null&&n.brands&&Array.isArray(n.brands)?n.brands.map(function(e){return e.brand+"/"+e.version}).join(" "):navigator.userAgent}function isLayoutViewport(){return!/^((?!chrome|android).)*safari/i.test(getUAString())}function getBoundingClientRect(n,e,t){e===void 0&&(e=!1),t===void 0&&(t=!1);var r=n.getBoundingClientRect(),i=1,s=1;e&&isHTMLElement(n)&&(i=n.offsetWidth>0&&round(r.width)/n.offsetWidth||1,s=n.offsetHeight>0&&round(r.height)/n.offsetHeight||1);var l=isElement$1(n)?getWindow(n):window,u=l.visualViewport,h=!isLayoutViewport()&&t,d=(r.left+(h&&u?u.offsetLeft:0))/i,m=(r.top+(h&&u?u.offsetTop:0))/s,_=r.width/i,S=r.height/s;return{width:_,height:S,top:m,right:d+_,bottom:m+S,left:d,x:d,y:m}}function getLayoutRect(n){var e=getBoundingClientRect(n),t=n.offsetWidth,r=n.offsetHeight;return Math.abs(e.width-t)<=1&&(t=e.width),Math.abs(e.height-r)<=1&&(r=e.height),{x:n.offsetLeft,y:n.offsetTop,width:t,height:r}}function contains(n,e){var t=e.getRootNode&&e.getRootNode();if(n.contains(e))return!0;if(t&&isShadowRoot(t)){var r=e;do{if(r&&n.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function getComputedStyle$1(n){return getWindow(n).getComputedStyle(n)}function isTableElement(n){return["table","td","th"].indexOf(getNodeName(n))>=0}function getDocumentElement(n){return((isElement$1(n)?n.ownerDocument:n.document)||window.document).documentElement}function getParentNode(n){return getNodeName(n)==="html"?n:n.assignedSlot||n.parentNode||(isShadowRoot(n)?n.host:null)||getDocumentElement(n)}function getTrueOffsetParent(n){return!isHTMLElement(n)||getComputedStyle$1(n).position==="fixed"?null:n.offsetParent}function getContainingBlock(n){var e=/firefox/i.test(getUAString()),t=/Trident/i.test(getUAString());if(t&&isHTMLElement(n)){var r=getComputedStyle$1(n);if(r.position==="fixed")return null}var i=getParentNode(n);for(isShadowRoot(i)&&(i=i.host);isHTMLElement(i)&&["html","body"].indexOf(getNodeName(i))<0;){var s=getComputedStyle$1(i);if(s.transform!=="none"||s.perspective!=="none"||s.contain==="paint"||["transform","perspective"].indexOf(s.willChange)!==-1||e&&s.willChange==="filter"||e&&s.filter&&s.filter!=="none")return i;i=i.parentNode}return null}function getOffsetParent(n){for(var e=getWindow(n),t=getTrueOffsetParent(n);t&&isTableElement(t)&&getComputedStyle$1(t).position==="static";)t=getTrueOffsetParent(t);return t&&(getNodeName(t)==="html"||getNodeName(t)==="body"&&getComputedStyle$1(t).position==="static")?e:t||getContainingBlock(n)||e}function getMainAxisFromPlacement(n){return["top","bottom"].indexOf(n)>=0?"x":"y"}function within(n,e,t){return max(n,min(e,t))}function withinMaxClamp(n,e,t){var r=within(n,e,t);return r>t?t:r}function getFreshSideObject(){return{top:0,right:0,bottom:0,left:0}}function mergePaddingObject(n){return Object.assign({},getFreshSideObject(),n)}function expandToHashMap(n,e){return e.reduce(function(t,r){return t[r]=n,t},{})}var toPaddingObject=function n(e,t){return e=typeof e=="function"?e(Object.assign({},t.rects,{placement:t.placement})):e,mergePaddingObject(typeof e!="number"?e:expandToHashMap(e,basePlacements))};function arrow(n){var e,t=n.state,r=n.name,i=n.options,s=t.elements.arrow,l=t.modifiersData.popperOffsets,u=getBasePlacement(t.placement),h=getMainAxisFromPlacement(u),d=[left,right].indexOf(u)>=0,m=d?"height":"width";if(!(!s||!l)){var _=toPaddingObject(i.padding,t),S=getLayoutRect(s),C=h==="y"?top:left,T=h==="y"?bottom:right,O=t.rects.reference[m]+t.rects.reference[h]-l[h]-t.rects.popper[m],H=l[h]-t.rects.reference[h],R=getOffsetParent(s),Z=R?h==="y"?R.clientHeight||0:R.clientWidth||0:0,V=O/2-H/2,q=_[C],ee=Z-S[m]-_[T],B=Z/2-S[m]/2+V,f=within(q,B,ee),Y=h;t.modifiersData[r]=(e={},e[Y]=f,e.centerOffset=f-B,e)}}function effect$1(n){var e=n.state,t=n.options,r=t.element,i=r===void 0?"[data-popper-arrow]":r;i!=null&&(typeof i=="string"&&(i=e.elements.popper.querySelector(i),!i)||contains(e.elements.popper,i)&&(e.elements.arrow=i))}const arrow$1={name:"arrow",enabled:!0,phase:"main",fn:arrow,effect:effect$1,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function getVariation(n){return n.split("-")[1]}var unsetSides={top:"auto",right:"auto",bottom:"auto",left:"auto"};function roundOffsetsByDPR(n,e){var t=n.x,r=n.y,i=e.devicePixelRatio||1;return{x:round(t*i)/i||0,y:round(r*i)/i||0}}function mapToStyles(n){var e,t=n.popper,r=n.popperRect,i=n.placement,s=n.variation,l=n.offsets,u=n.position,h=n.gpuAcceleration,d=n.adaptive,m=n.roundOffsets,_=n.isFixed,S=l.x,C=S===void 0?0:S,T=l.y,O=T===void 0?0:T,H=typeof m=="function"?m({x:C,y:O}):{x:C,y:O};C=H.x,O=H.y;var R=l.hasOwnProperty("x"),Z=l.hasOwnProperty("y"),V=left,q=top,ee=window;if(d){var B=getOffsetParent(t),f="clientHeight",Y="clientWidth";if(B===getWindow(t)&&(B=getDocumentElement(t),getComputedStyle$1(B).position!=="static"&&u==="absolute"&&(f="scrollHeight",Y="scrollWidth")),B=B,i===top||(i===left||i===right)&&s===end){q=bottom;var U=_&&B===ee&&ee.visualViewport?ee.visualViewport.height:B[f];O-=U-r.height,O*=h?1:-1}if(i===left||(i===top||i===bottom)&&s===end){V=right;var L=_&&B===ee&&ee.visualViewport?ee.visualViewport.width:B[Y];C-=L-r.width,C*=h?1:-1}}var z=Object.assign({position:u},d&&unsetSides),K=m===!0?roundOffsetsByDPR({x:C,y:O},getWindow(t)):{x:C,y:O};if(C=K.x,O=K.y,h){var G;return Object.assign({},z,(G={},G[q]=Z?"0":"",G[V]=R?"0":"",G.transform=(ee.devicePixelRatio||1)<=1?"translate("+C+"px, "+O+"px)":"translate3d("+C+"px, "+O+"px, 0)",G))}return Object.assign({},z,(e={},e[q]=Z?O+"px":"",e[V]=R?C+"px":"",e.transform="",e))}function computeStyles(n){var e=n.state,t=n.options,r=t.gpuAcceleration,i=r===void 0?!0:r,s=t.adaptive,l=s===void 0?!0:s,u=t.roundOffsets,h=u===void 0?!0:u,d={placement:getBasePlacement(e.placement),variation:getVariation(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:i,isFixed:e.options.strategy==="fixed"};e.modifiersData.popperOffsets!=null&&(e.styles.popper=Object.assign({},e.styles.popper,mapToStyles(Object.assign({},d,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:l,roundOffsets:h})))),e.modifiersData.arrow!=null&&(e.styles.arrow=Object.assign({},e.styles.arrow,mapToStyles(Object.assign({},d,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:h})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})}const computeStyles$1={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:computeStyles,data:{}};var passive={passive:!0};function effect(n){var e=n.state,t=n.instance,r=n.options,i=r.scroll,s=i===void 0?!0:i,l=r.resize,u=l===void 0?!0:l,h=getWindow(e.elements.popper),d=[].concat(e.scrollParents.reference,e.scrollParents.popper);return s&&d.forEach(function(m){m.addEventListener("scroll",t.update,passive)}),u&&h.addEventListener("resize",t.update,passive),function(){s&&d.forEach(function(m){m.removeEventListener("scroll",t.update,passive)}),u&&h.removeEventListener("resize",t.update,passive)}}const eventListeners={name:"eventListeners",enabled:!0,phase:"write",fn:function n(){},effect,data:{}};var hash$1={left:"right",right:"left",bottom:"top",top:"bottom"};function getOppositePlacement(n){return n.replace(/left|right|bottom|top/g,function(e){return hash$1[e]})}var hash={start:"end",end:"start"};function getOppositeVariationPlacement(n){return n.replace(/start|end/g,function(e){return hash[e]})}function getWindowScroll(n){var e=getWindow(n),t=e.pageXOffset,r=e.pageYOffset;return{scrollLeft:t,scrollTop:r}}function getWindowScrollBarX(n){return getBoundingClientRect(getDocumentElement(n)).left+getWindowScroll(n).scrollLeft}function getViewportRect(n,e){var t=getWindow(n),r=getDocumentElement(n),i=t.visualViewport,s=r.clientWidth,l=r.clientHeight,u=0,h=0;if(i){s=i.width,l=i.height;var d=isLayoutViewport();(d||!d&&e==="fixed")&&(u=i.offsetLeft,h=i.offsetTop)}return{width:s,height:l,x:u+getWindowScrollBarX(n),y:h}}function getDocumentRect(n){var e,t=getDocumentElement(n),r=getWindowScroll(n),i=(e=n.ownerDocument)==null?void 0:e.body,s=max(t.scrollWidth,t.clientWidth,i?i.scrollWidth:0,i?i.clientWidth:0),l=max(t.scrollHeight,t.clientHeight,i?i.scrollHeight:0,i?i.clientHeight:0),u=-r.scrollLeft+getWindowScrollBarX(n),h=-r.scrollTop;return getComputedStyle$1(i||t).direction==="rtl"&&(u+=max(t.clientWidth,i?i.clientWidth:0)-s),{width:s,height:l,x:u,y:h}}function isScrollParent(n){var e=getComputedStyle$1(n),t=e.overflow,r=e.overflowX,i=e.overflowY;return/auto|scroll|overlay|hidden/.test(t+i+r)}function getScrollParent(n){return["html","body","#document"].indexOf(getNodeName(n))>=0?n.ownerDocument.body:isHTMLElement(n)&&isScrollParent(n)?n:getScrollParent(getParentNode(n))}function listScrollParents(n,e){var t;e===void 0&&(e=[]);var r=getScrollParent(n),i=r===((t=n.ownerDocument)==null?void 0:t.body),s=getWindow(r),l=i?[s].concat(s.visualViewport||[],isScrollParent(r)?r:[]):r,u=e.concat(l);return i?u:u.concat(listScrollParents(getParentNode(l)))}function rectToClientRect(n){return Object.assign({},n,{left:n.x,top:n.y,right:n.x+n.width,bottom:n.y+n.height})}function getInnerBoundingClientRect(n,e){var t=getBoundingClientRect(n,!1,e==="fixed");return t.top=t.top+n.clientTop,t.left=t.left+n.clientLeft,t.bottom=t.top+n.clientHeight,t.right=t.left+n.clientWidth,t.width=n.clientWidth,t.height=n.clientHeight,t.x=t.left,t.y=t.top,t}function getClientRectFromMixedType(n,e,t){return e===viewport?rectToClientRect(getViewportRect(n,t)):isElement$1(e)?getInnerBoundingClientRect(e,t):rectToClientRect(getDocumentRect(getDocumentElement(n)))}function getClippingParents(n){var e=listScrollParents(getParentNode(n)),t=["absolute","fixed"].indexOf(getComputedStyle$1(n).position)>=0,r=t&&isHTMLElement(n)?getOffsetParent(n):n;return isElement$1(r)?e.filter(function(i){return isElement$1(i)&&contains(i,r)&&getNodeName(i)!=="body"}):[]}function getClippingRect(n,e,t,r){var i=e==="clippingParents"?getClippingParents(n):[].concat(e),s=[].concat(i,[t]),l=s[0],u=s.reduce(function(h,d){var m=getClientRectFromMixedType(n,d,r);return h.top=max(m.top,h.top),h.right=min(m.right,h.right),h.bottom=min(m.bottom,h.bottom),h.left=max(m.left,h.left),h},getClientRectFromMixedType(n,l,r));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}function computeOffsets(n){var e=n.reference,t=n.element,r=n.placement,i=r?getBasePlacement(r):null,s=r?getVariation(r):null,l=e.x+e.width/2-t.width/2,u=e.y+e.height/2-t.height/2,h;switch(i){case top:h={x:l,y:e.y-t.height};break;case bottom:h={x:l,y:e.y+e.height};break;case right:h={x:e.x+e.width,y:u};break;case left:h={x:e.x-t.width,y:u};break;default:h={x:e.x,y:e.y}}var d=i?getMainAxisFromPlacement(i):null;if(d!=null){var m=d==="y"?"height":"width";switch(s){case start:h[d]=h[d]-(e[m]/2-t[m]/2);break;case end:h[d]=h[d]+(e[m]/2-t[m]/2);break}}return h}function detectOverflow(n,e){e===void 0&&(e={});var t=e,r=t.placement,i=r===void 0?n.placement:r,s=t.strategy,l=s===void 0?n.strategy:s,u=t.boundary,h=u===void 0?clippingParents:u,d=t.rootBoundary,m=d===void 0?viewport:d,_=t.elementContext,S=_===void 0?popper:_,C=t.altBoundary,T=C===void 0?!1:C,O=t.padding,H=O===void 0?0:O,R=mergePaddingObject(typeof H!="number"?H:expandToHashMap(H,basePlacements)),Z=S===popper?reference:popper,V=n.rects.popper,q=n.elements[T?Z:S],ee=getClippingRect(isElement$1(q)?q:q.contextElement||getDocumentElement(n.elements.popper),h,m,l),B=getBoundingClientRect(n.elements.reference),f=computeOffsets({reference:B,element:V,strategy:"absolute",placement:i}),Y=rectToClientRect(Object.assign({},V,f)),U=S===popper?Y:B,L={top:ee.top-U.top+R.top,bottom:U.bottom-ee.bottom+R.bottom,left:ee.left-U.left+R.left,right:U.right-ee.right+R.right},z=n.modifiersData.offset;if(S===popper&&z){var K=z[i];Object.keys(L).forEach(function(G){var oe=[right,bottom].indexOf(G)>=0?1:-1,ue=[top,bottom].indexOf(G)>=0?"y":"x";L[G]+=K[ue]*oe})}return L}function computeAutoPlacement(n,e){e===void 0&&(e={});var t=e,r=t.placement,i=t.boundary,s=t.rootBoundary,l=t.padding,u=t.flipVariations,h=t.allowedAutoPlacements,d=h===void 0?placements:h,m=getVariation(r),_=m?u?variationPlacements:variationPlacements.filter(function(T){return getVariation(T)===m}):basePlacements,S=_.filter(function(T){return d.indexOf(T)>=0});S.length===0&&(S=_);var C=S.reduce(function(T,O){return T[O]=detectOverflow(n,{placement:O,boundary:i,rootBoundary:s,padding:l})[getBasePlacement(O)],T},{});return Object.keys(C).sort(function(T,O){return C[T]-C[O]})}function getExpandedFallbackPlacements(n){if(getBasePlacement(n)===auto)return[];var e=getOppositePlacement(n);return[getOppositeVariationPlacement(n),e,getOppositeVariationPlacement(e)]}function flip(n){var e=n.state,t=n.options,r=n.name;if(!e.modifiersData[r]._skip){for(var i=t.mainAxis,s=i===void 0?!0:i,l=t.altAxis,u=l===void 0?!0:l,h=t.fallbackPlacements,d=t.padding,m=t.boundary,_=t.rootBoundary,S=t.altBoundary,C=t.flipVariations,T=C===void 0?!0:C,O=t.allowedAutoPlacements,H=e.options.placement,R=getBasePlacement(H),Z=R===H,V=h||(Z||!T?[getOppositePlacement(H)]:getExpandedFallbackPlacements(H)),q=[H].concat(V).reduce(function(Ne,F){return Ne.concat(getBasePlacement(F)===auto?computeAutoPlacement(e,{placement:F,boundary:m,rootBoundary:_,padding:d,flipVariations:T,allowedAutoPlacements:O}):F)},[]),ee=e.rects.reference,B=e.rects.popper,f=new Map,Y=!0,U=q[0],L=0;L<q.length;L++){var z=q[L],K=getBasePlacement(z),G=getVariation(z)===start,oe=[top,bottom].indexOf(K)>=0,ue=oe?"width":"height",de=detectOverflow(e,{placement:z,boundary:m,rootBoundary:_,altBoundary:S,padding:d}),le=oe?G?right:left:G?bottom:top;ee[ue]>B[ue]&&(le=getOppositePlacement(le));var ve=getOppositePlacement(le),he=[];if(s&&he.push(de[K]<=0),u&&he.push(de[le]<=0,de[ve]<=0),he.every(function(Ne){return Ne})){U=z,Y=!1;break}f.set(z,he)}if(Y)for(var De=T?3:1,fe=function(F){var te=q.find(function(Te){var $e=f.get(Te);if($e)return $e.slice(0,F).every(function(Me){return Me})});if(te)return U=te,"break"},be=De;be>0;be--){var we=fe(be);if(we==="break")break}e.placement!==U&&(e.modifiersData[r]._skip=!0,e.placement=U,e.reset=!0)}}const flip$1={name:"flip",enabled:!0,phase:"main",fn:flip,requiresIfExists:["offset"],data:{_skip:!1}};function getSideOffsets(n,e,t){return t===void 0&&(t={x:0,y:0}),{top:n.top-e.height-t.y,right:n.right-e.width+t.x,bottom:n.bottom-e.height+t.y,left:n.left-e.width-t.x}}function isAnySideFullyClipped(n){return[top,right,bottom,left].some(function(e){return n[e]>=0})}function hide(n){var e=n.state,t=n.name,r=e.rects.reference,i=e.rects.popper,s=e.modifiersData.preventOverflow,l=detectOverflow(e,{elementContext:"reference"}),u=detectOverflow(e,{altBoundary:!0}),h=getSideOffsets(l,r),d=getSideOffsets(u,i,s),m=isAnySideFullyClipped(h),_=isAnySideFullyClipped(d);e.modifiersData[t]={referenceClippingOffsets:h,popperEscapeOffsets:d,isReferenceHidden:m,hasPopperEscaped:_},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":m,"data-popper-escaped":_})}const hide$1={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:hide};function distanceAndSkiddingToXY(n,e,t){var r=getBasePlacement(n),i=[left,top].indexOf(r)>=0?-1:1,s=typeof t=="function"?t(Object.assign({},e,{placement:n})):t,l=s[0],u=s[1];return l=l||0,u=(u||0)*i,[left,right].indexOf(r)>=0?{x:u,y:l}:{x:l,y:u}}function offset(n){var e=n.state,t=n.options,r=n.name,i=t.offset,s=i===void 0?[0,0]:i,l=placements.reduce(function(m,_){return m[_]=distanceAndSkiddingToXY(_,e.rects,s),m},{}),u=l[e.placement],h=u.x,d=u.y;e.modifiersData.popperOffsets!=null&&(e.modifiersData.popperOffsets.x+=h,e.modifiersData.popperOffsets.y+=d),e.modifiersData[r]=l}const offset$1={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:offset};function popperOffsets(n){var e=n.state,t=n.name;e.modifiersData[t]=computeOffsets({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})}const popperOffsets$1={name:"popperOffsets",enabled:!0,phase:"read",fn:popperOffsets,data:{}};function getAltAxis(n){return n==="x"?"y":"x"}function preventOverflow(n){var e=n.state,t=n.options,r=n.name,i=t.mainAxis,s=i===void 0?!0:i,l=t.altAxis,u=l===void 0?!1:l,h=t.boundary,d=t.rootBoundary,m=t.altBoundary,_=t.padding,S=t.tether,C=S===void 0?!0:S,T=t.tetherOffset,O=T===void 0?0:T,H=detectOverflow(e,{boundary:h,rootBoundary:d,padding:_,altBoundary:m}),R=getBasePlacement(e.placement),Z=getVariation(e.placement),V=!Z,q=getMainAxisFromPlacement(R),ee=getAltAxis(q),B=e.modifiersData.popperOffsets,f=e.rects.reference,Y=e.rects.popper,U=typeof O=="function"?O(Object.assign({},e.rects,{placement:e.placement})):O,L=typeof U=="number"?{mainAxis:U,altAxis:U}:Object.assign({mainAxis:0,altAxis:0},U),z=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,K={x:0,y:0};if(B){if(s){var G,oe=q==="y"?top:left,ue=q==="y"?bottom:right,de=q==="y"?"height":"width",le=B[q],ve=le+H[oe],he=le-H[ue],De=C?-Y[de]/2:0,fe=Z===start?f[de]:Y[de],be=Z===start?-Y[de]:-f[de],we=e.elements.arrow,Ne=C&&we?getLayoutRect(we):{width:0,height:0},F=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:getFreshSideObject(),te=F[oe],Te=F[ue],$e=within(0,f[de],Ne[de]),Me=V?f[de]/2-De-$e-te-L.mainAxis:fe-$e-te-L.mainAxis,Ce=V?-f[de]/2+De+$e+Te+L.mainAxis:be+$e+Te+L.mainAxis,Ze=e.elements.arrow&&getOffsetParent(e.elements.arrow),Fe=Ze?q==="y"?Ze.clientTop||0:Ze.clientLeft||0:0,ct=(G=z==null?void 0:z[q])!=null?G:0,Lt=le+Me-ct-Fe,Kt=le+Ce-ct,gt=within(C?min(ve,Lt):ve,le,C?max(he,Kt):he);B[q]=gt,K[q]=gt-le}if(u){var ut,Ge=q==="x"?top:left,Yt=q==="x"?bottom:right,et=B[ee],Et=ee==="y"?"height":"width",Be=et+H[Ge],ot=et-H[Yt],tt=[top,left].indexOf(R)!==-1,re=(ut=z==null?void 0:z[ee])!=null?ut:0,Re=tt?Be:et-f[Et]-Y[Et]-re+L.altAxis,Mt=tt?et+f[Et]+Y[Et]-re-L.altAxis:ot,kt=C&&tt?withinMaxClamp(Re,et,Mt):within(C?Re:Be,et,C?Mt:ot);B[ee]=kt,K[ee]=kt-et}e.modifiersData[r]=K}}const preventOverflow$1={name:"preventOverflow",enabled:!0,phase:"main",fn:preventOverflow,requiresIfExists:["offset"]};function getHTMLElementScroll(n){return{scrollLeft:n.scrollLeft,scrollTop:n.scrollTop}}function getNodeScroll(n){return n===getWindow(n)||!isHTMLElement(n)?getWindowScroll(n):getHTMLElementScroll(n)}function isElementScaled(n){var e=n.getBoundingClientRect(),t=round(e.width)/n.offsetWidth||1,r=round(e.height)/n.offsetHeight||1;return t!==1||r!==1}function getCompositeRect(n,e,t){t===void 0&&(t=!1);var r=isHTMLElement(e),i=isHTMLElement(e)&&isElementScaled(e),s=getDocumentElement(e),l=getBoundingClientRect(n,i,t),u={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(r||!r&&!t)&&((getNodeName(e)!=="body"||isScrollParent(s))&&(u=getNodeScroll(e)),isHTMLElement(e)?(h=getBoundingClientRect(e,!0),h.x+=e.clientLeft,h.y+=e.clientTop):s&&(h.x=getWindowScrollBarX(s))),{x:l.left+u.scrollLeft-h.x,y:l.top+u.scrollTop-h.y,width:l.width,height:l.height}}function order(n){var e=new Map,t=new Set,r=[];n.forEach(function(s){e.set(s.name,s)});function i(s){t.add(s.name);var l=[].concat(s.requires||[],s.requiresIfExists||[]);l.forEach(function(u){if(!t.has(u)){var h=e.get(u);h&&i(h)}}),r.push(s)}return n.forEach(function(s){t.has(s.name)||i(s)}),r}function orderModifiers(n){var e=order(n);return modifierPhases.reduce(function(t,r){return t.concat(e.filter(function(i){return i.phase===r}))},[])}function debounce(n){var e;return function(){return e||(e=new Promise(function(t){Promise.resolve().then(function(){e=void 0,t(n())})})),e}}function mergeByName(n){var e=n.reduce(function(t,r){var i=t[r.name];return t[r.name]=i?Object.assign({},i,r,{options:Object.assign({},i.options,r.options),data:Object.assign({},i.data,r.data)}):r,t},{});return Object.keys(e).map(function(t){return e[t]})}var DEFAULT_OPTIONS={placement:"bottom",modifiers:[],strategy:"absolute"};function areValidElements(){for(var n=arguments.length,e=new Array(n),t=0;t<n;t++)e[t]=arguments[t];return!e.some(function(r){return!(r&&typeof r.getBoundingClientRect=="function")})}function popperGenerator(n){n===void 0&&(n={});var e=n,t=e.defaultModifiers,r=t===void 0?[]:t,i=e.defaultOptions,s=i===void 0?DEFAULT_OPTIONS:i;return function(u,h,d){d===void 0&&(d=s);var m={placement:"bottom",orderedModifiers:[],options:Object.assign({},DEFAULT_OPTIONS,s),modifiersData:{},elements:{reference:u,popper:h},attributes:{},styles:{}},_=[],S=!1,C={state:m,setOptions:function(R){var Z=typeof R=="function"?R(m.options):R;O(),m.options=Object.assign({},s,m.options,Z),m.scrollParents={reference:isElement$1(u)?listScrollParents(u):u.contextElement?listScrollParents(u.contextElement):[],popper:listScrollParents(h)};var V=orderModifiers(mergeByName([].concat(r,m.options.modifiers)));return m.orderedModifiers=V.filter(function(q){return q.enabled}),T(),C.update()},forceUpdate:function(){if(!S){var R=m.elements,Z=R.reference,V=R.popper;if(areValidElements(Z,V)){m.rects={reference:getCompositeRect(Z,getOffsetParent(V),m.options.strategy==="fixed"),popper:getLayoutRect(V)},m.reset=!1,m.placement=m.options.placement,m.orderedModifiers.forEach(function(L){return m.modifiersData[L.name]=Object.assign({},L.data)});for(var q=0;q<m.orderedModifiers.length;q++){if(m.reset===!0){m.reset=!1,q=-1;continue}var ee=m.orderedModifiers[q],B=ee.fn,f=ee.options,Y=f===void 0?{}:f,U=ee.name;typeof B=="function"&&(m=B({state:m,options:Y,name:U,instance:C})||m)}}}},update:debounce(function(){return new Promise(function(H){C.forceUpdate(),H(m)})}),destroy:function(){O(),S=!0}};if(!areValidElements(u,h))return C;C.setOptions(d).then(function(H){!S&&d.onFirstUpdate&&d.onFirstUpdate(H)});function T(){m.orderedModifiers.forEach(function(H){var R=H.name,Z=H.options,V=Z===void 0?{}:Z,q=H.effect;if(typeof q=="function"){var ee=q({state:m,name:R,instance:C,options:V}),B=function(){};_.push(ee||B)}})}function O(){_.forEach(function(H){return H()}),_=[]}return C}}var createPopper$2=popperGenerator(),defaultModifiers$1=[eventListeners,popperOffsets$1,computeStyles$1,applyStyles$1],createPopper$1=popperGenerator({defaultModifiers:defaultModifiers$1}),defaultModifiers=[eventListeners,popperOffsets$1,computeStyles$1,applyStyles$1,offset$1,flip$1,preventOverflow$1,arrow$1,hide$1],createPopper=popperGenerator({defaultModifiers});const Popper=Object.freeze(Object.defineProperty({__proto__:null,afterMain,afterRead,afterWrite,applyStyles:applyStyles$1,arrow:arrow$1,auto,basePlacements,beforeMain,beforeRead,beforeWrite,bottom,clippingParents,computeStyles:computeStyles$1,createPopper,createPopperBase:createPopper$2,createPopperLite:createPopper$1,detectOverflow,end,eventListeners,flip:flip$1,hide:hide$1,left,main,modifierPhases,offset:offset$1,placements,popper,popperGenerator,popperOffsets:popperOffsets$1,preventOverflow:preventOverflow$1,read,reference,right,start,top,variationPlacements,viewport,write},Symbol.toStringTag,{value:"Module"}));/*!
|
||
* Bootstrap v5.3.3 (https://getbootstrap.com/)
|
||
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||
*/const elementMap=new Map,Data={set(n,e,t){elementMap.has(n)||elementMap.set(n,new Map);const r=elementMap.get(n);if(!r.has(e)&&r.size!==0){console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(r.keys())[0]}.`);return}r.set(e,t)},get(n,e){return elementMap.has(n)&&elementMap.get(n).get(e)||null},remove(n,e){if(!elementMap.has(n))return;const t=elementMap.get(n);t.delete(e),t.size===0&&elementMap.delete(n)}},MAX_UID=1e6,MILLISECONDS_MULTIPLIER=1e3,TRANSITION_END="transitionend",parseSelector=n=>(n&&window.CSS&&window.CSS.escape&&(n=n.replace(/#([^\s"#']+)/g,(e,t)=>`#${CSS.escape(t)}`)),n),toType=n=>n==null?`${n}`:Object.prototype.toString.call(n).match(/\s([a-z]+)/i)[1].toLowerCase(),getUID=n=>{do n+=Math.floor(Math.random()*MAX_UID);while(document.getElementById(n));return n},getTransitionDurationFromElement=n=>{if(!n)return 0;let{transitionDuration:e,transitionDelay:t}=window.getComputedStyle(n);const r=Number.parseFloat(e),i=Number.parseFloat(t);return!r&&!i?0:(e=e.split(",")[0],t=t.split(",")[0],(Number.parseFloat(e)+Number.parseFloat(t))*MILLISECONDS_MULTIPLIER)},triggerTransitionEnd=n=>{n.dispatchEvent(new Event(TRANSITION_END))},isElement=n=>!n||typeof n!="object"?!1:(typeof n.jquery<"u"&&(n=n[0]),typeof n.nodeType<"u"),getElement=n=>isElement(n)?n.jquery?n[0]:n:typeof n=="string"&&n.length>0?document.querySelector(parseSelector(n)):null,isVisible=n=>{if(!isElement(n)||n.getClientRects().length===0)return!1;const e=getComputedStyle(n).getPropertyValue("visibility")==="visible",t=n.closest("details:not([open])");if(!t)return e;if(t!==n){const r=n.closest("summary");if(r&&r.parentNode!==t||r===null)return!1}return e},isDisabled=n=>!n||n.nodeType!==Node.ELEMENT_NODE||n.classList.contains("disabled")?!0:typeof n.disabled<"u"?n.disabled:n.hasAttribute("disabled")&&n.getAttribute("disabled")!=="false",findShadowRoot=n=>{if(!document.documentElement.attachShadow)return null;if(typeof n.getRootNode=="function"){const e=n.getRootNode();return e instanceof ShadowRoot?e:null}return n instanceof ShadowRoot?n:n.parentNode?findShadowRoot(n.parentNode):null},noop=()=>{},reflow=n=>{n.offsetHeight},getjQuery=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,DOMContentLoadedCallbacks=[],onDOMContentLoaded=n=>{document.readyState==="loading"?(DOMContentLoadedCallbacks.length||document.addEventListener("DOMContentLoaded",()=>{for(const e of DOMContentLoadedCallbacks)e()}),DOMContentLoadedCallbacks.push(n)):n()},isRTL=()=>document.documentElement.dir==="rtl",defineJQueryPlugin=n=>{onDOMContentLoaded(()=>{const e=getjQuery();if(e){const t=n.NAME,r=e.fn[t];e.fn[t]=n.jQueryInterface,e.fn[t].Constructor=n,e.fn[t].noConflict=()=>(e.fn[t]=r,n.jQueryInterface)}})},execute=(n,e=[],t=n)=>typeof n=="function"?n(...e):t,executeAfterTransition=(n,e,t=!0)=>{if(!t){execute(n);return}const r=5,i=getTransitionDurationFromElement(e)+r;let s=!1;const l=({target:u})=>{u===e&&(s=!0,e.removeEventListener(TRANSITION_END,l),execute(n))};e.addEventListener(TRANSITION_END,l),setTimeout(()=>{s||triggerTransitionEnd(e)},i)},getNextActiveElement=(n,e,t,r)=>{const i=n.length;let s=n.indexOf(e);return s===-1?!t&&r?n[i-1]:n[0]:(s+=t?1:-1,r&&(s=(s+i)%i),n[Math.max(0,Math.min(s,i-1))])},namespaceRegex=/[^.]*(?=\..*)\.|.*/,stripNameRegex=/\..*/,stripUidRegex=/::\d+$/,eventRegistry={};let uidEvent=1;const customEvents={mouseenter:"mouseover",mouseleave:"mouseout"},nativeEvents=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function makeEventUid(n,e){return e&&`${e}::${uidEvent++}`||n.uidEvent||uidEvent++}function getElementEvents(n){const e=makeEventUid(n);return n.uidEvent=e,eventRegistry[e]=eventRegistry[e]||{},eventRegistry[e]}function bootstrapHandler(n,e){return function t(r){return hydrateObj(r,{delegateTarget:n}),t.oneOff&&EventHandler.off(n,r.type,e),e.apply(n,[r])}}function bootstrapDelegationHandler(n,e,t){return function r(i){const s=n.querySelectorAll(e);for(let{target:l}=i;l&&l!==this;l=l.parentNode)for(const u of s)if(u===l)return hydrateObj(i,{delegateTarget:l}),r.oneOff&&EventHandler.off(n,i.type,e,t),t.apply(l,[i])}}function findHandler(n,e,t=null){return Object.values(n).find(r=>r.callable===e&&r.delegationSelector===t)}function normalizeParameters(n,e,t){const r=typeof e=="string",i=r?t:e||t;let s=getTypeEvent(n);return nativeEvents.has(s)||(s=n),[r,i,s]}function addHandler(n,e,t,r,i){if(typeof e!="string"||!n)return;let[s,l,u]=normalizeParameters(e,t,r);e in customEvents&&(l=(T=>function(O){if(!O.relatedTarget||O.relatedTarget!==O.delegateTarget&&!O.delegateTarget.contains(O.relatedTarget))return T.call(this,O)})(l));const h=getElementEvents(n),d=h[u]||(h[u]={}),m=findHandler(d,l,s?t:null);if(m){m.oneOff=m.oneOff&&i;return}const _=makeEventUid(l,e.replace(namespaceRegex,"")),S=s?bootstrapDelegationHandler(n,t,l):bootstrapHandler(n,l);S.delegationSelector=s?t:null,S.callable=l,S.oneOff=i,S.uidEvent=_,d[_]=S,n.addEventListener(u,S,s)}function removeHandler(n,e,t,r,i){const s=findHandler(e[t],r,i);s&&(n.removeEventListener(t,s,!!i),delete e[t][s.uidEvent])}function removeNamespacedHandlers(n,e,t,r){const i=e[t]||{};for(const[s,l]of Object.entries(i))s.includes(r)&&removeHandler(n,e,t,l.callable,l.delegationSelector)}function getTypeEvent(n){return n=n.replace(stripNameRegex,""),customEvents[n]||n}const EventHandler={on(n,e,t,r){addHandler(n,e,t,r,!1)},one(n,e,t,r){addHandler(n,e,t,r,!0)},off(n,e,t,r){if(typeof e!="string"||!n)return;const[i,s,l]=normalizeParameters(e,t,r),u=l!==e,h=getElementEvents(n),d=h[l]||{},m=e.startsWith(".");if(typeof s<"u"){if(!Object.keys(d).length)return;removeHandler(n,h,l,s,i?t:null);return}if(m)for(const _ of Object.keys(h))removeNamespacedHandlers(n,h,_,e.slice(1));for(const[_,S]of Object.entries(d)){const C=_.replace(stripUidRegex,"");(!u||e.includes(C))&&removeHandler(n,h,l,S.callable,S.delegationSelector)}},trigger(n,e,t){if(typeof e!="string"||!n)return null;const r=getjQuery(),i=getTypeEvent(e),s=e!==i;let l=null,u=!0,h=!0,d=!1;s&&r&&(l=r.Event(e,t),r(n).trigger(l),u=!l.isPropagationStopped(),h=!l.isImmediatePropagationStopped(),d=l.isDefaultPrevented());const m=hydrateObj(new Event(e,{bubbles:u,cancelable:!0}),t);return d&&m.preventDefault(),h&&n.dispatchEvent(m),m.defaultPrevented&&l&&l.preventDefault(),m}};function hydrateObj(n,e={}){for(const[t,r]of Object.entries(e))try{n[t]=r}catch{Object.defineProperty(n,t,{configurable:!0,get(){return r}})}return n}function normalizeData(n){if(n==="true")return!0;if(n==="false")return!1;if(n===Number(n).toString())return Number(n);if(n===""||n==="null")return null;if(typeof n!="string")return n;try{return JSON.parse(decodeURIComponent(n))}catch{return n}}function normalizeDataKey(n){return n.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}const Manipulator={setDataAttribute(n,e,t){n.setAttribute(`data-bs-${normalizeDataKey(e)}`,t)},removeDataAttribute(n,e){n.removeAttribute(`data-bs-${normalizeDataKey(e)}`)},getDataAttributes(n){if(!n)return{};const e={},t=Object.keys(n.dataset).filter(r=>r.startsWith("bs")&&!r.startsWith("bsConfig"));for(const r of t){let i=r.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=normalizeData(n.dataset[r])}return e},getDataAttribute(n,e){return normalizeData(n.getAttribute(`data-bs-${normalizeDataKey(e)}`))}};class Config{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const r=isElement(t)?Manipulator.getDataAttribute(t,"config"):{};return{...this.constructor.Default,...typeof r=="object"?r:{},...isElement(t)?Manipulator.getDataAttributes(t):{},...typeof e=="object"?e:{}}}_typeCheckConfig(e,t=this.constructor.DefaultType){for(const[r,i]of Object.entries(t)){const s=e[r],l=isElement(s)?"element":toType(s);if(!new RegExp(i).test(l))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${r}" provided type "${l}" but expected type "${i}".`)}}}const VERSION="5.3.3";class BaseComponent extends Config{constructor(e,t){super(),e=getElement(e),e&&(this._element=e,this._config=this._getConfig(t),Data.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Data.remove(this._element,this.constructor.DATA_KEY),EventHandler.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t,r=!0){executeAfterTransition(e,t,r)}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return Data.get(getElement(e),this.DATA_KEY)}static getOrCreateInstance(e,t={}){return this.getInstance(e)||new this(e,typeof t=="object"?t:null)}static get VERSION(){return VERSION}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const getSelector=n=>{let e=n.getAttribute("data-bs-target");if(!e||e==="#"){let t=n.getAttribute("href");if(!t||!t.includes("#")&&!t.startsWith("."))return null;t.includes("#")&&!t.startsWith("#")&&(t=`#${t.split("#")[1]}`),e=t&&t!=="#"?t.trim():null}return e?e.split(",").map(t=>parseSelector(t)).join(","):null},SelectorEngine={find(n,e=document.documentElement){return[].concat(...Element.prototype.querySelectorAll.call(e,n))},findOne(n,e=document.documentElement){return Element.prototype.querySelector.call(e,n)},children(n,e){return[].concat(...n.children).filter(t=>t.matches(e))},parents(n,e){const t=[];let r=n.parentNode.closest(e);for(;r;)t.push(r),r=r.parentNode.closest(e);return t},prev(n,e){let t=n.previousElementSibling;for(;t;){if(t.matches(e))return[t];t=t.previousElementSibling}return[]},next(n,e){let t=n.nextElementSibling;for(;t;){if(t.matches(e))return[t];t=t.nextElementSibling}return[]},focusableChildren(n){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(t=>`${t}:not([tabindex^="-"])`).join(",");return this.find(e,n).filter(t=>!isDisabled(t)&&isVisible(t))},getSelectorFromElement(n){const e=getSelector(n);return e&&SelectorEngine.findOne(e)?e:null},getElementFromSelector(n){const e=getSelector(n);return e?SelectorEngine.findOne(e):null},getMultipleElementsFromSelector(n){const e=getSelector(n);return e?SelectorEngine.find(e):[]}},enableDismissTrigger=(n,e="hide")=>{const t=`click.dismiss${n.EVENT_KEY}`,r=n.NAME;EventHandler.on(document,t,`[data-bs-dismiss="${r}"]`,function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),isDisabled(this))return;const s=SelectorEngine.getElementFromSelector(this)||this.closest(`.${r}`);n.getOrCreateInstance(s)[e]()})},NAME$f="alert",DATA_KEY$a="bs.alert",EVENT_KEY$b=`.${DATA_KEY$a}`,EVENT_CLOSE=`close${EVENT_KEY$b}`,EVENT_CLOSED=`closed${EVENT_KEY$b}`,CLASS_NAME_FADE$5="fade",CLASS_NAME_SHOW$8="show";class Alert extends BaseComponent{static get NAME(){return NAME$f}close(){if(EventHandler.trigger(this._element,EVENT_CLOSE).defaultPrevented)return;this._element.classList.remove(CLASS_NAME_SHOW$8);const t=this._element.classList.contains(CLASS_NAME_FADE$5);this._queueCallback(()=>this._destroyElement(),this._element,t)}_destroyElement(){this._element.remove(),EventHandler.trigger(this._element,EVENT_CLOSED),this.dispose()}static jQueryInterface(e){return this.each(function(){const t=Alert.getOrCreateInstance(this);if(typeof e=="string"){if(t[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);t[e](this)}})}}enableDismissTrigger(Alert,"close");defineJQueryPlugin(Alert);const NAME$e="button",DATA_KEY$9="bs.button",EVENT_KEY$a=`.${DATA_KEY$9}`,DATA_API_KEY$6=".data-api",CLASS_NAME_ACTIVE$3="active",SELECTOR_DATA_TOGGLE$5='[data-bs-toggle="button"]',EVENT_CLICK_DATA_API$6=`click${EVENT_KEY$a}${DATA_API_KEY$6}`;class Button extends BaseComponent{static get NAME(){return NAME$e}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle(CLASS_NAME_ACTIVE$3))}static jQueryInterface(e){return this.each(function(){const t=Button.getOrCreateInstance(this);e==="toggle"&&t[e]()})}}EventHandler.on(document,EVENT_CLICK_DATA_API$6,SELECTOR_DATA_TOGGLE$5,n=>{n.preventDefault();const e=n.target.closest(SELECTOR_DATA_TOGGLE$5);Button.getOrCreateInstance(e).toggle()});defineJQueryPlugin(Button);const NAME$d="swipe",EVENT_KEY$9=".bs.swipe",EVENT_TOUCHSTART=`touchstart${EVENT_KEY$9}`,EVENT_TOUCHMOVE=`touchmove${EVENT_KEY$9}`,EVENT_TOUCHEND=`touchend${EVENT_KEY$9}`,EVENT_POINTERDOWN=`pointerdown${EVENT_KEY$9}`,EVENT_POINTERUP=`pointerup${EVENT_KEY$9}`,POINTER_TYPE_TOUCH="touch",POINTER_TYPE_PEN="pen",CLASS_NAME_POINTER_EVENT="pointer-event",SWIPE_THRESHOLD=40,Default$c={endCallback:null,leftCallback:null,rightCallback:null},DefaultType$c={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class Swipe extends Config{constructor(e,t){super(),this._element=e,!(!e||!Swipe.isSupported())&&(this._config=this._getConfig(t),this._deltaX=0,this._supportPointerEvents=!!window.PointerEvent,this._initEvents())}static get Default(){return Default$c}static get DefaultType(){return DefaultType$c}static get NAME(){return NAME$d}dispose(){EventHandler.off(this._element,EVENT_KEY$9)}_start(e){if(!this._supportPointerEvents){this._deltaX=e.touches[0].clientX;return}this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX)}_end(e){this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX-this._deltaX),this._handleSwipe(),execute(this._config.endCallback)}_move(e){this._deltaX=e.touches&&e.touches.length>1?0:e.touches[0].clientX-this._deltaX}_handleSwipe(){const e=Math.abs(this._deltaX);if(e<=SWIPE_THRESHOLD)return;const t=e/this._deltaX;this._deltaX=0,t&&execute(t>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(EventHandler.on(this._element,EVENT_POINTERDOWN,e=>this._start(e)),EventHandler.on(this._element,EVENT_POINTERUP,e=>this._end(e)),this._element.classList.add(CLASS_NAME_POINTER_EVENT)):(EventHandler.on(this._element,EVENT_TOUCHSTART,e=>this._start(e)),EventHandler.on(this._element,EVENT_TOUCHMOVE,e=>this._move(e)),EventHandler.on(this._element,EVENT_TOUCHEND,e=>this._end(e)))}_eventIsPointerPenTouch(e){return this._supportPointerEvents&&(e.pointerType===POINTER_TYPE_PEN||e.pointerType===POINTER_TYPE_TOUCH)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const NAME$c="carousel",DATA_KEY$8="bs.carousel",EVENT_KEY$8=`.${DATA_KEY$8}`,DATA_API_KEY$5=".data-api",ARROW_LEFT_KEY$1="ArrowLeft",ARROW_RIGHT_KEY$1="ArrowRight",TOUCHEVENT_COMPAT_WAIT=500,ORDER_NEXT="next",ORDER_PREV="prev",DIRECTION_LEFT="left",DIRECTION_RIGHT="right",EVENT_SLIDE=`slide${EVENT_KEY$8}`,EVENT_SLID=`slid${EVENT_KEY$8}`,EVENT_KEYDOWN$1=`keydown${EVENT_KEY$8}`,EVENT_MOUSEENTER$1=`mouseenter${EVENT_KEY$8}`,EVENT_MOUSELEAVE$1=`mouseleave${EVENT_KEY$8}`,EVENT_DRAG_START=`dragstart${EVENT_KEY$8}`,EVENT_LOAD_DATA_API$3=`load${EVENT_KEY$8}${DATA_API_KEY$5}`,EVENT_CLICK_DATA_API$5=`click${EVENT_KEY$8}${DATA_API_KEY$5}`,CLASS_NAME_CAROUSEL="carousel",CLASS_NAME_ACTIVE$2="active",CLASS_NAME_SLIDE="slide",CLASS_NAME_END="carousel-item-end",CLASS_NAME_START="carousel-item-start",CLASS_NAME_NEXT="carousel-item-next",CLASS_NAME_PREV="carousel-item-prev",SELECTOR_ACTIVE=".active",SELECTOR_ITEM=".carousel-item",SELECTOR_ACTIVE_ITEM=SELECTOR_ACTIVE+SELECTOR_ITEM,SELECTOR_ITEM_IMG=".carousel-item img",SELECTOR_INDICATORS=".carousel-indicators",SELECTOR_DATA_SLIDE="[data-bs-slide], [data-bs-slide-to]",SELECTOR_DATA_RIDE='[data-bs-ride="carousel"]',KEY_TO_DIRECTION={[ARROW_LEFT_KEY$1]:DIRECTION_RIGHT,[ARROW_RIGHT_KEY$1]:DIRECTION_LEFT},Default$b={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},DefaultType$b={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class Carousel extends BaseComponent{constructor(e,t){super(e,t),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=SelectorEngine.findOne(SELECTOR_INDICATORS,this._element),this._addEventListeners(),this._config.ride===CLASS_NAME_CAROUSEL&&this.cycle()}static get Default(){return Default$b}static get DefaultType(){return DefaultType$b}static get NAME(){return NAME$c}next(){this._slide(ORDER_NEXT)}nextWhenVisible(){!document.hidden&&isVisible(this._element)&&this.next()}prev(){this._slide(ORDER_PREV)}pause(){this._isSliding&&triggerTransitionEnd(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval(()=>this.nextWhenVisible(),this._config.interval)}_maybeEnableCycle(){if(this._config.ride){if(this._isSliding){EventHandler.one(this._element,EVENT_SLID,()=>this.cycle());return}this.cycle()}}to(e){const t=this._getItems();if(e>t.length-1||e<0)return;if(this._isSliding){EventHandler.one(this._element,EVENT_SLID,()=>this.to(e));return}const r=this._getItemIndex(this._getActive());if(r===e)return;const i=e>r?ORDER_NEXT:ORDER_PREV;this._slide(i,t[e])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(e){return e.defaultInterval=e.interval,e}_addEventListeners(){this._config.keyboard&&EventHandler.on(this._element,EVENT_KEYDOWN$1,e=>this._keydown(e)),this._config.pause==="hover"&&(EventHandler.on(this._element,EVENT_MOUSEENTER$1,()=>this.pause()),EventHandler.on(this._element,EVENT_MOUSELEAVE$1,()=>this._maybeEnableCycle())),this._config.touch&&Swipe.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const r of SelectorEngine.find(SELECTOR_ITEM_IMG,this._element))EventHandler.on(r,EVENT_DRAG_START,i=>i.preventDefault());const t={leftCallback:()=>this._slide(this._directionToOrder(DIRECTION_LEFT)),rightCallback:()=>this._slide(this._directionToOrder(DIRECTION_RIGHT)),endCallback:()=>{this._config.pause==="hover"&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(()=>this._maybeEnableCycle(),TOUCHEVENT_COMPAT_WAIT+this._config.interval))}};this._swipeHelper=new Swipe(this._element,t)}_keydown(e){if(/input|textarea/i.test(e.target.tagName))return;const t=KEY_TO_DIRECTION[e.key];t&&(e.preventDefault(),this._slide(this._directionToOrder(t)))}_getItemIndex(e){return this._getItems().indexOf(e)}_setActiveIndicatorElement(e){if(!this._indicatorsElement)return;const t=SelectorEngine.findOne(SELECTOR_ACTIVE,this._indicatorsElement);t.classList.remove(CLASS_NAME_ACTIVE$2),t.removeAttribute("aria-current");const r=SelectorEngine.findOne(`[data-bs-slide-to="${e}"]`,this._indicatorsElement);r&&(r.classList.add(CLASS_NAME_ACTIVE$2),r.setAttribute("aria-current","true"))}_updateInterval(){const e=this._activeElement||this._getActive();if(!e)return;const t=Number.parseInt(e.getAttribute("data-bs-interval"),10);this._config.interval=t||this._config.defaultInterval}_slide(e,t=null){if(this._isSliding)return;const r=this._getActive(),i=e===ORDER_NEXT,s=t||getNextActiveElement(this._getItems(),r,i,this._config.wrap);if(s===r)return;const l=this._getItemIndex(s),u=C=>EventHandler.trigger(this._element,C,{relatedTarget:s,direction:this._orderToDirection(e),from:this._getItemIndex(r),to:l});if(u(EVENT_SLIDE).defaultPrevented||!r||!s)return;const d=!!this._interval;this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(l),this._activeElement=s;const m=i?CLASS_NAME_START:CLASS_NAME_END,_=i?CLASS_NAME_NEXT:CLASS_NAME_PREV;s.classList.add(_),reflow(s),r.classList.add(m),s.classList.add(m);const S=()=>{s.classList.remove(m,_),s.classList.add(CLASS_NAME_ACTIVE$2),r.classList.remove(CLASS_NAME_ACTIVE$2,_,m),this._isSliding=!1,u(EVENT_SLID)};this._queueCallback(S,r,this._isAnimated()),d&&this.cycle()}_isAnimated(){return this._element.classList.contains(CLASS_NAME_SLIDE)}_getActive(){return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM,this._element)}_getItems(){return SelectorEngine.find(SELECTOR_ITEM,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(e){return isRTL()?e===DIRECTION_LEFT?ORDER_PREV:ORDER_NEXT:e===DIRECTION_LEFT?ORDER_NEXT:ORDER_PREV}_orderToDirection(e){return isRTL()?e===ORDER_PREV?DIRECTION_LEFT:DIRECTION_RIGHT:e===ORDER_PREV?DIRECTION_RIGHT:DIRECTION_LEFT}static jQueryInterface(e){return this.each(function(){const t=Carousel.getOrCreateInstance(this,e);if(typeof e=="number"){t.to(e);return}if(typeof e=="string"){if(t[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);t[e]()}})}}EventHandler.on(document,EVENT_CLICK_DATA_API$5,SELECTOR_DATA_SLIDE,function(n){const e=SelectorEngine.getElementFromSelector(this);if(!e||!e.classList.contains(CLASS_NAME_CAROUSEL))return;n.preventDefault();const t=Carousel.getOrCreateInstance(e),r=this.getAttribute("data-bs-slide-to");if(r){t.to(r),t._maybeEnableCycle();return}if(Manipulator.getDataAttribute(this,"slide")==="next"){t.next(),t._maybeEnableCycle();return}t.prev(),t._maybeEnableCycle()});EventHandler.on(window,EVENT_LOAD_DATA_API$3,()=>{const n=SelectorEngine.find(SELECTOR_DATA_RIDE);for(const e of n)Carousel.getOrCreateInstance(e)});defineJQueryPlugin(Carousel);const NAME$b="collapse",DATA_KEY$7="bs.collapse",EVENT_KEY$7=`.${DATA_KEY$7}`,DATA_API_KEY$4=".data-api",EVENT_SHOW$6=`show${EVENT_KEY$7}`,EVENT_SHOWN$6=`shown${EVENT_KEY$7}`,EVENT_HIDE$6=`hide${EVENT_KEY$7}`,EVENT_HIDDEN$6=`hidden${EVENT_KEY$7}`,EVENT_CLICK_DATA_API$4=`click${EVENT_KEY$7}${DATA_API_KEY$4}`,CLASS_NAME_SHOW$7="show",CLASS_NAME_COLLAPSE="collapse",CLASS_NAME_COLLAPSING="collapsing",CLASS_NAME_COLLAPSED="collapsed",CLASS_NAME_DEEPER_CHILDREN=`:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`,CLASS_NAME_HORIZONTAL="collapse-horizontal",WIDTH="width",HEIGHT="height",SELECTOR_ACTIVES=".collapse.show, .collapse.collapsing",SELECTOR_DATA_TOGGLE$4='[data-bs-toggle="collapse"]',Default$a={parent:null,toggle:!0},DefaultType$a={parent:"(null|element)",toggle:"boolean"};class Collapse extends BaseComponent{constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];const r=SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);for(const i of r){const s=SelectorEngine.getSelectorFromElement(i),l=SelectorEngine.find(s).filter(u=>u===this._element);s!==null&&l.length&&this._triggerArray.push(i)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Default$a}static get DefaultType(){return DefaultType$a}static get NAME(){return NAME$b}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(u=>u!==this._element).map(u=>Collapse.getOrCreateInstance(u,{toggle:!1}))),e.length&&e[0]._isTransitioning||EventHandler.trigger(this._element,EVENT_SHOW$6).defaultPrevented)return;for(const u of e)u.hide();const r=this._getDimension();this._element.classList.remove(CLASS_NAME_COLLAPSE),this._element.classList.add(CLASS_NAME_COLLAPSING),this._element.style[r]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=()=>{this._isTransitioning=!1,this._element.classList.remove(CLASS_NAME_COLLAPSING),this._element.classList.add(CLASS_NAME_COLLAPSE,CLASS_NAME_SHOW$7),this._element.style[r]="",EventHandler.trigger(this._element,EVENT_SHOWN$6)},l=`scroll${r[0].toUpperCase()+r.slice(1)}`;this._queueCallback(i,this._element,!0),this._element.style[r]=`${this._element[l]}px`}hide(){if(this._isTransitioning||!this._isShown()||EventHandler.trigger(this._element,EVENT_HIDE$6).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,reflow(this._element),this._element.classList.add(CLASS_NAME_COLLAPSING),this._element.classList.remove(CLASS_NAME_COLLAPSE,CLASS_NAME_SHOW$7);for(const i of this._triggerArray){const s=SelectorEngine.getElementFromSelector(i);s&&!this._isShown(s)&&this._addAriaAndCollapsedClass([i],!1)}this._isTransitioning=!0;const r=()=>{this._isTransitioning=!1,this._element.classList.remove(CLASS_NAME_COLLAPSING),this._element.classList.add(CLASS_NAME_COLLAPSE),EventHandler.trigger(this._element,EVENT_HIDDEN$6)};this._element.style[t]="",this._queueCallback(r,this._element,!0)}_isShown(e=this._element){return e.classList.contains(CLASS_NAME_SHOW$7)}_configAfterMerge(e){return e.toggle=!!e.toggle,e.parent=getElement(e.parent),e}_getDimension(){return this._element.classList.contains(CLASS_NAME_HORIZONTAL)?WIDTH:HEIGHT}_initializeChildren(){if(!this._config.parent)return;const e=this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);for(const t of e){const r=SelectorEngine.getElementFromSelector(t);r&&this._addAriaAndCollapsedClass([t],this._isShown(r))}}_getFirstLevelChildren(e){const t=SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN,this._config.parent);return SelectorEngine.find(e,this._config.parent).filter(r=>!t.includes(r))}_addAriaAndCollapsedClass(e,t){if(e.length)for(const r of e)r.classList.toggle(CLASS_NAME_COLLAPSED,!t),r.setAttribute("aria-expanded",t)}static jQueryInterface(e){const t={};return typeof e=="string"&&/show|hide/.test(e)&&(t.toggle=!1),this.each(function(){const r=Collapse.getOrCreateInstance(this,t);if(typeof e=="string"){if(typeof r[e]>"u")throw new TypeError(`No method named "${e}"`);r[e]()}})}}EventHandler.on(document,EVENT_CLICK_DATA_API$4,SELECTOR_DATA_TOGGLE$4,function(n){(n.target.tagName==="A"||n.delegateTarget&&n.delegateTarget.tagName==="A")&&n.preventDefault();for(const e of SelectorEngine.getMultipleElementsFromSelector(this))Collapse.getOrCreateInstance(e,{toggle:!1}).toggle()});defineJQueryPlugin(Collapse);const NAME$a="dropdown",DATA_KEY$6="bs.dropdown",EVENT_KEY$6=`.${DATA_KEY$6}`,DATA_API_KEY$3=".data-api",ESCAPE_KEY$2="Escape",TAB_KEY$1="Tab",ARROW_UP_KEY$1="ArrowUp",ARROW_DOWN_KEY$1="ArrowDown",RIGHT_MOUSE_BUTTON=2,EVENT_HIDE$5=`hide${EVENT_KEY$6}`,EVENT_HIDDEN$5=`hidden${EVENT_KEY$6}`,EVENT_SHOW$5=`show${EVENT_KEY$6}`,EVENT_SHOWN$5=`shown${EVENT_KEY$6}`,EVENT_CLICK_DATA_API$3=`click${EVENT_KEY$6}${DATA_API_KEY$3}`,EVENT_KEYDOWN_DATA_API=`keydown${EVENT_KEY$6}${DATA_API_KEY$3}`,EVENT_KEYUP_DATA_API=`keyup${EVENT_KEY$6}${DATA_API_KEY$3}`,CLASS_NAME_SHOW$6="show",CLASS_NAME_DROPUP="dropup",CLASS_NAME_DROPEND="dropend",CLASS_NAME_DROPSTART="dropstart",CLASS_NAME_DROPUP_CENTER="dropup-center",CLASS_NAME_DROPDOWN_CENTER="dropdown-center",SELECTOR_DATA_TOGGLE$3='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',SELECTOR_DATA_TOGGLE_SHOWN=`${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`,SELECTOR_MENU=".dropdown-menu",SELECTOR_NAVBAR=".navbar",SELECTOR_NAVBAR_NAV=".navbar-nav",SELECTOR_VISIBLE_ITEMS=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",PLACEMENT_TOP=isRTL()?"top-end":"top-start",PLACEMENT_TOPEND=isRTL()?"top-start":"top-end",PLACEMENT_BOTTOM=isRTL()?"bottom-end":"bottom-start",PLACEMENT_BOTTOMEND=isRTL()?"bottom-start":"bottom-end",PLACEMENT_RIGHT=isRTL()?"left-start":"right-start",PLACEMENT_LEFT=isRTL()?"right-start":"left-start",PLACEMENT_TOPCENTER="top",PLACEMENT_BOTTOMCENTER="bottom",Default$9={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},DefaultType$9={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class Dropdown extends BaseComponent{constructor(e,t){super(e,t),this._popper=null,this._parent=this._element.parentNode,this._menu=SelectorEngine.next(this._element,SELECTOR_MENU)[0]||SelectorEngine.prev(this._element,SELECTOR_MENU)[0]||SelectorEngine.findOne(SELECTOR_MENU,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Default$9}static get DefaultType(){return DefaultType$9}static get NAME(){return NAME$a}toggle(){return this._isShown()?this.hide():this.show()}show(){if(isDisabled(this._element)||this._isShown())return;const e={relatedTarget:this._element};if(!EventHandler.trigger(this._element,EVENT_SHOW$5,e).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(SELECTOR_NAVBAR_NAV))for(const r of[].concat(...document.body.children))EventHandler.on(r,"mouseover",noop);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(CLASS_NAME_SHOW$6),this._element.classList.add(CLASS_NAME_SHOW$6),EventHandler.trigger(this._element,EVENT_SHOWN$5,e)}}hide(){if(isDisabled(this._element)||!this._isShown())return;const e={relatedTarget:this._element};this._completeHide(e)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(e){if(!EventHandler.trigger(this._element,EVENT_HIDE$5,e).defaultPrevented){if("ontouchstart"in document.documentElement)for(const r of[].concat(...document.body.children))EventHandler.off(r,"mouseover",noop);this._popper&&this._popper.destroy(),this._menu.classList.remove(CLASS_NAME_SHOW$6),this._element.classList.remove(CLASS_NAME_SHOW$6),this._element.setAttribute("aria-expanded","false"),Manipulator.removeDataAttribute(this._menu,"popper"),EventHandler.trigger(this._element,EVENT_HIDDEN$5,e)}}_getConfig(e){if(e=super._getConfig(e),typeof e.reference=="object"&&!isElement(e.reference)&&typeof e.reference.getBoundingClientRect!="function")throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return e}_createPopper(){if(typeof Popper>"u")throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;this._config.reference==="parent"?e=this._parent:isElement(this._config.reference)?e=getElement(this._config.reference):typeof this._config.reference=="object"&&(e=this._config.reference);const t=this._getPopperConfig();this._popper=createPopper(e,this._menu,t)}_isShown(){return this._menu.classList.contains(CLASS_NAME_SHOW$6)}_getPlacement(){const e=this._parent;if(e.classList.contains(CLASS_NAME_DROPEND))return PLACEMENT_RIGHT;if(e.classList.contains(CLASS_NAME_DROPSTART))return PLACEMENT_LEFT;if(e.classList.contains(CLASS_NAME_DROPUP_CENTER))return PLACEMENT_TOPCENTER;if(e.classList.contains(CLASS_NAME_DROPDOWN_CENTER))return PLACEMENT_BOTTOMCENTER;const t=getComputedStyle(this._menu).getPropertyValue("--bs-position").trim()==="end";return e.classList.contains(CLASS_NAME_DROPUP)?t?PLACEMENT_TOPEND:PLACEMENT_TOP:t?PLACEMENT_BOTTOMEND:PLACEMENT_BOTTOM}_detectNavbar(){return this._element.closest(SELECTOR_NAVBAR)!==null}_getOffset(){const{offset:e}=this._config;return typeof e=="string"?e.split(",").map(t=>Number.parseInt(t,10)):typeof e=="function"?t=>e(t,this._element):e}_getPopperConfig(){const e={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||this._config.display==="static")&&(Manipulator.setDataAttribute(this._menu,"popper","static"),e.modifiers=[{name:"applyStyles",enabled:!1}]),{...e,...execute(this._config.popperConfig,[e])}}_selectMenuItem({key:e,target:t}){const r=SelectorEngine.find(SELECTOR_VISIBLE_ITEMS,this._menu).filter(i=>isVisible(i));r.length&&getNextActiveElement(r,t,e===ARROW_DOWN_KEY$1,!r.includes(t)).focus()}static jQueryInterface(e){return this.each(function(){const t=Dropdown.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof t[e]>"u")throw new TypeError(`No method named "${e}"`);t[e]()}})}static clearMenus(e){if(e.button===RIGHT_MOUSE_BUTTON||e.type==="keyup"&&e.key!==TAB_KEY$1)return;const t=SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);for(const r of t){const i=Dropdown.getInstance(r);if(!i||i._config.autoClose===!1)continue;const s=e.composedPath(),l=s.includes(i._menu);if(s.includes(i._element)||i._config.autoClose==="inside"&&!l||i._config.autoClose==="outside"&&l||i._menu.contains(e.target)&&(e.type==="keyup"&&e.key===TAB_KEY$1||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;const u={relatedTarget:i._element};e.type==="click"&&(u.clickEvent=e),i._completeHide(u)}}static dataApiKeydownHandler(e){const t=/input|textarea/i.test(e.target.tagName),r=e.key===ESCAPE_KEY$2,i=[ARROW_UP_KEY$1,ARROW_DOWN_KEY$1].includes(e.key);if(!i&&!r||t&&!r)return;e.preventDefault();const s=this.matches(SELECTOR_DATA_TOGGLE$3)?this:SelectorEngine.prev(this,SELECTOR_DATA_TOGGLE$3)[0]||SelectorEngine.next(this,SELECTOR_DATA_TOGGLE$3)[0]||SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3,e.delegateTarget.parentNode),l=Dropdown.getOrCreateInstance(s);if(i){e.stopPropagation(),l.show(),l._selectMenuItem(e);return}l._isShown()&&(e.stopPropagation(),l.hide(),s.focus())}}EventHandler.on(document,EVENT_KEYDOWN_DATA_API,SELECTOR_DATA_TOGGLE$3,Dropdown.dataApiKeydownHandler);EventHandler.on(document,EVENT_KEYDOWN_DATA_API,SELECTOR_MENU,Dropdown.dataApiKeydownHandler);EventHandler.on(document,EVENT_CLICK_DATA_API$3,Dropdown.clearMenus);EventHandler.on(document,EVENT_KEYUP_DATA_API,Dropdown.clearMenus);EventHandler.on(document,EVENT_CLICK_DATA_API$3,SELECTOR_DATA_TOGGLE$3,function(n){n.preventDefault(),Dropdown.getOrCreateInstance(this).toggle()});defineJQueryPlugin(Dropdown);const NAME$9="backdrop",CLASS_NAME_FADE$4="fade",CLASS_NAME_SHOW$5="show",EVENT_MOUSEDOWN=`mousedown.bs.${NAME$9}`,Default$8={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},DefaultType$8={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Backdrop extends Config{constructor(e){super(),this._config=this._getConfig(e),this._isAppended=!1,this._element=null}static get Default(){return Default$8}static get DefaultType(){return DefaultType$8}static get NAME(){return NAME$9}show(e){if(!this._config.isVisible){execute(e);return}this._append();const t=this._getElement();this._config.isAnimated&&reflow(t),t.classList.add(CLASS_NAME_SHOW$5),this._emulateAnimation(()=>{execute(e)})}hide(e){if(!this._config.isVisible){execute(e);return}this._getElement().classList.remove(CLASS_NAME_SHOW$5),this._emulateAnimation(()=>{this.dispose(),execute(e)})}dispose(){this._isAppended&&(EventHandler.off(this._element,EVENT_MOUSEDOWN),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const e=document.createElement("div");e.className=this._config.className,this._config.isAnimated&&e.classList.add(CLASS_NAME_FADE$4),this._element=e}return this._element}_configAfterMerge(e){return e.rootElement=getElement(e.rootElement),e}_append(){if(this._isAppended)return;const e=this._getElement();this._config.rootElement.append(e),EventHandler.on(e,EVENT_MOUSEDOWN,()=>{execute(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(e){executeAfterTransition(e,this._getElement(),this._config.isAnimated)}}const NAME$8="focustrap",DATA_KEY$5="bs.focustrap",EVENT_KEY$5=`.${DATA_KEY$5}`,EVENT_FOCUSIN$2=`focusin${EVENT_KEY$5}`,EVENT_KEYDOWN_TAB=`keydown.tab${EVENT_KEY$5}`,TAB_KEY="Tab",TAB_NAV_FORWARD="forward",TAB_NAV_BACKWARD="backward",Default$7={autofocus:!0,trapElement:null},DefaultType$7={autofocus:"boolean",trapElement:"element"};class FocusTrap extends Config{constructor(e){super(),this._config=this._getConfig(e),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return Default$7}static get DefaultType(){return DefaultType$7}static get NAME(){return NAME$8}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),EventHandler.off(document,EVENT_KEY$5),EventHandler.on(document,EVENT_FOCUSIN$2,e=>this._handleFocusin(e)),EventHandler.on(document,EVENT_KEYDOWN_TAB,e=>this._handleKeydown(e)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,EventHandler.off(document,EVENT_KEY$5))}_handleFocusin(e){const{trapElement:t}=this._config;if(e.target===document||e.target===t||t.contains(e.target))return;const r=SelectorEngine.focusableChildren(t);r.length===0?t.focus():this._lastTabNavDirection===TAB_NAV_BACKWARD?r[r.length-1].focus():r[0].focus()}_handleKeydown(e){e.key===TAB_KEY&&(this._lastTabNavDirection=e.shiftKey?TAB_NAV_BACKWARD:TAB_NAV_FORWARD)}}const SELECTOR_FIXED_CONTENT=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",SELECTOR_STICKY_CONTENT=".sticky-top",PROPERTY_PADDING="padding-right",PROPERTY_MARGIN="margin-right";class ScrollBarHelper{constructor(){this._element=document.body}getWidth(){const e=document.documentElement.clientWidth;return Math.abs(window.innerWidth-e)}hide(){const e=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,PROPERTY_PADDING,t=>t+e),this._setElementAttributes(SELECTOR_FIXED_CONTENT,PROPERTY_PADDING,t=>t+e),this._setElementAttributes(SELECTOR_STICKY_CONTENT,PROPERTY_MARGIN,t=>t-e)}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,PROPERTY_PADDING),this._resetElementAttributes(SELECTOR_FIXED_CONTENT,PROPERTY_PADDING),this._resetElementAttributes(SELECTOR_STICKY_CONTENT,PROPERTY_MARGIN)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(e,t,r){const i=this.getWidth(),s=l=>{if(l!==this._element&&window.innerWidth>l.clientWidth+i)return;this._saveInitialAttribute(l,t);const u=window.getComputedStyle(l).getPropertyValue(t);l.style.setProperty(t,`${r(Number.parseFloat(u))}px`)};this._applyManipulationCallback(e,s)}_saveInitialAttribute(e,t){const r=e.style.getPropertyValue(t);r&&Manipulator.setDataAttribute(e,t,r)}_resetElementAttributes(e,t){const r=i=>{const s=Manipulator.getDataAttribute(i,t);if(s===null){i.style.removeProperty(t);return}Manipulator.removeDataAttribute(i,t),i.style.setProperty(t,s)};this._applyManipulationCallback(e,r)}_applyManipulationCallback(e,t){if(isElement(e)){t(e);return}for(const r of SelectorEngine.find(e,this._element))t(r)}}const NAME$7="modal",DATA_KEY$4="bs.modal",EVENT_KEY$4=`.${DATA_KEY$4}`,DATA_API_KEY$2=".data-api",ESCAPE_KEY$1="Escape",EVENT_HIDE$4=`hide${EVENT_KEY$4}`,EVENT_HIDE_PREVENTED$1=`hidePrevented${EVENT_KEY$4}`,EVENT_HIDDEN$4=`hidden${EVENT_KEY$4}`,EVENT_SHOW$4=`show${EVENT_KEY$4}`,EVENT_SHOWN$4=`shown${EVENT_KEY$4}`,EVENT_RESIZE$1=`resize${EVENT_KEY$4}`,EVENT_CLICK_DISMISS=`click.dismiss${EVENT_KEY$4}`,EVENT_MOUSEDOWN_DISMISS=`mousedown.dismiss${EVENT_KEY$4}`,EVENT_KEYDOWN_DISMISS$1=`keydown.dismiss${EVENT_KEY$4}`,EVENT_CLICK_DATA_API$2=`click${EVENT_KEY$4}${DATA_API_KEY$2}`,CLASS_NAME_OPEN="modal-open",CLASS_NAME_FADE$3="fade",CLASS_NAME_SHOW$4="show",CLASS_NAME_STATIC="modal-static",OPEN_SELECTOR$1=".modal.show",SELECTOR_DIALOG=".modal-dialog",SELECTOR_MODAL_BODY=".modal-body",SELECTOR_DATA_TOGGLE$2='[data-bs-toggle="modal"]',Default$6={backdrop:!0,focus:!0,keyboard:!0},DefaultType$6={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Modal extends BaseComponent{constructor(e,t){super(e,t),this._dialog=SelectorEngine.findOne(SELECTOR_DIALOG,this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new ScrollBarHelper,this._addEventListeners()}static get Default(){return Default$6}static get DefaultType(){return DefaultType$6}static get NAME(){return NAME$7}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){this._isShown||this._isTransitioning||EventHandler.trigger(this._element,EVENT_SHOW$4,{relatedTarget:e}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(CLASS_NAME_OPEN),this._adjustDialog(),this._backdrop.show(()=>this._showElement(e)))}hide(){!this._isShown||this._isTransitioning||EventHandler.trigger(this._element,EVENT_HIDE$4).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(CLASS_NAME_SHOW$4),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated()))}dispose(){EventHandler.off(window,EVENT_KEY$4),EventHandler.off(this._dialog,EVENT_KEY$4),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Backdrop({isVisible:!!this._config.backdrop,isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new FocusTrap({trapElement:this._element})}_showElement(e){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const t=SelectorEngine.findOne(SELECTOR_MODAL_BODY,this._dialog);t&&(t.scrollTop=0),reflow(this._element),this._element.classList.add(CLASS_NAME_SHOW$4);const r=()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,EventHandler.trigger(this._element,EVENT_SHOWN$4,{relatedTarget:e})};this._queueCallback(r,this._dialog,this._isAnimated())}_addEventListeners(){EventHandler.on(this._element,EVENT_KEYDOWN_DISMISS$1,e=>{if(e.key===ESCAPE_KEY$1){if(this._config.keyboard){this.hide();return}this._triggerBackdropTransition()}}),EventHandler.on(window,EVENT_RESIZE$1,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),EventHandler.on(this._element,EVENT_MOUSEDOWN_DISMISS,e=>{EventHandler.one(this._element,EVENT_CLICK_DISMISS,t=>{if(!(this._element!==e.target||this._element!==t.target)){if(this._config.backdrop==="static"){this._triggerBackdropTransition();return}this._config.backdrop&&this.hide()}})})}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(CLASS_NAME_OPEN),this._resetAdjustments(),this._scrollBar.reset(),EventHandler.trigger(this._element,EVENT_HIDDEN$4)})}_isAnimated(){return this._element.classList.contains(CLASS_NAME_FADE$3)}_triggerBackdropTransition(){if(EventHandler.trigger(this._element,EVENT_HIDE_PREVENTED$1).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,r=this._element.style.overflowY;r==="hidden"||this._element.classList.contains(CLASS_NAME_STATIC)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(CLASS_NAME_STATIC),this._queueCallback(()=>{this._element.classList.remove(CLASS_NAME_STATIC),this._queueCallback(()=>{this._element.style.overflowY=r},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const e=this._element.scrollHeight>document.documentElement.clientHeight,t=this._scrollBar.getWidth(),r=t>0;if(r&&!e){const i=isRTL()?"paddingLeft":"paddingRight";this._element.style[i]=`${t}px`}if(!r&&e){const i=isRTL()?"paddingRight":"paddingLeft";this._element.style[i]=`${t}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(e,t){return this.each(function(){const r=Modal.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof r[e]>"u")throw new TypeError(`No method named "${e}"`);r[e](t)}})}}EventHandler.on(document,EVENT_CLICK_DATA_API$2,SELECTOR_DATA_TOGGLE$2,function(n){const e=SelectorEngine.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&n.preventDefault(),EventHandler.one(e,EVENT_SHOW$4,i=>{i.defaultPrevented||EventHandler.one(e,EVENT_HIDDEN$4,()=>{isVisible(this)&&this.focus()})});const t=SelectorEngine.findOne(OPEN_SELECTOR$1);t&&Modal.getInstance(t).hide(),Modal.getOrCreateInstance(e).toggle(this)});enableDismissTrigger(Modal);defineJQueryPlugin(Modal);const NAME$6="offcanvas",DATA_KEY$3="bs.offcanvas",EVENT_KEY$3=`.${DATA_KEY$3}`,DATA_API_KEY$1=".data-api",EVENT_LOAD_DATA_API$2=`load${EVENT_KEY$3}${DATA_API_KEY$1}`,ESCAPE_KEY="Escape",CLASS_NAME_SHOW$3="show",CLASS_NAME_SHOWING$1="showing",CLASS_NAME_HIDING="hiding",CLASS_NAME_BACKDROP="offcanvas-backdrop",OPEN_SELECTOR=".offcanvas.show",EVENT_SHOW$3=`show${EVENT_KEY$3}`,EVENT_SHOWN$3=`shown${EVENT_KEY$3}`,EVENT_HIDE$3=`hide${EVENT_KEY$3}`,EVENT_HIDE_PREVENTED=`hidePrevented${EVENT_KEY$3}`,EVENT_HIDDEN$3=`hidden${EVENT_KEY$3}`,EVENT_RESIZE=`resize${EVENT_KEY$3}`,EVENT_CLICK_DATA_API$1=`click${EVENT_KEY$3}${DATA_API_KEY$1}`,EVENT_KEYDOWN_DISMISS=`keydown.dismiss${EVENT_KEY$3}`,SELECTOR_DATA_TOGGLE$1='[data-bs-toggle="offcanvas"]',Default$5={backdrop:!0,keyboard:!0,scroll:!1},DefaultType$5={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Offcanvas extends BaseComponent{constructor(e,t){super(e,t),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Default$5}static get DefaultType(){return DefaultType$5}static get NAME(){return NAME$6}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){if(this._isShown||EventHandler.trigger(this._element,EVENT_SHOW$3,{relatedTarget:e}).defaultPrevented)return;this._isShown=!0,this._backdrop.show(),this._config.scroll||new ScrollBarHelper().hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(CLASS_NAME_SHOWING$1);const r=()=>{(!this._config.scroll||this._config.backdrop)&&this._focustrap.activate(),this._element.classList.add(CLASS_NAME_SHOW$3),this._element.classList.remove(CLASS_NAME_SHOWING$1),EventHandler.trigger(this._element,EVENT_SHOWN$3,{relatedTarget:e})};this._queueCallback(r,this._element,!0)}hide(){if(!this._isShown||EventHandler.trigger(this._element,EVENT_HIDE$3).defaultPrevented)return;this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(CLASS_NAME_HIDING),this._backdrop.hide();const t=()=>{this._element.classList.remove(CLASS_NAME_SHOW$3,CLASS_NAME_HIDING),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||new ScrollBarHelper().reset(),EventHandler.trigger(this._element,EVENT_HIDDEN$3)};this._queueCallback(t,this._element,!0)}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const e=()=>{if(this._config.backdrop==="static"){EventHandler.trigger(this._element,EVENT_HIDE_PREVENTED);return}this.hide()},t=!!this._config.backdrop;return new Backdrop({className:CLASS_NAME_BACKDROP,isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?e:null})}_initializeFocusTrap(){return new FocusTrap({trapElement:this._element})}_addEventListeners(){EventHandler.on(this._element,EVENT_KEYDOWN_DISMISS,e=>{if(e.key===ESCAPE_KEY){if(this._config.keyboard){this.hide();return}EventHandler.trigger(this._element,EVENT_HIDE_PREVENTED)}})}static jQueryInterface(e){return this.each(function(){const t=Offcanvas.getOrCreateInstance(this,e);if(typeof e=="string"){if(t[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);t[e](this)}})}}EventHandler.on(document,EVENT_CLICK_DATA_API$1,SELECTOR_DATA_TOGGLE$1,function(n){const e=SelectorEngine.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&n.preventDefault(),isDisabled(this))return;EventHandler.one(e,EVENT_HIDDEN$3,()=>{isVisible(this)&&this.focus()});const t=SelectorEngine.findOne(OPEN_SELECTOR);t&&t!==e&&Offcanvas.getInstance(t).hide(),Offcanvas.getOrCreateInstance(e).toggle(this)});EventHandler.on(window,EVENT_LOAD_DATA_API$2,()=>{for(const n of SelectorEngine.find(OPEN_SELECTOR))Offcanvas.getOrCreateInstance(n).show()});EventHandler.on(window,EVENT_RESIZE,()=>{for(const n of SelectorEngine.find("[aria-modal][class*=show][class*=offcanvas-]"))getComputedStyle(n).position!=="fixed"&&Offcanvas.getOrCreateInstance(n).hide()});enableDismissTrigger(Offcanvas);defineJQueryPlugin(Offcanvas);const ARIA_ATTRIBUTE_PATTERN=/^aria-[\w-]*$/i,DefaultAllowlist={"*":["class","dir","id","lang","role",ARIA_ATTRIBUTE_PATTERN],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},uriAttributes=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),SAFE_URL_PATTERN=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,allowedAttribute=(n,e)=>{const t=n.nodeName.toLowerCase();return e.includes(t)?uriAttributes.has(t)?!!SAFE_URL_PATTERN.test(n.nodeValue):!0:e.filter(r=>r instanceof RegExp).some(r=>r.test(t))};function sanitizeHtml(n,e,t){if(!n.length)return n;if(t&&typeof t=="function")return t(n);const i=new window.DOMParser().parseFromString(n,"text/html"),s=[].concat(...i.body.querySelectorAll("*"));for(const l of s){const u=l.nodeName.toLowerCase();if(!Object.keys(e).includes(u)){l.remove();continue}const h=[].concat(...l.attributes),d=[].concat(e["*"]||[],e[u]||[]);for(const m of h)allowedAttribute(m,d)||l.removeAttribute(m.nodeName)}return i.body.innerHTML}const NAME$5="TemplateFactory",Default$4={allowList:DefaultAllowlist,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"<div></div>"},DefaultType$4={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},DefaultContentType={entry:"(string|element|function|null)",selector:"(string|element)"};class TemplateFactory extends Config{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return Default$4}static get DefaultType(){return DefaultType$4}static get NAME(){return NAME$5}getContent(){return Object.values(this._config.content).map(e=>this._resolvePossibleFunction(e)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){const e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(const[i,s]of Object.entries(this._config.content))this._setContent(e,s,i);const t=e.children[0],r=this._resolvePossibleFunction(this._config.extraClass);return r&&t.classList.add(...r.split(" ")),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(const[t,r]of Object.entries(e))super._typeCheckConfig({selector:t,entry:r},DefaultContentType)}_setContent(e,t,r){const i=SelectorEngine.findOne(r,e);if(i){if(t=this._resolvePossibleFunction(t),!t){i.remove();return}if(isElement(t)){this._putElementInTemplate(getElement(t),i);return}if(this._config.html){i.innerHTML=this._maybeSanitize(t);return}i.textContent=t}}_maybeSanitize(e){return this._config.sanitize?sanitizeHtml(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return execute(e,[this])}_putElementInTemplate(e,t){if(this._config.html){t.innerHTML="",t.append(e);return}t.textContent=e.textContent}}const NAME$4="tooltip",DISALLOWED_ATTRIBUTES=new Set(["sanitize","allowList","sanitizeFn"]),CLASS_NAME_FADE$2="fade",CLASS_NAME_MODAL="modal",CLASS_NAME_SHOW$2="show",SELECTOR_TOOLTIP_INNER=".tooltip-inner",SELECTOR_MODAL=`.${CLASS_NAME_MODAL}`,EVENT_MODAL_HIDE="hide.bs.modal",TRIGGER_HOVER="hover",TRIGGER_FOCUS="focus",TRIGGER_CLICK="click",TRIGGER_MANUAL="manual",EVENT_HIDE$2="hide",EVENT_HIDDEN$2="hidden",EVENT_SHOW$2="show",EVENT_SHOWN$2="shown",EVENT_INSERTED="inserted",EVENT_CLICK$1="click",EVENT_FOCUSIN$1="focusin",EVENT_FOCUSOUT$1="focusout",EVENT_MOUSEENTER="mouseenter",EVENT_MOUSELEAVE="mouseleave",AttachmentMap={AUTO:"auto",TOP:"top",RIGHT:isRTL()?"left":"right",BOTTOM:"bottom",LEFT:isRTL()?"right":"left"},Default$3={allowList:DefaultAllowlist,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',title:"",trigger:"hover focus"},DefaultType$3={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Tooltip extends BaseComponent{constructor(e,t){if(typeof Popper>"u")throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(e,t),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Default$3}static get DefaultType(){return DefaultType$3}static get NAME(){return NAME$4}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){if(this._isEnabled){if(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()){this._leave();return}this._enter()}}dispose(){clearTimeout(this._timeout),EventHandler.off(this._element.closest(SELECTOR_MODAL),EVENT_MODAL_HIDE,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if(this._element.style.display==="none")throw new Error("Please use show on visible elements");if(!(this._isWithContent()&&this._isEnabled))return;const e=EventHandler.trigger(this._element,this.constructor.eventName(EVENT_SHOW$2)),r=(findShadowRoot(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!r)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:s}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(s.append(i),EventHandler.trigger(this._element,this.constructor.eventName(EVENT_INSERTED))),this._popper=this._createPopper(i),i.classList.add(CLASS_NAME_SHOW$2),"ontouchstart"in document.documentElement)for(const u of[].concat(...document.body.children))EventHandler.on(u,"mouseover",noop);const l=()=>{EventHandler.trigger(this._element,this.constructor.eventName(EVENT_SHOWN$2)),this._isHovered===!1&&this._leave(),this._isHovered=!1};this._queueCallback(l,this.tip,this._isAnimated())}hide(){if(!this._isShown()||EventHandler.trigger(this._element,this.constructor.eventName(EVENT_HIDE$2)).defaultPrevented)return;if(this._getTipElement().classList.remove(CLASS_NAME_SHOW$2),"ontouchstart"in document.documentElement)for(const i of[].concat(...document.body.children))EventHandler.off(i,"mouseover",noop);this._activeTrigger[TRIGGER_CLICK]=!1,this._activeTrigger[TRIGGER_FOCUS]=!1,this._activeTrigger[TRIGGER_HOVER]=!1,this._isHovered=null;const r=()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),EventHandler.trigger(this._element,this.constructor.eventName(EVENT_HIDDEN$2)))};this._queueCallback(r,this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return!!this._getTitle()}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){const t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove(CLASS_NAME_FADE$2,CLASS_NAME_SHOW$2),t.classList.add(`bs-${this.constructor.NAME}-auto`);const r=getUID(this.constructor.NAME).toString();return t.setAttribute("id",r),this._isAnimated()&&t.classList.add(CLASS_NAME_FADE$2),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new TemplateFactory({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[SELECTOR_TOOLTIP_INNER]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(CLASS_NAME_FADE$2)}_isShown(){return this.tip&&this.tip.classList.contains(CLASS_NAME_SHOW$2)}_createPopper(e){const t=execute(this._config.placement,[this,e,this._element]),r=AttachmentMap[t.toUpperCase()];return createPopper(this._element,e,this._getPopperConfig(r))}_getOffset(){const{offset:e}=this._config;return typeof e=="string"?e.split(",").map(t=>Number.parseInt(t,10)):typeof e=="function"?t=>e(t,this._element):e}_resolvePossibleFunction(e){return execute(e,[this._element])}_getPopperConfig(e){const t={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:r=>{this._getTipElement().setAttribute("data-popper-placement",r.state.placement)}}]};return{...t,...execute(this._config.popperConfig,[t])}}_setListeners(){const e=this._config.trigger.split(" ");for(const t of e)if(t==="click")EventHandler.on(this._element,this.constructor.eventName(EVENT_CLICK$1),this._config.selector,r=>{this._initializeOnDelegatedTarget(r).toggle()});else if(t!==TRIGGER_MANUAL){const r=t===TRIGGER_HOVER?this.constructor.eventName(EVENT_MOUSEENTER):this.constructor.eventName(EVENT_FOCUSIN$1),i=t===TRIGGER_HOVER?this.constructor.eventName(EVENT_MOUSELEAVE):this.constructor.eventName(EVENT_FOCUSOUT$1);EventHandler.on(this._element,r,this._config.selector,s=>{const l=this._initializeOnDelegatedTarget(s);l._activeTrigger[s.type==="focusin"?TRIGGER_FOCUS:TRIGGER_HOVER]=!0,l._enter()}),EventHandler.on(this._element,i,this._config.selector,s=>{const l=this._initializeOnDelegatedTarget(s);l._activeTrigger[s.type==="focusout"?TRIGGER_FOCUS:TRIGGER_HOVER]=l._element.contains(s.relatedTarget),l._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},EventHandler.on(this._element.closest(SELECTOR_MODAL),EVENT_MODAL_HIDE,this._hideModalHandler)}_fixTitle(){const e=this._element.getAttribute("title");e&&(!this._element.getAttribute("aria-label")&&!this._element.textContent.trim()&&this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){if(this._isShown()||this._isHovered){this._isHovered=!0;return}this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show)}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){const t=Manipulator.getDataAttributes(this._element);for(const r of Object.keys(t))DISALLOWED_ATTRIBUTES.has(r)&&delete t[r];return e={...t,...typeof e=="object"&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=e.container===!1?document.body:getElement(e.container),typeof e.delay=="number"&&(e.delay={show:e.delay,hide:e.delay}),typeof e.title=="number"&&(e.title=e.title.toString()),typeof e.content=="number"&&(e.content=e.content.toString()),e}_getDelegateConfig(){const e={};for(const[t,r]of Object.entries(this._config))this.constructor.Default[t]!==r&&(e[t]=r);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each(function(){const t=Tooltip.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof t[e]>"u")throw new TypeError(`No method named "${e}"`);t[e]()}})}}defineJQueryPlugin(Tooltip);const NAME$3="popover",SELECTOR_TITLE=".popover-header",SELECTOR_CONTENT=".popover-body",Default$2={...Tooltip.Default,content:"",offset:[0,8],placement:"right",template:'<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>',trigger:"click"},DefaultType$2={...Tooltip.DefaultType,content:"(null|string|element|function)"};class Popover extends Tooltip{static get Default(){return Default$2}static get DefaultType(){return DefaultType$2}static get NAME(){return NAME$3}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[SELECTOR_TITLE]:this._getTitle(),[SELECTOR_CONTENT]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(e){return this.each(function(){const t=Popover.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof t[e]>"u")throw new TypeError(`No method named "${e}"`);t[e]()}})}}defineJQueryPlugin(Popover);const NAME$2="scrollspy",DATA_KEY$2="bs.scrollspy",EVENT_KEY$2=`.${DATA_KEY$2}`,DATA_API_KEY=".data-api",EVENT_ACTIVATE=`activate${EVENT_KEY$2}`,EVENT_CLICK=`click${EVENT_KEY$2}`,EVENT_LOAD_DATA_API$1=`load${EVENT_KEY$2}${DATA_API_KEY}`,CLASS_NAME_DROPDOWN_ITEM="dropdown-item",CLASS_NAME_ACTIVE$1="active",SELECTOR_DATA_SPY='[data-bs-spy="scroll"]',SELECTOR_TARGET_LINKS="[href]",SELECTOR_NAV_LIST_GROUP=".nav, .list-group",SELECTOR_NAV_LINKS=".nav-link",SELECTOR_NAV_ITEMS=".nav-item",SELECTOR_LIST_ITEMS=".list-group-item",SELECTOR_LINK_ITEMS=`${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`,SELECTOR_DROPDOWN=".dropdown",SELECTOR_DROPDOWN_TOGGLE$1=".dropdown-toggle",Default$1={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},DefaultType$1={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class ScrollSpy extends BaseComponent{constructor(e,t){super(e,t),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement=getComputedStyle(this._element).overflowY==="visible"?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return Default$1}static get DefaultType(){return DefaultType$1}static get NAME(){return NAME$2}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const e of this._observableSections.values())this._observer.observe(e)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(e){return e.target=getElement(e.target)||document.body,e.rootMargin=e.offset?`${e.offset}px 0px -30%`:e.rootMargin,typeof e.threshold=="string"&&(e.threshold=e.threshold.split(",").map(t=>Number.parseFloat(t))),e}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(EventHandler.off(this._config.target,EVENT_CLICK),EventHandler.on(this._config.target,EVENT_CLICK,SELECTOR_TARGET_LINKS,e=>{const t=this._observableSections.get(e.target.hash);if(t){e.preventDefault();const r=this._rootElement||window,i=t.offsetTop-this._element.offsetTop;if(r.scrollTo){r.scrollTo({top:i,behavior:"smooth"});return}r.scrollTop=i}}))}_getNewObserver(){const e={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver(t=>this._observerCallback(t),e)}_observerCallback(e){const t=l=>this._targetLinks.get(`#${l.target.id}`),r=l=>{this._previousScrollData.visibleEntryTop=l.target.offsetTop,this._process(t(l))},i=(this._rootElement||document.documentElement).scrollTop,s=i>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=i;for(const l of e){if(!l.isIntersecting){this._activeTarget=null,this._clearActiveClass(t(l));continue}const u=l.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&u){if(r(l),!i)return;continue}!s&&!u&&r(l)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const e=SelectorEngine.find(SELECTOR_TARGET_LINKS,this._config.target);for(const t of e){if(!t.hash||isDisabled(t))continue;const r=SelectorEngine.findOne(decodeURI(t.hash),this._element);isVisible(r)&&(this._targetLinks.set(decodeURI(t.hash),t),this._observableSections.set(t.hash,r))}}_process(e){this._activeTarget!==e&&(this._clearActiveClass(this._config.target),this._activeTarget=e,e.classList.add(CLASS_NAME_ACTIVE$1),this._activateParents(e),EventHandler.trigger(this._element,EVENT_ACTIVATE,{relatedTarget:e}))}_activateParents(e){if(e.classList.contains(CLASS_NAME_DROPDOWN_ITEM)){SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1,e.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);return}for(const t of SelectorEngine.parents(e,SELECTOR_NAV_LIST_GROUP))for(const r of SelectorEngine.prev(t,SELECTOR_LINK_ITEMS))r.classList.add(CLASS_NAME_ACTIVE$1)}_clearActiveClass(e){e.classList.remove(CLASS_NAME_ACTIVE$1);const t=SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`,e);for(const r of t)r.classList.remove(CLASS_NAME_ACTIVE$1)}static jQueryInterface(e){return this.each(function(){const t=ScrollSpy.getOrCreateInstance(this,e);if(typeof e=="string"){if(t[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);t[e]()}})}}EventHandler.on(window,EVENT_LOAD_DATA_API$1,()=>{for(const n of SelectorEngine.find(SELECTOR_DATA_SPY))ScrollSpy.getOrCreateInstance(n)});defineJQueryPlugin(ScrollSpy);const NAME$1="tab",DATA_KEY$1="bs.tab",EVENT_KEY$1=`.${DATA_KEY$1}`,EVENT_HIDE$1=`hide${EVENT_KEY$1}`,EVENT_HIDDEN$1=`hidden${EVENT_KEY$1}`,EVENT_SHOW$1=`show${EVENT_KEY$1}`,EVENT_SHOWN$1=`shown${EVENT_KEY$1}`,EVENT_CLICK_DATA_API=`click${EVENT_KEY$1}`,EVENT_KEYDOWN=`keydown${EVENT_KEY$1}`,EVENT_LOAD_DATA_API=`load${EVENT_KEY$1}`,ARROW_LEFT_KEY="ArrowLeft",ARROW_RIGHT_KEY="ArrowRight",ARROW_UP_KEY="ArrowUp",ARROW_DOWN_KEY="ArrowDown",HOME_KEY="Home",END_KEY="End",CLASS_NAME_ACTIVE="active",CLASS_NAME_FADE$1="fade",CLASS_NAME_SHOW$1="show",CLASS_DROPDOWN="dropdown",SELECTOR_DROPDOWN_TOGGLE=".dropdown-toggle",SELECTOR_DROPDOWN_MENU=".dropdown-menu",NOT_SELECTOR_DROPDOWN_TOGGLE=`:not(${SELECTOR_DROPDOWN_TOGGLE})`,SELECTOR_TAB_PANEL='.list-group, .nav, [role="tablist"]',SELECTOR_OUTER=".nav-item, .list-group-item",SELECTOR_INNER=`.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`,SELECTOR_DATA_TOGGLE='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',SELECTOR_INNER_ELEM=`${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`,SELECTOR_DATA_TOGGLE_ACTIVE=`.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`;class Tab extends BaseComponent{constructor(e){super(e),this._parent=this._element.closest(SELECTOR_TAB_PANEL),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),EventHandler.on(this._element,EVENT_KEYDOWN,t=>this._keydown(t)))}static get NAME(){return NAME$1}show(){const e=this._element;if(this._elemIsActive(e))return;const t=this._getActiveElem(),r=t?EventHandler.trigger(t,EVENT_HIDE$1,{relatedTarget:e}):null;EventHandler.trigger(e,EVENT_SHOW$1,{relatedTarget:t}).defaultPrevented||r&&r.defaultPrevented||(this._deactivate(t,e),this._activate(e,t))}_activate(e,t){if(!e)return;e.classList.add(CLASS_NAME_ACTIVE),this._activate(SelectorEngine.getElementFromSelector(e));const r=()=>{if(e.getAttribute("role")!=="tab"){e.classList.add(CLASS_NAME_SHOW$1);return}e.removeAttribute("tabindex"),e.setAttribute("aria-selected",!0),this._toggleDropDown(e,!0),EventHandler.trigger(e,EVENT_SHOWN$1,{relatedTarget:t})};this._queueCallback(r,e,e.classList.contains(CLASS_NAME_FADE$1))}_deactivate(e,t){if(!e)return;e.classList.remove(CLASS_NAME_ACTIVE),e.blur(),this._deactivate(SelectorEngine.getElementFromSelector(e));const r=()=>{if(e.getAttribute("role")!=="tab"){e.classList.remove(CLASS_NAME_SHOW$1);return}e.setAttribute("aria-selected",!1),e.setAttribute("tabindex","-1"),this._toggleDropDown(e,!1),EventHandler.trigger(e,EVENT_HIDDEN$1,{relatedTarget:t})};this._queueCallback(r,e,e.classList.contains(CLASS_NAME_FADE$1))}_keydown(e){if(![ARROW_LEFT_KEY,ARROW_RIGHT_KEY,ARROW_UP_KEY,ARROW_DOWN_KEY,HOME_KEY,END_KEY].includes(e.key))return;e.stopPropagation(),e.preventDefault();const t=this._getChildren().filter(i=>!isDisabled(i));let r;if([HOME_KEY,END_KEY].includes(e.key))r=t[e.key===HOME_KEY?0:t.length-1];else{const i=[ARROW_RIGHT_KEY,ARROW_DOWN_KEY].includes(e.key);r=getNextActiveElement(t,e.target,i,!0)}r&&(r.focus({preventScroll:!0}),Tab.getOrCreateInstance(r).show())}_getChildren(){return SelectorEngine.find(SELECTOR_INNER_ELEM,this._parent)}_getActiveElem(){return this._getChildren().find(e=>this._elemIsActive(e))||null}_setInitialAttributes(e,t){this._setAttributeIfNotExists(e,"role","tablist");for(const r of t)this._setInitialAttributesOnChild(r)}_setInitialAttributesOnChild(e){e=this._getInnerElement(e);const t=this._elemIsActive(e),r=this._getOuterElement(e);e.setAttribute("aria-selected",t),r!==e&&this._setAttributeIfNotExists(r,"role","presentation"),t||e.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(e,"role","tab"),this._setInitialAttributesOnTargetPanel(e)}_setInitialAttributesOnTargetPanel(e){const t=SelectorEngine.getElementFromSelector(e);t&&(this._setAttributeIfNotExists(t,"role","tabpanel"),e.id&&this._setAttributeIfNotExists(t,"aria-labelledby",`${e.id}`))}_toggleDropDown(e,t){const r=this._getOuterElement(e);if(!r.classList.contains(CLASS_DROPDOWN))return;const i=(s,l)=>{const u=SelectorEngine.findOne(s,r);u&&u.classList.toggle(l,t)};i(SELECTOR_DROPDOWN_TOGGLE,CLASS_NAME_ACTIVE),i(SELECTOR_DROPDOWN_MENU,CLASS_NAME_SHOW$1),r.setAttribute("aria-expanded",t)}_setAttributeIfNotExists(e,t,r){e.hasAttribute(t)||e.setAttribute(t,r)}_elemIsActive(e){return e.classList.contains(CLASS_NAME_ACTIVE)}_getInnerElement(e){return e.matches(SELECTOR_INNER_ELEM)?e:SelectorEngine.findOne(SELECTOR_INNER_ELEM,e)}_getOuterElement(e){return e.closest(SELECTOR_OUTER)||e}static jQueryInterface(e){return this.each(function(){const t=Tab.getOrCreateInstance(this);if(typeof e=="string"){if(t[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);t[e]()}})}}EventHandler.on(document,EVENT_CLICK_DATA_API,SELECTOR_DATA_TOGGLE,function(n){["A","AREA"].includes(this.tagName)&&n.preventDefault(),!isDisabled(this)&&Tab.getOrCreateInstance(this).show()});EventHandler.on(window,EVENT_LOAD_DATA_API,()=>{for(const n of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE))Tab.getOrCreateInstance(n)});defineJQueryPlugin(Tab);const NAME="toast",DATA_KEY="bs.toast",EVENT_KEY=`.${DATA_KEY}`,EVENT_MOUSEOVER=`mouseover${EVENT_KEY}`,EVENT_MOUSEOUT=`mouseout${EVENT_KEY}`,EVENT_FOCUSIN=`focusin${EVENT_KEY}`,EVENT_FOCUSOUT=`focusout${EVENT_KEY}`,EVENT_HIDE=`hide${EVENT_KEY}`,EVENT_HIDDEN=`hidden${EVENT_KEY}`,EVENT_SHOW=`show${EVENT_KEY}`,EVENT_SHOWN=`shown${EVENT_KEY}`,CLASS_NAME_FADE="fade",CLASS_NAME_HIDE="hide",CLASS_NAME_SHOW="show",CLASS_NAME_SHOWING="showing",DefaultType={animation:"boolean",autohide:"boolean",delay:"number"},Default={animation:!0,autohide:!0,delay:5e3};class Toast extends BaseComponent{constructor(e,t){super(e,t),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return Default}static get DefaultType(){return DefaultType}static get NAME(){return NAME}show(){if(EventHandler.trigger(this._element,EVENT_SHOW).defaultPrevented)return;this._clearTimeout(),this._config.animation&&this._element.classList.add(CLASS_NAME_FADE);const t=()=>{this._element.classList.remove(CLASS_NAME_SHOWING),EventHandler.trigger(this._element,EVENT_SHOWN),this._maybeScheduleHide()};this._element.classList.remove(CLASS_NAME_HIDE),reflow(this._element),this._element.classList.add(CLASS_NAME_SHOW,CLASS_NAME_SHOWING),this._queueCallback(t,this._element,this._config.animation)}hide(){if(!this.isShown()||EventHandler.trigger(this._element,EVENT_HIDE).defaultPrevented)return;const t=()=>{this._element.classList.add(CLASS_NAME_HIDE),this._element.classList.remove(CLASS_NAME_SHOWING,CLASS_NAME_SHOW),EventHandler.trigger(this._element,EVENT_HIDDEN)};this._element.classList.add(CLASS_NAME_SHOWING),this._queueCallback(t,this._element,this._config.animation)}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(CLASS_NAME_SHOW),super.dispose()}isShown(){return this._element.classList.contains(CLASS_NAME_SHOW)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(e,t){switch(e.type){case"mouseover":case"mouseout":{this._hasMouseInteraction=t;break}case"focusin":case"focusout":{this._hasKeyboardInteraction=t;break}}if(t){this._clearTimeout();return}const r=e.relatedTarget;this._element===r||this._element.contains(r)||this._maybeScheduleHide()}_setListeners(){EventHandler.on(this._element,EVENT_MOUSEOVER,e=>this._onInteraction(e,!0)),EventHandler.on(this._element,EVENT_MOUSEOUT,e=>this._onInteraction(e,!1)),EventHandler.on(this._element,EVENT_FOCUSIN,e=>this._onInteraction(e,!0)),EventHandler.on(this._element,EVENT_FOCUSOUT,e=>this._onInteraction(e,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(e){return this.each(function(){const t=Toast.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof t[e]>"u")throw new TypeError(`No method named "${e}"`);t[e](this)}})}}enableDismissTrigger(Toast);defineJQueryPlugin(Toast);class AutoLookUpAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");P(this,"makeQuery",(e,t)=>{let r="";return typeof t=="number"&&(r=`${e.code} = ${t}`),typeof t=="string"&&(r=`${e.code} = "${t}"`),this.props.condition.queryString!==""&&(r=`${r} and (${this.props.condition.queryString})`),r});P(this,"getUpdateRecords",async(e,t)=>await new index_browser.KintoneRestAPIClient().record.getAllRecords({app:this.props.lookupField.app.id,fields:["$id"],condition:this.makeQuery(e,t)}));P(this,"convertForLookup",(e,t,r)=>e.map(i=>({id:Number(i.$id.value),record:{[t.code]:{value:r}}})));P(this,"updateLookupTarget",async e=>{if(e&&e.length>0)try{const r=await new index_browser.KintoneRestAPIClient().record.updateAllRecords({app:this.props.lookupField.app.id,records:e});return!0}catch(t){if(t instanceof index_browser.KintoneAllRecordsError)return this.showError(this.props.lookupField.app,this.props.lookupField.fields[0],t,e.length),!1;throw t}return!1});P(this,"showSpinnerModel",(e,t)=>{let r=$("#alcLookupModal");if(r.length===0){const i=`<div class="bs-scope">
|
||
<div class="modal" id="alcLookupModal" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
|
||
<div class="modal-dialog-centered">
|
||
<div class="modal-dialog modal-content">
|
||
<div class="modal-header">
|
||
<h1 class="modal-title fs-5" id="alcLookupModalLabel">ルックアップ同期処理</h1>
|
||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<div class="row" id="app${e.id}_${t.code}">
|
||
<div class="spinner-border text-secondary col-1 " role="alert"></div>
|
||
<div class="col">${e.name}</div>
|
||
</div>
|
||
</div>
|
||
<div class="modal-footer">
|
||
<button type="button" class="btn btn-primary" data-bs-dismiss="modal">OK</button>
|
||
</div>
|
||
</div></div></div></div>`;$(i).appendTo("body"),r=$("#alcLookupModal"),r.get()[0].addEventListener("hidden.bs.modal",s=>{Modal.getOrCreateInstance(r.get()[0]).dispose(),$("#alcLookupModal").parent().remove()})}else{const i=$("#alcLookupModal .modal-body"),s=`
|
||
<div class="row" id="app${e.id}_${t.code}">
|
||
<div class="spinner-border text-secondary col-1 " role="alert">
|
||
</div>
|
||
<div class="col">${e.name}</div>
|
||
<div>`;i.append(s)}Modal.getOrCreateInstance(r.get()[0]).show()});P(this,"showResult",(e,t,r)=>{const i=$(`#alcLookupModal .modal-body #app${e.id}_${t.code}`),s=` <div class="col-1 text-success">✔</div>
|
||
<div class="col">${e.name}</div>
|
||
<div class="col">更新件数:${r}件</div>`;i.html(s)});P(this,"showError",(e,t,r,i)=>{const s=r.error.message,l=r.numOfProcessedRecords,u=r.numOfAllRecords,h=$(`#alcLookupModal .modal-body #app${e.id}_${t.code}`),d=`<div class="col-1 text-danger">✖</div>
|
||
<div class="col">${e.name}</div>
|
||
<div class="col">更新件数:${l}/${u}</div>
|
||
<div class="row text-danger">${s}<div>`;h.html(d)});P(this,"closeDialog",()=>{const e=$("#alcLookupModal");Modal.getOrCreateInstance(e.get()[0]).dispose(),$("#alcLookupModal").parent().remove()});this.name="ルックアップ更新",this.actionProps=[],this.props={},this.register()}async process(e,t,r){this.actionProps=e.actionProps,this.props={...e.ActionValue,condition:JSON.parse(e.ActionValue.condition)};let i={canNext:!0,result:""};try{const s=this.props.lookupField.fields.filter(_=>_.lookup&&_.lookup.relatedApp.app===String(kintone.app.getId()));if(!s||s.length===0)throw new Error(`ルックアップの設定は不正です。${this.props.lookupField.fields[0].label} `);const l=this.props.lookupField.fields[0],u=t.record[l.lookup.relatedKeyField].value,h=await this.getUpdateRecords(l,u);if(h.length===0)return i;const d=this.convertForLookup(h,l,u);console.log("updateRecords",d),this.showSpinnerModel(this.props.lookupField.app,l),await this.updateLookupTarget(d)&&this.showResult(this.props.lookupField.app,l,d.length)}catch(s){this.closeDialog(),r.errors.handleError(s,e,"ルックアップ更新中例外が発生しました"),i.canNext=!1}return i}register(){actionAddins[this.name]=this}}new AutoLookUpAction;class FieldDisableAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="編集可/不可",this.actionProps=[],this.props={field:{code:""},editable:"",condition:""},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("editable"in e.ActionValue))return i;this.props=e.ActionValue;const s=this.getConditionResult(r),l=t.record;if(!(this.props.field.code in l))throw new Error(`フィールド「${this.props.field.code}」が見つかりません。`);return s&&(this.props.editable==="編集可"?l[this.props.field.code].disabled=!1:this.props.editable==="編集不可"&&(l[this.props.field.code].disabled=!0)),i={canNext:!0,result:!0},i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}getConditionResult(e){const t=this.getCondition(this.props.condition);return t?t.evaluate(t.root,e):!0}getCondition(e){try{const t=new ConditionTree;return t.fromJson(e),t.getConditions(t.root).length>0?t:null}catch{return null}}register(){actionAddins[this.name]=this}}new FieldDisableAction;class StyleFieldAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="条件書式表示",this.actionProps=[],this.props={field:{code:""},fontColor:"",bgColor:"",fontStyle:[],allRow:"",condition:""},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{return this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("allRow"in e.ActionValue)||(this.props=e.ActionValue,console.log(t.type),t.type==="app.record.index.show"?this.setStyleForView(t,this.props,r):t.type==="app.record.detail.show"?this.setStyleForDetail(t,this.props,r):(t.type.includes("app.record.create.change.")||t.type.includes("app.record.edit.change."))&&this.setStyleForEdit(t,this.props,r),i={canNext:!0,result:!0}),i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}setStyleForEdit(e,t,r){const i=document.getElementById("record-gaia");i&&Array.from(i.getElementsByTagName("span")).filter(s=>s.innerText===t.field.code).map(s=>{var l,u,h;return(h=(u=(l=s.parentElement)==null?void 0:l.nextElementSibling)==null?void 0:u.querySelector(".input-text-outer-cybozu"))==null?void 0:h.firstElementChild}).filter(s=>!!s).forEach(s=>{this.getConditionResult(this.getCondition(t.condition),r)?this.setFieldStyle(t,s):s.removeAttribute("style")})}setStyleForDetail(e,t,r){const i=kintone.app.record.getFieldElement(t.field.code);if(!i)return;const s=this.getCondition(t.condition);this.getConditionResult(s,r)&&this.setFieldStyle(t,i)}setStyleForView(e,t,r){const i=e.records,s=kintone.app.getFieldElements(t.field.code);if(!s)return;let l;const u=this.getCondition(t.condition);i.forEach((h,d)=>{const m={variables:r.variables,record:h,errors:r.errors};this.getConditionResult(u,m)&&(l=s[d],t.allRow==="行全体"&&(l=s[d].parentElement),l&&this.setFieldStyle(t,l))})}setFieldStyle(e,t){if(e.fontColor&&(t.style.color=e.fontColor),e.bgColor&&(t.style.backgroundColor=e.bgColor),e.fontStyle.length>0){e.fontStyle.includes("斜体")&&(t.style.fontStyle="italic"),e.fontStyle.includes("太字")&&(t.style.fontWeight="bold");let r="";e.fontStyle.includes("下線")&&(r="underline"),e.fontStyle.includes("打ち消し線")&&(r=r?r+" line-through":"line-through"),r&&(t.style.textDecoration=r)}}getConditionResult(e,t){return e?e.evaluate(e.root,t):!0}getCondition(e){try{const t=new ConditionTree;return t.fromJson(e),t.getConditions(t.root).length>0?t:null}catch{return null}}register(){actionAddins[this.name]=this}}new StyleFieldAction;class DateTimeCalcAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="日時を加算/減算する",this.actionProps=[],this.props={verName:{name:""},calcOption:"",resultVerName:"",year:"0",month:"0",date:"0",hour:"0",minute:"0",second:"0"},this.register()}isDateValue(e){let t,r=e.match(/(\d{4})-(\d{1})-(\d{1})$/),i=e.match(/(\d{4})-(\d{2})-(\d{2})$/),s=e.match(/(\d{4})-(\d{2})-(\d{1})$/),l=e.match(/(\d{4})-(\d{1})-(\d{2})$/),u=e.match(/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}).(\d{2,3})Z$/),h=e.match(/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$/);if(t=new Date(e),t!==void 0&&!isNaN(t.getDate())&&i===null&&r===null&&s===null&&l===null&&h===null&&u===null)throw new Error("計算の基準日となる値が、適切な日付・日時の形式ではありません。「日時を加算/減算する」コンポーネントの処理を中断しました。");return!0}valueToNumber(e,t,r){const i=(l,u)=>u.split(".").reduce((h,d)=>(h||{})[d],l);r==="変数"&&isNaN(Number(t))&&(t=i(e.variables,t));let s=Number(t);if(!isFinite(s))throw new Error("計算値が、数値ではありません。「日時を加算/減算する」コンポーネントの処理を中断しました。");return s}calcDate(e,t,r,i,s,l,u){let h;return e=new Date(e),e.setFullYear(e.getFullYear()+t),e.setMonth(e.getMonth()+r),e.setDate(e.getDate()+i),e.setHours(e.getHours()+s),e.setMinutes(e.getMinutes()+l),e.setSeconds(e.getSeconds()+u),h=e.toISOString(),h}async process(e,t,r){let i={canNext:!0,result:!1};try{this.actionProps=e.actionProps,this.props=e.ActionValue;const l=((h,d)=>d.split(".").reduce((m,_)=>(m||{})[_],h))(r.variables,this.props.verName.name);if(!l)throw new Error("基準値となる変数の値が空、または存在しません。「日時を加算/減算する」コンポーネントの処理を中断しました。");let u;if(u=this.isDateValue(l),u){let h=this.props.calcOption,d=this.valueToNumber(r,this.props.year,h),m=this.valueToNumber(r,this.props.month,h),_=this.valueToNumber(r,this.props.date,h),S=this.valueToNumber(r,this.props.hour,h),C=this.valueToNumber(r,this.props.minute,h),T=this.valueToNumber(r,this.props.second,h),O;O=this.calcDate(l,d,m,_,S,C,T),r.variables[this.props.resultVerName]=O}return i={canNext:!0,result:!0},i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}register(){actionAddins[this.name]=this}}new DateTimeCalcAction;class EndOfMonthAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="月末算出",this.actionProps=[],this.props={verNameGet:"",verName:{name:""}},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("verName"in e.ActionValue)&&!("verNameGet"in e.ActionValue))return i;this.props=e.ActionValue;let l=((_,S)=>S.split(".").reduce((C,T)=>(C||{})[T],_))(r.variables,this.props.verNameGet),u=new Date(l),h=u.getFullYear(),d=u.getMonth()+1,m=new Date(h,d,0);return this.props.verName&&this.props.verName.name!==""&&(r.variables[this.props.verName.name]=m.toISOString()),i={canNext:!0,result:!0},i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}register(){actionAddins[this.name]=this}}new EndOfMonthAction;class DateSpecifiedAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="日付指定",this.actionProps=[],this.props={verNameGet:"",newYear:0,newMonth:0,newDay:0,verName:{name:""}},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("verName"in e.ActionValue)&&!("verNameGet"in e.ActionValue))return i;this.props=e.ActionValue;let l=((h,d)=>d.split(".").reduce((m,_)=>(m||{})[_],h))(r.variables,this.props.verNameGet),u=new Date(l);if(l==null||l===""||isNaN(u.getDate()))throw new Error("Invalid time value");return u.setFullYear(this.props.newYear>=1900&&this.props.newYear<=9999?this.props.newYear:u.getFullYear()),u.setMonth(this.props.newMonth>=1&&this.props.newMonth<=12?this.props.newMonth-1:u.getMonth()),u.setDate(this.props.newDay>=1&&this.props.newDay<=31?this.props.newDay:u.getDate()),this.props.verName&&this.props.verName.name!==""&&(r.variables[this.props.verName.name]=u.toISOString()),i={canNext:!0,result:!0},i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}register(){actionAddins[this.name]=this}}new DateSpecifiedAction;class Snipper{constructor(e){P(this,"spinnerElement");P(this,"container");this.container=$(e??"body"),this.spinnerElement=this.createSpinner()}createSpinner(){const e=['<div class="bs-scope alc-loading alc-dnone">','<div class="spinner-border" style="width: 3rem; height: 3rem;" role="status">','<span class="visually-hidden"></span>',"</div></div>"].join(""),t=$(e);return this.container.append(t),t}removeSpinner(){this.spinnerElement.remove()}showSpinner(){this.spinnerElement.removeClass("alc-dnone")}hideSpinner(){this.spinnerElement.addClass("alc-dnone")}}const getSegment=(n,e)=>n.pathname.split("/").filter(Boolean).at(e)??"",getPageState=(n,e)=>{const t=new URL(n),r=getSegment(t,-1),i=getSegment(t,-2);if(r===e&&/^\d+$/.test(e))return{type:"app",mode:null};if(r.toLowerCase()==="show"&&i===e&&/^\d+$/.test(e)){const s=t.searchParams.get("mode");return{type:"show",mode:s==="show"||s==="edit"?s:null}}return r.toLowerCase()==="edit"&&i===e&&/^\d+$/.test(e)?{type:"edit",mode:null}:{type:"other",mode:null}};class DropDownManager{constructor(e,t){P(this,"dictionary",{});P(this,"state",{});P(this,"selects",new Map);P(this,"columnMap",new Map);P(this,"columMapValueArray",[]);P(this,"columMapArray",[]);P(this,"props");P(this,"event");P(this,"selectorChangeHandle",(e,t)=>{const r=t.target;this.state[e]=r.value;const i=this.getLevel(e);this.columMapArray.filter((s,l)=>l>i).forEach(([s,l])=>{var d;const u=l.dropDown.code;this.updateOptions(u);const h=(d=this.selects.get(u))==null?void 0:d.previousElementSibling;h&&(h.value=""),delete this.state[u]})});this.props=e,this.event=t}async init(){try{const e=new index_browser.KintoneRestAPIClient,t=this.props.sourceApp.id,r=this.props.fieldList.map(s=>s.source.code),i=await e.record.getAllRecords({app:t,fields:r});this.dictionary=this.buildDropdownDictionary(i,this.props.fieldList)}catch(e){throw console.error("階層化ドロップダウンの初期化中にエラーが発生しました:",e),e}}async calculateHash(e,t){const r=JSON.stringify(e)+JSON.stringify(t),s=new TextEncoder().encode(r),l=await crypto.subtle.digest("SHA-1",s);return Array.from(new Uint8Array(l)).map(d=>d.toString(16).padStart(2,"0")).join("")}buildDropdownDictionary(e,t){const r={"0_TOP":new Set},i=new Map(t.map((l,u)=>[l.source.code,u]));e.map(l=>Object.entries(l).map(([u,h])=>({fieldCode:u,value:h.value,index:i.get(u)})).filter(u=>u.index!==void 0).sort((u,h)=>u.index-h.index)).forEach(l=>{l.forEach((u,h,d)=>{const{value:m,fieldCode:_}=u;if(!m)return;const S=m;if(h===0)r["0_TOP"].add(S);else{const C=d[h-1],T=`${C.index}_${C.value}`;r[T]=r[T]||new Set,r[T].add(S)}})});const s={};for(const[l,u]of Object.entries(r))s[l]=Array.from(u).sort();return s}getFromLocalStorage(e){const t=localStorage.getItem(e);return this.clearUpDictionary(e),t?JSON.parse(t):null}clearUpDictionary(e){Object.keys(localStorage).filter(t=>t.startsWith("dropdown_dictionary::")&&!t.endsWith(e)).forEach(t=>localStorage.removeItem(t))}saveToLocalStorage(e,t){localStorage.setItem(e,JSON.stringify(t))}async handlePageState(e){const t=getPageState(window.location.href.replace("#","?"),e);switch(t.type){case"app":case"edit":case"show":if(t.type==="show"&&t.mode!=="edit")break;await this.init(),this.setupCascadingDropDown(t.type);break}}setupCascadingDropDown(e){const t=document.getElementById(e==="app"?"view-list-data-gaia":"record-gaia");if(!t){console.error("ルート要素が見つかりません");return}e==="app"?this.initDropdownContainerForList():this.initDropdownContainerforDetail(t),this.renderDropdownContainer()}initDropdownContainerForList(){this.props.fieldList.forEach((t,r,i)=>{const s=kintone.app.getFieldElements(t.dropDown.code);if(s){const l=$(s).filter(".recordlist-editcell-gaia").get(0);l!==void 0&&this.columnMap.set(l,t)}}),this.columMapArray=Array.from(this.columnMap.entries()),this.columMapValueArray=Array.from(this.columnMap.values())}initDropdownContainerforDetail(e){const t=this.props.fieldList;let r=$(e).find(".control-gaia");for(const i of t){const s=r.has(`div.control-label-gaia span:contains("${i.dropDown.label}")`).get(0);s!==void 0&&$(s).find(".control-value-gaia").get(0)!==void 0&&this.columnMap.set(s,i)}this.columMapArray=Array.from(this.columnMap.entries()),this.columMapValueArray=Array.from(this.columnMap.values())}renderDropdownContainer(){this.columnMap.forEach((e,t)=>{if(!t)return;const r=t.querySelector("input");r&&this.createSelect(r,e.dropDown.code)})}createSelect(e,t){var s;const r=document.createElement("div");r.className="bs-scope",r.style.margin="0.12rem";const i=document.createElement("select");i.className="custom-dropdown form-select",i.dataset.field=t,i.addEventListener("change",l=>{this.selectorChangeHandle(t,l),e.value=this.state[t]}),r.appendChild(i),this.updateOptions(t,i,e.value),(s=e.parentNode)==null||s.insertBefore(r,e.nextSibling),e.style.display="none",this.selects.set(t,r)}updateOptions(e,t,r){var d;let i=t;if(t)this.state[e]=r;else if(i=(d=this.selects.get(e))==null?void 0:d.querySelector("select"),!i){console.error(`フィールド ${e} のドロップダウンメニュー要素が見つかりません`);return}if(!this.props.fieldList.find(m=>m.dropDown.code===e))throw console.error(`フィールド ${e} の設定が見つかりません`),new Error(`フィールド ${e} の設定が見つかりません`);const l=this.getLevel(e),u=this.getPreviousValueFromState(e),h=this.getOptions(l,u);i&&(i.innerHTML='<option value="">選択してください</option>',h.forEach(m=>{const _=document.createElement("option");_.value=m,_.textContent=m,i==null||i.appendChild(_)}),i.value=r??this.state[e]??"",i.disabled=l>0&&!u)}getLevel(e){return this.columMapValueArray.findIndex(t=>t.dropDown.code===e)}getPreviousValueFromState(e){const t=this.getLevel(e);if(t<=0)return"";const r=this.columMapValueArray[t-1];return this.state[r.dropDown.code]??""}getOptions(e,t){const r=e===0?"0_TOP":this.buildKey(e-1,t);return this.dictionary[r]||[]}buildKey(e,t){return`${e}_${t}`}}const cascadingDropdown="";class CascadingDropDownAction{constructor(){P(this,"name");P(this,"actionProps");P(this,"props");this.name="階層化ドロップダウン",this.actionProps=[],this.props={},this.register()}async process(e,t,r){this.actionProps=e.actionProps,this.props=e.ActionValue;const i={canNext:!0,result:""},s=new Snipper("body"),l=new DropDownManager(this.props.cascadingDropDown,t);try{if(!this.props)return i;const u=this.props.cascadingDropDown.dropDownApp.id;return s.showSpinner(),await l.handlePageState(u),s.hideSpinner(),i}catch(u){return console.error("CascadingDropDownAction プロセス中にエラーが発生しました:",u),r.errors.handleError(u,e),{canNext:!1,result:""}}finally{s.removeSpinner()}}register(){actionAddins[this.name]=this}}new CascadingDropDownAction;class ActionProperty{constructor(e,t,r,i,s){P(this,"component");P(this,"props");this.component=e,this.props={name:t,displayName:r,placeholder:i,modelValue:s}}static defaultProperty(){return new ActionProperty("InputText","displayName","表示名","表示を入力してください","")}}class ActionNode{constructor({id:e,name:t,title:r,inputPoint:i,outputPoints:s,actionProps:l}){P(this,"id");P(this,"name");P(this,"inputPoint");P(this,"outputPoints");P(this,"actionProps");P(this,"prevNodeId");P(this,"nextNodeIds");this.id=e,this.name=t,this.inputPoint=i,this.outputPoints=s;const u=ActionProperty.defaultProperty();u.props.modelValue=r,this.actionProps=l,this.nextNodeIds=new Map}get title(){const e=this.actionProps.find(t=>t.props.name==="displayName");return e==null?void 0:e.props.modelValue}get subTitle(){return this.name}get isRoot(){return!1}get ActionValue(){const e={};return this.actionProps.forEach(t=>{e[t.props.name]=t.props.modelValue}),e}}class RootAction{constructor({id:e,name:t,title:r,subTitle:i}){P(this,"id");P(this,"name");P(this,"title");P(this,"subTitle");P(this,"inputPoint");P(this,"outputPoints");P(this,"isRoot");P(this,"actionProps");P(this,"ActionValue");P(this,"prevNodeId");P(this,"nextNodeIds");this.id=e,this.name=t,this.title=r,this.subTitle=i,this.inputPoint="",this.outputPoints=[],this.isRoot=!0,this.actionProps=[],this.ActionValue={},this.nextNodeIds=new Map}}class ActionFlow{constructor(e){P(this,"id");P(this,"actionNodes");e instanceof Array?this.actionNodes=e:this.actionNodes=[e],this.id=""}findNodeById(e){return this.actionNodes.find(t=>t.id===e)}toJSON(){return{id:this.id,actionNodes:this.actionNodes.map(e=>{const{nextNodeIds:t,...r}=e;return{...r,nextNodeIds:Array.from(t.entries())}})}}getRoot(){return this.actionNodes.find(e=>e.isRoot)}static fromJSON(e){const t=JSON.parse(e),r=t.actionNodes.map(s=>{const l=s.isRoot?new RootAction(s):new ActionNode(s);return l.nextNodeIds=new Map(Object.entries(s.nextNodeIds)),l.prevNodeId=s.prevNodeId,l.id=s.id,l}),i=new ActionFlow(r);return i.id=t.id,i}}class ErrorManager{constructor(){P(this,"errors",[])}get hasError(){return this.errors.length>0}handleError(e,t,r){const i=r||"";let s=e instanceof Error?`${i} ${e.message}`:i;console.error(`「${t.name}」処理中例外発生しました。`,e),this.errors.push({error:s,action:t})}setEvent(e){const t=this.errors.map(r=>`「${r.action.name}」処理中例外発生しました。
|
||
詳細:${r.error}`);e.error=t.join(`
|
||
`)}showError(){const e=this.errors.map(t=>`「${t.action.name}」処理中例外発生しました。
|
||
詳細:${t.error}`);window.alert(e)}}const ShowErrorEvents=["app.record.create.submit.success","app.record.edit.submit.success","app.record.index.edit.submit.success"];class ActionProcess{constructor(e,t,r){P(this,"eventId");P(this,"flow");P(this,"event");P(this,"context");this.eventId=e,this.flow=t,this.event=r;const i=new ErrorManager;this.context={record:this.event.record,variables:{},errors:i}}async exec(){const e=this.flow.getRoot();if(e===void 0||e.nextNodeIds.size===0)return;let t=e.nextNodeIds.get("");if(t===void 0)return;let r=this.flow.findNodeById(t),i={canNext:!0};for(;r!==void 0&&i.canNext;){const s=actionAddins[r.name];s!==void 0&&(i=await s.process(r,this.event,this.context));let l="";if(r.outputPoints&&r.outputPoints.length>1&&(l=i.result||""),t=r.nextNodeIds.get(l),t===void 0)break;r=this.flow.findNodeById(t)}this.context.errors.hasError&&(this.context.errors.setEvent(this.event),ShowErrorEvents.includes(this.event.type)&&this.context.errors.showError())}}$(function(){const n=u=>u.filter(h=>h.includes(".change.")),e=u=>u.filter(h=>h.includes(".customButtonClick.")),t=u=>u.filter(h=>!h.includes(".customButtonClick.")&&!h.includes(".change.")),r=Object.keys(alcflow),i=n(r),s=e(r),l=t(r);l.length>0&&kintone.events.on(l,async u=>{const h=alcflow[u.type],d=ActionFlow.fromJSON(h.content);return d!==void 0&&await new ActionProcess(u.type,d,u).exec(),u}),i.length>0&&kintone.events.on(i,u=>{const h=alcflow[u.type],d=ActionFlow.fromJSON(h.content);return d!==void 0&&new ActionProcess(u.type,d,u).exec().then(_=>{const S=u.record;kintone.app.record.set({record:S})}).catch(_=>{console.error(_)}),u}),s.length>0&&s.forEach(u=>{$(document).on(u,async()=>{const h=kintone.app.record.get(),d=alcflow[u],m=ActionFlow.fromJSON(d.content);m!==void 0&&await new ActionProcess(u,m,h).exec();const _=h.record;kintone.app.record.set({record:_})})})});
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxjX3J1bnRpbWUuanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMiLCIuLi9zcmMvYWN0aW9ucy9pbmRleC50cyIsIi4uL3NyYy9hY3Rpb25zL211c3QtaW5wdXQudHMiLCIuLi9zcmMvdXRpbC9mb3JtYXQudHMiLCIuLi9zcmMvYWN0aW9ucy9hdXRvLW51bWJlcmluZy50cyIsIi4uL3NyYy90eXBlcy9Db25kaXRpb25zLnRzIiwiLi4vc3JjL2FjdGlvbnMvZmllbGQtc2hvd24udHMiLCIuLi9zcmMvYWN0aW9ucy9lcnJvci1zaG93LnRzIiwiLi4vc3JjL2FjdGlvbnMvYnV0dG9uLWFkZC50cyIsIi4uL3NyYy9hY3Rpb25zL2NvbmRpdGlvbi1hY3Rpb24udHMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvcGxhdGZvcm0vaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvcGxhdGZvcm0vVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yLmpzIiwiLi4vbm9kZV9tb2R1bGVzL21pbWUvTWltZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9taW1lL3R5cGVzL3N0YW5kYXJkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL21pbWUvbGl0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9wbGF0Zm9ybS9icm93c2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BraW50b25lL3Jlc3QtYXBpLWNsaWVudC9saWIvc3JjL3VybC5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9jbGllbnQvQmFzZUNsaWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9jbGllbnQvQnVsa1JlcXVlc3RDbGllbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvY2xpZW50L0FwcENsaWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9lcnJvci9LaW50b25lQWJvcnRTZWFyY2hFcnJvci5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9lcnJvci9LaW50b25lQWxsUmVjb3Jkc0Vycm9yLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BraW50b25lL3Jlc3QtYXBpLWNsaWVudC9saWIvc3JjL2Vycm9yL0tpbnRvbmVSZXN0QVBJRXJyb3IuanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvZXJyb3IvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvY2xpZW50L1JlY29yZENsaWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9jbGllbnQvU3BhY2VDbGllbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvZm9ybS1kYXRhL2xpYi9icm93c2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BraW50b25lL3Jlc3QtYXBpLWNsaWVudC9saWIvc3JjL2NsaWVudC9GaWxlQ2xpZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2Rpc3QvYnJvd3Nlci9heGlvcy5janMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvaHR0cC9BeGlvc0NsaWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9odHRwL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvZXZhbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvcmFuZ2UuanMiLCIuLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3JlZi5qcyIsIi4uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvc3ludGF4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy90eXBlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy91cmkuanMiLCIuLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanMiLCIuLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvaGFzLXByb3RvL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW1wbGVtZW50YXRpb24uanMiLCIuLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9oYXNvd24vaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9lcy1kZWZpbmUtcHJvcGVydHkvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZ29wZC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9kZWZpbmUtZGF0YS1wcm9wZXJ0eS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9oYXMtcHJvcGVydHktZGVzY3JpcHRvcnMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvc2V0LWZ1bmN0aW9uLWxlbmd0aC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2NhbGxCb3VuZC5qcyIsIi4uL19fdml0ZS1icm93c2VyLWV4dGVybmFsIiwiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1pbnNwZWN0L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9xcy9saWIvZm9ybWF0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9xcy9saWIvdXRpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvcXMvbGliL3N0cmluZ2lmeS5qcyIsIi4uL25vZGVfbW9kdWxlcy9xcy9saWIvcGFyc2UuanMiLCIuLi9ub2RlX21vZHVsZXMvcXMvbGliL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2pzLWJhc2U2NC9iYXNlNjQuanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BraW50b25lL3Jlc3QtYXBpLWNsaWVudC9saWIvc3JjL0tpbnRvbmVSZXNwb25zZUhhbmRsZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvS2ludG9uZVJlc3RBUElDbGllbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvaW5kZXguYnJvd3Nlci5qcyIsIi4uL3NyYy90eXBlcy9GaWVsZExheW91dC50cyIsIi4uL3NyYy91dGlsL2FnZ3JlZ2F0ZXMudHMiLCIuLi9zcmMvYWN0aW9ucy9kYXRhLXByb2Nlc3NpbmcudHMiLCIuLi9zcmMvYWN0aW9ucy9kYXRhLXVwZGF0ZS50cyIsIi4uL3NyYy9hY3Rpb25zL2N1cnJlbnQtZmllbGQtZ2V0LnRzIiwiLi4vc3JjL2FjdGlvbnMvcmVndWxhci1jaGVjay50cyIsIi4uL3NyYy9hY3Rpb25zL21haWwtY2hlY2sudHMiLCIuLi9zcmMvYWN0aW9ucy9jb3VudGVyLWNoZWNrLnRzIiwiLi4vc3JjL2FjdGlvbnMvZGF0ZXRpbWUtZ2V0dGVyLnRzIiwiLi4vc3JjL2FjdGlvbnMvaW5zZXJ0LXZhbHVlLnRzIiwiLi4vc3JjL2FjdGlvbnMvdmFsdWUtZ2V0dGVyLnRzIiwiLi4vc3JjL2FjdGlvbnMvc3RyaW5nLWpvaW4udHMiLCIuLi9zcmMvYWN0aW9ucy92YWxpZGF0aW9uLWZ1bGx3aWR0aC50cyIsIi4uL3NyYy9hY3Rpb25zL3ZhbGlkYXRpb24taGFsZndpZHRoLnRzIiwiLi4vc3JjL2FjdGlvbnMvaGFsZi1mdWxsLWNvbnZlcnNpb24udHMiLCIuLi9zcmMvYWN0aW9ucy9sb2dpbi11c2VyLWdldHRlci50cyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvZGlzdC9kb20vZGF0YS5qcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvZGlzdC91dGlsL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9kaXN0L2RvbS9ldmVudC1oYW5kbGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9kaXN0L2RvbS9tYW5pcHVsYXRvci5qcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvZGlzdC91dGlsL2NvbmZpZy5qcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvZGlzdC9iYXNlLWNvbXBvbmVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvZGlzdC9kb20vc2VsZWN0b3ItZW5naW5lLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9kaXN0L3V0aWwvYmFja2Ryb3AuanMiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL2Rpc3QvdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9kaXN0L3V0aWwvZm9jdXN0cmFwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9kaXN0L3V0aWwvc2Nyb2xsYmFyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9kaXN0L21vZGFsLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9lbnVtcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldE5vZGVOYW1lLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tYXRoLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy91c2VyQWdlbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc0xheW91dFZpZXdwb3J0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2NvbnRhaW5zLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzVGFibGVFbGVtZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0UGFyZW50Tm9kZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy93aXRoaW4uanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9leHBhbmRUb0hhc2hNYXAuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcnJvdy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0VmFyaWF0aW9uLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVBsYWNlbWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGwuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Vmlld3BvcnRSZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRSZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNTY3JvbGxQYXJlbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRTY3JvbGxQYXJlbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9saXN0U2Nyb2xsUGFyZW50cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvcmVjdFRvQ2xpZW50UmVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENsaXBwaW5nUmVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvY29tcHV0ZU9mZnNldHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2ZsaXAuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9oaWRlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvb2Zmc2V0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcG9wcGVyT2Zmc2V0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QWx0QXhpcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3ByZXZlbnRPdmVyZmxvdy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZVNjcm9sbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZWJvdW5jZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VCeU5hbWUuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2NyZWF0ZVBvcHBlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLWxpdGUuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3BvcHBlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvZGlzdC9qcy9ib290c3RyYXAuZXNtLmpzIiwiLi4vc3JjL2FjdGlvbnMvYXV0by1sb29rdXAudHMiLCIuLi9zcmMvYWN0aW9ucy9maWVsZC1kaXNhYmxlLnRzIiwiLi4vc3JjL2FjdGlvbnMvc3R5bGUtZmllbGQudHMiLCIuLi9zcmMvYWN0aW9ucy9kYXRldGltZS1jYWxjLnRzIiwiLi4vc3JjL2FjdGlvbnMvZW5kLW9mLW1vbnRoLnRzIiwiLi4vc3JjL2FjdGlvbnMvZGF0ZS1zcGVjaWZpZWQudHMiLCIuLi9zcmMvdXRpbC91aS1oZWxwZXIudHMiLCIuLi9zcmMvdXRpbC91cmwudHMiLCIuLi9zcmMvdHlwZXMvQ2FzY2FkaW5nRHJvcERvd25NYW5hZ2VyLnRzIiwiLi4vc3JjL2FjdGlvbnMvY2FzY2FkaW5nLWRyb3Bkb3duLnRzIiwiLi4vc3JjL3R5cGVzL0FjdGlvblR5cGVzLnRzIiwiLi4vc3JjL3R5cGVzL2FjdGlvbi1wcm9jZXNzLnRzIiwiLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2My43LjFcbiAqIGh0dHBzOi8vanF1ZXJ5LmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMjMtMDgtMjhUMTM6MzdaXG4gKi9cbiggZnVuY3Rpb24oIGdsb2JhbCwgZmFjdG9yeSApIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRpZiAoIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gRm9yIENvbW1vbkpTIGFuZCBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB3aGVyZSBhIHByb3BlciBgd2luZG93YFxuXHRcdC8vIGlzIHByZXNlbnQsIGV4ZWN1dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuXG5cdFx0Ly8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgYHdpbmRvd2Agd2l0aCBhIGBkb2N1bWVudGBcblx0XHQvLyAoc3VjaCBhcyBOb2RlLmpzKSwgZXhwb3NlIGEgZmFjdG9yeSBhcyBtb2R1bGUuZXhwb3J0cy5cblx0XHQvLyBUaGlzIGFjY2VudHVhdGVzIHRoZSBuZWVkIGZvciB0aGUgY3JlYXRpb24gb2YgYSByZWFsIGB3aW5kb3dgLlxuXHRcdC8vIGUuZy4gdmFyIGpRdWVyeSA9IHJlcXVpcmUoXCJqcXVlcnlcIikod2luZG93KTtcblx0XHQvLyBTZWUgdGlja2V0IHRyYWMtMTQ1NDkgZm9yIG1vcmUgaW5mby5cblx0XHRtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/XG5cdFx0XHRmYWN0b3J5KCBnbG9iYWwsIHRydWUgKSA6XG5cdFx0XHRmdW5jdGlvbiggdyApIHtcblx0XHRcdFx0aWYgKCAhdy5kb2N1bWVudCApIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoIFwialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkoIHcgKTtcblx0XHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0ZmFjdG9yeSggZ2xvYmFsICk7XG5cdH1cblxuLy8gUGFzcyB0aGlzIGlmIHdpbmRvdyBpcyBub3QgZGVmaW5lZCB5ZXRcbn0gKSggdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uKCB3aW5kb3csIG5vR2xvYmFsICkge1xuXG4vLyBFZGdlIDw9IDEyIC0gMTMrLCBGaXJlZm94IDw9MTggLSA0NSssIElFIDEwIC0gMTEsIFNhZmFyaSA1LjEgLSA5KywgaU9TIDYgLSA5LjFcbi8vIHRocm93IGV4Y2VwdGlvbnMgd2hlbiBub24tc3RyaWN0IGNvZGUgKGUuZy4sIEFTUC5ORVQgNC41KSBhY2Nlc3NlcyBzdHJpY3QgbW9kZVxuLy8gYXJndW1lbnRzLmNhbGxlZS5jYWxsZXIgKHRyYWMtMTMzMzUpLiBCdXQgYXMgb2YgalF1ZXJ5IDMuMCAoMjAxNiksIHN0cmljdCBtb2RlIHNob3VsZCBiZSBjb21tb25cbi8vIGVub3VnaCB0aGF0IGFsbCBzdWNoIGF0dGVtcHRzIGFyZSBndWFyZGVkIGluIGEgdHJ5IGJsb2NrLlxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBhcnIgPSBbXTtcblxudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuXG52YXIgc2xpY2UgPSBhcnIuc2xpY2U7XG5cbnZhciBmbGF0ID0gYXJyLmZsYXQgPyBmdW5jdGlvbiggYXJyYXkgKSB7XG5cdHJldHVybiBhcnIuZmxhdC5jYWxsKCBhcnJheSApO1xufSA6IGZ1bmN0aW9uKCBhcnJheSApIHtcblx0cmV0dXJuIGFyci5jb25jYXQuYXBwbHkoIFtdLCBhcnJheSApO1xufTtcblxuXG52YXIgcHVzaCA9IGFyci5wdXNoO1xuXG52YXIgaW5kZXhPZiA9IGFyci5pbmRleE9mO1xuXG52YXIgY2xhc3MydHlwZSA9IHt9O1xuXG52YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5nO1xuXG52YXIgaGFzT3duID0gY2xhc3MydHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGZuVG9TdHJpbmcgPSBoYXNPd24udG9TdHJpbmc7XG5cbnZhciBPYmplY3RGdW5jdGlvblN0cmluZyA9IGZuVG9TdHJpbmcuY2FsbCggT2JqZWN0ICk7XG5cbnZhciBzdXBwb3J0ID0ge307XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gaXNGdW5jdGlvbiggb2JqICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NTcsIEZpcmVmb3ggPD01MlxuXHRcdC8vIEluIHNvbWUgYnJvd3NlcnMsIHR5cGVvZiByZXR1cm5zIFwiZnVuY3Rpb25cIiBmb3IgSFRNTCA8b2JqZWN0PiBlbGVtZW50c1xuXHRcdC8vIChpLmUuLCBgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib2JqZWN0XCIgKSA9PT0gXCJmdW5jdGlvblwiYCkuXG5cdFx0Ly8gV2UgZG9uJ3Qgd2FudCB0byBjbGFzc2lmeSAqYW55KiBET00gbm9kZSBhcyBhIGZ1bmN0aW9uLlxuXHRcdC8vIFN1cHBvcnQ6IFF0V2ViIDw9My44LjUsIFdlYktpdCA8PTUzNC4zNCwgd2todG1sdG9wZGYgdG9vbCA8PTAuMTIuNVxuXHRcdC8vIFBsdXMgZm9yIG9sZCBXZWJLaXQsIHR5cGVvZiByZXR1cm5zIFwiZnVuY3Rpb25cIiBmb3IgSFRNTCBjb2xsZWN0aW9uc1xuXHRcdC8vIChlLmcuLCBgdHlwZW9mIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZGl2XCIpID09PSBcImZ1bmN0aW9uXCJgKS4gKGdoLTQ3NTYpXG5cdFx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2Ygb2JqLm5vZGVUeXBlICE9PSBcIm51bWJlclwiICYmXG5cdFx0XHR0eXBlb2Ygb2JqLml0ZW0gIT09IFwiZnVuY3Rpb25cIjtcblx0fTtcblxuXG52YXIgaXNXaW5kb3cgPSBmdW5jdGlvbiBpc1dpbmRvdyggb2JqICkge1xuXHRcdHJldHVybiBvYmogIT0gbnVsbCAmJiBvYmogPT09IG9iai53aW5kb3c7XG5cdH07XG5cblxudmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuXG5cblxuXHR2YXIgcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyA9IHtcblx0XHR0eXBlOiB0cnVlLFxuXHRcdHNyYzogdHJ1ZSxcblx0XHRub25jZTogdHJ1ZSxcblx0XHRub01vZHVsZTogdHJ1ZVxuXHR9O1xuXG5cdGZ1bmN0aW9uIERPTUV2YWwoIGNvZGUsIG5vZGUsIGRvYyApIHtcblx0XHRkb2MgPSBkb2MgfHwgZG9jdW1lbnQ7XG5cblx0XHR2YXIgaSwgdmFsLFxuXHRcdFx0c2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoIFwic2NyaXB0XCIgKTtcblxuXHRcdHNjcmlwdC50ZXh0ID0gY29kZTtcblx0XHRpZiAoIG5vZGUgKSB7XG5cdFx0XHRmb3IgKCBpIGluIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA2NCssIEVkZ2UgMTgrXG5cdFx0XHRcdC8vIFNvbWUgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCB0aGUgXCJub25jZVwiIHByb3BlcnR5IG9uIHNjcmlwdHMuXG5cdFx0XHRcdC8vIE9uIHRoZSBvdGhlciBoYW5kLCBqdXN0IHVzaW5nIGBnZXRBdHRyaWJ1dGVgIGlzIG5vdCBlbm91Z2ggYXNcblx0XHRcdFx0Ly8gdGhlIGBub25jZWAgYXR0cmlidXRlIGlzIHJlc2V0IHRvIGFuIGVtcHR5IHN0cmluZyB3aGVuZXZlciBpdFxuXHRcdFx0XHQvLyBiZWNvbWVzIGJyb3dzaW5nLWNvbnRleHQgY29ubmVjdGVkLlxuXHRcdFx0XHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9odG1sL2lzc3Vlcy8yMzY5XG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNub25jZS1hdHRyaWJ1dGVzXG5cdFx0XHRcdC8vIFRoZSBgbm9kZS5nZXRBdHRyaWJ1dGVgIGNoZWNrIHdhcyBhZGRlZCBmb3IgdGhlIHNha2Ugb2Zcblx0XHRcdFx0Ly8gYGpRdWVyeS5nbG9iYWxFdmFsYCBzbyB0aGF0IGl0IGNhbiBmYWtlIGEgbm9uY2UtY29udGFpbmluZyBub2RlXG5cdFx0XHRcdC8vIHZpYSBhbiBvYmplY3QuXG5cdFx0XHRcdHZhbCA9IG5vZGVbIGkgXSB8fCBub2RlLmdldEF0dHJpYnV0ZSAmJiBub2RlLmdldEF0dHJpYnV0ZSggaSApO1xuXHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRzY3JpcHQuc2V0QXR0cmlidXRlKCBpLCB2YWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRkb2MuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0ICkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggc2NyaXB0ICk7XG5cdH1cblxuXG5mdW5jdGlvbiB0b1R5cGUoIG9iaiApIHtcblx0aWYgKCBvYmogPT0gbnVsbCApIHtcblx0XHRyZXR1cm4gb2JqICsgXCJcIjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seSAoZnVuY3Rpb25pc2ggUmVnRXhwKVxuXHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgP1xuXHRcdGNsYXNzMnR5cGVbIHRvU3RyaW5nLmNhbGwoIG9iaiApIF0gfHwgXCJvYmplY3RcIiA6XG5cdFx0dHlwZW9mIG9iajtcbn1cbi8qIGdsb2JhbCBTeW1ib2wgKi9cbi8vIERlZmluaW5nIHRoaXMgZ2xvYmFsIGluIC5lc2xpbnRyYy5qc29uIHdvdWxkIGNyZWF0ZSBhIGRhbmdlciBvZiB1c2luZyB0aGUgZ2xvYmFsXG4vLyB1bmd1YXJkZWQgaW4gYW5vdGhlciBwbGFjZSwgaXQgc2VlbXMgc2FmZXIgdG8gZGVmaW5lIGdsb2JhbCBvbmx5IGZvciB0aGlzIG1vZHVsZVxuXG5cblxudmFyIHZlcnNpb24gPSBcIjMuNy4xXCIsXG5cblx0cmh0bWxTdWZmaXggPSAvSFRNTCQvaSxcblxuXHQvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeVxuXHRqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cblx0XHQvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCdcblx0XHQvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKVxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XG5cdH07XG5cbmpRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7XG5cblx0Ly8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZFxuXHRqcXVlcnk6IHZlcnNpb24sXG5cblx0Y29uc3RydWN0b3I6IGpRdWVyeSxcblxuXHQvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDBcblx0bGVuZ3RoOiAwLFxuXG5cdHRvQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdH0sXG5cblx0Ly8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUlxuXHQvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheVxuXHRnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7XG5cblx0XHQvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBpbiBhIGNsZWFuIGFycmF5XG5cdFx0aWYgKCBudW0gPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIGp1c3QgdGhlIG9uZSBlbGVtZW50IGZyb20gdGhlIHNldFxuXHRcdHJldHVybiBudW0gPCAwID8gdGhpc1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNbIG51bSBdO1xuXHR9LFxuXG5cdC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2tcblx0Ly8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpXG5cdHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zICkge1xuXG5cdFx0Ly8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXRcblx0XHR2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7XG5cblx0XHQvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKVxuXHRcdHJldC5wcmV2T2JqZWN0ID0gdGhpcztcblxuXHRcdC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0XG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHQvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LlxuXHRlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjayApO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCggdGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdHNsaWNlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApO1xuXHR9LFxuXG5cdGZpcnN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggMCApO1xuXHR9LFxuXG5cdGxhc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAtMSApO1xuXHR9LFxuXG5cdGV2ZW46IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LmdyZXAoIHRoaXMsIGZ1bmN0aW9uKCBfZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAoIGkgKyAxICkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdG9kZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkuZ3JlcCggdGhpcywgZnVuY3Rpb24oIF9lbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdGVxOiBmdW5jdGlvbiggaSApIHtcblx0XHR2YXIgbGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApO1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbIGogXSBdIDogW10gKTtcblx0fSxcblxuXHRlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpO1xuXHR9LFxuXG5cdC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS5cblx0Ly8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuXG5cdHB1c2g6IHB1c2gsXG5cdHNvcnQ6IGFyci5zb3J0LFxuXHRzcGxpY2U6IGFyci5zcGxpY2Vcbn07XG5cbmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSxcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIDAgXSB8fCB7fSxcblx0XHRpID0gMSxcblx0XHRsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuXHRcdGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICggdHlwZW9mIHRhcmdldCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0ZGVlcCA9IHRhcmdldDtcblxuXHRcdC8vIFNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIGkgXSB8fCB7fTtcblx0XHRpKys7XG5cdH1cblxuXHQvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSlcblx0aWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSBcIm9iamVjdFwiICYmICFpc0Z1bmN0aW9uKCB0YXJnZXQgKSApIHtcblx0XHR0YXJnZXQgPSB7fTtcblx0fVxuXG5cdC8vIEV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZFxuXHRpZiAoIGkgPT09IGxlbmd0aCApIHtcblx0XHR0YXJnZXQgPSB0aGlzO1xuXHRcdGktLTtcblx0fVxuXG5cdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXG5cdFx0Ly8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlc1xuXHRcdGlmICggKCBvcHRpb25zID0gYXJndW1lbnRzWyBpIF0gKSAhPSBudWxsICkge1xuXG5cdFx0XHQvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0XG5cdFx0XHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRcdGNvcHkgPSBvcHRpb25zWyBuYW1lIF07XG5cblx0XHRcdFx0Ly8gUHJldmVudCBPYmplY3QucHJvdG90eXBlIHBvbGx1dGlvblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICggbmFtZSA9PT0gXCJfX3Byb3RvX19cIiB8fCB0YXJnZXQgPT09IGNvcHkgKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXNcblx0XHRcdFx0aWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29weSApIHx8XG5cdFx0XHRcdFx0KCBjb3B5SXNBcnJheSA9IEFycmF5LmlzQXJyYXkoIGNvcHkgKSApICkgKSB7XG5cdFx0XHRcdFx0c3JjID0gdGFyZ2V0WyBuYW1lIF07XG5cblx0XHRcdFx0XHQvLyBFbnN1cmUgcHJvcGVyIHR5cGUgZm9yIHRoZSBzb3VyY2UgdmFsdWVcblx0XHRcdFx0XHRpZiAoIGNvcHlJc0FycmF5ICYmICFBcnJheS5pc0FycmF5KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0gW107XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggIWNvcHlJc0FycmF5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHt9O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblxuXHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTtcblxuXHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGNvcHk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZVxuXHRleHBhbmRvOiBcImpRdWVyeVwiICsgKCB2ZXJzaW9uICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cXEQvZywgXCJcIiApLFxuXG5cdC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVhZHkgd2l0aG91dCB0aGUgcmVhZHkgbW9kdWxlXG5cdGlzUmVhZHk6IHRydWUsXG5cblx0ZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCBtc2cgKTtcblx0fSxcblxuXHRub29wOiBmdW5jdGlvbigpIHt9LFxuXG5cdGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIHByb3RvLCBDdG9yO1xuXG5cdFx0Ly8gRGV0ZWN0IG9idmlvdXMgbmVnYXRpdmVzXG5cdFx0Ly8gVXNlIHRvU3RyaW5nIGluc3RlYWQgb2YgalF1ZXJ5LnR5cGUgdG8gY2F0Y2ggaG9zdCBvYmplY3RzXG5cdFx0aWYgKCAhb2JqIHx8IHRvU3RyaW5nLmNhbGwoIG9iaiApICE9PSBcIltvYmplY3QgT2JqZWN0XVwiICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHByb3RvID0gZ2V0UHJvdG8oIG9iaiApO1xuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIG5vIHByb3RvdHlwZSAoZS5nLiwgYE9iamVjdC5jcmVhdGUoIG51bGwgKWApIGFyZSBwbGFpblxuXHRcdGlmICggIXByb3RvICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIHByb3RvdHlwZSBhcmUgcGxhaW4gaWZmIHRoZXkgd2VyZSBjb25zdHJ1Y3RlZCBieSBhIGdsb2JhbCBPYmplY3QgZnVuY3Rpb25cblx0XHRDdG9yID0gaGFzT3duLmNhbGwoIHByb3RvLCBcImNvbnN0cnVjdG9yXCIgKSAmJiBwcm90by5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBmblRvU3RyaW5nLmNhbGwoIEN0b3IgKSA9PT0gT2JqZWN0RnVuY3Rpb25TdHJpbmc7XG5cdH0sXG5cblx0aXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgbmFtZTtcblxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4gYSBwcm92aWRlZCBjb250ZXh0OyBmYWxscyBiYWNrIHRvIHRoZSBnbG9iYWwgb25lXG5cdC8vIGlmIG5vdCBzcGVjaWZpZWQuXG5cdGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlLCBvcHRpb25zLCBkb2MgKSB7XG5cdFx0RE9NRXZhbCggY29kZSwgeyBub25jZTogb3B0aW9ucyAmJiBvcHRpb25zLm5vbmNlIH0sIGRvYyApO1xuXHR9LFxuXG5cdGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkge1xuXHRcdHZhciBsZW5ndGgsIGkgPSAwO1xuXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggb2JqICkgKSB7XG5cdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gb2JqICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblxuXHQvLyBSZXRyaWV2ZSB0aGUgdGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXNcblx0dGV4dDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5vZGUsXG5cdFx0XHRyZXQgPSBcIlwiLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHRpZiAoICFub2RlVHlwZSApIHtcblxuXHRcdFx0Ly8gSWYgbm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXlcblx0XHRcdHdoaWxlICggKCBub2RlID0gZWxlbVsgaSsrIF0gKSApIHtcblxuXHRcdFx0XHQvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlc1xuXHRcdFx0XHRyZXQgKz0galF1ZXJ5LnRleHQoIG5vZGUgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCBub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS50ZXh0Q29udGVudDtcblx0XHR9XG5cdFx0aWYgKCBub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudDtcblx0XHR9XG5cdFx0aWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRcdHJldHVybiBlbGVtLm5vZGVWYWx1ZTtcblx0XHR9XG5cblx0XHQvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gbm9kZXNcblxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0Ly8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7XG5cdFx0dmFyIHJldCA9IHJlc3VsdHMgfHwgW107XG5cblx0XHRpZiAoIGFyciAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBpc0FycmF5TGlrZSggT2JqZWN0KCBhcnIgKSApICkge1xuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHJldCxcblx0XHRcdFx0XHR0eXBlb2YgYXJyID09PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFsgYXJyIF0gOiBhcnJcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guY2FsbCggcmV0LCBhcnIgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdGluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnIsIGkgKSB7XG5cdFx0cmV0dXJuIGFyciA9PSBudWxsID8gLTEgOiBpbmRleE9mLmNhbGwoIGFyciwgZWxlbSwgaSApO1xuXHR9LFxuXG5cdGlzWE1MRG9jOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZXNwYWNlID0gZWxlbSAmJiBlbGVtLm5hbWVzcGFjZVVSSSxcblx0XHRcdGRvY0VsZW0gPSBlbGVtICYmICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHQvLyBBc3N1bWUgSFRNTCB3aGVuIGRvY3VtZW50RWxlbWVudCBkb2Vzbid0IHlldCBleGlzdCwgc3VjaCBhcyBpbnNpZGVcblx0XHQvLyBkb2N1bWVudCBmcmFnbWVudHMuXG5cdFx0cmV0dXJuICFyaHRtbFN1ZmZpeC50ZXN0KCBuYW1lc3BhY2UgfHwgZG9jRWxlbSAmJiBkb2NFbGVtLm5vZGVOYW1lIHx8IFwiSFRNTFwiICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0bWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkge1xuXHRcdHZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCxcblx0XHRcdGogPSAwLFxuXHRcdFx0aSA9IGZpcnN0Lmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0Zmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqIF07XG5cdFx0fVxuXG5cdFx0Zmlyc3QubGVuZ3RoID0gaTtcblxuXHRcdHJldHVybiBmaXJzdDtcblx0fSxcblxuXHRncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7XG5cdFx0dmFyIGNhbGxiYWNrSW52ZXJzZSxcblx0XHRcdG1hdGNoZXMgPSBbXSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoLFxuXHRcdFx0Y2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0O1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtc1xuXHRcdC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG5cdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRjYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTtcblx0XHRcdGlmICggY2FsbGJhY2tJbnZlcnNlICE9PSBjYWxsYmFja0V4cGVjdCApIHtcblx0XHRcdFx0bWF0Y2hlcy5wdXNoKCBlbGVtc1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hdGNoZXM7XG5cdH0sXG5cblx0Ly8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkge1xuXHRcdHZhciBsZW5ndGgsIHZhbHVlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRyZXQgPSBbXTtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggZWxlbXMgKSApIHtcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsXG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gZWxlbXMgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0XHRyZXR1cm4gZmxhdCggcmV0ICk7XG5cdH0sXG5cblx0Ly8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzXG5cdGd1aWQ6IDEsXG5cblx0Ly8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyXG5cdC8vIHByb3BlcnRpZXMgdG8gaXQgc28gaXQgbmVlZHMgdG8gZXhpc3QuXG5cdHN1cHBvcnQ6IHN1cHBvcnRcbn0gKTtcblxuaWYgKCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cdGpRdWVyeS5mblsgU3ltYm9sLml0ZXJhdG9yIF0gPSBhcnJbIFN5bWJvbC5pdGVyYXRvciBdO1xufVxuXG4vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXBcbmpRdWVyeS5lYWNoKCBcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoIFwiIFwiICksXG5cdGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0XHRjbGFzczJ0eXBlWyBcIltvYmplY3QgXCIgKyBuYW1lICsgXCJdXCIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0fSApO1xuXG5mdW5jdGlvbiBpc0FycmF5TGlrZSggb2JqICkge1xuXG5cdC8vIFN1cHBvcnQ6IHJlYWwgaU9TIDguMiBvbmx5IChub3QgcmVwcm9kdWNpYmxlIGluIHNpbXVsYXRvcilcblx0Ly8gYGluYCBjaGVjayB1c2VkIHRvIHByZXZlbnQgSklUIGVycm9yIChnaC0yMTQ1KVxuXHQvLyBoYXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1ZSB0byBmYWxzZSBuZWdhdGl2ZXNcblx0Ly8gcmVnYXJkaW5nIE5vZGVsaXN0IGxlbmd0aCBpbiBJRVxuXHR2YXIgbGVuZ3RoID0gISFvYmogJiYgXCJsZW5ndGhcIiBpbiBvYmogJiYgb2JqLmxlbmd0aCxcblx0XHR0eXBlID0gdG9UeXBlKCBvYmogKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIG9iaiApIHx8IGlzV2luZG93KCBvYmogKSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHlwZSA9PT0gXCJhcnJheVwiIHx8IGxlbmd0aCA9PT0gMCB8fFxuXHRcdHR5cGVvZiBsZW5ndGggPT09IFwibnVtYmVyXCIgJiYgbGVuZ3RoID4gMCAmJiAoIGxlbmd0aCAtIDEgKSBpbiBvYmo7XG59XG5cblxuZnVuY3Rpb24gbm9kZU5hbWUoIGVsZW0sIG5hbWUgKSB7XG5cblx0cmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbn1cbnZhciBwb3AgPSBhcnIucG9wO1xuXG5cbnZhciBzb3J0ID0gYXJyLnNvcnQ7XG5cblxudmFyIHNwbGljZSA9IGFyci5zcGxpY2U7XG5cblxudmFyIHdoaXRlc3BhY2UgPSBcIltcXFxceDIwXFxcXHRcXFxcclxcXFxuXFxcXGZdXCI7XG5cblxudmFyIHJ0cmltQ1NTID0gbmV3IFJlZ0V4cChcblx0XCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiICsgd2hpdGVzcGFjZSArIFwiKyRcIixcblx0XCJnXCJcbik7XG5cblxuXG5cbi8vIE5vdGU6IGFuIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBpdHNlbGZcbmpRdWVyeS5jb250YWlucyA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXHR2YXIgYnVwID0gYiAmJiBiLnBhcmVudE5vZGU7XG5cblx0cmV0dXJuIGEgPT09IGJ1cCB8fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErXG5cdFx0Ly8gSUUgZG9lc24ndCBoYXZlIGBjb250YWluc2Agb24gU1ZHLlxuXHRcdGEuY29udGFpbnMgP1xuXHRcdFx0YS5jb250YWlucyggYnVwICkgOlxuXHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBidXAgKSAmIDE2XG5cdCkgKTtcbn07XG5cblxuXG5cbi8vIENTUyBzdHJpbmcvaWRlbnRpZmllciBzZXJpYWxpemF0aW9uXG4vLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI2NvbW1vbi1zZXJpYWxpemluZy1pZGlvbXNcbnZhciByY3NzZXNjYXBlID0gLyhbXFwwLVxceDFmXFx4N2ZdfF4tP1xcZCl8Xi0kfFteXFx4ODAtXFx1RkZGRlxcdy1dL2c7XG5cbmZ1bmN0aW9uIGZjc3Nlc2NhcGUoIGNoLCBhc0NvZGVQb2ludCApIHtcblx0aWYgKCBhc0NvZGVQb2ludCApIHtcblxuXHRcdC8vIFUrMDAwMCBOVUxMIGJlY29tZXMgVStGRkZEIFJFUExBQ0VNRU5UIENIQVJBQ1RFUlxuXHRcdGlmICggY2ggPT09IFwiXFwwXCIgKSB7XG5cdFx0XHRyZXR1cm4gXCJcXHVGRkZEXCI7XG5cdFx0fVxuXG5cdFx0Ly8gQ29udHJvbCBjaGFyYWN0ZXJzIGFuZCAoZGVwZW5kZW50IHVwb24gcG9zaXRpb24pIG51bWJlcnMgZ2V0IGVzY2FwZWQgYXMgY29kZSBwb2ludHNcblx0XHRyZXR1cm4gY2guc2xpY2UoIDAsIC0xICkgKyBcIlxcXFxcIiArIGNoLmNoYXJDb2RlQXQoIGNoLmxlbmd0aCAtIDEgKS50b1N0cmluZyggMTYgKSArIFwiIFwiO1xuXHR9XG5cblx0Ly8gT3RoZXIgcG90ZW50aWFsbHktc3BlY2lhbCBBU0NJSSBjaGFyYWN0ZXJzIGdldCBiYWNrc2xhc2gtZXNjYXBlZFxuXHRyZXR1cm4gXCJcXFxcXCIgKyBjaDtcbn1cblxualF1ZXJ5LmVzY2FwZVNlbGVjdG9yID0gZnVuY3Rpb24oIHNlbCApIHtcblx0cmV0dXJuICggc2VsICsgXCJcIiApLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTtcbn07XG5cblxuXG5cbnZhciBwcmVmZXJyZWREb2MgPSBkb2N1bWVudCxcblx0cHVzaE5hdGl2ZSA9IHB1c2g7XG5cbiggZnVuY3Rpb24oKSB7XG5cbnZhciBpLFxuXHRFeHByLFxuXHRvdXRlcm1vc3RDb250ZXh0LFxuXHRzb3J0SW5wdXQsXG5cdGhhc0R1cGxpY2F0ZSxcblx0cHVzaCA9IHB1c2hOYXRpdmUsXG5cblx0Ly8gTG9jYWwgZG9jdW1lbnQgdmFyc1xuXHRkb2N1bWVudCxcblx0ZG9jdW1lbnRFbGVtZW50LFxuXHRkb2N1bWVudElzSFRNTCxcblx0cmJ1Z2d5UVNBLFxuXHRtYXRjaGVzLFxuXG5cdC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGFcblx0ZXhwYW5kbyA9IGpRdWVyeS5leHBhbmRvLFxuXHRkaXJydW5zID0gMCxcblx0ZG9uZSA9IDAsXG5cdGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHR0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0Y29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHtcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gMDtcblx0fSxcblxuXHRib29sZWFucyA9IFwiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfFwiICtcblx0XHRcImxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWRcIixcblxuXHQvLyBSZWd1bGFyIGV4cHJlc3Npb25zXG5cblx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1zeW50YXgtMy8jaWRlbnQtdG9rZW4tZGlhZ3JhbVxuXHRpZGVudGlmaWVyID0gXCIoPzpcXFxcXFxcXFtcXFxcZGEtZkEtRl17MSw2fVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XCI/fFxcXFxcXFxcW15cXFxcclxcXFxuXFxcXGZdfFtcXFxcdy1dfFteXFwwLVxcXFx4N2ZdKStcIixcblxuXHQvLyBBdHRyaWJ1dGUgc2VsZWN0b3JzOiBodHRwczovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzXG5cdGF0dHJpYnV0ZXMgPSBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFwiICsgaWRlbnRpZmllciArIFwiKSg/OlwiICsgd2hpdGVzcGFjZSArXG5cblx0XHQvLyBPcGVyYXRvciAoY2FwdHVyZSAyKVxuXHRcdFwiKihbKl4kfCF+XT89KVwiICsgd2hpdGVzcGFjZSArXG5cblx0XHQvLyBcIkF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBDU1MgaWRlbnRpZmllcnMgW2NhcHR1cmUgNV0gb3Igc3RyaW5ncyBbY2FwdHVyZSAzIG9yIGNhcHR1cmUgNF1cIlxuXHRcdFwiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIgKyBpZGVudGlmaWVyICsgXCIpKXwpXCIgK1xuXHRcdHdoaXRlc3BhY2UgKyBcIipcXFxcXVwiLFxuXG5cdHBzZXVkb3MgPSBcIjooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XFxcXCgoXCIgK1xuXG5cdFx0Ly8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50czpcblx0XHQvLyAxLiBxdW90ZWQgKGNhcHR1cmUgMzsgY2FwdHVyZSA0IG9yIGNhcHR1cmUgNSlcblx0XHRcIignKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCIpfFwiICtcblxuXHRcdC8vIDIuIHNpbXBsZSAoY2FwdHVyZSA2KVxuXHRcdFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKClbXFxcXF1dfFwiICsgYXR0cmlidXRlcyArIFwiKSopfFwiICtcblxuXHRcdC8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMilcblx0XHRcIi4qXCIgK1xuXHRcdFwiKVxcXFwpfClcIixcblxuXHQvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyXG5cdHJ3aGl0ZXNwYWNlID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwiK1wiLCBcImdcIiApLFxuXG5cdHJjb21tYSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKixcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXHRybGVhZGluZ0NvbWJpbmF0b3IgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiooWz4rfl18XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgK1xuXHRcdHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXHRyZGVzY2VuZCA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcInw+XCIgKSxcblxuXHRycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLFxuXHRyaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoIFwiXlwiICsgaWRlbnRpZmllciArIFwiJFwiICksXG5cblx0bWF0Y2hFeHByID0ge1xuXHRcdElEOiBuZXcgUmVnRXhwKCBcIl4jKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0Q0xBU1M6IG5ldyBSZWdFeHAoIFwiXlxcXFwuKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0VEFHOiBuZXcgUmVnRXhwKCBcIl4oXCIgKyBpZGVudGlmaWVyICsgXCJ8WypdKVwiICksXG5cdFx0QVRUUjogbmV3IFJlZ0V4cCggXCJeXCIgKyBhdHRyaWJ1dGVzICksXG5cdFx0UFNFVURPOiBuZXcgUmVnRXhwKCBcIl5cIiArIHBzZXVkb3MgKSxcblx0XHRDSElMRDogbmV3IFJlZ0V4cChcblx0XHRcdFwiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFxcXChcIiArXG5cdFx0XHRcdHdoaXRlc3BhY2UgKyBcIiooZXZlbnxvZGR8KChbKy1dfCkoXFxcXGQqKW58KVwiICsgd2hpdGVzcGFjZSArIFwiKig/OihbKy1dfClcIiArXG5cdFx0XHRcdHdoaXRlc3BhY2UgKyBcIiooXFxcXGQrKXwpKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfClcIiwgXCJpXCIgKSxcblx0XHRib29sOiBuZXcgUmVnRXhwKCBcIl4oPzpcIiArIGJvb2xlYW5zICsgXCIpJFwiLCBcImlcIiApLFxuXG5cdFx0Ly8gRm9yIHVzZSBpbiBsaWJyYXJpZXMgaW1wbGVtZW50aW5nIC5pcygpXG5cdFx0Ly8gV2UgdXNlIHRoaXMgZm9yIFBPUyBtYXRjaGluZyBpbiBgc2VsZWN0YFxuXHRcdG5lZWRzQ29udGV4dDogbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFxcXChcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqKCg/Oi1cXFxcZCk/XFxcXGQqKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfCkoPz1bXi1dfCQpXCIsIFwiaVwiIClcblx0fSxcblxuXHRyaW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmhlYWRlciA9IC9eaFxcZCQvaSxcblxuXHQvLyBFYXNpbHktcGFyc2VhYmxlL3JldHJpZXZhYmxlIElEIG9yIFRBRyBvciBDTEFTUyBzZWxlY3RvcnNcblx0cnF1aWNrRXhwciA9IC9eKD86IyhbXFx3LV0rKXwoXFx3Kyl8XFwuKFtcXHctXSspKSQvLFxuXG5cdHJzaWJsaW5nID0gL1srfl0vLFxuXG5cdC8vIENTUyBlc2NhcGVzXG5cdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNjYXBlZC1jaGFyYWN0ZXJzXG5cdHJ1bmVzY2FwZSA9IG5ldyBSZWdFeHAoIFwiXFxcXFxcXFxbXFxcXGRhLWZBLUZdezEsNn1cIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiP3xcXFxcXFxcXChbXlxcXFxyXFxcXG5cXFxcZl0pXCIsIFwiZ1wiICksXG5cdGZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBlc2NhcGUsIG5vbkhleCApIHtcblx0XHR2YXIgaGlnaCA9IFwiMHhcIiArIGVzY2FwZS5zbGljZSggMSApIC0gMHgxMDAwMDtcblxuXHRcdGlmICggbm9uSGV4ICkge1xuXG5cdFx0XHQvLyBTdHJpcCB0aGUgYmFja3NsYXNoIHByZWZpeCBmcm9tIGEgbm9uLWhleCBlc2NhcGUgc2VxdWVuY2Vcblx0XHRcdHJldHVybiBub25IZXg7XG5cdFx0fVxuXG5cdFx0Ly8gUmVwbGFjZSBhIGhleGFkZWNpbWFsIGVzY2FwZSBzZXF1ZW5jZSB3aXRoIHRoZSBlbmNvZGVkIFVuaWNvZGUgY29kZSBwb2ludFxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTErXG5cdFx0Ly8gRm9yIHZhbHVlcyBvdXRzaWRlIHRoZSBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgKEJNUCksIG1hbnVhbGx5IGNvbnN0cnVjdCBhXG5cdFx0Ly8gc3Vycm9nYXRlIHBhaXJcblx0XHRyZXR1cm4gaGlnaCA8IDAgP1xuXHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCArIDB4MTAwMDAgKSA6XG5cdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoID4+IDEwIHwgMHhEODAwLCBoaWdoICYgMHgzRkYgfCAweERDMDAgKTtcblx0fSxcblxuXHQvLyBVc2VkIGZvciBpZnJhbWVzOyBzZWUgYHNldERvY3VtZW50YC5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4K1xuXHQvLyBSZW1vdmluZyB0aGUgZnVuY3Rpb24gd3JhcHBlciBjYXVzZXMgYSBcIlBlcm1pc3Npb24gRGVuaWVkXCJcblx0Ly8gZXJyb3IgaW4gSUUvRWRnZS5cblx0dW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuXHRcdHNldERvY3VtZW50KCk7XG5cdH0sXG5cblx0aW5EaXNhYmxlZEZpZWxkc2V0ID0gYWRkQ29tYmluYXRvcihcblx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlICYmIG5vZGVOYW1lKCBlbGVtLCBcImZpZWxkc2V0XCIgKTtcblx0XHR9LFxuXHRcdHsgZGlyOiBcInBhcmVudE5vZGVcIiwgbmV4dDogXCJsZWdlbmRcIiB9XG5cdCk7XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG4vLyBBY2Nlc3NpbmcgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBjYW4gdGhyb3cgdW5leHBlY3RlZGx5XG4vLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzOTNcbmZ1bmN0aW9uIHNhZmVBY3RpdmVFbGVtZW50KCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXHR9IGNhdGNoICggZXJyICkgeyB9XG59XG5cbi8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApXG50cnkge1xuXHRwdXNoLmFwcGx5KFxuXHRcdCggYXJyID0gc2xpY2UuY2FsbCggcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMgKSApLFxuXHRcdHByZWZlcnJlZERvYy5jaGlsZE5vZGVzXG5cdCk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMFxuXHQvLyBEZXRlY3Qgc2lsZW50bHkgZmFpbGluZyBwdXNoLmFwcGx5XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0YXJyWyBwcmVmZXJyZWREb2MuY2hpbGROb2Rlcy5sZW5ndGggXS5ub2RlVHlwZTtcbn0gY2F0Y2ggKCBlICkge1xuXHRwdXNoID0ge1xuXHRcdGFwcGx5OiBmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHRwdXNoTmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoIGVscyApICk7XG5cdFx0fSxcblx0XHRjYWxsOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdFx0cHVzaE5hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDEgKSApO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gZmluZCggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBtLCBpLCBlbGVtLCBuaWQsIG1hdGNoLCBncm91cHMsIG5ld1NlbGVjdG9yLFxuXHRcdG5ld0NvbnRleHQgPSBjb250ZXh0ICYmIGNvbnRleHQub3duZXJEb2N1bWVudCxcblxuXHRcdC8vIG5vZGVUeXBlIGRlZmF1bHRzIHRvIDksIHNpbmNlIGNvbnRleHQgZGVmYXVsdHMgdG8gZG9jdW1lbnRcblx0XHRub2RlVHlwZSA9IGNvbnRleHQgPyBjb250ZXh0Lm5vZGVUeXBlIDogOTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBSZXR1cm4gZWFybHkgZnJvbSBjYWxscyB3aXRoIGludmFsaWQgc2VsZWN0b3Igb3IgY29udGV4dFxuXHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiB8fCAhc2VsZWN0b3IgfHxcblx0XHRub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSAmJiBub2RlVHlwZSAhPT0gMTEgKSB7XG5cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fVxuXG5cdC8vIFRyeSB0byBzaG9ydGN1dCBmaW5kIG9wZXJhdGlvbnMgKGFzIG9wcG9zZWQgdG8gZmlsdGVycykgaW4gSFRNTCBkb2N1bWVudHNcblx0aWYgKCAhc2VlZCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHRcdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xuXG5cdFx0aWYgKCBkb2N1bWVudElzSFRNTCApIHtcblxuXHRcdFx0Ly8gSWYgdGhlIHNlbGVjdG9yIGlzIHN1ZmZpY2llbnRseSBzaW1wbGUsIHRyeSB1c2luZyBhIFwiZ2V0KkJ5KlwiIERPTSBtZXRob2Rcblx0XHRcdC8vIChleGNlcHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24ndCBleGlzdClcblx0XHRcdGlmICggbm9kZVR5cGUgIT09IDExICYmICggbWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHQvLyBJRCBzZWxlY3RvclxuXHRcdFx0XHRpZiAoICggbSA9IG1hdGNoWyAxIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvY3VtZW50IGNvbnRleHRcblx0XHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0XHRpZiAoIGVsZW0uaWQgPT09IG0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHVzaC5jYWxsKCByZXN1bHRzLCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRWxlbWVudCBjb250ZXh0XG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgJiYgKCBlbGVtID0gbmV3Q29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApICkgJiZcblx0XHRcdFx0XHRcdFx0ZmluZC5jb250YWlucyggY29udGV4dCwgZWxlbSApICYmXG5cdFx0XHRcdFx0XHRcdGVsZW0uaWQgPT09IG0gKSB7XG5cblx0XHRcdFx0XHRcdFx0cHVzaC5jYWxsKCByZXN1bHRzLCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUeXBlIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWyAyIF0gKSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHRcdC8vIENsYXNzIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggbSA9IG1hdGNoWyAzIF0gKSAmJiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBtICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUYWtlIGFkdmFudGFnZSBvZiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHRpZiAoICFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF0gJiZcblx0XHRcdFx0KCAhcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSApICkge1xuXG5cdFx0XHRcdG5ld1NlbGVjdG9yID0gc2VsZWN0b3I7XG5cdFx0XHRcdG5ld0NvbnRleHQgPSBjb250ZXh0O1xuXG5cdFx0XHRcdC8vIHFTQSBjb25zaWRlcnMgZWxlbWVudHMgb3V0c2lkZSBhIHNjb3Bpbmcgcm9vdCB3aGVuIGV2YWx1YXRpbmcgY2hpbGQgb3Jcblx0XHRcdFx0Ly8gZGVzY2VuZGFudCBjb21iaW5hdG9ycywgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudC5cblx0XHRcdFx0Ly8gSW4gc3VjaCBjYXNlcywgd2Ugd29yayBhcm91bmQgdGhlIGJlaGF2aW9yIGJ5IHByZWZpeGluZyBldmVyeSBzZWxlY3RvciBpbiB0aGVcblx0XHRcdFx0Ly8gbGlzdCB3aXRoIGFuIElEIHNlbGVjdG9yIHJlZmVyZW5jaW5nIHRoZSBzY29wZSBjb250ZXh0LlxuXHRcdFx0XHQvLyBUaGUgdGVjaG5pcXVlIGhhcyB0byBiZSB1c2VkIGFzIHdlbGwgd2hlbiBhIGxlYWRpbmcgY29tYmluYXRvciBpcyB1c2VkXG5cdFx0XHRcdC8vIGFzIHN1Y2ggc2VsZWN0b3JzIGFyZSBub3QgcmVjb2duaXplZCBieSBxdWVyeVNlbGVjdG9yQWxsLlxuXHRcdFx0XHQvLyBUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhpcyB0ZWNobmlxdWUuXG5cdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHQoIHJkZXNjZW5kLnRlc3QoIHNlbGVjdG9yICkgfHwgcmxlYWRpbmdDb21iaW5hdG9yLnRlc3QoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHRcdC8vIEV4cGFuZCBjb250ZXh0IGZvciBzaWJsaW5nIHNlbGVjdG9yc1xuXHRcdFx0XHRcdG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fFxuXHRcdFx0XHRcdFx0Y29udGV4dDtcblxuXHRcdFx0XHRcdC8vIFdlIGNhbiB1c2UgOnNjb3BlIGluc3RlYWQgb2YgdGhlIElEIGhhY2sgaWYgdGhlIGJyb3dzZXJcblx0XHRcdFx0XHQvLyBzdXBwb3J0cyBpdCAmIGlmIHdlJ3JlIG5vdCBjaGFuZ2luZyB0aGUgY29udGV4dC5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuXG5cdFx0XHRcdFx0Ly8gc3RyaWN0LWNvbXBhcmluZyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0XHRcdGlmICggbmV3Q29udGV4dCAhPSBjb250ZXh0IHx8ICFzdXBwb3J0LnNjb3BlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBDYXB0dXJlIHRoZSBjb250ZXh0IElELCBzZXR0aW5nIGl0IGZpcnN0IGlmIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdFx0aWYgKCAoIG5pZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCBcImlkXCIgKSApICkge1xuXHRcdFx0XHRcdFx0XHRuaWQgPSBqUXVlcnkuZXNjYXBlU2VsZWN0b3IoIG5pZCApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dC5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgKCBuaWQgPSBleHBhbmRvICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmVmaXggZXZlcnkgc2VsZWN0b3IgaW4gdGhlIGxpc3Rcblx0XHRcdFx0XHRncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHRcdFx0XHRpID0gZ3JvdXBzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGdyb3Vwc1sgaSBdID0gKCBuaWQgPyBcIiNcIiArIG5pZCA6IFwiOnNjb3BlXCIgKSArIFwiIFwiICtcblx0XHRcdFx0XHRcdFx0dG9TZWxlY3RvciggZ3JvdXBzWyBpIF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bmV3U2VsZWN0b3IgPSBncm91cHMuam9pbiggXCIsXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cyxcblx0XHRcdFx0XHRcdG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCggbmV3U2VsZWN0b3IgKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH0gY2F0Y2ggKCBxc2FFcnJvciApIHtcblx0XHRcdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdGlmICggbmlkID09PSBleHBhbmRvICkge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFsbCBvdGhlcnNcblx0cmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW1DU1MsIFwiJDFcIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoXG4gKlx0cHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZpeGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNoZUxlbmd0aClcbiAqXHRkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkge1xuXHR2YXIga2V5cyA9IFtdO1xuXG5cdGZ1bmN0aW9uIGNhY2hlKCBrZXksIHZhbHVlICkge1xuXG5cdFx0Ly8gVXNlIChrZXkgKyBcIiBcIikgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggbmF0aXZlIHByb3RvdHlwZSBwcm9wZXJ0aWVzXG5cdFx0Ly8gKHNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9pc3N1ZXMvMTU3KVxuXHRcdGlmICgga2V5cy5wdXNoKCBrZXkgKyBcIiBcIiApID4gRXhwci5jYWNoZUxlbmd0aCApIHtcblxuXHRcdFx0Ly8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzXG5cdFx0XHRkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdO1xuXHRcdH1cblx0XHRyZXR1cm4gKCBjYWNoZVsga2V5ICsgXCIgXCIgXSA9IHZhbHVlICk7XG5cdH1cblx0cmV0dXJuIGNhY2hlO1xufVxuXG4vKipcbiAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgalF1ZXJ5IHNlbGVjdG9yIG1vZHVsZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmtcbiAqL1xuZnVuY3Rpb24gbWFya0Z1bmN0aW9uKCBmbiApIHtcblx0Zm5bIGV4cGFuZG8gXSA9IHRydWU7XG5cdHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBTdXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4gZWxlbWVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGVsZW1lbnQgYW5kIHJldHVybnMgYSBib29sZWFuIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc3NlcnQoIGZuICkge1xuXHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImZpZWxkc2V0XCIgKTtcblxuXHR0cnkge1xuXHRcdHJldHVybiAhIWZuKCBlbCApO1xuXHR9IGNhdGNoICggZSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZmluYWxseSB7XG5cblx0XHQvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHRcblx0XHRpZiAoIGVsLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbCApO1xuXHRcdH1cblxuXHRcdC8vIHJlbGVhc2UgbWVtb3J5IGluIElFXG5cdFx0ZWwgPSBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gbm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiAoIG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSB8fCBub2RlTmFtZSggZWxlbSwgXCJidXR0b25cIiApICkgJiZcblx0XHRcdGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIDplbmFibGVkLzpkaXNhYmxlZFxuICogQHBhcmFtIHtCb29sZWFufSBkaXNhYmxlZCB0cnVlIGZvciA6ZGlzYWJsZWQ7IGZhbHNlIGZvciA6ZW5hYmxlZFxuICovXG5mdW5jdGlvbiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZGlzYWJsZWQgKSB7XG5cblx0Ly8gS25vd24gOmRpc2FibGVkIGZhbHNlIHBvc2l0aXZlczogZmllbGRzZXRbZGlzYWJsZWRdID4gbGVnZW5kOm50aC1vZi10eXBlKG4rMikgOmNhbi1kaXNhYmxlXG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE9ubHkgY2VydGFpbiBlbGVtZW50cyBjYW4gbWF0Y2ggOmVuYWJsZWQgb3IgOmRpc2FibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZW5hYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWRpc2FibGVkXG5cdFx0aWYgKCBcImZvcm1cIiBpbiBlbGVtICkge1xuXG5cdFx0XHQvLyBDaGVjayBmb3IgaW5oZXJpdGVkIGRpc2FibGVkbmVzcyBvbiByZWxldmFudCBub24tZGlzYWJsZWQgZWxlbWVudHM6XG5cdFx0XHQvLyAqIGxpc3RlZCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBmaWVsZHNldFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NhdGVnb3J5LWxpc3RlZFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtZmUtZGlzYWJsZWRcblx0XHRcdC8vICogb3B0aW9uIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXBcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LW9wdGlvbi1kaXNhYmxlZFxuXHRcdFx0Ly8gQWxsIHN1Y2ggZWxlbWVudHMgaGF2ZSBhIFwiZm9ybVwiIHByb3BlcnR5LlxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgJiYgZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0Ly8gT3B0aW9uIGVsZW1lbnRzIGRlZmVyIHRvIGEgcGFyZW50IG9wdGdyb3VwIGlmIHByZXNlbnRcblx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5wYXJlbnROb2RlLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDYgLSAxMStcblx0XHRcdFx0Ly8gVXNlIHRoZSBpc0Rpc2FibGVkIHNob3J0Y3V0IHByb3BlcnR5IHRvIGNoZWNrIGZvciBkaXNhYmxlZCBmaWVsZHNldCBhbmNlc3RvcnNcblx0XHRcdFx0cmV0dXJuIGVsZW0uaXNEaXNhYmxlZCA9PT0gZGlzYWJsZWQgfHxcblxuXHRcdFx0XHRcdC8vIFdoZXJlIHRoZXJlIGlzIG5vIGlzRGlzYWJsZWQsIGNoZWNrIG1hbnVhbGx5XG5cdFx0XHRcdFx0ZWxlbS5pc0Rpc2FibGVkICE9PSAhZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdGluRGlzYWJsZWRGaWVsZHNldCggZWxlbSApID09PSBkaXNhYmxlZDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXG5cdFx0Ly8gVHJ5IHRvIHdpbm5vdyBvdXQgZWxlbWVudHMgdGhhdCBjYW4ndCBiZSBkaXNhYmxlZCBiZWZvcmUgdHJ1c3RpbmcgdGhlIGRpc2FibGVkIHByb3BlcnR5LlxuXHRcdC8vIFNvbWUgdmljdGltcyBnZXQgY2F1Z2h0IGluIG91ciBuZXQgKGxhYmVsLCBsZWdlbmQsIG1lbnUsIHRyYWNrKSwgYnV0IGl0IHNob3VsZG4ndFxuXHRcdC8vIGV2ZW4gZXhpc3Qgb24gdGhlbSwgbGV0IGFsb25lIGhhdmUgYSBib29sZWFuIHZhbHVlLlxuXHRcdH0gZWxzZSBpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdH1cblxuXHRcdC8vIFJlbWFpbmluZyBlbGVtZW50cyBhcmUgbmVpdGhlciA6ZW5hYmxlZCBub3IgOmRpc2FibGVkXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgcG9zaXRpb25hbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkge1xuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggYXJndW1lbnQgKSB7XG5cdFx0YXJndW1lbnQgPSArYXJndW1lbnQ7XG5cdFx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHR2YXIgaixcblx0XHRcdFx0bWF0Y2hJbmRleGVzID0gZm4oIFtdLCBzZWVkLmxlbmd0aCwgYXJndW1lbnQgKSxcblx0XHRcdFx0aSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7XG5cblx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlc1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggc2VlZFsgKCBqID0gbWF0Y2hJbmRleGVzWyBpIF0gKSBdICkge1xuXHRcdFx0XHRcdHNlZWRbIGogXSA9ICEoIG1hdGNoZXNbIGogXSA9IHNlZWRbIGogXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9ICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBqUXVlcnkgc2VsZWN0b3IgY29udGV4dFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHRcbiAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHtcblx0cmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29udGV4dDtcbn1cblxuLyoqXG4gKiBTZXRzIGRvY3VtZW50LXJlbGF0ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IFtub2RlXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudFxuICovXG5mdW5jdGlvbiBzZXREb2N1bWVudCggbm9kZSApIHtcblx0dmFyIHN1YldpbmRvdyxcblx0XHRkb2MgPSBub2RlID8gbm9kZS5vd25lckRvY3VtZW50IHx8IG5vZGUgOiBwcmVmZXJyZWREb2M7XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGlmIGRvYyBpcyBpbnZhbGlkIG9yIGFscmVhZHkgc2VsZWN0ZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCBkb2MgPT0gZG9jdW1lbnQgfHwgZG9jLm5vZGVUeXBlICE9PSA5IHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50ICkge1xuXHRcdHJldHVybiBkb2N1bWVudDtcblx0fVxuXG5cdC8vIFVwZGF0ZSBnbG9iYWwgdmFyaWFibGVzXG5cdGRvY3VtZW50ID0gZG9jO1xuXHRkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdGRvY3VtZW50SXNIVE1MID0gIWpRdWVyeS5pc1hNTERvYyggZG9jdW1lbnQgKTtcblxuXHQvLyBTdXBwb3J0OiBpT1MgNyBvbmx5LCBJRSA5IC0gMTErXG5cdC8vIE9sZGVyIGJyb3dzZXJzIGRpZG4ndCBzdXBwb3J0IHVucHJlZml4ZWQgYG1hdGNoZXNgLlxuXHRtYXRjaGVzID0gZG9jdW1lbnRFbGVtZW50Lm1hdGNoZXMgfHxcblx0XHRkb2N1bWVudEVsZW1lbnQud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jdW1lbnRFbGVtZW50Lm1zTWF0Y2hlc1NlbGVjdG9yO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCtcblx0Ly8gQWNjZXNzaW5nIGlmcmFtZSBkb2N1bWVudHMgYWZ0ZXIgdW5sb2FkIHRocm93cyBcInBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3JzXG5cdC8vIChzZWUgdHJhYy0xMzkzNikuXG5cdC8vIExpbWl0IHRoZSBmaXggdG8gSUUgJiBFZGdlIExlZ2FjeTsgZGVzcGl0ZSBFZGdlIDE1KyBpbXBsZW1lbnRpbmcgYG1hdGNoZXNgLFxuXHQvLyBhbGwgSUUgOSsgYW5kIEVkZ2UgTGVnYWN5IHZlcnNpb25zIGltcGxlbWVudCBgbXNNYXRjaGVzU2VsZWN0b3JgIGFzIHdlbGwuXG5cdGlmICggZG9jdW1lbnRFbGVtZW50Lm1zTWF0Y2hlc1NlbGVjdG9yICYmXG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdHByZWZlcnJlZERvYyAhPSBkb2N1bWVudCAmJlxuXHRcdCggc3ViV2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcgKSAmJiBzdWJXaW5kb3cudG9wICE9PSBzdWJXaW5kb3cgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrXG5cdFx0c3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwidW5sb2FkXCIsIHVubG9hZEhhbmRsZXIgKTtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDwxMFxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWVcblx0Ly8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbW1hdGljYWxseS1zZXQgbmFtZXMsXG5cdC8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdFxuXHRzdXBwb3J0LmdldEJ5SWQgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGVsICkuaWQgPSBqUXVlcnkuZXhwYW5kbztcblx0XHRyZXR1cm4gIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lIHx8XG5cdFx0XHQhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGpRdWVyeS5leHBhbmRvICkubGVuZ3RoO1xuXHR9ICk7XG5cblx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdC8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvclxuXHQvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlLlxuXHRzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXMuY2FsbCggZWwsIFwiKlwiICk7XG5cdH0gKTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrXG5cdC8vIElFL0VkZ2UgZG9uJ3Qgc3VwcG9ydCB0aGUgOnNjb3BlIHBzZXVkby1jbGFzcy5cblx0c3VwcG9ydC5zY29wZSA9IGFzc2VydCggZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOnNjb3BlXCIgKTtcblx0fSApO1xuXG5cdC8vIFN1cHBvcnQ6IENocm9tZSAxMDUgLSAxMTEgb25seSwgU2FmYXJpIDE1LjQgLSAxNi4zIG9ubHlcblx0Ly8gTWFrZSBzdXJlIHRoZSBgOmhhcygpYCBhcmd1bWVudCBpcyBwYXJzZWQgdW5mb3JnaXZpbmdseS5cblx0Ly8gV2UgaW5jbHVkZSBgKmAgaW4gdGhlIHRlc3QgdG8gZGV0ZWN0IGJ1Z2d5IGltcGxlbWVudGF0aW9ucyB0aGF0IGFyZVxuXHQvLyBfc2VsZWN0aXZlbHlfIGZvcmdpdmluZyAoc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGxpc3QgaW5jbHVkZXMgYXQgbGVhc3Rcblx0Ly8gb25lIHZhbGlkIHNlbGVjdG9yKS5cblx0Ly8gTm90ZSB0aGF0IHdlIHRyZWF0IGNvbXBsZXRlIGxhY2sgb2Ygc3VwcG9ydCBmb3IgYDpoYXMoKWAgYXMgaWYgaXQgd2VyZVxuXHQvLyBzcGVjLWNvbXBsaWFudCBzdXBwb3J0LCB3aGljaCBpcyBmaW5lIGJlY2F1c2UgdXNlIG9mIGA6aGFzKClgIGluIHN1Y2hcblx0Ly8gZW52aXJvbm1lbnRzIHdpbGwgZmFpbCBpbiB0aGUgcVNBIHBhdGggYW5kIGZhbGwgYmFjayB0byBqUXVlcnkgdHJhdmVyc2FsXG5cdC8vIGFueXdheS5cblx0c3VwcG9ydC5jc3NIYXMgPSBhc3NlcnQoIGZ1bmN0aW9uKCkge1xuXHRcdHRyeSB7XG5cdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCBcIjpoYXMoKiw6anFmYWtlKVwiICk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH0gKTtcblxuXHQvLyBJRCBmaWx0ZXIgYW5kIGZpbmRcblx0aWYgKCBzdXBwb3J0LmdldEJ5SWQgKSB7XG5cdFx0RXhwci5maWx0ZXIuSUQgPSBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBcImlkXCIgKSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXHRcdEV4cHIuZmluZC5JRCA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblx0XHRcdFx0cmV0dXJuIGVsZW0gPyBbIGVsZW0gXSA6IFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0RXhwci5maWx0ZXIuSUQgPSAgZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdHJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDYgLSA3IG9ubHlcblx0XHQvLyBnZXRFbGVtZW50QnlJZCBpcyBub3QgcmVsaWFibGUgYXMgYSBmaW5kIHNob3J0Y3V0XG5cdFx0RXhwci5maW5kLklEID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIG5vZGUsIGksIGVsZW1zLFxuXHRcdFx0XHRcdGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXG5cdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdC8vIFZlcmlmeSB0aGUgaWQgYXR0cmlidXRlXG5cdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEZhbGwgYmFjayBvbiBnZXRFbGVtZW50c0J5TmFtZVxuXHRcdFx0XHRcdGVsZW1zID0gY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSggaWQgKTtcblx0XHRcdFx0XHRpID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1zWyBpKysgXSApICkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8vIFRhZ1xuXHRFeHByLmZpbmQuVEFHID0gZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0Ly8gRG9jdW1lbnRGcmFnbWVudCBub2RlcyBkb24ndCBoYXZlIGdFQlROXG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyApO1xuXHRcdH1cblx0fTtcblxuXHQvLyBDbGFzc1xuXHRFeHByLmZpbmQuQ0xBU1MgPSBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkge1xuXHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0XG5cblx0cmJ1Z2d5UVNBID0gW107XG5cblx0Ly8gQnVpbGQgUVNBIHJlZ2V4XG5cdC8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmlcblx0YXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cblx0XHR2YXIgaW5wdXQ7XG5cblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGVsICkuaW5uZXJIVE1MID1cblx0XHRcdFwiPGEgaWQ9J1wiICsgZXhwYW5kbyArIFwiJyBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPlwiICtcblx0XHRcdFwiPHNlbGVjdCBpZD0nXCIgKyBleHBhbmRvICsgXCItXFxyXFxcXCcgZGlzYWJsZWQ9J2Rpc2FibGVkJz5cIiArXG5cdFx0XHRcIjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCI7XG5cblx0XHQvLyBTdXBwb3J0OiBpT1MgPD03IC0gOCBvbmx5XG5cdFx0Ly8gQm9vbGVhbiBhdHRyaWJ1dGVzIGFuZCBcInZhbHVlXCIgYXJlIG5vdCB0cmVhdGVkIGNvcnJlY3RseSBpbiBzb21lIFhNTCBkb2N1bWVudHNcblx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltzZWxlY3RlZF1cIiApLmxlbmd0aCApIHtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86dmFsdWV8XCIgKyBib29sZWFucyArIFwiKVwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogaU9TIDw9NyAtIDggb25seVxuXHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW2lkfj1cIiArIGV4cGFuZG8gKyBcIi1dXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJ+PVwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogaU9TIDggb25seVxuXHRcdC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTFcblx0XHQvLyBJbi1wYWdlIGBzZWxlY3RvciNpZCBzaWJsaW5nLWNvbWJpbmF0b3Igc2VsZWN0b3JgIGZhaWxzXG5cdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJhI1wiICsgZXhwYW5kbyArIFwiKypcIiApLmxlbmd0aCApIHtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIi4jLitbK35dXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0xMDUrLCBGaXJlZm94IDw9MTA0KywgU2FmYXJpIDw9MTUuNCtcblx0XHQvLyBJbiBzb21lIG9mIHRoZSBkb2N1bWVudCBraW5kcywgdGhlc2Ugc2VsZWN0b3JzIHdvdWxkbid0IHdvcmsgbmF0aXZlbHkuXG5cdFx0Ly8gVGhpcyBpcyBwcm9iYWJseSBPSyBidXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdlIHdhbnQgdG8gbWFpbnRhaW5cblx0XHQvLyBoYW5kbGluZyB0aGVtIHRocm91Z2ggalF1ZXJ5IHRyYXZlcnNhbCBpbiBqUXVlcnkgMy54LlxuXHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOmNoZWNrZWRcIiApLmxlbmd0aCApIHtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjpjaGVja2VkXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBXaW5kb3dzIDggTmF0aXZlIEFwcHNcblx0XHQvLyBUaGUgdHlwZSBhbmQgbmFtZSBhdHRyaWJ1dGVzIGFyZSByZXN0cmljdGVkIGR1cmluZyAuaW5uZXJIVE1MIGFzc2lnbm1lbnRcblx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwiaGlkZGVuXCIgKTtcblx0XHRlbC5hcHBlbmRDaGlsZCggaW5wdXQgKS5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcIkRcIiApO1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExK1xuXHRcdC8vIElFJ3MgOmRpc2FibGVkIHNlbGVjdG9yIGRvZXMgbm90IHBpY2sgdXAgdGhlIGNoaWxkcmVuIG9mIGRpc2FibGVkIGZpZWxkc2V0c1xuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTEwNSssIEZpcmVmb3ggPD0xMDQrLCBTYWZhcmkgPD0xNS40K1xuXHRcdC8vIEluIHNvbWUgb2YgdGhlIGRvY3VtZW50IGtpbmRzLCB0aGVzZSBzZWxlY3RvcnMgd291bGRuJ3Qgd29yayBuYXRpdmVseS5cblx0XHQvLyBUaGlzIGlzIHByb2JhYmx5IE9LIGJ1dCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2Ugd2FudCB0byBtYWludGFpblxuXHRcdC8vIGhhbmRsaW5nIHRoZW0gdGhyb3VnaCBqUXVlcnkgdHJhdmVyc2FsIGluIGpRdWVyeSAzLnguXG5cdFx0ZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBlbCApLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOmRpc2FibGVkXCIgKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0Ly8gSUUgMTEvRWRnZSBkb24ndCBmaW5kIGVsZW1lbnRzIG9uIGEgYFtuYW1lPScnXWAgcXVlcnkgaW4gc29tZSBjYXNlcy5cblx0XHQvLyBBZGRpbmcgYSB0ZW1wb3JhcnkgYXR0cmlidXRlIHRvIHRoZSBkb2N1bWVudCBiZWZvcmUgdGhlIHNlbGVjdGlvbiB3b3Jrc1xuXHRcdC8vIGFyb3VuZCB0aGUgaXNzdWUuXG5cdFx0Ly8gSW50ZXJlc3RpbmdseSwgSUUgMTAgJiBvbGRlciBkb24ndCBzZWVtIHRvIGhhdmUgdGhlIGlzc3VlLlxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJcIiApO1xuXHRcdGVsLmFwcGVuZENoaWxkKCBpbnB1dCApO1xuXHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW25hbWU9JyddXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKm5hbWVcIiArIHdoaXRlc3BhY2UgKyBcIio9XCIgK1xuXHRcdFx0XHR3aGl0ZXNwYWNlICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIgKTtcblx0XHR9XG5cdH0gKTtcblxuXHRpZiAoICFzdXBwb3J0LmNzc0hhcyApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSAxMDUgLSAxMTArLCBTYWZhcmkgMTUuNCAtIDE2LjMrXG5cdFx0Ly8gT3VyIHJlZ3VsYXIgYHRyeS1jYXRjaGAgbWVjaGFuaXNtIGZhaWxzIHRvIGRldGVjdCBuYXRpdmVseS11bnN1cHBvcnRlZFxuXHRcdC8vIHBzZXVkby1jbGFzc2VzIGluc2lkZSBgOmhhcygpYCAoc3VjaCBhcyBgOmhhcyg6Y29udGFpbnMoXCJGb29cIikpYClcblx0XHQvLyBpbiBicm93c2VycyB0aGF0IHBhcnNlIHRoZSBgOmhhcygpYCBhcmd1bWVudCBhcyBhIGZvcmdpdmluZyBzZWxlY3RvciBsaXN0LlxuXHRcdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9zZWxlY3RvcnMvI3JlbGF0aW9uYWwgbm93IHJlcXVpcmVzIHRoZSBhcmd1bWVudFxuXHRcdC8vIHRvIGJlIHBhcnNlZCB1bmZvcmdpdmluZ2x5LCBidXQgYnJvd3NlcnMgaGF2ZSBub3QgeWV0IGZ1bGx5IGFkanVzdGVkLlxuXHRcdHJidWdneVFTQS5wdXNoKCBcIjpoYXNcIiApO1xuXHR9XG5cblx0cmJ1Z2d5UVNBID0gcmJ1Z2d5UVNBLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lRU0Euam9pbiggXCJ8XCIgKSApO1xuXG5cdC8qIFNvcnRpbmdcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIERvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0c29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7XG5cblx0XHQvLyBGbGFnIGZvciBkdXBsaWNhdGUgcmVtb3ZhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHQvLyBTb3J0IG9uIG1ldGhvZCBleGlzdGVuY2UgaWYgb25seSBvbmUgaW5wdXQgaGFzIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uXG5cdFx0dmFyIGNvbXBhcmUgPSAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO1xuXHRcdGlmICggY29tcGFyZSApIHtcblx0XHRcdHJldHVybiBjb21wYXJlO1xuXHRcdH1cblxuXHRcdC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBpZiBib3RoIGlucHV0cyBiZWxvbmcgdG8gdGhlIHNhbWUgZG9jdW1lbnRcblx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdGNvbXBhcmUgPSAoIGEub3duZXJEb2N1bWVudCB8fCBhICkgPT0gKCBiLm93bmVyRG9jdW1lbnQgfHwgYiApID9cblx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGIgKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSB3ZSBrbm93IHRoZXkgYXJlIGRpc2Nvbm5lY3RlZFxuXHRcdFx0MTtcblxuXHRcdC8vIERpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdGlmICggY29tcGFyZSAmIDEgfHxcblx0XHRcdCggIXN1cHBvcnQuc29ydERldGFjaGVkICYmIGIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGEgKSA9PT0gY29tcGFyZSApICkge1xuXG5cdFx0XHQvLyBDaG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQgZG9jdW1lbnRcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRpZiAoIGEgPT09IGRvY3VtZW50IHx8IGEub3duZXJEb2N1bWVudCA9PSBwcmVmZXJyZWREb2MgJiZcblx0XHRcdFx0ZmluZC5jb250YWlucyggcHJlZmVycmVkRG9jLCBhICkgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdGlmICggYiA9PT0gZG9jdW1lbnQgfHwgYi5vd25lckRvY3VtZW50ID09IHByZWZlcnJlZERvYyAmJlxuXHRcdFx0XHRmaW5kLmNvbnRhaW5zKCBwcmVmZXJyZWREb2MsIGIgKSApIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1haW50YWluIG9yaWdpbmFsIG9yZGVyXG5cdFx0XHRyZXR1cm4gc29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mLmNhbGwoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZi5jYWxsKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7XG5cdH07XG5cblx0cmV0dXJuIGRvY3VtZW50O1xufVxuXG5maW5kLm1hdGNoZXMgPSBmdW5jdGlvbiggZXhwciwgZWxlbWVudHMgKSB7XG5cdHJldHVybiBmaW5kKCBleHByLCBudWxsLCBudWxsLCBlbGVtZW50cyApO1xufTtcblxuZmluZC5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHtcblx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblxuXHRpZiAoIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIGV4cHIgKyBcIiBcIiBdICYmXG5cdFx0KCAhcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggZXhwciApICkgKSB7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIHJldCA9IG1hdGNoZXMuY2FsbCggZWxlbSwgZXhwciApO1xuXG5cdFx0XHQvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0XHRpZiAoIHJldCB8fCBzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoIHx8XG5cblx0XHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxuXHRcdFx0XHRcdC8vIGZyYWdtZW50IGluIElFIDlcblx0XHRcdFx0XHRlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSggZXhwciwgdHJ1ZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmaW5kKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwO1xufTtcblxuZmluZC5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVtICkge1xuXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHR9XG5cdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTtcbn07XG5cblxuZmluZC5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdH1cblxuXHR2YXIgZm4gPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUudG9Mb3dlckNhc2UoKSBdLFxuXG5cdFx0Ly8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKHNlZSB0cmFjLTEzODA3KVxuXHRcdHZhbCA9IGZuICYmIGhhc093bi5jYWxsKCBFeHByLmF0dHJIYW5kbGUsIG5hbWUudG9Mb3dlckNhc2UoKSApID9cblx0XHRcdGZuKCBlbGVtLCBuYW1lLCAhZG9jdW1lbnRJc0hUTUwgKSA6XG5cdFx0XHR1bmRlZmluZWQ7XG5cblx0aWYgKCB2YWwgIT09IHVuZGVmaW5lZCApIHtcblx0XHRyZXR1cm4gdmFsO1xuXHR9XG5cblx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG59O1xuXG5maW5kLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHtcblx0dGhyb3cgbmV3IEVycm9yKCBcIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246IFwiICsgbXNnICk7XG59O1xuXG4vKipcbiAqIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAqIEBwYXJhbSB7QXJyYXlMaWtlfSByZXN1bHRzXG4gKi9cbmpRdWVyeS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7XG5cdHZhciBlbGVtLFxuXHRcdGR1cGxpY2F0ZXMgPSBbXSxcblx0XHRqID0gMCxcblx0XHRpID0gMDtcblxuXHQvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlXG5cdC8vXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjArXG5cdC8vIFRlc3RpbmcgZm9yIGRldGVjdGluZyBkdXBsaWNhdGVzIGlzIHVucHJlZGljdGFibGUgc28gaW5zdGVhZCBhc3N1bWUgd2UgY2FuJ3Rcblx0Ly8gZGVwZW5kIG9uIGR1cGxpY2F0ZSBkZXRlY3Rpb24gaW4gYWxsIGJyb3dzZXJzIHdpdGhvdXQgYSBzdGFibGUgc29ydC5cblx0aGFzRHVwbGljYXRlID0gIXN1cHBvcnQuc29ydFN0YWJsZTtcblx0c29ydElucHV0ID0gIXN1cHBvcnQuc29ydFN0YWJsZSAmJiBzbGljZS5jYWxsKCByZXN1bHRzLCAwICk7XG5cdHNvcnQuY2FsbCggcmVzdWx0cywgc29ydE9yZGVyICk7XG5cblx0aWYgKCBoYXNEdXBsaWNhdGUgKSB7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSByZXN1bHRzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRzcGxpY2UuY2FsbCggcmVzdWx0cywgZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG5qUXVlcnkuZm4udW5pcXVlU29ydCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS51bmlxdWVTb3J0KCBzbGljZS5hcHBseSggdGhpcyApICkgKTtcbn07XG5cbkV4cHIgPSBqUXVlcnkuZXhwciA9IHtcblxuXHQvLyBDYW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXJcblx0Y2FjaGVMZW5ndGg6IDUwLFxuXG5cdGNyZWF0ZVBzZXVkbzogbWFya0Z1bmN0aW9uLFxuXG5cdG1hdGNoOiBtYXRjaEV4cHIsXG5cblx0YXR0ckhhbmRsZToge30sXG5cblx0ZmluZDoge30sXG5cblx0cmVsYXRpdmU6IHtcblx0XHRcIj5cIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiIFwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIgfSxcblx0XHRcIitcIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCJ+XCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiIH1cblx0fSxcblxuXHRwcmVGaWx0ZXI6IHtcblx0XHRBVFRSOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaFsgMSBdID0gbWF0Y2hbIDEgXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHQvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1bnF1b3RlZFxuXHRcdFx0bWF0Y2hbIDMgXSA9ICggbWF0Y2hbIDMgXSB8fCBtYXRjaFsgNCBdIHx8IG1hdGNoWyA1IF0gfHwgXCJcIiApXG5cdFx0XHRcdC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHRpZiAoIG1hdGNoWyAyIF0gPT09IFwifj1cIiApIHtcblx0XHRcdFx0bWF0Y2hbIDMgXSA9IFwiIFwiICsgbWF0Y2hbIDMgXSArIFwiIFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDQgKTtcblx0XHR9LFxuXG5cdFx0Q0hJTEQ6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblxuXHRcdFx0LyogbWF0Y2hlcyBmcm9tIG1hdGNoRXhwcltcIkNISUxEXCJdXG5cdFx0XHRcdDEgdHlwZSAob25seXxudGh8Li4uKVxuXHRcdFx0XHQyIHdoYXQgKGNoaWxkfG9mLXR5cGUpXG5cdFx0XHRcdDMgYXJndW1lbnQgKGV2ZW58b2RkfFxcZCp8XFxkKm4oWystXVxcZCspP3wuLi4pXG5cdFx0XHRcdDQgeG4tY29tcG9uZW50IG9mIHhuK3kgYXJndW1lbnQgKFsrLV0/XFxkKm58KVxuXHRcdFx0XHQ1IHNpZ24gb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDYgeCBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NyBzaWduIG9mIHktY29tcG9uZW50XG5cdFx0XHRcdDggeSBvZiB5LWNvbXBvbmVudFxuXHRcdFx0Ki9cblx0XHRcdG1hdGNoWyAxIF0gPSBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdGlmICggbWF0Y2hbIDEgXS5zbGljZSggMCwgMyApID09PSBcIm50aFwiICkge1xuXG5cdFx0XHRcdC8vIG50aC0qIHJlcXVpcmVzIGFyZ3VtZW50XG5cdFx0XHRcdGlmICggIW1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdFx0ZmluZC5lcnJvciggbWF0Y2hbIDAgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxEXG5cdFx0XHRcdC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzFcblx0XHRcdFx0bWF0Y2hbIDQgXSA9ICsoIG1hdGNoWyA0IF0gP1xuXHRcdFx0XHRcdG1hdGNoWyA1IF0gKyAoIG1hdGNoWyA2IF0gfHwgMSApIDpcblx0XHRcdFx0XHQyICogKCBtYXRjaFsgMyBdID09PSBcImV2ZW5cIiB8fCBtYXRjaFsgMyBdID09PSBcIm9kZFwiIClcblx0XHRcdFx0KTtcblx0XHRcdFx0bWF0Y2hbIDUgXSA9ICsoICggbWF0Y2hbIDcgXSArIG1hdGNoWyA4IF0gKSB8fCBtYXRjaFsgMyBdID09PSBcIm9kZFwiICk7XG5cblx0XHRcdC8vIG90aGVyIHR5cGVzIHByb2hpYml0IGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0ZmluZC5lcnJvciggbWF0Y2hbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0fSxcblxuXHRcdFBTRVVETzogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbIDYgXSAmJiBtYXRjaFsgMiBdO1xuXG5cdFx0XHRpZiAoIG1hdGNoRXhwci5DSElMRC50ZXN0KCBtYXRjaFsgMCBdICkgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBY2NlcHQgcXVvdGVkIGFyZ3VtZW50cyBhcy1pc1xuXHRcdFx0aWYgKCBtYXRjaFsgMyBdICkge1xuXHRcdFx0XHRtYXRjaFsgMiBdID0gbWF0Y2hbIDQgXSB8fCBtYXRjaFsgNSBdIHx8IFwiXCI7XG5cblx0XHRcdC8vIFN0cmlwIGV4Y2VzcyBjaGFyYWN0ZXJzIGZyb20gdW5xdW90ZWQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVkICkgJiZcblxuXHRcdFx0XHQvLyBHZXQgZXhjZXNzIGZyb20gdG9rZW5pemUgKHJlY3Vyc2l2ZWx5KVxuXHRcdFx0XHQoIGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApICkgJiZcblxuXHRcdFx0XHQvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0KCBleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCBcIilcIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1bnF1b3RlZC5sZW5ndGggKSApIHtcblxuXHRcdFx0XHQvLyBleGNlc3MgaXMgYSBuZWdhdGl2ZSBpbmRleFxuXHRcdFx0XHRtYXRjaFsgMCBdID0gbWF0Y2hbIDAgXS5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHRcdG1hdGNoWyAyIF0gPSB1bnF1b3RlZC5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldHVybiBvbmx5IGNhcHR1cmVzIG5lZWRlZCBieSB0aGUgcHNldWRvIGZpbHRlciBtZXRob2QgKHR5cGUgYW5kIGFyZ3VtZW50KVxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCAzICk7XG5cdFx0fVxuXHR9LFxuXG5cdGZpbHRlcjoge1xuXG5cdFx0VEFHOiBmdW5jdGlvbiggbm9kZU5hbWVTZWxlY3RvciApIHtcblx0XHRcdHZhciBleHBlY3RlZE5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiBub2RlTmFtZSggZWxlbSwgZXhwZWN0ZWROb2RlTmFtZSApO1xuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRDTEFTUzogZnVuY3Rpb24oIGNsYXNzTmFtZSApIHtcblx0XHRcdHZhciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgY2xhc3NOYW1lICsgXCIgXCIgXTtcblxuXHRcdFx0cmV0dXJuIHBhdHRlcm4gfHxcblx0XHRcdFx0KCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIGNsYXNzTmFtZSArXG5cdFx0XHRcdFx0XCIoXCIgKyB3aGl0ZXNwYWNlICsgXCJ8JClcIiApICkgJiZcblx0XHRcdFx0Y2xhc3NDYWNoZSggY2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGF0dGVybi50ZXN0KFxuXHRcdFx0XHRcdFx0dHlwZW9mIGVsZW0uY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsZW0uY2xhc3NOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBcImNsYXNzXCIgKSB8fFxuXHRcdFx0XHRcdFx0XHRcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSApO1xuXHRcdH0sXG5cblx0XHRBVFRSOiBmdW5jdGlvbiggbmFtZSwgb3BlcmF0b3IsIGNoZWNrICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gZmluZC5hdHRyKCBlbGVtLCBuYW1lICk7XG5cblx0XHRcdFx0aWYgKCByZXN1bHQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiIT1cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoICFvcGVyYXRvciApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlc3VsdCArPSBcIlwiO1xuXG5cdFx0XHRcdGlmICggb3BlcmF0b3IgPT09IFwiPVwiICkge1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHQgPT09IGNoZWNrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggb3BlcmF0b3IgPT09IFwiIT1cIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0ICE9PSBjaGVjaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcIl49XCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID09PSAwO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggb3BlcmF0b3IgPT09IFwiKj1cIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPiAtMTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcIiQ9XCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNoZWNrICYmIHJlc3VsdC5zbGljZSggLWNoZWNrLmxlbmd0aCApID09PSBjaGVjaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcIn49XCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuICggXCIgXCIgKyByZXN1bHQucmVwbGFjZSggcndoaXRlc3BhY2UsIFwiIFwiICkgKyBcIiBcIiApXG5cdFx0XHRcdFx0XHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggb3BlcmF0b3IgPT09IFwifD1cIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyBcIi1cIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdENISUxEOiBmdW5jdGlvbiggdHlwZSwgd2hhdCwgX2FyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHtcblx0XHRcdHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09IFwibnRoXCIsXG5cdFx0XHRcdGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSBcImxhc3RcIixcblx0XHRcdFx0b2ZUeXBlID0gd2hhdCA9PT0gXCJvZi10eXBlXCI7XG5cblx0XHRcdHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID9cblxuXHRcdFx0XHQvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdFx0fSA6XG5cblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LFxuXHRcdFx0XHRcdFx0ZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIixcblx0XHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSxcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0dXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsXG5cdFx0XHRcdFx0XHRkaWZmID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHRcdFx0aWYgKCBzaW1wbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggZGlyICkge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gbm9kZVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZU5hbWUoIG5vZGUsIG5hbWUgKSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdC8vIFJldmVyc2UgZGlyZWN0aW9uIGZvciA6b25seS0qIChpZiB3ZSBoYXZlbid0IHlldCBkb25lIHNvKVxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0ID0gZGlyID0gdHlwZSA9PT0gXCJvbmx5XCIgJiYgIXN0YXJ0ICYmIFwibmV4dFNpYmxpbmdcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0c3RhcnQgPSBbIGZvcndhcmQgPyBwYXJlbnQuZmlyc3RDaGlsZCA6IHBhcmVudC5sYXN0Q2hpbGQgXTtcblxuXHRcdFx0XHRcdFx0Ly8gbm9uLXhtbCA6bnRoLWNoaWxkKC4uLikgc3RvcmVzIGNhY2hlIGRhdGEgb24gYHBhcmVudGBcblx0XHRcdFx0XHRcdGlmICggZm9yd2FyZCAmJiB1c2VDYWNoZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTZWVrIGBlbGVtYCBmcm9tIGEgcHJldmlvdXNseS1jYWNoZWQgaW5kZXhcblx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IHBhcmVudFsgZXhwYW5kbyBdIHx8ICggcGFyZW50WyBleHBhbmRvIF0gPSB7fSApO1xuXHRcdFx0XHRcdFx0XHRjYWNoZSA9IG91dGVyQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBub2RlSW5kZXggJiYgcGFyZW50LmNoaWxkTm9kZXNbIG5vZGVJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHQoIGRpZmYgPSBub2RlSW5kZXggPSAwICkgfHwgc3RhcnQucG9wKCkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlLm5vZGVUeXBlID09PSAxICYmICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFVzZSBwcmV2aW91c2x5LWNhY2hlZCBlbGVtZW50IGluZGV4IGlmIGF2YWlsYWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRvIF0gfHwgKCBlbGVtWyBleHBhbmRvIF0gPSB7fSApO1xuXHRcdFx0XHRcdFx0XHRcdGNhY2hlID0gb3V0ZXJDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8geG1sIDpudGgtY2hpbGQoLi4uKVxuXHRcdFx0XHRcdFx0XHQvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pXG5cdFx0XHRcdFx0XHRcdGlmICggZGlmZiA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBVc2UgdGhlIHNhbWUgbG9vcCBhcyBhYm92ZSB0byBzZWVrIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KCBkaWZmID0gbm9kZUluZGV4ID0gMCApIHx8IHN0YXJ0LnBvcCgpICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmICggKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlTmFtZSggbm9kZSwgbmFtZSApIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCsrZGlmZiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBDYWNoZSB0aGUgaW5kZXggb2YgZWFjaCBlbmNvdW50ZXJlZCBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCBub2RlWyBleHBhbmRvIF0gPSB7fSApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplXG5cdFx0XHRcdFx0XHRkaWZmIC09IGxhc3Q7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFBTRVVETzogZnVuY3Rpb24oIHBzZXVkbywgYXJndW1lbnQgKSB7XG5cblx0XHRcdC8vIHBzZXVkby1jbGFzcyBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcblx0XHRcdC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXG5cdFx0XHR2YXIgYXJncyxcblx0XHRcdFx0Zm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHRcdGZpbmQuZXJyb3IoIFwidW5zdXBwb3J0ZWQgcHNldWRvOiBcIiArIHBzZXVkbyApO1xuXG5cdFx0XHQvLyBUaGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0XG5cdFx0XHQvLyBhcmd1bWVudHMgYXJlIG5lZWRlZCB0byBjcmVhdGUgdGhlIGZpbHRlciBmdW5jdGlvblxuXHRcdFx0Ly8ganVzdCBhcyBqUXVlcnkgZG9lc1xuXHRcdFx0aWYgKCBmblsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRyZXR1cm4gZm4oIGFyZ3VtZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlc1xuXHRcdFx0aWYgKCBmbi5sZW5ndGggPiAxICkge1xuXHRcdFx0XHRhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgXCJcIiwgYXJndW1lbnQgXTtcblx0XHRcdFx0cmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRcdFx0bWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdFx0XHRcdHZhciBpZHgsXG5cdFx0XHRcdFx0XHRcdG1hdGNoZWQgPSBmbiggc2VlZCwgYXJndW1lbnQgKSxcblx0XHRcdFx0XHRcdFx0aSA9IG1hdGNoZWQubGVuZ3RoO1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlkeCA9IGluZGV4T2YuY2FsbCggc2VlZCwgbWF0Y2hlZFsgaSBdICk7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkWyBpIF0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZuO1xuXHRcdH1cblx0fSxcblxuXHRwc2V1ZG9zOiB7XG5cblx0XHQvLyBQb3RlbnRpYWxseSBjb21wbGV4IHBzZXVkb3Ncblx0XHRub3Q6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXG5cdFx0XHQvLyBUcmltIHRoZSBzZWxlY3RvciBwYXNzZWQgdG8gY29tcGlsZVxuXHRcdFx0Ly8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmdcblx0XHRcdC8vIHNwYWNlcyBhcyBjb21iaW5hdG9yc1xuXHRcdFx0dmFyIGlucHV0ID0gW10sXG5cdFx0XHRcdHJlc3VsdHMgPSBbXSxcblx0XHRcdFx0bWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltQ1NTLCBcIiQxXCIgKSApO1xuXG5cdFx0XHRyZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID9cblx0XHRcdFx0bWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcywgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0XHRcdHVubWF0Y2hlZCA9IG1hdGNoZXIoIHNlZWQsIG51bGwsIHhtbCwgW10gKSxcblx0XHRcdFx0XHRcdGkgPSBzZWVkLmxlbmd0aDtcblxuXHRcdFx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hlZCBieSBgbWF0Y2hlcmBcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gdW5tYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0c2VlZFsgaSBdID0gISggbWF0Y2hlc1sgaSBdID0gZWxlbSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApIDpcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0aW5wdXRbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0bWF0Y2hlciggaW5wdXQsIG51bGwsIHhtbCwgcmVzdWx0cyApO1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3Qga2VlcCB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdC8vIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvaXNzdWVzLzI5OSlcblx0XHRcdFx0XHRpbnB1dFsgMCBdID0gbnVsbDtcblx0XHRcdFx0XHRyZXR1cm4gIXJlc3VsdHMucG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0aGFzOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGZpbmQoIHNlbGVjdG9yLCBlbGVtICkubGVuZ3RoID4gMDtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0Y29udGFpbnM6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGpRdWVyeS50ZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0Ly8gXCJXaGV0aGVyIGFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYnkgYSA6bGFuZygpIHNlbGVjdG9yXG5cdFx0Ly8gaXMgYmFzZWQgc29sZWx5IG9uIHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWVcblx0XHQvLyBiZWluZyBlcXVhbCB0byB0aGUgaWRlbnRpZmllciBDLFxuXHRcdC8vIG9yIGJlZ2lubmluZyB3aXRoIHRoZSBpZGVudGlmaWVyIEMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgXCItXCIuXG5cdFx0Ly8gVGhlIG1hdGNoaW5nIG9mIEMgYWdhaW5zdCB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlIGlzIHBlcmZvcm1lZCBjYXNlLWluc2Vuc2l0aXZlbHkuXG5cdFx0Ly8gVGhlIGlkZW50aWZpZXIgQyBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgdmFsaWQgbGFuZ3VhZ2UgbmFtZS5cIlxuXHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvXG5cdFx0bGFuZzogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggbGFuZyApIHtcblxuXHRcdFx0Ly8gbGFuZyB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclxuXHRcdFx0aWYgKCAhcmlkZW50aWZpZXIudGVzdCggbGFuZyB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdGZpbmQuZXJyb3IoIFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBsYW5nICk7XG5cdFx0XHR9XG5cdFx0XHRsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBlbGVtTGFuZztcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtTGFuZyA9IGRvY3VtZW50SXNIVE1MID9cblx0XHRcdFx0XHRcdGVsZW0ubGFuZyA6XG5cdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJ4bWw6bGFuZ1wiICkgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoIFwibGFuZ1wiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0ZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1MYW5nID09PSBsYW5nIHx8IGVsZW1MYW5nLmluZGV4T2YoIGxhbmcgKyBcIi1cIiApID09PSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSB3aGlsZSAoICggZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSApICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHQvLyBNaXNjZWxsYW5lb3VzXG5cdFx0dGFyZ2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRcdFx0cmV0dXJuIGhhc2ggJiYgaGFzaC5zbGljZSggMSApID09PSBlbGVtLmlkO1xuXHRcdH0sXG5cblx0XHRyb290OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2N1bWVudEVsZW1lbnQ7XG5cdFx0fSxcblxuXHRcdGZvY3VzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBzYWZlQWN0aXZlRWxlbWVudCgpICYmXG5cdFx0XHRcdGRvY3VtZW50Lmhhc0ZvY3VzKCkgJiZcblx0XHRcdFx0ISEoIGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXggKTtcblx0XHR9LFxuXG5cdFx0Ly8gQm9vbGVhbiBwcm9wZXJ0aWVzXG5cdFx0ZW5hYmxlZDogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGZhbHNlICksXG5cdFx0ZGlzYWJsZWQ6IGNyZWF0ZURpc2FibGVkUHNldWRvKCB0cnVlICksXG5cblx0XHRjaGVja2VkOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdHJldHVybiAoIG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSAmJiAhIWVsZW0uY2hlY2tlZCApIHx8XG5cdFx0XHRcdCggbm9kZU5hbWUoIGVsZW0sIFwib3B0aW9uXCIgKSAmJiAhIWVsZW0uc2VsZWN0ZWQgKTtcblx0XHR9LFxuXG5cdFx0c2VsZWN0ZWQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExK1xuXHRcdFx0Ly8gQWNjZXNzaW5nIHRoZSBzZWxlY3RlZEluZGV4IHByb3BlcnR5XG5cdFx0XHQvLyBmb3JjZXMgdGhlIGJyb3dzZXIgdG8gdHJlYXQgdGhlIGRlZmF1bHQgb3B0aW9uIGFzXG5cdFx0XHQvLyBzZWxlY3RlZCB3aGVuIGluIGFuIG9wdGdyb3VwLlxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0XHRcdFx0ZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlO1xuXHRcdH0sXG5cblx0XHQvLyBDb250ZW50c1xuXHRcdGVtcHR5OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvXG5cdFx0XHQvLyA6ZW1wdHkgaXMgbmVnYXRlZCBieSBlbGVtZW50ICgxKSBvciBjb250ZW50IG5vZGVzICh0ZXh0OiAzOyBjZGF0YTogNDsgZW50aXR5IHJlZjogNSksXG5cdFx0XHQvLyAgIGJ1dCBub3QgYnkgb3RoZXJzIChjb21tZW50OiA4OyBwcm9jZXNzaW5nIGluc3RydWN0aW9uOiA3OyBldGMuKVxuXHRcdFx0Ly8gbm9kZVR5cGUgPCA2IHdvcmtzIGJlY2F1c2UgYXR0cmlidXRlcyAoMikgZG8gbm90IGFwcGVhciBhcyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA8IDYgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0cGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAhRXhwci5wc2V1ZG9zLmVtcHR5KCBlbGVtICk7XG5cdFx0fSxcblxuXHRcdC8vIEVsZW1lbnQvaW5wdXQgdHlwZXNcblx0XHRoZWFkZXI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRpbnB1dDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gcmlucHV0cy50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XG5cdFx0fSxcblxuXHRcdGJ1dHRvbjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICYmIGVsZW0udHlwZSA9PT0gXCJidXR0b25cIiB8fFxuXHRcdFx0XHRub2RlTmFtZSggZWxlbSwgXCJidXR0b25cIiApO1xuXHRcdH0sXG5cblx0XHR0ZXh0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBhdHRyO1xuXHRcdFx0cmV0dXJuIG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSAmJiBlbGVtLnR5cGUgPT09IFwidGV4dFwiICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDEwIG9ubHlcblx0XHRcdFx0Ly8gTmV3IEhUTUw1IGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4sIFwic2VhcmNoXCIpIGFwcGVhclxuXHRcdFx0XHQvLyB3aXRoIGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCJcblx0XHRcdFx0KCAoIGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSApID09IG51bGwgfHxcblx0XHRcdFx0XHRhdHRyLnRvTG93ZXJDYXNlKCkgPT09IFwidGV4dFwiICk7XG5cdFx0fSxcblxuXHRcdC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb25cblx0XHRmaXJzdDogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gWyAwIF07XG5cdFx0fSApLFxuXG5cdFx0bGFzdDogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIF9tYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHJldHVybiBbIGxlbmd0aCAtIDEgXTtcblx0XHR9ICksXG5cblx0XHRlcTogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIF9tYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHRyZXR1cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50IF07XG5cdFx0fSApLFxuXG5cdFx0ZXZlbjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdG9kZDogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAxO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdGx0OiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGk7XG5cblx0XHRcdGlmICggYXJndW1lbnQgPCAwICkge1xuXHRcdFx0XHRpID0gYXJndW1lbnQgKyBsZW5ndGg7XG5cdFx0XHR9IGVsc2UgaWYgKCBhcmd1bWVudCA+IGxlbmd0aCApIHtcblx0XHRcdFx0aSA9IGxlbmd0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGkgPSBhcmd1bWVudDtcblx0XHRcdH1cblxuXHRcdFx0Zm9yICggOyAtLWkgPj0gMDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdGd0OiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyArK2kgPCBsZW5ndGg7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9IClcblx0fVxufTtcblxuRXhwci5wc2V1ZG9zLm50aCA9IEV4cHIucHNldWRvcy5lcTtcblxuLy8gQWRkIGJ1dHRvbi9pbnB1dCB0eXBlIHBzZXVkb3NcbmZvciAoIGkgaW4geyByYWRpbzogdHJ1ZSwgY2hlY2tib3g6IHRydWUsIGZpbGU6IHRydWUsIHBhc3N3b3JkOiB0cnVlLCBpbWFnZTogdHJ1ZSB9ICkge1xuXHRFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUlucHV0UHNldWRvKCBpICk7XG59XG5mb3IgKCBpIGluIHsgc3VibWl0OiB0cnVlLCByZXNldDogdHJ1ZSB9ICkge1xuXHRFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUJ1dHRvblBzZXVkbyggaSApO1xufVxuXG4vLyBFYXN5IEFQSSBmb3IgY3JlYXRpbmcgbmV3IHNldEZpbHRlcnNcbmZ1bmN0aW9uIHNldEZpbHRlcnMoKSB7fVxuc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLmZpbHRlcnMgPSBFeHByLnBzZXVkb3M7XG5FeHByLnNldEZpbHRlcnMgPSBuZXcgc2V0RmlsdGVycygpO1xuXG5mdW5jdGlvbiB0b2tlbml6ZSggc2VsZWN0b3IsIHBhcnNlT25seSApIHtcblx0dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcblx0XHRjYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCBjYWNoZWQgKSB7XG5cdFx0cmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTtcblx0fVxuXG5cdHNvRmFyID0gc2VsZWN0b3I7XG5cdGdyb3VwcyA9IFtdO1xuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XG5cblx0d2hpbGUgKCBzb0ZhciApIHtcblxuXHRcdC8vIENvbW1hIGFuZCBmaXJzdCBydW5cblx0XHRpZiAoICFtYXRjaGVkIHx8ICggbWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSApICkge1xuXHRcdFx0aWYgKCBtYXRjaCApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZFxuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFsgMCBdLmxlbmd0aCApIHx8IHNvRmFyO1xuXHRcdFx0fVxuXHRcdFx0Z3JvdXBzLnB1c2goICggdG9rZW5zID0gW10gKSApO1xuXHRcdH1cblxuXHRcdG1hdGNoZWQgPSBmYWxzZTtcblxuXHRcdC8vIENvbWJpbmF0b3JzXG5cdFx0aWYgKCAoIG1hdGNoID0gcmxlYWRpbmdDb21iaW5hdG9yLmV4ZWMoIHNvRmFyICkgKSApIHtcblx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cblx0XHRcdFx0Ly8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlXG5cdFx0XHRcdHR5cGU6IG1hdGNoWyAwIF0ucmVwbGFjZSggcnRyaW1DU1MsIFwiIFwiIClcblx0XHRcdH0gKTtcblx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmlsdGVyc1xuXHRcdGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7XG5cdFx0XHRpZiAoICggbWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApICkgJiYgKCAhcHJlRmlsdGVyc1sgdHlwZSBdIHx8XG5cdFx0XHRcdCggbWF0Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkgKSApICkge1xuXHRcdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblx0XHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRcdG1hdGNoZXM6IG1hdGNoXG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICFtYXRjaGVkICkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXG5cdC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZ1xuXHQvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnNcblx0aWYgKCBwYXJzZU9ubHkgKSB7XG5cdFx0cmV0dXJuIHNvRmFyLmxlbmd0aDtcblx0fVxuXG5cdHJldHVybiBzb0ZhciA/XG5cdFx0ZmluZC5lcnJvciggc2VsZWN0b3IgKSA6XG5cblx0XHQvLyBDYWNoZSB0aGUgdG9rZW5zXG5cdFx0dG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7XG59XG5cbmZ1bmN0aW9uIHRvU2VsZWN0b3IoIHRva2VucyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0c2VsZWN0b3IgPSBcIlwiO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRzZWxlY3RvciArPSB0b2tlbnNbIGkgXS52YWx1ZTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7XG5cdHZhciBkaXIgPSBjb21iaW5hdG9yLmRpcixcblx0XHRza2lwID0gY29tYmluYXRvci5uZXh0LFxuXHRcdGtleSA9IHNraXAgfHwgZGlyLFxuXHRcdGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGtleSA9PT0gXCJwYXJlbnROb2RlXCIsXG5cdFx0ZG9uZU5hbWUgPSBkb25lKys7XG5cblx0cmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgP1xuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSA6XG5cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudHNcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIG9sZENhY2hlLCBvdXRlckNhY2hlLFxuXHRcdFx0XHRuZXdDYWNoZSA9IFsgZGlycnVucywgZG9uZU5hbWUgXTtcblxuXHRcdFx0Ly8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywgc28gdGhleSBkb24ndCBiZW5lZml0IGZyb20gY29tYmluYXRvciBjYWNoaW5nXG5cdFx0XHRpZiAoIHhtbCApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gZWxlbVsgZXhwYW5kbyBdIHx8ICggZWxlbVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0aWYgKCBza2lwICYmIG5vZGVOYW1lKCBlbGVtLCBza2lwICkgKSB7XG5cdFx0XHRcdFx0XHRcdGVsZW0gPSBlbGVtWyBkaXIgXSB8fCBlbGVtO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICggKCBvbGRDYWNoZSA9IG91dGVyQ2FjaGVbIGtleSBdICkgJiZcblx0XHRcdFx0XHRcdFx0b2xkQ2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBvbGRDYWNoZVsgMSBdID09PSBkb25lTmFtZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBc3NpZ24gdG8gbmV3Q2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKCBuZXdDYWNoZVsgMiBdID0gb2xkQ2FjaGVbIDIgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZXVzZSBuZXdjYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGVbIGtleSBdID0gbmV3Q2FjaGU7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQSBtYXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNraW5nXG5cdFx0XHRcdFx0XHRcdGlmICggKCBuZXdDYWNoZVsgMiBdID0gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcblx0cmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgP1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1sgaSBdKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gOlxuXHRcdG1hdGNoZXJzWyAwIF07XG59XG5cbmZ1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0ZmluZCggc2VsZWN0b3IsIGNvbnRleHRzWyBpIF0sIHJlc3VsdHMgKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHtcblx0dmFyIGVsZW0sXG5cdFx0bmV3VW5tYXRjaGVkID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bGVuID0gdW5tYXRjaGVkLmxlbmd0aCxcblx0XHRtYXBwZWQgPSBtYXAgIT0gbnVsbDtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoICggZWxlbSA9IHVubWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRpZiAoICFmaWx0ZXIgfHwgZmlsdGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0bmV3VW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0aWYgKCBtYXBwZWQgKSB7XG5cdFx0XHRcdFx0bWFwLnB1c2goIGkgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXdVbm1hdGNoZWQ7XG59XG5cbmZ1bmN0aW9uIHNldE1hdGNoZXIoIHByZUZpbHRlciwgc2VsZWN0b3IsIG1hdGNoZXIsIHBvc3RGaWx0ZXIsIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApIHtcblx0aWYgKCBwb3N0RmlsdGVyICYmICFwb3N0RmlsdGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbHRlciA9IHNldE1hdGNoZXIoIHBvc3RGaWx0ZXIgKTtcblx0fVxuXHRpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmluZGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICk7XG5cdH1cblx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHtcblx0XHR2YXIgdGVtcCwgaSwgZWxlbSwgbWF0Y2hlck91dCxcblx0XHRcdHByZU1hcCA9IFtdLFxuXHRcdFx0cG9zdE1hcCA9IFtdLFxuXHRcdFx0cHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHRcblx0XHRcdGVsZW1zID0gc2VlZCB8fFxuXHRcdFx0XHRtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciB8fCBcIipcIixcblx0XHRcdFx0XHRjb250ZXh0Lm5vZGVUeXBlID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LCBbXSApLFxuXG5cdFx0XHQvLyBQcmVmaWx0ZXIgdG8gZ2V0IG1hdGNoZXIgaW5wdXQsIHByZXNlcnZpbmcgYSBtYXAgZm9yIHNlZWQtcmVzdWx0cyBzeW5jaHJvbml6YXRpb25cblx0XHRcdG1hdGNoZXJJbiA9IHByZUZpbHRlciAmJiAoIHNlZWQgfHwgIXNlbGVjdG9yICkgP1xuXHRcdFx0XHRjb25kZW5zZSggZWxlbXMsIHByZU1hcCwgcHJlRmlsdGVyLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdGVsZW1zO1xuXG5cdFx0aWYgKCBtYXRjaGVyICkge1xuXG5cdFx0XHQvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlclxuXHRcdFx0Ly8gb3IgcHJlZXhpc3RpbmcgcmVzdWx0cyxcblx0XHRcdG1hdGNoZXJPdXQgPSBwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRlciA6IHByZWV4aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/XG5cblx0XHRcdFx0Ly8gLi4uaW50ZXJtZWRpYXRlIHByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5XG5cdFx0XHRcdFtdIDpcblxuXHRcdFx0XHQvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMgZGlyZWN0bHlcblx0XHRcdFx0cmVzdWx0cztcblxuXHRcdFx0Ly8gRmluZCBwcmltYXJ5IG1hdGNoZXNcblx0XHRcdG1hdGNoZXIoIG1hdGNoZXJJbiwgbWF0Y2hlck91dCwgY29udGV4dCwgeG1sICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBtYXRjaGVySW47XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcG9zdEZpbHRlclxuXHRcdGlmICggcG9zdEZpbHRlciApIHtcblx0XHRcdHRlbXAgPSBjb25kZW5zZSggbWF0Y2hlck91dCwgcG9zdE1hcCApO1xuXHRcdFx0cG9zdEZpbHRlciggdGVtcCwgW10sIGNvbnRleHQsIHhtbCApO1xuXG5cdFx0XHQvLyBVbi1tYXRjaCBmYWlsaW5nIGVsZW1lbnRzIGJ5IG1vdmluZyB0aGVtIGJhY2sgdG8gbWF0Y2hlckluXG5cdFx0XHRpID0gdGVtcC5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAoIGVsZW0gPSB0ZW1wWyBpIF0gKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwWyBpIF0gXSA9ICEoIG1hdGNoZXJJblsgcG9zdE1hcFsgaSBdIF0gPSBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cblx0XHRcdFx0XHQvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHNcblx0XHRcdFx0XHR0ZW1wID0gW107XG5cdFx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBtYXRjaGVyT3V0WyBpIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZXN0b3JlIG1hdGNoZXJJbiBzaW5jZSBlbGVtIGlzIG5vdCB5ZXQgYSBmaW5hbCBtYXRjaFxuXHRcdFx0XHRcdFx0XHR0ZW1wLnB1c2goICggbWF0Y2hlckluWyBpIF0gPSBlbGVtICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKCBtYXRjaGVyT3V0ID0gW10gKSwgdGVtcCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNb3ZlIG1hdGNoZWQgZWxlbWVudHMgZnJvbSBzZWVkIHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9uaXplZFxuXHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtID0gbWF0Y2hlck91dFsgaSBdICkgJiZcblx0XHRcdFx0XHRcdCggdGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mLmNhbGwoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFsgaSBdICkgPiAtMSApIHtcblxuXHRcdFx0XHRcdFx0c2VlZFsgdGVtcCBdID0gISggcmVzdWx0c1sgdGVtcCBdID0gZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBjb25kZW5zZShcblx0XHRcdFx0bWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/XG5cdFx0XHRcdFx0bWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDpcblx0XHRcdFx0XHRtYXRjaGVyT3V0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Ub2tlbnMoIHRva2VucyApIHtcblx0dmFyIGNoZWNrQ29udGV4dCwgbWF0Y2hlciwgaixcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdGxlYWRpbmdSZWxhdGl2ZSA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgMCBdLnR5cGUgXSxcblx0XHRpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbIFwiIFwiIF0sXG5cdFx0aSA9IGxlYWRpbmdSZWxhdGl2ZSA/IDEgOiAwLFxuXG5cdFx0Ly8gVGhlIGZvdW5kYXRpb25hbCBtYXRjaGVyIGVuc3VyZXMgdGhhdCBlbGVtZW50cyBhcmUgcmVhY2hhYmxlIGZyb20gdG9wLWxldmVsIGNvbnRleHQocylcblx0XHRtYXRjaENvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBjaGVja0NvbnRleHQ7XG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxuXHRcdG1hdGNoQW55Q29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggY2hlY2tDb250ZXh0LCBlbGVtICkgPiAtMTtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHR2YXIgcmV0ID0gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNvbnRleHQgIT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxuXHRcdFx0XHQoIGNoZWNrQ29udGV4dCA9IGNvbnRleHQgKS5ub2RlVHlwZSA/XG5cdFx0XHRcdFx0bWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdFx0bWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApO1xuXG5cdFx0XHQvLyBBdm9pZCBoYW5naW5nIG9udG8gZWxlbWVudFxuXHRcdFx0Ly8gKHNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9pc3N1ZXMvMjk5KVxuXHRcdFx0Y2hlY2tDb250ZXh0ID0gbnVsbDtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSBdO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKCBtYXRjaGVyID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyBpIF0udHlwZSBdICkgKSB7XG5cdFx0XHRtYXRjaGVycyA9IFsgYWRkQ29tYmluYXRvciggZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksIG1hdGNoZXIgKSBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1sgaSBdLnR5cGUgXS5hcHBseSggbnVsbCwgdG9rZW5zWyBpIF0ubWF0Y2hlcyApO1xuXG5cdFx0XHQvLyBSZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlclxuXHRcdFx0aWYgKCBtYXRjaGVyWyBleHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0Ly8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nXG5cdFx0XHRcdGogPSArK2k7XG5cdFx0XHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyBqIF0udHlwZSBdICkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzZXRNYXRjaGVyKFxuXHRcdFx0XHRcdGkgPiAxICYmIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLFxuXHRcdFx0XHRcdGkgPiAxICYmIHRvU2VsZWN0b3IoXG5cblx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcmVjZWRpbmcgdG9rZW4gd2FzIGEgZGVzY2VuZGFudCBjb21iaW5hdG9yLCBpbnNlcnQgYW4gaW1wbGljaXQgYW55LWVsZW1lbnQgYCpgXG5cdFx0XHRcdFx0XHR0b2tlbnMuc2xpY2UoIDAsIGkgLSAxIClcblx0XHRcdFx0XHRcdFx0LmNvbmNhdCggeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0gKVxuXHRcdFx0XHRcdCkucmVwbGFjZSggcnRyaW1DU1MsIFwiJDFcIiApLFxuXHRcdFx0XHRcdG1hdGNoZXIsXG5cdFx0XHRcdFx0aSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKCB0b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGogKSApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xuXHR2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcblx0XHRcdHZhciBlbGVtLCBqLCBtYXRjaGVyLFxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxuXHRcdFx0XHRpID0gXCIwXCIsXG5cdFx0XHRcdHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXG5cblx0XHRcdFx0Ly8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBvciBvdXRlcm1vc3QgY29udGV4dFxuXHRcdFx0XHRlbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZC5UQUcoIFwiKlwiLCBvdXRlcm1vc3QgKSxcblxuXHRcdFx0XHQvLyBVc2UgaW50ZWdlciBkaXJydW5zIGlmZiB0aGlzIGlzIHRoZSBvdXRlcm1vc3QgbWF0Y2hlclxuXHRcdFx0XHRkaXJydW5zVW5pcXVlID0gKCBkaXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSApLFxuXHRcdFx0XHRsZW4gPSBlbGVtcy5sZW5ndGg7XG5cblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09IGRvY3VtZW50IHx8IGNvbnRleHQgfHwgb3V0ZXJtb3N0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8gcmVzdWx0c1xuXHRcdFx0Ly8gU3VwcG9ydDogaU9TIDw9NyAtIDkgb25seVxuXHRcdFx0Ly8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6IFwibGVuZ3RoXCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nXG5cdFx0XHQvLyBlbGVtZW50cyBieSBpZC4gKHNlZSB0cmFjLTE0MTQyKVxuXHRcdFx0Zm9yICggOyBpICE9PSBsZW4gJiYgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBieUVsZW1lbnQgJiYgZWxlbSApIHtcblx0XHRcdFx0XHRqID0gMDtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRcdFx0aWYgKCAhY29udGV4dCAmJiBlbGVtLm93bmVyRG9jdW1lbnQgIT0gZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHRcdFx0XHRcdFx0eG1sID0gIWRvY3VtZW50SXNIVE1MO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCB8fCBkb2N1bWVudCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHB1c2guY2FsbCggcmVzdWx0cywgZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUcmFjayB1bm1hdGNoZWQgZWxlbWVudHMgZm9yIHNldCBmaWx0ZXJzXG5cdFx0XHRcdGlmICggYnlTZXQgKSB7XG5cblx0XHRcdFx0XHQvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzXG5cdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSAhbWF0Y2hlciAmJiBlbGVtICkgKSB7XG5cdFx0XHRcdFx0XHRtYXRjaGVkQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90XG5cdFx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdFx0dW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gYGlgIGlzIG5vdyB0aGUgY291bnQgb2YgZWxlbWVudHMgdmlzaXRlZCBhYm92ZSwgYW5kIGFkZGluZyBpdCB0byBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gbWFrZXMgdGhlIGxhdHRlciBub25uZWdhdGl2ZS5cblx0XHRcdG1hdGNoZWRDb3VudCArPSBpO1xuXG5cdFx0XHQvLyBBcHBseSBzZXQgZmlsdGVycyB0byB1bm1hdGNoZWQgZWxlbWVudHNcblx0XHRcdC8vIE5PVEU6IFRoaXMgY2FuIGJlIHNraXBwZWQgaWYgdGhlcmUgYXJlIG5vIHVubWF0Y2hlZCBlbGVtZW50cyAoaS5lLiwgYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIGVxdWFscyBgaWApLCB1bmxlc3Mgd2UgZGlkbid0IHZpc2l0IF9hbnlfIGVsZW1lbnRzIGluIHRoZSBhYm92ZSBsb29wIGJlY2F1c2Ugd2UgaGF2ZVxuXHRcdFx0Ly8gbm8gZWxlbWVudCBtYXRjaGVycyBhbmQgbm8gc2VlZC5cblx0XHRcdC8vIEluY3JlbWVudGluZyBhbiBpbml0aWFsbHktc3RyaW5nIFwiMFwiIGBpYCBhbGxvd3MgYGlgIHRvIHJlbWFpbiBhIHN0cmluZyBvbmx5IGluIHRoYXRcblx0XHRcdC8vIGNhc2UsIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgXCIwMFwiIGBtYXRjaGVkQ291bnRgIHRoYXQgZGlmZmVycyBmcm9tIGBpYCBidXQgaXMgYWxzb1xuXHRcdFx0Ly8gbnVtZXJpY2FsbHkgemVyby5cblx0XHRcdGlmICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkge1xuXHRcdFx0XHRqID0gMDtcblx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoZXIgPSBzZXRNYXRjaGVyc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBzZWVkICkge1xuXG5cdFx0XHRcdFx0Ly8gUmVpbnRlZ3JhdGUgZWxlbWVudCBtYXRjaGVzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3Igc29ydGluZ1xuXHRcdFx0XHRcdGlmICggbWF0Y2hlZENvdW50ID4gMCApIHtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoICEoIHVubWF0Y2hlZFsgaSBdIHx8IHNldE1hdGNoZWRbIGkgXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHNldE1hdGNoZWRbIGkgXSA9IHBvcC5jYWxsKCByZXN1bHRzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBEaXNjYXJkIGluZGV4IHBsYWNlaG9sZGVyIHZhbHVlcyB0byBnZXQgb25seSBhY3R1YWwgbWF0Y2hlc1xuXHRcdFx0XHRcdHNldE1hdGNoZWQgPSBjb25kZW5zZSggc2V0TWF0Y2hlZCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQWRkIG1hdGNoZXMgdG8gcmVzdWx0c1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7XG5cblx0XHRcdFx0Ly8gU2VlZGxlc3Mgc2V0IG1hdGNoZXMgc3VjY2VlZGluZyBtdWx0aXBsZSBzdWNjZXNzZnVsIG1hdGNoZXJzIHN0aXB1bGF0ZSBzb3J0aW5nXG5cdFx0XHRcdGlmICggb3V0ZXJtb3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdCggbWF0Y2hlZENvdW50ICsgc2V0TWF0Y2hlcnMubGVuZ3RoICkgPiAxICkge1xuXG5cdFx0XHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdmVycmlkZSBtYW5pcHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hlcnNcblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1bm1hdGNoZWQ7XG5cdFx0fTtcblxuXHRyZXR1cm4gYnlTZXQgP1xuXHRcdG1hcmtGdW5jdGlvbiggc3VwZXJNYXRjaGVyICkgOlxuXHRcdHN1cGVyTWF0Y2hlcjtcbn1cblxuZnVuY3Rpb24gY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHR2YXIgaSxcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxuXHRcdGVsZW1lbnRNYXRjaGVycyA9IFtdLFxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoICFjYWNoZWQgKSB7XG5cblx0XHQvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnRcblx0XHRpZiAoICFtYXRjaCApIHtcblx0XHRcdG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0fVxuXHRcdGkgPSBtYXRjaC5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRjYWNoZWQgPSBtYXRjaGVyRnJvbVRva2VucyggbWF0Y2hbIGkgXSApO1xuXHRcdFx0aWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0c2V0TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZSggc2VsZWN0b3IsXG5cdFx0XHRtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSApO1xuXG5cdFx0Ly8gU2F2ZSBzZWxlY3RvciBhbmQgdG9rZW5pemF0aW9uXG5cdFx0Y2FjaGVkLnNlbGVjdG9yID0gc2VsZWN0b3I7XG5cdH1cblx0cmV0dXJuIGNhY2hlZDtcbn1cblxuLyoqXG4gKiBBIGxvdy1sZXZlbCBzZWxlY3Rpb24gZnVuY3Rpb24gdGhhdCB3b3JrcyB3aXRoIGpRdWVyeSdzIGNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb25zXG4gKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gc2VsZWN0b3IgQSBzZWxlY3RvciBvciBhIHByZS1jb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uIGJ1aWx0IHdpdGggalF1ZXJ5IHNlbGVjdG9yIGNvbXBpbGVcbiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGV4dFxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdHNdXG4gKiBAcGFyYW0ge0FycmF5fSBbc2VlZF0gQSBzZXQgb2YgZWxlbWVudHMgdG8gbWF0Y2ggYWdhaW5zdFxuICovXG5mdW5jdGlvbiBzZWxlY3QoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCxcblx0XHRjb21waWxlZCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICYmIHNlbGVjdG9yLFxuXHRcdG1hdGNoID0gIXNlZWQgJiYgdG9rZW5pemUoICggc2VsZWN0b3IgPSBjb21waWxlZC5zZWxlY3RvciB8fCBzZWxlY3RvciApICk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUgc2VsZWN0b3IgaW4gdGhlIGxpc3QgYW5kIG5vIHNlZWRcblx0Ly8gKHRoZSBsYXR0ZXIgb2Ygd2hpY2ggZ3VhcmFudGVlcyB1cyBjb250ZXh0KVxuXHRpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHtcblxuXHRcdC8vIFJlZHVjZSBjb250ZXh0IGlmIHRoZSBsZWFkaW5nIGNvbXBvdW5kIHNlbGVjdG9yIGlzIGFuIElEXG5cdFx0dG9rZW5zID0gbWF0Y2hbIDAgXSA9IG1hdGNoWyAwIF0uc2xpY2UoIDAgKTtcblx0XHRpZiAoIHRva2Vucy5sZW5ndGggPiAyICYmICggdG9rZW4gPSB0b2tlbnNbIDAgXSApLnR5cGUgPT09IFwiSURcIiAmJlxuXHRcdFx0XHRjb250ZXh0Lm5vZGVUeXBlID09PSA5ICYmIGRvY3VtZW50SXNIVE1MICYmIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgMSBdLnR5cGUgXSApIHtcblxuXHRcdFx0Y29udGV4dCA9ICggRXhwci5maW5kLklEKFxuXHRcdFx0XHR0b2tlbi5tYXRjaGVzWyAwIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSxcblx0XHRcdFx0Y29udGV4dFxuXHRcdFx0KSB8fCBbXSApWyAwIF07XG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcblx0XHRpID0gbWF0Y2hFeHByLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID8gMCA6IHRva2Vucy5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0b2tlbiA9IHRva2Vuc1sgaSBdO1xuXG5cdFx0XHQvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yXG5cdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbICggdHlwZSA9IHRva2VuLnR5cGUgKSBdICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggKCBmaW5kID0gRXhwci5maW5kWyB0eXBlIF0gKSApIHtcblxuXHRcdFx0XHQvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBsZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnNcblx0XHRcdFx0aWYgKCAoIHNlZWQgPSBmaW5kKFxuXHRcdFx0XHRcdHRva2VuLm1hdGNoZXNbIDAgXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLFxuXHRcdFx0XHRcdHJzaWJsaW5nLnRlc3QoIHRva2Vuc1sgMCBdLnR5cGUgKSAmJlxuXHRcdFx0XHRcdFx0dGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0XHRcdFx0KSApICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgc2VlZCBpcyBlbXB0eSBvciBubyB0b2tlbnMgcmVtYWluLCB3ZSBjYW4gcmV0dXJuIGVhcmx5XG5cdFx0XHRcdFx0dG9rZW5zLnNwbGljZSggaSwgMSApO1xuXHRcdFx0XHRcdHNlbGVjdG9yID0gc2VlZC5sZW5ndGggJiYgdG9TZWxlY3RvciggdG9rZW5zICk7XG5cdFx0XHRcdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZWVkICk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENvbXBpbGUgYW5kIGV4ZWN1dGUgYSBmaWx0ZXJpbmcgZnVuY3Rpb24gaWYgb25lIGlzIG5vdCBwcm92aWRlZFxuXHQvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0b2tlbml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhlIHNlbGVjdG9yIGFib3ZlXG5cdCggY29tcGlsZWQgfHwgY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoICkgKShcblx0XHRzZWVkLFxuXHRcdGNvbnRleHQsXG5cdFx0IWRvY3VtZW50SXNIVE1MLFxuXHRcdHJlc3VsdHMsXG5cdFx0IWNvbnRleHQgfHwgcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dFxuXHQpO1xuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuLy8gT25lLXRpbWUgYXNzaWdubWVudHNcblxuLy8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCAtIDQuMStcbi8vIFNvcnQgc3RhYmlsaXR5XG5zdXBwb3J0LnNvcnRTdGFibGUgPSBleHBhbmRvLnNwbGl0KCBcIlwiICkuc29ydCggc29ydE9yZGVyICkuam9pbiggXCJcIiApID09PSBleHBhbmRvO1xuXG4vLyBJbml0aWFsaXplIGFnYWluc3QgdGhlIGRlZmF1bHQgZG9jdW1lbnRcbnNldERvY3VtZW50KCk7XG5cbi8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgLSA0LjErXG4vLyBEZXRhY2hlZCBub2RlcyBjb25mb3VuZGluZ2x5IGZvbGxvdyAqZWFjaCBvdGhlcipcbnN1cHBvcnQuc29ydERldGFjaGVkID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cblx0Ly8gU2hvdWxkIHJldHVybiAxLCBidXQgcmV0dXJucyA0IChmb2xsb3dpbmcpXG5cdHJldHVybiBlbC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJmaWVsZHNldFwiICkgKSAmIDE7XG59ICk7XG5cbmpRdWVyeS5maW5kID0gZmluZDtcblxuLy8gRGVwcmVjYXRlZFxualF1ZXJ5LmV4cHJbIFwiOlwiIF0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zO1xualF1ZXJ5LnVuaXF1ZSA9IGpRdWVyeS51bmlxdWVTb3J0O1xuXG4vLyBUaGVzZSBoYXZlIGFsd2F5cyBiZWVuIHByaXZhdGUsIGJ1dCB0aGV5IHVzZWQgdG8gYmUgZG9jdW1lbnRlZCBhcyBwYXJ0IG9mXG4vLyBTaXp6bGUgc28gbGV0J3MgbWFpbnRhaW4gdGhlbSBmb3Igbm93IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBwdXJwb3Nlcy5cbmZpbmQuY29tcGlsZSA9IGNvbXBpbGU7XG5maW5kLnNlbGVjdCA9IHNlbGVjdDtcbmZpbmQuc2V0RG9jdW1lbnQgPSBzZXREb2N1bWVudDtcbmZpbmQudG9rZW5pemUgPSB0b2tlbml6ZTtcblxuZmluZC5lc2NhcGUgPSBqUXVlcnkuZXNjYXBlU2VsZWN0b3I7XG5maW5kLmdldFRleHQgPSBqUXVlcnkudGV4dDtcbmZpbmQuaXNYTUwgPSBqUXVlcnkuaXNYTUxEb2M7XG5maW5kLnNlbGVjdG9ycyA9IGpRdWVyeS5leHByO1xuZmluZC5zdXBwb3J0ID0galF1ZXJ5LnN1cHBvcnQ7XG5maW5kLnVuaXF1ZVNvcnQgPSBqUXVlcnkudW5pcXVlU29ydDtcblxuXHQvKiBlc2xpbnQtZW5hYmxlICovXG5cbn0gKSgpO1xuXG5cbnZhciBkaXIgPSBmdW5jdGlvbiggZWxlbSwgZGlyLCB1bnRpbCApIHtcblx0dmFyIG1hdGNoZWQgPSBbXSxcblx0XHR0cnVuY2F0ZSA9IHVudGlsICE9PSB1bmRlZmluZWQ7XG5cblx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICYmIGVsZW0ubm9kZVR5cGUgIT09IDkgKSB7XG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0aWYgKCB0cnVuY2F0ZSAmJiBqUXVlcnkoIGVsZW0gKS5pcyggdW50aWwgKSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRtYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBzaWJsaW5ncyA9IGZ1bmN0aW9uKCBuLCBlbGVtICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdO1xuXG5cdGZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7XG5cdFx0aWYgKCBuLm5vZGVUeXBlID09PSAxICYmIG4gIT09IGVsZW0gKSB7XG5cdFx0XHRtYXRjaGVkLnB1c2goIG4gKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHJuZWVkc0NvbnRleHQgPSBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7XG5cbnZhciByc2luZ2xlVGFnID0gKCAvXjwoW2Etel1bXlxcL1xcMD46XFx4MjBcXHRcXHJcXG5cXGZdKilbXFx4MjBcXHRcXHJcXG5cXGZdKlxcLz8+KD86PFxcL1xcMT58KSQvaSApO1xuXG5cblxuLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVyIGFuZCBub3RcbmZ1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwgbm90ICkge1xuXHRpZiAoIGlzRnVuY3Rpb24oIHF1YWxpZmllciApICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIFNpbmdsZSBlbGVtZW50XG5cdGlmICggcXVhbGlmaWVyLm5vZGVUeXBlICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggZWxlbSA9PT0gcXVhbGlmaWVyICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBBcnJheWxpa2Ugb2YgZWxlbWVudHMgKGpRdWVyeSwgYXJndW1lbnRzLCBBcnJheSlcblx0aWYgKCB0eXBlb2YgcXVhbGlmaWVyICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggaW5kZXhPZi5jYWxsKCBxdWFsaWZpZXIsIGVsZW0gKSA+IC0xICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBGaWx0ZXJlZCBkaXJlY3RseSBmb3IgYm90aCBzaW1wbGUgYW5kIGNvbXBsZXggc2VsZWN0b3JzXG5cdHJldHVybiBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzLCBub3QgKTtcbn1cblxualF1ZXJ5LmZpbHRlciA9IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90ICkge1xuXHR2YXIgZWxlbSA9IGVsZW1zWyAwIF07XG5cblx0aWYgKCBub3QgKSB7XG5cdFx0ZXhwciA9IFwiOm5vdChcIiArIGV4cHIgKyBcIilcIjtcblx0fVxuXG5cdGlmICggZWxlbXMubGVuZ3RoID09PSAxICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZWxlbSwgZXhwciApID8gWyBlbGVtIF0gOiBbXTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzKCBleHByLCBqUXVlcnkuZ3JlcCggZWxlbXMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxO1xuXHR9ICkgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmluZDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBpLCByZXQsXG5cdFx0XHRsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdHNlbGYgPSB0aGlzO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCBzZWxmWyBpIF0sIHRoaXMgKSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApICk7XG5cdFx0fVxuXG5cdFx0cmV0ID0gdGhpcy5wdXNoU3RhY2soIFtdICk7XG5cblx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQoIHNlbGVjdG9yLCBzZWxmWyBpIF0sIHJldCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsZW4gPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIHJldCApIDogcmV0O1xuXHR9LFxuXHRmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIGZhbHNlICkgKTtcblx0fSxcblx0bm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCB0cnVlICkgKTtcblx0fSxcblx0aXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gISF3aW5ub3coXG5cdFx0XHR0aGlzLFxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgcG9zaXRpb25hbC9yZWxhdGl2ZSBzZWxlY3RvciwgY2hlY2sgbWVtYmVyc2hpcCBpbiB0aGUgcmV0dXJuZWQgc2V0XG5cdFx0XHQvLyBzbyAkKFwicDpmaXJzdFwiKS5pcyhcInA6bGFzdFwiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gXCJwXCIuXG5cdFx0XHR0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgJiYgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID9cblx0XHRcdFx0alF1ZXJ5KCBzZWxlY3RvciApIDpcblx0XHRcdFx0c2VsZWN0b3IgfHwgW10sXG5cdFx0XHRmYWxzZVxuXHRcdCkubGVuZ3RoO1xuXHR9XG59ICk7XG5cblxuLy8gSW5pdGlhbGl6ZSBhIGpRdWVyeSBvYmplY3RcblxuXG4vLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudClcbnZhciByb290alF1ZXJ5LFxuXG5cdC8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzXG5cdC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNTIHZpYSBsb2NhdGlvbi5oYXNoICh0cmFjLTk1MjEpXG5cdC8vIFN0cmljdCBIVE1MIHJlY29nbml0aW9uICh0cmFjLTExMjkwOiBtdXN0IHN0YXJ0IHdpdGggPClcblx0Ly8gU2hvcnRjdXQgc2ltcGxlICNpZCBjYXNlIGZvciBzcGVlZFxuXHRycXVpY2tFeHByID0gL14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKykpJC8sXG5cblx0aW5pdCA9IGpRdWVyeS5mbi5pbml0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290ICkge1xuXHRcdHZhciBtYXRjaCwgZWxlbTtcblxuXHRcdC8vIEhBTkRMRTogJChcIlwiKSwgJChudWxsKSwgJCh1bmRlZmluZWQpLCAkKGZhbHNlKVxuXHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Ly8gTWV0aG9kIGluaXQoKSBhY2NlcHRzIGFuIGFsdGVybmF0ZSByb290alF1ZXJ5XG5cdFx0Ly8gc28gbWlncmF0ZSBjYW4gc3VwcG9ydCBqUXVlcnkuc3ViIChnaC0yMTAxKVxuXHRcdHJvb3QgPSByb290IHx8IHJvb3RqUXVlcnk7XG5cblx0XHQvLyBIYW5kbGUgSFRNTCBzdHJpbmdzXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRpZiAoIHNlbGVjdG9yWyAwIF0gPT09IFwiPFwiICYmXG5cdFx0XHRcdHNlbGVjdG9yWyBzZWxlY3Rvci5sZW5ndGggLSAxIF0gPT09IFwiPlwiICYmXG5cdFx0XHRcdHNlbGVjdG9yLmxlbmd0aCA+PSAzICkge1xuXG5cdFx0XHRcdC8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrXG5cdFx0XHRcdG1hdGNoID0gWyBudWxsLCBzZWxlY3RvciwgbnVsbCBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8gY29udGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZFxuXHRcdFx0aWYgKCBtYXRjaCAmJiAoIG1hdGNoWyAxIF0gfHwgIWNvbnRleHQgKSApIHtcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCkgLT4gJChhcnJheSlcblx0XHRcdFx0aWYgKCBtYXRjaFsgMSBdICkge1xuXHRcdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFsgMCBdIDogY29udGV4dDtcblxuXHRcdFx0XHRcdC8vIE9wdGlvbiB0byBydW4gc2NyaXB0cyBpcyB0cnVlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRcdC8vIEludGVudGlvbmFsbHkgbGV0IHRoZSBlcnJvciBiZSB0aHJvd24gaWYgcGFyc2VIVE1MIGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLCBqUXVlcnkucGFyc2VIVE1MKFxuXHRcdFx0XHRcdFx0bWF0Y2hbIDEgXSxcblx0XHRcdFx0XHRcdGNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1lbnQsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KSApO1xuXG5cdFx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwsIHByb3BzKVxuXHRcdFx0XHRcdGlmICggcnNpbmdsZVRhZy50ZXN0KCBtYXRjaFsgMSBdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRleHQgKSApIHtcblx0XHRcdFx0XHRcdGZvciAoIG1hdGNoIGluIGNvbnRleHQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUHJvcGVydGllcyBvZiBjb250ZXh0IGFyZSBjYWxsZWQgYXMgbWV0aG9kcyBpZiBwb3NzaWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoaXNbIG1hdGNoIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBtYXRjaCBdICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIG90aGVyd2lzZSBzZXQgYXMgYXR0cmlidXRlc1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYXR0ciggbWF0Y2gsIGNvbnRleHRbIG1hdGNoIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJCgjaWQpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsgMiBdICk7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIEluamVjdCB0aGUgZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0XG5cdFx0XHRcdFx0XHR0aGlzWyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKVxuXHRcdFx0fSBlbHNlIGlmICggIWNvbnRleHQgfHwgY29udGV4dC5qcXVlcnkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGNvbnRleHQgfHwgcm9vdCApLmZpbmQoIHNlbGVjdG9yICk7XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KVxuXHRcdFx0Ly8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHQvLyBIQU5ETEU6ICQoRE9NRWxlbWVudClcblx0XHR9IGVsc2UgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHtcblx0XHRcdHRoaXNbIDAgXSA9IHNlbGVjdG9yO1xuXHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHQvLyBIQU5ETEU6ICQoZnVuY3Rpb24pXG5cdFx0Ly8gU2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5XG5cdFx0fSBlbHNlIGlmICggaXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHtcblx0XHRcdHJldHVybiByb290LnJlYWR5ICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRyb290LnJlYWR5KCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBFeGVjdXRlIGltbWVkaWF0ZWx5IGlmIHJlYWR5IGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdHNlbGVjdG9yKCBqUXVlcnkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IsIHRoaXMgKTtcblx0fTtcblxuLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvblxuaW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47XG5cbi8vIEluaXRpYWxpemUgY2VudHJhbCByZWZlcmVuY2VcbnJvb3RqUXVlcnkgPSBqUXVlcnkoIGRvY3VtZW50ICk7XG5cblxudmFyIHJwYXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLFxuXG5cdC8vIE1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0XG5cdGd1YXJhbnRlZWRVbmlxdWUgPSB7XG5cdFx0Y2hpbGRyZW46IHRydWUsXG5cdFx0Y29udGVudHM6IHRydWUsXG5cdFx0bmV4dDogdHJ1ZSxcblx0XHRwcmV2OiB0cnVlXG5cdH07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0aGFzOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdHZhciB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSxcblx0XHRcdGwgPSB0YXJnZXRzLmxlbmd0aDtcblxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzWyBpIF0gKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRjbG9zZXN0OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkge1xuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGwgPSB0aGlzLmxlbmd0aCxcblx0XHRcdG1hdGNoZWQgPSBbXSxcblx0XHRcdHRhcmdldHMgPSB0eXBlb2Ygc2VsZWN0b3JzICE9PSBcInN0cmluZ1wiICYmIGpRdWVyeSggc2VsZWN0b3JzICk7XG5cblx0XHQvLyBQb3NpdGlvbmFsIHNlbGVjdG9ycyBuZXZlciBtYXRjaCwgc2luY2UgdGhlcmUncyBubyBfc2VsZWN0aW9uXyBjb250ZXh0XG5cdFx0aWYgKCAhcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSApIHtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zm9yICggY3VyID0gdGhpc1sgaSBdOyBjdXIgJiYgY3VyICE9PSBjb250ZXh0OyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblxuXHRcdFx0XHRcdC8vIEFsd2F5cyBza2lwIGRvY3VtZW50IGZyYWdtZW50c1xuXHRcdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlIDwgMTEgJiYgKCB0YXJnZXRzID9cblx0XHRcdFx0XHRcdHRhcmdldHMuaW5kZXgoIGN1ciApID4gLTEgOlxuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBwYXNzIG5vbi1lbGVtZW50cyB0byBqUXVlcnkjZmluZFxuXHRcdFx0XHRcdFx0Y3VyLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggY3VyLCBzZWxlY3RvcnMgKSApICkge1xuXG5cdFx0XHRcdFx0XHRtYXRjaGVkLnB1c2goIGN1ciApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hlZCApO1xuXHR9LFxuXG5cdC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHNldFxuXHRpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudFxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7XG5cdFx0fVxuXG5cdFx0Ly8gSW5kZXggaW4gc2VsZWN0b3Jcblx0XHRpZiAoIHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggalF1ZXJ5KCBlbGVtICksIHRoaXNbIDAgXSApO1xuXHRcdH1cblxuXHRcdC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudFxuXHRcdHJldHVybiBpbmRleE9mLmNhbGwoIHRoaXMsXG5cblx0XHRcdC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZFxuXHRcdFx0ZWxlbS5qcXVlcnkgPyBlbGVtWyAwIF0gOiBlbGVtXG5cdFx0KTtcblx0fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soXG5cdFx0XHRqUXVlcnkudW5pcXVlU29ydChcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/XG5cdFx0XHR0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApXG5cdFx0KTtcblx0fVxufSApO1xuXG5mdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHtcblx0d2hpbGUgKCAoIGN1ciA9IGN1clsgZGlyIF0gKSAmJiBjdXIubm9kZVR5cGUgIT09IDEgKSB7fVxuXHRyZXR1cm4gY3VyO1xufVxuXG5qUXVlcnkuZWFjaCgge1xuXHRwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0cmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDtcblx0fSxcblx0cGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIgKTtcblx0fSxcblx0cGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiLCB1bnRpbCApO1xuXHR9LFxuXHRuZXh0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXY6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHByZXZVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTtcblx0fSxcblx0Y2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggZWxlbS5maXJzdENoaWxkICk7XG5cdH0sXG5cdGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRpZiAoIGVsZW0uY29udGVudERvY3VtZW50ICE9IG51bGwgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErXG5cdFx0XHQvLyA8b2JqZWN0PiBlbGVtZW50cyB3aXRoIG5vIGBkYXRhYCBhdHRyaWJ1dGUgaGFzIGFuIG9iamVjdFxuXHRcdFx0Ly8gYGNvbnRlbnREb2N1bWVudGAgd2l0aCBhIGBudWxsYCBwcm90b3R5cGUuXG5cdFx0XHRnZXRQcm90byggZWxlbS5jb250ZW50RG9jdW1lbnQgKSApIHtcblxuXHRcdFx0cmV0dXJuIGVsZW0uY29udGVudERvY3VtZW50O1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5LCBpT1MgNyBvbmx5LCBBbmRyb2lkIEJyb3dzZXIgPD00LjMgb25seVxuXHRcdC8vIFRyZWF0IHRoZSB0ZW1wbGF0ZSBlbGVtZW50IGFzIGEgcmVndWxhciBvbmUgaW4gYnJvd3NlcnMgdGhhdFxuXHRcdC8vIGRvbid0IHN1cHBvcnQgaXQuXG5cdFx0aWYgKCBub2RlTmFtZSggZWxlbSwgXCJ0ZW1wbGF0ZVwiICkgKSB7XG5cdFx0XHRlbGVtID0gZWxlbS5jb250ZW50IHx8IGVsZW07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIGVsZW0uY2hpbGROb2RlcyApO1xuXHR9XG59LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHVudGlsLCBzZWxlY3RvciApIHtcblx0XHR2YXIgbWF0Y2hlZCA9IGpRdWVyeS5tYXAoIHRoaXMsIGZuLCB1bnRpbCApO1xuXG5cdFx0aWYgKCBuYW1lLnNsaWNlKCAtNSApICE9PSBcIlVudGlsXCIgKSB7XG5cdFx0XHRzZWxlY3RvciA9IHVudGlsO1xuXHRcdH1cblxuXHRcdGlmICggc2VsZWN0b3IgJiYgdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0bWF0Y2hlZCA9IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBtYXRjaGVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmxlbmd0aCA+IDEgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBkdXBsaWNhdGVzXG5cdFx0XHRpZiAoICFndWFyYW50ZWVkVW5pcXVlWyBuYW1lIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldmVyc2Ugb3JkZXIgZm9yIHBhcmVudHMqIGFuZCBwcmV2LWRlcml2YXRpdmVzXG5cdFx0XHRpZiAoIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7XG5cdFx0XHRcdG1hdGNoZWQucmV2ZXJzZSgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZCApO1xuXHR9O1xufSApO1xudmFyIHJub3RodG1sd2hpdGUgPSAoIC9bXlxceDIwXFx0XFxyXFxuXFxmXSsvZyApO1xuXG5cblxuLy8gQ29udmVydCBTdHJpbmctZm9ybWF0dGVkIG9wdGlvbnMgaW50byBPYmplY3QtZm9ybWF0dGVkIG9uZXNcbmZ1bmN0aW9uIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSB7XG5cdHZhciBvYmplY3QgPSB7fTtcblx0alF1ZXJ5LmVhY2goIG9wdGlvbnMubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSwgZnVuY3Rpb24oIF8sIGZsYWcgKSB7XG5cdFx0b2JqZWN0WyBmbGFnIF0gPSB0cnVlO1xuXHR9ICk7XG5cdHJldHVybiBvYmplY3Q7XG59XG5cbi8qXG4gKiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczpcbiAqXG4gKlx0b3B0aW9uczogYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0IHdpbGwgY2hhbmdlIGhvd1xuICpcdFx0XHR0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzIG9yIGEgbW9yZSB0cmFkaXRpb25hbCBvcHRpb24gb2JqZWN0XG4gKlxuICogQnkgZGVmYXVsdCBhIGNhbGxiYWNrIGxpc3Qgd2lsbCBhY3QgbGlrZSBhbiBldmVudCBjYWxsYmFjayBsaXN0IGFuZCBjYW4gYmVcbiAqIFwiZmlyZWRcIiBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBQb3NzaWJsZSBvcHRpb25zOlxuICpcbiAqXHRvbmNlOlx0XHRcdHdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBsaXN0IGNhbiBvbmx5IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0bWVtb3J5Olx0XHRcdHdpbGwga2VlcCB0cmFjayBvZiBwcmV2aW91cyB2YWx1ZXMgYW5kIHdpbGwgY2FsbCBhbnkgY2FsbGJhY2sgYWRkZWRcbiAqXHRcdFx0XHRcdGFmdGVyIHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0IFwibWVtb3JpemVkXCJcbiAqXHRcdFx0XHRcdHZhbHVlcyAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHR1bmlxdWU6XHRcdFx0d2lsbCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBvbmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpXG4gKlxuICpcdHN0b3BPbkZhbHNlOlx0aW50ZXJydXB0IGNhbGxpbmdzIHdoZW4gYSBjYWxsYmFjayByZXR1cm5zIGZhbHNlXG4gKlxuICovXG5qUXVlcnkuQ2FsbGJhY2tzID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0Ly8gQ29udmVydCBvcHRpb25zIGZyb20gU3RyaW5nLWZvcm1hdHRlZCB0byBPYmplY3QtZm9ybWF0dGVkIGlmIG5lZWRlZFxuXHQvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3QpXG5cdG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0Y3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIDpcblx0XHRqUXVlcnkuZXh0ZW5kKCB7fSwgb3B0aW9ucyApO1xuXG5cdHZhciAvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCBpcyBjdXJyZW50bHkgZmlyaW5nXG5cdFx0ZmlyaW5nLFxuXG5cdFx0Ly8gTGFzdCBmaXJlIHZhbHVlIGZvciBub24tZm9yZ2V0dGFibGUgbGlzdHNcblx0XHRtZW1vcnksXG5cblx0XHQvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJlZFxuXHRcdGZpcmVkLFxuXG5cdFx0Ly8gRmxhZyB0byBwcmV2ZW50IGZpcmluZ1xuXHRcdGxvY2tlZCxcblxuXHRcdC8vIEFjdHVhbCBjYWxsYmFjayBsaXN0XG5cdFx0bGlzdCA9IFtdLFxuXG5cdFx0Ly8gUXVldWUgb2YgZXhlY3V0aW9uIGRhdGEgZm9yIHJlcGVhdGFibGUgbGlzdHNcblx0XHRxdWV1ZSA9IFtdLFxuXG5cdFx0Ly8gSW5kZXggb2YgY3VycmVudGx5IGZpcmluZyBjYWxsYmFjayAobW9kaWZpZWQgYnkgYWRkL3JlbW92ZSBhcyBuZWVkZWQpXG5cdFx0ZmlyaW5nSW5kZXggPSAtMSxcblxuXHRcdC8vIEZpcmUgY2FsbGJhY2tzXG5cdFx0ZmlyZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbmZvcmNlIHNpbmdsZS1maXJpbmdcblx0XHRcdGxvY2tlZCA9IGxvY2tlZCB8fCBvcHRpb25zLm9uY2U7XG5cblx0XHRcdC8vIEV4ZWN1dGUgY2FsbGJhY2tzIGZvciBhbGwgcGVuZGluZyBleGVjdXRpb25zLFxuXHRcdFx0Ly8gcmVzcGVjdGluZyBmaXJpbmdJbmRleCBvdmVycmlkZXMgYW5kIHJ1bnRpbWUgY2hhbmdlc1xuXHRcdFx0ZmlyZWQgPSBmaXJpbmcgPSB0cnVlO1xuXHRcdFx0Zm9yICggOyBxdWV1ZS5sZW5ndGg7IGZpcmluZ0luZGV4ID0gLTEgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRcdHdoaWxlICggKytmaXJpbmdJbmRleCA8IGxpc3QubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gUnVuIGNhbGxiYWNrIGFuZCBjaGVjayBmb3IgZWFybHkgdGVybWluYXRpb25cblx0XHRcdFx0XHRpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApID09PSBmYWxzZSAmJlxuXHRcdFx0XHRcdFx0b3B0aW9ucy5zdG9wT25GYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSnVtcCB0byBlbmQgYW5kIGZvcmdldCB0aGUgZGF0YSBzbyAuYWRkIGRvZXNuJ3QgcmUtZmlyZVxuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aDtcblx0XHRcdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3JnZXQgdGhlIGRhdGEgaWYgd2UncmUgZG9uZSB3aXRoIGl0XG5cdFx0XHRpZiAoICFvcHRpb25zLm1lbW9yeSApIHtcblx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGZpcmluZyA9IGZhbHNlO1xuXG5cdFx0XHQvLyBDbGVhbiB1cCBpZiB3ZSdyZSBkb25lIGZpcmluZyBmb3IgZ29vZFxuXHRcdFx0aWYgKCBsb2NrZWQgKSB7XG5cblx0XHRcdFx0Ly8gS2VlcCBhbiBlbXB0eSBsaXN0IGlmIHdlIGhhdmUgZGF0YSBmb3IgZnV0dXJlIGFkZCBjYWxsc1xuXHRcdFx0XHRpZiAoIG1lbW9yeSApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCB0aGlzIG9iamVjdCBpcyBzcGVudFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxpc3QgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0XG5cdFx0c2VsZiA9IHtcblxuXHRcdFx0Ly8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0aGUgbGlzdFxuXHRcdFx0YWRkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBtZW1vcnkgZnJvbSBhIHBhc3QgcnVuLCB3ZSBzaG91bGQgZmlyZSBhZnRlciBhZGRpbmdcblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aCAtIDE7XG5cdFx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBtZW1vcnkgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQoIGZ1bmN0aW9uIGFkZCggYXJncyApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggIW9wdGlvbnMudW5pcXVlIHx8ICFzZWxmLmhhcyggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsaXN0LnB1c2goIGFyZyApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggYXJnICYmIGFyZy5sZW5ndGggJiYgdG9UeXBlKCBhcmcgKSAhPT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEluc3BlY3QgcmVjdXJzaXZlbHlcblx0XHRcdFx0XHRcdFx0XHRhZGQoIGFyZyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0fSApKCBhcmd1bWVudHMgKTtcblxuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlzdFxuXHRcdFx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHR2YXIgaW5kZXg7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGluZGV4ID0galF1ZXJ5LmluQXJyYXkoIGFyZywgbGlzdCwgaW5kZXggKSApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRsaXN0LnNwbGljZSggaW5kZXgsIDEgKTtcblxuXHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGZpcmluZyBpbmRleGVzXG5cdFx0XHRcdFx0XHRpZiAoIGluZGV4IDw9IGZpcmluZ0luZGV4ICkge1xuXHRcdFx0XHRcdFx0XHRmaXJpbmdJbmRleC0tO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENoZWNrIGlmIGEgZ2l2ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3QuXG5cdFx0XHQvLyBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IGxpc3QgaGFzIGNhbGxiYWNrcyBhdHRhY2hlZC5cblx0XHRcdGhhczogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRyZXR1cm4gZm4gP1xuXHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBmbiwgbGlzdCApID4gLTEgOlxuXHRcdFx0XHRcdGxpc3QubGVuZ3RoID4gMDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3Rcblx0XHRcdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmUgYW5kIC5hZGRcblx0XHRcdC8vIEFib3J0IGFueSBjdXJyZW50L3BlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0Ly8gQ2xlYXIgYWxsIGNhbGxiYWNrcyBhbmQgdmFsdWVzXG5cdFx0XHRkaXNhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGRpc2FibGVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICFsaXN0O1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZVxuXHRcdFx0Ly8gQWxzbyBkaXNhYmxlIC5hZGQgdW5sZXNzIHdlIGhhdmUgbWVtb3J5IChzaW5jZSBpdCB3b3VsZCBoYXZlIG5vIGVmZmVjdClcblx0XHRcdC8vIEFib3J0IGFueSBwZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdGxvY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRpZiAoICFtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRsb2NrZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFsb2NrZWQ7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzXG5cdFx0XHRmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7XG5cdFx0XHRcdGlmICggIWxvY2tlZCApIHtcblx0XHRcdFx0XHRhcmdzID0gYXJncyB8fCBbXTtcblx0XHRcdFx0XHRhcmdzID0gWyBjb250ZXh0LCBhcmdzLnNsaWNlID8gYXJncy5zbGljZSgpIDogYXJncyBdO1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGFyZ3MgKTtcblx0XHRcdFx0XHRpZiAoICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHNcblx0XHRcdGZpcmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzZWxmLmZpcmVXaXRoKCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIHRoZSBjYWxsYmFja3MgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2Vcblx0XHRcdGZpcmVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhZmlyZWQ7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRyZXR1cm4gc2VsZjtcbn07XG5cblxuZnVuY3Rpb24gSWRlbnRpdHkoIHYgKSB7XG5cdHJldHVybiB2O1xufVxuZnVuY3Rpb24gVGhyb3dlciggZXggKSB7XG5cdHRocm93IGV4O1xufVxuXG5mdW5jdGlvbiBhZG9wdFZhbHVlKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0LCBub1ZhbHVlICkge1xuXHR2YXIgbWV0aG9kO1xuXG5cdHRyeSB7XG5cblx0XHQvLyBDaGVjayBmb3IgcHJvbWlzZSBhc3BlY3QgZmlyc3QgdG8gcHJpdmlsZWdlIHN5bmNocm9ub3VzIGJlaGF2aW9yXG5cdFx0aWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnByb21pc2UgKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlICkuZG9uZSggcmVzb2x2ZSApLmZhaWwoIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgdGhlbmFibGVzXG5cdFx0fSBlbHNlIGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS50aGVuICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0ICk7XG5cblx0XHQvLyBPdGhlciBub24tdGhlbmFibGVzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29udHJvbCBgcmVzb2x2ZWAgYXJndW1lbnRzIGJ5IGxldHRpbmcgQXJyYXkjc2xpY2UgY2FzdCBib29sZWFuIGBub1ZhbHVlYCB0byBpbnRlZ2VyOlxuXHRcdFx0Ly8gKiBmYWxzZTogWyB2YWx1ZSBdLnNsaWNlKCAwICkgPT4gcmVzb2x2ZSggdmFsdWUgKVxuXHRcdFx0Ly8gKiB0cnVlOiBbIHZhbHVlIF0uc2xpY2UoIDEgKSA9PiByZXNvbHZlKClcblx0XHRcdHJlc29sdmUuYXBwbHkoIHVuZGVmaW5lZCwgWyB2YWx1ZSBdLnNsaWNlKCBub1ZhbHVlICkgKTtcblx0XHR9XG5cblx0Ly8gRm9yIFByb21pc2VzL0ErLCBjb252ZXJ0IGV4Y2VwdGlvbnMgaW50byByZWplY3Rpb25zXG5cdC8vIFNpbmNlIGpRdWVyeS53aGVuIGRvZXNuJ3QgdW53cmFwIHRoZW5hYmxlcywgd2UgY2FuIHNraXAgdGhlIGV4dHJhIGNoZWNrcyBhcHBlYXJpbmcgaW5cblx0Ly8gRGVmZXJyZWQjdGhlbiB0byBjb25kaXRpb25hbGx5IHN1cHByZXNzIHJlamVjdGlvbi5cblx0fSBjYXRjaCAoIHZhbHVlICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgb25seVxuXHRcdC8vIFN0cmljdCBtb2RlIGZ1bmN0aW9ucyBpbnZva2VkIHdpdGhvdXQgLmNhbGwvLmFwcGx5IGdldCBnbG9iYWwtb2JqZWN0IGNvbnRleHRcblx0XHRyZWplY3QuYXBwbHkoIHVuZGVmaW5lZCwgWyB2YWx1ZSBdICk7XG5cdH1cbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdERlZmVycmVkOiBmdW5jdGlvbiggZnVuYyApIHtcblx0XHR2YXIgdHVwbGVzID0gW1xuXG5cdFx0XHRcdC8vIGFjdGlvbiwgYWRkIGxpc3RlbmVyLCBjYWxsYmFja3MsXG5cdFx0XHRcdC8vIC4uLiAudGhlbiBoYW5kbGVycywgYXJndW1lbnQgaW5kZXgsIFtmaW5hbCBzdGF0ZV1cblx0XHRcdFx0WyBcIm5vdGlmeVwiLCBcInByb2dyZXNzXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksIDIgXSxcblx0XHRcdFx0WyBcInJlc29sdmVcIiwgXCJkb25lXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAwLCBcInJlc29sdmVkXCIgXSxcblx0XHRcdFx0WyBcInJlamVjdFwiLCBcImZhaWxcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDEsIFwicmVqZWN0ZWRcIiBdXG5cdFx0XHRdLFxuXHRcdFx0c3RhdGUgPSBcInBlbmRpbmdcIixcblx0XHRcdHByb21pc2UgPSB7XG5cdFx0XHRcdHN0YXRlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3RhdGU7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFsd2F5czogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQuZG9uZSggYXJndW1lbnRzICkuZmFpbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwiY2F0Y2hcIjogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRcdHJldHVybiBwcm9taXNlLnRoZW4oIG51bGwsIGZuICk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gS2VlcCBwaXBlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRwaXBlOiBmdW5jdGlvbiggLyogZm5Eb25lLCBmbkZhaWwsIGZuUHJvZ3Jlc3MgKi8gKSB7XG5cdFx0XHRcdFx0dmFyIGZucyA9IGFyZ3VtZW50cztcblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBfaSwgdHVwbGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTWFwIHR1cGxlcyAocHJvZ3Jlc3MsIGRvbmUsIGZhaWwpIHRvIGFyZ3VtZW50cyAoZG9uZSwgZmFpbCwgcHJvZ3Jlc3MpXG5cdFx0XHRcdFx0XHRcdHZhciBmbiA9IGlzRnVuY3Rpb24oIGZuc1sgdHVwbGVbIDQgXSBdICkgJiYgZm5zWyB0dXBsZVsgNCBdIF07XG5cblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQucHJvZ3Jlc3MoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIubm90aWZ5IH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmRvbmUoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVzb2x2ZSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5mYWlsKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlamVjdCB9KVxuXHRcdFx0XHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDEgXSBdKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCAmJiBpc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC5wcm9taXNlKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXJbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50c1xuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdGZucyA9IG51bGw7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhlbjogZnVuY3Rpb24oIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBvblByb2dyZXNzICkge1xuXHRcdFx0XHRcdHZhciBtYXhEZXB0aCA9IDA7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gcmVzb2x2ZSggZGVwdGgsIGRlZmVycmVkLCBoYW5kbGVyLCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdGhhdCA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0YXJncyA9IGFyZ3VtZW50cyxcblx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQsIHRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4zXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01OVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIGRvdWJsZS1yZXNvbHV0aW9uIGF0dGVtcHRzXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoIDwgbWF4RGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQgPSBoYW5kbGVyLmFwcGx5KCB0aGF0LCBhcmdzICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjFcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTQ4XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkID09PSBkZWZlcnJlZC5wcm9taXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoIFwiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uXCIgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbnMgMi4zLjMuMSwgMy41XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01NFxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNzVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFJldHJpZXZlIGB0aGVuYCBvbmx5IG9uY2Vcblx0XHRcdFx0XHRcdFx0XHRcdHRoZW4gPSByZXR1cm5lZCAmJlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBjaGVjayBvYmplY3RzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZW5hYmlsaXR5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggdHlwZW9mIHJldHVybmVkID09PSBcIm9iamVjdFwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHJldHVybmVkID09PSBcImZ1bmN0aW9uXCIgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC50aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYSByZXR1cm5lZCB0aGVuYWJsZVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGVuICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBwcm9jZXNzb3JzIChub3RpZnkpIGp1c3Qgd2FpdCBmb3IgcmVzb2x1dGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gTm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGFsc28gaG9vayBpbnRvIHByb2dyZXNzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgZGlzcmVnYXJkIG9sZGVyIHJlc29sdXRpb24gdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4RGVwdGgrKztcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhbGwgb3RoZXIgcmV0dXJuZWQgdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gSWRlbnRpdHkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyByZXR1cm5lZCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUHJvY2VzcyB0aGUgdmFsdWUocylcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmYXVsdCBwcm9jZXNzIGlzIHJlc29sdmVcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCBzcGVjaWFsIHx8IGRlZmVycmVkLnJlc29sdmVXaXRoICkoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBub3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgY2F0Y2ggYW5kIHJlamVjdCBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcyA9IHNwZWNpYWwgP1xuXHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKCBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLmVycm9yICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjQuMVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTYxXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIHBvc3QtcmVzb2x1dGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCArIDEgPj0gbWF4RGVwdGggKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBUaHJvd2VyICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyBlIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjFcblx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTdcblx0XHRcdFx0XHRcdFx0Ly8gUmUtcmVzb2x2ZSBwcm9taXNlcyBpbW1lZGlhdGVseSB0byBkb2RnZSBmYWxzZSByZWplY3Rpb24gZnJvbVxuXHRcdFx0XHRcdFx0XHQvLyBzdWJzZXF1ZW50IGVycm9yc1xuXHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENhbGwgYW4gb3B0aW9uYWwgaG9vayB0byByZWNvcmQgdGhlIGVycm9yLCBpbiBjYXNlIG9mIGV4Y2VwdGlvblxuXHRcdFx0XHRcdFx0XHRcdC8vIHNpbmNlIGl0J3Mgb3RoZXJ3aXNlIGxvc3Qgd2hlbiBleGVjdXRpb24gZ29lcyBhc3luY1xuXHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmdldEVycm9ySG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MuZXJyb3IgPSBqUXVlcnkuRGVmZXJyZWQuZ2V0RXJyb3JIb29rKCk7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBUaGUgZGVwcmVjYXRlZCBhbGlhcyBvZiB0aGUgYWJvdmUuIFdoaWxlIHRoZSBuYW1lIHN1Z2dlc3RzXG5cdFx0XHRcdFx0XHRcdFx0Ly8gcmV0dXJuaW5nIHRoZSBzdGFjaywgbm90IGFuIGVycm9yIGluc3RhbmNlLCBqUXVlcnkganVzdCBwYXNzZXNcblx0XHRcdFx0XHRcdFx0XHQvLyBpdCBkaXJlY3RseSB0byBgY29uc29sZS53YXJuYCBzbyBib3RoIHdpbGwgd29yazsgYW4gaW5zdGFuY2Vcblx0XHRcdFx0XHRcdFx0XHQvLyBqdXN0IGJldHRlciBjb29wZXJhdGVzIHdpdGggc291cmNlIG1hcHMuXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggalF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MuZXJyb3IgPSBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBwcm9jZXNzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXG5cdFx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUHJvZ3Jlc3MgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblByb2dyZXNzIDpcblx0XHRcdFx0XHRcdFx0XHRcdElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLm5vdGlmeVdpdGhcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMSBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25GdWxmaWxsZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkZ1bGZpbGxlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eVxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDIgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUmVqZWN0ZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblJlamVjdGVkIDpcblx0XHRcdFx0XHRcdFx0XHRcdFRocm93ZXJcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWRcblx0XHRcdFx0Ly8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVjdFxuXHRcdFx0XHRwcm9taXNlOiBmdW5jdGlvbiggb2JqICkge1xuXHRcdFx0XHRcdHJldHVybiBvYmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9iaiwgcHJvbWlzZSApIDogcHJvbWlzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlZmVycmVkID0ge307XG5cblx0XHQvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRob2RzXG5cdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xuXHRcdFx0dmFyIGxpc3QgPSB0dXBsZVsgMiBdLFxuXHRcdFx0XHRzdGF0ZVN0cmluZyA9IHR1cGxlWyA1IF07XG5cblx0XHRcdC8vIHByb21pc2UucHJvZ3Jlc3MgPSBsaXN0LmFkZFxuXHRcdFx0Ly8gcHJvbWlzZS5kb25lID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZmFpbCA9IGxpc3QuYWRkXG5cdFx0XHRwcm9taXNlWyB0dXBsZVsgMSBdIF0gPSBsaXN0LmFkZDtcblxuXHRcdFx0Ly8gSGFuZGxlIHN0YXRlXG5cdFx0XHRpZiAoIHN0YXRlU3RyaW5nICkge1xuXHRcdFx0XHRsaXN0LmFkZChcblx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlc29sdmVkXCIgKGkuZS4sIGZ1bGZpbGxlZClcblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZWplY3RlZFwiXG5cdFx0XHRcdFx0XHRzdGF0ZSA9IHN0YXRlU3RyaW5nO1xuXHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdHR1cGxlc1sgMyAtIGkgXVsgMiBdLmRpc2FibGUsXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDMgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfY2FsbGJhY2tzLmxvY2tcblx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMiBdLmxvY2ssXG5cblx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5sb2NrXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5maXJlXG5cdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5maXJlXG5cdFx0XHRsaXN0LmFkZCggdHVwbGVbIDMgXS5maXJlICk7XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5ub3RpZnlXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZXNvbHZlV2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdCA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZWplY3RXaXRoKC4uLikgfVxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gdW5kZWZpbmVkIDogdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmVXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSA9IGxpc3QuZmlyZVdpdGg7XG5cdFx0fSApO1xuXG5cdFx0Ly8gTWFrZSB0aGUgZGVmZXJyZWQgYSBwcm9taXNlXG5cdFx0cHJvbWlzZS5wcm9taXNlKCBkZWZlcnJlZCApO1xuXG5cdFx0Ly8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueVxuXHRcdGlmICggZnVuYyApIHtcblx0XHRcdGZ1bmMuY2FsbCggZGVmZXJyZWQsIGRlZmVycmVkICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsIGRvbmUhXG5cdFx0cmV0dXJuIGRlZmVycmVkO1xuXHR9LFxuXG5cdC8vIERlZmVycmVkIGhlbHBlclxuXHR3aGVuOiBmdW5jdGlvbiggc2luZ2xlVmFsdWUgKSB7XG5cdFx0dmFyXG5cblx0XHRcdC8vIGNvdW50IG9mIHVuY29tcGxldGVkIHN1Ym9yZGluYXRlc1xuXHRcdFx0cmVtYWluaW5nID0gYXJndW1lbnRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5wcm9jZXNzZWQgYXJndW1lbnRzXG5cdFx0XHRpID0gcmVtYWluaW5nLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBmdWxmaWxsbWVudCBkYXRhXG5cdFx0XHRyZXNvbHZlQ29udGV4dHMgPSBBcnJheSggaSApLFxuXHRcdFx0cmVzb2x2ZVZhbHVlcyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLFxuXG5cdFx0XHQvLyB0aGUgcHJpbWFyeSBEZWZlcnJlZFxuXHRcdFx0cHJpbWFyeSA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBjYWxsYmFjayBmYWN0b3J5XG5cdFx0XHR1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZUNvbnRleHRzWyBpIF0gPSB0aGlzO1xuXHRcdFx0XHRcdHJlc29sdmVWYWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTtcblx0XHRcdFx0XHRpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7XG5cdFx0XHRcdFx0XHRwcmltYXJ5LnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9O1xuXG5cdFx0Ly8gU2luZ2xlLSBhbmQgZW1wdHkgYXJndW1lbnRzIGFyZSBhZG9wdGVkIGxpa2UgUHJvbWlzZS5yZXNvbHZlXG5cdFx0aWYgKCByZW1haW5pbmcgPD0gMSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHNpbmdsZVZhbHVlLCBwcmltYXJ5LmRvbmUoIHVwZGF0ZUZ1bmMoIGkgKSApLnJlc29sdmUsIHByaW1hcnkucmVqZWN0LFxuXHRcdFx0XHQhcmVtYWluaW5nICk7XG5cblx0XHRcdC8vIFVzZSAudGhlbigpIHRvIHVud3JhcCBzZWNvbmRhcnkgdGhlbmFibGVzIChjZi4gZ2gtMzAwMClcblx0XHRcdGlmICggcHJpbWFyeS5zdGF0ZSgpID09PSBcInBlbmRpbmdcIiB8fFxuXHRcdFx0XHRpc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0gJiYgcmVzb2x2ZVZhbHVlc1sgaSBdLnRoZW4gKSApIHtcblxuXHRcdFx0XHRyZXR1cm4gcHJpbWFyeS50aGVuKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgYXJndW1lbnRzIGFyZSBhZ2dyZWdhdGVkIGxpa2UgUHJvbWlzZS5hbGwgYXJyYXkgZWxlbWVudHNcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHJlc29sdmVWYWx1ZXNbIGkgXSwgdXBkYXRlRnVuYyggaSApLCBwcmltYXJ5LnJlamVjdCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcmltYXJ5LnByb21pc2UoKTtcblx0fVxufSApO1xuXG5cbi8vIFRoZXNlIHVzdWFsbHkgaW5kaWNhdGUgYSBwcm9ncmFtbWVyIG1pc3Rha2UgZHVyaW5nIGRldmVsb3BtZW50LFxuLy8gd2FybiBhYm91dCB0aGVtIEFTQVAgcmF0aGVyIHRoYW4gc3dhbGxvd2luZyB0aGVtIGJ5IGRlZmF1bHQuXG52YXIgcmVycm9yTmFtZXMgPSAvXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztcblxuLy8gSWYgYGpRdWVyeS5EZWZlcnJlZC5nZXRFcnJvckhvb2tgIGlzIGRlZmluZWQsIGBhc3luY0Vycm9yYCBpcyBhbiBlcnJvclxuLy8gY2FwdHVyZWQgYmVmb3JlIHRoZSBhc3luYyBiYXJyaWVyIHRvIGdldCB0aGUgb3JpZ2luYWwgZXJyb3IgY2F1c2Vcbi8vIHdoaWNoIG1heSBvdGhlcndpc2UgYmUgaGlkZGVuLlxualF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgPSBmdW5jdGlvbiggZXJyb3IsIGFzeW5jRXJyb3IgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgOCAtIDkgb25seVxuXHQvLyBDb25zb2xlIGV4aXN0cyB3aGVuIGRldiB0b29scyBhcmUgb3Blbiwgd2hpY2ggY2FuIGhhcHBlbiBhdCBhbnkgdGltZVxuXHRpZiAoIHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLndhcm4gJiYgZXJyb3IgJiYgcmVycm9yTmFtZXMudGVzdCggZXJyb3IubmFtZSApICkge1xuXHRcdHdpbmRvdy5jb25zb2xlLndhcm4oIFwialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogXCIgKyBlcnJvci5tZXNzYWdlLFxuXHRcdFx0ZXJyb3Iuc3RhY2ssIGFzeW5jRXJyb3IgKTtcblx0fVxufTtcblxuXG5cblxualF1ZXJ5LnJlYWR5RXhjZXB0aW9uID0gZnVuY3Rpb24oIGVycm9yICkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0dGhyb3cgZXJyb3I7XG5cdH0gKTtcbn07XG5cblxuXG5cbi8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeVxudmFyIHJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpO1xuXG5qUXVlcnkuZm4ucmVhZHkgPSBmdW5jdGlvbiggZm4gKSB7XG5cblx0cmVhZHlMaXN0XG5cdFx0LnRoZW4oIGZuIClcblxuXHRcdC8vIFdyYXAgalF1ZXJ5LnJlYWR5RXhjZXB0aW9uIGluIGEgZnVuY3Rpb24gc28gdGhhdCB0aGUgbG9va3VwXG5cdFx0Ly8gaGFwcGVucyBhdCB0aGUgdGltZSBvZiBlcnJvciBoYW5kbGluZyBpbnN0ZWFkIG9mIGNhbGxiYWNrXG5cdFx0Ly8gcmVnaXN0cmF0aW9uLlxuXHRcdC5jYXRjaCggZnVuY3Rpb24oIGVycm9yICkge1xuXHRcdFx0alF1ZXJ5LnJlYWR5RXhjZXB0aW9uKCBlcnJvciApO1xuXHRcdH0gKTtcblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLlxuXHRpc1JlYWR5OiBmYWxzZSxcblxuXHQvLyBBIGNvdW50ZXIgdG8gdHJhY2sgaG93IG1hbnkgaXRlbXMgdG8gd2FpdCBmb3IgYmVmb3JlXG5cdC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlIHRyYWMtNjc4MVxuXHRyZWFkeVdhaXQ6IDEsXG5cblx0Ly8gSGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeVxuXHRyZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7XG5cblx0XHQvLyBBYm9ydCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBhbHJlYWR5IHJlYWR5XG5cdFx0aWYgKCB3YWl0ID09PSB0cnVlID8gLS1qUXVlcnkucmVhZHlXYWl0IDogalF1ZXJ5LmlzUmVhZHkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmVtZW1iZXIgdGhhdCB0aGUgRE9NIGlzIHJlYWR5XG5cdFx0alF1ZXJ5LmlzUmVhZHkgPSB0cnVlO1xuXG5cdFx0Ly8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3YWl0IGlmIG5lZWQgYmVcblx0XHRpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlXG5cdFx0cmVhZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5yZWFkeS50aGVuID0gcmVhZHlMaXN0LnRoZW47XG5cbi8vIFRoZSByZWFkeSBldmVudCBoYW5kbGVyIGFuZCBzZWxmIGNsZWFudXAgbWV0aG9kXG5mdW5jdGlvbiBjb21wbGV0ZWQoKSB7XG5cdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcblx0alF1ZXJ5LnJlYWR5KCk7XG59XG5cbi8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkXG4vLyBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDEwIG9ubHlcbi8vIE9sZGVyIElFIHNvbWV0aW1lcyBzaWduYWxzIFwiaW50ZXJhY3RpdmVcIiB0b28gc29vblxuaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIgfHxcblx0KCBkb2N1bWVudC5yZWFkeVN0YXRlICE9PSBcImxvYWRpbmdcIiAmJiAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsICkgKSB7XG5cblx0Ly8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBqUXVlcnkucmVhZHkgKTtcblxufSBlbHNlIHtcblxuXHQvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrXG5cdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblxuXHQvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29ya1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xufVxuXG5cblxuXG4vLyBNdWx0aWZ1bmN0aW9uYWwgbWV0aG9kIHRvIGdldCBhbmQgc2V0IHZhbHVlcyBvZiBhIGNvbGxlY3Rpb25cbi8vIFRoZSB2YWx1ZS9zIGNhbiBvcHRpb25hbGx5IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvblxudmFyIGFjY2VzcyA9IGZ1bmN0aW9uKCBlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNoYWluYWJsZSwgZW1wdHlHZXQsIHJhdyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGVsZW1zLmxlbmd0aCxcblx0XHRidWxrID0ga2V5ID09IG51bGw7XG5cblx0Ly8gU2V0cyBtYW55IHZhbHVlc1xuXHRpZiAoIHRvVHlwZSgga2V5ICkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblx0XHRmb3IgKCBpIGluIGtleSApIHtcblx0XHRcdGFjY2VzcyggZWxlbXMsIGZuLCBpLCBrZXlbIGkgXSwgdHJ1ZSwgZW1wdHlHZXQsIHJhdyApO1xuXHRcdH1cblxuXHQvLyBTZXRzIG9uZSB2YWx1ZVxuXHR9IGVsc2UgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cblx0XHRpZiAoICFpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmF3ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGJ1bGsgKSB7XG5cblx0XHRcdC8vIEJ1bGsgb3BlcmF0aW9ucyBydW4gYWdhaW5zdCB0aGUgZW50aXJlIHNldFxuXHRcdFx0aWYgKCByYXcgKSB7XG5cdFx0XHRcdGZuLmNhbGwoIGVsZW1zLCB2YWx1ZSApO1xuXHRcdFx0XHRmbiA9IG51bGw7XG5cblx0XHRcdC8vIC4uLmV4Y2VwdCB3aGVuIGV4ZWN1dGluZyBmdW5jdGlvbiB2YWx1ZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ1bGsgPSBmbjtcblx0XHRcdFx0Zm4gPSBmdW5jdGlvbiggZWxlbSwgX2tleSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRmbihcblx0XHRcdFx0XHRlbGVtc1sgaSBdLCBrZXksIHJhdyA/XG5cdFx0XHRcdFx0XHR2YWx1ZSA6XG5cdFx0XHRcdFx0XHR2YWx1ZS5jYWxsKCBlbGVtc1sgaSBdLCBpLCBmbiggZWxlbXNbIGkgXSwga2V5ICkgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICggY2hhaW5hYmxlICkge1xuXHRcdHJldHVybiBlbGVtcztcblx0fVxuXG5cdC8vIEdldHNcblx0aWYgKCBidWxrICkge1xuXHRcdHJldHVybiBmbi5jYWxsKCBlbGVtcyApO1xuXHR9XG5cblx0cmV0dXJuIGxlbiA/IGZuKCBlbGVtc1sgMCBdLCBrZXkgKSA6IGVtcHR5R2V0O1xufTtcblxuXG4vLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmdcbnZhciBybXNQcmVmaXggPSAvXi1tcy0vLFxuXHRyZGFzaEFscGhhID0gLy0oW2Etel0pL2c7XG5cbi8vIFVzZWQgYnkgY2FtZWxDYXNlIGFzIGNhbGxiYWNrIHRvIHJlcGxhY2UoKVxuZnVuY3Rpb24gZmNhbWVsQ2FzZSggX2FsbCwgbGV0dGVyICkge1xuXHRyZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7XG59XG5cbi8vIENvbnZlcnQgZGFzaGVkIHRvIGNhbWVsQ2FzZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRhIG1vZHVsZXNcbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTVcbi8vIE1pY3Jvc29mdCBmb3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICh0cmFjLTk1NzIpXG5mdW5jdGlvbiBjYW1lbENhc2UoIHN0cmluZyApIHtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XG59XG52YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHQvLyBBY2NlcHRzIG9ubHk6XG5cdC8vICAtIE5vZGVcblx0Ly8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERVxuXHQvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERVxuXHQvLyAgLSBPYmplY3Rcblx0Ly8gICAgLSBBbnlcblx0cmV0dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlwZSApO1xufTtcblxuXG5cblxuZnVuY3Rpb24gRGF0YSgpIHtcblx0dGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrO1xufVxuXG5EYXRhLnVpZCA9IDE7XG5cbkRhdGEucHJvdG90eXBlID0ge1xuXG5cdGNhY2hlOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGVcblx0XHR2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcblx0XHRpZiAoICF2YWx1ZSApIHtcblx0XHRcdHZhbHVlID0ge307XG5cblx0XHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSB0cmFjLTgzMzUuXG5cdFx0XHQvLyBBbHdheXMgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC5cblx0XHRcdGlmICggYWNjZXB0RGF0YSggb3duZXIgKSApIHtcblxuXHRcdFx0XHQvLyBJZiBpdCBpcyBhIG5vZGUgdW5saWtlbHkgdG8gYmUgc3RyaW5naWZ5LWVkIG9yIGxvb3BlZCBvdmVyXG5cdFx0XHRcdC8vIHVzZSBwbGFpbiBhc3NpZ25tZW50XG5cdFx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdmFsdWU7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHNlY3VyZSBpdCBpbiBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5XG5cdFx0XHRcdC8vIGNvbmZpZ3VyYWJsZSBtdXN0IGJlIHRydWUgdG8gYWxsb3cgdGhlIHByb3BlcnR5IHRvIGJlXG5cdFx0XHRcdC8vIGRlbGV0ZWQgd2hlbiBkYXRhIGlzIHJlbW92ZWRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIG93bmVyLCB0aGlzLmV4cGFuZG8sIHtcblx0XHRcdFx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB2YWx1ZTtcblx0fSxcblx0c2V0OiBmdW5jdGlvbiggb3duZXIsIGRhdGEsIHZhbHVlICkge1xuXHRcdHZhciBwcm9wLFxuXHRcdFx0Y2FjaGUgPSB0aGlzLmNhY2hlKCBvd25lciApO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCBrZXksIHZhbHVlIF0gYXJnc1xuXHRcdC8vIEFsd2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1Nylcblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Y2FjaGVbIGNhbWVsQ2FzZSggZGF0YSApIF0gPSB2YWx1ZTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwgeyBwcm9wZXJ0aWVzIH0gXSBhcmdzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29weSB0aGUgcHJvcGVydGllcyBvbmUtYnktb25lIHRvIHRoZSBjYWNoZSBvYmplY3Rcblx0XHRcdGZvciAoIHByb3AgaW4gZGF0YSApIHtcblx0XHRcdFx0Y2FjaGVbIGNhbWVsQ2FzZSggcHJvcCApIF0gPSBkYXRhWyBwcm9wIF07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBjYWNoZTtcblx0fSxcblx0Z2V0OiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHRyZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgP1xuXHRcdFx0dGhpcy5jYWNoZSggb3duZXIgKSA6XG5cblx0XHRcdC8vIEFsd2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1Nylcblx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSAmJiBvd25lclsgdGhpcy5leHBhbmRvIF1bIGNhbWVsQ2FzZSgga2V5ICkgXTtcblx0fSxcblx0YWNjZXNzOiBmdW5jdGlvbiggb3duZXIsIGtleSwgdmFsdWUgKSB7XG5cblx0XHQvLyBJbiBjYXNlcyB3aGVyZSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIE5vIGtleSB3YXMgc3BlY2lmaWVkXG5cdFx0Ly8gICAyLiBBIHN0cmluZyBrZXkgd2FzIHNwZWNpZmllZCwgYnV0IG5vIHZhbHVlIHByb3ZpZGVkXG5cdFx0Ly9cblx0XHQvLyBUYWtlIHRoZSBcInJlYWRcIiBwYXRoIGFuZCBhbGxvdyB0aGUgZ2V0IG1ldGhvZCB0byBkZXRlcm1pbmVcblx0XHQvLyB3aGljaCB2YWx1ZSB0byByZXR1cm4sIHJlc3BlY3RpdmVseSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIFRoZSBlbnRpcmUgY2FjaGUgb2JqZWN0XG5cdFx0Ly8gICAyLiBUaGUgZGF0YSBzdG9yZWQgYXQgdGhlIGtleVxuXHRcdC8vXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHQoICgga2V5ICYmIHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgKSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgKSB7XG5cblx0XHRcdHJldHVybiB0aGlzLmdldCggb3duZXIsIGtleSApO1xuXHRcdH1cblxuXHRcdC8vIFdoZW4gdGhlIGtleSBpcyBub3QgYSBzdHJpbmcsIG9yIGJvdGggYSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly8gYXJlIHNwZWNpZmllZCwgc2V0IG9yIGV4dGVuZCAoZXhpc3Rpbmcgb2JqZWN0cykgd2l0aCBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIEFuIG9iamVjdCBvZiBwcm9wZXJ0aWVzXG5cdFx0Ly8gICAyLiBBIGtleSBhbmQgdmFsdWVcblx0XHQvL1xuXHRcdHRoaXMuc2V0KCBvd25lciwga2V5LCB2YWx1ZSApO1xuXG5cdFx0Ly8gU2luY2UgdGhlIFwic2V0XCIgcGF0aCBjYW4gaGF2ZSB0d28gcG9zc2libGUgZW50cnkgcG9pbnRzXG5cdFx0Ly8gcmV0dXJuIHRoZSBleHBlY3RlZCBkYXRhIGJhc2VkIG9uIHdoaWNoIHBhdGggd2FzIHRha2VuWypdXG5cdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGtleTtcblx0fSxcblx0cmVtb3ZlOiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHR2YXIgaSxcblx0XHRcdGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0aWYgKCBjYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICgga2V5ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQgYXJyYXkgb3Igc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBvZiBrZXlzXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIGtleSApICkge1xuXG5cdFx0XHRcdC8vIElmIGtleSBpcyBhbiBhcnJheSBvZiBrZXlzLi4uXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBzZXQgY2FtZWxDYXNlIGtleXMsIHNvIHJlbW92ZSB0aGF0LlxuXHRcdFx0XHRrZXkgPSBrZXkubWFwKCBjYW1lbENhc2UgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGtleSA9IGNhbWVsQ2FzZSgga2V5ICk7XG5cblx0XHRcdFx0Ly8gSWYgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cywgdXNlIGl0LlxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIGNyZWF0ZSBhbiBhcnJheSBieSBtYXRjaGluZyBub24td2hpdGVzcGFjZVxuXHRcdFx0XHRrZXkgPSBrZXkgaW4gY2FjaGUgP1xuXHRcdFx0XHRcdFsga2V5IF0gOlxuXHRcdFx0XHRcdCgga2V5Lm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10gKTtcblx0XHRcdH1cblxuXHRcdFx0aSA9IGtleS5sZW5ndGg7XG5cblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRkZWxldGUgY2FjaGVbIGtleVsgaSBdIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIHRoZXJlJ3Mgbm8gbW9yZSBkYXRhXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fCBqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKSApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NVxuXHRcdFx0Ly8gV2Via2l0ICYgQmxpbmsgcGVyZm9ybWFuY2Ugc3VmZmVycyB3aGVuIGRlbGV0aW5nIHByb3BlcnRpZXNcblx0XHRcdC8vIGZyb20gRE9NIG5vZGVzLCBzbyBzZXQgdG8gdW5kZWZpbmVkIGluc3RlYWRcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM3ODYwNyAoYnVnIHJlc3RyaWN0ZWQpXG5cdFx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xuXHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWxldGUgb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0aGFzRGF0YTogZnVuY3Rpb24oIG93bmVyICkge1xuXHRcdHZhciBjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0XHRyZXR1cm4gY2FjaGUgIT09IHVuZGVmaW5lZCAmJiAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICk7XG5cdH1cbn07XG52YXIgZGF0YVByaXYgPSBuZXcgRGF0YSgpO1xuXG52YXIgZGF0YVVzZXIgPSBuZXcgRGF0YSgpO1xuXG5cblxuLy9cdEltcGxlbWVudGF0aW9uIFN1bW1hcnlcbi8vXG4vL1x0MS4gRW5mb3JjZSBBUEkgc3VyZmFjZSBhbmQgc2VtYW50aWMgY29tcGF0aWJpbGl0eSB3aXRoIDEuOS54IGJyYW5jaFxuLy9cdDIuIEltcHJvdmUgdGhlIG1vZHVsZSdzIG1haW50YWluYWJpbGl0eSBieSByZWR1Y2luZyB0aGUgc3RvcmFnZVxuLy9cdFx0cGF0aHMgdG8gYSBzaW5nbGUgbWVjaGFuaXNtLlxuLy9cdDMuIFVzZSB0aGUgc2FtZSBzaW5nbGUgbWVjaGFuaXNtIHRvIHN1cHBvcnQgXCJwcml2YXRlXCIgYW5kIFwidXNlclwiIGRhdGEuXG4vL1x0NC4gX05ldmVyXyBleHBvc2UgXCJwcml2YXRlXCIgZGF0YSB0byB1c2VyIGNvZGUgKFRPRE86IERyb3AgX2RhdGEsIF9yZW1vdmVEYXRhKVxuLy9cdDUuIEF2b2lkIGV4cG9zaW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb24gdXNlciBvYmplY3RzIChlZy4gZXhwYW5kbyBwcm9wZXJ0aWVzKVxuLy9cdDYuIFByb3ZpZGUgYSBjbGVhciBwYXRoIGZvciBpbXBsZW1lbnRhdGlvbiB1cGdyYWRlIHRvIFdlYWtNYXAgaW4gMjAxNFxuXG52YXIgcmJyYWNlID0gL14oPzpcXHtbXFx3XFxXXSpcXH18XFxbW1xcd1xcV10qXFxdKSQvLFxuXHRybXVsdGlEYXNoID0gL1tBLVpdL2c7XG5cbmZ1bmN0aW9uIGdldERhdGEoIGRhdGEgKSB7XG5cdGlmICggZGF0YSA9PT0gXCJ0cnVlXCIgKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRpZiAoIGRhdGEgPT09IFwiZmFsc2VcIiApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpZiAoIGRhdGEgPT09IFwibnVsbFwiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gT25seSBjb252ZXJ0IHRvIGEgbnVtYmVyIGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHJpbmdcblx0aWYgKCBkYXRhID09PSArZGF0YSArIFwiXCIgKSB7XG5cdFx0cmV0dXJuICtkYXRhO1xuXHR9XG5cblx0aWYgKCByYnJhY2UudGVzdCggZGF0YSApICkge1xuXHRcdHJldHVybiBKU09OLnBhcnNlKCBkYXRhICk7XG5cdH1cblxuXHRyZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gZGF0YUF0dHIoIGVsZW0sIGtleSwgZGF0YSApIHtcblx0dmFyIG5hbWU7XG5cblx0Ly8gSWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5IHRvIGZldGNoIGFueVxuXHQvLyBkYXRhIGZyb20gdGhlIEhUTUw1IGRhdGEtKiBhdHRyaWJ1dGVcblx0aWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRuYW1lID0gXCJkYXRhLVwiICsga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsIFwiLSQmXCIgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdGRhdGEgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApO1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGRhdGEgPSBnZXREYXRhKCBkYXRhICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHt9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEgc28gaXQgaXNuJ3QgY2hhbmdlZCBsYXRlclxuXHRcdFx0ZGF0YVVzZXIuc2V0KCBlbGVtLCBrZXksIGRhdGEgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGRhdGE7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aGFzRGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRhdGFVc2VyLmhhc0RhdGEoIGVsZW0gKSB8fCBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICk7XG5cdH0sXG5cblx0ZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFVc2VyLmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFVc2VyLnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9LFxuXG5cdC8vIFRPRE86IE5vdyB0aGF0IGFsbCBjYWxscyB0byBfZGF0YSBhbmQgX3JlbW92ZURhdGEgaGF2ZSBiZWVuIHJlcGxhY2VkXG5cdC8vIHdpdGggZGlyZWN0IGNhbGxzIHRvIGRhdGFQcml2IG1ldGhvZHMsIHRoZXNlIGNhbiBiZSBkZXByZWNhdGVkLlxuXHRfZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xuXHR9LFxuXG5cdF9yZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdHZhciBpLCBuYW1lLCBkYXRhLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdGF0dHJzID0gZWxlbSAmJiBlbGVtLmF0dHJpYnV0ZXM7XG5cblx0XHQvLyBHZXRzIGFsbCB2YWx1ZXNcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB0aGlzLmxlbmd0aCApIHtcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSApO1xuXG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhZGF0YVByaXYuZ2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiICkgKSB7XG5cdFx0XHRcdFx0aSA9IGF0dHJzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0XHRcdFx0Ly8gVGhlIGF0dHJzIGVsZW1lbnRzIGNhbiBiZSBudWxsICh0cmFjLTE0ODk0KVxuXHRcdFx0XHRcdFx0aWYgKCBhdHRyc1sgaSBdICkge1xuXHRcdFx0XHRcdFx0XHRuYW1lID0gYXR0cnNbIGkgXS5uYW1lO1xuXHRcdFx0XHRcdFx0XHRpZiAoIG5hbWUuaW5kZXhPZiggXCJkYXRhLVwiICkgPT09IDAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZSA9IGNhbWVsQ2FzZSggbmFtZS5zbGljZSggNSApICk7XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUF0dHIoIGVsZW0sIG5hbWUsIGRhdGFbIG5hbWUgXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH1cblxuXHRcdC8vIFNldHMgbXVsdGlwbGUgdmFsdWVzXG5cdFx0aWYgKCB0eXBlb2Yga2V5ID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5ICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGRhdGE7XG5cblx0XHRcdC8vIFRoZSBjYWxsaW5nIGpRdWVyeSBvYmplY3QgKGVsZW1lbnQgbWF0Y2hlcykgaXMgbm90IGVtcHR5XG5cdFx0XHQvLyAoYW5kIHRoZXJlZm9yZSBoYXMgYW4gZWxlbWVudCBhcHBlYXJzIGF0IHRoaXNbIDAgXSkgYW5kIHRoZVxuXHRcdFx0Ly8gYHZhbHVlYCBwYXJhbWV0ZXIgd2FzIG5vdCB1bmRlZmluZWQuIEFuIGVtcHR5IGpRdWVyeSBvYmplY3Rcblx0XHRcdC8vIHdpbGwgcmVzdWx0IGluIGB1bmRlZmluZWRgIGZvciBlbGVtID0gdGhpc1sgMCBdIHdoaWNoIHdpbGxcblx0XHRcdC8vIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhbiBhdHRlbXB0IHRvIHJlYWQgYSBkYXRhIGNhY2hlIGlzIG1hZGUuXG5cdFx0XHRpZiAoIGVsZW0gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIGdldCBkYXRhIGZyb20gdGhlIGNhY2hlXG5cdFx0XHRcdC8vIFRoZSBrZXkgd2lsbCBhbHdheXMgYmUgY2FtZWxDYXNlZCBpbiBEYXRhXG5cdFx0XHRcdGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0sIGtleSApO1xuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gXCJkaXNjb3ZlclwiIHRoZSBkYXRhIGluXG5cdFx0XHRcdC8vIEhUTUw1IGN1c3RvbSBkYXRhLSogYXR0cnNcblx0XHRcdFx0ZGF0YSA9IGRhdGFBdHRyKCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBXZSB0cmllZCByZWFsbHkgaGFyZCwgYnV0IHRoZSBkYXRhIGRvZXNuJ3QgZXhpc3QuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IHRoZSBkYXRhLi4uXG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBzdG9yZSB0aGUgY2FtZWxDYXNlZCBrZXlcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXksIHZhbHVlICk7XG5cdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxLCBudWxsLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGtleSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRhdGFVc2VyLnJlbW92ZSggdGhpcywga2V5ICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHF1ZXVlO1xuXG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0dHlwZSA9ICggdHlwZSB8fCBcImZ4XCIgKSArIFwicXVldWVcIjtcblx0XHRcdHF1ZXVlID0gZGF0YVByaXYuZ2V0KCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdC8vIFNwZWVkIHVwIGRlcXVldWUgYnkgZ2V0dGluZyBvdXQgcXVpY2tseSBpZiB0aGlzIGlzIGp1c3QgYSBsb29rdXBcblx0XHRcdGlmICggZGF0YSApIHtcblx0XHRcdFx0aWYgKCAhcXVldWUgfHwgQXJyYXkuaXNBcnJheSggZGF0YSApICkge1xuXHRcdFx0XHRcdHF1ZXVlID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KCBkYXRhICkgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBkYXRhICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBxdWV1ZSB8fCBbXTtcblx0XHR9XG5cdH0sXG5cblx0ZGVxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCBlbGVtLCB0eXBlICksXG5cdFx0XHRzdGFydExlbmd0aCA9IHF1ZXVlLmxlbmd0aCxcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKSxcblx0XHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCB0eXBlICksXG5cdFx0XHRuZXh0ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7XG5cdFx0XHR9O1xuXG5cdFx0Ly8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdheXMgcmVtb3ZlIHRoZSBwcm9ncmVzcyBzZW50aW5lbFxuXHRcdGlmICggZm4gPT09IFwiaW5wcm9ncmVzc1wiICkge1xuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0c3RhcnRMZW5ndGgtLTtcblx0XHR9XG5cblx0XHRpZiAoIGZuICkge1xuXG5cdFx0XHQvLyBBZGQgYSBwcm9ncmVzcyBzZW50aW5lbCB0byBwcmV2ZW50IHRoZSBmeCBxdWV1ZSBmcm9tIGJlaW5nXG5cdFx0XHQvLyBhdXRvbWF0aWNhbGx5IGRlcXVldWVkXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwiZnhcIiApIHtcblx0XHRcdFx0cXVldWUudW5zaGlmdCggXCJpbnByb2dyZXNzXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2xlYXIgdXAgdGhlIGxhc3QgcXVldWUgc3RvcCBmdW5jdGlvblxuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XG5cdFx0XHRmbi5jYWxsKCBlbGVtLCBuZXh0LCBob29rcyApO1xuXHRcdH1cblxuXHRcdGlmICggIXN0YXJ0TGVuZ3RoICYmIGhvb2tzICkge1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdH1cblx0fSxcblxuXHQvLyBOb3QgcHVibGljIC0gZ2VuZXJhdGUgYSBxdWV1ZUhvb2tzIG9iamVjdCwgb3IgcmV0dXJuIHRoZSBjdXJyZW50IG9uZVxuXHRfcXVldWVIb29rczogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7XG5cdFx0dmFyIGtleSA9IHR5cGUgKyBcInF1ZXVlSG9va3NcIjtcblx0XHRyZXR1cm4gZGF0YVByaXYuZ2V0KCBlbGVtLCBrZXkgKSB8fCBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIGtleSwge1xuXHRcdFx0ZW1wdHk6IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLmFkZCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgWyB0eXBlICsgXCJxdWV1ZVwiLCBrZXkgXSApO1xuXHRcdFx0fSApXG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBzZXR0ZXIgPSAyO1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGRhdGEgPSB0eXBlO1xuXHRcdFx0dHlwZSA9IFwiZnhcIjtcblx0XHRcdHNldHRlci0tO1xuXHRcdH1cblxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCA8IHNldHRlciApIHtcblx0XHRcdHJldHVybiBqUXVlcnkucXVldWUoIHRoaXNbIDAgXSwgdHlwZSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgP1xuXHRcdFx0dGhpcyA6XG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIGRhdGEgKTtcblxuXHRcdFx0XHQvLyBFbnN1cmUgYSBob29rcyBmb3IgdGhpcyBxdWV1ZVxuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiZnhcIiAmJiBxdWV1ZVsgMCBdICE9PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdH0sXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHR9ICk7XG5cdH0sXG5cdGNsZWFyUXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0fSxcblxuXHQvLyBHZXQgYSBwcm9taXNlIHJlc29sdmVkIHdoZW4gcXVldWVzIG9mIGEgY2VydGFpbiB0eXBlXG5cdC8vIGFyZSBlbXB0aWVkIChmeCBpcyB0aGUgdHlwZSBieSBkZWZhdWx0KVxuXHRwcm9taXNlOiBmdW5jdGlvbiggdHlwZSwgb2JqICkge1xuXHRcdHZhciB0bXAsXG5cdFx0XHRjb3VudCA9IDEsXG5cdFx0XHRkZWZlciA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0ZWxlbWVudHMgPSB0aGlzLFxuXHRcdFx0aSA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0cmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICEoIC0tY291bnQgKSApIHtcblx0XHRcdFx0XHRkZWZlci5yZXNvbHZlV2l0aCggZWxlbWVudHMsIFsgZWxlbWVudHMgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG9iaiA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRtcCA9IGRhdGFQcml2LmdldCggZWxlbWVudHNbIGkgXSwgdHlwZSArIFwicXVldWVIb29rc1wiICk7XG5cdFx0XHRpZiAoIHRtcCAmJiB0bXAuZW1wdHkgKSB7XG5cdFx0XHRcdGNvdW50Kys7XG5cdFx0XHRcdHRtcC5lbXB0eS5hZGQoIHJlc29sdmUgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmVzb2x2ZSgpO1xuXHRcdHJldHVybiBkZWZlci5wcm9taXNlKCBvYmogKTtcblx0fVxufSApO1xudmFyIHBudW0gPSAoIC9bKy1dPyg/OlxcZCpcXC58KVxcZCsoPzpbZUVdWystXT9cXGQrfCkvICkuc291cmNlO1xuXG52YXIgcmNzc051bSA9IG5ldyBSZWdFeHAoIFwiXig/OihbKy1dKT18KShcIiArIHBudW0gKyBcIikoW2EteiVdKikkXCIsIFwiaVwiICk7XG5cblxudmFyIGNzc0V4cGFuZCA9IFsgXCJUb3BcIiwgXCJSaWdodFwiLCBcIkJvdHRvbVwiLCBcIkxlZnRcIiBdO1xuXG52YXIgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG5cblxuXHR2YXIgaXNBdHRhY2hlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7XG5cdFx0fSxcblx0XHRjb21wb3NlZCA9IHsgY29tcG9zZWQ6IHRydWUgfTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrLCBpT1MgMTAuMCAtIDEwLjIgb25seVxuXHQvLyBDaGVjayBhdHRhY2htZW50IGFjcm9zcyBzaGFkb3cgRE9NIGJvdW5kYXJpZXMgd2hlbiBwb3NzaWJsZSAoZ2gtMzUwNClcblx0Ly8gU3VwcG9ydDogaU9TIDEwLjAtMTAuMiBvbmx5XG5cdC8vIEVhcmx5IGlPUyAxMCB2ZXJzaW9ucyBzdXBwb3J0IGBhdHRhY2hTaGFkb3dgIGJ1dCBub3QgYGdldFJvb3ROb2RlYCxcblx0Ly8gbGVhZGluZyB0byBlcnJvcnMuIFdlIG5lZWQgdG8gY2hlY2sgZm9yIGBnZXRSb290Tm9kZWAuXG5cdGlmICggZG9jdW1lbnRFbGVtZW50LmdldFJvb3ROb2RlICkge1xuXHRcdGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Um9vdE5vZGUoIGNvbXBvc2VkICkgPT09IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHR9O1xuXHR9XG52YXIgaXNIaWRkZW5XaXRoaW5UcmVlID0gZnVuY3Rpb24oIGVsZW0sIGVsICkge1xuXG5cdFx0Ly8gaXNIaWRkZW5XaXRoaW5UcmVlIG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGpRdWVyeSNmaWx0ZXIgZnVuY3Rpb247XG5cdFx0Ly8gaW4gdGhhdCBjYXNlLCBlbGVtZW50IHdpbGwgYmUgc2Vjb25kIGFyZ3VtZW50XG5cdFx0ZWxlbSA9IGVsIHx8IGVsZW07XG5cblx0XHQvLyBJbmxpbmUgc3R5bGUgdHJ1bXBzIGFsbFxuXHRcdHJldHVybiBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwibm9uZVwiIHx8XG5cdFx0XHRlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiZcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlLCBjaGVjayBjb21wdXRlZCBzdHlsZVxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTQzIC0gNDVcblx0XHRcdC8vIERpc2Nvbm5lY3RlZCBlbGVtZW50cyBjYW4gaGF2ZSBjb21wdXRlZCBkaXNwbGF5OiBub25lLCBzbyBmaXJzdCBjb25maXJtIHRoYXQgZWxlbSBpc1xuXHRcdFx0Ly8gaW4gdGhlIGRvY3VtZW50LlxuXHRcdFx0aXNBdHRhY2hlZCggZWxlbSApICYmXG5cblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgPT09IFwibm9uZVwiO1xuXHR9O1xuXG5cblxuZnVuY3Rpb24gYWRqdXN0Q1NTKCBlbGVtLCBwcm9wLCB2YWx1ZVBhcnRzLCB0d2VlbiApIHtcblx0dmFyIGFkanVzdGVkLCBzY2FsZSxcblx0XHRtYXhJdGVyYXRpb25zID0gMjAsXG5cdFx0Y3VycmVudFZhbHVlID0gdHdlZW4gP1xuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5jdXIoKTtcblx0XHRcdH0gOlxuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wLCBcIlwiICk7XG5cdFx0XHR9LFxuXHRcdGluaXRpYWwgPSBjdXJyZW50VmFsdWUoKSxcblx0XHR1bml0ID0gdmFsdWVQYXJ0cyAmJiB2YWx1ZVBhcnRzWyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICksXG5cblx0XHQvLyBTdGFydGluZyB2YWx1ZSBjb21wdXRhdGlvbiBpcyByZXF1aXJlZCBmb3IgcG90ZW50aWFsIHVuaXQgbWlzbWF0Y2hlc1xuXHRcdGluaXRpYWxJblVuaXQgPSBlbGVtLm5vZGVUeXBlICYmXG5cdFx0XHQoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSB8fCB1bml0ICE9PSBcInB4XCIgJiYgK2luaXRpYWwgKSAmJlxuXHRcdFx0cmNzc051bS5leGVjKCBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wICkgKTtcblxuXHRpZiAoIGluaXRpYWxJblVuaXQgJiYgaW5pdGlhbEluVW5pdFsgMyBdICE9PSB1bml0ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XG5cdFx0Ly8gSGFsdmUgdGhlIGl0ZXJhdGlvbiB0YXJnZXQgdmFsdWUgdG8gcHJldmVudCBpbnRlcmZlcmVuY2UgZnJvbSBDU1MgdXBwZXIgYm91bmRzIChnaC0yMTQ0KVxuXHRcdGluaXRpYWwgPSBpbml0aWFsIC8gMjtcblxuXHRcdC8vIFRydXN0IHVuaXRzIHJlcG9ydGVkIGJ5IGpRdWVyeS5jc3Ncblx0XHR1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07XG5cblx0XHQvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludFxuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbCB8fCAxO1xuXG5cdFx0d2hpbGUgKCBtYXhJdGVyYXRpb25zLS0gKSB7XG5cblx0XHRcdC8vIEV2YWx1YXRlIGFuZCB1cGRhdGUgb3VyIGJlc3QgZ3Vlc3MgKGRvdWJsaW5nIGd1ZXNzZXMgdGhhdCB6ZXJvIG91dCkuXG5cdFx0XHQvLyBGaW5pc2ggaWYgdGhlIHNjYWxlIGVxdWFscyBvciBjcm9zc2VzIDEgKG1ha2luZyB0aGUgb2xkKm5ldyBwcm9kdWN0IG5vbi1wb3NpdGl2ZSkuXG5cdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cdFx0XHRpZiAoICggMSAtIHNjYWxlICkgKiAoIDEgLSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsIHx8IDAuNSApICkgPD0gMCApIHtcblx0XHRcdFx0bWF4SXRlcmF0aW9ucyA9IDA7XG5cdFx0XHR9XG5cdFx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAvIHNjYWxlO1xuXG5cdFx0fVxuXG5cdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgKiAyO1xuXHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB3ZSB1cGRhdGUgdGhlIHR3ZWVuIHByb3BlcnRpZXMgbGF0ZXIgb25cblx0XHR2YWx1ZVBhcnRzID0gdmFsdWVQYXJ0cyB8fCBbXTtcblx0fVxuXG5cdGlmICggdmFsdWVQYXJ0cyApIHtcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDtcblxuXHRcdC8vIEFwcGx5IHJlbGF0aXZlIG9mZnNldCAoKz0vLT0pIGlmIHNwZWNpZmllZFxuXHRcdGFkanVzdGVkID0gdmFsdWVQYXJ0c1sgMSBdID9cblx0XHRcdGluaXRpYWxJblVuaXQgKyAoIHZhbHVlUGFydHNbIDEgXSArIDEgKSAqIHZhbHVlUGFydHNbIDIgXSA6XG5cdFx0XHQrdmFsdWVQYXJ0c1sgMiBdO1xuXHRcdGlmICggdHdlZW4gKSB7XG5cdFx0XHR0d2Vlbi51bml0ID0gdW5pdDtcblx0XHRcdHR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5pdDtcblx0XHRcdHR3ZWVuLmVuZCA9IGFkanVzdGVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYWRqdXN0ZWQ7XG59XG5cblxudmFyIGRlZmF1bHREaXNwbGF5TWFwID0ge307XG5cbmZ1bmN0aW9uIGdldERlZmF1bHREaXNwbGF5KCBlbGVtICkge1xuXHR2YXIgdGVtcCxcblx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQsXG5cdFx0bm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLFxuXHRcdGRpc3BsYXkgPSBkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXTtcblxuXHRpZiAoIGRpc3BsYXkgKSB7XG5cdFx0cmV0dXJuIGRpc3BsYXk7XG5cdH1cblxuXHR0ZW1wID0gZG9jLmJvZHkuYXBwZW5kQ2hpbGQoIGRvYy5jcmVhdGVFbGVtZW50KCBub2RlTmFtZSApICk7XG5cdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCB0ZW1wLCBcImRpc3BsYXlcIiApO1xuXG5cdHRlbXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdGVtcCApO1xuXG5cdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0ZGlzcGxheSA9IFwiYmxvY2tcIjtcblx0fVxuXHRkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7XG5cblx0cmV0dXJuIGRpc3BsYXk7XG59XG5cbmZ1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHtcblx0dmFyIGRpc3BsYXksIGVsZW0sXG5cdFx0dmFsdWVzID0gW10sXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuXHQvLyBEZXRlcm1pbmUgbmV3IGRpc3BsYXkgdmFsdWUgZm9yIGVsZW1lbnRzIHRoYXQgbmVlZCB0byBjaGFuZ2Vcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRlbGVtID0gZWxlbWVudHNbIGluZGV4IF07XG5cdFx0aWYgKCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7XG5cdFx0aWYgKCBzaG93ICkge1xuXG5cdFx0XHQvLyBTaW5jZSB3ZSBmb3JjZSB2aXNpYmlsaXR5IHVwb24gY2FzY2FkZS1oaWRkZW4gZWxlbWVudHMsIGFuIGltbWVkaWF0ZSAoYW5kIHNsb3cpXG5cdFx0XHQvLyBjaGVjayBpcyByZXF1aXJlZCBpbiB0aGlzIGZpcnN0IGxvb3AgdW5sZXNzIHdlIGhhdmUgYSBub25lbXB0eSBkaXNwbGF5IHZhbHVlIChlaXRoZXJcblx0XHRcdC8vIGlubGluZSBvciBhYm91dC10by1iZS1yZXN0b3JlZClcblx0XHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKSB8fCBudWxsO1xuXHRcdFx0XHRpZiAoICF2YWx1ZXNbIGluZGV4IF0gKSB7XG5cdFx0XHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICkgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGdldERlZmF1bHREaXNwbGF5KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggZGlzcGxheSAhPT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IFwibm9uZVwiO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHdoYXQgd2UncmUgb3ZlcndyaXRpbmdcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImRpc3BsYXlcIiwgZGlzcGxheSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFNldCB0aGUgZGlzcGxheSBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcCB0byBhdm9pZCBjb25zdGFudCByZWZsb3dcblx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoIHZhbHVlc1sgaW5kZXggXSAhPSBudWxsICkge1xuXHRcdFx0ZWxlbWVudHNbIGluZGV4IF0uc3R5bGUuZGlzcGxheSA9IHZhbHVlc1sgaW5kZXggXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudHM7XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2hvdzogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzLCB0cnVlICk7XG5cdH0sXG5cdGhpZGU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcyApO1xuXHR9LFxuXHR0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHtcblx0XHRpZiAoIHR5cGVvZiBzdGF0ZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGUgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBpc0hpZGRlbldpdGhpblRyZWUoIHRoaXMgKSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xudmFyIHJjaGVja2FibGVUeXBlID0gKCAvXig/OmNoZWNrYm94fHJhZGlvKSQvaSApO1xuXG52YXIgcnRhZ05hbWUgPSAoIC88KFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKikvaSApO1xuXG52YXIgcnNjcmlwdFR5cGUgPSAoIC9eJHxebW9kdWxlJHxcXC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kgKTtcblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRkaXYgPSBmcmFnbWVudC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICksXG5cdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5XG5cdC8vIENoZWNrIHN0YXRlIGxvc3QgaWYgdGhlIG5hbWUgaXMgc2V0ICh0cmFjLTExMjE3KVxuXHQvLyBTdXBwb3J0OiBXaW5kb3dzIFdlYiBBcHBzIChXV0EpXG5cdC8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAodHJhYy0xNDkwMSlcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJyYWRpb1wiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJjaGVja2VkXCIsIFwiY2hlY2tlZFwiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwidFwiICk7XG5cblx0ZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgb25seVxuXHQvLyBPbGRlciBXZWJLaXQgZG9lc24ndCBjbG9uZSBjaGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHNcblx0c3VwcG9ydC5jaGVja0Nsb25lID0gZGl2LmNsb25lTm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5jaGVja2VkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNYWtlIHN1cmUgdGV4dGFyZWEgKGFuZCBjaGVja2JveCkgZGVmYXVsdFZhbHVlIGlzIHByb3Blcmx5IGNsb25lZFxuXHRkaXYuaW5uZXJIVE1MID0gXCI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+XCI7XG5cdHN1cHBvcnQubm9DbG9uZUNoZWNrZWQgPSAhIWRpdi5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdC8vIElFIDw9OSByZXBsYWNlcyA8b3B0aW9uPiB0YWdzIHdpdGggdGhlaXIgY29udGVudHMgd2hlbiBpbnNlcnRlZCBvdXRzaWRlIG9mXG5cdC8vIHRoZSBzZWxlY3QgZWxlbWVudC5cblx0ZGl2LmlubmVySFRNTCA9IFwiPG9wdGlvbj48L29wdGlvbj5cIjtcblx0c3VwcG9ydC5vcHRpb24gPSAhIWRpdi5sYXN0Q2hpbGQ7XG59ICkoKTtcblxuXG4vLyBXZSBoYXZlIHRvIGNsb3NlIHRoZXNlIHRhZ3MgdG8gc3VwcG9ydCBYSFRNTCAodHJhYy0xMzIwMClcbnZhciB3cmFwTWFwID0ge1xuXG5cdC8vIFhIVE1MIHBhcnNlcnMgZG8gbm90IG1hZ2ljYWxseSBpbnNlcnQgZWxlbWVudHMgaW4gdGhlXG5cdC8vIHNhbWUgd2F5IHRoYXQgdGFnIHNvdXAgcGFyc2VycyBkby4gU28gd2UgY2Fubm90IHNob3J0ZW5cblx0Ly8gdGhpcyBieSBvbWl0dGluZyA8dGJvZHk+IG9yIG90aGVyIHJlcXVpcmVkIGVsZW1lbnRzLlxuXHR0aGVhZDogWyAxLCBcIjx0YWJsZT5cIiwgXCI8L3RhYmxlPlwiIF0sXG5cdGNvbDogWyAyLCBcIjx0YWJsZT48Y29sZ3JvdXA+XCIsIFwiPC9jb2xncm91cD48L3RhYmxlPlwiIF0sXG5cdHRyOiBbIDIsIFwiPHRhYmxlPjx0Ym9keT5cIiwgXCI8L3Rib2R5PjwvdGFibGU+XCIgXSxcblx0dGQ6IFsgMywgXCI8dGFibGU+PHRib2R5Pjx0cj5cIiwgXCI8L3RyPjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXG5cdF9kZWZhdWx0OiBbIDAsIFwiXCIsIFwiXCIgXVxufTtcblxud3JhcE1hcC50Ym9keSA9IHdyYXBNYXAudGZvb3QgPSB3cmFwTWFwLmNvbGdyb3VwID0gd3JhcE1hcC5jYXB0aW9uID0gd3JhcE1hcC50aGVhZDtcbndyYXBNYXAudGggPSB3cmFwTWFwLnRkO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuaWYgKCAhc3VwcG9ydC5vcHRpb24gKSB7XG5cdHdyYXBNYXAub3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbiA9IFsgMSwgXCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+XCIsIFwiPC9zZWxlY3Q+XCIgXTtcbn1cblxuXG5mdW5jdGlvbiBnZXRBbGwoIGNvbnRleHQsIHRhZyApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFVzZSB0eXBlb2YgdG8gYXZvaWQgemVyby1hcmd1bWVudCBtZXRob2QgaW52b2NhdGlvbiBvbiBob3N0IG9iamVjdHMgKHRyYWMtMTUxNTEpXG5cdHZhciByZXQ7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2UgaWYgKCB0eXBlb2YgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIHtcblx0XHRyZXQgPSBbXTtcblx0fVxuXG5cdGlmICggdGFnID09PSB1bmRlZmluZWQgfHwgdGFnICYmIG5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0ICk7XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufVxuXG5cbi8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZFxuZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZGF0YVByaXYuc2V0KFxuXHRcdFx0ZWxlbXNbIGkgXSxcblx0XHRcdFwiZ2xvYmFsRXZhbFwiLFxuXHRcdFx0IXJlZkVsZW1lbnRzIHx8IGRhdGFQcml2LmdldCggcmVmRWxlbWVudHNbIGkgXSwgXCJnbG9iYWxFdmFsXCIgKVxuXHRcdCk7XG5cdH1cbn1cblxuXG52YXIgcmh0bWwgPSAvPHwmIz9cXHcrOy87XG5cbmZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24sIGlnbm9yZWQgKSB7XG5cdHZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgYXR0YWNoZWQsIGosXG5cdFx0ZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRub2RlcyA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGVsZW0gPSBlbGVtc1sgaSBdO1xuXG5cdFx0aWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7XG5cblx0XHRcdC8vIEFkZCBub2RlcyBkaXJlY3RseVxuXHRcdFx0aWYgKCB0b1R5cGUoIGVsZW0gKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCBlbGVtLm5vZGVUeXBlID8gWyBlbGVtIF0gOiBlbGVtICk7XG5cblx0XHRcdC8vIENvbnZlcnQgbm9uLWh0bWwgaW50byBhIHRleHQgbm9kZVxuXHRcdFx0fSBlbHNlIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHtcblx0XHRcdFx0bm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7XG5cblx0XHRcdC8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2Rlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dG1wID0gdG1wIHx8IGZyYWdtZW50LmFwcGVuZENoaWxkKCBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApO1xuXG5cdFx0XHRcdC8vIERlc2VyaWFsaXplIGEgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25cblx0XHRcdFx0dGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0O1xuXHRcdFx0XHR0bXAuaW5uZXJIVE1MID0gd3JhcFsgMSBdICsgalF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIGVsZW0gKSArIHdyYXBbIDIgXTtcblxuXHRcdFx0XHQvLyBEZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnRcblx0XHRcdFx0aiA9IHdyYXBbIDAgXTtcblx0XHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdFx0dG1wID0gdG1wLmxhc3RDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIHRtcC5jaGlsZE5vZGVzICk7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgdGhlIHRvcC1sZXZlbCBjb250YWluZXJcblx0XHRcdFx0dG1wID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdFx0XHQvLyBFbnN1cmUgdGhlIGNyZWF0ZWQgbm9kZXMgYXJlIG9ycGhhbmVkICh0cmFjLTEyMzkyKVxuXHRcdFx0XHR0bXAudGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJlbW92ZSB3cmFwcGVyIGZyb20gZnJhZ21lbnRcblx0ZnJhZ21lbnQudGV4dENvbnRlbnQgPSBcIlwiO1xuXG5cdGkgPSAwO1xuXHR3aGlsZSAoICggZWxlbSA9IG5vZGVzWyBpKysgXSApICkge1xuXG5cdFx0Ly8gU2tpcCBlbGVtZW50cyBhbHJlYWR5IGluIHRoZSBjb250ZXh0IGNvbGxlY3Rpb24gKHRyYWMtNDA4Nylcblx0XHRpZiAoIHNlbGVjdGlvbiAmJiBqUXVlcnkuaW5BcnJheSggZWxlbSwgc2VsZWN0aW9uICkgPiAtMSApIHtcblx0XHRcdGlmICggaWdub3JlZCApIHtcblx0XHRcdFx0aWdub3JlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRhdHRhY2hlZCA9IGlzQXR0YWNoZWQoIGVsZW0gKTtcblxuXHRcdC8vIEFwcGVuZCB0byBmcmFnbWVudFxuXHRcdHRtcCA9IGdldEFsbCggZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGVsZW0gKSwgXCJzY3JpcHRcIiApO1xuXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdGlmICggYXR0YWNoZWQgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCB0bXAgKTtcblx0XHR9XG5cblx0XHQvLyBDYXB0dXJlIGV4ZWN1dGFibGVzXG5cdFx0aWYgKCBzY3JpcHRzICkge1xuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRtcFsgaisrIF0gKSApIHtcblx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBlbGVtLnR5cGUgfHwgXCJcIiApICkge1xuXHRcdFx0XHRcdHNjcmlwdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGZyYWdtZW50O1xufVxuXG5cbnZhciBydHlwZW5hbWVzcGFjZSA9IC9eKFteLl0qKSg/OlxcLiguKyl8KS87XG5cbmZ1bmN0aW9uIHJldHVyblRydWUoKSB7XG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZXR1cm5GYWxzZSgpIHtcblx0cmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBvbiggZWxlbSwgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgb25lICkge1xuXHR2YXIgb3JpZ0ZuLCB0eXBlO1xuXG5cdC8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVyc1xuXHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtT2JqZWN0LCBkYXRhIClcblx0XHRcdGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRvbiggZWxlbSwgdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7XG5cblx0XHQvLyAoIHR5cGVzLCBmbiApXG5cdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vICggdHlwZXMsIGRhdGEsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHR9IGVsc2UgaWYgKCAhZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIG9uZSA9PT0gMSApIHtcblx0XHRvcmlnRm4gPSBmbjtcblx0XHRmbiA9IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0Ly8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvXG5cdFx0XHRqUXVlcnkoKS5vZmYoIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9O1xuXG5cdFx0Ly8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm5cblx0XHRmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTtcblx0fVxuXHRyZXR1cm4gZWxlbS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7XG5cdH0gKTtcbn1cblxuLypcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS5cbiAqIFByb3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRlYXMuXG4gKi9cbmpRdWVyeS5ldmVudCA9IHtcblxuXHRnbG9iYWw6IHt9LFxuXG5cdGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHtcblxuXHRcdHZhciBoYW5kbGVPYmpJbiwgZXZlbnRIYW5kbGUsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdC8vIE9ubHkgYXR0YWNoIGV2ZW50cyB0byBvYmplY3RzIHRoYXQgYWNjZXB0IGRhdGFcblx0XHRpZiAoICFhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1IG9mIHRoZSBoYW5kbGVyXG5cdFx0aWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7XG5cdFx0XHRoYW5kbGVPYmpJbiA9IGhhbmRsZXI7XG5cdFx0XHRoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjtcblx0XHRcdHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7XG5cdFx0fVxuXG5cdFx0Ly8gRW5zdXJlIHRoYXQgaW52YWxpZCBzZWxlY3RvcnMgdGhyb3cgZXhjZXB0aW9ucyBhdCBhdHRhY2ggdGltZVxuXHRcdC8vIEV2YWx1YXRlIGFnYWluc3QgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgZWxlbSBpcyBhIG5vbi1lbGVtZW50IG5vZGUgKGUuZy4sIGRvY3VtZW50KVxuXHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGRvY3VtZW50RWxlbWVudCwgc2VsZWN0b3IgKTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXJcblx0XHRpZiAoICFoYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrO1xuXHRcdH1cblxuXHRcdC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3Rcblx0XHRpZiAoICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0ZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0gT2JqZWN0LmNyZWF0ZSggbnVsbCApO1xuXHRcdH1cblx0XHRpZiAoICEoIGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlICkgKSB7XG5cdFx0XHRldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSA9IGZ1bmN0aW9uKCBlICkge1xuXG5cdFx0XHRcdC8vIERpc2NhcmQgdGhlIHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kXG5cdFx0XHRcdC8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWRcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiBqUXVlcnkgIT09IFwidW5kZWZpbmVkXCIgJiYgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlID9cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBwbHkoIGVsZW0sIGFyZ3VtZW50cyApIDogdW5kZWZpbmVkO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFRoZXJlICptdXN0KiBiZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1lc3BhY2Utb25seSBoYW5kbGVyc1xuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZVxuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnNcblx0XHRcdGhhbmRsZU9iaiA9IGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0b3JpZ1R5cGU6IG9yaWdUeXBlLFxuXHRcdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0XHRoYW5kbGVyOiBoYW5kbGVyLFxuXHRcdFx0XHRndWlkOiBoYW5kbGVyLmd1aWQsXG5cdFx0XHRcdHNlbGVjdG9yOiBzZWxlY3Rvcixcblx0XHRcdFx0bmVlZHNDb250ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSxcblx0XHRcdFx0bmFtZXNwYWNlOiBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiIClcblx0XHRcdH0sIGhhbmRsZU9iakluICk7XG5cblx0XHRcdC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0XG5cdFx0XHRpZiAoICEoIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gKSApIHtcblx0XHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdO1xuXHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0gMDtcblxuXHRcdFx0XHQvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyIGlmIHRoZSBzcGVjaWFsIGV2ZW50cyBoYW5kbGVyIHJldHVybnMgZmFsc2Vcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC5zZXR1cCB8fFxuXHRcdFx0XHRcdHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdFx0XHRcdGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBzcGVjaWFsLmFkZCApIHtcblx0XHRcdFx0c3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cblx0XHRcdFx0aWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250XG5cdFx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQrKywgMCwgaGFuZGxlT2JqICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRoYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gS2VlcCB0cmFjayBvZiB3aGljaCBldmVudHMgaGF2ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGltaXphdGlvblxuXHRcdFx0alF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTtcblx0XHR9XG5cblx0fSxcblxuXHQvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnRcblx0cmVtb3ZlOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHNlbGVjdG9yLCBtYXBwZWRUeXBlcyApIHtcblxuXHRcdHZhciBqLCBvcmlnQ291bnQsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICkgJiYgZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHRpZiAoICFlbGVtRGF0YSB8fCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQpIGZvciB0aGUgZWxlbWVudFxuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSB8fCBbXTtcblx0XHRcdHRtcCA9IHRtcFsgMiBdICYmXG5cdFx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApO1xuXG5cdFx0XHQvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzXG5cdFx0XHRvcmlnQ291bnQgPSBqID0gaGFuZGxlcnMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07XG5cblx0XHRcdFx0aWYgKCAoIG1hcHBlZFR5cGVzIHx8IG9yaWdUeXBlID09PSBoYW5kbGVPYmoub3JpZ1R5cGUgKSAmJlxuXHRcdFx0XHRcdCggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmouZ3VpZCApICYmXG5cdFx0XHRcdFx0KCAhdG1wIHx8IHRtcC50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSAmJlxuXHRcdFx0XHRcdCggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBoYW5kbGVPYmouc2VsZWN0b3IgfHxcblx0XHRcdFx0XHRcdHNlbGVjdG9yID09PSBcIioqXCIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7XG5cdFx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBqLCAxICk7XG5cblx0XHRcdFx0XHRpZiAoIGhhbmRsZU9iai5zZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBzcGVjaWFsLnJlbW92ZSApIHtcblx0XHRcdFx0XHRcdHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0XG5cdFx0XHQvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycylcblx0XHRcdGlmICggb3JpZ0NvdW50ICYmICFoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdGlmICggIXNwZWNpYWwudGVhcmRvd24gfHxcblx0XHRcdFx0XHRzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRhLmhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxldGUgZXZlbnRzWyB0eXBlIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIGRhdGEgYW5kIHRoZSBleHBhbmRvIGlmIGl0J3Mgbm8gbG9uZ2VyIHVzZWRcblx0XHRpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHtcblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJoYW5kbGUgZXZlbnRzXCIgKTtcblx0XHR9XG5cdH0sXG5cblx0ZGlzcGF0Y2g6IGZ1bmN0aW9uKCBuYXRpdmVFdmVudCApIHtcblxuXHRcdHZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaiwgaGFuZGxlclF1ZXVlLFxuXHRcdFx0YXJncyA9IG5ldyBBcnJheSggYXJndW1lbnRzLmxlbmd0aCApLFxuXG5cdFx0XHQvLyBNYWtlIGEgd3JpdGFibGUgalF1ZXJ5LkV2ZW50IGZyb20gdGhlIG5hdGl2ZSBldmVudCBvYmplY3Rcblx0XHRcdGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKSxcblxuXHRcdFx0aGFuZGxlcnMgPSAoXG5cdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IE9iamVjdC5jcmVhdGUoIG51bGwgKVxuXHRcdFx0KVsgZXZlbnQudHlwZSBdIHx8IFtdLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50eXBlIF0gfHwge307XG5cblx0XHQvLyBVc2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudFxuXHRcdGFyZ3NbIDAgXSA9IGV2ZW50O1xuXG5cdFx0Zm9yICggaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRhcmdzWyBpIF0gPSBhcmd1bWVudHNbIGkgXTtcblx0XHR9XG5cblx0XHRldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRoaXM7XG5cblx0XHQvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkXG5cdFx0aWYgKCBzcGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGhhbmRsZXJzXG5cdFx0aGFuZGxlclF1ZXVlID0galF1ZXJ5LmV2ZW50LmhhbmRsZXJzLmNhbGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApO1xuXG5cdFx0Ly8gUnVuIGRlbGVnYXRlcyBmaXJzdDsgdGhleSBtYXkgd2FudCB0byBzdG9wIHByb3BhZ2F0aW9uIGJlbmVhdGggdXNcblx0XHRpID0gMDtcblx0XHR3aGlsZSAoICggbWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07XG5cblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGhhbmRsZU9iaiA9IG1hdGNoZWQuaGFuZGxlcnNbIGorKyBdICkgJiZcblx0XHRcdFx0IWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGV2ZW50IGlzIG5hbWVzcGFjZWQsIHRoZW4gZWFjaCBoYW5kbGVyIGlzIG9ubHkgaW52b2tlZCBpZiBpdCBpc1xuXHRcdFx0XHQvLyBzcGVjaWFsbHkgdW5pdmVyc2FsIG9yIGl0cyBuYW1lc3BhY2VzIGFyZSBhIHN1cGVyc2V0IG9mIHRoZSBldmVudCdzLlxuXHRcdFx0XHRpZiAoICFldmVudC5ybmFtZXNwYWNlIHx8IGhhbmRsZU9iai5uYW1lc3BhY2UgPT09IGZhbHNlIHx8XG5cdFx0XHRcdFx0ZXZlbnQucm5hbWVzcGFjZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7XG5cblx0XHRcdFx0XHRldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7XG5cdFx0XHRcdFx0ZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhO1xuXG5cdFx0XHRcdFx0cmV0ID0gKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSApLmhhbmRsZSB8fFxuXHRcdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIgKS5hcHBseSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7XG5cblx0XHRcdFx0XHRpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGV2ZW50LnJlc3VsdCA9IHJldCApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbCB0aGUgcG9zdERpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZVxuXHRcdGlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7XG5cdFx0XHRzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0aGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgaGFuZGxlcnMgKSB7XG5cdFx0dmFyIGksIGhhbmRsZU9iaiwgc2VsLCBtYXRjaGVkSGFuZGxlcnMsIG1hdGNoZWRTZWxlY3RvcnMsXG5cdFx0XHRoYW5kbGVyUXVldWUgPSBbXSxcblx0XHRcdGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LFxuXHRcdFx0Y3VyID0gZXZlbnQudGFyZ2V0O1xuXG5cdFx0Ly8gRmluZCBkZWxlZ2F0ZSBoYW5kbGVyc1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTlcblx0XHRcdC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICh0cmFjLTEzMTgwKVxuXHRcdFx0Y3VyLm5vZGVUeXBlICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MlxuXHRcdFx0Ly8gU3VwcHJlc3Mgc3BlYy12aW9sYXRpbmcgY2xpY2tzIGluZGljYXRpbmcgYSBub24tcHJpbWFyeSBwb2ludGVyIGJ1dHRvbiAodHJhYy0zODYxKVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnQtdHlwZS1jbGlja1xuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0Ly8gLi4uYnV0IG5vdCBhcnJvdyBrZXkgXCJjbGlja3NcIiBvZiByYWRpbyBpbnB1dHMsIHdoaWNoIGNhbiBoYXZlIGBidXR0b25gIC0xIChnaC0yMzQzKVxuXHRcdFx0ISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGV2ZW50LmJ1dHRvbiA+PSAxICkgKSB7XG5cblx0XHRcdGZvciAoIDsgY3VyICE9PSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkge1xuXG5cdFx0XHRcdC8vIERvbid0IGNoZWNrIG5vbi1lbGVtZW50cyAodHJhYy0xMzIwOClcblx0XHRcdFx0Ly8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQgZWxlbWVudHMgKHRyYWMtNjkxMSwgdHJhYy04MTY1LCB0cmFjLTExMzgyLCB0cmFjLTExNzY0KVxuXHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiAhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgY3VyLmRpc2FibGVkID09PSB0cnVlICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzID0gW107XG5cdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9ycyA9IHt9O1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGkgXTtcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgY29uZmxpY3Qgd2l0aCBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKHRyYWMtMTMyMDMpXG5cdFx0XHRcdFx0XHRzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3IgKyBcIiBcIjtcblxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQgP1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID4gLTEgOlxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggbWF0Y2hlZEhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZWRIYW5kbGVycyB9ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVyc1xuXHRcdGN1ciA9IHRoaXM7XG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogaGFuZGxlcnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGhhbmRsZXJRdWV1ZTtcblx0fSxcblxuXHRhZGRQcm9wOiBmdW5jdGlvbiggbmFtZSwgaG9vayApIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGpRdWVyeS5FdmVudC5wcm90b3R5cGUsIG5hbWUsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cblx0XHRcdGdldDogaXNGdW5jdGlvbiggaG9vayApID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gaG9vayggdGhpcy5vcmlnaW5hbEV2ZW50ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IDpcblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50WyBuYW1lIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlzLCBuYW1lLCB7XG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Zml4OiBmdW5jdGlvbiggb3JpZ2luYWxFdmVudCApIHtcblx0XHRyZXR1cm4gb3JpZ2luYWxFdmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRvcmlnaW5hbEV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTtcblx0fSxcblxuXHRzcGVjaWFsOiB7XG5cdFx0bG9hZDoge1xuXG5cdFx0XHQvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkXG5cdFx0XHRub0J1YmJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0Y2xpY2s6IHtcblxuXHRcdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgdG8gZW5zdXJlIGNvcnJlY3Qgc3RhdGUgZm9yIGNoZWNrYWJsZSBpbnB1dHNcblx0XHRcdHNldHVwOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXG5cdFx0XHRcdFx0ZWwuY2xpY2sgJiYgbm9kZU5hbWUoIGVsLCBcImlucHV0XCIgKSApIHtcblxuXHRcdFx0XHRcdC8vIGRhdGFQcml2LnNldCggZWwsIFwiY2xpY2tcIiwgLi4uIClcblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSxcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxuXHRcdFx0XHQvLyBgfHwgZGF0YWAgaXMgZGVhZCBjb2RlIG1lYW50IG9ubHkgdG8gcHJlc2VydmUgdGhlIHZhcmlhYmxlIHRocm91Z2ggbWluaWZpY2F0aW9uLlxuXHRcdFx0XHR2YXIgZWwgPSB0aGlzIHx8IGRhdGE7XG5cblx0XHRcdFx0Ly8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJpbmcgYSBjbGlja1xuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0sXG5cblx0XHRcdC8vIEZvciBjcm9zcy1icm93c2VyIGNvbnNpc3RlbmN5LCBzdXBwcmVzcyBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3Ncblx0XHRcdC8vIEFsc28gcHJldmVudCBpdCBpZiB3ZSdyZSBjdXJyZW50bHkgaW5zaWRlIGEgbGV2ZXJhZ2VkIG5hdGl2ZS1ldmVudCBzdGFja1xuXHRcdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0XHRcdFx0cmV0dXJuIHJjaGVja2FibGVUeXBlLnRlc3QoIHRhcmdldC50eXBlICkgJiZcblx0XHRcdFx0XHR0YXJnZXQuY2xpY2sgJiYgbm9kZU5hbWUoIHRhcmdldCwgXCJpbnB1dFwiICkgJiZcblx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRhcmdldCwgXCJjbGlja1wiICkgfHxcblx0XHRcdFx0XHRub2RlTmFtZSggdGFyZ2V0LCBcImFcIiApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRiZWZvcmV1bmxvYWQ6IHtcblx0XHRcdHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggMjArXG5cdFx0XHRcdC8vIEZpcmVmb3ggZG9lc24ndCBhbGVydCBpZiB0aGUgcmV0dXJuVmFsdWUgZmllbGQgaXMgbm90IHNldC5cblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdGV2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBldmVudC5yZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIEVuc3VyZSB0aGUgcHJlc2VuY2Ugb2YgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBoYW5kbGVzIG1hbnVhbGx5LXRyaWdnZXJlZFxuLy8gc3ludGhldGljIGV2ZW50cyBieSBpbnRlcnJ1cHRpbmcgcHJvZ3Jlc3MgdW50aWwgcmVpbnZva2VkIGluIHJlc3BvbnNlIHRvXG4vLyAqbmF0aXZlKiBldmVudHMgdGhhdCBpdCBmaXJlcyBkaXJlY3RseSwgZW5zdXJpbmcgdGhhdCBzdGF0ZSBjaGFuZ2VzIGhhdmVcbi8vIGFscmVhZHkgb2NjdXJyZWQgYmVmb3JlIG90aGVyIGxpc3RlbmVycyBhcmUgaW52b2tlZC5cbmZ1bmN0aW9uIGxldmVyYWdlTmF0aXZlKCBlbCwgdHlwZSwgaXNTZXR1cCApIHtcblxuXHQvLyBNaXNzaW5nIGBpc1NldHVwYCBpbmRpY2F0ZXMgYSB0cmlnZ2VyIGNhbGwsIHdoaWNoIG11c3QgZm9yY2Ugc2V0dXAgdGhyb3VnaCBqUXVlcnkuZXZlbnQuYWRkXG5cdGlmICggIWlzU2V0dXAgKSB7XG5cdFx0aWYgKCBkYXRhUHJpdi5nZXQoIGVsLCB0eXBlICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCByZXR1cm5UcnVlICk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlZ2lzdGVyIHRoZSBjb250cm9sbGVyIGFzIGEgc3BlY2lhbCB1bml2ZXJzYWwgaGFuZGxlciBmb3IgYWxsIGV2ZW50IG5hbWVzcGFjZXNcblx0ZGF0YVByaXYuc2V0KCBlbCwgdHlwZSwgZmFsc2UgKTtcblx0alF1ZXJ5LmV2ZW50LmFkZCggZWwsIHR5cGUsIHtcblx0XHRuYW1lc3BhY2U6IGZhbHNlLFxuXHRcdGhhbmRsZXI6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciByZXN1bHQsXG5cdFx0XHRcdHNhdmVkID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdGlmICggKCBldmVudC5pc1RyaWdnZXIgJiAxICkgJiYgdGhpc1sgdHlwZSBdICkge1xuXG5cdFx0XHRcdC8vIEludGVycnVwdCBwcm9jZXNzaW5nIG9mIHRoZSBvdXRlciBzeW50aGV0aWMgLnRyaWdnZXIoKWVkIGV2ZW50XG5cdFx0XHRcdGlmICggIXNhdmVkICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgYXJndW1lbnRzIGZvciB1c2Ugd2hlbiBoYW5kbGluZyB0aGUgaW5uZXIgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdFx0Ly8gVGhlcmUgd2lsbCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IChhbiBldmVudCBvYmplY3QpLCBzbyB0aGlzIGFycmF5XG5cdFx0XHRcdFx0Ly8gd2lsbCBub3QgYmUgY29uZnVzZWQgd2l0aCBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0LlxuXHRcdFx0XHRcdHNhdmVkID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBzYXZlZCApO1xuXG5cdFx0XHRcdFx0Ly8gVHJpZ2dlciB0aGUgbmF0aXZlIGV2ZW50IGFuZCBjYXB0dXJlIGl0cyByZXN1bHRcblx0XHRcdFx0XHR0aGlzWyB0eXBlIF0oKTtcblx0XHRcdFx0XHRyZXN1bHQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIGZhbHNlICk7XG5cblx0XHRcdFx0XHRpZiAoIHNhdmVkICE9PSByZXN1bHQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIENhbmNlbCB0aGUgb3V0ZXIgc3ludGhldGljIGV2ZW50XG5cdFx0XHRcdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoaXMgaXMgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IGZvciBhbiBldmVudCB3aXRoIGEgYnViYmxpbmcgc3Vycm9nYXRlXG5cdFx0XHRcdC8vIChmb2N1cyBvciBibHVyKSwgYXNzdW1lIHRoYXQgdGhlIHN1cnJvZ2F0ZSBhbHJlYWR5IHByb3BhZ2F0ZWQgZnJvbSB0cmlnZ2VyaW5nXG5cdFx0XHRcdC8vIHRoZSBuYXRpdmUgZXZlbnQgYW5kIHByZXZlbnQgdGhhdCBmcm9tIGhhcHBlbmluZyBhZ2FpbiBoZXJlLlxuXHRcdFx0XHQvLyBUaGlzIHRlY2huaWNhbGx5IGdldHMgdGhlIG9yZGVyaW5nIHdyb25nIHcuci50LiB0byBgLnRyaWdnZXIoKWAgKGluIHdoaWNoIHRoZVxuXHRcdFx0XHQvLyBidWJibGluZyBzdXJyb2dhdGUgcHJvcGFnYXRlcyAqYWZ0ZXIqIHRoZSBub24tYnViYmxpbmcgYmFzZSksIGJ1dCB0aGF0IHNlZW1zXG5cdFx0XHRcdC8vIGxlc3MgYmFkIHRoYW4gZHVwbGljYXRpb24uXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fSApLmRlbGVnYXRlVHlwZSApIHtcblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgbmF0aXZlIGV2ZW50IHRyaWdnZXJlZCBhYm92ZSwgZXZlcnl0aGluZyBpcyBub3cgaW4gb3JkZXJcblx0XHRcdC8vIEZpcmUgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IHdpdGggdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggc2F2ZWQgKSB7XG5cblx0XHRcdFx0Ly8gLi4uYW5kIGNhcHR1cmUgdGhlIHJlc3VsdFxuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIGpRdWVyeS5ldmVudC50cmlnZ2VyKFxuXHRcdFx0XHRcdHNhdmVkWyAwIF0sXG5cdFx0XHRcdFx0c2F2ZWQuc2xpY2UoIDEgKSxcblx0XHRcdFx0XHR0aGlzXG5cdFx0XHRcdCkgKTtcblxuXHRcdFx0XHQvLyBBYm9ydCBoYW5kbGluZyBvZiB0aGUgbmF0aXZlIGV2ZW50IGJ5IGFsbCBqUXVlcnkgaGFuZGxlcnMgd2hpbGUgYWxsb3dpbmdcblx0XHRcdFx0Ly8gbmF0aXZlIGhhbmRsZXJzIG9uIHRoZSBzYW1lIGVsZW1lbnQgdG8gcnVuLiBPbiB0YXJnZXQsIHRoaXMgaXMgYWNoaWV2ZWRcblx0XHRcdFx0Ly8gYnkgc3RvcHBpbmcgaW1tZWRpYXRlIHByb3BhZ2F0aW9uIGp1c3Qgb24gdGhlIGpRdWVyeSBldmVudC4gSG93ZXZlcixcblx0XHRcdFx0Ly8gdGhlIG5hdGl2ZSBldmVudCBpcyByZS13cmFwcGVkIGJ5IGEgalF1ZXJ5IG9uZSBvbiBlYWNoIGxldmVsIG9mIHRoZVxuXHRcdFx0XHQvLyBwcm9wYWdhdGlvbiBzbyB0aGUgb25seSB3YXkgdG8gc3RvcCBpdCBmb3IgalF1ZXJ5IGlzIHRvIHN0b3AgaXQgZm9yXG5cdFx0XHRcdC8vIGV2ZXJ5b25lIHZpYSBuYXRpdmUgYHN0b3BQcm9wYWdhdGlvbigpYC4gVGhpcyBpcyBub3QgYSBwcm9ibGVtIGZvclxuXHRcdFx0XHQvLyBmb2N1cy9ibHVyIHdoaWNoIGRvbid0IGJ1YmJsZSwgYnV0IGl0IGRvZXMgYWxzbyBzdG9wIGNsaWNrIG9uIGNoZWNrYm94ZXNcblx0XHRcdFx0Ly8gYW5kIHJhZGlvcy4gV2UgYWNjZXB0IHRoaXMgbGltaXRhdGlvbi5cblx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdGV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH0gKTtcbn1cblxualF1ZXJ5LnJlbW92ZUV2ZW50ID0gZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHtcblxuXHQvLyBUaGlzIFwiaWZcIiBpcyBuZWVkZWQgZm9yIHBsYWluIG9iamVjdHNcblx0aWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0ZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUgKTtcblx0fVxufTtcblxualF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7XG5cblx0Ly8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3JkXG5cdGlmICggISggdGhpcyBpbnN0YW5jZW9mIGpRdWVyeS5FdmVudCApICkge1xuXHRcdHJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBFdmVudCBvYmplY3Rcblx0aWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7XG5cdFx0dGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjO1xuXHRcdHRoaXMudHlwZSA9IHNyYy50eXBlO1xuXG5cdFx0Ly8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWRcblx0XHQvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHNyYy5kZWZhdWx0UHJldmVudGVkIHx8XG5cdFx0XHRcdHNyYy5kZWZhdWx0UHJldmVudGVkID09PSB1bmRlZmluZWQgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHlcblx0XHRcdFx0c3JjLnJldHVyblZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRyZXR1cm5UcnVlIDpcblx0XHRcdHJldHVybkZhbHNlO1xuXG5cdFx0Ly8gQ3JlYXRlIHRhcmdldCBwcm9wZXJ0aWVzXG5cdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDw9NiAtIDcgb25seVxuXHRcdC8vIFRhcmdldCBzaG91bGQgbm90IGJlIGEgdGV4dCBub2RlICh0cmFjLTUwNCwgdHJhYy0xMzE0Mylcblx0XHR0aGlzLnRhcmdldCA9ICggc3JjLnRhcmdldCAmJiBzcmMudGFyZ2V0Lm5vZGVUeXBlID09PSAzICkgP1xuXHRcdFx0c3JjLnRhcmdldC5wYXJlbnROb2RlIDpcblx0XHRcdHNyYy50YXJnZXQ7XG5cblx0XHR0aGlzLmN1cnJlbnRUYXJnZXQgPSBzcmMuY3VycmVudFRhcmdldDtcblx0XHR0aGlzLnJlbGF0ZWRUYXJnZXQgPSBzcmMucmVsYXRlZFRhcmdldDtcblxuXHQvLyBFdmVudCB0eXBlXG5cdH0gZWxzZSB7XG5cdFx0dGhpcy50eXBlID0gc3JjO1xuXHR9XG5cblx0Ly8gUHV0IGV4cGxpY2l0bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRvIHRoZSBldmVudCBvYmplY3Rcblx0aWYgKCBwcm9wcyApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmVcblx0dGhpcy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuXG5cdC8vIE1hcmsgaXQgYXMgZml4ZWRcblx0dGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7XG59O1xuXG4vLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmdcbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAzMDMzMS9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWxcbmpRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBqUXVlcnkuRXZlbnQsXG5cdGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsXG5cdGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc1NpbXVsYXRlZDogZmFsc2UsXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fSxcblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdG9wUHJvcGFnYXRpb24oKTtcblx0fVxufTtcblxuLy8gSW5jbHVkZXMgYWxsIGNvbW1vbiBldmVudCBwcm9wcyBpbmNsdWRpbmcgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnQgc3BlY2lmaWMgcHJvcHNcbmpRdWVyeS5lYWNoKCB7XG5cdGFsdEtleTogdHJ1ZSxcblx0YnViYmxlczogdHJ1ZSxcblx0Y2FuY2VsYWJsZTogdHJ1ZSxcblx0Y2hhbmdlZFRvdWNoZXM6IHRydWUsXG5cdGN0cmxLZXk6IHRydWUsXG5cdGRldGFpbDogdHJ1ZSxcblx0ZXZlbnRQaGFzZTogdHJ1ZSxcblx0bWV0YUtleTogdHJ1ZSxcblx0cGFnZVg6IHRydWUsXG5cdHBhZ2VZOiB0cnVlLFxuXHRzaGlmdEtleTogdHJ1ZSxcblx0dmlldzogdHJ1ZSxcblx0XCJjaGFyXCI6IHRydWUsXG5cdGNvZGU6IHRydWUsXG5cdGNoYXJDb2RlOiB0cnVlLFxuXHRrZXk6IHRydWUsXG5cdGtleUNvZGU6IHRydWUsXG5cdGJ1dHRvbjogdHJ1ZSxcblx0YnV0dG9uczogdHJ1ZSxcblx0Y2xpZW50WDogdHJ1ZSxcblx0Y2xpZW50WTogdHJ1ZSxcblx0b2Zmc2V0WDogdHJ1ZSxcblx0b2Zmc2V0WTogdHJ1ZSxcblx0cG9pbnRlcklkOiB0cnVlLFxuXHRwb2ludGVyVHlwZTogdHJ1ZSxcblx0c2NyZWVuWDogdHJ1ZSxcblx0c2NyZWVuWTogdHJ1ZSxcblx0dGFyZ2V0VG91Y2hlczogdHJ1ZSxcblx0dG9FbGVtZW50OiB0cnVlLFxuXHR0b3VjaGVzOiB0cnVlLFxuXHR3aGljaDogdHJ1ZVxufSwgalF1ZXJ5LmV2ZW50LmFkZFByb3AgKTtcblxualF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIHR5cGUsIGRlbGVnYXRlVHlwZSApIHtcblxuXHRmdW5jdGlvbiBmb2N1c01hcHBlZEhhbmRsZXIoIG5hdGl2ZUV2ZW50ICkge1xuXHRcdGlmICggZG9jdW1lbnQuZG9jdW1lbnRNb2RlICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMStcblx0XHRcdC8vIEF0dGFjaCBhIHNpbmdsZSBmb2N1c2luL2ZvY3Vzb3V0IGhhbmRsZXIgb24gdGhlIGRvY3VtZW50IHdoaWxlIHNvbWVvbmUgd2FudHNcblx0XHRcdC8vIGZvY3VzL2JsdXIuIFRoaXMgaXMgYmVjYXVzZSB0aGUgZm9ybWVyIGFyZSBzeW5jaHJvbm91cyBpbiBJRSB3aGlsZSB0aGUgbGF0dGVyXG5cdFx0XHQvLyBhcmUgYXN5bmMuIEluIG90aGVyIGJyb3dzZXJzLCBhbGwgdGhvc2UgaGFuZGxlcnMgYXJlIGludm9rZWQgc3luY2hyb25vdXNseS5cblxuXHRcdFx0Ly8gYGhhbmRsZWAgZnJvbSBwcml2YXRlIGRhdGEgd291bGQgYWxyZWFkeSB3cmFwIHRoZSBldmVudCwgYnV0IHdlIG5lZWRcblx0XHRcdC8vIHRvIGNoYW5nZSB0aGUgYHR5cGVgIGhlcmUuXG5cdFx0XHR2YXIgaGFuZGxlID0gZGF0YVByaXYuZ2V0KCB0aGlzLCBcImhhbmRsZVwiICksXG5cdFx0XHRcdGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKTtcblx0XHRcdGV2ZW50LnR5cGUgPSBuYXRpdmVFdmVudC50eXBlID09PSBcImZvY3VzaW5cIiA/IFwiZm9jdXNcIiA6IFwiYmx1clwiO1xuXHRcdFx0ZXZlbnQuaXNTaW11bGF0ZWQgPSB0cnVlO1xuXG5cdFx0XHQvLyBGaXJzdCwgaGFuZGxlIGZvY3VzaW4vZm9jdXNvdXRcblx0XHRcdGhhbmRsZSggbmF0aXZlRXZlbnQgKTtcblxuXHRcdFx0Ly8gLi4udGhlbiwgaGFuZGxlIGZvY3VzL2JsdXJcblx0XHRcdC8vXG5cdFx0XHQvLyBmb2N1cy9ibHVyIGRvbid0IGJ1YmJsZSB3aGlsZSBmb2N1c2luL2ZvY3Vzb3V0IGRvOyBzaW11bGF0ZSB0aGUgZm9ybWVyIGJ5IG9ubHlcblx0XHRcdC8vIGludm9raW5nIHRoZSBoYW5kbGVyIGF0IHRoZSBsb3dlciBsZXZlbC5cblx0XHRcdGlmICggZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICkge1xuXG5cdFx0XHRcdC8vIFRoZSBzZXR1cCBwYXJ0IGNhbGxzIGBsZXZlcmFnZU5hdGl2ZWAsIHdoaWNoLCBpbiB0dXJuLCBjYWxsc1xuXHRcdFx0XHQvLyBgalF1ZXJ5LmV2ZW50LmFkZGAsIHNvIGV2ZW50IGhhbmRsZSB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIHNldFxuXHRcdFx0XHQvLyBieSB0aGlzIHBvaW50LlxuXHRcdFx0XHRoYW5kbGUoIGV2ZW50ICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gRm9yIG5vbi1JRSBicm93c2VycywgYXR0YWNoIGEgc2luZ2xlIGNhcHR1cmluZyBoYW5kbGVyIG9uIHRoZSBkb2N1bWVudFxuXHRcdFx0Ly8gd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0LlxuXHRcdFx0alF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBkZWxlZ2F0ZVR5cGUsIG5hdGl2ZUV2ZW50LnRhcmdldCxcblx0XHRcdFx0alF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKSApO1xuXHRcdH1cblx0fVxuXG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gPSB7XG5cblx0XHQvLyBVdGlsaXplIG5hdGl2ZSBldmVudCBpZiBwb3NzaWJsZSBzbyBibHVyL2ZvY3VzIHNlcXVlbmNlIGlzIGNvcnJlY3Rcblx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdHZhciBhdHRhY2hlcztcblxuXHRcdFx0Ly8gQ2xhaW0gdGhlIGZpcnN0IGhhbmRsZXJcblx0XHRcdC8vIGRhdGFQcml2LnNldCggdGhpcywgXCJmb2N1c1wiLCAuLi4gKVxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImJsdXJcIiwgLi4uIClcblx0XHRcdGxldmVyYWdlTmF0aXZlKCB0aGlzLCB0eXBlLCB0cnVlICk7XG5cblx0XHRcdGlmICggZG9jdW1lbnQuZG9jdW1lbnRNb2RlICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMStcblx0XHRcdFx0Ly8gV2UgdXNlIHRoZSBzYW1lIG5hdGl2ZSBoYW5kbGVyIGZvciBmb2N1c2luICYgZm9jdXMgKGFuZCBmb2N1c291dCAmIGJsdXIpXG5cdFx0XHRcdC8vIHNvIHdlIG5lZWQgdG8gY29vcmRpbmF0ZSBzZXR1cCAmIHRlYXJkb3duIHBhcnRzIGJldHdlZW4gdGhvc2UgZXZlbnRzLlxuXHRcdFx0XHQvLyBVc2UgYGRlbGVnYXRlVHlwZWAgYXMgdGhlIGtleSBhcyBgdHlwZWAgaXMgYWxyZWFkeSB1c2VkIGJ5IGBsZXZlcmFnZU5hdGl2ZWAuXG5cdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuZ2V0KCB0aGlzLCBkZWxlZ2F0ZVR5cGUgKTtcblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKCBkZWxlZ2F0ZVR5cGUsIGZvY3VzTWFwcGVkSGFuZGxlciApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgZGVsZWdhdGVUeXBlLCAoIGF0dGFjaGVzIHx8IDAgKSArIDEgKTtcblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0dHJpZ2dlcjogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyXG5cdFx0XHRsZXZlcmFnZU5hdGl2ZSggdGhpcywgdHlwZSApO1xuXG5cdFx0XHQvLyBSZXR1cm4gbm9uLWZhbHNlIHRvIGFsbG93IG5vcm1hbCBldmVudC1wYXRoIHByb3BhZ2F0aW9uXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGF0dGFjaGVzO1xuXG5cdFx0XHRpZiAoIGRvY3VtZW50LmRvY3VtZW50TW9kZSApIHtcblx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIGRlbGVnYXRlVHlwZSApIC0gMTtcblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCBkZWxlZ2F0ZVR5cGUsIGZvY3VzTWFwcGVkSGFuZGxlciApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggdGhpcywgZGVsZWdhdGVUeXBlICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCBkZWxlZ2F0ZVR5cGUsIGF0dGFjaGVzICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGluZGljYXRlIHN0YW5kYXJkIHRlYXJkb3duIHNob3VsZCBiZSBhcHBsaWVkXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gU3VwcHJlc3MgbmF0aXZlIGZvY3VzIG9yIGJsdXIgaWYgd2UncmUgY3VycmVudGx5IGluc2lkZVxuXHRcdC8vIGEgbGV2ZXJhZ2VkIG5hdGl2ZS1ldmVudCBzdGFja1xuXHRcdF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRyZXR1cm4gZGF0YVByaXYuZ2V0KCBldmVudC50YXJnZXQsIHR5cGUgKTtcblx0XHR9LFxuXG5cdFx0ZGVsZWdhdGVUeXBlOiBkZWxlZ2F0ZVR5cGVcblx0fTtcblxuXHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDRcblx0Ly8gRmlyZWZveCBkb2Vzbid0IGhhdmUgZm9jdXMoaW4gfCBvdXQpIGV2ZW50c1xuXHQvLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc4N1xuXHQvL1xuXHQvLyBTdXBwb3J0OiBDaHJvbWUgPD00OCAtIDQ5LCBTYWZhcmkgPD05LjAgLSA5LjFcblx0Ly8gZm9jdXMoaW4gfCBvdXQpIGV2ZW50cyBmaXJlIGFmdGVyIGZvY3VzICYgYmx1ciBldmVudHMsXG5cdC8vIHdoaWNoIGlzIHNwZWMgdmlvbGF0aW9uIC0gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtZm9jdXNldmVudC1ldmVudC1vcmRlclxuXHQvLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ0OTg1N1xuXHQvL1xuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErXG5cdC8vIFRvIHByZXNlcnZlIHJlbGF0aXZlIGZvY3VzaW4vZm9jdXMgJiBmb2N1c291dC9ibHVyIGV2ZW50IG9yZGVyIGd1YXJhbnRlZWQgb24gdGhlIDMueCBicmFuY2gsXG5cdC8vIGF0dGFjaCBhIHNpbmdsZSBoYW5kbGVyIGZvciBib3RoIGV2ZW50cyBpbiBJRS5cblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGRlbGVnYXRlVHlwZSBdID0ge1xuXHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gSGFuZGxlOiByZWd1bGFyIG5vZGVzICh2aWEgYHRoaXMub3duZXJEb2N1bWVudGApLCB3aW5kb3dcblx0XHRcdC8vICh2aWEgYHRoaXMuZG9jdW1lbnRgKSAmIGRvY3VtZW50ICh2aWEgYHRoaXNgKS5cblx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcy5kb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRkYXRhSG9sZGVyID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlID8gdGhpcyA6IGRvYyxcblx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5nZXQoIGRhdGFIb2xkZXIsIGRlbGVnYXRlVHlwZSApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErXG5cdFx0XHQvLyBXZSB1c2UgdGhlIHNhbWUgbmF0aXZlIGhhbmRsZXIgZm9yIGZvY3VzaW4gJiBmb2N1cyAoYW5kIGZvY3Vzb3V0ICYgYmx1cilcblx0XHRcdC8vIHNvIHdlIG5lZWQgdG8gY29vcmRpbmF0ZSBzZXR1cCAmIHRlYXJkb3duIHBhcnRzIGJldHdlZW4gdGhvc2UgZXZlbnRzLlxuXHRcdFx0Ly8gVXNlIGBkZWxlZ2F0ZVR5cGVgIGFzIHRoZSBrZXkgYXMgYHR5cGVgIGlzIGFscmVhZHkgdXNlZCBieSBgbGV2ZXJhZ2VOYXRpdmVgLlxuXHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdGlmICggZG9jdW1lbnQuZG9jdW1lbnRNb2RlICkge1xuXHRcdFx0XHRcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lciggZGVsZWdhdGVUeXBlLCBmb2N1c01hcHBlZEhhbmRsZXIgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkb2MuYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZm9jdXNNYXBwZWRIYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRhdGFQcml2LnNldCggZGF0YUhvbGRlciwgZGVsZWdhdGVUeXBlLCAoIGF0dGFjaGVzIHx8IDAgKSArIDEgKTtcblx0XHR9LFxuXHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcy5kb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRkYXRhSG9sZGVyID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlID8gdGhpcyA6IGRvYyxcblx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5nZXQoIGRhdGFIb2xkZXIsIGRlbGVnYXRlVHlwZSApIC0gMTtcblxuXHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdGlmICggZG9jdW1lbnQuZG9jdW1lbnRNb2RlICkge1xuXHRcdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lciggZGVsZWdhdGVUeXBlLCBmb2N1c01hcHBlZEhhbmRsZXIgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgZm9jdXNNYXBwZWRIYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkYXRhSG9sZGVyLCBkZWxlZ2F0ZVR5cGUgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRhdGFQcml2LnNldCggZGF0YUhvbGRlciwgZGVsZWdhdGVUeXBlLCBhdHRhY2hlcyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn0gKTtcblxuLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzXG4vLyBzbyB0aGF0IGV2ZW50IGRlbGVnYXRpb24gd29ya3MgaW4galF1ZXJ5LlxuLy8gRG8gdGhlIHNhbWUgZm9yIHBvaW50ZXJlbnRlci9wb2ludGVybGVhdmUgYW5kIHBvaW50ZXJvdmVyL3BvaW50ZXJvdXRcbi8vXG4vLyBTdXBwb3J0OiBTYWZhcmkgNyBvbmx5XG4vLyBTYWZhcmkgc2VuZHMgbW91c2VlbnRlciB0b28gb2Z0ZW47IHNlZTpcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ3MDI1OFxuLy8gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYnVnIChpdCBleGlzdGVkIGluIG9sZGVyIENocm9tZSB2ZXJzaW9ucyBhcyB3ZWxsKS5cbmpRdWVyeS5lYWNoKCB7XG5cdG1vdXNlZW50ZXI6IFwibW91c2VvdmVyXCIsXG5cdG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIixcblx0cG9pbnRlcmVudGVyOiBcInBvaW50ZXJvdmVyXCIsXG5cdHBvaW50ZXJsZWF2ZTogXCJwb2ludGVyb3V0XCJcbn0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7XG5cdFx0ZGVsZWdhdGVUeXBlOiBmaXgsXG5cdFx0YmluZFR5cGU6IGZpeCxcblxuXHRcdGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHJldCxcblx0XHRcdFx0dGFyZ2V0ID0gdGhpcyxcblx0XHRcdFx0cmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsXG5cdFx0XHRcdGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iajtcblxuXHRcdFx0Ly8gRm9yIG1vdXNlZW50ZXIvbGVhdmUgY2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC5cblx0XHRcdC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJyb3dzZXIgd2luZG93XG5cdFx0XHRpZiAoICFyZWxhdGVkIHx8ICggcmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApICkgKSB7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7XG5cdFx0XHRcdHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGZpeDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0b246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHRvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApO1xuXHR9LFxuXHRvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkge1xuXHRcdHZhciBoYW5kbGVPYmosIHR5cGU7XG5cdFx0aWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7XG5cblx0XHRcdC8vICggZXZlbnQgKSAgZGlzcGF0Y2hlZCBqUXVlcnkuRXZlbnRcblx0XHRcdGhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9iajtcblx0XHRcdGpRdWVyeSggdHlwZXMuZGVsZWdhdGVUYXJnZXQgKS5vZmYoXG5cdFx0XHRcdGhhbmRsZU9iai5uYW1lc3BhY2UgP1xuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSArIFwiLlwiICsgaGFuZGxlT2JqLm5hbWVzcGFjZSA6XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlLFxuXHRcdFx0XHRoYW5kbGVPYmouc2VsZWN0b3IsXG5cdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0gKVxuXHRcdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdFx0dGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMgWywgZm5dIClcblx0XHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIHR5cGVzLCBmbiwgc2VsZWN0b3IgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG52YXJcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEsIEVkZ2UgMTIgLSAxMyBvbmx5XG5cdC8vIEluIElFL0VkZ2UgdXNpbmcgcmVnZXggZ3JvdXBzIGhlcmUgY2F1c2VzIHNldmVyZSBzbG93ZG93bnMuXG5cdC8vIFNlZSBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzE3MzY1MTIvXG5cdHJub0lubmVyaHRtbCA9IC88c2NyaXB0fDxzdHlsZXw8bGluay9pLFxuXG5cdC8vIGNoZWNrZWQ9XCJjaGVja2VkXCIgb3IgY2hlY2tlZFxuXHRyY2hlY2tlZCA9IC9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2ksXG5cblx0cmNsZWFuU2NyaXB0ID0gL15cXHMqPCFcXFtDREFUQVxcW3xcXF1cXF0+XFxzKiQvZztcblxuLy8gUHJlZmVyIGEgdGJvZHkgb3ZlciBpdHMgcGFyZW50IHRhYmxlIGZvciBjb250YWluaW5nIG5ldyByb3dzXG5mdW5jdGlvbiBtYW5pcHVsYXRpb25UYXJnZXQoIGVsZW0sIGNvbnRlbnQgKSB7XG5cdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGFibGVcIiApICYmXG5cdFx0bm9kZU5hbWUoIGNvbnRlbnQubm9kZVR5cGUgIT09IDExID8gY29udGVudCA6IGNvbnRlbnQuZmlyc3RDaGlsZCwgXCJ0clwiICkgKSB7XG5cblx0XHRyZXR1cm4galF1ZXJ5KCBlbGVtICkuY2hpbGRyZW4oIFwidGJvZHlcIiApWyAwIF0gfHwgZWxlbTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG4vLyBSZXBsYWNlL3Jlc3RvcmUgdGhlIHR5cGUgYXR0cmlidXRlIG9mIHNjcmlwdCBlbGVtZW50cyBmb3Igc2FmZSBET00gbWFuaXB1bGF0aW9uXG5mdW5jdGlvbiBkaXNhYmxlU2NyaXB0KCBlbGVtICkge1xuXHRlbGVtLnR5cGUgPSAoIGVsZW0uZ2V0QXR0cmlidXRlKCBcInR5cGVcIiApICE9PSBudWxsICkgKyBcIi9cIiArIGVsZW0udHlwZTtcblx0cmV0dXJuIGVsZW07XG59XG5mdW5jdGlvbiByZXN0b3JlU2NyaXB0KCBlbGVtICkge1xuXHRpZiAoICggZWxlbS50eXBlIHx8IFwiXCIgKS5zbGljZSggMCwgNSApID09PSBcInRydWUvXCIgKSB7XG5cdFx0ZWxlbS50eXBlID0gZWxlbS50eXBlLnNsaWNlKCA1ICk7XG5cdH0gZWxzZSB7XG5cdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIFwidHlwZVwiICk7XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHtcblx0dmFyIGksIGwsIHR5cGUsIHBkYXRhT2xkLCB1ZGF0YU9sZCwgdWRhdGFDdXIsIGV2ZW50cztcblxuXHRpZiAoIGRlc3Qubm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gMS4gQ29weSBwcml2YXRlIGRhdGE6IGV2ZW50cywgaGFuZGxlcnMsIGV0Yy5cblx0aWYgKCBkYXRhUHJpdi5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHRwZGF0YU9sZCA9IGRhdGFQcml2LmdldCggc3JjICk7XG5cdFx0ZXZlbnRzID0gcGRhdGFPbGQuZXZlbnRzO1xuXG5cdFx0aWYgKCBldmVudHMgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGRlc3QsIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cblx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBkZXN0LCB0eXBlLCBldmVudHNbIHR5cGUgXVsgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyAyLiBDb3B5IHVzZXIgZGF0YVxuXHRpZiAoIGRhdGFVc2VyLmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHVkYXRhT2xkID0gZGF0YVVzZXIuYWNjZXNzKCBzcmMgKTtcblx0XHR1ZGF0YUN1ciA9IGpRdWVyeS5leHRlbmQoIHt9LCB1ZGF0YU9sZCApO1xuXG5cdFx0ZGF0YVVzZXIuc2V0KCBkZXN0LCB1ZGF0YUN1ciApO1xuXHR9XG59XG5cbi8vIEZpeCBJRSBidWdzLCBzZWUgc3VwcG9ydCB0ZXN0c1xuZnVuY3Rpb24gZml4SW5wdXQoIHNyYywgZGVzdCApIHtcblx0dmFyIG5vZGVOYW1lID0gZGVzdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdC8vIEZhaWxzIHRvIHBlcnNpc3QgdGhlIGNoZWNrZWQgc3RhdGUgb2YgYSBjbG9uZWQgY2hlY2tib3ggb3IgcmFkaW8gYnV0dG9uLlxuXHRpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgcmNoZWNrYWJsZVR5cGUudGVzdCggc3JjLnR5cGUgKSApIHtcblx0XHRkZXN0LmNoZWNrZWQgPSBzcmMuY2hlY2tlZDtcblxuXHQvLyBGYWlscyB0byByZXR1cm4gdGhlIHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZGVmYXVsdCBzZWxlY3RlZCBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9uc1xuXHR9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5vZGVOYW1lID09PSBcInRleHRhcmVhXCIgKSB7XG5cdFx0ZGVzdC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGRvbU1hbmlwKCBjb2xsZWN0aW9uLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApIHtcblxuXHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdGFyZ3MgPSBmbGF0KCBhcmdzICk7XG5cblx0dmFyIGZyYWdtZW50LCBmaXJzdCwgc2NyaXB0cywgaGFzU2NyaXB0cywgbm9kZSwgZG9jLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBjb2xsZWN0aW9uLmxlbmd0aCxcblx0XHRpTm9DbG9uZSA9IGwgLSAxLFxuXHRcdHZhbHVlID0gYXJnc1sgMCBdLFxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0Ly8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNvbnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0XG5cdGlmICggdmFsdWVJc0Z1bmN0aW9uIHx8XG5cdFx0XHQoIGwgPiAxICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc3VwcG9ydC5jaGVja0Nsb25lICYmIHJjaGVja2VkLnRlc3QoIHZhbHVlICkgKSApIHtcblx0XHRyZXR1cm4gY29sbGVjdGlvbi5lYWNoKCBmdW5jdGlvbiggaW5kZXggKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGNvbGxlY3Rpb24uZXEoIGluZGV4ICk7XG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0YXJnc1sgMCBdID0gdmFsdWUuY2FsbCggdGhpcywgaW5kZXgsIHNlbGYuaHRtbCgpICk7XG5cdFx0XHR9XG5cdFx0XHRkb21NYW5pcCggc2VsZiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRpZiAoIGwgKSB7XG5cdFx0ZnJhZ21lbnQgPSBidWlsZEZyYWdtZW50KCBhcmdzLCBjb2xsZWN0aW9uWyAwIF0ub3duZXJEb2N1bWVudCwgZmFsc2UsIGNvbGxlY3Rpb24sIGlnbm9yZWQgKTtcblx0XHRmaXJzdCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICkge1xuXHRcdFx0ZnJhZ21lbnQgPSBmaXJzdDtcblx0XHR9XG5cblx0XHQvLyBSZXF1aXJlIGVpdGhlciBuZXcgY29udGVudCBvciBhbiBpbnRlcmVzdCBpbiBpZ25vcmVkIGVsZW1lbnRzIHRvIGludm9rZSB0aGUgY2FsbGJhY2tcblx0XHRpZiAoIGZpcnN0IHx8IGlnbm9yZWQgKSB7XG5cdFx0XHRzY3JpcHRzID0galF1ZXJ5Lm1hcCggZ2V0QWxsKCBmcmFnbWVudCwgXCJzY3JpcHRcIiApLCBkaXNhYmxlU2NyaXB0ICk7XG5cdFx0XHRoYXNTY3JpcHRzID0gc2NyaXB0cy5sZW5ndGg7XG5cblx0XHRcdC8vIFVzZSB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgZm9yIHRoZSBsYXN0IGl0ZW1cblx0XHRcdC8vIGluc3RlYWQgb2YgdGhlIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cFxuXHRcdFx0Ly8gYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKHRyYWMtODA3MCkuXG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdG5vZGUgPSBmcmFnbWVudDtcblxuXHRcdFx0XHRpZiAoIGkgIT09IGlOb0Nsb25lICkge1xuXHRcdFx0XHRcdG5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTtcblxuXHRcdFx0XHRcdC8vIEtlZXAgcmVmZXJlbmNlcyB0byBjbG9uZWQgc2NyaXB0cyBmb3IgbGF0ZXIgcmVzdG9yYXRpb25cblx0XHRcdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwoIGNvbGxlY3Rpb25bIGkgXSwgbm9kZSwgaSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cdFx0XHRcdGRvYyA9IHNjcmlwdHNbIHNjcmlwdHMubGVuZ3RoIC0gMSBdLm93bmVyRG9jdW1lbnQ7XG5cblx0XHRcdFx0Ly8gUmUtZW5hYmxlIHNjcmlwdHNcblx0XHRcdFx0alF1ZXJ5Lm1hcCggc2NyaXB0cywgcmVzdG9yZVNjcmlwdCApO1xuXG5cdFx0XHRcdC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb25cblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IHNjcmlwdHNbIGkgXTtcblx0XHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCBcIlwiICkgJiZcblx0XHRcdFx0XHRcdCFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUsIFwiZ2xvYmFsRXZhbFwiICkgJiZcblx0XHRcdFx0XHRcdGpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7XG5cblx0XHRcdFx0XHRcdGlmICggbm9kZS5zcmMgJiYgKCBub2RlLnR5cGUgfHwgXCJcIiApLnRvTG93ZXJDYXNlKCkgICE9PSBcIm1vZHVsZVwiICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsIEFKQVggZGVwZW5kZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5Ll9ldmFsVXJsICYmICFub2RlLm5vTW9kdWxlICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5fZXZhbFVybCggbm9kZS5zcmMsIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5vbmNlOiBub2RlLm5vbmNlIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCBcIm5vbmNlXCIgKVxuXHRcdFx0XHRcdFx0XHRcdH0sIGRvYyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFVud3JhcCBhIENEQVRBIHNlY3Rpb24gY29udGFpbmluZyBzY3JpcHQgY29udGVudHMuIFRoaXMgc2hvdWxkbid0IGJlXG5cdFx0XHRcdFx0XHRcdC8vIG5lZWRlZCBhcyBpbiBYTUwgZG9jdW1lbnRzIHRoZXkncmUgYWxyZWFkeSBub3QgdmlzaWJsZSB3aGVuXG5cdFx0XHRcdFx0XHRcdC8vIGluc3BlY3RpbmcgZWxlbWVudCBjb250ZW50cyBhbmQgaW4gSFRNTCBkb2N1bWVudHMgdGhleSBoYXZlIG5vXG5cdFx0XHRcdFx0XHRcdC8vIG1lYW5pbmcgYnV0IHdlJ3JlIHByZXNlcnZpbmcgdGhhdCBsb2dpYyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5cdFx0XHRcdFx0XHRcdC8vIFRoaXMgd2lsbCBiZSByZW1vdmVkIGNvbXBsZXRlbHkgaW4gNC4wLiBTZWUgZ2gtNDkwNC5cblx0XHRcdFx0XHRcdFx0RE9NRXZhbCggbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKCByY2xlYW5TY3JpcHQsIFwiXCIgKSwgbm9kZSwgZG9jICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNvbGxlY3Rpb247XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSggZWxlbSwgc2VsZWN0b3IsIGtlZXBEYXRhICkge1xuXHR2YXIgbm9kZSxcblx0XHRub2RlcyA9IHNlbGVjdG9yID8galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIGVsZW0gKSA6IGVsZW0sXG5cdFx0aSA9IDA7XG5cblx0Zm9yICggOyAoIG5vZGUgPSBub2Rlc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdGlmICggIWtlZXBEYXRhICYmIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIG5vZGUgKSApO1xuXHRcdH1cblxuXHRcdGlmICggbm9kZS5wYXJlbnROb2RlICkge1xuXHRcdFx0aWYgKCBrZWVwRGF0YSAmJiBpc0F0dGFjaGVkKCBub2RlICkgKSB7XG5cdFx0XHRcdHNldEdsb2JhbEV2YWwoIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHR9XG5cdFx0XHRub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5vZGUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRodG1sUHJlZmlsdGVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRyZXR1cm4gaHRtbDtcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGVsZW0sIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdHZhciBpLCBsLCBzcmNFbGVtZW50cywgZGVzdEVsZW1lbnRzLFxuXHRcdFx0Y2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApLFxuXHRcdFx0aW5QYWdlID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gRml4IElFIGNsb25pbmcgaXNzdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCAmJiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMTEgKSAmJlxuXHRcdFx0XHQhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIFdlIGVzY2hldyBqUXVlcnkjZmluZCBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOlxuXHRcdFx0Ly8gaHR0cHM6Ly9qc3BlcmYuY29tL2dldGFsbC12cy1zaXp6bGUvMlxuXHRcdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApO1xuXHRcdFx0c3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTtcblxuXHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZpeElucHV0KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmVcblx0XHRpZiAoIGRhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0XHRzcmNFbGVtZW50cyA9IHNyY0VsZW1lbnRzIHx8IGdldEFsbCggZWxlbSApO1xuXHRcdFx0XHRkZXN0RWxlbWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKCBjbG9uZSApO1xuXG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGNsb25lQ29weUV2ZW50KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbG9uZUNvcHlFdmVudCggZWxlbSwgY2xvbmUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSwgXCJzY3JpcHRcIiApO1xuXHRcdGlmICggZGVzdEVsZW1lbnRzLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCBkZXN0RWxlbWVudHMsICFpblBhZ2UgJiYgZ2V0QWxsKCBlbGVtLCBcInNjcmlwdFwiICkgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXRcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5cblx0Y2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cdFx0dmFyIGRhdGEsIGVsZW0sIHR5cGUsXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9PSB1bmRlZmluZWQ7IGkrKyApIHtcblx0XHRcdGlmICggYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0XHRpZiAoICggZGF0YSA9IGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSApICkge1xuXHRcdFx0XHRcdGlmICggZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZFxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yICk7XG5cdH0sXG5cblx0dGV4dDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnRleHQoIHRoaXMgKSA6XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0LmFwcGVuZENoaWxkKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHByZXBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoIGVsZW0sIHRhcmdldC5maXJzdENoaWxkICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGJlZm9yZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YWZ0ZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSB0aGlzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gUHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXNcblx0XHRcdFx0ZWxlbS50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzO1xuXHRcdGRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50cztcblxuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF0gfHwge30sXG5cdFx0XHRcdGkgPSAwLFxuXHRcdFx0XHRsID0gdGhpcy5sZW5ndGg7XG5cblx0XHRcdGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pbm5lckhUTUw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUxcblx0XHRcdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJlxuXHRcdFx0XHQhd3JhcE1hcFsgKCBydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpIF0gKSB7XG5cblx0XHRcdFx0dmFsdWUgPSBqUXVlcnkuaHRtbFByZWZpbHRlciggdmFsdWUgKTtcblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRcdGVsZW0gPSB0aGlzWyBpIF0gfHwge307XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblx0XHRcdFx0XHRcdFx0ZWxlbS5pbm5lckhUTUwgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtID0gMDtcblxuXHRcdFx0XHQvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2Rcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7XG5cdFx0XHR9XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRyZXBsYWNlV2l0aDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGlnbm9yZWQgPSBbXTtcblxuXHRcdC8vIE1ha2UgdGhlIGNoYW5nZXMsIHJlcGxhY2luZyBlYWNoIG5vbi1pZ25vcmVkIGNvbnRleHQgZWxlbWVudCB3aXRoIHRoZSBuZXcgY29udGVudFxuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG5cblx0XHRcdGlmICggalF1ZXJ5LmluQXJyYXkoIHRoaXMsIGlnbm9yZWQgKSA8IDAgKSB7XG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggdGhpcyApICk7XG5cdFx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRcdHBhcmVudC5yZXBsYWNlQ2hpbGQoIGVsZW0sIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gRm9yY2UgY2FsbGJhY2sgaW52b2NhdGlvblxuXHRcdH0sIGlnbm9yZWQgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCgge1xuXHRhcHBlbmRUbzogXCJhcHBlbmRcIixcblx0cHJlcGVuZFRvOiBcInByZXBlbmRcIixcblx0aW5zZXJ0QmVmb3JlOiBcImJlZm9yZVwiLFxuXHRpbnNlcnRBZnRlcjogXCJhZnRlclwiLFxuXHRyZXBsYWNlQWxsOiBcInJlcGxhY2VXaXRoXCJcbn0sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5hbCApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGVsZW1zLFxuXHRcdFx0cmV0ID0gW10sXG5cdFx0XHRpbnNlcnQgPSBqUXVlcnkoIHNlbGVjdG9yICksXG5cdFx0XHRsYXN0ID0gaW5zZXJ0Lmxlbmd0aCAtIDEsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgaSA8PSBsYXN0OyBpKysgKSB7XG5cdFx0XHRlbGVtcyA9IGkgPT09IGxhc3QgPyB0aGlzIDogdGhpcy5jbG9uZSggdHJ1ZSApO1xuXHRcdFx0alF1ZXJ5KCBpbnNlcnRbIGkgXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdC8vIC5nZXQoKSBiZWNhdXNlIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdHB1c2guYXBwbHkoIHJldCwgZWxlbXMuZ2V0KCkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCApO1xuXHR9O1xufSApO1xudmFyIHJudW1ub25weCA9IG5ldyBSZWdFeHAoIFwiXihcIiArIHBudW0gKyBcIikoPyFweClbYS16JV0rJFwiLCBcImlcIiApO1xuXG52YXIgcmN1c3RvbVByb3AgPSAvXi0tLztcblxuXG52YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHksIEZpcmVmb3ggPD0zMCAodHJhYy0xNTA5OCwgdHJhYy0xNDE1MClcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcblx0XHQvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRocm91Z2ggXCJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlXCJcblx0XHR2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcblxuXHRcdGlmICggIXZpZXcgfHwgIXZpZXcub3BlbmVyICkge1xuXHRcdFx0dmlldyA9IHdpbmRvdztcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7XG5cdH07XG5cbnZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrICkge1xuXHR2YXIgcmV0LCBuYW1lLFxuXHRcdG9sZCA9IHt9O1xuXG5cdC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0b2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdO1xuXHR9XG5cblx0cmV0ID0gY2FsbGJhY2suY2FsbCggZWxlbSApO1xuXG5cdC8vIFJldmVydCB0aGUgb2xkIHZhbHVlc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufTtcblxuXG52YXIgcmJveFN0eWxlID0gbmV3IFJlZ0V4cCggY3NzRXhwYW5kLmpvaW4oIFwifFwiICksIFwiaVwiICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXG5cdC8vIEV4ZWN1dGluZyBib3RoIHBpeGVsUG9zaXRpb24gJiBib3hTaXppbmdSZWxpYWJsZSB0ZXN0cyByZXF1aXJlIG9ubHkgb25lIGxheW91dFxuXHQvLyBzbyB0aGV5J3JlIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSB0aGUgc2Vjb25kIGNvbXB1dGF0aW9uLlxuXHRmdW5jdGlvbiBjb21wdXRlU3R5bGVUZXN0cygpIHtcblxuXHRcdC8vIFRoaXMgaXMgYSBzaW5nbGV0b24sIHdlIG5lZWQgdG8gZXhlY3V0ZSBpdCBvbmx5IG9uY2Vcblx0XHRpZiAoICFkaXYgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDtcIiArXG5cdFx0XHRcIm1hcmdpbi10b3A6MXB4O3BhZGRpbmc6MDtib3JkZXI6MFwiO1xuXHRcdGRpdi5zdHlsZS5jc3NUZXh0ID1cblx0XHRcdFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO1wiICtcblx0XHRcdFwibWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDtcIiArXG5cdFx0XHRcIndpZHRoOjYwJTt0b3A6MSVcIjtcblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApLmFwcGVuZENoaWxkKCBkaXYgKTtcblxuXHRcdHZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTtcblx0XHRwaXhlbFBvc2l0aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSBcIjElXCI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBGaXJlZm94IDw9MyAtIDQ0XG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5tYXJnaW5MZWZ0ICkgPT09IDEyO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgU2FmYXJpIDw9OS4xIC0gMTAuMSwgaU9TIDw9Ny4wIC0gOS4zXG5cdFx0Ly8gU29tZSBzdHlsZXMgY29tZSBiYWNrIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkbid0XG5cdFx0ZGl2LnN0eWxlLnJpZ2h0ID0gXCI2MCVcIjtcblx0XHRwaXhlbEJveFN0eWxlc1ZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUucmlnaHQgKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHRcdC8vIERldGVjdCBtaXNyZXBvcnRpbmcgb2YgY29udGVudCBkaW1lbnNpb25zIGZvciBib3gtc2l6aW5nOmJvcmRlci1ib3ggZWxlbWVudHNcblx0XHRib3hTaXppbmdSZWxpYWJsZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUud2lkdGggKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHQvLyBEZXRlY3Qgb3ZlcmZsb3c6c2Nyb2xsIHNjcmV3aW5lc3MgKGdoLTM2OTkpXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NjRcblx0XHQvLyBEb24ndCBnZXQgdHJpY2tlZCB3aGVuIHpvb20gYWZmZWN0cyBvZmZzZXRXaWR0aCAoZ2gtNDAyOSlcblx0XHRkaXYuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdFx0c2Nyb2xsYm94U2l6ZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2Lm9mZnNldFdpZHRoIC8gMyApID09PSAxMjtcblxuXHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7XG5cblx0XHQvLyBOdWxsaWZ5IHRoZSBkaXYgc28gaXQgd291bGRuJ3QgYmUgc3RvcmVkIGluIHRoZSBtZW1vcnkgYW5kXG5cdFx0Ly8gaXQgd2lsbCBhbHNvIGJlIGEgc2lnbiB0aGF0IGNoZWNrcyBhbHJlYWR5IHBlcmZvcm1lZFxuXHRcdGRpdiA9IG51bGw7XG5cdH1cblxuXHRmdW5jdGlvbiByb3VuZFBpeGVsTWVhc3VyZXMoIG1lYXN1cmUgKSB7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQoIHBhcnNlRmxvYXQoIG1lYXN1cmUgKSApO1xuXHR9XG5cblx0dmFyIHBpeGVsUG9zaXRpb25WYWwsIGJveFNpemluZ1JlbGlhYmxlVmFsLCBzY3JvbGxib3hTaXplVmFsLCBwaXhlbEJveFN0eWxlc1ZhbCxcblx0XHRyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCwgcmVsaWFibGVNYXJnaW5MZWZ0VmFsLFxuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSxcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0Ly8gRmluaXNoIGVhcmx5IGluIGxpbWl0ZWQgKG5vbi1icm93c2VyKSBlbnZpcm9ubWVudHNcblx0aWYgKCAhZGl2LnN0eWxlICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0Ly8gU3R5bGUgb2YgY2xvbmVkIGVsZW1lbnQgYWZmZWN0cyBzb3VyY2UgZWxlbWVudCBjbG9uZWQgKHRyYWMtODkwOClcblx0ZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJjb250ZW50LWJveFwiO1xuXHRkaXYuY2xvbmVOb2RlKCB0cnVlICkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcIlwiO1xuXHRzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gXCJjb250ZW50LWJveFwiO1xuXG5cdGpRdWVyeS5leHRlbmQoIHN1cHBvcnQsIHtcblx0XHRib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIGJveFNpemluZ1JlbGlhYmxlVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxCb3hTdHlsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbEJveFN0eWxlc1ZhbDtcblx0XHR9LFxuXHRcdHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbFBvc2l0aW9uVmFsO1xuXHRcdH0sXG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0VmFsO1xuXHRcdH0sXG5cdFx0c2Nyb2xsYm94U2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHNjcm9sbGJveFNpemVWYWw7XG5cdFx0fSxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTUgLSAxOCtcblx0XHQvLyBJRS9FZGdlIG1pc3JlcG9ydCBgZ2V0Q29tcHV0ZWRTdHlsZWAgb2YgdGFibGUgcm93cyB3aXRoIHdpZHRoL2hlaWdodFxuXHRcdC8vIHNldCBpbiBDU1Mgd2hpbGUgYG9mZnNldCpgIHByb3BlcnRpZXMgcmVwb3J0IGNvcnJlY3QgdmFsdWVzLlxuXHRcdC8vIEJlaGF2aW9yIGluIElFIDkgaXMgbW9yZSBzdWJ0bGUgdGhhbiBpbiBuZXdlciB2ZXJzaW9ucyAmIGl0IHBhc3Nlc1xuXHRcdC8vIHNvbWUgdmVyc2lvbnMgb2YgdGhpcyB0ZXN0OyBtYWtlIHN1cmUgbm90IHRvIG1ha2UgaXQgcGFzcyB0aGVyZSFcblx0XHQvL1xuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNzArXG5cdFx0Ly8gT25seSBGaXJlZm94IGluY2x1ZGVzIGJvcmRlciB3aWR0aHNcblx0XHQvLyBpbiBjb21wdXRlZCBkaW1lbnNpb25zLiAoZ2gtNDUyOSlcblx0XHRyZWxpYWJsZVRyRGltZW5zaW9uczogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdGFibGUsIHRyLCB0ckNoaWxkLCB0clN0eWxlO1xuXHRcdFx0aWYgKCByZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwidGFibGVcIiApO1xuXHRcdFx0XHR0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwidHJcIiApO1xuXHRcdFx0XHR0ckNoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdFx0XHRcdHRhYmxlLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlXCI7XG5cdFx0XHRcdHRyLnN0eWxlLmNzc1RleHQgPSBcImJveC1zaXppbmc6Y29udGVudC1ib3g7Ym9yZGVyOjFweCBzb2xpZFwiO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA4Nitcblx0XHRcdFx0Ly8gSGVpZ2h0IHNldCB0aHJvdWdoIGNzc1RleHQgZG9lcyBub3QgZ2V0IGFwcGxpZWQuXG5cdFx0XHRcdC8vIENvbXB1dGVkIGhlaWdodCB0aGVuIGNvbWVzIGJhY2sgYXMgMC5cblx0XHRcdFx0dHIuc3R5bGUuaGVpZ2h0ID0gXCIxcHhcIjtcblx0XHRcdFx0dHJDaGlsZC5zdHlsZS5oZWlnaHQgPSBcIjlweFwiO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgOCBDaHJvbWUgODYrXG5cdFx0XHRcdC8vIEluIG91ciBib2R5QmFja2dyb3VuZC5odG1sIGlmcmFtZSxcblx0XHRcdFx0Ly8gZGlzcGxheSBmb3IgYWxsIGRpdiBlbGVtZW50cyBpcyBzZXQgdG8gXCJpbmxpbmVcIixcblx0XHRcdFx0Ly8gd2hpY2ggY2F1c2VzIGEgcHJvYmxlbSBvbmx5IGluIEFuZHJvaWQgOCBDaHJvbWUgODYuXG5cdFx0XHRcdC8vIEVuc3VyaW5nIHRoZSBkaXYgaXMgYGRpc3BsYXk6IGJsb2NrYFxuXHRcdFx0XHQvLyBnZXRzIGFyb3VuZCB0aGlzIGlzc3VlLlxuXHRcdFx0XHR0ckNoaWxkLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cblx0XHRcdFx0ZG9jdW1lbnRFbGVtZW50XG5cdFx0XHRcdFx0LmFwcGVuZENoaWxkKCB0YWJsZSApXG5cdFx0XHRcdFx0LmFwcGVuZENoaWxkKCB0ciApXG5cdFx0XHRcdFx0LmFwcGVuZENoaWxkKCB0ckNoaWxkICk7XG5cblx0XHRcdFx0dHJTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCB0ciApO1xuXHRcdFx0XHRyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCA9ICggcGFyc2VJbnQoIHRyU3R5bGUuaGVpZ2h0LCAxMCApICtcblx0XHRcdFx0XHRwYXJzZUludCggdHJTdHlsZS5ib3JkZXJUb3BXaWR0aCwgMTAgKSArXG5cdFx0XHRcdFx0cGFyc2VJbnQoIHRyU3R5bGUuYm9yZGVyQm90dG9tV2lkdGgsIDEwICkgKSA9PT0gdHIub2Zmc2V0SGVpZ2h0O1xuXG5cdFx0XHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggdGFibGUgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZWxpYWJsZVRyRGltZW5zaW9uc1ZhbDtcblx0XHR9XG5cdH0gKTtcbn0gKSgpO1xuXG5cbmZ1bmN0aW9uIGN1ckNTUyggZWxlbSwgbmFtZSwgY29tcHV0ZWQgKSB7XG5cdHZhciB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLCByZXQsXG5cdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApLFxuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA1MStcblx0XHQvLyBSZXRyaWV2aW5nIHN0eWxlIGJlZm9yZSBjb21wdXRlZCBzb21laG93XG5cdFx0Ly8gZml4ZXMgYW4gaXNzdWUgd2l0aCBnZXR0aW5nIHdyb25nIHZhbHVlc1xuXHRcdC8vIG9uIGRldGFjaGVkIGVsZW1lbnRzXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XG5cblx0Ly8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBuZWVkZWQgZm9yOlxuXHQvLyAgIC5jc3MoJ2ZpbHRlcicpIChJRSA5IG9ubHksIHRyYWMtMTI1MzcpXG5cdC8vICAgLmNzcygnLS1jdXN0b21Qcm9wZXJ0eSkgKGdoLTMxNDQpXG5cdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHQvLyBJRSBvbmx5IHN1cHBvcnRzIGBcImZsb2F0XCJgIGluIGBnZXRQcm9wZXJ0eVZhbHVlYDsgaW4gY29tcHV0ZWQgc3R5bGVzXG5cdFx0Ly8gaXQncyBvbmx5IGF2YWlsYWJsZSBhcyBgXCJjc3NGbG9hdFwiYC4gV2Ugbm8gbG9uZ2VyIG1vZGlmeSBwcm9wZXJ0aWVzXG5cdFx0Ly8gc2VudCB0byBgLmNzcygpYCBhcGFydCBmcm9tIGNhbWVsQ2FzaW5nLCBzbyB3ZSBuZWVkIHRvIGNoZWNrIGJvdGguXG5cdFx0Ly8gTm9ybWFsbHksIHRoaXMgd291bGQgY3JlYXRlIGRpZmZlcmVuY2UgaW4gYmVoYXZpb3I6IGlmXG5cdFx0Ly8gYGdldFByb3BlcnR5VmFsdWVgIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLCB0aGUgdmFsdWUgcmV0dXJuZWRcblx0XHQvLyBieSBgLmNzcygpYCB3b3VsZCBiZSBgdW5kZWZpbmVkYC4gVGhpcyBpcyB1c3VhbGx5IHRoZSBjYXNlIGZvclxuXHRcdC8vIGRpc2Nvbm5lY3RlZCBlbGVtZW50cy4gSG93ZXZlciwgaW4gSUUgZXZlbiBkaXNjb25uZWN0ZWQgZWxlbWVudHNcblx0XHQvLyB3aXRoIG5vIHN0eWxlcyByZXR1cm4gYFwibm9uZVwiYCBmb3IgYGdldFByb3BlcnR5VmFsdWUoIFwiZmxvYXRcIiApYFxuXHRcdHJldCA9IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKSB8fCBjb21wdXRlZFsgbmFtZSBdO1xuXG5cdFx0aWYgKCBpc0N1c3RvbVByb3AgJiYgcmV0ICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDEwNSssIENocm9tZSA8PTEwNStcblx0XHRcdC8vIFNwZWMgcmVxdWlyZXMgdHJpbW1pbmcgd2hpdGVzcGFjZSBmb3IgY3VzdG9tIHByb3BlcnRpZXMgKGdoLTQ5MjYpLlxuXHRcdFx0Ly8gRmlyZWZveCBvbmx5IHRyaW1zIGxlYWRpbmcgd2hpdGVzcGFjZS4gQ2hyb21lIGp1c3QgY29sbGFwc2VzXG5cdFx0XHQvLyBib3RoIGxlYWRpbmcgJiB0cmFpbGluZyB3aGl0ZXNwYWNlIHRvIGEgc2luZ2xlIHNwYWNlLlxuXHRcdFx0Ly9cblx0XHRcdC8vIEZhbGwgYmFjayB0byBgdW5kZWZpbmVkYCBpZiBlbXB0eSBzdHJpbmcgcmV0dXJuZWQuXG5cdFx0XHQvLyBUaGlzIGNvbGxhcHNlcyBhIG1pc3NpbmcgZGVmaW5pdGlvbiB3aXRoIHByb3BlcnR5IGRlZmluZWRcblx0XHRcdC8vIGFuZCBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIGJ1dCB0aGVyZSdzIG5vIHN0YW5kYXJkIEFQSVxuXHRcdFx0Ly8gYWxsb3dpbmcgdXMgdG8gZGlmZmVyZW50aWF0ZSB0aGVtIHdpdGhvdXQgYSBwZXJmb3JtYW5jZSBwZW5hbHR5XG5cdFx0XHQvLyBhbmQgcmV0dXJuaW5nIGB1bmRlZmluZWRgIGFsaWducyB3aXRoIG9sZGVyIGpRdWVyeS5cblx0XHRcdC8vXG5cdFx0XHQvLyBydHJpbUNTUyB0cmVhdHMgVSswMDBEIENBUlJJQUdFIFJFVFVSTiBhbmQgVSswMDBDIEZPUk0gRkVFRFxuXHRcdFx0Ly8gYXMgd2hpdGVzcGFjZSB3aGlsZSBDU1MgZG9lcyBub3QsIGJ1dCB0aGlzIGlzIG5vdCBhIHByb2JsZW1cblx0XHRcdC8vIGJlY2F1c2UgQ1NTIHByZXByb2Nlc3NpbmcgcmVwbGFjZXMgdGhlbSB3aXRoIFUrMDAwQSBMSU5FIEZFRURcblx0XHRcdC8vICh3aGljaCAqaXMqIENTUyB3aGl0ZXNwYWNlKVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1zeW50YXgtMy8jaW5wdXQtcHJlcHJvY2Vzc2luZ1xuXHRcdFx0cmV0ID0gcmV0LnJlcGxhY2UoIHJ0cmltQ1NTLCBcIiQxXCIgKSB8fCB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKCByZXQgPT09IFwiXCIgJiYgIWlzQXR0YWNoZWQoIGVsZW0gKSApIHtcblx0XHRcdHJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEEgdHJpYnV0ZSB0byB0aGUgXCJhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzXCJcblx0XHQvLyBBbmRyb2lkIEJyb3dzZXIgcmV0dXJucyBwZXJjZW50YWdlIGZvciBzb21lIHZhbHVlcyxcblx0XHQvLyBidXQgd2lkdGggc2VlbXMgdG8gYmUgcmVsaWFibHkgcGl4ZWxzLlxuXHRcdC8vIFRoaXMgaXMgYWdhaW5zdCB0aGUgQ1NTT00gZHJhZnQgc3BlYzpcblx0XHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI3Jlc29sdmVkLXZhbHVlc1xuXHRcdGlmICggIXN1cHBvcnQucGl4ZWxCb3hTdHlsZXMoKSAmJiBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgcmJveFN0eWxlLnRlc3QoIG5hbWUgKSApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlc1xuXHRcdFx0d2lkdGggPSBzdHlsZS53aWR0aDtcblx0XHRcdG1pbldpZHRoID0gc3R5bGUubWluV2lkdGg7XG5cdFx0XHRtYXhXaWR0aCA9IHN0eWxlLm1heFdpZHRoO1xuXG5cdFx0XHQvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSByZXQ7XG5cdFx0XHRyZXQgPSBjb21wdXRlZC53aWR0aDtcblxuXHRcdFx0Ly8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlc1xuXHRcdFx0c3R5bGUud2lkdGggPSB3aWR0aDtcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gbWluV2lkdGg7XG5cdFx0XHRzdHlsZS5tYXhXaWR0aCA9IG1heFdpZHRoO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXQgIT09IHVuZGVmaW5lZCA/XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0Ly8gSUUgcmV0dXJucyB6SW5kZXggdmFsdWUgYXMgYW4gaW50ZWdlci5cblx0XHRyZXQgKyBcIlwiIDpcblx0XHRyZXQ7XG59XG5cblxuZnVuY3Rpb24gYWRkR2V0SG9va0lmKCBjb25kaXRpb25GbiwgaG9va0ZuICkge1xuXG5cdC8vIERlZmluZSB0aGUgaG9vaywgd2UnbGwgY2hlY2sgb24gdGhlIGZpcnN0IHJ1biBpZiBpdCdzIHJlYWxseSBuZWVkZWQuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggY29uZGl0aW9uRm4oKSApIHtcblxuXHRcdFx0XHQvLyBIb29rIG5vdCBuZWVkZWQgKG9yIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBpdCBkdWVcblx0XHRcdFx0Ly8gdG8gbWlzc2luZyBkZXBlbmRlbmN5KSwgcmVtb3ZlIGl0LlxuXHRcdFx0XHRkZWxldGUgdGhpcy5nZXQ7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSG9vayBuZWVkZWQ7IHJlZGVmaW5lIGl0IHNvIHRoYXQgdGhlIHN1cHBvcnQgdGVzdCBpcyBub3QgZXhlY3V0ZWQgYWdhaW4uXG5cdFx0XHRyZXR1cm4gKCB0aGlzLmdldCA9IGhvb2tGbiApLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9XG5cdH07XG59XG5cblxudmFyIGNzc1ByZWZpeGVzID0gWyBcIldlYmtpdFwiLCBcIk1velwiLCBcIm1zXCIgXSxcblx0ZW1wdHlTdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKS5zdHlsZSxcblx0dmVuZG9yUHJvcHMgPSB7fTtcblxuLy8gUmV0dXJuIGEgdmVuZG9yLXByZWZpeGVkIHByb3BlcnR5IG9yIHVuZGVmaW5lZFxuZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB7XG5cblx0Ly8gQ2hlY2sgZm9yIHZlbmRvciBwcmVmaXhlZCBuYW1lc1xuXHR2YXIgY2FwTmFtZSA9IG5hbWVbIDAgXS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSggMSApLFxuXHRcdGkgPSBjc3NQcmVmaXhlcy5sZW5ndGg7XG5cblx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0bmFtZSA9IGNzc1ByZWZpeGVzWyBpIF0gKyBjYXBOYW1lO1xuXHRcdGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkge1xuXHRcdFx0cmV0dXJuIG5hbWU7XG5cdFx0fVxuXHR9XG59XG5cbi8vIFJldHVybiBhIHBvdGVudGlhbGx5LW1hcHBlZCBqUXVlcnkuY3NzUHJvcHMgb3IgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5XG5mdW5jdGlvbiBmaW5hbFByb3BOYW1lKCBuYW1lICkge1xuXHR2YXIgZmluYWwgPSBqUXVlcnkuY3NzUHJvcHNbIG5hbWUgXSB8fCB2ZW5kb3JQcm9wc1sgbmFtZSBdO1xuXG5cdGlmICggZmluYWwgKSB7XG5cdFx0cmV0dXJuIGZpbmFsO1xuXHR9XG5cdGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkge1xuXHRcdHJldHVybiBuYW1lO1xuXHR9XG5cdHJldHVybiB2ZW5kb3JQcm9wc1sgbmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB8fCBuYW1lO1xufVxuXG5cbnZhclxuXG5cdC8vIFN3YXBwYWJsZSBpZiBkaXNwbGF5IGlzIG5vbmUgb3Igc3RhcnRzIHdpdGggdGFibGVcblx0Ly8gZXhjZXB0IFwidGFibGVcIiwgXCJ0YWJsZS1jZWxsXCIsIG9yIFwidGFibGUtY2FwdGlvblwiXG5cdC8vIFNlZSBoZXJlIGZvciBkaXNwbGF5IHZhbHVlczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MvZGlzcGxheVxuXHRyZGlzcGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sXG5cdGNzc1Nob3cgPSB7IHBvc2l0aW9uOiBcImFic29sdXRlXCIsIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsIGRpc3BsYXk6IFwiYmxvY2tcIiB9LFxuXHRjc3NOb3JtYWxUcmFuc2Zvcm0gPSB7XG5cdFx0bGV0dGVyU3BhY2luZzogXCIwXCIsXG5cdFx0Zm9udFdlaWdodDogXCI0MDBcIlxuXHR9O1xuXG5mdW5jdGlvbiBzZXRQb3NpdGl2ZU51bWJlciggX2VsZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHtcblxuXHQvLyBBbnkgcmVsYXRpdmUgKCsvLSkgdmFsdWVzIGhhdmUgYWxyZWFkeSBiZWVuXG5cdC8vIG5vcm1hbGl6ZWQgYXQgdGhpcyBwb2ludFxuXHR2YXIgbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKTtcblx0cmV0dXJuIG1hdGNoZXMgP1xuXG5cdFx0Ly8gR3VhcmQgYWdhaW5zdCB1bmRlZmluZWQgXCJzdWJ0cmFjdFwiLCBlLmcuLCB3aGVuIHVzZWQgYXMgaW4gY3NzSG9va3Ncblx0XHRNYXRoLm1heCggMCwgbWF0Y2hlc1sgMiBdIC0gKCBzdWJ0cmFjdCB8fCAwICkgKSArICggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApIDpcblx0XHR2YWx1ZTtcbn1cblxuZnVuY3Rpb24gYm94TW9kZWxBZGp1c3RtZW50KCBlbGVtLCBkaW1lbnNpb24sIGJveCwgaXNCb3JkZXJCb3gsIHN0eWxlcywgY29tcHV0ZWRWYWwgKSB7XG5cdHZhciBpID0gZGltZW5zaW9uID09PSBcIndpZHRoXCIgPyAxIDogMCxcblx0XHRleHRyYSA9IDAsXG5cdFx0ZGVsdGEgPSAwLFxuXHRcdG1hcmdpbkRlbHRhID0gMDtcblxuXHQvLyBBZGp1c3RtZW50IG1heSBub3QgYmUgbmVjZXNzYXJ5XG5cdGlmICggYm94ID09PSAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICkgKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7XG5cblx0XHQvLyBCb3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW5cblx0XHQvLyBDb3VudCBtYXJnaW4gZGVsdGEgc2VwYXJhdGVseSB0byBvbmx5IGFkZCBpdCBhZnRlciBzY3JvbGwgZ3V0dGVyIGFkanVzdG1lbnQuXG5cdFx0Ly8gVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBuZWdhdGl2ZSBtYXJnaW5zIHdvcmsgd2l0aCBgb3V0ZXJIZWlnaHQoIHRydWUgKWAgKGdoLTM5ODIpLlxuXHRcdGlmICggYm94ID09PSBcIm1hcmdpblwiICkge1xuXHRcdFx0bWFyZ2luRGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgYm94ICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBjb250ZW50LWJveCwgd2UncmUgc2Vla2luZyBcInBhZGRpbmdcIiBvciBcImJvcmRlclwiIG9yIFwibWFyZ2luXCJcblx0XHRpZiAoICFpc0JvcmRlckJveCApIHtcblxuXHRcdFx0Ly8gQWRkIHBhZGRpbmdcblx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBGb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiLCBhZGQgYm9yZGVyXG5cdFx0XHRpZiAoIGJveCAhPT0gXCJwYWRkaW5nXCIgKSB7XG5cdFx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEJ1dCBzdGlsbCBrZWVwIHRyYWNrIG9mIGl0IG90aGVyd2lzZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZXh0cmEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdC8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBib3JkZXItYm94IChjb250ZW50ICsgcGFkZGluZyArIGJvcmRlciksIHdlJ3JlIHNlZWtpbmcgXCJjb250ZW50XCIgb3Jcblx0XHQvLyBcInBhZGRpbmdcIiBvciBcIm1hcmdpblwiXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiLCBzdWJ0cmFjdCBwYWRkaW5nXG5cdFx0XHRpZiAoIGJveCA9PT0gXCJjb250ZW50XCIgKSB7XG5cdFx0XHRcdGRlbHRhIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIgb3IgXCJwYWRkaW5nXCIsIHN1YnRyYWN0IGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRcdGRlbHRhIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWNjb3VudCBmb3IgcG9zaXRpdmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlciB3aGVuIHJlcXVlc3RlZCBieSBwcm92aWRpbmcgY29tcHV0ZWRWYWxcblx0aWYgKCAhaXNCb3JkZXJCb3ggJiYgY29tcHV0ZWRWYWwgPj0gMCApIHtcblxuXHRcdC8vIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBpcyBhIHJvdW5kZWQgc3VtIG9mIGNvbnRlbnQsIHBhZGRpbmcsIHNjcm9sbCBndXR0ZXIsIGFuZCBib3JkZXJcblx0XHQvLyBBc3N1bWluZyBpbnRlZ2VyIHNjcm9sbCBndXR0ZXIsIHN1YnRyYWN0IHRoZSByZXN0IGFuZCByb3VuZCBkb3duXG5cdFx0ZGVsdGEgKz0gTWF0aC5tYXgoIDAsIE1hdGguY2VpbChcblx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRjb21wdXRlZFZhbCAtXG5cdFx0XHRkZWx0YSAtXG5cdFx0XHRleHRyYSAtXG5cdFx0XHQwLjVcblxuXHRcdC8vIElmIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBpcyB1bmtub3duLCB0aGVuIHdlIGNhbid0IGRldGVybWluZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyXG5cdFx0Ly8gVXNlIGFuIGV4cGxpY2l0IHplcm8gdG8gYXZvaWQgTmFOIChnaC0zOTY0KVxuXHRcdCkgKSB8fCAwO1xuXHR9XG5cblx0cmV0dXJuIGRlbHRhICsgbWFyZ2luRGVsdGE7XG59XG5cbmZ1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKSB7XG5cblx0Ly8gU3RhcnQgd2l0aCBjb21wdXRlZCBzdHlsZVxuXHR2YXIgc3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC00MzIyKS5cblx0XHQvLyBGYWtlIGNvbnRlbnQtYm94IHVudGlsIHdlIGtub3cgaXQncyBuZWVkZWQgdG8ga25vdyB0aGUgdHJ1ZSB2YWx1ZS5cblx0XHRib3hTaXppbmdOZWVkZWQgPSAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpIHx8IGV4dHJhLFxuXHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCxcblxuXHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgZGltZW5zaW9uLCBzdHlsZXMgKSxcblx0XHRvZmZzZXRQcm9wID0gXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKTtcblxuXHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTRcblx0Ly8gUmV0dXJuIGEgY29uZm91bmRpbmcgbm9uLXBpeGVsIHZhbHVlIG9yIGZlaWduIGlnbm9yYW5jZSwgYXMgYXBwcm9wcmlhdGUuXG5cdGlmICggcm51bW5vbnB4LnRlc3QoIHZhbCApICkge1xuXHRcdGlmICggIWV4dHJhICkge1xuXHRcdFx0cmV0dXJuIHZhbDtcblx0XHR9XG5cdFx0dmFsID0gXCJhdXRvXCI7XG5cdH1cblxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIFVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIHdoZW4gYm94IHNpemluZyBpcyB1bnJlbGlhYmxlLlxuXHQvLyBJbiB0aG9zZSBjYXNlcywgdGhlIGNvbXB1dGVkIHZhbHVlIGNhbiBiZSB0cnVzdGVkIHRvIGJlIGJvcmRlci1ib3guXG5cdGlmICggKCAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpICYmIGlzQm9yZGVyQm94IHx8XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMCAtIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFL0VkZ2UgbWlzcmVwb3J0IGBnZXRDb21wdXRlZFN0eWxlYCBvZiB0YWJsZSByb3dzIHdpdGggd2lkdGgvaGVpZ2h0XG5cdFx0Ly8gc2V0IGluIENTUyB3aGlsZSBgb2Zmc2V0KmAgcHJvcGVydGllcyByZXBvcnQgY29ycmVjdCB2YWx1ZXMuXG5cdFx0Ly8gSW50ZXJlc3RpbmdseSwgaW4gc29tZSBjYXNlcyBJRSA5IGRvZXNuJ3Qgc3VmZmVyIGZyb20gdGhpcyBpc3N1ZS5cblx0XHQhc3VwcG9ydC5yZWxpYWJsZVRyRGltZW5zaW9ucygpICYmIG5vZGVOYW1lKCBlbGVtLCBcInRyXCIgKSB8fFxuXG5cdFx0Ly8gRmFsbCBiYWNrIHRvIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCB3aGVuIHZhbHVlIGlzIFwiYXV0b1wiXG5cdFx0Ly8gVGhpcyBoYXBwZW5zIGZvciBpbmxpbmUgZWxlbWVudHMgd2l0aCBubyBleHBsaWNpdCBzZXR0aW5nIChnaC0zNTcxKVxuXHRcdHZhbCA9PT0gXCJhdXRvXCIgfHxcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgLSA0LjMgb25seVxuXHRcdC8vIEFsc28gdXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3IgbWlzcmVwb3J0ZWQgaW5saW5lIGRpbWVuc2lvbnMgKGdoLTM2MDIpXG5cdFx0IXBhcnNlRmxvYXQoIHZhbCApICYmIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiaW5saW5lXCIgKSAmJlxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHZpc2libGUgJiBjb25uZWN0ZWRcblx0XHRlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xuXG5cdFx0aXNCb3JkZXJCb3ggPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiO1xuXG5cdFx0Ly8gV2hlcmUgYXZhaWxhYmxlLCBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgYXBwcm94aW1hdGUgYm9yZGVyIGJveCBkaW1lbnNpb25zLlxuXHRcdC8vIFdoZXJlIG5vdCBhdmFpbGFibGUgKGUuZy4sIFNWRyksIGFzc3VtZSB1bnJlbGlhYmxlIGJveC1zaXppbmcgYW5kIGludGVycHJldCB0aGVcblx0XHQvLyByZXRyaWV2ZWQgdmFsdWUgYXMgYSBjb250ZW50IGJveCBkaW1lbnNpb24uXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IG9mZnNldFByb3AgaW4gZWxlbTtcblx0XHRpZiAoIHZhbHVlSXNCb3JkZXJCb3ggKSB7XG5cdFx0XHR2YWwgPSBlbGVtWyBvZmZzZXRQcm9wIF07XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIFwiXCIgYW5kIGF1dG9cblx0dmFsID0gcGFyc2VGbG9hdCggdmFsICkgfHwgMDtcblxuXHQvLyBBZGp1c3QgZm9yIHRoZSBlbGVtZW50J3MgYm94IG1vZGVsXG5cdHJldHVybiAoIHZhbCArXG5cdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0ZWxlbSxcblx0XHRcdGRpbWVuc2lvbixcblx0XHRcdGV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSxcblx0XHRcdHZhbHVlSXNCb3JkZXJCb3gsXG5cdFx0XHRzdHlsZXMsXG5cblx0XHRcdC8vIFByb3ZpZGUgdGhlIGN1cnJlbnQgY29tcHV0ZWQgc2l6ZSB0byByZXF1ZXN0IHNjcm9sbCBndXR0ZXIgY2FsY3VsYXRpb24gKGdoLTM1ODkpXG5cdFx0XHR2YWxcblx0XHQpXG5cdCkgKyBcInB4XCI7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHRcblx0Ly8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5XG5cdGNzc0hvb2tzOiB7XG5cdFx0b3BhY2l0eToge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eVxuXHRcdFx0XHRcdHZhciByZXQgPSBjdXJDU1MoIGVsZW0sIFwib3BhY2l0eVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJldCA9PT0gXCJcIiA/IFwiMVwiIDogcmV0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8vIERvbid0IGF1dG9tYXRpY2FsbHkgYWRkIFwicHhcIiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzXG5cdGNzc051bWJlcjoge1xuXHRcdGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiB0cnVlLFxuXHRcdGFzcGVjdFJhdGlvOiB0cnVlLFxuXHRcdGJvcmRlckltYWdlU2xpY2U6IHRydWUsXG5cdFx0Y29sdW1uQ291bnQ6IHRydWUsXG5cdFx0ZmxleEdyb3c6IHRydWUsXG5cdFx0ZmxleFNocmluazogdHJ1ZSxcblx0XHRmb250V2VpZ2h0OiB0cnVlLFxuXHRcdGdyaWRBcmVhOiB0cnVlLFxuXHRcdGdyaWRDb2x1bW46IHRydWUsXG5cdFx0Z3JpZENvbHVtbkVuZDogdHJ1ZSxcblx0XHRncmlkQ29sdW1uU3RhcnQ6IHRydWUsXG5cdFx0Z3JpZFJvdzogdHJ1ZSxcblx0XHRncmlkUm93RW5kOiB0cnVlLFxuXHRcdGdyaWRSb3dTdGFydDogdHJ1ZSxcblx0XHRsaW5lSGVpZ2h0OiB0cnVlLFxuXHRcdG9wYWNpdHk6IHRydWUsXG5cdFx0b3JkZXI6IHRydWUsXG5cdFx0b3JwaGFuczogdHJ1ZSxcblx0XHRzY2FsZTogdHJ1ZSxcblx0XHR3aWRvd3M6IHRydWUsXG5cdFx0ekluZGV4OiB0cnVlLFxuXHRcdHpvb206IHRydWUsXG5cblx0XHQvLyBTVkctcmVsYXRlZFxuXHRcdGZpbGxPcGFjaXR5OiB0cnVlLFxuXHRcdGZsb29kT3BhY2l0eTogdHJ1ZSxcblx0XHRzdG9wT3BhY2l0eTogdHJ1ZSxcblx0XHRzdHJva2VNaXRlcmxpbWl0OiB0cnVlLFxuXHRcdHN0cm9rZU9wYWNpdHk6IHRydWVcblx0fSxcblxuXHQvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlXG5cdC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWVcblx0Y3NzUHJvcHM6IHt9LFxuXG5cdC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlXG5cdHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkge1xuXG5cdFx0Ly8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lXG5cdFx0dmFyIHJldCwgdHlwZSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApLFxuXHRcdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gcXVlcnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBHZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uLCB0aGVuIHVucHJlZml4ZWQgdmVyc2lvblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRcdFx0Ly8gQ29udmVydCBcIis9XCIgb3IgXCItPVwiIHRvIHJlbGF0aXZlIG51bWJlcnMgKHRyYWMtNzM0NSlcblx0XHRcdGlmICggdHlwZSA9PT0gXCJzdHJpbmdcIiAmJiAoIHJldCA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmIHJldFsgMSBdICkge1xuXHRcdFx0XHR2YWx1ZSA9IGFkanVzdENTUyggZWxlbSwgbmFtZSwgcmV0ICk7XG5cblx0XHRcdFx0Ly8gRml4ZXMgYnVnIHRyYWMtOTIzN1xuXHRcdFx0XHR0eXBlID0gXCJudW1iZXJcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICh0cmFjLTcxMTYpXG5cdFx0XHRpZiAoIHZhbHVlID09IG51bGwgfHwgdmFsdWUgIT09IHZhbHVlICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCB0aGUgdW5pdCAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKVxuXHRcdFx0Ly8gVGhlIGlzQ3VzdG9tUHJvcCBjaGVjayBjYW4gYmUgcmVtb3ZlZCBpbiBqUXVlcnkgNC4wIHdoZW4gd2Ugb25seSBhdXRvLWFwcGVuZFxuXHRcdFx0Ly8gXCJweFwiIHRvIGEgZmV3IGhhcmRjb2RlZCB2YWx1ZXMuXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwibnVtYmVyXCIgJiYgIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0dmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gYmFja2dyb3VuZC0qIHByb3BzIGFmZmVjdCBvcmlnaW5hbCBjbG9uZSdzIHZhbHVlc1xuXHRcdFx0aWYgKCAhc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgJiYgdmFsdWUgPT09IFwiXCIgJiYgbmFtZS5pbmRleE9mKCBcImJhY2tncm91bmRcIiApID09PSAwICkge1xuXHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gXCJpbmhlcml0XCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZVxuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8XG5cdFx0XHRcdCggdmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRpZiAoIGlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0XHRzdHlsZS5zZXRQcm9wZXJ0eSggbmFtZSwgdmFsdWUgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3Rcblx0XHRcdHJldHVybiBzdHlsZVsgbmFtZSBdO1xuXHRcdH1cblx0fSxcblxuXHRjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwgc3R5bGVzICkge1xuXHRcdHZhciB2YWwsIG51bSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gbW9kaWZ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZVxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXRcblx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IFwibm9ybWFsXCIgdG8gY29tcHV0ZWQgdmFsdWVcblx0XHRpZiAoIHZhbCA9PT0gXCJub3JtYWxcIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHtcblx0XHRcdHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdO1xuXHRcdH1cblxuXHRcdC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpY1xuXHRcdGlmICggZXh0cmEgPT09IFwiXCIgfHwgZXh0cmEgKSB7XG5cdFx0XHRudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTtcblx0XHRcdHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiaGVpZ2h0XCIsIFwid2lkdGhcIiBdLCBmdW5jdGlvbiggX2ksIGRpbWVuc2lvbiApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBkaW1lbnNpb24gXSA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdC8vIENlcnRhaW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbVxuXHRcdFx0XHQvLyBidXQgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdFxuXHRcdFx0XHRyZXR1cm4gcmRpc3BsYXlzd2FwLnRlc3QoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgKSAmJlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrXG5cdFx0XHRcdFx0Ly8gVGFibGUgY29sdW1ucyBpbiBTYWZhcmkgaGF2ZSBub24temVybyBvZmZzZXRXaWR0aCAmIHplcm9cblx0XHRcdFx0XHQvLyBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB1bmxlc3MgZGlzcGxheSBpcyBjaGFuZ2VkLlxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdFx0XHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGEgZGlzY29ubmVjdGVkIG5vZGVcblx0XHRcdFx0XHQvLyBpbiBJRSB0aHJvd3MgYW4gZXJyb3IuXG5cdFx0XHRcdFx0KCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCB8fCAhZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCApID9cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHtcblx0XHRcdHZhciBtYXRjaGVzLFxuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdFx0XHQvLyBPbmx5IHJlYWQgc3R5bGVzLnBvc2l0aW9uIGlmIHRoZSB0ZXN0IGhhcyBhIGNoYW5jZSB0byBmYWlsXG5cdFx0XHRcdC8vIHRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3cuXG5cdFx0XHRcdHNjcm9sbGJveFNpemVCdWdneSA9ICFzdXBwb3J0LnNjcm9sbGJveFNpemUoKSAmJlxuXHRcdFx0XHRcdHN0eWxlcy5wb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiLFxuXG5cdFx0XHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTM5OTEpXG5cdFx0XHRcdGJveFNpemluZ05lZWRlZCA9IHNjcm9sbGJveFNpemVCdWdneSB8fCBleHRyYSxcblx0XHRcdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdFx0XHRzdWJ0cmFjdCA9IGV4dHJhID9cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRcdFx0XHRlbGVtLFxuXHRcdFx0XHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0XHRcdFx0ZXh0cmEsXG5cdFx0XHRcdFx0XHRpc0JvcmRlckJveCxcblx0XHRcdFx0XHRcdHN0eWxlc1xuXHRcdFx0XHRcdCkgOlxuXHRcdFx0XHRcdDA7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHVucmVsaWFibGUgYm9yZGVyLWJveCBkaW1lbnNpb25zIGJ5IGNvbXBhcmluZyBvZmZzZXQqIHRvIGNvbXB1dGVkIGFuZFxuXHRcdFx0Ly8gZmFraW5nIGEgY29udGVudC1ib3ggdG8gZ2V0IGJvcmRlciBhbmQgcGFkZGluZyAoZ2gtMzY5OSlcblx0XHRcdGlmICggaXNCb3JkZXJCb3ggJiYgc2Nyb2xsYm94U2l6ZUJ1Z2d5ICkge1xuXHRcdFx0XHRzdWJ0cmFjdCAtPSBNYXRoLmNlaWwoXG5cdFx0XHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdFx0XHRwYXJzZUZsb2F0KCBzdHlsZXNbIGRpbWVuc2lvbiBdICkgLVxuXHRcdFx0XHRcdGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBcImJvcmRlclwiLCBmYWxzZSwgc3R5bGVzICkgLVxuXHRcdFx0XHRcdDAuNVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IHRvIHBpeGVscyBpZiB2YWx1ZSBhZGp1c3RtZW50IGlzIG5lZWRlZFxuXHRcdFx0aWYgKCBzdWJ0cmFjdCAmJiAoIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJlxuXHRcdFx0XHQoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSAhPT0gXCJweFwiICkge1xuXG5cdFx0XHRcdGVsZW0uc3R5bGVbIGRpbWVuc2lvbiBdID0gdmFsdWU7XG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5LmNzcyggZWxlbSwgZGltZW5zaW9uICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICk7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuY3NzSG9va3MubWFyZ2luTGVmdCA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5yZWxpYWJsZU1hcmdpbkxlZnQsXG5cdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0cmV0dXJuICggcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiApICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCB7IG1hcmdpbkxlZnQ6IDAgfSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXHRcdFx0XHRcdH0gKVxuXHRcdFx0KSArIFwicHhcIjtcblx0XHR9XG5cdH1cbik7XG5cbi8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXNcbmpRdWVyeS5lYWNoKCB7XG5cdG1hcmdpbjogXCJcIixcblx0cGFkZGluZzogXCJcIixcblx0Ym9yZGVyOiBcIldpZHRoXCJcbn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcblx0XHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBpID0gMCxcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcblxuXHRcdFx0XHQvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmdcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdCggXCIgXCIgKSA6IFsgdmFsdWUgXTtcblxuXHRcdFx0Zm9yICggOyBpIDwgNDsgaSsrICkge1xuXHRcdFx0XHRleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9XG5cdFx0XHRcdFx0cGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXhwYW5kZWQ7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICggcHJlZml4ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgc3R5bGVzLCBsZW4sXG5cdFx0XHRcdG1hcCA9IHt9LFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBuYW1lICkgKSB7XG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApO1xuXHRcdFx0XHRsZW4gPSBuYW1lLmxlbmd0aDtcblxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRtYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5bGVzICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6XG5cdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHR9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fVxufSApO1xuXG5cbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcblx0cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTtcbn1cbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xuXG5Ud2Vlbi5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBUd2Vlbixcblx0aW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkge1xuXHRcdHRoaXMuZWxlbSA9IGVsZW07XG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcblx0XHR0aGlzLmVhc2luZyA9IGVhc2luZyB8fCBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0O1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xuXHR9LFxuXHRjdXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID9cblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcblx0fSxcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcblx0XHR2YXIgZWFzZWQsXG5cdFx0XHRob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKFxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xuXHRcdH1cblx0XHR0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkge1xuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cblR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTtcblxuVHdlZW4ucHJvcEhvb2tzID0ge1xuXHRfZGVmYXVsdDoge1xuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdFx0dmFyIHJlc3VsdDtcblxuXHRcdFx0Ly8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCxcblx0XHRcdC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuXG5cdFx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHxcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxuXHRcdFx0Ly8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy5cblx0XHRcdC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyBcIjEwcHhcIiBhcmUgcGFyc2VkIHRvIEZsb2F0O1xuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cblx0XHRcdHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCBcImF1dG9cIiBhcmUgY29udmVydGVkIHRvIDAuXG5cdFx0XHRyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09IFwiYXV0b1wiID8gMCA6IHJlc3VsdDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXG5cdFx0XHQvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC5cblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXG5cdFx0XHRpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0alF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gfHxcblx0XHRcdFx0XHR0d2Vlbi5lbGVtLnN0eWxlWyBmaW5hbFByb3BOYW1lKCB0d2Vlbi5wcm9wICkgXSAhPSBudWxsICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgdHdlZW4ubm93ICsgdHdlZW4udW5pdCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIFBhbmljIGJhc2VkIGFwcHJvYWNoIHRvIHNldHRpbmcgdGhpbmdzIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmVhc2luZyA9IHtcblx0bGluZWFyOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gcDtcblx0fSxcblx0c3dpbmc6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiAwLjUgLSBNYXRoLmNvcyggcCAqIE1hdGguUEkgKSAvIDI7XG5cdH0sXG5cdF9kZWZhdWx0OiBcInN3aW5nXCJcbn07XG5cbmpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0O1xuXG4vLyBCYWNrIGNvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludFxualF1ZXJ5LmZ4LnN0ZXAgPSB7fTtcblxuXG5cblxudmFyXG5cdGZ4Tm93LCBpblByb2dyZXNzLFxuXHRyZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxcblx0cnJ1biA9IC9xdWV1ZUhvb2tzJC87XG5cbmZ1bmN0aW9uIHNjaGVkdWxlKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0aWYgKCBkb2N1bWVudC5oaWRkZW4gPT09IGZhbHNlICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKSB7XG5cdFx0XHR3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBzY2hlZHVsZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3aW5kb3cuc2V0VGltZW91dCggc2NoZWR1bGUsIGpRdWVyeS5meC5pbnRlcnZhbCApO1xuXHRcdH1cblxuXHRcdGpRdWVyeS5meC50aWNrKCk7XG5cdH1cbn1cblxuLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseVxuZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRmeE5vdyA9IHVuZGVmaW5lZDtcblx0fSApO1xuXHRyZXR1cm4gKCBmeE5vdyA9IERhdGUubm93KCkgKTtcbn1cblxuLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb25cbmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7XG5cdHZhciB3aGljaCxcblx0XHRpID0gMCxcblx0XHRhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH07XG5cblx0Ly8gSWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLFxuXHQvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodFxuXHRpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGggPyAxIDogMDtcblx0Zm9yICggOyBpIDwgNDsgaSArPSAyIC0gaW5jbHVkZVdpZHRoICkge1xuXHRcdHdoaWNoID0gY3NzRXhwYW5kWyBpIF07XG5cdFx0YXR0cnNbIFwibWFyZ2luXCIgKyB3aGljaCBdID0gYXR0cnNbIFwicGFkZGluZ1wiICsgd2hpY2ggXSA9IHR5cGU7XG5cdH1cblxuXHRpZiAoIGluY2x1ZGVXaWR0aCApIHtcblx0XHRhdHRycy5vcGFjaXR5ID0gYXR0cnMud2lkdGggPSB0eXBlO1xuXHR9XG5cblx0cmV0dXJuIGF0dHJzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUd2VlbiggdmFsdWUsIHByb3AsIGFuaW1hdGlvbiApIHtcblx0dmFyIHR3ZWVuLFxuXHRcdGNvbGxlY3Rpb24gPSAoIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCBBbmltYXRpb24udHdlZW5lcnNbIFwiKlwiIF0gKSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCAoIHR3ZWVuID0gY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHByb3AsIHZhbHVlICkgKSApIHtcblxuXHRcdFx0Ly8gV2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHlcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7XG5cdHZhciBwcm9wLCB2YWx1ZSwgdG9nZ2xlLCBob29rcywgb2xkZmlyZSwgcHJvcFR3ZWVuLCByZXN0b3JlRGlzcGxheSwgZGlzcGxheSxcblx0XHRpc0JveCA9IFwid2lkdGhcIiBpbiBwcm9wcyB8fCBcImhlaWdodFwiIGluIHByb3BzLFxuXHRcdGFuaW0gPSB0aGlzLFxuXHRcdG9yaWcgPSB7fSxcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGUsXG5cdFx0aGlkZGVuID0gZWxlbS5ub2RlVHlwZSAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSxcblx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJmeHNob3dcIiApO1xuXG5cdC8vIFF1ZXVlLXNraXBwaW5nIGFuaW1hdGlvbnMgaGlqYWNrIHRoZSBmeCBob29rc1xuXHRpZiAoICFvcHRzLnF1ZXVlICkge1xuXHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCBcImZ4XCIgKTtcblx0XHRpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7XG5cdFx0XHRob29rcy51bnF1ZXVlZCA9IDA7XG5cdFx0XHRvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7XG5cdFx0XHRcdFx0b2xkZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRob29rcy51bnF1ZXVlZCsrO1xuXG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbnN1cmUgdGhlIGNvbXBsZXRlIGhhbmRsZXIgaXMgY2FsbGVkIGJlZm9yZSB0aGlzIGNvbXBsZXRlc1xuXHRcdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRob29rcy51bnF1ZXVlZC0tO1xuXHRcdFx0XHRpZiAoICFqUXVlcnkucXVldWUoIGVsZW0sIFwiZnhcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBEZXRlY3Qgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0Zm9yICggcHJvcCBpbiBwcm9wcyApIHtcblx0XHR2YWx1ZSA9IHByb3BzWyBwcm9wIF07XG5cdFx0aWYgKCByZnh0eXBlcy50ZXN0KCB2YWx1ZSApICkge1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBwcm9wIF07XG5cdFx0XHR0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09IFwidG9nZ2xlXCI7XG5cdFx0XHRpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/IFwiaGlkZVwiIDogXCJzaG93XCIgKSApIHtcblxuXHRcdFx0XHQvLyBQcmV0ZW5kIHRvIGJlIGhpZGRlbiBpZiB0aGlzIGlzIGEgXCJzaG93XCIgYW5kXG5cdFx0XHRcdC8vIHRoZXJlIGlzIHN0aWxsIGRhdGEgZnJvbSBhIHN0b3BwZWQgc2hvdy9oaWRlXG5cdFx0XHRcdGlmICggdmFsdWUgPT09IFwic2hvd1wiICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSB0cnVlO1xuXG5cdFx0XHRcdC8vIElnbm9yZSBhbGwgb3RoZXIgbm8tb3Agc2hvdy9oaWRlIGRhdGFcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b3JpZ1sgcHJvcCBdID0gZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSB8fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBCYWlsIG91dCBpZiB0aGlzIGlzIGEgbm8tb3AgbGlrZSAuaGlkZSgpLmhpZGUoKVxuXHRwcm9wVHdlZW4gPSAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3BzICk7XG5cdGlmICggIXByb3BUd2VlbiAmJiBqUXVlcnkuaXNFbXB0eU9iamVjdCggb3JpZyApICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlc3RyaWN0IFwib3ZlcmZsb3dcIiBhbmQgXCJkaXNwbGF5XCIgc3R5bGVzIGR1cmluZyBib3ggYW5pbWF0aW9uc1xuXHRpZiAoIGlzQm94ICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0Ly8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdCBpbmZlciB0aGUgc2hvcnRoYW5kXG5cdFx0Ly8gZnJvbSBpZGVudGljYWxseS12YWx1ZWQgb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kgYW5kIEVkZ2UganVzdCBtaXJyb3JzXG5cdFx0Ly8gdGhlIG92ZXJmbG93WCB2YWx1ZSB0aGVyZS5cblx0XHRvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVyZmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTtcblxuXHRcdC8vIElkZW50aWZ5IGEgZGlzcGxheSB0eXBlLCBwcmVmZXJyaW5nIG9sZCBzaG93L2hpZGUgZGF0YSBvdmVyIHRoZSBDU1MgY2FzY2FkZVxuXHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVNob3cgJiYgZGF0YVNob3cuZGlzcGxheTtcblx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHR9XG5cdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgKSB7XG5cdFx0XHRcdGRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gR2V0IG5vbmVtcHR5IHZhbHVlKHMpIGJ5IHRlbXBvcmFyaWx5IGZvcmNpbmcgdmlzaWJpbGl0eVxuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXkgfHwgcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBbmltYXRlIGlubGluZSBlbGVtZW50cyBhcyBpbmxpbmUtYmxvY2tcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwiaW5saW5lXCIgfHwgZGlzcGxheSA9PT0gXCJpbmxpbmUtYmxvY2tcIiAmJiByZXN0b3JlRGlzcGxheSAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcImZsb2F0XCIgKSA9PT0gXCJub25lXCIgKSB7XG5cblx0XHRcdFx0Ly8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgZGlzcGxheSB2YWx1ZSBhdCB0aGUgZW5kIG9mIHB1cmUgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0XHRcdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdGRpc3BsYXkgPSBzdHlsZS5kaXNwbGF5O1xuXHRcdFx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkaXNwbGF5ID09PSBcIm5vbmVcIiA/IFwiXCIgOiBkaXNwbGF5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIG9wdHMub3ZlcmZsb3cgKSB7XG5cdFx0c3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sgMSBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEltcGxlbWVudCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRwcm9wVHdlZW4gPSBmYWxzZTtcblx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXG5cdFx0Ly8gR2VuZXJhbCBzaG93L2hpZGUgc2V0dXAgZm9yIHRoaXMgZWxlbWVudCBhbmltYXRpb25cblx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRpZiAoIGRhdGFTaG93ICkge1xuXHRcdFx0XHRpZiAoIFwiaGlkZGVuXCIgaW4gZGF0YVNob3cgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gZGF0YVNob3cuaGlkZGVuO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgXCJmeHNob3dcIiwgeyBkaXNwbGF5OiByZXN0b3JlRGlzcGxheSB9ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0b3JlIGhpZGRlbi92aXNpYmxlIGZvciB0b2dnbGUgc28gYC5zdG9wKCkudG9nZ2xlKClgIFwicmV2ZXJzZXNcIlxuXHRcdFx0aWYgKCB0b2dnbGUgKSB7XG5cdFx0XHRcdGRhdGFTaG93LmhpZGRlbiA9ICFoaWRkZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNob3cgZWxlbWVudHMgYmVmb3JlIGFuaW1hdGluZyB0aGVtXG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdFx0Ly8gVGhlIGZpbmFsIHN0ZXAgb2YgYSBcImhpZGVcIiBhbmltYXRpb24gaXMgYWN0dWFsbHkgaGlkaW5nIHRoZSBlbGVtZW50XG5cdFx0XHRcdGlmICggIWhpZGRlbiApIHtcblx0XHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiZnhzaG93XCIgKTtcblx0XHRcdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvLyBQZXItcHJvcGVydHkgc2V0dXBcblx0XHRwcm9wVHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTtcblx0XHRpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHtcblx0XHRcdGRhdGFTaG93WyBwcm9wIF0gPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0cHJvcFR3ZWVuLmVuZCA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdFx0cHJvcFR3ZWVuLnN0YXJ0ID0gMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7XG5cdHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7XG5cblx0Ly8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzXG5cdGZvciAoIGluZGV4IGluIHByb3BzICkge1xuXHRcdG5hbWUgPSBjYW1lbENhc2UoIGluZGV4ICk7XG5cdFx0ZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdO1xuXHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF07XG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0ZWFzaW5nID0gdmFsdWVbIDEgXTtcblx0XHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdO1xuXHRcdH1cblxuXHRcdGlmICggaW5kZXggIT09IG5hbWUgKSB7XG5cdFx0XHRwcm9wc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRkZWxldGUgcHJvcHNbIGluZGV4IF07XG5cdFx0fVxuXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTtcblx0XHRpZiAoIGhvb2tzICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgbmFtZSBdO1xuXG5cdFx0XHQvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuXG5cdFx0XHQvLyBSZXVzaW5nICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFwibmFtZVwiXG5cdFx0XHRmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkge1xuXHRcdFx0XHRcdHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07XG5cdFx0XHRcdFx0c3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHtcblx0dmFyIHJlc3VsdCxcblx0XHRzdG9wcGVkLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsXG5cdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBEb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3Jcblx0XHRcdGRlbGV0ZSB0aWNrLmVsZW07XG5cdFx0fSApLFxuXHRcdHRpY2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdFx0cmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLFxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zIG9ubHlcblx0XHRcdFx0Ly8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAodHJhYy0xMjQ5Nylcblx0XHRcdFx0dGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJhdGlvbiB8fCAwLFxuXHRcdFx0XHRwZXJjZW50ID0gMSAtIHRlbXAsXG5cdFx0XHRcdGluZGV4ID0gMCxcblx0XHRcdFx0bGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7XG5cblx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJjZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1haW5pbmcgXSApO1xuXG5cdFx0XHQvLyBJZiB0aGVyZSdzIG1vcmUgdG8gZG8sIHlpZWxkXG5cdFx0XHRpZiAoIHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHtcblx0XHRcdFx0cmV0dXJuIHJlbWFpbmluZztcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyB3YXMgYW4gZW1wdHkgYW5pbWF0aW9uLCBzeW50aGVzaXplIGEgZmluYWwgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uXG5cdFx0XHRpZiAoICFsZW5ndGggKSB7XG5cdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVzb2x2ZSB0aGUgYW5pbWF0aW9uIGFuZCByZXBvcnQgaXRzIGNvbmNsdXNpb25cblx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiBdICk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHRhbmltYXRpb24gPSBkZWZlcnJlZC5wcm9taXNlKCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0cHJvcHM6IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksXG5cdFx0XHRvcHRzOiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7XG5cdFx0XHRcdHNwZWNpYWxFYXNpbmc6IHt9LFxuXHRcdFx0XHRlYXNpbmc6IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHRcblx0XHRcdH0sIG9wdGlvbnMgKSxcblx0XHRcdG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcyxcblx0XHRcdG9yaWdpbmFsT3B0aW9uczogb3B0aW9ucyxcblx0XHRcdHN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLFxuXHRcdFx0dHdlZW5zOiBbXSxcblx0XHRcdGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkge1xuXHRcdFx0XHR2YXIgdHdlZW4gPSBqUXVlcnkuVHdlZW4oIGVsZW0sIGFuaW1hdGlvbi5vcHRzLCBwcm9wLCBlbmQsXG5cdFx0XHRcdFx0YW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApO1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7XG5cdFx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHRcdH0sXG5cdFx0XHRzdG9wOiBmdW5jdGlvbiggZ290b0VuZCApIHtcblx0XHRcdFx0dmFyIGluZGV4ID0gMCxcblxuXHRcdFx0XHRcdC8vIElmIHdlIGFyZSBnb2luZyB0byB0aGUgZW5kLCB3ZSB3YW50IHRvIHJ1biBhbGwgdGhlIHR3ZWVuc1xuXHRcdFx0XHRcdC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydFxuXHRcdFx0XHRcdGxlbmd0aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7XG5cdFx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0XHRzdG9wcGVkID0gdHJ1ZTtcblx0XHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZTsgb3RoZXJ3aXNlLCByZWplY3Rcblx0XHRcdFx0aWYgKCBnb3RvRW5kICkge1xuXHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9ICksXG5cdFx0cHJvcHMgPSBhbmltYXRpb24ucHJvcHM7XG5cblx0cHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcgKTtcblxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdHJlc3VsdCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgZWxlbSwgcHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7XG5cdFx0aWYgKCByZXN1bHQgKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHJlc3VsdC5zdG9wICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggYW5pbWF0aW9uLmVsZW0sIGFuaW1hdGlvbi5vcHRzLnF1ZXVlICkuc3RvcCA9XG5cdFx0XHRcdFx0cmVzdWx0LnN0b3AuYmluZCggcmVzdWx0ICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdGpRdWVyeS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkge1xuXHRcdGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApO1xuXHR9XG5cblx0Ly8gQXR0YWNoIGNhbGxiYWNrcyBmcm9tIG9wdGlvbnNcblx0YW5pbWF0aW9uXG5cdFx0LnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApXG5cdFx0LmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlIClcblx0XHQuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApXG5cdFx0LmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7XG5cblx0alF1ZXJ5LmZ4LnRpbWVyKFxuXHRcdGpRdWVyeS5leHRlbmQoIHRpY2ssIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRhbmltOiBhbmltYXRpb24sXG5cdFx0XHRxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWVcblx0XHR9IClcblx0KTtcblxuXHRyZXR1cm4gYW5pbWF0aW9uO1xufVxuXG5qUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7XG5cblx0dHdlZW5lcnM6IHtcblx0XHRcIipcIjogWyBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgdHdlZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSApO1xuXHRcdFx0YWRqdXN0Q1NTKCB0d2Vlbi5lbGVtLCBwcm9wLCByY3NzTnVtLmV4ZWMoIHZhbHVlICksIHR3ZWVuICk7XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fSBdXG5cdH0sXG5cblx0dHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIHByb3BzICkgKSB7XG5cdFx0XHRjYWxsYmFjayA9IHByb3BzO1xuXHRcdFx0cHJvcHMgPSBbIFwiKlwiIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb3BzID0gcHJvcHMubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblx0XHR9XG5cblx0XHR2YXIgcHJvcCxcblx0XHRcdGluZGV4ID0gMCxcblx0XHRcdGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRwcm9wID0gcHJvcHNbIGluZGV4IF07XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSA9IEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0udW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH0sXG5cblx0cHJlZmlsdGVyczogWyBkZWZhdWx0UHJlZmlsdGVyIF0sXG5cblx0cHJlZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJhY2ssIHByZXBlbmQgKSB7XG5cdFx0aWYgKCBwcmVwZW5kICkge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMudW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LnNwZWVkID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkge1xuXHR2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSBcIm9iamVjdFwiID8galF1ZXJ5LmV4dGVuZCgge30sIHNwZWVkICkgOiB7XG5cdFx0Y29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHxcblx0XHRcdGlzRnVuY3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsXG5cdFx0ZHVyYXRpb246IHNwZWVkLFxuXHRcdGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nXG5cdH07XG5cblx0Ly8gR28gdG8gdGhlIGVuZCBzdGF0ZSBpZiBmeCBhcmUgb2ZmXG5cdGlmICggalF1ZXJ5LmZ4Lm9mZiApIHtcblx0XHRvcHQuZHVyYXRpb24gPSAwO1xuXG5cdH0gZWxzZSB7XG5cdFx0aWYgKCB0eXBlb2Ygb3B0LmR1cmF0aW9uICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0aWYgKCBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyApIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gXCJmeFwiXG5cdGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkge1xuXHRcdG9wdC5xdWV1ZSA9IFwiZnhcIjtcblx0fVxuXG5cdC8vIFF1ZXVlaW5nXG5cdG9wdC5vbGQgPSBvcHQuY29tcGxldGU7XG5cblx0b3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7XG5cdFx0XHRvcHQub2xkLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdC5xdWV1ZSApIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTtcblx0XHR9XG5cdH07XG5cblx0cmV0dXJuIG9wdDtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXG5cdFx0Ly8gU2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbldpdGhpblRyZWUgKS5jc3MoIFwib3BhY2l0eVwiLCAwICkuc2hvdygpXG5cblx0XHRcdC8vIEFuaW1hdGUgdG8gdGhlIHZhbHVlIHNwZWNpZmllZFxuXHRcdFx0LmVuZCgpLmFuaW1hdGUoIHsgb3BhY2l0eTogdG8gfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fSxcblx0YW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksXG5cdFx0XHRvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksXG5cdFx0XHRkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0XG5cdFx0XHRcdHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcCApLCBvcHRhbGwgKTtcblxuXHRcdFx0XHQvLyBFbXB0eSBhbmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHlcblx0XHRcdFx0aWYgKCBlbXB0eSB8fCBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZmluaXNoXCIgKSApIHtcblx0XHRcdFx0XHRhbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uO1xuXG5cdFx0cmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0dGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDpcblx0XHRcdHRoaXMucXVldWUoIG9wdGFsbC5xdWV1ZSwgZG9BbmltYXRpb24gKTtcblx0fSxcblx0c3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7XG5cdFx0dmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHtcblx0XHRcdHZhciBzdG9wID0gaG9va3Muc3RvcDtcblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0c3RvcCggZ290b0VuZCApO1xuXHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Z290b0VuZCA9IGNsZWFyUXVldWU7XG5cdFx0XHRjbGVhclF1ZXVlID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggY2xlYXJRdWV1ZSApIHtcblx0XHRcdHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGRlcXVldWUgPSB0cnVlLFxuXHRcdFx0XHRpbmRleCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgXCJxdWV1ZUhvb2tzXCIsXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKTtcblxuXHRcdFx0aWYgKCBpbmRleCApIHtcblx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHtcblx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yICggaW5kZXggaW4gZGF0YSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHtcblx0XHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmXG5cdFx0XHRcdFx0KCB0eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkgKSB7XG5cblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7XG5cdFx0XHRcdFx0ZGVxdWV1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZC5cblx0XHRcdC8vIFRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2hcblx0XHRcdC8vIHdpbGwgZGVxdWV1ZSBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZC5cblx0XHRcdGlmICggZGVxdWV1ZSB8fCAhZ290b0VuZCApIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cdGZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0aWYgKCB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW5kZXgsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSxcblx0XHRcdFx0cXVldWUgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZVwiIF0sXG5cdFx0XHRcdGhvb2tzID0gZGF0YVsgdHlwZSArIFwicXVldWVIb29rc1wiIF0sXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDogMDtcblxuXHRcdFx0Ly8gRW5hYmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0YVxuXHRcdFx0ZGF0YS5maW5pc2ggPSB0cnVlO1xuXG5cdFx0XHQvLyBFbXB0eSB0aGUgcXVldWUgZmlyc3Rcblx0XHRcdGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTtcblxuXHRcdFx0aWYgKCBob29rcyAmJiBob29rcy5zdG9wICkge1xuXHRcdFx0XHRob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkge1xuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRpZiAoIHF1ZXVlWyBpbmRleCBdICYmIHF1ZXVlWyBpbmRleCBdLmZpbmlzaCApIHtcblx0XHRcdFx0XHRxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFR1cm4gb2ZmIGZpbmlzaGluZyBmbGFnXG5cdFx0XHRkZWxldGUgZGF0YS5maW5pc2g7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwidG9nZ2xlXCIsIFwic2hvd1wiLCBcImhpZGVcIiBdLCBmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdHZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdO1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09IFwiYm9vbGVhblwiID9cblx0XHRcdGNzc0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6XG5cdFx0XHR0aGlzLmFuaW1hdGUoIGdlbkZ4KCBuYW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbi8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnNcbmpRdWVyeS5lYWNoKCB7XG5cdHNsaWRlRG93bjogZ2VuRngoIFwic2hvd1wiICksXG5cdHNsaWRlVXA6IGdlbkZ4KCBcImhpZGVcIiApLFxuXHRzbGlkZVRvZ2dsZTogZ2VuRngoIFwidG9nZ2xlXCIgKSxcblx0ZmFkZUluOiB7IG9wYWNpdHk6IFwic2hvd1wiIH0sXG5cdGZhZGVPdXQ6IHsgb3BhY2l0eTogXCJoaWRlXCIgfSxcblx0ZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiBcInRvZ2dsZVwiIH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS50aW1lcnMgPSBbXTtcbmpRdWVyeS5meC50aWNrID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lcixcblx0XHRpID0gMCxcblx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzO1xuXG5cdGZ4Tm93ID0gRGF0ZS5ub3coKTtcblxuXHRmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7XG5cdFx0dGltZXIgPSB0aW1lcnNbIGkgXTtcblxuXHRcdC8vIFJ1biB0aGUgdGltZXIgYW5kIHNhZmVseSByZW1vdmUgaXQgd2hlbiBkb25lIChhbGxvd2luZyBmb3IgZXh0ZXJuYWwgcmVtb3ZhbClcblx0XHRpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciApIHtcblx0XHRcdHRpbWVycy5zcGxpY2UoIGktLSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdGlmICggIXRpbWVycy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5LmZ4LnN0b3AoKTtcblx0fVxuXHRmeE5vdyA9IHVuZGVmaW5lZDtcbn07XG5cbmpRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHtcblx0alF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApO1xuXHRqUXVlcnkuZnguc3RhcnQoKTtcbn07XG5cbmpRdWVyeS5meC5pbnRlcnZhbCA9IDEzO1xualF1ZXJ5LmZ4LnN0YXJ0ID0gZnVuY3Rpb24oKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpblByb2dyZXNzID0gdHJ1ZTtcblx0c2NoZWR1bGUoKTtcbn07XG5cbmpRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdGluUHJvZ3Jlc3MgPSBudWxsO1xufTtcblxualF1ZXJ5LmZ4LnNwZWVkcyA9IHtcblx0c2xvdzogNjAwLFxuXHRmYXN0OiAyMDAsXG5cblx0Ly8gRGVmYXVsdCBzcGVlZFxuXHRfZGVmYXVsdDogNDAwXG59O1xuXG5cbi8vIEJhc2VkIG9mZiBvZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhlbGZlcnMsIHdpdGggcGVybWlzc2lvbi5cbmpRdWVyeS5mbi5kZWxheSA9IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkge1xuXHR0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lO1xuXHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHtcblx0XHR2YXIgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7XG5cdFx0aG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdH07XG5cdH0gKTtcbn07XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICksXG5cdFx0c2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzZWxlY3RcIiApLFxuXHRcdG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvcHRpb25cIiApICk7XG5cblx0aW5wdXQudHlwZSA9IFwiY2hlY2tib3hcIjtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4zIG9ubHlcblx0Ly8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgXCJvblwiXG5cdHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSBcIlwiO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdFxuXHRzdXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBBbiBpbnB1dCBsb3NlcyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpb1xuXHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRpbnB1dC52YWx1ZSA9IFwidFwiO1xuXHRpbnB1dC50eXBlID0gXCJyYWRpb1wiO1xuXHRzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gXCJ0XCI7XG59ICkoKTtcblxuXG52YXIgYm9vbEhvb2ssXG5cdGF0dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5hdHRySGFuZGxlO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXR0cmlidXRlIGhvb2tzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxuXHRcdC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWRcblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblx0XHRcdGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0KCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogdW5kZWZpbmVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyBcIlwiICk7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0Ly8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWRcblx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7XG5cdH0sXG5cblx0YXR0ckhvb2tzOiB7XG5cdFx0dHlwZToge1xuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gXCJyYWRpb1wiICYmXG5cdFx0XHRcdFx0bm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHZhciB2YWwgPSBlbGVtLnZhbHVlO1xuXHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgdmFsdWUgKTtcblx0XHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRcdGVsZW0udmFsdWUgPSB2YWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0dmFyIG5hbWUsXG5cdFx0XHRpID0gMCxcblxuXHRcdFx0Ly8gQXR0cmlidXRlIG5hbWVzIGNhbiBjb250YWluIG5vbi1IVE1MIHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuXHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjYXR0cmlidXRlcy0yXG5cdFx0XHRhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXG5cdFx0aWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkge1xuXHRcdFx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzXG5ib29sSG9vayA9IHtcblx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2Vcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lO1xuXHR9XG59O1xuXG5qUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cXHcrL2cgKSwgZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHR2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7XG5cblx0YXR0ckhhbmRsZVsgbmFtZSBdID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciByZXQsIGhhbmRsZSxcblx0XHRcdGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRpZiAoICFpc1hNTCApIHtcblxuXHRcdFx0Ly8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRlclxuXHRcdFx0aGFuZGxlID0gYXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gcmV0O1xuXHRcdFx0cmV0ID0gZ2V0dGVyKCBlbGVtLCBuYW1lLCBpc1hNTCApICE9IG51bGwgP1xuXHRcdFx0XHRsb3dlcmNhc2VOYW1lIDpcblx0XHRcdFx0bnVsbDtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IGhhbmRsZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcbn0gKTtcblxuXG5cblxudmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyY2xpY2thYmxlID0gL14oPzphfGFyZWEpJC9pO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lIF07XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3Ncblx0XHRcdG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldHVybiBlbGVtWyBuYW1lIF07XG5cdH0sXG5cblx0cHJvcEhvb2tzOiB7XG5cdFx0dGFiSW5kZXg6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdFx0XHQvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGVcblx0XHRcdFx0Ly8gY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0XG5cdFx0XHRcdC8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCAodHJhYy0xMjA3Milcblx0XHRcdFx0dmFyIHRhYmluZGV4ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ0YWJpbmRleFwiICk7XG5cblx0XHRcdFx0aWYgKCB0YWJpbmRleCApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoIHRhYmluZGV4LCAxMCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHJmb2N1c2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8XG5cdFx0XHRcdFx0cmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiZcblx0XHRcdFx0XHRlbGVtLmhyZWZcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHByb3BGaXg6IHtcblx0XHRcImZvclwiOiBcImh0bWxGb3JcIixcblx0XHRcImNsYXNzXCI6IFwiY2xhc3NOYW1lXCJcblx0fVxufSApO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcbi8vIEFjY2Vzc2luZyB0aGUgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eVxuLy8gZm9yY2VzIHRoZSBicm93c2VyIHRvIHJlc3BlY3Qgc2V0dGluZyBzZWxlY3RlZFxuLy8gb24gdGhlIG9wdGlvblxuLy8gVGhlIGdldHRlciBlbnN1cmVzIGEgZGVmYXVsdCBvcHRpb24gaXMgc2VsZWN0ZWRcbi8vIHdoZW4gaW4gYW4gb3B0Z3JvdXBcbi8vIGVzbGludCBydWxlIFwibm8tdW51c2VkLWV4cHJlc3Npb25zXCIgaXMgZGlzYWJsZWQgZm9yIHRoaXMgY29kZVxuLy8gc2luY2UgaXQgY29uc2lkZXJzIHN1Y2ggYWNjZXNzaW9ucyBub29wXG5pZiAoICFzdXBwb3J0Lm9wdFNlbGVjdGVkICkge1xuXHRqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICYmIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0cGFyZW50LnNlbGVjdGVkSW5kZXg7XG5cblx0XHRcdFx0aWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5qUXVlcnkuZWFjaCggW1xuXHRcInRhYkluZGV4XCIsXG5cdFwicmVhZE9ubHlcIixcblx0XCJtYXhMZW5ndGhcIixcblx0XCJjZWxsU3BhY2luZ1wiLFxuXHRcImNlbGxQYWRkaW5nXCIsXG5cdFwicm93U3BhblwiLFxuXHRcImNvbFNwYW5cIixcblx0XCJ1c2VNYXBcIixcblx0XCJmcmFtZUJvcmRlclwiLFxuXHRcImNvbnRlbnRFZGl0YWJsZVwiXG5dLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnByb3BGaXhbIHRoaXMudG9Mb3dlckNhc2UoKSBdID0gdGhpcztcbn0gKTtcblxuXG5cblxuXHQvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZSBhY2NvcmRpbmcgdG8gSFRNTCBzcGVjXG5cdC8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2UtYXNjaWktd2hpdGVzcGFjZVxuXHRmdW5jdGlvbiBzdHJpcEFuZENvbGxhcHNlKCB2YWx1ZSApIHtcblx0XHR2YXIgdG9rZW5zID0gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0XHRyZXR1cm4gdG9rZW5zLmpvaW4oIFwiIFwiICk7XG5cdH1cblxuXG5mdW5jdGlvbiBnZXRDbGFzcyggZWxlbSApIHtcblx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlICYmIGVsZW0uZ2V0QXR0cmlidXRlKCBcImNsYXNzXCIgKSB8fCBcIlwiO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VzVG9BcnJheSggdmFsdWUgKSB7XG5cdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdH1cblx0cmV0dXJuIFtdO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGFkZENsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZXMsIGN1ciwgY3VyVmFsdWUsIGNsYXNzTmFtZSwgaSwgZmluYWxWYWx1ZTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NOYW1lcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc05hbWVzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCB0aGlzICk7XG5cdFx0XHRcdGN1ciA9IHRoaXMubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkgXTtcblx0XHRcdFx0XHRcdGlmICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhc3NOYW1lICsgXCIgXCIgKSA8IDAgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciArPSBjbGFzc05hbWUgKyBcIiBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZXMsIGN1ciwgY3VyVmFsdWUsIGNsYXNzTmFtZSwgaSwgZmluYWxWYWx1ZTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmF0dHIoIFwiY2xhc3NcIiwgXCJcIiApO1xuXHRcdH1cblxuXHRcdGNsYXNzTmFtZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3NOYW1lcy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXG5cdFx0XHRcdC8vIFRoaXMgZXhwcmVzc2lvbiBpcyBoZXJlIGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5IChzZWUgYWRkQ2xhc3MpXG5cdFx0XHRcdGN1ciA9IHRoaXMubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkgXTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlICphbGwqIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGFzc05hbWUgKyBcIiBcIiApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciA9IGN1ci5yZXBsYWNlKCBcIiBcIiArIGNsYXNzTmFtZSArIFwiIFwiLCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZXMsIGNsYXNzTmFtZSwgaSwgc2VsZixcblx0XHRcdHR5cGUgPSB0eXBlb2YgdmFsdWUsXG5cdFx0XHRpc1ZhbGlkVmFsdWUgPSB0eXBlID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3MoXG5cdFx0XHRcdFx0dmFsdWUuY2FsbCggdGhpcywgaSwgZ2V0Q2xhc3MoIHRoaXMgKSwgc3RhdGVWYWwgKSxcblx0XHRcdFx0XHRzdGF0ZVZhbFxuXHRcdFx0XHQpO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZW9mIHN0YXRlVmFsID09PSBcImJvb2xlYW5cIiAmJiBpc1ZhbGlkVmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGVWYWwgPyB0aGlzLmFkZENsYXNzKCB2YWx1ZSApIDogdGhpcy5yZW1vdmVDbGFzcyggdmFsdWUgKTtcblx0XHR9XG5cblx0XHRjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNWYWxpZFZhbHVlICkge1xuXG5cdFx0XHRcdC8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzXG5cdFx0XHRcdHNlbGYgPSBqUXVlcnkoIHRoaXMgKTtcblxuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0XG5cdFx0XHRcdFx0aWYgKCBzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKSApIHtcblx0XHRcdFx0XHRcdHNlbGYucmVtb3ZlQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZWxmLmFkZENsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gVG9nZ2xlIHdob2xlIGNsYXNzIG5hbWVcblx0XHRcdH0gZWxzZSBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRcdGNsYXNzTmFtZSA9IGdldENsYXNzKCB0aGlzICk7XG5cdFx0XHRcdGlmICggY2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgY2xhc3NOYW1lIGlmIHNldFxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIsIGNsYXNzTmFtZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGVsZW1lbnQgaGFzIGEgY2xhc3MgbmFtZSBvciBpZiB3ZSdyZSBwYXNzZWQgYGZhbHNlYCxcblx0XHRcdFx0Ly8gdGhlbiByZW1vdmUgdGhlIHdob2xlIGNsYXNzbmFtZSAoaWYgdGhlcmUgd2FzIG9uZSwgdGhlIGFib3ZlIHNhdmVkIGl0KS5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgc2F2ZWQgKGlmIGFueXRoaW5nKSxcblx0XHRcdFx0Ly8gZmFsbGluZyBiYWNrIHRvIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm90aGluZyB3YXMgc3RvcmVkLlxuXHRcdFx0XHRpZiAoIHRoaXMuc2V0QXR0cmlidXRlICkge1xuXHRcdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNlID9cblx0XHRcdFx0XHRcdFx0XCJcIiA6XG5cdFx0XHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBjbGFzc05hbWUsIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIjtcblx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGdldENsYXNzKCBlbGVtICkgKSArIFwiIFwiICkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBycmV0dXJuID0gL1xcci9nO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHZhbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBob29rcywgcmV0LCB2YWx1ZUlzRnVuY3Rpb24sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0XHRpZiAoIGhvb2tzICYmXG5cdFx0XHRcdFx0XCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBcInZhbHVlXCIgKSApICE9PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldCA9IGVsZW0udmFsdWU7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNlc1xuXHRcdFx0XHRpZiAoIHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldC5yZXBsYWNlKCBycmV0dXJuLCBcIlwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXJcblx0XHRcdFx0cmV0dXJuIHJldCA9PSBudWxsID8gXCJcIiA6IHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdHZhciB2YWw7XG5cblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0dmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgalF1ZXJ5KCB0aGlzICkudmFsKCkgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyBcIlwiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR2YWwgPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHR2YWwgKz0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHZhbCA9IGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIjtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0Ly8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmdcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgXCJ2YWx1ZVwiICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbDtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHR2YWxIb29rczoge1xuXHRcdG9wdGlvbjoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHR2YXIgdmFsID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ2YWx1ZVwiICk7XG5cdFx0XHRcdHJldHVybiB2YWwgIT0gbnVsbCA/XG5cdFx0XHRcdFx0dmFsIDpcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSBvbmx5XG5cdFx0XHRcdFx0Ly8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKHRyYWMtMTQ2ODYsIHRyYWMtMTQ4NTgpXG5cdFx0XHRcdFx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZVxuXHRcdFx0XHRcdHN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlbGVjdDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHZhbHVlLCBvcHRpb24sIGksXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHRpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCxcblx0XHRcdFx0XHRvbmUgPSBlbGVtLnR5cGUgPT09IFwic2VsZWN0LW9uZVwiLFxuXHRcdFx0XHRcdHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSxcblx0XHRcdFx0XHRtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHRpZiAoIGluZGV4IDwgMCApIHtcblx0XHRcdFx0XHRpID0gbWF4O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSA9IG9uZSA/IGluZGV4IDogMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcblx0XHRcdFx0Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHQvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICh0cmFjLTI1NTEpXG5cdFx0XHRcdFx0aWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmXG5cblx0XHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQgb3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0XHRcdFx0XHQhb3B0aW9uLmRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRcdCggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8XG5cdFx0XHRcdFx0XHRcdFx0IW5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgXCJvcHRncm91cFwiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvblxuXHRcdFx0XHRcdFx0dmFsdWUgPSBqUXVlcnkoIG9wdGlvbiApLnZhbCgpO1xuXG5cdFx0XHRcdFx0XHQvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0c1xuXHRcdFx0XHRcdFx0aWYgKCBvbmUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXlcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIG9wdGlvblNldCwgb3B0aW9uLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0dmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKSxcblx0XHRcdFx0XHRpID0gb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24gKi9cblxuXHRcdFx0XHRcdGlmICggb3B0aW9uLnNlbGVjdGVkID1cblx0XHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTFcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG9wdGlvblNldCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRm9yY2UgYnJvd3NlcnMgdG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXRcblx0XHRcdFx0aWYgKCAhb3B0aW9uU2V0ICkge1xuXHRcdFx0XHRcdGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyXG5qUXVlcnkuZWFjaCggWyBcInJhZGlvXCIsIFwiY2hlY2tib3hcIiBdLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7XG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52YWwoKSwgdmFsdWUgKSA+IC0xICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoICFzdXBwb3J0LmNoZWNrT24gKSB7XG5cdFx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBudWxsID8gXCJvblwiIDogZWxlbS52YWx1ZTtcblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFJldHVybiBqUXVlcnkgZm9yIGF0dHJpYnV0ZXMtb25seSBpbmNsdXNpb25cbnZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcblxudmFyIG5vbmNlID0geyBndWlkOiBEYXRlLm5vdygpIH07XG5cbnZhciBycXVlcnkgPSAoIC9cXD8vICk7XG5cblxuXG4vLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nXG5qUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHtcblx0dmFyIHhtbCwgcGFyc2VyRXJyb3JFbGVtO1xuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gSUUgdGhyb3dzIG9uIHBhcnNlRnJvbVN0cmluZyB3aXRoIGludmFsaWQgaW5wdXQuXG5cdHRyeSB7XG5cdFx0eG1sID0gKCBuZXcgd2luZG93LkRPTVBhcnNlcigpICkucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCBcInRleHQveG1sXCIgKTtcblx0fSBjYXRjaCAoIGUgKSB7fVxuXG5cdHBhcnNlckVycm9yRWxlbSA9IHhtbCAmJiB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwicGFyc2VyZXJyb3JcIiApWyAwIF07XG5cdGlmICggIXhtbCB8fCBwYXJzZXJFcnJvckVsZW0gKSB7XG5cdFx0alF1ZXJ5LmVycm9yKCBcIkludmFsaWQgWE1MOiBcIiArIChcblx0XHRcdHBhcnNlckVycm9yRWxlbSA/XG5cdFx0XHRcdGpRdWVyeS5tYXAoIHBhcnNlckVycm9yRWxlbS5jaGlsZE5vZGVzLCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsLnRleHRDb250ZW50O1xuXHRcdFx0XHR9ICkuam9pbiggXCJcXG5cIiApIDpcblx0XHRcdFx0ZGF0YVxuXHRcdCkgKTtcblx0fVxuXHRyZXR1cm4geG1sO1xufTtcblxuXG52YXIgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sXG5cdHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24oIGUgKSB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0fTtcblxualF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmV2ZW50LCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7XG5cblx0XHR2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxlLCBzcGVjaWFsLCBsYXN0RWxlbWVudCxcblx0XHRcdGV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLFxuXHRcdFx0dHlwZSA9IGhhc093bi5jYWxsKCBldmVudCwgXCJ0eXBlXCIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCxcblx0XHRcdG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwibmFtZXNwYWNlXCIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdCggXCIuXCIgKSA6IFtdO1xuXG5cdFx0Y3VyID0gbGFzdEVsZW1lbnQgPSB0bXAgPSBlbGVtID0gZWxlbSB8fCBkb2N1bWVudDtcblxuXHRcdC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gZm9jdXMvYmx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQgbm93XG5cdFx0aWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZS5pbmRleE9mKCBcIi5cIiApID4gLTEgKSB7XG5cblx0XHRcdC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKClcblx0XHRcdG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCBcIi5cIiApO1xuXHRcdFx0dHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTtcblx0XHRcdG5hbWVzcGFjZXMuc29ydCgpO1xuXHRcdH1cblx0XHRvbnR5cGUgPSB0eXBlLmluZGV4T2YoIFwiOlwiICkgPCAwICYmIFwib25cIiArIHR5cGU7XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmdcblx0XHRldmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdGV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5cGVvZiBldmVudCA9PT0gXCJvYmplY3RcIiAmJiBldmVudCApO1xuXG5cdFx0Ly8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKVxuXHRcdGV2ZW50LmlzVHJpZ2dlciA9IG9ubHlIYW5kbGVycyA/IDIgOiAzO1xuXHRcdGV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKTtcblx0XHRldmVudC5ybmFtZXNwYWNlID0gZXZlbnQubmFtZXNwYWNlID9cblx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApIDpcblx0XHRcdG51bGw7XG5cblx0XHQvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWRcblx0XHRldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7XG5cdFx0aWYgKCAhZXZlbnQudGFyZ2V0ICkge1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZWxlbTtcblx0XHR9XG5cblx0XHQvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0XG5cdFx0ZGF0YSA9IGRhdGEgPT0gbnVsbCA/XG5cdFx0XHRbIGV2ZW50IF0gOlxuXHRcdFx0alF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7XG5cblx0XHQvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzXG5cdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAodHJhYy05OTUxKVxuXHRcdC8vIEJ1YmJsZSB1cCB0byBkb2N1bWVudCwgdGhlbiB0byB3aW5kb3c7IHdhdGNoIGZvciBhIGdsb2JhbCBvd25lckRvY3VtZW50IHZhciAodHJhYy05NzI0KVxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGxhc3RFbGVtZW50ID0gY3VyO1xuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9ICggZGF0YVByaXYuZ2V0KCBjdXIsIFwiZXZlbnRzXCIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsICkgKVsgZXZlbnQudHlwZSBdICYmXG5cdFx0XHRcdGRhdGFQcml2LmdldCggY3VyLCBcImhhbmRsZVwiICk7XG5cdFx0XHRpZiAoIGhhbmRsZSApIHtcblx0XHRcdFx0aGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTmF0aXZlIGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9IG9udHlwZSAmJiBjdXJbIG9udHlwZSBdO1xuXHRcdFx0aWYgKCBoYW5kbGUgJiYgaGFuZGxlLmFwcGx5ICYmIGFjY2VwdERhdGEoIGN1ciApICkge1xuXHRcdFx0XHRldmVudC5yZXN1bHQgPSBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRldmVudC50eXBlID0gdHlwZTtcblxuXHRcdC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3dcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkge1xuXG5cdFx0XHRpZiAoICggIXNwZWNpYWwuX2RlZmF1bHQgfHxcblx0XHRcdFx0c3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlICkgJiZcblx0XHRcdFx0YWNjZXB0RGF0YSggZWxlbSApICkge1xuXG5cdFx0XHRcdC8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZXZlbnQuXG5cdFx0XHRcdC8vIERvbid0IGRvIGRlZmF1bHQgYWN0aW9ucyBvbiB3aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwgdmFyaWFibGVzIGJlICh0cmFjLTYxNzApXG5cdFx0XHRcdGlmICggb250eXBlICYmIGlzRnVuY3Rpb24oIGVsZW1bIHR5cGUgXSApICYmICFpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3QgcmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygpIG1ldGhvZFxuXHRcdFx0XHRcdHRtcCA9IGVsZW1bIG9udHlwZSBdO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IG51bGw7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJldmVudCByZS10cmlnZ2VyaW5nIG9mIHRoZSBzYW1lIGV2ZW50LCBzaW5jZSB3ZSBhbHJlYWR5IGJ1YmJsZWQgaXQgYWJvdmVcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdHlwZTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbVsgdHlwZSBdKCk7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gdG1wO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0Ly8gUGlnZ3liYWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lXG5cdC8vIFVzZWQgb25seSBmb3IgYGZvY3VzKGluIHwgb3V0KWAgZXZlbnRzXG5cdHNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwgZWxlbSwgZXZlbnQgKSB7XG5cdFx0dmFyIGUgPSBqUXVlcnkuZXh0ZW5kKFxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCgpLFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdGlzU2ltdWxhdGVkOiB0cnVlXG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBlLCBudWxsLCBlbGVtICk7XG5cdH1cblxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpcyApO1xuXHRcdH0gKTtcblx0fSxcblx0dHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBlbGVtID0gdGhpc1sgMCBdO1xuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgZWxlbSwgdHJ1ZSApO1xuXHRcdH1cblx0fVxufSApO1xuXG5cbnZhclxuXHRyYnJhY2tldCA9IC9cXFtcXF0kLyxcblx0ckNSTEYgPSAvXFxyP1xcbi9nLFxuXHRyc3VibWl0dGVyVHlwZXMgPSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksXG5cdHJzdWJtaXR0YWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtcblxuZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkge1xuXHR2YXIgbmFtZTtcblxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIG9iaiApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIGFycmF5IGl0ZW0uXG5cdFx0alF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7XG5cdFx0XHRpZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkge1xuXG5cdFx0XHRcdC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci5cblx0XHRcdFx0YWRkKCBwcmVmaXgsIHYgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBJdGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9yIG9iamVjdCksIGVuY29kZSBpdHMgbnVtZXJpYyBpbmRleC5cblx0XHRcdFx0YnVpbGRQYXJhbXMoXG5cdFx0XHRcdFx0cHJlZml4ICsgXCJbXCIgKyAoIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT0gbnVsbCA/IGkgOiBcIlwiICkgKyBcIl1cIixcblx0XHRcdFx0XHR2LFxuXHRcdFx0XHRcdHRyYWRpdGlvbmFsLFxuXHRcdFx0XHRcdGFkZFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHR9IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgdG9UeXBlKCBvYmogKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBvYmplY3QgaXRlbS5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXggKyBcIltcIiArIG5hbWUgKyBcIl1cIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS5cblx0XHRhZGQoIHByZWZpeCwgb2JqICk7XG5cdH1cbn1cblxuLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2Zcbi8vIGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZ1xualF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24oIGEsIHRyYWRpdGlvbmFsICkge1xuXHR2YXIgcHJlZml4LFxuXHRcdHMgPSBbXSxcblx0XHRhZGQgPSBmdW5jdGlvbigga2V5LCB2YWx1ZU9yRnVuY3Rpb24gKSB7XG5cblx0XHRcdC8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCBhbmQgdXNlIGl0cyByZXR1cm4gdmFsdWVcblx0XHRcdHZhciB2YWx1ZSA9IGlzRnVuY3Rpb24oIHZhbHVlT3JGdW5jdGlvbiApID9cblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uKCkgOlxuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb247XG5cblx0XHRcdHNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgXCI9XCIgK1xuXHRcdFx0XHRlbmNvZGVVUklDb21wb25lbnQoIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKTtcblx0XHR9O1xuXG5cdGlmICggYSA9PSBudWxsICkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0Ly8gSWYgYW4gYXJyYXkgd2FzIHBhc3NlZCBpbiwgYXNzdW1lIHRoYXQgaXQgaXMgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cy5cblx0aWYgKCBBcnJheS5pc0FycmF5KCBhICkgfHwgKCBhLmpxdWVyeSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGEgKSApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHRoZSBmb3JtIGVsZW1lbnRzXG5cdFx0alF1ZXJ5LmVhY2goIGEsIGZ1bmN0aW9uKCkge1xuXHRcdFx0YWRkKCB0aGlzLm5hbWUsIHRoaXMudmFsdWUgKTtcblx0XHR9ICk7XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIElmIHRyYWRpdGlvbmFsLCBlbmNvZGUgdGhlIFwib2xkXCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyXG5cdFx0Ly8gZGlkIGl0KSwgb3RoZXJ3aXNlIGVuY29kZSBwYXJhbXMgcmVjdXJzaXZlbHkuXG5cdFx0Zm9yICggcHJlZml4IGluIGEgKSB7XG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4LCBhWyBwcmVmaXggXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6YXRpb25cblx0cmV0dXJuIHMuam9pbiggXCImXCIgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2VyaWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5LnBhcmFtKCB0aGlzLnNlcmlhbGl6ZUFycmF5KCkgKTtcblx0fSxcblx0c2VyaWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIENhbiBhZGQgcHJvcEhvb2sgZm9yIFwiZWxlbWVudHNcIiB0byBmaWx0ZXIgb3IgYWRkIGZvcm0gZWxlbWVudHNcblx0XHRcdHZhciBlbGVtZW50cyA9IGpRdWVyeS5wcm9wKCB0aGlzLCBcImVsZW1lbnRzXCIgKTtcblx0XHRcdHJldHVybiBlbGVtZW50cyA/IGpRdWVyeS5tYWtlQXJyYXkoIGVsZW1lbnRzICkgOiB0aGlzO1xuXHRcdH0gKS5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cblx0XHRcdC8vIFVzZSAuaXMoIFwiOmRpc2FibGVkXCIgKSBzbyB0aGF0IGZpZWxkc2V0W2Rpc2FibGVkXSB3b3Jrc1xuXHRcdFx0cmV0dXJuIHRoaXMubmFtZSAmJiAhalF1ZXJ5KCB0aGlzICkuaXMoIFwiOmRpc2FibGVkXCIgKSAmJlxuXHRcdFx0XHRyc3VibWl0dGFibGUudGVzdCggdGhpcy5ub2RlTmFtZSApICYmICFyc3VibWl0dGVyVHlwZXMudGVzdCggdHlwZSApICYmXG5cdFx0XHRcdCggdGhpcy5jaGVja2VkIHx8ICFyY2hlY2thYmxlVHlwZS50ZXN0KCB0eXBlICkgKTtcblx0XHR9ICkubWFwKCBmdW5jdGlvbiggX2ksIGVsZW0gKSB7XG5cdFx0XHR2YXIgdmFsID0galF1ZXJ5KCB0aGlzICkudmFsKCk7XG5cblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbCApICkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsICkge1xuXHRcdFx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHR9ICkuZ2V0KCk7XG5cdH1cbn0gKTtcblxuXG52YXJcblx0cjIwID0gLyUyMC9nLFxuXHRyaGFzaCA9IC8jLiokLyxcblx0cmFudGlDYWNoZSA9IC8oWz8mXSlfPVteJl0qLyxcblx0cmhlYWRlcnMgPSAvXiguKj8pOlsgXFx0XSooW15cXHJcXG5dKikkL21nLFxuXG5cdC8vIHRyYWMtNzY1MywgdHJhYy04MTI1LCB0cmFjLTgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvblxuXHRybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLFxuXHRybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLyxcblx0cnByb3RvY29sID0gL15cXC9cXC8vLFxuXG5cdC8qIFByZWZpbHRlcnNcblx0ICogMSkgVGhleSBhcmUgdXNlZnVsIHRvIGludHJvZHVjZSBjdXN0b20gZGF0YVR5cGVzIChzZWUgYWpheC9qc29ucC5qcyBmb3IgYW4gZXhhbXBsZSlcblx0ICogMikgVGhlc2UgYXJlIGNhbGxlZDpcblx0ICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBhIHRyYW5zcG9ydFxuXHQgKiAgICAtIEFGVEVSIHBhcmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0cmluZyBpZiBzLnByb2Nlc3NEYXRhIGlzIHRydWUpXG5cdCAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogNCkgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiA1KSBleGVjdXRpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBjb250aW51ZSBkb3duIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0cHJlZmlsdGVycyA9IHt9LFxuXG5cdC8qIFRyYW5zcG9ydHMgYmluZGluZ3Ncblx0ICogMSkga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGdvIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0dHJhbnNwb3J0cyA9IHt9LFxuXG5cdC8vIEF2b2lkIGNvbW1lbnQtcHJvbG9nIGNoYXIgc2VxdWVuY2UgKHRyYWMtMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb25cblx0YWxsVHlwZXMgPSBcIiovXCIuY29uY2F0KCBcIipcIiApLFxuXG5cdC8vIEFuY2hvciB0YWcgZm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvcmlnaW5BbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXG5vcmlnaW5BbmNob3IuaHJlZiA9IGxvY2F0aW9uLmhyZWY7XG5cbi8vIEJhc2UgXCJjb25zdHJ1Y3RvclwiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnRcbmZ1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkge1xuXG5cdC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gXCIqXCJcblx0cmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uO1xuXHRcdFx0ZGF0YVR5cGVFeHByZXNzaW9uID0gXCIqXCI7XG5cdFx0fVxuXG5cdFx0dmFyIGRhdGFUeXBlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBmdW5jICkgKSB7XG5cblx0XHRcdC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb25cblx0XHRcdHdoaWxlICggKCBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHQvLyBQcmVwZW5kIGlmIHJlcXVlc3RlZFxuXHRcdFx0XHRpZiAoIGRhdGFUeXBlWyAwIF0gPT09IFwiK1wiICkge1xuXHRcdFx0XHRcdGRhdGFUeXBlID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCBcIipcIjtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnVuc2hpZnQoIGZ1bmMgKTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYXBwZW5kXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS5wdXNoKCBmdW5jICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0c1xuZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApIHtcblxuXHR2YXIgaW5zcGVjdGVkID0ge30sXG5cdFx0c2Vla2luZ1RyYW5zcG9ydCA9ICggc3RydWN0dXJlID09PSB0cmFuc3BvcnRzICk7XG5cblx0ZnVuY3Rpb24gaW5zcGVjdCggZGF0YVR5cGUgKSB7XG5cdFx0dmFyIHNlbGVjdGVkO1xuXHRcdGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7XG5cdFx0alF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSwgZnVuY3Rpb24oIF8sIHByZWZpbHRlck9yRmFjdG9yeSApIHtcblx0XHRcdHZhciBkYXRhVHlwZU9yVHJhbnNwb3J0ID0gcHJlZmlsdGVyT3JGYWN0b3J5KCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7XG5cdFx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZU9yVHJhbnNwb3J0ID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzZWVraW5nVHJhbnNwb3J0ICYmICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHtcblxuXHRcdFx0XHRvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdGluc3BlY3QoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmICggc2Vla2luZ1RyYW5zcG9ydCApIHtcblx0XHRcdFx0cmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRyZXR1cm4gc2VsZWN0ZWQ7XG5cdH1cblxuXHRyZXR1cm4gaW5zcGVjdCggb3B0aW9ucy5kYXRhVHlwZXNbIDAgXSApIHx8ICFpbnNwZWN0ZWRbIFwiKlwiIF0gJiYgaW5zcGVjdCggXCIqXCIgKTtcbn1cblxuLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zXG4vLyB0aGF0IHRha2VzIFwiZmxhdFwiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKVxuLy8gRml4ZXMgdHJhYy05ODg3XG5mdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHtcblx0dmFyIGtleSwgZGVlcCxcblx0XHRmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307XG5cblx0Zm9yICgga2V5IGluIHNyYyApIHtcblx0XHRpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdCggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8ICggZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07XG5cdFx0fVxuXHR9XG5cdGlmICggZGVlcCApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTtcblx0fVxuXG5cdHJldHVybiB0YXJnZXQ7XG59XG5cbi8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDpcbiAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpXG4gKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHtcblxuXHR2YXIgY3QsIHR5cGUsIGZpbmFsRGF0YVR5cGUsIGZpcnN0RGF0YVR5cGUsXG5cdFx0Y29udGVudHMgPSBzLmNvbnRlbnRzLFxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzO1xuXG5cdC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzXG5cdHdoaWxlICggZGF0YVR5cGVzWyAwIF0gPT09IFwiKlwiICkge1xuXHRcdGRhdGFUeXBlcy5zaGlmdCgpO1xuXHRcdGlmICggY3QgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJDb250ZW50LVR5cGVcIiApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZVxuXHRpZiAoIGN0ICkge1xuXHRcdGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7XG5cdFx0XHRpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkge1xuXHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGVcblx0aWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7XG5cdFx0ZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdO1xuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlc1xuXHRcdGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkge1xuXHRcdFx0aWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgXCIgXCIgKyBkYXRhVHlwZXNbIDAgXSBdICkge1xuXHRcdFx0XHRmaW5hbERhdGFUeXBlID0gdHlwZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICFmaXJzdERhdGFUeXBlICkge1xuXHRcdFx0XHRmaXJzdERhdGFUeXBlID0gdHlwZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmVcblx0XHRmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlO1xuXHR9XG5cblx0Ly8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZVxuXHQvLyBXZSBhZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZFxuXHQvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG5cdGlmICggZmluYWxEYXRhVHlwZSApIHtcblx0XHRpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkge1xuXHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdO1xuXHR9XG59XG5cbi8qIENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9uc2VcbiAqIEFsc28gc2V0cyB0aGUgcmVzcG9uc2VYWFggZmllbGRzIG9uIHRoZSBqcVhIUiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKSB7XG5cdHZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LFxuXHRcdGNvbnZlcnRlcnMgPSB7fSxcblxuXHRcdC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgZGF0YVR5cGVzIGluIGNhc2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb25cblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgpO1xuXG5cdC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2FzZWQga2V5c1xuXHRpZiAoIGRhdGFUeXBlc1sgMSBdICkge1xuXHRcdGZvciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkge1xuXHRcdFx0Y29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTtcblx0XHR9XG5cdH1cblxuXHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0Ly8gQ29udmVydCB0byBlYWNoIHNlcXVlbnRpYWwgZGF0YVR5cGVcblx0d2hpbGUgKCBjdXJyZW50ICkge1xuXG5cdFx0aWYgKCBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gKSB7XG5cdFx0XHRqcVhIUlsgcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdIF0gPSByZXNwb25zZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZFxuXHRcdGlmICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHtcblx0XHRcdHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApO1xuXHRcdH1cblxuXHRcdHByZXYgPSBjdXJyZW50O1xuXHRcdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHRcdGlmICggY3VycmVudCApIHtcblxuXHRcdFx0Ly8gVGhlcmUncyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVudCBkYXRhVHlwZSBpcyBub24tYXV0b1xuXHRcdFx0aWYgKCBjdXJyZW50ID09PSBcIipcIiApIHtcblxuXHRcdFx0XHRjdXJyZW50ID0gcHJldjtcblxuXHRcdFx0Ly8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudFxuXHRcdFx0fSBlbHNlIGlmICggcHJldiAhPT0gXCIqXCIgJiYgcHJldiAhPT0gY3VycmVudCApIHtcblxuXHRcdFx0XHQvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRlclxuXHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgY3VycmVudCBdIHx8IGNvbnZlcnRlcnNbIFwiKiBcIiArIGN1cnJlbnQgXTtcblxuXHRcdFx0XHQvLyBJZiBub25lIGZvdW5kLCBzZWVrIGEgcGFpclxuXHRcdFx0XHRpZiAoICFjb252ICkge1xuXHRcdFx0XHRcdGZvciAoIGNvbnYyIGluIGNvbnZlcnRlcnMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIElmIGNvbnYyIG91dHB1dHMgY3VycmVudFxuXHRcdFx0XHRcdFx0dG1wID0gY29udjIuc3BsaXQoIFwiIFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIHRtcFsgMSBdID09PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIElmIHByZXYgY2FuIGJlIGNvbnZlcnRlZCB0byBhY2NlcHRlZCBpbnB1dFxuXHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgdG1wWyAwIF0gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlcnNbIFwiKiBcIiArIHRtcFsgMCBdIF07XG5cdFx0XHRcdFx0XHRcdGlmICggY29udiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgPT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgY29udjIgXTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgaW5zZXJ0IHRoZSBpbnRlcm1lZGlhdGUgZGF0YVR5cGVcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudCA9IHRtcFsgMCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBdICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpXG5cdFx0XHRcdGlmICggY29udiAhPT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdC8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW1cblx0XHRcdFx0XHRpZiAoIGNvbnYgJiYgcy50aHJvd3MgKSB7XG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlOiBcInBhcnNlcmVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGNvbnYgPyBlIDogXCJObyBjb252ZXJzaW9uIGZyb20gXCIgKyBwcmV2ICsgXCIgdG8gXCIgKyBjdXJyZW50XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgc3RhdGU6IFwic3VjY2Vzc1wiLCBkYXRhOiByZXNwb25zZSB9O1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzXG5cdGFjdGl2ZTogMCxcblxuXHQvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0XG5cdGxhc3RNb2RpZmllZDoge30sXG5cdGV0YWc6IHt9LFxuXG5cdGFqYXhTZXR0aW5nczoge1xuXHRcdHVybDogbG9jYXRpb24uaHJlZixcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGlzTG9jYWw6IHJsb2NhbFByb3RvY29sLnRlc3QoIGxvY2F0aW9uLnByb3RvY29sICksXG5cdFx0Z2xvYmFsOiB0cnVlLFxuXHRcdHByb2Nlc3NEYXRhOiB0cnVlLFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLFxuXG5cdFx0Lypcblx0XHR0aW1lb3V0OiAwLFxuXHRcdGRhdGE6IG51bGwsXG5cdFx0ZGF0YVR5cGU6IG51bGwsXG5cdFx0dXNlcm5hbWU6IG51bGwsXG5cdFx0cGFzc3dvcmQ6IG51bGwsXG5cdFx0Y2FjaGU6IG51bGwsXG5cdFx0dGhyb3dzOiBmYWxzZSxcblx0XHR0cmFkaXRpb25hbDogZmFsc2UsXG5cdFx0aGVhZGVyczoge30sXG5cdFx0Ki9cblxuXHRcdGFjY2VwdHM6IHtcblx0XHRcdFwiKlwiOiBhbGxUeXBlcyxcblx0XHRcdHRleHQ6IFwidGV4dC9wbGFpblwiLFxuXHRcdFx0aHRtbDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdHhtbDogXCJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sXCIsXG5cdFx0XHRqc29uOiBcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdFwiXG5cdFx0fSxcblxuXHRcdGNvbnRlbnRzOiB7XG5cdFx0XHR4bWw6IC9cXGJ4bWxcXGIvLFxuXHRcdFx0aHRtbDogL1xcYmh0bWwvLFxuXHRcdFx0anNvbjogL1xcYmpzb25cXGIvXG5cdFx0fSxcblxuXHRcdHJlc3BvbnNlRmllbGRzOiB7XG5cdFx0XHR4bWw6IFwicmVzcG9uc2VYTUxcIixcblx0XHRcdHRleHQ6IFwicmVzcG9uc2VUZXh0XCIsXG5cdFx0XHRqc29uOiBcInJlc3BvbnNlSlNPTlwiXG5cdFx0fSxcblxuXHRcdC8vIERhdGEgY29udmVydGVyc1xuXHRcdC8vIEtleXMgc2VwYXJhdGUgc291cmNlIChvciBjYXRjaGFsbCBcIipcIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGggYSBzaW5nbGUgc3BhY2Vcblx0XHRjb252ZXJ0ZXJzOiB7XG5cblx0XHRcdC8vIENvbnZlcnQgYW55dGhpbmcgdG8gdGV4dFxuXHRcdFx0XCIqIHRleHRcIjogU3RyaW5nLFxuXG5cdFx0XHQvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbilcblx0XHRcdFwidGV4dCBodG1sXCI6IHRydWUsXG5cblx0XHRcdC8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4cHJlc3Npb25cblx0XHRcdFwidGV4dCBqc29uXCI6IEpTT04ucGFyc2UsXG5cblx0XHRcdC8vIFBhcnNlIHRleHQgYXMgeG1sXG5cdFx0XHRcInRleHQgeG1sXCI6IGpRdWVyeS5wYXJzZVhNTFxuXHRcdH0sXG5cblx0XHQvLyBGb3Igb3B0aW9ucyB0aGF0IHNob3VsZG4ndCBiZSBkZWVwIGV4dGVuZGVkOlxuXHRcdC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWZcblx0XHQvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZVxuXHRcdC8vIGRlZXAgZXh0ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKVxuXHRcdGZsYXRPcHRpb25zOiB7XG5cdFx0XHR1cmw6IHRydWUsXG5cdFx0XHRjb250ZXh0OiB0cnVlXG5cdFx0fVxuXHR9LFxuXG5cdC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0XG5cdC8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxkcy5cblx0Ly8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy5cblx0YWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHtcblx0XHRyZXR1cm4gc2V0dGluZ3MgP1xuXG5cdFx0XHQvLyBCdWlsZGluZyBhIHNldHRpbmdzIG9iamVjdFxuXHRcdFx0YWpheEV4dGVuZCggYWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICksIHNldHRpbmdzICkgOlxuXG5cdFx0XHQvLyBFeHRlbmRpbmcgYWpheFNldHRpbmdzXG5cdFx0XHRhamF4RXh0ZW5kKCBqUXVlcnkuYWpheFNldHRpbmdzLCB0YXJnZXQgKTtcblx0fSxcblxuXHRhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSxcblx0YWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksXG5cblx0Ly8gTWFpbiBtZXRob2Rcblx0YWpheDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHtcblxuXHRcdC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNpbXVsYXRlIHByZS0xLjUgc2lnbmF0dXJlXG5cdFx0aWYgKCB0eXBlb2YgdXJsID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0b3B0aW9ucyA9IHVybDtcblx0XHRcdHVybCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBGb3JjZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdFxuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0dmFyIHRyYW5zcG9ydCxcblxuXHRcdFx0Ly8gVVJMIHdpdGhvdXQgYW50aS1jYWNoZSBwYXJhbVxuXHRcdFx0Y2FjaGVVUkwsXG5cblx0XHRcdC8vIFJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyxcblx0XHRcdHJlc3BvbnNlSGVhZGVycyxcblxuXHRcdFx0Ly8gdGltZW91dCBoYW5kbGVcblx0XHRcdHRpbWVvdXRUaW1lcixcblxuXHRcdFx0Ly8gVXJsIGNsZWFudXAgdmFyXG5cdFx0XHR1cmxBbmNob3IsXG5cblx0XHRcdC8vIFJlcXVlc3Qgc3RhdGUgKGJlY29tZXMgZmFsc2UgdXBvbiBzZW5kIGFuZCB0cnVlIHVwb24gY29tcGxldGlvbilcblx0XHRcdGNvbXBsZXRlZCxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkXG5cdFx0XHRmaXJlR2xvYmFscyxcblxuXHRcdFx0Ly8gTG9vcCB2YXJpYWJsZVxuXHRcdFx0aSxcblxuXHRcdFx0Ly8gdW5jYWNoZWQgcGFydCBvZiB0aGUgdXJsXG5cdFx0XHR1bmNhY2hlZCxcblxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdFxuXHRcdFx0cyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksXG5cblx0XHRcdC8vIENhbGxiYWNrcyBjb250ZXh0XG5cdFx0XHRjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcyxcblxuXHRcdFx0Ly8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cyBpcyBjYWxsYmFja0NvbnRleHQgaWYgaXQgaXMgYSBET00gbm9kZSBvciBqUXVlcnkgY29sbGVjdGlvblxuXHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmXG5cdFx0XHRcdCggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/XG5cdFx0XHRcdGpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOlxuXHRcdFx0XHRqUXVlcnkuZXZlbnQsXG5cblx0XHRcdC8vIERlZmVycmVkc1xuXHRcdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30sXG5cblx0XHRcdC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpXG5cdFx0XHRyZXF1ZXN0SGVhZGVycyA9IHt9LFxuXHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LFxuXG5cdFx0XHQvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2Vcblx0XHRcdHN0ckFib3J0ID0gXCJjYW5jZWxlZFwiLFxuXG5cdFx0XHQvLyBGYWtlIHhoclxuXHRcdFx0anFYSFIgPSB7XG5cdFx0XHRcdHJlYWR5U3RhdGU6IDAsXG5cblx0XHRcdFx0Ly8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZFxuXHRcdFx0XHRnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2g7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICFyZXNwb25zZUhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSA9XG5cdFx0XHRcdFx0XHRcdFx0XHQoIHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSB8fCBbXSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5jb25jYXQoIG1hdGNoWyAyIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoID09IG51bGwgPyBudWxsIDogbWF0Y2guam9pbiggXCIsIFwiICk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gUmF3IHN0cmluZ1xuXHRcdFx0XHRnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBjb21wbGV0ZWQgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBudWxsO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhY2hlcyB0aGUgaGVhZGVyXG5cdFx0XHRcdHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0bmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdID1cblx0XHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHwgbmFtZTtcblx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXJcblx0XHRcdFx0b3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdHMubWltZVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0XHRzdGF0dXNDb2RlOiBmdW5jdGlvbiggbWFwICkge1xuXHRcdFx0XHRcdHZhciBjb2RlO1xuXHRcdFx0XHRcdGlmICggbWFwICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2tzXG5cdFx0XHRcdFx0XHRcdGpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5zdGF0dXMgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBMYXp5LWFkZCB0aGUgbmV3IGNhbGxiYWNrcyBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyBvbGQgb25lc1xuXHRcdFx0XHRcdFx0XHRmb3IgKCBjb2RlIGluIG1hcCApIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1c0NvZGVbIGNvZGUgXSwgbWFwWyBjb2RlIF0gXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYW5jZWwgdGhlIHJlcXVlc3Rcblx0XHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHZhciBmaW5hbFRleHQgPSBzdGF0dXNUZXh0IHx8IHN0ckFib3J0O1xuXHRcdFx0XHRcdGlmICggdHJhbnNwb3J0ICkge1xuXHRcdFx0XHRcdFx0dHJhbnNwb3J0LmFib3J0KCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZG9uZSggMCwgZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHQvLyBBdHRhY2ggZGVmZXJyZWRzXG5cdFx0ZGVmZXJyZWQucHJvbWlzZSgganFYSFIgKTtcblxuXHRcdC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKHByZWZpbHRlcnMgbWlnaHQgZXhwZWN0IGl0KVxuXHRcdC8vIEhhbmRsZSBmYWxzeSB1cmwgaW4gdGhlIHNldHRpbmdzIG9iamVjdCAodHJhYy0xMDA5MzogY29uc2lzdGVuY3kgd2l0aCBvbGQgc2lnbmF0dXJlKVxuXHRcdC8vIFdlIGFsc28gdXNlIHRoZSB1cmwgcGFyYW1ldGVyIGlmIGF2YWlsYWJsZVxuXHRcdHMudXJsID0gKCAoIHVybCB8fCBzLnVybCB8fCBsb2NhdGlvbi5ocmVmICkgKyBcIlwiIClcblx0XHRcdC5yZXBsYWNlKCBycHJvdG9jb2wsIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICk7XG5cblx0XHQvLyBBbGlhcyBtZXRob2Qgb3B0aW9uIHRvIHR5cGUgYXMgcGVyIHRpY2tldCB0cmFjLTEyMDA0XG5cdFx0cy50eXBlID0gb3B0aW9ucy5tZXRob2QgfHwgb3B0aW9ucy50eXBlIHx8IHMubWV0aG9kIHx8IHMudHlwZTtcblxuXHRcdC8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3Rcblx0XHRzLmRhdGFUeXBlcyA9ICggcy5kYXRhVHlwZSB8fCBcIipcIiApLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblxuXHRcdC8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4gb3JkZXIgd2hlbiB0aGUgb3JpZ2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgb3JpZ2luLlxuXHRcdGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkge1xuXHRcdFx0dXJsQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdFx0Ly8gSUUgdGhyb3dzIGV4Y2VwdGlvbiBvbiBhY2Nlc3NpbmcgdGhlIGhyZWYgcHJvcGVydHkgaWYgdXJsIGlzIG1hbGZvcm1lZCxcblx0XHRcdC8vIGUuZy4gaHR0cDovL2V4YW1wbGUuY29tOjgweC9cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gcy51cmw7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEgb25seVxuXHRcdFx0XHQvLyBBbmNob3IncyBob3N0IHByb3BlcnR5IGlzbid0IGNvcnJlY3RseSBzZXQgd2hlbiBzLnVybCBpcyByZWxhdGl2ZVxuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHVybEFuY2hvci5ocmVmO1xuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gb3JpZ2luQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgb3JpZ2luQW5jaG9yLmhvc3QgIT09XG5cdFx0XHRcdFx0dXJsQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgdXJsQW5jaG9yLmhvc3Q7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhbiBlcnJvciBwYXJzaW5nIHRoZSBVUkwsIGFzc3VtZSBpdCBpcyBjcm9zc0RvbWFpbixcblx0XHRcdFx0Ly8gaXQgY2FuIGJlIHJlamVjdGVkIGJ5IHRoZSB0cmFuc3BvcnQgaWYgaXQgaXMgaW52YWxpZFxuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJpbmdcblx0XHRpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHByZWZpbHRlcnNcblx0XHRpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGEgcHJlZmlsdGVyLCBzdG9wIHRoZXJlXG5cdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG9cblx0XHQvLyBEb24ndCBmaXJlIGV2ZW50cyBpZiBqUXVlcnkuZXZlbnQgaXMgdW5kZWZpbmVkIGluIGFuIEFNRC11c2FnZSBzY2VuYXJpbyAodHJhYy0xNTExOClcblx0XHRmaXJlR2xvYmFscyA9IGpRdWVyeS5ldmVudCAmJiBzLmdsb2JhbDtcblxuXHRcdC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHNcblx0XHRpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdGFydFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gVXBwZXJjYXNlIHRoZSB0eXBlXG5cdFx0cy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7XG5cblx0XHQvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudFxuXHRcdHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSApO1xuXG5cdFx0Ly8gU2F2ZSB0aGUgVVJMIGluIGNhc2Ugd2UncmUgdG95aW5nIHdpdGggdGhlIElmLU1vZGlmaWVkLVNpbmNlXG5cdFx0Ly8gYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVyIG9uXG5cdFx0Ly8gUmVtb3ZlIGhhc2ggdG8gc2ltcGxpZnkgdXJsIG1hbmlwdWxhdGlvblxuXHRcdGNhY2hlVVJMID0gcy51cmwucmVwbGFjZSggcmhhc2gsIFwiXCIgKTtcblxuXHRcdC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250ZW50XG5cdFx0aWYgKCAhcy5oYXNDb250ZW50ICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgaGFzaCBzbyB3ZSBjYW4gcHV0IGl0IGJhY2tcblx0XHRcdHVuY2FjaGVkID0gcy51cmwuc2xpY2UoIGNhY2hlVVJMLmxlbmd0aCApO1xuXG5cdFx0XHQvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCwgYXBwZW5kIGRhdGEgdG8gdXJsXG5cdFx0XHRpZiAoIHMuZGF0YSAmJiAoIHMucHJvY2Vzc0RhdGEgfHwgdHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiApICkge1xuXHRcdFx0XHRjYWNoZVVSTCArPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgcy5kYXRhO1xuXG5cdFx0XHRcdC8vIHRyYWMtOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5XG5cdFx0XHRcdGRlbGV0ZSBzLmRhdGE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBvciB1cGRhdGUgYW50aS1jYWNoZSBwYXJhbSBpZiBuZWVkZWRcblx0XHRcdGlmICggcy5jYWNoZSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdGNhY2hlVVJMID0gY2FjaGVVUkwucmVwbGFjZSggcmFudGlDYWNoZSwgXCIkMVwiICk7XG5cdFx0XHRcdHVuY2FjaGVkID0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIFwiXz1cIiArICggbm9uY2UuZ3VpZCsrICkgK1xuXHRcdFx0XHRcdHVuY2FjaGVkO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQdXQgaGFzaCBhbmQgYW50aS1jYWNoZSBvbiB0aGUgVVJMIHRoYXQgd2lsbCBiZSByZXF1ZXN0ZWQgKGdoLTE3MzIpXG5cdFx0XHRzLnVybCA9IGNhY2hlVVJMICsgdW5jYWNoZWQ7XG5cblx0XHQvLyBDaGFuZ2UgJyUyMCcgdG8gJysnIGlmIHRoaXMgaXMgZW5jb2RlZCBmb3JtIGJvZHkgY29udGVudCAoZ2gtMjY1OClcblx0XHR9IGVsc2UgaWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJlxuXHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKS5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgKSB7XG5cdFx0XHRzLmRhdGEgPSBzLmRhdGEucmVwbGFjZSggcjIwLCBcIitcIiApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTW9kaWZpZWQtU2luY2VcIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Ob25lLU1hdGNoXCIsIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50XG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiLCBzLmNvbnRlbnRUeXBlICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZVxuXHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoXG5cdFx0XHRcIkFjY2VwdFwiLFxuXHRcdFx0cy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSA/XG5cdFx0XHRcdHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdICtcblx0XHRcdFx0XHQoIHMuZGF0YVR5cGVzWyAwIF0gIT09IFwiKlwiID8gXCIsIFwiICsgYWxsVHlwZXMgKyBcIjsgcT0wLjAxXCIgOiBcIlwiICkgOlxuXHRcdFx0XHRzLmFjY2VwdHNbIFwiKlwiIF1cblx0XHQpO1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9uXG5cdFx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApO1xuXHRcdH1cblxuXHRcdC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnRcblx0XHRpZiAoIHMuYmVmb3JlU2VuZCAmJlxuXHRcdFx0KCBzLmJlZm9yZVNlbmQuY2FsbCggY2FsbGJhY2tDb250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8fCBjb21wbGV0ZWQgKSApIHtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuXG5cdFx0XHRyZXR1cm4ganFYSFIuYWJvcnQoKTtcblx0XHR9XG5cblx0XHQvLyBBYm9ydGluZyBpcyBubyBsb25nZXIgYSBjYW5jZWxsYXRpb25cblx0XHRzdHJBYm9ydCA9IFwiYWJvcnRcIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tzIG9uIGRlZmVycmVkc1xuXHRcdGNvbXBsZXRlRGVmZXJyZWQuYWRkKCBzLmNvbXBsZXRlICk7XG5cdFx0anFYSFIuZG9uZSggcy5zdWNjZXNzICk7XG5cdFx0anFYSFIuZmFpbCggcy5lcnJvciApO1xuXG5cdFx0Ly8gR2V0IHRyYW5zcG9ydFxuXHRcdHRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0XG5cdFx0aWYgKCAhdHJhbnNwb3J0ICkge1xuXHRcdFx0ZG9uZSggLTEsIFwiTm8gVHJhbnNwb3J0XCIgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IDE7XG5cblx0XHRcdC8vIFNlbmQgZ2xvYmFsIGV2ZW50XG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4U2VuZFwiLCBbIGpxWEhSLCBzIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYWpheFNlbmQsIHN0b3AgdGhlcmVcblx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRpbWVvdXRcblx0XHRcdGlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkge1xuXHRcdFx0XHR0aW1lb3V0VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0anFYSFIuYWJvcnQoIFwidGltZW91dFwiICk7XG5cdFx0XHRcdH0sIHMudGltZW91dCApO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb21wbGV0ZWQgPSBmYWxzZTtcblx0XHRcdFx0dHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBSZXRocm93IHBvc3QtY29tcGxldGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBQcm9wYWdhdGUgb3RoZXJzIGFzIHJlc3VsdHNcblx0XHRcdFx0ZG9uZSggLTEsIGUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsYmFjayBmb3Igd2hlbiBldmVyeXRoaW5nIGlzIGRvbmVcblx0XHRmdW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHtcblx0XHRcdHZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZpZWQsXG5cdFx0XHRcdHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0O1xuXG5cdFx0XHQvLyBJZ25vcmUgcmVwZWF0IGludm9jYXRpb25zXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb21wbGV0ZWQgPSB0cnVlO1xuXG5cdFx0XHQvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0c1xuXHRcdFx0aWYgKCB0aW1lb3V0VGltZXIgKSB7XG5cdFx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvblxuXHRcdFx0Ly8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNlZClcblx0XHRcdHRyYW5zcG9ydCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0Ly8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTZXQgcmVhZHlTdGF0ZVxuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDtcblxuXHRcdFx0Ly8gRGV0ZXJtaW5lIGlmIHN1Y2Nlc3NmdWxcblx0XHRcdGlzU3VjY2VzcyA9IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0O1xuXG5cdFx0XHQvLyBHZXQgcmVzcG9uc2UgZGF0YVxuXHRcdFx0aWYgKCByZXNwb25zZXMgKSB7XG5cdFx0XHRcdHJlc3BvbnNlID0gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBVc2UgYSBub29wIGNvbnZlcnRlciBmb3IgbWlzc2luZyBzY3JpcHQgYnV0IG5vdCBpZiBqc29ucFxuXHRcdFx0aWYgKCAhaXNTdWNjZXNzICYmXG5cdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBcInNjcmlwdFwiLCBzLmRhdGFUeXBlcyApID4gLTEgJiZcblx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIFwianNvblwiLCBzLmRhdGFUeXBlcyApIDwgMCApIHtcblx0XHRcdFx0cy5jb252ZXJ0ZXJzWyBcInRleHQgc2NyaXB0XCIgXSA9IGZ1bmN0aW9uKCkge307XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnZlcnQgbm8gbWF0dGVyIHdoYXQgKHRoYXQgd2F5IHJlc3BvbnNlWFhYIGZpZWxkcyBhcmUgYWx3YXlzIHNldClcblx0XHRcdHJlc3BvbnNlID0gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICk7XG5cblx0XHRcdC8vIElmIHN1Y2Nlc3NmdWwsIGhhbmRsZSB0eXBlIGNoYWluaW5nXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblxuXHRcdFx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdFx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkxhc3QtTW9kaWZpZWRcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiZXRhZ1wiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gaWYgbm8gY29udGVudFxuXHRcdFx0XHRpZiAoIHN0YXR1cyA9PT0gMjA0IHx8IHMudHlwZSA9PT0gXCJIRUFEXCIgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm9jb250ZW50XCI7XG5cblx0XHRcdFx0Ly8gaWYgbm90IG1vZGlmaWVkXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMzA0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vdG1vZGlmaWVkXCI7XG5cblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBkYXRhLCBsZXQncyBjb252ZXJ0IGl0XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IHJlc3BvbnNlLnN0YXRlO1xuXHRcdFx0XHRcdHN1Y2Nlc3MgPSByZXNwb25zZS5kYXRhO1xuXHRcdFx0XHRcdGVycm9yID0gcmVzcG9uc2UuZXJyb3I7XG5cdFx0XHRcdFx0aXNTdWNjZXNzID0gIWVycm9yO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEV4dHJhY3QgZXJyb3IgZnJvbSBzdGF0dXNUZXh0IGFuZCBub3JtYWxpemUgZm9yIG5vbi1hYm9ydHNcblx0XHRcdFx0ZXJyb3IgPSBzdGF0dXNUZXh0O1xuXHRcdFx0XHRpZiAoIHN0YXR1cyB8fCAhc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJlcnJvclwiO1xuXHRcdFx0XHRcdGlmICggc3RhdHVzIDwgMCApIHtcblx0XHRcdFx0XHRcdHN0YXR1cyA9IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0XG5cdFx0XHRqcVhIUi5zdGF0dXMgPSBzdGF0dXM7XG5cdFx0XHRqcVhIUi5zdGF0dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNUZXh0IHx8IHN0YXR1c1RleHQgKSArIFwiXCI7XG5cblx0XHRcdC8vIFN1Y2Nlc3MvRXJyb3Jcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhSIF0gKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0anFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApO1xuXHRcdFx0c3RhdHVzQ29kZSA9IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIGlzU3VjY2VzcyA/IFwiYWpheFN1Y2Nlc3NcIiA6IFwiYWpheEVycm9yXCIsXG5cdFx0XHRcdFx0WyBqcVhIUiwgcywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29tcGxldGVcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQuZmlyZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBdICk7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhDb21wbGV0ZVwiLCBbIGpxWEhSLCBzIF0gKTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXJcblx0XHRcdFx0aWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RvcFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ganFYSFI7XG5cdH0sXG5cblx0Z2V0SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgZGF0YSwgY2FsbGJhY2ssIFwianNvblwiICk7XG5cdH0sXG5cblx0Z2V0U2NyaXB0OiBmdW5jdGlvbiggdXJsLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCB1bmRlZmluZWQsIGNhbGxiYWNrLCBcInNjcmlwdFwiICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJnZXRcIiwgXCJwb3N0XCIgXSwgZnVuY3Rpb24oIF9pLCBtZXRob2QgKSB7XG5cdGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHtcblxuXHRcdC8vIFNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBkYXRhICkgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBjYWxsYmFjaztcblx0XHRcdGNhbGxiYWNrID0gZGF0YTtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlIHVybCBjYW4gYmUgYW4gb3B0aW9ucyBvYmplY3QgKHdoaWNoIHRoZW4gbXVzdCBoYXZlIC51cmwpXG5cdFx0cmV0dXJuIGpRdWVyeS5hamF4KCBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHR1cmw6IHVybCxcblx0XHRcdHR5cGU6IG1ldGhvZCxcblx0XHRcdGRhdGFUeXBlOiB0eXBlLFxuXHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdHN1Y2Nlc3M6IGNhbGxiYWNrXG5cdFx0fSwgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHVybCApICYmIHVybCApICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHtcblx0dmFyIGk7XG5cdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdGlmICggaS50b0xvd2VyQ2FzZSgpID09PSBcImNvbnRlbnQtdHlwZVwiICkge1xuXHRcdFx0cy5jb250ZW50VHlwZSA9IHMuaGVhZGVyc1sgaSBdIHx8IFwiXCI7XG5cdFx0fVxuXHR9XG59ICk7XG5cblxualF1ZXJ5Ll9ldmFsVXJsID0gZnVuY3Rpb24oIHVybCwgb3B0aW9ucywgZG9jICkge1xuXHRyZXR1cm4galF1ZXJ5LmFqYXgoIHtcblx0XHR1cmw6IHVybCxcblxuXHRcdC8vIE1ha2UgdGhpcyBleHBsaWNpdCwgc2luY2UgdXNlciBjYW4gb3ZlcnJpZGUgdGhpcyB0aHJvdWdoIGFqYXhTZXR1cCAodHJhYy0xMTI2NClcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGRhdGFUeXBlOiBcInNjcmlwdFwiLFxuXHRcdGNhY2hlOiB0cnVlLFxuXHRcdGFzeW5jOiBmYWxzZSxcblx0XHRnbG9iYWw6IGZhbHNlLFxuXG5cdFx0Ly8gT25seSBldmFsdWF0ZSB0aGUgcmVzcG9uc2UgaWYgaXQgaXMgc3VjY2Vzc2Z1bCAoZ2gtNDEyNilcblx0XHQvLyBkYXRhRmlsdGVyIGlzIG5vdCBpbnZva2VkIGZvciBmYWlsdXJlIHJlc3BvbnNlcywgc28gdXNpbmcgaXQgaW5zdGVhZFxuXHRcdC8vIG9mIHRoZSBkZWZhdWx0IGNvbnZlcnRlciBpcyBrbHVkZ3kgYnV0IGl0IHdvcmtzLlxuXHRcdGNvbnZlcnRlcnM6IHtcblx0XHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oKSB7fVxuXHRcdH0sXG5cdFx0ZGF0YUZpbHRlcjogZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHJlc3BvbnNlLCBvcHRpb25zLCBkb2MgKTtcblx0XHR9XG5cdH0gKTtcbn07XG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHR3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgd3JhcDtcblxuXHRcdGlmICggdGhpc1sgMCBdICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRcdGh0bWwgPSBodG1sLmNhbGwoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0IGFyb3VuZFxuXHRcdFx0d3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1sgMCBdLm93bmVyRG9jdW1lbnQgKS5lcSggMCApLmNsb25lKCB0cnVlICk7XG5cblx0XHRcdGlmICggdGhpc1sgMCBdLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0d3JhcC5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IHRoaXM7XG5cblx0XHRcdFx0d2hpbGUgKCBlbGVtLmZpcnN0RWxlbWVudENoaWxkICkge1xuXHRcdFx0XHRcdGVsZW0gPSBlbGVtLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVsZW07XG5cdFx0XHR9ICkuYXBwZW5kKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0d3JhcElubmVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwSW5uZXIoIGh0bWwuY2FsbCggdGhpcywgaSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLFxuXHRcdFx0XHRjb250ZW50cyA9IHNlbGYuY29udGVudHMoKTtcblxuXHRcdFx0aWYgKCBjb250ZW50cy5sZW5ndGggKSB7XG5cdFx0XHRcdGNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZi5hcHBlbmQoIGh0bWwgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0d3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIGh0bWxJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggaHRtbCApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBodG1sSXNGdW5jdGlvbiA/IGh0bWwuY2FsbCggdGhpcywgaSApIDogaHRtbCApO1xuXHRcdH0gKTtcblx0fSxcblxuXHR1bndyYXA6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR0aGlzLnBhcmVudCggc2VsZWN0b3IgKS5ub3QoIFwiYm9keVwiICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS5yZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7XG5cdFx0fSApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4cHIucHNldWRvcy5oaWRkZW4gPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICFqUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUoIGVsZW0gKTtcbn07XG5qUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICEhKCBlbGVtLm9mZnNldFdpZHRoIHx8IGVsZW0ub2Zmc2V0SGVpZ2h0IHx8IGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKTtcbn07XG5cblxuXG5cbmpRdWVyeS5hamF4U2V0dGluZ3MueGhyID0gZnVuY3Rpb24oKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblx0fSBjYXRjaCAoIGUgKSB7fVxufTtcblxudmFyIHhoclN1Y2Nlc3NTdGF0dXMgPSB7XG5cblx0XHQvLyBGaWxlIHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIGNvZGUgMCwgYXNzdW1lIDIwMFxuXHRcdDA6IDIwMCxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0Ly8gdHJhYy0xNDUwOiBzb21ldGltZXMgSUUgcmV0dXJucyAxMjIzIHdoZW4gaXQgc2hvdWxkIGJlIDIwNFxuXHRcdDEyMjM6IDIwNFxuXHR9LFxuXHR4aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpO1xuXG5zdXBwb3J0LmNvcnMgPSAhIXhoclN1cHBvcnRlZCAmJiAoIFwid2l0aENyZWRlbnRpYWxzXCIgaW4geGhyU3VwcG9ydGVkICk7XG5zdXBwb3J0LmFqYXggPSB4aHJTdXBwb3J0ZWQgPSAhIXhoclN1cHBvcnRlZDtcblxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHR2YXIgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2s7XG5cblx0Ly8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdFxuXHRpZiAoIHN1cHBvcnQuY29ycyB8fCB4aHJTdXBwb3J0ZWQgJiYgIW9wdGlvbnMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0dmFyIGksXG5cdFx0XHRcdFx0eGhyID0gb3B0aW9ucy54aHIoKTtcblxuXHRcdFx0XHR4aHIub3Blbihcblx0XHRcdFx0XHRvcHRpb25zLnR5cGUsXG5cdFx0XHRcdFx0b3B0aW9ucy51cmwsXG5cdFx0XHRcdFx0b3B0aW9ucy5hc3luYyxcblx0XHRcdFx0XHRvcHRpb25zLnVzZXJuYW1lLFxuXHRcdFx0XHRcdG9wdGlvbnMucGFzc3dvcmRcblx0XHRcdFx0KTtcblxuXHRcdFx0XHQvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0Zm9yICggaSBpbiBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRcdHhoclsgaSBdID0gb3B0aW9ucy54aHJGaWVsZHNbIGkgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHtcblx0XHRcdFx0XHR4aHIub3ZlcnJpZGVNaW1lVHlwZSggb3B0aW9ucy5taW1lVHlwZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXJcblx0XHRcdFx0Ly8gRm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cywgc2VlaW5nIGFzIGNvbmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZVxuXHRcdFx0XHQvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLlxuXHRcdFx0XHQvLyAoaXQgY2FuIGFsd2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1cClcblx0XHRcdFx0Ly8gRm9yIHNhbWUtZG9tYWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2UgaGVhZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQuXG5cdFx0XHRcdGlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gKSB7XG5cdFx0XHRcdFx0aGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSA9IFwiWE1MSHR0cFJlcXVlc3RcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNldCBoZWFkZXJzXG5cdFx0XHRcdGZvciAoIGkgaW4gaGVhZGVycyApIHtcblx0XHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrID0gZXJyb3JDYWxsYmFjayA9IHhoci5vbmxvYWQgPVxuXHRcdFx0XHRcdFx0XHRcdHhoci5vbmVycm9yID0geGhyLm9uYWJvcnQgPSB4aHIub250aW1lb3V0ID1cblx0XHRcdFx0XHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuXG5cdFx0XHRcdFx0XHRcdGlmICggdHlwZSA9PT0gXCJhYm9ydFwiICkge1xuXHRcdFx0XHRcdFx0XHRcdHhoci5hYm9ydCgpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSBcImVycm9yXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIE9uIGEgbWFudWFsIG5hdGl2ZSBhYm9ydCwgSUU5IHRocm93c1xuXHRcdFx0XHRcdFx0XHRcdC8vIGVycm9ycyBvbiBhbnkgcHJvcGVydHkgYWNjZXNzIHRoYXQgaXMgbm90IHJlYWR5U3RhdGVcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHR5cGVvZiB4aHIuc3RhdHVzICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIDAsIFwiZXJyb3JcIiApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaWxlOiBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyAwOyBzZWUgdHJhYy04NjA1LCB0cmFjLTE0MjA3XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblx0XHRcdFx0XHRcdFx0XHRcdHhoclN1Y2Nlc3NTdGF0dXNbIHhoci5zdGF0dXMgXSB8fCB4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHQsXG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJRTkgaGFzIG5vIFhIUjIgYnV0IHRocm93cyBvbiBiaW5hcnkgKHRyYWMtMTE0MjYpXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBGb3IgWEhSMiBub24tdGV4dCwgbGV0IHRoZSBjYWxsZXIgaGFuZGxlIGl0IChnaC0yNDk4KVxuXHRcdFx0XHRcdFx0XHRcdFx0KCB4aHIucmVzcG9uc2VUeXBlIHx8IFwidGV4dFwiICkgIT09IFwidGV4dFwiICB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHhoci5yZXNwb25zZVRleHQgIT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IGJpbmFyeTogeGhyLnJlc3BvbnNlIH0gOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IHRleHQ6IHhoci5yZXNwb25zZVRleHQgfSxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vIExpc3RlbiB0byBldmVudHNcblx0XHRcdFx0eGhyLm9ubG9hZCA9IGNhbGxiYWNrKCk7XG5cdFx0XHRcdGVycm9yQ2FsbGJhY2sgPSB4aHIub25lcnJvciA9IHhoci5vbnRpbWVvdXQgPSBjYWxsYmFjayggXCJlcnJvclwiICk7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0XHRcdC8vIFVzZSBvbnJlYWR5c3RhdGVjaGFuZ2UgdG8gcmVwbGFjZSBvbmFib3J0XG5cdFx0XHRcdC8vIHRvIGhhbmRsZSB1bmNhdWdodCBhYm9ydHNcblx0XHRcdFx0aWYgKCB4aHIub25hYm9ydCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHhoci5vbmFib3J0ID0gZXJyb3JDYWxsYmFjaztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIENoZWNrIHJlYWR5U3RhdGUgYmVmb3JlIHRpbWVvdXQgYXMgaXQgY2hhbmdlc1xuXHRcdFx0XHRcdFx0aWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBbGxvdyBvbmVycm9yIHRvIGJlIGNhbGxlZCBmaXJzdCxcblx0XHRcdFx0XHRcdFx0Ly8gYnV0IHRoYXQgd2lsbCBub3QgaGFuZGxlIGEgbmF0aXZlIGFib3J0XG5cdFx0XHRcdFx0XHRcdC8vIEFsc28sIHNhdmUgZXJyb3JDYWxsYmFjayB0byBhIHZhcmlhYmxlXG5cdFx0XHRcdFx0XHRcdC8vIGFzIHhoci5vbmVycm9yIGNhbm5vdCBiZSBhY2Nlc3NlZFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSBhYm9ydCBjYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGNhbGxiYWNrKCBcImFib3J0XCIgKTtcblxuXHRcdFx0XHR0cnkge1xuXG5cdFx0XHRcdFx0Ly8gRG8gc2VuZCB0aGUgcmVxdWVzdCAodGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uKVxuXHRcdFx0XHRcdHhoci5zZW5kKCBvcHRpb25zLmhhc0NvbnRlbnQgJiYgb3B0aW9ucy5kYXRhIHx8IG51bGwgKTtcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHQvLyB0cmFjLTE0NjgzOiBPbmx5IHJldGhyb3cgaWYgdGhpcyBoYXNuJ3QgYmVlbiBub3RpZmllZCBhcyBhbiBlcnJvciB5ZXRcblx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG4vLyBQcmV2ZW50IGF1dG8tZXhlY3V0aW9uIG9mIHNjcmlwdHMgd2hlbiBubyBleHBsaWNpdCBkYXRhVHlwZSB3YXMgcHJvdmlkZWQgKFNlZSBnaC0yNDMyKVxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy5jb250ZW50cy5zY3JpcHQgPSBmYWxzZTtcblx0fVxufSApO1xuXG4vLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZVxualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRhY2NlcHRzOiB7XG5cdFx0c2NyaXB0OiBcInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgXCIgK1xuXHRcdFx0XCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHRcIlxuXHR9LFxuXHRjb250ZW50czoge1xuXHRcdHNjcmlwdDogL1xcYig/OmphdmF8ZWNtYSlzY3JpcHRcXGIvXG5cdH0sXG5cdGNvbnZlcnRlcnM6IHtcblx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHRleHQgKTtcblx0XHRcdHJldHVybiB0ZXh0O1xuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIYW5kbGUgY2FjaGUncyBzcGVjaWFsIGNhc2UgYW5kIGNyb3NzRG9tYWluXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdHMuY2FjaGUgPSBmYWxzZTtcblx0fVxuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy50eXBlID0gXCJHRVRcIjtcblx0fVxufSApO1xuXG4vLyBCaW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnRcbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblxuXHQvLyBUaGlzIHRyYW5zcG9ydCBvbmx5IGRlYWxzIHdpdGggY3Jvc3MgZG9tYWluIG9yIGZvcmNlZC1ieS1hdHRycyByZXF1ZXN0c1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gfHwgcy5zY3JpcHRBdHRycyApIHtcblx0XHR2YXIgc2NyaXB0LCBjYWxsYmFjaztcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIF8sIGNvbXBsZXRlICkge1xuXHRcdFx0XHRzY3JpcHQgPSBqUXVlcnkoIFwiPHNjcmlwdD5cIiApXG5cdFx0XHRcdFx0LmF0dHIoIHMuc2NyaXB0QXR0cnMgfHwge30gKVxuXHRcdFx0XHRcdC5wcm9wKCB7IGNoYXJzZXQ6IHMuc2NyaXB0Q2hhcnNldCwgc3JjOiBzLnVybCB9IClcblx0XHRcdFx0XHQub24oIFwibG9hZCBlcnJvclwiLCBjYWxsYmFjayA9IGZ1bmN0aW9uKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRzY3JpcHQucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRjYWxsYmFjayA9IG51bGw7XG5cdFx0XHRcdFx0XHRpZiAoIGV2dCApIHtcblx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIGV2dC50eXBlID09PSBcImVycm9yXCIgPyA0MDQgOiAyMDAsIGV2dC50eXBlICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIFVzZSBuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFuaXAgQUpBWCB0cmlja2VyeVxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHRbIDAgXSApO1xuXHRcdFx0fSxcblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgb2xkQ2FsbGJhY2tzID0gW10sXG5cdHJqc29ucCA9IC8oPSlcXD8oPz0mfCQpfFxcP1xcPy87XG5cbi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3NcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0anNvbnA6IFwiY2FsbGJhY2tcIixcblx0anNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyBcIl9cIiArICggbm9uY2UuZ3VpZCsrICkgKTtcblx0XHR0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTtcblx0XHRyZXR1cm4gY2FsbGJhY2s7XG5cdH1cbn0gKTtcblxuLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJqc29uIGpzb25wXCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHtcblxuXHR2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsXG5cdFx0anNvblByb3AgPSBzLmpzb25wICE9PSBmYWxzZSAmJiAoIHJqc29ucC50ZXN0KCBzLnVybCApID9cblx0XHRcdFwidXJsXCIgOlxuXHRcdFx0dHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApXG5cdFx0XHRcdFx0LmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCAmJlxuXHRcdFx0XHRyanNvbnAudGVzdCggcy5kYXRhICkgJiYgXCJkYXRhXCJcblx0XHQpO1xuXG5cdC8vIEhhbmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyBcImpzb25wXCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXRcblx0aWYgKCBqc29uUHJvcCB8fCBzLmRhdGFUeXBlc1sgMCBdID09PSBcImpzb25wXCIgKSB7XG5cblx0XHQvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0XG5cdFx0Y2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0gaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgP1xuXHRcdFx0cy5qc29ucENhbGxiYWNrKCkgOlxuXHRcdFx0cy5qc29ucENhbGxiYWNrO1xuXG5cdFx0Ly8gSW5zZXJ0IGNhbGxiYWNrIGludG8gdXJsIG9yIGZvcm0gZGF0YVxuXHRcdGlmICgganNvblByb3AgKSB7XG5cdFx0XHRzWyBqc29uUHJvcCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAsIFwiJDFcIiArIGNhbGxiYWNrTmFtZSApO1xuXHRcdH0gZWxzZSBpZiAoIHMuanNvbnAgIT09IGZhbHNlICkge1xuXHRcdFx0cy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuanNvbnAgKyBcIj1cIiArIGNhbGxiYWNrTmFtZTtcblx0XHR9XG5cblx0XHQvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uXG5cdFx0cy5jb252ZXJ0ZXJzWyBcInNjcmlwdCBqc29uXCIgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7XG5cdFx0XHRcdGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgXCIgd2FzIG5vdCBjYWxsZWRcIiApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07XG5cdFx0fTtcblxuXHRcdC8vIEZvcmNlIGpzb24gZGF0YVR5cGVcblx0XHRzLmRhdGFUeXBlc1sgMCBdID0gXCJqc29uXCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrXG5cdFx0b3ZlcndyaXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdO1xuXHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzO1xuXHRcdH07XG5cblx0XHQvLyBDbGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycylcblx0XHRqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXRcblx0XHRcdGlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0alF1ZXJ5KCB3aW5kb3cgKS5yZW1vdmVQcm9wKCBjYWxsYmFja05hbWUgKTtcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWVcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2F2ZSBiYWNrIGFzIGZyZWVcblx0XHRcdGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7XG5cblx0XHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kXG5cdFx0XHRcdHMuanNvbnBDYWxsYmFjayA9IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBDYWxsYmFjaztcblxuXHRcdFx0XHQvLyBTYXZlIHRoZSBjYWxsYmFjayBuYW1lIGZvciBmdXR1cmUgdXNlXG5cdFx0XHRcdG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlXG5cdFx0XHRpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7XG5cdFx0XHRcdG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7XG5cdFx0fSApO1xuXG5cdFx0Ly8gRGVsZWdhdGUgdG8gc2NyaXB0XG5cdFx0cmV0dXJuIFwic2NyaXB0XCI7XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gU3VwcG9ydDogU2FmYXJpIDggb25seVxuLy8gSW4gU2FmYXJpIDggZG9jdW1lbnRzIGNyZWF0ZWQgdmlhIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudFxuLy8gY29sbGFwc2Ugc2libGluZyBmb3JtczogdGhlIHNlY29uZCBvbmUgYmVjb21lcyBhIGNoaWxkIG9mIHRoZSBmaXJzdCBvbmUuXG4vLyBCZWNhdXNlIG9mIHRoYXQsIHRoaXMgc2VjdXJpdHkgbWVhc3VyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gU2FmYXJpIDguXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzM3XG5zdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCA9ICggZnVuY3Rpb24oKSB7XG5cdHZhciBib2R5ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICkuYm9keTtcblx0Ym9keS5pbm5lckhUTUwgPSBcIjxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+XCI7XG5cdHJldHVybiBib2R5LmNoaWxkTm9kZXMubGVuZ3RoID09PSAyO1xufSApKCk7XG5cblxuLy8gQXJndW1lbnQgXCJkYXRhXCIgc2hvdWxkIGJlIHN0cmluZyBvZiBodG1sXG4vLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsXG4vLyBkZWZhdWx0cyB0byBkb2N1bWVudFxuLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZ1xualF1ZXJ5LnBhcnNlSFRNTCA9IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHtcblx0aWYgKCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0a2VlcFNjcmlwdHMgPSBjb250ZXh0O1xuXHRcdGNvbnRleHQgPSBmYWxzZTtcblx0fVxuXG5cdHZhciBiYXNlLCBwYXJzZWQsIHNjcmlwdHM7XG5cblx0aWYgKCAhY29udGV4dCApIHtcblxuXHRcdC8vIFN0b3Agc2NyaXB0cyBvciBpbmxpbmUgZXZlbnQgaGFuZGxlcnMgZnJvbSBiZWluZyBleGVjdXRlZCBpbW1lZGlhdGVseVxuXHRcdC8vIGJ5IHVzaW5nIGRvY3VtZW50LmltcGxlbWVudGF0aW9uXG5cdFx0aWYgKCBzdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCApIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKTtcblxuXHRcdFx0Ly8gU2V0IHRoZSBiYXNlIGhyZWYgZm9yIHRoZSBjcmVhdGVkIGRvY3VtZW50XG5cdFx0XHQvLyBzbyBhbnkgcGFyc2VkIGVsZW1lbnRzIHdpdGggVVJMc1xuXHRcdFx0Ly8gYXJlIGJhc2VkIG9uIHRoZSBkb2N1bWVudCdzIFVSTCAoZ2gtMjk2NSlcblx0XHRcdGJhc2UgPSBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiYmFzZVwiICk7XG5cdFx0XHRiYXNlLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0Y29udGV4dC5oZWFkLmFwcGVuZENoaWxkKCBiYXNlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudDtcblx0XHR9XG5cdH1cblxuXHRwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKTtcblx0c2NyaXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTtcblxuXHQvLyBTaW5nbGUgdGFnXG5cdGlmICggcGFyc2VkICkge1xuXHRcdHJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWyAxIF0gKSBdO1xuXHR9XG5cblx0cGFyc2VkID0gYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTtcblxuXHRpZiAoIHNjcmlwdHMgJiYgc2NyaXB0cy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTtcbn07XG5cblxuLyoqXG4gKiBMb2FkIGEgdXJsIGludG8gYSBwYWdlXG4gKi9cbmpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHtcblx0dmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSxcblx0XHRzZWxmID0gdGhpcyxcblx0XHRvZmYgPSB1cmwuaW5kZXhPZiggXCIgXCIgKTtcblxuXHRpZiAoIG9mZiA+IC0xICkge1xuXHRcdHNlbGVjdG9yID0gc3RyaXBBbmRDb2xsYXBzZSggdXJsLnNsaWNlKCBvZmYgKSApO1xuXHRcdHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7XG5cdH1cblxuXHQvLyBJZiBpdCdzIGEgZnVuY3Rpb25cblx0aWYgKCBpc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHtcblxuXHRcdC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrXG5cdFx0Y2FsbGJhY2sgPSBwYXJhbXM7XG5cdFx0cGFyYW1zID0gdW5kZWZpbmVkO1xuXG5cdC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmdcblx0fSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0dHlwZSA9IFwiUE9TVFwiO1xuXHR9XG5cblx0Ly8gSWYgd2UgaGF2ZSBlbGVtZW50cyB0byBtb2RpZnksIG1ha2UgdGhlIHJlcXVlc3Rcblx0aWYgKCBzZWxmLmxlbmd0aCA+IDAgKSB7XG5cdFx0alF1ZXJ5LmFqYXgoIHtcblx0XHRcdHVybDogdXJsLFxuXG5cdFx0XHQvLyBJZiBcInR5cGVcIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4gXCJHRVRcIiBtZXRob2Qgd2lsbCBiZSB1c2VkLlxuXHRcdFx0Ly8gTWFrZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGV4cGxpY2l0IHNpbmNlXG5cdFx0XHQvLyB1c2VyIGNhbiBvdmVycmlkZSBpdCB0aHJvdWdoIGFqYXhTZXR1cCBtZXRob2Rcblx0XHRcdHR5cGU6IHR5cGUgfHwgXCJHRVRcIixcblx0XHRcdGRhdGFUeXBlOiBcImh0bWxcIixcblx0XHRcdGRhdGE6IHBhcmFtc1xuXHRcdH0gKS5kb25lKCBmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkge1xuXG5cdFx0XHQvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2tcblx0XHRcdHJlc3BvbnNlID0gYXJndW1lbnRzO1xuXG5cdFx0XHRzZWxmLmh0bWwoIHNlbGVjdG9yID9cblxuXHRcdFx0XHQvLyBJZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXZcblx0XHRcdFx0Ly8gRXhjbHVkZSBzY3JpcHRzIHRvIGF2b2lkIElFICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzXG5cdFx0XHRcdGpRdWVyeSggXCI8ZGl2PlwiICkuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1MKCByZXNwb25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0XG5cdFx0XHRcdHJlc3BvbnNlVGV4dCApO1xuXG5cdFx0Ly8gSWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImRhdGFcIiwgXCJzdGF0dXNcIiwgXCJqcVhIUlwiXG5cdFx0Ly8gYnV0IHRoZXkgYXJlIGlnbm9yZWQgYmVjYXVzZSByZXNwb25zZSB3YXMgc2V0IGFib3ZlLlxuXHRcdC8vIElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJqcVhIUlwiLCBcInN0YXR1c1wiLCBcImVycm9yXCJcblx0XHR9ICkuYWx3YXlzKCBjYWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHtcblx0XHRcdHNlbGYuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNhbGxiYWNrLmFwcGx5KCB0aGlzLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5cblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiBqUXVlcnkuZ3JlcCggalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiBlbGVtID09PSBmbi5lbGVtO1xuXHR9ICkubGVuZ3RoO1xufTtcblxuXG5cblxualF1ZXJ5Lm9mZnNldCA9IHtcblx0c2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHtcblx0XHR2YXIgY3VyUG9zaXRpb24sIGN1ckxlZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1bGF0ZVBvc2l0aW9uLFxuXHRcdFx0cG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSxcblx0XHRcdGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSxcblx0XHRcdHByb3BzID0ge307XG5cblx0XHQvLyBTZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJlIHNldCBldmVuIG9uIHN0YXRpYyBlbGVtXG5cdFx0aWYgKCBwb3NpdGlvbiA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdGVsZW0uc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG5cdFx0fVxuXG5cdFx0Y3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKTtcblx0XHRjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCBcInRvcFwiICk7XG5cdFx0Y3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwibGVmdFwiICk7XG5cdFx0Y2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgfHwgcG9zaXRpb24gPT09IFwiZml4ZWRcIiApICYmXG5cdFx0XHQoIGN1ckNTU1RvcCArIGN1ckNTU0xlZnQgKS5pbmRleE9mKCBcImF1dG9cIiApID4gLTE7XG5cblx0XHQvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlclxuXHRcdC8vIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZFxuXHRcdGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7XG5cdFx0XHRjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTtcblx0XHRcdGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDtcblx0XHRcdGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0O1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1clRvcCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7XG5cdFx0XHRjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7XG5cblx0XHRcdC8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KVxuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDtcblx0XHR9XG5cdFx0aWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLmxlZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0O1xuXHRcdH1cblxuXHRcdGlmICggXCJ1c2luZ1wiIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyRWxlbS5jc3MoIHByb3BzICk7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0Ly8gb2Zmc2V0KCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgYm9yZGVyIGJveCB0byB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9mZnNldDogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBQcmVzZXJ2ZSBjaGFpbmluZyBmb3Igc2V0dGVyXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHRoaXMgOlxuXHRcdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRcdGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7XG5cdFx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHR2YXIgcmVjdCwgd2luLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXTtcblxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHplcm9zIGZvciBkaXNjb25uZWN0ZWQgYW5kIGhpZGRlbiAoZGlzcGxheTogbm9uZSkgZWxlbWVudHMgKGdoLTIzMTApXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYVxuXHRcdC8vIGRpc2Nvbm5lY3RlZCBub2RlIGluIElFIHRocm93cyBhbiBlcnJvclxuXHRcdGlmICggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblx0XHR9XG5cblx0XHQvLyBHZXQgZG9jdW1lbnQtcmVsYXRpdmUgcG9zaXRpb24gYnkgYWRkaW5nIHZpZXdwb3J0IHNjcm9sbCB0byB2aWV3cG9ydC1yZWxhdGl2ZSBnQkNSXG5cdFx0cmVjdCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0d2luID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IHJlY3QudG9wICsgd2luLnBhZ2VZT2Zmc2V0LFxuXHRcdFx0bGVmdDogcmVjdC5sZWZ0ICsgd2luLnBhZ2VYT2Zmc2V0XG5cdFx0fTtcblx0fSxcblxuXHQvLyBwb3NpdGlvbigpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIG1hcmdpbiBib3ggdG8gaXRzIG9mZnNldCBwYXJlbnQncyBwYWRkaW5nIGJveFxuXHQvLyBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBiZWhhdmlvciBvZiBDU1MgYWJzb2x1dGUgcG9zaXRpb25pbmdcblx0cG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggIXRoaXNbIDAgXSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgb2Zmc2V0UGFyZW50LCBvZmZzZXQsIGRvYyxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRwYXJlbnRPZmZzZXQgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuXG5cdFx0Ly8gcG9zaXRpb246Zml4ZWQgZWxlbWVudHMgYXJlIG9mZnNldCBmcm9tIHRoZSB2aWV3cG9ydCwgd2hpY2ggaXRzZWxmIGFsd2F5cyBoYXMgemVybyBvZmZzZXRcblx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApID09PSBcImZpeGVkXCIgKSB7XG5cblx0XHRcdC8vIEFzc3VtZSBwb3NpdGlvbjpmaXhlZCBpbXBsaWVzIGF2YWlsYWJpbGl0eSBvZiBnZXRCb3VuZGluZ0NsaWVudFJlY3Rcblx0XHRcdG9mZnNldCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0b2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTtcblxuXHRcdFx0Ly8gQWNjb3VudCBmb3IgdGhlICpyZWFsKiBvZmZzZXQgcGFyZW50LCB3aGljaCBjYW4gYmUgdGhlIGRvY3VtZW50IG9yIGl0cyByb290IGVsZW1lbnRcblx0XHRcdC8vIHdoZW4gYSBzdGF0aWNhbGx5IHBvc2l0aW9uZWQgZWxlbWVudCBpcyBpZGVudGlmaWVkXG5cdFx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0XHRvZmZzZXRQYXJlbnQgPSBlbGVtLm9mZnNldFBhcmVudCB8fCBkb2MuZG9jdW1lbnRFbGVtZW50O1xuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiZcblx0XHRcdFx0KCBvZmZzZXRQYXJlbnQgPT09IGRvYy5ib2R5IHx8IG9mZnNldFBhcmVudCA9PT0gZG9jLmRvY3VtZW50RWxlbWVudCApICYmXG5cdFx0XHRcdGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cblx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQgIT09IGVsZW0gJiYgb2Zmc2V0UGFyZW50Lm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIEluY29ycG9yYXRlIGJvcmRlcnMgaW50byBpdHMgb2Zmc2V0LCBzaW5jZSB0aGV5IGFyZSBvdXRzaWRlIGl0cyBjb250ZW50IG9yaWdpblxuXHRcdFx0XHRwYXJlbnRPZmZzZXQgPSBqUXVlcnkoIG9mZnNldFBhcmVudCApLm9mZnNldCgpO1xuXHRcdFx0XHRwYXJlbnRPZmZzZXQudG9wICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJUb3BXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC5sZWZ0ICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJMZWZ0V2lkdGhcIiwgdHJ1ZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnNcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBvZmZzZXQudG9wIC0gcGFyZW50T2Zmc2V0LnRvcCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luVG9wXCIsIHRydWUgKSxcblx0XHRcdGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiwgdHJ1ZSApXG5cdFx0fTtcblx0fSxcblxuXHQvLyBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBkb2N1bWVudEVsZW1lbnQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly8gMSkgRm9yIHRoZSBlbGVtZW50IGluc2lkZSB0aGUgaWZyYW1lIHdpdGhvdXQgb2Zmc2V0UGFyZW50LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVyblxuXHQvLyAgICBkb2N1bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVudCB3aW5kb3dcblx0Ly8gMikgRm9yIHRoZSBoaWRkZW4gb3IgZGV0YWNoZWQgZWxlbWVudFxuXHQvLyAzKSBGb3IgYm9keSBvciBodG1sIGVsZW1lbnQsIGkuZS4gaW4gY2FzZSBvZiB0aGUgaHRtbCBub2RlIC0gaXQgd2lsbCByZXR1cm4gaXRzZWxmXG5cdC8vXG5cdC8vIGJ1dCB0aG9zZSBleGNlcHRpb25zIHdlcmUgbmV2ZXIgcHJlc2VudGVkIGFzIGEgcmVhbCBsaWZlIHVzZS1jYXNlc1xuXHQvLyBhbmQgbWlnaHQgYmUgY29uc2lkZXJlZCBhcyBtb3JlIHByZWZlcmFibGUgcmVzdWx0cy5cblx0Ly9cblx0Ly8gVGhpcyBsb2dpYywgaG93ZXZlciwgaXMgbm90IGd1YXJhbnRlZWQgYW5kIGNhbiBjaGFuZ2UgYXQgYW55IHBvaW50IGluIHRoZSBmdXR1cmVcblx0b2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50O1xuXG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJiBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBzY3JvbGxMZWZ0OiBcInBhZ2VYT2Zmc2V0XCIsIHNjcm9sbFRvcDogXCJwYWdlWU9mZnNldFwiIH0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7XG5cdHZhciB0b3AgPSBcInBhZ2VZT2Zmc2V0XCIgPT09IHByb3A7XG5cblx0alF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG1ldGhvZCwgdmFsICkge1xuXG5cdFx0XHQvLyBDb2FsZXNjZSBkb2N1bWVudHMgYW5kIHdpbmRvd3Ncblx0XHRcdHZhciB3aW47XG5cdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW07XG5cdFx0XHR9IGVsc2UgaWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR3aW4gPSBlbGVtLmRlZmF1bHRWaWV3O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gd2luID8gd2luWyBwcm9wIF0gOiBlbGVtWyBtZXRob2QgXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB3aW4gKSB7XG5cdFx0XHRcdHdpbi5zY3JvbGxUbyhcblx0XHRcdFx0XHQhdG9wID8gdmFsIDogd2luLnBhZ2VYT2Zmc2V0LFxuXHRcdFx0XHRcdHRvcCA/IHZhbCA6IHdpbi5wYWdlWU9mZnNldFxuXHRcdFx0XHQpO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtWyBtZXRob2QgXSA9IHZhbDtcblx0XHRcdH1cblx0XHR9LCBtZXRob2QsIHZhbCwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9O1xufSApO1xuXG4vLyBTdXBwb3J0OiBTYWZhcmkgPD03IC0gOS4xLCBDaHJvbWUgPD0zNyAtIDQ5XG4vLyBBZGQgdGhlIHRvcC9sZWZ0IGNzc0hvb2tzIHVzaW5nIGpRdWVyeS5mbi5wb3NpdGlvblxuLy8gV2Via2l0IGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MDg0XG4vLyBCbGluayBidWc6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTU4OTM0N1xuLy8gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hlbiBzcGVjaWZpZWQgZm9yIHRvcC9sZWZ0L2JvdHRvbS9yaWdodDtcbi8vIHJhdGhlciB0aGFuIG1ha2UgdGhlIGNzcyBtb2R1bGUgZGVwZW5kIG9uIHRoZSBvZmZzZXQgbW9kdWxlLCBqdXN0IGNoZWNrIGZvciBpdCBoZXJlXG5qUXVlcnkuZWFjaCggWyBcInRvcFwiLCBcImxlZnRcIiBdLCBmdW5jdGlvbiggX2ksIHByb3AgKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJvcCBdID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnBpeGVsUG9zaXRpb24sXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdFx0Y29tcHV0ZWQgPSBjdXJDU1MoIGVsZW0sIHByb3AgKTtcblxuXHRcdFx0XHQvLyBJZiBjdXJDU1MgcmV0dXJucyBwZXJjZW50YWdlLCBmYWxsYmFjayB0byBvZmZzZXRcblx0XHRcdFx0cmV0dXJuIHJudW1ub25weC50ZXN0KCBjb21wdXRlZCApID9cblx0XHRcdFx0XHRqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0gKyBcInB4XCIgOlxuXHRcdFx0XHRcdGNvbXB1dGVkO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn0gKTtcblxuXG4vLyBDcmVhdGUgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIGhlaWdodCwgd2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IEhlaWdodDogXCJoZWlnaHRcIiwgV2lkdGg6IFwid2lkdGhcIiB9LCBmdW5jdGlvbiggbmFtZSwgdHlwZSApIHtcblx0alF1ZXJ5LmVhY2goIHtcblx0XHRwYWRkaW5nOiBcImlubmVyXCIgKyBuYW1lLFxuXHRcdGNvbnRlbnQ6IHR5cGUsXG5cdFx0XCJcIjogXCJvdXRlclwiICsgbmFtZVxuXHR9LCBmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHtcblxuXHRcdC8vIE1hcmdpbiBpcyBvbmx5IGZvciBvdXRlckhlaWdodCwgb3V0ZXJXaWR0aFxuXHRcdGpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkge1xuXHRcdFx0dmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gXCJib29sZWFuXCIgKSxcblx0XHRcdFx0ZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyBcIm1hcmdpblwiIDogXCJib3JkZXJcIiApO1xuXG5cdFx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgdHlwZSwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBkb2M7XG5cblx0XHRcdFx0aWYgKCBpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gJCggd2luZG93ICkub3V0ZXJXaWR0aC9IZWlnaHQgcmV0dXJuIHcvaCBpbmNsdWRpbmcgc2Nyb2xsYmFycyAoZ2gtMTcyOSlcblx0XHRcdFx0XHRyZXR1cm4gZnVuY05hbWUuaW5kZXhPZiggXCJvdXRlclwiICkgPT09IDAgP1xuXHRcdFx0XHRcdFx0ZWxlbVsgXCJpbm5lclwiICsgbmFtZSBdIDpcblx0XHRcdFx0XHRcdGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBcImNsaWVudFwiICsgbmFtZSBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodFxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0ZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHRcdFx0XHQvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sXG5cdFx0XHRcdFx0Ly8gd2hpY2hldmVyIGlzIGdyZWF0ZXN0XG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcInNjcm9sbFwiICsgbmFtZSBdLCBkb2NbIFwic2Nyb2xsXCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwib2Zmc2V0XCIgKyBuYW1lIF0sIGRvY1sgXCJvZmZzZXRcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGRvY1sgXCJjbGllbnRcIiArIG5hbWUgXVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cblx0XHRcdFx0XHQvLyBHZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50LCByZXF1ZXN0aW5nIGJ1dCBub3QgZm9yY2luZyBwYXJzZUZsb2F0XG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6XG5cblx0XHRcdFx0XHQvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKTtcblx0XHRcdH0sIHR5cGUsIGNoYWluYWJsZSA/IG1hcmdpbiA6IHVuZGVmaW5lZCwgY2hhaW5hYmxlICk7XG5cdFx0fTtcblx0fSApO1xufSApO1xuXG5cbmpRdWVyeS5lYWNoKCBbXG5cdFwiYWpheFN0YXJ0XCIsXG5cdFwiYWpheFN0b3BcIixcblx0XCJhamF4Q29tcGxldGVcIixcblx0XCJhamF4RXJyb3JcIixcblx0XCJhamF4U3VjY2Vzc1wiLFxuXHRcImFqYXhTZW5kXCJcbl0sIGZ1bmN0aW9uKCBfaSwgdHlwZSApIHtcblx0alF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGUsIGZuICk7XG5cdH07XG59ICk7XG5cblxuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRiaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgbnVsbCwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9mZiggdHlwZXMsIG51bGwsIGZuICk7XG5cdH0sXG5cblx0ZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZuICkge1xuXG5cdFx0Ly8gKCBuYW1lc3BhY2UgKSBvciAoIHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKVxuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID9cblx0XHRcdHRoaXMub2ZmKCBzZWxlY3RvciwgXCIqKlwiICkgOlxuXHRcdFx0dGhpcy5vZmYoIHR5cGVzLCBzZWxlY3RvciB8fCBcIioqXCIsIGZuICk7XG5cdH0sXG5cblx0aG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkge1xuXHRcdHJldHVybiB0aGlzXG5cdFx0XHQub24oIFwibW91c2VlbnRlclwiLCBmbk92ZXIgKVxuXHRcdFx0Lm9uKCBcIm1vdXNlbGVhdmVcIiwgZm5PdXQgfHwgZm5PdmVyICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goXG5cdCggXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBcIiArXG5cdFwibW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgXCIgK1xuXHRcImNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgY29udGV4dG1lbnVcIiApLnNwbGl0KCBcIiBcIiApLFxuXHRmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cblx0XHQvLyBIYW5kbGUgZXZlbnQgYmluZGluZ1xuXHRcdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkge1xuXHRcdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID9cblx0XHRcdFx0dGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6XG5cdFx0XHRcdHRoaXMudHJpZ2dlciggbmFtZSApO1xuXHRcdH07XG5cdH1cbik7XG5cblxuXG5cbi8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seVxuLy8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQXG4vLyBSZXF1aXJlIHRoYXQgdGhlIFwid2hpdGVzcGFjZSBydW5cIiBzdGFydHMgZnJvbSBhIG5vbi13aGl0ZXNwYWNlXG4vLyB0byBhdm9pZCBPKE5eMikgYmVoYXZpb3Igd2hlbiB0aGUgZW5naW5lIHdvdWxkIHRyeSBtYXRjaGluZyBcIlxccyskXCIgYXQgZWFjaCBzcGFjZSBwb3NpdGlvbi5cbnZhciBydHJpbSA9IC9eW1xcc1xcdUZFRkZcXHhBMF0rfChbXlxcc1xcdUZFRkZcXHhBMF0pW1xcc1xcdUZFRkZcXHhBMF0rJC9nO1xuXG4vLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnlcbi8vIGFyZ3VtZW50cy5cbi8vIGpRdWVyeS5wcm94eSBpcyBkZXByZWNhdGVkIHRvIHByb21vdGUgc3RhbmRhcmRzIChzcGVjaWZpY2FsbHkgRnVuY3Rpb24jYmluZClcbi8vIEhvd2V2ZXIsIGl0IGlzIG5vdCBzbGF0ZWQgZm9yIHJlbW92YWwgYW55IHRpbWUgc29vblxualF1ZXJ5LnByb3h5ID0gZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkge1xuXHR2YXIgdG1wLCBhcmdzLCBwcm94eTtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdHRtcCA9IGZuWyBjb250ZXh0IF07XG5cdFx0Y29udGV4dCA9IGZuO1xuXHRcdGZuID0gdG1wO1xuXHR9XG5cblx0Ly8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWNcblx0Ly8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC5cblx0aWYgKCAhaXNGdW5jdGlvbiggZm4gKSApIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gU2ltdWxhdGVkIGJpbmRcblx0YXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApO1xuXHRwcm94eSA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBmbi5hcHBseSggY29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApO1xuXHR9O1xuXG5cdC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZFxuXHRwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKztcblxuXHRyZXR1cm4gcHJveHk7XG59O1xuXG5qUXVlcnkuaG9sZFJlYWR5ID0gZnVuY3Rpb24oIGhvbGQgKSB7XG5cdGlmICggaG9sZCApIHtcblx0XHRqUXVlcnkucmVhZHlXYWl0Kys7XG5cdH0gZWxzZSB7XG5cdFx0alF1ZXJ5LnJlYWR5KCB0cnVlICk7XG5cdH1cbn07XG5qUXVlcnkuaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5qUXVlcnkucGFyc2VKU09OID0gSlNPTi5wYXJzZTtcbmpRdWVyeS5ub2RlTmFtZSA9IG5vZGVOYW1lO1xualF1ZXJ5LmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xualF1ZXJ5LmlzV2luZG93ID0gaXNXaW5kb3c7XG5qUXVlcnkuY2FtZWxDYXNlID0gY2FtZWxDYXNlO1xualF1ZXJ5LnR5cGUgPSB0b1R5cGU7XG5cbmpRdWVyeS5ub3cgPSBEYXRlLm5vdztcblxualF1ZXJ5LmlzTnVtZXJpYyA9IGZ1bmN0aW9uKCBvYmogKSB7XG5cblx0Ly8gQXMgb2YgalF1ZXJ5IDMuMCwgaXNOdW1lcmljIGlzIGxpbWl0ZWQgdG9cblx0Ly8gc3RyaW5ncyBhbmQgbnVtYmVycyAocHJpbWl0aXZlcyBvciBvYmplY3RzKVxuXHQvLyB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIGZpbml0ZSBudW1iZXJzIChnaC0yNjYyKVxuXHR2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTtcblx0cmV0dXJuICggdHlwZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlID09PSBcInN0cmluZ1wiICkgJiZcblxuXHRcdC8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNhc3QgZmFsc2UgcG9zaXRpdmVzIChcIlwiKVxuXHRcdC8vIC4uLmJ1dCBtaXNpbnRlcnByZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3VsYXJseSBoZXggbGl0ZXJhbHMgKFwiMHguLi5cIilcblx0XHQvLyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0byBOYU5cblx0XHQhaXNOYU4oIG9iaiAtIHBhcnNlRmxvYXQoIG9iaiApICk7XG59O1xuXG5qUXVlcnkudHJpbSA9IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRyZXR1cm4gdGV4dCA9PSBudWxsID9cblx0XHRcIlwiIDpcblx0XHQoIHRleHQgKyBcIlwiICkucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApO1xufTtcblxuXG5cbi8vIFJlZ2lzdGVyIGFzIGEgbmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlclxuLy8gZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwgYnV0IG5vdCB2aWEgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdFxuLy8gdW5kZXJzdGFuZHMgYW5vbnltb3VzIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0XG4vLyB3YXkgdG8gcmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlXG4vLyBkZXJpdmVkIGZyb20gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2Vcbi8vIGZpbGUgbmFtZS4gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50c1xuLy8gdG8gY2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLlxuXG4vLyBOb3RlIHRoYXQgZm9yIG1heGltdW0gcG9ydGFiaWxpdHksIGxpYnJhcmllcyB0aGF0IGFyZSBub3QgalF1ZXJ5IHNob3VsZFxuLy8gZGVjbGFyZSB0aGVtc2VsdmVzIGFzIGFub255bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBhIGdsb2JhbCBpZiBhblxuLy8gQU1EIGxvYWRlciBpcyBwcmVzZW50LiBqUXVlcnkgaXMgYSBzcGVjaWFsIGNhc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcy93aWtpL1VwZGF0aW5nLWV4aXN0aW5nLWxpYnJhcmllcyN3aWtpLWFub25cblxuaWYgKCB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCApIHtcblx0ZGVmaW5lKCBcImpxdWVyeVwiLCBbXSwgZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeTtcblx0fSApO1xufVxuXG5cblxuXG52YXJcblxuXHQvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0X2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksXG5cblx0Ly8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0XyQgPSB3aW5kb3cuJDtcblxualF1ZXJ5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiggZGVlcCApIHtcblx0aWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy4kID0gXyQ7XG5cdH1cblxuXHRpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5O1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeTtcbn07XG5cbi8vIEV4cG9zZSBqUXVlcnkgYW5kICQgaWRlbnRpZmllcnMsIGV2ZW4gaW4gQU1EXG4vLyAodHJhYy03MTAyI2NvbW1lbnQ6MTAsIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNTU3KVxuLy8gYW5kIENvbW1vbkpTIGZvciBicm93c2VyIGVtdWxhdG9ycyAodHJhYy0xMzU2NilcbmlmICggdHlwZW9mIG5vR2xvYmFsID09PSBcInVuZGVmaW5lZFwiICkge1xuXHR3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7XG59XG5cblxuXG5cbnJldHVybiBqUXVlcnk7XG59ICk7XG4iLCJpbXBvcnQgeyBJQWN0aW9uIH0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbmltcG9ydCAnLi9ib290c3RyYXAuc2NzcydcclxuZXhwb3J0IGNvbnN0IGFjdGlvbkFkZGlucyA6UmVjb3JkPHN0cmluZyxJQWN0aW9uPj17fTtcclxuIiwiXHJcbmltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7ICBJQWN0aW9uLElBY3Rpb25SZXN1bHQsIElBY3Rpb25Ob2RlLCBJQWN0aW9uUHJvcGVydHksIElGaWVsZCwgSUNvbnRleHQgfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuXHJcbmludGVyZmFjZSBJTXVzdElucHV0UHJvcHN7XHJcbiAgICBmaWVsZDpJRmllbGQ7XHJcbiAgICBtZXNzYWdlOnN0cmluZzsgXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNdXN0SW5wdXRBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9ue1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gICAgcHJvcHM6SU11c3RJbnB1dFByb3BzO1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLm5hbWU9XCLlv4XpoIjjg4Hjgqfjg4Pjgq9cIjtcclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzPVtdO1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgICAgICB0aGlzLnByb3BzPXtcclxuICAgICAgICAgICAgZmllbGQ6e2NvZGU6Jyd9LFxyXG4gICAgICAgICAgICBtZXNzYWdlOicnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBwcm9jZXNzKGFjdGlvbk5vZGU6SUFjdGlvbk5vZGUsZXZlbnQ6YW55LGNvbnRleHQ6SUNvbnRleHQpOlByb21pc2U8SUFjdGlvblJlc3VsdD4ge1xyXG4gICAgICAgIGxldCByZXN1bHQ9e1xyXG4gICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDpmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvblByb3BzPWFjdGlvbk5vZGUuYWN0aW9uUHJvcHM7XHJcbiAgICAgICAgICAgIGlmICghKCdmaWVsZCcgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkgJiYgISgnbWVzc2FnZScgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBJTXVzdElucHV0UHJvcHM7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IGV2ZW50LnJlY29yZDtcclxuICAgICAgICAgICAgaWYoISh0aGlzLnByb3BzLmZpZWxkLmNvZGUgaW4gcmVjb3JkKSl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOODleOCo+ODvOODq+ODiVske3RoaXMucHJvcHMuZmllbGQuY29kZX1d44GM6KaL44Gk44GL44KK44G+44Gb44KT44Gn44GX44Gf44CCYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS52YWx1ZTtcclxuICAgICAgICAgICAgaWYodmFsdWU9PT11bmRlZmluZWQgfHwgdmFsdWU9PT0nJyl7XHJcbiAgICAgICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS5lcnJvcj10aGlzLnByb3BzLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdD0ge1xyXG4gICAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgICByZXN1bHQ6dHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgY29udGV4dC5lcnJvcnMuaGFuZGxlRXJyb3IoZXJyb3IsYWN0aW9uTm9kZSk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jYW5OZXh0PWZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbiAgICBcclxufVxyXG5uZXcgTXVzdElucHV0QWN0aW9uKCk7IiwiZXhwb3J0IGNsYXNzIEZvcm1hdHRlcntcclxuICAgIHN0YXRpYyBudW1iZXJGb3JtYXQobnVtOm51bWJlcixmb3JtYXQ6c3RyaW5nKTpzdHJpbmd7XHJcbiAgICAgICAgbGV0IGludGVnZXJQYXJ0ID0gTWF0aC5mbG9vcihNYXRoLmFicyhudW0pKS50b1N0cmluZygpO1xyXG4gICAgICAgIGxldCBmcmFjdGlvblBhcnQgPSBNYXRoLmFicyhudW0pLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSB8fCAnJztcclxuICAgICAgICBsZXQgaXNOZWdhdGl2ZSA9IG51bSA8IDA7XHJcbiAgICAgICAgbGV0IGlzUGVyY2VudCA9IGZvcm1hdC5pbmNsdWRlcygnJScpOyAgICAgICBcclxuICAgICAgICAvLyAlXHJcbiAgICAgICAgaWYgKGlzUGVyY2VudCkge1xyXG4gICAgICAgICAgICBudW0gKj0gMTAwO1xyXG4gICAgICAgICAgICBpbnRlZ2VyUGFydCA9IE1hdGguZmxvb3IoTWF0aC5hYnMobnVtKSkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgZnJhY3Rpb25QYXJ0ID0gTWF0aC5hYnMobnVtKS50b1N0cmluZygpLnNwbGl0KCcuJylbMV0gfHwgJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIOWwj+aVsOOBqOaVtOaVsOmDqOWIhuOBruWHpueQhlxyXG4gICAgICAgIGxldCBbaW50ZWdlckZvcm1hdCwgZnJhY3Rpb25Gb3JtYXRdID0gZm9ybWF0LnNwbGl0KCcuJyk7XHJcbiAgICAgICAgaW50ZWdlclBhcnQgPSBpbnRlZ2VyRm9ybWF0ID8gaW50ZWdlclBhcnQucGFkU3RhcnQoaW50ZWdlckZvcm1hdC5yZXBsYWNlKC9bXjBdL2csICcnKS5sZW5ndGgsICcwJykgOiBpbnRlZ2VyUGFydDtcclxuICAgICAgICBmcmFjdGlvblBhcnQgPSBmcmFjdGlvblBhcnQucGFkRW5kKGZyYWN0aW9uRm9ybWF0ID8gZnJhY3Rpb25Gb3JtYXQubGVuZ3RoIDogMCwgJzAnKTtcclxuXHJcbiAgICAgICAgLy8g44Kr44Oe5Yy65YiHXHJcbiAgICAgICAgaWYgKC8sLy50ZXN0KGludGVnZXJGb3JtYXQpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gW107XHJcbiAgICAgICAgICAgIHdoaWxlIChpbnRlZ2VyUGFydC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcGFydHMudW5zaGlmdChpbnRlZ2VyUGFydC5zbGljZSgtMykpO1xyXG4gICAgICAgICAgICBpbnRlZ2VyUGFydCA9IGludGVnZXJQYXJ0LnNsaWNlKDAsIC0zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpbnRlZ2VyUGFydCA9IHBhcnRzLmpvaW4oJywnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOOBmeOBueOBpue1hOWQiOOCj+OBm1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBmcmFjdGlvbkZvcm1hdCA/IGAke2ludGVnZXJQYXJ0fS4ke2ZyYWN0aW9uUGFydH1gIDogaW50ZWdlclBhcnQ7XHJcbiAgICAgICAgcmVzdWx0ID0gaXNOZWdhdGl2ZSA/IGAtJHtyZXN1bHR9YCA6IHJlc3VsdDtcclxuICAgICAgICByZXR1cm4gaXNQZXJjZW50ID8gYCR7cmVzdWx0fSVgIDogcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgICBcclxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpICsgMTtcclxuICAgICAgICBjb25zdCBkYXkgPSBkYXRlLmdldERhdGUoKTtcclxuICAgICAgICBjb25zdCBob3VyID0gZGF0ZS5nZXRIb3VycygpO1xyXG4gICAgICAgIGNvbnN0IG1pbnV0ZSA9IGRhdGUuZ2V0TWludXRlcygpO1xyXG4gICAgICAgIGNvbnN0IHNlY29uZCA9IGRhdGUuZ2V0U2Vjb25kcygpO1xyXG4gICAgICAgIGNvbnN0IG1pbGxpc2Vjb25kID0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKTtcclxuICAgICAgICBjb25zdCB0aW1lWm9uZU9mZnNldCA9IC1kYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgLyA2MDtcclxuICAgICAgXHJcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRzID0ge1xyXG4gICAgICAgICAgJ3l5eXknOiB5ZWFyLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAneXknOiB5ZWFyLnRvU3RyaW5nKCkuc2xpY2UoLTIpLFxyXG4gICAgICAgICAgJ01NJzogbW9udGgudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgJ00nOiBtb250aC50b1N0cmluZygpLFxyXG4gICAgICAgICAgJ2RkJzogZGF5LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSxcclxuICAgICAgICAgICdkJzogZGF5LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAnSEgnOiBob3VyLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSxcclxuICAgICAgICAgICdIJzogaG91ci50b1N0cmluZygpLFxyXG4gICAgICAgICAgJ2hoJzogKGhvdXIgPiAxMiA/IGhvdXIgLSAxMiA6IGhvdXIpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSxcclxuICAgICAgICAgICdoJzogKGhvdXIgPiAxMiA/IGhvdXIgLSAxMiA6IGhvdXIpLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAnbW0nOiBtaW51dGUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgJ20nOiBtaW51dGUudG9TdHJpbmcoKSxcclxuICAgICAgICAgICdzcyc6IHNlY29uZC50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXHJcbiAgICAgICAgICAncyc6IHNlY29uZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgJ2ZmZic6IG1pbGxpc2Vjb25kLnRvU3RyaW5nKCkucGFkU3RhcnQoMywgJzAnKSxcclxuICAgICAgICAgICd6enonOiAodGltZVpvbmVPZmZzZXQgPj0gMCA/ICcrJyA6ICctJykgKyBNYXRoLmFicyh0aW1lWm9uZU9mZnNldCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpICsgJzowMCdcclxuICAgICAgICB9O1xyXG4gICAgICBcclxuICAgICAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL3l5eXl8eXl8TU18TXxkZHxkfEhIfEh8aGh8aHxtbXxtfHNzfHN8ZmZmfHp6ei9nLCAobWF0Y2gpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXBsYWNlbWVudHNbbWF0Y2ggYXMga2V5b2YgdHlwZW9mIHJlcGxhY2VtZW50c10gfHwgbWF0Y2g7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgIFxyXG5cclxufSIsIlxyXG5pbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyBJRmllbGQsIElBY3Rpb24sSUFjdGlvblJlc3VsdCwgSUFjdGlvbk5vZGUsIElBY3Rpb25Qcm9wZXJ0eSwgSUNvbnRleHQsIElWYXJOYW1lIH0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbmltcG9ydCB7IEZvcm1hdHRlciB9IGZyb20gXCIuLi91dGlsL2Zvcm1hdFwiO1xyXG5cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7ICRmb3JtYXQ6IGFueTsgfSAgXHJcbn1cclxuXHJcbmludGVyZmFjZSBJQXV0b051bWJlcmluZ1Byb3Bze1xyXG4gICAgLy/mlofmm7jnlarlj7fjgpLmoLzntI3jgZnjgotcclxuICAgIGZpZWxkOklGaWVsZDtcclxuICAgIGZvcm1hdDpzdHJpbmc7XHJcbiAgICBwcmVmaXg6c3RyaW5nO1xyXG4gICAgc3VmZml4OnN0cmluZztcclxuICAgIHZlck5hbWU6SVZhck5hbWU7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBdXRvTnVtYmVyaW5nIGltcGxlbWVudHMgSUFjdGlvbntcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICAgIHByb3BzOklBdXRvTnVtYmVyaW5nUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMubmFtZT1cIuiHquWLleaOoeeVquOBmeOCi1wiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9W107XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gICAgICAgIHRoaXMucHJvcHM9e1xyXG4gICAgICAgICAgICBmaWVsZDp7Y29kZTonJ30sXHJcbiAgICAgICAgICAgIGZvcm1hdDonJyxcclxuICAgICAgICAgICAgcHJlZml4OicnLFxyXG4gICAgICAgICAgICBzdWZmaXg6JycsXHJcbiAgICAgICAgICAgIHZlck5hbWU6e25hbWU6Jyd9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdsb2JhbFRoaXMud2luZG93LiRmb3JtYXQ9dGhpcy5mb3JtYXQ7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gICAgfVxyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44Gu5Yem55CG44KS5a6f6KOF44GZ44KLXHJcbiAqIEBwYXJhbSBhY3Rpb25Ob2RlIOOCouOCr+OCt+ODp+ODs+ODjuODvOODiVxyXG4gKiBAcGFyYW0gZXZlbnQgS2ludG9uZeOBruOCpOODmeODs+ODiFxyXG4gKiBAcGFyYW0gY29udGV4dCDjgrPjg7Pjg4bjgq3jgrnjg4jvvIjjg6zjgrPjg7zjg4njgIHlpInmlbDmg4XloLHjgpLmjIHjgaPjgabjgYTjgovvvIlcclxuICogQHJldHVybnMgXHJcbiAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSxjb250ZXh0OklDb250ZXh0KTpQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgICAgICBsZXQgcmVzdWx0PXtcclxuICAgICAgICAgICAgY2FuTmV4dDpmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9YWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgaWYgKCEoJ2ZpZWxkJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdmb3JtYXQnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUgYXMgSUF1dG9OdW1iZXJpbmdQcm9wcztcclxuICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gZXZlbnQucmVjb3JkO1xyXG4gICAgICAgICAgICBjb25zdCBkb2NOdW0gPSBhd2FpdCB0aGlzLmNyZWF0ZU51bWJlcih0aGlzLnByb3BzKTtcclxuICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0udmFsdWU9ZG9jTnVtO1xyXG4gICAgICAgICAgICAvL+WkieaVsOioreWumlxyXG4gICAgICAgICAgICBpZih0aGlzLnByb3BzLnZlck5hbWUgJiYgdGhpcy5wcm9wcy52ZXJOYW1lLm5hbWUhPT0nJyl7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnZhcmlhYmxlc1t0aGlzLnByb3BzLnZlck5hbWUubmFtZV09ZG9jTnVtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdD0ge1xyXG4gICAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgICByZXN1bHQ6dHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgY29udGV4dC5lcnJvcnMuaGFuZGxlRXJyb3IoZXJyb3IsYWN0aW9uTm9kZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBjYW5OZXh0OmZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXhlY1RlbXBsYXRlKHRlbXBsYXRlOnN0cmluZyk6c3RyaW5ne1xyXG4gICAgICAgIGlmKHRlbXBsYXRlPT09dW5kZWZpbmVkKSByZXR1cm4gJyc7XHJcbiAgICAgICAgY29uc3QgcmVnZXggPSAvXFwkXFx7KFtefV0rKVxcfS9nO1xyXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKHJlZ2V4LChtYXRjaCxleHByKT0+e1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leGVjRXZhbChtYXRjaCxleHByKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBleGVjRXZhbChtYXRjaDpzdHJpbmcsZXhwcjpzdHJpbmcpOnN0cmluZ3tcclxuICAgICAgICBjb25zb2xlLmxvZyhtYXRjaCk7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIHJldHVybiBldmFsKGV4cHIpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvcm1hdChwYXR0ZXJuOnN0cmluZyk6c3RyaW5ne1xyXG4gICAgICAgIGNvbnN0IG5vdz1uZXcgRGF0ZSgpO1xyXG4gICAgICAgIHJldHVybiBGb3JtYXR0ZXIuZGF0ZUZvcm1hdChub3csIHBhdHRlcm4pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZU51bWJlcihwcm9wczpJQXV0b051bWJlcmluZ1Byb3BzKXtcclxuICAgICAgICBsZXQgbnVtYmVyIDpzdHJpbmc9Jyc7XHJcbiAgICAgICAgbGV0IHByZWZpeDpzdHJpbmc9Jyc7XHJcbiAgICAgICAgbGV0IHN1ZmZpeDpzdHJpbmc9Jyc7XHJcbiAgICAgICAgbGV0IG5vPTE7ICAgICBcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIG5vID0gYXdhaXQgdGhpcy5mZXRjaE5vKCk7XHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihwcm9wcy5mb3JtYXQhPT11bmRlZmluZWQgJiYgcHJvcHMuZm9ybWF0IT09Jycpe1xyXG4gICAgICAgICAgICBudW1iZXI9Rm9ybWF0dGVyLm51bWJlckZvcm1hdChubywgcHJvcHMuZm9ybWF0KTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgbnVtYmVyPW5vLnRvU3RyaW5nKDEwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHByb3BzLnByZWZpeCE9PXVuZGVmaW5lZCAmJiBwcm9wcy5wcmVmaXghPT0nJyl7XHJcbiAgICAgICAgICAgIHByZWZpeD10aGlzLmV4ZWNUZW1wbGF0ZShwcm9wcy5wcmVmaXgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYocHJvcHMuc3VmZml4IT09dW5kZWZpbmVkICYmIHByb3BzLnN1ZmZpeCE9PScnKXtcclxuICAgICAgICAgICAgc3VmZml4PXRoaXMuZXhlY1RlbXBsYXRlKHByb3BzLnN1ZmZpeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHtwcmVmaXh9JHtudW1iZXJ9JHtzdWZmaXh9YDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmZXRjaE5vKCk6UHJvbWlzZTxudW1iZXI+e1xyXG4gICAgICAgIGxldCByZWNObz0xO1xyXG5cclxuICAgICAgICByZXR1cm4gYXdhaXQgbmV3IGtpbnRvbmUuUHJvbWlzZTxudW1iZXI+KChyZXNvbHZlLHJlamVjdCk9PntcclxuICAgICAgICAgICAgY29uc3QgYXBwdXJsID0ga2ludG9uZS5hcGkudXJsKCcvay92MS9yZWNvcmRzJyx0cnVlKTtcclxuICAgICAgICAgICAgY29uc3QgcGFyYW1zPXtcclxuICAgICAgICAgICAgICAgIGFwcDpraW50b25lLmFwcC5nZXRJZCgpLFxyXG4gICAgICAgICAgICAgICAgZmllbGRzOlsnJGlkJ10sXHJcbiAgICAgICAgICAgICAgICBxdWVyeTonbGltaXQgMSdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGtpbnRvbmUuYXBpKGFwcHVybCwnR0VUJyxwYXJhbXMpLnRoZW4oKHJlc3ApPT57XHJcbiAgICAgICAgICAgICAgICBpZihyZXNwLnJlY29yZHNbMF0hPT1udWxsKXtcclxuICAgICAgICAgICAgICAgICAgICByZWNObyA9IHBhcnNlSW50KHJlc3AucmVjb3Jkc1swXS4kaWQudmFsdWUsMTApKzE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlY05vKTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKT0+e1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV09dGhpcztcclxuICAgIH1cclxuICAgIFxyXG59XHJcbm5ldyBBdXRvTnVtYmVyaW5nKCk7IiwiaW1wb3J0IHsgSUNvbnRleHQsSUNvZGVWYWx1ZSB9IGZyb20gXCIuL0FjdGlvblR5cGVzXCI7XHJcblxyXG4vL+ODjuODvOODieeoruWIpVxyXG5leHBvcnQgZW51bSBOb2RlVHlwZXtcclxuICBSb290ID0gJ3Jvb3QnLFxyXG4gIExvZ2ljR3JvdXAgPSdsb2dpY2dyb3VwJyxcclxuICBDb25kaXRpb24gPSdjb25kaXRpb24nXHJcbn1cclxuXHJcbi8v44Ot44K444OD44Kv44Kq44Oa44Os44O844K/44O8XHJcbmV4cG9ydCBlbnVtIExvZ2ljYWxPcGVyYXRvcntcclxuICBBTkQgPSAnQU5EJyxcclxuICBPUiA9ICdPUidcclxufVxyXG5cclxuLy/mnaHku7bjgqrjg5rjg6zjg7zjgr/jg7xcclxuZXhwb3J0IGVudW0gT3BlcmF0b3J7XHJcbiAgRXF1YWwgPSAnPScsXHJcbiAgTm90RXF1YWw9JyE9JyxcclxuICBHcmVhdGVyID0gJz4nLFxyXG4gIEdyZWF0ZXJPckVxdWFsID0gJz49JyxcclxuICBMZXNzID0gJzwnLFxyXG4gIExlc3NPckVxdWFsID0gJzw9JyxcclxuICBDb250YWlucyA9ICdjb250YWlucycsXHJcbiAgTm90Q29udGFpbnMgPSAnbm90IGNvbnRhaW5zJyxcclxuICBTdGFydFdpdGggPSAnc3RhcnQgV2l0aCcsXHJcbiAgRW5kV2l0aCA9ICdlbmQgd2l0aCcsXHJcbiAgTm90U3RhcnRXaXRoID0gJ25vdCBzdGFydCB3aXRoJyxcclxuICBOb3RFbmRXaXRoID0gJ25vdCBlbmQgd2l0aCdcclxufVxyXG5cclxuXHJcbi8vIElOb2RlXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU5vZGUge1xyXG4gIGluZGV4Om51bWJlcjtcclxuICB0eXBlOiBOb2RlVHlwZTtcclxuICBoZWFkZXI6c3RyaW5nO1xyXG4gIHBhcmVudDogSU5vZGUgfCBudWxsO1xyXG4gIGxvZ2ljYWxPcGVyYXRvcjpMb2dpY2FsT3BlcmF0b3JcclxufVxyXG5cclxuLy8g44Ot44K444OD44Kv44OO44O844OJXHJcbmV4cG9ydCBjbGFzcyBHcm91cE5vZGUgaW1wbGVtZW50cyBJTm9kZSB7XHJcbiAgaW5kZXg6bnVtYmVyO1xyXG4gIHR5cGU6IE5vZGVUeXBlO1xyXG4gIGNoaWxkcmVuOiBJTm9kZVtdO1xyXG4gIHBhcmVudDogSU5vZGUgfCBudWxsO1xyXG4gIGxvZ2ljYWxPcGVyYXRvcjogTG9naWNhbE9wZXJhdG9yO1xyXG4gIGdldCBsYWJlbCgpOnN0cmluZ3tcclxuICAgIHJldHVybiB0aGlzLmxvZ2ljYWxPcGVyYXRvcjtcclxuICB9XHJcbiAgZ2V0IGhlYWRlcigpOnN0cmluZ3tcclxuICAgIHJldHVybiB0aGlzLnR5cGU9PT1Ob2RlVHlwZS5Sb290Pydyb290JzonZ2VuZXJpYyc7XHJcbiAgfVxyXG4gIGdldCBleHBhbmRlZCgpOmJvb2xlYW57XHJcbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg+MDtcclxuICB9XHJcbiAgY29uc3RydWN0b3IobG9naWNPcDpMb2dpY2FsT3BlcmF0b3IsIHBhcmVudDogSU5vZGUgfCBudWxsKSB7XHJcbiAgICB0aGlzLmluZGV4PTA7XHJcbiAgICB0aGlzLnR5cGUgPSBwYXJlbnQ9PW51bGw/Tm9kZVR5cGUuUm9vdDogTm9kZVR5cGUuTG9naWNHcm91cDtcclxuICAgIHRoaXMubG9naWNhbE9wZXJhdG9yID0gbG9naWNPcDtcclxuICAgIHRoaXMucGFyZW50PXBhcmVudDtcclxuICAgIHRoaXMuY2hpbGRyZW49W107XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUpTT04oanNvbjogYW55LCBwYXJlbnQ6IElOb2RlIHwgbnVsbCA9IG51bGwpOiBHcm91cE5vZGUge1xyXG4gICAgY29uc3Qgbm9kZSA9IG5ldyBHcm91cE5vZGUoanNvbi5sb2dpY2FsT3BlcmF0b3IsIHBhcmVudCk7XHJcbiAgICBub2RlLmluZGV4PWpzb24uaW5kZXg7XHJcbiAgICBub2RlLmNoaWxkcmVuID0ganNvbi5jaGlsZHJlbi5tYXAoKGNoaWxkSnNvbjogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBjaGlsZEpzb24udHlwZSA9PT0gTm9kZVR5cGUuTG9naWNHcm91cFxyXG4gICAgICAgID8gR3JvdXBOb2RlLmZyb21KU09OKGNoaWxkSnNvbiwgbm9kZSlcclxuICAgICAgICA6IENvbmRpdGlvbk5vZGUuZnJvbUpTT04oY2hpbGRKc29uLCBub2RlKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG5vZGU7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuLy8g5p2h5Lu25byP44OO44O844OJXHJcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25Ob2RlIGltcGxlbWVudHMgSU5vZGUge1xyXG4gIGluZGV4OiBudW1iZXI7XHJcbiAgdHlwZTogTm9kZVR5cGU7XHJcbiAgcGFyZW50OklOb2RlO1xyXG4gIGdldCBsb2dpY2FsT3BlcmF0b3IoKTogTG9naWNhbE9wZXJhdG9ye1xyXG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmxvZ2ljYWxPcGVyYXRvcjtcclxuICB9O1xyXG4gIG9iamVjdDogYW55OyAvLyDmr5TovIPlhYNcclxuICBvcGVyYXRvcjogT3BlcmF0b3I7IC8vIOavlOi8g+WtkFxyXG4gIHZhbHVlOiBhbnk7XHJcbiAgZ2V0IGhlYWRlcigpOnN0cmluZ3tcclxuICAgIHJldHVybiAnZ2VuZXJpYyc7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihvYmplY3Q6IGFueSwgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogYW55LCBwYXJlbnQ6IEdyb3VwTm9kZSkge1xyXG4gICAgdGhpcy5pbmRleD0wO1xyXG4gICAgdGhpcy50eXBlID0gTm9kZVR5cGUuQ29uZGl0aW9uO1xyXG4gICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7XHJcbiAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB0aGlzLnBhcmVudD1wYXJlbnQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUpTT04oanNvbjogYW55LCBwYXJlbnQ6IEdyb3VwTm9kZSk6IENvbmRpdGlvbk5vZGUge1xyXG4gICAgY29uc3Qgbm9kZT0gbmV3IENvbmRpdGlvbk5vZGUoXHJcbiAgICAgIGpzb24ub2JqZWN0LFxyXG4gICAgICBqc29uLm9wZXJhdG9yLFxyXG4gICAgICBqc29uLnZhbHVlLFxyXG4gICAgICBwYXJlbnRcclxuICAgICk7XHJcbiAgICBub2RlLmluZGV4PWpzb24uaW5kZXg7XHJcbiAgICByZXR1cm4gbm9kZTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDmnaHku7blvI/jga7nrqHnkIbjgq/jg6njgrlcclxuICovXHJcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25UcmVlIHtcclxuICByb290OiBHcm91cE5vZGU7XHJcbiAgbWF4SW5kZXg6bnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMubWF4SW5kZXg9MDtcclxuICAgIHRoaXMucm9vdCA9IG5ldyBHcm91cE5vZGUoTG9naWNhbE9wZXJhdG9yLkFORCwgbnVsbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDjg47jg7zjg4nov73liqBcclxuICAgKiBAcGFyYW0gcGFyZW50IFxyXG4gICAqIEBwYXJhbSBub2RlIFxyXG4gICAqL1xyXG4gIGFkZE5vZGUocGFyZW50OiBHcm91cE5vZGUsIG5vZGU6IElOb2RlKTogdm9pZCB7XHJcbiAgICB0aGlzLm1heEluZGV4Kys7XHJcbiAgICBub2RlLmluZGV4PXRoaXMubWF4SW5kZXg7XHJcbiAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChub2RlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqICDjg47jg7zjg4nliYrpmaRcclxuICAgKiBAcGFyYW0gbm9kZSBcclxuICAgKi9cclxuICByZW1vdmVOb2RlKG5vZGU6IElOb2RlKTogdm9pZCB7XHJcbiAgICBpZiAobm9kZS5wYXJlbnQgPT09IG51bGwpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCfjg6vjg7zjg4jjg47jg7zjg4nliYrpmaTjgafjgY3jgb7jgZvjgpMnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50IGFzIEdyb3VwTm9kZTtcclxuICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihub2RlKTtcclxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICBwYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiDmnaHku7bjg4Tjg6rjg7zjgYvjgonjgqTjg7Pjg4fjgqPjgq/jgrnlgKTjgafmnaHku7bjg47jg7zjg4njgpLmpJzntKLjgZnjgotcclxuICogQHBhcmFtIGluZGV4IFxyXG4gKiBAcmV0dXJucyBcclxuICovXHJcbiAgZmluZEJ5SW5kZXgoaW5kZXg6bnVtYmVyKTpJTm9kZXx1bmRlZmluZWR7XHJcbiAgICByZXR1cm4gdGhpcy5maW5kQ2hpbGRyZW4odGhpcy5yb290LGluZGV4KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaMh+WumuOBruODjuODvOODieOCsOODq+ODvOODl+OBi+OCieOCpOODs+ODh+OCo+OCr+OCueWApOOBp+adoeS7tuODjuODvOODieOCkuaknOe0ouOBmeOCi1xyXG4gICAqIEBwYXJhbSBwYXJlbnQgXHJcbiAgICogQHBhcmFtIGluZGV4IFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGZpbmRDaGlsZHJlbihwYXJlbnQ6IEdyb3VwTm9kZSwgaW5kZXg6IG51bWJlcik6IElOb2RlIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmIChwYXJlbnQuaW5kZXggPT09IGluZGV4KSB7XHJcbiAgICAgIHJldHVybiBwYXJlbnQ7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgcGFyZW50LmNoaWxkcmVuKSB7XHJcbiAgICAgIGlmIChub2RlLmluZGV4ID09PSBpbmRleCkge1xyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChub2RlLnR5cGUgIT09IE5vZGVUeXBlLkNvbmRpdGlvbikge1xyXG4gICAgICAgIGNvbnN0IGZvdW5kTm9kZSA9IHRoaXMuZmluZENoaWxkcmVuKG5vZGUgYXMgR3JvdXBOb2RlLCBpbmRleCk7XHJcbiAgICAgICAgaWYgKGZvdW5kTm9kZSkge1xyXG4gICAgICAgICAgcmV0dXJuIGZvdW5kTm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gbm9kZSDmnIDlpKfjga7jgqTjg7Pjg4fjgqPjgq/jgrnlgKTjgpLlj5blvpfjgZnjgotcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBnZXRNYXhJbmRleChub2RlOklOb2RlKTpudW1iZXJ7XHJcbiAgICBsZXQgbWF4SW5kZXg6bnVtYmVyPW5vZGUuaW5kZXg7XHJcbiAgICBpZihub2RlLnR5cGUhPT1Ob2RlVHlwZS5Db25kaXRpb24pe1xyXG4gICAgICBjb25zdCBncm91cE5vZGUgPSBub2RlIGFzIEdyb3VwTm9kZTtcclxuICAgICAgZ3JvdXBOb2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKT0+e1xyXG4gICAgICAgICAgY29uc3QgY2hpbGRNYXggPSB0aGlzLmdldE1heEluZGV4KGNoaWxkKTtcclxuICAgICAgICAgIGlmKGNoaWxkTWF4Pm1heEluZGV4KXtcclxuICAgICAgICAgICAgbWF4SW5kZXg9Y2hpbGRNYXg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1heEluZGV4O1xyXG59XHJcblxyXG4gIC8qKlxyXG4gICAqIOadoeS7tuW8j+OCkuihqOekuuOBmeOCi1xyXG4gICAqIEBwYXJhbSBub2RlIOadoeS7tuODjuODvOODiVxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGJ1aWxkQ29uZGl0aW9uU3RyaW5nKG5vZGU6SU5vZGUpe1xyXG4gICAgaWYgKG5vZGUudHlwZSAhPT0gTm9kZVR5cGUuQ29uZGl0aW9uKSB7XHJcbiAgICAgIGxldCBjb25kaXRpb25TdHJpbmcgPSAnKCc7XHJcbiAgICAgIGNvbnN0IGdyb3VwTm9kZSA9IG5vZGUgYXMgR3JvdXBOb2RlO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdyb3VwTm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkQ29uZGl0aW9uU3RyaW5nID0gdGhpcy5idWlsZENvbmRpdGlvblN0cmluZyhncm91cE5vZGUuY2hpbGRyZW5baV0pO1xyXG4gICAgICAgIGlmIChjaGlsZENvbmRpdGlvblN0cmluZyAhPT0gJycpIHtcclxuICAgICAgICAgIGNvbmRpdGlvblN0cmluZyArPSBjaGlsZENvbmRpdGlvblN0cmluZztcclxuICAgICAgICAgIGlmIChpIDwgZ3JvdXBOb2RlLmNoaWxkcmVuLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uU3RyaW5nICs9IGAgJHtncm91cE5vZGUubG9naWNhbE9wZXJhdG9yfSBgO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25kaXRpb25TdHJpbmcgKz0gJyknO1xyXG4gICAgICByZXR1cm4gY29uZGl0aW9uU3RyaW5nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgY29uZE5vZGU9bm9kZSBhcyBDb25kaXRpb25Ob2RlO1xyXG4gICAgICBpZiAoY29uZE5vZGUub2JqZWN0ICYmIGNvbmROb2RlLm9wZXJhdG9yICkge1xyXG4gICAgICAgIGxldCB2YWx1ZT1jb25kTm9kZS52YWx1ZTtcclxuICAgICAgICBpZih2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09J29iamVjdCcgJiYgKCdsYWJlbCcgaW4gdmFsdWUpKXtcclxuICAgICAgICAgICAgdmFsdWUgPWNvbmROb2RlLnZhbHVlLmxhYmVsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYCR7Y29uZE5vZGUub2JqZWN0Lm5hbWV9ICR7Y29uZE5vZGUub3BlcmF0b3J9ICcke3ZhbHVlfSdgO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiDjgZnjgbnjgabmnaHku7blvI/jgpLlj5blvpfjgZnjgotcclxuICAgKi9cclxuICBnZXRDb25kaXRpb25zKHBhcmVudDpHcm91cE5vZGUpOkNvbmRpdGlvbk5vZGVbXXtcclxuICAgIGNvbnN0IGNvbmRpTm9kZXM6Q29uZGl0aW9uTm9kZVtdPVtdO1xyXG4gICAgcGFyZW50LmNoaWxkcmVuLmZvckVhY2goKG5vZGUpPT57XHJcbiAgICAgIGlmKG5vZGUudHlwZT09PU5vZGVUeXBlLkNvbmRpdGlvbil7XHJcbiAgICAgICAgY29uZGlOb2Rlcy5wdXNoKG5vZGUgYXMgQ29uZGl0aW9uTm9kZSk7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIGNvbmRpTm9kZXMucHVzaCguLi50aGlzLmdldENvbmRpdGlvbnMobm9kZSBhcyBHcm91cE5vZGUpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY29uZGlOb2RlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYXJlbnQg44GZ44G544Gm5p2h5Lu244Kw44Or44O844OX44KS5Y+W5b6X44GZ44KLXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBzKHBhcmVudDpHcm91cE5vZGUpOm51bWJlcltde1xyXG4gICAgY29uc3QgZ3JvdXBzOm51bWJlcltdPVtdO1xyXG4gICAgZ3JvdXBzLnB1c2gocGFyZW50LmluZGV4KTtcclxuICAgIHBhcmVudC5jaGlsZHJlbi5mb3JFYWNoKChub2RlKT0+e1xyXG4gICAgICBpZihub2RlLnR5cGUhPT1Ob2RlVHlwZS5Db25kaXRpb24pe1xyXG4gICAgICAgIGdyb3Vwcy5wdXNoKC4uLnRoaXMuZ2V0R3JvdXBzKG5vZGUgYXMgR3JvdXBOb2RlKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGdyb3VwcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEpzb27jgYvjgonlvqnlhYNcclxuICAgKiBAcGFyYW0ganNvblN0cmluZyBcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBmcm9tSnNvbihqc29uU3RyaW5nOiBzdHJpbmcpOiBJTm9kZSB7XHJcbiAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcclxuICAgIHRoaXMucm9vdCA9IEdyb3VwTm9kZS5mcm9tSlNPTihqc29uKSBhcyBHcm91cE5vZGU7XHJcbiAgICB0aGlzLm1heEluZGV4PXRoaXMuZ2V0TWF4SW5kZXgodGhpcy5yb290KTtcclxuICAgIHJldHVybiB0aGlzLnJvb3Q7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEpTT07mloflrZfliJfjgavlpInmj5vjgZnjgotcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICB0b0pzb24oKTpzdHJpbmd7XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5yb290LCAoa2V5LCB2YWx1ZSkgPT4ge1xyXG4gICAgICBpZiAoa2V5ID09PSAncGFyZW50Jykge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLnR5cGUgOiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5p2h5Lu25byP44KS6KiI566X44GZ44KLXHJcbiAgICogQHBhcmFtIG5vZGUgXHJcbiAgICogQHBhcmFtIGNvbnRleHQgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgZXZhbHVhdGUobm9kZTogSU5vZGUsIGNvbnRleHQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gTm9kZVR5cGUuQ29uZGl0aW9uKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmV2YWx1YXRlQ29uZGl0aW9uKG5vZGUgYXMgQ29uZGl0aW9uTm9kZSwgY29udGV4dCk7XHJcbiAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gTm9kZVR5cGUuTG9naWNHcm91cCB8fCBub2RlLnR5cGUgPT09IE5vZGVUeXBlLlJvb3QpIHtcclxuICAgICAgY29uc3QgZ3JvdXBOb2RlID0gbm9kZSBhcyBHcm91cE5vZGU7XHJcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBncm91cE5vZGUuY2hpbGRyZW4ubWFwKGNoaWxkID0+IHRoaXMuZXZhbHVhdGUoY2hpbGQsIGNvbnRleHQpKTtcclxuICBcclxuICAgICAgaWYgKGdyb3VwTm9kZS5sb2dpY2FsT3BlcmF0b3IgPT09IExvZ2ljYWxPcGVyYXRvci5BTkQpIHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cy5ldmVyeShyZXN1bHQgPT4gcmVzdWx0KTtcclxuICAgICAgfSBlbHNlIGlmIChncm91cE5vZGUubG9naWNhbE9wZXJhdG9yID09PSBMb2dpY2FsT3BlcmF0b3IuT1IpIHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cy5zb21lKHJlc3VsdCA9PiByZXN1bHQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgbG9naWNhbCBvcGVyYXRvcicpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIG5vZGUgdHlwZScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGdldENvZGVWYWx1ZSh2YWx1ZTogYW55KTogYW55IHtcclxuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICdjb2RlJyBpbiB2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gdmFsdWUuY29kZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElDb2RlVmFsdWXlnovjga5jb2Rl44Gr5aSJ5o+b44GZ44KLXHJcbiAgICogQHBhcmFtIHZhbHVlIFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGNvbnZlcnRDb2RlVmFsdWUodmFsdWU6YW55KTphbnl7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlLm1hcCh2ID0+IHRoaXMuZ2V0Q29kZVZhbHVlKHYpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldENvZGVWYWx1ZSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB2YXJzIOWkieaVsOWApOOCkuWPluW+l+OBmeOCi1xyXG4gICAqIEBwYXJhbSBwYXRoIFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGdldENvbnRleHRWYXJCeVBhdGggKHZhcnM6IHtba2V5OnN0cmluZ106YW55fSwgcGF0aDogc3RyaW5nKXtcclxuICAgIHJldHVybiBwYXRoLnNwbGl0KFwiLlwiKS5yZWR1Y2UoKG8sIGspID0+IChvIHx8IHt9KVtrXSwgdmFycyk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29uZGl0aW9uIG9iamVjdOOBruWApOOCkuWPluW+l+OBmeOCi1xyXG4gICAqIEBwYXJhbSBvYmplY3QgXHJcbiAgICogQHBhcmFtIGNvbnRleHQgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgZ2V0T2JqZWN0VmFsdWUob2JqZWN0OmFueSxjb250ZXh0OklDb250ZXh0KXtcclxuICAgIGlmKCFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCE9PVwib2JqZWN0XCIgfHwgIShcIm9iamVjdFR5cGVcIiBpbiBvYmplY3QpKXtcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgaWYob2JqZWN0Lm9iamVjdFR5cGU9PT0nZmllbGQnKXtcclxuICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IGNvbnRleHQucmVjb3JkW29iamVjdC5jb2RlXTtcclxuICAgICAgaWYoZmllbGRWYWx1ZS50eXBlPT09J05VTUJFUicgJiYgZmllbGRWYWx1ZS52YWx1ZSE9PXVuZGVmaW5lZCl7XHJcbiAgICAgICAgcmV0dXJuIE51bWJlcihmaWVsZFZhbHVlLnZhbHVlKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydENvZGVWYWx1ZShmaWVsZFZhbHVlLnZhbHVlKTtcclxuICAgICAgfSAgICAgIFxyXG4gICAgfWVsc2UgaWYob2JqZWN0Lm9iamVjdFR5cGU9PT0ndmFyaWFibGUnKXtcclxuICAgICAgY29uc3QgdmFyVmFsdWUgPSB0aGlzLmdldENvbnRleHRWYXJCeVBhdGgoY29udGV4dC52YXJpYWJsZXMsb2JqZWN0Lm5hbWUubmFtZSk7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRDb2RlVmFsdWUodmFyVmFsdWUpO1xyXG4gICAgfWVsc2UgaWYob2JqZWN0Lm9iamVjdFR5cGU9PT0ndGV4dCcpe1xyXG4gICAgICByZXR1cm4gb2JqZWN0LnNoYXJlZFRleHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmr5TovIPjgqrjg5bjgrjjgqfjgq/jg4jjga7lgKTjgpLlj5blvpdcclxuICAgKiBAcGFyYW0gb2JqZWN0IFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGdldENvbmRpdGlvblZhbHVlKG9iamVjdDphbnksY29udGV4dDpJQ29udGV4dCl7XHJcbiAgICBpZighb2JqZWN0IHx8IHR5cGVvZiBvYmplY3QhPT1cIm9iamVjdFwiKXtcclxuICAgICAgcmV0dXJuIG9iamVjdDtcclxuICAgIH1cclxuICAgIGlmKFwib2JqZWN0VHlwZVwiIGluIG9iamVjdCl7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdFZhbHVlKG9iamVjdCxjb250ZXh0KTtcclxuICAgIH1cclxuICAgIGlmKFwic2hhcmVkVGV4dFwiIGluIG9iamVjdCl7XHJcbiAgICAgIHJldHVybiBvYmplY3Quc2hhcmVkVGV4dDtcclxuICAgIH1cclxuICAgIGlmKFwibGFiZWxcIiBpbiBvYmplY3Qpe1xyXG4gICAgICByZXR1cm4gb2JqZWN0LmxhYmVsO1xyXG4gICAgfVxyXG4gICAgaWYoXCJ2YWx1ZVwiIGluIG9iamVjdCl7XHJcbiAgICAgIHJldHVybiBvYmplY3QudmFsdWU7XHJcbiAgICB9XHJcbiAgICBpZihcIm5hbWVcIiBpbiBvYmplY3Qpe1xyXG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmnaHku7blvI/jgpLoqIjnrpfjgZnjgotcclxuICAgKiBAcGFyYW0gY29uZGl0aW9uIFxyXG4gICAqIEBwYXJhbSBjb250ZXh0IFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGV2YWx1YXRlQ29uZGl0aW9uKGNvbmRpdGlvbjogQ29uZGl0aW9uTm9kZSwgY29udGV4dDogSUNvbnRleHQpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHsgb2JqZWN0LCBvcGVyYXRvciwgdmFsdWUgfSA9IGNvbmRpdGlvbjtcclxuICAgIGNvbnN0IHRhcmdldE9iamVjdCA9IHRoaXMuZ2V0T2JqZWN0VmFsdWUob2JqZWN0LGNvbnRleHQpO1xyXG4gICAgY29uc3QgY29uZGl0aW9uT2JqZWN0ID0gdGhpcy5nZXRDb25kaXRpb25WYWx1ZSh2YWx1ZSxjb250ZXh0KTtcclxuICAgIGNvbnN0IGlzQXJyYXlUYXJnZXQgPSBBcnJheS5pc0FycmF5KHRhcmdldE9iamVjdCk7XHJcbiAgICBjb25zdCBpc0FycmF5VmFsdWUgPSBBcnJheS5pc0FycmF5KGNvbmRpdGlvbk9iamVjdCk7XHJcbiAgICAvL+mFjeWIl+OBruavlOi8g1xyXG4gICAgaWYoKGlzQXJyYXlUYXJnZXQgJiYgdGFyZ2V0T2JqZWN0Lmxlbmd0aCA+IDEpfHwoaXNBcnJheVZhbHVlICYmIGNvbmRpdGlvbk9iamVjdC5sZW5ndGg+MSkpe1xyXG4gICAgICByZXR1cm4gdGhpcy5jb21wYXJlQXJyYXkob3BlcmF0b3IsdGFyZ2V0T2JqZWN0LGNvbmRpdGlvbk9iamVjdClcclxuICAgIH1cclxuICAgIGNvbnN0IHRhcmdldFZhbHVlID0gaXNBcnJheVRhcmdldD90YXJnZXRPYmplY3RbMF06dGFyZ2V0T2JqZWN0O1xyXG4gICAgY29uc3QgY29uZGl0aW9uVmFsdWUgPSBpc0FycmF5VmFsdWU/Y29uZGl0aW9uT2JqZWN0WzBdOmNvbmRpdGlvbk9iamVjdDtcclxuICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcclxuICAgICAgY2FzZSBPcGVyYXRvci5FcXVhbDpcclxuICAgICAgY2FzZSBPcGVyYXRvci5Ob3RFcXVhbDpcclxuICAgICAgY2FzZSBPcGVyYXRvci5HcmVhdGVyOlxyXG4gICAgICBjYXNlIE9wZXJhdG9yLkdyZWF0ZXJPckVxdWFsOlxyXG4gICAgICBjYXNlIE9wZXJhdG9yLkxlc3M6XHJcbiAgICAgIGNhc2UgT3BlcmF0b3IuTGVzc09yRXF1YWw6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShvcGVyYXRvcix0YXJnZXRWYWx1ZSwgY29uZGl0aW9uVmFsdWUpO1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLkNvbnRhaW5zOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5zKHRhcmdldFZhbHVlLGNvbmRpdGlvblZhbHVlKTtcclxuICAgICAgY2FzZSBPcGVyYXRvci5Ob3RDb250YWluczpcclxuICAgICAgICByZXR1cm4gIXRoaXMuY29udGFpbnModGFyZ2V0VmFsdWUsY29uZGl0aW9uVmFsdWUpO1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLlN0YXJ0V2l0aDpcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydFdpdGgodGFyZ2V0VmFsdWUsY29uZGl0aW9uVmFsdWUpO1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLk5vdFN0YXJ0V2l0aDpcclxuICAgICAgICByZXR1cm4gIXRoaXMuc3RhcnRXaXRoKHRhcmdldFZhbHVlLGNvbmRpdGlvblZhbHVlKTtcclxuICAgICAgY2FzZSBPcGVyYXRvci5FbmRXaXRoOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmVuZHNXaXRoKHRhcmdldFZhbHVlLGNvbmRpdGlvblZhbHVlKTtcclxuICAgICAgY2FzZSBPcGVyYXRvci5Ob3RFbmRXaXRoOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmVuZHNXaXRoKHRhcmdldFZhbHVlLGNvbmRpdGlvblZhbHVlKTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIG9wZXJhdG9yJyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIOavlOi8g+OCkuWun+ihjOOBmeOCi1xyXG4gICAqIEBwYXJhbSBvcGVyYXRvciBcclxuICAgKiBAcGFyYW0gdGFyZ2V0VmFsdWUgXHJcbiAgICogQHBhcmFtIHZhbHVlIFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGNvbXBhcmUob3BlcmF0b3I6IE9wZXJhdG9yLCB0YXJnZXRWYWx1ZTogYW55LCB2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAvLyB0YXJnZXRWYWx1ZSDjga/ml6XmnJ/ml7bvvIx2YWx1ZSDjgoLml6XmnJ/jgavlpInmj5vjgZfjgabmr5TovIPjgZnjgotcclxuICAgIGlmKHRhcmdldFZhbHVlPT09dW5kZWZpbmVkIHx8IHRhcmdldFZhbHVlPT09bnVsbHx8dGFyZ2V0VmFsdWU9PT0nJyl7XHJcbiAgICAgIGlmKHZhbHVlPT09dW5kZWZpbmVkIHx8IHZhbHVlPT09bnVsbHx8dmFsdWU9PT0nJyl7XHJcbiAgICAgICAgdGFyZ2V0VmFsdWU9Jyc7XHJcbiAgICAgICAgdmFsdWU9Jyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0YXJnZXRWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgY29uc3QgZGF0ZVZhbHVlID0gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgICBpZiAoIWlzTmFOKGRhdGVWYWx1ZS5nZXRUaW1lKCkpKSB7XHJcbiAgICAgICAgdmFsdWUgPSBkYXRlVmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vdGFyZ2V0VmFsdWXjga/mlbDlgKTmmYLvvIx2YWx1ZSDjgpLmlbDlgKTjgavlpInmj5vjgZnjgotcclxuICAgIGVsc2UgaWYgKHR5cGVvZiB0YXJnZXRWYWx1ZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgY29uc3QgbnVtYmVyVmFsdWUgPSBOdW1iZXIodmFsdWUpO1xyXG4gICAgICBpZiAoIWlzTmFOKG51bWJlclZhbHVlKSkge1xyXG4gICAgICAgIHZhbHVlID0gbnVtYmVyVmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiB0YXJnZXRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoIChvcGVyYXRvcikge1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLkVxdWFsOlxyXG4gICAgICAgIHJldHVybiB0YXJnZXRWYWx1ZSA9PT0gdmFsdWU7XHJcbiAgICAgIGNhc2UgT3BlcmF0b3IuTm90RXF1YWw6XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldFZhbHVlICE9PSB2YWx1ZTtcclxuICAgICAgY2FzZSBPcGVyYXRvci5HcmVhdGVyOlxyXG4gICAgICAgIHJldHVybiB0YXJnZXRWYWx1ZSA+IHZhbHVlO1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLkdyZWF0ZXJPckVxdWFsOlxyXG4gICAgICAgIHJldHVybiB0YXJnZXRWYWx1ZSA+PSB2YWx1ZTtcclxuICAgICAgY2FzZSBPcGVyYXRvci5MZXNzOlxyXG4gICAgICAgIHJldHVybiB0YXJnZXRWYWx1ZSA8IHZhbHVlO1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLkxlc3NPckVxdWFsOlxyXG4gICAgICAgIHJldHVybiB0YXJnZXRWYWx1ZSA8PSB2YWx1ZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIG9wZXJhdG9yIGZvciBjb21wYXJpc29uJyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIOmFjeWIl+WApOOBruavlOi8g1xyXG4gICAqIEBwYXJhbSBvcGVyYXRvciBcclxuICAgKiBAcGFyYW0gdGFyZ2V0VmFsdWUgXHJcbiAgICogQHBhcmFtIHZhbHVlIFxyXG4gICAqL1xyXG4gLyoqXHJcbiAqIOmFjeWIl+WApOOBruavlOi8g1xyXG4gKiBAcGFyYW0gb3BlcmF0b3IgXHJcbiAqIEBwYXJhbSB0YXJnZXRWYWx1ZSBcclxuICogQHBhcmFtIHZhbHVlIFxyXG4gKi9cclxuIGNvbXBhcmVBcnJheShvcGVyYXRvcjogT3BlcmF0b3IsIHRhcmdldFZhbHVlOiBhbnksIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICBjb25zdCBpc0FycmF5VGFyZ2V0ID0gQXJyYXkuaXNBcnJheSh0YXJnZXRWYWx1ZSk7XHJcbiAgY29uc3QgaXNBcnJheVZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XHJcbiAgY29uc3Qgc29ydEFycmF5ID0gKGFycjogYW55W10pID0+IGFyci5zbGljZSgpLnNvcnQoKTtcclxuICB0YXJnZXRWYWx1ZSA9IGlzQXJyYXlUYXJnZXQ/dGFyZ2V0VmFsdWU6W3RhcmdldFZhbHVlXTtcclxuICB2YWx1ZT0gaXNBcnJheVZhbHVlP3ZhbHVlOlt2YWx1ZV07XHJcbiAgY29uc3QgdGFyZ2V0QXJyYXk9c29ydEFycmF5KHRhcmdldFZhbHVlKTtcclxuICBjb25zdCB2YWx1ZUFycmF5PXNvcnRBcnJheSh2YWx1ZSk7XHJcbiAgc3dpdGNoIChvcGVyYXRvcikge1xyXG4gICAgY2FzZSBPcGVyYXRvci5FcXVhbDpcclxuICAgICAgcmV0dXJuICB0YXJnZXRBcnJheS5sZW5ndGg9PT12YWx1ZUFycmF5Lmxlbmd0aCAmJiB0YXJnZXRBcnJheS5ldmVyeSgodiwgaSkgPT4gdiA9PT0gdmFsdWVBcnJheVtpXSk7XHJcbiAgICBjYXNlIE9wZXJhdG9yLk5vdEVxdWFsOlxyXG4gICAgICByZXR1cm4gdGFyZ2V0QXJyYXkubGVuZ3RoIT09dmFsdWVBcnJheS5sZW5ndGggfHwgIXRhcmdldEFycmF5LmV2ZXJ5KCh2LCBpKSA9PiB2ID09PSB2YWx1ZUFycmF5W2ldKTtcclxuICAgIGNhc2UgT3BlcmF0b3IuQ29udGFpbnM6XHJcbiAgICAgIHJldHVybiB2YWx1ZUFycmF5Lmxlbmd0aD4wICYmIHZhbHVlQXJyYXkuZXZlcnkodiA9PiB0YXJnZXRBcnJheS5pbmNsdWRlcyh2KSk7XHJcbiAgICBjYXNlIE9wZXJhdG9yLk5vdENvbnRhaW5zOlxyXG4gICAgICByZXR1cm4gdmFsdWVBcnJheS5sZW5ndGg9PT0wIHx8ICF2YWx1ZUFycmF5LmV2ZXJ5KHYgPT4gdGFyZ2V0QXJyYXkuaW5jbHVkZXModikpO1xyXG4gICAgZGVmYXVsdDpcclxuICAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcblxyXG4gIC8qKlxyXG4gICAqIOWQq+OCgOioiOeul1xyXG4gICAqIEBwYXJhbSB0YXJnZXRWYWx1ZSBcclxuICAgKiBAcGFyYW0gdmFsdWUgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgY29udGFpbnModGFyZ2V0VmFsdWU6IGFueSwgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHR5cGVvZiB0YXJnZXRWYWx1ZSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gdGFyZ2V0VmFsdWUuaW5jbHVkZXModmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICAgLyoqXHJcbiAgICogU3RhcnRXaXRo6KiI566XXHJcbiAgICogQHBhcmFtIHRhcmdldFZhbHVlIFxyXG4gICAqIEBwYXJhbSB2YWx1ZSBcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBzdGFydFdpdGgodGFyZ2V0VmFsdWU6IGFueSwgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHR5cGVvZiB0YXJnZXRWYWx1ZSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gdGFyZ2V0VmFsdWUuc3RhcnRzV2l0aCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEVuZHNXaXRo6KiI566XXHJcbiAgICogQHBhcmFtIHRhcmdldFZhbHVlIFxyXG4gICAqIEBwYXJhbSB2YWx1ZSBcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBlbmRzV2l0aCh0YXJnZXRWYWx1ZTogYW55LCB2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAodHlwZW9mIHRhcmdldFZhbHVlID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiB0YXJnZXRWYWx1ZS5lbmRzV2l0aCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyAgSUFjdGlvbixJQWN0aW9uUmVzdWx0LCBJQWN0aW9uTm9kZSwgSUFjdGlvblByb3BlcnR5LCBJRmllbGQsIElDb250ZXh0IH0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbmltcG9ydCB7IENvbmRpdGlvblRyZWUgfSBmcm9tICcuLi90eXBlcy9Db25kaXRpb25zJztcclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+OBruWxnuaAp+Wumue+qVxyXG4gKi9cclxuaW50ZXJmYWNlIElTaG93blByb3Bze1xyXG4gICAgZmllbGQ6SUZpZWxkO1xyXG4gICAgc2hvdzpzdHJpbmc7IFxyXG4gICAgY29uZGl0aW9uOnN0cmluZztcclxufVxyXG4vKipcclxuICog6KGo56S677yP6Z2e6KGo56S644Ki44Kv44K344On44OzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRmllbGRTaG93bkFjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb257XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgICBwcm9wczpJU2hvd25Qcm9wcztcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5uYW1lPVwi6KGo56S677yP6Z2e6KGo56S6XCI7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1bXTtcclxuICAgICAgIHRoaXMucHJvcHM9e1xyXG4gICAgICAgICAgICBmaWVsZDp7Y29kZTonJ30sXHJcbiAgICAgICAgICAgIHNob3c6JycsXHJcbiAgICAgICAgICAgIGNvbmRpdGlvbjonJ1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL+OCouOCr+OCt+ODp+ODs+OCkueZu+mMsuOBmeOCi1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICog44Ki44Kv44K344On44Oz44Gu5a6f6KGM44KS5ZG844Gz5Ye644GZXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uTm9kZSBcclxuICAgICAqIEBwYXJhbSBldmVudCBcclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBhc3luYyBwcm9jZXNzKGFjdGlvbk5vZGU6SUFjdGlvbk5vZGUsZXZlbnQ6YW55LGNvbnRleHQ6SUNvbnRleHQpOlByb21pc2U8SUFjdGlvblJlc3VsdD4ge1xyXG4gICAgICAgIGxldCByZXN1bHQ9e1xyXG4gICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDpmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAvL+WxnuaAp+ioreWumuOCkuWPluW+l+OBmeOCi1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvblByb3BzPWFjdGlvbk5vZGUuYWN0aW9uUHJvcHM7XHJcbiAgICAgICAgICAgIGlmICghKCdmaWVsZCcgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkgJiYgISgnc2hvdycgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBJU2hvd25Qcm9wcztcclxuICAgICAgICAgICAgLy/mnaHku7blvI/jga7oqIjnrpfntZDmnpzjgpLlj5blvpdcclxuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uUmVzdWx0ID0gdGhpcy5nZXRDb25kaXRpb25SZXN1bHQoY29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmKGNvbmRpdGlvblJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnByb3BzLnNob3c9PT0n6KGo56S6Jyl7XHJcbiAgICAgICAgICAgICAgICAgICAga2ludG9uZS5hcHAucmVjb3JkLnNldEZpZWxkU2hvd24odGhpcy5wcm9wcy5maWVsZC5jb2RlLHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYgKHRoaXMucHJvcHMuc2hvdz09PSfpnZ7ooajnpLonKXtcclxuICAgICAgICAgICAgICAgICAgICBraW50b25lLmFwcC5yZWNvcmQuc2V0RmllbGRTaG93bih0aGlzLnByb3BzLmZpZWxkLmNvZGUsZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdD0ge1xyXG4gICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDp0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9Y2F0Y2goZXJyb3Ipe1xyXG4gICAgICAgICAgICBjb250ZXh0LmVycm9ycy5oYW5kbGVFcnJvcihlcnJvcixhY3Rpb25Ob2RlKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQ9ZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb250ZXh0IOadoeS7tuW8j+OCkuWun+ihjOOBmeOCi1xyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgZ2V0Q29uZGl0aW9uUmVzdWx0KGNvbnRleHQ6YW55KTpib29sZWFue1xyXG4gICAgICAgIGNvbnN0IHRyZWUgPXRoaXMuZ2V0Q29uZGl0aW9uKHRoaXMucHJvcHMuY29uZGl0aW9uKTtcclxuICAgICAgICBpZighdHJlZSl7XHJcbiAgICAgICAgICAgIC8v5p2h5Lu244KS6Kit5a6a44GV44KM44Gm44GE44G+44Gb44KTXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJlZS5ldmFsdWF0ZSh0cmVlLnJvb3QsY29udGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gY29uZGl0aW9uIOadoeS7tuW8j+ODhOODquODvOOCkuWPluW+l+OBmeOCi1xyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgZ2V0Q29uZGl0aW9uKGNvbmRpdGlvbjpzdHJpbmcpOkNvbmRpdGlvblRyZWV8bnVsbHtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyZWUgPSBuZXcgQ29uZGl0aW9uVHJlZSgpO1xyXG4gICAgICAgICAgICB0cmVlLmZyb21Kc29uKGNvbmRpdGlvbik7XHJcbiAgICAgICAgICAgIGlmKHRyZWUuZ2V0Q29uZGl0aW9ucyh0cmVlLnJvb3QpLmxlbmd0aD4wKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cmVlO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbn1cclxubmV3IEZpZWxkU2hvd25BY3Rpb24oKTsiLCJcclxuaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgSUFjdGlvbiwgSUFjdGlvblByb3BlcnR5LCBJQWN0aW9uTm9kZSwgSUNvbnRleHQsIElBY3Rpb25SZXN1bHQgfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuaW1wb3J0IHsgQ29uZGl0aW9uVHJlZSB9IGZyb20gJy4uL3R5cGVzL0NvbmRpdGlvbnMnO1xyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44Gu5bGe5oCn5a6a576pXHJcbiAqL1xyXG5pbnRlcmZhY2UgSUVycm9yU2hvd1Byb3BzIHtcclxuICAgIG1lc3NhZ2U6IHN0cmluZztcclxuICAgIGNvbmRpdGlvbjogc3RyaW5nO1xyXG59ICAgXHJcblxyXG5leHBvcnQgY2xhc3MgRXJyb3JTaG93QWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbiB7XHJcbiAgICBuYW1lOiBzdHJpbmc7IFxyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdOyAvL+iwg+eUqOS7jmltcG9ydOWvvOWFpeWFs+S6juaYvuekuuexu+eahOWumuS5iVxyXG4gICAgcHJvcHM6IElFcnJvclNob3dQcm9wczsvL+S7juS4iuaWueeahGludGVyZmFjZSDlrprkuYnov5nkuKpwcm9wc+aJgOmcgOimgeaOpeWPl+eahOWxnuaAp1xyXG4gICAgY29uc3RydWN0b3IoKSB7IC8v6Kej5p6E5Ye95pWw5a6a5LmJ6ZyA6KaB55qE57G75ZCNXHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCLjgqjjg6njg7zooajnpLpcIjtcclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzID0gW107XHJcbiAgICAgICAgdGhpcy5wcm9wcyA9IHtcclxuICAgICAgICAgICAgbWVzc2FnZTogJycsXHJcbiAgICAgICAgICAgIGNvbmRpdGlvbjogJydcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpOyAvL+mHjee9ruS7peS4iuazqOWGjOihqFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog44Ki44Kv44K344On44Oz44Gu5a6f6KGM44KS5ZG844Gz5Ye644GZXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uTm9kZSBcclxuICAgICAqIEBwYXJhbSBldmVudCBcclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBhc3luYyBwcm9jZXNzKGFjdGlvbk5vZGU6IElBY3Rpb25Ob2RlLCBldmVudDogYW55LCBjb250ZXh0OiBJQ29udGV4dCk6IFByb21pc2U8SUFjdGlvblJlc3VsdD4geyBcclxuICAgICAgICBsZXQgcmVzdWx0ID0geyBcclxuICAgICAgICAgICAgY2FuTmV4dDogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5IHsgXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBhY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICBpZiAoISgnbWVzc2FnZScgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkgJiYgISgnY29uZGl0aW9uJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSkgeyAvL+WmguaenG1lc3NhZ2Xku6Xlj4pjb25kaXRpb27kuKTogIXpg73kuI3lrZjlnKjnmoTmg4XlhrXkuItyZXR1cm5cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBJRXJyb3JTaG93UHJvcHM7IFxyXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb25SZXN1bHQgPSB0aGlzLmdldENvbmRpdGlvblJlc3VsdChjb250ZXh0KTsgXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5p2h5Lu257WQ5p6c77yaXCIsY29uZGl0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgaWYgKGNvbmRpdGlvblJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuZXJyb3IgPSB0aGlzLnByb3BzLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuY2FuTmV4dD1mYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZXJyb3JzLmhhbmRsZUVycm9yKGVycm9yLGFjdGlvbk5vZGUpO1xyXG4gICAgICAgICAgICByZXN1bHQuY2FuTmV4dCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICogXHJcbiAgICAqIEBwYXJhbSBjb250ZXh0IOadoeS7tuW8j+OCkuWun+ihjOOBmeOCi1xyXG4gICAgKiBAcmV0dXJucyBcclxuICAgICovXHJcbiAgICBnZXRDb25kaXRpb25SZXN1bHQoY29udGV4dDogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgdHJlZSA9IHRoaXMuZ2V0Q29uZGl0aW9uKHRoaXMucHJvcHMuY29uZGl0aW9uKTtcclxuICAgICAgICBpZiAoIXRyZWUpIHtcclxuICAgICAgICAgICAgLy/mnaHku7bjgpLoqK3lrprjgZXjgozjgabjgYTjgb7jgZvjgpNcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cmVlLmV2YWx1YXRlKHRyZWUucm9vdCwgY29udGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gY29uZGl0aW9uIOadoeS7tuW8j+ODhOODquODvOOCkuWPluW+l+OBmeOCi1xyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIGdldENvbmRpdGlvbihjb25kaXRpb246IHN0cmluZyk6IENvbmRpdGlvblRyZWUgfCBudWxsIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlID0gbmV3IENvbmRpdGlvblRyZWUoKTtcclxuICAgICAgICAgICAgdHJlZS5mcm9tSnNvbihjb25kaXRpb24pO1xyXG4gICAgICAgICAgICBpZiAodHJlZS5nZXRDb25kaXRpb25zKHRyZWUucm9vdCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyZWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlcigpOiB2b2lkIHtcclxuICAgICAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXSA9IHRoaXM7XHJcbiAgICB9XHJcblxyXG59XHJcbm5ldyBFcnJvclNob3dBY3Rpb24oKTsiLCJcclxuaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcclxuaW1wb3J0IHsgSUFjdGlvbiwgSUFjdGlvblByb3BlcnR5LCBJQWN0aW9uTm9kZSwgSUFjdGlvblJlc3VsdCwgSUNvbnRleHQgfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuaW1wb3J0IFwiLi9idXR0b24tYWRkLmNzc1wiO1xyXG5cclxuLyoqXHJcbiAqIOODnOOCv+ODs+mFjee9ruWxnuaAp+Wumue+qVxyXG4gKi9cclxuaW50ZXJmYWNlIElCdXR0b25BZGRQcm9wcyB7XHJcbiAgICAvL+ODnOOCv+ODs+ihqOekuuWQjVxyXG4gICAgYnV0dG9uTmFtZTogc3RyaW5nO1xyXG4gICAgc3BhY2U/OklTcGFjZTtcclxuICAgIC8v6YWN572u5L2N572uXHJcbiAgICBwb3NpdGlvbjogc3RyaW5nO1xyXG4gICAgLy/jgqTjg5njg7Pjg4jlkI1cclxuICAgIGV2ZW50TmFtZTpzdHJpbmdcclxufSAgIFxyXG5cclxuaW50ZXJmYWNlIElTcGFjZXtcclxuICAgIHR5cGU6c3RyaW5nLFxyXG4gICAgZWxlbWVudElkOnN0cmluZ1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQnV0dG9uQWRkQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbiB7XHJcbiAgICBuYW1lOiBzdHJpbmc7IFxyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdOyBcclxuICAgIHByb3BzOiBJQnV0dG9uQWRkUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHsgXHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCLjg5zjgr/jg7Pjga7phY3nva5cIjtcclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzID0gW107XHJcbiAgICAgICAgdGhpcy5wcm9wcyA9IHtcclxuICAgICAgICAgICAgYnV0dG9uTmFtZTogJycsXHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnJyxcclxuICAgICAgICAgICAgZXZlbnROYW1lOicnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGUgXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOiBJQWN0aW9uTm9kZSwgZXZlbnQ6IGFueSxjb250ZXh0OklDb250ZXh0KTogUHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7IFxyXG4gICAgICAgIGxldCByZXN1bHQgPSB7IFxyXG4gICAgICAgICAgICBjYW5OZXh0OiB0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnkgeyBcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcyA9IGFjdGlvbk5vZGUuYWN0aW9uUHJvcHM7XHJcbiAgICAgICAgICAgIGlmICghKCdidXR0b25OYW1lJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdwb3NpdGlvbicgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkpIHsgXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUgYXMgSUJ1dHRvbkFkZFByb3BzOyBcclxuICAgICAgICAgICAgLy/jg5zjgr/jg7PjgpLphY3nva7jgZnjgotcclxuICAgICAgICAgICAgbGV0IGJ1dHRvblNwYWNlO1xyXG4gICAgICAgICAgICBpZih0aGlzLnByb3BzLnNwYWNlICYmIHRoaXMucHJvcHMuc3BhY2UuZWxlbWVudElkKXtcclxuICAgICAgICAgICAgICAgIGJ1dHRvblNwYWNlID0ga2ludG9uZS5hcHAucmVjb3JkLmdldFNwYWNlRWxlbWVudCh0aGlzLnByb3BzLnNwYWNlLmVsZW1lbnRJZCk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uU3BhY2UgPSBraW50b25lLmFwcC5yZWNvcmQuZ2V0SGVhZGVyTWVudVNwYWNlRWxlbWVudCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFidXR0b25TcGFjZSkgcmV0dXJuIHJlc3VsdDtcclxuICBcclxuICAgICAgICAgICAgY29uc3QgYnV0dG9uID0kKGA8YnV0dG9uIGlkPScke3RoaXMucHJvcHMuZXZlbnROYW1lfScgY2xhc3M9J2FsYy1idXR0b24tbm9ybWFsJyA+JHt0aGlzLnByb3BzLmJ1dHRvbk5hbWV9PC9idXR0b24+YCk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucHJvcHMucG9zaXRpb249PT1cIuS4gOeVquW3puOBq+i/veWKoOOBmeOCi1wiKXtcclxuICAgICAgICAgICAgICAgICQoYnV0dG9uU3BhY2UpLnByZXBlbmQoYnV0dG9uKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAkKGJ1dHRvblNwYWNlKS5hcHBlbmQoYnV0dG9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBjbGlja0V2ZW50TmFtZSA9IGAke2V2ZW50LnR5cGV9LmN1c3RvbUJ1dHRvbkNsaWNrLiR7dGhpcy5wcm9wcy5ldmVudE5hbWV9YDtcclxuICAgICAgICAgICAgYnV0dG9uLm9uKFwiY2xpY2tcIiwoKT0+e1xyXG4gICAgICAgICAgICAgICAgJChkb2N1bWVudCkudHJpZ2dlcihjbGlja0V2ZW50TmFtZSxldmVudCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZXJyb3JzLmhhbmRsZUVycm9yKGVycm9yLGFjdGlvbk5vZGUpO1xyXG4gICAgICAgICAgICByZXN1bHQuY2FuTmV4dCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICBcclxuXHJcbiAgICByZWdpc3RlcigpOiB2b2lkIHtcclxuICAgICAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXSA9IHRoaXM7XHJcbiAgICB9XHJcblxyXG59XHJcbm5ldyBCdXR0b25BZGRBY3Rpb24oKTsiLCJcclxuaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgIElBY3Rpb24sSUFjdGlvblJlc3VsdCwgSUFjdGlvbk5vZGUsIElBY3Rpb25Qcm9wZXJ0eSwgSUNvbnRleHQsIElWYXJOYW1lIH0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbmltcG9ydCB7IENvbmRpdGlvblRyZWUgfSBmcm9tICcuLi90eXBlcy9Db25kaXRpb25zJztcclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+OBruWxnuaAp+Wumue+qVxyXG4gKi9cclxuaW50ZXJmYWNlIElDb25kaXRpb257XHJcbiAgICBjb25kaXRpb246c3RyaW5nO1xyXG4gICAgdmVyTmFtZTpJVmFyTmFtZTtcclxufVxyXG4vKipcclxuICog5p2h5Lu25YiG5bKQ44Ki44Kv44K344On44OzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbntcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICAgIHByb3BzOklDb25kaXRpb247XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMubmFtZT1cIuadoeS7tuW8j1wiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9W107XHJcbiAgICAgICAgdGhpcy5wcm9wcz17XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbjonJyxcclxuICAgICAgICAgICAgdmVyTmFtZTp7bmFtZTonJ31cclxuICAgICAgICB9XHJcbiAgICAgICAgLy/jgqLjgq/jgrfjg6fjg7PjgpLnmbvpjLLjgZnjgotcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGUgXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSxjb250ZXh0OklDb250ZXh0KTpQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgICAgICBsZXQgcmVzdWx0PXtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6JydcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgLy/lsZ7mgKfoqK3lrprjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1hY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICBpZiAoISgnY29uZGl0aW9uJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCd2ZXJOYW1lJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElDb25kaXRpb247XHJcbiAgICAgICAgICAgIC8v5p2h5Lu25byP44Gu6KiI566X57WQ5p6c44KS5Y+W5b6XXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuZ2V0Q29uZGl0aW9uUmVzdWx0KGNvbnRleHQpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIuadoeS7tuioiOeul+e1kOaenDpcIixjb25kaXRpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICBpZihjb25kaXRpb25SZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0PSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDon44Gv44GEJ1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0PSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDon44GE44GE44GIJ1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodGhpcy5wcm9wcy52ZXJOYW1lICYmIHRoaXMucHJvcHMudmVyTmFtZS5uYW1lIT09Jycpe1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC52YXJpYWJsZXNbdGhpcy5wcm9wcy52ZXJOYW1lLm5hbWVdPXJlc3VsdC5yZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9Y2F0Y2goZXJyb3Ipe1xyXG4gICAgICAgICAgICBjb250ZXh0LmVycm9ycy5oYW5kbGVFcnJvcihlcnJvcixhY3Rpb25Ob2RlKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQ9ZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBjb250ZXh0IOadoeS7tuW8j+OCkuWun+ihjOOBmeOCi1xyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIGdldENvbmRpdGlvblJlc3VsdChjb250ZXh0OmFueSk6Ym9vbGVhbntcclxuICAgICAgICBjb25zdCB0cmVlID10aGlzLmdldENvbmRpdGlvbih0aGlzLnByb3BzLmNvbmRpdGlvbik7XHJcbiAgICAgICAgaWYoIXRyZWUpe1xyXG4gICAgICAgICAgICAvL+adoeS7tuOCkuioreWumuOBleOCjOOBpuOBhOOBvuOBm+OCk1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRyZWUuZXZhbHVhdGUodHJlZS5yb290LGNvbnRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIGNvbmRpdGlvbiDmnaHku7blvI/jg4Tjg6rjg7zjgpLlj5blvpfjgZnjgotcclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBnZXRDb25kaXRpb24oY29uZGl0aW9uOnN0cmluZyk6Q29uZGl0aW9uVHJlZXxudWxse1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgY29uc3QgdHJlZSA9IG5ldyBDb25kaXRpb25UcmVlKCk7XHJcbiAgICAgICAgICAgIHRyZWUuZnJvbUpzb24oY29uZGl0aW9uKTtcclxuICAgICAgICAgICAgaWYodHJlZS5nZXRDb25kaXRpb25zKHRyZWUucm9vdCkubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyZWU7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbiAgICBcclxufVxyXG5uZXcgQ29uZGl0aW9uQWN0aW9uKCk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmluamVjdFBsYXRmb3JtRGVwcyA9IGV4cG9ydHMucGxhdGZvcm1EZXBzID0gdm9pZCAwO1xuZXhwb3J0cy5wbGF0Zm9ybURlcHMgPSB7XG4gICAgcmVhZEZpbGVGcm9tUGF0aDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfSxcbiAgICBnZXRSZXF1ZXN0VG9rZW46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH0sXG4gICAgZ2V0RGVmYXVsdEF1dGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH0sXG4gICAgYnVpbGRQbGF0Zm9ybURlcGVuZGVudENvbmZpZzogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfSxcbiAgICBidWlsZEhlYWRlcnM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH0sXG4gICAgYnVpbGRGb3JtRGF0YVZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9LFxuICAgIGJ1aWxkQmFzZVVybDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfSxcbiAgICBnZXRWZXJzaW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9LFxufTtcbnZhciBpbmplY3RQbGF0Zm9ybURlcHMgPSBmdW5jdGlvbiAoZGVwcykge1xuICAgIGlmIChkZXBzLnJlYWRGaWxlRnJvbVBhdGgpIHtcbiAgICAgICAgZXhwb3J0cy5wbGF0Zm9ybURlcHMucmVhZEZpbGVGcm9tUGF0aCA9IGRlcHMucmVhZEZpbGVGcm9tUGF0aDtcbiAgICB9XG4gICAgaWYgKGRlcHMuZ2V0UmVxdWVzdFRva2VuKSB7XG4gICAgICAgIGV4cG9ydHMucGxhdGZvcm1EZXBzLmdldFJlcXVlc3RUb2tlbiA9IGRlcHMuZ2V0UmVxdWVzdFRva2VuO1xuICAgIH1cbiAgICBpZiAoZGVwcy5nZXREZWZhdWx0QXV0aCkge1xuICAgICAgICBleHBvcnRzLnBsYXRmb3JtRGVwcy5nZXREZWZhdWx0QXV0aCA9IGRlcHMuZ2V0RGVmYXVsdEF1dGg7XG4gICAgfVxuICAgIGlmIChkZXBzLmJ1aWxkUGxhdGZvcm1EZXBlbmRlbnRDb25maWcpIHtcbiAgICAgICAgZXhwb3J0cy5wbGF0Zm9ybURlcHMuYnVpbGRQbGF0Zm9ybURlcGVuZGVudENvbmZpZyA9XG4gICAgICAgICAgICBkZXBzLmJ1aWxkUGxhdGZvcm1EZXBlbmRlbnRDb25maWc7XG4gICAgfVxuICAgIGlmIChkZXBzLmJ1aWxkSGVhZGVycykge1xuICAgICAgICBleHBvcnRzLnBsYXRmb3JtRGVwcy5idWlsZEhlYWRlcnMgPSBkZXBzLmJ1aWxkSGVhZGVycztcbiAgICB9XG4gICAgaWYgKGRlcHMuYnVpbGRGb3JtRGF0YVZhbHVlKSB7XG4gICAgICAgIGV4cG9ydHMucGxhdGZvcm1EZXBzLmJ1aWxkRm9ybURhdGFWYWx1ZSA9IGRlcHMuYnVpbGRGb3JtRGF0YVZhbHVlO1xuICAgIH1cbiAgICBpZiAoZGVwcy5idWlsZEJhc2VVcmwpIHtcbiAgICAgICAgZXhwb3J0cy5wbGF0Zm9ybURlcHMuYnVpbGRCYXNlVXJsID0gZGVwcy5idWlsZEJhc2VVcmw7XG4gICAgfVxuICAgIGlmIChkZXBzLmdldFZlcnNpb24pIHtcbiAgICAgICAgZXhwb3J0cy5wbGF0Zm9ybURlcHMuZ2V0VmVyc2lvbiA9IGRlcHMuZ2V0VmVyc2lvbjtcbiAgICB9XG59O1xuZXhwb3J0cy5pbmplY3RQbGF0Zm9ybURlcHMgPSBpbmplY3RQbGF0Zm9ybURlcHM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvciA9IHZvaWQgMDtcbnZhciBVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3IocGxhdGZvcm0pIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBcIlRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBpbiBcIi5jb25jYXQocGxhdGZvcm0sIFwiIGVudmlyb25tZW50XCIpO1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UpIHx8IHRoaXM7XG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Vycm9yI0N1c3RvbV9FcnJvcl9UeXBlc1xuICAgICAgICAvLyBNYWludGFpbnMgcHJvcGVyIHN0YWNrIHRyYWNlIGZvciB3aGVyZSBvdXIgZXJyb3Igd2FzIHRocm93biAob25seSBhdmFpbGFibGUgb24gVjgpXG4gICAgICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoX3RoaXMsIFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMubmFtZSA9IFwiVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yXCI7XG4gICAgICAgIF90aGlzLnBsYXRmb3JtID0gcGxhdGZvcm07XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC93aWtpL0JyZWFraW5nLUNoYW5nZXMjZXh0ZW5kaW5nLWJ1aWx0LWlucy1saWtlLWVycm9yLWFycmF5LWFuZC1tYXAtbWF5LW5vLWxvbmdlci13b3JrXG4gICAgICAgIC8vIFNldCB0aGUgcHJvdG90eXBlIGV4cGxpY2l0bHkuXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihfdGhpcywgVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yLnByb3RvdHlwZSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcjtcbn0oRXJyb3IpKTtcbmV4cG9ydHMuVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yID0gVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yLmpzLm1hcCIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBAcGFyYW0gdHlwZU1hcCBbT2JqZWN0XSBNYXAgb2YgTUlNRSB0eXBlIC0+IEFycmF5W2V4dGVuc2lvbnNdXG4gKiBAcGFyYW0gLi4uXG4gKi9cbmZ1bmN0aW9uIE1pbWUoKSB7XG4gIHRoaXMuX3R5cGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdGhpcy5fZXh0ZW5zaW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB0aGlzLmRlZmluZShhcmd1bWVudHNbaV0pO1xuICB9XG5cbiAgdGhpcy5kZWZpbmUgPSB0aGlzLmRlZmluZS5iaW5kKHRoaXMpO1xuICB0aGlzLmdldFR5cGUgPSB0aGlzLmdldFR5cGUuYmluZCh0aGlzKTtcbiAgdGhpcy5nZXRFeHRlbnNpb24gPSB0aGlzLmdldEV4dGVuc2lvbi5iaW5kKHRoaXMpO1xufVxuXG4vKipcbiAqIERlZmluZSBtaW1ldHlwZSAtPiBleHRlbnNpb24gbWFwcGluZ3MuICBFYWNoIGtleSBpcyBhIG1pbWUtdHlwZSB0aGF0IG1hcHNcbiAqIHRvIGFuIGFycmF5IG9mIGV4dGVuc2lvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0eXBlLiAgVGhlIGZpcnN0IGV4dGVuc2lvbiBpc1xuICogdXNlZCBhcyB0aGUgZGVmYXVsdCBleHRlbnNpb24gZm9yIHRoZSB0eXBlLlxuICpcbiAqIGUuZy4gbWltZS5kZWZpbmUoeydhdWRpby9vZ2cnLCBbJ29nYScsICdvZ2cnLCAnc3B4J119KTtcbiAqXG4gKiBJZiBhIHR5cGUgZGVjbGFyZXMgYW4gZXh0ZW5zaW9uIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLCBhbiBlcnJvciB3aWxsXG4gKiBiZSB0aHJvd24uICBUbyBzdXBwcmVzcyB0aGlzIGVycm9yIGFuZCBmb3JjZSB0aGUgZXh0ZW5zaW9uIHRvIGJlIGFzc29jaWF0ZWRcbiAqIHdpdGggdGhlIG5ldyB0eXBlLCBwYXNzIGBmb3JjZWA9dHJ1ZS4gIEFsdGVybmF0aXZlbHksIHlvdSBtYXkgcHJlZml4IHRoZVxuICogZXh0ZW5zaW9uIHdpdGggXCIqXCIgdG8gbWFwIHRoZSB0eXBlIHRvIGV4dGVuc2lvbiwgd2l0aG91dCBtYXBwaW5nIHRoZVxuICogZXh0ZW5zaW9uIHRvIHRoZSB0eXBlLlxuICpcbiAqIGUuZy4gbWltZS5kZWZpbmUoeydhdWRpby93YXYnLCBbJ3dhdiddfSwgeydhdWRpby94LXdhdicsIFsnKndhdiddfSk7XG4gKlxuICpcbiAqIEBwYXJhbSBtYXAgKE9iamVjdCkgdHlwZSBkZWZpbml0aW9uc1xuICogQHBhcmFtIGZvcmNlIChCb29sZWFuKSBpZiB0cnVlLCBmb3JjZSBvdmVycmlkaW5nIG9mIGV4aXN0aW5nIGRlZmluaXRpb25zXG4gKi9cbk1pbWUucHJvdG90eXBlLmRlZmluZSA9IGZ1bmN0aW9uKHR5cGVNYXAsIGZvcmNlKSB7XG4gIGZvciAobGV0IHR5cGUgaW4gdHlwZU1hcCkge1xuICAgIGxldCBleHRlbnNpb25zID0gdHlwZU1hcFt0eXBlXS5tYXAoZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHQudG9Mb3dlckNhc2UoKTtcbiAgICB9KTtcbiAgICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHRlbnNpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBleHQgPSBleHRlbnNpb25zW2ldO1xuXG4gICAgICAvLyAnKicgcHJlZml4ID0gbm90IHRoZSBwcmVmZXJyZWQgdHlwZSBmb3IgdGhpcyBleHRlbnNpb24uICBTbyBmaXh1cCB0aGVcbiAgICAgIC8vIGV4dGVuc2lvbiwgYW5kIHNraXAgaXQuXG4gICAgICBpZiAoZXh0WzBdID09PSAnKicpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghZm9yY2UgJiYgKGV4dCBpbiB0aGlzLl90eXBlcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdBdHRlbXB0IHRvIGNoYW5nZSBtYXBwaW5nIGZvciBcIicgKyBleHQgK1xuICAgICAgICAgICdcIiBleHRlbnNpb24gZnJvbSBcIicgKyB0aGlzLl90eXBlc1tleHRdICsgJ1wiIHRvIFwiJyArIHR5cGUgK1xuICAgICAgICAgICdcIi4gUGFzcyBgZm9yY2U9dHJ1ZWAgdG8gYWxsb3cgdGhpcywgb3RoZXJ3aXNlIHJlbW92ZSBcIicgKyBleHQgK1xuICAgICAgICAgICdcIiBmcm9tIHRoZSBsaXN0IG9mIGV4dGVuc2lvbnMgZm9yIFwiJyArIHR5cGUgKyAnXCIuJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl90eXBlc1tleHRdID0gdHlwZTtcbiAgICB9XG5cbiAgICAvLyBVc2UgZmlyc3QgZXh0ZW5zaW9uIGFzIGRlZmF1bHRcbiAgICBpZiAoZm9yY2UgfHwgIXRoaXMuX2V4dGVuc2lvbnNbdHlwZV0pIHtcbiAgICAgIGNvbnN0IGV4dCA9IGV4dGVuc2lvbnNbMF07XG4gICAgICB0aGlzLl9leHRlbnNpb25zW3R5cGVdID0gKGV4dFswXSAhPT0gJyonKSA/IGV4dCA6IGV4dC5zdWJzdHIoMSk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIExvb2t1cCBhIG1pbWUgdHlwZSBiYXNlZCBvbiBleHRlbnNpb25cbiAqL1xuTWltZS5wcm90b3R5cGUuZ2V0VHlwZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcGF0aCA9IFN0cmluZyhwYXRoKTtcbiAgbGV0IGxhc3QgPSBwYXRoLnJlcGxhY2UoL14uKlsvXFxcXF0vLCAnJykudG9Mb3dlckNhc2UoKTtcbiAgbGV0IGV4dCA9IGxhc3QucmVwbGFjZSgvXi4qXFwuLywgJycpLnRvTG93ZXJDYXNlKCk7XG5cbiAgbGV0IGhhc1BhdGggPSBsYXN0Lmxlbmd0aCA8IHBhdGgubGVuZ3RoO1xuICBsZXQgaGFzRG90ID0gZXh0Lmxlbmd0aCA8IGxhc3QubGVuZ3RoIC0gMTtcblxuICByZXR1cm4gKGhhc0RvdCB8fCAhaGFzUGF0aCkgJiYgdGhpcy5fdHlwZXNbZXh0XSB8fCBudWxsO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gZmlsZSBleHRlbnNpb24gYXNzb2NpYXRlZCB3aXRoIGEgbWltZSB0eXBlXG4gKi9cbk1pbWUucHJvdG90eXBlLmdldEV4dGVuc2lvbiA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdHlwZSA9IC9eXFxzKihbXjtcXHNdKikvLnRlc3QodHlwZSkgJiYgUmVnRXhwLiQxO1xuICByZXR1cm4gdHlwZSAmJiB0aGlzLl9leHRlbnNpb25zW3R5cGUudG9Mb3dlckNhc2UoKV0gfHwgbnVsbDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTWltZTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1wiYXBwbGljYXRpb24vYW5kcmV3LWluc2V0XCI6W1wiZXpcIl0sXCJhcHBsaWNhdGlvbi9hcHBsaXh3YXJlXCI6W1wiYXdcIl0sXCJhcHBsaWNhdGlvbi9hdG9tK3htbFwiOltcImF0b21cIl0sXCJhcHBsaWNhdGlvbi9hdG9tY2F0K3htbFwiOltcImF0b21jYXRcIl0sXCJhcHBsaWNhdGlvbi9hdG9tZGVsZXRlZCt4bWxcIjpbXCJhdG9tZGVsZXRlZFwiXSxcImFwcGxpY2F0aW9uL2F0b21zdmMreG1sXCI6W1wiYXRvbXN2Y1wiXSxcImFwcGxpY2F0aW9uL2F0c2MtZHdkK3htbFwiOltcImR3ZFwiXSxcImFwcGxpY2F0aW9uL2F0c2MtaGVsZCt4bWxcIjpbXCJoZWxkXCJdLFwiYXBwbGljYXRpb24vYXRzYy1yc2F0K3htbFwiOltcInJzYXRcIl0sXCJhcHBsaWNhdGlvbi9iZG9jXCI6W1wiYmRvY1wiXSxcImFwcGxpY2F0aW9uL2NhbGVuZGFyK3htbFwiOltcInhjc1wiXSxcImFwcGxpY2F0aW9uL2NjeG1sK3htbFwiOltcImNjeG1sXCJdLFwiYXBwbGljYXRpb24vY2RmeCt4bWxcIjpbXCJjZGZ4XCJdLFwiYXBwbGljYXRpb24vY2RtaS1jYXBhYmlsaXR5XCI6W1wiY2RtaWFcIl0sXCJhcHBsaWNhdGlvbi9jZG1pLWNvbnRhaW5lclwiOltcImNkbWljXCJdLFwiYXBwbGljYXRpb24vY2RtaS1kb21haW5cIjpbXCJjZG1pZFwiXSxcImFwcGxpY2F0aW9uL2NkbWktb2JqZWN0XCI6W1wiY2RtaW9cIl0sXCJhcHBsaWNhdGlvbi9jZG1pLXF1ZXVlXCI6W1wiY2RtaXFcIl0sXCJhcHBsaWNhdGlvbi9jdS1zZWVtZVwiOltcImN1XCJdLFwiYXBwbGljYXRpb24vZGFzaCt4bWxcIjpbXCJtcGRcIl0sXCJhcHBsaWNhdGlvbi9kYXZtb3VudCt4bWxcIjpbXCJkYXZtb3VudFwiXSxcImFwcGxpY2F0aW9uL2RvY2Jvb2sreG1sXCI6W1wiZGJrXCJdLFwiYXBwbGljYXRpb24vZHNzYytkZXJcIjpbXCJkc3NjXCJdLFwiYXBwbGljYXRpb24vZHNzYyt4bWxcIjpbXCJ4ZHNzY1wiXSxcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHRcIjpbXCJlc1wiLFwiZWNtYVwiXSxcImFwcGxpY2F0aW9uL2VtbWEreG1sXCI6W1wiZW1tYVwiXSxcImFwcGxpY2F0aW9uL2Vtb3Rpb25tbCt4bWxcIjpbXCJlbW90aW9ubWxcIl0sXCJhcHBsaWNhdGlvbi9lcHViK3ppcFwiOltcImVwdWJcIl0sXCJhcHBsaWNhdGlvbi9leGlcIjpbXCJleGlcIl0sXCJhcHBsaWNhdGlvbi9leHByZXNzXCI6W1wiZXhwXCJdLFwiYXBwbGljYXRpb24vZmR0K3htbFwiOltcImZkdFwiXSxcImFwcGxpY2F0aW9uL2ZvbnQtdGRwZnJcIjpbXCJwZnJcIl0sXCJhcHBsaWNhdGlvbi9nZW8ranNvblwiOltcImdlb2pzb25cIl0sXCJhcHBsaWNhdGlvbi9nbWwreG1sXCI6W1wiZ21sXCJdLFwiYXBwbGljYXRpb24vZ3B4K3htbFwiOltcImdweFwiXSxcImFwcGxpY2F0aW9uL2d4ZlwiOltcImd4ZlwiXSxcImFwcGxpY2F0aW9uL2d6aXBcIjpbXCJnelwiXSxcImFwcGxpY2F0aW9uL2hqc29uXCI6W1wiaGpzb25cIl0sXCJhcHBsaWNhdGlvbi9oeXBlcnN0dWRpb1wiOltcInN0a1wiXSxcImFwcGxpY2F0aW9uL2lua21sK3htbFwiOltcImlua1wiLFwiaW5rbWxcIl0sXCJhcHBsaWNhdGlvbi9pcGZpeFwiOltcImlwZml4XCJdLFwiYXBwbGljYXRpb24vaXRzK3htbFwiOltcIml0c1wiXSxcImFwcGxpY2F0aW9uL2phdmEtYXJjaGl2ZVwiOltcImphclwiLFwid2FyXCIsXCJlYXJcIl0sXCJhcHBsaWNhdGlvbi9qYXZhLXNlcmlhbGl6ZWQtb2JqZWN0XCI6W1wic2VyXCJdLFwiYXBwbGljYXRpb24vamF2YS12bVwiOltcImNsYXNzXCJdLFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiOltcImpzXCIsXCJtanNcIl0sXCJhcHBsaWNhdGlvbi9qc29uXCI6W1wianNvblwiLFwibWFwXCJdLFwiYXBwbGljYXRpb24vanNvbjVcIjpbXCJqc29uNVwiXSxcImFwcGxpY2F0aW9uL2pzb25tbCtqc29uXCI6W1wianNvbm1sXCJdLFwiYXBwbGljYXRpb24vbGQranNvblwiOltcImpzb25sZFwiXSxcImFwcGxpY2F0aW9uL2xncit4bWxcIjpbXCJsZ3JcIl0sXCJhcHBsaWNhdGlvbi9sb3N0K3htbFwiOltcImxvc3R4bWxcIl0sXCJhcHBsaWNhdGlvbi9tYWMtYmluaGV4NDBcIjpbXCJocXhcIl0sXCJhcHBsaWNhdGlvbi9tYWMtY29tcGFjdHByb1wiOltcImNwdFwiXSxcImFwcGxpY2F0aW9uL21hZHMreG1sXCI6W1wibWFkc1wiXSxcImFwcGxpY2F0aW9uL21hbmlmZXN0K2pzb25cIjpbXCJ3ZWJtYW5pZmVzdFwiXSxcImFwcGxpY2F0aW9uL21hcmNcIjpbXCJtcmNcIl0sXCJhcHBsaWNhdGlvbi9tYXJjeG1sK3htbFwiOltcIm1yY3hcIl0sXCJhcHBsaWNhdGlvbi9tYXRoZW1hdGljYVwiOltcIm1hXCIsXCJuYlwiLFwibWJcIl0sXCJhcHBsaWNhdGlvbi9tYXRobWwreG1sXCI6W1wibWF0aG1sXCJdLFwiYXBwbGljYXRpb24vbWJveFwiOltcIm1ib3hcIl0sXCJhcHBsaWNhdGlvbi9tZWRpYXNlcnZlcmNvbnRyb2wreG1sXCI6W1wibXNjbWxcIl0sXCJhcHBsaWNhdGlvbi9tZXRhbGluayt4bWxcIjpbXCJtZXRhbGlua1wiXSxcImFwcGxpY2F0aW9uL21ldGFsaW5rNCt4bWxcIjpbXCJtZXRhNFwiXSxcImFwcGxpY2F0aW9uL21ldHMreG1sXCI6W1wibWV0c1wiXSxcImFwcGxpY2F0aW9uL21tdC1hZWkreG1sXCI6W1wibWFlaVwiXSxcImFwcGxpY2F0aW9uL21tdC11c2QreG1sXCI6W1wibXVzZFwiXSxcImFwcGxpY2F0aW9uL21vZHMreG1sXCI6W1wibW9kc1wiXSxcImFwcGxpY2F0aW9uL21wMjFcIjpbXCJtMjFcIixcIm1wMjFcIl0sXCJhcHBsaWNhdGlvbi9tcDRcIjpbXCJtcDRzXCIsXCJtNHBcIl0sXCJhcHBsaWNhdGlvbi9tc3dvcmRcIjpbXCJkb2NcIixcImRvdFwiXSxcImFwcGxpY2F0aW9uL214ZlwiOltcIm14ZlwiXSxcImFwcGxpY2F0aW9uL24tcXVhZHNcIjpbXCJucVwiXSxcImFwcGxpY2F0aW9uL24tdHJpcGxlc1wiOltcIm50XCJdLFwiYXBwbGljYXRpb24vbm9kZVwiOltcImNqc1wiXSxcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiOltcImJpblwiLFwiZG1zXCIsXCJscmZcIixcIm1hclwiLFwic29cIixcImRpc3RcIixcImRpc3R6XCIsXCJwa2dcIixcImJwa1wiLFwiZHVtcFwiLFwiZWxjXCIsXCJkZXBsb3lcIixcImV4ZVwiLFwiZGxsXCIsXCJkZWJcIixcImRtZ1wiLFwiaXNvXCIsXCJpbWdcIixcIm1zaVwiLFwibXNwXCIsXCJtc21cIixcImJ1ZmZlclwiXSxcImFwcGxpY2F0aW9uL29kYVwiOltcIm9kYVwiXSxcImFwcGxpY2F0aW9uL29lYnBzLXBhY2thZ2UreG1sXCI6W1wib3BmXCJdLFwiYXBwbGljYXRpb24vb2dnXCI6W1wib2d4XCJdLFwiYXBwbGljYXRpb24vb21kb2MreG1sXCI6W1wib21kb2NcIl0sXCJhcHBsaWNhdGlvbi9vbmVub3RlXCI6W1wib25ldG9jXCIsXCJvbmV0b2MyXCIsXCJvbmV0bXBcIixcIm9uZXBrZ1wiXSxcImFwcGxpY2F0aW9uL294cHNcIjpbXCJveHBzXCJdLFwiYXBwbGljYXRpb24vcDJwLW92ZXJsYXkreG1sXCI6W1wicmVsb1wiXSxcImFwcGxpY2F0aW9uL3BhdGNoLW9wcy1lcnJvcit4bWxcIjpbXCJ4ZXJcIl0sXCJhcHBsaWNhdGlvbi9wZGZcIjpbXCJwZGZcIl0sXCJhcHBsaWNhdGlvbi9wZ3AtZW5jcnlwdGVkXCI6W1wicGdwXCJdLFwiYXBwbGljYXRpb24vcGdwLXNpZ25hdHVyZVwiOltcImFzY1wiLFwic2lnXCJdLFwiYXBwbGljYXRpb24vcGljcy1ydWxlc1wiOltcInByZlwiXSxcImFwcGxpY2F0aW9uL3BrY3MxMFwiOltcInAxMFwiXSxcImFwcGxpY2F0aW9uL3BrY3M3LW1pbWVcIjpbXCJwN21cIixcInA3Y1wiXSxcImFwcGxpY2F0aW9uL3BrY3M3LXNpZ25hdHVyZVwiOltcInA3c1wiXSxcImFwcGxpY2F0aW9uL3BrY3M4XCI6W1wicDhcIl0sXCJhcHBsaWNhdGlvbi9wa2l4LWF0dHItY2VydFwiOltcImFjXCJdLFwiYXBwbGljYXRpb24vcGtpeC1jZXJ0XCI6W1wiY2VyXCJdLFwiYXBwbGljYXRpb24vcGtpeC1jcmxcIjpbXCJjcmxcIl0sXCJhcHBsaWNhdGlvbi9wa2l4LXBraXBhdGhcIjpbXCJwa2lwYXRoXCJdLFwiYXBwbGljYXRpb24vcGtpeGNtcFwiOltcInBraVwiXSxcImFwcGxpY2F0aW9uL3Bscyt4bWxcIjpbXCJwbHNcIl0sXCJhcHBsaWNhdGlvbi9wb3N0c2NyaXB0XCI6W1wiYWlcIixcImVwc1wiLFwicHNcIl0sXCJhcHBsaWNhdGlvbi9wcm92ZW5hbmNlK3htbFwiOltcInByb3Z4XCJdLFwiYXBwbGljYXRpb24vcHNrYyt4bWxcIjpbXCJwc2tjeG1sXCJdLFwiYXBwbGljYXRpb24vcmFtbCt5YW1sXCI6W1wicmFtbFwiXSxcImFwcGxpY2F0aW9uL3JkZit4bWxcIjpbXCJyZGZcIixcIm93bFwiXSxcImFwcGxpY2F0aW9uL3JlZ2luZm8reG1sXCI6W1wicmlmXCJdLFwiYXBwbGljYXRpb24vcmVsYXgtbmctY29tcGFjdC1zeW50YXhcIjpbXCJybmNcIl0sXCJhcHBsaWNhdGlvbi9yZXNvdXJjZS1saXN0cyt4bWxcIjpbXCJybFwiXSxcImFwcGxpY2F0aW9uL3Jlc291cmNlLWxpc3RzLWRpZmYreG1sXCI6W1wicmxkXCJdLFwiYXBwbGljYXRpb24vcmxzLXNlcnZpY2VzK3htbFwiOltcInJzXCJdLFwiYXBwbGljYXRpb24vcm91dGUtYXBkK3htbFwiOltcInJhcGRcIl0sXCJhcHBsaWNhdGlvbi9yb3V0ZS1zLXRzaWQreG1sXCI6W1wic2xzXCJdLFwiYXBwbGljYXRpb24vcm91dGUtdXNkK3htbFwiOltcInJ1c2RcIl0sXCJhcHBsaWNhdGlvbi9ycGtpLWdob3N0YnVzdGVyc1wiOltcImdiclwiXSxcImFwcGxpY2F0aW9uL3Jwa2ktbWFuaWZlc3RcIjpbXCJtZnRcIl0sXCJhcHBsaWNhdGlvbi9ycGtpLXJvYVwiOltcInJvYVwiXSxcImFwcGxpY2F0aW9uL3JzZCt4bWxcIjpbXCJyc2RcIl0sXCJhcHBsaWNhdGlvbi9yc3MreG1sXCI6W1wicnNzXCJdLFwiYXBwbGljYXRpb24vcnRmXCI6W1wicnRmXCJdLFwiYXBwbGljYXRpb24vc2JtbCt4bWxcIjpbXCJzYm1sXCJdLFwiYXBwbGljYXRpb24vc2N2cC1jdi1yZXF1ZXN0XCI6W1wic2NxXCJdLFwiYXBwbGljYXRpb24vc2N2cC1jdi1yZXNwb25zZVwiOltcInNjc1wiXSxcImFwcGxpY2F0aW9uL3NjdnAtdnAtcmVxdWVzdFwiOltcInNwcVwiXSxcImFwcGxpY2F0aW9uL3NjdnAtdnAtcmVzcG9uc2VcIjpbXCJzcHBcIl0sXCJhcHBsaWNhdGlvbi9zZHBcIjpbXCJzZHBcIl0sXCJhcHBsaWNhdGlvbi9zZW5tbCt4bWxcIjpbXCJzZW5tbHhcIl0sXCJhcHBsaWNhdGlvbi9zZW5zbWwreG1sXCI6W1wic2Vuc21seFwiXSxcImFwcGxpY2F0aW9uL3NldC1wYXltZW50LWluaXRpYXRpb25cIjpbXCJzZXRwYXlcIl0sXCJhcHBsaWNhdGlvbi9zZXQtcmVnaXN0cmF0aW9uLWluaXRpYXRpb25cIjpbXCJzZXRyZWdcIl0sXCJhcHBsaWNhdGlvbi9zaGYreG1sXCI6W1wic2hmXCJdLFwiYXBwbGljYXRpb24vc2lldmVcIjpbXCJzaXZcIixcInNpZXZlXCJdLFwiYXBwbGljYXRpb24vc21pbCt4bWxcIjpbXCJzbWlcIixcInNtaWxcIl0sXCJhcHBsaWNhdGlvbi9zcGFycWwtcXVlcnlcIjpbXCJycVwiXSxcImFwcGxpY2F0aW9uL3NwYXJxbC1yZXN1bHRzK3htbFwiOltcInNyeFwiXSxcImFwcGxpY2F0aW9uL3NyZ3NcIjpbXCJncmFtXCJdLFwiYXBwbGljYXRpb24vc3Jncyt4bWxcIjpbXCJncnhtbFwiXSxcImFwcGxpY2F0aW9uL3NydSt4bWxcIjpbXCJzcnVcIl0sXCJhcHBsaWNhdGlvbi9zc2RsK3htbFwiOltcInNzZGxcIl0sXCJhcHBsaWNhdGlvbi9zc21sK3htbFwiOltcInNzbWxcIl0sXCJhcHBsaWNhdGlvbi9zd2lkK3htbFwiOltcInN3aWR0YWdcIl0sXCJhcHBsaWNhdGlvbi90ZWkreG1sXCI6W1widGVpXCIsXCJ0ZWljb3JwdXNcIl0sXCJhcHBsaWNhdGlvbi90aHJhdWQreG1sXCI6W1widGZpXCJdLFwiYXBwbGljYXRpb24vdGltZXN0YW1wZWQtZGF0YVwiOltcInRzZFwiXSxcImFwcGxpY2F0aW9uL3RvbWxcIjpbXCJ0b21sXCJdLFwiYXBwbGljYXRpb24vdHJpZ1wiOltcInRyaWdcIl0sXCJhcHBsaWNhdGlvbi90dG1sK3htbFwiOltcInR0bWxcIl0sXCJhcHBsaWNhdGlvbi91Ympzb25cIjpbXCJ1YmpcIl0sXCJhcHBsaWNhdGlvbi91cmMtcmVzc2hlZXQreG1sXCI6W1wicnNoZWV0XCJdLFwiYXBwbGljYXRpb24vdXJjLXRhcmdldGRlc2MreG1sXCI6W1widGRcIl0sXCJhcHBsaWNhdGlvbi92b2ljZXhtbCt4bWxcIjpbXCJ2eG1sXCJdLFwiYXBwbGljYXRpb24vd2FzbVwiOltcIndhc21cIl0sXCJhcHBsaWNhdGlvbi93aWRnZXRcIjpbXCJ3Z3RcIl0sXCJhcHBsaWNhdGlvbi93aW5obHBcIjpbXCJobHBcIl0sXCJhcHBsaWNhdGlvbi93c2RsK3htbFwiOltcIndzZGxcIl0sXCJhcHBsaWNhdGlvbi93c3BvbGljeSt4bWxcIjpbXCJ3c3BvbGljeVwiXSxcImFwcGxpY2F0aW9uL3hhbWwreG1sXCI6W1wieGFtbFwiXSxcImFwcGxpY2F0aW9uL3hjYXAtYXR0K3htbFwiOltcInhhdlwiXSxcImFwcGxpY2F0aW9uL3hjYXAtY2Fwcyt4bWxcIjpbXCJ4Y2FcIl0sXCJhcHBsaWNhdGlvbi94Y2FwLWRpZmYreG1sXCI6W1wieGRmXCJdLFwiYXBwbGljYXRpb24veGNhcC1lbCt4bWxcIjpbXCJ4ZWxcIl0sXCJhcHBsaWNhdGlvbi94Y2FwLW5zK3htbFwiOltcInhuc1wiXSxcImFwcGxpY2F0aW9uL3hlbmMreG1sXCI6W1wieGVuY1wiXSxcImFwcGxpY2F0aW9uL3hodG1sK3htbFwiOltcInhodG1sXCIsXCJ4aHRcIl0sXCJhcHBsaWNhdGlvbi94bGlmZit4bWxcIjpbXCJ4bGZcIl0sXCJhcHBsaWNhdGlvbi94bWxcIjpbXCJ4bWxcIixcInhzbFwiLFwieHNkXCIsXCJybmdcIl0sXCJhcHBsaWNhdGlvbi94bWwtZHRkXCI6W1wiZHRkXCJdLFwiYXBwbGljYXRpb24veG9wK3htbFwiOltcInhvcFwiXSxcImFwcGxpY2F0aW9uL3hwcm9jK3htbFwiOltcInhwbFwiXSxcImFwcGxpY2F0aW9uL3hzbHQreG1sXCI6W1wiKnhzbFwiLFwieHNsdFwiXSxcImFwcGxpY2F0aW9uL3hzcGYreG1sXCI6W1wieHNwZlwiXSxcImFwcGxpY2F0aW9uL3h2K3htbFwiOltcIm14bWxcIixcInhodm1sXCIsXCJ4dm1sXCIsXCJ4dm1cIl0sXCJhcHBsaWNhdGlvbi95YW5nXCI6W1wieWFuZ1wiXSxcImFwcGxpY2F0aW9uL3lpbit4bWxcIjpbXCJ5aW5cIl0sXCJhcHBsaWNhdGlvbi96aXBcIjpbXCJ6aXBcIl0sXCJhdWRpby8zZ3BwXCI6W1wiKjNncHBcIl0sXCJhdWRpby9hZHBjbVwiOltcImFkcFwiXSxcImF1ZGlvL2FtclwiOltcImFtclwiXSxcImF1ZGlvL2Jhc2ljXCI6W1wiYXVcIixcInNuZFwiXSxcImF1ZGlvL21pZGlcIjpbXCJtaWRcIixcIm1pZGlcIixcImthclwiLFwicm1pXCJdLFwiYXVkaW8vbW9iaWxlLXhtZlwiOltcIm14bWZcIl0sXCJhdWRpby9tcDNcIjpbXCIqbXAzXCJdLFwiYXVkaW8vbXA0XCI6W1wibTRhXCIsXCJtcDRhXCJdLFwiYXVkaW8vbXBlZ1wiOltcIm1wZ2FcIixcIm1wMlwiLFwibXAyYVwiLFwibXAzXCIsXCJtMmFcIixcIm0zYVwiXSxcImF1ZGlvL29nZ1wiOltcIm9nYVwiLFwib2dnXCIsXCJzcHhcIixcIm9wdXNcIl0sXCJhdWRpby9zM21cIjpbXCJzM21cIl0sXCJhdWRpby9zaWxrXCI6W1wic2lsXCJdLFwiYXVkaW8vd2F2XCI6W1wid2F2XCJdLFwiYXVkaW8vd2F2ZVwiOltcIip3YXZcIl0sXCJhdWRpby93ZWJtXCI6W1wid2ViYVwiXSxcImF1ZGlvL3htXCI6W1wieG1cIl0sXCJmb250L2NvbGxlY3Rpb25cIjpbXCJ0dGNcIl0sXCJmb250L290ZlwiOltcIm90ZlwiXSxcImZvbnQvdHRmXCI6W1widHRmXCJdLFwiZm9udC93b2ZmXCI6W1wid29mZlwiXSxcImZvbnQvd29mZjJcIjpbXCJ3b2ZmMlwiXSxcImltYWdlL2FjZXNcIjpbXCJleHJcIl0sXCJpbWFnZS9hcG5nXCI6W1wiYXBuZ1wiXSxcImltYWdlL2F2aWZcIjpbXCJhdmlmXCJdLFwiaW1hZ2UvYm1wXCI6W1wiYm1wXCJdLFwiaW1hZ2UvY2dtXCI6W1wiY2dtXCJdLFwiaW1hZ2UvZGljb20tcmxlXCI6W1wiZHJsZVwiXSxcImltYWdlL2VtZlwiOltcImVtZlwiXSxcImltYWdlL2ZpdHNcIjpbXCJmaXRzXCJdLFwiaW1hZ2UvZzNmYXhcIjpbXCJnM1wiXSxcImltYWdlL2dpZlwiOltcImdpZlwiXSxcImltYWdlL2hlaWNcIjpbXCJoZWljXCJdLFwiaW1hZ2UvaGVpYy1zZXF1ZW5jZVwiOltcImhlaWNzXCJdLFwiaW1hZ2UvaGVpZlwiOltcImhlaWZcIl0sXCJpbWFnZS9oZWlmLXNlcXVlbmNlXCI6W1wiaGVpZnNcIl0sXCJpbWFnZS9oZWoya1wiOltcImhlajJcIl0sXCJpbWFnZS9oc2oyXCI6W1wiaHNqMlwiXSxcImltYWdlL2llZlwiOltcImllZlwiXSxcImltYWdlL2psc1wiOltcImpsc1wiXSxcImltYWdlL2pwMlwiOltcImpwMlwiLFwianBnMlwiXSxcImltYWdlL2pwZWdcIjpbXCJqcGVnXCIsXCJqcGdcIixcImpwZVwiXSxcImltYWdlL2pwaFwiOltcImpwaFwiXSxcImltYWdlL2pwaGNcIjpbXCJqaGNcIl0sXCJpbWFnZS9qcG1cIjpbXCJqcG1cIl0sXCJpbWFnZS9qcHhcIjpbXCJqcHhcIixcImpwZlwiXSxcImltYWdlL2p4clwiOltcImp4clwiXSxcImltYWdlL2p4cmFcIjpbXCJqeHJhXCJdLFwiaW1hZ2Uvanhyc1wiOltcImp4cnNcIl0sXCJpbWFnZS9qeHNcIjpbXCJqeHNcIl0sXCJpbWFnZS9qeHNjXCI6W1wianhzY1wiXSxcImltYWdlL2p4c2lcIjpbXCJqeHNpXCJdLFwiaW1hZ2Uvanhzc1wiOltcImp4c3NcIl0sXCJpbWFnZS9rdHhcIjpbXCJrdHhcIl0sXCJpbWFnZS9rdHgyXCI6W1wia3R4MlwiXSxcImltYWdlL3BuZ1wiOltcInBuZ1wiXSxcImltYWdlL3NnaVwiOltcInNnaVwiXSxcImltYWdlL3N2Zyt4bWxcIjpbXCJzdmdcIixcInN2Z3pcIl0sXCJpbWFnZS90MzhcIjpbXCJ0MzhcIl0sXCJpbWFnZS90aWZmXCI6W1widGlmXCIsXCJ0aWZmXCJdLFwiaW1hZ2UvdGlmZi1meFwiOltcInRmeFwiXSxcImltYWdlL3dlYnBcIjpbXCJ3ZWJwXCJdLFwiaW1hZ2Uvd21mXCI6W1wid21mXCJdLFwibWVzc2FnZS9kaXNwb3NpdGlvbi1ub3RpZmljYXRpb25cIjpbXCJkaXNwb3NpdGlvbi1ub3RpZmljYXRpb25cIl0sXCJtZXNzYWdlL2dsb2JhbFwiOltcInU4bXNnXCJdLFwibWVzc2FnZS9nbG9iYWwtZGVsaXZlcnktc3RhdHVzXCI6W1widThkc25cIl0sXCJtZXNzYWdlL2dsb2JhbC1kaXNwb3NpdGlvbi1ub3RpZmljYXRpb25cIjpbXCJ1OG1kblwiXSxcIm1lc3NhZ2UvZ2xvYmFsLWhlYWRlcnNcIjpbXCJ1OGhkclwiXSxcIm1lc3NhZ2UvcmZjODIyXCI6W1wiZW1sXCIsXCJtaW1lXCJdLFwibW9kZWwvM21mXCI6W1wiM21mXCJdLFwibW9kZWwvZ2x0Zitqc29uXCI6W1wiZ2x0ZlwiXSxcIm1vZGVsL2dsdGYtYmluYXJ5XCI6W1wiZ2xiXCJdLFwibW9kZWwvaWdlc1wiOltcImlnc1wiLFwiaWdlc1wiXSxcIm1vZGVsL21lc2hcIjpbXCJtc2hcIixcIm1lc2hcIixcInNpbG9cIl0sXCJtb2RlbC9tdGxcIjpbXCJtdGxcIl0sXCJtb2RlbC9vYmpcIjpbXCJvYmpcIl0sXCJtb2RlbC9zdGVwK3htbFwiOltcInN0cHhcIl0sXCJtb2RlbC9zdGVwK3ppcFwiOltcInN0cHpcIl0sXCJtb2RlbC9zdGVwLXhtbCt6aXBcIjpbXCJzdHB4elwiXSxcIm1vZGVsL3N0bFwiOltcInN0bFwiXSxcIm1vZGVsL3ZybWxcIjpbXCJ3cmxcIixcInZybWxcIl0sXCJtb2RlbC94M2QrYmluYXJ5XCI6W1wiKngzZGJcIixcIngzZGJ6XCJdLFwibW9kZWwveDNkK2Zhc3RpbmZvc2V0XCI6W1wieDNkYlwiXSxcIm1vZGVsL3gzZCt2cm1sXCI6W1wiKngzZHZcIixcIngzZHZ6XCJdLFwibW9kZWwveDNkK3htbFwiOltcIngzZFwiLFwieDNkelwiXSxcIm1vZGVsL3gzZC12cm1sXCI6W1wieDNkdlwiXSxcInRleHQvY2FjaGUtbWFuaWZlc3RcIjpbXCJhcHBjYWNoZVwiLFwibWFuaWZlc3RcIl0sXCJ0ZXh0L2NhbGVuZGFyXCI6W1wiaWNzXCIsXCJpZmJcIl0sXCJ0ZXh0L2NvZmZlZXNjcmlwdFwiOltcImNvZmZlZVwiLFwibGl0Y29mZmVlXCJdLFwidGV4dC9jc3NcIjpbXCJjc3NcIl0sXCJ0ZXh0L2NzdlwiOltcImNzdlwiXSxcInRleHQvaHRtbFwiOltcImh0bWxcIixcImh0bVwiLFwic2h0bWxcIl0sXCJ0ZXh0L2phZGVcIjpbXCJqYWRlXCJdLFwidGV4dC9qc3hcIjpbXCJqc3hcIl0sXCJ0ZXh0L2xlc3NcIjpbXCJsZXNzXCJdLFwidGV4dC9tYXJrZG93blwiOltcIm1hcmtkb3duXCIsXCJtZFwiXSxcInRleHQvbWF0aG1sXCI6W1wibW1sXCJdLFwidGV4dC9tZHhcIjpbXCJtZHhcIl0sXCJ0ZXh0L24zXCI6W1wibjNcIl0sXCJ0ZXh0L3BsYWluXCI6W1widHh0XCIsXCJ0ZXh0XCIsXCJjb25mXCIsXCJkZWZcIixcImxpc3RcIixcImxvZ1wiLFwiaW5cIixcImluaVwiXSxcInRleHQvcmljaHRleHRcIjpbXCJydHhcIl0sXCJ0ZXh0L3J0ZlwiOltcIipydGZcIl0sXCJ0ZXh0L3NnbWxcIjpbXCJzZ21sXCIsXCJzZ21cIl0sXCJ0ZXh0L3NoZXhcIjpbXCJzaGV4XCJdLFwidGV4dC9zbGltXCI6W1wic2xpbVwiLFwic2xtXCJdLFwidGV4dC9zcGR4XCI6W1wic3BkeFwiXSxcInRleHQvc3R5bHVzXCI6W1wic3R5bHVzXCIsXCJzdHlsXCJdLFwidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlc1wiOltcInRzdlwiXSxcInRleHQvdHJvZmZcIjpbXCJ0XCIsXCJ0clwiLFwicm9mZlwiLFwibWFuXCIsXCJtZVwiLFwibXNcIl0sXCJ0ZXh0L3R1cnRsZVwiOltcInR0bFwiXSxcInRleHQvdXJpLWxpc3RcIjpbXCJ1cmlcIixcInVyaXNcIixcInVybHNcIl0sXCJ0ZXh0L3ZjYXJkXCI6W1widmNhcmRcIl0sXCJ0ZXh0L3Z0dFwiOltcInZ0dFwiXSxcInRleHQveG1sXCI6W1wiKnhtbFwiXSxcInRleHQveWFtbFwiOltcInlhbWxcIixcInltbFwiXSxcInZpZGVvLzNncHBcIjpbXCIzZ3BcIixcIjNncHBcIl0sXCJ2aWRlby8zZ3BwMlwiOltcIjNnMlwiXSxcInZpZGVvL2gyNjFcIjpbXCJoMjYxXCJdLFwidmlkZW8vaDI2M1wiOltcImgyNjNcIl0sXCJ2aWRlby9oMjY0XCI6W1wiaDI2NFwiXSxcInZpZGVvL2lzby5zZWdtZW50XCI6W1wibTRzXCJdLFwidmlkZW8vanBlZ1wiOltcImpwZ3ZcIl0sXCJ2aWRlby9qcG1cIjpbXCIqanBtXCIsXCJqcGdtXCJdLFwidmlkZW8vbWoyXCI6W1wibWoyXCIsXCJtanAyXCJdLFwidmlkZW8vbXAydFwiOltcInRzXCJdLFwidmlkZW8vbXA0XCI6W1wibXA0XCIsXCJtcDR2XCIsXCJtcGc0XCJdLFwidmlkZW8vbXBlZ1wiOltcIm1wZWdcIixcIm1wZ1wiLFwibXBlXCIsXCJtMXZcIixcIm0ydlwiXSxcInZpZGVvL29nZ1wiOltcIm9ndlwiXSxcInZpZGVvL3F1aWNrdGltZVwiOltcInF0XCIsXCJtb3ZcIl0sXCJ2aWRlby93ZWJtXCI6W1wid2VibVwiXX07IiwiJ3VzZSBzdHJpY3QnO1xuXG5sZXQgTWltZSA9IHJlcXVpcmUoJy4vTWltZScpO1xubW9kdWxlLmV4cG9ydHMgPSBuZXcgTWltZShyZXF1aXJlKCcuL3R5cGVzL3N0YW5kYXJkJykpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFZlcnNpb24gPSBleHBvcnRzLmJ1aWxkQmFzZVVybCA9IGV4cG9ydHMuYnVpbGRGb3JtRGF0YVZhbHVlID0gZXhwb3J0cy5idWlsZEhlYWRlcnMgPSBleHBvcnRzLmJ1aWxkUGxhdGZvcm1EZXBlbmRlbnRDb25maWcgPSBleHBvcnRzLmdldERlZmF1bHRBdXRoID0gZXhwb3J0cy5nZXRSZXF1ZXN0VG9rZW4gPSBleHBvcnRzLnJlYWRGaWxlRnJvbVBhdGggPSB2b2lkIDA7XG52YXIgVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yXzEgPSByZXF1aXJlKFwiLi9VbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3JcIik7XG52YXIgbGl0ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJtaW1lL2xpdGVcIikpO1xudmFyIHBhY2thZ2VfanNvbl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9wYWNrYWdlLmpzb25cIikpO1xudmFyIHJlYWRGaWxlRnJvbVBhdGggPSBmdW5jdGlvbiAoZmlsZVBhdGgpIHtcbiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yXzEuVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yKFwiQnJvd3NlclwiKTtcbn07XG5leHBvcnRzLnJlYWRGaWxlRnJvbVBhdGggPSByZWFkRmlsZUZyb21QYXRoO1xudmFyIGdldFJlcXVlc3RUb2tlbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9jKSB7XG4gICAgICAgIGlmICh0eXBlb2Yga2ludG9uZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAga2ludG9uZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgdHlwZW9mIGtpbnRvbmUuZ2V0UmVxdWVzdFRva2VuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBraW50b25lLmdldFJlcXVlc3RUb2tlbigpXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGdhcm9vbiA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgZ2Fyb29uICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2YgKChfYiA9IChfYSA9IGdhcm9vbi5jb25uZWN0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eua2ludG9uZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmdldFJlcXVlc3RUb2tlbikgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGdhcm9vbi5jb25uZWN0LmtpbnRvbmUuZ2V0UmVxdWVzdFRva2VuKCldO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInNlc3Npb24gYXV0aGVudGljYXRpb24gbXVzdCBzcGVjaWZ5IGEgcmVxdWVzdCB0b2tlblwiKTtcbiAgICB9KTtcbn0pOyB9O1xuZXhwb3J0cy5nZXRSZXF1ZXN0VG9rZW4gPSBnZXRSZXF1ZXN0VG9rZW47XG52YXIgZ2V0RGVmYXVsdEF1dGggPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJzZXNzaW9uXCIsXG4gICAgfTtcbn07XG5leHBvcnRzLmdldERlZmF1bHRBdXRoID0gZ2V0RGVmYXVsdEF1dGg7XG52YXIgYnVpbGRQbGF0Zm9ybURlcGVuZGVudENvbmZpZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge307XG59O1xuZXhwb3J0cy5idWlsZFBsYXRmb3JtRGVwZW5kZW50Q29uZmlnID0gYnVpbGRQbGF0Zm9ybURlcGVuZGVudENvbmZpZztcbnZhciBidWlsZEhlYWRlcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHt9O1xufTtcbmV4cG9ydHMuYnVpbGRIZWFkZXJzID0gYnVpbGRIZWFkZXJzO1xudmFyIGJ1aWxkRm9ybURhdGFWYWx1ZSA9IGZ1bmN0aW9uIChkYXRhLCBmaWxlTmFtZSkge1xuICAgIHZhciBvcHRpb25zID0ge307XG4gICAgaWYgKGZpbGVOYW1lKSB7XG4gICAgICAgIG9wdGlvbnMudHlwZSA9IGxpdGVfMS5kZWZhdWx0LmdldFR5cGUoZmlsZU5hbWUpIHx8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBCbG9iKFtkYXRhXSwgb3B0aW9ucyk7XG59O1xuZXhwb3J0cy5idWlsZEZvcm1EYXRhVmFsdWUgPSBidWlsZEZvcm1EYXRhVmFsdWU7XG52YXIgYnVpbGRCYXNlVXJsID0gZnVuY3Rpb24gKGJhc2VVcmwpIHtcbiAgICBpZiAoYmFzZVVybCkge1xuICAgICAgICByZXR1cm4gYmFzZVVybDtcbiAgICB9XG4gICAgaWYgKGxvY2F0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGJhc2VVcmwgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIGZvciB0aGlzIGVudmlyb25tZW50XCIpO1xuICAgIH1cbiAgICB2YXIgaG9zdCA9IGxvY2F0aW9uLmhvc3QsIHByb3RvY29sID0gbG9jYXRpb24ucHJvdG9jb2w7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHByb3RvY29sLCBcIi8vXCIpLmNvbmNhdChob3N0KTtcbn07XG5leHBvcnRzLmJ1aWxkQmFzZVVybCA9IGJ1aWxkQmFzZVVybDtcbnZhciBnZXRWZXJzaW9uID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBwYWNrYWdlX2pzb25fMS5kZWZhdWx0LnZlcnNpb247XG59O1xuZXhwb3J0cy5nZXRWZXJzaW9uID0gZ2V0VmVyc2lvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJyb3dzZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJ1aWxkUGF0aCA9IHZvaWQgMDtcbnZhciBidWlsZFBhdGggPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgdmFyIGVuZHBvaW50TmFtZSA9IHBhcmFtcy5lbmRwb2ludE5hbWUsIGd1ZXN0U3BhY2VJZCA9IHBhcmFtcy5ndWVzdFNwYWNlSWQsIHByZXZpZXcgPSBwYXJhbXMucHJldmlldztcbiAgICB2YXIgZ3Vlc3RQYXRoID0gZ3Vlc3RTcGFjZUlkICE9PSB1bmRlZmluZWQgPyBcIi9ndWVzdC9cIi5jb25jYXQoZ3Vlc3RTcGFjZUlkKSA6IFwiXCI7XG4gICAgdmFyIHByZXZpZXdQYXRoID0gcHJldmlldyA/IFwiL3ByZXZpZXdcIiA6IFwiXCI7XG4gICAgcmV0dXJuIFwiL2tcIi5jb25jYXQoZ3Vlc3RQYXRoLCBcIi92MVwiKS5jb25jYXQocHJldmlld1BhdGgsIFwiL1wiKS5jb25jYXQoZW5kcG9pbnROYW1lLCBcIi5qc29uXCIpO1xufTtcbmV4cG9ydHMuYnVpbGRQYXRoID0gYnVpbGRQYXRoO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXJsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQmFzZUNsaWVudCA9IHZvaWQgMDtcbnZhciB1cmxfMSA9IHJlcXVpcmUoXCIuLi91cmxcIik7XG52YXIgQmFzZUNsaWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBCYXNlQ2xpZW50KGNsaWVudCwgZ3Vlc3RTcGFjZUlkKSB7XG4gICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgICAgICB0aGlzLmd1ZXN0U3BhY2VJZCA9IGd1ZXN0U3BhY2VJZDtcbiAgICB9XG4gICAgQmFzZUNsaWVudC5wcm90b3R5cGUuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuICgwLCB1cmxfMS5idWlsZFBhdGgpKF9fYXNzaWduKF9fYXNzaWduKHt9LCBwYXJhbXMpLCB7IGd1ZXN0U3BhY2VJZDogdGhpcy5ndWVzdFNwYWNlSWQgfSkpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBidWlsZCB0aGUgZW5kcG9pbnQgZm9yIHRoZSBBUEkgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBndWVzdCBzcGFjZSBVUkwuXG4gICAgICogT3RoZXJ3aXNlLCBwbGVhc2UgdXNlIGBidWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkYCBpbnN0ZWFkLlxuICAgICAqIEBwYXJhbSBwYXJhbXNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgQmFzZUNsaWVudC5wcm90b3R5cGUuYnVpbGRQYXRoID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gKDAsIHVybF8xLmJ1aWxkUGF0aCkocGFyYW1zKTtcbiAgICB9O1xuICAgIHJldHVybiBCYXNlQ2xpZW50O1xufSgpKTtcbmV4cG9ydHMuQmFzZUNsaWVudCA9IEJhc2VDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CYXNlQ2xpZW50LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkJ1bGtSZXF1ZXN0Q2xpZW50ID0gdm9pZCAwO1xudmFyIEJhc2VDbGllbnRfMSA9IHJlcXVpcmUoXCIuL0Jhc2VDbGllbnRcIik7XG52YXIgQnVsa1JlcXVlc3RDbGllbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEJ1bGtSZXF1ZXN0Q2xpZW50LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEJ1bGtSZXF1ZXN0Q2xpZW50KGNsaWVudCwgZ3Vlc3RTcGFjZUlkKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGNsaWVudCwgZ3Vlc3RTcGFjZUlkKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5SRVFVRVNUU19MRU5HVEhfTElNSVQgPSAyMDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBCdWxrUmVxdWVzdENsaWVudC5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHJlcXVlc3RzUGFyYW0gPSBwYXJhbXMucmVxdWVzdHM7XG4gICAgICAgIHZhciByZXF1ZXN0cyA9IHJlcXVlc3RzUGFyYW0ubWFwKGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG4gICAgICAgICAgICBpZiAoXCJlbmRwb2ludE5hbWVcIiBpbiByZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGVuZHBvaW50TmFtZSA9IHJlcXVlc3QuZW5kcG9pbnROYW1lLCByZXN0ID0gX19yZXN0KHJlcXVlc3QsIFtcImVuZHBvaW50TmFtZVwiXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fYXNzaWduKHsgYXBpOiBfdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHsgZW5kcG9pbnROYW1lOiBlbmRwb2ludE5hbWUgfSkgfSwgcmVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJidWxrUmVxdWVzdFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnBvc3QocGF0aCwgeyByZXF1ZXN0czogcmVxdWVzdHMgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gQnVsa1JlcXVlc3RDbGllbnQ7XG59KEJhc2VDbGllbnRfMS5CYXNlQ2xpZW50KSk7XG5leHBvcnRzLkJ1bGtSZXF1ZXN0Q2xpZW50ID0gQnVsa1JlcXVlc3RDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CdWxrUmVxdWVzdENsaWVudC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BcHBDbGllbnQgPSB2b2lkIDA7XG52YXIgQmFzZUNsaWVudF8xID0gcmVxdWlyZShcIi4vQmFzZUNsaWVudFwiKTtcbnZhciBBcHBDbGllbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFwcENsaWVudCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBcHBDbGllbnQoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXRGb3JtRmllbGRzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcHJldmlldyA9IHBhcmFtcy5wcmV2aWV3LCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wicHJldmlld1wiXSk7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvZm9ybS9maWVsZHNcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHByZXZpZXcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIF9fYXNzaWduKHt9LCByZXN0KSk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmFkZEZvcm1GaWVsZHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvZm9ybS9maWVsZHNcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucG9zdChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS51cGRhdGVGb3JtRmllbGRzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2Zvcm0vZmllbGRzXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5kZWxldGVGb3JtRmllbGRzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2Zvcm0vZmllbGRzXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmRlbGV0ZShwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXRGb3JtTGF5b3V0ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcHJldmlldyA9IHBhcmFtcy5wcmV2aWV3LCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wicHJldmlld1wiXSk7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvZm9ybS9sYXlvdXRcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHByZXZpZXcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIF9fYXNzaWduKHt9LCByZXN0KSk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLnVwZGF0ZUZvcm1MYXlvdXQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvZm9ybS9sYXlvdXRcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldFZpZXdzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcHJldmlldyA9IHBhcmFtcy5wcmV2aWV3LCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wicHJldmlld1wiXSk7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvdmlld3NcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHByZXZpZXcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHJlc3QpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS51cGRhdGVWaWV3cyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC92aWV3c1wiLFxuICAgICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZ2V0QXBwID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldEFwcHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHBzXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmFkZEFwcCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG5hbWUsIHNwYWNlLCBwYXRoLCBzcGFjZVBhdGgsIGRlZmF1bHRUaHJlYWQ7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gcGFyYW1zLm5hbWUsIHNwYWNlID0gcGFyYW1zLnNwYWNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3BhY2UpIHJldHVybiBbMyAvKmJyZWFrKi8sIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VQYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwic3BhY2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5jbGllbnQuZ2V0KHNwYWNlUGF0aCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogc3BhY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VGhyZWFkID0gKF9hLnNlbnQoKSkuZGVmYXVsdFRocmVhZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLmNsaWVudC5wb3N0KHBhdGgsIF9fYXNzaWduKF9fYXNzaWduKHt9LCBwYXJhbXMpLCB7IHRocmVhZDogZGVmYXVsdFRocmVhZCB9KSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLmNsaWVudC5wb3N0KHBhdGgsIHsgbmFtZTogbmFtZSB9KV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXRBcHBTZXR0aW5ncyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHByZXZpZXcgPSBwYXJhbXMucHJldmlldywgcmVzdCA9IF9fcmVzdChwYXJhbXMsIFtcInByZXZpZXdcIl0pO1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL3NldHRpbmdzXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiBwcmV2aWV3LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCByZXN0KTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUudXBkYXRlQXBwU2V0dGluZ3MgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvc2V0dGluZ3NcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldFByb2Nlc3NNYW5hZ2VtZW50ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcHJldmlldyA9IHBhcmFtcy5wcmV2aWV3LCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wicHJldmlld1wiXSk7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvc3RhdHVzXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiBwcmV2aWV3LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCByZXN0KTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUudXBkYXRlUHJvY2Vzc01hbmFnZW1lbnQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvc3RhdHVzXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXREZXBsb3lTdGF0dXMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvZGVwbG95XCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5kZXBsb3lBcHAgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvZGVwbG95XCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnBvc3QocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZ2V0RmllbGRBY2wgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwcmV2aWV3ID0gcGFyYW1zLnByZXZpZXcsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJwcmV2aWV3XCJdKTtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImZpZWxkL2FjbFwiLFxuICAgICAgICAgICAgcHJldmlldzogcHJldmlldyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgX19hc3NpZ24oe30sIHJlc3QpKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUudXBkYXRlRmllbGRBY2wgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIC8vIE5PVEU6IFdoZW4gZXhlY3V0aW5nIHRoaXMgQVBJIHdpdGhvdXQgYHByZXZpZXdgLFxuICAgICAgICAvLyBhbGwgcHJlLWxpdmUgYXBwJ3Mgc2V0dGluZ3Mgd2lsbCBiZSBkZXBsb3llZCB0byBsaXZlIGFwcC5cbiAgICAgICAgLy8gVGhpcyBiZWhhdmlvciBtYXkgbm90IGJlIHdoYXQgdGhlIHVzZXJzIGV4cGVjdGVkLFxuICAgICAgICAvLyBzbyB3ZSBkaXNhYmxlIGl0IHRlbXBvcmFyaWx5LlxuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiZmllbGQvYWNsXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXRBcHBBY2wgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwcmV2aWV3ID0gcGFyYW1zLnByZXZpZXcsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJwcmV2aWV3XCJdKTtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9hY2xcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHByZXZpZXcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIF9fYXNzaWduKHt9LCByZXN0KSk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLnVwZGF0ZUFwcEFjbCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgLy8gTk9URTogV2hlbiBleGVjdXRpbmcgdGhpcyBBUEkgd2l0aG91dCBgcHJldmlld2AsXG4gICAgICAgIC8vIGFsbCBwcmUtbGl2ZSBhcHAncyBzZXR0aW5ncyB3aWxsIGJlIGRlcGxveWVkIHRvIGxpdmUgYXBwLlxuICAgICAgICAvLyBUaGlzIGJlaGF2aW9yIG1heSBub3QgYmUgd2hhdCB0aGUgdXNlcnMgZXhwZWN0ZWQsXG4gICAgICAgIC8vIHNvIHdlIGRpc2FibGUgaXQgdGVtcG9yYXJpbHkuXG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvYWNsXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5ldmFsdWF0ZVJlY29yZHNBY2wgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzL2FjbC9ldmFsdWF0ZVwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXRSZWNvcmRBY2wgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwcmV2aWV3ID0gcGFyYW1zLnByZXZpZXcsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJwcmV2aWV3XCJdKTtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZC9hY2xcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHByZXZpZXcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIF9fYXNzaWduKHt9LCByZXN0KSk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLnVwZGF0ZVJlY29yZEFjbCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgLy8gTk9URTogV2hlbiBleGVjdXRpbmcgdGhpcyBBUEkgd2l0aG91dCBgcHJldmlld2AsXG4gICAgICAgIC8vIGFsbCBwcmUtbGl2ZSBhcHAncyBzZXR0aW5ncyB3aWxsIGJlIGRlcGxveWVkIHRvIGxpdmUgYXBwLlxuICAgICAgICAvLyBUaGlzIGJlaGF2aW9yIG1heSBub3QgYmUgd2hhdCB0aGUgdXNlcnMgZXhwZWN0ZWQsXG4gICAgICAgIC8vIHNvIHdlIGRpc2FibGUgaXQgdGVtcG9yYXJpbHkuXG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmQvYWNsXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXRBcHBDdXN0b21pemUgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwcmV2aWV3ID0gcGFyYW1zLnByZXZpZXcsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJwcmV2aWV3XCJdKTtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9jdXN0b21pemVcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHByZXZpZXcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIF9fYXNzaWduKHt9LCByZXN0KSk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLnVwZGF0ZUFwcEN1c3RvbWl6ZSA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9jdXN0b21pemVcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldEdlbmVyYWxOb3RpZmljYXRpb25zID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcHJldmlldyA9IHBhcmFtcy5wcmV2aWV3LCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wicHJldmlld1wiXSk7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvbm90aWZpY2F0aW9ucy9nZW5lcmFsXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiBwcmV2aWV3LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBfX2Fzc2lnbih7fSwgcmVzdCkpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS51cGRhdGVHZW5lcmFsTm90aWZpY2F0aW9ucyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9ub3RpZmljYXRpb25zL2dlbmVyYWxcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldFBlclJlY29yZE5vdGlmaWNhdGlvbnMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwcmV2aWV3ID0gcGFyYW1zLnByZXZpZXcsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJwcmV2aWV3XCJdKTtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9ub3RpZmljYXRpb25zL3BlclJlY29yZFwiLFxuICAgICAgICAgICAgcHJldmlldzogcHJldmlldyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcmVzdCk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLnVwZGF0ZVBlclJlY29yZE5vdGlmaWNhdGlvbnMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvbm90aWZpY2F0aW9ucy9wZXJSZWNvcmRcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldFJlbWluZGVyTm90aWZpY2F0aW9ucyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHByZXZpZXcgPSBwYXJhbXMucHJldmlldywgcmVzdCA9IF9fcmVzdChwYXJhbXMsIFtcInByZXZpZXdcIl0pO1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL25vdGlmaWNhdGlvbnMvcmVtaW5kZXJcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHByZXZpZXcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHJlc3QpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS51cGRhdGVSZW1pbmRlck5vdGlmaWNhdGlvbnMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvbm90aWZpY2F0aW9ucy9yZW1pbmRlclwiLFxuICAgICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZ2V0UmVwb3J0cyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHByZXZpZXcgPSBwYXJhbXMucHJldmlldywgcmVzdCA9IF9fcmVzdChwYXJhbXMsIFtcInByZXZpZXdcIl0pO1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL3JlcG9ydHNcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHByZXZpZXcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHJlc3QpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS51cGRhdGVSZXBvcnRzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL3JlcG9ydHNcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldEFwcEFjdGlvbnMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwcmV2aWV3ID0gcGFyYW1zLnByZXZpZXcsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJwcmV2aWV3XCJdKTtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9hY3Rpb25zXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiBwcmV2aWV3LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCByZXN0KTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUudXBkYXRlQXBwQWN0aW9ucyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9hY3Rpb25zXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgcmV0dXJuIEFwcENsaWVudDtcbn0oQmFzZUNsaWVudF8xLkJhc2VDbGllbnQpKTtcbmV4cG9ydHMuQXBwQ2xpZW50ID0gQXBwQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXBwQ2xpZW50LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuS2ludG9uZUFib3J0U2VhcmNoRXJyb3IgPSB2b2lkIDA7XG52YXIgS2ludG9uZUFib3J0U2VhcmNoRXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEtpbnRvbmVBYm9ydFNlYXJjaEVycm9yLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEtpbnRvbmVBYm9ydFNlYXJjaEVycm9yKG1lc3NhZ2UpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWVzc2FnZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMubmFtZSA9IFwiS2ludG9uZUFib3J0U2VhcmNoRXJyb3JcIjtcbiAgICAgICAgX3RoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC93aWtpL0JyZWFraW5nLUNoYW5nZXMjZXh0ZW5kaW5nLWJ1aWx0LWlucy1saWtlLWVycm9yLWFycmF5LWFuZC1tYXAtbWF5LW5vLWxvbmdlci13b3JrXG4gICAgICAgIC8vIFNldCB0aGUgcHJvdG90eXBlIGV4cGxpY2l0bHkuXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihfdGhpcywgS2ludG9uZUFib3J0U2VhcmNoRXJyb3IucHJvdG90eXBlKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gS2ludG9uZUFib3J0U2VhcmNoRXJyb3I7XG59KEVycm9yKSk7XG5leHBvcnRzLktpbnRvbmVBYm9ydFNlYXJjaEVycm9yID0gS2ludG9uZUFib3J0U2VhcmNoRXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1LaW50b25lQWJvcnRTZWFyY2hFcnJvci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLktpbnRvbmVBbGxSZWNvcmRzRXJyb3IgPSB2b2lkIDA7XG52YXIgS2ludG9uZUFsbFJlY29yZHNFcnJvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoS2ludG9uZUFsbFJlY29yZHNFcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBLaW50b25lQWxsUmVjb3Jkc0Vycm9yKHByb2Nlc3NlZFJlY29yZHNSZXN1bHQsIHVucHJvY2Vzc2VkUmVjb3JkcywgbnVtT2ZBbGxSZWNvcmRzLCBlcnJvciwgY2h1bmtMZW5ndGgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIG51bU9mUHJvY2Vzc2VkUmVjb3JkcyA9IG51bU9mQWxsUmVjb3JkcyAtIHVucHJvY2Vzc2VkUmVjb3Jkcy5sZW5ndGg7XG4gICAgICAgIHZhciBlcnJvckluZGV4ID0gS2ludG9uZUFsbFJlY29yZHNFcnJvci5leHRyYWN0RXJyb3JJbmRleChudW1PZlByb2Nlc3NlZFJlY29yZHMsIGVycm9yLCBjaHVua0xlbmd0aCk7XG4gICAgICAgIHZhciBtZXNzYWdlID0gS2ludG9uZUFsbFJlY29yZHNFcnJvci5idWlsZEVycm9yTWVzc2FnZShudW1PZlByb2Nlc3NlZFJlY29yZHMsIG51bU9mQWxsUmVjb3JkcywgZXJyb3JJbmRleCk7XG4gICAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWVzc2FnZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMubmFtZSA9IFwiS2ludG9uZUFsbFJlY29yZHNFcnJvclwiO1xuICAgICAgICBfdGhpcy5wcm9jZXNzZWRSZWNvcmRzUmVzdWx0ID0gcHJvY2Vzc2VkUmVjb3Jkc1Jlc3VsdDtcbiAgICAgICAgX3RoaXMudW5wcm9jZXNzZWRSZWNvcmRzID0gdW5wcm9jZXNzZWRSZWNvcmRzO1xuICAgICAgICBfdGhpcy5lcnJvciA9IGVycm9yO1xuICAgICAgICBfdGhpcy5lcnJvckluZGV4ID0gZXJyb3JJbmRleDtcbiAgICAgICAgX3RoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIF90aGlzLm51bU9mUHJvY2Vzc2VkUmVjb3JkcyA9IG51bU9mUHJvY2Vzc2VkUmVjb3JkcztcbiAgICAgICAgX3RoaXMubnVtT2ZBbGxSZWNvcmRzID0gbnVtT2ZBbGxSZWNvcmRzO1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvd2lraS9CcmVha2luZy1DaGFuZ2VzI2V4dGVuZGluZy1idWlsdC1pbnMtbGlrZS1lcnJvci1hcnJheS1hbmQtbWFwLW1heS1uby1sb25nZXItd29ya1xuICAgICAgICAvLyBTZXQgdGhlIHByb3RvdHlwZSBleHBsaWNpdGx5LlxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoX3RoaXMsIEtpbnRvbmVBbGxSZWNvcmRzRXJyb3IucHJvdG90eXBlKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBLaW50b25lQWxsUmVjb3Jkc0Vycm9yLnBhcnNlRXJyb3JJbmRleCA9IGZ1bmN0aW9uIChlcnJvcnMpIHtcbiAgICAgICAgLy8gVE9ETzogdXNlIG1hdGNoQWxsIGFmdGVyIEVTMjAyMCBzdXBwb3J0XG4gICAgICAgIHZhciBlcnJvckluZGV4ZXMgPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXMoZXJyb3JzKS5mb3JFYWNoKGZ1bmN0aW9uIChlcnJvcktleSkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGVycm9yS2V5Lm1hdGNoKC9yZWNvcmRzXFxbKFxcZCspXFxdLyk7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgZXJyb3JJbmRleGVzLnB1c2goTnVtYmVyKHJlc3VsdFsxXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGVycm9ySW5kZXhlcy5sZW5ndGggPiAwID8gTWF0aC5taW4uYXBwbHkoTWF0aCwgZXJyb3JJbmRleGVzKSA6IG51bGw7XG4gICAgfTtcbiAgICBLaW50b25lQWxsUmVjb3Jkc0Vycm9yLmV4dHJhY3RFcnJvckluZGV4ID0gZnVuY3Rpb24gKG51bU9mUHJvY2Vzc2VkUmVjb3JkcywgZXJyb3IsIGNodW5rTGVuZ3RoKSB7XG4gICAgICAgIGlmIChlcnJvci5idWxrUmVxdWVzdEluZGV4ICE9PSB1bmRlZmluZWQgJiYgZXJyb3IuZXJyb3JzKSB7XG4gICAgICAgICAgICB2YXIgZXJyb3JQYXJzZVJlc3VsdCA9IEtpbnRvbmVBbGxSZWNvcmRzRXJyb3IucGFyc2VFcnJvckluZGV4KGVycm9yLmVycm9ycyk7XG4gICAgICAgICAgICBpZiAoZXJyb3JQYXJzZVJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAobnVtT2ZQcm9jZXNzZWRSZWNvcmRzICtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IuYnVsa1JlcXVlc3RJbmRleCAqIGNodW5rTGVuZ3RoICtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JQYXJzZVJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIEtpbnRvbmVBbGxSZWNvcmRzRXJyb3IuYnVpbGRFcnJvck1lc3NhZ2UgPSBmdW5jdGlvbiAobnVtT2ZQcm9jZXNzZWRSZWNvcmRzLCBudW1PZkFsbFJlY29yZHMsIGVycm9ySW5kZXgpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBcIlwiO1xuICAgICAgICBpZiAoZXJyb3JJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtZXNzYWdlID0gXCJBbiBlcnJvciBvY2N1cnJlZCBhdCByZWNvcmRzW1wiLmNvbmNhdChlcnJvckluZGV4LCBcIl0uIFwiKTtcbiAgICAgICAgfVxuICAgICAgICBtZXNzYWdlICs9IFwiXCIuY29uY2F0KG51bU9mUHJvY2Vzc2VkUmVjb3JkcywgXCIvXCIpLmNvbmNhdChudW1PZkFsbFJlY29yZHMsIFwiIHJlY29yZHMgYXJlIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHlcIik7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH07XG4gICAgcmV0dXJuIEtpbnRvbmVBbGxSZWNvcmRzRXJyb3I7XG59KEVycm9yKSk7XG5leHBvcnRzLktpbnRvbmVBbGxSZWNvcmRzRXJyb3IgPSBLaW50b25lQWxsUmVjb3Jkc0Vycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9S2ludG9uZUFsbFJlY29yZHNFcnJvci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLktpbnRvbmVSZXN0QVBJRXJyb3IgPSB2b2lkIDA7XG52YXIgS2ludG9uZVJlc3RBUElFcnJvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoS2ludG9uZVJlc3RBUElFcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBLaW50b25lUmVzdEFQSUVycm9yKGVycm9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IEtpbnRvbmVSZXN0QVBJRXJyb3IuYnVpbGRFcnJvclJlc3BvbnNlRGF0ZVdpdGhJbmRleChlcnJvciksIGRhdGEgPSBfYS5kYXRhLCBidWxrUmVxdWVzdEluZGV4ID0gX2EuYnVsa1JlcXVlc3RJbmRleDtcbiAgICAgICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkYXRhLm1lc3NhZ2UpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm5hbWUgPSBcIktpbnRvbmVSZXN0QVBJRXJyb3JcIjtcbiAgICAgICAgX3RoaXMuaWQgPSBkYXRhLmlkO1xuICAgICAgICBfdGhpcy5jb2RlID0gZGF0YS5jb2RlO1xuICAgICAgICBfdGhpcy5lcnJvcnMgPSBkYXRhLmVycm9ycztcbiAgICAgICAgX3RoaXMuc3RhdHVzID0gZXJyb3Iuc3RhdHVzO1xuICAgICAgICBfdGhpcy5idWxrUmVxdWVzdEluZGV4ID0gYnVsa1JlcXVlc3RJbmRleDtcbiAgICAgICAgX3RoaXMuaGVhZGVycyA9IGVycm9yLmhlYWRlcnM7XG4gICAgICAgIF90aGlzLm1lc3NhZ2UgPSBcIltcIi5jb25jYXQoZXJyb3Iuc3RhdHVzLCBcIl0gW1wiKS5jb25jYXQoX3RoaXMuY29kZSwgXCJdIFwiKS5jb25jYXQoX3RoaXMubWVzc2FnZSwgXCIgKFwiKS5jb25jYXQoX3RoaXMuaWQsIFwiKVwiKTtcbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRXJyb3IjQ3VzdG9tX0Vycm9yX1R5cGVzXG4gICAgICAgIC8vIE1haW50YWlucyBwcm9wZXIgc3RhY2sgdHJhY2UgZm9yIHdoZXJlIG91ciBlcnJvciB3YXMgdGhyb3duIChvbmx5IGF2YWlsYWJsZSBvbiBWOClcbiAgICAgICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShfdGhpcywgS2ludG9uZVJlc3RBUElFcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L3dpa2kvQnJlYWtpbmctQ2hhbmdlcyNleHRlbmRpbmctYnVpbHQtaW5zLWxpa2UtZXJyb3ItYXJyYXktYW5kLW1hcC1tYXktbm8tbG9uZ2VyLXdvcmtcbiAgICAgICAgLy8gU2V0IHRoZSBwcm90b3R5cGUgZXhwbGljaXRseS5cbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKF90aGlzLCBLaW50b25lUmVzdEFQSUVycm9yLnByb3RvdHlwZSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgS2ludG9uZVJlc3RBUElFcnJvci5maW5kRXJyb3JSZXNwb25zZURhdGFXaXRoSW5kZXggPSBmdW5jdGlvbiAocmVzdWx0cykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhyZXN1bHRzW2ldKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHJlc3VsdHNbaV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogZGF0YSwgYnVsa1JlcXVlc3RJbmRleDogaSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IEVycm9yKFwiTWlzc2luZyByZXNwb25zZSBkYXRhIGluIGByZXN1bHRzYC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIEtpbnRvbmUgUkVTVCBBUEkgQ2xpZW50LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIik7XG4gICAgfTtcbiAgICBLaW50b25lUmVzdEFQSUVycm9yLmJ1aWxkRXJyb3JSZXNwb25zZURhdGVXaXRoSW5kZXggPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKFwicmVzdWx0c1wiIGluIGVycm9yLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBLaW50b25lUmVzdEFQSUVycm9yLmZpbmRFcnJvclJlc3BvbnNlRGF0YVdpdGhJbmRleChlcnJvci5kYXRhLnJlc3VsdHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRhdGE6IGVycm9yLmRhdGEgfTtcbiAgICB9O1xuICAgIHJldHVybiBLaW50b25lUmVzdEFQSUVycm9yO1xufShFcnJvcikpO1xuZXhwb3J0cy5LaW50b25lUmVzdEFQSUVycm9yID0gS2ludG9uZVJlc3RBUElFcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUtpbnRvbmVSZXN0QVBJRXJyb3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9LaW50b25lQWJvcnRTZWFyY2hFcnJvclwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vS2ludG9uZUFsbFJlY29yZHNFcnJvclwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vS2ludG9uZVJlc3RBUElFcnJvclwiKSwgZXhwb3J0cyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZWNvcmRDbGllbnQgPSB2b2lkIDA7XG52YXIgZXJyb3JfMSA9IHJlcXVpcmUoXCIuLi9lcnJvclwiKTtcbnZhciBCYXNlQ2xpZW50XzEgPSByZXF1aXJlKFwiLi9CYXNlQ2xpZW50XCIpO1xudmFyIEFERF9SRUNPUkRTX0xJTUlUID0gMTAwO1xudmFyIFVQREFURV9SRUNPUkRTX0xJTUlUID0gMTAwO1xudmFyIERFTEVURV9SRUNPUkRTX0xJTUlUID0gMTAwO1xudmFyIEdFVF9SRUNPUkRTX0xJTUlUID0gNTAwO1xudmFyIFJlY29yZENsaWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUmVjb3JkQ2xpZW50LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFJlY29yZENsaWVudChjbGllbnQsIGJ1bGtSZXF1ZXN0Q2xpZW50LCBndWVzdFNwYWNlSWQpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgY2xpZW50LCBndWVzdFNwYWNlSWQpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmJ1bGtSZXF1ZXN0Q2xpZW50ID0gYnVsa1JlcXVlc3RDbGllbnQ7XG4gICAgICAgIF90aGlzLmRpZFdhcm5NYXhpbXVtT2Zmc2V0VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmdldFJlY29yZCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5hZGRSZWNvcmQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wb3N0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLnVwZGF0ZVJlY29yZCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS51cHNlcnRSZWNvcmQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcHAsIHVwZGF0ZUtleSwgcmVjb3JkLCByZWNvcmRzLCByZXZpc2lvbjtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcCA9IHBhcmFtcy5hcHAsIHVwZGF0ZUtleSA9IHBhcmFtcy51cGRhdGVLZXksIHJlY29yZCA9IHBhcmFtcy5yZWNvcmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmdldFJlY29yZHMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHA6IGFwcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnk6IFwiXCIuY29uY2F0KHVwZGF0ZUtleS5maWVsZCwgXCIgPSBcXFwiXCIpLmNvbmNhdCh1cGRhdGVLZXkudmFsdWUsIFwiXFxcIlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHMgPSAoX2Iuc2VudCgpKS5yZWNvcmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVjb3Jkcy5sZW5ndGggPiAwKSkgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWNvcmRzWzBdLiRpZC50eXBlID09PSBcIl9fSURfX1wiKSkgcmV0dXJuIFszIC8qYnJlYWsqLywgM107XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnVwZGF0ZVJlY29yZChwYXJhbXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb24gPSAoX2Iuc2VudCgpKS5yZXZpc2lvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7IGlkOiByZWNvcmRzWzBdLiRpZC52YWx1ZSwgcmV2aXNpb246IHJldmlzaW9uIH1dO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgYCRpZGAgaW4gYGdldFJlY29yZHNgIHJlc3BvbnNlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gS2ludG9uZSBSRVNUIEFQSSBDbGllbnQuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIgLypyZXR1cm4qLywgdGhpcy5hZGRSZWNvcmQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcDogYXBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZDogT2JqZWN0LmFzc2lnbih7fSwgcmVjb3JkLCAoX2EgPSB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2FbdXBkYXRlS2V5LmZpZWxkXSA9IHsgdmFsdWU6IHVwZGF0ZUtleS52YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIFRPRE86IGByZWNvcmRzYCB0eXBlIGluIHJldHVybiB0eXBlIHNob3VsZCBiZSBmaWx0ZXJlZCBieSBgZmllbGRzYC5cbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmdldFJlY29yZHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBwYXRoLCByZXNwb25zZTtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuY2xpZW50LmdldChwYXRoLCBwYXJhbXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndhcm5NYXhpbXVtT2Zmc2V0VmFsdWVJZk5lZWRlZChwYXJhbXMucXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHJlc3BvbnNlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLndhcm5NYXhpbXVtT2Zmc2V0VmFsdWVJZk5lZWRlZCA9IGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICAgIHZhciByZWdleHAgPSAvb2Zmc2V0XFxzKyhcXGQrKS9pO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHF1ZXJ5Lm1hdGNoKHJlZ2V4cCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGlkV2Fybk1heGltdW1PZmZzZXRWYWx1ZSAmJlxuICAgICAgICAgICAgICAgIHJlc3VsdCAmJlxuICAgICAgICAgICAgICAgIE51bWJlcihyZXN1bHRbMV0pID4gMTAwMDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpZFdhcm5NYXhpbXVtT2Zmc2V0VmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIldhcm5pbmc6IFRoZSBtYXhpbXVtIG9mZnNldCB2YWx1ZSB3aWxsIGJlIGxpbWl0ZWQgdG8gMTAsMDAwIGluIHRoZSBmdXR1cmUuIFBsZWFzZSB1c2UgYGNyZWF0ZUN1cnNvcigpYCBhbmQgYGdldFJlY29yZHNCeUN1cnNvcigpYCBpbnN0ZWFkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5hZGRSZWNvcmRzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcGF0aCwgX2EsIGlkcywgcmV2aXNpb25zO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5jbGllbnQucG9zdChwYXRoLCBwYXJhbXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2EgPSBfYi5zZW50KCksIGlkcyA9IF9hLmlkcywgcmV2aXNpb25zID0gX2EucmV2aXNpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzOiBpZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uczogcmV2aXNpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzOiBpZHMubWFwKGZ1bmN0aW9uIChpZCwgaSkgeyByZXR1cm4gKHsgaWQ6IGlkLCByZXZpc2lvbjogcmV2aXNpb25zW2ldIH0pOyB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLnVwZGF0ZVJlY29yZHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmRlbGV0ZVJlY29yZHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZGVsZXRlKHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmNyZWF0ZUN1cnNvciA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZHMvY3Vyc29yXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucG9zdChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5nZXRSZWNvcmRzQnlDdXJzb3IgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzL2N1cnNvclwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5kZWxldGVDdXJzb3IgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzL2N1cnNvclwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmRlbGV0ZShwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5nZXRBbGxSZWNvcmRzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgY29uZGl0aW9uLCBvcmRlckJ5LCBfYSwgd2l0aEN1cnNvciwgcmVzdCwgY29uZGl0aW9uUXVlcnksIHF1ZXJ5O1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9IHBhcmFtcy5jb25kaXRpb24sIG9yZGVyQnkgPSBwYXJhbXMub3JkZXJCeSwgX2EgPSBwYXJhbXMud2l0aEN1cnNvciwgd2l0aEN1cnNvciA9IF9hID09PSB2b2lkIDAgPyB0cnVlIDogX2EsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJjb25kaXRpb25cIiwgXCJvcmRlckJ5XCIsIFwid2l0aEN1cnNvclwiXSk7XG4gICAgICAgICAgICAgICAgaWYgKCFvcmRlckJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLmdldEFsbFJlY29yZHNXaXRoSWQoX19hc3NpZ24oX19hc3NpZ24oe30sIHJlc3QpLCB7IGNvbmRpdGlvbjogY29uZGl0aW9uIH0pKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh3aXRoQ3Vyc29yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblF1ZXJ5ID0gY29uZGl0aW9uID8gXCJcIi5jb25jYXQoY29uZGl0aW9uLCBcIiBcIikgOiBcIlwiO1xuICAgICAgICAgICAgICAgICAgICBxdWVyeSA9IFwiXCIuY29uY2F0KGNvbmRpdGlvblF1ZXJ5KS5jb25jYXQob3JkZXJCeSA/IFwib3JkZXIgYnkgXCIuY29uY2F0KG9yZGVyQnkpIDogXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLmdldEFsbFJlY29yZHNXaXRoQ3Vyc29yKF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXN0KSwgeyBxdWVyeTogcXVlcnkgfSkpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHRoaXMuZ2V0QWxsUmVjb3Jkc1dpdGhPZmZzZXQoX19hc3NpZ24oX19hc3NpZ24oe30sIHJlc3QpLCB7IG9yZGVyQnk6IG9yZGVyQnksIGNvbmRpdGlvbjogY29uZGl0aW9uIH0pKV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmdldEFsbFJlY29yZHNXaXRoSWQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBvcmlnaW5hbEZpZWxkcywgY29uZGl0aW9uLCByZXN0LCBmaWVsZHMsIGNvbmRpdGlvblF1ZXJ5LCBhbGxSZWNvcmRzLCBsYXN0SWQsIHF1ZXJ5LCByZXN1bHQsIGxhc3RSZWNvcmQ7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEZpZWxkcyA9IHBhcmFtcy5maWVsZHMsIGNvbmRpdGlvbiA9IHBhcmFtcy5jb25kaXRpb24sIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJmaWVsZHNcIiwgXCJjb25kaXRpb25cIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzID0gb3JpZ2luYWxGaWVsZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBcHBlbmQgJGlkIGlmICRpZCBkb2Vzbid0IGV4aXN0IGluIGZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkcyAmJiBmaWVsZHMubGVuZ3RoID4gMCAmJiBmaWVsZHMuaW5kZXhPZihcIiRpZFwiKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMgPSBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIGZpZWxkcywgdHJ1ZSksIFtcIiRpZFwiXSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uUXVlcnkgPSBjb25kaXRpb24gPyBcIihcIi5jb25jYXQoY29uZGl0aW9uLCBcIikgYW5kIFwiKSA6IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxSZWNvcmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0SWQgPSBcIjBcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0cnVlKSByZXR1cm4gWzMgLypicmVhayovLCAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5ID0gXCJcIi5jb25jYXQoY29uZGl0aW9uUXVlcnksIFwiJGlkID4gXCIpLmNvbmNhdChsYXN0SWQsIFwiIG9yZGVyIGJ5ICRpZCBhc2MgbGltaXQgXCIpLmNvbmNhdChHRVRfUkVDT1JEU19MSU1JVCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmdldFJlY29yZHMoX19hc3NpZ24oX19hc3NpZ24oe30sIHJlc3QpLCB7IGZpZWxkczogZmllbGRzLCBxdWVyeTogcXVlcnkgfSkpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsUmVjb3JkcyA9IGFsbFJlY29yZHMuY29uY2F0KHJlc3VsdC5yZWNvcmRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVjb3Jkcy5sZW5ndGggPCBHRVRfUkVDT1JEU19MSU1JVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFJlY29yZCA9IHJlc3VsdC5yZWNvcmRzW3Jlc3VsdC5yZWNvcmRzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RSZWNvcmQuJGlkLnR5cGUgPT09IFwiX19JRF9fXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0SWQgPSBsYXN0UmVjb3JkLiRpZC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgYCRpZGAgaW4gYGdldFJlY29yZHNgIHJlc3BvbnNlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gS2ludG9uZSBSRVNUIEFQSSBDbGllbnQuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDFdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMiAvKnJldHVybiovLCBhbGxSZWNvcmRzXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmdldEFsbFJlY29yZHNXaXRoT2Zmc2V0ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgY29uZGl0aW9uLCBvcmRlckJ5LCByZXN0LCBjb25kaXRpb25RdWVyeSwgYWxsUmVjb3Jkcywgb2Zmc2V0LCBxdWVyeSwgcmVzdWx0O1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uID0gcGFyYW1zLmNvbmRpdGlvbiwgb3JkZXJCeSA9IHBhcmFtcy5vcmRlckJ5LCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wiY29uZGl0aW9uXCIsIFwib3JkZXJCeVwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25RdWVyeSA9IGNvbmRpdGlvbiA/IFwiXCIuY29uY2F0KGNvbmRpdGlvbiwgXCIgXCIpIDogXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbFJlY29yZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHJ1ZSkgcmV0dXJuIFszIC8qYnJlYWsqLywgM107XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSA9IFwiXCIuY29uY2F0KGNvbmRpdGlvblF1ZXJ5KS5jb25jYXQob3JkZXJCeSA/IFwib3JkZXIgYnkgXCIuY29uY2F0KG9yZGVyQnksIFwiIFwiKSA6IFwiXCIsIFwibGltaXQgXCIpLmNvbmNhdChHRVRfUkVDT1JEU19MSU1JVCwgXCIgb2Zmc2V0IFwiKS5jb25jYXQob2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuZ2V0UmVjb3JkcyhfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcmVzdCksIHsgcXVlcnk6IHF1ZXJ5IH0pKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbFJlY29yZHMgPSBhbGxSZWNvcmRzLmNvbmNhdChyZXN1bHQucmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnJlY29yZHMubGVuZ3RoIDwgR0VUX1JFQ09SRFNfTElNSVQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBHRVRfUkVDT1JEU19MSU1JVDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDFdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMiAvKnJldHVybiovLCBhbGxSZWNvcmRzXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmdldEFsbFJlY29yZHNXaXRoQ3Vyc29yID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgaWQsIGFsbFJlY29yZHMsIHJlc3VsdCwgZXJyb3JfMjtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5jcmVhdGVDdXJzb3IocGFyYW1zKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gKF9hLnNlbnQoKSkuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDI7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLnRyeXMucHVzaChbMiwgNiwgLCA4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxSZWNvcmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDM7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHJ1ZSkgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmdldFJlY29yZHNCeUN1cnNvcih7IGlkOiBpZCB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbFJlY29yZHMgPSBhbGxSZWNvcmRzLmNvbmNhdChyZXN1bHQucmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCAzXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzIgLypyZXR1cm4qLywgYWxsUmVjb3Jkc107XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yXzIgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmRlbGV0ZUN1cnNvcih7IGlkOiBpZCB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yXzI7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuYWRkQWxsUmVjb3JkcyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIGlmICghcGFyYW1zLnJlY29yZHMuZXZlcnkoZnVuY3Rpb24gKHJlY29yZCkgeyByZXR1cm4gIUFycmF5LmlzQXJyYXkocmVjb3JkKSAmJiByZWNvcmQgaW5zdGFuY2VvZiBPYmplY3Q7IH0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRoZSBgcmVjb3Jkc2AgcGFyYW1ldGVyIG11c3QgYmUgYW4gYXJyYXkgb2Ygb2JqZWN0LlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHRoaXMuYWRkQWxsUmVjb3Jkc1JlY3Vyc2l2ZShwYXJhbXMsIHBhcmFtcy5yZWNvcmRzLmxlbmd0aCwgW10pXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuYWRkQWxsUmVjb3Jkc1JlY3Vyc2l2ZSA9IGZ1bmN0aW9uIChwYXJhbXMsIG51bU9mQWxsUmVjb3JkcywgcmVzdWx0cykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgQ0hVTktfTEVOR1RILCBhcHAsIHJlY29yZHMsIHJlY29yZHNDaHVuaywgbmV3UmVzdWx0cywgZV8xO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgQ0hVTktfTEVOR1RIID0gdGhpcy5idWxrUmVxdWVzdENsaWVudC5SRVFVRVNUU19MRU5HVEhfTElNSVQgKiBBRERfUkVDT1JEU19MSU1JVDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcCA9IHBhcmFtcy5hcHAsIHJlY29yZHMgPSBwYXJhbXMucmVjb3JkcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHNDaHVuayA9IHJlY29yZHMuc2xpY2UoMCwgQ0hVTktfTEVOR1RIKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmRzQ2h1bmsubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHsgcmVjb3JkczogcmVzdWx0cyB9XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFsxLCAzLCAsIDRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuYWRkQWxsUmVjb3Jkc1dpdGhCdWxrUmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcDogYXBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzOiByZWNvcmRzQ2h1bmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdSZXN1bHRzID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGVfMSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcl8xLktpbnRvbmVBbGxSZWNvcmRzRXJyb3IoeyByZWNvcmRzOiByZXN1bHRzIH0sIHJlY29yZHMsIG51bU9mQWxsUmVjb3JkcywgZV8xLCBBRERfUkVDT1JEU19MSU1JVCk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHRoaXMuYWRkQWxsUmVjb3Jkc1JlY3Vyc2l2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwOiBhcHAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkczogcmVjb3Jkcy5zbGljZShDSFVOS19MRU5HVEgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgbnVtT2ZBbGxSZWNvcmRzLCByZXN1bHRzLmNvbmNhdChuZXdSZXN1bHRzKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuYWRkQWxsUmVjb3Jkc1dpdGhCdWxrUmVxdWVzdCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHNlcGFyYXRlZFJlY29yZHMsIHJlcXVlc3RzLCByZXN1bHRzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGVkUmVjb3JkcyA9IHRoaXMuc2VwYXJhdGVBcnJheVJlY3Vyc2l2ZShBRERfUkVDT1JEU19MSU1JVCwgW10sIHBhcmFtcy5yZWNvcmRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzID0gc2VwYXJhdGVkUmVjb3Jkcy5tYXAoZnVuY3Rpb24gKHJlY29yZHMpIHsgcmV0dXJuICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwOiBwYXJhbXMuYXBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzOiByZWNvcmRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmJ1bGtSZXF1ZXN0Q2xpZW50LnNlbmQoeyByZXF1ZXN0czogcmVxdWVzdHMgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gKF9hLnNlbnQoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVzdWx0cztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWRzID0gcmVzdWx0LmlkcywgcmV2aXNpb25zID0gcmVzdWx0LnJldmlzaW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkcy5tYXAoZnVuY3Rpb24gKGlkLCBpKSB7IHJldHVybiAoeyBpZDogaWQsIHJldmlzaW9uOiByZXZpc2lvbnNbaV0gfSk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcmVjb3Jkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChyZWNvcmRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBbXSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUudXBkYXRlQWxsUmVjb3JkcyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLnVwZGF0ZUFsbFJlY29yZHNSZWN1cnNpdmUocGFyYW1zLCBwYXJhbXMucmVjb3Jkcy5sZW5ndGgsIFtdKV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLnVwZGF0ZUFsbFJlY29yZHNSZWN1cnNpdmUgPSBmdW5jdGlvbiAocGFyYW1zLCBudW1PZkFsbFJlY29yZHMsIHJlc3VsdHMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIENIVU5LX0xFTkdUSCwgYXBwLCByZWNvcmRzLCByZWNvcmRzQ2h1bmssIG5ld1Jlc3VsdHMsIGVfMjtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIENIVU5LX0xFTkdUSCA9IHRoaXMuYnVsa1JlcXVlc3RDbGllbnQuUkVRVUVTVFNfTEVOR1RIX0xJTUlUICogVVBEQVRFX1JFQ09SRFNfTElNSVQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHAgPSBwYXJhbXMuYXBwLCByZWNvcmRzID0gcGFyYW1zLnJlY29yZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzQ2h1bmsgPSByZWNvcmRzLnNsaWNlKDAsIENIVU5LX0xFTkdUSCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3Jkc0NodW5rLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7IHJlY29yZHM6IHJlc3VsdHMgfV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLnRyeXMucHVzaChbMSwgMywgLCA0XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnVwZGF0ZUFsbFJlY29yZHNXaXRoQnVsa1JlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHA6IGFwcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkczogcmVjb3Jkc0NodW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3UmVzdWx0cyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBlXzIgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JfMS5LaW50b25lQWxsUmVjb3Jkc0Vycm9yKHsgcmVjb3JkczogcmVzdWx0cyB9LCByZWNvcmRzLCBudW1PZkFsbFJlY29yZHMsIGVfMiwgVVBEQVRFX1JFQ09SRFNfTElNSVQpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLnVwZGF0ZUFsbFJlY29yZHNSZWN1cnNpdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcDogYXBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHM6IHJlY29yZHMuc2xpY2UoQ0hVTktfTEVOR1RIKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG51bU9mQWxsUmVjb3JkcywgcmVzdWx0cy5jb25jYXQobmV3UmVzdWx0cykpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLnVwZGF0ZUFsbFJlY29yZHNXaXRoQnVsa1JlcXVlc3QgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBzZXBhcmF0ZWRSZWNvcmRzLCByZXF1ZXN0cywgcmVzdWx0cztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRlZFJlY29yZHMgPSB0aGlzLnNlcGFyYXRlQXJyYXlSZWN1cnNpdmUoVVBEQVRFX1JFQ09SRFNfTElNSVQsIFtdLCBwYXJhbXMucmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyA9IHNlcGFyYXRlZFJlY29yZHMubWFwKGZ1bmN0aW9uIChyZWNvcmRzKSB7IHJldHVybiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQVVRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwOiBwYXJhbXMuYXBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzOiByZWNvcmRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmJ1bGtSZXF1ZXN0Q2xpZW50LnNlbmQoeyByZXF1ZXN0czogcmVxdWVzdHMgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gKF9hLnNlbnQoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVzdWx0cztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0LnJlY29yZHM7IH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcmVjb3Jkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChyZWNvcmRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBbXSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuZGVsZXRlQWxsUmVjb3JkcyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQWxsUmVjb3Jkc1JlY3Vyc2l2ZShwYXJhbXMsIHBhcmFtcy5yZWNvcmRzLmxlbmd0aCk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmRlbGV0ZUFsbFJlY29yZHNSZWN1cnNpdmUgPSBmdW5jdGlvbiAocGFyYW1zLCBudW1PZkFsbFJlY29yZHMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIENIVU5LX0xFTkdUSCwgYXBwLCByZWNvcmRzLCByZWNvcmRzQ2h1bmssIGVfMztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIENIVU5LX0xFTkdUSCA9IHRoaXMuYnVsa1JlcXVlc3RDbGllbnQuUkVRVUVTVFNfTEVOR1RIX0xJTUlUICogREVMRVRFX1JFQ09SRFNfTElNSVQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHAgPSBwYXJhbXMuYXBwLCByZWNvcmRzID0gcGFyYW1zLnJlY29yZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzQ2h1bmsgPSByZWNvcmRzLnNsaWNlKDAsIENIVU5LX0xFTkdUSCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3Jkc0NodW5rLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7fV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLnRyeXMucHVzaChbMSwgMywgLCA0XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmRlbGV0ZUFsbFJlY29yZHNXaXRoQnVsa1JlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHA6IGFwcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkczogcmVjb3Jkc0NodW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGVfMyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcl8xLktpbnRvbmVBbGxSZWNvcmRzRXJyb3Ioe30sIHJlY29yZHMsIG51bU9mQWxsUmVjb3JkcywgZV8zLCBERUxFVEVfUkVDT1JEU19MSU1JVCk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHRoaXMuZGVsZXRlQWxsUmVjb3Jkc1JlY3Vyc2l2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwOiBhcHAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkczogcmVjb3Jkcy5zbGljZShDSFVOS19MRU5HVEgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgbnVtT2ZBbGxSZWNvcmRzKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5kZWxldGVBbGxSZWNvcmRzV2l0aEJ1bGtSZXF1ZXN0ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgc2VwYXJhdGVkUmVjb3JkcywgcmVxdWVzdHM7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZWRSZWNvcmRzID0gdGhpcy5zZXBhcmF0ZUFycmF5UmVjdXJzaXZlKERFTEVURV9SRUNPUkRTX0xJTUlULCBbXSwgcGFyYW1zLnJlY29yZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMgPSBzZXBhcmF0ZWRSZWNvcmRzLm1hcChmdW5jdGlvbiAocmVjb3JkcykgeyByZXR1cm4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiREVMRVRFXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcDogcGFyYW1zLmFwcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzOiByZWNvcmRzLm1hcChmdW5jdGlvbiAocmVjb3JkKSB7IHJldHVybiByZWNvcmQuaWQ7IH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbnM6IHJlY29yZHMubWFwKGZ1bmN0aW9uIChyZWNvcmQpIHsgcmV0dXJuIHJlY29yZC5yZXZpc2lvbjsgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuYnVsa1JlcXVlc3RDbGllbnQuc2VuZCh7IHJlcXVlc3RzOiByZXF1ZXN0cyB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLnNlcGFyYXRlQXJyYXlSZWN1cnNpdmUgPSBmdW5jdGlvbiAoc2l6ZSwgc2VwYXJhdGVkLCBhcnJheSkge1xuICAgICAgICB2YXIgY2h1bmsgPSBhcnJheS5zbGljZSgwLCBzaXplKTtcbiAgICAgICAgaWYgKGNodW5rLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHNlcGFyYXRlZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zZXBhcmF0ZUFycmF5UmVjdXJzaXZlKHNpemUsIF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgc2VwYXJhdGVkLCB0cnVlKSwgW2NodW5rXSwgZmFsc2UpLCBhcnJheS5zbGljZShzaXplKSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmFkZFJlY29yZENvbW1lbnQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmQvY29tbWVudFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnBvc3QocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuZGVsZXRlUmVjb3JkQ29tbWVudCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZC9jb21tZW50XCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZGVsZXRlKHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmdldFJlY29yZENvbW1lbnRzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3JkL2NvbW1lbnRzXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLnVwZGF0ZVJlY29yZEFzc2lnbmVlcyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZC9hc3NpZ25lZXNcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUudXBkYXRlUmVjb3JkU3RhdHVzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3JkL3N0YXR1c1wiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS51cGRhdGVSZWNvcmRzU3RhdHVzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkcy9zdGF0dXNcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIHJldHVybiBSZWNvcmRDbGllbnQ7XG59KEJhc2VDbGllbnRfMS5CYXNlQ2xpZW50KSk7XG5leHBvcnRzLlJlY29yZENsaWVudCA9IFJlY29yZENsaWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlY29yZENsaWVudC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNwYWNlQ2xpZW50ID0gdm9pZCAwO1xudmFyIEJhc2VDbGllbnRfMSA9IHJlcXVpcmUoXCIuL0Jhc2VDbGllbnRcIik7XG52YXIgU3BhY2VDbGllbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNwYWNlQ2xpZW50LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNwYWNlQ2xpZW50KCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIFNwYWNlQ2xpZW50LnByb3RvdHlwZS5nZXRTcGFjZSA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInNwYWNlXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBTcGFjZUNsaWVudC5wcm90b3R5cGUuZGVsZXRlU3BhY2UgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJzcGFjZVwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmRlbGV0ZShwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgU3BhY2VDbGllbnQucHJvdG90eXBlLnVwZGF0ZVNwYWNlQm9keSA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInNwYWNlL2JvZHlcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFNwYWNlQ2xpZW50LnByb3RvdHlwZS5nZXRTcGFjZU1lbWJlcnMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJzcGFjZS9tZW1iZXJzXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBTcGFjZUNsaWVudC5wcm90b3R5cGUudXBkYXRlU3BhY2VNZW1iZXJzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwic3BhY2UvbWVtYmVyc1wiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgU3BhY2VDbGllbnQucHJvdG90eXBlLnVwZGF0ZVRocmVhZCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInNwYWNlL3RocmVhZFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgU3BhY2VDbGllbnQucHJvdG90eXBlLmFkZFRocmVhZENvbW1lbnQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJzcGFjZS90aHJlYWQvY29tbWVudFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnBvc3QocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFNwYWNlQ2xpZW50LnByb3RvdHlwZS5hZGRHdWVzdHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGgoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImd1ZXN0c1wiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnBvc3QocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFNwYWNlQ2xpZW50LnByb3RvdHlwZS5kZWxldGVHdWVzdHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGgoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImd1ZXN0c1wiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmRlbGV0ZShwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgU3BhY2VDbGllbnQucHJvdG90eXBlLnVwZGF0ZVNwYWNlR3Vlc3RzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwic3BhY2UvZ3Vlc3RzXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBTcGFjZUNsaWVudC5wcm90b3R5cGUuYWRkU3BhY2VGcm9tVGVtcGxhdGUgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGgoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInRlbXBsYXRlL3NwYWNlXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucG9zdChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgcmV0dXJuIFNwYWNlQ2xpZW50O1xufShCYXNlQ2xpZW50XzEuQmFzZUNsaWVudCkpO1xuZXhwb3J0cy5TcGFjZUNsaWVudCA9IFNwYWNlQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3BhY2VDbGllbnQuanMubWFwIiwiLyogZXNsaW50LWVudiBicm93c2VyICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnID8gc2VsZi5Gb3JtRGF0YSA6IHdpbmRvdy5Gb3JtRGF0YTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRmlsZUNsaWVudCA9IHZvaWQgMDtcbnZhciBmb3JtX2RhdGFfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiZm9ybS1kYXRhXCIpKTtcbnZhciBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4uL3BsYXRmb3JtXCIpO1xudmFyIFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcl8xID0gcmVxdWlyZShcIi4uL3BsYXRmb3JtL1Vuc3VwcG9ydGVkUGxhdGZvcm1FcnJvclwiKTtcbnZhciBCYXNlQ2xpZW50XzEgPSByZXF1aXJlKFwiLi9CYXNlQ2xpZW50XCIpO1xudmFyIEZpbGVDbGllbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEZpbGVDbGllbnQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRmlsZUNsaWVudCgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBGaWxlQ2xpZW50LnByb3RvdHlwZS51cGxvYWRGaWxlID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcGF0aCwgZm9ybURhdGEsIF9hLCBuYW1lXzEsIGRhdGEsIGVfMSwgX2IsIG5hbWVfMiwgZGF0YSwgZmlsZURhdGE7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9jKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYy5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiZmlsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YSA9IG5ldyBmb3JtX2RhdGFfMS5kZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShcInBhdGhcIiBpbiBwYXJhbXMuZmlsZSkpIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2MubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYy50cnlzLnB1c2goWzEsIDMsICwgNF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgcGxhdGZvcm1fMS5wbGF0Zm9ybURlcHMucmVhZEZpbGVGcm9tUGF0aChwYXJhbXMuZmlsZS5wYXRoKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hID0gX2Muc2VudCgpLCBuYW1lXzEgPSBfYS5uYW1lLCBkYXRhID0gX2EuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcImZpbGVcIiwgZGF0YSwgbmFtZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBlXzEgPSBfYy5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZV8xIGluc3RhbmNlb2YgVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yXzEuVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXBsb2FkRmlsZSBkb2Vzbid0IGFsbG93IHRvIGFjY2VwdCBhIGZpbGUgcGF0aCBpbiBcIi5jb25jYXQoZV8xLnBsYXRmb3JtLCBcIiBlbnZpcm9ubWVudC5cIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZV8xO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMyAvKmJyZWFrKi8sIDZdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYiA9IHBhcmFtcy5maWxlLCBuYW1lXzIgPSBfYi5uYW1lLCBkYXRhID0gX2IuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVEYXRhID0gcGxhdGZvcm1fMS5wbGF0Zm9ybURlcHMuYnVpbGRGb3JtRGF0YVZhbHVlKGRhdGEsIG5hbWVfMik7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXCJmaWxlXCIsIGZpbGVEYXRhLCBuYW1lXzIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2MubGFiZWwgPSA2O1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6IHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLmNsaWVudC5wb3N0RGF0YShwYXRoLCBmb3JtRGF0YSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEZpbGVDbGllbnQucHJvdG90eXBlLmRvd25sb2FkRmlsZSA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImZpbGVcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXREYXRhKHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICByZXR1cm4gRmlsZUNsaWVudDtcbn0oQmFzZUNsaWVudF8xLkJhc2VDbGllbnQpKTtcbmV4cG9ydHMuRmlsZUNsaWVudCA9IEZpbGVDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GaWxlQ2xpZW50LmpzLm1hcCIsIi8vIEF4aW9zIHYxLjcuMiBDb3B5cmlnaHQgKGMpIDIwMjQgTWF0dCBaYWJyaXNraWUgYW5kIGNvbnRyaWJ1dG9yc1xuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG5jb25zdCB7dG9TdHJpbmd9ID0gT2JqZWN0LnByb3RvdHlwZTtcbmNvbnN0IHtnZXRQcm90b3R5cGVPZn0gPSBPYmplY3Q7XG5cbmNvbnN0IGtpbmRPZiA9IChjYWNoZSA9PiB0aGluZyA9PiB7XG4gICAgY29uc3Qgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGluZyk7XG4gICAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpO1xufSkoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmNvbnN0IGtpbmRPZlRlc3QgPSAodHlwZSkgPT4ge1xuICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKHRoaW5nKSA9PiBraW5kT2YodGhpbmcpID09PSB0eXBlXG59O1xuXG5jb25zdCB0eXBlT2ZUZXN0ID0gdHlwZSA9PiB0aGluZyA9PiB0eXBlb2YgdGhpbmcgPT09IHR5cGU7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCB7aXNBcnJheX0gPSBBcnJheTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VuZGVmaW5lZCA9IHR5cGVPZlRlc3QoJ3VuZGVmaW5lZCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIGlzRnVuY3Rpb24odmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSAmJiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdCgnQXJyYXlCdWZmZXInKTtcblxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIGxldCByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKGlzQXJyYXlCdWZmZXIodmFsLmJ1ZmZlcikpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJpbmcgPSB0eXBlT2ZUZXN0KCdzdHJpbmcnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Z1bmN0aW9uID0gdHlwZU9mVGVzdCgnZnVuY3Rpb24nKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc051bWJlciA9IHR5cGVPZlRlc3QoJ251bWJlcicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgIT09IG51bGwgJiYgdHlwZW9mIHRoaW5nID09PSAnb2JqZWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJvb2xlYW5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJvb2xlYW4sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jvb2xlYW4gPSB0aGluZyA9PiB0aGluZyA9PT0gdHJ1ZSB8fCB0aGluZyA9PT0gZmFsc2U7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNQbGFpbk9iamVjdCA9ICh2YWwpID0+IHtcbiAgaWYgKGtpbmRPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiAocHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gbnVsbCkgJiYgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsKSAmJiAhKFN5bWJvbC5pdGVyYXRvciBpbiB2YWwpO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQmxvYiA9IGtpbmRPZlRlc3QoJ0Jsb2InKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGVMaXN0ID0ga2luZE9mVGVzdCgnRmlsZUxpc3QnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmVhbSA9ICh2YWwpID0+IGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRm9ybURhdGEgPSAodGhpbmcpID0+IHtcbiAgbGV0IGtpbmQ7XG4gIHJldHVybiB0aGluZyAmJiAoXG4gICAgKHR5cGVvZiBGb3JtRGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGluZyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB8fCAoXG4gICAgICBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgKFxuICAgICAgICAoa2luZCA9IGtpbmRPZih0aGluZykpID09PSAnZm9ybWRhdGEnIHx8XG4gICAgICAgIC8vIGRldGVjdCBmb3JtLWRhdGEgaW5zdGFuY2VcbiAgICAgICAgKGtpbmQgPT09ICdvYmplY3QnICYmIGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXScpXG4gICAgICApXG4gICAgKVxuICApXG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuY29uc3QgW2lzUmVhZGFibGVTdHJlYW0sIGlzUmVxdWVzdCwgaXNSZXNwb25zZSwgaXNIZWFkZXJzXSA9IFsnUmVhZGFibGVTdHJlYW0nLCAnUmVxdWVzdCcsICdSZXNwb25zZScsICdIZWFkZXJzJ10ubWFwKGtpbmRPZlRlc3QpO1xuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5jb25zdCB0cmltID0gKHN0cikgPT4gc3RyLnRyaW0gP1xuICBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCAnJyk7XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzID0gZmFsc2VdXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4sIHthbGxPd25LZXlzID0gZmFsc2V9ID0ge30pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgaTtcbiAgbGV0IGw7XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGNvbnN0IGtleXMgPSBhbGxPd25LZXlzID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKSA6IE9iamVjdC5rZXlzKG9iaik7XG4gICAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGtleTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEtleShvYmosIGtleSkge1xuICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIGxldCBfa2V5O1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIF9rZXkgPSBrZXlzW2ldO1xuICAgIGlmIChrZXkgPT09IF9rZXkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgcmV0dXJuIF9rZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBfZ2xvYmFsID0gKCgpID0+IHtcbiAgLyplc2xpbnQgbm8tdW5kZWY6MCovXG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGdsb2JhbFRoaXM7XG4gIHJldHVybiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBnbG9iYWwpXG59KSgpO1xuXG5jb25zdCBpc0NvbnRleHREZWZpbmVkID0gKGNvbnRleHQpID0+ICFpc1VuZGVmaW5lZChjb250ZXh0KSAmJiBjb250ZXh0ICE9PSBfZ2xvYmFsO1xuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIGNvbnN0IHtjYXNlbGVzc30gPSBpc0NvbnRleHREZWZpbmVkKHRoaXMpICYmIHRoaXMgfHwge307XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBjb25zdCBhc3NpZ25WYWx1ZSA9ICh2YWwsIGtleSkgPT4ge1xuICAgIGNvbnN0IHRhcmdldEtleSA9IGNhc2VsZXNzICYmIGZpbmRLZXkocmVzdWx0LCBrZXkpIHx8IGtleTtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRbdGFyZ2V0S2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHJlc3VsdFt0YXJnZXRLZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbDtcbiAgICB9XG4gIH07XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgYXJndW1lbnRzW2ldICYmIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXNdXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmNvbnN0IGV4dGVuZCA9IChhLCBiLCB0aGlzQXJnLCB7YWxsT3duS2V5c309IHt9KSA9PiB7XG4gIGZvckVhY2goYiwgKHZhbCwga2V5KSA9PiB7XG4gICAgaWYgKHRoaXNBcmcgJiYgaXNGdW5jdGlvbih2YWwpKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0sIHthbGxPd25LZXlzfSk7XG4gIHJldHVybiBhO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuY29uc3Qgc3RyaXBCT00gPSAoY29udGVudCkgPT4ge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn07XG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDb25zdHJ1Y3RvclxuICogQHBhcmFtIHtvYmplY3R9IFtwcm9wc11cbiAqIEBwYXJhbSB7b2JqZWN0fSBbZGVzY3JpcHRvcnNdXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGluaGVyaXRzID0gKGNvbnN0cnVjdG9yLCBzdXBlckNvbnN0cnVjdG9yLCBwcm9wcywgZGVzY3JpcHRvcnMpID0+IHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSwgZGVzY3JpcHRvcnMpO1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdG9yLCAnc3VwZXInLCB7XG4gICAgdmFsdWU6IHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlXG4gIH0pO1xuICBwcm9wcyAmJiBPYmplY3QuYXNzaWduKGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvcHMpO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlIG9iamVjdCB3aXRoIGRlZXAgcHJvdG90eXBlIGNoYWluIHRvIGEgZmxhdCBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2VPYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IFtkZXN0T2JqXVxuICogQHBhcmFtIHtGdW5jdGlvbnxCb29sZWFufSBbZmlsdGVyXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BGaWx0ZXJdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuY29uc3QgdG9GbGF0T2JqZWN0ID0gKHNvdXJjZU9iaiwgZGVzdE9iaiwgZmlsdGVyLCBwcm9wRmlsdGVyKSA9PiB7XG4gIGxldCBwcm9wcztcbiAgbGV0IGk7XG4gIGxldCBwcm9wO1xuICBjb25zdCBtZXJnZWQgPSB7fTtcblxuICBkZXN0T2JqID0gZGVzdE9iaiB8fCB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIGlmIChzb3VyY2VPYmogPT0gbnVsbCkgcmV0dXJuIGRlc3RPYmo7XG5cbiAgZG8ge1xuICAgIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlT2JqKTtcbiAgICBpID0gcHJvcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICBwcm9wID0gcHJvcHNbaV07XG4gICAgICBpZiAoKCFwcm9wRmlsdGVyIHx8IHByb3BGaWx0ZXIocHJvcCwgc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgIW1lcmdlZFtwcm9wXSkge1xuICAgICAgICBkZXN0T2JqW3Byb3BdID0gc291cmNlT2JqW3Byb3BdO1xuICAgICAgICBtZXJnZWRbcHJvcF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VPYmogPSBmaWx0ZXIgIT09IGZhbHNlICYmIGdldFByb3RvdHlwZU9mKHNvdXJjZU9iaik7XG4gIH0gd2hpbGUgKHNvdXJjZU9iaiAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgc291cmNlT2JqICE9PSBPYmplY3QucHJvdG90eXBlKTtcblxuICByZXR1cm4gZGVzdE9iajtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBlbmRzV2l0aCA9IChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pID0+IHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICBjb25zdCBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIG5ldyBhcnJheSBmcm9tIGFycmF5IGxpa2Ugb2JqZWN0IG9yIG51bGwgaWYgZmFpbGVkXG4gKlxuICogQHBhcmFtIHsqfSBbdGhpbmddXG4gKlxuICogQHJldHVybnMgez9BcnJheX1cbiAqL1xuY29uc3QgdG9BcnJheSA9ICh0aGluZykgPT4ge1xuICBpZiAoIXRoaW5nKSByZXR1cm4gbnVsbDtcbiAgaWYgKGlzQXJyYXkodGhpbmcpKSByZXR1cm4gdGhpbmc7XG4gIGxldCBpID0gdGhpbmcubGVuZ3RoO1xuICBpZiAoIWlzTnVtYmVyKGkpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYXJyID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGFycltpXSA9IHRoaW5nW2ldO1xuICB9XG4gIHJldHVybiBhcnI7XG59O1xuXG4vKipcbiAqIENoZWNraW5nIGlmIHRoZSBVaW50OEFycmF5IGV4aXN0cyBhbmQgaWYgaXQgZG9lcywgaXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIHRoZVxuICogdGhpbmcgcGFzc2VkIGluIGlzIGFuIGluc3RhbmNlIG9mIFVpbnQ4QXJyYXlcbiAqXG4gKiBAcGFyYW0ge1R5cGVkQXJyYXl9XG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuY29uc3QgaXNUeXBlZEFycmF5ID0gKFR5cGVkQXJyYXkgPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gdGhpbmcgPT4ge1xuICAgIHJldHVybiBUeXBlZEFycmF5ICYmIHRoaW5nIGluc3RhbmNlb2YgVHlwZWRBcnJheTtcbiAgfTtcbn0pKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBnZXRQcm90b3R5cGVPZihVaW50OEFycmF5KSk7XG5cbi8qKlxuICogRm9yIGVhY2ggZW50cnkgaW4gdGhlIG9iamVjdCwgY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB0aGUga2V5IGFuZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgZm9yRWFjaEVudHJ5ID0gKG9iaiwgZm4pID0+IHtcbiAgY29uc3QgZ2VuZXJhdG9yID0gb2JqICYmIG9ialtTeW1ib2wuaXRlcmF0b3JdO1xuXG4gIGNvbnN0IGl0ZXJhdG9yID0gZ2VuZXJhdG9yLmNhbGwob2JqKTtcblxuICBsZXQgcmVzdWx0O1xuXG4gIHdoaWxlICgocmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpKSAmJiAhcmVzdWx0LmRvbmUpIHtcbiAgICBjb25zdCBwYWlyID0gcmVzdWx0LnZhbHVlO1xuICAgIGZuLmNhbGwob2JqLCBwYWlyWzBdLCBwYWlyWzFdKTtcbiAgfVxufTtcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgYSBzdHJpbmcsIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgbWF0Y2hlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdFeHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBzZWFyY2guXG4gKlxuICogQHJldHVybnMge0FycmF5PGJvb2xlYW4+fVxuICovXG5jb25zdCBtYXRjaEFsbCA9IChyZWdFeHAsIHN0cikgPT4ge1xuICBsZXQgbWF0Y2hlcztcbiAgY29uc3QgYXJyID0gW107XG5cbiAgd2hpbGUgKChtYXRjaGVzID0gcmVnRXhwLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaChtYXRjaGVzKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59O1xuXG4vKiBDaGVja2luZyBpZiB0aGUga2luZE9mVGVzdCBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYW4gSFRNTEZvcm1FbGVtZW50LiAqL1xuY29uc3QgaXNIVE1MRm9ybSA9IGtpbmRPZlRlc3QoJ0hUTUxGb3JtRWxlbWVudCcpO1xuXG5jb25zdCB0b0NhbWVsQ2FzZSA9IHN0ciA9PiB7XG4gIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLFxuICAgIGZ1bmN0aW9uIHJlcGxhY2VyKG0sIHAxLCBwMikge1xuICAgICAgcmV0dXJuIHAxLnRvVXBwZXJDYXNlKCkgKyBwMjtcbiAgICB9XG4gICk7XG59O1xuXG4vKiBDcmVhdGluZyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBjaGVjayBpZiBhbiBvYmplY3QgaGFzIGEgcHJvcGVydHkuICovXG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9ICgoe2hhc093blByb3BlcnR5fSkgPT4gKG9iaiwgcHJvcCkgPT4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKShPYmplY3QucHJvdG90eXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUmVnRXhwID0ga2luZE9mVGVzdCgnUmVnRXhwJyk7XG5cbmNvbnN0IHJlZHVjZURlc2NyaXB0b3JzID0gKG9iaiwgcmVkdWNlcikgPT4ge1xuICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iaik7XG4gIGNvbnN0IHJlZHVjZWREZXNjcmlwdG9ycyA9IHt9O1xuXG4gIGZvckVhY2goZGVzY3JpcHRvcnMsIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgbGV0IHJldDtcbiAgICBpZiAoKHJldCA9IHJlZHVjZXIoZGVzY3JpcHRvciwgbmFtZSwgb2JqKSkgIT09IGZhbHNlKSB7XG4gICAgICByZWR1Y2VkRGVzY3JpcHRvcnNbbmFtZV0gPSByZXQgfHwgZGVzY3JpcHRvcjtcbiAgICB9XG4gIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iaiwgcmVkdWNlZERlc2NyaXB0b3JzKTtcbn07XG5cbi8qKlxuICogTWFrZXMgYWxsIG1ldGhvZHMgcmVhZC1vbmx5XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKi9cblxuY29uc3QgZnJlZXplTWV0aG9kcyA9IChvYmopID0+IHtcbiAgcmVkdWNlRGVzY3JpcHRvcnMob2JqLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIC8vIHNraXAgcmVzdHJpY3RlZCBwcm9wcyBpbiBzdHJpY3QgbW9kZVxuICAgIGlmIChpc0Z1bmN0aW9uKG9iaikgJiYgWydhcmd1bWVudHMnLCAnY2FsbGVyJywgJ2NhbGxlZSddLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBvYmpbbmFtZV07XG5cbiAgICBpZiAoIWlzRnVuY3Rpb24odmFsdWUpKSByZXR1cm47XG5cbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBmYWxzZTtcblxuICAgIGlmICgnd3JpdGFibGUnIGluIGRlc2NyaXB0b3IpIHtcbiAgICAgIGRlc2NyaXB0b3Iud3JpdGFibGUgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICBkZXNjcmlwdG9yLnNldCA9ICgpID0+IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0NhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kIFxcJycgKyBuYW1lICsgJ1xcJycpO1xuICAgICAgfTtcbiAgICB9XG4gIH0pO1xufTtcblxuY29uc3QgdG9PYmplY3RTZXQgPSAoYXJyYXlPclN0cmluZywgZGVsaW1pdGVyKSA9PiB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuXG4gIGNvbnN0IGRlZmluZSA9IChhcnIpID0+IHtcbiAgICBhcnIuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICBvYmpbdmFsdWVdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfTtcblxuICBpc0FycmF5KGFycmF5T3JTdHJpbmcpID8gZGVmaW5lKGFycmF5T3JTdHJpbmcpIDogZGVmaW5lKFN0cmluZyhhcnJheU9yU3RyaW5nKS5zcGxpdChkZWxpbWl0ZXIpKTtcblxuICByZXR1cm4gb2JqO1xufTtcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5jb25zdCB0b0Zpbml0ZU51bWJlciA9ICh2YWx1ZSwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSA9ICt2YWx1ZSkgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbn07XG5cbmNvbnN0IEFMUEhBID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JztcblxuY29uc3QgRElHSVQgPSAnMDEyMzQ1Njc4OSc7XG5cbmNvbnN0IEFMUEhBQkVUID0ge1xuICBESUdJVCxcbiAgQUxQSEEsXG4gIEFMUEhBX0RJR0lUOiBBTFBIQSArIEFMUEhBLnRvVXBwZXJDYXNlKCkgKyBESUdJVFxufTtcblxuY29uc3QgZ2VuZXJhdGVTdHJpbmcgPSAoc2l6ZSA9IDE2LCBhbHBoYWJldCA9IEFMUEhBQkVULkFMUEhBX0RJR0lUKSA9PiB7XG4gIGxldCBzdHIgPSAnJztcbiAgY29uc3Qge2xlbmd0aH0gPSBhbHBoYWJldDtcbiAgd2hpbGUgKHNpemUtLSkge1xuICAgIHN0ciArPSBhbHBoYWJldFtNYXRoLnJhbmRvbSgpICogbGVuZ3RofDBdO1xuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn07XG5cbi8qKlxuICogSWYgdGhlIHRoaW5nIGlzIGEgRm9ybURhdGEgb2JqZWN0LCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHRoaW5nIC0gVGhlIHRoaW5nIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1NwZWNDb21wbGlhbnRGb3JtKHRoaW5nKSB7XG4gIHJldHVybiAhISh0aGluZyAmJiBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgdGhpbmdbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJyAmJiB0aGluZ1tTeW1ib2wuaXRlcmF0b3JdKTtcbn1cblxuY29uc3QgdG9KU09OT2JqZWN0ID0gKG9iaikgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBBcnJheSgxMCk7XG5cbiAgY29uc3QgdmlzaXQgPSAoc291cmNlLCBpKSA9PiB7XG5cbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2Yoc291cmNlKSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYoISgndG9KU09OJyBpbiBzb3VyY2UpKSB7XG4gICAgICAgIHN0YWNrW2ldID0gc291cmNlO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBpc0FycmF5KHNvdXJjZSkgPyBbXSA6IHt9O1xuXG4gICAgICAgIGZvckVhY2goc291cmNlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZHVjZWRWYWx1ZSA9IHZpc2l0KHZhbHVlLCBpICsgMSk7XG4gICAgICAgICAgIWlzVW5kZWZpbmVkKHJlZHVjZWRWYWx1ZSkgJiYgKHRhcmdldFtrZXldID0gcmVkdWNlZFZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RhY2tbaV0gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlO1xuICB9O1xuXG4gIHJldHVybiB2aXNpdChvYmosIDApO1xufTtcblxuY29uc3QgaXNBc3luY0ZuID0ga2luZE9mVGVzdCgnQXN5bmNGdW5jdGlvbicpO1xuXG5jb25zdCBpc1RoZW5hYmxlID0gKHRoaW5nKSA9PlxuICB0aGluZyAmJiAoaXNPYmplY3QodGhpbmcpIHx8IGlzRnVuY3Rpb24odGhpbmcpKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRoZW4pICYmIGlzRnVuY3Rpb24odGhpbmcuY2F0Y2gpO1xuXG52YXIgdXRpbHMkMSA9IHtcbiAgaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXIsXG4gIGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZyxcbiAgaXNOdW1iZXIsXG4gIGlzQm9vbGVhbixcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzUmVxdWVzdCxcbiAgaXNSZXNwb25zZSxcbiAgaXNIZWFkZXJzLFxuICBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlLFxuICBpc0ZpbGUsXG4gIGlzQmxvYixcbiAgaXNSZWdFeHAsXG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNUeXBlZEFycmF5LFxuICBpc0ZpbGVMaXN0LFxuICBmb3JFYWNoLFxuICBtZXJnZSxcbiAgZXh0ZW5kLFxuICB0cmltLFxuICBzdHJpcEJPTSxcbiAgaW5oZXJpdHMsXG4gIHRvRmxhdE9iamVjdCxcbiAga2luZE9mLFxuICBraW5kT2ZUZXN0LFxuICBlbmRzV2l0aCxcbiAgdG9BcnJheSxcbiAgZm9yRWFjaEVudHJ5LFxuICBtYXRjaEFsbCxcbiAgaXNIVE1MRm9ybSxcbiAgaGFzT3duUHJvcGVydHksXG4gIGhhc093blByb3A6IGhhc093blByb3BlcnR5LCAvLyBhbiBhbGlhcyB0byBhdm9pZCBFU0xpbnQgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIGRldGVjdGlvblxuICByZWR1Y2VEZXNjcmlwdG9ycyxcbiAgZnJlZXplTWV0aG9kcyxcbiAgdG9PYmplY3RTZXQsXG4gIHRvQ2FtZWxDYXNlLFxuICBub29wLFxuICB0b0Zpbml0ZU51bWJlcixcbiAgZmluZEtleSxcbiAgZ2xvYmFsOiBfZ2xvYmFsLFxuICBpc0NvbnRleHREZWZpbmVkLFxuICBBTFBIQUJFVCxcbiAgZ2VuZXJhdGVTdHJpbmcsXG4gIGlzU3BlY0NvbXBsaWFudEZvcm0sXG4gIHRvSlNPTk9iamVjdCxcbiAgaXNBc3luY0ZuLFxuICBpc1RoZW5hYmxlXG59O1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbmZpZ10gVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQXhpb3NFcnJvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG5cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG4gIH1cblxuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICBjb25maWcgJiYgKHRoaXMuY29uZmlnID0gY29uZmlnKTtcbiAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gIHJlc3BvbnNlICYmICh0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2UpO1xufVxuXG51dGlscyQxLmluaGVyaXRzKEF4aW9zRXJyb3IsIEVycm9yLCB7XG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHV0aWxzJDEudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5yZXNwb25zZSAmJiB0aGlzLnJlc3BvbnNlLnN0YXR1cyA/IHRoaXMucmVzcG9uc2Uuc3RhdHVzIDogbnVsbFxuICAgIH07XG4gIH1cbn0pO1xuXG5jb25zdCBwcm90b3R5cGUkMSA9IEF4aW9zRXJyb3IucHJvdG90eXBlO1xuY29uc3QgZGVzY3JpcHRvcnMgPSB7fTtcblxuW1xuICAnRVJSX0JBRF9PUFRJT05fVkFMVUUnLFxuICAnRVJSX0JBRF9PUFRJT04nLFxuICAnRUNPTk5BQk9SVEVEJyxcbiAgJ0VUSU1FRE9VVCcsXG4gICdFUlJfTkVUV09SSycsXG4gICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJyxcbiAgJ0VSUl9ERVBSRUNBVEVEJyxcbiAgJ0VSUl9CQURfUkVTUE9OU0UnLFxuICAnRVJSX0JBRF9SRVFVRVNUJyxcbiAgJ0VSUl9DQU5DRUxFRCcsXG4gICdFUlJfTk9UX1NVUFBPUlQnLFxuICAnRVJSX0lOVkFMSURfVVJMJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbl0uZm9yRWFjaChjb2RlID0+IHtcbiAgZGVzY3JpcHRvcnNbY29kZV0gPSB7dmFsdWU6IGNvZGV9O1xufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEF4aW9zRXJyb3IsIGRlc2NyaXB0b3JzKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90b3R5cGUkMSwgJ2lzQXhpb3NFcnJvcicsIHt2YWx1ZTogdHJ1ZX0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuQXhpb3NFcnJvci5mcm9tID0gKGVycm9yLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlLCBjdXN0b21Qcm9wcykgPT4ge1xuICBjb25zdCBheGlvc0Vycm9yID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUkMSk7XG5cbiAgdXRpbHMkMS50b0ZsYXRPYmplY3QoZXJyb3IsIGF4aW9zRXJyb3IsIGZ1bmN0aW9uIGZpbHRlcihvYmopIHtcbiAgICByZXR1cm4gb2JqICE9PSBFcnJvci5wcm90b3R5cGU7XG4gIH0sIHByb3AgPT4ge1xuICAgIHJldHVybiBwcm9wICE9PSAnaXNBeGlvc0Vycm9yJztcbiAgfSk7XG5cbiAgQXhpb3NFcnJvci5jYWxsKGF4aW9zRXJyb3IsIGVycm9yLm1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpO1xuXG4gIGF4aW9zRXJyb3IuY2F1c2UgPSBlcnJvcjtcblxuICBheGlvc0Vycm9yLm5hbWUgPSBlcnJvci5uYW1lO1xuXG4gIGN1c3RvbVByb3BzICYmIE9iamVjdC5hc3NpZ24oYXhpb3NFcnJvciwgY3VzdG9tUHJvcHMpO1xuXG4gIHJldHVybiBheGlvc0Vycm9yO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0cmljdFxudmFyIGh0dHBBZGFwdGVyID0gbnVsbDtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiB0aGluZyBpcyBhIGFycmF5IG9yIGpzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhpbmcgLSBUaGUgb2JqZWN0IG9yIGFycmF5IHRvIGJlIHZpc2l0ZWQuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmlzaXRhYmxlKHRoaW5nKSB7XG4gIHJldHVybiB1dGlscyQxLmlzUGxhaW5PYmplY3QodGhpbmcpIHx8IHV0aWxzJDEuaXNBcnJheSh0aGluZyk7XG59XG5cbi8qKlxuICogSXQgcmVtb3ZlcyB0aGUgYnJhY2tldHMgZnJvbSB0aGUgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHBhcmFtZXRlci5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUga2V5IHdpdGhvdXQgdGhlIGJyYWNrZXRzLlxuICovXG5mdW5jdGlvbiByZW1vdmVCcmFja2V0cyhrZXkpIHtcbiAgcmV0dXJuIHV0aWxzJDEuZW5kc1dpdGgoa2V5LCAnW10nKSA/IGtleS5zbGljZSgwLCAtMikgOiBrZXk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXRoLCBhIGtleSwgYW5kIGEgYm9vbGVhbiwgYW5kIHJldHVybnMgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBjdXJyZW50IG9iamVjdCBiZWluZyBpdGVyYXRlZCBvdmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGRvdHMgLSBJZiB0cnVlLCB0aGUga2V5IHdpbGwgYmUgcmVuZGVyZWQgd2l0aCBkb3RzIGluc3RlYWQgb2YgYnJhY2tldHMuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICovXG5mdW5jdGlvbiByZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSB7XG4gIGlmICghcGF0aCkgcmV0dXJuIGtleTtcbiAgcmV0dXJuIHBhdGguY29uY2F0KGtleSkubWFwKGZ1bmN0aW9uIGVhY2godG9rZW4sIGkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB0b2tlbiA9IHJlbW92ZUJyYWNrZXRzKHRva2VuKTtcbiAgICByZXR1cm4gIWRvdHMgJiYgaSA/ICdbJyArIHRva2VuICsgJ10nIDogdG9rZW47XG4gIH0pLmpvaW4oZG90cyA/ICcuJyA6ICcnKTtcbn1cblxuLyoqXG4gKiBJZiB0aGUgYXJyYXkgaXMgYW4gYXJyYXkgYW5kIG5vbmUgb2YgaXRzIGVsZW1lbnRzIGFyZSB2aXNpdGFibGUsIHRoZW4gaXQncyBhIGZsYXQgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGbGF0QXJyYXkoYXJyKSB7XG4gIHJldHVybiB1dGlscyQxLmlzQXJyYXkoYXJyKSAmJiAhYXJyLnNvbWUoaXNWaXNpdGFibGUpO1xufVxuXG5jb25zdCBwcmVkaWNhdGVzID0gdXRpbHMkMS50b0ZsYXRPYmplY3QodXRpbHMkMSwge30sIG51bGwsIGZ1bmN0aW9uIGZpbHRlcihwcm9wKSB7XG4gIHJldHVybiAvXmlzW0EtWl0vLnRlc3QocHJvcCk7XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgZGF0YSBvYmplY3QgdG8gRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0gez9PYmplY3R9IFtmb3JtRGF0YV1cbiAqIEBwYXJhbSB7P09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy52aXNpdG9yXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5tZXRhVG9rZW5zID0gdHJ1ZV1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZG90cyA9IGZhbHNlXVxuICogQHBhcmFtIHs/Qm9vbGVhbn0gW29wdGlvbnMuaW5kZXhlcyA9IGZhbHNlXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiovXG5cbi8qKlxuICogSXQgY29udmVydHMgYW4gb2JqZWN0IGludG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gY29udmVydCB0byBmb3JtIGRhdGEuXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgLSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIHRvRm9ybURhdGEob2JqLCBmb3JtRGF0YSwgb3B0aW9ucykge1xuICBpZiAoIXV0aWxzJDEuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZvcm1EYXRhID0gZm9ybURhdGEgfHwgbmV3IChGb3JtRGF0YSkoKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgb3B0aW9ucyA9IHV0aWxzJDEudG9GbGF0T2JqZWN0KG9wdGlvbnMsIHtcbiAgICBtZXRhVG9rZW5zOiB0cnVlLFxuICAgIGRvdHM6IGZhbHNlLFxuICAgIGluZGV4ZXM6IGZhbHNlXG4gIH0sIGZhbHNlLCBmdW5jdGlvbiBkZWZpbmVkKG9wdGlvbiwgc291cmNlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gICAgcmV0dXJuICF1dGlscyQxLmlzVW5kZWZpbmVkKHNvdXJjZVtvcHRpb25dKTtcbiAgfSk7XG5cbiAgY29uc3QgbWV0YVRva2VucyA9IG9wdGlvbnMubWV0YVRva2VucztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIGNvbnN0IHZpc2l0b3IgPSBvcHRpb25zLnZpc2l0b3IgfHwgZGVmYXVsdFZpc2l0b3I7XG4gIGNvbnN0IGRvdHMgPSBvcHRpb25zLmRvdHM7XG4gIGNvbnN0IGluZGV4ZXMgPSBvcHRpb25zLmluZGV4ZXM7XG4gIGNvbnN0IF9CbG9iID0gb3B0aW9ucy5CbG9iIHx8IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBCbG9iO1xuICBjb25zdCB1c2VCbG9iID0gX0Jsb2IgJiYgdXRpbHMkMS5pc1NwZWNDb21wbGlhbnRGb3JtKGZvcm1EYXRhKTtcblxuICBpZiAoIXV0aWxzJDEuaXNGdW5jdGlvbih2aXNpdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Zpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcblxuICAgIGlmICh1dGlscyQxLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICghdXNlQmxvYiAmJiB1dGlscyQxLmlzQmxvYih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLicpO1xuICAgIH1cblxuICAgIGlmICh1dGlscyQxLmlzQXJyYXlCdWZmZXIodmFsdWUpIHx8IHV0aWxzJDEuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVzZUJsb2IgJiYgdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgPyBuZXcgQmxvYihbdmFsdWVdKSA6IEJ1ZmZlci5mcm9tKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCB2aXNpdG9yLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0ga2V5XG4gICAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nfE51bWJlcj59IHBhdGhcbiAgICogQHRoaXMge0Zvcm1EYXRhfVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJuIHRydWUgdG8gdmlzaXQgdGhlIGVhY2ggcHJvcCBvZiB0aGUgdmFsdWUgcmVjdXJzaXZlbHlcbiAgICovXG4gIGZ1bmN0aW9uIGRlZmF1bHRWaXNpdG9yKHZhbHVlLCBrZXksIHBhdGgpIHtcbiAgICBsZXQgYXJyID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUgJiYgIXBhdGggJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHV0aWxzJDEuZW5kc1dpdGgoa2V5LCAne30nKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gbWV0YVRva2VucyA/IGtleSA6IGtleS5zbGljZSgwLCAtMik7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICh1dGlscyQxLmlzQXJyYXkodmFsdWUpICYmIGlzRmxhdEFycmF5KHZhbHVlKSkgfHxcbiAgICAgICAgKCh1dGlscyQxLmlzRmlsZUxpc3QodmFsdWUpIHx8IHV0aWxzJDEuZW5kc1dpdGgoa2V5LCAnW10nKSkgJiYgKGFyciA9IHV0aWxzJDEudG9BcnJheSh2YWx1ZSkpXG4gICAgICAgICkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IHJlbW92ZUJyYWNrZXRzKGtleSk7XG5cbiAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24gZWFjaChlbCwgaW5kZXgpIHtcbiAgICAgICAgICAhKHV0aWxzJDEuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICAgICAgICAgIGluZGV4ZXMgPT09IHRydWUgPyByZW5kZXJLZXkoW2tleV0sIGluZGV4LCBkb3RzKSA6IChpbmRleGVzID09PSBudWxsID8ga2V5IDoga2V5ICsgJ1tdJyksXG4gICAgICAgICAgICBjb252ZXJ0VmFsdWUoZWwpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNWaXNpdGFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQocmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cyksIGNvbnZlcnRWYWx1ZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc3RhY2sgPSBbXTtcblxuICBjb25zdCBleHBvc2VkSGVscGVycyA9IE9iamVjdC5hc3NpZ24ocHJlZGljYXRlcywge1xuICAgIGRlZmF1bHRWaXNpdG9yLFxuICAgIGNvbnZlcnRWYWx1ZSxcbiAgICBpc1Zpc2l0YWJsZVxuICB9KTtcblxuICBmdW5jdGlvbiBidWlsZCh2YWx1ZSwgcGF0aCkge1xuICAgIGlmICh1dGlscyQxLmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgaWYgKHN0YWNrLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0NpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAnICsgcGF0aC5qb2luKCcuJykpO1xuICAgIH1cblxuICAgIHN0YWNrLnB1c2godmFsdWUpO1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiBlYWNoKGVsLCBrZXkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9ICEodXRpbHMkMS5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIHZpc2l0b3IuY2FsbChcbiAgICAgICAgZm9ybURhdGEsIGVsLCB1dGlscyQxLmlzU3RyaW5nKGtleSkgPyBrZXkudHJpbSgpIDoga2V5LCBwYXRoLCBleHBvc2VkSGVscGVyc1xuICAgICAgKTtcblxuICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgICBidWlsZChlbCwgcGF0aCA/IHBhdGguY29uY2F0KGtleSkgOiBba2V5XSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdGFjay5wb3AoKTtcbiAgfVxuXG4gIGlmICghdXRpbHMkMS5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZGF0YSBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgYnVpbGQob2JqKTtcblxuICByZXR1cm4gZm9ybURhdGE7XG59XG5cbi8qKlxuICogSXQgZW5jb2RlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGluIHRoZSB1bnJlc2VydmVkIHNldCB3aXRoXG4gKiB0aGVpciBwZXJjZW50LWVuY29kZWQgZXF1aXZhbGVudHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBlbmNvZGUuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlbmNvZGUkMShzdHIpIHtcbiAgY29uc3QgY2hhck1hcCA9IHtcbiAgICAnISc6ICclMjEnLFxuICAgIFwiJ1wiOiAnJTI3JyxcbiAgICAnKCc6ICclMjgnLFxuICAgICcpJzogJyUyOScsXG4gICAgJ34nOiAnJTdFJyxcbiAgICAnJTIwJzogJysnLFxuICAgICclMDAnOiAnXFx4MDAnXG4gIH07XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZywgZnVuY3Rpb24gcmVwbGFjZXIobWF0Y2gpIHtcbiAgICByZXR1cm4gY2hhck1hcFttYXRjaF07XG4gIH0pO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGFyYW1zIG9iamVjdCBhbmQgY29udmVydHMgaXQgdG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGJlIGNvbnZlcnRlZCB0byBhIEZvcm1EYXRhIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBwYXNzZWQgdG8gdGhlIEF4aW9zIGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpIHtcbiAgdGhpcy5fcGFpcnMgPSBbXTtcblxuICBwYXJhbXMgJiYgdG9Gb3JtRGF0YShwYXJhbXMsIHRoaXMsIG9wdGlvbnMpO1xufVxuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc1VSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG5cbnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fcGFpcnMucHVzaChbbmFtZSwgdmFsdWVdKTtcbn07XG5cbnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKGVuY29kZXIpIHtcbiAgY29uc3QgX2VuY29kZSA9IGVuY29kZXIgPyBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBlbmNvZGVyLmNhbGwodGhpcywgdmFsdWUsIGVuY29kZSQxKTtcbiAgfSA6IGVuY29kZSQxO1xuXG4gIHJldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24gZWFjaChwYWlyKSB7XG4gICAgcmV0dXJuIF9lbmNvZGUocGFpclswXSkgKyAnPScgKyBfZW5jb2RlKHBhaXJbMV0pO1xuICB9LCAnJykuam9pbignJicpO1xufTtcblxuLyoqXG4gKiBJdCByZXBsYWNlcyBhbGwgaW5zdGFuY2VzIG9mIHRoZSBjaGFyYWN0ZXJzIGA6YCwgYCRgLCBgLGAsIGArYCwgYFtgLCBhbmQgYF1gIHdpdGggdGhlaXJcbiAqIFVSSSBlbmNvZGVkIGNvdW50ZXJwYXJ0c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWwgVGhlIHZhbHVlIHRvIGJlIGVuY29kZWQuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcGFyYW0gez9vYmplY3R9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5mdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgb3B0aW9ucykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIFxuICBjb25zdCBfZW5jb2RlID0gb3B0aW9ucyAmJiBvcHRpb25zLmVuY29kZSB8fCBlbmNvZGU7XG5cbiAgY29uc3Qgc2VyaWFsaXplRm4gPSBvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplO1xuXG4gIGxldCBzZXJpYWxpemVkUGFyYW1zO1xuXG4gIGlmIChzZXJpYWxpemVGbikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBzZXJpYWxpemVGbihwYXJhbXMsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSB1dGlscyQxLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykgP1xuICAgICAgcGFyYW1zLnRvU3RyaW5nKCkgOlxuICAgICAgbmV3IEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykudG9TdHJpbmcoX2VuY29kZSk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIGNvbnN0IGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZihcIiNcIik7XG5cbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn1cblxuY2xhc3MgSW50ZXJjZXB0b3JNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gICAqL1xuICB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICAgIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgICBmdWxmaWxsZWQsXG4gICAgICByZWplY3RlZCxcbiAgICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGludGVyY2VwdG9yIHdhcyByZW1vdmVkLCBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cbiAgZWplY3QoaWQpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGludGVyY2VwdG9ycyBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gICAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZvckVhY2goZm4pIHtcbiAgICB1dGlscyQxLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgICAgaWYgKGggIT09IG51bGwpIHtcbiAgICAgICAgZm4oaCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxudmFyIEludGVyY2VwdG9yTWFuYWdlciQxID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuXG52YXIgdHJhbnNpdGlvbmFsRGVmYXVsdHMgPSB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2Vcbn07XG5cbnZhciBVUkxTZWFyY2hQYXJhbXMkMSA9IHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnID8gVVJMU2VhcmNoUGFyYW1zIDogQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG5cbnZhciBGb3JtRGF0YSQxID0gdHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyA/IEZvcm1EYXRhIDogbnVsbDtcblxudmFyIEJsb2IkMSA9IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyA/IEJsb2IgOiBudWxsO1xuXG52YXIgcGxhdGZvcm0kMSA9IHtcbiAgaXNCcm93c2VyOiB0cnVlLFxuICBjbGFzc2VzOiB7XG4gICAgVVJMU2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXMkMSxcbiAgICBGb3JtRGF0YTogRm9ybURhdGEkMSxcbiAgICBCbG9iOiBCbG9iJDFcbiAgfSxcbiAgcHJvdG9jb2xzOiBbJ2h0dHAnLCAnaHR0cHMnLCAnZmlsZScsICdibG9iJywgJ3VybCcsICdkYXRhJ11cbn07XG5cbmNvbnN0IGhhc0Jyb3dzZXJFbnYgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyRW52ID0gKFxuICAocHJvZHVjdCkgPT4ge1xuICAgIHJldHVybiBoYXNCcm93c2VyRW52ICYmIFsnUmVhY3ROYXRpdmUnLCAnTmF0aXZlU2NyaXB0JywgJ05TJ10uaW5kZXhPZihwcm9kdWN0KSA8IDBcbiAgfSkodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnByb2R1Y3QpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciB3ZWJXb3JrZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBBbHRob3VnaCB0aGUgYGlzU3RhbmRhcmRCcm93c2VyRW52YCBtZXRob2QgaW5kaWNhdGVzIHRoYXRcbiAqIGBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlcmAsIHRoZSBXZWJXb3JrZXIgd2lsbCBzdGlsbCBiZVxuICogZmlsdGVyZWQgb3V0IGR1ZSB0byBpdHMganVkZ21lbnQgc3RhbmRhcmRcbiAqIGB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnYC5cbiAqIFRoaXMgbGVhZHMgdG8gYSBwcm9ibGVtIHdoZW4gYXhpb3MgcG9zdCBgRm9ybURhdGFgIGluIHdlYldvcmtlclxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYgPSAoKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUgJiZcbiAgICB0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzID09PSAnZnVuY3Rpb24nXG4gICk7XG59KSgpO1xuXG5jb25zdCBvcmlnaW4gPSBoYXNCcm93c2VyRW52ICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmIHx8ICdodHRwOi8vbG9jYWxob3N0JztcblxudmFyIHV0aWxzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIGhhc0Jyb3dzZXJFbnY6IGhhc0Jyb3dzZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjogaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJFbnY6IGhhc1N0YW5kYXJkQnJvd3NlckVudixcbiAgb3JpZ2luOiBvcmlnaW5cbn0pO1xuXG52YXIgcGxhdGZvcm0gPSB7XG4gIC4uLnV0aWxzLFxuICAuLi5wbGF0Zm9ybSQxXG59O1xuXG5mdW5jdGlvbiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRm9ybURhdGEoZGF0YSwgbmV3IHBsYXRmb3JtLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zKCksIE9iamVjdC5hc3NpZ24oe1xuICAgIHZpc2l0b3I6IGZ1bmN0aW9uKHZhbHVlLCBrZXksIHBhdGgsIGhlbHBlcnMpIHtcbiAgICAgIGlmIChwbGF0Zm9ybS5pc05vZGUgJiYgdXRpbHMkMS5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoa2V5LCB2YWx1ZS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoZWxwZXJzLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9LCBvcHRpb25zKSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcgbGlrZSBgZm9vW3hdW3ldW3pdYCBhbmQgcmV0dXJucyBhbiBhcnJheSBsaWtlIGBbJ2ZvbycsICd4JywgJ3knLCAneiddXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICpcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUHJvcFBhdGgobmFtZSkge1xuICAvLyBmb29beF1beV1bel1cbiAgLy8gZm9vLngueS56XG4gIC8vIGZvby14LXktelxuICAvLyBmb28geCB5IHpcbiAgcmV0dXJuIHV0aWxzJDEubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLCBuYW1lKS5tYXAobWF0Y2ggPT4ge1xuICAgIHJldHVybiBtYXRjaFswXSA9PT0gJ1tdJyA/ICcnIDogbWF0Y2hbMV0gfHwgbWF0Y2hbMF07XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gYXJyYXkgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNvbnZlcnQgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIGtleXMgYW5kIHZhbHVlcyBhcyB0aGUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5VG9PYmplY3QoYXJyKSB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYXJyKTtcbiAgbGV0IGk7XG4gIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICBsZXQga2V5O1xuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldO1xuICAgIG9ialtrZXldID0gYXJyW2tleV07XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIEZvcm1EYXRhIG9iamVjdCBhbmQgcmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gY29udmVydCB0byBKU09OLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3Q8c3RyaW5nLCBhbnk+IHwgbnVsbH0gVGhlIGNvbnZlcnRlZCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGZvcm1EYXRhVG9KU09OKGZvcm1EYXRhKSB7XG4gIGZ1bmN0aW9uIGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0LCBpbmRleCkge1xuICAgIGxldCBuYW1lID0gcGF0aFtpbmRleCsrXTtcblxuICAgIGlmIChuYW1lID09PSAnX19wcm90b19fJykgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBpc051bWVyaWNLZXkgPSBOdW1iZXIuaXNGaW5pdGUoK25hbWUpO1xuICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID49IHBhdGgubGVuZ3RoO1xuICAgIG5hbWUgPSAhbmFtZSAmJiB1dGlscyQxLmlzQXJyYXkodGFyZ2V0KSA/IHRhcmdldC5sZW5ndGggOiBuYW1lO1xuXG4gICAgaWYgKGlzTGFzdCkge1xuICAgICAgaWYgKHV0aWxzJDEuaGFzT3duUHJvcCh0YXJnZXQsIG5hbWUpKSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IFt0YXJnZXRbbmFtZV0sIHZhbHVlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldFtuYW1lXSB8fCAhdXRpbHMkMS5pc09iamVjdCh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldFtuYW1lXSwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCAmJiB1dGlscyQxLmlzQXJyYXkodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gYXJyYXlUb09iamVjdCh0YXJnZXRbbmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICB9XG5cbiAgaWYgKHV0aWxzJDEuaXNGb3JtRGF0YShmb3JtRGF0YSkgJiYgdXRpbHMkMS5pc0Z1bmN0aW9uKGZvcm1EYXRhLmVudHJpZXMpKSB7XG4gICAgY29uc3Qgb2JqID0ge307XG5cbiAgICB1dGlscyQxLmZvckVhY2hFbnRyeShmb3JtRGF0YSwgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBidWlsZFBhdGgocGFyc2VQcm9wUGF0aChuYW1lKSwgdmFsdWUsIG9iaiwgMCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcsIHRyaWVzIHRvIHBhcnNlIGl0LCBhbmQgaWYgaXQgZmFpbHMsIGl0IHJldHVybnMgdGhlIHN0cmluZ2lmaWVkIHZlcnNpb25cbiAqIG9mIHRoZSBpbnB1dFxuICpcbiAqIEBwYXJhbSB7YW55fSByYXdWYWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBzdHJpbmdpZmllZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcnNlciAtIEEgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzdHJpbmcgaW50byBhIEphdmFTY3JpcHQgb2JqZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZW5jb2RlciAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHZhbHVlIGFuZCByZXR1cm5zIGEgc3RyaW5nLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiB0aGUgcmF3VmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeVNhZmVseShyYXdWYWx1ZSwgcGFyc2VyLCBlbmNvZGVyKSB7XG4gIGlmICh1dGlscyQxLmlzU3RyaW5nKHJhd1ZhbHVlKSkge1xuICAgIHRyeSB7XG4gICAgICAocGFyc2VyIHx8IEpTT04ucGFyc2UpKHJhd1ZhbHVlKTtcbiAgICAgIHJldHVybiB1dGlscyQxLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxuY29uc3QgZGVmYXVsdHMgPSB7XG5cbiAgdHJhbnNpdGlvbmFsOiB0cmFuc2l0aW9uYWxEZWZhdWx0cyxcblxuICBhZGFwdGVyOiBbJ3hocicsICdodHRwJywgJ2ZldGNoJ10sXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpIHx8ICcnO1xuICAgIGNvbnN0IGhhc0pTT05Db250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA+IC0xO1xuICAgIGNvbnN0IGlzT2JqZWN0UGF5bG9hZCA9IHV0aWxzJDEuaXNPYmplY3QoZGF0YSk7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkICYmIHV0aWxzJDEuaXNIVE1MRm9ybShkYXRhKSkge1xuICAgICAgZGF0YSA9IG5ldyBGb3JtRGF0YShkYXRhKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0Zvcm1EYXRhID0gdXRpbHMkMS5pc0Zvcm1EYXRhKGRhdGEpO1xuXG4gICAgaWYgKGlzRm9ybURhdGEpIHtcbiAgICAgIHJldHVybiBoYXNKU09OQ29udGVudFR5cGUgPyBKU09OLnN0cmluZ2lmeShmb3JtRGF0YVRvSlNPTihkYXRhKSkgOiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh1dGlscyQxLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzQmxvYihkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzJDEuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04JywgZmFsc2UpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgaXNGaWxlTGlzdDtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQpIHtcbiAgICAgIGlmIChjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICgoaXNGaWxlTGlzdCA9IHV0aWxzJDEuaXNGaWxlTGlzdChkYXRhKSkgfHwgY29udGVudFR5cGUuaW5kZXhPZignbXVsdGlwYXJ0L2Zvcm0tZGF0YScpID4gLTEpIHtcbiAgICAgICAgY29uc3QgX0Zvcm1EYXRhID0gdGhpcy5lbnYgJiYgdGhpcy5lbnYuRm9ybURhdGE7XG5cbiAgICAgICAgcmV0dXJuIHRvRm9ybURhdGEoXG4gICAgICAgICAgaXNGaWxlTGlzdCA/IHsnZmlsZXNbXSc6IGRhdGF9IDogZGF0YSxcbiAgICAgICAgICBfRm9ybURhdGEgJiYgbmV3IF9Gb3JtRGF0YSgpLFxuICAgICAgICAgIHRoaXMuZm9ybVNlcmlhbGl6ZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGhhc0pTT05Db250ZW50VHlwZSApIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL2pzb24nLCBmYWxzZSk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgY29uc3QgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgIGNvbnN0IEpTT05SZXF1ZXN0ZWQgPSB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgaWYgKHV0aWxzJDEuaXNSZXNwb25zZShkYXRhKSB8fCB1dGlscyQxLmlzUmVhZGFibGVTdHJlYW0oZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmIChkYXRhICYmIHV0aWxzJDEuaXNTdHJpbmcoZGF0YSkgJiYgKChmb3JjZWRKU09OUGFyc2luZyAmJiAhdGhpcy5yZXNwb25zZVR5cGUpIHx8IEpTT05SZXF1ZXN0ZWQpKSB7XG4gICAgICBjb25zdCBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgICBjb25zdCBzdHJpY3RKU09OUGFyc2luZyA9ICFzaWxlbnRKU09OUGFyc2luZyAmJiBKU09OUmVxdWVzdGVkO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGUsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgdGhpcywgbnVsbCwgdGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIGVudjoge1xuICAgIEZvcm1EYXRhOiBwbGF0Zm9ybS5jbGFzc2VzLkZvcm1EYXRhLFxuICAgIEJsb2I6IHBsYXRmb3JtLmNsYXNzZXMuQmxvYlxuICB9LFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxufTtcblxudXRpbHMkMS5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIChtZXRob2QpID0+IHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxudmFyIGRlZmF1bHRzJDEgPSBkZWZhdWx0cztcblxuLy8gUmF3QXhpb3NIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xuY29uc3QgaWdub3JlRHVwbGljYXRlT2YgPSB1dGlscyQxLnRvT2JqZWN0U2V0KFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dKTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJhd0hlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbnZhciBwYXJzZUhlYWRlcnMgPSByYXdIZWFkZXJzID0+IHtcbiAgY29uc3QgcGFyc2VkID0ge307XG4gIGxldCBrZXk7XG4gIGxldCB2YWw7XG4gIGxldCBpO1xuXG4gIHJhd0hlYWRlcnMgJiYgcmF3SGVhZGVycy5zcGxpdCgnXFxuJykuZm9yRWFjaChmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSBsaW5lLnN1YnN0cmluZygwLCBpKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSBsaW5lLnN1YnN0cmluZyhpICsgMSkudHJpbSgpO1xuXG4gICAgaWYgKCFrZXkgfHwgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mW2tleV0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0pIHtcbiAgICAgICAgcGFyc2VkW2tleV0ucHVzaCh2YWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBbdmFsXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuXG5jb25zdCAkaW50ZXJuYWxzID0gU3ltYm9sKCdpbnRlcm5hbHMnKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyICYmIFN0cmluZyhoZWFkZXIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdXRpbHMkMS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChub3JtYWxpemVWYWx1ZSkgOiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRva2VucyhzdHIpIHtcbiAgY29uc3QgdG9rZW5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgY29uc3QgdG9rZW5zUkUgPSAvKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nO1xuICBsZXQgbWF0Y2g7XG5cbiAgd2hpbGUgKChtYXRjaCA9IHRva2Vuc1JFLmV4ZWMoc3RyKSkpIHtcbiAgICB0b2tlbnNbbWF0Y2hbMV1dID0gbWF0Y2hbMl07XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5jb25zdCBpc1ZhbGlkSGVhZGVyTmFtZSA9IChzdHIpID0+IC9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3Qoc3RyLnRyaW0oKSk7XG5cbmZ1bmN0aW9uIG1hdGNoSGVhZGVyVmFsdWUoY29udGV4dCwgdmFsdWUsIGhlYWRlciwgZmlsdGVyLCBpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgaWYgKHV0aWxzJDEuaXNGdW5jdGlvbihmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci5jYWxsKHRoaXMsIHZhbHVlLCBoZWFkZXIpO1xuICB9XG5cbiAgaWYgKGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICAgIHZhbHVlID0gaGVhZGVyO1xuICB9XG5cbiAgaWYgKCF1dGlscyQxLmlzU3RyaW5nKHZhbHVlKSkgcmV0dXJuO1xuXG4gIGlmICh1dGlscyQxLmlzU3RyaW5nKGZpbHRlcikpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5kZXhPZihmaWx0ZXIpICE9PSAtMTtcbiAgfVxuXG4gIGlmICh1dGlscyQxLmlzUmVnRXhwKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLnRlc3QodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlci50cmltKClcbiAgICAudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxcZF0pKFxcdyopL2csICh3LCBjaGFyLCBzdHIpID0+IHtcbiAgICAgIHJldHVybiBjaGFyLnRvVXBwZXJDYXNlKCkgKyBzdHI7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWNjZXNzb3JzKG9iaiwgaGVhZGVyKSB7XG4gIGNvbnN0IGFjY2Vzc29yTmFtZSA9IHV0aWxzJDEudG9DYW1lbENhc2UoJyAnICsgaGVhZGVyKTtcblxuICBbJ2dldCcsICdzZXQnLCAnaGFzJ10uZm9yRWFjaChtZXRob2ROYW1lID0+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBtZXRob2ROYW1lICsgYWNjZXNzb3JOYW1lLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24oYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgICByZXR1cm4gdGhpc1ttZXRob2ROYW1lXS5jYWxsKHRoaXMsIGhlYWRlciwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0pO1xufVxuXG5jbGFzcyBBeGlvc0hlYWRlcnMge1xuICBjb25zdHJ1Y3RvcihoZWFkZXJzKSB7XG4gICAgaGVhZGVycyAmJiB0aGlzLnNldChoZWFkZXJzKTtcbiAgfVxuXG4gIHNldChoZWFkZXIsIHZhbHVlT3JSZXdyaXRlLCByZXdyaXRlKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFsSGVhZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KHNlbGYsIGxIZWFkZXIpO1xuXG4gICAgICBpZigha2V5IHx8IHNlbGZba2V5XSA9PT0gdW5kZWZpbmVkIHx8IF9yZXdyaXRlID09PSB0cnVlIHx8IChfcmV3cml0ZSA9PT0gdW5kZWZpbmVkICYmIHNlbGZba2V5XSAhPT0gZmFsc2UpKSB7XG4gICAgICAgIHNlbGZba2V5IHx8IF9oZWFkZXJdID0gbm9ybWFsaXplVmFsdWUoX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRIZWFkZXJzID0gKGhlYWRlcnMsIF9yZXdyaXRlKSA9PlxuICAgICAgdXRpbHMkMS5mb3JFYWNoKGhlYWRlcnMsIChfdmFsdWUsIF9oZWFkZXIpID0+IHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSk7XG5cbiAgICBpZiAodXRpbHMkMS5pc1BsYWluT2JqZWN0KGhlYWRlcikgfHwgaGVhZGVyIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcikge1xuICAgICAgc2V0SGVhZGVycyhoZWFkZXIsIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2UgaWYodXRpbHMkMS5pc1N0cmluZyhoZWFkZXIpICYmIChoZWFkZXIgPSBoZWFkZXIudHJpbSgpKSAmJiAhaXNWYWxpZEhlYWRlck5hbWUoaGVhZGVyKSkge1xuICAgICAgc2V0SGVhZGVycyhwYXJzZUhlYWRlcnMoaGVhZGVyKSwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMkMS5pc0hlYWRlcnMoaGVhZGVyKSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgaGVhZGVyLmVudHJpZXMoKSkge1xuICAgICAgICBzZXRIZWFkZXIodmFsdWUsIGtleSwgcmV3cml0ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlciAhPSBudWxsICYmIHNldEhlYWRlcih2YWx1ZU9yUmV3cml0ZSwgaGVhZGVyLCByZXdyaXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChoZWFkZXIsIHBhcnNlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tleV07XG5cbiAgICAgICAgaWYgKCFwYXJzZXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VyID09PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5zKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscyQxLmlzRnVuY3Rpb24ocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuY2FsbCh0aGlzLCB2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscyQxLmlzUmVnRXhwKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmV4ZWModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXMoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgcmV0dXJuICEhKGtleSAmJiB0aGlzW2tleV0gIT09IHVuZGVmaW5lZCAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlcikpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBkZWxldGUoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGRlbGV0ZUhlYWRlcihfaGVhZGVyKSB7XG4gICAgICBfaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoX2hlYWRlcikge1xuICAgICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoc2VsZiwgX2hlYWRlcik7XG5cbiAgICAgICAgaWYgKGtleSAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZShzZWxmLCBzZWxmW2tleV0sIGtleSwgbWF0Y2hlcikpKSB7XG4gICAgICAgICAgZGVsZXRlIHNlbGZba2V5XTtcblxuICAgICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheShoZWFkZXIpKSB7XG4gICAgICBoZWFkZXIuZm9yRWFjaChkZWxldGVIZWFkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGVIZWFkZXIoaGVhZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIGNsZWFyKG1hdGNoZXIpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcyk7XG4gICAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIsIHRydWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgbm9ybWFsaXplKGZvcm1hdCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KGhlYWRlcnMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgc2VsZltrZXldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBmb3JtYXQgPyBmb3JtYXRIZWFkZXIoaGVhZGVyKSA6IFN0cmluZyhoZWFkZXIpLnRyaW0oKTtcblxuICAgICAgaWYgKG5vcm1hbGl6ZWQgIT09IGhlYWRlcikge1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgfVxuXG4gICAgICBzZWxmW25vcm1hbGl6ZWRdID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuXG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWRdID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29uY2F0KC4uLnRhcmdldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywgLi4udGFyZ2V0cyk7XG4gIH1cblxuICB0b0pTT04oYXNTdHJpbmdzKSB7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gZmFsc2UgJiYgKG9ialtoZWFkZXJdID0gYXNTdHJpbmdzICYmIHV0aWxzJDEuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsICcpIDogdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbaGVhZGVyLCB2YWx1ZV0pID0+IGhlYWRlciArICc6ICcgKyB2YWx1ZSkuam9pbignXFxuJyk7XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdBeGlvc0hlYWRlcnMnO1xuICB9XG5cbiAgc3RhdGljIGZyb20odGhpbmcpIHtcbiAgICByZXR1cm4gdGhpbmcgaW5zdGFuY2VvZiB0aGlzID8gdGhpbmcgOiBuZXcgdGhpcyh0aGluZyk7XG4gIH1cblxuICBzdGF0aWMgY29uY2F0KGZpcnN0LCAuLi50YXJnZXRzKSB7XG4gICAgY29uc3QgY29tcHV0ZWQgPSBuZXcgdGhpcyhmaXJzdCk7XG5cbiAgICB0YXJnZXRzLmZvckVhY2goKHRhcmdldCkgPT4gY29tcHV0ZWQuc2V0KHRhcmdldCkpO1xuXG4gICAgcmV0dXJuIGNvbXB1dGVkO1xuICB9XG5cbiAgc3RhdGljIGFjY2Vzc29yKGhlYWRlcikge1xuICAgIGNvbnN0IGludGVybmFscyA9IHRoaXNbJGludGVybmFsc10gPSAodGhpc1skaW50ZXJuYWxzXSA9IHtcbiAgICAgIGFjY2Vzc29yczoge31cbiAgICB9KTtcblxuICAgIGNvbnN0IGFjY2Vzc29ycyA9IGludGVybmFscy5hY2Nlc3NvcnM7XG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVBY2Nlc3NvcihfaGVhZGVyKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWFjY2Vzc29yc1tsSGVhZGVyXSkge1xuICAgICAgICBidWlsZEFjY2Vzc29ycyhwcm90b3R5cGUsIF9oZWFkZXIpO1xuICAgICAgICBhY2Nlc3NvcnNbbEhlYWRlcl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHV0aWxzJDEuaXNBcnJheShoZWFkZXIpID8gaGVhZGVyLmZvckVhY2goZGVmaW5lQWNjZXNzb3IpIDogZGVmaW5lQWNjZXNzb3IoaGVhZGVyKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbkF4aW9zSGVhZGVycy5hY2Nlc3NvcihbJ0NvbnRlbnQtVHlwZScsICdDb250ZW50LUxlbmd0aCcsICdBY2NlcHQnLCAnQWNjZXB0LUVuY29kaW5nJywgJ1VzZXItQWdlbnQnLCAnQXV0aG9yaXphdGlvbiddKTtcblxuLy8gcmVzZXJ2ZWQgbmFtZXMgaG90Zml4XG51dGlscyQxLnJlZHVjZURlc2NyaXB0b3JzKEF4aW9zSGVhZGVycy5wcm90b3R5cGUsICh7dmFsdWV9LCBrZXkpID0+IHtcbiAgbGV0IG1hcHBlZCA9IGtleVswXS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpOyAvLyBtYXAgYHNldGAgPT4gYFNldGBcbiAgcmV0dXJuIHtcbiAgICBnZXQ6ICgpID0+IHZhbHVlLFxuICAgIHNldChoZWFkZXJWYWx1ZSkge1xuICAgICAgdGhpc1ttYXBwZWRdID0gaGVhZGVyVmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudXRpbHMkMS5mcmVlemVNZXRob2RzKEF4aW9zSGVhZGVycyk7XG5cbnZhciBBeGlvc0hlYWRlcnMkMSA9IEF4aW9zSGVhZGVycztcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHBhcmFtIHs/T2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGZucywgcmVzcG9uc2UpIHtcbiAgY29uc3QgY29uZmlnID0gdGhpcyB8fCBkZWZhdWx0cyQxO1xuICBjb25zdCBjb250ZXh0ID0gcmVzcG9uc2UgfHwgY29uZmlnO1xuICBjb25zdCBoZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShjb250ZXh0LmhlYWRlcnMpO1xuICBsZXQgZGF0YSA9IGNvbnRleHQuZGF0YTtcblxuICB1dGlscyQxLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4uY2FsbChjb25maWcsIGRhdGEsIGhlYWRlcnMubm9ybWFsaXplKCksIHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgaGVhZGVycy5ub3JtYWxpemUoKTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufVxuXG4vKipcbiAqIEEgYENhbmNlbGVkRXJyb3JgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3Q9fSByZXF1ZXN0IFRoZSByZXF1ZXN0LlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxlZEVycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQsIGNvbmZpZywgcmVxdWVzdCk7XG4gIHRoaXMubmFtZSA9ICdDYW5jZWxlZEVycm9yJztcbn1cblxudXRpbHMkMS5pbmhlcml0cyhDYW5jZWxlZEVycm9yLCBBeGlvc0Vycm9yLCB7XG4gIF9fQ0FOQ0VMX186IHRydWVcbn0pO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSByZXNwb25zZS5cbiAqL1xuZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgY29uc3QgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIGNvbnN0IG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBkYXRhIG1heFJhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2FtcGxlc0NvdW50PSAxMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSBbbWluPSAxMDAwXVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcGVlZG9tZXRlcihzYW1wbGVzQ291bnQsIG1pbikge1xuICBzYW1wbGVzQ291bnQgPSBzYW1wbGVzQ291bnQgfHwgMTA7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGNvbnN0IHRpbWVzdGFtcHMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgbGV0IGhlYWQgPSAwO1xuICBsZXQgdGFpbCA9IDA7XG4gIGxldCBmaXJzdFNhbXBsZVRTO1xuXG4gIG1pbiA9IG1pbiAhPT0gdW5kZWZpbmVkID8gbWluIDogMTAwMDtcblxuICByZXR1cm4gZnVuY3Rpb24gcHVzaChjaHVua0xlbmd0aCkge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICBjb25zdCBzdGFydGVkQXQgPSB0aW1lc3RhbXBzW3RhaWxdO1xuXG4gICAgaWYgKCFmaXJzdFNhbXBsZVRTKSB7XG4gICAgICBmaXJzdFNhbXBsZVRTID0gbm93O1xuICAgIH1cblxuICAgIGJ5dGVzW2hlYWRdID0gY2h1bmtMZW5ndGg7XG4gICAgdGltZXN0YW1wc1toZWFkXSA9IG5vdztcblxuICAgIGxldCBpID0gdGFpbDtcbiAgICBsZXQgYnl0ZXNDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoaSAhPT0gaGVhZCkge1xuICAgICAgYnl0ZXNDb3VudCArPSBieXRlc1tpKytdO1xuICAgICAgaSA9IGkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaGVhZCA9IChoZWFkICsgMSkgJSBzYW1wbGVzQ291bnQ7XG5cbiAgICBpZiAoaGVhZCA9PT0gdGFpbCkge1xuICAgICAgdGFpbCA9ICh0YWlsICsgMSkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaWYgKG5vdyAtIGZpcnN0U2FtcGxlVFMgPCBtaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXNzZWQgPSBzdGFydGVkQXQgJiYgbm93IC0gc3RhcnRlZEF0O1xuXG4gICAgcmV0dXJuIHBhc3NlZCA/IE1hdGgucm91bmQoYnl0ZXNDb3VudCAqIDEwMDAgLyBwYXNzZWQpIDogdW5kZWZpbmVkO1xuICB9O1xufVxuXG4vKipcbiAqIFRocm90dGxlIGRlY29yYXRvclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7TnVtYmVyfSBmcmVxXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gdGhyb3R0bGUoZm4sIGZyZXEpIHtcbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGNvbnN0IHRocmVzaG9sZCA9IDEwMDAgLyBmcmVxO1xuICBsZXQgdGltZXIgPSBudWxsO1xuICByZXR1cm4gZnVuY3Rpb24gdGhyb3R0bGVkKCkge1xuICAgIGNvbnN0IGZvcmNlID0gdGhpcyA9PT0gdHJ1ZTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgaWYgKGZvcmNlIHx8IG5vdyAtIHRpbWVzdGFtcCA+IHRocmVzaG9sZCkge1xuICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRpbWVzdGFtcCA9IG5vdztcbiAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgICBpZiAoIXRpbWVyKSB7XG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgIHRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfSwgdGhyZXNob2xkIC0gKG5vdyAtIHRpbWVzdGFtcCkpO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIHByb2dyZXNzRXZlbnRSZWR1Y2VyID0gKGxpc3RlbmVyLCBpc0Rvd25sb2FkU3RyZWFtLCBmcmVxID0gMykgPT4ge1xuICBsZXQgYnl0ZXNOb3RpZmllZCA9IDA7XG4gIGNvbnN0IF9zcGVlZG9tZXRlciA9IHNwZWVkb21ldGVyKDUwLCAyNTApO1xuXG4gIHJldHVybiB0aHJvdHRsZShlID0+IHtcbiAgICBjb25zdCBsb2FkZWQgPSBlLmxvYWRlZDtcbiAgICBjb25zdCB0b3RhbCA9IGUubGVuZ3RoQ29tcHV0YWJsZSA/IGUudG90YWwgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJvZ3Jlc3NCeXRlcyA9IGxvYWRlZCAtIGJ5dGVzTm90aWZpZWQ7XG4gICAgY29uc3QgcmF0ZSA9IF9zcGVlZG9tZXRlcihwcm9ncmVzc0J5dGVzKTtcbiAgICBjb25zdCBpblJhbmdlID0gbG9hZGVkIDw9IHRvdGFsO1xuXG4gICAgYnl0ZXNOb3RpZmllZCA9IGxvYWRlZDtcblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBsb2FkZWQsXG4gICAgICB0b3RhbCxcbiAgICAgIHByb2dyZXNzOiB0b3RhbCA/IChsb2FkZWQgLyB0b3RhbCkgOiB1bmRlZmluZWQsXG4gICAgICBieXRlczogcHJvZ3Jlc3NCeXRlcyxcbiAgICAgIHJhdGU6IHJhdGUgPyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXN0aW1hdGVkOiByYXRlICYmIHRvdGFsICYmIGluUmFuZ2UgPyAodG90YWwgLSBsb2FkZWQpIC8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGV2ZW50OiBlLFxuICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdG90YWwgIT0gbnVsbFxuICAgIH07XG5cbiAgICBkYXRhW2lzRG93bmxvYWRTdHJlYW0gPyAnZG93bmxvYWQnIDogJ3VwbG9hZCddID0gdHJ1ZTtcblxuICAgIGxpc3RlbmVyKGRhdGEpO1xuICB9LCBmcmVxKTtcbn07XG5cbnZhciBpc1VSTFNhbWVPcmlnaW4gPSBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4vLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3Rcbi8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIGNvbnN0IG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIGNvbnN0IHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGxldCBvcmlnaW5VUkw7XG5cbiAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0cyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICBsZXQgaHJlZiA9IHVybDtcblxuICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICB9XG5cbiAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICByZXR1cm4ge1xuICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gKHV0aWxzJDEuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9KSgpO1xuXG52YXIgY29va2llcyA9IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gIHtcbiAgICB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgIGNvbnN0IGNvb2tpZSA9IFtuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKV07XG5cbiAgICAgIHV0aWxzJDEuaXNOdW1iZXIoZXhwaXJlcykgJiYgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuXG4gICAgICB1dGlscyQxLmlzU3RyaW5nKHBhdGgpICYmIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcblxuICAgICAgdXRpbHMkMS5pc1N0cmluZyhkb21haW4pICYmIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG5cbiAgICAgIHNlY3VyZSA9PT0gdHJ1ZSAmJiBjb29raWUucHVzaCgnc2VjdXJlJyk7XG5cbiAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgIH0sXG5cbiAgICByZWFkKG5hbWUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgfSxcblxuICAgIHJlbW92ZShuYW1lKSB7XG4gICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgIH1cbiAgfVxuXG4gIDpcblxuICAvLyBOb24tc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIHtcbiAgICB3cml0ZSgpIHt9LFxuICAgIHJlYWQoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHJlbW92ZSgpIHt9XG4gIH07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xuZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLz9cXC8kLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5mdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCkge1xuICBpZiAoYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn1cblxuY29uc3QgaGVhZGVyc1RvT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyBpbnN0YW5jZW9mIEF4aW9zSGVhZGVycyQxID8geyAuLi50aGluZyB9IDogdGhpbmc7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xuZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIGNvbnN0IGNvbmZpZyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlLCBjYXNlbGVzcykge1xuICAgIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscyQxLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzJDEubWVyZ2UuY2FsbCh7Y2FzZWxlc3N9LCB0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzJDEubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMoYSwgYiwgY2FzZWxlc3MpIHtcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiLCBjYXNlbGVzcyk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSwgY2FzZWxlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURpcmVjdEtleXMoYSwgYiwgcHJvcCkge1xuICAgIGlmIChwcm9wIGluIGNvbmZpZzIpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVyZ2VNYXAgPSB7XG4gICAgdXJsOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIG1ldGhvZDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBkYXRhOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGJhc2VVUkw6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVxdWVzdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXNwb25zZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBwYXJhbXNTZXJpYWxpemVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dE1lc3NhZ2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aENyZWRlbnRpYWxzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhYU1JGVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYWRhcHRlcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZVR5cGU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkNvb2tpZU5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkhlYWRlck5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25VcGxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgZGVjb21wcmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhDb250ZW50TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heEJvZHlMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYmVmb3JlUmVkaXJlY3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNwb3J0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwc0FnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGNhbmNlbFRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHNvY2tldFBhdGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VFbmNvZGluZzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB2YWxpZGF0ZVN0YXR1czogbWVyZ2VEaXJlY3RLZXlzLFxuICAgIGhlYWRlcnM6IChhLCBiKSA9PiBtZXJnZURlZXBQcm9wZXJ0aWVzKGhlYWRlcnNUb09iamVjdChhKSwgaGVhZGVyc1RvT2JqZWN0KGIpLCB0cnVlKVxuICB9O1xuXG4gIHV0aWxzJDEuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCBjb25maWcxLCBjb25maWcyKSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgY29uc3QgbWVyZ2UgPSBtZXJnZU1hcFtwcm9wXSB8fCBtZXJnZURlZXBQcm9wZXJ0aWVzO1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlID0gbWVyZ2UoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSwgcHJvcCk7XG4gICAgKHV0aWxzJDEuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59XG5cbnZhciByZXNvbHZlQ29uZmlnID0gKGNvbmZpZykgPT4ge1xuICBjb25zdCBuZXdDb25maWcgPSBtZXJnZUNvbmZpZyh7fSwgY29uZmlnKTtcblxuICBsZXQge2RhdGEsIHdpdGhYU1JGVG9rZW4sIHhzcmZIZWFkZXJOYW1lLCB4c3JmQ29va2llTmFtZSwgaGVhZGVycywgYXV0aH0gPSBuZXdDb25maWc7XG5cbiAgbmV3Q29uZmlnLmhlYWRlcnMgPSBoZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShoZWFkZXJzKTtcblxuICBuZXdDb25maWcudXJsID0gYnVpbGRVUkwoYnVpbGRGdWxsUGF0aChuZXdDb25maWcuYmFzZVVSTCwgbmV3Q29uZmlnLnVybCksIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcblxuICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gIGlmIChhdXRoKSB7XG4gICAgaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmFzaWMgJyArXG4gICAgICBidG9hKChhdXRoLnVzZXJuYW1lIHx8ICcnKSArICc6JyArIChhdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgucGFzc3dvcmQpKSA6ICcnKSlcbiAgICApO1xuICB9XG5cbiAgbGV0IGNvbnRlbnRUeXBlO1xuXG4gIGlmICh1dGlscyQxLmlzRm9ybURhdGEoZGF0YSkpIHtcbiAgICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52IHx8IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudikge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSh1bmRlZmluZWQpOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfSBlbHNlIGlmICgoY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkpICE9PSBmYWxzZSkge1xuICAgICAgLy8gZml4IHNlbWljb2xvbiBkdXBsaWNhdGlvbiBpc3N1ZSBmb3IgUmVhY3ROYXRpdmUgRm9ybURhdGEgaW1wbGVtZW50YXRpb25cbiAgICAgIGNvbnN0IFt0eXBlLCAuLi50b2tlbnNdID0gY29udGVudFR5cGUgPyBjb250ZW50VHlwZS5zcGxpdCgnOycpLm1hcCh0b2tlbiA9PiB0b2tlbi50cmltKCkpLmZpbHRlcihCb29sZWFuKSA6IFtdO1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZShbdHlwZSB8fCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsIC4uLnRva2Vuc10uam9pbignOyAnKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuXG4gIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYpIHtcbiAgICB3aXRoWFNSRlRva2VuICYmIHV0aWxzJDEuaXNGdW5jdGlvbih3aXRoWFNSRlRva2VuKSAmJiAod2l0aFhTUkZUb2tlbiA9IHdpdGhYU1JGVG9rZW4obmV3Q29uZmlnKSk7XG5cbiAgICBpZiAod2l0aFhTUkZUb2tlbiB8fCAod2l0aFhTUkZUb2tlbiAhPT0gZmFsc2UgJiYgaXNVUkxTYW1lT3JpZ2luKG5ld0NvbmZpZy51cmwpKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICBjb25zdCB4c3JmVmFsdWUgPSB4c3JmSGVhZGVyTmFtZSAmJiB4c3JmQ29va2llTmFtZSAmJiBjb29raWVzLnJlYWQoeHNyZkNvb2tpZU5hbWUpO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIGhlYWRlcnMuc2V0KHhzcmZIZWFkZXJOYW1lLCB4c3JmVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdDb25maWc7XG59O1xuXG5jb25zdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnO1xuXG52YXIgeGhyQWRhcHRlciA9IGlzWEhSQWRhcHRlclN1cHBvcnRlZCAmJiBmdW5jdGlvbiAoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBkaXNwYXRjaFhoclJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgY29uc3QgX2NvbmZpZyA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcbiAgICBsZXQgcmVxdWVzdERhdGEgPSBfY29uZmlnLmRhdGE7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKF9jb25maWcuaGVhZGVycykubm9ybWFsaXplKCk7XG4gICAgbGV0IHtyZXNwb25zZVR5cGV9ID0gX2NvbmZpZztcbiAgICBsZXQgb25DYW5jZWxlZDtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgaWYgKF9jb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAgIF9jb25maWcuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHJlcXVlc3Qub3BlbihfY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBfY29uZmlnLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IF9jb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShcbiAgICAgICAgJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCAmJiByZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gIXJlc3BvbnNlVHlwZSB8fCByZXNwb25zZVR5cGUgPT09ICd0ZXh0JyB8fCByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShmdW5jdGlvbiBfcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgZnVuY3Rpb24gX3JlamVjdChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsIF9jb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBfY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIGxldCB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIF9jb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBfY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgIGlmIChfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBfY29uZmlnLFxuICAgICAgICByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgcmVxdWVzdERhdGEgPT09IHVuZGVmaW5lZCAmJiByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShudWxsKTtcblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscyQxLmZvckVhY2gocmVxdWVzdEhlYWRlcnMudG9KU09OKCksIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoX2NvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhX2NvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gX2NvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmICh0eXBlb2YgX2NvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBwcm9ncmVzc0V2ZW50UmVkdWNlcihfY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSkpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBfY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoX2NvbmZpZy5vblVwbG9hZFByb2dyZXNzKSk7XG4gICAgfVxuXG4gICAgaWYgKF9jb25maWcuY2FuY2VsVG9rZW4gfHwgX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gY2FuY2VsID0+IHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdCghY2FuY2VsIHx8IGNhbmNlbC50eXBlID8gbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnLCByZXF1ZXN0KSA6IGNhbmNlbCk7XG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAgIF9jb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBfY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VQcm90b2NvbChfY29uZmlnLnVybCk7XG5cbiAgICBpZiAocHJvdG9jb2wgJiYgcGxhdGZvcm0ucHJvdG9jb2xzLmluZGV4T2YocHJvdG9jb2wpID09PSAtMSkge1xuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBjb25maWcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEgfHwgbnVsbCk7XG4gIH0pO1xufTtcblxuY29uc3QgY29tcG9zZVNpZ25hbHMgPSAoc2lnbmFscywgdGltZW91dCkgPT4ge1xuICBsZXQgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICBsZXQgYWJvcnRlZDtcblxuICBjb25zdCBvbmFib3J0ID0gZnVuY3Rpb24gKGNhbmNlbCkge1xuICAgIGlmICghYWJvcnRlZCkge1xuICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgY29uc3QgZXJyID0gY2FuY2VsIGluc3RhbmNlb2YgRXJyb3IgPyBjYW5jZWwgOiB0aGlzLnJlYXNvbjtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoZXJyIGluc3RhbmNlb2YgQXhpb3NFcnJvciA/IGVyciA6IG5ldyBDYW5jZWxlZEVycm9yKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBlcnIpKTtcbiAgICB9XG4gIH07XG5cbiAgbGV0IHRpbWVyID0gdGltZW91dCAmJiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBvbmFib3J0KG5ldyBBeGlvc0Vycm9yKGB0aW1lb3V0ICR7dGltZW91dH0gb2YgbXMgZXhjZWVkZWRgLCBBeGlvc0Vycm9yLkVUSU1FRE9VVCkpO1xuICB9LCB0aW1lb3V0KTtcblxuICBjb25zdCB1bnN1YnNjcmliZSA9ICgpID0+IHtcbiAgICBpZiAoc2lnbmFscykge1xuICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgIHNpZ25hbHMuZm9yRWFjaChzaWduYWwgPT4ge1xuICAgICAgICBzaWduYWwgJiZcbiAgICAgICAgKHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyID8gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkgOiBzaWduYWwudW5zdWJzY3JpYmUob25hYm9ydCkpO1xuICAgICAgfSk7XG4gICAgICBzaWduYWxzID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgc2lnbmFscy5mb3JFYWNoKChzaWduYWwpID0+IHNpZ25hbCAmJiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KSk7XG5cbiAgY29uc3Qge3NpZ25hbH0gPSBjb250cm9sbGVyO1xuXG4gIHNpZ25hbC51bnN1YnNjcmliZSA9IHVuc3Vic2NyaWJlO1xuXG4gIHJldHVybiBbc2lnbmFsLCAoKSA9PiB7XG4gICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICB0aW1lciA9IG51bGw7XG4gIH1dO1xufTtcblxudmFyIGNvbXBvc2VTaWduYWxzJDEgPSBjb21wb3NlU2lnbmFscztcblxuY29uc3Qgc3RyZWFtQ2h1bmsgPSBmdW5jdGlvbiogKGNodW5rLCBjaHVua1NpemUpIHtcbiAgbGV0IGxlbiA9IGNodW5rLmJ5dGVMZW5ndGg7XG5cbiAgaWYgKCFjaHVua1NpemUgfHwgbGVuIDwgY2h1bmtTaXplKSB7XG4gICAgeWllbGQgY2h1bms7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHBvcyA9IDA7XG4gIGxldCBlbmQ7XG5cbiAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgIGVuZCA9IHBvcyArIGNodW5rU2l6ZTtcbiAgICB5aWVsZCBjaHVuay5zbGljZShwb3MsIGVuZCk7XG4gICAgcG9zID0gZW5kO1xuICB9XG59O1xuXG5jb25zdCByZWFkQnl0ZXMgPSBhc3luYyBmdW5jdGlvbiogKGl0ZXJhYmxlLCBjaHVua1NpemUsIGVuY29kZSkge1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGl0ZXJhYmxlKSB7XG4gICAgeWllbGQqIHN0cmVhbUNodW5rKEFycmF5QnVmZmVyLmlzVmlldyhjaHVuaykgPyBjaHVuayA6IChhd2FpdCBlbmNvZGUoU3RyaW5nKGNodW5rKSkpLCBjaHVua1NpemUpO1xuICB9XG59O1xuXG5jb25zdCB0cmFja1N0cmVhbSA9IChzdHJlYW0sIGNodW5rU2l6ZSwgb25Qcm9ncmVzcywgb25GaW5pc2gsIGVuY29kZSkgPT4ge1xuICBjb25zdCBpdGVyYXRvciA9IHJlYWRCeXRlcyhzdHJlYW0sIGNodW5rU2l6ZSwgZW5jb2RlKTtcblxuICBsZXQgYnl0ZXMgPSAwO1xuXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgIHR5cGU6ICdieXRlcycsXG5cbiAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgIGNvbnN0IHtkb25lLCB2YWx1ZX0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgb25GaW5pc2goKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgbGVuID0gdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgIG9uUHJvZ3Jlc3MgJiYgb25Qcm9ncmVzcyhieXRlcyArPSBsZW4pO1xuICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSk7XG4gICAgfSxcbiAgICBjYW5jZWwocmVhc29uKSB7XG4gICAgICBvbkZpbmlzaChyZWFzb24pO1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yLnJldHVybigpO1xuICAgIH1cbiAgfSwge1xuICAgIGhpZ2hXYXRlck1hcms6IDJcbiAgfSlcbn07XG5cbmNvbnN0IGZldGNoUHJvZ3Jlc3NEZWNvcmF0b3IgPSAodG90YWwsIGZuKSA9PiB7XG4gIGNvbnN0IGxlbmd0aENvbXB1dGFibGUgPSB0b3RhbCAhPSBudWxsO1xuICByZXR1cm4gKGxvYWRlZCkgPT4gc2V0VGltZW91dCgoKSA9PiBmbih7XG4gICAgbGVuZ3RoQ29tcHV0YWJsZSxcbiAgICB0b3RhbCxcbiAgICBsb2FkZWRcbiAgfSkpO1xufTtcblxuY29uc3QgaXNGZXRjaFN1cHBvcnRlZCA9IHR5cGVvZiBmZXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgUmVxdWVzdCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgUmVzcG9uc2UgPT09ICdmdW5jdGlvbic7XG5jb25zdCBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkID0gaXNGZXRjaFN1cHBvcnRlZCAmJiB0eXBlb2YgUmVhZGFibGVTdHJlYW0gPT09ICdmdW5jdGlvbic7XG5cbi8vIHVzZWQgb25seSBpbnNpZGUgdGhlIGZldGNoIGFkYXB0ZXJcbmNvbnN0IGVuY29kZVRleHQgPSBpc0ZldGNoU3VwcG9ydGVkICYmICh0eXBlb2YgVGV4dEVuY29kZXIgPT09ICdmdW5jdGlvbicgP1xuICAgICgoZW5jb2RlcikgPT4gKHN0cikgPT4gZW5jb2Rlci5lbmNvZGUoc3RyKSkobmV3IFRleHRFbmNvZGVyKCkpIDpcbiAgICBhc3luYyAoc3RyKSA9PiBuZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVzcG9uc2Uoc3RyKS5hcnJheUJ1ZmZlcigpKVxuKTtcblxuY29uc3Qgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtID0gaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCAmJiAoKCkgPT4ge1xuICBsZXQgZHVwbGV4QWNjZXNzZWQgPSBmYWxzZTtcblxuICBjb25zdCBoYXNDb250ZW50VHlwZSA9IG5ldyBSZXF1ZXN0KHBsYXRmb3JtLm9yaWdpbiwge1xuICAgIGJvZHk6IG5ldyBSZWFkYWJsZVN0cmVhbSgpLFxuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGdldCBkdXBsZXgoKSB7XG4gICAgICBkdXBsZXhBY2Nlc3NlZCA9IHRydWU7XG4gICAgICByZXR1cm4gJ2hhbGYnO1xuICAgIH0sXG4gIH0pLmhlYWRlcnMuaGFzKCdDb250ZW50LVR5cGUnKTtcblxuICByZXR1cm4gZHVwbGV4QWNjZXNzZWQgJiYgIWhhc0NvbnRlbnRUeXBlO1xufSkoKTtcblxuY29uc3QgREVGQVVMVF9DSFVOS19TSVpFID0gNjQgKiAxMDI0O1xuXG5jb25zdCBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtID0gaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCAmJiAhISgoKT0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdXRpbHMkMS5pc1JlYWRhYmxlU3RyZWFtKG5ldyBSZXNwb25zZSgnJykuYm9keSk7XG4gIH0gY2F0Y2goZXJyKSB7XG4gICAgLy8gcmV0dXJuIHVuZGVmaW5lZFxuICB9XG59KSgpO1xuXG5jb25zdCByZXNvbHZlcnMgPSB7XG4gIHN0cmVhbTogc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAoKHJlcykgPT4gcmVzLmJvZHkpXG59O1xuXG5pc0ZldGNoU3VwcG9ydGVkICYmICgoKHJlcykgPT4ge1xuICBbJ3RleHQnLCAnYXJyYXlCdWZmZXInLCAnYmxvYicsICdmb3JtRGF0YScsICdzdHJlYW0nXS5mb3JFYWNoKHR5cGUgPT4ge1xuICAgICFyZXNvbHZlcnNbdHlwZV0gJiYgKHJlc29sdmVyc1t0eXBlXSA9IHV0aWxzJDEuaXNGdW5jdGlvbihyZXNbdHlwZV0pID8gKHJlcykgPT4gcmVzW3R5cGVdKCkgOlxuICAgICAgKF8sIGNvbmZpZykgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgUmVzcG9uc2UgdHlwZSAnJHt0eXBlfScgaXMgbm90IHN1cHBvcnRlZGAsIEF4aW9zRXJyb3IuRVJSX05PVF9TVVBQT1JULCBjb25maWcpO1xuICAgICAgfSk7XG4gIH0pO1xufSkobmV3IFJlc3BvbnNlKSk7XG5cbmNvbnN0IGdldEJvZHlMZW5ndGggPSBhc3luYyAoYm9keSkgPT4ge1xuICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZih1dGlscyQxLmlzQmxvYihib2R5KSkge1xuICAgIHJldHVybiBib2R5LnNpemU7XG4gIH1cblxuICBpZih1dGlscyQxLmlzU3BlY0NvbXBsaWFudEZvcm0oYm9keSkpIHtcbiAgICByZXR1cm4gKGF3YWl0IG5ldyBSZXF1ZXN0KGJvZHkpLmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7XG4gIH1cblxuICBpZih1dGlscyQxLmlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNVUkxTZWFyY2hQYXJhbXMoYm9keSkpIHtcbiAgICBib2R5ID0gYm9keSArICcnO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc1N0cmluZyhib2R5KSkge1xuICAgIHJldHVybiAoYXdhaXQgZW5jb2RlVGV4dChib2R5KSkuYnl0ZUxlbmd0aDtcbiAgfVxufTtcblxuY29uc3QgcmVzb2x2ZUJvZHlMZW5ndGggPSBhc3luYyAoaGVhZGVycywgYm9keSkgPT4ge1xuICBjb25zdCBsZW5ndGggPSB1dGlscyQxLnRvRmluaXRlTnVtYmVyKGhlYWRlcnMuZ2V0Q29udGVudExlbmd0aCgpKTtcblxuICByZXR1cm4gbGVuZ3RoID09IG51bGwgPyBnZXRCb2R5TGVuZ3RoKGJvZHkpIDogbGVuZ3RoO1xufTtcblxudmFyIGZldGNoQWRhcHRlciA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKGFzeW5jIChjb25maWcpID0+IHtcbiAgbGV0IHtcbiAgICB1cmwsXG4gICAgbWV0aG9kLFxuICAgIGRhdGEsXG4gICAgc2lnbmFsLFxuICAgIGNhbmNlbFRva2VuLFxuICAgIHRpbWVvdXQsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgcmVzcG9uc2VUeXBlLFxuICAgIGhlYWRlcnMsXG4gICAgd2l0aENyZWRlbnRpYWxzID0gJ3NhbWUtb3JpZ2luJyxcbiAgICBmZXRjaE9wdGlvbnNcbiAgfSA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcblxuICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgPyAocmVzcG9uc2VUeXBlICsgJycpLnRvTG93ZXJDYXNlKCkgOiAndGV4dCc7XG5cbiAgbGV0IFtjb21wb3NlZFNpZ25hbCwgc3RvcFRpbWVvdXRdID0gKHNpZ25hbCB8fCBjYW5jZWxUb2tlbiB8fCB0aW1lb3V0KSA/XG4gICAgY29tcG9zZVNpZ25hbHMkMShbc2lnbmFsLCBjYW5jZWxUb2tlbl0sIHRpbWVvdXQpIDogW107XG5cbiAgbGV0IGZpbmlzaGVkLCByZXF1ZXN0O1xuXG4gIGNvbnN0IG9uRmluaXNoID0gKCkgPT4ge1xuICAgICFmaW5pc2hlZCAmJiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbXBvc2VkU2lnbmFsICYmIGNvbXBvc2VkU2lnbmFsLnVuc3Vic2NyaWJlKCk7XG4gICAgfSk7XG5cbiAgICBmaW5pc2hlZCA9IHRydWU7XG4gIH07XG5cbiAgbGV0IHJlcXVlc3RDb250ZW50TGVuZ3RoO1xuXG4gIHRyeSB7XG4gICAgaWYgKFxuICAgICAgb25VcGxvYWRQcm9ncmVzcyAmJiBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gJiYgbWV0aG9kICE9PSAnZ2V0JyAmJiBtZXRob2QgIT09ICdoZWFkJyAmJlxuICAgICAgKHJlcXVlc3RDb250ZW50TGVuZ3RoID0gYXdhaXQgcmVzb2x2ZUJvZHlMZW5ndGgoaGVhZGVycywgZGF0YSkpICE9PSAwXG4gICAgKSB7XG4gICAgICBsZXQgX3JlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAgIGR1cGxleDogXCJoYWxmXCJcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgY29udGVudFR5cGVIZWFkZXI7XG5cbiAgICAgIGlmICh1dGlscyQxLmlzRm9ybURhdGEoZGF0YSkgJiYgKGNvbnRlbnRUeXBlSGVhZGVyID0gX3JlcXVlc3QuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSkge1xuICAgICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlSGVhZGVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF9yZXF1ZXN0LmJvZHkpIHtcbiAgICAgICAgZGF0YSA9IHRyYWNrU3RyZWFtKF9yZXF1ZXN0LmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgZmV0Y2hQcm9ncmVzc0RlY29yYXRvcihcbiAgICAgICAgICByZXF1ZXN0Q29udGVudExlbmd0aCxcbiAgICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihvblVwbG9hZFByb2dyZXNzKVxuICAgICAgICApLCBudWxsLCBlbmNvZGVUZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXV0aWxzJDEuaXNTdHJpbmcod2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgd2l0aENyZWRlbnRpYWxzID0gd2l0aENyZWRlbnRpYWxzID8gJ2NvcnMnIDogJ29taXQnO1xuICAgIH1cblxuICAgIHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgIC4uLmZldGNoT3B0aW9ucyxcbiAgICAgIHNpZ25hbDogY29tcG9zZWRTaWduYWwsXG4gICAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgaGVhZGVyczogaGVhZGVycy5ub3JtYWxpemUoKS50b0pTT04oKSxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICBkdXBsZXg6IFwiaGFsZlwiLFxuICAgICAgd2l0aENyZWRlbnRpYWxzXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChyZXF1ZXN0KTtcblxuICAgIGNvbnN0IGlzU3RyZWFtUmVzcG9uc2UgPSBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChyZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3Jlc3BvbnNlJyk7XG5cbiAgICBpZiAoc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAob25Eb3dubG9hZFByb2dyZXNzIHx8IGlzU3RyZWFtUmVzcG9uc2UpKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge307XG5cbiAgICAgIFsnc3RhdHVzJywgJ3N0YXR1c1RleHQnLCAnaGVhZGVycyddLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgIG9wdGlvbnNbcHJvcF0gPSByZXNwb25zZVtwcm9wXTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXNwb25zZUNvbnRlbnRMZW5ndGggPSB1dGlscyQxLnRvRmluaXRlTnVtYmVyKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LWxlbmd0aCcpKTtcblxuICAgICAgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoXG4gICAgICAgIHRyYWNrU3RyZWFtKHJlc3BvbnNlLmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgb25Eb3dubG9hZFByb2dyZXNzICYmIGZldGNoUHJvZ3Jlc3NEZWNvcmF0b3IoXG4gICAgICAgICAgcmVzcG9uc2VDb250ZW50TGVuZ3RoLFxuICAgICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSlcbiAgICAgICAgKSwgaXNTdHJlYW1SZXNwb25zZSAmJiBvbkZpbmlzaCwgZW5jb2RlVGV4dCksXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlIHx8ICd0ZXh0JztcblxuICAgIGxldCByZXNwb25zZURhdGEgPSBhd2FpdCByZXNvbHZlcnNbdXRpbHMkMS5maW5kS2V5KHJlc29sdmVycywgcmVzcG9uc2VUeXBlKSB8fCAndGV4dCddKHJlc3BvbnNlLCBjb25maWcpO1xuXG4gICAgIWlzU3RyZWFtUmVzcG9uc2UgJiYgb25GaW5pc2goKTtcblxuICAgIHN0b3BUaW1lb3V0ICYmIHN0b3BUaW1lb3V0KCk7XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIGhlYWRlcnM6IEF4aW9zSGVhZGVycyQxLmZyb20ocmVzcG9uc2UuaGVhZGVycyksXG4gICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3RcbiAgICAgIH0pO1xuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG9uRmluaXNoKCk7XG5cbiAgICBpZiAoZXJyICYmIGVyci5uYW1lID09PSAnVHlwZUVycm9yJyAmJiAvZmV0Y2gvaS50ZXN0KGVyci5tZXNzYWdlKSkge1xuICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgbmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpLFxuICAgICAgICB7XG4gICAgICAgICAgY2F1c2U6IGVyci5jYXVzZSB8fCBlcnJcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cblxuICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlcnIsIGVyciAmJiBlcnIuY29kZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgfVxufSk7XG5cbmNvbnN0IGtub3duQWRhcHRlcnMgPSB7XG4gIGh0dHA6IGh0dHBBZGFwdGVyLFxuICB4aHI6IHhockFkYXB0ZXIsXG4gIGZldGNoOiBmZXRjaEFkYXB0ZXJcbn07XG5cbnV0aWxzJDEuZm9yRWFjaChrbm93bkFkYXB0ZXJzLCAoZm4sIHZhbHVlKSA9PiB7XG4gIGlmIChmbikge1xuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICduYW1lJywge3ZhbHVlfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ2FkYXB0ZXJOYW1lJywge3ZhbHVlfSk7XG4gIH1cbn0pO1xuXG5jb25zdCByZW5kZXJSZWFzb24gPSAocmVhc29uKSA9PiBgLSAke3JlYXNvbn1gO1xuXG5jb25zdCBpc1Jlc29sdmVkSGFuZGxlID0gKGFkYXB0ZXIpID0+IHV0aWxzJDEuaXNGdW5jdGlvbihhZGFwdGVyKSB8fCBhZGFwdGVyID09PSBudWxsIHx8IGFkYXB0ZXIgPT09IGZhbHNlO1xuXG52YXIgYWRhcHRlcnMgPSB7XG4gIGdldEFkYXB0ZXI6IChhZGFwdGVycykgPT4ge1xuICAgIGFkYXB0ZXJzID0gdXRpbHMkMS5pc0FycmF5KGFkYXB0ZXJzKSA/IGFkYXB0ZXJzIDogW2FkYXB0ZXJzXTtcblxuICAgIGNvbnN0IHtsZW5ndGh9ID0gYWRhcHRlcnM7XG4gICAgbGV0IG5hbWVPckFkYXB0ZXI7XG4gICAgbGV0IGFkYXB0ZXI7XG5cbiAgICBjb25zdCByZWplY3RlZFJlYXNvbnMgPSB7fTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIG5hbWVPckFkYXB0ZXIgPSBhZGFwdGVyc1tpXTtcbiAgICAgIGxldCBpZDtcblxuICAgICAgYWRhcHRlciA9IG5hbWVPckFkYXB0ZXI7XG5cbiAgICAgIGlmICghaXNSZXNvbHZlZEhhbmRsZShuYW1lT3JBZGFwdGVyKSkge1xuICAgICAgICBhZGFwdGVyID0ga25vd25BZGFwdGVyc1soaWQgPSBTdHJpbmcobmFtZU9yQWRhcHRlcikpLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChhZGFwdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgVW5rbm93biBhZGFwdGVyICcke2lkfSdgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYWRhcHRlcikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmVqZWN0ZWRSZWFzb25zW2lkIHx8ICcjJyArIGldID0gYWRhcHRlcjtcbiAgICB9XG5cbiAgICBpZiAoIWFkYXB0ZXIpIHtcblxuICAgICAgY29uc3QgcmVhc29ucyA9IE9iamVjdC5lbnRyaWVzKHJlamVjdGVkUmVhc29ucylcbiAgICAgICAgLm1hcCgoW2lkLCBzdGF0ZV0pID0+IGBhZGFwdGVyICR7aWR9IGAgK1xuICAgICAgICAgIChzdGF0ZSA9PT0gZmFsc2UgPyAnaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQnIDogJ2lzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkJylcbiAgICAgICAgKTtcblxuICAgICAgbGV0IHMgPSBsZW5ndGggP1xuICAgICAgICAocmVhc29ucy5sZW5ndGggPiAxID8gJ3NpbmNlIDpcXG4nICsgcmVhc29ucy5tYXAocmVuZGVyUmVhc29uKS5qb2luKCdcXG4nKSA6ICcgJyArIHJlbmRlclJlYXNvbihyZWFzb25zWzBdKSkgOlxuICAgICAgICAnYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQnO1xuXG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgYFRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgYCArIHMsXG4gICAgICAgICdFUlJfTk9UX1NVUFBPUlQnXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhZGFwdGVyO1xuICB9LFxuICBhZGFwdGVyczoga25vd25BZGFwdGVyc1xufTtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxuXG4gIGlmIChjb25maWcuc2lnbmFsICYmIGNvbmZpZy5zaWduYWwuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5mdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oY29uZmlnLmhlYWRlcnMpO1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgaWYgKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmRleE9mKGNvbmZpZy5tZXRob2QpICE9PSAtMSkge1xuICAgIGNvbmZpZy5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLCBmYWxzZSk7XG4gIH1cblxuICBjb25zdCBhZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcihjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cyQxLmFkYXB0ZXIpO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20ocmVzcG9uc2UuaGVhZGVycyk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShyZWFzb24ucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufVxuXG5jb25zdCBWRVJTSU9OID0gXCIxLjcuMlwiO1xuXG5jb25zdCB2YWxpZGF0b3JzJDEgPSB7fTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblsnb2JqZWN0JywgJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ2Z1bmN0aW9uJywgJ3N0cmluZycsICdzeW1ib2wnXS5mb3JFYWNoKCh0eXBlLCBpKSA9PiB7XG4gIHZhbGlkYXRvcnMkMVt0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbmNvbnN0IGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKlxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzJDEudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gKHZhbHVlLCBvcHQsIG9wdHMpID0+IHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGFsbG93VW5rbm93blxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnLCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgfVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgY29uc3Qgb3B0ID0ga2V5c1tpXTtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSBzY2hlbWFbb3B0XTtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9uICcgKyBvcHQgKyAnIG11c3QgYmUgJyArIHJlc3VsdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04pO1xuICAgIH1cbiAgfVxufVxuXG52YXIgdmFsaWRhdG9yID0ge1xuICBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzOiB2YWxpZGF0b3JzJDFcbn07XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuY2xhc3MgQXhpb3Mge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZUNvbmZpZykge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIkMSgpLFxuICAgICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIkMSgpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBjb25maWdPclVybCBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gICAqIEBwYXJhbSB7P09iamVjdH0gY29uZmlnXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAgICovXG4gIGFzeW5jIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBsZXQgZHVtbXk7XG5cbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkdW1teSA9IHt9KSA6IChkdW1teSA9IG5ldyBFcnJvcigpKTtcblxuICAgICAgICAvLyBzbGljZSBvZmYgdGhlIEVycm9yOiAuLi4gbGluZVxuICAgICAgICBjb25zdCBzdGFjayA9IGR1bW15LnN0YWNrID8gZHVtbXkuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywgJycpIDogJyc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCFlcnIuc3RhY2spIHtcbiAgICAgICAgICAgIGVyci5zdGFjayA9IHN0YWNrO1xuICAgICAgICAgICAgLy8gbWF0Y2ggd2l0aG91dCB0aGUgMiB0b3Agc3RhY2sgbGluZXNcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YWNrICYmICFTdHJpbmcoZXJyLnN0YWNrKS5lbmRzV2l0aChzdGFjay5yZXBsYWNlKC9eLitcXG4uK1xcbi8sICcnKSkpIHtcbiAgICAgICAgICAgIGVyci5zdGFjayArPSAnXFxuJyArIHN0YWNrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGlnbm9yZSB0aGUgY2FzZSB3aGVyZSBcInN0YWNrXCIgaXMgYW4gdW4td3JpdGFibGUgcHJvcGVydHlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgICAgY29uZmlnLnVybCA9IGNvbmZpZ09yVXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgICB9XG5cbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gICAgY29uc3Qge3RyYW5zaXRpb25hbCwgcGFyYW1zU2VyaWFsaXplciwgaGVhZGVyc30gPSBjb25maWc7XG5cbiAgICBpZiAodHJhbnNpdGlvbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgZm9yY2VkSlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbilcbiAgICAgIH0sIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zU2VyaWFsaXplciAhPSBudWxsKSB7XG4gICAgICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKHBhcmFtc1NlcmlhbGl6ZXIpKSB7XG4gICAgICAgIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyID0ge1xuICAgICAgICAgIHNlcmlhbGl6ZTogcGFyYW1zU2VyaWFsaXplclxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMocGFyYW1zU2VyaWFsaXplciwge1xuICAgICAgICAgIGVuY29kZTogdmFsaWRhdG9ycy5mdW5jdGlvbixcbiAgICAgICAgICBzZXJpYWxpemU6IHZhbGlkYXRvcnMuZnVuY3Rpb25cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgICBjb25maWcubWV0aG9kID0gKGNvbmZpZy5tZXRob2QgfHwgdGhpcy5kZWZhdWx0cy5tZXRob2QgfHwgJ2dldCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgICBsZXQgY29udGV4dEhlYWRlcnMgPSBoZWFkZXJzICYmIHV0aWxzJDEubWVyZ2UoXG4gICAgICBoZWFkZXJzLmNvbW1vbixcbiAgICAgIGhlYWRlcnNbY29uZmlnLm1ldGhvZF1cbiAgICApO1xuXG4gICAgaGVhZGVycyAmJiB1dGlscyQxLmZvckVhY2goXG4gICAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICAgIChtZXRob2QpID0+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5jb25jYXQoY29udGV4dEhlYWRlcnMsIGhlYWRlcnMpO1xuXG4gICAgLy8gZmlsdGVyIG91dCBza2lwcGVkIGludGVyY2VwdG9yc1xuICAgIGNvbnN0IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgbGV0IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHRydWU7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGxldCBwcm9taXNlO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgbGVuO1xuXG4gICAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdC5iaW5kKHRoaXMpLCB1bmRlZmluZWRdO1xuICAgICAgY2hhaW4udW5zaGlmdC5hcHBseShjaGFpbiwgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgY2hhaW4ucHVzaC5hcHBseShjaGFpbiwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGxlbiA9IGNoYWluLmxlbmd0aDtcblxuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gICAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluW2krK10sIGNoYWluW2krK10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG5cbiAgICBsZW4gPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICBsZXQgbmV3Q29uZmlnID0gY29uZmlnO1xuXG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgY29uc3Qgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgY29uc3Qgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICB0cnkge1xuICAgICAgICBuZXdDb25maWcgPSBvbkZ1bGZpbGxlZChuZXdDb25maWcpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgb25SZWplY3RlZC5jYWxsKHRoaXMsIGVycm9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QuY2FsbCh0aGlzLCBuZXdDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIGkgPSAwO1xuICAgIGxlbiA9IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgZ2V0VXJpKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICByZXR1cm4gYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcbiAgfVxufVxuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzJDEuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscyQxLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxudmFyIEF4aW9zJDEgPSBBeGlvcztcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsVG9rZW59XG4gKi9cbmNsYXNzIENhbmNlbFRva2VuIHtcbiAgY29uc3RydWN0b3IoZXhlY3V0b3IpIHtcbiAgICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVQcm9taXNlO1xuXG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRva2VuID0gdGhpcztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4oY2FuY2VsID0+IHtcbiAgICAgIGlmICghdG9rZW4uX2xpc3RlbmVycykgcmV0dXJuO1xuXG4gICAgICBsZXQgaSA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgICB0b2tlbi5fbGlzdGVuZXJzW2ldKGNhbmNlbCk7XG4gICAgICB9XG4gICAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgICB9KTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4gPSBvbmZ1bGZpbGxlZCA9PiB7XG4gICAgICBsZXQgX3Jlc29sdmU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICB0b2tlbi5zdWJzY3JpYmUocmVzb2x2ZSk7XG4gICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgICBwcm9taXNlLmNhbmNlbCA9IGZ1bmN0aW9uIHJlamVjdCgpIHtcbiAgICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gICAqL1xuICB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgdGhyb3cgdGhpcy5yZWFzb247XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIGxpc3RlbmVyKHRoaXMucmVhc29uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtsaXN0ZW5lcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICAgKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICAgKi9cbiAgc3RhdGljIHNvdXJjZSgpIHtcbiAgICBsZXQgY2FuY2VsO1xuICAgIGNvbnN0IHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICAgIGNhbmNlbCA9IGM7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuLFxuICAgICAgY2FuY2VsXG4gICAgfTtcbiAgfVxufVxuXG52YXIgQ2FuY2VsVG9rZW4kMSA9IENhbmNlbFRva2VuO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBeGlvc0Vycm9yKHBheWxvYWQpIHtcbiAgcmV0dXJuIHV0aWxzJDEuaXNPYmplY3QocGF5bG9hZCkgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn1cblxuY29uc3QgSHR0cFN0YXR1c0NvZGUgPSB7XG4gIENvbnRpbnVlOiAxMDAsXG4gIFN3aXRjaGluZ1Byb3RvY29sczogMTAxLFxuICBQcm9jZXNzaW5nOiAxMDIsXG4gIEVhcmx5SGludHM6IDEwMyxcbiAgT2s6IDIwMCxcbiAgQ3JlYXRlZDogMjAxLFxuICBBY2NlcHRlZDogMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246IDIwMyxcbiAgTm9Db250ZW50OiAyMDQsXG4gIFJlc2V0Q29udGVudDogMjA1LFxuICBQYXJ0aWFsQ29udGVudDogMjA2LFxuICBNdWx0aVN0YXR1czogMjA3LFxuICBBbHJlYWR5UmVwb3J0ZWQ6IDIwOCxcbiAgSW1Vc2VkOiAyMjYsXG4gIE11bHRpcGxlQ2hvaWNlczogMzAwLFxuICBNb3ZlZFBlcm1hbmVudGx5OiAzMDEsXG4gIEZvdW5kOiAzMDIsXG4gIFNlZU90aGVyOiAzMDMsXG4gIE5vdE1vZGlmaWVkOiAzMDQsXG4gIFVzZVByb3h5OiAzMDUsXG4gIFVudXNlZDogMzA2LFxuICBUZW1wb3JhcnlSZWRpcmVjdDogMzA3LFxuICBQZXJtYW5lbnRSZWRpcmVjdDogMzA4LFxuICBCYWRSZXF1ZXN0OiA0MDAsXG4gIFVuYXV0aG9yaXplZDogNDAxLFxuICBQYXltZW50UmVxdWlyZWQ6IDQwMixcbiAgRm9yYmlkZGVuOiA0MDMsXG4gIE5vdEZvdW5kOiA0MDQsXG4gIE1ldGhvZE5vdEFsbG93ZWQ6IDQwNSxcbiAgTm90QWNjZXB0YWJsZTogNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDQwNyxcbiAgUmVxdWVzdFRpbWVvdXQ6IDQwOCxcbiAgQ29uZmxpY3Q6IDQwOSxcbiAgR29uZTogNDEwLFxuICBMZW5ndGhSZXF1aXJlZDogNDExLFxuICBQcmVjb25kaXRpb25GYWlsZWQ6IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlOiA0MTMsXG4gIFVyaVRvb0xvbmc6IDQxNCxcbiAgVW5zdXBwb3J0ZWRNZWRpYVR5cGU6IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZTogNDE2LFxuICBFeHBlY3RhdGlvbkZhaWxlZDogNDE3LFxuICBJbUFUZWFwb3Q6IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0OiA0MjEsXG4gIFVucHJvY2Vzc2FibGVFbnRpdHk6IDQyMixcbiAgTG9ja2VkOiA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3k6IDQyNCxcbiAgVG9vRWFybHk6IDQyNSxcbiAgVXBncmFkZVJlcXVpcmVkOiA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkOiA0MjgsXG4gIFRvb01hbnlSZXF1ZXN0czogNDI5LFxuICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6IDQ1MSxcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvcjogNTAwLFxuICBOb3RJbXBsZW1lbnRlZDogNTAxLFxuICBCYWRHYXRld2F5OiA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZTogNTAzLFxuICBHYXRld2F5VGltZW91dDogNTA0LFxuICBIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDogNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXM6IDUwNixcbiAgSW5zdWZmaWNpZW50U3RvcmFnZTogNTA3LFxuICBMb29wRGV0ZWN0ZWQ6IDUwOCxcbiAgTm90RXh0ZW5kZWQ6IDUxMCxcbiAgTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDUxMSxcbn07XG5cbk9iamVjdC5lbnRyaWVzKEh0dHBTdGF0dXNDb2RlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgSHR0cFN0YXR1c0NvZGVbdmFsdWVdID0ga2V5O1xufSk7XG5cbnZhciBIdHRwU3RhdHVzQ29kZSQxID0gSHR0cFN0YXR1c0NvZGU7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJucyB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBBeGlvcyQxKGRlZmF1bHRDb25maWcpO1xuICBjb25zdCBpbnN0YW5jZSA9IGJpbmQoQXhpb3MkMS5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMkMS5leHRlbmQoaW5zdGFuY2UsIEF4aW9zJDEucHJvdG90eXBlLCBjb250ZXh0LCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscyQxLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCwgbnVsbCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhkZWZhdWx0Q29uZmlnLCBpbnN0YW5jZUNvbmZpZykpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG5jb25zdCBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzJDEpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3MkMTtcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW4kMTtcbmF4aW9zLmlzQ2FuY2VsID0gaXNDYW5jZWw7XG5heGlvcy5WRVJTSU9OID0gVkVSU0lPTjtcbmF4aW9zLnRvRm9ybURhdGEgPSB0b0Zvcm1EYXRhO1xuXG4vLyBFeHBvc2UgQXhpb3NFcnJvciBjbGFzc1xuYXhpb3MuQXhpb3NFcnJvciA9IEF4aW9zRXJyb3I7XG5cbi8vIGFsaWFzIGZvciBDYW5jZWxlZEVycm9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5heGlvcy5DYW5jZWwgPSBheGlvcy5DYW5jZWxlZEVycm9yO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuXG5heGlvcy5zcHJlYWQgPSBzcHJlYWQ7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IGlzQXhpb3NFcnJvcjtcblxuLy8gRXhwb3NlIG1lcmdlQ29uZmlnXG5heGlvcy5tZXJnZUNvbmZpZyA9IG1lcmdlQ29uZmlnO1xuXG5heGlvcy5BeGlvc0hlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMTtcblxuYXhpb3MuZm9ybVRvSlNPTiA9IHRoaW5nID0+IGZvcm1EYXRhVG9KU09OKHV0aWxzJDEuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZSQxO1xuXG5heGlvcy5kZWZhdWx0ID0gYXhpb3M7XG5cbm1vZHVsZS5leHBvcnRzID0gYXhpb3M7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1heGlvcy5janMubWFwXG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkF4aW9zQ2xpZW50ID0gdm9pZCAwO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbnZhciBBeGlvc0NsaWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBBeGlvc0NsaWVudChfYSkge1xuICAgICAgICB2YXIgcmVzcG9uc2VIYW5kbGVyID0gX2EucmVzcG9uc2VIYW5kbGVyLCByZXF1ZXN0Q29uZmlnQnVpbGRlciA9IF9hLnJlcXVlc3RDb25maWdCdWlsZGVyO1xuICAgICAgICB0aGlzLnJlc3BvbnNlSGFuZGxlciA9IHJlc3BvbnNlSGFuZGxlcjtcbiAgICAgICAgdGhpcy5yZXF1ZXN0Q29uZmlnQnVpbGRlciA9IHJlcXVlc3RDb25maWdCdWlsZGVyO1xuICAgIH1cbiAgICBBeGlvc0NsaWVudC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHBhdGgsIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVxdWVzdENvbmZpZztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5yZXF1ZXN0Q29uZmlnQnVpbGRlci5idWlsZChcImdldFwiLCBwYXRoLCBwYXJhbXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENvbmZpZyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdENvbmZpZyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbMiAvKnJldHVybiovLCAoX2Euc2VudCgpKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQXhpb3NDbGllbnQucHJvdG90eXBlLmdldERhdGEgPSBmdW5jdGlvbiAocGF0aCwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXF1ZXN0Q29uZmlnO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnJlcXVlc3RDb25maWdCdWlsZGVyLmJ1aWxkKFwiZ2V0XCIsIHBhdGgsIHBhcmFtcywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJhcnJheWJ1ZmZlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q29uZmlnID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0Q29uZmlnKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIChfYS5zZW50KCkpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBBeGlvc0NsaWVudC5wcm90b3R5cGUucG9zdCA9IGZ1bmN0aW9uIChwYXRoLCBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlcXVlc3RDb25maWc7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMucmVxdWVzdENvbmZpZ0J1aWxkZXIuYnVpbGQoXCJwb3N0XCIsIHBhdGgsIHBhcmFtcyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q29uZmlnID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0Q29uZmlnKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIChfYS5zZW50KCkpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBBeGlvc0NsaWVudC5wcm90b3R5cGUucG9zdERhdGEgPSBmdW5jdGlvbiAocGF0aCwgZm9ybURhdGEpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlcXVlc3RDb25maWc7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMucmVxdWVzdENvbmZpZ0J1aWxkZXIuYnVpbGQoXCJwb3N0XCIsIHBhdGgsIGZvcm1EYXRhKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RDb25maWcgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnNlbmRSZXF1ZXN0KHJlcXVlc3RDb25maWcpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gWzIgLypyZXR1cm4qLywgKF9hLnNlbnQoKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEF4aW9zQ2xpZW50LnByb3RvdHlwZS5wdXQgPSBmdW5jdGlvbiAocGF0aCwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXF1ZXN0Q29uZmlnO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnJlcXVlc3RDb25maWdCdWlsZGVyLmJ1aWxkKFwicHV0XCIsIHBhdGgsIHBhcmFtcyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q29uZmlnID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0Q29uZmlnKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIChfYS5zZW50KCkpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBBeGlvc0NsaWVudC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKHBhdGgsIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVxdWVzdENvbmZpZztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5yZXF1ZXN0Q29uZmlnQnVpbGRlci5idWlsZChcImRlbGV0ZVwiLCBwYXRoLCBwYXJhbXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENvbmZpZyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdENvbmZpZyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbMiAvKnJldHVybiovLCAoX2Euc2VudCgpKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQXhpb3NDbGllbnQucHJvdG90eXBlLnNlbmRSZXF1ZXN0ID0gZnVuY3Rpb24gKHJlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2VIYW5kbGVyLmhhbmRsZShcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcbiAgICAgICAgKDAsIGF4aW9zXzEuZGVmYXVsdCkoX19hc3NpZ24oX19hc3NpZ24oe30sIHJlcXVlc3RDb25maWcpLCB7IG1heEJvZHlMZW5ndGg6IEluZmluaXR5LCBtYXhDb250ZW50TGVuZ3RoOiBJbmZpbml0eSB9KSkpO1xuICAgIH07XG4gICAgcmV0dXJuIEF4aW9zQ2xpZW50O1xufSgpKTtcbmV4cG9ydHMuQXhpb3NDbGllbnQgPSBBeGlvc0NsaWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUF4aW9zQ2xpZW50LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EZWZhdWx0SHR0cENsaWVudCA9IHZvaWQgMDtcbnZhciBBeGlvc0NsaWVudF8xID0gcmVxdWlyZShcIi4vQXhpb3NDbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEZWZhdWx0SHR0cENsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQXhpb3NDbGllbnRfMS5BeGlvc0NsaWVudDsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL2V2YWwnKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gRXZhbEVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9yYW5nZScpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBSYW5nZUVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9yZWYnKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gUmVmZXJlbmNlRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL3N5bnRheCcpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBTeW50YXhFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vdHlwZScpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBUeXBlRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL3VyaScpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBVUklFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IGNvbXBsZXhpdHk6IFsyLCAxOF0sIG1heC1zdGF0ZW1lbnRzOiBbMiwgMzNdICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc1N5bWJvbHMoKSB7XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gJ3N5bWJvbCcpIHsgcmV0dXJuIHRydWU7IH1cblxuXHR2YXIgb2JqID0ge307XG5cdHZhciBzeW0gPSBTeW1ib2woJ3Rlc3QnKTtcblx0dmFyIHN5bU9iaiA9IE9iamVjdChzeW0pO1xuXHRpZiAodHlwZW9mIHN5bSA9PT0gJ3N0cmluZycpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzeW0pICE9PSAnW29iamVjdCBTeW1ib2xdJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzeW1PYmopICE9PSAnW29iamVjdCBTeW1ib2xdJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vbGpoYXJiL29iamVjdC5hc3NpZ24vaXNzdWVzLzE3XG5cdC8vIGlmIChzeW0gaW5zdGFuY2VvZiBTeW1ib2wpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIHRlbXAgZGlzYWJsZWQgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJSZWZsZWN0aW9uL2dldC1vd24tcHJvcGVydHktc3ltYm9scy9pc3N1ZXMvNFxuXHQvLyBpZiAoIShzeW1PYmogaW5zdGFuY2VvZiBTeW1ib2wpKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdC8vIGlmICh0eXBlb2YgU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0Ly8gaWYgKFN0cmluZyhzeW0pICE9PSBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltVmFsID0gNDI7XG5cdG9ialtzeW1dID0gc3ltVmFsO1xuXHRmb3IgKHN5bSBpbiBvYmopIHsgcmV0dXJuIGZhbHNlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLXVucmVhY2hhYmxlLWxvb3Bcblx0aWYgKHR5cGVvZiBPYmplY3Qua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzID09PSAnZnVuY3Rpb24nICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoICE9PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHZhciBzeW1zID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmopO1xuXHRpZiAoc3ltcy5sZW5ndGggIT09IDEgfHwgc3ltc1swXSAhPT0gc3ltKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iaiwgc3ltKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPT09ICdmdW5jdGlvbicpIHtcblx0XHR2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBzeW0pO1xuXHRcdGlmIChkZXNjcmlwdG9yLnZhbHVlICE9PSBzeW1WYWwgfHwgZGVzY3JpcHRvci5lbnVtZXJhYmxlICE9PSB0cnVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHR9XG5cblx0cmV0dXJuIHRydWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgb3JpZ1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbDtcbnZhciBoYXNTeW1ib2xTaGFtID0gcmVxdWlyZSgnLi9zaGFtcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc05hdGl2ZVN5bWJvbHMoKSB7XG5cdGlmICh0eXBlb2Ygb3JpZ1N5bWJvbCAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2Ygb3JpZ1N5bWJvbCgnZm9vJykgIT09ICdzeW1ib2wnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbCgnYmFyJykgIT09ICdzeW1ib2wnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHJldHVybiBoYXNTeW1ib2xTaGFtKCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdGVzdCA9IHtcblx0X19wcm90b19fOiBudWxsLFxuXHRmb286IHt9XG59O1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzUHJvdG8oKSB7XG5cdC8vIEB0cy1leHBlY3QtZXJyb3I6IFRTIGVycm9ycyBvbiBhbiBpbmhlcml0ZWQgcHJvcGVydHkgZm9yIHNvbWUgcmVhc29uXG5cdHJldHVybiB7IF9fcHJvdG9fXzogdGVzdCB9LmZvbyA9PT0gdGVzdC5mb29cblx0XHQmJiAhKHRlc3QgaW5zdGFuY2VvZiAkT2JqZWN0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBuby1pbnZhbGlkLXRoaXM6IDEgKi9cblxudmFyIEVSUk9SX01FU1NBR0UgPSAnRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAnO1xudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBmdW5jVHlwZSA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cbnZhciBjb25jYXR0eSA9IGZ1bmN0aW9uIGNvbmNhdHR5KGEsIGIpIHtcbiAgICB2YXIgYXJyID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgYXJyW2ldID0gYVtpXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBiLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIGFycltqICsgYS5sZW5ndGhdID0gYltqXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyO1xufTtcblxudmFyIHNsaWN5ID0gZnVuY3Rpb24gc2xpY3koYXJyTGlrZSwgb2Zmc2V0KSB7XG4gICAgdmFyIGFyciA9IFtdO1xuICAgIGZvciAodmFyIGkgPSBvZmZzZXQgfHwgMCwgaiA9IDA7IGkgPCBhcnJMaWtlLmxlbmd0aDsgaSArPSAxLCBqICs9IDEpIHtcbiAgICAgICAgYXJyW2pdID0gYXJyTGlrZVtpXTtcbiAgICB9XG4gICAgcmV0dXJuIGFycjtcbn07XG5cbnZhciBqb2lueSA9IGZ1bmN0aW9uIChhcnIsIGpvaW5lcikge1xuICAgIHZhciBzdHIgPSAnJztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBzdHIgKz0gYXJyW2ldO1xuICAgICAgICBpZiAoaSArIDEgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICBzdHIgKz0gam9pbmVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQodGhhdCkge1xuICAgIHZhciB0YXJnZXQgPSB0aGlzO1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHRvU3RyLmFwcGx5KHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY3koYXJndW1lbnRzLCAxKTtcblxuICAgIHZhciBib3VuZDtcbiAgICB2YXIgYmluZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgY29uY2F0dHkoYXJncywgYXJndW1lbnRzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChPYmplY3QocmVzdWx0KSA9PT0gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICB0aGF0LFxuICAgICAgICAgICAgY29uY2F0dHkoYXJncywgYXJndW1lbnRzKVxuICAgICAgICApO1xuXG4gICAgfTtcblxuICAgIHZhciBib3VuZExlbmd0aCA9IG1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzW2ldID0gJyQnICsgaTtcbiAgICB9XG5cbiAgICBib3VuZCA9IEZ1bmN0aW9uKCdiaW5kZXInLCAncmV0dXJuIGZ1bmN0aW9uICgnICsgam9pbnkoYm91bmRBcmdzLCAnLCcpICsgJyl7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9JykoYmluZGVyKTtcblxuICAgIGlmICh0YXJnZXQucHJvdG90eXBlKSB7XG4gICAgICAgIHZhciBFbXB0eSA9IGZ1bmN0aW9uIEVtcHR5KCkge307XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIGJvdW5kLnByb3RvdHlwZSA9IG5ldyBFbXB0eSgpO1xuICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBib3VuZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcbnZhciAkaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBiaW5kLmNhbGwoY2FsbCwgJGhhc093bik7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1bmRlZmluZWQ7XG5cbnZhciAkRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMnKTtcbnZhciAkRXZhbEVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL2V2YWwnKTtcbnZhciAkUmFuZ2VFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy9yYW5nZScpO1xudmFyICRSZWZlcmVuY2VFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy9yZWYnKTtcbnZhciAkU3ludGF4RXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvc3ludGF4Jyk7XG52YXIgJFR5cGVFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy90eXBlJyk7XG52YXIgJFVSSUVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3VyaScpO1xuXG52YXIgJEZ1bmN0aW9uID0gRnVuY3Rpb247XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG52YXIgaGFzUHJvdG8gPSByZXF1aXJlKCdoYXMtcHJvdG8nKSgpO1xuXG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgKFxuXHRoYXNQcm90b1xuXHRcdD8gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHguX19wcm90b19fOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblx0XHQ6IG51bGxcbik7XG5cbnZhciBuZWVkc0V2YWwgPSB7fTtcblxudmFyIFR5cGVkQXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgfHwgIWdldFByb3RvID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8oVWludDhBcnJheSk7XG5cbnZhciBJTlRSSU5TSUNTID0ge1xuXHRfX3Byb3RvX186IG51bGwsXG5cdCclQWdncmVnYXRlRXJyb3IlJzogdHlwZW9mIEFnZ3JlZ2F0ZUVycm9yID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFnZ3JlZ2F0ZUVycm9yLFxuXHQnJUFycmF5JSc6IEFycmF5LFxuXHQnJUFycmF5QnVmZmVyJSc6IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBcnJheUJ1ZmZlcixcblx0JyVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgJiYgZ2V0UHJvdG8gPyBnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJUFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlJzogbmVlZHNFdmFsLFxuXHQnJUF0b21pY3MlJzogdHlwZW9mIEF0b21pY3MgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQXRvbWljcyxcblx0JyVCaWdJbnQlJzogdHlwZW9mIEJpZ0ludCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBCaWdJbnQsXG5cdCclQmlnSW50NjRBcnJheSUnOiB0eXBlb2YgQmlnSW50NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBCaWdJbnQ2NEFycmF5LFxuXHQnJUJpZ1VpbnQ2NEFycmF5JSc6IHR5cGVvZiBCaWdVaW50NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBCaWdVaW50NjRBcnJheSxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6ICRFcnJvcixcblx0JyVldmFsJSc6IGV2YWwsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZXZhbFxuXHQnJUV2YWxFcnJvciUnOiAkRXZhbEVycm9yLFxuXHQnJUZsb2F0MzJBcnJheSUnOiB0eXBlb2YgRmxvYXQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0MzJBcnJheSxcblx0JyVGbG9hdDY0QXJyYXklJzogdHlwZW9mIEZsb2F0NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDY0QXJyYXksXG5cdCclRmluYWxpemF0aW9uUmVnaXN0cnklJzogdHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZpbmFsaXphdGlvblJlZ2lzdHJ5LFxuXHQnJUZ1bmN0aW9uJSc6ICRGdW5jdGlvbixcblx0JyVHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclSW50OEFycmF5JSc6IHR5cGVvZiBJbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50OEFycmF5LFxuXHQnJUludDE2QXJyYXklJzogdHlwZW9mIEludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50MTZBcnJheSxcblx0JyVJbnQzMkFycmF5JSc6IHR5cGVvZiBJbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDMyQXJyYXksXG5cdCclaXNGaW5pdGUlJzogaXNGaW5pdGUsXG5cdCclaXNOYU4lJzogaXNOYU4sXG5cdCclSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyAmJiBnZXRQcm90byA/IGdldFByb3RvKGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpIDogdW5kZWZpbmVkLFxuXHQnJUpTT04lJzogdHlwZW9mIEpTT04gPT09ICdvYmplY3QnID8gSlNPTiA6IHVuZGVmaW5lZCxcblx0JyVNYXAlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBNYXAsXG5cdCclTWFwSXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgfHwgIWdldFByb3RvID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6ICRSYW5nZUVycm9yLFxuXHQnJVJlZmVyZW5jZUVycm9yJSc6ICRSZWZlcmVuY2VFcnJvcixcblx0JyVSZWZsZWN0JSc6IHR5cGVvZiBSZWZsZWN0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFJlZmxlY3QsXG5cdCclUmVnRXhwJSc6IFJlZ0V4cCxcblx0JyVTZXQlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTZXQsXG5cdCclU2V0SXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgfHwgIWdldFByb3RvID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyAmJiBnZXRQcm90byA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogJFVSSUVycm9yLFxuXHQnJVdlYWtNYXAlJzogdHlwZW9mIFdlYWtNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha01hcCxcblx0JyVXZWFrUmVmJSc6IHR5cGVvZiBXZWFrUmVmID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtSZWYsXG5cdCclV2Vha1NldCUnOiB0eXBlb2YgV2Vha1NldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrU2V0XG59O1xuXG5pZiAoZ2V0UHJvdG8pIHtcblx0dHJ5IHtcblx0XHRudWxsLmVycm9yOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2hhZG93cmVhbG0vcHVsbC8zODQjaXNzdWVjb21tZW50LTEzNjQyNjQyMjlcblx0XHR2YXIgZXJyb3JQcm90byA9IGdldFByb3RvKGdldFByb3RvKGUpKTtcblx0XHRJTlRSSU5TSUNTWyclRXJyb3IucHJvdG90eXBlJSddID0gZXJyb3JQcm90bztcblx0fVxufVxuXG52YXIgZG9FdmFsID0gZnVuY3Rpb24gZG9FdmFsKG5hbWUpIHtcblx0dmFyIHZhbHVlO1xuXHRpZiAobmFtZSA9PT0gJyVBc3luY0Z1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignYXN5bmMgZnVuY3Rpb24gKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUdlbmVyYXRvckZ1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignZnVuY3Rpb24qICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignYXN5bmMgZnVuY3Rpb24qICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0dlbmVyYXRvciUnKSB7XG5cdFx0dmFyIGZuID0gZG9FdmFsKCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnKTtcblx0XHRpZiAoZm4pIHtcblx0XHRcdHZhbHVlID0gZm4ucHJvdG90eXBlO1xuXHRcdH1cblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlJykge1xuXHRcdHZhciBnZW4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvciUnKTtcblx0XHRpZiAoZ2VuICYmIGdldFByb3RvKSB7XG5cdFx0XHR2YWx1ZSA9IGdldFByb3RvKGdlbi5wcm90b3R5cGUpO1xuXHRcdH1cblx0fVxuXG5cdElOVFJJTlNJQ1NbbmFtZV0gPSB2YWx1ZTtcblxuXHRyZXR1cm4gdmFsdWU7XG59O1xuXG52YXIgTEVHQUNZX0FMSUFTRVMgPSB7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXNvd24nKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG52YXIgJGV4ZWMgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgUmVnRXhwLnByb3RvdHlwZS5leGVjKTtcblxuLyogYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvNC4xNy4xNS9kaXN0L2xvZGFzaC5qcyNMNjczNS1MNjc0NCAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14lLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCUkKSkvZztcbnZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZzsgLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgc3RyaW5nVG9QYXRoID0gZnVuY3Rpb24gc3RyaW5nVG9QYXRoKHN0cmluZykge1xuXHR2YXIgZmlyc3QgPSAkc3RyU2xpY2Uoc3RyaW5nLCAwLCAxKTtcblx0dmFyIGxhc3QgPSAkc3RyU2xpY2Uoc3RyaW5nLCAtMSk7XG5cdGlmIChmaXJzdCA9PT0gJyUnICYmIGxhc3QgIT09ICclJykge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgY2xvc2luZyBgJWAnKTtcblx0fSBlbHNlIGlmIChsYXN0ID09PSAnJScgJiYgZmlyc3QgIT09ICclJykge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgb3BlbmluZyBgJWAnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gW107XG5cdCRyZXBsYWNlKHN0cmluZywgcmVQcm9wTmFtZSwgZnVuY3Rpb24gKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcblx0XHRyZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSBxdW90ZSA/ICRyZXBsYWNlKHN1YlN0cmluZywgcmVFc2NhcGVDaGFyLCAnJDEnKSA6IG51bWJlciB8fCBtYXRjaDtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuLyogZW5kIGFkYXB0YXRpb24gKi9cblxudmFyIGdldEJhc2VJbnRyaW5zaWMgPSBmdW5jdGlvbiBnZXRCYXNlSW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHR2YXIgaW50cmluc2ljTmFtZSA9IG5hbWU7XG5cdHZhciBhbGlhcztcblx0aWYgKGhhc093bihMRUdBQ1lfQUxJQVNFUywgaW50cmluc2ljTmFtZSkpIHtcblx0XHRhbGlhcyA9IExFR0FDWV9BTElBU0VTW2ludHJpbnNpY05hbWVdO1xuXHRcdGludHJpbnNpY05hbWUgPSAnJScgKyBhbGlhc1swXSArICclJztcblx0fVxuXG5cdGlmIChoYXNPd24oSU5UUklOU0lDUywgaW50cmluc2ljTmFtZSkpIHtcblx0XHR2YXIgdmFsdWUgPSBJTlRSSU5TSUNTW2ludHJpbnNpY05hbWVdO1xuXHRcdGlmICh2YWx1ZSA9PT0gbmVlZHNFdmFsKSB7XG5cdFx0XHR2YWx1ZSA9IGRvRXZhbChpbnRyaW5zaWNOYW1lKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgJiYgIWFsbG93TWlzc2luZykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZXhpc3RzLCBidXQgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGZpbGUgYW4gaXNzdWUhJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGFsaWFzOiBhbGlhcyxcblx0XHRcdG5hbWU6IGludHJpbnNpY05hbWUsXG5cdFx0XHR2YWx1ZTogdmFsdWVcblx0XHR9O1xuXHR9XG5cblx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignaW50cmluc2ljICcgKyBuYW1lICsgJyBkb2VzIG5vdCBleGlzdCEnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0SW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHRpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IG5hbWUubGVuZ3RoID09PSAwKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2ludHJpbnNpYyBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHR5cGVvZiBhbGxvd01pc3NpbmcgIT09ICdib29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcImFsbG93TWlzc2luZ1wiIGFyZ3VtZW50IG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblxuXHRpZiAoJGV4ZWMoL14lP1teJV0qJT8kLywgbmFtZSkgPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdgJWAgbWF5IG5vdCBiZSBwcmVzZW50IGFueXdoZXJlIGJ1dCBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIGludHJpbnNpYyBuYW1lJyk7XG5cdH1cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpIHx8IGZhbHNlO1xuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9ICRkZWZpbmVQcm9wZXJ0eTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRnT1BEID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciUnLCB0cnVlKTtcblxuaWYgKCRnT1BEKSB7XG5cdHRyeSB7XG5cdFx0JGdPUEQoW10sICdsZW5ndGgnKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIElFIDggaGFzIGEgYnJva2VuIGdPUERcblx0XHQkZ09QRCA9IG51bGw7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSAkZ09QRDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJ2VzLWRlZmluZS1wcm9wZXJ0eScpO1xuXG52YXIgJFN5bnRheEVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3N5bnRheCcpO1xudmFyICRUeXBlRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvdHlwZScpO1xuXG52YXIgZ29wZCA9IHJlcXVpcmUoJ2dvcGQnKTtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lRGF0YVByb3BlcnR5KFxuXHRvYmosXG5cdHByb3BlcnR5LFxuXHR2YWx1ZVxuKSB7XG5cdGlmICghb2JqIHx8ICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqICE9PSAnZnVuY3Rpb24nKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgb2JqYCBtdXN0IGJlIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uYCcpO1xuXHR9XG5cdGlmICh0eXBlb2YgcHJvcGVydHkgIT09ICdzdHJpbmcnICYmIHR5cGVvZiBwcm9wZXJ0eSAhPT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHByb3BlcnR5YCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgc3ltYm9sYCcpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMyAmJiB0eXBlb2YgYXJndW1lbnRzWzNdICE9PSAnYm9vbGVhbicgJiYgYXJndW1lbnRzWzNdICE9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2Bub25FbnVtZXJhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwnKTtcblx0fVxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgdHlwZW9mIGFyZ3VtZW50c1s0XSAhPT0gJ2Jvb2xlYW4nICYmIGFyZ3VtZW50c1s0XSAhPT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgbm9uV3JpdGFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4gb3IgbnVsbCcpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gNSAmJiB0eXBlb2YgYXJndW1lbnRzWzVdICE9PSAnYm9vbGVhbicgJiYgYXJndW1lbnRzWzVdICE9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2Bub25Db25maWd1cmFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4gb3IgbnVsbCcpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gNiAmJiB0eXBlb2YgYXJndW1lbnRzWzZdICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGxvb3NlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblxuXHR2YXIgbm9uRW51bWVyYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzID8gYXJndW1lbnRzWzNdIDogbnVsbDtcblx0dmFyIG5vbldyaXRhYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgPyBhcmd1bWVudHNbNF0gOiBudWxsO1xuXHR2YXIgbm9uQ29uZmlndXJhYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgPyBhcmd1bWVudHNbNV0gOiBudWxsO1xuXHR2YXIgbG9vc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gNiA/IGFyZ3VtZW50c1s2XSA6IGZhbHNlO1xuXG5cdC8qIEB0eXBlIHtmYWxzZSB8IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+fSAqL1xuXHR2YXIgZGVzYyA9ICEhZ29wZCAmJiBnb3BkKG9iaiwgcHJvcGVydHkpO1xuXG5cdGlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0XHQkZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wZXJ0eSwge1xuXHRcdFx0Y29uZmlndXJhYmxlOiBub25Db25maWd1cmFibGUgPT09IG51bGwgJiYgZGVzYyA/IGRlc2MuY29uZmlndXJhYmxlIDogIW5vbkNvbmZpZ3VyYWJsZSxcblx0XHRcdGVudW1lcmFibGU6IG5vbkVudW1lcmFibGUgPT09IG51bGwgJiYgZGVzYyA/IGRlc2MuZW51bWVyYWJsZSA6ICFub25FbnVtZXJhYmxlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IG5vbldyaXRhYmxlID09PSBudWxsICYmIGRlc2MgPyBkZXNjLndyaXRhYmxlIDogIW5vbldyaXRhYmxlXG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAobG9vc2UgfHwgKCFub25FbnVtZXJhYmxlICYmICFub25Xcml0YWJsZSAmJiAhbm9uQ29uZmlndXJhYmxlKSkge1xuXHRcdC8vIG11c3QgZmFsbCBiYWNrIHRvIFtbU2V0XV0sIGFuZCB3YXMgbm90IGV4cGxpY2l0bHkgYXNrZWQgdG8gbWFrZSBub24tZW51bWVyYWJsZSwgbm9uLXdyaXRhYmxlLCBvciBub24tY29uZmlndXJhYmxlXG5cdFx0b2JqW3Byb3BlcnR5XSA9IHZhbHVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignVGhpcyBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IGRlZmluaW5nIGEgcHJvcGVydHkgYXMgbm9uLWNvbmZpZ3VyYWJsZSwgbm9uLXdyaXRhYmxlLCBvciBub24tZW51bWVyYWJsZS4nKTtcblx0fVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJ2VzLWRlZmluZS1wcm9wZXJ0eScpO1xuXG52YXIgaGFzUHJvcGVydHlEZXNjcmlwdG9ycyA9IGZ1bmN0aW9uIGhhc1Byb3BlcnR5RGVzY3JpcHRvcnMoKSB7XG5cdHJldHVybiAhISRkZWZpbmVQcm9wZXJ0eTtcbn07XG5cbmhhc1Byb3BlcnR5RGVzY3JpcHRvcnMuaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBmdW5jdGlvbiBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZygpIHtcblx0Ly8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0dHJ5IHtcblx0XHRyZXR1cm4gJGRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggIT09IDE7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJbiBGaXJlZm94IDQtMjIsIGRlZmluaW5nIGxlbmd0aCBvbiBhbiBhcnJheSB0aHJvd3MgYW4gZXhjZXB0aW9uLlxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc1Byb3BlcnR5RGVzY3JpcHRvcnM7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLWRhdGEtcHJvcGVydHknKTtcbnZhciBoYXNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2hhcy1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpKCk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJ2dvcGQnKTtcblxudmFyICRUeXBlRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvdHlwZScpO1xudmFyICRmbG9vciA9IEdldEludHJpbnNpYygnJU1hdGguZmxvb3IlJyk7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNldEZ1bmN0aW9uTGVuZ3RoKGZuLCBsZW5ndGgpIHtcblx0aWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgZm5gIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblx0aWYgKHR5cGVvZiBsZW5ndGggIT09ICdudW1iZXInIHx8IGxlbmd0aCA8IDAgfHwgbGVuZ3RoID4gMHhGRkZGRkZGRiB8fCAkZmxvb3IobGVuZ3RoKSAhPT0gbGVuZ3RoKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BsZW5ndGhgIG11c3QgYmUgYSBwb3NpdGl2ZSAzMi1iaXQgaW50ZWdlcicpO1xuXHR9XG5cblx0dmFyIGxvb3NlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgISFhcmd1bWVudHNbMl07XG5cblx0dmFyIGZ1bmN0aW9uTGVuZ3RoSXNDb25maWd1cmFibGUgPSB0cnVlO1xuXHR2YXIgZnVuY3Rpb25MZW5ndGhJc1dyaXRhYmxlID0gdHJ1ZTtcblx0aWYgKCdsZW5ndGgnIGluIGZuICYmIGdPUEQpIHtcblx0XHR2YXIgZGVzYyA9IGdPUEQoZm4sICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYyAmJiAhZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdGZ1bmN0aW9uTGVuZ3RoSXNDb25maWd1cmFibGUgPSBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKGRlc2MgJiYgIWRlc2Mud3JpdGFibGUpIHtcblx0XHRcdGZ1bmN0aW9uTGVuZ3RoSXNXcml0YWJsZSA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChmdW5jdGlvbkxlbmd0aElzQ29uZmlndXJhYmxlIHx8IGZ1bmN0aW9uTGVuZ3RoSXNXcml0YWJsZSB8fCAhbG9vc2UpIHtcblx0XHRpZiAoaGFzRGVzY3JpcHRvcnMpIHtcblx0XHRcdGRlZmluZSgvKiogQHR5cGUge1BhcmFtZXRlcnM8ZGVmaW5lPlswXX0gKi8gKGZuKSwgJ2xlbmd0aCcsIGxlbmd0aCwgdHJ1ZSwgdHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlZmluZSgvKiogQHR5cGUge1BhcmFtZXRlcnM8ZGVmaW5lPlswXX0gKi8gKGZuKSwgJ2xlbmd0aCcsIGxlbmd0aCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmbjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBzZXRGdW5jdGlvbkxlbmd0aCA9IHJlcXVpcmUoJ3NldC1mdW5jdGlvbi1sZW5ndGgnKTtcblxudmFyICRUeXBlRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvdHlwZScpO1xudmFyICRhcHBseSA9IEdldEludHJpbnNpYygnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcbnZhciAkY2FsbCA9IEdldEludHJpbnNpYygnJUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsJScpO1xudmFyICRyZWZsZWN0QXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGJpbmQuY2FsbCgkY2FsbCwgJGFwcGx5KTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJ2VzLWRlZmluZS1wcm9wZXJ0eScpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjYWxsQmluZChvcmlnaW5hbEZ1bmN0aW9uKSB7XG5cdGlmICh0eXBlb2Ygb3JpZ2luYWxGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdhIGZ1bmN0aW9uIGlzIHJlcXVpcmVkJyk7XG5cdH1cblx0dmFyIGZ1bmMgPSAkcmVmbGVjdEFwcGx5KGJpbmQsICRjYWxsLCBhcmd1bWVudHMpO1xuXHRyZXR1cm4gc2V0RnVuY3Rpb25MZW5ndGgoXG5cdFx0ZnVuYyxcblx0XHQxICsgJG1heCgwLCBvcmlnaW5hbEZ1bmN0aW9uLmxlbmd0aCAtIChhcmd1bWVudHMubGVuZ3RoIC0gMSkpLFxuXHRcdHRydWVcblx0KTtcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnLi8nKTtcblxudmFyICRpbmRleE9mID0gY2FsbEJpbmQoR2V0SW50cmluc2ljKCdTdHJpbmcucHJvdG90eXBlLmluZGV4T2YnKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJvdW5kSW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHR2YXIgaW50cmluc2ljID0gR2V0SW50cmluc2ljKG5hbWUsICEhYWxsb3dNaXNzaW5nKTtcblx0aWYgKHR5cGVvZiBpbnRyaW5zaWMgPT09ICdmdW5jdGlvbicgJiYgJGluZGV4T2YobmFtZSwgJy5wcm90b3R5cGUuJykgPiAtMSkge1xuXHRcdHJldHVybiBjYWxsQmluZChpbnRyaW5zaWMpO1xuXHR9XG5cdHJldHVybiBpbnRyaW5zaWM7XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge30iLCJ2YXIgaGFzTWFwID0gdHlwZW9mIE1hcCA9PT0gJ2Z1bmN0aW9uJyAmJiBNYXAucHJvdG90eXBlO1xudmFyIG1hcFNpemVEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiBoYXNNYXAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE1hcC5wcm90b3R5cGUsICdzaXplJykgOiBudWxsO1xudmFyIG1hcFNpemUgPSBoYXNNYXAgJiYgbWFwU2l6ZURlc2NyaXB0b3IgJiYgdHlwZW9mIG1hcFNpemVEZXNjcmlwdG9yLmdldCA9PT0gJ2Z1bmN0aW9uJyA/IG1hcFNpemVEZXNjcmlwdG9yLmdldCA6IG51bGw7XG52YXIgbWFwRm9yRWFjaCA9IGhhc01hcCAmJiBNYXAucHJvdG90eXBlLmZvckVhY2g7XG52YXIgaGFzU2V0ID0gdHlwZW9mIFNldCA9PT0gJ2Z1bmN0aW9uJyAmJiBTZXQucHJvdG90eXBlO1xudmFyIHNldFNpemVEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiBoYXNTZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFNldC5wcm90b3R5cGUsICdzaXplJykgOiBudWxsO1xudmFyIHNldFNpemUgPSBoYXNTZXQgJiYgc2V0U2l6ZURlc2NyaXB0b3IgJiYgdHlwZW9mIHNldFNpemVEZXNjcmlwdG9yLmdldCA9PT0gJ2Z1bmN0aW9uJyA/IHNldFNpemVEZXNjcmlwdG9yLmdldCA6IG51bGw7XG52YXIgc2V0Rm9yRWFjaCA9IGhhc1NldCAmJiBTZXQucHJvdG90eXBlLmZvckVhY2g7XG52YXIgaGFzV2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nICYmIFdlYWtNYXAucHJvdG90eXBlO1xudmFyIHdlYWtNYXBIYXMgPSBoYXNXZWFrTWFwID8gV2Vha01hcC5wcm90b3R5cGUuaGFzIDogbnVsbDtcbnZhciBoYXNXZWFrU2V0ID0gdHlwZW9mIFdlYWtTZXQgPT09ICdmdW5jdGlvbicgJiYgV2Vha1NldC5wcm90b3R5cGU7XG52YXIgd2Vha1NldEhhcyA9IGhhc1dlYWtTZXQgPyBXZWFrU2V0LnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtSZWYgPSB0eXBlb2YgV2Vha1JlZiA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrUmVmLnByb3RvdHlwZTtcbnZhciB3ZWFrUmVmRGVyZWYgPSBoYXNXZWFrUmVmID8gV2Vha1JlZi5wcm90b3R5cGUuZGVyZWYgOiBudWxsO1xudmFyIGJvb2xlYW5WYWx1ZU9mID0gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZjtcbnZhciBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztcbnZhciAkbWF0Y2ggPSBTdHJpbmcucHJvdG90eXBlLm1hdGNoO1xudmFyICRzbGljZSA9IFN0cmluZy5wcm90b3R5cGUuc2xpY2U7XG52YXIgJHJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG52YXIgJHRvVXBwZXJDYXNlID0gU3RyaW5nLnByb3RvdHlwZS50b1VwcGVyQ2FzZTtcbnZhciAkdG9Mb3dlckNhc2UgPSBTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlO1xudmFyICR0ZXN0ID0gUmVnRXhwLnByb3RvdHlwZS50ZXN0O1xudmFyICRjb25jYXQgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0O1xudmFyICRqb2luID0gQXJyYXkucHJvdG90eXBlLmpvaW47XG52YXIgJGFyclNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgYmlnSW50VmFsdWVPZiA9IHR5cGVvZiBCaWdJbnQgPT09ICdmdW5jdGlvbicgPyBCaWdJbnQucHJvdG90eXBlLnZhbHVlT2YgOiBudWxsO1xudmFyIGdPUFMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIHN5bVRvU3RyaW5nID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJyA/IFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgOiBudWxsO1xudmFyIGhhc1NoYW1tZWRTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnb2JqZWN0Jztcbi8vIGllLCBgaGFzLXRvc3RyaW5ndGFnL3NoYW1zXG52YXIgdG9TdHJpbmdUYWcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC50b1N0cmluZ1RhZyAmJiAodHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyA9PT0gaGFzU2hhbW1lZFN5bWJvbHMgPyAnb2JqZWN0JyA6ICdzeW1ib2wnKVxuICAgID8gU3ltYm9sLnRvU3RyaW5nVGFnXG4gICAgOiBudWxsO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbmZ1bmN0aW9uIGFkZE51bWVyaWNTZXBhcmF0b3IobnVtLCBzdHIpIHtcbiAgICBpZiAoXG4gICAgICAgIG51bSA9PT0gSW5maW5pdHlcbiAgICAgICAgfHwgbnVtID09PSAtSW5maW5pdHlcbiAgICAgICAgfHwgbnVtICE9PSBudW1cbiAgICAgICAgfHwgKG51bSAmJiBudW0gPiAtMTAwMCAmJiBudW0gPCAxMDAwKVxuICAgICAgICB8fCAkdGVzdC5jYWxsKC9lLywgc3RyKVxuICAgICkge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICB2YXIgc2VwUmVnZXggPSAvWzAtOV0oPz0oPzpbMC05XXszfSkrKD8hWzAtOV0pKS9nO1xuICAgIGlmICh0eXBlb2YgbnVtID09PSAnbnVtYmVyJykge1xuICAgICAgICB2YXIgaW50ID0gbnVtIDwgMCA/IC0kZmxvb3IoLW51bSkgOiAkZmxvb3IobnVtKTsgLy8gdHJ1bmMobnVtKVxuICAgICAgICBpZiAoaW50ICE9PSBudW0pIHtcbiAgICAgICAgICAgIHZhciBpbnRTdHIgPSBTdHJpbmcoaW50KTtcbiAgICAgICAgICAgIHZhciBkZWMgPSAkc2xpY2UuY2FsbChzdHIsIGludFN0ci5sZW5ndGggKyAxKTtcbiAgICAgICAgICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKGludFN0ciwgc2VwUmVnZXgsICckJl8nKSArICcuJyArICRyZXBsYWNlLmNhbGwoJHJlcGxhY2UuY2FsbChkZWMsIC8oWzAtOV17M30pL2csICckJl8nKSwgL18kLywgJycpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHN0ciwgc2VwUmVnZXgsICckJl8nKTtcbn1cblxudmFyIHV0aWxJbnNwZWN0ID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKTtcbnZhciBpbnNwZWN0Q3VzdG9tID0gdXRpbEluc3BlY3QuY3VzdG9tO1xudmFyIGluc3BlY3RTeW1ib2wgPSBpc1N5bWJvbChpbnNwZWN0Q3VzdG9tKSA/IGluc3BlY3RDdXN0b20gOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJpbmRlbnRcIiBtdXN0IGJlIFwiXFxcXHRcIiwgYW4gaW50ZWdlciA+IDAsIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICBpZiAoaGFzKG9wdHMsICdudW1lcmljU2VwYXJhdG9yJykgJiYgdHlwZW9mIG9wdHMubnVtZXJpY1NlcGFyYXRvciAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBcIm51bWVyaWNTZXBhcmF0b3JcIiwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYHRydWVgIG9yIGBmYWxzZWAnKTtcbiAgICB9XG4gICAgdmFyIG51bWVyaWNTZXBhcmF0b3IgPSBvcHRzLm51bWVyaWNTZXBhcmF0b3I7XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgc3RyID0gU3RyaW5nKG9iaik7XG4gICAgICAgIHJldHVybiBudW1lcmljU2VwYXJhdG9yID8gYWRkTnVtZXJpY1NlcGFyYXRvcihvYmosIHN0cikgOiBzdHI7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICB2YXIgYmlnSW50U3RyID0gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgICAgIHJldHVybiBudW1lcmljU2VwYXJhdG9yID8gYWRkTnVtZXJpY1NlcGFyYXRvcihvYmosIGJpZ0ludFN0cikgOiBiaWdJbnRTdHI7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9ICRhcnJTbGljZS5jYWxsKHNlZW4pO1xuICAgICAgICAgICAgc2Vlbi5wdXNoKGZyb20pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub0luZGVudCkge1xuICAgICAgICAgICAgdmFyIG5ld09wdHMgPSB7XG4gICAgICAgICAgICAgICAgZGVwdGg6IG9wdHMuZGVwdGhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykpIHtcbiAgICAgICAgICAgICAgICBuZXdPcHRzLnF1b3RlU3R5bGUgPSBvcHRzLnF1b3RlU3R5bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5zcGVjdF8odmFsdWUsIG5ld09wdHMsIGRlcHRoICsgMSwgc2Vlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBvcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nICYmICFpc1JlZ0V4cChvYmopKSB7IC8vIGluIG9sZGVyIGVuZ2luZXMsIHJlZ2V4ZXMgYXJlIGNhbGxhYmxlXG4gICAgICAgIHZhciBuYW1lID0gbmFtZU9mKG9iaik7XG4gICAgICAgIHZhciBrZXlzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICByZXR1cm4gJ1tGdW5jdGlvbicgKyAobmFtZSA/ICc6ICcgKyBuYW1lIDogJyAoYW5vbnltb3VzKScpICsgJ10nICsgKGtleXMubGVuZ3RoID4gMCA/ICcgeyAnICsgJGpvaW4uY2FsbChrZXlzLCAnLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/ICRyZXBsYWNlLmNhbGwoU3RyaW5nKG9iaiksIC9eKFN5bWJvbFxcKC4qXFwpKV9bXildKiQvLCAnJDEnKSA6IHN5bVRvU3RyaW5nLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmICFoYXNTaGFtbWVkU3ltYm9scyA/IG1hcmtCb3hlZChzeW1TdHJpbmcpIDogc3ltU3RyaW5nO1xuICAgIH1cbiAgICBpZiAoaXNFbGVtZW50KG9iaikpIHtcbiAgICAgICAgdmFyIHMgPSAnPCcgKyAkdG9Mb3dlckNhc2UuY2FsbChTdHJpbmcob2JqLm5vZGVOYW1lKSk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgJHRvTG93ZXJDYXNlLmNhbGwoU3RyaW5nKG9iai5ub2RlTmFtZSkpICsgJz4nO1xuICAgICAgICByZXR1cm4gcztcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgICAgICBpZiAob2JqLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1tdJzsgfVxuICAgICAgICB2YXIgeHMgPSBhcnJPYmpLZXlzKG9iaiwgaW5zcGVjdCk7XG4gICAgICAgIGlmIChpbmRlbnQgJiYgIXNpbmdsZUxpbmVWYWx1ZXMoeHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ1snICsgaW5kZW50ZWRKb2luKHhzLCBpbmRlbnQpICsgJ10nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnWyAnICsgJGpvaW4uY2FsbCh4cywgJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKCEoJ2NhdXNlJyBpbiBFcnJvci5wcm90b3R5cGUpICYmICdjYXVzZScgaW4gb2JqICYmICFpc0VudW1lcmFibGUuY2FsbChvYmosICdjYXVzZScpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3sgWycgKyBTdHJpbmcob2JqKSArICddICcgKyAkam9pbi5jYWxsKCRjb25jYXQuY2FsbCgnW2NhdXNlXTogJyArIGluc3BlY3Qob2JqLmNhdXNlKSwgcGFydHMpLCAnLCAnKSArICcgfSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgJGpvaW4uY2FsbChwYXJ0cywgJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgY3VzdG9tSW5zcGVjdCkge1xuICAgICAgICBpZiAoaW5zcGVjdFN5bWJvbCAmJiB0eXBlb2Ygb2JqW2luc3BlY3RTeW1ib2xdID09PSAnZnVuY3Rpb24nICYmIHV0aWxJbnNwZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbEluc3BlY3Qob2JqLCB7IGRlcHRoOiBtYXhEZXB0aCAtIGRlcHRoIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGN1c3RvbUluc3BlY3QgIT09ICdzeW1ib2wnICYmIHR5cGVvZiBvYmouaW5zcGVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIG9iai5pbnNwZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzTWFwKG9iaikpIHtcbiAgICAgICAgdmFyIG1hcFBhcnRzID0gW107XG4gICAgICAgIGlmIChtYXBGb3JFYWNoKSB7XG4gICAgICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgICAgIG1hcFBhcnRzLnB1c2goaW5zcGVjdChrZXksIG9iaiwgdHJ1ZSkgKyAnID0+ICcgKyBpbnNwZWN0KHZhbHVlLCBvYmopKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uT2YoJ01hcCcsIG1hcFNpemUuY2FsbChvYmopLCBtYXBQYXJ0cywgaW5kZW50KTtcbiAgICB9XG4gICAgaWYgKGlzU2V0KG9iaikpIHtcbiAgICAgICAgdmFyIHNldFBhcnRzID0gW107XG4gICAgICAgIGlmIChzZXRGb3JFYWNoKSB7XG4gICAgICAgICAgICBzZXRGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICAvLyBub3RlOiBpbiBJRSA4LCBzb21ldGltZXMgYGdsb2JhbCAhPT0gd2luZG93YCBidXQgYm90aCBhcmUgdGhlIHByb3RvdHlwZXMgb2YgZWFjaCBvdGhlclxuICAgIC8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiBvYmogPT09IHdpbmRvdykge1xuICAgICAgICByZXR1cm4gJ3sgW29iamVjdCBXaW5kb3ddIH0nO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAgICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgJiYgb2JqID09PSBnbG9iYWxUaGlzKVxuICAgICAgICB8fCAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgb2JqID09PSBnbG9iYWwpXG4gICAgKSB7XG4gICAgICAgIHJldHVybiAneyBbb2JqZWN0IGdsb2JhbFRoaXNdIH0nO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyAkc2xpY2UuY2FsbCh0b1N0cihvYmopLCA4LCAtMSkgOiBwcm90b1RhZyA/ICdPYmplY3QnIDogJyc7XG4gICAgICAgIHZhciBjb25zdHJ1Y3RvclRhZyA9IGlzUGxhaW5PYmplY3QgfHwgdHlwZW9mIG9iai5jb25zdHJ1Y3RvciAhPT0gJ2Z1bmN0aW9uJyA/ICcnIDogb2JqLmNvbnN0cnVjdG9yLm5hbWUgPyBvYmouY29uc3RydWN0b3IubmFtZSArICcgJyA6ICcnO1xuICAgICAgICB2YXIgdGFnID0gY29uc3RydWN0b3JUYWcgKyAoc3RyaW5nVGFnIHx8IHByb3RvVGFnID8gJ1snICsgJGpvaW4uY2FsbCgkY29uY2F0LmNhbGwoW10sIHN0cmluZ1RhZyB8fCBbXSwgcHJvdG9UYWcgfHwgW10pLCAnOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArICRqb2luLmNhbGwoeXMsICcsICcpICsgJyB9JztcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyhvYmopO1xufTtcblxuZnVuY3Rpb24gd3JhcFF1b3RlcyhzLCBkZWZhdWx0U3R5bGUsIG9wdHMpIHtcbiAgICB2YXIgcXVvdGVDaGFyID0gKG9wdHMucXVvdGVTdHlsZSB8fCBkZWZhdWx0U3R5bGUpID09PSAnZG91YmxlJyA/ICdcIicgOiBcIidcIjtcbiAgICByZXR1cm4gcXVvdGVDaGFyICsgcyArIHF1b3RlQ2hhcjtcbn1cblxuZnVuY3Rpb24gcXVvdGUocykge1xuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKFN0cmluZyhzKSwgL1wiL2csICcmcXVvdDsnKTtcbn1cblxuZnVuY3Rpb24gaXNBcnJheShvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0RhdGUob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBEYXRlXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc1JlZ0V4cChvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IFJlZ0V4cF0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNFcnJvcihvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IEVycm9yXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc1N0cmluZyhvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IFN0cmluZ10nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNOdW1iZXIob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBOdW1iZXJdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzQm9vbGVhbihvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IEJvb2xlYW5dJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cblxuLy8gU3ltYm9sIGFuZCBCaWdJbnQgZG8gaGF2ZSBTeW1ib2wudG9TdHJpbmdUYWcgYnkgc3BlYywgc28gdGhhdCBjYW4ndCBiZSB1c2VkIHRvIGVsaW1pbmF0ZSBmYWxzZSBwb3NpdGl2ZXNcbmZ1bmN0aW9uIGlzU3ltYm9sKG9iaikge1xuICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scykge1xuICAgICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiBpbnN0YW5jZW9mIFN5bWJvbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzeW1ib2wnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCAhc3ltVG9TdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBzeW1Ub1N0cmluZy5jYWxsKG9iaik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0JpZ0ludChvYmopIHtcbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCAhYmlnSW50VmFsdWVPZikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGJpZ0ludFZhbHVlT2YuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxudmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkgfHwgZnVuY3Rpb24gKGtleSkgeyByZXR1cm4ga2V5IGluIHRoaXM7IH07XG5mdW5jdGlvbiBoYXMob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gaGFzT3duLmNhbGwob2JqLCBrZXkpO1xufVxuXG5mdW5jdGlvbiB0b1N0cihvYmopIHtcbiAgICByZXR1cm4gb2JqZWN0VG9TdHJpbmcuY2FsbChvYmopO1xufVxuXG5mdW5jdGlvbiBuYW1lT2YoZikge1xuICAgIGlmIChmLm5hbWUpIHsgcmV0dXJuIGYubmFtZTsgfVxuICAgIHZhciBtID0gJG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKCRzbGljZS5jYWxsKHN0ciwgMCwgb3B0cy5tYXhTdHJpbmdMZW5ndGgpLCBvcHRzKSArIHRyYWlsZXI7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG4gICAgdmFyIHMgPSAkcmVwbGFjZS5jYWxsKCRyZXBsYWNlLmNhbGwoc3RyLCAvKFsnXFxcXF0pL2csICdcXFxcJDEnKSwgL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyAkdG9VcHBlckNhc2UuY2FsbChuLnRvU3RyaW5nKDE2KSk7XG59XG5cbmZ1bmN0aW9uIG1hcmtCb3hlZChzdHIpIHtcbiAgICByZXR1cm4gJ09iamVjdCgnICsgc3RyICsgJyknO1xufVxuXG5mdW5jdGlvbiB3ZWFrQ29sbGVjdGlvbk9mKHR5cGUpIHtcbiAgICByZXR1cm4gdHlwZSArICcgeyA/IH0nO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0aW9uT2YodHlwZSwgc2l6ZSwgZW50cmllcywgaW5kZW50KSB7XG4gICAgdmFyIGpvaW5lZEVudHJpZXMgPSBpbmRlbnQgPyBpbmRlbnRlZEpvaW4oZW50cmllcywgaW5kZW50KSA6ICRqb2luLmNhbGwoZW50cmllcywgJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICRqb2luLmNhbGwoQXJyYXkob3B0cy5pbmRlbnQgKyAxKSwgJyAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYmFzZTogYmFzZUluZGVudCxcbiAgICAgICAgcHJldjogJGpvaW4uY2FsbChBcnJheShkZXB0aCArIDEpLCBiYXNlSW5kZW50KVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGluZGVudGVkSm9pbih4cywgaW5kZW50KSB7XG4gICAgaWYgKHhzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJyc7IH1cbiAgICB2YXIgbGluZUpvaW5lciA9ICdcXG4nICsgaW5kZW50LnByZXYgKyBpbmRlbnQuYmFzZTtcbiAgICByZXR1cm4gbGluZUpvaW5lciArICRqb2luLmNhbGwoeHMsICcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCR0ZXN0LmNhbGwoL1teXFx3JF0vLCBrZXkpKSB7XG4gICAgICAgICAgICB4cy5wdXNoKGluc3BlY3Qoa2V5LCBvYmopICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeHMucHVzaChrZXkgKyAnOiAnICsgaW5zcGVjdChvYmpba2V5XSwgb2JqKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3ltcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKGlzRW51bWVyYWJsZS5jYWxsKG9iaiwgc3ltc1tqXSkpIHtcbiAgICAgICAgICAgICAgICB4cy5wdXNoKCdbJyArIGluc3BlY3Qoc3ltc1tqXSkgKyAnXTogJyArIGluc3BlY3Qob2JqW3N5bXNbal1dLCBvYmopKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geHM7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGluc3BlY3QgPSByZXF1aXJlKCdvYmplY3QtaW5zcGVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy90eXBlJyk7XG52YXIgJFdlYWtNYXAgPSBHZXRJbnRyaW5zaWMoJyVXZWFrTWFwJScsIHRydWUpO1xudmFyICRNYXAgPSBHZXRJbnRyaW5zaWMoJyVNYXAlJywgdHJ1ZSk7XG5cbnZhciAkd2Vha01hcEdldCA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuZ2V0JywgdHJ1ZSk7XG52YXIgJHdlYWtNYXBTZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwSGFzID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5oYXMnLCB0cnVlKTtcbnZhciAkbWFwR2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICRtYXBTZXQgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuc2V0JywgdHJ1ZSk7XG52YXIgJG1hcEhhcyA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5oYXMnLCB0cnVlKTtcblxuLypcbiogVGhpcyBmdW5jdGlvbiB0cmF2ZXJzZXMgdGhlIGxpc3QgcmV0dXJuaW5nIHRoZSBub2RlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGtleS5cbipcbiogVGhhdCBub2RlIGlzIGFsc28gbW92ZWQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QsIHNvIHRoYXQgaWYgaXQncyBhY2Nlc3NlZCBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseSB1c2VkIG5vZGVzIGNhbiBiZSBhY2Nlc3NlZCByZWxhdGl2ZWx5IHF1aWNrbHkuXG4qL1xuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKS5saXN0R2V0Tm9kZX0gKi9cbnZhciBsaXN0R2V0Tm9kZSA9IGZ1bmN0aW9uIChsaXN0LCBrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHQvKiogQHR5cGUge3R5cGVvZiBsaXN0IHwgTm9uTnVsbGFibGU8KHR5cGVvZiBsaXN0KVsnbmV4dCddPn0gKi9cblx0dmFyIHByZXYgPSBsaXN0O1xuXHQvKiogQHR5cGUgeyh0eXBlb2YgbGlzdClbJ25leHQnXX0gKi9cblx0dmFyIGN1cnI7XG5cdGZvciAoOyAoY3VyciA9IHByZXYubmV4dCkgIT09IG51bGw7IHByZXYgPSBjdXJyKSB7XG5cdFx0aWYgKGN1cnIua2V5ID09PSBrZXkpIHtcblx0XHRcdHByZXYubmV4dCA9IGN1cnIubmV4dDtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRyYS1wYXJlbnNcblx0XHRcdGN1cnIubmV4dCA9IC8qKiBAdHlwZSB7Tm9uTnVsbGFibGU8dHlwZW9mIGxpc3QubmV4dD59ICovIChsaXN0Lm5leHQpO1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpLmxpc3RHZXR9ICovXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbi8qKiBAdHlwZSB7aW1wb3J0KCcuJykubGlzdFNldH0gKi9cbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0gLyoqIEB0eXBlIHtpbXBvcnQoJy4nKS5MaXN0Tm9kZTx0eXBlb2YgdmFsdWU+fSAqLyAoeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduLCBuby1leHRyYS1wYXJlbnNcblx0XHRcdGtleToga2V5LFxuXHRcdFx0bmV4dDogb2JqZWN0cy5uZXh0LFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fSk7XG5cdH1cbn07XG4vKiogQHR5cGUge2ltcG9ydCgnLicpLmxpc3RIYXN9ICovXG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFNpZGVDaGFubmVsKCkge1xuXHQvKiogQHR5cGUge1dlYWtNYXA8b2JqZWN0LCB1bmtub3duPn0gKi8gdmFyICR3bTtcblx0LyoqIEB0eXBlIHtNYXA8b2JqZWN0LCB1bmtub3duPn0gKi8gdmFyICRtO1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLicpLlJvb3ROb2RlPHVua25vd24+fSAqLyB2YXIgJG87XG5cblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4nKS5DaGFubmVsfSAqL1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8vIEluaXRpYWxpemUgdGhlIGxpbmtlZCBsaXN0IGFzIGFuIGVtcHR5IG5vZGUsIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBzcGVjaWFsLWNhc2UgaGFuZGxpbmcgb2YgdGhlIGZpcnN0IG5vZGU6IHdlIGNhbiBhbHdheXMgcmVmZXIgdG8gaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcbnZhciBwZXJjZW50VHdlbnRpZXMgPSAvJTIwL2c7XG5cbnZhciBGb3JtYXQgPSB7XG4gICAgUkZDMTczODogJ1JGQzE3MzgnLFxuICAgIFJGQzM5ODY6ICdSRkMzOTg2J1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgJ2RlZmF1bHQnOiBGb3JtYXQuUkZDMzk4NixcbiAgICBmb3JtYXR0ZXJzOiB7XG4gICAgICAgIFJGQzE3Mzg6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2UuY2FsbCh2YWx1ZSwgcGVyY2VudFR3ZW50aWVzLCAnKycpO1xuICAgICAgICB9LFxuICAgICAgICBSRkMzOTg2OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBSRkMxNzM4OiBGb3JtYXQuUkZDMTczOCxcbiAgICBSRkMzOTg2OiBGb3JtYXQuUkZDMzk4NlxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGZvcm1hdHMgPSByZXF1aXJlKCcuL2Zvcm1hdHMnKTtcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbnZhciBoZXhUYWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgICAgICBhcnJheS5wdXNoKCclJyArICgoaSA8IDE2ID8gJzAnIDogJycpICsgaS50b1N0cmluZygxNikpLnRvVXBwZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbn0oKSk7XG5cbnZhciBjb21wYWN0UXVldWUgPSBmdW5jdGlvbiBjb21wYWN0UXVldWUocXVldWUpIHtcbiAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMSkge1xuICAgICAgICB2YXIgaXRlbSA9IHF1ZXVlLnBvcCgpO1xuICAgICAgICB2YXIgb2JqID0gaXRlbS5vYmpbaXRlbS5wcm9wXTtcblxuICAgICAgICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgICB2YXIgY29tcGFjdGVkID0gW107XG5cbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgb2JqLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmpbal0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBhY3RlZC5wdXNoKG9ialtqXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpdGVtLm9ialtpdGVtLnByb3BdID0gY29tcGFjdGVkO1xuICAgICAgICB9XG4gICAgfVxufTtcblxudmFyIGFycmF5VG9PYmplY3QgPSBmdW5jdGlvbiBhcnJheVRvT2JqZWN0KHNvdXJjZSwgb3B0aW9ucykge1xuICAgIHZhciBvYmogPSBvcHRpb25zICYmIG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlW2ldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgb2JqW2ldID0gc291cmNlW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBtZXJnZSA9IGZ1bmN0aW9uIG1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zKSB7XG4gICAgLyogZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOiAwICovXG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodGFyZ2V0KSkge1xuICAgICAgICAgICAgdGFyZ2V0LnB1c2goc291cmNlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgJiYgdHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmICgob3B0aW9ucyAmJiAob3B0aW9ucy5wbGFpbk9iamVjdHMgfHwgb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpKSB8fCAhaGFzLmNhbGwoT2JqZWN0LnByb3RvdHlwZSwgc291cmNlKSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtzb3VyY2VdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbdGFyZ2V0LCBzb3VyY2VdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldCB8fCB0eXBlb2YgdGFyZ2V0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gW3RhcmdldF0uY29uY2F0KHNvdXJjZSk7XG4gICAgfVxuXG4gICAgdmFyIG1lcmdlVGFyZ2V0ID0gdGFyZ2V0O1xuICAgIGlmIChpc0FycmF5KHRhcmdldCkgJiYgIWlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICBtZXJnZVRhcmdldCA9IGFycmF5VG9PYmplY3QodGFyZ2V0LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJheSh0YXJnZXQpICYmIGlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICBzb3VyY2UuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaSkge1xuICAgICAgICAgICAgaWYgKGhhcy5jYWxsKHRhcmdldCwgaSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0SXRlbSA9IHRhcmdldFtpXTtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0SXRlbSAmJiB0eXBlb2YgdGFyZ2V0SXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAmJiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2ldID0gbWVyZ2UodGFyZ2V0SXRlbSwgaXRlbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbaV0gPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc291cmNlKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHNvdXJjZVtrZXldO1xuXG4gICAgICAgIGlmIChoYXMuY2FsbChhY2MsIGtleSkpIHtcbiAgICAgICAgICAgIGFjY1trZXldID0gbWVyZ2UoYWNjW2tleV0sIHZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjY1trZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBtZXJnZVRhcmdldCk7XG59O1xuXG52YXIgYXNzaWduID0gZnVuY3Rpb24gYXNzaWduU2luZ2xlU291cmNlKHRhcmdldCwgc291cmNlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNvdXJjZSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xuICAgICAgICBhY2Nba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHRhcmdldCk7XG59O1xuXG52YXIgZGVjb2RlID0gZnVuY3Rpb24gKHN0ciwgZGVjb2RlciwgY2hhcnNldCkge1xuICAgIHZhciBzdHJXaXRob3V0UGx1cyA9IHN0ci5yZXBsYWNlKC9cXCsvZywgJyAnKTtcbiAgICBpZiAoY2hhcnNldCA9PT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgIC8vIHVuZXNjYXBlIG5ldmVyIHRocm93cywgbm8gdHJ5Li4uY2F0Y2ggbmVlZGVkOlxuICAgICAgICByZXR1cm4gc3RyV2l0aG91dFBsdXMucmVwbGFjZSgvJVswLTlhLWZdezJ9L2dpLCB1bmVzY2FwZSk7XG4gICAgfVxuICAgIC8vIHV0Zi04XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChzdHJXaXRob3V0UGx1cyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gc3RyV2l0aG91dFBsdXM7XG4gICAgfVxufTtcblxudmFyIGxpbWl0ID0gMTAyNDtcblxuLyogZXNsaW50IG9wZXJhdG9yLWxpbmVicmVhazogWzIsIFwiYmVmb3JlXCJdICovXG5cbnZhciBlbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoc3RyLCBkZWZhdWx0RW5jb2RlciwgY2hhcnNldCwga2luZCwgZm9ybWF0KSB7XG4gICAgLy8gVGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQnJpYW4gV2hpdGUgKG1zY2RleCkgZm9yIHRoZSBpby5qcyBjb3JlIHF1ZXJ5c3RyaW5nIGxpYnJhcnkuXG4gICAgLy8gSXQgaGFzIGJlZW4gYWRhcHRlZCBoZXJlIGZvciBzdHJpY3RlciBhZGhlcmVuY2UgdG8gUkZDIDM5ODZcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIHZhciBzdHJpbmcgPSBzdHI7XG4gICAgaWYgKHR5cGVvZiBzdHIgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgIHN0cmluZyA9IFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzdHIpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgc3RyaW5nID0gU3RyaW5nKHN0cik7XG4gICAgfVxuXG4gICAgaWYgKGNoYXJzZXQgPT09ICdpc28tODg1OS0xJykge1xuICAgICAgICByZXR1cm4gZXNjYXBlKHN0cmluZykucmVwbGFjZSgvJXVbMC05YS1mXXs0fS9naSwgZnVuY3Rpb24gKCQwKSB7XG4gICAgICAgICAgICByZXR1cm4gJyUyNiUyMycgKyBwYXJzZUludCgkMC5zbGljZSgyKSwgMTYpICsgJyUzQic7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBvdXQgPSAnJztcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN0cmluZy5sZW5ndGg7IGogKz0gbGltaXQpIHtcbiAgICAgICAgdmFyIHNlZ21lbnQgPSBzdHJpbmcubGVuZ3RoID49IGxpbWl0ID8gc3RyaW5nLnNsaWNlKGosIGogKyBsaW1pdCkgOiBzdHJpbmc7XG4gICAgICAgIHZhciBhcnIgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlZ21lbnQubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHZhciBjID0gc2VnbWVudC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGMgPT09IDB4MkQgLy8gLVxuICAgICAgICAgICAgICAgIHx8IGMgPT09IDB4MkUgLy8gLlxuICAgICAgICAgICAgICAgIHx8IGMgPT09IDB4NUYgLy8gX1xuICAgICAgICAgICAgICAgIHx8IGMgPT09IDB4N0UgLy8gflxuICAgICAgICAgICAgICAgIHx8IChjID49IDB4MzAgJiYgYyA8PSAweDM5KSAvLyAwLTlcbiAgICAgICAgICAgICAgICB8fCAoYyA+PSAweDQxICYmIGMgPD0gMHg1QSkgLy8gYS16XG4gICAgICAgICAgICAgICAgfHwgKGMgPj0gMHg2MSAmJiBjIDw9IDB4N0EpIC8vIEEtWlxuICAgICAgICAgICAgICAgIHx8IChmb3JtYXQgPT09IGZvcm1hdHMuUkZDMTczOCAmJiAoYyA9PT0gMHgyOCB8fCBjID09PSAweDI5KSkgLy8gKCApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBhcnJbYXJyLmxlbmd0aF0gPSBzZWdtZW50LmNoYXJBdChpKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGMgPCAweDgwKSB7XG4gICAgICAgICAgICAgICAgYXJyW2Fyci5sZW5ndGhdID0gaGV4VGFibGVbY107XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjIDwgMHg4MDApIHtcbiAgICAgICAgICAgICAgICBhcnJbYXJyLmxlbmd0aF0gPSBoZXhUYWJsZVsweEMwIHwgKGMgPj4gNildXG4gICAgICAgICAgICAgICAgICAgICsgaGV4VGFibGVbMHg4MCB8IChjICYgMHgzRildO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYyA8IDB4RDgwMCB8fCBjID49IDB4RTAwMCkge1xuICAgICAgICAgICAgICAgIGFyclthcnIubGVuZ3RoXSA9IGhleFRhYmxlWzB4RTAgfCAoYyA+PiAxMildXG4gICAgICAgICAgICAgICAgICAgICsgaGV4VGFibGVbMHg4MCB8ICgoYyA+PiA2KSAmIDB4M0YpXVxuICAgICAgICAgICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaSArPSAxO1xuICAgICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKChjICYgMHgzRkYpIDw8IDEwKSB8IChzZWdtZW50LmNoYXJDb2RlQXQoaSkgJiAweDNGRikpO1xuXG4gICAgICAgICAgICBhcnJbYXJyLmxlbmd0aF0gPSBoZXhUYWJsZVsweEYwIHwgKGMgPj4gMTgpXVxuICAgICAgICAgICAgICAgICsgaGV4VGFibGVbMHg4MCB8ICgoYyA+PiAxMikgJiAweDNGKV1cbiAgICAgICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoKGMgPj4gNikgJiAweDNGKV1cbiAgICAgICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIG91dCArPSBhcnIuam9pbignJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbnZhciBjb21wYWN0ID0gZnVuY3Rpb24gY29tcGFjdCh2YWx1ZSkge1xuICAgIHZhciBxdWV1ZSA9IFt7IG9iajogeyBvOiB2YWx1ZSB9LCBwcm9wOiAnbycgfV07XG4gICAgdmFyIHJlZnMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGl0ZW0gPSBxdWV1ZVtpXTtcbiAgICAgICAgdmFyIG9iaiA9IGl0ZW0ub2JqW2l0ZW0ucHJvcF07XG5cbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtleXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2pdO1xuICAgICAgICAgICAgdmFyIHZhbCA9IG9ialtrZXldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCAmJiByZWZzLmluZGV4T2YodmFsKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZS5wdXNoKHsgb2JqOiBvYmosIHByb3A6IGtleSB9KTtcbiAgICAgICAgICAgICAgICByZWZzLnB1c2godmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBhY3RRdWV1ZShxdWV1ZSk7XG5cbiAgICByZXR1cm4gdmFsdWU7XG59O1xuXG52YXIgaXNSZWdFeHAgPSBmdW5jdGlvbiBpc1JlZ0V4cChvYmopIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufTtcblxudmFyIGlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAhIShvYmouY29uc3RydWN0b3IgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyICYmIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihvYmopKTtcbn07XG5cbnZhciBjb21iaW5lID0gZnVuY3Rpb24gY29tYmluZShhLCBiKSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdChhLCBiKTtcbn07XG5cbnZhciBtYXliZU1hcCA9IGZ1bmN0aW9uIG1heWJlTWFwKHZhbCwgZm4pIHtcbiAgICBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIHZhciBtYXBwZWQgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIG1hcHBlZC5wdXNoKGZuKHZhbFtpXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXBwZWQ7XG4gICAgfVxuICAgIHJldHVybiBmbih2YWwpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYXJyYXlUb09iamVjdDogYXJyYXlUb09iamVjdCxcbiAgICBhc3NpZ246IGFzc2lnbixcbiAgICBjb21iaW5lOiBjb21iaW5lLFxuICAgIGNvbXBhY3Q6IGNvbXBhY3QsXG4gICAgZGVjb2RlOiBkZWNvZGUsXG4gICAgZW5jb2RlOiBlbmNvZGUsXG4gICAgaXNCdWZmZXI6IGlzQnVmZmVyLFxuICAgIGlzUmVnRXhwOiBpc1JlZ0V4cCxcbiAgICBtYXliZU1hcDogbWF5YmVNYXAsXG4gICAgbWVyZ2U6IG1lcmdlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZ2V0U2lkZUNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBmb3JtYXRzID0gcmVxdWlyZSgnLi9mb3JtYXRzJyk7XG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGFycmF5UHJlZml4R2VuZXJhdG9ycyA9IHtcbiAgICBicmFja2V0czogZnVuY3Rpb24gYnJhY2tldHMocHJlZml4KSB7XG4gICAgICAgIHJldHVybiBwcmVmaXggKyAnW10nO1xuICAgIH0sXG4gICAgY29tbWE6ICdjb21tYScsXG4gICAgaW5kaWNlczogZnVuY3Rpb24gaW5kaWNlcyhwcmVmaXgsIGtleSkge1xuICAgICAgICByZXR1cm4gcHJlZml4ICsgJ1snICsga2V5ICsgJ10nO1xuICAgIH0sXG4gICAgcmVwZWF0OiBmdW5jdGlvbiByZXBlYXQocHJlZml4KSB7XG4gICAgICAgIHJldHVybiBwcmVmaXg7XG4gICAgfVxufTtcblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xudmFyIHB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDtcbnZhciBwdXNoVG9BcnJheSA9IGZ1bmN0aW9uIChhcnIsIHZhbHVlT3JBcnJheSkge1xuICAgIHB1c2guYXBwbHkoYXJyLCBpc0FycmF5KHZhbHVlT3JBcnJheSkgPyB2YWx1ZU9yQXJyYXkgOiBbdmFsdWVPckFycmF5XSk7XG59O1xuXG52YXIgdG9JU08gPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZztcblxudmFyIGRlZmF1bHRGb3JtYXQgPSBmb3JtYXRzWydkZWZhdWx0J107XG52YXIgZGVmYXVsdHMgPSB7XG4gICAgYWRkUXVlcnlQcmVmaXg6IGZhbHNlLFxuICAgIGFsbG93RG90czogZmFsc2UsXG4gICAgYWxsb3dFbXB0eUFycmF5czogZmFsc2UsXG4gICAgYXJyYXlGb3JtYXQ6ICdpbmRpY2VzJyxcbiAgICBjaGFyc2V0OiAndXRmLTgnLFxuICAgIGNoYXJzZXRTZW50aW5lbDogZmFsc2UsXG4gICAgZGVsaW1pdGVyOiAnJicsXG4gICAgZW5jb2RlOiB0cnVlLFxuICAgIGVuY29kZURvdEluS2V5czogZmFsc2UsXG4gICAgZW5jb2RlcjogdXRpbHMuZW5jb2RlLFxuICAgIGVuY29kZVZhbHVlc09ubHk6IGZhbHNlLFxuICAgIGZvcm1hdDogZGVmYXVsdEZvcm1hdCxcbiAgICBmb3JtYXR0ZXI6IGZvcm1hdHMuZm9ybWF0dGVyc1tkZWZhdWx0Rm9ybWF0XSxcbiAgICAvLyBkZXByZWNhdGVkXG4gICAgaW5kaWNlczogZmFsc2UsXG4gICAgc2VyaWFsaXplRGF0ZTogZnVuY3Rpb24gc2VyaWFsaXplRGF0ZShkYXRlKSB7XG4gICAgICAgIHJldHVybiB0b0lTTy5jYWxsKGRhdGUpO1xuICAgIH0sXG4gICAgc2tpcE51bGxzOiBmYWxzZSxcbiAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IGZhbHNlXG59O1xuXG52YXIgaXNOb25OdWxsaXNoUHJpbWl0aXZlID0gZnVuY3Rpb24gaXNOb25OdWxsaXNoUHJpbWl0aXZlKHYpIHtcbiAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdzdHJpbmcnXG4gICAgICAgIHx8IHR5cGVvZiB2ID09PSAnbnVtYmVyJ1xuICAgICAgICB8fCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgIHx8IHR5cGVvZiB2ID09PSAnc3ltYm9sJ1xuICAgICAgICB8fCB0eXBlb2YgdiA9PT0gJ2JpZ2ludCc7XG59O1xuXG52YXIgc2VudGluZWwgPSB7fTtcblxudmFyIHN0cmluZ2lmeSA9IGZ1bmN0aW9uIHN0cmluZ2lmeShcbiAgICBvYmplY3QsXG4gICAgcHJlZml4LFxuICAgIGdlbmVyYXRlQXJyYXlQcmVmaXgsXG4gICAgY29tbWFSb3VuZFRyaXAsXG4gICAgYWxsb3dFbXB0eUFycmF5cyxcbiAgICBzdHJpY3ROdWxsSGFuZGxpbmcsXG4gICAgc2tpcE51bGxzLFxuICAgIGVuY29kZURvdEluS2V5cyxcbiAgICBlbmNvZGVyLFxuICAgIGZpbHRlcixcbiAgICBzb3J0LFxuICAgIGFsbG93RG90cyxcbiAgICBzZXJpYWxpemVEYXRlLFxuICAgIGZvcm1hdCxcbiAgICBmb3JtYXR0ZXIsXG4gICAgZW5jb2RlVmFsdWVzT25seSxcbiAgICBjaGFyc2V0LFxuICAgIHNpZGVDaGFubmVsXG4pIHtcbiAgICB2YXIgb2JqID0gb2JqZWN0O1xuXG4gICAgdmFyIHRtcFNjID0gc2lkZUNoYW5uZWw7XG4gICAgdmFyIHN0ZXAgPSAwO1xuICAgIHZhciBmaW5kRmxhZyA9IGZhbHNlO1xuICAgIHdoaWxlICgodG1wU2MgPSB0bXBTYy5nZXQoc2VudGluZWwpKSAhPT0gdm9pZCB1bmRlZmluZWQgJiYgIWZpbmRGbGFnKSB7XG4gICAgICAgIC8vIFdoZXJlIG9iamVjdCBsYXN0IGFwcGVhcmVkIGluIHRoZSByZWYgdHJlZVxuICAgICAgICB2YXIgcG9zID0gdG1wU2MuZ2V0KG9iamVjdCk7XG4gICAgICAgIHN0ZXAgKz0gMTtcbiAgICAgICAgaWYgKHR5cGVvZiBwb3MgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpZiAocG9zID09PSBzdGVwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0N5Y2xpYyBvYmplY3QgdmFsdWUnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmluZEZsYWcgPSB0cnVlOyAvLyBCcmVhayB3aGlsZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdG1wU2MuZ2V0KHNlbnRpbmVsKSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHN0ZXAgPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb2JqID0gZmlsdGVyKHByZWZpeCwgb2JqKTtcbiAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgb2JqID0gc2VyaWFsaXplRGF0ZShvYmopO1xuICAgIH0gZWxzZSBpZiAoZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2NvbW1hJyAmJiBpc0FycmF5KG9iaikpIHtcbiAgICAgICAgb2JqID0gdXRpbHMubWF5YmVNYXAob2JqLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChvYmogPT09IG51bGwpIHtcbiAgICAgICAgaWYgKHN0cmljdE51bGxIYW5kbGluZykge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZXIgJiYgIWVuY29kZVZhbHVlc09ubHkgPyBlbmNvZGVyKHByZWZpeCwgZGVmYXVsdHMuZW5jb2RlciwgY2hhcnNldCwgJ2tleScsIGZvcm1hdCkgOiBwcmVmaXg7XG4gICAgICAgIH1cblxuICAgICAgICBvYmogPSAnJztcbiAgICB9XG5cbiAgICBpZiAoaXNOb25OdWxsaXNoUHJpbWl0aXZlKG9iaikgfHwgdXRpbHMuaXNCdWZmZXIob2JqKSkge1xuICAgICAgICBpZiAoZW5jb2Rlcikge1xuICAgICAgICAgICAgdmFyIGtleVZhbHVlID0gZW5jb2RlVmFsdWVzT25seSA/IHByZWZpeCA6IGVuY29kZXIocHJlZml4LCBkZWZhdWx0cy5lbmNvZGVyLCBjaGFyc2V0LCAna2V5JywgZm9ybWF0KTtcbiAgICAgICAgICAgIHJldHVybiBbZm9ybWF0dGVyKGtleVZhbHVlKSArICc9JyArIGZvcm1hdHRlcihlbmNvZGVyKG9iaiwgZGVmYXVsdHMuZW5jb2RlciwgY2hhcnNldCwgJ3ZhbHVlJywgZm9ybWF0KSldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbZm9ybWF0dGVyKHByZWZpeCkgKyAnPScgKyBmb3JtYXR0ZXIoU3RyaW5nKG9iaikpXTtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWVzID0gW107XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG5cbiAgICB2YXIgb2JqS2V5cztcbiAgICBpZiAoZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2NvbW1hJyAmJiBpc0FycmF5KG9iaikpIHtcbiAgICAgICAgLy8gd2UgbmVlZCB0byBqb2luIGVsZW1lbnRzIGluXG4gICAgICAgIGlmIChlbmNvZGVWYWx1ZXNPbmx5ICYmIGVuY29kZXIpIHtcbiAgICAgICAgICAgIG9iaiA9IHV0aWxzLm1heWJlTWFwKG9iaiwgZW5jb2Rlcik7XG4gICAgICAgIH1cbiAgICAgICAgb2JqS2V5cyA9IFt7IHZhbHVlOiBvYmoubGVuZ3RoID4gMCA/IG9iai5qb2luKCcsJykgfHwgbnVsbCA6IHZvaWQgdW5kZWZpbmVkIH1dO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShmaWx0ZXIpKSB7XG4gICAgICAgIG9iaktleXMgPSBmaWx0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICBvYmpLZXlzID0gc29ydCA/IGtleXMuc29ydChzb3J0KSA6IGtleXM7XG4gICAgfVxuXG4gICAgdmFyIGVuY29kZWRQcmVmaXggPSBlbmNvZGVEb3RJbktleXMgPyBwcmVmaXgucmVwbGFjZSgvXFwuL2csICclMkUnKSA6IHByZWZpeDtcblxuICAgIHZhciBhZGp1c3RlZFByZWZpeCA9IGNvbW1hUm91bmRUcmlwICYmIGlzQXJyYXkob2JqKSAmJiBvYmoubGVuZ3RoID09PSAxID8gZW5jb2RlZFByZWZpeCArICdbXScgOiBlbmNvZGVkUHJlZml4O1xuXG4gICAgaWYgKGFsbG93RW1wdHlBcnJheXMgJiYgaXNBcnJheShvYmopICYmIG9iai5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGFkanVzdGVkUHJlZml4ICsgJ1tdJztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG9iaktleXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgdmFyIGtleSA9IG9iaktleXNbal07XG4gICAgICAgIHZhciB2YWx1ZSA9IHR5cGVvZiBrZXkgPT09ICdvYmplY3QnICYmIHR5cGVvZiBrZXkudmFsdWUgIT09ICd1bmRlZmluZWQnID8ga2V5LnZhbHVlIDogb2JqW2tleV07XG5cbiAgICAgICAgaWYgKHNraXBOdWxscyAmJiB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZW5jb2RlZEtleSA9IGFsbG93RG90cyAmJiBlbmNvZGVEb3RJbktleXMgPyBrZXkucmVwbGFjZSgvXFwuL2csICclMkUnKSA6IGtleTtcbiAgICAgICAgdmFyIGtleVByZWZpeCA9IGlzQXJyYXkob2JqKVxuICAgICAgICAgICAgPyB0eXBlb2YgZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2Z1bmN0aW9uJyA/IGdlbmVyYXRlQXJyYXlQcmVmaXgoYWRqdXN0ZWRQcmVmaXgsIGVuY29kZWRLZXkpIDogYWRqdXN0ZWRQcmVmaXhcbiAgICAgICAgICAgIDogYWRqdXN0ZWRQcmVmaXggKyAoYWxsb3dEb3RzID8gJy4nICsgZW5jb2RlZEtleSA6ICdbJyArIGVuY29kZWRLZXkgKyAnXScpO1xuXG4gICAgICAgIHNpZGVDaGFubmVsLnNldChvYmplY3QsIHN0ZXApO1xuICAgICAgICB2YXIgdmFsdWVTaWRlQ2hhbm5lbCA9IGdldFNpZGVDaGFubmVsKCk7XG4gICAgICAgIHZhbHVlU2lkZUNoYW5uZWwuc2V0KHNlbnRpbmVsLCBzaWRlQ2hhbm5lbCk7XG4gICAgICAgIHB1c2hUb0FycmF5KHZhbHVlcywgc3RyaW5naWZ5KFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBrZXlQcmVmaXgsXG4gICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICAgICAgY29tbWFSb3VuZFRyaXAsXG4gICAgICAgICAgICBhbGxvd0VtcHR5QXJyYXlzLFxuICAgICAgICAgICAgc3RyaWN0TnVsbEhhbmRsaW5nLFxuICAgICAgICAgICAgc2tpcE51bGxzLFxuICAgICAgICAgICAgZW5jb2RlRG90SW5LZXlzLFxuICAgICAgICAgICAgZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2NvbW1hJyAmJiBlbmNvZGVWYWx1ZXNPbmx5ICYmIGlzQXJyYXkob2JqKSA/IG51bGwgOiBlbmNvZGVyLFxuICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgICAgc29ydCxcbiAgICAgICAgICAgIGFsbG93RG90cyxcbiAgICAgICAgICAgIHNlcmlhbGl6ZURhdGUsXG4gICAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgICBmb3JtYXR0ZXIsXG4gICAgICAgICAgICBlbmNvZGVWYWx1ZXNPbmx5LFxuICAgICAgICAgICAgY2hhcnNldCxcbiAgICAgICAgICAgIHZhbHVlU2lkZUNoYW5uZWxcbiAgICAgICAgKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcztcbn07XG5cbnZhciBub3JtYWxpemVTdHJpbmdpZnlPcHRpb25zID0gZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5naWZ5T3B0aW9ucyhvcHRzKSB7XG4gICAgaWYgKCFvcHRzKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdHMuYWxsb3dFbXB0eUFycmF5cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9wdHMuYWxsb3dFbXB0eUFycmF5cyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2BhbGxvd0VtcHR5QXJyYXlzYCBvcHRpb24gY2FuIG9ubHkgYmUgYHRydWVgIG9yIGBmYWxzZWAsIHdoZW4gcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdHMuZW5jb2RlRG90SW5LZXlzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb3B0cy5lbmNvZGVEb3RJbktleXMgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgZW5jb2RlRG90SW5LZXlzYCBvcHRpb24gY2FuIG9ubHkgYmUgYHRydWVgIG9yIGBmYWxzZWAsIHdoZW4gcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5lbmNvZGVyICE9PSBudWxsICYmIHR5cGVvZiBvcHRzLmVuY29kZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvcHRzLmVuY29kZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRW5jb2RlciBoYXMgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhcnNldCA9IG9wdHMuY2hhcnNldCB8fCBkZWZhdWx0cy5jaGFyc2V0O1xuICAgIGlmICh0eXBlb2Ygb3B0cy5jaGFyc2V0ICE9PSAndW5kZWZpbmVkJyAmJiBvcHRzLmNoYXJzZXQgIT09ICd1dGYtOCcgJiYgb3B0cy5jaGFyc2V0ICE9PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGNoYXJzZXQgb3B0aW9uIG11c3QgYmUgZWl0aGVyIHV0Zi04LCBpc28tODg1OS0xLCBvciB1bmRlZmluZWQnKTtcbiAgICB9XG5cbiAgICB2YXIgZm9ybWF0ID0gZm9ybWF0c1snZGVmYXVsdCddO1xuICAgIGlmICh0eXBlb2Ygb3B0cy5mb3JtYXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmICghaGFzLmNhbGwoZm9ybWF0cy5mb3JtYXR0ZXJzLCBvcHRzLmZvcm1hdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZm9ybWF0IG9wdGlvbiBwcm92aWRlZC4nKTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtYXQgPSBvcHRzLmZvcm1hdDtcbiAgICB9XG4gICAgdmFyIGZvcm1hdHRlciA9IGZvcm1hdHMuZm9ybWF0dGVyc1tmb3JtYXRdO1xuXG4gICAgdmFyIGZpbHRlciA9IGRlZmF1bHRzLmZpbHRlcjtcbiAgICBpZiAodHlwZW9mIG9wdHMuZmlsdGVyID09PSAnZnVuY3Rpb24nIHx8IGlzQXJyYXkob3B0cy5maWx0ZXIpKSB7XG4gICAgICAgIGZpbHRlciA9IG9wdHMuZmlsdGVyO1xuICAgIH1cblxuICAgIHZhciBhcnJheUZvcm1hdDtcbiAgICBpZiAob3B0cy5hcnJheUZvcm1hdCBpbiBhcnJheVByZWZpeEdlbmVyYXRvcnMpIHtcbiAgICAgICAgYXJyYXlGb3JtYXQgPSBvcHRzLmFycmF5Rm9ybWF0O1xuICAgIH0gZWxzZSBpZiAoJ2luZGljZXMnIGluIG9wdHMpIHtcbiAgICAgICAgYXJyYXlGb3JtYXQgPSBvcHRzLmluZGljZXMgPyAnaW5kaWNlcycgOiAncmVwZWF0JztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhcnJheUZvcm1hdCA9IGRlZmF1bHRzLmFycmF5Rm9ybWF0O1xuICAgIH1cblxuICAgIGlmICgnY29tbWFSb3VuZFRyaXAnIGluIG9wdHMgJiYgdHlwZW9mIG9wdHMuY29tbWFSb3VuZFRyaXAgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgY29tbWFSb3VuZFRyaXBgIG11c3QgYmUgYSBib29sZWFuLCBvciBhYnNlbnQnKTtcbiAgICB9XG5cbiAgICB2YXIgYWxsb3dEb3RzID0gdHlwZW9mIG9wdHMuYWxsb3dEb3RzID09PSAndW5kZWZpbmVkJyA/IG9wdHMuZW5jb2RlRG90SW5LZXlzID09PSB0cnVlID8gdHJ1ZSA6IGRlZmF1bHRzLmFsbG93RG90cyA6ICEhb3B0cy5hbGxvd0RvdHM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBhZGRRdWVyeVByZWZpeDogdHlwZW9mIG9wdHMuYWRkUXVlcnlQcmVmaXggPT09ICdib29sZWFuJyA/IG9wdHMuYWRkUXVlcnlQcmVmaXggOiBkZWZhdWx0cy5hZGRRdWVyeVByZWZpeCxcbiAgICAgICAgYWxsb3dEb3RzOiBhbGxvd0RvdHMsXG4gICAgICAgIGFsbG93RW1wdHlBcnJheXM6IHR5cGVvZiBvcHRzLmFsbG93RW1wdHlBcnJheXMgPT09ICdib29sZWFuJyA/ICEhb3B0cy5hbGxvd0VtcHR5QXJyYXlzIDogZGVmYXVsdHMuYWxsb3dFbXB0eUFycmF5cyxcbiAgICAgICAgYXJyYXlGb3JtYXQ6IGFycmF5Rm9ybWF0LFxuICAgICAgICBjaGFyc2V0OiBjaGFyc2V0LFxuICAgICAgICBjaGFyc2V0U2VudGluZWw6IHR5cGVvZiBvcHRzLmNoYXJzZXRTZW50aW5lbCA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5jaGFyc2V0U2VudGluZWwgOiBkZWZhdWx0cy5jaGFyc2V0U2VudGluZWwsXG4gICAgICAgIGNvbW1hUm91bmRUcmlwOiBvcHRzLmNvbW1hUm91bmRUcmlwLFxuICAgICAgICBkZWxpbWl0ZXI6IHR5cGVvZiBvcHRzLmRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5kZWxpbWl0ZXIgOiBvcHRzLmRlbGltaXRlcixcbiAgICAgICAgZW5jb2RlOiB0eXBlb2Ygb3B0cy5lbmNvZGUgPT09ICdib29sZWFuJyA/IG9wdHMuZW5jb2RlIDogZGVmYXVsdHMuZW5jb2RlLFxuICAgICAgICBlbmNvZGVEb3RJbktleXM6IHR5cGVvZiBvcHRzLmVuY29kZURvdEluS2V5cyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5lbmNvZGVEb3RJbktleXMgOiBkZWZhdWx0cy5lbmNvZGVEb3RJbktleXMsXG4gICAgICAgIGVuY29kZXI6IHR5cGVvZiBvcHRzLmVuY29kZXIgPT09ICdmdW5jdGlvbicgPyBvcHRzLmVuY29kZXIgOiBkZWZhdWx0cy5lbmNvZGVyLFxuICAgICAgICBlbmNvZGVWYWx1ZXNPbmx5OiB0eXBlb2Ygb3B0cy5lbmNvZGVWYWx1ZXNPbmx5ID09PSAnYm9vbGVhbicgPyBvcHRzLmVuY29kZVZhbHVlc09ubHkgOiBkZWZhdWx0cy5lbmNvZGVWYWx1ZXNPbmx5LFxuICAgICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICAgICAgZm9ybWF0OiBmb3JtYXQsXG4gICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyLFxuICAgICAgICBzZXJpYWxpemVEYXRlOiB0eXBlb2Ygb3B0cy5zZXJpYWxpemVEYXRlID09PSAnZnVuY3Rpb24nID8gb3B0cy5zZXJpYWxpemVEYXRlIDogZGVmYXVsdHMuc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgc2tpcE51bGxzOiB0eXBlb2Ygb3B0cy5za2lwTnVsbHMgPT09ICdib29sZWFuJyA/IG9wdHMuc2tpcE51bGxzIDogZGVmYXVsdHMuc2tpcE51bGxzLFxuICAgICAgICBzb3J0OiB0eXBlb2Ygb3B0cy5zb3J0ID09PSAnZnVuY3Rpb24nID8gb3B0cy5zb3J0IDogbnVsbCxcbiAgICAgICAgc3RyaWN0TnVsbEhhbmRsaW5nOiB0eXBlb2Ygb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgPT09ICdib29sZWFuJyA/IG9wdHMuc3RyaWN0TnVsbEhhbmRsaW5nIDogZGVmYXVsdHMuc3RyaWN0TnVsbEhhbmRsaW5nXG4gICAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgb3B0cykge1xuICAgIHZhciBvYmogPSBvYmplY3Q7XG4gICAgdmFyIG9wdGlvbnMgPSBub3JtYWxpemVTdHJpbmdpZnlPcHRpb25zKG9wdHMpO1xuXG4gICAgdmFyIG9iaktleXM7XG4gICAgdmFyIGZpbHRlcjtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5maWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIG9iaiA9IGZpbHRlcignJywgb2JqKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob3B0aW9ucy5maWx0ZXIpKSB7XG4gICAgICAgIGZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgICAgICBvYmpLZXlzID0gZmlsdGVyO1xuICAgIH1cblxuICAgIHZhciBrZXlzID0gW107XG5cbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICB2YXIgZ2VuZXJhdGVBcnJheVByZWZpeCA9IGFycmF5UHJlZml4R2VuZXJhdG9yc1tvcHRpb25zLmFycmF5Rm9ybWF0XTtcbiAgICB2YXIgY29tbWFSb3VuZFRyaXAgPSBnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnY29tbWEnICYmIG9wdGlvbnMuY29tbWFSb3VuZFRyaXA7XG5cbiAgICBpZiAoIW9iaktleXMpIHtcbiAgICAgICAgb2JqS2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc29ydCkge1xuICAgICAgICBvYmpLZXlzLnNvcnQob3B0aW9ucy5zb3J0KTtcbiAgICB9XG5cbiAgICB2YXIgc2lkZUNoYW5uZWwgPSBnZXRTaWRlQ2hhbm5lbCgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqS2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIga2V5ID0gb2JqS2V5c1tpXTtcblxuICAgICAgICBpZiAob3B0aW9ucy5za2lwTnVsbHMgJiYgb2JqW2tleV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHB1c2hUb0FycmF5KGtleXMsIHN0cmluZ2lmeShcbiAgICAgICAgICAgIG9ialtrZXldLFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgZ2VuZXJhdGVBcnJheVByZWZpeCxcbiAgICAgICAgICAgIGNvbW1hUm91bmRUcmlwLFxuICAgICAgICAgICAgb3B0aW9ucy5hbGxvd0VtcHR5QXJyYXlzLFxuICAgICAgICAgICAgb3B0aW9ucy5zdHJpY3ROdWxsSGFuZGxpbmcsXG4gICAgICAgICAgICBvcHRpb25zLnNraXBOdWxscyxcbiAgICAgICAgICAgIG9wdGlvbnMuZW5jb2RlRG90SW5LZXlzLFxuICAgICAgICAgICAgb3B0aW9ucy5lbmNvZGUgPyBvcHRpb25zLmVuY29kZXIgOiBudWxsLFxuICAgICAgICAgICAgb3B0aW9ucy5maWx0ZXIsXG4gICAgICAgICAgICBvcHRpb25zLnNvcnQsXG4gICAgICAgICAgICBvcHRpb25zLmFsbG93RG90cyxcbiAgICAgICAgICAgIG9wdGlvbnMuc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgIG9wdGlvbnMuZm9ybWF0LFxuICAgICAgICAgICAgb3B0aW9ucy5mb3JtYXR0ZXIsXG4gICAgICAgICAgICBvcHRpb25zLmVuY29kZVZhbHVlc09ubHksXG4gICAgICAgICAgICBvcHRpb25zLmNoYXJzZXQsXG4gICAgICAgICAgICBzaWRlQ2hhbm5lbFxuICAgICAgICApKTtcbiAgICB9XG5cbiAgICB2YXIgam9pbmVkID0ga2V5cy5qb2luKG9wdGlvbnMuZGVsaW1pdGVyKTtcbiAgICB2YXIgcHJlZml4ID0gb3B0aW9ucy5hZGRRdWVyeVByZWZpeCA9PT0gdHJ1ZSA/ICc/JyA6ICcnO1xuXG4gICAgaWYgKG9wdGlvbnMuY2hhcnNldFNlbnRpbmVsKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmNoYXJzZXQgPT09ICdpc28tODg1OS0xJykge1xuICAgICAgICAgICAgLy8gZW5jb2RlVVJJQ29tcG9uZW50KCcmIzEwMDAzOycpLCB0aGUgXCJudW1lcmljIGVudGl0eVwiIHJlcHJlc2VudGF0aW9uIG9mIGEgY2hlY2ttYXJrXG4gICAgICAgICAgICBwcmVmaXggKz0gJ3V0Zjg9JTI2JTIzMTAwMDMlM0ImJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGVuY29kZVVSSUNvbXBvbmVudCgn4pyTJylcbiAgICAgICAgICAgIHByZWZpeCArPSAndXRmOD0lRTIlOUMlOTMmJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBqb2luZWQubGVuZ3RoID4gMCA/IHByZWZpeCArIGpvaW5lZCA6ICcnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxudmFyIGRlZmF1bHRzID0ge1xuICAgIGFsbG93RG90czogZmFsc2UsXG4gICAgYWxsb3dFbXB0eUFycmF5czogZmFsc2UsXG4gICAgYWxsb3dQcm90b3R5cGVzOiBmYWxzZSxcbiAgICBhbGxvd1NwYXJzZTogZmFsc2UsXG4gICAgYXJyYXlMaW1pdDogMjAsXG4gICAgY2hhcnNldDogJ3V0Zi04JyxcbiAgICBjaGFyc2V0U2VudGluZWw6IGZhbHNlLFxuICAgIGNvbW1hOiBmYWxzZSxcbiAgICBkZWNvZGVEb3RJbktleXM6IGZhbHNlLFxuICAgIGRlY29kZXI6IHV0aWxzLmRlY29kZSxcbiAgICBkZWxpbWl0ZXI6ICcmJyxcbiAgICBkZXB0aDogNSxcbiAgICBkdXBsaWNhdGVzOiAnY29tYmluZScsXG4gICAgaWdub3JlUXVlcnlQcmVmaXg6IGZhbHNlLFxuICAgIGludGVycHJldE51bWVyaWNFbnRpdGllczogZmFsc2UsXG4gICAgcGFyYW1ldGVyTGltaXQ6IDEwMDAsXG4gICAgcGFyc2VBcnJheXM6IHRydWUsXG4gICAgcGxhaW5PYmplY3RzOiBmYWxzZSxcbiAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IGZhbHNlXG59O1xuXG52YXIgaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzID0gZnVuY3Rpb24gKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvJiMoXFxkKyk7L2csIGZ1bmN0aW9uICgkMCwgbnVtYmVyU3RyKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KG51bWJlclN0ciwgMTApKTtcbiAgICB9KTtcbn07XG5cbnZhciBwYXJzZUFycmF5VmFsdWUgPSBmdW5jdGlvbiAodmFsLCBvcHRpb25zKSB7XG4gICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLmNvbW1hICYmIHZhbC5pbmRleE9mKCcsJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gdmFsLnNwbGl0KCcsJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbDtcbn07XG5cbi8vIFRoaXMgaXMgd2hhdCBicm93c2VycyB3aWxsIHN1Ym1pdCB3aGVuIHRoZSDinJMgY2hhcmFjdGVyIG9jY3VycyBpbiBhblxuLy8gYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIGJvZHkgYW5kIHRoZSBlbmNvZGluZyBvZiB0aGUgcGFnZSBjb250YWluaW5nXG4vLyB0aGUgZm9ybSBpcyBpc28tODg1OS0xLCBvciB3aGVuIHRoZSBzdWJtaXR0ZWQgZm9ybSBoYXMgYW4gYWNjZXB0LWNoYXJzZXRcbi8vIGF0dHJpYnV0ZSBvZiBpc28tODg1OS0xLiBQcmVzdW1hYmx5IGFsc28gd2l0aCBvdGhlciBjaGFyc2V0cyB0aGF0IGRvIG5vdCBjb250YWluXG4vLyB0aGUg4pyTIGNoYXJhY3Rlciwgc3VjaCBhcyB1cy1hc2NpaS5cbnZhciBpc29TZW50aW5lbCA9ICd1dGY4PSUyNiUyMzEwMDAzJTNCJzsgLy8gZW5jb2RlVVJJQ29tcG9uZW50KCcmIzEwMDAzOycpXG5cbi8vIFRoZXNlIGFyZSB0aGUgcGVyY2VudC1lbmNvZGVkIHV0Zi04IG9jdGV0cyByZXByZXNlbnRpbmcgYSBjaGVja21hcmssIGluZGljYXRpbmcgdGhhdCB0aGUgcmVxdWVzdCBhY3R1YWxseSBpcyB1dGYtOCBlbmNvZGVkLlxudmFyIGNoYXJzZXRTZW50aW5lbCA9ICd1dGY4PSVFMiU5QyU5Myc7IC8vIGVuY29kZVVSSUNvbXBvbmVudCgn4pyTJylcblxudmFyIHBhcnNlVmFsdWVzID0gZnVuY3Rpb24gcGFyc2VRdWVyeVN0cmluZ1ZhbHVlcyhzdHIsIG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqID0geyBfX3Byb3RvX186IG51bGwgfTtcblxuICAgIHZhciBjbGVhblN0ciA9IG9wdGlvbnMuaWdub3JlUXVlcnlQcmVmaXggPyBzdHIucmVwbGFjZSgvXlxcPy8sICcnKSA6IHN0cjtcbiAgICBjbGVhblN0ciA9IGNsZWFuU3RyLnJlcGxhY2UoLyU1Qi9naSwgJ1snKS5yZXBsYWNlKC8lNUQvZ2ksICddJyk7XG4gICAgdmFyIGxpbWl0ID0gb3B0aW9ucy5wYXJhbWV0ZXJMaW1pdCA9PT0gSW5maW5pdHkgPyB1bmRlZmluZWQgOiBvcHRpb25zLnBhcmFtZXRlckxpbWl0O1xuICAgIHZhciBwYXJ0cyA9IGNsZWFuU3RyLnNwbGl0KG9wdGlvbnMuZGVsaW1pdGVyLCBsaW1pdCk7XG4gICAgdmFyIHNraXBJbmRleCA9IC0xOyAvLyBLZWVwIHRyYWNrIG9mIHdoZXJlIHRoZSB1dGY4IHNlbnRpbmVsIHdhcyBmb3VuZFxuICAgIHZhciBpO1xuXG4gICAgdmFyIGNoYXJzZXQgPSBvcHRpb25zLmNoYXJzZXQ7XG4gICAgaWYgKG9wdGlvbnMuY2hhcnNldFNlbnRpbmVsKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKHBhcnRzW2ldLmluZGV4T2YoJ3V0Zjg9JykgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAocGFydHNbaV0gPT09IGNoYXJzZXRTZW50aW5lbCkge1xuICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gJ3V0Zi04JztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnRzW2ldID09PSBpc29TZW50aW5lbCkge1xuICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gJ2lzby04ODU5LTEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBza2lwSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIGkgPSBwYXJ0cy5sZW5ndGg7IC8vIFRoZSBlc2xpbnQgc2V0dGluZ3MgZG8gbm90IGFsbG93IGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChpID09PSBza2lwSW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV07XG5cbiAgICAgICAgdmFyIGJyYWNrZXRFcXVhbHNQb3MgPSBwYXJ0LmluZGV4T2YoJ109Jyk7XG4gICAgICAgIHZhciBwb3MgPSBicmFja2V0RXF1YWxzUG9zID09PSAtMSA/IHBhcnQuaW5kZXhPZignPScpIDogYnJhY2tldEVxdWFsc1BvcyArIDE7XG5cbiAgICAgICAgdmFyIGtleSwgdmFsO1xuICAgICAgICBpZiAocG9zID09PSAtMSkge1xuICAgICAgICAgICAga2V5ID0gb3B0aW9ucy5kZWNvZGVyKHBhcnQsIGRlZmF1bHRzLmRlY29kZXIsIGNoYXJzZXQsICdrZXknKTtcbiAgICAgICAgICAgIHZhbCA9IG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nID8gbnVsbCA6ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAga2V5ID0gb3B0aW9ucy5kZWNvZGVyKHBhcnQuc2xpY2UoMCwgcG9zKSwgZGVmYXVsdHMuZGVjb2RlciwgY2hhcnNldCwgJ2tleScpO1xuICAgICAgICAgICAgdmFsID0gdXRpbHMubWF5YmVNYXAoXG4gICAgICAgICAgICAgICAgcGFyc2VBcnJheVZhbHVlKHBhcnQuc2xpY2UocG9zICsgMSksIG9wdGlvbnMpLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChlbmNvZGVkVmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmRlY29kZXIoZW5jb2RlZFZhbCwgZGVmYXVsdHMuZGVjb2RlciwgY2hhcnNldCwgJ3ZhbHVlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWwgJiYgb3B0aW9ucy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMgJiYgY2hhcnNldCA9PT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgICAgICB2YWwgPSBpbnRlcnByZXROdW1lcmljRW50aXRpZXModmFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJ0LmluZGV4T2YoJ1tdPScpID4gLTEpIHtcbiAgICAgICAgICAgIHZhbCA9IGlzQXJyYXkodmFsKSA/IFt2YWxdIDogdmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGV4aXN0aW5nID0gaGFzLmNhbGwob2JqLCBrZXkpO1xuICAgICAgICBpZiAoZXhpc3RpbmcgJiYgb3B0aW9ucy5kdXBsaWNhdGVzID09PSAnY29tYmluZScpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gdXRpbHMuY29tYmluZShvYmpba2V5XSwgdmFsKTtcbiAgICAgICAgfSBlbHNlIGlmICghZXhpc3RpbmcgfHwgb3B0aW9ucy5kdXBsaWNhdGVzID09PSAnbGFzdCcpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBwYXJzZU9iamVjdCA9IGZ1bmN0aW9uIChjaGFpbiwgdmFsLCBvcHRpb25zLCB2YWx1ZXNQYXJzZWQpIHtcbiAgICB2YXIgbGVhZiA9IHZhbHVlc1BhcnNlZCA/IHZhbCA6IHBhcnNlQXJyYXlWYWx1ZSh2YWwsIG9wdGlvbnMpO1xuXG4gICAgZm9yICh2YXIgaSA9IGNoYWluLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBvYmo7XG4gICAgICAgIHZhciByb290ID0gY2hhaW5baV07XG5cbiAgICAgICAgaWYgKHJvb3QgPT09ICdbXScgJiYgb3B0aW9ucy5wYXJzZUFycmF5cykge1xuICAgICAgICAgICAgb2JqID0gb3B0aW9ucy5hbGxvd0VtcHR5QXJyYXlzICYmIGxlYWYgPT09ICcnID8gW10gOiBbXS5jb25jYXQobGVhZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYmogPSBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcbiAgICAgICAgICAgIHZhciBjbGVhblJvb3QgPSByb290LmNoYXJBdCgwKSA9PT0gJ1snICYmIHJvb3QuY2hhckF0KHJvb3QubGVuZ3RoIC0gMSkgPT09ICddJyA/IHJvb3Quc2xpY2UoMSwgLTEpIDogcm9vdDtcbiAgICAgICAgICAgIHZhciBkZWNvZGVkUm9vdCA9IG9wdGlvbnMuZGVjb2RlRG90SW5LZXlzID8gY2xlYW5Sb290LnJlcGxhY2UoLyUyRS9nLCAnLicpIDogY2xlYW5Sb290O1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gcGFyc2VJbnQoZGVjb2RlZFJvb3QsIDEwKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5wYXJzZUFycmF5cyAmJiBkZWNvZGVkUm9vdCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICBvYmogPSB7IDA6IGxlYWYgfTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgIWlzTmFOKGluZGV4KVxuICAgICAgICAgICAgICAgICYmIHJvb3QgIT09IGRlY29kZWRSb290XG4gICAgICAgICAgICAgICAgJiYgU3RyaW5nKGluZGV4KSA9PT0gZGVjb2RlZFJvb3RcbiAgICAgICAgICAgICAgICAmJiBpbmRleCA+PSAwXG4gICAgICAgICAgICAgICAgJiYgKG9wdGlvbnMucGFyc2VBcnJheXMgJiYgaW5kZXggPD0gb3B0aW9ucy5hcnJheUxpbWl0KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgb2JqID0gW107XG4gICAgICAgICAgICAgICAgb2JqW2luZGV4XSA9IGxlYWY7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRlY29kZWRSb290ICE9PSAnX19wcm90b19fJykge1xuICAgICAgICAgICAgICAgIG9ialtkZWNvZGVkUm9vdF0gPSBsZWFmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGVhZiA9IG9iajtcbiAgICB9XG5cbiAgICByZXR1cm4gbGVhZjtcbn07XG5cbnZhciBwYXJzZUtleXMgPSBmdW5jdGlvbiBwYXJzZVF1ZXJ5U3RyaW5nS2V5cyhnaXZlbktleSwgdmFsLCBvcHRpb25zLCB2YWx1ZXNQYXJzZWQpIHtcbiAgICBpZiAoIWdpdmVuS2V5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUcmFuc2Zvcm0gZG90IG5vdGF0aW9uIHRvIGJyYWNrZXQgbm90YXRpb25cbiAgICB2YXIga2V5ID0gb3B0aW9ucy5hbGxvd0RvdHMgPyBnaXZlbktleS5yZXBsYWNlKC9cXC4oW14uW10rKS9nLCAnWyQxXScpIDogZ2l2ZW5LZXk7XG5cbiAgICAvLyBUaGUgcmVnZXggY2h1bmtzXG5cbiAgICB2YXIgYnJhY2tldHMgPSAvKFxcW1teW1xcXV0qXSkvO1xuICAgIHZhciBjaGlsZCA9IC8oXFxbW15bXFxdXSpdKS9nO1xuXG4gICAgLy8gR2V0IHRoZSBwYXJlbnRcblxuICAgIHZhciBzZWdtZW50ID0gb3B0aW9ucy5kZXB0aCA+IDAgJiYgYnJhY2tldHMuZXhlYyhrZXkpO1xuICAgIHZhciBwYXJlbnQgPSBzZWdtZW50ID8ga2V5LnNsaWNlKDAsIHNlZ21lbnQuaW5kZXgpIDoga2V5O1xuXG4gICAgLy8gU3Rhc2ggdGhlIHBhcmVudCBpZiBpdCBleGlzdHNcblxuICAgIHZhciBrZXlzID0gW107XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgICAvLyBJZiB3ZSBhcmVuJ3QgdXNpbmcgcGxhaW4gb2JqZWN0cywgb3B0aW9uYWxseSBwcmVmaXgga2V5cyB0aGF0IHdvdWxkIG92ZXJ3cml0ZSBvYmplY3QgcHJvdG90eXBlIHByb3BlcnRpZXNcbiAgICAgICAgaWYgKCFvcHRpb25zLnBsYWluT2JqZWN0cyAmJiBoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLCBwYXJlbnQpKSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAga2V5cy5wdXNoKHBhcmVudCk7XG4gICAgfVxuXG4gICAgLy8gTG9vcCB0aHJvdWdoIGNoaWxkcmVuIGFwcGVuZGluZyB0byB0aGUgYXJyYXkgdW50aWwgd2UgaGl0IGRlcHRoXG5cbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKG9wdGlvbnMuZGVwdGggPiAwICYmIChzZWdtZW50ID0gY2hpbGQuZXhlYyhrZXkpKSAhPT0gbnVsbCAmJiBpIDwgb3B0aW9ucy5kZXB0aCkge1xuICAgICAgICBpICs9IDE7XG4gICAgICAgIGlmICghb3B0aW9ucy5wbGFpbk9iamVjdHMgJiYgaGFzLmNhbGwoT2JqZWN0LnByb3RvdHlwZSwgc2VnbWVudFsxXS5zbGljZSgxLCAtMSkpKSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGtleXMucHVzaChzZWdtZW50WzFdKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSdzIGEgcmVtYWluZGVyLCBqdXN0IGFkZCB3aGF0ZXZlciBpcyBsZWZ0XG5cbiAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICBrZXlzLnB1c2goJ1snICsga2V5LnNsaWNlKHNlZ21lbnQuaW5kZXgpICsgJ10nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VPYmplY3Qoa2V5cywgdmFsLCBvcHRpb25zLCB2YWx1ZXNQYXJzZWQpO1xufTtcblxudmFyIG5vcm1hbGl6ZVBhcnNlT3B0aW9ucyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZVBhcnNlT3B0aW9ucyhvcHRzKSB7XG4gICAgaWYgKCFvcHRzKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdHMuYWxsb3dFbXB0eUFycmF5cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9wdHMuYWxsb3dFbXB0eUFycmF5cyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2BhbGxvd0VtcHR5QXJyYXlzYCBvcHRpb24gY2FuIG9ubHkgYmUgYHRydWVgIG9yIGBmYWxzZWAsIHdoZW4gcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdHMuZGVjb2RlRG90SW5LZXlzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb3B0cy5kZWNvZGVEb3RJbktleXMgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgZGVjb2RlRG90SW5LZXlzYCBvcHRpb24gY2FuIG9ubHkgYmUgYHRydWVgIG9yIGBmYWxzZWAsIHdoZW4gcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5kZWNvZGVyICE9PSBudWxsICYmIHR5cGVvZiBvcHRzLmRlY29kZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvcHRzLmRlY29kZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRGVjb2RlciBoYXMgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdHMuY2hhcnNldCAhPT0gJ3VuZGVmaW5lZCcgJiYgb3B0cy5jaGFyc2V0ICE9PSAndXRmLTgnICYmIG9wdHMuY2hhcnNldCAhPT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBjaGFyc2V0IG9wdGlvbiBtdXN0IGJlIGVpdGhlciB1dGYtOCwgaXNvLTg4NTktMSwgb3IgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHZhciBjaGFyc2V0ID0gdHlwZW9mIG9wdHMuY2hhcnNldCA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5jaGFyc2V0IDogb3B0cy5jaGFyc2V0O1xuXG4gICAgdmFyIGR1cGxpY2F0ZXMgPSB0eXBlb2Ygb3B0cy5kdXBsaWNhdGVzID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHRzLmR1cGxpY2F0ZXMgOiBvcHRzLmR1cGxpY2F0ZXM7XG5cbiAgICBpZiAoZHVwbGljYXRlcyAhPT0gJ2NvbWJpbmUnICYmIGR1cGxpY2F0ZXMgIT09ICdmaXJzdCcgJiYgZHVwbGljYXRlcyAhPT0gJ2xhc3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBkdXBsaWNhdGVzIG9wdGlvbiBtdXN0IGJlIGVpdGhlciBjb21iaW5lLCBmaXJzdCwgb3IgbGFzdCcpO1xuICAgIH1cblxuICAgIHZhciBhbGxvd0RvdHMgPSB0eXBlb2Ygb3B0cy5hbGxvd0RvdHMgPT09ICd1bmRlZmluZWQnID8gb3B0cy5kZWNvZGVEb3RJbktleXMgPT09IHRydWUgPyB0cnVlIDogZGVmYXVsdHMuYWxsb3dEb3RzIDogISFvcHRzLmFsbG93RG90cztcblxuICAgIHJldHVybiB7XG4gICAgICAgIGFsbG93RG90czogYWxsb3dEb3RzLFxuICAgICAgICBhbGxvd0VtcHR5QXJyYXlzOiB0eXBlb2Ygb3B0cy5hbGxvd0VtcHR5QXJyYXlzID09PSAnYm9vbGVhbicgPyAhIW9wdHMuYWxsb3dFbXB0eUFycmF5cyA6IGRlZmF1bHRzLmFsbG93RW1wdHlBcnJheXMsXG4gICAgICAgIGFsbG93UHJvdG90eXBlczogdHlwZW9mIG9wdHMuYWxsb3dQcm90b3R5cGVzID09PSAnYm9vbGVhbicgPyBvcHRzLmFsbG93UHJvdG90eXBlcyA6IGRlZmF1bHRzLmFsbG93UHJvdG90eXBlcyxcbiAgICAgICAgYWxsb3dTcGFyc2U6IHR5cGVvZiBvcHRzLmFsbG93U3BhcnNlID09PSAnYm9vbGVhbicgPyBvcHRzLmFsbG93U3BhcnNlIDogZGVmYXVsdHMuYWxsb3dTcGFyc2UsXG4gICAgICAgIGFycmF5TGltaXQ6IHR5cGVvZiBvcHRzLmFycmF5TGltaXQgPT09ICdudW1iZXInID8gb3B0cy5hcnJheUxpbWl0IDogZGVmYXVsdHMuYXJyYXlMaW1pdCxcbiAgICAgICAgY2hhcnNldDogY2hhcnNldCxcbiAgICAgICAgY2hhcnNldFNlbnRpbmVsOiB0eXBlb2Ygb3B0cy5jaGFyc2V0U2VudGluZWwgPT09ICdib29sZWFuJyA/IG9wdHMuY2hhcnNldFNlbnRpbmVsIDogZGVmYXVsdHMuY2hhcnNldFNlbnRpbmVsLFxuICAgICAgICBjb21tYTogdHlwZW9mIG9wdHMuY29tbWEgPT09ICdib29sZWFuJyA/IG9wdHMuY29tbWEgOiBkZWZhdWx0cy5jb21tYSxcbiAgICAgICAgZGVjb2RlRG90SW5LZXlzOiB0eXBlb2Ygb3B0cy5kZWNvZGVEb3RJbktleXMgPT09ICdib29sZWFuJyA/IG9wdHMuZGVjb2RlRG90SW5LZXlzIDogZGVmYXVsdHMuZGVjb2RlRG90SW5LZXlzLFxuICAgICAgICBkZWNvZGVyOiB0eXBlb2Ygb3B0cy5kZWNvZGVyID09PSAnZnVuY3Rpb24nID8gb3B0cy5kZWNvZGVyIDogZGVmYXVsdHMuZGVjb2RlcixcbiAgICAgICAgZGVsaW1pdGVyOiB0eXBlb2Ygb3B0cy5kZWxpbWl0ZXIgPT09ICdzdHJpbmcnIHx8IHV0aWxzLmlzUmVnRXhwKG9wdHMuZGVsaW1pdGVyKSA/IG9wdHMuZGVsaW1pdGVyIDogZGVmYXVsdHMuZGVsaW1pdGVyLFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW1wbGljaXQtY29lcmNpb24sIG5vLWV4dHJhLXBhcmVuc1xuICAgICAgICBkZXB0aDogKHR5cGVvZiBvcHRzLmRlcHRoID09PSAnbnVtYmVyJyB8fCBvcHRzLmRlcHRoID09PSBmYWxzZSkgPyArb3B0cy5kZXB0aCA6IGRlZmF1bHRzLmRlcHRoLFxuICAgICAgICBkdXBsaWNhdGVzOiBkdXBsaWNhdGVzLFxuICAgICAgICBpZ25vcmVRdWVyeVByZWZpeDogb3B0cy5pZ25vcmVRdWVyeVByZWZpeCA9PT0gdHJ1ZSxcbiAgICAgICAgaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzOiB0eXBlb2Ygb3B0cy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMgPT09ICdib29sZWFuJyA/IG9wdHMuaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzIDogZGVmYXVsdHMuaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzLFxuICAgICAgICBwYXJhbWV0ZXJMaW1pdDogdHlwZW9mIG9wdHMucGFyYW1ldGVyTGltaXQgPT09ICdudW1iZXInID8gb3B0cy5wYXJhbWV0ZXJMaW1pdCA6IGRlZmF1bHRzLnBhcmFtZXRlckxpbWl0LFxuICAgICAgICBwYXJzZUFycmF5czogb3B0cy5wYXJzZUFycmF5cyAhPT0gZmFsc2UsXG4gICAgICAgIHBsYWluT2JqZWN0czogdHlwZW9mIG9wdHMucGxhaW5PYmplY3RzID09PSAnYm9vbGVhbicgPyBvcHRzLnBsYWluT2JqZWN0cyA6IGRlZmF1bHRzLnBsYWluT2JqZWN0cyxcbiAgICAgICAgc3RyaWN0TnVsbEhhbmRsaW5nOiB0eXBlb2Ygb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgPT09ICdib29sZWFuJyA/IG9wdHMuc3RyaWN0TnVsbEhhbmRsaW5nIDogZGVmYXVsdHMuc3RyaWN0TnVsbEhhbmRsaW5nXG4gICAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0ciwgb3B0cykge1xuICAgIHZhciBvcHRpb25zID0gbm9ybWFsaXplUGFyc2VPcHRpb25zKG9wdHMpO1xuXG4gICAgaWYgKHN0ciA9PT0gJycgfHwgc3RyID09PSBudWxsIHx8IHR5cGVvZiBzdHIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcbiAgICB9XG5cbiAgICB2YXIgdGVtcE9iaiA9IHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnID8gcGFyc2VWYWx1ZXMoc3RyLCBvcHRpb25zKSA6IHN0cjtcbiAgICB2YXIgb2JqID0gb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge307XG5cbiAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGtleXMgYW5kIHNldHVwIHRoZSBuZXcgb2JqZWN0XG5cbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRlbXBPYmopO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgdmFyIG5ld09iaiA9IHBhcnNlS2V5cyhrZXksIHRlbXBPYmpba2V5XSwgb3B0aW9ucywgdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycpO1xuICAgICAgICBvYmogPSB1dGlscy5tZXJnZShvYmosIG5ld09iaiwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuYWxsb3dTcGFyc2UgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICByZXR1cm4gdXRpbHMuY29tcGFjdChvYmopO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vc3RyaW5naWZ5Jyk7XG52YXIgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJyk7XG52YXIgZm9ybWF0cyA9IHJlcXVpcmUoJy4vZm9ybWF0cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBmb3JtYXRzOiBmb3JtYXRzLFxuICAgIHBhcnNlOiBwYXJzZSxcbiAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeVxufTtcbiIsIi8vXG4vLyBUSElTIEZJTEUgSVMgQVVUT01BVElDQUxMWSBHRU5FUkFURUQhIERPIE5PVCBFRElUIEJZIEhBTkQhXG4vL1xuO1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKVxuICAgICAgICA6IHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZFxuICAgICAgICAgICAgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgICAgICAgICAgLy8gY2YuIGh0dHBzOi8vZ2l0aHViLmNvbS9kYW5rb2dhaS9qcy1iYXNlNjQvaXNzdWVzLzExOVxuICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAvLyBleGlzdGluZyB2ZXJzaW9uIGZvciBub0NvbmZsaWN0KClcbiAgICAgICAgICAgICAgICB2YXIgX0Jhc2U2NCA9IGdsb2JhbC5CYXNlNjQ7XG4gICAgICAgICAgICAgICAgdmFyIGdCYXNlNjQgPSBmYWN0b3J5KCk7XG4gICAgICAgICAgICAgICAgZ0Jhc2U2NC5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBnbG9iYWwuQmFzZTY0ID0gX0Jhc2U2NDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdCYXNlNjQ7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsLk1ldGVvcikgeyAvLyBNZXRlb3IuanNcbiAgICAgICAgICAgICAgICAgICAgQmFzZTY0ID0gZ0Jhc2U2NDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ2xvYmFsLkJhc2U2NCA9IGdCYXNlNjQ7XG4gICAgICAgICAgICB9KSgpO1xufSgodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZlxuICAgIDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3dcbiAgICAgICAgOiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFxuICAgICAgICAgICAgOiB0aGlzKSwgZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvKipcbiAgICAgKiAgYmFzZTY0LnRzXG4gICAgICpcbiAgICAgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLUNsYXVzZSBMaWNlbnNlLlxuICAgICAqICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAgICAgKlxuICAgICAqICBSZWZlcmVuY2VzOlxuICAgICAqICAgIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0XG4gICAgICpcbiAgICAgKiBAYXV0aG9yIERhbiBLb2dhaSAoaHR0cHM6Ly9naXRodWIuY29tL2RhbmtvZ2FpKVxuICAgICAqL1xuICAgIHZhciB2ZXJzaW9uID0gJzMuNy43JztcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgbG93ZXJjYXNlIGB2ZXJzaW9uYC5cbiAgICAgKi9cbiAgICB2YXIgVkVSU0lPTiA9IHZlcnNpb247XG4gICAgdmFyIF9oYXNCdWZmZXIgPSB0eXBlb2YgQnVmZmVyID09PSAnZnVuY3Rpb24nO1xuICAgIHZhciBfVEQgPSB0eXBlb2YgVGV4dERlY29kZXIgPT09ICdmdW5jdGlvbicgPyBuZXcgVGV4dERlY29kZXIoKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgX1RFID0gdHlwZW9mIFRleHRFbmNvZGVyID09PSAnZnVuY3Rpb24nID8gbmV3IFRleHRFbmNvZGVyKCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIGI2NGNoID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89JztcbiAgICB2YXIgYjY0Y2hzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYjY0Y2gpO1xuICAgIHZhciBiNjR0YWIgPSAoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgdmFyIHRhYiA9IHt9O1xuICAgICAgICBhLmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsgcmV0dXJuIHRhYltjXSA9IGk7IH0pO1xuICAgICAgICByZXR1cm4gdGFiO1xuICAgIH0pKGI2NGNocyk7XG4gICAgdmFyIGI2NHJlID0gL14oPzpbQS1aYS16XFxkK1xcL117NH0pKj8oPzpbQS1aYS16XFxkK1xcL117Mn0oPzo9PSk/fFtBLVphLXpcXGQrXFwvXXszfT0/KT8kLztcbiAgICB2YXIgX2Zyb21DQyA9IFN0cmluZy5mcm9tQ2hhckNvZGUuYmluZChTdHJpbmcpO1xuICAgIHZhciBfVThBZnJvbSA9IHR5cGVvZiBVaW50OEFycmF5LmZyb20gPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBVaW50OEFycmF5LmZyb20uYmluZChVaW50OEFycmF5KVxuICAgICAgICA6IGZ1bmN0aW9uIChpdCkgeyByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaXQsIDApKTsgfTtcbiAgICB2YXIgX21rVXJpU2FmZSA9IGZ1bmN0aW9uIChzcmMpIHsgcmV0dXJuIHNyY1xuICAgICAgICAucmVwbGFjZSgvPS9nLCAnJykucmVwbGFjZSgvWytcXC9dL2csIGZ1bmN0aW9uIChtMCkgeyByZXR1cm4gbTAgPT0gJysnID8gJy0nIDogJ18nOyB9KTsgfTtcbiAgICB2YXIgX3RpZHlCNjQgPSBmdW5jdGlvbiAocykgeyByZXR1cm4gcy5yZXBsYWNlKC9bXkEtWmEtejAtOVxcK1xcL10vZywgJycpOyB9O1xuICAgIC8qKlxuICAgICAqIHBvbHlmaWxsIHZlcnNpb24gb2YgYGJ0b2FgXG4gICAgICovXG4gICAgdmFyIGJ0b2FQb2x5ZmlsbCA9IGZ1bmN0aW9uIChiaW4pIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3BvbHlmaWxsZWQnKTtcbiAgICAgICAgdmFyIHUzMiwgYzAsIGMxLCBjMiwgYXNjID0gJyc7XG4gICAgICAgIHZhciBwYWQgPSBiaW4ubGVuZ3RoICUgMztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiaW4ubGVuZ3RoOykge1xuICAgICAgICAgICAgaWYgKChjMCA9IGJpbi5jaGFyQ29kZUF0KGkrKykpID4gMjU1IHx8XG4gICAgICAgICAgICAgICAgKGMxID0gYmluLmNoYXJDb2RlQXQoaSsrKSkgPiAyNTUgfHxcbiAgICAgICAgICAgICAgICAoYzIgPSBiaW4uY2hhckNvZGVBdChpKyspKSA+IDI1NSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIGNoYXJhY3RlciBmb3VuZCcpO1xuICAgICAgICAgICAgdTMyID0gKGMwIDw8IDE2KSB8IChjMSA8PCA4KSB8IGMyO1xuICAgICAgICAgICAgYXNjICs9IGI2NGNoc1t1MzIgPj4gMTggJiA2M11cbiAgICAgICAgICAgICAgICArIGI2NGNoc1t1MzIgPj4gMTIgJiA2M11cbiAgICAgICAgICAgICAgICArIGI2NGNoc1t1MzIgPj4gNiAmIDYzXVxuICAgICAgICAgICAgICAgICsgYjY0Y2hzW3UzMiAmIDYzXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFkID8gYXNjLnNsaWNlKDAsIHBhZCAtIDMpICsgXCI9PT1cIi5zdWJzdHJpbmcocGFkKSA6IGFzYztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIGRvZXMgd2hhdCBgd2luZG93LmJ0b2FgIG9mIHdlYiBicm93c2VycyBkby5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gYmluIGJpbmFyeSBzdHJpbmdcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQtZW5jb2RlZCBzdHJpbmdcbiAgICAgKi9cbiAgICB2YXIgX2J0b2EgPSB0eXBlb2YgYnRvYSA9PT0gJ2Z1bmN0aW9uJyA/IGZ1bmN0aW9uIChiaW4pIHsgcmV0dXJuIGJ0b2EoYmluKTsgfVxuICAgICAgICA6IF9oYXNCdWZmZXIgPyBmdW5jdGlvbiAoYmluKSB7IHJldHVybiBCdWZmZXIuZnJvbShiaW4sICdiaW5hcnknKS50b1N0cmluZygnYmFzZTY0Jyk7IH1cbiAgICAgICAgICAgIDogYnRvYVBvbHlmaWxsO1xuICAgIHZhciBfZnJvbVVpbnQ4QXJyYXkgPSBfaGFzQnVmZmVyXG4gICAgICAgID8gZnVuY3Rpb24gKHU4YSkgeyByZXR1cm4gQnVmZmVyLmZyb20odThhKS50b1N0cmluZygnYmFzZTY0Jyk7IH1cbiAgICAgICAgOiBmdW5jdGlvbiAodThhKSB7XG4gICAgICAgICAgICAvLyBjZi4gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTI3MTAwMDEvaG93LXRvLWNvbnZlcnQtdWludDgtYXJyYXktdG8tYmFzZTY0LWVuY29kZWQtc3RyaW5nLzEyNzEzMzI2IzEyNzEzMzI2XG4gICAgICAgICAgICB2YXIgbWF4YXJncyA9IDB4MTAwMDtcbiAgICAgICAgICAgIHZhciBzdHJzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHU4YS5sZW5ndGg7IGkgPCBsOyBpICs9IG1heGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBzdHJzLnB1c2goX2Zyb21DQy5hcHBseShudWxsLCB1OGEuc3ViYXJyYXkoaSwgaSArIG1heGFyZ3MpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2J0b2Eoc3Rycy5qb2luKCcnKSk7XG4gICAgICAgIH07XG4gICAgLyoqXG4gICAgICogY29udmVydHMgYSBVaW50OEFycmF5IHRvIGEgQmFzZTY0IHN0cmluZy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt1cmxzYWZlXSBVUkwtYW5kLWZpbGVuYW1lLXNhZmUgYSBsYSBSRkM0NjQ4IMKnNVxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IEJhc2U2NCBzdHJpbmdcbiAgICAgKi9cbiAgICB2YXIgZnJvbVVpbnQ4QXJyYXkgPSBmdW5jdGlvbiAodThhLCB1cmxzYWZlKSB7XG4gICAgICAgIGlmICh1cmxzYWZlID09PSB2b2lkIDApIHsgdXJsc2FmZSA9IGZhbHNlOyB9XG4gICAgICAgIHJldHVybiB1cmxzYWZlID8gX21rVXJpU2FmZShfZnJvbVVpbnQ4QXJyYXkodThhKSkgOiBfZnJvbVVpbnQ4QXJyYXkodThhKTtcbiAgICB9O1xuICAgIC8vIFRoaXMgdHJpY2sgaXMgZm91bmQgYnJva2VuIGh0dHBzOi8vZ2l0aHViLmNvbS9kYW5rb2dhaS9qcy1iYXNlNjQvaXNzdWVzLzEzMFxuICAgIC8vIGNvbnN0IHV0b2IgPSAoc3JjOiBzdHJpbmcpID0+IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzcmMpKTtcbiAgICAvLyByZXZlcnRpbmcgZ29vZCBvbGQgZmF0aW9uZWQgcmVnZXhwXG4gICAgdmFyIGNiX3V0b2IgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICBpZiAoYy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICB2YXIgY2MgPSBjLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICByZXR1cm4gY2MgPCAweDgwID8gY1xuICAgICAgICAgICAgICAgIDogY2MgPCAweDgwMCA/IChfZnJvbUNDKDB4YzAgfCAoY2MgPj4+IDYpKVxuICAgICAgICAgICAgICAgICAgICArIF9mcm9tQ0MoMHg4MCB8IChjYyAmIDB4M2YpKSlcbiAgICAgICAgICAgICAgICAgICAgOiAoX2Zyb21DQygweGUwIHwgKChjYyA+Pj4gMTIpICYgMHgwZikpXG4gICAgICAgICAgICAgICAgICAgICAgICArIF9mcm9tQ0MoMHg4MCB8ICgoY2MgPj4+IDYpICYgMHgzZikpXG4gICAgICAgICAgICAgICAgICAgICAgICArIF9mcm9tQ0MoMHg4MCB8IChjYyAmIDB4M2YpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY2MgPSAweDEwMDAwXG4gICAgICAgICAgICAgICAgKyAoYy5jaGFyQ29kZUF0KDApIC0gMHhEODAwKSAqIDB4NDAwXG4gICAgICAgICAgICAgICAgKyAoYy5jaGFyQ29kZUF0KDEpIC0gMHhEQzAwKTtcbiAgICAgICAgICAgIHJldHVybiAoX2Zyb21DQygweGYwIHwgKChjYyA+Pj4gMTgpICYgMHgwNykpXG4gICAgICAgICAgICAgICAgKyBfZnJvbUNDKDB4ODAgfCAoKGNjID4+PiAxMikgJiAweDNmKSlcbiAgICAgICAgICAgICAgICArIF9mcm9tQ0MoMHg4MCB8ICgoY2MgPj4+IDYpICYgMHgzZikpXG4gICAgICAgICAgICAgICAgKyBfZnJvbUNDKDB4ODAgfCAoY2MgJiAweDNmKSkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgcmVfdXRvYiA9IC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZGXXxbXlxceDAwLVxceDdGXS9nO1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHNob3VsZCBoYXZlIGJlZW4gaW50ZXJuYWwgdXNlIG9ubHkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNyYyBVVEYtOCBzdHJpbmdcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBVVEYtMTYgc3RyaW5nXG4gICAgICovXG4gICAgdmFyIHV0b2IgPSBmdW5jdGlvbiAodSkgeyByZXR1cm4gdS5yZXBsYWNlKHJlX3V0b2IsIGNiX3V0b2IpOyB9O1xuICAgIC8vXG4gICAgdmFyIF9lbmNvZGUgPSBfaGFzQnVmZmVyXG4gICAgICAgID8gZnVuY3Rpb24gKHMpIHsgcmV0dXJuIEJ1ZmZlci5mcm9tKHMsICd1dGY4JykudG9TdHJpbmcoJ2Jhc2U2NCcpOyB9XG4gICAgICAgIDogX1RFXG4gICAgICAgICAgICA/IGZ1bmN0aW9uIChzKSB7IHJldHVybiBfZnJvbVVpbnQ4QXJyYXkoX1RFLmVuY29kZShzKSk7IH1cbiAgICAgICAgICAgIDogZnVuY3Rpb24gKHMpIHsgcmV0dXJuIF9idG9hKHV0b2IocykpOyB9O1xuICAgIC8qKlxuICAgICAqIGNvbnZlcnRzIGEgVVRGLTgtZW5jb2RlZCBzdHJpbmcgdG8gYSBCYXNlNjQgc3RyaW5nLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3VybHNhZmVdIGlmIGB0cnVlYCBtYWtlIHRoZSByZXN1bHQgVVJMLXNhZmVcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQgc3RyaW5nXG4gICAgICovXG4gICAgdmFyIGVuY29kZSA9IGZ1bmN0aW9uIChzcmMsIHVybHNhZmUpIHtcbiAgICAgICAgaWYgKHVybHNhZmUgPT09IHZvaWQgMCkgeyB1cmxzYWZlID0gZmFsc2U7IH1cbiAgICAgICAgcmV0dXJuIHVybHNhZmVcbiAgICAgICAgICAgID8gX21rVXJpU2FmZShfZW5jb2RlKHNyYykpXG4gICAgICAgICAgICA6IF9lbmNvZGUoc3JjKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIGNvbnZlcnRzIGEgVVRGLTgtZW5jb2RlZCBzdHJpbmcgdG8gVVJMLXNhZmUgQmFzZTY0IFJGQzQ2NDggwqc1LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IEJhc2U2NCBzdHJpbmdcbiAgICAgKi9cbiAgICB2YXIgZW5jb2RlVVJJID0gZnVuY3Rpb24gKHNyYykgeyByZXR1cm4gZW5jb2RlKHNyYywgdHJ1ZSk7IH07XG4gICAgLy8gVGhpcyB0cmljayBpcyBmb3VuZCBicm9rZW4gaHR0cHM6Ly9naXRodWIuY29tL2RhbmtvZ2FpL2pzLWJhc2U2NC9pc3N1ZXMvMTMwXG4gICAgLy8gY29uc3QgYnRvdSA9IChzcmM6IHN0cmluZykgPT4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShzcmMpKTtcbiAgICAvLyByZXZlcnRpbmcgZ29vZCBvbGQgZmF0aW9uZWQgcmVnZXhwXG4gICAgdmFyIHJlX2J0b3UgPSAvW1xceEMwLVxceERGXVtcXHg4MC1cXHhCRl18W1xceEUwLVxceEVGXVtcXHg4MC1cXHhCRl17Mn18W1xceEYwLVxceEY3XVtcXHg4MC1cXHhCRl17M30vZztcbiAgICB2YXIgY2JfYnRvdSA9IGZ1bmN0aW9uIChjY2NjKSB7XG4gICAgICAgIHN3aXRjaCAoY2NjYy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICB2YXIgY3AgPSAoKDB4MDcgJiBjY2NjLmNoYXJDb2RlQXQoMCkpIDw8IDE4KVxuICAgICAgICAgICAgICAgICAgICB8ICgoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgxKSkgPDwgMTIpXG4gICAgICAgICAgICAgICAgICAgIHwgKCgweDNmICYgY2NjYy5jaGFyQ29kZUF0KDIpKSA8PCA2KVxuICAgICAgICAgICAgICAgICAgICB8ICgweDNmICYgY2NjYy5jaGFyQ29kZUF0KDMpKSwgb2Zmc2V0ID0gY3AgLSAweDEwMDAwO1xuICAgICAgICAgICAgICAgIHJldHVybiAoX2Zyb21DQygob2Zmc2V0ID4+PiAxMCkgKyAweEQ4MDApXG4gICAgICAgICAgICAgICAgICAgICsgX2Zyb21DQygob2Zmc2V0ICYgMHgzRkYpICsgMHhEQzAwKSk7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcm9tQ0MoKCgweDBmICYgY2NjYy5jaGFyQ29kZUF0KDApKSA8PCAxMilcbiAgICAgICAgICAgICAgICAgICAgfCAoKDB4M2YgJiBjY2NjLmNoYXJDb2RlQXQoMSkpIDw8IDYpXG4gICAgICAgICAgICAgICAgICAgIHwgKDB4M2YgJiBjY2NjLmNoYXJDb2RlQXQoMikpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcm9tQ0MoKCgweDFmICYgY2NjYy5jaGFyQ29kZUF0KDApKSA8PCA2KVxuICAgICAgICAgICAgICAgICAgICB8ICgweDNmICYgY2NjYy5jaGFyQ29kZUF0KDEpKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHNob3VsZCBoYXZlIGJlZW4gaW50ZXJuYWwgdXNlIG9ubHkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNyYyBVVEYtMTYgc3RyaW5nXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVVRGLTggc3RyaW5nXG4gICAgICovXG4gICAgdmFyIGJ0b3UgPSBmdW5jdGlvbiAoYikgeyByZXR1cm4gYi5yZXBsYWNlKHJlX2J0b3UsIGNiX2J0b3UpOyB9O1xuICAgIC8qKlxuICAgICAqIHBvbHlmaWxsIHZlcnNpb24gb2YgYGF0b2JgXG4gICAgICovXG4gICAgdmFyIGF0b2JQb2x5ZmlsbCA9IGZ1bmN0aW9uIChhc2MpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3BvbHlmaWxsZWQnKTtcbiAgICAgICAgYXNjID0gYXNjLnJlcGxhY2UoL1xccysvZywgJycpO1xuICAgICAgICBpZiAoIWI2NHJlLnRlc3QoYXNjKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21hbGZvcm1lZCBiYXNlNjQuJyk7XG4gICAgICAgIGFzYyArPSAnPT0nLnNsaWNlKDIgLSAoYXNjLmxlbmd0aCAmIDMpKTtcbiAgICAgICAgdmFyIHUyNCwgYmluID0gJycsIHIxLCByMjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhc2MubGVuZ3RoOykge1xuICAgICAgICAgICAgdTI0ID0gYjY0dGFiW2FzYy5jaGFyQXQoaSsrKV0gPDwgMThcbiAgICAgICAgICAgICAgICB8IGI2NHRhYlthc2MuY2hhckF0KGkrKyldIDw8IDEyXG4gICAgICAgICAgICAgICAgfCAocjEgPSBiNjR0YWJbYXNjLmNoYXJBdChpKyspXSkgPDwgNlxuICAgICAgICAgICAgICAgIHwgKHIyID0gYjY0dGFiW2FzYy5jaGFyQXQoaSsrKV0pO1xuICAgICAgICAgICAgYmluICs9IHIxID09PSA2NCA/IF9mcm9tQ0ModTI0ID4+IDE2ICYgMjU1KVxuICAgICAgICAgICAgICAgIDogcjIgPT09IDY0ID8gX2Zyb21DQyh1MjQgPj4gMTYgJiAyNTUsIHUyNCA+PiA4ICYgMjU1KVxuICAgICAgICAgICAgICAgICAgICA6IF9mcm9tQ0ModTI0ID4+IDE2ICYgMjU1LCB1MjQgPj4gOCAmIDI1NSwgdTI0ICYgMjU1KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmluO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogZG9lcyB3aGF0IGB3aW5kb3cuYXRvYmAgb2Ygd2ViIGJyb3dzZXJzIGRvLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBhc2MgQmFzZTY0LWVuY29kZWQgc3RyaW5nXG4gICAgICogQHJldHVybnMge3N0cmluZ30gYmluYXJ5IHN0cmluZ1xuICAgICAqL1xuICAgIHZhciBfYXRvYiA9IHR5cGVvZiBhdG9iID09PSAnZnVuY3Rpb24nID8gZnVuY3Rpb24gKGFzYykgeyByZXR1cm4gYXRvYihfdGlkeUI2NChhc2MpKTsgfVxuICAgICAgICA6IF9oYXNCdWZmZXIgPyBmdW5jdGlvbiAoYXNjKSB7IHJldHVybiBCdWZmZXIuZnJvbShhc2MsICdiYXNlNjQnKS50b1N0cmluZygnYmluYXJ5Jyk7IH1cbiAgICAgICAgICAgIDogYXRvYlBvbHlmaWxsO1xuICAgIC8vXG4gICAgdmFyIF90b1VpbnQ4QXJyYXkgPSBfaGFzQnVmZmVyXG4gICAgICAgID8gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIF9VOEFmcm9tKEJ1ZmZlci5mcm9tKGEsICdiYXNlNjQnKSk7IH1cbiAgICAgICAgOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gX1U4QWZyb20oX2F0b2IoYSkuc3BsaXQoJycpLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gYy5jaGFyQ29kZUF0KDApOyB9KSk7IH07XG4gICAgLyoqXG4gICAgICogY29udmVydHMgYSBCYXNlNjQgc3RyaW5nIHRvIGEgVWludDhBcnJheS5cbiAgICAgKi9cbiAgICB2YXIgdG9VaW50OEFycmF5ID0gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIF90b1VpbnQ4QXJyYXkoX3VuVVJJKGEpKTsgfTtcbiAgICAvL1xuICAgIHZhciBfZGVjb2RlID0gX2hhc0J1ZmZlclxuICAgICAgICA/IGZ1bmN0aW9uIChhKSB7IHJldHVybiBCdWZmZXIuZnJvbShhLCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0ZjgnKTsgfVxuICAgICAgICA6IF9URFxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoYSkgeyByZXR1cm4gX1RELmRlY29kZShfdG9VaW50OEFycmF5KGEpKTsgfVxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYnRvdShfYXRvYihhKSk7IH07XG4gICAgdmFyIF91blVSSSA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiBfdGlkeUI2NChhLnJlcGxhY2UoL1stX10vZywgZnVuY3Rpb24gKG0wKSB7IHJldHVybiBtMCA9PSAnLScgPyAnKycgOiAnLyc7IH0pKTsgfTtcbiAgICAvKipcbiAgICAgKiBjb252ZXJ0cyBhIEJhc2U2NCBzdHJpbmcgdG8gYSBVVEYtOCBzdHJpbmcuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHNyYyBCYXNlNjQgc3RyaW5nLiAgQm90aCBub3JtYWwgYW5kIFVSTC1zYWZlIGFyZSBzdXBwb3J0ZWRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBVVEYtOCBzdHJpbmdcbiAgICAgKi9cbiAgICB2YXIgZGVjb2RlID0gZnVuY3Rpb24gKHNyYykgeyByZXR1cm4gX2RlY29kZShfdW5VUkkoc3JjKSk7IH07XG4gICAgLyoqXG4gICAgICogY2hlY2sgaWYgYSB2YWx1ZSBpcyBhIHZhbGlkIEJhc2U2NCBzdHJpbmdcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3JjIGEgdmFsdWUgdG8gY2hlY2tcbiAgICAgICovXG4gICAgdmFyIGlzVmFsaWQgPSBmdW5jdGlvbiAoc3JjKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3JjICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIHMgPSBzcmMucmVwbGFjZSgvXFxzKy9nLCAnJykucmVwbGFjZSgvPXswLDJ9JC8sICcnKTtcbiAgICAgICAgcmV0dXJuICEvW15cXHMwLTlhLXpBLVpcXCsvXS8udGVzdChzKSB8fCAhL1teXFxzMC05YS16QS1aXFwtX10vLnRlc3Qocyk7XG4gICAgfTtcbiAgICAvL1xuICAgIHZhciBfbm9FbnVtID0gZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiB2LCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9O1xuICAgIH07XG4gICAgLyoqXG4gICAgICogZXh0ZW5kIFN0cmluZy5wcm90b3R5cGUgd2l0aCByZWxldmFudCBtZXRob2RzXG4gICAgICovXG4gICAgdmFyIGV4dGVuZFN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hZGQgPSBmdW5jdGlvbiAobmFtZSwgYm9keSkgeyByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0cmluZy5wcm90b3R5cGUsIG5hbWUsIF9ub0VudW0oYm9keSkpOyB9O1xuICAgICAgICBfYWRkKCdmcm9tQmFzZTY0JywgZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVjb2RlKHRoaXMpOyB9KTtcbiAgICAgICAgX2FkZCgndG9CYXNlNjQnLCBmdW5jdGlvbiAodXJsc2FmZSkgeyByZXR1cm4gZW5jb2RlKHRoaXMsIHVybHNhZmUpOyB9KTtcbiAgICAgICAgX2FkZCgndG9CYXNlNjRVUkknLCBmdW5jdGlvbiAoKSB7IHJldHVybiBlbmNvZGUodGhpcywgdHJ1ZSk7IH0pO1xuICAgICAgICBfYWRkKCd0b0Jhc2U2NFVSTCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVuY29kZSh0aGlzLCB0cnVlKTsgfSk7XG4gICAgICAgIF9hZGQoJ3RvVWludDhBcnJheScsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRvVWludDhBcnJheSh0aGlzKTsgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBleHRlbmQgVWludDhBcnJheS5wcm90b3R5cGUgd2l0aCByZWxldmFudCBtZXRob2RzXG4gICAgICovXG4gICAgdmFyIGV4dGVuZFVpbnQ4QXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYWRkID0gZnVuY3Rpb24gKG5hbWUsIGJvZHkpIHsgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVaW50OEFycmF5LnByb3RvdHlwZSwgbmFtZSwgX25vRW51bShib2R5KSk7IH07XG4gICAgICAgIF9hZGQoJ3RvQmFzZTY0JywgZnVuY3Rpb24gKHVybHNhZmUpIHsgcmV0dXJuIGZyb21VaW50OEFycmF5KHRoaXMsIHVybHNhZmUpOyB9KTtcbiAgICAgICAgX2FkZCgndG9CYXNlNjRVUkknLCBmdW5jdGlvbiAoKSB7IHJldHVybiBmcm9tVWludDhBcnJheSh0aGlzLCB0cnVlKTsgfSk7XG4gICAgICAgIF9hZGQoJ3RvQmFzZTY0VVJMJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gZnJvbVVpbnQ4QXJyYXkodGhpcywgdHJ1ZSk7IH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogZXh0ZW5kIEJ1aWx0aW4gcHJvdG90eXBlcyB3aXRoIHJlbGV2YW50IG1ldGhvZHNcbiAgICAgKi9cbiAgICB2YXIgZXh0ZW5kQnVpbHRpbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4dGVuZFN0cmluZygpO1xuICAgICAgICBleHRlbmRVaW50OEFycmF5KCk7XG4gICAgfTtcbiAgICB2YXIgZ0Jhc2U2NCA9IHtcbiAgICAgICAgdmVyc2lvbjogdmVyc2lvbixcbiAgICAgICAgVkVSU0lPTjogVkVSU0lPTixcbiAgICAgICAgYXRvYjogX2F0b2IsXG4gICAgICAgIGF0b2JQb2x5ZmlsbDogYXRvYlBvbHlmaWxsLFxuICAgICAgICBidG9hOiBfYnRvYSxcbiAgICAgICAgYnRvYVBvbHlmaWxsOiBidG9hUG9seWZpbGwsXG4gICAgICAgIGZyb21CYXNlNjQ6IGRlY29kZSxcbiAgICAgICAgdG9CYXNlNjQ6IGVuY29kZSxcbiAgICAgICAgZW5jb2RlOiBlbmNvZGUsXG4gICAgICAgIGVuY29kZVVSSTogZW5jb2RlVVJJLFxuICAgICAgICBlbmNvZGVVUkw6IGVuY29kZVVSSSxcbiAgICAgICAgdXRvYjogdXRvYixcbiAgICAgICAgYnRvdTogYnRvdSxcbiAgICAgICAgZGVjb2RlOiBkZWNvZGUsXG4gICAgICAgIGlzVmFsaWQ6IGlzVmFsaWQsXG4gICAgICAgIGZyb21VaW50OEFycmF5OiBmcm9tVWludDhBcnJheSxcbiAgICAgICAgdG9VaW50OEFycmF5OiB0b1VpbnQ4QXJyYXksXG4gICAgICAgIGV4dGVuZFN0cmluZzogZXh0ZW5kU3RyaW5nLFxuICAgICAgICBleHRlbmRVaW50OEFycmF5OiBleHRlbmRVaW50OEFycmF5LFxuICAgICAgICBleHRlbmRCdWlsdGluczogZXh0ZW5kQnVpbHRpbnNcbiAgICB9O1xuICAgIC8vXG4gICAgLy8gZXhwb3J0IEJhc2U2NCB0byB0aGUgbmFtZXNwYWNlXG4gICAgLy9cbiAgICAvLyBFUzUgaXMgeWV0IHRvIGhhdmUgT2JqZWN0LmFzc2lnbigpIHRoYXQgbWF5IG1ha2UgdHJhbnNwaWxlcnMgdW5oYXBweS5cbiAgICAvLyBnQmFzZTY0LkJhc2U2NCA9IE9iamVjdC5hc3NpZ24oe30sIGdCYXNlNjQpO1xuICAgIGdCYXNlNjQuQmFzZTY0ID0ge307XG4gICAgT2JqZWN0LmtleXMoZ0Jhc2U2NCkuZm9yRWFjaChmdW5jdGlvbiAoaykgeyByZXR1cm4gZ0Jhc2U2NC5CYXNlNjRba10gPSBnQmFzZTY0W2tdOyB9KTtcbiAgICByZXR1cm4gZ0Jhc2U2NDtcbn0pKTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyID0gdm9pZCAwO1xudmFyIGZvcm1fZGF0YV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJmb3JtLWRhdGFcIikpO1xudmFyIHFzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInFzXCIpKTtcbnZhciBqc19iYXNlNjRfMSA9IHJlcXVpcmUoXCJqcy1iYXNlNjRcIik7XG52YXIgcGxhdGZvcm1fMSA9IHJlcXVpcmUoXCIuL3BsYXRmb3JtL1wiKTtcbnZhciBERUZBVUxUX1BST1hZX1BST1RPQ09MID0gXCJodHRwXCI7XG52YXIgVEhSRVNIT0xEX0FWT0lEX1JFUVVFU1RfVVJMX1RPT19MQVJHRSA9IDQwOTY7XG52YXIgS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEtpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IG9wdGlvbnMuYmFzZVVybDtcbiAgICAgICAgdGhpcy5hdXRoID0gb3B0aW9ucy5hdXRoO1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSB0aGlzLmJ1aWxkSGVhZGVycyh7XG4gICAgICAgICAgICBiYXNpY0F1dGg6IG9wdGlvbnMuYmFzaWNBdXRoLFxuICAgICAgICAgICAgdXNlckFnZW50OiBvcHRpb25zLnVzZXJBZ2VudCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChcImh0dHBzQWdlbnRcIiBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoXCJjbGllbnRDZXJ0QXV0aFwiIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgc3BlY2lmeSBjbGllbnRDZXJ0QXV0aCBhbG9uZyB3aXRoIGh0dHBzQWdlbnQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5odHRwc0FnZW50ID0gb3B0aW9ucy5odHRwc0FnZW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFwiY2xpZW50Q2VydEF1dGhcIiBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmNsaWVudENlcnRBdXRoID0gb3B0aW9ucy5jbGllbnRDZXJ0QXV0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb3h5ID0gb3B0aW9ucy5wcm94eTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0VG9rZW4gPSBudWxsO1xuICAgICAgICB0aGlzLnNvY2tldFRpbWVvdXQgPSBvcHRpb25zLnNvY2tldFRpbWVvdXQ7XG4gICAgfVxuICAgIEtpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlci5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbiAobWV0aG9kLCBwYXRoLCBwYXJhbXMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlcXVlc3RDb25maWcsIF9hLCByZXF1ZXN0VXJsLCBfYiwgZm9ybURhdGEsIF9jLCBfZCwgcmVxdWVzdFVybCwgX2UsIF9mO1xuICAgICAgICAgICAgdmFyIF9nLCBfaCwgX2o7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9rKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfay5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q29uZmlnID0gX19hc3NpZ24oX19hc3NpZ24oX19hc3NpZ24oeyBtZXRob2Q6IG1ldGhvZCwgaGVhZGVyczogdGhpcy5oZWFkZXJzLCB1cmw6IFwiXCIuY29uY2F0KHRoaXMuYmFzZVVybCkuY29uY2F0KHBhdGgpIH0sIChvcHRpb25zID8gb3B0aW9ucyA6IHt9KSksIHBsYXRmb3JtXzEucGxhdGZvcm1EZXBzLmJ1aWxkUGxhdGZvcm1EZXBlbmRlbnRDb25maWcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzQWdlbnQ6IHRoaXMuaHR0cHNBZ2VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRDZXJ0QXV0aDogdGhpcy5jbGllbnRDZXJ0QXV0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXRUaW1lb3V0OiB0aGlzLnNvY2tldFRpbWVvdXQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSksIHsgcHJveHk6IHRoaXMuYnVpbGRQcm94eUNvbmZpZyh0aGlzLnByb3h5KSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hID0gbWV0aG9kO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJnZXRcIjogcmV0dXJuIFszIC8qYnJlYWsqLywgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInBvc3RcIjogcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInB1dFwiOiByZXR1cm4gWzMgLypicmVhayovLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZGVsZXRlXCI6IHJldHVybiBbMyAvKmJyZWFrKi8sIDEwXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDEyXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVybCA9IHRoaXMuYnVpbGRSZXF1ZXN0VXJsKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZXF1ZXN0VXJsLmxlbmd0aCA+IFRIUkVTSE9MRF9BVk9JRF9SRVFVRVNUX1VSTF9UT09fTEFSR0UpKSByZXR1cm4gWzMgLypicmVhayovLCAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9iID0gW19fYXNzaWduKHt9LCByZXF1ZXN0Q29uZmlnKV07XG4gICAgICAgICAgICAgICAgICAgICAgICBfZyA9IHsgbWV0aG9kOiBcInBvc3RcIiwgaGVhZGVyczogX19hc3NpZ24oX19hc3NpZ24oe30sIHRoaXMuaGVhZGVycyksIHsgXCJYLUhUVFAtTWV0aG9kLU92ZXJyaWRlXCI6IFwiR0VUXCIgfSkgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuYnVpbGREYXRhKHBhcmFtcyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbMiAvKnJldHVybiovLCBfX2Fzc2lnbi5hcHBseSh2b2lkIDAsIF9iLmNvbmNhdChbKF9nLmRhdGEgPSBfay5zZW50KCksIF9nKV0pKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXF1ZXN0Q29uZmlnKSwgeyB1cmw6IHJlcXVlc3RVcmwgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShwYXJhbXMgaW5zdGFuY2VvZiBmb3JtX2RhdGFfMS5kZWZhdWx0KSkgcmV0dXJuIFszIC8qYnJlYWsqLywgNl07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmJ1aWxkRGF0YShwYXJhbXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEgPSBfay5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgX19hc3NpZ24oX19hc3NpZ24oe30sIHJlcXVlc3RDb25maWcpLCB7IGhlYWRlcnM6IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiBmb3JtRGF0YS5nZXRIZWFkZXJzIGRvZXMgbm90IGV4aXN0IGluIGEgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGZvcm1EYXRhLmdldEhlYWRlcnMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgdGhpcy5oZWFkZXJzKSwgZm9ybURhdGEuZ2V0SGVhZGVycygpKSA6IHRoaXMuaGVhZGVycywgZGF0YTogZm9ybURhdGEgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYyA9IFtfX2Fzc2lnbih7fSwgcmVxdWVzdENvbmZpZyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2ggPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuYnVpbGREYXRhKHBhcmFtcyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDc6IHJldHVybiBbMiAvKnJldHVybiovLCBfX2Fzc2lnbi5hcHBseSh2b2lkIDAsIF9jLmNvbmNhdChbKF9oLmRhdGEgPSBfay5zZW50KCksIF9oKV0pKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9kID0gW19fYXNzaWduKHt9LCByZXF1ZXN0Q29uZmlnKV07XG4gICAgICAgICAgICAgICAgICAgICAgICBfaiA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5idWlsZERhdGEocGFyYW1zKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgOTogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9fYXNzaWduLmFwcGx5KHZvaWQgMCwgX2QuY29uY2F0KFsoX2ouZGF0YSA9IF9rLnNlbnQoKSwgX2opXSkpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lID0gdGhpcy5idWlsZFJlcXVlc3RVcmw7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZiA9IFtwYXRoXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuYnVpbGREYXRhKHBhcmFtcyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVybCA9IF9lLmFwcGx5KHRoaXMsIF9mLmNvbmNhdChbX2suc2VudCgpXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXF1ZXN0Q29uZmlnKSwgeyB1cmw6IHJlcXVlc3RVcmwgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlwiLmNvbmNhdChtZXRob2QsIFwiIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF9rLmxhYmVsID0gMTM7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBLaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXIucHJvdG90eXBlLmJ1aWxkUHJveHlDb25maWcgPSBmdW5jdGlvbiAocHJveHlDb25maWcpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAocHJveHlDb25maWcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJveHlDb25maWcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByb3h5ID0gcHJveHlDb25maWc7XG4gICAgICAgIGlmIChwcm94eS5hdXRoICYmXG4gICAgICAgICAgICAocHJveHkuYXV0aC51c2VybmFtZS5sZW5ndGggPT09IDAgfHwgcHJveHkuYXV0aC5wYXNzd29yZC5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICBwcm94eS5hdXRoID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHByb3h5LnByb3RvY29sID0gKF9hID0gcHJveHkucHJvdG9jb2wpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IERFRkFVTFRfUFJPWFlfUFJPVE9DT0w7XG4gICAgICAgIHJldHVybiBwcm94eTtcbiAgICB9O1xuICAgIEtpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlci5wcm90b3R5cGUuYnVpbGRSZXF1ZXN0VXJsID0gZnVuY3Rpb24gKHBhdGgsIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQodGhpcy5iYXNlVXJsKS5jb25jYXQocGF0aCwgXCI/XCIpLmNvbmNhdChxc18xLmRlZmF1bHQuc3RyaW5naWZ5KHBhcmFtcykpO1xuICAgIH07XG4gICAgS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyLnByb3RvdHlwZS5idWlsZERhdGEgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXF1ZXN0VG9rZW47XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0aGlzLmF1dGgudHlwZSA9PT0gXCJzZXNzaW9uXCIpKSByZXR1cm4gWzMgLypicmVhayovLCAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuZ2V0UmVxdWVzdFRva2VuKCldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0VG9rZW4gPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zIGluc3RhbmNlb2YgZm9ybV9kYXRhXzEuZGVmYXVsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoXCJfX1JFUVVFU1RfVE9LRU5fX1wiLCByZXF1ZXN0VG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBwYXJhbXNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9fYXNzaWduKHsgX19SRVFVRVNUX1RPS0VOX186IHJlcXVlc3RUb2tlbiB9LCBwYXJhbXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gWzIgLypyZXR1cm4qLywgcGFyYW1zXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBLaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXIucHJvdG90eXBlLmJ1aWxkSGVhZGVycyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIGJhc2ljQXV0aCA9IHBhcmFtcy5iYXNpY0F1dGgsIHVzZXJBZ2VudCA9IHBhcmFtcy51c2VyQWdlbnQ7XG4gICAgICAgIHZhciBiYXNpY0F1dGhIZWFkZXJzID0gYmFzaWNBdXRoXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBcIkJhc2ljIFwiLmNvbmNhdChqc19iYXNlNjRfMS5CYXNlNjQuZW5jb2RlKFwiXCIuY29uY2F0KGJhc2ljQXV0aC51c2VybmFtZSwgXCI6XCIpLmNvbmNhdChiYXNpY0F1dGgucGFzc3dvcmQpKSksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9O1xuICAgICAgICB2YXIgcGxhdGZvcm1EZXBzSGVhZGVycyA9IHBsYXRmb3JtXzEucGxhdGZvcm1EZXBzLmJ1aWxkSGVhZGVycyh7IHVzZXJBZ2VudDogdXNlckFnZW50IH0pO1xuICAgICAgICB2YXIgY29tbW9uSGVhZGVycyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBwbGF0Zm9ybURlcHNIZWFkZXJzKSwgYmFzaWNBdXRoSGVhZGVycyk7XG4gICAgICAgIHN3aXRjaCAodGhpcy5hdXRoLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJwYXNzd29yZFwiOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb21tb25IZWFkZXJzKSwgeyBcIlgtQ3lib3p1LUF1dGhvcml6YXRpb25cIjoganNfYmFzZTY0XzEuQmFzZTY0LmVuY29kZShcIlwiLmNvbmNhdCh0aGlzLmF1dGgudXNlcm5hbWUsIFwiOlwiKS5jb25jYXQodGhpcy5hdXRoLnBhc3N3b3JkKSkgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiYXBpVG9rZW5cIjoge1xuICAgICAgICAgICAgICAgIHZhciBhcGlUb2tlbiA9IHRoaXMuYXV0aC5hcGlUb2tlbjtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcGlUb2tlbikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb21tb25IZWFkZXJzKSwgeyBcIlgtQ3lib3p1LUFQSS1Ub2tlblwiOiBhcGlUb2tlbi5qb2luKFwiLFwiKSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb21tb25IZWFkZXJzKSwgeyBcIlgtQ3lib3p1LUFQSS1Ub2tlblwiOiBhcGlUb2tlbiB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJvQXV0aFRva2VuXCI6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX19hc3NpZ24oX19hc3NpZ24oe30sIGNvbW1vbkhlYWRlcnMpLCB7IEF1dGhvcml6YXRpb246IFwiQmVhcmVyIFwiLmNvbmNhdCh0aGlzLmF1dGgub0F1dGhUb2tlbikgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb21tb25IZWFkZXJzKSwgeyBcIlgtUmVxdWVzdGVkLVdpdGhcIjogXCJYTUxIdHRwUmVxdWVzdFwiIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBLaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXIucHJvdG90eXBlLmdldFJlcXVlc3RUb2tlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodGhpcy5yZXF1ZXN0VG9rZW4gPT09IG51bGwpKSByZXR1cm4gWzMgLypicmVhayovLCAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHBsYXRmb3JtXzEucGxhdGZvcm1EZXBzLmdldFJlcXVlc3RUb2tlbigpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2EucmVxdWVzdFRva2VuID0gX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAyO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLnJlcXVlc3RUb2tlbl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIEtpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlcjtcbn0oKSk7XG5leHBvcnRzLktpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlciA9IEtpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUtpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLktpbnRvbmVSZXNwb25zZUhhbmRsZXIgPSB2b2lkIDA7XG52YXIgZXJyb3JfMSA9IHJlcXVpcmUoXCIuL2Vycm9yXCIpO1xudmFyIEtpbnRvbmVSZXNwb25zZUhhbmRsZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gS2ludG9uZVJlc3BvbnNlSGFuZGxlcihfYSkge1xuICAgICAgICB2YXIgZW5hYmxlQWJvcnRTZWFyY2hFcnJvciA9IF9hLmVuYWJsZUFib3J0U2VhcmNoRXJyb3I7XG4gICAgICAgIHRoaXMuZW5hYmxlQWJvcnRTZWFyY2hFcnJvciA9IGVuYWJsZUFib3J0U2VhcmNoRXJyb3I7XG4gICAgfVxuICAgIEtpbnRvbmVSZXNwb25zZUhhbmRsZXIucHJvdG90eXBlLmhhbmRsZSA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UudGhlbihmdW5jdGlvbiAocmVzKSB7IHJldHVybiBfdGhpcy5oYW5kbGVTdWNjZXNzUmVzcG9uc2UocmVzKTsgfSwgZnVuY3Rpb24gKGVycm9yKSB7IHJldHVybiBfdGhpcy5oYW5kbGVFcnJvclJlc3BvbnNlKGVycm9yKTsgfSk7XG4gICAgfTtcbiAgICBLaW50b25lUmVzcG9uc2VIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVTdWNjZXNzUmVzcG9uc2UgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlQWJvcnRTZWFyY2hFcnJvciAmJlxuICAgICAgICAgICAgL0ZpbHRlciBhYm9ydGVkIGJlY2F1c2Ugb2YgdG9vIG1hbnkgc2VhcmNoIHJlc3VsdHMvLnRlc3QocmVzcG9uc2UuaGVhZGVyc1tcIngtY3lib3p1LXdhcm5pbmdcIl0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JfMS5LaW50b25lQWJvcnRTZWFyY2hFcnJvcihyZXNwb25zZS5oZWFkZXJzW1wieC1jeWJvenUtd2FybmluZ1wiXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfTtcbiAgICBLaW50b25lUmVzcG9uc2VIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVFcnJvclJlc3BvbnNlID0gZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIGlmICghZXJyb3IucmVzcG9uc2UpIHtcbiAgICAgICAgICAgIC8vIEZJWE1FOiBmaW5kIGEgYmV0dGVyIHdheSB0byBoYW5kbGUgdGhpcyBlcnJvclxuICAgICAgICAgICAgaWYgKC9tYWMgdmVyaWZ5IGZhaWx1cmUvLnRlc3QoZXJyb3IudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNsaWVudENlcnRBdXRoIHNldHRpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3JSZXNwb25zZSA9IGVycm9yLnJlc3BvbnNlO1xuICAgICAgICB2YXIgZGF0YSA9IGVycm9yUmVzcG9uc2UuZGF0YSwgcmVzdCA9IF9fcmVzdChlcnJvclJlc3BvbnNlLCBbXCJkYXRhXCJdKTtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJcIi5jb25jYXQocmVzdC5zdGF0dXMsIFwiOiBcIikuY29uY2F0KHJlc3Quc3RhdHVzVGV4dCkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBlcnJvcl8xLktpbnRvbmVSZXN0QVBJRXJyb3IoX19hc3NpZ24oeyBkYXRhOiBkYXRhIH0sIHJlc3QpKTtcbiAgICB9O1xuICAgIHJldHVybiBLaW50b25lUmVzcG9uc2VIYW5kbGVyO1xufSgpKTtcbmV4cG9ydHMuS2ludG9uZVJlc3BvbnNlSGFuZGxlciA9IEtpbnRvbmVSZXNwb25zZUhhbmRsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1LaW50b25lUmVzcG9uc2VIYW5kbGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuS2ludG9uZVJlc3RBUElDbGllbnQgPSB2b2lkIDA7XG52YXIgQnVsa1JlcXVlc3RDbGllbnRfMSA9IHJlcXVpcmUoXCIuL2NsaWVudC9CdWxrUmVxdWVzdENsaWVudFwiKTtcbnZhciBBcHBDbGllbnRfMSA9IHJlcXVpcmUoXCIuL2NsaWVudC9BcHBDbGllbnRcIik7XG52YXIgUmVjb3JkQ2xpZW50XzEgPSByZXF1aXJlKFwiLi9jbGllbnQvUmVjb3JkQ2xpZW50XCIpO1xudmFyIFNwYWNlQ2xpZW50XzEgPSByZXF1aXJlKFwiLi9jbGllbnQvU3BhY2VDbGllbnRcIik7XG52YXIgRmlsZUNsaWVudF8xID0gcmVxdWlyZShcIi4vY2xpZW50L0ZpbGVDbGllbnRcIik7XG52YXIgaHR0cF8xID0gcmVxdWlyZShcIi4vaHR0cC9cIik7XG52YXIgS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyXzEgPSByZXF1aXJlKFwiLi9LaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXJcIik7XG52YXIgS2ludG9uZVJlc3BvbnNlSGFuZGxlcl8xID0gcmVxdWlyZShcIi4vS2ludG9uZVJlc3BvbnNlSGFuZGxlclwiKTtcbnZhciBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4vcGxhdGZvcm1cIik7XG52YXIgVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yXzEgPSByZXF1aXJlKFwiLi9wbGF0Zm9ybS9VbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3JcIik7XG52YXIgYnVpbGREaXNjcmltaW5hdGVkQXV0aCA9IGZ1bmN0aW9uIChhdXRoKSB7XG4gICAgaWYgKFwidXNlcm5hbWVcIiBpbiBhdXRoKSB7XG4gICAgICAgIHJldHVybiBfX2Fzc2lnbih7IHR5cGU6IFwicGFzc3dvcmRcIiB9LCBhdXRoKTtcbiAgICB9XG4gICAgaWYgKFwiYXBpVG9rZW5cIiBpbiBhdXRoKSB7XG4gICAgICAgIHJldHVybiBfX2Fzc2lnbih7IHR5cGU6IFwiYXBpVG9rZW5cIiB9LCBhdXRoKTtcbiAgICB9XG4gICAgaWYgKFwib0F1dGhUb2tlblwiIGluIGF1dGgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXNzaWduKHsgdHlwZTogXCJvQXV0aFRva2VuXCIgfSwgYXV0aCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBwbGF0Zm9ybV8xLnBsYXRmb3JtRGVwcy5nZXREZWZhdWx0QXV0aCgpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcl8xLlVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2Vzc2lvbiBhdXRoZW50aWNhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIFwiLmNvbmNhdChlLnBsYXRmb3JtLCBcIiBlbnZpcm9ubWVudC5cIikpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGU7XG4gICAgfVxufTtcbnZhciBLaW50b25lUmVzdEFQSUNsaWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBLaW50b25lUmVzdEFQSUNsaWVudChvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICB2YWxpZGF0ZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IHBsYXRmb3JtXzEucGxhdGZvcm1EZXBzXG4gICAgICAgICAgICAuYnVpbGRCYXNlVXJsKG9wdGlvbnMuYmFzZVVybClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpOyAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgICAgICAgdmFyIGF1dGggPSBidWlsZERpc2NyaW1pbmF0ZWRBdXRoKChfYSA9IG9wdGlvbnMuYXV0aCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30pO1xuICAgICAgICB2YXIgcmVxdWVzdENvbmZpZ0J1aWxkZXIgPSBuZXcgS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyXzEuS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyKF9fYXNzaWduKF9fYXNzaWduKHt9LCBvcHRpb25zKSwgeyBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsIGF1dGg6IGF1dGggfSkpO1xuICAgICAgICB2YXIgcmVzcG9uc2VIYW5kbGVyID0gbmV3IEtpbnRvbmVSZXNwb25zZUhhbmRsZXJfMS5LaW50b25lUmVzcG9uc2VIYW5kbGVyKHtcbiAgICAgICAgICAgIGVuYWJsZUFib3J0U2VhcmNoRXJyb3I6IChfYyA9IChfYiA9IG9wdGlvbnMuZmVhdHVyZUZsYWdzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZW5hYmxlQWJvcnRTZWFyY2hFcnJvcikgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgaHR0cENsaWVudCA9IG5ldyBodHRwXzEuRGVmYXVsdEh0dHBDbGllbnQoe1xuICAgICAgICAgICAgcmVzcG9uc2VIYW5kbGVyOiByZXNwb25zZUhhbmRsZXIsXG4gICAgICAgICAgICByZXF1ZXN0Q29uZmlnQnVpbGRlcjogcmVxdWVzdENvbmZpZ0J1aWxkZXIsXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZ3Vlc3RTcGFjZUlkID0gb3B0aW9ucy5ndWVzdFNwYWNlSWQ7XG4gICAgICAgIHRoaXMuYnVsa1JlcXVlc3RfID0gbmV3IEJ1bGtSZXF1ZXN0Q2xpZW50XzEuQnVsa1JlcXVlc3RDbGllbnQoaHR0cENsaWVudCwgZ3Vlc3RTcGFjZUlkKTtcbiAgICAgICAgdGhpcy5yZWNvcmQgPSBuZXcgUmVjb3JkQ2xpZW50XzEuUmVjb3JkQ2xpZW50KGh0dHBDbGllbnQsIHRoaXMuYnVsa1JlcXVlc3RfLCBndWVzdFNwYWNlSWQpO1xuICAgICAgICB0aGlzLmFwcCA9IG5ldyBBcHBDbGllbnRfMS5BcHBDbGllbnQoaHR0cENsaWVudCwgZ3Vlc3RTcGFjZUlkKTtcbiAgICAgICAgdGhpcy5zcGFjZSA9IG5ldyBTcGFjZUNsaWVudF8xLlNwYWNlQ2xpZW50KGh0dHBDbGllbnQsIGd1ZXN0U3BhY2VJZCk7XG4gICAgICAgIHRoaXMuZmlsZSA9IG5ldyBGaWxlQ2xpZW50XzEuRmlsZUNsaWVudChodHRwQ2xpZW50LCBndWVzdFNwYWNlSWQpO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoS2ludG9uZVJlc3RBUElDbGllbnQsIFwidmVyc2lvblwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBsYXRmb3JtXzEucGxhdGZvcm1EZXBzLmdldFZlcnNpb24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEtpbnRvbmVSZXN0QVBJQ2xpZW50LnByb3RvdHlwZS5nZXRCYXNlVXJsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsO1xuICAgIH07XG4gICAgS2ludG9uZVJlc3RBUElDbGllbnQucHJvdG90eXBlLmJ1bGtSZXF1ZXN0ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gdGhpcy5idWxrUmVxdWVzdF8uc2VuZChwYXJhbXMpO1xuICAgIH07XG4gICAgcmV0dXJuIEtpbnRvbmVSZXN0QVBJQ2xpZW50O1xufSgpKTtcbmV4cG9ydHMuS2ludG9uZVJlc3RBUElDbGllbnQgPSBLaW50b25lUmVzdEFQSUNsaWVudDtcbnZhciB2YWxpZGF0ZU9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhbGlkYXRlQmFzZVVybChvcHRpb25zLmJhc2VVcmwpO1xuICAgIHZhbGlkYXRlR3Vlc3RTcGFjZUlkKG9wdGlvbnMuZ3Vlc3RTcGFjZUlkKTtcbiAgICB2YWxpZGF0ZVNvY2tldFRpbWVvdXQob3B0aW9ucy5zb2NrZXRUaW1lb3V0KTtcbn07XG52YXIgdmFsaWRhdGVCYXNlVXJsID0gZnVuY3Rpb24gKGJhc2VVcmwpIHtcbiAgICBpZiAoYmFzZVVybCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHVybCA9IG5ldyBVUkwoYmFzZVVybCk7XG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gXCJsb2NhbGhvc3RcIiAmJiB1cmwucHJvdG9jb2wgIT09IFwiaHR0cHM6XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcHJvdG9jb2wgb2YgYmFzZVVybCBtdXN0IGJlIFwiaHR0cHNcIi4nKTtcbiAgICB9XG59O1xudmFyIHZhbGlkYXRlR3Vlc3RTcGFjZUlkID0gZnVuY3Rpb24gKGd1ZXN0U3BhY2VJZCkge1xuICAgIGlmIChndWVzdFNwYWNlSWQgPT09IFwiXCIgfHwgZ3Vlc3RTcGFjZUlkID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZ3Vlc3RTcGFjZUlkOiBnb3QgW1wiLmNvbmNhdChndWVzdFNwYWNlSWQsIFwiXVwiKSk7XG4gICAgfVxufTtcbnZhciB2YWxpZGF0ZVNvY2tldFRpbWVvdXQgPSBmdW5jdGlvbiAoc29ja2V0VGltZW91dCkge1xuICAgIGlmIChzb2NrZXRUaW1lb3V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbnVtYmVyID0gcGFyc2VGbG9hdChzb2NrZXRUaW1lb3V0LnRvU3RyaW5nKCkpO1xuICAgIGlmIChpc05hTihudW1iZXIpIHx8IG51bWJlciA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzb2NrZXRUaW1lb3V0LiBNdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLlwiKTtcbiAgICB9XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9S2ludG9uZVJlc3RBUElDbGllbnQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLktpbnRvbmVSZXN0QVBJQ2xpZW50ID0gdm9pZCAwO1xudmFyIHBsYXRmb3JtXzEgPSByZXF1aXJlKFwiLi9wbGF0Zm9ybS9cIik7XG52YXIgYnJvd3NlckRlcHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vcGxhdGZvcm0vYnJvd3NlclwiKSk7XG4oMCwgcGxhdGZvcm1fMS5pbmplY3RQbGF0Zm9ybURlcHMpKGJyb3dzZXJEZXBzKTtcbnZhciBLaW50b25lUmVzdEFQSUNsaWVudF8xID0gcmVxdWlyZShcIi4vS2ludG9uZVJlc3RBUElDbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJLaW50b25lUmVzdEFQSUNsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gS2ludG9uZVJlc3RBUElDbGllbnRfMS5LaW50b25lUmVzdEFQSUNsaWVudDsgfSB9KTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9lcnJvclwiKSwgZXhwb3J0cyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5icm93c2VyLmpzLm1hcCIsIi8vIHNyYy90eXBlcy9maWVsZC5kLnRzXHJcblxyXG5leHBvcnQgZW51bSBGaWVsZFR5cGUge1xyXG4gICAgQ0FMQyA9IFwiQ0FMQ1wiLFxyXG4gICAgQ0FURUdPUlkgPSBcIkNBVEVHT1JZXCIsXHJcbiAgICBDSEVDS19CT1ggPSBcIkNIRUNLX0JPWFwiLFxyXG4gICAgQ1JFQVRFRF9USU1FID0gXCJDUkVBVEVEX1RJTUVcIixcclxuICAgIENSRUFUT1IgPSBcIkNSRUFUT1JcIixcclxuICAgIERBVEUgPSBcIkRBVEVcIixcclxuICAgIERBVEVUSU1FID0gXCJEQVRFVElNRVwiLFxyXG4gICAgRFJPUF9ET1dOID0gXCJEUk9QX0RPV05cIixcclxuICAgIEZJTEUgPSBcIkZJTEVcIixcclxuICAgIEdST1VQID0gXCJHUk9VUFwiLFxyXG4gICAgR1JPVVBfU0VMRUNUID0gXCJHUk9VUF9TRUxFQ1RcIixcclxuICAgIExJTksgPSBcIkxJTktcIixcclxuICAgIE1PRElGSUVSID0gXCJNT0RJRklFUlwiLFxyXG4gICAgTVVMVElfTElORV9URVhUID0gXCJNVUxUSV9MSU5FX1RFWFRcIixcclxuICAgIE1VTFRJX1NFTEVDVCA9IFwiTVVMVElfU0VMRUNUXCIsXHJcbiAgICBOVU1CRVIgPSBcIk5VTUJFUlwiLFxyXG4gICAgT1JHQU5JWkFUSU9OX1NFTEVDVCA9IFwiT1JHQU5JWkFUSU9OX1NFTEVDVFwiLFxyXG4gICAgUkFESU9fQlVUVE9OID0gXCJSQURJT19CVVRUT05cIixcclxuICAgIFJFQ09SRF9OVU1CRVIgPSBcIlJFQ09SRF9OVU1CRVJcIixcclxuICAgIFJFRkVSRU5DRV9UQUJMRSA9IFwiUkVGRVJFTkNFX1RBQkxFXCIsXHJcbiAgICBSSUNIX1RFWFQgPSBcIlJJQ0hfVEVYVFwiLFxyXG4gICAgU0lOR0xFX0xJTkVfVEVYVCA9IFwiU0lOR0xFX0xJTkVfVEVYVFwiLFxyXG4gICAgU1RBVFVTID0gXCJTVEFUVVNcIixcclxuICAgIFNUQVRVU19BU1NJR05FRSA9IFwiU1RBVFVTX0FTU0lHTkVFXCIsXHJcbiAgICBTVUJUQUJMRSA9IFwiU1VCVEFCTEVcIixcclxuICAgIFRJTUUgPSBcIlRJTUVcIixcclxuICAgIFVQREFURURfVElNRSA9IFwiVVBEQVRFRF9USU1FXCIsXHJcbiAgICBVU0VSX1NFTEVDVCA9IFwiVVNFUl9TRUxFQ1RcIlxyXG59XHJcblxyXG5leHBvcnQgZW51bSBDYWxjRm9ybWF0e1xyXG4gICAgTlVNQkVSID0gXCJOVU1CRVJcIixcclxuICAgIE5VTUJFUl9ESUdJVCA9IFwiTlVNQkVSX0RJR0lUXCIsXHJcbiAgICBEQVRFVElNRSA9IFwiREFURVRJTUVcIixcclxuICAgIERBVEUgPSBcIkRBVEVcIixcclxuICAgIFRJTUUgPSBcIlRJTUVcIixcclxuICAgIEhPVVJfTUlOVVRFPSBcIkhPVVJfTUlOVVRFXCIsXHJcbiAgICBEQVlfSE9VUl9NSU5VVEU9IFwiREFZX0hPVVJfTUlOVVRFXCJcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWVsZEZvcm0ge1xyXG4gICAgY29kZTogc3RyaW5nO1xyXG4gICAgdHlwZTogRmllbGRUeXBlO1xyXG4gICAgcmVxdWlyZWQ/OiBib29sZWFuO1xyXG4gICAgbm9MYWJlbD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uRm9ybXtcclxuICAgIGluZGV4OiBzdHJpbmc7XHJcbiAgICBsYWJlbDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUZvcm0ge1xyXG4gICAgY29kZTogc3RyaW5nO1xyXG4gICAgdHlwZTogJ1VTRVInIHwgJ09SR0FOSVpBVElPTicgfCAnR1JPVVAnIHwgJ0ZVTkNUSU9OJztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDYWxjRmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIHVuaXQ/OiBzdHJpbmc7XHJcbiAgICBleHByZXNzaW9uPzogc3RyaW5nO1xyXG4gICAgZm9ybWF0PzpDYWxjRm9ybWF0O1xyXG4gICAgdW5pdFBvc2l0aW9uPzogJ0JFRk9SRScgfCAnQUZURVInO1xyXG4gICAgZGlzcGxheVNjYWxlPzogc3RyaW5nO1xyXG4gICAgaGlkZUV4cHJlc3Npb24/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENhdGVnb3J5RmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGVuYWJsZWQ/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERhdGVGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xyXG4gICAgdW5pcXVlPzogYm9vbGVhbjtcclxuICAgIGRlZmF1bHROb3dWYWx1ZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZXRpbWVGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xyXG4gICAgdW5pcXVlPzogYm9vbGVhbjtcclxuICAgIGRlZmF1bHROb3dWYWx1ZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGVjaW1hbEZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBtYXhWYWx1ZT86IHN0cmluZztcclxuICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcclxuICAgIHVuaXRQb3NpdGlvbj86ICdCRUZPUkUnIHwgJ0FGVEVSJztcclxuICAgIG1pblZhbHVlPzogc3RyaW5nO1xyXG4gICAgdW5pdD86IHN0cmluZztcclxuICAgIHVuaXF1ZT86IGJvb2xlYW47XHJcbiAgICBkaXNwbGF5U2NhbGU/OiBzdHJpbmc7XHJcbiAgICBkaWdpdD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yRmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlGb3JtIHtcclxuICAgIGNvZGU6IHN0cmluZztcclxuICAgIHR5cGU6ICdVU0VSJyB8ICdPUkdBTklaQVRJT04nIHwgJ0dST1VQJyB8ICdGVU5DVElPTic7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmllbGRNYXBwaW5nRm9ybSB7XHJcbiAgICByZWxhdGVkRmllbGQ6IHN0cmluZztcclxuICAgIGZpZWxkOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICB0aHVtYm5haWxTaXplPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwRmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIG9wZW5Hcm91cD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBTZWxlY3RGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZW50aXRpZXM6IEVudGl0eUZvcm1bXTtcclxuICAgIGRlZmF1bHRWYWx1ZT86IEVudGl0eUZvcm1bXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMaW5rRmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIHByb3RvY29sPzogJ1dFQicgfCAnQ0FMTCcgfCAnTUFJTCc7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XHJcbiAgICBtaW5MZW5ndGg/OiBzdHJpbmc7XHJcbiAgICB1bmlxdWU/OiBib29sZWFuO1xyXG4gICAgbWF4TGVuZ3RoPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIExvb2t1cEZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBsb29rdXA6IHtcclxuICAgICAgICBsb29rdXBQaWNrZXJGaWVsZHM6IHN0cmluZ1tdO1xyXG4gICAgICAgIHJlbGF0ZWRLZXlGaWVsZDogc3RyaW5nO1xyXG4gICAgICAgIHJlbGF0ZWRBcHA6IHtcclxuICAgICAgICAgICAgYXBwOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIGNvZGU6IHN0cmluZztcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZpZWxkTWFwcGluZ3M6IEZpZWxkTWFwcGluZ0Zvcm1bXTtcclxuICAgICAgICBzb3J0Pzogc3RyaW5nO1xyXG4gICAgICAgIGZpbHRlckNvbmQ/OiBzdHJpbmc7XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1vZGlmaWVkQXRGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge31cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTW9kaWZpZXJGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge31cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlwbGVDaGVja0ZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBzdHJpbmdbXTtcclxuICAgIG9wdGlvbnM6IHtcclxuICAgICAgICBba2V5OiBzdHJpbmddOiBPcHRpb25Gb3JtO1xyXG4gICAgfTtcclxuICAgIGFsaWduPzogJ0hPUklaT05UQUwnIHwgJ1ZFUlRJQ0FMJztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNdWx0aXBsZUxpbmVUZXh0RmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNdWx0aXBsZVNlbGVjdEZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBzdHJpbmdbXTtcclxuICAgIG9wdGlvbnM6IHtcclxuICAgICAgICBba2V5OiBzdHJpbmddOiBPcHRpb25Gb3JtO1xyXG4gICAgfTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemF0aW9uU2VsZWN0RmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGVudGl0aWVzOiBFbnRpdHlGb3JtW107XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBFbnRpdHlGb3JtW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkSWRGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge31cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVmZXJlbmNlVGFibGVGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgcmVmZXJlbmNlVGFibGU6IHtcclxuICAgICAgICBjb25kaXRpb246IHtcclxuICAgICAgICAgICAgcmVsYXRlZEZpZWxkOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIGZpZWxkOiBzdHJpbmc7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBzaXplPzogc3RyaW5nO1xyXG4gICAgICAgIHJlbGF0ZWRBcHA6IHtcclxuICAgICAgICAgICAgYXBwOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIGNvZGU6IHN0cmluZztcclxuICAgICAgICB9O1xyXG4gICAgICAgIHNvcnQ/OiBzdHJpbmc7XHJcbiAgICAgICAgZmlsdGVyQ29uZD86IHN0cmluZztcclxuICAgICAgICBkaXNwbGF5RmllbGRzOiBzdHJpbmdbXTtcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2luZ2xlQ2hlY2tGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xyXG4gICAgb3B0aW9uczoge1xyXG4gICAgICAgIFtrZXk6IHN0cmluZ106IE9wdGlvbkZvcm07XHJcbiAgICB9O1xyXG4gICAgYWxpZ24/OiAnSE9SSVpPTlRBTCcgfCAnVkVSVElDQUwnO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNpbmdsZUxpbmVUZXh0RmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGV4cHJlc3Npb24/OiBzdHJpbmc7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XHJcbiAgICBtaW5MZW5ndGg/OiBzdHJpbmc7XHJcbiAgICB1bmlxdWU/OiBib29sZWFuO1xyXG4gICAgbWF4TGVuZ3RoPzogc3RyaW5nO1xyXG4gICAgaGlkZUV4cHJlc3Npb24/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNpbmdsZVNlbGVjdEZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XHJcbiAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgW2tleTogc3RyaW5nXTogT3B0aW9uRm9ybTtcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3RhdHVzQXNzaWduZWVGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZW5hYmxlZD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3RhdHVzRmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGVuYWJsZWQ/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBmaWVsZHM6IHtcclxuICAgICAgICBba2V5OiBzdHJpbmddOiBDYWxjRmllbGRGb3JtIHwgQ2F0ZWdvcnlGaWVsZEZvcm0gfCBEYXRlRmllbGRGb3JtIHwgRGF0ZXRpbWVGaWVsZEZvcm0gfCBEZWNpbWFsRmllbGRGb3JtIHwgRWRpdG9yRmllbGRGb3JtIHwgRmlsZUZpZWxkRm9ybSB8IEdyb3VwRmllbGRGb3JtIHwgR3JvdXBTZWxlY3RGaWVsZEZvcm0gfCBMaW5rRmllbGRGb3JtIHwgTG9va3VwRmllbGRGb3JtIHwgTW9kaWZpZWRBdEZpZWxkRm9ybSB8IE1vZGlmaWVyRmllbGRGb3JtIHwgTXVsdGlwbGVDaGVja0ZpZWxkRm9ybSB8IE11bHRpcGxlTGluZVRleHRGaWVsZEZvcm0gfCBNdWx0aXBsZVNlbGVjdEZpZWxkRm9ybSB8IE9yZ2FuaXphdGlvblNlbGVjdEZpZWxkRm9ybSB8IFJlY29yZElkRmllbGRGb3JtIHwgUmVmZXJlbmNlVGFibGVGaWVsZEZvcm0gfCBTaW5nbGVDaGVja0ZpZWxkRm9ybSB8IFNpbmdsZUxpbmVUZXh0RmllbGRGb3JtIHwgU2luZ2xlU2VsZWN0RmllbGRGb3JtIHwgU3RhdHVzQXNzaWduZWVGaWVsZEZvcm0gfCBTdGF0dXNGaWVsZEZvcm0gfCBUYWJsZUZvcm0gfCBUaW1lRmllbGRGb3JtIHwgVXNlclNlbGVjdEZpZWxkRm9ybTtcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVGltZUZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XHJcbiAgICBkZWZhdWx0Tm93VmFsdWU/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJTZWxlY3RGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZW50aXRpZXM6IEVudGl0eUZvcm1bXTtcclxuICAgIGRlZmF1bHRWYWx1ZT86IEVudGl0eUZvcm1bXTtcclxufSIsImltcG9ydCB7IEZpZWxkRm9ybSxDYWxjRmllbGRGb3JtLEZpZWxkVHlwZSwgQ2FsY0Zvcm1hdH0gZnJvbSBcIi4uL3R5cGVzL0ZpZWxkTGF5b3V0XCI7XHJcblxyXG4vKipcclxuICog6ZuG6KiI5pON5L2c5a2QXHJcbiAqL1xyXG5leHBvcnQgZW51bSBPcGVyYXRvciB7XHJcbiAgICBTVU0gPSBcIlNVTVwiLFxyXG4gICAgQVZHID0gXCJBVkdcIixcclxuICAgIE1BWCA9IFwiTUFYXCIsXHJcbiAgICBNSU4gPSBcIk1JTlwiLFxyXG4gICAgQ09VTlQgPSBcIkNPVU5UXCIsXHJcbiAgICBGSVJTVCA9IFwiRklSU1RcIixcclxuICAgIExBU1QgPSBcIkxBU1RcIlxyXG59XHJcblxyXG4vKipcclxuICog6ZuG6KiI6Zai5pWwXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNsYXNzIEFnZ3JlZ2F0b3Ige1xyXG4gICAgcHJpdmF0ZSBkYXRhOiBzdHJpbmdbXTtcclxuICAgIHByaXZhdGUgZmllbGQ6IEZpZWxkRm9ybTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBzdHJpbmdbXSwgZmllbGQ6IEZpZWxkRm9ybSkge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5maWVsZCA9IGZpZWxkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdG9OdW1iZXJBcnJheSgpOiBudW1iZXJbXSB7XHJcbiAgICAgICAgY29uc3QgbnVtYmVyQXJyYXkgPSB0aGlzLmRhdGEubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIoaXRlbSk7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihudW0pKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOODleOCo+ODvOODq+ODieOAjCR7dGhpcy5maWVsZC5jb2RlfSDjgI3jga/mlbDlgKTjgavlpInmj5vjgafjgY3jgarjgYTjgZ/jgoHjgIHoqIjnrpfjgpLlrp/ooYzjgafjgY3jgb7jgZvjgpPjgIJgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVtO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gbnVtYmVyQXJyYXk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdW0oKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG4gICAgICAgIGNvbnN0IG51bWJlckFycmF5ID0gdGhpcy50b051bWJlckFycmF5KCk7XHJcbiAgICAgICAgcmV0dXJuIG51bWJlckFycmF5LnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyArIHZhbCwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhdmcoKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG4gICAgICAgIGNvbnN0IG51bWJlckFycmF5ID0gdGhpcy50b051bWJlckFycmF5KCk7XHJcbiAgICAgICAgY29uc3QgdG90YWwgPSBudW1iZXJBcnJheS5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKyB2YWwsIDApO1xyXG4gICAgICAgIHJldHVybiB0b3RhbCAvIG51bWJlckFycmF5Lmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1heCgpOiBudW1iZXIgfCBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuZmllbGQudHlwZSA9PT0gRmllbGRUeXBlLk5VTUJFUiApIHtcclxuICAgICAgICAgICAgY29uc3QgbnVtYmVyQXJyYXkgPSB0aGlzLnRvTnVtYmVyQXJyYXkoKTtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KC4uLm51bWJlckFycmF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGhpcy5maWVsZC50eXBlPT09RmllbGRUeXBlLkNBTEMpe1xyXG4gICAgICAgICAgICBjb25zdCBjYWxjRmllbGQgPSB0aGlzLmZpZWxkIGFzIENhbGNGaWVsZEZvcm07XHJcbiAgICAgICAgICAgIGlmKGNhbGNGaWVsZC5mb3JtYXQ9PT1DYWxjRm9ybWF0Lk5VTUJFUiB8fCBjYWxjRmllbGQuZm9ybWF0PT09Q2FsY0Zvcm1hdC5OVU1CRVJfRElHSVQpe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyQXJyYXkgPSB0aGlzLnRvTnVtYmVyQXJyYXkoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCguLi5udW1iZXJBcnJheSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5yZWR1Y2UoKG1heCwgaXRlbSkgPT4gKGl0ZW0gPiBtYXggPyBpdGVtIDogbWF4KSwgdGhpcy5kYXRhWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1pbigpOiBudW1iZXIgfCBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuZmllbGQudHlwZSA9PT0gRmllbGRUeXBlLk5VTUJFUiApIHtcclxuICAgICAgICAgICAgY29uc3QgbnVtYmVyQXJyYXkgPSB0aGlzLnRvTnVtYmVyQXJyYXkoKTtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKC4uLm51bWJlckFycmF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGhpcy5maWVsZC50eXBlPT09RmllbGRUeXBlLkNBTEMpe1xyXG4gICAgICAgICAgICBjb25zdCBjYWxjRmllbGQgPSB0aGlzLmZpZWxkIGFzIENhbGNGaWVsZEZvcm07XHJcbiAgICAgICAgICAgIGlmKGNhbGNGaWVsZC5mb3JtYXQ9PT1DYWxjRm9ybWF0Lk5VTUJFUiB8fCBjYWxjRmllbGQuZm9ybWF0PT09Q2FsY0Zvcm1hdC5OVU1CRVJfRElHSVQpe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyQXJyYXkgPSB0aGlzLnRvTnVtYmVyQXJyYXkoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbiguLi5udW1iZXJBcnJheSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGhpcy5kYXRhPT09bnVsbCB8fCB0aGlzLmRhdGEubGVuZ3RoPT09MCl7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnJlZHVjZSgobWluLCBpdGVtKSA9PiAoaXRlbSA8IG1pbiA/IGl0ZW0gOiBtaW4pLCB0aGlzLmRhdGFbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY291bnQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpcnN0KCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEubGVuZ3RoID8gdGhpcy5kYXRhWzBdIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxhc3QoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5sZW5ndGggPyB0aGlzLmRhdGFbdGhpcy5kYXRhLmxlbmd0aCAtIDFdIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FsY3VsYXRlKG9wZXJhdG9yOiBPcGVyYXRvcik6IG51bWJlciB8IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIE9wZXJhdG9yLlNVTTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VtKCk7XHJcbiAgICAgICAgICAgICAgICBjYXNlIE9wZXJhdG9yLkFWRzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXZnKCk7XHJcbiAgICAgICAgICAgICAgICBjYXNlIE9wZXJhdG9yLk1BWDpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXgoKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuTUlOOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1pbigpO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5DT1VOVDpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb3VudCgpO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5GSVJTVDpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maXJzdCgpO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5MQVNUOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxhc3QoKTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgIH1cclxufSIsImltcG9ydCB7XHJcbiAgSUFjdGlvbixcclxuICBJQWN0aW9uUmVzdWx0LFxyXG4gIElBY3Rpb25Ob2RlLFxyXG4gIElBY3Rpb25Qcm9wZXJ0eSxcclxuICBJQ29udGV4dCxcclxufSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHtLaW50b25lUmVzdEFQSUNsaWVudH0gZnJvbSAnQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50JztcclxuaW1wb3J0IHsgQWdncmVnYXRvcixPcGVyYXRvcn0gZnJvbSAnLi4vdXRpbC9hZ2dyZWdhdGVzJztcclxuaW1wb3J0IHsgRmllbGRGb3JtIH0gZnJvbSBcIi4uL3R5cGVzL0ZpZWxkTGF5b3V0XCI7XHJcblxyXG5pbnRlcmZhY2UgSURhdGFQcm9jZXNzaW5nUHJvcHMge1xyXG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgc291cmNlczogU291cmNlcztcclxuICBjb25kaXRpb246IHN0cmluZztcclxuICB2ZXJOYW1lPzogVmVyTmFtZTtcclxufVxyXG5cclxuaW50ZXJmYWNlIENvbmRpdGlvbiB7XHJcbiAgcXVlcnlTdHJpbmc6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIFZlck5hbWUge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBhY3Rpb25OYW1lOiBzdHJpbmc7XHJcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcclxuICB2YXJzOiBWYXJbXTtcclxufVxyXG5cclxuaW50ZXJmYWNlIFZhciB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBmaWVsZDogRmllbGRGb3JtO1xyXG4gIGxvZ2ljYWxPcGVyYXRvcjogQ2FsY09wZXJhdG9yO1xyXG4gIHZOYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBDYWxjT3BlcmF0b3Ige1xyXG4gIG9wZXJhdG9yOiBPcGVyYXRvcjtcclxuICBsYWJlbDogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgU291cmNlcyB7XHJcbiAgYXBwOiBBcHA7XHJcbiAgZmllbGRzOiBGaWVsZEZvcm1bXTtcclxufVxyXG5cclxuaW50ZXJmYWNlIEFwcCB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBuYW1lPzogc3RyaW5nO1xyXG59XHJcblxyXG50eXBlIFJlc3VsdCA9IHtcclxuICBba2V5OiBzdHJpbmddOiB7XHJcbiAgICB0eXBlOiBzdHJpbmc7XHJcbiAgICB2YWx1ZTogYW55W107XHJcbiAgfTtcclxufTtcclxuXHJcbnR5cGUgQW55T2JqZWN0ID0ge1xyXG4gIFtrZXk6IHN0cmluZ106IGFueTtcclxufTtcclxuXHJcbmV4cG9ydCBjbGFzcyBEYXRhUHJvY2Vzc2luZ0FjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb24ge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgcHJvcHM6IElEYXRhUHJvY2Vzc2luZ1Byb3BzIDtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLm5hbWUgPSBcIuODh+ODvOOCv+WHpueQhlwiO1xyXG4gICAgdGhpcy5hY3Rpb25Qcm9wcyA9IFtdO1xyXG4gICAgdGhpcy5wcm9wcyA9IHtcclxuICAgICAgZGlzcGxheU5hbWU6JycsXHJcbiAgICAgIGNvbmRpdGlvbjonJyxcclxuICAgICAgc291cmNlczp7XHJcbiAgICAgICAgYXBwOntcclxuICAgICAgICAgIGlkOlwiXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZpZWxkczpbXVxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHByb2Nlc3MoXHJcbiAgICBhY3Rpb25Ob2RlOiBJQWN0aW9uTm9kZSxcclxuICAgIGV2ZW50OiBhbnksXHJcbiAgICBjb250ZXh0OiBJQ29udGV4dFxyXG4gICk6IFByb21pc2U8SUFjdGlvblJlc3VsdD4ge1xyXG4gICAgdGhpcy5hY3Rpb25Qcm9wcyA9IGFjdGlvbk5vZGUuYWN0aW9uUHJvcHM7XHJcblxyXG4gICAgdGhpcy5wcm9wcyA9IGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUgYXMgSURhdGFQcm9jZXNzaW5nUHJvcHM7XHJcbiAgICBjb25zdCBjb25kaXRpb24gPSBKU09OLnBhcnNlKHRoaXMucHJvcHMuY29uZGl0aW9uKSBhcyBDb25kaXRpb247XHJcbiAgICBsZXQgcmVzdWx0ID0ge1xyXG4gICAgICBjYW5OZXh0OiB0cnVlLFxyXG4gICAgICByZXN1bHQ6IFwiXCIsXHJcbiAgICB9IGFzIElBY3Rpb25SZXN1bHQ7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMucHJvcHMpIHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0UXVlcnkoY29uZGl0aW9uLnF1ZXJ5U3RyaW5nLGNvbnRleHQudmFyaWFibGVzKTtcclxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuc2VsZWN0RGF0YShxdWVyeSk7XHJcbiAgICAgIFxyXG4gICAgICBjb25zb2xlLmxvZyhcImRhdGEgXCIsIGRhdGEpO1xyXG5cclxuICAgICAgaWYodGhpcy5wcm9wcy52ZXJOYW1lKXtcclxuICAgICAgICAgY29uc3QgdmFyVmFsdWVzPSB0aGlzLnByb3BzLnZlck5hbWUudmFycy5yZWR1Y2UoKGFjYywgZikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhcz1kYXRhW2YuZmllbGQuY29kZV0udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGFnZyA9IG5ldyBBZ2dyZWdhdG9yKGRhdGFzLGYuZmllbGQpO1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhZ2cuY2FsY3VsYXRlKGYubG9naWNhbE9wZXJhdG9yLm9wZXJhdG9yKVxyXG4gICAgICAgICAgICBhY2NbZi52TmFtZV09cmVzdWx0O1xyXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgICAgfSwge30gYXMgQW55T2JqZWN0KTtcclxuICAgICAgICAgIGNvbnRleHQudmFyaWFibGVzW3RoaXMucHJvcHMudmVyTmFtZS5uYW1lXT12YXJWYWx1ZXM7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJjb250ZXh0IFwiLCBjb250ZXh0KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29udGV4dC5lcnJvcnMuaGFuZGxlRXJyb3IoZXJyb3IsYWN0aW9uTm9kZSk7XHJcbiAgICAgIHJlc3VsdC5jYW5OZXh0ID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gc3RyIFxyXG4gICAqIEBwYXJhbSB2YXJzIFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGdldFF1ZXJ5ID0gKHN0cjogc3RyaW5nLCB2YXJzOiBhbnkpID0+IHtcclxuICAgIGNvbnNvbGUubG9nKHN0cik7XHJcbiAgICBjb25zdCByZWdleCA9IC92YXJcXCgoLio/KVxcKS9nO1xyXG4gICAgbGV0IG1hdGNoO1xyXG4gICAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcclxuICAgICAgY29uc3QgdmFyTmFtZSA9IG1hdGNoWzFdO1xyXG4gICAgICBpZiAodmFyTmFtZSBpbiB2YXJzKSB7XHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UobWF0Y2hbMF0sIHZhcnNbdmFyTmFtZV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihg5aSJ5pWwJHt2YXJOYW1lfeOBjOimi+OBpOOBi+OCiuOBvuOBm+OCk2ApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhzdHIpO1xyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiDjg4fjg7zjgr/jgpLlj5blvpfjgZnjgotcclxuICAgKiBAcGFyYW0gcXVlcnkgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgc2VsZWN0RGF0YSA9IGFzeW5jICggcXVlcnk/OiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IGFwaSA9IG5ldyBLaW50b25lUmVzdEFQSUNsaWVudCgpO1xyXG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5wcm9wcy5zb3VyY2VzLmZpZWxkcy5tYXAoKGZpZWxkKT0+ZmllbGQuY29kZSk7XHJcbiAgICBjb25zdCByZXNwID0gIGF3YWl0IGFwaS5yZWNvcmQuZ2V0QWxsUmVjb3Jkcyh7XHJcbiAgICAgICAgYXBwOiB0aGlzLnByb3BzLnNvdXJjZXMuYXBwLmlkLFxyXG4gICAgICAgIGZpZWxkczpmaWVsZHMsXHJcbiAgICAgICAgY29uZGl0aW9uOnF1ZXJ5XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCByZXN1bHQ6IFJlc3VsdCA9IHt9O1xyXG4gICAgICByZXNwLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbGVtZW50KSkge1xyXG4gICAgICAgICAgaWYgKCFyZXN1bHRba2V5XSkge1xyXG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHsgdHlwZTogdmFsdWUudHlwZSwgdmFsdWU6IFtdIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXN1bHRba2V5XS52YWx1ZS5wdXNoKHZhbHVlLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgIFxyXG4gIH07XHJcblxyXG4gIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV0gPSB0aGlzO1xyXG4gIH1cclxufVxyXG5cclxubmV3IERhdGFQcm9jZXNzaW5nQWN0aW9uKCk7IiwiaW1wb3J0IHtcclxuICBJQWN0aW9uLFxyXG4gIElBY3Rpb25SZXN1bHQsXHJcbiAgSUFjdGlvbk5vZGUsXHJcbiAgSUFjdGlvblByb3BlcnR5LFxyXG4gIElDb250ZXh0LFxyXG59IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG5pbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyBLaW50b25lUmVzdEFQSUNsaWVudCB9IGZyb20gXCJAa2ludG9uZS9yZXN0LWFwaS1jbGllbnRcIjtcclxuaW1wb3J0IHsgTG9va3VwIH0gZnJvbSBcIkBraW50b25lL3Jlc3QtYXBpLWNsaWVudC9saWIvc3JjL0tpbnRvbmVGaWVsZHMvdHlwZXMvcHJvcGVydHlcIjtcclxuaW1wb3J0IHsgRmllbGRGb3JtLCBGaWVsZFR5cGUgfSBmcm9tIFwiLi4vdHlwZXMvRmllbGRMYXlvdXRcIjtcclxuaW50ZXJmYWNlIFByb3BzIHtcclxuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xyXG4gIHNvdXJjZXM6IFNvdXJjZXM7XHJcbiAgZGF0YU1hcHBpbmc6IERhdGFNYXBwaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgRGF0YU1hcHBpbmcge1xyXG4gIGRhdGE6IE1hcHBpbmdbXTtcclxuICBjcmVhdGVXaXRoTnVsbDogYm9vbGVhbjtcclxufVxyXG5cclxuaW50ZXJmYWNlIE1hcHBpbmcge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgZnJvbTogRnJvbTtcclxuICB0bzogVG87XHJcbiAgaXNLZXk6IGJvb2xlYW47XHJcbn1cclxuXHJcblxyXG5cclxuaW50ZXJmYWNlIFRvIHtcclxuICBhcHA6IEFwcDtcclxuICBmaWVsZHM6RmllbGRGb3JtW107XHJcbiAgaXNEaWFsb2dWaXNpYmxlOiBib29sZWFuO1xyXG59XHJcblxyXG5cclxuaW50ZXJmYWNlIEZyb20ge1xyXG4gIHNoYXJlZFRleHQ6IHN0cmluZztcclxuICBpZDogc3RyaW5nO1xyXG4gIG9iamVjdFR5cGU6ICd2YXJpYWJsZSd8J2ZpZWxkJ3wndGV4dCc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBJVmFyIGV4dGVuZHMgRnJvbXtcclxuICBuYW1lOntcclxuICAgIG5hbWU6c3RyaW5nO1xyXG4gIH1cclxufVxyXG5cclxuaW50ZXJmYWNlIElGcm9tRmllbGQgZXh0ZW5kcyBGcm9tLEZpZWxkRm9ybXtcclxuXHJcbn1cclxuaW50ZXJmYWNlIFNvdXJjZXMge1xyXG4gIGFwcDogQXBwO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQXBwIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gIGNyZWF0ZWRhdGU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIERhdGFVcGRhdGVBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9uIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gIGRhdGFNYXBwaW5nUHJvcHM6IFByb3BzO1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5uYW1lID0gXCLjg4fjg7zjgr/mm7TmlrBcIjtcclxuICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBbXTtcclxuICAgIHRoaXMuZGF0YU1hcHBpbmdQcm9wcyA9IHt9IGFzIFByb3BzO1xyXG4gICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcHJvY2VzcyhcclxuICAgIGFjdGlvbk5vZGU6IElBY3Rpb25Ob2RlLFxyXG4gICAgZXZlbnQ6IGFueSxcclxuICAgIGNvbnRleHQ6IElDb250ZXh0XHJcbiAgKTogUHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICB0aGlzLmFjdGlvblByb3BzID0gYWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgIHRoaXMuZGF0YU1hcHBpbmdQcm9wcyA9IGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUgYXMgUHJvcHM7XHJcbiAgICBjb25zb2xlLmxvZyhjb250ZXh0KTtcclxuICAgIGxldCByZXN1bHQgPSB7XHJcbiAgICAgIGNhbk5leHQ6IHRydWUsXHJcbiAgICAgIHJlc3VsdDogXCJcIixcclxuICAgIH0gYXMgSUFjdGlvblJlc3VsdDtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGxvb2t1cEZpeGVkRmllbGRDb2RlcyA9IGF3YWl0IGdldExvb2t1cEZpeGVkRmllbGRDb2RlcyhcclxuICAgICAgICB0aGlzLmRhdGFNYXBwaW5nUHJvcHMuc291cmNlcy5hcHAuaWRcclxuICAgICAgKTtcclxuXHJcbiAgICAgIC8vIGNyZWF0ZVdpdGhOdWxsIOOBjOacieWKueOBquWgtOWQiOOBr+OAgTQg55Wq55uu44Gu44OR44Op44Oh44O844K/44O844KSIHRydWUg44Gr44GX44GmIGRvVXBkYXRlIOmWouaVsOODluODqeODs+ODgeOCkuWun+ihjOOBl+OBvuOBmeOAglxyXG4gICAgICBpZiAodGhpcy5kYXRhTWFwcGluZ1Byb3BzLmRhdGFNYXBwaW5nLmNyZWF0ZVdpdGhOdWxsKSB7XHJcbiAgICAgICAgYXdhaXQgZG9VcGRhdGUoXHJcbiAgICAgICAgICB0aGlzLmRhdGFNYXBwaW5nUHJvcHMuZGF0YU1hcHBpbmcuZGF0YSxcclxuICAgICAgICAgIHRoaXMuZGF0YU1hcHBpbmdQcm9wcy5zb3VyY2VzLmFwcC5pZCxcclxuICAgICAgICAgIGNvbnRleHQsXHJcbiAgICAgICAgICB0cnVlLCAvLyDjgq3jg7zjgYzjgarjgYTloLTlkIjjgIHjgb7jgZ/jga/jgq3jg7zjgafjgr/jg7zjgrLjg4Pjg4jjgYzopovjgaTjgYvjgonjgarjgYTloLTlkIjjgavjgIHjg57jg4Pjg5Tjg7PjgrDmnaHku7bjgavjgojjgaPjgabmlrDjgZfjgYTjg6zjgrPjg7zjg4njgpLkvZzmiJDjgZnjgovjgYvjganjgYbjgYvjgpLmsbrlrprjgZnjgovjgZ/jgoHjgavkvb/nlKjjgZXjgozjgb7jgZnjgIJcclxuICAgICAgICAgIGxvb2t1cEZpeGVkRmllbGRDb2Rlc1xyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgLy8g44Kt44O844GM44Gq44GE44Go5pu05paw5a++6LGh44KS5Y+W5b6X44Gn44GN44Gq44GE44Gf44KB44CB44GT44Gu5pmC54K544Gn44Gu44G/5pu05paw44GM6KGM44KP44KM44G+44GZ44CCIGRvVXBkYXRlIOmWouaVsOOBriA0IOeVquebruOBruODkeODqeODoeODvOOCv+ODvOOBryBmYWxzZSDjgafjgZnjgIJcclxuICAgICAgICB0aGlzLmRhdGFNYXBwaW5nUHJvcHMuZGF0YU1hcHBpbmcuZGF0YVxyXG4gICAgICAgICAgLm1hcCgobSkgPT4gbS5pc0tleSlcclxuICAgICAgICAgIC5maW5kKChpc0tleSkgPT4gaXNLZXkgPT09IHRydWUpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGF3YWl0IGRvVXBkYXRlKFxyXG4gICAgICAgICAgdGhpcy5kYXRhTWFwcGluZ1Byb3BzLmRhdGFNYXBwaW5nLmRhdGEsXHJcbiAgICAgICAgICB0aGlzLmRhdGFNYXBwaW5nUHJvcHMuc291cmNlcy5hcHAuaWQsXHJcbiAgICAgICAgICBjb250ZXh0LFxyXG4gICAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgICBsb29rdXBGaXhlZEZpZWxkQ29kZXNcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGF3YWl0IGRvQ3JlYXRlKFxyXG4gICAgICAgICAgdGhpcy5kYXRhTWFwcGluZ1Byb3BzLmRhdGFNYXBwaW5nLmRhdGEsXHJcbiAgICAgICAgICB0aGlzLmRhdGFNYXBwaW5nUHJvcHMuc291cmNlcy5hcHAuaWQsXHJcbiAgICAgICAgICBjb250ZXh0LFxyXG4gICAgICAgICAgbG9va3VwRml4ZWRGaWVsZENvZGVzXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29udGV4dC5lcnJvcnMuaGFuZGxlRXJyb3IoZXJyb3IsYWN0aW9uTm9kZSk7XHJcbiAgICAgIHJlc3VsdC5jYW5OZXh0ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhcImRhdGFNYXBwaW5nUHJvcHNcIiwgdGhpcy5kYXRhTWFwcGluZ1Byb3BzKTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXSA9IHRoaXM7XHJcbiAgfVxyXG59XHJcblxyXG5uZXcgRGF0YVVwZGF0ZUFjdGlvbigpO1xyXG5cclxuY29uc3QgZ2V0Q29udGV4dFZhckJ5UGF0aCA9IChvYmo6IGFueSwgcGF0aDogc3RyaW5nKSA9PiB7XHJcbiAgcmV0dXJuIHBhdGguc3BsaXQoXCIuXCIpLnJlZHVjZSgobywgaykgPT4gKG8gfHwge30pW2tdLCBvYmopO1xyXG59O1xyXG5cclxuaW50ZXJmYWNlIFVwZGF0ZVJlY29yZCB7XHJcbiAgaWQ6IHN0cmluZztcclxuICByZWNvcmQ6IHtcclxuICAgIFtrZXk6IHN0cmluZ106IHtcclxuICAgICAgdmFsdWU6IGFueTtcclxuICAgIH07XHJcbiAgfTtcclxufVxyXG5cclxuY29uc3QgY2xpZW50ID0gbmV3IEtpbnRvbmVSZXN0QVBJQ2xpZW50KCk7XHJcblxyXG5jb25zdCBnZXRGcm9tVmFsdWU9KGl0ZW06TWFwcGluZyxjb250ZXh0OklDb250ZXh0KT0+e1xyXG4gIGlmIChpdGVtLmZyb20ub2JqZWN0VHlwZSA9PT0gXCJ2YXJpYWJsZVwiKSB7XHJcbiAgICBjb25zdCByZnJvbSA9aXRlbS5mcm9tIGFzIElWYXI7XHJcbiAgICByZXR1cm4gIGdldENvbnRleHRWYXJCeVBhdGgoY29udGV4dC52YXJpYWJsZXMscmZyb20ubmFtZS5uYW1lKTtcclxuICB9ZWxzZSBpZihpdGVtLmZyb20ub2JqZWN0VHlwZSA9PT0gXCJmaWVsZFwiKXtcclxuICAgIGNvbnN0IGZpZWxkID0gaXRlbS5mcm9tIGFzIElGcm9tRmllbGQ7XHJcbiAgICByZXR1cm4gY29udGV4dC5yZWNvcmRbZmllbGQuY29kZV0udmFsdWU7XHJcbiAgfVxyXG4gIGVsc2Uge1xyXG4gICAgcmV0dXJuIGl0ZW0uZnJvbS5zaGFyZWRUZXh0O1xyXG4gIH1cclxufVxyXG5cclxuY29uc3QgZG9VcGRhdGUgPSBhc3luYyAoXHJcbiAgbWFwcGluZ0RhdGE6IE1hcHBpbmdbXSxcclxuICBhcHBJZDogc3RyaW5nLFxyXG4gIGNvbnRleHQ6IElDb250ZXh0LFxyXG4gIG5lZWRDcmVhdGU6IGJvb2xlYW4sXHJcbiAgbG9va3VwRml4ZWRGaWVsZENvZGVzOiBzdHJpbmdbXVxyXG4pID0+IHtcclxuICBjb25zdCB0YXJnZXRGaWVsZCA9IGF3YWl0IGZpbmRVcGRhdGVGaWVsZChtYXBwaW5nRGF0YSwgYXBwSWQsIGNvbnRleHQpO1xyXG4gIGNvbnNvbGUubG9nKHRhcmdldEZpZWxkKTtcclxuICBpZiAodGFyZ2V0RmllbGQucmVjb3Jkcy5sZW5ndGggPT09IDAgJiYgbmVlZENyZWF0ZSkge1xyXG4gICAgYXdhaXQgZG9DcmVhdGUobWFwcGluZ0RhdGEsIGFwcElkLCBjb250ZXh0LCBsb29rdXBGaXhlZEZpZWxkQ29kZXMpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyDjg57jg4Pjg5Tjg7PjgrDjg4fjg7zjgr/jgpLljZjntJTjgarjgqrjg5bjgrjjgqfjgq/jg4jjgavlh6bnkIbjgZfjgIHjgr3jg7zjgrnlgKTjgYzlpInmlbDjga7loLTlkIjjga/lpInmlbDjgpLnva7jgY3mj5vjgYjjgb7jgZnjgIJcclxuICAgIGNvbnN0IG1hcHBpbmdSdWxlcyA9IG1hcHBpbmdEYXRhXHJcbiAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgKG0pID0+XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyhtLmZyb20pLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICFsb29rdXBGaXhlZEZpZWxkQ29kZXMuaW5jbHVkZXMobS50by5maWVsZHNbMF0uY29kZSlcclxuICAgICAgKVxyXG4gICAgICAubWFwKChtKSA9PiB7XHJcbiAgICAgICAgaWYgKG0uZnJvbS5vYmplY3RUeXBlID09PSBcInZhcmlhYmxlXCIpIHtcclxuICAgICAgICAgIGNvbnN0IHJmcm9tID1tLmZyb20gYXMgSVZhcjtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZhbHVlOiBnZXRDb250ZXh0VmFyQnlQYXRoKGNvbnRleHQudmFyaWFibGVzLHJmcm9tLm5hbWUubmFtZSksXHJcbiAgICAgICAgICAgIGNvZGU6IG0udG8uZmllbGRzWzBdLmNvZGUsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1lbHNlIGlmKG0uZnJvbS5vYmplY3RUeXBlID09PSBcImZpZWxkXCIpe1xyXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBtLmZyb20gYXMgSUZyb21GaWVsZDtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZhbHVlOiBjb250ZXh0LnJlY29yZFtmaWVsZC5jb2RlXS52YWx1ZSxcclxuICAgICAgICAgICAgY29kZTogbS50by5maWVsZHNbMF0uY29kZSxcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmFsdWU6IG0uZnJvbS5zaGFyZWRUZXh0LFxyXG4gICAgICAgICAgICBjb2RlOiBtLnRvLmZpZWxkc1swXS5jb2RlLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZVJlY29yZHM6IFVwZGF0ZVJlY29yZFtdID0gdGFyZ2V0RmllbGQucmVjb3Jkcy5tYXAoXHJcbiAgICAgICh0YXJnZXRSZWNvcmQpID0+IHtcclxuICAgICAgICBjb25zdCB1cGRhdGVSZWNvcmQ6IFVwZGF0ZVJlY29yZFtcInJlY29yZFwiXSA9IHt9O1xyXG5cclxuICAgICAgICAvLyDjg57jg4Pjg5Tjg7PjgrDlhoXjga7jg6vjg7zjg6vjgavjg5Ljg4Pjg4jjgZfjgZ/jg5XjgqPjg7zjg6vjg4njga7jgb/jgYzmm7TmlrDjgZXjgozjgb7jgZnjgIJcclxuICAgICAgICBmb3IgKGNvbnN0IG1hcHBpbmcgb2YgbWFwcGluZ1J1bGVzKSB7XHJcbiAgICAgICAgICBpZiAodGFyZ2V0UmVjb3JkW21hcHBpbmcuY29kZV0pIHtcclxuICAgICAgICAgICAgdXBkYXRlUmVjb3JkW21hcHBpbmcuY29kZV0gPSB7XHJcbiAgICAgICAgICAgICAgdmFsdWU6IG1hcHBpbmcudmFsdWUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgaWQ6IHRhcmdldFJlY29yZC4kaWQudmFsdWUgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgcmVjb3JkOiB1cGRhdGVSZWNvcmQsXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyh1cGRhdGVSZWNvcmRzKTtcclxuICAgIGF3YWl0IGNsaWVudC5yZWNvcmQudXBkYXRlUmVjb3Jkcyh7XHJcbiAgICAgIGFwcDogYXBwSWQsXHJcbiAgICAgIHJlY29yZHM6IHVwZGF0ZVJlY29yZHMsXHJcbiAgICB9KTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBtYWtlUXVlcnk9KGZpZWxkOkZpZWxkRm9ybSxrZXk6YW55KT0+e1xyXG4gIGlmKGZpZWxkLnR5cGU9PT1GaWVsZFR5cGUuTlVNQkVSIHx8IGZpZWxkLnR5cGU9PT1GaWVsZFR5cGUuUkVDT1JEX05VTUJFUil7XHJcbiAgICByZXR1cm4gYCR7ZmllbGQuY29kZX0gPSAke051bWJlcihrZXkpfWBcclxuICB9XHJcbiAgaWYodHlwZW9mIGtleT09PSdzdHJpbmcnKXtcclxuICAgIHJldHVybiBgJHtmaWVsZC5jb2RlfSA9IFwiJHtrZXl9XCJgXHJcbiAgfVxyXG59XHJcblxyXG5cclxuY29uc3QgZmluZFVwZGF0ZUZpZWxkID0gYXN5bmMgKFxyXG4gIG1hcHBpbmdEYXRhOiBNYXBwaW5nW10sXHJcbiAgYXBwSWQ6IHN0cmluZyxcclxuICBjb250ZXh0OiBJQ29udGV4dFxyXG4pID0+IHtcclxuICBjb25zdCBxdWVyeVN0ciA9IG1hcHBpbmdEYXRhXHJcbiAgICAuZmlsdGVyKChtKSA9PiBtLnRvLmFwcCAmJiBtLnRvLmZpZWxkcyAmJiBtLnRvLmZpZWxkcy5sZW5ndGggPiAwICYmIG0uaXNLZXkpXHJcbiAgICAubWFwKChtKSA9PiB7XHJcbiAgICAgIGlmIChtLmZyb20ub2JqZWN0VHlwZSA9PT0gXCJ2YXJpYWJsZVwiKSB7XHJcbiAgICAgICAgY29uc3QgdmZyb20gPSBtLmZyb20gYXMgSVZhcjtcclxuICAgICAgICByZXR1cm4gbWFrZVF1ZXJ5KG0udG8uZmllbGRzWzBdLGdldENvbnRleHRWYXJCeVBhdGgoY29udGV4dC52YXJpYWJsZXMgLCB2ZnJvbS5uYW1lLm5hbWUpKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmKG0uZnJvbS5vYmplY3RUeXBlID09PSBcImZpZWxkXCIpe1xyXG4gICAgICAgIGNvbnN0IGZpZWxkID0gbS5mcm9tIGFzIElGcm9tRmllbGQ7XHJcbiAgICAgICAgcmV0dXJuIG1ha2VRdWVyeShtLnRvLmZpZWxkc1swXSxjb250ZXh0LnJlY29yZFtmaWVsZC5jb2RlXS52YWx1ZSk7XHJcbiAgICAgIH0gXHJcbiAgICAgIGVsc2V7XHJcbiAgICAgICAgcmV0dXJuIG1ha2VRdWVyeShtLnRvLmZpZWxkc1swXSxtLmZyb20uc2hhcmVkVGV4dCk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICAuam9pbihcIiZcIik7XHJcbiAgLy8g5qSc57Si5p2h5Lu244GM56m644Gu5aC05ZCI44Gv5YWo44Os44Kz44O844OJ44KS6L+U44GZ44Gf44KB44CB5qSc57Si5a++6LGh44GM6KaL44Gk44GL44KJ44Gq44GE5aC05ZCI44Gv5qSc57Si44Gv6KGM44KP44KM44G+44Gb44KT44CCXHJcbiAgaWYgKHF1ZXJ5U3RyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVjb3JkczogW10sXHJcbiAgICB9O1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnJlY29yZC5nZXRSZWNvcmRzKHtcclxuICAgICAgYXBwOiBhcHBJZCxcclxuICAgICAgLy8gcXVlcnk6IHVuZGVmaW5lZFxyXG4gICAgICBxdWVyeTogcXVlcnlTdHIsXHJcbiAgICB9KTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBkb0NyZWF0ZSA9IGFzeW5jIChcclxuICBtYXBwaW5nRGF0YTogTWFwcGluZ1tdLFxyXG4gIGFwcElkOiBzdHJpbmcsXHJcbiAgY29udGV4dDogSUNvbnRleHQsXHJcbiAgbG9va3VwRml4ZWRGaWVsZENvZGVzOiBzdHJpbmdbXVxyXG4pID0+IHtcclxuICBjb25zdCBmaWx0ZXJIYW5kbGVyID0gIChpdGVtOk1hcHBpbmcpPT57XHJcbiAgICBpZighaXRlbS50by5maWVsZHMgfHwgaXRlbS50by5maWVsZHMubGVuZ3RoPT09MCl7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmKGl0ZW0uZnJvbS5vYmplY3RUeXBlID09PSBcInZhcmlhYmxlXCIgJiYgKGl0ZW0uZnJvbSBhcyBJVmFyKS5uYW1lLm5hbWUgICl7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYoaXRlbS5mcm9tLm9iamVjdFR5cGUgPT09IFwiZmllbGRcIiAmJiAoaXRlbS5mcm9tIGFzIElGcm9tRmllbGQpLmNvZGUpe1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmKGl0ZW0uZnJvbS5vYmplY3RUeXBlID09PSBcInRleHRcIiAmJiBpdGVtLmZyb20uc2hhcmVkVGV4dCE9PW51bGwpe1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgY29uc3QgcmVjb3JkID0gbWFwcGluZ0RhdGFcclxuICAgIC5maWx0ZXIoZmlsdGVySGFuZGxlcilcclxuICAgIC5maWx0ZXIoKGl0ZW0pID0+ICFsb29rdXBGaXhlZEZpZWxkQ29kZXMuaW5jbHVkZXMoaXRlbS50by5maWVsZHNbMF0uY29kZSkpXHJcbiAgICAucmVkdWNlKChhY2N1bXVsYXRvciwgaXRlbSkgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLmFjY3VtdWxhdG9yLFxyXG4gICAgICAgIFtpdGVtLnRvLmZpZWxkc1swXS5jb2RlXToge1xyXG4gICAgICAgICAgdmFsdWU6IGdldEZyb21WYWx1ZShpdGVtLGNvbnRleHQpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcbiAgICB9LCB7fSk7XHJcbiAgaWYgKHJlY29yZCAmJiBPYmplY3Qua2V5cyhyZWNvcmQpLmxlbmd0aCA+IDApIHtcclxuICAgIGNvbnNvbGUubG9nKHJlY29yZCk7XHJcbiAgICBhd2FpdCBjbGllbnQucmVjb3JkLmFkZFJlY29yZCh7XHJcbiAgICAgIGFwcDphcHBJZCxcclxuICAgICAgcmVjb3JkOnJlY29yZFxyXG4gICAgfSk7XHJcbiAgICAvLyBhd2FpdCBraW50b25lLmFwaShraW50b25lLmFwaS51cmwoXCIvay92MS9yZWNvcmQuanNvblwiLCB0cnVlKSwgXCJQT1NUXCIsIHtcclxuICAgIC8vICAgYXBwOiBhcHBJZCxcclxuICAgIC8vICAgcmVjb3JkOiByZWNvcmQsXHJcbiAgICAvLyB9KTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBnZXRMb29rdXBGaXhlZEZpZWxkQ29kZXMgPSBhc3luYyAoYXBwSWQ6IHN0cmluZykgPT4ge1xyXG4gIHJldHVybiBhd2FpdCBjbGllbnQuYXBwXHJcbiAgICAuZ2V0Rm9ybUZpZWxkcyh7IGFwcDogYXBwSWQgfSlcclxuICAgIC50aGVuKChyZXNwKSA9PlxyXG4gICAgICBPYmplY3QudmFsdWVzKHJlc3AucHJvcGVydGllcylcclxuICAgICAgICAuZmlsdGVyKChmKSA9PiAoZiBhcyBMb29rdXApLmxvb2t1cCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIC5mbGF0TWFwKChmKSA9PiAoZiBhcyBMb29rdXApLmxvb2t1cC5maWVsZE1hcHBpbmdzLm1hcCgobSkgPT4gbS5maWVsZCkpXHJcbiAgICApO1xyXG59O1xyXG4iLCJpbXBvcnQge1xyXG4gIElBY3Rpb24sXHJcbiAgSUFjdGlvblJlc3VsdCxcclxuICBJQWN0aW9uTm9kZSxcclxuICBJQWN0aW9uUHJvcGVydHksXHJcbiAgSUNvbnRleHQsXHJcbiAgSUZpZWxkLFxyXG59IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG5pbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5cclxuXHJcbmludGVyZmFjZSBJQ3VycmVudEZpZWxkR2V0UHJvcHMge1xyXG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgZmllbGQ6IElGaWVsZDtcclxuICB2ZXJOYW1lOiBWZXJOYW1lO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgVmVyTmFtZSB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEN1cnJlbnRGaWVsZEdldEFjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb24ge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgcHJvcHM6IElDdXJyZW50RmllbGRHZXRQcm9wcztcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMubmFtZSA9IFwi44OV44Kj44O844Or44OJ44Gu5YCk44KS5Y+W5b6X44GZ44KLXCI7XHJcbiAgICB0aGlzLmFjdGlvblByb3BzID0gW107XHJcbiAgICB0aGlzLnByb3BzID0ge30gYXMgSUN1cnJlbnRGaWVsZEdldFByb3BzO1xyXG4gICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcHJvY2VzcyhcclxuICAgIGFjdGlvbk5vZGU6IElBY3Rpb25Ob2RlLFxyXG4gICAgZXZlbnQ6IGFueSxcclxuICAgIGNvbnRleHQ6IElDb250ZXh0XHJcbiAgKTogUHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBJQ3VycmVudEZpZWxkR2V0UHJvcHM7XHJcbiAgICB0aGlzLmFjdGlvblByb3BzID0gYWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuXHJcbiAgICBsZXQgcmVzdWx0ID0ge1xyXG4gICAgICBjYW5OZXh0OiB0cnVlLFxyXG4gICAgICByZXN1bHQ6ICcnLFxyXG4gICAgfSBhcyBJQWN0aW9uUmVzdWx0O1xyXG4gICAgXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZWNvcmQgPSBldmVudC5yZWNvcmQ7XHJcbiAgICAgIGlmKCEodGhpcy5wcm9wcy5maWVsZC5jb2RlIGluIHJlY29yZCkpe1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihg44OV44Kj44O844Or44OJWyR7dGhpcy5wcm9wcy5maWVsZC5jb2RlfV3jgYzopovjgaTjgYvjgorjgb7jgZvjgpPjgafjgZfjgZ/jgIJgKTtcclxuICAgICAgfVxyXG4gICAgICAvL+WkieaVsOioreWumlxyXG4gICAgICBpZih0aGlzLnByb3BzLnZlck5hbWUgJiYgdGhpcy5wcm9wcy52ZXJOYW1lLm5hbWUhPT0nJyl7XHJcbiAgICAgICAgY29udGV4dC52YXJpYWJsZXNbdGhpcy5wcm9wcy52ZXJOYW1lLm5hbWVdPXJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9IFxyXG4gICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnRleHQuZXJyb3JzLmhhbmRsZUVycm9yKGVycm9yLGFjdGlvbk5vZGUpO1xyXG4gICAgICByZXN1bHQuY2FuTmV4dCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV0gPSB0aGlzO1xyXG4gIH1cclxufVxyXG5cclxubmV3IEN1cnJlbnRGaWVsZEdldEFjdGlvbigpO1xyXG4iLCJpbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyAgSUFjdGlvbixJQWN0aW9uUmVzdWx0LCBJQWN0aW9uTm9kZSwgSUFjdGlvblByb3BlcnR5LCBJRmllbGQsIElDb250ZXh0fSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+OBruWxnuaAp+Wumue+qVxyXG4gKi9cclxuaW50ZXJmYWNlIElSZWd1bGFyQ2hlY2tQcm9wc3tcclxuICAgIGZpZWxkOklGaWVsZDsvL+ODgeOCp+ODg+OCr+OBmeOCi+ODleOCo+ODvOODq+ODieOBruWvvuixoVxyXG4gICAgbWVzc2FnZTpzdHJpbmc7Ly/jgqjjg6njg7zjg6Hjg4Pjgrvjg7zjgrhcclxuICAgIHJlZ0V4cHJlc3Npb246c3RyaW5nOy8v5q2j6KaP6KGo54++5byPXHJcbn1cclxuLyoqXHJcbiAqIOato+imj+ihqOePvuODgeOCp+ODg+OCr+OCouOCr+OCt+ODp+ODs1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFJlZ3VsYXJDaGVja0FjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb257XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgICBwcm9wczpJUmVndWxhckNoZWNrUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMubmFtZT1cIuato+imj+ihqOePvuODgeOCp+ODg+OCr1wiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9W107XHJcbiAgICAgICAgdGhpcy5wcm9wcz17XHJcbiAgICAgICAgICAgIGZpZWxkOntjb2RlOicnfSxcclxuICAgICAgICAgICAgbWVzc2FnZTonJyxcclxuICAgICAgICAgICAgcmVnRXhwcmVzc2lvbjonJ1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL+OCouOCr+OCt+ODp+ODs+OCkueZu+mMsuOBmeOCi1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICog44Ki44Kv44K344On44Oz44Gu5a6f6KGM44KS5ZG844Gz5Ye644GZXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uTm9kZSBcclxuICAgICAqIEBwYXJhbSBldmVudCBcclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBhc3luYyBwcm9jZXNzKGFjdGlvbk5vZGU6SUFjdGlvbk5vZGUsZXZlbnQ6YW55LGNvbnRleHQ6SUNvbnRleHQpOlByb21pc2U8SUFjdGlvblJlc3VsdD4ge1xyXG4gICAgICAgIGxldCByZXN1bHQ9e1xyXG4gICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDpmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAvL+WxnuaAp+ioreWumuOCkuWPluW+l+OBmeOCi1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvblByb3BzPWFjdGlvbk5vZGUuYWN0aW9uUHJvcHM7XHJcbiAgICAgICAgICAgIGlmICghKCdmaWVsZCcgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkgJiYgISgnbWVzc2FnZScgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkgJiYgISgncmVnRXhwcmVzc2lvbidpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElSZWd1bGFyQ2hlY2tQcm9wcztcclxuICAgICAgICAgICAgLy/mnaHku7blvI/jga7oqIjnrpfntZDmnpzjgpLlj5blvpdcclxuICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gZXZlbnQucmVjb3JkO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdLnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAodGhpcy5wcm9wcy5yZWdFeHByZXNzaW9uKTtcclxuICAgICAgICAgICAgaWYoIXJlZ2V4LnRlc3QodmFsdWUpKXtcclxuICAgICAgICAgICAgICAgIHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdLmVycm9yPXRoaXMucHJvcHMubWVzc2FnZTsgXHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0uZXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdD0ge1xyXG4gICAgICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OnRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1jYXRjaChlcnJvcil7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZXJyb3JzLmhhbmRsZUVycm9yKGVycm9yLGFjdGlvbk5vZGUpO1xyXG4gICAgICAgICAgICByZXN1bHQuY2FuTmV4dD1mYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV09dGhpcztcclxuICAgIH1cclxuICAgIFxyXG59XHJcbm5ldyBSZWd1bGFyQ2hlY2tBY3Rpb24oKTtcclxuIiwiaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgSUFjdGlvbiwgSUFjdGlvblJlc3VsdCwgSUFjdGlvbk5vZGUsIElBY3Rpb25Qcm9wZXJ0eSwgSUZpZWxkLCBJQ29udGV4dCB9IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44Gu5bGe5oCn5a6a576pXHJcbiAqL1xyXG5pbnRlcmZhY2UgSU1haWxDaGVja1Byb3BzIHtcclxuICAgIGZpZWxkOiBJRmllbGQ7Ly/jg4Hjgqfjg4Pjgq/jgZnjgovjg5XjgqPjg7zjg6vjg4njga7lr77osaFcclxuICAgIG1lc3NhZ2U6IHN0cmluZzsvL+OCqOODqeODvOODoeODg+OCu+ODvOOCuFxyXG4gICAgZW1haWxDaGVjazpzdHJpbmc7XHJcbn1cclxuLyoqXHJcbiAqIOODoeODvOODq+OCouODieODrOOCueODgeOCp+ODg+OCr+OCouOCr+OCt+ODp+ODs1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIE1haWxDaGVja0FjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb24ge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gICAgcHJvcHM6IElNYWlsQ2hlY2tQcm9wcztcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMubmFtZSA9IFwi44Oh44O844Or44Ki44OJ44Os44K544OB44Kn44OD44KvXCI7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcyA9IFtdO1xyXG4gICAgICAgIHRoaXMucHJvcHMgPSB7XHJcbiAgICAgICAgICAgIGZpZWxkOiB7IGNvZGU6ICcnIH0sXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6ICcnLFxyXG4gICAgICAgICAgICBlbWFpbENoZWNrOicnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v44Ki44Kv44K344On44Oz44KS55m76Yyy44GZ44KLXHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiDjgqLjgq/jgrfjg6fjg7Pjga7lrp/ooYzjgpLlkbzjgbPlh7rjgZlcclxuICAgICAqIEBwYXJhbSBhY3Rpb25Ob2RlIFxyXG4gICAgICogQHBhcmFtIGV2ZW50IFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHByb2Nlc3MoYWN0aW9uTm9kZTogSUFjdGlvbk5vZGUsIGV2ZW50OiBhbnksY29udGV4dDpJQ29udGV4dCk6IFByb21pc2U8SUFjdGlvblJlc3VsdD4ge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgIGNhbk5leHQ6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDogZmFsc2VcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvL+WxnuaAp+ioreWumuOCkuWPluW+l+OBmeOCi1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvblByb3BzID0gYWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuXHJcbiAgICAgICAgICAgIGlmICghKCdmaWVsZCcgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkgJiYgISgnbWVzc2FnZScgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkgJiYgISgnZW1haWxDaGVjaycgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBJTWFpbENoZWNrUHJvcHM7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IGV2ZW50LnJlY29yZDtcclxuICAgICAgICAgICAgLy/lr77osaHjg5XjgqPjg7zjg6vjg4njga7lrZjlnKjjg4Hjgqfjg4Pjgq9cclxuICAgICAgICAgICAgaWYoISh0aGlzLnByb3BzLmZpZWxkLmNvZGUgaW4gcmVjb3JkKSl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOODleOCo+ODvOODq+ODiVske3RoaXMucHJvcHMuZmllbGQuY29kZX1d44GM6KaL44Gk44GL44KK44G+44Gb44KT44Gn44GX44Gf44CCYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLmVtYWlsQ2hlY2sgPT09ICfljrPmoLwnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIS9eW2EtekEtWjAtOV8twqUuXStAW2EtekEtWjAtOV8tXSsoXFwuW2EtekEtWjAtOV8tXSspKyQvLnRlc3QodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0uZXJyb3IgPSB0aGlzLnByb3BzLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS5lcnJvciA9IG51bGw7IFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yZXN1bHQ9dHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmVtYWlsQ2hlY2sgPT09ICfjgobjgovjgoEnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIS9eW15AXStAW15AXSskLy50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdLmVycm9yID0gdGhpcy5wcm9wcy5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0uZXJyb3IgPSBudWxsOyBcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucmVzdWx0PXRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FuTmV4dDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHRydWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZXJyb3JzLmhhbmRsZUVycm9yKGVycm9yLGFjdGlvbk5vZGUpO1xyXG4gICAgICAgICAgICByZXN1bHQuY2FuTmV4dCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZWdpc3RlcigpOiB2b2lkIHtcclxuICAgICAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXSA9IHRoaXM7XHJcbiAgICB9XHJcblxyXG59XHJcbm5ldyBNYWlsQ2hlY2tBY3Rpb24oKTtcclxuIiwiaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgIElBY3Rpb24sSUFjdGlvblJlc3VsdCwgSUFjdGlvbk5vZGUsIElBY3Rpb25Qcm9wZXJ0eSwgSUZpZWxkLCBJQ29udGV4dH0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJU3RyQ291bnRDaGVja1Byb3Bze1xyXG4gICAgZmllbGQ6SUZpZWxkOy8v44OB44Kn44OD44Kv44GZ44KL44OV44Kj44O844Or44OJ44Gu5a++6LGhXHJcbiAgICBtZXNzYWdlOnN0cmluZzsvL+OCqOODqeODvOODoeODg+OCu+ODvOOCuFxyXG4gICAgbWF4TGVuZ3RoOm51bWJlcjsvL1xyXG59XHJcbi8qKlxyXG4gKiDmraPopo/ooajnj77jg4Hjgqfjg4Pjgq/jgqLjgq/jgrfjg6fjg7NcclxuICovXHJcbmV4cG9ydCBjbGFzcyBTdHJDb3VudENoZWNrQWNpdG9uIGltcGxlbWVudHMgSUFjdGlvbntcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICAgIHByb3BzOklTdHJDb3VudENoZWNrUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMubmFtZT1cIuaWh+Wtl+aVsOODgeOCp+ODg+OCr1wiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9W107XHJcbiAgICAgICAgdGhpcy5wcm9wcz17XHJcbiAgICAgICAgICAgIGZpZWxkOntjb2RlOicnfSxcclxuICAgICAgICAgICAgbWVzc2FnZTonJyxcclxuICAgICAgICAgICAgbWF4TGVuZ3RoOjBcclxuICAgICAgICB9XHJcbiAgICAgICAgLy/jgqLjgq/jgrfjg6fjg7PjgpLnmbvpjLLjgZnjgotcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGUgXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSxjb250ZXh0OklDb250ZXh0KTpQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgICAgICBsZXQgcmVzdWx0PXtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgLy/lsZ7mgKfoqK3lrprjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1hY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICBpZiAoISgnZmllbGQnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ21lc3NhZ2UnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ3N0ckV4cHJlc3Npb24naW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUgYXMgSVN0ckNvdW50Q2hlY2tQcm9wcztcclxuICAgICAgICAgICAgLy/mnaHku7blvI/jga7oqIjnrpfntZDmnpzjgpLlj5blvpdcclxuICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gZXZlbnQucmVjb3JkO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdLnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBtYXhMZW5ndGggPSB0aGlzLnByb3BzLm1heExlbmd0aDtcclxuICAgICAgICAgICAgaWYodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycgKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKG1heExlbmd0aCA8IHZhbHVlLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS5lcnJvciA9IHRoaXMucHJvcHMubWVzc2FnZTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS5lcnJvciA9IG51bGw7IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdD0ge1xyXG4gICAgICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OnRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIFxyXG4gICAgICAgIH1jYXRjaChlcnJvcil7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZXJyb3JzLmhhbmRsZUVycm9yKGVycm9yLGFjdGlvbk5vZGUpO1xyXG4gICAgICAgICAgICByZXN1bHQuY2FuTmV4dD1mYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV09dGhpcztcclxuICAgIH1cclxuICAgIFxyXG59XHJcbm5ldyBTdHJDb3VudENoZWNrQWNpdG9uKCk7XHJcbiIsImltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7IElBY3Rpb24sIElBY3Rpb25SZXN1bHQsIElBY3Rpb25Ob2RlLCBJQWN0aW9uUHJvcGVydHksIElGaWVsZCAsSUNvbnRleHQsIElWYXJOYW1lfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+OBruWxnuaAp+Wumue+qVxyXG4gKi9cclxuaW50ZXJmYWNlIElEYXRldGltZUdldHRlclByb3BzIHtcclxuICAgIC8qKuWkieaVsOOBruWQjeWJjSAqL1xyXG4gICAgdmVyTmFtZTpJVmFyTmFtZTtcclxufVxyXG4vKipcclxuICog54++5Zyo5pel5pmC44KS5Y+W5b6X44GZ44KL44Ki44Kv44K344On44OzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRGF0ZXRpbWVHZXR0ZXJBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9uIHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICAgIHByb3BzOiBJRGF0ZXRpbWVHZXR0ZXJQcm9wcztcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMubmFtZSA9IFwi54++5Zyo5pel5pmCXCI7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcyA9IFtdO1xyXG4gICAgICAgIHRoaXMucHJvcHMgPSB7XHJcbiAgICAgICAgICAgIHZlck5hbWU6e25hbWU6Jyd9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICog44Ki44Kv44K344On44Oz44Gu5a6f6KGM44KS5ZG844Gz5Ye644GZXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uTm9kZSBcclxuICAgICAqIEBwYXJhbSBldmVudCBcclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBhc3luYyBwcm9jZXNzKGFjdGlvbk5vZGU6IElBY3Rpb25Ob2RlLCBldmVudDogYW55LGNvbnRleHQ6SUNvbnRleHQpOiBQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICBjYW5OZXh0OiB0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy/lsZ7mgKfoqK3lrprjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcyA9IGFjdGlvbk5vZGUuYWN0aW9uUHJvcHM7XHJcblxyXG4gICAgICAgICAgICBpZiAoISgndmVyTmFtZScgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUgYXMgSURhdGV0aW1lR2V0dGVyUHJvcHM7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBsZXQgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKHRoaXMucHJvcHMudmVyTmFtZSAmJiB0aGlzLnByb3BzLnZlck5hbWUubmFtZSE9PScnKXtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQudmFyaWFibGVzW3RoaXMucHJvcHMudmVyTmFtZS5uYW1lXT10b2RheS50b0lTT1N0cmluZygpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG5cclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb250ZXh0LmVycm9ycy5oYW5kbGVFcnJvcihlcnJvcixhY3Rpb25Ob2RlKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV0gPSB0aGlzO1xyXG4gICAgfVxyXG5cclxufVxyXG5uZXcgRGF0ZXRpbWVHZXR0ZXJBY3Rpb24oKTtcclxuIiwiXHJcblxyXG5pbXBvcnQgeyBlYWNoIH0gZnJvbSBcImpxdWVyeVwiO1xyXG5pbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyAgSUFjdGlvbixJQWN0aW9uUmVzdWx0LCBJQWN0aW9uTm9kZSwgSUFjdGlvblByb3BlcnR5LCBJRmllbGQsIElDb250ZXh0IH0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbmltcG9ydCB7IENvbmRpdGlvblRyZWUgfSBmcm9tICcuLi90eXBlcy9Db25kaXRpb25zJztcclxuXHJcblxyXG5cclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+OBruWxnuaAp+Wumue+qVxyXG4gKi9cclxuaW50ZXJmYWNlIElJbnNlcnRWYWx1ZVByb3Bze1xyXG4gICAgZmllbGQ6SUZpZWxkO1xyXG4gICAgY29uZGl0aW9uOnN0cmluZztcclxuICAgIHZhbHVlOnN0cmluZztcclxuICAgIHNob3c6c3RyaW5nO1xyXG59XHJcbi8qKlxyXG4gKlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEluc2VydFZhbHVlQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbntcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICAgIHByb3BzOklJbnNlcnRWYWx1ZVByb3BzO1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLm5hbWU9XCLlgKTjgpLmjL/lhaXjgZnjgotcIjsvLyBEQuOBq+eZu+mMsuOBl+OBn+OCouOCr+OCt+ODp+ODs+WQjVxyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9W107XHJcbiAgICAgICAgLy/jg5fjg63jg5Hjg4bjgqPlsZ7mgKfjga7liJ3mnJ/ljJZcclxuICAgICAgICB0aGlzLnByb3BzPXtcclxuICAgICAgICAgICAgZmllbGQ6e2NvZGU6Jyd9LFxyXG4gICAgICAgICAgICBjb25kaXRpb246JycsXHJcbiAgICAgICAgICAgIHZhbHVlOicnLFxyXG4gICAgICAgICAgICBzaG93OicnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v44Ki44Kv44K344On44Oz44KS55m76Yyy44GZ44KLXHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog56m655m95paH5a2X44KS56m655m95paH5a2X44GM6Z2e5a++5b+c44Gu44OV44Kj44O844Or44OJ44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gm44GE44Gq44GE44GL44CB5b+F6aCI6aCF55uu44OV44Kj44O844Or44OJ44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gm44GE44Gq44GE44GL44OB44Kn44OD44Kv44GZ44KLXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRWYWx1ZSAtIOaMv+WFpeOBmeOCi+WApFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gLeWFpeWKm+WApOOBjOacieWKueOBquaXpeS7mOW9ouW8j+OBruWgtOWQiOOBr3RydWXjgpLov5TjgZfjgIHjgZ3jgYbjgafjgarjgYTloLTlkIjjga/kvovlpJbjgpLnmbrnlJ/jgZXjgZvjgotcclxuICAgICAqL1xyXG4gICAgY2hlY2tJbnB1dFZhbHVlQmxhbmsoZmllbGRUeXBlIDpzdHJpbmcgfCB1bmRlZmluZWQsaW5wdXRWYWx1ZSA6c3RyaW5nLGZpZWxkQ29kZSA6c3RyaW5nLGZpZWxkUmVxdWlyZWQgOmJvb2xlYW4gfCB1bmRlZmluZWQsZXZlbnQgOmFueSk6IGJvb2xlYW57XHJcblxyXG4gICAgICAgIGxldCB2YWx1ZUhhc0JsYW5rO1xyXG4gICAgICAgIC8v5q2j6KaP6KGo54++44OB44Kn44OD44KvXHJcbiAgICAgICAgdmFsdWVIYXNCbGFuayA9IGlucHV0VmFsdWUubWF0Y2goL14oXFxzfOOAgCkqJC8pOy8v5YCk44GM5Y2K6KeS44K544Oa44O844K544O744K/44OW5paH5a2X44O75pS56KGM44O75pS544Oa44O844K444O75YWo6KeS44K544Oa44O844K544Gu44G/44Gn44GC44KL44GLXHJcblxyXG5cclxuICAgICAgICAvL+WApOOBq+epuueZveaWh+Wtl+OBjOWFpeOBo+OBpuOBhOOCi+OAgW51bGzjga7jgajjgY3jga/jgIHjgqjjg6njg7zjg4Hjgqfjg4Pjgq/jgZnjgotcclxuICAgICAgICBpZih2YWx1ZUhhc0JsYW5rICE9PSBudWxsIHx8IGlucHV0VmFsdWUgPT09IG51bGwgfHwgaW5wdXRWYWx1ZSA9PT0gJycpe1xyXG4gICAgICAgICAgICAvL+epuueZveaWh+Wtl+OCkuepuueZveaWh+Wtl+OBjOmdnuWvvuW/nOOBruODleOCo+ODvOODq+ODieOBq+aMv+WFpeOBl+OCiOOBhuOBqOOBl+OBpuOBhOOCi+WgtOWQiOOAgeS+i+WkluOCkueZuueUn+OBleOBm+OCi1xyXG4gICAgICAgICAgICBpZihmaWVsZFR5cGUgPT09IFwiTlVNQkVSXCIgfHwgZmllbGRUeXBlID09PSBcIkRBVEVcIiB8fCBmaWVsZFR5cGUgPT09IFwiREFURVRJTUVcIiB8fCBmaWVsZFR5cGUgPT09IFwiVElNRVwiIHx8IGZpZWxkVHlwZSA9PT0gXCJVU0VSX1NFTEVDVFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IGZpZWxkVHlwZSA9PT0gXCJPUkdBTklaQVRJT05fU0VMRUNUXCIgfHwgZmllbGRUeXBlID09PSBcIkdST1VQX1NFTEVDVFwiIHx8IGZpZWxkVHlwZSA9PT0gXCJSQURJT19CVVRUT05cIiB8fCBmaWVsZFR5cGUgPT09IFwiRFJPUF9ET1dOXCIgfHwgZmllbGRUeXBlID09PSBcIkNIRUNLX0JPWFwiIHx8IGZpZWxkVHlwZSA9PT0gXCJNVUxUSV9TRUxFQ1RcIil7XHJcbiAgICAgICAgICAgICAgICBldmVudC5yZWNvcmRbZmllbGRDb2RlXVsnZXJyb3InXSA9IFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjgavmjL/lhaXjgZfjgojjgYbjgajjgZfjgZ/jgIHlgKTjga/nqbrnmb3mloflrZfjgafjgZnjgIJcIjsgLy/jg6zjgrPjg7zjg4njgavjgqjjg6njg7zjgpLooajnpLpcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIuOAjFwiK2ZpZWxkQ29kZStcIuOAjVwiK1wi44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gf44CB5YCk44Gv56m655m95paH5a2X44Gn44GZ44CC44CM5YCk44KS5oy/5YWl44GZ44KL44CN44Kz44Oz44Od44O844ON44Oz44OI44Gu5Yem55CG44KS5Lit5pat44GX44G+44GX44Gf44CCXCIpO1xyXG5cclxuICAgICAgICAgICAgLy/nqbrnmb3mloflrZfjgpLlv4XpoIjpoIXnm67jg5XjgqPjg7zjg6vjg4njgavmjL/lhaXjgZfjgojjgYbjgajjgZfjgabjgYTjgovloLTlkIjjgIHkvovlpJbjgpLnmbrnlJ/jgZXjgZvjgotcclxuICAgICAgICAgICAgfWVsc2UgaWYoZmllbGRSZXF1aXJlZCl7XHJcbiAgICAgICAgICAgICAgICBldmVudC5yZWNvcmRbZmllbGRDb2RlXVsnZXJyb3InXSA9IFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njga/lv4XpoIjpoIXnm67jga7jgZ/jgoHjgIHnqbrnmb3mloflrZfjga/mjL/lhaXjgafjgY3jgb7jgZvjgpPjgIJcIjsgLy/jg6zjgrPjg7zjg4njgavjgqjjg6njg7zjgpLooajnpLpcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIuOAjFwiK2ZpZWxkQ29kZStcIuOAjVwiK1wi44OV44Kj44O844Or44OJ44Gv5b+F6aCI6aCF55uu44Gu44Gf44KB44CB56m655m95paH5a2X44Gv5oy/5YWl44Gn44GN44G+44Gb44KT44CC44CM5YCk44KS5oy/5YWl44GZ44KL44CN44Kz44Oz44Od44O844ON44Oz44OI44Gu5Yem55CG44KS5Lit5pat44GX44G+44GX44Gf44CCXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOepuueZveaWh+Wtl+OBruWkieaVsOOCkumdnuWvvuW/nOOBruODleOCo+ODvOODq+ODieOBq+aMv+WFpeOBl+OCiOOBhuOBqOOBl+OBpuOBhOOBquOBhOOBi+OAgeW/hemgiOmgheebruODleOCo+ODvOODq+ODieOBq+aMv+WFpeOBl+OCiOOBhuOBqOOBl+OBpuOBhOOBquOBhOOBi+ODgeOCp+ODg+OCr+OBmeOCi1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0VmFsdWUgLSDmjL/lhaXjgZnjgovlgKRcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IC3lhaXlipvlgKTjgYzmnInlirnjgarml6Xku5jlvaLlvI/jga7loLTlkIjjga90cnVl44KS6L+U44GX44CB44Gd44GG44Gn44Gq44GE5aC05ZCI44Gv5L6L5aSW44KS55m655Sf44GV44Gb44KLXHJcbiAgICAgKi9cclxuICAgIGNoZWNrVmFyaWFibGVWYWx1ZUJsYW5rKGZpZWxkVHlwZSA6c3RyaW5nIHwgdW5kZWZpbmVkLGlucHV0VmFsdWVBcnJheSA6YW55LGZpZWxkQ29kZSA6c3RyaW5nLGZpZWxkUmVxdWlyZWQgOmJvb2xlYW4gfCB1bmRlZmluZWQsZXZlbnQgOmFueSk6IGJvb2xlYW57XHJcblxyXG4gICAgICAgIGxldCB2YXJpYWJsZUhhc0JsYW5rO1xyXG4gICAgICAgIC8v5q2j6KaP6KGo54++44OB44Kn44OD44KvXHJcbiAgICAgICAgZm9yKGxldCBpID0wO2k8aW5wdXRWYWx1ZUFycmF5Lmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAvL+mFjeWIl+OBruimgee0oOOBq251bGzjgYzjgarjgYTjgYvjgIHnqbrnmb3mloflrZfjgYzlgKTjgavlkKvjgb7jgozjgabjgYTjgarjgYTjgYvjg4Hjgqfjg4Pjgq/jgZnjgotcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dFZhbHVlQXJyYXlbaV0gPT09IFwic3RyaW5nXCIpe1xyXG4gICAgICAgICAgICB2YXJpYWJsZUhhc0JsYW5rID0gaW5wdXRWYWx1ZUFycmF5W2ldLm1hdGNoKC9eKFxcc3zjgIApKiQvKTsvL+WApOOBjOWNiuinkuOCueODmuODvOOCueODu+OCv+ODluaWh+Wtl+ODu+aUueihjOODu+aUueODmuODvOOCuOODu+WFqOinkuOCueODmuODvOOCueOBruOBv+OBp+OBguOCi+OBi1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL+WkieaVsOOBruWApOOBq+epuueZveaWh+Wtl+OBjOWFpeOBo+OBpuOBhOOCi+OAgemFjeWIl+OBq+imgee0oOOBjOOBquOBhOOBqOOBjeOBr+OAgeOCqOODqeODvOODgeOCp+ODg+OCr+OBmeOCi1xyXG4gICAgICAgIGlmKHZhcmlhYmxlSGFzQmxhbmsgIT09IG51bGwgJiYgdmFyaWFibGVIYXNCbGFuayAhPT0gdW5kZWZpbmVkICYmICB2YXJpYWJsZUhhc0JsYW5rICE9PSBcIlwiICYmIGlucHV0VmFsdWVBcnJheS5sZW5ndGggPT09IDApe1xyXG4gICAgICAgICAgICAvL+epuueZveaWh+Wtl+OCkuepuueZveaWh+Wtl+OBjOmdnuWvvuW/nOOBruODleOCo+ODvOODq+ODieOBq+aMv+WFpeOBl+OCiOOBhuOBqOOBl+OBpuOBhOOCi+WgtOWQiOOAgeS+i+WkluOCkueZuueUn+OBleOBm+OCi1xyXG4gICAgICAgICAgICBpZihmaWVsZFR5cGUgPT09IFwiTlVNQkVSXCIgfHwgZmllbGRUeXBlID09PSBcIkRBVEVcIiB8fCBmaWVsZFR5cGUgPT09IFwiREFURVRJTUVcIiB8fCBmaWVsZFR5cGUgPT09IFwiVElNRVwiIHx8IGZpZWxkVHlwZSA9PT0gXCJVU0VSX1NFTEVDVFwiXHJcbiAgICAgICAgICAgICAgICB8fCBmaWVsZFR5cGUgPT09IFwiT1JHQU5JWkFUSU9OX1NFTEVDVFwiIHx8IGZpZWxkVHlwZSA9PT0gXCJHUk9VUF9TRUxFQ1RcIiB8fCBmaWVsZFR5cGUgPT09IFwiUkFESU9fQlVUVE9OXCIgfHwgZmllbGRUeXBlID09PSBcIkRST1BfRE9XTlwiIHx8IGZpZWxkVHlwZSA9PT0gXCJDSEVDS19CT1hcIiB8fCBmaWVsZFR5cGUgPT09IFwiTVVMVElfU0VMRUNUXCIpe1xyXG4gICAgICAgICAgICAgICAgZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV1bJ2Vycm9yJ10gPSBcIuOAjFwiK2ZpZWxkQ29kZStcIuOAjVwiK1wi44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gf44CB5aSJ5pWw44Gu5YCk44Gv56m655m95paH5a2X44Gn44GZ44CCXCI7IC8v44Os44Kz44O844OJ44Gr44Ko44Op44O844KS6KGo56S6XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuOBq+aMv+WFpeOBl+OCiOOBhuOBqOOBl+OBn+OAgeWkieaVsOOBruWApOOBr+epuueZveaWh+Wtl+OBp+OBmeOAguOAjOWApOOCkuaMv+WFpeOBmeOCi+OAjeOCs+ODs+ODneODvOODjeODs+ODiOOBruWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiKTtcclxuXHJcbiAgICAgICAgICAgIC8v56m655m95paH5a2X44KS5b+F6aCI6aCF55uu44OV44Kj44O844Or44OJ44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gm44GE44KL5aC05ZCI44CB5L6L5aSW44KS55m655Sf44GV44Gb44KLXHJcbiAgICAgICAgICAgIH1lbHNlIGlmKGZpZWxkUmVxdWlyZWQpe1xyXG4gICAgICAgICAgICAgICAgZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV1bJ2Vycm9yJ10gPSBcIuOAjFwiK2ZpZWxkQ29kZStcIuOAjVwiK1wi44OV44Kj44O844Or44OJ44Gv5b+F6aCI6aCF55uu44Gn44GC44KK44CB56m655m944O756m655m95paH5a2X44Gu5YCk44Gu5aSJ5pWw44Gv44CB5oy/5YWl44Gn44GN44G+44Gb44KT44CCXCI7IC8v44Os44Kz44O844OJ44Gr44Ko44Op44O844KS6KGo56S6XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuODleOCo+ODvOODq+ODieOBr+W/hemgiOmgheebruOBp+OBguOCiuOAgeepuueZveODu+epuueZveaWh+Wtl+OBruWApOOBruWkieaVsOOBr+OAgeaMv+WFpeOBp+OBjeOBvuOBm+OCk+OAguOAjOWApOOCkuaMv+WFpeOBmeOCi+OAjeOCs+ODs+ODneODvOODjeODs+ODiOOBruWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlhaXlipvlgKTjgYzljYrop5LmlbDlrZfjgYvjg4Hjgqfjg4Pjgq/jgZnjgovplqLmlbBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFZhbHVlIC0g5oy/5YWl44GZ44KL5YCkXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSAt5YWl5Yqb5YCk44GM5pyJ5Yq544Gq5pWw5YCk44Gu5aC05ZCI44GvdHJ1ZeOCkui/lOOBl+OAgeOBneOBhuOBp+OBquOBhOWgtOWQiOOBr+S+i+WkluOCkueZuueUn+OBleOBm+OCi1xyXG4gICAgICovXHJcbiAgICBjaGVja0lucHV0TnVtYmVyKGlucHV0VmFsdWUgOnN0cmluZyxmaWVsZENvZGUgOnN0cmluZyxldmVudCA6YW55KTogYm9vbGVhbntcclxuICAgICAgICBsZXQgaW5wdXROdW1iZXJWYWx1ZSA9IE51bWJlcihpbnB1dFZhbHVlKTsvL+aVsOWApOWei+OBq+WkieaPm1xyXG5cclxuICAgICAgICAvL+aciemZkOaVsOOBi+OBqeOBhuOBi+WIpOWumlxyXG4gICAgICAgIGlmKCFpc0Zpbml0ZShpbnB1dE51bWJlclZhbHVlKSl7XHJcbiAgICAgICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdWydlcnJvciddID0gXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuODleOCo+ODvOODq+ODieOBq+WFpeOCjOOCiOOBhuOBqOOBl+OBn+WApOOBr+OAgeeEoeWKueOBquaXpeS7mOW9ouW8j+OBp+OBmeOAglwiOyAvL+ODrOOCs+ODvOODieOBq+OCqOODqeODvOOCkuihqOekulxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuODleOCo+ODvOODq+ODieOBq+WFpeOCjOOCiOOBhuOBqOOBl+OBn+WApOOBr+OAgeacieWKueOBquaVsOWApOOBp+OBr+OBguOCiuOBvuOBm+OCk+OAguOAjOWApOOCkuaMv+WFpeOBmeOCi+OAjeOCs+ODs+ODneODvOODjeODs+ODiOOBruWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIOWFpeWKm+WApOOBjOacieWKueOBquaXpeS7mOW9ouW8j+OBi+ODgeOCp+ODg+OCr+OBmeOCi+mWouaVsFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0VmFsdWUgLSDmjL/lhaXjgZnjgovlgKRcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IC3lhaXlipvlgKTjgYzmnInlirnjgarml6Xku5jlvaLlvI/jga7loLTlkIjjga90cnVl44KS6L+U44GX44CB44Gd44GG44Gn44Gq44GE5aC05ZCI44Gv5L6L5aSW44KS55m655Sf44GV44Gb44KLXHJcbiAgICAgKi9cclxuICAgIGNoZWNrSW5wdXREYXRlKGlucHV0VmFsdWUgOnN0cmluZyxmaWVsZENvZGUgOnN0cmluZyxldmVudCA6YW55KTogYm9vbGVhbntcclxuICAgICAgICAvL+ato+imj+ihqOePvuODgeOCp+ODg+OCr1xyXG4gICAgICAgIGxldCB0d29EaWdpdE1vbnRoRGF5ID0gaW5wdXRWYWx1ZS5tYXRjaCgvKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSkkLyk7Ly805qGB44Gu5pWw5a2XLTLmoYHjga7mlbDlrZctMuahgeOBruaVsOWtl1xyXG4gICAgICAgIGxldCBzaW5nbGVEaWdpdE1vbnRoRGF5ID0gaW5wdXRWYWx1ZS5tYXRjaCgvKFxcZHs0fSktKFxcZHsxfSktKFxcZHsxfSkkLyk7Ly805qGB44Gu5pWw5a2XLTHmoYHjga7mlbDlrZctMuahgeOBruaVsOWtl1xyXG4gICAgICAgIGxldCBzaW5nbGVEaWdpdE1vbnRoID0gaW5wdXRWYWx1ZS5tYXRjaCgvKFxcZHs0fSktKFxcZHsxfSktKFxcZHsyfSkkLyk7Ly805qGB44Gu5pWw5a2XLTHmoYHjga7mlbDlrZctMuahgeOBruaVsOWtl1xyXG4gICAgICAgIGxldCBzaW5nbGVEaWdpdERheSA9IGlucHV0VmFsdWUubWF0Y2goLyhcXGR7NH0pLShcXGR7Mn0pLShcXGR7MX0pJC8pOy8vNOahgeOBruaVsOWtly0y5qGB44Gu5pWw5a2XLTHmoYHjga7mlbDlrZdcclxuICAgICAgICBsZXQgZGF0ZVRpbWVNaWxsaVNlY29uZCA9IGlucHV0VmFsdWUubWF0Y2goLyhcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pVChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0pLihcXGR7MiwzfSlaJC8pOy8v5pmC5Yi75YWl44KK44GuVVRD44Gu5pel5LuY5b2i5byPKOODn+ODquenkilcclxuICAgICAgICBsZXQgZGF0ZVRpbWUgPSBpbnB1dFZhbHVlLm1hdGNoKC8oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KVQoXFxkezJ9KTooXFxkezJ9KTooXFxkezJ9KVokLyk7Ly/mmYLliLvlhaXjgorjga5VVEPjga7ml6Xku5jlvaLlvI9cclxuICAgICAgICBsZXQgZGF0ZTtcclxuICAgICAgICAvL2RhdGXlnovjgavlpInmj5tcclxuICAgICAgICBkYXRlID0gbmV3IERhdGUoaW5wdXRWYWx1ZSk7XHJcblxyXG4gICAgICAgIC8vZGF0ZeWei+WkieaPm+OBp+OBjeOBn+OBi+eiuuiqjVxyXG4gICAgICAgIGlmKGRhdGUgIT09IHVuZGVmaW5lZCAmJiAhaXNOYU4oZGF0ZS5nZXREYXRlKCkpKXtcclxuICAgICAgICAgICAgLy/mraPopo/ooajnj77jg4Hjgqfjg4Pjgq/norroqo1cclxuICAgICAgICAgICAgaWYodHdvRGlnaXRNb250aERheSA9PT0gbnVsbCAmJiBzaW5nbGVEaWdpdE1vbnRoID09PSBudWxsICYmIHNpbmdsZURpZ2l0RGF5ID09PSBudWxsICYmIHNpbmdsZURpZ2l0TW9udGhEYXkgPT09IG51bGwgJiYgZGF0ZVRpbWUgPT09IG51bGwgJiYgZGF0ZVRpbWVNaWxsaVNlY29uZCA9PT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV1bJ2Vycm9yJ10gPSBcIuOAjFwiK2ZpZWxkQ29kZStcIuOAjVwiK1wi44OV44Kj44O844Or44OJ44Gr5YWl44KM44KI44GG44Go44GX44Gf5YCk44Gv44CB54Sh5Yq544Gq5pel5LuY5b2i5byP44Gn44GZ44CCXCI7IC8v44Os44Kz44O844OJ44Gr44Ko44Op44O844KS6KGo56S6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njgavlhaXjgozjgojjgYbjgajjgZfjgZ/lgKTjga/jgIHnhKHlirnjgarml6Xku5jlvaLlvI/jgafjgZnjgILjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIOWFpeWKm+WApOOBjOacieWKueOBquaZguWIu+W9ouW8j+OBi+ODgeOCp+ODg+OCr+OBmeOCi+mWouaVsFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0VmFsdWUgLSDmjL/lhaXjgZnjgovlgKRcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IC3lhaXlipvlgKTjgYzmnInlirnjgarml6Xku5jlvaLlvI/jga7loLTlkIjjga90cnVl44KS6L+U44GX44CB44Gd44GG44Gn44Gq44GE5aC05ZCI44Gv5L6L5aSW44KS55m655Sf44GV44Gb44KLXHJcbiAgICAgKi9cclxuICAgIGNoZWNrSW5wdXRUaW1lKGlucHV0VmFsdWUgOnN0cmluZyxmaWVsZENvZGUgOnN0cmluZyxldmVudCA6YW55KTogYm9vbGVhbntcclxuICAgICAgICAvL+ato+imj+ihqOePvuODgeOCp+ODg+OCr1xyXG4gICAgICAgIGxldCB0aW1lRm9ybWF0ID1pbnB1dFZhbHVlLm1hdGNoKC9eKFswLTldfDBbMC05XXwxWzAtOV18MlswLTNdKTpbMC01XVswLTldJC8pO1xyXG5cclxuICAgICAgICAvL+ato+imj+ihqOePvuODgeOCp+ODg+OCr+eiuuiqjVxyXG4gICAgICAgIGlmKHRpbWVGb3JtYXQgPT09IG51bGwpe1xyXG4gICAgICAgICAgICBldmVudC5yZWNvcmRbZmllbGRDb2RlXVsnZXJyb3InXSA9IFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njgavlhaXjgozjgojjgYbjgajjgZfjgZ/lgKTjga/jgIHnhKHlirnjgarmmYLliLvlvaLlvI/jgafjgZnjgIJcIjsgLy/jg6zjgrPjg7zjg4njgavjgqjjg6njg7zjgpLooajnpLpcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njgavlhaXjgozjgojjgYbjgajjgZfjgZ/lgKTjga/jgIHnhKHlirnjgarmmYLliLvlvaLlvI/jgafjgZnjgILjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgILjgIwx772eMuahgSA6IDLmoYHjgI3jga7lgKTjgpLmjIflrprjgZfjgabjgY/jgaDjgZXjgYTjgIJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5YWl5Yqb5YCk44Gu44OV44Kj44O844Or44OJ44K/44Kk44OX44GMREFURVRJTUXjgafjgYLjgozjgbDjgIHmmYLliLvjgYLjgorjga7ml6Xku5jlvaLlvI/lpInmj5vjgZfjgIFEQVRF44Gn44GC44KM44Gw5pmC5Yi744Gq44GX44Gu5pel5LuY5b2i5byP5aSJ5o+b44GZ44KL6Zai5pWwXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRWYWx1ZSAt5oy/5YWl44GZ44KL5YCkXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGRUeXBlICAt44OV44Kj44O844Or44OJ44K/44Kk44OXXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IC3lhaXlipvlgKTjgYzml6Xku5jlvaLlvI/jgavlpInmj5vjgafjgY3jgZ/loLTlkIjjga/mloflrZfliJfjgpLov5TjgZfjgIHjgZ3jgYbjgafjgarjgYTloLTlkIjjga/kvovlpJbjgpLnmbrnlJ/jgZXjgZvjgotcclxuICAgICAqL1xyXG4gICAgY2hhbmdlRGF0ZUZvcm1hdChpbnB1dFZhbHVlIDpzdHJpbmcsIGZpZWxkVHlwZSA6c3RyaW5nLGZpZWxkQ29kZSA6c3RyaW5nLGV2ZW50IDphbnkpOiBzdHJpbmd7XHJcbiAgICAgICAgbGV0IGRhdGVUaW1lO1xyXG4gICAgICAgIGxldCBkYXRlO1xyXG5cclxuICAgICAgICAvL+aMv+WFpeOBmeOCi+WApOOCkmRhdGXlnovjgavlpInmj5tcclxuICAgICAgICBkYXRlID0gbmV3IERhdGUoaW5wdXRWYWx1ZSk7XHJcbiAgICAgICAgLy9kYXRl5Z6L5aSJ5o+b44Gn44GN44Gf44GL56K66KqNXHJcbiAgICAgICAgaWYoZGF0ZSAhPT0gdW5kZWZpbmVkICYmICFpc05hTihkYXRlLmdldERhdGUoKSkpe1xyXG5cclxuICAgICAgICAgICAgLy/ml6XmmYLjg5XjgqPjg7zjg6vjg4njga7loLTlkIjjgIHmmYLliLvjgYLjgorjga7ml6Xku5jlvaLlvI/lpInmj5tcclxuICAgICAgICAgICAgaWYoZmllbGRUeXBlID09PSBcIkRBVEVUSU1FXCIpe1xyXG4gICAgICAgICAgICAgICAgZGF0ZVRpbWUgPWRhdGUudG9JU09TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRlVGltZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy/ml6Xku5jjg5XjgqPjg7zjg6vjg4njga7loLTlkIjjgIHmmYLliLvjgarjgZfjga7ml6Xku5jjgavlvaLlvI/lpInmj5tcclxuICAgICAgICAgICAgLy9VVEPjga7mmYLliLvjgpLmjL/lhaXjgZfjgZ/jgYTloLTlkIjjgIFKU1TjgavlpInmj5vjgZnjgotcclxuICAgICAgICAgICAgbGV0IGRhdGVUaW1lTWlsbGlTZWNvbmQgPSBpbnB1dFZhbHVlLm1hdGNoKC8oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KVQoXFxkezJ9KTooXFxkezJ9KTooXFxkezJ9KS4oXFxkezIsM30pWiQvKTsvL+aZguWIu+WFpeOCiuOBrlVUQ+OBruaXpeS7mOW9ouW8jyjjg5/jg6rnp5IpXHJcbiAgICAgICAgICAgIGxldCBkYXRlVGltZU5vdEluY2x1ZGluZ01pbGxpU2Vjb25kcyA9IGlucHV0VmFsdWUubWF0Y2goLyhcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pVChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0pWiQvKTsvL+aZguWIu+WFpeOCiuOBrlVUQ+OBruaXpeS7mOW9ouW8j1xyXG5cclxuICAgICAgICAgICAgaWYoZGF0ZVRpbWVNaWxsaVNlY29uZCAhPT0gbnVsbCB8fCBkYXRlVGltZU5vdEluY2x1ZGluZ01pbGxpU2Vjb25kcyAhPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAvL0pTVOOBq+WkieaPm1xyXG4gICAgICAgICAgICAgICAgbGV0IGpzdERhdGU9ZGF0ZS50b0xvY2FsZVN0cmluZyhcImphLUpQXCIsIHsgdGltZVpvbmU6IFwiQXNpYS9Ub2t5b1wiIH0pO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coanN0RGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0ZUFycmF5PWpzdERhdGUubWF0Y2goLyhcXGR7NH0pXFwvKFxcZHsxLDJ9KVxcLyhcXGR7MSwyfSkvKTsvLzTmoYHjga7mlbDlrZctMe+9njLmoYHjga7mlbDlrZctMe+9njLmoYHjga7mlbDlrZdcclxuICAgICAgICAgICAgICAgIGlmKGRhdGVBcnJheSAhPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHllYXJJbmRleCA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1vbnRoSW5kZXggPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXlJbmRleCA9IDM7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGVGb3JtYXR0ZWQ9YCR7ZGF0ZUFycmF5W3llYXJJbmRleF19LSR7ZGF0ZUFycmF5W21vbnRoSW5kZXhdfS0ke2RhdGVBcnJheVtkYXlJbmRleF19YFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRlRm9ybWF0dGVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL1VUQ+aZguWIu+OBp+OBquOBhOWApOOCkuaMv+WFpeOBl+OBn+OBhOWgtOWQiOOAgeW5tOOAgeaciOOAgeaXpeOCkuaKveWHuuOBl+OAgeaciC3lubQt5pel44Gu5b2i5byP5aSJ5o+bXHJcbiAgICAgICAgICAgIGxldCBkYXRlQXJyYXk9aW5wdXRWYWx1ZS5tYXRjaCgvKFxcZHs0fSktKFxcZHsxLDJ9KS0oXFxkezEsMn0pJC8pOy8vNOahgeOBruaVsOWtly0x772eMuahgeOBruaVsOWtly0x772eMuahgeOBruaVsOWtl1xyXG4gICAgICAgICAgICBpZihkYXRlQXJyYXkgIT09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgbGV0IHllYXJJbmRleCA9IDE7XHJcbiAgICAgICAgICAgICAgICBsZXQgbW9udGhJbmRleCA9IDI7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF5SW5kZXggPSAzO1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGVGb3JtYXR0ZWQ9YCR7ZGF0ZUFycmF5W3llYXJJbmRleF19LSR7ZGF0ZUFycmF5W21vbnRoSW5kZXhdfS0ke2RhdGVBcnJheVtkYXlJbmRleF19YFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGVGb3JtYXR0ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBldmVudC5yZWNvcmRbZmllbGRDb2RlXVsnZXJyb3InXSA9IFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njgavlhaXjgozjgojjgYbjgajjgZfjgZ/lgKTjga/jgIHnhKHlirnjgarml6Xku5jlvaLlvI/jgafjgZnjgIJcIjsgLy/jg6zjgrPjg7zjg4njgavjgqjjg6njg7zjgpLooajnpLpcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuODleOCo+ODvOODq+ODieOBq+WFpeOCjOOCiOOBhuOBqOOBl+OBn+WApOOBr+OAgeeEoeWKueOBquaXpeS7mOW9ouW8j+OBp+OBmeOAguOAjOWApOOCkuaMv+WFpeOBmeOCi+OAjeOCs+ODs+ODneODvOODjeODs+ODiOOBruWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOWFpeWKm+WApOOBjOODleOCo+ODvOODq+ODieOCv+OCpOODlyjjg6njgrjjgqrjg5zjgr/jg7Pjg7vjg4njg63jg4Pjg5fjg4Djgqbjg7Pjg7vopIfmlbDpgbjmip7jg7vjg4njg63jg4Pjg5fjg4Djgqbjg7Mp44Gu6YG45oqe6IKi44Gr5a2Y5Zyo44GZ44KL5YCk44GL44OB44Kn44OD44Kv44GZ44KL6Zai5pWwXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRWYWx1ZSAtIOaMv+WFpeOBmeOCi+WApFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gLeWFpeWKm+WApOOBjOacieWKueOBquWApOOBruWgtOWQiOOBr3RydWXjgpLov5TjgZfjgIHjgZ3jgYbjgafjgarjgYTloLTlkIjjga/kvovlpJbjgpLnmbrnlJ/jgZXjgZvjgotcclxuICAgICAqL1xyXG4gICAgY2hlY2tJbnB1dE9wdGlvbihpbnB1dFZhbHVlIDpzdHJpbmcsZmllbGRPcHRpb25zIDpzdHJpbmcgfCB1bmRlZmluZWQsZmllbGRDb2RlIDpzdHJpbmcsZXZlbnQgOmFueSk6IGJvb2xlYW4ge1xyXG5cclxuICAgICAgICAvL+WFpeWKm+WApOOBjOmBuOaKnuiCouOBq+WtmOWcqOOBmeOCi+WApOOBi+ODgeOCp+ODg+OCr+OBl+OAgeWtmOWcqOOBl+OBn+OCiXRydWXjgpLov5TjgZlcclxuICAgICAgICBpZihmaWVsZE9wdGlvbnMgIT09IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gT2JqZWN0LmtleXMoZmllbGRPcHRpb25zKTtcclxuICAgICAgICAgICAgZm9yKHZhciBvcHRpb25zSW5kZXggaW4gb3B0aW9ucyl7XHJcbiAgICAgICAgICAgICAgICBpZihvcHRpb25zW29wdGlvbnNJbmRleF0gPT09IGlucHV0VmFsdWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBldmVudC5yZWNvcmRbZmllbGRDb2RlXVsnZXJyb3InXT1cIuOAjFwiK2ZpZWxkQ29kZStcIuOAjVwiK1wi44Gr44Gv44CB5a2Y5Zyo44GX44Gq44GE5YCk44KS5oy/5YWl44GX44KI44GG44Go44GX44Gf44Gf44KB44CB5Yem55CG44KS5Lit5pat44GX44G+44GX44Gf44CCXCI7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjgavjga/jgIHlrZjlnKjjgZfjgarjgYTlgKTjgpLmjL/lhaXjgZfjgojjgYbjgajjgZfjgZ/jgZ/jgoHjgIHlh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgILjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlhaXlipvlgKTjgYzjg5XjgqPjg7zjg6vjg4njgr/jgqTjg5co44Om44O844K244O86YG45oqeKeOBp+OAgeODpuODvOOCtuODvOaDheWgseOBq+WtmOWcqOOBmeOCi+WApOOBi+ODgeOCp+ODg+OCr+OBmeOCi+mWouaVsFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0VmFsdWUgLSDmjL/lhaXjgZnjgovlgKRcclxuICAgICAqIEByZXR1cm4ge3N0cmluZyB8IGJvb2xlYW59IOWFpeWKm+WApOOBjOeZu+mMsuOBleOCjOOBpuOBhOOCi+ODpuODvOOCtuODvOaDheWgseOBi+OCieimi+OBpOOBi+OBo+OBn+WgtOWQiOOAgXRydWXjgpLov5TjgZfjgIHopovjgaTjgYvjgonjgarjgYvjgaPjgZ/loLTlkIjjgIFmYWxzZeOCkui/lOOBmVxyXG4gICAgICovXHJcbiAgICBhc3luYyBzZXRJbnB1dFVzZXIoaW5wdXRWYWx1ZSA6YW55KTogUHJvbWlzZTxhbnkgfCBib29sZWFuPntcclxuXHJcbiAgICAgICAgLy/jg6bjg7zjgrbjg7zlkI3jgpLmoLzntI3jgZnjgovlpInmlbBcclxuICAgICAgICBsZXQgdXNlcnNOYW1lID0gW107XHJcblxyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgLy9BUEnjgafjg6bjg7zjgrbjg7zmg4XloLHjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgY29uc3QgcmVzcCA9YXdhaXQga2ludG9uZS5hcGkoa2ludG9uZS5hcGkudXJsKCcvdjEvdXNlcnMnLCB0cnVlKSwgJ0dFVCcsIHtjb2RlczogaW5wdXRWYWx1ZS5qb2luKCcsJyl9KVxyXG4gICAgICAgICAgICBsZXQgdXNlcnNJbmZvID0gcmVzcC51c2VycztcclxuXHJcbiAgICAgICAgICAgIGlmICh1c2Vyc0luZm8ubGVuZ3RoICE9PSBpbnB1dFZhbHVlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8v5YWl5Yqb44GV44KM44Gf44Ot44Kw44Kk44Oz5ZCN44GM44Om44O844K244O85oOF5aCx44Gr55m76Yyy44GV44KM44Gm44GE44KL5aC05ZCI44CB44Gd44Gu44Om44O844K244O85ZCN44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4VXNlcnNJbmZvIGluIHVzZXJzSW5mbykge1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBpbmRleElucHV0VXNlciBpbiBpbnB1dFZhbHVlKXtcclxuICAgICAgICAgICAgICAgICAgICBpZih1c2Vyc0luZm9baW5kZXhVc2Vyc0luZm9dLmNvZGUgPT09IGlucHV0VmFsdWVbaW5kZXhJbnB1dFVzZXJdKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnNOYW1lLnB1c2godXNlcnNJbmZvW2luZGV4VXNlcnNJbmZvXS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8v44Om44O844K244O85ZCN44GM5Y+W5b6X44Gn44GN44Gf5aC05ZCI44CB44Ot44Kw44Kk44Oz5ZCN44Go44Om44O844K244O85ZCN44KS44OV44Kj44O844Or44OJ44Gr44K744OD44OI44GZ44KLXHJcbiAgICAgICAgICAgIGlmKHVzZXJzTmFtZSA9PT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWNhdGNoe1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1c2Vyc05hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlhaXlipvlgKTjgYzjg5XjgqPjg7zjg6vjg4njgr/jgqTjg5co57WE57mU6YG45oqeKeOBp+OAgee1hOe5lOaDheWgseOBq+WtmOWcqOOBmeOCi+WApOOBi+ODgeOCp+ODg+OCr+OBmeOCi+mWouaVsFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0VmFsdWUgLSDmjL/lhaXjgZnjgovlgKRcclxuICAgICAqIEByZXR1cm4ge3N0cmluZyB8IGJvb2xlYW59IOWFpeWKm+WApOOBjOeZu+mMsuOBleOCjOOBpuOBhOOCi+e1hOe5lOaDheWgseOBi+OCieimi+OBpOOBi+OBo+OBn+WgtOWQiOOAgXRydWXjgpLov5TjgZfjgIHopovjgaTjgYvjgonjgarjgYvjgaPjgZ/loLTlkIjjgIFmYWxzZeOCkui/lOOBmVxyXG4gICAgICovXHJcbiAgICBhc3luYyBzZXRJbnB1dE9yZ2FuaXphdGlvbihpbnB1dFZhbHVlIDpzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IGJvb2xlYW4+e1xyXG5cclxuICAgICAgICAvL+e1hOe5lOWQjeOCkuagvOe0jeOBmeOCi+WkieaVsFxyXG4gICAgICAgIGxldCBvcmdhbml6YXRpb25OYW1lO1xyXG4gICAgICAgIGNvbnN0IG9yZ2FuaXphdGlvbnNJbmZvQ29sdW1uSW5kZXg9MDtcclxuXHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAvL0FQSeOBp+e1hOe5lOaDheWgseOCkuWPluW+l+OBmeOCi1xyXG4gICAgICAgICAgICBjb25zdCByZXNwID1hd2FpdCBraW50b25lLmFwaShraW50b25lLmFwaS51cmwoJy92MS9vcmdhbml6YXRpb25zLmpzb24nLCB0cnVlKSwgJ0dFVCcsIHtjb2RlczpbaW5wdXRWYWx1ZSBdfSlcclxuXHJcbiAgICAgICAgICAgIC8v5YWl5Yqb44GV44KM44Gf57WE57mU44Kz44O844OJ44GM57WE57mU5oOF5aCx44Gr55m76Yyy44GV44KM44Gm44GE44KL5aC05ZCI44CB44Gd44Gu57WE57mU5ZCN44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcC5vcmdhbml6YXRpb25zW29yZ2FuaXphdGlvbnNJbmZvQ29sdW1uSW5kZXhdLmNvZGUgPT09IGlucHV0VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcmdhbml6YXRpb25OYW1lPXJlc3Aub3JnYW5pemF0aW9uc1tvcmdhbml6YXRpb25zSW5mb0NvbHVtbkluZGV4XS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy/ntYTnuZTlkI3jgYzlj5blvpfjgafjgY3jgZ/loLTlkIjjgIHntYTnuZTjgrPjg7zjg4njgajntYTnuZTlkI3jgpLjg5XjgqPjg7zjg6vjg4njgavjgrvjg4Pjg4jjgZnjgotcclxuICAgICAgICAgICAgaWYob3JnYW5pemF0aW9uTmFtZSA9PT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWNhdGNoe1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3JnYW5pemF0aW9uTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOWFpeWKm+WApOOBjOODleOCo+ODvOODq+ODieOCv+OCpOODlyjjgrDjg6vjg7zjg5fpgbjmip4p44Gn44CB44Kw44Or44O844OX5oOF5aCx44Gr5a2Y5Zyo44GZ44KL5YCk44GL44OB44Kn44OD44Kv44GZ44KL6Zai5pWwXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRWYWx1ZSAtIOaMv+WFpeOBmeOCi+WApFxyXG4gICAgICogQHJldHVybiB7c3RyaW5nIHwgYm9vbGVhbn0g5YWl5Yqb5YCk44GM55m76Yyy44GV44KM44Gm44GE44KL44Kw44Or44O844OX5oOF5aCx44GL44KJ6KaL44Gk44GL44Gj44Gf5aC05ZCI44CBdHJ1ZeOCkui/lOOBl+OAgeimi+OBpOOBi+OCieOBquOBi+OBo+OBn+WgtOWQiOOAgWZhbHNl44KS6L+U44GZXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNldElucHV0R3JvdXAoaW5wdXRWYWx1ZSA6c3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBib29sZWFuPntcclxuXHJcbiAgICAgICAgLy/jgrDjg6vjg7zjg5flkI3jgpLmoLzntI3jgZnjgovlpInmlbBcclxuICAgICAgICBsZXQgZ3JvdXBzTmFtZTtcclxuICAgICAgICBjb25zdCBncm91cHNJbmZvQ29sdW1uSW5kZXg9MDtcclxuXHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAvL0FQSeOBp+OCsOODq+ODvOODl+aDheWgseOCkuWPluW+l+OBmeOCi1xyXG4gICAgICAgICAgICBjb25zdCByZXNwID1hd2FpdCBraW50b25lLmFwaShraW50b25lLmFwaS51cmwoJy92MS9ncm91cHMuanNvbicsIHRydWUpLCAnR0VUJywge2NvZGVzOltpbnB1dFZhbHVlIF19KVxyXG5cclxuICAgICAgICAgICAgLy/lhaXlipvjgZXjgozjgZ/jgrDjg6vjg7zjg5fjgrPjg7zjg4njgYzjgrDjg6vjg7zjg5fmg4XloLHjgavnmbvpjLLjgZXjgozjgabjgYTjgovloLTlkIjjgIHjgZ3jga7jgrDjg6vjg7zjg5flkI3jgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgaWYgKHJlc3AuZ3JvdXBzW2dyb3Vwc0luZm9Db2x1bW5JbmRleF0uY29kZSA9PT0gaW5wdXRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBzTmFtZT1yZXNwLmdyb3Vwc1tncm91cHNJbmZvQ29sdW1uSW5kZXhdLm5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8v44Kw44Or44O844OX5ZCN44GM5Y+W5b6X44Gn44GN44Gf5aC05ZCI44CB44Kw44Or44O844OX44Kz44O844OJ44Go44Kw44Or44O844OX5ZCN44KS44OV44Kj44O844Or44OJ44Gr44K744OD44OI44GZ44KLXHJcbiAgICAgICAgICAgIGlmKGdyb3Vwc05hbWUgPT09IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1jYXRjaHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGdyb3Vwc05hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDjg6bjg7zjgrbjg7zjgqrjg5bjgrjjgqfjgq/jg4jjgpLmjL/lhaXjgZnjgovloLTlkIjjgIHmjL/lhaXlhYjjg5XjgqPjg7zjg6vjg4njgavjgojjgaPjgabjgIHpganliIfjgarjgqrjg5bjgrjjgqfjgq/jg4jjga7lgKTjgpLlj5blvpfjgZfjgIHjgrvjg4Pjg4jjgZnjgotcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFZhbHVlIC3lhaXlipvjgZXjgozjgZ/lgKRcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3RWYWx1ZSAt44Kq44OW44K444Kn44Kv44OI5aSJ5pWwXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGRUeXBlIC3mjL/lhaXlhYjjg5XjgqPjg7zjg6vjg4njgr/jgqTjg5dcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZENvZGUgLeaMv+WFpeWFiOODleOCo+ODvOODq+ODieOCv+OCpOODl1xyXG4gICAgICogQHJldHVybiB7c3RyaW5nfSAt5oy/5YWl5YWI44OV44Kj44O844Or44OJ44Gr44KI44Gj44Gm44CB44Ot44Kw44Kk44Oz44Om44O844K244O844Kq44OW44K444Kn44Kv44OI44Gu5L2V44Gu5YCk44KS6L+U44GZ44GL44CB5aSJ44KP44KLXHJcbiAgICAgKi9cclxuICAgIHNldFZhbHVlT2ZVc2VyT2JqZWN0KGlucHV0VmFsdWUgOmFueSxvYmplY3RWYWx1ZSA6YW55LGZpZWxkVHlwZSA6IGFueSxmaWVsZENvZGUgOiBhbnkpOiBhbnl7XHJcblxyXG4gICAgICAgIC8v5aSJ5pWw44Gu5YCkXHJcbiAgICAgICAgbGV0IHZhcmlhYmxlVmFsdWUgPSBbXTtcclxuXHJcbiAgICAgICAgLy/jg6bjg7zjgrbjg7zjgqrjg5bjgrjjgqfjgq/jg4jmjL/lhaXjgafjgY3jgarjgYTjg5XjgqPjg7zjg6vjg4nvvIjml6Xku5jjgIHmlbDlgKTvvInjgpLpgbjmip7jgZfjgabjgYTjgovloLTlkIjjgIHjgqjjg6njg7zjgpLlh7rjgZlcclxuICAgICAgICBpZihmaWVsZFR5cGUgPT09IFwiTlVNQkVSXCIgfHwgZmllbGRUeXBlID09PSBcIkRBVEVcIiB8fCBmaWVsZFR5cGUgPT09IFwiREFURVRJTUVcIiB8fCBmaWVsZFR5cGUgPT09IFwiVElNRVwiKXtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njgavjga/jgIHjg6bjg7zjgrbjg7zmg4XloLHjgpLmjL/lhaXjgafjgY3jgb7jgZvjgpPjgILlh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL+ODpuODvOOCtuODvOmBuOaKnuODleOCo+ODvOODq+ODieOBq+aMv+WFpeaZguOAgeODpuODvOOCtuODvOOCquODluOCuOOCp+OCr+ODiOOBrmNvZGXjgpLku6PlhaXjgZnjgotcclxuICAgICAgICBpZihmaWVsZFR5cGUgPT09ICdVU0VSX1NFTEVDVCcpe1xyXG4gICAgICAgICAgICAvL+WkieaVsOOBruWApOWPluW+l1xyXG4gICAgICAgICAgICBpZighQXJyYXkuaXNBcnJheShvYmplY3RWYWx1ZSkpe1xyXG4gICAgICAgICAgICAgICAgdmFyaWFibGVWYWx1ZS5wdXNoKG9iamVjdFZhbHVlLmNvZGUpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wO2k8b2JqZWN0VmFsdWUubGVuZ3RoO2krKyl7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVWYWx1ZS5wdXNoKG9iamVjdFZhbHVlW2ldLmNvZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAvL+ODpuODvOOCtuODvOmBuOaKnuODleOCo+ODvOODq+ODieS7peWkluOBq+aMv+WFpeaZguOAgeODpuODvOOCtuODvOOCquODluOCuOOCp+OCr+ODiOOBruWApOOBruaMh+WumuOBjOOBguOCjOOBsOOAgeOBneOBruWApOOCkuS7o+WFpeOBmeOCi1xyXG4gICAgICAgICAgICBpZihpbnB1dFZhbHVlLmluY2x1ZGVzKCcubmFtZScpIHx8IGlucHV0VmFsdWUuaW5jbHVkZXMoJy5lbWFpbCcpIHx8IGlucHV0VmFsdWUuaW5jbHVkZXMoJy5lbXBsb3llZU51bWJlcicpXHJcbiAgICAgICAgICAgICAgICB8fCBpbnB1dFZhbHVlLmluY2x1ZGVzKCcuZXh0ZW5zaW9uTnVtYmVyJykgfHwgaW5wdXRWYWx1ZS5pbmNsdWRlcygnLmlkJykgfHwgaW5wdXRWYWx1ZS5pbmNsdWRlcygnLmlzR3Vlc3QnKXx8IGlucHV0VmFsdWUuaW5jbHVkZXMoJy50aW1lem9uZScpXHJcbiAgICAgICAgICAgICAgICB8fCBpbnB1dFZhbHVlLmluY2x1ZGVzKCcubGFuZ3VhZ2UnKSB8fCBpbnB1dFZhbHVlLmluY2x1ZGVzKCcubW9iaWxlUGhvbmUnKSB8fCBpbnB1dFZhbHVlLmluY2x1ZGVzKCcucGhvbmUnKSB8fCBpbnB1dFZhbHVlLmluY2x1ZGVzKCcudXJsJykpe1xyXG5cclxuICAgICAgICAgICAgICAgIC8v5YCk44KS5oy/5YWl44GZ44KL5aSJ5pWw5ZCN5Y+W5b6XXHJcbiAgICAgICAgICAgICAgICBsZXQgb2JqZWN0UHJvcGVydHlOYW1lID0gaW5wdXRWYWx1ZS5zcGxpdCgnLicpWzFdO1xyXG4gICAgICAgICAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkob2JqZWN0VmFsdWUpKXtcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZVZhbHVlLnB1c2gob2JqZWN0VmFsdWVbb2JqZWN0UHJvcGVydHlOYW1lXSk7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGk9MDtpPG9iamVjdFZhbHVlLmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZVZhbHVlLnB1c2gob2JqZWN0VmFsdWVbaV1bb2JqZWN0UHJvcGVydHlOYW1lXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy/jg6bjg7zjgrbjg7zpgbjmip7jg5XjgqPjg7zjg6vjg4nku6XlpJbjgavmjL/lhaXmmYLjgIHjg6bjg7zjgrbjg7zjgqrjg5bjgrjjgqfjgq/jg4jjga7lgKTjga7mjIflrprjgYzjgarjgZHjgozjgbDjgIFjb2Rl44KS5Luj5YWl44GZ44KLXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkob2JqZWN0VmFsdWUpKXtcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZVZhbHVlLnB1c2gob2JqZWN0VmFsdWUuY29kZSk7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGk9MDtpPG9iamVjdFZhbHVlLmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZVZhbHVlLnB1c2gob2JqZWN0VmFsdWVbaV0uY29kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih2YXJpYWJsZVZhbHVlID09PSB1bmRlZmluZWQpe1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuODleOCo+ODvOODq+ODieOBq+WFpeOCjOOCiOOBhuOBqOOBl+OBn+WkieaVsOOBr+OAgeeEoeWKueOBquWFpeWKm+W9ouW8j+OBp+OBmeOAglwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB2YXJpYWJsZVZhbHVlO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDjgqLjgq/jgrfjg6fjg7Pjga7lrp/ooYzjgpLlkbzjgbPlh7rjgZlcclxuICAgICAqIEBwYXJhbSBhY3Rpb25Ob2RlXHJcbiAgICAgKiBAcGFyYW0gZXZlbnRcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHByb2Nlc3MoYWN0aW9uTm9kZTpJQWN0aW9uTm9kZSxldmVudDphbnksY29udGV4dDpJQ29udGV4dCk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcblxyXG4gICAgICAgIGxldCByZXN1bHQ9e1xyXG4gICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDpmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAvL+WxnuaAp+ioreWumuOCkuWPluW+l+OBmeOCi1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvblByb3BzID0gYWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgaWYgKCEoJ2ZpZWxkJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCd2YWx1ZScgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZmllbGRDb2x1bW5JbmRleD0xO1xyXG5cclxuICAgICAgICAgICAgLy/jg5fjg63jg5Hjg4bjgqPjgafpgbjmip7jgZXjgozjgZ/jg5XjgqPjg7zjg6vjg4lcclxuICAgICAgICAgICAgY29uc3QgZmllbGQ9dGhpcy5hY3Rpb25Qcm9wc1tmaWVsZENvbHVtbkluZGV4XS5wcm9wcy5tb2RlbFZhbHVlLnR5cGU7XHJcblxyXG4gICAgICAgICAgICAvL+ODl+ODreODkeODhuOCo+OBruWApOOCkuaMv+WFpeOBmeOCi+ODleOCo+ODvOODq+ODieOBjOacqumBuOaKnuOBruWgtOWQiOOAgeS+i+WkluOCkueZuueUn+OBleOBm+OCi1xyXG4gICAgICAgICAgICBpZihmaWVsZCA9PT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjgafjgIHlgKTjgpLmjL/lhaXjgZnjgovjg5XjgqPjg7zjg6vjg4njgYzmjIflrprjgZXjgozjgabjgYTjgarjgYvjgaPjgZ/jgZ/jgoHjgIHlh6bnkIbjgYzkuK3mlq3jgZXjgozjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8v44OX44Ot44OR44OG44Kj44Gu5YCk44KS5oy/5YWl44GZ44KL44OV44Kj44O844Or44OJ44GM6Z2e5a++5b+c44OV44Kj44O844Or44OJ44Gu5aC05ZCI44CB5L6L5aSW44KS55m655Sf44GV44Gb44KLXHJcbiAgICAgICAgICAgIC8v5re75LuY44OV44Kh44Kk44Or44O744OG44O844OW44Or44O744Kr44OG44K044Oq44O844O744K544OG44O844K/44K544O75L2c5oiQ6ICF44O75pu05paw6ICF44O75L2c5qWt6ICF44O744Oq44OT44K444On44Oz55Wq5Y+344O744Os44Kz44O844OJ55Wq5Y+344O744Os44Kz44O844OJSUTjg7voqIjnrpfjg7vkvZzmiJDml6XmmYLjg7vmm7TmlrDml6XmmYLjg5XjgqPjg7zjg6vjg4njgYzpgbjmip7jgZXjgozjgabjgYTjgovloLTlkIjjgIHkvovlpJbjgpLnmbrnlJ/jgZXjgZvjgotcclxuICAgICAgICAgICAgaWYoZmllbGQgPT09IFwiRklMRVwiIHx8IGZpZWxkID09PSBcIlNVQlRBQkxFXCIgfHwgZmllbGQgPT09IFwiQ0FURUdPUllcIiB8fCBmaWVsZCA9PT0gXCJTVEFUVVNcIlxyXG4gICAgICAgICAgICAgICAgICAgIHx8IGZpZWxkID09PSBcIlNUQVRVU19BU1NJR05FRVwiIHx8IGZpZWxkID09PSBcIkNSRUFUT1JcIiB8fCBmaWVsZCA9PT0gXCJNT0RJRklFUlwiIHx8IGZpZWxkID09PSBcIl9fUkVWSVNJT05fX1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IGZpZWxkID09PSBcIlJFQ09SRF9OVU1CRVJcInx8IGZpZWxkID09PSBcIl9fSURfX1wiIHx8IGZpZWxkID09PVwiQ0FMQ1wiIHx8IGZpZWxkID09PSBcIkNSRUFURURfVElNRVwiIHx8IGZpZWxkID09PSBcIlVQREFURURfVElNRVwiICl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjgafjgIHpgbjmip7jgZXjgozjgZ/jg5XjgqPjg7zjg6vjg4njga/jgIHlgKTjgpLmjL/lhaXjgZnjgovjgrPjg7Pjg53jg7zjg43jg7Pjg4jjgafjga/pnZ7lr77lv5zjga7jg5XjgqPjg7zjg6vjg4njga7jgZ/jgoHjgIHlh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8v5pei5a6a44Gu44OX44Ot44OR44OG44Kj44Gu44Kk44Oz44K/44O844OV44Kn44O844K544G45aSJ5o+b44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElJbnNlcnRWYWx1ZVByb3BzO1xyXG5cclxuICAgICAgICAgICAgLy/jg5fjg63jg5Hjg4bjgqPjga7mjL/lhaXjgZnjgovlgKTjgpLlj5blvpdcclxuICAgICAgICAgICAgbGV0IGZpZWxkVmFsdWUgPSB0aGlzLnByb3BzLnZhbHVlO1xyXG4gICAgICAgICAgICAvL+ODleOCo+ODvOODq+ODieOBrueorumhnuOCkuWPluW+l1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZFR5cGUgPSB0aGlzLnByb3BzLmZpZWxkLnR5cGU7XHJcbiAgICAgICAgICAgIC8v44OV44Kj44O844Or44OJ44GM5b+F6aCI6aCF55uu44Gq44Gu44GL5Y+W5b6XXHJcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkUmVxdWlyZWQ9dGhpcy5wcm9wcy5maWVsZC5yZXF1aXJlZDtcclxuICAgICAgICAgICAgLy/mjL/lhaXjgZnjgovjg5XjgqPjg7zjg6vjg4njga7jgrPjg7zjg4njgpLlj5blvpdcclxuICAgICAgICAgICAgY29uc3QgZmllbGRDb2RlPXRoaXMucHJvcHMuZmllbGQuY29kZTtcclxuICAgICAgICAgICAgLy/mjL/lhaXjgZnjgovlgKTjga7lvaLlvI/vvIjmiYvlhaXlipvjgYvlpInmlbDvvInjgpLlj5blvpdcclxuICAgICAgICAgICAgY29uc3QgaW5zZXJ0VmFsdWVUeXBlPXRoaXMucHJvcHMuc2hvdztcclxuICAgICAgICAgICAgLy/jg6njgrjjgqrjg5zjgr/jg7Pjg7vjg4Hjgqfjg4Pjgq/jg5zjg4Pjgq/jgrnjg7vopIfmlbDpgbjmip7jg7vjg4njg63jg4Pjg5fjg4Djgqbjg7Pjga7pgbjmip7ogqLjgpLlj5blvpdcclxuICAgICAgICAgICAgbGV0IGZpZWxkT3B0aW9ucyA9dGhpcy5wcm9wcy5maWVsZC5vcHRpb25zO1xyXG4gICAgICAgICAgICAvL+WkieaVsOOBruWApOOCkuagvOe0jeOBmeOCi1xyXG4gICAgICAgICAgICBsZXQgdmFyaWFibGVWYWx1ZSA6YW55O1xyXG4gICAgICAgICAgICAvL+aMv+WFpeOBmeOCi+WApOOCkuagvOe0jeOBmeOCi1xyXG4gICAgICAgICAgICBsZXQgZmllbGRWYWx1ZUFycmF5ID0gW107XHJcbiAgICAgICAgICAgIGxldCBub3RJbnB1dEVycm9yO1xyXG4gICAgICAgICAgICAvL2NvbnRleHTjgavlrZjlnKjjgZnjgovlpInmlbDlkI3jgpLmoLzntI3jgZnjgotcclxuICAgICAgICAgICAgbGV0IGNvbnRleHRIYXNWYXJpYWJsZXNOYW1lcztcclxuXHJcbiAgICAgICAgICAgIC8v5aSJ5pWw44Gu5aC05ZCI44CB5YCk44GM5Y+W5b6X44Gn44GN44KL44GL44OB44Kn44OD44KvXHJcbiAgICAgICAgICAgIGlmKGluc2VydFZhbHVlVHlwZSA9PT0gXCLlpInmlbBcIil7XHJcblxyXG4gICAgICAgICAgICAgICAgLy/lpInmlbDjga7lgKTjgpLlkbzjgbPlh7rjgZfjgabku6PlhaXjgZnjgotcclxuICAgICAgICAgICAgICAgIGNvbnN0IGdldENvbnRleHRWYXJCeVBhdGggPSAob2JqOiBhbnksIHBhdGg6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXRoLnNwbGl0KFwiLlwiKS5yZWR1Y2UoKG8sIGspID0+IChvIHx8IHt9KVtrXSwgb2JqKTtcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgLy9jb250ZXh044Gr5a2Y5Zyo44GZ44KL5aSJ5pWw5ZCN44KS5YWo44Gm5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgICAgICBjb250ZXh0SGFzVmFyaWFibGVzTmFtZXMgPSBPYmplY3Qua2V5cyhjb250ZXh0LnZhcmlhYmxlcyk7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnRleHTjgavlpInmlbDjgYwx44Gk44KC5a2Y5Zyo44GX44Gq44GE5aC05ZCI44CB44Ko44Op44O844KS5Ye644GZXHJcbiAgICAgICAgICAgICAgICBpZihjb250ZXh0SGFzVmFyaWFibGVzTmFtZXMubGVuZ3RoID09PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuODleOCo+ODvOODq+ODieOBq+aMv+WFpeOBl+OCiOOBhuOBqOOBl+OBn+WkieaVsOOBr+OAgeWtmOWcqOOBl+OBquOBhOOBn+OCgeOAgeWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaW5wdXRWYXJpYWJsZXNOYW1lO1xyXG4gICAgICAgICAgICAgICAgLy/lhaXlipvlgKTjgYzjgqrjg5bjgrjjgqfjgq/jg4jlpInmlbDjga7lpInmlbDlkI3jgafjgYLjgorjgIHjg5fjg63jg5Hjg4bjgqPjga7mjIflrprjgYzjgYLjgovloLTlkIjjgIHlpInmlbDlkI3jga7jgb/lj5blvpdcclxuICAgICAgICAgICAgICAgIGlmIChmaWVsZFZhbHVlLmluY2x1ZGVzKCcuJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAnLifjgojjgorliY3jga7mloflrZfjgpLmir3lh7pcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFZhcmlhYmxlc05hbWUgPSBmaWVsZFZhbHVlLnNwbGl0KCcuJylbMF07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICcuJ+OBjOWQq+OBvuOCjOOBpuOBhOOBquOBhOWgtOWQiOOAgeOBneOBruOBvuOBvui/lOOBmVxyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0VmFyaWFibGVzTmFtZSA9IGZpZWxkVmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGlucHV0VmFyaWFibGVzRXhpc3Q7XHJcbiAgICAgICAgICAgICAgICAvL+WFpeWKm+OBleOCjOOBn+WkieaVsOWQjeOBjOOAgWNvbnRleHTjga7lpInmlbDjgavlrZjlnKjjgZnjgovloLTlkIjjgIFpbnB1dFZhcmlhYmxlc0V4aXN044GrdHJ1ZeOBq+S7o+WFpeOBmeOCi1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBpPTA7aTwgY29udGV4dEhhc1ZhcmlhYmxlc05hbWVzLmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGlucHV0VmFyaWFibGVzTmFtZSA9PT0gY29udGV4dEhhc1ZhcmlhYmxlc05hbWVzW2ldKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYXJpYWJsZXNFeGlzdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8v5YWl5Yqb44GV44KM44Gf5aSJ5pWw5ZCN44GM44CBY29udGV4dOOBruWkieaVsOOBq+WtmOWcqOOBl+OBquOBhOWgtOWQiOOAgeOCqOODqeODvOOCkuihqOekuuOBmeOCi1xyXG4gICAgICAgICAgICAgICAgaWYoIWlucHV0VmFyaWFibGVzRXhpc3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIuOAjFwiK2ZpZWxkQ29kZStcIuOAjVwiK1wi44OV44Kj44O844Or44OJ44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gf5aSJ5pWw44Gv44CB5a2Y5Zyo44GX44Gq44GE44Gf44KB44CB5Yem55CG44KS5Lit5pat44GX44G+44GX44Gf44CCXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGlucHV0VmFyaWFibGVzTmFtZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgLy/lhaXlipvjgZXjgozjgZ/lpInmlbDlkI3jga7lgKTjgpLlj5blvpdcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZVZhbHVlID0gZ2V0Q29udGV4dFZhckJ5UGF0aChjb250ZXh0LnZhcmlhYmxlcyxpbnB1dFZhcmlhYmxlc05hbWUpXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy/mloflrZfliJflnovjga7jg5XjgqPjg7zjg6vjg4nku6XlpJbjgavjgIHnqbrnmb3mloflrZfjga7lpInmlbDjga7lgKTjgpLmjL/lhaXjgZnjgovloLTlkIjjgIHjgqjjg6njg7zjgpLlh7rjgZlcclxuICAgICAgICAgICAgICAgIGlmKHZhcmlhYmxlVmFsdWUgPT09IFwiXCIgfHwgdmFyaWFibGVWYWx1ZSA9PT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZmllbGRUeXBlID09PSBcIk5VTUJFUlwiIHx8IGZpZWxkVHlwZSA9PT0gXCJEQVRFXCIgfHwgZmllbGRUeXBlID09PSBcIkRBVEVUSU1FXCIgfHwgZmllbGRUeXBlID09PSBcIlRJTUVcIiB8fCBmaWVsZFR5cGUgPT09IFwiVVNFUl9TRUxFQ1RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCBmaWVsZFR5cGUgPT09IFwiT1JHQU5JWkFUSU9OX1NFTEVDVFwiIHx8IGZpZWxkVHlwZSA9PT0gXCJHUk9VUF9TRUxFQ1RcIiB8fCBmaWVsZFR5cGUgPT09IFwiUkFESU9fQlVUVE9OXCIgfHwgZmllbGRUeXBlID09PSBcIkRST1BfRE9XTlwiIHx8IGZpZWxkVHlwZSA9PT0gXCJDSEVDS19CT1hcIiB8fCBmaWVsZFR5cGUgPT09IFwiTVVMVElfU0VMRUNUXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuODleOCo+ODvOODq+ODieOBq+aMv+WFpeOBl+OCiOOBhuOBqOOBl+OBn+WkieaVsOOBr+OAgeWApOOBjG51bGzjga7jgZ/jgoHjgIHlh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL+WkieaVsOOBjOOCquODluOCuOOCp+OCr+ODiOOBruWgtOWQiOOAgeODl+ODreODkeODhuOCo+OCkuWPluW+l+OBl+OAgeS9leOBruOCquODluOCuOOCp+OCr+ODiOOBi+WIpOaWreOBmeOCi1xyXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIHZhcmlhYmxlVmFsdWUgPT09ICdvYmplY3QnKXtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb2JqZWN0UHJvcGVydGllcz1bXVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZih2YXJpYWJsZVZhbHVlLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RQcm9wZXJ0aWVzPU9iamVjdC5rZXlzKHZhcmlhYmxlVmFsdWVbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXModmFyaWFibGVWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyjjg63jgrDjgqTjg7Pjg6bjg7zjgrbjg7zjg7vlgKTlj5blvpfjga7jgrPjg7Pjg53jg7zjg43jg7Pjg4jjgYvjgonjga4p44Om44O844K244O844Kq44OW44K444Kn44Kv44OI44KS5oy/5YWl5pmC44CB5oy/5YWl5YWI44OV44Kj44O844Or44OJ44Gr44KI44Gj44Gm44CB5YCk44KS5oyH5a6a44GZ44KLXHJcbiAgICAgICAgICAgICAgICAgICAgaWYob2JqZWN0UHJvcGVydGllcy5pbmNsdWRlcygnY29kZScpICYmIG9iamVjdFByb3BlcnRpZXMuaW5jbHVkZXMoJ25hbWUnKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlVmFsdWU9dGhpcy5zZXRWYWx1ZU9mVXNlck9iamVjdChmaWVsZFZhbHVlLHZhcmlhYmxlVmFsdWUsZmllbGRUeXBlLGZpZWxkQ29kZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+ODpuODvOOCtuODvOOCquODluOCuOOCp+OCr+ODiOOBi+OCieWPluW+l+OBl+OBn+WApOOCkuOAgWZpZWxkVmFsdWVBcnJheeOBq+S7o+WFpVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhcmlhYmxlVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsdWVBcnJheS5wdXNoKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIC8v44Kq44OW44K444Kn44Kv44OI5aSJ5pWw44Gn44Gq44GE5aC05ZCI44CB5aSJ5pWw44KSZmllbGRWYWx1ZUFycmF544Gr5Luj5YWlXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVWYWx1ZSA9IGNvbnRleHQudmFyaWFibGVzW2ZpZWxkVmFsdWVdXHJcbiAgICAgICAgICAgICAgICAgICAgZmllbGRWYWx1ZUFycmF5WzBdID0gdmFyaWFibGVWYWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvL+WkieaVsOOBjGZpZWxkVmFsdWVBcnJheeOBq+S7o+WFpeOBp+OBjeOBquOBi+OBo+OBn+WgtOWQiOOAgeOCqOODqeODvOOCkuWHuuOBmVxyXG4gICAgICAgICAgICAgICAgaWYoZmllbGRWYWx1ZUFycmF5ID09PSB1bmRlZmluZWQpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIuOAjFwiK2ZpZWxkQ29kZStcIuOAjVwiK1wi44OV44Kj44O844Or44OJ44Gr5YWl44KM44KI44GG44Go44GX44Gf5aSJ5pWw44Gv44CB54Sh5Yq544Gq5YWl5Yqb5b2i5byP44Gn44GZ44CCXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8v5aSJ5pWw44Gu5YCk44Gr44Ko44Op44O877yI56m65paH5a2X44O756m655m95paH5a2X44Gu5re35YWl77yJ44GM44Gq44GE44GT44Go44KS44OB44Kn44OD44Kv44GZ44KLXHJcbiAgICAgICAgICAgICAgICBub3RJbnB1dEVycm9yPXRoaXMuY2hlY2tWYXJpYWJsZVZhbHVlQmxhbmsoZmllbGRUeXBlLGZpZWxkVmFsdWVBcnJheSxmaWVsZENvZGUsZmllbGRSZXF1aXJlZCxldmVudCk7XHJcblxyXG4gICAgICAgICAgICAvL+aJi+WFpeWKm+OBruWApOOCkuaMv+WFpeOBmeOCi+WgtOWQiOOAgeaMv+WFpeOBmeOCi+WApOOCkmZpZWxkQXJyYXnjgavku6PlhaVcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBmaWVsZFZhbHVlQXJyYXkucHVzaChmaWVsZFZhbHVlKTtcclxuICAgICAgICAgICAgICAgIC8v5YWl5Yqb44Ko44Op44O877yI56m655m95paH5a2X44Gu5re35YWl77yJ44GM44Gq44GE44GT44Go44KS44OB44Kn44OD44KvXHJcbiAgICAgICAgICAgICAgICBub3RJbnB1dEVycm9yPXRoaXMuY2hlY2tJbnB1dFZhbHVlQmxhbmsoZmllbGRUeXBlLGZpZWxkVmFsdWUsZmllbGRDb2RlLGZpZWxkUmVxdWlyZWQsZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL+W9ouW8j+WkieaPm+OAgeWei+WkieaPm+OBl+OBn+WApOOCkuagvOe0jeOBmeOCi+WkieaVsFxyXG4gICAgICAgICAgICBsZXQgY29ycmVjdEZvcm1hdHRlZFZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAvL+W9ouW8j+WkieaPm+OAgeWei+WkieaPm+OBl+OBn+WApOOCkuagvOe0jeOBmeOCi+mFjeWIl1xyXG4gICAgICAgICAgICBsZXQgY29ycmVjdFZhbHVlcyA6YW55W10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgIC8v5p2h5Lu25byP44Gu57WQ5p6c44GMdHJ1ZeOAgeWFpeWKm+OCqOODqeODvO+8iOepuueZveaWh+Wtl+OBrua3t+WFpe+8ieOBjOOBquOBhOWgtOWQiOOAgeaMv+WFpeOBmeOCi+WApOOCkuODleOCo+ODvOODq+ODieOCv+OCpOODl+WIpeOBq+ODgeOCp+ODg+OCr+OBmeOCi1xyXG4gICAgICAgICAgICBpZihub3RJbnB1dEVycm9yKXtcclxuXHJcbiAgICAgICAgICAgICAgICAvL+aWh+Wtl+WIl+Wei+OBruODleOCo+ODvOODq+ODieOBq+aMv+WFpeOBl+OCiOOBhuOBqOOBl+OBpuOBhOOCi+WApOOBjOmBqeWIh+OBruWgtOWQiOOAgWNvcnJlY3RGb3JtYXR0ZWRWYWx1ZeOBq+S7o+WFpeOBmeOCi1xyXG4gICAgICAgICAgICAgICAgaWYoZmllbGRUeXBlID09PSBcIlNJTkdMRV9MSU5FX1RFWFRcIiB8fCBmaWVsZFR5cGUgPT09IFwiTVVMVElfTElORV9URVhUXCIgfHwgZmllbGRUeXBlID09PSBcIlJJQ0hfVEVYVFwiIHx8IGZpZWxkVHlwZSA9PT0gXCJMSU5LXCIgKXtcclxuICAgICAgICAgICAgICAgICAgICBjb3JyZWN0Rm9ybWF0dGVkVmFsdWUgPSBmaWVsZFZhbHVlQXJyYXkuam9pbignLCcpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8v5pWw5YCk5Z6L44Gu44OV44Kj44O844Or44OJ44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gm44GE44KL5YCk44GM6YGp5YiH44Gu5aC05ZCI44CB5pWw5YCk5Z6L44Gr5Z6L5aSJ5o+b44GX44GmY29ycmVjdEZvcm1hdHRlZFZhbHVl44Gr5Luj5YWl44GZ44KLXHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihmaWVsZFR5cGUgPT09IFwiTlVNQkVSXCIgKXtcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmNoZWNrSW5wdXROdW1iZXIoZmllbGRWYWx1ZUFycmF5WzBdLGZpZWxkQ29kZSxldmVudCkpey8v5YWl5Yqb5YCk44OB44Kn44OD44KvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RGb3JtYXR0ZWRWYWx1ZSA9IE51bWJlcihmaWVsZFZhbHVlQXJyYXlbMF0pOy8v5Z6L5aSJ5o+bXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8v5pel5LuY44O75pel5pmC5Z6L44Gu44OV44Kj44O844Or44OJ44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gm44GE44KL5YCk44GM6YGp5YiH44Gu5aC05ZCI44CB5oyH5a6a44Gu5pel5LuY44O75pel5pmC44Gr5b2i5byP5aSJ5o+b44GX44GmY29ycmVjdEZvcm1hdHRlZFZhbHVl44Gr5Luj5YWl44GZ44KLXHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihmaWVsZFR5cGUgPT09IFwiREFURVwiIHx8IGZpZWxkVHlwZSA9PT0gXCJEQVRFVElNRVwiICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5jaGVja0lucHV0RGF0ZShmaWVsZFZhbHVlQXJyYXlbMF0sZmllbGRDb2RlLGV2ZW50KSl7Ly/lhaXlipvlgKTjg4Hjgqfjg4Pjgq9cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZvcm1hdHRlZERhdGUgPSB0aGlzLmNoYW5nZURhdGVGb3JtYXQoZmllbGRWYWx1ZUFycmF5WzBdLGZpZWxkVHlwZSxmaWVsZENvZGUsZXZlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZvcm1hdHRlZERhdGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVjdEZvcm1hdHRlZFZhbHVlID0gZm9ybWF0dGVkRGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8v5pmC5Yi744OV44Kj44O844Or44OJ44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gm44GE44KL5YCk44GM6YGp5YiH44Gu5aC05ZCI44CBY29ycmVjdEZvcm1hdHRlZFZhbHVl44Gr5Luj5YWl44GZ44KLXHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihmaWVsZFR5cGUgPT09IFwiVElNRVwiKXtcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmNoZWNrSW5wdXRUaW1lKGZpZWxkVmFsdWVBcnJheVswXSxmaWVsZENvZGUsZXZlbnQpKXsvL+WFpeWKm+WApOODgeOCp+ODg+OCr1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0Rm9ybWF0dGVkVmFsdWUgPSBmaWVsZFZhbHVlQXJyYXlbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8v44Op44K444Kq44Oc44K/44Oz44O744OJ44Ot44OD44OX44OA44Km44Oz44Gu44OV44Kj44O844Or44OJ44Gu6YG45oqe6IKi44Go5YWl5Yqb5YCk44GM5LiA6Ie044GX44Gf5aC05ZCI44CBY29ycmVjdEZvcm1hdHRlZFZhbHVl44Gr5Luj5YWl44GZ44KLXHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihmaWVsZFR5cGUgPT09IFwiUkFESU9fQlVUVE9OXCIgfHwgZmllbGRUeXBlID09PSBcIkRST1BfRE9XTlwiKXtcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmNoZWNrSW5wdXRPcHRpb24oZmllbGRWYWx1ZUFycmF5WzBdLGZpZWxkT3B0aW9ucyxmaWVsZENvZGUsZXZlbnQpKXsvL+WFpeWKm+WApOODgeOCp+ODg+OCr1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0Rm9ybWF0dGVkVmFsdWUgPSBmaWVsZFZhbHVlQXJyYXlbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8v44OB44Kn44OD44Kv44Oc44OD44Kv44K544O76KSH5pWw6YG45oqe44Gu44OV44Kj44O844Or44OJ44Gu6YG45oqe6IKi44Go5YWl5Yqb5YCk44GM5LiA6Ie044GX44Gf5aC05ZCI44CBY29ycmVjdFZhbHVlc+OBrumFjeWIl+OBq+S7o+WFpeOBmeOCi1xyXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoZmllbGRUeXBlID09PSBcIkNIRUNLX0JPWFwiIHx8IGZpZWxkVHlwZSA9PT0gXCJNVUxUSV9TRUxFQ1RcIiApe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuY2hlY2tJbnB1dE9wdGlvbihmaWVsZFZhbHVlQXJyYXlbMF0sZmllbGRPcHRpb25zLGZpZWxkQ29kZSxldmVudCkpey8v5YWl5Yqb5YCk44OB44Kn44OD44KvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RWYWx1ZXNbMF0gPSBmaWVsZFZhbHVlQXJyYXlbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8v44Om44O844K244O85oOF5aCx44OV44Kj44O844OJ44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gf5YCk44GM6YGp5YiH44Gq5aC05ZCI44CBY29ycmVjdFZhbHVlcyjphY3liJcp44Gr5Luj5YWl44GZ44KLXHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihmaWVsZFR5cGUgPT09IFwiVVNFUl9TRUxFQ1RcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgLy/mjL/lhaXjgZnjgovlgKTjgYzjg6bjg7zjgrbjg7zmg4XloLHjgYvjgonopovjgaTjgYvjgozjgbDjgIHjg6bjg7zjgrbjg7zlkI3jgpLmoLzntI1cclxuICAgICAgICAgICAgICAgICAgICBsZXQgdXNlcnNOYW1lPWF3YWl0IHRoaXMuc2V0SW5wdXRVc2VyKGZpZWxkVmFsdWVBcnJheSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8v44Om44O844K244O85ZCN44GM5qC857SN44Gn44GN44Gm44GE44KL5aC05ZCI44CB44Ot44Kw44Kk44Oz5ZCN44Go44Om44O844K244O85ZCN44KSY29ycmVjdFZhbHVlc++8iOmFjeWIl++8ieOBq+S7o+WFpeOBmeOCi1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCF1c2Vyc05hbWUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5yZWNvcmRbZmllbGRDb2RlXVsnZXJyb3InXT1cIuODpuODvOOCtuODvOmBuOaKnuOBq+OAgeaMv+WFpeOBl+OCiOOBhuOBqOOBl+OBn+ODpuODvOOCtuODvOaDheWgseOBr+imi+OBpOOBi+OCiuOBvuOBm+OCk+OBp+OBl+OBn+OAguOAjOWApOOCkuaMv+WFpeOBmeOCi+OAjeOCs+ODs+ODneODvOODjeODs+ODiOOBruWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjg6bjg7zjgrbjg7zpgbjmip7jgavjgIHmjL/lhaXjgZfjgojjgYbjgajjgZfjgZ/jg6bjg7zjgrbjg7zmg4XloLHjga/opovjgaTjgYvjgorjgb7jgZvjgpPjgafjgZfjgZ/jgILjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGluZGV4SW5wdXRVc2VyIGluIGZpZWxkVmFsdWVBcnJheSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RWYWx1ZXMucHVzaCh7IGNvZGU6IGZpZWxkVmFsdWVBcnJheVtpbmRleElucHV0VXNlcl0sIG5hbWU6IHVzZXJzTmFtZVtpbmRleElucHV0VXNlcl0gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8v57WE57mU5oOF5aCx44OV44Kj44O844OJ44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gf5YCk44GM6YGp5YiH44Gq5aC05ZCI44CBY29ycmVjdEZvcm1hdHRlZFZhbHVl44Gr5Luj5YWl44GZ44KLXHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihmaWVsZFR5cGUgPT09IFwiT1JHQU5JWkFUSU9OX1NFTEVDVFwiKXtcclxuICAgICAgICAgICAgICAgICAgICAvL+aMv+WFpeOBmeOCi+WApOOBjOe1hOe5lOaDheWgseOBi+OCieimi+OBpOOBi+OCjOOBsOOAgee1hOe5lOWQjeOCkuagvOe0jVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcmdhbml6YXRpb25zPWF3YWl0IHRoaXMuc2V0SW5wdXRPcmdhbml6YXRpb24oZmllbGRWYWx1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8v57WE57mU5ZCN44GM5qC857SN44Gn44GN44Gm44GE44KL5aC05ZCI44CB57WE57mU44Kz44O844OJ44Go57WE57mU5ZCN44KSY29ycmVjdEZvcm1hdHRlZFZhbHVl44Gr5Luj5YWl44GZ44KLXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIW9yZ2FuaXphdGlvbnMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5yZWNvcmRbZmllbGRDb2RlXVsnZXJyb3InXT1cIue1hOe5lOmBuOaKnuODleOCo+ODvOODq+ODieOBq+OAgeaMv+WFpeOBl+OCiOOBhuOBqOOBl+OBn+e1hOe5lOaDheWgseOBr+imi+OBpOOBi+OCiuOBvuOBm+OCk+OBp+OBl+OBn+OAguOAjOWApOOCkuaMv+WFpeOBmeOCi+OAjeOCs+ODs+ODneODvOODjeODs+ODiOOBruWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLntYTnuZTpgbjmip7jg5XjgqPjg7zjg6vjg4njgavjgIHmjL/lhaXjgZfjgojjgYbjgajjgZfjgZ/ntYTnuZTmg4XloLHjga/opovjgaTjgYvjgorjgb7jgZvjgpPjgafjgZfjgZ/jgILjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RGb3JtYXR0ZWRWYWx1ZT1beyBjb2RlOiBmaWVsZFZhbHVlLCBuYW1lOiBvcmdhbml6YXRpb25zfV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8v44Kw44Or44O844OX5oOF5aCx44OV44Kj44O844OJ44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gf5YCk44GM6YGp5YiH44Gq5aC05ZCI44CBY29ycmVjdEZvcm1hdHRlZFZhbHVl44Gr5Luj5YWl44GZ44KLXHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihmaWVsZFR5cGUgPT09IFwiR1JPVVBfU0VMRUNUXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIC8v5oy/5YWl44GZ44KL5YCk44GM44Kw44Or44O844OX5oOF5aCx44GL44KJ6KaL44Gk44GL44KM44Gw44CB44Kw44Or44O844OX5ZCN44KS5qC857SNXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdyb3Vwcz1hd2FpdCB0aGlzLnNldElucHV0R3JvdXAoZmllbGRWYWx1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8v44Kw44Or44O844OX5ZCN44GM5qC857SN44Gn44GN44Gm44GE44KL5aC05ZCI44CB44Kw44Or44O844OX44Kz44O844OJ44Go44Kw44Or44O844OX5ZCN44KSY29ycmVjdEZvcm1hdHRlZFZhbHVl44Gr5Luj5YWl44GZ44KLXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIWdyb3Vwcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdWydlcnJvciddPVwi44Kw44Or44O844OX6YG45oqe44OV44Kj44O844Or44OJ44Gr44CB5oy/5YWl44GX44KI44GG44Go44GX44Gf44Kw44Or44O844OX5oOF5aCx44Gv6KaL44Gk44GL44KK44G+44Gb44KT44Gn44GX44Gf44CC44CM5YCk44KS5oy/5YWl44GZ44KL44CN44Kz44Oz44Od44O844ON44Oz44OI44Gu5Yem55CG44KS5Lit5pat44GX44G+44GX44Gf44CCXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIuOCsOODq+ODvOODl+mBuOaKnuODleOCo+ODvOODq+ODieOBq+OAgeaMv+WFpeOBl+OCiOOBhuOBqOOBl+OBn+OCsOODq+ODvOODl+aDheWgseOBr+imi+OBpOOBi+OCiuOBvuOBm+OCk+OBp+OBl+OBn+OAguOAjOWApOOCkuaMv+WFpeOBmeOCi+OAjeOCs+ODs+ODneODvOODjeODs+ODiOOBruWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVjdEZvcm1hdHRlZFZhbHVlPVt7IGNvZGU6IGZpZWxkVmFsdWUsIG5hbWU6IGdyb3Vwc31dO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uUmVzdWx0ID0gdGhpcy5nZXRDb25kaXRpb25SZXN1bHQoY29udGV4dCk7XHJcbiAgICAgICAgICAgIC8v5L+d5a2Y5oiQ5Yqf44Kk44OZ44Oz44OI44Gu5aC05ZCI44CBa2ludG9uZSBhc3luYy9hd2FpdCDjgavjgojjgovpnZ7lkIzmnJ/lh6bnkIbjgafjg5XjgqPjg7zjg6vjg4njgavlgKTjgpLmjL/lhaXjgZnjgotcclxuICAgICAgICAgICAgaWYoIWV2ZW50LnR5cGUuaW5jbHVkZXMoJ3N1Y2Nlc3MnKSl7XHJcblxyXG4gICAgICAgICAgICAgICAgLy/mnaHku7blvI/jga7ntZDmnpzjgYx0cnVl44GL44Gk5oy/5YWl44GZ44KL5YCk44GM5aSJ5o+b44Gn44GN44Gf5aC05ZCI44CB44OV44Kj44O844Or44OJ77yI44Op44K444Kq44Oc44K/44Oz44O744OJ44Ot44OD44OX44OA44Km44Oz44O744OB44Kn44OD44Kv44Oc44OD44Kv44K544O76KSH5pWw6YG45oqe44O75paH5a2X5YiX5LiA6KGM44O75paH5a2X5YiX6KSH5pWw6KGM44O744Oq44OD44OB44Ko44OH44Kj44K/44O75pWw5YCk44O75pel5LuY44O75pel5pmC44O75pmC5Yi777yJ44Gr44K744OD44OIXHJcbiAgICAgICAgICAgICAgICBpZihjb25kaXRpb25SZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgICAgIC8v5YCk44KS5q2j44GX44GE5b2i5byP44Gr5aSJ5o+b44Gn44GN44Gf5aC05ZCI44CB44OV44Kj44O844Or44OJ44Gr5YCk44KS44K744OD44OI44GZ44KLXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoY29ycmVjdEZvcm1hdHRlZFZhbHVlICE9PSB1bmRlZmluZWQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5yZWNvcmRbZmllbGRDb2RlXS52YWx1ZSA9IGNvcnJlY3RGb3JtYXR0ZWRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAvL+WApOOCkuato+OBl+OBhOW9ouW8j++8iOmFjeWIl++8ieOBq+WkieaPm+OBp+OBjeOBn+WgtOWQiOOAgeODleOCo+ODvOODq+ODieOBq+WApO+8iOmFjeWIl++8ieOCkuOCu+ODg+ODiOOBmeOCi1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5yZWNvcmRbZmllbGRDb2RlXS52YWx1ZSA9IGNvcnJlY3RWYWx1ZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfWVsc2V7XHJcblxyXG4gICAgICAgICAgICAgICAgLy/mjL/lhaXjgZnjgovlgKTjgpLmjL/lhaXlhYjjg5XjgqPjg7zjg6vjg4njgavlgKTjgpLjgrvjg4Pjg4jjgZfjgIFraW50b25lQVBJ44Gr44KI44Gj44Gm44Os44Kz44O844OJ5pu05paw44KS6KGM44GGXHJcbiAgICAgICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBzZXRVcGRhdGVEYXRhKGNvbmRpdGlvblJlc3VsdDpib29sZWFuLGZpZWxkQ29kZTpzdHJpbmcsZXZlbnQ6YW55LGNvcnJlY3RGb3JtYXR0ZWRWYWx1ZSA6YW55LGNvcnJlY3RWYWx1ZXMgOmFueSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL+WApOOCkuato+OBl+OBhOW9ouW8j+OBq+WkieaPm+OBp+OBjeOBn+WgtOWQiOOAgeODleOCo+ODvOODq+ODieOBq+WApOOCkuOCu+ODg+ODiOOBmeOCi1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGNvcnJlY3RGb3JtYXR0ZWRWYWx1ZSAhPT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0udmFsdWUgPSBjb3JyZWN0Rm9ybWF0dGVkVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgLy/lgKTjgpLmraPjgZfjgYTlvaLlvI/vvIjphY3liJfvvInjgavlpInmj5vjgafjgY3jgZ/loLTlkIjjgIHjg5XjgqPjg7zjg6vjg4njgavlgKTvvIjphY3liJfvvInjgpLjgrvjg4Pjg4jjgZnjgotcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0udmFsdWUgPSBjb3JyZWN0VmFsdWVzO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5p2h5Lu244GM55yf44Gu5aC05ZCI44Gu5Yem55CG44CBa2ludG9uZUFQSeOBq+OCiOOCi+mdnuWQjOacn+WHpueQhu+8iOODrOOCs+ODvOODieabtOaWsO+8iVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKGNvbmRpdGlvblJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcnJlY3RGb3JtYXR0ZWRWYWx1ZSAhPT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHVwZGF0ZURhdGEoZmllbGRDb2RlLGV2ZW50LGNvcnJlY3RGb3JtYXR0ZWRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdXBkYXRlRGF0YShmaWVsZENvZGUsZXZlbnQsY29ycmVjdFZhbHVlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy9raW50b25lIGFzeW5jL2F3YWl0IOOBq+OCiOOCi+mdnuWQjOacn+WHpueQhu+8iOODrOOCs+ODvOODieabtOaWsO+8iVxyXG4gICAgICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlRGF0YShmaWVsZENvZGU6c3RyaW5nLGV2ZW50OmFueSxpbnNlcnRWYWx1ZTphbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cGRhdGVkUmVjb3JkID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwOiBldmVudC5hcHBJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAgZXZlbnQucmVjb3JkSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQ6IHtbZmllbGRDb2RlXTp7XCJ2YWx1ZVwiOmluc2VydFZhbHVlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9BUEnjgafjg6bjg7zjgrbjg7zmg4XloLHjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcCA9YXdhaXQga2ludG9uZS5hcGkoa2ludG9uZS5hcGkudXJsKCcvay92MS9yZWNvcmQnLCB0cnVlKSwgJ1BVVCcsIHVwZGF0ZWRSZWNvcmQpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyDplqLmlbDjga7lkbzjgbPlh7rjgZdcclxuICAgICAgICAgICAgICAgIHNldFVwZGF0ZURhdGEoY29uZGl0aW9uUmVzdWx0LGZpZWxkQ29kZSxldmVudCxjb3JyZWN0Rm9ybWF0dGVkVmFsdWUsY29ycmVjdFZhbHVlcyk7XHJcblxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgcmVzdWx0PSB7XHJcbiAgICAgICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6dHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfWNhdGNoKGVycm9yOmFueSl7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZXJyb3JzLmhhbmRsZUVycm9yKGVycm9yLGFjdGlvbk5vZGUpO1xyXG4gICAgICAgICAgICByZXN1bHQuY2FuTmV4dD10cnVlOy8v5qyh44Gu44OO44O844OJ44Gv5Yem55CG44KS57aa44GR44KLXHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb250ZXh0IOadoeS7tuW8j+OCkuWun+ihjOOBmeOCi1xyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgZ2V0Q29uZGl0aW9uUmVzdWx0KGNvbnRleHQ6YW55KTpib29sZWFue1xyXG4gICAgICAgIC8v44OX44Ot44OR44OG44KjYGNvbmRpdGlvbmDjgYvjgonmnaHku7bjg4Tjg6rjg7zjgpLlj5blvpfjgZnjgotcclxuICAgICAgICBjb25zdCB0cmVlID10aGlzLmdldENvbmRpdGlvbih0aGlzLnByb3BzLmNvbmRpdGlvbik7XHJcbiAgICAgICAgaWYoIXRyZWUpe1xyXG4gICAgICAgICAgICAvL+adoeS7tuOCkuioreWumuOBleOCjOOBpuOBhOOBvuOBm+OCk1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRyZWUuZXZhbHVhdGUodHJlZS5yb290LGNvbnRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIGNvbmRpdGlvbiDmnaHku7blvI/jg4Tjg6rjg7zjgpLlj5blvpfjgZnjgotcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGdldENvbmRpdGlvbihjb25kaXRpb246c3RyaW5nKTpDb25kaXRpb25UcmVlfG51bGx7XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlID0gbmV3IENvbmRpdGlvblRyZWUoKTtcclxuICAgICAgICAgICAgdHJlZS5mcm9tSnNvbihjb25kaXRpb24pO1xyXG4gICAgICAgICAgICBpZih0cmVlLmdldENvbmRpdGlvbnModHJlZS5yb290KS5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJlZTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1jYXRjaChlcnJvcil7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlcigpOiB2b2lkIHtcclxuICAgICAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXT10aGlzO1xyXG4gICAgfVxyXG5cclxufVxyXG5uZXcgSW5zZXJ0VmFsdWVBY3Rpb24oKTsiLCJpbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyAgSUFjdGlvbixJQWN0aW9uUmVzdWx0LCBJQWN0aW9uTm9kZSwgSUFjdGlvblByb3BlcnR5LCBJRmllbGQsIElDb250ZXh0LCBJVmFyTmFtZX0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJR2V0VmFsdWVQcm9wc3tcclxuICAgIGZpZWxkOklGaWVsZDsvL+ODgeOCp+ODg+OCr+OBmeOCi+ODleOCo+ODvOODq+ODieOBruWvvuixoVxyXG4gICAgdmVyTmFtZTpJVmFyTmFtZTtcclxufVxyXG4vKipcclxuICog5q2j6KaP6KGo54++44OB44Kn44OD44Kv44Ki44Kv44K344On44OzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgR2V0VmFsdWVBY2l0b24gaW1wbGVtZW50cyBJQWN0aW9ue1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gICAgcHJvcHM6SUdldFZhbHVlUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMubmFtZT1cIuWApOOCkuWPluW+l+OBmeOCi1wiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9W107XHJcbiAgICAgICAgdGhpcy5wcm9wcz17XHJcbiAgICAgICAgICAgIGZpZWxkOntjb2RlOicnfSxcclxuICAgICAgICAgICAgdmVyTmFtZTp7bmFtZTonJ31cclxuICAgICAgICB9XHJcbiAgICAgICAgLy/jgqLjgq/jgrfjg6fjg7PjgpLnmbvpjLLjgZnjgotcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGUgXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSxjb250ZXh0OklDb250ZXh0KTpQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgICAgICBsZXQgcmVzdWx0PXtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgLy/lsZ7mgKfoqK3lrprjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1hY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICBpZiAoISgnZmllbGQnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ3Zlck5hbWUnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElHZXRWYWx1ZVByb3BzO1xyXG4gICAgICAgICAgICAvL+adoeS7tuW8j+OBruioiOeul+e1kOaenOOCkuWPluW+l1xyXG4gICAgICAgICAgICBjb25zdCByZWNvcmQgPSBldmVudC5yZWNvcmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0udmFsdWU7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucHJvcHMudmVyTmFtZSAmJiB0aGlzLnByb3BzLnZlck5hbWUubmFtZSE9PScnKXtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQudmFyaWFibGVzW3RoaXMucHJvcHMudmVyTmFtZS5uYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDp0cnVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1jYXRjaChlcnJvcil7XHJcbiAgICAgICAgICAgIC8vIGV2ZW50LmVycm9yPWVycm9yO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgY29udGV4dC5lcnJvcnMuaGFuZGxlRXJyb3IoZXJyb3IsYWN0aW9uTm9kZSk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jYW5OZXh0PWZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZWdpc3RlcigpOiB2b2lkIHtcclxuICAgICAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXT10aGlzO1xyXG4gICAgfVxyXG4gICAgXHJcbn1cclxubmV3IEdldFZhbHVlQWNpdG9uKCk7XHJcbiIsImltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7IElGaWVsZCwgSUFjdGlvbixJQWN0aW9uUmVzdWx0LCBJQWN0aW9uTm9kZSwgSUFjdGlvblByb3BlcnR5IH0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbmltcG9ydCB7IEZvcm1hdHRlciB9IGZyb20gXCIuLi91dGlsL2Zvcm1hdFwiO1xyXG5cclxuLy/lj7NVSeeUu+mdonByb3BlcnR544GubmFtZTrlnovvvJpcclxuaW50ZXJmYWNlIElTdHJpbmdKb2luUHJvcHN7XHJcbiAgICAvL+S/neWtmOWFiOODleOCo+ODvOODq+ODiVxyXG4gICAgc2F2ZUZpZWxkOklGaWVsZDtcclxuICAgIC8v57WQ5ZCI5YWD44OV44Kj44O844Or44OJMVxyXG4gICAgam9pbkZpZWxkMTpJRmllbGQ7XHJcbiAgICAvL+e1kOWQiOWFg+ODleOCo+ODvOODq+ODiTJcclxuICAgIGpvaW5GaWVsZDI6SUZpZWxkO1xyXG4gICAgLy/ljLrliIfjgormloflrZdcclxuICAgIGRlbGltaXRlcjpzdHJpbmc7XHJcbn1cclxuXHJcbi8vSUFjdGlvbuOCpOODs+OCv+ODleOCp+ODvOOCueOCkuWun+ijheOBmeOCi+aWsOOBl+OBhOOCr+ODqeOCuUFjdGlvbuOCkuS9nOaIkO+8mlxyXG5leHBvcnQgY2xhc3MgU3RyaW5nSm9pbkFjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb257XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICAvL2ltcG9ydOOBi+OCieWwjuWFpemhleekuuWumue+qVxyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gICAgLy/kuIrmlrnjga5pbnRlcmZhY2UgUHJvcHPjgYvjgonjgIFwcm9wc+WPl+OBkeOCi+WxnuaAp+OCkuWumue+qe+8mlxyXG4gICAgcHJvcHM6SVN0cmluZ0pvaW5Qcm9wcztcclxuICAgIC8v6Zai5pWw5a6a576p44Gr5b+F6KaB44Gq6aGe5ZCN44KS5qeL56+J77yaXHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIC8vcGdBZG1pbkRC44Gr55m76Yyy44GX44Gf44Ki44Kv44K344On44Oz5ZCNKG5hbWUvc3VidGl0bGUp5LiA6Ie044GZ44KL5b+F6KaB44GM44GC44KL77yaXHJcbiAgICAgICAgdGhpcy5uYW1lPVwi5paH5a2X57WQ5ZCIXCI7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1bXTtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICAgICAgLy/jg5fjg63jg5Hjg4bjgqPlsZ7mgKfliJ3mnJ/ljJbvvJpcclxuICAgICAgICB0aGlzLnByb3BzPXtcclxuICAgICAgICAgICAgc2F2ZUZpZWxkOntjb2RlOicnfSxcclxuICAgICAgICAgICAgam9pbkZpZWxkMTp7Y29kZTonJ30sXHJcbiAgICAgICAgICAgIGpvaW5GaWVsZDI6e2NvZGU6Jyd9LFxyXG4gICAgICAgICAgICBkZWxpbWl0ZXI6JydcclxuICAgICAgICB9XHJcbiAgICAgICAgLy/jg6rjgrvjg4Pjg4jkuIroqJjnmbvpjLLooajvvJpcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lh6bnkIbjgpLlrp/oo4XjgZnjgotcclxuICogQHBhcmFtIGFjdGlvbk5vZGUg44Ki44Kv44K344On44Oz44OO44O844OJXHJcbiAqIEBwYXJhbSBldmVudCBLaW50b25l44Gu44Kk44OZ44Oz44OIXHJcbiAqIEBwYXJhbSBjb250ZXh0IOOCs+ODs+ODhuOCreOCueODiO+8iOODrOOCs+ODvOODieOAgeWkieaVsOaDheWgseOCkuaMgeOBo+OBpuOBhOOCi++8iVxyXG4gKiBAcmV0dXJucyBcclxuICovXHJcbiAgICAvL+mdnuWQjOacn+WHpueQhuOBguOCi+mWouaVsOS4i+OBruOBguOCi+WxnuaAp++8mlxyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdD17XHJcbiAgICAgICAgICAgIC8v5b6M57aZ5Yem55CG5LiN5Y+v77yaXHJcbiAgICAgICAgICAgIGNhbk5leHQ6ZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDpmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAvL+WxnuaAp+ioreWumuOCkuWPluW+l+OBmeOCi++8mlxyXG4gICAgICAgICAgICB0aGlzLmFjdGlvblByb3BzPWFjdGlvbk5vZGUuYWN0aW9uUHJvcHM7XHJcbiAgICAgICAgICAgIC8v44OX44Ot44OR44OG44Kj6Kit5a6a44Gu44OH44O844K/5Z6L44Gv5b+F6KaB44Gq5oOF5aCx5ZCr44KB44G+44GZ44GL77yf5YWo6YOo5LiN5a2Y5Zyo5pmCcmV0dXJuOlxyXG4gICAgICAgICAgICBpZiAoISgnc2F2ZUZpZWxkJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdqb2luRmllbGQxJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdqb2luRmllbGQyJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL+aXouWumuOBruODl+ODreODkeODhuOCo+OBruOCpOODs+OCv+ODleOCp+ODvOOCueOBuOWkieaPm++8mlxyXG4gICAgICAgICAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBJU3RyaW5nSm9pblByb3BzO1xyXG4gICAgICAgICAgICBjb25zdCByZWNvcmQgPSBldmVudC5yZWNvcmQ7XHJcblxyXG4gICAgICAgICAgICAvL2tpbnRvbmXjg5XjgqPjg7zjg6vjg4njgr/jgqTjg5flj5blvpfvvJpcclxuICAgICAgICAgICAgY29uc3Qgam9pbkZpZWxkMXR5cGU9dGhpcy5wcm9wcy5qb2luRmllbGQxLnR5cGU7XHJcbiAgICAgICAgICAgIGNvbnN0IGpvaW5GaWVsZDJ0eXBlPXRoaXMucHJvcHMuam9pbkZpZWxkMi50eXBlO1xyXG4gICAgICAgICAgICBjb25zdCBzYXZlRmllbGR0eXBlPXRoaXMucHJvcHMuc2F2ZUZpZWxkLnR5cGU7XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAgICAgLy8gLy/kv53lrZjlhYjjg5XjgqPjg7zjg6vjg4njga/mloflrZfliJfjg5XjgqPjg7zjg6vjg4njgafjga/jgarjgYTloLTlkIjjgIHjgqjjg6njg7znmbrnlJ/vvJpcclxuICAgICAgICAgICAgaWYoIShzYXZlRmllbGR0eXBlPT09J1NJTkdMRV9MSU5FX1RFWFQnfHxzYXZlRmllbGR0eXBlPT09J01VTFRJX0xJTkVfVEVYVCd8fHNhdmVGaWVsZHR5cGU9PT0nUklDSF9URVhUJykpe1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuZXJyb3I9J1vjgqjjg6njg7zjg6Hjg4Pjgrvjg7zjgrhd77ya57WQ5ZCI5L+d5a2Y5YWI5a++5b+c5LiN5Y+v44CC57WQ5ZCI44GX44G+44Gb44KTJztcclxuICAgICAgICAgICAgICAgIGlmIChldmVudC50eXBlLmluY2x1ZGVzKCdzdWNjZXNzJykpe1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5hbGVydChcIlt3aW5kb3dzIGFsZXJ0Xe+8mlwiK2V2ZW50LmVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgICAgICBjYW5OZXh0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy/lgKTlj5blvpfmlrnms5XlrprnvqnvvJpcclxuICAgIGZ1bmN0aW9uIGdldFZhbHVlKHZhbHVlOnN0cmluZyx0eXBlOnN0cmluZ3x1bmRlZmluZWQsZmllbGRDb2RlOnN0cmluZyxldmVudDphbnkpe1xyXG4gICAgICAgIGlmKGV2ZW50LnJlY29yZFtmaWVsZENvZGVdPy52YWx1ZT09PXVuZGVmaW5lZHx8ZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlPT09bnVsbCl7XHJcbiAgICAgICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdLnZhbHVlPScnO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL+S9nOaIkOiAheOAgeabtOaWsOiAhe+8mlxyXG4gICAgICAgIGlmKHR5cGU9PT0nQ1JFQVRPUid8fHR5cGU9PT0nTU9ESUZJRVInKXtcclxuICAgICAgICAgICAgdmFsdWUgPSBldmVudC5yZWNvcmRbZmllbGRDb2RlXT8udmFsdWUubmFtZTtcclxuICAgICAgICAvL+aXpeaZguOAgeS9nOaIkOaXpeaZguOAgeabtOaWsOaXpeaZgu+8mlxyXG4gICAgICAgIH1lbHNlIGlmKHR5cGU9PT0nREFURVRJTUUnfHx0eXBlPT09J0NSRUFURURfVElNRSd8fHR5cGU9PT0nVVBEQVRFRF9USU1FJyl7XHJcbiAgICAgICAgICAgIGlmKGV2ZW50LnJlY29yZFtmaWVsZENvZGVdPy52YWx1ZSE9PXVuZGVmaW5lZCAmJiBldmVudC5yZWNvcmRbZmllbGRDb2RlXT8udmFsdWUhPT0nJyl7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IEZvcm1hdHRlci5kYXRlRm9ybWF0KG5ldyBEYXRlKGV2ZW50LnJlY29yZFtmaWVsZENvZGVdPy52YWx1ZSksJ3l5eXktTU0tZGQgSEg6bW0nKTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPWV2ZW50LnJlY29yZFtmaWVsZENvZGVdPy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAvL+ODpuODvOOCtumBuOaKnuOAgee1hOe5lOmBuOaKnuOAgeOCsOODq+ODvOODl+mBuOaKnuOAgea3u+S7mOODleOCoeOCpOODq+WQjeOAgeS9nOalreiAheOAgeOCq+ODhuOCtOODquODvO+8mlxyXG4gICAgICAgIH1lbHNlIGlmKHR5cGU9PT0nVVNFUl9TRUxFQ1QnfHx0eXBlPT09J09SR0FOSVpBVElPTl9TRUxFQ1QnfHx0eXBlPT09J0dST1VQX1NFTEVDVCd8fHR5cGU9PT0nRklMRSd8fHR5cGU9PT0nU1RBVFVTX0FTU0lHTkVFJyl7XHJcbiAgICAgICAgICAgIGlmKGV2ZW50LnJlY29yZFtmaWVsZENvZGVdPy52YWx1ZT09PXVuZGVmaW5lZCB8fCBldmVudC5yZWNvcmRbZmllbGRDb2RlXT8udmFsdWU9PT0nJyl7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGV2ZW50LnJlY29yZFtmaWVsZENvZGVdPy52YWx1ZTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb3RvdGV4dD1ldmVudC5yZWNvcmRbZmllbGRDb2RlXT8udmFsdWU7XHJcbiAgICAgICAgICAgICAgICBsZXQgYXJyPVtdO1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBpPTA7aTxtb3RvdGV4dC5sZW5ndGg7aSsrKXtcclxuICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChtb3RvdGV4dFtpXS5uYW1lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8v6YWN5YiX6KaB57Sg44KSLOOBp+mAo+e1kOOBl+OBpuaWh+Wtl+WIl+OCkuS9nOaIkO+8mlxyXG4gICAgICAgICAgICAgICAgdmFsdWU9YXJyLmpvaW4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIC8v44Kr44OG44K044Oq44O844CB44OB44Kn44OD44Kv44Oc44OD44Kv44K544CB6KSH5pWw6YG45oqe77yaXHJcbiAgICAgICAgfWVsc2UgaWYodHlwZT09PSdDQVRFR09SWSd8fHR5cGU9PT0nQ0hFQ0tfQk9YJ3x8dHlwZT09PSdNVUxUSV9TRUxFQ1QnKXtcclxuICAgICAgICAgICAgaWYoZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlPT09dW5kZWZpbmVkIHx8IGV2ZW50LnJlY29yZFtmaWVsZENvZGVdPy52YWx1ZT09PScnKXtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vdG90ZXh0PWV2ZW50LnJlY29yZFtmaWVsZENvZGVdPy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGxldCBhcnI9W107XHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IGk9MDtpPG1vdG90ZXh0Lmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKG1vdG90ZXh0W2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8v6YWN5YiX6KaB57Sg44KSLOOBp+mAo+e1kOOBl+OBpuaWh+Wtl+WIl+OCkuS9nOaIkO+8mlxyXG4gICAgICAgICAgICAgICAgdmFsdWU9YXJyLmpvaW4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIC8v6Kmz57Sw55S76Z2i44OX44Ot44K744K55a6f6KGM5b6M44Gu44K544OG44O844K/44K577yaXHJcbiAgICAgICAgfWVsc2UgaWYodHlwZT09PSdTVEFUVVMnJiZldmVudC50eXBlLmluY2x1ZGVzKCdwcm9jZXNzJykpe1xyXG4gICAgICAgICAgICB2YWx1ZSA9IGV2ZW50Lm5leHRTdGF0dXMudmFsdWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHZhbHVlID0gZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWU9PT11bmRlZmluZWQgfHwgdmFsdWU9PT1udWxsKXtcclxuICAgICAgICAgICAgdmFsdWU9Jyc7XHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHZhbHVlOyAgICAgXHJcbiAgICB9XHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAgICAgLy/lgKTlj5blvpfmlrnms5Xlkbzlh7rvvJpcclxuICAgICAgICAgICAgbGV0IGpvaW5WYWx1ZTE6c3RyaW5nPScnO1xyXG4gICAgICAgICAgICBqb2luVmFsdWUxPWdldFZhbHVlKGpvaW5WYWx1ZTEsam9pbkZpZWxkMXR5cGUsdGhpcy5wcm9wcy5qb2luRmllbGQxLmNvZGUsZXZlbnQpO1xyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAgICAgICAgIGxldCBqb2luVmFsdWUyOnN0cmluZz0nJztcclxuICAgICAgICAgICAgam9pblZhbHVlMj1nZXRWYWx1ZShqb2luVmFsdWUyLGpvaW5GaWVsZDJ0eXBlLHRoaXMucHJvcHMuam9pbkZpZWxkMi5jb2RlLGV2ZW50KTtcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgICAgICBjb25zdCBjb25TdHJpbmcgPSB0aGlzLnByb3BzLmRlbGltaXRlcjtcclxuICAgICAgICAgICAgbGV0IHNhdmVWYWx1ZTpzdHJpbmc9Jyc7XHJcbiAgICAgICAgICAgIC8v5YmN5b6M57WQ5ZCI5YWD44GM56m655m944Gq44KJ5Yy65YiH44KK5paH5a2X44KC56m655m944Gr44GZ44KLKOS+izoxLTjjga4454Sh44GE44Gq44KJMeOAgjEtOOOBrjHnhKHjgYTjgarjgok444CCMeepuueZvTjjga4454Sh44GE44Gq44KJMeOAgue1kOWQiOWFg+WFqOmDqOepuueZveOBquOCieWFqOmDqOepuueZvSk6XHJcbiAgICAgICAgICAgIGlmKGpvaW5WYWx1ZTE9PT0nJyYmam9pblZhbHVlMj09PScnKXtcclxuICAgICAgICAgICAgICAgIHNhdmVWYWx1ZT0nJztcclxuICAgICAgICAgICAgfWVsc2UgaWYoam9pblZhbHVlMT09PScnJiZqb2luVmFsdWUyIT09Jycpe1xyXG4gICAgICAgICAgICAgICAgc2F2ZVZhbHVlPWpvaW5WYWx1ZTI7XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKGpvaW5WYWx1ZTI9PT0nJyYmam9pblZhbHVlMSE9PScnKXtcclxuICAgICAgICAgICAgICAgIHNhdmVWYWx1ZT1qb2luVmFsdWUxO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZihqb2luVmFsdWUxIT09JycmJmpvaW5WYWx1ZTIhPT0nJyl7XHJcbiAgICAgICAgICAgICAgICBzYXZlVmFsdWU9YCR7am9pblZhbHVlMX0ke2NvblN0cmluZ30ke2pvaW5WYWx1ZTJ9YFxyXG4gICAgICAgICAgICB9XHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgICAgICAvL+aWsOimjy/mm7TmlrAv5LiA6Kan5L+d5a2Y5oiQ5Yqf5b6M44Gu5Lul5aSW44GuZXZlbnTjgadQVVTkvb/nlKjjgZfjgarjgYTvvJpcclxuICAgICAgICAgICAgaWYgKCFldmVudC50eXBlLmluY2x1ZGVzKCdzdWNjZXNzJykpe1xyXG4gICAgICAgICAgICAgICAgIC8v5L+d5a2Y5YWI44OV44Kj44O844Or44OJ44Gr5YCk44K744OD44OI77yaXHJcbiAgICAgICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuc2F2ZUZpZWxkLmNvZGVdLnZhbHVlPXNhdmVWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAvL3dpbmRvdy5hbGVydChcIuaWh+Wtl+e1kOWQiOihjOOBhOOBvuOBl+OBn+OAglwiK3RoaXMucHJvcHMuam9pbkZpZWxkMS5uYW1lK1wiOlwiK2pvaW5WYWx1ZTErXCIsXCIrdGhpcy5wcm9wcy5qb2luRmllbGQyLm5hbWUrXCI6XCIram9pblZhbHVlMitcIuOAglwiKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAvL2tpbnRvbmUgYXN5bmMvYXdhaXQg44Gr44KI44KL6Z2e5ZCM5pyf5Yem55CGKOaIkOWKn+OCpOODmeODs+ODiFJFU1QgQVBJ5Yem55CG5pmCKe+8mlxyXG4gICAgICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlUmVjb3JkKGZpZWxkQ29kZTpzdHJpbmcsZXZlbnQ6YW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVwZGF0ZWRSZWNvcmQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHA6IGV2ZW50LmFwcElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICBldmVudC5yZWNvcmRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZDoge1tmaWVsZENvZGVdOntcInZhbHVlXCI6c2F2ZVZhbHVlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2ludG9uZS5hcGkoa2ludG9uZS5hcGkudXJsKCcvay92MS9yZWNvcmQnLCB0cnVlKSwgJ1BVVCcsIHVwZGF0ZWRSZWNvcmQsIChyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3ApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy9raW50b25l5L+d5a2Y5YWI44OV44Kj44O844Or44OJ5a2Y5Zyo56K66KqN77yaXHJcbiAgICAgICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5zYXZlRmllbGQuY29kZV0udmFsdWU9c2F2ZVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgLy9raW50b25lIGFzeW5jL2F3YWl0IOOBq+OCiOOCi+mdnuWQjOacn+WHpueQhu+8mlxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdXBkYXRlUmVjb3JkKHRoaXMucHJvcHMuc2F2ZUZpZWxkLmNvZGUsZXZlbnQpOyAgIFxyXG4gICAgICAgICAgICAgICAgLy/kuIDopqfnlLvpnaLmm7TmlrDmiJDlip/lvozmiYvli5Xjg6rjg63jg7zjg4njgY/jgaDjgZXjgYTvvJogICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQudHlwZS5pbmNsdWRlcygnaW5kZXgnKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgLy93aW5kb3cuYWxlcnQoXCLmloflrZfntZDlkIjooYzjgYTjgb7jgZfjgZ/jgIJcIit0aGlzLnByb3BzLmpvaW5GaWVsZDEubmFtZStcIjpcIitqb2luVmFsdWUxK1wiLFwiK3RoaXMucHJvcHMuam9pbkZpZWxkMi5uYW1lK1wiOlwiK2pvaW5WYWx1ZTIrXCLjgILkuIDopqfnlLvpnaLmm7TmlrDmiJDlip/lvozoh6rli5Xjg6rjg63jg7zjg4njgZfjgb7jgZvjgpPjgILlv4XopoHjgavlv5zjgZjjgabmiYvli5Xjg6rjg63jg7zjg4njgY/jgaDjgZXjgYTjgIJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmFsZXJ0KFwi5paH5a2X57WQ5ZCI44Gr44Gv44CB5LiA6Kan55S76Z2i5pu05paw5oiQ5Yqf5b6M6Ieq5YuV44Oq44Ot44O844OJ44GX44G+44Gb44KT44CC5b+F6KaB44Gr5b+c44GY44Gm5omL5YuV44Oq44Ot44O844OJ44GP44Gg44GV44GE44CCXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgICAgICByZXN1bHQ9IHtcclxuICAgICAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDp0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9Y2F0Y2goZXJyb3IpeztcclxuICAgICAgICAgICAgaWYgKGV2ZW50LnR5cGUuaW5jbHVkZXMoJ3N1Y2Nlc3MnKSl7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuYWxlcnQoXCJbd2luZG93cyBhbGVydF3vvJrlh6bnkIbkuK3nlbDluLjjgYznmbrnlJ/jgZfjgb7jgZfjgZ/jgILntZDlkIjjgZfjgb7jgZvjgpPjgILjgrfjgrnjg4bjg6Dmi4XlvZPogIXjgbjjgYrllY/lkIjjgZvjgY/jgaDjgZXjgYTjgIJlcnJvcuODoeODg+OCu+ODvOOCuO+8mlwiK2Vycm9yKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGV2ZW50LmVycm9yPVwiW+OCqOODqeODvOODoeODg+OCu+ODvOOCuF3vvJrlh6bnkIbkuK3nlbDluLjjgYznmbrnlJ/jgZfjgb7jgZfjgZ/jgILntZDlkIjjgZfjgb7jgZvjgpPjgILjgrfjgrnjg4bjg6Dmi4XlvZPogIXjgbjjgYrllY/lkIjjgZvjgY/jgaDjgZXjgYTjgIJlcnJvcuODoeODg+OCu+ODvOOCuO+8mlwiK2Vycm9yO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgY2FuTmV4dDpmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDpmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV09dGhpcztcclxuICAgIH1cclxufVxyXG5uZXcgU3RyaW5nSm9pbkFjdGlvbigpOyIsImltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7ICBJQWN0aW9uLElBY3Rpb25SZXN1bHQsIElBY3Rpb25Ob2RlLCBJQWN0aW9uUHJvcGVydHksIElGaWVsZCwgSUNvbnRleHQgfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuXHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbiAgICBpbnRlcmZhY2UgRnVsbFdpZHRoUHJvcHN7XHJcbiAgICAgICAgZmllbGQ6SUZpZWxkXHJcbiAgICB9XHJcbi8qKlxyXG4gKiDlhajop5Ljg4Hjgqfjg4Pjgq/jgqLjgq/jgrfjg6fjg7NcclxuICovXHJcbmV4cG9ydCBjbGFzcyBGdWxsV2lkdGhBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9ue1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gICAgcHJvcHM6RnVsbFdpZHRoUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMubmFtZT1cIuWFqOinkuODgeOCp+ODg+OCr1wiOyAvKiBwZ2FkbWlu44GubmFtZeOBqOWQjOanmCAgKi9cclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzPVtdO1xyXG4gICAgICAgIHRoaXMucHJvcHM9e1xyXG4gICAgICAgICAgICBmaWVsZDp7Y29kZTonJ31cclxuICAgICAgICB9XHJcbiAgICAgICAgLy/jgqLjgq/jgrfjg6fjg7PjgpLnmbvpjLLjgZnjgotcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGVcclxuICAgICAqIEBwYXJhbSBldmVudFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSxjb250ZXh0OklDb250ZXh0KTpQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgICAgICBsZXQgcmVzdWx0PXtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgLy/lsZ7mgKfoqK3lrprjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1hY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICBpZiAoISgnZmllbGQnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIEZ1bGxXaWR0aFByb3BzO1xyXG4gICAgICAgICAgICAvL+adoeS7tuW8j+OBruioiOeul+e1kOaenOOCkuWPluW+l1xyXG4gICAgICAgICAgICBjb25zdCByZWNvcmQgPSBldmVudC5yZWNvcmQ7XHJcbiAgICAgICAgICAgIGlmKCEodGhpcy5wcm9wcy5maWVsZC5jb2RlIGluIHJlY29yZCkpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDjg5XjgqPjg7zjg6vjg4njgIwke3RoaXMucHJvcHMuZmllbGQuY29kZX3jgI3jgYzopovjgaTjgYvjgorjgb7jgZvjgpPjgIJgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdPy52YWx1ZTtcclxuICAgICAgICAgICAgLy/mnaHku7bliIblspBcclxuICAgICAgICAgICAgLy/mnKrlhaXlipvmmYLjga/kvZXjgoLlh6bnkIbjgpLjgZvjgZrntYLkuoZcclxuICAgICAgICAgICAgaWYodmFsdWU9PT11bmRlZmluZWQgfHwgdmFsdWU9PT0nJyl7XHJcbiAgICAgICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS5lcnJvcj1udWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8v5Y2K6KeS44GM5ZCr44G+44KM44Gm44GE44Gf5aC05ZCIcmVzdWx044GMZmFsc2VcclxuICAgICAgICAgICAgaWYoIXRoaXMuY29udGFpbnNGdWxsV2lkdGhDaGFycyh2YWx1ZSkgJiYgISh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PScnKSl7XHJcbiAgICAgICAgICAgICAgICAvL+OCqOODqeODvOaZguOBq+WHuuWKm+OBleOCjOOCi+aWh+Wtl+ioreWumlxyXG4gICAgICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0uZXJyb3I9XCLljYrop5LjgYzlkKvjgb7jgozjgabjgYTjgb7jgZlcIjtcclxuICAgICAgICAgICAgICAgIC8v5qyh44Gu5Yem55CG44KS5Lit5q2i44GZ44KL5YCk6Kit5a6aXHJcbiAgICAgICAgICAgICAgICByZXN1bHQuY2FuTmV4dD1mYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0uZXJyb3I9bnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3Jlc3VsdOODl+ODreODkeODhuOCo+aMh+WumlxyXG4gICAgICAgICAgICByZXN1bHQ9IHtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6dHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcblxyXG4gICAgICAgIC8v5L6L5aSW5Yem55CGXHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgLy8gZXZlbnQuZXJyb3I9ZXJyb3I7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICBjb250ZXh0LmVycm9ycy5oYW5kbGVFcnJvcihlcnJvcixhY3Rpb25Ob2RlKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQ9ZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8g5YWo44Gm5YWo6KeS44Gu5paH5a2X5YiX44Gu5aC05ZCI44GvdHJ1ZeOAgeOBneOBhuOBp+OBquOBhOWgtOWQiOOBr2ZhbHNlXHJcbiAgICBjb250YWluc0Z1bGxXaWR0aENoYXJzKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cclxuICAgICAgICAvLyDljYrop5Loi7HmlbDlrZfjgqvjg4roqJjlj7fjgpLpmaTlpJZcclxuICAgICAgICAvL+WFqOinkuOBi+OBqeOBhuOBi1xyXG4gICAgICAgIGNvbnN0IGNoZWNrUmVnZXg9XCJeW15cXHgwMS1cXHg3RVxcdUZGNjEtXFx1RkY5Rl0rJFwiO1xyXG5cclxuICAgICAgICAvL+ato+imj+ihqOePvuOCquODluOCuOOCp+OCr+ODiOeUn+aIkFxyXG4gICAgICAgIGNvbnN0IGZ1bGxXaWR0aFJlZ2V4ID0gbmV3IFJlZ0V4cChjaGVja1JlZ2V4KTtcclxuXHJcbiAgICAgICAgLy/mraPopo/ooajnj77jg4Hjgqfjg4Pjgq9cclxuICAgICAgICByZXR1cm4gZnVsbFdpZHRoUmVnZXgudGVzdCh0ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICAvL+aIu+OCiuWApOOCkuaMgeOBn+OBquOBhOOBn+OCgXZvaWTlnotcclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbn1cclxubmV3IEZ1bGxXaWR0aEFjdGlvbigpOyIsImltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7ICBJQWN0aW9uLElBY3Rpb25SZXN1bHQsIElBY3Rpb25Ob2RlLCBJQWN0aW9uUHJvcGVydHksIElGaWVsZCwgSUNvbnRleHQgfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuXHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbiAgICBpbnRlcmZhY2UgSGFsZldpZHRoUHJvcHN7XHJcbiAgICAgICAgZmllbGQ6SUZpZWxkXHJcbiAgICB9XHJcbi8qKlxyXG4gKiDljYrop5Ljg4Hjgqfjg4Pjgq/jgqLjgq/jgrfjg6fjg7NcclxuICovXHJcbmV4cG9ydCBjbGFzcyBIYWxmV2lkdGhBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9ue1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gICAgcHJvcHM6SGFsZldpZHRoUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMubmFtZT1cIuWNiuinkuODgeOCp+ODg+OCr1wiOyAvKiBwZ2FkbWlu44GubmFtZeOBqOWQjOanmCAgKi9cclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzPVtdO1xyXG4gICAgICAgIHRoaXMucHJvcHM9e1xyXG4gICAgICAgICAgICBmaWVsZDp7Y29kZTonJ31cclxuICAgICAgICB9XHJcbiAgICAgICAgLy/jgqLjgq/jgrfjg6fjg7PjgpLnmbvpjLLjgZnjgotcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGVcclxuICAgICAqIEBwYXJhbSBldmVudFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSxjb250ZXh0OklDb250ZXh0KTpQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgICAgICBsZXQgcmVzdWx0PXtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgLy/lsZ7mgKfoqK3lrprjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1hY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICBpZiAoISgnZmllbGQnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIEhhbGZXaWR0aFByb3BzO1xyXG4gICAgICAgICAgICAvL+adoeS7tuW8j+OBruioiOeul+e1kOaenOOCkuWPluW+l1xyXG4gICAgICAgICAgICBjb25zdCByZWNvcmQgPSBldmVudC5yZWNvcmQ7XHJcbiAgICAgICAgICAgIGlmKCEodGhpcy5wcm9wcy5maWVsZC5jb2RlIGluIHJlY29yZCkpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDjg5XjgqPjg7zjg6vjg4njgIwke3RoaXMucHJvcHMuZmllbGQuY29kZX3jgI3jgYzopovjgaTjgYvjgorjgb7jgZvjgpPjgIJgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdPy52YWx1ZTtcclxuICAgICAgICAgICAgLy/mnaHku7bliIblspBcclxuICAgICAgICAgICAgLy/mnKrlhaXlipvmmYLjga/kvZXjgoLlh6bnkIbjgpLjgZvjgZrntYLkuoZcclxuICAgICAgICAgICAgaWYodmFsdWU9PT11bmRlZmluZWQgfHwgdmFsdWU9PT0nJyl7XHJcbiAgICAgICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS5lcnJvcj1udWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8v5YWo6KeS44GM5ZCr44G+44KM44Gm44GE44Gf5aC05ZCI5L+d5a2Y5Yem55CG5Lit5q2iKOOCqOODqeODvOWHpueQhilcclxuICAgICAgICAgICAgaWYoIXRoaXMuY29udGFpbnNIYWxmV2lkdGhDaGFycyh2YWx1ZSkpe1xyXG4gICAgICAgICAgICAgICAgLy/jgqjjg6njg7zmmYLjgavlh7rlipvjgZXjgozjgovmloflrZfoqK3lrppcclxuICAgICAgICAgICAgICAgIHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdLmVycm9yPVwi5YWo6KeS44GM5ZCr44G+44KM44Gm44GE44G+44GZXCI7XHJcbiAgICAgICAgICAgICAgICAvL+asoeOBruWHpueQhuOCkuS4reatouOBmeOCi+WApOioreWumlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQ9ZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdLmVycm9yPW51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy/ljYrop5Ljga7loLTlkIjllY/poYzjgarjgY/lrp/ooYxcclxuICAgICAgICAgICAgLy9yZXN1bHTjg5fjg63jg5Hjg4bjgqPmjIflrppcclxuICAgICAgICAgICAgcmVzdWx0PSB7XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OnRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIC8v5L6L5aSW5Yem55CGXHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgLy8gZXZlbnQuZXJyb3I9ZXJyb3I7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICBjb250ZXh0LmVycm9ycy5oYW5kbGVFcnJvcihlcnJvcixhY3Rpb25Ob2RlKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQ9ZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8g5YWo44Gm5YWo6KeS44Gu5paH5a2X5YiX44Gu5aC05ZCI44GvdHJ1ZeOAgeOBneOBhuOBp+OBquOBhOWgtOWQiOOBr2ZhbHNlXHJcbiAgICBjb250YWluc0hhbGZXaWR0aENoYXJzKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cclxuICAgICAgICBjb25zdCBjaGVja1JlZ2V4ID0gXCJeW1xceDAxLVxceDdFXFx1RkY2MS1cXHVGRjlGXSskXCI7XHJcbiAgICAgICAgLy/mraPopo/ooajnj77jgqrjg5bjgrjjgqfjgq/jg4jnlJ/miJBcclxuICAgICAgICBjb25zdCBoYWxmV2lkdGhSZWdleCA9IG5ldyBSZWdFeHAoY2hlY2tSZWdleCk7XHJcblxyXG4gICAgICAgIC8v5q2j6KaP6KGo54++44OB44Kn44OD44KvXHJcbiAgICAgICAgcmV0dXJuIGhhbGZXaWR0aFJlZ2V4LnRlc3QodGV4dCk7XHJcbiAgICB9XHJcbiAgICAvL+aIu+OCiuWApOOCkuaMgeOBn+OBquOBhOOBn+OCgXZvaWTlnotcclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbn1cclxubmV3IEhhbGZXaWR0aEFjdGlvbigpOyIsImltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7XHJcbiAgSUFjdGlvbixcclxuICBJQWN0aW9uUmVzdWx0LFxyXG4gIElBY3Rpb25Ob2RlLFxyXG4gIElBY3Rpb25Qcm9wZXJ0eSxcclxuICBJRmllbGQsXHJcbiAgSUNvbnRleHQsXHJcbiAgSVZhck5hbWUsXHJcbn0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbmltcG9ydCB7IENvbmRpdGlvblRyZWUgfSBmcm9tIFwiLi4vdHlwZXMvQ29uZGl0aW9uc1wiO1xyXG5cclxuLyoqXHJcbiAqICDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJQ29udmVyc2lvblByb3BzIHtcclxuICBmaWVsZDogSUZpZWxkO1xyXG4gIGNvbnZlcnNpb246IHN0cmluZztcclxuICB2ZXJOYW1lOiBJVmFyTmFtZTtcclxufVxyXG5cclxuY29uc3QgZnVsbFdpZHRoVG9IYWxmV2lkdGhNYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAg44KsOiBcIu+9tu++nlwiLFxyXG4gIOOCrjogXCLvvbfvvp5cIixcclxuICDjgrA6IFwi7724776eXCIsXHJcbiAg44KyOiBcIu+9ue++nlwiLFxyXG4gIOOCtDogXCLvvbrvvp5cIixcclxuICDjgrY6IFwi7727776eXCIsXHJcbiAg44K4OiBcIu+9vO++nlwiLFxyXG4gIOOCujogXCLvvb3vvp5cIixcclxuICDjgrw6IFwi772+776eXCIsXHJcbiAg44K+OiBcIu+9v+++nlwiLFxyXG4gIOODgDogXCLvvoDvvp5cIixcclxuICDjg4I6IFwi776B776eXCIsXHJcbiAg44OFOiBcIu++gu++nlwiLFxyXG4gIOODhzogXCLvvoPvvp5cIixcclxuICDjg4k6IFwi776E776eXCIsXHJcbiAg44OQOiBcIu++iu++nlwiLFxyXG4gIOODkzogXCLvvovvvp5cIixcclxuICDjg5Y6IFwi776M776eXCIsXHJcbiAg44OZOiBcIu++je++nlwiLFxyXG4gIOODnDogXCLvvo7vvp5cIixcclxuICDjg5E6IFwi776K776fXCIsXHJcbiAg44OUOiBcIu++i+++n1wiLFxyXG4gIOODlzogXCLvvozvvp9cIixcclxuICDjg5o6IFwi776N776fXCIsXHJcbiAg44OdOiBcIu++ju++n1wiLFxyXG4gIOODtDogXCLvvbPvvp5cIixcclxuICDjg7c6IFwi776c776eXCIsXHJcbiAg44O6OiBcIu+9pu++nlwiLFxyXG4gIOOCojogXCLvvbFcIixcclxuICDjgqQ6IFwi772yXCIsXHJcbiAg44KmOiBcIu+9s1wiLFxyXG4gIOOCqDogXCLvvbRcIixcclxuICDjgqo6IFwi7721XCIsXHJcbiAg44KrOiBcIu+9tlwiLFxyXG4gIOOCrTogXCLvvbdcIixcclxuICDjgq86IFwi7724XCIsXHJcbiAg44KxOiBcIu+9uVwiLFxyXG4gIOOCszogXCLvvbpcIixcclxuICDjgrU6IFwi7727XCIsXHJcbiAg44K3OiBcIu+9vFwiLFxyXG4gIOOCuTogXCLvvb1cIixcclxuICDjgrs6IFwi772+XCIsXHJcbiAg44K9OiBcIu+9v1wiLFxyXG4gIOOCvzogXCLvvoBcIixcclxuICDjg4E6IFwi776BXCIsXHJcbiAg44OEOiBcIu++glwiLFxyXG4gIOODhjogXCLvvoNcIixcclxuICDjg4g6IFwi776EXCIsXHJcbiAg44OKOiBcIu++hVwiLFxyXG4gIOODizogXCLvvoZcIixcclxuICDjg4w6IFwi776HXCIsXHJcbiAg44ONOiBcIu++iFwiLFxyXG4gIOODjjogXCLvvolcIixcclxuICDjg486IFwi776KXCIsXHJcbiAg44OSOiBcIu++i1wiLFxyXG4gIOODlTogXCLvvoxcIixcclxuICDjg5g6IFwi776NXCIsXHJcbiAg44ObOiBcIu++jlwiLFxyXG4gIOODnjogXCLvvo9cIixcclxuICDjg586IFwi776QXCIsXHJcbiAg44OgOiBcIu++kVwiLFxyXG4gIOODoTogXCLvvpJcIixcclxuICDjg6I6IFwi776TXCIsXHJcbiAg44OkOiBcIu++lFwiLFxyXG4gIOODpjogXCLvvpVcIixcclxuICDjg6g6IFwi776WXCIsXHJcbiAg44OpOiBcIu++l1wiLFxyXG4gIOODqjogXCLvvphcIixcclxuICDjg6s6IFwi776ZXCIsXHJcbiAg44OsOiBcIu++mlwiLFxyXG4gIOODrTogXCLvvptcIixcclxuICDjg686IFwi776cXCIsXHJcbiAg44OyOiBcIu+9plwiLFxyXG4gIOODszogXCLvvp1cIixcclxuICDjgqE6IFwi772nXCIsXHJcbiAg44KjOiBcIu+9qFwiLFxyXG4gIOOCpTogXCLvvalcIixcclxuICDjgqc6IFwi772qXCIsXHJcbiAg44KpOiBcIu+9q1wiLFxyXG4gIOODgzogXCLvva9cIixcclxuICDjg6M6IFwi772sXCIsXHJcbiAg44OlOiBcIu+9rVwiLFxyXG4gIOODpzogXCLvva5cIixcclxuICBcIuOAglwiOiBcIu+9oVwiLFxyXG4gIFwi44CBXCI6IFwi772kXCIsXHJcbiAg44O8OiBcIu+9sFwiLFxyXG4gIFwi44CMXCI6IFwi772iXCIsXHJcbiAgXCLjgI1cIjogXCLvvaNcIixcclxuICBcIuODu1wiOiBcIu+9pVwiLFxyXG4gIFwi44CAXCI6IFwiIFwiLCAvLyDlhajop5Ljgrnjg5rjg7zjgrnjgoLljYrop5Ljgrnjg5rjg7zjgrnjgavlpInmj5tcclxufTtcclxuXHJcbmNvbnN0IGhhbGZXaWR0aFRvRnVsbFdpZHRoTWFwOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gIO+9tu++njogXCLjgqxcIixcclxuICDvvbfvvp46IFwi44KuXCIsXHJcbiAg7724776eOiBcIuOCsFwiLFxyXG4gIO+9ue++njogXCLjgrJcIixcclxuICDvvbrvvp46IFwi44K0XCIsXHJcbiAg7727776eOiBcIuOCtlwiLFxyXG4gIO+9vO++njogXCLjgrhcIixcclxuICDvvb3vvp46IFwi44K6XCIsXHJcbiAg772+776eOiBcIuOCvFwiLFxyXG4gIO+9v+++njogXCLjgr5cIixcclxuICDvvoDvvp46IFwi44OAXCIsXHJcbiAg776B776eOiBcIuODglwiLFxyXG4gIO++gu++njogXCLjg4VcIixcclxuICDvvoPvvp46IFwi44OHXCIsXHJcbiAg776E776eOiBcIuODiVwiLFxyXG4gIO++iu++njogXCLjg5BcIixcclxuICDvvovvvp46IFwi44OTXCIsXHJcbiAg776M776eOiBcIuODllwiLFxyXG4gIO++je++njogXCLjg5lcIixcclxuICDvvo7vvp46IFwi44OcXCIsXHJcbiAg776K776fOiBcIuODkVwiLFxyXG4gIO++i+++nzogXCLjg5RcIixcclxuICDvvozvvp86IFwi44OXXCIsXHJcbiAg776N776fOiBcIuODmlwiLFxyXG4gIO++ju++nzogXCLjg51cIixcclxuICDvvbPvvp46IFwi44O0XCIsXHJcbiAg776c776eOiBcIuODt1wiLFxyXG4gIO+9pu++njogXCLjg7pcIixcclxuICDvvbE6IFwi44KiXCIsXHJcbiAg772yOiBcIuOCpFwiLFxyXG4gIO+9szogXCLjgqZcIixcclxuICDvvbQ6IFwi44KoXCIsXHJcbiAg7721OiBcIuOCqlwiLFxyXG4gIO+9tjogXCLjgqtcIixcclxuICDvvbc6IFwi44KtXCIsXHJcbiAg7724OiBcIuOCr1wiLFxyXG4gIO+9uTogXCLjgrFcIixcclxuICDvvbo6IFwi44KzXCIsXHJcbiAg7727OiBcIuOCtVwiLFxyXG4gIO+9vDogXCLjgrdcIixcclxuICDvvb06IFwi44K5XCIsXHJcbiAg772+OiBcIuOCu1wiLFxyXG4gIO+9vzogXCLjgr1cIixcclxuICDvvoA6IFwi44K/XCIsXHJcbiAg776BOiBcIuODgVwiLFxyXG4gIO++gjogXCLjg4RcIixcclxuICDvvoM6IFwi44OGXCIsXHJcbiAg776EOiBcIuODiFwiLFxyXG4gIO++hTogXCLjg4pcIixcclxuICDvvoY6IFwi44OLXCIsXHJcbiAg776HOiBcIuODjFwiLFxyXG4gIO++iDogXCLjg41cIixcclxuICDvvok6IFwi44OOXCIsXHJcbiAg776KOiBcIuODj1wiLFxyXG4gIO++izogXCLjg5JcIixcclxuICDvvow6IFwi44OVXCIsXHJcbiAg776NOiBcIuODmFwiLFxyXG4gIO++jjogXCLjg5tcIixcclxuICDvvo86IFwi44OeXCIsXHJcbiAg776QOiBcIuODn1wiLFxyXG4gIO++kTogXCLjg6BcIixcclxuICDvvpI6IFwi44OhXCIsXHJcbiAg776TOiBcIuODolwiLFxyXG4gIO++lDogXCLjg6RcIixcclxuICDvvpU6IFwi44OmXCIsXHJcbiAg776WOiBcIuODqFwiLFxyXG4gIO++lzogXCLjg6lcIixcclxuICDvvpg6IFwi44OqXCIsXHJcbiAg776ZOiBcIuODq1wiLFxyXG4gIO++mjogXCLjg6xcIixcclxuICDvvps6IFwi44OtXCIsXHJcbiAg776cOiBcIuODr1wiLFxyXG4gIO+9pjogXCLjg7JcIixcclxuICDvvp06IFwi44OzXCIsXHJcbiAg772nOiBcIuOCoVwiLFxyXG4gIO+9qDogXCLjgqNcIixcclxuICDvvak6IFwi44KlXCIsXHJcbiAg772qOiBcIuOCp1wiLFxyXG4gIO+9qzogXCLjgqlcIixcclxuICDvva86IFwi44ODXCIsXHJcbiAg772sOiBcIuODo1wiLFxyXG4gIO+9rTogXCLjg6VcIixcclxuICDvva46IFwi44OnXCIsXHJcbiAgXCLvvaFcIjogXCLjgIJcIixcclxuICBcIu+9pFwiOiBcIuOAgVwiLFxyXG4gIO+9sDogXCLjg7xcIixcclxuICBcIu+9olwiOiBcIuOAjFwiLFxyXG4gIFwi772jXCI6IFwi44CNXCIsXHJcbiAgXCLvvaVcIjogXCLjg7tcIixcclxuICBcIiBcIjogXCLjgIBcIixcclxufTtcclxuXHJcbi8qKlxyXG4gKiDlhajop5Iv5Y2K6KeS5aSJ5o+b44Ki44Kv44K344On44OzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRnVsbEhhbGZDb252ZXJzaW9uQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbiB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICBwcm9wczogSUNvbnZlcnNpb25Qcm9wcztcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMubmFtZSA9IFwi5YWo6KeSL+WNiuinkuWkieaPm1wiO1xyXG4gICAgdGhpcy5hY3Rpb25Qcm9wcyA9IFtdO1xyXG4gICAgdGhpcy5wcm9wcyA9IHtcclxuICAgICAgZmllbGQ6IHsgY29kZTogXCJcIiB9LFxyXG4gICAgICBjb252ZXJzaW9uOiBcIlwiLFxyXG4gICAgICB2ZXJOYW1lOiB7IG5hbWU6IFwiXCIgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDjgqLjgq/jgrfjg6fjg7Pjga7lrp/ooYzjgpLlkbzjgbPlh7rjgZlcclxuICAgKiBAcGFyYW0gYWN0aW9uTm9kZVxyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgYXN5bmMgcHJvY2VzcyhcclxuICAgIGFjdGlvbk5vZGU6IElBY3Rpb25Ob2RlLFxyXG4gICAgZXZlbnQ6IGFueSxcclxuICAgIGNvbnRleHQ6IElDb250ZXh0XHJcbiAgKTogUHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICBsZXQgcmVzdWx0ID0ge1xyXG4gICAgICBjYW5OZXh0OiB0cnVlLFxyXG4gICAgICByZXN1bHQ6IGZhbHNlLFxyXG4gICAgfTtcclxuICAgIHRyeSB7XHJcbiAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBhY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIShcImZpZWxkXCIgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkgJiZcclxuICAgICAgICAhKFwiY29udmVyc2lvblwiIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmXHJcbiAgICAgICAgIShcInZlck5hbWVcIiBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBJQ29udmVyc2lvblByb3BzO1xyXG5cclxuICAgICAgLy/mnaHku7blvI/jga7oqIjnrpfntZDmnpzjgpLlj5blvpdcclxuICAgICAgY29uc3QgcmVjb3JkID0gZXZlbnQucmVjb3JkO1xyXG4gICAgICBpZiAoISh0aGlzLnByb3BzLmZpZWxkLmNvZGUgaW4gcmVjb3JkKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIGDjg5XjgqPjg7zjg6vjg4njgIwke3RoaXMucHJvcHMuZmllbGQuY29kZX3jgI3jgYzopovjgaTjgYvjgorjgb7jgZvjgpPjgIJgXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICAvL1xyXG4gICAgICBjb25zdCB2YWx1ZSA9IHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdPy52YWx1ZTtcclxuXHJcbiAgICAgIC8v5p2h5Lu25YiG5bKQXHJcbiAgICAgIC8v5pyq5YWl5Yqb5pmC44Gv5L2V44KC5Yem55CG44KS44Gb44Ga57WC5LqGXHJcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBcIlwiKSB7XHJcbiAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0uZXJyb3IgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnByb3BzLmNvbnZlcnNpb24gPT09IFwi5YWo6KeSXCIpIHtcclxuICAgICAgICBjb250ZXh0LnZhcmlhYmxlc1t0aGlzLnByb3BzLnZlck5hbWUubmFtZV0gPSB0aGlzLnRvRnVsbFdpZHRoKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5wcm9wcy5jb252ZXJzaW9uID09PSBcIuWNiuinklwiKSB7XHJcbiAgICAgICAgY29udGV4dC52YXJpYWJsZXNbdGhpcy5wcm9wcy52ZXJOYW1lLm5hbWVdID0gdGhpcy50b0hhbGZXaWR0aCh2YWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0uZXJyb3IgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIC8vcmVzdWx044OX44Ot44OR44OG44Kj5oyH5a6aXHJcbiAgICAgIHJlc3VsdCA9IHtcclxuICAgICAgICBjYW5OZXh0OiB0cnVlLFxyXG4gICAgICAgIHJlc3VsdDogdHJ1ZSxcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuXHJcbiAgICAgIC8v5L6L5aSW5Yem55CGXHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb250ZXh0LmVycm9ycy5oYW5kbGVFcnJvcihlcnJvciwgYWN0aW9uTm9kZSk7XHJcbiAgICAgIHJlc3VsdC5jYW5OZXh0ID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDljYrop5LjgYvjgonlhajop5LjgavlpInmj5tcclxuICB0b0Z1bGxXaWR0aChzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAvL+WNiuinkuOBruiLseaVsOWtl+OBqOiomOWPt+OCkuaknOe0ouOBl+OAgeWNiuinkuOBi+OCieWFqOinkuOBq+WkieaPm++8iOWNiuinkuOCs+ODvOODieOBqyAweEZFRTAg44KS6Laz44GX44Gm5YWo6KeS44Gr44GZ44KL77yJXHJcbiAgICBsZXQgcmV0U3RyID0gc3RyLnJlcGxhY2UoL1tBLVphLXowLTkhLX5dL2csIGZ1bmN0aW9uIChzKSB7XHJcbiAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHMuY2hhckNvZGVBdCgwKSArIDB4ZmVlMCk7XHJcbiAgICAgIC8v5Y2K6KeS44Kr44K/44Kr44OK44Gq44Gp44KS5qSc57Si44GX44CB5YWo6KeS44Gr5aSJ5o+b44GZ44KL44Gf44KB44Gu44Oe44OD44OU44Oz44Kw44Kq44OW44K444Kn44Kv44OI77yIaGFsZldpZHRoVG9GdWxsV2lkdGhNYXDvvInjgaflhajop5LmloflrZfjgavlpInmj5tcclxuICAgIH0pO1xyXG4gICAgcmV0U3RyID0gcmV0U3RyLnJlcGxhY2UoL1tcXHVGRjYxLVxcdUZGOUYgXS9nLCBmdW5jdGlvbiAocykge1xyXG4gICAgICByZXR1cm4gaGFsZldpZHRoVG9GdWxsV2lkdGhNYXBbc10gfHwgcztcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJldFN0cjtcclxuICB9XHJcblxyXG4gIHRvSGFsZldpZHRoKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIC8v5YWo6KeS44Gu6Iux5pWw5a2X44KE6KiY5Y+344KS5qSc57Si44GX44CB5YWo6KeS44GL44KJ5Y2K6KeS44Gr5aSJ5o+b44GX44G+44GZ77yI5YWo6KeS44Kz44O844OJ44GL44KJIDB4RkVFMCDjgpLlvJXjgYTjgabljYrop5LjgavjgZnjgovvvIlcclxuICAgIGxldCByZXRTdHIgPSBzdHIucmVwbGFjZSgvW++8gS3vvZ5dL2csIGZ1bmN0aW9uIChzKSB7XHJcbiAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHMuY2hhckNvZGVBdCgwKSAtIDB4ZmVlMCk7XHJcbiAgICAgIC8v5YWo6KeS54mH5Luu5ZCN6KiY5Y+344K544Oa44O844K544Gq44Gp44KS5qSc57Si44GX44CB5Y2K6KeS44Gr5aSJ5o+b44GZ44KL44Gf44KB44Gu44Oe44OD44OU44Oz44Kw44Kq44OW44K444Kn44Kv44OIKCBoYWxmV2lkdGhUb0Z1bGxXaWR0aE1hcCAp44Gn5Y2K6KeS5paH5a2X44Gr5aSJ5o+bXHJcbiAgICB9KTtcclxuICAgIHJldFN0ciA9IHJldFN0ci5yZXBsYWNlKC9b44KsLeODtOOCoS3jg7PjgILjgIHjg7zjgIzjgI3jg7vjgIBdL2csIGZ1bmN0aW9uIChzKSB7XHJcbiAgICAgIHJldHVybiBmdWxsV2lkdGhUb0hhbGZXaWR0aE1hcFtzXSB8fCBzO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmV0U3RyO1xyXG4gIH1cclxuXHJcbiAgICByZWdpc3RlcigpOiB2b2lkIHtcclxuICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdID0gdGhpcztcclxuICAgIH1cclxufVxyXG5uZXcgRnVsbEhhbGZDb252ZXJzaW9uQWN0aW9uKCk7XHJcbiIsImltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7IElGaWVsZCxJQWN0aW9uLElBY3Rpb25SZXN1bHQsIElBY3Rpb25Ob2RlLCBJQWN0aW9uUHJvcGVydHksSUNvbnRleHQsSVZhck5hbWV9IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG4vL+WPs1VJ55S76Z2icHJvcGVydHnjga5uYW1lOuWei++8mlxyXG5pbnRlcmZhY2UgSUxvZ2luVXNlckdldHRlclByb3Bze1xyXG4gICAgLy/lpInmlbDlkI3jgavjgrvjg4Pjg4jvvJrlgKTjgYzjgqrjg5bjgrjjgqfjgq/jg4jjga7lvaLlvI9cclxuICAgIHZlck5hbWU6SVZhck5hbWU7XHJcbn1cclxuLy9JQWN0aW9u44Kk44Oz44K/44OV44Kn44O844K544KS5a6f6KOF44GZ44KL5paw44GX44GE44Kv44Op44K5QWN0aW9u44KS5L2c5oiQ77yaXHJcbmV4cG9ydCBjbGFzcyBMb2dpblVzZXJHZXR0ZXJBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9ue1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgLy9pbXBvcnTjgYvjgonlsI7lhaXpoZXnpLrlrprnvqlcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICAgIC8v5LiK5pa544GuaW50ZXJmYWNlIFByb3Bz44GL44KJ44CBcHJvcHPlj5fjgZHjgovlsZ7mgKfjgpLlrprnvqnvvJpcclxuICAgIHByb3BzOklMb2dpblVzZXJHZXR0ZXJQcm9wcztcclxuICAgIC8v6Zai5pWw5a6a576p44Gr5b+F6KaB44Gq6aGe5ZCN44KS5qeL56+J77yaXHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIC8vcGdBZG1pbkRC44Gr55m76Yyy44GX44Gf44Ki44Kv44K344On44Oz5ZCNKG5hbWUvc3VidGl0bGUp5LiA6Ie044GZ44KL5b+F6KaB44GM44GC44KL77yaXHJcbiAgICAgICAgdGhpcy5uYW1lPVwi44Ot44Kw44Kk44Oz44Om44O844K244O85Y+W5b6XXCI7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1bXTtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICAgICAgLy/jg5fjg63jg5Hjg4bjgqPlsZ7mgKfliJ3mnJ/ljJbvvJpcclxuICAgICAgICB0aGlzLnByb3BzPXtcclxuICAgICAgICAgICAgdmVyTmFtZTp7bmFtZTonJ31cclxuICAgICAgICB9XHJcbiAgICAgICAgLy/jg6rjgrvjg4Pjg4jkuIroqJjnmbvpjLLooajvvJpcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lh6bnkIbjgpLlrp/oo4XjgZnjgotcclxuICogQHBhcmFtIGFjdGlvbk5vZGUg44Ki44Kv44K344On44Oz44OO44O844OJXHJcbiAqIEBwYXJhbSBldmVudCBLaW50b25l44Gu44Kk44OZ44Oz44OIXHJcbiAqIEBwYXJhbSBjb250ZXh0IOOCs+ODs+ODhuOCreOCueODiO+8iOODrOOCs+ODvOODieOAgeWkieaVsOaDheWgseOCkuaMgeOBo+OBpuOBhOOCi++8iVxyXG4gKiBAcmV0dXJucyBcclxuICovXHJcbuOAgOOAgC8v6Z2e5ZCM5pyf5Yem55CG44GC44KL6Zai5pWw5LiL44Gu44GC44KL5bGe5oCn77yaXHJcbiAgICBhc3luYyBwcm9jZXNzKGFjdGlvbk5vZGU6SUFjdGlvbk5vZGUsZXZlbnQ6YW55LGNvbnRleHQ6SUNvbnRleHQpOlByb21pc2U8SUFjdGlvblJlc3VsdD4ge1xyXG4gICAgICAgIGxldCByZXN1bHQ9e1xyXG4gICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDpmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAvL+WxnuaAp+ioreWumuOCkuWPluW+l+OBmeOCi++8mlxyXG4gICAgICAgICAgICB0aGlzLmFjdGlvblByb3BzPWFjdGlvbk5vZGUuYWN0aW9uUHJvcHM7XHJcbiAgICAgICAgICAgIC8v44OX44Ot44OR44OG44Kj6Kit5a6a44Gu44OH44O844K/5Z6L44Gv5b+F6KaB44Gq5oOF5aCx5ZCr44KB44G+44GZ44GL77yf5YWo6YOo5LiN5a2Y5Zyo5pmCcmV0dXJuOlxyXG4gICAgICAgICAgICBpZiAoISgndmVyTmFtZScgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL+aXouWumuOBruODl+ODreODkeODhuOCo+OBruOCpOODs+OCv+ODleOCp+ODvOOCueOBuOWkieaPm++8mlxyXG4gICAgICAgICAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBJTG9naW5Vc2VyR2V0dGVyUHJvcHM7XHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAgICAgICAgIGlmKHRoaXMucHJvcHMudmVyTmFtZSYmdGhpcy5wcm9wcy52ZXJOYW1lLm5hbWUhPT0nJyl7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnZhcmlhYmxlc1t0aGlzLnByb3BzLnZlck5hbWUubmFtZV09a2ludG9uZS5nZXRMb2dpblVzZXIoKTtcclxuICAgICAgICAgICAgICAgIC8vIHdpbmRvdy5hbGVydChcIuWkieaVsOWQjVwiK3RoaXMucHJvcHMudmVyTmFtZS5uYW1lK1wi44Gu5YCk44GvXCIrY29udGV4dC52YXJpYWJsZXNbdGhpcy5wcm9wcy52ZXJOYW1lLm5hbWVdK1wi44Gn44GZXCIpO1xyXG4gICAgICAgICAgICAgICAgLy8gZXZlbnQucmVjb3JkW1wi5aSJ5pWw6YGL55So5YWI44Gu44Om44O844K26YG45oqe44OV44Kj44O844Or44OJXCJdLnZhbHVlPSBbe2NvZGU6Y29udGV4dC52YXJpYWJsZXNbdGhpcy5wcm9wcy52ZXJOYW1lLm5hbWVdLmNvZGV9XTtcclxuICAgICAgICAgICAgfVxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgICAgICByZXN1bHQ9IHtcclxuICAgICAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDp0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICB9Y2F0Y2goZXJyb3I6YW55KXs7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZXJyb3JzLmhhbmRsZUVycm9yKGVycm9yLGFjdGlvbk5vZGUpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgY2FuTmV4dDpmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDpmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV09dGhpcztcclxuICAgIH1cclxufVxyXG5uZXcgTG9naW5Vc2VyR2V0dGVyQWN0aW9uKCk7IiwiLyohXG4gICogQm9vdHN0cmFwIGRhdGEuanMgdjUuMy4zIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKVxuICAqIENvcHlyaWdodCAyMDExLTIwMjQgVGhlIEJvb3RzdHJhcCBBdXRob3JzIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvZ3JhcGhzL2NvbnRyaWJ1dG9ycylcbiAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLkRhdGEgPSBmYWN0b3J5KCkpO1xufSkodGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgZG9tL2RhdGEuanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIC8qKlxuICAgKiBDb25zdGFudHNcbiAgICovXG5cbiAgY29uc3QgZWxlbWVudE1hcCA9IG5ldyBNYXAoKTtcbiAgY29uc3QgZGF0YSA9IHtcbiAgICBzZXQoZWxlbWVudCwga2V5LCBpbnN0YW5jZSkge1xuICAgICAgaWYgKCFlbGVtZW50TWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgICBlbGVtZW50TWFwLnNldChlbGVtZW50LCBuZXcgTWFwKCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5zdGFuY2VNYXAgPSBlbGVtZW50TWFwLmdldChlbGVtZW50KTtcblxuICAgICAgLy8gbWFrZSBpdCBjbGVhciB3ZSBvbmx5IHdhbnQgb25lIGluc3RhbmNlIHBlciBlbGVtZW50XG4gICAgICAvLyBjYW4gYmUgcmVtb3ZlZCBsYXRlciB3aGVuIG11bHRpcGxlIGtleS9pbnN0YW5jZXMgYXJlIGZpbmUgdG8gYmUgdXNlZFxuICAgICAgaWYgKCFpbnN0YW5jZU1hcC5oYXMoa2V5KSAmJiBpbnN0YW5jZU1hcC5zaXplICE9PSAwKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEJvb3RzdHJhcCBkb2Vzbid0IGFsbG93IG1vcmUgdGhhbiBvbmUgaW5zdGFuY2UgcGVyIGVsZW1lbnQuIEJvdW5kIGluc3RhbmNlOiAke0FycmF5LmZyb20oaW5zdGFuY2VNYXAua2V5cygpKVswXX0uYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGluc3RhbmNlTWFwLnNldChrZXksIGluc3RhbmNlKTtcbiAgICB9LFxuICAgIGdldChlbGVtZW50LCBrZXkpIHtcbiAgICAgIGlmIChlbGVtZW50TWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZWxlbWVudE1hcC5nZXQoZWxlbWVudCkuZ2V0KGtleSkgfHwgbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcmVtb3ZlKGVsZW1lbnQsIGtleSkge1xuICAgICAgaWYgKCFlbGVtZW50TWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpbnN0YW5jZU1hcCA9IGVsZW1lbnRNYXAuZ2V0KGVsZW1lbnQpO1xuICAgICAgaW5zdGFuY2VNYXAuZGVsZXRlKGtleSk7XG5cbiAgICAgIC8vIGZyZWUgdXAgZWxlbWVudCByZWZlcmVuY2VzIGlmIHRoZXJlIGFyZSBubyBpbnN0YW5jZXMgbGVmdCBmb3IgYW4gZWxlbWVudFxuICAgICAgaWYgKGluc3RhbmNlTWFwLnNpemUgPT09IDApIHtcbiAgICAgICAgZWxlbWVudE1hcC5kZWxldGUoZWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBkYXRhO1xuXG59KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhLmpzLm1hcFxuIiwiLyohXG4gICogQm9vdHN0cmFwIGluZGV4LmpzIHY1LjMuMyAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDI0IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGZhY3RvcnkoZ2xvYmFsLkluZGV4ID0ge30pKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCB1dGlsL2luZGV4LmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICBjb25zdCBNQVhfVUlEID0gMTAwMDAwMDtcbiAgY29uc3QgTUlMTElTRUNPTkRTX01VTFRJUExJRVIgPSAxMDAwO1xuICBjb25zdCBUUkFOU0lUSU9OX0VORCA9ICd0cmFuc2l0aW9uZW5kJztcblxuICAvKipcbiAgICogUHJvcGVybHkgZXNjYXBlIElEcyBzZWxlY3RvcnMgdG8gaGFuZGxlIHdlaXJkIElEc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGNvbnN0IHBhcnNlU2VsZWN0b3IgPSBzZWxlY3RvciA9PiB7XG4gICAgaWYgKHNlbGVjdG9yICYmIHdpbmRvdy5DU1MgJiYgd2luZG93LkNTUy5lc2NhcGUpIHtcbiAgICAgIC8vIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IgbmVlZHMgZXNjYXBpbmcgdG8gaGFuZGxlIElEcyAoaHRtbDUrKSBjb250YWluaW5nIGZvciBpbnN0YW5jZSAvXG4gICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLnJlcGxhY2UoLyMoW15cXHNcIiMnXSspL2csIChtYXRjaCwgaWQpID0+IGAjJHtDU1MuZXNjYXBlKGlkKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdG9yO1xuICB9O1xuXG4gIC8vIFNob3V0LW91dCBBbmd1cyBDcm9sbCAoaHR0cHM6Ly9nb28uZ2wvcHh3UUdwKVxuICBjb25zdCB0b1R5cGUgPSBvYmplY3QgPT4ge1xuICAgIGlmIChvYmplY3QgPT09IG51bGwgfHwgb2JqZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBgJHtvYmplY3R9YDtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpLm1hdGNoKC9cXHMoW2Etel0rKS9pKVsxXS50b0xvd2VyQ2FzZSgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgVXRpbCBBUElcbiAgICovXG5cbiAgY29uc3QgZ2V0VUlEID0gcHJlZml4ID0+IHtcbiAgICBkbyB7XG4gICAgICBwcmVmaXggKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogTUFYX1VJRCk7XG4gICAgfSB3aGlsZSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJlZml4KSk7XG4gICAgcmV0dXJuIHByZWZpeDtcbiAgfTtcbiAgY29uc3QgZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQgPSBlbGVtZW50ID0+IHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8vIEdldCB0cmFuc2l0aW9uLWR1cmF0aW9uIG9mIHRoZSBlbGVtZW50XG4gICAgbGV0IHtcbiAgICAgIHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICAgIHRyYW5zaXRpb25EZWxheVxuICAgIH0gPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICBjb25zdCBmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiA9IE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgY29uc3QgZmxvYXRUcmFuc2l0aW9uRGVsYXkgPSBOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpO1xuXG4gICAgLy8gUmV0dXJuIDAgaWYgZWxlbWVudCBvciB0cmFuc2l0aW9uIGR1cmF0aW9uIGlzIG5vdCBmb3VuZFxuICAgIGlmICghZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24gJiYgIWZsb2F0VHJhbnNpdGlvbkRlbGF5KSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvLyBJZiBtdWx0aXBsZSBkdXJhdGlvbnMgYXJlIGRlZmluZWQsIHRha2UgdGhlIGZpcnN0XG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uLnNwbGl0KCcsJylbMF07XG4gICAgdHJhbnNpdGlvbkRlbGF5ID0gdHJhbnNpdGlvbkRlbGF5LnNwbGl0KCcsJylbMF07XG4gICAgcmV0dXJuIChOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pICsgTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkRlbGF5KSkgKiBNSUxMSVNFQ09ORFNfTVVMVElQTElFUjtcbiAgfTtcbiAgY29uc3QgdHJpZ2dlclRyYW5zaXRpb25FbmQgPSBlbGVtZW50ID0+IHtcbiAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFRSQU5TSVRJT05fRU5EKSk7XG4gIH07XG4gIGNvbnN0IGlzRWxlbWVudCA9IG9iamVjdCA9PiB7XG4gICAgaWYgKCFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmplY3QuanF1ZXJ5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgb2JqZWN0ID0gb2JqZWN0WzBdO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIG9iamVjdC5ub2RlVHlwZSAhPT0gJ3VuZGVmaW5lZCc7XG4gIH07XG4gIGNvbnN0IGdldEVsZW1lbnQgPSBvYmplY3QgPT4ge1xuICAgIC8vIGl0J3MgYSBqUXVlcnkgb2JqZWN0IG9yIGEgbm9kZSBlbGVtZW50XG4gICAgaWYgKGlzRWxlbWVudChvYmplY3QpKSB7XG4gICAgICByZXR1cm4gb2JqZWN0LmpxdWVyeSA/IG9iamVjdFswXSA6IG9iamVjdDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihwYXJzZVNlbGVjdG9yKG9iamVjdCkpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbiAgY29uc3QgaXNWaXNpYmxlID0gZWxlbWVudCA9PiB7XG4gICAgaWYgKCFpc0VsZW1lbnQoZWxlbWVudCkgfHwgZWxlbWVudC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50SXNWaXNpYmxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCd2aXNpYmlsaXR5JykgPT09ICd2aXNpYmxlJztcbiAgICAvLyBIYW5kbGUgYGRldGFpbHNgIGVsZW1lbnQgYXMgaXRzIGNvbnRlbnQgbWF5IGZhbHNpZSBhcHBlYXIgdmlzaWJsZSB3aGVuIGl0IGlzIGNsb3NlZFxuICAgIGNvbnN0IGNsb3NlZERldGFpbHMgPSBlbGVtZW50LmNsb3Nlc3QoJ2RldGFpbHM6bm90KFtvcGVuXSknKTtcbiAgICBpZiAoIWNsb3NlZERldGFpbHMpIHtcbiAgICAgIHJldHVybiBlbGVtZW50SXNWaXNpYmxlO1xuICAgIH1cbiAgICBpZiAoY2xvc2VkRGV0YWlscyAhPT0gZWxlbWVudCkge1xuICAgICAgY29uc3Qgc3VtbWFyeSA9IGVsZW1lbnQuY2xvc2VzdCgnc3VtbWFyeScpO1xuICAgICAgaWYgKHN1bW1hcnkgJiYgc3VtbWFyeS5wYXJlbnROb2RlICE9PSBjbG9zZWREZXRhaWxzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChzdW1tYXJ5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnRJc1Zpc2libGU7XG4gIH07XG4gIGNvbnN0IGlzRGlzYWJsZWQgPSBlbGVtZW50ID0+IHtcbiAgICBpZiAoIWVsZW1lbnQgfHwgZWxlbWVudC5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGVsZW1lbnQuZGlzYWJsZWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZWxlbWVudC5kaXNhYmxlZDtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkaXNhYmxlZCcpICE9PSAnZmFsc2UnO1xuICB9O1xuICBjb25zdCBmaW5kU2hhZG93Um9vdCA9IGVsZW1lbnQgPT4ge1xuICAgIGlmICghZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmF0dGFjaFNoYWRvdykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gQ2FuIGZpbmQgdGhlIHNoYWRvdyByb290IG90aGVyd2lzZSBpdCdsbCByZXR1cm4gdGhlIGRvY3VtZW50XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50LmdldFJvb3ROb2RlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCByb290ID0gZWxlbWVudC5nZXRSb290Tm9kZSgpO1xuICAgICAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IG51bGw7XG4gICAgfVxuICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLy8gd2hlbiB3ZSBkb24ndCBmaW5kIGEgc2hhZG93IHJvb3RcbiAgICBpZiAoIWVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBmaW5kU2hhZG93Um9vdChlbGVtZW50LnBhcmVudE5vZGUpO1xuICB9O1xuICBjb25zdCBub29wID0gKCkgPT4ge307XG5cbiAgLyoqXG4gICAqIFRyaWNrIHRvIHJlc3RhcnQgYW4gZWxlbWVudCdzIGFuaW1hdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gICAqIEByZXR1cm4gdm9pZFxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LmNoYXJpc3RoZW8uaW8vYmxvZy8yMDIxLzAyL3Jlc3RhcnQtYS1jc3MtYW5pbWF0aW9uLXdpdGgtamF2YXNjcmlwdC8jcmVzdGFydGluZy1hLWNzcy1hbmltYXRpb25cbiAgICovXG4gIGNvbnN0IHJlZmxvdyA9IGVsZW1lbnQgPT4ge1xuICAgIGVsZW1lbnQub2Zmc2V0SGVpZ2h0OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuICB9O1xuICBjb25zdCBnZXRqUXVlcnkgPSAoKSA9PiB7XG4gICAgaWYgKHdpbmRvdy5qUXVlcnkgJiYgIWRvY3VtZW50LmJvZHkuaGFzQXR0cmlidXRlKCdkYXRhLWJzLW5vLWpxdWVyeScpKSB7XG4gICAgICByZXR1cm4gd2luZG93LmpRdWVyeTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIGNvbnN0IERPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MgPSBbXTtcbiAgY29uc3Qgb25ET01Db250ZW50TG9hZGVkID0gY2FsbGJhY2sgPT4ge1xuICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIHtcbiAgICAgIC8vIGFkZCBsaXN0ZW5lciBvbiB0aGUgZmlyc3QgY2FsbCB3aGVuIHRoZSBkb2N1bWVudCBpcyBpbiBsb2FkaW5nIHN0YXRlXG4gICAgICBpZiAoIURPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MubGVuZ3RoKSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzKSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaXNSVEwgPSAoKSA9PiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGlyID09PSAncnRsJztcbiAgY29uc3QgZGVmaW5lSlF1ZXJ5UGx1Z2luID0gcGx1Z2luID0+IHtcbiAgICBvbkRPTUNvbnRlbnRMb2FkZWQoKCkgPT4ge1xuICAgICAgY29uc3QgJCA9IGdldGpRdWVyeSgpO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoJCkge1xuICAgICAgICBjb25zdCBuYW1lID0gcGx1Z2luLk5BTUU7XG4gICAgICAgIGNvbnN0IEpRVUVSWV9OT19DT05GTElDVCA9ICQuZm5bbmFtZV07XG4gICAgICAgICQuZm5bbmFtZV0gPSBwbHVnaW4ualF1ZXJ5SW50ZXJmYWNlO1xuICAgICAgICAkLmZuW25hbWVdLkNvbnN0cnVjdG9yID0gcGx1Z2luO1xuICAgICAgICAkLmZuW25hbWVdLm5vQ29uZmxpY3QgPSAoKSA9PiB7XG4gICAgICAgICAgJC5mbltuYW1lXSA9IEpRVUVSWV9OT19DT05GTElDVDtcbiAgICAgICAgICByZXR1cm4gcGx1Z2luLmpRdWVyeUludGVyZmFjZTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgZXhlY3V0ZSA9IChwb3NzaWJsZUNhbGxiYWNrLCBhcmdzID0gW10sIGRlZmF1bHRWYWx1ZSA9IHBvc3NpYmxlQ2FsbGJhY2spID0+IHtcbiAgICByZXR1cm4gdHlwZW9mIHBvc3NpYmxlQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBwb3NzaWJsZUNhbGxiYWNrKC4uLmFyZ3MpIDogZGVmYXVsdFZhbHVlO1xuICB9O1xuICBjb25zdCBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uID0gKGNhbGxiYWNrLCB0cmFuc2l0aW9uRWxlbWVudCwgd2FpdEZvclRyYW5zaXRpb24gPSB0cnVlKSA9PiB7XG4gICAgaWYgKCF3YWl0Rm9yVHJhbnNpdGlvbikge1xuICAgICAgZXhlY3V0ZShjYWxsYmFjayk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGR1cmF0aW9uUGFkZGluZyA9IDU7XG4gICAgY29uc3QgZW11bGF0ZWREdXJhdGlvbiA9IGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRyYW5zaXRpb25FbGVtZW50KSArIGR1cmF0aW9uUGFkZGluZztcbiAgICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gICAgY29uc3QgaGFuZGxlciA9ICh7XG4gICAgICB0YXJnZXRcbiAgICB9KSA9PiB7XG4gICAgICBpZiAodGFyZ2V0ICE9PSB0cmFuc2l0aW9uRWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgdHJhbnNpdGlvbkVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihUUkFOU0lUSU9OX0VORCwgaGFuZGxlcik7XG4gICAgICBleGVjdXRlKGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIHRyYW5zaXRpb25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoVFJBTlNJVElPTl9FTkQsIGhhbmRsZXIpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgICAgdHJpZ2dlclRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0sIGVtdWxhdGVkRHVyYXRpb24pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHByZXZpb3VzL25leHQgZWxlbWVudCBvZiBhIGxpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7YXJyYXl9IGxpc3QgICAgVGhlIGxpc3Qgb2YgZWxlbWVudHNcbiAgICogQHBhcmFtIGFjdGl2ZUVsZW1lbnQgICBUaGUgYWN0aXZlIGVsZW1lbnRcbiAgICogQHBhcmFtIHNob3VsZEdldE5leHQgICBDaG9vc2UgdG8gZ2V0IG5leHQgb3IgcHJldmlvdXMgZWxlbWVudFxuICAgKiBAcGFyYW0gaXNDeWNsZUFsbG93ZWRcbiAgICogQHJldHVybiB7RWxlbWVudHxlbGVtfSBUaGUgcHJvcGVyIGVsZW1lbnRcbiAgICovXG4gIGNvbnN0IGdldE5leHRBY3RpdmVFbGVtZW50ID0gKGxpc3QsIGFjdGl2ZUVsZW1lbnQsIHNob3VsZEdldE5leHQsIGlzQ3ljbGVBbGxvd2VkKSA9PiB7XG4gICAgY29uc3QgbGlzdExlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIGxldCBpbmRleCA9IGxpc3QuaW5kZXhPZihhY3RpdmVFbGVtZW50KTtcblxuICAgIC8vIGlmIHRoZSBlbGVtZW50IGRvZXMgbm90IGV4aXN0IGluIHRoZSBsaXN0IHJldHVybiBhbiBlbGVtZW50XG4gICAgLy8gZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24gYW5kIGlmIGN5Y2xlIGlzIGFsbG93ZWRcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gIXNob3VsZEdldE5leHQgJiYgaXNDeWNsZUFsbG93ZWQgPyBsaXN0W2xpc3RMZW5ndGggLSAxXSA6IGxpc3RbMF07XG4gICAgfVxuICAgIGluZGV4ICs9IHNob3VsZEdldE5leHQgPyAxIDogLTE7XG4gICAgaWYgKGlzQ3ljbGVBbGxvd2VkKSB7XG4gICAgICBpbmRleCA9IChpbmRleCArIGxpc3RMZW5ndGgpICUgbGlzdExlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3RbTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIGxpc3RMZW5ndGggLSAxKSldO1xuICB9O1xuXG4gIGV4cG9ydHMuZGVmaW5lSlF1ZXJ5UGx1Z2luID0gZGVmaW5lSlF1ZXJ5UGx1Z2luO1xuICBleHBvcnRzLmV4ZWN1dGUgPSBleGVjdXRlO1xuICBleHBvcnRzLmV4ZWN1dGVBZnRlclRyYW5zaXRpb24gPSBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uO1xuICBleHBvcnRzLmZpbmRTaGFkb3dSb290ID0gZmluZFNoYWRvd1Jvb3Q7XG4gIGV4cG9ydHMuZ2V0RWxlbWVudCA9IGdldEVsZW1lbnQ7XG4gIGV4cG9ydHMuZ2V0TmV4dEFjdGl2ZUVsZW1lbnQgPSBnZXROZXh0QWN0aXZlRWxlbWVudDtcbiAgZXhwb3J0cy5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCA9IGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50O1xuICBleHBvcnRzLmdldFVJRCA9IGdldFVJRDtcbiAgZXhwb3J0cy5nZXRqUXVlcnkgPSBnZXRqUXVlcnk7XG4gIGV4cG9ydHMuaXNEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIGV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuICBleHBvcnRzLmlzUlRMID0gaXNSVEw7XG4gIGV4cG9ydHMuaXNWaXNpYmxlID0gaXNWaXNpYmxlO1xuICBleHBvcnRzLm5vb3AgPSBub29wO1xuICBleHBvcnRzLm9uRE9NQ29udGVudExvYWRlZCA9IG9uRE9NQ29udGVudExvYWRlZDtcbiAgZXhwb3J0cy5wYXJzZVNlbGVjdG9yID0gcGFyc2VTZWxlY3RvcjtcbiAgZXhwb3J0cy5yZWZsb3cgPSByZWZsb3c7XG4gIGV4cG9ydHMudG9UeXBlID0gdG9UeXBlO1xuICBleHBvcnRzLnRyaWdnZXJUcmFuc2l0aW9uRW5kID0gdHJpZ2dlclRyYW5zaXRpb25FbmQ7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwiLyohXG4gICogQm9vdHN0cmFwIGV2ZW50LWhhbmRsZXIuanMgdjUuMy4zIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKVxuICAqIENvcHlyaWdodCAyMDExLTIwMjQgVGhlIEJvb3RzdHJhcCBBdXRob3JzIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvZ3JhcGhzL2NvbnRyaWJ1dG9ycylcbiAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCcuLi91dGlsL2luZGV4LmpzJykpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vdXRpbC9pbmRleCddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5FdmVudEhhbmRsZXIgPSBmYWN0b3J5KGdsb2JhbC5JbmRleCkpO1xufSkodGhpcywgKGZ1bmN0aW9uIChpbmRleF9qcykgeyAndXNlIHN0cmljdCc7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCBkb20vZXZlbnQtaGFuZGxlci5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cblxuICAvKipcbiAgICogQ29uc3RhbnRzXG4gICAqL1xuXG4gIGNvbnN0IG5hbWVzcGFjZVJlZ2V4ID0gL1teLl0qKD89XFwuLiopXFwufC4qLztcbiAgY29uc3Qgc3RyaXBOYW1lUmVnZXggPSAvXFwuLiovO1xuICBjb25zdCBzdHJpcFVpZFJlZ2V4ID0gLzo6XFxkKyQvO1xuICBjb25zdCBldmVudFJlZ2lzdHJ5ID0ge307IC8vIEV2ZW50cyBzdG9yYWdlXG4gIGxldCB1aWRFdmVudCA9IDE7XG4gIGNvbnN0IGN1c3RvbUV2ZW50cyA9IHtcbiAgICBtb3VzZWVudGVyOiAnbW91c2VvdmVyJyxcbiAgICBtb3VzZWxlYXZlOiAnbW91c2VvdXQnXG4gIH07XG4gIGNvbnN0IG5hdGl2ZUV2ZW50cyA9IG5ldyBTZXQoWydjbGljaycsICdkYmxjbGljaycsICdtb3VzZXVwJywgJ21vdXNlZG93bicsICdjb250ZXh0bWVudScsICdtb3VzZXdoZWVsJywgJ0RPTU1vdXNlU2Nyb2xsJywgJ21vdXNlb3ZlcicsICdtb3VzZW91dCcsICdtb3VzZW1vdmUnLCAnc2VsZWN0c3RhcnQnLCAnc2VsZWN0ZW5kJywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnb3JpZW50YXRpb25jaGFuZ2UnLCAndG91Y2hzdGFydCcsICd0b3VjaG1vdmUnLCAndG91Y2hlbmQnLCAndG91Y2hjYW5jZWwnLCAncG9pbnRlcmRvd24nLCAncG9pbnRlcm1vdmUnLCAncG9pbnRlcnVwJywgJ3BvaW50ZXJsZWF2ZScsICdwb2ludGVyY2FuY2VsJywgJ2dlc3R1cmVzdGFydCcsICdnZXN0dXJlY2hhbmdlJywgJ2dlc3R1cmVlbmQnLCAnZm9jdXMnLCAnYmx1cicsICdjaGFuZ2UnLCAncmVzZXQnLCAnc2VsZWN0JywgJ3N1Ym1pdCcsICdmb2N1c2luJywgJ2ZvY3Vzb3V0JywgJ2xvYWQnLCAndW5sb2FkJywgJ2JlZm9yZXVubG9hZCcsICdyZXNpemUnLCAnbW92ZScsICdET01Db250ZW50TG9hZGVkJywgJ3JlYWR5c3RhdGVjaGFuZ2UnLCAnZXJyb3InLCAnYWJvcnQnLCAnc2Nyb2xsJ10pO1xuXG4gIC8qKlxuICAgKiBQcml2YXRlIG1ldGhvZHNcbiAgICovXG5cbiAgZnVuY3Rpb24gbWFrZUV2ZW50VWlkKGVsZW1lbnQsIHVpZCkge1xuICAgIHJldHVybiB1aWQgJiYgYCR7dWlkfTo6JHt1aWRFdmVudCsrfWAgfHwgZWxlbWVudC51aWRFdmVudCB8fCB1aWRFdmVudCsrO1xuICB9XG4gIGZ1bmN0aW9uIGdldEVsZW1lbnRFdmVudHMoZWxlbWVudCkge1xuICAgIGNvbnN0IHVpZCA9IG1ha2VFdmVudFVpZChlbGVtZW50KTtcbiAgICBlbGVtZW50LnVpZEV2ZW50ID0gdWlkO1xuICAgIGV2ZW50UmVnaXN0cnlbdWlkXSA9IGV2ZW50UmVnaXN0cnlbdWlkXSB8fCB7fTtcbiAgICByZXR1cm4gZXZlbnRSZWdpc3RyeVt1aWRdO1xuICB9XG4gIGZ1bmN0aW9uIGJvb3RzdHJhcEhhbmRsZXIoZWxlbWVudCwgZm4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaGFuZGxlcihldmVudCkge1xuICAgICAgaHlkcmF0ZU9iaihldmVudCwge1xuICAgICAgICBkZWxlZ2F0ZVRhcmdldDogZWxlbWVudFxuICAgICAgfSk7XG4gICAgICBpZiAoaGFuZGxlci5vbmVPZmYpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCBldmVudC50eXBlLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm4uYXBwbHkoZWxlbWVudCwgW2V2ZW50XSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBib290c3RyYXBEZWxlZ2F0aW9uSGFuZGxlcihlbGVtZW50LCBzZWxlY3RvciwgZm4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaGFuZGxlcihldmVudCkge1xuICAgICAgY29uc3QgZG9tRWxlbWVudHMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgICAgZm9yIChsZXQge1xuICAgICAgICB0YXJnZXRcbiAgICAgIH0gPSBldmVudDsgdGFyZ2V0ICYmIHRhcmdldCAhPT0gdGhpczsgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGUpIHtcbiAgICAgICAgZm9yIChjb25zdCBkb21FbGVtZW50IG9mIGRvbUVsZW1lbnRzKSB7XG4gICAgICAgICAgaWYgKGRvbUVsZW1lbnQgIT09IHRhcmdldCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGh5ZHJhdGVPYmooZXZlbnQsIHtcbiAgICAgICAgICAgIGRlbGVnYXRlVGFyZ2V0OiB0YXJnZXRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoaGFuZGxlci5vbmVPZmYpIHtcbiAgICAgICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgZXZlbnQudHlwZSwgc2VsZWN0b3IsIGZuKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRhcmdldCwgW2V2ZW50XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGZpbmRIYW5kbGVyKGV2ZW50cywgY2FsbGFibGUsIGRlbGVnYXRpb25TZWxlY3RvciA9IG51bGwpIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhldmVudHMpLmZpbmQoZXZlbnQgPT4gZXZlbnQuY2FsbGFibGUgPT09IGNhbGxhYmxlICYmIGV2ZW50LmRlbGVnYXRpb25TZWxlY3RvciA9PT0gZGVsZWdhdGlvblNlbGVjdG9yKTtcbiAgfVxuICBmdW5jdGlvbiBub3JtYWxpemVQYXJhbWV0ZXJzKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgICBjb25zdCBpc0RlbGVnYXRlZCA9IHR5cGVvZiBoYW5kbGVyID09PSAnc3RyaW5nJztcbiAgICAvLyBUT0RPOiB0b29sdGlwIHBhc3NlcyBgZmFsc2VgIGluc3RlYWQgb2Ygc2VsZWN0b3IsIHNvIHdlIG5lZWQgdG8gY2hlY2tcbiAgICBjb25zdCBjYWxsYWJsZSA9IGlzRGVsZWdhdGVkID8gZGVsZWdhdGlvbkZ1bmN0aW9uIDogaGFuZGxlciB8fCBkZWxlZ2F0aW9uRnVuY3Rpb247XG4gICAgbGV0IHR5cGVFdmVudCA9IGdldFR5cGVFdmVudChvcmlnaW5hbFR5cGVFdmVudCk7XG4gICAgaWYgKCFuYXRpdmVFdmVudHMuaGFzKHR5cGVFdmVudCkpIHtcbiAgICAgIHR5cGVFdmVudCA9IG9yaWdpbmFsVHlwZUV2ZW50O1xuICAgIH1cbiAgICByZXR1cm4gW2lzRGVsZWdhdGVkLCBjYWxsYWJsZSwgdHlwZUV2ZW50XTtcbiAgfVxuICBmdW5jdGlvbiBhZGRIYW5kbGVyKGVsZW1lbnQsIG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24sIG9uZU9mZikge1xuICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxUeXBlRXZlbnQgIT09ICdzdHJpbmcnIHx8ICFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBbaXNEZWxlZ2F0ZWQsIGNhbGxhYmxlLCB0eXBlRXZlbnRdID0gbm9ybWFsaXplUGFyYW1ldGVycyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKTtcblxuICAgIC8vIGluIGNhc2Ugb2YgbW91c2VlbnRlciBvciBtb3VzZWxlYXZlIHdyYXAgdGhlIGhhbmRsZXIgd2l0aGluIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgZm9yIGl0cyBET00gcG9zaXRpb25cbiAgICAvLyB0aGlzIHByZXZlbnRzIHRoZSBoYW5kbGVyIGZyb20gYmVpbmcgZGlzcGF0Y2hlZCB0aGUgc2FtZSB3YXkgYXMgbW91c2VvdmVyIG9yIG1vdXNlb3V0IGRvZXNcbiAgICBpZiAob3JpZ2luYWxUeXBlRXZlbnQgaW4gY3VzdG9tRXZlbnRzKSB7XG4gICAgICBjb25zdCB3cmFwRnVuY3Rpb24gPSBmbiA9PiB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIWV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgZXZlbnQucmVsYXRlZFRhcmdldCAhPT0gZXZlbnQuZGVsZWdhdGVUYXJnZXQgJiYgIWV2ZW50LmRlbGVnYXRlVGFyZ2V0LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCBldmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIGNhbGxhYmxlID0gd3JhcEZ1bmN0aW9uKGNhbGxhYmxlKTtcbiAgICB9XG4gICAgY29uc3QgZXZlbnRzID0gZ2V0RWxlbWVudEV2ZW50cyhlbGVtZW50KTtcbiAgICBjb25zdCBoYW5kbGVycyA9IGV2ZW50c1t0eXBlRXZlbnRdIHx8IChldmVudHNbdHlwZUV2ZW50XSA9IHt9KTtcbiAgICBjb25zdCBwcmV2aW91c0Z1bmN0aW9uID0gZmluZEhhbmRsZXIoaGFuZGxlcnMsIGNhbGxhYmxlLCBpc0RlbGVnYXRlZCA/IGhhbmRsZXIgOiBudWxsKTtcbiAgICBpZiAocHJldmlvdXNGdW5jdGlvbikge1xuICAgICAgcHJldmlvdXNGdW5jdGlvbi5vbmVPZmYgPSBwcmV2aW91c0Z1bmN0aW9uLm9uZU9mZiAmJiBvbmVPZmY7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHVpZCA9IG1ha2VFdmVudFVpZChjYWxsYWJsZSwgb3JpZ2luYWxUeXBlRXZlbnQucmVwbGFjZShuYW1lc3BhY2VSZWdleCwgJycpKTtcbiAgICBjb25zdCBmbiA9IGlzRGVsZWdhdGVkID8gYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIoZWxlbWVudCwgaGFuZGxlciwgY2FsbGFibGUpIDogYm9vdHN0cmFwSGFuZGxlcihlbGVtZW50LCBjYWxsYWJsZSk7XG4gICAgZm4uZGVsZWdhdGlvblNlbGVjdG9yID0gaXNEZWxlZ2F0ZWQgPyBoYW5kbGVyIDogbnVsbDtcbiAgICBmbi5jYWxsYWJsZSA9IGNhbGxhYmxlO1xuICAgIGZuLm9uZU9mZiA9IG9uZU9mZjtcbiAgICBmbi51aWRFdmVudCA9IHVpZDtcbiAgICBoYW5kbGVyc1t1aWRdID0gZm47XG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGVFdmVudCwgZm4sIGlzRGVsZWdhdGVkKTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uU2VsZWN0b3IpIHtcbiAgICBjb25zdCBmbiA9IGZpbmRIYW5kbGVyKGV2ZW50c1t0eXBlRXZlbnRdLCBoYW5kbGVyLCBkZWxlZ2F0aW9uU2VsZWN0b3IpO1xuICAgIGlmICghZm4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGVFdmVudCwgZm4sIEJvb2xlYW4oZGVsZWdhdGlvblNlbGVjdG9yKSk7XG4gICAgZGVsZXRlIGV2ZW50c1t0eXBlRXZlbnRdW2ZuLnVpZEV2ZW50XTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIG5hbWVzcGFjZSkge1xuICAgIGNvbnN0IHN0b3JlRWxlbWVudEV2ZW50ID0gZXZlbnRzW3R5cGVFdmVudF0gfHwge307XG4gICAgZm9yIChjb25zdCBbaGFuZGxlcktleSwgZXZlbnRdIG9mIE9iamVjdC5lbnRyaWVzKHN0b3JlRWxlbWVudEV2ZW50KSkge1xuICAgICAgaWYgKGhhbmRsZXJLZXkuaW5jbHVkZXMobmFtZXNwYWNlKSkge1xuICAgICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBldmVudC5jYWxsYWJsZSwgZXZlbnQuZGVsZWdhdGlvblNlbGVjdG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZ2V0VHlwZUV2ZW50KGV2ZW50KSB7XG4gICAgLy8gYWxsb3cgdG8gZ2V0IHRoZSBuYXRpdmUgZXZlbnRzIGZyb20gbmFtZXNwYWNlZCBldmVudHMgKCdjbGljay5icy5idXR0b24nIC0tPiAnY2xpY2snKVxuICAgIGV2ZW50ID0gZXZlbnQucmVwbGFjZShzdHJpcE5hbWVSZWdleCwgJycpO1xuICAgIHJldHVybiBjdXN0b21FdmVudHNbZXZlbnRdIHx8IGV2ZW50O1xuICB9XG4gIGNvbnN0IEV2ZW50SGFuZGxlciA9IHtcbiAgICBvbihlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gICAgICBhZGRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24sIGZhbHNlKTtcbiAgICB9LFxuICAgIG9uZShlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gICAgICBhZGRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24sIHRydWUpO1xuICAgIH0sXG4gICAgb2ZmKGVsZW1lbnQsIG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxUeXBlRXZlbnQgIT09ICdzdHJpbmcnIHx8ICFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IFtpc0RlbGVnYXRlZCwgY2FsbGFibGUsIHR5cGVFdmVudF0gPSBub3JtYWxpemVQYXJhbWV0ZXJzKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pO1xuICAgICAgY29uc3QgaW5OYW1lc3BhY2UgPSB0eXBlRXZlbnQgIT09IG9yaWdpbmFsVHlwZUV2ZW50O1xuICAgICAgY29uc3QgZXZlbnRzID0gZ2V0RWxlbWVudEV2ZW50cyhlbGVtZW50KTtcbiAgICAgIGNvbnN0IHN0b3JlRWxlbWVudEV2ZW50ID0gZXZlbnRzW3R5cGVFdmVudF0gfHwge307XG4gICAgICBjb25zdCBpc05hbWVzcGFjZSA9IG9yaWdpbmFsVHlwZUV2ZW50LnN0YXJ0c1dpdGgoJy4nKTtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGFibGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIFNpbXBsZXN0IGNhc2U6IGhhbmRsZXIgaXMgcGFzc2VkLCByZW1vdmUgdGhhdCBsaXN0ZW5lciBPTkxZLlxuICAgICAgICBpZiAoIU9iamVjdC5rZXlzKHN0b3JlRWxlbWVudEV2ZW50KS5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgY2FsbGFibGUsIGlzRGVsZWdhdGVkID8gaGFuZGxlciA6IG51bGwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoaXNOYW1lc3BhY2UpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50RXZlbnQgb2YgT2JqZWN0LmtleXMoZXZlbnRzKSkge1xuICAgICAgICAgIHJlbW92ZU5hbWVzcGFjZWRIYW5kbGVycyhlbGVtZW50LCBldmVudHMsIGVsZW1lbnRFdmVudCwgb3JpZ2luYWxUeXBlRXZlbnQuc2xpY2UoMSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtrZXlIYW5kbGVycywgZXZlbnRdIG9mIE9iamVjdC5lbnRyaWVzKHN0b3JlRWxlbWVudEV2ZW50KSkge1xuICAgICAgICBjb25zdCBoYW5kbGVyS2V5ID0ga2V5SGFuZGxlcnMucmVwbGFjZShzdHJpcFVpZFJlZ2V4LCAnJyk7XG4gICAgICAgIGlmICghaW5OYW1lc3BhY2UgfHwgb3JpZ2luYWxUeXBlRXZlbnQuaW5jbHVkZXMoaGFuZGxlcktleSkpIHtcbiAgICAgICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBldmVudC5jYWxsYWJsZSwgZXZlbnQuZGVsZWdhdGlvblNlbGVjdG9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgdHJpZ2dlcihlbGVtZW50LCBldmVudCwgYXJncykge1xuICAgICAgaWYgKHR5cGVvZiBldmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCAkID0gaW5kZXhfanMuZ2V0alF1ZXJ5KCk7XG4gICAgICBjb25zdCB0eXBlRXZlbnQgPSBnZXRUeXBlRXZlbnQoZXZlbnQpO1xuICAgICAgY29uc3QgaW5OYW1lc3BhY2UgPSBldmVudCAhPT0gdHlwZUV2ZW50O1xuICAgICAgbGV0IGpRdWVyeUV2ZW50ID0gbnVsbDtcbiAgICAgIGxldCBidWJibGVzID0gdHJ1ZTtcbiAgICAgIGxldCBuYXRpdmVEaXNwYXRjaCA9IHRydWU7XG4gICAgICBsZXQgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xuICAgICAgaWYgKGluTmFtZXNwYWNlICYmICQpIHtcbiAgICAgICAgalF1ZXJ5RXZlbnQgPSAkLkV2ZW50KGV2ZW50LCBhcmdzKTtcbiAgICAgICAgJChlbGVtZW50KS50cmlnZ2VyKGpRdWVyeUV2ZW50KTtcbiAgICAgICAgYnViYmxlcyA9ICFqUXVlcnlFdmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO1xuICAgICAgICBuYXRpdmVEaXNwYXRjaCA9ICFqUXVlcnlFdmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpO1xuICAgICAgICBkZWZhdWx0UHJldmVudGVkID0galF1ZXJ5RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBldnQgPSBoeWRyYXRlT2JqKG5ldyBFdmVudChldmVudCwge1xuICAgICAgICBidWJibGVzLFxuICAgICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgICB9KSwgYXJncyk7XG4gICAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICAgIGlmIChuYXRpdmVEaXNwYXRjaCkge1xuICAgICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICAgIH1cbiAgICAgIGlmIChldnQuZGVmYXVsdFByZXZlbnRlZCAmJiBqUXVlcnlFdmVudCkge1xuICAgICAgICBqUXVlcnlFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV2dDtcbiAgICB9XG4gIH07XG4gIGZ1bmN0aW9uIGh5ZHJhdGVPYmoob2JqLCBtZXRhID0ge30pIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXRhKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgIH0gY2F0Y2ggKF91bnVzZWQpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcmV0dXJuIEV2ZW50SGFuZGxlcjtcblxufSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXZlbnQtaGFuZGxlci5qcy5tYXBcbiIsIi8qIVxuICAqIEJvb3RzdHJhcCBtYW5pcHVsYXRvci5qcyB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwuTWFuaXB1bGF0b3IgPSBmYWN0b3J5KCkpO1xufSkodGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgZG9tL21hbmlwdWxhdG9yLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICBmdW5jdGlvbiBub3JtYWxpemVEYXRhKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSAndHJ1ZScpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSBOdW1iZXIodmFsdWUpLnRvU3RyaW5nKCkpIHtcbiAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSAnbnVsbCcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG4gICAgfSBjYXRjaCAoX3VudXNlZCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBub3JtYWxpemVEYXRhS2V5KGtleSkge1xuICAgIHJldHVybiBrZXkucmVwbGFjZSgvW0EtWl0vZywgY2hyID0+IGAtJHtjaHIudG9Mb3dlckNhc2UoKX1gKTtcbiAgfVxuICBjb25zdCBNYW5pcHVsYXRvciA9IHtcbiAgICBzZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSwgdmFsdWUpIHtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGBkYXRhLWJzLSR7bm9ybWFsaXplRGF0YUtleShrZXkpfWAsIHZhbHVlKTtcbiAgICB9LFxuICAgIHJlbW92ZURhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5KSB7XG4gICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gKTtcbiAgICB9LFxuICAgIGdldERhdGFBdHRyaWJ1dGVzKGVsZW1lbnQpIHtcbiAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0ge307XG4gICAgICBjb25zdCBic0tleXMgPSBPYmplY3Qua2V5cyhlbGVtZW50LmRhdGFzZXQpLmZpbHRlcihrZXkgPT4ga2V5LnN0YXJ0c1dpdGgoJ2JzJykgJiYgIWtleS5zdGFydHNXaXRoKCdic0NvbmZpZycpKTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGJzS2V5cykge1xuICAgICAgICBsZXQgcHVyZUtleSA9IGtleS5yZXBsYWNlKC9eYnMvLCAnJyk7XG4gICAgICAgIHB1cmVLZXkgPSBwdXJlS2V5LmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgcHVyZUtleS5zbGljZSgxLCBwdXJlS2V5Lmxlbmd0aCk7XG4gICAgICAgIGF0dHJpYnV0ZXNbcHVyZUtleV0gPSBub3JtYWxpemVEYXRhKGVsZW1lbnQuZGF0YXNldFtrZXldKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgIH0sXG4gICAgZ2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBrZXkpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVEYXRhKGVsZW1lbnQuZ2V0QXR0cmlidXRlKGBkYXRhLWJzLSR7bm9ybWFsaXplRGF0YUtleShrZXkpfWApKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIE1hbmlwdWxhdG9yO1xuXG59KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYW5pcHVsYXRvci5qcy5tYXBcbiIsIi8qIVxuICAqIEJvb3RzdHJhcCBjb25maWcuanMgdjUuMy4zIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKVxuICAqIENvcHlyaWdodCAyMDExLTIwMjQgVGhlIEJvb3RzdHJhcCBBdXRob3JzIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvZ3JhcGhzL2NvbnRyaWJ1dG9ycylcbiAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCcuLi9kb20vbWFuaXB1bGF0b3IuanMnKSwgcmVxdWlyZSgnLi9pbmRleC5qcycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL2RvbS9tYW5pcHVsYXRvcicsICcuL2luZGV4J10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLkNvbmZpZyA9IGZhY3RvcnkoZ2xvYmFsLk1hbmlwdWxhdG9yLCBnbG9iYWwuSW5kZXgpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoTWFuaXB1bGF0b3IsIGluZGV4X2pzKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwIHV0aWwvY29uZmlnLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gIC8qKlxuICAgKiBDbGFzcyBkZWZpbml0aW9uXG4gICAqL1xuXG4gIGNsYXNzIENvbmZpZyB7XG4gICAgLy8gR2V0dGVyc1xuICAgIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgaGF2ZSB0byBpbXBsZW1lbnQgdGhlIHN0YXRpYyBtZXRob2QgXCJOQU1FXCIsIGZvciBlYWNoIGNvbXBvbmVudCEnKTtcbiAgICB9XG4gICAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICAgIGNvbmZpZyA9IHRoaXMuX21lcmdlQ29uZmlnT2JqKGNvbmZpZyk7XG4gICAgICBjb25maWcgPSB0aGlzLl9jb25maWdBZnRlck1lcmdlKGNvbmZpZyk7XG4gICAgICB0aGlzLl90eXBlQ2hlY2tDb25maWcoY29uZmlnKTtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuICAgIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9XG4gICAgX21lcmdlQ29uZmlnT2JqKGNvbmZpZywgZWxlbWVudCkge1xuICAgICAgY29uc3QganNvbkNvbmZpZyA9IGluZGV4X2pzLmlzRWxlbWVudChlbGVtZW50KSA/IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwgJ2NvbmZpZycpIDoge307IC8vIHRyeSB0byBwYXJzZVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHQsXG4gICAgICAgIC4uLih0eXBlb2YganNvbkNvbmZpZyA9PT0gJ29iamVjdCcgPyBqc29uQ29uZmlnIDoge30pLFxuICAgICAgICAuLi4oaW5kZXhfanMuaXNFbGVtZW50KGVsZW1lbnQpID8gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXMoZWxlbWVudCkgOiB7fSksXG4gICAgICAgIC4uLih0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyA/IGNvbmZpZyA6IHt9KVxuICAgICAgfTtcbiAgICB9XG4gICAgX3R5cGVDaGVja0NvbmZpZyhjb25maWcsIGNvbmZpZ1R5cGVzID0gdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSkge1xuICAgICAgZm9yIChjb25zdCBbcHJvcGVydHksIGV4cGVjdGVkVHlwZXNdIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZ1R5cGVzKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbmZpZ1twcm9wZXJ0eV07XG4gICAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IGluZGV4X2pzLmlzRWxlbWVudCh2YWx1ZSkgPyAnZWxlbWVudCcgOiBpbmRleF9qcy50b1R5cGUodmFsdWUpO1xuICAgICAgICBpZiAoIW5ldyBSZWdFeHAoZXhwZWN0ZWRUeXBlcykudGVzdCh2YWx1ZVR5cGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUUudG9VcHBlckNhc2UoKX06IE9wdGlvbiBcIiR7cHJvcGVydHl9XCIgcHJvdmlkZWQgdHlwZSBcIiR7dmFsdWVUeXBlfVwiIGJ1dCBleHBlY3RlZCB0eXBlIFwiJHtleHBlY3RlZFR5cGVzfVwiLmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIENvbmZpZztcblxufSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uZmlnLmpzLm1hcFxuIiwiLyohXG4gICogQm9vdHN0cmFwIGJhc2UtY29tcG9uZW50LmpzIHY1LjMuMyAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDI0IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnLi9kb20vZGF0YS5qcycpLCByZXF1aXJlKCcuL2RvbS9ldmVudC1oYW5kbGVyLmpzJyksIHJlcXVpcmUoJy4vdXRpbC9jb25maWcuanMnKSwgcmVxdWlyZSgnLi91dGlsL2luZGV4LmpzJykpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi9kb20vZGF0YScsICcuL2RvbS9ldmVudC1oYW5kbGVyJywgJy4vdXRpbC9jb25maWcnLCAnLi91dGlsL2luZGV4J10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLkJhc2VDb21wb25lbnQgPSBmYWN0b3J5KGdsb2JhbC5EYXRhLCBnbG9iYWwuRXZlbnRIYW5kbGVyLCBnbG9iYWwuQ29uZmlnLCBnbG9iYWwuSW5kZXgpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoRGF0YSwgRXZlbnRIYW5kbGVyLCBDb25maWcsIGluZGV4X2pzKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwIGJhc2UtY29tcG9uZW50LmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gIC8qKlxuICAgKiBDb25zdGFudHNcbiAgICovXG5cbiAgY29uc3QgVkVSU0lPTiA9ICc1LjMuMyc7XG5cbiAgLyoqXG4gICAqIENsYXNzIGRlZmluaXRpb25cbiAgICovXG5cbiAgY2xhc3MgQmFzZUNvbXBvbmVudCBleHRlbmRzIENvbmZpZyB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgZWxlbWVudCA9IGluZGV4X2pzLmdldEVsZW1lbnQoZWxlbWVudCk7XG4gICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICAgIERhdGEuc2V0KHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVksIHRoaXMpO1xuICAgIH1cblxuICAgIC8vIFB1YmxpY1xuICAgIGRpc3Bvc2UoKSB7XG4gICAgICBEYXRhLnJlbW92ZSh0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZKTtcbiAgICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9LRVkpO1xuICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIHtcbiAgICAgICAgdGhpc1twcm9wZXJ0eU5hbWVdID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgX3F1ZXVlQ2FsbGJhY2soY2FsbGJhY2ssIGVsZW1lbnQsIGlzQW5pbWF0ZWQgPSB0cnVlKSB7XG4gICAgICBpbmRleF9qcy5leGVjdXRlQWZ0ZXJUcmFuc2l0aW9uKGNhbGxiYWNrLCBlbGVtZW50LCBpc0FuaW1hdGVkKTtcbiAgICB9XG4gICAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICAgIGNvbmZpZyA9IHRoaXMuX21lcmdlQ29uZmlnT2JqKGNvbmZpZywgdGhpcy5fZWxlbWVudCk7XG4gICAgICBjb25maWcgPSB0aGlzLl9jb25maWdBZnRlck1lcmdlKGNvbmZpZyk7XG4gICAgICB0aGlzLl90eXBlQ2hlY2tDb25maWcoY29uZmlnKTtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgLy8gU3RhdGljXG4gICAgc3RhdGljIGdldEluc3RhbmNlKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBEYXRhLmdldChpbmRleF9qcy5nZXRFbGVtZW50KGVsZW1lbnQpLCB0aGlzLkRBVEFfS0VZKTtcbiAgICB9XG4gICAgc3RhdGljIGdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCwgY29uZmlnID0ge30pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEluc3RhbmNlKGVsZW1lbnQpIHx8IG5ldyB0aGlzKGVsZW1lbnQsIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnID8gY29uZmlnIDogbnVsbCk7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgVkVSU0lPTigpIHtcbiAgICAgIHJldHVybiBWRVJTSU9OO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0IERBVEFfS0VZKCkge1xuICAgICAgcmV0dXJuIGBicy4ke3RoaXMuTkFNRX1gO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0IEVWRU5UX0tFWSgpIHtcbiAgICAgIHJldHVybiBgLiR7dGhpcy5EQVRBX0tFWX1gO1xuICAgIH1cbiAgICBzdGF0aWMgZXZlbnROYW1lKG5hbWUpIHtcbiAgICAgIHJldHVybiBgJHtuYW1lfSR7dGhpcy5FVkVOVF9LRVl9YDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gQmFzZUNvbXBvbmVudDtcblxufSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmFzZS1jb21wb25lbnQuanMubWFwXG4iLCIvKiFcbiAgKiBCb290c3RyYXAgc2VsZWN0b3ItZW5naW5lLmpzIHY1LjMuMyAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDI0IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnLi4vdXRpbC9pbmRleC5qcycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL3V0aWwvaW5kZXgnXSwgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwuU2VsZWN0b3JFbmdpbmUgPSBmYWN0b3J5KGdsb2JhbC5JbmRleCkpO1xufSkodGhpcywgKGZ1bmN0aW9uIChpbmRleF9qcykgeyAndXNlIHN0cmljdCc7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCBkb20vc2VsZWN0b3ItZW5naW5lLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICBjb25zdCBnZXRTZWxlY3RvciA9IGVsZW1lbnQgPT4ge1xuICAgIGxldCBzZWxlY3RvciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLXRhcmdldCcpO1xuICAgIGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09ICcjJykge1xuICAgICAgbGV0IGhyZWZBdHRyaWJ1dGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuXG4gICAgICAvLyBUaGUgb25seSB2YWxpZCBjb250ZW50IHRoYXQgY291bGQgZG91YmxlIGFzIGEgc2VsZWN0b3IgYXJlIElEcyBvciBjbGFzc2VzLFxuICAgICAgLy8gc28gZXZlcnl0aGluZyBzdGFydGluZyB3aXRoIGAjYCBvciBgLmAuIElmIGEgXCJyZWFsXCIgVVJMIGlzIHVzZWQgYXMgdGhlIHNlbGVjdG9yLFxuICAgICAgLy8gYGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JgIHdpbGwgcmlnaHRmdWxseSBjb21wbGFpbiBpdCBpcyBpbnZhbGlkLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMzIyNzNcbiAgICAgIGlmICghaHJlZkF0dHJpYnV0ZSB8fCAhaHJlZkF0dHJpYnV0ZS5pbmNsdWRlcygnIycpICYmICFocmVmQXR0cmlidXRlLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gSnVzdCBpbiBjYXNlIHNvbWUgQ01TIHB1dHMgb3V0IGEgZnVsbCBVUkwgd2l0aCB0aGUgYW5jaG9yIGFwcGVuZGVkXG4gICAgICBpZiAoaHJlZkF0dHJpYnV0ZS5pbmNsdWRlcygnIycpICYmICFocmVmQXR0cmlidXRlLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgICBocmVmQXR0cmlidXRlID0gYCMke2hyZWZBdHRyaWJ1dGUuc3BsaXQoJyMnKVsxXX1gO1xuICAgICAgfVxuICAgICAgc2VsZWN0b3IgPSBocmVmQXR0cmlidXRlICYmIGhyZWZBdHRyaWJ1dGUgIT09ICcjJyA/IGhyZWZBdHRyaWJ1dGUudHJpbSgpIDogbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdG9yID8gc2VsZWN0b3Iuc3BsaXQoJywnKS5tYXAoc2VsID0+IGluZGV4X2pzLnBhcnNlU2VsZWN0b3Ioc2VsKSkuam9pbignLCcpIDogbnVsbDtcbiAgfTtcbiAgY29uc3QgU2VsZWN0b3JFbmdpbmUgPSB7XG4gICAgZmluZChzZWxlY3RvciwgZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgcmV0dXJuIFtdLmNvbmNhdCguLi5FbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsLmNhbGwoZWxlbWVudCwgc2VsZWN0b3IpKTtcbiAgICB9LFxuICAgIGZpbmRPbmUoc2VsZWN0b3IsIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBFbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yLmNhbGwoZWxlbWVudCwgc2VsZWN0b3IpO1xuICAgIH0sXG4gICAgY2hpbGRyZW4oZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBbXS5jb25jYXQoLi4uZWxlbWVudC5jaGlsZHJlbikuZmlsdGVyKGNoaWxkID0+IGNoaWxkLm1hdGNoZXMoc2VsZWN0b3IpKTtcbiAgICB9LFxuICAgIHBhcmVudHMoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgICAgIGxldCBhbmNlc3RvciA9IGVsZW1lbnQucGFyZW50Tm9kZS5jbG9zZXN0KHNlbGVjdG9yKTtcbiAgICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgICBwYXJlbnRzLnB1c2goYW5jZXN0b3IpO1xuICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGUuY2xvc2VzdChzZWxlY3Rvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyZW50cztcbiAgICB9LFxuICAgIHByZXYoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICAgIGxldCBwcmV2aW91cyA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgICAgIHdoaWxlIChwcmV2aW91cykge1xuICAgICAgICBpZiAocHJldmlvdXMubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgICByZXR1cm4gW3ByZXZpb3VzXTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91cyA9IHByZXZpb3VzLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSxcbiAgICAvLyBUT0RPOiB0aGlzIGlzIG5vdyB1bnVzZWQ7IHJlbW92ZSBsYXRlciBhbG9uZyB3aXRoIHByZXYoKVxuICAgIG5leHQoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICAgIGxldCBuZXh0ID0gZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICB3aGlsZSAobmV4dCkge1xuICAgICAgICBpZiAobmV4dC5tYXRjaGVzKHNlbGVjdG9yKSkge1xuICAgICAgICAgIHJldHVybiBbbmV4dF07XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCA9IG5leHQubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0sXG4gICAgZm9jdXNhYmxlQ2hpbGRyZW4oZWxlbWVudCkge1xuICAgICAgY29uc3QgZm9jdXNhYmxlcyA9IFsnYScsICdidXR0b24nLCAnaW5wdXQnLCAndGV4dGFyZWEnLCAnc2VsZWN0JywgJ2RldGFpbHMnLCAnW3RhYmluZGV4XScsICdbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXSddLm1hcChzZWxlY3RvciA9PiBgJHtzZWxlY3Rvcn06bm90KFt0YWJpbmRleF49XCItXCJdKWApLmpvaW4oJywnKTtcbiAgICAgIHJldHVybiB0aGlzLmZpbmQoZm9jdXNhYmxlcywgZWxlbWVudCkuZmlsdGVyKGVsID0+ICFpbmRleF9qcy5pc0Rpc2FibGVkKGVsKSAmJiBpbmRleF9qcy5pc1Zpc2libGUoZWwpKTtcbiAgICB9LFxuICAgIGdldFNlbGVjdG9yRnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihlbGVtZW50KTtcbiAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShzZWxlY3RvcikgPyBzZWxlY3RvciA6IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIGdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCkge1xuICAgICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihlbGVtZW50KTtcbiAgICAgIHJldHVybiBzZWxlY3RvciA/IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IpIDogbnVsbDtcbiAgICB9LFxuICAgIGdldE11bHRpcGxlRWxlbWVudHNGcm9tU2VsZWN0b3IoZWxlbWVudCkge1xuICAgICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihlbGVtZW50KTtcbiAgICAgIHJldHVybiBzZWxlY3RvciA/IFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IpIDogW107XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBTZWxlY3RvckVuZ2luZTtcblxufSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VsZWN0b3ItZW5naW5lLmpzLm1hcFxuIiwiLyohXG4gICogQm9vdHN0cmFwIGJhY2tkcm9wLmpzIHY1LjMuMyAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDI0IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnLi4vZG9tL2V2ZW50LWhhbmRsZXIuanMnKSwgcmVxdWlyZSgnLi9jb25maWcuanMnKSwgcmVxdWlyZSgnLi9pbmRleC5qcycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL2RvbS9ldmVudC1oYW5kbGVyJywgJy4vY29uZmlnJywgJy4vaW5kZXgnXSwgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwuQmFja2Ryb3AgPSBmYWN0b3J5KGdsb2JhbC5FdmVudEhhbmRsZXIsIGdsb2JhbC5Db25maWcsIGdsb2JhbC5JbmRleCkpO1xufSkodGhpcywgKGZ1bmN0aW9uIChFdmVudEhhbmRsZXIsIENvbmZpZywgaW5kZXhfanMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgdXRpbC9iYWNrZHJvcC5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cblxuICAvKipcbiAgICogQ29uc3RhbnRzXG4gICAqL1xuXG4gIGNvbnN0IE5BTUUgPSAnYmFja2Ryb3AnO1xuICBjb25zdCBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSc7XG4gIGNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93JztcbiAgY29uc3QgRVZFTlRfTU9VU0VET1dOID0gYG1vdXNlZG93bi5icy4ke05BTUV9YDtcbiAgY29uc3QgRGVmYXVsdCA9IHtcbiAgICBjbGFzc05hbWU6ICdtb2RhbC1iYWNrZHJvcCcsXG4gICAgY2xpY2tDYWxsYmFjazogbnVsbCxcbiAgICBpc0FuaW1hdGVkOiBmYWxzZSxcbiAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgLy8gaWYgZmFsc2UsIHdlIHVzZSB0aGUgYmFja2Ryb3AgaGVscGVyIHdpdGhvdXQgYWRkaW5nIGFueSBlbGVtZW50IHRvIHRoZSBkb21cbiAgICByb290RWxlbWVudDogJ2JvZHknIC8vIGdpdmUgdGhlIGNob2ljZSB0byBwbGFjZSBiYWNrZHJvcCB1bmRlciBkaWZmZXJlbnQgZWxlbWVudHNcbiAgfTtcbiAgY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjbGlja0NhbGxiYWNrOiAnKGZ1bmN0aW9ufG51bGwpJyxcbiAgICBpc0FuaW1hdGVkOiAnYm9vbGVhbicsXG4gICAgaXNWaXNpYmxlOiAnYm9vbGVhbicsXG4gICAgcm9vdEVsZW1lbnQ6ICcoZWxlbWVudHxzdHJpbmcpJ1xuICB9O1xuXG4gIC8qKlxuICAgKiBDbGFzcyBkZWZpbml0aW9uXG4gICAqL1xuXG4gIGNsYXNzIEJhY2tkcm9wIGV4dGVuZHMgQ29uZmlnIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICAgIHRoaXMuX2lzQXBwZW5kZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIEdldHRlcnNcbiAgICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgICByZXR1cm4gRGVmYXVsdDtcbiAgICB9XG4gICAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICAgIHJldHVybiBEZWZhdWx0VHlwZTtcbiAgICB9XG4gICAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgICAgcmV0dXJuIE5BTUU7XG4gICAgfVxuXG4gICAgLy8gUHVibGljXG4gICAgc2hvdyhjYWxsYmFjaykge1xuICAgICAgaWYgKCF0aGlzLl9jb25maWcuaXNWaXNpYmxlKSB7XG4gICAgICAgIGluZGV4X2pzLmV4ZWN1dGUoY2FsbGJhY2spO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9hcHBlbmQoKTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9nZXRFbGVtZW50KCk7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQpIHtcbiAgICAgICAgaW5kZXhfanMucmVmbG93KGVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyk7XG4gICAgICB0aGlzLl9lbXVsYXRlQW5pbWF0aW9uKCgpID0+IHtcbiAgICAgICAgaW5kZXhfanMuZXhlY3V0ZShjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaGlkZShjYWxsYmFjaykge1xuICAgICAgaWYgKCF0aGlzLl9jb25maWcuaXNWaXNpYmxlKSB7XG4gICAgICAgIGluZGV4X2pzLmV4ZWN1dGUoY2FsbGJhY2spO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9nZXRFbGVtZW50KCkuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpO1xuICAgICAgdGhpcy5fZW11bGF0ZUFuaW1hdGlvbigoKSA9PiB7XG4gICAgICAgIHRoaXMuZGlzcG9zZSgpO1xuICAgICAgICBpbmRleF9qcy5leGVjdXRlKGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBkaXNwb3NlKCkge1xuICAgICAgaWYgKCF0aGlzLl9pc0FwcGVuZGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlKCk7XG4gICAgICB0aGlzLl9pc0FwcGVuZGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gUHJpdmF0ZVxuICAgIF9nZXRFbGVtZW50KCkge1xuICAgICAgaWYgKCF0aGlzLl9lbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGJhY2tkcm9wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGJhY2tkcm9wLmNsYXNzTmFtZSA9IHRoaXMuX2NvbmZpZy5jbGFzc05hbWU7XG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuaXNBbmltYXRlZCkge1xuICAgICAgICAgIGJhY2tkcm9wLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9GQURFKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lbGVtZW50ID0gYmFja2Ryb3A7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fZWxlbWVudDtcbiAgICB9XG4gICAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgICAvLyB1c2UgZ2V0RWxlbWVudCgpIHdpdGggdGhlIGRlZmF1bHQgXCJib2R5XCIgdG8gZ2V0IGEgZnJlc2ggRWxlbWVudCBvbiBlYWNoIGluc3RhbnRpYXRpb25cbiAgICAgIGNvbmZpZy5yb290RWxlbWVudCA9IGluZGV4X2pzLmdldEVsZW1lbnQoY29uZmlnLnJvb3RFbGVtZW50KTtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuICAgIF9hcHBlbmQoKSB7XG4gICAgICBpZiAodGhpcy5faXNBcHBlbmRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZ2V0RWxlbWVudCgpO1xuICAgICAgdGhpcy5fY29uZmlnLnJvb3RFbGVtZW50LmFwcGVuZChlbGVtZW50KTtcbiAgICAgIEV2ZW50SGFuZGxlci5vbihlbGVtZW50LCBFVkVOVF9NT1VTRURPV04sICgpID0+IHtcbiAgICAgICAgaW5kZXhfanMuZXhlY3V0ZSh0aGlzLl9jb25maWcuY2xpY2tDYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX2lzQXBwZW5kZWQgPSB0cnVlO1xuICAgIH1cbiAgICBfZW11bGF0ZUFuaW1hdGlvbihjYWxsYmFjaykge1xuICAgICAgaW5kZXhfanMuZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbihjYWxsYmFjaywgdGhpcy5fZ2V0RWxlbWVudCgpLCB0aGlzLl9jb25maWcuaXNBbmltYXRlZCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIEJhY2tkcm9wO1xuXG59KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iYWNrZHJvcC5qcy5tYXBcbiIsIi8qIVxuICAqIEJvb3RzdHJhcCBjb21wb25lbnQtZnVuY3Rpb25zLmpzIHY1LjMuMyAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDI0IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMsIHJlcXVpcmUoJy4uL2RvbS9ldmVudC1oYW5kbGVyLmpzJyksIHJlcXVpcmUoJy4uL2RvbS9zZWxlY3Rvci1lbmdpbmUuanMnKSwgcmVxdWlyZSgnLi9pbmRleC5qcycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnLCAnLi4vZG9tL2V2ZW50LWhhbmRsZXInLCAnLi4vZG9tL3NlbGVjdG9yLWVuZ2luZScsICcuL2luZGV4J10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZmFjdG9yeShnbG9iYWwuQ29tcG9uZW50RnVuY3Rpb25zID0ge30sIGdsb2JhbC5FdmVudEhhbmRsZXIsIGdsb2JhbC5TZWxlY3RvckVuZ2luZSwgZ2xvYmFsLkluZGV4KSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMsIEV2ZW50SGFuZGxlciwgU2VsZWN0b3JFbmdpbmUsIGluZGV4X2pzKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwIHV0aWwvY29tcG9uZW50LWZ1bmN0aW9ucy5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgY29uc3QgZW5hYmxlRGlzbWlzc1RyaWdnZXIgPSAoY29tcG9uZW50LCBtZXRob2QgPSAnaGlkZScpID0+IHtcbiAgICBjb25zdCBjbGlja0V2ZW50ID0gYGNsaWNrLmRpc21pc3Mke2NvbXBvbmVudC5FVkVOVF9LRVl9YDtcbiAgICBjb25zdCBuYW1lID0gY29tcG9uZW50Lk5BTUU7XG4gICAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBjbGlja0V2ZW50LCBgW2RhdGEtYnMtZGlzbWlzcz1cIiR7bmFtZX1cIl1gLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleF9qcy5pc0Rpc2FibGVkKHRoaXMpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcykgfHwgdGhpcy5jbG9zZXN0KGAuJHtuYW1lfWApO1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBjb21wb25lbnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpO1xuXG4gICAgICAvLyBNZXRob2QgYXJndW1lbnQgaXMgbGVmdCwgZm9yIEFsZXJ0IGFuZCBvbmx5LCBhcyBpdCBkb2Vzbid0IGltcGxlbWVudCB0aGUgJ2hpZGUnIG1ldGhvZFxuICAgICAgaW5zdGFuY2VbbWV0aG9kXSgpO1xuICAgIH0pO1xuICB9O1xuXG4gIGV4cG9ydHMuZW5hYmxlRGlzbWlzc1RyaWdnZXIgPSBlbmFibGVEaXNtaXNzVHJpZ2dlcjtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblxufSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tcG9uZW50LWZ1bmN0aW9ucy5qcy5tYXBcbiIsIi8qIVxuICAqIEJvb3RzdHJhcCBmb2N1c3RyYXAuanMgdjUuMy4zIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKVxuICAqIENvcHlyaWdodCAyMDExLTIwMjQgVGhlIEJvb3RzdHJhcCBBdXRob3JzIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvZ3JhcGhzL2NvbnRyaWJ1dG9ycylcbiAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCcuLi9kb20vZXZlbnQtaGFuZGxlci5qcycpLCByZXF1aXJlKCcuLi9kb20vc2VsZWN0b3ItZW5naW5lLmpzJyksIHJlcXVpcmUoJy4vY29uZmlnLmpzJykpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vZG9tL2V2ZW50LWhhbmRsZXInLCAnLi4vZG9tL3NlbGVjdG9yLWVuZ2luZScsICcuL2NvbmZpZyddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5Gb2N1c3RyYXAgPSBmYWN0b3J5KGdsb2JhbC5FdmVudEhhbmRsZXIsIGdsb2JhbC5TZWxlY3RvckVuZ2luZSwgZ2xvYmFsLkNvbmZpZykpO1xufSkodGhpcywgKGZ1bmN0aW9uIChFdmVudEhhbmRsZXIsIFNlbGVjdG9yRW5naW5lLCBDb25maWcpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgdXRpbC9mb2N1c3RyYXAuanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgLyoqXG4gICAqIENvbnN0YW50c1xuICAgKi9cblxuICBjb25zdCBOQU1FID0gJ2ZvY3VzdHJhcCc7XG4gIGNvbnN0IERBVEFfS0VZID0gJ2JzLmZvY3VzdHJhcCc7XG4gIGNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gO1xuICBjb25zdCBFVkVOVF9GT0NVU0lOID0gYGZvY3VzaW4ke0VWRU5UX0tFWX1gO1xuICBjb25zdCBFVkVOVF9LRVlET1dOX1RBQiA9IGBrZXlkb3duLnRhYiR7RVZFTlRfS0VZfWA7XG4gIGNvbnN0IFRBQl9LRVkgPSAnVGFiJztcbiAgY29uc3QgVEFCX05BVl9GT1JXQVJEID0gJ2ZvcndhcmQnO1xuICBjb25zdCBUQUJfTkFWX0JBQ0tXQVJEID0gJ2JhY2t3YXJkJztcbiAgY29uc3QgRGVmYXVsdCA9IHtcbiAgICBhdXRvZm9jdXM6IHRydWUsXG4gICAgdHJhcEVsZW1lbnQ6IG51bGwgLy8gVGhlIGVsZW1lbnQgdG8gdHJhcCBmb2N1cyBpbnNpZGUgb2ZcbiAgfTtcbiAgY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gICAgYXV0b2ZvY3VzOiAnYm9vbGVhbicsXG4gICAgdHJhcEVsZW1lbnQ6ICdlbGVtZW50J1xuICB9O1xuXG4gIC8qKlxuICAgKiBDbGFzcyBkZWZpbml0aW9uXG4gICAqL1xuXG4gIGNsYXNzIEZvY3VzVHJhcCBleHRlbmRzIENvbmZpZyB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gR2V0dGVyc1xuICAgIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICAgIHJldHVybiBEZWZhdWx0O1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgICAgcmV0dXJuIERlZmF1bHRUeXBlO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgICByZXR1cm4gTkFNRTtcbiAgICB9XG5cbiAgICAvLyBQdWJsaWNcbiAgICBhY3RpdmF0ZSgpIHtcbiAgICAgIGlmICh0aGlzLl9pc0FjdGl2ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmF1dG9mb2N1cykge1xuICAgICAgICB0aGlzLl9jb25maWcudHJhcEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICAgIEV2ZW50SGFuZGxlci5vZmYoZG9jdW1lbnQsIEVWRU5UX0tFWSk7IC8vIGd1YXJkIGFnYWluc3QgaW5maW5pdGUgZm9jdXMgbG9vcFxuICAgICAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9GT0NVU0lOLCBldmVudCA9PiB0aGlzLl9oYW5kbGVGb2N1c2luKGV2ZW50KSk7XG4gICAgICBFdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fVEFCLCBldmVudCA9PiB0aGlzLl9oYW5kbGVLZXlkb3duKGV2ZW50KSk7XG4gICAgICB0aGlzLl9pc0FjdGl2ZSA9IHRydWU7XG4gICAgfVxuICAgIGRlYWN0aXZhdGUoKSB7XG4gICAgICBpZiAoIXRoaXMuX2lzQWN0aXZlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7XG4gICAgICBFdmVudEhhbmRsZXIub2ZmKGRvY3VtZW50LCBFVkVOVF9LRVkpO1xuICAgIH1cblxuICAgIC8vIFByaXZhdGVcbiAgICBfaGFuZGxlRm9jdXNpbihldmVudCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB0cmFwRWxlbWVudFxuICAgICAgfSA9IHRoaXMuX2NvbmZpZztcbiAgICAgIGlmIChldmVudC50YXJnZXQgPT09IGRvY3VtZW50IHx8IGV2ZW50LnRhcmdldCA9PT0gdHJhcEVsZW1lbnQgfHwgdHJhcEVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBlbGVtZW50cyA9IFNlbGVjdG9yRW5naW5lLmZvY3VzYWJsZUNoaWxkcmVuKHRyYXBFbGVtZW50KTtcbiAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdHJhcEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9PT0gVEFCX05BVl9CQUNLV0FSRCkge1xuICAgICAgICBlbGVtZW50c1tlbGVtZW50cy5sZW5ndGggLSAxXS5mb2N1cygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudHNbMF0uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgX2hhbmRsZUtleWRvd24oZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5rZXkgIT09IFRBQl9LRVkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9IGV2ZW50LnNoaWZ0S2V5ID8gVEFCX05BVl9CQUNLV0FSRCA6IFRBQl9OQVZfRk9SV0FSRDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gRm9jdXNUcmFwO1xuXG59KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mb2N1c3RyYXAuanMubWFwXG4iLCIvKiFcbiAgKiBCb290c3RyYXAgc2Nyb2xsYmFyLmpzIHY1LjMuMyAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDI0IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnLi4vZG9tL21hbmlwdWxhdG9yLmpzJyksIHJlcXVpcmUoJy4uL2RvbS9zZWxlY3Rvci1lbmdpbmUuanMnKSwgcmVxdWlyZSgnLi9pbmRleC5qcycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL2RvbS9tYW5pcHVsYXRvcicsICcuLi9kb20vc2VsZWN0b3ItZW5naW5lJywgJy4vaW5kZXgnXSwgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwuU2Nyb2xsYmFyID0gZmFjdG9yeShnbG9iYWwuTWFuaXB1bGF0b3IsIGdsb2JhbC5TZWxlY3RvckVuZ2luZSwgZ2xvYmFsLkluZGV4KSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKE1hbmlwdWxhdG9yLCBTZWxlY3RvckVuZ2luZSwgaW5kZXhfanMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgdXRpbC9zY3JvbGxCYXIuanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgLyoqXG4gICAqIENvbnN0YW50c1xuICAgKi9cblxuICBjb25zdCBTRUxFQ1RPUl9GSVhFRF9DT05URU5UID0gJy5maXhlZC10b3AsIC5maXhlZC1ib3R0b20sIC5pcy1maXhlZCwgLnN0aWNreS10b3AnO1xuICBjb25zdCBTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCA9ICcuc3RpY2t5LXRvcCc7XG4gIGNvbnN0IFBST1BFUlRZX1BBRERJTkcgPSAncGFkZGluZy1yaWdodCc7XG4gIGNvbnN0IFBST1BFUlRZX01BUkdJTiA9ICdtYXJnaW4tcmlnaHQnO1xuXG4gIC8qKlxuICAgKiBDbGFzcyBkZWZpbml0aW9uXG4gICAqL1xuXG4gIGNsYXNzIFNjcm9sbEJhckhlbHBlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gZG9jdW1lbnQuYm9keTtcbiAgICB9XG5cbiAgICAvLyBQdWJsaWNcbiAgICBnZXRXaWR0aCgpIHtcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3cvaW5uZXJXaWR0aCN1c2FnZV9ub3Rlc1xuICAgICAgY29uc3QgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgIHJldHVybiBNYXRoLmFicyh3aW5kb3cuaW5uZXJXaWR0aCAtIGRvY3VtZW50V2lkdGgpO1xuICAgIH1cbiAgICBoaWRlKCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKCk7XG4gICAgICB0aGlzLl9kaXNhYmxlT3ZlckZsb3coKTtcbiAgICAgIC8vIGdpdmUgcGFkZGluZyB0byBlbGVtZW50IHRvIGJhbGFuY2UgdGhlIGhpZGRlbiBzY3JvbGxiYXIgd2lkdGhcbiAgICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsIFBST1BFUlRZX1BBRERJTkcsIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgKyB3aWR0aCk7XG4gICAgICAvLyB0cmljazogV2UgYWRqdXN0IHBvc2l0aXZlIHBhZGRpbmdSaWdodCBhbmQgbmVnYXRpdmUgbWFyZ2luUmlnaHQgdG8gc3RpY2t5LXRvcCBlbGVtZW50cyB0byBrZWVwIHNob3dpbmcgZnVsbHdpZHRoXG4gICAgICB0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9GSVhFRF9DT05URU5ULCBQUk9QRVJUWV9QQURESU5HLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlICsgd2lkdGgpO1xuICAgICAgdGhpcy5fc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQsIFBST1BFUlRZX01BUkdJTiwgY2FsY3VsYXRlZFZhbHVlID0+IGNhbGN1bGF0ZWRWYWx1ZSAtIHdpZHRoKTtcbiAgICB9XG4gICAgcmVzZXQoKSB7XG4gICAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsICdvdmVyZmxvdycpO1xuICAgICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCBQUk9QRVJUWV9QQURESU5HKTtcbiAgICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfRklYRURfQ09OVEVOVCwgUFJPUEVSVFlfUEFERElORyk7XG4gICAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX1NUSUNLWV9DT05URU5ULCBQUk9QRVJUWV9NQVJHSU4pO1xuICAgIH1cbiAgICBpc092ZXJmbG93aW5nKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0V2lkdGgoKSA+IDA7XG4gICAgfVxuXG4gICAgLy8gUHJpdmF0ZVxuICAgIF9kaXNhYmxlT3ZlckZsb3coKSB7XG4gICAgICB0aGlzLl9zYXZlSW5pdGlhbEF0dHJpYnV0ZSh0aGlzLl9lbGVtZW50LCAnb3ZlcmZsb3cnKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICB9XG4gICAgX3NldEVsZW1lbnRBdHRyaWJ1dGVzKHNlbGVjdG9yLCBzdHlsZVByb3BlcnR5LCBjYWxsYmFjaykge1xuICAgICAgY29uc3Qgc2Nyb2xsYmFyV2lkdGggPSB0aGlzLmdldFdpZHRoKCk7XG4gICAgICBjb25zdCBtYW5pcHVsYXRpb25DYWxsQmFjayA9IGVsZW1lbnQgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudCAhPT0gdGhpcy5fZWxlbWVudCAmJiB3aW5kb3cuaW5uZXJXaWR0aCA+IGVsZW1lbnQuY2xpZW50V2lkdGggKyBzY3JvbGxiYXJXaWR0aCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zYXZlSW5pdGlhbEF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KTtcbiAgICAgICAgY29uc3QgY2FsY3VsYXRlZFZhbHVlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KTtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShzdHlsZVByb3BlcnR5LCBgJHtjYWxsYmFjayhOdW1iZXIucGFyc2VGbG9hdChjYWxjdWxhdGVkVmFsdWUpKX1weGApO1xuICAgICAgfTtcbiAgICAgIHRoaXMuX2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2soc2VsZWN0b3IsIG1hbmlwdWxhdGlvbkNhbGxCYWNrKTtcbiAgICB9XG4gICAgX3NhdmVJbml0aWFsQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHkpIHtcbiAgICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gZWxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHN0eWxlUHJvcGVydHkpO1xuICAgICAgaWYgKGFjdHVhbFZhbHVlKSB7XG4gICAgICAgIE1hbmlwdWxhdG9yLnNldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSwgYWN0dWFsVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBfcmVzZXRFbGVtZW50QXR0cmlidXRlcyhzZWxlY3Rvciwgc3R5bGVQcm9wZXJ0eSkge1xuICAgICAgY29uc3QgbWFuaXB1bGF0aW9uQ2FsbEJhY2sgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHkpO1xuICAgICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gcmVtb3ZlIHRoZSBwcm9wZXJ0eSBpZiB0aGUgdmFsdWUgaXMgYG51bGxgOyB0aGUgdmFsdWUgY2FuIGFsc28gYmUgemVyb1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICBlbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KHN0eWxlUHJvcGVydHkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBNYW5pcHVsYXRvci5yZW1vdmVEYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHkpO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHN0eWxlUHJvcGVydHksIHZhbHVlKTtcbiAgICAgIH07XG4gICAgICB0aGlzLl9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBtYW5pcHVsYXRpb25DYWxsQmFjayk7XG4gICAgfVxuICAgIF9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBjYWxsQmFjaykge1xuICAgICAgaWYgKGluZGV4X2pzLmlzRWxlbWVudChzZWxlY3RvcikpIHtcbiAgICAgICAgY2FsbEJhY2soc2VsZWN0b3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHNlbCBvZiBTZWxlY3RvckVuZ2luZS5maW5kKHNlbGVjdG9yLCB0aGlzLl9lbGVtZW50KSkge1xuICAgICAgICBjYWxsQmFjayhzZWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBTY3JvbGxCYXJIZWxwZXI7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjcm9sbGJhci5qcy5tYXBcbiIsIi8qIVxuICAqIEJvb3RzdHJhcCBtb2RhbC5qcyB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJy4vYmFzZS1jb21wb25lbnQuanMnKSwgcmVxdWlyZSgnLi9kb20vZXZlbnQtaGFuZGxlci5qcycpLCByZXF1aXJlKCcuL2RvbS9zZWxlY3Rvci1lbmdpbmUuanMnKSwgcmVxdWlyZSgnLi91dGlsL2JhY2tkcm9wLmpzJyksIHJlcXVpcmUoJy4vdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zLmpzJyksIHJlcXVpcmUoJy4vdXRpbC9mb2N1c3RyYXAuanMnKSwgcmVxdWlyZSgnLi91dGlsL2luZGV4LmpzJyksIHJlcXVpcmUoJy4vdXRpbC9zY3JvbGxiYXIuanMnKSkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuL2Jhc2UtY29tcG9uZW50JywgJy4vZG9tL2V2ZW50LWhhbmRsZXInLCAnLi9kb20vc2VsZWN0b3ItZW5naW5lJywgJy4vdXRpbC9iYWNrZHJvcCcsICcuL3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucycsICcuL3V0aWwvZm9jdXN0cmFwJywgJy4vdXRpbC9pbmRleCcsICcuL3V0aWwvc2Nyb2xsYmFyJ10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLk1vZGFsID0gZmFjdG9yeShnbG9iYWwuQmFzZUNvbXBvbmVudCwgZ2xvYmFsLkV2ZW50SGFuZGxlciwgZ2xvYmFsLlNlbGVjdG9yRW5naW5lLCBnbG9iYWwuQmFja2Ryb3AsIGdsb2JhbC5Db21wb25lbnRGdW5jdGlvbnMsIGdsb2JhbC5Gb2N1c3RyYXAsIGdsb2JhbC5JbmRleCwgZ2xvYmFsLlNjcm9sbGJhcikpO1xufSkodGhpcywgKGZ1bmN0aW9uIChCYXNlQ29tcG9uZW50LCBFdmVudEhhbmRsZXIsIFNlbGVjdG9yRW5naW5lLCBCYWNrZHJvcCwgY29tcG9uZW50RnVuY3Rpb25zX2pzLCBGb2N1c1RyYXAsIGluZGV4X2pzLCBTY3JvbGxCYXJIZWxwZXIpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgbW9kYWwuanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgLyoqXG4gICAqIENvbnN0YW50c1xuICAgKi9cblxuICBjb25zdCBOQU1FID0gJ21vZGFsJztcbiAgY29uc3QgREFUQV9LRVkgPSAnYnMubW9kYWwnO1xuICBjb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YDtcbiAgY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSc7XG4gIGNvbnN0IEVTQ0FQRV9LRVkgPSAnRXNjYXBlJztcbiAgY29uc3QgRVZFTlRfSElERSA9IGBoaWRlJHtFVkVOVF9LRVl9YDtcbiAgY29uc3QgRVZFTlRfSElERV9QUkVWRU5URUQgPSBgaGlkZVByZXZlbnRlZCR7RVZFTlRfS0VZfWA7XG4gIGNvbnN0IEVWRU5UX0hJRERFTiA9IGBoaWRkZW4ke0VWRU5UX0tFWX1gO1xuICBjb25zdCBFVkVOVF9TSE9XID0gYHNob3cke0VWRU5UX0tFWX1gO1xuICBjb25zdCBFVkVOVF9TSE9XTiA9IGBzaG93biR7RVZFTlRfS0VZfWA7XG4gIGNvbnN0IEVWRU5UX1JFU0laRSA9IGByZXNpemUke0VWRU5UX0tFWX1gO1xuICBjb25zdCBFVkVOVF9DTElDS19ESVNNSVNTID0gYGNsaWNrLmRpc21pc3Mke0VWRU5UX0tFWX1gO1xuICBjb25zdCBFVkVOVF9NT1VTRURPV05fRElTTUlTUyA9IGBtb3VzZWRvd24uZGlzbWlzcyR7RVZFTlRfS0VZfWA7XG4gIGNvbnN0IEVWRU5UX0tFWURPV05fRElTTUlTUyA9IGBrZXlkb3duLmRpc21pc3Mke0VWRU5UX0tFWX1gO1xuICBjb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWA7XG4gIGNvbnN0IENMQVNTX05BTUVfT1BFTiA9ICdtb2RhbC1vcGVuJztcbiAgY29uc3QgQ0xBU1NfTkFNRV9GQURFID0gJ2ZhZGUnO1xuICBjb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdyc7XG4gIGNvbnN0IENMQVNTX05BTUVfU1RBVElDID0gJ21vZGFsLXN0YXRpYyc7XG4gIGNvbnN0IE9QRU5fU0VMRUNUT1IgPSAnLm1vZGFsLnNob3cnO1xuICBjb25zdCBTRUxFQ1RPUl9ESUFMT0cgPSAnLm1vZGFsLWRpYWxvZyc7XG4gIGNvbnN0IFNFTEVDVE9SX01PREFMX0JPRFkgPSAnLm1vZGFsLWJvZHknO1xuICBjb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiXSc7XG4gIGNvbnN0IERlZmF1bHQgPSB7XG4gICAgYmFja2Ryb3A6IHRydWUsXG4gICAgZm9jdXM6IHRydWUsXG4gICAga2V5Ym9hcmQ6IHRydWVcbiAgfTtcbiAgY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gICAgYmFja2Ryb3A6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAgICBmb2N1czogJ2Jvb2xlYW4nLFxuICAgIGtleWJvYXJkOiAnYm9vbGVhbidcbiAgfTtcblxuICAvKipcbiAgICogQ2xhc3MgZGVmaW5pdGlvblxuICAgKi9cblxuICBjbGFzcyBNb2RhbCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcbiAgICAgIHRoaXMuX2RpYWxvZyA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfRElBTE9HLCB0aGlzLl9lbGVtZW50KTtcbiAgICAgIHRoaXMuX2JhY2tkcm9wID0gdGhpcy5faW5pdGlhbGl6ZUJhY2tEcm9wKCk7XG4gICAgICB0aGlzLl9mb2N1c3RyYXAgPSB0aGlzLl9pbml0aWFsaXplRm9jdXNUcmFwKCk7XG4gICAgICB0aGlzLl9pc1Nob3duID0gZmFsc2U7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3Njcm9sbEJhciA9IG5ldyBTY3JvbGxCYXJIZWxwZXIoKTtcbiAgICAgIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgfVxuXG4gICAgLy8gR2V0dGVyc1xuICAgIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICAgIHJldHVybiBEZWZhdWx0O1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgICAgcmV0dXJuIERlZmF1bHRUeXBlO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgICByZXR1cm4gTkFNRTtcbiAgICB9XG5cbiAgICAvLyBQdWJsaWNcbiAgICB0b2dnbGUocmVsYXRlZFRhcmdldCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2lzU2hvd24gPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdyhyZWxhdGVkVGFyZ2V0KTtcbiAgICB9XG4gICAgc2hvdyhyZWxhdGVkVGFyZ2V0KSB7XG4gICAgICBpZiAodGhpcy5faXNTaG93biB8fCB0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVywge1xuICAgICAgICByZWxhdGVkVGFyZ2V0XG4gICAgICB9KTtcbiAgICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9pc1Nob3duID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgICB0aGlzLl9zY3JvbGxCYXIuaGlkZSgpO1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfT1BFTik7XG4gICAgICB0aGlzLl9hZGp1c3REaWFsb2coKTtcbiAgICAgIHRoaXMuX2JhY2tkcm9wLnNob3coKCkgPT4gdGhpcy5fc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCkpO1xuICAgIH1cbiAgICBoaWRlKCkge1xuICAgICAgaWYgKCF0aGlzLl9pc1Nob3duIHx8IHRoaXMuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFKTtcbiAgICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9pc1Nob3duID0gZmFsc2U7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpO1xuICAgICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB0aGlzLl9oaWRlTW9kYWwoKSwgdGhpcy5fZWxlbWVudCwgdGhpcy5faXNBbmltYXRlZCgpKTtcbiAgICB9XG4gICAgZGlzcG9zZSgpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vZmYod2luZG93LCBFVkVOVF9LRVkpO1xuICAgICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9kaWFsb2csIEVWRU5UX0tFWSk7XG4gICAgICB0aGlzLl9iYWNrZHJvcC5kaXNwb3NlKCk7XG4gICAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpO1xuICAgICAgc3VwZXIuZGlzcG9zZSgpO1xuICAgIH1cbiAgICBoYW5kbGVVcGRhdGUoKSB7XG4gICAgICB0aGlzLl9hZGp1c3REaWFsb2coKTtcbiAgICB9XG5cbiAgICAvLyBQcml2YXRlXG4gICAgX2luaXRpYWxpemVCYWNrRHJvcCgpIHtcbiAgICAgIHJldHVybiBuZXcgQmFja2Ryb3Aoe1xuICAgICAgICBpc1Zpc2libGU6IEJvb2xlYW4odGhpcy5fY29uZmlnLmJhY2tkcm9wKSxcbiAgICAgICAgLy8gJ3N0YXRpYycgb3B0aW9uIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0cnVlLCBhbmQgYm9vbGVhbnMgd2lsbCBrZWVwIHRoZWlyIHZhbHVlLFxuICAgICAgICBpc0FuaW1hdGVkOiB0aGlzLl9pc0FuaW1hdGVkKClcbiAgICAgIH0pO1xuICAgIH1cbiAgICBfaW5pdGlhbGl6ZUZvY3VzVHJhcCgpIHtcbiAgICAgIHJldHVybiBuZXcgRm9jdXNUcmFwKHtcbiAgICAgICAgdHJhcEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnRcbiAgICAgIH0pO1xuICAgIH1cbiAgICBfc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCkge1xuICAgICAgLy8gdHJ5IHRvIGFwcGVuZCBkeW5hbWljIG1vZGFsXG4gICAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnModGhpcy5fZWxlbWVudCkpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQodGhpcy5fZWxlbWVudCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJyk7XG4gICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcsIHRydWUpO1xuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnZGlhbG9nJyk7XG4gICAgICB0aGlzLl9lbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgICBjb25zdCBtb2RhbEJvZHkgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX01PREFMX0JPRFksIHRoaXMuX2RpYWxvZyk7XG4gICAgICBpZiAobW9kYWxCb2R5KSB7XG4gICAgICAgIG1vZGFsQm9keS5zY3JvbGxUb3AgPSAwO1xuICAgICAgfVxuICAgICAgaW5kZXhfanMucmVmbG93KHRoaXMuX2VsZW1lbnQpO1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyk7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uQ29tcGxldGUgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuZm9jdXMpIHtcbiAgICAgICAgICB0aGlzLl9mb2N1c3RyYXAuYWN0aXZhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04sIHtcbiAgICAgICAgICByZWxhdGVkVGFyZ2V0XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2sodHJhbnNpdGlvbkNvbXBsZXRlLCB0aGlzLl9kaWFsb2csIHRoaXMuX2lzQW5pbWF0ZWQoKSk7XG4gICAgfVxuICAgIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOX0RJU01JU1MsIGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSAhPT0gRVNDQVBFX0tFWSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24oKTtcbiAgICAgIH0pO1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfUkVTSVpFLCAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc1Nob3duICYmICF0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgICB0aGlzLl9hZGp1c3REaWFsb2coKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOX0RJU01JU1MsIGV2ZW50ID0+IHtcbiAgICAgICAgLy8gYSBiYWQgdHJpY2sgdG8gc2VncmVnYXRlIGNsaWNrcyB0aGF0IG1heSBzdGFydCBpbnNpZGUgZGlhbG9nIGJ1dCBlbmQgb3V0c2lkZSwgYW5kIGF2b2lkIGxpc3RlbiB0byBzY3JvbGxiYXIgY2xpY2tzXG4gICAgICAgIEV2ZW50SGFuZGxlci5vbmUodGhpcy5fZWxlbWVudCwgRVZFTlRfQ0xJQ0tfRElTTUlTUywgZXZlbnQyID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fZWxlbWVudCAhPT0gZXZlbnQudGFyZ2V0IHx8IHRoaXMuX2VsZW1lbnQgIT09IGV2ZW50Mi50YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCkge1xuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBfaGlkZU1vZGFsKCkge1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgdHJ1ZSk7XG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcpO1xuICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3JvbGUnKTtcbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5fYmFja2Ryb3AuaGlkZSgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX09QRU4pO1xuICAgICAgICB0aGlzLl9yZXNldEFkanVzdG1lbnRzKCk7XG4gICAgICAgIHRoaXMuX3Njcm9sbEJhci5yZXNldCgpO1xuICAgICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIF9pc0FuaW1hdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSk7XG4gICAgfVxuICAgIF90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKCkge1xuICAgICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERV9QUkVWRU5URUQpO1xuICAgICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzTW9kYWxPdmVyZmxvd2luZyA9IHRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IGluaXRpYWxPdmVyZmxvd1kgPSB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93WTtcbiAgICAgIC8vIHJldHVybiBpZiB0aGUgZm9sbG93aW5nIGJhY2tncm91bmQgdHJhbnNpdGlvbiBoYXNuJ3QgeWV0IGNvbXBsZXRlZFxuICAgICAgaWYgKGluaXRpYWxPdmVyZmxvd1kgPT09ICdoaWRkZW4nIHx8IHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU1RBVElDKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIWlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93WSA9ICdoaWRkZW4nO1xuICAgICAgfVxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU1RBVElDKTtcbiAgICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TVEFUSUMpO1xuICAgICAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93WSA9IGluaXRpYWxPdmVyZmxvd1k7XG4gICAgICAgIH0sIHRoaXMuX2RpYWxvZyk7XG4gICAgICB9LCB0aGlzLl9kaWFsb2cpO1xuICAgICAgdGhpcy5fZWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgdXNlZCB0byBoYW5kbGUgb3ZlcmZsb3dpbmcgbW9kYWxzXG4gICAgICovXG5cbiAgICBfYWRqdXN0RGlhbG9nKCkge1xuICAgICAgY29uc3QgaXNNb2RhbE92ZXJmbG93aW5nID0gdGhpcy5fZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgY29uc3Qgc2Nyb2xsYmFyV2lkdGggPSB0aGlzLl9zY3JvbGxCYXIuZ2V0V2lkdGgoKTtcbiAgICAgIGNvbnN0IGlzQm9keU92ZXJmbG93aW5nID0gc2Nyb2xsYmFyV2lkdGggPiAwO1xuICAgICAgaWYgKGlzQm9keU92ZXJmbG93aW5nICYmICFpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgICAgY29uc3QgcHJvcGVydHkgPSBpbmRleF9qcy5pc1JUTCgpID8gJ3BhZGRpbmdMZWZ0JyA6ICdwYWRkaW5nUmlnaHQnO1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW3Byb3BlcnR5XSA9IGAke3Njcm9sbGJhcldpZHRofXB4YDtcbiAgICAgIH1cbiAgICAgIGlmICghaXNCb2R5T3ZlcmZsb3dpbmcgJiYgaXNNb2RhbE92ZXJmbG93aW5nKSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5ID0gaW5kZXhfanMuaXNSVEwoKSA/ICdwYWRkaW5nUmlnaHQnIDogJ3BhZGRpbmdMZWZ0JztcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtwcm9wZXJ0eV0gPSBgJHtzY3JvbGxiYXJXaWR0aH1weGA7XG4gICAgICB9XG4gICAgfVxuICAgIF9yZXNldEFkanVzdG1lbnRzKCkge1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nTGVmdCA9ICcnO1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQgPSAnJztcbiAgICB9XG5cbiAgICAvLyBTdGF0aWNcbiAgICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZywgcmVsYXRlZFRhcmdldCkge1xuICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBNb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbY29uZmlnXShyZWxhdGVkVGFyZ2V0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICAgKi9cblxuICBFdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKTtcbiAgICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBFdmVudEhhbmRsZXIub25lKHRhcmdldCwgRVZFTlRfU0hPVywgc2hvd0V2ZW50ID0+IHtcbiAgICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAvLyBvbmx5IHJlZ2lzdGVyIGZvY3VzIHJlc3RvcmVyIGlmIG1vZGFsIHdpbGwgYWN0dWFsbHkgZ2V0IHNob3duXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIEV2ZW50SGFuZGxlci5vbmUodGFyZ2V0LCBFVkVOVF9ISURERU4sICgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4X2pzLmlzVmlzaWJsZSh0aGlzKSkge1xuICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBhdm9pZCBjb25mbGljdCB3aGVuIGNsaWNraW5nIG1vZGFsIHRvZ2dsZXIgd2hpbGUgYW5vdGhlciBvbmUgaXMgb3BlblxuICAgIGNvbnN0IGFscmVhZHlPcGVuID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShPUEVOX1NFTEVDVE9SKTtcbiAgICBpZiAoYWxyZWFkeU9wZW4pIHtcbiAgICAgIE1vZGFsLmdldEluc3RhbmNlKGFscmVhZHlPcGVuKS5oaWRlKCk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBNb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldCk7XG4gICAgZGF0YS50b2dnbGUodGhpcyk7XG4gIH0pO1xuICBjb21wb25lbnRGdW5jdGlvbnNfanMuZW5hYmxlRGlzbWlzc1RyaWdnZXIoTW9kYWwpO1xuXG4gIC8qKlxuICAgKiBqUXVlcnlcbiAgICovXG5cbiAgaW5kZXhfanMuZGVmaW5lSlF1ZXJ5UGx1Z2luKE1vZGFsKTtcblxuICByZXR1cm4gTW9kYWw7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1vZGFsLmpzLm1hcFxuIiwiZXhwb3J0IHZhciB0b3AgPSAndG9wJztcbmV4cG9ydCB2YXIgYm90dG9tID0gJ2JvdHRvbSc7XG5leHBvcnQgdmFyIHJpZ2h0ID0gJ3JpZ2h0JztcbmV4cG9ydCB2YXIgbGVmdCA9ICdsZWZ0JztcbmV4cG9ydCB2YXIgYXV0byA9ICdhdXRvJztcbmV4cG9ydCB2YXIgYmFzZVBsYWNlbWVudHMgPSBbdG9wLCBib3R0b20sIHJpZ2h0LCBsZWZ0XTtcbmV4cG9ydCB2YXIgc3RhcnQgPSAnc3RhcnQnO1xuZXhwb3J0IHZhciBlbmQgPSAnZW5kJztcbmV4cG9ydCB2YXIgY2xpcHBpbmdQYXJlbnRzID0gJ2NsaXBwaW5nUGFyZW50cyc7XG5leHBvcnQgdmFyIHZpZXdwb3J0ID0gJ3ZpZXdwb3J0JztcbmV4cG9ydCB2YXIgcG9wcGVyID0gJ3BvcHBlcic7XG5leHBvcnQgdmFyIHJlZmVyZW5jZSA9ICdyZWZlcmVuY2UnO1xuZXhwb3J0IHZhciB2YXJpYXRpb25QbGFjZW1lbnRzID0gLyojX19QVVJFX18qL2Jhc2VQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7XG5leHBvcnQgdmFyIHBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovW10uY29uY2F0KGJhc2VQbGFjZW1lbnRzLCBbYXV0b10pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCwgcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTsgLy8gbW9kaWZpZXJzIHRoYXQgbmVlZCB0byByZWFkIHRoZSBET01cblxuZXhwb3J0IHZhciBiZWZvcmVSZWFkID0gJ2JlZm9yZVJlYWQnO1xuZXhwb3J0IHZhciByZWFkID0gJ3JlYWQnO1xuZXhwb3J0IHZhciBhZnRlclJlYWQgPSAnYWZ0ZXJSZWFkJzsgLy8gcHVyZS1sb2dpYyBtb2RpZmllcnNcblxuZXhwb3J0IHZhciBiZWZvcmVNYWluID0gJ2JlZm9yZU1haW4nO1xuZXhwb3J0IHZhciBtYWluID0gJ21haW4nO1xuZXhwb3J0IHZhciBhZnRlck1haW4gPSAnYWZ0ZXJNYWluJzsgLy8gbW9kaWZpZXIgd2l0aCB0aGUgcHVycG9zZSB0byB3cml0ZSB0byB0aGUgRE9NIChvciB3cml0ZSBpbnRvIGEgZnJhbWV3b3JrIHN0YXRlKVxuXG5leHBvcnQgdmFyIGJlZm9yZVdyaXRlID0gJ2JlZm9yZVdyaXRlJztcbmV4cG9ydCB2YXIgd3JpdGUgPSAnd3JpdGUnO1xuZXhwb3J0IHZhciBhZnRlcldyaXRlID0gJ2FmdGVyV3JpdGUnO1xuZXhwb3J0IHZhciBtb2RpZmllclBoYXNlcyA9IFtiZWZvcmVSZWFkLCByZWFkLCBhZnRlclJlYWQsIGJlZm9yZU1haW4sIG1haW4sIGFmdGVyTWFpbiwgYmVmb3JlV3JpdGUsIHdyaXRlLCBhZnRlcldyaXRlXTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlTmFtZShlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50ID8gKGVsZW1lbnQubm9kZU5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvdyhub2RlKSB7XG4gIGlmIChub2RlID09IG51bGwpIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9XG5cbiAgaWYgKG5vZGUudG9TdHJpbmcoKSAhPT0gJ1tvYmplY3QgV2luZG93XScpIHtcbiAgICB2YXIgb3duZXJEb2N1bWVudCA9IG5vZGUub3duZXJEb2N1bWVudDtcbiAgICByZXR1cm4gb3duZXJEb2N1bWVudCA/IG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93IDogd2luZG93O1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuSFRNTEVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzU2hhZG93Um9vdChub2RlKSB7XG4gIC8vIElFIDExIGhhcyBubyBTaGFkb3dSb290XG4gIGlmICh0eXBlb2YgU2hhZG93Um9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5TaGFkb3dSb290O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q7XG59XG5cbmV4cG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNTaGFkb3dSb290IH07IiwiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjsgLy8gVGhpcyBtb2RpZmllciB0YWtlcyB0aGUgc3R5bGVzIHByZXBhcmVkIGJ5IHRoZSBgY29tcHV0ZVN0eWxlc2AgbW9kaWZpZXJcbi8vIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlIEhUTUxFbGVtZW50cyBzdWNoIGFzIHBvcHBlciBhbmQgYXJyb3dcblxuZnVuY3Rpb24gYXBwbHlTdHlsZXMoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlO1xuICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBzdHlsZSA9IHN0YXRlLnN0eWxlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBGbG93IGRvZXNuJ3Qgc3VwcG9ydCB0byBleHRlbmQgdGhpcyBwcm9wZXJ0eSwgYnV0IGl0J3MgdGhlIG1vc3RcbiAgICAvLyBlZmZlY3RpdmUgd2F5IHRvIGFwcGx5IHN0eWxlcyB0byBhbiBIVE1MRWxlbWVudFxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuXG5cbiAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhdHRyaWJ1dGVzW25hbWVdO1xuXG4gICAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUgPT09IHRydWUgPyAnJyA6IHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZTtcbiAgdmFyIGluaXRpYWxTdHlsZXMgPSB7XG4gICAgcG9wcGVyOiB7XG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGxlZnQ6ICcwJyxcbiAgICAgIHRvcDogJzAnLFxuICAgICAgbWFyZ2luOiAnMCdcbiAgICB9LFxuICAgIGFycm93OiB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICAgIH0sXG4gICAgcmVmZXJlbmNlOiB7fVxuICB9O1xuICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLnBvcHBlci5zdHlsZSwgaW5pdGlhbFN0eWxlcy5wb3BwZXIpO1xuICBzdGF0ZS5zdHlsZXMgPSBpbml0aWFsU3R5bGVzO1xuXG4gIGlmIChzdGF0ZS5lbGVtZW50cy5hcnJvdykge1xuICAgIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMuYXJyb3cuc3R5bGUsIGluaXRpYWxTdHlsZXMuYXJyb3cpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTtcbiAgICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICAgIHZhciBzdHlsZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhzdGF0ZS5zdHlsZXMuaGFzT3duUHJvcGVydHkobmFtZSkgPyBzdGF0ZS5zdHlsZXNbbmFtZV0gOiBpbml0aWFsU3R5bGVzW25hbWVdKTsgLy8gU2V0IGFsbCB2YWx1ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIHRvIHVuc2V0IHRoZW1cblxuICAgICAgdmFyIHN0eWxlID0gc3R5bGVQcm9wZXJ0aWVzLnJlZHVjZShmdW5jdGlvbiAoc3R5bGUsIHByb3BlcnR5KSB7XG4gICAgICAgIHN0eWxlW3Byb3BlcnR5XSA9ICcnO1xuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9LCB7fSk7IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXBwbHlTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3dyaXRlJyxcbiAgZm46IGFwcGx5U3R5bGVzLFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgcmVxdWlyZXM6IFsnY29tcHV0ZVN0eWxlcyddXG59OyIsImltcG9ydCB7IGF1dG8gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbn0iLCJleHBvcnQgdmFyIG1heCA9IE1hdGgubWF4O1xuZXhwb3J0IHZhciBtaW4gPSBNYXRoLm1pbjtcbmV4cG9ydCB2YXIgcm91bmQgPSBNYXRoLnJvdW5kOyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVBU3RyaW5nKCkge1xuICB2YXIgdWFEYXRhID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGE7XG5cbiAgaWYgKHVhRGF0YSAhPSBudWxsICYmIHVhRGF0YS5icmFuZHMgJiYgQXJyYXkuaXNBcnJheSh1YURhdGEuYnJhbmRzKSkge1xuICAgIHJldHVybiB1YURhdGEuYnJhbmRzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0uYnJhbmQgKyBcIi9cIiArIGl0ZW0udmVyc2lvbjtcbiAgICB9KS5qb2luKCcgJyk7XG4gIH1cblxuICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbn0iLCJpbXBvcnQgZ2V0VUFTdHJpbmcgZnJvbSBcIi4uL3V0aWxzL3VzZXJBZ2VudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNMYXlvdXRWaWV3cG9ydCgpIHtcbiAgcmV0dXJuICEvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xufSIsImltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgaXNMYXlvdXRWaWV3cG9ydCBmcm9tIFwiLi9pc0xheW91dFZpZXdwb3J0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgaW5jbHVkZVNjYWxlLCBpc0ZpeGVkU3RyYXRlZ3kpIHtcbiAgaWYgKGluY2x1ZGVTY2FsZSA9PT0gdm9pZCAwKSB7XG4gICAgaW5jbHVkZVNjYWxlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNGaXhlZFN0cmF0ZWd5ID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkU3RyYXRlZ3kgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBjbGllbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IDE7XG4gIHZhciBzY2FsZVkgPSAxO1xuXG4gIGlmIChpbmNsdWRlU2NhbGUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIHNjYWxlWCA9IGVsZW1lbnQub2Zmc2V0V2lkdGggPiAwID8gcm91bmQoY2xpZW50UmVjdC53aWR0aCkgLyBlbGVtZW50Lm9mZnNldFdpZHRoIHx8IDEgOiAxO1xuICAgIHNjYWxlWSA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ID4gMCA/IHJvdW5kKGNsaWVudFJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDEgOiAxO1xuICB9XG5cbiAgdmFyIF9yZWYgPSBpc0VsZW1lbnQoZWxlbWVudCkgPyBnZXRXaW5kb3coZWxlbWVudCkgOiB3aW5kb3csXG4gICAgICB2aXN1YWxWaWV3cG9ydCA9IF9yZWYudmlzdWFsVmlld3BvcnQ7XG5cbiAgdmFyIGFkZFZpc3VhbE9mZnNldHMgPSAhaXNMYXlvdXRWaWV3cG9ydCgpICYmIGlzRml4ZWRTdHJhdGVneTtcbiAgdmFyIHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0IDogMCkpIC8gc2NhbGVYO1xuICB2YXIgeSA9IChjbGllbnRSZWN0LnRvcCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wIDogMCkpIC8gc2NhbGVZO1xuICB2YXIgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoIC8gc2NhbGVYO1xuICB2YXIgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZVk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHRvcDogeSxcbiAgICByaWdodDogeCArIHdpZHRoLFxuICAgIGJvdHRvbTogeSArIGhlaWdodCxcbiAgICBsZWZ0OiB4LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7IC8vIFJldHVybnMgdGhlIGxheW91dCByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC4gTGF5b3V0XG4vLyBtZWFucyBpdCBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IHRyYW5zZm9ybXMuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldExheW91dFJlY3QoZWxlbWVudCkge1xuICB2YXIgY2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KTsgLy8gVXNlIHRoZSBjbGllbnRSZWN0IHNpemVzIGlmIGl0J3Mgbm90IGJlZW4gdHJhbnNmb3JtZWQuXG4gIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTIyM1xuXG4gIHZhciB3aWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC53aWR0aCAtIHdpZHRoKSA8PSAxKSB7XG4gICAgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoO1xuICB9XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3QuaGVpZ2h0IC0gaGVpZ2h0KSA8PSAxKSB7XG4gICAgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IGVsZW1lbnQub2Zmc2V0TGVmdCxcbiAgICB5OiBlbGVtZW50Lm9mZnNldFRvcCxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn0iLCJpbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb250YWlucyhwYXJlbnQsIGNoaWxkKSB7XG4gIHZhciByb290Tm9kZSA9IGNoaWxkLmdldFJvb3ROb2RlICYmIGNoaWxkLmdldFJvb3ROb2RlKCk7IC8vIEZpcnN0LCBhdHRlbXB0IHdpdGggZmFzdGVyIG5hdGl2ZSBtZXRob2RcblxuICBpZiAocGFyZW50LmNvbnRhaW5zKGNoaWxkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIHRoZW4gZmFsbGJhY2sgdG8gY3VzdG9tIGltcGxlbWVudGF0aW9uIHdpdGggU2hhZG93IERPTSBzdXBwb3J0XG4gIGVsc2UgaWYgKHJvb3ROb2RlICYmIGlzU2hhZG93Um9vdChyb290Tm9kZSkpIHtcbiAgICAgIHZhciBuZXh0ID0gY2hpbGQ7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKG5leHQgJiYgcGFyZW50LmlzU2FtZU5vZGUobmV4dCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ106IG5lZWQgYSBiZXR0ZXIgd2F5IHRvIGhhbmRsZSB0aGlzLi4uXG5cblxuICAgICAgICBuZXh0ID0gbmV4dC5wYXJlbnROb2RlIHx8IG5leHQuaG9zdDtcbiAgICAgIH0gd2hpbGUgKG5leHQpO1xuICAgIH0gLy8gR2l2ZSB1cCwgdGhlIHJlc3VsdCBpcyBmYWxzZVxuXG5cbiAgcmV0dXJuIGZhbHNlO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufSIsImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNUYWJsZUVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gWyd0YWJsZScsICd0ZCcsICd0aCddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoZWxlbWVudCkpID49IDA7XG59IiwiaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIHtcbiAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICByZXR1cm4gKChpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50Lm93bmVyRG9jdW1lbnQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgZWxlbWVudC5kb2N1bWVudCkgfHwgd2luZG93LmRvY3VtZW50KS5kb2N1bWVudEVsZW1lbnQ7XG59IiwiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSB7XG4gIGlmIChnZXROb2RlTmFtZShlbGVtZW50KSA9PT0gJ2h0bWwnKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gKC8vIHRoaXMgaXMgYSBxdWlja2VyIChidXQgbGVzcyB0eXBlIHNhZmUpIHdheSB0byBzYXZlIHF1aXRlIHNvbWUgYnl0ZXMgZnJvbSB0aGUgYnVuZGxlXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgIGVsZW1lbnQuYXNzaWduZWRTbG90IHx8IC8vIHN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlXG4gICAgZWxlbWVudC5wYXJlbnROb2RlIHx8ICggLy8gRE9NIEVsZW1lbnQgZGV0ZWN0ZWRcbiAgICBpc1NoYWRvd1Jvb3QoZWxlbWVudCkgPyBlbGVtZW50Lmhvc3QgOiBudWxsKSB8fCAvLyBTaGFkb3dSb290IGRldGVjdGVkXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IEhUTUxFbGVtZW50IGlzIGEgTm9kZVxuICAgIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSAvLyBmYWxsYmFja1xuXG4gICk7XG59IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCwgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGlzVGFibGVFbGVtZW50IGZyb20gXCIuL2lzVGFibGVFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgZ2V0VUFTdHJpbmcgZnJvbSBcIi4uL3V0aWxzL3VzZXJBZ2VudC5qc1wiO1xuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvODM3XG4gIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudDtcbn0gLy8gYC5vZmZzZXRQYXJlbnRgIHJlcG9ydHMgYG51bGxgIGZvciBmaXhlZCBlbGVtZW50cywgd2hpbGUgYWJzb2x1dGUgZWxlbWVudHNcbi8vIHJldHVybiB0aGUgY29udGFpbmluZyBibG9ja1xuXG5cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIHZhciBpc0ZpcmVmb3ggPSAvZmlyZWZveC9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG4gIHZhciBpc0lFID0gL1RyaWRlbnQvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuXG4gIGlmIChpc0lFICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAvLyBJbiBJRSA5LCAxMCBhbmQgMTEgZml4ZWQgZWxlbWVudHMgY29udGFpbmluZyBibG9jayBpcyBhbHdheXMgZXN0YWJsaXNoZWQgYnkgdGhlIHZpZXdwb3J0XG4gICAgdmFyIGVsZW1lbnRDc3MgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuXG4gICAgaWYgKGVsZW1lbnRDc3MucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG5cbiAgaWYgKGlzU2hhZG93Um9vdChjdXJyZW50Tm9kZSkpIHtcbiAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLmhvc3Q7XG4gIH1cblxuICB3aGlsZSAoaXNIVE1MRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgWydodG1sJywgJ2JvZHknXS5pbmRleE9mKGdldE5vZGVOYW1lKGN1cnJlbnROb2RlKSkgPCAwKSB7XG4gICAgdmFyIGNzcyA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudE5vZGUpOyAvLyBUaGlzIGlzIG5vbi1leGhhdXN0aXZlIGJ1dCBjb3ZlcnMgdGhlIG1vc3QgY29tbW9uIENTUyBwcm9wZXJ0aWVzIHRoYXRcbiAgICAvLyBjcmVhdGUgYSBjb250YWluaW5nIGJsb2NrLlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG5cbiAgICBpZiAoY3NzLnRyYW5zZm9ybSAhPT0gJ25vbmUnIHx8IGNzcy5wZXJzcGVjdGl2ZSAhPT0gJ25vbmUnIHx8IGNzcy5jb250YWluID09PSAncGFpbnQnIHx8IFsndHJhbnNmb3JtJywgJ3BlcnNwZWN0aXZlJ10uaW5kZXhPZihjc3Mud2lsbENoYW5nZSkgIT09IC0xIHx8IGlzRmlyZWZveCAmJiBjc3Mud2lsbENoYW5nZSA9PT0gJ2ZpbHRlcicgfHwgaXNGaXJlZm94ICYmIGNzcy5maWx0ZXIgJiYgY3NzLmZpbHRlciAhPT0gJ25vbmUnKSB7XG4gICAgICByZXR1cm4gY3VycmVudE5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn0gLy8gR2V0cyB0aGUgY2xvc2VzdCBhbmNlc3RvciBwb3NpdGlvbmVkIGVsZW1lbnQuIEhhbmRsZXMgc29tZSBlZGdlIGNhc2VzLFxuLy8gc3VjaCBhcyB0YWJsZSBhbmNlc3RvcnMgYW5kIGNyb3NzIGJyb3dzZXIgYnVncy5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KTtcblxuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQob2Zmc2V0UGFyZW50KTtcbiAgfVxuXG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdodG1sJyB8fCBnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnYm9keScgJiYgZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJykpIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldFBhcmVudCB8fCBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkgfHwgd2luZG93O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YocGxhY2VtZW50KSA+PSAwID8gJ3gnIDogJ3knO1xufSIsImltcG9ydCB7IG1heCBhcyBtYXRoTWF4LCBtaW4gYXMgbWF0aE1pbiB9IGZyb20gXCIuL21hdGguanNcIjtcbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KSB7XG4gIHJldHVybiBtYXRoTWF4KG1pbiwgbWF0aE1pbih2YWx1ZSwgbWF4KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gd2l0aGluTWF4Q2xhbXAobWluLCB2YWx1ZSwgbWF4KSB7XG4gIHZhciB2ID0gd2l0aGluKG1pbiwgdmFsdWUsIG1heCk7XG4gIHJldHVybiB2ID4gbWF4ID8gbWF4IDogdjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRGcmVzaFNpZGVPYmplY3QoKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwXG4gIH07XG59IiwiaW1wb3J0IGdldEZyZXNoU2lkZU9iamVjdCBmcm9tIFwiLi9nZXRGcmVzaFNpZGVPYmplY3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlUGFkZGluZ09iamVjdChwYWRkaW5nT2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBnZXRGcmVzaFNpZGVPYmplY3QoKSwgcGFkZGluZ09iamVjdCk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXhwYW5kVG9IYXNoTWFwKHZhbHVlLCBrZXlzKSB7XG4gIHJldHVybiBrZXlzLnJlZHVjZShmdW5jdGlvbiAoaGFzaE1hcCwga2V5KSB7XG4gICAgaGFzaE1hcFtrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIGhhc2hNYXA7XG4gIH0sIHt9KTtcbn0iLCJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4uL2RvbS11dGlscy9jb250YWlucy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB3aXRoaW4gfSBmcm9tIFwiLi4vdXRpbHMvd2l0aGluLmpzXCI7XG5pbXBvcnQgbWVyZ2VQYWRkaW5nT2JqZWN0IGZyb20gXCIuLi91dGlscy9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4uL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qc1wiO1xuaW1wb3J0IHsgbGVmdCwgcmlnaHQsIGJhc2VQbGFjZW1lbnRzLCB0b3AsIGJvdHRvbSB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciB0b1BhZGRpbmdPYmplY3QgPSBmdW5jdGlvbiB0b1BhZGRpbmdPYmplY3QocGFkZGluZywgc3RhdGUpIHtcbiAgcGFkZGluZyA9IHR5cGVvZiBwYWRkaW5nID09PSAnZnVuY3Rpb24nID8gcGFkZGluZyhPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZWN0cywge1xuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pKSA6IHBhZGRpbmc7XG4gIHJldHVybiBtZXJnZVBhZGRpbmdPYmplY3QodHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gcGFkZGluZyA6IGV4cGFuZFRvSGFzaE1hcChwYWRkaW5nLCBiYXNlUGxhY2VtZW50cykpO1xufTtcblxuZnVuY3Rpb24gYXJyb3coX3JlZikge1xuICB2YXIgX3N0YXRlJG1vZGlmaWVyc0RhdGEkO1xuXG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucztcbiAgdmFyIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cztcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBheGlzID0gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpO1xuICB2YXIgaXNWZXJ0aWNhbCA9IFtsZWZ0LCByaWdodF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwO1xuICB2YXIgbGVuID0gaXNWZXJ0aWNhbCA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICBpZiAoIWFycm93RWxlbWVudCB8fCAhcG9wcGVyT2Zmc2V0cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gdG9QYWRkaW5nT2JqZWN0KG9wdGlvbnMucGFkZGluZywgc3RhdGUpO1xuICB2YXIgYXJyb3dSZWN0ID0gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpO1xuICB2YXIgbWluUHJvcCA9IGF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gIHZhciBtYXhQcm9wID0gYXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gIHZhciBlbmREaWZmID0gc3RhdGUucmVjdHMucmVmZXJlbmNlW2xlbl0gKyBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBwb3BwZXJPZmZzZXRzW2F4aXNdIC0gc3RhdGUucmVjdHMucG9wcGVyW2xlbl07XG4gIHZhciBzdGFydERpZmYgPSBwb3BwZXJPZmZzZXRzW2F4aXNdIC0gc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdO1xuICB2YXIgYXJyb3dPZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQoYXJyb3dFbGVtZW50KTtcbiAgdmFyIGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudEhlaWdodCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50V2lkdGggfHwgMCA6IDA7XG4gIHZhciBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjsgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBwb3BwZXIgaWYgdGhlIGNlbnRlciBwb2ludCBpc1xuICAvLyBvdXRzaWRlIG9mIHRoZSBwb3BwZXIgYm91bmRzXG5cbiAgdmFyIG1pbiA9IHBhZGRpbmdPYmplY3RbbWluUHJvcF07XG4gIHZhciBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dSZWN0W2xlbl0gLSBwYWRkaW5nT2JqZWN0W21heFByb3BdO1xuICB2YXIgY2VudGVyID0gY2xpZW50U2l6ZSAvIDIgLSBhcnJvd1JlY3RbbGVuXSAvIDIgKyBjZW50ZXJUb1JlZmVyZW5jZTtcbiAgdmFyIG9mZnNldCA9IHdpdGhpbihtaW4sIGNlbnRlciwgbWF4KTsgLy8gUHJldmVudHMgYnJlYWtpbmcgc3ludGF4IGhpZ2hsaWdodGluZy4uLlxuXG4gIHZhciBheGlzUHJvcCA9IGF4aXM7XG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSAoX3N0YXRlJG1vZGlmaWVyc0RhdGEkID0ge30sIF9zdGF0ZSRtb2RpZmllcnNEYXRhJFtheGlzUHJvcF0gPSBvZmZzZXQsIF9zdGF0ZSRtb2RpZmllcnNEYXRhJC5jZW50ZXJPZmZzZXQgPSBvZmZzZXQgLSBjZW50ZXIsIF9zdGF0ZSRtb2RpZmllcnNEYXRhJCk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZWxlbWVudCA9IG9wdGlvbnMuZWxlbWVudCxcbiAgICAgIGFycm93RWxlbWVudCA9IF9vcHRpb25zJGVsZW1lbnQgPT09IHZvaWQgMCA/ICdbZGF0YS1wb3BwZXItYXJyb3ddJyA6IF9vcHRpb25zJGVsZW1lbnQ7XG5cbiAgaWYgKGFycm93RWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIENTUyBzZWxlY3RvclxuXG5cbiAgaWYgKHR5cGVvZiBhcnJvd0VsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMucG9wcGVyLnF1ZXJ5U2VsZWN0b3IoYXJyb3dFbGVtZW50KTtcblxuICAgIGlmICghYXJyb3dFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKCFjb250YWlucyhzdGF0ZS5lbGVtZW50cy5wb3BwZXIsIGFycm93RWxlbWVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0ZS5lbGVtZW50cy5hcnJvdyA9IGFycm93RWxlbWVudDtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2Fycm93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IGFycm93LFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddXG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZhcmlhdGlvbihwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xufSIsImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdW5zZXRTaWRlcyA9IHtcbiAgdG9wOiAnYXV0bycsXG4gIHJpZ2h0OiAnYXV0bycsXG4gIGJvdHRvbTogJ2F1dG8nLFxuICBsZWZ0OiAnYXV0bydcbn07IC8vIFJvdW5kIHRoZSBvZmZzZXRzIHRvIHRoZSBuZWFyZXN0IHN1aXRhYmxlIHN1YnBpeGVsIGJhc2VkIG9uIHRoZSBEUFIuXG4vLyBab29taW5nIGNhbiBjaGFuZ2UgdGhlIERQUiwgYnV0IGl0IHNlZW1zIHRvIHJlcG9ydCBhIHZhbHVlIHRoYXQgd2lsbFxuLy8gY2xlYW5seSBkaXZpZGUgdGhlIHZhbHVlcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBzdWJwaXhlbHMuXG5cbmZ1bmN0aW9uIHJvdW5kT2Zmc2V0c0J5RFBSKF9yZWYsIHdpbikge1xuICB2YXIgeCA9IF9yZWYueCxcbiAgICAgIHkgPSBfcmVmLnk7XG4gIHZhciBkcHIgPSB3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICByZXR1cm4ge1xuICAgIHg6IHJvdW5kKHggKiBkcHIpIC8gZHByIHx8IDAsXG4gICAgeTogcm91bmQoeSAqIGRwcikgLyBkcHIgfHwgMFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9TdHlsZXMoX3JlZjIpIHtcbiAgdmFyIF9PYmplY3QkYXNzaWduMjtcblxuICB2YXIgcG9wcGVyID0gX3JlZjIucG9wcGVyLFxuICAgICAgcG9wcGVyUmVjdCA9IF9yZWYyLnBvcHBlclJlY3QsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmMi5wbGFjZW1lbnQsXG4gICAgICB2YXJpYXRpb24gPSBfcmVmMi52YXJpYXRpb24sXG4gICAgICBvZmZzZXRzID0gX3JlZjIub2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uID0gX3JlZjIucG9zaXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfcmVmMi5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBhZGFwdGl2ZSA9IF9yZWYyLmFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzID0gX3JlZjIucm91bmRPZmZzZXRzLFxuICAgICAgaXNGaXhlZCA9IF9yZWYyLmlzRml4ZWQ7XG4gIHZhciBfb2Zmc2V0cyR4ID0gb2Zmc2V0cy54LFxuICAgICAgeCA9IF9vZmZzZXRzJHggPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR4LFxuICAgICAgX29mZnNldHMkeSA9IG9mZnNldHMueSxcbiAgICAgIHkgPSBfb2Zmc2V0cyR5ID09PSB2b2lkIDAgPyAwIDogX29mZnNldHMkeTtcblxuICB2YXIgX3JlZjMgPSB0eXBlb2Ygcm91bmRPZmZzZXRzID09PSAnZnVuY3Rpb24nID8gcm91bmRPZmZzZXRzKHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfSkgOiB7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG5cbiAgeCA9IF9yZWYzLng7XG4gIHkgPSBfcmVmMy55O1xuICB2YXIgaGFzWCA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3gnKTtcbiAgdmFyIGhhc1kgPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd5Jyk7XG4gIHZhciBzaWRlWCA9IGxlZnQ7XG4gIHZhciBzaWRlWSA9IHRvcDtcbiAgdmFyIHdpbiA9IHdpbmRvdztcblxuICBpZiAoYWRhcHRpdmUpIHtcbiAgICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KHBvcHBlcik7XG4gICAgdmFyIGhlaWdodFByb3AgPSAnY2xpZW50SGVpZ2h0JztcbiAgICB2YXIgd2lkdGhQcm9wID0gJ2NsaWVudFdpZHRoJztcblxuICAgIGlmIChvZmZzZXRQYXJlbnQgPT09IGdldFdpbmRvdyhwb3BwZXIpKSB7XG4gICAgICBvZmZzZXRQYXJlbnQgPSBnZXREb2N1bWVudEVsZW1lbnQocG9wcGVyKTtcblxuICAgICAgaWYgKGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiAhPT0gJ3N0YXRpYycgJiYgcG9zaXRpb24gPT09ICdhYnNvbHV0ZScpIHtcbiAgICAgICAgaGVpZ2h0UHJvcCA9ICdzY3JvbGxIZWlnaHQnO1xuICAgICAgICB3aWR0aFByb3AgPSAnc2Nyb2xsV2lkdGgnO1xuICAgICAgfVxuICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FzdF06IGZvcmNlIHR5cGUgcmVmaW5lbWVudCwgd2UgY29tcGFyZSBvZmZzZXRQYXJlbnQgd2l0aCB3aW5kb3cgYWJvdmUsIGJ1dCBGbG93IGRvZXNuJ3QgZGV0ZWN0IGl0XG5cblxuICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudDtcblxuICAgIGlmIChwbGFjZW1lbnQgPT09IHRvcCB8fCAocGxhY2VtZW50ID09PSBsZWZ0IHx8IHBsYWNlbWVudCA9PT0gcmlnaHQpICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWSA9IGJvdHRvbTtcbiAgICAgIHZhciBvZmZzZXRZID0gaXNGaXhlZCAmJiBvZmZzZXRQYXJlbnQgPT09IHdpbiAmJiB3aW4udmlzdWFsVmlld3BvcnQgPyB3aW4udmlzdWFsVmlld3BvcnQuaGVpZ2h0IDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICBvZmZzZXRQYXJlbnRbaGVpZ2h0UHJvcF07XG4gICAgICB5IC09IG9mZnNldFkgLSBwb3BwZXJSZWN0LmhlaWdodDtcbiAgICAgIHkgKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cblxuICAgIGlmIChwbGFjZW1lbnQgPT09IGxlZnQgfHwgKHBsYWNlbWVudCA9PT0gdG9wIHx8IHBsYWNlbWVudCA9PT0gYm90dG9tKSAmJiB2YXJpYXRpb24gPT09IGVuZCkge1xuICAgICAgc2lkZVggPSByaWdodDtcbiAgICAgIHZhciBvZmZzZXRYID0gaXNGaXhlZCAmJiBvZmZzZXRQYXJlbnQgPT09IHdpbiAmJiB3aW4udmlzdWFsVmlld3BvcnQgPyB3aW4udmlzdWFsVmlld3BvcnQud2lkdGggOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFt3aWR0aFByb3BdO1xuICAgICAgeCAtPSBvZmZzZXRYIC0gcG9wcGVyUmVjdC53aWR0aDtcbiAgICAgIHggKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb21tb25TdHlsZXMgPSBPYmplY3QuYXNzaWduKHtcbiAgICBwb3NpdGlvbjogcG9zaXRpb25cbiAgfSwgYWRhcHRpdmUgJiYgdW5zZXRTaWRlcyk7XG5cbiAgdmFyIF9yZWY0ID0gcm91bmRPZmZzZXRzID09PSB0cnVlID8gcm91bmRPZmZzZXRzQnlEUFIoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9LCBnZXRXaW5kb3cocG9wcGVyKSkgOiB7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG5cbiAgeCA9IF9yZWY0Lng7XG4gIHkgPSBfcmVmNC55O1xuXG4gIGlmIChncHVBY2NlbGVyYXRpb24pIHtcbiAgICB2YXIgX09iamVjdCRhc3NpZ247XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24gPSB7fSwgX09iamVjdCRhc3NpZ25bc2lkZVldID0gaGFzWSA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbltzaWRlWF0gPSBoYXNYID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduLnRyYW5zZm9ybSA9ICh3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSA8PSAxID8gXCJ0cmFuc2xhdGUoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweClcIiA6IFwidHJhbnNsYXRlM2QoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweCwgMClcIiwgX09iamVjdCRhc3NpZ24pKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbjIgPSB7fSwgX09iamVjdCRhc3NpZ24yW3NpZGVZXSA9IGhhc1kgPyB5ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMltzaWRlWF0gPSBoYXNYID8geCArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjIudHJhbnNmb3JtID0gJycsIF9PYmplY3QkYXNzaWduMikpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlU3R5bGVzKF9yZWY1KSB7XG4gIHZhciBzdGF0ZSA9IF9yZWY1LnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWY1Lm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPSBvcHRpb25zLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGdwdUFjY2VsZXJhdCxcbiAgICAgIF9vcHRpb25zJGFkYXB0aXZlID0gb3B0aW9ucy5hZGFwdGl2ZSxcbiAgICAgIGFkYXB0aXZlID0gX29wdGlvbnMkYWRhcHRpdmUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhZGFwdGl2ZSxcbiAgICAgIF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9IG9wdGlvbnMucm91bmRPZmZzZXRzLFxuICAgICAgcm91bmRPZmZzZXRzID0gX29wdGlvbnMkcm91bmRPZmZzZXRzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcm91bmRPZmZzZXRzO1xuICB2YXIgY29tbW9uU3R5bGVzID0ge1xuICAgIHBsYWNlbWVudDogZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHZhcmlhdGlvbjogZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCksXG4gICAgcG9wcGVyOiBzdGF0ZS5lbGVtZW50cy5wb3BwZXIsXG4gICAgcG9wcGVyUmVjdDogc3RhdGUucmVjdHMucG9wcGVyLFxuICAgIGdwdUFjY2VsZXJhdGlvbjogZ3B1QWNjZWxlcmF0aW9uLFxuICAgIGlzRml4ZWQ6IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3kgPT09ICdmaXhlZCdcbiAgfTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzICE9IG51bGwpIHtcbiAgICBzdGF0ZS5zdHlsZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLnBvcHBlciwgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMsXG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGFkYXB0aXZlOiBhZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93ICE9IG51bGwpIHtcbiAgICBzdGF0ZS5zdHlsZXMuYXJyb3cgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMuYXJyb3csIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgYWRhcHRpdmU6IGZhbHNlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1wbGFjZW1lbnQnOiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdjb21wdXRlU3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdiZWZvcmVXcml0ZScsXG4gIGZuOiBjb21wdXRlU3R5bGVzLFxuICBkYXRhOiB7fVxufTsiLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0V2luZG93LmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHBhc3NpdmUgPSB7XG4gIHBhc3NpdmU6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBpbnN0YW5jZSA9IF9yZWYuaW5zdGFuY2UsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkc2Nyb2xsID0gb3B0aW9ucy5zY3JvbGwsXG4gICAgICBzY3JvbGwgPSBfb3B0aW9ucyRzY3JvbGwgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRzY3JvbGwsXG4gICAgICBfb3B0aW9ucyRyZXNpemUgPSBvcHRpb25zLnJlc2l6ZSxcbiAgICAgIHJlc2l6ZSA9IF9vcHRpb25zJHJlc2l6ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJlc2l6ZTtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhzdGF0ZS5lbGVtZW50cy5wb3BwZXIpO1xuICB2YXIgc2Nyb2xsUGFyZW50cyA9IFtdLmNvbmNhdChzdGF0ZS5zY3JvbGxQYXJlbnRzLnJlZmVyZW5jZSwgc3RhdGUuc2Nyb2xsUGFyZW50cy5wb3BwZXIpO1xuXG4gIGlmIChzY3JvbGwpIHtcbiAgICBzY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHNjcm9sbFBhcmVudCkge1xuICAgICAgc2Nyb2xsUGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAocmVzaXplKSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChzY3JvbGwpIHtcbiAgICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICAgIHNjcm9sbFBhcmVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc2l6ZSkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgfVxuICB9O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZXZlbnRMaXN0ZW5lcnMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3dyaXRlJyxcbiAgZm46IGZ1bmN0aW9uIGZuKCkge30sXG4gIGVmZmVjdDogZWZmZWN0LFxuICBkYXRhOiB7fVxufTsiLCJ2YXIgaGFzaCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iLCJ2YXIgaGFzaCA9IHtcbiAgc3RhcnQ6ICdlbmQnLFxuICBlbmQ6ICdzdGFydCdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9zdGFydHxlbmQvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbChub2RlKSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3cobm9kZSk7XG4gIHZhciBzY3JvbGxMZWZ0ID0gd2luLnBhZ2VYT2Zmc2V0O1xuICB2YXIgc2Nyb2xsVG9wID0gd2luLnBhZ2VZT2Zmc2V0O1xuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBzY3JvbGxUb3BcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpIHtcbiAgLy8gSWYgPGh0bWw+IGhhcyBhIENTUyB3aWR0aCBncmVhdGVyIHRoYW4gdGhlIHZpZXdwb3J0LCB0aGVuIHRoaXMgd2lsbCBiZVxuICAvLyBpbmNvcnJlY3QgZm9yIFJUTC5cbiAgLy8gUG9wcGVyIDEgaXMgYnJva2VuIGluIHRoaXMgY2FzZSBhbmQgbmV2ZXIgaGFkIGEgYnVnIHJlcG9ydCBzbyBsZXQncyBhc3N1bWVcbiAgLy8gaXQncyBub3QgYW4gaXNzdWUuIEkgZG9uJ3QgdGhpbmsgYW55b25lIGV2ZXIgc3BlY2lmaWVzIHdpZHRoIG9uIDxodG1sPlxuICAvLyBhbnl3YXkuXG4gIC8vIEJyb3dzZXJzIHdoZXJlIHRoZSBsZWZ0IHNjcm9sbGJhciBkb2Vzbid0IGNhdXNlIGFuIGlzc3VlIHJlcG9ydCBgMGAgZm9yXG4gIC8vIHRoaXMgKGUuZy4gRWRnZSAyMDE5LCBJRTExLCBTYWZhcmkpXG4gIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgZ2V0V2luZG93U2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG59IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgaXNMYXlvdXRWaWV3cG9ydCBmcm9tIFwiLi9pc0xheW91dFZpZXdwb3J0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB2aXN1YWxWaWV3cG9ydCA9IHdpbi52aXN1YWxWaWV3cG9ydDtcbiAgdmFyIHdpZHRoID0gaHRtbC5jbGllbnRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGh0bWwuY2xpZW50SGVpZ2h0O1xuICB2YXIgeCA9IDA7XG4gIHZhciB5ID0gMDtcblxuICBpZiAodmlzdWFsVmlld3BvcnQpIHtcbiAgICB3aWR0aCA9IHZpc3VhbFZpZXdwb3J0LndpZHRoO1xuICAgIGhlaWdodCA9IHZpc3VhbFZpZXdwb3J0LmhlaWdodDtcbiAgICB2YXIgbGF5b3V0Vmlld3BvcnQgPSBpc0xheW91dFZpZXdwb3J0KCk7XG5cbiAgICBpZiAobGF5b3V0Vmlld3BvcnQgfHwgIWxheW91dFZpZXdwb3J0ICYmIHN0cmF0ZWd5ID09PSAnZml4ZWQnKSB7XG4gICAgICB4ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdDtcbiAgICAgIHkgPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgeDogeCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCksXG4gICAgeTogeVxuICB9O1xufSIsImltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IHsgbWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjsgLy8gR2V0cyB0aGUgZW50aXJlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgZG9jdW1lbnQgYXJlYSwgZXZlbiBleHRlbmRpbmcgb3V0c2lkZVxuLy8gb2YgdGhlIGA8aHRtbD5gIGFuZCBgPGJvZHk+YCByZWN0IGJvdW5kcyBpZiBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudFJlY3QoZWxlbWVudCkge1xuICB2YXIgX2VsZW1lbnQkb3duZXJEb2N1bWVuO1xuXG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgd2luU2Nyb2xsID0gZ2V0V2luZG93U2Nyb2xsKGVsZW1lbnQpO1xuICB2YXIgYm9keSA9IChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keTtcbiAgdmFyIHdpZHRoID0gbWF4KGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LnNjcm9sbFdpZHRoIDogMCwgYm9keSA/IGJvZHkuY2xpZW50V2lkdGggOiAwKTtcbiAgdmFyIGhlaWdodCA9IG1heChodG1sLnNjcm9sbEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGJvZHkgPyBib2R5LnNjcm9sbEhlaWdodCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudEhlaWdodCA6IDApO1xuICB2YXIgeCA9IC13aW5TY3JvbGwuc2Nyb2xsTGVmdCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCk7XG4gIHZhciB5ID0gLXdpblNjcm9sbC5zY3JvbGxUb3A7XG5cbiAgaWYgKGdldENvbXB1dGVkU3R5bGUoYm9keSB8fCBodG1sKS5kaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgeCArPSBtYXgoaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuY2xpZW50V2lkdGggOiAwKSAtIHdpZHRoO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG59IiwiaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNTY3JvbGxQYXJlbnQoZWxlbWVudCkge1xuICAvLyBGaXJlZm94IHdhbnRzIHVzIHRvIGNoZWNrIGAteGAgYW5kIGAteWAgdmFyaWF0aW9ucyBhcyB3ZWxsXG4gIHZhciBfZ2V0Q29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCksXG4gICAgICBvdmVyZmxvdyA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93LFxuICAgICAgb3ZlcmZsb3dYID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dZO1xuXG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW4vLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpO1xufSIsImltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KG5vZGUpIHtcbiAgaWYgKFsnaHRtbCcsICdib2R5JywgJyNkb2N1bWVudCddLmluZGV4T2YoZ2V0Tm9kZU5hbWUobm9kZSkpID49IDApIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudC5ib2R5O1xuICB9XG5cbiAgaWYgKGlzSFRNTEVsZW1lbnQobm9kZSkgJiYgaXNTY3JvbGxQYXJlbnQobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiBnZXRTY3JvbGxQYXJlbnQoZ2V0UGFyZW50Tm9kZShub2RlKSk7XG59IiwiaW1wb3J0IGdldFNjcm9sbFBhcmVudCBmcm9tIFwiLi9nZXRTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbi8qXG5naXZlbiBhIERPTSBlbGVtZW50LCByZXR1cm4gdGhlIGxpc3Qgb2YgYWxsIHNjcm9sbCBwYXJlbnRzLCB1cCB0aGUgbGlzdCBvZiBhbmNlc29yc1xudW50aWwgd2UgZ2V0IHRvIHRoZSB0b3Agd2luZG93IG9iamVjdC4gVGhpcyBsaXN0IGlzIHdoYXQgd2UgYXR0YWNoIHNjcm9sbCBsaXN0ZW5lcnNcbnRvLCBiZWNhdXNlIGlmIGFueSBvZiB0aGVzZSBwYXJlbnQgZWxlbWVudHMgc2Nyb2xsLCB3ZSdsbCBuZWVkIHRvIHJlLWNhbGN1bGF0ZSB0aGVcbnJlZmVyZW5jZSBlbGVtZW50J3MgcG9zaXRpb24uXG4qL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaXN0U2Nyb2xsUGFyZW50cyhlbGVtZW50LCBsaXN0KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuXG4gIHZhciBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQoZWxlbWVudCk7XG4gIHZhciBpc0JvZHkgPSBzY3JvbGxQYXJlbnQgPT09ICgoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHkpO1xuICB2YXIgd2luID0gZ2V0V2luZG93KHNjcm9sbFBhcmVudCk7XG4gIHZhciB0YXJnZXQgPSBpc0JvZHkgPyBbd2luXS5jb25jYXQod2luLnZpc3VhbFZpZXdwb3J0IHx8IFtdLCBpc1Njcm9sbFBhcmVudChzY3JvbGxQYXJlbnQpID8gc2Nyb2xsUGFyZW50IDogW10pIDogc2Nyb2xsUGFyZW50O1xuICB2YXIgdXBkYXRlZExpc3QgPSBsaXN0LmNvbmNhdCh0YXJnZXQpO1xuICByZXR1cm4gaXNCb2R5ID8gdXBkYXRlZExpc3QgOiAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogaXNCb2R5IHRlbGxzIHVzIHRhcmdldCB3aWxsIGJlIGFuIEhUTUxFbGVtZW50IGhlcmVcbiAgdXBkYXRlZExpc3QuY29uY2F0KGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUodGFyZ2V0KSkpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcmVjdCwge1xuICAgIGxlZnQ6IHJlY3QueCxcbiAgICB0b3A6IHJlY3QueSxcbiAgICByaWdodDogcmVjdC54ICsgcmVjdC53aWR0aCxcbiAgICBib3R0b206IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gIH0pO1xufSIsImltcG9ydCB7IHZpZXdwb3J0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0Vmlld3BvcnRSZWN0IGZyb20gXCIuL2dldFZpZXdwb3J0UmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50UmVjdCBmcm9tIFwiLi9nZXREb2N1bWVudFJlY3QuanNcIjtcbmltcG9ydCBsaXN0U2Nyb2xsUGFyZW50cyBmcm9tIFwiLi9saXN0U2Nyb2xsUGFyZW50cy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuL2NvbnRhaW5zLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCByZWN0VG9DbGllbnRSZWN0IGZyb20gXCIuLi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgeyBtYXgsIG1pbiB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGZhbHNlLCBzdHJhdGVneSA9PT0gJ2ZpeGVkJyk7XG4gIHJlY3QudG9wID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudFRvcDtcbiAgcmVjdC5sZWZ0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICByZWN0LmJvdHRvbSA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QucmlnaHQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LndpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC5oZWlnaHQgPSBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC54ID0gcmVjdC5sZWZ0O1xuICByZWN0LnkgPSByZWN0LnRvcDtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkge1xuICByZXR1cm4gY2xpcHBpbmdQYXJlbnQgPT09IHZpZXdwb3J0ID8gcmVjdFRvQ2xpZW50UmVjdChnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpKSA6IGlzRWxlbWVudChjbGlwcGluZ1BhcmVudCkgPyBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpIDogcmVjdFRvQ2xpZW50UmVjdChnZXREb2N1bWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKSk7XG59IC8vIEEgXCJjbGlwcGluZyBwYXJlbnRcIiBpcyBhbiBvdmVyZmxvd2FibGUgY29udGFpbmVyIHdpdGggdGhlIGNoYXJhY3RlcmlzdGljIG9mXG4vLyBjbGlwcGluZyAob3IgaGlkaW5nKSBvdmVyZmxvd2luZyBlbGVtZW50cyB3aXRoIGEgcG9zaXRpb24gZGlmZmVyZW50IGZyb21cbi8vIGBpbml0aWFsYFxuXG5cbmZ1bmN0aW9uIGdldENsaXBwaW5nUGFyZW50cyhlbGVtZW50KSB7XG4gIHZhciBjbGlwcGluZ1BhcmVudHMgPSBsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKGVsZW1lbnQpKTtcbiAgdmFyIGNhbkVzY2FwZUNsaXBwaW5nID0gWydhYnNvbHV0ZScsICdmaXhlZCddLmluZGV4T2YoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbikgPj0gMDtcbiAgdmFyIGNsaXBwZXJFbGVtZW50ID0gY2FuRXNjYXBlQ2xpcHBpbmcgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSA/IGdldE9mZnNldFBhcmVudChlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgaWYgKCFpc0VsZW1lbnQoY2xpcHBlckVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8xNDE0XG5cblxuICByZXR1cm4gY2xpcHBpbmdQYXJlbnRzLmZpbHRlcihmdW5jdGlvbiAoY2xpcHBpbmdQYXJlbnQpIHtcbiAgICByZXR1cm4gaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSAmJiBjb250YWlucyhjbGlwcGluZ1BhcmVudCwgY2xpcHBlckVsZW1lbnQpICYmIGdldE5vZGVOYW1lKGNsaXBwaW5nUGFyZW50KSAhPT0gJ2JvZHknO1xuICB9KTtcbn0gLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgcGFyZW50c1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENsaXBwaW5nUmVjdChlbGVtZW50LCBib3VuZGFyeSwgcm9vdEJvdW5kYXJ5LCBzdHJhdGVneSkge1xuICB2YXIgbWFpbkNsaXBwaW5nUGFyZW50cyA9IGJvdW5kYXJ5ID09PSAnY2xpcHBpbmdQYXJlbnRzJyA/IGdldENsaXBwaW5nUGFyZW50cyhlbGVtZW50KSA6IFtdLmNvbmNhdChib3VuZGFyeSk7XG4gIHZhciBjbGlwcGluZ1BhcmVudHMgPSBbXS5jb25jYXQobWFpbkNsaXBwaW5nUGFyZW50cywgW3Jvb3RCb3VuZGFyeV0pO1xuICB2YXIgZmlyc3RDbGlwcGluZ1BhcmVudCA9IGNsaXBwaW5nUGFyZW50c1swXTtcbiAgdmFyIGNsaXBwaW5nUmVjdCA9IGNsaXBwaW5nUGFyZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjY1JlY3QsIGNsaXBwaW5nUGFyZW50KSB7XG4gICAgdmFyIHJlY3QgPSBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpO1xuICAgIGFjY1JlY3QudG9wID0gbWF4KHJlY3QudG9wLCBhY2NSZWN0LnRvcCk7XG4gICAgYWNjUmVjdC5yaWdodCA9IG1pbihyZWN0LnJpZ2h0LCBhY2NSZWN0LnJpZ2h0KTtcbiAgICBhY2NSZWN0LmJvdHRvbSA9IG1pbihyZWN0LmJvdHRvbSwgYWNjUmVjdC5ib3R0b20pO1xuICAgIGFjY1JlY3QubGVmdCA9IG1heChyZWN0LmxlZnQsIGFjY1JlY3QubGVmdCk7XG4gICAgcmV0dXJuIGFjY1JlY3Q7XG4gIH0sIGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGZpcnN0Q2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSk7XG4gIGNsaXBwaW5nUmVjdC53aWR0aCA9IGNsaXBwaW5nUmVjdC5yaWdodCAtIGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QuaGVpZ2h0ID0gY2xpcHBpbmdSZWN0LmJvdHRvbSAtIGNsaXBwaW5nUmVjdC50b3A7XG4gIGNsaXBwaW5nUmVjdC54ID0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC55ID0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgcmV0dXJuIGNsaXBwaW5nUmVjdDtcbn0iLCJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgc3RhcnQsIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZU9mZnNldHMoX3JlZikge1xuICB2YXIgcmVmZXJlbmNlID0gX3JlZi5yZWZlcmVuY2UsXG4gICAgICBlbGVtZW50ID0gX3JlZi5lbGVtZW50LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZi5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50ID8gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIDogbnVsbDtcbiAgdmFyIHZhcmlhdGlvbiA9IHBsYWNlbWVudCA/IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpIDogbnVsbDtcbiAgdmFyIGNvbW1vblggPSByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCAvIDIgLSBlbGVtZW50LndpZHRoIC8gMjtcbiAgdmFyIGNvbW1vblkgPSByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHQgLyAyIC0gZWxlbWVudC5oZWlnaHQgLyAyO1xuICB2YXIgb2Zmc2V0cztcblxuICBzd2l0Y2ggKGJhc2VQbGFjZW1lbnQpIHtcbiAgICBjYXNlIHRvcDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55IC0gZWxlbWVudC5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgYm90dG9tOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIHJpZ2h0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgbGVmdDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54IC0gZWxlbWVudC53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54LFxuICAgICAgICB5OiByZWZlcmVuY2UueVxuICAgICAgfTtcbiAgfVxuXG4gIHZhciBtYWluQXhpcyA9IGJhc2VQbGFjZW1lbnQgPyBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCkgOiBudWxsO1xuXG4gIGlmIChtYWluQXhpcyAhPSBudWxsKSB7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgICBzd2l0Y2ggKHZhcmlhdGlvbikge1xuICAgICAgY2FzZSBzdGFydDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSAtIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgZW5kOlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdICsgKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0cztcbn0iLCJpbXBvcnQgZ2V0Q2xpcHBpbmdSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgY29tcHV0ZU9mZnNldHMgZnJvbSBcIi4vY29tcHV0ZU9mZnNldHMuanNcIjtcbmltcG9ydCByZWN0VG9DbGllbnRSZWN0IGZyb20gXCIuL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IGNsaXBwaW5nUGFyZW50cywgcmVmZXJlbmNlLCBwb3BwZXIsIGJvdHRvbSwgdG9wLCByaWdodCwgYmFzZVBsYWNlbWVudHMsIHZpZXdwb3J0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBtZXJnZVBhZGRpbmdPYmplY3QgZnJvbSBcIi4vbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuL2V4cGFuZFRvSGFzaE1hcC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KHN0YXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgX29wdGlvbnMkcGxhY2VtZW50ID0gX29wdGlvbnMucGxhY2VtZW50LFxuICAgICAgcGxhY2VtZW50ID0gX29wdGlvbnMkcGxhY2VtZW50ID09PSB2b2lkIDAgPyBzdGF0ZS5wbGFjZW1lbnQgOiBfb3B0aW9ucyRwbGFjZW1lbnQsXG4gICAgICBfb3B0aW9ucyRzdHJhdGVneSA9IF9vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgc3RyYXRlZ3kgPSBfb3B0aW9ucyRzdHJhdGVneSA9PT0gdm9pZCAwID8gc3RhdGUuc3RyYXRlZ3kgOiBfb3B0aW9ucyRzdHJhdGVneSxcbiAgICAgIF9vcHRpb25zJGJvdW5kYXJ5ID0gX29wdGlvbnMuYm91bmRhcnksXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zJGJvdW5kYXJ5ID09PSB2b2lkIDAgPyBjbGlwcGluZ1BhcmVudHMgOiBfb3B0aW9ucyRib3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zJHJvb3RCb3VuZGFyeSA9PT0gdm9pZCAwID8gdmlld3BvcnQgOiBfb3B0aW9ucyRyb290Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRlbGVtZW50Q29udGUgPSBfb3B0aW9ucy5lbGVtZW50Q29udGV4dCxcbiAgICAgIGVsZW1lbnRDb250ZXh0ID0gX29wdGlvbnMkZWxlbWVudENvbnRlID09PSB2b2lkIDAgPyBwb3BwZXIgOiBfb3B0aW9ucyRlbGVtZW50Q29udGUsXG4gICAgICBfb3B0aW9ucyRhbHRCb3VuZGFyeSA9IF9vcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBfb3B0aW9ucyRhbHRCb3VuZGFyeSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJHBhZGRpbmcgPSBfb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zJHBhZGRpbmcgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyRwYWRkaW5nO1xuICB2YXIgcGFkZGluZ09iamVjdCA9IG1lcmdlUGFkZGluZ09iamVjdCh0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBwYWRkaW5nIDogZXhwYW5kVG9IYXNoTWFwKHBhZGRpbmcsIGJhc2VQbGFjZW1lbnRzKSk7XG4gIHZhciBhbHRDb250ZXh0ID0gZWxlbWVudENvbnRleHQgPT09IHBvcHBlciA/IHJlZmVyZW5jZSA6IHBvcHBlcjtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICB2YXIgY2xpcHBpbmdDbGllbnRSZWN0ID0gZ2V0Q2xpcHBpbmdSZWN0KGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQgOiBlbGVtZW50LmNvbnRleHRFbGVtZW50IHx8IGdldERvY3VtZW50RWxlbWVudChzdGF0ZS5lbGVtZW50cy5wb3BwZXIpLCBib3VuZGFyeSwgcm9vdEJvdW5kYXJ5LCBzdHJhdGVneSk7XG4gIHZhciByZWZlcmVuY2VDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHN0YXRlLmVsZW1lbnRzLnJlZmVyZW5jZSk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlQ2xpZW50UmVjdCxcbiAgICBlbGVtZW50OiBwb3BwZXJSZWN0LFxuICAgIHN0cmF0ZWd5OiAnYWJzb2x1dGUnLFxuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pO1xuICB2YXIgcG9wcGVyQ2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QoT2JqZWN0LmFzc2lnbih7fSwgcG9wcGVyUmVjdCwgcG9wcGVyT2Zmc2V0cykpO1xuICB2YXIgZWxlbWVudENsaWVudFJlY3QgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcG9wcGVyQ2xpZW50UmVjdCA6IHJlZmVyZW5jZUNsaWVudFJlY3Q7IC8vIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIHJlY3RcbiAgLy8gMCBvciBuZWdhdGl2ZSA9IHdpdGhpbiB0aGUgY2xpcHBpbmcgcmVjdFxuXG4gIHZhciBvdmVyZmxvd09mZnNldHMgPSB7XG4gICAgdG9wOiBjbGlwcGluZ0NsaWVudFJlY3QudG9wIC0gZWxlbWVudENsaWVudFJlY3QudG9wICsgcGFkZGluZ09iamVjdC50b3AsXG4gICAgYm90dG9tOiBlbGVtZW50Q2xpZW50UmVjdC5ib3R0b20gLSBjbGlwcGluZ0NsaWVudFJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20sXG4gICAgbGVmdDogY2xpcHBpbmdDbGllbnRSZWN0LmxlZnQgLSBlbGVtZW50Q2xpZW50UmVjdC5sZWZ0ICsgcGFkZGluZ09iamVjdC5sZWZ0LFxuICAgIHJpZ2h0OiBlbGVtZW50Q2xpZW50UmVjdC5yaWdodCAtIGNsaXBwaW5nQ2xpZW50UmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHRcbiAgfTtcbiAgdmFyIG9mZnNldERhdGEgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldDsgLy8gT2Zmc2V0cyBjYW4gYmUgYXBwbGllZCBvbmx5IHRvIHRoZSBwb3BwZXIgZWxlbWVudFxuXG4gIGlmIChlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyICYmIG9mZnNldERhdGEpIHtcbiAgICB2YXIgb2Zmc2V0ID0gb2Zmc2V0RGF0YVtwbGFjZW1lbnRdO1xuICAgIE9iamVjdC5rZXlzKG92ZXJmbG93T2Zmc2V0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgbXVsdGlwbHkgPSBbcmlnaHQsIGJvdHRvbV0uaW5kZXhPZihrZXkpID49IDAgPyAxIDogLTE7XG4gICAgICB2YXIgYXhpcyA9IFt0b3AsIGJvdHRvbV0uaW5kZXhPZihrZXkpID49IDAgPyAneScgOiAneCc7XG4gICAgICBvdmVyZmxvd09mZnNldHNba2V5XSArPSBvZmZzZXRbYXhpc10gKiBtdWx0aXBseTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBvdmVyZmxvd09mZnNldHM7XG59IiwiaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHZhcmlhdGlvblBsYWNlbWVudHMsIGJhc2VQbGFjZW1lbnRzLCBwbGFjZW1lbnRzIGFzIGFsbFBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgX29wdGlvbnMkYWxsb3dlZEF1dG9QID0gX29wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gX29wdGlvbnMkYWxsb3dlZEF1dG9QID09PSB2b2lkIDAgPyBhbGxQbGFjZW1lbnRzIDogX29wdGlvbnMkYWxsb3dlZEF1dG9QO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCk7XG4gIHZhciBwbGFjZW1lbnRzID0gdmFyaWF0aW9uID8gZmxpcFZhcmlhdGlvbnMgPyB2YXJpYXRpb25QbGFjZW1lbnRzIDogdmFyaWF0aW9uUGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gdmFyaWF0aW9uO1xuICB9KSA6IGJhc2VQbGFjZW1lbnRzO1xuICB2YXIgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFsbG93ZWRBdXRvUGxhY2VtZW50cy5pbmRleE9mKHBsYWNlbWVudCkgPj0gMDtcbiAgfSk7XG5cbiAgaWYgKGFsbG93ZWRQbGFjZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cztcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXTogRmxvdyBzZWVtcyB0byBoYXZlIHByb2JsZW1zIHdpdGggdHdvIGFycmF5IHVuaW9ucy4uLlxuXG5cbiAgdmFyIG92ZXJmbG93cyA9IGFsbG93ZWRQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pW2dldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KV07XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICByZXR1cm4gT2JqZWN0LmtleXMob3ZlcmZsb3dzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93c1thXSAtIG92ZXJmbG93c1tiXTtcbiAgfSk7XG59IiwiaW1wb3J0IGdldE9wcG9zaXRlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBjb21wdXRlQXV0b1BsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IGJvdHRvbSwgdG9wLCBzdGFydCwgcmlnaHQsIGxlZnQsIGF1dG8gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmZ1bmN0aW9uIGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHBsYWNlbWVudCkge1xuICBpZiAoZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpID09PSBhdXRvKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdmFyIG9wcG9zaXRlUGxhY2VtZW50ID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgcmV0dXJuIFtnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChwbGFjZW1lbnQpLCBvcHBvc2l0ZVBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQob3Bwb3NpdGVQbGFjZW1lbnQpXTtcbn1cblxuZnVuY3Rpb24gZmxpcChfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyRtYWluQXhpcyA9IG9wdGlvbnMubWFpbkF4aXMsXG4gICAgICBjaGVja01haW5BeGlzID0gX29wdGlvbnMkbWFpbkF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRtYWluQXhpcyxcbiAgICAgIF9vcHRpb25zJGFsdEF4aXMgPSBvcHRpb25zLmFsdEF4aXMsXG4gICAgICBjaGVja0FsdEF4aXMgPSBfb3B0aW9ucyRhbHRBeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWx0QXhpcyxcbiAgICAgIHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyA9IG9wdGlvbnMuZmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyxcbiAgICAgIGJvdW5kYXJ5ID0gb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IG9wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBvcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkZmxpcFZhcmlhdGlvID0gb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyxcbiAgICAgIGZsaXBWYXJpYXRpb25zID0gX29wdGlvbnMkZmxpcFZhcmlhdGlvID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkZmxpcFZhcmlhdGlvLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gb3B0aW9ucy5hbGxvd2VkQXV0b1BsYWNlbWVudHM7XG4gIHZhciBwcmVmZXJyZWRQbGFjZW1lbnQgPSBzdGF0ZS5vcHRpb25zLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHByZWZlcnJlZFBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSBiYXNlUGxhY2VtZW50ID09PSBwcmVmZXJyZWRQbGFjZW1lbnQ7XG4gIHZhciBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcFZhcmlhdGlvbnMgPyBbZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyhwcmVmZXJyZWRQbGFjZW1lbnQpKTtcbiAgdmFyIHBsYWNlbWVudHMgPSBbcHJlZmVycmVkUGxhY2VtZW50XS5jb25jYXQoZmFsbGJhY2tQbGFjZW1lbnRzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFjYy5jb25jYXQoZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpID09PSBhdXRvID8gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nLFxuICAgICAgZmxpcFZhcmlhdGlvbnM6IGZsaXBWYXJpYXRpb25zLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzOiBhbGxvd2VkQXV0b1BsYWNlbWVudHNcbiAgICB9KSA6IHBsYWNlbWVudCk7XG4gIH0sIFtdKTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgY2hlY2tzTWFwID0gbmV3IE1hcCgpO1xuICB2YXIgbWFrZUZhbGxiYWNrQ2hlY2tzID0gdHJ1ZTtcbiAgdmFyIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHNbMF07XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbGFjZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHBsYWNlbWVudCA9IHBsYWNlbWVudHNbaV07XG5cbiAgICB2YXIgX2Jhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG5cbiAgICB2YXIgaXNTdGFydFZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSBzdGFydDtcbiAgICB2YXIgaXNWZXJ0aWNhbCA9IFt0b3AsIGJvdHRvbV0uaW5kZXhPZihfYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgICB2YXIgbGVuID0gaXNWZXJ0aWNhbCA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICB2YXIgb3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5OiBhbHRCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmdcbiAgICB9KTtcbiAgICB2YXIgbWFpblZhcmlhdGlvblNpZGUgPSBpc1ZlcnRpY2FsID8gaXNTdGFydFZhcmlhdGlvbiA/IHJpZ2h0IDogbGVmdCA6IGlzU3RhcnRWYXJpYXRpb24gPyBib3R0b20gOiB0b3A7XG5cbiAgICBpZiAocmVmZXJlbmNlUmVjdFtsZW5dID4gcG9wcGVyUmVjdFtsZW5dKSB7XG4gICAgICBtYWluVmFyaWF0aW9uU2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5WYXJpYXRpb25TaWRlKTtcbiAgICB9XG5cbiAgICB2YXIgYWx0VmFyaWF0aW9uU2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5WYXJpYXRpb25TaWRlKTtcbiAgICB2YXIgY2hlY2tzID0gW107XG5cbiAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbX2Jhc2VQbGFjZW1lbnRdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKG92ZXJmbG93W21haW5WYXJpYXRpb25TaWRlXSA8PSAwLCBvdmVyZmxvd1thbHRWYXJpYXRpb25TaWRlXSA8PSAwKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tzLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgcmV0dXJuIGNoZWNrO1xuICAgIH0pKSB7XG4gICAgICBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICBtYWtlRmFsbGJhY2tDaGVja3MgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNoZWNrc01hcC5zZXQocGxhY2VtZW50LCBjaGVja3MpO1xuICB9XG5cbiAgaWYgKG1ha2VGYWxsYmFja0NoZWNrcykge1xuICAgIC8vIGAyYCBtYXkgYmUgZGVzaXJlZCBpbiBzb21lIGNhc2VzIOKAkyByZXNlYXJjaCBsYXRlclxuICAgIHZhciBudW1iZXJPZkNoZWNrcyA9IGZsaXBWYXJpYXRpb25zID8gMyA6IDE7XG5cbiAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChfaSkge1xuICAgICAgdmFyIGZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnRzLmZpbmQoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgICAgICB2YXIgY2hlY2tzID0gY2hlY2tzTWFwLmdldChwbGFjZW1lbnQpO1xuXG4gICAgICAgIGlmIChjaGVja3MpIHtcbiAgICAgICAgICByZXR1cm4gY2hlY2tzLnNsaWNlKDAsIF9pKS5ldmVyeShmdW5jdGlvbiAoY2hlY2spIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVjaztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChmaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IGZpdHRpbmdQbGFjZW1lbnQ7XG4gICAgICAgIHJldHVybiBcImJyZWFrXCI7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvciAodmFyIF9pID0gbnVtYmVyT2ZDaGVja3M7IF9pID4gMDsgX2ktLSkge1xuICAgICAgdmFyIF9yZXQgPSBfbG9vcChfaSk7XG5cbiAgICAgIGlmIChfcmV0ID09PSBcImJyZWFrXCIpIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0ZS5wbGFjZW1lbnQgIT09IGZpcnN0Rml0dGluZ1BsYWNlbWVudCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0uX3NraXAgPSB0cnVlO1xuICAgIHN0YXRlLnBsYWNlbWVudCA9IGZpcnN0Rml0dGluZ1BsYWNlbWVudDtcbiAgICBzdGF0ZS5yZXNldCA9IHRydWU7XG4gIH1cbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2ZsaXAnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogZmxpcCxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXSxcbiAgZGF0YToge1xuICAgIF9za2lwOiBmYWxzZVxuICB9XG59OyIsImltcG9ydCB7IHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuXG5mdW5jdGlvbiBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdCwgcHJldmVudGVkT2Zmc2V0cykge1xuICBpZiAocHJldmVudGVkT2Zmc2V0cyA9PT0gdm9pZCAwKSB7XG4gICAgcHJldmVudGVkT2Zmc2V0cyA9IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdG9wOiBvdmVyZmxvdy50b3AgLSByZWN0LmhlaWdodCAtIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICByaWdodDogb3ZlcmZsb3cucmlnaHQgLSByZWN0LndpZHRoICsgcHJldmVudGVkT2Zmc2V0cy54LFxuICAgIGJvdHRvbTogb3ZlcmZsb3cuYm90dG9tIC0gcmVjdC5oZWlnaHQgKyBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgbGVmdDogb3ZlcmZsb3cubGVmdCAtIHJlY3Qud2lkdGggLSBwcmV2ZW50ZWRPZmZzZXRzLnhcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG92ZXJmbG93KSB7XG4gIHJldHVybiBbdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XS5zb21lKGZ1bmN0aW9uIChzaWRlKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93W3NpZGVdID49IDA7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoaWRlKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIHByZXZlbnRlZE9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnByZXZlbnRPdmVyZmxvdztcbiAgdmFyIHJlZmVyZW5jZU92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBlbGVtZW50Q29udGV4dDogJ3JlZmVyZW5jZSdcbiAgfSk7XG4gIHZhciBwb3BwZXJBbHRPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgYWx0Qm91bmRhcnk6IHRydWVcbiAgfSk7XG4gIHZhciByZWZlcmVuY2VDbGlwcGluZ09mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhyZWZlcmVuY2VPdmVyZmxvdywgcmVmZXJlbmNlUmVjdCk7XG4gIHZhciBwb3BwZXJFc2NhcGVPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocG9wcGVyQWx0T3ZlcmZsb3csIHBvcHBlclJlY3QsIHByZXZlbnRlZE9mZnNldHMpO1xuICB2YXIgaXNSZWZlcmVuY2VIaWRkZW4gPSBpc0FueVNpZGVGdWxseUNsaXBwZWQocmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzKTtcbiAgdmFyIGhhc1BvcHBlckVzY2FwZWQgPSBpc0FueVNpZGVGdWxseUNsaXBwZWQocG9wcGVyRXNjYXBlT2Zmc2V0cyk7XG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSB7XG4gICAgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzOiByZWZlcmVuY2VDbGlwcGluZ09mZnNldHMsXG4gICAgcG9wcGVyRXNjYXBlT2Zmc2V0czogcG9wcGVyRXNjYXBlT2Zmc2V0cyxcbiAgICBpc1JlZmVyZW5jZUhpZGRlbjogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgaGFzUG9wcGVyRXNjYXBlZDogaGFzUG9wcGVyRXNjYXBlZFxuICB9O1xuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXJlZmVyZW5jZS1oaWRkZW4nOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICAnZGF0YS1wb3BwZXItZXNjYXBlZCc6IGhhc1BvcHBlckVzY2FwZWRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdoaWRlJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXSxcbiAgZm46IGhpZGVcbn07IiwiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIHBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCByZWN0cywgb2Zmc2V0KSB7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICB2YXIgaW52ZXJ0RGlzdGFuY2UgPSBbbGVmdCwgdG9wXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyAtMSA6IDE7XG5cbiAgdmFyIF9yZWYgPSB0eXBlb2Ygb2Zmc2V0ID09PSAnZnVuY3Rpb24nID8gb2Zmc2V0KE9iamVjdC5hc3NpZ24oe30sIHJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSkpIDogb2Zmc2V0LFxuICAgICAgc2tpZGRpbmcgPSBfcmVmWzBdLFxuICAgICAgZGlzdGFuY2UgPSBfcmVmWzFdO1xuXG4gIHNraWRkaW5nID0gc2tpZGRpbmcgfHwgMDtcbiAgZGlzdGFuY2UgPSAoZGlzdGFuY2UgfHwgMCkgKiBpbnZlcnREaXN0YW5jZTtcbiAgcmV0dXJuIFtsZWZ0LCByaWdodF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8ge1xuICAgIHg6IGRpc3RhbmNlLFxuICAgIHk6IHNraWRkaW5nXG4gIH0gOiB7XG4gICAgeDogc2tpZGRpbmcsXG4gICAgeTogZGlzdGFuY2VcbiAgfTtcbn1cblxuZnVuY3Rpb24gb2Zmc2V0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYyLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZjIubmFtZTtcbiAgdmFyIF9vcHRpb25zJG9mZnNldCA9IG9wdGlvbnMub2Zmc2V0LFxuICAgICAgb2Zmc2V0ID0gX29wdGlvbnMkb2Zmc2V0ID09PSB2b2lkIDAgPyBbMCwgMF0gOiBfb3B0aW9ucyRvZmZzZXQ7XG4gIHZhciBkYXRhID0gcGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgYWNjW3BsYWNlbWVudF0gPSBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShwbGFjZW1lbnQsIHN0YXRlLnJlY3RzLCBvZmZzZXQpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgdmFyIF9kYXRhJHN0YXRlJHBsYWNlbWVudCA9IGRhdGFbc3RhdGUucGxhY2VtZW50XSxcbiAgICAgIHggPSBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQueCxcbiAgICAgIHkgPSBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQueTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzICE9IG51bGwpIHtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueCArPSB4O1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy55ICs9IHk7XG4gIH1cblxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gZGF0YTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ29mZnNldCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgZm46IG9mZnNldFxufTsiLCJpbXBvcnQgY29tcHV0ZU9mZnNldHMgZnJvbSBcIi4uL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzXCI7XG5cbmZ1bmN0aW9uIHBvcHBlck9mZnNldHMoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgLy8gT2Zmc2V0cyBhcmUgdGhlIGFjdHVhbCBwb3NpdGlvbiB0aGUgcG9wcGVyIG5lZWRzIHRvIGhhdmUgdG8gYmVcbiAgLy8gcHJvcGVybHkgcG9zaXRpb25lZCBuZWFyIGl0cyByZWZlcmVuY2UgZWxlbWVudFxuICAvLyBUaGlzIGlzIHRoZSBtb3N0IGJhc2ljIHBsYWNlbWVudCwgYW5kIHdpbGwgYmUgYWRqdXN0ZWQgYnlcbiAgLy8gdGhlIG1vZGlmaWVycyBpbiB0aGUgbmV4dCBzdGVwXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiBzdGF0ZS5yZWN0cy5yZWZlcmVuY2UsXG4gICAgZWxlbWVudDogc3RhdGUucmVjdHMucG9wcGVyLFxuICAgIHN0cmF0ZWd5OiAnYWJzb2x1dGUnLFxuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncG9wcGVyT2Zmc2V0cycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAncmVhZCcsXG4gIGZuOiBwb3BwZXJPZmZzZXRzLFxuICBkYXRhOiB7fVxufTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRBbHRBeGlzKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd4JyA/ICd5JyA6ICd4Jztcbn0iLCJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIHN0YXJ0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QWx0QXhpcyBmcm9tIFwiLi4vdXRpbHMvZ2V0QWx0QXhpcy5qc1wiO1xuaW1wb3J0IHsgd2l0aGluLCB3aXRoaW5NYXhDbGFtcCB9IGZyb20gXCIuLi91dGlscy93aXRoaW4uanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuLi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanNcIjtcbmltcG9ydCB7IG1pbiBhcyBtYXRoTWluLCBtYXggYXMgbWF0aE1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIHByZXZlbnRPdmVyZmxvdyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkYWx0QXhpcyxcbiAgICAgIGJvdW5kYXJ5ID0gb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IG9wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBvcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyxcbiAgICAgIF9vcHRpb25zJHRldGhlciA9IG9wdGlvbnMudGV0aGVyLFxuICAgICAgdGV0aGVyID0gX29wdGlvbnMkdGV0aGVyID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkdGV0aGVyLFxuICAgICAgX29wdGlvbnMkdGV0aGVyT2Zmc2V0ID0gb3B0aW9ucy50ZXRoZXJPZmZzZXQsXG4gICAgICB0ZXRoZXJPZmZzZXQgPSBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQ7XG4gIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5XG4gIH0pO1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgaXNCYXNlUGxhY2VtZW50ID0gIXZhcmlhdGlvbjtcbiAgdmFyIG1haW5BeGlzID0gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpO1xuICB2YXIgYWx0QXhpcyA9IGdldEFsdEF4aXMobWFpbkF4aXMpO1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cztcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgdGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0ID09PSAnZnVuY3Rpb24nID8gdGV0aGVyT2Zmc2V0KE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSkpIDogdGV0aGVyT2Zmc2V0O1xuICB2YXIgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlID0gdHlwZW9mIHRldGhlck9mZnNldFZhbHVlID09PSAnbnVtYmVyJyA/IHtcbiAgICBtYWluQXhpczogdGV0aGVyT2Zmc2V0VmFsdWUsXG4gICAgYWx0QXhpczogdGV0aGVyT2Zmc2V0VmFsdWVcbiAgfSA6IE9iamVjdC5hc3NpZ24oe1xuICAgIG1haW5BeGlzOiAwLFxuICAgIGFsdEF4aXM6IDBcbiAgfSwgdGV0aGVyT2Zmc2V0VmFsdWUpO1xuICB2YXIgb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0ID8gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXRbc3RhdGUucGxhY2VtZW50XSA6IG51bGw7XG4gIHZhciBkYXRhID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmICghcG9wcGVyT2Zmc2V0cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDtcblxuICAgIHZhciBtYWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICAgIHZhciBhbHRTaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgIHZhciBvZmZzZXQgPSBwb3BwZXJPZmZzZXRzW21haW5BeGlzXTtcbiAgICB2YXIgbWluID0gb2Zmc2V0ICsgb3ZlcmZsb3dbbWFpblNpZGVdO1xuICAgIHZhciBtYXggPSBvZmZzZXQgLSBvdmVyZmxvd1thbHRTaWRlXTtcbiAgICB2YXIgYWRkaXRpdmUgPSB0ZXRoZXIgPyAtcG9wcGVyUmVjdFtsZW5dIC8gMiA6IDA7XG4gICAgdmFyIG1pbkxlbiA9IHZhcmlhdGlvbiA9PT0gc3RhcnQgPyByZWZlcmVuY2VSZWN0W2xlbl0gOiBwb3BwZXJSZWN0W2xlbl07XG4gICAgdmFyIG1heExlbiA9IHZhcmlhdGlvbiA9PT0gc3RhcnQgPyAtcG9wcGVyUmVjdFtsZW5dIDogLXJlZmVyZW5jZVJlY3RbbGVuXTsgLy8gV2UgbmVlZCB0byBpbmNsdWRlIHRoZSBhcnJvdyBpbiB0aGUgY2FsY3VsYXRpb24gc28gdGhlIGFycm93IGRvZXNuJ3QgZ29cbiAgICAvLyBvdXRzaWRlIHRoZSByZWZlcmVuY2UgYm91bmRzXG5cbiAgICB2YXIgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3c7XG4gICAgdmFyIGFycm93UmVjdCA9IHRldGhlciAmJiBhcnJvd0VsZW1lbnQgPyBnZXRMYXlvdXRSZWN0KGFycm93RWxlbWVudCkgOiB7XG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMFxuICAgIH07XG4gICAgdmFyIGFycm93UGFkZGluZ09iamVjdCA9IHN0YXRlLm1vZGlmaWVyc0RhdGFbJ2Fycm93I3BlcnNpc3RlbnQnXSA/IHN0YXRlLm1vZGlmaWVyc0RhdGFbJ2Fycm93I3BlcnNpc3RlbnQnXS5wYWRkaW5nIDogZ2V0RnJlc2hTaWRlT2JqZWN0KCk7XG4gICAgdmFyIGFycm93UGFkZGluZ01pbiA9IGFycm93UGFkZGluZ09iamVjdFttYWluU2lkZV07XG4gICAgdmFyIGFycm93UGFkZGluZ01heCA9IGFycm93UGFkZGluZ09iamVjdFthbHRTaWRlXTsgLy8gSWYgdGhlIHJlZmVyZW5jZSBsZW5ndGggaXMgc21hbGxlciB0aGFuIHRoZSBhcnJvdyBsZW5ndGgsIHdlIGRvbid0IHdhbnRcbiAgICAvLyB0byBpbmNsdWRlIGl0cyBmdWxsIHNpemUgaW4gdGhlIGNhbGN1bGF0aW9uLiBJZiB0aGUgcmVmZXJlbmNlIGlzIHNtYWxsXG4gICAgLy8gYW5kIG5lYXIgdGhlIGVkZ2Ugb2YgYSBib3VuZGFyeSwgdGhlIHBvcHBlciBjYW4gb3ZlcmZsb3cgZXZlbiBpZiB0aGVcbiAgICAvLyByZWZlcmVuY2UgaXMgbm90IG92ZXJmbG93aW5nIGFzIHdlbGwgKGUuZy4gdmlydHVhbCBlbGVtZW50cyB3aXRoIG5vXG4gICAgLy8gd2lkdGggb3IgaGVpZ2h0KVxuXG4gICAgdmFyIGFycm93TGVuID0gd2l0aGluKDAsIHJlZmVyZW5jZVJlY3RbbGVuXSwgYXJyb3dSZWN0W2xlbl0pO1xuICAgIHZhciBtaW5PZmZzZXQgPSBpc0Jhc2VQbGFjZW1lbnQgPyByZWZlcmVuY2VSZWN0W2xlbl0gLyAyIC0gYWRkaXRpdmUgLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1pbkxlbiAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBtYXhPZmZzZXQgPSBpc0Jhc2VQbGFjZW1lbnQgPyAtcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiArIGFkZGl0aXZlICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXMgOiBtYXhMZW4gKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcztcbiAgICB2YXIgYXJyb3dPZmZzZXRQYXJlbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdyAmJiBnZXRPZmZzZXRQYXJlbnQoc3RhdGUuZWxlbWVudHMuYXJyb3cpO1xuICAgIHZhciBjbGllbnRPZmZzZXQgPSBhcnJvd09mZnNldFBhcmVudCA/IG1haW5BeGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRUb3AgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudExlZnQgfHwgMCA6IDA7XG4gICAgdmFyIG9mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkID0gb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb2Zmc2V0TW9kaWZpZXJTdGF0ZVttYWluQXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgOiAwO1xuICAgIHZhciB0ZXRoZXJNaW4gPSBvZmZzZXQgKyBtaW5PZmZzZXQgLSBvZmZzZXRNb2RpZmllclZhbHVlIC0gY2xpZW50T2Zmc2V0O1xuICAgIHZhciB0ZXRoZXJNYXggPSBvZmZzZXQgKyBtYXhPZmZzZXQgLSBvZmZzZXRNb2RpZmllclZhbHVlO1xuICAgIHZhciBwcmV2ZW50ZWRPZmZzZXQgPSB3aXRoaW4odGV0aGVyID8gbWF0aE1pbihtaW4sIHRldGhlck1pbikgOiBtaW4sIG9mZnNldCwgdGV0aGVyID8gbWF0aE1heChtYXgsIHRldGhlck1heCkgOiBtYXgpO1xuICAgIHBvcHBlck9mZnNldHNbbWFpbkF4aXNdID0gcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbbWFpbkF4aXNdID0gcHJldmVudGVkT2Zmc2V0IC0gb2Zmc2V0O1xuICB9XG5cbiAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyO1xuXG4gICAgdmFyIF9tYWluU2lkZSA9IG1haW5BeGlzID09PSAneCcgPyB0b3AgOiBsZWZ0O1xuXG4gICAgdmFyIF9hbHRTaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IGJvdHRvbSA6IHJpZ2h0O1xuXG4gICAgdmFyIF9vZmZzZXQgPSBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdO1xuXG4gICAgdmFyIF9sZW4gPSBhbHRBeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgICB2YXIgX21pbiA9IF9vZmZzZXQgKyBvdmVyZmxvd1tfbWFpblNpZGVdO1xuXG4gICAgdmFyIF9tYXggPSBfb2Zmc2V0IC0gb3ZlcmZsb3dbX2FsdFNpZGVdO1xuXG4gICAgdmFyIGlzT3JpZ2luU2lkZSA9IFt0b3AsIGxlZnRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuXG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclZhbHVlID0gKF9vZmZzZXRNb2RpZmllclN0YXRlJDIgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW2FsdEF4aXNdKSAhPSBudWxsID8gX29mZnNldE1vZGlmaWVyU3RhdGUkMiA6IDA7XG5cbiAgICB2YXIgX3RldGhlck1pbiA9IGlzT3JpZ2luU2lkZSA/IF9taW4gOiBfb2Zmc2V0IC0gcmVmZXJlbmNlUmVjdFtfbGVuXSAtIHBvcHBlclJlY3RbX2xlbl0gLSBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5hbHRBeGlzO1xuXG4gICAgdmFyIF90ZXRoZXJNYXggPSBpc09yaWdpblNpZGUgPyBfb2Zmc2V0ICsgcmVmZXJlbmNlUmVjdFtfbGVuXSArIHBvcHBlclJlY3RbX2xlbl0gLSBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5hbHRBeGlzIDogX21heDtcblxuICAgIHZhciBfcHJldmVudGVkT2Zmc2V0ID0gdGV0aGVyICYmIGlzT3JpZ2luU2lkZSA/IHdpdGhpbk1heENsYW1wKF90ZXRoZXJNaW4sIF9vZmZzZXQsIF90ZXRoZXJNYXgpIDogd2l0aGluKHRldGhlciA/IF90ZXRoZXJNaW4gOiBfbWluLCBfb2Zmc2V0LCB0ZXRoZXIgPyBfdGV0aGVyTWF4IDogX21heCk7XG5cbiAgICBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdID0gX3ByZXZlbnRlZE9mZnNldDtcbiAgICBkYXRhW2FsdEF4aXNdID0gX3ByZXZlbnRlZE9mZnNldCAtIF9vZmZzZXQ7XG4gIH1cblxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gZGF0YTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3ByZXZlbnRPdmVyZmxvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBwcmV2ZW50T3ZlcmZsb3csXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J11cbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SFRNTEVsZW1lbnRTY3JvbGwoZWxlbWVudCkge1xuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsVG9wXG4gIH07XG59IiwiaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEhUTUxFbGVtZW50U2Nyb2xsIGZyb20gXCIuL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlU2Nyb2xsKG5vZGUpIHtcbiAgaWYgKG5vZGUgPT09IGdldFdpbmRvdyhub2RlKSB8fCAhaXNIVE1MRWxlbWVudChub2RlKSkge1xuICAgIHJldHVybiBnZXRXaW5kb3dTY3JvbGwobm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGdldEhUTUxFbGVtZW50U2Nyb2xsKG5vZGUpO1xuICB9XG59IiwiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXROb2RlU2Nyb2xsIGZyb20gXCIuL2dldE5vZGVTY3JvbGwuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50U2NhbGVkKGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgc2NhbGVYID0gcm91bmQocmVjdC53aWR0aCkgLyBlbGVtZW50Lm9mZnNldFdpZHRoIHx8IDE7XG4gIHZhciBzY2FsZVkgPSByb3VuZChyZWN0LmhlaWdodCkgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxO1xuICByZXR1cm4gc2NhbGVYICE9PSAxIHx8IHNjYWxlWSAhPT0gMTtcbn0gLy8gUmV0dXJucyB0aGUgY29tcG9zaXRlIHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LlxuLy8gQ29tcG9zaXRlIG1lYW5zIGl0IHRha2VzIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zIGFzIHdlbGwgYXMgbGF5b3V0LlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXBvc2l0ZVJlY3QoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQsIG9mZnNldFBhcmVudCwgaXNGaXhlZCkge1xuICBpZiAoaXNGaXhlZCA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZCA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgb2Zmc2V0UGFyZW50SXNTY2FsZWQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNFbGVtZW50U2NhbGVkKG9mZnNldFBhcmVudCk7XG4gIHZhciBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQsIG9mZnNldFBhcmVudElzU2NhbGVkLCBpc0ZpeGVkKTtcbiAgdmFyIHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICB2YXIgb2Zmc2V0cyA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEwNzhcbiAgICBpc1Njcm9sbFBhcmVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgb2Zmc2V0cyA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQsIHRydWUpO1xuICAgICAgb2Zmc2V0cy54ICs9IG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ICs9IG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIG9mZnNldHMueCA9IGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54LFxuICAgIHk6IHJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcCAtIG9mZnNldHMueSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59IiwiaW1wb3J0IHsgbW9kaWZpZXJQaGFzZXMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gc291cmNlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80OTg3NTI1NVxuXG5mdW5jdGlvbiBvcmRlcihtb2RpZmllcnMpIHtcbiAgdmFyIG1hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgbW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgbWFwLnNldChtb2RpZmllci5uYW1lLCBtb2RpZmllcik7XG4gIH0pOyAvLyBPbiB2aXNpdGluZyBvYmplY3QsIGNoZWNrIGZvciBpdHMgZGVwZW5kZW5jaWVzIGFuZCB2aXNpdCB0aGVtIHJlY3Vyc2l2ZWx5XG5cbiAgZnVuY3Rpb24gc29ydChtb2RpZmllcikge1xuICAgIHZpc2l0ZWQuYWRkKG1vZGlmaWVyLm5hbWUpO1xuICAgIHZhciByZXF1aXJlcyA9IFtdLmNvbmNhdChtb2RpZmllci5yZXF1aXJlcyB8fCBbXSwgbW9kaWZpZXIucmVxdWlyZXNJZkV4aXN0cyB8fCBbXSk7XG4gICAgcmVxdWlyZXMuZm9yRWFjaChmdW5jdGlvbiAoZGVwKSB7XG4gICAgICBpZiAoIXZpc2l0ZWQuaGFzKGRlcCkpIHtcbiAgICAgICAgdmFyIGRlcE1vZGlmaWVyID0gbWFwLmdldChkZXApO1xuXG4gICAgICAgIGlmIChkZXBNb2RpZmllcikge1xuICAgICAgICAgIHNvcnQoZGVwTW9kaWZpZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzdWx0LnB1c2gobW9kaWZpZXIpO1xuICB9XG5cbiAgbW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgaWYgKCF2aXNpdGVkLmhhcyhtb2RpZmllci5uYW1lKSkge1xuICAgICAgLy8gY2hlY2sgZm9yIHZpc2l0ZWQgb2JqZWN0XG4gICAgICBzb3J0KG1vZGlmaWVyKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcmRlck1vZGlmaWVycyhtb2RpZmllcnMpIHtcbiAgLy8gb3JkZXIgYmFzZWQgb24gZGVwZW5kZW5jaWVzXG4gIHZhciBvcmRlcmVkTW9kaWZpZXJzID0gb3JkZXIobW9kaWZpZXJzKTsgLy8gb3JkZXIgYmFzZWQgb24gcGhhc2VcblxuICByZXR1cm4gbW9kaWZpZXJQaGFzZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBoYXNlKSB7XG4gICAgcmV0dXJuIGFjYy5jb25jYXQob3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICByZXR1cm4gbW9kaWZpZXIucGhhc2UgPT09IHBoYXNlO1xuICAgIH0pKTtcbiAgfSwgW10pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlYm91bmNlKGZuKSB7XG4gIHZhciBwZW5kaW5nO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghcGVuZGluZykge1xuICAgICAgcGVuZGluZyA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHBlbmRpbmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVzb2x2ZShmbigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGVuZGluZztcbiAgfTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZUJ5TmFtZShtb2RpZmllcnMpIHtcbiAgdmFyIG1lcmdlZCA9IG1vZGlmaWVycy5yZWR1Y2UoZnVuY3Rpb24gKG1lcmdlZCwgY3VycmVudCkge1xuICAgIHZhciBleGlzdGluZyA9IG1lcmdlZFtjdXJyZW50Lm5hbWVdO1xuICAgIG1lcmdlZFtjdXJyZW50Lm5hbWVdID0gZXhpc3RpbmcgPyBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZywgY3VycmVudCwge1xuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3Rpbmcub3B0aW9ucywgY3VycmVudC5vcHRpb25zKSxcbiAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLmRhdGEsIGN1cnJlbnQuZGF0YSlcbiAgICB9KSA6IGN1cnJlbnQ7XG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfSwge30pOyAvLyBJRTExIGRvZXMgbm90IHN1cHBvcnQgT2JqZWN0LnZhbHVlc1xuXG4gIHJldHVybiBPYmplY3Qua2V5cyhtZXJnZWQpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIG1lcmdlZFtrZXldO1xuICB9KTtcbn0iLCJpbXBvcnQgZ2V0Q29tcG9zaXRlUmVjdCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBsaXN0U2Nyb2xsUGFyZW50cyBmcm9tIFwiLi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IG9yZGVyTW9kaWZpZXJzIGZyb20gXCIuL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzXCI7XG5pbXBvcnQgZGVib3VuY2UgZnJvbSBcIi4vdXRpbHMvZGVib3VuY2UuanNcIjtcbmltcG9ydCBtZXJnZUJ5TmFtZSBmcm9tIFwiLi91dGlscy9tZXJnZUJ5TmFtZS5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgbW9kaWZpZXJzOiBbXSxcbiAgc3RyYXRlZ3k6ICdhYnNvbHV0ZSdcbn07XG5cbmZ1bmN0aW9uIGFyZVZhbGlkRWxlbWVudHMoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gIWFyZ3Muc29tZShmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHJldHVybiAhKGVsZW1lbnQgJiYgdHlwZW9mIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID09PSAnZnVuY3Rpb24nKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3BwZXJHZW5lcmF0b3IoZ2VuZXJhdG9yT3B0aW9ucykge1xuICBpZiAoZ2VuZXJhdG9yT3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgZ2VuZXJhdG9yT3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9nZW5lcmF0b3JPcHRpb25zID0gZ2VuZXJhdG9yT3B0aW9ucyxcbiAgICAgIF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRNb2RpZmllcnMsXG4gICAgICBkZWZhdWx0TW9kaWZpZXJzID0gX2dlbmVyYXRvck9wdGlvbnMkZGVmID09PSB2b2lkIDAgPyBbXSA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZixcbiAgICAgIF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0T3B0aW9ucyxcbiAgICAgIGRlZmF1bHRPcHRpb25zID0gX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9PT0gdm9pZCAwID8gREVGQVVMVF9PUFRJT05TIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmMjtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZVBvcHBlcihyZWZlcmVuY2UsIHBvcHBlciwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICB9XG5cbiAgICB2YXIgc3RhdGUgPSB7XG4gICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgb3JkZXJlZE1vZGlmaWVyczogW10sXG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX09QVElPTlMsIGRlZmF1bHRPcHRpb25zKSxcbiAgICAgIG1vZGlmaWVyc0RhdGE6IHt9LFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlOiByZWZlcmVuY2UsXG4gICAgICAgIHBvcHBlcjogcG9wcGVyXG4gICAgICB9LFxuICAgICAgYXR0cmlidXRlczoge30sXG4gICAgICBzdHlsZXM6IHt9XG4gICAgfTtcbiAgICB2YXIgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIHZhciBpc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHZhciBpbnN0YW5jZSA9IHtcbiAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgIHNldE9wdGlvbnM6IGZ1bmN0aW9uIHNldE9wdGlvbnMoc2V0T3B0aW9uc0FjdGlvbikge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzZXRPcHRpb25zQWN0aW9uID09PSAnZnVuY3Rpb24nID8gc2V0T3B0aW9uc0FjdGlvbihzdGF0ZS5vcHRpb25zKSA6IHNldE9wdGlvbnNBY3Rpb247XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgc3RhdGUub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBzdGF0ZS5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgc3RhdGUuc2Nyb2xsUGFyZW50cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGlzRWxlbWVudChyZWZlcmVuY2UpID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlKSA6IHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCkgOiBbXSxcbiAgICAgICAgICBwb3BwZXI6IGxpc3RTY3JvbGxQYXJlbnRzKHBvcHBlcilcbiAgICAgICAgfTsgLy8gT3JkZXJzIHRoZSBtb2RpZmllcnMgYmFzZWQgb24gdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBgcGhhc2VgXG4gICAgICAgIC8vIHByb3BlcnRpZXNcblxuICAgICAgICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyTW9kaWZpZXJzKG1lcmdlQnlOYW1lKFtdLmNvbmNhdChkZWZhdWx0TW9kaWZpZXJzLCBzdGF0ZS5vcHRpb25zLm1vZGlmaWVycykpKTsgLy8gU3RyaXAgb3V0IGRpc2FibGVkIG1vZGlmaWVyc1xuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobSkge1xuICAgICAgICAgIHJldHVybiBtLmVuYWJsZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBydW5Nb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIC8vIFN5bmMgdXBkYXRlIOKAkyBpdCB3aWxsIGFsd2F5cyBiZSBleGVjdXRlZCwgZXZlbiBpZiBub3QgbmVjZXNzYXJ5LiBUaGlzXG4gICAgICAvLyBpcyB1c2VmdWwgZm9yIGxvdyBmcmVxdWVuY3kgdXBkYXRlcyB3aGVyZSBzeW5jIGJlaGF2aW9yIHNpbXBsaWZpZXMgdGhlXG4gICAgICAvLyBsb2dpYy5cbiAgICAgIC8vIEZvciBoaWdoIGZyZXF1ZW5jeSB1cGRhdGVzIChlLmcuIGByZXNpemVgIGFuZCBgc2Nyb2xsYCBldmVudHMpLCBhbHdheXNcbiAgICAgIC8vIHByZWZlciB0aGUgYXN5bmMgUG9wcGVyI3VwZGF0ZSBtZXRob2RcbiAgICAgIGZvcmNlVXBkYXRlOiBmdW5jdGlvbiBmb3JjZVVwZGF0ZSgpIHtcbiAgICAgICAgaWYgKGlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9zdGF0ZSRlbGVtZW50cyA9IHN0YXRlLmVsZW1lbnRzLFxuICAgICAgICAgICAgcmVmZXJlbmNlID0gX3N0YXRlJGVsZW1lbnRzLnJlZmVyZW5jZSxcbiAgICAgICAgICAgIHBvcHBlciA9IF9zdGF0ZSRlbGVtZW50cy5wb3BwZXI7IC8vIERvbid0IHByb2NlZWQgaWYgYHJlZmVyZW5jZWAgb3IgYHBvcHBlcmAgYXJlIG5vdCB2YWxpZCBlbGVtZW50c1xuICAgICAgICAvLyBhbnltb3JlXG5cbiAgICAgICAgaWYgKCFhcmVWYWxpZEVsZW1lbnRzKHJlZmVyZW5jZSwgcG9wcGVyKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBTdG9yZSB0aGUgcmVmZXJlbmNlIGFuZCBwb3BwZXIgcmVjdHMgdG8gYmUgcmVhZCBieSBtb2RpZmllcnNcblxuXG4gICAgICAgIHN0YXRlLnJlY3RzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogZ2V0Q29tcG9zaXRlUmVjdChyZWZlcmVuY2UsIGdldE9mZnNldFBhcmVudChwb3BwZXIpLCBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnKSxcbiAgICAgICAgICBwb3BwZXI6IGdldExheW91dFJlY3QocG9wcGVyKVxuICAgICAgICB9OyAvLyBNb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byByZXNldCB0aGUgY3VycmVudCB1cGRhdGUgY3ljbGUuIFRoZVxuICAgICAgICAvLyBtb3N0IGNvbW1vbiB1c2UgY2FzZSBmb3IgdGhpcyBpcyB0aGUgYGZsaXBgIG1vZGlmaWVyIGNoYW5naW5nIHRoZVxuICAgICAgICAvLyBwbGFjZW1lbnQsIHdoaWNoIHRoZW4gbmVlZHMgdG8gcmUtcnVuIGFsbCB0aGUgbW9kaWZpZXJzLCBiZWNhdXNlIHRoZVxuICAgICAgICAvLyBsb2dpYyB3YXMgcHJldmlvdXNseSByYW4gZm9yIHRoZSBwcmV2aW91cyBwbGFjZW1lbnQgYW5kIGlzIHRoZXJlZm9yZVxuICAgICAgICAvLyBzdGFsZS9pbmNvcnJlY3RcblxuICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5wbGFjZW1lbnQgPSBzdGF0ZS5vcHRpb25zLnBsYWNlbWVudDsgLy8gT24gZWFjaCB1cGRhdGUgY3ljbGUsIHRoZSBgbW9kaWZpZXJzRGF0YWAgcHJvcGVydHkgZm9yIGVhY2ggbW9kaWZpZXJcbiAgICAgICAgLy8gaXMgZmlsbGVkIHdpdGggdGhlIGluaXRpYWwgZGF0YSBzcGVjaWZpZWQgYnkgdGhlIG1vZGlmaWVyLiBUaGlzIG1lYW5zXG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgcGVyc2lzdCBhbmQgaXMgZnJlc2ggb24gZWFjaCB1cGRhdGUuXG4gICAgICAgIC8vIFRvIGVuc3VyZSBwZXJzaXN0ZW50IGRhdGEsIHVzZSBgJHtuYW1lfSNwZXJzaXN0ZW50YFxuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGUubW9kaWZpZXJzRGF0YVttb2RpZmllci5uYW1lXSA9IE9iamVjdC5hc3NpZ24oe30sIG1vZGlmaWVyLmRhdGEpO1xuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBpZiAoc3RhdGUucmVzZXQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgICAgICBpbmRleCA9IC0xO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZSA9IHN0YXRlLm9yZGVyZWRNb2RpZmllcnNbaW5kZXhdLFxuICAgICAgICAgICAgICBmbiA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5mbixcbiAgICAgICAgICAgICAgX3N0YXRlJG9yZGVyZWRNb2RpZmllMiA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5vcHRpb25zLFxuICAgICAgICAgICAgICBfb3B0aW9ucyA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPT09IHZvaWQgMCA/IHt9IDogX3N0YXRlJG9yZGVyZWRNb2RpZmllMixcbiAgICAgICAgICAgICAgbmFtZSA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5uYW1lO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc3RhdGUgPSBmbih7XG4gICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgICAgb3B0aW9uczogX29wdGlvbnMsXG4gICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZVxuICAgICAgICAgICAgfSkgfHwgc3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gQXN5bmMgYW5kIG9wdGltaXN0aWNhbGx5IG9wdGltaXplZCB1cGRhdGUg4oCTIGl0IHdpbGwgbm90IGJlIGV4ZWN1dGVkIGlmXG4gICAgICAvLyBub3QgbmVjZXNzYXJ5IChkZWJvdW5jZWQgdG8gcnVuIGF0IG1vc3Qgb25jZS1wZXItdGljaylcbiAgICAgIHVwZGF0ZTogZGVib3VuY2UoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgIHJlc29sdmUoc3RhdGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICBpbnN0YW5jZS5zZXRPcHRpb25zKG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICBpZiAoIWlzRGVzdHJveWVkICYmIG9wdGlvbnMub25GaXJzdFVwZGF0ZSkge1xuICAgICAgICBvcHRpb25zLm9uRmlyc3RVcGRhdGUoc3RhdGUpO1xuICAgICAgfVxuICAgIH0pOyAvLyBNb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byBleGVjdXRlIGFyYml0cmFyeSBjb2RlIGJlZm9yZSB0aGUgZmlyc3RcbiAgICAvLyB1cGRhdGUgY3ljbGUgcnVucy4gVGhleSB3aWxsIGJlIGV4ZWN1dGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSB1cGRhdGVcbiAgICAvLyBjeWNsZS4gVGhpcyBpcyB1c2VmdWwgd2hlbiBhIG1vZGlmaWVyIGFkZHMgc29tZSBwZXJzaXN0ZW50IGRhdGEgdGhhdFxuICAgIC8vIG90aGVyIG1vZGlmaWVycyBuZWVkIHRvIHVzZSwgYnV0IHRoZSBtb2RpZmllciBpcyBydW4gYWZ0ZXIgdGhlIGRlcGVuZGVudFxuICAgIC8vIG9uZS5cblxuICAgIGZ1bmN0aW9uIHJ1bk1vZGlmaWVyRWZmZWN0cygpIHtcbiAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgICAgICAgIF9yZWYkb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnMgPSBfcmVmJG9wdGlvbnMgPT09IHZvaWQgMCA/IHt9IDogX3JlZiRvcHRpb25zLFxuICAgICAgICAgICAgZWZmZWN0ID0gX3JlZi5lZmZlY3Q7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBlZmZlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YXIgY2xlYW51cEZuID0gZWZmZWN0KHtcbiAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB2YXIgbm9vcEZuID0gZnVuY3Rpb24gbm9vcEZuKCkge307XG5cbiAgICAgICAgICBlZmZlY3RDbGVhbnVwRm5zLnB1c2goY2xlYW51cEZuIHx8IG5vb3BGbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgICAgfSk7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xufVxuZXhwb3J0IHZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKCk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgZGV0ZWN0T3ZlcmZsb3cgfTsiLCJpbXBvcnQgeyBwb3BwZXJHZW5lcmF0b3IsIGRldGVjdE92ZXJmbG93IH0gZnJvbSBcIi4vY3JlYXRlUG9wcGVyLmpzXCI7XG5pbXBvcnQgZXZlbnRMaXN0ZW5lcnMgZnJvbSBcIi4vbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzLmpzXCI7XG5pbXBvcnQgcG9wcGVyT2Zmc2V0cyBmcm9tIFwiLi9tb2RpZmllcnMvcG9wcGVyT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanNcIjtcbmltcG9ydCBhcHBseVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanNcIjtcbnZhciBkZWZhdWx0TW9kaWZpZXJzID0gW2V2ZW50TGlzdGVuZXJzLCBwb3BwZXJPZmZzZXRzLCBjb21wdXRlU3R5bGVzLCBhcHBseVN0eWxlc107XG52YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcih7XG4gIGRlZmF1bHRNb2RpZmllcnM6IGRlZmF1bHRNb2RpZmllcnNcbn0pOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciwgcG9wcGVyR2VuZXJhdG9yLCBkZWZhdWx0TW9kaWZpZXJzLCBkZXRlY3RPdmVyZmxvdyB9OyIsImltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjtcbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tIFwiLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gXCIuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzXCI7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qc1wiO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9hcHBseVN0eWxlcy5qc1wiO1xuaW1wb3J0IG9mZnNldCBmcm9tIFwiLi9tb2RpZmllcnMvb2Zmc2V0LmpzXCI7XG5pbXBvcnQgZmxpcCBmcm9tIFwiLi9tb2RpZmllcnMvZmxpcC5qc1wiO1xuaW1wb3J0IHByZXZlbnRPdmVyZmxvdyBmcm9tIFwiLi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgYXJyb3cgZnJvbSBcIi4vbW9kaWZpZXJzL2Fycm93LmpzXCI7XG5pbXBvcnQgaGlkZSBmcm9tIFwiLi9tb2RpZmllcnMvaGlkZS5qc1wiO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSBbZXZlbnRMaXN0ZW5lcnMsIHBvcHBlck9mZnNldHMsIGNvbXB1dGVTdHlsZXMsIGFwcGx5U3R5bGVzLCBvZmZzZXQsIGZsaXAsIHByZXZlbnRPdmVyZmxvdywgYXJyb3csIGhpZGVdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IiwiLyohXG4gICogQm9vdHN0cmFwIHY1LjMuMyAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDI0IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICovXG5pbXBvcnQgKiBhcyBQb3BwZXIgZnJvbSAnQHBvcHBlcmpzL2NvcmUnO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgZG9tL2RhdGEuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IGVsZW1lbnRNYXAgPSBuZXcgTWFwKCk7XG5jb25zdCBEYXRhID0ge1xuICBzZXQoZWxlbWVudCwga2V5LCBpbnN0YW5jZSkge1xuICAgIGlmICghZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgIGVsZW1lbnRNYXAuc2V0KGVsZW1lbnQsIG5ldyBNYXAoKSk7XG4gICAgfVxuICAgIGNvbnN0IGluc3RhbmNlTWFwID0gZWxlbWVudE1hcC5nZXQoZWxlbWVudCk7XG5cbiAgICAvLyBtYWtlIGl0IGNsZWFyIHdlIG9ubHkgd2FudCBvbmUgaW5zdGFuY2UgcGVyIGVsZW1lbnRcbiAgICAvLyBjYW4gYmUgcmVtb3ZlZCBsYXRlciB3aGVuIG11bHRpcGxlIGtleS9pbnN0YW5jZXMgYXJlIGZpbmUgdG8gYmUgdXNlZFxuICAgIGlmICghaW5zdGFuY2VNYXAuaGFzKGtleSkgJiYgaW5zdGFuY2VNYXAuc2l6ZSAhPT0gMCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEJvb3RzdHJhcCBkb2Vzbid0IGFsbG93IG1vcmUgdGhhbiBvbmUgaW5zdGFuY2UgcGVyIGVsZW1lbnQuIEJvdW5kIGluc3RhbmNlOiAke0FycmF5LmZyb20oaW5zdGFuY2VNYXAua2V5cygpKVswXX0uYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGluc3RhbmNlTWFwLnNldChrZXksIGluc3RhbmNlKTtcbiAgfSxcbiAgZ2V0KGVsZW1lbnQsIGtleSkge1xuICAgIGlmIChlbGVtZW50TWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0KGVsZW1lbnQpLmdldChrZXkpIHx8IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9LFxuICByZW1vdmUoZWxlbWVudCwga2V5KSB7XG4gICAgaWYgKCFlbGVtZW50TWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbnN0YW5jZU1hcCA9IGVsZW1lbnRNYXAuZ2V0KGVsZW1lbnQpO1xuICAgIGluc3RhbmNlTWFwLmRlbGV0ZShrZXkpO1xuXG4gICAgLy8gZnJlZSB1cCBlbGVtZW50IHJlZmVyZW5jZXMgaWYgdGhlcmUgYXJlIG5vIGluc3RhbmNlcyBsZWZ0IGZvciBhbiBlbGVtZW50XG4gICAgaWYgKGluc3RhbmNlTWFwLnNpemUgPT09IDApIHtcbiAgICAgIGVsZW1lbnRNYXAuZGVsZXRlKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvaW5kZXguanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBNQVhfVUlEID0gMTAwMDAwMDtcbmNvbnN0IE1JTExJU0VDT05EU19NVUxUSVBMSUVSID0gMTAwMDtcbmNvbnN0IFRSQU5TSVRJT05fRU5EID0gJ3RyYW5zaXRpb25lbmQnO1xuXG4vKipcbiAqIFByb3Blcmx5IGVzY2FwZSBJRHMgc2VsZWN0b3JzIHRvIGhhbmRsZSB3ZWlyZCBJRHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvclxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuY29uc3QgcGFyc2VTZWxlY3RvciA9IHNlbGVjdG9yID0+IHtcbiAgaWYgKHNlbGVjdG9yICYmIHdpbmRvdy5DU1MgJiYgd2luZG93LkNTUy5lc2NhcGUpIHtcbiAgICAvLyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yIG5lZWRzIGVzY2FwaW5nIHRvIGhhbmRsZSBJRHMgKGh0bWw1KykgY29udGFpbmluZyBmb3IgaW5zdGFuY2UgL1xuICAgIHNlbGVjdG9yID0gc2VsZWN0b3IucmVwbGFjZSgvIyhbXlxcc1wiIyddKykvZywgKG1hdGNoLCBpZCkgPT4gYCMke0NTUy5lc2NhcGUoaWQpfWApO1xuICB9XG4gIHJldHVybiBzZWxlY3Rvcjtcbn07XG5cbi8vIFNob3V0LW91dCBBbmd1cyBDcm9sbCAoaHR0cHM6Ly9nb28uZ2wvcHh3UUdwKVxuY29uc3QgdG9UeXBlID0gb2JqZWN0ID0+IHtcbiAgaWYgKG9iamVjdCA9PT0gbnVsbCB8fCBvYmplY3QgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBgJHtvYmplY3R9YDtcbiAgfVxuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkubWF0Y2goL1xccyhbYS16XSspL2kpWzFdLnRvTG93ZXJDYXNlKCk7XG59O1xuXG4vKipcbiAqIFB1YmxpYyBVdGlsIEFQSVxuICovXG5cbmNvbnN0IGdldFVJRCA9IHByZWZpeCA9PiB7XG4gIGRvIHtcbiAgICBwcmVmaXggKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogTUFYX1VJRCk7XG4gIH0gd2hpbGUgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByZWZpeCkpO1xuICByZXR1cm4gcHJlZml4O1xufTtcbmNvbnN0IGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50ID0gZWxlbWVudCA9PiB7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLy8gR2V0IHRyYW5zaXRpb24tZHVyYXRpb24gb2YgdGhlIGVsZW1lbnRcbiAgbGV0IHtcbiAgICB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgdHJhbnNpdGlvbkRlbGF5XG4gIH0gPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgY29uc3QgZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24gPSBOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pO1xuICBjb25zdCBmbG9hdFRyYW5zaXRpb25EZWxheSA9IE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EZWxheSk7XG5cbiAgLy8gUmV0dXJuIDAgaWYgZWxlbWVudCBvciB0cmFuc2l0aW9uIGR1cmF0aW9uIGlzIG5vdCBmb3VuZFxuICBpZiAoIWZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uICYmICFmbG9hdFRyYW5zaXRpb25EZWxheSkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLy8gSWYgbXVsdGlwbGUgZHVyYXRpb25zIGFyZSBkZWZpbmVkLCB0YWtlIHRoZSBmaXJzdFxuICB0cmFuc2l0aW9uRHVyYXRpb24gPSB0cmFuc2l0aW9uRHVyYXRpb24uc3BsaXQoJywnKVswXTtcbiAgdHJhbnNpdGlvbkRlbGF5ID0gdHJhbnNpdGlvbkRlbGF5LnNwbGl0KCcsJylbMF07XG4gIHJldHVybiAoTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkR1cmF0aW9uKSArIE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EZWxheSkpICogTUlMTElTRUNPTkRTX01VTFRJUExJRVI7XG59O1xuY29uc3QgdHJpZ2dlclRyYW5zaXRpb25FbmQgPSBlbGVtZW50ID0+IHtcbiAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChUUkFOU0lUSU9OX0VORCkpO1xufTtcbmNvbnN0IGlzRWxlbWVudCA9IG9iamVjdCA9PiB7XG4gIGlmICghb2JqZWN0IHx8IHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2Ygb2JqZWN0LmpxdWVyeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbMF07XG4gIH1cbiAgcmV0dXJuIHR5cGVvZiBvYmplY3Qubm9kZVR5cGUgIT09ICd1bmRlZmluZWQnO1xufTtcbmNvbnN0IGdldEVsZW1lbnQgPSBvYmplY3QgPT4ge1xuICAvLyBpdCdzIGEgalF1ZXJ5IG9iamVjdCBvciBhIG5vZGUgZWxlbWVudFxuICBpZiAoaXNFbGVtZW50KG9iamVjdCkpIHtcbiAgICByZXR1cm4gb2JqZWN0LmpxdWVyeSA/IG9iamVjdFswXSA6IG9iamVjdDtcbiAgfVxuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ3N0cmluZycgJiYgb2JqZWN0Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihwYXJzZVNlbGVjdG9yKG9iamVjdCkpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmNvbnN0IGlzVmlzaWJsZSA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWlzRWxlbWVudChlbGVtZW50KSB8fCBlbGVtZW50LmdldENsaWVudFJlY3RzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGVsZW1lbnRJc1Zpc2libGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoJ3Zpc2liaWxpdHknKSA9PT0gJ3Zpc2libGUnO1xuICAvLyBIYW5kbGUgYGRldGFpbHNgIGVsZW1lbnQgYXMgaXRzIGNvbnRlbnQgbWF5IGZhbHNpZSBhcHBlYXIgdmlzaWJsZSB3aGVuIGl0IGlzIGNsb3NlZFxuICBjb25zdCBjbG9zZWREZXRhaWxzID0gZWxlbWVudC5jbG9zZXN0KCdkZXRhaWxzOm5vdChbb3Blbl0pJyk7XG4gIGlmICghY2xvc2VkRGV0YWlscykge1xuICAgIHJldHVybiBlbGVtZW50SXNWaXNpYmxlO1xuICB9XG4gIGlmIChjbG9zZWREZXRhaWxzICE9PSBlbGVtZW50KSB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IGVsZW1lbnQuY2xvc2VzdCgnc3VtbWFyeScpO1xuICAgIGlmIChzdW1tYXJ5ICYmIHN1bW1hcnkucGFyZW50Tm9kZSAhPT0gY2xvc2VkRGV0YWlscykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoc3VtbWFyeSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZWxlbWVudElzVmlzaWJsZTtcbn07XG5jb25zdCBpc0Rpc2FibGVkID0gZWxlbWVudCA9PiB7XG4gIGlmICghZWxlbWVudCB8fCBlbGVtZW50Lm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnZGlzYWJsZWQnKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh0eXBlb2YgZWxlbWVudC5kaXNhYmxlZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZWxlbWVudC5kaXNhYmxlZDtcbiAgfVxuICByZXR1cm4gZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgIT09ICdmYWxzZSc7XG59O1xuY29uc3QgZmluZFNoYWRvd1Jvb3QgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXR0YWNoU2hhZG93KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDYW4gZmluZCB0aGUgc2hhZG93IHJvb3Qgb3RoZXJ3aXNlIGl0J2xsIHJldHVybiB0aGUgZG9jdW1lbnRcbiAgaWYgKHR5cGVvZiBlbGVtZW50LmdldFJvb3ROb2RlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3Qgcm9vdCA9IGVsZW1lbnQuZ2V0Um9vdE5vZGUoKTtcbiAgICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogbnVsbDtcbiAgfVxuICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIC8vIHdoZW4gd2UgZG9uJ3QgZmluZCBhIHNoYWRvdyByb290XG4gIGlmICghZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGZpbmRTaGFkb3dSb290KGVsZW1lbnQucGFyZW50Tm9kZSk7XG59O1xuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG4vKipcbiAqIFRyaWNrIHRvIHJlc3RhcnQgYW4gZWxlbWVudCdzIGFuaW1hdGlvblxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4gdm9pZFxuICpcbiAqIEBzZWUgaHR0cHM6Ly93d3cuY2hhcmlzdGhlby5pby9ibG9nLzIwMjEvMDIvcmVzdGFydC1hLWNzcy1hbmltYXRpb24td2l0aC1qYXZhc2NyaXB0LyNyZXN0YXJ0aW5nLWEtY3NzLWFuaW1hdGlvblxuICovXG5jb25zdCByZWZsb3cgPSBlbGVtZW50ID0+IHtcbiAgZWxlbWVudC5vZmZzZXRIZWlnaHQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG59O1xuY29uc3QgZ2V0alF1ZXJ5ID0gKCkgPT4ge1xuICBpZiAod2luZG93LmpRdWVyeSAmJiAhZG9jdW1lbnQuYm9keS5oYXNBdHRyaWJ1dGUoJ2RhdGEtYnMtbm8tanF1ZXJ5JykpIHtcbiAgICByZXR1cm4gd2luZG93LmpRdWVyeTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5jb25zdCBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzID0gW107XG5jb25zdCBvbkRPTUNvbnRlbnRMb2FkZWQgPSBjYWxsYmFjayA9PiB7XG4gIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIHtcbiAgICAvLyBhZGQgbGlzdGVuZXIgb24gdGhlIGZpcnN0IGNhbGwgd2hlbiB0aGUgZG9jdW1lbnQgaXMgaW4gbG9hZGluZyBzdGF0ZVxuICAgIGlmICghRE9NQ29udGVudExvYWRlZENhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcykge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrKCk7XG4gIH1cbn07XG5jb25zdCBpc1JUTCA9ICgpID0+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kaXIgPT09ICdydGwnO1xuY29uc3QgZGVmaW5lSlF1ZXJ5UGx1Z2luID0gcGx1Z2luID0+IHtcbiAgb25ET01Db250ZW50TG9hZGVkKCgpID0+IHtcbiAgICBjb25zdCAkID0gZ2V0alF1ZXJ5KCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCQpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBwbHVnaW4uTkFNRTtcbiAgICAgIGNvbnN0IEpRVUVSWV9OT19DT05GTElDVCA9ICQuZm5bbmFtZV07XG4gICAgICAkLmZuW25hbWVdID0gcGx1Z2luLmpRdWVyeUludGVyZmFjZTtcbiAgICAgICQuZm5bbmFtZV0uQ29uc3RydWN0b3IgPSBwbHVnaW47XG4gICAgICAkLmZuW25hbWVdLm5vQ29uZmxpY3QgPSAoKSA9PiB7XG4gICAgICAgICQuZm5bbmFtZV0gPSBKUVVFUllfTk9fQ09ORkxJQ1Q7XG4gICAgICAgIHJldHVybiBwbHVnaW4ualF1ZXJ5SW50ZXJmYWNlO1xuICAgICAgfTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IGV4ZWN1dGUgPSAocG9zc2libGVDYWxsYmFjaywgYXJncyA9IFtdLCBkZWZhdWx0VmFsdWUgPSBwb3NzaWJsZUNhbGxiYWNrKSA9PiB7XG4gIHJldHVybiB0eXBlb2YgcG9zc2libGVDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IHBvc3NpYmxlQ2FsbGJhY2soLi4uYXJncykgOiBkZWZhdWx0VmFsdWU7XG59O1xuY29uc3QgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbiA9IChjYWxsYmFjaywgdHJhbnNpdGlvbkVsZW1lbnQsIHdhaXRGb3JUcmFuc2l0aW9uID0gdHJ1ZSkgPT4ge1xuICBpZiAoIXdhaXRGb3JUcmFuc2l0aW9uKSB7XG4gICAgZXhlY3V0ZShjYWxsYmFjayk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGR1cmF0aW9uUGFkZGluZyA9IDU7XG4gIGNvbnN0IGVtdWxhdGVkRHVyYXRpb24gPSBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0cmFuc2l0aW9uRWxlbWVudCkgKyBkdXJhdGlvblBhZGRpbmc7XG4gIGxldCBjYWxsZWQgPSBmYWxzZTtcbiAgY29uc3QgaGFuZGxlciA9ICh7XG4gICAgdGFyZ2V0XG4gIH0pID0+IHtcbiAgICBpZiAodGFyZ2V0ICE9PSB0cmFuc2l0aW9uRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYWxsZWQgPSB0cnVlO1xuICAgIHRyYW5zaXRpb25FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoVFJBTlNJVElPTl9FTkQsIGhhbmRsZXIpO1xuICAgIGV4ZWN1dGUoY2FsbGJhY2spO1xuICB9O1xuICB0cmFuc2l0aW9uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFRSQU5TSVRJT05fRU5ELCBoYW5kbGVyKTtcbiAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgIHRyaWdnZXJUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25FbGVtZW50KTtcbiAgICB9XG4gIH0sIGVtdWxhdGVkRHVyYXRpb24pO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIHByZXZpb3VzL25leHQgZWxlbWVudCBvZiBhIGxpc3QuXG4gKlxuICogQHBhcmFtIHthcnJheX0gbGlzdCAgICBUaGUgbGlzdCBvZiBlbGVtZW50c1xuICogQHBhcmFtIGFjdGl2ZUVsZW1lbnQgICBUaGUgYWN0aXZlIGVsZW1lbnRcbiAqIEBwYXJhbSBzaG91bGRHZXROZXh0ICAgQ2hvb3NlIHRvIGdldCBuZXh0IG9yIHByZXZpb3VzIGVsZW1lbnRcbiAqIEBwYXJhbSBpc0N5Y2xlQWxsb3dlZFxuICogQHJldHVybiB7RWxlbWVudHxlbGVtfSBUaGUgcHJvcGVyIGVsZW1lbnRcbiAqL1xuY29uc3QgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQgPSAobGlzdCwgYWN0aXZlRWxlbWVudCwgc2hvdWxkR2V0TmV4dCwgaXNDeWNsZUFsbG93ZWQpID0+IHtcbiAgY29uc3QgbGlzdExlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICBsZXQgaW5kZXggPSBsaXN0LmluZGV4T2YoYWN0aXZlRWxlbWVudCk7XG5cbiAgLy8gaWYgdGhlIGVsZW1lbnQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGxpc3QgcmV0dXJuIGFuIGVsZW1lbnRcbiAgLy8gZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24gYW5kIGlmIGN5Y2xlIGlzIGFsbG93ZWRcbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiAhc2hvdWxkR2V0TmV4dCAmJiBpc0N5Y2xlQWxsb3dlZCA/IGxpc3RbbGlzdExlbmd0aCAtIDFdIDogbGlzdFswXTtcbiAgfVxuICBpbmRleCArPSBzaG91bGRHZXROZXh0ID8gMSA6IC0xO1xuICBpZiAoaXNDeWNsZUFsbG93ZWQpIHtcbiAgICBpbmRleCA9IChpbmRleCArIGxpc3RMZW5ndGgpICUgbGlzdExlbmd0aDtcbiAgfVxuICByZXR1cm4gbGlzdFtNYXRoLm1heCgwLCBNYXRoLm1pbihpbmRleCwgbGlzdExlbmd0aCAtIDEpKV07XG59O1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgZG9tL2V2ZW50LWhhbmRsZXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgbmFtZXNwYWNlUmVnZXggPSAvW14uXSooPz1cXC4uKilcXC58LiovO1xuY29uc3Qgc3RyaXBOYW1lUmVnZXggPSAvXFwuLiovO1xuY29uc3Qgc3RyaXBVaWRSZWdleCA9IC86OlxcZCskLztcbmNvbnN0IGV2ZW50UmVnaXN0cnkgPSB7fTsgLy8gRXZlbnRzIHN0b3JhZ2VcbmxldCB1aWRFdmVudCA9IDE7XG5jb25zdCBjdXN0b21FdmVudHMgPSB7XG4gIG1vdXNlZW50ZXI6ICdtb3VzZW92ZXInLFxuICBtb3VzZWxlYXZlOiAnbW91c2VvdXQnXG59O1xuY29uc3QgbmF0aXZlRXZlbnRzID0gbmV3IFNldChbJ2NsaWNrJywgJ2RibGNsaWNrJywgJ21vdXNldXAnLCAnbW91c2Vkb3duJywgJ2NvbnRleHRtZW51JywgJ21vdXNld2hlZWwnLCAnRE9NTW91c2VTY3JvbGwnLCAnbW91c2VvdmVyJywgJ21vdXNlb3V0JywgJ21vdXNlbW92ZScsICdzZWxlY3RzdGFydCcsICdzZWxlY3RlbmQnLCAna2V5ZG93bicsICdrZXlwcmVzcycsICdrZXl1cCcsICdvcmllbnRhdGlvbmNoYW5nZScsICd0b3VjaHN0YXJ0JywgJ3RvdWNobW92ZScsICd0b3VjaGVuZCcsICd0b3VjaGNhbmNlbCcsICdwb2ludGVyZG93bicsICdwb2ludGVybW92ZScsICdwb2ludGVydXAnLCAncG9pbnRlcmxlYXZlJywgJ3BvaW50ZXJjYW5jZWwnLCAnZ2VzdHVyZXN0YXJ0JywgJ2dlc3R1cmVjaGFuZ2UnLCAnZ2VzdHVyZWVuZCcsICdmb2N1cycsICdibHVyJywgJ2NoYW5nZScsICdyZXNldCcsICdzZWxlY3QnLCAnc3VibWl0JywgJ2ZvY3VzaW4nLCAnZm9jdXNvdXQnLCAnbG9hZCcsICd1bmxvYWQnLCAnYmVmb3JldW5sb2FkJywgJ3Jlc2l6ZScsICdtb3ZlJywgJ0RPTUNvbnRlbnRMb2FkZWQnLCAncmVhZHlzdGF0ZWNoYW5nZScsICdlcnJvcicsICdhYm9ydCcsICdzY3JvbGwnXSk7XG5cbi8qKlxuICogUHJpdmF0ZSBtZXRob2RzXG4gKi9cblxuZnVuY3Rpb24gbWFrZUV2ZW50VWlkKGVsZW1lbnQsIHVpZCkge1xuICByZXR1cm4gdWlkICYmIGAke3VpZH06OiR7dWlkRXZlbnQrK31gIHx8IGVsZW1lbnQudWlkRXZlbnQgfHwgdWlkRXZlbnQrKztcbn1cbmZ1bmN0aW9uIGdldEVsZW1lbnRFdmVudHMoZWxlbWVudCkge1xuICBjb25zdCB1aWQgPSBtYWtlRXZlbnRVaWQoZWxlbWVudCk7XG4gIGVsZW1lbnQudWlkRXZlbnQgPSB1aWQ7XG4gIGV2ZW50UmVnaXN0cnlbdWlkXSA9IGV2ZW50UmVnaXN0cnlbdWlkXSB8fCB7fTtcbiAgcmV0dXJuIGV2ZW50UmVnaXN0cnlbdWlkXTtcbn1cbmZ1bmN0aW9uIGJvb3RzdHJhcEhhbmRsZXIoZWxlbWVudCwgZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICBoeWRyYXRlT2JqKGV2ZW50LCB7XG4gICAgICBkZWxlZ2F0ZVRhcmdldDogZWxlbWVudFxuICAgIH0pO1xuICAgIGlmIChoYW5kbGVyLm9uZU9mZikge1xuICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCBldmVudC50eXBlLCBmbik7XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseShlbGVtZW50LCBbZXZlbnRdKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGJvb3RzdHJhcERlbGVnYXRpb25IYW5kbGVyKGVsZW1lbnQsIHNlbGVjdG9yLCBmbikge1xuICByZXR1cm4gZnVuY3Rpb24gaGFuZGxlcihldmVudCkge1xuICAgIGNvbnN0IGRvbUVsZW1lbnRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgICBmb3IgKGxldCB7XG4gICAgICB0YXJnZXRcbiAgICB9ID0gZXZlbnQ7IHRhcmdldCAmJiB0YXJnZXQgIT09IHRoaXM7IHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlKSB7XG4gICAgICBmb3IgKGNvbnN0IGRvbUVsZW1lbnQgb2YgZG9tRWxlbWVudHMpIHtcbiAgICAgICAgaWYgKGRvbUVsZW1lbnQgIT09IHRhcmdldCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGh5ZHJhdGVPYmooZXZlbnQsIHtcbiAgICAgICAgICBkZWxlZ2F0ZVRhcmdldDogdGFyZ2V0XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaGFuZGxlci5vbmVPZmYpIHtcbiAgICAgICAgICBFdmVudEhhbmRsZXIub2ZmKGVsZW1lbnQsIGV2ZW50LnR5cGUsIHNlbGVjdG9yLCBmbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRhcmdldCwgW2V2ZW50XSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gZmluZEhhbmRsZXIoZXZlbnRzLCBjYWxsYWJsZSwgZGVsZWdhdGlvblNlbGVjdG9yID0gbnVsbCkge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhldmVudHMpLmZpbmQoZXZlbnQgPT4gZXZlbnQuY2FsbGFibGUgPT09IGNhbGxhYmxlICYmIGV2ZW50LmRlbGVnYXRpb25TZWxlY3RvciA9PT0gZGVsZWdhdGlvblNlbGVjdG9yKTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhcmFtZXRlcnMob3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbikge1xuICBjb25zdCBpc0RlbGVnYXRlZCA9IHR5cGVvZiBoYW5kbGVyID09PSAnc3RyaW5nJztcbiAgLy8gVE9ETzogdG9vbHRpcCBwYXNzZXMgYGZhbHNlYCBpbnN0ZWFkIG9mIHNlbGVjdG9yLCBzbyB3ZSBuZWVkIHRvIGNoZWNrXG4gIGNvbnN0IGNhbGxhYmxlID0gaXNEZWxlZ2F0ZWQgPyBkZWxlZ2F0aW9uRnVuY3Rpb24gOiBoYW5kbGVyIHx8IGRlbGVnYXRpb25GdW5jdGlvbjtcbiAgbGV0IHR5cGVFdmVudCA9IGdldFR5cGVFdmVudChvcmlnaW5hbFR5cGVFdmVudCk7XG4gIGlmICghbmF0aXZlRXZlbnRzLmhhcyh0eXBlRXZlbnQpKSB7XG4gICAgdHlwZUV2ZW50ID0gb3JpZ2luYWxUeXBlRXZlbnQ7XG4gIH1cbiAgcmV0dXJuIFtpc0RlbGVnYXRlZCwgY2FsbGFibGUsIHR5cGVFdmVudF07XG59XG5mdW5jdGlvbiBhZGRIYW5kbGVyKGVsZW1lbnQsIG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24sIG9uZU9mZikge1xuICBpZiAodHlwZW9mIG9yaWdpbmFsVHlwZUV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgW2lzRGVsZWdhdGVkLCBjYWxsYWJsZSwgdHlwZUV2ZW50XSA9IG5vcm1hbGl6ZVBhcmFtZXRlcnMob3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbik7XG5cbiAgLy8gaW4gY2FzZSBvZiBtb3VzZWVudGVyIG9yIG1vdXNlbGVhdmUgd3JhcCB0aGUgaGFuZGxlciB3aXRoaW4gYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBmb3IgaXRzIERPTSBwb3NpdGlvblxuICAvLyB0aGlzIHByZXZlbnRzIHRoZSBoYW5kbGVyIGZyb20gYmVpbmcgZGlzcGF0Y2hlZCB0aGUgc2FtZSB3YXkgYXMgbW91c2VvdmVyIG9yIG1vdXNlb3V0IGRvZXNcbiAgaWYgKG9yaWdpbmFsVHlwZUV2ZW50IGluIGN1c3RvbUV2ZW50cykge1xuICAgIGNvbnN0IHdyYXBGdW5jdGlvbiA9IGZuID0+IHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKCFldmVudC5yZWxhdGVkVGFyZ2V0IHx8IGV2ZW50LnJlbGF0ZWRUYXJnZXQgIT09IGV2ZW50LmRlbGVnYXRlVGFyZ2V0ICYmICFldmVudC5kZWxlZ2F0ZVRhcmdldC5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNhbGxhYmxlID0gd3JhcEZ1bmN0aW9uKGNhbGxhYmxlKTtcbiAgfVxuICBjb25zdCBldmVudHMgPSBnZXRFbGVtZW50RXZlbnRzKGVsZW1lbnQpO1xuICBjb25zdCBoYW5kbGVycyA9IGV2ZW50c1t0eXBlRXZlbnRdIHx8IChldmVudHNbdHlwZUV2ZW50XSA9IHt9KTtcbiAgY29uc3QgcHJldmlvdXNGdW5jdGlvbiA9IGZpbmRIYW5kbGVyKGhhbmRsZXJzLCBjYWxsYWJsZSwgaXNEZWxlZ2F0ZWQgPyBoYW5kbGVyIDogbnVsbCk7XG4gIGlmIChwcmV2aW91c0Z1bmN0aW9uKSB7XG4gICAgcHJldmlvdXNGdW5jdGlvbi5vbmVPZmYgPSBwcmV2aW91c0Z1bmN0aW9uLm9uZU9mZiAmJiBvbmVPZmY7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHVpZCA9IG1ha2VFdmVudFVpZChjYWxsYWJsZSwgb3JpZ2luYWxUeXBlRXZlbnQucmVwbGFjZShuYW1lc3BhY2VSZWdleCwgJycpKTtcbiAgY29uc3QgZm4gPSBpc0RlbGVnYXRlZCA/IGJvb3RzdHJhcERlbGVnYXRpb25IYW5kbGVyKGVsZW1lbnQsIGhhbmRsZXIsIGNhbGxhYmxlKSA6IGJvb3RzdHJhcEhhbmRsZXIoZWxlbWVudCwgY2FsbGFibGUpO1xuICBmbi5kZWxlZ2F0aW9uU2VsZWN0b3IgPSBpc0RlbGVnYXRlZCA/IGhhbmRsZXIgOiBudWxsO1xuICBmbi5jYWxsYWJsZSA9IGNhbGxhYmxlO1xuICBmbi5vbmVPZmYgPSBvbmVPZmY7XG4gIGZuLnVpZEV2ZW50ID0gdWlkO1xuICBoYW5kbGVyc1t1aWRdID0gZm47XG4gIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlRXZlbnQsIGZuLCBpc0RlbGVnYXRlZCk7XG59XG5mdW5jdGlvbiByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uU2VsZWN0b3IpIHtcbiAgY29uc3QgZm4gPSBmaW5kSGFuZGxlcihldmVudHNbdHlwZUV2ZW50XSwgaGFuZGxlciwgZGVsZWdhdGlvblNlbGVjdG9yKTtcbiAgaWYgKCFmbikge1xuICAgIHJldHVybjtcbiAgfVxuICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZUV2ZW50LCBmbiwgQm9vbGVhbihkZWxlZ2F0aW9uU2VsZWN0b3IpKTtcbiAgZGVsZXRlIGV2ZW50c1t0eXBlRXZlbnRdW2ZuLnVpZEV2ZW50XTtcbn1cbmZ1bmN0aW9uIHJlbW92ZU5hbWVzcGFjZWRIYW5kbGVycyhlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgbmFtZXNwYWNlKSB7XG4gIGNvbnN0IHN0b3JlRWxlbWVudEV2ZW50ID0gZXZlbnRzW3R5cGVFdmVudF0gfHwge307XG4gIGZvciAoY29uc3QgW2hhbmRsZXJLZXksIGV2ZW50XSBvZiBPYmplY3QuZW50cmllcyhzdG9yZUVsZW1lbnRFdmVudCkpIHtcbiAgICBpZiAoaGFuZGxlcktleS5pbmNsdWRlcyhuYW1lc3BhY2UpKSB7XG4gICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBldmVudC5jYWxsYWJsZSwgZXZlbnQuZGVsZWdhdGlvblNlbGVjdG9yKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFR5cGVFdmVudChldmVudCkge1xuICAvLyBhbGxvdyB0byBnZXQgdGhlIG5hdGl2ZSBldmVudHMgZnJvbSBuYW1lc3BhY2VkIGV2ZW50cyAoJ2NsaWNrLmJzLmJ1dHRvbicgLS0+ICdjbGljaycpXG4gIGV2ZW50ID0gZXZlbnQucmVwbGFjZShzdHJpcE5hbWVSZWdleCwgJycpO1xuICByZXR1cm4gY3VzdG9tRXZlbnRzW2V2ZW50XSB8fCBldmVudDtcbn1cbmNvbnN0IEV2ZW50SGFuZGxlciA9IHtcbiAgb24oZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbikge1xuICAgIGFkZEhhbmRsZXIoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbiwgZmFsc2UpO1xuICB9LFxuICBvbmUoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbikge1xuICAgIGFkZEhhbmRsZXIoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbiwgdHJ1ZSk7XG4gIH0sXG4gIG9mZihlbGVtZW50LCBvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gICAgaWYgKHR5cGVvZiBvcmlnaW5hbFR5cGVFdmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgW2lzRGVsZWdhdGVkLCBjYWxsYWJsZSwgdHlwZUV2ZW50XSA9IG5vcm1hbGl6ZVBhcmFtZXRlcnMob3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbik7XG4gICAgY29uc3QgaW5OYW1lc3BhY2UgPSB0eXBlRXZlbnQgIT09IG9yaWdpbmFsVHlwZUV2ZW50O1xuICAgIGNvbnN0IGV2ZW50cyA9IGdldEVsZW1lbnRFdmVudHMoZWxlbWVudCk7XG4gICAgY29uc3Qgc3RvcmVFbGVtZW50RXZlbnQgPSBldmVudHNbdHlwZUV2ZW50XSB8fCB7fTtcbiAgICBjb25zdCBpc05hbWVzcGFjZSA9IG9yaWdpbmFsVHlwZUV2ZW50LnN0YXJ0c1dpdGgoJy4nKTtcbiAgICBpZiAodHlwZW9mIGNhbGxhYmxlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gU2ltcGxlc3QgY2FzZTogaGFuZGxlciBpcyBwYXNzZWQsIHJlbW92ZSB0aGF0IGxpc3RlbmVyIE9OTFkuXG4gICAgICBpZiAoIU9iamVjdC5rZXlzKHN0b3JlRWxlbWVudEV2ZW50KS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgY2FsbGFibGUsIGlzRGVsZWdhdGVkID8gaGFuZGxlciA6IG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNOYW1lc3BhY2UpIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudEV2ZW50IG9mIE9iamVjdC5rZXlzKGV2ZW50cykpIHtcbiAgICAgICAgcmVtb3ZlTmFtZXNwYWNlZEhhbmRsZXJzKGVsZW1lbnQsIGV2ZW50cywgZWxlbWVudEV2ZW50LCBvcmlnaW5hbFR5cGVFdmVudC5zbGljZSgxKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2tleUhhbmRsZXJzLCBldmVudF0gb2YgT2JqZWN0LmVudHJpZXMoc3RvcmVFbGVtZW50RXZlbnQpKSB7XG4gICAgICBjb25zdCBoYW5kbGVyS2V5ID0ga2V5SGFuZGxlcnMucmVwbGFjZShzdHJpcFVpZFJlZ2V4LCAnJyk7XG4gICAgICBpZiAoIWluTmFtZXNwYWNlIHx8IG9yaWdpbmFsVHlwZUV2ZW50LmluY2x1ZGVzKGhhbmRsZXJLZXkpKSB7XG4gICAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGV2ZW50LmNhbGxhYmxlLCBldmVudC5kZWxlZ2F0aW9uU2VsZWN0b3IpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgdHJpZ2dlcihlbGVtZW50LCBldmVudCwgYXJncykge1xuICAgIGlmICh0eXBlb2YgZXZlbnQgIT09ICdzdHJpbmcnIHx8ICFlbGVtZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgJCA9IGdldGpRdWVyeSgpO1xuICAgIGNvbnN0IHR5cGVFdmVudCA9IGdldFR5cGVFdmVudChldmVudCk7XG4gICAgY29uc3QgaW5OYW1lc3BhY2UgPSBldmVudCAhPT0gdHlwZUV2ZW50O1xuICAgIGxldCBqUXVlcnlFdmVudCA9IG51bGw7XG4gICAgbGV0IGJ1YmJsZXMgPSB0cnVlO1xuICAgIGxldCBuYXRpdmVEaXNwYXRjaCA9IHRydWU7XG4gICAgbGV0IGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcbiAgICBpZiAoaW5OYW1lc3BhY2UgJiYgJCkge1xuICAgICAgalF1ZXJ5RXZlbnQgPSAkLkV2ZW50KGV2ZW50LCBhcmdzKTtcbiAgICAgICQoZWxlbWVudCkudHJpZ2dlcihqUXVlcnlFdmVudCk7XG4gICAgICBidWJibGVzID0gIWpRdWVyeUV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7XG4gICAgICBuYXRpdmVEaXNwYXRjaCA9ICFqUXVlcnlFdmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpO1xuICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IGpRdWVyeUV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpO1xuICAgIH1cbiAgICBjb25zdCBldnQgPSBoeWRyYXRlT2JqKG5ldyBFdmVudChldmVudCwge1xuICAgICAgYnViYmxlcyxcbiAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICB9KSwgYXJncyk7XG4gICAgaWYgKGRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAobmF0aXZlRGlzcGF0Y2gpIHtcbiAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldnQpO1xuICAgIH1cbiAgICBpZiAoZXZ0LmRlZmF1bHRQcmV2ZW50ZWQgJiYgalF1ZXJ5RXZlbnQpIHtcbiAgICAgIGpRdWVyeUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIHJldHVybiBldnQ7XG4gIH1cbn07XG5mdW5jdGlvbiBoeWRyYXRlT2JqKG9iaiwgbWV0YSA9IHt9KSB7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1ldGEpKSB7XG4gICAgdHJ5IHtcbiAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgfSBjYXRjaCAoX3VudXNlZCkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBkb20vbWFuaXB1bGF0b3IuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5mdW5jdGlvbiBub3JtYWxpemVEYXRhKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh2YWx1ZSA9PT0gTnVtYmVyKHZhbHVlKS50b1N0cmluZygpKSB7XG4gICAgcmV0dXJuIE51bWJlcih2YWx1ZSk7XG4gIH1cbiAgaWYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gJ251bGwnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcbiAgfSBjYXRjaCAoX3VudXNlZCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuZnVuY3Rpb24gbm9ybWFsaXplRGF0YUtleShrZXkpIHtcbiAgcmV0dXJuIGtleS5yZXBsYWNlKC9bQS1aXS9nLCBjaHIgPT4gYC0ke2Noci50b0xvd2VyQ2FzZSgpfWApO1xufVxuY29uc3QgTWFuaXB1bGF0b3IgPSB7XG4gIHNldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5LCB2YWx1ZSkge1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGBkYXRhLWJzLSR7bm9ybWFsaXplRGF0YUtleShrZXkpfWAsIHZhbHVlKTtcbiAgfSxcbiAgcmVtb3ZlRGF0YUF0dHJpYnV0ZShlbGVtZW50LCBrZXkpIHtcbiAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gKTtcbiAgfSxcbiAgZ2V0RGF0YUF0dHJpYnV0ZXMoZWxlbWVudCkge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge307XG4gICAgY29uc3QgYnNLZXlzID0gT2JqZWN0LmtleXMoZWxlbWVudC5kYXRhc2V0KS5maWx0ZXIoa2V5ID0+IGtleS5zdGFydHNXaXRoKCdicycpICYmICFrZXkuc3RhcnRzV2l0aCgnYnNDb25maWcnKSk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgYnNLZXlzKSB7XG4gICAgICBsZXQgcHVyZUtleSA9IGtleS5yZXBsYWNlKC9eYnMvLCAnJyk7XG4gICAgICBwdXJlS2V5ID0gcHVyZUtleS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHB1cmVLZXkuc2xpY2UoMSwgcHVyZUtleS5sZW5ndGgpO1xuICAgICAgYXR0cmlidXRlc1twdXJlS2V5XSA9IG5vcm1hbGl6ZURhdGEoZWxlbWVudC5kYXRhc2V0W2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgfSxcbiAgZ2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBrZXkpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplRGF0YShlbGVtZW50LmdldEF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gKSk7XG4gIH1cbn07XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL2NvbmZpZy5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQ29uZmlnIHtcbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBoYXZlIHRvIGltcGxlbWVudCB0aGUgc3RhdGljIG1ldGhvZCBcIk5BTUVcIiwgZm9yIGVhY2ggY29tcG9uZW50IScpO1xuICB9XG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0gdGhpcy5fbWVyZ2VDb25maWdPYmooY29uZmlnKTtcbiAgICBjb25maWcgPSB0aGlzLl9jb25maWdBZnRlck1lcmdlKGNvbmZpZyk7XG4gICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZyk7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9tZXJnZUNvbmZpZ09iaihjb25maWcsIGVsZW1lbnQpIHtcbiAgICBjb25zdCBqc29uQ29uZmlnID0gaXNFbGVtZW50KGVsZW1lbnQpID8gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCAnY29uZmlnJykgOiB7fTsgLy8gdHJ5IHRvIHBhcnNlXG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0LFxuICAgICAgLi4uKHR5cGVvZiBqc29uQ29uZmlnID09PSAnb2JqZWN0JyA/IGpzb25Db25maWcgOiB7fSksXG4gICAgICAuLi4oaXNFbGVtZW50KGVsZW1lbnQpID8gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXMoZWxlbWVudCkgOiB7fSksXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiB7fSlcbiAgICB9O1xuICB9XG4gIF90eXBlQ2hlY2tDb25maWcoY29uZmlnLCBjb25maWdUeXBlcyA9IHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFR5cGUpIHtcbiAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eSwgZXhwZWN0ZWRUeXBlc10gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnVHlwZXMpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbmZpZ1twcm9wZXJ0eV07XG4gICAgICBjb25zdCB2YWx1ZVR5cGUgPSBpc0VsZW1lbnQodmFsdWUpID8gJ2VsZW1lbnQnIDogdG9UeXBlKHZhbHVlKTtcbiAgICAgIGlmICghbmV3IFJlZ0V4cChleHBlY3RlZFR5cGVzKS50ZXN0KHZhbHVlVHlwZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUUudG9VcHBlckNhc2UoKX06IE9wdGlvbiBcIiR7cHJvcGVydHl9XCIgcHJvdmlkZWQgdHlwZSBcIiR7dmFsdWVUeXBlfVwiIGJ1dCBleHBlY3RlZCB0eXBlIFwiJHtleHBlY3RlZFR5cGVzfVwiLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgYmFzZS1jb21wb25lbnQuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgVkVSU0lPTiA9ICc1LjMuMyc7XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEJhc2VDb21wb25lbnQgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcigpO1xuICAgIGVsZW1lbnQgPSBnZXRFbGVtZW50KGVsZW1lbnQpO1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICBEYXRhLnNldCh0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLCB0aGlzKTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBkaXNwb3NlKCkge1xuICAgIERhdGEucmVtb3ZlKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVkpO1xuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9LRVkpO1xuICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSB7XG4gICAgICB0aGlzW3Byb3BlcnR5TmFtZV0gPSBudWxsO1xuICAgIH1cbiAgfVxuICBfcXVldWVDYWxsYmFjayhjYWxsYmFjaywgZWxlbWVudCwgaXNBbmltYXRlZCA9IHRydWUpIHtcbiAgICBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uKGNhbGxiYWNrLCBlbGVtZW50LCBpc0FuaW1hdGVkKTtcbiAgfVxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHRoaXMuX21lcmdlQ29uZmlnT2JqKGNvbmZpZywgdGhpcy5fZWxlbWVudCk7XG4gICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpO1xuICAgIHRoaXMuX3R5cGVDaGVja0NvbmZpZyhjb25maWcpO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGdldEluc3RhbmNlKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gRGF0YS5nZXQoZ2V0RWxlbWVudChlbGVtZW50KSwgdGhpcy5EQVRBX0tFWSk7XG4gIH1cbiAgc3RhdGljIGdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCwgY29uZmlnID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJbnN0YW5jZShlbGVtZW50KSB8fCBuZXcgdGhpcyhlbGVtZW50LCB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyA/IGNvbmZpZyA6IG51bGwpO1xuICB9XG4gIHN0YXRpYyBnZXQgVkVSU0lPTigpIHtcbiAgICByZXR1cm4gVkVSU0lPTjtcbiAgfVxuICBzdGF0aWMgZ2V0IERBVEFfS0VZKCkge1xuICAgIHJldHVybiBgYnMuJHt0aGlzLk5BTUV9YDtcbiAgfVxuICBzdGF0aWMgZ2V0IEVWRU5UX0tFWSgpIHtcbiAgICByZXR1cm4gYC4ke3RoaXMuREFUQV9LRVl9YDtcbiAgfVxuICBzdGF0aWMgZXZlbnROYW1lKG5hbWUpIHtcbiAgICByZXR1cm4gYCR7bmFtZX0ke3RoaXMuRVZFTlRfS0VZfWA7XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGRvbS9zZWxlY3Rvci1lbmdpbmUuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBnZXRTZWxlY3RvciA9IGVsZW1lbnQgPT4ge1xuICBsZXQgc2VsZWN0b3IgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy10YXJnZXQnKTtcbiAgaWYgKCFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gJyMnKSB7XG4gICAgbGV0IGhyZWZBdHRyaWJ1dGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuXG4gICAgLy8gVGhlIG9ubHkgdmFsaWQgY29udGVudCB0aGF0IGNvdWxkIGRvdWJsZSBhcyBhIHNlbGVjdG9yIGFyZSBJRHMgb3IgY2xhc3NlcyxcbiAgICAvLyBzbyBldmVyeXRoaW5nIHN0YXJ0aW5nIHdpdGggYCNgIG9yIGAuYC4gSWYgYSBcInJlYWxcIiBVUkwgaXMgdXNlZCBhcyB0aGUgc2VsZWN0b3IsXG4gICAgLy8gYGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JgIHdpbGwgcmlnaHRmdWxseSBjb21wbGFpbiBpdCBpcyBpbnZhbGlkLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzMyMjczXG4gICAgaWYgKCFocmVmQXR0cmlidXRlIHx8ICFocmVmQXR0cmlidXRlLmluY2x1ZGVzKCcjJykgJiYgIWhyZWZBdHRyaWJ1dGUuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBKdXN0IGluIGNhc2Ugc29tZSBDTVMgcHV0cyBvdXQgYSBmdWxsIFVSTCB3aXRoIHRoZSBhbmNob3IgYXBwZW5kZWRcbiAgICBpZiAoaHJlZkF0dHJpYnV0ZS5pbmNsdWRlcygnIycpICYmICFocmVmQXR0cmlidXRlLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgaHJlZkF0dHJpYnV0ZSA9IGAjJHtocmVmQXR0cmlidXRlLnNwbGl0KCcjJylbMV19YDtcbiAgICB9XG4gICAgc2VsZWN0b3IgPSBocmVmQXR0cmlidXRlICYmIGhyZWZBdHRyaWJ1dGUgIT09ICcjJyA/IGhyZWZBdHRyaWJ1dGUudHJpbSgpIDogbnVsbDtcbiAgfVxuICByZXR1cm4gc2VsZWN0b3IgPyBzZWxlY3Rvci5zcGxpdCgnLCcpLm1hcChzZWwgPT4gcGFyc2VTZWxlY3RvcihzZWwpKS5qb2luKCcsJykgOiBudWxsO1xufTtcbmNvbnN0IFNlbGVjdG9yRW5naW5lID0ge1xuICBmaW5kKHNlbGVjdG9yLCBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdCguLi5FbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsLmNhbGwoZWxlbWVudCwgc2VsZWN0b3IpKTtcbiAgfSxcbiAgZmluZE9uZShzZWxlY3RvciwgZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgIHJldHVybiBFbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yLmNhbGwoZWxlbWVudCwgc2VsZWN0b3IpO1xuICB9LFxuICBjaGlsZHJlbihlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIHJldHVybiBbXS5jb25jYXQoLi4uZWxlbWVudC5jaGlsZHJlbikuZmlsdGVyKGNoaWxkID0+IGNoaWxkLm1hdGNoZXMoc2VsZWN0b3IpKTtcbiAgfSxcbiAgcGFyZW50cyhlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgICBsZXQgYW5jZXN0b3IgPSBlbGVtZW50LnBhcmVudE5vZGUuY2xvc2VzdChzZWxlY3Rvcik7XG4gICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICBwYXJlbnRzLnB1c2goYW5jZXN0b3IpO1xuICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnROb2RlLmNsb3Nlc3Qoc2VsZWN0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyZW50cztcbiAgfSxcbiAgcHJldihlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGxldCBwcmV2aW91cyA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgICB3aGlsZSAocHJldmlvdXMpIHtcbiAgICAgIGlmIChwcmV2aW91cy5tYXRjaGVzKHNlbGVjdG9yKSkge1xuICAgICAgICByZXR1cm4gW3ByZXZpb3VzXTtcbiAgICAgIH1cbiAgICAgIHByZXZpb3VzID0gcHJldmlvdXMucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9LFxuICAvLyBUT0RPOiB0aGlzIGlzIG5vdyB1bnVzZWQ7IHJlbW92ZSBsYXRlciBhbG9uZyB3aXRoIHByZXYoKVxuICBuZXh0KGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgbGV0IG5leHQgPSBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZztcbiAgICB3aGlsZSAobmV4dCkge1xuICAgICAgaWYgKG5leHQubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgcmV0dXJuIFtuZXh0XTtcbiAgICAgIH1cbiAgICAgIG5leHQgPSBuZXh0Lm5leHRFbGVtZW50U2libGluZztcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9LFxuICBmb2N1c2FibGVDaGlsZHJlbihlbGVtZW50KSB7XG4gICAgY29uc3QgZm9jdXNhYmxlcyA9IFsnYScsICdidXR0b24nLCAnaW5wdXQnLCAndGV4dGFyZWEnLCAnc2VsZWN0JywgJ2RldGFpbHMnLCAnW3RhYmluZGV4XScsICdbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXSddLm1hcChzZWxlY3RvciA9PiBgJHtzZWxlY3Rvcn06bm90KFt0YWJpbmRleF49XCItXCJdKWApLmpvaW4oJywnKTtcbiAgICByZXR1cm4gdGhpcy5maW5kKGZvY3VzYWJsZXMsIGVsZW1lbnQpLmZpbHRlcihlbCA9PiAhaXNEaXNhYmxlZChlbCkgJiYgaXNWaXNpYmxlKGVsKSk7XG4gIH0sXG4gIGdldFNlbGVjdG9yRnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShzZWxlY3RvcikgPyBzZWxlY3RvciA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9LFxuICBnZXRFbGVtZW50RnJvbVNlbGVjdG9yKGVsZW1lbnQpIHtcbiAgICBjb25zdCBzZWxlY3RvciA9IGdldFNlbGVjdG9yKGVsZW1lbnQpO1xuICAgIHJldHVybiBzZWxlY3RvciA/IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IpIDogbnVsbDtcbiAgfSxcbiAgZ2V0TXVsdGlwbGVFbGVtZW50c0Zyb21TZWxlY3RvcihlbGVtZW50KSB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihlbGVtZW50KTtcbiAgICByZXR1cm4gc2VsZWN0b3IgPyBTZWxlY3RvckVuZ2luZS5maW5kKHNlbGVjdG9yKSA6IFtdO1xuICB9XG59O1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgZW5hYmxlRGlzbWlzc1RyaWdnZXIgPSAoY29tcG9uZW50LCBtZXRob2QgPSAnaGlkZScpID0+IHtcbiAgY29uc3QgY2xpY2tFdmVudCA9IGBjbGljay5kaXNtaXNzJHtjb21wb25lbnQuRVZFTlRfS0VZfWA7XG4gIGNvbnN0IG5hbWUgPSBjb21wb25lbnQuTkFNRTtcbiAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBjbGlja0V2ZW50LCBgW2RhdGEtYnMtZGlzbWlzcz1cIiR7bmFtZX1cIl1gLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YXJnZXQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRoaXMpIHx8IHRoaXMuY2xvc2VzdChgLiR7bmFtZX1gKTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudC5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldCk7XG5cbiAgICAvLyBNZXRob2QgYXJndW1lbnQgaXMgbGVmdCwgZm9yIEFsZXJ0IGFuZCBvbmx5LCBhcyBpdCBkb2Vzbid0IGltcGxlbWVudCB0aGUgJ2hpZGUnIG1ldGhvZFxuICAgIGluc3RhbmNlW21ldGhvZF0oKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgYWxlcnQuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSRmID0gJ2FsZXJ0JztcbmNvbnN0IERBVEFfS0VZJGEgPSAnYnMuYWxlcnQnO1xuY29uc3QgRVZFTlRfS0VZJGIgPSBgLiR7REFUQV9LRVkkYX1gO1xuY29uc3QgRVZFTlRfQ0xPU0UgPSBgY2xvc2Uke0VWRU5UX0tFWSRifWA7XG5jb25zdCBFVkVOVF9DTE9TRUQgPSBgY2xvc2VkJHtFVkVOVF9LRVkkYn1gO1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFJDUgPSAnZmFkZSc7XG5jb25zdCBDTEFTU19OQU1FX1NIT1ckOCA9ICdzaG93JztcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQWxlcnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkZjtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBjbG9zZSgpIHtcbiAgICBjb25zdCBjbG9zZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfQ0xPU0UpO1xuICAgIGlmIChjbG9zZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQ4KTtcbiAgICBjb25zdCBpc0FuaW1hdGVkID0gdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFJDUpO1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4gdGhpcy5fZGVzdHJveUVsZW1lbnQoKSwgdGhpcy5fZWxlbWVudCwgaXNBbmltYXRlZCk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9kZXN0cm95RWxlbWVudCgpIHtcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZSgpO1xuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMT1NFRCk7XG4gICAgdGhpcy5kaXNwb3NlKCk7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBBbGVydC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgfVxuICAgICAgZGF0YVtjb25maWddKHRoaXMpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5lbmFibGVEaXNtaXNzVHJpZ2dlcihBbGVydCwgJ2Nsb3NlJyk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKEFsZXJ0KTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGJ1dHRvbi5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJGUgPSAnYnV0dG9uJztcbmNvbnN0IERBVEFfS0VZJDkgPSAnYnMuYnV0dG9uJztcbmNvbnN0IEVWRU5UX0tFWSRhID0gYC4ke0RBVEFfS0VZJDl9YDtcbmNvbnN0IERBVEFfQVBJX0tFWSQ2ID0gJy5kYXRhLWFwaSc7XG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSQzID0gJ2FjdGl2ZSc7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ1ID0gJ1tkYXRhLWJzLXRvZ2dsZT1cImJ1dHRvblwiXSc7XG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSQ2ID0gYGNsaWNrJHtFVkVOVF9LRVkkYX0ke0RBVEFfQVBJX0tFWSQ2fWA7XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEJ1dHRvbiBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSRlO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHRvZ2dsZSgpIHtcbiAgICAvLyBUb2dnbGUgY2xhc3MgYW5kIHN5bmMgdGhlIGBhcmlhLXByZXNzZWRgIGF0dHJpYnV0ZSB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGAudG9nZ2xlKClgIG1ldGhvZFxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoQ0xBU1NfTkFNRV9BQ1RJVkUkMykpO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gQnV0dG9uLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcyk7XG4gICAgICBpZiAoY29uZmlnID09PSAndG9nZ2xlJykge1xuICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSQ2LCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ1LCBldmVudCA9PiB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGNvbnN0IGJ1dHRvbiA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KFNFTEVDVE9SX0RBVEFfVE9HR0xFJDUpO1xuICBjb25zdCBkYXRhID0gQnV0dG9uLmdldE9yQ3JlYXRlSW5zdGFuY2UoYnV0dG9uKTtcbiAgZGF0YS50b2dnbGUoKTtcbn0pO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihCdXR0b24pO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9zd2lwZS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJGQgPSAnc3dpcGUnO1xuY29uc3QgRVZFTlRfS0VZJDkgPSAnLmJzLnN3aXBlJztcbmNvbnN0IEVWRU5UX1RPVUNIU1RBUlQgPSBgdG91Y2hzdGFydCR7RVZFTlRfS0VZJDl9YDtcbmNvbnN0IEVWRU5UX1RPVUNITU9WRSA9IGB0b3VjaG1vdmUke0VWRU5UX0tFWSQ5fWA7XG5jb25zdCBFVkVOVF9UT1VDSEVORCA9IGB0b3VjaGVuZCR7RVZFTlRfS0VZJDl9YDtcbmNvbnN0IEVWRU5UX1BPSU5URVJET1dOID0gYHBvaW50ZXJkb3duJHtFVkVOVF9LRVkkOX1gO1xuY29uc3QgRVZFTlRfUE9JTlRFUlVQID0gYHBvaW50ZXJ1cCR7RVZFTlRfS0VZJDl9YDtcbmNvbnN0IFBPSU5URVJfVFlQRV9UT1VDSCA9ICd0b3VjaCc7XG5jb25zdCBQT0lOVEVSX1RZUEVfUEVOID0gJ3Blbic7XG5jb25zdCBDTEFTU19OQU1FX1BPSU5URVJfRVZFTlQgPSAncG9pbnRlci1ldmVudCc7XG5jb25zdCBTV0lQRV9USFJFU0hPTEQgPSA0MDtcbmNvbnN0IERlZmF1bHQkYyA9IHtcbiAgZW5kQ2FsbGJhY2s6IG51bGwsXG4gIGxlZnRDYWxsYmFjazogbnVsbCxcbiAgcmlnaHRDYWxsYmFjazogbnVsbFxufTtcbmNvbnN0IERlZmF1bHRUeXBlJGMgPSB7XG4gIGVuZENhbGxiYWNrOiAnKGZ1bmN0aW9ufG51bGwpJyxcbiAgbGVmdENhbGxiYWNrOiAnKGZ1bmN0aW9ufG51bGwpJyxcbiAgcmlnaHRDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKSdcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFN3aXBlIGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICBpZiAoIWVsZW1lbnQgfHwgIVN3aXBlLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgdGhpcy5fZGVsdGFYID0gMDtcbiAgICB0aGlzLl9zdXBwb3J0UG9pbnRlckV2ZW50cyA9IEJvb2xlYW4od2luZG93LlBvaW50ZXJFdmVudCk7XG4gICAgdGhpcy5faW5pdEV2ZW50cygpO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkYztcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSRjO1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSRkO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIGRpc3Bvc2UoKSB7XG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVkkOSk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9zdGFydChldmVudCkge1xuICAgIGlmICghdGhpcy5fc3VwcG9ydFBvaW50ZXJFdmVudHMpIHtcbiAgICAgIHRoaXMuX2RlbHRhWCA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2V2ZW50SXNQb2ludGVyUGVuVG91Y2goZXZlbnQpKSB7XG4gICAgICB0aGlzLl9kZWx0YVggPSBldmVudC5jbGllbnRYO1xuICAgIH1cbiAgfVxuICBfZW5kKGV2ZW50KSB7XG4gICAgaWYgKHRoaXMuX2V2ZW50SXNQb2ludGVyUGVuVG91Y2goZXZlbnQpKSB7XG4gICAgICB0aGlzLl9kZWx0YVggPSBldmVudC5jbGllbnRYIC0gdGhpcy5fZGVsdGFYO1xuICAgIH1cbiAgICB0aGlzLl9oYW5kbGVTd2lwZSgpO1xuICAgIGV4ZWN1dGUodGhpcy5fY29uZmlnLmVuZENhbGxiYWNrKTtcbiAgfVxuICBfbW92ZShldmVudCkge1xuICAgIHRoaXMuX2RlbHRhWCA9IGV2ZW50LnRvdWNoZXMgJiYgZXZlbnQudG91Y2hlcy5sZW5ndGggPiAxID8gMCA6IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WCAtIHRoaXMuX2RlbHRhWDtcbiAgfVxuICBfaGFuZGxlU3dpcGUoKSB7XG4gICAgY29uc3QgYWJzRGVsdGFYID0gTWF0aC5hYnModGhpcy5fZGVsdGFYKTtcbiAgICBpZiAoYWJzRGVsdGFYIDw9IFNXSVBFX1RIUkVTSE9MRCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkaXJlY3Rpb24gPSBhYnNEZWx0YVggLyB0aGlzLl9kZWx0YVg7XG4gICAgdGhpcy5fZGVsdGFYID0gMDtcbiAgICBpZiAoIWRpcmVjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBleGVjdXRlKGRpcmVjdGlvbiA+IDAgPyB0aGlzLl9jb25maWcucmlnaHRDYWxsYmFjayA6IHRoaXMuX2NvbmZpZy5sZWZ0Q2FsbGJhY2spO1xuICB9XG4gIF9pbml0RXZlbnRzKCkge1xuICAgIGlmICh0aGlzLl9zdXBwb3J0UG9pbnRlckV2ZW50cykge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1BPSU5URVJET1dOLCBldmVudCA9PiB0aGlzLl9zdGFydChldmVudCkpO1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1BPSU5URVJVUCwgZXZlbnQgPT4gdGhpcy5fZW5kKGV2ZW50KSk7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9QT0lOVEVSX0VWRU5UKTtcbiAgICB9IGVsc2Uge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1RPVUNIU1RBUlQsIGV2ZW50ID0+IHRoaXMuX3N0YXJ0KGV2ZW50KSk7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfVE9VQ0hNT1ZFLCBldmVudCA9PiB0aGlzLl9tb3ZlKGV2ZW50KSk7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfVE9VQ0hFTkQsIGV2ZW50ID0+IHRoaXMuX2VuZChldmVudCkpO1xuICAgIH1cbiAgfVxuICBfZXZlbnRJc1BvaW50ZXJQZW5Ub3VjaChldmVudCkge1xuICAgIHJldHVybiB0aGlzLl9zdXBwb3J0UG9pbnRlckV2ZW50cyAmJiAoZXZlbnQucG9pbnRlclR5cGUgPT09IFBPSU5URVJfVFlQRV9QRU4gfHwgZXZlbnQucG9pbnRlclR5cGUgPT09IFBPSU5URVJfVFlQRV9UT1VDSCk7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGlzU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiAnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMDtcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgY2Fyb3VzZWwuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSRjID0gJ2Nhcm91c2VsJztcbmNvbnN0IERBVEFfS0VZJDggPSAnYnMuY2Fyb3VzZWwnO1xuY29uc3QgRVZFTlRfS0VZJDggPSBgLiR7REFUQV9LRVkkOH1gO1xuY29uc3QgREFUQV9BUElfS0VZJDUgPSAnLmRhdGEtYXBpJztcbmNvbnN0IEFSUk9XX0xFRlRfS0VZJDEgPSAnQXJyb3dMZWZ0JztcbmNvbnN0IEFSUk9XX1JJR0hUX0tFWSQxID0gJ0Fycm93UmlnaHQnO1xuY29uc3QgVE9VQ0hFVkVOVF9DT01QQVRfV0FJVCA9IDUwMDsgLy8gVGltZSBmb3IgbW91c2UgY29tcGF0IGV2ZW50cyB0byBmaXJlIGFmdGVyIHRvdWNoXG5cbmNvbnN0IE9SREVSX05FWFQgPSAnbmV4dCc7XG5jb25zdCBPUkRFUl9QUkVWID0gJ3ByZXYnO1xuY29uc3QgRElSRUNUSU9OX0xFRlQgPSAnbGVmdCc7XG5jb25zdCBESVJFQ1RJT05fUklHSFQgPSAncmlnaHQnO1xuY29uc3QgRVZFTlRfU0xJREUgPSBgc2xpZGUke0VWRU5UX0tFWSQ4fWA7XG5jb25zdCBFVkVOVF9TTElEID0gYHNsaWQke0VWRU5UX0tFWSQ4fWA7XG5jb25zdCBFVkVOVF9LRVlET1dOJDEgPSBga2V5ZG93biR7RVZFTlRfS0VZJDh9YDtcbmNvbnN0IEVWRU5UX01PVVNFRU5URVIkMSA9IGBtb3VzZWVudGVyJHtFVkVOVF9LRVkkOH1gO1xuY29uc3QgRVZFTlRfTU9VU0VMRUFWRSQxID0gYG1vdXNlbGVhdmUke0VWRU5UX0tFWSQ4fWA7XG5jb25zdCBFVkVOVF9EUkFHX1NUQVJUID0gYGRyYWdzdGFydCR7RVZFTlRfS0VZJDh9YDtcbmNvbnN0IEVWRU5UX0xPQURfREFUQV9BUEkkMyA9IGBsb2FkJHtFVkVOVF9LRVkkOH0ke0RBVEFfQVBJX0tFWSQ1fWA7XG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSQ1ID0gYGNsaWNrJHtFVkVOVF9LRVkkOH0ke0RBVEFfQVBJX0tFWSQ1fWA7XG5jb25zdCBDTEFTU19OQU1FX0NBUk9VU0VMID0gJ2Nhcm91c2VsJztcbmNvbnN0IENMQVNTX05BTUVfQUNUSVZFJDIgPSAnYWN0aXZlJztcbmNvbnN0IENMQVNTX05BTUVfU0xJREUgPSAnc2xpZGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9FTkQgPSAnY2Fyb3VzZWwtaXRlbS1lbmQnO1xuY29uc3QgQ0xBU1NfTkFNRV9TVEFSVCA9ICdjYXJvdXNlbC1pdGVtLXN0YXJ0JztcbmNvbnN0IENMQVNTX05BTUVfTkVYVCA9ICdjYXJvdXNlbC1pdGVtLW5leHQnO1xuY29uc3QgQ0xBU1NfTkFNRV9QUkVWID0gJ2Nhcm91c2VsLWl0ZW0tcHJldic7XG5jb25zdCBTRUxFQ1RPUl9BQ1RJVkUgPSAnLmFjdGl2ZSc7XG5jb25zdCBTRUxFQ1RPUl9JVEVNID0gJy5jYXJvdXNlbC1pdGVtJztcbmNvbnN0IFNFTEVDVE9SX0FDVElWRV9JVEVNID0gU0VMRUNUT1JfQUNUSVZFICsgU0VMRUNUT1JfSVRFTTtcbmNvbnN0IFNFTEVDVE9SX0lURU1fSU1HID0gJy5jYXJvdXNlbC1pdGVtIGltZyc7XG5jb25zdCBTRUxFQ1RPUl9JTkRJQ0FUT1JTID0gJy5jYXJvdXNlbC1pbmRpY2F0b3JzJztcbmNvbnN0IFNFTEVDVE9SX0RBVEFfU0xJREUgPSAnW2RhdGEtYnMtc2xpZGVdLCBbZGF0YS1icy1zbGlkZS10b10nO1xuY29uc3QgU0VMRUNUT1JfREFUQV9SSURFID0gJ1tkYXRhLWJzLXJpZGU9XCJjYXJvdXNlbFwiXSc7XG5jb25zdCBLRVlfVE9fRElSRUNUSU9OID0ge1xuICBbQVJST1dfTEVGVF9LRVkkMV06IERJUkVDVElPTl9SSUdIVCxcbiAgW0FSUk9XX1JJR0hUX0tFWSQxXTogRElSRUNUSU9OX0xFRlRcbn07XG5jb25zdCBEZWZhdWx0JGIgPSB7XG4gIGludGVydmFsOiA1MDAwLFxuICBrZXlib2FyZDogdHJ1ZSxcbiAgcGF1c2U6ICdob3ZlcicsXG4gIHJpZGU6IGZhbHNlLFxuICB0b3VjaDogdHJ1ZSxcbiAgd3JhcDogdHJ1ZVxufTtcbmNvbnN0IERlZmF1bHRUeXBlJGIgPSB7XG4gIGludGVydmFsOiAnKG51bWJlcnxib29sZWFuKScsXG4gIC8vIFRPRE86djYgcmVtb3ZlIGJvb2xlYW4gc3VwcG9ydFxuICBrZXlib2FyZDogJ2Jvb2xlYW4nLFxuICBwYXVzZTogJyhzdHJpbmd8Ym9vbGVhbiknLFxuICByaWRlOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gIHRvdWNoOiAnYm9vbGVhbicsXG4gIHdyYXA6ICdib29sZWFuJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQ2Fyb3VzZWwgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcbiAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gICAgdGhpcy5faXNTbGlkaW5nID0gZmFsc2U7XG4gICAgdGhpcy50b3VjaFRpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMuX3N3aXBlSGVscGVyID0gbnVsbDtcbiAgICB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfSU5ESUNBVE9SUywgdGhpcy5fZWxlbWVudCk7XG4gICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICBpZiAodGhpcy5fY29uZmlnLnJpZGUgPT09IENMQVNTX05BTUVfQ0FST1VTRUwpIHtcbiAgICAgIHRoaXMuY3ljbGUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCRiO1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJGI7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJGM7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgbmV4dCgpIHtcbiAgICB0aGlzLl9zbGlkZShPUkRFUl9ORVhUKTtcbiAgfVxuICBuZXh0V2hlblZpc2libGUoKSB7XG4gICAgLy8gRklYTUUgVE9ETyB1c2UgYGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZWBcbiAgICAvLyBEb24ndCBjYWxsIG5leHQgd2hlbiB0aGUgcGFnZSBpc24ndCB2aXNpYmxlXG4gICAgLy8gb3IgdGhlIGNhcm91c2VsIG9yIGl0cyBwYXJlbnQgaXNuJ3QgdmlzaWJsZVxuICAgIGlmICghZG9jdW1lbnQuaGlkZGVuICYmIGlzVmlzaWJsZSh0aGlzLl9lbGVtZW50KSkge1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgfVxuICB9XG4gIHByZXYoKSB7XG4gICAgdGhpcy5fc2xpZGUoT1JERVJfUFJFVik7XG4gIH1cbiAgcGF1c2UoKSB7XG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgdHJpZ2dlclRyYW5zaXRpb25FbmQodGhpcy5fZWxlbWVudCk7XG4gICAgfVxuICAgIHRoaXMuX2NsZWFySW50ZXJ2YWwoKTtcbiAgfVxuICBjeWNsZSgpIHtcbiAgICB0aGlzLl9jbGVhckludGVydmFsKCk7XG4gICAgdGhpcy5fdXBkYXRlSW50ZXJ2YWwoKTtcbiAgICB0aGlzLl9pbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHRoaXMubmV4dFdoZW5WaXNpYmxlKCksIHRoaXMuX2NvbmZpZy5pbnRlcnZhbCk7XG4gIH1cbiAgX21heWJlRW5hYmxlQ3ljbGUoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcucmlkZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICBFdmVudEhhbmRsZXIub25lKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NMSUQsICgpID0+IHRoaXMuY3ljbGUoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY3ljbGUoKTtcbiAgfVxuICB0byhpbmRleCkge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5fZ2V0SXRlbXMoKTtcbiAgICBpZiAoaW5kZXggPiBpdGVtcy5sZW5ndGggLSAxIHx8IGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICBFdmVudEhhbmRsZXIub25lKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NMSUQsICgpID0+IHRoaXMudG8oaW5kZXgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYWN0aXZlSW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgodGhpcy5fZ2V0QWN0aXZlKCkpO1xuICAgIGlmIChhY3RpdmVJbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3JkZXIgPSBpbmRleCA+IGFjdGl2ZUluZGV4ID8gT1JERVJfTkVYVCA6IE9SREVSX1BSRVY7XG4gICAgdGhpcy5fc2xpZGUob3JkZXIsIGl0ZW1zW2luZGV4XSk7XG4gIH1cbiAgZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5fc3dpcGVIZWxwZXIpIHtcbiAgICAgIHRoaXMuX3N3aXBlSGVscGVyLmRpc3Bvc2UoKTtcbiAgICB9XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICBjb25maWcuZGVmYXVsdEludGVydmFsID0gY29uZmlnLmludGVydmFsO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGlmICh0aGlzLl9jb25maWcua2V5Ym9hcmQpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOJDEsIGV2ZW50ID0+IHRoaXMuX2tleWRvd24oZXZlbnQpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5wYXVzZSA9PT0gJ2hvdmVyJykge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFRU5URVIkMSwgKCkgPT4gdGhpcy5wYXVzZSgpKTtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRUxFQVZFJDEsICgpID0+IHRoaXMuX21heWJlRW5hYmxlQ3ljbGUoKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb25maWcudG91Y2ggJiYgU3dpcGUuaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgdGhpcy5fYWRkVG91Y2hFdmVudExpc3RlbmVycygpO1xuICAgIH1cbiAgfVxuICBfYWRkVG91Y2hFdmVudExpc3RlbmVycygpIHtcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0lURU1fSU1HLCB0aGlzLl9lbGVtZW50KSkge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKGltZywgRVZFTlRfRFJBR19TVEFSVCwgZXZlbnQgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKSk7XG4gICAgfVxuICAgIGNvbnN0IGVuZENhbGxCYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5wYXVzZSAhPT0gJ2hvdmVyJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGl0J3MgYSB0b3VjaC1lbmFibGVkIGRldmljZSwgbW91c2VlbnRlci9sZWF2ZSBhcmUgZmlyZWQgYXNcbiAgICAgIC8vIHBhcnQgb2YgdGhlIG1vdXNlIGNvbXBhdGliaWxpdHkgZXZlbnRzIG9uIGZpcnN0IHRhcCAtIHRoZSBjYXJvdXNlbFxuICAgICAgLy8gd291bGQgc3RvcCBjeWNsaW5nIHVudGlsIHVzZXIgdGFwcGVkIG91dCBvZiBpdDtcbiAgICAgIC8vIGhlcmUsIHdlIGxpc3RlbiBmb3IgdG91Y2hlbmQsIGV4cGxpY2l0bHkgcGF1c2UgdGhlIGNhcm91c2VsXG4gICAgICAvLyAoYXMgaWYgaXQncyB0aGUgc2Vjb25kIHRpbWUgd2UgdGFwIG9uIGl0LCBtb3VzZWVudGVyIGNvbXBhdCBldmVudFxuICAgICAgLy8gaXMgTk9UIGZpcmVkKSBhbmQgYWZ0ZXIgYSB0aW1lb3V0ICh0byBhbGxvdyBmb3IgbW91c2UgY29tcGF0aWJpbGl0eVxuICAgICAgLy8gZXZlbnRzIHRvIGZpcmUpIHdlIGV4cGxpY2l0bHkgcmVzdGFydCBjeWNsaW5nXG5cbiAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgIGlmICh0aGlzLnRvdWNoVGltZW91dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50b3VjaFRpbWVvdXQpO1xuICAgICAgfVxuICAgICAgdGhpcy50b3VjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX21heWJlRW5hYmxlQ3ljbGUoKSwgVE9VQ0hFVkVOVF9DT01QQVRfV0FJVCArIHRoaXMuX2NvbmZpZy5pbnRlcnZhbCk7XG4gICAgfTtcbiAgICBjb25zdCBzd2lwZUNvbmZpZyA9IHtcbiAgICAgIGxlZnRDYWxsYmFjazogKCkgPT4gdGhpcy5fc2xpZGUodGhpcy5fZGlyZWN0aW9uVG9PcmRlcihESVJFQ1RJT05fTEVGVCkpLFxuICAgICAgcmlnaHRDYWxsYmFjazogKCkgPT4gdGhpcy5fc2xpZGUodGhpcy5fZGlyZWN0aW9uVG9PcmRlcihESVJFQ1RJT05fUklHSFQpKSxcbiAgICAgIGVuZENhbGxiYWNrOiBlbmRDYWxsQmFja1xuICAgIH07XG4gICAgdGhpcy5fc3dpcGVIZWxwZXIgPSBuZXcgU3dpcGUodGhpcy5fZWxlbWVudCwgc3dpcGVDb25maWcpO1xuICB9XG4gIF9rZXlkb3duKGV2ZW50KSB7XG4gICAgaWYgKC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoZXZlbnQudGFyZ2V0LnRhZ05hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IEtFWV9UT19ESVJFQ1RJT05bZXZlbnQua2V5XTtcbiAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5fc2xpZGUodGhpcy5fZGlyZWN0aW9uVG9PcmRlcihkaXJlY3Rpb24pKTtcbiAgICB9XG4gIH1cbiAgX2dldEl0ZW1JbmRleChlbGVtZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldEl0ZW1zKCkuaW5kZXhPZihlbGVtZW50KTtcbiAgfVxuICBfc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudChpbmRleCkge1xuICAgIGlmICghdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYWN0aXZlSW5kaWNhdG9yID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9BQ1RJVkUsIHRoaXMuX2luZGljYXRvcnNFbGVtZW50KTtcbiAgICBhY3RpdmVJbmRpY2F0b3IuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0FDVElWRSQyKTtcbiAgICBhY3RpdmVJbmRpY2F0b3IucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWN1cnJlbnQnKTtcbiAgICBjb25zdCBuZXdBY3RpdmVJbmRpY2F0b3IgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKGBbZGF0YS1icy1zbGlkZS10bz1cIiR7aW5kZXh9XCJdYCwgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQpO1xuICAgIGlmIChuZXdBY3RpdmVJbmRpY2F0b3IpIHtcbiAgICAgIG5ld0FjdGl2ZUluZGljYXRvci5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFJDIpO1xuICAgICAgbmV3QWN0aXZlSW5kaWNhdG9yLnNldEF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JywgJ3RydWUnKTtcbiAgICB9XG4gIH1cbiAgX3VwZGF0ZUludGVydmFsKCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9hY3RpdmVFbGVtZW50IHx8IHRoaXMuX2dldEFjdGl2ZSgpO1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50SW50ZXJ2YWwgPSBOdW1iZXIucGFyc2VJbnQoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtaW50ZXJ2YWwnKSwgMTApO1xuICAgIHRoaXMuX2NvbmZpZy5pbnRlcnZhbCA9IGVsZW1lbnRJbnRlcnZhbCB8fCB0aGlzLl9jb25maWcuZGVmYXVsdEludGVydmFsO1xuICB9XG4gIF9zbGlkZShvcmRlciwgZWxlbWVudCA9IG51bGwpIHtcbiAgICBpZiAodGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPSB0aGlzLl9nZXRBY3RpdmUoKTtcbiAgICBjb25zdCBpc05leHQgPSBvcmRlciA9PT0gT1JERVJfTkVYVDtcbiAgICBjb25zdCBuZXh0RWxlbWVudCA9IGVsZW1lbnQgfHwgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQodGhpcy5fZ2V0SXRlbXMoKSwgYWN0aXZlRWxlbWVudCwgaXNOZXh0LCB0aGlzLl9jb25maWcud3JhcCk7XG4gICAgaWYgKG5leHRFbGVtZW50ID09PSBhY3RpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5leHRFbGVtZW50SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgobmV4dEVsZW1lbnQpO1xuICAgIGNvbnN0IHRyaWdnZXJFdmVudCA9IGV2ZW50TmFtZSA9PiB7XG4gICAgICByZXR1cm4gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgZXZlbnROYW1lLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IG5leHRFbGVtZW50LFxuICAgICAgICBkaXJlY3Rpb246IHRoaXMuX29yZGVyVG9EaXJlY3Rpb24ob3JkZXIpLFxuICAgICAgICBmcm9tOiB0aGlzLl9nZXRJdGVtSW5kZXgoYWN0aXZlRWxlbWVudCksXG4gICAgICAgIHRvOiBuZXh0RWxlbWVudEluZGV4XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHNsaWRlRXZlbnQgPSB0cmlnZ2VyRXZlbnQoRVZFTlRfU0xJREUpO1xuICAgIGlmIChzbGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFhY3RpdmVFbGVtZW50IHx8ICFuZXh0RWxlbWVudCkge1xuICAgICAgLy8gU29tZSB3ZWlyZG5lc3MgaXMgaGFwcGVuaW5nLCBzbyB3ZSBiYWlsXG4gICAgICAvLyBUT0RPOiBjaGFuZ2UgdGVzdHMgdGhhdCB1c2UgZW1wdHkgZGl2cyB0byBhdm9pZCB0aGlzIGNoZWNrXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzQ3ljbGluZyA9IEJvb2xlYW4odGhpcy5faW50ZXJ2YWwpO1xuICAgIHRoaXMucGF1c2UoKTtcbiAgICB0aGlzLl9pc1NsaWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQobmV4dEVsZW1lbnRJbmRleCk7XG4gICAgdGhpcy5fYWN0aXZlRWxlbWVudCA9IG5leHRFbGVtZW50O1xuICAgIGNvbnN0IGRpcmVjdGlvbmFsQ2xhc3NOYW1lID0gaXNOZXh0ID8gQ0xBU1NfTkFNRV9TVEFSVCA6IENMQVNTX05BTUVfRU5EO1xuICAgIGNvbnN0IG9yZGVyQ2xhc3NOYW1lID0gaXNOZXh0ID8gQ0xBU1NfTkFNRV9ORVhUIDogQ0xBU1NfTkFNRV9QUkVWO1xuICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5hZGQob3JkZXJDbGFzc05hbWUpO1xuICAgIHJlZmxvdyhuZXh0RWxlbWVudCk7XG4gICAgYWN0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGRpcmVjdGlvbmFsQ2xhc3NOYW1lKTtcbiAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QuYWRkKGRpcmVjdGlvbmFsQ2xhc3NOYW1lKTtcbiAgICBjb25zdCBjb21wbGV0ZUNhbGxCYWNrID0gKCkgPT4ge1xuICAgICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShkaXJlY3Rpb25hbENsYXNzTmFtZSwgb3JkZXJDbGFzc05hbWUpO1xuICAgICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSQyKTtcbiAgICAgIGFjdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0FDVElWRSQyLCBvcmRlckNsYXNzTmFtZSwgZGlyZWN0aW9uYWxDbGFzc05hbWUpO1xuICAgICAgdGhpcy5faXNTbGlkaW5nID0gZmFsc2U7XG4gICAgICB0cmlnZ2VyRXZlbnQoRVZFTlRfU0xJRCk7XG4gICAgfTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlQ2FsbEJhY2ssIGFjdGl2ZUVsZW1lbnQsIHRoaXMuX2lzQW5pbWF0ZWQoKSk7XG4gICAgaWYgKGlzQ3ljbGluZykge1xuICAgICAgdGhpcy5jeWNsZSgpO1xuICAgIH1cbiAgfVxuICBfaXNBbmltYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TTElERSk7XG4gIH1cbiAgX2dldEFjdGl2ZSgpIHtcbiAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9BQ1RJVkVfSVRFTSwgdGhpcy5fZWxlbWVudCk7XG4gIH1cbiAgX2dldEl0ZW1zKCkge1xuICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0lURU0sIHRoaXMuX2VsZW1lbnQpO1xuICB9XG4gIF9jbGVhckludGVydmFsKCkge1xuICAgIGlmICh0aGlzLl9pbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbCk7XG4gICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG4gIF9kaXJlY3Rpb25Ub09yZGVyKGRpcmVjdGlvbikge1xuICAgIGlmIChpc1JUTCgpKSB7XG4gICAgICByZXR1cm4gZGlyZWN0aW9uID09PSBESVJFQ1RJT05fTEVGVCA/IE9SREVSX1BSRVYgOiBPUkRFUl9ORVhUO1xuICAgIH1cbiAgICByZXR1cm4gZGlyZWN0aW9uID09PSBESVJFQ1RJT05fTEVGVCA/IE9SREVSX05FWFQgOiBPUkRFUl9QUkVWO1xuICB9XG4gIF9vcmRlclRvRGlyZWN0aW9uKG9yZGVyKSB7XG4gICAgaWYgKGlzUlRMKCkpIHtcbiAgICAgIHJldHVybiBvcmRlciA9PT0gT1JERVJfUFJFViA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUO1xuICAgIH1cbiAgICByZXR1cm4gb3JkZXIgPT09IE9SREVSX1BSRVYgPyBESVJFQ1RJT05fUklHSFQgOiBESVJFQ1RJT05fTEVGVDtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IENhcm91c2VsLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnbnVtYmVyJykge1xuICAgICAgICBkYXRhLnRvKGNvbmZpZyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoZGF0YVtjb25maWddID09PSB1bmRlZmluZWQgfHwgY29uZmlnLnN0YXJ0c1dpdGgoJ18nKSB8fCBjb25maWcgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJJDUsIFNFTEVDVE9SX0RBVEFfU0xJREUsIGZ1bmN0aW9uIChldmVudCkge1xuICBjb25zdCB0YXJnZXQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRoaXMpO1xuICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0NBUk9VU0VMKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBjb25zdCBjYXJvdXNlbCA9IENhcm91c2VsLmdldE9yQ3JlYXRlSW5zdGFuY2UodGFyZ2V0KTtcbiAgY29uc3Qgc2xpZGVJbmRleCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLXNsaWRlLXRvJyk7XG4gIGlmIChzbGlkZUluZGV4KSB7XG4gICAgY2Fyb3VzZWwudG8oc2xpZGVJbmRleCk7XG4gICAgY2Fyb3VzZWwuX21heWJlRW5hYmxlQ3ljbGUoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGUodGhpcywgJ3NsaWRlJykgPT09ICduZXh0Jykge1xuICAgIGNhcm91c2VsLm5leHQoKTtcbiAgICBjYXJvdXNlbC5fbWF5YmVFbmFibGVDeWNsZSgpO1xuICAgIHJldHVybjtcbiAgfVxuICBjYXJvdXNlbC5wcmV2KCk7XG4gIGNhcm91c2VsLl9tYXliZUVuYWJsZUN5Y2xlKCk7XG59KTtcbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX0xPQURfREFUQV9BUEkkMywgKCkgPT4ge1xuICBjb25zdCBjYXJvdXNlbHMgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfUklERSk7XG4gIGZvciAoY29uc3QgY2Fyb3VzZWwgb2YgY2Fyb3VzZWxzKSB7XG4gICAgQ2Fyb3VzZWwuZ2V0T3JDcmVhdGVJbnN0YW5jZShjYXJvdXNlbCk7XG4gIH1cbn0pO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihDYXJvdXNlbCk7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBjb2xsYXBzZS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJGIgPSAnY29sbGFwc2UnO1xuY29uc3QgREFUQV9LRVkkNyA9ICdicy5jb2xsYXBzZSc7XG5jb25zdCBFVkVOVF9LRVkkNyA9IGAuJHtEQVRBX0tFWSQ3fWA7XG5jb25zdCBEQVRBX0FQSV9LRVkkNCA9ICcuZGF0YS1hcGknO1xuY29uc3QgRVZFTlRfU0hPVyQ2ID0gYHNob3cke0VWRU5UX0tFWSQ3fWA7XG5jb25zdCBFVkVOVF9TSE9XTiQ2ID0gYHNob3duJHtFVkVOVF9LRVkkN31gO1xuY29uc3QgRVZFTlRfSElERSQ2ID0gYGhpZGUke0VWRU5UX0tFWSQ3fWA7XG5jb25zdCBFVkVOVF9ISURERU4kNiA9IGBoaWRkZW4ke0VWRU5UX0tFWSQ3fWA7XG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSQ0ID0gYGNsaWNrJHtFVkVOVF9LRVkkN30ke0RBVEFfQVBJX0tFWSQ0fWA7XG5jb25zdCBDTEFTU19OQU1FX1NIT1ckNyA9ICdzaG93JztcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0UgPSAnY29sbGFwc2UnO1xuY29uc3QgQ0xBU1NfTkFNRV9DT0xMQVBTSU5HID0gJ2NvbGxhcHNpbmcnO1xuY29uc3QgQ0xBU1NfTkFNRV9DT0xMQVBTRUQgPSAnY29sbGFwc2VkJztcbmNvbnN0IENMQVNTX05BTUVfREVFUEVSX0NISUxEUkVOID0gYDpzY29wZSAuJHtDTEFTU19OQU1FX0NPTExBUFNFfSAuJHtDTEFTU19OQU1FX0NPTExBUFNFfWA7XG5jb25zdCBDTEFTU19OQU1FX0hPUklaT05UQUwgPSAnY29sbGFwc2UtaG9yaXpvbnRhbCc7XG5jb25zdCBXSURUSCA9ICd3aWR0aCc7XG5jb25zdCBIRUlHSFQgPSAnaGVpZ2h0JztcbmNvbnN0IFNFTEVDVE9SX0FDVElWRVMgPSAnLmNvbGxhcHNlLnNob3csIC5jb2xsYXBzZS5jb2xsYXBzaW5nJztcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFJDQgPSAnW2RhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIl0nO1xuY29uc3QgRGVmYXVsdCRhID0ge1xuICBwYXJlbnQ6IG51bGwsXG4gIHRvZ2dsZTogdHJ1ZVxufTtcbmNvbnN0IERlZmF1bHRUeXBlJGEgPSB7XG4gIHBhcmVudDogJyhudWxsfGVsZW1lbnQpJyxcbiAgdG9nZ2xlOiAnYm9vbGVhbidcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIENvbGxhcHNlIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fdHJpZ2dlckFycmF5ID0gW107XG4gICAgY29uc3QgdG9nZ2xlTGlzdCA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9UT0dHTEUkNCk7XG4gICAgZm9yIChjb25zdCBlbGVtIG9mIHRvZ2dsZUxpc3QpIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gU2VsZWN0b3JFbmdpbmUuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtKTtcbiAgICAgIGNvbnN0IGZpbHRlckVsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5maW5kKHNlbGVjdG9yKS5maWx0ZXIoZm91bmRFbGVtZW50ID0+IGZvdW5kRWxlbWVudCA9PT0gdGhpcy5fZWxlbWVudCk7XG4gICAgICBpZiAoc2VsZWN0b3IgIT09IG51bGwgJiYgZmlsdGVyRWxlbWVudC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fdHJpZ2dlckFycmF5LnB1c2goZWxlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2luaXRpYWxpemVDaGlsZHJlbigpO1xuICAgIGlmICghdGhpcy5fY29uZmlnLnBhcmVudCkge1xuICAgICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuX3RyaWdnZXJBcnJheSwgdGhpcy5faXNTaG93bigpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvbmZpZy50b2dnbGUpIHtcbiAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkYTtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSRhO1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSRiO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5faXNTaG93bigpKSB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93KCk7XG4gICAgfVxuICB9XG4gIHNob3coKSB7XG4gICAgaWYgKHRoaXMuX2lzVHJhbnNpdGlvbmluZyB8fCB0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGFjdGl2ZUNoaWxkcmVuID0gW107XG5cbiAgICAvLyBmaW5kIGFjdGl2ZSBjaGlsZHJlblxuICAgIGlmICh0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICBhY3RpdmVDaGlsZHJlbiA9IHRoaXMuX2dldEZpcnN0TGV2ZWxDaGlsZHJlbihTRUxFQ1RPUl9BQ1RJVkVTKS5maWx0ZXIoZWxlbWVudCA9PiBlbGVtZW50ICE9PSB0aGlzLl9lbGVtZW50KS5tYXAoZWxlbWVudCA9PiBDb2xsYXBzZS5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIHtcbiAgICAgICAgdG9nZ2xlOiBmYWxzZVxuICAgICAgfSkpO1xuICAgIH1cbiAgICBpZiAoYWN0aXZlQ2hpbGRyZW4ubGVuZ3RoICYmIGFjdGl2ZUNoaWxkcmVuWzBdLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1ckNik7XG4gICAgaWYgKHN0YXJ0RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGFjdGl2ZUluc3RhbmNlIG9mIGFjdGl2ZUNoaWxkcmVuKSB7XG4gICAgICBhY3RpdmVJbnN0YW5jZS5oaWRlKCk7XG4gICAgfVxuICAgIGNvbnN0IGRpbWVuc2lvbiA9IHRoaXMuX2dldERpbWVuc2lvbigpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNFKTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKTtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAwO1xuICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLl90cmlnZ2VyQXJyYXksIHRydWUpO1xuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNJTkcpO1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQ09MTEFQU0UsIENMQVNTX05BTUVfU0hPVyQ3KTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9ICcnO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04kNik7XG4gICAgfTtcbiAgICBjb25zdCBjYXBpdGFsaXplZERpbWVuc2lvbiA9IGRpbWVuc2lvblswXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKDEpO1xuICAgIGNvbnN0IHNjcm9sbFNpemUgPSBgc2Nyb2xsJHtjYXBpdGFsaXplZERpbWVuc2lvbn1gO1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRydWUpO1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9IGAke3RoaXMuX2VsZW1lbnRbc2Nyb2xsU2l6ZV19cHhgO1xuICB9XG4gIGhpZGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzVHJhbnNpdGlvbmluZyB8fCAhdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFJDYpO1xuICAgIGlmIChzdGFydEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGltZW5zaW9uID0gdGhpcy5fZ2V0RGltZW5zaW9uKCk7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gYCR7dGhpcy5fZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtkaW1lbnNpb25dfXB4YDtcbiAgICByZWZsb3codGhpcy5fZWxlbWVudCk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQ09MTEFQU0lORyk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQ09MTEFQU0UsIENMQVNTX05BTUVfU0hPVyQ3KTtcbiAgICBmb3IgKGNvbnN0IHRyaWdnZXIgb2YgdGhpcy5fdHJpZ2dlckFycmF5KSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0cmlnZ2VyKTtcbiAgICAgIGlmIChlbGVtZW50ICYmICF0aGlzLl9pc1Nob3duKGVsZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhbdHJpZ2dlcl0sIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZTtcbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQ09MTEFQU0lORyk7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTRSk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4kNik7XG4gICAgfTtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAnJztcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLl9lbGVtZW50LCB0cnVlKTtcbiAgfVxuICBfaXNTaG93bihlbGVtZW50ID0gdGhpcy5fZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1ckNyk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIGNvbmZpZy50b2dnbGUgPSBCb29sZWFuKGNvbmZpZy50b2dnbGUpOyAvLyBDb2VyY2Ugc3RyaW5nIHZhbHVlc1xuICAgIGNvbmZpZy5wYXJlbnQgPSBnZXRFbGVtZW50KGNvbmZpZy5wYXJlbnQpO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2dldERpbWVuc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9IT1JJWk9OVEFMKSA/IFdJRFRIIDogSEVJR0hUO1xuICB9XG4gIF9pbml0aWFsaXplQ2hpbGRyZW4oKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5fZ2V0Rmlyc3RMZXZlbENoaWxkcmVuKFNFTEVDVE9SX0RBVEFfVE9HR0xFJDQpO1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBjaGlsZHJlbikge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKGVsZW1lbnQpO1xuICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhbZWxlbWVudF0sIHRoaXMuX2lzU2hvd24oc2VsZWN0ZWQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgX2dldEZpcnN0TGV2ZWxDaGlsZHJlbihzZWxlY3Rvcikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gU2VsZWN0b3JFbmdpbmUuZmluZChDTEFTU19OQU1FX0RFRVBFUl9DSElMRFJFTiwgdGhpcy5fY29uZmlnLnBhcmVudCk7XG4gICAgLy8gcmVtb3ZlIGNoaWxkcmVuIGlmIGdyZWF0ZXIgZGVwdGhcbiAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvciwgdGhpcy5fY29uZmlnLnBhcmVudCkuZmlsdGVyKGVsZW1lbnQgPT4gIWNoaWxkcmVuLmluY2x1ZGVzKGVsZW1lbnQpKTtcbiAgfVxuICBfYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRyaWdnZXJBcnJheSwgaXNPcGVuKSB7XG4gICAgaWYgKCF0cmlnZ2VyQXJyYXkubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0cmlnZ2VyQXJyYXkpIHtcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShDTEFTU19OQU1FX0NPTExBUFNFRCwgIWlzT3Blbik7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIGlzT3Blbik7XG4gICAgfVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgY29uc3QgX2NvbmZpZyA9IHt9O1xuICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJyAmJiAvc2hvd3xoaWRlLy50ZXN0KGNvbmZpZykpIHtcbiAgICAgIF9jb25maWcudG9nZ2xlID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IENvbGxhcHNlLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgX2NvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSQ0LCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ0LCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgLy8gcHJldmVudERlZmF1bHQgb25seSBmb3IgPGE+IGVsZW1lbnRzICh3aGljaCBjaGFuZ2UgdGhlIFVSTCkgbm90IGluc2lkZSB0aGUgY29sbGFwc2libGUgZWxlbWVudFxuICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgPT09ICdBJyB8fCBldmVudC5kZWxlZ2F0ZVRhcmdldCAmJiBldmVudC5kZWxlZ2F0ZVRhcmdldC50YWdOYW1lID09PSAnQScpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBTZWxlY3RvckVuZ2luZS5nZXRNdWx0aXBsZUVsZW1lbnRzRnJvbVNlbGVjdG9yKHRoaXMpKSB7XG4gICAgQ29sbGFwc2UuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50LCB7XG4gICAgICB0b2dnbGU6IGZhbHNlXG4gICAgfSkudG9nZ2xlKCk7XG4gIH1cbn0pO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihDb2xsYXBzZSk7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBkcm9wZG93bi5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJGEgPSAnZHJvcGRvd24nO1xuY29uc3QgREFUQV9LRVkkNiA9ICdicy5kcm9wZG93bic7XG5jb25zdCBFVkVOVF9LRVkkNiA9IGAuJHtEQVRBX0tFWSQ2fWA7XG5jb25zdCBEQVRBX0FQSV9LRVkkMyA9ICcuZGF0YS1hcGknO1xuY29uc3QgRVNDQVBFX0tFWSQyID0gJ0VzY2FwZSc7XG5jb25zdCBUQUJfS0VZJDEgPSAnVGFiJztcbmNvbnN0IEFSUk9XX1VQX0tFWSQxID0gJ0Fycm93VXAnO1xuY29uc3QgQVJST1dfRE9XTl9LRVkkMSA9ICdBcnJvd0Rvd24nO1xuY29uc3QgUklHSFRfTU9VU0VfQlVUVE9OID0gMjsgLy8gTW91c2VFdmVudC5idXR0b24gdmFsdWUgZm9yIHRoZSBzZWNvbmRhcnkgYnV0dG9uLCB1c3VhbGx5IHRoZSByaWdodCBidXR0b25cblxuY29uc3QgRVZFTlRfSElERSQ1ID0gYGhpZGUke0VWRU5UX0tFWSQ2fWA7XG5jb25zdCBFVkVOVF9ISURERU4kNSA9IGBoaWRkZW4ke0VWRU5UX0tFWSQ2fWA7XG5jb25zdCBFVkVOVF9TSE9XJDUgPSBgc2hvdyR7RVZFTlRfS0VZJDZ9YDtcbmNvbnN0IEVWRU5UX1NIT1dOJDUgPSBgc2hvd24ke0VWRU5UX0tFWSQ2fWA7XG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSQzID0gYGNsaWNrJHtFVkVOVF9LRVkkNn0ke0RBVEFfQVBJX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9LRVlET1dOX0RBVEFfQVBJID0gYGtleWRvd24ke0VWRU5UX0tFWSQ2fSR7REFUQV9BUElfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX0tFWVVQX0RBVEFfQVBJID0gYGtleXVwJHtFVkVOVF9LRVkkNn0ke0RBVEFfQVBJX0tFWSQzfWA7XG5jb25zdCBDTEFTU19OQU1FX1NIT1ckNiA9ICdzaG93JztcbmNvbnN0IENMQVNTX05BTUVfRFJPUFVQID0gJ2Ryb3B1cCc7XG5jb25zdCBDTEFTU19OQU1FX0RST1BFTkQgPSAnZHJvcGVuZCc7XG5jb25zdCBDTEFTU19OQU1FX0RST1BTVEFSVCA9ICdkcm9wc3RhcnQnO1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QVVBfQ0VOVEVSID0gJ2Ryb3B1cC1jZW50ZXInO1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QRE9XTl9DRU5URVIgPSAnZHJvcGRvd24tY2VudGVyJztcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFJDMgPSAnW2RhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIl06bm90KC5kaXNhYmxlZCk6bm90KDpkaXNhYmxlZCknO1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEVfU0hPV04gPSBgJHtTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzfS4ke0NMQVNTX05BTUVfU0hPVyQ2fWA7XG5jb25zdCBTRUxFQ1RPUl9NRU5VID0gJy5kcm9wZG93bi1tZW51JztcbmNvbnN0IFNFTEVDVE9SX05BVkJBUiA9ICcubmF2YmFyJztcbmNvbnN0IFNFTEVDVE9SX05BVkJBUl9OQVYgPSAnLm5hdmJhci1uYXYnO1xuY29uc3QgU0VMRUNUT1JfVklTSUJMRV9JVEVNUyA9ICcuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbTpub3QoLmRpc2FibGVkKTpub3QoOmRpc2FibGVkKSc7XG5jb25zdCBQTEFDRU1FTlRfVE9QID0gaXNSVEwoKSA/ICd0b3AtZW5kJyA6ICd0b3Atc3RhcnQnO1xuY29uc3QgUExBQ0VNRU5UX1RPUEVORCA9IGlzUlRMKCkgPyAndG9wLXN0YXJ0JyA6ICd0b3AtZW5kJztcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT00gPSBpc1JUTCgpID8gJ2JvdHRvbS1lbmQnIDogJ2JvdHRvbS1zdGFydCc7XG5jb25zdCBQTEFDRU1FTlRfQk9UVE9NRU5EID0gaXNSVEwoKSA/ICdib3R0b20tc3RhcnQnIDogJ2JvdHRvbS1lbmQnO1xuY29uc3QgUExBQ0VNRU5UX1JJR0hUID0gaXNSVEwoKSA/ICdsZWZ0LXN0YXJ0JyA6ICdyaWdodC1zdGFydCc7XG5jb25zdCBQTEFDRU1FTlRfTEVGVCA9IGlzUlRMKCkgPyAncmlnaHQtc3RhcnQnIDogJ2xlZnQtc3RhcnQnO1xuY29uc3QgUExBQ0VNRU5UX1RPUENFTlRFUiA9ICd0b3AnO1xuY29uc3QgUExBQ0VNRU5UX0JPVFRPTUNFTlRFUiA9ICdib3R0b20nO1xuY29uc3QgRGVmYXVsdCQ5ID0ge1xuICBhdXRvQ2xvc2U6IHRydWUsXG4gIGJvdW5kYXJ5OiAnY2xpcHBpbmdQYXJlbnRzJyxcbiAgZGlzcGxheTogJ2R5bmFtaWMnLFxuICBvZmZzZXQ6IFswLCAyXSxcbiAgcG9wcGVyQ29uZmlnOiBudWxsLFxuICByZWZlcmVuY2U6ICd0b2dnbGUnXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkOSA9IHtcbiAgYXV0b0Nsb3NlOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gIGJvdW5kYXJ5OiAnKHN0cmluZ3xlbGVtZW50KScsXG4gIGRpc3BsYXk6ICdzdHJpbmcnLFxuICBvZmZzZXQ6ICcoYXJyYXl8c3RyaW5nfGZ1bmN0aW9uKScsXG4gIHBvcHBlckNvbmZpZzogJyhudWxsfG9iamVjdHxmdW5jdGlvbiknLFxuICByZWZlcmVuY2U6ICcoc3RyaW5nfGVsZW1lbnR8b2JqZWN0KSdcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIERyb3Bkb3duIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG4gICAgdGhpcy5fcG9wcGVyID0gbnVsbDtcbiAgICB0aGlzLl9wYXJlbnQgPSB0aGlzLl9lbGVtZW50LnBhcmVudE5vZGU7IC8vIGRyb3Bkb3duIHdyYXBwZXJcbiAgICAvLyBUT0RPOiB2NiByZXZlcnQgIzM3MDExICYgY2hhbmdlIG1hcmt1cCBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy81LjMvZm9ybXMvaW5wdXQtZ3JvdXAvXG4gICAgdGhpcy5fbWVudSA9IFNlbGVjdG9yRW5naW5lLm5leHQodGhpcy5fZWxlbWVudCwgU0VMRUNUT1JfTUVOVSlbMF0gfHwgU2VsZWN0b3JFbmdpbmUucHJldih0aGlzLl9lbGVtZW50LCBTRUxFQ1RPUl9NRU5VKVswXSB8fCBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX01FTlUsIHRoaXMuX3BhcmVudCk7XG4gICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKTtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDk7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkOTtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkYTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2hvd24oKSA/IHRoaXMuaGlkZSgpIDogdGhpcy5zaG93KCk7XG4gIH1cbiAgc2hvdygpIHtcbiAgICBpZiAoaXNEaXNhYmxlZCh0aGlzLl9lbGVtZW50KSB8fCB0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9O1xuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1ckNSwgcmVsYXRlZFRhcmdldCk7XG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2NyZWF0ZVBvcHBlcigpO1xuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIGFkZCBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgdG8gdGhlIGJvZHkncyBpbW1lZGlhdGUgY2hpbGRyZW47XG4gICAgLy8gb25seSBuZWVkZWQgYmVjYXVzZSBvZiBicm9rZW4gZXZlbnQgZGVsZWdhdGlvbiBvbiBpT1NcbiAgICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTQvMDIvbW91c2VfZXZlbnRfYnViLmh0bWxcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmICF0aGlzLl9wYXJlbnQuY2xvc2VzdChTRUxFQ1RPUl9OQVZCQVJfTkFWKSkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKSkge1xuICAgICAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9lbGVtZW50LmZvY3VzKCk7XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKTtcbiAgICB0aGlzLl9tZW51LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XJDYpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1ckNik7XG4gICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04kNSwgcmVsYXRlZFRhcmdldCk7XG4gIH1cbiAgaGlkZSgpIHtcbiAgICBpZiAoaXNEaXNhYmxlZCh0aGlzLl9lbGVtZW50KSB8fCAhdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSB7XG4gICAgICByZWxhdGVkVGFyZ2V0OiB0aGlzLl9lbGVtZW50XG4gICAgfTtcbiAgICB0aGlzLl9jb21wbGV0ZUhpZGUocmVsYXRlZFRhcmdldCk7XG4gIH1cbiAgZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gIH1cbiAgdXBkYXRlKCkge1xuICAgIHRoaXMuX2luTmF2YmFyID0gdGhpcy5fZGV0ZWN0TmF2YmFyKCk7XG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLnVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KSB7XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSQ1LCByZWxhdGVkVGFyZ2V0KTtcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgcmVtb3ZlIHRoZSBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgd2UgYWRkZWQgZm9yIGlPUyBzdXBwb3J0XG4gICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKSkge1xuICAgICAgICBFdmVudEhhbmRsZXIub2ZmKGVsZW1lbnQsICdtb3VzZW92ZXInLCBub29wKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgdGhpcy5fbWVudS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQ2KTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDYpO1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG4gICAgTWFuaXB1bGF0b3IucmVtb3ZlRGF0YUF0dHJpYnV0ZSh0aGlzLl9tZW51LCAncG9wcGVyJyk7XG4gICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOJDUsIHJlbGF0ZWRUYXJnZXQpO1xuICB9XG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0gc3VwZXIuX2dldENvbmZpZyhjb25maWcpO1xuICAgIGlmICh0eXBlb2YgY29uZmlnLnJlZmVyZW5jZSA9PT0gJ29iamVjdCcgJiYgIWlzRWxlbWVudChjb25maWcucmVmZXJlbmNlKSAmJiB0eXBlb2YgY29uZmlnLnJlZmVyZW5jZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFBvcHBlciB2aXJ0dWFsIGVsZW1lbnRzIHJlcXVpcmUgYSBnZXRCb3VuZGluZ0NsaWVudFJlY3QgbWV0aG9kXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke05BTUUkYS50b1VwcGVyQ2FzZSgpfTogT3B0aW9uIFwicmVmZXJlbmNlXCIgcHJvdmlkZWQgdHlwZSBcIm9iamVjdFwiIHdpdGhvdXQgYSByZXF1aXJlZCBcImdldEJvdW5kaW5nQ2xpZW50UmVjdFwiIG1ldGhvZC5gKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfY3JlYXRlUG9wcGVyKCkge1xuICAgIGlmICh0eXBlb2YgUG9wcGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9vdHN0cmFwXFwncyBkcm9wZG93bnMgcmVxdWlyZSBQb3BwZXIgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZyknKTtcbiAgICB9XG4gICAgbGV0IHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9lbGVtZW50O1xuICAgIGlmICh0aGlzLl9jb25maWcucmVmZXJlbmNlID09PSAncGFyZW50Jykge1xuICAgICAgcmVmZXJlbmNlRWxlbWVudCA9IHRoaXMuX3BhcmVudDtcbiAgICB9IGVsc2UgaWYgKGlzRWxlbWVudCh0aGlzLl9jb25maWcucmVmZXJlbmNlKSkge1xuICAgICAgcmVmZXJlbmNlRWxlbWVudCA9IGdldEVsZW1lbnQodGhpcy5fY29uZmlnLnJlZmVyZW5jZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5fY29uZmlnLnJlZmVyZW5jZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9jb25maWcucmVmZXJlbmNlO1xuICAgIH1cbiAgICBjb25zdCBwb3BwZXJDb25maWcgPSB0aGlzLl9nZXRQb3BwZXJDb25maWcoKTtcbiAgICB0aGlzLl9wb3BwZXIgPSBQb3BwZXIuY3JlYXRlUG9wcGVyKHJlZmVyZW5jZUVsZW1lbnQsIHRoaXMuX21lbnUsIHBvcHBlckNvbmZpZyk7XG4gIH1cbiAgX2lzU2hvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX21lbnUuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVyQ2KTtcbiAgfVxuICBfZ2V0UGxhY2VtZW50KCkge1xuICAgIGNvbnN0IHBhcmVudERyb3Bkb3duID0gdGhpcy5fcGFyZW50O1xuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QRU5EKSkge1xuICAgICAgcmV0dXJuIFBMQUNFTUVOVF9SSUdIVDtcbiAgICB9XG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BTVEFSVCkpIHtcbiAgICAgIHJldHVybiBQTEFDRU1FTlRfTEVGVDtcbiAgICB9XG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BVUF9DRU5URVIpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX1RPUENFTlRFUjtcbiAgICB9XG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BET1dOX0NFTlRFUikpIHtcbiAgICAgIHJldHVybiBQTEFDRU1FTlRfQk9UVE9NQ0VOVEVSO1xuICAgIH1cblxuICAgIC8vIFdlIG5lZWQgdG8gdHJpbSB0aGUgdmFsdWUgYmVjYXVzZSBjdXN0b20gcHJvcGVydGllcyBjYW4gYWxzbyBpbmNsdWRlIHNwYWNlc1xuICAgIGNvbnN0IGlzRW5kID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9tZW51KS5nZXRQcm9wZXJ0eVZhbHVlKCctLWJzLXBvc2l0aW9uJykudHJpbSgpID09PSAnZW5kJztcbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUFVQKSkge1xuICAgICAgcmV0dXJuIGlzRW5kID8gUExBQ0VNRU5UX1RPUEVORCA6IFBMQUNFTUVOVF9UT1A7XG4gICAgfVxuICAgIHJldHVybiBpc0VuZCA/IFBMQUNFTUVOVF9CT1RUT01FTkQgOiBQTEFDRU1FTlRfQk9UVE9NO1xuICB9XG4gIF9kZXRlY3ROYXZiYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9OQVZCQVIpICE9PSBudWxsO1xuICB9XG4gIF9nZXRPZmZzZXQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgb2Zmc2V0XG4gICAgfSA9IHRoaXMuX2NvbmZpZztcbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBvZmZzZXQuc3BsaXQoJywnKS5tYXAodmFsdWUgPT4gTnVtYmVyLnBhcnNlSW50KHZhbHVlLCAxMCkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHBvcHBlckRhdGEgPT4gb2Zmc2V0KHBvcHBlckRhdGEsIHRoaXMuX2VsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG4gIF9nZXRQb3BwZXJDb25maWcoKSB7XG4gICAgY29uc3QgZGVmYXVsdEJzUG9wcGVyQ29uZmlnID0ge1xuICAgICAgcGxhY2VtZW50OiB0aGlzLl9nZXRQbGFjZW1lbnQoKSxcbiAgICAgIG1vZGlmaWVyczogW3tcbiAgICAgICAgbmFtZTogJ3ByZXZlbnRPdmVyZmxvdycsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBib3VuZGFyeTogdGhpcy5fY29uZmlnLmJvdW5kYXJ5XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBvZmZzZXQ6IHRoaXMuX2dldE9mZnNldCgpXG4gICAgICAgIH1cbiAgICAgIH1dXG4gICAgfTtcblxuICAgIC8vIERpc2FibGUgUG9wcGVyIGlmIHdlIGhhdmUgYSBzdGF0aWMgZGlzcGxheSBvciBEcm9wZG93biBpcyBpbiBOYXZiYXJcbiAgICBpZiAodGhpcy5faW5OYXZiYXIgfHwgdGhpcy5fY29uZmlnLmRpc3BsYXkgPT09ICdzdGF0aWMnKSB7XG4gICAgICBNYW5pcHVsYXRvci5zZXREYXRhQXR0cmlidXRlKHRoaXMuX21lbnUsICdwb3BwZXInLCAnc3RhdGljJyk7IC8vIFRPRE86IHY2IHJlbW92ZVxuICAgICAgZGVmYXVsdEJzUG9wcGVyQ29uZmlnLm1vZGlmaWVycyA9IFt7XG4gICAgICAgIG5hbWU6ICdhcHBseVN0eWxlcycsXG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICB9XTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZmF1bHRCc1BvcHBlckNvbmZpZyxcbiAgICAgIC4uLmV4ZWN1dGUodGhpcy5fY29uZmlnLnBvcHBlckNvbmZpZywgW2RlZmF1bHRCc1BvcHBlckNvbmZpZ10pXG4gICAgfTtcbiAgfVxuICBfc2VsZWN0TWVudUl0ZW0oe1xuICAgIGtleSxcbiAgICB0YXJnZXRcbiAgfSkge1xuICAgIGNvbnN0IGl0ZW1zID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9WSVNJQkxFX0lURU1TLCB0aGlzLl9tZW51KS5maWx0ZXIoZWxlbWVudCA9PiBpc1Zpc2libGUoZWxlbWVudCkpO1xuICAgIGlmICghaXRlbXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGFyZ2V0IGlzbid0IGluY2x1ZGVkIGluIGl0ZW1zIChlLmcuIHdoZW4gZXhwYW5kaW5nIHRoZSBkcm9wZG93bilcbiAgICAvLyBhbGxvdyBjeWNsaW5nIHRvIGdldCB0aGUgbGFzdCBpdGVtIGluIGNhc2Uga2V5IGVxdWFscyBBUlJPV19VUF9LRVlcbiAgICBnZXROZXh0QWN0aXZlRWxlbWVudChpdGVtcywgdGFyZ2V0LCBrZXkgPT09IEFSUk9XX0RPV05fS0VZJDEsICFpdGVtcy5pbmNsdWRlcyh0YXJnZXQpKS5mb2N1cygpO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gRHJvcGRvd24uZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgfVxuICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgfSk7XG4gIH1cbiAgc3RhdGljIGNsZWFyTWVudXMoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuYnV0dG9uID09PSBSSUdIVF9NT1VTRV9CVVRUT04gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldmVudC5rZXkgIT09IFRBQl9LRVkkMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcGVuVG9nZ2xlcyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9UT0dHTEVfU0hPV04pO1xuICAgIGZvciAoY29uc3QgdG9nZ2xlIG9mIG9wZW5Ub2dnbGVzKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gRHJvcGRvd24uZ2V0SW5zdGFuY2UodG9nZ2xlKTtcbiAgICAgIGlmICghY29udGV4dCB8fCBjb250ZXh0Ll9jb25maWcuYXV0b0Nsb3NlID09PSBmYWxzZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbXBvc2VkUGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuICAgICAgY29uc3QgaXNNZW51VGFyZ2V0ID0gY29tcG9zZWRQYXRoLmluY2x1ZGVzKGNvbnRleHQuX21lbnUpO1xuICAgICAgaWYgKGNvbXBvc2VkUGF0aC5pbmNsdWRlcyhjb250ZXh0Ll9lbGVtZW50KSB8fCBjb250ZXh0Ll9jb25maWcuYXV0b0Nsb3NlID09PSAnaW5zaWRlJyAmJiAhaXNNZW51VGFyZ2V0IHx8IGNvbnRleHQuX2NvbmZpZy5hdXRvQ2xvc2UgPT09ICdvdXRzaWRlJyAmJiBpc01lbnVUYXJnZXQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFRhYiBuYXZpZ2F0aW9uIHRocm91Z2ggdGhlIGRyb3Bkb3duIG1lbnUgb3IgZXZlbnRzIGZyb20gY29udGFpbmVkIGlucHV0cyBzaG91bGRuJ3QgY2xvc2UgdGhlIG1lbnVcbiAgICAgIGlmIChjb250ZXh0Ll9tZW51LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiYgKGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgZXZlbnQua2V5ID09PSBUQUJfS0VZJDEgfHwgL2lucHV0fHNlbGVjdHxvcHRpb258dGV4dGFyZWF8Zm9ybS9pLnRlc3QoZXZlbnQudGFyZ2V0LnRhZ05hbWUpKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IGNvbnRleHQuX2VsZW1lbnRcbiAgICAgIH07XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgICByZWxhdGVkVGFyZ2V0LmNsaWNrRXZlbnQgPSBldmVudDtcbiAgICAgIH1cbiAgICAgIGNvbnRleHQuX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KTtcbiAgICB9XG4gIH1cbiAgc3RhdGljIGRhdGFBcGlLZXlkb3duSGFuZGxlcihldmVudCkge1xuICAgIC8vIElmIG5vdCBhbiBVUCB8IERPV04gfCBFU0NBUEUga2V5ID0+IG5vdCBhIGRyb3Bkb3duIGNvbW1hbmRcbiAgICAvLyBJZiBpbnB1dC90ZXh0YXJlYSAmJiBpZiBrZXkgaXMgb3RoZXIgdGhhbiBFU0NBUEUgPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuXG4gICAgY29uc3QgaXNJbnB1dCA9IC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoZXZlbnQudGFyZ2V0LnRhZ05hbWUpO1xuICAgIGNvbnN0IGlzRXNjYXBlRXZlbnQgPSBldmVudC5rZXkgPT09IEVTQ0FQRV9LRVkkMjtcbiAgICBjb25zdCBpc1VwT3JEb3duRXZlbnQgPSBbQVJST1dfVVBfS0VZJDEsIEFSUk9XX0RPV05fS0VZJDFdLmluY2x1ZGVzKGV2ZW50LmtleSk7XG4gICAgaWYgKCFpc1VwT3JEb3duRXZlbnQgJiYgIWlzRXNjYXBlRXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzSW5wdXQgJiYgIWlzRXNjYXBlRXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIC8vIFRPRE86IHY2IHJldmVydCAjMzcwMTEgJiBjaGFuZ2UgbWFya3VwIGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS9kb2NzLzUuMy9mb3Jtcy9pbnB1dC1ncm91cC9cbiAgICBjb25zdCBnZXRUb2dnbGVCdXR0b24gPSB0aGlzLm1hdGNoZXMoU0VMRUNUT1JfREFUQV9UT0dHTEUkMykgPyB0aGlzIDogU2VsZWN0b3JFbmdpbmUucHJldih0aGlzLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzKVswXSB8fCBTZWxlY3RvckVuZ2luZS5uZXh0KHRoaXMsIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDMpWzBdIHx8IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfREFUQV9UT0dHTEUkMywgZXZlbnQuZGVsZWdhdGVUYXJnZXQucGFyZW50Tm9kZSk7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBEcm9wZG93bi5nZXRPckNyZWF0ZUluc3RhbmNlKGdldFRvZ2dsZUJ1dHRvbik7XG4gICAgaWYgKGlzVXBPckRvd25FdmVudCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBpbnN0YW5jZS5zaG93KCk7XG4gICAgICBpbnN0YW5jZS5fc2VsZWN0TWVudUl0ZW0oZXZlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaW5zdGFuY2UuX2lzU2hvd24oKSkge1xuICAgICAgLy8gZWxzZSBpcyBlc2NhcGUgYW5kIHdlIGNoZWNrIGlmIGl0IGlzIHNob3duXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGluc3RhbmNlLmhpZGUoKTtcbiAgICAgIGdldFRvZ2dsZUJ1dHRvbi5mb2N1cygpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzLCBEcm9wZG93bi5kYXRhQXBpS2V5ZG93bkhhbmRsZXIpO1xuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX0RBVEFfQVBJLCBTRUxFQ1RPUl9NRU5VLCBEcm9wZG93bi5kYXRhQXBpS2V5ZG93bkhhbmRsZXIpO1xuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSQzLCBEcm9wZG93bi5jbGVhck1lbnVzKTtcbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfS0VZVVBfREFUQV9BUEksIERyb3Bkb3duLmNsZWFyTWVudXMpO1xuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSQzLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgRHJvcGRvd24uZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKS50b2dnbGUoKTtcbn0pO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihEcm9wZG93bik7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL2JhY2tkcm9wLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkOSA9ICdiYWNrZHJvcCc7XG5jb25zdCBDTEFTU19OQU1FX0ZBREUkNCA9ICdmYWRlJztcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQ1ID0gJ3Nob3cnO1xuY29uc3QgRVZFTlRfTU9VU0VET1dOID0gYG1vdXNlZG93bi5icy4ke05BTUUkOX1gO1xuY29uc3QgRGVmYXVsdCQ4ID0ge1xuICBjbGFzc05hbWU6ICdtb2RhbC1iYWNrZHJvcCcsXG4gIGNsaWNrQ2FsbGJhY2s6IG51bGwsXG4gIGlzQW5pbWF0ZWQ6IGZhbHNlLFxuICBpc1Zpc2libGU6IHRydWUsXG4gIC8vIGlmIGZhbHNlLCB3ZSB1c2UgdGhlIGJhY2tkcm9wIGhlbHBlciB3aXRob3V0IGFkZGluZyBhbnkgZWxlbWVudCB0byB0aGUgZG9tXG4gIHJvb3RFbGVtZW50OiAnYm9keScgLy8gZ2l2ZSB0aGUgY2hvaWNlIHRvIHBsYWNlIGJhY2tkcm9wIHVuZGVyIGRpZmZlcmVudCBlbGVtZW50c1xufTtcbmNvbnN0IERlZmF1bHRUeXBlJDggPSB7XG4gIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gIGNsaWNrQ2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknLFxuICBpc0FuaW1hdGVkOiAnYm9vbGVhbicsXG4gIGlzVmlzaWJsZTogJ2Jvb2xlYW4nLFxuICByb290RWxlbWVudDogJyhlbGVtZW50fHN0cmluZyknXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBCYWNrZHJvcCBleHRlbmRzIENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgdGhpcy5faXNBcHBlbmRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkODtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQ4O1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQ5O1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHNob3coY2FsbGJhY2spIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5pc1Zpc2libGUpIHtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9hcHBlbmQoKTtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZ2V0RWxlbWVudCgpO1xuICAgIGlmICh0aGlzLl9jb25maWcuaXNBbmltYXRlZCkge1xuICAgICAgcmVmbG93KGVsZW1lbnQpO1xuICAgIH1cbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XJDUpO1xuICAgIHRoaXMuX2VtdWxhdGVBbmltYXRpb24oKCkgPT4ge1xuICAgICAgZXhlY3V0ZShjYWxsYmFjayk7XG4gICAgfSk7XG4gIH1cbiAgaGlkZShjYWxsYmFjaykge1xuICAgIGlmICghdGhpcy5fY29uZmlnLmlzVmlzaWJsZSkge1xuICAgICAgZXhlY3V0ZShjYWxsYmFjayk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2dldEVsZW1lbnQoKS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQ1KTtcbiAgICB0aGlzLl9lbXVsYXRlQW5pbWF0aW9uKCgpID0+IHtcbiAgICAgIHRoaXMuZGlzcG9zZSgpO1xuICAgICAgZXhlY3V0ZShjYWxsYmFjayk7XG4gICAgfSk7XG4gIH1cbiAgZGlzcG9zZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzQXBwZW5kZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRURPV04pO1xuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlKCk7XG4gICAgdGhpcy5faXNBcHBlbmRlZCA9IGZhbHNlO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZ2V0RWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMuX2VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGJhY2tkcm9wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBiYWNrZHJvcC5jbGFzc05hbWUgPSB0aGlzLl9jb25maWcuY2xhc3NOYW1lO1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5pc0FuaW1hdGVkKSB7XG4gICAgICAgIGJhY2tkcm9wLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9GQURFJDQpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZWxlbWVudCA9IGJhY2tkcm9wO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudDtcbiAgfVxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICAvLyB1c2UgZ2V0RWxlbWVudCgpIHdpdGggdGhlIGRlZmF1bHQgXCJib2R5XCIgdG8gZ2V0IGEgZnJlc2ggRWxlbWVudCBvbiBlYWNoIGluc3RhbnRpYXRpb25cbiAgICBjb25maWcucm9vdEVsZW1lbnQgPSBnZXRFbGVtZW50KGNvbmZpZy5yb290RWxlbWVudCk7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfYXBwZW5kKCkge1xuICAgIGlmICh0aGlzLl9pc0FwcGVuZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9nZXRFbGVtZW50KCk7XG4gICAgdGhpcy5fY29uZmlnLnJvb3RFbGVtZW50LmFwcGVuZChlbGVtZW50KTtcbiAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOLCAoKSA9PiB7XG4gICAgICBleGVjdXRlKHRoaXMuX2NvbmZpZy5jbGlja0NhbGxiYWNrKTtcbiAgICB9KTtcbiAgICB0aGlzLl9pc0FwcGVuZGVkID0gdHJ1ZTtcbiAgfVxuICBfZW11bGF0ZUFuaW1hdGlvbihjYWxsYmFjaykge1xuICAgIGV4ZWN1dGVBZnRlclRyYW5zaXRpb24oY2FsbGJhY2ssIHRoaXMuX2dldEVsZW1lbnQoKSwgdGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQpO1xuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL2ZvY3VzdHJhcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDggPSAnZm9jdXN0cmFwJztcbmNvbnN0IERBVEFfS0VZJDUgPSAnYnMuZm9jdXN0cmFwJztcbmNvbnN0IEVWRU5UX0tFWSQ1ID0gYC4ke0RBVEFfS0VZJDV9YDtcbmNvbnN0IEVWRU5UX0ZPQ1VTSU4kMiA9IGBmb2N1c2luJHtFVkVOVF9LRVkkNX1gO1xuY29uc3QgRVZFTlRfS0VZRE9XTl9UQUIgPSBga2V5ZG93bi50YWIke0VWRU5UX0tFWSQ1fWA7XG5jb25zdCBUQUJfS0VZID0gJ1RhYic7XG5jb25zdCBUQUJfTkFWX0ZPUldBUkQgPSAnZm9yd2FyZCc7XG5jb25zdCBUQUJfTkFWX0JBQ0tXQVJEID0gJ2JhY2t3YXJkJztcbmNvbnN0IERlZmF1bHQkNyA9IHtcbiAgYXV0b2ZvY3VzOiB0cnVlLFxuICB0cmFwRWxlbWVudDogbnVsbCAvLyBUaGUgZWxlbWVudCB0byB0cmFwIGZvY3VzIGluc2lkZSBvZlxufTtcbmNvbnN0IERlZmF1bHRUeXBlJDcgPSB7XG4gIGF1dG9mb2N1czogJ2Jvb2xlYW4nLFxuICB0cmFwRWxlbWVudDogJ2VsZW1lbnQnXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBGb2N1c1RyYXAgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9IG51bGw7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQ3O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDc7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDg7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzQWN0aXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb25maWcuYXV0b2ZvY3VzKSB7XG4gICAgICB0aGlzLl9jb25maWcudHJhcEVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgRXZlbnRIYW5kbGVyLm9mZihkb2N1bWVudCwgRVZFTlRfS0VZJDUpOyAvLyBndWFyZCBhZ2FpbnN0IGluZmluaXRlIGZvY3VzIGxvb3BcbiAgICBFdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0ZPQ1VTSU4kMiwgZXZlbnQgPT4gdGhpcy5faGFuZGxlRm9jdXNpbihldmVudCkpO1xuICAgIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfS0VZRE9XTl9UQUIsIGV2ZW50ID0+IHRoaXMuX2hhbmRsZUtleWRvd24oZXZlbnQpKTtcbiAgICB0aGlzLl9pc0FjdGl2ZSA9IHRydWU7XG4gIH1cbiAgZGVhY3RpdmF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzQWN0aXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7XG4gICAgRXZlbnRIYW5kbGVyLm9mZihkb2N1bWVudCwgRVZFTlRfS0VZJDUpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfaGFuZGxlRm9jdXNpbihldmVudCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHRyYXBFbGVtZW50XG4gICAgfSA9IHRoaXMuX2NvbmZpZztcbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBkb2N1bWVudCB8fCBldmVudC50YXJnZXQgPT09IHRyYXBFbGVtZW50IHx8IHRyYXBFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudHMgPSBTZWxlY3RvckVuZ2luZS5mb2N1c2FibGVDaGlsZHJlbih0cmFwRWxlbWVudCk7XG4gICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdHJhcEVsZW1lbnQuZm9jdXMoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPT09IFRBQl9OQVZfQkFDS1dBUkQpIHtcbiAgICAgIGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdLmZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnRzWzBdLmZvY3VzKCk7XG4gICAgfVxuICB9XG4gIF9oYW5kbGVLZXlkb3duKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSAhPT0gVEFCX0tFWSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9sYXN0VGFiTmF2RGlyZWN0aW9uID0gZXZlbnQuc2hpZnRLZXkgPyBUQUJfTkFWX0JBQ0tXQVJEIDogVEFCX05BVl9GT1JXQVJEO1xuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL3Njcm9sbEJhci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBTRUxFQ1RPUl9GSVhFRF9DT05URU5UID0gJy5maXhlZC10b3AsIC5maXhlZC1ib3R0b20sIC5pcy1maXhlZCwgLnN0aWNreS10b3AnO1xuY29uc3QgU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQgPSAnLnN0aWNreS10b3AnO1xuY29uc3QgUFJPUEVSVFlfUEFERElORyA9ICdwYWRkaW5nLXJpZ2h0JztcbmNvbnN0IFBST1BFUlRZX01BUkdJTiA9ICdtYXJnaW4tcmlnaHQnO1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBTY3JvbGxCYXJIZWxwZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9lbGVtZW50ID0gZG9jdW1lbnQuYm9keTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBnZXRXaWR0aCgpIHtcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93L2lubmVyV2lkdGgjdXNhZ2Vfbm90ZXNcbiAgICBjb25zdCBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgIHJldHVybiBNYXRoLmFicyh3aW5kb3cuaW5uZXJXaWR0aCAtIGRvY3VtZW50V2lkdGgpO1xuICB9XG4gIGhpZGUoKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKCk7XG4gICAgdGhpcy5fZGlzYWJsZU92ZXJGbG93KCk7XG4gICAgLy8gZ2l2ZSBwYWRkaW5nIHRvIGVsZW1lbnQgdG8gYmFsYW5jZSB0aGUgaGlkZGVuIHNjcm9sbGJhciB3aWR0aFxuICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsIFBST1BFUlRZX1BBRERJTkcsIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgKyB3aWR0aCk7XG4gICAgLy8gdHJpY2s6IFdlIGFkanVzdCBwb3NpdGl2ZSBwYWRkaW5nUmlnaHQgYW5kIG5lZ2F0aXZlIG1hcmdpblJpZ2h0IHRvIHN0aWNreS10b3AgZWxlbWVudHMgdG8ga2VlcCBzaG93aW5nIGZ1bGx3aWR0aFxuICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQsIFBST1BFUlRZX1BBRERJTkcsIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgKyB3aWR0aCk7XG4gICAgdGhpcy5fc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQsIFBST1BFUlRZX01BUkdJTiwgY2FsY3VsYXRlZFZhbHVlID0+IGNhbGN1bGF0ZWRWYWx1ZSAtIHdpZHRoKTtcbiAgfVxuICByZXNldCgpIHtcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsICdvdmVyZmxvdycpO1xuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCwgUFJPUEVSVFlfUEFERElORyk7XG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9GSVhFRF9DT05URU5ULCBQUk9QRVJUWV9QQURESU5HKTtcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX1NUSUNLWV9DT05URU5ULCBQUk9QRVJUWV9NQVJHSU4pO1xuICB9XG4gIGlzT3ZlcmZsb3dpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0V2lkdGgoKSA+IDA7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9kaXNhYmxlT3ZlckZsb3coKSB7XG4gICAgdGhpcy5fc2F2ZUluaXRpYWxBdHRyaWJ1dGUodGhpcy5fZWxlbWVudCwgJ292ZXJmbG93Jyk7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICB9XG4gIF9zZXRFbGVtZW50QXR0cmlidXRlcyhzZWxlY3Rvciwgc3R5bGVQcm9wZXJ0eSwgY2FsbGJhY2spIHtcbiAgICBjb25zdCBzY3JvbGxiYXJXaWR0aCA9IHRoaXMuZ2V0V2lkdGgoKTtcbiAgICBjb25zdCBtYW5pcHVsYXRpb25DYWxsQmFjayA9IGVsZW1lbnQgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQgIT09IHRoaXMuX2VsZW1lbnQgJiYgd2luZG93LmlubmVyV2lkdGggPiBlbGVtZW50LmNsaWVudFdpZHRoICsgc2Nyb2xsYmFyV2lkdGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fc2F2ZUluaXRpYWxBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSk7XG4gICAgICBjb25zdCBjYWxjdWxhdGVkVmFsdWUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHN0eWxlUHJvcGVydHkpO1xuICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShzdHlsZVByb3BlcnR5LCBgJHtjYWxsYmFjayhOdW1iZXIucGFyc2VGbG9hdChjYWxjdWxhdGVkVmFsdWUpKX1weGApO1xuICAgIH07XG4gICAgdGhpcy5fYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgbWFuaXB1bGF0aW9uQ2FsbEJhY2spO1xuICB9XG4gIF9zYXZlSW5pdGlhbEF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KSB7XG4gICAgY29uc3QgYWN0dWFsVmFsdWUgPSBlbGVtZW50LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoc3R5bGVQcm9wZXJ0eSk7XG4gICAgaWYgKGFjdHVhbFZhbHVlKSB7XG4gICAgICBNYW5pcHVsYXRvci5zZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHksIGFjdHVhbFZhbHVlKTtcbiAgICB9XG4gIH1cbiAgX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoc2VsZWN0b3IsIHN0eWxlUHJvcGVydHkpIHtcbiAgICBjb25zdCBtYW5pcHVsYXRpb25DYWxsQmFjayA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHkpO1xuICAgICAgLy8gV2Ugb25seSB3YW50IHRvIHJlbW92ZSB0aGUgcHJvcGVydHkgaWYgdGhlIHZhbHVlIGlzIGBudWxsYDsgdGhlIHZhbHVlIGNhbiBhbHNvIGJlIHplcm9cbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICBlbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KHN0eWxlUHJvcGVydHkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBNYW5pcHVsYXRvci5yZW1vdmVEYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHkpO1xuICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShzdHlsZVByb3BlcnR5LCB2YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLl9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBtYW5pcHVsYXRpb25DYWxsQmFjayk7XG4gIH1cbiAgX2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2soc2VsZWN0b3IsIGNhbGxCYWNrKSB7XG4gICAgaWYgKGlzRWxlbWVudChzZWxlY3RvcikpIHtcbiAgICAgIGNhbGxCYWNrKHNlbGVjdG9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBzZWwgb2YgU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvciwgdGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIGNhbGxCYWNrKHNlbCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBtb2RhbC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDcgPSAnbW9kYWwnO1xuY29uc3QgREFUQV9LRVkkNCA9ICdicy5tb2RhbCc7XG5jb25zdCBFVkVOVF9LRVkkNCA9IGAuJHtEQVRBX0tFWSQ0fWA7XG5jb25zdCBEQVRBX0FQSV9LRVkkMiA9ICcuZGF0YS1hcGknO1xuY29uc3QgRVNDQVBFX0tFWSQxID0gJ0VzY2FwZSc7XG5jb25zdCBFVkVOVF9ISURFJDQgPSBgaGlkZSR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX0hJREVfUFJFVkVOVEVEJDEgPSBgaGlkZVByZXZlbnRlZCR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX0hJRERFTiQ0ID0gYGhpZGRlbiR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX1NIT1ckNCA9IGBzaG93JHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfU0hPV04kNCA9IGBzaG93biR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX1JFU0laRSQxID0gYHJlc2l6ZSR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX0NMSUNLX0RJU01JU1MgPSBgY2xpY2suZGlzbWlzcyR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX01PVVNFRE9XTl9ESVNNSVNTID0gYG1vdXNlZG93bi5kaXNtaXNzJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfS0VZRE9XTl9ESVNNSVNTJDEgPSBga2V5ZG93bi5kaXNtaXNzJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkMiA9IGBjbGljayR7RVZFTlRfS0VZJDR9JHtEQVRBX0FQSV9LRVkkMn1gO1xuY29uc3QgQ0xBU1NfTkFNRV9PUEVOID0gJ21vZGFsLW9wZW4nO1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFJDMgPSAnZmFkZSc7XG5jb25zdCBDTEFTU19OQU1FX1NIT1ckNCA9ICdzaG93JztcbmNvbnN0IENMQVNTX05BTUVfU1RBVElDID0gJ21vZGFsLXN0YXRpYyc7XG5jb25zdCBPUEVOX1NFTEVDVE9SJDEgPSAnLm1vZGFsLnNob3cnO1xuY29uc3QgU0VMRUNUT1JfRElBTE9HID0gJy5tb2RhbC1kaWFsb2cnO1xuY29uc3QgU0VMRUNUT1JfTU9EQUxfQk9EWSA9ICcubW9kYWwtYm9keSc7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQyID0gJ1tkYXRhLWJzLXRvZ2dsZT1cIm1vZGFsXCJdJztcbmNvbnN0IERlZmF1bHQkNiA9IHtcbiAgYmFja2Ryb3A6IHRydWUsXG4gIGZvY3VzOiB0cnVlLFxuICBrZXlib2FyZDogdHJ1ZVxufTtcbmNvbnN0IERlZmF1bHRUeXBlJDYgPSB7XG4gIGJhY2tkcm9wOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gIGZvY3VzOiAnYm9vbGVhbicsXG4gIGtleWJvYXJkOiAnYm9vbGVhbidcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIE1vZGFsIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG4gICAgdGhpcy5fZGlhbG9nID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9ESUFMT0csIHRoaXMuX2VsZW1lbnQpO1xuICAgIHRoaXMuX2JhY2tkcm9wID0gdGhpcy5faW5pdGlhbGl6ZUJhY2tEcm9wKCk7XG4gICAgdGhpcy5fZm9jdXN0cmFwID0gdGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpO1xuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZTtcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9zY3JvbGxCYXIgPSBuZXcgU2Nyb2xsQmFySGVscGVyKCk7XG4gICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDY7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkNjtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkNztcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUocmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3cocmVsYXRlZFRhcmdldCk7XG4gIH1cbiAgc2hvdyhyZWxhdGVkVGFyZ2V0KSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24gfHwgdGhpcy5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1ckNCwge1xuICAgICAgcmVsYXRlZFRhcmdldFxuICAgIH0pO1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pc1Nob3duID0gdHJ1ZTtcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgIHRoaXMuX3Njcm9sbEJhci5oaWRlKCk7XG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfT1BFTik7XG4gICAgdGhpcy5fYWRqdXN0RGlhbG9nKCk7XG4gICAgdGhpcy5fYmFja2Ryb3Auc2hvdygoKSA9PiB0aGlzLl9zaG93RWxlbWVudChyZWxhdGVkVGFyZ2V0KSk7XG4gIH1cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzU2hvd24gfHwgdGhpcy5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUkNCk7XG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZTtcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQ0KTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHRoaXMuX2hpZGVNb2RhbCgpLCB0aGlzLl9lbGVtZW50LCB0aGlzLl9pc0FuaW1hdGVkKCkpO1xuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgRXZlbnRIYW5kbGVyLm9mZih3aW5kb3csIEVWRU5UX0tFWSQ0KTtcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2RpYWxvZywgRVZFTlRfS0VZJDQpO1xuICAgIHRoaXMuX2JhY2tkcm9wLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpO1xuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuICBoYW5kbGVVcGRhdGUoKSB7XG4gICAgdGhpcy5fYWRqdXN0RGlhbG9nKCk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9pbml0aWFsaXplQmFja0Ryb3AoKSB7XG4gICAgcmV0dXJuIG5ldyBCYWNrZHJvcCh7XG4gICAgICBpc1Zpc2libGU6IEJvb2xlYW4odGhpcy5fY29uZmlnLmJhY2tkcm9wKSxcbiAgICAgIC8vICdzdGF0aWMnIG9wdGlvbiB3aWxsIGJlIHRyYW5zbGF0ZWQgdG8gdHJ1ZSwgYW5kIGJvb2xlYW5zIHdpbGwga2VlcCB0aGVpciB2YWx1ZSxcbiAgICAgIGlzQW5pbWF0ZWQ6IHRoaXMuX2lzQW5pbWF0ZWQoKVxuICAgIH0pO1xuICB9XG4gIF9pbml0aWFsaXplRm9jdXNUcmFwKCkge1xuICAgIHJldHVybiBuZXcgRm9jdXNUcmFwKHtcbiAgICAgIHRyYXBFbGVtZW50OiB0aGlzLl9lbGVtZW50XG4gICAgfSk7XG4gIH1cbiAgX3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAvLyB0cnkgdG8gYXBwZW5kIGR5bmFtaWMgbW9kYWxcbiAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnModGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKHRoaXMuX2VsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLW1vZGFsJywgdHJ1ZSk7XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnZGlhbG9nJyk7XG4gICAgdGhpcy5fZWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIGNvbnN0IG1vZGFsQm9keSA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfTU9EQUxfQk9EWSwgdGhpcy5fZGlhbG9nKTtcbiAgICBpZiAobW9kYWxCb2R5KSB7XG4gICAgICBtb2RhbEJvZHkuc2Nyb2xsVG9wID0gMDtcbiAgICB9XG4gICAgcmVmbG93KHRoaXMuX2VsZW1lbnQpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1ckNCk7XG4gICAgY29uc3QgdHJhbnNpdGlvbkNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5mb2N1cykge1xuICAgICAgICB0aGlzLl9mb2N1c3RyYXAuYWN0aXZhdGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04kNCwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2sodHJhbnNpdGlvbkNvbXBsZXRlLCB0aGlzLl9kaWFsb2csIHRoaXMuX2lzQW5pbWF0ZWQoKSk7XG4gIH1cbiAgX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOX0RJU01JU1MkMSwgZXZlbnQgPT4ge1xuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gRVNDQVBFX0tFWSQxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jb25maWcua2V5Ym9hcmQpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24oKTtcbiAgICB9KTtcbiAgICBFdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9SRVNJWkUkMSwgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzU2hvd24gJiYgIXRoaXMuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgICB0aGlzLl9hZGp1c3REaWFsb2coKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOX0RJU01JU1MsIGV2ZW50ID0+IHtcbiAgICAgIC8vIGEgYmFkIHRyaWNrIHRvIHNlZ3JlZ2F0ZSBjbGlja3MgdGhhdCBtYXkgc3RhcnQgaW5zaWRlIGRpYWxvZyBidXQgZW5kIG91dHNpZGUsIGFuZCBhdm9pZCBsaXN0ZW4gdG8gc2Nyb2xsYmFyIGNsaWNrc1xuICAgICAgRXZlbnRIYW5kbGVyLm9uZSh0aGlzLl9lbGVtZW50LCBFVkVOVF9DTElDS19ESVNNSVNTLCBldmVudDIgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZWxlbWVudCAhPT0gZXZlbnQudGFyZ2V0IHx8IHRoaXMuX2VsZW1lbnQgIT09IGV2ZW50Mi50YXJnZXQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgICB0aGlzLl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuYmFja2Ryb3ApIHtcbiAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgX2hpZGVNb2RhbCgpIHtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgdHJ1ZSk7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnKTtcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgncm9sZScpO1xuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX2JhY2tkcm9wLmhpZGUoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfT1BFTik7XG4gICAgICB0aGlzLl9yZXNldEFkanVzdG1lbnRzKCk7XG4gICAgICB0aGlzLl9zY3JvbGxCYXIucmVzZXQoKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTiQ0KTtcbiAgICB9KTtcbiAgfVxuICBfaXNBbmltYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFJDMpO1xuICB9XG4gIF90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKCkge1xuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREVfUFJFVkVOVEVEJDEpO1xuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc01vZGFsT3ZlcmZsb3dpbmcgPSB0aGlzLl9lbGVtZW50LnNjcm9sbEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgY29uc3QgaW5pdGlhbE92ZXJmbG93WSA9IHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3dZO1xuICAgIC8vIHJldHVybiBpZiB0aGUgZm9sbG93aW5nIGJhY2tncm91bmQgdHJhbnNpdGlvbiBoYXNuJ3QgeWV0IGNvbXBsZXRlZFxuICAgIGlmIChpbml0aWFsT3ZlcmZsb3dZID09PSAnaGlkZGVuJyB8fCB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NUQVRJQykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3dZID0gJ2hpZGRlbic7XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NUQVRJQyk7XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TVEFUSUMpO1xuICAgICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3dZID0gaW5pdGlhbE92ZXJmbG93WTtcbiAgICAgIH0sIHRoaXMuX2RpYWxvZyk7XG4gICAgfSwgdGhpcy5fZGlhbG9nKTtcbiAgICB0aGlzLl9lbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIGhhbmRsZSBvdmVyZmxvd2luZyBtb2RhbHNcbiAgICovXG5cbiAgX2FkanVzdERpYWxvZygpIHtcbiAgICBjb25zdCBpc01vZGFsT3ZlcmZsb3dpbmcgPSB0aGlzLl9lbGVtZW50LnNjcm9sbEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgY29uc3Qgc2Nyb2xsYmFyV2lkdGggPSB0aGlzLl9zY3JvbGxCYXIuZ2V0V2lkdGgoKTtcbiAgICBjb25zdCBpc0JvZHlPdmVyZmxvd2luZyA9IHNjcm9sbGJhcldpZHRoID4gMDtcbiAgICBpZiAoaXNCb2R5T3ZlcmZsb3dpbmcgJiYgIWlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBpc1JUTCgpID8gJ3BhZGRpbmdMZWZ0JyA6ICdwYWRkaW5nUmlnaHQnO1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtwcm9wZXJ0eV0gPSBgJHtzY3JvbGxiYXJXaWR0aH1weGA7XG4gICAgfVxuICAgIGlmICghaXNCb2R5T3ZlcmZsb3dpbmcgJiYgaXNNb2RhbE92ZXJmbG93aW5nKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IGlzUlRMKCkgPyAncGFkZGluZ1JpZ2h0JyA6ICdwYWRkaW5nTGVmdCc7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW3Byb3BlcnR5XSA9IGAke3Njcm9sbGJhcldpZHRofXB4YDtcbiAgICB9XG4gIH1cbiAgX3Jlc2V0QWRqdXN0bWVudHMoKSB7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nTGVmdCA9ICcnO1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gJyc7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcsIHJlbGF0ZWRUYXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBNb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10ocmVsYXRlZFRhcmdldCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkMiwgU0VMRUNUT1JfREFUQV9UT0dHTEUkMiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcyk7XG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG4gIEV2ZW50SGFuZGxlci5vbmUodGFyZ2V0LCBFVkVOVF9TSE9XJDQsIHNob3dFdmVudCA9PiB7XG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAvLyBvbmx5IHJlZ2lzdGVyIGZvY3VzIHJlc3RvcmVyIGlmIG1vZGFsIHdpbGwgYWN0dWFsbHkgZ2V0IHNob3duXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIEV2ZW50SGFuZGxlci5vbmUodGFyZ2V0LCBFVkVOVF9ISURERU4kNCwgKCkgPT4ge1xuICAgICAgaWYgKGlzVmlzaWJsZSh0aGlzKSkge1xuICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIGF2b2lkIGNvbmZsaWN0IHdoZW4gY2xpY2tpbmcgbW9kYWwgdG9nZ2xlciB3aGlsZSBhbm90aGVyIG9uZSBpcyBvcGVuXG4gIGNvbnN0IGFscmVhZHlPcGVuID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShPUEVOX1NFTEVDVE9SJDEpO1xuICBpZiAoYWxyZWFkeU9wZW4pIHtcbiAgICBNb2RhbC5nZXRJbnN0YW5jZShhbHJlYWR5T3BlbikuaGlkZSgpO1xuICB9XG4gIGNvbnN0IGRhdGEgPSBNb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldCk7XG4gIGRhdGEudG9nZ2xlKHRoaXMpO1xufSk7XG5lbmFibGVEaXNtaXNzVHJpZ2dlcihNb2RhbCk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKE1vZGFsKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIG9mZmNhbnZhcy5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDYgPSAnb2ZmY2FudmFzJztcbmNvbnN0IERBVEFfS0VZJDMgPSAnYnMub2ZmY2FudmFzJztcbmNvbnN0IEVWRU5UX0tFWSQzID0gYC4ke0RBVEFfS0VZJDN9YDtcbmNvbnN0IERBVEFfQVBJX0tFWSQxID0gJy5kYXRhLWFwaSc7XG5jb25zdCBFVkVOVF9MT0FEX0RBVEFfQVBJJDIgPSBgbG9hZCR7RVZFTlRfS0VZJDN9JHtEQVRBX0FQSV9LRVkkMX1gO1xuY29uc3QgRVNDQVBFX0tFWSA9ICdFc2NhcGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDMgPSAnc2hvdyc7XG5jb25zdCBDTEFTU19OQU1FX1NIT1dJTkckMSA9ICdzaG93aW5nJztcbmNvbnN0IENMQVNTX05BTUVfSElESU5HID0gJ2hpZGluZyc7XG5jb25zdCBDTEFTU19OQU1FX0JBQ0tEUk9QID0gJ29mZmNhbnZhcy1iYWNrZHJvcCc7XG5jb25zdCBPUEVOX1NFTEVDVE9SID0gJy5vZmZjYW52YXMuc2hvdyc7XG5jb25zdCBFVkVOVF9TSE9XJDMgPSBgc2hvdyR7RVZFTlRfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX1NIT1dOJDMgPSBgc2hvd24ke0VWRU5UX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9ISURFJDMgPSBgaGlkZSR7RVZFTlRfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX0hJREVfUFJFVkVOVEVEID0gYGhpZGVQcmV2ZW50ZWQke0VWRU5UX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9ISURERU4kMyA9IGBoaWRkZW4ke0VWRU5UX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9SRVNJWkUgPSBgcmVzaXplJHtFVkVOVF9LRVkkM31gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkMSA9IGBjbGljayR7RVZFTlRfS0VZJDN9JHtEQVRBX0FQSV9LRVkkMX1gO1xuY29uc3QgRVZFTlRfS0VZRE9XTl9ESVNNSVNTID0gYGtleWRvd24uZGlzbWlzcyR7RVZFTlRfS0VZJDN9YDtcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFJDEgPSAnW2RhdGEtYnMtdG9nZ2xlPVwib2ZmY2FudmFzXCJdJztcbmNvbnN0IERlZmF1bHQkNSA9IHtcbiAgYmFja2Ryb3A6IHRydWUsXG4gIGtleWJvYXJkOiB0cnVlLFxuICBzY3JvbGw6IGZhbHNlXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkNSA9IHtcbiAgYmFja2Ryb3A6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAga2V5Ym9hcmQ6ICdib29sZWFuJyxcbiAgc2Nyb2xsOiAnYm9vbGVhbidcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIE9mZmNhbnZhcyBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZTtcbiAgICB0aGlzLl9iYWNrZHJvcCA9IHRoaXMuX2luaXRpYWxpemVCYWNrRHJvcCgpO1xuICAgIHRoaXMuX2ZvY3VzdHJhcCA9IHRoaXMuX2luaXRpYWxpemVGb2N1c1RyYXAoKTtcbiAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkNTtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQ1O1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQ2O1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHRvZ2dsZShyZWxhdGVkVGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2hvd24gPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdyhyZWxhdGVkVGFyZ2V0KTtcbiAgfVxuICBzaG93KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICBpZiAodGhpcy5faXNTaG93bikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XJDMsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXRcbiAgICB9KTtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faXNTaG93biA9IHRydWU7XG4gICAgdGhpcy5fYmFja2Ryb3Auc2hvdygpO1xuICAgIGlmICghdGhpcy5fY29uZmlnLnNjcm9sbCkge1xuICAgICAgbmV3IFNjcm9sbEJhckhlbHBlcigpLmhpZGUoKTtcbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnLCB0cnVlKTtcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdkaWFsb2cnKTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XSU5HJDEpO1xuICAgIGNvbnN0IGNvbXBsZXRlQ2FsbEJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2NvbmZpZy5zY3JvbGwgfHwgdGhpcy5fY29uZmlnLmJhY2tkcm9wKSB7XG4gICAgICAgIHRoaXMuX2ZvY3VzdHJhcC5hY3RpdmF0ZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyQzKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1dJTkckMSk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTiQzLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXRcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZUNhbGxCYWNrLCB0aGlzLl9lbGVtZW50LCB0cnVlKTtcbiAgfVxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5faXNTaG93bikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFJDMpO1xuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpO1xuICAgIHRoaXMuX2VsZW1lbnQuYmx1cigpO1xuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9ISURJTkcpO1xuICAgIHRoaXMuX2JhY2tkcm9wLmhpZGUoKTtcbiAgICBjb25zdCBjb21wbGV0ZUNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQzLCBDTEFTU19OQU1FX0hJRElORyk7XG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcpO1xuICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3JvbGUnKTtcbiAgICAgIGlmICghdGhpcy5fY29uZmlnLnNjcm9sbCkge1xuICAgICAgICBuZXcgU2Nyb2xsQmFySGVscGVyKCkucmVzZXQoKTtcbiAgICAgIH1cbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTiQzKTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGVDYWxsYmFjaywgdGhpcy5fZWxlbWVudCwgdHJ1ZSk7XG4gIH1cbiAgZGlzcG9zZSgpIHtcbiAgICB0aGlzLl9iYWNrZHJvcC5kaXNwb3NlKCk7XG4gICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKTtcbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9pbml0aWFsaXplQmFja0Ryb3AoKSB7XG4gICAgY29uc3QgY2xpY2tDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jb25maWcuYmFja2Ryb3AgPT09ICdzdGF0aWMnKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREVfUFJFVkVOVEVEKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfTtcblxuICAgIC8vICdzdGF0aWMnIG9wdGlvbiB3aWxsIGJlIHRyYW5zbGF0ZWQgdG8gdHJ1ZSwgYW5kIGJvb2xlYW5zIHdpbGwga2VlcCB0aGVpciB2YWx1ZVxuICAgIGNvbnN0IGlzVmlzaWJsZSA9IEJvb2xlYW4odGhpcy5fY29uZmlnLmJhY2tkcm9wKTtcbiAgICByZXR1cm4gbmV3IEJhY2tkcm9wKHtcbiAgICAgIGNsYXNzTmFtZTogQ0xBU1NfTkFNRV9CQUNLRFJPUCxcbiAgICAgIGlzVmlzaWJsZSxcbiAgICAgIGlzQW5pbWF0ZWQ6IHRydWUsXG4gICAgICByb290RWxlbWVudDogdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLFxuICAgICAgY2xpY2tDYWxsYmFjazogaXNWaXNpYmxlID8gY2xpY2tDYWxsYmFjayA6IG51bGxcbiAgICB9KTtcbiAgfVxuICBfaW5pdGlhbGl6ZUZvY3VzVHJhcCgpIHtcbiAgICByZXR1cm4gbmV3IEZvY3VzVHJhcCh7XG4gICAgICB0cmFwRWxlbWVudDogdGhpcy5fZWxlbWVudFxuICAgIH0pO1xuICB9XG4gIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTl9ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSBFU0NBUEVfS0VZKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jb25maWcua2V5Ym9hcmQpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREVfUFJFVkVOVEVEKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10odGhpcyk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkMSwgU0VMRUNUT1JfREFUQV9UT0dHTEUkMSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcyk7XG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG4gIGlmIChpc0Rpc2FibGVkKHRoaXMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIEV2ZW50SGFuZGxlci5vbmUodGFyZ2V0LCBFVkVOVF9ISURERU4kMywgKCkgPT4ge1xuICAgIC8vIGZvY3VzIG9uIHRyaWdnZXIgd2hlbiBpdCBpcyBjbG9zZWRcbiAgICBpZiAoaXNWaXNpYmxlKHRoaXMpKSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBhdm9pZCBjb25mbGljdCB3aGVuIGNsaWNraW5nIGEgdG9nZ2xlciBvZiBhbiBvZmZjYW52YXMsIHdoaWxlIGFub3RoZXIgaXMgb3BlblxuICBjb25zdCBhbHJlYWR5T3BlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoT1BFTl9TRUxFQ1RPUik7XG4gIGlmIChhbHJlYWR5T3BlbiAmJiBhbHJlYWR5T3BlbiAhPT0gdGFyZ2V0KSB7XG4gICAgT2ZmY2FudmFzLmdldEluc3RhbmNlKGFscmVhZHlPcGVuKS5oaWRlKCk7XG4gIH1cbiAgY29uc3QgZGF0YSA9IE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldCk7XG4gIGRhdGEudG9nZ2xlKHRoaXMpO1xufSk7XG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9MT0FEX0RBVEFfQVBJJDIsICgpID0+IHtcbiAgZm9yIChjb25zdCBzZWxlY3RvciBvZiBTZWxlY3RvckVuZ2luZS5maW5kKE9QRU5fU0VMRUNUT1IpKSB7XG4gICAgT2ZmY2FudmFzLmdldE9yQ3JlYXRlSW5zdGFuY2Uoc2VsZWN0b3IpLnNob3coKTtcbiAgfVxufSk7XG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9SRVNJWkUsICgpID0+IHtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoJ1thcmlhLW1vZGFsXVtjbGFzcyo9c2hvd11bY2xhc3MqPW9mZmNhbnZhcy1dJykpIHtcbiAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiAhPT0gJ2ZpeGVkJykge1xuICAgICAgT2ZmY2FudmFzLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCkuaGlkZSgpO1xuICAgIH1cbiAgfVxufSk7XG5lbmFibGVEaXNtaXNzVHJpZ2dlcihPZmZjYW52YXMpO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihPZmZjYW52YXMpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9zYW5pdGl6ZXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG4vLyBqcy1kb2NzLXN0YXJ0IGFsbG93LWxpc3RcbmNvbnN0IEFSSUFfQVRUUklCVVRFX1BBVFRFUk4gPSAvXmFyaWEtW1xcdy1dKiQvaTtcbmNvbnN0IERlZmF1bHRBbGxvd2xpc3QgPSB7XG4gIC8vIEdsb2JhbCBhdHRyaWJ1dGVzIGFsbG93ZWQgb24gYW55IHN1cHBsaWVkIGVsZW1lbnQgYmVsb3cuXG4gICcqJzogWydjbGFzcycsICdkaXInLCAnaWQnLCAnbGFuZycsICdyb2xlJywgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTl0sXG4gIGE6IFsndGFyZ2V0JywgJ2hyZWYnLCAndGl0bGUnLCAncmVsJ10sXG4gIGFyZWE6IFtdLFxuICBiOiBbXSxcbiAgYnI6IFtdLFxuICBjb2w6IFtdLFxuICBjb2RlOiBbXSxcbiAgZGQ6IFtdLFxuICBkaXY6IFtdLFxuICBkbDogW10sXG4gIGR0OiBbXSxcbiAgZW06IFtdLFxuICBocjogW10sXG4gIGgxOiBbXSxcbiAgaDI6IFtdLFxuICBoMzogW10sXG4gIGg0OiBbXSxcbiAgaDU6IFtdLFxuICBoNjogW10sXG4gIGk6IFtdLFxuICBpbWc6IFsnc3JjJywgJ3NyY3NldCcsICdhbHQnLCAndGl0bGUnLCAnd2lkdGgnLCAnaGVpZ2h0J10sXG4gIGxpOiBbXSxcbiAgb2w6IFtdLFxuICBwOiBbXSxcbiAgcHJlOiBbXSxcbiAgczogW10sXG4gIHNtYWxsOiBbXSxcbiAgc3BhbjogW10sXG4gIHN1YjogW10sXG4gIHN1cDogW10sXG4gIHN0cm9uZzogW10sXG4gIHU6IFtdLFxuICB1bDogW11cbn07XG4vLyBqcy1kb2NzLWVuZCBhbGxvdy1saXN0XG5cbmNvbnN0IHVyaUF0dHJpYnV0ZXMgPSBuZXcgU2V0KFsnYmFja2dyb3VuZCcsICdjaXRlJywgJ2hyZWYnLCAnaXRlbXR5cGUnLCAnbG9uZ2Rlc2MnLCAncG9zdGVyJywgJ3NyYycsICd4bGluazpocmVmJ10pO1xuXG4vKipcbiAqIEEgcGF0dGVybiB0aGF0IHJlY29nbml6ZXMgVVJMcyB0aGF0IGFyZSBzYWZlIHdydC4gWFNTIGluIFVSTCBuYXZpZ2F0aW9uXG4gKiBjb250ZXh0cy5cbiAqXG4gKiBTaG91dC1vdXQgdG8gQW5ndWxhciBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvMTUuMi44L3BhY2thZ2VzL2NvcmUvc3JjL3Nhbml0aXphdGlvbi91cmxfc2FuaXRpemVyLnRzI0wzOFxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9iZXR0ZXItcmVnZXhcbmNvbnN0IFNBRkVfVVJMX1BBVFRFUk4gPSAvXig/IWphdmFzY3JpcHQ6KSg/OlthLXowLTkrLi1dKzp8W14mOi8/I10qKD86Wy8/I118JCkpL2k7XG5jb25zdCBhbGxvd2VkQXR0cmlidXRlID0gKGF0dHJpYnV0ZSwgYWxsb3dlZEF0dHJpYnV0ZUxpc3QpID0+IHtcbiAgY29uc3QgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoYWxsb3dlZEF0dHJpYnV0ZUxpc3QuaW5jbHVkZXMoYXR0cmlidXRlTmFtZSkpIHtcbiAgICBpZiAodXJpQXR0cmlidXRlcy5oYXMoYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgIHJldHVybiBCb29sZWFuKFNBRkVfVVJMX1BBVFRFUk4udGVzdChhdHRyaWJ1dGUubm9kZVZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgYSByZWd1bGFyIGV4cHJlc3Npb24gdmFsaWRhdGVzIHRoZSBhdHRyaWJ1dGUuXG4gIHJldHVybiBhbGxvd2VkQXR0cmlidXRlTGlzdC5maWx0ZXIoYXR0cmlidXRlUmVnZXggPT4gYXR0cmlidXRlUmVnZXggaW5zdGFuY2VvZiBSZWdFeHApLnNvbWUocmVnZXggPT4gcmVnZXgudGVzdChhdHRyaWJ1dGVOYW1lKSk7XG59O1xuZnVuY3Rpb24gc2FuaXRpemVIdG1sKHVuc2FmZUh0bWwsIGFsbG93TGlzdCwgc2FuaXRpemVGdW5jdGlvbikge1xuICBpZiAoIXVuc2FmZUh0bWwubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc2FmZUh0bWw7XG4gIH1cbiAgaWYgKHNhbml0aXplRnVuY3Rpb24gJiYgdHlwZW9mIHNhbml0aXplRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gc2FuaXRpemVGdW5jdGlvbih1bnNhZmVIdG1sKTtcbiAgfVxuICBjb25zdCBkb21QYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuICBjb25zdCBjcmVhdGVkRG9jdW1lbnQgPSBkb21QYXJzZXIucGFyc2VGcm9tU3RyaW5nKHVuc2FmZUh0bWwsICd0ZXh0L2h0bWwnKTtcbiAgY29uc3QgZWxlbWVudHMgPSBbXS5jb25jYXQoLi4uY3JlYXRlZERvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbCgnKicpKTtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgY29uc3QgZWxlbWVudE5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCFPYmplY3Qua2V5cyhhbGxvd0xpc3QpLmluY2x1ZGVzKGVsZW1lbnROYW1lKSkge1xuICAgICAgZWxlbWVudC5yZW1vdmUoKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBhdHRyaWJ1dGVMaXN0ID0gW10uY29uY2F0KC4uLmVsZW1lbnQuYXR0cmlidXRlcyk7XG4gICAgY29uc3QgYWxsb3dlZEF0dHJpYnV0ZXMgPSBbXS5jb25jYXQoYWxsb3dMaXN0WycqJ10gfHwgW10sIGFsbG93TGlzdFtlbGVtZW50TmFtZV0gfHwgW10pO1xuICAgIGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZUxpc3QpIHtcbiAgICAgIGlmICghYWxsb3dlZEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGFsbG93ZWRBdHRyaWJ1dGVzKSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUubm9kZU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlZERvY3VtZW50LmJvZHkuaW5uZXJIVE1MO1xufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC90ZW1wbGF0ZS1mYWN0b3J5LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkNSA9ICdUZW1wbGF0ZUZhY3RvcnknO1xuY29uc3QgRGVmYXVsdCQ0ID0ge1xuICBhbGxvd0xpc3Q6IERlZmF1bHRBbGxvd2xpc3QsXG4gIGNvbnRlbnQ6IHt9LFxuICAvLyB7IHNlbGVjdG9yIDogdGV4dCAsICBzZWxlY3RvcjIgOiB0ZXh0MiAsIH1cbiAgZXh0cmFDbGFzczogJycsXG4gIGh0bWw6IGZhbHNlLFxuICBzYW5pdGl6ZTogdHJ1ZSxcbiAgc2FuaXRpemVGbjogbnVsbCxcbiAgdGVtcGxhdGU6ICc8ZGl2PjwvZGl2Pidcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQ0ID0ge1xuICBhbGxvd0xpc3Q6ICdvYmplY3QnLFxuICBjb250ZW50OiAnb2JqZWN0JyxcbiAgZXh0cmFDbGFzczogJyhzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgaHRtbDogJ2Jvb2xlYW4nLFxuICBzYW5pdGl6ZTogJ2Jvb2xlYW4nLFxuICBzYW5pdGl6ZUZuOiAnKG51bGx8ZnVuY3Rpb24pJyxcbiAgdGVtcGxhdGU6ICdzdHJpbmcnXG59O1xuY29uc3QgRGVmYXVsdENvbnRlbnRUeXBlID0ge1xuICBlbnRyeTogJyhzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbnxudWxsKScsXG4gIHNlbGVjdG9yOiAnKHN0cmluZ3xlbGVtZW50KSdcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFRlbXBsYXRlRmFjdG9yeSBleHRlbmRzIENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQ0O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDQ7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDU7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgZ2V0Q29udGVudCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9jb25maWcuY29udGVudCkubWFwKGNvbmZpZyA9PiB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbihjb25maWcpKS5maWx0ZXIoQm9vbGVhbik7XG4gIH1cbiAgaGFzQ29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb250ZW50KCkubGVuZ3RoID4gMDtcbiAgfVxuICBjaGFuZ2VDb250ZW50KGNvbnRlbnQpIHtcbiAgICB0aGlzLl9jaGVja0NvbnRlbnQoY29udGVudCk7XG4gICAgdGhpcy5fY29uZmlnLmNvbnRlbnQgPSB7XG4gICAgICAuLi50aGlzLl9jb25maWcuY29udGVudCxcbiAgICAgIC4uLmNvbnRlbnRcbiAgICB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHRvSHRtbCgpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZVdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0ZW1wbGF0ZVdyYXBwZXIuaW5uZXJIVE1MID0gdGhpcy5fbWF5YmVTYW5pdGl6ZSh0aGlzLl9jb25maWcudGVtcGxhdGUpO1xuICAgIGZvciAoY29uc3QgW3NlbGVjdG9yLCB0ZXh0XSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9jb25maWcuY29udGVudCkpIHtcbiAgICAgIHRoaXMuX3NldENvbnRlbnQodGVtcGxhdGVXcmFwcGVyLCB0ZXh0LCBzZWxlY3Rvcik7XG4gICAgfVxuICAgIGNvbnN0IHRlbXBsYXRlID0gdGVtcGxhdGVXcmFwcGVyLmNoaWxkcmVuWzBdO1xuICAgIGNvbnN0IGV4dHJhQ2xhc3MgPSB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0aGlzLl9jb25maWcuZXh0cmFDbGFzcyk7XG4gICAgaWYgKGV4dHJhQ2xhc3MpIHtcbiAgICAgIHRlbXBsYXRlLmNsYXNzTGlzdC5hZGQoLi4uZXh0cmFDbGFzcy5zcGxpdCgnICcpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfdHlwZUNoZWNrQ29uZmlnKGNvbmZpZykge1xuICAgIHN1cGVyLl90eXBlQ2hlY2tDb25maWcoY29uZmlnKTtcbiAgICB0aGlzLl9jaGVja0NvbnRlbnQoY29uZmlnLmNvbnRlbnQpO1xuICB9XG4gIF9jaGVja0NvbnRlbnQoYXJnKSB7XG4gICAgZm9yIChjb25zdCBbc2VsZWN0b3IsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKGFyZykpIHtcbiAgICAgIHN1cGVyLl90eXBlQ2hlY2tDb25maWcoe1xuICAgICAgICBzZWxlY3RvcixcbiAgICAgICAgZW50cnk6IGNvbnRlbnRcbiAgICAgIH0sIERlZmF1bHRDb250ZW50VHlwZSk7XG4gICAgfVxuICB9XG4gIF9zZXRDb250ZW50KHRlbXBsYXRlLCBjb250ZW50LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHRlbXBsYXRlRWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IsIHRlbXBsYXRlKTtcbiAgICBpZiAoIXRlbXBsYXRlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb250ZW50ID0gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24oY29udGVudCk7XG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICB0ZW1wbGF0ZUVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQoY29udGVudCkpIHtcbiAgICAgIHRoaXMuX3B1dEVsZW1lbnRJblRlbXBsYXRlKGdldEVsZW1lbnQoY29udGVudCksIHRlbXBsYXRlRWxlbWVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb25maWcuaHRtbCkge1xuICAgICAgdGVtcGxhdGVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMuX21heWJlU2FuaXRpemUoY29udGVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRlbXBsYXRlRWxlbWVudC50ZXh0Q29udGVudCA9IGNvbnRlbnQ7XG4gIH1cbiAgX21heWJlU2FuaXRpemUoYXJnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5zYW5pdGl6ZSA/IHNhbml0aXplSHRtbChhcmcsIHRoaXMuX2NvbmZpZy5hbGxvd0xpc3QsIHRoaXMuX2NvbmZpZy5zYW5pdGl6ZUZuKSA6IGFyZztcbiAgfVxuICBfcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGV4ZWN1dGUoYXJnLCBbdGhpc10pO1xuICB9XG4gIF9wdXRFbGVtZW50SW5UZW1wbGF0ZShlbGVtZW50LCB0ZW1wbGF0ZUVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5fY29uZmlnLmh0bWwpIHtcbiAgICAgIHRlbXBsYXRlRWxlbWVudC5pbm5lckhUTUwgPSAnJztcbiAgICAgIHRlbXBsYXRlRWxlbWVudC5hcHBlbmQoZWxlbWVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRlbXBsYXRlRWxlbWVudC50ZXh0Q29udGVudCA9IGVsZW1lbnQudGV4dENvbnRlbnQ7XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHRvb2x0aXAuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQ0ID0gJ3Rvb2x0aXAnO1xuY29uc3QgRElTQUxMT1dFRF9BVFRSSUJVVEVTID0gbmV3IFNldChbJ3Nhbml0aXplJywgJ2FsbG93TGlzdCcsICdzYW5pdGl6ZUZuJ10pO1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFJDIgPSAnZmFkZSc7XG5jb25zdCBDTEFTU19OQU1FX01PREFMID0gJ21vZGFsJztcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQyID0gJ3Nob3cnO1xuY29uc3QgU0VMRUNUT1JfVE9PTFRJUF9JTk5FUiA9ICcudG9vbHRpcC1pbm5lcic7XG5jb25zdCBTRUxFQ1RPUl9NT0RBTCA9IGAuJHtDTEFTU19OQU1FX01PREFMfWA7XG5jb25zdCBFVkVOVF9NT0RBTF9ISURFID0gJ2hpZGUuYnMubW9kYWwnO1xuY29uc3QgVFJJR0dFUl9IT1ZFUiA9ICdob3Zlcic7XG5jb25zdCBUUklHR0VSX0ZPQ1VTID0gJ2ZvY3VzJztcbmNvbnN0IFRSSUdHRVJfQ0xJQ0sgPSAnY2xpY2snO1xuY29uc3QgVFJJR0dFUl9NQU5VQUwgPSAnbWFudWFsJztcbmNvbnN0IEVWRU5UX0hJREUkMiA9ICdoaWRlJztcbmNvbnN0IEVWRU5UX0hJRERFTiQyID0gJ2hpZGRlbic7XG5jb25zdCBFVkVOVF9TSE9XJDIgPSAnc2hvdyc7XG5jb25zdCBFVkVOVF9TSE9XTiQyID0gJ3Nob3duJztcbmNvbnN0IEVWRU5UX0lOU0VSVEVEID0gJ2luc2VydGVkJztcbmNvbnN0IEVWRU5UX0NMSUNLJDEgPSAnY2xpY2snO1xuY29uc3QgRVZFTlRfRk9DVVNJTiQxID0gJ2ZvY3VzaW4nO1xuY29uc3QgRVZFTlRfRk9DVVNPVVQkMSA9ICdmb2N1c291dCc7XG5jb25zdCBFVkVOVF9NT1VTRUVOVEVSID0gJ21vdXNlZW50ZXInO1xuY29uc3QgRVZFTlRfTU9VU0VMRUFWRSA9ICdtb3VzZWxlYXZlJztcbmNvbnN0IEF0dGFjaG1lbnRNYXAgPSB7XG4gIEFVVE86ICdhdXRvJyxcbiAgVE9QOiAndG9wJyxcbiAgUklHSFQ6IGlzUlRMKCkgPyAnbGVmdCcgOiAncmlnaHQnLFxuICBCT1RUT006ICdib3R0b20nLFxuICBMRUZUOiBpc1JUTCgpID8gJ3JpZ2h0JyA6ICdsZWZ0J1xufTtcbmNvbnN0IERlZmF1bHQkMyA9IHtcbiAgYWxsb3dMaXN0OiBEZWZhdWx0QWxsb3dsaXN0LFxuICBhbmltYXRpb246IHRydWUsXG4gIGJvdW5kYXJ5OiAnY2xpcHBpbmdQYXJlbnRzJyxcbiAgY29udGFpbmVyOiBmYWxzZSxcbiAgY3VzdG9tQ2xhc3M6ICcnLFxuICBkZWxheTogMCxcbiAgZmFsbGJhY2tQbGFjZW1lbnRzOiBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddLFxuICBodG1sOiBmYWxzZSxcbiAgb2Zmc2V0OiBbMCwgNl0sXG4gIHBsYWNlbWVudDogJ3RvcCcsXG4gIHBvcHBlckNvbmZpZzogbnVsbCxcbiAgc2FuaXRpemU6IHRydWUsXG4gIHNhbml0aXplRm46IG51bGwsXG4gIHNlbGVjdG9yOiBmYWxzZSxcbiAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwidG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCI+JyArICc8ZGl2IGNsYXNzPVwidG9vbHRpcC1hcnJvd1wiPjwvZGl2PicgKyAnPGRpdiBjbGFzcz1cInRvb2x0aXAtaW5uZXJcIj48L2Rpdj4nICsgJzwvZGl2PicsXG4gIHRpdGxlOiAnJyxcbiAgdHJpZ2dlcjogJ2hvdmVyIGZvY3VzJ1xufTtcbmNvbnN0IERlZmF1bHRUeXBlJDMgPSB7XG4gIGFsbG93TGlzdDogJ29iamVjdCcsXG4gIGFuaW1hdGlvbjogJ2Jvb2xlYW4nLFxuICBib3VuZGFyeTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICBjb250YWluZXI6ICcoc3RyaW5nfGVsZW1lbnR8Ym9vbGVhbiknLFxuICBjdXN0b21DbGFzczogJyhzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgZGVsYXk6ICcobnVtYmVyfG9iamVjdCknLFxuICBmYWxsYmFja1BsYWNlbWVudHM6ICdhcnJheScsXG4gIGh0bWw6ICdib29sZWFuJyxcbiAgb2Zmc2V0OiAnKGFycmF5fHN0cmluZ3xmdW5jdGlvbiknLFxuICBwbGFjZW1lbnQ6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gIHBvcHBlckNvbmZpZzogJyhudWxsfG9iamVjdHxmdW5jdGlvbiknLFxuICBzYW5pdGl6ZTogJ2Jvb2xlYW4nLFxuICBzYW5pdGl6ZUZuOiAnKG51bGx8ZnVuY3Rpb24pJyxcbiAgc2VsZWN0b3I6ICcoc3RyaW5nfGJvb2xlYW4pJyxcbiAgdGVtcGxhdGU6ICdzdHJpbmcnLFxuICB0aXRsZTogJyhzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbiknLFxuICB0cmlnZ2VyOiAnc3RyaW5nJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgVG9vbHRpcCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBpZiAodHlwZW9mIFBvcHBlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Jvb3RzdHJhcFxcJ3MgdG9vbHRpcHMgcmVxdWlyZSBQb3BwZXIgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZyknKTtcbiAgICB9XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcblxuICAgIC8vIFByaXZhdGVcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuX3RpbWVvdXQgPSAwO1xuICAgIHRoaXMuX2lzSG92ZXJlZCA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlciA9IHt9O1xuICAgIHRoaXMuX3BvcHBlciA9IG51bGw7XG4gICAgdGhpcy5fdGVtcGxhdGVGYWN0b3J5ID0gbnVsbDtcbiAgICB0aGlzLl9uZXdDb250ZW50ID0gbnVsbDtcblxuICAgIC8vIFByb3RlY3RlZFxuICAgIHRoaXMudGlwID0gbnVsbDtcbiAgICB0aGlzLl9zZXRMaXN0ZW5lcnMoKTtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5zZWxlY3Rvcikge1xuICAgICAgdGhpcy5fZml4VGl0bGUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQzO1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDM7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDQ7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgZW5hYmxlKCkge1xuICAgIHRoaXMuX2lzRW5hYmxlZCA9IHRydWU7XG4gIH1cbiAgZGlzYWJsZSgpIHtcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSBmYWxzZTtcbiAgfVxuICB0b2dnbGVFbmFibGVkKCkge1xuICAgIHRoaXMuX2lzRW5hYmxlZCA9ICF0aGlzLl9pc0VuYWJsZWQ7XG4gIH1cbiAgdG9nZ2xlKCkge1xuICAgIGlmICghdGhpcy5faXNFbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXIuY2xpY2sgPSAhdGhpcy5fYWN0aXZlVHJpZ2dlci5jbGljaztcbiAgICBpZiAodGhpcy5faXNTaG93bigpKSB7XG4gICAgICB0aGlzLl9sZWF2ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9lbnRlcigpO1xuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudC5jbG9zZXN0KFNFTEVDVE9SX01PREFMKSwgRVZFTlRfTU9EQUxfSElERSwgdGhpcy5faGlkZU1vZGFsSGFuZGxlcik7XG4gICAgaWYgKHRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLW9yaWdpbmFsLXRpdGxlJykpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCd0aXRsZScsIHRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLW9yaWdpbmFsLXRpdGxlJykpO1xuICAgIH1cbiAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKCk7XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICB9XG4gIHNob3coKSB7XG4gICAgaWYgKHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSB1c2Ugc2hvdyBvbiB2aXNpYmxlIGVsZW1lbnRzJyk7XG4gICAgfVxuICAgIGlmICghKHRoaXMuX2lzV2l0aENvbnRlbnQoKSAmJiB0aGlzLl9pc0VuYWJsZWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX1NIT1ckMikpO1xuICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBmaW5kU2hhZG93Um9vdCh0aGlzLl9lbGVtZW50KTtcbiAgICBjb25zdCBpc0luVGhlRG9tID0gKHNoYWRvd1Jvb3QgfHwgdGhpcy5fZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuY29udGFpbnModGhpcy5fZWxlbWVudCk7XG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkIHx8ICFpc0luVGhlRG9tKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVE9ETzogdjYgcmVtb3ZlIHRoaXMgb3IgbWFrZSBpdCBvcHRpb25hbFxuICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKTtcbiAgICBjb25zdCB0aXAgPSB0aGlzLl9nZXRUaXBFbGVtZW50KCk7XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCB0aXAuZ2V0QXR0cmlidXRlKCdpZCcpKTtcbiAgICBjb25zdCB7XG4gICAgICBjb250YWluZXJcbiAgICB9ID0gdGhpcy5fY29uZmlnO1xuICAgIGlmICghdGhpcy5fZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb250YWlucyh0aGlzLnRpcCkpIHtcbiAgICAgIGNvbnRhaW5lci5hcHBlbmQodGlwKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX0lOU0VSVEVEKSk7XG4gICAgfVxuICAgIHRoaXMuX3BvcHBlciA9IHRoaXMuX2NyZWF0ZVBvcHBlcih0aXApO1xuICAgIHRpcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyQyKTtcblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSBhZGQgZXh0cmFcbiAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHRvIHRoZSBib2R5J3MgaW1tZWRpYXRlIGNoaWxkcmVuO1xuICAgIC8vIG9ubHkgbmVlZGVkIGJlY2F1c2Ugb2YgYnJva2VuIGV2ZW50IGRlbGVnYXRpb24gb24gaU9TXG4gICAgLy8gaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDE0LzAyL21vdXNlX2V2ZW50X2J1Yi5odG1sXG4gICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKSkge1xuICAgICAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX1NIT1dOJDIpKTtcbiAgICAgIGlmICh0aGlzLl9pc0hvdmVyZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX2xlYXZlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9pc0hvdmVyZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMudGlwLCB0aGlzLl9pc0FuaW1hdGVkKCkpO1xuICB9XG4gIGhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfSElERSQyKSk7XG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRpcCA9IHRoaXMuX2dldFRpcEVsZW1lbnQoKTtcbiAgICB0aXAuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckMik7XG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgcmVtb3ZlIHRoZSBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgd2UgYWRkZWQgZm9yIGlPUyBzdXBwb3J0XG4gICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKSkge1xuICAgICAgICBFdmVudEhhbmRsZXIub2ZmKGVsZW1lbnQsICdtb3VzZW92ZXInLCBub29wKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlcltUUklHR0VSX0NMSUNLXSA9IGZhbHNlO1xuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9GT0NVU10gPSBmYWxzZTtcbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyW1RSSUdHRVJfSE9WRVJdID0gZmFsc2U7XG4gICAgdGhpcy5faXNIb3ZlcmVkID0gbnVsbDsgLy8gaXQgaXMgYSB0cmljayB0byBzdXBwb3J0IG1hbnVhbCB0cmlnZ2VyaW5nXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLl9pc0hvdmVyZWQpIHtcbiAgICAgICAgdGhpcy5fZGlzcG9zZVBvcHBlcigpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX0hJRERFTiQyKSk7XG4gICAgfTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLnRpcCwgdGhpcy5faXNBbmltYXRlZCgpKTtcbiAgfVxuICB1cGRhdGUoKSB7XG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLnVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFByb3RlY3RlZFxuICBfaXNXaXRoQ29udGVudCgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9nZXRUaXRsZSgpKTtcbiAgfVxuICBfZ2V0VGlwRWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMudGlwKSB7XG4gICAgICB0aGlzLnRpcCA9IHRoaXMuX2NyZWF0ZVRpcEVsZW1lbnQodGhpcy5fbmV3Q29udGVudCB8fCB0aGlzLl9nZXRDb250ZW50Rm9yVGVtcGxhdGUoKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRpcDtcbiAgfVxuICBfY3JlYXRlVGlwRWxlbWVudChjb250ZW50KSB7XG4gICAgY29uc3QgdGlwID0gdGhpcy5fZ2V0VGVtcGxhdGVGYWN0b3J5KGNvbnRlbnQpLnRvSHRtbCgpO1xuXG4gICAgLy8gVE9ETzogcmVtb3ZlIHRoaXMgY2hlY2sgaW4gdjZcbiAgICBpZiAoIXRpcCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRpcC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfRkFERSQyLCBDTEFTU19OQU1FX1NIT1ckMik7XG4gICAgLy8gVE9ETzogdjYgdGhlIGZvbGxvd2luZyBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBDU1Mgb25seVxuICAgIHRpcC5jbGFzc0xpc3QuYWRkKGBicy0ke3RoaXMuY29uc3RydWN0b3IuTkFNRX0tYXV0b2ApO1xuICAgIGNvbnN0IHRpcElkID0gZ2V0VUlEKHRoaXMuY29uc3RydWN0b3IuTkFNRSkudG9TdHJpbmcoKTtcbiAgICB0aXAuc2V0QXR0cmlidXRlKCdpZCcsIHRpcElkKTtcbiAgICBpZiAodGhpcy5faXNBbmltYXRlZCgpKSB7XG4gICAgICB0aXAuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0ZBREUkMik7XG4gICAgfVxuICAgIHJldHVybiB0aXA7XG4gIH1cbiAgc2V0Q29udGVudChjb250ZW50KSB7XG4gICAgdGhpcy5fbmV3Q29udGVudCA9IGNvbnRlbnQ7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgdGhpcy5fZGlzcG9zZVBvcHBlcigpO1xuICAgICAgdGhpcy5zaG93KCk7XG4gICAgfVxuICB9XG4gIF9nZXRUZW1wbGF0ZUZhY3RvcnkoY29udGVudCkge1xuICAgIGlmICh0aGlzLl90ZW1wbGF0ZUZhY3RvcnkpIHtcbiAgICAgIHRoaXMuX3RlbXBsYXRlRmFjdG9yeS5jaGFuZ2VDb250ZW50KGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl90ZW1wbGF0ZUZhY3RvcnkgPSBuZXcgVGVtcGxhdGVGYWN0b3J5KHtcbiAgICAgICAgLi4udGhpcy5fY29uZmlnLFxuICAgICAgICAvLyB0aGUgYGNvbnRlbnRgIHZhciBoYXMgdG8gYmUgYWZ0ZXIgYHRoaXMuX2NvbmZpZ2BcbiAgICAgICAgLy8gdG8gb3ZlcnJpZGUgY29uZmlnLmNvbnRlbnQgaW4gY2FzZSBvZiBwb3BvdmVyXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIGV4dHJhQ2xhc3M6IHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKHRoaXMuX2NvbmZpZy5jdXN0b21DbGFzcylcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGVGYWN0b3J5O1xuICB9XG4gIF9nZXRDb250ZW50Rm9yVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtTRUxFQ1RPUl9UT09MVElQX0lOTkVSXTogdGhpcy5fZ2V0VGl0bGUoKVxuICAgIH07XG4gIH1cbiAgX2dldFRpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0aGlzLl9jb25maWcudGl0bGUpIHx8IHRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLW9yaWdpbmFsLXRpdGxlJyk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQoZXZlbnQpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5nZXRPckNyZWF0ZUluc3RhbmNlKGV2ZW50LmRlbGVnYXRlVGFyZ2V0LCB0aGlzLl9nZXREZWxlZ2F0ZUNvbmZpZygpKTtcbiAgfVxuICBfaXNBbmltYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLmFuaW1hdGlvbiB8fCB0aGlzLnRpcCAmJiB0aGlzLnRpcC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFJDIpO1xuICB9XG4gIF9pc1Nob3duKCkge1xuICAgIHJldHVybiB0aGlzLnRpcCAmJiB0aGlzLnRpcC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TSE9XJDIpO1xuICB9XG4gIF9jcmVhdGVQb3BwZXIodGlwKSB7XG4gICAgY29uc3QgcGxhY2VtZW50ID0gZXhlY3V0ZSh0aGlzLl9jb25maWcucGxhY2VtZW50LCBbdGhpcywgdGlwLCB0aGlzLl9lbGVtZW50XSk7XG4gICAgY29uc3QgYXR0YWNobWVudCA9IEF0dGFjaG1lbnRNYXBbcGxhY2VtZW50LnRvVXBwZXJDYXNlKCldO1xuICAgIHJldHVybiBQb3BwZXIuY3JlYXRlUG9wcGVyKHRoaXMuX2VsZW1lbnQsIHRpcCwgdGhpcy5fZ2V0UG9wcGVyQ29uZmlnKGF0dGFjaG1lbnQpKTtcbiAgfVxuICBfZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG9mZnNldFxuICAgIH0gPSB0aGlzLl9jb25maWc7XG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gb2Zmc2V0LnNwbGl0KCcsJykubWFwKHZhbHVlID0+IE51bWJlci5wYXJzZUludCh2YWx1ZSwgMTApKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBwb3BwZXJEYXRhID0+IG9mZnNldChwb3BwZXJEYXRhLCB0aGlzLl9lbGVtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuICBfcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGV4ZWN1dGUoYXJnLCBbdGhpcy5fZWxlbWVudF0pO1xuICB9XG4gIF9nZXRQb3BwZXJDb25maWcoYXR0YWNobWVudCkge1xuICAgIGNvbnN0IGRlZmF1bHRCc1BvcHBlckNvbmZpZyA9IHtcbiAgICAgIHBsYWNlbWVudDogYXR0YWNobWVudCxcbiAgICAgIG1vZGlmaWVyczogW3tcbiAgICAgICAgbmFtZTogJ2ZsaXAnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzOiB0aGlzLl9jb25maWcuZmFsbGJhY2tQbGFjZW1lbnRzXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBvZmZzZXQ6IHRoaXMuX2dldE9mZnNldCgpXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ3ByZXZlbnRPdmVyZmxvdycsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBib3VuZGFyeTogdGhpcy5fY29uZmlnLmJvdW5kYXJ5XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ2Fycm93JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGVsZW1lbnQ6IGAuJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9LWFycm93YFxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdwcmVTZXRQbGFjZW1lbnQnLFxuICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICBwaGFzZTogJ2JlZm9yZU1haW4nLFxuICAgICAgICBmbjogZGF0YSA9PiB7XG4gICAgICAgICAgLy8gUHJlLXNldCBQb3BwZXIncyBwbGFjZW1lbnQgYXR0cmlidXRlIGluIG9yZGVyIHRvIHJlYWQgdGhlIGFycm93IHNpemVzIHByb3Blcmx5LlxuICAgICAgICAgIC8vIE90aGVyd2lzZSwgUG9wcGVyIG1peGVzIHVwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGRpbWVuc2lvbnMgc2luY2UgdGhlIGluaXRpYWwgYXJyb3cgc3R5bGUgaXMgZm9yIHRvcCBwbGFjZW1lbnRcbiAgICAgICAgICB0aGlzLl9nZXRUaXBFbGVtZW50KCkuc2V0QXR0cmlidXRlKCdkYXRhLXBvcHBlci1wbGFjZW1lbnQnLCBkYXRhLnN0YXRlLnBsYWNlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1dXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmYXVsdEJzUG9wcGVyQ29uZmlnLFxuICAgICAgLi4uZXhlY3V0ZSh0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnLCBbZGVmYXVsdEJzUG9wcGVyQ29uZmlnXSlcbiAgICB9O1xuICB9XG4gIF9zZXRMaXN0ZW5lcnMoKSB7XG4gICAgY29uc3QgdHJpZ2dlcnMgPSB0aGlzLl9jb25maWcudHJpZ2dlci5zcGxpdCgnICcpO1xuICAgIGZvciAoY29uc3QgdHJpZ2dlciBvZiB0cmlnZ2Vycykge1xuICAgICAgaWYgKHRyaWdnZXIgPT09ICdjbGljaycpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX0NMSUNLJDEpLCB0aGlzLl9jb25maWcuc2VsZWN0b3IsIGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5faW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KGV2ZW50KTtcbiAgICAgICAgICBjb250ZXh0LnRvZ2dsZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodHJpZ2dlciAhPT0gVFJJR0dFUl9NQU5VQUwpIHtcbiAgICAgICAgY29uc3QgZXZlbnRJbiA9IHRyaWdnZXIgPT09IFRSSUdHRVJfSE9WRVIgPyB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9NT1VTRUVOVEVSKSA6IHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX0ZPQ1VTSU4kMSk7XG4gICAgICAgIGNvbnN0IGV2ZW50T3V0ID0gdHJpZ2dlciA9PT0gVFJJR0dFUl9IT1ZFUiA/IHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX01PVVNFTEVBVkUpIDogdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfRk9DVVNPVVQkMSk7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBldmVudEluLCB0aGlzLl9jb25maWcuc2VsZWN0b3IsIGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5faW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KGV2ZW50KTtcbiAgICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c2luJyA/IFRSSUdHRVJfRk9DVVMgOiBUUklHR0VSX0hPVkVSXSA9IHRydWU7XG4gICAgICAgICAgY29udGV4dC5fZW50ZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBldmVudE91dCwgdGhpcy5fY29uZmlnLnNlbGVjdG9yLCBldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudCk7XG4gICAgICAgICAgY29udGV4dC5fYWN0aXZlVHJpZ2dlcltldmVudC50eXBlID09PSAnZm9jdXNvdXQnID8gVFJJR0dFUl9GT0NVUyA6IFRSSUdHRVJfSE9WRVJdID0gY29udGV4dC5fZWxlbWVudC5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KTtcbiAgICAgICAgICBjb250ZXh0Ll9sZWF2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5faGlkZU1vZGFsSGFuZGxlciA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9lbGVtZW50KSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9NT0RBTCksIEVWRU5UX01PREFMX0hJREUsIHRoaXMuX2hpZGVNb2RhbEhhbmRsZXIpO1xuICB9XG4gIF9maXhUaXRsZSgpIHtcbiAgICBjb25zdCB0aXRsZSA9IHRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCd0aXRsZScpO1xuICAgIGlmICghdGl0bGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpICYmICF0aGlzLl9lbGVtZW50LnRleHRDb250ZW50LnRyaW0oKSkge1xuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCB0aXRsZSk7XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWJzLW9yaWdpbmFsLXRpdGxlJywgdGl0bGUpOyAvLyBETyBOT1QgVVNFIElULiBJcyBvbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCd0aXRsZScpO1xuICB9XG4gIF9lbnRlcigpIHtcbiAgICBpZiAodGhpcy5faXNTaG93bigpIHx8IHRoaXMuX2lzSG92ZXJlZCkge1xuICAgICAgdGhpcy5faXNIb3ZlcmVkID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faXNIb3ZlcmVkID0gdHJ1ZTtcbiAgICB0aGlzLl9zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc0hvdmVyZWQpIHtcbiAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5fY29uZmlnLmRlbGF5LnNob3cpO1xuICB9XG4gIF9sZWF2ZSgpIHtcbiAgICBpZiAodGhpcy5faXNXaXRoQWN0aXZlVHJpZ2dlcigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lzSG92ZXJlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3NldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9pc0hvdmVyZWQpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5fY29uZmlnLmRlbGF5LmhpZGUpO1xuICB9XG4gIF9zZXRUaW1lb3V0KGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG4gICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoaGFuZGxlciwgdGltZW91dCk7XG4gIH1cbiAgX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5fYWN0aXZlVHJpZ2dlcikuaW5jbHVkZXModHJ1ZSk7XG4gIH1cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25zdCBkYXRhQXR0cmlidXRlcyA9IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQpO1xuICAgIGZvciAoY29uc3QgZGF0YUF0dHJpYnV0ZSBvZiBPYmplY3Qua2V5cyhkYXRhQXR0cmlidXRlcykpIHtcbiAgICAgIGlmIChESVNBTExPV0VEX0FUVFJJQlVURVMuaGFzKGRhdGFBdHRyaWJ1dGUpKSB7XG4gICAgICAgIGRlbGV0ZSBkYXRhQXR0cmlidXRlc1tkYXRhQXR0cmlidXRlXTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uZmlnID0ge1xuICAgICAgLi4uZGF0YUF0dHJpYnV0ZXMsXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgY29uZmlnID8gY29uZmlnIDoge30pXG4gICAgfTtcbiAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcpO1xuICAgIGNvbmZpZyA9IHRoaXMuX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKTtcbiAgICB0aGlzLl90eXBlQ2hlY2tDb25maWcoY29uZmlnKTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIGNvbmZpZy5jb250YWluZXIgPSBjb25maWcuY29udGFpbmVyID09PSBmYWxzZSA/IGRvY3VtZW50LmJvZHkgOiBnZXRFbGVtZW50KGNvbmZpZy5jb250YWluZXIpO1xuICAgIGlmICh0eXBlb2YgY29uZmlnLmRlbGF5ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLmRlbGF5ID0ge1xuICAgICAgICBzaG93OiBjb25maWcuZGVsYXksXG4gICAgICAgIGhpZGU6IGNvbmZpZy5kZWxheVxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb25maWcudGl0bGUgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25maWcudGl0bGUgPSBjb25maWcudGl0bGUudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb25maWcuY29udGVudCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbmZpZy5jb250ZW50ID0gY29uZmlnLmNvbnRlbnQudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfZ2V0RGVsZWdhdGVDb25maWcoKSB7XG4gICAgY29uc3QgY29uZmlnID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fY29uZmlnKSkge1xuICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFtrZXldICE9PSB2YWx1ZSkge1xuICAgICAgICBjb25maWdba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25maWcuc2VsZWN0b3IgPSBmYWxzZTtcbiAgICBjb25maWcudHJpZ2dlciA9ICdtYW51YWwnO1xuXG4gICAgLy8gSW4gdGhlIGZ1dHVyZSBjYW4gYmUgcmVwbGFjZWQgd2l0aDpcbiAgICAvLyBjb25zdCBrZXlzV2l0aERpZmZlcmVudFZhbHVlcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuX2NvbmZpZykuZmlsdGVyKGVudHJ5ID0+IHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFtlbnRyeVswXV0gIT09IHRoaXMuX2NvbmZpZ1tlbnRyeVswXV0pXG4gICAgLy8gYE9iamVjdC5mcm9tRW50cmllcyhrZXlzV2l0aERpZmZlcmVudFZhbHVlcylgXG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfZGlzcG9zZVBvcHBlcigpIHtcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpO1xuICAgICAgdGhpcy5fcG9wcGVyID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMudGlwKSB7XG4gICAgICB0aGlzLnRpcC5yZW1vdmUoKTtcbiAgICAgIHRoaXMudGlwID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBUb29sdGlwLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRvb2x0aXApO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgcG9wb3Zlci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDMgPSAncG9wb3Zlcic7XG5jb25zdCBTRUxFQ1RPUl9USVRMRSA9ICcucG9wb3Zlci1oZWFkZXInO1xuY29uc3QgU0VMRUNUT1JfQ09OVEVOVCA9ICcucG9wb3Zlci1ib2R5JztcbmNvbnN0IERlZmF1bHQkMiA9IHtcbiAgLi4uVG9vbHRpcC5EZWZhdWx0LFxuICBjb250ZW50OiAnJyxcbiAgb2Zmc2V0OiBbMCwgOF0sXG4gIHBsYWNlbWVudDogJ3JpZ2h0JyxcbiAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwicG9wb3ZlclwiIHJvbGU9XCJ0b29sdGlwXCI+JyArICc8ZGl2IGNsYXNzPVwicG9wb3Zlci1hcnJvd1wiPjwvZGl2PicgKyAnPGgzIGNsYXNzPVwicG9wb3Zlci1oZWFkZXJcIj48L2gzPicgKyAnPGRpdiBjbGFzcz1cInBvcG92ZXItYm9keVwiPjwvZGl2PicgKyAnPC9kaXY+JyxcbiAgdHJpZ2dlcjogJ2NsaWNrJ1xufTtcbmNvbnN0IERlZmF1bHRUeXBlJDIgPSB7XG4gIC4uLlRvb2x0aXAuRGVmYXVsdFR5cGUsXG4gIGNvbnRlbnQ6ICcobnVsbHxzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbiknXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBQb3BvdmVyIGV4dGVuZHMgVG9vbHRpcCB7XG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDI7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkMjtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkMztcbiAgfVxuXG4gIC8vIE92ZXJyaWRlc1xuICBfaXNXaXRoQ29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0VGl0bGUoKSB8fCB0aGlzLl9nZXRDb250ZW50KCk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9nZXRDb250ZW50Rm9yVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtTRUxFQ1RPUl9USVRMRV06IHRoaXMuX2dldFRpdGxlKCksXG4gICAgICBbU0VMRUNUT1JfQ09OVEVOVF06IHRoaXMuX2dldENvbnRlbnQoKVxuICAgIH07XG4gIH1cbiAgX2dldENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKHRoaXMuX2NvbmZpZy5jb250ZW50KTtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFBvcG92ZXIuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgfVxuICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oUG9wb3Zlcik7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBzY3JvbGxzcHkuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQyID0gJ3Njcm9sbHNweSc7XG5jb25zdCBEQVRBX0tFWSQyID0gJ2JzLnNjcm9sbHNweSc7XG5jb25zdCBFVkVOVF9LRVkkMiA9IGAuJHtEQVRBX0tFWSQyfWA7XG5jb25zdCBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJztcbmNvbnN0IEVWRU5UX0FDVElWQVRFID0gYGFjdGl2YXRlJHtFVkVOVF9LRVkkMn1gO1xuY29uc3QgRVZFTlRfQ0xJQ0sgPSBgY2xpY2ske0VWRU5UX0tFWSQyfWA7XG5jb25zdCBFVkVOVF9MT0FEX0RBVEFfQVBJJDEgPSBgbG9hZCR7RVZFTlRfS0VZJDJ9JHtEQVRBX0FQSV9LRVl9YDtcbmNvbnN0IENMQVNTX05BTUVfRFJPUERPV05fSVRFTSA9ICdkcm9wZG93bi1pdGVtJztcbmNvbnN0IENMQVNTX05BTUVfQUNUSVZFJDEgPSAnYWN0aXZlJztcbmNvbnN0IFNFTEVDVE9SX0RBVEFfU1BZID0gJ1tkYXRhLWJzLXNweT1cInNjcm9sbFwiXSc7XG5jb25zdCBTRUxFQ1RPUl9UQVJHRVRfTElOS1MgPSAnW2hyZWZdJztcbmNvbnN0IFNFTEVDVE9SX05BVl9MSVNUX0dST1VQID0gJy5uYXYsIC5saXN0LWdyb3VwJztcbmNvbnN0IFNFTEVDVE9SX05BVl9MSU5LUyA9ICcubmF2LWxpbmsnO1xuY29uc3QgU0VMRUNUT1JfTkFWX0lURU1TID0gJy5uYXYtaXRlbSc7XG5jb25zdCBTRUxFQ1RPUl9MSVNUX0lURU1TID0gJy5saXN0LWdyb3VwLWl0ZW0nO1xuY29uc3QgU0VMRUNUT1JfTElOS19JVEVNUyA9IGAke1NFTEVDVE9SX05BVl9MSU5LU30sICR7U0VMRUNUT1JfTkFWX0lURU1TfSA+ICR7U0VMRUNUT1JfTkFWX0xJTktTfSwgJHtTRUxFQ1RPUl9MSVNUX0lURU1TfWA7XG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTiA9ICcuZHJvcGRvd24nO1xuY29uc3QgU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFJDEgPSAnLmRyb3Bkb3duLXRvZ2dsZSc7XG5jb25zdCBEZWZhdWx0JDEgPSB7XG4gIG9mZnNldDogbnVsbCxcbiAgLy8gVE9ETzogdjYgQGRlcHJlY2F0ZWQsIGtlZXAgaXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHJlYXNvbnNcbiAgcm9vdE1hcmdpbjogJzBweCAwcHggLTI1JScsXG4gIHNtb290aFNjcm9sbDogZmFsc2UsXG4gIHRhcmdldDogbnVsbCxcbiAgdGhyZXNob2xkOiBbMC4xLCAwLjUsIDFdXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkMSA9IHtcbiAgb2Zmc2V0OiAnKG51bWJlcnxudWxsKScsXG4gIC8vIFRPRE8gdjYgQGRlcHJlY2F0ZWQsIGtlZXAgaXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHJlYXNvbnNcbiAgcm9vdE1hcmdpbjogJ3N0cmluZycsXG4gIHNtb290aFNjcm9sbDogJ2Jvb2xlYW4nLFxuICB0YXJnZXQ6ICdlbGVtZW50JyxcbiAgdGhyZXNob2xkOiAnYXJyYXknXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBTY3JvbGxTcHkgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcblxuICAgIC8vIHRoaXMuX2VsZW1lbnQgaXMgdGhlIG9ic2VydmFibGVzQ29udGFpbmVyIGFuZCBjb25maWcudGFyZ2V0IHRoZSBtZW51IGxpbmtzIHdyYXBwZXJcbiAgICB0aGlzLl90YXJnZXRMaW5rcyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLl9vYnNlcnZhYmxlU2VjdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5fcm9vdEVsZW1lbnQgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuX2VsZW1lbnQpLm92ZXJmbG93WSA9PT0gJ3Zpc2libGUnID8gbnVsbCA6IHRoaXMuX2VsZW1lbnQ7XG4gICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9vYnNlcnZlciA9IG51bGw7XG4gICAgdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhID0ge1xuICAgICAgdmlzaWJsZUVudHJ5VG9wOiAwLFxuICAgICAgcGFyZW50U2Nyb2xsVG9wOiAwXG4gICAgfTtcbiAgICB0aGlzLnJlZnJlc2goKTsgLy8gaW5pdGlhbGl6ZVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkMTtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQxO1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQyO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5faW5pdGlhbGl6ZVRhcmdldHNBbmRPYnNlcnZhYmxlcygpO1xuICAgIHRoaXMuX21heWJlRW5hYmxlU21vb3RoU2Nyb2xsKCk7XG4gICAgaWYgKHRoaXMuX29ic2VydmVyKSB7XG4gICAgICB0aGlzLl9vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29ic2VydmVyID0gdGhpcy5fZ2V0TmV3T2JzZXJ2ZXIoKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHRoaXMuX29ic2VydmFibGVTZWN0aW9ucy52YWx1ZXMoKSkge1xuICAgICAgdGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZShzZWN0aW9uKTtcbiAgICB9XG4gIH1cbiAgZGlzcG9zZSgpIHtcbiAgICB0aGlzLl9vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICAvLyBUT0RPOiBvbiB2NiB0YXJnZXQgc2hvdWxkIGJlIGdpdmVuIGV4cGxpY2l0bHkgJiByZW1vdmUgdGhlIHt0YXJnZXQ6ICdzcy10YXJnZXQnfSBjYXNlXG4gICAgY29uZmlnLnRhcmdldCA9IGdldEVsZW1lbnQoY29uZmlnLnRhcmdldCkgfHwgZG9jdW1lbnQuYm9keTtcblxuICAgIC8vIFRPRE86IHY2IE9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHJlYXNvbnMuIFVzZSByb290TWFyZ2luIG9ubHlcbiAgICBjb25maWcucm9vdE1hcmdpbiA9IGNvbmZpZy5vZmZzZXQgPyBgJHtjb25maWcub2Zmc2V0fXB4IDBweCAtMzAlYCA6IGNvbmZpZy5yb290TWFyZ2luO1xuICAgIGlmICh0eXBlb2YgY29uZmlnLnRocmVzaG9sZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZy50aHJlc2hvbGQgPSBjb25maWcudGhyZXNob2xkLnNwbGl0KCcsJykubWFwKHZhbHVlID0+IE51bWJlci5wYXJzZUZsb2F0KHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX21heWJlRW5hYmxlU21vb3RoU2Nyb2xsKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLnNtb290aFNjcm9sbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHVucmVnaXN0ZXIgYW55IHByZXZpb3VzIGxpc3RlbmVyc1xuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fY29uZmlnLnRhcmdldCwgRVZFTlRfQ0xJQ0spO1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9jb25maWcudGFyZ2V0LCBFVkVOVF9DTElDSywgU0VMRUNUT1JfVEFSR0VUX0xJTktTLCBldmVudCA9PiB7XG4gICAgICBjb25zdCBvYnNlcnZhYmxlU2VjdGlvbiA9IHRoaXMuX29ic2VydmFibGVTZWN0aW9ucy5nZXQoZXZlbnQudGFyZ2V0Lmhhc2gpO1xuICAgICAgaWYgKG9ic2VydmFibGVTZWN0aW9uKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9yb290RWxlbWVudCB8fCB3aW5kb3c7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IG9ic2VydmFibGVTZWN0aW9uLm9mZnNldFRvcCAtIHRoaXMuX2VsZW1lbnQub2Zmc2V0VG9wO1xuICAgICAgICBpZiAocm9vdC5zY3JvbGxUbykge1xuICAgICAgICAgIHJvb3Quc2Nyb2xsVG8oe1xuICAgICAgICAgICAgdG9wOiBoZWlnaHQsXG4gICAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaHJvbWUgNjAgZG9lc24ndCBzdXBwb3J0IGBzY3JvbGxUb2BcbiAgICAgICAgcm9vdC5zY3JvbGxUb3AgPSBoZWlnaHQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgX2dldE5ld09ic2VydmVyKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICByb290OiB0aGlzLl9yb290RWxlbWVudCxcbiAgICAgIHRocmVzaG9sZDogdGhpcy5fY29uZmlnLnRocmVzaG9sZCxcbiAgICAgIHJvb3RNYXJnaW46IHRoaXMuX2NvbmZpZy5yb290TWFyZ2luXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGVudHJpZXMgPT4gdGhpcy5fb2JzZXJ2ZXJDYWxsYmFjayhlbnRyaWVzKSwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyBUaGUgbG9naWMgb2Ygc2VsZWN0aW9uXG4gIF9vYnNlcnZlckNhbGxiYWNrKGVudHJpZXMpIHtcbiAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gZW50cnkgPT4gdGhpcy5fdGFyZ2V0TGlua3MuZ2V0KGAjJHtlbnRyeS50YXJnZXQuaWR9YCk7XG4gICAgY29uc3QgYWN0aXZhdGUgPSBlbnRyeSA9PiB7XG4gICAgICB0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEudmlzaWJsZUVudHJ5VG9wID0gZW50cnkudGFyZ2V0Lm9mZnNldFRvcDtcbiAgICAgIHRoaXMuX3Byb2Nlc3ModGFyZ2V0RWxlbWVudChlbnRyeSkpO1xuICAgIH07XG4gICAgY29uc3QgcGFyZW50U2Nyb2xsVG9wID0gKHRoaXMuX3Jvb3RFbGVtZW50IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuc2Nyb2xsVG9wO1xuICAgIGNvbnN0IHVzZXJTY3JvbGxzRG93biA9IHBhcmVudFNjcm9sbFRvcCA+PSB0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEucGFyZW50U2Nyb2xsVG9wO1xuICAgIHRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YS5wYXJlbnRTY3JvbGxUb3AgPSBwYXJlbnRTY3JvbGxUb3A7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBpZiAoIWVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRhcmdldCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2NsZWFyQWN0aXZlQ2xhc3ModGFyZ2V0RWxlbWVudChlbnRyeSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVudHJ5SXNMb3dlclRoYW5QcmV2aW91cyA9IGVudHJ5LnRhcmdldC5vZmZzZXRUb3AgPj0gdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnZpc2libGVFbnRyeVRvcDtcbiAgICAgIC8vIGlmIHdlIGFyZSBzY3JvbGxpbmcgZG93biwgcGljayB0aGUgYmlnZ2VyIG9mZnNldFRvcFxuICAgICAgaWYgKHVzZXJTY3JvbGxzRG93biAmJiBlbnRyeUlzTG93ZXJUaGFuUHJldmlvdXMpIHtcbiAgICAgICAgYWN0aXZhdGUoZW50cnkpO1xuICAgICAgICAvLyBpZiBwYXJlbnQgaXNuJ3Qgc2Nyb2xsZWQsIGxldCdzIGtlZXAgdGhlIGZpcnN0IHZpc2libGUgaXRlbSwgYnJlYWtpbmcgdGhlIGl0ZXJhdGlvblxuICAgICAgICBpZiAoIXBhcmVudFNjcm9sbFRvcCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgd2UgYXJlIHNjcm9sbGluZyB1cCwgcGljayB0aGUgc21hbGxlc3Qgb2Zmc2V0VG9wXG4gICAgICBpZiAoIXVzZXJTY3JvbGxzRG93biAmJiAhZW50cnlJc0xvd2VyVGhhblByZXZpb3VzKSB7XG4gICAgICAgIGFjdGl2YXRlKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgX2luaXRpYWxpemVUYXJnZXRzQW5kT2JzZXJ2YWJsZXMoKSB7XG4gICAgdGhpcy5fdGFyZ2V0TGlua3MgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IHRhcmdldExpbmtzID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9UQVJHRVRfTElOS1MsIHRoaXMuX2NvbmZpZy50YXJnZXQpO1xuICAgIGZvciAoY29uc3QgYW5jaG9yIG9mIHRhcmdldExpbmtzKSB7XG4gICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgYW5jaG9yIGhhcyBhbiBpZCBhbmQgaXMgbm90IGRpc2FibGVkXG4gICAgICBpZiAoIWFuY2hvci5oYXNoIHx8IGlzRGlzYWJsZWQoYW5jaG9yKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9ic2VydmFibGVTZWN0aW9uID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShkZWNvZGVVUkkoYW5jaG9yLmhhc2gpLCB0aGlzLl9lbGVtZW50KTtcblxuICAgICAgLy8gZW5zdXJlIHRoYXQgdGhlIG9ic2VydmFibGVTZWN0aW9uIGV4aXN0cyAmIGlzIHZpc2libGVcbiAgICAgIGlmIChpc1Zpc2libGUob2JzZXJ2YWJsZVNlY3Rpb24pKSB7XG4gICAgICAgIHRoaXMuX3RhcmdldExpbmtzLnNldChkZWNvZGVVUkkoYW5jaG9yLmhhc2gpLCBhbmNob3IpO1xuICAgICAgICB0aGlzLl9vYnNlcnZhYmxlU2VjdGlvbnMuc2V0KGFuY2hvci5oYXNoLCBvYnNlcnZhYmxlU2VjdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIF9wcm9jZXNzKHRhcmdldCkge1xuICAgIGlmICh0aGlzLl9hY3RpdmVUYXJnZXQgPT09IHRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jbGVhckFjdGl2ZUNsYXNzKHRoaXMuX2NvbmZpZy50YXJnZXQpO1xuICAgIHRoaXMuX2FjdGl2ZVRhcmdldCA9IHRhcmdldDtcbiAgICB0YXJnZXQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSQxKTtcbiAgICB0aGlzLl9hY3RpdmF0ZVBhcmVudHModGFyZ2V0KTtcbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9BQ1RJVkFURSwge1xuICAgICAgcmVsYXRlZFRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG4gIH1cbiAgX2FjdGl2YXRlUGFyZW50cyh0YXJnZXQpIHtcbiAgICAvLyBBY3RpdmF0ZSBkcm9wZG93biBwYXJlbnRzXG4gICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QRE9XTl9JVEVNKSkge1xuICAgICAgU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUkMSwgdGFyZ2V0LmNsb3Nlc3QoU0VMRUNUT1JfRFJPUERPV04pKS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFJDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGxpc3RHcm91cCBvZiBTZWxlY3RvckVuZ2luZS5wYXJlbnRzKHRhcmdldCwgU0VMRUNUT1JfTkFWX0xJU1RfR1JPVVApKSB7XG4gICAgICAvLyBTZXQgdHJpZ2dlcmVkIGxpbmtzIHBhcmVudHMgYXMgYWN0aXZlXG4gICAgICAvLyBXaXRoIGJvdGggPHVsPiBhbmQgPG5hdj4gbWFya3VwIGEgcGFyZW50IGlzIHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mIGFueSBuYXYgYW5jZXN0b3JcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBTZWxlY3RvckVuZ2luZS5wcmV2KGxpc3RHcm91cCwgU0VMRUNUT1JfTElOS19JVEVNUykpIHtcbiAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFJDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBfY2xlYXJBY3RpdmVDbGFzcyhwYXJlbnQpIHtcbiAgICBwYXJlbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0FDVElWRSQxKTtcbiAgICBjb25zdCBhY3RpdmVOb2RlcyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoYCR7U0VMRUNUT1JfVEFSR0VUX0xJTktTfS4ke0NMQVNTX05BTUVfQUNUSVZFJDF9YCwgcGFyZW50KTtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgYWN0aXZlTm9kZXMpIHtcbiAgICAgIG5vZGUuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0FDVElWRSQxKTtcbiAgICB9XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBTY3JvbGxTcHkuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgfVxuICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX0xPQURfREFUQV9BUEkkMSwgKCkgPT4ge1xuICBmb3IgKGNvbnN0IHNweSBvZiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfU1BZKSkge1xuICAgIFNjcm9sbFNweS5nZXRPckNyZWF0ZUluc3RhbmNlKHNweSk7XG4gIH1cbn0pO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihTY3JvbGxTcHkpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdGFiLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkMSA9ICd0YWInO1xuY29uc3QgREFUQV9LRVkkMSA9ICdicy50YWInO1xuY29uc3QgRVZFTlRfS0VZJDEgPSBgLiR7REFUQV9LRVkkMX1gO1xuY29uc3QgRVZFTlRfSElERSQxID0gYGhpZGUke0VWRU5UX0tFWSQxfWA7XG5jb25zdCBFVkVOVF9ISURERU4kMSA9IGBoaWRkZW4ke0VWRU5UX0tFWSQxfWA7XG5jb25zdCBFVkVOVF9TSE9XJDEgPSBgc2hvdyR7RVZFTlRfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX1NIT1dOJDEgPSBgc2hvd24ke0VWRU5UX0tFWSQxfWA7XG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX0tFWURPV04gPSBga2V5ZG93biR7RVZFTlRfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX0xPQURfREFUQV9BUEkgPSBgbG9hZCR7RVZFTlRfS0VZJDF9YDtcbmNvbnN0IEFSUk9XX0xFRlRfS0VZID0gJ0Fycm93TGVmdCc7XG5jb25zdCBBUlJPV19SSUdIVF9LRVkgPSAnQXJyb3dSaWdodCc7XG5jb25zdCBBUlJPV19VUF9LRVkgPSAnQXJyb3dVcCc7XG5jb25zdCBBUlJPV19ET1dOX0tFWSA9ICdBcnJvd0Rvd24nO1xuY29uc3QgSE9NRV9LRVkgPSAnSG9tZSc7XG5jb25zdCBFTkRfS0VZID0gJ0VuZCc7XG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSA9ICdhY3RpdmUnO1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFJDEgPSAnZmFkZSc7XG5jb25zdCBDTEFTU19OQU1FX1NIT1ckMSA9ICdzaG93JztcbmNvbnN0IENMQVNTX0RST1BET1dOID0gJ2Ryb3Bkb3duJztcbmNvbnN0IFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSA9ICcuZHJvcGRvd24tdG9nZ2xlJztcbmNvbnN0IFNFTEVDVE9SX0RST1BET1dOX01FTlUgPSAnLmRyb3Bkb3duLW1lbnUnO1xuY29uc3QgTk9UX1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRSA9IGA6bm90KCR7U0VMRUNUT1JfRFJPUERPV05fVE9HR0xFfSlgO1xuY29uc3QgU0VMRUNUT1JfVEFCX1BBTkVMID0gJy5saXN0LWdyb3VwLCAubmF2LCBbcm9sZT1cInRhYmxpc3RcIl0nO1xuY29uc3QgU0VMRUNUT1JfT1VURVIgPSAnLm5hdi1pdGVtLCAubGlzdC1ncm91cC1pdGVtJztcbmNvbnN0IFNFTEVDVE9SX0lOTkVSID0gYC5uYXYtbGluayR7Tk9UX1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRX0sIC5saXN0LWdyb3VwLWl0ZW0ke05PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEV9LCBbcm9sZT1cInRhYlwiXSR7Tk9UX1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRX1gO1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwidGFiXCJdLCBbZGF0YS1icy10b2dnbGU9XCJwaWxsXCJdLCBbZGF0YS1icy10b2dnbGU9XCJsaXN0XCJdJzsgLy8gVE9ETzogY291bGQgb25seSBiZSBgdGFiYCBpbiB2NlxuY29uc3QgU0VMRUNUT1JfSU5ORVJfRUxFTSA9IGAke1NFTEVDVE9SX0lOTkVSfSwgJHtTRUxFQ1RPUl9EQVRBX1RPR0dMRX1gO1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEVfQUNUSVZFID0gYC4ke0NMQVNTX05BTUVfQUNUSVZFfVtkYXRhLWJzLXRvZ2dsZT1cInRhYlwiXSwgLiR7Q0xBU1NfTkFNRV9BQ1RJVkV9W2RhdGEtYnMtdG9nZ2xlPVwicGlsbFwiXSwgLiR7Q0xBU1NfTkFNRV9BQ1RJVkV9W2RhdGEtYnMtdG9nZ2xlPVwibGlzdFwiXWA7XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFRhYiBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50KSB7XG4gICAgc3VwZXIoZWxlbWVudCk7XG4gICAgdGhpcy5fcGFyZW50ID0gdGhpcy5fZWxlbWVudC5jbG9zZXN0KFNFTEVDVE9SX1RBQl9QQU5FTCk7XG4gICAgaWYgKCF0aGlzLl9wYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICAgIC8vIFRPRE86IHNob3VsZCB0aHJvdyBleGNlcHRpb24gaW4gdjZcbiAgICAgIC8vIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7ZWxlbWVudC5vdXRlckhUTUx9IGhhcyBub3QgYSB2YWxpZCBwYXJlbnQgJHtTRUxFQ1RPUl9JTk5FUl9FTEVNfWApXG4gICAgfVxuXG4gICAgLy8gU2V0IHVwIGluaXRpYWwgYXJpYSBhdHRyaWJ1dGVzXG4gICAgdGhpcy5fc2V0SW5pdGlhbEF0dHJpYnV0ZXModGhpcy5fcGFyZW50LCB0aGlzLl9nZXRDaGlsZHJlbigpKTtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTiwgZXZlbnQgPT4gdGhpcy5fa2V5ZG93bihldmVudCkpO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkMTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBzaG93KCkge1xuICAgIC8vIFNob3dzIHRoaXMgZWxlbSBhbmQgZGVhY3RpdmF0ZSB0aGUgYWN0aXZlIHNpYmxpbmcgaWYgZXhpc3RzXG4gICAgY29uc3QgaW5uZXJFbGVtID0gdGhpcy5fZWxlbWVudDtcbiAgICBpZiAodGhpcy5fZWxlbUlzQWN0aXZlKGlubmVyRWxlbSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTZWFyY2ggZm9yIGFjdGl2ZSB0YWIgb24gc2FtZSBwYXJlbnQgdG8gZGVhY3RpdmF0ZSBpdFxuICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuX2dldEFjdGl2ZUVsZW0oKTtcbiAgICBjb25zdCBoaWRlRXZlbnQgPSBhY3RpdmUgPyBFdmVudEhhbmRsZXIudHJpZ2dlcihhY3RpdmUsIEVWRU5UX0hJREUkMSwge1xuICAgICAgcmVsYXRlZFRhcmdldDogaW5uZXJFbGVtXG4gICAgfSkgOiBudWxsO1xuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKGlubmVyRWxlbSwgRVZFTlRfU0hPVyQxLCB7XG4gICAgICByZWxhdGVkVGFyZ2V0OiBhY3RpdmVcbiAgICB9KTtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgaGlkZUV2ZW50ICYmIGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2RlYWN0aXZhdGUoYWN0aXZlLCBpbm5lckVsZW0pO1xuICAgIHRoaXMuX2FjdGl2YXRlKGlubmVyRWxlbSwgYWN0aXZlKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2FjdGl2YXRlKGVsZW1lbnQsIHJlbGF0ZWRFbGVtKSB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSk7XG4gICAgdGhpcy5fYWN0aXZhdGUoU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3RvcihlbGVtZW50KSk7IC8vIFNlYXJjaCBhbmQgYWN0aXZhdGUvc2hvdyB0aGUgcHJvcGVyIHNlY3Rpb25cblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdyb2xlJykgIT09ICd0YWInKSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1ckMSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCB0cnVlKTtcbiAgICAgIHRoaXMuX3RvZ2dsZURyb3BEb3duKGVsZW1lbnQsIHRydWUpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIoZWxlbWVudCwgRVZFTlRfU0hPV04kMSwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiByZWxhdGVkRWxlbVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCBlbGVtZW50LCBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUkMSkpO1xuICB9XG4gIF9kZWFjdGl2YXRlKGVsZW1lbnQsIHJlbGF0ZWRFbGVtKSB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0FDVElWRSk7XG4gICAgZWxlbWVudC5ibHVyKCk7XG4gICAgdGhpcy5fZGVhY3RpdmF0ZShTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKGVsZW1lbnQpKTsgLy8gU2VhcmNoIGFuZCBkZWFjdGl2YXRlIHRoZSBzaG93biBzZWN0aW9uIHRvb1xuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSAhPT0gJ3RhYicpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQxKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCBmYWxzZSk7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgIHRoaXMuX3RvZ2dsZURyb3BEb3duKGVsZW1lbnQsIGZhbHNlKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKGVsZW1lbnQsIEVWRU5UX0hJRERFTiQxLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHJlbGF0ZWRFbGVtXG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIGVsZW1lbnQsIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSQxKSk7XG4gIH1cbiAgX2tleWRvd24oZXZlbnQpIHtcbiAgICBpZiAoIVtBUlJPV19MRUZUX0tFWSwgQVJST1dfUklHSFRfS0VZLCBBUlJPV19VUF9LRVksIEFSUk9XX0RPV05fS0VZLCBIT01FX0tFWSwgRU5EX0tFWV0uaW5jbHVkZXMoZXZlbnQua2V5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgLy8gc3RvcFByb3BhZ2F0aW9uL3ByZXZlbnREZWZhdWx0IGJvdGggYWRkZWQgdG8gc3VwcG9ydCB1cC9kb3duIGtleXMgd2l0aG91dCBzY3JvbGxpbmcgdGhlIHBhZ2VcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5fZ2V0Q2hpbGRyZW4oKS5maWx0ZXIoZWxlbWVudCA9PiAhaXNEaXNhYmxlZChlbGVtZW50KSk7XG4gICAgbGV0IG5leHRBY3RpdmVFbGVtZW50O1xuICAgIGlmIChbSE9NRV9LRVksIEVORF9LRVldLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcbiAgICAgIG5leHRBY3RpdmVFbGVtZW50ID0gY2hpbGRyZW5bZXZlbnQua2V5ID09PSBIT01FX0tFWSA/IDAgOiBjaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXNOZXh0ID0gW0FSUk9XX1JJR0hUX0tFWSwgQVJST1dfRE9XTl9LRVldLmluY2x1ZGVzKGV2ZW50LmtleSk7XG4gICAgICBuZXh0QWN0aXZlRWxlbWVudCA9IGdldE5leHRBY3RpdmVFbGVtZW50KGNoaWxkcmVuLCBldmVudC50YXJnZXQsIGlzTmV4dCwgdHJ1ZSk7XG4gICAgfVxuICAgIGlmIChuZXh0QWN0aXZlRWxlbWVudCkge1xuICAgICAgbmV4dEFjdGl2ZUVsZW1lbnQuZm9jdXMoe1xuICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIFRhYi5nZXRPckNyZWF0ZUluc3RhbmNlKG5leHRBY3RpdmVFbGVtZW50KS5zaG93KCk7XG4gICAgfVxuICB9XG4gIF9nZXRDaGlsZHJlbigpIHtcbiAgICAvLyBjb2xsZWN0aW9uIG9mIGlubmVyIGVsZW1lbnRzXG4gICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfSU5ORVJfRUxFTSwgdGhpcy5fcGFyZW50KTtcbiAgfVxuICBfZ2V0QWN0aXZlRWxlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0Q2hpbGRyZW4oKS5maW5kKGNoaWxkID0+IHRoaXMuX2VsZW1Jc0FjdGl2ZShjaGlsZCkpIHx8IG51bGw7XG4gIH1cbiAgX3NldEluaXRpYWxBdHRyaWJ1dGVzKHBhcmVudCwgY2hpbGRyZW4pIHtcbiAgICB0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyhwYXJlbnQsICdyb2xlJywgJ3RhYmxpc3QnKTtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICB0aGlzLl9zZXRJbml0aWFsQXR0cmlidXRlc09uQ2hpbGQoY2hpbGQpO1xuICAgIH1cbiAgfVxuICBfc2V0SW5pdGlhbEF0dHJpYnV0ZXNPbkNoaWxkKGNoaWxkKSB7XG4gICAgY2hpbGQgPSB0aGlzLl9nZXRJbm5lckVsZW1lbnQoY2hpbGQpO1xuICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5fZWxlbUlzQWN0aXZlKGNoaWxkKTtcbiAgICBjb25zdCBvdXRlckVsZW0gPSB0aGlzLl9nZXRPdXRlckVsZW1lbnQoY2hpbGQpO1xuICAgIGNoaWxkLnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIGlzQWN0aXZlKTtcbiAgICBpZiAob3V0ZXJFbGVtICE9PSBjaGlsZCkge1xuICAgICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHMob3V0ZXJFbGVtLCAncm9sZScsICdwcmVzZW50YXRpb24nKTtcbiAgICB9XG4gICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgY2hpbGQuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICAgIH1cbiAgICB0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyhjaGlsZCwgJ3JvbGUnLCAndGFiJyk7XG5cbiAgICAvLyBzZXQgYXR0cmlidXRlcyB0byB0aGUgcmVsYXRlZCBwYW5lbCB0b29cbiAgICB0aGlzLl9zZXRJbml0aWFsQXR0cmlidXRlc09uVGFyZ2V0UGFuZWwoY2hpbGQpO1xuICB9XG4gIF9zZXRJbml0aWFsQXR0cmlidXRlc09uVGFyZ2V0UGFuZWwoY2hpbGQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKGNoaWxkKTtcbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyh0YXJnZXQsICdyb2xlJywgJ3RhYnBhbmVsJyk7XG4gICAgaWYgKGNoaWxkLmlkKSB7XG4gICAgICB0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyh0YXJnZXQsICdhcmlhLWxhYmVsbGVkYnknLCBgJHtjaGlsZC5pZH1gKTtcbiAgICB9XG4gIH1cbiAgX3RvZ2dsZURyb3BEb3duKGVsZW1lbnQsIG9wZW4pIHtcbiAgICBjb25zdCBvdXRlckVsZW0gPSB0aGlzLl9nZXRPdXRlckVsZW1lbnQoZWxlbWVudCk7XG4gICAgaWYgKCFvdXRlckVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX0RST1BET1dOKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0b2dnbGUgPSAoc2VsZWN0b3IsIGNsYXNzTmFtZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IsIG91dGVyRWxlbSk7XG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoY2xhc3NOYW1lLCBvcGVuKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRvZ2dsZShTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUsIENMQVNTX05BTUVfQUNUSVZFKTtcbiAgICB0b2dnbGUoU0VMRUNUT1JfRFJPUERPV05fTUVOVSwgQ0xBU1NfTkFNRV9TSE9XJDEpO1xuICAgIG91dGVyRWxlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCBvcGVuKTtcbiAgfVxuICBfc2V0QXR0cmlidXRlSWZOb3RFeGlzdHMoZWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSkge1xuICAgIGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlKSkge1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIF9lbGVtSXNBY3RpdmUoZWxlbSkge1xuICAgIHJldHVybiBlbGVtLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0FDVElWRSk7XG4gIH1cblxuICAvLyBUcnkgdG8gZ2V0IHRoZSBpbm5lciBlbGVtZW50ICh1c3VhbGx5IHRoZSAubmF2LWxpbmspXG4gIF9nZXRJbm5lckVsZW1lbnQoZWxlbSkge1xuICAgIHJldHVybiBlbGVtLm1hdGNoZXMoU0VMRUNUT1JfSU5ORVJfRUxFTSkgPyBlbGVtIDogU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9JTk5FUl9FTEVNLCBlbGVtKTtcbiAgfVxuXG4gIC8vIFRyeSB0byBnZXQgdGhlIG91dGVyIGVsZW1lbnQgKHVzdWFsbHkgdGhlIC5uYXYtaXRlbSlcbiAgX2dldE91dGVyRWxlbWVudChlbGVtKSB7XG4gICAgcmV0dXJuIGVsZW0uY2xvc2VzdChTRUxFQ1RPUl9PVVRFUikgfHwgZWxlbTtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFRhYi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgfVxuICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgaWYgKFsnQScsICdBUkVBJ10uaW5jbHVkZXModGhpcy50YWdOYW1lKSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgVGFiLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcykuc2hvdygpO1xufSk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBvbiBmb2N1c1xuICovXG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9MT0FEX0RBVEFfQVBJLCAoKSA9PiB7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfVE9HR0xFX0FDVElWRSkpIHtcbiAgICBUYWIuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50KTtcbiAgfVxufSk7XG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihUYWIpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdG9hc3QuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICd0b2FzdCc7XG5jb25zdCBEQVRBX0tFWSA9ICdicy50b2FzdCc7XG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YDtcbmNvbnN0IEVWRU5UX01PVVNFT1ZFUiA9IGBtb3VzZW92ZXIke0VWRU5UX0tFWX1gO1xuY29uc3QgRVZFTlRfTU9VU0VPVVQgPSBgbW91c2VvdXQke0VWRU5UX0tFWX1gO1xuY29uc3QgRVZFTlRfRk9DVVNJTiA9IGBmb2N1c2luJHtFVkVOVF9LRVl9YDtcbmNvbnN0IEVWRU5UX0ZPQ1VTT1VUID0gYGZvY3Vzb3V0JHtFVkVOVF9LRVl9YDtcbmNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWA7XG5jb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YDtcbmNvbnN0IEVWRU5UX1NIT1cgPSBgc2hvdyR7RVZFTlRfS0VZfWA7XG5jb25zdCBFVkVOVF9TSE9XTiA9IGBzaG93biR7RVZFTlRfS0VZfWA7XG5jb25zdCBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSc7XG5jb25zdCBDTEFTU19OQU1FX0hJREUgPSAnaGlkZSc7IC8vIEBkZXByZWNhdGVkIC0ga2VwdCBoZXJlIG9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdyc7XG5jb25zdCBDTEFTU19OQU1FX1NIT1dJTkcgPSAnc2hvd2luZyc7XG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgYW5pbWF0aW9uOiAnYm9vbGVhbicsXG4gIGF1dG9oaWRlOiAnYm9vbGVhbicsXG4gIGRlbGF5OiAnbnVtYmVyJ1xufTtcbmNvbnN0IERlZmF1bHQgPSB7XG4gIGFuaW1hdGlvbjogdHJ1ZSxcbiAgYXV0b2hpZGU6IHRydWUsXG4gIGRlbGF5OiA1MDAwXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBUb2FzdCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMuX2hhc01vdXNlSW50ZXJhY3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLl9oYXNLZXlib2FyZEludGVyYWN0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5fc2V0TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdDtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZTtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUU7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgc2hvdygpIHtcbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XKTtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fY2xlYXJUaW1lb3V0KCk7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5hbmltYXRpb24pIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0ZBREUpO1xuICAgIH1cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1dJTkcpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04pO1xuICAgICAgdGhpcy5fbWF5YmVTY2hlZHVsZUhpZGUoKTtcbiAgICB9O1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0hJREUpOyAvLyBAZGVwcmVjYXRlZFxuICAgIHJlZmxvdyh0aGlzLl9lbGVtZW50KTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XLCBDTEFTU19OQU1FX1NIT1dJTkcpO1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRoaXMuX2NvbmZpZy5hbmltYXRpb24pO1xuICB9XG4gIGhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLmlzU2hvd24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFKTtcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9ISURFKTsgLy8gQGRlcHJlY2F0ZWRcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1dJTkcsIENMQVNTX05BTUVfU0hPVyk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4pO1xuICAgIH07XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPV0lORyk7XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdGhpcy5fY29uZmlnLmFuaW1hdGlvbik7XG4gIH1cbiAgZGlzcG9zZSgpIHtcbiAgICB0aGlzLl9jbGVhclRpbWVvdXQoKTtcbiAgICBpZiAodGhpcy5pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpO1xuICAgIH1cbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gIH1cbiAgaXNTaG93bigpIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TSE9XKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcblxuICBfbWF5YmVTY2hlZHVsZUhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuYXV0b2hpZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2hhc01vdXNlSW50ZXJhY3Rpb24gfHwgdGhpcy5faGFzS2V5Ym9hcmRJbnRlcmFjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9LCB0aGlzLl9jb25maWcuZGVsYXkpO1xuICB9XG4gIF9vbkludGVyYWN0aW9uKGV2ZW50LCBpc0ludGVyYWN0aW5nKSB7XG4gICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgICAgY2FzZSAnbW91c2VvdXQnOlxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbiA9IGlzSW50ZXJhY3Rpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5faGFzS2V5Ym9hcmRJbnRlcmFjdGlvbiA9IGlzSW50ZXJhY3Rpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzSW50ZXJhY3RpbmcpIHtcbiAgICAgIHRoaXMuX2NsZWFyVGltZW91dCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXh0RWxlbWVudCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gICAgaWYgKHRoaXMuX2VsZW1lbnQgPT09IG5leHRFbGVtZW50IHx8IHRoaXMuX2VsZW1lbnQuY29udGFpbnMobmV4dEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX21heWJlU2NoZWR1bGVIaWRlKCk7XG4gIH1cbiAgX3NldExpc3RlbmVycygpIHtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VPVkVSLCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCB0cnVlKSk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFT1VULCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCBmYWxzZSkpO1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9GT0NVU0lOLCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCB0cnVlKSk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0ZPQ1VTT1VULCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCBmYWxzZSkpO1xuICB9XG4gIF9jbGVhclRpbWVvdXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gVG9hc3QuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtjb25maWddKHRoaXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5lbmFibGVEaXNtaXNzVHJpZ2dlcihUb2FzdCk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRvYXN0KTtcblxuZXhwb3J0IHsgQWxlcnQsIEJ1dHRvbiwgQ2Fyb3VzZWwsIENvbGxhcHNlLCBEcm9wZG93biwgTW9kYWwsIE9mZmNhbnZhcywgUG9wb3ZlciwgU2Nyb2xsU3B5LCBUYWIsIFRvYXN0LCBUb29sdGlwIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ib290c3RyYXAuZXNtLmpzLm1hcFxuIiwiaW1wb3J0IHtcclxuICBJQWN0aW9uLFxyXG4gIElBY3Rpb25SZXN1bHQsXHJcbiAgSUFjdGlvbk5vZGUsXHJcbiAgSUFjdGlvblByb3BlcnR5LFxyXG4gIElDb250ZXh0LFxyXG4gIElGaWVsZCxcclxufSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuXHJcbmltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB0eXBlIHsgUmVjb3JkfSBmcm9tIFwiQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvY2xpZW50L3R5cGVzXCI7XHJcbmltcG9ydCB7IEtpbnRvbmVBbGxSZWNvcmRzRXJyb3IsIEtpbnRvbmVSZXN0QVBJQ2xpZW50fSBmcm9tIFwiQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50XCI7XHJcbmltcG9ydCBcIi4vYXV0by1sb29rdXAuc2Nzc1wiO1xyXG5pbXBvcnQgXCJib290c3RyYXAvanMvZGlzdC9tb2RhbFwiO1xyXG4vLyBpbXBvcnQgXCJib290c3RyYXAvanMvZGlzdC9zcGlubmVyXCI7XHJcbmltcG9ydCB7TW9kYWx9IGZyb20gXCJib290c3RyYXBcIlxyXG5pbXBvcnQgJCBmcm9tIFwianF1ZXJ5XCI7XHJcblxyXG5pbnRlcmZhY2UgSUF1dG9Mb29rVXBQcm9wcyB7XHJcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcclxuICBsb29rdXBGaWVsZDogTG9va3VwRmllbGQ7XHJcbiAgY29uZGl0aW9uOiBDb25kaXRpb247XHJcbn1cclxuXHJcbmludGVyZmFjZSBDb25kaXRpb24ge1xyXG4gIHF1ZXJ5U3RyaW5nOiBzdHJpbmc7XHJcbiAgaW5kZXg6IG51bWJlcjtcclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgY2hpbGRyZW46IENoaWxkW107XHJcbiAgcGFyZW50OiBudWxsO1xyXG4gIGxvZ2ljYWxPcGVyYXRvcjogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQ2hpbGQge1xyXG4gIGluZGV4OiBudW1iZXI7XHJcbiAgdHlwZTogc3RyaW5nO1xyXG4gIHBhcmVudDogc3RyaW5nO1xyXG4gIG9iamVjdDogYW55O1xyXG4gIG9wZXJhdG9yOiBzdHJpbmc7XHJcbiAgdmFsdWU6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIExvb2t1cEZpZWxkIHtcclxuICBhcHA6IEFwcDtcclxuICBmaWVsZHM6IEZpZWxkW107XHJcbn1cclxuXHJcbmludGVyZmFjZSBGaWVsZCB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHR5cGU6IHN0cmluZztcclxuICBjb2RlOiBzdHJpbmc7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICBub0xhYmVsOiBib29sZWFuO1xyXG4gIHJlcXVpcmVkOiBib29sZWFuO1xyXG4gIGxvb2t1cDogTG9va3VwO1xyXG59IFxyXG5cclxuaW50ZXJmYWNlIExvb2t1cCB7XHJcbiAgcmVsYXRlZEFwcDogUmVsYXRlZEFwcDtcclxuICByZWxhdGVkS2V5RmllbGQ6IHN0cmluZztcclxuICBmaWVsZE1hcHBpbmdzOiBGaWVsZE1hcHBpbmdbXTtcclxuICBsb29rdXBQaWNrZXJGaWVsZHM6IGFueVtdO1xyXG4gIGZpbHRlckNvbmQ6IHN0cmluZztcclxuICBzb3J0OiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBGaWVsZE1hcHBpbmcge1xyXG4gIGZpZWxkOiBzdHJpbmc7XHJcbiAgcmVsYXRlZEZpZWxkOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBSZWxhdGVkQXBwIHtcclxuICBhcHA6IHN0cmluZztcclxuICBjb2RlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBBcHAge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgY3JlYXRlZGF0ZTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQXV0b0xvb2tVcEFjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb24ge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgcHJvcHM6IElBdXRvTG9va1VwUHJvcHM7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLm5hbWUgPSBcIuODq+ODg+OCr+OCouODg+ODl+abtOaWsFwiO1xyXG4gICAgdGhpcy5hY3Rpb25Qcm9wcyA9IFtdO1xyXG4gICAgdGhpcy5wcm9wcyA9IHt9IGFzIElBdXRvTG9va1VwUHJvcHM7XHJcbiAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgfVxyXG5cclxuICAvKioqXHJcbiAgICog44Ki44Kv44K744K544Gu44Oh44Kk44Oz44Gu5Yem55CG6Zai5pWwXHJcbiAgICovXHJcbiAgYXN5bmMgcHJvY2VzcyhcclxuICAgIGFjdGlvbk5vZGU6IElBY3Rpb25Ob2RlLFxyXG4gICAgZXZlbnQ6IGFueSxcclxuICAgIGNvbnRleHQ6IElDb250ZXh0XHJcbiAgKTogUHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICB0aGlzLmFjdGlvblByb3BzID0gYWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgIHRoaXMucHJvcHMgPSB7XHJcbiAgICAgIC4uLmFjdGlvbk5vZGUuQWN0aW9uVmFsdWUsXHJcbiAgICAgIGNvbmRpdGlvbjogSlNPTi5wYXJzZSgoYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBhbnkpLmNvbmRpdGlvbiksXHJcbiAgICB9IGFzIElBdXRvTG9va1VwUHJvcHM7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhjb250ZXh0KTtcclxuXHJcbiAgICBsZXQgcmVzdWx0ID0ge1xyXG4gICAgICBjYW5OZXh0OiB0cnVlLFxyXG4gICAgICByZXN1bHQ6IFwiXCIsXHJcbiAgICB9IGFzIElBY3Rpb25SZXN1bHQ7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBsb29rVXBGaWVsZHMgPSB0aGlzLnByb3BzLmxvb2t1cEZpZWxkLmZpZWxkcy5maWx0ZXIoXHJcbiAgICAgICAgKGYpID0+IGYubG9va3VwICYmIGYubG9va3VwLnJlbGF0ZWRBcHAuYXBwID09PSBTdHJpbmcoa2ludG9uZS5hcHAuZ2V0SWQoKSlcclxuICAgICAgKTtcclxuICAgICAgaWYgKCFsb29rVXBGaWVsZHMgfHwgbG9va1VwRmllbGRzLmxlbmd0aD09PTApIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICBg44Or44OD44Kv44Ki44OD44OX44Gu6Kit5a6a44Gv5LiN5q2j44Gn44GZ44CCJHt0aGlzLnByb3BzLmxvb2t1cEZpZWxkLmZpZWxkc1swXS5sYWJlbH0gYFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbG9va1VwRmllbGQgPSB0aGlzLnByb3BzLmxvb2t1cEZpZWxkLmZpZWxkc1swXTsgXHJcbiAgICAgIGNvbnN0IGtleSA9IGV2ZW50LnJlY29yZFtsb29rVXBGaWVsZC5sb29rdXAucmVsYXRlZEtleUZpZWxkXS52YWx1ZTtcclxuICAgICAgY29uc3QgdGFyZ2V0UmVjb3JkcyA9IGF3YWl0IHRoaXMuZ2V0VXBkYXRlUmVjb3Jkcyhsb29rVXBGaWVsZCwga2V5KTtcclxuICAgICAgLy/mm7TmlrDlr77osaHjgYzjgarjgYTmmYLjgavjgrnjgq3jg4Pjg5dcclxuICAgICAgaWYodGFyZ2V0UmVjb3Jkcy5sZW5ndGg9PT0wKXtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHVwZGF0ZVJlY29yZHMgPSB0aGlzLmNvbnZlcnRGb3JMb29rdXAodGFyZ2V0UmVjb3Jkcyxsb29rVXBGaWVsZCxrZXkpO1xyXG4gICAgICBjb25zb2xlLmxvZyhcInVwZGF0ZVJlY29yZHNcIiwgdXBkYXRlUmVjb3Jkcyk7XHJcbiAgICAgIHRoaXMuc2hvd1NwaW5uZXJNb2RlbCh0aGlzLnByb3BzLmxvb2t1cEZpZWxkLmFwcCxsb29rVXBGaWVsZCk7XHJcbiAgICAgIGNvbnN0IHVwZGF0ZVJlc3VsdCA9IGF3YWl0IHRoaXMudXBkYXRlTG9va3VwVGFyZ2V0KHVwZGF0ZVJlY29yZHMpO1xyXG4gICAgICBpZih1cGRhdGVSZXN1bHQpe1xyXG4gICAgICAgIHRoaXMuc2hvd1Jlc3VsdCh0aGlzLnByb3BzLmxvb2t1cEZpZWxkLmFwcCxsb29rVXBGaWVsZCx1cGRhdGVSZWNvcmRzLmxlbmd0aCk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZURpYWxvZygpO1xyXG4gICAgICAgIGNvbnRleHQuZXJyb3JzLmhhbmRsZUVycm9yKGVycm9yLGFjdGlvbk5vZGUsXCLjg6vjg4Pjgq/jgqLjg4Pjg5fmm7TmlrDkuK3kvovlpJbjgYznmbrnlJ/jgZfjgb7jgZfjgZ9cIik7XHJcbiAgICAgICAgcmVzdWx0LmNhbk5leHQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSRVNUIEFQSeeUqOOCr+OCqOODquS9nOaIkFxyXG4gICAqIFRPRE865YWx6YCa6Zai5pWw44Go44GX44Gm5L2c5oiQXHJcbiAgICogQHBhcmFtIGxvb2tVcEZpZWxkIFxyXG4gICAqIEBwYXJhbSBrZXkgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgbWFrZVF1ZXJ5PShsb29rVXBGaWVsZDpGaWVsZCxrZXk6YW55KT0+e1xyXG4gICAgbGV0IHF1ZXJ5ID1cIlwiO1xyXG4gICAgaWYodHlwZW9mIGtleT09PSdudW1iZXInKXtcclxuICAgICAgcXVlcnkgPSBgJHtsb29rVXBGaWVsZC5jb2RlfSA9ICR7a2V5fWBcclxuICAgIH1cclxuICAgIGlmKHR5cGVvZiBrZXk9PT0nc3RyaW5nJyl7XHJcbiAgICAgIHF1ZXJ5ID0gYCR7bG9va1VwRmllbGQuY29kZX0gPSBcIiR7a2V5fVwiYFxyXG4gICAgfVxyXG4gICAgaWYodGhpcy5wcm9wcy5jb25kaXRpb24ucXVlcnlTdHJpbmchPT0nJyl7XHJcbiAgICAgIHF1ZXJ5ID0gYCR7cXVlcnl9IGFuZCAoJHt0aGlzLnByb3BzLmNvbmRpdGlvbi5xdWVyeVN0cmluZ30pYFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHF1ZXJ5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5pu05paw5a++6LGh44Gu44Os44Kz44O844OJ44KS5Y+W5b6X44GZ44KLXHJcbiAgICovXHJcbiAgZ2V0VXBkYXRlUmVjb3JkcyA9IGFzeW5jIChsb29rVXBGaWVsZDpGaWVsZCxrZXk6YW55KTpQcm9taXNlPCBSZWNvcmRbXT49PntcclxuICAgIGNvbnN0IGNsaWVudD1uZXcgS2ludG9uZVJlc3RBUElDbGllbnQoKTtcclxuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQucmVjb3JkLmdldEFsbFJlY29yZHMoe1xyXG4gICAgICBhcHA6dGhpcy5wcm9wcy5sb29rdXBGaWVsZC5hcHAuaWQsXHJcbiAgICAgIGZpZWxkczpbXCIkaWRcIl0sXHJcbiAgICAgIGNvbmRpdGlvbjp0aGlzLm1ha2VRdWVyeShsb29rVXBGaWVsZCxrZXkpXHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXNwO1xyXG4gIH1cclxuXHJcbiAvKipcclxuICAqIOODq+ODg+OCr+OCouODg+ODl+abtOaWsOeUqOODrOOCs+ODvOODieOBq+WkieaPm+OBmeOCi1xyXG4gICogQHBhcmFtIHRhcmdldFJlY29yZHMg5pu05paw5a++6LGh44Os44Kz44O844OJXHJcbiAgKiBAcGFyYW0gbG9va1VwRmllbGQg44Or44OD44Kv44Ki44OD44OX44OV44Kj44O844Or44OJXHJcbiAgKiBAcGFyYW0ga2V5IOODq+ODg+OCr+OCouODg+ODl+ODleOCo+ODvOODq+ODieOBruWApFxyXG4gICogQHJldHVybnMgXHJcbiAgKi9cclxuICBjb252ZXJ0Rm9yTG9va3VwID0gKHRhcmdldFJlY29yZHM6UmVjb3JkW10sbG9va1VwRmllbGQ6RmllbGQsa2V5OmFueSk6QXJyYXk8YW55Pj0+e1xyXG4gICAgcmV0dXJuIHRhcmdldFJlY29yZHMubWFwKChyKSA9PiAoe1xyXG4gICAgICBpZDogTnVtYmVyKHJbXCIkaWRcIl0udmFsdWUpLFxyXG4gICAgICByZWNvcmQ6IHsgW2xvb2tVcEZpZWxkLmNvZGVdOiB7IHZhbHVlOiBrZXkgfSB9LFxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog44Or44OD44Kv44Ki44OD44OX5YWI44KS5pu05paw44GZ44KLXHJcbiAgICogQHBhcmFtIHVwZGF0ZVJlY29yZHMgXHJcbiAgICovXHJcbiAgdXBkYXRlTG9va3VwVGFyZ2V0ID0gYXN5bmMgKHVwZGF0ZVJlY29yZHM6QXJyYXk8YW55Pik6UHJvbWlzZTxib29sZWFuPj0+e1xyXG4gICAgaWYgKHVwZGF0ZVJlY29yZHMgJiYgdXBkYXRlUmVjb3Jkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRyeXtcclxuICAgICAgICBjb25zdCBjbGllbnQ9bmV3IEtpbnRvbmVSZXN0QVBJQ2xpZW50KCk7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnJlY29yZC51cGRhdGVBbGxSZWNvcmRzKHtcclxuICAgICAgICAgIGFwcDp0aGlzLnByb3BzLmxvb2t1cEZpZWxkLmFwcC5pZCxcclxuICAgICAgICAgIHJlY29yZHM6dXBkYXRlUmVjb3Jkc1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9Y2F0Y2goZXJyb3IgKXtcclxuICAgICAgICBpZihlcnJvciBpbnN0YW5jZW9mIEtpbnRvbmVBbGxSZWNvcmRzRXJyb3Ipe1xyXG4gICAgICAgICAgdGhpcy5zaG93RXJyb3IodGhpcy5wcm9wcy5sb29rdXBGaWVsZC5hcHAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmxvb2t1cEZpZWxkLmZpZWxkc1swXSwgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgYXMgS2ludG9uZUFsbFJlY29yZHNFcnJvcix1cGRhdGVSZWNvcmRzLmxlbmd0aCk7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9IFxyXG4gICAgICB9XHJcbiAgICAgIC8vIGF3YWl0IGtpbnRvbmUuYXBpKGtpbnRvbmUuYXBpLnVybChcIi9rL3YxL3JlY29yZHMuanNvblwiLCB0cnVlKSwgXCJQVVRcIiwge1xyXG4gICAgICAvLyAgIGFwcDogdGhpcy5wcm9wcy5sb29rdXBGaWVsZC5hcHAuaWQsXHJcbiAgICAgIC8vICAgcmVjb3JkczogdXBkYXRlUmVjb3Jkc1xyXG4gICAgICAvLyB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOabtOaWsOS4reOBruODgOOCpOOCouODreOCsOihqOekulxyXG4gICAqIEBwYXJhbSBhcHAgXHJcbiAgICovXHJcbiAgc2hvd1NwaW5uZXJNb2RlbCA9IChhcHA6QXBwLGxvb2t1cDpGaWVsZCkgPT4ge1xyXG4gICAgbGV0IGRpYWxvZyA9ICQoXCIjYWxjTG9va3VwTW9kYWxcIik7XHJcbiAgICBpZihkaWFsb2cubGVuZ3RoPT09MCl7XHJcbiAgICAgIGNvbnN0IG1vZGFsSFRNTCA9IGA8ZGl2IGNsYXNzPVwiYnMtc2NvcGVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJhbGNMb29rdXBNb2RhbFwiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWxhYmVsbGVkYnk9XCJzdGF0aWNCYWNrZHJvcExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZy1jZW50ZXJlZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJtb2RhbC10aXRsZSBmcy01XCIgaWQ9XCJhbGNMb29rdXBNb2RhbExhYmVsXCI+44Or44OD44Kv44Ki44OD44OX5ZCM5pyf5Yem55CGPC9oMT5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBpZD1cImFwcCR7YXBwLmlkfV8ke2xvb2t1cC5jb2RlfVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1zZWNvbmRhcnkgY29sLTEgXCIgcm9sZT1cImFsZXJ0XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj4ke2FwcC5uYW1lfTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj5PSzwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PmA7XHJcbiAgICAgICQobW9kYWxIVE1MKS5hcHBlbmRUbyhcImJvZHlcIik7XHJcbiAgICAgIGRpYWxvZyA9ICQoXCIjYWxjTG9va3VwTW9kYWxcIik7XHJcbiAgICAgIGRpYWxvZy5nZXQoKVswXS5hZGRFdmVudExpc3RlbmVyKCdoaWRkZW4uYnMubW9kYWwnLChldik9PntcclxuICAgICAgICBNb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKGRpYWxvZy5nZXQoKVswXSkuZGlzcG9zZSgpO1xyXG4gICAgICAgICQoXCIjYWxjTG9va3VwTW9kYWxcIikucGFyZW50KCkucmVtb3ZlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIGNvbnN0IGRpYWxvZ0JvZHk9JChcIiNhbGNMb29rdXBNb2RhbCAubW9kYWwtYm9keVwiKTtcclxuICAgICAgY29uc3QgaHRtbHJvdz1gIFxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIGlkPVwiYXBwJHthcHAuaWR9XyR7bG9va3VwLmNvZGV9XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlciB0ZXh0LXNlY29uZGFyeSBjb2wtMSBcIiByb2xlPVwiYWxlcnRcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj4ke2FwcC5uYW1lfTwvZGl2PlxyXG4gICAgICAgICAgPGRpdj5gO1xyXG4gICAgICBkaWFsb2dCb2R5LmFwcGVuZChodG1scm93KTtcclxuICAgIH1cclxuICAgIE1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UoZGlhbG9nLmdldCgpWzBdKS5zaG93KCk7IFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5pu05paw57WQ5p6c44KS6KGo56S644GZ44KLXHJcbiAgICogQHBhcmFtIGFwcCDjgIDmm7TmlrDlhYjjgqLjg5fjg6rmg4XloLFcclxuICAgKiBAcGFyYW0gY291bnQg5pu05paw5Lu25pWwXHJcbiAgICovXHJcbiAgc2hvd1Jlc3VsdD0oYXBwOkFwcCxsb29rdXA6RmllbGQsY291bnQ6bnVtYmVyKT0+e1xyXG4gICAgY29uc3QgZGlhbG9nQm9keT0kKGAjYWxjTG9va3VwTW9kYWwgLm1vZGFsLWJvZHkgI2FwcCR7YXBwLmlkfV8ke2xvb2t1cC5jb2RlfWApO1xyXG4gICAgY29uc3QgaHRtbD1gICAgIDxkaXYgY2xhc3M9XCJjb2wtMSB0ZXh0LXN1Y2Nlc3NcIj7inJQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+JHthcHAubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+5pu05paw5Lu25pWwOiR7Y291bnR95Lu2PC9kaXY+YDtcclxuICAgIGRpYWxvZ0JvZHkuaHRtbChodG1sKTtcclxuICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICog5pu05paw57WQ5p6c44KS6KGo56S644GZ44KLXHJcbiAgICogQHBhcmFtIGFwcCDjgIDmm7TmlrDlhYjjgqLjg5fjg6rmg4XloLFcclxuICAgKiBAcGFyYW0gY291bnQg5pu05paw5Lu25pWwXHJcbiAgICovXHJcbiAgICBzaG93RXJyb3I9KGFwcDpBcHAsbG9va3VwOkZpZWxkLGVycm9yOktpbnRvbmVBbGxSZWNvcmRzRXJyb3IsYWxsQ291bnQ6TnVtYmVyKT0+e1xyXG4gICAgICBjb25zdCBtZXNzYWdlPWVycm9yLmVycm9yLm1lc3NhZ2U7XHJcbiAgICAgIGNvbnN0IHByb1JlY29yZHMgPSBlcnJvci5udW1PZlByb2Nlc3NlZFJlY29yZHM7XHJcbiAgICAgIGNvbnN0IGFsbFJlY29yZHM9ZXJyb3IubnVtT2ZBbGxSZWNvcmRzO1xyXG4gICAgICBjb25zdCBkaWFsb2dCb2R5PSQoYCNhbGNMb29rdXBNb2RhbCAubW9kYWwtYm9keSAjYXBwJHthcHAuaWR9XyR7bG9va3VwLmNvZGV9YCk7XHJcbiAgICAgIGNvbnN0IGh0bWw9YDxkaXYgY2xhc3M9XCJjb2wtMSB0ZXh0LWRhbmdlclwiPuKcljwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+JHthcHAubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPuabtOaWsOS7tuaVsDoke3Byb1JlY29yZHN9LyR7YWxsUmVjb3Jkc308L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyB0ZXh0LWRhbmdlclwiPiR7bWVzc2FnZX08ZGl2PmA7XHJcbiAgICAgIGRpYWxvZ0JvZHkuaHRtbChodG1sKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICog44OA44Kk44Ki44Ot44Kw55S76Z2i44KS6ZaJ44GY44KLXHJcbiAgICAgKi9cclxuICAgIGNsb3NlRGlhbG9nPSgpPT57XHJcbiAgICAgIGNvbnN0IGRpYWxvZyA9ICQoXCIjYWxjTG9va3VwTW9kYWxcIik7XHJcbiAgICAgIE1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UoZGlhbG9nLmdldCgpWzBdKS5kaXNwb3NlKCk7XHJcbiAgICAgICQoXCIjYWxjTG9va3VwTW9kYWxcIikucGFyZW50KCkucmVtb3ZlKCk7XHJcbiAgICB9XHJcblxyXG4gIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV0gPSB0aGlzO1xyXG4gIH1cclxufVxyXG5cclxubmV3IEF1dG9Mb29rVXBBY3Rpb24oKTsiLCJcclxuaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgIElBY3Rpb24sSUFjdGlvblJlc3VsdCwgSUFjdGlvbk5vZGUsIElBY3Rpb25Qcm9wZXJ0eSwgSUZpZWxkLCBJQ29udGV4dCB9IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG5pbXBvcnQgeyBDb25kaXRpb25UcmVlIH0gZnJvbSAnLi4vdHlwZXMvQ29uZGl0aW9ucyc7XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJRGlzYWJsZVByb3Bze1xyXG4gICAgLy/lr77osaHjg5XjgqPjg7zjg6vjg4lcclxuICAgIGZpZWxkOklGaWVsZDtcclxuICAgIC8v57eo6ZuG5Y+vL+S4jeWPr+ioreWumlxyXG4gICAgZWRpdGFibGU6J+e3qOmbhuWPryd8J+e3qOmbhuS4jeWPryd8Jyc7IFxyXG4gICAgY29uZGl0aW9uOnN0cmluZztcclxufVxyXG4vKipcclxuICog57eo6ZuG5Y+v77yP5LiN5Y+v44Ki44Kv44K344On44OzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRmllbGREaXNhYmxlQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbntcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICAgIHByb3BzOklEaXNhYmxlUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMubmFtZT1cIue3qOmbhuWPr++8j+S4jeWPr1wiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9W107XHJcbiAgICAgICB0aGlzLnByb3BzPXtcclxuICAgICAgICAgICAgZmllbGQ6e2NvZGU6Jyd9LFxyXG4gICAgICAgICAgICBlZGl0YWJsZTonJyxcclxuICAgICAgICAgICAgY29uZGl0aW9uOicnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v44Ki44Kv44K344On44Oz44KS55m76Yyy44GZ44KLXHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiDjgqLjgq/jgrfjg6fjg7Pjga7lrp/ooYzjgpLlkbzjgbPlh7rjgZlcclxuICAgICAqIEBwYXJhbSBhY3Rpb25Ob2RlIFxyXG4gICAgICogQHBhcmFtIGV2ZW50IFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHByb2Nlc3MoYWN0aW9uTm9kZTpJQWN0aW9uTm9kZSxldmVudDphbnksY29udGV4dDpJQ29udGV4dCk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdD17XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9YWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgaWYgKCEoJ2ZpZWxkJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdlZGl0YWJsZScgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBJRGlzYWJsZVByb3BzO1xyXG4gICAgICAgICAgICAvL+adoeS7tuW8j+OBruioiOeul+e1kOaenOOCkuWPluW+l1xyXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb25SZXN1bHQgPSB0aGlzLmdldENvbmRpdGlvblJlc3VsdChjb250ZXh0KTtcclxuICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gZXZlbnQucmVjb3JkO1xyXG4gICAgICAgICAgICBpZighKHRoaXMucHJvcHMuZmllbGQuY29kZSBpbiByZWNvcmQpKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg44OV44Kj44O844Or44OJ44CMJHt0aGlzLnByb3BzLmZpZWxkLmNvZGV944CN44GM6KaL44Gk44GL44KK44G+44Gb44KT44CCYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoY29uZGl0aW9uUmVzdWx0KXtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMucHJvcHMuZWRpdGFibGU9PT0n57eo6ZuG5Y+vJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0uZGlzYWJsZWQ9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZiAodGhpcy5wcm9wcy5lZGl0YWJsZT09PSfnt6jpm4bkuI3lj68nKXtcclxuICAgICAgICAgICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS5kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdD0ge1xyXG4gICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDp0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9Y2F0Y2goZXJyb3Ipe1xyXG4gICAgICAgICAgICBjb250ZXh0LmVycm9ycy5oYW5kbGVFcnJvcihlcnJvcixhY3Rpb25Ob2RlKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQ9ZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb250ZXh0IOadoeS7tuW8j+OCkuWun+ihjOOBmeOCi1xyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgZ2V0Q29uZGl0aW9uUmVzdWx0KGNvbnRleHQ6YW55KTpib29sZWFue1xyXG4gICAgICAgIGNvbnN0IHRyZWUgPXRoaXMuZ2V0Q29uZGl0aW9uKHRoaXMucHJvcHMuY29uZGl0aW9uKTtcclxuICAgICAgICBpZighdHJlZSl7XHJcbiAgICAgICAgICAgIC8v5p2h5Lu244KS6Kit5a6a44GV44KM44Gm44GE44G+44Gb44KTXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJlZS5ldmFsdWF0ZSh0cmVlLnJvb3QsY29udGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gY29uZGl0aW9uIOadoeS7tuW8j+ODhOODquODvOOCkuWPluW+l+OBmeOCi1xyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgZ2V0Q29uZGl0aW9uKGNvbmRpdGlvbjpzdHJpbmcpOkNvbmRpdGlvblRyZWV8bnVsbHtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyZWUgPSBuZXcgQ29uZGl0aW9uVHJlZSgpO1xyXG4gICAgICAgICAgICB0cmVlLmZyb21Kc29uKGNvbmRpdGlvbik7XHJcbiAgICAgICAgICAgIGlmKHRyZWUuZ2V0Q29uZGl0aW9ucyh0cmVlLnJvb3QpLmxlbmd0aD4wKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cmVlO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbn1cclxubmV3IEZpZWxkRGlzYWJsZUFjdGlvbigpOyIsIlxyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tIFwiQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvY2xpZW50L3R5cGVzXCI7XHJcbmltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7ICBJQWN0aW9uLElBY3Rpb25SZXN1bHQsIElBY3Rpb25Ob2RlLCBJQWN0aW9uUHJvcGVydHksIElGaWVsZCwgSUNvbnRleHQgfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuaW1wb3J0IHsgQ29uZGl0aW9uVHJlZSB9IGZyb20gJy4uL3R5cGVzL0NvbmRpdGlvbnMnO1xyXG5cclxudHlwZSBUZXh0U3R5bGUgPSBcIuWkquWtl1wiIHwgXCLmlpzkvZNcIiB8IFwi5LiL57eaXCIgfCBcIuaJk+OBoea2iOOBl+e3mlwiO1xyXG50eXBlIFN0eWxlUmlnaW9uID0gXCLmm7jlvI/lpInmm7Tjg5XjgqPjg7zjg6vjg4lcIiB8IFwi6KGM5YWo5L2TXCJ8XCJcIjtcclxuXHJcblxyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44Gu5bGe5oCn5a6a576pXHJcbiAqL1xyXG5pbnRlcmZhY2UgSVN0eWxlRmllbGRQcm9wc3tcclxuICAgIGZpZWxkOklGaWVsZDtcclxuICAgIGZvbnRDb2xvcjpzdHJpbmc7IFxyXG4gICAgYmdDb2xvcjpzdHJpbmc7XHJcbiAgICBmb250U3R5bGU6VGV4dFN0eWxlW107XHJcbiAgICBhbGxSb3c6U3R5bGVSaWdpb247XHJcbiAgICBjb25kaXRpb246c3RyaW5nO1xyXG59XHJcbi8qKlxyXG4gKiDmnaHku7bmm7jlvI/ooajnpLrjgqLjgq/jgrfjg6fjg7NcclxuICovXHJcbmV4cG9ydCBjbGFzcyBTdHlsZUZpZWxkQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbntcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICAgIHByb3BzOklTdHlsZUZpZWxkUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMubmFtZT1cIuadoeS7tuabuOW8j+ihqOekulwiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9W107XHJcbiAgICAgICB0aGlzLnByb3BzPXtcclxuICAgICAgICAgICAgZmllbGQ6e2NvZGU6Jyd9LFxyXG4gICAgICAgICAgICBmb250Q29sb3I6JycsXHJcbiAgICAgICAgICAgIGJnQ29sb3I6JycsXHJcbiAgICAgICAgICAgIGZvbnRTdHlsZTpbXSxcclxuICAgICAgICAgICAgYWxsUm93OicnLFxyXG4gICAgICAgICAgICBjb25kaXRpb246JydcclxuICAgICAgICB9XHJcbiAgICAgICAgLy/jgqLjgq/jgrfjg6fjg7PjgpLnmbvpjLLjgZnjgotcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGUgXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSxjb250ZXh0OklDb250ZXh0KTpQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgICAgICBsZXQgcmVzdWx0PXtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgLy/lsZ7mgKfoqK3lrprjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1hY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICBpZiAoISgnZmllbGQnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ2FsbFJvdycgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBJU3R5bGVGaWVsZFByb3BzO1xyXG4gICAgICAgICAgICAvL+abuOW8j+ioreWumlxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhldmVudC50eXBlKVxyXG4gICAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJhcHAucmVjb3JkLmluZGV4LnNob3dcIikge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0U3R5bGVGb3JWaWV3KGV2ZW50LCB0aGlzLnByb3BzLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSBcImFwcC5yZWNvcmQuZGV0YWlsLnNob3dcIikge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0U3R5bGVGb3JEZXRhaWwoZXZlbnQsIHRoaXMucHJvcHMsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgIGV2ZW50LnR5cGUuaW5jbHVkZXMoXCJhcHAucmVjb3JkLmNyZWF0ZS5jaGFuZ2UuXCIpIHx8XHJcbiAgICAgICAgICAgICAgZXZlbnQudHlwZS5pbmNsdWRlcyhcImFwcC5yZWNvcmQuZWRpdC5jaGFuZ2UuXCIpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0U3R5bGVGb3JFZGl0KGV2ZW50LCB0aGlzLnByb3BzLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXN1bHQ9IHtcclxuICAgICAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDp0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9Y2F0Y2goZXJyb3Ipe1xyXG4gICAgICAgICAgICBjb250ZXh0LmVycm9ycy5oYW5kbGVFcnJvcihlcnJvcixhY3Rpb25Ob2RlKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQ9ZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXRTdHlsZUZvckVkaXQoZXZlbnQ6YW55LHByb3BzOklTdHlsZUZpZWxkUHJvcHMsY29udGV4dDpJQ29udGV4dCl7XHJcbiAgICAgICAgY29uc3QgcmVjb3JkVGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVjb3JkLWdhaWEnKTtcclxuICAgICAgICBpZiAocmVjb3JkVGFibGUpIHtcclxuICAgICAgICAgICAgQXJyYXkuZnJvbShcclxuICAgICAgICAgICAgICByZWNvcmRUYWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNwYW5cIilcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIC5maWx0ZXIoKHNwYW4pID0+IHNwYW4uaW5uZXJUZXh0ID09PSBwcm9wcy5maWVsZC5jb2RlKVxyXG4gICAgICAgICAgICAgIC5tYXAoKHNwYW4pID0+XHJcbiAgICAgICAgICAgICAgICBzcGFuLnBhcmVudEVsZW1lbnQ/Lm5leHRFbGVtZW50U2libGluZ1xyXG4gICAgICAgICAgICAgICAgICA/LnF1ZXJ5U2VsZWN0b3IoXCIuaW5wdXQtdGV4dC1vdXRlci1jeWJvenVcIilcclxuICAgICAgICAgICAgICAgICAgPy5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudCB8IG51bGxcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgLmZpbHRlcigoaW5wdXRFbGVtZW50KTogaW5wdXRFbGVtZW50IGlzIEhUTUxFbGVtZW50ID0+ICEhaW5wdXRFbGVtZW50KVxyXG4gICAgICAgICAgICAgIC5mb3JFYWNoKChpbnB1dEVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuZ2V0Q29uZGl0aW9uUmVzdWx0KFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldENvbmRpdGlvbihwcm9wcy5jb25kaXRpb24pLFxyXG4gICAgICAgICAgICAgICAgICBjb250ZXh0XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RmllbGRTdHlsZShwcm9wcywgaW5wdXRFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGlucHV0RWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBcclxuXHJcbiAgICAvKipcclxuICAgICAqIOips+e0sOihqOekuuaZguOBruOCueOCv+OCpOODq+ioreWumlxyXG4gICAgICogQHBhcmFtIGV2ZW50IFxyXG4gICAgICogQHBhcmFtIHByb3BzIFxyXG4gICAgICogQHBhcmFtIGNvbnRleHQgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgc2V0U3R5bGVGb3JEZXRhaWwoZXZlbnQ6YW55LHByb3BzOklTdHlsZUZpZWxkUHJvcHMsY29udGV4dDpJQ29udGV4dCl7XHJcbiAgICAgICAgY29uc3QgZWxlbSA9IGtpbnRvbmUuYXBwLnJlY29yZC5nZXRGaWVsZEVsZW1lbnQocHJvcHMuZmllbGQuY29kZSk7XHJcbiAgICAgICAgaWYoIWVsZW0pe1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBcclxuICAgICAgICBjb25zdCB0cmVlID0gdGhpcy5nZXRDb25kaXRpb24ocHJvcHMuY29uZGl0aW9uKTtcclxuICAgICAgICBjb25zdCBjb25kaXRpb25SZXN1bHQgPSB0aGlzLmdldENvbmRpdGlvblJlc3VsdCh0cmVlLGNvbnRleHQpO1xyXG4gICAgICAgIGlmKGNvbmRpdGlvblJlc3VsdCl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RmllbGRTdHlsZShwcm9wcyxlbGVtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDkuIDopqfooajnpLrmmYLjga7mm7jlvI/oqK3lrppcclxuICAgICAqIEBwYXJhbSBldmVudCBcclxuICAgICAqIEBwYXJhbSBwcm9wcyBcclxuICAgICAqIEBwYXJhbSBjb250ZXh0IFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIHNldFN0eWxlRm9yVmlldyhldmVudDphbnkscHJvcHM6SVN0eWxlRmllbGRQcm9wcyxjb250ZXh0OklDb250ZXh0KXtcclxuICAgICAgICBjb25zdCByZWNvcmRzOlJlY29yZFtdID0gZXZlbnQucmVjb3JkcztcclxuICAgICAgICBjb25zdCBjZWxscyA9IGtpbnRvbmUuYXBwLmdldEZpZWxkRWxlbWVudHMocHJvcHMuZmllbGQuY29kZSk7XHJcbiAgICAgICAgaWYoIWNlbGxzKXtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZWxlbSA6SFRNTEVsZW1lbnR8bnVsbDtcclxuICAgICAgICBjb25zdCBjb25kaXRpb25UcmVlID0gdGhpcy5nZXRDb25kaXRpb24ocHJvcHMuY29uZGl0aW9uKTtcclxuICAgICAgICByZWNvcmRzLmZvckVhY2goKHJlY29yZDpSZWNvcmQsaW5kZXg6bnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJDb250ZXh0OklDb250ZXh0ID0ge1xyXG4gICAgICAgICAgICAgICAgdmFyaWFibGVzOmNvbnRleHQudmFyaWFibGVzLFxyXG4gICAgICAgICAgICAgICAgcmVjb3JkOnJlY29yZCxcclxuICAgICAgICAgICAgICAgIGVycm9yczpjb250ZXh0LmVycm9yc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuZ2V0Q29uZGl0aW9uUmVzdWx0KGNvbmRpdGlvblRyZWUsY3VyckNvbnRleHQpO1xyXG4gICAgICAgICAgICBpZihjb25kaXRpb25SZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgZWxlbSA9IGNlbGxzW2luZGV4XTtcclxuICAgICAgICAgICAgICAgIGlmKHByb3BzLmFsbFJvdz09PVwi6KGM5YWo5L2TXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW0gPSBjZWxsc1tpbmRleF0ucGFyZW50RWxlbWVudDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmKGVsZW0pe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RmllbGRTdHlsZShwcm9wcyxlbGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gcHJvcHMgSHRtbEVsZW1lbnTmm7jlvI/oqK3lrppcclxuICAgICAqL1xyXG4gICAgc2V0RmllbGRTdHlsZShwcm9wczpJU3R5bGVGaWVsZFByb3BzLGVsZW06SFRNTEVsZW1lbnQpe1xyXG4gICAgICAgXHJcbiAgICAgICAgICAgIGlmKHByb3BzLmZvbnRDb2xvcil7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnN0eWxlLmNvbG9yPXByb3BzLmZvbnRDb2xvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihwcm9wcy5iZ0NvbG9yKXtcclxuICAgICAgICAgICAgICAgIGVsZW0uc3R5bGUuYmFja2dyb3VuZENvbG9yPXByb3BzLmJnQ29sb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYocHJvcHMuZm9udFN0eWxlLmxlbmd0aD4wKXtcclxuICAgICAgICAgICAgICAgIGlmKHByb3BzLmZvbnRTdHlsZS5pbmNsdWRlcyhcIuaWnOS9k1wiKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5zdHlsZS5mb250U3R5bGU9XCJpdGFsaWNcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuIFxyXG4gICAgICAgICAgICAgICAgaWYocHJvcHMuZm9udFN0eWxlLmluY2x1ZGVzKFwi5aSq5a2XXCIpKXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtLnN0eWxlLmZvbnRXZWlnaHQgPSBcImJvbGRcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCB0ZXh0RGVjb3JhdGlvbj1cIlwiO1xyXG4gICAgICAgICAgICAgICAgaWYocHJvcHMuZm9udFN0eWxlLmluY2x1ZGVzKFwi5LiL57eaXCIpKXtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbj1cInVuZGVybGluZVwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYocHJvcHMuZm9udFN0eWxlLmluY2x1ZGVzKFwi5omT44Gh5raI44GX57eaXCIpKXtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbiA9IHRleHREZWNvcmF0aW9uPyB0ZXh0RGVjb3JhdGlvbiArIFwiIGxpbmUtdGhyb3VnaFwiOlwibGluZS10aHJvdWdoXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZih0ZXh0RGVjb3JhdGlvbil7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5zdHlsZS50ZXh0RGVjb3JhdGlvbj10ZXh0RGVjb3JhdGlvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5p2h5Lu25byP44KS5a6f6KGM44GZ44KLXHJcbiAgICAgKiBAcGFyYW0gdHJlZSDmnaHku7blvI/jgqrjg5bjgrjjgqfjgq/jg4hcclxuICAgICAqIEBwYXJhbSBjb250ZXh0IFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIGdldENvbmRpdGlvblJlc3VsdCh0cmVlOkNvbmRpdGlvblRyZWV8bnVsbCwgY29udGV4dDphbnkpOmJvb2xlYW57XHJcbiAgICAgICAgaWYoIXRyZWUpe1xyXG4gICAgICAgICAgICAvL+adoeS7tuOCkuioreWumuOBleOCjOOBpuOBhOOBvuOBm+OCk1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRyZWUuZXZhbHVhdGUodHJlZS5yb290LGNvbnRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIGNvbmRpdGlvbiDmnaHku7blvI/jg4Tjg6rjg7zjgpLlj5blvpfjgZnjgotcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGdldENvbmRpdGlvbihjb25kaXRpb246c3RyaW5nKTpDb25kaXRpb25UcmVlfG51bGx7XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlID0gbmV3IENvbmRpdGlvblRyZWUoKTtcclxuICAgICAgICAgICAgdHJlZS5mcm9tSnNvbihjb25kaXRpb24pO1xyXG4gICAgICAgICAgICBpZih0cmVlLmdldENvbmRpdGlvbnModHJlZS5yb290KS5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJlZTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1jYXRjaChlcnJvcil7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlcigpOiB2b2lkIHtcclxuICAgICAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXT10aGlzO1xyXG4gICAgfVxyXG59XHJcbm5ldyBTdHlsZUZpZWxkQWN0aW9uKCk7IiwiaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgSUFjdGlvbiwgSUFjdGlvblJlc3VsdCwgSUFjdGlvbk5vZGUsIElBY3Rpb25Qcm9wZXJ0eSwgSUZpZWxkICxJQ29udGV4dCwgSVZhck5hbWV9IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG5cclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+OBruWxnuaAp+Wumue+qVxyXG4gKi9cclxuaW50ZXJmYWNlIElEYXRlVGltZUNhbGNQcm9wc3tcclxuICAgIHZlck5hbWU6SVZhck5hbWU7XHJcbiAgICBjYWxjT3B0aW9uOnN0cmluZztcclxuICAgIHJlc3VsdFZlck5hbWU6c3RyaW5nO1xyXG4gICAgeWVhcjpzdHJpbmc7XHJcbiAgICBtb250aDpzdHJpbmc7XHJcbiAgICBkYXRlOnN0cmluZztcclxuICAgIGhvdXI6c3RyaW5nO1xyXG4gICAgbWludXRlOnN0cmluZztcclxuICAgIHNlY29uZDpzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIERhdGVUaW1lQ2FsY0FjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb257XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgICBwcm9wczpJRGF0ZVRpbWVDYWxjUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMubmFtZT1cIuaXpeaZguOCkuWKoOeul++8j+a4m+eul+OBmeOCi1wiOy8vIERC44Gr55m76Yyy44GX44Gf44Ki44Kv44K344On44Oz5ZCNXHJcbiAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1bXTtcclxuICAgICAgICAvL+ODl+ODreODkeODhuOCo+WxnuaAp+OBruWIneacn+WMllxyXG4gICAgICAgIHRoaXMucHJvcHM9e1xyXG4gICAgICAgICAgICB2ZXJOYW1lOntuYW1lOicnfSxcclxuICAgICAgICAgICAgY2FsY09wdGlvbjonJyxcclxuICAgICAgICAgICAgcmVzdWx0VmVyTmFtZTonJyxcclxuICAgICAgICAgICAgeWVhcjpcIjBcIixcclxuICAgICAgICAgICAgbW9udGg6XCIwXCIsXHJcbiAgICAgICAgICAgIGRhdGU6XCIwXCIsXHJcbiAgICAgICAgICAgIGhvdXI6XCIwXCIsXHJcbiAgICAgICAgICAgIG1pbnV0ZTpcIjBcIixcclxuICAgICAgICAgICAgc2Vjb25kOlwiMFwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v44Ki44Kv44K344On44Oz44KS55m76Yyy44GZ44KLXHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Z+65rqW5pel44Go44Gq44KL5aSJ5pWw44Gu5YCk44GM44CB5pel5LuY44O75pel5pmC44Gu5b2i5byP44Gn44GC44KL44GL44CB5Yik5pat44GZ44KLXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0ZVZhbHVlXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNEYXRlVmFsdWUoZGF0ZVZhbHVlIDpzdHJpbmcpe1xyXG4gICAgICAgIGxldCBkYXRlO1xyXG5cclxuICAgICAgICAvL+ato+imj+ihqOePvuODgeOCp+ODg+OCr1xyXG4gICAgICAgIGxldCBzaW5nbGVEaWdpdE1vbnRoID0gZGF0ZVZhbHVlLm1hdGNoKC8oXFxkezR9KS0oXFxkezF9KS0oXFxkezF9KSQvKTsvLzTmoYHjga7mlbDlrZctMeahgeOBruaVsOWtly0y5qGB44Gu5pWw5a2XXHJcbiAgICAgICAgbGV0IHR3b0RpZ2l0TW9udGggPSBkYXRlVmFsdWUubWF0Y2goLyhcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pJC8pOy8vNOahgeOBruaVsOWtly0y5qGB44Gu5pWw5a2XLTLmoYHjga7mlbDlrZdcclxuICAgICAgICBsZXQgc2luZ2xlRGlnaXREYXRlID0gZGF0ZVZhbHVlLm1hdGNoKC8oXFxkezR9KS0oXFxkezJ9KS0oXFxkezF9KSQvKTsvLzTmoYHjga7mlbDlrZctMuahgeOBruaVsOWtly0x5qGB44Gu5pWw5a2XXHJcbiAgICAgICAgbGV0IHR3b0RpZ2l0RGF0ZSA9IGRhdGVWYWx1ZS5tYXRjaCgvKFxcZHs0fSktKFxcZHsxfSktKFxcZHsyfSkkLyk7Ly805qGB44Gu5pWw5a2XLTHmoYHjga7mlbDlrZctMuahgeOBruaVsOWtl1xyXG4gICAgICAgIGxldCBkYXRlVGltZU1pbGxpU2Vjb25kID0gZGF0ZVZhbHVlLm1hdGNoKC8oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KVQoXFxkezJ9KTooXFxkezJ9KTooXFxkezJ9KS4oXFxkezIsM30pWiQvKTsvL+aZguWIu+WFpeOCiuOBrlVUQ+OBruaXpeS7mOW9ouW8jyjjg5/jg6rnp5IpXHJcbiAgICAgICAgbGV0IGRhdGVUaW1lID0gZGF0ZVZhbHVlLm1hdGNoKC8oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KVQoXFxkezJ9KTooXFxkezJ9KTooXFxkezJ9KVokLyk7Ly/mmYLliLvlhaXjgorjga5VVEPjga7ml6Xku5jlvaLlvI9cclxuXHJcbiAgICAgICAgLy9kYXRl5Z6L44Gr5aSJ5o+bXHJcbiAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGVWYWx1ZSk7XHJcblxyXG4gICAgICAgIC8vZGF0ZeWei+WkieaPm+OBp+OBjeOBn+OBi+eiuuiqjVxyXG4gICAgICAgIGlmKGRhdGUgIT09IHVuZGVmaW5lZCAmJiAhaXNOYU4oZGF0ZS5nZXREYXRlKCkpKXtcclxuICAgICAgICAgICAgLy/mraPopo/ooajnj77jg4Hjgqfjg4Pjgq/norroqo1cclxuICAgICAgICAgICAgaWYodHdvRGlnaXRNb250aCA9PT0gbnVsbCAmJiBzaW5nbGVEaWdpdE1vbnRoID09PSBudWxsICYmIHNpbmdsZURpZ2l0RGF0ZSA9PT0gbnVsbCAmJiB0d29EaWdpdERhdGUgPT09IG51bGwgJiYgZGF0ZVRpbWUgPT09IG51bGwgJiYgZGF0ZVRpbWVNaWxsaVNlY29uZCA9PT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLoqIjnrpfjga7ln7rmupbml6XjgajjgarjgovlgKTjgYzjgIHpganliIfjgarml6Xku5jjg7vml6XmmYLjga7lvaLlvI/jgafjga/jgYLjgorjgb7jgZvjgpPjgILjgIzml6XmmYLjgpLliqDnrpcv5rib566X44GZ44KL44CN44Kz44Oz44Od44O844ON44Oz44OI44Gu5Yem55CG44KS5Lit5pat44GX44G+44GX44Gf44CCXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5YCk44KS5pWw5YCk44Gr5aSJ5o+b44GZ44KLXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gY29udGV4dFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNhbGNWYWx1ZSxjYWxjT3B0aW9uXHJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB2YWx1ZVRvTnVtYmVyKGNvbnRleHQgOmFueSxjYWxjVmFsdWUgOnN0cmluZyxjYWxjT3B0aW9uIDpzdHJpbmcpOiBudW1iZXJ7XHJcblxyXG4gICAgICAgIGNvbnN0IGdldENvbnRleHRWYXJCeVBhdGggPSAob2JqOiBhbnksIHBhdGg6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gcGF0aC5zcGxpdChcIi5cIikucmVkdWNlKChvLCBrKSA9PiAobyB8fCB7fSlba10sIG9iaik7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy/oqIjnrpflgKTjgYzlpInmlbDjga7loLTlkIjjga/jgIHlpInmlbDjga7lgKTjgpLlj5blvpdcclxuICAgICAgICBpZihjYWxjT3B0aW9uID09PSBcIuWkieaVsFwiICYmIGlzTmFOKE51bWJlcihjYWxjVmFsdWUpKSl7XHJcbiAgICAgICAgICAgIGNhbGNWYWx1ZSA9IGdldENvbnRleHRWYXJCeVBhdGggKGNvbnRleHQudmFyaWFibGVzLGNhbGNWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL+aVsOWApOWei+OBq+WkieaPm1xyXG4gICAgICAgIGxldCBudW1iZXIgPSBOdW1iZXIoY2FsY1ZhbHVlKTtcclxuXHJcbiAgICAgICAgLy/mnInpmZDmlbDjgYvjganjgYbjgYvliKTlrppcclxuICAgICAgICBpZighaXNGaW5pdGUobnVtYmVyKSl7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIuioiOeul+WApOOBjOOAgeaVsOWApOOBp+OBr+OBguOCiuOBvuOBm+OCk+OAguOAjOaXpeaZguOCkuWKoOeuly/muJvnrpfjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudW1iZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDml6Xku5jjg7vml6XmmYLjgpLliqDnrpfjg7vmuJvnrpfjgZnjgotcclxuICAgICAqIEBwYXJhbSB7YW55fSBkYXRlVmFsdWVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5ZWFyIG1vbnRoIGRheSBob3VyIG1pbnV0ZSBzZWNvbmRcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIGNhbGNEYXRlKGRhdGVWYWx1ZTphbnkseWVhcjpudW1iZXIsbW9udGg6bnVtYmVyLGRhdGU6bnVtYmVyLGhvdXI6bnVtYmVyLG1pbnV0ZTpudW1iZXIsc2Vjb25kOm51bWJlcik6c3RyaW5ne1xyXG5cclxuICAgICAgICBsZXQgY2FsY1Jlc3VsdDtcclxuICAgICAgICAvL+ODleOCo+ODvOODq+ODieOBruWApO+8iOaWh+Wtl+WIl++8ieOCkmRhdGXlnovjgavlpInmj5vjgZnjgotcclxuICAgICAgICBkYXRlVmFsdWUgPSBuZXcgRGF0ZShkYXRlVmFsdWUpO1xyXG5cclxuICAgICAgICAvLyDlubTjgpLoqIjnrpdcclxuICAgICAgICBkYXRlVmFsdWUuc2V0RnVsbFllYXIoZGF0ZVZhbHVlLmdldEZ1bGxZZWFyKCkreWVhcik7XHJcbiAgICAgICAgLy/mnIjjgpLoqIjnrpdcclxuICAgICAgICBkYXRlVmFsdWUuc2V0TW9udGgoZGF0ZVZhbHVlLmdldE1vbnRoKCkrbW9udGgpO1xyXG4gICAgICAgIC8v5pel44KS6KiI566XXHJcbiAgICAgICAgZGF0ZVZhbHVlLnNldERhdGUoZGF0ZVZhbHVlLmdldERhdGUoKStkYXRlKTtcclxuICAgICAgICAvL+aZgumWk+OCkuioiOeul1xyXG4gICAgICAgIGRhdGVWYWx1ZS5zZXRIb3VycyhkYXRlVmFsdWUuZ2V0SG91cnMoKStob3VyKTtcclxuICAgICAgICAvL+WIhuOCkuioiOeul1xyXG4gICAgICAgIGRhdGVWYWx1ZS5zZXRNaW51dGVzKGRhdGVWYWx1ZS5nZXRNaW51dGVzKCkrbWludXRlKTtcclxuICAgICAgICAvL+enkuOCkuioiOeul1xyXG4gICAgICAgIGRhdGVWYWx1ZS5zZXRTZWNvbmRzKGRhdGVWYWx1ZS5nZXRTZWNvbmRzKCkrc2Vjb25kKTtcclxuXHJcbiAgICAgICAgLy9VVEPlvaLlvI/jgavlpInmj5tcclxuICAgICAgICBjYWxjUmVzdWx0ID0gZGF0ZVZhbHVlLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgICAgcmV0dXJuIGNhbGNSZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDjgqLjgq/jgrfjg6fjg7Pjga7lrp/ooYzjgpLlkbzjgbPlh7rjgZlcclxuICAgICAqIEBwYXJhbSBhY3Rpb25Ob2RlXHJcbiAgICAgKiBAcGFyYW0gZXZlbnRcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHByb2Nlc3MoYWN0aW9uTm9kZTpJQWN0aW9uTm9kZSxldmVudDphbnksY29udGV4dDpJQ29udGV4dCk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdD17XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBhY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBJRGF0ZVRpbWVDYWxjUHJvcHM7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBnZXRDb250ZXh0VmFyQnlQYXRoID0gKG9iajogYW55LCBwYXRoOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwYXRoLnNwbGl0KFwiLlwiKS5yZWR1Y2UoKG8sIGspID0+IChvIHx8IHt9KVtrXSwgb2JqKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIC8v5Z+65rqW5pel44Go44Gq44KL5aSJ5pWw44Gu5YCk5Y+W5b6XXHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVWYWx1ZSA9IGdldENvbnRleHRWYXJCeVBhdGggKGNvbnRleHQudmFyaWFibGVzLHRoaXMucHJvcHMudmVyTmFtZS5uYW1lKTtcclxuXHJcbiAgICAgICAgICAgIC8v5Z+65rqW5pel44Go44Gq44KL5aSJ5pWw44Gu5YCk44GM56m644Gu5aC05ZCI44CB5Yem55CG44KS57WC5LqG44GZ44KLXHJcbiAgICAgICAgICAgIGlmKCFkYXRlVmFsdWUpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi5Z+65rqW5YCk44Go44Gq44KL5aSJ5pWw44Gu5YCk44GM56m644CB44G+44Gf44Gv5a2Y5Zyo44GX44G+44Gb44KT44CC44CM5pel5pmC44KS5Yqg566XL+a4m+eul+OBmeOCi+OAjeOCs+ODs+ODneODvOODjeODs+ODiOOBruWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGNoZWNrRGF0ZVZhbHVlO1xyXG4gICAgICAgICAgICAvL+Wfuua6luWApOOBqOOBquOCi+WkieaVsOOBruWApOOAgeaXpeaZguOAgeaXpeS7mOW9ouW8j+OBi+eiuuiqjeOBmeOCi1xyXG4gICAgICAgICAgICBjaGVja0RhdGVWYWx1ZSA9IHRoaXMuaXNEYXRlVmFsdWUoZGF0ZVZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgIGlmKGNoZWNrRGF0ZVZhbHVlKXtcclxuICAgICAgICAgICAgICAgIC8v6KiI566X5YCk44Gu5YWl5Yqb5pa55rOV44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgICAgICBsZXQgY2FsY09wdGlvbnMgPSB0aGlzLnByb3BzLmNhbGNPcHRpb247XHJcblxyXG4gICAgICAgICAgICAgICAgLy/oqIjnrpflgKTjgpLmlbDlgKTlnovjgavlpInmj5vjgZnjgotcclxuICAgICAgICAgICAgICAgIGxldCB5ZWFyID0gdGhpcy52YWx1ZVRvTnVtYmVyKGNvbnRleHQsdGhpcy5wcm9wcy55ZWFyLGNhbGNPcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIGxldCBtb250aCA9IHRoaXMudmFsdWVUb051bWJlcihjb250ZXh0LHRoaXMucHJvcHMubW9udGgsY2FsY09wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGUgPSB0aGlzLnZhbHVlVG9OdW1iZXIoY29udGV4dCx0aGlzLnByb3BzLmRhdGUsY2FsY09wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGhvdXIgPSB0aGlzLnZhbHVlVG9OdW1iZXIoY29udGV4dCx0aGlzLnByb3BzLmhvdXIsY2FsY09wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgbGV0IG1pbnV0ZSA9IHRoaXMudmFsdWVUb051bWJlcihjb250ZXh0LHRoaXMucHJvcHMubWludXRlLGNhbGNPcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIGxldCBzZWNvbmQgPSB0aGlzLnZhbHVlVG9OdW1iZXIoY29udGV4dCx0aGlzLnByb3BzLnNlY29uZCxjYWxjT3B0aW9ucyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy/oqIjnrpfntZDmnpzjga7ml6Xku5jjgpLmoLzntI3jgZnjgovlpInmlbBcclxuICAgICAgICAgICAgICAgIGxldCBjYWxjdWxhdGVkRGF0ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAvL+aXpeS7mOOCkuWKoOeul+OAgea4m+eul+OBmeOCi1xyXG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlZERhdGUgPSB0aGlzLmNhbGNEYXRlKGRhdGVWYWx1ZSx5ZWFyLG1vbnRoLGRhdGUsaG91cixtaW51dGUsc2Vjb25kKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvL+ioiOeul+e1kOaenOOCkuWkieaVsOOBq+S7o+WFpeOBmeOCi1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC52YXJpYWJsZXNbdGhpcy5wcm9wcy5yZXN1bHRWZXJOYW1lXSA9IGNhbGN1bGF0ZWREYXRlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXN1bHQ9IHtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6dHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgY29udGV4dC5lcnJvcnMuaGFuZGxlRXJyb3IoZXJyb3IsYWN0aW9uTm9kZSk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jYW5OZXh0PWZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV09dGhpcztcclxuICAgIH1cclxufVxyXG5uZXcgRGF0ZVRpbWVDYWxjQWN0aW9uKCk7XHJcbiIsImltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7IElBY3Rpb24sIElBY3Rpb25SZXN1bHQsIElBY3Rpb25Ob2RlLCBJQWN0aW9uUHJvcGVydHksIElGaWVsZCAsSUNvbnRleHQsIElWYXJOYW1lfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+OBruWxnuaAp+Wumue+qVxyXG4gKi9cclxuaW50ZXJmYWNlIElFbmRPZk1vbnRoUHJvcHMge1xyXG4gICAgdmVyTmFtZUdldDpzdHJpbmc7XHJcbiAgICB2ZXJOYW1lOklWYXJOYW1lO1xyXG59XHJcbi8qKlxyXG4gKiDmnIjmnKvnrpflh7rjgqLjgq/jgrfjg6fjg7NcclxuICovXHJcbmV4cG9ydCBjbGFzcyBFbmRPZk1vbnRoQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbiB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgICBwcm9wczogSUVuZE9mTW9udGhQcm9wcztcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMubmFtZSA9IFwi5pyI5pyr566X5Ye6XCI7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcyA9IFtdO1xyXG4gICAgICAgIHRoaXMucHJvcHMgPSB7XHJcbiAgICAgICAgICAgIHZlck5hbWVHZXQ6JycsXHJcbiAgICAgICAgICAgIHZlck5hbWU6e25hbWU6Jyd9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICog44Ki44Kv44K344On44Oz44Gu5a6f6KGM44KS5ZG844Gz5Ye644GZXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uTm9kZSBcclxuICAgICAqIEBwYXJhbSBldmVudCBcclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBhc3luYyBwcm9jZXNzKGFjdGlvbk5vZGU6IElBY3Rpb25Ob2RlLCBldmVudDogYW55LGNvbnRleHQ6SUNvbnRleHQpOiBQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICBjYW5OZXh0OiB0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvL+WxnuaAp+ioreWumuOCkuWPluW+l+OBmeOCi1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvblByb3BzID0gYWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgaWYgKCEoJ3Zlck5hbWUnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ3Zlck5hbWVHZXQnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElFbmRPZk1vbnRoUHJvcHM7XHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgICAgICAvL+acrOeVquOCs+ODvOODiemWi+Wni++8mlxyXG4gICAgICAgICAgICAvL+WPluW+l+WkieaVsOOBruWApOOCkuWRvOOBs+WHuuOBl+OBpuS7o+WFpeOBmeOCi++8mlxyXG4gICAgICAgICAgICBjb25zdCBnZXRDb250ZXh0VmFyQnlQYXRoID0gKG9iajogYW55LCBwYXRoOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwYXRoLnNwbGl0KFwiLlwiKS5yZWR1Y2UoKG8sIGspID0+IChvIHx8IHt9KVtrXSwgb2JqKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgbGV0IHZlck5hbWVHZXRWYWx1ZSA9IGdldENvbnRleHRWYXJCeVBhdGgoY29udGV4dC52YXJpYWJsZXMsdGhpcy5wcm9wcy52ZXJOYW1lR2V0KTtcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAgICAgICAgIC8v5Y+W5b6X5aSJ5pWw44Gu5YCkRGF0ZeOCquODluOCuOOCp+OCr+ODiOOBq+WkieaPm++8mlxyXG4gICAgICAgICAgICBsZXQgZGF0ZU9iaiA9IG5ldyBEYXRlKHZlck5hbWVHZXRWYWx1ZSk7XHJcbiAgICAgICAgICAgIC8vIOaciOacq+OCkuioiOeul1xyXG4gICAgICAgICAgICBsZXQgeWVhciA9IGRhdGVPYmouZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICAgICAgbGV0IG1vbnRoID0gZGF0ZU9iai5nZXRNb250aCgpICsgMTsgLy/mnIjjga8w44GL44KJ5aeL44G+44KL44Gf44KB44CBMeOCkui2s+OBmVxyXG4gICAgICAgICAgICBsZXQgbGFzdERheU9mTW9udGggPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMCk7IC8vIOe/jOaciOOBrjDml6Xnm67jga/ku4rmnIjjga7mnIjmnKtcclxuICAgICAgICAgICAgaWYodGhpcy5wcm9wcy52ZXJOYW1lICYmIHRoaXMucHJvcHMudmVyTmFtZS5uYW1lIT09Jycpe1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC52YXJpYWJsZXNbdGhpcy5wcm9wcy52ZXJOYW1lLm5hbWVdPWxhc3REYXlPZk1vbnRoLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDp0cnVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgY29udGV4dC5lcnJvcnMuaGFuZGxlRXJyb3IoZXJyb3IsYWN0aW9uTm9kZSk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jYW5OZXh0PWZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZWdpc3RlcigpOiB2b2lkIHtcclxuICAgICAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXSA9IHRoaXM7XHJcbiAgICB9XHJcbn1cclxubmV3IEVuZE9mTW9udGhBY3Rpb24oKTsiLCJpbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyBJQWN0aW9uLCBJQWN0aW9uUmVzdWx0LCBJQWN0aW9uTm9kZSwgSUFjdGlvblByb3BlcnR5LCBJRmllbGQgLElDb250ZXh0LCBJVmFyTmFtZX0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJRGF0ZVNwZWNpZmllZFByb3BzIHtcclxuICAgIHZlck5hbWVHZXQ6c3RyaW5nO1xyXG4gICAgbmV3WWVhcjpudW1iZXI7XHJcbiAgICBuZXdNb250aDpudW1iZXI7XHJcbiAgICBuZXdEYXk6bnVtYmVyO1xyXG4gICAgdmVyTmFtZTpJVmFyTmFtZTtcclxufVxyXG4vKipcclxuICog5pel5LuY5oyH5a6a44Ki44Kv44K344On44OzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRGF0ZVNwZWNpZmllZEFjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb24ge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gICAgcHJvcHM6IElEYXRlU3BlY2lmaWVkUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIuaXpeS7mOaMh+WumlwiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBbXTtcclxuICAgICAgICB0aGlzLnByb3BzID0ge1xyXG4gICAgICAgICAgICB2ZXJOYW1lR2V0OicnLFxyXG4gICAgICAgICAgICBuZXdZZWFyOjAsXHJcbiAgICAgICAgICAgIG5ld01vbnRoOjAsXHJcbiAgICAgICAgICAgIG5ld0RheTowLFxyXG4gICAgICAgICAgICB2ZXJOYW1lOntuYW1lOicnfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGUgXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOiBJQWN0aW9uTm9kZSwgZXZlbnQ6IGFueSxjb250ZXh0OklDb250ZXh0KTogUHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgY2FuTmV4dDogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy/lsZ7mgKfoqK3lrprjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcyA9IGFjdGlvbk5vZGUuYWN0aW9uUHJvcHM7XHJcbiAgICAgICAgICAgIGlmICghKCd2ZXJOYW1lJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCd2ZXJOYW1lR2V0JyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBJRGF0ZVNwZWNpZmllZFByb3BzO1xyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAgICAgLy/mnKznlarjgrPjg7zjg4nplovlp4vvvJpcclxuICAgICAgICAgICAgLy/lj5blvpflpInmlbDjga7lgKTjgpLlkbzjgbPlh7rjgZfjgabku6PlhaXjgZnjgovvvJpcclxuICAgICAgICAgICAgY29uc3QgZ2V0Q29udGV4dFZhckJ5UGF0aCA9IChvYmo6IGFueSwgcGF0aDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGF0aC5zcGxpdChcIi5cIikucmVkdWNlKChvLCBrKSA9PiAobyB8fCB7fSlba10sIG9iaik7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGxldCB2ZXJOYW1lR2V0VmFsdWUgPSBnZXRDb250ZXh0VmFyQnlQYXRoKGNvbnRleHQudmFyaWFibGVzLHRoaXMucHJvcHMudmVyTmFtZUdldCk7XHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgICAgICAvL+WPluW+l+WkieaVsOOBruWApERhdGXjgqrjg5bjgrjjgqfjgq/jg4jjgavlpInmj5vvvJpcclxuICAgICAgICAgICAgbGV0IGRhdGVPYmogPSBuZXcgRGF0ZSh2ZXJOYW1lR2V0VmFsdWUpO1xyXG4gICAgICAgICAgICBpZih2ZXJOYW1lR2V0VmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2ZXJOYW1lR2V0VmFsdWUgPT09IG51bGwgfHwgdmVyTmFtZUdldFZhbHVlID09PSAnJyB8fCBpc05hTihkYXRlT2JqLmdldERhdGUoKSkpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0aW1lIHZhbHVlXCIpO1xyXG4gICAgICAgICAgICB9ICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyDlubTjga7oqK3lrprvvIhuZXdZZWFy44GM6Kit5a6a44GV44KM44Gm44GE44Gq44GE5aC05ZCI44Gv44CB5YWD44Gu5YCk44KS5L2/55So77yJXHJcbiAgICAgICAgICAgIGRhdGVPYmouc2V0RnVsbFllYXIodGhpcy5wcm9wcy5uZXdZZWFyID49MTkwMCAmJiB0aGlzLnByb3BzLm5ld1llYXIgPD05OTk5ID8gdGhpcy5wcm9wcy5uZXdZZWFyIDogZGF0ZU9iai5nZXRGdWxsWWVhcigpKTtcclxuICAgICAgICAgICAgLy8g5pyI44Gu6Kit5a6a77yIbmV3TW9udGjjgYzoqK3lrprjgZXjgozjgabjgYTjgarjgYTloLTlkIjjga/jgIHlhYPjga7lgKTjgpLkvb/nlKjvvIkvLyDmnIjjga8w5aeL44G+44KK44Gq44Gu44Gn44CBMTLmnIjjga8xMeOAglxyXG4gICAgICAgICAgICBkYXRlT2JqLnNldE1vbnRoKHRoaXMucHJvcHMubmV3TW9udGggPj0xICYmIHRoaXMucHJvcHMubmV3TW9udGggPD0xMiA/IHRoaXMucHJvcHMubmV3TW9udGgtMSAgOiBkYXRlT2JqLmdldE1vbnRoKCkpO1xyXG4gICAgICAgICAgICAvLyDml6Xjga7oqK3lrprvvIhuZXdEYXnjgYzoqK3lrprjgZXjgozjgabjgYTjgarjgYTloLTlkIjjga/jgIHlhYPjga7lgKTjgpLkvb/nlKjvvIlcclxuICAgICAgICAgICAgZGF0ZU9iai5zZXREYXRlKHRoaXMucHJvcHMubmV3RGF5ID49MSAmJiB0aGlzLnByb3BzLm5ld0RheSA8PTMxID90aGlzLnByb3BzLm5ld0RheSA6IGRhdGVPYmouZ2V0RGF0ZSgpKTtcclxuICAgICAgICAgICAgLy8g5aSJ5pWw44Gr5paw44GX44GE5YCk44KS6Kit5a6aXHJcbiAgICAgICAgICAgIGlmKHRoaXMucHJvcHMudmVyTmFtZSAmJiB0aGlzLnByb3BzLnZlck5hbWUubmFtZSE9PScnKXtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQudmFyaWFibGVzW3RoaXMucHJvcHMudmVyTmFtZS5uYW1lXT1kYXRlT2JqLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDp0cnVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgY29udGV4dC5lcnJvcnMuaGFuZGxlRXJyb3IoZXJyb3IsYWN0aW9uTm9kZSk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jYW5OZXh0PWZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZWdpc3RlcigpOiB2b2lkIHtcclxuICAgICAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXSA9IHRoaXM7XHJcbiAgICB9XHJcbn1cclxubmV3IERhdGVTcGVjaWZpZWRBY3Rpb24oKTsiLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xyXG4vKipcclxuICog55S76Z2i5Yem55CG5Lit44GuTG9hZGRpbmfooajnpLpcclxuICovXHJcbmV4cG9ydCBjbGFzcyBTbmlwcGVyIHtcclxuICAgIHByaXZhdGUgc3Bpbm5lckVsZW1lbnQ6IEpRdWVyeTxIVE1MRWxlbWVudD47O1xyXG4gICAgcHJpdmF0ZSBjb250YWluZXIgOkpRdWVyeTxIVE1MRWxlbWVudD47XHJcbiAgICBjb25zdHJ1Y3RvcihzZWxlY3Rvcjogc3RyaW5nKSB7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyID0gJChzZWxlY3Rvcj8/J2JvZHknKTtcclxuICAgICAgdGhpcy5zcGlubmVyRWxlbWVudD10aGlzLmNyZWF0ZVNwaW5uZXIoKTtcclxuICAgIH1cclxuICBcclxuICAgIGNyZWF0ZVNwaW5uZXIoKSB7XHJcbiAgICAgIGNvbnN0IGh0bWwgPVtcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImJzLXNjb3BlIGFsYy1sb2FkaW5nIGFsYy1kbm9uZVwiPicsXHJcbiAgICAgICAgJzxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlclwiIHN0eWxlPVwid2lkdGg6IDNyZW07IGhlaWdodDogM3JlbTtcIiByb2xlPVwic3RhdHVzXCI+JyxcclxuICAgICAgICAnPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj48L3NwYW4+JyxcclxuICAgICAgICAnPC9kaXY+PC9kaXY+J1xyXG4gICAgICAgIF0uam9pbihcIlwiKTtcclxuICAgICAgY29uc3Qgc3Bpbm5lciA9ICQoaHRtbCk7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChzcGlubmVyKTtcclxuICAgICAgcmV0dXJuIHNwaW5uZXI7XHJcbiAgICB9XHJcbiAgXHJcbiAgICByZW1vdmVTcGlubmVyKCkge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lckVsZW1lbnQucmVtb3ZlKCk7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBzaG93U3Bpbm5lcigpIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJFbGVtZW50LnJlbW92ZUNsYXNzKCdhbGMtZG5vbmUnKTtcclxuICAgIH1cclxuICBcclxuICAgIGhpZGVTcGlubmVyKCkge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lckVsZW1lbnQuYWRkQ2xhc3MoJ2FsYy1kbm9uZScpO1xyXG4gICAgfVxyXG4gIH1cclxuICAiLCIvKipcclxuICog44Oa44O844K444Gu56iu6aGe44KS6KGo44GZ5Z6LXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBQYWdlVHlwZSA9ICdhcHAnIHwgJ3Nob3cnIHwgJ2VkaXQnIHwgJ290aGVyJztcclxuXHJcbi8qKlxyXG4gKiBzaG9344Oa44O844K444Gu44Oi44O844OJ44KS6KGo44GZ5Z6LXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBTaG93UGFnZU1vZGUgPSAnc2hvdycgfCAnZWRpdCcgfCBudWxsO1xyXG5cclxuLyoqXHJcbiAqIOODmuODvOOCuOOBrueKtuaFi+OCkuihqOOBmeOCpOODs+OCv+ODvOODleOCp+ODvOOCuVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBQYWdlU3RhdGUge1xyXG4gIHR5cGU6IFBhZ2VUeXBlO1xyXG4gIG1vZGU6IFNob3dQYWdlTW9kZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFVSTOOBrueJueWumuOBruOCu+OCsOODoeODs+ODiOOCkuWPluW+l+OBmeOCi1xyXG4gKiBAcGFyYW0gdXJsIOWIhuaekOWvvuixoeOBrlVSTFxyXG4gKiBAcGFyYW0gaW5kZXgg5Y+W5b6X44GX44Gf44GE44K744Kw44Oh44Oz44OI44Gu44Kk44Oz44OH44OD44Kv44K577yI6LKg44Gu5pWw44Gv5pyr5bC+44GL44KJ44Gu44Kk44Oz44OH44OD44Kv44K577yJXHJcbiAqL1xyXG5jb25zdCBnZXRTZWdtZW50ID0gKHVybDogVVJMLCBpbmRleDogbnVtYmVyKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBzZWdtZW50cyA9IHVybC5wYXRobmFtZS5zcGxpdCgnLycpLmZpbHRlcihCb29sZWFuKTtcclxuICByZXR1cm4gc2VnbWVudHMuYXQoaW5kZXgpID8/ICcnO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFVSTOOBqOOCouODl+ODqklE44Gr5Z+644Gl44GE44Gm54++5Zyo44Gu44Oa44O844K444Gu54q25oWL44KS5Yik5pat44GZ44KLXHJcbiAqIEBwYXJhbSB1cmwg5YiG5p6Q5a++6LGh44GuVVJMXHJcbiAqIEBwYXJhbSBhcHBJZCDnorroqo3jgZnjgovjgqLjg5fjg6pJRFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGdldFBhZ2VTdGF0ZSA9ICh1cmw6IHN0cmluZywgYXBwSWQ6IHN0cmluZyk6IFBhZ2VTdGF0ZSA9PiB7XHJcbiAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTCh1cmwpO1xyXG4gIGNvbnN0IGxhc3RTZWdtZW50ID0gZ2V0U2VnbWVudChwYXJzZWRVcmwsIC0xKTtcclxuICBjb25zdCBzZWNvbmRMYXN0U2VnbWVudCA9IGdldFNlZ21lbnQocGFyc2VkVXJsLCAtMik7XHJcblxyXG4gIGlmIChsYXN0U2VnbWVudCA9PT0gYXBwSWQgJiYgL15cXGQrJC8udGVzdChhcHBJZCkpIHtcclxuICAgIHJldHVybiB7IHR5cGU6ICdhcHAnLCBtb2RlOiBudWxsIH07XHJcbiAgfVxyXG5cclxuICBpZiAobGFzdFNlZ21lbnQudG9Mb3dlckNhc2UoKSA9PT0gJ3Nob3cnICYmIHNlY29uZExhc3RTZWdtZW50ID09PSBhcHBJZCAmJiAvXlxcZCskLy50ZXN0KGFwcElkKSkge1xyXG4gICAgY29uc3QgbW9kZSA9IHBhcnNlZFVybC5zZWFyY2hQYXJhbXMuZ2V0KCdtb2RlJyk7XHJcbiAgICByZXR1cm4geyBcclxuICAgICAgdHlwZTogJ3Nob3cnLCBcclxuICAgICAgbW9kZTogKG1vZGUgPT09ICdzaG93JyB8fCBtb2RlID09PSAnZWRpdCcpID8gbW9kZSA6IG51bGwgXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgaWYgKGxhc3RTZWdtZW50LnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0JyAmJiBzZWNvbmRMYXN0U2VnbWVudCA9PT0gYXBwSWQgJiYgL15cXGQrJC8udGVzdChhcHBJZCkpIHtcclxuICAgIHJldHVybiB7IHR5cGU6ICdlZGl0JywgbW9kZTogbnVsbCB9O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHsgdHlwZTogJ290aGVyJywgbW9kZTogbnVsbCB9O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIOePvuWcqOOBruODmuODvOOCuOOBrueKtuaFi+OCkuWIpOaWreOBmeOCi++8iOePvuWcqOOBrlVSTOOCkuS9v+eUqO+8iVxyXG4gKiBAcGFyYW0gYXBwSWQg56K66KqN44GZ44KL44Ki44OX44OqSURcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50UGFnZVN0YXRlID0gKGFwcElkOiBzdHJpbmcpOiBQYWdlU3RhdGUgPT4gXHJcbiAgZ2V0UGFnZVN0YXRlKHdpbmRvdy5sb2NhdGlvbi5ocmVmLCBhcHBJZCk7XHJcblxyXG4vKipcclxuICogVVJM44KS5q2j6KaP5YyW44GZ44KL77yI5pyr5bC+44Gu44K544Op44OD44K344Ol44KS5YmK6Zmk77yJXHJcbiAqIEBwYXJhbSB1cmwg5q2j6KaP5YyW5a++6LGh44GuVVJMXHJcbiAqL1xyXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplVXJsID0gKHVybDogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHVybCk7XHJcbiAgcGFyc2VkVXJsLnBhdGhuYW1lID0gcGFyc2VkVXJsLnBhdGhuYW1lLnJlcGxhY2UoL1xcLyQvLCAnJyk7XHJcbiAgcmV0dXJuIHBhcnNlZFVybC50b1N0cmluZygpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFVSTOOCkuWuieWFqOOBq+ino+aekOOBmeOCi1xyXG4gKiBAcGFyYW0gdXJsIOino+aekOWvvuixoeOBrlVSTOaWh+Wtl+WIl1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHNhZmVQYXJzZVVybCA9ICh1cmw6IHN0cmluZyk6IFVSTCB8IG51bGwgPT4ge1xyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4gbmV3IFVSTCh1cmwpO1xyXG4gIH0gY2F0Y2gge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG59O1xyXG5cclxuIiwiaW1wb3J0IHtJRmllbGQsSUFjdGlvbk5vZGV9IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG5pbXBvcnQgeyBLaW50b25lUmVzdEFQSUNsaWVudCB9IGZyb20gXCJAa2ludG9uZS9yZXN0LWFwaS1jbGllbnRcIjtcclxuaW1wb3J0IHsgZ2V0UGFnZVN0YXRlIH0gZnJvbSBcIi4uL3V0aWwvdXJsXCI7XHJcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XHJcbmltcG9ydCB7IFJlY29yZCBhcyBLVFJlY29yZCB9IGZyb20gXCJAa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9jbGllbnQvdHlwZXNcIjtcclxuXHJcblxyXG4vLyDpmo7lsaTljJbjg4njg63jg4Pjg5fjg4Djgqbjg7Pjg6Hjg4vjg6Xjg7zjga7oqK3lrprjgqTjg7Pjgr/jg7zjg5Xjgqfjg7zjgrlcclxuZXhwb3J0IGludGVyZmFjZSBJQ2FzY2FkaW5nRHJvcERvd24ge1xyXG4gIHNvdXJjZUFwcDogSUFwcDtcclxuICBkcm9wRG93bkFwcDogSUFwcDtcclxuICBmaWVsZExpc3Q6IElGaWVsZExpc3RbXTtcclxufVxyXG5cclxuLy8g44Ki44OX44Oq44Kx44O844K344On44Oz44Kk44Oz44K/44O844OV44Kn44O844K5XHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFwcCB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGlkOiBzdHJpbmc7XHJcbn1cclxuLy8g44OV44Kj44O844Or44OJ44Oq44K544OI44Kk44Oz44K/44O844OV44Kn44O844K5XHJcbmV4cG9ydCBpbnRlcmZhY2UgSUZpZWxkTGlzdCB7XHJcbiAgc291cmNlOiBJRmllbGQ7XHJcbiAgZHJvcERvd246IElGaWVsZDtcclxufVxyXG5cclxuXHJcbi8vIOODieODreODg+ODl+ODgOOCpuODs+ODoeODi+ODpeODvOOBrui+nuabuOOCv+OCpOODl+OAgeODieODreODg+ODl+ODgOOCpuODs+OCquODl+OCt+ODp+ODs+OBruaknOe0ouOCkumrmOmAn+WMluOBmeOCi+OBn+OCgeOBq+S9v+eUqFxyXG50eXBlIERyb3Bkb3duRGljdGlvbmFyeSA9IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcclxuXHJcbi8vIOODieODreODg+ODl+ODgOOCpuODs+ODoeODi+ODpeODvOOBruWHpueQhuOCr+ODqeOCuVxyXG5leHBvcnQgY2xhc3MgRHJvcERvd25NYW5hZ2VyIHtcclxuICBwcml2YXRlIGRpY3Rpb25hcnk6IERyb3Bkb3duRGljdGlvbmFyeSA9IHt9O1xyXG4gIHByaXZhdGUgc3RhdGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuICBwcml2YXRlIHNlbGVjdHM6IE1hcDxzdHJpbmcsIEhUTUxFbGVtZW50PiA9IG5ldyBNYXAoKTtcclxuICBwcml2YXRlIGNvbHVtbk1hcDogTWFwPEhUTUxFbGVtZW50LCBJRmllbGRMaXN0PiA9IG5ldyBNYXAoKTtcclxuICBwcml2YXRlIGNvbHVtTWFwVmFsdWVBcnJheTogSUZpZWxkTGlzdFtdID0gW107XHJcbiAgcHJpdmF0ZSBjb2x1bU1hcEFycmF5OiBbSFRNTEVsZW1lbnQsIElGaWVsZExpc3RdW10gPSBbXTtcclxuICBwcml2YXRlIHByb3BzIDpJQ2FzY2FkaW5nRHJvcERvd247XHJcbiAgcHJpdmF0ZSBldmVudDpFdmVudDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvcHM6IElDYXNjYWRpbmdEcm9wRG93bixldmVudDphbnkpe1xyXG4gICAgdGhpcy5wcm9wcz1wcm9wcztcclxuICAgIHRoaXMuZXZlbnQ9ZXZlbnQ7XHJcbiAgfVxyXG5cclxuICAvLyDliJ3mnJ/ljJbjg6Hjgr3jg4Pjg4lcclxuICBhc3luYyBpbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgY2xpZW50ID0gbmV3IEtpbnRvbmVSZXN0QVBJQ2xpZW50KCk7XHJcbiAgICAgIGNvbnN0IHNvdXJjZUFwcElkID0gdGhpcy5wcm9wcy5zb3VyY2VBcHAuaWQ7XHJcbiAgICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMucHJvcHMuZmllbGRMaXN0Lm1hcCgoZikgPT4gZi5zb3VyY2UuY29kZSk7XHJcbiAgICAgIGNvbnN0IHJlY29yZHMgPSBhd2FpdCBjbGllbnQucmVjb3JkLmdldEFsbFJlY29yZHMoe1xyXG4gICAgICAgIGFwcDogc291cmNlQXBwSWQsXHJcbiAgICAgICAgZmllbGRzLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5kaWN0aW9uYXJ5ID10aGlzLmJ1aWxkRHJvcGRvd25EaWN0aW9uYXJ5KHJlY29yZHMsIHRoaXMucHJvcHMuZmllbGRMaXN0KTtcclxuICAgICAgLy8gY29uc3QgaGFzaCA9IGF3YWl0IHRoaXMuY2FsY3VsYXRlSGFzaChyZWNvcmRzLCB0aGlzLmFjdGlvbk5vZGUpO1xyXG4gICAgICAvLyBjb25zdCBzdG9yYWdlS2V5ID0gYGRyb3Bkb3duX2RpY3Rpb25hcnk6OiR7dGhpcy5wcm9wcy5kcm9wRG93bkFwcC5pZH1fJHtoYXNofWA7XHJcblxyXG4gICAgICAvLyBjb25zdCBsc0RpY3Rpb25hcnkgPSB0aGlzLmdldEZyb21Mb2NhbFN0b3JhZ2Uoc3RvcmFnZUtleSk7XHJcbiAgICAgIC8vIHRoaXMuZGljdGlvbmFyeSA9XHJcbiAgICAgIC8vICAgbHNEaWN0aW9uYXJ5IHx8IHRoaXMuYnVpbGREcm9wZG93bkRpY3Rpb25hcnkocmVjb3JkcywgdGhpcy5wcm9wcy5maWVsZExpc3QpO1xyXG4gICAgICAvLyBpZiAoIWxzRGljdGlvbmFyeSkge1xyXG4gICAgICAvLyAgIHRoaXMuc2F2ZVRvTG9jYWxTdG9yYWdlKHN0b3JhZ2VLZXksIHRoaXMuZGljdGlvbmFyeSk7XHJcbiAgICAgIC8vIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgXCLpmo7lsaTljJbjg4njg63jg4Pjg5fjg4Djgqbjg7Pjga7liJ3mnJ/ljJbkuK3jgavjgqjjg6njg7zjgYznmbrnlJ/jgZfjgb7jgZfjgZ86XCIsXHJcbiAgICAgICAgZXJyb3JcclxuICAgICAgKTtcclxuICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBXZWIgQ3J5cHRvIEFQSeOCkuS9v+eUqOOBl+OBpuODj+ODg+OCt+ODpeWApOOCkuioiOeul1xyXG4gIHByaXZhdGUgYXN5bmMgY2FsY3VsYXRlSGFzaChcclxuICAgIHJlY29yZHM6IEtUUmVjb3JkW10sXHJcbiAgICBhY3Rpb25Ob2RlOiBJQWN0aW9uTm9kZVxyXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBzdHIgPSBKU09OLnN0cmluZ2lmeShyZWNvcmRzKSArIEpTT04uc3RyaW5naWZ5KGFjdGlvbk5vZGUpO1xyXG4gICAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xyXG4gICAgY29uc3QgZGF0YSA9IGVuY29kZXIuZW5jb2RlKHN0cik7XHJcbiAgICBjb25zdCBoYXNoQnVmZmVyID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoXCJTSEEtMVwiLCBkYXRhKTtcclxuICAgIGNvbnN0IGhhc2hBcnJheSA9IEFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoaGFzaEJ1ZmZlcikpO1xyXG4gICAgY29uc3QgaGFzaEhleCA9IGhhc2hBcnJheVxyXG4gICAgICAubWFwKChiKSA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIikpXHJcbiAgICAgIC5qb2luKFwiXCIpO1xyXG4gICAgcmV0dXJuIGhhc2hIZXg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDjg4njg63jg4Pjg5fjg4Djgqbjg7Pjg6Hjg4vjg6Xjg7zjga7ovp7mm7jjgpLmp4vnr4lcclxuICAgKiBAcGFyYW0gcmVjb3JkcyDjg4fjg7zjgr/jgr3jg7zjgrnjga7jg6zjgrPjg7zjg4lcclxuICAgKiBAcGFyYW0gZmllbGRMaXN0IOODh+ODvOOCv+OCveODvOOCueOBrumajuWxpOODleOCo+ODvOODq+ODiVxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIHByaXZhdGUgYnVpbGREcm9wZG93bkRpY3Rpb25hcnkocmVjb3JkczogS1RSZWNvcmRbXSxmaWVsZExpc3Q6IElGaWVsZExpc3RbXSk6IERyb3Bkb3duRGljdGlvbmFyeSB7XHJcbiAgICBjb25zdCB0ZW1wRGljdGlvbmFyeTogUmVjb3JkPHN0cmluZywgU2V0PHN0cmluZz4+ID0geyBcIjBfVE9QXCI6IG5ldyBTZXQoKSB9O1xyXG4gICAgY29uc3QgZmllbGRDb2RlVG9JbmRleE1hcCA9IG5ldyBNYXAoXHJcbiAgICAgIGZpZWxkTGlzdC5tYXAoKGZpZWxkLCBpbmRleCkgPT4gW2ZpZWxkLnNvdXJjZS5jb2RlLCBpbmRleF0pXHJcbiAgICApO1xyXG5cclxuICAgIHJlY29yZHNcclxuICAgICAgLm1hcCgocmVjb3JkKSA9PlxyXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHJlY29yZClcclxuICAgICAgICAgIC5tYXAoKFtmaWVsZENvZGUsIGZpZWxkRGF0YV0pID0+ICh7XHJcbiAgICAgICAgICAgIGZpZWxkQ29kZSxcclxuICAgICAgICAgICAgdmFsdWU6IGZpZWxkRGF0YS52YWx1ZSxcclxuICAgICAgICAgICAgaW5kZXg6IGZpZWxkQ29kZVRvSW5kZXhNYXAuZ2V0KGZpZWxkQ29kZSksXHJcbiAgICAgICAgICB9KSlcclxuICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaW5kZXggIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmluZGV4ISAtIGIuaW5kZXghKVxyXG4gICAgICApXHJcbiAgICAgIC5mb3JFYWNoKChyZWNvcmRBcnJheSkgPT4ge1xyXG4gICAgICAgIHJlY29yZEFycmF5LmZvckVhY2goKGl0ZW0sIGluZGV4LCBhcnJheSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgeyB2YWx1ZSwgZmllbGRDb2RlIH0gPSBpdGVtO1xyXG4gICAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgICAgY29uc3QgdiA9IHZhbHVlIGFzIHN0cmluZztcclxuXHJcbiAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcclxuICAgICAgICAgICAgdGVtcERpY3Rpb25hcnlbXCIwX1RPUFwiXS5hZGQodik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c0l0ZW0gPSBhcnJheVtpbmRleCAtIDFdO1xyXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c0tleSA9IGAke3ByZXZpb3VzSXRlbS5pbmRleH1fJHtwcmV2aW91c0l0ZW0udmFsdWV9YDtcclxuICAgICAgICAgICAgdGVtcERpY3Rpb25hcnlbcHJldmlvdXNLZXldID1cclxuICAgICAgICAgICAgICB0ZW1wRGljdGlvbmFyeVtwcmV2aW91c0tleV0gfHwgbmV3IFNldCgpO1xyXG4gICAgICAgICAgICB0ZW1wRGljdGlvbmFyeVtwcmV2aW91c0tleV0uYWRkKHYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBjb25zdCBkaWN0aW9uYXJ5OiBEcm9wZG93bkRpY3Rpb25hcnkgPSB7fTtcclxuICAgIGZvciAoY29uc3QgW2tleSwgc2V0XSBvZiBPYmplY3QuZW50cmllcyh0ZW1wRGljdGlvbmFyeSkpIHtcclxuICAgICAgZGljdGlvbmFyeVtrZXldID0gQXJyYXkuZnJvbShzZXQpLnNvcnQoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGljdGlvbmFyeTtcclxuICB9XHJcblxyXG4gIC8vIOODreODvOOCq+ODq+OCueODiOODrOODvOOCuOOBi+OCiei+nuabuOOCkuWPluW+l1xyXG4gIHByaXZhdGUgZ2V0RnJvbUxvY2FsU3RvcmFnZShrZXk6IHN0cmluZyk6IERyb3Bkb3duRGljdGlvbmFyeSB8IG51bGwge1xyXG4gICAgY29uc3QgZGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XHJcbiAgICB0aGlzLmNsZWFyVXBEaWN0aW9uYXJ5KGtleSk7XHJcbiAgICByZXR1cm4gZGF0YSA/IEpTT04ucGFyc2UoZGF0YSkgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8g5Y+k44GE6L6e5pu444KS44Kv44Oq44KiXHJcbiAgcHJpdmF0ZSBjbGVhclVwRGljdGlvbmFyeShrZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgT2JqZWN0LmtleXMobG9jYWxTdG9yYWdlKVxyXG4gICAgICAuZmlsdGVyKChrKSA9PiBrLnN0YXJ0c1dpdGgoXCJkcm9wZG93bl9kaWN0aW9uYXJ5OjpcIikgJiYgIWsuZW5kc1dpdGgoa2V5KSlcclxuICAgICAgLmZvckVhY2goKGspID0+IGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGspKTtcclxuICB9XHJcblxyXG4gIC8vIOODreODvOOCq+ODq+OCueODiOODrOODvOOCuOOBq+i+nuabuOOCkuS/neWtmFxyXG4gIHByaXZhdGUgc2F2ZVRvTG9jYWxTdG9yYWdlKGtleTogc3RyaW5nLCBkYXRhOiBEcm9wZG93bkRpY3Rpb25hcnkpOiB2b2lkIHtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gIH1cclxuXHJcbiAgLy8g44Oa44O844K444Gu54q25oWL44KS5Yem55CGXHJcbiAgYXN5bmMgaGFuZGxlUGFnZVN0YXRlKGFwcElkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IGdldFBhZ2VTdGF0ZShcclxuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYucmVwbGFjZShcIiNcIiwgXCI/XCIpLFxyXG4gICAgICBhcHBJZFxyXG4gICAgKTtcclxuXHJcbiAgICBzd2l0Y2ggKGN1cnJlbnRTdGF0ZS50eXBlKSB7XHJcbiAgICAgIGNhc2UgXCJhcHBcIjpcclxuICAgICAgY2FzZSBcImVkaXRcIjpcclxuICAgICAgY2FzZSBcInNob3dcIjpcclxuICAgICAgICBpZiAoY3VycmVudFN0YXRlLnR5cGUgPT09IFwic2hvd1wiICYmIGN1cnJlbnRTdGF0ZS5tb2RlICE9PSBcImVkaXRcIikgYnJlYWs7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgdGhpcy5zZXR1cENhc2NhZGluZ0Ryb3BEb3duKGN1cnJlbnRTdGF0ZS50eXBlKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOmajuWxpOWMluODieODreODg+ODl+ODgOOCpuODs+OCkuioreWumuOBmeOCi1xyXG4gIHNldHVwQ2FzY2FkaW5nRHJvcERvd24ocGFnZVR5cGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgdGFibGVFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcbiAgICAgIHBhZ2VUeXBlID09PSBcImFwcFwiID8gXCJ2aWV3LWxpc3QtZGF0YS1nYWlhXCIgOiBcInJlY29yZC1nYWlhXCJcclxuICAgICk7XHJcbiAgICBpZiAoIXRhYmxlRWxlbWVudCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwi44Or44O844OI6KaB57Sg44GM6KaL44Gk44GL44KK44G+44Gb44KTXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZihwYWdlVHlwZT09PVwiYXBwXCIpe1xyXG4gICAgICB0aGlzLmluaXREcm9wZG93bkNvbnRhaW5lckZvckxpc3QoKTtcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLmluaXREcm9wZG93bkNvbnRhaW5lcmZvckRldGFpbCh0YWJsZUVsZW1lbnQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZW5kZXJEcm9wZG93bkNvbnRhaW5lcigpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIOODieODreODg+ODl+ODgOOCpuODs+ODoeODi+ODpeODvOOCs+ODs+ODhuODiuOCkuWIneacn+WMlijkuIDopqfnt6jpm4bnlLvpnaIpXHJcbiAgICogQHBhcmFtIHRhYmxlRWxlbWVudCBcclxuICAgKi9cclxuICBwcml2YXRlIGluaXREcm9wZG93bkNvbnRhaW5lckZvckxpc3QoKXtcclxuICAgIGNvbnN0IGZpZWxkTGlzdHMgPSB0aGlzLnByb3BzLmZpZWxkTGlzdDtcclxuICAgIGZpZWxkTGlzdHMuZm9yRWFjaCgoZmxkLGluZGV4LGFycmF5KT0+e1xyXG4gICAgICAgY29uc3QgZWxlbXMgPSBraW50b25lLmFwcC5nZXRGaWVsZEVsZW1lbnRzKGZsZC5kcm9wRG93bi5jb2RlKTtcclxuICAgICAgIGlmKGVsZW1zKXtcclxuICAgICAgICBjb25zdCBlZGl0RWxlbSA9ICQoZWxlbXMpLmZpbHRlcihcIi5yZWNvcmRsaXN0LWVkaXRjZWxsLWdhaWFcIikuZ2V0KDApO1xyXG4gICAgICAgIGlmKGVkaXRFbGVtIT09dW5kZWZpbmVkKXtcclxuICAgICAgICAgIHRoaXMuY29sdW1uTWFwLnNldChlZGl0RWxlbSwgZmxkKTtcclxuICAgICAgICB9XHJcbiAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuY29sdW1NYXBBcnJheSA9IEFycmF5LmZyb20odGhpcy5jb2x1bW5NYXAuZW50cmllcygpKTtcclxuICAgIHRoaXMuY29sdW1NYXBWYWx1ZUFycmF5ID0gQXJyYXkuZnJvbSh0aGlzLmNvbHVtbk1hcC52YWx1ZXMoKSk7XHJcbiAgfVxyXG5cclxuICAvLyDjg4njg63jg4Pjg5fjg4Djgqbjg7Pjg6Hjg4vjg6Xjg7zjgrPjg7Pjg4bjg4rjgpLliJ3mnJ/ljJYo5piO57Sw57eo6ZuG55S76Z2iKVxyXG4gIHByaXZhdGUgaW5pdERyb3Bkb3duQ29udGFpbmVyZm9yRGV0YWlsKHRhYmxlRWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpZWxkTGlzdCA9IHRoaXMucHJvcHMuZmllbGRMaXN0O1xyXG4gICAgbGV0IGhlYWRlckNlbGxzID0gJCh0YWJsZUVsZW1lbnQpLmZpbmQoXCIuY29udHJvbC1nYWlhXCIpO1xyXG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZExpc3QpIHtcclxuICAgICAgY29uc3QgY2VsbCA9IGhlYWRlckNlbGxzLmhhcyhgZGl2LmNvbnRyb2wtbGFiZWwtZ2FpYSBzcGFuOmNvbnRhaW5zKFwiJHtmaWVsZC5kcm9wRG93bi5sYWJlbH1cIilgKS5nZXQoMCk7XHJcbiAgICAgIGlmKGNlbGwhPT11bmRlZmluZWQpe1xyXG4gICAgICAgIGNvbnN0IHZhbHVlRWxlbSA9ICQoY2VsbCkuZmluZChcIi5jb250cm9sLXZhbHVlLWdhaWFcIikuZ2V0KDApO1xyXG4gICAgICAgIGlmKHZhbHVlRWxlbSE9PXVuZGVmaW5lZCl7XHJcbiAgICAgICAgICB0aGlzLmNvbHVtbk1hcC5zZXQoY2VsbCwgZmllbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jb2x1bU1hcEFycmF5ID0gQXJyYXkuZnJvbSh0aGlzLmNvbHVtbk1hcC5lbnRyaWVzKCkpO1xyXG4gICAgdGhpcy5jb2x1bU1hcFZhbHVlQXJyYXkgPSBBcnJheS5mcm9tKHRoaXMuY29sdW1uTWFwLnZhbHVlcygpKTtcclxuICB9XHJcblxyXG4gIC8vIOODieODreODg+ODl+ODgOOCpuODs+ODoeODi+ODpeODvOOCkuODrOODs+ODgOODquODs+OCsFxyXG4gIHByaXZhdGUgcmVuZGVyRHJvcGRvd25Db250YWluZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbHVtbk1hcC5mb3JFYWNoKChmaWVsZCwgY2VsbCkgPT4ge1xyXG4gICAgICAvLyBjb25zdCBjZWxsID0gY2VsbHNbY29sdW1uSW5kZXhdO1xyXG4gICAgICBpZiAoIWNlbGwpIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IGlucHV0ID0gY2VsbC5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KFwiaW5wdXRcIik7XHJcbiAgICAgIGlmICghaW5wdXQpIHJldHVybjtcclxuXHJcbiAgICAgIHRoaXMuY3JlYXRlU2VsZWN0KGlucHV0LCBmaWVsZC5kcm9wRG93bi5jb2RlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8g44OJ44Ot44OD44OX44OA44Km44Oz44Oh44OL44Ol44O844KS5L2c5oiQXHJcbiAgcHJpdmF0ZSBjcmVhdGVTZWxlY3QoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQsIGZpZWxkQ29kZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgZGl2LmNsYXNzTmFtZSA9IFwiYnMtc2NvcGVcIjtcclxuICAgIGRpdi5zdHlsZS5tYXJnaW4gPSBcIjAuMTJyZW1cIjtcclxuICAgIGNvbnN0IHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIik7XHJcbiAgICBzZWxlY3QuY2xhc3NOYW1lID0gXCJjdXN0b20tZHJvcGRvd24gZm9ybS1zZWxlY3RcIjtcclxuICAgIHNlbGVjdC5kYXRhc2V0LmZpZWxkID0gZmllbGRDb2RlO1xyXG4gICAgc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgKGV2ZW50KSA9PntcclxuICAgICAgdGhpcy5zZWxlY3RvckNoYW5nZUhhbmRsZShmaWVsZENvZGUsIGV2ZW50KTtcclxuICAgICAgaW5wdXQudmFsdWU9dGhpcy5zdGF0ZVtmaWVsZENvZGVdO1xyXG4gICAgfSk7XHJcbiAgICBkaXYuYXBwZW5kQ2hpbGQoc2VsZWN0KTtcclxuICAgIHRoaXMudXBkYXRlT3B0aW9ucyhmaWVsZENvZGUsIHNlbGVjdCwgaW5wdXQudmFsdWUpO1xyXG4gICAgaW5wdXQucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKGRpdiwgaW5wdXQubmV4dFNpYmxpbmcpO1xyXG4gICAgaW5wdXQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgdGhpcy5zZWxlY3RzLnNldChmaWVsZENvZGUsIGRpdik7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8g44OJ44Ot44OD44OX44OA44Km44Oz44Oh44OL44Ol44O844Gu44Kq44OX44K344On44Oz44KS5pu05pawXHJcbiAgcHJpdmF0ZSB1cGRhdGVPcHRpb25zKFxyXG4gICAgZmllbGRDb2RlOiBzdHJpbmcsXHJcbiAgICBpbml0U2VsZWN0PzogSFRNTFNlbGVjdEVsZW1lbnQgfCB1bmRlZmluZWQgfCBudWxsLFxyXG4gICAgdmFsdWU/OiBzdHJpbmdcclxuICApOiB2b2lkIHtcclxuICAgIGxldCBzZWxlY3QgPSBpbml0U2VsZWN0O1xyXG4gICAgaWYgKCFpbml0U2VsZWN0KSB7XHJcbiAgICAgIHNlbGVjdCA9IHRoaXMuc2VsZWN0c1xyXG4gICAgICAgIC5nZXQoZmllbGRDb2RlKVxyXG4gICAgICAgID8ucXVlcnlTZWxlY3RvcjxIVE1MU2VsZWN0RWxlbWVudD4oXCJzZWxlY3RcIik7XHJcbiAgICAgIGlmICghc2VsZWN0KSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgIGDjg5XjgqPjg7zjg6vjg4kgJHtmaWVsZENvZGV9IOOBruODieODreODg+ODl+ODgOOCpuODs+ODoeODi+ODpeODvOimgee0oOOBjOimi+OBpOOBi+OCiuOBvuOBm+OCk2BcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zdGF0ZVtmaWVsZENvZGVdID0gdmFsdWUhO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5wcm9wcy5maWVsZExpc3QuZmluZCgoZikgPT4gZi5kcm9wRG93bi5jb2RlID09PSBmaWVsZENvZGUpO1xyXG4gICAgaWYgKCFmaWVsZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGDjg5XjgqPjg7zjg6vjg4kgJHtmaWVsZENvZGV9IOOBruioreWumuOBjOimi+OBpOOBi+OCiuOBvuOBm+OCk2ApO1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOODleOCo+ODvOODq+ODiSAke2ZpZWxkQ29kZX0g44Gu6Kit5a6a44GM6KaL44Gk44GL44KK44G+44Gb44KTYCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbGV2ZWwgPSB0aGlzLmdldExldmVsKGZpZWxkQ29kZSk7XHJcbiAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gdGhpcy5nZXRQcmV2aW91c1ZhbHVlRnJvbVN0YXRlKGZpZWxkQ29kZSk7XHJcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKGxldmVsLCBwcmV2aW91c1ZhbHVlKTtcclxuICAgIGlmICghc2VsZWN0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3QuaW5uZXJIVE1MID0gJzxvcHRpb24gdmFsdWU9XCJcIj7pgbjmip7jgZfjgabjgY/jgaDjgZXjgYQ8L29wdGlvbj4nO1xyXG4gICAgb3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcclxuICAgICAgY29uc3Qgb3B0aW9uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIik7XHJcbiAgICAgIG9wdGlvbkVsZW1lbnQudmFsdWUgPSBvcHRpb247XHJcbiAgICAgIG9wdGlvbkVsZW1lbnQudGV4dENvbnRlbnQgPSBvcHRpb247XHJcbiAgICAgIHNlbGVjdD8uYXBwZW5kQ2hpbGQob3B0aW9uRWxlbWVudCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBzZWxlY3QudmFsdWUgPSB2YWx1ZSA/PyB0aGlzLnN0YXRlW2ZpZWxkQ29kZV0gPz8gXCJcIjtcclxuICAgIHNlbGVjdC5kaXNhYmxlZCA9IGxldmVsID4gMCAmJiAhcHJldmlvdXNWYWx1ZTtcclxuICB9XHJcblxyXG4gIC8vIOODieODreODg+ODl+ODgOOCpuODs+ODoeODi+ODpeODvOOBjOWkieabtOOBleOCjOOBn+W+jOOBq+ODiOODquOCrOODvOOBleOCjOOCi+mWouaVsFxyXG4gIHByaXZhdGUgc2VsZWN0b3JDaGFuZ2VIYW5kbGU9KGZpZWxkQ29kZTogc3RyaW5nLCBldmVudDogRXZlbnQpPT4ge1xyXG4gICAgY29uc3Qgc2VsZWN0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50O1xyXG4gICAgdGhpcy5zdGF0ZVtmaWVsZENvZGVdID0gc2VsZWN0LnZhbHVlO1xyXG4gICAgY29uc3QgY3VycmVudExldmVsID0gdGhpcy5nZXRMZXZlbChmaWVsZENvZGUpO1xyXG4gICAgdGhpcy5jb2x1bU1hcEFycmF5XHJcbiAgICAgIC5maWx0ZXIoKF8sIGFycmF5SW5kZXgpID0+IGFycmF5SW5kZXggPiBjdXJyZW50TGV2ZWwpXHJcbiAgICAgIC5mb3JFYWNoKChbXywgZmllbGRdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZmllbGRDb2RlID0gZmllbGQuZHJvcERvd24uY29kZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoZmllbGRDb2RlKTtcclxuICAgICAgICBjb25zdCBpbnB1dEVsZW0gPSB0aGlzLnNlbGVjdHMuZ2V0KGZpZWxkQ29kZSk/LnByZXZpb3VzRWxlbWVudFNpYmxpbmcgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgICAgICBpZihpbnB1dEVsZW0pe1xyXG4gICAgICAgICAgaW5wdXRFbGVtLnZhbHVlPVwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlbGV0ZSB0aGlzLnN0YXRlW2ZpZWxkQ29kZV07XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8g44OV44Kj44O844Or44OJ44Gu44Os44OZ44Or44KS5Y+W5b6XXHJcbiAgcHJpdmF0ZSBnZXRMZXZlbChmaWVsZENvZGU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5jb2x1bU1hcFZhbHVlQXJyYXkuZmluZEluZGV4KFxyXG4gICAgICAoZmllbGQpID0+IGZpZWxkLmRyb3BEb3duLmNvZGUgPT09IGZpZWxkQ29kZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIOWJjeOBruODrOODmeODq+OBruODleOCo+ODvOODq+ODieOBruWApOOCkuWPluW+l1xyXG4gIHByaXZhdGUgZ2V0UHJldmlvdXNWYWx1ZUZyb21TdGF0ZShmaWVsZENvZGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLmdldExldmVsKGZpZWxkQ29kZSk7XHJcbiAgICBpZiAoY3VycmVudEluZGV4IDw9IDApIHJldHVybiBcIlwiO1xyXG4gICAgY29uc3QgcHJldmlvdXNGaWVsZCA9IHRoaXMuY29sdW1NYXBWYWx1ZUFycmF5W2N1cnJlbnRJbmRleCAtIDFdO1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGVbcHJldmlvdXNGaWVsZC5kcm9wRG93bi5jb2RlXSA/PyBcIlwiO1xyXG4gIH1cclxuXHJcbiAgLy8g5oyH5a6a44GV44KM44Gf6ZqO5bGk44Go5YCk44Gu44OJ44Ot44OD44OX44OA44Km44Oz44Oh44OL44Ol44O844Kq44OX44K344On44Oz44KS5Y+W5b6XXHJcbiAgcHJpdmF0ZSBnZXRPcHRpb25zKGxldmVsOiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBrZXkgPSBsZXZlbCA9PT0gMCA/IFwiMF9UT1BcIiA6IHRoaXMuYnVpbGRLZXkobGV2ZWwgLSAxLCB2YWx1ZSk7XHJcbiAgICByZXR1cm4gdGhpcy5kaWN0aW9uYXJ5W2tleV0gfHwgW107XHJcbiAgfVxyXG5cclxuICAvLyDjg4njg63jg4Pjg5fjg4Djgqbjg7Pjg6Hjg4vjg6Xjg7zjga7jgq3jg7zjgpLmp4vnr4lcclxuICBwcml2YXRlIGJ1aWxkS2V5KGxldmVsOiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke2xldmVsfV8ke3ZhbHVlfWA7XHJcbiAgfVxyXG59IiwiaW1wb3J0IHtcclxuICBJQWN0aW9uLFxyXG4gIElBY3Rpb25SZXN1bHQsXHJcbiAgSUFjdGlvbk5vZGUsXHJcbiAgSUFjdGlvblByb3BlcnR5LFxyXG4gIElDb250ZXh0LFxyXG59IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG5pbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG4vLyBpbXBvcnQgeyBLaW50b25lUmVzdEFQSUNsaWVudCB9IGZyb20gXCJAa2ludG9uZS9yZXN0LWFwaS1jbGllbnRcIjtcclxuLy8gaW1wb3J0IHsgZ2V0UGFnZVN0YXRlIH0gZnJvbSBcIi4uL3V0aWwvdXJsXCI7XHJcbmltcG9ydCB7IFNuaXBwZXIgfSBmcm9tICcuLi91dGlsL3VpLWhlbHBlcic7XHJcbmltcG9ydCB7IERyb3BEb3duTWFuYWdlcixJQ2FzY2FkaW5nRHJvcERvd24sIElGaWVsZExpc3R9IGZyb20gJy4uL3R5cGVzL0Nhc2NhZGluZ0Ryb3BEb3duTWFuYWdlcidcclxuaW1wb3J0IFwiLi9jYXNjYWRpbmctZHJvcGRvd24uc2Nzc1wiO1xyXG4vLyBpbXBvcnQgeyBSZWNvcmQgYXMgS1RSZWNvcmQgfSBmcm9tIFwiQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvY2xpZW50L3R5cGVzXCI7XHJcblxyXG4vLyDpmo7lsaTljJbjg4njg63jg4Pjg5fjg4Djgqbjg7Pjg6Hjg4vjg6Xjg7zjga7jg5fjg63jg5Hjg4bjgqPjgqTjg7Pjgr/jg7zjg5Xjgqfjg7zjgrlcclxuaW50ZXJmYWNlIElDYXNjYWRpbmdEcm9wRG93blByb3BzIHtcclxuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xyXG4gIGNhc2NhZGluZ0Ryb3BEb3duOiBJQ2FzY2FkaW5nRHJvcERvd247XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDpmo7lsaTljJbjg4njg63jg4Pjg5fjg4Djgqbjg7Pjga7jgq/jg6njgrnlrp/oo4VcclxuICovXHJcbmV4cG9ydCBjbGFzcyBDYXNjYWRpbmdEcm9wRG93bkFjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb24ge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgcHJvcHM6IElDYXNjYWRpbmdEcm9wRG93blByb3BzO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMubmFtZSA9IFwi6ZqO5bGk5YyW44OJ44Ot44OD44OX44OA44Km44OzXCI7XHJcbiAgICB0aGlzLmFjdGlvblByb3BzID0gW107XHJcbiAgICB0aGlzLnByb3BzID0ge30gYXMgSUNhc2NhZGluZ0Ryb3BEb3duUHJvcHM7XHJcbiAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDjgqLjgq/jgrfjg6fjg7Pjga7jg5fjg63jgrvjgrnlrp/ooYxcclxuICAgKiBAcGFyYW0gYWN0aW9uTm9kZSBcclxuICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICogQHBhcmFtIGNvbnRleHQgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgYXN5bmMgcHJvY2VzcyhcclxuICAgIGFjdGlvbk5vZGU6IElBY3Rpb25Ob2RlLFxyXG4gICAgZXZlbnQ6IGFueSxcclxuICAgIGNvbnRleHQ6IElDb250ZXh0XHJcbiAgKTogUHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICB0aGlzLmFjdGlvblByb3BzID0gYWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElDYXNjYWRpbmdEcm9wRG93blByb3BzO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdDogSUFjdGlvblJlc3VsdCA9IHsgY2FuTmV4dDogdHJ1ZSwgcmVzdWx0OiBcIlwiIH07XHJcbiAgICBjb25zdCBzbmlwcGVyID0gbmV3IFNuaXBwZXIoXCJib2R5XCIpO1xyXG4gICAgY29uc3QgZHJvcERvd25NYW5hZ2VyPSBuZXcgRHJvcERvd25NYW5hZ2VyKHRoaXMucHJvcHMuY2FzY2FkaW5nRHJvcERvd24sZXZlbnQpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLnByb3BzKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICBjb25zdCBhcHBJZCA9IHRoaXMucHJvcHMuY2FzY2FkaW5nRHJvcERvd24uZHJvcERvd25BcHAuaWQ7XHJcbiAgICAgIC8vc25pcHBlcuihqOekulxyXG4gICAgICBzbmlwcGVyLnNob3dTcGlubmVyKCk7XHJcbiAgICAgIGF3YWl0IGRyb3BEb3duTWFuYWdlci5oYW5kbGVQYWdlU3RhdGUoYXBwSWQpO1xyXG4gICAgICBzbmlwcGVyLmhpZGVTcGlubmVyKCk7XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgIFwiQ2FzY2FkaW5nRHJvcERvd25BY3Rpb24g44OX44Ot44K744K55Lit44Gr44Ko44Op44O844GM55m655Sf44GX44G+44GX44GfOlwiLFxyXG4gICAgICAgIGVycm9yXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnRleHQuZXJyb3JzLmhhbmRsZUVycm9yKGVycm9yLCBhY3Rpb25Ob2RlKTtcclxuICAgICAgcmV0dXJuIHsgY2FuTmV4dDogZmFsc2UsIHJlc3VsdDogXCJcIiB9O1xyXG4gICAgfWZpbmFsbHl7XHJcbiAgICAgIHNuaXBwZXIucmVtb3ZlU3Bpbm5lcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXSA9IHRoaXM7XHJcbiAgfVxyXG59XHJcblxyXG5uZXcgQ2FzY2FkaW5nRHJvcERvd25BY3Rpb24oKTtcclxuIiwiLyoqXHJcbiAqIOOCouODl+ODquaDheWgsVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBBcHBJbmZvIHtcclxuICBhcHBJZDogc3RyaW5nO1xyXG4gIGNvZGU/OiBzdHJpbmc7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuKiDjgqLjgq/jgrfjg6fjg7Pjga7jg5fjg63jg5Hjg4bjgqPlrprnvqlcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFjdGlvblByb3BlcnR5IHtcclxuICBjb21wb25lbnQ6IHN0cmluZztcclxuICBwcm9wczoge1xyXG4gICAgLy/jg5fjg63jg5Hjg4bjgqPlkI1cclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIC8v44OX44Ot44OR44OG44Kj6KGo56S65ZCNXHJcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nO1xyXG4gICAgcGxhY2Vob2xkZXI6IHN0cmluZztcclxuICAgIC8v44OX44Ot44OR44OG44Kj6Kit5a6a5YCkXHJcbiAgICBtb2RlbFZhbHVlOiBhbnk7XHJcbiAgfTtcclxufVxyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44K/44Kk44OX5a6a576pXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElBY3Rpb25Ob2RlIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIC8v44Ki44Kv44K344On44Oz5ZCNXHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgc3ViVGl0bGU6IHN0cmluZztcclxuICBpbnB1dFBvaW50OiBzdHJpbmc7XHJcbiAgLy/lh7rlipvjg53jgqTjg7Pjg4jvvIjmnaHku7bliIblspDku6XlpJbmnKrkvb/nlKjvvIlcclxuICBvdXRwdXRQb2ludHM6IEFycmF5PHN0cmluZz47XHJcbiAgLy/jg6vjg7zjg4jjgqLjgq/jgrfjg6fjg7PvvIhLaW50b25lIGV2ZW5077yJXHJcbiAgaXNSb290OiBib29sZWFuO1xyXG4gIC8v44Ki44Kv44K344On44Oz44Gu44OX44Ot44OR44OG44Kj5a6a576pXHJcbiAgYWN0aW9uUHJvcHM6IEFycmF5PElBY3Rpb25Qcm9wZXJ0eT47XHJcbiAgLy/jgqLjgq/jgrfjg6fjg7Pjga7jg5fjg63jg5Hjg4bjgqPoqK3lrprlgKTmir3lh7pcclxuICBBY3Rpb25WYWx1ZTogb2JqZWN0XHJcbiAgcHJldk5vZGVJZD86IHN0cmluZztcclxuICBuZXh0Tm9kZUlkczogTWFwPHN0cmluZywgc3RyaW5nPjtcclxufVxyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44OV44Ot44O844Gu5a6a576pXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElBY3Rpb25GbG93IHtcclxuICBpZDogc3RyaW5nO1xyXG4gIGFjdGlvbk5vZGVzOiBJQWN0aW9uTm9kZVtdO1xyXG4gIGZpbmROb2RlQnlJZChpZDogc3RyaW5nKTogSUFjdGlvbk5vZGUgfCB1bmRlZmluZWQ7XHJcbiAgdG9KU09OKCk6IGFueTtcclxuICBnZXRSb290KCk6IElBY3Rpb25Ob2RlIHwgdW5kZWZpbmVkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBY3Rpb25SZXN1bHR7XHJcbiAgY2FuTmV4dDpib29sZWFuO1xyXG4gIHJlc3VsdD86YW55O1xyXG59XHJcblxyXG4vKipcclxuICog44Kz44Oz44OG44Kt44K544OIXHJcbiAqIOODrOOCs+ODvOODieOBqOODleODreODvOOBruWkieaVsOOCkuaMgeOBpFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJQ29udGV4dHtcclxuICByZWNvcmQ6YW55LFxyXG4gIHZhcmlhYmxlczphbnksXHJcbiAgZXJyb3JzOkVycm9yTWFuYWdlclxyXG59XHJcblxyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44Gu44Kk44Oz44K/44O844OV44Kn44O844K5XHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElBY3Rpb257XHJcbiAgLy/jgqLjgq/jgrfjg6fjg7Pjga7lkI3liY3vvIjjg6bjg7zjg4vjg4Pjgq/lkI3jgYzlv4XopoHvvIlcclxuICBuYW1lOnN0cmluZztcclxuICAvL+WxnuaAp+ioreWumuaDheWgsVxyXG4gIGFjdGlvblByb3BzOiBBcnJheTxJQWN0aW9uUHJvcGVydHk+O1xyXG4gIC8v44Ki44Kv44K344On44Oz44Gu44OX44Ot44K744K55a6f6KGM6Zai5pWwXHJcbiAgcHJvY2Vzcyhwcm9wOklBY3Rpb25Ob2RlLGV2ZW50OmFueSxjb250ZXh0OklDb250ZXh0KTpQcm9taXNlPElBY3Rpb25SZXN1bHQ+O1xyXG4gIC8v44Ki44Kv44K344On44Oz44Gu55m76Yyy6Zai5pWwXHJcbiAgcmVnaXN0ZXIoKTp2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElGaWVsZHtcclxuICBuYW1lPzpzdHJpbmc7XHJcbiAgY29kZTpzdHJpbmc7XHJcbiAgdHlwZT86c3RyaW5nO1xyXG4gIHJlcXVpcmVkPzpib29sZWFuO1xyXG4gIG9wdGlvbnM/OnN0cmluZztcclxuICBsYWJlbD86IHN0cmluZztcclxufVxyXG4vL+WkieaVsOOBruOCpOODs+OCv+ODvOODleOCp+ODvOOCuVxyXG5leHBvcnQgaW50ZXJmYWNlIElWYXJOYW1le1xyXG4gIG5hbWU6c3RyaW5nO1xyXG4gIGZpZWxkcz86SVZhck5hbWVbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOODpuODvOOCtuODvOOAgeOCsOODq+ODvOODl+OAgee1hOe5lOOBquOBqeOCquODluOCuOOCp+OCr+ODiOmhnuWei1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJQ29kZVZhbHVlIHtcclxuICBjb2RlOiBzdHJpbmc7XHJcbiAgbmFtZT86IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+OBruODl+ODreODkeODhuOCo+Wumue+qeOBq+WfuuOBpeOBhOOBn+OCr+ODqeOCuVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEFjdGlvblByb3BlcnR5IGltcGxlbWVudHMgSUFjdGlvblByb3BlcnR5IHtcclxuICBjb21wb25lbnQ6IHN0cmluZztcclxuICBwcm9wczoge1xyXG4gICAgLy8g44OX44Ot44OR44OG44Kj5ZCNXHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICAvLyDjg5fjg63jg5Hjg4bjgqPooajnpLrlkI1cclxuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgICBwbGFjZWhvbGRlcjogc3RyaW5nO1xyXG4gICAgLy8g44OX44Ot44OR44OG44Kj6Kit5a6a5YCkXHJcbiAgICBtb2RlbFZhbHVlOiBhbnk7XHJcbiAgfTtcclxuXHJcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0eSgpOiBJQWN0aW9uUHJvcGVydHkge1xyXG4gICAgcmV0dXJuIG5ldyBBY3Rpb25Qcm9wZXJ0eSgnSW5wdXRUZXh0JywgJ2Rpc3BsYXlOYW1lJywgJ+ihqOekuuWQjScsICfooajnpLrjgpLlhaXlipvjgZfjgabjgY/jgaDjgZXjgYQnLCAnJyk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBjb21wb25lbnQ6IHN0cmluZyxcclxuICAgIG5hbWU6IHN0cmluZyxcclxuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmcsXHJcbiAgICBwbGFjZWhvbGRlcjogc3RyaW5nLFxyXG4gICAgbW9kZWxWYWx1ZTogYW55XHJcbiAgKSB7XHJcbiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcclxuICAgIHRoaXMucHJvcHMgPSB7XHJcbiAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgIGRpc3BsYXlOYW1lOiBkaXNwbGF5TmFtZSxcclxuICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxyXG4gICAgICBtb2RlbFZhbHVlOiBtb2RlbFZhbHVlXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIElBY3Rpb25Ob2Rl44Gu5a6f6KOF44CBUm9vdEFjdGlvbk5vZGXku6XlpJbjga7jgqLjgq/jgrfjg6fjg7PlrprnvqlcclxuICovXHJcbmV4cG9ydCBjbGFzcyBBY3Rpb25Ob2RlIGltcGxlbWVudHMgSUFjdGlvbk5vZGUge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGdldCB0aXRsZSgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcHJvcCA9IHRoaXMuYWN0aW9uUHJvcHMuZmluZCgocHJvcCkgPT4gcHJvcC5wcm9wcy5uYW1lID09PSBcImRpc3BsYXlOYW1lXCIpO1xyXG4gICAgcmV0dXJuIHByb3A/LnByb3BzLm1vZGVsVmFsdWU7XHJcbiAgfTtcclxuICBnZXQgc3ViVGl0bGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm5hbWU7XHJcbiAgfTtcclxuICBpbnB1dFBvaW50OiBzdHJpbmc7XHJcbiAgLy/lh7rlipvjg53jgqTjg7Pjg4jvvIjmnaHku7bliIblspDku6XlpJbmnKrkvb/nlKjvvIlcclxuICBvdXRwdXRQb2ludHM6IEFycmF5PHN0cmluZz47XHJcbiAgYWN0aW9uUHJvcHM6IEFycmF5PElBY3Rpb25Qcm9wZXJ0eT47XHJcbiAgZ2V0IGlzUm9vdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9O1xyXG4gIGdldCBBY3Rpb25WYWx1ZSgpOiBvYmplY3Qge1xyXG4gICAgY29uc3QgcHJvcFZhbHVlOiBhbnkgPSB7fTtcclxuICAgIHRoaXMuYWN0aW9uUHJvcHMuZm9yRWFjaCgodmFsdWUpID0+IHtcclxuICAgICAgcHJvcFZhbHVlW3ZhbHVlLnByb3BzLm5hbWVdID0gdmFsdWUucHJvcHMubW9kZWxWYWx1ZVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcHJvcFZhbHVlO1xyXG4gIH07XHJcbiAgcHJldk5vZGVJZD86IHN0cmluZztcclxuICBuZXh0Tm9kZUlkczogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHtpZCxuYW1lLHRpdGxlLGlucHV0UG9pbnQsb3V0cHV0UG9pbnRzLGFjdGlvblByb3BzfTpcclxuICAgIHtcclxuICAgICAgaWQ6c3RyaW5nLFxyXG4gICAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICAgIHRpdGxlOiBzdHJpbmcsXHJcbiAgICAgIGlucHV0UG9pbnQ6IHN0cmluZyxcclxuICAgICAgb3V0cHV0UG9pbnRzOiBBcnJheTxzdHJpbmc+LFxyXG4gICAgICBhY3Rpb25Qcm9wczogQXJyYXk8SUFjdGlvblByb3BlcnR5Pn1cclxuICApIHtcclxuICAgIHRoaXMuaWQ9aWQ7XHJcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgdGhpcy5pbnB1dFBvaW50ID0gaW5wdXRQb2ludDtcclxuICAgIHRoaXMub3V0cHV0UG9pbnRzID0gb3V0cHV0UG9pbnRzO1xyXG4gICAgY29uc3QgZGVmUHJvcCA9IEFjdGlvblByb3BlcnR5LmRlZmF1bHRQcm9wZXJ0eSgpO1xyXG4gICAgZGVmUHJvcC5wcm9wcy5tb2RlbFZhbHVlID0gdGl0bGU7XHJcbiAgICB0aGlzLmFjdGlvblByb3BzID0gYWN0aW9uUHJvcHM7XHJcbiAgICB0aGlzLm5leHROb2RlSWRzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcclxuICB9XHJcblxyXG59XHJcbi8qKlxyXG4gKiDjg6vjg7zjg4jjgqLjgq/jgrfjg6fjg7PlrprnvqlcclxuICovXHJcbmV4cG9ydCBjbGFzcyBSb290QWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbk5vZGUge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgc3ViVGl0bGU6IHN0cmluZztcclxuICBpbnB1dFBvaW50OiBzdHJpbmc7XHJcbiAgLy/lh7rlipvjg53jgqTjg7Pjg4jvvIjmnaHku7bliIblspDku6XlpJbmnKrkvb/nlKjvvIlcclxuICBvdXRwdXRQb2ludHM6IEFycmF5PHN0cmluZz47XHJcbiAgaXNSb290OiBib29sZWFuO1xyXG4gIGFjdGlvblByb3BzOiBBcnJheTxJQWN0aW9uUHJvcGVydHk+O1xyXG4gIEFjdGlvblZhbHVlOiBvYmplY3Q7XHJcbiAgcHJldk5vZGVJZD86IHN0cmluZyA9IHVuZGVmaW5lZDtcclxuICBuZXh0Tm9kZUlkczogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHtpZCxuYW1lLHRpdGxlLHN1YlRpdGxlfTp7XHJcbiAgICAgIGlkOnN0cmluZyxcclxuICAgICAgbmFtZTogc3RyaW5nLFxyXG4gICAgICB0aXRsZTogc3RyaW5nLFxyXG4gICAgICBzdWJUaXRsZTogc3RyaW5nfVxyXG4gICkge1xyXG4gICAgdGhpcy5pZCA9IGlkO1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIHRoaXMudGl0bGUgPSB0aXRsZTtcclxuICAgIHRoaXMuc3ViVGl0bGUgPSBzdWJUaXRsZTtcclxuICAgIHRoaXMuaW5wdXRQb2ludCA9ICcnO1xyXG4gICAgdGhpcy5vdXRwdXRQb2ludHMgPSBbXTtcclxuICAgIHRoaXMuaXNSb290ID0gdHJ1ZTtcclxuICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBbXTtcclxuICAgIHRoaXMuQWN0aW9uVmFsdWUgPSB7fTtcclxuICAgIHRoaXMubmV4dE5vZGVJZHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+ODleODreODvOOBruWumue+qVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEFjdGlvbkZsb3cgaW1wbGVtZW50cyBJQWN0aW9uRmxvdyB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBhY3Rpb25Ob2RlczogQXJyYXk8SUFjdGlvbk5vZGU+O1xyXG4gIGNvbnN0cnVjdG9yKGFjdGlvbk5vZGVzOiBBcnJheTxJQWN0aW9uTm9kZT4gfCBSb290QWN0aW9uKSB7XHJcbiAgICBpZiAoYWN0aW9uTm9kZXMgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICB0aGlzLmFjdGlvbk5vZGVzID0gYWN0aW9uTm9kZXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFjdGlvbk5vZGVzID0gW2FjdGlvbk5vZGVzXTtcclxuICAgIH1cclxuICAgIHRoaXMuaWQgPSAnJztcclxuICB9XHJcbiAgLyoqKlxyXG4gICAqIElE44GnQWN0aW9uTm9kZeOCkuWPluW+l+OBmeOCi1xyXG4gICAqL1xyXG4gIGZpbmROb2RlQnlJZChpZDogc3RyaW5nKTogSUFjdGlvbk5vZGUgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuYWN0aW9uTm9kZXMuZmluZCgobm9kZSkgPT4gbm9kZS5pZCA9PT0gaWQpO1xyXG4gIH1cclxuXHJcbiAgdG9KU09OKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaWQ6IHRoaXMuaWQsXHJcbiAgICAgIGFjdGlvbk5vZGVzOiB0aGlzLmFjdGlvbk5vZGVzLm1hcChub2RlID0+IHtcclxuICAgICAgICBjb25zdCB7IG5leHROb2RlSWRzLCAuLi5yZXN0IH0gPSBub2RlO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5yZXN0LFxyXG4gICAgICAgICAgbmV4dE5vZGVJZHM6IEFycmF5LmZyb20obmV4dE5vZGVJZHMuZW50cmllcygpKVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0Um9vdCgpOiBJQWN0aW9uTm9kZSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5hY3Rpb25Ob2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pc1Jvb3QpXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUpTT04oanNvbjogc3RyaW5nKTogQWN0aW9uRmxvdyB7XHJcbiAgICBjb25zdCBwYXJzZWRPYmplY3QgPSBKU09OLnBhcnNlKGpzb24pO1xyXG5cclxuICAgIGNvbnN0IGFjdGlvbk5vZGVzID0gcGFyc2VkT2JqZWN0LmFjdGlvbk5vZGVzLm1hcCgobm9kZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IG5vZGVDbGFzcyA9ICFub2RlLmlzUm9vdCA/IG5ldyBBY3Rpb25Ob2RlKG5vZGUpXHJcbiAgICAgICAgOiBuZXcgUm9vdEFjdGlvbihub2RlKTtcclxuICAgICAgbm9kZUNsYXNzLm5leHROb2RlSWRzID0gbmV3IE1hcDxzdHJpbmcsc3RyaW5nPihPYmplY3QuZW50cmllcyhub2RlLm5leHROb2RlSWRzKSk7XHJcbiAgICAgIG5vZGVDbGFzcy5wcmV2Tm9kZUlkID0gbm9kZS5wcmV2Tm9kZUlkO1xyXG4gICAgICBub2RlQ2xhc3MuaWQgPSBub2RlLmlkO1xyXG4gICAgICByZXR1cm4gbm9kZUNsYXNzO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBhY3Rpb25GbG93ID0gbmV3IEFjdGlvbkZsb3coYWN0aW9uTm9kZXMpO1xyXG4gICAgYWN0aW9uRmxvdy5pZCA9IHBhcnNlZE9iamVjdC5pZDtcclxuICAgIHJldHVybiBhY3Rpb25GbG93O1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQWN0aW9uRXJyb3J7XHJcbiAgYWN0aW9uOiBJQWN0aW9uTm9kZSxcclxuICBlcnJvcjpzdHJpbmdcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEVycm9yTWFuYWdlcntcclxuICBwcml2YXRlIGVycm9yczpJQWN0aW9uRXJyb3JbXT1bXTtcclxuICBcclxuICBwdWJsaWMgZ2V0IGhhc0Vycm9yKCk6Ym9vbGVhbntcclxuICAgIHJldHVybiB0aGlzLmVycm9ycy5sZW5ndGg+MDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVFcnJvcihlcnI6YW55LGFjdGlvbjpJQWN0aW9uTm9kZSxkZWZhdWx0TWVzc2FnZT86c3RyaW5nKXtcclxuICAgIGNvbnN0IGRlZk1zZyA9IGRlZmF1bHRNZXNzYWdlID8gZGVmYXVsdE1lc3NhZ2UgOiAnJztcclxuICAgIGxldCBlcnJvciA9IGVyciBpbnN0YW5jZW9mIEVycm9yPyBgJHtkZWZNc2d9ICR7ZXJyLm1lc3NhZ2V9YCA6IGRlZk1zZyA7XHJcbiAgICBjb25zb2xlLmVycm9yKGDjgIwke2FjdGlvbi5uYW1lfeOAjeWHpueQhuS4reS+i+WklueZuueUn+OBl+OBvuOBl+OBn+OAgmAsZXJyKTtcclxuICAgIHRoaXMuZXJyb3JzLnB1c2goe2Vycm9yLGFjdGlvbn0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEV2ZW50KGV2ZW50OmFueSl7XHJcbiAgICAgY29uc3QgbWVzc2FnZXMgPSB0aGlzLmVycm9ycy5tYXAoKGVycik9PntcclxuICAgICAgICByZXR1cm4gYOOAjCR7ZXJyLmFjdGlvbi5uYW1lfeOAjeWHpueQhuS4reS+i+WklueZuueUn+OBl+OBvuOBl+OBn+OAglxcbuips+e0sDoke2Vyci5lcnJvcn1gO1xyXG4gICAgIH0pOyBcclxuICAgICBldmVudC5lcnJvcj1tZXNzYWdlcy5qb2luKCdcXG4nKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93RXJyb3IoKXtcclxuICAgIGNvbnN0IG1zZyA9dGhpcy5lcnJvcnMubWFwKChlcnIpPT57XHJcbiAgICAgIHJldHVybiBg44CMJHtlcnIuYWN0aW9uLm5hbWV944CN5Yem55CG5Lit5L6L5aSW55m655Sf44GX44G+44GX44Gf44CCXFxu6Kmz57SwOiR7ZXJyLmVycm9yfWA7XHJcbiAgICB9KTtcclxuICAgIHdpbmRvdy5hbGVydChtc2cpO1xyXG4gICAgLy8gY29uc3QgaHRtbD1cclxuICAgIC8vIGA8ZGl2IGlkPVwibXlhbGVydFwiIGNsYXNzPVwibm90aWZpZXItY3lib3p1IG5vdGlmaWVyLWVycm9yLWN5Ym96dVwiIHN0eWxlPVwibGVmdDogNTAlOyB0b3A6IDBweDtcIj5cclxuICAgIC8vIDxkaXYgY2xhc3M9XCJub3RpZmllci1oZWFkZXItY3lib3p1XCI+PGRpdiBjbGFzcz1cIm5vdGlmaWVyLXRpdGxlLWN5Ym96dVwiPuOCqOODqeODvDwvZGl2PlxyXG4gICAgLy8gPHVsIGNsYXNzPVwibm90aWZpZXItYm9keS1jeWJvenVcIj48bGk+JHttc2d9PC9saT48L3VsPjwvZGl2PlxyXG4gICAgLy8gPGEgY2xhc3M9XCJub3RpZmllci1yZW1vdmUtY3lib3p1XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiPjwvYT48L2Rpdj5gXHJcbiAgICAvLyBjb25zdCBhbGVydCA9ICQoaHRtbCkuYXBwZW5kVG8oXCJib2R5XCIpO1xyXG4gICAgLy8gYWxlcnQuY2hpbGRyZW4oXCIjbXlhbGVydCAubm90aWZpZXItcmVtb3ZlLWN5Ym96dVwiKS5vbihcImNsaWNrXCIsKGV2KT0+e1xyXG4gICAgLy8gICAgJChcIm15YWxlcnRcIikuc2xpZGVVcCgpLnJlbW92ZSgpO1xyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG59XHJcblxyXG4iLCJcclxuaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi4uL2FjdGlvbnNcIjtcclxuaW1wb3J0ICcuLi9hY3Rpb25zL211c3QtaW5wdXQnO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvYXV0by1udW1iZXJpbmcnO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvZmllbGQtc2hvd24nO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvZXJyb3Itc2hvdyc7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9idXR0b24tYWRkJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL2NvbmRpdGlvbi1hY3Rpb24nO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvZGF0YS1wcm9jZXNzaW5nJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL2RhdGEtdXBkYXRlJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL2N1cnJlbnQtZmllbGQtZ2V0JztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL3JlZ3VsYXItY2hlY2snO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvbWFpbC1jaGVjayc7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9jb3VudGVyLWNoZWNrJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL2RhdGV0aW1lLWdldHRlcic7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9pbnNlcnQtdmFsdWUnO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvdmFsdWUtZ2V0dGVyJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL3N0cmluZy1qb2luJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL3ZhbGlkYXRpb24tZnVsbHdpZHRoJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL3ZhbGlkYXRpb24taGFsZndpZHRoJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL2hhbGYtZnVsbC1jb252ZXJzaW9uJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL2xvZ2luLXVzZXItZ2V0dGVyJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL2F1dG8tbG9va3VwJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL2ZpZWxkLWRpc2FibGUnO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvc3R5bGUtZmllbGQnO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvZGF0ZXRpbWUtY2FsYyc7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9lbmQtb2YtbW9udGgnO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvZGF0ZS1zcGVjaWZpZWQnO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvY2FzY2FkaW5nLWRyb3Bkb3duJztcclxuaW1wb3J0IHsgQWN0aW9uRmxvdyxFcnJvck1hbmFnZXIsSUFjdGlvbkZsb3csIElBY3Rpb25SZXN1bHQsSUNvbnRleHQgfSBmcm9tIFwiLi9BY3Rpb25UeXBlc1wiO1xyXG5jb25zdCBTaG93RXJyb3JFdmVudHM6c3RyaW5nW10gPSBbXHJcbiAgICBcImFwcC5yZWNvcmQuY3JlYXRlLnN1Ym1pdC5zdWNjZXNzXCIsXHJcbiAgICBcImFwcC5yZWNvcmQuZWRpdC5zdWJtaXQuc3VjY2Vzc1wiLFxyXG4gICAgXCJhcHAucmVjb3JkLmluZGV4LmVkaXQuc3VibWl0LnN1Y2Nlc3NcIixcclxuICBdO1xyXG5leHBvcnQgY2xhc3MgQWN0aW9uUHJvY2Vzc3tcclxuICAgIGV2ZW50SWQ6c3RyaW5nO1xyXG4gICAgZmxvdzpJQWN0aW9uRmxvdztcclxuICAgIGV2ZW50OmFueTtcclxuICAgIGNvbnRleHQ6SUNvbnRleHQ7XHJcbiAgICAgY29uc3RydWN0b3IoZXZlbnRJZDpzdHJpbmcsZmxvdzpBY3Rpb25GbG93LGV2ZW50OmFueSl7XHJcbiAgICAgICAgdGhpcy5ldmVudElkPWV2ZW50SWQ7XHJcbiAgICAgICAgdGhpcy5mbG93PWZsb3c7XHJcbiAgICAgICAgdGhpcy5ldmVudD1ldmVudDtcclxuICAgICAgICBjb25zdCBlcnJvcm1hbmFnZXIgPSBuZXcgRXJyb3JNYW5hZ2VyKCk7XHJcbiBcclxuICAgICAgICB0aGlzLmNvbnRleHQ9e1xyXG4gICAgICAgICAgICByZWNvcmQ6dGhpcy5ldmVudC5yZWNvcmQsXHJcbiAgICAgICAgICAgIHZhcmlhYmxlczp7fSxcclxuICAgICAgICAgICAgZXJyb3JzOmVycm9ybWFuYWdlclxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBhc3luYyBleGVjKCl7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuZmxvdy5nZXRSb290KCk7XHJcbiAgICAgICAgaWYocm9vdD09PXVuZGVmaW5lZCB8fCByb290Lm5leHROb2RlSWRzLnNpemU9PT0wKXtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaWQ9cm9vdC5uZXh0Tm9kZUlkcy5nZXQoJycpO1xyXG4gICAgICAgIGlmKGlkPT09dW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICAgICAgbGV0IG5leHRBY3Rpb24gPSB0aGlzLmZsb3cuZmluZE5vZGVCeUlkKGlkKTsgXHJcbiAgICAgICAgbGV0IHJlc3VsdDpJQWN0aW9uUmVzdWx0PXtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB3aGlsZShuZXh0QWN0aW9uIT09dW5kZWZpbmVkICYmIHJlc3VsdC5jYW5OZXh0KXtcclxuICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBhY3Rpb25BZGRpbnNbbmV4dEFjdGlvbi5uYW1lXTtcclxuICAgICAgICAgICBpZihhY3Rpb24hPT11bmRlZmluZWQpe1xyXG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBhY3Rpb24ucHJvY2VzcyhuZXh0QWN0aW9uLHRoaXMuZXZlbnQsdGhpcy5jb250ZXh0KTtcclxuICAgICAgICAgICB9XHJcbiAgICAgICAgICAgbGV0IG5leHRJbnB1dCA9ICcnO1xyXG4gICAgICAgICAgIC8vb3V0cHV0UG9pbnRz5LiA44Gk5Lul5LiK44Gu5aC05ZCI44CB5qyh44GuSW5wdXRQb2ludOOBr+aIu+OCiuWApOOCkuioreWumuOBmeOCi1xyXG4gICAgICAgICAgIGlmKG5leHRBY3Rpb24ub3V0cHV0UG9pbnRzICYmIG5leHRBY3Rpb24ub3V0cHV0UG9pbnRzLmxlbmd0aD4xKXtcclxuICAgICAgICAgICAgIG5leHRJbnB1dCA9IHJlc3VsdC5yZXN1bHR8fCcnO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgICBpZD1uZXh0QWN0aW9uLm5leHROb2RlSWRzLmdldChuZXh0SW5wdXQpO1xyXG4gICAgICAgICAgIGlmKGlkPT09dW5kZWZpbmVkKSBicmVhaztcclxuICAgICAgICAgICBuZXh0QWN0aW9uID0gdGhpcy5mbG93LmZpbmROb2RlQnlJZChpZCk7IFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLmNvbnRleHQuZXJyb3JzLmhhc0Vycm9yKXtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmVycm9ycy5zZXRFdmVudCh0aGlzLmV2ZW50KTsgXHJcbiAgICAgICAgICAgIGlmKFNob3dFcnJvckV2ZW50cy5pbmNsdWRlcyh0aGlzLmV2ZW50LnR5cGUpKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5lcnJvcnMuc2hvd0Vycm9yKCk7XHJcbiAgICAgICAgICAgIH0gICAgXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcclxuaW1wb3J0IHsgQWN0aW9uUHJvY2VzcyB9IGZyb20gJy4vdHlwZXMvYWN0aW9uLXByb2Nlc3MnO1xyXG5pbXBvcnQgeyBBY3Rpb25GbG93IH0gZnJvbSAnLi90eXBlcy9BY3Rpb25UeXBlcyc7XHJcbmltcG9ydCB7IEZsb3dJbmZvIH0gZnJvbSAnLi90eXBlcy9mbG93U2V0dGluZyc7XHJcblxyXG5kZWNsYXJlIGNvbnN0IGFsY2Zsb3cgOiB7XHJcbiAgW2tleTpzdHJpbmddOkZsb3dJbmZvXHJcbn07XHJcblxyXG4kKGZ1bmN0aW9uICgpe1xyXG4gICAgY29uc3QgZ2V0Q2hhbmdlRXZlbnRzPShldmVudHM6c3RyaW5nW10pPT57XHJcbiAgICAgIHJldHVybiBldmVudHMuZmlsdGVyKChldmVudCk9PmV2ZW50LmluY2x1ZGVzKFwiLmNoYW5nZS5cIikpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZ2V0Q2xpY2tFdmVudHM9KGV2ZW50czpzdHJpbmdbXSk9PntcclxuICAgICAgcmV0dXJuIGV2ZW50cy5maWx0ZXIoKGV2ZW50KT0+ZXZlbnQuaW5jbHVkZXMoXCIuY3VzdG9tQnV0dG9uQ2xpY2suXCIpKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGdldEtpbnRvbmVFdmVudHM9KGV2ZW50czpzdHJpbmdbXSk9PntcclxuICAgICAgcmV0dXJuIGV2ZW50cy5maWx0ZXIoKGV2ZW50KT0+e1xyXG4gICAgICAgIHJldHVybiAhZXZlbnQuaW5jbHVkZXMoXCIuY3VzdG9tQnV0dG9uQ2xpY2suXCIpICYmICFldmVudC5pbmNsdWRlcyhcIi5jaGFuZ2UuXCIpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZXZlbnRzPU9iamVjdC5rZXlzKGFsY2Zsb3cpO1xyXG4gICAgY29uc3QgY2hhbmdlRXZlbnRzID0gZ2V0Q2hhbmdlRXZlbnRzKGV2ZW50cyk7XHJcbiAgICBjb25zdCBjbGlja0V2ZW50cyA9IGdldENsaWNrRXZlbnRzKGV2ZW50cyk7XHJcbiAgICBjb25zdCBraW50b25lRXZlbnRzID0gZ2V0S2ludG9uZUV2ZW50cyhldmVudHMpO1xyXG4gICAgaWYoa2ludG9uZUV2ZW50cy5sZW5ndGg+MCApe1xyXG4gICAgICAvL+mAmuW4uEtpbnRvbmXjgqTjg5njg7Pjg4jjgpLjg5Djg7Pjg4lcclxuICAgICAga2ludG9uZS5ldmVudHMub24oa2ludG9uZUV2ZW50cyxhc3luYyAoZXZlbnQ6YW55KT0+e1xyXG4gICAgICAgIGNvbnN0IGZsb3dpbmZvID0gYWxjZmxvd1tldmVudC50eXBlXTtcclxuICAgICAgICBjb25zdCBmbG93PUFjdGlvbkZsb3cuZnJvbUpTT04oZmxvd2luZm8uY29udGVudCk7XHJcbiAgICAgICAgaWYoZmxvdyE9PXVuZGVmaW5lZCl7XHJcbiAgICAgICAgICBjb25zdCBwcm9jZXNzID0gbmV3IEFjdGlvblByb2Nlc3MoZXZlbnQudHlwZSxmbG93LGV2ZW50KTtcclxuICAgICAgICAgIGF3YWl0IHByb2Nlc3MuZXhlYygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXZlbnQ7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYoY2hhbmdlRXZlbnRzLmxlbmd0aD4wKXtcclxuICAgICAgLy/lgKTlpInmm7TjgqTjg5njg7Pjg4jjgpLjg5Djg7Pjg4njgZnjgotcclxuICAgICAga2ludG9uZS5ldmVudHMub24oY2hhbmdlRXZlbnRzLChldmVudDphbnkpPT57XHJcbiAgICAgICAgY29uc3QgZmxvd2luZm8gPSBhbGNmbG93W2V2ZW50LnR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGZsb3c9QWN0aW9uRmxvdy5mcm9tSlNPTihmbG93aW5mby5jb250ZW50KTtcclxuICAgICAgICBpZihmbG93IT09dW5kZWZpbmVkKXtcclxuICAgICAgICAgIGNvbnN0IHByb2Nlc3MgPSBuZXcgQWN0aW9uUHJvY2VzcyhldmVudC50eXBlLGZsb3csZXZlbnQpO1xyXG4gICAgICAgICAgcHJvY2Vzcy5leGVjKCkudGhlbigocmVzKT0+e1xyXG4gICAgICAgICAgICBjb25zdCByZWNvcmQgPSBldmVudC5yZWNvcmQ7ICBcclxuICAgICAgICAgICAga2ludG9uZS5hcHAucmVjb3JkLnNldCh7cmVjb3JkfSk7XHJcbiAgICAgICAgICB9KS5jYXRjaCgoZXJyKT0+e1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmKGNsaWNrRXZlbnRzLmxlbmd0aD4wKXtcclxuICAgICAgY2xpY2tFdmVudHMuZm9yRWFjaCgoZXZlbnROYW1lOnN0cmluZyk9PntcclxuICAgICAgICAkKGRvY3VtZW50KS5vbihldmVudE5hbWUsYXN5bmMgKCk9PntcclxuICAgICAgICAgIGNvbnN0IGV2ZW50PWtpbnRvbmUuYXBwLnJlY29yZC5nZXQoKTtcclxuICAgICAgICAgIGNvbnN0IGZsb3dpbmZvID0gYWxjZmxvd1tldmVudE5hbWVdO1xyXG4gICAgICAgICAgY29uc3QgZmxvdz1BY3Rpb25GbG93LmZyb21KU09OKGZsb3dpbmZvLmNvbnRlbnQpO1xyXG4gICAgICAgICAgaWYoZmxvdyE9PXVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3MgPSBuZXcgQWN0aW9uUHJvY2VzcyhldmVudE5hbWUsZmxvdyxldmVudCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHByb2Nlc3MuZXhlYygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgcmVjb3JkID0gZXZlbnQucmVjb3JkO1xyXG4gICAgICAgICAga2ludG9uZS5hcHAucmVjb3JkLnNldCh7cmVjb3JkfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG59KTsiXSwibmFtZXMiOlsiZ2xvYmFsIiwiZmFjdG9yeSIsIm1vZHVsZSIsInciLCJ0aGlzIiwid2luZG93Iiwibm9HbG9iYWwiLCJhcnIiLCJnZXRQcm90byIsInNsaWNlIiwiZmxhdCIsImFycmF5IiwicHVzaCIsImluZGV4T2YiLCJjbGFzczJ0eXBlIiwidG9TdHJpbmciLCJoYXNPd24iLCJmblRvU3RyaW5nIiwiT2JqZWN0RnVuY3Rpb25TdHJpbmciLCJzdXBwb3J0IiwiaXNGdW5jdGlvbiIsIm9iaiIsImlzV2luZG93IiwiZG9jdW1lbnQiLCJwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzIiwiRE9NRXZhbCIsImNvZGUiLCJub2RlIiwiZG9jIiwiaSIsInZhbCIsInNjcmlwdCIsInRvVHlwZSIsInZlcnNpb24iLCJyaHRtbFN1ZmZpeCIsImpRdWVyeSIsInNlbGVjdG9yIiwiY29udGV4dCIsIm51bSIsImVsZW1zIiwicmV0IiwiY2FsbGJhY2siLCJlbGVtIiwiX2VsZW0iLCJsZW4iLCJqIiwib3B0aW9ucyIsIm5hbWUiLCJzcmMiLCJjb3B5IiwiY29weUlzQXJyYXkiLCJjbG9uZSIsInRhcmdldCIsImxlbmd0aCIsImRlZXAiLCJtc2ciLCJwcm90byIsIkN0b3IiLCJpc0FycmF5TGlrZSIsIm5vZGVUeXBlIiwicmVzdWx0cyIsIm5hbWVzcGFjZSIsImRvY0VsZW0iLCJmaXJzdCIsInNlY29uZCIsImludmVydCIsImNhbGxiYWNrSW52ZXJzZSIsIm1hdGNoZXMiLCJjYWxsYmFja0V4cGVjdCIsImFyZyIsInZhbHVlIiwiX2kiLCJ0eXBlIiwibm9kZU5hbWUiLCJwb3AiLCJzb3J0Iiwic3BsaWNlIiwid2hpdGVzcGFjZSIsInJ0cmltQ1NTIiwiYSIsImIiLCJidXAiLCJyY3NzZXNjYXBlIiwiZmNzc2VzY2FwZSIsImNoIiwiYXNDb2RlUG9pbnQiLCJzZWwiLCJwcmVmZXJyZWREb2MiLCJwdXNoTmF0aXZlIiwiRXhwciIsIm91dGVybW9zdENvbnRleHQiLCJzb3J0SW5wdXQiLCJoYXNEdXBsaWNhdGUiLCJkb2N1bWVudEVsZW1lbnQiLCJkb2N1bWVudElzSFRNTCIsInJidWdneVFTQSIsImV4cGFuZG8iLCJkaXJydW5zIiwiZG9uZSIsImNsYXNzQ2FjaGUiLCJjcmVhdGVDYWNoZSIsInRva2VuQ2FjaGUiLCJjb21waWxlckNhY2hlIiwibm9ubmF0aXZlU2VsZWN0b3JDYWNoZSIsInNvcnRPcmRlciIsImJvb2xlYW5zIiwiaWRlbnRpZmllciIsImF0dHJpYnV0ZXMiLCJwc2V1ZG9zIiwicndoaXRlc3BhY2UiLCJyY29tbWEiLCJybGVhZGluZ0NvbWJpbmF0b3IiLCJyZGVzY2VuZCIsInJwc2V1ZG8iLCJyaWRlbnRpZmllciIsIm1hdGNoRXhwciIsInJpbnB1dHMiLCJyaGVhZGVyIiwicnF1aWNrRXhwciIsInJzaWJsaW5nIiwicnVuZXNjYXBlIiwiZnVuZXNjYXBlIiwiZXNjYXBlIiwibm9uSGV4IiwiaGlnaCIsInVubG9hZEhhbmRsZXIiLCJzZXREb2N1bWVudCIsImluRGlzYWJsZWRGaWVsZHNldCIsImFkZENvbWJpbmF0b3IiLCJzYWZlQWN0aXZlRWxlbWVudCIsImVscyIsImZpbmQiLCJzZWVkIiwibSIsIm5pZCIsIm1hdGNoIiwiZ3JvdXBzIiwibmV3U2VsZWN0b3IiLCJuZXdDb250ZXh0IiwidGVzdENvbnRleHQiLCJ0b2tlbml6ZSIsInRvU2VsZWN0b3IiLCJzZWxlY3QiLCJrZXlzIiwiY2FjaGUiLCJrZXkiLCJtYXJrRnVuY3Rpb24iLCJmbiIsImFzc2VydCIsImVsIiwiY3JlYXRlSW5wdXRQc2V1ZG8iLCJjcmVhdGVCdXR0b25Qc2V1ZG8iLCJjcmVhdGVEaXNhYmxlZFBzZXVkbyIsImRpc2FibGVkIiwiY3JlYXRlUG9zaXRpb25hbFBzZXVkbyIsImFyZ3VtZW50IiwibWF0Y2hJbmRleGVzIiwic3ViV2luZG93IiwiaWQiLCJhdHRySWQiLCJ0YWciLCJjbGFzc05hbWUiLCJpbnB1dCIsImNvbXBhcmUiLCJleHByIiwiZWxlbWVudHMiLCJkdXBsaWNhdGVzIiwiZXhjZXNzIiwidW5xdW90ZWQiLCJub2RlTmFtZVNlbGVjdG9yIiwiZXhwZWN0ZWROb2RlTmFtZSIsInBhdHRlcm4iLCJvcGVyYXRvciIsImNoZWNrIiwicmVzdWx0Iiwid2hhdCIsIl9hcmd1bWVudCIsImxhc3QiLCJzaW1wbGUiLCJmb3J3YXJkIiwib2ZUeXBlIiwiX2NvbnRleHQiLCJ4bWwiLCJvdXRlckNhY2hlIiwibm9kZUluZGV4Iiwic3RhcnQiLCJkaXIiLCJwYXJlbnQiLCJ1c2VDYWNoZSIsImRpZmYiLCJwc2V1ZG8iLCJhcmdzIiwiaWR4IiwibWF0Y2hlZCIsIm1hdGNoZXIiLCJjb21waWxlIiwidW5tYXRjaGVkIiwidGV4dCIsImxhbmciLCJlbGVtTGFuZyIsImhhc2giLCJhdHRyIiwiX21hdGNoSW5kZXhlcyIsInNldEZpbHRlcnMiLCJwYXJzZU9ubHkiLCJ0b2tlbnMiLCJzb0ZhciIsInByZUZpbHRlcnMiLCJjYWNoZWQiLCJjb21iaW5hdG9yIiwiYmFzZSIsInNraXAiLCJjaGVja05vbkVsZW1lbnRzIiwiZG9uZU5hbWUiLCJvbGRDYWNoZSIsIm5ld0NhY2hlIiwiZWxlbWVudE1hdGNoZXIiLCJtYXRjaGVycyIsIm11bHRpcGxlQ29udGV4dHMiLCJjb250ZXh0cyIsImNvbmRlbnNlIiwibWFwIiwiZmlsdGVyIiwibmV3VW5tYXRjaGVkIiwibWFwcGVkIiwic2V0TWF0Y2hlciIsInByZUZpbHRlciIsInBvc3RGaWx0ZXIiLCJwb3N0RmluZGVyIiwicG9zdFNlbGVjdG9yIiwidGVtcCIsIm1hdGNoZXJPdXQiLCJwcmVNYXAiLCJwb3N0TWFwIiwicHJlZXhpc3RpbmciLCJtYXRjaGVySW4iLCJtYXRjaGVyRnJvbVRva2VucyIsImNoZWNrQ29udGV4dCIsImxlYWRpbmdSZWxhdGl2ZSIsImltcGxpY2l0UmVsYXRpdmUiLCJtYXRjaENvbnRleHQiLCJtYXRjaEFueUNvbnRleHQiLCJtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMiLCJlbGVtZW50TWF0Y2hlcnMiLCJzZXRNYXRjaGVycyIsImJ5U2V0IiwiYnlFbGVtZW50Iiwic3VwZXJNYXRjaGVyIiwib3V0ZXJtb3N0IiwibWF0Y2hlZENvdW50Iiwic2V0TWF0Y2hlZCIsImNvbnRleHRCYWNrdXAiLCJkaXJydW5zVW5pcXVlIiwidG9rZW4iLCJjb21waWxlZCIsInVudGlsIiwidHJ1bmNhdGUiLCJzaWJsaW5ncyIsIm4iLCJybmVlZHNDb250ZXh0IiwicnNpbmdsZVRhZyIsIndpbm5vdyIsInF1YWxpZmllciIsIm5vdCIsInNlbGYiLCJyb290alF1ZXJ5IiwiaW5pdCIsInJvb3QiLCJycGFyZW50c3ByZXYiLCJndWFyYW50ZWVkVW5pcXVlIiwidGFyZ2V0cyIsImwiLCJzZWxlY3RvcnMiLCJjdXIiLCJzaWJsaW5nIiwicm5vdGh0bWx3aGl0ZSIsImNyZWF0ZU9wdGlvbnMiLCJvYmplY3QiLCJfIiwiZmxhZyIsImZpcmluZyIsIm1lbW9yeSIsImZpcmVkIiwibG9ja2VkIiwibGlzdCIsInF1ZXVlIiwiZmlyaW5nSW5kZXgiLCJmaXJlIiwiYWRkIiwiaW5kZXgiLCJJZGVudGl0eSIsInYiLCJUaHJvd2VyIiwiZXgiLCJhZG9wdFZhbHVlIiwicmVzb2x2ZSIsInJlamVjdCIsIm5vVmFsdWUiLCJtZXRob2QiLCJmdW5jIiwidHVwbGVzIiwic3RhdGUiLCJwcm9taXNlIiwiZGVmZXJyZWQiLCJmbnMiLCJuZXdEZWZlciIsInR1cGxlIiwicmV0dXJuZWQiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJvblByb2dyZXNzIiwibWF4RGVwdGgiLCJkZXB0aCIsImhhbmRsZXIiLCJzcGVjaWFsIiwidGhhdCIsIm1pZ2h0VGhyb3ciLCJ0aGVuIiwicHJvY2VzcyIsImUiLCJzdGF0ZVN0cmluZyIsInNpbmdsZVZhbHVlIiwicmVtYWluaW5nIiwicmVzb2x2ZUNvbnRleHRzIiwicmVzb2x2ZVZhbHVlcyIsInByaW1hcnkiLCJ1cGRhdGVGdW5jIiwicmVycm9yTmFtZXMiLCJlcnJvciIsImFzeW5jRXJyb3IiLCJyZWFkeUxpc3QiLCJ3YWl0IiwiY29tcGxldGVkIiwiYWNjZXNzIiwiY2hhaW5hYmxlIiwiZW1wdHlHZXQiLCJyYXciLCJidWxrIiwiX2tleSIsInJtc1ByZWZpeCIsInJkYXNoQWxwaGEiLCJmY2FtZWxDYXNlIiwiX2FsbCIsImxldHRlciIsImNhbWVsQ2FzZSIsInN0cmluZyIsImFjY2VwdERhdGEiLCJvd25lciIsIkRhdGEiLCJkYXRhIiwicHJvcCIsImRhdGFQcml2IiwiZGF0YVVzZXIiLCJyYnJhY2UiLCJybXVsdGlEYXNoIiwiZ2V0RGF0YSIsImRhdGFBdHRyIiwiYXR0cnMiLCJzdGFydExlbmd0aCIsImhvb2tzIiwibmV4dCIsInNldHRlciIsInRtcCIsImNvdW50IiwiZGVmZXIiLCJwbnVtIiwicmNzc051bSIsImNzc0V4cGFuZCIsImlzQXR0YWNoZWQiLCJjb21wb3NlZCIsImlzSGlkZGVuV2l0aGluVHJlZSIsImFkanVzdENTUyIsInZhbHVlUGFydHMiLCJ0d2VlbiIsImFkanVzdGVkIiwic2NhbGUiLCJtYXhJdGVyYXRpb25zIiwiY3VycmVudFZhbHVlIiwiaW5pdGlhbCIsInVuaXQiLCJpbml0aWFsSW5Vbml0IiwiZGVmYXVsdERpc3BsYXlNYXAiLCJnZXREZWZhdWx0RGlzcGxheSIsImRpc3BsYXkiLCJzaG93SGlkZSIsInNob3ciLCJ2YWx1ZXMiLCJyY2hlY2thYmxlVHlwZSIsInJ0YWdOYW1lIiwicnNjcmlwdFR5cGUiLCJmcmFnbWVudCIsImRpdiIsIndyYXBNYXAiLCJnZXRBbGwiLCJzZXRHbG9iYWxFdmFsIiwicmVmRWxlbWVudHMiLCJyaHRtbCIsImJ1aWxkRnJhZ21lbnQiLCJzY3JpcHRzIiwic2VsZWN0aW9uIiwiaWdub3JlZCIsIndyYXAiLCJhdHRhY2hlZCIsIm5vZGVzIiwicnR5cGVuYW1lc3BhY2UiLCJyZXR1cm5UcnVlIiwicmV0dXJuRmFsc2UiLCJvbiIsInR5cGVzIiwib25lIiwib3JpZ0ZuIiwiZXZlbnQiLCJoYW5kbGVPYmpJbiIsImV2ZW50SGFuZGxlIiwiZXZlbnRzIiwidCIsImhhbmRsZU9iaiIsImhhbmRsZXJzIiwibmFtZXNwYWNlcyIsIm9yaWdUeXBlIiwiZWxlbURhdGEiLCJtYXBwZWRUeXBlcyIsIm9yaWdDb3VudCIsIm5hdGl2ZUV2ZW50IiwiaGFuZGxlclF1ZXVlIiwibWF0Y2hlZEhhbmRsZXJzIiwibWF0Y2hlZFNlbGVjdG9ycyIsImRlbGVnYXRlQ291bnQiLCJob29rIiwib3JpZ2luYWxFdmVudCIsImxldmVyYWdlTmF0aXZlIiwiaXNTZXR1cCIsInNhdmVkIiwiaGFuZGxlIiwicHJvcHMiLCJkZWxlZ2F0ZVR5cGUiLCJmb2N1c01hcHBlZEhhbmRsZXIiLCJhdHRhY2hlcyIsImRhdGFIb2xkZXIiLCJvcmlnIiwiZml4IiwicmVsYXRlZCIsInJub0lubmVyaHRtbCIsInJjaGVja2VkIiwicmNsZWFuU2NyaXB0IiwibWFuaXB1bGF0aW9uVGFyZ2V0IiwiY29udGVudCIsImRpc2FibGVTY3JpcHQiLCJyZXN0b3JlU2NyaXB0IiwiY2xvbmVDb3B5RXZlbnQiLCJkZXN0IiwicGRhdGFPbGQiLCJ1ZGF0YU9sZCIsInVkYXRhQ3VyIiwiZml4SW5wdXQiLCJkb21NYW5pcCIsImNvbGxlY3Rpb24iLCJoYXNTY3JpcHRzIiwiaU5vQ2xvbmUiLCJ2YWx1ZUlzRnVuY3Rpb24iLCJyZW1vdmUiLCJrZWVwRGF0YSIsImh0bWwiLCJkYXRhQW5kRXZlbnRzIiwiZGVlcERhdGFBbmRFdmVudHMiLCJzcmNFbGVtZW50cyIsImRlc3RFbGVtZW50cyIsImluUGFnZSIsIm9yaWdpbmFsIiwiaW5zZXJ0Iiwicm51bW5vbnB4IiwicmN1c3RvbVByb3AiLCJnZXRTdHlsZXMiLCJ2aWV3Iiwic3dhcCIsIm9sZCIsInJib3hTdHlsZSIsImNvbXB1dGVTdHlsZVRlc3RzIiwiY29udGFpbmVyIiwiZGl2U3R5bGUiLCJwaXhlbFBvc2l0aW9uVmFsIiwicmVsaWFibGVNYXJnaW5MZWZ0VmFsIiwicm91bmRQaXhlbE1lYXN1cmVzIiwicGl4ZWxCb3hTdHlsZXNWYWwiLCJib3hTaXppbmdSZWxpYWJsZVZhbCIsInNjcm9sbGJveFNpemVWYWwiLCJtZWFzdXJlIiwicmVsaWFibGVUckRpbWVuc2lvbnNWYWwiLCJ0YWJsZSIsInRyIiwidHJDaGlsZCIsInRyU3R5bGUiLCJjdXJDU1MiLCJjb21wdXRlZCIsIndpZHRoIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsImlzQ3VzdG9tUHJvcCIsInN0eWxlIiwiYWRkR2V0SG9va0lmIiwiY29uZGl0aW9uRm4iLCJob29rRm4iLCJjc3NQcmVmaXhlcyIsImVtcHR5U3R5bGUiLCJ2ZW5kb3JQcm9wcyIsInZlbmRvclByb3BOYW1lIiwiY2FwTmFtZSIsImZpbmFsUHJvcE5hbWUiLCJmaW5hbCIsInJkaXNwbGF5c3dhcCIsImNzc1Nob3ciLCJjc3NOb3JtYWxUcmFuc2Zvcm0iLCJzZXRQb3NpdGl2ZU51bWJlciIsInN1YnRyYWN0IiwiYm94TW9kZWxBZGp1c3RtZW50IiwiZGltZW5zaW9uIiwiYm94IiwiaXNCb3JkZXJCb3giLCJzdHlsZXMiLCJjb21wdXRlZFZhbCIsImV4dHJhIiwiZGVsdGEiLCJtYXJnaW5EZWx0YSIsImdldFdpZHRoT3JIZWlnaHQiLCJib3hTaXppbmdOZWVkZWQiLCJ2YWx1ZUlzQm9yZGVyQm94Iiwib2Zmc2V0UHJvcCIsIm9yaWdOYW1lIiwic2Nyb2xsYm94U2l6ZUJ1Z2d5IiwicHJlZml4Iiwic3VmZml4IiwiZXhwYW5kZWQiLCJwYXJ0cyIsIlR3ZWVuIiwiZW5kIiwiZWFzaW5nIiwicGVyY2VudCIsImVhc2VkIiwicCIsImZ4Tm93IiwiaW5Qcm9ncmVzcyIsInJmeHR5cGVzIiwicnJ1biIsInNjaGVkdWxlIiwiY3JlYXRlRnhOb3ciLCJnZW5GeCIsImluY2x1ZGVXaWR0aCIsIndoaWNoIiwiY3JlYXRlVHdlZW4iLCJhbmltYXRpb24iLCJBbmltYXRpb24iLCJkZWZhdWx0UHJlZmlsdGVyIiwib3B0cyIsInRvZ2dsZSIsIm9sZGZpcmUiLCJwcm9wVHdlZW4iLCJyZXN0b3JlRGlzcGxheSIsImlzQm94IiwiYW5pbSIsImhpZGRlbiIsImRhdGFTaG93IiwicHJvcEZpbHRlciIsInNwZWNpYWxFYXNpbmciLCJwcm9wZXJ0aWVzIiwic3RvcHBlZCIsInRpY2siLCJjdXJyZW50VGltZSIsImdvdG9FbmQiLCJwcmVwZW5kIiwic3BlZWQiLCJvcHQiLCJ0byIsImVtcHR5Iiwib3B0YWxsIiwiZG9BbmltYXRpb24iLCJjbGVhclF1ZXVlIiwic3RvcFF1ZXVlIiwic3RvcCIsImRlcXVldWUiLCJ0aW1lcnMiLCJjc3NGbiIsInRpbWVyIiwidGltZSIsInRpbWVvdXQiLCJib29sSG9vayIsImF0dHJIYW5kbGUiLCJuVHlwZSIsImF0dHJOYW1lcyIsImdldHRlciIsImlzWE1MIiwibG93ZXJjYXNlTmFtZSIsInJmb2N1c2FibGUiLCJyY2xpY2thYmxlIiwidGFiaW5kZXgiLCJzdHJpcEFuZENvbGxhcHNlIiwiZ2V0Q2xhc3MiLCJjbGFzc2VzVG9BcnJheSIsImNsYXNzTmFtZXMiLCJjdXJWYWx1ZSIsImZpbmFsVmFsdWUiLCJzdGF0ZVZhbCIsImlzVmFsaWRWYWx1ZSIsInJyZXR1cm4iLCJvcHRpb24iLCJtYXgiLCJvcHRpb25TZXQiLCJsb2NhdGlvbiIsIm5vbmNlIiwicnF1ZXJ5IiwicGFyc2VyRXJyb3JFbGVtIiwicmZvY3VzTW9ycGgiLCJzdG9wUHJvcGFnYXRpb25DYWxsYmFjayIsIm9ubHlIYW5kbGVycyIsImJ1YmJsZVR5cGUiLCJvbnR5cGUiLCJsYXN0RWxlbWVudCIsImV2ZW50UGF0aCIsInJicmFja2V0IiwickNSTEYiLCJyc3VibWl0dGVyVHlwZXMiLCJyc3VibWl0dGFibGUiLCJidWlsZFBhcmFtcyIsInRyYWRpdGlvbmFsIiwicyIsInZhbHVlT3JGdW5jdGlvbiIsInIyMCIsInJoYXNoIiwicmFudGlDYWNoZSIsInJoZWFkZXJzIiwicmxvY2FsUHJvdG9jb2wiLCJybm9Db250ZW50IiwicnByb3RvY29sIiwicHJlZmlsdGVycyIsInRyYW5zcG9ydHMiLCJhbGxUeXBlcyIsIm9yaWdpbkFuY2hvciIsImFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyIsInN0cnVjdHVyZSIsImRhdGFUeXBlRXhwcmVzc2lvbiIsImRhdGFUeXBlIiwiZGF0YVR5cGVzIiwiaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMiLCJvcmlnaW5hbE9wdGlvbnMiLCJqcVhIUiIsImluc3BlY3RlZCIsInNlZWtpbmdUcmFuc3BvcnQiLCJpbnNwZWN0Iiwic2VsZWN0ZWQiLCJwcmVmaWx0ZXJPckZhY3RvcnkiLCJkYXRhVHlwZU9yVHJhbnNwb3J0IiwiYWpheEV4dGVuZCIsImZsYXRPcHRpb25zIiwiYWpheEhhbmRsZVJlc3BvbnNlcyIsInJlc3BvbnNlcyIsImN0IiwiZmluYWxEYXRhVHlwZSIsImZpcnN0RGF0YVR5cGUiLCJjb250ZW50cyIsImFqYXhDb252ZXJ0IiwicmVzcG9uc2UiLCJpc1N1Y2Nlc3MiLCJjb252MiIsImN1cnJlbnQiLCJjb252IiwicHJldiIsImNvbnZlcnRlcnMiLCJzZXR0aW5ncyIsInVybCIsInRyYW5zcG9ydCIsImNhY2hlVVJMIiwicmVzcG9uc2VIZWFkZXJzU3RyaW5nIiwicmVzcG9uc2VIZWFkZXJzIiwidGltZW91dFRpbWVyIiwidXJsQW5jaG9yIiwiZmlyZUdsb2JhbHMiLCJ1bmNhY2hlZCIsImNhbGxiYWNrQ29udGV4dCIsImdsb2JhbEV2ZW50Q29udGV4dCIsImNvbXBsZXRlRGVmZXJyZWQiLCJzdGF0dXNDb2RlIiwicmVxdWVzdEhlYWRlcnMiLCJyZXF1ZXN0SGVhZGVyc05hbWVzIiwic3RyQWJvcnQiLCJzdGF0dXNUZXh0IiwiZmluYWxUZXh0Iiwic3RhdHVzIiwibmF0aXZlU3RhdHVzVGV4dCIsImhlYWRlcnMiLCJzdWNjZXNzIiwibW9kaWZpZWQiLCJodG1sSXNGdW5jdGlvbiIsInhoclN1Y2Nlc3NTdGF0dXMiLCJ4aHJTdXBwb3J0ZWQiLCJlcnJvckNhbGxiYWNrIiwiY29tcGxldGUiLCJ4aHIiLCJldnQiLCJvbGRDYWxsYmFja3MiLCJyanNvbnAiLCJvcmlnaW5hbFNldHRpbmdzIiwiY2FsbGJhY2tOYW1lIiwib3ZlcndyaXR0ZW4iLCJyZXNwb25zZUNvbnRhaW5lciIsImpzb25Qcm9wIiwiYm9keSIsImtlZXBTY3JpcHRzIiwicGFyc2VkIiwicGFyYW1zIiwib2ZmIiwicmVzcG9uc2VUZXh0IiwiY3VyUG9zaXRpb24iLCJjdXJMZWZ0IiwiY3VyQ1NTVG9wIiwiY3VyVG9wIiwiY3VyT2Zmc2V0IiwiY3VyQ1NTTGVmdCIsImNhbGN1bGF0ZVBvc2l0aW9uIiwicG9zaXRpb24iLCJjdXJFbGVtIiwicmVjdCIsIndpbiIsIm9mZnNldFBhcmVudCIsIm9mZnNldCIsInBhcmVudE9mZnNldCIsInRvcCIsImRlZmF1bHRFeHRyYSIsImZ1bmNOYW1lIiwibWFyZ2luIiwiZm5PdmVyIiwiZm5PdXQiLCJydHJpbSIsInByb3h5IiwiaG9sZCIsIl9qUXVlcnkiLCJfJCIsIl9fcHVibGljRmllbGQiLCJhY3Rpb25Ob2RlIiwicmVjb3JkIiwiZm9ybWF0IiwiaW50ZWdlclBhcnQiLCJmcmFjdGlvblBhcnQiLCJpc05lZ2F0aXZlIiwiaXNQZXJjZW50IiwiaW50ZWdlckZvcm1hdCIsImZyYWN0aW9uRm9ybWF0IiwiZGF0ZSIsInllYXIiLCJtb250aCIsImRheSIsImhvdXIiLCJtaW51dGUiLCJtaWxsaXNlY29uZCIsInRpbWVab25lT2Zmc2V0IiwicmVwbGFjZW1lbnRzIiwiZG9jTnVtIiwidGVtcGxhdGUiLCJyZWdleCIsIm5vdyIsIm51bWJlciIsIm5vIiwicmVjTm8iLCJhcHB1cmwiLCJyZXNwIiwibG9naWNPcCIsImpzb24iLCJjaGlsZEpzb24iLCJmb3VuZE5vZGUiLCJtYXhJbmRleCIsImNoaWxkIiwiY2hpbGRNYXgiLCJjb25kaXRpb25TdHJpbmciLCJncm91cE5vZGUiLCJjaGlsZENvbmRpdGlvblN0cmluZyIsImNvbmROb2RlIiwiY29uZGlOb2RlcyIsImpzb25TdHJpbmciLCJ2YXJzIiwicGF0aCIsIm8iLCJrIiwiZmllbGRWYWx1ZSIsInZhclZhbHVlIiwiY29uZGl0aW9uIiwidGFyZ2V0T2JqZWN0IiwiY29uZGl0aW9uT2JqZWN0IiwiaXNBcnJheVRhcmdldCIsImlzQXJyYXlWYWx1ZSIsInRhcmdldFZhbHVlIiwiY29uZGl0aW9uVmFsdWUiLCJkYXRlVmFsdWUiLCJudW1iZXJWYWx1ZSIsInNvcnRBcnJheSIsInRhcmdldEFycmF5IiwidmFsdWVBcnJheSIsInRyZWUiLCJjb25kaXRpb25SZXN1bHQiLCJidXR0b25TcGFjZSIsImJ1dHRvbiIsImNsaWNrRXZlbnROYW1lIiwiZXhwb3J0cyIsImluamVjdFBsYXRmb3JtRGVwcyIsImRlcHMiLCJfX2V4dGVuZHMiLCJleHRlbmRTdGF0aWNzIiwiZCIsIl9fIiwiVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yXzEiLCJfc3VwZXIiLCJVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3IiLCJwbGF0Zm9ybSIsIl90aGlzIiwibWVzc2FnZSIsIk1pbWUiLCJ0eXBlTWFwIiwiZm9yY2UiLCJleHRlbnNpb25zIiwiZXh0IiwiaGFzUGF0aCIsInJlcXVpcmUkJDAiLCJyZXF1aXJlJCQxIiwiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiYWRvcHQiLCJmdWxmaWxsZWQiLCJzdGVwIiwicmVqZWN0ZWQiLCJfX2dlbmVyYXRvciIsImYiLCJ5IiwiZyIsInZlcmIiLCJvcCIsIl9faW1wb3J0RGVmYXVsdCIsIm1vZCIsImJyb3dzZXIiLCJmaWxlUGF0aCIsIl9hIiwiX2IiLCJfYyIsImZpbGVOYW1lIiwiYmFzZVVybCIsImhvc3QiLCJwcm90b2NvbCIsImVuZHBvaW50TmFtZSIsImd1ZXN0U3BhY2VJZCIsInByZXZpZXciLCJndWVzdFBhdGgiLCJwcmV2aWV3UGF0aCIsIl9fYXNzaWduIiwiQmFzZUNsaWVudF8xIiwiQmFzZUNsaWVudCIsImNsaWVudCIsIl9fcmVzdCIsIkJ1bGtSZXF1ZXN0Q2xpZW50XzEiLCJCdWxrUmVxdWVzdENsaWVudCIsInJlcXVlc3RzUGFyYW0iLCJyZXF1ZXN0cyIsInJlcXVlc3QiLCJyZXN0IiwiQXBwQ2xpZW50XzEiLCJBcHBDbGllbnQiLCJzcGFjZSIsInNwYWNlUGF0aCIsImRlZmF1bHRUaHJlYWQiLCJLaW50b25lQWJvcnRTZWFyY2hFcnJvcl8xIiwiS2ludG9uZUFib3J0U2VhcmNoRXJyb3IiLCJLaW50b25lQWxsUmVjb3Jkc0Vycm9yXzEiLCJLaW50b25lQWxsUmVjb3Jkc0Vycm9yIiwicHJvY2Vzc2VkUmVjb3Jkc1Jlc3VsdCIsInVucHJvY2Vzc2VkUmVjb3JkcyIsIm51bU9mQWxsUmVjb3JkcyIsImNodW5rTGVuZ3RoIiwibnVtT2ZQcm9jZXNzZWRSZWNvcmRzIiwiZXJyb3JJbmRleCIsImVycm9ycyIsImVycm9ySW5kZXhlcyIsImVycm9yS2V5IiwiZXJyb3JQYXJzZVJlc3VsdCIsIktpbnRvbmVSZXN0QVBJRXJyb3JfMSIsIktpbnRvbmVSZXN0QVBJRXJyb3IiLCJidWxrUmVxdWVzdEluZGV4IiwiX19jcmVhdGVCaW5kaW5nIiwiazIiLCJkZXNjIiwiX19leHBvcnRTdGFyIiwicmVxdWlyZSQkMiIsImZyb20iLCJwYWNrIiwiYXIiLCJSZWNvcmRDbGllbnRfMSIsImVycm9yXzEiLCJSZWNvcmRDbGllbnQiLCJidWxrUmVxdWVzdENsaWVudCIsImFwcCIsInVwZGF0ZUtleSIsInJlY29yZHMiLCJyZXZpc2lvbiIsInF1ZXJ5IiwicmVnZXhwIiwiaWRzIiwicmV2aXNpb25zIiwib3JkZXJCeSIsIndpdGhDdXJzb3IiLCJjb25kaXRpb25RdWVyeSIsIm9yaWdpbmFsRmllbGRzIiwiZmllbGRzIiwiYWxsUmVjb3JkcyIsImxhc3RJZCIsImxhc3RSZWNvcmQiLCJlcnJvcl8yIiwiQ0hVTktfTEVOR1RIIiwicmVjb3Jkc0NodW5rIiwibmV3UmVzdWx0cyIsImVfMSIsInNlcGFyYXRlZFJlY29yZHMiLCJhY2MiLCJlXzIiLCJlXzMiLCJzaXplIiwic2VwYXJhdGVkIiwiY2h1bmsiLCJTcGFjZUNsaWVudF8xIiwiU3BhY2VDbGllbnQiLCJGaWxlQ2xpZW50XzEiLCJmb3JtX2RhdGFfMSIsInBsYXRmb3JtXzEiLCJyZXF1aXJlJCQzIiwiRmlsZUNsaWVudCIsImZvcm1EYXRhIiwibmFtZV8xIiwibmFtZV8yIiwiZmlsZURhdGEiLCJiaW5kIiwidGhpbmciLCJzdHIiLCJpc0FycmF5IiwiaXNCdWZmZXIiLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNCb29sZWFuIiwicHJvdG90eXBlIiwiaXNEYXRlIiwia2luZCIsImFsbE93bktleXMiLCJtZXJnZSIsImNhc2VsZXNzIiwiYXNzaWduVmFsdWUiLCJ0YXJnZXRLZXkiLCJjb25zdHJ1Y3RvciIsInN1cGVyQ29uc3RydWN0b3IiLCJkZXNjcmlwdG9ycyIsInNvdXJjZU9iaiIsImRlc3RPYmoiLCJtZXJnZWQiLCJzZWFyY2hTdHJpbmciLCJsYXN0SW5kZXgiLCJUeXBlZEFycmF5IiwiaXRlcmF0b3IiLCJwYWlyIiwicmVnRXhwIiwicDEiLCJwMiIsImhhc093blByb3BlcnR5IiwiaXNSZWdFeHAiLCJyZWR1Y2VyIiwicmVkdWNlZERlc2NyaXB0b3JzIiwiZGVzY3JpcHRvciIsImFycmF5T3JTdHJpbmciLCJkZWxpbWl0ZXIiLCJkZWZpbmUiLCJub29wIiwiZGVmYXVsdFZhbHVlIiwiYWxwaGFiZXQiLCJzdGFjayIsInZpc2l0Iiwic291cmNlIiwicmVkdWNlZFZhbHVlIiwidXRpbHMkMSIsImNvbmZpZyIsInRvSlNPTiIsImN1c3RvbVByb3BzIiwiYXhpb3NFcnJvciIsImRvdHMiLCJtZXRhVG9rZW5zIiwidmlzaXRvciIsImRlZmF1bHRWaXNpdG9yIiwiaW5kZXhlcyIsInVzZUJsb2IiLCJjb252ZXJ0VmFsdWUiLCJleHBvc2VkSGVscGVycyIsImJ1aWxkIiwiY2hhck1hcCIsImFwcGVuZCIsImVuY29kZXIiLCJfZW5jb2RlIiwiZW5jb2RlIiwic2VyaWFsaXplRm4iLCJzZXJpYWxpemVkUGFyYW1zIiwiaGFzaG1hcmtJbmRleCIsImgiLCJwcm9kdWN0IiwidXRpbHMiLCJoZWxwZXJzIiwiYXJyYXlUb09iamVjdCIsImJ1aWxkUGF0aCIsImlzTnVtZXJpY0tleSIsImlzTGFzdCIsInJhd1ZhbHVlIiwicGFyc2VyIiwiZGVmYXVsdHMiLCJ0cmFuc2Zvcm1SZXF1ZXN0IiwiY29udGVudFR5cGUiLCJoYXNKU09OQ29udGVudFR5cGUiLCJpc09iamVjdFBheWxvYWQiLCJpc0ZpbGVMaXN0IiwiX0Zvcm1EYXRhIiwidHJhbnNmb3JtUmVzcG9uc2UiLCJ0cmFuc2l0aW9uYWwiLCJmb3JjZWRKU09OUGFyc2luZyIsIkpTT05SZXF1ZXN0ZWQiLCJzdHJpY3RKU09OUGFyc2luZyIsInZhbGlkYXRlU3RhdHVzIiwiZGVmYXVsdHMkMSIsInJhd0hlYWRlcnMiLCJsaW5lIiwiaGVhZGVyIiwidG9rZW5zUkUiLCJpc0hlYWRlck5hbWVGaWx0ZXIiLCJjaGFyIiwiYWNjZXNzb3JOYW1lIiwibWV0aG9kTmFtZSIsImFyZzEiLCJhcmcyIiwiYXJnMyIsInZhbHVlT3JSZXdyaXRlIiwicmV3cml0ZSIsInNldEhlYWRlciIsIl92YWx1ZSIsIl9oZWFkZXIiLCJfcmV3cml0ZSIsImxIZWFkZXIiLCJzZXRIZWFkZXJzIiwiZGVsZXRlZCIsImRlbGV0ZUhlYWRlciIsIm5vcm1hbGl6ZWQiLCJhc1N0cmluZ3MiLCJhY2Nlc3NvcnMiLCJkZWZpbmVBY2Nlc3NvciIsImhlYWRlclZhbHVlIiwic2FtcGxlc0NvdW50IiwibWluIiwiYnl0ZXMiLCJ0aW1lc3RhbXBzIiwiaGVhZCIsInRhaWwiLCJmaXJzdFNhbXBsZVRTIiwic3RhcnRlZEF0IiwiYnl0ZXNDb3VudCIsInBhc3NlZCIsImZyZXEiLCJ0aW1lc3RhbXAiLCJ0aHJlc2hvbGQiLCJsaXN0ZW5lciIsImlzRG93bmxvYWRTdHJlYW0iLCJieXRlc05vdGlmaWVkIiwiX3NwZWVkb21ldGVyIiwibG9hZGVkIiwidG90YWwiLCJwcm9ncmVzc0J5dGVzIiwicmF0ZSIsImluUmFuZ2UiLCJzdGFuZGFyZEJyb3dzZXJFbnYiLCJtc2llIiwidXJsUGFyc2luZ05vZGUiLCJvcmlnaW5VUkwiLCJyZXNvbHZlVVJMIiwiaHJlZiIsInJlcXVlc3RVUkwiLCJub25TdGFuZGFyZEJyb3dzZXJFbnYiLCJleHBpcmVzIiwiZG9tYWluIiwic2VjdXJlIiwiY29va2llIiwiYmFzZVVSTCIsInJlbGF0aXZlVVJMIiwicmVxdWVzdGVkVVJMIiwiY29uZmlnMSIsImNvbmZpZzIiLCJnZXRNZXJnZWRWYWx1ZSIsIm1lcmdlRGVlcFByb3BlcnRpZXMiLCJ2YWx1ZUZyb21Db25maWcyIiwiZGVmYXVsdFRvQ29uZmlnMiIsIm1lcmdlRGlyZWN0S2V5cyIsIm1lcmdlTWFwIiwiY29uZmlnVmFsdWUiLCJuZXdDb25maWciLCJ3aXRoWFNSRlRva2VuIiwieHNyZkhlYWRlck5hbWUiLCJ4c3JmQ29va2llTmFtZSIsImF1dGgiLCJ4c3JmVmFsdWUiLCJfY29uZmlnIiwicmVxdWVzdERhdGEiLCJyZXNwb25zZVR5cGUiLCJvbkNhbmNlbGVkIiwib25sb2FkZW5kIiwiZXJyIiwidGltZW91dEVycm9yTWVzc2FnZSIsImNhbmNlbCIsInNpZ25hbHMiLCJjb250cm9sbGVyIiwiYWJvcnRlZCIsIm9uYWJvcnQiLCJ1bnN1YnNjcmliZSIsInNpZ25hbCIsImNodW5rU2l6ZSIsInBvcyIsIml0ZXJhYmxlIiwic3RyZWFtIiwib25GaW5pc2giLCJyZWFzb24iLCJsZW5ndGhDb21wdXRhYmxlIiwiZHVwbGV4QWNjZXNzZWQiLCJoYXNDb250ZW50VHlwZSIsInJlcyIsImNhbmNlbFRva2VuIiwib25Eb3dubG9hZFByb2dyZXNzIiwib25VcGxvYWRQcm9ncmVzcyIsIndpdGhDcmVkZW50aWFscyIsImZldGNoT3B0aW9ucyIsImNvbXBvc2VkU2lnbmFsIiwic3RvcFRpbWVvdXQiLCJmaW5pc2hlZCIsInJlcXVlc3RDb250ZW50TGVuZ3RoIiwiX3JlcXVlc3QiLCJjb250ZW50VHlwZUhlYWRlciIsImlzU3RyZWFtUmVzcG9uc2UiLCJyZXNwb25zZUNvbnRlbnRMZW5ndGgiLCJyZXNwb25zZURhdGEiLCJhZGFwdGVyIiwiYWRhcHRlcnMiLCJuYW1lT3JBZGFwdGVyIiwicmVqZWN0ZWRSZWFzb25zIiwicmVhc29ucyIsIlZFUlNJT04iLCJ2YWxpZGF0b3IiLCJmb3JtYXRNZXNzYWdlIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiaW5zdGFuY2VDb25maWciLCJjb25maWdPclVybCIsImR1bW15IiwicGFyYW1zU2VyaWFsaXplciIsImNvbnRleHRIZWFkZXJzIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiIsImNoYWluIiwiZnVsbFBhdGgiLCJmb3JFYWNoTWV0aG9kTm9EYXRhIiwiZm9yRWFjaE1ldGhvZFdpdGhEYXRhIiwiZ2VuZXJhdGVIVFRQTWV0aG9kIiwiaXNGb3JtIiwiZXhlY3V0b3IiLCJyZXNvbHZlUHJvbWlzZSIsIm9uZnVsZmlsbGVkIiwiX3Jlc29sdmUiLCJjIiwicGF5bG9hZCIsImRlZmF1bHRDb25maWciLCJpbnN0YW5jZSIsImFsbCIsInByb21pc2VzIiwiYXhpb3NfMSIsIkF4aW9zQ2xpZW50XzEiLCJBeGlvc0NsaWVudCIsInJlc3BvbnNlSGFuZGxlciIsInJlcXVlc3RDb25maWdCdWlsZGVyIiwicmVxdWVzdENvbmZpZyIsImhhc1N5bWJvbHMiLCJzeW0iLCJzeW1PYmoiLCJzeW1WYWwiLCJzeW1zIiwiaGFzTmF0aXZlU3ltYm9scyIsImhhc1Byb3RvIiwidG9TdHIiLCJjb25jYXR0eSIsInNsaWN5IiwiYXJyTGlrZSIsImpvaW5lciIsImltcGxlbWVudGF0aW9uIiwiYm91bmQiLCJiaW5kZXIiLCJib3VuZExlbmd0aCIsImJvdW5kQXJncyIsIkVtcHR5IiwidW5kZWZpbmVkIiwiJFN5bnRheEVycm9yIiwicmVxdWlyZSQkNCIsIiRUeXBlRXJyb3IiLCJyZXF1aXJlJCQ1IiwicmVxdWlyZSQkNiIsImV4cHJlc3Npb25TeW50YXgiLCIkZ09QRCIsInJlcXVpcmUkJDciLCJyZXF1aXJlJCQ4IiwieCIsImRvRXZhbCIsImdlbiIsInJlcXVpcmUkJDkiLCJyZXF1aXJlJCQxMCIsIiRjb25jYXQiLCIkcmVwbGFjZSIsInN0cmluZ1RvUGF0aCIsInF1b3RlIiwic3ViU3RyaW5nIiwiZ2V0QmFzZUludHJpbnNpYyIsImFsbG93TWlzc2luZyIsImludHJpbnNpY05hbWUiLCJhbGlhcyIsIkdldEludHJpbnNpYyIsImludHJpbnNpY0Jhc2VOYW1lIiwiaW50cmluc2ljIiwiaW50cmluc2ljUmVhbE5hbWUiLCJza2lwRnVydGhlckNhY2hpbmciLCJpc093biIsInBhcnQiLCIkZGVmaW5lUHJvcGVydHkiLCJnb3BkIiwiZGVmaW5lRGF0YVByb3BlcnR5IiwicHJvcGVydHkiLCJub25FbnVtZXJhYmxlIiwibm9uV3JpdGFibGUiLCJub25Db25maWd1cmFibGUiLCJsb29zZSIsImhhc1Byb3BlcnR5RGVzY3JpcHRvcnMiLCJoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyIsIiRmbG9vciIsInNldEZ1bmN0aW9uTGVuZ3RoIiwiZnVuY3Rpb25MZW5ndGhJc0NvbmZpZ3VyYWJsZSIsImZ1bmN0aW9uTGVuZ3RoSXNXcml0YWJsZSIsIiRhcHBseSIsIiRjYWxsIiwiJHJlZmxlY3RBcHBseSIsIiRtYXgiLCJvcmlnaW5hbEZ1bmN0aW9uIiwiYXBwbHlCaW5kIiwiY2FsbEJvdW5kIiwiY2FsbEJvdW5kSW50cmluc2ljIiwiTyIsInNlcFJlZ2V4IiwiaW50IiwiaW50U3RyIiwiZGVjIiwiaW5zcGVjdF8iLCJzZWVuIiwiaGFzIiwiY3VzdG9tSW5zcGVjdCIsIm51bWVyaWNTZXBhcmF0b3IiLCJiaWdJbnRTdHIiLCJpbmRlbnQiLCJub0luZGVudCIsIm5ld09wdHMiLCJzeW1TdHJpbmciLCJpc0VsZW1lbnQiLCJ4cyIsIm1hcFBhcnRzIiwic2V0UGFydHMiLCJ5cyIsImlzUGxhaW5PYmplY3QiLCJwcm90b1RhZyIsInN0cmluZ1RhZyIsImNvbnN0cnVjdG9yVGFnIiwiZGVmYXVsdFN0eWxlIiwicXVvdGVDaGFyIiwidHJhaWxlciIsImVudHJpZXMiLCJqb2luZWRFbnRyaWVzIiwiYmFzZUluZGVudCIsImxpbmVKb2luZXIiLCJpc0FyciIsInN5bU1hcCIsImN1cnIiLCJvYmplY3RzIiwiZ2V0U2lkZUNoYW5uZWwiLCIkd20iLCIkbSIsIiRvIiwiY2hhbm5lbCIsImZvcm1hdHMiLCJjb21wYWN0UXVldWUiLCJpdGVtIiwiY29tcGFjdGVkIiwibWVyZ2VUYXJnZXQiLCJ0YXJnZXRJdGVtIiwiYXNzaWduU2luZ2xlU291cmNlIiwiZGVjb2RlciIsImNoYXJzZXQiLCJzdHJXaXRob3V0UGx1cyIsImRlZmF1bHRFbmNvZGVyIiwiJDAiLCJvdXQiLCJzZWdtZW50IiwiY29tcGFjdCIsInJlZnMiLCJjb21iaW5lIiwibWF5YmVNYXAiLCJicmFja2V0cyIsImluZGljZXMiLCJyZXBlYXQiLCJ2YWx1ZU9yQXJyYXkiLCJzZXJpYWxpemVEYXRlIiwiaXNOb25OdWxsaXNoUHJpbWl0aXZlIiwic3RyaW5naWZ5IiwiZ2VuZXJhdGVBcnJheVByZWZpeCIsImNvbW1hUm91bmRUcmlwIiwiYWxsb3dFbXB0eUFycmF5cyIsInN0cmljdE51bGxIYW5kbGluZyIsInNraXBOdWxscyIsImVuY29kZURvdEluS2V5cyIsImFsbG93RG90cyIsImZvcm1hdHRlciIsImVuY29kZVZhbHVlc09ubHkiLCJzaWRlQ2hhbm5lbCIsInRtcFNjIiwiZmluZEZsYWciLCJrZXlWYWx1ZSIsIm9iaktleXMiLCJlbmNvZGVkUHJlZml4IiwiYWRqdXN0ZWRQcmVmaXgiLCJlbmNvZGVkS2V5Iiwia2V5UHJlZml4IiwidmFsdWVTaWRlQ2hhbm5lbCIsIm5vcm1hbGl6ZVN0cmluZ2lmeU9wdGlvbnMiLCJhcnJheUZvcm1hdCIsImpvaW5lZCIsIm51bWJlclN0ciIsInBhcnNlUXVlcnlTdHJpbmdWYWx1ZXMiLCJjbGVhblN0ciIsImxpbWl0Iiwic2tpcEluZGV4IiwiYnJhY2tldEVxdWFsc1BvcyIsImVuY29kZWRWYWwiLCJleGlzdGluZyIsInZhbHVlc1BhcnNlZCIsImxlYWYiLCJjbGVhblJvb3QiLCJkZWNvZGVkUm9vdCIsInBhcnNlUXVlcnlTdHJpbmdLZXlzIiwiZ2l2ZW5LZXkiLCJub3JtYWxpemVQYXJzZU9wdGlvbnMiLCJwYXJzZSIsInRlbXBPYmoiLCJuZXdPYmoiLCJfaGFzQnVmZmVyIiwiX1REIiwiX1RFIiwiYjY0Y2giLCJiNjRjaHMiLCJiNjR0YWIiLCJ0YWIiLCJiNjRyZSIsIl9mcm9tQ0MiLCJfVThBZnJvbSIsIml0IiwiX21rVXJpU2FmZSIsIm0wIiwiX3RpZHlCNjQiLCJidG9hUG9seWZpbGwiLCJiaW4iLCJ1MzIiLCJjMCIsImMxIiwiYzIiLCJhc2MiLCJwYWQiLCJfYnRvYSIsIl9mcm9tVWludDhBcnJheSIsInU4YSIsIm1heGFyZ3MiLCJzdHJzIiwiZnJvbVVpbnQ4QXJyYXkiLCJ1cmxzYWZlIiwiY2JfdXRvYiIsImNjIiwicmVfdXRvYiIsInV0b2IiLCJ1IiwiZW5jb2RlVVJJIiwicmVfYnRvdSIsImNiX2J0b3UiLCJjY2NjIiwiY3AiLCJidG91IiwiYXRvYlBvbHlmaWxsIiwidTI0IiwicjEiLCJyMiIsIl9hdG9iIiwiX3RvVWludDhBcnJheSIsInRvVWludDhBcnJheSIsIl91blVSSSIsIl9kZWNvZGUiLCJkZWNvZGUiLCJpc1ZhbGlkIiwiX25vRW51bSIsImV4dGVuZFN0cmluZyIsIl9hZGQiLCJleHRlbmRVaW50OEFycmF5IiwiZXh0ZW5kQnVpbHRpbnMiLCJnQmFzZTY0IiwiS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyXzEiLCJLaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXIiLCJyZXF1ZXN0VXJsIiwiX2QiLCJfZSIsIl9mIiwiX2ciLCJfaCIsIl9qIiwiX2siLCJwcm94eUNvbmZpZyIsInJlcXVlc3RUb2tlbiIsImJhc2ljQXV0aCIsInVzZXJBZ2VudCIsImJhc2ljQXV0aEhlYWRlcnMiLCJwbGF0Zm9ybURlcHNIZWFkZXJzIiwiY29tbW9uSGVhZGVycyIsImFwaVRva2VuIiwiS2ludG9uZVJlc3BvbnNlSGFuZGxlcl8xIiwiS2ludG9uZVJlc3BvbnNlSGFuZGxlciIsImVuYWJsZUFib3J0U2VhcmNoRXJyb3IiLCJlcnJvclJlc3BvbnNlIiwiS2ludG9uZVJlc3RBUElDbGllbnRfMSIsIktpbnRvbmVSZXN0QVBJQ2xpZW50IiwiaHR0cENsaWVudCIsInNvY2tldFRpbWVvdXQiLCJfX3NldE1vZHVsZURlZmF1bHQiLCJfX2ltcG9ydFN0YXIiLCJicm93c2VyRGVwcyIsIkZpZWxkVHlwZSIsIkNhbGNGb3JtYXQiLCJmaWVsZCIsIm51bWJlckFycmF5IiwiY2FsY0ZpZWxkIiwidmFyTmFtZSIsImFwaSIsImVsZW1lbnQiLCJ2YXJWYWx1ZXMiLCJkYXRhcyIsImxvb2t1cEZpeGVkRmllbGRDb2RlcyIsImlzS2V5IiwicmZyb20iLCJtYXBwaW5nRGF0YSIsImFwcElkIiwibmVlZENyZWF0ZSIsInRhcmdldEZpZWxkIiwibWFwcGluZ1J1bGVzIiwidXBkYXRlUmVjb3JkcyIsInRhcmdldFJlY29yZCIsInVwZGF0ZVJlY29yZCIsIm1hcHBpbmciLCJxdWVyeVN0ciIsInZmcm9tIiwiZmlsdGVySGFuZGxlciIsImFjY3VtdWxhdG9yIiwibWF4TGVuZ3RoIiwidG9kYXkiLCJmaWVsZFR5cGUiLCJpbnB1dFZhbHVlIiwiZmllbGRDb2RlIiwiZmllbGRSZXF1aXJlZCIsInZhbHVlSGFzQmxhbmsiLCJpbnB1dFZhbHVlQXJyYXkiLCJ2YXJpYWJsZUhhc0JsYW5rIiwiaW5wdXROdW1iZXJWYWx1ZSIsInR3b0RpZ2l0TW9udGhEYXkiLCJzaW5nbGVEaWdpdE1vbnRoRGF5Iiwic2luZ2xlRGlnaXRNb250aCIsInNpbmdsZURpZ2l0RGF5IiwiZGF0ZVRpbWVNaWxsaVNlY29uZCIsImRhdGVUaW1lIiwiZGF0ZVRpbWVOb3RJbmNsdWRpbmdNaWxsaVNlY29uZHMiLCJqc3REYXRlIiwiZGF0ZUFycmF5IiwieWVhckluZGV4IiwibW9udGhJbmRleCIsImRheUluZGV4IiwiZmllbGRPcHRpb25zIiwib3B0aW9uc0luZGV4IiwidXNlcnNOYW1lIiwidXNlcnNJbmZvIiwiaW5kZXhVc2Vyc0luZm8iLCJpbmRleElucHV0VXNlciIsIm9yZ2FuaXphdGlvbk5hbWUiLCJncm91cHNOYW1lIiwib2JqZWN0VmFsdWUiLCJ2YXJpYWJsZVZhbHVlIiwib2JqZWN0UHJvcGVydHlOYW1lIiwiZmllbGRDb2x1bW5JbmRleCIsImluc2VydFZhbHVlVHlwZSIsImZpZWxkVmFsdWVBcnJheSIsIm5vdElucHV0RXJyb3IiLCJjb250ZXh0SGFzVmFyaWFibGVzTmFtZXMiLCJnZXRDb250ZXh0VmFyQnlQYXRoIiwiaW5wdXRWYXJpYWJsZXNOYW1lIiwiaW5wdXRWYXJpYWJsZXNFeGlzdCIsIm9iamVjdFByb3BlcnRpZXMiLCJjb3JyZWN0Rm9ybWF0dGVkVmFsdWUiLCJjb3JyZWN0VmFsdWVzIiwiZm9ybWF0dGVkRGF0ZSIsIm9yZ2FuaXphdGlvbnMiLCJzZXRVcGRhdGVEYXRhIiwidXBkYXRlRGF0YSIsImluc2VydFZhbHVlIiwidXBkYXRlZFJlY29yZCIsImdldFZhbHVlIiwibW90b3RleHQiLCJqb2luRmllbGQxdHlwZSIsImpvaW5GaWVsZDJ0eXBlIiwic2F2ZUZpZWxkdHlwZSIsImpvaW5WYWx1ZTEiLCJqb2luVmFsdWUyIiwiY29uU3RyaW5nIiwic2F2ZVZhbHVlIiwiY2hlY2tSZWdleCIsInJldFN0ciIsImVsZW1lbnRNYXAiLCJpbnN0YW5jZU1hcCIsIlRSQU5TSVRJT05fRU5EIiwicGFyc2VTZWxlY3RvciIsImdldFVJRCIsImdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50IiwidHJhbnNpdGlvbkR1cmF0aW9uIiwidHJhbnNpdGlvbkRlbGF5IiwiZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24iLCJmbG9hdFRyYW5zaXRpb25EZWxheSIsInRyaWdnZXJUcmFuc2l0aW9uRW5kIiwiZ2V0RWxlbWVudCIsImlzVmlzaWJsZSIsImVsZW1lbnRJc1Zpc2libGUiLCJjbG9zZWREZXRhaWxzIiwic3VtbWFyeSIsImlzRGlzYWJsZWQiLCJmaW5kU2hhZG93Um9vdCIsInJlZmxvdyIsImdldGpRdWVyeSIsIkRPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MiLCJvbkRPTUNvbnRlbnRMb2FkZWQiLCJpc1JUTCIsImRlZmluZUpRdWVyeVBsdWdpbiIsInBsdWdpbiIsIiQiLCJKUVVFUllfTk9fQ09ORkxJQ1QiLCJleGVjdXRlIiwicG9zc2libGVDYWxsYmFjayIsImV4ZWN1dGVBZnRlclRyYW5zaXRpb24iLCJ0cmFuc2l0aW9uRWxlbWVudCIsIndhaXRGb3JUcmFuc2l0aW9uIiwiZHVyYXRpb25QYWRkaW5nIiwiZW11bGF0ZWREdXJhdGlvbiIsImNhbGxlZCIsImdldE5leHRBY3RpdmVFbGVtZW50IiwiYWN0aXZlRWxlbWVudCIsInNob3VsZEdldE5leHQiLCJpc0N5Y2xlQWxsb3dlZCIsImxpc3RMZW5ndGgiLCJpbmRleF9qcyIsIm5hbWVzcGFjZVJlZ2V4Iiwic3RyaXBOYW1lUmVnZXgiLCJzdHJpcFVpZFJlZ2V4IiwiZXZlbnRSZWdpc3RyeSIsInVpZEV2ZW50IiwiY3VzdG9tRXZlbnRzIiwibmF0aXZlRXZlbnRzIiwibWFrZUV2ZW50VWlkIiwidWlkIiwiZ2V0RWxlbWVudEV2ZW50cyIsImJvb3RzdHJhcEhhbmRsZXIiLCJoeWRyYXRlT2JqIiwiRXZlbnRIYW5kbGVyIiwiYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIiLCJkb21FbGVtZW50cyIsImRvbUVsZW1lbnQiLCJmaW5kSGFuZGxlciIsImNhbGxhYmxlIiwiZGVsZWdhdGlvblNlbGVjdG9yIiwibm9ybWFsaXplUGFyYW1ldGVycyIsIm9yaWdpbmFsVHlwZUV2ZW50IiwiZGVsZWdhdGlvbkZ1bmN0aW9uIiwiaXNEZWxlZ2F0ZWQiLCJ0eXBlRXZlbnQiLCJnZXRUeXBlRXZlbnQiLCJhZGRIYW5kbGVyIiwib25lT2ZmIiwicHJldmlvdXNGdW5jdGlvbiIsInJlbW92ZUhhbmRsZXIiLCJyZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMiLCJzdG9yZUVsZW1lbnRFdmVudCIsImhhbmRsZXJLZXkiLCJpbk5hbWVzcGFjZSIsImlzTmFtZXNwYWNlIiwiZWxlbWVudEV2ZW50Iiwia2V5SGFuZGxlcnMiLCJqUXVlcnlFdmVudCIsImJ1YmJsZXMiLCJuYXRpdmVEaXNwYXRjaCIsImRlZmF1bHRQcmV2ZW50ZWQiLCJtZXRhIiwibm9ybWFsaXplRGF0YSIsIm5vcm1hbGl6ZURhdGFLZXkiLCJjaHIiLCJic0tleXMiLCJwdXJlS2V5IiwiTWFuaXB1bGF0b3IiLCJDb25maWciLCJqc29uQ29uZmlnIiwiY29uZmlnVHlwZXMiLCJleHBlY3RlZFR5cGVzIiwidmFsdWVUeXBlIiwiQmFzZUNvbXBvbmVudCIsInByb3BlcnR5TmFtZSIsImlzQW5pbWF0ZWQiLCJnZXRTZWxlY3RvciIsImhyZWZBdHRyaWJ1dGUiLCJTZWxlY3RvckVuZ2luZSIsInBhcmVudHMiLCJhbmNlc3RvciIsInByZXZpb3VzIiwiZm9jdXNhYmxlcyIsIk5BTUUiLCJDTEFTU19OQU1FX0ZBREUiLCJDTEFTU19OQU1FX1NIT1ciLCJFVkVOVF9NT1VTRURPV04iLCJEZWZhdWx0IiwiRGVmYXVsdFR5cGUiLCJCYWNrZHJvcCIsImJhY2tkcm9wIiwiZW5hYmxlRGlzbWlzc1RyaWdnZXIiLCJjb21wb25lbnQiLCJjbGlja0V2ZW50IiwiRVZFTlRfS0VZIiwiRVZFTlRfRk9DVVNJTiIsIkVWRU5UX0tFWURPV05fVEFCIiwiVEFCX0tFWSIsIlRBQl9OQVZfRk9SV0FSRCIsIlRBQl9OQVZfQkFDS1dBUkQiLCJGb2N1c1RyYXAiLCJ0cmFwRWxlbWVudCIsIlNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQiLCJTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCIsIlBST1BFUlRZX1BBRERJTkciLCJQUk9QRVJUWV9NQVJHSU4iLCJTY3JvbGxCYXJIZWxwZXIiLCJkb2N1bWVudFdpZHRoIiwiY2FsY3VsYXRlZFZhbHVlIiwic3R5bGVQcm9wZXJ0eSIsInNjcm9sbGJhcldpZHRoIiwibWFuaXB1bGF0aW9uQ2FsbEJhY2siLCJhY3R1YWxWYWx1ZSIsImNhbGxCYWNrIiwiY29tcG9uZW50RnVuY3Rpb25zX2pzIiwiREFUQV9BUElfS0VZIiwiRVNDQVBFX0tFWSIsIkVWRU5UX0hJREUiLCJFVkVOVF9ISURFX1BSRVZFTlRFRCIsIkVWRU5UX0hJRERFTiIsIkVWRU5UX1NIT1ciLCJFVkVOVF9TSE9XTiIsIkVWRU5UX1JFU0laRSIsIkVWRU5UX0NMSUNLX0RJU01JU1MiLCJFVkVOVF9NT1VTRURPV05fRElTTUlTUyIsIkVWRU5UX0tFWURPV05fRElTTUlTUyIsIkVWRU5UX0NMSUNLX0RBVEFfQVBJIiwiQ0xBU1NfTkFNRV9PUEVOIiwiQ0xBU1NfTkFNRV9TVEFUSUMiLCJPUEVOX1NFTEVDVE9SIiwiU0VMRUNUT1JfRElBTE9HIiwiU0VMRUNUT1JfTU9EQUxfQk9EWSIsIlNFTEVDVE9SX0RBVEFfVE9HR0xFIiwiTW9kYWwiLCJyZWxhdGVkVGFyZ2V0IiwibW9kYWxCb2R5IiwidHJhbnNpdGlvbkNvbXBsZXRlIiwiZXZlbnQyIiwiaXNNb2RhbE92ZXJmbG93aW5nIiwiaW5pdGlhbE92ZXJmbG93WSIsImlzQm9keU92ZXJmbG93aW5nIiwic2hvd0V2ZW50IiwiYWxyZWFkeU9wZW4iLCJwbGFjZW1lbnQiLCJvd25lckRvY3VtZW50IiwiT3duRWxlbWVudCIsIl9yZWYiLCJlZmZlY3QiLCJfcmVmMiIsImluaXRpYWxTdHlsZXMiLCJzdHlsZVByb3BlcnRpZXMiLCJhdHRyaWJ1dGUiLCJ1YURhdGEiLCJpbmNsdWRlU2NhbGUiLCJpc0ZpeGVkU3RyYXRlZ3kiLCJjbGllbnRSZWN0Iiwic2NhbGVYIiwic2NhbGVZIiwidmlzdWFsVmlld3BvcnQiLCJhZGRWaXN1YWxPZmZzZXRzIiwiaGVpZ2h0Iiwicm9vdE5vZGUiLCJnZXRDb21wdXRlZFN0eWxlIiwiaXNGaXJlZm94IiwiaXNJRSIsImVsZW1lbnRDc3MiLCJjdXJyZW50Tm9kZSIsImNzcyIsIm1hdGhNYXgiLCJtYXRoTWluIiwicGFkZGluZ09iamVjdCIsImhhc2hNYXAiLCJ0b1BhZGRpbmdPYmplY3QiLCJwYWRkaW5nIiwiX3N0YXRlJG1vZGlmaWVyc0RhdGEkIiwiYXJyb3dFbGVtZW50IiwicG9wcGVyT2Zmc2V0cyIsImJhc2VQbGFjZW1lbnQiLCJheGlzIiwiaXNWZXJ0aWNhbCIsImFycm93UmVjdCIsIm1pblByb3AiLCJtYXhQcm9wIiwiZW5kRGlmZiIsInN0YXJ0RGlmZiIsImFycm93T2Zmc2V0UGFyZW50IiwiY2xpZW50U2l6ZSIsImNlbnRlclRvUmVmZXJlbmNlIiwiY2VudGVyIiwiYXhpc1Byb3AiLCJfb3B0aW9ucyRlbGVtZW50IiwiZHByIiwiX09iamVjdCRhc3NpZ24yIiwicG9wcGVyIiwicG9wcGVyUmVjdCIsInZhcmlhdGlvbiIsIm9mZnNldHMiLCJncHVBY2NlbGVyYXRpb24iLCJhZGFwdGl2ZSIsInJvdW5kT2Zmc2V0cyIsImlzRml4ZWQiLCJfb2Zmc2V0cyR4IiwiX29mZnNldHMkeSIsIl9yZWYzIiwiaGFzWCIsImhhc1kiLCJzaWRlWCIsInNpZGVZIiwiaGVpZ2h0UHJvcCIsIndpZHRoUHJvcCIsIm9mZnNldFkiLCJvZmZzZXRYIiwiY29tbW9uU3R5bGVzIiwiX3JlZjQiLCJfT2JqZWN0JGFzc2lnbiIsIl9yZWY1IiwiX29wdGlvbnMkZ3B1QWNjZWxlcmF0IiwiX29wdGlvbnMkYWRhcHRpdmUiLCJfb3B0aW9ucyRyb3VuZE9mZnNldHMiLCJfb3B0aW9ucyRzY3JvbGwiLCJzY3JvbGwiLCJfb3B0aW9ucyRyZXNpemUiLCJyZXNpemUiLCJzY3JvbGxQYXJlbnRzIiwic2Nyb2xsUGFyZW50Iiwic2Nyb2xsTGVmdCIsInNjcm9sbFRvcCIsInN0cmF0ZWd5IiwibGF5b3V0Vmlld3BvcnQiLCJfZWxlbWVudCRvd25lckRvY3VtZW4iLCJ3aW5TY3JvbGwiLCJfZ2V0Q29tcHV0ZWRTdHlsZSIsIm92ZXJmbG93Iiwib3ZlcmZsb3dYIiwib3ZlcmZsb3dZIiwiaXNCb2R5IiwidXBkYXRlZExpc3QiLCJjbGlwcGluZ1BhcmVudCIsImNsaXBwaW5nUGFyZW50cyIsImNhbkVzY2FwZUNsaXBwaW5nIiwiY2xpcHBlckVsZW1lbnQiLCJib3VuZGFyeSIsInJvb3RCb3VuZGFyeSIsIm1haW5DbGlwcGluZ1BhcmVudHMiLCJmaXJzdENsaXBwaW5nUGFyZW50IiwiY2xpcHBpbmdSZWN0IiwiYWNjUmVjdCIsInJlZmVyZW5jZSIsImNvbW1vblgiLCJjb21tb25ZIiwibWFpbkF4aXMiLCJfb3B0aW9ucyIsIl9vcHRpb25zJHBsYWNlbWVudCIsIl9vcHRpb25zJHN0cmF0ZWd5IiwiX29wdGlvbnMkYm91bmRhcnkiLCJfb3B0aW9ucyRyb290Qm91bmRhcnkiLCJfb3B0aW9ucyRlbGVtZW50Q29udGUiLCJlbGVtZW50Q29udGV4dCIsIl9vcHRpb25zJGFsdEJvdW5kYXJ5IiwiYWx0Qm91bmRhcnkiLCJfb3B0aW9ucyRwYWRkaW5nIiwiYWx0Q29udGV4dCIsImNsaXBwaW5nQ2xpZW50UmVjdCIsInJlZmVyZW5jZUNsaWVudFJlY3QiLCJwb3BwZXJDbGllbnRSZWN0IiwiZWxlbWVudENsaWVudFJlY3QiLCJvdmVyZmxvd09mZnNldHMiLCJvZmZzZXREYXRhIiwibXVsdGlwbHkiLCJmbGlwVmFyaWF0aW9ucyIsIl9vcHRpb25zJGFsbG93ZWRBdXRvUCIsImFsbG93ZWRBdXRvUGxhY2VtZW50cyIsImFsbFBsYWNlbWVudHMiLCJwbGFjZW1lbnRzIiwiYWxsb3dlZFBsYWNlbWVudHMiLCJvdmVyZmxvd3MiLCJvcHBvc2l0ZVBsYWNlbWVudCIsIl9vcHRpb25zJG1haW5BeGlzIiwiY2hlY2tNYWluQXhpcyIsIl9vcHRpb25zJGFsdEF4aXMiLCJjaGVja0FsdEF4aXMiLCJzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMiLCJfb3B0aW9ucyRmbGlwVmFyaWF0aW8iLCJwcmVmZXJyZWRQbGFjZW1lbnQiLCJpc0Jhc2VQbGFjZW1lbnQiLCJmYWxsYmFja1BsYWNlbWVudHMiLCJyZWZlcmVuY2VSZWN0IiwiY2hlY2tzTWFwIiwibWFrZUZhbGxiYWNrQ2hlY2tzIiwiZmlyc3RGaXR0aW5nUGxhY2VtZW50IiwiX2Jhc2VQbGFjZW1lbnQiLCJpc1N0YXJ0VmFyaWF0aW9uIiwibWFpblZhcmlhdGlvblNpZGUiLCJhbHRWYXJpYXRpb25TaWRlIiwiY2hlY2tzIiwibnVtYmVyT2ZDaGVja3MiLCJfbG9vcCIsImZpdHRpbmdQbGFjZW1lbnQiLCJfcmV0IiwicHJldmVudGVkT2Zmc2V0cyIsInNpZGUiLCJyZWZlcmVuY2VPdmVyZmxvdyIsInBvcHBlckFsdE92ZXJmbG93IiwicmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzIiwicG9wcGVyRXNjYXBlT2Zmc2V0cyIsImlzUmVmZXJlbmNlSGlkZGVuIiwiaGFzUG9wcGVyRXNjYXBlZCIsInJlY3RzIiwiaW52ZXJ0RGlzdGFuY2UiLCJza2lkZGluZyIsImRpc3RhbmNlIiwiX29wdGlvbnMkb2Zmc2V0IiwiX2RhdGEkc3RhdGUkcGxhY2VtZW50IiwiX29wdGlvbnMkdGV0aGVyIiwidGV0aGVyIiwiX29wdGlvbnMkdGV0aGVyT2Zmc2V0IiwidGV0aGVyT2Zmc2V0IiwiYWx0QXhpcyIsInRldGhlck9mZnNldFZhbHVlIiwibm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlIiwib2Zmc2V0TW9kaWZpZXJTdGF0ZSIsIl9vZmZzZXRNb2RpZmllclN0YXRlJCIsIm1haW5TaWRlIiwiYWx0U2lkZSIsImFkZGl0aXZlIiwibWluTGVuIiwibWF4TGVuIiwiYXJyb3dQYWRkaW5nT2JqZWN0IiwiYXJyb3dQYWRkaW5nTWluIiwiYXJyb3dQYWRkaW5nTWF4IiwiYXJyb3dMZW4iLCJtaW5PZmZzZXQiLCJtYXhPZmZzZXQiLCJjbGllbnRPZmZzZXQiLCJvZmZzZXRNb2RpZmllclZhbHVlIiwidGV0aGVyTWluIiwidGV0aGVyTWF4IiwicHJldmVudGVkT2Zmc2V0IiwiX29mZnNldE1vZGlmaWVyU3RhdGUkMiIsIl9tYWluU2lkZSIsIl9hbHRTaWRlIiwiX29mZnNldCIsIl9sZW4iLCJfbWluIiwiX21heCIsImlzT3JpZ2luU2lkZSIsIl9vZmZzZXRNb2RpZmllclZhbHVlIiwiX3RldGhlck1pbiIsIl90ZXRoZXJNYXgiLCJfcHJldmVudGVkT2Zmc2V0IiwiZWxlbWVudE9yVmlydHVhbEVsZW1lbnQiLCJpc09mZnNldFBhcmVudEFuRWxlbWVudCIsIm9mZnNldFBhcmVudElzU2NhbGVkIiwibW9kaWZpZXJzIiwidmlzaXRlZCIsIm1vZGlmaWVyIiwicmVxdWlyZXMiLCJkZXAiLCJkZXBNb2RpZmllciIsIm9yZGVyZWRNb2RpZmllcnMiLCJwaGFzZSIsInBlbmRpbmciLCJnZW5lcmF0b3JPcHRpb25zIiwiX2dlbmVyYXRvck9wdGlvbnMiLCJfZ2VuZXJhdG9yT3B0aW9ucyRkZWYiLCJkZWZhdWx0TW9kaWZpZXJzIiwiX2dlbmVyYXRvck9wdGlvbnMkZGVmMiIsImRlZmF1bHRPcHRpb25zIiwiZWZmZWN0Q2xlYW51cEZucyIsImlzRGVzdHJveWVkIiwic2V0T3B0aW9uc0FjdGlvbiIsImNsZWFudXBNb2RpZmllckVmZmVjdHMiLCJydW5Nb2RpZmllckVmZmVjdHMiLCJfc3RhdGUkZWxlbWVudHMiLCJfc3RhdGUkb3JkZXJlZE1vZGlmaWUiLCJfc3RhdGUkb3JkZXJlZE1vZGlmaWUyIiwiX3JlZiRvcHRpb25zIiwiY2xlYW51cEZuIiwibm9vcEZuIiwiY3JlYXRlUG9wcGVyIiwiY29tcHV0ZVN0eWxlcyIsImFwcGx5U3R5bGVzIiwiZmxpcCIsInByZXZlbnRPdmVyZmxvdyIsImFycm93IiwiaGlkZSIsImFic0RlbHRhWCIsImRpcmVjdGlvbiIsIml0ZW1zIiwiYWN0aXZlSW5kZXgiLCJvcmRlciIsImltZyIsInN3aXBlQ29uZmlnIiwiYWN0aXZlSW5kaWNhdG9yIiwibmV3QWN0aXZlSW5kaWNhdG9yIiwiZWxlbWVudEludGVydmFsIiwiaXNOZXh0IiwibmV4dEVsZW1lbnQiLCJuZXh0RWxlbWVudEluZGV4IiwidHJpZ2dlckV2ZW50IiwiZXZlbnROYW1lIiwiaXNDeWNsaW5nIiwiZGlyZWN0aW9uYWxDbGFzc05hbWUiLCJvcmRlckNsYXNzTmFtZSIsImNvbXBsZXRlQ2FsbEJhY2siLCJjYXJvdXNlbCIsInNsaWRlSW5kZXgiLCJjYXJvdXNlbHMiLCJ0b2dnbGVMaXN0IiwiZmlsdGVyRWxlbWVudCIsImZvdW5kRWxlbWVudCIsImFjdGl2ZUNoaWxkcmVuIiwiYWN0aXZlSW5zdGFuY2UiLCJzY3JvbGxTaXplIiwidHJpZ2dlciIsImNoaWxkcmVuIiwidHJpZ2dlckFycmF5IiwiaXNPcGVuIiwicmVmZXJlbmNlRWxlbWVudCIsInBvcHBlckNvbmZpZyIsIlBvcHBlci5jcmVhdGVQb3BwZXIiLCJwYXJlbnREcm9wZG93biIsImlzRW5kIiwicG9wcGVyRGF0YSIsImRlZmF1bHRCc1BvcHBlckNvbmZpZyIsIm9wZW5Ub2dnbGVzIiwiY29tcG9zZWRQYXRoIiwiaXNNZW51VGFyZ2V0IiwiaXNJbnB1dCIsImlzRXNjYXBlRXZlbnQiLCJpc1VwT3JEb3duRXZlbnQiLCJnZXRUb2dnbGVCdXR0b24iLCJjb21wbGV0ZUNhbGxiYWNrIiwiY2xpY2tDYWxsYmFjayIsImFsbG93ZWRBdHRyaWJ1dGVMaXN0IiwiYXR0cmlidXRlTmFtZSIsImF0dHJpYnV0ZVJlZ2V4IiwidW5zYWZlSHRtbCIsImFsbG93TGlzdCIsInNhbml0aXplRnVuY3Rpb24iLCJjcmVhdGVkRG9jdW1lbnQiLCJlbGVtZW50TmFtZSIsImF0dHJpYnV0ZUxpc3QiLCJhbGxvd2VkQXR0cmlidXRlcyIsInRlbXBsYXRlV3JhcHBlciIsImV4dHJhQ2xhc3MiLCJ0ZW1wbGF0ZUVsZW1lbnQiLCJpc0luVGhlRG9tIiwidGlwIiwidGlwSWQiLCJhdHRhY2htZW50IiwidHJpZ2dlcnMiLCJldmVudEluIiwiZXZlbnRPdXQiLCJ0aXRsZSIsImRhdGFBdHRyaWJ1dGVzIiwiZGF0YUF0dHJpYnV0ZSIsInNlY3Rpb24iLCJvYnNlcnZhYmxlU2VjdGlvbiIsInRhcmdldEVsZW1lbnQiLCJlbnRyeSIsImFjdGl2YXRlIiwicGFyZW50U2Nyb2xsVG9wIiwidXNlclNjcm9sbHNEb3duIiwiZW50cnlJc0xvd2VyVGhhblByZXZpb3VzIiwidGFyZ2V0TGlua3MiLCJhbmNob3IiLCJsaXN0R3JvdXAiLCJhY3RpdmVOb2RlcyIsInNweSIsImlubmVyRWxlbSIsImFjdGl2ZSIsImhpZGVFdmVudCIsInJlbGF0ZWRFbGVtIiwibmV4dEFjdGl2ZUVsZW1lbnQiLCJpc0FjdGl2ZSIsIm91dGVyRWxlbSIsIm9wZW4iLCJpc0ludGVyYWN0aW5nIiwibG9va1VwRmllbGQiLCJ0YXJnZXRSZWNvcmRzIiwiciIsImxvb2t1cCIsImRpYWxvZyIsIm1vZGFsSFRNTCIsImV2IiwiZGlhbG9nQm9keSIsImh0bWxyb3ciLCJhbGxDb3VudCIsInByb1JlY29yZHMiLCJsb29rVXBGaWVsZHMiLCJyZWNvcmRUYWJsZSIsInNwYW4iLCJpbnB1dEVsZW1lbnQiLCJjZWxscyIsImNvbmRpdGlvblRyZWUiLCJjdXJyQ29udGV4dCIsInRleHREZWNvcmF0aW9uIiwidHdvRGlnaXRNb250aCIsInNpbmdsZURpZ2l0RGF0ZSIsInR3b0RpZ2l0RGF0ZSIsImNhbGNWYWx1ZSIsImNhbGNPcHRpb24iLCJjYWxjUmVzdWx0IiwiY2hlY2tEYXRlVmFsdWUiLCJjYWxjT3B0aW9ucyIsImNhbGN1bGF0ZWREYXRlIiwidmVyTmFtZUdldFZhbHVlIiwiZGF0ZU9iaiIsImxhc3REYXlPZk1vbnRoIiwic3Bpbm5lciIsInBhcnNlZFVybCIsImxhc3RTZWdtZW50Iiwic2Vjb25kTGFzdFNlZ21lbnQiLCJtb2RlIiwiY3VycmVudExldmVsIiwiYXJyYXlJbmRleCIsImlucHV0RWxlbSIsInNvdXJjZUFwcElkIiwiaGFzaEJ1ZmZlciIsImZpZWxkTGlzdCIsInRlbXBEaWN0aW9uYXJ5IiwiZmllbGRDb2RlVG9JbmRleE1hcCIsImZpZWxkRGF0YSIsInJlY29yZEFycmF5IiwicHJldmlvdXNJdGVtIiwicHJldmlvdXNLZXkiLCJkaWN0aW9uYXJ5Iiwic2V0IiwiY3VycmVudFN0YXRlIiwicGFnZVR5cGUiLCJ0YWJsZUVsZW1lbnQiLCJmbGQiLCJlZGl0RWxlbSIsImhlYWRlckNlbGxzIiwiY2VsbCIsImluaXRTZWxlY3QiLCJsZXZlbCIsInByZXZpb3VzVmFsdWUiLCJvcHRpb25FbGVtZW50IiwiY3VycmVudEluZGV4IiwicHJldmlvdXNGaWVsZCIsInNuaXBwZXIiLCJkcm9wRG93bk1hbmFnZXIiLCJkaXNwbGF5TmFtZSIsInBsYWNlaG9sZGVyIiwibW9kZWxWYWx1ZSIsImlucHV0UG9pbnQiLCJvdXRwdXRQb2ludHMiLCJhY3Rpb25Qcm9wcyIsImRlZlByb3AiLCJwcm9wVmFsdWUiLCJzdWJUaXRsZSIsImFjdGlvbk5vZGVzIiwibmV4dE5vZGVJZHMiLCJwYXJzZWRPYmplY3QiLCJub2RlQ2xhc3MiLCJhY3Rpb25GbG93IiwiYWN0aW9uIiwiZGVmYXVsdE1lc3NhZ2UiLCJkZWZNc2ciLCJtZXNzYWdlcyIsImV2ZW50SWQiLCJmbG93IiwiZXJyb3JtYW5hZ2VyIiwibmV4dEFjdGlvbiIsIm5leHRJbnB1dCIsImdldENoYW5nZUV2ZW50cyIsImdldENsaWNrRXZlbnRzIiwiZ2V0S2ludG9uZUV2ZW50cyIsImNoYW5nZUV2ZW50cyIsImNsaWNrRXZlbnRzIiwia2ludG9uZUV2ZW50cyIsImZsb3dpbmZvIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7aUJBVUUsU0FBVUEsRUFBUUMsRUFBVSxDQWE1QkMsRUFBQSxRQUFpQkYsRUFBTyxTQUN2QkMsRUFBU0QsRUFBUSxFQUFNLEVBQ3ZCLFNBQVVHLEVBQUksQ0FDYixHQUFLLENBQUNBLEVBQUUsU0FDUCxNQUFNLElBQUksTUFBTyw0Q0FFbEIsT0FBT0YsRUFBU0UsRUFDcEIsQ0FNQSxHQUFLLE9BQU8sT0FBVyxJQUFjLE9BQVNDLGVBQU0sU0FBVUMsRUFBUUMsRUFBVyxDQVFqRixJQUFJQyxFQUFNLENBQUEsRUFFTkMsRUFBVyxPQUFPLGVBRWxCQyxFQUFRRixFQUFJLE1BRVpHLEVBQU9ILEVBQUksS0FBTyxTQUFVSSxFQUFRLENBQ3ZDLE9BQU9KLEVBQUksS0FBSyxLQUFNSSxDQUFLLENBQzNCLEVBQUcsU0FBVUEsRUFBUSxDQUNyQixPQUFPSixFQUFJLE9BQU8sTUFBTyxDQUFFLEVBQUVJLENBQUssQ0FDbkMsRUFHSUMsRUFBT0wsRUFBSSxLQUVYTSxFQUFVTixFQUFJLFFBRWRPLEVBQWEsQ0FBQSxFQUViQyxFQUFXRCxFQUFXLFNBRXRCRSxFQUFTRixFQUFXLGVBRXBCRyxFQUFhRCxFQUFPLFNBRXBCRSxFQUF1QkQsRUFBVyxLQUFNLE1BQU0sRUFFOUNFLEVBQVUsQ0FBQSxFQUVWQyxFQUFhLFNBQXFCQyxFQUFNLENBUzFDLE9BQU8sT0FBT0EsR0FBUSxZQUFjLE9BQU9BLEVBQUksVUFBYSxVQUMzRCxPQUFPQSxFQUFJLE1BQVMsVUFDdkIsRUFHSUMsRUFBVyxTQUFtQkQsRUFBTSxDQUN0QyxPQUFPQSxHQUFPLE1BQVFBLElBQVFBLEVBQUksTUFDcEMsRUFHSUUsRUFBV2xCLEVBQU8sU0FJakJtQixFQUE0QixDQUMvQixLQUFNLEdBQ04sSUFBSyxHQUNMLE1BQU8sR0FDUCxTQUFVLEVBQ1osRUFFQyxTQUFTQyxFQUFTQyxFQUFNQyxFQUFNQyxFQUFNLENBQ25DQSxFQUFNQSxHQUFPTCxFQUViLElBQUlNLEVBQUdDLEVBQ05DLEVBQVNILEVBQUksY0FBZSxVQUc3QixHQURBRyxFQUFPLEtBQU9MLEVBQ1RDLEVBQ0osSUFBTUUsS0FBS0wsRUFZVk0sRUFBTUgsRUFBTUUsSUFBT0YsRUFBSyxjQUFnQkEsRUFBSyxhQUFjRSxHQUN0REMsR0FDSkMsRUFBTyxhQUFjRixFQUFHQyxHQUkzQkYsRUFBSSxLQUFLLFlBQWFHLENBQVEsRUFBQyxXQUFXLFlBQWFBLEVBQ3ZELENBR0YsU0FBU0MsRUFBUVgsRUFBTSxDQUN0QixPQUFLQSxHQUFPLEtBQ0pBLEVBQU0sR0FJUCxPQUFPQSxHQUFRLFVBQVksT0FBT0EsR0FBUSxXQUNoRFAsRUFBWUMsRUFBUyxLQUFNTSxDQUFHLENBQUksR0FBSSxTQUN0QyxPQUFPQSxDQUNSLENBT0QsSUFBSVksR0FBVSxRQUViQyxFQUFjLFNBR2RDLEVBQVMsU0FBVUMsRUFBVUMsRUFBVSxDQUl0QyxPQUFPLElBQUlGLEVBQU8sR0FBRyxLQUFNQyxFQUFVQyxDQUFPLENBQzlDLEVBRUFGLEVBQU8sR0FBS0EsRUFBTyxVQUFZLENBRzlCLE9BQVFGLEdBRVIsWUFBYUUsRUFHYixPQUFRLEVBRVIsUUFBUyxVQUFXLENBQ25CLE9BQU8xQixFQUFNLEtBQU0sS0FDbkIsRUFJRCxJQUFLLFNBQVU2QixFQUFNLENBR3BCLE9BQUtBLEdBQU8sS0FDSjdCLEVBQU0sS0FBTSxNQUliNkIsRUFBTSxFQUFJLEtBQU1BLEVBQU0sS0FBSyxNQUFRLEVBQUcsS0FBTUEsRUFDbkQsRUFJRCxVQUFXLFNBQVVDLEVBQVEsQ0FHNUIsSUFBSUMsRUFBTUwsRUFBTyxNQUFPLEtBQUssWUFBVyxFQUFJSSxHQUc1QyxPQUFBQyxFQUFJLFdBQWEsS0FHVkEsQ0FDUCxFQUdELEtBQU0sU0FBVUMsRUFBVyxDQUMxQixPQUFPTixFQUFPLEtBQU0sS0FBTU0sQ0FBUSxDQUNsQyxFQUVELElBQUssU0FBVUEsRUFBVyxDQUN6QixPQUFPLEtBQUssVUFBV04sRUFBTyxJQUFLLEtBQU0sU0FBVU8sRUFBTWIsRUFBSSxDQUM1RCxPQUFPWSxFQUFTLEtBQU1DLEVBQU1iLEVBQUdhLENBQUksQ0FDbkMsQ0FBQSxFQUNELEVBRUQsTUFBTyxVQUFXLENBQ2pCLE9BQU8sS0FBSyxVQUFXakMsRUFBTSxNQUFPLEtBQU0sU0FBUyxFQUNuRCxFQUVELE1BQU8sVUFBVyxDQUNqQixPQUFPLEtBQUssR0FBSSxFQUNoQixFQUVELEtBQU0sVUFBVyxDQUNoQixPQUFPLEtBQUssR0FBSSxHQUNoQixFQUVELEtBQU0sVUFBVyxDQUNoQixPQUFPLEtBQUssVUFBVzBCLEVBQU8sS0FBTSxLQUFNLFNBQVVRLEVBQU9kLEVBQUksQ0FDOUQsT0FBU0EsRUFBSSxHQUFNLENBQ25CLENBQUEsRUFDRCxFQUVELElBQUssVUFBVyxDQUNmLE9BQU8sS0FBSyxVQUFXTSxFQUFPLEtBQU0sS0FBTSxTQUFVUSxFQUFPZCxFQUFJLENBQzlELE9BQU9BLEVBQUksQ0FDWCxDQUFBLEVBQ0QsRUFFRCxHQUFJLFNBQVVBLEVBQUksQ0FDakIsSUFBSWUsRUFBTSxLQUFLLE9BQ2RDLEVBQUksQ0FBQ2hCLEdBQU1BLEVBQUksRUFBSWUsRUFBTSxHQUMxQixPQUFPLEtBQUssVUFBV0MsR0FBSyxHQUFLQSxFQUFJRCxFQUFNLENBQUUsS0FBTUMsRUFBSyxFQUFHLENBQUUsQ0FBQSxDQUM3RCxFQUVELElBQUssVUFBVyxDQUNmLE9BQU8sS0FBSyxZQUFjLEtBQUssWUFBVyxDQUMxQyxFQUlELEtBQU1qQyxFQUNOLEtBQU1MLEVBQUksS0FDVixPQUFRQSxFQUFJLE1BQ2IsRUFFQTRCLEVBQU8sT0FBU0EsRUFBTyxHQUFHLE9BQVMsVUFBVyxDQUM3QyxJQUFJVyxFQUFTQyxFQUFNQyxFQUFLQyxFQUFNQyxFQUFhQyxFQUMxQ0MsRUFBUyxVQUFXLENBQUMsR0FBTSxDQUFFLEVBQzdCdkIsRUFBSSxFQUNKd0IsRUFBUyxVQUFVLE9BQ25CQyxFQUFPLEdBc0JSLElBbkJLLE9BQU9GLEdBQVcsWUFDdEJFLEVBQU9GLEVBR1BBLEVBQVMsVUFBV3ZCLENBQUcsR0FBSSxHQUMzQkEsS0FJSSxPQUFPdUIsR0FBVyxVQUFZLENBQUNoQyxFQUFZZ0MsQ0FBTSxJQUNyREEsRUFBUyxDQUFBLEdBSUx2QixJQUFNd0IsSUFDVkQsRUFBUyxLQUNUdkIsS0FHT0EsRUFBSXdCLEVBQVF4QixJQUduQixJQUFPaUIsRUFBVSxVQUFXakIsQ0FBQyxJQUFRLEtBR3BDLElBQU1rQixLQUFRRCxFQUNiRyxFQUFPSCxFQUFTQyxHQUlYLEVBQUFBLElBQVMsYUFBZUssSUFBV0gsS0FLbkNLLEdBQVFMLElBQVVkLEVBQU8sY0FBZWMsQ0FBTSxJQUNoREMsRUFBYyxNQUFNLFFBQVNELENBQUksS0FDbkNELEVBQU1JLEVBQVFMLEdBR1RHLEdBQWUsQ0FBQyxNQUFNLFFBQVNGLENBQUcsRUFDdENHLEVBQVEsQ0FBQSxFQUNHLENBQUNELEdBQWUsQ0FBQ2YsRUFBTyxjQUFlYSxDQUFHLEVBQ3JERyxFQUFRLENBQUEsRUFFUkEsRUFBUUgsRUFFVEUsRUFBYyxHQUdkRSxFQUFRTCxDQUFJLEVBQUtaLEVBQU8sT0FBUW1CLEVBQU1ILEVBQU9GLElBR2xDQSxJQUFTLFNBQ3BCRyxFQUFRTCxDQUFNLEVBQUdFLElBT3JCLE9BQU9HLENBQ1IsRUFFQWpCLEVBQU8sT0FBUSxDQUdkLFFBQVMsVUFBYUYsR0FBVSxLQUFLLFVBQVcsUUFBUyxNQUFPLEVBQUksRUFHcEUsUUFBUyxHQUVULE1BQU8sU0FBVXNCLEVBQU0sQ0FDdEIsTUFBTSxJQUFJLE1BQU9BLEVBQ2pCLEVBRUQsS0FBTSxVQUFXLENBQUUsRUFFbkIsY0FBZSxTQUFVbEMsRUFBTSxDQUM5QixJQUFJbUMsRUFBT0MsRUFJWCxNQUFLLENBQUNwQyxHQUFPTixFQUFTLEtBQU1NLENBQUcsSUFBTyxrQkFDOUIsSUFHUm1DLEVBQVFoRCxFQUFVYSxHQUdabUMsR0FLTkMsRUFBT3pDLEVBQU8sS0FBTXdDLEVBQU8sYUFBZSxHQUFJQSxFQUFNLFlBQzdDLE9BQU9DLEdBQVMsWUFBY3hDLEVBQVcsS0FBTXdDLENBQU0sSUFBS3ZDLEdBTHpELEdBTVIsRUFFRCxjQUFlLFNBQVVHLEVBQU0sQ0FDOUIsSUFBSTBCLEVBRUosSUFBTUEsS0FBUTFCLEVBQ2IsTUFBTyxHQUVSLE1BQU8sRUFDUCxFQUlELFdBQVksU0FBVUssRUFBTW9CLEVBQVNsQixFQUFNLENBQzFDSCxFQUFTQyxFQUFNLENBQUUsTUFBT29CLEdBQVdBLEVBQVEsS0FBSyxFQUFJbEIsRUFDcEQsRUFFRCxLQUFNLFNBQVVQLEVBQUtvQixFQUFXLENBQy9CLElBQUlZLEVBQVF4QixFQUFJLEVBRWhCLEdBQUs2QixFQUFhckMsR0FFakIsSUFEQWdDLEVBQVNoQyxFQUFJLE9BQ0xRLEVBQUl3QixHQUNOWixFQUFTLEtBQU1wQixFQUFLUSxDQUFDLEVBQUlBLEVBQUdSLEVBQUtRLEVBQUssSUFBSyxHQUQ3QkEsSUFDbkIsS0FLRCxLQUFNQSxLQUFLUixFQUNWLEdBQUtvQixFQUFTLEtBQU1wQixFQUFLUSxDQUFDLEVBQUlBLEVBQUdSLEVBQUtRLEVBQUssSUFBSyxHQUMvQyxNQUtILE9BQU9SLENBQ1AsRUFJRCxLQUFNLFNBQVVxQixFQUFPLENBQ3RCLElBQUlmLEVBQ0hhLEVBQU0sR0FDTlgsRUFBSSxFQUNKOEIsRUFBV2pCLEVBQUssU0FFakIsR0FBSyxDQUFDaUIsRUFHTCxLQUFVaEMsRUFBT2UsRUFBTWIsTUFHdEJXLEdBQU9MLEVBQU8sS0FBTVIsR0FHdEIsT0FBS2dDLElBQWEsR0FBS0EsSUFBYSxHQUM1QmpCLEVBQUssWUFFUmlCLElBQWEsRUFDVmpCLEVBQUssZ0JBQWdCLFlBRXhCaUIsSUFBYSxHQUFLQSxJQUFhLEVBQzVCakIsRUFBSyxVQUtORixDQUNQLEVBR0QsVUFBVyxTQUFVakMsRUFBS3FELEVBQVUsQ0FDbkMsSUFBSXBCLEVBQU1vQixHQUFXLEdBRXJCLE9BQUtyRCxHQUFPLE9BQ05tRCxFQUFhLE9BQVFuRCxDQUFHLEdBQzVCNEIsRUFBTyxNQUFPSyxFQUNiLE9BQU9qQyxHQUFRLFNBQ2QsQ0FBRUEsQ0FBSyxFQUFHQSxDQUNoQixFQUVJSyxFQUFLLEtBQU00QixFQUFLakMsSUFJWGlDLENBQ1AsRUFFRCxRQUFTLFNBQVVFLEVBQU1uQyxFQUFLc0IsRUFBSSxDQUNqQyxPQUFPdEIsR0FBTyxLQUFPLEdBQUtNLEVBQVEsS0FBTU4sRUFBS21DLEVBQU1iLEVBQ25ELEVBRUQsU0FBVSxTQUFVYSxFQUFPLENBQzFCLElBQUltQixFQUFZbkIsR0FBUUEsRUFBSyxhQUM1Qm9CLEVBQVVwQixJQUFVQSxFQUFLLGVBQWlCQSxHQUFPLGdCQUlsRCxNQUFPLENBQUNSLEVBQVksS0FBTTJCLEdBQWFDLEdBQVdBLEVBQVEsVUFBWSxPQUN0RSxFQUlELE1BQU8sU0FBVUMsRUFBT0MsRUFBUyxDQUtoQyxRQUpJcEIsRUFBTSxDQUFDb0IsRUFBTyxPQUNqQm5CLEVBQUksRUFDSmhCLEVBQUlrQyxFQUFNLE9BRUhsQixFQUFJRCxFQUFLQyxJQUNoQmtCLEVBQU9sQyxHQUFHLEVBQUttQyxFQUFRbkIsQ0FBQyxFQUd6QixPQUFBa0IsRUFBTSxPQUFTbEMsRUFFUmtDLENBQ1AsRUFFRCxLQUFNLFNBQVV4QixFQUFPRSxFQUFVd0IsRUFBUyxDQVN6QyxRQVJJQyxFQUNIQyxFQUFVLENBQUUsRUFDWnRDLEVBQUksRUFDSndCLEVBQVNkLEVBQU0sT0FDZjZCLEVBQWlCLENBQUNILEVBSVhwQyxFQUFJd0IsRUFBUXhCLElBQ25CcUMsRUFBa0IsQ0FBQ3pCLEVBQVVGLEVBQU9WLENBQUcsRUFBRUEsQ0FBQyxFQUNyQ3FDLElBQW9CRSxHQUN4QkQsRUFBUSxLQUFNNUIsRUFBT1YsQ0FBRyxDQUFBLEVBSTFCLE9BQU9zQyxDQUNQLEVBR0QsSUFBSyxTQUFVNUIsRUFBT0UsRUFBVTRCLEVBQU0sQ0FDckMsSUFBSWhCLEVBQVFpQixFQUNYekMsRUFBSSxFQUNKVyxFQUFNLENBQUEsRUFHUCxHQUFLa0IsRUFBYW5CLEdBRWpCLElBREFjLEVBQVNkLEVBQU0sT0FDUFYsRUFBSXdCLEVBQVF4QixJQUNuQnlDLEVBQVE3QixFQUFVRixFQUFPVixDQUFDLEVBQUlBLEVBQUd3QyxHQUU1QkMsR0FBUyxNQUNiOUIsRUFBSSxLQUFNOEIsT0FNWixLQUFNekMsS0FBS1UsRUFDVitCLEVBQVE3QixFQUFVRixFQUFPVixDQUFDLEVBQUlBLEVBQUd3QyxHQUU1QkMsR0FBUyxNQUNiOUIsRUFBSSxLQUFNOEIsR0FNYixPQUFPNUQsRUFBTThCLEVBQ2IsRUFHRCxLQUFNLEVBSU4sUUFBU3JCLENBQ1YsR0FFSyxPQUFPLFFBQVcsYUFDdEJnQixFQUFPLEdBQUksT0FBTyxRQUFVLEVBQUc1QixFQUFLLE9BQU8sV0FJNUM0QixFQUFPLEtBQU0sdUVBQXVFLE1BQU8sR0FBSyxFQUMvRixTQUFVb0MsRUFBSXhCLEVBQU8sQ0FDcEJqQyxFQUFZLFdBQWFpQyxFQUFPLEdBQUcsRUFBS0EsRUFBSyxhQUMvQyxHQUVBLFNBQVNXLEVBQWFyQyxFQUFNLENBTTNCLElBQUlnQyxFQUFTLENBQUMsQ0FBQ2hDLEdBQU8sV0FBWUEsR0FBT0EsRUFBSSxPQUM1Q21ELEVBQU94QyxFQUFRWCxHQUVoQixPQUFLRCxFQUFZQyxDQUFHLEdBQU1DLEVBQVVELENBQUcsRUFDL0IsR0FHRG1ELElBQVMsU0FBV25CLElBQVcsR0FDckMsT0FBT0EsR0FBVyxVQUFZQSxFQUFTLEdBQU9BLEVBQVMsS0FBT2hDLENBQy9ELENBR0QsU0FBU29ELEVBQVUvQixFQUFNSyxFQUFPLENBRS9CLE9BQU9MLEVBQUssVUFBWUEsRUFBSyxTQUFTLGdCQUFrQkssRUFBSyxhQUU3RCxDQUNELElBQUkyQixFQUFNbkUsRUFBSSxJQUdWb0UsRUFBT3BFLEVBQUksS0FHWHFFLEVBQVNyRSxFQUFJLE9BR2JzRSxFQUFhLHNCQUdiQyxHQUFXLElBQUksT0FDbEIsSUFBTUQsRUFBYSw4QkFBZ0NBLEVBQWEsS0FDaEUsR0FDRCxFQU1BMUMsRUFBTyxTQUFXLFNBQVU0QyxFQUFHQyxFQUFJLENBQ2xDLElBQUlDLEVBQU1ELEdBQUtBLEVBQUUsV0FFakIsT0FBT0QsSUFBTUUsR0FBTyxDQUFDLEVBQUdBLEdBQU9BLEVBQUksV0FBYSxJQUkvQ0YsRUFBRSxTQUNEQSxFQUFFLFNBQVVFLENBQUssRUFDakJGLEVBQUUseUJBQTJCQSxFQUFFLHdCQUF5QkUsQ0FBSyxFQUFHLElBRW5FLEVBT0EsSUFBSUMsR0FBYSwrQ0FFakIsU0FBU0MsR0FBWUMsRUFBSUMsRUFBYyxDQUN0QyxPQUFLQSxFQUdDRCxJQUFPLEtBQ0osSUFJREEsRUFBRyxNQUFPLEVBQUcsRUFBRSxFQUFLLEtBQU9BLEVBQUcsV0FBWUEsRUFBRyxPQUFTLENBQUMsRUFBRyxTQUFVLEVBQUksRUFBRyxJQUk1RSxLQUFPQSxDQUNkLENBRURqRCxFQUFPLGVBQWlCLFNBQVVtRCxFQUFNLENBQ3ZDLE9BQVNBLEVBQU0sSUFBSyxRQUFTSixHQUFZQyxFQUFVLENBQ3BELEVBS0EsSUFBSUksR0FBZWhFLEVBQ2xCaUUsR0FBYTVFLEdBRVosVUFBVyxDQUViLElBQUlpQixFQUNINEQsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQWhGLEVBQU80RSxHQUdQakUsRUFDQXNFLEVBQ0FDLEVBQ0FDLEVBQ0E1QixFQUdBNkIsRUFBVTdELEVBQU8sUUFDakI4RCxFQUFVLEVBQ1ZDLEVBQU8sRUFDUEMsR0FBYUMsR0FBYSxFQUMxQkMsR0FBYUQsR0FBYSxFQUMxQkUsR0FBZ0JGLEdBQWEsRUFDN0JHLEdBQXlCSCxHQUFhLEVBQ3RDSSxHQUFZLFNBQVV6QixFQUFHQyxFQUFJLENBQzVCLE9BQUtELElBQU1DLElBQ1ZZLEVBQWUsSUFFVCxDQUNQLEVBRURhLEdBQVcsNkhBTVhDLEdBQWEsMEJBQTRCN0IsRUFDeEMsMENBR0Q4QixHQUFhLE1BQVE5QixFQUFhLEtBQU82QixHQUFhLE9BQVM3QixFQUc5RCxnQkFBa0JBLEVBR2xCLHdEQUE2RDZCLEdBQWEsT0FDMUU3QixFQUFhLE9BRWQrQixHQUFVLEtBQU9GLEdBQWEscUZBT0FDLEdBQWEsZUFPM0NFLEdBQWMsSUFBSSxPQUFRaEMsRUFBYSxJQUFLLEdBQUssRUFFakRpQyxHQUFTLElBQUksT0FBUSxJQUFNakMsRUFBYSxLQUFPQSxFQUFhLEdBQUssRUFDakVrQyxHQUFxQixJQUFJLE9BQVEsSUFBTWxDLEVBQWEsV0FBYUEsRUFBYSxJQUM3RUEsRUFBYSxHQUFLLEVBQ25CbUMsR0FBVyxJQUFJLE9BQVFuQyxFQUFhLElBQU0sRUFFMUNvQyxHQUFVLElBQUksT0FBUUwsRUFBUyxFQUMvQk0sR0FBYyxJQUFJLE9BQVEsSUFBTVIsR0FBYSxHQUFLLEVBRWxEUyxHQUFZLENBQ1gsR0FBSSxJQUFJLE9BQVEsTUFBUVQsR0FBYSxHQUFLLEVBQzFDLE1BQU8sSUFBSSxPQUFRLFFBQVVBLEdBQWEsR0FBSyxFQUMvQyxJQUFLLElBQUksT0FBUSxLQUFPQSxHQUFhLE9BQVMsRUFDOUMsS0FBTSxJQUFJLE9BQVEsSUFBTUMsRUFBWSxFQUNwQyxPQUFRLElBQUksT0FBUSxJQUFNQyxFQUFTLEVBQ25DLE1BQU8sSUFBSSxPQUNWLHlEQUNDL0IsRUFBYSwrQkFBaUNBLEVBQWEsY0FDM0RBLEVBQWEsYUFBZUEsRUFBYSxTQUFVLEdBQUssRUFDMUQsS0FBTSxJQUFJLE9BQVEsT0FBUzRCLEdBQVcsS0FBTSxHQUFLLEVBSWpELGFBQWMsSUFBSSxPQUFRLElBQU01QixFQUMvQixtREFBcURBLEVBQ3JELG1CQUFxQkEsRUFBYSxtQkFBb0IsR0FBSyxDQUM1RCxFQUVEdUMsR0FBVSxzQ0FDVkMsR0FBVSxTQUdWQyxHQUFhLG1DQUViQyxHQUFXLE9BSVhDLEdBQVksSUFBSSxPQUFRLHVCQUF5QjNDLEVBQ2hELHVCQUF3QixHQUFLLEVBQzlCNEMsR0FBWSxTQUFVQyxFQUFRQyxFQUFTLENBQ3RDLElBQUlDLEVBQU8sS0FBT0YsRUFBTyxNQUFPLENBQUcsRUFBRyxNQUV0QyxPQUFLQyxJQVVFQyxFQUFPLEVBQ2IsT0FBTyxhQUFjQSxFQUFPLEtBQVMsRUFDckMsT0FBTyxhQUFjQSxHQUFRLEdBQUssTUFBUUEsRUFBTyxLQUFRLE9BQzFELEVBTURDLEdBQWdCLFVBQVcsQ0FDMUJDLElBQ0EsRUFFREMsR0FBcUJDLEdBQ3BCLFNBQVV0RixFQUFPLENBQ2hCLE9BQU9BLEVBQUssV0FBYSxJQUFRK0IsRUFBVS9CLEVBQU0sV0FDakQsRUFDRCxDQUFFLElBQUssYUFBYyxLQUFNLFFBQVUsQ0FDdkMsRUFLQSxTQUFTdUYsSUFBb0IsQ0FDNUIsR0FBSSxDQUNILE9BQU8xRyxFQUFTLGFBQ2xCLE1BQWlCLENBQUcsQ0FDbkIsQ0FHRCxHQUFJLENBQ0hYLEVBQUssTUFDRkwsRUFBTUUsRUFBTSxLQUFNOEUsR0FBYSxVQUFZLEVBQzdDQSxHQUFhLFVBQ2YsRUFLQ2hGLEVBQUtnRixHQUFhLFdBQVcsTUFBTSxFQUFHLFFBQ3RDLE1BQWEsQ0FDYjNFLEVBQU8sQ0FDTixNQUFPLFNBQVV3QyxFQUFROEUsRUFBTSxDQUM5QjFDLEdBQVcsTUFBT3BDLEVBQVEzQyxFQUFNLEtBQU15SCxDQUFHLEVBQ3pDLEVBQ0QsS0FBTSxTQUFVOUUsRUFBUyxDQUN4Qm9DLEdBQVcsTUFBT3BDLEVBQVEzQyxFQUFNLEtBQU0sVUFBVyxDQUFDLEVBQ2xELENBQ0gsQ0FDQyxDQUVELFNBQVMwSCxHQUFNL0YsRUFBVUMsRUFBU3VCLEVBQVN3RSxFQUFPLENBQ2pELElBQUlDLEVBQUd4RyxFQUFHYSxFQUFNNEYsR0FBS0MsRUFBT0MsR0FBUUMsR0FDbkNDLEdBQWFyRyxHQUFXQSxFQUFRLGNBR2hDc0IsR0FBV3RCLEVBQVVBLEVBQVEsU0FBVyxFQUt6QyxHQUhBdUIsRUFBVUEsR0FBVyxHQUdoQixPQUFPeEIsR0FBYSxVQUFZLENBQUNBLEdBQ3JDdUIsS0FBYSxHQUFLQSxLQUFhLEdBQUtBLEtBQWEsR0FFakQsT0FBT0MsRUFJUixHQUFLLENBQUN3RSxJQUNMTixHQUFhekYsQ0FBTyxFQUNwQkEsRUFBVUEsR0FBV2QsRUFFaEJ1RSxHQUFpQixDQUlyQixHQUFLbkMsS0FBYSxLQUFRNEUsRUFBUWpCLEdBQVcsS0FBTWxGLENBQVEsR0FHMUQsR0FBT2lHLEVBQUlFLEVBQU8sSUFHakIsR0FBSzVFLEtBQWEsRUFDakIsR0FBT2pCLEVBQU9MLEVBQVEsZUFBZ0JnRyxDQUFDLEdBSXRDLEdBQUszRixFQUFLLEtBQU8yRixFQUNoQixPQUFBekgsRUFBSyxLQUFNZ0QsRUFBU2xCLEdBQ2JrQixNQUdSLFFBQU9BLFVBUUg4RSxLQUFnQmhHLEVBQU9nRyxHQUFXLGVBQWdCTCxDQUFDLElBQ3ZERixHQUFLLFNBQVU5RixFQUFTSyxDQUFNLEdBQzlCQSxFQUFLLEtBQU8yRixFQUVaLE9BQUF6SCxFQUFLLEtBQU1nRCxFQUFTbEIsR0FDYmtCLE1BS0gsSUFBSzJFLEVBQU8sR0FDbEIsT0FBQTNILEVBQUssTUFBT2dELEVBQVN2QixFQUFRLHFCQUFzQkQsQ0FBUSxHQUNwRHdCLEVBR0QsSUFBT3lFLEVBQUlFLEVBQU8sQ0FBRyxJQUFNbEcsRUFBUSx1QkFDekMsT0FBQXpCLEVBQUssTUFBT2dELEVBQVN2QixFQUFRLHVCQUF3QmdHLENBQUMsR0FDL0N6RSxFQUtULEdBQUssQ0FBQzJDLEdBQXdCbkUsRUFBVyxHQUFLLElBQzNDLENBQUMyRCxHQUFhLENBQUNBLEVBQVUsS0FBTTNELENBQVUsR0FBSyxDQVloRCxHQVZBcUcsR0FBY3JHLEVBQ2RzRyxHQUFhckcsRUFTUnNCLEtBQWEsSUFDZnFELEdBQVMsS0FBTTVFLENBQVUsR0FBSTJFLEdBQW1CLEtBQU0zRSxDQUFRLEdBQU8sQ0F5QnZFLElBdEJBc0csR0FBYW5CLEdBQVMsS0FBTW5GLENBQVUsR0FBSXVHLEdBQWF0RyxFQUFRLFVBQVksR0FDMUVBLEdBUUlxRyxJQUFjckcsR0FBVyxDQUFDbEIsRUFBUSxVQUcvQm1ILEdBQU1qRyxFQUFRLGFBQWMsSUFBSSxHQUN0Q2lHLEdBQU1uRyxFQUFPLGVBQWdCbUcsSUFFN0JqRyxFQUFRLGFBQWMsS0FBUWlHLEdBQU10QyxDQUFPLEdBSzdDd0MsR0FBU0ksR0FBVXhHLEdBQ25CUCxFQUFJMkcsR0FBTyxPQUNIM0csS0FDUDJHLEdBQVEzRyxDQUFDLEdBQU95RyxHQUFNLElBQU1BLEdBQU0sVUFBYSxJQUM5Q08sR0FBWUwsR0FBUTNHLENBQUMsR0FFdkI0RyxHQUFjRCxHQUFPLEtBQU0sSUFDM0IsQ0FFRCxHQUFJLENBQ0gsT0FBQTVILEVBQUssTUFBT2dELEVBQ1g4RSxHQUFXLGlCQUFrQkQsRUFBYSxDQUNoRCxFQUNZN0UsQ0FDUCxNQUFvQixDQUNwQjJDLEdBQXdCbkUsRUFBVSxHQUN2QyxRQUFjLENBQ0prRyxLQUFRdEMsR0FDWjNELEVBQVEsZ0JBQWlCLEtBRTFCLENBQ0QsQ0FDRCxDQUlGLE9BQU95RyxHQUFRMUcsRUFBUyxRQUFTMEMsR0FBVSxJQUFJLEVBQUl6QyxFQUFTdUIsRUFBU3dFLEVBQ3JFLENBUUQsU0FBU2hDLElBQWMsQ0FDdEIsSUFBSTJDLEVBQU8sQ0FBQSxFQUVYLFNBQVNDLEVBQU9DLEVBQUszRSxFQUFRLENBSTVCLE9BQUt5RSxFQUFLLEtBQU1FLEVBQU0sR0FBSyxFQUFHeEQsRUFBSyxhQUdsQyxPQUFPdUQsRUFBT0QsRUFBSyxNQUFLLEdBRWhCQyxFQUFPQyxFQUFNLEdBQUcsRUFBSzNFLENBQzlCLENBQ0QsT0FBTzBFLENBQ1AsQ0FNRCxTQUFTRSxHQUFjQyxFQUFLLENBQzNCLE9BQUFBLEVBQUluRCxDQUFTLEVBQUcsR0FDVG1ELENBQ1AsQ0FNRCxTQUFTQyxHQUFRRCxFQUFLLENBQ3JCLElBQUlFLEVBQUs5SCxFQUFTLGNBQWUsVUFBVSxFQUUzQyxHQUFJLENBQ0gsTUFBTyxDQUFDLENBQUM0SCxFQUFJRSxFQUNiLE1BQWEsQ0FDYixNQUFPLEVBQ1QsUUFBVyxDQUdKQSxFQUFHLFlBQ1BBLEVBQUcsV0FBVyxZQUFhQSxHQUk1QkEsRUFBSyxJQUNMLENBQ0QsQ0FNRCxTQUFTQyxHQUFtQjlFLEVBQU8sQ0FDbEMsT0FBTyxTQUFVOUIsRUFBTyxDQUN2QixPQUFPK0IsRUFBVS9CLEVBQU0sT0FBUyxHQUFJQSxFQUFLLE9BQVM4QixDQUNwRCxDQUNDLENBTUQsU0FBUytFLEdBQW9CL0UsRUFBTyxDQUNuQyxPQUFPLFNBQVU5QixFQUFPLENBQ3ZCLE9BQVMrQixFQUFVL0IsRUFBTSxPQUFTLEdBQUkrQixFQUFVL0IsRUFBTSxRQUFVLElBQy9EQSxFQUFLLE9BQVM4QixDQUNqQixDQUNDLENBTUQsU0FBU2dGLEdBQXNCQyxFQUFXLENBR3pDLE9BQU8sU0FBVS9HLEVBQU8sQ0FLdkIsTUFBSyxTQUFVQSxFQVNUQSxFQUFLLFlBQWNBLEVBQUssV0FBYSxHQUdwQyxVQUFXQSxFQUNWLFVBQVdBLEVBQUssV0FDYkEsRUFBSyxXQUFXLFdBQWErRyxFQUU3Qi9HLEVBQUssV0FBYStHLEVBTXBCL0csRUFBSyxhQUFlK0csR0FHMUIvRyxFQUFLLGFBQWUsQ0FBQytHLEdBQ3BCMUIsR0FBb0JyRixDQUFNLElBQUsrRyxFQUczQi9HLEVBQUssV0FBYStHLEVBS2QsVUFBVy9HLEVBQ2ZBLEVBQUssV0FBYStHLEVBSW5CLEVBQ1QsQ0FDQyxDQU1ELFNBQVNDLEdBQXdCUCxFQUFLLENBQ3JDLE9BQU9ELEdBQWMsU0FBVVMsRUFBVyxDQUN6QyxPQUFBQSxFQUFXLENBQUNBLEVBQ0xULEdBQWMsU0FBVWQsRUFBTWpFLEVBQVUsQ0FNOUMsUUFMSXRCLEVBQ0grRyxFQUFlVCxFQUFJLENBQUEsRUFBSWYsRUFBSyxPQUFRdUIsQ0FBVSxFQUM5QzlILEVBQUkrSCxFQUFhLE9BR1YvSCxLQUNGdUcsRUFBUXZGLEVBQUkrRyxFQUFjL0gsQ0FBRyxDQUFBLElBQ2pDdUcsRUFBTXZGLENBQUcsRUFBRyxFQUFHc0IsRUFBU3RCLENBQUMsRUFBS3VGLEVBQU12RixDQUFDLEdBRzFDLEVBQ0EsRUFDQyxDQU9ELFNBQVM4RixHQUFhdEcsRUFBVSxDQUMvQixPQUFPQSxHQUFXLE9BQU9BLEVBQVEscUJBQXlCLEtBQWVBLENBQ3pFLENBT0QsU0FBU3lGLEdBQWFuRyxFQUFPLENBQzVCLElBQUlrSSxFQUNIakksRUFBTUQsRUFBT0EsRUFBSyxlQUFpQkEsRUFBTzRELEdBTzNDLE9BQUszRCxHQUFPTCxHQUFZSyxFQUFJLFdBQWEsR0FBSyxDQUFDQSxFQUFJLGtCQUtuREwsRUFBV0ssRUFDWGlFLEVBQWtCdEUsRUFBUyxnQkFDM0J1RSxFQUFpQixDQUFDM0QsRUFBTyxTQUFVWixDQUFRLEVBSTNDNEMsRUFBVTBCLEVBQWdCLFNBQ3pCQSxFQUFnQix1QkFDaEJBLEVBQWdCLGtCQU9aQSxFQUFnQixtQkFNcEJOLElBQWdCaEUsSUFDZHNJLEVBQVl0SSxFQUFTLGNBQWlCc0ksRUFBVSxNQUFRQSxHQUcxREEsRUFBVSxpQkFBa0IsU0FBVWhDLElBT3ZDMUcsRUFBUSxRQUFVaUksR0FBUSxTQUFVQyxFQUFLLENBQ3hDLE9BQUF4RCxFQUFnQixZQUFhd0QsQ0FBRSxFQUFHLEdBQUtsSCxFQUFPLFFBQ3ZDLENBQUNaLEVBQVMsbUJBQ2hCLENBQUNBLEVBQVMsa0JBQW1CWSxFQUFPLE9BQU8sRUFBRyxNQUNqRCxHQUtDaEIsRUFBUSxrQkFBb0JpSSxHQUFRLFNBQVVDLEVBQUssQ0FDbEQsT0FBT2xGLEVBQVEsS0FBTWtGLEVBQUksR0FBRyxDQUM5QixHQUlDbEksRUFBUSxNQUFRaUksR0FBUSxVQUFXLENBQ2xDLE9BQU83SCxFQUFTLGlCQUFrQixTQUNwQyxHQVdDSixFQUFRLE9BQVNpSSxHQUFRLFVBQVcsQ0FDbkMsR0FBSSxDQUNILE9BQUE3SCxFQUFTLGNBQWUsbUJBQ2pCLEVBQ1AsTUFBYSxDQUNiLE1BQU8sRUFDUCxDQUNILEdBR01KLEVBQVEsU0FDWnNFLEVBQUssT0FBTyxHQUFLLFNBQVVxRSxFQUFLLENBQy9CLElBQUlDLEVBQVNELEVBQUcsUUFBU3RDLEdBQVdDLEVBQVMsRUFDN0MsT0FBTyxTQUFVL0UsRUFBTyxDQUN2QixPQUFPQSxFQUFLLGFBQWMsSUFBSSxJQUFPcUgsQ0FDekMsQ0FDQSxFQUNFdEUsRUFBSyxLQUFLLEdBQUssU0FBVXFFLEVBQUl6SCxFQUFVLENBQ3RDLEdBQUssT0FBT0EsRUFBUSxlQUFtQixLQUFleUQsRUFBaUIsQ0FDdEUsSUFBSXBELEVBQU9MLEVBQVEsZUFBZ0J5SCxDQUFFLEVBQ3JDLE9BQU9wSCxFQUFPLENBQUVBLENBQU0sRUFBRyxFQUN6QixDQUNKLElBRUUrQyxFQUFLLE9BQU8sR0FBTSxTQUFVcUUsRUFBSyxDQUNoQyxJQUFJQyxFQUFTRCxFQUFHLFFBQVN0QyxHQUFXQyxFQUFTLEVBQzdDLE9BQU8sU0FBVS9FLEVBQU8sQ0FDdkIsSUFBSWYsRUFBTyxPQUFPZSxFQUFLLGlCQUFxQixLQUMzQ0EsRUFBSyxpQkFBa0IsTUFDeEIsT0FBT2YsR0FBUUEsRUFBSyxRQUFVb0ksQ0FDbEMsQ0FDQSxFQUlFdEUsRUFBSyxLQUFLLEdBQUssU0FBVXFFLEVBQUl6SCxFQUFVLENBQ3RDLEdBQUssT0FBT0EsRUFBUSxlQUFtQixLQUFleUQsRUFBaUIsQ0FDdEUsSUFBSW5FLEVBQU1FLEVBQUdVLEdBQ1pHLEVBQU9MLEVBQVEsZUFBZ0J5SCxHQUVoQyxHQUFLcEgsRUFBTyxDQUlYLEdBREFmLEVBQU9lLEVBQUssaUJBQWtCLE1BQ3pCZixHQUFRQSxFQUFLLFFBQVVtSSxFQUMzQixNQUFPLENBQUVwSCxDQUFJLEVBTWQsSUFGQUgsR0FBUUYsRUFBUSxrQkFBbUJ5SCxHQUNuQ2pJLEVBQUksRUFDTWEsRUFBT0gsR0FBT1YsTUFFdkIsR0FEQUYsRUFBT2UsRUFBSyxpQkFBa0IsTUFDekJmLEdBQVFBLEVBQUssUUFBVW1JLEVBQzNCLE1BQU8sQ0FBRXBILENBQUksQ0FHZixDQUVELE1BQU8sRUFDUCxDQUNKLEdBSUMrQyxFQUFLLEtBQUssSUFBTSxTQUFVdUUsRUFBSzNILEVBQVUsQ0FDeEMsT0FBSyxPQUFPQSxFQUFRLHFCQUF5QixJQUNyQ0EsRUFBUSxxQkFBc0IySCxHQUk5QjNILEVBQVEsaUJBQWtCMkgsRUFFcEMsRUFHQ3ZFLEVBQUssS0FBSyxNQUFRLFNBQVV3RSxFQUFXNUgsRUFBVSxDQUNoRCxHQUFLLE9BQU9BLEVBQVEsdUJBQTJCLEtBQWV5RCxFQUM3RCxPQUFPekQsRUFBUSx1QkFBd0I0SCxFQUUxQyxFQU9DbEUsRUFBWSxDQUFBLEVBSVpxRCxHQUFRLFNBQVVDLEVBQUssQ0FFdEIsSUFBSWEsRUFFSnJFLEVBQWdCLFlBQWF3RCxDQUFFLEVBQUcsVUFDakMsVUFBWXJELEVBQVUsaURBQ0xBLEVBQVUsb0VBS3RCcUQsRUFBRyxpQkFBa0IsWUFBWSxFQUFHLFFBQ3pDdEQsRUFBVSxLQUFNLE1BQVFsQixFQUFhLGFBQWU0QixHQUFXLEtBSTFENEMsRUFBRyxpQkFBa0IsUUFBVXJELEVBQVUsSUFBTSxFQUFDLFFBQ3JERCxFQUFVLEtBQU0sTUFNWHNELEVBQUcsaUJBQWtCLEtBQU9yRCxFQUFVLElBQU0sRUFBQyxRQUNsREQsRUFBVSxLQUFNLFlBT1hzRCxFQUFHLGlCQUFrQixVQUFVLEVBQUcsUUFDdkN0RCxFQUFVLEtBQU0sWUFLakJtRSxFQUFRM0ksRUFBUyxjQUFlLFNBQ2hDMkksRUFBTSxhQUFjLE9BQVEsVUFDNUJiLEVBQUcsWUFBYWEsQ0FBSyxFQUFHLGFBQWMsT0FBUSxLQVE5Q3JFLEVBQWdCLFlBQWF3RCxHQUFLLFNBQVcsR0FDeENBLEVBQUcsaUJBQWtCLFdBQVcsRUFBRyxTQUFXLEdBQ2xEdEQsRUFBVSxLQUFNLFdBQVksYUFRN0JtRSxFQUFRM0ksRUFBUyxjQUFlLFNBQ2hDMkksRUFBTSxhQUFjLE9BQVEsSUFDNUJiLEVBQUcsWUFBYWEsR0FDVmIsRUFBRyxpQkFBa0IsV0FBVyxFQUFHLFFBQ3hDdEQsRUFBVSxLQUFNLE1BQVFsQixFQUFhLFFBQVVBLEVBQWEsS0FDM0RBLEVBQWEsWUFBYyxDQUUvQixHQUVPMUQsRUFBUSxRQVFiNEUsRUFBVSxLQUFNLFFBR2pCQSxFQUFZQSxFQUFVLFFBQVUsSUFBSSxPQUFRQSxFQUFVLEtBQU0sR0FBRyxHQU0vRFMsR0FBWSxTQUFVekIsRUFBR0MsRUFBSSxDQUc1QixHQUFLRCxJQUFNQyxFQUNWLE9BQUFZLEVBQWUsR0FDUixFQUlSLElBQUl1RSxFQUFVLENBQUNwRixFQUFFLHdCQUEwQixDQUFDQyxFQUFFLHdCQUM5QyxPQUFLbUYsSUFTTEEsR0FBWXBGLEVBQUUsZUFBaUJBLEtBQVNDLEVBQUUsZUFBaUJBLEdBQzFERCxFQUFFLHdCQUF5QkMsQ0FBRyxFQUc5QixFQUdJbUYsRUFBVSxHQUNaLENBQUNoSixFQUFRLGNBQWdCNkQsRUFBRSx3QkFBeUJELENBQUMsSUFBT29GLEVBT3pEcEYsSUFBTXhELEdBQVl3RCxFQUFFLGVBQWlCUSxJQUN6QzRDLEdBQUssU0FBVTVDLEdBQWNSLEdBQ3RCLEdBT0hDLElBQU16RCxHQUFZeUQsRUFBRSxlQUFpQk8sSUFDekM0QyxHQUFLLFNBQVU1QyxHQUFjUCxHQUN0QixFQUlEVyxFQUNKOUUsRUFBUSxLQUFNOEUsRUFBV1osQ0FBQyxFQUFLbEUsRUFBUSxLQUFNOEUsRUFBV1gsQ0FBRyxFQUM3RCxFQUdLbUYsRUFBVSxFQUFJLEdBQUssRUFDNUIsR0FFUTVJLENBQ1AsQ0FFRDRHLEdBQUssUUFBVSxTQUFVaUMsRUFBTUMsRUFBVyxDQUN6QyxPQUFPbEMsR0FBTWlDLEVBQU0sS0FBTSxLQUFNQyxDQUFRLENBQ3hDLEVBRUFsQyxHQUFLLGdCQUFrQixTQUFVekYsRUFBTTBILEVBQU8sQ0FHN0MsR0FGQXRDLEdBQWFwRixDQUFJLEVBRVpvRCxHQUNKLENBQUNTLEdBQXdCNkQsRUFBTyxHQUFLLElBQ25DLENBQUNyRSxHQUFhLENBQUNBLEVBQVUsS0FBTXFFLENBQU0sR0FFdkMsR0FBSSxDQUNILElBQUk1SCxFQUFNMkIsRUFBUSxLQUFNekIsRUFBTTBILENBQUksRUFHbEMsR0FBSzVILEdBQU9yQixFQUFRLG1CQUlsQnVCLEVBQUssVUFBWUEsRUFBSyxTQUFTLFdBQWEsR0FDN0MsT0FBT0YsQ0FFUixNQUFhLENBQ2IrRCxHQUF3QjZELEVBQU0sR0FDOUIsQ0FHRixPQUFPakMsR0FBTWlDLEVBQU03SSxFQUFVLEtBQU0sQ0FBRW1CLENBQU0sQ0FBQSxFQUFHLE9BQVMsQ0FDeEQsRUFFQXlGLEdBQUssU0FBVyxTQUFVOUYsRUFBU0ssRUFBTyxDQU96QyxPQUFPTCxFQUFRLGVBQWlCQSxJQUFhZCxHQUM1Q3VHLEdBQWF6RixDQUFPLEVBRWRGLEVBQU8sU0FBVUUsRUFBU0ssQ0FBSSxDQUN0QyxFQUdBeUYsR0FBSyxLQUFPLFNBQVV6RixFQUFNSyxFQUFPLEVBTzNCTCxFQUFLLGVBQWlCQSxJQUFVbkIsR0FDdEN1RyxHQUFhcEYsQ0FBSSxFQUdsQixJQUFJeUcsRUFBSzFELEVBQUssV0FBWTFDLEVBQUssWUFBVyxDQUFJLEVBRzdDakIsRUFBTXFILEdBQU1uSSxFQUFPLEtBQU15RSxFQUFLLFdBQVkxQyxFQUFLLGFBQWUsRUFDN0RvRyxFQUFJekcsRUFBTUssRUFBTSxDQUFDK0MsQ0FBZ0IsRUFDakMsT0FFRixPQUFLaEUsSUFBUSxPQUNMQSxFQUdEWSxFQUFLLGFBQWNLLEVBQzNCLEVBRUFvRixHQUFLLE1BQVEsU0FBVTVFLEVBQU0sQ0FDNUIsTUFBTSxJQUFJLE1BQU8sMENBQTRDQSxFQUM5RCxFQU1BcEIsRUFBTyxXQUFhLFNBQVV5QixFQUFVLENBQ3ZDLElBQUlsQixFQUNINEgsRUFBYSxDQUFFLEVBQ2Z6SCxFQUFJLEVBQ0poQixFQUFJLEVBV0wsR0FKQStELEVBQWUsQ0FBQ3pFLEVBQVEsV0FDeEJ3RSxFQUFZLENBQUN4RSxFQUFRLFlBQWNWLEVBQU0sS0FBTW1ELEVBQVMsR0FDeERlLEVBQUssS0FBTWYsRUFBUzRDLElBRWZaLEVBQWUsQ0FDbkIsS0FBVWxELEVBQU9rQixFQUFTL0IsTUFDcEJhLElBQVNrQixFQUFTL0IsS0FDdEJnQixFQUFJeUgsRUFBVyxLQUFNekksSUFHdkIsS0FBUWdCLEtBQ1ArQixFQUFPLEtBQU1oQixFQUFTMEcsRUFBWXpILENBQUMsRUFBSSxFQUV4QyxDQUlELE9BQUE4QyxFQUFZLEtBRUwvQixDQUNSLEVBRUF6QixFQUFPLEdBQUcsV0FBYSxVQUFXLENBQ2pDLE9BQU8sS0FBSyxVQUFXQSxFQUFPLFdBQVkxQixFQUFNLE1BQU8sSUFBTSxDQUFBLEVBQzlELEVBRUFnRixFQUFPdEQsRUFBTyxLQUFPLENBR3BCLFlBQWEsR0FFYixhQUFjK0csR0FFZCxNQUFPL0IsR0FFUCxXQUFZLENBQUUsRUFFZCxLQUFNLENBQUUsRUFFUixTQUFVLENBQ1QsSUFBSyxDQUFFLElBQUssYUFBYyxNQUFPLEVBQU0sRUFDdkMsSUFBSyxDQUFFLElBQUssWUFBYyxFQUMxQixJQUFLLENBQUUsSUFBSyxrQkFBbUIsTUFBTyxFQUFNLEVBQzVDLElBQUssQ0FBRSxJQUFLLGlCQUFtQixDQUMvQixFQUVELFVBQVcsQ0FDVixLQUFNLFNBQVVvQixFQUFRLENBQ3ZCLE9BQUFBLEVBQU8sQ0FBRyxFQUFHQSxFQUFPLENBQUcsRUFBQyxRQUFTZixHQUFXQyxJQUc1Q2MsRUFBTyxDQUFDLEdBQU9BLEVBQU8sQ0FBQyxHQUFNQSxFQUFPLENBQUcsR0FBSUEsRUFBTyxDQUFHLEdBQUksSUFDdkQsUUFBU2YsR0FBV0MsSUFFakJjLEVBQU8sQ0FBRyxJQUFLLE9BQ25CQSxFQUFPLENBQUMsRUFBSyxJQUFNQSxFQUFPLENBQUcsRUFBRyxLQUcxQkEsRUFBTSxNQUFPLEVBQUcsQ0FBQyxDQUN4QixFQUVELE1BQU8sU0FBVUEsRUFBUSxDQVl4QixPQUFBQSxFQUFPLENBQUMsRUFBS0EsRUFBTyxDQUFHLEVBQUMsWUFBVyxFQUU5QkEsRUFBTyxHQUFJLE1BQU8sRUFBRyxDQUFHLElBQUssT0FHM0JBLEVBQU8sSUFDWkosR0FBSyxNQUFPSSxFQUFPLENBQUcsQ0FBQSxFQUt2QkEsRUFBTyxDQUFDLEVBQUssRUFBR0EsRUFBTyxDQUFHLEVBQ3pCQSxFQUFPLENBQUcsR0FBS0EsRUFBTyxDQUFDLEdBQU0sR0FDN0IsR0FBTUEsRUFBTyxDQUFHLElBQUssUUFBVUEsRUFBTyxDQUFHLElBQUssUUFFL0NBLEVBQU8sQ0FBRyxFQUFHLEVBQUtBLEVBQU8sQ0FBRyxFQUFHQSxFQUFPLENBQUcsR0FBTUEsRUFBTyxDQUFHLElBQUssUUFHbkRBLEVBQU8sSUFDbEJKLEdBQUssTUFBT0ksRUFBTyxDQUFHLENBQUEsRUFHaEJBLENBQ1AsRUFFRCxPQUFRLFNBQVVBLEVBQVEsQ0FDekIsSUFBSWdDLEVBQ0hDLEVBQVcsQ0FBQ2pDLEVBQU8sQ0FBRyxHQUFJQSxFQUFPLENBQUMsRUFFbkMsT0FBS3BCLEdBQVUsTUFBTSxLQUFNb0IsRUFBTyxDQUFHLENBQUEsRUFDN0IsTUFJSEEsRUFBTyxHQUNYQSxFQUFPLENBQUcsRUFBR0EsRUFBTyxDQUFHLEdBQUlBLEVBQU8sQ0FBRyxHQUFJLEdBRzlCaUMsR0FBWXZELEdBQVEsS0FBTXVELENBQVUsSUFHN0NELEVBQVMzQixHQUFVNEIsRUFBVSxPQUc3QkQsRUFBU0MsRUFBUyxRQUFTLElBQUtBLEVBQVMsT0FBU0QsQ0FBUSxFQUFHQyxFQUFTLFVBR3hFakMsRUFBTyxDQUFHLEVBQUdBLEVBQU8sQ0FBRyxFQUFDLE1BQU8sRUFBR2dDLEdBQ2xDaEMsRUFBTyxDQUFDLEVBQUtpQyxFQUFTLE1BQU8sRUFBR0QsSUFJMUJoQyxFQUFNLE1BQU8sRUFBRyxDQUFDLEVBQ3hCLENBQ0QsRUFFRCxPQUFRLENBRVAsSUFBSyxTQUFVa0MsRUFBbUIsQ0FDakMsSUFBSUMsRUFBbUJELEVBQWlCLFFBQVNqRCxHQUFXQyxFQUFTLEVBQUcsY0FDeEUsT0FBT2dELElBQXFCLElBQzNCLFVBQVcsQ0FDVixNQUFPLEVBQ1AsRUFDRCxTQUFVL0gsRUFBTyxDQUNoQixPQUFPK0IsRUFBVS9CLEVBQU1nSSxFQUM1QixDQUNHLEVBRUQsTUFBTyxTQUFVVCxFQUFZLENBQzVCLElBQUlVLEVBQVV4RSxHQUFZOEQsRUFBWSxHQUFHLEVBRXpDLE9BQU9VLElBQ0pBLEVBQVUsSUFBSSxPQUFRLE1BQVE5RixFQUFhLElBQU1vRixFQUNsRCxJQUFNcEYsRUFBYSxLQUFPLElBQzNCc0IsR0FBWThELEVBQVcsU0FBVXZILEVBQU8sQ0FDdkMsT0FBT2lJLEVBQVEsS0FDZCxPQUFPakksRUFBSyxXQUFjLFVBQVlBLEVBQUssV0FDMUMsT0FBT0EsRUFBSyxhQUFpQixLQUM1QkEsRUFBSyxhQUFjLE9BQVMsR0FDN0IsRUFDUCxDQUNBLEVBQ0csRUFFRCxLQUFNLFNBQVVLLEVBQU02SCxFQUFVQyxFQUFRLENBQ3ZDLE9BQU8sU0FBVW5JLEVBQU8sQ0FDdkIsSUFBSW9JLEVBQVMzQyxHQUFLLEtBQU16RixFQUFNSyxDQUFJLEVBRWxDLE9BQUsrSCxHQUFVLEtBQ1BGLElBQWEsS0FFZkEsR0FJTkUsR0FBVSxHQUVMRixJQUFhLElBQ1ZFLElBQVdELEVBRWRELElBQWEsS0FDVkUsSUFBV0QsRUFFZEQsSUFBYSxLQUNWQyxHQUFTQyxFQUFPLFFBQVNELENBQUssSUFBTyxFQUV4Q0QsSUFBYSxLQUNWQyxHQUFTQyxFQUFPLFFBQVNELENBQU8sRUFBRyxHQUV0Q0QsSUFBYSxLQUNWQyxHQUFTQyxFQUFPLE1BQU8sQ0FBQ0QsRUFBTSxNQUFRLElBQUtBLEVBRTlDRCxJQUFhLE1BQ1IsSUFBTUUsRUFBTyxRQUFTakUsR0FBYSxHQUFHLEVBQUssS0FDbEQsUUFBU2dFLEdBQVUsR0FFakJELElBQWEsS0FDVkUsSUFBV0QsR0FBU0MsRUFBTyxNQUFPLEVBQUdELEVBQU0sT0FBUyxLQUFRQSxFQUFRLElBR3JFLElBNUJDLEVBNkJaLENBQ0csRUFFRCxNQUFPLFNBQVVyRyxFQUFNdUcsRUFBTUMsRUFBV2pILEVBQU9rSCxFQUFPLENBQ3JELElBQUlDLEVBQVMxRyxFQUFLLE1BQU8sRUFBRyxDQUFHLElBQUssTUFDbkMyRyxFQUFVM0csRUFBSyxNQUFPLEVBQUksSUFBSyxPQUMvQjRHLEdBQVNMLElBQVMsVUFFbkIsT0FBT2hILElBQVUsR0FBS2tILElBQVMsRUFHOUIsU0FBVXZJLEVBQU8sQ0FDaEIsTUFBTyxDQUFDLENBQUNBLEVBQUssVUFDZCxFQUVELFNBQVVBLEVBQU0ySSxHQUFVQyxHQUFNLENBQy9CLElBQUl0QyxHQUFPdUMsR0FBWTVKLEdBQU02SixHQUFXQyxHQUN2Q0MsR0FBTVIsSUFBV0MsRUFBVSxjQUFnQixrQkFDM0NRLEdBQVNqSixFQUFLLFdBQ2RLLEdBQU9xSSxJQUFVMUksRUFBSyxTQUFTLFlBQWEsRUFDNUNrSixHQUFXLENBQUNOLElBQU8sQ0FBQ0YsR0FDcEJTLEdBQU8sR0FFUixHQUFLRixHQUFTLENBR2IsR0FBS1QsRUFBUyxDQUNiLEtBQVFRLElBQU0sQ0FFYixJQURBL0osR0FBT2UsRUFDR2YsR0FBT0EsR0FBTStKLEtBQ3RCLEdBQUtOLEdBQ0ozRyxFQUFVOUMsR0FBTW9CLEVBQU0sRUFDdEJwQixHQUFLLFdBQWEsRUFFbEIsTUFBTyxHQUtUOEosR0FBUUMsR0FBTWxILElBQVMsUUFBVSxDQUFDaUgsSUFBUyxhQUMzQyxDQUNELE1BQU8sRUFDUCxDQUtELEdBSEFBLEdBQVEsQ0FBRU4sRUFBVVEsR0FBTyxXQUFhQSxHQUFPLFdBRzFDUixHQUFXUyxJQVNmLElBTkFMLEdBQWFJLEdBQVEzRixDQUFTLElBQU0yRixHQUFRM0YsQ0FBTyxFQUFLLENBQUEsR0FDeERnRCxHQUFRdUMsR0FBWS9HLENBQU0sR0FBSSxHQUM5QmdILEdBQVl4QyxHQUFPLENBQUMsSUFBTy9DLEdBQVcrQyxHQUFPLEdBQzdDNkMsR0FBT0wsSUFBYXhDLEdBQU8sR0FDM0JySCxHQUFPNkosSUFBYUcsR0FBTyxXQUFZSCxFQUFTLEVBRXRDN0osR0FBTyxFQUFFNkosSUFBYTdKLElBQVFBLEdBQU0rSixFQUFLLElBR2hERyxHQUFPTCxHQUFZLElBQU9DLEdBQU0sSUFBRyxHQUdyQyxHQUFLOUosR0FBSyxXQUFhLEdBQUssRUFBRWtLLElBQVFsSyxLQUFTZSxFQUFPLENBQ3JENkksR0FBWS9HLENBQUksRUFBSyxDQUFFeUIsRUFBU3VGLEdBQVdLLEVBQUksRUFDL0MsS0FDQSxVQU1HRCxLQUNKTCxHQUFhN0ksRUFBTXNELENBQVMsSUFBTXRELEVBQU1zRCxDQUFPLEVBQUssQ0FBQSxHQUNwRGdELEdBQVF1QyxHQUFZL0csQ0FBTSxHQUFJLEdBQzlCZ0gsR0FBWXhDLEdBQU8sQ0FBQyxJQUFPL0MsR0FBVytDLEdBQU8sR0FDN0M2QyxHQUFPTCxJQUtISyxLQUFTLEdBR2IsTUFBVWxLLEdBQU8sRUFBRTZKLElBQWE3SixJQUFRQSxHQUFNK0osRUFBSyxJQUNoREcsR0FBT0wsR0FBWSxJQUFPQyxHQUFNLElBQUcsSUFFOUIsR0FBQUwsR0FDTjNHLEVBQVU5QyxHQUFNb0IsRUFBTSxFQUN0QnBCLEdBQUssV0FBYSxJQUNsQixFQUFFa0ssS0FHR0QsS0FDSkwsR0FBYTVKLEdBQU1xRSxDQUFTLElBQ3pCckUsR0FBTXFFLEdBQVksQ0FBQSxHQUNyQnVGLEdBQVkvRyxDQUFNLEVBQUcsQ0FBRXlCLEVBQVM0RixFQUFJLEdBR2hDbEssS0FBU2UsS0FaZixDQXFCSCxPQUFBbUosSUFBUVosRUFDRFksS0FBUzlILEdBQVc4SCxHQUFPOUgsSUFBVSxHQUFLOEgsR0FBTzlILEdBQVMsQ0FDakUsQ0FDTixDQUNHLEVBRUQsT0FBUSxTQUFVK0gsRUFBUW5DLEVBQVcsQ0FNcEMsSUFBSW9DLEVBQ0g1QyxFQUFLMUQsRUFBSyxRQUFTcUcsQ0FBTSxHQUFNckcsRUFBSyxXQUFZcUcsRUFBTyxhQUFlLEdBQ3JFM0QsR0FBSyxNQUFPLHVCQUF5QjJELEdBS3ZDLE9BQUszQyxFQUFJbkQsR0FDRG1ELEVBQUlRLEdBSVBSLEVBQUcsT0FBUyxHQUNoQjRDLEVBQU8sQ0FBRUQsRUFBUUEsRUFBUSxHQUFJbkMsQ0FBUSxFQUM5QmxFLEVBQUssV0FBVyxlQUFnQnFHLEVBQU8sWUFBVyxDQUFJLEVBQzVENUMsR0FBYyxTQUFVZCxFQUFNakUsRUFBVSxDQUl2QyxRQUhJNkgsRUFDSEMsR0FBVTlDLEVBQUlmLEVBQU11QixDQUFVLEVBQzlCOUgsRUFBSW9LLEdBQVEsT0FDTHBLLEtBQ1BtSyxFQUFNbkwsRUFBUSxLQUFNdUgsRUFBTTZELEdBQVNwSyxDQUFDLEdBQ3BDdUcsRUFBTTRELENBQUssRUFBRyxFQUFHN0gsRUFBUzZILENBQUcsRUFBS0MsR0FBU3BLLENBQUMsRUFFbkQsQ0FBUSxFQUNILFNBQVVhLEVBQU8sQ0FDaEIsT0FBT3lHLEVBQUl6RyxFQUFNLEVBQUdxSixDQUFJLENBQzlCLEdBR1U1QyxDQUNQLENBQ0QsRUFFRCxRQUFTLENBR1IsSUFBS0QsR0FBYyxTQUFVOUcsRUFBVyxDQUt2QyxJQUFJOEgsRUFBUSxDQUFFLEVBQ2J0RyxFQUFVLENBQUUsRUFDWnNJLEVBQVVDLEdBQVMvSixFQUFTLFFBQVMwQyxHQUFVLElBQUksR0FFcEQsT0FBT29ILEVBQVNsRyxDQUFTLEVBQ3hCa0QsR0FBYyxTQUFVZCxFQUFNakUsRUFBU2tILEVBQVVDLEdBQU0sQ0FNdEQsUUFMSTVJLEVBQ0gwSixHQUFZRixFQUFTOUQsRUFBTSxLQUFNa0QsR0FBSyxDQUFBLENBQUksRUFDMUN6SixHQUFJdUcsRUFBSyxPQUdGdkcsT0FDQWEsRUFBTzBKLEdBQVd2SyxPQUN4QnVHLEVBQU12RyxFQUFDLEVBQUssRUFBR3NDLEVBQVN0QyxFQUFDLEVBQUthLEdBR3JDLENBQU8sRUFDSCxTQUFVQSxFQUFNMkksRUFBVUMsRUFBTSxDQUMvQixPQUFBcEIsRUFBTyxDQUFHLEVBQUd4SCxFQUNid0osRUFBU2hDLEVBQU8sS0FBTW9CLEVBQUsxSCxDQUFPLEVBSWxDc0csRUFBTyxDQUFHLEVBQUcsS0FDTixDQUFDdEcsRUFBUSxLQUNyQixDQUNBLENBQUssRUFFSCxJQUFLc0YsR0FBYyxTQUFVOUcsRUFBVyxDQUN2QyxPQUFPLFNBQVVNLEVBQU8sQ0FDdkIsT0FBT3lGLEdBQU0vRixFQUFVTSxDQUFJLEVBQUcsT0FBUyxDQUMzQyxDQUNBLENBQUssRUFFSCxTQUFVd0csR0FBYyxTQUFVbUQsRUFBTyxDQUN4QyxPQUFBQSxFQUFPQSxFQUFLLFFBQVM3RSxHQUFXQyxFQUFTLEVBQ2xDLFNBQVUvRSxFQUFPLENBQ3ZCLE9BQVNBLEVBQUssYUFBZVAsRUFBTyxLQUFNTyxDQUFNLEdBQUcsUUFBUzJKLEdBQVMsRUFDekUsQ0FDQSxDQUFLLEVBU0gsS0FBTW5ELEdBQWMsU0FBVW9ELEVBQU8sQ0FHcEMsT0FBTXBGLEdBQVksS0FBTW9GLEdBQVEsRUFBRSxHQUNqQ25FLEdBQUssTUFBTyxxQkFBdUJtRSxHQUVwQ0EsRUFBT0EsRUFBSyxRQUFTOUUsR0FBV0MsRUFBUyxFQUFHLGNBQ3JDLFNBQVUvRSxFQUFPLENBQ3ZCLElBQUk2SixFQUNKLEVBQ0MsSUFBT0EsRUFBV3pHLEVBQ2pCcEQsRUFBSyxLQUNMQSxFQUFLLGFBQWMsVUFBVSxHQUFNQSxFQUFLLGFBQWMsUUFFdEQsT0FBQTZKLEVBQVdBLEVBQVMsY0FDYkEsSUFBYUQsR0FBUUMsRUFBUyxRQUFTRCxFQUFPLEdBQUssSUFBSyxTQUVyRDVKLEVBQU9BLEVBQUssYUFBZ0JBLEVBQUssV0FBYSxHQUMxRCxNQUFPLEVBQ1gsQ0FDQSxDQUFLLEVBR0gsT0FBUSxTQUFVQSxFQUFPLENBQ3hCLElBQUk4SixFQUFPbk0sRUFBTyxVQUFZQSxFQUFPLFNBQVMsS0FDOUMsT0FBT21NLEdBQVFBLEVBQUssTUFBTyxDQUFHLElBQUs5SixFQUFLLEVBQ3hDLEVBRUQsS0FBTSxTQUFVQSxFQUFPLENBQ3RCLE9BQU9BLElBQVNtRCxDQUNoQixFQUVELE1BQU8sU0FBVW5ELEVBQU8sQ0FDdkIsT0FBT0EsSUFBU3VGLEdBQW1CLEdBQ2xDMUcsRUFBUyxTQUFVLEdBQ25CLENBQUMsRUFBR21CLEVBQUssTUFBUUEsRUFBSyxNQUFRLENBQUNBLEVBQUssU0FDckMsRUFHRCxRQUFTOEcsR0FBc0IsRUFBTyxFQUN0QyxTQUFVQSxHQUFzQixFQUFNLEVBRXRDLFFBQVMsU0FBVTlHLEVBQU8sQ0FJekIsT0FBUytCLEVBQVUvQixFQUFNLE9BQU8sR0FBTSxDQUFDLENBQUNBLEVBQUssU0FDMUMrQixFQUFVL0IsRUFBTSxRQUFRLEdBQU0sQ0FBQyxDQUFDQSxFQUFLLFFBQ3hDLEVBRUQsU0FBVSxTQUFVQSxFQUFPLENBTTFCLE9BQUtBLEVBQUssWUFFVEEsRUFBSyxXQUFXLGNBR1ZBLEVBQUssV0FBYSxFQUN6QixFQUdELE1BQU8sU0FBVUEsRUFBTyxDQU12QixJQUFNQSxFQUFPQSxFQUFLLFdBQVlBLEVBQU1BLEVBQU9BLEVBQUssWUFDL0MsR0FBS0EsRUFBSyxTQUFXLEVBQ3BCLE1BQU8sR0FHVCxNQUFPLEVBQ1AsRUFFRCxPQUFRLFNBQVVBLEVBQU8sQ0FDeEIsTUFBTyxDQUFDK0MsRUFBSyxRQUFRLE1BQU8vQyxDQUFJLENBQ2hDLEVBR0QsT0FBUSxTQUFVQSxFQUFPLENBQ3hCLE9BQU8yRSxHQUFRLEtBQU0zRSxFQUFLLFFBQVEsQ0FDbEMsRUFFRCxNQUFPLFNBQVVBLEVBQU8sQ0FDdkIsT0FBTzBFLEdBQVEsS0FBTTFFLEVBQUssUUFBUSxDQUNsQyxFQUVELE9BQVEsU0FBVUEsRUFBTyxDQUN4QixPQUFPK0IsRUFBVS9CLEVBQU0sT0FBUyxHQUFJQSxFQUFLLE9BQVMsVUFDakQrQixFQUFVL0IsRUFBTSxTQUNqQixFQUVELEtBQU0sU0FBVUEsRUFBTyxDQUN0QixJQUFJK0osRUFDSixPQUFPaEksRUFBVS9CLEVBQU0sT0FBUyxHQUFJQSxFQUFLLE9BQVMsVUFLN0MrSixFQUFPL0osRUFBSyxhQUFjLE1BQVEsSUFBTSxNQUMzQytKLEVBQUssZ0JBQWtCLE9BQ3pCLEVBR0QsTUFBTy9DLEdBQXdCLFVBQVcsQ0FDekMsTUFBTyxDQUFFLENBQUMsQ0FDYixDQUFLLEVBRUgsS0FBTUEsR0FBd0IsU0FBVWdELEVBQWVySixFQUFTLENBQy9ELE1BQU8sQ0FBRUEsRUFBUyxFQUNyQixDQUFLLEVBRUgsR0FBSXFHLEdBQXdCLFNBQVVnRCxFQUFlckosRUFBUXNHLEVBQVcsQ0FDdkUsTUFBTyxDQUFFQSxFQUFXLEVBQUlBLEVBQVd0RyxFQUFTc0csQ0FBUSxDQUN2RCxDQUFLLEVBRUgsS0FBTUQsR0FBd0IsU0FBVUUsRUFBY3ZHLEVBQVMsQ0FFOUQsUUFESXhCLEVBQUksRUFDQUEsRUFBSXdCLEVBQVF4QixHQUFLLEVBQ3hCK0gsRUFBYSxLQUFNL0gsR0FFcEIsT0FBTytILENBQ1YsQ0FBSyxFQUVILElBQUtGLEdBQXdCLFNBQVVFLEVBQWN2RyxFQUFTLENBRTdELFFBREl4QixFQUFJLEVBQ0FBLEVBQUl3QixFQUFReEIsR0FBSyxFQUN4QitILEVBQWEsS0FBTS9ILEdBRXBCLE9BQU8rSCxDQUNWLENBQUssRUFFSCxHQUFJRixHQUF3QixTQUFVRSxFQUFjdkcsRUFBUXNHLEVBQVcsQ0FDdEUsSUFBSTlILEVBVUosSUFSSzhILEVBQVcsRUFDZjlILEVBQUk4SCxFQUFXdEcsRUFDSnNHLEVBQVd0RyxFQUN0QnhCLEVBQUl3QixFQUVKeEIsRUFBSThILEVBR0csRUFBRTlILEdBQUssR0FDZCtILEVBQWEsS0FBTS9ILEdBRXBCLE9BQU8rSCxDQUNWLENBQUssRUFFSCxHQUFJRixHQUF3QixTQUFVRSxFQUFjdkcsRUFBUXNHLEVBQVcsQ0FFdEUsUUFESTlILEVBQUk4SCxFQUFXLEVBQUlBLEVBQVd0RyxFQUFTc0csRUFDbkMsRUFBRTlILEVBQUl3QixHQUNidUcsRUFBYSxLQUFNL0gsR0FFcEIsT0FBTytILENBQ1YsQ0FBSyxDQUNILENBQ0YsRUFFQW5FLEVBQUssUUFBUSxJQUFNQSxFQUFLLFFBQVEsR0FHaEMsSUFBTTVELElBQUssQ0FBRSxNQUFPLEdBQU0sU0FBVSxHQUFNLEtBQU0sR0FBTSxTQUFVLEdBQU0sTUFBTyxFQUFJLEVBQ2hGNEQsRUFBSyxRQUFTNUQsQ0FBRyxFQUFHeUgsR0FBbUJ6SCxDQUFDLEVBRXpDLElBQU1BLElBQUssQ0FBRSxPQUFRLEdBQU0sTUFBTyxFQUFJLEVBQ3JDNEQsRUFBSyxRQUFTNUQsQ0FBRyxFQUFHMEgsR0FBb0IxSCxDQUFDLEVBSTFDLFNBQVM4SyxJQUFhLENBQUUsQ0FDeEJBLEdBQVcsVUFBWWxILEVBQUssUUFBVUEsRUFBSyxRQUMzQ0EsRUFBSyxXQUFhLElBQUlrSCxHQUV0QixTQUFTL0QsR0FBVXhHLEVBQVV3SyxFQUFZLENBQ3hDLElBQUlYLEVBQVMxRCxFQUFPc0UsRUFBUXJJLEVBQzNCc0ksRUFBT3RFLEdBQVF1RSxFQUNmQyxHQUFTM0csR0FBWWpFLEVBQVcsS0FFakMsR0FBSzRLLEdBQ0osT0FBT0osRUFBWSxFQUFJSSxHQUFPLE1BQU8sQ0FBQyxFQU92QyxJQUpBRixFQUFRMUssRUFDUm9HLEdBQVMsQ0FBQSxFQUNUdUUsRUFBYXRILEVBQUssVUFFVnFILEdBQVEsRUFHVixDQUFDYixJQUFhMUQsRUFBUXpCLEdBQU8sS0FBTWdHLENBQUssTUFDdkN2RSxJQUdKdUUsRUFBUUEsRUFBTSxNQUFPdkUsRUFBTyxHQUFJLE1BQVEsR0FBSXVFLEdBRTdDdEUsR0FBTyxLQUFRcUUsRUFBUyxDQUFBLElBR3pCWixFQUFVLElBR0gxRCxFQUFReEIsR0FBbUIsS0FBTStGLENBQUssS0FDNUNiLEVBQVUxRCxFQUFNLFFBQ2hCc0UsRUFBTyxLQUFNLENBQ1osTUFBT1osRUFHUCxLQUFNMUQsRUFBTyxDQUFDLEVBQUcsUUFBU3pELEdBQVUsR0FBSyxDQUM3QyxHQUNHZ0ksRUFBUUEsRUFBTSxNQUFPYixFQUFRLE1BQU0sR0FJcEMsSUFBTXpILEtBQVFpQixFQUFLLFFBQ1g4QyxFQUFRcEIsR0FBVzNDLENBQU0sRUFBQyxLQUFNc0ksQ0FBTyxLQUFRLENBQUNDLEVBQVl2SSxDQUFNLElBQ3RFK0QsRUFBUXdFLEVBQVl2SSxDQUFNLEVBQUUrRCxDQUFLLE1BQ25DMEQsRUFBVTFELEVBQU0sUUFDaEJzRSxFQUFPLEtBQU0sQ0FDWixNQUFPWixFQUNQLEtBQU16SCxFQUNOLFFBQVMrRCxDQUNkLEdBQ0l1RSxFQUFRQSxFQUFNLE1BQU9iLEVBQVEsTUFBTSxHQUlyQyxHQUFLLENBQUNBLEVBQ0wsS0FFRCxDQUtELE9BQUtXLEVBQ0dFLEVBQU0sT0FHUEEsRUFDTjNFLEdBQUssTUFBTy9GLENBQVUsRUFHdEJpRSxHQUFZakUsRUFBVW9HLEVBQVEsRUFBQyxNQUFPLENBQUMsQ0FDeEMsQ0FFRCxTQUFTSyxHQUFZZ0UsRUFBUyxDQUk3QixRQUhJaEwsRUFBSSxFQUNQZSxFQUFNaUssRUFBTyxPQUNiekssRUFBVyxHQUNKUCxFQUFJZSxFQUFLZixJQUNoQk8sR0FBWXlLLEVBQVFoTCxDQUFHLEVBQUMsTUFFekIsT0FBT08sQ0FDUCxDQUVELFNBQVM0RixHQUFla0UsRUFBU2UsRUFBWUMsRUFBTyxDQUNuRCxJQUFJeEIsRUFBTXVCLEVBQVcsSUFDcEJFLEVBQU9GLEVBQVcsS0FDbEJoRSxFQUFNa0UsR0FBUXpCLEVBQ2QwQixFQUFtQkYsR0FBUWpFLElBQVEsYUFDbkNvRSxHQUFXbkgsSUFFWixPQUFPK0csRUFBVyxNQUdqQixTQUFVdkssRUFBTUwsR0FBU2lKLEdBQU0sQ0FDOUIsS0FBVTVJLEVBQU9BLEVBQU1nSixJQUN0QixHQUFLaEosRUFBSyxXQUFhLEdBQUswSyxFQUMzQixPQUFPbEIsRUFBU3hKLEVBQU1MLEdBQVNpSixFQUFHLEVBR3BDLE1BQU8sRUFDUCxFQUdELFNBQVU1SSxFQUFNTCxHQUFTaUosR0FBTSxDQUM5QixJQUFJZ0MsR0FBVS9CLEdBQ2JnQyxHQUFXLENBQUV0SCxFQUFTb0gsSUFHdkIsR0FBSy9CLElBQ0osS0FBVTVJLEVBQU9BLEVBQU1nSixJQUN0QixJQUFLaEosRUFBSyxXQUFhLEdBQUswSyxJQUN0QmxCLEVBQVN4SixFQUFNTCxHQUFTaUosRUFBRyxFQUMvQixNQUFPLE9BS1YsTUFBVTVJLEVBQU9BLEVBQU1nSixJQUN0QixHQUFLaEosRUFBSyxXQUFhLEdBQUswSyxFQUczQixHQUZBN0IsR0FBYTdJLEVBQU1zRCxDQUFTLElBQU10RCxFQUFNc0QsQ0FBTyxFQUFLLENBQUEsR0FFL0NtSCxHQUFRMUksRUFBVS9CLEVBQU15SyxDQUFJLEVBQ2hDekssRUFBT0EsRUFBTWdKLENBQUssR0FBSWhKLE1BQ2hCLEtBQU80SyxHQUFXL0IsR0FBWXRDLENBQUssSUFDekNxRSxHQUFVLENBQUMsSUFBT3JILEdBQVdxSCxHQUFVLENBQUcsSUFBS0QsR0FHL0MsT0FBU0UsR0FBVSxDQUFDLEVBQUtELEdBQVUsQ0FBQyxFQU9wQyxHQUhBL0IsR0FBWXRDLENBQUssRUFBR3NFLEdBR2JBLEdBQVUsR0FBTXJCLEVBQVN4SixFQUFNTCxHQUFTaUosSUFDOUMsTUFBTyxHQU1aLE1BQU8sRUFDVixDQUNDLENBRUQsU0FBU2tDLEdBQWdCQyxFQUFXLENBQ25DLE9BQU9BLEVBQVMsT0FBUyxFQUN4QixTQUFVL0ssRUFBTUwsRUFBU2lKLEVBQU0sQ0FFOUIsUUFESXpKLEVBQUk0TCxFQUFTLE9BQ1Q1TCxLQUNQLEdBQUssQ0FBQzRMLEVBQVU1TCxDQUFDLEVBQUlhLEVBQU1MLEVBQVNpSixHQUNuQyxNQUFPLEdBR1QsTUFBTyxFQUNQLEVBQ0RtQyxFQUFVLENBQUMsQ0FDWixDQUVELFNBQVNDLEdBQWtCdEwsRUFBVXVMLEVBQVUvSixFQUFVLENBR3hELFFBRkkvQixFQUFJLEVBQ1BlLEVBQU0rSyxFQUFTLE9BQ1I5TCxFQUFJZSxFQUFLZixJQUNoQnNHLEdBQU0vRixFQUFVdUwsRUFBVTlMLENBQUcsRUFBRStCLENBQU8sRUFFdkMsT0FBT0EsQ0FDUCxDQUVELFNBQVNnSyxHQUFVeEIsRUFBV3lCLEVBQUtDLEVBQVF6TCxFQUFTaUosRUFBTSxDQU96RCxRQU5JNUksRUFDSHFMLEVBQWUsQ0FBRSxFQUNqQmxNLEdBQUksRUFDSmUsRUFBTXdKLEVBQVUsT0FDaEI0QixHQUFTSCxHQUFPLEtBRVRoTSxHQUFJZSxFQUFLZixNQUNUYSxFQUFPMEosRUFBV3ZLLE9BQ25CLENBQUNpTSxHQUFVQSxFQUFRcEwsRUFBTUwsRUFBU2lKLENBQUcsS0FDekN5QyxFQUFhLEtBQU1yTCxHQUNkc0wsSUFDSkgsRUFBSSxLQUFNaE0sS0FNZCxPQUFPa00sQ0FDUCxDQUVELFNBQVNFLEdBQVlDLEVBQVc5TCxFQUFVOEosRUFBU2lDLEVBQVlDLEVBQVlDLEVBQWUsQ0FDekYsT0FBS0YsR0FBYyxDQUFDQSxFQUFZbkksS0FDL0JtSSxFQUFhRixHQUFZRSxJQUVyQkMsR0FBYyxDQUFDQSxFQUFZcEksS0FDL0JvSSxFQUFhSCxHQUFZRyxFQUFZQyxJQUUvQm5GLEdBQWMsU0FBVWQsRUFBTXhFLEdBQVN2QixFQUFTaUosR0FBTSxDQUM1RCxJQUFJZ0QsR0FBTXpNLEdBQUdhLEdBQU02TCxHQUNsQkMsR0FBUyxDQUFFLEVBQ1hDLEdBQVUsQ0FBRSxFQUNaQyxHQUFjOUssR0FBUSxPQUd0QnJCLEdBQVE2RixHQUNQc0YsR0FBa0J0TCxHQUFZLElBQzdCQyxFQUFRLFNBQVcsQ0FBRUEsQ0FBTyxFQUFLQSxFQUFTLENBQUEsQ0FBSSxFQUdoRHNNLEdBQVlULElBQWU5RixHQUFRLENBQUNoRyxHQUNuQ3dMLEdBQVVyTCxHQUFPaU0sR0FBUU4sRUFBVzdMLEVBQVNpSixFQUFLLEVBQ2xEL0ksR0FxQkYsR0FuQksySixHQUlKcUMsR0FBYUgsSUFBZ0JoRyxFQUFPOEYsRUFBWVEsSUFBZVAsR0FHOUQsQ0FBRSxFQUdGdkssR0FHRHNJLEVBQVN5QyxHQUFXSixHQUFZbE0sRUFBU2lKLEVBQUcsR0FFNUNpRCxHQUFhSSxHQUlUUixFQU1KLElBTEFHLEdBQU9WLEdBQVVXLEdBQVlFLElBQzdCTixFQUFZRyxHQUFNLENBQUEsRUFBSWpNLEVBQVNpSixFQUFHLEVBR2xDekosR0FBSXlNLEdBQUssT0FDRHpNLE9BQ0FhLEdBQU80TCxHQUFNek0sT0FDbkIwTSxHQUFZRSxHQUFTNU0sRUFBQyxHQUFPLEVBQUc4TSxHQUFXRixHQUFTNU0sRUFBQyxHQUFPYSxLQUsvRCxHQUFLMEYsR0FDSixHQUFLZ0csR0FBY0YsRUFBWSxDQUM5QixHQUFLRSxFQUFhLENBS2pCLElBRkFFLEdBQU8sQ0FBQSxFQUNQek0sR0FBSTBNLEdBQVcsT0FDUDFNLE9BQ0FhLEdBQU82TCxHQUFZMU0sTUFHekJ5TSxHQUFLLEtBQVFLLEdBQVc5TSxFQUFHLEVBQUdhLEVBQUksRUFHcEMwTCxFQUFZLEtBQVFHLEdBQWEsQ0FBRSxFQUFJRCxHQUFNaEQsRUFBRyxDQUNoRCxDQUlELElBREF6SixHQUFJME0sR0FBVyxPQUNQMU0sT0FDQWEsR0FBTzZMLEdBQVkxTSxFQUFHLEtBQzFCeU0sR0FBT0YsRUFBYXZOLEVBQVEsS0FBTXVILEVBQU0xRixFQUFJLEVBQUs4TCxHQUFRM00sRUFBRyxHQUFLLEtBRW5FdUcsRUFBTWtHLEVBQUksRUFBSyxFQUFHMUssR0FBUzBLLEVBQUksRUFBSzVMLElBR3RDLE9BSUQ2TCxHQUFhWCxHQUNaVyxLQUFlM0ssR0FDZDJLLEdBQVcsT0FBUUcsR0FBYUgsR0FBVyxNQUFRLEVBQ25EQSxFQUNMLEVBQ1FILEVBQ0pBLEVBQVksS0FBTXhLLEdBQVMySyxHQUFZakQsRUFBRyxFQUUxQzFLLEVBQUssTUFBT2dELEdBQVMySyxHQUd6QixFQUNDLENBRUQsU0FBU0ssR0FBbUIvQixFQUFTLENBK0JwQyxRQTlCSWdDLEVBQWMzQyxFQUFTckosRUFDMUJELEVBQU1pSyxFQUFPLE9BQ2JpQyxFQUFrQnJKLEVBQUssU0FBVW9ILEVBQVEsQ0FBQyxFQUFHLElBQU0sRUFDbkRrQyxFQUFtQkQsR0FBbUJySixFQUFLLFNBQVUsR0FBSyxFQUMxRDVELEdBQUlpTixFQUFrQixFQUFJLEVBRzFCRSxFQUFlaEgsR0FBZSxTQUFVdEYsR0FBTyxDQUM5QyxPQUFPQSxLQUFTbU0sQ0FDbkIsRUFBS0UsRUFBa0IsRUFBTSxFQUMzQkUsR0FBa0JqSCxHQUFlLFNBQVV0RixHQUFPLENBQ2pELE9BQU83QixFQUFRLEtBQU1nTyxFQUFjbk0sRUFBTSxFQUFHLEVBQy9DLEVBQUtxTSxFQUFrQixFQUFNLEVBQzNCdEIsR0FBVyxDQUFFLFNBQVUvSyxHQUFNTCxHQUFTaUosR0FBTSxDQU0zQyxJQUFJOUksR0FBUSxDQUFDc00sSUFBcUJ4RCxJQUFPakosSUFBV3FELE1BQ2pEbUosRUFBZXhNLElBQVUsU0FDMUIyTSxFQUFjdE0sR0FBTUwsR0FBU2lKLEVBQUssRUFDbEMyRCxHQUFpQnZNLEdBQU1MLEdBQVNpSixFQUFLLEdBSXZDLE9BQUF1RCxFQUFlLEtBQ1JyTSxFQUNWLEdBRVNYLEdBQUllLEVBQUtmLEtBQ2hCLEdBQU9xSyxFQUFVekcsRUFBSyxTQUFVb0gsRUFBUWhMLEVBQUMsRUFBRyxNQUMzQzRMLEdBQVcsQ0FBRXpGLEdBQWV3RixHQUFnQkMsRUFBVSxFQUFFdkIsQ0FBTyxPQUN6RCxDQUlOLEdBSEFBLEVBQVV6RyxFQUFLLE9BQVFvSCxFQUFRaEwsRUFBQyxFQUFHLE1BQU8sTUFBTyxLQUFNZ0wsRUFBUWhMLEVBQUcsRUFBQyxPQUFPLEVBR3JFcUssRUFBU2xHLEdBQVksQ0FJekIsSUFEQW5ELEVBQUksRUFBRWhCLEdBQ0VnQixFQUFJRCxHQUNOLENBQUE2QyxFQUFLLFNBQVVvSCxFQUFRaEssQ0FBRyxFQUFDLElBQUksRUFEcEJBLElBQ2hCLENBSUQsT0FBT29MLEdBQ05wTSxHQUFJLEdBQUsyTCxHQUFnQkMsRUFBVSxFQUNuQzVMLEdBQUksR0FBS2dILEdBR1JnRSxFQUFPLE1BQU8sRUFBR2hMLEdBQUksQ0FBRyxFQUN0QixPQUFRLENBQUUsTUFBT2dMLEVBQVFoTCxHQUFJLEdBQUksT0FBUyxJQUFNLElBQU0sR0FBTSxDQUNwRSxFQUFPLFFBQVNpRCxHQUFVLElBQU0sRUFDM0JvSCxFQUNBckssR0FBSWdCLEdBQUsrTCxHQUFtQi9CLEVBQU8sTUFBT2hMLEdBQUdnQixFQUFLLEVBQ2xEQSxFQUFJRCxHQUFPZ00sR0FBcUIvQixFQUFTQSxFQUFPLE1BQU9oSyxFQUFPLEVBQzlEQSxFQUFJRCxHQUFPaUcsR0FBWWdFLENBQVEsQ0FDcEMsQ0FDSSxDQUNEWSxHQUFTLEtBQU12QixFQUNmLENBR0YsT0FBT3NCLEdBQWdCQyxHQUN2QixDQUVELFNBQVN5QixHQUEwQkMsRUFBaUJDLEVBQWMsQ0FDakUsSUFBSUMsRUFBUUQsRUFBWSxPQUFTLEVBQ2hDRSxFQUFZSCxFQUFnQixPQUFTLEVBQ3JDSSxFQUFlLFNBQVVuSCxFQUFNL0YsRUFBU2lKLEdBQUsxSCxFQUFTNEwsR0FBWSxDQUNqRSxJQUFJOU0sR0FBTUcsR0FBR3FKLEdBQ1p1RCxHQUFlLEVBQ2Y1TixHQUFJLElBQ0p1SyxHQUFZaEUsR0FBUSxDQUFFLEVBQ3RCc0gsR0FBYSxDQUFFLEVBQ2ZDLEdBQWdCakssRUFHaEJuRCxHQUFRNkYsR0FBUWtILEdBQWE3SixFQUFLLEtBQUssSUFBSyxJQUFLK0osRUFBVyxFQUc1REksR0FBa0IzSixHQUFXMEosSUFBaUIsS0FBTyxFQUFJLEtBQUssT0FBUSxHQUFJLEdBQzFFL00sR0FBTUwsR0FBTSxPQWViLElBYktpTixLQU1KOUosRUFBbUJyRCxHQUFXZCxHQUFZYyxHQUFXbU4sSUFPOUMzTixLQUFNZSxLQUFTRixHQUFPSCxHQUFPVixFQUFHLElBQU0sS0FBTUEsS0FBTSxDQUN6RCxHQUFLeU4sR0FBYTVNLEdBQU8sQ0FXeEIsSUFWQUcsR0FBSSxFQU1DLENBQUNSLEdBQVdLLEdBQUssZUFBaUJuQixJQUN0Q3VHLEdBQWFwRixFQUFJLEVBQ2pCNEksR0FBTSxDQUFDeEYsR0FFRW9HLEdBQVVpRCxFQUFpQnRNLE9BQ3BDLEdBQUtxSixHQUFTeEosR0FBTUwsR0FBV2QsRUFBVStKLEVBQUcsRUFBSyxDQUNoRDFLLEVBQUssS0FBTWdELEVBQVNsQixJQUNwQixLQUNBLENBRUc4TSxLQUNKdkosRUFBVTJKLEdBRVgsQ0FHSVAsS0FHRzNNLEdBQU8sQ0FBQ3dKLElBQVd4SixLQUN6QitNLEtBSUlySCxHQUNKZ0UsR0FBVSxLQUFNMUosSUFHbEIsQ0FhRCxHQVRBK00sSUFBZ0I1TixHQVNYd04sR0FBU3hOLEtBQU00TixHQUFlLENBRWxDLElBREE1TSxHQUFJLEVBQ01xSixHQUFVa0QsRUFBYXZNLE9BQ2hDcUosR0FBU0UsR0FBV3NELEdBQVlyTixFQUFTaUosRUFBRyxFQUc3QyxHQUFLbEQsRUFBTyxDQUdYLEdBQUtxSCxHQUFlLEVBQ25CLEtBQVE1TixNQUNDdUssR0FBV3ZLLEVBQUMsR0FBTTZOLEdBQVk3TixFQUFHLElBQ3hDNk4sR0FBWTdOLEVBQUcsRUFBRzZDLEVBQUksS0FBTWQsQ0FBTyxHQU10QzhMLEdBQWE5QixHQUFVOEIsR0FDdkIsQ0FHRDlPLEVBQUssTUFBT2dELEVBQVM4TCxJQUdoQkYsSUFBYSxDQUFDcEgsR0FBUXNILEdBQVcsT0FBUyxHQUM1Q0QsR0FBZUwsRUFBWSxPQUFXLEdBRXhDak4sRUFBTyxXQUFZeUIsRUFFcEIsQ0FHRCxPQUFLNEwsS0FDSnZKLEVBQVUySixHQUNWbEssRUFBbUJpSyxJQUdidkQsRUFDVixFQUVDLE9BQU9pRCxFQUNObkcsR0FBY3FHLENBQWMsRUFDNUJBLENBQ0QsQ0FFRCxTQUFTcEQsR0FBUy9KLEVBQVVtRyxFQUFnQyxDQUMzRCxJQUFJMUcsRUFDSHVOLEVBQWMsQ0FBRSxFQUNoQkQsRUFBa0IsQ0FBRSxFQUNwQm5DLEVBQVMxRyxHQUFlbEUsRUFBVyxLQUVwQyxHQUFLLENBQUM0SyxFQUFTLENBT2QsSUFKTXpFLElBQ0xBLEVBQVFLLEdBQVV4RyxJQUVuQlAsRUFBSTBHLEVBQU0sT0FDRjFHLEtBQ1BtTCxFQUFTNEIsR0FBbUJyRyxFQUFPMUcsQ0FBRyxDQUFBLEVBQ2pDbUwsRUFBUWhILEdBQ1pvSixFQUFZLEtBQU1wQyxHQUVsQm1DLEVBQWdCLEtBQU1uQyxHQUt4QkEsRUFBUzFHLEdBQWVsRSxFQUN2QjhNLEdBQTBCQyxFQUFpQkMsQ0FBVyxHQUd2RHBDLEVBQU8sU0FBVzVLLENBQ2xCLENBQ0QsT0FBTzRLLENBQ1AsQ0FXRCxTQUFTbEUsR0FBUTFHLEVBQVVDLEVBQVN1QixFQUFTd0UsRUFBTyxDQUNuRCxJQUFJdkcsRUFBR2dMLEVBQVFnRCxFQUFPckwsR0FBTTJELEVBQzNCMkgsR0FBVyxPQUFPMU4sR0FBYSxZQUFjQSxFQUM3Q21HLEdBQVEsQ0FBQ0gsR0FBUVEsR0FBWXhHLEVBQVcwTixHQUFTLFVBQVkxTixHQU05RCxHQUpBd0IsRUFBVUEsR0FBVyxHQUloQjJFLEdBQU0sU0FBVyxFQUFJLENBSXpCLEdBREFzRSxFQUFTdEUsR0FBTyxHQUFNQSxHQUFPLEdBQUksTUFBTyxHQUNuQ3NFLEVBQU8sT0FBUyxJQUFPZ0QsRUFBUWhELEVBQVEsSUFBTSxPQUFTLE1BQ3pEeEssRUFBUSxXQUFhLEdBQUt5RCxHQUFrQkwsRUFBSyxTQUFVb0gsRUFBUSxHQUFJLE1BQVMsQ0FNakYsR0FKQXhLLEdBQVlvRCxFQUFLLEtBQUssR0FDckJvSyxFQUFNLFFBQVMsQ0FBQyxFQUFHLFFBQVNySSxHQUFXQyxFQUFXLEVBQ2xEcEYsQ0FDSixHQUFRLENBQUEsR0FBTSxHQUNMQSxFQUlNeU4sS0FDWHpOLEVBQVVBLEVBQVEsZ0JBSmxCLFFBQU91QixFQU9SeEIsRUFBV0EsRUFBUyxNQUFPeUssRUFBTyxRQUFRLE1BQU0sT0FDaEQsQ0FJRCxJQURBaEwsRUFBSXNGLEdBQVUsYUFBYSxLQUFNL0UsQ0FBUSxFQUFLLEVBQUl5SyxFQUFPLE9BQ2pEaEwsTUFDUGdPLEVBQVFoRCxFQUFRaEwsR0FHWCxDQUFBNEQsRUFBSyxTQUFZakIsR0FBT3FMLEVBQU0sSUFBSSxJQUd2QyxJQUFPMUgsRUFBTzFDLEVBQUssS0FBTWpCLEVBQUksS0FHckI0RCxFQUFPRCxFQUNiMEgsRUFBTSxRQUFTLENBQUMsRUFBRyxRQUFTckksR0FBV0MsRUFBVyxFQUNsREYsR0FBUyxLQUFNc0YsRUFBUSxDQUFDLEVBQUcsSUFBTSxHQUNoQ2xFLEdBQWF0RyxFQUFRLFVBQVUsR0FBTUEsQ0FDM0MsR0FBVSxDQUtMLEdBRkF3SyxFQUFPLE9BQVFoTCxFQUFHLEdBQ2xCTyxFQUFXZ0csRUFBSyxRQUFVUyxHQUFZZ0UsQ0FBTSxFQUN2QyxDQUFDekssRUFDTCxPQUFBeEIsRUFBSyxNQUFPZ0QsRUFBU3dFLEdBQ2R4RSxFQUdSLEtBQ0EsQ0FHSCxDQUlELE9BQUVrTSxJQUFZM0QsR0FBUy9KLEVBQVVtRyxFQUFPLEdBQ3ZDSCxFQUNBL0YsRUFDQSxDQUFDeUQsRUFDRGxDLEVBQ0EsQ0FBQ3ZCLEdBQVdrRixHQUFTLEtBQU1uRixDQUFVLEdBQUl1RyxHQUFhdEcsRUFBUSxVQUFVLEdBQU1BLENBQ2hGLEVBQ1F1QixDQUNQLENBTUR6QyxFQUFRLFdBQWE2RSxFQUFRLE1BQU8sRUFBSSxFQUFDLEtBQU1RLElBQVksS0FBTSxFQUFFLElBQU9SLEVBRzFFOEIsS0FJQTNHLEVBQVEsYUFBZWlJLEdBQVEsU0FBVUMsRUFBSyxDQUc3QyxPQUFPQSxFQUFHLHdCQUF5QjlILEVBQVMsY0FBZSxVQUFVLENBQUksRUFBRyxDQUM3RSxHQUVBWSxFQUFPLEtBQU9nRyxHQUdkaEcsRUFBTyxLQUFNLEdBQUcsRUFBS0EsRUFBTyxLQUFLLFFBQ2pDQSxFQUFPLE9BQVNBLEVBQU8sV0FJdkJnRyxHQUFLLFFBQVVnRSxHQUNmaEUsR0FBSyxPQUFTVyxHQUNkWCxHQUFLLFlBQWNMLEdBQ25CSyxHQUFLLFNBQVdTLEdBRWhCVCxHQUFLLE9BQVNoRyxFQUFPLGVBQ3JCZ0csR0FBSyxRQUFVaEcsRUFBTyxLQUN0QmdHLEdBQUssTUFBUWhHLEVBQU8sU0FDcEJnRyxHQUFLLFVBQVloRyxFQUFPLEtBQ3hCZ0csR0FBSyxRQUFVaEcsRUFBTyxRQUN0QmdHLEdBQUssV0FBYWhHLEVBQU8sVUFJekIsS0FHQSxJQUFJdUosR0FBTSxTQUFVaEosRUFBTWdKLEVBQUtxRSxFQUFRLENBSXRDLFFBSEk5RCxFQUFVLENBQUUsRUFDZitELEVBQVdELElBQVUsUUFFWnJOLEVBQU9BLEVBQU1nSixDQUFLLElBQU1oSixFQUFLLFdBQWEsR0FDbkQsR0FBS0EsRUFBSyxXQUFhLEVBQUksQ0FDMUIsR0FBS3NOLEdBQVk3TixFQUFRTyxDQUFNLEVBQUMsR0FBSXFOLENBQUssRUFDeEMsTUFFRDlELEVBQVEsS0FBTXZKLEVBQ2QsQ0FFRixPQUFPdUosQ0FDUixFQUdJZ0UsR0FBVyxTQUFVQyxFQUFHeE4sRUFBTyxDQUdsQyxRQUZJdUosRUFBVSxDQUFBLEVBRU5pRSxFQUFHQSxFQUFJQSxFQUFFLFlBQ1hBLEVBQUUsV0FBYSxHQUFLQSxJQUFNeE4sR0FDOUJ1SixFQUFRLEtBQU1pRSxHQUloQixPQUFPakUsQ0FDUixFQUdJa0UsR0FBZ0JoTyxFQUFPLEtBQUssTUFBTSxhQUVsQ2lPLEdBQWUsa0VBS25CLFNBQVNDLEdBQVFoRyxFQUFVaUcsRUFBV0MsRUFBTSxDQUMzQyxPQUFLblAsRUFBWWtQLEdBQ1RuTyxFQUFPLEtBQU1rSSxFQUFVLFNBQVUzSCxFQUFNYixFQUFJLENBQ2pELE1BQU8sQ0FBQyxDQUFDeU8sRUFBVSxLQUFNNU4sRUFBTWIsRUFBR2EsQ0FBTSxJQUFLNk4sQ0FDaEQsR0FJTUQsRUFBVSxTQUNQbk8sRUFBTyxLQUFNa0ksRUFBVSxTQUFVM0gsRUFBTyxDQUM5QyxPQUFTQSxJQUFTNE4sSUFBZ0JDLENBQ3JDLEdBSU0sT0FBT0QsR0FBYyxTQUNsQm5PLEVBQU8sS0FBTWtJLEVBQVUsU0FBVTNILEVBQU8sQ0FDOUMsT0FBUzdCLEVBQVEsS0FBTXlQLEVBQVc1TixHQUFTLEtBQVM2TixDQUN2RCxHQUlRcE8sRUFBTyxPQUFRbU8sRUFBV2pHLEVBQVVrRyxDQUFHLENBQzlDLENBRURwTyxFQUFPLE9BQVMsU0FBVWlJLEVBQU03SCxFQUFPZ08sRUFBTSxDQUM1QyxJQUFJN04sRUFBT0gsRUFBTyxHQU1sQixPQUpLZ08sSUFDSm5HLEVBQU8sUUFBVUEsRUFBTyxLQUdwQjdILEVBQU0sU0FBVyxHQUFLRyxFQUFLLFdBQWEsRUFDckNQLEVBQU8sS0FBSyxnQkFBaUJPLEVBQU0wSCxHQUFTLENBQUUxSCxDQUFNLEVBQUcsR0FHeERQLEVBQU8sS0FBSyxRQUFTaUksRUFBTWpJLEVBQU8sS0FBTUksRUFBTyxTQUFVRyxFQUFPLENBQ3RFLE9BQU9BLEVBQUssV0FBYSxDQUN6QixDQUFBLEVBQ0YsRUFFQVAsRUFBTyxHQUFHLE9BQVEsQ0FDakIsS0FBTSxTQUFVQyxFQUFXLENBQzFCLElBQUlQLEVBQUdXLEVBQ05JLEVBQU0sS0FBSyxPQUNYNE4sRUFBTyxLQUVSLEdBQUssT0FBT3BPLEdBQWEsU0FDeEIsT0FBTyxLQUFLLFVBQVdELEVBQVFDLENBQVUsRUFBQyxPQUFRLFVBQVcsQ0FDNUQsSUFBTVAsRUFBSSxFQUFHQSxFQUFJZSxFQUFLZixJQUNyQixHQUFLTSxFQUFPLFNBQVVxTyxFQUFNM08sQ0FBRyxFQUFFLElBQUksRUFDcEMsTUFBTyxFQUdULENBQUEsR0FLRixJQUZBVyxFQUFNLEtBQUssVUFBVyxDQUFBLEdBRWhCWCxFQUFJLEVBQUdBLEVBQUllLEVBQUtmLElBQ3JCTSxFQUFPLEtBQU1DLEVBQVVvTyxFQUFNM08sQ0FBQyxFQUFJVyxHQUduQyxPQUFPSSxFQUFNLEVBQUlULEVBQU8sV0FBWUssQ0FBSyxFQUFHQSxDQUM1QyxFQUNELE9BQVEsU0FBVUosRUFBVyxDQUM1QixPQUFPLEtBQUssVUFBV2lPLEdBQVEsS0FBTWpPLEdBQVksQ0FBRSxFQUFFLEVBQUssRUFDMUQsRUFDRCxJQUFLLFNBQVVBLEVBQVcsQ0FDekIsT0FBTyxLQUFLLFVBQVdpTyxHQUFRLEtBQU1qTyxHQUFZLENBQUUsRUFBRSxFQUFJLEVBQ3pELEVBQ0QsR0FBSSxTQUFVQSxFQUFXLENBQ3hCLE1BQU8sQ0FBQyxDQUFDaU8sR0FDUixLQUlBLE9BQU9qTyxHQUFhLFVBQVkrTixHQUFjLEtBQU0vTixDQUFVLEVBQzdERCxFQUFRQyxDQUFVLEVBQ2xCQSxHQUFZLENBQUUsRUFDZixFQUNBLEVBQUMsTUFDRixDQUNGLEdBT0EsSUFBSXFPLEdBTUhuSixFQUFhLHNDQUVib0osR0FBT3ZPLEVBQU8sR0FBRyxLQUFPLFNBQVVDLEVBQVVDLEVBQVNzTyxFQUFPLENBQzNELElBQUlwSSxFQUFPN0YsRUFHWCxHQUFLLENBQUNOLEVBQ0wsT0FBTyxLQVFSLEdBSEF1TyxFQUFPQSxHQUFRRixHQUdWLE9BQU9yTyxHQUFhLFNBYXhCLEdBWktBLEVBQVUsQ0FBQyxJQUFPLEtBQ3RCQSxFQUFVQSxFQUFTLE9BQVMsQ0FBRyxJQUFLLEtBQ3BDQSxFQUFTLFFBQVUsRUFHbkJtRyxFQUFRLENBQUUsS0FBTW5HLEVBQVUsSUFBSSxFQUc5Qm1HLEVBQVFqQixFQUFXLEtBQU1sRixHQUlyQm1HLElBQVdBLEVBQU8sQ0FBQyxHQUFNLENBQUNsRyxHQUc5QixHQUFLa0csRUFBTyxHQUFNLENBWWpCLEdBWEFsRyxFQUFVQSxhQUFtQkYsRUFBU0UsRUFBUyxDQUFDLEVBQUtBLEVBSXJERixFQUFPLE1BQU8sS0FBTUEsRUFBTyxVQUMxQm9HLEVBQU8sQ0FBRyxFQUNWbEcsR0FBV0EsRUFBUSxTQUFXQSxFQUFRLGVBQWlCQSxFQUFVZCxFQUNqRSxFQUNOLEdBR1U2TyxHQUFXLEtBQU03SCxFQUFPLENBQUcsQ0FBQSxHQUFNcEcsRUFBTyxjQUFlRSxHQUMzRCxJQUFNa0csS0FBU2xHLEVBR1RqQixFQUFZLEtBQU1tSCxDQUFLLEdBQzNCLEtBQU1BLENBQU8sRUFBRWxHLEVBQVNrRyxDQUFPLENBQUEsRUFJL0IsS0FBSyxLQUFNQSxFQUFPbEcsRUFBU2tHLENBQU8sQ0FBQSxFQUtyQyxPQUFPLElBR1osS0FDSyxRQUFBN0YsRUFBT25CLEVBQVMsZUFBZ0JnSCxFQUFPLENBQUcsQ0FBQSxFQUVyQzdGLElBR0osS0FBTSxDQUFHLEVBQUdBLEVBQ1osS0FBSyxPQUFTLEdBRVIsU0FJRixPQUFLLENBQUNMLEdBQVdBLEVBQVEsUUFDdEJBLEdBQVdzTyxHQUFPLEtBQU12TyxDQUFRLEVBS2xDLEtBQUssWUFBYUMsQ0FBUyxFQUFDLEtBQU1ELENBQVEsTUFJNUMsSUFBS0EsRUFBUyxTQUNwQixZQUFNLENBQUcsRUFBR0EsRUFDWixLQUFLLE9BQVMsRUFDUCxLQUlELEdBQUtoQixFQUFZZ0IsR0FDdkIsT0FBT3VPLEVBQUssUUFBVSxPQUNyQkEsRUFBSyxNQUFPdk8sQ0FBVSxFQUd0QkEsRUFBVUQsQ0FBTSxFQUdsQixPQUFPQSxFQUFPLFVBQVdDLEVBQVUsSUFBSSxDQUN6QyxFQUdBc08sR0FBSyxVQUFZdk8sRUFBTyxHQUd4QnNPLEdBQWF0TyxFQUFRWixHQUdyQixJQUFJcVAsR0FBZSxpQ0FHbEJDLEdBQW1CLENBQ2xCLFNBQVUsR0FDVixTQUFVLEdBQ1YsS0FBTSxHQUNOLEtBQU0sRUFDUixFQUVBMU8sRUFBTyxHQUFHLE9BQVEsQ0FDakIsSUFBSyxTQUFVaUIsRUFBUyxDQUN2QixJQUFJME4sRUFBVTNPLEVBQVFpQixFQUFRLElBQU0sRUFDbkMyTixFQUFJRCxFQUFRLE9BRWIsT0FBTyxLQUFLLE9BQVEsVUFBVyxDQUU5QixRQURJalAsRUFBSSxFQUNBQSxFQUFJa1AsRUFBR2xQLElBQ2QsR0FBS00sRUFBTyxTQUFVLEtBQU0yTyxFQUFTalAsQ0FBRyxDQUFBLEVBQ3ZDLE1BQU8sRUFHWixFQUNFLEVBRUQsUUFBUyxTQUFVbVAsRUFBVzNPLEVBQVUsQ0FDdkMsSUFBSTRPLEVBQ0hwUCxFQUFJLEVBQ0prUCxFQUFJLEtBQUssT0FDVDlFLEVBQVUsQ0FBRSxFQUNaNkUsRUFBVSxPQUFPRSxHQUFjLFVBQVk3TyxFQUFRNk8sQ0FBUyxFQUc3RCxHQUFLLENBQUNiLEdBQWMsS0FBTWEsSUFDekIsS0FBUW5QLEVBQUlrUCxFQUFHbFAsSUFDZCxJQUFNb1AsRUFBTSxLQUFNcFAsR0FBS29QLEdBQU9BLElBQVE1TyxFQUFTNE8sRUFBTUEsRUFBSSxXQUd4RCxHQUFLQSxFQUFJLFNBQVcsS0FBUUgsRUFDM0JBLEVBQVEsTUFBT0csQ0FBSyxFQUFHLEdBR3ZCQSxFQUFJLFdBQWEsR0FDaEI5TyxFQUFPLEtBQUssZ0JBQWlCOE8sRUFBS0QsQ0FBVyxHQUFLLENBRW5EL0UsRUFBUSxLQUFNZ0YsR0FDZCxLQUNBLEVBS0osT0FBTyxLQUFLLFVBQVdoRixFQUFRLE9BQVMsRUFBSTlKLEVBQU8sV0FBWThKLEdBQVlBLEVBQzNFLEVBR0QsTUFBTyxTQUFVdkosRUFBTyxDQUd2QixPQUFNQSxFQUtELE9BQU9BLEdBQVMsU0FDYjdCLEVBQVEsS0FBTXNCLEVBQVFPLENBQUksRUFBSSxLQUFNLENBQUMsR0FJdEM3QixFQUFRLEtBQU0sS0FHcEI2QixFQUFLLE9BQVNBLEVBQU0sQ0FBRyxFQUFHQSxDQUM3QixFQWJZLEtBQU0sQ0FBRyxHQUFJLEtBQU0sQ0FBQyxFQUFHLFdBQWUsS0FBSyxNQUFLLEVBQUcsUUFBUyxFQUFDLE9BQVMsRUFjaEYsRUFFRCxJQUFLLFNBQVVOLEVBQVVDLEVBQVUsQ0FDbEMsT0FBTyxLQUFLLFVBQ1hGLEVBQU8sV0FDTkEsRUFBTyxNQUFPLEtBQUssSUFBSyxFQUFFQSxFQUFRQyxFQUFVQyxFQUFXLENBQ3ZELENBQ0osQ0FDRSxFQUVELFFBQVMsU0FBVUQsRUFBVyxDQUM3QixPQUFPLEtBQUssSUFBS0EsR0FBWSxLQUM1QixLQUFLLFdBQWEsS0FBSyxXQUFXLE9BQVFBLENBQVUsQ0FDdkQsQ0FDRSxDQUNGLEdBRUEsU0FBUzhPLEdBQVNELEVBQUt2RixFQUFNLENBQzVCLE1BQVV1RixFQUFNQSxFQUFLdkYsQ0FBSyxJQUFNdUYsRUFBSSxXQUFhLEdBQUksQ0FDckQsT0FBT0EsQ0FDUCxDQUVEOU8sRUFBTyxLQUFNLENBQ1osT0FBUSxTQUFVTyxFQUFPLENBQ3hCLElBQUlpSixFQUFTakosRUFBSyxXQUNsQixPQUFPaUosR0FBVUEsRUFBTyxXQUFhLEdBQUtBLEVBQVMsSUFDbkQsRUFDRCxRQUFTLFNBQVVqSixFQUFPLENBQ3pCLE9BQU9nSixHQUFLaEosRUFBTSxhQUNsQixFQUNELGFBQWMsU0FBVUEsRUFBTTZCLEVBQUl3TCxFQUFRLENBQ3pDLE9BQU9yRSxHQUFLaEosRUFBTSxhQUFjcU4sQ0FBSyxDQUNyQyxFQUNELEtBQU0sU0FBVXJOLEVBQU8sQ0FDdEIsT0FBT3dPLEdBQVN4TyxFQUFNLGNBQ3RCLEVBQ0QsS0FBTSxTQUFVQSxFQUFPLENBQ3RCLE9BQU93TyxHQUFTeE8sRUFBTSxrQkFDdEIsRUFDRCxRQUFTLFNBQVVBLEVBQU8sQ0FDekIsT0FBT2dKLEdBQUtoSixFQUFNLGNBQ2xCLEVBQ0QsUUFBUyxTQUFVQSxFQUFPLENBQ3pCLE9BQU9nSixHQUFLaEosRUFBTSxrQkFDbEIsRUFDRCxVQUFXLFNBQVVBLEVBQU02QixFQUFJd0wsRUFBUSxDQUN0QyxPQUFPckUsR0FBS2hKLEVBQU0sY0FBZXFOLENBQUssQ0FDdEMsRUFDRCxVQUFXLFNBQVVyTixFQUFNNkIsRUFBSXdMLEVBQVEsQ0FDdEMsT0FBT3JFLEdBQUtoSixFQUFNLGtCQUFtQnFOLENBQUssQ0FDMUMsRUFDRCxTQUFVLFNBQVVyTixFQUFPLENBQzFCLE9BQU91TixJQUFZdk4sRUFBSyxZQUFjLENBQUEsR0FBSyxXQUFZQSxFQUN2RCxFQUNELFNBQVUsU0FBVUEsRUFBTyxDQUMxQixPQUFPdU4sR0FBVXZOLEVBQUssV0FDdEIsRUFDRCxTQUFVLFNBQVVBLEVBQU8sQ0FDMUIsT0FBS0EsRUFBSyxpQkFBbUIsTUFLNUJsQyxFQUFVa0MsRUFBSyxpQkFFUkEsRUFBSyxpQkFNUitCLEVBQVUvQixFQUFNLGNBQ3BCQSxFQUFPQSxFQUFLLFNBQVdBLEdBR2pCUCxFQUFPLE1BQU8sQ0FBRSxFQUFFTyxFQUFLLFVBQVUsRUFDeEMsQ0FDRixFQUFHLFNBQVVLLEVBQU1vRyxFQUFLLENBQ3ZCaEgsRUFBTyxHQUFJWSxDQUFNLEVBQUcsU0FBVWdOLEVBQU8zTixFQUFXLENBQy9DLElBQUk2SixFQUFVOUosRUFBTyxJQUFLLEtBQU1nSCxFQUFJNEcsR0FFcEMsT0FBS2hOLEVBQUssTUFBTyxFQUFFLElBQU8sVUFDekJYLEVBQVcyTixHQUdQM04sR0FBWSxPQUFPQSxHQUFhLFdBQ3BDNkosRUFBVTlKLEVBQU8sT0FBUUMsRUFBVTZKLENBQU8sR0FHdEMsS0FBSyxPQUFTLElBR1o0RSxHQUFrQjlOLElBQ3ZCWixFQUFPLFdBQVk4SixHQUlmMkUsR0FBYSxLQUFNN04sSUFDdkJrSixFQUFRLFFBQU8sR0FJVixLQUFLLFVBQVdBLEVBQ3pCLENBQ0EsR0FDQSxJQUFJa0YsR0FBa0Isb0JBS3RCLFNBQVNDLEdBQWV0TyxFQUFVLENBQ2pDLElBQUl1TyxFQUFTLENBQUEsRUFDYixPQUFBbFAsRUFBTyxLQUFNVyxFQUFRLE1BQU9xTyxFQUFhLEdBQU0sQ0FBRSxFQUFFLFNBQVVHLEVBQUdDLEVBQU8sQ0FDdEVGLEVBQVFFLENBQU0sRUFBRyxFQUNuQixHQUNRRixDQUNQLENBd0JEbFAsRUFBTyxVQUFZLFNBQVVXLEVBQVUsQ0FJdENBLEVBQVUsT0FBT0EsR0FBWSxTQUM1QnNPLEdBQWV0TyxDQUFTLEVBQ3hCWCxFQUFPLE9BQVEsR0FBSVcsR0FFcEIsSUFDQzBPLEVBR0FDLEVBR0FDLEVBR0FDLEVBR0FDLEVBQU8sQ0FBRSxFQUdUQyxFQUFRLENBQUUsRUFHVkMsRUFBYyxHQUdkQyxFQUFPLFVBQVcsQ0FRakIsSUFMQUosRUFBU0EsR0FBVTdPLEVBQVEsS0FJM0I0TyxFQUFRRixFQUFTLEdBQ1RLLEVBQU0sT0FBUUMsRUFBYyxHQUVuQyxJQURBTCxFQUFTSSxFQUFNLFFBQ1AsRUFBRUMsRUFBY0YsRUFBSyxRQUd2QkEsRUFBTUUsQ0FBYSxFQUFDLE1BQU9MLEVBQVEsQ0FBQyxFQUFJQSxFQUFRLENBQUcsQ0FBQSxJQUFPLElBQzlEM08sRUFBUSxjQUdSZ1AsRUFBY0YsRUFBSyxPQUNuQkgsRUFBUyxJQU1OM08sRUFBUSxTQUNiMk8sRUFBUyxJQUdWRCxFQUFTLEdBR0pHLElBR0NGLEVBQ0pHLEVBQU8sQ0FBQSxFQUlQQSxFQUFPLEdBR1QsRUFHRHBCLEVBQU8sQ0FHTixJQUFLLFVBQVcsQ0FDZixPQUFLb0IsSUFHQ0gsR0FBVSxDQUFDRCxJQUNmTSxFQUFjRixFQUFLLE9BQVMsRUFDNUJDLEVBQU0sS0FBTUosSUFHWCxTQUFTTyxFQUFLakcsRUFBTyxDQUN0QjVKLEVBQU8sS0FBTTRKLEVBQU0sU0FBVXVGLEVBQUdqTixFQUFNLENBQ2hDakQsRUFBWWlELElBQ1gsQ0FBQ3ZCLEVBQVEsUUFBVSxDQUFDME4sRUFBSyxJQUFLbk0sS0FDbEN1TixFQUFLLEtBQU12TixHQUVEQSxHQUFPQSxFQUFJLFFBQVVyQyxFQUFRcUMsQ0FBSyxJQUFLLFVBR2xEMk4sRUFBSzNOLENBQUcsQ0FFaEIsRUFDTSxFQUFJLFNBQVMsRUFFVG9OLEdBQVUsQ0FBQ0QsR0FDZk8sS0FHSyxJQUNQLEVBR0QsT0FBUSxVQUFXLENBQ2xCLE9BQUE1UCxFQUFPLEtBQU0sVUFBVyxTQUFVbVAsRUFBR2pOLEVBQU0sQ0FFMUMsUUFESTROLEdBQ01BLEVBQVE5UCxFQUFPLFFBQVNrQyxFQUFLdU4sRUFBTUssSUFBWSxJQUN4REwsRUFBSyxPQUFRSyxFQUFPLEdBR2ZBLEdBQVNILEdBQ2JBLEdBR1AsR0FDVyxJQUNQLEVBSUQsSUFBSyxTQUFVM0ksRUFBSyxDQUNuQixPQUFPQSxFQUNOaEgsRUFBTyxRQUFTZ0gsRUFBSXlJLENBQUksRUFBSyxHQUM3QkEsRUFBSyxPQUFTLENBQ2YsRUFHRCxNQUFPLFVBQVcsQ0FDakIsT0FBS0EsSUFDSkEsRUFBTyxDQUFBLEdBRUQsSUFDUCxFQUtELFFBQVMsVUFBVyxDQUNuQixPQUFBRCxFQUFTRSxFQUFRLEdBQ2pCRCxFQUFPSCxFQUFTLEdBQ1QsSUFDUCxFQUNELFNBQVUsVUFBVyxDQUNwQixNQUFPLENBQUNHLENBQ1IsRUFLRCxLQUFNLFVBQVcsQ0FDaEIsT0FBQUQsRUFBU0UsRUFBUSxHQUNaLENBQUNKLEdBQVUsQ0FBQ0QsSUFDaEJJLEVBQU9ILEVBQVMsSUFFVixJQUNQLEVBQ0QsT0FBUSxVQUFXLENBQ2xCLE1BQU8sQ0FBQyxDQUFDRSxDQUNULEVBR0QsU0FBVSxTQUFVdFAsRUFBUzBKLEVBQU8sQ0FDbkMsT0FBTTRGLElBQ0w1RixFQUFPQSxHQUFRLEdBQ2ZBLEVBQU8sQ0FBRTFKLEVBQVMwSixFQUFLLE1BQVFBLEVBQUssTUFBSyxFQUFLQSxHQUM5QzhGLEVBQU0sS0FBTTlGLEdBQ055RixHQUNMTyxLQUdLLElBQ1AsRUFHRCxLQUFNLFVBQVcsQ0FDaEIsT0FBQXZCLEVBQUssU0FBVSxLQUFNLFdBQ2QsSUFDUCxFQUdELE1BQU8sVUFBVyxDQUNqQixNQUFPLENBQUMsQ0FBQ2tCLENBQ1QsQ0FDSixFQUVDLE9BQU9sQixDQUNSLEVBR0EsU0FBUzBCLEdBQVVDLEVBQUksQ0FDdEIsT0FBT0EsQ0FDUCxDQUNELFNBQVNDLEdBQVNDLEVBQUssQ0FDdEIsTUFBTUEsQ0FDTixDQUVELFNBQVNDLEdBQVloTyxFQUFPaU8sRUFBU0MsRUFBUUMsRUFBVSxDQUN0RCxJQUFJQyxFQUVKLEdBQUksQ0FHRXBPLEdBQVNsRCxFQUFjc1IsRUFBU3BPLEVBQU0sT0FBTyxFQUNqRG9PLEVBQU8sS0FBTXBPLEdBQVEsS0FBTWlPLEdBQVUsS0FBTUMsR0FHaENsTyxHQUFTbEQsRUFBY3NSLEVBQVNwTyxFQUFNLElBQUksRUFDckRvTyxFQUFPLEtBQU1wTyxFQUFPaU8sRUFBU0MsQ0FBTSxFQVFuQ0QsRUFBUSxNQUFPLE9BQVcsQ0FBRWpPLENBQUssRUFBRyxNQUFPbU8sQ0FBTyxFQU1uRCxPQUFTbk8sRUFBUSxDQUlqQmtPLEVBQU8sTUFBTyxPQUFXLENBQUVsTyxDQUFPLENBQUEsQ0FDbEMsQ0FDRCxDQUVEbkMsRUFBTyxPQUFRLENBRWQsU0FBVSxTQUFVd1EsRUFBTyxDQUMxQixJQUFJQyxFQUFTLENBSVgsQ0FBRSxTQUFVLFdBQVl6USxFQUFPLFVBQVcsUUFBVSxFQUNuREEsRUFBTyxVQUFXLFFBQVUsRUFBRSxDQUFHLEVBQ2xDLENBQUUsVUFBVyxPQUFRQSxFQUFPLFVBQVcsYUFBZSxFQUNyREEsRUFBTyxVQUFXLGVBQWlCLEVBQUcsVUFBWSxFQUNuRCxDQUFFLFNBQVUsT0FBUUEsRUFBTyxVQUFXLGFBQWUsRUFDcERBLEVBQU8sVUFBVyxlQUFpQixFQUFHLFVBQVksQ0FDbkQsRUFDRDBRLEVBQVEsVUFDUkMsRUFBVSxDQUNULE1BQU8sVUFBVyxDQUNqQixPQUFPRCxDQUNQLEVBQ0QsT0FBUSxVQUFXLENBQ2xCLE9BQUFFLEVBQVMsS0FBTSxTQUFXLEVBQUMsS0FBTSxTQUFTLEVBQ25DLElBQ1AsRUFDRCxNQUFTLFNBQVU1SixFQUFLLENBQ3ZCLE9BQU8ySixFQUFRLEtBQU0sS0FBTTNKLENBQUUsQ0FDN0IsRUFHRCxLQUFNLFVBQTZDLENBQ2xELElBQUk2SixFQUFNLFVBRVYsT0FBTzdRLEVBQU8sU0FBVSxTQUFVOFEsRUFBVyxDQUM1QzlRLEVBQU8sS0FBTXlRLEVBQVEsU0FBVXJPLEVBQUkyTyxFQUFRLENBRzFDLElBQUkvSixFQUFLL0gsRUFBWTRSLEVBQUtFLEVBQU8sRUFBSyxDQUFBLEdBQU1GLEVBQUtFLEVBQU8sQ0FBRyxDQUFBLEVBSzNESCxFQUFVRyxFQUFPLENBQUcsQ0FBQSxFQUFJLFVBQVcsQ0FDbEMsSUFBSUMsRUFBV2hLLEdBQU1BLEVBQUcsTUFBTyxLQUFNLFdBQ2hDZ0ssR0FBWS9SLEVBQVkrUixFQUFTLE9BQU8sRUFDNUNBLEVBQVMsUUFBUyxFQUNoQixTQUFVRixFQUFTLE1BQVEsRUFDM0IsS0FBTUEsRUFBUyxPQUFTLEVBQ3hCLEtBQU1BLEVBQVMsUUFFakJBLEVBQVVDLEVBQU8sQ0FBRyxFQUFHLE1BQVEsRUFDOUIsS0FDQS9KLEVBQUssQ0FBRWdLLENBQVEsRUFBSyxTQUM5QixDQUVBLEVBQ0EsR0FDTUgsRUFBTSxJQUNaLENBQVEsRUFBQyxRQUFPLENBQ1gsRUFDRCxLQUFNLFNBQVVJLEVBQWFDLEVBQVlDLEVBQWEsQ0FDckQsSUFBSUMsRUFBVyxFQUNmLFNBQVNoQixFQUFTaUIsRUFBT1QsRUFBVVUsRUFBU0MsRUFBVSxDQUNyRCxPQUFPLFVBQVcsQ0FDakIsSUFBSUMsR0FBTyxLQUNWNUgsR0FBTyxVQUNQNkgsR0FBYSxVQUFXLENBQ3ZCLElBQUlULEdBQVVVLEdBS2QsR0FBSyxFQUFBTCxFQUFRRCxHQVFiLElBSkFKLEdBQVdNLEVBQVEsTUFBT0UsR0FBTTVILEVBQUksRUFJL0JvSCxLQUFhSixFQUFTLFVBQzFCLE1BQU0sSUFBSSxVQUFXLDRCQU90QmMsR0FBT1YsS0FLSixPQUFPQSxJQUFhLFVBQ3JCLE9BQU9BLElBQWEsYUFDckJBLEdBQVMsS0FHTC9SLEVBQVl5UyxJQUdYSCxFQUNKRyxHQUFLLEtBQ0pWLEdBQ0FaLEVBQVNnQixFQUFVUixFQUFVYixHQUFVd0IsQ0FBUyxFQUNoRG5CLEVBQVNnQixFQUFVUixFQUFVWCxHQUFTc0IsQ0FBUyxDQUMzRCxHQU1XSCxJQUVBTSxHQUFLLEtBQ0pWLEdBQ0FaLEVBQVNnQixFQUFVUixFQUFVYixHQUFVd0IsQ0FBUyxFQUNoRG5CLEVBQVNnQixFQUFVUixFQUFVWCxHQUFTc0IsQ0FBUyxFQUMvQ25CLEVBQVNnQixFQUFVUixFQUFVYixHQUM1QmEsRUFBUyxVQUFZLENBQ2xDLElBUWVVLElBQVl2QixLQUNoQnlCLEdBQU8sT0FDUDVILEdBQU8sQ0FBRW9ILE1BS1JPLEdBQVdYLEVBQVMsYUFBZVksR0FBTTVILEVBQUksR0FFaEQsRUFHRCtILEdBQVVKLEVBQ1RFLEdBQ0EsVUFBVyxDQUNWLEdBQUksQ0FDSEEsSUFDQSxPQUFTRyxHQUFJLENBRVI1UixFQUFPLFNBQVMsZUFDcEJBLEVBQU8sU0FBUyxjQUFlNFIsR0FDOUJELEdBQVEsS0FBSyxFQU1WTixFQUFRLEdBQUtELElBSVpFLElBQVlyQixLQUNoQnVCLEdBQU8sT0FDUDVILEdBQU8sQ0FBRWdJLEtBR1ZoQixFQUFTLFdBQVlZLEdBQU01SCxJQUU1QixDQUNYLEVBTVl5SCxFQUNKTSxNQUtLM1IsRUFBTyxTQUFTLGFBQ3BCMlIsR0FBUSxNQUFRM1IsRUFBTyxTQUFTLGFBQVksRUFNakNBLEVBQU8sU0FBUyxlQUMzQjJSLEdBQVEsTUFBUTNSLEVBQU8sU0FBUyxhQUFZLEdBRTdDOUIsRUFBTyxXQUFZeVQsSUFFM0IsQ0FDTSxDQUVELE9BQU8zUixFQUFPLFNBQVUsU0FBVThRLEVBQVcsQ0FHNUNMLEVBQVEsQ0FBQyxFQUFJLENBQUMsRUFBRyxJQUNoQkwsRUFDQyxFQUNBVSxFQUNBN1IsRUFBWWtTLENBQVksRUFDdkJBLEVBQ0FwQixHQUNEZSxFQUFTLFVBQ1QsQ0FDUixFQUdNTCxFQUFRLENBQUMsRUFBSSxDQUFDLEVBQUcsSUFDaEJMLEVBQ0MsRUFDQVUsRUFDQTdSLEVBQVlnUyxDQUFhLEVBQ3hCQSxFQUNBbEIsRUFDRCxDQUNSLEVBR01VLEVBQVEsQ0FBQyxFQUFJLENBQUMsRUFBRyxJQUNoQkwsRUFDQyxFQUNBVSxFQUNBN1IsRUFBWWlTLENBQVksRUFDdkJBLEVBQ0FqQixFQUNELENBQ1IsQ0FDQSxDQUFRLEVBQUMsUUFBTyxDQUNYLEVBSUQsUUFBUyxTQUFVL1EsRUFBTSxDQUN4QixPQUFPQSxHQUFPLEtBQU9jLEVBQU8sT0FBUWQsRUFBS3lSLENBQVMsRUFBR0EsQ0FDckQsQ0FDRCxFQUNEQyxFQUFXLENBQUEsRUFHWixPQUFBNVEsRUFBTyxLQUFNeVEsRUFBUSxTQUFVL1EsRUFBR3FSLEVBQVEsQ0FDekMsSUFBSXRCLEVBQU9zQixFQUFPLENBQUcsRUFDcEJjLEVBQWNkLEVBQU8sR0FLdEJKLEVBQVNJLEVBQU8sQ0FBRyxDQUFBLEVBQUt0QixFQUFLLElBR3hCb0MsR0FDSnBDLEVBQUssSUFDSixVQUFXLENBSVZpQixFQUFRbUIsQ0FDUixFQUlEcEIsRUFBUSxFQUFJL1EsR0FBSyxDQUFHLEVBQUMsUUFJckIrUSxFQUFRLEVBQUkvUSxHQUFLLENBQUcsRUFBQyxRQUdyQitRLEVBQVEsQ0FBQyxFQUFJLENBQUMsRUFBRyxLQUdqQkEsRUFBUSxDQUFDLEVBQUksQ0FBQyxFQUFHLElBQ3RCLEVBTUdoQixFQUFLLElBQUtzQixFQUFPLENBQUcsRUFBQyxJQUFJLEVBS3pCSCxFQUFVRyxFQUFPLENBQUcsQ0FBQSxFQUFLLFVBQVcsQ0FDbkMsT0FBQUgsRUFBVUcsRUFBTyxDQUFHLEVBQUcsTUFBUSxFQUFFLE9BQVNILEVBQVcsT0FBWSxLQUFNLFdBQ2hFLElBQ1gsRUFLR0EsRUFBVUcsRUFBTyxDQUFDLEVBQUssTUFBUSxFQUFHdEIsRUFBSyxRQUMxQyxHQUdFa0IsRUFBUSxRQUFTQyxHQUdaSixHQUNKQSxFQUFLLEtBQU1JLEVBQVVBLEdBSWZBLENBQ1AsRUFHRCxLQUFNLFNBQVVrQixFQUFjLENBQzdCLElBR0NDLEVBQVksVUFBVSxPQUd0QnJTLEVBQUlxUyxFQUdKQyxFQUFrQixNQUFPdFMsQ0FBRyxFQUM1QnVTLEVBQWdCM1QsRUFBTSxLQUFNLFNBQVcsRUFHdkM0VCxFQUFVbFMsRUFBTyxTQUFVLEVBRzNCbVMsRUFBYSxTQUFVelMsRUFBSSxDQUMxQixPQUFPLFNBQVV5QyxFQUFRLENBQ3hCNlAsRUFBaUJ0UyxDQUFHLEVBQUcsS0FDdkJ1UyxFQUFldlMsR0FBTSxVQUFVLE9BQVMsRUFBSXBCLEVBQU0sS0FBTSxTQUFXLEVBQUc2RCxFQUM5RCxFQUFFNFAsR0FDVEcsRUFBUSxZQUFhRixFQUFpQkMsRUFFNUMsQ0FDQSxFQUdFLEdBQUtGLEdBQWEsSUFDakI1QixHQUFZMkIsRUFBYUksRUFBUSxLQUFNQyxFQUFZelMsRUFBSyxFQUFDLFFBQVN3UyxFQUFRLE9BQ3pFLENBQUNILENBQVMsRUFHTkcsRUFBUSxNQUFLLElBQU8sV0FDeEJqVCxFQUFZZ1QsRUFBZXZTLENBQUcsR0FBSXVTLEVBQWV2UyxDQUFDLEVBQUcsT0FFckQsT0FBT3dTLEVBQVEsT0FLakIsS0FBUXhTLEtBQ1B5USxHQUFZOEIsRUFBZXZTLEdBQUt5UyxFQUFZelMsR0FBS3dTLEVBQVEsUUFHMUQsT0FBT0EsRUFBUSxTQUNmLENBQ0YsR0FLQSxJQUFJRSxHQUFjLHlEQUtsQnBTLEVBQU8sU0FBUyxjQUFnQixTQUFVcVMsRUFBT0MsRUFBYSxDQUl4RHBVLEVBQU8sU0FBV0EsRUFBTyxRQUFRLE1BQVFtVSxHQUFTRCxHQUFZLEtBQU1DLEVBQU0sSUFBSSxHQUNsRm5VLEVBQU8sUUFBUSxLQUFNLDhCQUFnQ21VLEVBQU0sUUFDMURBLEVBQU0sTUFBT0MsRUFFaEIsRUFLQXRTLEVBQU8sZUFBaUIsU0FBVXFTLEVBQVEsQ0FDekNuVSxFQUFPLFdBQVksVUFBVyxDQUM3QixNQUFNbVUsQ0FDUixFQUNBLEVBTUEsSUFBSUUsR0FBWXZTLEVBQU8sV0FFdkJBLEVBQU8sR0FBRyxNQUFRLFNBQVVnSCxFQUFLLENBRWhDLE9BQUF1TCxHQUNFLEtBQU12TCxDQUFJLEVBS1YsTUFBTyxTQUFVcUwsRUFBUSxDQUN6QnJTLEVBQU8sZUFBZ0JxUyxFQUMxQixHQUVRLElBQ1IsRUFFQXJTLEVBQU8sT0FBUSxDQUdkLFFBQVMsR0FJVCxVQUFXLEVBR1gsTUFBTyxTQUFVd1MsRUFBTyxFQUdsQkEsSUFBUyxHQUFPLEVBQUV4UyxFQUFPLFVBQVlBLEVBQU8sV0FLakRBLEVBQU8sUUFBVSxHQUdaLEVBQUF3UyxJQUFTLElBQVEsRUFBRXhTLEVBQU8sVUFBWSxJQUszQ3VTLEdBQVUsWUFBYW5ULEVBQVUsQ0FBRVksQ0FBUSxDQUFBLEVBQzNDLENBQ0YsR0FFQUEsRUFBTyxNQUFNLEtBQU91UyxHQUFVLEtBRzlCLFNBQVNFLElBQVksQ0FDcEJyVCxFQUFTLG9CQUFxQixtQkFBb0JxVCxJQUNsRHZVLEVBQU8sb0JBQXFCLE9BQVF1VSxJQUNwQ3pTLEVBQU8sTUFBSyxDQUNaLENBTUlaLEVBQVMsYUFBZSxZQUMxQkEsRUFBUyxhQUFlLFdBQWEsQ0FBQ0EsRUFBUyxnQkFBZ0IsU0FHakVsQixFQUFPLFdBQVk4QixFQUFPLFFBSzFCWixFQUFTLGlCQUFrQixtQkFBb0JxVCxJQUcvQ3ZVLEVBQU8saUJBQWtCLE9BQVF1VSxLQVFsQyxJQUFJQyxHQUFTLFNBQVV0UyxFQUFPNEcsRUFBSUYsRUFBSzNFLEVBQU93USxFQUFXQyxFQUFVQyxFQUFNLENBQ3hFLElBQUluVCxFQUFJLEVBQ1BlLEVBQU1MLEVBQU0sT0FDWjBTLEVBQU9oTSxHQUFPLEtBR2YsR0FBS2pILEVBQVFpSCxDQUFLLElBQUssU0FBVyxDQUNqQzZMLEVBQVksR0FDWixJQUFNalQsS0FBS29ILEVBQ1Y0TCxHQUFRdFMsRUFBTzRHLEVBQUl0SCxFQUFHb0gsRUFBS3BILENBQUMsRUFBSSxHQUFNa1QsRUFBVUMsRUFJbkQsU0FBYTFRLElBQVUsU0FDckJ3USxFQUFZLEdBRU4xVCxFQUFZa0QsS0FDakIwUSxFQUFNLElBR0ZDLElBR0NELEdBQ0o3TCxFQUFHLEtBQU01RyxFQUFPK0IsR0FDaEI2RSxFQUFLLE9BSUw4TCxFQUFPOUwsRUFDUEEsRUFBSyxTQUFVekcsRUFBTXdTLEVBQU01USxFQUFRLENBQ2xDLE9BQU8yUSxFQUFLLEtBQU05UyxFQUFRTyxDQUFNLEVBQUU0QixDQUFLLENBQzVDLElBSU82RSxHQUNKLEtBQVF0SCxFQUFJZSxFQUFLZixJQUNoQnNILEVBQ0M1RyxFQUFPVixHQUFLb0gsRUFBSytMLEVBQ2hCMVEsRUFDQUEsRUFBTSxLQUFNL0IsRUFBT1YsR0FBS0EsRUFBR3NILEVBQUk1RyxFQUFPVixHQUFLb0gsRUFBTyxDQUN4RCxFQUtDLE9BQUs2TCxFQUNHdlMsRUFJSDBTLEVBQ0c5TCxFQUFHLEtBQU01RyxHQUdWSyxFQUFNdUcsRUFBSTVHLEVBQU8sQ0FBQyxFQUFJMEcsQ0FBSyxFQUFHOEwsQ0FDdEMsRUFJSUksR0FBWSxRQUNmQyxHQUFhLFlBR2QsU0FBU0MsR0FBWUMsRUFBTUMsRUFBUyxDQUNuQyxPQUFPQSxFQUFPLGFBQ2QsQ0FLRCxTQUFTQyxHQUFXQyxFQUFTLENBQzVCLE9BQU9BLEVBQU8sUUFBU04sR0FBVyxLQUFPLEVBQUMsUUFBU0MsR0FBWUMsR0FDL0QsQ0FDRCxJQUFJSyxHQUFhLFNBQVVDLEVBQVEsQ0FRbEMsT0FBT0EsRUFBTSxXQUFhLEdBQUtBLEVBQU0sV0FBYSxHQUFLLENBQUcsQ0FBQ0EsRUFBTSxRQUNsRSxFQUtBLFNBQVNDLElBQU8sQ0FDZixLQUFLLFFBQVV6VCxFQUFPLFFBQVV5VCxHQUFLLEtBQ3JDLENBRURBLEdBQUssSUFBTSxFQUVYQSxHQUFLLFVBQVksQ0FFaEIsTUFBTyxTQUFVRCxFQUFRLENBR3hCLElBQUlyUixFQUFRcVIsRUFBTyxLQUFLLE9BQU8sRUFHL0IsT0FBTXJSLElBQ0xBLEVBQVEsQ0FBQSxFQUtIb1IsR0FBWUMsS0FJWEEsRUFBTSxTQUNWQSxFQUFPLEtBQUssT0FBUyxFQUFHclIsRUFNeEIsT0FBTyxlQUFnQnFSLEVBQU8sS0FBSyxRQUFTLENBQzNDLE1BQU9yUixFQUNQLGFBQWMsRUFDcEIsS0FLU0EsQ0FDUCxFQUNELElBQUssU0FBVXFSLEVBQU9FLEVBQU12UixFQUFRLENBQ25DLElBQUl3UixFQUNIOU0sRUFBUSxLQUFLLE1BQU8yTSxHQUlyQixHQUFLLE9BQU9FLEdBQVMsU0FDcEI3TSxFQUFPd00sR0FBV0ssQ0FBTSxDQUFBLEVBQUt2UixNQU03QixLQUFNd1IsS0FBUUQsRUFDYjdNLEVBQU93TSxHQUFXTSxDQUFJLENBQUksRUFBR0QsRUFBTUMsQ0FBSSxFQUd6QyxPQUFPOU0sQ0FDUCxFQUNELElBQUssU0FBVTJNLEVBQU8xTSxFQUFNLENBQzNCLE9BQU9BLElBQVEsT0FDZCxLQUFLLE1BQU8wTSxDQUFPLEVBR25CQSxFQUFPLEtBQUssT0FBTyxHQUFNQSxFQUFPLEtBQUssU0FBV0gsR0FBV3ZNLENBQUcsRUFDL0QsRUFDRCxPQUFRLFNBQVUwTSxFQUFPMU0sRUFBSzNFLEVBQVEsQ0FhckMsT0FBSzJFLElBQVEsUUFDUEEsR0FBTyxPQUFPQSxHQUFRLFVBQWMzRSxJQUFVLE9BRTVDLEtBQUssSUFBS3FSLEVBQU8xTSxDQUFHLEdBUzVCLEtBQUssSUFBSzBNLEVBQU8xTSxFQUFLM0UsQ0FBSyxFQUlwQkEsSUFBVSxPQUFZQSxFQUFRMkUsRUFDckMsRUFDRCxPQUFRLFNBQVUwTSxFQUFPMU0sRUFBTSxDQUM5QixJQUFJcEgsRUFDSG1ILEVBQVEyTSxFQUFPLEtBQUssU0FFckIsR0FBSzNNLElBQVUsT0FJZixJQUFLQyxJQUFRLE9Bb0JaLElBakJLLE1BQU0sUUFBU0EsR0FJbkJBLEVBQU1BLEVBQUksSUFBS3VNLEtBRWZ2TSxFQUFNdU0sR0FBV3ZNLEdBSWpCQSxFQUFNQSxLQUFPRCxFQUNaLENBQUVDLENBQUssRUFDTEEsRUFBSSxNQUFPa0ksRUFBZSxHQUFJLENBQUUsR0FHcEN0UCxFQUFJb0gsRUFBSSxPQUVBcEgsS0FDUCxPQUFPbUgsRUFBT0MsRUFBS3BILENBQUMsSUFLakJvSCxJQUFRLFFBQWE5RyxFQUFPLGNBQWU2RyxDQUFLLEtBTS9DMk0sRUFBTSxTQUNWQSxFQUFPLEtBQUssT0FBUyxFQUFHLE9BRXhCLE9BQU9BLEVBQU8sS0FBSyxVQUdyQixFQUNELFFBQVMsU0FBVUEsRUFBUSxDQUMxQixJQUFJM00sRUFBUTJNLEVBQU8sS0FBSyxPQUFPLEVBQy9CLE9BQU8zTSxJQUFVLFFBQWEsQ0FBQzdHLEVBQU8sY0FBZTZHLENBQUssQ0FDMUQsQ0FDRixFQUNBLElBQUkrTSxHQUFXLElBQUlILEdBRWZJLEdBQVcsSUFBSUosR0FjZkssR0FBUyxnQ0FDWkMsR0FBYSxTQUVkLFNBQVNDLEdBQVNOLEVBQU8sQ0FDeEIsT0FBS0EsSUFBUyxPQUNOLEdBR0hBLElBQVMsUUFDTixHQUdIQSxJQUFTLE9BQ04sS0FJSEEsSUFBUyxDQUFDQSxFQUFPLEdBQ2QsQ0FBQ0EsRUFHSkksR0FBTyxLQUFNSixHQUNWLEtBQUssTUFBT0EsR0FHYkEsQ0FDUCxDQUVELFNBQVNPLEdBQVUxVCxFQUFNdUcsRUFBSzRNLEVBQU8sQ0FDcEMsSUFBSTlTLEVBSUosR0FBSzhTLElBQVMsUUFBYW5ULEVBQUssV0FBYSxFQUk1QyxHQUhBSyxFQUFPLFFBQVVrRyxFQUFJLFFBQVNpTixHQUFZLEtBQUssRUFBRyxjQUNsREwsRUFBT25ULEVBQUssYUFBY0ssR0FFckIsT0FBTzhTLEdBQVMsU0FBVyxDQUMvQixHQUFJLENBQ0hBLEVBQU9NLEdBQVNOLEVBQ3BCLE1BQWlCLENBQUUsQ0FHaEJHLEdBQVMsSUFBS3RULEVBQU11RyxFQUFLNE0sQ0FBSSxDQUNoQyxNQUNHQSxFQUFPLE9BR1QsT0FBT0EsQ0FDUCxDQUVEMVQsRUFBTyxPQUFRLENBQ2QsUUFBUyxTQUFVTyxFQUFPLENBQ3pCLE9BQU9zVCxHQUFTLFFBQVN0VCxDQUFJLEdBQU1xVCxHQUFTLFFBQVNyVCxFQUNyRCxFQUVELEtBQU0sU0FBVUEsRUFBTUssRUFBTThTLEVBQU8sQ0FDbEMsT0FBT0csR0FBUyxPQUFRdFQsRUFBTUssRUFBTThTLENBQUksQ0FDeEMsRUFFRCxXQUFZLFNBQVVuVCxFQUFNSyxFQUFPLENBQ2xDaVQsR0FBUyxPQUFRdFQsRUFBTUssRUFDdkIsRUFJRCxNQUFPLFNBQVVMLEVBQU1LLEVBQU04UyxFQUFPLENBQ25DLE9BQU9FLEdBQVMsT0FBUXJULEVBQU1LLEVBQU04UyxDQUFJLENBQ3hDLEVBRUQsWUFBYSxTQUFVblQsRUFBTUssRUFBTyxDQUNuQ2dULEdBQVMsT0FBUXJULEVBQU1LLEVBQ3ZCLENBQ0YsR0FFQVosRUFBTyxHQUFHLE9BQVEsQ0FDakIsS0FBTSxTQUFVOEcsRUFBSzNFLEVBQVEsQ0FDNUIsSUFBSXpDLEVBQUdrQixFQUFNOFMsRUFDWm5ULEVBQU8sS0FBTSxDQUFHLEVBQ2hCMlQsRUFBUTNULEdBQVFBLEVBQUssV0FHdEIsR0FBS3VHLElBQVEsT0FBWSxDQUN4QixHQUFLLEtBQUssU0FDVDRNLEVBQU9HLEdBQVMsSUFBS3RULEdBRWhCQSxFQUFLLFdBQWEsR0FBSyxDQUFDcVQsR0FBUyxJQUFLclQsRUFBTSxpQkFBbUIsQ0FFbkUsSUFEQWIsRUFBSXdVLEVBQU0sT0FDRnhVLEtBSUZ3VSxFQUFPeFUsS0FDWGtCLEVBQU9zVCxFQUFPeFUsQ0FBRyxFQUFDLEtBQ2JrQixFQUFLLFFBQVMsT0FBTyxJQUFPLElBQ2hDQSxFQUFPeVMsR0FBV3pTLEVBQUssTUFBTyxDQUFHLENBQUEsRUFDakNxVCxHQUFVMVQsRUFBTUssRUFBTThTLEVBQU05UyxDQUFNLENBQUEsSUFJckNnVCxHQUFTLElBQUtyVCxFQUFNLGVBQWdCLEVBQUksQ0FDeEMsQ0FHRixPQUFPbVQsQ0FDUCxDQUdELE9BQUssT0FBTzVNLEdBQVEsU0FDWixLQUFLLEtBQU0sVUFBVyxDQUM1QitNLEdBQVMsSUFBSyxLQUFNL00sRUFDeEIsR0FHUzRMLEdBQVEsS0FBTSxTQUFVdlEsRUFBUSxDQUN0QyxJQUFJdVIsRUFPSixHQUFLblQsR0FBUTRCLElBQVUsT0FZdEIsT0FSQXVSLEVBQU9HLEdBQVMsSUFBS3RULEVBQU11RyxDQUFHLEVBQ3pCNE0sSUFBUyxTQU1kQSxFQUFPTyxHQUFVMVQsRUFBTXVHLEdBQ2xCNE0sSUFBUyxRQUNOQSxFQUlSLE9BSUQsS0FBSyxLQUFNLFVBQVcsQ0FHckJHLEdBQVMsSUFBSyxLQUFNL00sRUFBSzNFLENBQUssQ0FDbEMsRUFDQSxFQUFLLEtBQU1BLEVBQU8sVUFBVSxPQUFTLEVBQUcsS0FBTSxHQUM1QyxFQUVELFdBQVksU0FBVTJFLEVBQU0sQ0FDM0IsT0FBTyxLQUFLLEtBQU0sVUFBVyxDQUM1QitNLEdBQVMsT0FBUSxLQUFNL00sRUFDMUIsRUFDRSxDQUNGLEdBR0E5RyxFQUFPLE9BQVEsQ0FDZCxNQUFPLFNBQVVPLEVBQU04QixFQUFNcVIsRUFBTyxDQUNuQyxJQUFJaEUsRUFFSixHQUFLblAsRUFDSixPQUFBOEIsR0FBU0EsR0FBUSxNQUFTLFFBQzFCcU4sRUFBUWtFLEdBQVMsSUFBS3JULEVBQU04QixDQUFJLEVBRzNCcVIsSUFDQyxDQUFDaEUsR0FBUyxNQUFNLFFBQVNnRSxDQUFJLEVBQ2pDaEUsRUFBUWtFLEdBQVMsT0FBUXJULEVBQU04QixFQUFNckMsRUFBTyxVQUFXMFQsQ0FBSSxHQUUzRGhFLEVBQU0sS0FBTWdFLElBR1BoRSxHQUFTLENBQUEsQ0FFakIsRUFFRCxRQUFTLFNBQVVuUCxFQUFNOEIsRUFBTyxDQUMvQkEsRUFBT0EsR0FBUSxLQUVmLElBQUlxTixFQUFRMVAsRUFBTyxNQUFPTyxFQUFNOEIsQ0FBTSxFQUNyQzhSLEVBQWN6RSxFQUFNLE9BQ3BCMUksRUFBSzBJLEVBQU0sTUFBTyxFQUNsQjBFLEVBQVFwVSxFQUFPLFlBQWFPLEVBQU04QixDQUFNLEVBQ3hDZ1MsRUFBTyxVQUFXLENBQ2pCclUsRUFBTyxRQUFTTyxFQUFNOEIsRUFDMUIsRUFHTzJFLElBQU8sZUFDWEEsRUFBSzBJLEVBQU0sUUFDWHlFLEtBR0luTixJQUlDM0UsSUFBUyxNQUNicU4sRUFBTSxRQUFTLGNBSWhCLE9BQU8wRSxFQUFNLEtBQ2JwTixFQUFHLEtBQU16RyxFQUFNOFQsRUFBTUQsQ0FBSyxHQUd0QixDQUFDRCxHQUFlQyxHQUNwQkEsRUFBTSxNQUFNLE1BRWIsRUFHRCxZQUFhLFNBQVU3VCxFQUFNOEIsRUFBTyxDQUNuQyxJQUFJeUUsRUFBTXpFLEVBQU8sYUFDakIsT0FBT3VSLEdBQVMsSUFBS3JULEVBQU11RyxDQUFLLEdBQUk4TSxHQUFTLE9BQVFyVCxFQUFNdUcsRUFBSyxDQUMvRCxNQUFPOUcsRUFBTyxVQUFXLGFBQWUsRUFBQyxJQUFLLFVBQVcsQ0FDeEQ0VCxHQUFTLE9BQVFyVCxFQUFNLENBQUU4QixFQUFPLFFBQVN5RSxDQUFHLEVBQ2hELENBQU0sQ0FDTixFQUNFLENBQ0YsR0FFQTlHLEVBQU8sR0FBRyxPQUFRLENBQ2pCLE1BQU8sU0FBVXFDLEVBQU1xUixFQUFPLENBQzdCLElBQUlZLEVBQVMsRUFRYixPQU5LLE9BQU9qUyxHQUFTLFdBQ3BCcVIsRUFBT3JSLEVBQ1BBLEVBQU8sS0FDUGlTLEtBR0ksVUFBVSxPQUFTQSxFQUNoQnRVLEVBQU8sTUFBTyxLQUFNLENBQUcsRUFBRXFDLENBQUksRUFHOUJxUixJQUFTLE9BQ2YsS0FDQSxLQUFLLEtBQU0sVUFBVyxDQUNyQixJQUFJaEUsRUFBUTFQLEVBQU8sTUFBTyxLQUFNcUMsRUFBTXFSLEdBR3RDMVQsRUFBTyxZQUFhLEtBQU1xQyxHQUVyQkEsSUFBUyxNQUFRcU4sRUFBTyxDQUFDLElBQU8sY0FDcEMxUCxFQUFPLFFBQVMsS0FBTXFDLEVBRTNCLEVBQ0UsRUFDRCxRQUFTLFNBQVVBLEVBQU8sQ0FDekIsT0FBTyxLQUFLLEtBQU0sVUFBVyxDQUM1QnJDLEVBQU8sUUFBUyxLQUFNcUMsRUFDekIsRUFDRSxFQUNELFdBQVksU0FBVUEsRUFBTyxDQUM1QixPQUFPLEtBQUssTUFBT0EsR0FBUSxLQUFNLENBQUUsQ0FBQSxDQUNuQyxFQUlELFFBQVMsU0FBVUEsRUFBTW5ELEVBQU0sQ0FDOUIsSUFBSXFWLEVBQ0hDLEVBQVEsRUFDUkMsRUFBUXpVLEVBQU8sU0FBVSxFQUN6QmtJLEVBQVcsS0FDWHhJLEVBQUksS0FBSyxPQUNUMFEsRUFBVSxVQUFXLENBQ1osRUFBRW9FLEdBQ1RDLEVBQU0sWUFBYXZNLEVBQVUsQ0FBRUEsQ0FBVSxDQUFBLENBRTlDLEVBUUUsSUFOSyxPQUFPN0YsR0FBUyxXQUNwQm5ELEVBQU1tRCxFQUNOQSxFQUFPLFFBRVJBLEVBQU9BLEdBQVEsS0FFUDNDLEtBQ1A2VSxFQUFNWCxHQUFTLElBQUsxTCxFQUFVeEksR0FBSzJDLEVBQU8sY0FDckNrUyxHQUFPQSxFQUFJLFFBQ2ZDLElBQ0FELEVBQUksTUFBTSxJQUFLbkUsSUFHakIsT0FBQUEsSUFDT3FFLEVBQU0sUUFBU3ZWLEVBQ3RCLENBQ0YsR0FDQSxJQUFJd1YsR0FBUyxzQ0FBd0MsT0FFakRDLEdBQVUsSUFBSSxPQUFRLGlCQUFtQkQsR0FBTyxjQUFlLEtBRy9ERSxHQUFZLENBQUUsTUFBTyxRQUFTLFNBQVUsTUFBTSxFQUU5Q2xSLEdBQWtCdEUsRUFBUyxnQkFJMUJ5VixHQUFhLFNBQVV0VSxFQUFPLENBQ2hDLE9BQU9QLEVBQU8sU0FBVU8sRUFBSyxjQUFlQSxDQUFJLENBQ2hELEVBQ0R1VSxHQUFXLENBQUUsU0FBVSxJQU9uQnBSLEdBQWdCLGNBQ3BCbVIsR0FBYSxTQUFVdFUsRUFBTyxDQUM3QixPQUFPUCxFQUFPLFNBQVVPLEVBQUssY0FBZUEsQ0FBTSxHQUNqREEsRUFBSyxZQUFhdVUsTUFBZXZVLEVBQUssYUFDMUMsR0FFQSxJQUFJd1UsR0FBcUIsU0FBVXhVLEVBQU0yRyxFQUFLLENBSTVDLE9BQUEzRyxFQUFPMkcsR0FBTTNHLEVBR05BLEVBQUssTUFBTSxVQUFZLFFBQzdCQSxFQUFLLE1BQU0sVUFBWSxJQU12QnNVLEdBQVl0VSxDQUFNLEdBRWxCUCxFQUFPLElBQUtPLEVBQU0sU0FBUyxJQUFPLE1BQ3JDLEVBSUEsU0FBU3lVLEdBQVd6VSxFQUFNb1QsRUFBTXNCLEVBQVlDLEVBQVEsQ0FDbkQsSUFBSUMsRUFBVUMsRUFDYkMsRUFBZ0IsR0FDaEJDLEVBQWVKLEVBQ2QsVUFBVyxDQUNWLE9BQU9BLEVBQU0sS0FDYixFQUNELFVBQVcsQ0FDVixPQUFPbFYsRUFBTyxJQUFLTyxFQUFNb1QsRUFBTSxFQUFFLENBQ2pDLEVBQ0Y0QixFQUFVRCxFQUFjLEVBQ3hCRSxFQUFPUCxHQUFjQSxFQUFZLENBQUcsSUFBTWpWLEVBQU8sVUFBVzJULENBQUksRUFBSyxHQUFLLE1BRzFFOEIsRUFBZ0JsVixFQUFLLFdBQ2xCUCxFQUFPLFVBQVcyVCxDQUFJLEdBQU02QixJQUFTLE1BQVEsQ0FBQ0QsSUFDaERaLEdBQVEsS0FBTTNVLEVBQU8sSUFBS08sRUFBTW9ULENBQUksR0FFdEMsR0FBSzhCLEdBQWlCQSxFQUFlLENBQUMsSUFBT0QsRUFBTyxDQVluRCxJQVJBRCxFQUFVQSxFQUFVLEVBR3BCQyxFQUFPQSxHQUFRQyxFQUFlLEdBRzlCQSxFQUFnQixDQUFDRixHQUFXLEVBRXBCRixLQUlQclYsRUFBTyxNQUFPTyxFQUFNb1QsRUFBTThCLEVBQWdCRCxDQUFJLEdBQ3ZDLEVBQUlKLElBQVksR0FBTUEsRUFBUUUsRUFBYyxFQUFHQyxHQUFXLE1BQVcsSUFDM0VGLEVBQWdCLEdBRWpCSSxFQUFnQkEsRUFBZ0JMLEVBSWpDSyxFQUFnQkEsRUFBZ0IsRUFDaEN6VixFQUFPLE1BQU9PLEVBQU1vVCxFQUFNOEIsRUFBZ0JELENBQUksRUFHOUNQLEVBQWFBLEdBQWMsRUFDM0IsQ0FFRCxPQUFLQSxJQUNKUSxFQUFnQixDQUFDQSxHQUFpQixDQUFDRixHQUFXLEVBRzlDSixFQUFXRixFQUFZLENBQUcsRUFDekJRLEdBQWtCUixFQUFZLENBQUcsRUFBRyxHQUFNQSxFQUFZLENBQUcsRUFDekQsQ0FBQ0EsRUFBWSxHQUNUQyxJQUNKQSxFQUFNLEtBQU9NLEVBQ2JOLEVBQU0sTUFBUU8sRUFDZFAsRUFBTSxJQUFNQyxJQUdQQSxDQUNQLENBR0QsSUFBSU8sR0FBb0IsQ0FBQSxFQUV4QixTQUFTQyxHQUFtQnBWLEVBQU8sQ0FDbEMsSUFBSTRMLEVBQ0gxTSxFQUFNYyxFQUFLLGNBQ1grQixFQUFXL0IsRUFBSyxTQUNoQnFWLEVBQVVGLEdBQW1CcFQsR0FFOUIsT0FBS3NULElBSUx6SixFQUFPMU0sRUFBSSxLQUFLLFlBQWFBLEVBQUksY0FBZTZDLENBQVEsR0FDeERzVCxFQUFVNVYsRUFBTyxJQUFLbU0sRUFBTSxTQUFTLEVBRXJDQSxFQUFLLFdBQVcsWUFBYUEsR0FFeEJ5SixJQUFZLFNBQ2hCQSxFQUFVLFNBRVhGLEdBQW1CcFQsQ0FBVSxFQUFHc1QsRUFFekJBLEVBQ1AsQ0FFRCxTQUFTQyxHQUFVM04sRUFBVTROLEVBQU8sQ0FPbkMsUUFOSUYsRUFBU3JWLEVBQ1p3VixFQUFTLENBQUUsRUFDWGpHLEVBQVEsRUFDUjVPLEVBQVNnSCxFQUFTLE9BR1g0SCxFQUFRNU8sRUFBUTRPLElBQ3ZCdlAsRUFBTzJILEVBQVU0SCxHQUNYdlAsRUFBSyxRQUlYcVYsRUFBVXJWLEVBQUssTUFBTSxRQUNoQnVWLEdBS0NGLElBQVksU0FDaEJHLEVBQVFqRyxDQUFLLEVBQUs4RCxHQUFTLElBQUtyVCxFQUFNLFNBQVcsR0FBSSxLQUMvQ3dWLEVBQVFqRyxLQUNidlAsRUFBSyxNQUFNLFFBQVUsS0FHbEJBLEVBQUssTUFBTSxVQUFZLElBQU13VSxHQUFvQnhVLEtBQ3JEd1YsRUFBUWpHLENBQUssRUFBSzZGLEdBQW1CcFYsQ0FBSSxJQUdyQ3FWLElBQVksU0FDaEJHLEVBQVFqRyxDQUFPLEVBQUcsT0FHbEI4RCxHQUFTLElBQUtyVCxFQUFNLFVBQVdxVixDQUFPLElBTXpDLElBQU05RixFQUFRLEVBQUdBLEVBQVE1TyxFQUFRNE8sSUFDM0JpRyxFQUFRakcsQ0FBTyxHQUFJLE9BQ3ZCNUgsRUFBVTRILENBQUssRUFBRyxNQUFNLFFBQVVpRyxFQUFRakcsSUFJNUMsT0FBTzVILENBQ1AsQ0FFRGxJLEVBQU8sR0FBRyxPQUFRLENBQ2pCLEtBQU0sVUFBVyxDQUNoQixPQUFPNlYsR0FBVSxLQUFNLEdBQ3ZCLEVBQ0QsS0FBTSxVQUFXLENBQ2hCLE9BQU9BLEdBQVUsS0FDakIsRUFDRCxPQUFRLFNBQVVuRixFQUFRLENBQ3pCLE9BQUssT0FBT0EsR0FBVSxVQUNkQSxFQUFRLEtBQUssS0FBTSxFQUFHLEtBQUssS0FBSSxFQUdoQyxLQUFLLEtBQU0sVUFBVyxDQUN2QnFFLEdBQW9CLE1BQ3hCL1UsRUFBUSxNQUFPLE9BRWZBLEVBQVEsTUFBTyxNQUVuQixFQUNFLENBQ0YsR0FDQSxJQUFJZ1csR0FBbUIsd0JBRW5CQyxHQUFhLGlDQUViQyxHQUFnQixzQ0FJbEIsVUFBVyxDQUNaLElBQUlDLEVBQVcvVyxFQUFTLHVCQUF3QixFQUMvQ2dYLEVBQU1ELEVBQVMsWUFBYS9XLEVBQVMsY0FBZSxLQUFLLENBQUksRUFDN0QySSxFQUFRM0ksRUFBUyxjQUFlLFNBTWpDMkksRUFBTSxhQUFjLE9BQVEsU0FDNUJBLEVBQU0sYUFBYyxVQUFXLFdBQy9CQSxFQUFNLGFBQWMsT0FBUSxLQUU1QnFPLEVBQUksWUFBYXJPLEdBSWpCL0ksRUFBUSxXQUFhb1gsRUFBSSxVQUFXLElBQU8sVUFBVyxFQUFJLEVBQUcsVUFBVSxRQUl2RUEsRUFBSSxVQUFZLHlCQUNoQnBYLEVBQVEsZUFBaUIsQ0FBQyxDQUFDb1gsRUFBSSxVQUFXLEVBQU0sRUFBQyxVQUFVLGFBSzNEQSxFQUFJLFVBQVksb0JBQ2hCcFgsRUFBUSxPQUFTLENBQUMsQ0FBQ29YLEVBQUksU0FDeEIsS0FJQSxJQUFJQyxHQUFVLENBS2IsTUFBTyxDQUFFLEVBQUcsVUFBVyxVQUFZLEVBQ25DLElBQUssQ0FBRSxFQUFHLG9CQUFxQixxQkFBdUIsRUFDdEQsR0FBSSxDQUFFLEVBQUcsaUJBQWtCLGtCQUFvQixFQUMvQyxHQUFJLENBQUUsRUFBRyxxQkFBc0IsdUJBQXlCLEVBRXhELFNBQVUsQ0FBRSxFQUFHLEdBQUksRUFBSSxDQUN4QixFQUVBQSxHQUFRLE1BQVFBLEdBQVEsTUFBUUEsR0FBUSxTQUFXQSxHQUFRLFFBQVVBLEdBQVEsTUFDN0VBLEdBQVEsR0FBS0EsR0FBUSxHQUdmclgsRUFBUSxTQUNicVgsR0FBUSxTQUFXQSxHQUFRLE9BQVMsQ0FBRSxFQUFHLCtCQUFnQyxjQUkxRSxTQUFTQyxHQUFRcFcsRUFBUzJILEVBQU0sQ0FJL0IsSUFBSXhILEVBWUosT0FWSyxPQUFPSCxFQUFRLHFCQUF5QixJQUM1Q0csRUFBTUgsRUFBUSxxQkFBc0IySCxHQUFPLEdBQUcsRUFFbkMsT0FBTzNILEVBQVEsaUJBQXFCLElBQy9DRyxFQUFNSCxFQUFRLGlCQUFrQjJILEdBQU8sR0FBRyxFQUcxQ3hILEVBQU0sQ0FBQSxFQUdGd0gsSUFBUSxRQUFhQSxHQUFPdkYsRUFBVXBDLEVBQVMySCxHQUM1QzdILEVBQU8sTUFBTyxDQUFFRSxDQUFTLEVBQUVHLENBQUcsRUFHL0JBLENBQ1AsQ0FJRCxTQUFTa1csR0FBZW5XLEVBQU9vVyxFQUFjLENBSTVDLFFBSEk5VyxFQUFJLEVBQ1BrUCxFQUFJeE8sRUFBTSxPQUVIVixFQUFJa1AsRUFBR2xQLElBQ2RrVSxHQUFTLElBQ1J4VCxFQUFPVixDQUFHLEVBQ1YsYUFDQSxDQUFDOFcsR0FBZTVDLEdBQVMsSUFBSzRDLEVBQWE5VyxDQUFHLEVBQUUsWUFBYyxDQUNqRSxDQUVDLENBR0QsSUFBSStXLEdBQVEsWUFFWixTQUFTQyxHQUFldFcsRUFBT0YsRUFBU3lXLEVBQVNDLEVBQVdDLEVBQVUsQ0FPckUsUUFOSXRXLEVBQU1nVSxFQUFLMU0sRUFBS2lQLEVBQU1DLEVBQVVyVyxFQUNuQ3lWLEVBQVdqVyxFQUFRLHVCQUF3QixFQUMzQzhXLEVBQVEsQ0FBRSxFQUNWdFgsRUFBSSxFQUNKa1AsR0FBSXhPLEVBQU0sT0FFSFYsRUFBSWtQLEdBQUdsUCxJQUdkLEdBRkFhLEVBQU9ILEVBQU9WLEdBRVRhLEdBQVFBLElBQVMsRUFHckIsR0FBS1YsRUFBUVUsQ0FBTSxJQUFLLFNBSXZCUCxFQUFPLE1BQU9nWCxFQUFPelcsRUFBSyxTQUFXLENBQUVBLENBQUksRUFBS0EsV0FHckMsQ0FBQ2tXLEdBQU0sS0FBTWxXLENBQUksRUFDNUJ5VyxFQUFNLEtBQU05VyxFQUFRLGVBQWdCSyxDQUFNLENBQUEsTUFHcEMsQ0FVTixJQVRBZ1UsRUFBTUEsR0FBTzRCLEVBQVMsWUFBYWpXLEVBQVEsY0FBZSxLQUFLLEdBRy9EMkgsR0FBUW9PLEdBQVMsS0FBTTFWLENBQU0sR0FBSSxDQUFFLEdBQUksRUFBSSxHQUFJLENBQUcsRUFBQyxZQUFXLEVBQzlEdVcsRUFBT1QsR0FBU3hPLElBQVN3TyxHQUFRLFNBQ2pDOUIsRUFBSSxVQUFZdUMsRUFBTSxHQUFNOVcsRUFBTyxjQUFlTyxDQUFNLEVBQUd1VyxFQUFNLEdBR2pFcFcsRUFBSW9XLEVBQU0sR0FDRnBXLEtBQ1A2VCxFQUFNQSxFQUFJLFVBS1h2VSxFQUFPLE1BQU9nWCxFQUFPekMsRUFBSSxVQUFVLEVBR25DQSxFQUFNNEIsRUFBUyxXQUdmNUIsRUFBSSxZQUFjLEVBQ2xCLENBUUgsSUFIQTRCLEVBQVMsWUFBYyxHQUV2QnpXLEVBQUksRUFDTWEsRUFBT3lXLEVBQU90WCxNQUFVLENBR2pDLEdBQUtrWCxHQUFhNVcsRUFBTyxRQUFTTyxFQUFNcVcsQ0FBUyxFQUFLLEdBQUssQ0FDckRDLEdBQ0pBLEVBQVEsS0FBTXRXLEdBRWYsUUFDQSxDQWFELEdBWEF3VyxFQUFXbEMsR0FBWXRVLEdBR3ZCZ1UsRUFBTStCLEdBQVFILEVBQVMsWUFBYTVWLENBQUksRUFBSSxVQUd2Q3dXLEdBQ0pSLEdBQWVoQyxDQUFHLEVBSWRvQyxFQUVKLElBREFqVyxFQUFJLEVBQ01ILEVBQU9nVSxFQUFLN1QsTUFDaEJ3VixHQUFZLEtBQU0zVixFQUFLLE1BQVEsRUFBRSxHQUNyQ29XLEVBQVEsS0FBTXBXLEVBSWpCLENBRUQsT0FBTzRWLENBQ1AsQ0FHRCxJQUFJYyxHQUFpQixzQkFFckIsU0FBU0MsSUFBYSxDQUNyQixNQUFPLEVBQ1AsQ0FFRCxTQUFTQyxJQUFjLENBQ3RCLE1BQU8sRUFDUCxDQUVELFNBQVNDLEdBQUk3VyxFQUFNOFcsRUFBT3BYLEVBQVV5VCxFQUFNMU0sRUFBSXNRLEVBQU0sQ0FDbkQsSUFBSUMsRUFBUWxWLEVBR1osR0FBSyxPQUFPZ1YsR0FBVSxTQUFXLENBRzNCLE9BQU9wWCxHQUFhLFdBR3hCeVQsRUFBT0EsR0FBUXpULEVBQ2ZBLEVBQVcsUUFFWixJQUFNb0MsS0FBUWdWLEVBQ2JELEdBQUk3VyxFQUFNOEIsRUFBTXBDLEVBQVV5VCxFQUFNMkQsRUFBT2hWLEdBQVFpVixHQUVoRCxPQUFPL1csQ0FDUCxDQXFCRCxHQW5CS21ULEdBQVEsTUFBUTFNLEdBQU0sTUFHMUJBLEVBQUsvRyxFQUNMeVQsRUFBT3pULEVBQVcsUUFDUCtHLEdBQU0sT0FDWixPQUFPL0csR0FBYSxVQUd4QitHLEVBQUswTSxFQUNMQSxFQUFPLFNBSVAxTSxFQUFLME0sRUFDTEEsRUFBT3pULEVBQ1BBLEVBQVcsU0FHUitHLElBQU8sR0FDWEEsRUFBS21RLFdBQ00sQ0FBQ25RLEVBQ1osT0FBT3pHLEVBR1IsT0FBSytXLElBQVEsSUFDWkMsRUFBU3ZRLEVBQ1RBLEVBQUssU0FBVXdRLEVBQVEsQ0FHdEIsT0FBQXhYLEVBQVEsRUFBQyxJQUFLd1gsR0FDUEQsRUFBTyxNQUFPLEtBQU0sU0FBUyxDQUN2QyxFQUdFdlEsRUFBRyxLQUFPdVEsRUFBTyxPQUFVQSxFQUFPLEtBQU92WCxFQUFPLFNBRTFDTyxFQUFLLEtBQU0sVUFBVyxDQUM1QlAsRUFBTyxNQUFNLElBQUssS0FBTXFYLEVBQU9yUSxFQUFJME0sRUFBTXpULEVBQzNDLEVBQ0MsQ0FNREQsRUFBTyxNQUFRLENBRWQsT0FBUSxDQUFFLEVBRVYsSUFBSyxTQUFVTyxFQUFNOFcsRUFBTy9GLEVBQVNvQyxFQUFNelQsRUFBVyxDQUVyRCxJQUFJd1gsRUFBYUMsRUFBYW5ELEVBQzdCb0QsRUFBUUMsRUFBR0MsRUFDWHRHLEVBQVN1RyxFQUFVelYsRUFBTTBWLEdBQVlDLEdBQ3JDQyxHQUFXckUsR0FBUyxJQUFLclQsR0FHMUIsR0FBTWdULEdBQVloVCxHQXVDbEIsSUFsQ0srUSxFQUFRLFVBQ1ptRyxFQUFjbkcsRUFDZEEsRUFBVW1HLEVBQVksUUFDdEJ4WCxFQUFXd1gsRUFBWSxVQUtuQnhYLEdBQ0pELEVBQU8sS0FBSyxnQkFBaUIwRCxHQUFpQnpELENBQVEsRUFJakRxUixFQUFRLE9BQ2JBLEVBQVEsS0FBT3RSLEVBQU8sU0FJZjJYLEVBQVNNLEdBQVMsVUFDekJOLEVBQVNNLEdBQVMsT0FBUyxPQUFPLE9BQVEsSUFBSSxJQUV2Q1AsRUFBY08sR0FBUyxVQUM5QlAsRUFBY08sR0FBUyxPQUFTLFNBQVVyRyxHQUFJLENBSTdDLE9BQU8sT0FBTzVSLEVBQVcsS0FBZUEsRUFBTyxNQUFNLFlBQWM0UixHQUFFLEtBQ3BFNVIsRUFBTyxNQUFNLFNBQVMsTUFBT08sRUFBTSxTQUFXLEVBQUcsTUFDdEQsR0FJRThXLEdBQVVBLEdBQVMsSUFBSyxNQUFPckksRUFBZSxHQUFJLENBQUUsSUFDcEQ0SSxFQUFJUCxFQUFNLE9BQ0ZPLEtBQ1ByRCxFQUFNMEMsR0FBZSxLQUFNSSxFQUFPTyxDQUFDLENBQUksR0FBSSxHQUMzQ3ZWLEVBQU8yVixHQUFXekQsRUFBSyxHQUN2QndELElBQWV4RCxFQUFLLENBQUcsR0FBSSxJQUFLLE1BQU8sS0FBTSxPQUd2Q2xTLElBS05rUCxFQUFVdlIsRUFBTyxNQUFNLFFBQVNxQyxDQUFJLEdBQU0sQ0FBQSxFQUcxQ0EsR0FBU3BDLEVBQVdzUixFQUFRLGFBQWVBLEVBQVEsV0FBY2xQLEVBR2pFa1AsRUFBVXZSLEVBQU8sTUFBTSxRQUFTcUMsQ0FBSSxHQUFNLENBQUEsRUFHMUN3VixFQUFZN1gsRUFBTyxPQUFRLENBQzFCLEtBQU1xQyxFQUNOLFNBQVUyVixHQUNWLEtBQU10RSxFQUNOLFFBQVNwQyxFQUNULEtBQU1BLEVBQVEsS0FDZCxTQUFVclIsRUFDVixhQUFjQSxHQUFZRCxFQUFPLEtBQUssTUFBTSxhQUFhLEtBQU1DLENBQVUsRUFDekUsVUFBVzhYLEdBQVcsS0FBTSxHQUFLLENBQ2pDLEVBQUVOLENBQVcsR0FHTkssRUFBV0gsRUFBUXRWLENBQU0sS0FDaEN5VixFQUFXSCxFQUFRdFYsQ0FBTSxFQUFHLEdBQzVCeVYsRUFBUyxjQUFnQixHQUdwQixDQUFDdkcsRUFBUSxPQUNiQSxFQUFRLE1BQU0sS0FBTWhSLEVBQU1tVCxFQUFNcUUsR0FBWUwsQ0FBYSxJQUFLLEtBRXpEblgsRUFBSyxrQkFDVEEsRUFBSyxpQkFBa0I4QixFQUFNcVYsSUFLM0JuRyxFQUFRLE1BQ1pBLEVBQVEsSUFBSSxLQUFNaFIsRUFBTXNYLENBQVMsRUFFM0JBLEVBQVUsUUFBUSxPQUN2QkEsRUFBVSxRQUFRLEtBQU92RyxFQUFRLE9BSzlCclIsRUFDSjZYLEVBQVMsT0FBUUEsRUFBUyxnQkFBaUIsRUFBR0QsR0FFOUNDLEVBQVMsS0FBTUQsR0FJaEI3WCxFQUFPLE1BQU0sT0FBUXFDLENBQUksRUFBSyxHQUcvQixFQUdELE9BQVEsU0FBVTlCLEVBQU04VyxFQUFPL0YsRUFBU3JSLEVBQVVpWSxFQUFjLENBRS9ELElBQUl4WCxFQUFHeVgsRUFBVzVELEVBQ2pCb0QsRUFBUUMsRUFBR0MsRUFDWHRHLEVBQVN1RyxFQUFVelYsRUFBTTBWLEdBQVlDLEdBQ3JDQyxHQUFXckUsR0FBUyxRQUFTclQsQ0FBTSxHQUFJcVQsR0FBUyxJQUFLclQsR0FFdEQsR0FBSyxHQUFDMFgsSUFBWSxFQUFHTixFQUFTTSxHQUFTLFNBT3ZDLEtBRkFaLEdBQVVBLEdBQVMsSUFBSyxNQUFPckksRUFBZSxHQUFJLENBQUUsSUFDcEQ0SSxFQUFJUCxFQUFNLE9BQ0ZPLEtBQU0sQ0FNYixHQUxBckQsRUFBTTBDLEdBQWUsS0FBTUksRUFBT08sQ0FBQyxDQUFJLEdBQUksR0FDM0N2VixFQUFPMlYsR0FBV3pELEVBQUssR0FDdkJ3RCxJQUFleEQsRUFBSyxDQUFHLEdBQUksSUFBSyxNQUFPLEtBQU0sT0FHeEMsQ0FBQ2xTLEVBQU8sQ0FDWixJQUFNQSxLQUFRc1YsRUFDYjNYLEVBQU8sTUFBTSxPQUFRTyxFQUFNOEIsRUFBT2dWLEVBQU9PLEdBQUt0RyxFQUFTclIsRUFBVSxFQUFJLEVBRXRFLFFBQ0EsQ0FVRCxJQVJBc1IsRUFBVXZSLEVBQU8sTUFBTSxRQUFTcUMsQ0FBSSxHQUFNLENBQUEsRUFDMUNBLEdBQVNwQyxFQUFXc1IsRUFBUSxhQUFlQSxFQUFRLFdBQWNsUCxFQUNqRXlWLEVBQVdILEVBQVF0VixDQUFNLEdBQUksR0FDN0JrUyxFQUFNQSxFQUFLLENBQUcsR0FDYixJQUFJLE9BQVEsVUFBWXdELEdBQVcsS0FBTSxlQUFlLEVBQUssV0FHOURJLEVBQVl6WCxFQUFJb1gsRUFBUyxPQUNqQnBYLEtBQ1BtWCxFQUFZQyxFQUFVcFgsSUFFZndYLEdBQWVGLEtBQWFILEVBQVUsWUFDMUMsQ0FBQ3ZHLEdBQVdBLEVBQVEsT0FBU3VHLEVBQVUsUUFDdkMsQ0FBQ3RELEdBQU9BLEVBQUksS0FBTXNELEVBQVUsU0FBUyxLQUNyQyxDQUFDNVgsR0FBWUEsSUFBYTRYLEVBQVUsVUFDckM1WCxJQUFhLE1BQVE0WCxFQUFVLFlBQ2hDQyxFQUFTLE9BQVFwWCxFQUFHLEdBRWZtWCxFQUFVLFVBQ2RDLEVBQVMsZ0JBRUx2RyxFQUFRLFFBQ1pBLEVBQVEsT0FBTyxLQUFNaFIsRUFBTXNYLENBQVMsR0FPbENNLEdBQWEsQ0FBQ0wsRUFBUyxVQUN0QixDQUFDdkcsRUFBUSxVQUNiQSxFQUFRLFNBQVMsS0FBTWhSLEVBQU13WCxHQUFZRSxHQUFTLE1BQVEsSUFBSyxLQUUvRGpZLEVBQU8sWUFBYU8sRUFBTThCLEVBQU00VixHQUFTLE1BQU0sRUFHaEQsT0FBT04sRUFBUXRWLEdBRWhCLENBR0lyQyxFQUFPLGNBQWUyWCxJQUMxQi9ELEdBQVMsT0FBUXJULEVBQU0saUJBRXhCLEVBRUQsU0FBVSxTQUFVNlgsRUFBYyxDQUVqQyxJQUFJMVksRUFBR2dCLEVBQUdMLEVBQUt5SixFQUFTK04sRUFBV1EsRUFDbEN6TyxFQUFPLElBQUksTUFBTyxVQUFVLE1BQVEsRUFHcEM0TixFQUFReFgsRUFBTyxNQUFNLElBQUtvWSxDQUFhLEVBRXZDTixHQUNDbEUsR0FBUyxJQUFLLEtBQU0sUUFBVSxHQUFJLE9BQU8sT0FBUSxJQUFNLEdBQ3JENEQsRUFBTSxJQUFJLEdBQU0sQ0FBRSxFQUNyQmpHLEVBQVV2UixFQUFPLE1BQU0sUUFBU3dYLEVBQU0sSUFBTSxHQUFJLEdBS2pELElBRkE1TixFQUFNLENBQUcsRUFBRzROLEVBRU45WCxFQUFJLEVBQUdBLEVBQUksVUFBVSxPQUFRQSxJQUNsQ2tLLEVBQU1sSyxDQUFDLEVBQUssVUFBV0EsQ0FBQyxFQU16QixHQUhBOFgsRUFBTSxlQUFpQixLQUdsQixFQUFBakcsRUFBUSxhQUFlQSxFQUFRLFlBQVksS0FBTSxLQUFNaUcsQ0FBTyxJQUFLLElBU3hFLEtBSkFhLEVBQWVyWSxFQUFPLE1BQU0sU0FBUyxLQUFNLEtBQU13WCxFQUFPTSxHQUd4RHBZLEVBQUksR0FDTW9LLEVBQVV1TyxFQUFjM1ksR0FBRyxJQUFRLENBQUM4WCxFQUFNLHdCQUluRCxJQUhBQSxFQUFNLGNBQWdCMU4sRUFBUSxLQUU5QnBKLEVBQUksR0FDTW1YLEVBQVkvTixFQUFRLFNBQVVwSixHQUFLLElBQzVDLENBQUM4VyxFQUFNLGtDQUlGLENBQUNBLEVBQU0sWUFBY0ssRUFBVSxZQUFjLElBQ2pETCxFQUFNLFdBQVcsS0FBTUssRUFBVSxTQUFTLEtBRTFDTCxFQUFNLFVBQVlLLEVBQ2xCTCxFQUFNLEtBQU9LLEVBQVUsS0FFdkJ4WCxJQUFVTCxFQUFPLE1BQU0sUUFBUzZYLEVBQVUsV0FBYyxDQUFBLEdBQUssUUFDNURBLEVBQVUsU0FBVSxNQUFPL04sRUFBUSxLQUFNRixDQUFJLEVBRXpDdkosSUFBUSxTQUNMbVgsRUFBTSxPQUFTblgsS0FBVSxLQUMvQm1YLEVBQU0sZUFBYyxFQUNwQkEsRUFBTSxnQkFBZSxJQVExQixPQUFLakcsRUFBUSxjQUNaQSxFQUFRLGFBQWEsS0FBTSxLQUFNaUcsQ0FBSyxFQUdoQ0EsRUFBTSxPQUNiLEVBRUQsU0FBVSxTQUFVQSxFQUFPTSxFQUFXLENBQ3JDLElBQUlwWSxFQUFHbVksRUFBVzFVLEVBQUttVixFQUFpQkMsRUFDdkNGLEVBQWUsQ0FBRSxFQUNqQkcsRUFBZ0JWLEVBQVMsY0FDekJoSixFQUFNMEksRUFBTSxPQUdiLEdBQUtnQixHQUlKMUosRUFBSSxVQU9KLEVBQUcwSSxFQUFNLE9BQVMsU0FBV0EsRUFBTSxRQUFVLElBRTdDLEtBQVExSSxJQUFRLEtBQU1BLEVBQU1BLEVBQUksWUFBYyxLQUk3QyxHQUFLQSxFQUFJLFdBQWEsR0FBSyxFQUFHMEksRUFBTSxPQUFTLFNBQVcxSSxFQUFJLFdBQWEsSUFBUyxDQUdqRixJQUZBd0osRUFBa0IsQ0FBQSxFQUNsQkMsRUFBbUIsQ0FBQSxFQUNiN1ksRUFBSSxFQUFHQSxFQUFJOFksRUFBZTlZLElBQy9CbVksRUFBWUMsRUFBVXBZLEdBR3RCeUQsRUFBTTBVLEVBQVUsU0FBVyxJQUV0QlUsRUFBa0JwVixDQUFLLElBQUssU0FDaENvVixFQUFrQnBWLEdBQVEwVSxFQUFVLGFBQ25DN1gsRUFBUW1ELEVBQUssSUFBSSxFQUFHLE1BQU8yTCxDQUFLLEVBQUcsR0FDbkM5TyxFQUFPLEtBQU1tRCxFQUFLLEtBQU0sS0FBTSxDQUFFMkwsQ0FBRyxDQUFJLEVBQUMsUUFFckN5SixFQUFrQnBWLElBQ3RCbVYsRUFBZ0IsS0FBTVQsR0FHbkJTLEVBQWdCLFFBQ3BCRCxFQUFhLEtBQU0sQ0FBRSxLQUFNdkosRUFBSyxTQUFVd0osQ0FBZSxFQUUxRCxFQUtILE9BQUF4SixFQUFNLEtBQ0QwSixFQUFnQlYsRUFBUyxRQUM3Qk8sRUFBYSxLQUFNLENBQUUsS0FBTXZKLEVBQUssU0FBVWdKLEVBQVMsTUFBT1UsQ0FBZSxDQUFBLEdBR25FSCxDQUNQLEVBRUQsUUFBUyxTQUFVelgsRUFBTTZYLEVBQU8sQ0FDL0IsT0FBTyxlQUFnQnpZLEVBQU8sTUFBTSxVQUFXWSxFQUFNLENBQ3BELFdBQVksR0FDWixhQUFjLEdBRWQsSUFBSzNCLEVBQVl3WixDQUFNLEVBQ3RCLFVBQVcsQ0FDVixHQUFLLEtBQUssY0FDVCxPQUFPQSxFQUFNLEtBQUssY0FFbkIsRUFDRCxVQUFXLENBQ1YsR0FBSyxLQUFLLGNBQ1QsT0FBTyxLQUFLLGNBQWU3WCxFQUU1QixFQUVGLElBQUssU0FBVXVCLEVBQVEsQ0FDdEIsT0FBTyxlQUFnQixLQUFNdkIsRUFBTSxDQUNsQyxXQUFZLEdBQ1osYUFBYyxHQUNkLFNBQVUsR0FDVixNQUFPdUIsQ0FDWixFQUNJLENBQ0osRUFDRSxFQUVELElBQUssU0FBVXVXLEVBQWdCLENBQzlCLE9BQU9BLEVBQWUxWSxFQUFPLE9BQVMsRUFDckMwWSxFQUNBLElBQUkxWSxFQUFPLE1BQU8wWSxFQUNuQixFQUVELFFBQVMsQ0FDUixLQUFNLENBR0wsU0FBVSxFQUNWLEVBQ0QsTUFBTyxDQUdOLE1BQU8sU0FBVWhGLEVBQU8sQ0FJdkIsSUFBSXhNLEVBQUssTUFBUXdNLEVBR2pCLE9BQUtzQyxHQUFlLEtBQU05TyxFQUFHLElBQU0sR0FDbENBLEVBQUcsT0FBUzVFLEVBQVU0RSxFQUFJLE9BQU8sR0FHakN5UixHQUFnQnpSLEVBQUksUUFBUyxJQUl2QixFQUNQLEVBQ0QsUUFBUyxTQUFVd00sRUFBTyxDQUl6QixJQUFJeE0sRUFBSyxNQUFRd00sRUFHakIsT0FBS3NDLEdBQWUsS0FBTTlPLEVBQUcsSUFBTSxHQUNsQ0EsRUFBRyxPQUFTNUUsRUFBVTRFLEVBQUksT0FBTyxHQUVqQ3lSLEdBQWdCelIsRUFBSSxTQUlkLEVBQ1AsRUFJRCxTQUFVLFNBQVVzUSxFQUFRLENBQzNCLElBQUl2VyxFQUFTdVcsRUFBTSxPQUNuQixPQUFPeEIsR0FBZSxLQUFNL1UsRUFBTyxJQUFNLEdBQ3hDQSxFQUFPLE9BQVNxQixFQUFVckIsRUFBUSxPQUFTLEdBQzNDMlMsR0FBUyxJQUFLM1MsRUFBUSxPQUFTLEdBQy9CcUIsRUFBVXJCLEVBQVEsSUFDbkIsQ0FDRCxFQUVELGFBQWMsQ0FDYixhQUFjLFNBQVV1VyxFQUFRLENBSTFCQSxFQUFNLFNBQVcsUUFBYUEsRUFBTSxnQkFDeENBLEVBQU0sY0FBYyxZQUFjQSxFQUFNLE9BRXpDLENBQ0QsQ0FDRCxDQUNGLEVBTUEsU0FBU21CLEdBQWdCelIsRUFBSTdFLEVBQU11VyxFQUFVLENBRzVDLEdBQUssQ0FBQ0EsRUFBVSxDQUNWaEYsR0FBUyxJQUFLMU0sRUFBSTdFLENBQUksSUFBTyxRQUNqQ3JDLEVBQU8sTUFBTSxJQUFLa0gsRUFBSTdFLEVBQU02VSxFQUFVLEVBRXZDLE1BQ0EsQ0FHRHRELEdBQVMsSUFBSzFNLEVBQUk3RSxFQUFNLEVBQUssRUFDN0JyQyxFQUFPLE1BQU0sSUFBS2tILEVBQUk3RSxFQUFNLENBQzNCLFVBQVcsR0FDWCxRQUFTLFNBQVVtVixFQUFRLENBQzFCLElBQUk3TyxFQUNIa1EsRUFBUWpGLEdBQVMsSUFBSyxLQUFNdlIsQ0FBSSxFQUVqQyxHQUFPbVYsRUFBTSxVQUFZLEdBQU8sS0FBTW5WLENBQUksR0FHekMsR0FBTXdXLEdBNEJRN1ksRUFBTyxNQUFNLFFBQVNxQyxDQUFNLEdBQUksQ0FBRSxHQUFHLGNBQ2xEbVYsRUFBTSxnQkFBZSxVQXhCckJxQixFQUFRdmEsRUFBTSxLQUFNLFdBQ3BCc1YsR0FBUyxJQUFLLEtBQU12UixFQUFNd1csQ0FBSyxFQUcvQixLQUFNeFcsQ0FBSSxJQUNWc0csRUFBU2lMLEdBQVMsSUFBSyxLQUFNdlIsQ0FBSSxFQUNqQ3VSLEdBQVMsSUFBSyxLQUFNdlIsRUFBTSxFQUFLLEVBRTFCd1csSUFBVWxRLEVBR2QsT0FBQTZPLEVBQU0seUJBQXdCLEVBQzlCQSxFQUFNLGVBQWMsRUFFYjdPLE9BZUVrUSxJQUdYakYsR0FBUyxJQUFLLEtBQU12UixFQUFNckMsRUFBTyxNQUFNLFFBQ3RDNlksRUFBTyxDQUFHLEVBQ1ZBLEVBQU0sTUFBTyxDQUFHLEVBQ2hCLElBQ0wsR0FVSXJCLEVBQU0sZ0JBQWUsRUFDckJBLEVBQU0sOEJBQWdDTixHQUV2QyxDQUNILEVBQ0MsQ0FFRGxYLEVBQU8sWUFBYyxTQUFVTyxFQUFNOEIsRUFBTXlXLEVBQVMsQ0FHOUN2WSxFQUFLLHFCQUNUQSxFQUFLLG9CQUFxQjhCLEVBQU15VyxFQUVsQyxFQUVBOVksRUFBTyxNQUFRLFNBQVVhLEVBQUtrWSxFQUFRLENBR3JDLEdBQUssRUFBRyxnQkFBZ0IvWSxFQUFPLE9BQzlCLE9BQU8sSUFBSUEsRUFBTyxNQUFPYSxFQUFLa1ksQ0FBSyxFQUkvQmxZLEdBQU9BLEVBQUksTUFDZixLQUFLLGNBQWdCQSxFQUNyQixLQUFLLEtBQU9BLEVBQUksS0FJaEIsS0FBSyxtQkFBcUJBLEVBQUksa0JBQzVCQSxFQUFJLG1CQUFxQixRQUd6QkEsRUFBSSxjQUFnQixHQUNyQnFXLEdBQ0FDLEdBS0QsS0FBSyxPQUFXdFcsRUFBSSxRQUFVQSxFQUFJLE9BQU8sV0FBYSxFQUNyREEsRUFBSSxPQUFPLFdBQ1hBLEVBQUksT0FFTCxLQUFLLGNBQWdCQSxFQUFJLGNBQ3pCLEtBQUssY0FBZ0JBLEVBQUksZUFJekIsS0FBSyxLQUFPQSxFQUlSa1ksR0FDSi9ZLEVBQU8sT0FBUSxLQUFNK1ksR0FJdEIsS0FBSyxVQUFZbFksR0FBT0EsRUFBSSxXQUFhLEtBQUssTUFHOUMsS0FBTWIsRUFBTyxPQUFTLEVBQUcsRUFDMUIsRUFJQUEsRUFBTyxNQUFNLFVBQVksQ0FDeEIsWUFBYUEsRUFBTyxNQUNwQixtQkFBb0JtWCxHQUNwQixxQkFBc0JBLEdBQ3RCLDhCQUErQkEsR0FDL0IsWUFBYSxHQUViLGVBQWdCLFVBQVcsQ0FDMUIsSUFBSXZGLEVBQUksS0FBSyxjQUViLEtBQUssbUJBQXFCc0YsR0FFckJ0RixHQUFLLENBQUMsS0FBSyxhQUNmQSxFQUFFLGVBQWMsQ0FFakIsRUFDRCxnQkFBaUIsVUFBVyxDQUMzQixJQUFJQSxFQUFJLEtBQUssY0FFYixLQUFLLHFCQUF1QnNGLEdBRXZCdEYsR0FBSyxDQUFDLEtBQUssYUFDZkEsRUFBRSxnQkFBZSxDQUVsQixFQUNELHlCQUEwQixVQUFXLENBQ3BDLElBQUlBLEVBQUksS0FBSyxjQUViLEtBQUssOEJBQWdDc0YsR0FFaEN0RixHQUFLLENBQUMsS0FBSyxhQUNmQSxFQUFFLHlCQUF3QixFQUczQixLQUFLLGdCQUFlLENBQ3BCLENBQ0YsRUFHQTVSLEVBQU8sS0FBTSxDQUNaLE9BQVEsR0FDUixRQUFTLEdBQ1QsV0FBWSxHQUNaLGVBQWdCLEdBQ2hCLFFBQVMsR0FDVCxPQUFRLEdBQ1IsV0FBWSxHQUNaLFFBQVMsR0FDVCxNQUFPLEdBQ1AsTUFBTyxHQUNQLFNBQVUsR0FDVixLQUFNLEdBQ04sS0FBUSxHQUNSLEtBQU0sR0FDTixTQUFVLEdBQ1YsSUFBSyxHQUNMLFFBQVMsR0FDVCxPQUFRLEdBQ1IsUUFBUyxHQUNULFFBQVMsR0FDVCxRQUFTLEdBQ1QsUUFBUyxHQUNULFFBQVMsR0FDVCxVQUFXLEdBQ1gsWUFBYSxHQUNiLFFBQVMsR0FDVCxRQUFTLEdBQ1QsY0FBZSxHQUNmLFVBQVcsR0FDWCxRQUFTLEdBQ1QsTUFBTyxFQUNSLEVBQUdBLEVBQU8sTUFBTSxTQUVoQkEsRUFBTyxLQUFNLENBQUUsTUFBTyxVQUFXLEtBQU0sVUFBWSxFQUFFLFNBQVVxQyxFQUFNMlcsRUFBZSxDQUVuRixTQUFTQyxFQUFvQmIsRUFBYyxDQUMxQyxHQUFLaFosRUFBUyxhQUFlLENBUzVCLElBQUkwWixFQUFTbEYsR0FBUyxJQUFLLEtBQU0sUUFBVSxFQUMxQzRELEVBQVF4WCxFQUFPLE1BQU0sSUFBS29ZLENBQVcsRUFDdENaLEVBQU0sS0FBT1ksRUFBWSxPQUFTLFVBQVksUUFBVSxPQUN4RFosRUFBTSxZQUFjLEdBR3BCc0IsRUFBUVYsQ0FBVyxFQU1kWixFQUFNLFNBQVdBLEVBQU0sZUFLM0JzQixFQUFRdEIsQ0FBSyxDQUVqQixNQUlHeFgsRUFBTyxNQUFNLFNBQVVnWixFQUFjWixFQUFZLE9BQ2hEcFksRUFBTyxNQUFNLElBQUtvWSxDQUFhLENBQUEsQ0FFakMsQ0FFRHBZLEVBQU8sTUFBTSxRQUFTcUMsR0FBUyxDQUc5QixNQUFPLFVBQVcsQ0FFakIsSUFBSTZXLEVBT0osR0FGQVAsR0FBZ0IsS0FBTXRXLEVBQU0sSUFFdkJqRCxFQUFTLGFBTWI4WixFQUFXdEYsR0FBUyxJQUFLLEtBQU1vRixDQUFZLEVBQ3JDRSxHQUNMLEtBQUssaUJBQWtCRixFQUFjQyxHQUV0Q3JGLEdBQVMsSUFBSyxLQUFNb0YsR0FBZ0JFLEdBQVksR0FBTSxPQUl0RCxPQUFPLEVBRVIsRUFDRCxRQUFTLFVBQVcsQ0FHbkIsT0FBQVAsR0FBZ0IsS0FBTXRXLEdBR2YsRUFDUCxFQUVELFNBQVUsVUFBVyxDQUNwQixJQUFJNlcsRUFFSixHQUFLOVosRUFBUyxhQUNiOFosRUFBV3RGLEdBQVMsSUFBSyxLQUFNb0YsQ0FBWSxFQUFLLEVBQzFDRSxFQUlMdEYsR0FBUyxJQUFLLEtBQU1vRixFQUFjRSxDQUFRLEdBSDFDLEtBQUssb0JBQXFCRixFQUFjQyxHQUN4Q3JGLEdBQVMsT0FBUSxLQUFNb0YsUUFPeEIsT0FBTyxFQUVSLEVBSUQsU0FBVSxTQUFVeEIsRUFBUSxDQUMzQixPQUFPNUQsR0FBUyxJQUFLNEQsRUFBTSxPQUFRblYsQ0FBSSxDQUN2QyxFQUVELGFBQWMyVyxDQUNoQixFQWNDaFosRUFBTyxNQUFNLFFBQVNnWixHQUFpQixDQUN0QyxNQUFPLFVBQVcsQ0FJakIsSUFBSXZaLEVBQU0sS0FBSyxlQUFpQixLQUFLLFVBQVksS0FDaEQwWixFQUFhL1osRUFBUyxhQUFlLEtBQU9LLEVBQzVDeVosRUFBV3RGLEdBQVMsSUFBS3VGLEVBQVlILENBQVksRUFNNUNFLElBQ0E5WixFQUFTLGFBQ2IsS0FBSyxpQkFBa0I0WixFQUFjQyxHQUVyQ3haLEVBQUksaUJBQWtCNEMsRUFBTTRXLEVBQW9CLEVBQUksR0FHdERyRixHQUFTLElBQUt1RixFQUFZSCxHQUFnQkUsR0FBWSxHQUFNLEVBQzVELEVBQ0QsU0FBVSxVQUFXLENBQ3BCLElBQUl6WixFQUFNLEtBQUssZUFBaUIsS0FBSyxVQUFZLEtBQ2hEMFosRUFBYS9aLEVBQVMsYUFBZSxLQUFPSyxFQUM1Q3laLEVBQVd0RixHQUFTLElBQUt1RixFQUFZSCxDQUFZLEVBQUssRUFFakRFLEVBUUx0RixHQUFTLElBQUt1RixFQUFZSCxFQUFjRSxDQUFRLEdBUDNDOVosRUFBUyxhQUNiLEtBQUssb0JBQXFCNFosRUFBY0MsR0FFeEN4WixFQUFJLG9CQUFxQjRDLEVBQU00VyxFQUFvQixFQUFJLEVBRXhEckYsR0FBUyxPQUFRdUYsRUFBWUgsR0FJOUIsQ0FDSCxDQUNBLEdBVUFoWixFQUFPLEtBQU0sQ0FDWixXQUFZLFlBQ1osV0FBWSxXQUNaLGFBQWMsY0FDZCxhQUFjLFlBQ2YsRUFBRyxTQUFVb1osRUFBTUMsRUFBTSxDQUN4QnJaLEVBQU8sTUFBTSxRQUFTb1osR0FBUyxDQUM5QixhQUFjQyxFQUNkLFNBQVVBLEVBRVYsT0FBUSxTQUFVN0IsRUFBUSxDQUN6QixJQUFJblgsRUFDSFksRUFBUyxLQUNUcVksRUFBVTlCLEVBQU0sY0FDaEJLLEVBQVlMLEVBQU0sVUFJbkIsT0FBSyxDQUFDOEIsR0FBYUEsSUFBWXJZLEdBQVUsQ0FBQ2pCLEVBQU8sU0FBVWlCLEVBQVFxWSxDQUFPLEtBQ3pFOUIsRUFBTSxLQUFPSyxFQUFVLFNBQ3ZCeFgsRUFBTXdYLEVBQVUsUUFBUSxNQUFPLEtBQU0sU0FBUyxFQUM5Q0wsRUFBTSxLQUFPNkIsR0FFUGhaLENBQ1AsQ0FDSCxDQUNBLEdBRUFMLEVBQU8sR0FBRyxPQUFRLENBRWpCLEdBQUksU0FBVXFYLEVBQU9wWCxFQUFVeVQsRUFBTTFNLEVBQUssQ0FDekMsT0FBT29RLEdBQUksS0FBTUMsRUFBT3BYLEVBQVV5VCxFQUFNMU0sRUFDeEMsRUFDRCxJQUFLLFNBQVVxUSxFQUFPcFgsRUFBVXlULEVBQU0xTSxFQUFLLENBQzFDLE9BQU9vUSxHQUFJLEtBQU1DLEVBQU9wWCxFQUFVeVQsRUFBTTFNLEVBQUksRUFDNUMsRUFDRCxJQUFLLFNBQVVxUSxFQUFPcFgsRUFBVStHLEVBQUssQ0FDcEMsSUFBSTZRLEVBQVd4VixFQUNmLEdBQUtnVixHQUFTQSxFQUFNLGdCQUFrQkEsRUFBTSxVQUczQyxPQUFBUSxFQUFZUixFQUFNLFVBQ2xCclgsRUFBUXFYLEVBQU0sY0FBYyxFQUFHLElBQzlCUSxFQUFVLFVBQ1RBLEVBQVUsU0FBVyxJQUFNQSxFQUFVLFVBQ3JDQSxFQUFVLFNBQ1hBLEVBQVUsU0FDVkEsRUFBVSxPQUNkLEVBQ1UsS0FFUixHQUFLLE9BQU9SLEdBQVUsU0FBVyxDQUdoQyxJQUFNaFYsS0FBUWdWLEVBQ2IsS0FBSyxJQUFLaFYsRUFBTXBDLEVBQVVvWCxFQUFPaFYsQ0FBSSxHQUV0QyxPQUFPLElBQ1AsQ0FDRCxPQUFLcEMsSUFBYSxJQUFTLE9BQU9BLEdBQWEsY0FHOUMrRyxFQUFLL0csRUFDTEEsRUFBVyxRQUVQK0csSUFBTyxLQUNYQSxFQUFLbVEsSUFFQyxLQUFLLEtBQU0sVUFBVyxDQUM1Qm5YLEVBQU8sTUFBTSxPQUFRLEtBQU1xWCxFQUFPclEsRUFBSS9HLEVBQ3pDLEVBQ0UsQ0FDRixHQUdBLElBS0NzWixHQUFlLHdCQUdmQyxHQUFXLG9DQUVYQyxHQUFlLDZCQUdoQixTQUFTQyxHQUFvQm5aLEVBQU1vWixFQUFVLENBQzVDLE9BQUtyWCxFQUFVL0IsRUFBTSxPQUFTLEdBQzdCK0IsRUFBVXFYLEVBQVEsV0FBYSxHQUFLQSxFQUFVQSxFQUFRLFdBQVksT0FFM0QzWixFQUFRTyxHQUFPLFNBQVUsU0FBVyxDQUFHLEdBQUlBLENBSW5ELENBR0QsU0FBU3FaLEdBQWVyWixFQUFPLENBQzlCLE9BQUFBLEVBQUssTUFBU0EsRUFBSyxhQUFjLE1BQVEsSUFBSyxNQUFTLElBQU1BLEVBQUssS0FDM0RBLENBQ1AsQ0FDRCxTQUFTc1osR0FBZXRaLEVBQU8sQ0FDOUIsT0FBT0EsRUFBSyxNQUFRLElBQUssTUFBTyxFQUFHLENBQUcsSUFBSyxRQUMxQ0EsRUFBSyxLQUFPQSxFQUFLLEtBQUssTUFBTyxDQUFDLEVBRTlCQSxFQUFLLGdCQUFpQixRQUdoQkEsQ0FDUCxDQUVELFNBQVN1WixHQUFnQmpaLEVBQUtrWixFQUFPLENBQ3BDLElBQUlyYSxFQUFHa1AsRUFBR3ZNLEVBQU0yWCxFQUFVQyxFQUFVQyxFQUFVdkMsRUFFOUMsR0FBS29DLEVBQUssV0FBYSxFQUt2QixJQUFLbkcsR0FBUyxRQUFTL1MsS0FDdEJtWixFQUFXcEcsR0FBUyxJQUFLL1MsR0FDekI4VyxFQUFTcUMsRUFBUyxPQUVickMsR0FBUyxDQUNiL0QsR0FBUyxPQUFRbUcsRUFBTSxpQkFFdkIsSUFBTTFYLEtBQVFzVixFQUNiLElBQU1qWSxFQUFJLEVBQUdrUCxFQUFJK0ksRUFBUXRWLEdBQU8sT0FBUTNDLEVBQUlrUCxFQUFHbFAsSUFDOUNNLEVBQU8sTUFBTSxJQUFLK1osRUFBTTFYLEVBQU1zVixFQUFRdFYsQ0FBSSxFQUFJM0MsQ0FBQyxFQUdqRCxDQUlHbVUsR0FBUyxRQUFTaFQsS0FDdEJvWixFQUFXcEcsR0FBUyxPQUFRaFQsR0FDNUJxWixFQUFXbGEsRUFBTyxPQUFRLENBQUUsRUFBRWlhLENBQVEsRUFFdENwRyxHQUFTLElBQUtrRyxFQUFNRyxJQUVyQixDQUdELFNBQVNDLEdBQVV0WixFQUFLa1osRUFBTyxDQUM5QixJQUFJelgsRUFBV3lYLEVBQUssU0FBUyxZQUFXLEVBR25DelgsSUFBYSxTQUFXMFQsR0FBZSxLQUFNblYsRUFBSSxNQUNyRGtaLEVBQUssUUFBVWxaLEVBQUksU0FHUnlCLElBQWEsU0FBV0EsSUFBYSxjQUNoRHlYLEVBQUssYUFBZWxaLEVBQUksYUFFekIsQ0FFRCxTQUFTdVosR0FBVUMsRUFBWXpRLEVBQU10SixFQUFVdVcsRUFBVSxDQUd4RGpOLEVBQU9yTCxFQUFNcUwsR0FFYixJQUFJdU0sRUFBVXZVLEVBQU8rVSxFQUFTMkQsRUFBWTlhLEVBQU1DLEVBQy9DQyxFQUFJLEVBQ0prUCxFQUFJeUwsRUFBVyxPQUNmRSxFQUFXM0wsRUFBSSxFQUNmek0sRUFBUXlILEVBQU0sQ0FBRyxFQUNqQjRRLEdBQWtCdmIsRUFBWWtELEdBRy9CLEdBQUtxWSxJQUNENUwsRUFBSSxHQUFLLE9BQU96TSxHQUFVLFVBQzNCLENBQUNuRCxFQUFRLFlBQWN3YSxHQUFTLEtBQU1yWCxDQUFPLEVBQy9DLE9BQU9rWSxFQUFXLEtBQU0sU0FBVXZLLEdBQVEsQ0FDekMsSUFBSXpCLEdBQU9nTSxFQUFXLEdBQUl2SyxFQUFLLEVBQzFCMEssS0FDSjVRLEVBQU0sR0FBTXpILEVBQU0sS0FBTSxLQUFNMk4sR0FBT3pCLEdBQUssS0FBSSxJQUUvQytMLEdBQVUvTCxHQUFNekUsRUFBTXRKLEVBQVV1VyxDQUFPLENBQzFDLEdBR0MsR0FBS2pJLElBQ0p1SCxFQUFXTyxHQUFlOU0sRUFBTXlRLEVBQVksR0FBSSxjQUFlLEdBQU9BLEVBQVl4RCxHQUNsRmpWLEVBQVF1VSxFQUFTLFdBRVpBLEVBQVMsV0FBVyxTQUFXLElBQ25DQSxFQUFXdlUsR0FJUEEsR0FBU2lWLEdBQVUsQ0FPdkIsSUFOQUYsRUFBVTNXLEVBQU8sSUFBS3NXLEdBQVFILEVBQVUsUUFBUSxFQUFJeUQsSUFDcERVLEVBQWEzRCxFQUFRLE9BS2JqWCxFQUFJa1AsRUFBR2xQLElBQ2RGLEVBQU8yVyxFQUVGelcsSUFBTTZhLElBQ1YvYSxFQUFPUSxFQUFPLE1BQU9SLEVBQU0sR0FBTSxFQUFJLEVBR2hDOGEsR0FJSnRhLEVBQU8sTUFBTzJXLEVBQVNMLEdBQVE5VyxFQUFNLFFBQVEsSUFJL0NjLEVBQVMsS0FBTStaLEVBQVkzYSxDQUFDLEVBQUlGLEVBQU1FLEdBR3ZDLEdBQUs0YSxFQU9KLElBTkE3YSxFQUFNa1gsRUFBU0EsRUFBUSxPQUFTLENBQUMsRUFBRyxjQUdwQzNXLEVBQU8sSUFBSzJXLEVBQVNrRCxJQUdmbmEsRUFBSSxFQUFHQSxFQUFJNGEsRUFBWTVhLElBQzVCRixFQUFPbVgsRUFBU2pYLEdBQ1h3VyxHQUFZLEtBQU0xVyxFQUFLLE1BQVEsRUFBSSxHQUN2QyxDQUFDb1UsR0FBUyxPQUFRcFUsRUFBTSxZQUFjLEdBQ3RDUSxFQUFPLFNBQVVQLEVBQUtELEtBRWpCQSxFQUFLLE1BQVNBLEVBQUssTUFBUSxJQUFLLFlBQWEsSUFBTSxTQUdsRFEsRUFBTyxVQUFZLENBQUNSLEVBQUssVUFDN0JRLEVBQU8sU0FBVVIsRUFBSyxJQUFLLENBQzFCLE1BQU9BLEVBQUssT0FBU0EsRUFBSyxhQUFjLE9BQVMsQ0FDakQsRUFBRUMsQ0FBRyxFQVNQSCxFQUFTRSxFQUFLLFlBQVksUUFBU2lhLEdBQWMsRUFBSSxFQUFFamEsRUFBTUMsR0FLakUsQ0FHRixPQUFPNGEsQ0FDUCxDQUVELFNBQVNJLEdBQVFsYSxFQUFNTixFQUFVeWEsRUFBVyxDQUszQyxRQUpJbGIsRUFDSHdYLEVBQVEvVyxFQUFXRCxFQUFPLE9BQVFDLEVBQVVNLENBQUksRUFBS0EsRUFDckRiLEVBQUksR0FFS0YsRUFBT3dYLEVBQU90WCxDQUFDLElBQVEsS0FBTUEsSUFDakMsQ0FBQ2diLEdBQVlsYixFQUFLLFdBQWEsR0FDbkNRLEVBQU8sVUFBV3NXLEdBQVE5VyxDQUFNLENBQUEsRUFHNUJBLEVBQUssYUFDSmtiLEdBQVk3RixHQUFZclYsSUFDNUIrVyxHQUFlRCxHQUFROVcsRUFBTSxRQUFVLENBQUEsRUFFeENBLEVBQUssV0FBVyxZQUFhQSxJQUkvQixPQUFPZSxDQUNQLENBRURQLEVBQU8sT0FBUSxDQUNkLGNBQWUsU0FBVTJhLEVBQU8sQ0FDL0IsT0FBT0EsQ0FDUCxFQUVELE1BQU8sU0FBVXBhLEVBQU1xYSxFQUFlQyxFQUFvQixDQUN6RCxJQUFJbmIsRUFBR2tQLEVBQUdrTSxFQUFhQyxFQUN0Qi9aLEVBQVFULEVBQUssVUFBVyxFQUFNLEVBQzlCeWEsRUFBU25HLEdBQVl0VSxHQUd0QixHQUFLLENBQUN2QixFQUFRLGlCQUFvQnVCLEVBQUssV0FBYSxHQUFLQSxFQUFLLFdBQWEsS0FDekUsQ0FBQ1AsRUFBTyxTQUFVTyxHQU9uQixJQUhBd2EsRUFBZXpFLEdBQVF0VixHQUN2QjhaLEVBQWN4RSxHQUFRL1YsR0FFaEJiLEVBQUksRUFBR2tQLEVBQUlrTSxFQUFZLE9BQVFwYixFQUFJa1AsRUFBR2xQLElBQzNDeWEsR0FBVVcsRUFBYXBiLENBQUMsRUFBSXFiLEVBQWNyYixDQUFHLENBQUEsRUFLL0MsR0FBS2tiLEVBQ0osR0FBS0MsRUFJSixJQUhBQyxFQUFjQSxHQUFleEUsR0FBUS9WLEdBQ3JDd2EsRUFBZUEsR0FBZ0J6RSxHQUFRdFYsR0FFakN0QixFQUFJLEVBQUdrUCxFQUFJa00sRUFBWSxPQUFRcGIsRUFBSWtQLEVBQUdsUCxJQUMzQ29hLEdBQWdCZ0IsRUFBYXBiLENBQUMsRUFBSXFiLEVBQWNyYixDQUFHLENBQUEsT0FHcERvYSxHQUFnQnZaLEVBQU1TLEdBS3hCLE9BQUErWixFQUFlekUsR0FBUXRWLEVBQU8sVUFDekIrWixFQUFhLE9BQVMsR0FDMUJ4RSxHQUFld0UsRUFBYyxDQUFDQyxHQUFVMUUsR0FBUS9WLEVBQU0sUUFBUSxHQUl4RFMsQ0FDUCxFQUVELFVBQVcsU0FBVVosRUFBUSxDQUs1QixRQUpJc1QsRUFBTW5ULEVBQU04QixFQUNma1AsRUFBVXZSLEVBQU8sTUFBTSxRQUN2Qk4sRUFBSSxHQUVLYSxFQUFPSCxFQUFPVixDQUFDLEtBQVMsT0FBV0EsSUFDNUMsR0FBSzZULEdBQVloVCxHQUFTLENBQ3pCLEdBQU9tVCxFQUFPblQsRUFBTXFULEdBQVMsT0FBTyxFQUFPLENBQzFDLEdBQUtGLEVBQUssT0FDVCxJQUFNclIsS0FBUXFSLEVBQUssT0FDYm5DLEVBQVNsUCxHQUNickMsRUFBTyxNQUFNLE9BQVFPLEVBQU04QixDQUFJLEVBSS9CckMsRUFBTyxZQUFhTyxFQUFNOEIsRUFBTXFSLEVBQUssTUFBTSxFQU85Q25ULEVBQU1xVCxHQUFTLE9BQVMsRUFBRyxNQUMzQixDQUNJclQsRUFBTXNULEdBQVMsV0FJbkJ0VCxFQUFNc1QsR0FBUyxPQUFTLEVBQUcsT0FFNUIsQ0FFRixDQUNGLEdBRUE3VCxFQUFPLEdBQUcsT0FBUSxDQUNqQixPQUFRLFNBQVVDLEVBQVcsQ0FDNUIsT0FBT3dhLEdBQVEsS0FBTXhhLEVBQVUsRUFBSSxDQUNuQyxFQUVELE9BQVEsU0FBVUEsRUFBVyxDQUM1QixPQUFPd2EsR0FBUSxLQUFNeGEsRUFDckIsRUFFRCxLQUFNLFNBQVVrQyxFQUFRLENBQ3ZCLE9BQU91USxHQUFRLEtBQU0sU0FBVXZRLEVBQVEsQ0FDdEMsT0FBT0EsSUFBVSxPQUNoQm5DLEVBQU8sS0FBTSxJQUFNLEVBQ25CLEtBQUssUUFBUSxLQUFNLFVBQVcsRUFDeEIsS0FBSyxXQUFhLEdBQUssS0FBSyxXQUFhLElBQU0sS0FBSyxXQUFhLEtBQ3JFLEtBQUssWUFBY21DLEVBRXpCLEVBQ0csRUFBRSxLQUFNQSxFQUFPLFVBQVUsTUFBTSxDQUNoQyxFQUVELE9BQVEsVUFBVyxDQUNsQixPQUFPaVksR0FBVSxLQUFNLFVBQVcsU0FBVTdaLEVBQU8sQ0FDbEQsR0FBSyxLQUFLLFdBQWEsR0FBSyxLQUFLLFdBQWEsSUFBTSxLQUFLLFdBQWEsRUFBSSxDQUN6RSxJQUFJVSxFQUFTeVksR0FBb0IsS0FBTW5aLENBQUksRUFDM0NVLEVBQU8sWUFBYVYsRUFDcEIsQ0FDSixFQUNFLEVBRUQsUUFBUyxVQUFXLENBQ25CLE9BQU82WixHQUFVLEtBQU0sVUFBVyxTQUFVN1osRUFBTyxDQUNsRCxHQUFLLEtBQUssV0FBYSxHQUFLLEtBQUssV0FBYSxJQUFNLEtBQUssV0FBYSxFQUFJLENBQ3pFLElBQUlVLEVBQVN5WSxHQUFvQixLQUFNblosQ0FBSSxFQUMzQ1UsRUFBTyxhQUFjVixFQUFNVSxFQUFPLFVBQVUsQ0FDNUMsQ0FDSixFQUNFLEVBRUQsT0FBUSxVQUFXLENBQ2xCLE9BQU9tWixHQUFVLEtBQU0sVUFBVyxTQUFVN1osRUFBTyxDQUM3QyxLQUFLLFlBQ1QsS0FBSyxXQUFXLGFBQWNBLEVBQU0sSUFBSSxDQUU1QyxFQUNFLEVBRUQsTUFBTyxVQUFXLENBQ2pCLE9BQU82WixHQUFVLEtBQU0sVUFBVyxTQUFVN1osRUFBTyxDQUM3QyxLQUFLLFlBQ1QsS0FBSyxXQUFXLGFBQWNBLEVBQU0sS0FBSyxXQUFXLENBRXhELEVBQ0UsRUFFRCxNQUFPLFVBQVcsQ0FJakIsUUFISUEsRUFDSGIsRUFBSSxHQUVLYSxFQUFPLEtBQU1iLENBQUMsSUFBUSxLQUFNQSxJQUNoQ2EsRUFBSyxXQUFhLElBR3RCUCxFQUFPLFVBQVdzVyxHQUFRL1YsRUFBTSxFQUFPLENBQUEsRUFHdkNBLEVBQUssWUFBYyxJQUlyQixPQUFPLElBQ1AsRUFFRCxNQUFPLFNBQVVxYSxFQUFlQyxFQUFvQixDQUNuRCxPQUFBRCxFQUFnQkEsR0FBd0IsR0FDeENDLEVBQW9CQSxHQUE0QkQsRUFFekMsS0FBSyxJQUFLLFVBQVcsQ0FDM0IsT0FBTzVhLEVBQU8sTUFBTyxLQUFNNGEsRUFBZUMsQ0FBaUIsQ0FDOUQsRUFDRSxFQUVELEtBQU0sU0FBVTFZLEVBQVEsQ0FDdkIsT0FBT3VRLEdBQVEsS0FBTSxTQUFVdlEsRUFBUSxDQUN0QyxJQUFJNUIsRUFBTyxLQUFNLENBQUMsR0FBTSxDQUFFLEVBQ3pCYixFQUFJLEVBQ0prUCxFQUFJLEtBQUssT0FFVixHQUFLek0sSUFBVSxRQUFhNUIsRUFBSyxXQUFhLEVBQzdDLE9BQU9BLEVBQUssVUFJYixHQUFLLE9BQU80QixHQUFVLFVBQVksQ0FBQ29YLEdBQWEsS0FBTXBYLENBQU8sR0FDNUQsQ0FBQ2tVLElBQVdKLEdBQVMsS0FBTTlULENBQU8sR0FBSSxDQUFFLEdBQUksRUFBRSxHQUFNLEdBQUksWUFBYSxDQUFBLEVBQUssQ0FFMUVBLEVBQVFuQyxFQUFPLGNBQWVtQyxHQUU5QixHQUFJLENBQ0gsS0FBUXpDLEVBQUlrUCxFQUFHbFAsSUFDZGEsRUFBTyxLQUFNYixDQUFHLEdBQUksR0FHZmEsRUFBSyxXQUFhLElBQ3RCUCxFQUFPLFVBQVdzVyxHQUFRL1YsRUFBTSxFQUFPLENBQUEsRUFDdkNBLEVBQUssVUFBWTRCLEdBSW5CNUIsRUFBTyxDQUdaLE1BQWtCLENBQUUsQ0FDaEIsQ0FFSUEsR0FDSixLQUFLLE1BQUssRUFBRyxPQUFRNEIsQ0FBSyxDQUUzQixFQUFFLEtBQU1BLEVBQU8sVUFBVSxNQUFNLENBQ2hDLEVBRUQsWUFBYSxVQUFXLENBQ3ZCLElBQUkwVSxFQUFVLENBQUEsRUFHZCxPQUFPdUQsR0FBVSxLQUFNLFVBQVcsU0FBVTdaLEVBQU8sQ0FDbEQsSUFBSWlKLEVBQVMsS0FBSyxXQUVieEosRUFBTyxRQUFTLEtBQU02VyxDQUFPLEVBQUssSUFDdEM3VyxFQUFPLFVBQVdzVyxHQUFRLElBQU0sQ0FBQSxFQUMzQjlNLEdBQ0pBLEVBQU8sYUFBY2pKLEVBQU0sTUFLN0IsRUFBRXNXLENBQU8sQ0FDVixDQUNGLEdBRUE3VyxFQUFPLEtBQU0sQ0FDWixTQUFVLFNBQ1YsVUFBVyxVQUNYLGFBQWMsU0FDZCxZQUFhLFFBQ2IsV0FBWSxhQUNiLEVBQUcsU0FBVVksRUFBTXFhLEVBQVcsQ0FDN0JqYixFQUFPLEdBQUlZLENBQU0sRUFBRyxTQUFVWCxFQUFXLENBT3hDLFFBTklHLEVBQ0hDLEVBQU0sQ0FBRSxFQUNSNmEsRUFBU2xiLEVBQVFDLENBQVUsRUFDM0I2SSxFQUFPb1MsRUFBTyxPQUFTLEVBQ3ZCeGIsRUFBSSxFQUVHQSxHQUFLb0osRUFBTXBKLElBQ2xCVSxFQUFRVixJQUFNb0osRUFBTyxLQUFPLEtBQUssTUFBTyxJQUN4QzlJLEVBQVFrYixFQUFReGIsQ0FBQyxDQUFJLEVBQUV1YixDQUFRLEVBQUk3YSxHQUluQzNCLEVBQUssTUFBTzRCLEVBQUtELEVBQU0sSUFBSyxDQUFBLEVBRzdCLE9BQU8sS0FBSyxVQUFXQyxFQUN6QixDQUNBLEdBQ0EsSUFBSThhLEdBQVksSUFBSSxPQUFRLEtBQU96RyxHQUFPLGtCQUFtQixLQUV6RDBHLEdBQWMsTUFHZEMsR0FBWSxTQUFVOWEsRUFBTyxDQUsvQixJQUFJK2EsRUFBTy9hLEVBQUssY0FBYyxZQUU5QixPQUFLLENBQUMrYSxHQUFRLENBQUNBLEVBQUssVUFDbkJBLEVBQU9wZCxHQUdEb2QsRUFBSyxpQkFBa0IvYSxFQUNoQyxFQUVJZ2IsR0FBTyxTQUFVaGIsRUFBTUksRUFBU0wsRUFBVyxDQUM5QyxJQUFJRCxFQUFLTyxFQUNSNGEsRUFBTSxDQUFBLEVBR1AsSUFBTTVhLEtBQVFELEVBQ2I2YSxFQUFLNWEsQ0FBTSxFQUFHTCxFQUFLLE1BQU9LLENBQUksRUFDOUJMLEVBQUssTUFBT0ssQ0FBTSxFQUFHRCxFQUFTQyxDQUFJLEVBR25DUCxFQUFNQyxFQUFTLEtBQU1DLEdBR3JCLElBQU1LLEtBQVFELEVBQ2JKLEVBQUssTUFBT0ssQ0FBTSxFQUFHNGEsRUFBSzVhLENBQUksRUFHL0IsT0FBT1AsQ0FDUixFQUdJb2IsR0FBWSxJQUFJLE9BQVE3RyxHQUFVLEtBQU0sR0FBRyxFQUFJLE1BSWpELFVBQVcsQ0FJWixTQUFTOEcsR0FBb0IsQ0FHNUIsR0FBTXRGLEVBSU4sQ0FBQXVGLEVBQVUsTUFBTSxRQUFVLCtFQUUxQnZGLEVBQUksTUFBTSxRQUNULDRIQUdEMVMsR0FBZ0IsWUFBYWlZLENBQVcsRUFBQyxZQUFhdkYsQ0FBRyxFQUV6RCxJQUFJd0YsRUFBVzFkLEVBQU8saUJBQWtCa1ksQ0FBRyxFQUMzQ3lGLEVBQW1CRCxFQUFTLE1BQVEsS0FHcENFLEVBQXdCQyxFQUFvQkgsRUFBUyxVQUFVLElBQU8sR0FJdEV4RixFQUFJLE1BQU0sTUFBUSxNQUNsQjRGLEVBQW9CRCxFQUFvQkgsRUFBUyxLQUFLLElBQU8sR0FJN0RLLEVBQXVCRixFQUFvQkgsRUFBUyxLQUFLLElBQU8sR0FNaEV4RixFQUFJLE1BQU0sU0FBVyxXQUNyQjhGLEVBQW1CSCxFQUFvQjNGLEVBQUksWUFBYyxDQUFDLElBQU8sR0FFakUxUyxHQUFnQixZQUFhaVksR0FJN0J2RixFQUFNLEtBQ04sQ0FFRCxTQUFTMkYsRUFBb0JJLEVBQVUsQ0FDdEMsT0FBTyxLQUFLLE1BQU8sV0FBWUEsQ0FBUyxDQUFBLENBQ3hDLENBRUQsSUFBSU4sRUFBa0JJLEVBQXNCQyxFQUFrQkYsRUFDN0RJLEVBQXlCTixFQUN6QkgsRUFBWXZjLEVBQVMsY0FBZSxLQUFPLEVBQzNDZ1gsRUFBTWhYLEVBQVMsY0FBZSxPQUd6QmdYLEVBQUksUUFNVkEsRUFBSSxNQUFNLGVBQWlCLGNBQzNCQSxFQUFJLFVBQVcsRUFBSSxFQUFHLE1BQU0sZUFBaUIsR0FDN0NwWCxFQUFRLGdCQUFrQm9YLEVBQUksTUFBTSxpQkFBbUIsY0FFdkRwVyxFQUFPLE9BQVFoQixFQUFTLENBQ3ZCLGtCQUFtQixVQUFXLENBQzdCLE9BQUEwYyxJQUNPTyxDQUNQLEVBQ0QsZUFBZ0IsVUFBVyxDQUMxQixPQUFBUCxJQUNPTSxDQUNQLEVBQ0QsY0FBZSxVQUFXLENBQ3pCLE9BQUFOLElBQ09HLENBQ1AsRUFDRCxtQkFBb0IsVUFBVyxDQUM5QixPQUFBSCxJQUNPSSxDQUNQLEVBQ0QsY0FBZSxVQUFXLENBQ3pCLE9BQUFKLElBQ09RLENBQ1AsRUFXRCxxQkFBc0IsVUFBVyxDQUNoQyxJQUFJRyxFQUFPQyxFQUFJQyxFQUFTQyxFQUN4QixPQUFLSixHQUEyQixPQUMvQkMsRUFBUWpkLEVBQVMsY0FBZSxTQUNoQ2tkLEVBQUtsZCxFQUFTLGNBQWUsTUFDN0JtZCxFQUFVbmQsRUFBUyxjQUFlLE9BRWxDaWQsRUFBTSxNQUFNLFFBQVUsMkRBQ3RCQyxFQUFHLE1BQU0sUUFBVSwwQ0FLbkJBLEVBQUcsTUFBTSxPQUFTLE1BQ2xCQyxFQUFRLE1BQU0sT0FBUyxNQVF2QkEsRUFBUSxNQUFNLFFBQVUsUUFFeEI3WSxHQUNFLFlBQWEyWSxDQUFPLEVBQ3BCLFlBQWFDLENBQUksRUFDakIsWUFBYUMsQ0FBTyxFQUV0QkMsRUFBVXRlLEVBQU8saUJBQWtCb2UsR0FDbkNGLEVBQTRCLFNBQVVJLEVBQVEsT0FBUSxFQUFJLEVBQ3pELFNBQVVBLEVBQVEsZUFBZ0IsRUFBSSxFQUN0QyxTQUFVQSxFQUFRLGtCQUFtQixFQUFFLElBQVNGLEVBQUcsYUFFcEQ1WSxHQUFnQixZQUFhMlksSUFFdkJELENBQ1AsQ0FDSCxHQUNBLEtBR0EsU0FBU0ssR0FBUWxjLEVBQU1LLEVBQU04YixFQUFXLENBQ3ZDLElBQUlDLEVBQU9DLEVBQVVDLEVBQVV4YyxFQUM5QnljLEVBQWUxQixHQUFZLEtBQU14YSxDQUFNLEVBTXZDbWMsRUFBUXhjLEVBQUssTUFFZCxPQUFBbWMsRUFBV0EsR0FBWXJCLEdBQVc5YSxHQUs3Qm1jLElBV0pyYyxFQUFNcWMsRUFBUyxpQkFBa0I5YixDQUFJLEdBQU04YixFQUFVOWIsR0FFaERrYyxHQUFnQnpjLElBa0JwQkEsRUFBTUEsRUFBSSxRQUFTc0MsR0FBVSxJQUFJLEdBQU0sUUFHbkN0QyxJQUFRLElBQU0sQ0FBQ3dVLEdBQVl0VSxDQUFJLElBQ25DRixFQUFNTCxFQUFPLE1BQU9PLEVBQU1LLENBQUksR0FRMUIsQ0FBQzVCLEVBQVEsZUFBZ0IsR0FBSW1jLEdBQVUsS0FBTTlhLENBQUcsR0FBTW9iLEdBQVUsS0FBTTdhLEtBRzFFK2IsRUFBUUksRUFBTSxNQUNkSCxFQUFXRyxFQUFNLFNBQ2pCRixFQUFXRSxFQUFNLFNBR2pCQSxFQUFNLFNBQVdBLEVBQU0sU0FBV0EsRUFBTSxNQUFRMWMsRUFDaERBLEVBQU1xYyxFQUFTLE1BR2ZLLEVBQU0sTUFBUUosRUFDZEksRUFBTSxTQUFXSCxFQUNqQkcsRUFBTSxTQUFXRixJQUlaeGMsSUFBUSxPQUlkQSxFQUFNLEdBQ05BLENBQ0QsQ0FHRCxTQUFTMmMsR0FBY0MsRUFBYUMsRUFBUyxDQUc1QyxNQUFPLENBQ04sSUFBSyxVQUFXLENBQ2YsR0FBS0QsRUFBVyxFQUFLLENBSXBCLE9BQU8sS0FBSyxJQUNaLE1BQ0EsQ0FHRCxPQUFTLEtBQUssSUFBTUMsR0FBUyxNQUFPLEtBQU0sVUFDMUMsQ0FDSCxDQUNDLENBR0QsSUFBSUMsR0FBYyxDQUFFLFNBQVUsTUFBTyxJQUFNLEVBQzFDQyxHQUFhaGUsRUFBUyxjQUFlLEtBQU8sRUFBQyxNQUM3Q2llLEdBQWMsQ0FBQSxFQUdmLFNBQVNDLEdBQWdCMWMsRUFBTyxDQU0vQixRQUhJMmMsRUFBVTNjLEVBQU0sQ0FBRyxFQUFDLFlBQVcsRUFBS0EsRUFBSyxNQUFPLENBQUcsRUFDdERsQixFQUFJeWQsR0FBWSxPQUVUemQsS0FFUCxHQURBa0IsRUFBT3VjLEdBQWF6ZCxDQUFHLEVBQUc2ZCxFQUNyQjNjLEtBQVF3YyxHQUNaLE9BQU94YyxDQUdULENBR0QsU0FBUzRjLEdBQWU1YyxFQUFPLENBQzlCLElBQUk2YyxFQUFRemQsRUFBTyxTQUFVWSxDQUFJLEdBQU15YyxHQUFhemMsR0FFcEQsT0FBSzZjLElBR0E3YyxLQUFRd2MsR0FDTHhjLEVBRUR5YyxHQUFhemMsQ0FBTSxFQUFHMGMsR0FBZ0IxYyxDQUFJLEdBQU1BLEVBQ3ZELENBR0QsSUFLQzhjLEdBQWUsNEJBQ2ZDLEdBQVUsQ0FBRSxTQUFVLFdBQVksV0FBWSxTQUFVLFFBQVMsT0FBUyxFQUMxRUMsR0FBcUIsQ0FDcEIsY0FBZSxJQUNmLFdBQVksS0FDZCxFQUVBLFNBQVNDLEdBQW1CcmQsRUFBTzJCLEVBQU8yYixFQUFXLENBSXBELElBQUk5YixFQUFVMlMsR0FBUSxLQUFNeFMsQ0FBSyxFQUNqQyxPQUFPSCxFQUdOLEtBQUssSUFBSyxFQUFHQSxFQUFTLENBQUcsR0FBSzhiLEdBQVksRUFBRyxHQUFPOWIsRUFBUyxDQUFDLEdBQU0sTUFDcEVHLENBQ0QsQ0FFRCxTQUFTNGIsR0FBb0J4ZCxFQUFNeWQsRUFBV0MsRUFBS0MsRUFBYUMsRUFBUUMsRUFBYyxDQUNyRixJQUFJMWUsRUFBSXNlLElBQWMsUUFBVSxFQUFJLEVBQ25DSyxFQUFRLEVBQ1JDLEVBQVEsRUFDUkMsRUFBYyxFQUdmLEdBQUtOLEtBQVVDLEVBQWMsU0FBVyxXQUN2QyxNQUFPLEdBR1IsS0FBUXhlLEVBQUksRUFBR0EsR0FBSyxFQUtkdWUsSUFBUSxXQUNaTSxHQUFldmUsRUFBTyxJQUFLTyxFQUFNMGQsRUFBTXJKLEdBQVdsVixDQUFHLEVBQUUsR0FBTXllLElBSXhERCxHQW1CQUQsSUFBUSxZQUNaSyxHQUFTdGUsRUFBTyxJQUFLTyxFQUFNLFVBQVlxVSxHQUFXbFYsQ0FBRyxFQUFFLEdBQU15ZSxJQUl6REYsSUFBUSxXQUNaSyxHQUFTdGUsRUFBTyxJQUFLTyxFQUFNLFNBQVdxVSxHQUFXbFYsR0FBTSxRQUFTLEdBQU15ZSxDQUFNLEtBdEI3RUcsR0FBU3RlLEVBQU8sSUFBS08sRUFBTSxVQUFZcVUsR0FBV2xWLENBQUcsRUFBRSxHQUFNeWUsR0FHeERGLElBQVEsVUFDWkssR0FBU3RlLEVBQU8sSUFBS08sRUFBTSxTQUFXcVUsR0FBV2xWLEdBQU0sUUFBUyxHQUFNeWUsQ0FBTSxFQUk1RUUsR0FBU3JlLEVBQU8sSUFBS08sRUFBTSxTQUFXcVUsR0FBV2xWLEdBQU0sUUFBUyxHQUFNeWUsQ0FBTSxHQW9CL0UsTUFBSyxDQUFDRCxHQUFlRSxHQUFlLElBSW5DRSxHQUFTLEtBQUssSUFBSyxFQUFHLEtBQUssS0FDMUIvZCxFQUFNLFNBQVd5ZCxFQUFXLENBQUcsRUFBQyxZQUFXLEVBQUtBLEVBQVUsTUFBTyxFQUFLLEVBQ3RFSSxFQUNBRSxFQUNBRCxFQUNBLEVBSUEsQ0FBQSxHQUFNLEdBR0RDLEVBQVFDLENBQ2YsQ0FFRCxTQUFTQyxHQUFrQmplLEVBQU15ZCxFQUFXSyxFQUFRLENBR25ELElBQUlGLEVBQVM5QyxHQUFXOWEsQ0FBTSxFQUk3QmtlLEVBQWtCLENBQUN6ZixFQUFRLGtCQUFpQixHQUFNcWYsRUFDbERILEVBQWNPLEdBQ2J6ZSxFQUFPLElBQUtPLEVBQU0sWUFBYSxHQUFPNGQsQ0FBTSxJQUFPLGFBQ3BETyxFQUFtQlIsRUFFbkJ2ZSxFQUFNOGMsR0FBUWxjLEVBQU15ZCxFQUFXRyxDQUFRLEVBQ3ZDUSxFQUFhLFNBQVdYLEVBQVcsQ0FBRyxFQUFDLFlBQVcsRUFBS0EsRUFBVSxNQUFPLEdBSXpFLEdBQUs3QyxHQUFVLEtBQU14YixHQUFRLENBQzVCLEdBQUssQ0FBQzBlLEVBQ0wsT0FBTzFlLEVBRVJBLEVBQU0sTUFDTixDQU1ELE9BQU8sQ0FBQ1gsRUFBUSxrQkFBaUIsR0FBTWtmLEdBTXRDLENBQUNsZixFQUFRLHFCQUFvQixHQUFNc0QsRUFBVS9CLEVBQU0sSUFBTSxHQUl6RFosSUFBUSxRQUlSLENBQUMsV0FBWUEsQ0FBSyxHQUFJSyxFQUFPLElBQUtPLEVBQU0sVUFBVyxHQUFPNGQsQ0FBTSxJQUFPLFdBR3ZFNWQsRUFBSyxlQUFnQixFQUFDLFNBRXRCMmQsRUFBY2xlLEVBQU8sSUFBS08sRUFBTSxZQUFhLEdBQU80ZCxDQUFRLElBQUssYUFLakVPLEVBQW1CQyxLQUFjcGUsRUFDNUJtZSxJQUNKL2UsRUFBTVksRUFBTW9lLEtBS2RoZixFQUFNLFdBQVlBLENBQUssR0FBSSxFQUdsQkEsRUFDUm9lLEdBQ0N4ZCxFQUNBeWQsRUFDQUssSUFBV0gsRUFBYyxTQUFXLFdBQ3BDUSxFQUNBUCxFQUdBeGUsQ0FDQSxFQUNFLElBQ0osQ0FFREssRUFBTyxPQUFRLENBSWQsU0FBVSxDQUNULFFBQVMsQ0FDUixJQUFLLFNBQVVPLEVBQU1tYyxFQUFXLENBQy9CLEdBQUtBLEVBQVcsQ0FHZixJQUFJcmMsRUFBTW9jLEdBQVFsYyxFQUFNLFNBQVMsRUFDakMsT0FBT0YsSUFBUSxHQUFLLElBQU1BLENBQzFCLENBQ0QsQ0FDRCxDQUNELEVBR0QsVUFBVyxDQUNWLHdCQUF5QixHQUN6QixZQUFhLEdBQ2IsaUJBQWtCLEdBQ2xCLFlBQWEsR0FDYixTQUFVLEdBQ1YsV0FBWSxHQUNaLFdBQVksR0FDWixTQUFVLEdBQ1YsV0FBWSxHQUNaLGNBQWUsR0FDZixnQkFBaUIsR0FDakIsUUFBUyxHQUNULFdBQVksR0FDWixhQUFjLEdBQ2QsV0FBWSxHQUNaLFFBQVMsR0FDVCxNQUFPLEdBQ1AsUUFBUyxHQUNULE1BQU8sR0FDUCxPQUFRLEdBQ1IsT0FBUSxHQUNSLEtBQU0sR0FHTixZQUFhLEdBQ2IsYUFBYyxHQUNkLFlBQWEsR0FDYixpQkFBa0IsR0FDbEIsY0FBZSxFQUNmLEVBSUQsU0FBVSxDQUFFLEVBR1osTUFBTyxTQUFVRSxFQUFNSyxFQUFNdUIsRUFBT2tjLEVBQVEsQ0FHM0MsR0FBSyxHQUFDOWQsR0FBUUEsRUFBSyxXQUFhLEdBQUtBLEVBQUssV0FBYSxHQUFLLENBQUNBLEVBQUssT0FLbEUsS0FBSUYsRUFBS2dDLEVBQU0rUixFQUNkd0ssRUFBV3ZMLEdBQVd6UyxDQUFNLEVBQzVCa2MsRUFBZTFCLEdBQVksS0FBTXhhLENBQU0sRUFDdkNtYyxFQUFReGMsRUFBSyxNQWFkLEdBUk11YyxJQUNMbGMsRUFBTzRjLEdBQWVvQixJQUl2QnhLLEVBQVFwVSxFQUFPLFNBQVVZLENBQU0sR0FBSVosRUFBTyxTQUFVNGUsR0FHL0N6YyxJQUFVLE9BQVksQ0FZMUIsR0FYQUUsRUFBTyxPQUFPRixFQUdURSxJQUFTLFdBQWNoQyxFQUFNc1UsR0FBUSxLQUFNeFMsS0FBYTlCLEVBQUssS0FDakU4QixFQUFRNlMsR0FBV3pVLEVBQU1LLEVBQU1QLENBQUcsRUFHbENnQyxFQUFPLFVBSUhGLEdBQVMsTUFBUUEsSUFBVUEsRUFDL0IsT0FNSUUsSUFBUyxVQUFZLENBQUN5YSxJQUMxQjNhLEdBQVM5QixHQUFPQSxFQUFLLEtBQVNMLEVBQU8sVUFBVzRlLENBQVUsRUFBRyxHQUFLLE9BSTlELENBQUM1ZixFQUFRLGlCQUFtQm1ELElBQVUsSUFBTXZCLEVBQUssUUFBUyxZQUFjLElBQUssSUFDakZtYyxFQUFPbmMsQ0FBTSxFQUFHLFlBSVosQ0FBQ3dULEdBQVMsRUFBRyxRQUFTQSxLQUN4QmpTLEVBQVFpUyxFQUFNLElBQUs3VCxFQUFNNEIsRUFBT2tjLENBQU8sS0FBTyxVQUUzQ3ZCLEVBQ0pDLEVBQU0sWUFBYW5jLEVBQU11QixHQUV6QjRhLEVBQU9uYyxDQUFNLEVBQUd1QixFQUlyQixLQUdHLFFBQUtpUyxHQUFTLFFBQVNBLElBQ3BCL1QsRUFBTStULEVBQU0sSUFBSzdULEVBQU0sR0FBTzhkLENBQU8sS0FBTyxPQUV2Q2hlLEVBSUQwYyxFQUFPbmMsR0FFZixFQUVELElBQUssU0FBVUwsRUFBTUssRUFBTXlkLEVBQU9GLEVBQVMsQ0FDMUMsSUFBSXhlLEVBQUtRLEVBQUtpVSxFQUNid0ssRUFBV3ZMLEdBQVd6UyxDQUFNLEVBQzVCa2MsRUFBZTFCLEdBQVksS0FBTXhhLEdBNEJsQyxPQXZCTWtjLElBQ0xsYyxFQUFPNGMsR0FBZW9CLElBSXZCeEssRUFBUXBVLEVBQU8sU0FBVVksQ0FBTSxHQUFJWixFQUFPLFNBQVU0ZSxHQUcvQ3hLLEdBQVMsUUFBU0EsSUFDdEJ6VSxFQUFNeVUsRUFBTSxJQUFLN1QsRUFBTSxHQUFNOGQsQ0FBSyxHQUk5QjFlLElBQVEsU0FDWkEsRUFBTThjLEdBQVFsYyxFQUFNSyxFQUFNdWQsQ0FBTSxHQUk1QnhlLElBQVEsVUFBWWlCLEtBQVFnZCxLQUNoQ2plLEVBQU1pZSxHQUFvQmhkLElBSXRCeWQsSUFBVSxJQUFNQSxHQUNwQmxlLEVBQU0sV0FBWVIsR0FDWDBlLElBQVUsSUFBUSxTQUFVbGUsQ0FBRyxFQUFLQSxHQUFPLEVBQUlSLEdBR2hEQSxDQUNQLENBQ0YsR0FFQUssRUFBTyxLQUFNLENBQUUsU0FBVSxPQUFPLEVBQUksU0FBVW9DLEVBQUk0YixFQUFZLENBQzdEaGUsRUFBTyxTQUFVZ2UsR0FBYyxDQUM5QixJQUFLLFNBQVV6ZCxFQUFNbWMsRUFBVTJCLEVBQVEsQ0FDdEMsR0FBSzNCLEVBSUosT0FBT2dCLEdBQWEsS0FBTTFkLEVBQU8sSUFBS08sRUFBTSxVQUFhLElBUXRELENBQUNBLEVBQUssaUJBQWlCLFFBQVUsQ0FBQ0EsRUFBSyxzQkFBdUIsRUFBQyxPQUNqRWdiLEdBQU1oYixFQUFNb2QsR0FBUyxVQUFXLENBQy9CLE9BQU9hLEdBQWtCamUsRUFBTXlkLEVBQVdLLENBQUssQ0FDckQsQ0FBUSxFQUNIRyxHQUFrQmplLEVBQU15ZCxFQUFXSyxFQUVyQyxFQUVELElBQUssU0FBVTlkLEVBQU00QixFQUFPa2MsRUFBUSxDQUNuQyxJQUFJcmMsRUFDSG1jLEVBQVM5QyxHQUFXOWEsQ0FBTSxFQUkxQnNlLEVBQXFCLENBQUM3ZixFQUFRLGNBQWUsR0FDNUNtZixFQUFPLFdBQWEsV0FHckJNLEVBQWtCSSxHQUFzQlIsRUFDeENILEVBQWNPLEdBQ2J6ZSxFQUFPLElBQUtPLEVBQU0sWUFBYSxHQUFPNGQsQ0FBTSxJQUFPLGFBQ3BETCxFQUFXTyxFQUNWTixHQUNDeGQsRUFDQXlkLEVBQ0FLLEVBQ0FILEVBQ0FDLENBQ0EsRUFDRCxFQUlGLE9BQUtELEdBQWVXLElBQ25CZixHQUFZLEtBQUssS0FDaEJ2ZCxFQUFNLFNBQVd5ZCxFQUFXLENBQUcsRUFBQyxZQUFXLEVBQUtBLEVBQVUsTUFBTyxFQUFLLEVBQ3RFLFdBQVlHLEVBQVFILEVBQWEsRUFDakNELEdBQW9CeGQsRUFBTXlkLEVBQVcsU0FBVSxHQUFPRyxDQUFRLEVBQzlELEVBQ0wsR0FJUUwsSUFBYzliLEVBQVUyUyxHQUFRLEtBQU14UyxDQUFLLEtBQzdDSCxFQUFTLElBQU8sUUFBVyxPQUU3QnpCLEVBQUssTUFBT3lkLENBQVcsRUFBRzdiLEVBQzFCQSxFQUFRbkMsRUFBTyxJQUFLTyxFQUFNeWQsQ0FBUyxHQUc3QkgsR0FBbUJ0ZCxFQUFNNEIsRUFBTzJiLENBQVEsQ0FDL0MsQ0FDSCxDQUNBLEdBRUE5ZCxFQUFPLFNBQVMsV0FBYWdkLEdBQWNoZSxFQUFRLG1CQUNsRCxTQUFVdUIsRUFBTW1jLEVBQVcsQ0FDMUIsR0FBS0EsRUFDSixPQUFTLFdBQVlELEdBQVFsYyxFQUFNLFlBQVksQ0FBSSxHQUNsREEsRUFBSyxzQkFBcUIsRUFBRyxLQUM1QmdiLEdBQU1oYixFQUFNLENBQUUsV0FBWSxDQUFHLEVBQUUsVUFBVyxDQUN6QyxPQUFPQSxFQUFLLHNCQUF1QixFQUFDLElBQzFDLENBQVEsR0FDRCxJQUVMLENBQ0YsRUFHQVAsRUFBTyxLQUFNLENBQ1osT0FBUSxHQUNSLFFBQVMsR0FDVCxPQUFRLE9BQ1QsRUFBRyxTQUFVOGUsRUFBUUMsRUFBUyxDQUM3Qi9lLEVBQU8sU0FBVThlLEVBQVNDLEdBQVcsQ0FDcEMsT0FBUSxTQUFVNWMsRUFBUSxDQU96QixRQU5JekMsRUFBSSxFQUNQc2YsRUFBVyxDQUFFLEVBR2JDLEVBQVEsT0FBTzljLEdBQVUsU0FBV0EsRUFBTSxNQUFPLEdBQUcsRUFBSyxDQUFFQSxHQUVwRHpDLEVBQUksRUFBR0EsSUFDZHNmLEVBQVVGLEVBQVNsSyxHQUFXbFYsQ0FBQyxFQUFLcWYsQ0FBUSxFQUMzQ0UsRUFBT3ZmLENBQUcsR0FBSXVmLEVBQU92ZixFQUFJLElBQU91ZixFQUFPLEdBR3pDLE9BQU9ELENBQ1AsQ0FDSCxFQUVNRixJQUFXLFdBQ2Y5ZSxFQUFPLFNBQVU4ZSxFQUFTQyxDQUFNLEVBQUcsSUFBTWxCLEdBRTNDLEdBRUE3ZCxFQUFPLEdBQUcsT0FBUSxDQUNqQixJQUFLLFNBQVVZLEVBQU11QixFQUFRLENBQzVCLE9BQU91USxHQUFRLEtBQU0sU0FBVW5TLEVBQU1LLEVBQU11QixFQUFRLENBQ2xELElBQUlnYyxFQUFRMWQsRUFDWGlMLEVBQU0sQ0FBRSxFQUNSaE0sRUFBSSxFQUVMLEdBQUssTUFBTSxRQUFTa0IsR0FBUyxDQUk1QixJQUhBdWQsRUFBUzlDLEdBQVc5YSxHQUNwQkUsRUFBTUcsRUFBSyxPQUVIbEIsRUFBSWUsRUFBS2YsSUFDaEJnTSxFQUFLOUssRUFBTWxCLENBQUcsQ0FBQSxFQUFLTSxFQUFPLElBQUtPLEVBQU1LLEVBQU1sQixDQUFDLEVBQUksR0FBT3llLENBQU0sRUFHOUQsT0FBT3pTLENBQ1AsQ0FFRCxPQUFPdkosSUFBVSxPQUNoQm5DLEVBQU8sTUFBT08sRUFBTUssRUFBTXVCLENBQU8sRUFDakNuQyxFQUFPLElBQUtPLEVBQU1LLEVBQ25CLEVBQUVBLEVBQU11QixFQUFPLFVBQVUsT0FBUyxDQUFDLENBQ3BDLENBQ0YsR0FHQSxTQUFTK2MsR0FBTzNlLEVBQU1JLEVBQVNnVCxFQUFNd0wsRUFBS0MsRUFBUyxDQUNsRCxPQUFPLElBQUlGLEdBQU0sVUFBVSxLQUFNM2UsRUFBTUksRUFBU2dULEVBQU13TCxFQUFLQyxFQUMzRCxDQUNEcGYsRUFBTyxNQUFRa2YsR0FFZkEsR0FBTSxVQUFZLENBQ2pCLFlBQWFBLEdBQ2IsS0FBTSxTQUFVM2UsRUFBTUksRUFBU2dULEVBQU13TCxFQUFLQyxFQUFRNUosRUFBTyxDQUN4RCxLQUFLLEtBQU9qVixFQUNaLEtBQUssS0FBT29ULEVBQ1osS0FBSyxPQUFTeUwsR0FBVXBmLEVBQU8sT0FBTyxTQUN0QyxLQUFLLFFBQVVXLEVBQ2YsS0FBSyxNQUFRLEtBQUssSUFBTSxLQUFLLElBQUcsRUFDaEMsS0FBSyxJQUFNd2UsRUFDWCxLQUFLLEtBQU8zSixJQUFVeFYsRUFBTyxVQUFXMlQsQ0FBTSxFQUFHLEdBQUssS0FDdEQsRUFDRCxJQUFLLFVBQVcsQ0FDZixJQUFJUyxFQUFROEssR0FBTSxVQUFXLEtBQUssSUFBSSxFQUV0QyxPQUFPOUssR0FBU0EsRUFBTSxJQUNyQkEsRUFBTSxJQUFLLElBQU0sRUFDakI4SyxHQUFNLFVBQVUsU0FBUyxJQUFLLElBQUksQ0FDbkMsRUFDRCxJQUFLLFNBQVVHLEVBQVUsQ0FDeEIsSUFBSUMsRUFDSGxMLEVBQVE4SyxHQUFNLFVBQVcsS0FBSyxJQUFJLEVBRW5DLE9BQUssS0FBSyxRQUFRLFNBQ2pCLEtBQUssSUFBTUksRUFBUXRmLEVBQU8sT0FBUSxLQUFLLE1BQVEsRUFDOUNxZixFQUFTLEtBQUssUUFBUSxTQUFXQSxFQUFTLEVBQUcsRUFBRyxLQUFLLFFBQVEsUUFDakUsRUFFRyxLQUFLLElBQU1DLEVBQVFELEVBRXBCLEtBQUssS0FBUSxLQUFLLElBQU0sS0FBSyxPQUFVQyxFQUFRLEtBQUssTUFFL0MsS0FBSyxRQUFRLE1BQ2pCLEtBQUssUUFBUSxLQUFLLEtBQU0sS0FBSyxLQUFNLEtBQUssSUFBSyxNQUd6Q2xMLEdBQVNBLEVBQU0sSUFDbkJBLEVBQU0sSUFBSyxNQUVYOEssR0FBTSxVQUFVLFNBQVMsSUFBSyxJQUFJLEVBRTVCLElBQ1AsQ0FDRixFQUVBQSxHQUFNLFVBQVUsS0FBSyxVQUFZQSxHQUFNLFVBRXZDQSxHQUFNLFVBQVksQ0FDakIsU0FBVSxDQUNULElBQUssU0FBVWhLLEVBQVEsQ0FDdEIsSUFBSXZNLEVBSUosT0FBS3VNLEVBQU0sS0FBSyxXQUFhLEdBQzVCQSxFQUFNLEtBQU1BLEVBQU0sSUFBTSxHQUFJLE1BQVFBLEVBQU0sS0FBSyxNQUFPQSxFQUFNLElBQUksR0FBTSxLQUMvREEsRUFBTSxLQUFNQSxFQUFNLElBQUksR0FPOUJ2TSxFQUFTM0ksRUFBTyxJQUFLa1YsRUFBTSxLQUFNQSxFQUFNLEtBQU0sSUFHdEMsQ0FBQ3ZNLEdBQVVBLElBQVcsT0FBUyxFQUFJQSxFQUMxQyxFQUNELElBQUssU0FBVXVNLEVBQVEsQ0FLakJsVixFQUFPLEdBQUcsS0FBTWtWLEVBQU0sSUFBSSxFQUM5QmxWLEVBQU8sR0FBRyxLQUFNa1YsRUFBTSxJQUFJLEVBQUlBLEdBQ25CQSxFQUFNLEtBQUssV0FBYSxJQUNuQ2xWLEVBQU8sU0FBVWtWLEVBQU0sSUFBTSxHQUM1QkEsRUFBTSxLQUFLLE1BQU9zSSxHQUFldEksRUFBTSxJQUFNLENBQUEsR0FBTSxNQUNwRGxWLEVBQU8sTUFBT2tWLEVBQU0sS0FBTUEsRUFBTSxLQUFNQSxFQUFNLElBQU1BLEVBQU0sTUFFeERBLEVBQU0sS0FBTUEsRUFBTSxJQUFJLEVBQUtBLEVBQU0sR0FFbEMsQ0FDRCxDQUNGLEVBSUFnSyxHQUFNLFVBQVUsVUFBWUEsR0FBTSxVQUFVLFdBQWEsQ0FDeEQsSUFBSyxTQUFVaEssRUFBUSxDQUNqQkEsRUFBTSxLQUFLLFVBQVlBLEVBQU0sS0FBSyxhQUN0Q0EsRUFBTSxLQUFNQSxFQUFNLElBQUksRUFBS0EsRUFBTSxJQUVsQyxDQUNGLEVBRUFsVixFQUFPLE9BQVMsQ0FDZixPQUFRLFNBQVV1ZixFQUFJLENBQ3JCLE9BQU9BLENBQ1AsRUFDRCxNQUFPLFNBQVVBLEVBQUksQ0FDcEIsTUFBTyxJQUFNLEtBQUssSUFBS0EsRUFBSSxLQUFLLEVBQUksRUFBRyxDQUN2QyxFQUNELFNBQVUsT0FDWCxFQUVBdmYsRUFBTyxHQUFLa2YsR0FBTSxVQUFVLEtBRzVCbGYsRUFBTyxHQUFHLEtBQU8sR0FLakIsSUFDQ3dmLEdBQU9DLEdBQ1BDLEdBQVcseUJBQ1hDLEdBQU8sY0FFUixTQUFTQyxJQUFXLENBQ2RILEtBQ0NyZ0IsRUFBUyxTQUFXLElBQVNsQixFQUFPLHNCQUN4Q0EsRUFBTyxzQkFBdUIwaEIsSUFFOUIxaEIsRUFBTyxXQUFZMGhCLEdBQVU1ZixFQUFPLEdBQUcsUUFBUSxFQUdoREEsRUFBTyxHQUFHLE9BRVgsQ0FHRCxTQUFTNmYsSUFBYyxDQUN0QixPQUFBM2hCLEVBQU8sV0FBWSxVQUFXLENBQzdCc2hCLEdBQVEsTUFDVixHQUNVQSxHQUFRLEtBQUssS0FDdEIsQ0FHRCxTQUFTTSxHQUFPemQsRUFBTTBkLEVBQWUsQ0FDcEMsSUFBSUMsRUFDSHRnQixFQUFJLEVBQ0p3VSxFQUFRLENBQUUsT0FBUTdSLEdBS25CLElBREEwZCxFQUFlQSxFQUFlLEVBQUksRUFDMUJyZ0IsRUFBSSxFQUFHQSxHQUFLLEVBQUlxZ0IsRUFDdkJDLEVBQVFwTCxHQUFXbFYsR0FDbkJ3VSxFQUFPLFNBQVc4TCxDQUFPLEVBQUc5TCxFQUFPLFVBQVk4TCxDQUFPLEVBQUczZCxFQUcxRCxPQUFLMGQsSUFDSjdMLEVBQU0sUUFBVUEsRUFBTSxNQUFRN1IsR0FHeEI2UixDQUNQLENBRUQsU0FBUytMLEdBQWE5ZCxFQUFPd1IsRUFBTXVNLEVBQVksQ0FLOUMsUUFKSWhMLEVBQ0htRixHQUFlOEYsR0FBVSxTQUFVeE0sQ0FBTSxHQUFJLElBQUssT0FBUXdNLEdBQVUsU0FBVSxJQUFPLEVBQ3JGclEsRUFBUSxFQUNSNU8sRUFBU21aLEVBQVcsT0FDYnZLLEVBQVE1TyxFQUFRNE8sSUFDdkIsR0FBT29GLEVBQVFtRixFQUFZdkssQ0FBTyxFQUFDLEtBQU1vUSxFQUFXdk0sRUFBTXhSLEdBR3pELE9BQU8rUyxDQUdULENBRUQsU0FBU2tMLEdBQWtCN2YsRUFBTXdZLEVBQU9zSCxFQUFPLENBQzlDLElBQUkxTSxFQUFNeFIsRUFBT21lLEVBQVFsTSxFQUFPbU0sRUFBU0MsRUFBV0MsRUFBZ0I3SyxFQUNuRThLLEVBQVEsVUFBVzNILEdBQVMsV0FBWUEsRUFDeEM0SCxFQUFPLEtBQ1B2SCxFQUFPLENBQUUsRUFDVDJELEdBQVF4YyxFQUFLLE1BQ2JxZ0IsR0FBU3JnQixFQUFLLFVBQVl3VSxHQUFvQnhVLENBQU0sRUFDcERzZ0IsR0FBV2pOLEdBQVMsSUFBS3JULEVBQU0sUUFBUSxFQUdsQzhmLEVBQUssUUFDVmpNLEVBQVFwVSxFQUFPLFlBQWFPLEVBQU0sSUFBSSxFQUNqQzZULEVBQU0sVUFBWSxPQUN0QkEsRUFBTSxTQUFXLEVBQ2pCbU0sRUFBVW5NLEVBQU0sTUFBTSxLQUN0QkEsRUFBTSxNQUFNLEtBQU8sVUFBVyxDQUN2QkEsRUFBTSxVQUNYbU0sR0FFTCxHQUVFbk0sRUFBTSxXQUVOdU0sRUFBSyxPQUFRLFVBQVcsQ0FHdkJBLEVBQUssT0FBUSxVQUFXLENBQ3ZCdk0sRUFBTSxXQUNBcFUsRUFBTyxNQUFPTyxFQUFNLElBQUksRUFBRyxRQUNoQzZULEVBQU0sTUFBTSxNQUVqQixFQUNBLElBSUMsSUFBTVQsS0FBUW9GLEVBRWIsR0FEQTVXLEVBQVE0VyxFQUFPcEYsR0FDVitMLEdBQVMsS0FBTXZkLEdBQVUsQ0FHN0IsR0FGQSxPQUFPNFcsRUFBT3BGLEdBQ2QyTSxFQUFTQSxHQUFVbmUsSUFBVSxTQUN4QkEsS0FBWXllLEdBQVMsT0FBUyxRQUlsQyxHQUFLemUsSUFBVSxRQUFVMGUsSUFBWUEsR0FBVWxOLENBQU0sSUFBSyxPQUN6RGlOLEdBQVMsT0FJVCxVQUdGeEgsRUFBTXpGLENBQUksRUFBS2tOLElBQVlBLEdBQVVsTixJQUFVM1QsRUFBTyxNQUFPTyxFQUFNb1QsRUFDbkUsQ0FLRixHQURBNk0sRUFBWSxDQUFDeGdCLEVBQU8sY0FBZStZLENBQUssRUFDbkMsR0FBQ3lILEdBQWF4Z0IsRUFBTyxjQUFlb1osQ0FBSSxHQUs3QyxDQUFLc0gsR0FBU25nQixFQUFLLFdBQWEsSUFNL0I4ZixFQUFLLFNBQVcsQ0FBRXRELEdBQU0sU0FBVUEsR0FBTSxVQUFXQSxHQUFNLFdBR3pEMEQsRUFBaUJJLElBQVlBLEdBQVMsUUFDakNKLEdBQWtCLE9BQ3RCQSxFQUFpQjdNLEdBQVMsSUFBS3JULEVBQU0sU0FBUyxHQUUvQ3FWLEVBQVU1VixFQUFPLElBQUtPLEVBQU0sU0FBUyxFQUNoQ3FWLElBQVksU0FDWDZLLEVBQ0o3SyxFQUFVNkssR0FJVjVLLEdBQVUsQ0FBRXRWLEdBQVEsSUFDcEJrZ0IsRUFBaUJsZ0IsRUFBSyxNQUFNLFNBQVdrZ0IsRUFDdkM3SyxFQUFVNVYsRUFBTyxJQUFLTyxFQUFNLFNBQVMsRUFDckNzVixHQUFVLENBQUV0VixDQUFJLE1BS2JxVixJQUFZLFVBQVlBLElBQVksZ0JBQWtCNkssR0FBa0IsT0FDdkV6Z0IsRUFBTyxJQUFLTyxFQUFNLE9BQU8sSUFBTyxTQUc5QmlnQixJQUNMRyxFQUFLLEtBQU0sVUFBVyxDQUNyQjVELEdBQU0sUUFBVTBELENBQ3RCLEdBQ1VBLEdBQWtCLE9BQ3RCN0ssRUFBVW1ILEdBQU0sUUFDaEIwRCxFQUFpQjdLLElBQVksT0FBUyxHQUFLQSxJQUc3Q21ILEdBQU0sUUFBVSxpQkFLZHNELEVBQUssV0FDVHRELEdBQU0sU0FBVyxTQUNqQjRELEVBQUssT0FBUSxVQUFXLENBQ3ZCNUQsR0FBTSxTQUFXc0QsRUFBSyxTQUFVLENBQUMsRUFDakN0RCxHQUFNLFVBQVlzRCxFQUFLLFNBQVUsQ0FBQyxFQUNsQ3RELEdBQU0sVUFBWXNELEVBQUssU0FBVSxDQUFDLENBQ3JDLElBSUNHLEVBQVksR0FDWixJQUFNN00sS0FBUXlGLEVBR1BvSCxJQUNBSyxHQUNDLFdBQVlBLEtBQ2hCRCxHQUFTQyxHQUFTLFFBR25CQSxHQUFXak4sR0FBUyxPQUFRclQsRUFBTSxTQUFVLENBQUUsUUFBU2tnQixDQUFjLEdBSWpFSCxJQUNKTyxHQUFTLE9BQVMsQ0FBQ0QsSUFJZkEsSUFDSi9LLEdBQVUsQ0FBRXRWLEdBQVEsSUFLckJvZ0IsRUFBSyxLQUFNLFVBQVcsQ0FLZkMsSUFDTC9LLEdBQVUsQ0FBRXRWLENBQUksR0FFakJxVCxHQUFTLE9BQVFyVCxFQUFNLFVBQ3ZCLElBQU1vVCxLQUFReUYsRUFDYnBaLEVBQU8sTUFBT08sRUFBTW9ULEVBQU15RixFQUFNekYsQ0FBSSxFQUV6QyxJQUlFNk0sRUFBWVAsR0FBYVcsR0FBU0MsR0FBVWxOLENBQUksRUFBSyxFQUFHQSxFQUFNZ04sR0FDdERoTixLQUFRa04sS0FDZkEsR0FBVWxOLENBQUksRUFBSzZNLEVBQVUsTUFDeEJJLEtBQ0pKLEVBQVUsSUFBTUEsRUFBVSxNQUMxQkEsRUFBVSxNQUFRLElBSXJCLENBRUQsU0FBU00sR0FBWS9ILEVBQU9nSSxFQUFnQixDQUMzQyxJQUFJalIsRUFBT2xQLEVBQU13ZSxFQUFRamQsRUFBT2lTLEVBR2hDLElBQU10RSxLQUFTaUosRUFlZCxHQWRBblksRUFBT3lTLEdBQVd2RCxHQUNsQnNQLEVBQVMyQixFQUFlbmdCLEdBQ3hCdUIsRUFBUTRXLEVBQU9qSixHQUNWLE1BQU0sUUFBUzNOLEtBQ25CaWQsRUFBU2pkLEVBQU8sR0FDaEJBLEVBQVE0VyxFQUFPakosQ0FBTyxFQUFHM04sRUFBTyxDQUFDLEdBRzdCMk4sSUFBVWxQLElBQ2RtWSxFQUFPblksQ0FBTSxFQUFHdUIsRUFDaEIsT0FBTzRXLEVBQU9qSixJQUdmc0UsRUFBUXBVLEVBQU8sU0FBVVksR0FDcEJ3VCxHQUFTLFdBQVlBLEVBQVEsQ0FDakNqUyxFQUFRaVMsRUFBTSxPQUFRalMsR0FDdEIsT0FBTzRXLEVBQU9uWSxHQUlkLElBQU1rUCxLQUFTM04sRUFDTjJOLEtBQVNpSixJQUNoQkEsRUFBT2pKLENBQUssRUFBSzNOLEVBQU8yTixDQUFLLEVBQzdCaVIsRUFBZWpSLENBQU8sRUFBR3NQLEVBRzlCLE1BQ0cyQixFQUFlbmdCLENBQU0sRUFBR3dlLENBRzFCLENBRUQsU0FBU2UsR0FBVzVmLEVBQU15Z0IsRUFBWXJnQixFQUFVLENBQy9DLElBQUlnSSxFQUNIc1ksRUFDQW5SLEVBQVEsRUFDUjVPLEVBQVNpZixHQUFVLFdBQVcsT0FDOUJ2UCxFQUFXNVEsRUFBTyxTQUFVLEVBQUMsT0FBUSxVQUFXLENBRy9DLE9BQU9raEIsRUFBSyxJQUNmLENBQUssRUFDSEEsRUFBTyxVQUFXLENBQ2pCLEdBQUtELEVBQ0osTUFBTyxHQVlSLFFBVklFLEVBQWMzQixJQUFTSyxHQUFhLEVBQ3ZDOU4sRUFBWSxLQUFLLElBQUssRUFBR21PLEVBQVUsVUFBWUEsRUFBVSxTQUFXaUIsQ0FBYSxFQUlqRmhWLEVBQU80RixFQUFZbU8sRUFBVSxVQUFZLEVBQ3pDYixHQUFVLEVBQUlsVCxFQUNkMkQsR0FBUSxFQUNSNU8sR0FBU2dmLEVBQVUsT0FBTyxPQUVuQnBRLEdBQVE1TyxHQUFRNE8sS0FDdkJvUSxFQUFVLE9BQVFwUSxFQUFPLEVBQUMsSUFBS3VQLEVBQU8sRUFNdkMsT0FIQXpPLEVBQVMsV0FBWXJRLEVBQU0sQ0FBRTJmLEVBQVdiLEdBQVN0TixDQUFTLEdBR3JEc04sR0FBVSxHQUFLbmUsR0FDWjZRLEdBSUY3USxJQUNMMFAsRUFBUyxXQUFZclEsRUFBTSxDQUFFMmYsRUFBVyxFQUFHLENBQUMsR0FJN0N0UCxFQUFTLFlBQWFyUSxFQUFNLENBQUUyZixDQUFXLENBQUEsRUFDbEMsR0FDUCxFQUNEQSxFQUFZdFAsRUFBUyxRQUFTLENBQzdCLEtBQU1yUSxFQUNOLE1BQU9QLEVBQU8sT0FBUSxDQUFBLEVBQUlnaEIsQ0FBWSxFQUN0QyxLQUFNaGhCLEVBQU8sT0FBUSxHQUFNLENBQzFCLGNBQWUsQ0FBRSxFQUNqQixPQUFRQSxFQUFPLE9BQU8sUUFDdEIsRUFBRVcsQ0FBUyxFQUNaLG1CQUFvQnFnQixFQUNwQixnQkFBaUJyZ0IsRUFDakIsVUFBVzZlLElBQVNLLEdBQWEsRUFDakMsU0FBVWxmLEVBQVEsU0FDbEIsT0FBUSxDQUFFLEVBQ1YsWUFBYSxTQUFVZ1QsRUFBTXdMLEVBQU0sQ0FDbEMsSUFBSWpLLEVBQVFsVixFQUFPLE1BQU9PLEVBQU0yZixFQUFVLEtBQU12TSxFQUFNd0wsRUFDckRlLEVBQVUsS0FBSyxjQUFldk0sQ0FBTSxHQUFJdU0sRUFBVSxLQUFLLFFBQ3hELE9BQUFBLEVBQVUsT0FBTyxLQUFNaEwsR0FDaEJBLENBQ1AsRUFDRCxLQUFNLFNBQVVrTSxFQUFVLENBQ3pCLElBQUl0UixFQUFRLEVBSVg1TyxFQUFTa2dCLEVBQVVsQixFQUFVLE9BQU8sT0FBUyxFQUM5QyxHQUFLZSxFQUNKLE9BQU8sS0FHUixJQURBQSxFQUFVLEdBQ0ZuUixFQUFRNU8sRUFBUTRPLElBQ3ZCb1EsRUFBVSxPQUFRcFEsQ0FBTyxFQUFDLElBQUssQ0FBQyxFQUlqQyxPQUFLc1IsR0FDSnhRLEVBQVMsV0FBWXJRLEVBQU0sQ0FBRTJmLEVBQVcsRUFBRyxDQUFDLEdBQzVDdFAsRUFBUyxZQUFhclEsRUFBTSxDQUFFMmYsRUFBV2tCLENBQVMsQ0FBQSxHQUVsRHhRLEVBQVMsV0FBWXJRLEVBQU0sQ0FBRTJmLEVBQVdrQixDQUFTLENBQUEsRUFFM0MsSUFDUCxDQUNKLENBQUssRUFDSHJJLEVBQVFtSCxFQUFVLE1BSW5CLElBRkFZLEdBQVkvSCxFQUFPbUgsRUFBVSxLQUFLLGFBQWEsRUFFdkNwUSxFQUFRNU8sRUFBUTRPLElBRXZCLEdBREFuSCxFQUFTd1gsR0FBVSxXQUFZclEsR0FBUSxLQUFNb1EsRUFBVzNmLEVBQU13WSxFQUFPbUgsRUFBVSxJQUFJLEVBQzlFdlgsRUFDSixPQUFLMUosRUFBWTBKLEVBQU8sUUFDdkIzSSxFQUFPLFlBQWFrZ0IsRUFBVSxLQUFNQSxFQUFVLEtBQUssS0FBSyxFQUFHLEtBQzFEdlgsRUFBTyxLQUFLLEtBQU1BLElBRWJBLEVBSVQsT0FBQTNJLEVBQU8sSUFBSytZLEVBQU9rSCxHQUFhQyxDQUFTLEVBRXBDamhCLEVBQVlpaEIsRUFBVSxLQUFLLEtBQUssR0FDcENBLEVBQVUsS0FBSyxNQUFNLEtBQU0zZixFQUFNMmYsQ0FBUyxFQUkzQ0EsRUFDRSxTQUFVQSxFQUFVLEtBQUssUUFBVSxFQUNuQyxLQUFNQSxFQUFVLEtBQUssS0FBTUEsRUFBVSxLQUFLLFFBQVUsRUFDcEQsS0FBTUEsRUFBVSxLQUFLLElBQU0sRUFDM0IsT0FBUUEsRUFBVSxLQUFLLFFBRXpCbGdCLEVBQU8sR0FBRyxNQUNUQSxFQUFPLE9BQVFraEIsRUFBTSxDQUNwQixLQUFNM2dCLEVBQ04sS0FBTTJmLEVBQ04sTUFBT0EsRUFBVSxLQUFLLEtBQ3pCLENBQUssQ0FDTCxFQUVRQSxDQUNQLENBRURsZ0IsRUFBTyxVQUFZQSxFQUFPLE9BQVFtZ0IsR0FBVyxDQUU1QyxTQUFVLENBQ1QsSUFBSyxDQUFFLFNBQVV4TSxFQUFNeFIsRUFBUSxDQUM5QixJQUFJK1MsRUFBUSxLQUFLLFlBQWF2QixFQUFNeFIsQ0FBSyxFQUN6QyxPQUFBNlMsR0FBV0UsRUFBTSxLQUFNdkIsRUFBTWdCLEdBQVEsS0FBTXhTLEdBQVMrUyxHQUM3Q0EsQ0FDVixDQUFLLENBQ0gsRUFFRCxRQUFTLFNBQVU2RCxFQUFPelksRUFBVyxDQUMvQnJCLEVBQVk4WixJQUNoQnpZLEVBQVd5WSxFQUNYQSxFQUFRLENBQUUsTUFFVkEsRUFBUUEsRUFBTSxNQUFPL0osSUFPdEIsUUFKSTJFLEVBQ0g3RCxFQUFRLEVBQ1I1TyxFQUFTNlgsRUFBTSxPQUVSakosRUFBUTVPLEVBQVE0TyxJQUN2QjZELEVBQU9vRixFQUFPakosR0FDZHFRLEdBQVUsU0FBVXhNLENBQU0sRUFBR3dNLEdBQVUsU0FBVXhNLENBQU0sR0FBSSxHQUMzRHdNLEdBQVUsU0FBVXhNLENBQU0sRUFBQyxRQUFTclQsQ0FBUSxDQUU3QyxFQUVELFdBQVksQ0FBRThmLEVBQWtCLEVBRWhDLFVBQVcsU0FBVTlmLEVBQVUrZ0IsRUFBVSxDQUNuQ0EsRUFDSmxCLEdBQVUsV0FBVyxRQUFTN2YsR0FFOUI2ZixHQUFVLFdBQVcsS0FBTTdmLEVBRTVCLENBQ0YsR0FFQU4sRUFBTyxNQUFRLFNBQVVzaEIsRUFBT2xDLEVBQVFwWSxFQUFLLENBQzVDLElBQUl1YSxFQUFNRCxHQUFTLE9BQU9BLEdBQVUsU0FBV3RoQixFQUFPLE9BQVEsR0FBSXNoQixHQUFVLENBQzNFLFNBQVV0YSxHQUFNLENBQUNBLEdBQU1vWSxHQUN0Qm5nQixFQUFZcWlCLENBQUssR0FBTUEsRUFDeEIsU0FBVUEsRUFDVixPQUFRdGEsR0FBTW9ZLEdBQVVBLEdBQVUsQ0FBQ25nQixFQUFZbWdCLENBQU0sR0FBTUEsQ0FDN0QsRUFHQyxPQUFLcGYsRUFBTyxHQUFHLElBQ2R1aEIsRUFBSSxTQUFXLEVBR1YsT0FBT0EsRUFBSSxVQUFhLFdBQ3ZCQSxFQUFJLFlBQVl2aEIsRUFBTyxHQUFHLE9BQzlCdWhCLEVBQUksU0FBV3ZoQixFQUFPLEdBQUcsT0FBUXVoQixFQUFJLFVBR3JDQSxFQUFJLFNBQVd2aEIsRUFBTyxHQUFHLE9BQU8sV0FNOUJ1aEIsRUFBSSxPQUFTLE1BQVFBLEVBQUksUUFBVSxNQUN2Q0EsRUFBSSxNQUFRLE1BSWJBLEVBQUksSUFBTUEsRUFBSSxTQUVkQSxFQUFJLFNBQVcsVUFBVyxDQUNwQnRpQixFQUFZc2lCLEVBQUksTUFDcEJBLEVBQUksSUFBSSxLQUFNLE1BR1ZBLEVBQUksT0FDUnZoQixFQUFPLFFBQVMsS0FBTXVoQixFQUFJLEtBQUssQ0FFbEMsRUFFUUEsQ0FDUixFQUVBdmhCLEVBQU8sR0FBRyxPQUFRLENBQ2pCLE9BQVEsU0FBVXNoQixFQUFPRSxFQUFJcEMsRUFBUTllLEVBQVcsQ0FHL0MsT0FBTyxLQUFLLE9BQVF5VSxFQUFvQixFQUFDLElBQUssVUFBVyxDQUFHLEVBQUMsS0FBTSxFQUdqRSxJQUFLLEVBQUMsUUFBUyxDQUFFLFFBQVN5TSxDQUFFLEVBQUlGLEVBQU9sQyxFQUFROWUsRUFDakQsRUFDRCxRQUFTLFNBQVVxVCxFQUFNMk4sRUFBT2xDLEVBQVE5ZSxFQUFXLENBQ2xELElBQUltaEIsRUFBUXpoQixFQUFPLGNBQWUyVCxDQUFNLEVBQ3ZDK04sRUFBUzFoQixFQUFPLE1BQU9zaEIsRUFBT2xDLEVBQVE5ZSxDQUFVLEVBQ2hEcWhCLEVBQWMsVUFBVyxDQUd4QixJQUFJaEIsRUFBT1IsR0FBVyxLQUFNbmdCLEVBQU8sT0FBUSxHQUFJMlQsR0FBUStOLElBR2xERCxHQUFTN04sR0FBUyxJQUFLLEtBQU0sUUFBUSxJQUN6QytNLEVBQUssS0FBTSxHQUVoQixFQUVFLE9BQUFnQixFQUFZLE9BQVNBLEVBRWRGLEdBQVNDLEVBQU8sUUFBVSxHQUNoQyxLQUFLLEtBQU1DLENBQWEsRUFDeEIsS0FBSyxNQUFPRCxFQUFPLE1BQU9DLENBQVcsQ0FDdEMsRUFDRCxLQUFNLFNBQVV0ZixFQUFNdWYsRUFBWVIsRUFBVSxDQUMzQyxJQUFJUyxFQUFZLFNBQVV6TixFQUFRLENBQ2pDLElBQUkwTixFQUFPMU4sRUFBTSxLQUNqQixPQUFPQSxFQUFNLEtBQ2IwTixFQUFNVixDQUFPLENBQ2hCLEVBRUUsT0FBSyxPQUFPL2UsR0FBUyxXQUNwQitlLEVBQVVRLEVBQ1ZBLEVBQWF2ZixFQUNiQSxFQUFPLFFBRUh1ZixHQUNKLEtBQUssTUFBT3ZmLEdBQVEsS0FBTSxDQUFFLENBQUEsRUFHdEIsS0FBSyxLQUFNLFVBQVcsQ0FDNUIsSUFBSTBmLEVBQVUsR0FDYmpTLEVBQVF6TixHQUFRLE1BQVFBLEVBQU8sYUFDL0IyZixFQUFTaGlCLEVBQU8sT0FDaEIwVCxFQUFPRSxHQUFTLElBQUssTUFFdEIsR0FBSzlELEVBQ0M0RCxFQUFNNUQsQ0FBTyxHQUFJNEQsRUFBTTVELENBQUssRUFBRyxNQUNuQytSLEVBQVduTyxFQUFNNUQsQ0FBSyxPQUd2QixLQUFNQSxLQUFTNEQsRUFDVEEsRUFBTTVELENBQU8sR0FBSTRELEVBQU01RCxHQUFRLE1BQVE2UCxHQUFLLEtBQU03UCxJQUN0RCtSLEVBQVduTyxFQUFNNUQsQ0FBSyxHQUt6QixJQUFNQSxFQUFRa1MsRUFBTyxPQUFRbFMsS0FDdkJrUyxFQUFRbFMsR0FBUSxPQUFTLE9BQzNCek4sR0FBUSxNQUFRMmYsRUFBUWxTLENBQUssRUFBRyxRQUFVek4sS0FFNUMyZixFQUFRbFMsQ0FBTyxFQUFDLEtBQUssS0FBTXNSLENBQU8sRUFDbENXLEVBQVUsR0FDVkMsRUFBTyxPQUFRbFMsRUFBTyxLQU9uQmlTLEdBQVcsQ0FBQ1gsSUFDaEJwaEIsRUFBTyxRQUFTLEtBQU1xQyxFQUUxQixFQUNFLEVBQ0QsT0FBUSxTQUFVQSxFQUFPLENBQ3hCLE9BQUtBLElBQVMsS0FDYkEsRUFBT0EsR0FBUSxNQUVULEtBQUssS0FBTSxVQUFXLENBQzVCLElBQUl5TixFQUNINEQsRUFBT0UsR0FBUyxJQUFLLElBQU0sRUFDM0JsRSxFQUFRZ0UsRUFBTXJSLEVBQU8sT0FBUyxFQUM5QitSLEVBQVFWLEVBQU1yUixFQUFPLFlBQWMsRUFDbkMyZixFQUFTaGlCLEVBQU8sT0FDaEJrQixFQUFTd08sRUFBUUEsRUFBTSxPQUFTLEVBYWpDLElBVkFnRSxFQUFLLE9BQVMsR0FHZDFULEVBQU8sTUFBTyxLQUFNcUMsRUFBTSxDQUFFLENBQUEsRUFFdkIrUixHQUFTQSxFQUFNLE1BQ25CQSxFQUFNLEtBQUssS0FBTSxLQUFNLEVBQUksRUFJdEJ0RSxFQUFRa1MsRUFBTyxPQUFRbFMsS0FDdkJrUyxFQUFRbFMsQ0FBTyxFQUFDLE9BQVMsTUFBUWtTLEVBQVFsUyxDQUFLLEVBQUcsUUFBVXpOLElBQy9EMmYsRUFBUWxTLENBQU8sRUFBQyxLQUFLLEtBQU0sRUFBSSxFQUMvQmtTLEVBQU8sT0FBUWxTLEVBQU8sSUFLeEIsSUFBTUEsRUFBUSxFQUFHQSxFQUFRNU8sRUFBUTRPLElBQzNCSixFQUFPSSxDQUFPLEdBQUlKLEVBQU9JLENBQUssRUFBRyxRQUNyQ0osRUFBT0ksQ0FBTyxFQUFDLE9BQU8sS0FBTSxJQUFJLEVBS2xDLE9BQU80RCxFQUFLLE1BQ2YsRUFDRSxDQUNGLEdBRUExVCxFQUFPLEtBQU0sQ0FBRSxTQUFVLE9BQVEsUUFBVSxTQUFVb0MsRUFBSXhCLEVBQU8sQ0FDL0QsSUFBSXFoQixFQUFRamlCLEVBQU8sR0FBSVksQ0FBSSxFQUMzQlosRUFBTyxHQUFJWSxDQUFJLEVBQUssU0FBVTBnQixFQUFPbEMsRUFBUTllLEVBQVcsQ0FDdkQsT0FBT2doQixHQUFTLE1BQVEsT0FBT0EsR0FBVSxVQUN4Q1csRUFBTSxNQUFPLEtBQU0sU0FBVyxFQUM5QixLQUFLLFFBQVNuQyxHQUFPbGYsRUFBTSxFQUFJLEVBQUkwZ0IsRUFBT2xDLEVBQVE5ZSxFQUNyRCxDQUNBLEdBR0FOLEVBQU8sS0FBTSxDQUNaLFVBQVc4ZixHQUFPLE1BQVEsRUFDMUIsUUFBU0EsR0FBTyxNQUFRLEVBQ3hCLFlBQWFBLEdBQU8sUUFBVSxFQUM5QixPQUFRLENBQUUsUUFBUyxNQUFRLEVBQzNCLFFBQVMsQ0FBRSxRQUFTLE1BQVEsRUFDNUIsV0FBWSxDQUFFLFFBQVMsUUFBVSxDQUNsQyxFQUFHLFNBQVVsZixFQUFNbVksRUFBUSxDQUMxQi9ZLEVBQU8sR0FBSVksQ0FBSSxFQUFLLFNBQVUwZ0IsRUFBT2xDLEVBQVE5ZSxFQUFXLENBQ3ZELE9BQU8sS0FBSyxRQUFTeVksRUFBT3VJLEVBQU9sQyxFQUFROWUsRUFDN0MsQ0FDQSxHQUVBTixFQUFPLE9BQVMsR0FDaEJBLEVBQU8sR0FBRyxLQUFPLFVBQVcsQ0FDM0IsSUFBSWtpQixFQUNIeGlCLEVBQUksRUFDSnNpQixFQUFTaGlCLEVBQU8sT0FJakIsSUFGQXdmLEdBQVEsS0FBSyxNQUVMOWYsRUFBSXNpQixFQUFPLE9BQVF0aUIsSUFDMUJ3aUIsRUFBUUYsRUFBUXRpQixHQUdYLENBQUN3aUIsRUFBTyxHQUFJRixFQUFRdGlCLENBQUMsSUFBT3dpQixHQUNoQ0YsRUFBTyxPQUFRdGlCLElBQUssQ0FBQyxFQUlqQnNpQixFQUFPLFFBQ1poaUIsRUFBTyxHQUFHLE9BRVh3ZixHQUFRLE1BQ1QsRUFFQXhmLEVBQU8sR0FBRyxNQUFRLFNBQVVraUIsRUFBUSxDQUNuQ2xpQixFQUFPLE9BQU8sS0FBTWtpQixHQUNwQmxpQixFQUFPLEdBQUcsT0FDWCxFQUVBQSxFQUFPLEdBQUcsU0FBVyxHQUNyQkEsRUFBTyxHQUFHLE1BQVEsVUFBVyxDQUN2QnlmLEtBSUxBLEdBQWEsR0FDYkcsS0FDRCxFQUVBNWYsRUFBTyxHQUFHLEtBQU8sVUFBVyxDQUMzQnlmLEdBQWEsSUFDZCxFQUVBemYsRUFBTyxHQUFHLE9BQVMsQ0FDbEIsS0FBTSxJQUNOLEtBQU0sSUFHTixTQUFVLEdBQ1gsRUFJQUEsRUFBTyxHQUFHLE1BQVEsU0FBVW1pQixFQUFNOWYsRUFBTyxDQUN4QyxPQUFBOGYsRUFBT25pQixFQUFPLElBQUtBLEVBQU8sR0FBRyxPQUFRbWlCLENBQUksR0FBTUEsRUFDL0M5ZixFQUFPQSxHQUFRLEtBRVIsS0FBSyxNQUFPQSxFQUFNLFNBQVVnUyxFQUFNRCxFQUFRLENBQ2hELElBQUlnTyxFQUFVbGtCLEVBQU8sV0FBWW1XLEVBQU04TixDQUFJLEVBQzNDL04sRUFBTSxLQUFPLFVBQVcsQ0FDdkJsVyxFQUFPLGFBQWNra0IsRUFDeEIsQ0FDQSxFQUNBLEVBR0UsVUFBVyxDQUNaLElBQUlyYSxFQUFRM0ksRUFBUyxjQUFlLE9BQVMsRUFDNUN1SCxFQUFTdkgsRUFBUyxjQUFlLFFBQVUsRUFDM0NtaUIsRUFBTTVhLEVBQU8sWUFBYXZILEVBQVMsY0FBZSxRQUFRLEdBRTNEMkksRUFBTSxLQUFPLFdBSWIvSSxFQUFRLFFBQVUrSSxFQUFNLFFBQVUsR0FJbEMvSSxFQUFRLFlBQWN1aUIsRUFBSSxTQUkxQnhaLEVBQVEzSSxFQUFTLGNBQWUsU0FDaEMySSxFQUFNLE1BQVEsSUFDZEEsRUFBTSxLQUFPLFFBQ2IvSSxFQUFRLFdBQWErSSxFQUFNLFFBQVUsR0FDdEMsSUFHQSxJQUFJc2EsR0FDSEMsR0FBYXRpQixFQUFPLEtBQUssV0FFMUJBLEVBQU8sR0FBRyxPQUFRLENBQ2pCLEtBQU0sU0FBVVksRUFBTXVCLEVBQVEsQ0FDN0IsT0FBT3VRLEdBQVEsS0FBTTFTLEVBQU8sS0FBTVksRUFBTXVCLEVBQU8sVUFBVSxPQUFTLEVBQ2xFLEVBRUQsV0FBWSxTQUFVdkIsRUFBTyxDQUM1QixPQUFPLEtBQUssS0FBTSxVQUFXLENBQzVCWixFQUFPLFdBQVksS0FBTVksRUFDNUIsRUFDRSxDQUNGLEdBRUFaLEVBQU8sT0FBUSxDQUNkLEtBQU0sU0FBVU8sRUFBTUssRUFBTXVCLEVBQVEsQ0FDbkMsSUFBSTlCLEVBQUsrVCxFQUNSbU8sRUFBUWhpQixFQUFLLFNBR2QsR0FBSyxFQUFBZ2lCLElBQVUsR0FBS0EsSUFBVSxHQUFLQSxJQUFVLEdBSzdDLElBQUssT0FBT2hpQixFQUFLLGFBQWlCLElBQ2pDLE9BQU9QLEVBQU8sS0FBTU8sRUFBTUssRUFBTXVCLENBQUssRUFVdEMsSUFMS29nQixJQUFVLEdBQUssQ0FBQ3ZpQixFQUFPLFNBQVVPLENBQUksS0FDekM2VCxFQUFRcFUsRUFBTyxVQUFXWSxFQUFLLFlBQVcsQ0FBSSxJQUMzQ1osRUFBTyxLQUFLLE1BQU0sS0FBSyxLQUFNWSxDQUFNLEVBQUd5aEIsR0FBVyxTQUdoRGxnQixJQUFVLE9BQVksQ0FDMUIsR0FBS0EsSUFBVSxLQUFPLENBQ3JCbkMsRUFBTyxXQUFZTyxFQUFNSyxHQUN6QixNQUNBLENBRUQsT0FBS3dULEdBQVMsUUFBU0EsSUFDcEIvVCxFQUFNK1QsRUFBTSxJQUFLN1QsRUFBTTRCLEVBQU92QixDQUFNLEtBQU8sT0FDdENQLEdBR1JFLEVBQUssYUFBY0ssRUFBTXVCLEVBQVEsRUFBRSxFQUM1QkEsRUFDUCxDQUVELE9BQUtpUyxHQUFTLFFBQVNBLElBQVcvVCxFQUFNK1QsRUFBTSxJQUFLN1QsRUFBTUssQ0FBTSxLQUFPLEtBQzlEUCxHQUdSQSxFQUFNTCxFQUFPLEtBQUssS0FBTU8sRUFBTUssQ0FBSSxFQUczQlAsR0FBYyxRQUNyQixFQUVELFVBQVcsQ0FDVixLQUFNLENBQ0wsSUFBSyxTQUFVRSxFQUFNNEIsRUFBUSxDQUM1QixHQUFLLENBQUNuRCxFQUFRLFlBQWNtRCxJQUFVLFNBQ3JDRyxFQUFVL0IsRUFBTSxTQUFZLENBQzVCLElBQUlaLEVBQU1ZLEVBQUssTUFDZixPQUFBQSxFQUFLLGFBQWMsT0FBUTRCLEdBQ3RCeEMsSUFDSlksRUFBSyxNQUFRWixHQUVQd0MsQ0FDUCxDQUNELENBQ0QsQ0FDRCxFQUVELFdBQVksU0FBVTVCLEVBQU00QixFQUFRLENBQ25DLElBQUl2QixFQUNIbEIsRUFBSSxFQUlKOGlCLEVBQVlyZ0IsR0FBU0EsRUFBTSxNQUFPNk0sRUFBYSxFQUVoRCxHQUFLd1QsR0FBYWppQixFQUFLLFdBQWEsRUFDbkMsS0FBVUssRUFBTzRoQixFQUFXOWlCLE1BQzNCYSxFQUFLLGdCQUFpQkssRUFHeEIsQ0FDRixHQUdBeWhCLEdBQVcsQ0FDVixJQUFLLFNBQVU5aEIsRUFBTTRCLEVBQU92QixFQUFPLENBQ2xDLE9BQUt1QixJQUFVLEdBR2RuQyxFQUFPLFdBQVlPLEVBQU1LLEdBRXpCTCxFQUFLLGFBQWNLLEVBQU1BLEdBRW5CQSxDQUNQLENBQ0YsRUFFQVosRUFBTyxLQUFNQSxFQUFPLEtBQUssTUFBTSxLQUFLLE9BQU8sTUFBTyxNQUFNLEVBQUksU0FBVW9DLEVBQUl4QixFQUFPLENBQ2hGLElBQUk2aEIsRUFBU0gsR0FBWTFoQixDQUFNLEdBQUlaLEVBQU8sS0FBSyxLQUUvQ3NpQixHQUFZMWhCLENBQU0sRUFBRyxTQUFVTCxFQUFNSyxFQUFNOGhCLEVBQVEsQ0FDbEQsSUFBSXJpQixFQUFLeVksRUFDUjZKLEVBQWdCL2hCLEVBQUssY0FFdEIsT0FBTThoQixJQUdMNUosRUFBU3dKLEdBQVlLLEdBQ3JCTCxHQUFZSyxDQUFlLEVBQUd0aUIsRUFDOUJBLEVBQU1vaUIsRUFBUWxpQixFQUFNSyxFQUFNOGhCLENBQU8sR0FBSSxLQUNwQ0MsRUFDQSxLQUNETCxHQUFZSyxDQUFlLEVBQUc3SixHQUV4QnpZLENBQ1QsQ0FDQSxHQUtBLElBQUl1aUIsR0FBYSxzQ0FDaEJDLEdBQWEsZ0JBRWQ3aUIsRUFBTyxHQUFHLE9BQVEsQ0FDakIsS0FBTSxTQUFVWSxFQUFNdUIsRUFBUSxDQUM3QixPQUFPdVEsR0FBUSxLQUFNMVMsRUFBTyxLQUFNWSxFQUFNdUIsRUFBTyxVQUFVLE9BQVMsRUFDbEUsRUFFRCxXQUFZLFNBQVV2QixFQUFPLENBQzVCLE9BQU8sS0FBSyxLQUFNLFVBQVcsQ0FDNUIsT0FBTyxLQUFNWixFQUFPLFFBQVNZLENBQU0sR0FBSUEsQ0FBSSxDQUM5QyxFQUNFLENBQ0YsR0FFQVosRUFBTyxPQUFRLENBQ2QsS0FBTSxTQUFVTyxFQUFNSyxFQUFNdUIsRUFBUSxDQUNuQyxJQUFJOUIsRUFBSytULEVBQ1JtTyxFQUFRaGlCLEVBQUssU0FHZCxHQUFLLEVBQUFnaUIsSUFBVSxHQUFLQSxJQUFVLEdBQUtBLElBQVUsR0FXN0MsT0FQS0EsSUFBVSxHQUFLLENBQUN2aUIsRUFBTyxTQUFVTyxDQUFJLEtBR3pDSyxFQUFPWixFQUFPLFFBQVNZLENBQUksR0FBTUEsRUFDakN3VCxFQUFRcFUsRUFBTyxVQUFXWSxJQUd0QnVCLElBQVUsT0FDVGlTLEdBQVMsUUFBU0EsSUFDcEIvVCxFQUFNK1QsRUFBTSxJQUFLN1QsRUFBTTRCLEVBQU92QixDQUFNLEtBQU8sT0FDdENQLEVBR0NFLEVBQU1LLENBQU0sRUFBR3VCLEVBR3BCaVMsR0FBUyxRQUFTQSxJQUFXL1QsRUFBTStULEVBQU0sSUFBSzdULEVBQU1LLENBQU0sS0FBTyxLQUM5RFAsRUFHREUsRUFBTUssRUFDYixFQUVELFVBQVcsQ0FDVixTQUFVLENBQ1QsSUFBSyxTQUFVTCxFQUFPLENBTXJCLElBQUl1aUIsRUFBVzlpQixFQUFPLEtBQUssS0FBTU8sRUFBTSxZQUV2QyxPQUFLdWlCLEVBQ0csU0FBVUEsRUFBVSxJQUkzQkYsR0FBVyxLQUFNcmlCLEVBQUssUUFBVSxHQUNoQ3NpQixHQUFXLEtBQU10aUIsRUFBSyxRQUFVLEdBQ2hDQSxFQUFLLEtBRUUsRUFHRCxFQUNQLENBQ0QsQ0FDRCxFQUVELFFBQVMsQ0FDUixJQUFPLFVBQ1AsTUFBUyxXQUNULENBQ0YsR0FVTXZCLEVBQVEsY0FDYmdCLEVBQU8sVUFBVSxTQUFXLENBQzNCLElBQUssU0FBVU8sRUFBTyxDQUlyQixJQUFJaUosRUFBU2pKLEVBQUssV0FDbEIsT0FBS2lKLEdBQVVBLEVBQU8sWUFDckJBLEVBQU8sV0FBVyxjQUVaLElBQ1AsRUFDRCxJQUFLLFNBQVVqSixFQUFPLENBSXJCLElBQUlpSixFQUFTakosRUFBSyxXQUNiaUosSUFDSkEsRUFBTyxjQUVGQSxFQUFPLFlBQ1hBLEVBQU8sV0FBVyxjQUdwQixDQUNILEdBR0F4SixFQUFPLEtBQU0sQ0FDWixXQUNBLFdBQ0EsWUFDQSxjQUNBLGNBQ0EsVUFDQSxVQUNBLFNBQ0EsY0FDQSxpQkFDRCxFQUFHLFVBQVcsQ0FDYkEsRUFBTyxRQUFTLEtBQUssWUFBYSxDQUFBLEVBQUssSUFDeEMsR0FPQyxTQUFTK2lCLEdBQWtCNWdCLEVBQVEsQ0FDbEMsSUFBSXVJLEVBQVN2SSxFQUFNLE1BQU82TSxFQUFhLEdBQU0sQ0FBQSxFQUM3QyxPQUFPdEUsRUFBTyxLQUFNLElBQ3BCLENBR0YsU0FBU3NZLEdBQVV6aUIsRUFBTyxDQUN6QixPQUFPQSxFQUFLLGNBQWdCQSxFQUFLLGFBQWMsT0FBUyxHQUFJLEVBQzVELENBRUQsU0FBUzBpQixHQUFnQjlnQixFQUFRLENBQ2hDLE9BQUssTUFBTSxRQUFTQSxHQUNaQSxFQUVILE9BQU9BLEdBQVUsU0FDZEEsRUFBTSxNQUFPNk0sRUFBYSxHQUFNLENBQUEsRUFFakMsRUFDUCxDQUVEaFAsRUFBTyxHQUFHLE9BQVEsQ0FDakIsU0FBVSxTQUFVbUMsRUFBUSxDQUMzQixJQUFJK2dCLEVBQVlwVSxFQUFLcVUsRUFBVXJiLEVBQVdwSSxFQUFHMGpCLEVBRTdDLE9BQUtua0IsRUFBWWtELEdBQ1QsS0FBSyxLQUFNLFNBQVV6QixFQUFJLENBQy9CVixFQUFRLElBQUksRUFBRyxTQUFVbUMsRUFBTSxLQUFNLEtBQU16QixFQUFHc2lCLEdBQVUsSUFBSSxDQUFJLENBQUEsQ0FDcEUsSUFHRUUsRUFBYUQsR0FBZ0I5Z0IsR0FFeEIrZ0IsRUFBVyxPQUNSLEtBQUssS0FBTSxVQUFXLENBSTVCLEdBSEFDLEVBQVdILEdBQVUsTUFDckJsVSxFQUFNLEtBQUssV0FBYSxHQUFPLElBQU1pVSxHQUFrQkksR0FBYSxJQUUvRHJVLEVBQU0sQ0FDVixJQUFNcFAsRUFBSSxFQUFHQSxFQUFJd2pCLEVBQVcsT0FBUXhqQixJQUNuQ29JLEVBQVlvYixFQUFZeGpCLEdBQ25Cb1AsRUFBSSxRQUFTLElBQU1oSCxFQUFZLEdBQUssRUFBRyxJQUMzQ2dILEdBQU9oSCxFQUFZLEtBS3JCc2IsRUFBYUwsR0FBa0JqVSxHQUMxQnFVLElBQWFDLEdBQ2pCLEtBQUssYUFBYyxRQUFTQSxFQUU3QixDQUNMLEdBR1MsS0FDUCxFQUVELFlBQWEsU0FBVWpoQixFQUFRLENBQzlCLElBQUkrZ0IsRUFBWXBVLEVBQUtxVSxFQUFVcmIsRUFBV3BJLEVBQUcwakIsRUFFN0MsT0FBS25rQixFQUFZa0QsR0FDVCxLQUFLLEtBQU0sU0FBVXpCLEVBQUksQ0FDL0JWLEVBQVEsSUFBSSxFQUFHLFlBQWFtQyxFQUFNLEtBQU0sS0FBTXpCLEVBQUdzaUIsR0FBVSxJQUFJLENBQUksQ0FBQSxDQUN2RSxHQUdRLFVBQVUsUUFJaEJFLEVBQWFELEdBQWdCOWdCLEdBRXhCK2dCLEVBQVcsT0FDUixLQUFLLEtBQU0sVUFBVyxDQU01QixHQUxBQyxFQUFXSCxHQUFVLE1BR3JCbFUsRUFBTSxLQUFLLFdBQWEsR0FBTyxJQUFNaVUsR0FBa0JJLEdBQWEsSUFFL0RyVSxFQUFNLENBQ1YsSUFBTXBQLEVBQUksRUFBR0EsRUFBSXdqQixFQUFXLE9BQVF4akIsSUFJbkMsSUFIQW9JLEVBQVlvYixFQUFZeGpCLEdBR2hCb1AsRUFBSSxRQUFTLElBQU1oSCxFQUFZLEdBQUcsRUFBSyxJQUM5Q2dILEVBQU1BLEVBQUksUUFBUyxJQUFNaEgsRUFBWSxJQUFLLEtBSzVDc2IsRUFBYUwsR0FBa0JqVSxHQUMxQnFVLElBQWFDLEdBQ2pCLEtBQUssYUFBYyxRQUFTQSxFQUU3QixDQUNMLEdBR1MsTUEvQkMsS0FBSyxLQUFNLFFBQVMsRUFBRSxDQWdDOUIsRUFFRCxZQUFhLFNBQVVqaEIsRUFBT2toQixFQUFXLENBQ3hDLElBQUlILEVBQVlwYixFQUFXcEksRUFBRzJPLEVBQzdCaE0sRUFBTyxPQUFPRixFQUNkbWhCLEVBQWVqaEIsSUFBUyxVQUFZLE1BQU0sUUFBU0YsQ0FBSyxFQUV6RCxPQUFLbEQsRUFBWWtELEdBQ1QsS0FBSyxLQUFNLFNBQVV6QyxFQUFJLENBQy9CTSxFQUFRLElBQUksRUFBRyxZQUNkbUMsRUFBTSxLQUFNLEtBQU16QyxFQUFHc2pCLEdBQVUsSUFBTSxFQUFFSyxDQUFVLEVBQ2pEQSxDQUNMLENBQ0EsR0FHTyxPQUFPQSxHQUFhLFdBQWFDLEVBQzlCRCxFQUFXLEtBQUssU0FBVWxoQixDQUFPLEVBQUcsS0FBSyxZQUFhQSxJQUc5RCtnQixFQUFhRCxHQUFnQjlnQixHQUV0QixLQUFLLEtBQU0sVUFBVyxDQUM1QixHQUFLbWhCLEVBS0osSUFGQWpWLEVBQU9yTyxFQUFRLE1BRVROLEVBQUksRUFBR0EsRUFBSXdqQixFQUFXLE9BQVF4akIsSUFDbkNvSSxFQUFZb2IsRUFBWXhqQixHQUduQjJPLEVBQUssU0FBVXZHLEdBQ25CdUcsRUFBSyxZQUFhdkcsR0FFbEJ1RyxFQUFLLFNBQVV2RyxRQUtOM0YsSUFBVSxRQUFhRSxJQUFTLGFBQzNDeUYsRUFBWWtiLEdBQVUsTUFDakJsYixHQUdKOEwsR0FBUyxJQUFLLEtBQU0sZ0JBQWlCOUwsQ0FBUyxFQU8xQyxLQUFLLGNBQ1QsS0FBSyxhQUFjLFFBQ2xCQSxHQUFhM0YsSUFBVSxHQUN0QixHQUNBeVIsR0FBUyxJQUFLLEtBQU0sZUFBaUIsR0FBSSxFQUNoRCxFQUdBLEdBQ0UsRUFFRCxTQUFVLFNBQVUzVCxFQUFXLENBQzlCLElBQUk2SCxFQUFXdkgsRUFDZGIsRUFBSSxFQUdMLElBREFvSSxFQUFZLElBQU03SCxFQUFXLElBQ25CTSxFQUFPLEtBQU1iLE1BQ3RCLEdBQUthLEVBQUssV0FBYSxJQUNwQixJQUFNd2lCLEdBQWtCQyxHQUFVemlCLENBQU0sQ0FBQSxFQUFLLEtBQU0sUUFBU3VILEdBQWMsR0FDNUUsTUFBTyxHQUlULE1BQU8sRUFDUCxDQUNGLEdBS0EsSUFBSXliLEdBQVUsTUFFZHZqQixFQUFPLEdBQUcsT0FBUSxDQUNqQixJQUFLLFNBQVVtQyxFQUFRLENBQ3RCLElBQUlpUyxFQUFPL1QsRUFBS21hLEVBQ2ZqYSxFQUFPLEtBQU0sR0FFZCxPQUFNLFVBQVUsUUEwQmhCaWEsRUFBa0J2YixFQUFZa0QsR0FFdkIsS0FBSyxLQUFNLFNBQVV6QyxFQUFJLENBQy9CLElBQUlDLEVBRUMsS0FBSyxXQUFhLElBSWxCNmEsRUFDSjdhLEVBQU13QyxFQUFNLEtBQU0sS0FBTXpDLEVBQUdNLEVBQVEsSUFBSSxFQUFHLElBQUcsR0FFN0NMLEVBQU13QyxFQUlGeEMsR0FBTyxLQUNYQSxFQUFNLEdBRUssT0FBT0EsR0FBUSxTQUMxQkEsR0FBTyxHQUVJLE1BQU0sUUFBU0EsS0FDMUJBLEVBQU1LLEVBQU8sSUFBS0wsRUFBSyxTQUFVd0MsRUFBUSxDQUN4QyxPQUFPQSxHQUFTLEtBQU8sR0FBS0EsRUFBUSxFQUN6QyxJQUdHaVMsRUFBUXBVLEVBQU8sU0FBVSxLQUFLLElBQU0sR0FBSUEsRUFBTyxTQUFVLEtBQUssU0FBUyxZQUFhLENBQUEsR0FHL0UsQ0FBQ29VLEdBQVMsRUFBRyxRQUFTQSxJQUFXQSxFQUFNLElBQUssS0FBTXpVLEVBQUssT0FBTyxJQUFPLFVBQ3pFLEtBQUssTUFBUUEsR0FFakIsSUEzRFFZLEdBQ0o2VCxFQUFRcFUsRUFBTyxTQUFVTyxFQUFLLElBQU0sR0FDbkNQLEVBQU8sU0FBVU8sRUFBSyxTQUFTLFlBQWEsQ0FBQSxFQUV4QzZULEdBQ0osUUFBU0EsSUFDUC9ULEVBQU0rVCxFQUFNLElBQUs3VCxFQUFNLE9BQVMsS0FBTyxPQUVsQ0YsR0FHUkEsRUFBTUUsRUFBSyxNQUdOLE9BQU9GLEdBQVEsU0FDWkEsRUFBSSxRQUFTa2pCLEdBQVMsRUFBRSxFQUl6QmxqQixHQUFjLEtBR3RCLE1Bc0NELENBQ0YsR0FFQUwsRUFBTyxPQUFRLENBQ2QsU0FBVSxDQUNULE9BQVEsQ0FDUCxJQUFLLFNBQVVPLEVBQU8sQ0FFckIsSUFBSVosRUFBTUssRUFBTyxLQUFLLEtBQU1PLEVBQU0sU0FDbEMsT0FBT1osR0FPTm9qQixHQUFrQi9pQixFQUFPLEtBQU1PLENBQU0sQ0FBQSxDQUN0QyxDQUNELEVBQ0QsT0FBUSxDQUNQLElBQUssU0FBVUEsRUFBTyxDQUNyQixJQUFJNEIsRUFBT3FoQixFQUFROWpCLEVBQ2xCaUIsRUFBVUosRUFBSyxRQUNmdVAsRUFBUXZQLEVBQUssY0FDYitXLEVBQU0vVyxFQUFLLE9BQVMsYUFDcEJ3VixFQUFTdUIsRUFBTSxLQUFPLENBQUUsRUFDeEJtTSxFQUFNbk0sRUFBTXhILEVBQVEsRUFBSW5QLEVBQVEsT0FVakMsSUFSS21QLEVBQVEsRUFDWnBRLEVBQUkrakIsRUFHSi9qQixFQUFJNFgsRUFBTXhILEVBQVEsRUFJWHBRLEVBQUkrakIsRUFBSy9qQixJQUtoQixHQUpBOGpCLEVBQVM3aUIsRUFBU2pCLElBSVg4akIsRUFBTyxVQUFZOWpCLElBQU1vUSxJQUc5QixDQUFDMFQsRUFBTyxXQUNOLENBQUNBLEVBQU8sV0FBVyxVQUNwQixDQUFDbGhCLEVBQVVraEIsRUFBTyxXQUFZLFVBQVksR0FBSyxDQU1qRCxHQUhBcmhCLEVBQVFuQyxFQUFRd2pCLENBQVEsRUFBQyxJQUFHLEVBR3ZCbE0sRUFDSixPQUFPblYsRUFJUjRULEVBQU8sS0FBTTVULEVBQ2IsQ0FHRixPQUFPNFQsQ0FDUCxFQUVELElBQUssU0FBVXhWLEVBQU00QixFQUFRLENBTTVCLFFBTEl1aEIsRUFBV0YsRUFDZDdpQixFQUFVSixFQUFLLFFBQ2Z3VixFQUFTL1YsRUFBTyxVQUFXbUMsQ0FBTyxFQUNsQ3pDLEVBQUlpQixFQUFRLE9BRUxqQixLQUNQOGpCLEVBQVM3aUIsRUFBU2pCLElBSWI4akIsRUFBTyxTQUNYeGpCLEVBQU8sUUFBU0EsRUFBTyxTQUFTLE9BQU8sSUFBS3dqQixDQUFRLEVBQUV6TixDQUFRLEVBQUcsTUFFakUyTixFQUFZLElBT2QsT0FBTUEsSUFDTG5qQixFQUFLLGNBQWdCLElBRWZ3VixDQUNQLENBQ0QsQ0FDRCxDQUNGLEdBR0EvVixFQUFPLEtBQU0sQ0FBRSxRQUFTLFVBQVksRUFBRSxVQUFXLENBQ2hEQSxFQUFPLFNBQVUsTUFBUyxDQUN6QixJQUFLLFNBQVVPLEVBQU00QixFQUFRLENBQzVCLEdBQUssTUFBTSxRQUFTQSxHQUNuQixPQUFTNUIsRUFBSyxRQUFVUCxFQUFPLFFBQVNBLEVBQVFPLENBQU0sRUFBQyxJQUFLLEVBQUU0QixDQUFPLEVBQUcsRUFFekUsQ0FDSCxFQUNPbkQsRUFBUSxVQUNiZ0IsRUFBTyxTQUFVLElBQU0sRUFBQyxJQUFNLFNBQVVPLEVBQU8sQ0FDOUMsT0FBT0EsRUFBSyxhQUFjLE9BQU8sSUFBTyxLQUFPLEtBQU9BLEVBQUssS0FDOUQsRUFFQSxHQU1BLElBQUlvakIsR0FBV3psQixFQUFPLFNBRWxCMGxCLEdBQVEsQ0FBRSxLQUFNLEtBQUssSUFBSyxDQUFBLEVBRTFCQyxHQUFXLEtBS2Y3akIsRUFBTyxTQUFXLFNBQVUwVCxFQUFPLENBQ2xDLElBQUl2SyxFQUFLMmEsRUFDVCxHQUFLLENBQUNwUSxHQUFRLE9BQU9BLEdBQVMsU0FDN0IsT0FBTyxLQUtSLEdBQUksQ0FDSHZLLEVBQVEsSUFBSWpMLEVBQU8sVUFBVyxFQUFHLGdCQUFpQndWLEVBQU0sV0FDMUQsTUFBZSxDQUFFLENBRWhCLE9BQUFvUSxFQUFrQjNhLEdBQU9BLEVBQUkscUJBQXNCLGFBQWEsRUFBSSxJQUMvRCxDQUFDQSxHQUFPMmEsSUFDWjlqQixFQUFPLE1BQU8saUJBQ2I4akIsRUFDQzlqQixFQUFPLElBQUs4akIsRUFBZ0IsV0FBWSxTQUFVNWMsRUFBSyxDQUN0RCxPQUFPQSxFQUFHLFdBQ2YsQ0FBTyxFQUFDLEtBQU07QUFBQSxDQUFNLEVBQ2hCd00sSUFHSXZLLENBQ1IsRUFHQSxJQUFJNGEsR0FBYyxrQ0FDakJDLEdBQTBCLFNBQVVwUyxFQUFJLENBQ3ZDQSxFQUFFLGdCQUFlLENBQ25CLEVBRUE1UixFQUFPLE9BQVFBLEVBQU8sTUFBTyxDQUU1QixRQUFTLFNBQVV3WCxFQUFPOUQsRUFBTW5ULEVBQU0wakIsRUFBZSxDQUVwRCxJQUFJdmtCLEVBQUdvUCxFQUFLeUYsRUFBSzJQLEVBQVlDLEVBQVFyTCxFQUFRdkgsRUFBUzZTLEVBQ3JEQyxFQUFZLENBQUU5akIsR0FBUW5CLENBQVUsRUFDaENpRCxFQUFPeEQsRUFBTyxLQUFNMlksRUFBTyxRQUFXQSxFQUFNLEtBQU9BLEVBQ25ETyxHQUFhbFosRUFBTyxLQUFNMlksRUFBTyxXQUFXLEVBQUtBLEVBQU0sVUFBVSxNQUFPLEdBQUcsRUFBSyxDQUFBLEVBS2pGLEdBSEExSSxFQUFNc1YsRUFBYzdQLEVBQU1oVSxFQUFPQSxHQUFRbkIsRUFHcEMsRUFBQW1CLEVBQUssV0FBYSxHQUFLQSxFQUFLLFdBQWEsSUFLekMsQ0FBQXdqQixHQUFZLEtBQU0xaEIsRUFBT3JDLEVBQU8sTUFBTSxhQUl0Q3FDLEVBQUssUUFBUyxHQUFLLEVBQUcsS0FHMUIwVixHQUFhMVYsRUFBSyxNQUFPLEtBQ3pCQSxFQUFPMFYsR0FBVyxRQUNsQkEsR0FBVyxLQUFJLEdBRWhCb00sRUFBUzloQixFQUFLLFFBQVMsR0FBSyxFQUFHLEdBQUssS0FBT0EsRUFHM0NtVixFQUFRQSxFQUFPeFgsRUFBTyxPQUFTLEVBQzlCd1gsRUFDQSxJQUFJeFgsRUFBTyxNQUFPcUMsRUFBTSxPQUFPbVYsR0FBVSxVQUFZQSxHQUd0REEsRUFBTSxVQUFZeU0sRUFBZSxFQUFJLEVBQ3JDek0sRUFBTSxVQUFZTyxHQUFXLEtBQU0sR0FBRyxFQUN0Q1AsRUFBTSxXQUFhQSxFQUFNLFVBQ3hCLElBQUksT0FBUSxVQUFZTyxHQUFXLEtBQU0sZUFBaUIsRUFBRyxTQUFXLEVBQ3hFLEtBR0RQLEVBQU0sT0FBUyxPQUNUQSxFQUFNLFNBQ1hBLEVBQU0sT0FBU2pYLEdBSWhCbVQsRUFBT0EsR0FBUSxLQUNkLENBQUU4RCxDQUFPLEVBQ1R4WCxFQUFPLFVBQVcwVCxFQUFNLENBQUU4RCxDQUFPLENBQUEsRUFHbENqRyxFQUFVdlIsRUFBTyxNQUFNLFFBQVNxQyxDQUFJLEdBQU0sQ0FBQSxFQUNyQyxHQUFDNGhCLEdBQWdCMVMsRUFBUSxTQUFXQSxFQUFRLFFBQVEsTUFBT2hSLEVBQU1tVCxDQUFNLElBQUssS0FNakYsSUFBSyxDQUFDdVEsR0FBZ0IsQ0FBQzFTLEVBQVEsVUFBWSxDQUFDcFMsRUFBVW9CLEdBQVMsQ0FNOUQsSUFKQTJqQixFQUFhM1MsRUFBUSxjQUFnQmxQLEVBQy9CMGhCLEdBQVksS0FBTUcsRUFBYTdoQixDQUFJLElBQ3hDeU0sRUFBTUEsRUFBSSxZQUVIQSxFQUFLQSxFQUFNQSxFQUFJLFdBQ3RCdVYsRUFBVSxLQUFNdlYsR0FDaEJ5RixFQUFNekYsRUFJRnlGLEtBQVVoVSxFQUFLLGVBQWlCbkIsSUFDcENpbEIsRUFBVSxLQUFNOVAsRUFBSSxhQUFlQSxFQUFJLGNBQWdCclcsRUFFeEQsQ0FJRCxJQURBd0IsRUFBSSxHQUNNb1AsRUFBTXVWLEVBQVcza0IsR0FBRyxJQUFRLENBQUM4WCxFQUFNLHdCQUM1QzRNLEVBQWN0VixFQUNkMEksRUFBTSxLQUFPOVgsRUFBSSxFQUNoQndrQixFQUNBM1MsRUFBUSxVQUFZbFAsRUFHckJ5VyxHQUFXbEYsR0FBUyxJQUFLOUUsRUFBSyxRQUFRLEdBQU0sT0FBTyxPQUFRLE9BQVUwSSxFQUFNLElBQU0sR0FDaEY1RCxHQUFTLElBQUs5RSxFQUFLLFVBQ2ZnSyxHQUNKQSxFQUFPLE1BQU9oSyxFQUFLNEUsR0FJcEJvRixFQUFTcUwsR0FBVXJWLEVBQUtxVixHQUNuQnJMLEdBQVVBLEVBQU8sT0FBU3ZGLEdBQVl6RSxDQUFHLElBQzdDMEksRUFBTSxPQUFTc0IsRUFBTyxNQUFPaEssRUFBSzRFLENBQUksRUFDakM4RCxFQUFNLFNBQVcsSUFDckJBLEVBQU0sZUFBYyxHQUl2QixPQUFBQSxFQUFNLEtBQU9uVixFQUdSLENBQUM0aEIsR0FBZ0IsQ0FBQ3pNLEVBQU0sbUJBQWtCLElBRXZDLENBQUNqRyxFQUFRLFVBQ2ZBLEVBQVEsU0FBUyxNQUFPOFMsRUFBVSxJQUFLLEVBQUUzUSxDQUFJLElBQU8sS0FDcERILEdBQVloVCxDQUFJLEdBSVg0akIsR0FBVWxsQixFQUFZc0IsRUFBTThCLENBQU0sQ0FBQSxHQUFNLENBQUNsRCxFQUFVb0IsS0FHdkRnVSxFQUFNaFUsRUFBTTRqQixHQUVQNVAsSUFDSmhVLEVBQU00akIsQ0FBUSxFQUFHLE1BSWxCbmtCLEVBQU8sTUFBTSxVQUFZcUMsRUFFcEJtVixFQUFNLHdCQUNWNE0sRUFBWSxpQkFBa0IvaEIsRUFBTTJoQixJQUdyQ3pqQixFQUFNOEIsQ0FBSSxJQUVMbVYsRUFBTSx3QkFDVjRNLEVBQVksb0JBQXFCL2hCLEVBQU0yaEIsSUFHeENoa0IsRUFBTyxNQUFNLFVBQVksT0FFcEJ1VSxJQUNKaFUsRUFBTTRqQixDQUFRLEVBQUc1UCxJQU1kaUQsRUFBTSxPQUNiLEVBSUQsU0FBVSxTQUFVblYsRUFBTTlCLEVBQU1pWCxFQUFRLENBQ3ZDLElBQUk1RixFQUFJNVIsRUFBTyxPQUNkLElBQUlBLEVBQU8sTUFDWHdYLEVBQ0EsQ0FDQyxLQUFNblYsRUFDTixZQUFhLEVBQ2IsQ0FDSixFQUVFckMsRUFBTyxNQUFNLFFBQVM0UixFQUFHLEtBQU1yUixDQUFJLENBQ25DLENBRUYsR0FFQVAsRUFBTyxHQUFHLE9BQVEsQ0FFakIsUUFBUyxTQUFVcUMsRUFBTXFSLEVBQU8sQ0FDL0IsT0FBTyxLQUFLLEtBQU0sVUFBVyxDQUM1QjFULEVBQU8sTUFBTSxRQUFTcUMsRUFBTXFSLEVBQU0sSUFBSSxDQUN6QyxFQUNFLEVBQ0QsZUFBZ0IsU0FBVXJSLEVBQU1xUixFQUFPLENBQ3RDLElBQUluVCxFQUFPLEtBQU0sR0FDakIsR0FBS0EsRUFDSixPQUFPUCxFQUFPLE1BQU0sUUFBU3FDLEVBQU1xUixFQUFNblQsRUFBTSxHQUVoRCxDQUNGLEdBR0EsSUFDQytqQixHQUFXLFFBQ1hDLEdBQVEsU0FDUkMsR0FBa0Isd0NBQ2xCQyxHQUFlLHFDQUVoQixTQUFTQyxHQUFhNUYsRUFBUTVmLEVBQUt5bEIsRUFBYTlVLEVBQU0sQ0FDckQsSUFBSWpQLEVBRUosR0FBSyxNQUFNLFFBQVMxQixHQUduQmMsRUFBTyxLQUFNZCxFQUFLLFNBQVVRLEVBQUdzUSxFQUFJLENBQzdCMlUsR0FBZUwsR0FBUyxLQUFNeEYsQ0FBTSxFQUd4Q2pQLEVBQUtpUCxFQUFROU8sR0FLYjBVLEdBQ0M1RixFQUFTLEtBQVEsT0FBTzlPLEdBQU0sVUFBWUEsR0FBSyxLQUFPdFEsRUFBSSxJQUFPLElBQ2pFc1EsRUFDQTJVLEVBQ0E5VSxDQUNMLENBRUEsV0FFYSxDQUFDOFUsR0FBZTlrQixFQUFRWCxDQUFHLElBQU8sU0FHN0MsSUFBTTBCLEtBQVExQixFQUNid2xCLEdBQWE1RixFQUFTLElBQU1sZSxFQUFPLElBQUsxQixFQUFLMEIsQ0FBTSxFQUFFK2pCLEVBQWE5VSxRQU1uRUEsRUFBS2lQLEVBQVE1ZixFQUVkLENBSURjLEVBQU8sTUFBUSxTQUFVNEMsRUFBRytoQixFQUFjLENBQ3pDLElBQUk3RixFQUNIOEYsRUFBSSxDQUFFLEVBQ04vVSxFQUFNLFNBQVUvSSxFQUFLK2QsRUFBa0IsQ0FHdEMsSUFBSTFpQixFQUFRbEQsRUFBWTRsQixDQUFpQixFQUN4Q0EsRUFBaUIsRUFDakJBLEVBRURELEVBQUdBLEVBQUUsTUFBTSxFQUFLLG1CQUFvQjlkLENBQUssRUFBRyxJQUMzQyxtQkFBb0IzRSxHQUFnQixFQUFVLENBQ2xELEVBRUMsR0FBS1MsR0FBSyxLQUNULE1BQU8sR0FJUixHQUFLLE1BQU0sUUFBU0EsQ0FBQyxHQUFRQSxFQUFFLFFBQVUsQ0FBQzVDLEVBQU8sY0FBZTRDLENBQUMsRUFHaEU1QyxFQUFPLEtBQU00QyxFQUFHLFVBQVcsQ0FDMUJpTixFQUFLLEtBQUssS0FBTSxLQUFLLEtBQUssQ0FDN0IsT0FNRSxLQUFNaVAsS0FBVWxjLEVBQ2Y4aEIsR0FBYTVGLEVBQVFsYyxFQUFHa2MsQ0FBTSxFQUFJNkYsRUFBYTlVLEdBS2pELE9BQU8rVSxFQUFFLEtBQU0sSUFDaEIsRUFFQTVrQixFQUFPLEdBQUcsT0FBUSxDQUNqQixVQUFXLFVBQVcsQ0FDckIsT0FBT0EsRUFBTyxNQUFPLEtBQUssZUFBZ0IsQ0FBQSxDQUMxQyxFQUNELGVBQWdCLFVBQVcsQ0FDMUIsT0FBTyxLQUFLLElBQUssVUFBVyxDQUczQixJQUFJa0ksRUFBV2xJLEVBQU8sS0FBTSxLQUFNLFVBQVUsRUFDNUMsT0FBT2tJLEVBQVdsSSxFQUFPLFVBQVdrSSxDQUFRLEVBQUssSUFDcEQsQ0FBSyxFQUFDLE9BQVEsVUFBVyxDQUN0QixJQUFJN0YsRUFBTyxLQUFLLEtBR2hCLE9BQU8sS0FBSyxNQUFRLENBQUNyQyxFQUFRLElBQU0sRUFBQyxHQUFJLFdBQWEsR0FDcER5a0IsR0FBYSxLQUFNLEtBQUssUUFBVSxHQUFJLENBQUNELEdBQWdCLEtBQU1uaUIsQ0FBTSxJQUNqRSxLQUFLLFNBQVcsQ0FBQzJULEdBQWUsS0FBTTNULENBQU0sRUFDL0MsQ0FBQSxFQUFHLElBQUssU0FBVUQsRUFBSTdCLEVBQU8sQ0FDN0IsSUFBSVosRUFBTUssRUFBUSxJQUFNLEVBQUMsSUFBRyxFQUU1QixPQUFLTCxHQUFPLEtBQ0osS0FHSCxNQUFNLFFBQVNBLEdBQ1pLLEVBQU8sSUFBS0wsRUFBSyxTQUFVQSxFQUFNLENBQ3ZDLE1BQU8sQ0FBRSxLQUFNWSxFQUFLLEtBQU0sTUFBT1osRUFBSSxRQUFTNGtCLEdBQU87QUFBQSxDQUFNLEVBQ2hFLEdBR1UsQ0FBRSxLQUFNaGtCLEVBQUssS0FBTSxNQUFPWixFQUFJLFFBQVM0a0IsR0FBTztBQUFBLENBQU0sRUFDOUQsQ0FBSyxFQUFDLElBQUcsQ0FDUCxDQUNGLEdBR0EsSUFDQ08sR0FBTSxPQUNOQyxHQUFRLE9BQ1JDLEdBQWEsZ0JBQ2JDLEdBQVcsNkJBR1hDLEdBQWlCLDREQUNqQkMsR0FBYSxpQkFDYkMsR0FBWSxRQVdaQyxHQUFhLENBQUUsRUFPZkMsR0FBYSxDQUFFLEVBR2ZDLEdBQVcsS0FBSyxPQUFRLEdBQUssRUFHN0JDLEdBQWVwbUIsRUFBUyxjQUFlLEtBRXhDb21CLEdBQWEsS0FBTzdCLEdBQVMsS0FHN0IsU0FBUzhCLEdBQTZCQyxFQUFZLENBR2pELE9BQU8sU0FBVUMsRUFBb0JuVixFQUFPLENBRXRDLE9BQU9tVixHQUF1QixXQUNsQ25WLEVBQU9tVixFQUNQQSxFQUFxQixLQUd0QixJQUFJQyxFQUNIbG1CLEVBQUksRUFDSm1tQixFQUFZRixFQUFtQixZQUFXLEVBQUcsTUFBTzNXLEVBQWUsR0FBSSxHQUV4RSxHQUFLL1AsRUFBWXVSLEdBR2hCLEtBQVVvVixFQUFXQyxFQUFXbm1CLE1BRzFCa21CLEVBQVUsQ0FBRyxJQUFLLEtBQ3RCQSxFQUFXQSxFQUFTLE1BQU8sQ0FBQyxHQUFNLEtBQ2hDRixFQUFXRSxDQUFRLEVBQUtGLEVBQVdFLENBQVEsR0FBTSxDQUFFLEdBQUcsUUFBU3BWLEtBSS9Ea1YsRUFBV0UsQ0FBUSxFQUFLRixFQUFXRSxDQUFRLEdBQU0sQ0FBRSxHQUFHLEtBQU1wVixFQUluRSxDQUNDLENBR0QsU0FBU3NWLEdBQStCSixFQUFXL2tCLEVBQVNvbEIsRUFBaUJDLEVBQVEsQ0FFcEYsSUFBSUMsRUFBWSxDQUFFLEVBQ2pCQyxFQUFxQlIsSUFBY0osR0FFcEMsU0FBU2EsRUFBU1AsRUFBVyxDQUM1QixJQUFJUSxFQUNKLE9BQUFILEVBQVdMLENBQVUsRUFBRyxHQUN4QjVsQixFQUFPLEtBQU0wbEIsRUFBV0UsQ0FBVSxHQUFJLEdBQUksU0FBVXpXLEVBQUdrWCxFQUFxQixDQUMzRSxJQUFJQyxFQUFzQkQsRUFBb0IxbEIsRUFBU29sQixFQUFpQkMsQ0FBSyxFQUM3RSxHQUFLLE9BQU9NLEdBQXdCLFVBQ25DLENBQUNKLEdBQW9CLENBQUNELEVBQVdLLEdBRWpDLE9BQUEzbEIsRUFBUSxVQUFVLFFBQVMybEIsR0FDM0JILEVBQVNHLENBQW1CLEVBQ3JCLEdBQ0QsR0FBS0osRUFDWCxNQUFPLEVBQUdFLEVBQVdFLEVBRXpCLEdBQ1NGLENBQ1AsQ0FFRCxPQUFPRCxFQUFTeGxCLEVBQVEsVUFBVyxDQUFHLENBQUEsR0FBTSxDQUFDc2xCLEVBQVcsR0FBRyxHQUFNRSxFQUFTLEdBQUcsQ0FDN0UsQ0FLRCxTQUFTSSxHQUFZdGxCLEVBQVFKLEVBQU0sQ0FDbEMsSUFBSWlHLEVBQUszRixFQUNScWxCLEVBQWN4bUIsRUFBTyxhQUFhLGFBQWUsQ0FBQSxFQUVsRCxJQUFNOEcsS0FBT2pHLEVBQ1BBLEVBQUtpRyxDQUFLLElBQUssVUFDakIwZixFQUFhMWYsR0FBUTdGLEVBQVdFLElBQVVBLEVBQU8sQ0FBRSxJQUFRMkYsQ0FBRyxFQUFLakcsRUFBS2lHLENBQUcsR0FHL0UsT0FBSzNGLEdBQ0puQixFQUFPLE9BQVEsR0FBTWlCLEVBQVFFLENBQUksRUFHM0JGLENBQ1AsQ0FNRCxTQUFTd2xCLEdBQXFCN0IsRUFBR29CLEVBQU9VLEVBQVksQ0FPbkQsUUFMSUMsRUFBSXRrQixFQUFNdWtCLEVBQWVDLEVBQzVCQyxFQUFXbEMsRUFBRSxTQUNiaUIsRUFBWWpCLEVBQUUsVUFHUGlCLEVBQVcsQ0FBRyxJQUFLLEtBQzFCQSxFQUFVLE1BQUssRUFDVmMsSUFBTyxTQUNYQSxFQUFLL0IsRUFBRSxVQUFZb0IsRUFBTSxrQkFBbUIsY0FBYyxHQUs1RCxHQUFLVyxHQUNKLElBQU10a0IsS0FBUXlrQixFQUNiLEdBQUtBLEVBQVV6a0IsSUFBVXlrQixFQUFVemtCLEdBQU8sS0FBTXNrQixHQUFPLENBQ3REZCxFQUFVLFFBQVN4akIsR0FDbkIsS0FDQSxFQUtILEdBQUt3akIsRUFBVyxDQUFHLElBQUlhLEVBQ3RCRSxFQUFnQmYsRUFBVyxPQUNyQixDQUdOLElBQU14akIsS0FBUXFrQixFQUFZLENBQ3pCLEdBQUssQ0FBQ2IsRUFBVyxDQUFHLEdBQUlqQixFQUFFLFdBQVl2aUIsRUFBTyxJQUFNd2pCLEVBQVcsQ0FBQyxHQUFPLENBQ3JFZSxFQUFnQnZrQixFQUNoQixLQUNBLENBQ0t3a0IsSUFDTEEsRUFBZ0J4a0IsRUFFakIsQ0FHRHVrQixFQUFnQkEsR0FBaUJDLENBQ2pDLENBS0QsR0FBS0QsRUFDSixPQUFLQSxJQUFrQmYsRUFBVyxJQUNqQ0EsRUFBVSxRQUFTZSxHQUViRixFQUFXRSxFQUVuQixDQUtELFNBQVNHLEdBQWFuQyxFQUFHb0MsRUFBVWhCLEVBQU9pQixFQUFZLENBQ3JELElBQUlDLEVBQU9DLEVBQVNDLEVBQU03UyxFQUFLOFMsRUFDOUJDLEVBQWEsQ0FBRSxFQUdmekIsRUFBWWpCLEVBQUUsVUFBVSxRQUd6QixHQUFLaUIsRUFBVyxHQUNmLElBQU11QixLQUFReEMsRUFBRSxXQUNmMEMsRUFBWUYsRUFBSyxZQUFhLENBQUEsRUFBS3hDLEVBQUUsV0FBWXdDLEdBT25ELElBSEFELEVBQVV0QixFQUFVLFFBR1pzQixHQWNQLEdBWkt2QyxFQUFFLGVBQWdCdUMsS0FDdEJuQixFQUFPcEIsRUFBRSxlQUFnQnVDLENBQVMsQ0FBQSxFQUFLSCxHQUluQyxDQUFDSyxHQUFRSixHQUFhckMsRUFBRSxhQUM1Qm9DLEVBQVdwQyxFQUFFLFdBQVlvQyxFQUFVcEMsRUFBRSxRQUFRLEdBRzlDeUMsRUFBT0YsRUFDUEEsRUFBVXRCLEVBQVUsUUFFZnNCLEdBR0osR0FBS0EsSUFBWSxJQUVoQkEsRUFBVUUsVUFHQ0EsSUFBUyxLQUFPQSxJQUFTRixFQUFVLENBTTlDLEdBSEFDLEVBQU9FLEVBQVlELEVBQU8sSUFBTUYsQ0FBTyxHQUFNRyxFQUFZLEtBQU9ILEdBRzNELENBQUNDLEdBQ0wsSUFBTUYsS0FBU0ksRUFJZCxHQURBL1MsRUFBTTJTLEVBQU0sTUFBTyxLQUNkM1MsRUFBSyxDQUFHLElBQUs0UyxJQUdqQkMsRUFBT0UsRUFBWUQsRUFBTyxJQUFNOVMsRUFBSyxDQUFDLENBQUksR0FDekMrUyxFQUFZLEtBQU8vUyxFQUFLLENBQUcsQ0FBQSxFQUN2QjZTLEdBQU8sQ0FHTkEsSUFBUyxHQUNiQSxFQUFPRSxFQUFZSixHQUdSSSxFQUFZSixDQUFPLElBQUssS0FDbkNDLEVBQVU1UyxFQUFLLEdBQ2ZzUixFQUFVLFFBQVN0UixFQUFLLENBQUcsQ0FBQSxHQUU1QixLQUNBLEVBTUosR0FBSzZTLElBQVMsR0FHYixHQUFLQSxHQUFReEMsRUFBRSxPQUNkb0MsRUFBV0ksRUFBTUosT0FFakIsSUFBSSxDQUNIQSxFQUFXSSxFQUFNSixFQUNqQixPQUFTcFYsRUFBSSxDQUNiLE1BQU8sQ0FDTixNQUFPLGNBQ1AsTUFBT3dWLEVBQU94VixFQUFJLHNCQUF3QnlWLEVBQU8sT0FBU0YsQ0FDbEUsQ0FDTyxDQUdILEVBSUgsTUFBTyxDQUFFLE1BQU8sVUFBVyxLQUFNSCxDQUFRLENBQ3pDLENBRURobkIsRUFBTyxPQUFRLENBR2QsT0FBUSxFQUdSLGFBQWMsQ0FBRSxFQUNoQixLQUFNLENBQUUsRUFFUixhQUFjLENBQ2IsSUFBSzJqQixHQUFTLEtBQ2QsS0FBTSxNQUNOLFFBQVN1QixHQUFlLEtBQU12QixHQUFTLFFBQVUsRUFDakQsT0FBUSxHQUNSLFlBQWEsR0FDYixNQUFPLEdBQ1AsWUFBYSxtREFjYixRQUFTLENBQ1IsSUFBSzRCLEdBQ0wsS0FBTSxhQUNOLEtBQU0sWUFDTixJQUFLLDRCQUNMLEtBQU0sbUNBQ04sRUFFRCxTQUFVLENBQ1QsSUFBSyxVQUNMLEtBQU0sU0FDTixLQUFNLFVBQ04sRUFFRCxlQUFnQixDQUNmLElBQUssY0FDTCxLQUFNLGVBQ04sS0FBTSxjQUNOLEVBSUQsV0FBWSxDQUdYLFNBQVUsT0FHVixZQUFhLEdBR2IsWUFBYSxLQUFLLE1BR2xCLFdBQVl2bEIsRUFBTyxRQUNuQixFQU1ELFlBQWEsQ0FDWixJQUFLLEdBQ0wsUUFBUyxFQUNULENBQ0QsRUFLRCxVQUFXLFNBQVVpQixFQUFRc21CLEVBQVcsQ0FDdkMsT0FBT0EsRUFHTmhCLEdBQVlBLEdBQVl0bEIsRUFBUWpCLEVBQU8sWUFBWSxFQUFJdW5CLENBQVUsRUFHakVoQixHQUFZdm1CLEVBQU8sYUFBY2lCLEVBQ2xDLEVBRUQsY0FBZXdrQixHQUE2QkosRUFBWSxFQUN4RCxjQUFlSSxHQUE2QkgsRUFBWSxFQUd4RCxLQUFNLFNBQVVrQyxFQUFLN21CLEVBQVUsQ0FHekIsT0FBTzZtQixHQUFRLFdBQ25CN21CLEVBQVU2bUIsRUFDVkEsRUFBTSxRQUlQN21CLEVBQVVBLEdBQVcsR0FFckIsSUFBSThtQixFQUdIQyxFQUdBQyxFQUNBQyxFQUdBQyxFQUdBQyxFQUdBclYsRUFHQXNWLEVBR0Fyb0IsRUFHQXNvQixFQUdBcEQsRUFBSTVrQixFQUFPLFVBQVcsQ0FBQSxFQUFJVyxDQUFTLEVBR25Dc25CLEVBQWtCckQsRUFBRSxTQUFXQSxFQUcvQnNELEdBQXFCdEQsRUFBRSxVQUNwQnFELEVBQWdCLFVBQVlBLEVBQWdCLFFBQzlDam9CLEVBQVFpb0IsQ0FBaUIsRUFDekJqb0IsRUFBTyxNQUdSNFEsR0FBVzVRLEVBQU8sU0FBVSxFQUM1Qm1vQixHQUFtQm5vQixFQUFPLFVBQVcsYUFBZSxFQUdwRG9vQixHQUFheEQsRUFBRSxZQUFjLENBQUUsRUFHL0J5RCxHQUFpQixDQUFFLEVBQ25CQyxHQUFzQixDQUFFLEVBR3hCQyxHQUFXLFdBR1h2QyxHQUFRLENBQ1AsV0FBWSxFQUdaLGtCQUFtQixTQUFVbGYsR0FBTSxDQUNsQyxJQUFJVixHQUNKLEdBQUtxTSxFQUFZLENBQ2hCLEdBQUssQ0FBQ21WLEVBRUwsSUFEQUEsRUFBa0IsQ0FBQSxFQUNSeGhCLEdBQVE2ZSxHQUFTLEtBQU0wQyxDQUFxQixHQUNyREMsRUFBaUJ4aEIsR0FBTyxDQUFHLEVBQUMsWUFBVyxFQUFLLEdBQUssR0FDOUN3aEIsRUFBaUJ4aEIsR0FBTyxDQUFDLEVBQUcsWUFBYSxFQUFHLEdBQUcsR0FBTSxDQUFFLEdBQ3ZELE9BQVFBLEdBQU8sQ0FBQyxHQUdyQkEsR0FBUXdoQixFQUFpQjlnQixHQUFJLFlBQWEsRUFBRyxHQUFHLENBQ2hELENBQ0QsT0FBT1YsSUFBUyxLQUFPLEtBQU9BLEdBQU0sS0FBTSxLQUMxQyxFQUdELHNCQUF1QixVQUFXLENBQ2pDLE9BQU9xTSxFQUFZa1YsRUFBd0IsSUFDM0MsRUFHRCxpQkFBa0IsU0FBVS9tQixHQUFNdUIsR0FBUSxDQUN6QyxPQUFLc1EsR0FBYSxPQUNqQjdSLEdBQU8wbkIsR0FBcUIxbkIsR0FBSyxhQUFlLEVBQy9DMG5CLEdBQXFCMW5CLEdBQUssWUFBYSxDQUFBLEdBQU1BLEdBQzlDeW5CLEdBQWdCem5CLEVBQU0sRUFBR3VCLElBRW5CLElBQ1AsRUFHRCxpQkFBa0IsU0FBVUUsR0FBTyxDQUNsQyxPQUFLb1EsR0FBYSxPQUNqQm1TLEVBQUUsU0FBV3ZpQixJQUVQLElBQ1AsRUFHRCxXQUFZLFNBQVVxSixHQUFNLENBQzNCLElBQUluTSxHQUNKLEdBQUttTSxHQUNKLEdBQUsrRyxFQUdKdVQsR0FBTSxPQUFRdGEsR0FBS3NhLEdBQU0sTUFBUSxDQUFBLE1BSWpDLEtBQU16bUIsTUFBUW1NLEdBQ2IwYyxHQUFZN29CLEVBQU0sRUFBRyxDQUFFNm9CLEdBQVk3b0IsRUFBSSxFQUFJbU0sR0FBS25NLEVBQUksR0FJdkQsT0FBTyxJQUNQLEVBR0QsTUFBTyxTQUFVaXBCLEdBQWEsQ0FDN0IsSUFBSUMsR0FBWUQsSUFBY0QsR0FDOUIsT0FBS2QsR0FDSkEsRUFBVSxNQUFPZ0IsSUFFbEIxa0IsR0FBTSxFQUFHMGtCLElBQ0YsSUFDUCxDQUNMLEVBa0JFLEdBZkE3WCxHQUFTLFFBQVNvVixJQUtsQnBCLEVBQUUsTUFBVTRDLEdBQU81QyxFQUFFLEtBQU9qQixHQUFTLE1BQVMsSUFDNUMsUUFBU3lCLEdBQVd6QixHQUFTLFNBQVcsSUFBSSxFQUc5Q2lCLEVBQUUsS0FBT2prQixFQUFRLFFBQVVBLEVBQVEsTUFBUWlrQixFQUFFLFFBQVVBLEVBQUUsS0FHekRBLEVBQUUsV0FBY0EsRUFBRSxVQUFZLEtBQU0sWUFBYSxFQUFDLE1BQU81VixLQUFtQixDQUFFLEVBQUUsRUFHM0U0VixFQUFFLGFBQWUsS0FBTyxDQUM1QmtELEVBQVkxb0IsRUFBUyxjQUFlLEtBS3BDLEdBQUksQ0FDSDBvQixFQUFVLEtBQU9sRCxFQUFFLElBSW5Ca0QsRUFBVSxLQUFPQSxFQUFVLEtBQzNCbEQsRUFBRSxZQUFjWSxHQUFhLFNBQVcsS0FBT0EsR0FBYSxNQUMzRHNDLEVBQVUsU0FBVyxLQUFPQSxFQUFVLElBQ3ZDLE1BQWEsQ0FJYmxELEVBQUUsWUFBYyxFQUNoQixDQUNELENBV0QsR0FSS0EsRUFBRSxNQUFRQSxFQUFFLGFBQWUsT0FBT0EsRUFBRSxNQUFTLFdBQ2pEQSxFQUFFLEtBQU81a0IsRUFBTyxNQUFPNGtCLEVBQUUsS0FBTUEsRUFBRSxjQUlsQ2tCLEdBQStCVCxHQUFZVCxFQUFHamtCLEVBQVNxbEIsRUFBSyxFQUd2RHZULEVBQ0osT0FBT3VULEdBS1IrQixFQUFjL25CLEVBQU8sT0FBUzRrQixFQUFFLE9BRzNCbUQsR0FBZS9uQixFQUFPLFdBQWEsR0FDdkNBLEVBQU8sTUFBTSxRQUFTLGFBSXZCNGtCLEVBQUUsS0FBT0EsRUFBRSxLQUFLLFlBQVcsRUFHM0JBLEVBQUUsV0FBYSxDQUFDTyxHQUFXLEtBQU1QLEVBQUUsTUFLbkM4QyxFQUFXOUMsRUFBRSxJQUFJLFFBQVNHLEdBQU8sRUFBRSxFQUc3QkgsRUFBRSxXQXdCSUEsRUFBRSxNQUFRQSxFQUFFLGNBQ3JCQSxFQUFFLGFBQWUsSUFBSyxRQUFTLG1DQUFxQyxJQUFLLElBQzNFQSxFQUFFLEtBQU9BLEVBQUUsS0FBSyxRQUFTRSxHQUFLLE9BdkI5QmtELEVBQVdwRCxFQUFFLElBQUksTUFBTzhDLEVBQVMsTUFBTSxFQUdsQzlDLEVBQUUsT0FBVUEsRUFBRSxhQUFlLE9BQU9BLEVBQUUsTUFBUyxZQUNuRDhDLElBQWM3RCxHQUFPLEtBQU02RCxDQUFVLEVBQUcsSUFBTSxLQUFROUMsRUFBRSxLQUd4RCxPQUFPQSxFQUFFLE1BSUxBLEVBQUUsUUFBVSxLQUNoQjhDLEVBQVdBLEVBQVMsUUFBUzFDLEdBQVksSUFBSSxFQUM3Q2dELEdBQWFuRSxHQUFPLEtBQU02RCxDQUFVLEVBQUcsSUFBTSxLQUFRLEtBQVM5RCxHQUFNLE9BQ25Fb0UsR0FJRnBELEVBQUUsSUFBTThDLEVBQVdNLEdBU2ZwRCxFQUFFLGFBQ0Q1a0IsRUFBTyxhQUFjMG5CLElBQ3pCMUIsR0FBTSxpQkFBa0Isb0JBQXFCaG1CLEVBQU8sYUFBYzBuQixDQUFRLEdBRXRFMW5CLEVBQU8sS0FBTTBuQixJQUNqQjFCLEdBQU0saUJBQWtCLGdCQUFpQmhtQixFQUFPLEtBQU0wbkIsQ0FBUSxLQUszRDlDLEVBQUUsTUFBUUEsRUFBRSxZQUFjQSxFQUFFLGNBQWdCLElBQVNqa0IsRUFBUSxjQUNqRXFsQixHQUFNLGlCQUFrQixlQUFnQnBCLEVBQUUsV0FBVyxFQUl0RG9CLEdBQU0saUJBQ0wsU0FDQXBCLEVBQUUsVUFBVyxJQUFPQSxFQUFFLFFBQVNBLEVBQUUsVUFBVyxFQUFLLEVBQ2hEQSxFQUFFLFFBQVNBLEVBQUUsVUFBVyxDQUFDLENBQUksR0FDMUJBLEVBQUUsVUFBVyxLQUFRLElBQU0sS0FBT1csR0FBVyxXQUFhLElBQzdEWCxFQUFFLFFBQVMsR0FBSyxDQUNwQixFQUdFLElBQU1sbEIsS0FBS2tsQixFQUFFLFFBQ1pvQixHQUFNLGlCQUFrQnRtQixFQUFHa2xCLEVBQUUsUUFBU2xsQixDQUFDLEdBSXhDLEdBQUtrbEIsRUFBRSxhQUNKQSxFQUFFLFdBQVcsS0FBTXFELEVBQWlCakMsR0FBT3BCLENBQUcsSUFBSyxJQUFTblMsR0FHOUQsT0FBT3VULEdBQU0sUUFlZCxHQVhBdUMsR0FBVyxRQUdYSixHQUFpQixJQUFLdkQsRUFBRSxVQUN4Qm9CLEdBQU0sS0FBTXBCLEVBQUUsU0FDZG9CLEdBQU0sS0FBTXBCLEVBQUUsT0FHZDZDLEVBQVkzQixHQUErQlIsR0FBWVYsRUFBR2prQixFQUFTcWxCLEVBQUssRUFHbkUsQ0FBQ3lCLEVBQ0wxakIsR0FBTSxHQUFJLG9CQUNKLENBU04sR0FSQWlpQixHQUFNLFdBQWEsRUFHZCtCLEdBQ0pHLEdBQW1CLFFBQVMsV0FBWSxDQUFFbEMsR0FBT3BCLENBQUcsQ0FBQSxFQUloRG5TLEVBQ0osT0FBT3VULEdBSUhwQixFQUFFLE9BQVNBLEVBQUUsUUFBVSxJQUMzQmlELEVBQWUzcEIsRUFBTyxXQUFZLFVBQVcsQ0FDNUM4bkIsR0FBTSxNQUFPLFVBQ2xCLEVBQU9wQixFQUFFLFVBR04sR0FBSSxDQUNIblMsRUFBWSxHQUNaZ1YsRUFBVSxLQUFNWSxHQUFnQnRrQixHQUNoQyxPQUFTNk4sR0FBSSxDQUdiLEdBQUthLEVBQ0osTUFBTWIsR0FJUDdOLEdBQU0sR0FBSTZOLEdBQ1YsQ0FDRCxDQUdELFNBQVM3TixHQUFNMmtCLEdBQVFDLEdBQWtCakMsR0FBV2tDLEdBQVUsQ0FDN0QsSUFBSTNCLEdBQVc0QixHQUFTeFcsR0FBTzJVLEdBQVU4QixHQUN4Q04sR0FBYUcsR0FHVGxXLElBSUxBLEVBQVksR0FHUG9WLEdBQ0ozcEIsRUFBTyxhQUFjMnBCLEdBS3RCSixFQUFZLE9BR1pFLEVBQXdCaUIsSUFBVyxHQUduQzVDLEdBQU0sV0FBYTBDLEdBQVMsRUFBSSxFQUFJLEVBR3BDekIsR0FBWXlCLElBQVUsS0FBT0EsR0FBUyxLQUFPQSxLQUFXLElBR25EaEMsS0FDSk0sR0FBV1AsR0FBcUI3QixFQUFHb0IsR0FBT1UsRUFBUyxHQUkvQyxDQUFDTyxJQUNMam5CLEVBQU8sUUFBUyxTQUFVNGtCLEVBQUUsU0FBUyxFQUFLLElBQzFDNWtCLEVBQU8sUUFBUyxPQUFRNGtCLEVBQUUsU0FBUyxFQUFLLElBQ3hDQSxFQUFFLFdBQVksYUFBZSxFQUFHLFVBQVcsQ0FBQSxHQUk1Q29DLEdBQVdELEdBQWFuQyxFQUFHb0MsR0FBVWhCLEdBQU9pQixFQUFTLEVBR2hEQSxJQUdDckMsRUFBRSxhQUNOa0UsR0FBVzlDLEdBQU0sa0JBQW1CLGlCQUMvQjhDLEtBQ0o5b0IsRUFBTyxhQUFjMG5CLENBQVUsRUFBR29CLElBRW5DQSxHQUFXOUMsR0FBTSxrQkFBbUIsUUFDL0I4QyxLQUNKOW9CLEVBQU8sS0FBTTBuQixDQUFVLEVBQUdvQixLQUt2QkosS0FBVyxLQUFPOUQsRUFBRSxPQUFTLE9BQ2pDNEQsR0FBYSxZQUdGRSxLQUFXLElBQ3RCRixHQUFhLGVBSWJBLEdBQWF4QixHQUFTLE1BQ3RCNkIsR0FBVTdCLEdBQVMsS0FDbkIzVSxHQUFRMlUsR0FBUyxNQUNqQkMsR0FBWSxDQUFDNVUsTUFLZEEsR0FBUW1XLElBQ0hFLElBQVUsQ0FBQ0YsTUFDZkEsR0FBYSxRQUNSRSxHQUFTLElBQ2JBLEdBQVMsS0FNWjFDLEdBQU0sT0FBUzBDLEdBQ2YxQyxHQUFNLFlBQWUyQyxJQUFvQkgsSUFBZSxHQUduRHZCLEdBQ0pyVyxHQUFTLFlBQWFxWCxFQUFpQixDQUFFWSxHQUFTTCxHQUFZeEMsRUFBSyxHQUVuRXBWLEdBQVMsV0FBWXFYLEVBQWlCLENBQUVqQyxHQUFPd0MsR0FBWW5XLEVBQUssR0FJakUyVCxHQUFNLFdBQVlvQyxJQUNsQkEsR0FBYSxPQUVSTCxHQUNKRyxHQUFtQixRQUFTakIsR0FBWSxjQUFnQixZQUN2RCxDQUFFakIsR0FBT3BCLEVBQUdxQyxHQUFZNEIsR0FBVXhXLEVBQU8sQ0FBQSxFQUkzQzhWLEdBQWlCLFNBQVVGLEVBQWlCLENBQUVqQyxHQUFPd0MsRUFBWSxDQUFBLEVBRTVEVCxJQUNKRyxHQUFtQixRQUFTLGVBQWdCLENBQUVsQyxHQUFPcEIsQ0FBRyxDQUFBLEVBR2hELEVBQUU1a0IsRUFBTyxRQUNoQkEsRUFBTyxNQUFNLFFBQVMsYUFHeEIsQ0FFRCxPQUFPZ21CLEVBQ1AsRUFFRCxRQUFTLFNBQVV3QixFQUFLOVQsRUFBTXBULEVBQVcsQ0FDeEMsT0FBT04sRUFBTyxJQUFLd25CLEVBQUs5VCxFQUFNcFQsRUFBVSxPQUN4QyxFQUVELFVBQVcsU0FBVWtuQixFQUFLbG5CLEVBQVcsQ0FDcEMsT0FBT04sRUFBTyxJQUFLd25CLEVBQUssT0FBV2xuQixFQUFVLFNBQzdDLENBQ0YsR0FFQU4sRUFBTyxLQUFNLENBQUUsTUFBTyxNQUFNLEVBQUksU0FBVW9DLEVBQUltTyxFQUFTLENBQ3REdlEsRUFBUXVRLENBQU0sRUFBSyxTQUFVaVgsRUFBSzlULEVBQU1wVCxFQUFVK0IsRUFBTyxDQUd4RCxPQUFLcEQsRUFBWXlVLEtBQ2hCclIsRUFBT0EsR0FBUS9CLEVBQ2ZBLEVBQVdvVCxFQUNYQSxFQUFPLFFBSUQxVCxFQUFPLEtBQU1BLEVBQU8sT0FBUSxDQUNsQyxJQUFLd25CLEVBQ0wsS0FBTWpYLEVBQ04sU0FBVWxPLEVBQ1YsS0FBTXFSLEVBQ04sUUFBU3BULENBQ1QsRUFBRU4sRUFBTyxjQUFld25CLENBQUcsR0FBTUEsQ0FBSyxDQUFBLENBQ3pDLENBQ0EsR0FFQXhuQixFQUFPLGNBQWUsU0FBVTRrQixFQUFJLENBQ25DLElBQUlsbEIsRUFDSixJQUFNQSxLQUFLa2xCLEVBQUUsUUFDUGxsQixFQUFFLFlBQWEsSUFBSyxpQkFDeEJrbEIsRUFBRSxZQUFjQSxFQUFFLFFBQVNsbEIsQ0FBQyxHQUFNLEdBR3JDLEdBR0FNLEVBQU8sU0FBVyxTQUFVd25CLEVBQUs3bUIsRUFBU2xCLEVBQU0sQ0FDL0MsT0FBT08sRUFBTyxLQUFNLENBQ25CLElBQUt3bkIsRUFHTCxLQUFNLE1BQ04sU0FBVSxTQUNWLE1BQU8sR0FDUCxNQUFPLEdBQ1AsT0FBUSxHQUtSLFdBQVksQ0FDWCxjQUFlLFVBQVcsQ0FBRSxDQUM1QixFQUNELFdBQVksU0FBVVIsRUFBVyxDQUNoQ2huQixFQUFPLFdBQVlnbkIsRUFBVXJtQixFQUFTbEIsQ0FBRyxDQUN6QyxDQUNILEVBQ0EsRUFHQU8sRUFBTyxHQUFHLE9BQVEsQ0FDakIsUUFBUyxTQUFVMmEsRUFBTyxDQUN6QixJQUFJN0QsRUFFSixPQUFLLEtBQU0sS0FDTDdYLEVBQVkwYixLQUNoQkEsRUFBT0EsRUFBSyxLQUFNLEtBQU0sQ0FBRyxDQUFBLEdBSTVCN0QsRUFBTzlXLEVBQVEyYSxFQUFNLEtBQU0sQ0FBRyxFQUFDLGFBQWUsRUFBQyxHQUFJLENBQUMsRUFBRyxNQUFPLEVBQUksRUFFN0QsS0FBTSxDQUFHLEVBQUMsWUFDZDdELEVBQUssYUFBYyxLQUFNLENBQUcsQ0FBQSxFQUc3QkEsRUFBSyxJQUFLLFVBQVcsQ0FHcEIsUUFGSXZXLEVBQU8sS0FFSEEsRUFBSyxtQkFDWkEsRUFBT0EsRUFBSyxrQkFHYixPQUFPQSxDQUNYLEdBQU8sT0FBUSxPQUdOLElBQ1AsRUFFRCxVQUFXLFNBQVVvYSxFQUFPLENBQzNCLE9BQUsxYixFQUFZMGIsR0FDVCxLQUFLLEtBQU0sU0FBVWpiLEVBQUksQ0FDL0JNLEVBQVEsSUFBTSxFQUFDLFVBQVcyYSxFQUFLLEtBQU0sS0FBTWpiLENBQUMsRUFDaEQsR0FHUyxLQUFLLEtBQU0sVUFBVyxDQUM1QixJQUFJMk8sRUFBT3JPLEVBQVEsSUFBTSxFQUN4QjhtQixFQUFXelksRUFBSyxXQUVaeVksRUFBUyxPQUNiQSxFQUFTLFFBQVNuTSxHQUdsQnRNLEVBQUssT0FBUXNNLEVBRWpCLEVBQ0UsRUFFRCxLQUFNLFNBQVVBLEVBQU8sQ0FDdEIsSUFBSW9PLEVBQWlCOXBCLEVBQVkwYixHQUVqQyxPQUFPLEtBQUssS0FBTSxTQUFVamIsRUFBSSxDQUMvQk0sRUFBUSxJQUFJLEVBQUcsUUFBUytvQixFQUFpQnBPLEVBQUssS0FBTSxLQUFNamIsR0FBTWliLEVBQ25FLEVBQ0UsRUFFRCxPQUFRLFNBQVUxYSxFQUFXLENBQzVCLFlBQUssT0FBUUEsQ0FBVSxFQUFDLElBQUssTUFBTSxFQUFHLEtBQU0sVUFBVyxDQUN0REQsRUFBUSxJQUFNLEVBQUMsWUFBYSxLQUFLLFVBQVUsQ0FDOUMsR0FDUyxJQUNQLENBQ0YsR0FHQUEsRUFBTyxLQUFLLFFBQVEsT0FBUyxTQUFVTyxFQUFPLENBQzdDLE1BQU8sQ0FBQ1AsRUFBTyxLQUFLLFFBQVEsUUFBU08sQ0FBSSxDQUMxQyxFQUNBUCxFQUFPLEtBQUssUUFBUSxRQUFVLFNBQVVPLEVBQU8sQ0FDOUMsTUFBTyxDQUFDLEVBQUdBLEVBQUssYUFBZUEsRUFBSyxjQUFnQkEsRUFBSyxpQkFBaUIsT0FDM0UsRUFLQVAsRUFBTyxhQUFhLElBQU0sVUFBVyxDQUNwQyxHQUFJLENBQ0gsT0FBTyxJQUFJOUIsRUFBTyxjQUNwQixNQUFlLENBQUUsQ0FDakIsRUFFQSxJQUFJOHFCLEdBQW1CLENBR3JCLEVBQUcsSUFJSCxLQUFNLEdBQ04sRUFDREMsR0FBZWpwQixFQUFPLGFBQWEsTUFFcENoQixFQUFRLEtBQU8sQ0FBQyxDQUFDaXFCLElBQWtCLG9CQUFxQkEsR0FDeERqcUIsRUFBUSxLQUFPaXFCLEdBQWUsQ0FBQyxDQUFDQSxHQUVoQ2pwQixFQUFPLGNBQWUsU0FBVVcsRUFBVSxDQUN6QyxJQUFJTCxFQUFVNG9CLEVBR2QsR0FBS2xxQixFQUFRLE1BQVFpcUIsSUFBZ0IsQ0FBQ3RvQixFQUFRLFlBQzdDLE1BQU8sQ0FDTixLQUFNLFNBQVVpb0IsRUFBU08sRUFBVyxDQUNuQyxJQUFJenBCLEVBQ0gwcEIsRUFBTXpvQixFQUFRLE1BV2YsR0FUQXlvQixFQUFJLEtBQ0h6b0IsRUFBUSxLQUNSQSxFQUFRLElBQ1JBLEVBQVEsTUFDUkEsRUFBUSxTQUNSQSxFQUFRLFFBQ2IsRUFHU0EsRUFBUSxVQUNaLElBQU1qQixLQUFLaUIsRUFBUSxVQUNsQnlvQixFQUFLMXBCLENBQUcsRUFBR2lCLEVBQVEsVUFBV2pCLENBQUMsRUFLNUJpQixFQUFRLFVBQVl5b0IsRUFBSSxrQkFDNUJBLEVBQUksaUJBQWtCem9CLEVBQVEsVUFRMUIsQ0FBQ0EsRUFBUSxhQUFlLENBQUNpb0IsRUFBUyxrQkFBa0IsSUFDeERBLEVBQVMsa0JBQW9CLEVBQUcsa0JBSWpDLElBQU1scEIsS0FBS2twQixFQUNWUSxFQUFJLGlCQUFrQjFwQixFQUFHa3BCLEVBQVNscEIsQ0FBRyxDQUFBLEVBSXRDWSxFQUFXLFNBQVUrQixFQUFPLENBQzNCLE9BQU8sVUFBVyxDQUNaL0IsSUFDSkEsRUFBVzRvQixFQUFnQkUsRUFBSSxPQUM5QkEsRUFBSSxRQUFVQSxFQUFJLFFBQVVBLEVBQUksVUFDL0JBLEVBQUksbUJBQXFCLEtBRXRCL21CLElBQVMsUUFDYittQixFQUFJLE1BQUssRUFDRS9tQixJQUFTLFFBS2YsT0FBTyttQixFQUFJLFFBQVcsU0FDMUJELEVBQVUsRUFBRyxTQUViQSxFQUdDQyxFQUFJLE9BQ0pBLEVBQUksVUFDZCxFQUdRRCxFQUNDSCxHQUFrQkksRUFBSSxNQUFRLEdBQUlBLEVBQUksT0FDdENBLEVBQUksWUFLRkEsRUFBSSxjQUFnQixVQUFhLFFBQ25DLE9BQU9BLEVBQUksY0FBaUIsU0FDM0IsQ0FBRSxPQUFRQSxFQUFJLFFBQVUsRUFDeEIsQ0FBRSxLQUFNQSxFQUFJLFlBQWMsRUFDM0JBLEVBQUksc0JBQXVCLENBQ3BDLEVBR0EsQ0FDQSxFQUdJQSxFQUFJLE9BQVM5b0IsSUFDYjRvQixFQUFnQkUsRUFBSSxRQUFVQSxFQUFJLFVBQVk5b0IsRUFBVSxTQUtuRDhvQixFQUFJLFVBQVksT0FDcEJBLEVBQUksUUFBVUYsRUFFZEUsRUFBSSxtQkFBcUIsVUFBVyxDQUc5QkEsRUFBSSxhQUFlLEdBTXZCbHJCLEVBQU8sV0FBWSxVQUFXLENBQ3hCb0MsR0FDSjRvQixHQUVULEVBRUEsRUFJSTVvQixFQUFXQSxFQUFVLFNBRXJCLEdBQUksQ0FHSDhvQixFQUFJLEtBQU16b0IsRUFBUSxZQUFjQSxFQUFRLE1BQVEsS0FDaEQsT0FBU2lSLEVBQUksQ0FHYixHQUFLdFIsRUFDSixNQUFNc1IsQ0FFUCxDQUNELEVBRUQsTUFBTyxVQUFXLENBQ1p0UixHQUNKQSxHQUVELENBQ0osQ0FFQSxHQU1BTixFQUFPLGNBQWUsU0FBVTRrQixFQUFJLENBQzlCQSxFQUFFLGNBQ05BLEVBQUUsU0FBUyxPQUFTLEdBRXRCLEdBR0E1a0IsRUFBTyxVQUFXLENBQ2pCLFFBQVMsQ0FDUixPQUFRLDJGQUVSLEVBQ0QsU0FBVSxDQUNULE9BQVEseUJBQ1IsRUFDRCxXQUFZLENBQ1gsY0FBZSxTQUFVa0ssRUFBTyxDQUMvQixPQUFBbEssRUFBTyxXQUFZa0ssR0FDWkEsQ0FDUCxDQUNELENBQ0YsR0FHQWxLLEVBQU8sY0FBZSxTQUFVLFNBQVU0a0IsRUFBSSxDQUN4Q0EsRUFBRSxRQUFVLFNBQ2hCQSxFQUFFLE1BQVEsSUFFTkEsRUFBRSxjQUNOQSxFQUFFLEtBQU8sTUFFWCxHQUdBNWtCLEVBQU8sY0FBZSxTQUFVLFNBQVU0a0IsRUFBSSxDQUc3QyxHQUFLQSxFQUFFLGFBQWVBLEVBQUUsWUFBYyxDQUNyQyxJQUFJaGxCLEVBQVFVLEVBQ1osTUFBTyxDQUNOLEtBQU0sU0FBVTZPLEVBQUdnYSxFQUFXLENBQzdCdnBCLEVBQVNJLEVBQVEsVUFBWSxFQUMzQixLQUFNNGtCLEVBQUUsYUFBZSxFQUFJLEVBQzNCLEtBQU0sQ0FBRSxRQUFTQSxFQUFFLGNBQWUsSUFBS0EsRUFBRSxJQUFPLEVBQ2hELEdBQUksYUFBY3RrQixFQUFXLFNBQVUrb0IsRUFBTSxDQUM3Q3pwQixFQUFPLE9BQU0sRUFDYlUsRUFBVyxLQUNOK29CLEdBQ0pGLEVBQVVFLEVBQUksT0FBUyxRQUFVLElBQU0sSUFBS0EsRUFBSSxLQUV2RCxHQUdJanFCLEVBQVMsS0FBSyxZQUFhUSxFQUFRLENBQUcsQ0FBQSxDQUN0QyxFQUNELE1BQU8sVUFBVyxDQUNaVSxHQUNKQSxHQUVELENBQ0osQ0FDRSxDQUNGLEdBS0EsSUFBSWdwQixHQUFlLENBQUUsRUFDcEJDLEdBQVMsb0JBR1Z2cEIsRUFBTyxVQUFXLENBQ2pCLE1BQU8sV0FDUCxjQUFlLFVBQVcsQ0FDekIsSUFBSU0sRUFBV2dwQixHQUFhLElBQUcsR0FBUXRwQixFQUFPLFFBQVUsSUFBUTRqQixHQUFNLE9BQ3RFLFlBQU10akIsQ0FBVSxFQUFHLEdBQ1pBLENBQ1AsQ0FDRixHQUdBTixFQUFPLGNBQWUsYUFBYyxTQUFVNGtCLEVBQUc0RSxFQUFrQnhELEVBQVEsQ0FFMUUsSUFBSXlELEVBQWNDLEVBQWFDLEVBQzlCQyxFQUFXaEYsRUFBRSxRQUFVLEtBQVcyRSxHQUFPLEtBQU0zRSxFQUFFLEdBQUssRUFDckQsTUFDQSxPQUFPQSxFQUFFLE1BQVMsV0FDZkEsRUFBRSxhQUFlLElBQ2pCLFFBQVMsbUNBQW1DLElBQU8sR0FDckQyRSxHQUFPLEtBQU0zRSxFQUFFLElBQU0sR0FBSSxRQUk1QixHQUFLZ0YsR0FBWWhGLEVBQUUsVUFBVyxDQUFDLElBQU8sUUFHckMsT0FBQTZFLEVBQWU3RSxFQUFFLGNBQWdCM2xCLEVBQVkybEIsRUFBRSxhQUFlLEVBQzdEQSxFQUFFLGNBQWUsRUFDakJBLEVBQUUsY0FHRWdGLEVBQ0poRixFQUFHZ0YsR0FBYWhGLEVBQUdnRixDQUFRLEVBQUcsUUFBU0wsR0FBUSxLQUFPRSxHQUMzQzdFLEVBQUUsUUFBVSxLQUN2QkEsRUFBRSxNQUFTZixHQUFPLEtBQU1lLEVBQUUsS0FBUSxJQUFNLEtBQVFBLEVBQUUsTUFBUSxJQUFNNkUsR0FJakU3RSxFQUFFLFdBQVksYUFBYSxFQUFLLFVBQVcsQ0FDMUMsT0FBTStFLEdBQ0wzcEIsRUFBTyxNQUFPeXBCLEVBQWUsbUJBRXZCRSxFQUFtQixFQUM3QixFQUdFL0UsRUFBRSxVQUFXLENBQUcsRUFBRyxPQUduQjhFLEVBQWN4ckIsRUFBUXVyQixHQUN0QnZyQixFQUFRdXJCLENBQVksRUFBSyxVQUFXLENBQ25DRSxFQUFvQixTQUN2QixFQUdFM0QsRUFBTSxPQUFRLFVBQVcsQ0FHbkIwRCxJQUFnQixPQUNwQjFwQixFQUFROUIsQ0FBTSxFQUFHLFdBQVl1ckIsQ0FBWSxFQUl6Q3ZyQixFQUFRdXJCLENBQWMsRUFBR0MsRUFJckI5RSxFQUFHNkUsS0FHUDdFLEVBQUUsY0FBZ0I0RSxFQUFpQixjQUduQ0YsR0FBYSxLQUFNRyxJQUlmRSxHQUFxQjFxQixFQUFZeXFCLElBQ3JDQSxFQUFhQyxFQUFtQixDQUFDLEdBR2xDQSxFQUFvQkQsRUFBYyxNQUNyQyxHQUdTLFFBRVQsR0FVQTFxQixFQUFRLG1CQUF1QixVQUFXLENBQ3pDLElBQUk2cUIsRUFBT3pxQixFQUFTLGVBQWUsbUJBQW9CLEVBQUksRUFBQyxLQUM1RCxPQUFBeXFCLEVBQUssVUFBWSw2QkFDVkEsRUFBSyxXQUFXLFNBQVcsQ0FDbkMsSUFPQTdwQixFQUFPLFVBQVksU0FBVTBULEVBQU14VCxFQUFTNHBCLEVBQWMsQ0FDekQsR0FBSyxPQUFPcFcsR0FBUyxTQUNwQixNQUFPLEdBRUgsT0FBT3hULEdBQVksWUFDdkI0cEIsRUFBYzVwQixFQUNkQSxFQUFVLElBR1gsSUFBSTZLLEVBQU1nZixFQUFRcFQsRUF3QmxCLE9BdEJNelcsSUFJQWxCLEVBQVEsb0JBQ1prQixFQUFVZCxFQUFTLGVBQWUsbUJBQW9CLEVBQUUsRUFLeEQyTCxFQUFPN0ssRUFBUSxjQUFlLFFBQzlCNkssRUFBSyxLQUFPM0wsRUFBUyxTQUFTLEtBQzlCYyxFQUFRLEtBQUssWUFBYTZLLElBRTFCN0ssRUFBVWQsR0FJWjJxQixFQUFTOWIsR0FBVyxLQUFNeUYsR0FDMUJpRCxFQUFVLENBQUNtVCxHQUFlLEdBR3JCQyxFQUNHLENBQUU3cEIsRUFBUSxjQUFlNnBCLEVBQVEsQ0FBQyxDQUFJLENBQUEsR0FHOUNBLEVBQVNyVCxHQUFlLENBQUVoRCxDQUFNLEVBQUV4VCxFQUFTeVcsQ0FBTyxFQUU3Q0EsR0FBV0EsRUFBUSxRQUN2QjNXLEVBQVEyVyxHQUFVLFNBR1ozVyxFQUFPLE1BQU8sQ0FBRSxFQUFFK3BCLEVBQU8sVUFBVSxFQUMzQyxFQU1BL3BCLEVBQU8sR0FBRyxLQUFPLFNBQVV3bkIsRUFBS3dDLEVBQVExcEIsRUFBVyxDQUNsRCxJQUFJTCxFQUFVb0MsRUFBTTJrQixFQUNuQjNZLEVBQU8sS0FDUDRiLEVBQU16QyxFQUFJLFFBQVMsS0FFcEIsT0FBS3lDLEVBQU0sS0FDVmhxQixFQUFXOGlCLEdBQWtCeUUsRUFBSSxNQUFPeUMsQ0FBSyxDQUFBLEVBQzdDekMsRUFBTUEsRUFBSSxNQUFPLEVBQUd5QyxDQUFHLEdBSW5CaHJCLEVBQVkrcUIsSUFHaEIxcEIsRUFBVzBwQixFQUNYQSxFQUFTLFFBR0VBLEdBQVUsT0FBT0EsR0FBVyxXQUN2QzNuQixFQUFPLFFBSUhnTSxFQUFLLE9BQVMsR0FDbEJyTyxFQUFPLEtBQU0sQ0FDWixJQUFLd25CLEVBS0wsS0FBTW5sQixHQUFRLE1BQ2QsU0FBVSxPQUNWLEtBQU0ybkIsQ0FDVCxHQUFNLEtBQU0sU0FBVUUsRUFBZSxDQUdsQ2xELEVBQVcsVUFFWDNZLEVBQUssS0FBTXBPLEVBSVZELEVBQVEsU0FBVSxPQUFRQSxFQUFPLFVBQVdrcUIsQ0FBYyxDQUFBLEVBQUcsS0FBTWpxQixDQUFVLEVBRzdFaXFCLEVBS0QsQ0FBQSxFQUFHLE9BQVE1cEIsR0FBWSxTQUFVMGxCLEVBQU8wQyxFQUFTLENBQ2pEcmEsRUFBSyxLQUFNLFVBQVcsQ0FDckIvTixFQUFTLE1BQU8sS0FBTTBtQixHQUFZLENBQUVoQixFQUFNLGFBQWMwQyxFQUFRMUMsQ0FBSyxFQUN6RSxFQUNBLEdBR1EsSUFDUixFQUtBaG1CLEVBQU8sS0FBSyxRQUFRLFNBQVcsU0FBVU8sRUFBTyxDQUMvQyxPQUFPUCxFQUFPLEtBQU1BLEVBQU8sT0FBUSxTQUFVZ0gsRUFBSyxDQUNqRCxPQUFPekcsSUFBU3lHLEVBQUcsSUFDbkIsQ0FBQSxFQUFHLE1BQ0wsRUFLQWhILEVBQU8sT0FBUyxDQUNmLFVBQVcsU0FBVU8sRUFBTUksRUFBU2pCLEVBQUksQ0FDdkMsSUFBSXlxQixFQUFhQyxFQUFTQyxFQUFXQyxFQUFRQyxFQUFXQyxFQUFZQyxFQUNuRUMsRUFBVzFxQixFQUFPLElBQUtPLEVBQU0sVUFBWSxFQUN6Q29xQixFQUFVM3FCLEVBQVFPLENBQU0sRUFDeEJ3WSxFQUFRLENBQUEsRUFHSjJSLElBQWEsV0FDakJucUIsRUFBSyxNQUFNLFNBQVcsWUFHdkJncUIsRUFBWUksRUFBUSxTQUNwQk4sRUFBWXJxQixFQUFPLElBQUtPLEVBQU0sS0FBSyxFQUNuQ2lxQixFQUFheHFCLEVBQU8sSUFBS08sRUFBTSxNQUFNLEVBQ3JDa3FCLEdBQXNCQyxJQUFhLFlBQWNBLElBQWEsV0FDM0RMLEVBQVlHLEdBQWEsUUFBUyxNQUFRLEVBQUcsR0FJM0NDLEdBQ0pOLEVBQWNRLEVBQVEsV0FDdEJMLEVBQVNILEVBQVksSUFDckJDLEVBQVVELEVBQVksT0FHdEJHLEVBQVMsV0FBWUQsQ0FBVyxHQUFJLEVBQ3BDRCxFQUFVLFdBQVlJLENBQVksR0FBSSxHQUdsQ3ZyQixFQUFZMEIsS0FHaEJBLEVBQVVBLEVBQVEsS0FBTUosRUFBTWIsRUFBR00sRUFBTyxPQUFRLENBQUEsRUFBSXVxQixDQUFTLElBR3pENXBCLEVBQVEsS0FBTyxPQUNuQm9ZLEVBQU0sSUFBUXBZLEVBQVEsSUFBTTRwQixFQUFVLElBQVFELEdBRTFDM3BCLEVBQVEsTUFBUSxPQUNwQm9ZLEVBQU0sS0FBU3BZLEVBQVEsS0FBTzRwQixFQUFVLEtBQVNILEdBRzdDLFVBQVd6cEIsRUFDZkEsRUFBUSxNQUFNLEtBQU1KLEVBQU13WSxDQUFLLEVBRy9CNFIsRUFBUSxJQUFLNVIsRUFFZCxDQUNGLEVBRUEvWSxFQUFPLEdBQUcsT0FBUSxDQUdqQixPQUFRLFNBQVVXLEVBQVUsQ0FHM0IsR0FBSyxVQUFVLE9BQ2QsT0FBT0EsSUFBWSxPQUNsQixLQUNBLEtBQUssS0FBTSxTQUFVakIsRUFBSSxDQUN4Qk0sRUFBTyxPQUFPLFVBQVcsS0FBTVcsRUFBU2pCLENBQUMsQ0FDOUMsR0FHRSxJQUFJa3JCLEVBQU1DLEVBQ1R0cUIsRUFBTyxLQUFNLEdBRWQsR0FBTUEsRUFRTixPQUFNQSxFQUFLLGVBQWdCLEVBQUMsUUFLNUJxcUIsRUFBT3JxQixFQUFLLHdCQUNac3FCLEVBQU10cUIsRUFBSyxjQUFjLFlBQ2xCLENBQ04sSUFBS3FxQixFQUFLLElBQU1DLEVBQUksWUFDcEIsS0FBTUQsRUFBSyxLQUFPQyxFQUFJLFdBQ3pCLEdBVFUsQ0FBRSxJQUFLLEVBQUcsS0FBTSxDQUFDLENBVXpCLEVBSUQsU0FBVSxVQUFXLENBQ3BCLEdBQU0sS0FBTSxHQUlaLEtBQUlDLEVBQWNDLEVBQVF0ckIsRUFDekJjLEVBQU8sS0FBTSxDQUFHLEVBQ2hCeXFCLEVBQWUsQ0FBRSxJQUFLLEVBQUcsS0FBTSxDQUFDLEVBR2pDLEdBQUtockIsRUFBTyxJQUFLTyxFQUFNLFVBQVUsSUFBTyxRQUd2Q3dxQixFQUFTeHFCLEVBQUssNEJBRVIsQ0FPTixJQU5Bd3FCLEVBQVMsS0FBSyxTQUlkdHJCLEVBQU1jLEVBQUssY0FDWHVxQixFQUFldnFCLEVBQUssY0FBZ0JkLEVBQUksZ0JBQ2hDcXJCLElBQ0xBLElBQWlCcnJCLEVBQUksTUFBUXFyQixJQUFpQnJyQixFQUFJLGtCQUNwRE8sRUFBTyxJQUFLOHFCLEVBQWMsVUFBVSxJQUFPLFVBRTNDQSxFQUFlQSxFQUFhLFdBRXhCQSxHQUFnQkEsSUFBaUJ2cUIsR0FBUXVxQixFQUFhLFdBQWEsSUFHdkVFLEVBQWVockIsRUFBUThxQixDQUFjLEVBQUMsT0FBTSxFQUM1Q0UsRUFBYSxLQUFPaHJCLEVBQU8sSUFBSzhxQixFQUFjLGlCQUFrQixJQUNoRUUsRUFBYSxNQUFRaHJCLEVBQU8sSUFBSzhxQixFQUFjLGtCQUFtQixJQUVuRSxDQUdELE1BQU8sQ0FDTixJQUFLQyxFQUFPLElBQU1DLEVBQWEsSUFBTWhyQixFQUFPLElBQUtPLEVBQU0sWUFBYSxFQUFNLEVBQzFFLEtBQU13cUIsRUFBTyxLQUFPQyxFQUFhLEtBQU9ockIsRUFBTyxJQUFLTyxFQUFNLGFBQWMsRUFBTSxDQUNqRixFQUNFLEVBWUQsYUFBYyxVQUFXLENBQ3hCLE9BQU8sS0FBSyxJQUFLLFVBQVcsQ0FHM0IsUUFGSXVxQixFQUFlLEtBQUssYUFFaEJBLEdBQWdCOXFCLEVBQU8sSUFBSzhxQixFQUFjLFVBQVksSUFBSyxVQUNsRUEsRUFBZUEsRUFBYSxhQUc3QixPQUFPQSxHQUFnQnBuQixFQUMxQixFQUNFLENBQ0YsR0FHQTFELEVBQU8sS0FBTSxDQUFFLFdBQVksY0FBZSxVQUFXLGFBQWUsRUFBRSxTQUFVdVEsRUFBUW9ELEVBQU8sQ0FDOUYsSUFBSXNYLEVBQXdCdFgsSUFBbEIsY0FFVjNULEVBQU8sR0FBSXVRLENBQVEsRUFBRyxTQUFVNVEsRUFBTSxDQUNyQyxPQUFPK1MsR0FBUSxLQUFNLFNBQVVuUyxFQUFNZ1EsRUFBUTVRLEVBQU0sQ0FHbEQsSUFBSWtyQixFQU9KLEdBTksxckIsRUFBVW9CLEdBQ2RzcUIsRUFBTXRxQixFQUNLQSxFQUFLLFdBQWEsSUFDN0JzcUIsRUFBTXRxQixFQUFLLGFBR1BaLElBQVEsT0FDWixPQUFPa3JCLEVBQU1BLEVBQUtsWCxDQUFNLEVBQUdwVCxFQUFNZ1EsQ0FBTSxFQUduQ3NhLEVBQ0pBLEVBQUksU0FDRkksRUFBWUosRUFBSSxZQUFWbHJCLEVBQ1BzckIsRUFBTXRyQixFQUFNa3JCLEVBQUksV0FDckIsRUFHSXRxQixFQUFNZ1EsQ0FBUSxFQUFHNVEsQ0FFbEIsRUFBRTRRLEVBQVE1USxFQUFLLFVBQVUsTUFBTSxDQUNsQyxDQUNBLEdBUUFLLEVBQU8sS0FBTSxDQUFFLE1BQU8sTUFBTSxFQUFJLFNBQVVvQyxFQUFJdVIsRUFBTyxDQUNwRDNULEVBQU8sU0FBVTJULENBQU0sRUFBR3FKLEdBQWNoZSxFQUFRLGNBQy9DLFNBQVV1QixFQUFNbWMsRUFBVyxDQUMxQixHQUFLQSxFQUNKLE9BQUFBLEVBQVdELEdBQVFsYyxFQUFNb1QsR0FHbEJ3SCxHQUFVLEtBQU11QixDQUFVLEVBQ2hDMWMsRUFBUU8sQ0FBTSxFQUFDLFNBQVEsRUFBSW9ULENBQU0sRUFBRyxLQUNwQytJLENBRUYsQ0FDSCxDQUNBLEdBSUExYyxFQUFPLEtBQU0sQ0FBRSxPQUFRLFNBQVUsTUFBTyxPQUFTLEVBQUUsU0FBVVksRUFBTXlCLEVBQU8sQ0FDekVyQyxFQUFPLEtBQU0sQ0FDWixRQUFTLFFBQVVZLEVBQ25CLFFBQVN5QixFQUNULEdBQUksUUFBVXpCLENBQ2hCLEVBQUksU0FBVXNxQixFQUFjQyxFQUFXLENBR3JDbnJCLEVBQU8sR0FBSW1yQixDQUFVLEVBQUcsU0FBVUMsRUFBUWpwQixFQUFRLENBQ2pELElBQUl3USxFQUFZLFVBQVUsU0FBWXVZLEdBQWdCLE9BQU9FLEdBQVcsV0FDdkUvTSxFQUFRNk0sSUFBa0JFLElBQVcsSUFBUWpwQixJQUFVLEdBQU8sU0FBVyxVQUUxRSxPQUFPdVEsR0FBUSxLQUFNLFNBQVVuUyxFQUFNOEIsRUFBTUYsRUFBUSxDQUNsRCxJQUFJMUMsRUFFSixPQUFLTixFQUFVb0IsR0FHUDRxQixFQUFTLFFBQVMsT0FBTyxJQUFPLEVBQ3RDNXFCLEVBQU0sUUFBVUssQ0FBTSxFQUN0QkwsRUFBSyxTQUFTLGdCQUFpQixTQUFXSyxDQUFJLEVBSTNDTCxFQUFLLFdBQWEsR0FDdEJkLEVBQU1jLEVBQUssZ0JBSUosS0FBSyxJQUNYQSxFQUFLLEtBQU0sU0FBV0ssQ0FBTSxFQUFFbkIsRUFBSyxTQUFXbUIsQ0FBTSxFQUNwREwsRUFBSyxLQUFNLFNBQVdLLENBQU0sRUFBRW5CLEVBQUssU0FBV21CLENBQU0sRUFDcERuQixFQUFLLFNBQVdtQixDQUFNLENBQzVCLEdBR1d1QixJQUFVLE9BR2hCbkMsRUFBTyxJQUFLTyxFQUFNOEIsRUFBTWdjLENBQU8sRUFHL0JyZSxFQUFPLE1BQU9PLEVBQU04QixFQUFNRixFQUFPa2MsQ0FBSyxDQUN2QyxFQUFFaGMsRUFBTXNRLEVBQVl5WSxFQUFTLE9BQVd6WSxDQUFTLENBQ3JELENBQ0EsRUFDQSxHQUdBM1MsRUFBTyxLQUFNLENBQ1osWUFDQSxXQUNBLGVBQ0EsWUFDQSxjQUNBLFVBQ0QsRUFBRyxTQUFVb0MsRUFBSUMsRUFBTyxDQUN2QnJDLEVBQU8sR0FBSXFDLENBQU0sRUFBRyxTQUFVMkUsRUFBSyxDQUNsQyxPQUFPLEtBQUssR0FBSTNFLEVBQU0yRSxDQUFFLENBQzFCLENBQ0EsR0FLQWhILEVBQU8sR0FBRyxPQUFRLENBRWpCLEtBQU0sU0FBVXFYLEVBQU8zRCxFQUFNMU0sRUFBSyxDQUNqQyxPQUFPLEtBQUssR0FBSXFRLEVBQU8sS0FBTTNELEVBQU0xTSxFQUNuQyxFQUNELE9BQVEsU0FBVXFRLEVBQU9yUSxFQUFLLENBQzdCLE9BQU8sS0FBSyxJQUFLcVEsRUFBTyxLQUFNclEsQ0FBRSxDQUNoQyxFQUVELFNBQVUsU0FBVS9HLEVBQVVvWCxFQUFPM0QsRUFBTTFNLEVBQUssQ0FDL0MsT0FBTyxLQUFLLEdBQUlxUSxFQUFPcFgsRUFBVXlULEVBQU0xTSxFQUN2QyxFQUNELFdBQVksU0FBVS9HLEVBQVVvWCxFQUFPclEsRUFBSyxDQUczQyxPQUFPLFVBQVUsU0FBVyxFQUMzQixLQUFLLElBQUsvRyxFQUFVLElBQU0sRUFDMUIsS0FBSyxJQUFLb1gsRUFBT3BYLEdBQVksS0FBTStHLENBQUUsQ0FDdEMsRUFFRCxNQUFPLFNBQVVxa0IsRUFBUUMsRUFBUSxDQUNoQyxPQUFPLEtBQ0wsR0FBSSxhQUFjRCxDQUFRLEVBQzFCLEdBQUksYUFBY0MsR0FBU0QsRUFDN0IsQ0FDRixHQUVBcnJCLEVBQU8sS0FDSix3TEFFMEQsTUFBTyxHQUFLLEVBQ3hFLFNBQVVvQyxFQUFJeEIsRUFBTyxDQUdwQlosRUFBTyxHQUFJWSxDQUFNLEVBQUcsU0FBVThTLEVBQU0xTSxFQUFLLENBQ3hDLE9BQU8sVUFBVSxPQUFTLEVBQ3pCLEtBQUssR0FBSXBHLEVBQU0sS0FBTThTLEVBQU0xTSxDQUFJLEVBQy9CLEtBQUssUUFBU3BHLEVBQ2xCLENBQ0UsQ0FDRixFQVNBLElBQUkycUIsR0FBUSxzREFNWnZyQixFQUFPLE1BQVEsU0FBVWdILEVBQUk5RyxFQUFVLENBQ3RDLElBQUlxVSxFQUFLM0ssRUFBTTRoQixFQVVmLEdBUkssT0FBT3RyQixHQUFZLFdBQ3ZCcVUsRUFBTXZOLEVBQUk5RyxHQUNWQSxFQUFVOEcsRUFDVkEsRUFBS3VOLEdBS0QsRUFBQ3RWLEVBQVkrSCxHQUtsQixPQUFBNEMsRUFBT3RMLEVBQU0sS0FBTSxVQUFXLENBQUMsRUFDL0JrdEIsRUFBUSxVQUFXLENBQ2xCLE9BQU94a0IsRUFBRyxNQUFPOUcsR0FBVyxLQUFNMEosRUFBSyxPQUFRdEwsRUFBTSxLQUFNLFNBQVMsQ0FBSSxDQUFBLENBQzFFLEVBR0NrdEIsRUFBTSxLQUFPeGtCLEVBQUcsS0FBT0EsRUFBRyxNQUFRaEgsRUFBTyxPQUVsQ3dyQixDQUNSLEVBRUF4ckIsRUFBTyxVQUFZLFNBQVV5ckIsRUFBTyxDQUM5QkEsRUFDSnpyQixFQUFPLFlBRVBBLEVBQU8sTUFBTyxHQUVoQixFQUNBQSxFQUFPLFFBQVUsTUFBTSxRQUN2QkEsRUFBTyxVQUFZLEtBQUssTUFDeEJBLEVBQU8sU0FBV3NDLEVBQ2xCdEMsRUFBTyxXQUFhZixFQUNwQmUsRUFBTyxTQUFXYixFQUNsQmEsRUFBTyxVQUFZcVQsR0FDbkJyVCxFQUFPLEtBQU9ILEVBRWRHLEVBQU8sSUFBTSxLQUFLLElBRWxCQSxFQUFPLFVBQVksU0FBVWQsRUFBTSxDQUtsQyxJQUFJbUQsRUFBT3JDLEVBQU8sS0FBTWQsQ0FBRyxFQUMzQixPQUFTbUQsSUFBUyxVQUFZQSxJQUFTLFdBS3RDLENBQUMsTUFBT25ELEVBQU0sV0FBWUEsQ0FBSyxDQUFBLENBQ2pDLEVBRUFjLEVBQU8sS0FBTyxTQUFVa0ssRUFBTyxDQUM5QixPQUFPQSxHQUFRLEtBQ2QsSUFDRUEsRUFBTyxJQUFLLFFBQVNxaEIsR0FBTyxJQUFJLENBQ3BDLEVBMEJBLElBR0NHLEdBQVV4dEIsRUFBTyxPQUdqQnl0QixHQUFLenRCLEVBQU8sRUFFYixPQUFBOEIsRUFBTyxXQUFhLFNBQVVtQixFQUFPLENBQ3BDLE9BQUtqRCxFQUFPLElBQU04QixJQUNqQjlCLEVBQU8sRUFBSXl0QixJQUdQeHFCLEdBQVFqRCxFQUFPLFNBQVc4QixJQUM5QjlCLEVBQU8sT0FBU3d0QixJQUdWMXJCLENBQ1IsRUFLSyxPQUFPN0IsRUFBYSxNQUN4QkQsRUFBTyxPQUFTQSxFQUFPLEVBQUk4QixHQU1yQkEsQ0FDUCwwR0N6OVVhLGFBQXFDLENBQUMsRUNPNUMsTUFBTSxlQUFrQyxDQUkzQyxhQUFhLENBSGI0ckIsRUFBQSxhQUNBQSxFQUFBLG9CQUNBQSxFQUFBLGNBRUksS0FBSyxLQUFLLFNBQ1YsS0FBSyxZQUFZLEdBQ2pCLEtBQUssU0FBUyxFQUNkLEtBQUssTUFBTSxDQUNQLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFDZCxRQUFRLEVBQUEsRUFFWixLQUFLLFNBQVMsQ0FDbEIsQ0FFQSxNQUFNLFFBQVFDLEVBQXVCclUsRUFBVXRYLEVBQXlDLENBQ3BGLElBQUl5SSxFQUFPLENBQ1AsUUFBUSxHQUNSLE9BQU8sRUFBQSxFQUVSLEdBQUEsQ0FFQyxHQURBLEtBQUssWUFBWWtqQixFQUFXLFlBQ3hCLEVBQUUsVUFBV0EsRUFBVyxjQUFnQixFQUFFLFlBQWFBLEVBQVcsYUFDM0QsT0FBQWxqQixFQUVYLEtBQUssTUFBUWtqQixFQUFXLFlBQ3hCLE1BQU1DLEVBQVN0VSxFQUFNLE9BQ3JCLEdBQUcsRUFBRSxLQUFLLE1BQU0sTUFBTSxRQUFRc1UsR0FDMUIsTUFBTSxJQUFJLE1BQU0sU0FBUyxLQUFLLE1BQU0sTUFBTSxJQUFJLGVBQWUsRUFFakUsTUFBTTNwQixFQUFRMnBCLEVBQU8sS0FBSyxNQUFNLE1BQU0sSUFBSSxFQUFFLE1BQ3pDLEdBQUEzcEIsSUFBUSxRQUFhQSxJQUFRLEdBQzVCLE9BQUEycEIsRUFBTyxLQUFLLE1BQU0sTUFBTSxJQUFJLEVBQUUsTUFBTSxLQUFLLE1BQU0sUUFDeENuakIsRUFFSEEsRUFBQSxDQUNOLFFBQVEsR0FDUixPQUFPLEVBQUEsUUFFTjBKLEVBQU0sQ0FDRG5TLEVBQUEsT0FBTyxZQUFZbVMsRUFBTXdaLENBQVUsRUFDM0NsakIsRUFBTyxRQUFRLEVBQ25CLENBQ08sT0FBQUEsQ0FDWCxDQUVBLFVBQWlCLENBQ0EsYUFBQSxLQUFLLElBQUksRUFBRSxJQUM1QixDQUVKLENBQ0EsSUFBSSxnQkM1REcsTUFBTSxTQUFTLENBQ2xCLE9BQU8sYUFBYXhJLEVBQVc0ckIsRUFBcUIsQ0FDNUMsSUFBQUMsRUFBYyxLQUFLLE1BQU0sS0FBSyxJQUFJN3JCLENBQUcsQ0FBQyxFQUFFLFdBQ3hDOHJCLEVBQWUsS0FBSyxJQUFJOXJCLENBQUcsRUFBRSxXQUFXLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBSyxHQUN6RCtyQixFQUFhL3JCLEVBQU0sRUFDbkJnc0IsRUFBWUosRUFBTyxTQUFTLEdBQUcsRUFFL0JJLElBQ09oc0IsR0FBQSxJQUNQNnJCLEVBQWMsS0FBSyxNQUFNLEtBQUssSUFBSTdyQixDQUFHLENBQUMsRUFBRSxXQUN6QjhyQixFQUFBLEtBQUssSUFBSTlyQixDQUFHLEVBQUUsV0FBVyxNQUFNLEdBQUcsRUFBRSxDQUFDLEdBQUssSUFJN0QsR0FBSSxDQUFDaXNCLEVBQWVDLENBQWMsRUFBSU4sRUFBTyxNQUFNLEdBQUcsRUFLbEQsR0FKVUMsRUFBQUksRUFBZ0JKLEVBQVksU0FBU0ksRUFBYyxRQUFRLFFBQVMsRUFBRSxFQUFFLE9BQVEsR0FBRyxFQUFJSixFQUNyR0MsRUFBZUEsRUFBYSxPQUFPSSxFQUFpQkEsRUFBZSxPQUFTLEVBQUcsR0FBRyxFQUc5RSxJQUFJLEtBQUtELENBQWEsRUFBRyxDQUN6QixNQUFNbk4sRUFBUSxDQUFBLEVBQ2QsS0FBTytNLEVBQVksUUFDbkIvTSxFQUFNLFFBQVErTSxFQUFZLE1BQU0sRUFBRSxDQUFDLEVBQ3JCQSxFQUFBQSxFQUFZLE1BQU0sRUFBRyxFQUFFLEVBRXZCQSxFQUFBL00sRUFBTSxLQUFLLEdBQUcsQ0FDaEMsQ0FHQSxJQUFJdFcsRUFBUzBqQixFQUFpQixHQUFHTCxDQUFXLElBQUlDLENBQVksR0FBS0QsRUFDeEQsT0FBQXJqQixFQUFBdWpCLEVBQWEsSUFBSXZqQixDQUFNLEdBQUtBLEVBQzlCd2pCLEVBQVksR0FBR3hqQixDQUFNLElBQU1BLENBQ3RDLENBRUEsT0FBTyxXQUFXMmpCLEVBQVlQLEVBQXdCLENBQzVDLE1BQUFRLEVBQU9ELEVBQUssY0FDWkUsRUFBUUYsRUFBSyxTQUFBLEVBQWEsRUFDMUJHLEVBQU1ILEVBQUssVUFDWEksRUFBT0osRUFBSyxXQUNaSyxFQUFTTCxFQUFLLGFBQ2R6cUIsRUFBU3lxQixFQUFLLGFBQ2RNLEVBQWNOLEVBQUssa0JBQ25CTyxFQUFpQixDQUFDUCxFQUFLLGtCQUFBLEVBQXNCLEdBRTdDUSxFQUFlLENBQ25CLEtBQVFQLEVBQUssU0FBUyxFQUN0QixHQUFNQSxFQUFLLFNBQVMsRUFBRSxNQUFNLEVBQUUsRUFDOUIsR0FBTUMsRUFBTSxTQUFBLEVBQVcsU0FBUyxFQUFHLEdBQUcsRUFDdEMsRUFBS0EsRUFBTSxTQUFTLEVBQ3BCLEdBQU1DLEVBQUksU0FBQSxFQUFXLFNBQVMsRUFBRyxHQUFHLEVBQ3BDLEVBQUtBLEVBQUksU0FBUyxFQUNsQixHQUFNQyxFQUFLLFNBQUEsRUFBVyxTQUFTLEVBQUcsR0FBRyxFQUNyQyxFQUFLQSxFQUFLLFNBQVMsRUFDbkIsSUFBT0EsRUFBTyxHQUFLQSxFQUFPLEdBQUtBLEdBQU0sU0FBUyxFQUFFLFNBQVMsRUFBRyxHQUFHLEVBQy9ELEdBQU1BLEVBQU8sR0FBS0EsRUFBTyxHQUFLQSxHQUFNLFNBQVMsRUFDN0MsR0FBTUMsRUFBTyxTQUFBLEVBQVcsU0FBUyxFQUFHLEdBQUcsRUFDdkMsRUFBS0EsRUFBTyxTQUFTLEVBQ3JCLEdBQU05cUIsRUFBTyxTQUFBLEVBQVcsU0FBUyxFQUFHLEdBQUcsRUFDdkMsRUFBS0EsRUFBTyxTQUFTLEVBQ3JCLElBQU8rcUIsRUFBWSxTQUFBLEVBQVcsU0FBUyxFQUFHLEdBQUcsRUFDN0MsS0FBUUMsR0FBa0IsRUFBSSxJQUFNLEtBQU8sS0FBSyxJQUFJQSxDQUFjLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRyxHQUFHLEVBQUksS0FBQSxFQUdwRyxPQUFPZCxFQUFPLFFBQVEsaURBQW1EM2xCLEdBQ2hFMG1CLEVBQWExbUIsQ0FBa0MsR0FBS0EsQ0FDNUQsQ0FDSCxDQUlOLENDcERPLE1BQU0sYUFBZ0MsQ0FJekMsYUFBYSxDQUhid2xCLEVBQUEsYUFDQUEsRUFBQSxvQkFDQUEsRUFBQSxjQUVJLEtBQUssS0FBSyxTQUNWLEtBQUssWUFBWSxHQUNqQixLQUFLLFNBQVMsRUFDZCxLQUFLLE1BQU0sQ0FDUCxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQ2QsT0FBTyxHQUNQLE9BQU8sR0FDUCxPQUFPLEdBQ1AsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFBLEVBRVQsV0FBQSxPQUFPLFFBQVEsS0FBSyxPQUMvQixLQUFLLFNBQVMsQ0FDbEIsQ0FRQSxNQUFNLFFBQVFDLEVBQXVCclUsRUFBVXRYLEVBQXlDLENBQ3BGLElBQUl5SSxFQUFPLENBQ1AsUUFBUSxHQUNSLE9BQU8sRUFBQSxFQUVSLEdBQUEsQ0FFQyxHQURBLEtBQUssWUFBWWtqQixFQUFXLFlBQ3hCLEVBQUUsVUFBV0EsRUFBVyxjQUFnQixFQUFFLFdBQVlBLEVBQVcsYUFDMUQsT0FBQWxqQixFQUVYLEtBQUssTUFBUWtqQixFQUFXLFlBQ3hCLE1BQU1DLEVBQVN0VSxFQUFNLE9BQ2Z1VixFQUFTLE1BQU0sS0FBSyxhQUFhLEtBQUssS0FBSyxFQUNqRCxPQUFBakIsRUFBTyxLQUFLLE1BQU0sTUFBTSxJQUFJLEVBQUUsTUFBTWlCLEVBRWpDLEtBQUssTUFBTSxTQUFXLEtBQUssTUFBTSxRQUFRLE9BQU8sS0FDL0M3c0IsRUFBUSxVQUFVLEtBQUssTUFBTSxRQUFRLElBQUksRUFBRTZzQixHQUV2Q3BrQixFQUFBLENBQ04sUUFBUSxHQUNSLE9BQU8sRUFBQSxFQUVGQSxRQUNKMEosRUFBTSxDQUNELE9BQUFuUyxFQUFBLE9BQU8sWUFBWW1TLEVBQU13WixDQUFVLEVBQ3BDLENBQ0gsUUFBUSxHQUNSLE9BQU8sRUFBQSxDQUVmLENBQ0osQ0FFQSxhQUFhbUIsRUFBdUIsQ0FDaEMsR0FBR0EsSUFBVyxPQUFrQixNQUFBLEdBQ2hDLE1BQU1DLEVBQVEsaUJBQ2QsT0FBT0QsRUFBUyxRQUFRQyxFQUFNLENBQUM3bUIsRUFBTTZCLElBQzFCLEtBQUssU0FBUzdCLEVBQU02QixDQUFJLENBQ2xDLENBQ0wsQ0FFQSxTQUFTLE1BQWEsS0FBbUIsQ0FDckMsZUFBUSxJQUFJLEtBQUssRUFFVixLQUFLLElBQUksQ0FDcEIsQ0FFQSxPQUFPTyxFQUFzQixDQUNuQixNQUFBMGtCLE1BQVEsS0FDUCxPQUFBLFVBQVUsV0FBV0EsRUFBSzFrQixDQUFPLENBQzVDLENBRUEsTUFBTSxhQUFhdVEsRUFBMEIsQ0FDekMsSUFBSW9VLEVBQWUsR0FDZnJPLEVBQWMsR0FDZEMsRUFBYyxHQUNkcU8sRUFBRyxFQUNKLEdBQUEsQ0FDTUEsRUFBQSxNQUFNLEtBQUssZ0JBQ2IvYSxFQUFNLENBQ1QsUUFBUSxJQUFJQSxDQUFLLENBQ3JCLENBQ0EsT0FBRzBHLEVBQU0sU0FBUyxRQUFhQSxFQUFNLFNBQVMsR0FDMUNvVSxFQUFPLFVBQVUsYUFBYUMsRUFBSXJVLEVBQU0sTUFBTSxFQUV2Q29VLEVBQUFDLEVBQUcsU0FBUyxFQUFFLEVBR3RCclUsRUFBTSxTQUFTLFFBQWFBLEVBQU0sU0FBUyxLQUNuQytGLEVBQUEsS0FBSyxhQUFhL0YsRUFBTSxNQUFNLEdBR3RDQSxFQUFNLFNBQVMsUUFBYUEsRUFBTSxTQUFTLEtBQ25DZ0csRUFBQSxLQUFLLGFBQWFoRyxFQUFNLE1BQU0sR0FFbEMsR0FBRytGLENBQU0sR0FBR3FPLENBQU0sR0FBR3BPLENBQU0sRUFDdEMsQ0FFQSxNQUFNLFNBQXlCLENBQzNCLElBQUlzTyxFQUFNLEVBRVYsT0FBTyxNQUFNLElBQUksUUFBUSxRQUFnQixDQUFDamQsRUFBUUMsSUFBUyxDQUN2RCxNQUFNaWQsRUFBUyxRQUFRLElBQUksSUFBSSxnQkFBZ0IsRUFBSSxFQUM3Q3RELEVBQU8sQ0FDVCxJQUFJLFFBQVEsSUFBSSxNQUFNLEVBQ3RCLE9BQU8sQ0FBQyxLQUFLLEVBQ2IsTUFBTSxTQUFBLEVBRUgsT0FBQSxRQUFRLElBQUlzRCxFQUFPLE1BQU10RCxDQUFNLEVBQUUsS0FBTXVELEdBQU8sQ0FDOUNBLEVBQUssUUFBUSxDQUFDLElBQUksT0FDVEYsRUFBQSxTQUFTRSxFQUFLLFFBQVEsQ0FBQyxFQUFFLElBQUksTUFBTSxFQUFFLEVBQUUsR0FFbkRuZCxFQUFRaWQsQ0FBSyxDQUFBLENBQ2hCLEVBQUUsTUFBT2hiLEdBQVEsQ0FDZGhDLEVBQU9nQyxDQUFLLENBQUEsQ0FDZixDQUFBLENBQ0osQ0FDTCxDQUVBLFVBQWlCLENBQ0EsYUFBQSxLQUFLLElBQUksRUFBRSxJQUM1QixDQUVKLENBQ0EsSUFBSSxjQ3hHRyxNQUFNLFNBQTJCLENBZXRDLFlBQVltYixFQUF5QmhrQixFQUFzQixDQWQzRG9pQixFQUFBLGNBQ0FBLEVBQUEsYUFDQUEsRUFBQSxpQkFDQUEsRUFBQSxlQUNBQSxFQUFBLHdCQVdFLEtBQUssTUFBTSxFQUNOLEtBQUEsS0FBT3BpQixHQUFRLEtBQUssT0FBZSxhQUN4QyxLQUFLLGdCQUFrQmdrQixFQUN2QixLQUFLLE9BQU9oa0IsRUFDWixLQUFLLFNBQVMsRUFDaEIsQ0FmQSxJQUFJLE9BQWMsQ0FDaEIsT0FBTyxLQUFLLGVBQ2QsQ0FDQSxJQUFJLFFBQWUsQ0FDVixPQUFBLEtBQUssT0FBTyxPQUFjLE9BQU8sU0FDMUMsQ0FDQSxJQUFJLFVBQWtCLENBQ2IsT0FBQSxLQUFLLFNBQVMsT0FBTyxDQUM5QixDQVNBLE9BQU8sU0FBU2lrQixFQUFXamtCLEVBQXVCLEtBQWlCLENBQ2pFLE1BQU1oSyxFQUFPLElBQUksVUFBVWl1QixFQUFLLGdCQUFpQmprQixDQUFNLEVBQ3ZELE9BQUFoSyxFQUFLLE1BQU1pdUIsRUFBSyxNQUNoQmp1QixFQUFLLFNBQVdpdUIsRUFBSyxTQUFTLElBQUtDLEdBQzFCQSxFQUFVLE9BQVMsYUFDdEIsVUFBVSxTQUFTQSxFQUFXbHVCLENBQUksRUFDbEMsY0FBYyxTQUFTa3VCLEVBQVdsdUIsQ0FBSSxDQUMzQyxFQUNNQSxDQUNULENBRUYsQ0FHTyxNQUFNLGFBQStCLENBYzFDLFlBQVkwUCxFQUFhekcsRUFBb0J0RyxFQUFZcUgsRUFBbUIsQ0FiNUVvaUIsRUFBQSxjQUNBQSxFQUFBLGFBQ0FBLEVBQUEsZUFJQUEsRUFBQSxlQUNBQSxFQUFBLGlCQUNBQSxFQUFBLGNBTUUsS0FBSyxNQUFNLEVBQ1gsS0FBSyxLQUFPLFlBQ1osS0FBSyxPQUFTMWMsRUFDZCxLQUFLLFNBQVd6RyxFQUNoQixLQUFLLE1BQVF0RyxFQUNiLEtBQUssT0FBT3FILENBQ2QsQ0FqQkEsSUFBSSxpQkFBa0MsQ0FDcEMsT0FBTyxLQUFLLE9BQU8sZUFDckIsQ0FJQSxJQUFJLFFBQWUsQ0FDVixNQUFBLFNBQ1QsQ0FXQSxPQUFPLFNBQVNpa0IsRUFBV2prQixFQUFrQyxDQUMzRCxNQUFNaEssRUFBTSxJQUFJLGNBQ2RpdUIsRUFBSyxPQUNMQSxFQUFLLFNBQ0xBLEVBQUssTUFDTGprQixDQUFBLEVBRUYsT0FBQWhLLEVBQUssTUFBTWl1QixFQUFLLE1BQ1RqdUIsQ0FDVCxDQUNGLENBS08sTUFBTSxhQUFjLENBSXpCLGFBQWMsQ0FIZG9zQixFQUFBLGFBQ0FBLEVBQUEsaUJBR0UsS0FBSyxTQUFTLEVBQ2QsS0FBSyxLQUFPLElBQUksVUFBVSxNQUFxQixJQUFJLENBQ3JELENBT0EsUUFBUXBpQixFQUFtQmhLLEVBQW1CLENBQ3ZDLEtBQUEsV0FDTEEsRUFBSyxNQUFNLEtBQUssU0FDVGdLLEVBQUEsU0FBUyxLQUFLaEssQ0FBSSxDQUMzQixDQU1BLFdBQVdBLEVBQW1CLENBQ3hCLEdBQUFBLEVBQUssU0FBVyxLQUNaLE1BQUEsSUFBSSxNQUFNLGVBQWUsRUFDMUIsQ0FDTCxNQUFNZ0ssRUFBU2hLLEVBQUssT0FDZHNRLEVBQVF0RyxFQUFPLFNBQVMsUUFBUWhLLENBQUksRUFDdENzUSxFQUFRLElBQ0h0RyxFQUFBLFNBQVMsT0FBT3NHLEVBQU8sQ0FBQyxDQUVuQyxDQUNGLENBT0EsWUFBWUEsRUFBNkIsQ0FDdkMsT0FBTyxLQUFLLGFBQWEsS0FBSyxLQUFLQSxDQUFLLENBQzFDLENBUUEsYUFBYXRHLEVBQW1Cc0csRUFBa0MsQ0FDNUQsR0FBQXRHLEVBQU8sUUFBVXNHLEVBQ1osT0FBQXRHLEVBRUUsVUFBQWhLLEtBQVFnSyxFQUFPLFNBQVUsQ0FDOUIsR0FBQWhLLEVBQUssUUFBVXNRLEVBQ1YsT0FBQXRRLEVBRUwsR0FBQUEsRUFBSyxPQUFTLFlBQW9CLENBQ3BDLE1BQU1tdUIsRUFBWSxLQUFLLGFBQWFudUIsRUFBbUJzUSxDQUFLLEVBQzVELEdBQUk2ZCxFQUNLLE9BQUFBLENBRVgsQ0FDRixDQUVGLENBT0EsWUFBWW51QixFQUFrQixDQUM1QixJQUFJb3VCLEVBQWdCcHVCLEVBQUssTUFDdEIsT0FBQUEsRUFBSyxPQUFPLGFBQ0tBLEVBQ1IsU0FBUyxRQUFTcXVCLEdBQVEsQ0FDMUIsTUFBQUMsRUFBVyxLQUFLLFlBQVlELENBQUssRUFDcENDLEVBQVNGLElBQ0RBLEVBQUFFLEVBQ1gsQ0FDSCxFQUVJRixDQUNYLENBT0UscUJBQXFCcHVCLEVBQVcsQ0FDMUIsR0FBQUEsRUFBSyxPQUFTLFlBQW9CLENBQ3BDLElBQUl1dUIsRUFBa0IsSUFDdEIsTUFBTUMsRUFBWXh1QixFQUNsQixRQUFTLEVBQUksRUFBRyxFQUFJd3VCLEVBQVUsU0FBUyxPQUFRLElBQUssQ0FDbEQsTUFBTUMsRUFBdUIsS0FBSyxxQkFBcUJELEVBQVUsU0FBUyxDQUFDLENBQUMsRUFDeEVDLElBQXlCLEtBQ1JGLEdBQUFFLEVBQ2YsRUFBSUQsRUFBVSxTQUFTLE9BQVMsSUFDZkQsR0FBQSxJQUFJQyxFQUFVLGVBQWUsS0FHdEQsQ0FDbUIsT0FBQUQsR0FBQSxJQUNaQSxDQUFBLEtBQ0YsQ0FDTCxNQUFNRyxFQUFTMXVCLEVBQ1gsR0FBQTB1QixFQUFTLFFBQVVBLEVBQVMsU0FBVyxDQUN6QyxJQUFJL3JCLEVBQU0rckIsRUFBUyxNQUNuQixPQUFHL3JCLEdBQVMsT0FBT0EsR0FBUyxVQUFhLFVBQVdBLElBQ2hEQSxFQUFPK3JCLEVBQVMsTUFBTSxPQUVuQixHQUFHQSxFQUFTLE9BQU8sSUFBSSxJQUFJQSxFQUFTLFFBQVEsS0FBSy9yQixDQUFLLEdBQUEsS0FFdEQsT0FBQSxFQUVYLENBQ0YsQ0FJQSxjQUFjcUgsRUFBaUMsQ0FDN0MsTUFBTTJrQixFQUEyQixDQUFBLEVBQzFCLE9BQUEza0IsRUFBQSxTQUFTLFFBQVNoSyxHQUFPLENBQzNCQSxFQUFLLE9BQU8sWUFDYjJ1QixFQUFXLEtBQUszdUIsQ0FBcUIsRUFFckMydUIsRUFBVyxLQUFLLEdBQUcsS0FBSyxjQUFjM3VCLENBQWlCLENBQUMsQ0FDMUQsQ0FDRCxFQUNNMnVCLENBQ1QsQ0FPQSxVQUFVM2tCLEVBQTBCLENBQ2xDLE1BQU1uRCxFQUFnQixDQUFBLEVBQ2YsT0FBQUEsRUFBQSxLQUFLbUQsRUFBTyxLQUFLLEVBQ2pCQSxFQUFBLFNBQVMsUUFBU2hLLEdBQU8sQ0FDM0JBLEVBQUssT0FBTyxhQUNiNkcsRUFBTyxLQUFLLEdBQUcsS0FBSyxVQUFVN0csQ0FBaUIsQ0FBQyxDQUNsRCxDQUNELEVBQ002RyxDQUNULENBT0EsU0FBUytuQixFQUEyQixDQUM1QixNQUFBWCxFQUFPLEtBQUssTUFBTVcsQ0FBVSxFQUM3QixZQUFBLEtBQU8sVUFBVSxTQUFTWCxDQUFJLEVBQ25DLEtBQUssU0FBUyxLQUFLLFlBQVksS0FBSyxJQUFJLEVBQ2pDLEtBQUssSUFDZCxDQUtBLFFBQWUsQ0FDYixPQUFPLEtBQUssVUFBVSxLQUFLLEtBQU0sQ0FBQzNtQixFQUFLM0UsSUFDakMyRSxJQUFRLFNBQ0gzRSxFQUFRQSxFQUFNLEtBQU8sS0FFdkJBLENBQ1IsQ0FDSCxDQVFBLFNBQVMzQyxFQUFhVSxFQUF1QixDQUN2QyxHQUFBVixFQUFLLE9BQVMsWUFDVCxPQUFBLEtBQUssa0JBQWtCQSxFQUF1QlUsQ0FBTyxLQUNuRFYsRUFBSyxPQUFTLGNBQXVCQSxFQUFLLE9BQVMsT0FBZSxDQUMzRSxNQUFNd3VCLEVBQVl4dUIsRUFDWmlDLEVBQVV1c0IsRUFBVSxTQUFTLE9BQWEsS0FBSyxTQUFTSCxFQUFPM3RCLENBQU8sQ0FBQyxFQUV6RSxHQUFBOHRCLEVBQVUsa0JBQW9CLE1BQ3pCLE9BQUF2c0IsRUFBUSxNQUFNa0gsR0FBVUEsQ0FBTSxFQUN2QyxHQUFXcWxCLEVBQVUsa0JBQW9CLEtBQ2hDLE9BQUF2c0IsRUFBUSxLQUFLa0gsR0FBVUEsQ0FBTSxFQUU5QixNQUFBLElBQUksTUFBTSw4QkFBOEIsQ0FDaEQsS0FFTSxPQUFBLElBQUksTUFBTSx1QkFBdUIsQ0FFM0MsQ0FHQSxhQUFheEcsRUFBaUIsQ0FDNUIsT0FBSUEsR0FBUyxPQUFPQSxHQUFVLFVBQVksU0FBVUEsRUFDM0NBLEVBQU0sS0FFTkEsQ0FFWCxDQU9BLGlCQUFpQkEsRUFBYyxDQUN6QixPQUFBLE1BQU0sUUFBUUEsQ0FBSyxFQUNkQSxFQUFNLElBQUk2TixHQUFLLEtBQUssYUFBYUEsQ0FBQyxDQUFDLEVBRW5DLEtBQUssYUFBYTdOLENBQUssQ0FFbEMsQ0FPQSxvQkFBcUJrc0IsRUFBMEJDLEVBQWEsQ0FDMUQsT0FBT0EsRUFBSyxNQUFNLEdBQUcsRUFBRSxPQUFPLENBQUNDLEVBQUdDLEtBQU9ELEdBQUssQ0FBQSxHQUFJQyxDQUFDLEVBQUdILENBQUksQ0FDNUQsQ0FRQSxlQUFlbmYsRUFBV2hQLEVBQWlCLENBQ3pDLEdBQUcsR0FBQ2dQLEdBQVUsT0FBT0EsR0FBUyxVQUFZLEVBQUUsZUFBZ0JBLEtBR3pELEdBQUFBLEVBQU8sYUFBYSxRQUFRLENBQzdCLE1BQU11ZixFQUFhdnVCLEVBQVEsT0FBT2dQLEVBQU8sSUFBSSxFQUM3QyxPQUFHdWYsRUFBVyxPQUFPLFVBQVlBLEVBQVcsUUFBUSxPQUMzQyxPQUFPQSxFQUFXLEtBQUssRUFFdkIsS0FBSyxpQkFBaUJBLEVBQVcsS0FBSyxDQUMvQyxTQUNPdmYsRUFBTyxhQUFhLFdBQVcsQ0FDdEMsTUFBTXdmLEVBQVcsS0FBSyxvQkFBb0J4dUIsRUFBUSxVQUFVZ1AsRUFBTyxLQUFLLElBQUksRUFDckUsT0FBQSxLQUFLLGlCQUFpQndmLENBQVEsQ0FBQSxTQUM5QnhmLEVBQU8sYUFBYSxPQUMzQixPQUFPQSxFQUFPLFdBRWxCLENBT0Esa0JBQWtCQSxFQUFXaFAsRUFBaUIsQ0FDNUMsR0FBRyxDQUFDZ1AsR0FBVSxPQUFPQSxHQUFTLFNBQ3JCLE9BQUFBLEVBRVQsR0FBRyxlQUFnQkEsRUFDVixPQUFBLEtBQUssZUFBZUEsRUFBT2hQLENBQU8sRUFFM0MsR0FBRyxlQUFnQmdQLEVBQ2pCLE9BQU9BLEVBQU8sV0FFaEIsR0FBRyxVQUFXQSxFQUNaLE9BQU9BLEVBQU8sTUFFaEIsR0FBRyxVQUFXQSxFQUNaLE9BQU9BLEVBQU8sTUFFaEIsR0FBRyxTQUFVQSxFQUNYLE9BQU9BLEVBQU8sSUFFbEIsQ0FRQSxrQkFBa0J5ZixFQUEwQnp1QixFQUE0QixDQUN0RSxLQUFNLENBQUUsT0FBQWdQLEVBQVEsU0FBQXpHLEVBQVUsTUFBQXRHLENBQUEsRUFBVXdzQixFQUM5QkMsRUFBZSxLQUFLLGVBQWUxZixFQUFPaFAsQ0FBTyxFQUNqRDJ1QixFQUFrQixLQUFLLGtCQUFrQjFzQixFQUFNakMsQ0FBTyxFQUN0RDR1QixFQUFnQixNQUFNLFFBQVFGLENBQVksRUFDMUNHLEVBQWUsTUFBTSxRQUFRRixDQUFlLEVBRWxELEdBQUlDLEdBQWlCRixFQUFhLE9BQVMsR0FBS0csR0FBZ0JGLEVBQWdCLE9BQU8sRUFDckYsT0FBTyxLQUFLLGFBQWFwbUIsRUFBU21tQixFQUFhQyxDQUFlLEVBRWhFLE1BQU1HLEVBQWNGLEVBQWNGLEVBQWEsQ0FBQyxFQUFFQSxFQUM1Q0ssRUFBaUJGLEVBQWFGLEVBQWdCLENBQUMsRUFBRUEsRUFDdkQsT0FBUXBtQixFQUFVLENBQ2hCLElBQUssSUFDTCxJQUFLLEtBQ0wsSUFBSyxJQUNMLElBQUssS0FDTCxJQUFLLElBQ0wsSUFBSyxLQUNILE9BQU8sS0FBSyxRQUFRQSxFQUFTdW1CLEVBQWFDLENBQWMsRUFDMUQsSUFBSyxXQUNJLE9BQUEsS0FBSyxTQUFTRCxFQUFZQyxDQUFjLEVBQ2pELElBQUssZUFDSCxNQUFPLENBQUMsS0FBSyxTQUFTRCxFQUFZQyxDQUFjLEVBQ2xELElBQUssYUFDSSxPQUFBLEtBQUssVUFBVUQsRUFBWUMsQ0FBYyxFQUNsRCxJQUFLLGlCQUNILE1BQU8sQ0FBQyxLQUFLLFVBQVVELEVBQVlDLENBQWMsRUFDbkQsSUFBSyxXQUNJLE9BQUEsS0FBSyxTQUFTRCxFQUFZQyxDQUFjLEVBQ2pELElBQUssZUFDSSxPQUFBLEtBQUssU0FBU0QsRUFBWUMsQ0FBYyxFQUNqRCxRQUNRLE1BQUEsSUFBSSxNQUFNLHNCQUFzQixDQUMxQyxDQUNGLENBU0EsUUFBUXhtQixFQUFvQnVtQixFQUFrQjdzQixFQUFxQixDQVFqRSxJQU44QjZzQixHQUFjLE1BQU1BLElBQWMsTUFDdEM3c0IsR0FBUSxNQUFNQSxJQUFRLE1BQ2hDNnNCLEVBQUEsR0FDTjdzQixFQUFBLElBR042c0IsYUFBdUIsS0FBTSxDQUN6QixNQUFBRSxFQUFZLElBQUksS0FBSy9zQixDQUFLLEVBQzNCLE1BQU0rc0IsRUFBVSxRQUFTLENBQUEsSUFDcEIvc0IsRUFBQStzQixFQUNWLFNBR08sT0FBT0YsR0FBZ0IsU0FBVSxDQUNsQyxNQUFBRyxFQUFjLE9BQU9odEIsQ0FBSyxFQUMzQixNQUFNZ3RCLENBQVcsSUFDWmh0QixFQUFBZ3RCLEVBQ1YsTUFFTyxPQUFPSCxHQUFnQixXQUM5QjdzQixFQUFRLE9BQU9BLENBQUssR0FFdEIsT0FBUXNHLEVBQVUsQ0FDaEIsSUFBSyxJQUNILE9BQU91bUIsSUFBZ0I3c0IsRUFDekIsSUFBSyxLQUNILE9BQU82c0IsSUFBZ0I3c0IsRUFDekIsSUFBSyxJQUNILE9BQU82c0IsRUFBYzdzQixFQUN2QixJQUFLLEtBQ0gsT0FBTzZzQixHQUFlN3NCLEVBQ3hCLElBQUssSUFDSCxPQUFPNnNCLEVBQWM3c0IsRUFDdkIsSUFBSyxLQUNILE9BQU82c0IsR0FBZTdzQixFQUN4QixRQUNRLE1BQUEsSUFBSSxNQUFNLHFDQUFxQyxDQUN6RCxDQUNGLENBY0QsYUFBYXNHLEVBQW9CdW1CLEVBQWtCN3NCLEVBQXFCLENBQ2pFLE1BQUEyc0IsRUFBZ0IsTUFBTSxRQUFRRSxDQUFXLEVBQ3pDRCxFQUFlLE1BQU0sUUFBUTVzQixDQUFLLEVBQ2xDaXRCLEVBQWFoeEIsR0FBZUEsRUFBSSxNQUFBLEVBQVEsT0FDaEM0d0IsRUFBQUYsRUFBY0UsRUFBWSxDQUFDQSxDQUFXLEVBQzdDN3NCLEVBQUE0c0IsRUFBYTVzQixFQUFNLENBQUNBLENBQUssRUFDMUIsTUFBQWt0QixFQUFZRCxFQUFVSixDQUFXLEVBQ2pDTSxFQUFXRixFQUFVanRCLENBQUssRUFDaEMsT0FBUXNHLEVBQVUsQ0FDaEIsSUFBSyxJQUNILE9BQVE0bUIsRUFBWSxTQUFTQyxFQUFXLFFBQVVELEVBQVksTUFBTSxDQUFDcmYsRUFBR3RRLElBQU1zUSxJQUFNc2YsRUFBVzV2QixDQUFDLENBQUMsRUFDbkcsSUFBSyxLQUNILE9BQU8ydkIsRUFBWSxTQUFTQyxFQUFXLFFBQVUsQ0FBQ0QsRUFBWSxNQUFNLENBQUNyZixFQUFHdFEsSUFBTXNRLElBQU1zZixFQUFXNXZCLENBQUMsQ0FBQyxFQUNuRyxJQUFLLFdBQ0ksT0FBQTR2QixFQUFXLE9BQU8sR0FBS0EsRUFBVyxNQUFXdGYsR0FBQXFmLEVBQVksU0FBU3JmLENBQUMsQ0FBQyxFQUM3RSxJQUFLLGVBQ0ksT0FBQXNmLEVBQVcsU0FBUyxHQUFLLENBQUNBLEVBQVcsTUFBV3RmLEdBQUFxZixFQUFZLFNBQVNyZixDQUFDLENBQUMsRUFDaEYsUUFDUSxNQUFBLEVBQ1YsQ0FDRixDQVFFLFNBQVNnZixFQUFrQjdzQixFQUFxQixDQUM5QyxPQUFJLE9BQU82c0IsR0FBZ0IsVUFBWSxPQUFPN3NCLEdBQVUsU0FDL0M2c0IsRUFBWSxTQUFTN3NCLENBQUssRUFFNUIsRUFDVCxDQU9BLFVBQVU2c0IsRUFBa0I3c0IsRUFBcUIsQ0FDL0MsT0FBSSxPQUFPNnNCLEdBQWdCLFVBQVksT0FBTzdzQixHQUFVLFNBQy9DNnNCLEVBQVksV0FBVzdzQixDQUFLLEVBRTlCLEVBQ1QsQ0FPQSxTQUFTNnNCLEVBQWtCN3NCLEVBQXFCLENBQzlDLE9BQUksT0FBTzZzQixHQUFnQixVQUFZLE9BQU83c0IsR0FBVSxTQUMvQzZzQixFQUFZLFNBQVM3c0IsQ0FBSyxFQUU1QixFQUNULENBQ0YsQ0NuaUJPLE1BQU0sZ0JBQW1DLENBSTVDLGFBQWEsQ0FIYnlwQixFQUFBLGFBQ0FBLEVBQUEsb0JBQ0FBLEVBQUEsY0FFSSxLQUFLLEtBQUssU0FDVixLQUFLLFlBQVksR0FDbEIsS0FBSyxNQUFNLENBQ04sTUFBTSxDQUFDLEtBQUssRUFBRSxFQUNkLEtBQUssR0FDTCxVQUFVLEVBQUEsRUFHZCxLQUFLLFNBQVMsQ0FDbEIsQ0FPQSxNQUFNLFFBQVFDLEVBQXVCclUsRUFBVXRYLEVBQXlDLENBQ3BGLElBQUl5SSxFQUFPLENBQ1AsUUFBUSxHQUNSLE9BQU8sRUFBQSxFQUVSLEdBQUEsQ0FHQyxPQURBLEtBQUssWUFBWWtqQixFQUFXLFlBQ3hCLEVBQUUsVUFBV0EsRUFBVyxjQUFnQixFQUFFLFNBQVVBLEVBQVcsZUFHbkUsS0FBSyxNQUFRQSxFQUFXLFlBRUEsS0FBSyxtQkFBbUIzckIsQ0FBTyxJQUVoRCxLQUFLLE1BQU0sT0FBTyxLQUNqQixRQUFRLElBQUksT0FBTyxjQUFjLEtBQUssTUFBTSxNQUFNLEtBQUssRUFBSSxFQUNyRCxLQUFLLE1BQU0sT0FBTyxPQUN4QixRQUFRLElBQUksT0FBTyxjQUFjLEtBQUssTUFBTSxNQUFNLEtBQUssRUFBSyxHQUc1RHlJLEVBQUEsQ0FDUixRQUFRLEdBQ1IsT0FBTyxFQUFBLEdBRUFBLFFBQ0owSixFQUFNLENBQ0QsT0FBQW5TLEVBQUEsT0FBTyxZQUFZbVMsRUFBTXdaLENBQVUsRUFDM0NsakIsRUFBTyxRQUFRLEdBQ1JBLENBQ1gsQ0FFSixDQU1BLG1CQUFtQnpJLEVBQW9CLENBQ25DLE1BQU1xdkIsRUFBTSxLQUFLLGFBQWEsS0FBSyxNQUFNLFNBQVMsRUFDbEQsT0FBSUEsRUFJR0EsRUFBSyxTQUFTQSxFQUFLLEtBQUtydkIsQ0FBTyxFQUYzQixFQUdmLENBTUEsYUFBYXl1QixFQUFvQyxDQUMxQyxHQUFBLENBQ08sTUFBQVksRUFBTyxJQUFJLGNBRWpCLE9BREFBLEVBQUssU0FBU1osQ0FBUyxFQUNwQlksRUFBSyxjQUFjQSxFQUFLLElBQUksRUFBRSxPQUFPLEVBQzdCQSxFQUVBLFVBRUYsQ0FDRixPQUFBLElBQ1gsQ0FDSixDQUVBLFVBQWlCLENBQ0EsYUFBQSxLQUFLLElBQUksRUFBRSxJQUM1QixDQUNKLENBQ0EsSUFBSSxpQkM3RkcsTUFBTSxlQUFtQyxDQUk1QyxhQUFjLENBSGQzRCxFQUFBLGFBQ0FBLEVBQUEsb0JBQ0FBLEVBQUEsY0FFSSxLQUFLLEtBQU8sUUFDWixLQUFLLFlBQWMsR0FDbkIsS0FBSyxNQUFRLENBQ1QsUUFBUyxHQUNULFVBQVcsRUFBQSxFQUVmLEtBQUssU0FBUyxDQUNsQixDQVFBLE1BQU0sUUFBUUMsRUFBeUJyVSxFQUFZdFgsRUFBMkMsQ0FDMUYsSUFBSXlJLEVBQVMsQ0FDVCxRQUFTLEdBQ1QsT0FBUSxFQUFBLEVBRVIsR0FBQSxDQUVBLEdBREEsS0FBSyxZQUFja2pCLEVBQVcsWUFDMUIsRUFBRSxZQUFhQSxFQUFXLGNBQWdCLEVBQUUsY0FBZUEsRUFBVyxhQUMvRCxPQUFBbGpCLEVBRVgsS0FBSyxNQUFRa2pCLEVBQVcsWUFDbEIsTUFBQTJELEVBQWtCLEtBQUssbUJBQW1CdHZCLENBQU8sRUFDL0MsZUFBQSxJQUFJLFFBQVFzdkIsQ0FBZSxFQUMvQkEsSUFDTWhZLEVBQUEsTUFBUSxLQUFLLE1BQU0sUUFDekI3TyxFQUFPLFFBQVEsSUFFWkEsUUFDRjBKLEVBQU8sQ0FDSixPQUFBblMsRUFBQSxPQUFPLFlBQVltUyxFQUFNd1osQ0FBVSxFQUMzQ2xqQixFQUFPLFFBQVUsR0FDVkEsQ0FDWCxDQUVKLENBTUEsbUJBQW1CekksRUFBdUIsQ0FDdEMsTUFBTXF2QixFQUFPLEtBQUssYUFBYSxLQUFLLE1BQU0sU0FBUyxFQUNuRCxPQUFLQSxFQUlFQSxFQUFLLFNBQVNBLEVBQUssS0FBTXJ2QixDQUFPLEVBRjVCLEVBR2YsQ0FNQSxhQUFheXVCLEVBQXlDLENBQzlDLEdBQUEsQ0FDTSxNQUFBWSxFQUFPLElBQUksY0FFakIsT0FEQUEsRUFBSyxTQUFTWixDQUFTLEVBQ25CWSxFQUFLLGNBQWNBLEVBQUssSUFBSSxFQUFFLE9BQVMsRUFDaENBLEVBRUEsVUFFQyxDQUNMLE9BQUEsSUFDWCxDQUNKLENBRUEsVUFBaUIsQ0FDQSxhQUFBLEtBQUssSUFBSSxFQUFJLElBQzlCLENBRUosQ0FDQSxJQUFJLG1DQ3RFRyxNQUFNLGVBQW1DLENBSTVDLGFBQWMsQ0FIZDNELEVBQUEsYUFDQUEsRUFBQSxvQkFDQUEsRUFBQSxjQUVJLEtBQUssS0FBTyxTQUNaLEtBQUssWUFBYyxHQUNuQixLQUFLLE1BQVEsQ0FDVCxXQUFZLEdBQ1osU0FBVSxHQUNWLFVBQVUsRUFBQSxFQUVkLEtBQUssU0FBUyxDQUNsQixDQVFBLE1BQU0sUUFBUUMsRUFBeUJyVSxFQUFXdFgsRUFBMEMsQ0FDeEYsSUFBSXlJLEVBQVMsQ0FDVCxRQUFTLEdBQ1QsT0FBUSxFQUFBLEVBRVIsR0FBQSxDQUVBLEdBREEsS0FBSyxZQUFja2pCLEVBQVcsWUFDMUIsRUFBRSxlQUFnQkEsRUFBVyxjQUFnQixFQUFFLGFBQWNBLEVBQVcsYUFDakUsT0FBQWxqQixFQUVYLEtBQUssTUFBUWtqQixFQUFXLFlBRXBCLElBQUE0RCxFQU1KLEdBTEcsS0FBSyxNQUFNLE9BQVMsS0FBSyxNQUFNLE1BQU0sVUFDcENBLEVBQWMsUUFBUSxJQUFJLE9BQU8sZ0JBQWdCLEtBQUssTUFBTSxNQUFNLFNBQVMsRUFFN0RBLEVBQUEsUUFBUSxJQUFJLE9BQU8sMEJBQTBCLEVBRTVELENBQUNBLEVBQW9CLE9BQUE5bUIsRUFFbEIsTUFBQSttQixFQUFRLEVBQUUsZUFBZSxLQUFLLE1BQU0sU0FBUyxnQ0FBZ0MsS0FBSyxNQUFNLFVBQVUsV0FBVyxFQUNoSCxLQUFLLE1BQU0sV0FBVyxXQUNuQixFQUFBRCxDQUFXLEVBQUUsUUFBUUMsQ0FBTSxFQUUzQixFQUFBRCxDQUFXLEVBQUUsT0FBT0MsQ0FBTSxFQUVoQyxNQUFNQyxFQUFpQixHQUFHblksRUFBTSxJQUFJLHNCQUFzQixLQUFLLE1BQU0sU0FBUyxHQUN2RSxPQUFBa1ksRUFBQSxHQUFHLFFBQVEsSUFBSSxDQUNsQixFQUFFLFFBQVEsRUFBRSxRQUFRQyxFQUFlblksQ0FBSyxDQUFBLENBQzNDLEVBQ003TyxRQUNGMEosRUFBTyxDQUNKLE9BQUFuUyxFQUFBLE9BQU8sWUFBWW1TLEVBQU13WixDQUFVLEVBQzNDbGpCLEVBQU8sUUFBVSxHQUNWQSxDQUNYLENBQ0osQ0FHQSxVQUFpQixDQUNBLGFBQUEsS0FBSyxJQUFJLEVBQUksSUFDOUIsQ0FFSixDQUNBLElBQUksZ0JDM0VHLE1BQU0sZUFBa0MsQ0FJM0MsYUFBYSxDQUhiaWpCLEVBQUEsYUFDQUEsRUFBQSxvQkFDQUEsRUFBQSxjQUVJLEtBQUssS0FBSyxNQUNWLEtBQUssWUFBWSxHQUNqQixLQUFLLE1BQU0sQ0FDUCxVQUFVLEdBQ1YsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFBLEVBR3BCLEtBQUssU0FBUyxDQUNsQixDQU9BLE1BQU0sUUFBUUMsRUFBdUJyVSxFQUFVdFgsRUFBeUMsQ0FDcEYsSUFBSXlJLEVBQU8sQ0FDUCxRQUFRLEdBQ1IsT0FBTyxFQUFBLEVBRVIsR0FBQSxDQUdDLEdBREEsS0FBSyxZQUFZa2pCLEVBQVcsWUFDeEIsRUFBRSxjQUFlQSxFQUFXLGNBQWdCLEVBQUUsWUFBYUEsRUFBVyxhQUMvRCxPQUFBbGpCLEVBRVgsS0FBSyxNQUFRa2pCLEVBQVcsWUFFbEIsTUFBQTJELEVBQWtCLEtBQUssbUJBQW1CdHZCLENBQU8sRUFDL0MsZUFBQSxJQUFJLFVBQVVzdkIsQ0FBZSxFQUNsQ0EsRUFDUzdtQixFQUFBLENBQ0osUUFBUSxHQUNSLE9BQU8sSUFBQSxFQUdIQSxFQUFBLENBQ0osUUFBUSxHQUNSLE9BQU8sS0FBQSxFQUdaLEtBQUssTUFBTSxTQUFXLEtBQUssTUFBTSxRQUFRLE9BQU8sS0FDL0N6SSxFQUFRLFVBQVUsS0FBSyxNQUFNLFFBQVEsSUFBSSxFQUFFeUksRUFBTyxRQUUvQ0EsUUFDSjBKLEVBQU0sQ0FDRCxPQUFBblMsRUFBQSxPQUFPLFlBQVltUyxFQUFNd1osQ0FBVSxFQUMzQ2xqQixFQUFPLFFBQVEsR0FDUkEsQ0FDWCxDQUNKLENBTUEsbUJBQW1CekksRUFBb0IsQ0FDbkMsTUFBTXF2QixFQUFNLEtBQUssYUFBYSxLQUFLLE1BQU0sU0FBUyxFQUNsRCxPQUFJQSxFQUlHQSxFQUFLLFNBQVNBLEVBQUssS0FBS3J2QixDQUFPLEVBRjNCLEVBR2YsQ0FNQSxhQUFheXVCLEVBQW9DLENBQzFDLEdBQUEsQ0FDTyxNQUFBWSxFQUFPLElBQUksY0FFakIsT0FEQUEsRUFBSyxTQUFTWixDQUFTLEVBQ3BCWSxFQUFLLGNBQWNBLEVBQUssSUFBSSxFQUFFLE9BQU8sRUFDN0JBLEVBRUEsVUFFRixDQUNGLE9BQUEsSUFDWCxDQUNKLENBRUEsVUFBaUIsQ0FDQSxhQUFBLEtBQUssSUFBSSxFQUFFLElBQzVCLENBRUosQ0FDQSxJQUFJLGdFQzFHSixPQUFPLGVBQWNLLEVBQVUsYUFBYyxDQUFFLE1BQU8sRUFBSSxDQUFFLEVBQzVEQSxFQUE2QixtQkFBQUEsRUFBQSxhQUF1QixPQUNwREEsRUFBdUIsYUFBQSxDQUNuQixpQkFBa0IsVUFBWSxDQUMxQixNQUFNLElBQUksTUFBTSxpQkFBaUIsQ0FDcEMsRUFDRCxnQkFBaUIsVUFBWSxDQUN6QixNQUFNLElBQUksTUFBTSxpQkFBaUIsQ0FDcEMsRUFDRCxlQUFnQixVQUFZLENBQ3hCLE1BQU0sSUFBSSxNQUFNLGlCQUFpQixDQUNwQyxFQUNELDZCQUE4QixVQUFZLENBQ3RDLE1BQU0sSUFBSSxNQUFNLGlCQUFpQixDQUNwQyxFQUNELGFBQWMsVUFBWSxDQUN0QixNQUFNLElBQUksTUFBTSxpQkFBaUIsQ0FDcEMsRUFDRCxtQkFBb0IsVUFBWSxDQUM1QixNQUFNLElBQUksTUFBTSxpQkFBaUIsQ0FDcEMsRUFDRCxhQUFjLFVBQVksQ0FDdEIsTUFBTSxJQUFJLE1BQU0saUJBQWlCLENBQ3BDLEVBQ0QsV0FBWSxVQUFZLENBQ3BCLE1BQU0sSUFBSSxNQUFNLGlCQUFpQixDQUNwQyxDQUNMLEVBQ0EsSUFBSUMsRUFBcUIsU0FBVUMsRUFBTSxDQUNqQ0EsRUFBSyxtQkFDTEYsRUFBUSxhQUFhLGlCQUFtQkUsRUFBSyxrQkFFN0NBLEVBQUssa0JBQ0xGLEVBQVEsYUFBYSxnQkFBa0JFLEVBQUssaUJBRTVDQSxFQUFLLGlCQUNMRixFQUFRLGFBQWEsZUFBaUJFLEVBQUssZ0JBRTNDQSxFQUFLLCtCQUNMRixFQUFRLGFBQWEsNkJBQ2pCRSxFQUFLLDhCQUVUQSxFQUFLLGVBQ0xGLEVBQVEsYUFBYSxhQUFlRSxFQUFLLGNBRXpDQSxFQUFLLHFCQUNMRixFQUFRLGFBQWEsbUJBQXFCRSxFQUFLLG9CQUUvQ0EsRUFBSyxlQUNMRixFQUFRLGFBQWEsYUFBZUUsRUFBSyxjQUV6Q0EsRUFBSyxhQUNMRixFQUFRLGFBQWEsV0FBYUUsRUFBSyxXQUUvQyxFQUNBRixFQUFBLG1CQUE2QkMsK0RDdkR6QkUsWUFBYTl4QixnQkFBUUEsZUFBSyxXQUFlLFVBQVksQ0FDckQsSUFBSSt4QixFQUFnQixTQUFVQyxFQUFHcHRCLEVBQUcsQ0FDaEMsT0FBQW10QixFQUFnQixPQUFPLGdCQUNsQixDQUFFLFVBQVcsQ0FBQSxhQUFnQixPQUFTLFNBQVVDLEVBQUdwdEIsRUFBRyxDQUFFb3RCLEVBQUUsVUFBWXB0QixDQUFFLEdBQ3pFLFNBQVVvdEIsRUFBR3B0QixFQUFHLENBQUUsUUFBUzBjLEtBQUsxYyxFQUFPLE9BQU8sVUFBVSxlQUFlLEtBQUtBLEVBQUcwYyxDQUFDLElBQUcwUSxFQUFFMVEsQ0FBQyxFQUFJMWMsRUFBRTBjLENBQUMsSUFDMUZ5USxFQUFjQyxFQUFHcHRCLENBQUMsQ0FDakMsRUFDSSxPQUFPLFNBQVVvdEIsRUFBR3B0QixFQUFHLENBQ25CLEdBQUksT0FBT0EsR0FBTSxZQUFjQSxJQUFNLEtBQ2pDLE1BQU0sSUFBSSxVQUFVLHVCQUF5QixPQUFPQSxDQUFDLEVBQUksK0JBQStCLEVBQzVGbXRCLEVBQWNDLEVBQUdwdEIsQ0FBQyxFQUNsQixTQUFTcXRCLEdBQUssQ0FBRSxLQUFLLFlBQWNELENBQUksQ0FDdkNBLEVBQUUsVUFBWXB0QixJQUFNLEtBQU8sT0FBTyxPQUFPQSxDQUFDLEdBQUtxdEIsRUFBRyxVQUFZcnRCLEVBQUUsVUFBVyxJQUFJcXRCLEVBQ3ZGLENBQ0EsSUFDQSxPQUFPLGVBQWVDLDJCQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUksQ0FBRSxFQUM1QkEsMkJBQUEseUJBQUcsT0FDbkMsSUFBSSx5QkFBMEMsU0FBVUMsRUFBUSxDQUM1REwsWUFBVU0sRUFBMEJELENBQU0sRUFDMUMsU0FBU0MsRUFBeUJDLEVBQVUsQ0FDeEMsSUFBSUMsRUFBUSxLQUNSQyxFQUFVLHFDQUFxQyxPQUFPRixFQUFVLGNBQWMsRUFDbEYsT0FBQUMsRUFBUUgsRUFBTyxLQUFLLEtBQU1JLENBQU8sR0FBSyxLQUdsQyxNQUFNLG1CQUNOLE1BQU0sa0JBQWtCRCxFQUFPRixDQUF3QixFQUUzREUsRUFBTSxLQUFPLDJCQUNiQSxFQUFNLFNBQVdELEVBR2pCLE9BQU8sZUFBZUMsRUFBT0YsRUFBeUIsU0FBUyxFQUN4REUsQ0FDVixDQUNELE9BQU9GLENBQ1gsRUFBRSxLQUFLLEVBQ3lCRiwyQkFBQSx5QkFBRyx5QkNoQ25DLFNBQVNNLFFBQU8sQ0FDZCxLQUFLLE9BQVMsT0FBTyxPQUFPLElBQUksRUFDaEMsS0FBSyxZQUFjLE9BQU8sT0FBTyxJQUFJLEVBRXJDLFFBQVMvd0IsRUFBSSxFQUFHQSxFQUFJLFVBQVUsT0FBUUEsSUFDcEMsS0FBSyxPQUFPLFVBQVVBLENBQUMsQ0FBQyxFQUcxQixLQUFLLE9BQVMsS0FBSyxPQUFPLEtBQUssSUFBSSxFQUNuQyxLQUFLLFFBQVUsS0FBSyxRQUFRLEtBQUssSUFBSSxFQUNyQyxLQUFLLGFBQWUsS0FBSyxhQUFhLEtBQUssSUFBSSxDQUNqRCxDQXFCQSt3QixPQUFLLFVBQVUsT0FBUyxTQUFTQyxFQUFTQyxFQUFPLENBQy9DLFFBQVN0dUIsS0FBUXF1QixFQUFTLENBQ3hCLElBQUlFLEVBQWFGLEVBQVFydUIsQ0FBSSxFQUFFLElBQUksU0FBU3VWLEVBQUcsQ0FDN0MsT0FBT0EsRUFBRSxhQUNmLENBQUssRUFDRHZWLEVBQU9BLEVBQUssY0FFWixRQUFTLEVBQUksRUFBRyxFQUFJdXVCLEVBQVcsT0FBUSxJQUFLLENBQzFDLE1BQU1DLEVBQU1ELEVBQVcsQ0FBQyxFQUl4QixHQUFJQyxFQUFJLENBQUMsSUFBTSxJQUlmLElBQUksQ0FBQ0YsR0FBVUUsS0FBTyxLQUFLLE9BQ3pCLE1BQU0sSUFBSSxNQUNSLGtDQUFvQ0EsRUFDcEMscUJBQXVCLEtBQUssT0FBT0EsQ0FBRyxFQUFJLFNBQVd4dUIsRUFDckQseURBQTJEd3VCLEVBQzNELHNDQUF3Q3h1QixFQUFPLElBQ3pELEVBR00sS0FBSyxPQUFPd3VCLENBQUcsRUFBSXh1QixFQUNwQixDQUdELEdBQUlzdUIsR0FBUyxDQUFDLEtBQUssWUFBWXR1QixDQUFJLEVBQUcsQ0FDcEMsTUFBTXd1QixFQUFNRCxFQUFXLENBQUMsRUFDeEIsS0FBSyxZQUFZdnVCLENBQUksRUFBS3d1QixFQUFJLENBQUMsSUFBTSxJQUFPQSxFQUFNQSxFQUFJLE9BQU8sQ0FBQyxDQUMvRCxDQUNGLENBQ0gsRUFLQUosT0FBSyxVQUFVLFFBQVUsU0FBU25DLEVBQU0sQ0FDdENBLEVBQU8sT0FBT0EsQ0FBSSxFQUNsQixJQUFJeGxCLEVBQU93bEIsRUFBSyxRQUFRLFdBQVksRUFBRSxFQUFFLGNBQ3BDdUMsRUFBTS9uQixFQUFLLFFBQVEsUUFBUyxFQUFFLEVBQUUsY0FFaENnb0IsRUFBVWhvQixFQUFLLE9BQVN3bEIsRUFBSyxPQUdqQyxPQUZhdUMsRUFBSSxPQUFTL25CLEVBQUssT0FBUyxHQUV0QixDQUFDZ29CLElBQVksS0FBSyxPQUFPRCxDQUFHLEdBQUssSUFDckQsRUFLQUosT0FBSyxVQUFVLGFBQWUsU0FBU3B1QixFQUFNLENBQzNDLE9BQUFBLEVBQU8sZ0JBQWdCLEtBQUtBLENBQUksR0FBSyxPQUFPLEdBQ3JDQSxHQUFRLEtBQUssWUFBWUEsRUFBSyxZQUFXLENBQUUsR0FBSyxJQUN6RCxFQUVBLElBQUEsT0FBaUJvdUIsT0NoR2pCLFNBQWlCLENBQUMsMkJBQTJCLENBQUMsSUFBSSxFQUFFLHlCQUF5QixDQUFDLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsMEJBQTBCLENBQUMsU0FBUyxFQUFFLDhCQUE4QixDQUFDLGFBQWEsRUFBRSwwQkFBMEIsQ0FBQyxTQUFTLEVBQUUsMkJBQTJCLENBQUMsS0FBSyxFQUFFLDRCQUE0QixDQUFDLE1BQU0sRUFBRSw0QkFBNEIsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLDJCQUEyQixDQUFDLEtBQUssRUFBRSx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsdUJBQXVCLENBQUMsTUFBTSxFQUFFLDhCQUE4QixDQUFDLE9BQU8sRUFBRSw2QkFBNkIsQ0FBQyxPQUFPLEVBQUUsMEJBQTBCLENBQUMsT0FBTyxFQUFFLDBCQUEwQixDQUFDLE9BQU8sRUFBRSx5QkFBeUIsQ0FBQyxPQUFPLEVBQUUsdUJBQXVCLENBQUMsSUFBSSxFQUFFLHVCQUF1QixDQUFDLEtBQUssRUFBRSwyQkFBMkIsQ0FBQyxVQUFVLEVBQUUsMEJBQTBCLENBQUMsS0FBSyxFQUFFLHVCQUF1QixDQUFDLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUseUJBQXlCLENBQUMsS0FBSyxNQUFNLEVBQUUsdUJBQXVCLENBQUMsTUFBTSxFQUFFLDRCQUE0QixDQUFDLFdBQVcsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsS0FBSyxFQUFFLHNCQUFzQixDQUFDLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUseUJBQXlCLENBQUMsS0FBSyxFQUFFLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsc0JBQXNCLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLEtBQUssRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsT0FBTyxFQUFFLDBCQUEwQixDQUFDLEtBQUssRUFBRSx3QkFBd0IsQ0FBQyxNQUFNLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLENBQUMsS0FBSyxFQUFFLDJCQUEyQixDQUFDLE1BQU0sTUFBTSxLQUFLLEVBQUUscUNBQXFDLENBQUMsS0FBSyxFQUFFLHNCQUFzQixDQUFDLE9BQU8sRUFBRSx5QkFBeUIsQ0FBQyxLQUFLLEtBQUssRUFBRSxtQkFBbUIsQ0FBQyxPQUFPLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsMEJBQTBCLENBQUMsUUFBUSxFQUFFLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsdUJBQXVCLENBQUMsU0FBUyxFQUFFLDJCQUEyQixDQUFDLEtBQUssRUFBRSw2QkFBNkIsQ0FBQyxLQUFLLEVBQUUsdUJBQXVCLENBQUMsTUFBTSxFQUFFLDRCQUE0QixDQUFDLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsMEJBQTBCLENBQUMsTUFBTSxFQUFFLDBCQUEwQixDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUseUJBQXlCLENBQUMsUUFBUSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxxQ0FBcUMsQ0FBQyxPQUFPLEVBQUUsMkJBQTJCLENBQUMsVUFBVSxFQUFFLDRCQUE0QixDQUFDLE9BQU8sRUFBRSx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsMEJBQTBCLENBQUMsTUFBTSxFQUFFLDBCQUEwQixDQUFDLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxNQUFNLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxLQUFLLEVBQUUscUJBQXFCLENBQUMsTUFBTSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsS0FBSyxFQUFFLHNCQUFzQixDQUFDLElBQUksRUFBRSx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLENBQUMsS0FBSyxFQUFFLDJCQUEyQixDQUFDLE1BQU0sTUFBTSxNQUFNLE1BQU0sS0FBSyxPQUFPLFFBQVEsTUFBTSxNQUFNLE9BQU8sTUFBTSxTQUFTLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsZ0NBQWdDLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLEtBQUssRUFBRSx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLENBQUMsU0FBUyxVQUFVLFNBQVMsUUFBUSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSw4QkFBOEIsQ0FBQyxNQUFNLEVBQUUsa0NBQWtDLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLEtBQUssRUFBRSw0QkFBNEIsQ0FBQyxLQUFLLEVBQUUsNEJBQTRCLENBQUMsTUFBTSxLQUFLLEVBQUUseUJBQXlCLENBQUMsS0FBSyxFQUFFLHFCQUFxQixDQUFDLEtBQUssRUFBRSx5QkFBeUIsQ0FBQyxNQUFNLEtBQUssRUFBRSw4QkFBOEIsQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxFQUFFLDZCQUE2QixDQUFDLElBQUksRUFBRSx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsdUJBQXVCLENBQUMsS0FBSyxFQUFFLDJCQUEyQixDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsc0JBQXNCLENBQUMsS0FBSyxFQUFFLHlCQUF5QixDQUFDLEtBQUssTUFBTSxJQUFJLEVBQUUsNkJBQTZCLENBQUMsT0FBTyxFQUFFLHVCQUF1QixDQUFDLFNBQVMsRUFBRSx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLENBQUMsTUFBTSxLQUFLLEVBQUUsMEJBQTBCLENBQUMsS0FBSyxFQUFFLHNDQUFzQyxDQUFDLEtBQUssRUFBRSxpQ0FBaUMsQ0FBQyxJQUFJLEVBQUUsc0NBQXNDLENBQUMsS0FBSyxFQUFFLCtCQUErQixDQUFDLElBQUksRUFBRSw0QkFBNEIsQ0FBQyxNQUFNLEVBQUUsK0JBQStCLENBQUMsS0FBSyxFQUFFLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxnQ0FBZ0MsQ0FBQyxLQUFLLEVBQUUsNEJBQTRCLENBQUMsS0FBSyxFQUFFLHVCQUF1QixDQUFDLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsc0JBQXNCLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsOEJBQThCLENBQUMsS0FBSyxFQUFFLCtCQUErQixDQUFDLEtBQUssRUFBRSw4QkFBOEIsQ0FBQyxLQUFLLEVBQUUsK0JBQStCLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLEtBQUssRUFBRSx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUseUJBQXlCLENBQUMsU0FBUyxFQUFFLHFDQUFxQyxDQUFDLFFBQVEsRUFBRSwwQ0FBMEMsQ0FBQyxRQUFRLEVBQUUsc0JBQXNCLENBQUMsS0FBSyxFQUFFLG9CQUFvQixDQUFDLE1BQU0sT0FBTyxFQUFFLHVCQUF1QixDQUFDLE1BQU0sTUFBTSxFQUFFLDJCQUEyQixDQUFDLElBQUksRUFBRSxpQ0FBaUMsQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsdUJBQXVCLENBQUMsTUFBTSxFQUFFLHVCQUF1QixDQUFDLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsTUFBTSxXQUFXLEVBQUUseUJBQXlCLENBQUMsS0FBSyxFQUFFLCtCQUErQixDQUFDLEtBQUssRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsK0JBQStCLENBQUMsUUFBUSxFQUFFLGlDQUFpQyxDQUFDLElBQUksRUFBRSwyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLHFCQUFxQixDQUFDLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsdUJBQXVCLENBQUMsTUFBTSxFQUFFLDJCQUEyQixDQUFDLFVBQVUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsMkJBQTJCLENBQUMsS0FBSyxFQUFFLDRCQUE0QixDQUFDLEtBQUssRUFBRSw0QkFBNEIsQ0FBQyxLQUFLLEVBQUUsMEJBQTBCLENBQUMsS0FBSyxFQUFFLDBCQUEwQixDQUFDLEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsd0JBQXdCLENBQUMsUUFBUSxLQUFLLEVBQUUsd0JBQXdCLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLE1BQU0sTUFBTSxNQUFNLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsc0JBQXNCLENBQUMsS0FBSyxFQUFFLHdCQUF3QixDQUFDLEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxPQUFPLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLENBQUMsT0FBTyxRQUFRLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxLQUFLLEtBQUssRUFBRSxhQUFhLENBQUMsTUFBTSxPQUFPLE1BQU0sS0FBSyxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNLE1BQU0sRUFBRSxhQUFhLENBQUMsT0FBTyxNQUFNLE9BQU8sTUFBTSxNQUFNLEtBQUssRUFBRSxZQUFZLENBQUMsTUFBTSxNQUFNLE1BQU0sTUFBTSxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxNQUFNLE1BQU0sRUFBRSxhQUFhLENBQUMsT0FBTyxNQUFNLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsTUFBTSxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sTUFBTSxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLE1BQU0sTUFBTSxFQUFFLGdCQUFnQixDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsbUNBQW1DLENBQUMsMEJBQTBCLEVBQUUsaUJBQWlCLENBQUMsT0FBTyxFQUFFLGlDQUFpQyxDQUFDLE9BQU8sRUFBRSwwQ0FBMEMsQ0FBQyxPQUFPLEVBQUUseUJBQXlCLENBQUMsT0FBTyxFQUFFLGlCQUFpQixDQUFDLE1BQU0sTUFBTSxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsTUFBTSxNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU0sT0FBTyxNQUFNLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLE1BQU0sTUFBTSxFQUFFLG1CQUFtQixDQUFDLFFBQVEsT0FBTyxFQUFFLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxRQUFRLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLENBQUMsV0FBVyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxLQUFLLEVBQUUsb0JBQW9CLENBQUMsU0FBUyxXQUFXLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxPQUFPLE1BQU0sT0FBTyxFQUFFLFlBQVksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLFdBQVcsSUFBSSxFQUFFLGNBQWMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxNQUFNLE9BQU8sT0FBTyxNQUFNLE9BQU8sTUFBTSxLQUFLLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsT0FBTyxLQUFLLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsT0FBTyxLQUFLLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsU0FBUyxNQUFNLEVBQUUsNEJBQTRCLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxJQUFJLEtBQUssT0FBTyxNQUFNLEtBQUssSUFBSSxFQUFFLGNBQWMsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxPQUFPLE1BQU0sRUFBRSxhQUFhLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsT0FBTyxLQUFLLEVBQUUsYUFBYSxDQUFDLE1BQU0sTUFBTSxFQUFFLGNBQWMsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLE9BQU8sTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNLE1BQU0sRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxNQUFNLE9BQU8sTUFBTSxFQUFFLGFBQWEsQ0FBQyxPQUFPLE1BQU0sTUFBTSxNQUFNLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLEtBQUssS0FBSyxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUNFeHpTLElBQUksS0FBT00sT0FDWCxJQUFBLEtBQWlCLElBQUksS0FBS0MsUUFBMkIsNnpFQ0ZyRCxJQUFJQyxZQUFhaHpCLGdCQUFRQSxlQUFLLFdBQWMsU0FBVWl6QixFQUFTQyxFQUFZQyxFQUFHQyxFQUFXLENBQ3JGLFNBQVNDLEVBQU1udkIsRUFBTyxDQUFFLE9BQU9BLGFBQWlCaXZCLEVBQUlqdkIsRUFBUSxJQUFJaXZCLEVBQUUsU0FBVWhoQixFQUFTLENBQUVBLEVBQVFqTyxDQUFLLENBQUUsQ0FBRSxDQUFJLENBQzVHLE9BQU8sSUFBS2l2QixJQUFNQSxFQUFJLFVBQVUsU0FBVWhoQixFQUFTQyxFQUFRLENBQ3ZELFNBQVNraEIsRUFBVXB2QixFQUFPLENBQUUsR0FBSSxDQUFFcXZCLEVBQUtILEVBQVUsS0FBS2x2QixDQUFLLENBQUMsQ0FBRSxPQUFVeVAsRUFBRyxDQUFFdkIsRUFBT3VCLENBQUMsRUFBTSxDQUMzRixTQUFTNmYsRUFBU3R2QixFQUFPLENBQUUsR0FBSSxDQUFFcXZCLEVBQUtILEVBQVUsTUFBU2x2QixDQUFLLENBQUMsQ0FBSSxPQUFReVAsRUFBRyxDQUFFdkIsRUFBT3VCLENBQUMsRUFBTSxDQUM5RixTQUFTNGYsRUFBSzdvQixFQUFRLENBQUVBLEVBQU8sS0FBT3lILEVBQVF6SCxFQUFPLEtBQUssRUFBSTJvQixFQUFNM29CLEVBQU8sS0FBSyxFQUFFLEtBQUs0b0IsRUFBV0UsQ0FBUSxDQUFJLENBQzlHRCxHQUFNSCxFQUFZQSxFQUFVLE1BQU1ILEVBQVNDLEdBQWMsQ0FBRSxDQUFBLEdBQUcsS0FBSSxDQUFFLENBQzVFLENBQUssQ0FDTCxFQUNJTyxjQUFlenpCLGdCQUFRQSxlQUFLLGFBQWdCLFNBQVVpekIsRUFBU3JILEVBQU0sQ0FDckUsSUFBSTFhLEVBQUksQ0FBRSxNQUFPLEVBQUcsS0FBTSxVQUFXLENBQUUsR0FBSXlJLEVBQUUsQ0FBQyxFQUFJLEVBQUcsTUFBTUEsRUFBRSxDQUFDLEVBQUcsT0FBT0EsRUFBRSxDQUFDLENBQUksRUFBRSxLQUFNLENBQUUsRUFBRSxJQUFLLENBQUEsQ0FBSSxFQUFFK1osRUFBR0MsRUFBR2hhLEVBQUdpYSxFQUMvRyxPQUFPQSxFQUFJLENBQUUsS0FBTUMsRUFBSyxDQUFDLEVBQUcsTUFBU0EsRUFBSyxDQUFDLEVBQUcsT0FBVUEsRUFBSyxDQUFDLENBQUcsRUFBRSxPQUFPLFFBQVcsYUFBZUQsRUFBRSxPQUFPLFFBQVEsRUFBSSxVQUFXLENBQUUsT0FBTyxJQUFPLEdBQUdBLEVBQ3ZKLFNBQVNDLEVBQUsvakIsRUFBRyxDQUFFLE9BQU8sU0FBVWlDLEVBQUcsQ0FBRSxPQUFPd2hCLEVBQUssQ0FBQ3pqQixFQUFHaUMsQ0FBQyxDQUFDLENBQUksQ0FBRyxDQUNsRSxTQUFTd2hCLEVBQUtPLEVBQUksQ0FDZCxHQUFJSixFQUFHLE1BQU0sSUFBSSxVQUFVLGlDQUFpQyxFQUM1RCxLQUFPRSxJQUFNQSxFQUFJLEVBQUdFLEVBQUcsQ0FBQyxJQUFNNWlCLEVBQUksSUFBS0EsR0FBRyxHQUFJLENBQzFDLEdBQUl3aUIsRUFBSSxFQUFHQyxJQUFNaGEsRUFBSW1hLEVBQUcsQ0FBQyxFQUFJLEVBQUlILEVBQUUsT0FBWUcsRUFBRyxDQUFDLEVBQUlILEVBQUUsU0FBY2hhLEVBQUlnYSxFQUFFLFNBQWNoYSxFQUFFLEtBQUtnYSxDQUFDLEVBQUcsR0FBS0EsRUFBRSxPQUFTLEVBQUVoYSxFQUFJQSxFQUFFLEtBQUtnYSxFQUFHRyxFQUFHLENBQUMsQ0FBQyxHQUFHLEtBQU0sT0FBT25hLEVBRTNKLE9BRElnYSxFQUFJLEVBQUdoYSxJQUFHbWEsRUFBSyxDQUFDQSxFQUFHLENBQUMsRUFBSSxFQUFHbmEsRUFBRSxLQUFLLEdBQzlCbWEsRUFBRyxDQUFDLEVBQUMsQ0FDVCxJQUFLLEdBQUcsSUFBSyxHQUFHbmEsRUFBSW1hLEVBQUksTUFDeEIsSUFBSyxHQUFHLE9BQUE1aUIsRUFBRSxRQUFnQixDQUFFLE1BQU80aUIsRUFBRyxDQUFDLEVBQUcsS0FBTSxFQUFLLEVBQ3JELElBQUssR0FBRzVpQixFQUFFLFFBQVN5aUIsRUFBSUcsRUFBRyxDQUFDLEVBQUdBLEVBQUssQ0FBQyxDQUFDLEVBQUcsU0FDeEMsSUFBSyxHQUFHQSxFQUFLNWlCLEVBQUUsSUFBSSxNQUFPQSxFQUFFLEtBQUssSUFBRyxFQUFJLFNBQ3hDLFFBQ0ksR0FBTXlJLEVBQUl6SSxFQUFFLEtBQU0sRUFBQXlJLEVBQUlBLEVBQUUsT0FBUyxHQUFLQSxFQUFFQSxFQUFFLE9BQVMsQ0FBQyxLQUFPbWEsRUFBRyxDQUFDLElBQU0sR0FBS0EsRUFBRyxDQUFDLElBQU0sR0FBSSxDQUFFNWlCLEVBQUksRUFBRyxRQUFXLENBQzVHLEdBQUk0aUIsRUFBRyxDQUFDLElBQU0sSUFBTSxDQUFDbmEsR0FBTW1hLEVBQUcsQ0FBQyxFQUFJbmEsRUFBRSxDQUFDLEdBQUttYSxFQUFHLENBQUMsRUFBSW5hLEVBQUUsQ0FBQyxHQUFLLENBQUV6SSxFQUFFLE1BQVE0aUIsRUFBRyxDQUFDLEVBQUcsS0FBUSxDQUN0RixHQUFJQSxFQUFHLENBQUMsSUFBTSxHQUFLNWlCLEVBQUUsTUFBUXlJLEVBQUUsQ0FBQyxFQUFHLENBQUV6SSxFQUFFLE1BQVF5SSxFQUFFLENBQUMsRUFBR0EsRUFBSW1hLEVBQUksS0FBUSxDQUNyRSxHQUFJbmEsR0FBS3pJLEVBQUUsTUFBUXlJLEVBQUUsQ0FBQyxFQUFHLENBQUV6SSxFQUFFLE1BQVF5SSxFQUFFLENBQUMsRUFBR3pJLEVBQUUsSUFBSSxLQUFLNGlCLENBQUUsRUFBRyxLQUFRLENBQy9EbmEsRUFBRSxDQUFDLEdBQUd6SSxFQUFFLElBQUksSUFBRyxFQUNuQkEsRUFBRSxLQUFLLElBQUssRUFBRSxRQUNyQixDQUNENGlCLEVBQUtsSSxFQUFLLEtBQUtxSCxFQUFTL2hCLENBQUMsQ0FDNUIsT0FBUXlDLEVBQUcsQ0FBRW1nQixFQUFLLENBQUMsRUFBR25nQixDQUFDLEVBQUdnZ0IsRUFBSSxDQUFFLFFBQVcsQ0FBRUQsRUFBSS9aLEVBQUksQ0FBSSxDQUMxRCxHQUFJbWEsRUFBRyxDQUFDLEVBQUksRUFBRyxNQUFNQSxFQUFHLENBQUMsRUFBRyxNQUFPLENBQUUsTUFBT0EsRUFBRyxDQUFDLEVBQUlBLEVBQUcsQ0FBQyxFQUFJLE9BQVEsS0FBTSxHQUM3RSxDQUNMLEVBQ0lDLGtCQUFtQi96QixnQkFBUUEsZUFBSyxpQkFBb0IsU0FBVWcwQixFQUFLLENBQ25FLE9BQVFBLEdBQU9BLEVBQUksV0FBY0EsRUFBTSxDQUFFLFFBQVdBLEVBQ3hELEVBQ0EsT0FBTyxlQUFlQyxVQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUksQ0FBRSxFQUM1REEsVUFBQSxXQUF5Q0EsVUFBQSxhQUE2QkEsVUFBQSwwQ0FBMEJBLFVBQUEsNkJBQXVDQSxVQUFBLGVBQWdEQSxVQUFBLDJDQUE4QixPQUNyTixJQUFJL0IsNkJBQTZCWSwyQkFDN0IsT0FBU2lCLGtCQUFnQmhCLElBQW9CLEVBQzdDLGVBQWlCZ0Isa0JBQWdCLFVBQTZCLEVBQzlELGlCQUFtQixTQUFVRyxFQUFVLENBQ3ZDLE1BQU0sSUFBSWhDLDZCQUEyQix5QkFBeUIsU0FBUyxDQUMzRSxFQUN3QitCLFVBQUEsaUJBQUcsaUJBQzNCLElBQUksZ0JBQWtCLFVBQVksQ0FBRSxPQUFPakIsWUFBVSxPQUFRLE9BQVEsT0FBUSxVQUFZLENBQ3JGLElBQUltQixFQUFJQyxFQUNSLE9BQU9YLGNBQVksS0FBTSxTQUFVWSxFQUFJLENBQ25DLEdBQUksT0FBTyxTQUFZLFVBQ25CLFVBQVksTUFDWixPQUFPLFFBQVEsaUJBQW9CLFdBQ25DLE1BQU8sQ0FBQyxFQUFjLFFBQVEsZ0JBQWlCLENBQUEsRUFFbkQsR0FBSSxPQUFPLFFBQVcsVUFDbEIsU0FBVyxNQUNYLFFBQVNELEdBQU1ELEVBQUssT0FBTyxXQUFhLE1BQVFBLElBQU8sT0FBUyxPQUFTQSxFQUFHLFdBQWEsTUFBUUMsSUFBTyxPQUFTLE9BQVNBLEVBQUcsa0JBQXFCLFdBQ2xKLE1BQU8sQ0FBQyxFQUFjLE9BQU8sUUFBUSxRQUFRLGdCQUFlLENBQUUsRUFFbEUsTUFBTSxJQUFJLE1BQU0scURBQXFELENBQzdFLENBQUssQ0FDTCxDQUFDLENBQUUsRUFDb0JILFVBQUEsZ0JBQUcsZ0JBQzFCLElBQUksZUFBaUIsVUFBWSxDQUM3QixNQUFPLENBQ0gsS0FBTSxTQUNkLENBQ0EsRUFDc0JBLFVBQUEsZUFBRyxlQUN6QixJQUFJLDZCQUErQixVQUFZLENBQzNDLE1BQU8sRUFDWCxFQUNvQ0EsVUFBQSw2QkFBRyw2QkFDdkMsSUFBSSxhQUFlLFVBQVksQ0FDM0IsTUFBTyxFQUNYLEVBQ29CQSxVQUFBLGFBQUcsYUFDdkIsSUFBSSxtQkFBcUIsU0FBVXhlLEVBQU02ZSxFQUFVLENBQy9DLElBQUk1eEIsRUFBVSxDQUFBLEVBQ2QsT0FBSTR4QixJQUNBNXhCLEVBQVEsS0FBTyxPQUFPLFFBQVEsUUFBUTR4QixDQUFRLEdBQUssUUFFaEQsSUFBSSxLQUFLLENBQUM3ZSxDQUFJLEVBQUcvUyxDQUFPLENBQ25DLEVBQzBCdXhCLFVBQUEsbUJBQUcsbUJBQzdCLElBQUksYUFBZSxTQUFVTSxFQUFTLENBQ2xDLEdBQUlBLEVBQ0EsT0FBT0EsRUFFWCxHQUFJLFdBQWEsT0FDYixNQUFNLElBQUksTUFBTSx3REFBd0QsRUFFNUUsSUFBSUMsRUFBTyxTQUFTLEtBQU1DLEVBQVcsU0FBUyxTQUM5QyxNQUFPLEdBQUcsT0FBT0EsRUFBVSxJQUFJLEVBQUUsT0FBT0QsQ0FBSSxDQUNoRCxFQUNvQlAsVUFBQSxhQUFHLGFBQ3ZCLElBQUksV0FBYSxVQUFZLENBQ3pCLE9BQU8sZUFBZSxRQUFRLE9BQ2xDLEVBQ2tCQSxVQUFBLFdBQUcsdUZDckdyQixPQUFPLGVBQWUsSUFBUyxhQUFjLENBQUUsTUFBTyxFQUFJLENBQUUsRUFDM0MsSUFBQSxVQUFHLE9BQ3BCLElBQUksVUFBWSxTQUFVbEksRUFBUSxDQUM5QixJQUFJMkksRUFBZTNJLEVBQU8sYUFBYzRJLEVBQWU1SSxFQUFPLGFBQWM2SSxFQUFVN0ksRUFBTyxRQUN6RjhJLEVBQVlGLElBQWlCLE9BQVksVUFBVSxPQUFPQSxDQUFZLEVBQUksR0FDMUVHLEVBQWNGLEVBQVUsV0FBYSxHQUN6QyxNQUFPLEtBQUssT0FBT0MsRUFBVyxLQUFLLEVBQUUsT0FBT0MsRUFBYSxHQUFHLEVBQUUsT0FBT0osRUFBYyxPQUFPLENBQzlGLEVBQ2lCLElBQUEsVUFBRyxVQ1JwQixJQUFJSyxXQUFZLzBCLGdCQUFRQSxlQUFLLFVBQWEsVUFBWSxDQUNsRCswQixrQkFBVyxPQUFPLFFBQVUsU0FBU3BiLEVBQUcsQ0FDcEMsUUFBU2dOLEVBQUdsbEIsRUFBSSxFQUFHcU8sRUFBSSxVQUFVLE9BQVFyTyxFQUFJcU8sRUFBR3JPLElBQUssQ0FDakRrbEIsRUFBSSxVQUFVbGxCLENBQUMsRUFDZixRQUFTNmYsS0FBS3FGLEVBQU8sT0FBTyxVQUFVLGVBQWUsS0FBS0EsRUFBR3JGLENBQUMsSUFDMUQzSCxFQUFFMkgsQ0FBQyxFQUFJcUYsRUFBRXJGLENBQUMsRUFDakIsQ0FDRCxPQUFPM0gsQ0FDZixFQUNXb2IsV0FBUyxNQUFNLEtBQU0sU0FBUyxDQUN6QyxFQUNBLE9BQU8sZUFBZUMsYUFBUyxhQUFjLENBQUUsTUFBTyxFQUFJLENBQUUsRUFDMUNBLGFBQUEsV0FBRyxPQUNyQixJQUFJLE1BQVFsQyxJQUNSLFdBQTRCLFVBQVksQ0FDeEMsU0FBU21DLEVBQVdDLEVBQVFQLEVBQWMsQ0FDdEMsS0FBSyxPQUFTTyxFQUNkLEtBQUssYUFBZVAsQ0FDdkIsQ0FDRCxPQUFBTSxFQUFXLFVBQVUsMEJBQTRCLFNBQVVsSixFQUFRLENBQy9ELFNBQVcsTUFBTSxXQUFXZ0osV0FBU0EsV0FBUyxDQUFFLEVBQUVoSixDQUFNLEVBQUcsQ0FBRSxhQUFjLEtBQUssWUFBWSxDQUFFLENBQUMsQ0FDdkcsRUFPSWtKLEVBQVcsVUFBVSxVQUFZLFNBQVVsSixFQUFRLENBQy9DLFNBQVcsTUFBTSxXQUFXQSxDQUFNLENBQzFDLEVBQ1drSixDQUNYLEVBQUMsRUFDaUJELGFBQUEsV0FBRyxXQ2pDckIsSUFBSWxELFlBQWE5eEIsZ0JBQVFBLGVBQUssV0FBZSxVQUFZLENBQ3JELElBQUkreEIsRUFBZ0IsU0FBVUMsRUFBR3B0QixFQUFHLENBQ2hDLE9BQUFtdEIsRUFBZ0IsT0FBTyxnQkFDbEIsQ0FBRSxVQUFXLENBQUEsYUFBZ0IsT0FBUyxTQUFVQyxFQUFHcHRCLEVBQUcsQ0FBRW90QixFQUFFLFVBQVlwdEIsQ0FBRSxHQUN6RSxTQUFVb3RCLEVBQUdwdEIsRUFBRyxDQUFFLFFBQVMwYyxLQUFLMWMsRUFBTyxPQUFPLFVBQVUsZUFBZSxLQUFLQSxFQUFHMGMsQ0FBQyxJQUFHMFEsRUFBRTFRLENBQUMsRUFBSTFjLEVBQUUwYyxDQUFDLElBQzFGeVEsRUFBY0MsRUFBR3B0QixDQUFDLENBQ2pDLEVBQ0ksT0FBTyxTQUFVb3RCLEVBQUdwdEIsRUFBRyxDQUNuQixHQUFJLE9BQU9BLEdBQU0sWUFBY0EsSUFBTSxLQUNqQyxNQUFNLElBQUksVUFBVSx1QkFBeUIsT0FBT0EsQ0FBQyxFQUFJLCtCQUErQixFQUM1Rm10QixFQUFjQyxFQUFHcHRCLENBQUMsRUFDbEIsU0FBU3F0QixHQUFLLENBQUUsS0FBSyxZQUFjRCxDQUFJLENBQ3ZDQSxFQUFFLFVBQVlwdEIsSUFBTSxLQUFPLE9BQU8sT0FBT0EsQ0FBQyxHQUFLcXRCLEVBQUcsVUFBWXJ0QixFQUFFLFVBQVcsSUFBSXF0QixFQUN2RixDQUNBLElBQ0k4QyxXQUFZLzBCLGdCQUFRQSxlQUFLLFVBQWEsVUFBWSxDQUNsRCswQixrQkFBVyxPQUFPLFFBQVUsU0FBU3BiLEVBQUcsQ0FDcEMsUUFBU2dOLEVBQUdsbEIsRUFBSSxFQUFHcU8sRUFBSSxVQUFVLE9BQVFyTyxFQUFJcU8sRUFBR3JPLElBQUssQ0FDakRrbEIsRUFBSSxVQUFVbGxCLENBQUMsRUFDZixRQUFTNmYsS0FBS3FGLEVBQU8sT0FBTyxVQUFVLGVBQWUsS0FBS0EsRUFBR3JGLENBQUMsSUFDMUQzSCxFQUFFMkgsQ0FBQyxFQUFJcUYsRUFBRXJGLENBQUMsRUFDakIsQ0FDRCxPQUFPM0gsQ0FDZixFQUNXb2IsV0FBUyxNQUFNLEtBQU0sU0FBUyxDQUN6QyxFQUNJSSxTQUFVbjFCLGdCQUFRQSxlQUFLLFFBQVcsU0FBVTJtQixFQUFHLEVBQUcsQ0FDbEQsSUFBSSxFQUFJLENBQUEsRUFDUixRQUFTckYsS0FBS3FGLEVBQU8sT0FBTyxVQUFVLGVBQWUsS0FBS0EsRUFBR3JGLENBQUMsR0FBSyxFQUFFLFFBQVFBLENBQUMsRUFBSSxJQUM5RSxFQUFFQSxDQUFDLEVBQUlxRixFQUFFckYsQ0FBQyxHQUNkLEdBQUlxRixHQUFLLE1BQVEsT0FBTyxPQUFPLHVCQUEwQixXQUNyRCxRQUFTLEVBQUksRUFBR3JGLEVBQUksT0FBTyxzQkFBc0JxRixDQUFDLEVBQUcsRUFBSXJGLEVBQUUsT0FBUSxJQUMzRCxFQUFFLFFBQVFBLEVBQUUsQ0FBQyxDQUFDLEVBQUksR0FBSyxPQUFPLFVBQVUscUJBQXFCLEtBQUtxRixFQUFHckYsRUFBRSxDQUFDLENBQUMsSUFDekUsRUFBRUEsRUFBRSxDQUFDLENBQUMsRUFBSXFGLEVBQUVyRixFQUFFLENBQUMsQ0FBQyxHQUU1QixPQUFPLENBQ1gsRUFDQSxPQUFPLGVBQWU4VCxvQkFBUyxhQUFjLENBQUUsTUFBTyxFQUFJLENBQUUsRUFDbkNBLG9CQUFBLGtCQUFHLE9BQzVCLElBQUlKLGVBQWVsQyxhQUNmLGtCQUFtQyxTQUFVWCxFQUFRLENBQ3JETCxZQUFVdUQsRUFBbUJsRCxDQUFNLEVBQ25DLFNBQVNrRCxFQUFrQkgsRUFBUVAsRUFBYyxDQUM3QyxJQUFJckMsRUFBUUgsRUFBTyxLQUFLLEtBQU0rQyxFQUFRUCxDQUFZLEdBQUssS0FDdkQsT0FBQXJDLEVBQU0sc0JBQXdCLEdBQ3ZCQSxDQUNWLENBQ0QsT0FBQStDLEVBQWtCLFVBQVUsS0FBTyxTQUFVdEosRUFBUSxDQUNqRCxJQUFJdUcsRUFBUSxLQUNSZ0QsRUFBZ0J2SixFQUFPLFNBQ3ZCd0osRUFBV0QsRUFBYyxJQUFJLFNBQVVFLEVBQVMsQ0FDaEQsR0FBSSxpQkFBa0JBLEVBQVMsQ0FDM0IsSUFBSWQsRUFBZWMsRUFBUSxhQUFjQyxFQUFPTixTQUFPSyxFQUFTLENBQUMsY0FBYyxDQUFDLEVBQ2hGLE9BQU9ULFdBQVMsQ0FBRSxJQUFLekMsRUFBTSwwQkFBMEIsQ0FBRSxhQUFjb0MsQ0FBYyxDQUFBLEdBQUtlLENBQUksQ0FDakcsQ0FDRCxPQUFPRCxDQUNuQixDQUFTLEVBQ0duRixFQUFPLEtBQUssMEJBQTBCLENBQ3RDLGFBQWMsYUFDMUIsQ0FBUyxFQUNELE9BQU8sS0FBSyxPQUFPLEtBQUtBLEVBQU0sQ0FBRSxTQUFVa0YsQ0FBUSxDQUFFLENBQzVELEVBQ1dGLENBQ1gsRUFBRUwsZUFBYSxVQUFVLEVBQ0FJLG9CQUFBLGtCQUFHLHFDQ2hFeEJ0RCxZQUFhOXhCLGdCQUFRQSxlQUFLLFdBQWUsVUFBWSxDQUNyRCxJQUFJK3hCLEVBQWdCLFNBQVVDLEVBQUdwdEIsRUFBRyxDQUNoQyxPQUFBbXRCLEVBQWdCLE9BQU8sZ0JBQ2xCLENBQUUsVUFBVyxDQUFBLGFBQWdCLE9BQVMsU0FBVUMsRUFBR3B0QixFQUFHLENBQUVvdEIsRUFBRSxVQUFZcHRCLENBQUUsR0FDekUsU0FBVW90QixFQUFHcHRCLEVBQUcsQ0FBRSxRQUFTMGMsS0FBSzFjLEVBQU8sT0FBTyxVQUFVLGVBQWUsS0FBS0EsRUFBRzBjLENBQUMsSUFBRzBRLEVBQUUxUSxDQUFDLEVBQUkxYyxFQUFFMGMsQ0FBQyxJQUMxRnlRLEVBQWNDLEVBQUdwdEIsQ0FBQyxDQUNqQyxFQUNJLE9BQU8sU0FBVW90QixFQUFHcHRCLEVBQUcsQ0FDbkIsR0FBSSxPQUFPQSxHQUFNLFlBQWNBLElBQU0sS0FDakMsTUFBTSxJQUFJLFVBQVUsdUJBQXlCLE9BQU9BLENBQUMsRUFBSSwrQkFBK0IsRUFDNUZtdEIsRUFBY0MsRUFBR3B0QixDQUFDLEVBQ2xCLFNBQVNxdEIsR0FBSyxDQUFFLEtBQUssWUFBY0QsQ0FBSSxDQUN2Q0EsRUFBRSxVQUFZcHRCLElBQU0sS0FBTyxPQUFPLE9BQU9BLENBQUMsR0FBS3F0QixFQUFHLFVBQVlydEIsRUFBRSxVQUFXLElBQUlxdEIsRUFDdkYsQ0FDQSxJQUNJOEMsV0FBWS8wQixnQkFBUUEsZUFBSyxVQUFhLFVBQVksQ0FDbEQrMEIsa0JBQVcsT0FBTyxRQUFVLFNBQVNwYixFQUFHLENBQ3BDLFFBQVNnTixFQUFHbGxCLEVBQUksRUFBR3FPLEVBQUksVUFBVSxPQUFRck8sRUFBSXFPLEVBQUdyTyxJQUFLLENBQ2pEa2xCLEVBQUksVUFBVWxsQixDQUFDLEVBQ2YsUUFBUzZmLEtBQUtxRixFQUFPLE9BQU8sVUFBVSxlQUFlLEtBQUtBLEVBQUdyRixDQUFDLElBQzFEM0gsRUFBRTJILENBQUMsRUFBSXFGLEVBQUVyRixDQUFDLEVBQ2pCLENBQ0QsT0FBTzNILENBQ2YsRUFDV29iLFdBQVMsTUFBTSxLQUFNLFNBQVMsQ0FDekMsRUFDSS9CLFlBQWFoekIsZ0JBQVFBLGVBQUssV0FBYyxTQUFVaXpCLEVBQVNDLEVBQVlDLEVBQUdDLEVBQVcsQ0FDckYsU0FBU0MsRUFBTW52QixFQUFPLENBQUUsT0FBT0EsYUFBaUJpdkIsRUFBSWp2QixFQUFRLElBQUlpdkIsRUFBRSxTQUFVaGhCLEVBQVMsQ0FBRUEsRUFBUWpPLENBQUssQ0FBRSxDQUFFLENBQUksQ0FDNUcsT0FBTyxJQUFLaXZCLElBQU1BLEVBQUksVUFBVSxTQUFVaGhCLEVBQVNDLEVBQVEsQ0FDdkQsU0FBU2toQixFQUFVcHZCLEVBQU8sQ0FBRSxHQUFJLENBQUVxdkIsRUFBS0gsRUFBVSxLQUFLbHZCLENBQUssQ0FBQyxDQUFFLE9BQVV5UCxFQUFHLENBQUV2QixFQUFPdUIsQ0FBQyxFQUFNLENBQzNGLFNBQVM2ZixFQUFTdHZCLEVBQU8sQ0FBRSxHQUFJLENBQUVxdkIsRUFBS0gsRUFBVSxNQUFTbHZCLENBQUssQ0FBQyxDQUFJLE9BQVF5UCxFQUFHLENBQUV2QixFQUFPdUIsQ0FBQyxFQUFNLENBQzlGLFNBQVM0ZixFQUFLN29CLEVBQVEsQ0FBRUEsRUFBTyxLQUFPeUgsRUFBUXpILEVBQU8sS0FBSyxFQUFJMm9CLEVBQU0zb0IsRUFBTyxLQUFLLEVBQUUsS0FBSzRvQixFQUFXRSxDQUFRLENBQUksQ0FDOUdELEdBQU1ILEVBQVlBLEVBQVUsTUFBTUgsRUFBU0MsR0FBYyxDQUFFLENBQUEsR0FBRyxLQUFJLENBQUUsQ0FDNUUsQ0FBSyxDQUNMLEVBQ0lPLGNBQWV6ekIsZ0JBQVFBLGVBQUssYUFBZ0IsU0FBVWl6QixFQUFTckgsRUFBTSxDQUNyRSxJQUFJMWEsRUFBSSxDQUFFLE1BQU8sRUFBRyxLQUFNLFVBQVcsQ0FBRSxHQUFJeUksRUFBRSxDQUFDLEVBQUksRUFBRyxNQUFNQSxFQUFFLENBQUMsRUFBRyxPQUFPQSxFQUFFLENBQUMsQ0FBSSxFQUFFLEtBQU0sQ0FBRSxFQUFFLElBQUssQ0FBQSxDQUFJLEVBQUUrWixFQUFHQyxFQUFHaGEsRUFBR2lhLEVBQy9HLE9BQU9BLEVBQUksQ0FBRSxLQUFNQyxFQUFLLENBQUMsRUFBRyxNQUFTQSxFQUFLLENBQUMsRUFBRyxPQUFVQSxFQUFLLENBQUMsQ0FBRyxFQUFFLE9BQU8sUUFBVyxhQUFlRCxFQUFFLE9BQU8sUUFBUSxFQUFJLFVBQVcsQ0FBRSxPQUFPLElBQU8sR0FBR0EsRUFDdkosU0FBU0MsRUFBSy9qQixFQUFHLENBQUUsT0FBTyxTQUFVaUMsRUFBRyxDQUFFLE9BQU93aEIsRUFBSyxDQUFDempCLEVBQUdpQyxDQUFDLENBQUMsQ0FBSSxDQUFHLENBQ2xFLFNBQVN3aEIsRUFBS08sRUFBSSxDQUNkLEdBQUlKLEVBQUcsTUFBTSxJQUFJLFVBQVUsaUNBQWlDLEVBQzVELEtBQU9FLElBQU1BLEVBQUksRUFBR0UsRUFBRyxDQUFDLElBQU01aUIsRUFBSSxJQUFLQSxHQUFHLEdBQUksQ0FDMUMsR0FBSXdpQixFQUFJLEVBQUdDLElBQU1oYSxFQUFJbWEsRUFBRyxDQUFDLEVBQUksRUFBSUgsRUFBRSxPQUFZRyxFQUFHLENBQUMsRUFBSUgsRUFBRSxTQUFjaGEsRUFBSWdhLEVBQUUsU0FBY2hhLEVBQUUsS0FBS2dhLENBQUMsRUFBRyxHQUFLQSxFQUFFLE9BQVMsRUFBRWhhLEVBQUlBLEVBQUUsS0FBS2dhLEVBQUdHLEVBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBTSxPQUFPbmEsRUFFM0osT0FESWdhLEVBQUksRUFBR2hhLElBQUdtYSxFQUFLLENBQUNBLEVBQUcsQ0FBQyxFQUFJLEVBQUduYSxFQUFFLEtBQUssR0FDOUJtYSxFQUFHLENBQUMsRUFBQyxDQUNULElBQUssR0FBRyxJQUFLLEdBQUduYSxFQUFJbWEsRUFBSSxNQUN4QixJQUFLLEdBQUcsT0FBQTVpQixFQUFFLFFBQWdCLENBQUUsTUFBTzRpQixFQUFHLENBQUMsRUFBRyxLQUFNLEVBQUssRUFDckQsSUFBSyxHQUFHNWlCLEVBQUUsUUFBU3lpQixFQUFJRyxFQUFHLENBQUMsRUFBR0EsRUFBSyxDQUFDLENBQUMsRUFBRyxTQUN4QyxJQUFLLEdBQUdBLEVBQUs1aUIsRUFBRSxJQUFJLE1BQU9BLEVBQUUsS0FBSyxJQUFHLEVBQUksU0FDeEMsUUFDSSxHQUFNeUksRUFBSXpJLEVBQUUsS0FBTSxFQUFBeUksRUFBSUEsRUFBRSxPQUFTLEdBQUtBLEVBQUVBLEVBQUUsT0FBUyxDQUFDLEtBQU9tYSxFQUFHLENBQUMsSUFBTSxHQUFLQSxFQUFHLENBQUMsSUFBTSxHQUFJLENBQUU1aUIsRUFBSSxFQUFHLFFBQVcsQ0FDNUcsR0FBSTRpQixFQUFHLENBQUMsSUFBTSxJQUFNLENBQUNuYSxHQUFNbWEsRUFBRyxDQUFDLEVBQUluYSxFQUFFLENBQUMsR0FBS21hLEVBQUcsQ0FBQyxFQUFJbmEsRUFBRSxDQUFDLEdBQUssQ0FBRXpJLEVBQUUsTUFBUTRpQixFQUFHLENBQUMsRUFBRyxLQUFRLENBQ3RGLEdBQUlBLEVBQUcsQ0FBQyxJQUFNLEdBQUs1aUIsRUFBRSxNQUFReUksRUFBRSxDQUFDLEVBQUcsQ0FBRXpJLEVBQUUsTUFBUXlJLEVBQUUsQ0FBQyxFQUFHQSxFQUFJbWEsRUFBSSxLQUFRLENBQ3JFLEdBQUluYSxHQUFLekksRUFBRSxNQUFReUksRUFBRSxDQUFDLEVBQUcsQ0FBRXpJLEVBQUUsTUFBUXlJLEVBQUUsQ0FBQyxFQUFHekksRUFBRSxJQUFJLEtBQUs0aUIsQ0FBRSxFQUFHLEtBQVEsQ0FDL0RuYSxFQUFFLENBQUMsR0FBR3pJLEVBQUUsSUFBSSxJQUFHLEVBQ25CQSxFQUFFLEtBQUssSUFBSyxFQUFFLFFBQ3JCLENBQ0Q0aUIsRUFBS2xJLEVBQUssS0FBS3FILEVBQVMvaEIsQ0FBQyxDQUM1QixPQUFReUMsRUFBRyxDQUFFbWdCLEVBQUssQ0FBQyxFQUFHbmdCLENBQUMsRUFBR2dnQixFQUFJLENBQUUsUUFBVyxDQUFFRCxFQUFJL1osRUFBSSxDQUFJLENBQzFELEdBQUltYSxFQUFHLENBQUMsRUFBSSxFQUFHLE1BQU1BLEVBQUcsQ0FBQyxFQUFHLE1BQU8sQ0FBRSxNQUFPQSxFQUFHLENBQUMsRUFBSUEsRUFBRyxDQUFDLEVBQUksT0FBUSxLQUFNLEdBQzdFLENBQ0wsRUFDSXFCLFNBQVVuMUIsZ0JBQVFBLGVBQUssUUFBVyxTQUFVMm1CLEVBQUcsRUFBRyxDQUNsRCxJQUFJLEVBQUksQ0FBQSxFQUNSLFFBQVNyRixLQUFLcUYsRUFBTyxPQUFPLFVBQVUsZUFBZSxLQUFLQSxFQUFHckYsQ0FBQyxHQUFLLEVBQUUsUUFBUUEsQ0FBQyxFQUFJLElBQzlFLEVBQUVBLENBQUMsRUFBSXFGLEVBQUVyRixDQUFDLEdBQ2QsR0FBSXFGLEdBQUssTUFBUSxPQUFPLE9BQU8sdUJBQTBCLFdBQ3JELFFBQVMsRUFBSSxFQUFHckYsRUFBSSxPQUFPLHNCQUFzQnFGLENBQUMsRUFBRyxFQUFJckYsRUFBRSxPQUFRLElBQzNELEVBQUUsUUFBUUEsRUFBRSxDQUFDLENBQUMsRUFBSSxHQUFLLE9BQU8sVUFBVSxxQkFBcUIsS0FBS3FGLEVBQUdyRixFQUFFLENBQUMsQ0FBQyxJQUN6RSxFQUFFQSxFQUFFLENBQUMsQ0FBQyxFQUFJcUYsRUFBRXJGLEVBQUUsQ0FBQyxDQUFDLEdBRTVCLE9BQU8sQ0FDWCxFQUNBLE9BQU8sZUFBZW9VLFlBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSSxDQUFFLEVBQzNDQSxZQUFBLFVBQUcsT0FDcEIsSUFBSVYsZUFBZWxDLGFBQ2YsVUFBMkIsU0FBVVgsRUFBUSxDQUM3Q0wsWUFBVTZELEVBQVd4RCxDQUFNLEVBQzNCLFNBQVN3RCxHQUFZLENBQ2pCLE9BQU94RCxJQUFXLE1BQVFBLEVBQU8sTUFBTSxLQUFNLFNBQVMsR0FBSyxJQUM5RCxDQUNELE9BQUF3RCxFQUFVLFVBQVUsY0FBZ0IsU0FBVTVKLEVBQVEsQ0FDbEQsSUFBSTZJLEVBQVU3SSxFQUFPLFFBQVMwSixFQUFPTixTQUFPcEosRUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUMzRHNFLEVBQU8sS0FBSywwQkFBMEIsQ0FDdEMsYUFBYyxrQkFDZCxRQUFTdUUsQ0FDckIsQ0FBUyxFQUNELE9BQU8sS0FBSyxPQUFPLElBQUl2RSxFQUFNMEUsV0FBUyxDQUFFLEVBQUVVLENBQUksQ0FBQyxDQUN2RCxFQUNJRSxFQUFVLFVBQVUsY0FBZ0IsU0FBVTVKLEVBQVEsQ0FDbEQsSUFBSXNFLEVBQU8sS0FBSywwQkFBMEIsQ0FDdEMsYUFBYyxrQkFDZCxRQUFTLEVBQ3JCLENBQVMsRUFDRCxPQUFPLEtBQUssT0FBTyxLQUFLQSxFQUFNdEUsQ0FBTSxDQUM1QyxFQUNJNEosRUFBVSxVQUFVLGlCQUFtQixTQUFVNUosRUFBUSxDQUNyRCxJQUFJc0UsRUFBTyxLQUFLLDBCQUEwQixDQUN0QyxhQUFjLGtCQUNkLFFBQVMsRUFDckIsQ0FBUyxFQUNELE9BQU8sS0FBSyxPQUFPLElBQUlBLEVBQU10RSxDQUFNLENBQzNDLEVBQ0k0SixFQUFVLFVBQVUsaUJBQW1CLFNBQVU1SixFQUFRLENBQ3JELElBQUlzRSxFQUFPLEtBQUssMEJBQTBCLENBQ3RDLGFBQWMsa0JBQ2QsUUFBUyxFQUNyQixDQUFTLEVBQ0QsT0FBTyxLQUFLLE9BQU8sT0FBT0EsRUFBTXRFLENBQU0sQ0FDOUMsRUFDSTRKLEVBQVUsVUFBVSxjQUFnQixTQUFVNUosRUFBUSxDQUNsRCxJQUFJNkksRUFBVTdJLEVBQU8sUUFBUzBKLEVBQU9OLFNBQU9wSixFQUFRLENBQUMsU0FBUyxDQUFDLEVBQzNEc0UsRUFBTyxLQUFLLDBCQUEwQixDQUN0QyxhQUFjLGtCQUNkLFFBQVN1RSxDQUNyQixDQUFTLEVBQ0QsT0FBTyxLQUFLLE9BQU8sSUFBSXZFLEVBQU0wRSxXQUFTLENBQUUsRUFBRVUsQ0FBSSxDQUFDLENBQ3ZELEVBQ0lFLEVBQVUsVUFBVSxpQkFBbUIsU0FBVTVKLEVBQVEsQ0FDckQsSUFBSXNFLEVBQU8sS0FBSywwQkFBMEIsQ0FDdEMsYUFBYyxrQkFDZCxRQUFTLEVBQ3JCLENBQVMsRUFDRCxPQUFPLEtBQUssT0FBTyxJQUFJQSxFQUFNdEUsQ0FBTSxDQUMzQyxFQUNJNEosRUFBVSxVQUFVLFNBQVcsU0FBVTVKLEVBQVEsQ0FDN0MsSUFBSTZJLEVBQVU3SSxFQUFPLFFBQVMwSixFQUFPTixTQUFPcEosRUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUMzRHNFLEVBQU8sS0FBSywwQkFBMEIsQ0FDdEMsYUFBYyxZQUNkLFFBQVN1RSxDQUNyQixDQUFTLEVBQ0QsT0FBTyxLQUFLLE9BQU8sSUFBSXZFLEVBQU1vRixDQUFJLENBQ3pDLEVBQ0lFLEVBQVUsVUFBVSxZQUFjLFNBQVU1SixFQUFRLENBQ2hELElBQUlzRSxFQUFPLEtBQUssMEJBQTBCLENBQ3RDLGFBQWMsWUFDZCxRQUFTLEVBQ3JCLENBQVMsRUFDRCxPQUFPLEtBQUssT0FBTyxJQUFJQSxFQUFNdEUsQ0FBTSxDQUMzQyxFQUNJNEosRUFBVSxVQUFVLE9BQVMsU0FBVTVKLEVBQVEsQ0FDM0MsSUFBSXNFLEVBQU8sS0FBSywwQkFBMEIsQ0FDdEMsYUFBYyxLQUMxQixDQUFTLEVBQ0QsT0FBTyxLQUFLLE9BQU8sSUFBSUEsRUFBTXRFLENBQU0sQ0FDM0MsRUFDSTRKLEVBQVUsVUFBVSxRQUFVLFNBQVU1SixFQUFRLENBQzVDLElBQUlzRSxFQUFPLEtBQUssMEJBQTBCLENBQ3RDLGFBQWMsTUFDMUIsQ0FBUyxFQUNELE9BQU8sS0FBSyxPQUFPLElBQUlBLEVBQU10RSxDQUFNLENBQzNDLEVBQ0k0SixFQUFVLFVBQVUsT0FBUyxTQUFVNUosRUFBUSxDQUMzQyxPQUFPaUgsWUFBVSxLQUFNLE9BQVEsT0FBUSxVQUFZLENBQy9DLElBQUlyd0IsRUFBTWl6QixFQUFPdkYsRUFBTXdGLEVBQVdDLEVBQ2xDLE9BQU9yQyxjQUFZLEtBQU0sU0FBVVUsRUFBSSxDQUNuQyxPQUFRQSxFQUFHLE1BQUssQ0FDWixJQUFLLEdBTUQsT0FMQXh4QixFQUFPb3BCLEVBQU8sS0FBTTZKLEVBQVE3SixFQUFPLE1BQ25Dc0UsRUFBTyxLQUFLLDBCQUEwQixDQUNsQyxhQUFjLE1BQ2QsUUFBUyxFQUNyQyxDQUF5QixFQUNJdUYsR0FDTEMsRUFBWSxLQUFLLDBCQUEwQixDQUN2QyxhQUFjLE9BQzFDLENBQXlCLEVBQ00sQ0FBQyxFQUFhLEtBQUssT0FBTyxJQUFJQSxFQUFXLENBQ3hDLEdBQUlELENBQ1AsQ0FBQSxDQUFDLEdBTmEsQ0FBQyxFQUFhLENBQUMsRUFPdEMsSUFBSyxHQUNELE9BQUFFLEVBQWlCM0IsRUFBRyxLQUFJLEVBQUksY0FDckIsQ0FBQyxFQUFjLEtBQUssT0FBTyxLQUFLOUQsRUFBTTBFLFdBQVNBLFdBQVMsQ0FBRSxFQUFFaEosQ0FBTSxFQUFHLENBQUUsT0FBUStKLENBQWEsQ0FBRSxDQUFDLENBQUMsRUFDM0csSUFBSyxHQUFHLE1BQU8sQ0FBQyxFQUFjLEtBQUssT0FBTyxLQUFLekYsRUFBTSxDQUFFLEtBQU0xdEIsQ0FBSSxDQUFFLENBQUMsQ0FDdkUsQ0FDakIsQ0FBYSxDQUNiLENBQVMsQ0FDVCxFQUNJZ3pCLEVBQVUsVUFBVSxlQUFpQixTQUFVNUosRUFBUSxDQUNuRCxJQUFJNkksRUFBVTdJLEVBQU8sUUFBUzBKLEVBQU9OLFNBQU9wSixFQUFRLENBQUMsU0FBUyxDQUFDLEVBQzNEc0UsRUFBTyxLQUFLLDBCQUEwQixDQUN0QyxhQUFjLGVBQ2QsUUFBU3VFLENBQ3JCLENBQVMsRUFDRCxPQUFPLEtBQUssT0FBTyxJQUFJdkUsRUFBTW9GLENBQUksQ0FDekMsRUFDSUUsRUFBVSxVQUFVLGtCQUFvQixTQUFVNUosRUFBUSxDQUN0RCxJQUFJc0UsRUFBTyxLQUFLLDBCQUEwQixDQUN0QyxhQUFjLGVBQ2QsUUFBUyxFQUNyQixDQUFTLEVBQ0QsT0FBTyxLQUFLLE9BQU8sSUFBSUEsRUFBTXRFLENBQU0sQ0FDM0MsRUFDSTRKLEVBQVUsVUFBVSxxQkFBdUIsU0FBVTVKLEVBQVEsQ0FDekQsSUFBSTZJLEVBQVU3SSxFQUFPLFFBQVMwSixFQUFPTixTQUFPcEosRUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUMzRHNFLEVBQU8sS0FBSywwQkFBMEIsQ0FDdEMsYUFBYyxhQUNkLFFBQVN1RSxDQUNyQixDQUFTLEVBQ0QsT0FBTyxLQUFLLE9BQU8sSUFBSXZFLEVBQU1vRixDQUFJLENBQ3pDLEVBQ0lFLEVBQVUsVUFBVSx3QkFBMEIsU0FBVTVKLEVBQVEsQ0FDNUQsSUFBSXNFLEVBQU8sS0FBSywwQkFBMEIsQ0FDdEMsYUFBYyxhQUNkLFFBQVMsRUFDckIsQ0FBUyxFQUNELE9BQU8sS0FBSyxPQUFPLElBQUlBLEVBQU10RSxDQUFNLENBQzNDLEVBQ0k0SixFQUFVLFVBQVUsZ0JBQWtCLFNBQVU1SixFQUFRLENBQ3BELElBQUlzRSxFQUFPLEtBQUssMEJBQTBCLENBQ3RDLGFBQWMsYUFDZCxRQUFTLEVBQ3JCLENBQVMsRUFDRCxPQUFPLEtBQUssT0FBTyxJQUFJQSxFQUFNdEUsQ0FBTSxDQUMzQyxFQUNJNEosRUFBVSxVQUFVLFVBQVksU0FBVTVKLEVBQVEsQ0FDOUMsSUFBSXNFLEVBQU8sS0FBSywwQkFBMEIsQ0FDdEMsYUFBYyxhQUNkLFFBQVMsRUFDckIsQ0FBUyxFQUNELE9BQU8sS0FBSyxPQUFPLEtBQUtBLEVBQU10RSxDQUFNLENBQzVDLEVBQ0k0SixFQUFVLFVBQVUsWUFBYyxTQUFVNUosRUFBUSxDQUNoRCxJQUFJNkksRUFBVTdJLEVBQU8sUUFBUzBKLEVBQU9OLFNBQU9wSixFQUFRLENBQUMsU0FBUyxDQUFDLEVBQzNEc0UsRUFBTyxLQUFLLDBCQUEwQixDQUN0QyxhQUFjLFlBQ2QsUUFBU3VFLENBQ3JCLENBQVMsRUFDRCxPQUFPLEtBQUssT0FBTyxJQUFJdkUsRUFBTTBFLFdBQVMsQ0FBRSxFQUFFVSxDQUFJLENBQUMsQ0FDdkQsRUFDSUUsRUFBVSxVQUFVLGVBQWlCLFNBQVU1SixFQUFRLENBS25ELElBQUlzRSxFQUFPLEtBQUssMEJBQTBCLENBQ3RDLGFBQWMsWUFDZCxRQUFTLEVBQ3JCLENBQVMsRUFDRCxPQUFPLEtBQUssT0FBTyxJQUFJQSxFQUFNdEUsQ0FBTSxDQUMzQyxFQUNJNEosRUFBVSxVQUFVLFVBQVksU0FBVTVKLEVBQVEsQ0FDOUMsSUFBSTZJLEVBQVU3SSxFQUFPLFFBQVMwSixFQUFPTixTQUFPcEosRUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUMzRHNFLEVBQU8sS0FBSywwQkFBMEIsQ0FDdEMsYUFBYyxVQUNkLFFBQVN1RSxDQUNyQixDQUFTLEVBQ0QsT0FBTyxLQUFLLE9BQU8sSUFBSXZFLEVBQU0wRSxXQUFTLENBQUUsRUFBRVUsQ0FBSSxDQUFDLENBQ3ZELEVBQ0lFLEVBQVUsVUFBVSxhQUFlLFNBQVU1SixFQUFRLENBS2pELElBQUlzRSxFQUFPLEtBQUssMEJBQTBCLENBQ3RDLGFBQWMsVUFDZCxRQUFTLEVBQ3JCLENBQVMsRUFDRCxPQUFPLEtBQUssT0FBTyxJQUFJQSxFQUFNdEUsQ0FBTSxDQUMzQyxFQUNJNEosRUFBVSxVQUFVLG1CQUFxQixTQUFVNUosRUFBUSxDQUN2RCxJQUFJc0UsRUFBTyxLQUFLLDBCQUEwQixDQUN0QyxhQUFjLHNCQUMxQixDQUFTLEVBQ0QsT0FBTyxLQUFLLE9BQU8sSUFBSUEsRUFBTXRFLENBQU0sQ0FDM0MsRUFDSTRKLEVBQVUsVUFBVSxhQUFlLFNBQVU1SixFQUFRLENBQ2pELElBQUk2SSxFQUFVN0ksRUFBTyxRQUFTMEosRUFBT04sU0FBT3BKLEVBQVEsQ0FBQyxTQUFTLENBQUMsRUFDM0RzRSxFQUFPLEtBQUssMEJBQTBCLENBQ3RDLGFBQWMsYUFDZCxRQUFTdUUsQ0FDckIsQ0FBUyxFQUNELE9BQU8sS0FBSyxPQUFPLElBQUl2RSxFQUFNMEUsV0FBUyxDQUFFLEVBQUVVLENBQUksQ0FBQyxDQUN2RCxFQUNJRSxFQUFVLFVBQVUsZ0JBQWtCLFNBQVU1SixFQUFRLENBS3BELElBQUlzRSxFQUFPLEtBQUssMEJBQTBCLENBQ3RDLGFBQWMsYUFDZCxRQUFTLEVBQ3JCLENBQVMsRUFDRCxPQUFPLEtBQUssT0FBTyxJQUFJQSxFQUFNdEUsQ0FBTSxDQUMzQyxFQUNJNEosRUFBVSxVQUFVLGdCQUFrQixTQUFVNUosRUFBUSxDQUNwRCxJQUFJNkksRUFBVTdJLEVBQU8sUUFBUzBKLEVBQU9OLFNBQU9wSixFQUFRLENBQUMsU0FBUyxDQUFDLEVBQzNEc0UsRUFBTyxLQUFLLDBCQUEwQixDQUN0QyxhQUFjLGdCQUNkLFFBQVN1RSxDQUNyQixDQUFTLEVBQ0QsT0FBTyxLQUFLLE9BQU8sSUFBSXZFLEVBQU0wRSxXQUFTLENBQUUsRUFBRVUsQ0FBSSxDQUFDLENBQ3ZELEVBQ0lFLEVBQVUsVUFBVSxtQkFBcUIsU0FBVTVKLEVBQVEsQ0FDdkQsSUFBSXNFLEVBQU8sS0FBSywwQkFBMEIsQ0FDdEMsYUFBYyxnQkFDZCxRQUFTLEVBQ3JCLENBQVMsRUFDRCxPQUFPLEtBQUssT0FBTyxJQUFJQSxFQUFNdEUsQ0FBTSxDQUMzQyxFQUNJNEosRUFBVSxVQUFVLHdCQUEwQixTQUFVNUosRUFBUSxDQUM1RCxJQUFJNkksRUFBVTdJLEVBQU8sUUFBUzBKLEVBQU9OLFNBQU9wSixFQUFRLENBQUMsU0FBUyxDQUFDLEVBQzNEc0UsRUFBTyxLQUFLLDBCQUEwQixDQUN0QyxhQUFjLDRCQUNkLFFBQVN1RSxDQUNyQixDQUFTLEVBQ0QsT0FBTyxLQUFLLE9BQU8sSUFBSXZFLEVBQU0wRSxXQUFTLENBQUUsRUFBRVUsQ0FBSSxDQUFDLENBQ3ZELEVBQ0lFLEVBQVUsVUFBVSwyQkFBNkIsU0FBVTVKLEVBQVEsQ0FDL0QsSUFBSXNFLEVBQU8sS0FBSywwQkFBMEIsQ0FDdEMsYUFBYyw0QkFDZCxRQUFTLEVBQ3JCLENBQVMsRUFDRCxPQUFPLEtBQUssT0FBTyxJQUFJQSxFQUFNdEUsQ0FBTSxDQUMzQyxFQUNJNEosRUFBVSxVQUFVLDBCQUE0QixTQUFVNUosRUFBUSxDQUM5RCxJQUFJNkksRUFBVTdJLEVBQU8sUUFBUzBKLEVBQU9OLFNBQU9wSixFQUFRLENBQUMsU0FBUyxDQUFDLEVBQzNEc0UsRUFBTyxLQUFLLDBCQUEwQixDQUN0QyxhQUFjLDhCQUNkLFFBQVN1RSxDQUNyQixDQUFTLEVBQ0QsT0FBTyxLQUFLLE9BQU8sSUFBSXZFLEVBQU1vRixDQUFJLENBQ3pDLEVBQ0lFLEVBQVUsVUFBVSw2QkFBK0IsU0FBVTVKLEVBQVEsQ0FDakUsSUFBSXNFLEVBQU8sS0FBSywwQkFBMEIsQ0FDdEMsYUFBYyw4QkFDZCxRQUFTLEVBQ3JCLENBQVMsRUFDRCxPQUFPLEtBQUssT0FBTyxJQUFJQSxFQUFNdEUsQ0FBTSxDQUMzQyxFQUNJNEosRUFBVSxVQUFVLHlCQUEyQixTQUFVNUosRUFBUSxDQUM3RCxJQUFJNkksRUFBVTdJLEVBQU8sUUFBUzBKLEVBQU9OLFNBQU9wSixFQUFRLENBQUMsU0FBUyxDQUFDLEVBQzNEc0UsRUFBTyxLQUFLLDBCQUEwQixDQUN0QyxhQUFjLDZCQUNkLFFBQVN1RSxDQUNyQixDQUFTLEVBQ0QsT0FBTyxLQUFLLE9BQU8sSUFBSXZFLEVBQU1vRixDQUFJLENBQ3pDLEVBQ0lFLEVBQVUsVUFBVSw0QkFBOEIsU0FBVTVKLEVBQVEsQ0FDaEUsSUFBSXNFLEVBQU8sS0FBSywwQkFBMEIsQ0FDdEMsYUFBYyw2QkFDZCxRQUFTLEVBQ3JCLENBQVMsRUFDRCxPQUFPLEtBQUssT0FBTyxJQUFJQSxFQUFNdEUsQ0FBTSxDQUMzQyxFQUNJNEosRUFBVSxVQUFVLFdBQWEsU0FBVTVKLEVBQVEsQ0FDL0MsSUFBSTZJLEVBQVU3SSxFQUFPLFFBQVMwSixFQUFPTixTQUFPcEosRUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUMzRHNFLEVBQU8sS0FBSywwQkFBMEIsQ0FDdEMsYUFBYyxjQUNkLFFBQVN1RSxDQUNyQixDQUFTLEVBQ0QsT0FBTyxLQUFLLE9BQU8sSUFBSXZFLEVBQU1vRixDQUFJLENBQ3pDLEVBQ0lFLEVBQVUsVUFBVSxjQUFnQixTQUFVNUosRUFBUSxDQUNsRCxJQUFJc0UsRUFBTyxLQUFLLDBCQUEwQixDQUN0QyxhQUFjLGNBQ2QsUUFBUyxFQUNyQixDQUFTLEVBQ0QsT0FBTyxLQUFLLE9BQU8sSUFBSUEsRUFBTXRFLENBQU0sQ0FDM0MsRUFDSTRKLEVBQVUsVUFBVSxjQUFnQixTQUFVNUosRUFBUSxDQUNsRCxJQUFJNkksRUFBVTdJLEVBQU8sUUFBUzBKLEVBQU9OLFNBQU9wSixFQUFRLENBQUMsU0FBUyxDQUFDLEVBQzNEc0UsRUFBTyxLQUFLLDBCQUEwQixDQUN0QyxhQUFjLGNBQ2QsUUFBU3VFLENBQ3JCLENBQVMsRUFDRCxPQUFPLEtBQUssT0FBTyxJQUFJdkUsRUFBTW9GLENBQUksQ0FDekMsRUFDSUUsRUFBVSxVQUFVLGlCQUFtQixTQUFVNUosRUFBUSxDQUNyRCxJQUFJc0UsRUFBTyxLQUFLLDBCQUEwQixDQUN0QyxhQUFjLGNBQ2QsUUFBUyxFQUNyQixDQUFTLEVBQ0QsT0FBTyxLQUFLLE9BQU8sSUFBSUEsRUFBTXRFLENBQU0sQ0FDM0MsRUFDVzRKLENBQ1gsRUFBRVgsZUFBYSxVQUFVLEVBQ1JVLFlBQUEsVUFBRyxzRUN6WGhCNUQsWUFBYTl4QixnQkFBUUEsZUFBSyxXQUFlLFVBQVksQ0FDckQsSUFBSSt4QixFQUFnQixTQUFVQyxFQUFHcHRCLEVBQUcsQ0FDaEMsT0FBQW10QixFQUFnQixPQUFPLGdCQUNsQixDQUFFLFVBQVcsQ0FBQSxhQUFnQixPQUFTLFNBQVVDLEVBQUdwdEIsRUFBRyxDQUFFb3RCLEVBQUUsVUFBWXB0QixDQUFFLEdBQ3pFLFNBQVVvdEIsRUFBR3B0QixFQUFHLENBQUUsUUFBUzBjLEtBQUsxYyxFQUFPLE9BQU8sVUFBVSxlQUFlLEtBQUtBLEVBQUcwYyxDQUFDLElBQUcwUSxFQUFFMVEsQ0FBQyxFQUFJMWMsRUFBRTBjLENBQUMsSUFDMUZ5USxFQUFjQyxFQUFHcHRCLENBQUMsQ0FDakMsRUFDSSxPQUFPLFNBQVVvdEIsRUFBR3B0QixFQUFHLENBQ25CLEdBQUksT0FBT0EsR0FBTSxZQUFjQSxJQUFNLEtBQ2pDLE1BQU0sSUFBSSxVQUFVLHVCQUF5QixPQUFPQSxDQUFDLEVBQUksK0JBQStCLEVBQzVGbXRCLEVBQWNDLEVBQUdwdEIsQ0FBQyxFQUNsQixTQUFTcXRCLEdBQUssQ0FBRSxLQUFLLFlBQWNELENBQUksQ0FDdkNBLEVBQUUsVUFBWXB0QixJQUFNLEtBQU8sT0FBTyxPQUFPQSxDQUFDLEdBQUtxdEIsRUFBRyxVQUFZcnRCLEVBQUUsVUFBVyxJQUFJcXRCLEVBQ3ZGLENBQ0EsSUFDQSxPQUFPLGVBQWU4RCwwQkFBUyxhQUFjLENBQUUsTUFBTyxFQUFJLENBQUUsRUFDN0JBLDBCQUFBLHdCQUFHLE9BQ2xDLElBQUksd0JBQXlDLFNBQVU1RCxFQUFRLENBQzNETCxZQUFVa0UsRUFBeUI3RCxDQUFNLEVBQ3pDLFNBQVM2RCxFQUF3QnpELEVBQVMsQ0FDdEMsSUFBSUQsRUFBUUgsRUFBTyxLQUFLLEtBQU1JLENBQU8sR0FBSyxLQUMxQyxPQUFBRCxFQUFNLEtBQU8sMEJBQ2JBLEVBQU0sUUFBVUMsRUFHaEIsT0FBTyxlQUFlRCxFQUFPMEQsRUFBd0IsU0FBUyxFQUN2RDFELENBQ1YsQ0FDRCxPQUFPMEQsQ0FDWCxFQUFFLEtBQUssRUFDd0JELDBCQUFBLHdCQUFHLHdEQzlCOUJqRSxZQUFhOXhCLGdCQUFRQSxlQUFLLFdBQWUsVUFBWSxDQUNyRCxJQUFJK3hCLEVBQWdCLFNBQVVDLEVBQUdwdEIsRUFBRyxDQUNoQyxPQUFBbXRCLEVBQWdCLE9BQU8sZ0JBQ2xCLENBQUUsVUFBVyxDQUFBLGFBQWdCLE9BQVMsU0FBVUMsRUFBR3B0QixFQUFHLENBQUVvdEIsRUFBRSxVQUFZcHRCLENBQUUsR0FDekUsU0FBVW90QixFQUFHcHRCLEVBQUcsQ0FBRSxRQUFTMGMsS0FBSzFjLEVBQU8sT0FBTyxVQUFVLGVBQWUsS0FBS0EsRUFBRzBjLENBQUMsSUFBRzBRLEVBQUUxUSxDQUFDLEVBQUkxYyxFQUFFMGMsQ0FBQyxJQUMxRnlRLEVBQWNDLEVBQUdwdEIsQ0FBQyxDQUNqQyxFQUNJLE9BQU8sU0FBVW90QixFQUFHcHRCLEVBQUcsQ0FDbkIsR0FBSSxPQUFPQSxHQUFNLFlBQWNBLElBQU0sS0FDakMsTUFBTSxJQUFJLFVBQVUsdUJBQXlCLE9BQU9BLENBQUMsRUFBSSwrQkFBK0IsRUFDNUZtdEIsRUFBY0MsRUFBR3B0QixDQUFDLEVBQ2xCLFNBQVNxdEIsR0FBSyxDQUFFLEtBQUssWUFBY0QsQ0FBSSxDQUN2Q0EsRUFBRSxVQUFZcHRCLElBQU0sS0FBTyxPQUFPLE9BQU9BLENBQUMsR0FBS3F0QixFQUFHLFVBQVlydEIsRUFBRSxVQUFXLElBQUlxdEIsRUFDdkYsQ0FDQSxJQUNBLE9BQU8sZUFBZWdFLHlCQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUksQ0FBRSxFQUM5QkEseUJBQUEsdUJBQUcsT0FDakMsSUFBSSx1QkFBd0MsU0FBVTlELEVBQVEsQ0FDMURMLFlBQVVvRSxFQUF3Qi9ELENBQU0sRUFDeEMsU0FBUytELEVBQXVCQyxFQUF3QkMsRUFBb0JDLEVBQWlCamlCLEVBQU9raUIsRUFBYSxDQUM3RyxJQUFJaEUsRUFBUSxLQUNSaUUsRUFBd0JGLEVBQWtCRCxFQUFtQixPQUM3REksRUFBYU4sRUFBdUIsa0JBQWtCSyxFQUF1Qm5pQixFQUFPa2lCLENBQVcsRUFDL0YvRCxFQUFVMkQsRUFBdUIsa0JBQWtCSyxFQUF1QkYsRUFBaUJHLENBQVUsRUFDekcsT0FBQWxFLEVBQVFILEVBQU8sS0FBSyxLQUFNSSxDQUFPLEdBQUssS0FDdENELEVBQU0sS0FBTyx5QkFDYkEsRUFBTSx1QkFBeUI2RCxFQUMvQjdELEVBQU0sbUJBQXFCOEQsRUFDM0I5RCxFQUFNLE1BQVFsZSxFQUNka2UsRUFBTSxXQUFha0UsRUFDbkJsRSxFQUFNLFFBQVVDLEVBQ2hCRCxFQUFNLHNCQUF3QmlFLEVBQzlCakUsRUFBTSxnQkFBa0IrRCxFQUd4QixPQUFPLGVBQWUvRCxFQUFPNEQsRUFBdUIsU0FBUyxFQUN0RDVELENBQ1YsQ0FDRCxPQUFBNEQsRUFBdUIsZ0JBQWtCLFNBQVVPLEVBQVEsQ0FFdkQsSUFBSUMsRUFBZSxDQUFBLEVBQ25CLGNBQU8sS0FBS0QsQ0FBTSxFQUFFLFFBQVEsU0FBVUUsRUFBVSxDQUM1QyxJQUFJanNCLEVBQVNpc0IsRUFBUyxNQUFNLGtCQUFrQixFQUMxQ2pzQixHQUNBZ3NCLEVBQWEsS0FBSyxPQUFPaHNCLEVBQU8sQ0FBQyxDQUFDLENBQUMsQ0FFbkQsQ0FBUyxFQUNNZ3NCLEVBQWEsT0FBUyxFQUFJLEtBQUssSUFBSSxNQUFNLEtBQU1BLENBQVksRUFBSSxJQUM5RSxFQUNJUixFQUF1QixrQkFBb0IsU0FBVUssRUFBdUJuaUIsRUFBT2tpQixFQUFhLENBQzVGLEdBQUlsaUIsRUFBTSxtQkFBcUIsUUFBYUEsRUFBTSxPQUFRLENBQ3RELElBQUl3aUIsRUFBbUJWLEVBQXVCLGdCQUFnQjloQixFQUFNLE1BQU0sRUFDMUUsR0FBSXdpQixJQUFxQixLQUNyQixPQUFRTCxFQUNKbmlCLEVBQU0saUJBQW1Ca2lCLEVBQ3pCTSxDQUVYLENBRVQsRUFDSVYsRUFBdUIsa0JBQW9CLFNBQVVLLEVBQXVCRixFQUFpQkcsRUFBWSxDQUNyRyxJQUFJakUsRUFBVSxHQUNkLE9BQUlpRSxJQUFlLFNBQ2ZqRSxFQUFVLGdDQUFnQyxPQUFPaUUsRUFBWSxLQUFLLEdBRXRFakUsR0FBVyxHQUFHLE9BQU9nRSxFQUF1QixHQUFHLEVBQUUsT0FBT0YsRUFBaUIscUNBQXFDLEVBQ3ZHOUQsQ0FDZixFQUNXMkQsQ0FDWCxFQUFFLEtBQUssRUFDdUJELHlCQUFBLHVCQUFHLG9EQ3RFN0JuRSxZQUFhOXhCLGdCQUFRQSxlQUFLLFdBQWUsVUFBWSxDQUNyRCxJQUFJK3hCLEVBQWdCLFNBQVVDLEVBQUdwdEIsRUFBRyxDQUNoQyxPQUFBbXRCLEVBQWdCLE9BQU8sZ0JBQ2xCLENBQUUsVUFBVyxDQUFBLGFBQWdCLE9BQVMsU0FBVUMsRUFBR3B0QixFQUFHLENBQUVvdEIsRUFBRSxVQUFZcHRCLENBQUUsR0FDekUsU0FBVW90QixFQUFHcHRCLEVBQUcsQ0FBRSxRQUFTMGMsS0FBSzFjLEVBQU8sT0FBTyxVQUFVLGVBQWUsS0FBS0EsRUFBRzBjLENBQUMsSUFBRzBRLEVBQUUxUSxDQUFDLEVBQUkxYyxFQUFFMGMsQ0FBQyxJQUMxRnlRLEVBQWNDLEVBQUdwdEIsQ0FBQyxDQUNqQyxFQUNJLE9BQU8sU0FBVW90QixFQUFHcHRCLEVBQUcsQ0FDbkIsR0FBSSxPQUFPQSxHQUFNLFlBQWNBLElBQU0sS0FDakMsTUFBTSxJQUFJLFVBQVUsdUJBQXlCLE9BQU9BLENBQUMsRUFBSSwrQkFBK0IsRUFDNUZtdEIsRUFBY0MsRUFBR3B0QixDQUFDLEVBQ2xCLFNBQVNxdEIsR0FBSyxDQUFFLEtBQUssWUFBY0QsQ0FBSSxDQUN2Q0EsRUFBRSxVQUFZcHRCLElBQU0sS0FBTyxPQUFPLE9BQU9BLENBQUMsR0FBS3F0QixFQUFHLFVBQVlydEIsRUFBRSxVQUFXLElBQUlxdEIsRUFDdkYsQ0FDQSxJQUNBLE9BQU8sZUFBZTRFLHNCQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUksQ0FBRSxFQUNqQ0Esc0JBQUEsb0JBQUcsT0FDOUIsSUFBSSxvQkFBcUMsU0FBVTFFLEVBQVEsQ0FDdkRMLFlBQVVnRixFQUFxQjNFLENBQU0sRUFDckMsU0FBUzJFLEVBQW9CMWlCLEVBQU8sQ0FDaEMsSUFBSWtlLEVBQVEsS0FDUjZCLEVBQUsyQyxFQUFvQixnQ0FBZ0MxaUIsQ0FBSyxFQUFHcUIsRUFBTzBlLEVBQUcsS0FBTTRDLEVBQW1CNUMsRUFBRyxpQkFDM0csT0FBQTdCLEVBQVFILEVBQU8sS0FBSyxLQUFNMWMsRUFBSyxPQUFPLEdBQUssS0FDM0M2YyxFQUFNLEtBQU8sc0JBQ2JBLEVBQU0sR0FBSzdjLEVBQUssR0FDaEI2YyxFQUFNLEtBQU83YyxFQUFLLEtBQ2xCNmMsRUFBTSxPQUFTN2MsRUFBSyxPQUNwQjZjLEVBQU0sT0FBU2xlLEVBQU0sT0FDckJrZSxFQUFNLGlCQUFtQnlFLEVBQ3pCekUsRUFBTSxRQUFVbGUsRUFBTSxRQUN0QmtlLEVBQU0sUUFBVSxJQUFJLE9BQU9sZSxFQUFNLE9BQVEsS0FBSyxFQUFFLE9BQU9rZSxFQUFNLEtBQU0sSUFBSSxFQUFFLE9BQU9BLEVBQU0sUUFBUyxJQUFJLEVBQUUsT0FBT0EsRUFBTSxHQUFJLEdBQUcsRUFHckgsTUFBTSxtQkFDTixNQUFNLGtCQUFrQkEsRUFBT3dFLENBQW1CLEVBSXRELE9BQU8sZUFBZXhFLEVBQU93RSxFQUFvQixTQUFTLEVBQ25EeEUsQ0FDVixDQUNELE9BQUF3RSxFQUFvQiwrQkFBaUMsU0FBVXR6QixFQUFTLENBQ3BFLFFBQVMvQixFQUFJLEVBQUdBLEVBQUkrQixFQUFRLE9BQVEvQixJQUNoQyxHQUFJLE9BQU8sS0FBSytCLEVBQVEvQixDQUFDLENBQUMsRUFBRSxTQUFXLEVBQUcsQ0FDdEMsSUFBSWdVLEVBQU9qUyxFQUFRL0IsQ0FBQyxFQUNwQixNQUFPLENBQUUsS0FBTWdVLEVBQU0saUJBQWtCaFUsQ0FBQyxDQUMzQyxDQUVMLE1BQU0sTUFBTSw0SEFBNEgsQ0FDaEosRUFDSXExQixFQUFvQixnQ0FBa0MsU0FBVTFpQixFQUFPLENBQ25FLE1BQUksWUFBYUEsRUFBTSxLQUNaMGlCLEVBQW9CLCtCQUErQjFpQixFQUFNLEtBQUssT0FBTyxFQUV6RSxDQUFFLEtBQU1BLEVBQU0sS0FDN0IsRUFDVzBpQixDQUNYLEVBQUUsS0FBSyxFQUNvQkQsc0JBQUEsb0JBQUcsaUNDMUQ5QixJQUFJRyxFQUFtQmgzQixnQkFBUUEsZUFBSyxrQkFBcUIsT0FBTyxPQUFVLFNBQVNzd0IsRUFBR3JvQixFQUFHc29CLEVBQUcwRyxFQUFJLENBQ3hGQSxJQUFPLFNBQVdBLEVBQUsxRyxHQUMzQixJQUFJMkcsRUFBTyxPQUFPLHlCQUF5Qmp2QixFQUFHc29CLENBQUMsR0FDM0MsQ0FBQzJHLElBQVMsUUFBU0EsRUFBTyxDQUFDanZCLEVBQUUsV0FBYWl2QixFQUFLLFVBQVlBLEVBQUssaUJBQ2xFQSxFQUFPLENBQUUsV0FBWSxHQUFNLElBQUssVUFBVyxDQUFFLE9BQU9qdkIsRUFBRXNvQixDQUFDLENBQUUsSUFFM0QsT0FBTyxlQUFlRCxFQUFHMkcsRUFBSUMsQ0FBSSxDQUNwQyxFQUFLLFNBQVM1RyxFQUFHcm9CLEVBQUdzb0IsRUFBRzBHLEVBQUksQ0FDcEJBLElBQU8sU0FBV0EsRUFBSzFHLEdBQzNCRCxFQUFFMkcsQ0FBRSxFQUFJaHZCLEVBQUVzb0IsQ0FBQyxDQUNkLEdBQ0c0RyxFQUFnQm4zQixnQkFBUUEsZUFBSyxjQUFpQixTQUFTaUksRUFBRzBwQixFQUFTLENBQ25FLFFBQVNyUSxLQUFLclosRUFBT3FaLElBQU0sV0FBYSxDQUFDLE9BQU8sVUFBVSxlQUFlLEtBQUtxUSxFQUFTclEsQ0FBQyxHQUFHMFYsRUFBZ0JyRixFQUFTMXBCLEVBQUdxWixDQUFDLENBQzVILEVBQ0EsT0FBTyxlQUFjcVEsRUFBVSxhQUFjLENBQUUsTUFBTyxFQUFJLENBQUUsRUFDNUR3RixFQUFhckUsMEJBQXNDbkIsQ0FBTyxFQUMxRHdGLEVBQWFwRSx5QkFBcUNwQixDQUFPLEVBQ3pEd0YsRUFBYUMsc0JBQWtDekYsQ0FBTyxXQ2pCdEQsSUFBSUcsWUFBYTl4QixnQkFBUUEsZUFBSyxXQUFlLFVBQVksQ0FDckQsSUFBSSt4QixFQUFnQixTQUFVQyxFQUFHcHRCLEVBQUcsQ0FDaEMsT0FBQW10QixFQUFnQixPQUFPLGdCQUNsQixDQUFFLFVBQVcsQ0FBQSxhQUFnQixPQUFTLFNBQVVDLEVBQUdwdEIsRUFBRyxDQUFFb3RCLEVBQUUsVUFBWXB0QixDQUFFLEdBQ3pFLFNBQVVvdEIsRUFBR3B0QixFQUFHLENBQUUsUUFBUzBjLEtBQUsxYyxFQUFPLE9BQU8sVUFBVSxlQUFlLEtBQUtBLEVBQUcwYyxDQUFDLElBQUcwUSxFQUFFMVEsQ0FBQyxFQUFJMWMsRUFBRTBjLENBQUMsSUFDMUZ5USxFQUFjQyxFQUFHcHRCLENBQUMsQ0FDakMsRUFDSSxPQUFPLFNBQVVvdEIsRUFBR3B0QixFQUFHLENBQ25CLEdBQUksT0FBT0EsR0FBTSxZQUFjQSxJQUFNLEtBQ2pDLE1BQU0sSUFBSSxVQUFVLHVCQUF5QixPQUFPQSxDQUFDLEVBQUksK0JBQStCLEVBQzVGbXRCLEVBQWNDLEVBQUdwdEIsQ0FBQyxFQUNsQixTQUFTcXRCLEdBQUssQ0FBRSxLQUFLLFlBQWNELENBQUksQ0FDdkNBLEVBQUUsVUFBWXB0QixJQUFNLEtBQU8sT0FBTyxPQUFPQSxDQUFDLEdBQUtxdEIsRUFBRyxVQUFZcnRCLEVBQUUsVUFBVyxJQUFJcXRCLEVBQ3ZGLENBQ0EsSUFDSThDLFdBQVkvMEIsZ0JBQVFBLGVBQUssVUFBYSxVQUFZLENBQ2xEKzBCLGtCQUFXLE9BQU8sUUFBVSxTQUFTcGIsRUFBRyxDQUNwQyxRQUFTZ04sRUFBR2xsQixFQUFJLEVBQUdxTyxFQUFJLFVBQVUsT0FBUXJPLEVBQUlxTyxFQUFHck8sSUFBSyxDQUNqRGtsQixFQUFJLFVBQVVsbEIsQ0FBQyxFQUNmLFFBQVM2ZixLQUFLcUYsRUFBTyxPQUFPLFVBQVUsZUFBZSxLQUFLQSxFQUFHckYsQ0FBQyxJQUMxRDNILEVBQUUySCxDQUFDLEVBQUlxRixFQUFFckYsQ0FBQyxFQUNqQixDQUNELE9BQU8zSCxDQUNmLEVBQ1dvYixXQUFTLE1BQU0sS0FBTSxTQUFTLENBQ3pDLEVBQ0kvQixZQUFhaHpCLGdCQUFRQSxlQUFLLFdBQWMsU0FBVWl6QixFQUFTQyxFQUFZQyxFQUFHQyxFQUFXLENBQ3JGLFNBQVNDLEVBQU1udkIsRUFBTyxDQUFFLE9BQU9BLGFBQWlCaXZCLEVBQUlqdkIsRUFBUSxJQUFJaXZCLEVBQUUsU0FBVWhoQixFQUFTLENBQUVBLEVBQVFqTyxDQUFLLENBQUUsQ0FBRSxDQUFJLENBQzVHLE9BQU8sSUFBS2l2QixJQUFNQSxFQUFJLFVBQVUsU0FBVWhoQixFQUFTQyxFQUFRLENBQ3ZELFNBQVNraEIsRUFBVXB2QixFQUFPLENBQUUsR0FBSSxDQUFFcXZCLEVBQUtILEVBQVUsS0FBS2x2QixDQUFLLENBQUMsQ0FBRSxPQUFVeVAsRUFBRyxDQUFFdkIsRUFBT3VCLENBQUMsRUFBTSxDQUMzRixTQUFTNmYsRUFBU3R2QixFQUFPLENBQUUsR0FBSSxDQUFFcXZCLEVBQUtILEVBQVUsTUFBU2x2QixDQUFLLENBQUMsQ0FBSSxPQUFReVAsRUFBRyxDQUFFdkIsRUFBT3VCLENBQUMsRUFBTSxDQUM5RixTQUFTNGYsRUFBSzdvQixFQUFRLENBQUVBLEVBQU8sS0FBT3lILEVBQVF6SCxFQUFPLEtBQUssRUFBSTJvQixFQUFNM29CLEVBQU8sS0FBSyxFQUFFLEtBQUs0b0IsRUFBV0UsQ0FBUSxDQUFJLENBQzlHRCxHQUFNSCxFQUFZQSxFQUFVLE1BQU1ILEVBQVNDLEdBQWMsQ0FBRSxDQUFBLEdBQUcsS0FBSSxDQUFFLENBQzVFLENBQUssQ0FDTCxFQUNJTyxjQUFlenpCLGdCQUFRQSxlQUFLLGFBQWdCLFNBQVVpekIsRUFBU3JILEVBQU0sQ0FDckUsSUFBSTFhLEVBQUksQ0FBRSxNQUFPLEVBQUcsS0FBTSxVQUFXLENBQUUsR0FBSXlJLEVBQUUsQ0FBQyxFQUFJLEVBQUcsTUFBTUEsRUFBRSxDQUFDLEVBQUcsT0FBT0EsRUFBRSxDQUFDLENBQUksRUFBRSxLQUFNLENBQUUsRUFBRSxJQUFLLENBQUEsQ0FBSSxFQUFFK1osRUFBR0MsRUFBR2hhLEVBQUdpYSxFQUMvRyxPQUFPQSxFQUFJLENBQUUsS0FBTUMsRUFBSyxDQUFDLEVBQUcsTUFBU0EsRUFBSyxDQUFDLEVBQUcsT0FBVUEsRUFBSyxDQUFDLENBQUcsRUFBRSxPQUFPLFFBQVcsYUFBZUQsRUFBRSxPQUFPLFFBQVEsRUFBSSxVQUFXLENBQUUsT0FBTyxJQUFPLEdBQUdBLEVBQ3ZKLFNBQVNDLEVBQUsvakIsRUFBRyxDQUFFLE9BQU8sU0FBVWlDLEVBQUcsQ0FBRSxPQUFPd2hCLEVBQUssQ0FBQ3pqQixFQUFHaUMsQ0FBQyxDQUFDLENBQUksQ0FBRyxDQUNsRSxTQUFTd2hCLEVBQUtPLEVBQUksQ0FDZCxHQUFJSixFQUFHLE1BQU0sSUFBSSxVQUFVLGlDQUFpQyxFQUM1RCxLQUFPRSxJQUFNQSxFQUFJLEVBQUdFLEVBQUcsQ0FBQyxJQUFNNWlCLEVBQUksSUFBS0EsR0FBRyxHQUFJLENBQzFDLEdBQUl3aUIsRUFBSSxFQUFHQyxJQUFNaGEsRUFBSW1hLEVBQUcsQ0FBQyxFQUFJLEVBQUlILEVBQUUsT0FBWUcsRUFBRyxDQUFDLEVBQUlILEVBQUUsU0FBY2hhLEVBQUlnYSxFQUFFLFNBQWNoYSxFQUFFLEtBQUtnYSxDQUFDLEVBQUcsR0FBS0EsRUFBRSxPQUFTLEVBQUVoYSxFQUFJQSxFQUFFLEtBQUtnYSxFQUFHRyxFQUFHLENBQUMsQ0FBQyxHQUFHLEtBQU0sT0FBT25hLEVBRTNKLE9BRElnYSxFQUFJLEVBQUdoYSxJQUFHbWEsRUFBSyxDQUFDQSxFQUFHLENBQUMsRUFBSSxFQUFHbmEsRUFBRSxLQUFLLEdBQzlCbWEsRUFBRyxDQUFDLEVBQUMsQ0FDVCxJQUFLLEdBQUcsSUFBSyxHQUFHbmEsRUFBSW1hLEVBQUksTUFDeEIsSUFBSyxHQUFHLE9BQUE1aUIsRUFBRSxRQUFnQixDQUFFLE1BQU80aUIsRUFBRyxDQUFDLEVBQUcsS0FBTSxFQUFLLEVBQ3JELElBQUssR0FBRzVpQixFQUFFLFFBQVN5aUIsRUFBSUcsRUFBRyxDQUFDLEVBQUdBLEVBQUssQ0FBQyxDQUFDLEVBQUcsU0FDeEMsSUFBSyxHQUFHQSxFQUFLNWlCLEVBQUUsSUFBSSxNQUFPQSxFQUFFLEtBQUssSUFBRyxFQUFJLFNBQ3hDLFFBQ0ksR0FBTXlJLEVBQUl6SSxFQUFFLEtBQU0sRUFBQXlJLEVBQUlBLEVBQUUsT0FBUyxHQUFLQSxFQUFFQSxFQUFFLE9BQVMsQ0FBQyxLQUFPbWEsRUFBRyxDQUFDLElBQU0sR0FBS0EsRUFBRyxDQUFDLElBQU0sR0FBSSxDQUFFNWlCLEVBQUksRUFBRyxRQUFXLENBQzVHLEdBQUk0aUIsRUFBRyxDQUFDLElBQU0sSUFBTSxDQUFDbmEsR0FBTW1hLEVBQUcsQ0FBQyxFQUFJbmEsRUFBRSxDQUFDLEdBQUttYSxFQUFHLENBQUMsRUFBSW5hLEVBQUUsQ0FBQyxHQUFLLENBQUV6SSxFQUFFLE1BQVE0aUIsRUFBRyxDQUFDLEVBQUcsS0FBUSxDQUN0RixHQUFJQSxFQUFHLENBQUMsSUFBTSxHQUFLNWlCLEVBQUUsTUFBUXlJLEVBQUUsQ0FBQyxFQUFHLENBQUV6SSxFQUFFLE1BQVF5SSxFQUFFLENBQUMsRUFBR0EsRUFBSW1hLEVBQUksS0FBUSxDQUNyRSxHQUFJbmEsR0FBS3pJLEVBQUUsTUFBUXlJLEVBQUUsQ0FBQyxFQUFHLENBQUV6SSxFQUFFLE1BQVF5SSxFQUFFLENBQUMsRUFBR3pJLEVBQUUsSUFBSSxLQUFLNGlCLENBQUUsRUFBRyxLQUFRLENBQy9EbmEsRUFBRSxDQUFDLEdBQUd6SSxFQUFFLElBQUksSUFBRyxFQUNuQkEsRUFBRSxLQUFLLElBQUssRUFBRSxRQUNyQixDQUNENGlCLEVBQUtsSSxFQUFLLEtBQUtxSCxFQUFTL2hCLENBQUMsQ0FDNUIsT0FBUXlDLEVBQUcsQ0FBRW1nQixFQUFLLENBQUMsRUFBR25nQixDQUFDLEVBQUdnZ0IsRUFBSSxDQUFFLFFBQVcsQ0FBRUQsRUFBSS9aLEVBQUksQ0FBSSxDQUMxRCxHQUFJbWEsRUFBRyxDQUFDLEVBQUksRUFBRyxNQUFNQSxFQUFHLENBQUMsRUFBRyxNQUFPLENBQUUsTUFBT0EsRUFBRyxDQUFDLEVBQUlBLEVBQUcsQ0FBQyxFQUFJLE9BQVEsS0FBTSxHQUM3RSxDQUNMLEVBQ0lxQixTQUFVbjFCLGdCQUFRQSxlQUFLLFFBQVcsU0FBVTJtQixFQUFHLEVBQUcsQ0FDbEQsSUFBSSxFQUFJLENBQUEsRUFDUixRQUFTckYsS0FBS3FGLEVBQU8sT0FBTyxVQUFVLGVBQWUsS0FBS0EsRUFBR3JGLENBQUMsR0FBSyxFQUFFLFFBQVFBLENBQUMsRUFBSSxJQUM5RSxFQUFFQSxDQUFDLEVBQUlxRixFQUFFckYsQ0FBQyxHQUNkLEdBQUlxRixHQUFLLE1BQVEsT0FBTyxPQUFPLHVCQUEwQixXQUNyRCxRQUFTLEVBQUksRUFBR3JGLEVBQUksT0FBTyxzQkFBc0JxRixDQUFDLEVBQUcsRUFBSXJGLEVBQUUsT0FBUSxJQUMzRCxFQUFFLFFBQVFBLEVBQUUsQ0FBQyxDQUFDLEVBQUksR0FBSyxPQUFPLFVBQVUscUJBQXFCLEtBQUtxRixFQUFHckYsRUFBRSxDQUFDLENBQUMsSUFDekUsRUFBRUEsRUFBRSxDQUFDLENBQUMsRUFBSXFGLEVBQUVyRixFQUFFLENBQUMsQ0FBQyxHQUU1QixPQUFPLENBQ1gsRUFDSSxjQUFpQnRoQixnQkFBUUEsZUFBSyxlQUFrQixTQUFVdWpCLEVBQUk4VCxFQUFNQyxFQUFNLENBQzFFLEdBQUlBLEdBQVEsVUFBVSxTQUFXLEVBQUcsUUFBUzcxQixFQUFJLEVBQUdrUCxFQUFJMG1CLEVBQUssT0FBUUUsRUFBSTkxQixFQUFJa1AsRUFBR2xQLEtBQ3hFODFCLEdBQU0sRUFBRTkxQixLQUFLNDFCLE1BQ1JFLElBQUlBLEVBQUssTUFBTSxVQUFVLE1BQU0sS0FBS0YsRUFBTSxFQUFHNTFCLENBQUMsR0FDbkQ4MUIsRUFBRzkxQixDQUFDLEVBQUk0MUIsRUFBSzUxQixDQUFDLEdBR3RCLE9BQU84aEIsRUFBRyxPQUFPZ1UsR0FBTSxNQUFNLFVBQVUsTUFBTSxLQUFLRixDQUFJLENBQUMsQ0FDM0QsRUFDQSxPQUFPLGVBQWVHLGVBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSSxDQUFFLEVBQ3hDQSxlQUFBLGFBQUcsT0FDdkIsSUFBSUMsVUFBVTNFLE1BQ1ZrQyxlQUFlakMsYUFDZixrQkFBb0IsSUFDcEIscUJBQXVCLElBQ3ZCLHFCQUF1QixJQUN2QixrQkFBb0IsSUFDcEIsYUFBOEIsU0FBVVosRUFBUSxDQUNoREwsWUFBVTRGLEVBQWN2RixDQUFNLEVBQzlCLFNBQVN1RixFQUFheEMsRUFBUXlDLEVBQW1CaEQsRUFBYyxDQUMzRCxJQUFJckMsRUFBUUgsRUFBTyxLQUFLLEtBQU0rQyxFQUFRUCxDQUFZLEdBQUssS0FDdkQsT0FBQXJDLEVBQU0sa0JBQW9CcUYsRUFDMUJyRixFQUFNLDBCQUE0QixHQUMzQkEsQ0FDVixDQUNELE9BQUFvRixFQUFhLFVBQVUsVUFBWSxTQUFVM0wsRUFBUSxDQUNqRCxJQUFJc0UsRUFBTyxLQUFLLDBCQUEwQixDQUN0QyxhQUFjLFFBQzFCLENBQVMsRUFDRCxPQUFPLEtBQUssT0FBTyxJQUFJQSxFQUFNdEUsQ0FBTSxDQUMzQyxFQUNJMkwsRUFBYSxVQUFVLFVBQVksU0FBVTNMLEVBQVEsQ0FDakQsSUFBSXNFLEVBQU8sS0FBSywwQkFBMEIsQ0FDdEMsYUFBYyxRQUMxQixDQUFTLEVBQ0QsT0FBTyxLQUFLLE9BQU8sS0FBS0EsRUFBTXRFLENBQU0sQ0FDNUMsRUFDSTJMLEVBQWEsVUFBVSxhQUFlLFNBQVUzTCxFQUFRLENBQ3BELElBQUlzRSxFQUFPLEtBQUssMEJBQTBCLENBQ3RDLGFBQWMsUUFDMUIsQ0FBUyxFQUNELE9BQU8sS0FBSyxPQUFPLElBQUlBLEVBQU10RSxDQUFNLENBQzNDLEVBQ0kyTCxFQUFhLFVBQVUsYUFBZSxTQUFVM0wsRUFBUSxDQUNwRCxPQUFPaUgsWUFBVSxLQUFNLE9BQVEsT0FBUSxVQUFZLENBQy9DLElBQUk0RSxFQUFLQyxFQUFXaEssRUFBUWlLLEVBQVNDLEVBQ2pDNUQsRUFDSixPQUFPVixjQUFZLEtBQU0sU0FBVVcsRUFBSSxDQUNuQyxPQUFRQSxFQUFHLE1BQUssQ0FDWixJQUFLLEdBQ0QsT0FBQXdELEVBQU03TCxFQUFPLElBQUs4TCxFQUFZOUwsRUFBTyxVQUFXOEIsRUFBUzlCLEVBQU8sT0FDekQsQ0FBQyxFQUFhLEtBQUssV0FBVyxDQUM3QixJQUFLNkwsRUFDTCxNQUFPLEdBQUcsT0FBT0MsRUFBVSxNQUFPLE1BQU8sRUFBRSxPQUFPQSxFQUFVLE1BQU8sR0FBSSxDQUMxRSxDQUFBLENBQUMsRUFDVixJQUFLLEdBRUQsT0FEQUMsRUFBVzFELEVBQUcsS0FBSSxFQUFJLFFBQ2hCMEQsRUFBUSxPQUFTLEVBQ2pCQSxFQUFRLENBQUMsRUFBRSxJQUFJLE9BQVMsU0FBa0IsQ0FBQyxFQUFhLENBQUMsRUFDeEQsQ0FBQyxFQUFhLEtBQUssYUFBYS9MLENBQU0sQ0FBQyxFQUZaLENBQUMsRUFBYSxDQUFDLEVBR3JELElBQUssR0FDRCxPQUFBZ00sRUFBWTNELEVBQUcsS0FBSSxFQUFJLFNBQ2hCLENBQUMsRUFBYyxDQUFFLEdBQUkwRCxFQUFRLENBQUMsRUFBRSxJQUFJLE1BQU8sU0FBVUMsQ0FBVSxDQUFBLEVBQzFFLElBQUssR0FBRyxNQUFNLElBQUksTUFBTSxnSUFBZ0ksRUFDeEosSUFBSyxHQUFHLE1BQU8sQ0FBQyxFQUFjLEtBQUssVUFBVSxDQUNyQyxJQUFLSCxFQUNMLE9BQVEsT0FBTyxPQUFPLENBQUUsRUFBRS9KLEdBQVNzRyxFQUFLLENBQUUsRUFDdENBLEVBQUcwRCxFQUFVLEtBQUssRUFBSSxDQUFFLE1BQU9BLEVBQVUsS0FBTyxFQUNoRDFELEVBQUksQ0FDWCxDQUFBLENBQUMsQ0FDVCxDQUNqQixDQUFhLENBQ2IsQ0FBUyxDQUNULEVBRUl1RCxFQUFhLFVBQVUsV0FBYSxTQUFVM0wsRUFBUSxDQUNsRCxPQUFPaUgsWUFBVSxLQUFNLE9BQVEsT0FBUSxVQUFZLENBQy9DLElBQUkzQyxFQUFNdEgsRUFDVixPQUFPMEssY0FBWSxLQUFNLFNBQVVVLEVBQUksQ0FDbkMsT0FBUUEsRUFBRyxNQUFLLENBQ1osSUFBSyxHQUNELE9BQUE5RCxFQUFPLEtBQUssMEJBQTBCLENBQ2xDLGFBQWMsU0FDMUMsQ0FBeUIsRUFDTSxDQUFDLEVBQWEsS0FBSyxPQUFPLElBQUlBLEVBQU10RSxDQUFNLENBQUMsRUFDdEQsSUFBSyxHQUNELE9BQUFoRCxFQUFXb0wsRUFBRyxPQUNkLEtBQUssK0JBQStCcEksRUFBTyxLQUFLLEVBQ3pDLENBQUMsRUFBY2hELENBQVEsQ0FDckMsQ0FDakIsQ0FBYSxDQUNiLENBQVMsQ0FDVCxFQUNJMk8sRUFBYSxVQUFVLCtCQUFpQyxTQUFVTSxFQUFPLENBQ3JFLEdBQUlBLEVBQU8sQ0FDUCxJQUFJQyxFQUFTLGtCQUNUdnRCLEVBQVNzdEIsRUFBTSxNQUFNQyxDQUFNLEVBQzNCLENBQUMsS0FBSywyQkFDTnZ0QixHQUNBLE9BQU9BLEVBQU8sQ0FBQyxDQUFDLEVBQUksTUFDcEIsS0FBSywwQkFBNEIsR0FDakMsUUFBUSxLQUFLLDRJQUE0SSxFQUVoSyxDQUNULEVBQ0lndEIsRUFBYSxVQUFVLFdBQWEsU0FBVTNMLEVBQVEsQ0FDbEQsT0FBT2lILFlBQVUsS0FBTSxPQUFRLE9BQVEsVUFBWSxDQUMvQyxJQUFJM0MsRUFBTThELEVBQUkrRCxFQUFLQyxFQUNuQixPQUFPMUUsY0FBWSxLQUFNLFNBQVVXLEVBQUksQ0FDbkMsT0FBUUEsRUFBRyxNQUFLLENBQ1osSUFBSyxHQUNELE9BQUEvRCxFQUFPLEtBQUssMEJBQTBCLENBQ2xDLGFBQWMsU0FDMUMsQ0FBeUIsRUFDTSxDQUFDLEVBQWEsS0FBSyxPQUFPLEtBQUtBLEVBQU10RSxDQUFNLENBQUMsRUFDdkQsSUFBSyxHQUNELE9BQUFvSSxFQUFLQyxFQUFHLEtBQUksRUFBSThELEVBQU0vRCxFQUFHLElBQUtnRSxFQUFZaEUsRUFBRyxVQUN0QyxDQUFDLEVBQWMsQ0FDZCxJQUFLK0QsRUFDTCxVQUFXQyxFQUNYLFFBQVNELEVBQUksSUFBSSxTQUFVeHVCLEVBQUlqSSxFQUFHLENBQUUsTUFBUSxDQUFFLEdBQUlpSSxFQUFJLFNBQVV5dUIsRUFBVTEyQixDQUFDLENBQUMsQ0FBSSxDQUFFLENBQ2xILENBQTZCLENBQ1osQ0FDakIsQ0FBYSxDQUNiLENBQVMsQ0FDVCxFQUNJaTJCLEVBQWEsVUFBVSxjQUFnQixTQUFVM0wsRUFBUSxDQUNyRCxJQUFJc0UsRUFBTyxLQUFLLDBCQUEwQixDQUN0QyxhQUFjLFNBQzFCLENBQVMsRUFDRCxPQUFPLEtBQUssT0FBTyxJQUFJQSxFQUFNdEUsQ0FBTSxDQUMzQyxFQUNJMkwsRUFBYSxVQUFVLGNBQWdCLFNBQVUzTCxFQUFRLENBQ3JELElBQUlzRSxFQUFPLEtBQUssMEJBQTBCLENBQ3RDLGFBQWMsU0FDMUIsQ0FBUyxFQUNELE9BQU8sS0FBSyxPQUFPLE9BQU9BLEVBQU10RSxDQUFNLENBQzlDLEVBQ0kyTCxFQUFhLFVBQVUsYUFBZSxTQUFVM0wsRUFBUSxDQUNwRCxJQUFJc0UsRUFBTyxLQUFLLDBCQUEwQixDQUN0QyxhQUFjLGdCQUMxQixDQUFTLEVBQ0QsT0FBTyxLQUFLLE9BQU8sS0FBS0EsRUFBTXRFLENBQU0sQ0FDNUMsRUFDSTJMLEVBQWEsVUFBVSxtQkFBcUIsU0FBVTNMLEVBQVEsQ0FDMUQsSUFBSXNFLEVBQU8sS0FBSywwQkFBMEIsQ0FDdEMsYUFBYyxnQkFDMUIsQ0FBUyxFQUNELE9BQU8sS0FBSyxPQUFPLElBQUlBLEVBQU10RSxDQUFNLENBQzNDLEVBQ0kyTCxFQUFhLFVBQVUsYUFBZSxTQUFVM0wsRUFBUSxDQUNwRCxJQUFJc0UsRUFBTyxLQUFLLDBCQUEwQixDQUN0QyxhQUFjLGdCQUMxQixDQUFTLEVBQ0QsT0FBTyxLQUFLLE9BQU8sT0FBT0EsRUFBTXRFLENBQU0sQ0FDOUMsRUFDSTJMLEVBQWEsVUFBVSxjQUFnQixTQUFVM0wsRUFBUSxDQUNyRCxPQUFPaUgsWUFBVSxLQUFNLE9BQVEsT0FBUSxVQUFZLENBQy9DLElBQUl0QyxFQUFXMEgsRUFBU2pFLEVBQUlrRSxFQUFZNUMsRUFBTTZDLEVBQWdCTixFQUM5RCxPQUFPdkUsY0FBWSxLQUFNLFNBQVVXLEVBQUksQ0FFbkMsT0FEQTFELEVBQVkzRSxFQUFPLFVBQVdxTSxFQUFVck0sRUFBTyxRQUFTb0ksRUFBS3BJLEVBQU8sV0FBWXNNLEVBQWFsRSxJQUFPLE9BQVMsR0FBT0EsRUFBSXNCLEVBQU9OLFNBQU9wSixFQUFRLENBQUMsWUFBYSxVQUFXLFlBQVksQ0FBQyxFQUMvS3FNLEVBR0RDLEdBQ0FDLEVBQWlCNUgsRUFBWSxHQUFHLE9BQU9BLEVBQVcsR0FBRyxFQUFJLEdBQ3pEc0gsRUFBUSxHQUFHLE9BQU9NLENBQWMsRUFBRSxPQUFPRixFQUFVLFlBQVksT0FBT0EsQ0FBTyxFQUFJLEVBQUUsRUFDNUUsQ0FBQyxFQUFjLEtBQUssd0JBQXdCckQsV0FBU0EsV0FBUyxHQUFJVSxDQUFJLEVBQUcsQ0FBRSxNQUFPdUMsQ0FBTyxDQUFBLENBQUMsQ0FBQyxHQUUvRixDQUFDLEVBQWMsS0FBSyx3QkFBd0JqRCxXQUFTQSxXQUFTLENBQUUsRUFBRVUsQ0FBSSxFQUFHLENBQUUsUUFBUzJDLEVBQVMsVUFBVzFILENBQVMsQ0FBRSxDQUFDLENBQUMsRUFQakgsQ0FBQyxFQUFjLEtBQUssb0JBQW9CcUUsV0FBU0EsV0FBUyxHQUFJVSxDQUFJLEVBQUcsQ0FBRSxVQUFXL0UsQ0FBVyxDQUFBLENBQUMsQ0FBQyxDQVExSCxDQUFhLENBQ2IsQ0FBUyxDQUNULEVBQ0lnSCxFQUFhLFVBQVUsb0JBQXNCLFNBQVUzTCxFQUFRLENBQzNELE9BQU9pSCxZQUFVLEtBQU0sT0FBUSxPQUFRLFVBQVksQ0FDL0MsSUFBSXVGLEVBQWdCN0gsRUFBVytFLEVBQU0rQyxFQUFRRixFQUFnQkcsRUFBWUMsRUFBUVYsRUFBT3R0QixFQUFRaXVCLEVBQ2hHLE9BQU9sRixjQUFZLEtBQU0sU0FBVVUsRUFBSSxDQUNuQyxPQUFRQSxFQUFHLE1BQUssQ0FDWixJQUFLLEdBQ0RvRSxFQUFpQnhNLEVBQU8sT0FBUTJFLEVBQVkzRSxFQUFPLFVBQVcwSixFQUFPTixTQUFPcEosRUFBUSxDQUFDLFNBQVUsV0FBVyxDQUFDLEVBQzNHeU0sRUFBU0QsRUFFTEMsR0FBVUEsRUFBTyxPQUFTLEdBQUtBLEVBQU8sUUFBUSxLQUFLLElBQU0sS0FDekRBLEVBQVMsY0FBYyxjQUFjLEdBQUlBLEVBQVEsRUFBSSxFQUFHLENBQUMsS0FBSyxFQUFHLEVBQUssR0FFMUVGLEVBQWlCNUgsRUFBWSxJQUFJLE9BQU9BLEVBQVcsUUFBUSxFQUFJLEdBQy9EK0gsRUFBYSxDQUFBLEVBQ2JDLEVBQVMsSUFDVHZFLEVBQUcsTUFBUSxFQUNmLElBQUssR0FFRCxPQUFBNkQsRUFBUSxHQUFHLE9BQU9NLEVBQWdCLFFBQVEsRUFBRSxPQUFPSSxFQUFRLDBCQUEwQixFQUFFLE9BQU8saUJBQWlCLEVBQ3hHLENBQUMsRUFBYSxLQUFLLFdBQVczRCxXQUFTQSxXQUFTLENBQUUsRUFBRVUsQ0FBSSxFQUFHLENBQUUsT0FBUStDLEVBQVEsTUFBT1IsQ0FBSyxDQUFFLENBQUMsQ0FBQyxFQUN4RyxJQUFLLEdBR0QsR0FGQXR0QixFQUFTeXBCLEVBQUcsT0FDWnNFLEVBQWFBLEVBQVcsT0FBTy90QixFQUFPLE9BQU8sRUFDekNBLEVBQU8sUUFBUSxPQUFTLGtCQUN4QixNQUFPLENBQUMsRUFBYSxDQUFDLEVBRzFCLEdBREFpdUIsRUFBYWp1QixFQUFPLFFBQVFBLEVBQU8sUUFBUSxPQUFTLENBQUMsRUFDakRpdUIsRUFBVyxJQUFJLE9BQVMsU0FDeEJELEVBQVNDLEVBQVcsSUFBSSxVQUd4QixPQUFNLElBQUksTUFBTSxnSUFBZ0ksRUFFcEosTUFBTyxDQUFDLEVBQWEsQ0FBQyxFQUMxQixJQUFLLEdBQUcsTUFBTyxDQUFDLEVBQWNGLENBQVUsQ0FDM0MsQ0FDakIsQ0FBYSxDQUNiLENBQVMsQ0FDVCxFQUNJZixFQUFhLFVBQVUsd0JBQTBCLFNBQVUzTCxFQUFRLENBQy9ELE9BQU9pSCxZQUFVLEtBQU0sT0FBUSxPQUFRLFVBQVksQ0FDL0MsSUFBSXRDLEVBQVcwSCxFQUFTM0MsRUFBTTZDLEVBQWdCRyxFQUFZM0wsRUFBUWtMLEVBQU90dEIsRUFDekUsT0FBTytvQixjQUFZLEtBQU0sU0FBVVUsRUFBSSxDQUNuQyxPQUFRQSxFQUFHLE1BQUssQ0FDWixJQUFLLEdBQ0R6RCxFQUFZM0UsRUFBTyxVQUFXcU0sRUFBVXJNLEVBQU8sUUFBUzBKLEVBQU9OLFNBQU9wSixFQUFRLENBQUMsWUFBYSxTQUFTLENBQUMsRUFDdEd1TSxFQUFpQjVILEVBQVksR0FBRyxPQUFPQSxFQUFXLEdBQUcsRUFBSSxHQUN6RCtILEVBQWEsQ0FBQSxFQUNiM0wsRUFBUyxFQUNUcUgsRUFBRyxNQUFRLEVBQ2YsSUFBSyxHQUVELE9BQUE2RCxFQUFRLEdBQUcsT0FBT00sQ0FBYyxFQUFFLE9BQU9GLEVBQVUsWUFBWSxPQUFPQSxFQUFTLEdBQUcsRUFBSSxHQUFJLFFBQVEsRUFBRSxPQUFPLGtCQUFtQixVQUFVLEVBQUUsT0FBT3RMLENBQU0sRUFDaEosQ0FBQyxFQUFhLEtBQUssV0FBV2lJLFdBQVNBLFdBQVMsR0FBSVUsQ0FBSSxFQUFHLENBQUUsTUFBT3VDLENBQU8sQ0FBQSxDQUFDLENBQUMsRUFDeEYsSUFBSyxHQUdELE9BRkF0dEIsRUFBU3lwQixFQUFHLE9BQ1pzRSxFQUFhQSxFQUFXLE9BQU8vdEIsRUFBTyxPQUFPLEVBQ3pDQSxFQUFPLFFBQVEsT0FBUyxrQkFDakIsQ0FBQyxFQUFhLENBQUMsR0FFMUJvaUIsR0FBVSxrQkFDSCxDQUFDLEVBQWEsQ0FBQyxHQUMxQixJQUFLLEdBQUcsTUFBTyxDQUFDLEVBQWMyTCxDQUFVLENBQzNDLENBQ2pCLENBQWEsQ0FDYixDQUFTLENBQ1QsRUFDSWYsRUFBYSxVQUFVLHdCQUEwQixTQUFVM0wsRUFBUSxDQUMvRCxPQUFPaUgsWUFBVSxLQUFNLE9BQVEsT0FBUSxVQUFZLENBQy9DLElBQUl0cEIsRUFBSSt1QixFQUFZL3RCLEVBQVFrdUIsRUFDNUIsT0FBT25GLGNBQVksS0FBTSxTQUFVVSxFQUFJLENBQ25DLE9BQVFBLEVBQUcsTUFBSyxDQUNaLElBQUssR0FBRyxNQUFPLENBQUMsRUFBYSxLQUFLLGFBQWFwSSxDQUFNLENBQUMsRUFDdEQsSUFBSyxHQUNEcmlCLEVBQU15cUIsRUFBRyxLQUFJLEVBQUksR0FDakJBLEVBQUcsTUFBUSxFQUNmLElBQUssR0FDREEsRUFBRyxLQUFLLEtBQUssQ0FBQyxFQUFHLEVBQUMsQ0FBSSxDQUFDLENBQUMsRUFDeEJzRSxFQUFhLENBQUEsRUFDYnRFLEVBQUcsTUFBUSxFQUNmLElBQUssR0FFRCxNQUFPLENBQUMsRUFBYSxLQUFLLG1CQUFtQixDQUFFLEdBQUl6cUIsQ0FBSSxDQUFBLENBQUMsRUFDNUQsSUFBSyxHQUdELE9BRkFnQixFQUFTeXBCLEVBQUcsT0FDWnNFLEVBQWFBLEVBQVcsT0FBTy90QixFQUFPLE9BQU8sRUFDeENBLEVBQU8sS0FHTCxDQUFDLEVBQWEsQ0FBQyxFQUZYLENBQUMsRUFBYSxDQUFDLEVBRzlCLElBQUssR0FBRyxNQUFPLENBQUMsRUFBYyt0QixDQUFVLEVBQ3hDLElBQUssR0FDRCxPQUFBRyxFQUFVekUsRUFBRyxPQUNOLENBQUMsRUFBYSxLQUFLLGFBQWEsQ0FBRSxHQUFJenFCLENBQUksQ0FBQSxDQUFDLEVBQ3RELElBQUssR0FDRCxNQUFBeXFCLEVBQUcsS0FBSSxFQUNEeUUsRUFDVixJQUFLLEdBQUcsTUFBTyxDQUFDLEVBQ25CLENBQ2pCLENBQWEsQ0FDYixDQUFTLENBQ1QsRUFDSWxCLEVBQWEsVUFBVSxjQUFnQixTQUFVM0wsRUFBUSxDQUNyRCxPQUFPaUgsWUFBVSxLQUFNLE9BQVEsT0FBUSxVQUFZLENBQy9DLE9BQU9TLGNBQVksS0FBTSxTQUFVVSxFQUFJLENBQ25DLEdBQUksQ0FBQ3BJLEVBQU8sUUFBUSxNQUFNLFNBQVU4QixFQUFRLENBQUUsTUFBTyxDQUFDLE1BQU0sUUFBUUEsQ0FBTSxHQUFLQSxhQUFrQixNQUFTLENBQUEsRUFDdEcsTUFBTSxJQUFJLE1BQU0scURBQXFELEVBRXpFLE1BQU8sQ0FBQyxFQUFjLEtBQUssdUJBQXVCOUIsRUFBUUEsRUFBTyxRQUFRLE9BQVEsQ0FBRSxDQUFBLENBQUMsQ0FDcEcsQ0FBYSxDQUNiLENBQVMsQ0FDVCxFQUNJMkwsRUFBYSxVQUFVLHVCQUF5QixTQUFVM0wsRUFBUXNLLEVBQWlCN3lCLEVBQVMsQ0FDeEYsT0FBT3d2QixZQUFVLEtBQU0sT0FBUSxPQUFRLFVBQVksQ0FDL0MsSUFBSTZGLEVBQWNqQixFQUFLRSxFQUFTZ0IsRUFBY0MsRUFBWUMsRUFDMUQsT0FBT3ZGLGNBQVksS0FBTSxTQUFVVSxFQUFJLENBQ25DLE9BQVFBLEVBQUcsTUFBSyxDQUNaLElBQUssR0FJRCxHQUhBMEUsRUFBZSxLQUFLLGtCQUFrQixzQkFBd0Isa0JBQzlEakIsRUFBTTdMLEVBQU8sSUFBSytMLEVBQVUvTCxFQUFPLFFBQ25DK00sRUFBZWhCLEVBQVEsTUFBTSxFQUFHZSxDQUFZLEVBQ3hDQyxFQUFhLFNBQVcsRUFDeEIsTUFBTyxDQUFDLEVBQWMsQ0FBRSxRQUFTdDFCLENBQVMsQ0FBQSxFQUU5QzJ3QixFQUFHLE1BQVEsRUFDZixJQUFLLEdBQ0QsT0FBQUEsRUFBRyxLQUFLLEtBQUssQ0FBQyxFQUFHLEVBQUMsQ0FBSSxDQUFDLENBQUMsRUFDakIsQ0FBQyxFQUFhLEtBQUssNkJBQTZCLENBQy9DLElBQUt5RCxFQUNMLFFBQVNrQixDQUNaLENBQUEsQ0FBQyxFQUNWLElBQUssR0FDRCxPQUFBQyxFQUFhNUUsRUFBRyxPQUNULENBQUMsRUFBYSxDQUFDLEVBQzFCLElBQUssR0FDRCxNQUFBNkUsRUFBTTdFLEVBQUcsT0FDSCxJQUFJc0QsVUFBUSx1QkFBdUIsQ0FBRSxRQUFTajBCLEdBQVdzMEIsRUFBU3pCLEVBQWlCMkMsRUFBSyxpQkFBaUIsRUFDbkgsSUFBSyxHQUFHLE1BQU8sQ0FBQyxFQUFjLEtBQUssdUJBQXVCLENBQ2xELElBQUtwQixFQUNMLFFBQVNFLEVBQVEsTUFBTWUsQ0FBWSxDQUN0QyxFQUFFeEMsRUFBaUI3eUIsRUFBUSxPQUFPdTFCLENBQVUsQ0FBQyxDQUFDLENBQ3RELENBQ2pCLENBQWEsQ0FDYixDQUFTLENBQ1QsRUFDSXJCLEVBQWEsVUFBVSw2QkFBK0IsU0FBVTNMLEVBQVEsQ0FDcEUsT0FBT2lILFlBQVUsS0FBTSxPQUFRLE9BQVEsVUFBWSxDQUMvQyxJQUFJaUcsRUFBa0IxRCxFQUFVL3hCLEVBQ2hDLE9BQU9pd0IsY0FBWSxLQUFNLFNBQVVVLEVBQUksQ0FDbkMsT0FBUUEsRUFBRyxNQUFLLENBQ1osSUFBSyxHQUNELE9BQUE4RSxFQUFtQixLQUFLLHVCQUF1QixrQkFBbUIsQ0FBQSxFQUFJbE4sRUFBTyxPQUFPLEVBQ3BGd0osRUFBVzBELEVBQWlCLElBQUksU0FBVW5CLEVBQVMsQ0FBRSxNQUFRLENBQ3pELE9BQVEsT0FDUixhQUFjLFVBQ2QsUUFBUyxDQUNMLElBQUsvTCxFQUFPLElBQ1osUUFBUytMLENBQ1osQ0FDSixDQUFJLENBQUEsRUFDRSxDQUFDLEVBQWEsS0FBSyxrQkFBa0IsS0FBSyxDQUFFLFNBQVV2QyxDQUFVLENBQUEsQ0FBQyxFQUM1RSxJQUFLLEdBQ0QsT0FBQS94QixFQUFXMndCLEVBQUcsS0FBTSxFQUNmLFFBQ0UsQ0FBQyxFQUFjM3dCLEVBQ2IsSUFBSSxTQUFVa0gsRUFBUSxDQUN2QixJQUFJd3RCLEVBQU14dEIsRUFBTyxJQUFLeXRCLEVBQVl6dEIsRUFBTyxVQUN6QyxPQUFPd3RCLEVBQUksSUFBSSxTQUFVeHVCLEVBQUlqSSxFQUFHLENBQUUsTUFBUSxDQUFFLEdBQUlpSSxFQUFJLFNBQVV5dUIsRUFBVTEyQixDQUFDLENBQUcsQ0FBSSxDQUFBLENBQ2hILENBQTZCLEVBQ0ksT0FBTyxTQUFVeTNCLEVBQUtwQixFQUFTLENBQ2hDLE9BQU9vQixFQUFJLE9BQU9wQixDQUFPLENBQ3pELEVBQStCLENBQUEsQ0FBRSxDQUFDLENBQ2pCLENBQ2pCLENBQWEsQ0FDYixDQUFTLENBQ1QsRUFDSUosRUFBYSxVQUFVLGlCQUFtQixTQUFVM0wsRUFBUSxDQUN4RCxPQUFPaUgsWUFBVSxLQUFNLE9BQVEsT0FBUSxVQUFZLENBQy9DLE9BQU9TLGNBQVksS0FBTSxTQUFVVSxFQUFJLENBQ25DLE1BQU8sQ0FBQyxFQUFjLEtBQUssMEJBQTBCcEksRUFBUUEsRUFBTyxRQUFRLE9BQVEsQ0FBRSxDQUFBLENBQUMsQ0FDdkcsQ0FBYSxDQUNiLENBQVMsQ0FDVCxFQUNJMkwsRUFBYSxVQUFVLDBCQUE0QixTQUFVM0wsRUFBUXNLLEVBQWlCN3lCLEVBQVMsQ0FDM0YsT0FBT3d2QixZQUFVLEtBQU0sT0FBUSxPQUFRLFVBQVksQ0FDL0MsSUFBSTZGLEVBQWNqQixFQUFLRSxFQUFTZ0IsRUFBY0MsRUFBWUksRUFDMUQsT0FBTzFGLGNBQVksS0FBTSxTQUFVVSxFQUFJLENBQ25DLE9BQVFBLEVBQUcsTUFBSyxDQUNaLElBQUssR0FJRCxHQUhBMEUsRUFBZSxLQUFLLGtCQUFrQixzQkFBd0IscUJBQzlEakIsRUFBTTdMLEVBQU8sSUFBSytMLEVBQVUvTCxFQUFPLFFBQ25DK00sRUFBZWhCLEVBQVEsTUFBTSxFQUFHZSxDQUFZLEVBQ3hDQyxFQUFhLFNBQVcsRUFDeEIsTUFBTyxDQUFDLEVBQWMsQ0FBRSxRQUFTdDFCLENBQVMsQ0FBQSxFQUU5QzJ3QixFQUFHLE1BQVEsRUFDZixJQUFLLEdBQ0QsT0FBQUEsRUFBRyxLQUFLLEtBQUssQ0FBQyxFQUFHLEVBQUMsQ0FBSSxDQUFDLENBQUMsRUFDakIsQ0FBQyxFQUFhLEtBQUssZ0NBQWdDLENBQ2xELElBQUt5RCxFQUNMLFFBQVNrQixDQUNaLENBQUEsQ0FBQyxFQUNWLElBQUssR0FDRCxPQUFBQyxFQUFhNUUsRUFBRyxPQUNULENBQUMsRUFBYSxDQUFDLEVBQzFCLElBQUssR0FDRCxNQUFBZ0YsRUFBTWhGLEVBQUcsT0FDSCxJQUFJc0QsVUFBUSx1QkFBdUIsQ0FBRSxRQUFTajBCLEdBQVdzMEIsRUFBU3pCLEVBQWlCOEMsRUFBSyxvQkFBb0IsRUFDdEgsSUFBSyxHQUFHLE1BQU8sQ0FBQyxFQUFjLEtBQUssMEJBQTBCLENBQ3JELElBQUt2QixFQUNMLFFBQVNFLEVBQVEsTUFBTWUsQ0FBWSxDQUN0QyxFQUFFeEMsRUFBaUI3eUIsRUFBUSxPQUFPdTFCLENBQVUsQ0FBQyxDQUFDLENBQ3RELENBQ2pCLENBQWEsQ0FDYixDQUFTLENBQ1QsRUFDSXJCLEVBQWEsVUFBVSxnQ0FBa0MsU0FBVTNMLEVBQVEsQ0FDdkUsT0FBT2lILFlBQVUsS0FBTSxPQUFRLE9BQVEsVUFBWSxDQUMvQyxJQUFJaUcsRUFBa0IxRCxFQUFVL3hCLEVBQ2hDLE9BQU9pd0IsY0FBWSxLQUFNLFNBQVVVLEVBQUksQ0FDbkMsT0FBUUEsRUFBRyxNQUFLLENBQ1osSUFBSyxHQUNELE9BQUE4RSxFQUFtQixLQUFLLHVCQUF1QixxQkFBc0IsQ0FBQSxFQUFJbE4sRUFBTyxPQUFPLEVBQ3ZGd0osRUFBVzBELEVBQWlCLElBQUksU0FBVW5CLEVBQVMsQ0FBRSxNQUFRLENBQ3pELE9BQVEsTUFDUixhQUFjLFVBQ2QsUUFBUyxDQUNMLElBQUsvTCxFQUFPLElBQ1osUUFBUytMLENBQ1osQ0FDSixDQUFJLENBQUEsRUFDRSxDQUFDLEVBQWEsS0FBSyxrQkFBa0IsS0FBSyxDQUFFLFNBQVV2QyxDQUFVLENBQUEsQ0FBQyxFQUM1RSxJQUFLLEdBQ0QsT0FBQS94QixFQUFXMndCLEVBQUcsS0FBTSxFQUNmLFFBQ0UsQ0FBQyxFQUFjM3dCLEVBQ2IsSUFBSSxTQUFVa0gsRUFBUSxDQUFFLE9BQU9BLEVBQU8sT0FBUSxDQUFFLEVBQ2hELE9BQU8sU0FBVXd1QixFQUFLcEIsRUFBUyxDQUNoQyxPQUFPb0IsRUFBSSxPQUFPcEIsQ0FBTyxDQUN6RCxFQUErQixDQUFBLENBQUUsQ0FBQyxDQUNqQixDQUNqQixDQUFhLENBQ2IsQ0FBUyxDQUNULEVBQ0lKLEVBQWEsVUFBVSxpQkFBbUIsU0FBVTNMLEVBQVEsQ0FDeEQsT0FBTyxLQUFLLDBCQUEwQkEsRUFBUUEsRUFBTyxRQUFRLE1BQU0sQ0FDM0UsRUFDSTJMLEVBQWEsVUFBVSwwQkFBNEIsU0FBVTNMLEVBQVFzSyxFQUFpQixDQUNsRixPQUFPckQsWUFBVSxLQUFNLE9BQVEsT0FBUSxVQUFZLENBQy9DLElBQUk2RixFQUFjakIsRUFBS0UsRUFBU2dCLEVBQWNNLEVBQzlDLE9BQU8zRixjQUFZLEtBQU0sU0FBVVUsRUFBSSxDQUNuQyxPQUFRQSxFQUFHLE1BQUssQ0FDWixJQUFLLEdBSUQsR0FIQTBFLEVBQWUsS0FBSyxrQkFBa0Isc0JBQXdCLHFCQUM5RGpCLEVBQU03TCxFQUFPLElBQUsrTCxFQUFVL0wsRUFBTyxRQUNuQytNLEVBQWVoQixFQUFRLE1BQU0sRUFBR2UsQ0FBWSxFQUN4Q0MsRUFBYSxTQUFXLEVBQ3hCLE1BQU8sQ0FBQyxFQUFjLENBQUEsQ0FBRSxFQUU1QjNFLEVBQUcsTUFBUSxFQUNmLElBQUssR0FDRCxPQUFBQSxFQUFHLEtBQUssS0FBSyxDQUFDLEVBQUcsRUFBQyxDQUFJLENBQUMsQ0FBQyxFQUNqQixDQUFDLEVBQWEsS0FBSyxnQ0FBZ0MsQ0FDbEQsSUFBS3lELEVBQ0wsUUFBU2tCLENBQ1osQ0FBQSxDQUFDLEVBQ1YsSUFBSyxHQUNELE9BQUEzRSxFQUFHLEtBQUksRUFDQSxDQUFDLEVBQWEsQ0FBQyxFQUMxQixJQUFLLEdBQ0QsTUFBQWlGLEVBQU1qRixFQUFHLE9BQ0gsSUFBSXNELFVBQVEsdUJBQXVCLENBQUUsRUFBRUssRUFBU3pCLEVBQWlCK0MsRUFBSyxvQkFBb0IsRUFDcEcsSUFBSyxHQUFHLE1BQU8sQ0FBQyxFQUFjLEtBQUssMEJBQTBCLENBQ3JELElBQUt4QixFQUNMLFFBQVNFLEVBQVEsTUFBTWUsQ0FBWSxDQUMvRCxFQUEyQnhDLENBQWUsQ0FBQyxDQUMxQixDQUNqQixDQUFhLENBQ2IsQ0FBUyxDQUNULEVBQ0lxQixFQUFhLFVBQVUsZ0NBQWtDLFNBQVUzTCxFQUFRLENBQ3ZFLE9BQU9pSCxZQUFVLEtBQU0sT0FBUSxPQUFRLFVBQVksQ0FDL0MsSUFBSWlHLEVBQWtCMUQsRUFDdEIsT0FBTzlCLGNBQVksS0FBTSxTQUFVVSxFQUFJLENBQ25DLE9BQVFBLEVBQUcsTUFBSyxDQUNaLElBQUssR0FDRCxPQUFBOEUsRUFBbUIsS0FBSyx1QkFBdUIscUJBQXNCLENBQUEsRUFBSWxOLEVBQU8sT0FBTyxFQUN2RndKLEVBQVcwRCxFQUFpQixJQUFJLFNBQVVuQixFQUFTLENBQUUsTUFBUSxDQUN6RCxPQUFRLFNBQ1IsYUFBYyxVQUNkLFFBQVMsQ0FDTCxJQUFLL0wsRUFBTyxJQUNaLElBQUsrTCxFQUFRLElBQUksU0FBVWpLLEVBQVEsQ0FBRSxPQUFPQSxFQUFPLEdBQUssRUFDeEQsVUFBV2lLLEVBQVEsSUFBSSxTQUFVakssRUFBUSxDQUFFLE9BQU9BLEVBQU8sU0FBVyxDQUN2RSxDQUNKLENBQUksQ0FBQSxFQUNFLENBQUMsRUFBYSxLQUFLLGtCQUFrQixLQUFLLENBQUUsU0FBVTBILENBQVUsQ0FBQSxDQUFDLEVBQzVFLElBQUssR0FDRCxPQUFBcEIsRUFBRyxLQUFJLEVBQ0EsQ0FBQyxDQUFDLENBQ2hCLENBQ2pCLENBQWEsQ0FDYixDQUFTLENBQ1QsRUFDSXVELEVBQWEsVUFBVSx1QkFBeUIsU0FBVTJCLEVBQU1DLEVBQVcvNEIsRUFBTyxDQUM5RSxJQUFJZzVCLEVBQVFoNUIsRUFBTSxNQUFNLEVBQUc4NEIsQ0FBSSxFQUMvQixPQUFJRSxFQUFNLFNBQVcsRUFDVkQsRUFFSixLQUFLLHVCQUF1QkQsRUFBTSxjQUFjLGNBQWMsQ0FBRSxFQUFFQyxFQUFXLEVBQUksRUFBRyxDQUFDQyxDQUFLLEVBQUcsRUFBSyxFQUFHaDVCLEVBQU0sTUFBTTg0QixDQUFJLENBQUMsQ0FDckksRUFDSTNCLEVBQWEsVUFBVSxpQkFBbUIsU0FBVTNMLEVBQVEsQ0FDeEQsSUFBSXNFLEVBQU8sS0FBSywwQkFBMEIsQ0FDdEMsYUFBYyxnQkFDMUIsQ0FBUyxFQUNELE9BQU8sS0FBSyxPQUFPLEtBQUtBLEVBQU10RSxDQUFNLENBQzVDLEVBQ0kyTCxFQUFhLFVBQVUsb0JBQXNCLFNBQVUzTCxFQUFRLENBQzNELElBQUlzRSxFQUFPLEtBQUssMEJBQTBCLENBQ3RDLGFBQWMsZ0JBQzFCLENBQVMsRUFDRCxPQUFPLEtBQUssT0FBTyxPQUFPQSxFQUFNdEUsQ0FBTSxDQUM5QyxFQUNJMkwsRUFBYSxVQUFVLGtCQUFvQixTQUFVM0wsRUFBUSxDQUN6RCxJQUFJc0UsRUFBTyxLQUFLLDBCQUEwQixDQUN0QyxhQUFjLGlCQUMxQixDQUFTLEVBQ0QsT0FBTyxLQUFLLE9BQU8sSUFBSUEsRUFBTXRFLENBQU0sQ0FDM0MsRUFDSTJMLEVBQWEsVUFBVSxzQkFBd0IsU0FBVTNMLEVBQVEsQ0FDN0QsSUFBSXNFLEVBQU8sS0FBSywwQkFBMEIsQ0FDdEMsYUFBYyxrQkFDMUIsQ0FBUyxFQUNELE9BQU8sS0FBSyxPQUFPLElBQUlBLEVBQU10RSxDQUFNLENBQzNDLEVBQ0kyTCxFQUFhLFVBQVUsbUJBQXFCLFNBQVUzTCxFQUFRLENBQzFELElBQUlzRSxFQUFPLEtBQUssMEJBQTBCLENBQ3RDLGFBQWMsZUFDMUIsQ0FBUyxFQUNELE9BQU8sS0FBSyxPQUFPLElBQUlBLEVBQU10RSxDQUFNLENBQzNDLEVBQ0kyTCxFQUFhLFVBQVUsb0JBQXNCLFNBQVUzTCxFQUFRLENBQzNELElBQUlzRSxFQUFPLEtBQUssMEJBQTBCLENBQ3RDLGFBQWMsZ0JBQzFCLENBQVMsRUFDRCxPQUFPLEtBQUssT0FBTyxJQUFJQSxFQUFNdEUsQ0FBTSxDQUMzQyxFQUNXMkwsQ0FDWCxFQUFFMUMsZUFBYSxVQUFVLEVBQ0x3QyxlQUFBLGFBQUcsa0NDbmxCbkIxRixZQUFhOXhCLGdCQUFRQSxlQUFLLFdBQWUsVUFBWSxDQUNyRCxJQUFJK3hCLEVBQWdCLFNBQVVDLEVBQUdwdEIsRUFBRyxDQUNoQyxPQUFBbXRCLEVBQWdCLE9BQU8sZ0JBQ2xCLENBQUUsVUFBVyxDQUFBLGFBQWdCLE9BQVMsU0FBVUMsRUFBR3B0QixFQUFHLENBQUVvdEIsRUFBRSxVQUFZcHRCLENBQUUsR0FDekUsU0FBVW90QixFQUFHcHRCLEVBQUcsQ0FBRSxRQUFTMGMsS0FBSzFjLEVBQU8sT0FBTyxVQUFVLGVBQWUsS0FBS0EsRUFBRzBjLENBQUMsSUFBRzBRLEVBQUUxUSxDQUFDLEVBQUkxYyxFQUFFMGMsQ0FBQyxJQUMxRnlRLEVBQWNDLEVBQUdwdEIsQ0FBQyxDQUNqQyxFQUNJLE9BQU8sU0FBVW90QixFQUFHcHRCLEVBQUcsQ0FDbkIsR0FBSSxPQUFPQSxHQUFNLFlBQWNBLElBQU0sS0FDakMsTUFBTSxJQUFJLFVBQVUsdUJBQXlCLE9BQU9BLENBQUMsRUFBSSwrQkFBK0IsRUFDNUZtdEIsRUFBY0MsRUFBR3B0QixDQUFDLEVBQ2xCLFNBQVNxdEIsR0FBSyxDQUFFLEtBQUssWUFBY0QsQ0FBSSxDQUN2Q0EsRUFBRSxVQUFZcHRCLElBQU0sS0FBTyxPQUFPLE9BQU9BLENBQUMsR0FBS3F0QixFQUFHLFVBQVlydEIsRUFBRSxVQUFXLElBQUlxdEIsRUFDdkYsQ0FDQSxJQUNBLE9BQU8sZUFBZXVILGNBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSSxDQUFFLEVBQ3pDQSxjQUFBLFlBQUcsT0FDdEIsSUFBSXhFLGVBQWVsQyxhQUNmLFlBQTZCLFNBQVVYLEVBQVEsQ0FDL0NMLFlBQVUySCxFQUFhdEgsQ0FBTSxFQUM3QixTQUFTc0gsR0FBYyxDQUNuQixPQUFPdEgsSUFBVyxNQUFRQSxFQUFPLE1BQU0sS0FBTSxTQUFTLEdBQUssSUFDOUQsQ0FDRCxPQUFBc0gsRUFBWSxVQUFVLFNBQVcsU0FBVTFOLEVBQVEsQ0FDL0MsSUFBSXNFLEVBQU8sS0FBSywwQkFBMEIsQ0FDdEMsYUFBYyxPQUMxQixDQUFTLEVBQ0QsT0FBTyxLQUFLLE9BQU8sSUFBSUEsRUFBTXRFLENBQU0sQ0FDM0MsRUFDSTBOLEVBQVksVUFBVSxZQUFjLFNBQVUxTixFQUFRLENBQ2xELElBQUlzRSxFQUFPLEtBQUssMEJBQTBCLENBQ3RDLGFBQWMsT0FDMUIsQ0FBUyxFQUNELE9BQU8sS0FBSyxPQUFPLE9BQU9BLEVBQU10RSxDQUFNLENBQzlDLEVBQ0kwTixFQUFZLFVBQVUsZ0JBQWtCLFNBQVUxTixFQUFRLENBQ3RELElBQUlzRSxFQUFPLEtBQUssMEJBQTBCLENBQ3RDLGFBQWMsWUFDMUIsQ0FBUyxFQUNELE9BQU8sS0FBSyxPQUFPLElBQUlBLEVBQU10RSxDQUFNLENBQzNDLEVBQ0kwTixFQUFZLFVBQVUsZ0JBQWtCLFNBQVUxTixFQUFRLENBQ3RELElBQUlzRSxFQUFPLEtBQUssMEJBQTBCLENBQ3RDLGFBQWMsZUFDMUIsQ0FBUyxFQUNELE9BQU8sS0FBSyxPQUFPLElBQUlBLEVBQU10RSxDQUFNLENBQzNDLEVBQ0kwTixFQUFZLFVBQVUsbUJBQXFCLFNBQVUxTixFQUFRLENBQ3pELElBQUlzRSxFQUFPLEtBQUssMEJBQTBCLENBQ3RDLGFBQWMsZUFDMUIsQ0FBUyxFQUNELE9BQU8sS0FBSyxPQUFPLElBQUlBLEVBQU10RSxDQUFNLENBQzNDLEVBQ0kwTixFQUFZLFVBQVUsYUFBZSxTQUFVMU4sRUFBUSxDQUNuRCxJQUFJc0UsRUFBTyxLQUFLLDBCQUEwQixDQUN0QyxhQUFjLGNBQzFCLENBQVMsRUFDRCxPQUFPLEtBQUssT0FBTyxJQUFJQSxFQUFNdEUsQ0FBTSxDQUMzQyxFQUNJME4sRUFBWSxVQUFVLGlCQUFtQixTQUFVMU4sRUFBUSxDQUN2RCxJQUFJc0UsRUFBTyxLQUFLLDBCQUEwQixDQUN0QyxhQUFjLHNCQUMxQixDQUFTLEVBQ0QsT0FBTyxLQUFLLE9BQU8sS0FBS0EsRUFBTXRFLENBQU0sQ0FDNUMsRUFDSTBOLEVBQVksVUFBVSxVQUFZLFNBQVUxTixFQUFRLENBQ2hELElBQUlzRSxFQUFPLEtBQUssVUFBVSxDQUN0QixhQUFjLFFBQzFCLENBQVMsRUFDRCxPQUFPLEtBQUssT0FBTyxLQUFLQSxFQUFNdEUsQ0FBTSxDQUM1QyxFQUNJME4sRUFBWSxVQUFVLGFBQWUsU0FBVTFOLEVBQVEsQ0FDbkQsSUFBSXNFLEVBQU8sS0FBSyxVQUFVLENBQ3RCLGFBQWMsUUFDMUIsQ0FBUyxFQUNELE9BQU8sS0FBSyxPQUFPLE9BQU9BLEVBQU10RSxDQUFNLENBQzlDLEVBQ0kwTixFQUFZLFVBQVUsa0JBQW9CLFNBQVUxTixFQUFRLENBQ3hELElBQUlzRSxFQUFPLEtBQUssMEJBQTBCLENBQ3RDLGFBQWMsY0FDMUIsQ0FBUyxFQUNELE9BQU8sS0FBSyxPQUFPLElBQUlBLEVBQU10RSxDQUFNLENBQzNDLEVBQ0kwTixFQUFZLFVBQVUscUJBQXVCLFNBQVUxTixFQUFRLENBQzNELElBQUlzRSxFQUFPLEtBQUssVUFBVSxDQUN0QixhQUFjLGdCQUMxQixDQUFTLEVBQ0QsT0FBTyxLQUFLLE9BQU8sS0FBS0EsRUFBTXRFLENBQU0sQ0FDNUMsRUFDVzBOLENBQ1gsRUFBRXpFLGVBQWEsVUFBVSxFQUNOd0UsY0FBQSxZQUFHLGdDQzNGdEIsUUFBaUIsT0FBTyxNQUFRLFNBQVcsS0FBSyxTQUFXLE9BQU8sU0NBOUQsVUFBYXg1QixnQkFBUUEsZUFBSyxXQUFlLFVBQVksQ0FDckQsSUFBSSt4QixFQUFnQixTQUFVQyxFQUFHcHRCLEVBQUcsQ0FDaEMsT0FBQW10QixFQUFnQixPQUFPLGdCQUNsQixDQUFFLFVBQVcsQ0FBQSxhQUFnQixPQUFTLFNBQVVDLEVBQUdwdEIsRUFBRyxDQUFFb3RCLEVBQUUsVUFBWXB0QixDQUFFLEdBQ3pFLFNBQVVvdEIsRUFBR3B0QixFQUFHLENBQUUsUUFBUzBjLEtBQUsxYyxFQUFPLE9BQU8sVUFBVSxlQUFlLEtBQUtBLEVBQUcwYyxDQUFDLElBQUcwUSxFQUFFMVEsQ0FBQyxFQUFJMWMsRUFBRTBjLENBQUMsSUFDMUZ5USxFQUFjQyxFQUFHcHRCLENBQUMsQ0FDakMsRUFDSSxPQUFPLFNBQVVvdEIsRUFBR3B0QixFQUFHLENBQ25CLEdBQUksT0FBT0EsR0FBTSxZQUFjQSxJQUFNLEtBQ2pDLE1BQU0sSUFBSSxVQUFVLHVCQUF5QixPQUFPQSxDQUFDLEVBQUksK0JBQStCLEVBQzVGbXRCLEVBQWNDLEVBQUdwdEIsQ0FBQyxFQUNsQixTQUFTcXRCLEdBQUssQ0FBRSxLQUFLLFlBQWNELENBQUksQ0FDdkNBLEVBQUUsVUFBWXB0QixJQUFNLEtBQU8sT0FBTyxPQUFPQSxDQUFDLEdBQUtxdEIsRUFBRyxVQUFZcnRCLEVBQUUsVUFBVyxJQUFJcXRCLEVBQ3ZGLENBQ0EsSUFDSWUsWUFBYWh6QixnQkFBUUEsZUFBSyxXQUFjLFNBQVVpekIsRUFBU0MsRUFBWUMsRUFBR0MsRUFBVyxDQUNyRixTQUFTQyxFQUFNbnZCLEVBQU8sQ0FBRSxPQUFPQSxhQUFpQml2QixFQUFJanZCLEVBQVEsSUFBSWl2QixFQUFFLFNBQVVoaEIsRUFBUyxDQUFFQSxFQUFRak8sQ0FBSyxDQUFFLENBQUUsQ0FBSSxDQUM1RyxPQUFPLElBQUtpdkIsSUFBTUEsRUFBSSxVQUFVLFNBQVVoaEIsRUFBU0MsRUFBUSxDQUN2RCxTQUFTa2hCLEVBQVVwdkIsRUFBTyxDQUFFLEdBQUksQ0FBRXF2QixFQUFLSCxFQUFVLEtBQUtsdkIsQ0FBSyxDQUFDLENBQUUsT0FBVXlQLEVBQUcsQ0FBRXZCLEVBQU91QixDQUFDLEVBQU0sQ0FDM0YsU0FBUzZmLEVBQVN0dkIsRUFBTyxDQUFFLEdBQUksQ0FBRXF2QixFQUFLSCxFQUFVLE1BQVNsdkIsQ0FBSyxDQUFDLENBQUksT0FBUXlQLEVBQUcsQ0FBRXZCLEVBQU91QixDQUFDLEVBQU0sQ0FDOUYsU0FBUzRmLEVBQUs3b0IsRUFBUSxDQUFFQSxFQUFPLEtBQU95SCxFQUFRekgsRUFBTyxLQUFLLEVBQUkyb0IsRUFBTTNvQixFQUFPLEtBQUssRUFBRSxLQUFLNG9CLEVBQVdFLENBQVEsQ0FBSSxDQUM5R0QsR0FBTUgsRUFBWUEsRUFBVSxNQUFNSCxFQUFTQyxHQUFjLENBQUUsQ0FBQSxHQUFHLEtBQUksQ0FBRSxDQUM1RSxDQUFLLENBQ0wsRUFDSU8sY0FBZXp6QixnQkFBUUEsZUFBSyxhQUFnQixTQUFVaXpCLEVBQVNySCxFQUFNLENBQ3JFLElBQUkxYSxFQUFJLENBQUUsTUFBTyxFQUFHLEtBQU0sVUFBVyxDQUFFLEdBQUl5SSxFQUFFLENBQUMsRUFBSSxFQUFHLE1BQU1BLEVBQUUsQ0FBQyxFQUFHLE9BQU9BLEVBQUUsQ0FBQyxDQUFJLEVBQUUsS0FBTSxDQUFFLEVBQUUsSUFBSyxDQUFBLENBQUksRUFBRStaLEVBQUdDLEVBQUdoYSxFQUFHaWEsRUFDL0csT0FBT0EsRUFBSSxDQUFFLEtBQU1DLEVBQUssQ0FBQyxFQUFHLE1BQVNBLEVBQUssQ0FBQyxFQUFHLE9BQVVBLEVBQUssQ0FBQyxDQUFHLEVBQUUsT0FBTyxRQUFXLGFBQWVELEVBQUUsT0FBTyxRQUFRLEVBQUksVUFBVyxDQUFFLE9BQU8sSUFBTyxHQUFHQSxFQUN2SixTQUFTQyxFQUFLL2pCLEVBQUcsQ0FBRSxPQUFPLFNBQVVpQyxFQUFHLENBQUUsT0FBT3doQixFQUFLLENBQUN6akIsRUFBR2lDLENBQUMsQ0FBQyxDQUFJLENBQUcsQ0FDbEUsU0FBU3doQixFQUFLTyxFQUFJLENBQ2QsR0FBSUosRUFBRyxNQUFNLElBQUksVUFBVSxpQ0FBaUMsRUFDNUQsS0FBT0UsSUFBTUEsRUFBSSxFQUFHRSxFQUFHLENBQUMsSUFBTTVpQixFQUFJLElBQUtBLEdBQUcsR0FBSSxDQUMxQyxHQUFJd2lCLEVBQUksRUFBR0MsSUFBTWhhLEVBQUltYSxFQUFHLENBQUMsRUFBSSxFQUFJSCxFQUFFLE9BQVlHLEVBQUcsQ0FBQyxFQUFJSCxFQUFFLFNBQWNoYSxFQUFJZ2EsRUFBRSxTQUFjaGEsRUFBRSxLQUFLZ2EsQ0FBQyxFQUFHLEdBQUtBLEVBQUUsT0FBUyxFQUFFaGEsRUFBSUEsRUFBRSxLQUFLZ2EsRUFBR0csRUFBRyxDQUFDLENBQUMsR0FBRyxLQUFNLE9BQU9uYSxFQUUzSixPQURJZ2EsRUFBSSxFQUFHaGEsSUFBR21hLEVBQUssQ0FBQ0EsRUFBRyxDQUFDLEVBQUksRUFBR25hLEVBQUUsS0FBSyxHQUM5Qm1hLEVBQUcsQ0FBQyxFQUFDLENBQ1QsSUFBSyxHQUFHLElBQUssR0FBR25hLEVBQUltYSxFQUFJLE1BQ3hCLElBQUssR0FBRyxPQUFBNWlCLEVBQUUsUUFBZ0IsQ0FBRSxNQUFPNGlCLEVBQUcsQ0FBQyxFQUFHLEtBQU0sRUFBSyxFQUNyRCxJQUFLLEdBQUc1aUIsRUFBRSxRQUFTeWlCLEVBQUlHLEVBQUcsQ0FBQyxFQUFHQSxFQUFLLENBQUMsQ0FBQyxFQUFHLFNBQ3hDLElBQUssR0FBR0EsRUFBSzVpQixFQUFFLElBQUksTUFBT0EsRUFBRSxLQUFLLElBQUcsRUFBSSxTQUN4QyxRQUNJLEdBQU15SSxFQUFJekksRUFBRSxLQUFNLEVBQUF5SSxFQUFJQSxFQUFFLE9BQVMsR0FBS0EsRUFBRUEsRUFBRSxPQUFTLENBQUMsS0FBT21hLEVBQUcsQ0FBQyxJQUFNLEdBQUtBLEVBQUcsQ0FBQyxJQUFNLEdBQUksQ0FBRTVpQixFQUFJLEVBQUcsUUFBVyxDQUM1RyxHQUFJNGlCLEVBQUcsQ0FBQyxJQUFNLElBQU0sQ0FBQ25hLEdBQU1tYSxFQUFHLENBQUMsRUFBSW5hLEVBQUUsQ0FBQyxHQUFLbWEsRUFBRyxDQUFDLEVBQUluYSxFQUFFLENBQUMsR0FBSyxDQUFFekksRUFBRSxNQUFRNGlCLEVBQUcsQ0FBQyxFQUFHLEtBQVEsQ0FDdEYsR0FBSUEsRUFBRyxDQUFDLElBQU0sR0FBSzVpQixFQUFFLE1BQVF5SSxFQUFFLENBQUMsRUFBRyxDQUFFekksRUFBRSxNQUFReUksRUFBRSxDQUFDLEVBQUdBLEVBQUltYSxFQUFJLEtBQVEsQ0FDckUsR0FBSW5hLEdBQUt6SSxFQUFFLE1BQVF5SSxFQUFFLENBQUMsRUFBRyxDQUFFekksRUFBRSxNQUFReUksRUFBRSxDQUFDLEVBQUd6SSxFQUFFLElBQUksS0FBSzRpQixDQUFFLEVBQUcsS0FBUSxDQUMvRG5hLEVBQUUsQ0FBQyxHQUFHekksRUFBRSxJQUFJLElBQUcsRUFDbkJBLEVBQUUsS0FBSyxJQUFLLEVBQUUsUUFDckIsQ0FDRDRpQixFQUFLbEksRUFBSyxLQUFLcUgsRUFBUy9oQixDQUFDLENBQzVCLE9BQVF5QyxFQUFHLENBQUVtZ0IsRUFBSyxDQUFDLEVBQUduZ0IsQ0FBQyxFQUFHZ2dCLEVBQUksQ0FBRSxRQUFXLENBQUVELEVBQUkvWixFQUFJLENBQUksQ0FDMUQsR0FBSW1hLEVBQUcsQ0FBQyxFQUFJLEVBQUcsTUFBTUEsRUFBRyxDQUFDLEVBQUcsTUFBTyxDQUFFLE1BQU9BLEVBQUcsQ0FBQyxFQUFJQSxFQUFHLENBQUMsRUFBSSxPQUFRLEtBQU0sR0FDN0UsQ0FDTCxFQUNJQyxrQkFBbUIvekIsZ0JBQVFBLGVBQUssaUJBQW9CLFNBQVVnMEIsRUFBSyxDQUNuRSxPQUFRQSxHQUFPQSxFQUFJLFdBQWNBLEVBQU0sQ0FBRSxRQUFXQSxFQUN4RCxFQUNBLE9BQU8sZUFBZTBGLGFBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSSxDQUFFLEVBQzFDQSxhQUFBLFdBQUcsT0FDckIsSUFBSUMsY0FBYzVGLGtCQUFnQmpCLE9BQW9CLEVBQ2xEOEcsYUFBYTdHLFdBQ2JiLDZCQUE2QmtGLDJCQUM3QixhQUFleUMsYUFDZixXQUE0QixTQUFVMUgsRUFBUSxDQUM5QyxVQUFVMkgsRUFBWTNILENBQU0sRUFDNUIsU0FBUzJILEdBQWEsQ0FDbEIsT0FBTzNILElBQVcsTUFBUUEsRUFBTyxNQUFNLEtBQU0sU0FBUyxHQUFLLElBQzlELENBQ0QsT0FBQTJILEVBQVcsVUFBVSxXQUFhLFNBQVUvTixFQUFRLENBQ2hELE9BQU9pSCxZQUFVLEtBQU0sT0FBUSxPQUFRLFVBQVksQ0FDL0MsSUFBSTNDLEVBQU0wSixFQUFVNUYsRUFBSTZGLEVBQVF2a0IsRUFBTXVqQixFQUFLNUUsRUFBSTZGLEVBQVF4a0IsRUFBTXlrQixFQUM3RCxPQUFPekcsY0FBWSxLQUFNLFNBQVVZLEVBQUksQ0FDbkMsT0FBUUEsRUFBRyxNQUFLLENBQ1osSUFBSyxHQUtELEdBSkFoRSxFQUFPLEtBQUssMEJBQTBCLENBQ2xDLGFBQWMsTUFDMUMsQ0FBeUIsRUFDRDBKLEVBQVcsSUFBSUosY0FBWSxRQUN2QixFQUFFLFNBQVU1TixFQUFPLE1BQU8sTUFBTyxDQUFDLEVBQWEsQ0FBQyxFQUNwRHNJLEVBQUcsTUFBUSxFQUNmLElBQUssR0FDRCxPQUFBQSxFQUFHLEtBQUssS0FBSyxDQUFDLEVBQUcsRUFBQyxDQUFJLENBQUMsQ0FBQyxFQUNqQixDQUFDLEVBQWF1RixhQUFXLGFBQWEsaUJBQWlCN04sRUFBTyxLQUFLLElBQUksQ0FBQyxFQUNuRixJQUFLLEdBQ0QsT0FBQW9JLEVBQUtFLEVBQUcsS0FBSSxFQUFJMkYsRUFBUzdGLEVBQUcsS0FBTTFlLEVBQU8wZSxFQUFHLEtBQzVDNEYsRUFBUyxPQUFPLE9BQVF0a0IsRUFBTXVrQixDQUFNLEVBQzdCLENBQUMsRUFBYSxDQUFDLEVBQzFCLElBQUssR0FFRCxNQURBaEIsRUFBTTNFLEVBQUcsT0FDTDJFLGFBQWU5Ryw2QkFBMkIseUJBQ3BDLElBQUksTUFBTSxxREFBcUQsT0FBTzhHLEVBQUksU0FBVSxlQUFlLENBQUMsRUFFeEdBLEVBQ1YsSUFBSyxHQUFHLE1BQU8sQ0FBQyxFQUFhLENBQUMsRUFDOUIsSUFBSyxHQUNENUUsRUFBS3JJLEVBQU8sS0FBTWtPLEVBQVM3RixFQUFHLEtBQU0zZSxFQUFPMmUsRUFBRyxLQUM5QzhGLEVBQVdOLGFBQVcsYUFBYSxtQkFBbUJua0IsRUFBTXdrQixDQUFNLEVBQ2xFRixFQUFTLE9BQU8sT0FBUUcsRUFBVUQsQ0FBTSxFQUN4QzVGLEVBQUcsTUFBUSxFQUNmLElBQUssR0FBRyxNQUFPLENBQUMsRUFBYyxLQUFLLE9BQU8sU0FBU2hFLEVBQU0wSixDQUFRLENBQUMsQ0FDckUsQ0FDakIsQ0FBYSxDQUNiLENBQVMsQ0FDVCxFQUNJRCxFQUFXLFVBQVUsYUFBZSxTQUFVL04sRUFBUSxDQUNsRCxJQUFJc0UsRUFBTyxLQUFLLDBCQUEwQixDQUN0QyxhQUFjLE1BQzFCLENBQVMsRUFDRCxPQUFPLEtBQUssT0FBTyxRQUFRQSxFQUFNdEUsQ0FBTSxDQUMvQyxFQUNXK04sQ0FDWCxFQUFFLGFBQWEsVUFBVSxFQUNQSixhQUFBLFdBQUcsd0NDM0dyQixTQUFTUyxPQUFLcHhCLEVBQUlrcUIsRUFBUyxDQUN6QixPQUFPLFVBQWdCLENBQ3JCLE9BQU9scUIsRUFBRyxNQUFNa3FCLEVBQVMsU0FBUyxDQUN0QyxDQUNBLENBSUEsS0FBTSxDQUFDLFFBQVEsRUFBSSxPQUFPLFVBQ3BCLENBQUMsY0FBYyxFQUFJLE9BRW5CLFFBQVVycUIsR0FBU3d4QixHQUFTLENBQzlCLE1BQU1DLEVBQU0sU0FBUyxLQUFLRCxDQUFLLEVBQy9CLE9BQU94eEIsRUFBTXl4QixDQUFHLElBQU16eEIsRUFBTXl4QixDQUFHLEVBQUlBLEVBQUksTUFBTSxFQUFHLEVBQUUsRUFBRSxZQUFhLEVBQ3JFLEdBQUcsT0FBTyxPQUFPLElBQUksQ0FBQyxFQUVoQixXQUFjajJCLElBQ2xCQSxFQUFPQSxFQUFLLGNBQ0pnMkIsR0FBVSxPQUFPQSxDQUFLLElBQU1oMkIsR0FHaEMsV0FBYUEsR0FBUWcyQixHQUFTLE9BQU9BLElBQVVoMkIsRUFTL0MsQ0FBQ2syQixRQUFBQSxTQUFPLEVBQUksTUFTWixZQUFjLFdBQVcsV0FBVyxFQVMxQyxTQUFTQyxXQUFTNzRCLEVBQUssQ0FDckIsT0FBT0EsSUFBUSxNQUFRLENBQUMsWUFBWUEsQ0FBRyxHQUFLQSxFQUFJLGNBQWdCLE1BQVEsQ0FBQyxZQUFZQSxFQUFJLFdBQVcsR0FDL0YsV0FBV0EsRUFBSSxZQUFZLFFBQVEsR0FBS0EsRUFBSSxZQUFZLFNBQVNBLENBQUcsQ0FDM0UsQ0FTQSxNQUFNLGNBQWdCLFdBQVcsYUFBYSxFQVU5QyxTQUFTLGtCQUFrQkEsRUFBSyxDQUM5QixJQUFJZ0osRUFDSixPQUFLLE9BQU8sWUFBZ0IsS0FBaUIsWUFBWSxPQUN2REEsRUFBUyxZQUFZLE9BQU9oSixDQUFHLEVBRS9CZ0osRUFBVWhKLEdBQVNBLEVBQUksUUFBWSxjQUFjQSxFQUFJLE1BQU0sRUFFdERnSixDQUNULENBU0EsTUFBTTh2QixXQUFXLFdBQVcsUUFBUSxFQVE5QixXQUFhLFdBQVcsVUFBVSxFQVNsQ0MsV0FBVyxXQUFXLFFBQVEsRUFTOUIsU0FBWUwsR0FBVUEsSUFBVSxNQUFRLE9BQU9BLEdBQVUsU0FRekRNLFlBQVlOLEdBQVNBLElBQVUsSUFBUUEsSUFBVSxHQVNqRCxjQUFpQjE0QixHQUFRLENBQzdCLEdBQUksT0FBT0EsQ0FBRyxJQUFNLFNBQ2xCLE1BQU8sR0FHVCxNQUFNaTVCLEVBQVksZUFBZWo1QixDQUFHLEVBQ3BDLE9BQVFpNUIsSUFBYyxNQUFRQSxJQUFjLE9BQU8sV0FBYSxPQUFPLGVBQWVBLENBQVMsSUFBTSxPQUFTLEVBQUUsT0FBTyxlQUFlajVCLElBQVEsRUFBRSxPQUFPLFlBQVlBLEVBQ3JLLEVBU01rNUIsU0FBUyxXQUFXLE1BQU0sRUFTMUIsT0FBUyxXQUFXLE1BQU0sRUFTMUIsT0FBUyxXQUFXLE1BQU0sRUFTMUIsV0FBYSxXQUFXLFVBQVUsRUFTbEMsU0FBWWw1QixHQUFRLFNBQVNBLENBQUcsR0FBSyxXQUFXQSxFQUFJLElBQUksRUFTeEQsV0FBYzA0QixHQUFVLENBQzVCLElBQUlTLEVBQ0osT0FBT1QsSUFDSixPQUFPLFVBQWEsWUFBY0EsYUFBaUIsVUFDbEQsV0FBV0EsRUFBTSxNQUFNLEtBQ3BCUyxFQUFPLE9BQU9ULENBQUssS0FBTyxZQUUxQlMsSUFBUyxVQUFZLFdBQVdULEVBQU0sUUFBUSxHQUFLQSxFQUFNLFNBQVUsSUFBSyxxQkFJakYsRUFTTSxrQkFBb0IsV0FBVyxpQkFBaUIsRUFFaEQsQ0FBQyxpQkFBa0IsVUFBVyxXQUFZLFNBQVMsRUFBSSxDQUFDLGlCQUFrQixVQUFXLFdBQVksU0FBUyxFQUFFLElBQUksVUFBVSxFQVMxSCxLQUFRQyxHQUFRQSxFQUFJLEtBQ3hCQSxFQUFJLEtBQUksRUFBS0EsRUFBSSxRQUFRLHFDQUFzQyxFQUFFLEVBaUJuRSxTQUFTLFFBQVFwNUIsRUFBSzhILEVBQUksQ0FBQyxXQUFBK3hCLEVBQWEsRUFBSyxFQUFJLEdBQUksQ0FFbkQsR0FBSTc1QixJQUFRLE1BQVEsT0FBT0EsRUFBUSxJQUNqQyxPQUdGLElBQUlRLEVBQ0FrUCxFQVFKLEdBTEksT0FBTzFQLEdBQVEsV0FFakJBLEVBQU0sQ0FBQ0EsQ0FBRyxHQUdScTVCLFVBQVFyNUIsQ0FBRyxFQUViLElBQUtRLEVBQUksRUFBR2tQLEVBQUkxUCxFQUFJLE9BQVFRLEVBQUlrUCxFQUFHbFAsSUFDakNzSCxFQUFHLEtBQUssS0FBTTlILEVBQUlRLENBQUMsRUFBR0EsRUFBR1IsQ0FBRyxNQUV6QixDQUVMLE1BQU0wSCxFQUFPbXlCLEVBQWEsT0FBTyxvQkFBb0I3NUIsQ0FBRyxFQUFJLE9BQU8sS0FBS0EsQ0FBRyxFQUNyRXVCLEVBQU1tRyxFQUFLLE9BQ2pCLElBQUlFLEVBRUosSUFBS3BILEVBQUksRUFBR0EsRUFBSWUsRUFBS2YsSUFDbkJvSCxFQUFNRixFQUFLbEgsQ0FBQyxFQUNac0gsRUFBRyxLQUFLLEtBQU05SCxFQUFJNEgsQ0FBRyxFQUFHQSxFQUFLNUgsQ0FBRyxDQUVuQyxDQUNILENBRUEsU0FBUyxRQUFRQSxFQUFLNEgsRUFBSyxDQUN6QkEsRUFBTUEsRUFBSSxjQUNWLE1BQU1GLEVBQU8sT0FBTyxLQUFLMUgsQ0FBRyxFQUM1QixJQUFJUSxFQUFJa0gsRUFBSyxPQUNUbU0sRUFDSixLQUFPclQsS0FBTSxHQUVYLEdBREFxVCxFQUFPbk0sRUFBS2xILENBQUMsRUFDVG9ILElBQVFpTSxFQUFLLGNBQ2YsT0FBT0EsRUFHWCxPQUFPLElBQ1QsQ0FFQSxNQUFNLFNBQVcsSUFFWCxPQUFPLFdBQWUsSUFBb0IsV0FDdkMsT0FBTyxLQUFTLElBQWMsS0FBUSxPQUFPLE9BQVcsSUFBYyxPQUFTbFYsa0JBR2xGLGlCQUFvQnFDLEdBQVksQ0FBQyxZQUFZQSxDQUFPLEdBQUtBLElBQVksUUFvQjNFLFNBQVM4NEIsU0FBbUMsQ0FDMUMsS0FBTSxDQUFDLFNBQUFDLENBQVEsRUFBSSxpQkFBaUIsSUFBSSxHQUFLLE1BQVEsR0FDL0N0d0IsRUFBUyxDQUFBLEVBQ1R1d0IsRUFBYyxDQUFDdjVCLEVBQUttSCxJQUFRLENBQ2hDLE1BQU1xeUIsRUFBWUYsR0FBWSxRQUFRdHdCLEVBQVE3QixDQUFHLEdBQUtBLEVBQ2xELGNBQWM2QixFQUFPd3dCLENBQVMsQ0FBQyxHQUFLLGNBQWN4NUIsQ0FBRyxFQUN2RGdKLEVBQU93d0IsQ0FBUyxFQUFJSCxRQUFNcndCLEVBQU93d0IsQ0FBUyxFQUFHeDVCLENBQUcsRUFDdkMsY0FBY0EsQ0FBRyxFQUMxQmdKLEVBQU93d0IsQ0FBUyxFQUFJSCxRQUFNLENBQUUsRUFBRXI1QixDQUFHLEVBQ3hCNDRCLFVBQVE1NEIsQ0FBRyxFQUNwQmdKLEVBQU93d0IsQ0FBUyxFQUFJeDVCLEVBQUksTUFBSyxFQUU3QmdKLEVBQU93d0IsQ0FBUyxFQUFJeDVCLENBRTFCLEVBRUUsUUFBU0QsRUFBSSxFQUFHa1AsRUFBSSxVQUFVLE9BQVFsUCxFQUFJa1AsRUFBR2xQLElBQzNDLFVBQVVBLENBQUMsR0FBSyxRQUFRLFVBQVVBLENBQUMsRUFBR3c1QixDQUFXLEVBRW5ELE9BQU92d0IsQ0FDVCxDQVlBLE1BQU0sT0FBUyxDQUFDL0YsRUFBR0MsRUFBR3F1QixFQUFTLENBQUMsV0FBQTZILENBQVUsRUFBRyxNQUMzQyxRQUFRbDJCLEVBQUcsQ0FBQ2xELEVBQUttSCxJQUFRLENBQ25Cb3FCLEdBQVcsV0FBV3Z4QixDQUFHLEVBQzNCaUQsRUFBRWtFLENBQUcsRUFBSXN4QixPQUFLejRCLEVBQUt1eEIsQ0FBTyxFQUUxQnR1QixFQUFFa0UsQ0FBRyxFQUFJbkgsQ0FFZixFQUFLLENBQUMsV0FBQW81QixDQUFVLENBQUMsRUFDUm4yQixHQVVILFNBQVkrVyxJQUNaQSxFQUFRLFdBQVcsQ0FBQyxJQUFNLFFBQzVCQSxFQUFVQSxFQUFRLE1BQU0sQ0FBQyxHQUVwQkEsR0FZSCxTQUFXLENBQUN5ZixFQUFhQyxFQUFrQnRnQixFQUFPdWdCLElBQWdCLENBQ3RFRixFQUFZLFVBQVksT0FBTyxPQUFPQyxFQUFpQixVQUFXQyxDQUFXLEVBQzdFRixFQUFZLFVBQVUsWUFBY0EsRUFDcEMsT0FBTyxlQUFlQSxFQUFhLFFBQVMsQ0FDMUMsTUFBT0MsRUFBaUIsU0FDNUIsQ0FBRyxFQUNEdGdCLEdBQVMsT0FBTyxPQUFPcWdCLEVBQVksVUFBV3JnQixDQUFLLENBQ3JELEVBV00sYUFBZSxDQUFDd2dCLEVBQVdDLEVBQVM3dEIsRUFBUW1WLElBQWUsQ0FDL0QsSUFBSS9ILEVBQ0FyWixFQUNBaVUsRUFDSixNQUFNOGxCLEVBQVMsQ0FBQSxFQUlmLEdBRkFELEVBQVVBLEdBQVcsR0FFakJELEdBQWEsS0FBTSxPQUFPQyxFQUU5QixFQUFHLENBR0QsSUFGQXpnQixFQUFRLE9BQU8sb0JBQW9Cd2dCLENBQVMsRUFDNUM3NUIsRUFBSXFaLEVBQU0sT0FDSHJaLEtBQU0sR0FDWGlVLEVBQU9vRixFQUFNclosQ0FBQyxHQUNULENBQUNvaEIsR0FBY0EsRUFBV25OLEVBQU00bEIsRUFBV0MsQ0FBTyxJQUFNLENBQUNDLEVBQU85bEIsQ0FBSSxJQUN2RTZsQixFQUFRN2xCLENBQUksRUFBSTRsQixFQUFVNWxCLENBQUksRUFDOUI4bEIsRUFBTzlsQixDQUFJLEVBQUksSUFHbkI0bEIsRUFBWTV0QixJQUFXLElBQVMsZUFBZTR0QixDQUFTLENBQzVELE9BQVdBLElBQWMsQ0FBQzV0QixHQUFVQSxFQUFPNHRCLEVBQVdDLENBQU8sSUFBTUQsSUFBYyxPQUFPLFdBRXRGLE9BQU9DLENBQ1QsRUFXTSxTQUFXLENBQUNsQixFQUFLb0IsRUFBY2hQLElBQWEsQ0FDaEQ0TixFQUFNLE9BQU9BLENBQUcsR0FDWjVOLElBQWEsUUFBYUEsRUFBVzROLEVBQUksVUFDM0M1TixFQUFXNE4sRUFBSSxRQUVqQjVOLEdBQVlnUCxFQUFhLE9BQ3pCLE1BQU1DLEVBQVlyQixFQUFJLFFBQVFvQixFQUFjaFAsQ0FBUSxFQUNwRCxPQUFPaVAsSUFBYyxJQUFNQSxJQUFjalAsQ0FDM0MsRUFVTSxRQUFXMk4sR0FBVSxDQUN6QixHQUFJLENBQUNBLEVBQU8sT0FBTyxLQUNuQixHQUFJRSxVQUFRRixDQUFLLEVBQUcsT0FBT0EsRUFDM0IsSUFBSTM0QixFQUFJMjRCLEVBQU0sT0FDZCxHQUFJLENBQUNLLFdBQVNoNUIsQ0FBQyxFQUFHLE9BQU8sS0FDekIsTUFBTXRCLEVBQU0sSUFBSSxNQUFNc0IsQ0FBQyxFQUN2QixLQUFPQSxLQUFNLEdBQ1h0QixFQUFJc0IsQ0FBQyxFQUFJMjRCLEVBQU0zNEIsQ0FBQyxFQUVsQixPQUFPdEIsQ0FDVCxFQVdNLGNBQWdCdzdCLEdBRWJ2QixHQUNFdUIsR0FBY3ZCLGFBQWlCdUIsR0FFdkMsT0FBTyxXQUFlLEtBQWUsZUFBZSxVQUFVLENBQUMsRUFVNUQsYUFBZSxDQUFDMTZCLEVBQUs4SCxJQUFPLENBR2hDLE1BQU02eUIsR0FGWTM2QixHQUFPQSxFQUFJLE9BQU8sUUFBUSxHQUVqQixLQUFLQSxDQUFHLEVBRW5DLElBQUl5SixFQUVKLE1BQVFBLEVBQVNreEIsRUFBUyxLQUFJLElBQU8sQ0FBQ2x4QixFQUFPLE1BQU0sQ0FDakQsTUFBTW14QixFQUFPbnhCLEVBQU8sTUFDcEIzQixFQUFHLEtBQUs5SCxFQUFLNDZCLEVBQUssQ0FBQyxFQUFHQSxFQUFLLENBQUMsQ0FBQyxDQUM5QixDQUNILEVBVU0sU0FBVyxDQUFDQyxFQUFRekIsSUFBUSxDQUNoQyxJQUFJdDJCLEVBQ0osTUFBTTVELEVBQU0sQ0FBQSxFQUVaLE1BQVE0RCxFQUFVKzNCLEVBQU8sS0FBS3pCLENBQUcsS0FBTyxNQUN0Q2w2QixFQUFJLEtBQUs0RCxDQUFPLEVBR2xCLE9BQU81RCxDQUNULEVBR00sV0FBYSxXQUFXLGlCQUFpQixFQUV6QyxZQUFjazZCLEdBQ1hBLEVBQUksY0FBYyxRQUFRLHdCQUMvQixTQUFrQnB5QixFQUFHOHpCLEVBQUlDLEVBQUksQ0FDM0IsT0FBT0QsRUFBRyxZQUFhLEVBQUdDLENBQzNCLENBQ0wsRUFJTSxnQkFBa0IsQ0FBQyxDQUFDLGVBQUFDLENBQWMsSUFBTSxDQUFDaDdCLEVBQUt5VSxJQUFTdW1CLEVBQWUsS0FBS2g3QixFQUFLeVUsQ0FBSSxHQUFHLE9BQU8sU0FBUyxFQVN2R3dtQixXQUFXLFdBQVcsUUFBUSxFQUU5QixrQkFBb0IsQ0FBQ2o3QixFQUFLazdCLElBQVksQ0FDMUMsTUFBTWQsRUFBYyxPQUFPLDBCQUEwQnA2QixDQUFHLEVBQ2xEbTdCLEVBQXFCLENBQUEsRUFFM0IsUUFBUWYsRUFBYSxDQUFDZ0IsRUFBWTE1QixJQUFTLENBQ3pDLElBQUlQLEdBQ0NBLEVBQU0rNUIsRUFBUUUsRUFBWTE1QixFQUFNMUIsQ0FBRyxLQUFPLEtBQzdDbTdCLEVBQW1CejVCLENBQUksRUFBSVAsR0FBT2k2QixFQUV4QyxDQUFHLEVBRUQsT0FBTyxpQkFBaUJwN0IsRUFBS203QixDQUFrQixDQUNqRCxFQU9NLGNBQWlCbjdCLEdBQVEsQ0FDN0Isa0JBQWtCQSxFQUFLLENBQUNvN0IsRUFBWTE1QixJQUFTLENBRTNDLEdBQUksV0FBVzFCLENBQUcsR0FBSyxDQUFDLFlBQWEsU0FBVSxRQUFRLEVBQUUsUUFBUTBCLENBQUksSUFBTSxHQUN6RSxNQUFPLEdBR1QsTUFBTXVCLEVBQVFqRCxFQUFJMEIsQ0FBSSxFQUV0QixHQUFLLFdBQVd1QixDQUFLLEVBSXJCLElBRkFtNEIsRUFBVyxXQUFhLEdBRXBCLGFBQWNBLEVBQVksQ0FDNUJBLEVBQVcsU0FBVyxHQUN0QixNQUNELENBRUlBLEVBQVcsTUFDZEEsRUFBVyxJQUFNLElBQU0sQ0FDckIsTUFBTSxNQUFNLHFDQUF3QzE1QixFQUFPLEdBQUksQ0FDdkUsR0FFQSxDQUFHLENBQ0gsRUFFTSxZQUFjLENBQUMyNUIsRUFBZUMsSUFBYyxDQUNoRCxNQUFNdDdCLEVBQU0sQ0FBQSxFQUVOdTdCLEVBQVVyOEIsR0FBUSxDQUN0QkEsRUFBSSxRQUFRK0QsR0FBUyxDQUNuQmpELEVBQUlpRCxDQUFLLEVBQUksRUFDbkIsQ0FBSyxDQUNMLEVBRUVvMkIsaUJBQVFnQyxDQUFhLEVBQUlFLEVBQU9GLENBQWEsRUFBSUUsRUFBTyxPQUFPRixDQUFhLEVBQUUsTUFBTUMsQ0FBUyxDQUFDLEVBRXZGdDdCLENBQ1QsRUFFTXc3QixPQUFPLElBQU0sQ0FBQSxFQUViLGVBQWlCLENBQUN2NEIsRUFBT3c0QixJQUN0Qng0QixHQUFTLE1BQVEsT0FBTyxTQUFTQSxFQUFRLENBQUNBLENBQUssRUFBSUEsRUFBUXc0QixFQUc5RCxNQUFRLDZCQUVSLE1BQVEsYUFFUixTQUFXLENBQ2YsTUFDQSxNQUNBLFlBQWEsTUFBUSxNQUFNLFlBQWEsRUFBRyxLQUM3QyxFQUVNLGVBQWlCLENBQUNyRCxFQUFPLEdBQUlzRCxFQUFXLFNBQVMsY0FBZ0IsQ0FDckUsSUFBSXRDLEVBQU0sR0FDVixLQUFNLENBQUMsT0FBQXAzQixDQUFNLEVBQUkwNUIsRUFDakIsS0FBT3RELEtBQ0xnQixHQUFPc0MsRUFBUyxLQUFLLE9BQU0sRUFBSzE1QixFQUFPLENBQUMsRUFHMUMsT0FBT28zQixDQUNULEVBU0EsU0FBUyxvQkFBb0JELEVBQU8sQ0FDbEMsTUFBTyxDQUFDLEVBQUVBLEdBQVMsV0FBV0EsRUFBTSxNQUFNLEdBQUtBLEVBQU0sT0FBTyxXQUFXLElBQU0sWUFBY0EsRUFBTSxPQUFPLFFBQVEsRUFDbEgsQ0FFQSxNQUFNLGFBQWdCbjVCLEdBQVEsQ0FDNUIsTUFBTTI3QixFQUFRLElBQUksTUFBTSxFQUFFLEVBRXBCQyxFQUFRLENBQUNDLEVBQVEsSUFBTSxDQUUzQixHQUFJLFNBQVNBLENBQU0sRUFBRyxDQUNwQixHQUFJRixFQUFNLFFBQVFFLENBQU0sR0FBSyxFQUMzQixPQUdGLEdBQUcsRUFBRSxXQUFZQSxHQUFTLENBQ3hCRixFQUFNLENBQUMsRUFBSUUsRUFDWCxNQUFNOTVCLEVBQVNzM0IsVUFBUXdDLENBQU0sRUFBSSxDQUFBLEVBQUssQ0FBQSxFQUV0QyxlQUFRQSxFQUFRLENBQUM1NEIsRUFBTzJFLElBQVEsQ0FDOUIsTUFBTWswQixFQUFlRixFQUFNMzRCLEVBQU8sRUFBSSxDQUFDLEVBQ3ZDLENBQUMsWUFBWTY0QixDQUFZLElBQU0vNUIsRUFBTzZGLENBQUcsRUFBSWswQixFQUN2RCxDQUFTLEVBRURILEVBQU0sQ0FBQyxFQUFJLE9BRUo1NUIsQ0FDUixDQUNGLENBRUQsT0FBTzg1QixDQUNYLEVBRUUsT0FBT0QsRUFBTTU3QixFQUFLLENBQUMsQ0FDckIsRUFFTSxVQUFZLFdBQVcsZUFBZSxFQUV0QyxXQUFjbTVCLEdBQ2xCQSxJQUFVLFNBQVNBLENBQUssR0FBSyxXQUFXQSxDQUFLLElBQU0sV0FBV0EsRUFBTSxJQUFJLEdBQUssV0FBV0EsRUFBTSxLQUFLLEVBRXJHLElBQUk0QyxVQUFVLENBQ2QsUUFBRTFDLFVBQ0EsY0FDRixTQUFFQyxXQUNBLFdBQ0Esa0JBQ0YsU0FBRUMsV0FDRixTQUFFQyxXQUNGLFVBQUVDLFlBQ0EsU0FDQSxjQUNBLGlCQUNBLFVBQ0EsV0FDQSxVQUNBLFlBQ0YsT0FBRUUsU0FDQSxPQUNBLE9BQ0YsU0FBRXNCLFdBQ0EsV0FDQSxTQUNBLGtCQUNBLGFBQ0EsV0FDQSxRQUNGLE1BQUVuQixRQUNBLE9BQ0EsS0FDQSxTQUNBLFNBQ0EsYUFDQSxPQUNBLFdBQ0EsU0FDQSxRQUNBLGFBQ0EsU0FDQSxXQUNBLGVBQ0EsV0FBWSxlQUNaLGtCQUNBLGNBQ0EsWUFDQSxZQUNGLEtBQUUwQixPQUNBLGVBQ0EsUUFDQSxPQUFRLFFBQ1IsaUJBQ0EsU0FDQSxlQUNBLG9CQUNBLGFBQ0EsVUFDQSxVQUNGLEVBYUEsU0FBUyxXQUFXbEssRUFBU2p4QixFQUFNMjdCLEVBQVF6SCxFQUFTek0sRUFBVSxDQUM1RCxNQUFNLEtBQUssSUFBSSxFQUVYLE1BQU0sa0JBQ1IsTUFBTSxrQkFBa0IsS0FBTSxLQUFLLFdBQVcsRUFFOUMsS0FBSyxNQUFTLElBQUksTUFBSyxFQUFJLE1BRzdCLEtBQUssUUFBVXdKLEVBQ2YsS0FBSyxLQUFPLGFBQ1pqeEIsSUFBUyxLQUFLLEtBQU9BLEdBQ3JCMjdCLElBQVcsS0FBSyxPQUFTQSxHQUN6QnpILElBQVksS0FBSyxRQUFVQSxHQUMzQnpNLElBQWEsS0FBSyxTQUFXQSxFQUMvQixDQUVBaVUsVUFBUSxTQUFTLFdBQVksTUFBTyxDQUNsQyxPQUFRLFNBQVNFLEdBQVMsQ0FDeEIsTUFBTyxDQUVMLFFBQVMsS0FBSyxRQUNkLEtBQU0sS0FBSyxLQUVYLFlBQWEsS0FBSyxZQUNsQixPQUFRLEtBQUssT0FFYixTQUFVLEtBQUssU0FDZixXQUFZLEtBQUssV0FDakIsYUFBYyxLQUFLLGFBQ25CLE1BQU8sS0FBSyxNQUVaLE9BQVFGLFVBQVEsYUFBYSxLQUFLLE1BQU0sRUFDeEMsS0FBTSxLQUFLLEtBQ1gsT0FBUSxLQUFLLFVBQVksS0FBSyxTQUFTLE9BQVMsS0FBSyxTQUFTLE9BQVMsSUFDN0UsQ0FDRyxDQUNILENBQUMsRUFFRCxNQUFNLFlBQWMsV0FBVyxVQUN6QixZQUFjLENBQUEsRUFFcEIsQ0FDRSx1QkFDQSxpQkFDQSxlQUNBLFlBQ0EsY0FDQSw0QkFDQSxpQkFDQSxtQkFDQSxrQkFDQSxlQUNBLGtCQUNBLGlCQUVGLEVBQUUsUUFBUTE3QixHQUFRLENBQ2hCLFlBQVlBLENBQUksRUFBSSxDQUFDLE1BQU9BLENBQUksQ0FDbEMsQ0FBQyxFQUVELE9BQU8saUJBQWlCLFdBQVksV0FBVyxFQUMvQyxPQUFPLGVBQWUsWUFBYSxlQUFnQixDQUFDLE1BQU8sRUFBSSxDQUFDLEVBR2hFLFdBQVcsS0FBTyxDQUFDOFMsRUFBTzlTLEVBQU0yN0IsRUFBUXpILEVBQVN6TSxFQUFVb1UsSUFBZ0IsQ0FDekUsTUFBTUMsRUFBYSxPQUFPLE9BQU8sV0FBVyxFQUU1Q0osaUJBQVEsYUFBYTVvQixFQUFPZ3BCLEVBQVksU0FBZ0JuOEIsRUFBSyxDQUMzRCxPQUFPQSxJQUFRLE1BQU0sU0FDdEIsRUFBRXlVLEdBQ01BLElBQVMsY0FDakIsRUFFRCxXQUFXLEtBQUswbkIsRUFBWWhwQixFQUFNLFFBQVM5UyxFQUFNMjdCLEVBQVF6SCxFQUFTek0sQ0FBUSxFQUUxRXFVLEVBQVcsTUFBUWhwQixFQUVuQmdwQixFQUFXLEtBQU9ocEIsRUFBTSxLQUV4QitvQixHQUFlLE9BQU8sT0FBT0MsRUFBWUQsQ0FBVyxFQUU3Q0MsQ0FDVCxFQUdBLElBQUksWUFBYyxLQVNsQixTQUFTLFlBQVloRCxFQUFPLENBQzFCLE9BQU80QyxVQUFRLGNBQWM1QyxDQUFLLEdBQUs0QyxVQUFRLFFBQVE1QyxDQUFLLENBQzlELENBU0EsU0FBUyxlQUFldnhCLEVBQUssQ0FDM0IsT0FBT20wQixVQUFRLFNBQVNuMEIsRUFBSyxJQUFJLEVBQUlBLEVBQUksTUFBTSxFQUFHLEVBQUUsRUFBSUEsQ0FDMUQsQ0FXQSxTQUFTLFVBQVV3bkIsRUFBTXhuQixFQUFLdzBCLEVBQU0sQ0FDbEMsT0FBS2hOLEVBQ0VBLEVBQUssT0FBT3huQixDQUFHLEVBQUUsSUFBSSxTQUFjNEcsRUFBT2hPLEVBQUcsQ0FFbEQsT0FBQWdPLEVBQVEsZUFBZUEsQ0FBSyxFQUNyQixDQUFDNHRCLEdBQVE1N0IsRUFBSSxJQUFNZ08sRUFBUSxJQUFNQSxDQUN6QyxDQUFBLEVBQUUsS0FBSzR0QixFQUFPLElBQU0sRUFBRSxFQUxMeDBCLENBTXBCLENBU0EsU0FBUyxZQUFZMUksRUFBSyxDQUN4QixPQUFPNjhCLFVBQVEsUUFBUTc4QixDQUFHLEdBQUssQ0FBQ0EsRUFBSSxLQUFLLFdBQVcsQ0FDdEQsQ0FFQSxNQUFNLFdBQWE2OEIsVUFBUSxhQUFhQSxVQUFTLENBQUUsRUFBRSxLQUFNLFNBQVN0dkIsRUFBT2dJLEVBQU0sQ0FDL0UsTUFBTyxXQUFXLEtBQUtBLENBQUksQ0FDN0IsQ0FBQyxFQXlCRCxTQUFTLFdBQVd6VSxFQUFLODRCLEVBQVVyM0IsRUFBUyxDQUMxQyxHQUFJLENBQUNzNkIsVUFBUSxTQUFTLzdCLENBQUcsRUFDdkIsTUFBTSxJQUFJLFVBQVUsMEJBQTBCLEVBSWhEODRCLEVBQVdBLEdBQVksSUFBSyxTQUc1QnIzQixFQUFVczZCLFVBQVEsYUFBYXQ2QixFQUFTLENBQ3RDLFdBQVksR0FDWixLQUFNLEdBQ04sUUFBUyxFQUNWLEVBQUUsR0FBTyxTQUFpQjZpQixFQUFRdVgsRUFBUSxDQUV6QyxNQUFPLENBQUNFLFVBQVEsWUFBWUYsRUFBT3ZYLENBQU0sQ0FBQyxDQUM5QyxDQUFHLEVBRUQsTUFBTStYLEVBQWE1NkIsRUFBUSxXQUVyQjY2QixFQUFVNzZCLEVBQVEsU0FBVzg2QixFQUM3QkgsRUFBTzM2QixFQUFRLEtBQ2YrNkIsRUFBVS82QixFQUFRLFFBRWxCZzdCLEdBRFFoN0IsRUFBUSxNQUFRLE9BQU8sS0FBUyxLQUFlLE9BQ3BDczZCLFVBQVEsb0JBQW9CakQsQ0FBUSxFQUU3RCxHQUFJLENBQUNpRCxVQUFRLFdBQVdPLENBQU8sRUFDN0IsTUFBTSxJQUFJLFVBQVUsNEJBQTRCLEVBR2xELFNBQVNJLEVBQWF6NUIsRUFBTyxDQUMzQixHQUFJQSxJQUFVLEtBQU0sTUFBTyxHQUUzQixHQUFJODRCLFVBQVEsT0FBTzk0QixDQUFLLEVBQ3RCLE9BQU9BLEVBQU0sY0FHZixHQUFJLENBQUN3NUIsR0FBV1YsVUFBUSxPQUFPOTRCLENBQUssRUFDbEMsTUFBTSxJQUFJLFdBQVcsOENBQThDLEVBR3JFLE9BQUk4NEIsVUFBUSxjQUFjOTRCLENBQUssR0FBSzg0QixVQUFRLGFBQWE5NEIsQ0FBSyxFQUNyRHc1QixHQUFXLE9BQU8sTUFBUyxXQUFhLElBQUksS0FBSyxDQUFDeDVCLENBQUssQ0FBQyxFQUFJLE9BQU8sS0FBS0EsQ0FBSyxFQUcvRUEsQ0FDUixDQVlELFNBQVNzNUIsRUFBZXQ1QixFQUFPMkUsRUFBS3duQixFQUFNLENBQ3hDLElBQUlsd0IsRUFBTStELEVBRVYsR0FBSUEsR0FBUyxDQUFDbXNCLEdBQVEsT0FBT25zQixHQUFVLFVBQ3JDLEdBQUk4NEIsVUFBUSxTQUFTbjBCLEVBQUssSUFBSSxFQUU1QkEsRUFBTXkwQixFQUFhejBCLEVBQU1BLEVBQUksTUFBTSxFQUFHLEVBQUUsRUFFeEMzRSxFQUFRLEtBQUssVUFBVUEsQ0FBSyxVQUUzQjg0QixVQUFRLFFBQVE5NEIsQ0FBSyxHQUFLLFlBQVlBLENBQUssSUFDMUM4NEIsVUFBUSxXQUFXOTRCLENBQUssR0FBSzg0QixVQUFRLFNBQVNuMEIsRUFBSyxJQUFJLEtBQU8xSSxFQUFNNjhCLFVBQVEsUUFBUTk0QixDQUFLLEdBRzNGLE9BQUEyRSxFQUFNLGVBQWVBLENBQUcsRUFFeEIxSSxFQUFJLFFBQVEsU0FBYzhJLEVBQUk0SSxFQUFPLENBQ25DLEVBQUVtckIsVUFBUSxZQUFZL3pCLENBQUUsR0FBS0EsSUFBTyxPQUFTOHdCLEVBQVMsT0FFcEQwRCxJQUFZLEdBQU8sVUFBVSxDQUFDNTBCLENBQUcsRUFBR2dKLEVBQU93ckIsQ0FBSSxFQUFLSSxJQUFZLEtBQU81MEIsRUFBTUEsRUFBTSxLQUNuRjgwQixFQUFhMTBCLENBQUUsQ0FDM0IsQ0FDQSxDQUFTLEVBQ00sR0FJWCxPQUFJLFlBQVkvRSxDQUFLLEVBQ1osSUFHVDYxQixFQUFTLE9BQU8sVUFBVTFKLEVBQU14bkIsRUFBS3cwQixDQUFJLEVBQUdNLEVBQWF6NUIsQ0FBSyxDQUFDLEVBRXhELEdBQ1IsQ0FFRCxNQUFNMDRCLEVBQVEsQ0FBQSxFQUVSZ0IsRUFBaUIsT0FBTyxPQUFPLFdBQVksQ0FDL0MsZUFBQUosRUFDQSxhQUFBRyxFQUNBLFdBQ0osQ0FBRyxFQUVELFNBQVNFLEVBQU0zNUIsRUFBT21zQixFQUFNLENBQzFCLEdBQUkyTSxXQUFRLFlBQVk5NEIsQ0FBSyxFQUU3QixJQUFJMDRCLEVBQU0sUUFBUTE0QixDQUFLLElBQU0sR0FDM0IsTUFBTSxNQUFNLGtDQUFvQ21zQixFQUFLLEtBQUssR0FBRyxDQUFDLEVBR2hFdU0sRUFBTSxLQUFLMTRCLENBQUssRUFFaEI4NEIsVUFBUSxRQUFROTRCLEVBQU8sU0FBYytFLEVBQUlKLEVBQUssRUFDN0IsRUFBRW0wQixVQUFRLFlBQVkvekIsQ0FBRSxHQUFLQSxJQUFPLE9BQVNzMEIsRUFBUSxLQUNsRXhELEVBQVU5d0IsRUFBSSt6QixVQUFRLFNBQVNuMEIsQ0FBRyxFQUFJQSxFQUFJLEtBQU0sRUFBR0EsRUFBS3duQixFQUFNdU4sQ0FDdEUsS0FFcUIsSUFDYkMsRUFBTTUwQixFQUFJb25CLEVBQU9BLEVBQUssT0FBT3huQixDQUFHLEVBQUksQ0FBQ0EsQ0FBRyxDQUFDLENBRWpELENBQUssRUFFRCt6QixFQUFNLElBQUcsRUFDVixDQUVELEdBQUksQ0FBQ0ksVUFBUSxTQUFTLzdCLENBQUcsRUFDdkIsTUFBTSxJQUFJLFVBQVUsd0JBQXdCLEVBRzlDLE9BQUE0OEIsRUFBTTU4QixDQUFHLEVBRUY4NEIsQ0FDVCxDQVVBLFNBQVMsU0FBU00sRUFBSyxDQUNyQixNQUFNeUQsRUFBVSxDQUNkLElBQUssTUFDTCxJQUFLLE1BQ0wsSUFBSyxNQUNMLElBQUssTUFDTCxJQUFLLE1BQ0wsTUFBTyxJQUNQLE1BQU8sSUFDWCxFQUNFLE9BQU8sbUJBQW1CekQsQ0FBRyxFQUFFLFFBQVEsbUJBQW9CLFNBQWtCbHlCLEVBQU8sQ0FDbEYsT0FBTzIxQixFQUFRMzFCLENBQUssQ0FDeEIsQ0FBRyxDQUNILENBVUEsU0FBUyxxQkFBcUI0akIsRUFBUXJwQixFQUFTLENBQzdDLEtBQUssT0FBUyxHQUVkcXBCLEdBQVUsV0FBV0EsRUFBUSxLQUFNcnBCLENBQU8sQ0FDNUMsQ0FFQSxNQUFNLFVBQVkscUJBQXFCLFVBRXZDLFVBQVUsT0FBUyxTQUFTcTdCLEVBQU9wN0IsRUFBTXVCLEVBQU8sQ0FDOUMsS0FBSyxPQUFPLEtBQUssQ0FBQ3ZCLEVBQU11QixDQUFLLENBQUMsQ0FDaEMsRUFFQSxVQUFVLFNBQVcsU0FBU3ZELEVBQVNxOUIsRUFBUyxDQUM5QyxNQUFNQyxFQUFVRCxFQUFVLFNBQVM5NUIsRUFBTyxDQUN4QyxPQUFPODVCLEVBQVEsS0FBSyxLQUFNOTVCLEVBQU8sUUFBUSxDQUMxQyxFQUFHLFNBRUosT0FBTyxLQUFLLE9BQU8sSUFBSSxTQUFjMjNCLEVBQU0sQ0FDekMsT0FBT29DLEVBQVFwQyxFQUFLLENBQUMsQ0FBQyxFQUFJLElBQU1vQyxFQUFRcEMsRUFBSyxDQUFDLENBQUMsQ0FDaEQsRUFBRSxFQUFFLEVBQUUsS0FBSyxHQUFHLENBQ2pCLEVBVUEsU0FBU3FDLFNBQU94OEIsRUFBSyxDQUNuQixPQUFPLG1CQUFtQkEsQ0FBRyxFQUMzQixRQUFRLFFBQVMsR0FBRyxFQUNwQixRQUFRLE9BQVEsR0FBRyxFQUNuQixRQUFRLFFBQVMsR0FBRyxFQUNwQixRQUFRLE9BQVEsR0FBRyxFQUNuQixRQUFRLFFBQVMsR0FBRyxFQUNwQixRQUFRLFFBQVMsR0FBRyxDQUN4QixDQVdBLFNBQVMsU0FBUzZuQixFQUFLd0MsRUFBUXJwQixFQUFTLENBRXRDLEdBQUksQ0FBQ3FwQixFQUNILE9BQU94QyxFQUdULE1BQU0wVSxFQUFVdjdCLEdBQVdBLEVBQVEsUUFBVXc3QixTQUV2Q0MsRUFBY3o3QixHQUFXQSxFQUFRLFVBRXZDLElBQUkwN0IsRUFVSixHQVJJRCxFQUNGQyxFQUFtQkQsRUFBWXBTLEVBQVFycEIsQ0FBTyxFQUU5QzA3QixFQUFtQnBCLFVBQVEsa0JBQWtCalIsQ0FBTSxFQUNqREEsRUFBTyxTQUFVLEVBQ2pCLElBQUkscUJBQXFCQSxFQUFRcnBCLENBQU8sRUFBRSxTQUFTdTdCLENBQU8sRUFHMURHLEVBQWtCLENBQ3BCLE1BQU1DLEVBQWdCOVUsRUFBSSxRQUFRLEdBQUcsRUFFakM4VSxJQUFrQixLQUNwQjlVLEVBQU1BLEVBQUksTUFBTSxFQUFHOFUsQ0FBYSxHQUVsQzlVLElBQVFBLEVBQUksUUFBUSxHQUFHLElBQU0sR0FBSyxJQUFNLEtBQU82VSxDQUNoRCxDQUVELE9BQU83VSxDQUNULENBRUEsTUFBTSxrQkFBbUIsQ0FDdkIsYUFBYyxDQUNaLEtBQUssU0FBVyxFQUNqQixDQVVELElBQUkrSixFQUFXRSxFQUFVOXdCLEVBQVMsQ0FDaEMsWUFBSyxTQUFTLEtBQUssQ0FDakIsVUFBQTR3QixFQUNBLFNBQUFFLEVBQ0EsWUFBYTl3QixFQUFVQSxFQUFRLFlBQWMsR0FDN0MsUUFBU0EsRUFBVUEsRUFBUSxRQUFVLElBQzNDLENBQUssRUFDTSxLQUFLLFNBQVMsT0FBUyxDQUMvQixDQVNELE1BQU1nSCxFQUFJLENBQ0osS0FBSyxTQUFTQSxDQUFFLElBQ2xCLEtBQUssU0FBU0EsQ0FBRSxFQUFJLEtBRXZCLENBT0QsT0FBUSxDQUNGLEtBQUssV0FDUCxLQUFLLFNBQVcsR0FFbkIsQ0FZRCxRQUFRWCxFQUFJLENBQ1ZpMEIsVUFBUSxRQUFRLEtBQUssU0FBVSxTQUF3QnNCLEVBQUcsQ0FDcERBLElBQU0sTUFDUnYxQixFQUFHdTFCLENBQUMsQ0FFWixDQUFLLENBQ0YsQ0FDSCxDQUVBLElBQUkscUJBQXVCLG1CQUV2QixxQkFBdUIsQ0FDekIsa0JBQW1CLEdBQ25CLGtCQUFtQixHQUNuQixvQkFBcUIsRUFDdkIsRUFFSSxrQkFBb0IsT0FBTyxnQkFBb0IsSUFBYyxnQkFBa0IscUJBRS9FLFdBQWEsT0FBTyxTQUFhLElBQWMsU0FBVyxLQUUxRCxPQUFTLE9BQU8sS0FBUyxJQUFjLEtBQU8sS0FFOUMsV0FBYSxDQUNmLFVBQVcsR0FDWCxRQUFTLENBQ1AsZ0JBQWlCLGtCQUNqQixTQUFVLFdBQ1YsS0FBTSxNQUNQLEVBQ0QsVUFBVyxDQUFDLE9BQVEsUUFBUyxPQUFRLE9BQVEsTUFBTyxNQUFNLENBQzVELEVBRUEsTUFBTSxjQUFnQixPQUFPLE9BQVcsS0FBZSxPQUFPLFNBQWEsSUFtQnJFLHVCQUNIQyxHQUNRLGVBQWlCLENBQUMsY0FBZSxlQUFnQixJQUFJLEVBQUUsUUFBUUEsQ0FBTyxFQUFJLEdBQ2hGLE9BQU8sVUFBYyxLQUFlLFVBQVUsT0FBTyxFQVdwRCxnQ0FBa0MsSUFFcEMsT0FBTyxrQkFBc0IsS0FFN0IsZ0JBQWdCLG1CQUNoQixPQUFPLEtBQUssZUFBa0IsY0FJNUIsT0FBUyxlQUFpQixPQUFPLFNBQVMsTUFBUSxtQkFFeEQsSUFBSUMsUUFBcUIsT0FBTyxPQUFPLENBQ3JDLFVBQVcsS0FDWCxjQUNBLCtCQUNBLHNCQUNBLE1BQ0YsQ0FBQyxFQUVHLFNBQVcsQ0FDYixHQUFHQSxRQUNILEdBQUcsVUFDTCxFQUVBLFNBQVMsaUJBQWlCL29CLEVBQU0vUyxFQUFTLENBQ3ZDLE9BQU8sV0FBVytTLEVBQU0sSUFBSSxTQUFTLFFBQVEsZ0JBQW1CLE9BQU8sT0FBTyxDQUM1RSxRQUFTLFNBQVN2UixFQUFPMkUsRUFBS3duQixFQUFNb08sRUFBUyxDQUMzQyxPQUFJLFNBQVMsUUFBVXpCLFVBQVEsU0FBUzk0QixDQUFLLEdBQzNDLEtBQUssT0FBTzJFLEVBQUszRSxFQUFNLFNBQVMsUUFBUSxDQUFDLEVBQ2xDLElBR0Z1NkIsRUFBUSxlQUFlLE1BQU0sS0FBTSxTQUFTLENBQ3BELENBQ0wsRUFBSy83QixDQUFPLENBQUMsQ0FDYixDQVNBLFNBQVMsY0FBY0MsRUFBTSxDQUszQixPQUFPcTZCLFVBQVEsU0FBUyxnQkFBaUJyNkIsQ0FBSSxFQUFFLElBQUl3RixHQUMxQ0EsRUFBTSxDQUFDLElBQU0sS0FBTyxHQUFLQSxFQUFNLENBQUMsR0FBS0EsRUFBTSxDQUFDLENBQ3BELENBQ0gsQ0FTQSxTQUFTdTJCLGdCQUFjditCLEVBQUssQ0FDMUIsTUFBTWMsRUFBTSxDQUFBLEVBQ04wSCxFQUFPLE9BQU8sS0FBS3hJLENBQUcsRUFDNUIsSUFBSXNCLEVBQ0osTUFBTWUsRUFBTW1HLEVBQUssT0FDakIsSUFBSUUsRUFDSixJQUFLcEgsRUFBSSxFQUFHQSxFQUFJZSxFQUFLZixJQUNuQm9ILEVBQU1GLEVBQUtsSCxDQUFDLEVBQ1pSLEVBQUk0SCxDQUFHLEVBQUkxSSxFQUFJMEksQ0FBRyxFQUVwQixPQUFPNUgsQ0FDVCxDQVNBLFNBQVMsZUFBZTg0QixFQUFVLENBQ2hDLFNBQVM0RSxFQUFVdE8sRUFBTW5zQixFQUFPbEIsRUFBUTZPLEVBQU8sQ0FDN0MsSUFBSWxQLEVBQU8wdEIsRUFBS3hlLEdBQU8sRUFFdkIsR0FBSWxQLElBQVMsWUFBYSxNQUFPLEdBRWpDLE1BQU1pOEIsRUFBZSxPQUFPLFNBQVMsQ0FBQ2o4QixDQUFJLEVBQ3BDazhCLEVBQVNodEIsR0FBU3dlLEVBQUssT0FHN0IsT0FGQTF0QixFQUFPLENBQUNBLEdBQVFxNkIsVUFBUSxRQUFRaDZCLENBQU0sRUFBSUEsRUFBTyxPQUFTTCxFQUV0RGs4QixHQUNFN0IsVUFBUSxXQUFXaDZCLEVBQVFMLENBQUksRUFDakNLLEVBQU9MLENBQUksRUFBSSxDQUFDSyxFQUFPTCxDQUFJLEVBQUd1QixDQUFLLEVBRW5DbEIsRUFBT0wsQ0FBSSxFQUFJdUIsRUFHVixDQUFDMDZCLEtBR04sQ0FBQzU3QixFQUFPTCxDQUFJLEdBQUssQ0FBQ3E2QixVQUFRLFNBQVNoNkIsRUFBT0wsQ0FBSSxDQUFDLEtBQ2pESyxFQUFPTCxDQUFJLEVBQUksSUFHRmc4QixFQUFVdE8sRUFBTW5zQixFQUFPbEIsRUFBT0wsQ0FBSSxFQUFHa1AsQ0FBSyxHQUUzQ21yQixVQUFRLFFBQVFoNkIsRUFBT0wsQ0FBSSxDQUFDLElBQ3hDSyxFQUFPTCxDQUFJLEVBQUkrN0IsZ0JBQWMxN0IsRUFBT0wsQ0FBSSxDQUFDLEdBR3BDLENBQUNpOEIsRUFDVCxDQUVELEdBQUk1QixVQUFRLFdBQVdqRCxDQUFRLEdBQUtpRCxVQUFRLFdBQVdqRCxFQUFTLE9BQU8sRUFBRyxDQUN4RSxNQUFNOTRCLEVBQU0sQ0FBQSxFQUVaKzdCLGlCQUFRLGFBQWFqRCxFQUFVLENBQUNwM0IsRUFBTXVCLElBQVUsQ0FDOUN5NkIsRUFBVSxjQUFjaDhCLENBQUksRUFBR3VCLEVBQU9qRCxFQUFLLENBQUMsQ0FDbEQsQ0FBSyxFQUVNQSxDQUNSLENBRUQsT0FBTyxJQUNULENBWUEsU0FBUyxnQkFBZ0I2OUIsRUFBVUMsRUFBUWYsRUFBUyxDQUNsRCxHQUFJaEIsVUFBUSxTQUFTOEIsQ0FBUSxFQUMzQixHQUFJLENBQ0YsT0FBQ0MsR0FBVSxLQUFLLE9BQU9ELENBQVEsRUFDeEI5QixVQUFRLEtBQUs4QixDQUFRLENBQzdCLE9BQVFuckIsRUFBRyxDQUNWLEdBQUlBLEVBQUUsT0FBUyxjQUNiLE1BQU1BLENBRVQsQ0FHSCxPQUFRcXFCLEdBQVcsS0FBSyxXQUFXYyxDQUFRLENBQzdDLENBRUEsTUFBTUUsV0FBVyxDQUVmLGFBQWMscUJBRWQsUUFBUyxDQUFDLE1BQU8sT0FBUSxPQUFPLEVBRWhDLGlCQUFrQixDQUFDLFNBQVNDLEVBQWlCeHBCLEVBQU1rVixFQUFTLENBQzFELE1BQU11VSxFQUFjdlUsRUFBUSxlQUFjLEdBQU0sR0FDMUN3VSxFQUFxQkQsRUFBWSxRQUFRLGtCQUFrQixFQUFJLEdBQy9ERSxFQUFrQnBDLFVBQVEsU0FBU3ZuQixDQUFJLEVBUTdDLEdBTkkycEIsR0FBbUJwQyxVQUFRLFdBQVd2bkIsQ0FBSSxJQUM1Q0EsRUFBTyxJQUFJLFNBQVNBLENBQUksR0FHUHVuQixVQUFRLFdBQVd2bkIsQ0FBSSxFQUd4QyxPQUFPMHBCLEVBQXFCLEtBQUssVUFBVSxlQUFlMXBCLENBQUksQ0FBQyxFQUFJQSxFQUdyRSxHQUFJdW5CLFVBQVEsY0FBY3ZuQixDQUFJLEdBQzVCdW5CLFVBQVEsU0FBU3ZuQixDQUFJLEdBQ3JCdW5CLFVBQVEsU0FBU3ZuQixDQUFJLEdBQ3JCdW5CLFVBQVEsT0FBT3ZuQixDQUFJLEdBQ25CdW5CLFVBQVEsT0FBT3ZuQixDQUFJLEdBQ25CdW5CLFVBQVEsaUJBQWlCdm5CLENBQUksRUFFN0IsT0FBT0EsRUFFVCxHQUFJdW5CLFVBQVEsa0JBQWtCdm5CLENBQUksRUFDaEMsT0FBT0EsRUFBSyxPQUVkLEdBQUl1bkIsVUFBUSxrQkFBa0J2bkIsQ0FBSSxFQUNoQyxPQUFBa1YsRUFBUSxlQUFlLGtEQUFtRCxFQUFLLEVBQ3hFbFYsRUFBSyxXQUdkLElBQUk0cEIsRUFFSixHQUFJRCxFQUFpQixDQUNuQixHQUFJRixFQUFZLFFBQVEsbUNBQW1DLEVBQUksR0FDN0QsT0FBTyxpQkFBaUJ6cEIsRUFBTSxLQUFLLGNBQWMsRUFBRSxTQUFRLEVBRzdELElBQUs0cEIsRUFBYXJDLFVBQVEsV0FBV3ZuQixDQUFJLElBQU15cEIsRUFBWSxRQUFRLHFCQUFxQixFQUFJLEdBQUksQ0FDOUYsTUFBTUksRUFBWSxLQUFLLEtBQU8sS0FBSyxJQUFJLFNBRXZDLE9BQU8sV0FDTEQsRUFBYSxDQUFDLFVBQVc1cEIsQ0FBSSxFQUFJQSxFQUNqQzZwQixHQUFhLElBQUlBLEVBQ2pCLEtBQUssY0FDZixDQUNPLENBQ0YsQ0FFRCxPQUFJRixHQUFtQkQsR0FDckJ4VSxFQUFRLGVBQWUsbUJBQW9CLEVBQUssRUFDekMsZ0JBQWdCbFYsQ0FBSSxHQUd0QkEsQ0FDWCxDQUFHLEVBRUQsa0JBQW1CLENBQUMsU0FBUzhwQixFQUFrQjlwQixFQUFNLENBQ25ELE1BQU0rcEIsRUFBZSxLQUFLLGNBQWdCUixXQUFTLGFBQzdDUyxFQUFvQkQsR0FBZ0JBLEVBQWEsa0JBQ2pERSxFQUFnQixLQUFLLGVBQWlCLE9BRTVDLEdBQUkxQyxVQUFRLFdBQVd2bkIsQ0FBSSxHQUFLdW5CLFVBQVEsaUJBQWlCdm5CLENBQUksRUFDM0QsT0FBT0EsRUFHVCxHQUFJQSxHQUFRdW5CLFVBQVEsU0FBU3ZuQixDQUFJLElBQU9ncUIsR0FBcUIsQ0FBQyxLQUFLLGNBQWlCQyxHQUFnQixDQUVsRyxNQUFNQyxFQUFvQixFQURBSCxHQUFnQkEsRUFBYSxvQkFDUEUsRUFFaEQsR0FBSSxDQUNGLE9BQU8sS0FBSyxNQUFNanFCLENBQUksQ0FDdkIsT0FBUTlCLEVBQUcsQ0FDVixHQUFJZ3NCLEVBQ0YsTUFBSWhzQixFQUFFLE9BQVMsY0FDUCxXQUFXLEtBQUtBLEVBQUcsV0FBVyxpQkFBa0IsS0FBTSxLQUFNLEtBQUssUUFBUSxFQUUzRUEsQ0FFVCxDQUNGLENBRUQsT0FBTzhCLENBQ1gsQ0FBRyxFQU1ELFFBQVMsRUFFVCxlQUFnQixhQUNoQixlQUFnQixlQUVoQixpQkFBa0IsR0FDbEIsY0FBZSxHQUVmLElBQUssQ0FDSCxTQUFVLFNBQVMsUUFBUSxTQUMzQixLQUFNLFNBQVMsUUFBUSxJQUN4QixFQUVELGVBQWdCLFNBQVNtcUIsRUFBZW5WLEVBQVEsQ0FDOUMsT0FBT0EsR0FBVSxLQUFPQSxFQUFTLEdBQ2xDLEVBRUQsUUFBUyxDQUNQLE9BQVEsQ0FDTixPQUFVLG9DQUNWLGVBQWdCLE1BQ2pCLENBQ0YsQ0FDSCxFQUVBdVMsVUFBUSxRQUFRLENBQUMsU0FBVSxNQUFPLE9BQVEsT0FBUSxNQUFPLE9BQU8sRUFBSTFxQixHQUFXLENBQzdFMHNCLFdBQVMsUUFBUTFzQixDQUFNLEVBQUksRUFDN0IsQ0FBQyxFQUVELElBQUl1dEIsYUFBYWIsV0FJakIsTUFBTSxrQkFBb0JoQyxVQUFRLFlBQVksQ0FDNUMsTUFBTyxnQkFBaUIsaUJBQWtCLGVBQWdCLE9BQzFELFVBQVcsT0FBUSxPQUFRLG9CQUFxQixzQkFDaEQsZ0JBQWlCLFdBQVksZUFBZ0Isc0JBQzdDLFVBQVcsY0FBZSxZQUM1QixDQUFDLEVBZ0JELElBQUksYUFBZThDLEdBQWMsQ0FDL0IsTUFBTWhVLEVBQVMsQ0FBQSxFQUNmLElBQUlqakIsRUFDQW5ILEVBQ0EsRUFFSixPQUFBbytCLEdBQWNBLEVBQVcsTUFBTTtBQUFBLENBQUksRUFBRSxRQUFRLFNBQWdCQyxFQUFNLENBQ2pFLEVBQUlBLEVBQUssUUFBUSxHQUFHLEVBQ3BCbDNCLEVBQU1rM0IsRUFBSyxVQUFVLEVBQUcsQ0FBQyxFQUFFLEtBQUksRUFBRyxjQUNsQ3IrQixFQUFNcStCLEVBQUssVUFBVSxFQUFJLENBQUMsRUFBRSxPQUV4QixHQUFDbDNCLEdBQVFpakIsRUFBT2pqQixDQUFHLEdBQUssa0JBQWtCQSxDQUFHLEtBSTdDQSxJQUFRLGFBQ05pakIsRUFBT2pqQixDQUFHLEVBQ1ppakIsRUFBT2pqQixDQUFHLEVBQUUsS0FBS25ILENBQUcsRUFFcEJvcUIsRUFBT2pqQixDQUFHLEVBQUksQ0FBQ25ILENBQUcsRUFHcEJvcUIsRUFBT2pqQixDQUFHLEVBQUlpakIsRUFBT2pqQixDQUFHLEVBQUlpakIsRUFBT2pqQixDQUFHLEVBQUksS0FBT25ILEVBQU1BLEVBRTdELENBQUcsRUFFTW9xQixDQUNULEVBRUEsTUFBTSxXQUFhLE9BQU8sV0FBVyxFQUVyQyxTQUFTLGdCQUFnQmtVLEVBQVEsQ0FDL0IsT0FBT0EsR0FBVSxPQUFPQSxDQUFNLEVBQUUsS0FBSSxFQUFHLGFBQ3pDLENBRUEsU0FBUyxlQUFlOTdCLEVBQU8sQ0FDN0IsT0FBSUEsSUFBVSxJQUFTQSxHQUFTLEtBQ3ZCQSxFQUdGODRCLFVBQVEsUUFBUTk0QixDQUFLLEVBQUlBLEVBQU0sSUFBSSxjQUFjLEVBQUksT0FBT0EsQ0FBSyxDQUMxRSxDQUVBLFNBQVMsWUFBWW0yQixFQUFLLENBQ3hCLE1BQU01dEIsRUFBUyxPQUFPLE9BQU8sSUFBSSxFQUMzQnd6QixFQUFXLG1DQUNqQixJQUFJOTNCLEVBRUosS0FBUUEsRUFBUTgzQixFQUFTLEtBQUs1RixDQUFHLEdBQy9CNXRCLEVBQU90RSxFQUFNLENBQUMsQ0FBQyxFQUFJQSxFQUFNLENBQUMsRUFHNUIsT0FBT3NFLENBQ1QsQ0FFQSxNQUFNLGtCQUFxQjR0QixHQUFRLGlDQUFpQyxLQUFLQSxFQUFJLEtBQUksQ0FBRSxFQUVuRixTQUFTLGlCQUFpQnA0QixFQUFTaUMsRUFBTzg3QixFQUFRdHlCLEVBQVF3eUIsRUFBb0IsQ0FDNUUsR0FBSWxELFVBQVEsV0FBV3R2QixDQUFNLEVBQzNCLE9BQU9BLEVBQU8sS0FBSyxLQUFNeEosRUFBTzg3QixDQUFNLEVBT3hDLEdBSklFLElBQ0ZoOEIsRUFBUTg3QixHQUdOLEVBQUNoRCxVQUFRLFNBQVM5NEIsQ0FBSyxFQUUzQixJQUFJODRCLFVBQVEsU0FBU3R2QixDQUFNLEVBQ3pCLE9BQU94SixFQUFNLFFBQVF3SixDQUFNLElBQU0sR0FHbkMsR0FBSXN2QixVQUFRLFNBQVN0dkIsQ0FBTSxFQUN6QixPQUFPQSxFQUFPLEtBQUt4SixDQUFLLEVBRTVCLENBRUEsU0FBUyxhQUFhODdCLEVBQVEsQ0FDNUIsT0FBT0EsRUFBTyxLQUFNLEVBQ2pCLFlBQVcsRUFBRyxRQUFRLGtCQUFtQixDQUFDamdDLEVBQUdvZ0MsRUFBTTlGLElBQzNDOEYsRUFBSyxZQUFhLEVBQUc5RixDQUM3QixDQUNMLENBRUEsU0FBUyxlQUFlcDVCLEVBQUsrK0IsRUFBUSxDQUNuQyxNQUFNSSxFQUFlcEQsVUFBUSxZQUFZLElBQU1nRCxDQUFNLEVBRXJELENBQUMsTUFBTyxNQUFPLEtBQUssRUFBRSxRQUFRSyxHQUFjLENBQzFDLE9BQU8sZUFBZXAvQixFQUFLby9CLEVBQWFELEVBQWMsQ0FDcEQsTUFBTyxTQUFTRSxFQUFNQyxFQUFNQyxFQUFNLENBQ2hDLE9BQU8sS0FBS0gsQ0FBVSxFQUFFLEtBQUssS0FBTUwsRUFBUU0sRUFBTUMsRUFBTUMsQ0FBSSxDQUM1RCxFQUNELGFBQWMsRUFDcEIsQ0FBSyxDQUNMLENBQUcsQ0FDSCxDQUVBLE1BQU0sWUFBYSxDQUNqQixZQUFZN1YsRUFBUyxDQUNuQkEsR0FBVyxLQUFLLElBQUlBLENBQU8sQ0FDNUIsQ0FFRCxJQUFJcVYsRUFBUVMsRUFBZ0JDLEVBQVMsQ0FDbkMsTUFBTXR3QixFQUFPLEtBRWIsU0FBU3V3QixFQUFVQyxFQUFRQyxFQUFTQyxFQUFVLENBQzVDLE1BQU1DLEVBQVUsZ0JBQWdCRixDQUFPLEVBRXZDLEdBQUksQ0FBQ0UsRUFDSCxNQUFNLElBQUksTUFBTSx3Q0FBd0MsRUFHMUQsTUFBTWw0QixFQUFNbTBCLFVBQVEsUUFBUTVzQixFQUFNMndCLENBQU8sR0FFdEMsQ0FBQ2w0QixHQUFPdUgsRUFBS3ZILENBQUcsSUFBTSxRQUFhaTRCLElBQWEsSUFBU0EsSUFBYSxRQUFhMXdCLEVBQUt2SCxDQUFHLElBQU0sTUFDbEd1SCxFQUFLdkgsR0FBT2c0QixDQUFPLEVBQUksZUFBZUQsQ0FBTSxFQUUvQyxDQUVELE1BQU1JLEVBQWEsQ0FBQ3JXLEVBQVNtVyxJQUMzQjlELFVBQVEsUUFBUXJTLEVBQVMsQ0FBQ2lXLEVBQVFDLElBQVlGLEVBQVVDLEVBQVFDLEVBQVNDLENBQVEsQ0FBQyxFQUVwRixHQUFJOUQsVUFBUSxjQUFjZ0QsQ0FBTSxHQUFLQSxhQUFrQixLQUFLLFlBQzFEZ0IsRUFBV2hCLEVBQVFTLENBQWMsVUFDekJ6RCxVQUFRLFNBQVNnRCxDQUFNLElBQU1BLEVBQVNBLEVBQU8sU0FBVyxDQUFDLGtCQUFrQkEsQ0FBTSxFQUN6RmdCLEVBQVcsYUFBYWhCLENBQU0sRUFBR1MsQ0FBYyxVQUN0Q3pELFVBQVEsVUFBVWdELENBQU0sRUFDakMsU0FBVyxDQUFDbjNCLEVBQUszRSxDQUFLLElBQUs4N0IsRUFBTyxRQUFPLEVBQ3ZDVyxFQUFVejhCLEVBQU8yRSxFQUFLNjNCLENBQU8sT0FHL0JWLEdBQVUsTUFBUVcsRUFBVUYsRUFBZ0JULEVBQVFVLENBQU8sRUFHN0QsT0FBTyxJQUNSLENBRUQsSUFBSVYsRUFBUWpCLEVBQVEsQ0FHbEIsR0FGQWlCLEVBQVMsZ0JBQWdCQSxDQUFNLEVBRTNCQSxFQUFRLENBQ1YsTUFBTW4zQixFQUFNbTBCLFVBQVEsUUFBUSxLQUFNZ0QsQ0FBTSxFQUV4QyxHQUFJbjNCLEVBQUssQ0FDUCxNQUFNM0UsRUFBUSxLQUFLMkUsQ0FBRyxFQUV0QixHQUFJLENBQUNrMkIsRUFDSCxPQUFPNzZCLEVBR1QsR0FBSTY2QixJQUFXLEdBQ2IsT0FBTyxZQUFZNzZCLENBQUssRUFHMUIsR0FBSTg0QixVQUFRLFdBQVcrQixDQUFNLEVBQzNCLE9BQU9BLEVBQU8sS0FBSyxLQUFNNzZCLEVBQU8yRSxDQUFHLEVBR3JDLEdBQUltMEIsVUFBUSxTQUFTK0IsQ0FBTSxFQUN6QixPQUFPQSxFQUFPLEtBQUs3NkIsQ0FBSyxFQUcxQixNQUFNLElBQUksVUFBVSx3Q0FBd0MsQ0FDN0QsQ0FDRixDQUNGLENBRUQsSUFBSTg3QixFQUFRbDBCLEVBQVMsQ0FHbkIsR0FGQWswQixFQUFTLGdCQUFnQkEsQ0FBTSxFQUUzQkEsRUFBUSxDQUNWLE1BQU1uM0IsRUFBTW0wQixVQUFRLFFBQVEsS0FBTWdELENBQU0sRUFFeEMsTUFBTyxDQUFDLEVBQUVuM0IsR0FBTyxLQUFLQSxDQUFHLElBQU0sU0FBYyxDQUFDaUQsR0FBVyxpQkFBaUIsS0FBTSxLQUFLakQsQ0FBRyxFQUFHQSxFQUFLaUQsQ0FBTyxHQUN4RyxDQUVELE1BQU8sRUFDUixDQUVELE9BQU9rMEIsRUFBUWwwQixFQUFTLENBQ3RCLE1BQU1zRSxFQUFPLEtBQ2IsSUFBSTZ3QixFQUFVLEdBRWQsU0FBU0MsRUFBYUwsRUFBUyxDQUc3QixHQUZBQSxFQUFVLGdCQUFnQkEsQ0FBTyxFQUU3QkEsRUFBUyxDQUNYLE1BQU1oNEIsRUFBTW0wQixVQUFRLFFBQVE1c0IsRUFBTXl3QixDQUFPLEVBRXJDaDRCLElBQVEsQ0FBQ2lELEdBQVcsaUJBQWlCc0UsRUFBTUEsRUFBS3ZILENBQUcsRUFBR0EsRUFBS2lELENBQU8sS0FDcEUsT0FBT3NFLEVBQUt2SCxDQUFHLEVBRWZvNEIsRUFBVSxHQUViLENBQ0YsQ0FFRCxPQUFJakUsVUFBUSxRQUFRZ0QsQ0FBTSxFQUN4QkEsRUFBTyxRQUFRa0IsQ0FBWSxFQUUzQkEsRUFBYWxCLENBQU0sRUFHZGlCLENBQ1IsQ0FFRCxNQUFNbjFCLEVBQVMsQ0FDYixNQUFNbkQsRUFBTyxPQUFPLEtBQUssSUFBSSxFQUM3QixJQUFJbEgsRUFBSWtILEVBQUssT0FDVHM0QixFQUFVLEdBRWQsS0FBT3gvQixLQUFLLENBQ1YsTUFBTW9ILEVBQU1GLEVBQUtsSCxDQUFDLEdBQ2YsQ0FBQ3FLLEdBQVcsaUJBQWlCLEtBQU0sS0FBS2pELENBQUcsRUFBR0EsRUFBS2lELEVBQVMsRUFBSSxLQUNqRSxPQUFPLEtBQUtqRCxDQUFHLEVBQ2ZvNEIsRUFBVSxHQUViLENBRUQsT0FBT0EsQ0FDUixDQUVELFVBQVVuVCxFQUFRLENBQ2hCLE1BQU0xZCxFQUFPLEtBQ1B1YSxFQUFVLENBQUEsRUFFaEJxUyxpQkFBUSxRQUFRLEtBQU0sQ0FBQzk0QixFQUFPODdCLElBQVcsQ0FDdkMsTUFBTW4zQixFQUFNbTBCLFVBQVEsUUFBUXJTLEVBQVNxVixDQUFNLEVBRTNDLEdBQUluM0IsRUFBSyxDQUNQdUgsRUFBS3ZILENBQUcsRUFBSSxlQUFlM0UsQ0FBSyxFQUNoQyxPQUFPa00sRUFBSzR2QixDQUFNLEVBQ2xCLE1BQ0QsQ0FFRCxNQUFNbUIsRUFBYXJULEVBQVMsYUFBYWtTLENBQU0sRUFBSSxPQUFPQSxDQUFNLEVBQUUsT0FFOURtQixJQUFlbkIsR0FDakIsT0FBTzV2QixFQUFLNHZCLENBQU0sRUFHcEI1dkIsRUFBSyt3QixDQUFVLEVBQUksZUFBZWo5QixDQUFLLEVBRXZDeW1CLEVBQVF3VyxDQUFVLEVBQUksRUFDNUIsQ0FBSyxFQUVNLElBQ1IsQ0FFRCxVQUFVendCLEVBQVMsQ0FDakIsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFNLEdBQUdBLENBQU8sQ0FDaEQsQ0FFRCxPQUFPMHdCLEVBQVcsQ0FDaEIsTUFBTW5nQyxFQUFNLE9BQU8sT0FBTyxJQUFJLEVBRTlCKzdCLGlCQUFRLFFBQVEsS0FBTSxDQUFDOTRCLEVBQU84N0IsSUFBVyxDQUN2Qzk3QixHQUFTLE1BQVFBLElBQVUsS0FBVWpELEVBQUkrK0IsQ0FBTSxFQUFJb0IsR0FBYXBFLFVBQVEsUUFBUTk0QixDQUFLLEVBQUlBLEVBQU0sS0FBSyxJQUFJLEVBQUlBLEVBQ2xILENBQUssRUFFTWpELENBQ1IsQ0FFRCxDQUFDLE9BQU8sUUFBUSxHQUFJLENBQ2xCLE9BQU8sT0FBTyxRQUFRLEtBQUssT0FBUSxDQUFBLEVBQUUsT0FBTyxRQUFRLEdBQ3JELENBRUQsVUFBVyxDQUNULE9BQU8sT0FBTyxRQUFRLEtBQUssT0FBUSxDQUFBLEVBQUUsSUFBSSxDQUFDLENBQUMrK0IsRUFBUTk3QixDQUFLLElBQU04N0IsRUFBUyxLQUFPOTdCLENBQUssRUFBRSxLQUFLO0FBQUEsQ0FBSSxDQUMvRixDQUVELElBQUssT0FBTyxXQUFXLEdBQUksQ0FDekIsTUFBTyxjQUNSLENBRUQsT0FBTyxLQUFLazJCLEVBQU8sQ0FDakIsT0FBT0EsYUFBaUIsS0FBT0EsRUFBUSxJQUFJLEtBQUtBLENBQUssQ0FDdEQsQ0FFRCxPQUFPLE9BQU96MkIsS0FBVStNLEVBQVMsQ0FDL0IsTUFBTStOLEVBQVcsSUFBSSxLQUFLOWEsQ0FBSyxFQUUvQixPQUFBK00sRUFBUSxRQUFTMU4sR0FBV3liLEVBQVMsSUFBSXpiLENBQU0sQ0FBQyxFQUV6Q3liLENBQ1IsQ0FFRCxPQUFPLFNBQVN1aEIsRUFBUSxDQUt0QixNQUFNcUIsR0FKWSxLQUFLLFVBQVUsRUFBSyxLQUFLLFVBQVUsRUFBSSxDQUN2RCxVQUFXLENBQUUsQ0FDbkIsR0FFZ0MsVUFDdEIxRyxFQUFZLEtBQUssVUFFdkIsU0FBUzJHLEVBQWVULEVBQVMsQ0FDL0IsTUFBTUUsRUFBVSxnQkFBZ0JGLENBQU8sRUFFbENRLEVBQVVOLENBQU8sSUFDcEIsZUFBZXBHLEVBQVdrRyxDQUFPLEVBQ2pDUSxFQUFVTixDQUFPLEVBQUksR0FFeEIsQ0FFRC9ELGlCQUFRLFFBQVFnRCxDQUFNLEVBQUlBLEVBQU8sUUFBUXNCLENBQWMsRUFBSUEsRUFBZXRCLENBQU0sRUFFekUsSUFDUixDQUNILENBRUEsYUFBYSxTQUFTLENBQUMsZUFBZ0IsaUJBQWtCLFNBQVUsa0JBQW1CLGFBQWMsZUFBZSxDQUFDLEVBR3BIaEQsVUFBUSxrQkFBa0IsYUFBYSxVQUFXLENBQUMsQ0FBQyxNQUFBOTRCLENBQUssRUFBRzJFLElBQVEsQ0FDbEUsSUFBSStFLEVBQVMvRSxFQUFJLENBQUMsRUFBRSxZQUFXLEVBQUtBLEVBQUksTUFBTSxDQUFDLEVBQy9DLE1BQU8sQ0FDTCxJQUFLLElBQU0zRSxFQUNYLElBQUlxOUIsRUFBYSxDQUNmLEtBQUszekIsQ0FBTSxFQUFJMnpCLENBQ2hCLENBQ0YsQ0FDSCxDQUFDLEVBRUR2RSxVQUFRLGNBQWMsWUFBWSxFQUVsQyxJQUFJLGVBQWlCLGFBVXJCLFNBQVMsY0FBY3BxQixFQUFLbVcsRUFBVSxDQUNwQyxNQUFNa1UsRUFBUyxNQUFRNEMsYUFDakI1OUIsRUFBVThtQixHQUFZa1UsRUFDdEJ0UyxFQUFVLGVBQWUsS0FBSzFvQixFQUFRLE9BQU8sRUFDbkQsSUFBSXdULEVBQU94VCxFQUFRLEtBRW5CKzZCLGlCQUFRLFFBQVFwcUIsRUFBSyxTQUFtQjdKLEVBQUksQ0FDMUMwTSxFQUFPMU0sRUFBRyxLQUFLazBCLEVBQVF4bkIsRUFBTWtWLEVBQVEsVUFBUyxFQUFJNUIsRUFBV0EsRUFBUyxPQUFTLE1BQVMsQ0FDNUYsQ0FBRyxFQUVENEIsRUFBUSxVQUFTLEVBRVZsVixDQUNULENBRUEsU0FBUyxTQUFTdlIsRUFBTyxDQUN2QixNQUFPLENBQUMsRUFBRUEsR0FBU0EsRUFBTSxXQUMzQixDQVdBLFNBQVMsY0FBY3F1QixFQUFTMEssRUFBUXpILEVBQVMsQ0FFL0MsV0FBVyxLQUFLLEtBQU1qRCxHQUFrQixXQUFzQixXQUFXLGFBQWMwSyxFQUFRekgsQ0FBTyxFQUN0RyxLQUFLLEtBQU8sZUFDZCxDQUVBd0gsVUFBUSxTQUFTLGNBQWUsV0FBWSxDQUMxQyxXQUFZLEVBQ2QsQ0FBQyxFQVdELFNBQVMsT0FBTzdxQixFQUFTQyxFQUFRMlcsRUFBVSxDQUN6QyxNQUFNNlcsRUFBaUI3VyxFQUFTLE9BQU8sZUFDbkMsQ0FBQ0EsRUFBUyxRQUFVLENBQUM2VyxHQUFrQkEsRUFBZTdXLEVBQVMsTUFBTSxFQUN2RTVXLEVBQVE0VyxDQUFRLEVBRWhCM1csRUFBTyxJQUFJLFdBQ1QsbUNBQXFDMlcsRUFBUyxPQUM5QyxDQUFDLFdBQVcsZ0JBQWlCLFdBQVcsZ0JBQWdCLEVBQUUsS0FBSyxNQUFNQSxFQUFTLE9BQVMsR0FBRyxFQUFJLENBQUMsRUFDL0ZBLEVBQVMsT0FDVEEsRUFBUyxRQUNUQSxDQUNOLENBQUssQ0FFTCxDQUVBLFNBQVMsY0FBY1EsRUFBSyxDQUMxQixNQUFNcGhCLEVBQVEsNEJBQTRCLEtBQUtvaEIsQ0FBRyxFQUNsRCxPQUFPcGhCLEdBQVNBLEVBQU0sQ0FBQyxHQUFLLEVBQzlCLENBUUEsU0FBUyxZQUFZcTVCLEVBQWNDLEVBQUssQ0FDdENELEVBQWVBLEdBQWdCLEdBQy9CLE1BQU1FLEVBQVEsSUFBSSxNQUFNRixDQUFZLEVBQzlCRyxFQUFhLElBQUksTUFBTUgsQ0FBWSxFQUN6QyxJQUFJSSxFQUFPLEVBQ1BDLEVBQU8sRUFDUEMsRUFFSixPQUFBTCxFQUFNQSxJQUFRLE9BQVlBLEVBQU0sSUFFekIsU0FBY25MLEVBQWEsQ0FDaEMsTUFBTXJILEVBQU0sS0FBSyxNQUVYOFMsRUFBWUosRUFBV0UsQ0FBSSxFQUU1QkMsSUFDSEEsRUFBZ0I3UyxHQUdsQnlTLEVBQU1FLENBQUksRUFBSXRMLEVBQ2RxTCxFQUFXQyxDQUFJLEVBQUkzUyxFQUVuQixJQUFJeHRCLEVBQUlvZ0MsRUFDSkcsRUFBYSxFQUVqQixLQUFPdmdDLElBQU1tZ0MsR0FDWEksR0FBY04sRUFBTWpnQyxHQUFHLEVBQ3ZCQSxFQUFJQSxFQUFJKy9CLEVBU1YsR0FOQUksR0FBUUEsRUFBTyxHQUFLSixFQUVoQkksSUFBU0MsSUFDWEEsR0FBUUEsRUFBTyxHQUFLTCxHQUdsQnZTLEVBQU02UyxFQUFnQkwsRUFDeEIsT0FHRixNQUFNUSxFQUFTRixHQUFhOVMsRUFBTThTLEVBRWxDLE9BQU9FLEVBQVMsS0FBSyxNQUFNRCxFQUFhLElBQU9DLENBQU0sRUFBSSxNQUM3RCxDQUNBLENBUUEsU0FBUyxTQUFTbDVCLEVBQUltNUIsRUFBTSxDQUMxQixJQUFJQyxFQUFZLEVBQ2hCLE1BQU1DLEVBQVksSUFBT0YsRUFDekIsSUFBSWplLEVBQVEsS0FDWixPQUFPLFVBQXFCLENBQzFCLE1BQU15TyxFQUFRLE9BQVMsR0FFakJ6RCxFQUFNLEtBQUssTUFDakIsR0FBSXlELEdBQVN6RCxFQUFNa1QsRUFBWUMsRUFDN0IsT0FBSW5lLElBQ0YsYUFBYUEsQ0FBSyxFQUNsQkEsRUFBUSxNQUVWa2UsRUFBWWxULEVBQ0xsbUIsRUFBRyxNQUFNLEtBQU0sU0FBUyxFQUU1QmtiLElBQ0hBLEVBQVEsV0FBVyxLQUNqQkEsRUFBUSxLQUNSa2UsRUFBWSxLQUFLLE1BQ1ZwNUIsRUFBRyxNQUFNLEtBQU0sU0FBUyxHQUM5QnE1QixHQUFhblQsRUFBTWtULEVBQVUsRUFFdEMsQ0FDQSxDQUVBLElBQUkscUJBQXVCLENBQUNFLEVBQVVDLEVBQWtCSixFQUFPLElBQU0sQ0FDbkUsSUFBSUssRUFBZ0IsRUFDcEIsTUFBTUMsRUFBZSxZQUFZLEdBQUksR0FBRyxFQUV4QyxPQUFPLFNBQVM3dUIsR0FBSyxDQUNuQixNQUFNOHVCLEVBQVM5dUIsRUFBRSxPQUNYK3VCLEVBQVEvdUIsRUFBRSxpQkFBbUJBLEVBQUUsTUFBUSxPQUN2Q2d2QixFQUFnQkYsRUFBU0YsRUFDekJLLEVBQU9KLEVBQWFHLENBQWEsRUFDakNFLEVBQVVKLEdBQVVDLEVBRTFCSCxFQUFnQkUsRUFFaEIsTUFBTWh0QixFQUFPLENBQ1gsT0FBQWd0QixFQUNBLE1BQUFDLEVBQ0EsU0FBVUEsRUFBU0QsRUFBU0MsRUFBUyxPQUNyQyxNQUFPQyxFQUNQLEtBQU1DLEdBQWMsT0FDcEIsVUFBV0EsR0FBUUYsR0FBU0csR0FBV0gsRUFBUUQsR0FBVUcsRUFBTyxPQUNoRSxNQUFPanZCLEVBQ1AsaUJBQWtCK3VCLEdBQVMsSUFDakMsRUFFSWp0QixFQUFLNnNCLEVBQW1CLFdBQWEsUUFBUSxFQUFJLEdBRWpERCxFQUFTNXNCLENBQUksQ0FDZCxFQUFFeXNCLENBQUksQ0FDVCxFQUVJLGdCQUFrQixTQUFTLHNCQUk1QixTQUFTWSxHQUFxQixDQUM3QixNQUFNQyxFQUFPLGtCQUFrQixLQUFLLFVBQVUsU0FBUyxFQUNqREMsRUFBaUIsU0FBUyxjQUFjLEdBQUcsRUFDakQsSUFBSUMsRUFRSixTQUFTQyxFQUFXM1osRUFBSyxDQUN2QixJQUFJNFosRUFBTzVaLEVBRVgsT0FBSXdaLElBRUZDLEVBQWUsYUFBYSxPQUFRRyxDQUFJLEVBQ3hDQSxFQUFPSCxFQUFlLE1BR3hCQSxFQUFlLGFBQWEsT0FBUUcsQ0FBSSxFQUdqQyxDQUNMLEtBQU1ILEVBQWUsS0FDckIsU0FBVUEsRUFBZSxTQUFXQSxFQUFlLFNBQVMsUUFBUSxLQUFNLEVBQUUsRUFBSSxHQUNoRixLQUFNQSxFQUFlLEtBQ3JCLE9BQVFBLEVBQWUsT0FBU0EsRUFBZSxPQUFPLFFBQVEsTUFBTyxFQUFFLEVBQUksR0FDM0UsS0FBTUEsRUFBZSxLQUFPQSxFQUFlLEtBQUssUUFBUSxLQUFNLEVBQUUsRUFBSSxHQUNwRSxTQUFVQSxFQUFlLFNBQ3pCLEtBQU1BLEVBQWUsS0FDckIsU0FBV0EsRUFBZSxTQUFTLE9BQU8sQ0FBQyxJQUFNLElBQy9DQSxFQUFlLFNBQ2YsSUFBTUEsRUFBZSxRQUMvQixDQUNLLENBRUQsT0FBQUMsRUFBWUMsRUFBVyxPQUFPLFNBQVMsSUFBSSxFQVFwQyxTQUF5QkUsRUFBWSxDQUMxQyxNQUFNdFgsRUFBVWtSLFVBQVEsU0FBU29HLENBQVUsRUFBS0YsRUFBV0UsQ0FBVSxFQUFJQSxFQUN6RSxPQUFRdFgsRUFBTyxXQUFhbVgsRUFBVSxVQUNsQ25YLEVBQU8sT0FBU21YLEVBQVUsSUFDcEMsQ0FDQSxFQUFNLEVBR0gsU0FBU0ksR0FBd0IsQ0FDaEMsT0FBTyxVQUEyQixDQUNoQyxNQUFPLEVBQ2IsQ0FDQSxJQUVJLFFBQVUsU0FBUyxzQkFHckIsQ0FDRSxNQUFNMWdDLEVBQU11QixFQUFPby9CLEVBQVNqVCxFQUFNa1QsRUFBUUMsRUFBUSxDQUNoRCxNQUFNQyxFQUFTLENBQUM5Z0MsRUFBTyxJQUFNLG1CQUFtQnVCLENBQUssQ0FBQyxFQUV0RDg0QixVQUFRLFNBQVNzRyxDQUFPLEdBQUtHLEVBQU8sS0FBSyxXQUFhLElBQUksS0FBS0gsQ0FBTyxFQUFFLFlBQWEsQ0FBQSxFQUVyRnRHLFVBQVEsU0FBUzNNLENBQUksR0FBS29ULEVBQU8sS0FBSyxRQUFVcFQsQ0FBSSxFQUVwRDJNLFVBQVEsU0FBU3VHLENBQU0sR0FBS0UsRUFBTyxLQUFLLFVBQVlGLENBQU0sRUFFMURDLElBQVcsSUFBUUMsRUFBTyxLQUFLLFFBQVEsRUFFdkMsU0FBUyxPQUFTQSxFQUFPLEtBQUssSUFBSSxDQUNuQyxFQUVELEtBQUs5Z0MsRUFBTSxDQUNULE1BQU13RixFQUFRLFNBQVMsT0FBTyxNQUFNLElBQUksT0FBTyxhQUFleEYsRUFBTyxXQUFXLENBQUMsRUFDakYsT0FBUXdGLEVBQVEsbUJBQW1CQSxFQUFNLENBQUMsQ0FBQyxFQUFJLElBQ2hELEVBRUQsT0FBT3hGLEVBQU0sQ0FDWCxLQUFLLE1BQU1BLEVBQU0sR0FBSSxLQUFLLElBQUcsRUFBSyxLQUFRLENBQzNDLENBQ0YsRUFLRCxDQUNFLE9BQVEsQ0FBRSxFQUNWLE1BQU8sQ0FDTCxPQUFPLElBQ1IsRUFDRCxRQUFTLENBQUUsQ0FDZixFQVNBLFNBQVMsY0FBYzRtQixFQUFLLENBSTFCLE1BQU8sOEJBQThCLEtBQUtBLENBQUcsQ0FDL0MsQ0FVQSxTQUFTLFlBQVltYSxFQUFTQyxFQUFhLENBQ3pDLE9BQU9BLEVBQ0hELEVBQVEsUUFBUSxTQUFVLEVBQUUsRUFBSSxJQUFNQyxFQUFZLFFBQVEsT0FBUSxFQUFFLEVBQ3BFRCxDQUNOLENBWUEsU0FBUyxjQUFjQSxFQUFTRSxFQUFjLENBQzVDLE9BQUlGLEdBQVcsQ0FBQyxjQUFjRSxDQUFZLEVBQ2pDLFlBQVlGLEVBQVNFLENBQVksRUFFbkNBLENBQ1QsQ0FFQSxNQUFNLGdCQUFtQnhKLEdBQVVBLGFBQWlCLGVBQWlCLENBQUUsR0FBR0EsQ0FBTyxFQUFHQSxFQVdwRixTQUFTLFlBQVl5SixFQUFTQyxFQUFTLENBRXJDQSxFQUFVQSxHQUFXLEdBQ3JCLE1BQU03RyxFQUFTLENBQUEsRUFFZixTQUFTOEcsRUFBZS9nQyxFQUFRODVCLEVBQVE5QixFQUFVLENBQ2hELE9BQUlnQyxVQUFRLGNBQWNoNkIsQ0FBTSxHQUFLZzZCLFVBQVEsY0FBY0YsQ0FBTSxFQUN4REUsVUFBUSxNQUFNLEtBQUssQ0FBQyxTQUFBaEMsQ0FBUSxFQUFHaDRCLEVBQVE4NUIsQ0FBTSxFQUMzQ0UsVUFBUSxjQUFjRixDQUFNLEVBQzlCRSxVQUFRLE1BQU0sQ0FBRSxFQUFFRixDQUFNLEVBQ3RCRSxVQUFRLFFBQVFGLENBQU0sRUFDeEJBLEVBQU8sUUFFVEEsQ0FDUixDQUdELFNBQVNrSCxFQUFvQnIvQixFQUFHQyxFQUFHbzJCLEVBQVUsQ0FDM0MsR0FBS2dDLFVBQVEsWUFBWXA0QixDQUFDLEdBRW5CLEdBQUksQ0FBQ280QixVQUFRLFlBQVlyNEIsQ0FBQyxFQUMvQixPQUFPby9CLEVBQWUsT0FBV3AvQixFQUFHcTJCLENBQVEsTUFGNUMsUUFBTytJLEVBQWVwL0IsRUFBR0MsRUFBR28yQixDQUFRLENBSXZDLENBR0QsU0FBU2lKLEVBQWlCdC9CLEVBQUdDLEVBQUcsQ0FDOUIsR0FBSSxDQUFDbzRCLFVBQVEsWUFBWXA0QixDQUFDLEVBQ3hCLE9BQU9tL0IsRUFBZSxPQUFXbi9CLENBQUMsQ0FFckMsQ0FHRCxTQUFTcy9CLEVBQWlCdi9CLEVBQUdDLEVBQUcsQ0FDOUIsR0FBS280QixVQUFRLFlBQVlwNEIsQ0FBQyxHQUVuQixHQUFJLENBQUNvNEIsVUFBUSxZQUFZcjRCLENBQUMsRUFDL0IsT0FBT28vQixFQUFlLE9BQVdwL0IsQ0FBQyxNQUZsQyxRQUFPby9CLEVBQWUsT0FBV24vQixDQUFDLENBSXJDLENBR0QsU0FBU3UvQixFQUFnQngvQixFQUFHQyxFQUFHOFEsRUFBTSxDQUNuQyxHQUFJQSxLQUFRb3VCLEVBQ1YsT0FBT0MsRUFBZXAvQixFQUFHQyxDQUFDLEVBQ3JCLEdBQUk4USxLQUFRbXVCLEVBQ2pCLE9BQU9FLEVBQWUsT0FBV3AvQixDQUFDLENBRXJDLENBRUQsTUFBTXkvQixFQUFXLENBQ2YsSUFBS0gsRUFDTCxPQUFRQSxFQUNSLEtBQU1BLEVBQ04sUUFBU0MsRUFDVCxpQkFBa0JBLEVBQ2xCLGtCQUFtQkEsRUFDbkIsaUJBQWtCQSxFQUNsQixRQUFTQSxFQUNULGVBQWdCQSxFQUNoQixnQkFBaUJBLEVBQ2pCLGNBQWVBLEVBQ2YsUUFBU0EsRUFDVCxhQUFjQSxFQUNkLGVBQWdCQSxFQUNoQixlQUFnQkEsRUFDaEIsaUJBQWtCQSxFQUNsQixtQkFBb0JBLEVBQ3BCLFdBQVlBLEVBQ1osaUJBQWtCQSxFQUNsQixjQUFlQSxFQUNmLGVBQWdCQSxFQUNoQixVQUFXQSxFQUNYLFVBQVdBLEVBQ1gsV0FBWUEsRUFDWixZQUFhQSxFQUNiLFdBQVlBLEVBQ1osaUJBQWtCQSxFQUNsQixlQUFnQkMsRUFDaEIsUUFBUyxDQUFDeC9CLEVBQUdDLElBQU1vL0IsRUFBb0IsZ0JBQWdCci9CLENBQUMsRUFBRyxnQkFBZ0JDLENBQUMsRUFBRyxFQUFJLENBQ3ZGLEVBRUVvNEIsaUJBQVEsUUFBUSxPQUFPLEtBQUssT0FBTyxPQUFPLEdBQUk2RyxFQUFTQyxDQUFPLENBQUMsRUFBRyxTQUE0QnB1QixFQUFNLENBQ2xHLE1BQU1xbEIsRUFBUXFKLEVBQVMxdUIsQ0FBSSxHQUFLc3VCLEVBQzFCSyxFQUFjdEosRUFBTThJLEVBQVFudUIsQ0FBSSxFQUFHb3VCLEVBQVFwdUIsQ0FBSSxFQUFHQSxDQUFJLEVBQzNEc25CLFVBQVEsWUFBWXFILENBQVcsR0FBS3RKLElBQVVvSixJQUFxQmxILEVBQU92bkIsQ0FBSSxFQUFJMnVCLEVBQ3ZGLENBQUcsRUFFTXBILENBQ1QsQ0FFQSxJQUFJLGNBQWlCQSxHQUFXLENBQzlCLE1BQU1xSCxFQUFZLFlBQVksQ0FBRSxFQUFFckgsQ0FBTSxFQUV4QyxHQUFJLENBQUMsS0FBQXhuQixFQUFNLGNBQUE4dUIsRUFBZSxlQUFBQyxFQUFnQixlQUFBQyxFQUFnQixRQUFBOVosRUFBUyxLQUFBK1osQ0FBSSxFQUFJSixFQUUzRUEsRUFBVSxRQUFVM1osRUFBVSxlQUFlLEtBQUtBLENBQU8sRUFFekQyWixFQUFVLElBQU0sU0FBUyxjQUFjQSxFQUFVLFFBQVNBLEVBQVUsR0FBRyxFQUFHckgsRUFBTyxPQUFRQSxFQUFPLGdCQUFnQixFQUc1R3lILEdBQ0YvWixFQUFRLElBQUksZ0JBQWlCLFNBQzNCLE1BQU0rWixFQUFLLFVBQVksSUFBTSxLQUFPQSxFQUFLLFNBQVcsU0FBUyxtQkFBbUJBLEVBQUssUUFBUSxDQUFDLEVBQUksR0FBRyxDQUMzRyxFQUdFLElBQUl4RixFQUVKLEdBQUlsQyxVQUFRLFdBQVd2bkIsQ0FBSSxHQUN6QixHQUFJLFNBQVMsdUJBQXlCLFNBQVMsK0JBQzdDa1YsRUFBUSxlQUFlLE1BQVMsV0FDdEJ1VSxFQUFjdlUsRUFBUSxlQUFjLEtBQVEsR0FBTyxDQUU3RCxLQUFNLENBQUN2bUIsRUFBTSxHQUFHcUksQ0FBTSxFQUFJeXlCLEVBQWNBLEVBQVksTUFBTSxHQUFHLEVBQUUsSUFBSXp2QixHQUFTQSxFQUFNLEtBQUksQ0FBRSxFQUFFLE9BQU8sT0FBTyxFQUFJLEdBQzVHa2IsRUFBUSxlQUFlLENBQUN2bUIsR0FBUSxzQkFBdUIsR0FBR3FJLENBQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxDQUM3RSxFQU9ILEdBQUksU0FBUyx3QkFDWDgzQixHQUFpQnZILFVBQVEsV0FBV3VILENBQWEsSUFBTUEsRUFBZ0JBLEVBQWNELENBQVMsR0FFMUZDLEdBQWtCQSxJQUFrQixJQUFTLGdCQUFnQkQsRUFBVSxHQUFHLEdBQUksQ0FFaEYsTUFBTUssRUFBWUgsR0FBa0JDLEdBQWtCLFFBQVEsS0FBS0EsQ0FBYyxFQUU3RUUsR0FDRmhhLEVBQVEsSUFBSTZaLEVBQWdCRyxDQUFTLENBRXhDLENBR0gsT0FBT0wsQ0FDVCxFQUVBLE1BQU0sc0JBQXdCLE9BQU8sZUFBbUIsSUFFeEQsSUFBSSxXQUFhLHVCQUF5QixTQUFVckgsRUFBUSxDQUMxRCxPQUFPLElBQUksUUFBUSxTQUE0QjlxQixFQUFTQyxFQUFRLENBQzlELE1BQU13eUIsRUFBVSxjQUFjM0gsQ0FBTSxFQUNwQyxJQUFJNEgsRUFBY0QsRUFBUSxLQUMxQixNQUFNeGEsRUFBaUIsZUFBZSxLQUFLd2EsRUFBUSxPQUFPLEVBQUUsWUFDNUQsR0FBSSxDQUFDLGFBQUFFLENBQVksRUFBSUYsRUFDakJHLEVBQ0osU0FBU2ovQixHQUFPLENBQ1Y4K0IsRUFBUSxhQUNWQSxFQUFRLFlBQVksWUFBWUcsQ0FBVSxFQUd4Q0gsRUFBUSxRQUNWQSxFQUFRLE9BQU8sb0JBQW9CLFFBQVNHLENBQVUsQ0FFekQsQ0FFRCxJQUFJdlAsRUFBVSxJQUFJLGVBRWxCQSxFQUFRLEtBQUtvUCxFQUFRLE9BQU8sWUFBVyxFQUFJQSxFQUFRLElBQUssRUFBSSxFQUc1RHBQLEVBQVEsUUFBVW9QLEVBQVEsUUFFMUIsU0FBU0ksR0FBWSxDQUNuQixHQUFJLENBQUN4UCxFQUNILE9BR0YsTUFBTTdMLEVBQWtCLGVBQWUsS0FDckMsMEJBQTJCNkwsR0FBV0EsRUFBUSxzQkFBdUIsQ0FDN0UsRUFHWXpNLEVBQVcsQ0FDZixLQUhtQixDQUFDK2IsR0FBZ0JBLElBQWlCLFFBQVVBLElBQWlCLE9BQ2hGdFAsRUFBUSxhQUFlQSxFQUFRLFNBRy9CLE9BQVFBLEVBQVEsT0FDaEIsV0FBWUEsRUFBUSxXQUNwQixRQUFTN0wsRUFDVCxPQUFBc1QsRUFDQSxRQUFBekgsQ0FDUixFQUVNLE9BQU8sU0FBa0J0eEIsRUFBTyxDQUM5QmlPLEVBQVFqTyxDQUFLLEVBQ2I0QixHQUNSLEVBQVMsU0FBaUJtL0IsRUFBSyxDQUN2Qjd5QixFQUFPNnlCLENBQUcsRUFDVm4vQixHQUNELEVBQUVpakIsQ0FBUSxFQUdYeU0sRUFBVSxJQUNYLENBRUcsY0FBZUEsRUFFakJBLEVBQVEsVUFBWXdQLEVBR3BCeFAsRUFBUSxtQkFBcUIsVUFBc0IsQ0FDN0MsQ0FBQ0EsR0FBV0EsRUFBUSxhQUFlLEdBUW5DQSxFQUFRLFNBQVcsR0FBSyxFQUFFQSxFQUFRLGFBQWVBLEVBQVEsWUFBWSxRQUFRLE9BQU8sSUFBTSxJQUs5RixXQUFXd1AsQ0FBUyxDQUM1QixFQUlJeFAsRUFBUSxRQUFVLFVBQXVCLENBQ2xDQSxJQUlMcGpCLEVBQU8sSUFBSSxXQUFXLGtCQUFtQixXQUFXLGFBQWN3eUIsRUFBU3BQLENBQU8sQ0FBQyxFQUduRkEsRUFBVSxLQUNoQixFQUdJQSxFQUFRLFFBQVUsVUFBdUIsQ0FHdkNwakIsRUFBTyxJQUFJLFdBQVcsZ0JBQWlCLFdBQVcsWUFBYXd5QixFQUFTcFAsQ0FBTyxDQUFDLEVBR2hGQSxFQUFVLElBQ2hCLEVBR0lBLEVBQVEsVUFBWSxVQUF5QixDQUMzQyxJQUFJMFAsRUFBc0JOLEVBQVEsUUFBVSxjQUFnQkEsRUFBUSxRQUFVLGNBQWdCLG1CQUM5RixNQUFNcEYsRUFBZW9GLEVBQVEsY0FBZ0IscUJBQ3pDQSxFQUFRLHNCQUNWTSxFQUFzQk4sRUFBUSxxQkFFaEN4eUIsRUFBTyxJQUFJLFdBQ1Q4eUIsRUFDQTFGLEVBQWEsb0JBQXNCLFdBQVcsVUFBWSxXQUFXLGFBQ3JFb0YsRUFDQXBQLENBQU8sQ0FBQyxFQUdWQSxFQUFVLElBQ2hCLEVBR0lxUCxJQUFnQixRQUFhemEsRUFBZSxlQUFlLElBQUksRUFHM0QscUJBQXNCb0wsR0FDeEJ3SCxVQUFRLFFBQVE1UyxFQUFlLE9BQVEsRUFBRSxTQUEwQjFvQixFQUFLbUgsRUFBSyxDQUMzRTJzQixFQUFRLGlCQUFpQjNzQixFQUFLbkgsQ0FBRyxDQUN6QyxDQUFPLEVBSUVzN0IsVUFBUSxZQUFZNEgsRUFBUSxlQUFlLElBQzlDcFAsRUFBUSxnQkFBa0IsQ0FBQyxDQUFDb1AsRUFBUSxpQkFJbENFLEdBQWdCQSxJQUFpQixTQUNuQ3RQLEVBQVEsYUFBZW9QLEVBQVEsY0FJN0IsT0FBT0EsRUFBUSxvQkFBdUIsWUFDeENwUCxFQUFRLGlCQUFpQixXQUFZLHFCQUFxQm9QLEVBQVEsbUJBQW9CLEVBQUksQ0FBQyxFQUl6RixPQUFPQSxFQUFRLGtCQUFxQixZQUFjcFAsRUFBUSxRQUM1REEsRUFBUSxPQUFPLGlCQUFpQixXQUFZLHFCQUFxQm9QLEVBQVEsZ0JBQWdCLENBQUMsR0FHeEZBLEVBQVEsYUFBZUEsRUFBUSxVQUdqQ0csRUFBYUksR0FBVSxDQUNoQjNQLElBR0xwakIsRUFBTyxDQUFDK3lCLEdBQVVBLEVBQU8sS0FBTyxJQUFJLGNBQWMsS0FBTWxJLEVBQVF6SCxDQUFPLEVBQUkyUCxDQUFNLEVBQ2pGM1AsRUFBUSxNQUFLLEVBQ2JBLEVBQVUsS0FDbEIsRUFFTW9QLEVBQVEsYUFBZUEsRUFBUSxZQUFZLFVBQVVHLENBQVUsRUFDM0RILEVBQVEsU0FDVkEsRUFBUSxPQUFPLFFBQVVHLEVBQVksRUFBR0gsRUFBUSxPQUFPLGlCQUFpQixRQUFTRyxDQUFVLElBSS9GLE1BQU10USxFQUFXLGNBQWNtUSxFQUFRLEdBQUcsRUFFMUMsR0FBSW5RLEdBQVksU0FBUyxVQUFVLFFBQVFBLENBQVEsSUFBTSxHQUFJLENBQzNEcmlCLEVBQU8sSUFBSSxXQUFXLHdCQUEwQnFpQixFQUFXLElBQUssV0FBVyxnQkFBaUJ3SSxDQUFNLENBQUMsRUFDbkcsTUFDRCxDQUlEekgsRUFBUSxLQUFLcVAsR0FBZSxJQUFJLENBQ3BDLENBQUcsQ0FDSCxFQUVBLE1BQU0sZUFBaUIsQ0FBQ08sRUFBU2poQixJQUFZLENBQzNDLElBQUlraEIsRUFBYSxJQUFJLGdCQUVqQkMsRUFFSixNQUFNQyxFQUFVLFNBQVVKLEVBQVEsQ0FDaEMsR0FBSSxDQUFDRyxFQUFTLENBQ1pBLEVBQVUsR0FDVkUsSUFDQSxNQUFNUCxFQUFNRSxhQUFrQixNQUFRQSxFQUFTLEtBQUssT0FDcERFLEVBQVcsTUFBTUosYUFBZSxXQUFhQSxFQUFNLElBQUksY0FBY0EsYUFBZSxNQUFRQSxFQUFJLFFBQVVBLENBQUcsQ0FBQyxDQUMvRyxDQUNMLEVBRUUsSUFBSWhoQixFQUFRRSxHQUFXLFdBQVcsSUFBTSxDQUN0Q29oQixFQUFRLElBQUksV0FBVyxXQUFXcGhCLENBQU8sa0JBQW1CLFdBQVcsU0FBUyxDQUFDLENBQ2xGLEVBQUVBLENBQU8sRUFFVixNQUFNcWhCLEVBQWMsSUFBTSxDQUNwQkosSUFDRm5oQixHQUFTLGFBQWFBLENBQUssRUFDM0JBLEVBQVEsS0FDUm1oQixFQUFRLFFBQVFLLEdBQVUsQ0FDeEJBLElBQ0NBLEVBQU8sb0JBQXNCQSxFQUFPLG9CQUFvQixRQUFTRixDQUFPLEVBQUlFLEVBQU8sWUFBWUYsQ0FBTyxFQUMvRyxDQUFPLEVBQ0RILEVBQVUsS0FFaEIsRUFFRUEsRUFBUSxRQUFTSyxHQUFXQSxHQUFVQSxFQUFPLGtCQUFvQkEsRUFBTyxpQkFBaUIsUUFBU0YsQ0FBTyxDQUFDLEVBRTFHLEtBQU0sQ0FBQyxPQUFBRSxDQUFNLEVBQUlKLEVBRWpCLE9BQUFJLEVBQU8sWUFBY0QsRUFFZCxDQUFDQyxFQUFRLElBQU0sQ0FDcEJ4aEIsR0FBUyxhQUFhQSxDQUFLLEVBQzNCQSxFQUFRLElBQ1osQ0FBRyxDQUNILEVBRUEsSUFBSSxpQkFBbUIsZUFFdkIsTUFBTSxZQUFjLFVBQVdzVixFQUFPbU0sRUFBVyxDQUMvQyxJQUFJbGpDLEVBQU0rMkIsRUFBTSxXQUVoQixHQUFJLENBQUNtTSxHQUFhbGpDLEVBQU1rakMsRUFBVyxDQUNqQyxNQUFNbk0sRUFDTixNQUNELENBRUQsSUFBSW9NLEVBQU0sRUFDTnprQixFQUVKLEtBQU95a0IsRUFBTW5qQyxHQUNYMGUsRUFBTXlrQixFQUFNRCxFQUNaLE1BQU1uTSxFQUFNLE1BQU1vTSxFQUFLemtCLENBQUcsRUFDMUJ5a0IsRUFBTXprQixDQUVWLEVBRU0sVUFBWSxnQkFBaUIwa0IsRUFBVUYsRUFBV3hILEVBQVEsQ0FDOUQsZ0JBQWlCM0UsS0FBU3FNLEVBQ3hCLE1BQU8sWUFBWSxZQUFZLE9BQU9yTSxDQUFLLEVBQUlBLEVBQVMsTUFBTTJFLEVBQU8sT0FBTzNFLENBQUssQ0FBQyxFQUFJbU0sQ0FBUyxDQUVuRyxFQUVNLFlBQWMsQ0FBQ0csRUFBUUgsRUFBV3h5QixFQUFZNHlCLEVBQVU1SCxJQUFXLENBQ3ZFLE1BQU10QyxFQUFXLFVBQVVpSyxFQUFRSCxFQUFXeEgsQ0FBTSxFQUVwRCxJQUFJd0QsRUFBUSxFQUVaLE9BQU8sSUFBSSxlQUFlLENBQ3hCLEtBQU0sUUFFTixNQUFNLEtBQUsyRCxFQUFZLENBQ3JCLEtBQU0sQ0FBQyxLQUFBdi9CLEVBQU0sTUFBQTVCLENBQUssRUFBSSxNQUFNMDNCLEVBQVMsS0FBSSxFQUV6QyxHQUFJOTFCLEVBQU0sQ0FDUnUvQixFQUFXLE1BQUssRUFDaEJTLElBQ0EsTUFDRCxDQUVELElBQUl0akMsRUFBTTBCLEVBQU0sV0FDaEJnUCxHQUFjQSxFQUFXd3VCLEdBQVNsL0IsQ0FBRyxFQUNyQzZpQyxFQUFXLFFBQVEsSUFBSSxXQUFXbmhDLENBQUssQ0FBQyxDQUN6QyxFQUNELE9BQU82aEMsRUFBUSxDQUNiLE9BQUFELEVBQVNDLENBQU0sRUFDUm5LLEVBQVMsUUFDakIsQ0FDTCxFQUFLLENBQ0QsY0FBZSxDQUNuQixDQUFHLENBQ0gsRUFFTSx1QkFBeUIsQ0FBQzhHLEVBQU8zNUIsSUFBTyxDQUM1QyxNQUFNaTlCLEVBQW1CdEQsR0FBUyxLQUNsQyxPQUFRRCxHQUFXLFdBQVcsSUFBTTE1QixFQUFHLENBQ3JDLGlCQUFBaTlCLEVBQ0EsTUFBQXRELEVBQ0EsT0FBQUQsQ0FDRCxDQUFBLENBQUMsQ0FDSixFQUVNLGlCQUFtQixPQUFPLE9BQVUsWUFBYyxPQUFPLFNBQVksWUFBYyxPQUFPLFVBQWEsV0FDdkcsMEJBQTRCLGtCQUFvQixPQUFPLGdCQUFtQixXQUcxRSxXQUFhLG1CQUFxQixPQUFPLGFBQWdCLFlBQ3pEekUsR0FBYTNELEdBQVEyRCxFQUFRLE9BQU8zRCxDQUFHLEdBQUcsSUFBSSxXQUFhLEVBQzdELE1BQU9BLEdBQVEsSUFBSSxXQUFXLE1BQU0sSUFBSSxTQUFTQSxDQUFHLEVBQUUsYUFBYSxHQUdqRSxzQkFBd0IsNEJBQThCLElBQU0sQ0FDaEUsSUFBSTRMLEVBQWlCLEdBRXJCLE1BQU1DLEVBQWlCLElBQUksUUFBUSxTQUFTLE9BQVEsQ0FDbEQsS0FBTSxJQUFJLGVBQ1YsT0FBUSxPQUNSLElBQUksUUFBUyxDQUNYLE9BQUFELEVBQWlCLEdBQ1YsTUFDUixDQUNGLENBQUEsRUFBRSxRQUFRLElBQUksY0FBYyxFQUU3QixPQUFPQSxHQUFrQixDQUFDQyxDQUM1QixLQUVNLG1CQUFxQixHQUFLLEtBRTFCLHVCQUF5QiwyQkFBNkIsQ0FBQyxFQUFFLElBQUssQ0FDbEUsR0FBSSxDQUNGLE9BQU9sSixVQUFRLGlCQUFpQixJQUFJLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FDdEQsTUFBWSxDQUVaLENBQ0gsS0FFTSxVQUFZLENBQ2hCLE9BQVEseUJBQTRCbUosR0FBUUEsRUFBSSxLQUNsRCxFQUVBLG1CQUF1QkEsR0FBUSxDQUM3QixDQUFDLE9BQVEsY0FBZSxPQUFRLFdBQVksUUFBUSxFQUFFLFFBQVEvaEMsR0FBUSxDQUNwRSxDQUFDLFVBQVVBLENBQUksSUFBTSxVQUFVQSxDQUFJLEVBQUk0NEIsVUFBUSxXQUFXbUosRUFBSS9oQyxDQUFJLENBQUMsRUFBSytoQyxHQUFRQSxFQUFJL2hDLENBQUksRUFBRyxFQUN6RixDQUFDOE0sRUFBRytyQixJQUFXLENBQ2IsTUFBTSxJQUFJLFdBQVcsa0JBQWtCNzRCLENBQUkscUJBQXNCLFdBQVcsZ0JBQWlCNjRCLENBQU0sQ0FDM0csRUFDQSxDQUFHLENBQ0gsR0FBRyxJQUFJLFFBQVEsRUFFZixNQUFNLGNBQWdCLE1BQU9yUixHQUFTLENBQ3BDLEdBQUlBLEdBQVEsS0FDVixNQUFPLEdBR1QsR0FBR29SLFVBQVEsT0FBT3BSLENBQUksRUFDcEIsT0FBT0EsRUFBSyxLQUdkLEdBQUdvUixVQUFRLG9CQUFvQnBSLENBQUksRUFDakMsT0FBUSxNQUFNLElBQUksUUFBUUEsQ0FBSSxFQUFFLFlBQWEsR0FBRSxXQUdqRCxHQUFHb1IsVUFBUSxrQkFBa0JwUixDQUFJLEVBQy9CLE9BQU9BLEVBQUssV0FPZCxHQUpHb1IsVUFBUSxrQkFBa0JwUixDQUFJLElBQy9CQSxFQUFPQSxFQUFPLElBR2JvUixVQUFRLFNBQVNwUixDQUFJLEVBQ3RCLE9BQVEsTUFBTSxXQUFXQSxDQUFJLEdBQUcsVUFFcEMsRUFFTSxrQkFBb0IsTUFBT2pCLEVBQVNpQixJQUFTLENBQ2pELE1BQU0zb0IsRUFBUys1QixVQUFRLGVBQWVyUyxFQUFRLGlCQUFrQixDQUFBLEVBRWhFLE9BQU8xbkIsR0FBaUIsY0FBYzJvQixDQUFJLENBQzVDLEVBRUEsSUFBSSxhQUFlLG1CQUFxQixNQUFPcVIsR0FBVyxDQUN4RCxHQUFJLENBQ0YsSUFBQTFULEVBQ0EsT0FBQWpYLEVBQ0EsS0FBQW1ELEVBQ0EsT0FBQWd3QixFQUNBLFlBQUFXLEVBQ0EsUUFBQWppQixFQUNBLG1CQUFBa2lCLEVBQ0EsaUJBQUFDLEVBQ0EsYUFBQXhCLEVBQ0EsUUFBQW5hLEVBQ0EsZ0JBQUE0YixFQUFrQixjQUNsQixhQUFBQyxDQUNKLEVBQU0sY0FBY3ZKLENBQU0sRUFFeEI2SCxFQUFlQSxHQUFnQkEsRUFBZSxJQUFJLFlBQWEsRUFBRyxPQUVsRSxHQUFJLENBQUMyQixFQUFnQkMsQ0FBVyxFQUFLakIsR0FBVVcsR0FBZWppQixFQUM1RCxpQkFBaUIsQ0FBQ3NoQixFQUFRVyxDQUFXLEVBQUdqaUIsQ0FBTyxFQUFJLENBQUEsRUFFakR3aUIsRUFBVW5SLEVBRWQsTUFBTXNRLEVBQVcsSUFBTSxDQUNyQixDQUFDYSxHQUFZLFdBQVcsSUFBTSxDQUM1QkYsR0FBa0JBLEVBQWUsYUFDdkMsQ0FBSyxFQUVERSxFQUFXLEVBQ2YsRUFFRSxJQUFJQyxFQUVKLEdBQUksQ0FDRixHQUNFTixHQUFvQix1QkFBeUJoMEIsSUFBVyxPQUFTQSxJQUFXLFNBQzNFczBCLEVBQXVCLE1BQU0sa0JBQWtCamMsRUFBU2xWLENBQUksS0FBTyxFQUNwRSxDQUNBLElBQUlveEIsRUFBVyxJQUFJLFFBQVF0ZCxFQUFLLENBQzlCLE9BQVEsT0FDUixLQUFNOVQsRUFDTixPQUFRLE1BQ2hCLENBQU8sRUFFR3F4QixFQUVBOUosVUFBUSxXQUFXdm5CLENBQUksSUFBTXF4QixFQUFvQkQsRUFBUyxRQUFRLElBQUksY0FBYyxJQUN0RmxjLEVBQVEsZUFBZW1jLENBQWlCLEVBR3RDRCxFQUFTLE9BQ1hweEIsRUFBTyxZQUFZb3hCLEVBQVMsS0FBTSxtQkFBb0IsdUJBQ3BERCxFQUNBLHFCQUFxQk4sQ0FBZ0IsQ0FDL0MsRUFBVyxLQUFNLFVBQVUsRUFFdEIsQ0FFSXRKLFVBQVEsU0FBU3VKLENBQWUsSUFDbkNBLEVBQWtCQSxFQUFrQixPQUFTLFFBRy9DL1EsRUFBVSxJQUFJLFFBQVFqTSxFQUFLLENBQ3pCLEdBQUdpZCxFQUNILE9BQVFDLEVBQ1IsT0FBUW4wQixFQUFPLFlBQWEsRUFDNUIsUUFBU3FZLEVBQVEsVUFBVyxFQUFDLE9BQVEsRUFDckMsS0FBTWxWLEVBQ04sT0FBUSxPQUNSLGdCQUFBOHdCLENBQ04sQ0FBSyxFQUVELElBQUl4ZCxFQUFXLE1BQU0sTUFBTXlNLENBQU8sRUFFbEMsTUFBTXVSLEVBQW1CLHlCQUEyQmpDLElBQWlCLFVBQVlBLElBQWlCLFlBRWxHLEdBQUkseUJBQTJCdUIsR0FBc0JVLEdBQW1CLENBQ3RFLE1BQU1ya0MsRUFBVSxDQUFBLEVBRWhCLENBQUMsU0FBVSxhQUFjLFNBQVMsRUFBRSxRQUFRZ1QsR0FBUSxDQUNsRGhULEVBQVFnVCxDQUFJLEVBQUlxVCxFQUFTclQsQ0FBSSxDQUNyQyxDQUFPLEVBRUQsTUFBTXN4QixFQUF3QmhLLFVBQVEsZUFBZWpVLEVBQVMsUUFBUSxJQUFJLGdCQUFnQixDQUFDLEVBRTNGQSxFQUFXLElBQUksU0FDYixZQUFZQSxFQUFTLEtBQU0sbUJBQW9Cc2QsR0FBc0IsdUJBQ25FVyxFQUNBLHFCQUFxQlgsRUFBb0IsRUFBSSxDQUN2RCxFQUFXVSxHQUFvQmpCLEVBQVUsVUFBVSxFQUMzQ3BqQyxDQUNSLENBQ0ssQ0FFRG9pQyxFQUFlQSxHQUFnQixPQUUvQixJQUFJbUMsR0FBZSxNQUFNLFVBQVVqSyxVQUFRLFFBQVEsVUFBVzhILENBQVksR0FBSyxNQUFNLEVBQUUvYixFQUFVa1UsQ0FBTSxFQUV2RyxPQUFDOEosR0FBb0JqQixJQUVyQlksR0FBZUEsRUFBVyxFQUVuQixNQUFNLElBQUksUUFBUSxDQUFDdjBCLEVBQVNDLElBQVcsQ0FDNUMsT0FBT0QsRUFBU0MsRUFBUSxDQUN0QixLQUFNNjBCLEdBQ04sUUFBUyxlQUFlLEtBQUtsZSxFQUFTLE9BQU8sRUFDN0MsT0FBUUEsRUFBUyxPQUNqQixXQUFZQSxFQUFTLFdBQ3JCLE9BQUFrVSxFQUNBLFFBQUF6SCxDQUNSLENBQU8sQ0FDUCxDQUFLLENBQ0YsT0FBUXlQLEVBQUssQ0FHWixNQUZBYSxJQUVJYixHQUFPQSxFQUFJLE9BQVMsYUFBZSxTQUFTLEtBQUtBLEVBQUksT0FBTyxFQUN4RCxPQUFPLE9BQ1gsSUFBSSxXQUFXLGdCQUFpQixXQUFXLFlBQWFoSSxFQUFRekgsQ0FBTyxFQUN2RSxDQUNFLE1BQU95UCxFQUFJLE9BQVNBLENBQ3JCLENBQ0YsRUFHRyxXQUFXLEtBQUtBLEVBQUtBLEdBQU9BLEVBQUksS0FBTWhJLEVBQVF6SCxDQUFPLENBQzVELENBQ0gsR0FFQSxNQUFNLGNBQWdCLENBQ3BCLEtBQU0sWUFDTixJQUFLLFdBQ0wsTUFBTyxZQUNULEVBRUF3SCxVQUFRLFFBQVEsY0FBZSxDQUFDajBCLEVBQUk3RSxJQUFVLENBQzVDLEdBQUk2RSxFQUFJLENBQ04sR0FBSSxDQUNGLE9BQU8sZUFBZUEsRUFBSSxPQUFRLENBQUMsTUFBQTdFLENBQUssQ0FBQyxDQUMxQyxNQUFXLENBRVgsQ0FDRCxPQUFPLGVBQWU2RSxFQUFJLGNBQWUsQ0FBQyxNQUFBN0UsQ0FBSyxDQUFDLENBQ2pELENBQ0gsQ0FBQyxFQUVELE1BQU0sYUFBZ0I2aEMsR0FBVyxLQUFLQSxDQUFNLEdBRXRDLGlCQUFvQm1CLEdBQVlsSyxVQUFRLFdBQVdrSyxDQUFPLEdBQUtBLElBQVksTUFBUUEsSUFBWSxHQUVyRyxJQUFJLFNBQVcsQ0FDYixXQUFhQyxHQUFhLENBQ3hCQSxFQUFXbkssVUFBUSxRQUFRbUssQ0FBUSxFQUFJQSxFQUFXLENBQUNBLENBQVEsRUFFM0QsS0FBTSxDQUFDLE9BQUFsa0MsQ0FBTSxFQUFJa2tDLEVBQ2pCLElBQUlDLEVBQ0FGLEVBRUosTUFBTUcsRUFBa0IsQ0FBQSxFQUV4QixRQUFTNWxDLEVBQUksRUFBR0EsRUFBSXdCLEVBQVF4QixJQUFLLENBQy9CMmxDLEVBQWdCRCxFQUFTMWxDLENBQUMsRUFDMUIsSUFBSWlJLEVBSUosR0FGQXc5QixFQUFVRSxFQUVOLENBQUMsaUJBQWlCQSxDQUFhLElBQ2pDRixFQUFVLGVBQWV4OUIsRUFBSyxPQUFPMDlCLENBQWEsR0FBRyxZQUFXLENBQUUsRUFFOURGLElBQVksUUFDZCxNQUFNLElBQUksV0FBVyxvQkFBb0J4OUIsQ0FBRSxHQUFHLEVBSWxELEdBQUl3OUIsRUFDRixNQUdGRyxFQUFnQjM5QixHQUFNLElBQU1qSSxDQUFDLEVBQUl5bEMsQ0FDbEMsQ0FFRCxHQUFJLENBQUNBLEVBQVMsQ0FFWixNQUFNSSxFQUFVLE9BQU8sUUFBUUQsQ0FBZSxFQUMzQyxJQUFJLENBQUMsQ0FBQzM5QixFQUFJK0ksQ0FBSyxJQUFNLFdBQVcvSSxDQUFFLEtBQ2hDK0ksSUFBVSxHQUFRLHNDQUF3QyxnQ0FDckUsRUFFTSxJQUFJa1UsRUFBSTFqQixFQUNMcWtDLEVBQVEsT0FBUyxFQUFJO0FBQUEsRUFBY0EsRUFBUSxJQUFJLFlBQVksRUFBRSxLQUFLO0FBQUEsQ0FBSSxFQUFJLElBQU0sYUFBYUEsRUFBUSxDQUFDLENBQUMsRUFDeEcsMEJBRUYsTUFBTSxJQUFJLFdBQ1Isd0RBQTBEM2dCLEVBQzFELGlCQUNSLENBQ0ssQ0FFRCxPQUFPdWdCLENBQ1IsRUFDRCxTQUFVLGFBQ1osRUFTQSxTQUFTLDZCQUE2QmpLLEVBQVEsQ0FLNUMsR0FKSUEsRUFBTyxhQUNUQSxFQUFPLFlBQVksbUJBR2pCQSxFQUFPLFFBQVVBLEVBQU8sT0FBTyxRQUNqQyxNQUFNLElBQUksY0FBYyxLQUFNQSxDQUFNLENBRXhDLENBU0EsU0FBUyxnQkFBZ0JBLEVBQVEsQ0FDL0Isb0NBQTZCQSxDQUFNLEVBRW5DQSxFQUFPLFFBQVUsZUFBZSxLQUFLQSxFQUFPLE9BQU8sRUFHbkRBLEVBQU8sS0FBTyxjQUFjLEtBQzFCQSxFQUNBQSxFQUFPLGdCQUNYLEVBRU0sQ0FBQyxPQUFRLE1BQU8sT0FBTyxFQUFFLFFBQVFBLEVBQU8sTUFBTSxJQUFNLElBQ3REQSxFQUFPLFFBQVEsZUFBZSxvQ0FBcUMsRUFBSyxFQUcxRCxTQUFTLFdBQVdBLEVBQU8sU0FBVzRDLGFBQVcsT0FBTyxFQUV6RDVDLENBQU0sRUFBRSxLQUFLLFNBQTZCbFUsRUFBVSxDQUNqRSxvQ0FBNkJrVSxDQUFNLEVBR25DbFUsRUFBUyxLQUFPLGNBQWMsS0FDNUJrVSxFQUNBQSxFQUFPLGtCQUNQbFUsQ0FDTixFQUVJQSxFQUFTLFFBQVUsZUFBZSxLQUFLQSxFQUFTLE9BQU8sRUFFaERBLENBQ1gsRUFBSyxTQUE0QmdkLEVBQVEsQ0FDckMsT0FBSyxTQUFTQSxDQUFNLElBQ2xCLDZCQUE2QjlJLENBQU0sRUFHL0I4SSxHQUFVQSxFQUFPLFdBQ25CQSxFQUFPLFNBQVMsS0FBTyxjQUFjLEtBQ25DOUksRUFDQUEsRUFBTyxrQkFDUDhJLEVBQU8sUUFDakIsRUFDUUEsRUFBTyxTQUFTLFFBQVUsZUFBZSxLQUFLQSxFQUFPLFNBQVMsT0FBTyxJQUlsRSxRQUFRLE9BQU9BLENBQU0sQ0FDaEMsQ0FBRyxDQUNILENBRUEsTUFBTXdCLFVBQVUsUUFFVixhQUFlLENBQUEsRUFHckIsQ0FBQyxTQUFVLFVBQVcsU0FBVSxXQUFZLFNBQVUsUUFBUSxFQUFFLFFBQVEsQ0FBQ25qQyxFQUFNM0MsSUFBTSxDQUNuRixhQUFhMkMsQ0FBSSxFQUFJLFNBQW1CZzJCLEVBQU8sQ0FDN0MsT0FBTyxPQUFPQSxJQUFVaDJCLEdBQVEsS0FBTzNDLEVBQUksRUFBSSxLQUFPLEtBQU8yQyxDQUNqRSxDQUNBLENBQUMsRUFFRCxNQUFNLG1CQUFxQixDQUFBLEVBVzNCLGFBQWEsYUFBZSxTQUFTbzdCLEVBQWFnSSxFQUFXM2xDLEVBQVMwd0IsRUFBUyxDQUM3RSxTQUFTa1YsRUFBY25rQixFQUFLNFQsRUFBTSxDQUNoQyxNQUFPLFdBQWFxUSxVQUFVLDBCQUE2QmprQixFQUFNLElBQU80VCxHQUFRM0UsRUFBVSxLQUFPQSxFQUFVLEdBQzVHLENBR0QsTUFBTyxDQUFDcnVCLEVBQU9vZixFQUFLbEIsSUFBUyxDQUMzQixHQUFJb2xCLElBQWMsR0FDaEIsTUFBTSxJQUFJLFdBQ1JDLEVBQWNua0IsRUFBSyxxQkFBdUJ6aEIsRUFBVSxPQUFTQSxFQUFVLEdBQUcsRUFDMUUsV0FBVyxjQUNuQixFQUdJLE9BQUlBLEdBQVcsQ0FBQyxtQkFBbUJ5aEIsQ0FBRyxJQUNwQyxtQkFBbUJBLENBQUcsRUFBSSxHQUUxQixRQUFRLEtBQ05ta0IsRUFDRW5rQixFQUNBLCtCQUFpQ3poQixFQUFVLHlDQUM1QyxDQUNULEdBR1cybEMsRUFBWUEsRUFBVXRqQyxFQUFPb2YsRUFBS2xCLENBQUksRUFBSSxFQUNyRCxDQUNBLEVBWUEsU0FBUyxjQUFjMWYsRUFBU2dsQyxFQUFRQyxFQUFjLENBQ3BELEdBQUksT0FBT2psQyxHQUFZLFNBQ3JCLE1BQU0sSUFBSSxXQUFXLDRCQUE2QixXQUFXLG9CQUFvQixFQUVuRixNQUFNaUcsRUFBTyxPQUFPLEtBQUtqRyxDQUFPLEVBQ2hDLElBQUksRUFBSWlHLEVBQUssT0FDYixLQUFPLEtBQU0sR0FBRyxDQUNkLE1BQU0yYSxFQUFNM2EsRUFBSyxDQUFDLEVBQ1o2K0IsRUFBWUUsRUFBT3BrQixDQUFHLEVBQzVCLEdBQUlra0IsRUFBVyxDQUNiLE1BQU10akMsRUFBUXhCLEVBQVE0Z0IsQ0FBRyxFQUNuQjVZLEVBQVN4RyxJQUFVLFFBQWFzakMsRUFBVXRqQyxFQUFPb2YsRUFBSzVnQixDQUFPLEVBQ25FLEdBQUlnSSxJQUFXLEdBQ2IsTUFBTSxJQUFJLFdBQVcsVUFBWTRZLEVBQU0sWUFBYzVZLEVBQVEsV0FBVyxvQkFBb0IsRUFFOUYsUUFDRCxDQUNELEdBQUlpOUIsSUFBaUIsR0FDbkIsTUFBTSxJQUFJLFdBQVcsa0JBQW9CcmtCLEVBQUssV0FBVyxjQUFjLENBRTFFLENBQ0gsQ0FFQSxJQUFJLFVBQVksQ0FDZCxjQUNBLFdBQVksWUFDZCxFQUVBLE1BQU0sV0FBYSxVQUFVLFdBUzdCLE1BQU0sS0FBTSxDQUNWLFlBQVlza0IsRUFBZ0IsQ0FDMUIsS0FBSyxTQUFXQSxFQUNoQixLQUFLLGFBQWUsQ0FDbEIsUUFBUyxJQUFJLHFCQUNiLFNBQVUsSUFBSSxvQkFDcEIsQ0FDRyxDQVVELE1BQU0sUUFBUUMsRUFBYTVLLEVBQVEsQ0FDakMsR0FBSSxDQUNGLE9BQU8sTUFBTSxLQUFLLFNBQVM0SyxFQUFhNUssQ0FBTSxDQUMvQyxPQUFRZ0ksRUFBSyxDQUNaLEdBQUlBLGFBQWUsTUFBTyxDQUN4QixJQUFJNkMsRUFFSixNQUFNLGtCQUFvQixNQUFNLGtCQUFrQkEsRUFBUSxDQUFFLENBQUEsRUFBS0EsRUFBUSxJQUFJLE1BRzdFLE1BQU1sTCxFQUFRa0wsRUFBTSxNQUFRQSxFQUFNLE1BQU0sUUFBUSxRQUFTLEVBQUUsRUFBSSxHQUMvRCxHQUFJLENBQ0c3QyxFQUFJLE1BR0VySSxHQUFTLENBQUMsT0FBT3FJLEVBQUksS0FBSyxFQUFFLFNBQVNySSxFQUFNLFFBQVEsWUFBYSxFQUFFLENBQUMsSUFDNUVxSSxFQUFJLE9BQVM7QUFBQSxFQUFPckksR0FIcEJxSSxFQUFJLE1BQVFySSxDQUtmLE1BQVcsQ0FFWCxDQUNGLENBRUQsTUFBTXFJLENBQ1AsQ0FDRixDQUVELFNBQVM0QyxFQUFhNUssRUFBUSxDQUd4QixPQUFPNEssR0FBZ0IsVUFDekI1SyxFQUFTQSxHQUFVLEdBQ25CQSxFQUFPLElBQU00SyxHQUViNUssRUFBUzRLLEdBQWUsR0FHMUI1SyxFQUFTLFlBQVksS0FBSyxTQUFVQSxDQUFNLEVBRTFDLEtBQU0sQ0FBQyxhQUFBdUMsRUFBYyxpQkFBQXVJLEVBQWtCLFFBQUFwZCxDQUFPLEVBQUlzUyxFQUU5Q3VDLElBQWlCLFFBQ25CLFVBQVUsY0FBY0EsRUFBYyxDQUNwQyxrQkFBbUIsV0FBVyxhQUFhLFdBQVcsT0FBTyxFQUM3RCxrQkFBbUIsV0FBVyxhQUFhLFdBQVcsT0FBTyxFQUM3RCxvQkFBcUIsV0FBVyxhQUFhLFdBQVcsT0FBTyxDQUNoRSxFQUFFLEVBQUssRUFHTnVJLEdBQW9CLE9BQ2xCL0ssVUFBUSxXQUFXK0ssQ0FBZ0IsRUFDckM5SyxFQUFPLGlCQUFtQixDQUN4QixVQUFXOEssQ0FDckIsRUFFUSxVQUFVLGNBQWNBLEVBQWtCLENBQ3hDLE9BQVEsV0FBVyxTQUNuQixVQUFXLFdBQVcsUUFDdkIsRUFBRSxFQUFJLEdBS1g5SyxFQUFPLFFBQVVBLEVBQU8sUUFBVSxLQUFLLFNBQVMsUUFBVSxPQUFPLGNBR2pFLElBQUkrSyxFQUFpQnJkLEdBQVdxUyxVQUFRLE1BQ3RDclMsRUFBUSxPQUNSQSxFQUFRc1MsRUFBTyxNQUFNLENBQzNCLEVBRUl0UyxHQUFXcVMsVUFBUSxRQUNqQixDQUFDLFNBQVUsTUFBTyxPQUFRLE9BQVEsTUFBTyxRQUFTLFFBQVEsRUFDekQxcUIsR0FBVyxDQUNWLE9BQU9xWSxFQUFRclksQ0FBTSxDQUN0QixDQUNQLEVBRUkycUIsRUFBTyxRQUFVLGVBQWUsT0FBTytLLEVBQWdCcmQsQ0FBTyxFQUc5RCxNQUFNc2QsRUFBMEIsQ0FBQSxFQUNoQyxJQUFJQyxFQUFpQyxHQUNyQyxLQUFLLGFBQWEsUUFBUSxRQUFRLFNBQW9DQyxFQUFhLENBQzdFLE9BQU9BLEVBQVksU0FBWSxZQUFjQSxFQUFZLFFBQVFsTCxDQUFNLElBQU0sS0FJakZpTCxFQUFpQ0EsR0FBa0NDLEVBQVksWUFFL0VGLEVBQXdCLFFBQVFFLEVBQVksVUFBV0EsRUFBWSxRQUFRLEVBQ2pGLENBQUssRUFFRCxNQUFNQyxFQUEyQixDQUFBLEVBQ2pDLEtBQUssYUFBYSxTQUFTLFFBQVEsU0FBa0NELEVBQWEsQ0FDaEZDLEVBQXlCLEtBQUtELEVBQVksVUFBV0EsRUFBWSxRQUFRLENBQy9FLENBQUssRUFFRCxJQUFJejFCLEVBQ0FqUixFQUFJLEVBQ0plLEVBRUosR0FBSSxDQUFDMGxDLEVBQWdDLENBQ25DLE1BQU1HLEVBQVEsQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLEVBQUcsTUFBUyxFQU9wRCxJQU5BQSxFQUFNLFFBQVEsTUFBTUEsRUFBT0osQ0FBdUIsRUFDbERJLEVBQU0sS0FBSyxNQUFNQSxFQUFPRCxDQUF3QixFQUNoRDVsQyxFQUFNNmxDLEVBQU0sT0FFWjMxQixFQUFVLFFBQVEsUUFBUXVxQixDQUFNLEVBRXpCeDdCLEVBQUllLEdBQ1RrUSxFQUFVQSxFQUFRLEtBQUsyMUIsRUFBTTVtQyxHQUFHLEVBQUc0bUMsRUFBTTVtQyxHQUFHLENBQUMsRUFHL0MsT0FBT2lSLENBQ1IsQ0FFRGxRLEVBQU15bEMsRUFBd0IsT0FFOUIsSUFBSTNELEVBQVlySCxFQUloQixJQUZBeDdCLEVBQUksRUFFR0EsRUFBSWUsR0FBSyxDQUNkLE1BQU13USxFQUFjaTFCLEVBQXdCeG1DLEdBQUcsRUFDekN3UixFQUFhZzFCLEVBQXdCeG1DLEdBQUcsRUFDOUMsR0FBSSxDQUNGNmlDLEVBQVl0eEIsRUFBWXN4QixDQUFTLENBQ2xDLE9BQVFsd0IsRUFBTyxDQUNkbkIsRUFBVyxLQUFLLEtBQU1tQixDQUFLLEVBQzNCLEtBQ0QsQ0FDRixDQUVELEdBQUksQ0FDRjFCLEVBQVUsZ0JBQWdCLEtBQUssS0FBTTR4QixDQUFTLENBQy9DLE9BQVFsd0IsRUFBTyxDQUNkLE9BQU8sUUFBUSxPQUFPQSxDQUFLLENBQzVCLENBS0QsSUFIQTNTLEVBQUksRUFDSmUsRUFBTTRsQyxFQUF5QixPQUV4QjNtQyxFQUFJZSxHQUNUa1EsRUFBVUEsRUFBUSxLQUFLMDFCLEVBQXlCM21DLEdBQUcsRUFBRzJtQyxFQUF5QjNtQyxHQUFHLENBQUMsRUFHckYsT0FBT2lSLENBQ1IsQ0FFRCxPQUFPdXFCLEVBQVEsQ0FDYkEsRUFBUyxZQUFZLEtBQUssU0FBVUEsQ0FBTSxFQUMxQyxNQUFNcUwsRUFBVyxjQUFjckwsRUFBTyxRQUFTQSxFQUFPLEdBQUcsRUFDekQsT0FBTyxTQUFTcUwsRUFBVXJMLEVBQU8sT0FBUUEsRUFBTyxnQkFBZ0IsQ0FDakUsQ0FDSCxDQUdBRCxVQUFRLFFBQVEsQ0FBQyxTQUFVLE1BQU8sT0FBUSxTQUFTLEVBQUcsU0FBU3VMLEVBQW9CajJCLEVBQVEsQ0FFekYsTUFBTSxVQUFVQSxDQUFNLEVBQUksU0FBU2lYLEVBQUswVCxFQUFRLENBQzlDLE9BQU8sS0FBSyxRQUFRLFlBQVlBLEdBQVUsQ0FBQSxFQUFJLENBQzVDLE9BQUEzcUIsRUFDQSxJQUFBaVgsRUFDQSxNQUFPMFQsR0FBVSxDQUFBLEdBQUksSUFDdEIsQ0FBQSxDQUFDLENBQ04sQ0FDQSxDQUFDLEVBRURELFVBQVEsUUFBUSxDQUFDLE9BQVEsTUFBTyxPQUFPLEVBQUcsU0FBU3dMLEVBQXNCbDJCLEVBQVEsQ0FHL0UsU0FBU20yQixFQUFtQkMsRUFBUSxDQUNsQyxPQUFPLFNBQW9CbmYsRUFBSzlULEVBQU13bkIsRUFBUSxDQUM1QyxPQUFPLEtBQUssUUFBUSxZQUFZQSxHQUFVLENBQUEsRUFBSSxDQUM1QyxPQUFBM3FCLEVBQ0EsUUFBU28yQixFQUFTLENBQ2hCLGVBQWdCLHFCQUMxQixFQUFZLENBQUUsRUFDTixJQUFBbmYsRUFDQSxLQUFBOVQsQ0FDRCxDQUFBLENBQUMsQ0FDUixDQUNHLENBRUQsTUFBTSxVQUFVbkQsQ0FBTSxFQUFJbTJCLEVBQWtCLEVBRTVDLE1BQU0sVUFBVW4yQixFQUFTLE1BQU0sRUFBSW0yQixFQUFtQixFQUFJLENBQzVELENBQUMsRUFFRCxJQUFJLFFBQVUsTUFTZCxNQUFNLFdBQVksQ0FDaEIsWUFBWUUsRUFBVSxDQUNwQixHQUFJLE9BQU9BLEdBQWEsV0FDdEIsTUFBTSxJQUFJLFVBQVUsOEJBQThCLEVBR3BELElBQUlDLEVBRUosS0FBSyxRQUFVLElBQUksUUFBUSxTQUF5QnoyQixFQUFTLENBQzNEeTJCLEVBQWlCejJCLENBQ3ZCLENBQUssRUFFRCxNQUFNMUMsRUFBUSxLQUdkLEtBQUssUUFBUSxLQUFLMDFCLEdBQVUsQ0FDMUIsR0FBSSxDQUFDMTFCLEVBQU0sV0FBWSxPQUV2QixJQUFJaE8sRUFBSWdPLEVBQU0sV0FBVyxPQUV6QixLQUFPaE8sS0FBTSxHQUNYZ08sRUFBTSxXQUFXaE8sQ0FBQyxFQUFFMGpDLENBQU0sRUFFNUIxMUIsRUFBTSxXQUFhLElBQ3pCLENBQUssRUFHRCxLQUFLLFFBQVEsS0FBT281QixHQUFlLENBQ2pDLElBQUlDLEVBRUosTUFBTXAyQixFQUFVLElBQUksUUFBUVAsR0FBVyxDQUNyQzFDLEVBQU0sVUFBVTBDLENBQU8sRUFDdkIyMkIsRUFBVzMyQixDQUNuQixDQUFPLEVBQUUsS0FBSzAyQixDQUFXLEVBRW5CLE9BQUFuMkIsRUFBUSxPQUFTLFVBQWtCLENBQ2pDakQsRUFBTSxZQUFZcTVCLENBQVEsQ0FDbEMsRUFFYXAyQixDQUNiLEVBRUlpMkIsRUFBUyxTQUFnQnBXLEVBQVMwSyxFQUFRekgsRUFBUyxDQUM3Qy9sQixFQUFNLFNBS1ZBLEVBQU0sT0FBUyxJQUFJLGNBQWM4aUIsRUFBUzBLLEVBQVF6SCxDQUFPLEVBQ3pEb1QsRUFBZW41QixFQUFNLE1BQU0sRUFDakMsQ0FBSyxDQUNGLENBS0Qsa0JBQW1CLENBQ2pCLEdBQUksS0FBSyxPQUNQLE1BQU0sS0FBSyxNQUVkLENBTUQsVUFBVTR5QixFQUFVLENBQ2xCLEdBQUksS0FBSyxPQUFRLENBQ2ZBLEVBQVMsS0FBSyxNQUFNLEVBQ3BCLE1BQ0QsQ0FFRyxLQUFLLFdBQ1AsS0FBSyxXQUFXLEtBQUtBLENBQVEsRUFFN0IsS0FBSyxXQUFhLENBQUNBLENBQVEsQ0FFOUIsQ0FNRCxZQUFZQSxFQUFVLENBQ3BCLEdBQUksQ0FBQyxLQUFLLFdBQ1IsT0FFRixNQUFNeHdCLEVBQVEsS0FBSyxXQUFXLFFBQVF3d0IsQ0FBUSxFQUMxQ3h3QixJQUFVLElBQ1osS0FBSyxXQUFXLE9BQU9BLEVBQU8sQ0FBQyxDQUVsQyxDQU1ELE9BQU8sUUFBUyxDQUNkLElBQUlzekIsRUFJSixNQUFPLENBQ0wsTUFKWSxJQUFJLFlBQVksU0FBa0I0RCxFQUFHLENBQ2pENUQsRUFBUzRELENBQ2YsQ0FBSyxFQUdDLE9BQUE1RCxDQUNOLENBQ0csQ0FDSCxDQUVBLElBQUksY0FBZ0IsWUF1QnBCLFNBQVMsT0FBTzlpQyxFQUFVLENBQ3hCLE9BQU8sU0FBY2xDLEVBQUssQ0FDeEIsT0FBT2tDLEVBQVMsTUFBTSxLQUFNbEMsQ0FBRyxDQUNuQyxDQUNBLENBU0EsU0FBUyxhQUFhNm9DLEVBQVMsQ0FDN0IsT0FBT2hNLFVBQVEsU0FBU2dNLENBQU8sR0FBTUEsRUFBUSxlQUFpQixFQUNoRSxDQUVBLE1BQU0sZUFBaUIsQ0FDckIsU0FBVSxJQUNWLG1CQUFvQixJQUNwQixXQUFZLElBQ1osV0FBWSxJQUNaLEdBQUksSUFDSixRQUFTLElBQ1QsU0FBVSxJQUNWLDRCQUE2QixJQUM3QixVQUFXLElBQ1gsYUFBYyxJQUNkLGVBQWdCLElBQ2hCLFlBQWEsSUFDYixnQkFBaUIsSUFDakIsT0FBUSxJQUNSLGdCQUFpQixJQUNqQixpQkFBa0IsSUFDbEIsTUFBTyxJQUNQLFNBQVUsSUFDVixZQUFhLElBQ2IsU0FBVSxJQUNWLE9BQVEsSUFDUixrQkFBbUIsSUFDbkIsa0JBQW1CLElBQ25CLFdBQVksSUFDWixhQUFjLElBQ2QsZ0JBQWlCLElBQ2pCLFVBQVcsSUFDWCxTQUFVLElBQ1YsaUJBQWtCLElBQ2xCLGNBQWUsSUFDZiw0QkFBNkIsSUFDN0IsZUFBZ0IsSUFDaEIsU0FBVSxJQUNWLEtBQU0sSUFDTixlQUFnQixJQUNoQixtQkFBb0IsSUFDcEIsZ0JBQWlCLElBQ2pCLFdBQVksSUFDWixxQkFBc0IsSUFDdEIsb0JBQXFCLElBQ3JCLGtCQUFtQixJQUNuQixVQUFXLElBQ1gsbUJBQW9CLElBQ3BCLG9CQUFxQixJQUNyQixPQUFRLElBQ1IsaUJBQWtCLElBQ2xCLFNBQVUsSUFDVixnQkFBaUIsSUFDakIscUJBQXNCLElBQ3RCLGdCQUFpQixJQUNqQiw0QkFBNkIsSUFDN0IsMkJBQTRCLElBQzVCLG9CQUFxQixJQUNyQixlQUFnQixJQUNoQixXQUFZLElBQ1osbUJBQW9CLElBQ3BCLGVBQWdCLElBQ2hCLHdCQUF5QixJQUN6QixzQkFBdUIsSUFDdkIsb0JBQXFCLElBQ3JCLGFBQWMsSUFDZCxZQUFhLElBQ2IsOEJBQStCLEdBQ2pDLEVBRUEsT0FBTyxRQUFRLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQ25nQyxFQUFLM0UsQ0FBSyxJQUFNLENBQ3ZELGVBQWVBLENBQUssRUFBSTJFLENBQzFCLENBQUMsRUFFRCxJQUFJLGlCQUFtQixlQVN2QixTQUFTLGVBQWVvZ0MsRUFBZSxDQUNyQyxNQUFNaG5DLEVBQVUsSUFBSSxRQUFRZ25DLENBQWEsRUFDbkNDLEVBQVcvTyxPQUFLLFFBQVEsVUFBVSxRQUFTbDRCLENBQU8sRUFHeEQrNkIsaUJBQVEsT0FBT2tNLEVBQVUsUUFBUSxVQUFXam5DLEVBQVMsQ0FBQyxXQUFZLEVBQUksQ0FBQyxFQUd2RSs2QixVQUFRLE9BQU9rTSxFQUFVam5DLEVBQVMsS0FBTSxDQUFDLFdBQVksRUFBSSxDQUFDLEVBRzFEaW5DLEVBQVMsT0FBUyxTQUFnQnRCLEVBQWdCLENBQ2hELE9BQU8sZUFBZSxZQUFZcUIsRUFBZXJCLENBQWMsQ0FBQyxDQUNwRSxFQUVTc0IsQ0FDVCxDQUdBLE1BQU0sTUFBUSxlQUFlckosWUFBVSxFQUd2QyxNQUFNLE1BQVEsUUFHZCxNQUFNLGNBQWdCLGNBQ3RCLE1BQU0sWUFBYyxjQUNwQixNQUFNLFNBQVcsU0FDakIsTUFBTSxRQUFVMEgsVUFDaEIsTUFBTSxXQUFhLFdBR25CLE1BQU0sV0FBYSxXQUduQixNQUFNLE9BQVMsTUFBTSxjQUdyQixNQUFNLElBQU0sU0FBUzRCLEVBQUlDLEVBQVUsQ0FDakMsT0FBTyxRQUFRLElBQUlBLENBQVEsQ0FDN0IsRUFFQSxNQUFNLE9BQVMsT0FHZixNQUFNLGFBQWUsYUFHckIsTUFBTSxZQUFjLFlBRXBCLE1BQU0sYUFBZSxlQUVyQixNQUFNLFdBQWFoUCxHQUFTLGVBQWU0QyxVQUFRLFdBQVc1QyxDQUFLLEVBQUksSUFBSSxTQUFTQSxDQUFLLEVBQUlBLENBQUssRUFFbEcsTUFBTSxXQUFhLFNBQVMsV0FFNUIsTUFBTSxlQUFpQixpQkFFdkIsTUFBTSxRQUFVLFVBRWhCaVAsVUFBaUIsTUNuakhidFUsV0FBWS8wQixnQkFBUUEsZUFBSyxVQUFhLFVBQVksQ0FDbEQrMEIsa0JBQVcsT0FBTyxRQUFVLFNBQVNwYixFQUFHLENBQ3BDLFFBQVNnTixFQUFHbGxCLEVBQUksRUFBR3FPLEVBQUksVUFBVSxPQUFRck8sRUFBSXFPLEVBQUdyTyxJQUFLLENBQ2pEa2xCLEVBQUksVUFBVWxsQixDQUFDLEVBQ2YsUUFBUzZmLEtBQUtxRixFQUFPLE9BQU8sVUFBVSxlQUFlLEtBQUtBLEVBQUdyRixDQUFDLElBQzFEM0gsRUFBRTJILENBQUMsRUFBSXFGLEVBQUVyRixDQUFDLEVBQ2pCLENBQ0QsT0FBTzNILENBQ2YsRUFDV29iLFdBQVMsTUFBTSxLQUFNLFNBQVMsQ0FDekMsRUFDSS9CLFlBQWFoekIsZ0JBQVFBLGVBQUssV0FBYyxTQUFVaXpCLEVBQVNDLEVBQVlDLEVBQUdDLEVBQVcsQ0FDckYsU0FBU0MsRUFBTW52QixFQUFPLENBQUUsT0FBT0EsYUFBaUJpdkIsRUFBSWp2QixFQUFRLElBQUlpdkIsRUFBRSxTQUFVaGhCLEVBQVMsQ0FBRUEsRUFBUWpPLENBQUssQ0FBRSxDQUFFLENBQUksQ0FDNUcsT0FBTyxJQUFLaXZCLElBQU1BLEVBQUksVUFBVSxTQUFVaGhCLEVBQVNDLEVBQVEsQ0FDdkQsU0FBU2toQixFQUFVcHZCLEVBQU8sQ0FBRSxHQUFJLENBQUVxdkIsRUFBS0gsRUFBVSxLQUFLbHZCLENBQUssQ0FBQyxDQUFFLE9BQVV5UCxFQUFHLENBQUV2QixFQUFPdUIsQ0FBQyxFQUFNLENBQzNGLFNBQVM2ZixFQUFTdHZCLEVBQU8sQ0FBRSxHQUFJLENBQUVxdkIsRUFBS0gsRUFBVSxNQUFTbHZCLENBQUssQ0FBQyxDQUFJLE9BQVF5UCxFQUFHLENBQUV2QixFQUFPdUIsQ0FBQyxFQUFNLENBQzlGLFNBQVM0ZixFQUFLN29CLEVBQVEsQ0FBRUEsRUFBTyxLQUFPeUgsRUFBUXpILEVBQU8sS0FBSyxFQUFJMm9CLEVBQU0zb0IsRUFBTyxLQUFLLEVBQUUsS0FBSzRvQixFQUFXRSxDQUFRLENBQUksQ0FDOUdELEdBQU1ILEVBQVlBLEVBQVUsTUFBTUgsRUFBU0MsR0FBYyxDQUFFLENBQUEsR0FBRyxLQUFJLENBQUUsQ0FDNUUsQ0FBSyxDQUNMLEVBQ0lPLGNBQWV6ekIsZ0JBQVFBLGVBQUssYUFBZ0IsU0FBVWl6QixFQUFTckgsRUFBTSxDQUNyRSxJQUFJMWEsRUFBSSxDQUFFLE1BQU8sRUFBRyxLQUFNLFVBQVcsQ0FBRSxHQUFJeUksRUFBRSxDQUFDLEVBQUksRUFBRyxNQUFNQSxFQUFFLENBQUMsRUFBRyxPQUFPQSxFQUFFLENBQUMsQ0FBSSxFQUFFLEtBQU0sQ0FBRSxFQUFFLElBQUssQ0FBQSxDQUFJLEVBQUUrWixFQUFHQyxFQUFHaGEsRUFBR2lhLEVBQy9HLE9BQU9BLEVBQUksQ0FBRSxLQUFNQyxFQUFLLENBQUMsRUFBRyxNQUFTQSxFQUFLLENBQUMsRUFBRyxPQUFVQSxFQUFLLENBQUMsQ0FBRyxFQUFFLE9BQU8sUUFBVyxhQUFlRCxFQUFFLE9BQU8sUUFBUSxFQUFJLFVBQVcsQ0FBRSxPQUFPLElBQU8sR0FBR0EsRUFDdkosU0FBU0MsRUFBSy9qQixFQUFHLENBQUUsT0FBTyxTQUFVaUMsRUFBRyxDQUFFLE9BQU93aEIsRUFBSyxDQUFDempCLEVBQUdpQyxDQUFDLENBQUMsQ0FBSSxDQUFHLENBQ2xFLFNBQVN3aEIsRUFBS08sRUFBSSxDQUNkLEdBQUlKLEVBQUcsTUFBTSxJQUFJLFVBQVUsaUNBQWlDLEVBQzVELEtBQU9FLElBQU1BLEVBQUksRUFBR0UsRUFBRyxDQUFDLElBQU01aUIsRUFBSSxJQUFLQSxHQUFHLEdBQUksQ0FDMUMsR0FBSXdpQixFQUFJLEVBQUdDLElBQU1oYSxFQUFJbWEsRUFBRyxDQUFDLEVBQUksRUFBSUgsRUFBRSxPQUFZRyxFQUFHLENBQUMsRUFBSUgsRUFBRSxTQUFjaGEsRUFBSWdhLEVBQUUsU0FBY2hhLEVBQUUsS0FBS2dhLENBQUMsRUFBRyxHQUFLQSxFQUFFLE9BQVMsRUFBRWhhLEVBQUlBLEVBQUUsS0FBS2dhLEVBQUdHLEVBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBTSxPQUFPbmEsRUFFM0osT0FESWdhLEVBQUksRUFBR2hhLElBQUdtYSxFQUFLLENBQUNBLEVBQUcsQ0FBQyxFQUFJLEVBQUduYSxFQUFFLEtBQUssR0FDOUJtYSxFQUFHLENBQUMsRUFBQyxDQUNULElBQUssR0FBRyxJQUFLLEdBQUduYSxFQUFJbWEsRUFBSSxNQUN4QixJQUFLLEdBQUcsT0FBQTVpQixFQUFFLFFBQWdCLENBQUUsTUFBTzRpQixFQUFHLENBQUMsRUFBRyxLQUFNLEVBQUssRUFDckQsSUFBSyxHQUFHNWlCLEVBQUUsUUFBU3lpQixFQUFJRyxFQUFHLENBQUMsRUFBR0EsRUFBSyxDQUFDLENBQUMsRUFBRyxTQUN4QyxJQUFLLEdBQUdBLEVBQUs1aUIsRUFBRSxJQUFJLE1BQU9BLEVBQUUsS0FBSyxJQUFHLEVBQUksU0FDeEMsUUFDSSxHQUFNeUksRUFBSXpJLEVBQUUsS0FBTSxFQUFBeUksRUFBSUEsRUFBRSxPQUFTLEdBQUtBLEVBQUVBLEVBQUUsT0FBUyxDQUFDLEtBQU9tYSxFQUFHLENBQUMsSUFBTSxHQUFLQSxFQUFHLENBQUMsSUFBTSxHQUFJLENBQUU1aUIsRUFBSSxFQUFHLFFBQVcsQ0FDNUcsR0FBSTRpQixFQUFHLENBQUMsSUFBTSxJQUFNLENBQUNuYSxHQUFNbWEsRUFBRyxDQUFDLEVBQUluYSxFQUFFLENBQUMsR0FBS21hLEVBQUcsQ0FBQyxFQUFJbmEsRUFBRSxDQUFDLEdBQUssQ0FBRXpJLEVBQUUsTUFBUTRpQixFQUFHLENBQUMsRUFBRyxLQUFRLENBQ3RGLEdBQUlBLEVBQUcsQ0FBQyxJQUFNLEdBQUs1aUIsRUFBRSxNQUFReUksRUFBRSxDQUFDLEVBQUcsQ0FBRXpJLEVBQUUsTUFBUXlJLEVBQUUsQ0FBQyxFQUFHQSxFQUFJbWEsRUFBSSxLQUFRLENBQ3JFLEdBQUluYSxHQUFLekksRUFBRSxNQUFReUksRUFBRSxDQUFDLEVBQUcsQ0FBRXpJLEVBQUUsTUFBUXlJLEVBQUUsQ0FBQyxFQUFHekksRUFBRSxJQUFJLEtBQUs0aUIsQ0FBRSxFQUFHLEtBQVEsQ0FDL0RuYSxFQUFFLENBQUMsR0FBR3pJLEVBQUUsSUFBSSxJQUFHLEVBQ25CQSxFQUFFLEtBQUssSUFBSyxFQUFFLFFBQ3JCLENBQ0Q0aUIsRUFBS2xJLEVBQUssS0FBS3FILEVBQVMvaEIsQ0FBQyxDQUM1QixPQUFReUMsRUFBRyxDQUFFbWdCLEVBQUssQ0FBQyxFQUFHbmdCLENBQUMsRUFBR2dnQixFQUFJLENBQUUsUUFBVyxDQUFFRCxFQUFJL1osRUFBSSxDQUFJLENBQzFELEdBQUltYSxFQUFHLENBQUMsRUFBSSxFQUFHLE1BQU1BLEVBQUcsQ0FBQyxFQUFHLE1BQU8sQ0FBRSxNQUFPQSxFQUFHLENBQUMsRUFBSUEsRUFBRyxDQUFDLEVBQUksT0FBUSxLQUFNLEdBQzdFLENBQ0wsRUFDSUMsa0JBQW1CL3pCLGdCQUFRQSxlQUFLLGlCQUFvQixTQUFVZzBCLEVBQUssQ0FDbkUsT0FBUUEsR0FBT0EsRUFBSSxXQUFjQSxFQUFNLENBQUUsUUFBV0EsRUFDeEQsRUFDQSxPQUFPLGVBQWVzVixjQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUksQ0FBRSxFQUN6Q0EsY0FBQSxZQUFHLE9BQ3RCLElBQUksUUFBVXZWLGtCQUFnQmpCLFNBQWdCLEVBQzFDLFlBQTZCLFVBQVksQ0FDekMsU0FBU3lXLEVBQVlwVixFQUFJLENBQ3JCLElBQUlxVixFQUFrQnJWLEVBQUcsZ0JBQWlCc1YsRUFBdUJ0VixFQUFHLHFCQUNwRSxLQUFLLGdCQUFrQnFWLEVBQ3ZCLEtBQUsscUJBQXVCQyxDQUMvQixDQUNELE9BQUFGLEVBQVksVUFBVSxJQUFNLFNBQVVsWixFQUFNdEUsRUFBUSxDQUNoRCxPQUFPaUgsWUFBVSxLQUFNLE9BQVEsT0FBUSxVQUFZLENBQy9DLElBQUkwVyxFQUNKLE9BQU9qVyxjQUFZLEtBQU0sU0FBVVUsRUFBSSxDQUNuQyxPQUFRQSxFQUFHLE1BQUssQ0FDWixJQUFLLEdBQUcsTUFBTyxDQUFDLEVBQWEsS0FBSyxxQkFBcUIsTUFBTSxNQUFPOUQsRUFBTXRFLENBQU0sQ0FBQyxFQUNqRixJQUFLLEdBQ0QsT0FBQTJkLEVBQWdCdlYsRUFBRyxPQUNaLENBQUMsRUFBYSxLQUFLLFlBQVl1VixDQUFhLENBQUMsRUFDeEQsSUFBSyxHQUFHLE1BQU8sQ0FBQyxFQUFldlYsRUFBRyxLQUFNLENBQUEsQ0FDM0MsQ0FDakIsQ0FBYSxDQUNiLENBQVMsQ0FDVCxFQUNJb1YsRUFBWSxVQUFVLFFBQVUsU0FBVWxaLEVBQU10RSxFQUFRLENBQ3BELE9BQU9pSCxZQUFVLEtBQU0sT0FBUSxPQUFRLFVBQVksQ0FDL0MsSUFBSTBXLEVBQ0osT0FBT2pXLGNBQVksS0FBTSxTQUFVVSxFQUFJLENBQ25DLE9BQVFBLEVBQUcsTUFBSyxDQUNaLElBQUssR0FBRyxNQUFPLENBQUMsRUFBYSxLQUFLLHFCQUFxQixNQUFNLE1BQU85RCxFQUFNdEUsRUFBUSxDQUMxRSxhQUFjLGFBQ2pCLENBQUEsQ0FBQyxFQUNOLElBQUssR0FDRCxPQUFBMmQsRUFBZ0J2VixFQUFHLE9BQ1osQ0FBQyxFQUFhLEtBQUssWUFBWXVWLENBQWEsQ0FBQyxFQUN4RCxJQUFLLEdBQUcsTUFBTyxDQUFDLEVBQWV2VixFQUFHLEtBQU0sQ0FBQSxDQUMzQyxDQUNqQixDQUFhLENBQ2IsQ0FBUyxDQUNULEVBQ0lvVixFQUFZLFVBQVUsS0FBTyxTQUFVbFosRUFBTXRFLEVBQVEsQ0FDakQsT0FBT2lILFlBQVUsS0FBTSxPQUFRLE9BQVEsVUFBWSxDQUMvQyxJQUFJMFcsRUFDSixPQUFPalcsY0FBWSxLQUFNLFNBQVVVLEVBQUksQ0FDbkMsT0FBUUEsRUFBRyxNQUFLLENBQ1osSUFBSyxHQUFHLE1BQU8sQ0FBQyxFQUFhLEtBQUsscUJBQXFCLE1BQU0sT0FBUTlELEVBQU10RSxDQUFNLENBQUMsRUFDbEYsSUFBSyxHQUNELE9BQUEyZCxFQUFnQnZWLEVBQUcsT0FDWixDQUFDLEVBQWEsS0FBSyxZQUFZdVYsQ0FBYSxDQUFDLEVBQ3hELElBQUssR0FBRyxNQUFPLENBQUMsRUFBZXZWLEVBQUcsS0FBTSxDQUFBLENBQzNDLENBQ2pCLENBQWEsQ0FDYixDQUFTLENBQ1QsRUFDSW9WLEVBQVksVUFBVSxTQUFXLFNBQVVsWixFQUFNMEosRUFBVSxDQUN2RCxPQUFPL0csWUFBVSxLQUFNLE9BQVEsT0FBUSxVQUFZLENBQy9DLElBQUkwVyxFQUNKLE9BQU9qVyxjQUFZLEtBQU0sU0FBVVUsRUFBSSxDQUNuQyxPQUFRQSxFQUFHLE1BQUssQ0FDWixJQUFLLEdBQUcsTUFBTyxDQUFDLEVBQWEsS0FBSyxxQkFBcUIsTUFBTSxPQUFROUQsRUFBTTBKLENBQVEsQ0FBQyxFQUNwRixJQUFLLEdBQ0QsT0FBQTJQLEVBQWdCdlYsRUFBRyxPQUNaLENBQUMsRUFBYSxLQUFLLFlBQVl1VixDQUFhLENBQUMsRUFDeEQsSUFBSyxHQUFHLE1BQU8sQ0FBQyxFQUFldlYsRUFBRyxLQUFNLENBQUEsQ0FDM0MsQ0FDakIsQ0FBYSxDQUNiLENBQVMsQ0FDVCxFQUNJb1YsRUFBWSxVQUFVLElBQU0sU0FBVWxaLEVBQU10RSxFQUFRLENBQ2hELE9BQU9pSCxZQUFVLEtBQU0sT0FBUSxPQUFRLFVBQVksQ0FDL0MsSUFBSTBXLEVBQ0osT0FBT2pXLGNBQVksS0FBTSxTQUFVVSxFQUFJLENBQ25DLE9BQVFBLEVBQUcsTUFBSyxDQUNaLElBQUssR0FBRyxNQUFPLENBQUMsRUFBYSxLQUFLLHFCQUFxQixNQUFNLE1BQU85RCxFQUFNdEUsQ0FBTSxDQUFDLEVBQ2pGLElBQUssR0FDRCxPQUFBMmQsRUFBZ0J2VixFQUFHLE9BQ1osQ0FBQyxFQUFhLEtBQUssWUFBWXVWLENBQWEsQ0FBQyxFQUN4RCxJQUFLLEdBQUcsTUFBTyxDQUFDLEVBQWV2VixFQUFHLEtBQU0sQ0FBQSxDQUMzQyxDQUNqQixDQUFhLENBQ2IsQ0FBUyxDQUNULEVBQ0lvVixFQUFZLFVBQVUsT0FBUyxTQUFVbFosRUFBTXRFLEVBQVEsQ0FDbkQsT0FBT2lILFlBQVUsS0FBTSxPQUFRLE9BQVEsVUFBWSxDQUMvQyxJQUFJMFcsRUFDSixPQUFPalcsY0FBWSxLQUFNLFNBQVVVLEVBQUksQ0FDbkMsT0FBUUEsRUFBRyxNQUFLLENBQ1osSUFBSyxHQUFHLE1BQU8sQ0FBQyxFQUFhLEtBQUsscUJBQXFCLE1BQU0sU0FBVTlELEVBQU10RSxDQUFNLENBQUMsRUFDcEYsSUFBSyxHQUNELE9BQUEyZCxFQUFnQnZWLEVBQUcsT0FDWixDQUFDLEVBQWEsS0FBSyxZQUFZdVYsQ0FBYSxDQUFDLEVBQ3hELElBQUssR0FBRyxNQUFPLENBQUMsRUFBZXZWLEVBQUcsS0FBTSxDQUFBLENBQzNDLENBQ2pCLENBQWEsQ0FDYixDQUFTLENBQ1QsRUFDSW9WLEVBQVksVUFBVSxZQUFjLFNBQVVHLEVBQWUsQ0FDekQsT0FBTyxLQUFLLGdCQUFnQixVQUV4QixRQUFRLFNBQVMzVSxXQUFTQSxXQUFTLENBQUUsRUFBRTJVLENBQWEsRUFBRyxDQUFFLGNBQWUsSUFBVSxpQkFBa0IsR0FBVSxDQUFBLENBQUMsQ0FBQyxDQUM1SCxFQUNXSCxDQUNYLEVBQUMsRUFDa0JELGNBQUEsWUFBRyx5QkN4SnRCLE9BQU8sZUFBYzNYLEVBQVUsYUFBYyxDQUFFLE1BQU8sRUFBSSxDQUFFLEVBQzVEQSxFQUE0QixrQkFBQSxPQUM1QixJQUFJMlgsRUFBZ0J4VyxjQUNwQixPQUFPLGVBQWVuQixFQUFTLG9CQUFxQixDQUFFLFdBQVksR0FBTSxJQUFLLFVBQVksQ0FBRSxPQUFPMlgsRUFBYyxXQUFZLENBQUksQ0FBQSwrQ0NEaEksU0FBaUIsTUNBakIsTUFBaUIsVUNBakIsTUFBaUIsV0NBakIsSUFBaUIsZUNBakIsT0FBaUIsWUNBakIsS0FBaUIsVUNBakIsSUFBaUIsU0NBakIsTUFBaUIsU0FBU0ssR0FBYSxDQUN0QyxHQUFJLE9BQU8sUUFBVyxZQUFjLE9BQU8sT0FBTyx1QkFBMEIsV0FBYyxNQUFPLEdBQ2pHLEdBQUksT0FBTyxPQUFPLFVBQWEsU0FBWSxNQUFPLEdBRWxELElBQUkxb0MsRUFBTSxDQUFBLEVBQ04yb0MsRUFBTSxPQUFPLE1BQU0sRUFDbkJDLEVBQVMsT0FBT0QsQ0FBRyxFQUl2QixHQUhJLE9BQU9BLEdBQVEsVUFFZixPQUFPLFVBQVUsU0FBUyxLQUFLQSxDQUFHLElBQU0sbUJBQ3hDLE9BQU8sVUFBVSxTQUFTLEtBQUtDLENBQU0sSUFBTSxrQkFBcUIsTUFBTyxHQVUzRSxJQUFJQyxFQUFTLEdBQ2I3b0MsRUFBSTJvQyxDQUFHLEVBQUlFLEVBQ1gsSUFBS0YsS0FBTzNvQyxFQUFPLE1BQU8sR0FHMUIsR0FGSSxPQUFPLE9BQU8sTUFBUyxZQUFjLE9BQU8sS0FBS0EsQ0FBRyxFQUFFLFNBQVcsR0FFakUsT0FBTyxPQUFPLHFCQUF3QixZQUFjLE9BQU8sb0JBQW9CQSxDQUFHLEVBQUUsU0FBVyxFQUFLLE1BQU8sR0FFL0csSUFBSThvQyxFQUFPLE9BQU8sc0JBQXNCOW9DLENBQUcsRUFHM0MsR0FGSThvQyxFQUFLLFNBQVcsR0FBS0EsRUFBSyxDQUFDLElBQU1ILEdBRWpDLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLM29DLEVBQUsyb0MsQ0FBRyxFQUFLLE1BQU8sR0FFcEUsR0FBSSxPQUFPLE9BQU8sMEJBQTZCLFdBQVksQ0FDMUQsSUFBSXZOLEVBQWEsT0FBTyx5QkFBeUJwN0IsRUFBSzJvQyxDQUFHLEVBQ3pELEdBQUl2TixFQUFXLFFBQVV5TixHQUFVek4sRUFBVyxhQUFlLEdBQVEsTUFBTyxFQUM1RSxDQUVELE1BQU8sRUFDUixFQ3ZDSSxXQUFhLE9BQU8sT0FBVyxLQUFlLE9BQzlDLGNBQWdCdkosTUFFcEI2VyxhQUFpQixTQUFTSyxHQUFtQixDQUk1QyxPQUhJLE9BQU8sWUFBZSxZQUN0QixPQUFPLFFBQVcsWUFDbEIsT0FBTyxXQUFXLEtBQUssR0FBTSxVQUM3QixPQUFPLE9BQU8sS0FBSyxHQUFNLFNBQW1CLEdBRXpDLGNBQWEsQ0FDckIsRUNWSSxLQUFPLENBQ1YsVUFBVyxLQUNYLElBQUssQ0FBRSxDQUNSLEVBRUksUUFBVSxPQUdkQyxXQUFpQixTQUFTQSxHQUFXLENBRXBDLE1BQU8sQ0FBRSxVQUFXLElBQU0sRUFBQyxNQUFRLEtBQUssS0FDcEMsRUFBRSxnQkFBZ0IsUUFDdkIsRUNWSSxjQUFnQixrREFDaEJDLFFBQVEsT0FBTyxVQUFVLFNBQ3pCMWtCLE1BQU0sS0FBSyxJQUNYLFNBQVcsb0JBRVgsU0FBVyxTQUFTMmtCLEVBQVN4bEMsRUFBR0MsRUFBRyxDQUduQyxRQUZJekUsRUFBTSxDQUFBLEVBRUQsRUFBSSxFQUFHLEVBQUl3RSxFQUFFLE9BQVEsR0FBSyxFQUMvQnhFLEVBQUksQ0FBQyxFQUFJd0UsRUFBRSxDQUFDLEVBRWhCLFFBQVNsQyxFQUFJLEVBQUdBLEVBQUltQyxFQUFFLE9BQVFuQyxHQUFLLEVBQy9CdEMsRUFBSXNDLEVBQUlrQyxFQUFFLE1BQU0sRUFBSUMsRUFBRW5DLENBQUMsRUFHM0IsT0FBT3RDLENBQ1gsRUFFSSxNQUFRLFNBQVNpcUMsRUFBTUMsRUFBU3ZkLEVBQVEsQ0FFeEMsUUFESTNzQixFQUFNLENBQUEsRUFDRCxFQUFJMnNCLEdBQVUsRUFBR3JxQixFQUFJLEVBQUcsRUFBSTRuQyxFQUFRLE9BQVEsR0FBSyxFQUFHNW5DLEdBQUssRUFDOUR0QyxFQUFJc0MsQ0FBQyxFQUFJNG5DLEVBQVEsQ0FBQyxFQUV0QixPQUFPbHFDLENBQ1gsRUFFSSxNQUFRLFNBQVVBLEVBQUttcUMsRUFBUSxDQUUvQixRQURJalEsRUFBTSxHQUNENTRCLEVBQUksRUFBR0EsRUFBSXRCLEVBQUksT0FBUXNCLEdBQUssRUFDakM0NEIsR0FBT2w2QixFQUFJc0IsQ0FBQyxFQUNSQSxFQUFJLEVBQUl0QixFQUFJLFNBQ1prNkIsR0FBT2lRLEdBR2YsT0FBT2pRLENBQ1gsRUFFQWtRLGlCQUFpQixTQUFTcFEsRUFBSzVtQixFQUFNLENBQ2pDLElBQUl2USxFQUFTLEtBQ2IsR0FBSSxPQUFPQSxHQUFXLFlBQWNrbkMsUUFBTSxNQUFNbG5DLENBQU0sSUFBTSxTQUN4RCxNQUFNLElBQUksVUFBVSxjQUFnQkEsQ0FBTSxFQXlCOUMsUUF2QkkySSxFQUFPLE1BQU0sVUFBVyxDQUFDLEVBRXpCNitCLEVBQ0FDLEVBQVMsVUFBWSxDQUNyQixHQUFJLGdCQUFnQkQsRUFBTyxDQUN2QixJQUFJOS9CLEVBQVMxSCxFQUFPLE1BQ2hCLEtBQ0EsU0FBUzJJLEVBQU0sU0FBUyxDQUN4QyxFQUNZLE9BQUksT0FBT2pCLENBQU0sSUFBTUEsRUFDWkEsRUFFSixJQUNWLENBQ0QsT0FBTzFILEVBQU8sTUFDVnVRLEVBQ0EsU0FBUzVILEVBQU0sU0FBUyxDQUNwQyxDQUVBLEVBRVErK0IsRUFBY2xsQixNQUFJLEVBQUd4aUIsRUFBTyxPQUFTMkksRUFBSyxNQUFNLEVBQ2hEZy9CLEVBQVksQ0FBQSxFQUNQbHBDLEVBQUksRUFBR0EsRUFBSWlwQyxFQUFhanBDLElBQzdCa3BDLEVBQVVscEMsQ0FBQyxFQUFJLElBQU1BLEVBS3pCLEdBRkErb0MsRUFBUSxTQUFTLFNBQVUsb0JBQXNCLE1BQU1HLEVBQVcsR0FBRyxFQUFJLDJDQUEyQyxFQUFFRixDQUFNLEVBRXhIem5DLEVBQU8sVUFBVyxDQUNsQixJQUFJNG5DLEVBQVEsVUFBaUIsR0FDN0JBLEVBQU0sVUFBWTVuQyxFQUFPLFVBQ3pCd25DLEVBQU0sVUFBWSxJQUFJSSxFQUN0QkEsRUFBTSxVQUFZLElBQ3JCLENBRUQsT0FBT0osQ0FDWCxFQ2pGSSxlQUFpQjFYLGlCQUVyQixhQUFpQixTQUFTLFVBQVUsTUFBUSxlQ0Z4QyxLQUFPLFNBQVMsVUFBVSxLQUMxQixRQUFVLE9BQU8sVUFBVSxlQUMzQnFILE9BQU9ySCxhQUdYLE9BQWlCcUgsT0FBSyxLQUFLLEtBQU0sT0FBTyxFQ0xwQzBRLFlBRUEsT0FBUy9YLFNBQ1QsV0FBYUMsTUFDYixZQUFjcUUsTUFDZCxnQkFBa0J5QyxJQUNsQmlSLGVBQWVDLE9BQ2ZDLGFBQWFDLEtBQ2IsVUFBWUMsSUFFWixVQUFZLFNBR1osc0JBQXdCLFNBQVVDLEVBQWtCLENBQ3ZELEdBQUksQ0FDSCxPQUFPLFVBQVUseUJBQTJCQSxFQUFtQixnQkFBZ0IsRUFBQyxDQUNsRixNQUFhLENBQUUsQ0FDZixFQUVJQyxRQUFRLE9BQU8seUJBQ25CLEdBQUlBLFFBQ0gsR0FBSSxDQUNIQSxRQUFNLENBQUEsRUFBSSxFQUFFLENBQ1osTUFBVyxDQUNYQSxRQUFRLElBQ1IsQ0FHRixJQUFJLGVBQWlCLFVBQVksQ0FDaEMsTUFBTSxJQUFJSixZQUNYLEVBQ0ksZUFBaUJJLFFBQ2pCLFVBQVksQ0FDZCxHQUFJLENBRUgsaUJBQVUsT0FDSCxjQUNQLE1BQXNCLENBQ3RCLEdBQUksQ0FFSCxPQUFPQSxRQUFNLFVBQVcsUUFBUSxFQUFFLEdBQ2xDLE1BQW9CLENBQ3BCLE9BQU8sY0FDUCxDQUNELENBQ0gsRUFBSSxFQUNELGVBRUMsV0FBYUMsYUFBc0IsRUFDbkMsU0FBV0MsV0FBb0IsRUFFL0IsU0FBVyxPQUFPLGlCQUNyQixTQUNHLFNBQVVDLEVBQUcsQ0FBRSxPQUFPQSxFQUFFLFNBQVksRUFDcEMsTUFHQSxVQUFZLENBQUEsRUFFWixXQUFhLE9BQU8sV0FBZSxLQUFlLENBQUMsU0FBV1YsWUFBWSxTQUFTLFVBQVUsRUFFN0YsV0FBYSxDQUNoQixVQUFXLEtBQ1gsbUJBQW9CLE9BQU8sZUFBbUIsSUFBY0EsWUFBWSxlQUN4RSxVQUFXLE1BQ1gsZ0JBQWlCLE9BQU8sWUFBZ0IsSUFBY0EsWUFBWSxZQUNsRSwyQkFBNEIsWUFBYyxTQUFXLFNBQVMsQ0FBRSxFQUFDLE9BQU8sUUFBUSxFQUFHLENBQUEsRUFBSUEsWUFDdkYsbUNBQW9DQSxZQUNwQyxrQkFBbUIsVUFDbkIsbUJBQW9CLFVBQ3BCLDJCQUE0QixVQUM1QiwyQkFBNEIsVUFDNUIsWUFBYSxPQUFPLFFBQVksSUFBY0EsWUFBWSxRQUMxRCxXQUFZLE9BQU8sT0FBVyxJQUFjQSxZQUFZLE9BQ3hELGtCQUFtQixPQUFPLGNBQWtCLElBQWNBLFlBQVksY0FDdEUsbUJBQW9CLE9BQU8sZUFBbUIsSUFBY0EsWUFBWSxlQUN4RSxZQUFhLFFBQ2IsYUFBYyxPQUFPLFNBQWEsSUFBY0EsWUFBWSxTQUM1RCxTQUFVLEtBQ1YsY0FBZSxVQUNmLHVCQUF3QixtQkFDeEIsY0FBZSxVQUNmLHVCQUF3QixtQkFDeEIsVUFBVyxPQUNYLFNBQVUsS0FDVixjQUFlLFdBQ2YsaUJBQWtCLE9BQU8sYUFBaUIsSUFBY0EsWUFBWSxhQUNwRSxpQkFBa0IsT0FBTyxhQUFpQixJQUFjQSxZQUFZLGFBQ3BFLHlCQUEwQixPQUFPLHFCQUF5QixJQUFjQSxZQUFZLHFCQUNwRixhQUFjLFVBQ2Qsc0JBQXVCLFVBQ3ZCLGNBQWUsT0FBTyxVQUFjLElBQWNBLFlBQVksVUFDOUQsZUFBZ0IsT0FBTyxXQUFlLElBQWNBLFlBQVksV0FDaEUsZUFBZ0IsT0FBTyxXQUFlLElBQWNBLFlBQVksV0FDaEUsYUFBYyxTQUNkLFVBQVcsTUFDWCxzQkFBdUIsWUFBYyxTQUFXLFNBQVMsU0FBUyxHQUFHLE9BQU8sUUFBUSxHQUFHLENBQUMsRUFBSUEsWUFDNUYsU0FBVSxPQUFPLE1BQVMsU0FBVyxLQUFPQSxZQUM1QyxRQUFTLE9BQU8sSUFBUSxJQUFjQSxZQUFZLElBQ2xELHlCQUEwQixPQUFPLElBQVEsS0FBZSxDQUFDLFlBQWMsQ0FBQyxTQUFXQSxZQUFZLFNBQVMsSUFBSSxJQUFHLEVBQUcsT0FBTyxRQUFRLEVBQUMsQ0FBRSxFQUNwSSxTQUFVLEtBQ1YsV0FBWSxPQUNaLFdBQVksT0FDWixlQUFnQixXQUNoQixhQUFjLFNBQ2QsWUFBYSxPQUFPLFFBQVksSUFBY0EsWUFBWSxRQUMxRCxVQUFXLE9BQU8sTUFBVSxJQUFjQSxZQUFZLE1BQ3RELGVBQWdCLFlBQ2hCLG1CQUFvQixnQkFDcEIsWUFBYSxPQUFPLFFBQVksSUFBY0EsWUFBWSxRQUMxRCxXQUFZLE9BQ1osUUFBUyxPQUFPLElBQVEsSUFBY0EsWUFBWSxJQUNsRCx5QkFBMEIsT0FBTyxJQUFRLEtBQWUsQ0FBQyxZQUFjLENBQUMsU0FBV0EsWUFBWSxTQUFTLElBQUksSUFBRyxFQUFHLE9BQU8sUUFBUSxFQUFDLENBQUUsRUFDcEksc0JBQXVCLE9BQU8sa0JBQXNCLElBQWNBLFlBQVksa0JBQzlFLFdBQVksT0FDWiw0QkFBNkIsWUFBYyxTQUFXLFNBQVMsR0FBRyxPQUFPLFFBQVEsRUFBRyxDQUFBLEVBQUlBLFlBQ3hGLFdBQVksV0FBYSxPQUFTQSxZQUNsQyxnQkFBaUJDLGVBQ2pCLG1CQUFvQixlQUNwQixlQUFnQixXQUNoQixjQUFlRSxhQUNmLGVBQWdCLE9BQU8sV0FBZSxJQUFjSCxZQUFZLFdBQ2hFLHNCQUF1QixPQUFPLGtCQUFzQixJQUFjQSxZQUFZLGtCQUM5RSxnQkFBaUIsT0FBTyxZQUFnQixJQUFjQSxZQUFZLFlBQ2xFLGdCQUFpQixPQUFPLFlBQWdCLElBQWNBLFlBQVksWUFDbEUsYUFBYyxVQUNkLFlBQWEsT0FBTyxRQUFZLElBQWNBLFlBQVksUUFDMUQsWUFBYSxPQUFPLFFBQVksSUFBY0EsWUFBWSxRQUMxRCxZQUFhLE9BQU8sUUFBWSxJQUFjQSxZQUFZLE9BQzNELEVBRUEsR0FBSSxTQUNILEdBQUksQ0FDSCxLQUFLLEtBQ0wsT0FBUWwzQixFQUFHLENBRVgsSUFBSSxXQUFhLFNBQVMsU0FBU0EsQ0FBQyxDQUFDLEVBQ3JDLFdBQVcsbUJBQW1CLEVBQUksVUFDbEMsQ0FHRixJQUFJLE9BQVMsU0FBUzYzQixFQUFPN29DLEVBQU0sQ0FDbEMsSUFBSXVCLEVBQ0osR0FBSXZCLElBQVMsa0JBQ1p1QixFQUFRLHNCQUFzQixzQkFBc0IsVUFDMUN2QixJQUFTLHNCQUNuQnVCLEVBQVEsc0JBQXNCLGlCQUFpQixVQUNyQ3ZCLElBQVMsMkJBQ25CdUIsRUFBUSxzQkFBc0IsdUJBQXVCLFVBQzNDdkIsSUFBUyxtQkFBb0IsQ0FDdkMsSUFBSW9HLEVBQUt5aUMsRUFBTywwQkFBMEIsRUFDdEN6aUMsSUFDSDdFLEVBQVE2RSxFQUFHLFVBRWQsU0FBWXBHLElBQVMsMkJBQTRCLENBQy9DLElBQUk4b0MsRUFBTUQsRUFBTyxrQkFBa0IsRUFDL0JDLEdBQU8sV0FDVnZuQyxFQUFRLFNBQVN1bkMsRUFBSSxTQUFTLEVBRS9CLENBRUQsa0JBQVc5b0MsQ0FBSSxFQUFJdUIsRUFFWkEsQ0FDUixFQUVJLGVBQWlCLENBQ3BCLFVBQVcsS0FDWCx5QkFBMEIsQ0FBQyxjQUFlLFdBQVcsRUFDckQsbUJBQW9CLENBQUMsUUFBUyxXQUFXLEVBQ3pDLHVCQUF3QixDQUFDLFFBQVMsWUFBYSxTQUFTLEVBQ3hELHVCQUF3QixDQUFDLFFBQVMsWUFBYSxTQUFTLEVBQ3hELG9CQUFxQixDQUFDLFFBQVMsWUFBYSxNQUFNLEVBQ2xELHNCQUF1QixDQUFDLFFBQVMsWUFBYSxRQUFRLEVBQ3RELDJCQUE0QixDQUFDLGdCQUFpQixXQUFXLEVBQ3pELG1CQUFvQixDQUFDLHlCQUEwQixXQUFXLEVBQzFELDRCQUE2QixDQUFDLHlCQUEwQixZQUFhLFdBQVcsRUFDaEYscUJBQXNCLENBQUMsVUFBVyxXQUFXLEVBQzdDLHNCQUF1QixDQUFDLFdBQVksV0FBVyxFQUMvQyxrQkFBbUIsQ0FBQyxPQUFRLFdBQVcsRUFDdkMsbUJBQW9CLENBQUMsUUFBUyxXQUFXLEVBQ3pDLHVCQUF3QixDQUFDLFlBQWEsV0FBVyxFQUNqRCwwQkFBMkIsQ0FBQyxlQUFnQixXQUFXLEVBQ3ZELDBCQUEyQixDQUFDLGVBQWdCLFdBQVcsRUFDdkQsc0JBQXVCLENBQUMsV0FBWSxXQUFXLEVBQy9DLGNBQWUsQ0FBQyxvQkFBcUIsV0FBVyxFQUNoRCx1QkFBd0IsQ0FBQyxvQkFBcUIsWUFBYSxXQUFXLEVBQ3RFLHVCQUF3QixDQUFDLFlBQWEsV0FBVyxFQUNqRCx3QkFBeUIsQ0FBQyxhQUFjLFdBQVcsRUFDbkQsd0JBQXlCLENBQUMsYUFBYyxXQUFXLEVBQ25ELGNBQWUsQ0FBQyxPQUFRLE9BQU8sRUFDL0Isa0JBQW1CLENBQUMsT0FBUSxXQUFXLEVBQ3ZDLGlCQUFrQixDQUFDLE1BQU8sV0FBVyxFQUNyQyxvQkFBcUIsQ0FBQyxTQUFVLFdBQVcsRUFDM0Msb0JBQXFCLENBQUMsU0FBVSxXQUFXLEVBQzNDLHNCQUF1QixDQUFDLFNBQVUsWUFBYSxVQUFVLEVBQ3pELHFCQUFzQixDQUFDLFNBQVUsWUFBYSxTQUFTLEVBQ3ZELHFCQUFzQixDQUFDLFVBQVcsV0FBVyxFQUM3QyxzQkFBdUIsQ0FBQyxVQUFXLFlBQWEsTUFBTSxFQUN0RCxnQkFBaUIsQ0FBQyxVQUFXLEtBQUssRUFDbEMsbUJBQW9CLENBQUMsVUFBVyxRQUFRLEVBQ3hDLG9CQUFxQixDQUFDLFVBQVcsU0FBUyxFQUMxQyx3QkFBeUIsQ0FBQyxhQUFjLFdBQVcsRUFDbkQsNEJBQTZCLENBQUMsaUJBQWtCLFdBQVcsRUFDM0Qsb0JBQXFCLENBQUMsU0FBVSxXQUFXLEVBQzNDLGlCQUFrQixDQUFDLE1BQU8sV0FBVyxFQUNyQywrQkFBZ0MsQ0FBQyxvQkFBcUIsV0FBVyxFQUNqRSxvQkFBcUIsQ0FBQyxTQUFVLFdBQVcsRUFDM0Msb0JBQXFCLENBQUMsU0FBVSxXQUFXLEVBQzNDLHlCQUEwQixDQUFDLGNBQWUsV0FBVyxFQUNyRCx3QkFBeUIsQ0FBQyxhQUFjLFdBQVcsRUFDbkQsdUJBQXdCLENBQUMsWUFBYSxXQUFXLEVBQ2pELHdCQUF5QixDQUFDLGFBQWMsV0FBVyxFQUNuRCwrQkFBZ0MsQ0FBQyxvQkFBcUIsV0FBVyxFQUNqRSx5QkFBMEIsQ0FBQyxjQUFlLFdBQVcsRUFDckQseUJBQTBCLENBQUMsY0FBZSxXQUFXLEVBQ3JELHNCQUF1QixDQUFDLFdBQVksV0FBVyxFQUMvQyxxQkFBc0IsQ0FBQyxVQUFXLFdBQVcsRUFDN0MscUJBQXNCLENBQUMsVUFBVyxXQUFXLENBQzlDLEVBRUksS0FBT3duQyxhQUNQOXFDLFNBQVMrcUMsT0FDVEMsVUFBVSxLQUFLLEtBQUssU0FBUyxLQUFNLE1BQU0sVUFBVSxNQUFNLEVBQ3pELGFBQWUsS0FBSyxLQUFLLFNBQVMsTUFBTyxNQUFNLFVBQVUsTUFBTSxFQUMvREMsV0FBVyxLQUFLLEtBQUssU0FBUyxLQUFNLE9BQU8sVUFBVSxPQUFPLEVBQzVELFVBQVksS0FBSyxLQUFLLFNBQVMsS0FBTSxPQUFPLFVBQVUsS0FBSyxFQUMzRCxNQUFRLEtBQUssS0FBSyxTQUFTLEtBQU0sT0FBTyxVQUFVLElBQUksRUFHdEQsV0FBYSxxR0FDYixhQUFlLFdBQ2YsYUFBZSxTQUFTQyxFQUFhejJCLEVBQVEsQ0FDaEQsSUFBSTFSLEVBQVEsVUFBVTBSLEVBQVEsRUFBRyxDQUFDLEVBQzlCeEssRUFBTyxVQUFVd0ssRUFBUSxFQUFFLEVBQy9CLEdBQUkxUixJQUFVLEtBQU9rSCxJQUFTLElBQzdCLE1BQU0sSUFBSWlnQyxlQUFhLGdEQUFnRCxFQUNqRSxHQUFJamdDLElBQVMsS0FBT2xILElBQVUsSUFDcEMsTUFBTSxJQUFJbW5DLGVBQWEsZ0RBQWdELEVBRXhFLElBQUlwZ0MsRUFBUyxDQUFBLEVBQ2JtaEMsa0JBQVN4MkIsRUFBUSxXQUFZLFNBQVVsTixFQUFPK21CLEVBQVE2YyxFQUFPQyxFQUFXLENBQ3ZFdGhDLEVBQU9BLEVBQU8sTUFBTSxFQUFJcWhDLEVBQVFGLFdBQVNHLEVBQVcsYUFBYyxJQUFJLEVBQUk5YyxHQUFVL21CLENBQ3RGLENBQUUsRUFDTXVDLENBQ1IsRUFHSSxpQkFBbUIsU0FBU3VoQyxFQUFpQnRwQyxFQUFNdXBDLEVBQWMsQ0FDcEUsSUFBSUMsRUFBZ0J4cEMsRUFDaEJ5cEMsRUFNSixHQUxJeHJDLFNBQU8sZUFBZ0J1ckMsQ0FBYSxJQUN2Q0MsRUFBUSxlQUFlRCxDQUFhLEVBQ3BDQSxFQUFnQixJQUFNQyxFQUFNLENBQUMsRUFBSSxLQUc5QnhyQyxTQUFPLFdBQVl1ckMsQ0FBYSxFQUFHLENBQ3RDLElBQUlqb0MsRUFBUSxXQUFXaW9DLENBQWEsRUFJcEMsR0FISWpvQyxJQUFVLFlBQ2JBLEVBQVEsT0FBT2lvQyxDQUFhLEdBRXpCLE9BQU9qb0MsRUFBVSxLQUFlLENBQUNnb0MsRUFDcEMsTUFBTSxJQUFJbEIsYUFBVyxhQUFlcm9DLEVBQU8sc0RBQXNELEVBR2xHLE1BQU8sQ0FDTixNQUFPeXBDLEVBQ1AsS0FBTUQsRUFDTixNQUFPam9DLENBQ1YsQ0FDRSxDQUVELE1BQU0sSUFBSTRtQyxlQUFhLGFBQWVub0MsRUFBTyxrQkFBa0IsQ0FDaEUsRUFFQSxhQUFpQixTQUFTMHBDLEVBQWExcEMsRUFBTXVwQyxFQUFjLENBQzFELEdBQUksT0FBT3ZwQyxHQUFTLFVBQVlBLEVBQUssU0FBVyxFQUMvQyxNQUFNLElBQUlxb0MsYUFBVywyQ0FBMkMsRUFFakUsR0FBSSxVQUFVLE9BQVMsR0FBSyxPQUFPa0IsR0FBaUIsVUFDbkQsTUFBTSxJQUFJbEIsYUFBVywyQ0FBMkMsRUFHakUsR0FBSSxNQUFNLGNBQWVyb0MsQ0FBSSxJQUFNLEtBQ2xDLE1BQU0sSUFBSW1vQyxlQUFhLG9GQUFvRixFQUU1RyxJQUFJOXBCLEVBQVEsYUFBYXJlLENBQUksRUFDekIycEMsRUFBb0J0ckIsRUFBTSxPQUFTLEVBQUlBLEVBQU0sQ0FBQyxFQUFJLEdBRWxEdXJCLEVBQVksaUJBQWlCLElBQU1ELEVBQW9CLElBQUtKLENBQVksRUFDeEVNLEVBQW9CRCxFQUFVLEtBQzlCcm9DLEVBQVFxb0MsRUFBVSxNQUNsQkUsRUFBcUIsR0FFckJMLEVBQVFHLEVBQVUsTUFDbEJILElBQ0hFLEVBQW9CRixFQUFNLENBQUMsRUFDM0IsYUFBYXByQixFQUFPNHFCLFVBQVEsQ0FBQyxFQUFHLENBQUMsRUFBR1EsQ0FBSyxDQUFDLEdBRzNDLFFBQVMzcUMsRUFBSSxFQUFHaXJDLEVBQVEsR0FBTWpyQyxFQUFJdWYsRUFBTSxPQUFRdmYsR0FBSyxFQUFHLENBQ3ZELElBQUlrckMsRUFBTzNyQixFQUFNdmYsQ0FBQyxFQUNka0MsRUFBUSxVQUFVZ3BDLEVBQU0sRUFBRyxDQUFDLEVBQzVCOWhDLEVBQU8sVUFBVThoQyxFQUFNLEVBQUUsRUFDN0IsSUFFR2hwQyxJQUFVLEtBQU9BLElBQVUsS0FBT0EsSUFBVSxLQUN6Q2tILElBQVMsS0FBT0EsSUFBUyxLQUFPQSxJQUFTLE1BRTNDbEgsSUFBVWtILEVBRWIsTUFBTSxJQUFJaWdDLGVBQWEsc0RBQXNELEVBUzlFLElBUEk2QixJQUFTLGVBQWlCLENBQUNELEtBQzlCRCxFQUFxQixJQUd0QkgsR0FBcUIsSUFBTUssRUFDM0JILEVBQW9CLElBQU1GLEVBQW9CLElBRTFDMXJDLFNBQU8sV0FBWTRyQyxDQUFpQixFQUN2Q3RvQyxFQUFRLFdBQVdzb0MsQ0FBaUIsVUFDMUJ0b0MsR0FBUyxLQUFNLENBQ3pCLEdBQUksRUFBRXlvQyxLQUFRem9DLEdBQVEsQ0FDckIsR0FBSSxDQUFDZ29DLEVBQ0osTUFBTSxJQUFJbEIsYUFBVyxzQkFBd0Jyb0MsRUFBTyw2Q0FBNkMsRUFFbEcsTUFDQSxDQUNELEdBQUl5b0MsU0FBVTNwQyxFQUFJLEdBQU11ZixFQUFNLE9BQVEsQ0FDckMsSUFBSWtXLEVBQU9rVSxRQUFNbG5DLEVBQU95b0MsQ0FBSSxFQUM1QkQsRUFBUSxDQUFDLENBQUN4VixFQVNOd1YsR0FBUyxRQUFTeFYsR0FBUSxFQUFFLGtCQUFtQkEsRUFBSyxLQUN2RGh6QixFQUFRZ3pCLEVBQUssSUFFYmh6QixFQUFRQSxFQUFNeW9DLENBQUksQ0FFdkIsTUFDSUQsRUFBUTlyQyxTQUFPc0QsRUFBT3lvQyxDQUFJLEVBQzFCem9DLEVBQVFBLEVBQU15b0MsQ0FBSSxFQUdmRCxHQUFTLENBQUNELElBQ2IsV0FBV0QsQ0FBaUIsRUFBSXRvQyxFQUVqQyxDQUNELENBQ0QsT0FBT0EsQ0FDUiwrTENwV0EsSUFBSW1vQyxFQUFldlosYUFHZjhaLEVBQWtCUCxFQUFhLDBCQUEyQixFQUFJLEdBQUssR0FDdkUsR0FBSU8sRUFDSCxHQUFJLENBQ0hBLEVBQWdCLENBQUUsRUFBRSxJQUFLLENBQUUsTUFBTyxDQUFHLENBQUEsQ0FDckMsTUFBVyxDQUVYQSxFQUFrQixFQUNsQixDQUdGLHdCQUFpQkEsbUJDYmpCLElBQUlQLGVBQWV2WixhQUVmLE1BQVF1WixlQUFhLG9DQUFxQyxFQUFJLEVBRWxFLEdBQUksTUFDSCxHQUFJLENBQ0gsTUFBTSxDQUFBLEVBQUksUUFBUSxDQUNsQixNQUFXLENBRVgsTUFBUSxJQUNSLENBR0YsSUFBQVEsT0FBaUIsTUNiYkQsa0JBQWtCOVosd0JBQUEsRUFFbEIsYUFBZUMsT0FDZmlZLGFBQWE1VCxLQUViLEtBQU95QyxPQUdYLG1CQUFpQixTQUFTaVQsRUFDekI3ckMsRUFDQThyQyxFQUNBN29DLEVBQ0MsQ0FDRCxHQUFJLENBQUNqRCxHQUFRLE9BQU9BLEdBQVEsVUFBWSxPQUFPQSxHQUFRLFdBQ3RELE1BQU0sSUFBSStwQyxhQUFXLHdDQUF3QyxFQUU5RCxHQUFJLE9BQU8rQixHQUFhLFVBQVksT0FBT0EsR0FBYSxTQUN2RCxNQUFNLElBQUkvQixhQUFXLDBDQUEwQyxFQUVoRSxHQUFJLFVBQVUsT0FBUyxHQUFLLE9BQU8sVUFBVSxDQUFDLEdBQU0sV0FBYSxVQUFVLENBQUMsSUFBTSxLQUNqRixNQUFNLElBQUlBLGFBQVcseURBQXlELEVBRS9FLEdBQUksVUFBVSxPQUFTLEdBQUssT0FBTyxVQUFVLENBQUMsR0FBTSxXQUFhLFVBQVUsQ0FBQyxJQUFNLEtBQ2pGLE1BQU0sSUFBSUEsYUFBVyx1REFBdUQsRUFFN0UsR0FBSSxVQUFVLE9BQVMsR0FBSyxPQUFPLFVBQVUsQ0FBQyxHQUFNLFdBQWEsVUFBVSxDQUFDLElBQU0sS0FDakYsTUFBTSxJQUFJQSxhQUFXLDJEQUEyRCxFQUVqRixHQUFJLFVBQVUsT0FBUyxHQUFLLE9BQU8sVUFBVSxDQUFDLEdBQU0sVUFDbkQsTUFBTSxJQUFJQSxhQUFXLHlDQUF5QyxFQUcvRCxJQUFJZ0MsRUFBZ0IsVUFBVSxPQUFTLEVBQUksVUFBVSxDQUFDLEVBQUksS0FDdERDLEVBQWMsVUFBVSxPQUFTLEVBQUksVUFBVSxDQUFDLEVBQUksS0FDcERDLEVBQWtCLFVBQVUsT0FBUyxFQUFJLFVBQVUsQ0FBQyxFQUFJLEtBQ3hEQyxFQUFRLFVBQVUsT0FBUyxFQUFJLFVBQVUsQ0FBQyxFQUFJLEdBRzlDalcsRUFBTyxDQUFDLENBQUMsTUFBUSxLQUFLajJCLEVBQUs4ckMsQ0FBUSxFQUV2QyxHQUFJSCxrQkFDSEEsa0JBQWdCM3JDLEVBQUs4ckMsRUFBVSxDQUM5QixhQUFjRyxJQUFvQixNQUFRaFcsRUFBT0EsRUFBSyxhQUFlLENBQUNnVyxFQUN0RSxXQUFZRixJQUFrQixNQUFROVYsRUFBT0EsRUFBSyxXQUFhLENBQUM4VixFQUNoRSxNQUFPOW9DLEVBQ1AsU0FBVStvQyxJQUFnQixNQUFRL1YsRUFBT0EsRUFBSyxTQUFXLENBQUMrVixDQUM3RCxDQUFHLFVBQ1NFLEdBQVUsQ0FBQ0gsR0FBaUIsQ0FBQ0MsR0FBZSxDQUFDQyxFQUV2RGpzQyxFQUFJOHJDLENBQVEsRUFBSTdvQyxNQUVoQixPQUFNLElBQUksYUFBYSw2R0FBNkcsQ0FFdEksRUNyREksZ0JBQWtCNHVCLHdCQUFBLEVBRWxCLHVCQUF5QixTQUFTc2EsR0FBeUIsQ0FDOUQsTUFBTyxDQUFDLENBQUMsZUFDVixFQUVBLHVCQUF1Qix3QkFBMEIsU0FBU0MsR0FBMEIsQ0FFbkYsR0FBSSxDQUFDLGdCQUNKLE9BQU8sS0FFUixHQUFJLENBQ0gsT0FBTyxnQkFBZ0IsQ0FBRSxFQUFFLFNBQVUsQ0FBRSxNQUFPLENBQUcsQ0FBQSxFQUFFLFNBQVcsQ0FDOUQsTUFBVyxDQUVYLE1BQU8sRUFDUCxDQUNGLEVBRUEsSUFBQSx5QkFBaUIsdUJDbkJiaEIsZUFBZXZaLGFBQ2YsT0FBU0MsbUJBQ1QsZUFBaUJxRSx5QkFBbUMsRUFDcEQsS0FBT3lDLE9BRVBtUixhQUFhRCxLQUNidUMsU0FBU2pCLGVBQWEsY0FBYyxFQUd4QyxrQkFBaUIsU0FBU2tCLEVBQWtCeGtDLEVBQUk5RixFQUFRLENBQ3ZELEdBQUksT0FBTzhGLEdBQU8sV0FDakIsTUFBTSxJQUFJaWlDLGFBQVcsd0JBQXdCLEVBRTlDLEdBQUksT0FBTy9uQyxHQUFXLFVBQVlBLEVBQVMsR0FBS0EsRUFBUyxZQUFjcXFDLFNBQU9ycUMsQ0FBTSxJQUFNQSxFQUN6RixNQUFNLElBQUkrbkMsYUFBVyw0Q0FBNEMsRUFHbEUsSUFBSW1DLEVBQVEsVUFBVSxPQUFTLEdBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUU3Q0ssRUFBK0IsR0FDL0JDLEVBQTJCLEdBQy9CLEdBQUksV0FBWTFrQyxHQUFNLEtBQU0sQ0FDM0IsSUFBSW11QixFQUFPLEtBQUtudUIsRUFBSSxRQUFRLEVBQ3hCbXVCLEdBQVEsQ0FBQ0EsRUFBSyxlQUNqQnNXLEVBQStCLElBRTVCdFcsR0FBUSxDQUFDQSxFQUFLLFdBQ2pCdVcsRUFBMkIsR0FFNUIsQ0FFRCxPQUFJRCxHQUFnQ0MsR0FBNEIsQ0FBQ04sS0FDNUQsZUFDSCxPQUE2Q3BrQyxFQUFLLFNBQVU5RixFQUFRLEdBQU0sRUFBSSxFQUU5RSxPQUE2QzhGLEVBQUssU0FBVTlGLENBQU0sR0FHN0Q4RixDQUNSLGVDdkNBLElBQUlveEIsRUFBT3JILGFBQ1B1WixFQUFldFosYUFDZndhLEVBQW9Cblcsa0JBRXBCNFQsRUFBYW5SLEtBQ2I2VCxFQUFTckIsRUFBYSw0QkFBNEIsRUFDbERzQixFQUFRdEIsRUFBYSwyQkFBMkIsRUFDaER1QixFQUFnQnZCLEVBQWEsa0JBQW1CLEVBQUksR0FBS2xTLEVBQUssS0FBS3dULEVBQU9ELENBQU0sRUFFaEZkLEVBQWtCN0IsMEJBQ2xCOEMsRUFBT3hCLEVBQWEsWUFBWSxFQUVwQ3ZzQyxFQUFBLFFBQWlCLFNBQWtCZ3VDLEVBQWtCLENBQ3BELEdBQUksT0FBT0EsR0FBcUIsV0FDL0IsTUFBTSxJQUFJOUMsRUFBVyx3QkFBd0IsRUFFOUMsSUFBSXo0QixFQUFPcTdCLEVBQWN6VCxFQUFNd1QsRUFBTyxTQUFTLEVBQy9DLE9BQU9KLEVBQ05oN0IsRUFDQSxFQUFJczdCLEVBQUssRUFBR0MsRUFBaUIsUUFBVSxVQUFVLE9BQVMsRUFBRSxFQUM1RCxFQUNGLENBQ0EsRUFFQSxJQUFJQyxFQUFZLFVBQXFCLENBQ3BDLE9BQU9ILEVBQWN6VCxFQUFNdVQsRUFBUSxTQUFTLENBQzdDLEVBRUlkLEVBQ0hBLEVBQWdCOXNDLEVBQU8sUUFBUyxRQUFTLENBQUUsTUFBT2l1QyxDQUFTLENBQUUsRUFFN0RqdUMsRUFBQSxRQUFBLE1BQXVCaXVDLHVEQy9CcEIxQixlQUFldlosYUFFZixTQUFXQyxnQkFFWCxTQUFXLFNBQVNzWixlQUFhLDBCQUEwQixDQUFDLEVBRWhFMkIsWUFBaUIsU0FBU0MsRUFBbUJ0ckMsRUFBTXVwQyxFQUFjLENBQ2hFLElBQUlLLEVBQVlGLGVBQWExcEMsRUFBTSxDQUFDLENBQUN1cEMsQ0FBWSxFQUNqRCxPQUFJLE9BQU9LLEdBQWMsWUFBYyxTQUFTNXBDLEVBQU0sYUFBYSxFQUFJLEdBQy9ELFNBQVM0cEMsQ0FBUyxFQUVuQkEsQ0FDUixFQ2RBLE1BQWUsc0JBQUEsQ0FBQSw2TUNBZixJQUFJLE9BQVMsT0FBTyxLQUFRLFlBQWMsSUFBSSxVQUMxQyxrQkFBb0IsT0FBTywwQkFBNEIsT0FBUyxPQUFPLHlCQUF5QixJQUFJLFVBQVcsTUFBTSxFQUFJLEtBQ3pILFFBQVUsUUFBVSxtQkFBcUIsT0FBTyxrQkFBa0IsS0FBUSxXQUFhLGtCQUFrQixJQUFNLEtBQy9HLFdBQWEsUUFBVSxJQUFJLFVBQVUsUUFDckMsT0FBUyxPQUFPLEtBQVEsWUFBYyxJQUFJLFVBQzFDLGtCQUFvQixPQUFPLDBCQUE0QixPQUFTLE9BQU8seUJBQXlCLElBQUksVUFBVyxNQUFNLEVBQUksS0FDekgsUUFBVSxRQUFVLG1CQUFxQixPQUFPLGtCQUFrQixLQUFRLFdBQWEsa0JBQWtCLElBQU0sS0FDL0csV0FBYSxRQUFVLElBQUksVUFBVSxRQUNyQyxXQUFhLE9BQU8sU0FBWSxZQUFjLFFBQVEsVUFDdEQsV0FBYSxXQUFhLFFBQVEsVUFBVSxJQUFNLEtBQ2xELFdBQWEsT0FBTyxTQUFZLFlBQWMsUUFBUSxVQUN0RCxXQUFhLFdBQWEsUUFBUSxVQUFVLElBQU0sS0FDbEQsV0FBYSxPQUFPLFNBQVksWUFBYyxRQUFRLFVBQ3RELGFBQWUsV0FBYSxRQUFRLFVBQVUsTUFBUSxLQUN0RCxlQUFpQixRQUFRLFVBQVUsUUFDbkMsZUFBaUIsT0FBTyxVQUFVLFNBQ2xDLGlCQUFtQixTQUFTLFVBQVUsU0FDdEMsT0FBUyxPQUFPLFVBQVUsTUFDMUIsT0FBUyxPQUFPLFVBQVUsTUFDMUIsU0FBVyxPQUFPLFVBQVUsUUFDNUIsYUFBZSxPQUFPLFVBQVUsWUFDaEMsYUFBZSxPQUFPLFVBQVUsWUFDaEMsTUFBUSxPQUFPLFVBQVUsS0FDekIsUUFBVSxNQUFNLFVBQVUsT0FDMUIsTUFBUSxNQUFNLFVBQVUsS0FDeEIsVUFBWSxNQUFNLFVBQVUsTUFDNUIsT0FBUyxLQUFLLE1BQ2QsY0FBZ0IsT0FBTyxRQUFXLFdBQWEsT0FBTyxVQUFVLFFBQVUsS0FDMUUsS0FBTyxPQUFPLHNCQUNkLFlBQWMsT0FBTyxRQUFXLFlBQWMsT0FBTyxPQUFPLFVBQWEsU0FBVyxPQUFPLFVBQVUsU0FBVyxLQUNoSCxrQkFBb0IsT0FBTyxRQUFXLFlBQWMsT0FBTyxPQUFPLFVBQWEsU0FFL0UsWUFBYyxPQUFPLFFBQVcsWUFBYyxPQUFPLGNBQWdCLE9BQU8sT0FBTyxjQUFnQixtQkFBK0IsVUFDaEksT0FBTyxZQUNQLEtBQ0YsYUFBZSxPQUFPLFVBQVUscUJBRWhDLEtBQU8sT0FBTyxTQUFZLFdBQWEsUUFBUSxlQUFpQixPQUFPLGtCQUN2RSxHQUFHLFlBQWMsTUFBTSxVQUNqQixTQUFVMkIsRUFBRyxDQUNYLE9BQU9BLEVBQUUsU0FDWixFQUNDLE1BR1YsU0FBUyxvQkFBb0Joc0MsRUFBS200QixFQUFLLENBQ25DLEdBQ0luNEIsSUFBUSxLQUNMQSxJQUFRLE1BQ1JBLElBQVFBLEdBQ1BBLEdBQU9BLEVBQU0sTUFBU0EsRUFBTSxLQUM3QixNQUFNLEtBQUssSUFBS200QixDQUFHLEVBRXRCLE9BQU9BLEVBRVgsSUFBSThULEVBQVcsbUNBQ2YsR0FBSSxPQUFPanNDLEdBQVEsU0FBVSxDQUN6QixJQUFJa3NDLEVBQU1sc0MsRUFBTSxFQUFJLENBQUMsT0FBTyxDQUFDQSxDQUFHLEVBQUksT0FBT0EsQ0FBRyxFQUM5QyxHQUFJa3NDLElBQVFsc0MsRUFBSyxDQUNiLElBQUltc0MsRUFBUyxPQUFPRCxDQUFHLEVBQ25CRSxFQUFNLE9BQU8sS0FBS2pVLEVBQUtnVSxFQUFPLE9BQVMsQ0FBQyxFQUM1QyxPQUFPLFNBQVMsS0FBS0EsRUFBUUYsRUFBVSxLQUFLLEVBQUksSUFBTSxTQUFTLEtBQUssU0FBUyxLQUFLRyxFQUFLLGNBQWUsS0FBSyxFQUFHLEtBQU0sRUFBRSxDQUN6SCxDQUNKLENBQ0QsT0FBTyxTQUFTLEtBQUtqVSxFQUFLOFQsRUFBVSxLQUFLLENBQzdDLENBRUEsSUFBSSxZQUFjLFdBQ2QsY0FBZ0IsWUFBWSxPQUM1QixjQUFnQixTQUFTLGFBQWEsRUFBSSxjQUFnQixLQUU5RCxjQUFpQixTQUFTSSxFQUFTdHRDLEVBQUt5QixFQUFTMFEsRUFBT283QixFQUFNLENBQzFELElBQUlwc0IsRUFBTzFmLEdBQVcsR0FFdEIsR0FBSStyQyxNQUFJcnNCLEVBQU0sWUFBWSxHQUFNQSxFQUFLLGFBQWUsVUFBWUEsRUFBSyxhQUFlLFNBQ2hGLE1BQU0sSUFBSSxVQUFVLGtEQUFrRCxFQUUxRSxHQUNJcXNCLE1BQUlyc0IsRUFBTSxpQkFBaUIsSUFBTSxPQUFPQSxFQUFLLGlCQUFvQixTQUMzREEsRUFBSyxnQkFBa0IsR0FBS0EsRUFBSyxrQkFBb0IsSUFDckRBLEVBQUssa0JBQW9CLE1BRy9CLE1BQU0sSUFBSSxVQUFVLHdGQUF3RixFQUVoSCxJQUFJc3NCLEVBQWdCRCxNQUFJcnNCLEVBQU0sZUFBZSxFQUFJQSxFQUFLLGNBQWdCLEdBQ3RFLEdBQUksT0FBT3NzQixHQUFrQixXQUFhQSxJQUFrQixTQUN4RCxNQUFNLElBQUksVUFBVSwrRUFBK0UsRUFHdkcsR0FDSUQsTUFBSXJzQixFQUFNLFFBQVEsR0FDZkEsRUFBSyxTQUFXLE1BQ2hCQSxFQUFLLFNBQVcsS0FDaEIsRUFBRSxTQUFTQSxFQUFLLE9BQVEsRUFBRSxJQUFNQSxFQUFLLFFBQVVBLEVBQUssT0FBUyxHQUVoRSxNQUFNLElBQUksVUFBVSwwREFBMEQsRUFFbEYsR0FBSXFzQixNQUFJcnNCLEVBQU0sa0JBQWtCLEdBQUssT0FBT0EsRUFBSyxrQkFBcUIsVUFDbEUsTUFBTSxJQUFJLFVBQVUsbUVBQW1FLEVBRTNGLElBQUl1c0IsRUFBbUJ2c0IsRUFBSyxpQkFFNUIsR0FBSSxPQUFPbmhCLEVBQVEsSUFDZixNQUFPLFlBRVgsR0FBSUEsSUFBUSxLQUNSLE1BQU8sT0FFWCxHQUFJLE9BQU9BLEdBQVEsVUFDZixPQUFPQSxFQUFNLE9BQVMsUUFHMUIsR0FBSSxPQUFPQSxHQUFRLFNBQ2YsT0FBTyxjQUFjQSxFQUFLbWhCLENBQUksRUFFbEMsR0FBSSxPQUFPbmhCLEdBQVEsU0FBVSxDQUN6QixHQUFJQSxJQUFRLEVBQ1IsTUFBTyxLQUFXQSxFQUFNLEVBQUksSUFBTSxLQUV0QyxJQUFJbzVCLEVBQU0sT0FBT3A1QixDQUFHLEVBQ3BCLE9BQU8wdEMsRUFBbUIsb0JBQW9CMXRDLEVBQUtvNUIsQ0FBRyxFQUFJQSxDQUM3RCxDQUNELEdBQUksT0FBT3A1QixHQUFRLFNBQVUsQ0FDekIsSUFBSTJ0QyxFQUFZLE9BQU8zdEMsQ0FBRyxFQUFJLElBQzlCLE9BQU8wdEMsRUFBbUIsb0JBQW9CMXRDLEVBQUsydEMsQ0FBUyxFQUFJQSxDQUNuRSxDQUVELElBQUl6N0IsRUFBVyxPQUFPaVAsRUFBSyxNQUFVLElBQWMsRUFBSUEsRUFBSyxNQUU1RCxHQURJLE9BQU9oUCxFQUFVLE1BQWVBLEVBQVEsR0FDeENBLEdBQVNELEdBQVlBLEVBQVcsR0FBSyxPQUFPbFMsR0FBUSxTQUNwRCxPQUFPcTVCLFVBQVFyNUIsQ0FBRyxFQUFJLFVBQVksV0FHdEMsSUFBSTR0QyxFQUFTLFVBQVV6c0IsRUFBTWhQLENBQUssRUFFbEMsR0FBSSxPQUFPbzdCLEVBQVMsSUFDaEJBLEVBQU8sQ0FBQSxVQUNBLFFBQVFBLEVBQU12dEMsQ0FBRyxHQUFLLEVBQzdCLE1BQU8sYUFHWCxTQUFTaW5CLEVBQVFoa0IsRUFBT216QixHQUFNeVgsR0FBVSxDQUtwQyxHQUpJelgsS0FDQW1YLEVBQU8sVUFBVSxLQUFLQSxDQUFJLEVBQzFCQSxFQUFLLEtBQUtuWCxFQUFJLEdBRWR5WCxHQUFVLENBQ1YsSUFBSUMsR0FBVSxDQUNWLE1BQU8zc0IsRUFBSyxLQUM1QixFQUNZLE9BQUlxc0IsTUFBSXJzQixFQUFNLFlBQVksSUFDdEIyc0IsR0FBUSxXQUFhM3NCLEVBQUssWUFFdkJtc0IsRUFBU3JxQyxFQUFPNnFDLEdBQVMzN0IsRUFBUSxFQUFHbzdCLENBQUksQ0FDbEQsQ0FDRCxPQUFPRCxFQUFTcnFDLEVBQU9rZSxFQUFNaFAsRUFBUSxFQUFHbzdCLENBQUksQ0FDL0MsQ0FFRCxHQUFJLE9BQU92dEMsR0FBUSxZQUFjLENBQUNpN0IsV0FBU2o3QixDQUFHLEVBQUcsQ0FDN0MsSUFBSTBCLEVBQU8sT0FBTzFCLENBQUcsRUFDakIwSCxFQUFPLFdBQVcxSCxFQUFLaW5CLENBQU8sRUFDbEMsTUFBTyxhQUFldmxCLEVBQU8sS0FBT0EsRUFBTyxnQkFBa0IsS0FBT2dHLEVBQUssT0FBUyxFQUFJLE1BQVEsTUFBTSxLQUFLQSxFQUFNLElBQUksRUFBSSxLQUFPLEdBQ2pJLENBQ0QsR0FBSSxTQUFTMUgsQ0FBRyxFQUFHLENBQ2YsSUFBSSt0QyxFQUFZLGtCQUFvQixTQUFTLEtBQUssT0FBTy90QyxDQUFHLEVBQUcseUJBQTBCLElBQUksRUFBSSxZQUFZLEtBQUtBLENBQUcsRUFDckgsT0FBTyxPQUFPQSxHQUFRLFVBQVksQ0FBQyxrQkFBb0IsVUFBVSt0QyxDQUFTLEVBQUlBLENBQ2pGLENBQ0QsR0FBSUMsWUFBVWh1QyxDQUFHLEVBQUcsQ0FHaEIsUUFGSTBsQixFQUFJLElBQU0sYUFBYSxLQUFLLE9BQU8xbEIsRUFBSSxRQUFRLENBQUMsRUFDaERnVixFQUFRaFYsRUFBSSxZQUFjLEdBQ3JCUSxFQUFJLEVBQUdBLEVBQUl3VSxFQUFNLE9BQVF4VSxJQUM5QmtsQixHQUFLLElBQU0xUSxFQUFNeFUsQ0FBQyxFQUFFLEtBQU8sSUFBTSxXQUFXLE1BQU13VSxFQUFNeFUsQ0FBQyxFQUFFLEtBQUssRUFBRyxTQUFVMmdCLENBQUksRUFFckYsT0FBQXVFLEdBQUssSUFDRDFsQixFQUFJLFlBQWNBLEVBQUksV0FBVyxTQUFVMGxCLEdBQUssT0FDcERBLEdBQUssS0FBTyxhQUFhLEtBQUssT0FBTzFsQixFQUFJLFFBQVEsQ0FBQyxFQUFJLElBQy9DMGxCLENBQ1YsQ0FDRCxHQUFJMlQsVUFBUXI1QixDQUFHLEVBQUcsQ0FDZCxHQUFJQSxFQUFJLFNBQVcsRUFBSyxNQUFPLEtBQy9CLElBQUlpdUMsRUFBSyxXQUFXanVDLEVBQUtpbkIsQ0FBTyxFQUNoQyxPQUFJMm1CLEdBQVUsQ0FBQyxpQkFBaUJLLENBQUUsRUFDdkIsSUFBTSxhQUFhQSxFQUFJTCxDQUFNLEVBQUksSUFFckMsS0FBTyxNQUFNLEtBQUtLLEVBQUksSUFBSSxFQUFJLElBQ3hDLENBQ0QsR0FBSSxRQUFRanVDLENBQUcsRUFBRyxDQUNkLElBQUkrZixFQUFRLFdBQVcvZixFQUFLaW5CLENBQU8sRUFDbkMsTUFBSSxFQUFFLFVBQVcsTUFBTSxZQUFjLFVBQVdqbkIsR0FBTyxDQUFDLGFBQWEsS0FBS0EsRUFBSyxPQUFPLEVBQzNFLE1BQVEsT0FBT0EsQ0FBRyxFQUFJLEtBQU8sTUFBTSxLQUFLLFFBQVEsS0FBSyxZQUFjaW5CLEVBQVFqbkIsRUFBSSxLQUFLLEVBQUcrZixDQUFLLEVBQUcsSUFBSSxFQUFJLEtBRTlHQSxFQUFNLFNBQVcsRUFBWSxJQUFNLE9BQU8vZixDQUFHLEVBQUksSUFDOUMsTUFBUSxPQUFPQSxDQUFHLEVBQUksS0FBTyxNQUFNLEtBQUsrZixFQUFPLElBQUksRUFBSSxJQUNqRSxDQUNELEdBQUksT0FBTy9mLEdBQVEsVUFBWXl0QyxFQUFlLENBQzFDLEdBQUksZUFBaUIsT0FBT3p0QyxFQUFJLGFBQWEsR0FBTSxZQUFjLFlBQzdELE9BQU8sWUFBWUEsRUFBSyxDQUFFLE1BQU9rUyxFQUFXQyxDQUFLLENBQUUsRUFDaEQsR0FBSXM3QixJQUFrQixVQUFZLE9BQU96dEMsRUFBSSxTQUFZLFdBQzVELE9BQU9BLEVBQUksU0FFbEIsQ0FDRCxHQUFJLE1BQU1BLENBQUcsRUFBRyxDQUNaLElBQUlrdUMsR0FBVyxDQUFBLEVBQ2YsT0FBSSxZQUNBLFdBQVcsS0FBS2x1QyxFQUFLLFNBQVVpRCxFQUFPMkUsR0FBSyxDQUN2Q3NtQyxHQUFTLEtBQUtqbkIsRUFBUXJmLEdBQUs1SCxFQUFLLEVBQUksRUFBSSxPQUFTaW5CLEVBQVFoa0IsRUFBT2pELENBQUcsQ0FBQyxDQUNwRixDQUFhLEVBRUUsYUFBYSxNQUFPLFFBQVEsS0FBS0EsQ0FBRyxFQUFHa3VDLEdBQVVOLENBQU0sQ0FDakUsQ0FDRCxHQUFJLE1BQU01dEMsQ0FBRyxFQUFHLENBQ1osSUFBSW11QyxFQUFXLENBQUEsRUFDZixPQUFJLFlBQ0EsV0FBVyxLQUFLbnVDLEVBQUssU0FBVWlELEVBQU8sQ0FDbENrckMsRUFBUyxLQUFLbG5CLEVBQVFoa0IsRUFBT2pELENBQUcsQ0FBQyxDQUNqRCxDQUFhLEVBRUUsYUFBYSxNQUFPLFFBQVEsS0FBS0EsQ0FBRyxFQUFHbXVDLEVBQVVQLENBQU0sQ0FDakUsQ0FDRCxHQUFJLFVBQVU1dEMsQ0FBRyxFQUNiLE9BQU8saUJBQWlCLFNBQVMsRUFFckMsR0FBSSxVQUFVQSxDQUFHLEVBQ2IsT0FBTyxpQkFBaUIsU0FBUyxFQUVyQyxHQUFJLFVBQVVBLENBQUcsRUFDYixPQUFPLGlCQUFpQixTQUFTLEVBRXJDLEdBQUksU0FBU0EsQ0FBRyxFQUNaLE9BQU8sVUFBVWluQixFQUFRLE9BQU9qbkIsQ0FBRyxDQUFDLENBQUMsRUFFekMsR0FBSSxTQUFTQSxDQUFHLEVBQ1osT0FBTyxVQUFVaW5CLEVBQVEsY0FBYyxLQUFLam5CLENBQUcsQ0FBQyxDQUFDLEVBRXJELEdBQUksVUFBVUEsQ0FBRyxFQUNiLE9BQU8sVUFBVSxlQUFlLEtBQUtBLENBQUcsQ0FBQyxFQUU3QyxHQUFJLFNBQVNBLENBQUcsRUFDWixPQUFPLFVBQVVpbkIsRUFBUSxPQUFPam5CLENBQUcsQ0FBQyxDQUFDLEVBSXpDLEdBQUksT0FBTyxPQUFXLEtBQWVBLElBQVEsT0FDekMsTUFBTyxzQkFFWCxHQUNLLE9BQU8sV0FBZSxLQUFlQSxJQUFRLFlBQzFDLE9BQU9yQixlQUFXLEtBQWVxQixJQUFRckIsZUFFN0MsTUFBTywwQkFFWCxHQUFJLENBQUMsT0FBT3FCLENBQUcsR0FBSyxDQUFDaTdCLFdBQVNqN0IsQ0FBRyxFQUFHLENBQ2hDLElBQUlvdUMsRUFBSyxXQUFXcHVDLEVBQUtpbkIsQ0FBTyxFQUM1Qm9uQixFQUFnQixJQUFNLElBQUlydUMsQ0FBRyxJQUFNLE9BQU8sVUFBWUEsYUFBZSxRQUFVQSxFQUFJLGNBQWdCLE9BQ25Hc3VDLEVBQVd0dUMsYUFBZSxPQUFTLEdBQUssaUJBQ3hDdXVDLEVBQVksQ0FBQ0YsR0FBaUIsYUFBZSxPQUFPcnVDLENBQUcsSUFBTUEsR0FBTyxlQUFlQSxFQUFNLE9BQU8sS0FBSyxNQUFNQSxDQUFHLEVBQUcsRUFBRyxFQUFFLEVBQUlzdUMsRUFBVyxTQUFXLEdBQ2hKRSxFQUFpQkgsR0FBaUIsT0FBT3J1QyxFQUFJLGFBQWdCLFdBQWEsR0FBS0EsRUFBSSxZQUFZLEtBQU9BLEVBQUksWUFBWSxLQUFPLElBQU0sR0FDbkkySSxFQUFNNmxDLEdBQWtCRCxHQUFhRCxFQUFXLElBQU0sTUFBTSxLQUFLLFFBQVEsS0FBSyxDQUFBLEVBQUlDLEdBQWEsQ0FBRSxFQUFFRCxHQUFZLENBQUEsQ0FBRSxFQUFHLElBQUksRUFBSSxLQUFPLElBQ3ZJLE9BQUlGLEVBQUcsU0FBVyxFQUFZemxDLEVBQU0sS0FDaENpbEMsRUFDT2psQyxFQUFNLElBQU0sYUFBYXlsQyxFQUFJUixDQUFNLEVBQUksSUFFM0NqbEMsRUFBTSxLQUFPLE1BQU0sS0FBS3lsQyxFQUFJLElBQUksRUFBSSxJQUM5QyxDQUNELE9BQU8sT0FBT3B1QyxDQUFHLENBQ3JCLEVBRUEsU0FBUyxXQUFXMGxCLEVBQUcrb0IsRUFBY3R0QixFQUFNLENBQ3ZDLElBQUl1dEIsR0FBYXZ0QixFQUFLLFlBQWNzdEIsS0FBa0IsU0FBVyxJQUFNLElBQ3ZFLE9BQU9DLEVBQVlocEIsRUFBSWdwQixDQUMzQixDQUVBLFNBQVMsTUFBTWhwQixFQUFHLENBQ2QsT0FBTyxTQUFTLEtBQUssT0FBT0EsQ0FBQyxFQUFHLEtBQU0sUUFBUSxDQUNsRCxDQUVBLFNBQVMyVCxVQUFRcjVCLEVBQUssQ0FBRSxPQUFPLE1BQU1BLENBQUcsSUFBTSxtQkFBcUIsQ0FBQyxhQUFlLEVBQUUsT0FBT0EsR0FBUSxVQUFZLGVBQWVBLEdBQVEsQ0FDdkksU0FBUyxPQUFPQSxFQUFLLENBQUUsT0FBTyxNQUFNQSxDQUFHLElBQU0sa0JBQW9CLENBQUMsYUFBZSxFQUFFLE9BQU9BLEdBQVEsVUFBWSxlQUFlQSxHQUFRLENBQ3JJLFNBQVNpN0IsV0FBU2o3QixFQUFLLENBQUUsT0FBTyxNQUFNQSxDQUFHLElBQU0sb0JBQXNCLENBQUMsYUFBZSxFQUFFLE9BQU9BLEdBQVEsVUFBWSxlQUFlQSxHQUFRLENBQ3pJLFNBQVMsUUFBUUEsRUFBSyxDQUFFLE9BQU8sTUFBTUEsQ0FBRyxJQUFNLG1CQUFxQixDQUFDLGFBQWUsRUFBRSxPQUFPQSxHQUFRLFVBQVksZUFBZUEsR0FBUSxDQUN2SSxTQUFTLFNBQVNBLEVBQUssQ0FBRSxPQUFPLE1BQU1BLENBQUcsSUFBTSxvQkFBc0IsQ0FBQyxhQUFlLEVBQUUsT0FBT0EsR0FBUSxVQUFZLGVBQWVBLEdBQVEsQ0FDekksU0FBUyxTQUFTQSxFQUFLLENBQUUsT0FBTyxNQUFNQSxDQUFHLElBQU0sb0JBQXNCLENBQUMsYUFBZSxFQUFFLE9BQU9BLEdBQVEsVUFBWSxlQUFlQSxHQUFRLENBQ3pJLFNBQVMsVUFBVUEsRUFBSyxDQUFFLE9BQU8sTUFBTUEsQ0FBRyxJQUFNLHFCQUF1QixDQUFDLGFBQWUsRUFBRSxPQUFPQSxHQUFRLFVBQVksZUFBZUEsR0FBUSxDQUczSSxTQUFTLFNBQVNBLEVBQUssQ0FDbkIsR0FBSSxrQkFDQSxPQUFPQSxHQUFPLE9BQU9BLEdBQVEsVUFBWUEsYUFBZSxPQUU1RCxHQUFJLE9BQU9BLEdBQVEsU0FDZixNQUFPLEdBRVgsR0FBSSxDQUFDQSxHQUFPLE9BQU9BLEdBQVEsVUFBWSxDQUFDLFlBQ3BDLE1BQU8sR0FFWCxHQUFJLENBQ0EsbUJBQVksS0FBS0EsQ0FBRyxFQUNiLEVBQ2YsTUFBZ0IsQ0FBRSxDQUNkLE1BQU8sRUFDWCxDQUVBLFNBQVMsU0FBU0EsRUFBSyxDQUNuQixHQUFJLENBQUNBLEdBQU8sT0FBT0EsR0FBUSxVQUFZLENBQUMsY0FDcEMsTUFBTyxHQUVYLEdBQUksQ0FDQSxxQkFBYyxLQUFLQSxDQUFHLEVBQ2YsRUFDZixNQUFnQixDQUFFLENBQ2QsTUFBTyxFQUNYLENBRUEsSUFBSSxPQUFTLE9BQU8sVUFBVSxnQkFBa0IsU0FBVTRILEVBQUssQ0FBRSxPQUFPQSxLQUFPLE1BQy9FLFNBQVM0bEMsTUFBSXh0QyxFQUFLNEgsRUFBSyxDQUNuQixPQUFPLE9BQU8sS0FBSzVILEVBQUs0SCxDQUFHLENBQy9CLENBRUEsU0FBUyxNQUFNNUgsRUFBSyxDQUNoQixPQUFPLGVBQWUsS0FBS0EsQ0FBRyxDQUNsQyxDQUVBLFNBQVMsT0FBT3l5QixFQUFHLENBQ2YsR0FBSUEsRUFBRSxLQUFRLE9BQU9BLEVBQUUsS0FDdkIsSUFBSXpyQixFQUFJLE9BQU8sS0FBSyxpQkFBaUIsS0FBS3lyQixDQUFDLEVBQUcsc0JBQXNCLEVBQ3BFLE9BQUl6ckIsRUFBWUEsRUFBRSxDQUFDLEVBQ1osSUFDWCxDQUVBLFNBQVMsUUFBUWluQyxFQUFJM0QsRUFBRyxDQUNwQixHQUFJMkQsRUFBRyxRQUFXLE9BQU9BLEVBQUcsUUFBUTNELENBQUMsRUFDckMsUUFBUzlwQyxFQUFJLEVBQUdrUCxFQUFJdStCLEVBQUcsT0FBUXp0QyxFQUFJa1AsRUFBR2xQLElBQ2xDLEdBQUl5dEMsRUFBR3p0QyxDQUFDLElBQU04cEMsRUFBSyxPQUFPOXBDLEVBRTlCLE1BQU8sRUFDWCxDQUVBLFNBQVMsTUFBTThwQyxFQUFHLENBQ2QsR0FBSSxDQUFDLFNBQVcsQ0FBQ0EsR0FBSyxPQUFPQSxHQUFNLFNBQy9CLE1BQU8sR0FFWCxHQUFJLENBQ0EsUUFBUSxLQUFLQSxDQUFDLEVBQ2QsR0FBSSxDQUNBLFFBQVEsS0FBS0EsQ0FBQyxDQUNqQixNQUFXLENBQ1IsTUFBTyxFQUNWLENBQ0QsT0FBT0EsYUFBYSxHQUM1QixNQUFnQixDQUFFLENBQ2QsTUFBTyxFQUNYLENBRUEsU0FBUyxVQUFVQSxFQUFHLENBQ2xCLEdBQUksQ0FBQyxZQUFjLENBQUNBLEdBQUssT0FBT0EsR0FBTSxTQUNsQyxNQUFPLEdBRVgsR0FBSSxDQUNBLFdBQVcsS0FBS0EsRUFBRyxVQUFVLEVBQzdCLEdBQUksQ0FDQSxXQUFXLEtBQUtBLEVBQUcsVUFBVSxDQUNoQyxNQUFXLENBQ1IsTUFBTyxFQUNWLENBQ0QsT0FBT0EsYUFBYSxPQUM1QixNQUFnQixDQUFFLENBQ2QsTUFBTyxFQUNYLENBRUEsU0FBUyxVQUFVQSxFQUFHLENBQ2xCLEdBQUksQ0FBQyxjQUFnQixDQUFDQSxHQUFLLE9BQU9BLEdBQU0sU0FDcEMsTUFBTyxHQUVYLEdBQUksQ0FDQSxvQkFBYSxLQUFLQSxDQUFDLEVBQ1osRUFDZixNQUFnQixDQUFFLENBQ2QsTUFBTyxFQUNYLENBRUEsU0FBUyxNQUFNQSxFQUFHLENBQ2QsR0FBSSxDQUFDLFNBQVcsQ0FBQ0EsR0FBSyxPQUFPQSxHQUFNLFNBQy9CLE1BQU8sR0FFWCxHQUFJLENBQ0EsUUFBUSxLQUFLQSxDQUFDLEVBQ2QsR0FBSSxDQUNBLFFBQVEsS0FBS0EsQ0FBQyxDQUNqQixNQUFXLENBQ1IsTUFBTyxFQUNWLENBQ0QsT0FBT0EsYUFBYSxHQUM1QixNQUFnQixDQUFFLENBQ2QsTUFBTyxFQUNYLENBRUEsU0FBUyxVQUFVQSxFQUFHLENBQ2xCLEdBQUksQ0FBQyxZQUFjLENBQUNBLEdBQUssT0FBT0EsR0FBTSxTQUNsQyxNQUFPLEdBRVgsR0FBSSxDQUNBLFdBQVcsS0FBS0EsRUFBRyxVQUFVLEVBQzdCLEdBQUksQ0FDQSxXQUFXLEtBQUtBLEVBQUcsVUFBVSxDQUNoQyxNQUFXLENBQ1IsTUFBTyxFQUNWLENBQ0QsT0FBT0EsYUFBYSxPQUM1QixNQUFnQixDQUFFLENBQ2QsTUFBTyxFQUNYLENBRUEsU0FBUzBELFlBQVUxRCxFQUFHLENBQ2xCLE1BQUksQ0FBQ0EsR0FBSyxPQUFPQSxHQUFNLFNBQW1CLEdBQ3RDLE9BQU8sWUFBZ0IsS0FBZUEsYUFBYSxZQUM1QyxHQUVKLE9BQU9BLEVBQUUsVUFBYSxVQUFZLE9BQU9BLEVBQUUsY0FBaUIsVUFDdkUsQ0FFQSxTQUFTLGNBQWNsUixFQUFLalksRUFBTSxDQUM5QixHQUFJaVksRUFBSSxPQUFTalksRUFBSyxnQkFBaUIsQ0FDbkMsSUFBSXRPLEVBQVl1bUIsRUFBSSxPQUFTalksRUFBSyxnQkFDOUJ3dEIsRUFBVSxPQUFTOTdCLEVBQVksbUJBQXFCQSxFQUFZLEVBQUksSUFBTSxJQUM5RSxPQUFPLGNBQWMsT0FBTyxLQUFLdW1CLEVBQUssRUFBR2pZLEVBQUssZUFBZSxFQUFHQSxDQUFJLEVBQUl3dEIsQ0FDM0UsQ0FFRCxJQUFJanBCLEVBQUksU0FBUyxLQUFLLFNBQVMsS0FBSzBULEVBQUssV0FBWSxNQUFNLEVBQUcsZUFBZ0IsT0FBTyxFQUNyRixPQUFPLFdBQVcxVCxFQUFHLFNBQVV2RSxDQUFJLENBQ3ZDLENBRUEsU0FBUyxRQUFRMm1CLEVBQUcsQ0FDaEIsSUFBSWo1QixFQUFJaTVCLEVBQUUsV0FBVyxDQUFDLEVBQ2xCd0MsRUFBSSxDQUNKLEVBQUcsSUFDSCxFQUFHLElBQ0gsR0FBSSxJQUNKLEdBQUksSUFDSixHQUFJLEdBQ1AsRUFBQ3o3QixDQUFDLEVBQ0gsT0FBSXk3QixFQUFZLEtBQU9BLEVBQ2hCLE9BQVN6N0IsRUFBSSxHQUFPLElBQU0sSUFBTSxhQUFhLEtBQUtBLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FDM0UsQ0FFQSxTQUFTLFVBQVV1cUIsRUFBSyxDQUNwQixNQUFPLFVBQVlBLEVBQU0sR0FDN0IsQ0FFQSxTQUFTLGlCQUFpQmoyQixFQUFNLENBQzVCLE9BQU9BLEVBQU8sUUFDbEIsQ0FFQSxTQUFTLGFBQWFBLEVBQU1pMUIsRUFBTXdXLEVBQVNoQixFQUFRLENBQy9DLElBQUlpQixFQUFnQmpCLEVBQVMsYUFBYWdCLEVBQVNoQixDQUFNLEVBQUksTUFBTSxLQUFLZ0IsRUFBUyxJQUFJLEVBQ3JGLE9BQU96ckMsRUFBTyxLQUFPaTFCLEVBQU8sTUFBUXlXLEVBQWdCLEdBQ3hELENBRUEsU0FBUyxpQkFBaUJaLEVBQUksQ0FDMUIsUUFBU3p0QyxFQUFJLEVBQUdBLEVBQUl5dEMsRUFBRyxPQUFRenRDLElBQzNCLEdBQUksUUFBUXl0QyxFQUFHenRDLENBQUMsRUFBRztBQUFBLENBQUksR0FBSyxFQUN4QixNQUFPLEdBR2YsTUFBTyxFQUNYLENBRUEsU0FBUyxVQUFVMmdCLEVBQU1oUCxFQUFPLENBQzVCLElBQUkyOEIsRUFDSixHQUFJM3RCLEVBQUssU0FBVyxJQUNoQjJ0QixFQUFhLFlBQ04sT0FBTzN0QixFQUFLLFFBQVcsVUFBWUEsRUFBSyxPQUFTLEVBQ3hEMnRCLEVBQWEsTUFBTSxLQUFLLE1BQU0zdEIsRUFBSyxPQUFTLENBQUMsRUFBRyxHQUFHLE1BRW5ELFFBQU8sS0FFWCxNQUFPLENBQ0gsS0FBTTJ0QixFQUNOLEtBQU0sTUFBTSxLQUFLLE1BQU0zOEIsRUFBUSxDQUFDLEVBQUcyOEIsQ0FBVSxDQUNyRCxDQUNBLENBRUEsU0FBUyxhQUFhYixFQUFJTCxFQUFRLENBQzlCLEdBQUlLLEVBQUcsU0FBVyxFQUFLLE1BQU8sR0FDOUIsSUFBSWMsRUFBYTtBQUFBLEVBQU9uQixFQUFPLEtBQU9BLEVBQU8sS0FDN0MsT0FBT21CLEVBQWEsTUFBTSxLQUFLZCxFQUFJLElBQU1jLENBQVUsRUFBSTtBQUFBLEVBQU9uQixFQUFPLElBQ3pFLENBRUEsU0FBUyxXQUFXNXRDLEVBQUtpbkIsRUFBUyxDQUM5QixJQUFJK25CLEVBQVEzVixVQUFRcjVCLENBQUcsRUFDbkJpdUMsRUFBSyxDQUFBLEVBQ1QsR0FBSWUsRUFBTyxDQUNQZixFQUFHLE9BQVNqdUMsRUFBSSxPQUNoQixRQUFTLEVBQUksRUFBRyxFQUFJQSxFQUFJLE9BQVEsSUFDNUJpdUMsRUFBRyxDQUFDLEVBQUlULE1BQUl4dEMsRUFBSyxDQUFDLEVBQUlpbkIsRUFBUWpuQixFQUFJLENBQUMsRUFBR0EsQ0FBRyxFQUFJLEVBRXBELENBQ0QsSUFBSThvQyxFQUFPLE9BQU8sTUFBUyxXQUFhLEtBQUs5b0MsQ0FBRyxFQUFJLEdBQ2hEaXZDLEVBQ0osR0FBSSxrQkFBbUIsQ0FDbkJBLEVBQVMsQ0FBQSxFQUNULFFBQVMzZixFQUFJLEVBQUdBLEVBQUl3WixFQUFLLE9BQVF4WixJQUM3QjJmLEVBQU8sSUFBTW5HLEVBQUt4WixDQUFDLENBQUMsRUFBSXdaLEVBQUt4WixDQUFDLENBRXJDLENBRUQsUUFBUzFuQixLQUFPNUgsRUFDUHd0QyxNQUFJeHRDLEVBQUs0SCxDQUFHLElBQ2JvbkMsR0FBUyxPQUFPLE9BQU9wbkMsQ0FBRyxDQUFDLElBQU1BLEdBQU9BLEVBQU01SCxFQUFJLFFBQ2xELG1CQUFxQml2QyxFQUFPLElBQU1ybkMsQ0FBRyxZQUFhLFNBRzNDLE1BQU0sS0FBSyxTQUFVQSxDQUFHLEVBQy9CcW1DLEVBQUcsS0FBS2huQixFQUFRcmYsRUFBSzVILENBQUcsRUFBSSxLQUFPaW5CLEVBQVFqbkIsRUFBSTRILENBQUcsRUFBRzVILENBQUcsQ0FBQyxFQUV6RGl1QyxFQUFHLEtBQUtybUMsRUFBTSxLQUFPcWYsRUFBUWpuQixFQUFJNEgsQ0FBRyxFQUFHNUgsQ0FBRyxDQUFDLElBR25ELEdBQUksT0FBTyxNQUFTLFdBQ2hCLFFBQVN3QixFQUFJLEVBQUdBLEVBQUlzbkMsRUFBSyxPQUFRdG5DLElBQ3pCLGFBQWEsS0FBS3hCLEVBQUs4b0MsRUFBS3RuQyxDQUFDLENBQUMsR0FDOUJ5c0MsRUFBRyxLQUFLLElBQU1obkIsRUFBUTZoQixFQUFLdG5DLENBQUMsQ0FBQyxFQUFJLE1BQVF5bEIsRUFBUWpuQixFQUFJOG9DLEVBQUt0bkMsQ0FBQyxDQUFDLEVBQUd4QixDQUFHLENBQUMsRUFJL0UsT0FBT2l1QyxDQUNYLENDNWdCQSxJQUFJLGFBQWVwYyxhQUNmLFVBQVlDLFlBQ1osUUFBVXFFLGNBRVYsV0FBYXlDLEtBQ2IsU0FBVyxhQUFhLFlBQWEsRUFBSSxFQUN6QyxLQUFPLGFBQWEsUUFBUyxFQUFJLEVBRWpDLFlBQWMsVUFBVSx3QkFBeUIsRUFBSSxFQUNyRCxZQUFjLFVBQVUsd0JBQXlCLEVBQUksRUFDckQsWUFBYyxVQUFVLHdCQUF5QixFQUFJLEVBQ3JELFFBQVUsVUFBVSxvQkFBcUIsRUFBSSxFQUM3QyxRQUFVLFVBQVUsb0JBQXFCLEVBQUksRUFDN0MsUUFBVSxVQUFVLG9CQUFxQixFQUFJLEVBUTdDLFlBQWMsU0FBVXJvQixFQUFNM0ksRUFBSyxDQUt0QyxRQUhJdWdCLEVBQU81WCxFQUVQMitCLEdBQ0lBLEVBQU8vbUIsRUFBSyxRQUFVLEtBQU1BLEVBQU8rbUIsRUFDMUMsR0FBSUEsRUFBSyxNQUFRdG5DLEVBQ2hCLE9BQUF1Z0IsRUFBSyxLQUFPK21CLEVBQUssS0FFakJBLEVBQUssS0FBcUQzK0IsRUFBSyxLQUMvREEsRUFBSyxLQUFPMitCLEVBQ0xBLENBR1YsRUFHSSxRQUFVLFNBQVVDLEVBQVN2bkMsRUFBSyxDQUNyQyxJQUFJdEgsRUFBTyxZQUFZNnVDLEVBQVN2bkMsQ0FBRyxFQUNuQyxPQUFPdEgsR0FBUUEsRUFBSyxLQUNyQixFQUVJLFFBQVUsU0FBVTZ1QyxFQUFTdm5DLEVBQUszRSxFQUFPLENBQzVDLElBQUkzQyxFQUFPLFlBQVk2dUMsRUFBU3ZuQyxDQUFHLEVBQy9CdEgsRUFDSEEsRUFBSyxNQUFRMkMsRUFHYmtzQyxFQUFRLEtBQTBELENBQ2pFLElBQUt2bkMsRUFDTCxLQUFNdW5DLEVBQVEsS0FDZCxNQUFPbHNDLENBQ1YsQ0FFQSxFQUVJLFFBQVUsU0FBVWtzQyxFQUFTdm5DLEVBQUssQ0FDckMsTUFBTyxDQUFDLENBQUMsWUFBWXVuQyxFQUFTdm5DLENBQUcsQ0FDbEMsRUFHQSxZQUFpQixTQUFTd25DLEdBQWlCLENBQ0YsSUFBSUMsRUFDSkMsRUFDU0MsRUFHN0NDLEVBQVUsQ0FDYixPQUFRLFNBQVU1bkMsRUFBSyxDQUN0QixHQUFJLENBQUM0bkMsRUFBUSxJQUFJNW5DLENBQUcsRUFDbkIsTUFBTSxJQUFJLFdBQVcsaUNBQW1DLFFBQVFBLENBQUcsQ0FBQyxDQUVyRSxFQUNELElBQUssU0FBVUEsRUFBSyxDQUNuQixHQUFJLFVBQVlBLElBQVEsT0FBT0EsR0FBUSxVQUFZLE9BQU9BLEdBQVEsYUFDakUsR0FBSXluQyxFQUNILE9BQU8sWUFBWUEsRUFBS3puQyxDQUFHLFVBRWxCLE1BQ1YsR0FBSTBuQyxFQUNILE9BQU8sUUFBUUEsRUFBSTFuQyxDQUFHLFVBR25CMm5DLEVBQ0gsT0FBTyxRQUFRQSxFQUFJM25DLENBQUcsQ0FHeEIsRUFDRCxJQUFLLFNBQVVBLEVBQUssQ0FDbkIsR0FBSSxVQUFZQSxJQUFRLE9BQU9BLEdBQVEsVUFBWSxPQUFPQSxHQUFRLGFBQ2pFLEdBQUl5bkMsRUFDSCxPQUFPLFlBQVlBLEVBQUt6bkMsQ0FBRyxVQUVsQixNQUNWLEdBQUkwbkMsRUFDSCxPQUFPLFFBQVFBLEVBQUkxbkMsQ0FBRyxVQUduQjJuQyxFQUNILE9BQU8sUUFBUUEsRUFBSTNuQyxDQUFHLEVBR3hCLE1BQU8sRUFDUCxFQUNELElBQUssU0FBVUEsRUFBSzNFLEVBQU8sQ0FDdEIsVUFBWTJFLElBQVEsT0FBT0EsR0FBUSxVQUFZLE9BQU9BLEdBQVEsYUFDNUR5bkMsSUFDSkEsRUFBTSxJQUFJLFVBRVgsWUFBWUEsRUFBS3puQyxFQUFLM0UsQ0FBSyxHQUNqQixNQUNMcXNDLElBQ0pBLEVBQUssSUFBSSxNQUVWLFFBQVFBLEVBQUkxbkMsRUFBSzNFLENBQUssSUFFakJzc0MsSUFFSkEsRUFBSyxDQUFFLElBQUssQ0FBRSxFQUFFLEtBQU0sSUFBSSxHQUUzQixRQUFRQSxFQUFJM25DLEVBQUszRSxDQUFLLEVBRXZCLENBQ0gsRUFDQyxPQUFPdXNDLENBQ1IsRUM5SEksUUFBVSxPQUFPLFVBQVUsUUFDM0IsZ0JBQWtCLE9BRWxCLE9BQVMsQ0FDVCxRQUFTLFVBQ1QsUUFBUyxTQUNiLEVBRUFDLFVBQWlCLENBQ2IsUUFBVyxPQUFPLFFBQ2xCLFdBQVksQ0FDUixRQUFTLFNBQVV4c0MsRUFBTyxDQUN0QixPQUFPLFFBQVEsS0FBS0EsRUFBTyxnQkFBaUIsR0FBRyxDQUNsRCxFQUNELFFBQVMsU0FBVUEsRUFBTyxDQUN0QixPQUFPLE9BQU9BLENBQUssQ0FDdEIsQ0FDSixFQUNELFFBQVMsT0FBTyxRQUNoQixRQUFTLE9BQU8sT0FDcEIsRUNwQkl3c0MsVUFBVTVkLFVBRVYyYixNQUFNLE9BQU8sVUFBVSxlQUN2Qm5VLFVBQVUsTUFBTSxRQUVoQixTQUFZLFVBQVksQ0FFeEIsUUFESS81QixFQUFRLENBQUEsRUFDSGtCLEVBQUksRUFBR0EsRUFBSSxJQUFLLEVBQUVBLEVBQ3ZCbEIsRUFBTSxLQUFLLE1BQVFrQixFQUFJLEdBQUssSUFBTSxJQUFNQSxFQUFFLFNBQVMsRUFBRSxHQUFHLFlBQWEsQ0FBQSxFQUd6RSxPQUFPbEIsQ0FDWCxFQUFDLEVBRUcsYUFBZSxTQUFTb3dDLEVBQWFsL0IsRUFBTyxDQUM1QyxLQUFPQSxFQUFNLE9BQVMsR0FBRyxDQUNyQixJQUFJbS9CLEVBQU9uL0IsRUFBTSxNQUNieFEsRUFBTTJ2QyxFQUFLLElBQUlBLEVBQUssSUFBSSxFQUU1QixHQUFJdFcsVUFBUXI1QixDQUFHLEVBQUcsQ0FHZCxRQUZJNHZDLEVBQVksQ0FBQSxFQUVQcHVDLEVBQUksRUFBR0EsRUFBSXhCLEVBQUksT0FBUSxFQUFFd0IsRUFDMUIsT0FBT3hCLEVBQUl3QixDQUFDLEVBQU0sS0FDbEJvdUMsRUFBVSxLQUFLNXZDLEVBQUl3QixDQUFDLENBQUMsRUFJN0JtdUMsRUFBSyxJQUFJQSxFQUFLLElBQUksRUFBSUMsQ0FDekIsQ0FDSixDQUNMLEVBRUksY0FBZ0IsU0FBU25TLEVBQWM1QixFQUFRcDZCLEVBQVMsQ0FFeEQsUUFESXpCLEVBQU15QixHQUFXQSxFQUFRLGFBQWUsT0FBTyxPQUFPLElBQUksRUFBSSxHQUN6RCxFQUFJLEVBQUcsRUFBSW82QixFQUFPLE9BQVEsRUFBRSxFQUM3QixPQUFPQSxFQUFPLENBQUMsRUFBTSxNQUNyQjc3QixFQUFJLENBQUMsRUFBSTY3QixFQUFPLENBQUMsR0FJekIsT0FBTzc3QixDQUNYLEVBRUksTUFBUSxTQUFTODVCLEVBQU0vM0IsRUFBUTg1QixFQUFRcDZCLEVBQVMsQ0FFaEQsR0FBSSxDQUFDbzZCLEVBQ0QsT0FBTzk1QixFQUdYLEdBQUksT0FBTzg1QixHQUFXLFNBQVUsQ0FDNUIsR0FBSXhDLFVBQVF0M0IsQ0FBTSxFQUNkQSxFQUFPLEtBQUs4NUIsQ0FBTSxVQUNYOTVCLEdBQVUsT0FBT0EsR0FBVyxVQUM5Qk4sSUFBWUEsRUFBUSxjQUFnQkEsRUFBUSxrQkFBcUIsQ0FBQytyQyxNQUFJLEtBQUssT0FBTyxVQUFXM1IsQ0FBTSxLQUNwRzk1QixFQUFPODVCLENBQU0sRUFBSSxRQUdyQixPQUFPLENBQUM5NUIsRUFBUTg1QixDQUFNLEVBRzFCLE9BQU85NUIsQ0FDVixDQUVELEdBQUksQ0FBQ0EsR0FBVSxPQUFPQSxHQUFXLFNBQzdCLE1BQU8sQ0FBQ0EsQ0FBTSxFQUFFLE9BQU84NUIsQ0FBTSxFQUdqQyxJQUFJZ1UsRUFBYzl0QyxFQUtsQixPQUpJczNCLFVBQVF0M0IsQ0FBTSxHQUFLLENBQUNzM0IsVUFBUXdDLENBQU0sSUFDbENnVSxFQUFjLGNBQWM5dEMsRUFBUU4sQ0FBTyxHQUczQzQzQixVQUFRdDNCLENBQU0sR0FBS3MzQixVQUFRd0MsQ0FBTSxHQUNqQ0EsRUFBTyxRQUFRLFNBQVU4VCxFQUFNbnZDLEVBQUcsQ0FDOUIsR0FBSWd0QyxNQUFJLEtBQUt6ckMsRUFBUXZCLENBQUMsRUFBRyxDQUNyQixJQUFJc3ZDLEVBQWEvdEMsRUFBT3ZCLENBQUMsRUFDckJzdkMsR0FBYyxPQUFPQSxHQUFlLFVBQVlILEdBQVEsT0FBT0EsR0FBUyxTQUN4RTV0QyxFQUFPdkIsQ0FBQyxFQUFJczVCLEVBQU1nVyxFQUFZSCxFQUFNbHVDLENBQU8sRUFFM0NNLEVBQU8sS0FBSzR0QyxDQUFJLENBRXBDLE1BQ2dCNXRDLEVBQU92QixDQUFDLEVBQUltdkMsQ0FFNUIsQ0FBUyxFQUNNNXRDLEdBR0osT0FBTyxLQUFLODVCLENBQU0sRUFBRSxPQUFPLFNBQVU1RCxFQUFLcndCLEVBQUssQ0FDbEQsSUFBSTNFLEVBQVE0NEIsRUFBT2owQixDQUFHLEVBRXRCLE9BQUk0bEMsTUFBSSxLQUFLdlYsRUFBS3J3QixDQUFHLEVBQ2pCcXdCLEVBQUlyd0IsQ0FBRyxFQUFJa3lCLEVBQU03QixFQUFJcndCLENBQUcsRUFBRzNFLEVBQU94QixDQUFPLEVBRXpDdzJCLEVBQUlyd0IsQ0FBRyxFQUFJM0UsRUFFUmcxQixDQUNWLEVBQUU0WCxDQUFXLENBQ2xCLEVBRUksT0FBUyxTQUFTRSxFQUFtQmh1QyxFQUFRODVCLEVBQVEsQ0FDckQsT0FBTyxPQUFPLEtBQUtBLENBQU0sRUFBRSxPQUFPLFNBQVU1RCxFQUFLcndCLEVBQUssQ0FDbEQsT0FBQXF3QixFQUFJcndCLENBQUcsRUFBSWkwQixFQUFPajBCLENBQUcsRUFDZHF3QixDQUNWLEVBQUVsMkIsQ0FBTSxDQUNiLEVBRUksT0FBUyxTQUFVcTNCLEVBQUs0VyxFQUFTQyxFQUFTLENBQzFDLElBQUlDLEVBQWlCOVcsRUFBSSxRQUFRLE1BQU8sR0FBRyxFQUMzQyxHQUFJNlcsSUFBWSxhQUVaLE9BQU9DLEVBQWUsUUFBUSxpQkFBa0IsUUFBUSxFQUc1RCxHQUFJLENBQ0EsT0FBTyxtQkFBbUJBLENBQWMsQ0FDM0MsTUFBVyxDQUNSLE9BQU9BLENBQ1YsQ0FDTCxFQUVJLE1BQVEsS0FJUixPQUFTLFNBQVNqVCxFQUFPN0QsRUFBSytXLEVBQWdCRixFQUFTclcsRUFBTS9NLEVBQVEsQ0FHckUsR0FBSXVNLEVBQUksU0FBVyxFQUNmLE9BQU9BLEVBR1gsSUFBSWhsQixFQUFTZ2xCLEVBT2IsR0FOSSxPQUFPQSxHQUFRLFNBQ2ZobEIsRUFBUyxPQUFPLFVBQVUsU0FBUyxLQUFLZ2xCLENBQUcsRUFDcEMsT0FBT0EsR0FBUSxXQUN0QmhsQixFQUFTLE9BQU9nbEIsQ0FBRyxHQUduQjZXLElBQVksYUFDWixPQUFPLE9BQU83N0IsQ0FBTSxFQUFFLFFBQVEsa0JBQW1CLFNBQVVnOEIsRUFBSSxDQUMzRCxNQUFPLFNBQVcsU0FBU0EsRUFBRyxNQUFNLENBQUMsRUFBRyxFQUFFLEVBQUksS0FDMUQsQ0FBUyxFQUlMLFFBRElDLEVBQU0sR0FDRDd1QyxFQUFJLEVBQUdBLEVBQUk0UyxFQUFPLE9BQVE1UyxHQUFLLE1BQU8sQ0FJM0MsUUFISTh1QyxFQUFVbDhCLEVBQU8sUUFBVSxNQUFRQSxFQUFPLE1BQU01UyxFQUFHQSxFQUFJLEtBQUssRUFBSTRTLEVBQ2hFbFYsRUFBTSxDQUFBLEVBRURzQixFQUFJLEVBQUdBLEVBQUk4dkMsRUFBUSxPQUFRLEVBQUU5dkMsRUFBRyxDQUNyQyxJQUFJc25DLEVBQUl3SSxFQUFRLFdBQVc5dkMsQ0FBQyxFQUM1QixHQUNJc25DLElBQU0sSUFDSEEsSUFBTSxJQUNOQSxJQUFNLElBQ05BLElBQU0sS0FDTEEsR0FBSyxJQUFRQSxHQUFLLElBQ2xCQSxHQUFLLElBQVFBLEdBQUssSUFDbEJBLEdBQUssSUFBUUEsR0FBSyxLQUNsQmpiLElBQVc0aUIsVUFBUSxVQUFZM0gsSUFBTSxJQUFRQSxJQUFNLElBQ3pELENBQ0U1b0MsRUFBSUEsRUFBSSxNQUFNLEVBQUlveEMsRUFBUSxPQUFPOXZDLENBQUMsRUFDbEMsUUFDSCxDQUVELEdBQUlzbkMsRUFBSSxJQUFNLENBQ1Y1b0MsRUFBSUEsRUFBSSxNQUFNLEVBQUksU0FBUzRvQyxDQUFDLEVBQzVCLFFBQ0gsQ0FFRCxHQUFJQSxFQUFJLEtBQU8sQ0FDWDVvQyxFQUFJQSxFQUFJLE1BQU0sRUFBSSxTQUFTLElBQVE0b0MsR0FBSyxDQUFFLEVBQ3BDLFNBQVMsSUFBUUEsRUFBSSxFQUFLLEVBQ2hDLFFBQ0gsQ0FFRCxHQUFJQSxFQUFJLE9BQVVBLEdBQUssTUFBUSxDQUMzQjVvQyxFQUFJQSxFQUFJLE1BQU0sRUFBSSxTQUFTLElBQVE0b0MsR0FBSyxFQUFHLEVBQ3JDLFNBQVMsSUFBU0EsR0FBSyxFQUFLLEVBQUssRUFDakMsU0FBUyxJQUFRQSxFQUFJLEVBQUssRUFDaEMsUUFDSCxDQUVEdG5DLEdBQUssRUFDTHNuQyxFQUFJLFFBQWFBLEVBQUksT0FBVSxHQUFPd0ksRUFBUSxXQUFXOXZDLENBQUMsRUFBSSxNQUU5RHRCLEVBQUlBLEVBQUksTUFBTSxFQUFJLFNBQVMsSUFBUTRvQyxHQUFLLEVBQUcsRUFDckMsU0FBUyxJQUFTQSxHQUFLLEdBQU0sRUFBSyxFQUNsQyxTQUFTLElBQVNBLEdBQUssRUFBSyxFQUFLLEVBQ2pDLFNBQVMsSUFBUUEsRUFBSSxFQUFLLENBQ25DLENBRUR1SSxHQUFPbnhDLEVBQUksS0FBSyxFQUFFLENBQ3JCLENBRUQsT0FBT214QyxDQUNYLEVBRUksUUFBVSxTQUFTRSxFQUFRdHRDLEVBQU8sQ0FJbEMsUUFISXVOLEVBQVEsQ0FBQyxDQUFFLElBQUssQ0FBRSxFQUFHdk4sR0FBUyxLQUFNLEdBQUcsQ0FBRSxFQUN6Q3V0QyxFQUFPLENBQUEsRUFFRixFQUFJLEVBQUcsRUFBSWhnQyxFQUFNLE9BQVEsRUFBRSxFQUtoQyxRQUpJbS9CLEVBQU9uL0IsRUFBTSxDQUFDLEVBQ2R4USxFQUFNMnZDLEVBQUssSUFBSUEsRUFBSyxJQUFJLEVBRXhCam9DLEVBQU8sT0FBTyxLQUFLMUgsQ0FBRyxFQUNqQndCLEVBQUksRUFBR0EsRUFBSWtHLEVBQUssT0FBUSxFQUFFbEcsRUFBRyxDQUNsQyxJQUFJb0csRUFBTUYsRUFBS2xHLENBQUMsRUFDWmYsRUFBTVQsRUFBSTRILENBQUcsRUFDYixPQUFPbkgsR0FBUSxVQUFZQSxJQUFRLE1BQVErdkMsRUFBSyxRQUFRL3ZDLENBQUcsSUFBTSxLQUNqRStQLEVBQU0sS0FBSyxDQUFFLElBQUt4USxFQUFLLEtBQU00SCxDQUFHLENBQUUsRUFDbEM0b0MsRUFBSyxLQUFLL3ZDLENBQUcsRUFFcEIsQ0FHTCxvQkFBYStQLENBQUssRUFFWHZOLENBQ1gsRUFFSSxTQUFXLFNBQVNnNEIsRUFBU2o3QixFQUFLLENBQ2xDLE9BQU8sT0FBTyxVQUFVLFNBQVMsS0FBS0EsQ0FBRyxJQUFNLGlCQUNuRCxFQUVJLFNBQVcsU0FBU3M1QixFQUFTdDVCLEVBQUssQ0FDbEMsTUFBSSxDQUFDQSxHQUFPLE9BQU9BLEdBQVEsU0FDaEIsR0FHSixDQUFDLEVBQUVBLEVBQUksYUFBZUEsRUFBSSxZQUFZLFVBQVlBLEVBQUksWUFBWSxTQUFTQSxDQUFHLEVBQ3pGLEVBRUksUUFBVSxTQUFTeXdDLEVBQVEvc0MsRUFBR0MsRUFBRyxDQUNqQyxNQUFPLEdBQUcsT0FBT0QsRUFBR0MsQ0FBQyxDQUN6QixFQUVJLFNBQVcsU0FBUytzQyxFQUFTandDLEVBQUtxSCxFQUFJLENBQ3RDLEdBQUl1eEIsVUFBUTU0QixDQUFHLEVBQUcsQ0FFZCxRQURJa00sRUFBUyxDQUFBLEVBQ0osRUFBSSxFQUFHLEVBQUlsTSxFQUFJLE9BQVEsR0FBSyxFQUNqQ2tNLEVBQU8sS0FBSzdFLEVBQUdySCxFQUFJLENBQUMsQ0FBQyxDQUFDLEVBRTFCLE9BQU9rTSxDQUNWLENBQ0QsT0FBTzdFLEVBQUdySCxDQUFHLENBQ2pCLEVBRUE4OEIsUUFBaUIsQ0FDYixjQUNBLE9BQ0EsUUFDQSxRQUNBLE9BQ0EsT0FDQSxTQUNBLFNBQ0EsU0FDQSxLQUNKLEVDdFFJLGVBQWlCMUwsWUFDakIwTCxRQUFRekwsUUFDUjJkLFVBQVV0WixVQUNWcVgsTUFBTSxPQUFPLFVBQVUsZUFFdkIsc0JBQXdCLENBQ3hCLFNBQVUsU0FBU21ELEVBQVMvd0IsRUFBUSxDQUNoQyxPQUFPQSxFQUFTLElBQ25CLEVBQ0QsTUFBTyxRQUNQLFFBQVMsU0FBU2d4QixFQUFRaHhCLEVBQVFoWSxFQUFLLENBQ25DLE9BQU9nWSxFQUFTLElBQU1oWSxFQUFNLEdBQy9CLEVBQ0QsT0FBUSxTQUFTaXBDLEVBQU9qeEIsRUFBUSxDQUM1QixPQUFPQSxDQUNWLENBQ0wsRUFFSXlaLFVBQVUsTUFBTSxRQUNoQixLQUFPLE1BQU0sVUFBVSxLQUN2QixZQUFjLFNBQVVuNkIsRUFBSzR4QyxFQUFjLENBQzNDLEtBQUssTUFBTTV4QyxFQUFLbTZCLFVBQVF5WCxDQUFZLEVBQUlBLEVBQWUsQ0FBQ0EsQ0FBWSxDQUFDLENBQ3pFLEVBRUksTUFBUSxLQUFLLFVBQVUsWUFFdkIsY0FBZ0JyQixVQUFRLFFBQ3hCMVIsV0FBVyxDQUNYLGVBQWdCLEdBQ2hCLFVBQVcsR0FDWCxpQkFBa0IsR0FDbEIsWUFBYSxVQUNiLFFBQVMsUUFDVCxnQkFBaUIsR0FDakIsVUFBVyxJQUNYLE9BQVEsR0FDUixnQkFBaUIsR0FDakIsUUFBU1IsUUFBTSxPQUNmLGlCQUFrQixHQUNsQixPQUFRLGNBQ1IsVUFBV2tTLFVBQVEsV0FBVyxhQUFhLEVBRTNDLFFBQVMsR0FDVCxjQUFlLFNBQVNzQixFQUFjM2pCLEVBQU0sQ0FDeEMsT0FBTyxNQUFNLEtBQUtBLENBQUksQ0FDekIsRUFDRCxVQUFXLEdBQ1gsbUJBQW9CLEVBQ3hCLEVBRUksc0JBQXdCLFNBQVM0akIsRUFBc0JsZ0MsRUFBRyxDQUMxRCxPQUFPLE9BQU9BLEdBQU0sVUFDYixPQUFPQSxHQUFNLFVBQ2IsT0FBT0EsR0FBTSxXQUNiLE9BQU9BLEdBQU0sVUFDYixPQUFPQSxHQUFNLFFBQ3hCLEVBRUksU0FBVyxDQUFBLEVBRVhtZ0MsWUFBWSxTQUFTQSxFQUNyQmpoQyxFQUNBNFAsRUFDQXN4QixFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBeFUsRUFDQXR3QixFQUNBbkosRUFDQWt1QyxFQUNBVCxFQUNBbGtCLEVBQ0E0a0IsRUFDQUMsRUFDQXpCLEVBQ0EwQixFQUNGLENBTUUsUUFMSTN4QyxFQUFNZ1EsRUFFTjRoQyxFQUFRRCxFQUNScmYsR0FBTyxFQUNQdWYsRUFBVyxJQUNQRCxFQUFRQSxFQUFNLElBQUksUUFBUSxLQUFPLFFBQWtCLENBQUNDLEdBQVUsQ0FFbEUsSUFBSW5OLEVBQU1rTixFQUFNLElBQUk1aEMsQ0FBTSxFQUUxQixHQURBc2lCLElBQVEsRUFDSixPQUFPb1MsRUFBUSxJQUFhLENBQzVCLEdBQUlBLElBQVFwUyxHQUNSLE1BQU0sSUFBSSxXQUFXLHFCQUFxQixFQUUxQ3VmLEVBQVcsRUFFbEIsQ0FDRyxPQUFPRCxFQUFNLElBQUksUUFBUSxFQUFNLE1BQy9CdGYsR0FBTyxFQUVkLENBZUQsR0FiSSxPQUFPN2xCLEdBQVcsV0FDbEJ6TSxFQUFNeU0sRUFBT21ULEVBQVE1ZixDQUFHLEVBQ2pCQSxhQUFlLEtBQ3RCQSxFQUFNK3dDLEVBQWMvd0MsQ0FBRyxFQUNoQmt4QyxJQUF3QixTQUFXN1gsVUFBUXI1QixDQUFHLElBQ3JEQSxFQUFNdTlCLFFBQU0sU0FBU3Y5QixFQUFLLFNBQVVpRCxHQUFPLENBQ3ZDLE9BQUlBLGNBQWlCLEtBQ1Y4dEMsRUFBYzl0QyxFQUFLLEVBRXZCQSxFQUNuQixDQUFTLEdBR0RqRCxJQUFRLEtBQU0sQ0FDZCxHQUFJcXhDLEVBQ0EsT0FBT3RVLEdBQVcsQ0FBQzJVLEVBQW1CM1UsRUFBUW5kLEVBQVFtZSxXQUFTLFFBQVNrUyxFQUFTLE1BQU9wakIsQ0FBTSxFQUFJak4sRUFHdEc1ZixFQUFNLEVBQ1QsQ0FFRCxHQUFJLHNCQUFzQkEsQ0FBRyxHQUFLdTlCLFFBQU0sU0FBU3Y5QixDQUFHLEVBQUcsQ0FDbkQsR0FBSSs4QixFQUFTLENBQ1QsSUFBSStVLEVBQVdKLEVBQW1COXhCLEVBQVNtZCxFQUFRbmQsRUFBUW1lLFdBQVMsUUFBU2tTLEVBQVMsTUFBT3BqQixDQUFNLEVBQ25HLE1BQU8sQ0FBQzRrQixFQUFVSyxDQUFRLEVBQUksSUFBTUwsRUFBVTFVLEVBQVEvOEIsRUFBSys5QixXQUFTLFFBQVNrUyxFQUFTLFFBQVNwakIsQ0FBTSxDQUFDLENBQUMsQ0FDMUcsQ0FDRCxNQUFPLENBQUM0a0IsRUFBVTd4QixDQUFNLEVBQUksSUFBTTZ4QixFQUFVLE9BQU96eEMsQ0FBRyxDQUFDLENBQUMsQ0FDM0QsQ0FFRCxJQUFJNlcsRUFBUyxDQUFBLEVBRWIsR0FBSSxPQUFPN1csRUFBUSxJQUNmLE9BQU82VyxFQUdYLElBQUlrN0IsRUFDSixHQUFJYixJQUF3QixTQUFXN1gsVUFBUXI1QixDQUFHLEVBRTFDMHhDLEdBQW9CM1UsSUFDcEIvOEIsRUFBTXU5QixRQUFNLFNBQVN2OUIsRUFBSys4QixDQUFPLEdBRXJDZ1YsRUFBVSxDQUFDLENBQUUsTUFBTy94QyxFQUFJLE9BQVMsRUFBSUEsRUFBSSxLQUFLLEdBQUcsR0FBSyxLQUFPLE1BQWdCLENBQUEsVUFDdEVxNUIsVUFBUTVzQixDQUFNLEVBQ3JCc2xDLEVBQVV0bEMsTUFDUCxDQUNILElBQUkvRSxFQUFPLE9BQU8sS0FBSzFILENBQUcsRUFDMUIreEMsRUFBVXp1QyxFQUFPb0UsRUFBSyxLQUFLcEUsQ0FBSSxFQUFJb0UsQ0FDdEMsQ0FFRCxJQUFJc3FDLEVBQWdCVCxFQUFrQjN4QixFQUFPLFFBQVEsTUFBTyxLQUFLLEVBQUlBLEVBRWpFcXlCLEVBQWlCZCxHQUFrQjlYLFVBQVFyNUIsQ0FBRyxHQUFLQSxFQUFJLFNBQVcsRUFBSWd5QyxFQUFnQixLQUFPQSxFQUVqRyxHQUFJWixHQUFvQi9YLFVBQVFyNUIsQ0FBRyxHQUFLQSxFQUFJLFNBQVcsRUFDbkQsT0FBT2l5QyxFQUFpQixLQUc1QixRQUFTendDLEdBQUksRUFBR0EsR0FBSXV3QyxFQUFRLE9BQVEsRUFBRXZ3QyxHQUFHLENBQ3JDLElBQUlvRyxHQUFNbXFDLEVBQVF2d0MsRUFBQyxFQUNmeUIsR0FBUSxPQUFPMkUsSUFBUSxVQUFZLE9BQU9BLEdBQUksTUFBVSxJQUFjQSxHQUFJLE1BQVE1SCxFQUFJNEgsRUFBRyxFQUU3RixHQUFJLEVBQUEwcEMsR0FBYXJ1QyxLQUFVLE1BSTNCLEtBQUlpdkMsR0FBYVYsR0FBYUQsRUFBa0IzcEMsR0FBSSxRQUFRLE1BQU8sS0FBSyxFQUFJQSxHQUN4RXVxQyxHQUFZOVksVUFBUXI1QixDQUFHLEVBQ3JCLE9BQU9reEMsR0FBd0IsV0FBYUEsRUFBb0JlLEVBQWdCQyxFQUFVLEVBQUlELEVBQzlGQSxHQUFrQlQsRUFBWSxJQUFNVSxHQUFhLElBQU1BLEdBQWEsS0FFMUVQLEVBQVksSUFBSTNoQyxFQUFRc2lCLEVBQUksRUFDNUIsSUFBSThmLEdBQW1CLGlCQUN2QkEsR0FBaUIsSUFBSSxTQUFVVCxDQUFXLEVBQzFDLFlBQVk5NkIsRUFBUW82QixFQUNoQmh1QyxHQUNBa3ZDLEdBQ0FqQixFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBTCxJQUF3QixTQUFXUSxHQUFvQnJZLFVBQVFyNUIsQ0FBRyxFQUFJLEtBQU8rOEIsRUFDN0V0d0IsRUFDQW5KLEVBQ0FrdUMsRUFDQVQsRUFDQWxrQixFQUNBNGtCLEVBQ0FDLEVBQ0F6QixFQUNBbUMsRUFDWixDQUFTLEVBQ0osQ0FFRCxPQUFPdjdCLENBQ1gsRUFFSSwwQkFBNEIsU0FBU3c3QixFQUEwQmx4QixFQUFNLENBQ3JFLEdBQUksQ0FBQ0EsRUFDRCxPQUFPNGMsV0FHWCxHQUFJLE9BQU81YyxFQUFLLGlCQUFxQixLQUFlLE9BQU9BLEVBQUssa0JBQXFCLFVBQ2pGLE1BQU0sSUFBSSxVQUFVLHdFQUF3RSxFQUdoRyxHQUFJLE9BQU9BLEVBQUssZ0JBQW9CLEtBQWUsT0FBT0EsRUFBSyxpQkFBb0IsVUFDL0UsTUFBTSxJQUFJLFVBQVUsdUVBQXVFLEVBRy9GLEdBQUlBLEVBQUssVUFBWSxNQUFRLE9BQU9BLEVBQUssUUFBWSxLQUFlLE9BQU9BLEVBQUssU0FBWSxXQUN4RixNQUFNLElBQUksVUFBVSwrQkFBK0IsRUFHdkQsSUFBSTh1QixFQUFVOXVCLEVBQUssU0FBVzRjLFdBQVMsUUFDdkMsR0FBSSxPQUFPNWMsRUFBSyxRQUFZLEtBQWVBLEVBQUssVUFBWSxTQUFXQSxFQUFLLFVBQVksYUFDcEYsTUFBTSxJQUFJLFVBQVUsbUVBQW1FLEVBRzNGLElBQUkwTCxFQUFTNGlCLFVBQVEsUUFDckIsR0FBSSxPQUFPdHVCLEVBQUssT0FBVyxJQUFhLENBQ3BDLEdBQUksQ0FBQ3FzQixNQUFJLEtBQUtpQyxVQUFRLFdBQVl0dUIsRUFBSyxNQUFNLEVBQ3pDLE1BQU0sSUFBSSxVQUFVLGlDQUFpQyxFQUV6RDBMLEVBQVMxTCxFQUFLLE1BQ2pCLENBQ0QsSUFBSXN3QixFQUFZaEMsVUFBUSxXQUFXNWlCLENBQU0sRUFFckNwZ0IsRUFBU3N4QixXQUFTLFFBQ2xCLE9BQU81YyxFQUFLLFFBQVcsWUFBY2tZLFVBQVFsWSxFQUFLLE1BQU0sS0FDeEQxVSxFQUFTMFUsRUFBSyxRQUdsQixJQUFJbXhCLEVBU0osR0FSSW54QixFQUFLLGVBQWUsc0JBQ3BCbXhCLEVBQWNueEIsRUFBSyxZQUNaLFlBQWFBLEVBQ3BCbXhCLEVBQWNueEIsRUFBSyxRQUFVLFVBQVksU0FFekNteEIsRUFBY3ZVLFdBQVMsWUFHdkIsbUJBQW9CNWMsR0FBUSxPQUFPQSxFQUFLLGdCQUFtQixVQUMzRCxNQUFNLElBQUksVUFBVSwrQ0FBK0MsRUFHdkUsSUFBSXF3QixFQUFZLE9BQU9yd0IsRUFBSyxVQUFjLElBQWNBLEVBQUssa0JBQW9CLEdBQU8sR0FBTzRjLFdBQVMsVUFBWSxDQUFDLENBQUM1YyxFQUFLLFVBRTNILE1BQU8sQ0FDSCxlQUFnQixPQUFPQSxFQUFLLGdCQUFtQixVQUFZQSxFQUFLLGVBQWlCNGMsV0FBUyxlQUMxRixVQUFXeVQsRUFDWCxpQkFBa0IsT0FBT3J3QixFQUFLLGtCQUFxQixVQUFZLENBQUMsQ0FBQ0EsRUFBSyxpQkFBbUI0YyxXQUFTLGlCQUNsRyxZQUFhdVUsRUFDYixRQUFTckMsRUFDVCxnQkFBaUIsT0FBTzl1QixFQUFLLGlCQUFvQixVQUFZQSxFQUFLLGdCQUFrQjRjLFdBQVMsZ0JBQzdGLGVBQWdCNWMsRUFBSyxlQUNyQixVQUFXLE9BQU9BLEVBQUssVUFBYyxJQUFjNGMsV0FBUyxVQUFZNWMsRUFBSyxVQUM3RSxPQUFRLE9BQU9BLEVBQUssUUFBVyxVQUFZQSxFQUFLLE9BQVM0YyxXQUFTLE9BQ2xFLGdCQUFpQixPQUFPNWMsRUFBSyxpQkFBb0IsVUFBWUEsRUFBSyxnQkFBa0I0YyxXQUFTLGdCQUM3RixRQUFTLE9BQU81YyxFQUFLLFNBQVksV0FBYUEsRUFBSyxRQUFVNGMsV0FBUyxRQUN0RSxpQkFBa0IsT0FBTzVjLEVBQUssa0JBQXFCLFVBQVlBLEVBQUssaUJBQW1CNGMsV0FBUyxpQkFDaEcsT0FBUXR4QixFQUNSLE9BQVFvZ0IsRUFDUixVQUFXNGtCLEVBQ1gsY0FBZSxPQUFPdHdCLEVBQUssZUFBa0IsV0FBYUEsRUFBSyxjQUFnQjRjLFdBQVMsY0FDeEYsVUFBVyxPQUFPNWMsRUFBSyxXQUFjLFVBQVlBLEVBQUssVUFBWTRjLFdBQVMsVUFDM0UsS0FBTSxPQUFPNWMsRUFBSyxNQUFTLFdBQWFBLEVBQUssS0FBTyxLQUNwRCxtQkFBb0IsT0FBT0EsRUFBSyxvQkFBdUIsVUFBWUEsRUFBSyxtQkFBcUI0YyxXQUFTLGtCQUM5RyxDQUNBLEVBRUEsWUFBaUIsU0FBVS90QixFQUFRbVIsRUFBTSxDQUNyQyxJQUFJbmhCLEVBQU1nUSxFQUNOdk8sRUFBVSwwQkFBMEIwZixDQUFJLEVBRXhDNHdCLEVBQ0F0bEMsRUFFQSxPQUFPaEwsRUFBUSxRQUFXLFlBQzFCZ0wsRUFBU2hMLEVBQVEsT0FDakJ6QixFQUFNeU0sRUFBTyxHQUFJek0sQ0FBRyxHQUNicTVCLFVBQVE1M0IsRUFBUSxNQUFNLElBQzdCZ0wsRUFBU2hMLEVBQVEsT0FDakJzd0MsRUFBVXRsQyxHQUdkLElBQUkvRSxFQUFPLENBQUEsRUFFWCxHQUFJLE9BQU8xSCxHQUFRLFVBQVlBLElBQVEsS0FDbkMsTUFBTyxHQUdYLElBQUlreEMsRUFBc0Isc0JBQXNCenZDLEVBQVEsV0FBVyxFQUMvRDB2QyxFQUFpQkQsSUFBd0IsU0FBV3p2QyxFQUFRLGVBRTNEc3dDLElBQ0RBLEVBQVUsT0FBTyxLQUFLL3hDLENBQUcsR0FHekJ5QixFQUFRLE1BQ1Jzd0MsRUFBUSxLQUFLdHdDLEVBQVEsSUFBSSxFQUk3QixRQURJa3dDLEVBQWMsaUJBQ1RueEMsRUFBSSxFQUFHQSxFQUFJdXhDLEVBQVEsT0FBUSxFQUFFdnhDLEVBQUcsQ0FDckMsSUFBSW9ILEVBQU1tcUMsRUFBUXZ4QyxDQUFDLEVBRWZpQixFQUFRLFdBQWF6QixFQUFJNEgsQ0FBRyxJQUFNLE1BR3RDLFlBQVlGLEVBQU11cEMsWUFDZGp4QyxFQUFJNEgsQ0FBRyxFQUNQQSxFQUNBc3BDLEVBQ0FDLEVBQ0ExdkMsRUFBUSxpQkFDUkEsRUFBUSxtQkFDUkEsRUFBUSxVQUNSQSxFQUFRLGdCQUNSQSxFQUFRLE9BQVNBLEVBQVEsUUFBVSxLQUNuQ0EsRUFBUSxPQUNSQSxFQUFRLEtBQ1JBLEVBQVEsVUFDUkEsRUFBUSxjQUNSQSxFQUFRLE9BQ1JBLEVBQVEsVUFDUkEsRUFBUSxpQkFDUkEsRUFBUSxRQUNSa3dDLENBQ1osQ0FBUyxDQUNKLENBRUQsSUFBSVksRUFBUzdxQyxFQUFLLEtBQUtqRyxFQUFRLFNBQVMsRUFDcENtZSxFQUFTbmUsRUFBUSxpQkFBbUIsR0FBTyxJQUFNLEdBRXJELE9BQUlBLEVBQVEsa0JBQ0pBLEVBQVEsVUFBWSxhQUVwQm1lLEdBQVUsdUJBR1ZBLEdBQVUsbUJBSVgyeUIsRUFBTyxPQUFTLEVBQUkzeUIsRUFBUzJ5QixFQUFTLEVBQ2pELEVDNVZJLE1BQVExZ0IsUUFFUixJQUFNLE9BQU8sVUFBVSxlQUN2QixRQUFVLE1BQU0sUUFFaEIsU0FBVyxDQUNYLFVBQVcsR0FDWCxpQkFBa0IsR0FDbEIsZ0JBQWlCLEdBQ2pCLFlBQWEsR0FDYixXQUFZLEdBQ1osUUFBUyxRQUNULGdCQUFpQixHQUNqQixNQUFPLEdBQ1AsZ0JBQWlCLEdBQ2pCLFFBQVMsTUFBTSxPQUNmLFVBQVcsSUFDWCxNQUFPLEVBQ1AsV0FBWSxVQUNaLGtCQUFtQixHQUNuQix5QkFBMEIsR0FDMUIsZUFBZ0IsSUFDaEIsWUFBYSxHQUNiLGFBQWMsR0FDZCxtQkFBb0IsRUFDeEIsRUFFSSx5QkFBMkIsU0FBVXVILEVBQUssQ0FDMUMsT0FBT0EsRUFBSSxRQUFRLFlBQWEsU0FBVWdYLEVBQUlvQyxFQUFXLENBQ3JELE9BQU8sT0FBTyxhQUFhLFNBQVNBLEVBQVcsRUFBRSxDQUFDLENBQzFELENBQUssQ0FDTCxFQUVJLGdCQUFrQixTQUFVL3hDLEVBQUtnQixFQUFTLENBQzFDLE9BQUloQixHQUFPLE9BQU9BLEdBQVEsVUFBWWdCLEVBQVEsT0FBU2hCLEVBQUksUUFBUSxHQUFHLEVBQUksR0FDL0RBLEVBQUksTUFBTSxHQUFHLEVBR2pCQSxDQUNYLEVBT0ksWUFBYyxzQkFHZCxnQkFBa0IsaUJBRWxCLFlBQWMsU0FBU2d5QyxFQUF1QnJaLEVBQUszM0IsRUFBUyxDQUM1RCxJQUFJekIsRUFBTSxDQUFFLFVBQVcsTUFFbkIweUMsRUFBV2p4QyxFQUFRLGtCQUFvQjIzQixFQUFJLFFBQVEsTUFBTyxFQUFFLEVBQUlBLEVBQ3BFc1osRUFBV0EsRUFBUyxRQUFRLFFBQVMsR0FBRyxFQUFFLFFBQVEsUUFBUyxHQUFHLEVBQzlELElBQUlDLEVBQVFseEMsRUFBUSxpQkFBbUIsSUFBVyxPQUFZQSxFQUFRLGVBQ2xFc2UsRUFBUTJ5QixFQUFTLE1BQU1qeEMsRUFBUSxVQUFXa3hDLENBQUssRUFDL0NDLEVBQVksR0FDWnB5QyxFQUVBeXZDLEVBQVV4dUMsRUFBUSxRQUN0QixHQUFJQSxFQUFRLGdCQUNSLElBQUtqQixFQUFJLEVBQUdBLEVBQUl1ZixFQUFNLE9BQVEsRUFBRXZmLEVBQ3hCdWYsRUFBTXZmLENBQUMsRUFBRSxRQUFRLE9BQU8sSUFBTSxJQUMxQnVmLEVBQU12ZixDQUFDLElBQU0sZ0JBQ2J5dkMsRUFBVSxRQUNIbHdCLEVBQU12ZixDQUFDLElBQU0sY0FDcEJ5dkMsRUFBVSxjQUVkMkMsRUFBWXB5QyxFQUNaQSxFQUFJdWYsRUFBTSxRQUt0QixJQUFLdmYsRUFBSSxFQUFHQSxFQUFJdWYsRUFBTSxPQUFRLEVBQUV2ZixFQUM1QixHQUFJQSxJQUFNb3lDLEVBR1YsS0FBSWxILEVBQU8zckIsRUFBTXZmLENBQUMsRUFFZHF5QyxFQUFtQm5ILEVBQUssUUFBUSxJQUFJLEVBQ3BDaEgsRUFBTW1PLElBQXFCLEdBQUtuSCxFQUFLLFFBQVEsR0FBRyxFQUFJbUgsRUFBbUIsRUFFdkVqckMsRUFBS25ILEVBQ0xpa0MsSUFBUSxJQUNSOThCLEVBQU1uRyxFQUFRLFFBQVFpcUMsRUFBTSxTQUFTLFFBQVN1RSxFQUFTLEtBQUssRUFDNUR4dkMsRUFBTWdCLEVBQVEsbUJBQXFCLEtBQU8sS0FFMUNtRyxFQUFNbkcsRUFBUSxRQUFRaXFDLEVBQUssTUFBTSxFQUFHaEgsQ0FBRyxFQUFHLFNBQVMsUUFBU3VMLEVBQVMsS0FBSyxFQUMxRXh2QyxFQUFNLE1BQU0sU0FDUixnQkFBZ0JpckMsRUFBSyxNQUFNaEgsRUFBTSxDQUFDLEVBQUdqakMsQ0FBTyxFQUM1QyxTQUFVcXhDLEVBQVksQ0FDbEIsT0FBT3J4QyxFQUFRLFFBQVFxeEMsRUFBWSxTQUFTLFFBQVM3QyxFQUFTLE9BQU8sQ0FDeEUsQ0FDakIsR0FHWXh2QyxHQUFPZ0IsRUFBUSwwQkFBNEJ3dUMsSUFBWSxlQUN2RHh2QyxFQUFNLHlCQUF5QkEsQ0FBRyxHQUdsQ2lyQyxFQUFLLFFBQVEsS0FBSyxFQUFJLEtBQ3RCanJDLEVBQU0sUUFBUUEsQ0FBRyxFQUFJLENBQUNBLENBQUcsRUFBSUEsR0FHakMsSUFBSXN5QyxFQUFXLElBQUksS0FBSy95QyxFQUFLNEgsQ0FBRyxFQUM1Qm1yQyxHQUFZdHhDLEVBQVEsYUFBZSxVQUNuQ3pCLEVBQUk0SCxDQUFHLEVBQUksTUFBTSxRQUFRNUgsRUFBSTRILENBQUcsRUFBR25ILENBQUcsR0FDL0IsQ0FBQ3N5QyxHQUFZdHhDLEVBQVEsYUFBZSxVQUMzQ3pCLEVBQUk0SCxDQUFHLEVBQUluSCxHQUluQixPQUFPVCxDQUNYLEVBRUksWUFBYyxTQUFVb25DLEVBQU8zbUMsRUFBS2dCLEVBQVN1eEMsRUFBYyxDQUczRCxRQUZJQyxFQUFPRCxFQUFldnlDLEVBQU0sZ0JBQWdCQSxFQUFLZ0IsQ0FBTyxFQUVuRGpCLEVBQUk0bUMsRUFBTSxPQUFTLEVBQUc1bUMsR0FBSyxFQUFHLEVBQUVBLEVBQUcsQ0FDeEMsSUFBSVIsRUFDQXNQLEVBQU84M0IsRUFBTTVtQyxDQUFDLEVBRWxCLEdBQUk4TyxJQUFTLE1BQVE3TixFQUFRLFlBQ3pCekIsRUFBTXlCLEVBQVEsa0JBQW9Cd3hDLElBQVMsR0FBSyxDQUFBLEVBQUssQ0FBRSxFQUFDLE9BQU9BLENBQUksTUFDaEUsQ0FDSGp6QyxFQUFNeUIsRUFBUSxhQUFlLE9BQU8sT0FBTyxJQUFJLEVBQUksR0FDbkQsSUFBSXl4QyxFQUFZNWpDLEVBQUssT0FBTyxDQUFDLElBQU0sS0FBT0EsRUFBSyxPQUFPQSxFQUFLLE9BQVMsQ0FBQyxJQUFNLElBQU1BLEVBQUssTUFBTSxFQUFHLEVBQUUsRUFBSUEsRUFDakc2akMsRUFBYzF4QyxFQUFRLGdCQUFrQnl4QyxFQUFVLFFBQVEsT0FBUSxHQUFHLEVBQUlBLEVBQ3pFdGlDLEVBQVEsU0FBU3VpQyxFQUFhLEVBQUUsRUFDaEMsQ0FBQzF4QyxFQUFRLGFBQWUweEMsSUFBZ0IsR0FDeENuekMsRUFBTSxDQUFFLEVBQUdpekMsR0FFWCxDQUFDLE1BQU1yaUMsQ0FBSyxHQUNUdEIsSUFBUzZqQyxHQUNULE9BQU92aUMsQ0FBSyxJQUFNdWlDLEdBQ2xCdmlDLEdBQVMsR0FDUm5QLEVBQVEsYUFBZW1QLEdBQVNuUCxFQUFRLFlBRTVDekIsRUFBTSxDQUFBLEVBQ05BLEVBQUk0USxDQUFLLEVBQUlxaUMsR0FDTkUsSUFBZ0IsY0FDdkJuekMsRUFBSW16QyxDQUFXLEVBQUlGLEVBRTFCLENBRURBLEVBQU9qekMsQ0FDVixDQUVELE9BQU9pekMsQ0FDWCxFQUVJLFVBQVksU0FBU0csRUFBcUJDLEVBQVU1eUMsRUFBS2dCLEVBQVN1eEMsRUFBYyxDQUNoRixHQUFLSyxFQUtMLEtBQUl6ckMsRUFBTW5HLEVBQVEsVUFBWTR4QyxFQUFTLFFBQVEsY0FBZSxNQUFNLEVBQUlBLEVBSXBFMUMsRUFBVyxlQUNYaGlCLEVBQVEsZ0JBSVIyaEIsRUFBVTd1QyxFQUFRLE1BQVEsR0FBS2t2QyxFQUFTLEtBQUsvb0MsQ0FBRyxFQUNoRDBDLEVBQVNnbUMsRUFBVTFvQyxFQUFJLE1BQU0sRUFBRzBvQyxFQUFRLEtBQUssRUFBSTFvQyxFQUlqREYsRUFBTyxDQUFBLEVBQ1gsR0FBSTRDLEVBQVEsQ0FFUixHQUFJLENBQUM3SSxFQUFRLGNBQWdCLElBQUksS0FBSyxPQUFPLFVBQVc2SSxDQUFNLEdBQ3RELENBQUM3SSxFQUFRLGdCQUNULE9BSVJpRyxFQUFLLEtBQUs0QyxDQUFNLENBQ25CLENBS0QsUUFESTlKLEVBQUksRUFDRGlCLEVBQVEsTUFBUSxJQUFNNnVDLEVBQVUzaEIsRUFBTSxLQUFLL21CLENBQUcsS0FBTyxNQUFRcEgsRUFBSWlCLEVBQVEsT0FBTyxDQUVuRixHQURBakIsR0FBSyxFQUNELENBQUNpQixFQUFRLGNBQWdCLElBQUksS0FBSyxPQUFPLFVBQVc2dUMsRUFBUSxDQUFDLEVBQUUsTUFBTSxFQUFHLEVBQUUsQ0FBQyxHQUN2RSxDQUFDN3VDLEVBQVEsZ0JBQ1QsT0FHUmlHLEVBQUssS0FBSzRvQyxFQUFRLENBQUMsQ0FBQyxDQUN2QixDQUlELE9BQUlBLEdBQ0E1b0MsRUFBSyxLQUFLLElBQU1FLEVBQUksTUFBTTBvQyxFQUFRLEtBQUssRUFBSSxHQUFHLEVBRzNDLFlBQVk1b0MsRUFBTWpILEVBQUtnQixFQUFTdXhDLENBQVksRUFDdkQsRUFFSSxzQkFBd0IsU0FBU00sRUFBc0JueUIsRUFBTSxDQUM3RCxHQUFJLENBQUNBLEVBQ0QsT0FBTyxTQUdYLEdBQUksT0FBT0EsRUFBSyxpQkFBcUIsS0FBZSxPQUFPQSxFQUFLLGtCQUFxQixVQUNqRixNQUFNLElBQUksVUFBVSx3RUFBd0UsRUFHaEcsR0FBSSxPQUFPQSxFQUFLLGdCQUFvQixLQUFlLE9BQU9BLEVBQUssaUJBQW9CLFVBQy9FLE1BQU0sSUFBSSxVQUFVLHVFQUF1RSxFQUcvRixHQUFJQSxFQUFLLFVBQVksTUFBUSxPQUFPQSxFQUFLLFFBQVksS0FBZSxPQUFPQSxFQUFLLFNBQVksV0FDeEYsTUFBTSxJQUFJLFVBQVUsK0JBQStCLEVBR3ZELEdBQUksT0FBT0EsRUFBSyxRQUFZLEtBQWVBLEVBQUssVUFBWSxTQUFXQSxFQUFLLFVBQVksYUFDcEYsTUFBTSxJQUFJLFVBQVUsbUVBQW1FLEVBRTNGLElBQUk4dUIsRUFBVSxPQUFPOXVCLEVBQUssUUFBWSxJQUFjLFNBQVMsUUFBVUEsRUFBSyxRQUV4RWxZLEVBQWEsT0FBT2tZLEVBQUssV0FBZSxJQUFjLFNBQVMsV0FBYUEsRUFBSyxXQUVyRixHQUFJbFksSUFBZSxXQUFhQSxJQUFlLFNBQVdBLElBQWUsT0FDckUsTUFBTSxJQUFJLFVBQVUsOERBQThELEVBR3RGLElBQUl1b0MsRUFBWSxPQUFPcndCLEVBQUssVUFBYyxJQUFjQSxFQUFLLGtCQUFvQixHQUFPLEdBQU8sU0FBUyxVQUFZLENBQUMsQ0FBQ0EsRUFBSyxVQUUzSCxNQUFPLENBQ0gsVUFBV3F3QixFQUNYLGlCQUFrQixPQUFPcndCLEVBQUssa0JBQXFCLFVBQVksQ0FBQyxDQUFDQSxFQUFLLGlCQUFtQixTQUFTLGlCQUNsRyxnQkFBaUIsT0FBT0EsRUFBSyxpQkFBb0IsVUFBWUEsRUFBSyxnQkFBa0IsU0FBUyxnQkFDN0YsWUFBYSxPQUFPQSxFQUFLLGFBQWdCLFVBQVlBLEVBQUssWUFBYyxTQUFTLFlBQ2pGLFdBQVksT0FBT0EsRUFBSyxZQUFlLFNBQVdBLEVBQUssV0FBYSxTQUFTLFdBQzdFLFFBQVM4dUIsRUFDVCxnQkFBaUIsT0FBTzl1QixFQUFLLGlCQUFvQixVQUFZQSxFQUFLLGdCQUFrQixTQUFTLGdCQUM3RixNQUFPLE9BQU9BLEVBQUssT0FBVSxVQUFZQSxFQUFLLE1BQVEsU0FBUyxNQUMvRCxnQkFBaUIsT0FBT0EsRUFBSyxpQkFBb0IsVUFBWUEsRUFBSyxnQkFBa0IsU0FBUyxnQkFDN0YsUUFBUyxPQUFPQSxFQUFLLFNBQVksV0FBYUEsRUFBSyxRQUFVLFNBQVMsUUFDdEUsVUFBVyxPQUFPQSxFQUFLLFdBQWMsVUFBWSxNQUFNLFNBQVNBLEVBQUssU0FBUyxFQUFJQSxFQUFLLFVBQVksU0FBUyxVQUU1RyxNQUFRLE9BQU9BLEVBQUssT0FBVSxVQUFZQSxFQUFLLFFBQVUsR0FBUyxDQUFDQSxFQUFLLE1BQVEsU0FBUyxNQUN6RixXQUFZbFksRUFDWixrQkFBbUJrWSxFQUFLLG9CQUFzQixHQUM5Qyx5QkFBMEIsT0FBT0EsRUFBSywwQkFBNkIsVUFBWUEsRUFBSyx5QkFBMkIsU0FBUyx5QkFDeEgsZUFBZ0IsT0FBT0EsRUFBSyxnQkFBbUIsU0FBV0EsRUFBSyxlQUFpQixTQUFTLGVBQ3pGLFlBQWFBLEVBQUssY0FBZ0IsR0FDbEMsYUFBYyxPQUFPQSxFQUFLLGNBQWlCLFVBQVlBLEVBQUssYUFBZSxTQUFTLGFBQ3BGLG1CQUFvQixPQUFPQSxFQUFLLG9CQUF1QixVQUFZQSxFQUFLLG1CQUFxQixTQUFTLGtCQUM5RyxDQUNBLEVBRUFveUIsUUFBaUIsU0FBVW5hLEVBQUtqWSxFQUFNLENBQ2xDLElBQUkxZixFQUFVLHNCQUFzQjBmLENBQUksRUFFeEMsR0FBSWlZLElBQVEsSUFBTUEsSUFBUSxNQUFRLE9BQU9BLEVBQVEsSUFDN0MsT0FBTzMzQixFQUFRLGFBQWUsT0FBTyxPQUFPLElBQUksRUFBSSxHQVN4RCxRQU5JK3hDLEVBQVUsT0FBT3BhLEdBQVEsU0FBVyxZQUFZQSxFQUFLMzNCLENBQU8sRUFBSTIzQixFQUNoRXA1QixFQUFNeUIsRUFBUSxhQUFlLE9BQU8sT0FBTyxJQUFJLEVBQUksR0FJbkRpRyxFQUFPLE9BQU8sS0FBSzhyQyxDQUFPLEVBQ3JCaHpDLEVBQUksRUFBR0EsRUFBSWtILEVBQUssT0FBUSxFQUFFbEgsRUFBRyxDQUNsQyxJQUFJb0gsRUFBTUYsRUFBS2xILENBQUMsRUFDWml6QyxFQUFTLFVBQVU3ckMsRUFBSzRyQyxFQUFRNXJDLENBQUcsRUFBR25HLEVBQVMsT0FBTzIzQixHQUFRLFFBQVEsRUFDMUVwNUIsRUFBTSxNQUFNLE1BQU1BLEVBQUt5ekMsRUFBUWh5QyxDQUFPLENBQ3pDLENBRUQsT0FBSUEsRUFBUSxjQUFnQixHQUNqQnpCLEVBR0osTUFBTSxRQUFRQSxDQUFHLENBQzVCLEVDOVJJLFVBQVk2eEIsWUFDWixNQUFRQyxRQUNSLFFBQVVxRSxVQUVkLElBQWlCLENBQ2IsUUFDQSxNQUNBLFNBQ0osc0NDTkMsU0FBVXgzQixFQUFRQyxFQUFTLENBRWxCQyxFQUFBLFFBQWlCRCxFQUFTLENBaUJwQyxHQUFHLE9BQU8sS0FBUyxJQUFjLEtBQzNCLE9BQU8sT0FBVyxJQUFjLE9BQ0lELGVBQ3JCLFVBQVksQ0FhN0IsSUFBSWlDLEVBQVUsUUFJVjBsQyxFQUFVMWxDLEVBQ1Y4eUMsRUFBYSxPQUFPLFFBQVcsV0FDL0JDLEVBQU0sT0FBTyxhQUFnQixXQUFhLElBQUksWUFBZ0IsT0FDOURDLEVBQU0sT0FBTyxhQUFnQixXQUFhLElBQUksWUFBZ0IsT0FDOURDLEVBQVEsb0VBQ1JDLEVBQVMsTUFBTSxVQUFVLE1BQU0sS0FBS0QsQ0FBSyxFQUN6Q0UsRUFBVSxTQUFVcndDLEVBQUcsQ0FDdkIsSUFBSXN3QyxHQUFNLENBQUEsRUFDVixPQUFBdHdDLEVBQUUsUUFBUSxTQUFVb2tDLEdBQUd0bkMsR0FBRyxDQUFFLE9BQU93ekMsR0FBSWxNLEVBQUMsRUFBSXRuQyxFQUFFLENBQUUsRUFDekN3ekMsRUFDVixFQUFFRixDQUFNLEVBQ0xHLEVBQVEsMEVBQ1JDLEVBQVUsT0FBTyxhQUFhLEtBQUssTUFBTSxFQUN6Q0MsRUFBVyxPQUFPLFdBQVcsTUFBUyxXQUNwQyxXQUFXLEtBQUssS0FBSyxVQUFVLEVBQy9CLFNBQVVDLEVBQUksQ0FBRSxPQUFPLElBQUksV0FBVyxNQUFNLFVBQVUsTUFBTSxLQUFLQSxFQUFJLENBQUMsQ0FBQyxDQUFFLEVBQzNFQyxFQUFhLFNBQVUxeUMsRUFBSyxDQUFFLE9BQU9BLEVBQ3BDLFFBQVEsS0FBTSxFQUFFLEVBQUUsUUFBUSxTQUFVLFNBQVUyeUMsR0FBSSxDQUFFLE9BQU9BLElBQU0sSUFBTSxJQUFNLEdBQU0sQ0FBQSxDQUFFLEVBQ3RGQyxFQUFXLFNBQVU3dUIsRUFBRyxDQUFFLE9BQU9BLEVBQUUsUUFBUSxvQkFBcUIsRUFBRSxHQUlsRTh1QixFQUFlLFNBQVVDLEVBQUssQ0FJOUIsUUFGSUMsR0FBS0MsR0FBSUMsR0FBSUMsR0FBSUMsR0FBTSxHQUN2QkMsR0FBTU4sRUFBSSxPQUFTLEVBQ2RqMEMsR0FBSSxFQUFHQSxHQUFJaTBDLEVBQUksUUFBUyxDQUM3QixJQUFLRSxHQUFLRixFQUFJLFdBQVdqMEMsSUFBRyxHQUFLLE1BQzVCbzBDLEdBQUtILEVBQUksV0FBV2owQyxJQUFHLEdBQUssTUFDNUJxMEMsR0FBS0osRUFBSSxXQUFXajBDLElBQUcsR0FBSyxJQUM3QixNQUFNLElBQUksVUFBVSx5QkFBeUIsRUFDakRrMEMsR0FBT0MsSUFBTSxHQUFPQyxJQUFNLEVBQUtDLEdBQy9CQyxJQUFPaEIsRUFBT1ksSUFBTyxHQUFLLEVBQUUsRUFDdEJaLEVBQU9ZLElBQU8sR0FBSyxFQUFFLEVBQ3JCWixFQUFPWSxJQUFPLEVBQUksRUFBRSxFQUNwQlosRUFBT1ksR0FBTSxFQUFFLENBQ3hCLENBQ0QsT0FBT0ssR0FBTUQsR0FBSSxNQUFNLEVBQUdDLEdBQU0sQ0FBQyxFQUFJLE1BQU0sVUFBVUEsRUFBRyxFQUFJRCxFQUNwRSxFQU1RRSxFQUFRLE9BQU8sTUFBUyxXQUFhLFNBQVVQLEVBQUssQ0FBRSxPQUFPLEtBQUtBLENBQUcsQ0FBSSxFQUN2RWYsRUFBYSxTQUFVZSxFQUFLLENBQUUsT0FBTyxPQUFPLEtBQUtBLEVBQUssUUFBUSxFQUFFLFNBQVMsUUFBUSxDQUFJLEVBQ2pGRCxFQUNOUyxFQUFrQnZCLEVBQ2hCLFNBQVV3QixFQUFLLENBQUUsT0FBTyxPQUFPLEtBQUtBLENBQUcsRUFBRSxTQUFTLFFBQVEsQ0FBSSxFQUM5RCxTQUFVQSxFQUFLLENBSWIsUUFGSUMsR0FBVSxLQUNWQyxHQUFPLENBQUEsRUFDRjUwQyxHQUFJLEVBQUdrUCxHQUFJd2xDLEVBQUksT0FBUTEwQyxHQUFJa1AsR0FBR2xQLElBQUsyMEMsR0FDeENDLEdBQUssS0FBS2xCLEVBQVEsTUFBTSxLQUFNZ0IsRUFBSSxTQUFTMTBDLEdBQUdBLEdBQUkyMEMsRUFBTyxDQUFDLENBQUMsRUFFL0QsT0FBT0gsRUFBTUksR0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUN0QyxFQU1RQyxFQUFpQixTQUFVSCxFQUFLSSxHQUFTLENBQ3pDLE9BQUlBLEtBQVksU0FBVUEsR0FBVSxJQUM3QkEsR0FBVWpCLEVBQVdZLEVBQWdCQyxDQUFHLENBQUMsRUFBSUQsRUFBZ0JDLENBQUcsQ0FDL0UsRUFJUUssRUFBVSxTQUFVek4sRUFBRyxDQUN2QixHQUFJQSxFQUFFLE9BQVMsRUFBRyxDQUNkLElBQUkwTixHQUFLMU4sRUFBRSxXQUFXLENBQUMsRUFDdkIsT0FBTzBOLEdBQUssSUFBTzFOLEVBQ2IwTixHQUFLLEtBQVN0QixFQUFRLElBQVFzQixLQUFPLENBQUUsRUFDbkN0QixFQUFRLElBQVFzQixHQUFLLEVBQUssRUFDekJ0QixFQUFRLElBQVNzQixLQUFPLEdBQU0sRUFBSyxFQUNoQ3RCLEVBQVEsSUFBU3NCLEtBQU8sRUFBSyxFQUFLLEVBQ2xDdEIsRUFBUSxJQUFRc0IsR0FBSyxFQUFLLENBQzNDLEtBQ0ksQ0FDRCxJQUFJQSxHQUFLLE9BQ0YxTixFQUFFLFdBQVcsQ0FBQyxFQUFJLE9BQVUsTUFDNUJBLEVBQUUsV0FBVyxDQUFDLEVBQUksT0FDekIsT0FBUW9NLEVBQVEsSUFBU3NCLEtBQU8sR0FBTSxDQUFLLEVBQ3JDdEIsRUFBUSxJQUFTc0IsS0FBTyxHQUFNLEVBQUssRUFDbkN0QixFQUFRLElBQVNzQixLQUFPLEVBQUssRUFBSyxFQUNsQ3RCLEVBQVEsSUFBUXNCLEdBQUssRUFBSyxDQUNuQyxDQUNULEVBQ1FDLEVBQVUsZ0RBTVZDLEdBQU8sU0FBVUMsRUFBRyxDQUFFLE9BQU9BLEVBQUUsUUFBUUYsRUFBU0YsQ0FBTyxHQUV2RHZZLEVBQVUwVyxFQUNSLFNBQVVodUIsRUFBRyxDQUFFLE9BQU8sT0FBTyxLQUFLQSxFQUFHLE1BQU0sRUFBRSxTQUFTLFFBQVEsQ0FBSSxFQUNsRWt1QixFQUNJLFNBQVVsdUIsRUFBRyxDQUFFLE9BQU91dkIsRUFBZ0JyQixFQUFJLE9BQU9sdUIsQ0FBQyxDQUFDLENBQUksRUFDdkQsU0FBVUEsRUFBRyxDQUFFLE9BQU9zdkIsRUFBTVUsR0FBS2h3QixDQUFDLENBQUMsR0FNekN1WCxFQUFTLFNBQVV0N0IsRUFBSzJ6QyxHQUFTLENBQ2pDLE9BQUlBLEtBQVksU0FBVUEsR0FBVSxJQUM3QkEsR0FDRGpCLEVBQVdyWCxFQUFRcjdCLENBQUcsQ0FBQyxFQUN2QnE3QixFQUFRcjdCLENBQUcsQ0FDekIsRUFLUWkwQyxFQUFZLFNBQVVqMEMsRUFBSyxDQUFFLE9BQU9zN0IsRUFBT3Q3QixFQUFLLEVBQUksR0FJcERrMEMsRUFBVSw4RUFDVkMsRUFBVSxTQUFVQyxFQUFNLENBQzFCLE9BQVFBLEVBQUssT0FBTSxDQUNmLElBQUssR0FDRCxJQUFJQyxJQUFPLEVBQU9ELEVBQUssV0FBVyxDQUFDLElBQU0sSUFDakMsR0FBT0EsRUFBSyxXQUFXLENBQUMsSUFBTSxJQUM5QixHQUFPQSxFQUFLLFdBQVcsQ0FBQyxJQUFNLEVBQy9CLEdBQU9BLEVBQUssV0FBVyxDQUFDLEVBQUlscUIsR0FBU21xQixHQUFLLE1BQ2pELE9BQVE5QixHQUFTcm9CLEtBQVcsSUFBTSxLQUFNLEVBQ2xDcW9CLEdBQVNyb0IsR0FBUyxNQUFTLEtBQU0sRUFDM0MsSUFBSyxHQUNELE9BQU9xb0IsR0FBVSxHQUFPNkIsRUFBSyxXQUFXLENBQUMsSUFBTSxJQUN2QyxHQUFPQSxFQUFLLFdBQVcsQ0FBQyxJQUFNLEVBQy9CLEdBQU9BLEVBQUssV0FBVyxDQUFDLENBQUUsRUFDckMsUUFDSSxPQUFPN0IsR0FBVSxHQUFPNkIsRUFBSyxXQUFXLENBQUMsSUFBTSxFQUN4QyxHQUFPQSxFQUFLLFdBQVcsQ0FBQyxDQUFFLENBQ3hDLENBQ1QsRUFNUUUsRUFBTyxTQUFVdHlDLEVBQUcsQ0FBRSxPQUFPQSxFQUFFLFFBQVFreUMsRUFBU0MsQ0FBTyxHQUl2REksRUFBZSxTQUFVcEIsRUFBSyxDQUc5QixHQURBQSxFQUFNQSxFQUFJLFFBQVEsT0FBUSxFQUFFLEVBQ3hCLENBQUNiLEVBQU0sS0FBS2EsQ0FBRyxFQUNmLE1BQU0sSUFBSSxVQUFVLG1CQUFtQixFQUMzQ0EsR0FBTyxLQUFLLE1BQU0sR0FBS0EsRUFBSSxPQUFTLEVBQUUsRUFFdEMsUUFESXFCLEdBQUsxQixHQUFNLEdBQUkyQixHQUFJQyxHQUNkNzFDLEdBQUksRUFBR0EsR0FBSXMwQyxFQUFJLFFBQ3BCcUIsR0FBTXBDLEVBQU9lLEVBQUksT0FBT3QwQyxJQUFHLENBQUMsR0FBSyxHQUMzQnV6QyxFQUFPZSxFQUFJLE9BQU90MEMsSUFBRyxDQUFDLEdBQUssSUFDMUI0MUMsR0FBS3JDLEVBQU9lLEVBQUksT0FBT3QwQyxJQUFHLENBQUMsSUFBTSxHQUNqQzYxQyxHQUFLdEMsRUFBT2UsRUFBSSxPQUFPdDBDLElBQUcsQ0FBQyxHQUNsQ2kwQyxJQUFPMkIsS0FBTyxHQUFLbEMsRUFBUWlDLElBQU8sR0FBSyxHQUFHLEVBQ3BDRSxLQUFPLEdBQUtuQyxFQUFRaUMsSUFBTyxHQUFLLElBQUtBLElBQU8sRUFBSSxHQUFHLEVBQy9DakMsRUFBUWlDLElBQU8sR0FBSyxJQUFLQSxJQUFPLEVBQUksSUFBS0EsR0FBTSxHQUFHLEVBRWhFLE9BQU8xQixFQUNmLEVBTVE2QixFQUFRLE9BQU8sTUFBUyxXQUFhLFNBQVV4QixFQUFLLENBQUUsT0FBTyxLQUFLUCxFQUFTTyxDQUFHLENBQUMsQ0FBSSxFQUNqRnBCLEVBQWEsU0FBVW9CLEVBQUssQ0FBRSxPQUFPLE9BQU8sS0FBS0EsRUFBSyxRQUFRLEVBQUUsU0FBUyxRQUFRLENBQUksRUFDakZvQixFQUVOSyxHQUFnQjdDLEVBQ2QsU0FBVWh3QyxFQUFHLENBQUUsT0FBT3l3QyxFQUFTLE9BQU8sS0FBS3p3QyxFQUFHLFFBQVEsQ0FBQyxDQUFJLEVBQzNELFNBQVVBLEVBQUcsQ0FBRSxPQUFPeXdDLEVBQVNtQyxFQUFNNXlDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLFNBQVVva0MsR0FBRyxDQUFFLE9BQU9BLEdBQUUsV0FBVyxDQUFDLENBQUksQ0FBQSxDQUFDLEdBSWpHME8sR0FBZSxTQUFVOXlDLEVBQUcsQ0FBRSxPQUFPNnlDLEdBQWNFLEdBQU8veUMsQ0FBQyxDQUFDLEdBRTVEZ3pDLEdBQVVoRCxFQUNSLFNBQVVod0MsRUFBRyxDQUFFLE9BQU8sT0FBTyxLQUFLQSxFQUFHLFFBQVEsRUFBRSxTQUFTLE1BQU0sQ0FBSSxFQUNsRWl3QyxFQUNJLFNBQVVqd0MsRUFBRyxDQUFFLE9BQU9pd0MsRUFBSSxPQUFPNEMsR0FBYzd5QyxDQUFDLENBQUMsQ0FBSSxFQUNyRCxTQUFVQSxFQUFHLENBQUUsT0FBT3V5QyxFQUFLSyxFQUFNNXlDLENBQUMsQ0FBQyxHQUN6Qyt5QyxHQUFTLFNBQVUveUMsRUFBRyxDQUFFLE9BQU82d0MsRUFBUzd3QyxFQUFFLFFBQVEsUUFBUyxTQUFVNHdDLEdBQUksQ0FBRSxPQUFPQSxJQUFNLElBQU0sSUFBTSxHQUFNLENBQUEsQ0FBQyxHQU0zR3FDLEdBQVMsU0FBVWgxQyxFQUFLLENBQUUsT0FBTyswQyxHQUFRRCxHQUFPOTBDLENBQUcsQ0FBQyxHQUtwRGkxQyxHQUFVLFNBQVVqMUMsRUFBSyxDQUN6QixHQUFJLE9BQU9BLEdBQVEsU0FDZixNQUFPLEdBQ1gsSUFBSStqQixHQUFJL2pCLEVBQUksUUFBUSxPQUFRLEVBQUUsRUFBRSxRQUFRLFVBQVcsRUFBRSxFQUNyRCxNQUFPLENBQUMsb0JBQW9CLEtBQUsrakIsRUFBQyxHQUFLLENBQUMsb0JBQW9CLEtBQUtBLEVBQUMsQ0FDMUUsRUFFUW14QixHQUFVLFNBQVUvbEMsRUFBRyxDQUN2QixNQUFPLENBQ0gsTUFBT0EsRUFBRyxXQUFZLEdBQU8sU0FBVSxHQUFNLGFBQWMsRUFDdkUsQ0FDQSxFQUlRZ21DLEdBQWUsVUFBWSxDQUMzQixJQUFJQyxFQUFPLFNBQVVyMUMsR0FBTWlwQixHQUFNLENBQUUsT0FBTyxPQUFPLGVBQWUsT0FBTyxVQUFXanBCLEdBQU1tMUMsR0FBUWxzQixFQUFJLENBQUMsQ0FBRSxFQUN2R29zQixFQUFLLGFBQWMsVUFBWSxDQUFFLE9BQU9KLEdBQU8sSUFBSSxDQUFFLENBQUUsRUFDdkRJLEVBQUssV0FBWSxTQUFVekIsR0FBUyxDQUFFLE9BQU9yWSxFQUFPLEtBQU1xWSxFQUFPLENBQUUsQ0FBRSxFQUNyRXlCLEVBQUssY0FBZSxVQUFZLENBQUUsT0FBTzlaLEVBQU8sS0FBTSxFQUFJLENBQUUsQ0FBRSxFQUM5RDhaLEVBQUssY0FBZSxVQUFZLENBQUUsT0FBTzlaLEVBQU8sS0FBTSxFQUFJLENBQUUsQ0FBRSxFQUM5RDhaLEVBQUssZUFBZ0IsVUFBWSxDQUFFLE9BQU9QLEdBQWEsSUFBSSxDQUFFLENBQUUsQ0FDdkUsRUFJUVEsR0FBbUIsVUFBWSxDQUMvQixJQUFJRCxFQUFPLFNBQVVyMUMsR0FBTWlwQixHQUFNLENBQUUsT0FBTyxPQUFPLGVBQWUsV0FBVyxVQUFXanBCLEdBQU1tMUMsR0FBUWxzQixFQUFJLENBQUMsQ0FBRSxFQUMzR29zQixFQUFLLFdBQVksU0FBVXpCLEdBQVMsQ0FBRSxPQUFPRCxFQUFlLEtBQU1DLEVBQU8sQ0FBRSxDQUFFLEVBQzdFeUIsRUFBSyxjQUFlLFVBQVksQ0FBRSxPQUFPMUIsRUFBZSxLQUFNLEVBQUksQ0FBRSxDQUFFLEVBQ3RFMEIsRUFBSyxjQUFlLFVBQVksQ0FBRSxPQUFPMUIsRUFBZSxLQUFNLEVBQUksQ0FBRSxDQUFFLENBQzlFLEVBSVE0QixHQUFpQixVQUFZLENBQzdCSCxLQUNBRSxJQUNSLEVBQ1FFLEdBQVUsQ0FDVixRQUFTdDJDLEVBQ1QsUUFBUzBsQyxFQUNULEtBQU1nUSxFQUNOLGFBQWNKLEVBQ2QsS0FBTWxCLEVBQ04sYUFBY1IsRUFDZCxXQUFZbUMsR0FDWixTQUFVMVosRUFDVixPQUFRQSxFQUNSLFVBQVcyWSxFQUNYLFVBQVdBLEVBQ1gsS0FBTUYsR0FDTixLQUFNTyxFQUNOLE9BQVFVLEdBQ1IsUUFBU0MsR0FDVCxlQUFnQnZCLEVBQ2hCLGFBQWNtQixHQUNkLGFBQWNNLEdBQ2QsaUJBQWtCRSxHQUNsQixlQUFnQkMsRUFDeEIsRUFNSSxPQUFBQyxHQUFRLE9BQVMsR0FDakIsT0FBTyxLQUFLQSxFQUFPLEVBQUUsUUFBUSxTQUFVNW5CLEVBQUcsQ0FBRSxPQUFPNG5CLEdBQVEsT0FBTzVuQixDQUFDLEVBQUk0bkIsR0FBUTVuQixDQUFDLENBQUksQ0FBQSxFQUM3RTRuQixFQUNYLENBQUMsNkNDeFRHcGpCLFdBQVkvMEIsZ0JBQVFBLGVBQUssVUFBYSxVQUFZLENBQ2xEKzBCLGtCQUFXLE9BQU8sUUFBVSxTQUFTcGIsRUFBRyxDQUNwQyxRQUFTZ04sRUFBR2xsQixFQUFJLEVBQUdxTyxFQUFJLFVBQVUsT0FBUXJPLEVBQUlxTyxFQUFHck8sSUFBSyxDQUNqRGtsQixFQUFJLFVBQVVsbEIsQ0FBQyxFQUNmLFFBQVM2ZixLQUFLcUYsRUFBTyxPQUFPLFVBQVUsZUFBZSxLQUFLQSxFQUFHckYsQ0FBQyxJQUMxRDNILEVBQUUySCxDQUFDLEVBQUlxRixFQUFFckYsQ0FBQyxFQUNqQixDQUNELE9BQU8zSCxDQUNmLEVBQ1dvYixXQUFTLE1BQU0sS0FBTSxTQUFTLENBQ3pDLEVBQ0ksVUFBYS8wQixnQkFBUUEsZUFBSyxXQUFjLFNBQVVpekIsRUFBU0MsRUFBWUMsRUFBR0MsRUFBVyxDQUNyRixTQUFTQyxFQUFNbnZCLEVBQU8sQ0FBRSxPQUFPQSxhQUFpQml2QixFQUFJanZCLEVBQVEsSUFBSWl2QixFQUFFLFNBQVVoaEIsRUFBUyxDQUFFQSxFQUFRak8sQ0FBSyxDQUFFLENBQUUsQ0FBSSxDQUM1RyxPQUFPLElBQUtpdkIsSUFBTUEsRUFBSSxVQUFVLFNBQVVoaEIsRUFBU0MsRUFBUSxDQUN2RCxTQUFTa2hCLEVBQVVwdkIsRUFBTyxDQUFFLEdBQUksQ0FBRXF2QixFQUFLSCxFQUFVLEtBQUtsdkIsQ0FBSyxDQUFDLENBQUUsT0FBVXlQLEVBQUcsQ0FBRXZCLEVBQU91QixDQUFDLEVBQU0sQ0FDM0YsU0FBUzZmLEVBQVN0dkIsRUFBTyxDQUFFLEdBQUksQ0FBRXF2QixFQUFLSCxFQUFVLE1BQVNsdkIsQ0FBSyxDQUFDLENBQUksT0FBUXlQLEVBQUcsQ0FBRXZCLEVBQU91QixDQUFDLEVBQU0sQ0FDOUYsU0FBUzRmLEVBQUs3b0IsRUFBUSxDQUFFQSxFQUFPLEtBQU95SCxFQUFRekgsRUFBTyxLQUFLLEVBQUkyb0IsRUFBTTNvQixFQUFPLEtBQUssRUFBRSxLQUFLNG9CLEVBQVdFLENBQVEsQ0FBSSxDQUM5R0QsR0FBTUgsRUFBWUEsRUFBVSxNQUFNSCxFQUFTQyxHQUFjLENBQUUsQ0FBQSxHQUFHLEtBQUksQ0FBRSxDQUM1RSxDQUFLLENBQ0wsRUFDSSxZQUFlbHpCLGdCQUFRQSxlQUFLLGFBQWdCLFNBQVVpekIsRUFBU3JILEVBQU0sQ0FDckUsSUFBSTFhLEVBQUksQ0FBRSxNQUFPLEVBQUcsS0FBTSxVQUFXLENBQUUsR0FBSXlJLEVBQUUsQ0FBQyxFQUFJLEVBQUcsTUFBTUEsRUFBRSxDQUFDLEVBQUcsT0FBT0EsRUFBRSxDQUFDLENBQUksRUFBRSxLQUFNLENBQUUsRUFBRSxJQUFLLENBQUEsQ0FBSSxFQUFFK1osRUFBR0MsRUFBR2hhLEVBQUdpYSxFQUMvRyxPQUFPQSxFQUFJLENBQUUsS0FBTUMsRUFBSyxDQUFDLEVBQUcsTUFBU0EsRUFBSyxDQUFDLEVBQUcsT0FBVUEsRUFBSyxDQUFDLENBQUcsRUFBRSxPQUFPLFFBQVcsYUFBZUQsRUFBRSxPQUFPLFFBQVEsRUFBSSxVQUFXLENBQUUsT0FBTyxJQUFPLEdBQUdBLEVBQ3ZKLFNBQVNDLEVBQUsvakIsRUFBRyxDQUFFLE9BQU8sU0FBVWlDLEVBQUcsQ0FBRSxPQUFPd2hCLEVBQUssQ0FBQ3pqQixFQUFHaUMsQ0FBQyxDQUFDLENBQUksQ0FBRyxDQUNsRSxTQUFTd2hCLEVBQUtPLEVBQUksQ0FDZCxHQUFJSixFQUFHLE1BQU0sSUFBSSxVQUFVLGlDQUFpQyxFQUM1RCxLQUFPRSxJQUFNQSxFQUFJLEVBQUdFLEVBQUcsQ0FBQyxJQUFNNWlCLEVBQUksSUFBS0EsR0FBRyxHQUFJLENBQzFDLEdBQUl3aUIsRUFBSSxFQUFHQyxJQUFNaGEsRUFBSW1hLEVBQUcsQ0FBQyxFQUFJLEVBQUlILEVBQUUsT0FBWUcsRUFBRyxDQUFDLEVBQUlILEVBQUUsU0FBY2hhLEVBQUlnYSxFQUFFLFNBQWNoYSxFQUFFLEtBQUtnYSxDQUFDLEVBQUcsR0FBS0EsRUFBRSxPQUFTLEVBQUVoYSxFQUFJQSxFQUFFLEtBQUtnYSxFQUFHRyxFQUFHLENBQUMsQ0FBQyxHQUFHLEtBQU0sT0FBT25hLEVBRTNKLE9BRElnYSxFQUFJLEVBQUdoYSxJQUFHbWEsRUFBSyxDQUFDQSxFQUFHLENBQUMsRUFBSSxFQUFHbmEsRUFBRSxLQUFLLEdBQzlCbWEsRUFBRyxDQUFDLEVBQUMsQ0FDVCxJQUFLLEdBQUcsSUFBSyxHQUFHbmEsRUFBSW1hLEVBQUksTUFDeEIsSUFBSyxHQUFHLE9BQUE1aUIsRUFBRSxRQUFnQixDQUFFLE1BQU80aUIsRUFBRyxDQUFDLEVBQUcsS0FBTSxFQUFLLEVBQ3JELElBQUssR0FBRzVpQixFQUFFLFFBQVN5aUIsRUFBSUcsRUFBRyxDQUFDLEVBQUdBLEVBQUssQ0FBQyxDQUFDLEVBQUcsU0FDeEMsSUFBSyxHQUFHQSxFQUFLNWlCLEVBQUUsSUFBSSxNQUFPQSxFQUFFLEtBQUssSUFBRyxFQUFJLFNBQ3hDLFFBQ0ksR0FBTXlJLEVBQUl6SSxFQUFFLEtBQU0sRUFBQXlJLEVBQUlBLEVBQUUsT0FBUyxHQUFLQSxFQUFFQSxFQUFFLE9BQVMsQ0FBQyxLQUFPbWEsRUFBRyxDQUFDLElBQU0sR0FBS0EsRUFBRyxDQUFDLElBQU0sR0FBSSxDQUFFNWlCLEVBQUksRUFBRyxRQUFXLENBQzVHLEdBQUk0aUIsRUFBRyxDQUFDLElBQU0sSUFBTSxDQUFDbmEsR0FBTW1hLEVBQUcsQ0FBQyxFQUFJbmEsRUFBRSxDQUFDLEdBQUttYSxFQUFHLENBQUMsRUFBSW5hLEVBQUUsQ0FBQyxHQUFLLENBQUV6SSxFQUFFLE1BQVE0aUIsRUFBRyxDQUFDLEVBQUcsS0FBUSxDQUN0RixHQUFJQSxFQUFHLENBQUMsSUFBTSxHQUFLNWlCLEVBQUUsTUFBUXlJLEVBQUUsQ0FBQyxFQUFHLENBQUV6SSxFQUFFLE1BQVF5SSxFQUFFLENBQUMsRUFBR0EsRUFBSW1hLEVBQUksS0FBUSxDQUNyRSxHQUFJbmEsR0FBS3pJLEVBQUUsTUFBUXlJLEVBQUUsQ0FBQyxFQUFHLENBQUV6SSxFQUFFLE1BQVF5SSxFQUFFLENBQUMsRUFBR3pJLEVBQUUsSUFBSSxLQUFLNGlCLENBQUUsRUFBRyxLQUFRLENBQy9EbmEsRUFBRSxDQUFDLEdBQUd6SSxFQUFFLElBQUksSUFBRyxFQUNuQkEsRUFBRSxLQUFLLElBQUssRUFBRSxRQUNyQixDQUNENGlCLEVBQUtsSSxFQUFLLEtBQUtxSCxFQUFTL2hCLENBQUMsQ0FDNUIsT0FBUXlDLEVBQUcsQ0FBRW1nQixFQUFLLENBQUMsRUFBR25nQixDQUFDLEVBQUdnZ0IsRUFBSSxDQUFFLFFBQVcsQ0FBRUQsRUFBSS9aLEVBQUksQ0FBSSxDQUMxRCxHQUFJbWEsRUFBRyxDQUFDLEVBQUksRUFBRyxNQUFNQSxFQUFHLENBQUMsRUFBRyxNQUFPLENBQUUsTUFBT0EsRUFBRyxDQUFDLEVBQUlBLEVBQUcsQ0FBQyxFQUFJLE9BQVEsS0FBTSxHQUM3RSxDQUNMLEVBQ0ksZ0JBQW1COXpCLGdCQUFRQSxlQUFLLGlCQUFvQixTQUFVZzBCLEVBQUssQ0FDbkUsT0FBUUEsR0FBT0EsRUFBSSxXQUFjQSxFQUFNLENBQUUsUUFBV0EsRUFDeEQsRUFDQSxPQUFPLGVBQWVva0IsOEJBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSSxDQUFFLEVBQ3pCQSw4QkFBQSw0QkFBRyxPQUN0QyxJQUFJLFlBQWMsZ0JBQWdCdGxCLE9BQW9CLEVBQ2xELEtBQU8sZ0JBQWdCQyxHQUFhLEVBQ3BDLFlBQWNxRSxjQUNkd0MsYUFBYUMsV0FDYix1QkFBeUIsT0FDekIsc0NBQXdDLEtBQ3hDLDRCQUE2QyxVQUFZLENBQ3pELFNBQVN3ZSxFQUE0QjMxQyxFQUFTLENBTzFDLEdBTkEsS0FBSyxRQUFVQSxFQUFRLFFBQ3ZCLEtBQUssS0FBT0EsRUFBUSxLQUNwQixLQUFLLFFBQVUsS0FBSyxhQUFhLENBQzdCLFVBQVdBLEVBQVEsVUFDbkIsVUFBV0EsRUFBUSxTQUMvQixDQUFTLEVBQ0csZUFBZ0JBLEVBQVMsQ0FDekIsR0FBSSxtQkFBb0JBLEVBQ3BCLE1BQU0sSUFBSSxNQUFNLHNEQUFzRCxFQUUxRSxLQUFLLFdBQWFBLEVBQVEsVUFDN0IsS0FDUSxtQkFBb0JBLElBQ3pCLEtBQUssZUFBaUJBLEVBQVEsZ0JBRWxDLEtBQUssTUFBUUEsRUFBUSxNQUNyQixLQUFLLGFBQWUsS0FDcEIsS0FBSyxjQUFnQkEsRUFBUSxhQUNoQyxDQUNELE9BQUEyMUMsRUFBNEIsVUFBVSxNQUFRLFNBQVUvbEMsRUFBUStkLEVBQU10RSxFQUFRcnBCLEVBQVMsQ0FDbkYsT0FBTyxVQUFVLEtBQU0sT0FBUSxPQUFRLFVBQVksQ0FDL0MsSUFBSWduQyxFQUFldlYsRUFBSW1rQixFQUFZbGtCLEVBQUkyRixFQUFVMUYsRUFBSWtrQixFQUFJRCxFQUFZRSxFQUFJQyxFQUNyRUMsRUFBSUMsRUFBSUMsRUFDWixPQUFPLFlBQVksS0FBTSxTQUFVQyxFQUFJLENBQ25DLE9BQVFBLEVBQUcsTUFBSyxDQUNaLElBQUssR0FPRCxPQU5BblAsRUFBZ0IzVSxXQUFTQSxXQUFTQSxXQUFTLENBQUUsT0FBUXppQixFQUFRLFFBQVMsS0FBSyxRQUFTLElBQUssR0FBRyxPQUFPLEtBQUssT0FBTyxFQUFFLE9BQU8rZCxDQUFJLENBQUMsRUFBSzN0QixHQUFvQixFQUFJLEVBQUVrM0IsYUFBVyxhQUFhLDZCQUE2QixDQUM3TSxXQUFZLEtBQUssV0FDakIsZUFBZ0IsS0FBSyxlQUNyQixjQUFlLEtBQUssYUFDaEQsQ0FBeUIsQ0FBQyxFQUFHLENBQUUsTUFBTyxLQUFLLGlCQUFpQixLQUFLLEtBQUssQ0FBQyxDQUFFLEVBQ2pEekYsRUFBSzdoQixFQUNHNmhCLEVBQUUsQ0FDTixJQUFLLE1BQU8sTUFBTyxDQUFDLEVBQWEsQ0FBQyxFQUNsQyxJQUFLLE9BQVEsTUFBTyxDQUFDLEVBQWEsQ0FBQyxFQUNuQyxJQUFLLE1BQU8sTUFBTyxDQUFDLEVBQWEsQ0FBQyxFQUNsQyxJQUFLLFNBQVUsTUFBTyxDQUFDLEVBQWEsRUFBRSxDQUN6QyxDQUNELE1BQU8sQ0FBQyxFQUFhLEVBQUUsRUFDM0IsSUFBSyxHQUVELE9BREFta0IsRUFBYSxLQUFLLGdCQUFnQmpvQixFQUFNdEUsQ0FBTSxFQUN4Q3VzQixFQUFXLE9BQVMsdUNBQzFCbGtCLEVBQUssQ0FBQ1csV0FBUyxHQUFJMlUsQ0FBYSxDQUFDLEVBQ2pDZ1AsRUFBSyxDQUFFLE9BQVEsT0FBUSxRQUFTM2pCLFdBQVNBLFdBQVMsQ0FBRSxFQUFFLEtBQUssT0FBTyxFQUFHLENBQUUseUJBQTBCLEtBQUssQ0FBRSxDQUFDLEVBQ2xHLENBQUMsRUFBYSxLQUFLLFVBQVVoSixDQUFNLENBQUMsR0FIOEIsQ0FBQyxFQUFhLENBQUMsRUFJNUYsSUFBSyxHQUFHLE1BQU8sQ0FBQyxFQUFjZ0osV0FBUyxNQUFNLE9BQVFYLEVBQUcsT0FBTyxFQUFFc2tCLEVBQUcsS0FBT0csRUFBRyxLQUFJLEVBQUlILEVBQUUsQ0FBRSxDQUFDLENBQUMsRUFDNUYsSUFBSyxHQUFHLE1BQU8sQ0FBQyxFQUFjM2pCLFdBQVNBLFdBQVMsR0FBSTJVLENBQWEsRUFBRyxDQUFFLElBQUs0TyxDQUFVLENBQUUsQ0FBQyxFQUN4RixJQUFLLEdBQ0QsT0FBTXZzQixhQUFrQixZQUFZLFFBQzdCLENBQUMsRUFBYSxLQUFLLFVBQVVBLENBQU0sQ0FBQyxFQURVLENBQUMsRUFBYSxDQUFDLEVBRXhFLElBQUssR0FDRCxPQUFBZ08sRUFBVzhlLEVBQUcsT0FDUCxDQUFDLEVBQWM5akIsV0FBU0EsV0FBUyxDQUFBLEVBQUkyVSxDQUFhLEVBQUcsQ0FBRSxRQUV0RCxPQUFPM1AsRUFBUyxZQUFlLFdBQ3pCaEYsV0FBU0EsV0FBUyxDQUFBLEVBQUksS0FBSyxPQUFPLEVBQUdnRixFQUFTLFdBQVUsQ0FBRSxFQUFJLEtBQUssUUFBUyxLQUFNQSxDQUFRLENBQUUsQ0FBQyxFQUMvRyxJQUFLLEdBQ0QsT0FBQTFGLEVBQUssQ0FBQ1UsV0FBUyxHQUFJMlUsQ0FBYSxDQUFDLEVBQ2pDaVAsRUFBSyxDQUFBLEVBQ0UsQ0FBQyxFQUFhLEtBQUssVUFBVTVzQixDQUFNLENBQUMsRUFDL0MsSUFBSyxHQUFHLE1BQU8sQ0FBQyxFQUFjZ0osV0FBUyxNQUFNLE9BQVFWLEVBQUcsT0FBTyxFQUFFc2tCLEVBQUcsS0FBT0UsRUFBRyxLQUFJLEVBQUlGLEVBQUUsQ0FBRSxDQUFDLENBQUMsRUFDNUYsSUFBSyxHQUNELE9BQUFKLEVBQUssQ0FBQ3hqQixXQUFTLEdBQUkyVSxDQUFhLENBQUMsRUFDakNrUCxFQUFLLENBQUEsRUFDRSxDQUFDLEVBQWEsS0FBSyxVQUFVN3NCLENBQU0sQ0FBQyxFQUMvQyxJQUFLLEdBQUcsTUFBTyxDQUFDLEVBQWNnSixXQUFTLE1BQU0sT0FBUXdqQixFQUFHLE9BQU8sRUFBRUssRUFBRyxLQUFPQyxFQUFHLEtBQUksRUFBSUQsRUFBRSxDQUFFLENBQUMsQ0FBQyxFQUM1RixJQUFLLElBQ0QsT0FBQUosRUFBSyxLQUFLLGdCQUNWQyxFQUFLLENBQUNwb0IsQ0FBSSxFQUNILENBQUMsRUFBYSxLQUFLLFVBQVV0RSxDQUFNLENBQUMsRUFDL0MsSUFBSyxJQUNELE9BQUF1c0IsRUFBYUUsRUFBRyxNQUFNLEtBQU1DLEVBQUcsT0FBTyxDQUFDSSxFQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQzNDLENBQUMsRUFBYzlqQixXQUFTQSxXQUFTLENBQUUsRUFBRTJVLENBQWEsRUFBRyxDQUFFLElBQUs0TyxDQUFZLENBQUEsQ0FBQyxFQUNwRixJQUFLLElBRUcsTUFBTSxJQUFJLE1BQU0sR0FBRyxPQUFPaG1DLEVBQVEsMEJBQTBCLENBQUMsRUFHckUsSUFBSyxJQUFJLE1BQU8sQ0FBQyxFQUNwQixDQUNqQixDQUFhLENBQ2IsQ0FBUyxDQUNULEVBQ0krbEMsRUFBNEIsVUFBVSxpQkFBbUIsU0FBVVMsRUFBYSxDQUM1RSxJQUFJM2tCLEVBQ0osR0FBSTJrQixJQUFnQixPQUdwQixJQUFJQSxJQUFnQixHQUNoQixNQUFPLEdBRVgsSUFBSXZyQixFQUFRdXJCLEVBQ1osT0FBSXZyQixFQUFNLE9BQ0xBLEVBQU0sS0FBSyxTQUFTLFNBQVcsR0FBS0EsRUFBTSxLQUFLLFNBQVMsU0FBVyxLQUNwRUEsRUFBTSxLQUFPLFFBRWpCQSxFQUFNLFVBQVk0RyxFQUFLNUcsRUFBTSxZQUFjLE1BQVE0RyxJQUFPLE9BQVNBLEVBQUssdUJBQ2pFNUcsRUFDZixFQUNJOHFCLEVBQTRCLFVBQVUsZ0JBQWtCLFNBQVVob0IsRUFBTXRFLEVBQVEsQ0FDNUUsTUFBTyxHQUFHLE9BQU8sS0FBSyxPQUFPLEVBQUUsT0FBT3NFLEVBQU0sR0FBRyxFQUFFLE9BQU8sS0FBSyxRQUFRLFVBQVV0RSxDQUFNLENBQUMsQ0FDOUYsRUFDSXNzQixFQUE0QixVQUFVLFVBQVksU0FBVXRzQixFQUFRLENBQ2hFLE9BQU8sVUFBVSxLQUFNLE9BQVEsT0FBUSxVQUFZLENBQy9DLElBQUlndEIsRUFDSixPQUFPLFlBQVksS0FBTSxTQUFVNWtCLEVBQUksQ0FDbkMsT0FBUUEsRUFBRyxNQUFLLENBQ1osSUFBSyxHQUNELE9BQU0sS0FBSyxLQUFLLE9BQVMsVUFBbUIsQ0FBQyxFQUFhLENBQUMsRUFDcEQsQ0FBQyxFQUFhLEtBQUssZ0JBQWlCLENBQUEsRUFDL0MsSUFBSyxHQUVELE9BREE0a0IsRUFBZTVrQixFQUFHLE9BQ2RwSSxhQUFrQixZQUFZLFNBQzlCQSxFQUFPLE9BQU8sb0JBQXFCZ3RCLENBQVksRUFDeEMsQ0FBQyxFQUFjaHRCLENBQU0sR0FFekIsQ0FBQyxFQUFjZ0osV0FBUyxDQUFFLGtCQUFtQmdrQixDQUFjLEVBQUVodEIsQ0FBTSxDQUFDLEVBQy9FLElBQUssR0FBRyxNQUFPLENBQUMsRUFBY0EsQ0FBTSxDQUN2QyxDQUNqQixDQUFhLENBQ2IsQ0FBUyxDQUNULEVBQ0lzc0IsRUFBNEIsVUFBVSxhQUFlLFNBQVV0c0IsRUFBUSxDQUNuRSxJQUFJaXRCLEVBQVlqdEIsRUFBTyxVQUFXa3RCLEVBQVlsdEIsRUFBTyxVQUNqRG10QixFQUFtQkYsRUFDakIsQ0FDRSxjQUFlLFNBQVMsT0FBTyxZQUFZLE9BQU8sT0FBTyxHQUFHLE9BQU9BLEVBQVUsU0FBVSxHQUFHLEVBQUUsT0FBT0EsRUFBVSxRQUFRLENBQUMsQ0FBQyxDQUMxSCxFQUNDLEdBQ0ZHLEVBQXNCdmYsYUFBVyxhQUFhLGFBQWEsQ0FBRSxVQUFXcWYsQ0FBUyxDQUFFLEVBQ25GRyxFQUFnQnJrQixXQUFTQSxXQUFTLENBQUUsRUFBRW9rQixDQUFtQixFQUFHRCxDQUFnQixFQUNoRixPQUFRLEtBQUssS0FBSyxLQUFJLENBQ2xCLElBQUssV0FDRCxPQUFPbmtCLFdBQVNBLFdBQVMsQ0FBQSxFQUFJcWtCLENBQWEsRUFBRyxDQUFFLHlCQUEwQixZQUFZLE9BQU8sT0FBTyxHQUFHLE9BQU8sS0FBSyxLQUFLLFNBQVUsR0FBRyxFQUFFLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUUsRUFFdkssSUFBSyxXQUFZLENBQ2IsSUFBSUMsRUFBVyxLQUFLLEtBQUssU0FDekIsT0FBSSxNQUFNLFFBQVFBLENBQVEsRUFDZnRrQixXQUFTQSxXQUFTLENBQUUsRUFBRXFrQixDQUFhLEVBQUcsQ0FBRSxxQkFBc0JDLEVBQVMsS0FBSyxHQUFHLENBQUcsQ0FBQSxFQUV0RnRrQixXQUFTQSxXQUFTLEdBQUlxa0IsQ0FBYSxFQUFHLENBQUUscUJBQXNCQyxDQUFRLENBQUUsQ0FDbEYsQ0FDRCxJQUFLLGFBQ0QsT0FBT3RrQixXQUFTQSxXQUFTLEdBQUlxa0IsQ0FBYSxFQUFHLENBQUUsY0FBZSxVQUFVLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBRyxDQUFBLEVBRTFHLFFBQ0ksT0FBT3JrQixXQUFTQSxXQUFTLEdBQUlxa0IsQ0FBYSxFQUFHLENBQUUsbUJBQW9CLGdCQUFnQixDQUFFLENBRTVGLENBQ1QsRUFDSWYsRUFBNEIsVUFBVSxnQkFBa0IsVUFBWSxDQUNoRSxPQUFPLFVBQVUsS0FBTSxPQUFRLE9BQVEsVUFBWSxDQUMvQyxJQUFJbGtCLEVBQ0osT0FBTyxZQUFZLEtBQU0sU0FBVUMsRUFBSSxDQUNuQyxPQUFRQSxFQUFHLE1BQUssQ0FDWixJQUFLLEdBQ0QsT0FBTSxLQUFLLGVBQWlCLEtBQWMsQ0FBQyxFQUFhLENBQUMsR0FDekRELEVBQUssS0FDRSxDQUFDLEVBQWF5RixhQUFXLGFBQWEsZ0JBQWlCLENBQUEsR0FDbEUsSUFBSyxHQUNEekYsRUFBRyxhQUFlQyxFQUFHLE9BQ3JCQSxFQUFHLE1BQVEsRUFDZixJQUFLLEdBQUcsTUFBTyxDQUFDLEVBQWMsS0FBSyxZQUFZLENBQ2xELENBQ2pCLENBQWEsQ0FDYixDQUFTLENBQ1QsRUFDV2lrQixDQUNYLEVBQUMsRUFDa0NELDhCQUFBLDRCQUFHLDREQ3JPbENyakIsV0FBWS8wQixnQkFBUUEsZUFBSyxVQUFhLFVBQVksQ0FDbEQrMEIsa0JBQVcsT0FBTyxRQUFVLFNBQVNwYixFQUFHLENBQ3BDLFFBQVNnTixFQUFHbGxCLEVBQUksRUFBR3FPLEVBQUksVUFBVSxPQUFRck8sRUFBSXFPLEVBQUdyTyxJQUFLLENBQ2pEa2xCLEVBQUksVUFBVWxsQixDQUFDLEVBQ2YsUUFBUzZmLEtBQUtxRixFQUFPLE9BQU8sVUFBVSxlQUFlLEtBQUtBLEVBQUdyRixDQUFDLElBQzFEM0gsRUFBRTJILENBQUMsRUFBSXFGLEVBQUVyRixDQUFDLEVBQ2pCLENBQ0QsT0FBTzNILENBQ2YsRUFDV29iLFdBQVMsTUFBTSxLQUFNLFNBQVMsQ0FDekMsRUFDSSxPQUFVLzBCLGdCQUFRQSxlQUFLLFFBQVcsU0FBVTJtQixFQUFHLEVBQUcsQ0FDbEQsSUFBSSxFQUFJLENBQUEsRUFDUixRQUFTckYsS0FBS3FGLEVBQU8sT0FBTyxVQUFVLGVBQWUsS0FBS0EsRUFBR3JGLENBQUMsR0FBSyxFQUFFLFFBQVFBLENBQUMsRUFBSSxJQUM5RSxFQUFFQSxDQUFDLEVBQUlxRixFQUFFckYsQ0FBQyxHQUNkLEdBQUlxRixHQUFLLE1BQVEsT0FBTyxPQUFPLHVCQUEwQixXQUNyRCxRQUFTLEVBQUksRUFBR3JGLEVBQUksT0FBTyxzQkFBc0JxRixDQUFDLEVBQUcsRUFBSXJGLEVBQUUsT0FBUSxJQUMzRCxFQUFFLFFBQVFBLEVBQUUsQ0FBQyxDQUFDLEVBQUksR0FBSyxPQUFPLFVBQVUscUJBQXFCLEtBQUtxRixFQUFHckYsRUFBRSxDQUFDLENBQUMsSUFDekUsRUFBRUEsRUFBRSxDQUFDLENBQUMsRUFBSXFGLEVBQUVyRixFQUFFLENBQUMsQ0FBQyxHQUU1QixPQUFPLENBQ1gsRUFDQSxPQUFPLGVBQWVnNEIseUJBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSSxDQUFFLEVBQzlCQSx5QkFBQSx1QkFBRyxPQUNqQyxJQUFJLFFBQVV4bUIsTUFDVix1QkFBd0MsVUFBWSxDQUNwRCxTQUFTeW1CLEVBQXVCcGxCLEVBQUksQ0FDaEMsSUFBSXFsQixFQUF5QnJsQixFQUFHLHVCQUNoQyxLQUFLLHVCQUF5QnFsQixDQUNqQyxDQUNELE9BQUFELEVBQXVCLFVBQVUsT0FBUyxTQUFVeHdCLEVBQVUsQ0FDMUQsSUFBSXVKLEVBQVEsS0FDWixPQUFPdkosRUFBUyxLQUFLLFNBQVVvZCxFQUFLLENBQUUsT0FBTzdULEVBQU0sc0JBQXNCNlQsQ0FBRyxDQUFFLEVBQUksU0FBVS94QixFQUFPLENBQUUsT0FBT2tlLEVBQU0sb0JBQW9CbGUsQ0FBSyxDQUFFLENBQUUsQ0FDdkosRUFDSW1sQyxFQUF1QixVQUFVLHNCQUF3QixTQUFVeHdCLEVBQVUsQ0FDekUsR0FBSSxLQUFLLHdCQUNMLG9EQUFvRCxLQUFLQSxFQUFTLFFBQVEsa0JBQWtCLENBQUMsRUFDN0YsTUFBTSxJQUFJLFFBQVEsd0JBQXdCQSxFQUFTLFFBQVEsa0JBQWtCLENBQUMsRUFFbEYsT0FBT0EsRUFBUyxJQUN4QixFQUNJd3dCLEVBQXVCLFVBQVUsb0JBQXNCLFNBQVVubEMsRUFBTyxDQUNwRSxHQUFJLENBQUNBLEVBQU0sU0FFUCxLQUFJLHFCQUFxQixLQUFLQSxFQUFNLFNBQVUsQ0FBQSxFQUNwQyxJQUFJLE1BQU0sZ0NBQWdDLEVBRTlDQSxFQUVWLElBQUlxbEMsRUFBZ0JybEMsRUFBTSxTQUN0QnFCLEVBQU9na0MsRUFBYyxLQUFNaGtCLEVBQU8sT0FBT2drQixFQUFlLENBQUMsTUFBTSxDQUFDLEVBQ3BFLE1BQUksT0FBT2hrQyxHQUFTLFNBQ1YsSUFBSSxNQUFNLEdBQUcsT0FBT2dnQixFQUFLLE9BQVEsSUFBSSxFQUFFLE9BQU9BLEVBQUssVUFBVSxDQUFDLEVBRWxFLElBQUksUUFBUSxvQkFBb0JWLFdBQVMsQ0FBRSxLQUFNdGYsQ0FBSSxFQUFJZ2dCLENBQUksQ0FBQyxDQUM1RSxFQUNXOGpCLENBQ1gsRUFBQyxFQUM2QkQseUJBQUEsdUJBQUcsdUJDMURqQyxJQUFJLFNBQVl0NUMsZ0JBQVFBLGVBQUssVUFBYSxVQUFZLENBQ2xELGdCQUFXLE9BQU8sUUFBVSxTQUFTMlosRUFBRyxDQUNwQyxRQUFTZ04sRUFBR2xsQixFQUFJLEVBQUdxTyxFQUFJLFVBQVUsT0FBUXJPLEVBQUlxTyxFQUFHck8sSUFBSyxDQUNqRGtsQixFQUFJLFVBQVVsbEIsQ0FBQyxFQUNmLFFBQVM2ZixLQUFLcUYsRUFBTyxPQUFPLFVBQVUsZUFBZSxLQUFLQSxFQUFHckYsQ0FBQyxJQUMxRDNILEVBQUUySCxDQUFDLEVBQUlxRixFQUFFckYsQ0FBQyxFQUNqQixDQUNELE9BQU8zSCxDQUNmLEVBQ1csU0FBUyxNQUFNLEtBQU0sU0FBUyxDQUN6QyxFQUNBLE9BQU8sZUFBZSsvQix1QkFBUyxhQUFjLENBQUUsTUFBTyxFQUFJLENBQUUsRUFDaENBLHVCQUFBLHFCQUFHLE9BQy9CLElBQUksb0JBQXNCNW1CLG9CQUN0QixZQUFjQyxZQUNkLGVBQWlCcUUsZUFDakIsY0FBZ0J5QyxjQUNoQixhQUFla1IsYUFDZixPQUFTRSxLQUNULDhCQUFnQ0MsOEJBQ2hDLHlCQUEyQkcseUJBQzNCLFdBQWFDLFdBQ2IsMkJBQTZCSSwyQkFDN0IsdUJBQXlCLFNBQVVoSCxFQUFNLENBQ3pDLEdBQUksYUFBY0EsRUFDZCxPQUFPLFNBQVMsQ0FBRSxLQUFNLFVBQVksRUFBRUEsQ0FBSSxFQUU5QyxHQUFJLGFBQWNBLEVBQ2QsT0FBTyxTQUFTLENBQUUsS0FBTSxVQUFZLEVBQUVBLENBQUksRUFFOUMsR0FBSSxlQUFnQkEsRUFDaEIsT0FBTyxTQUFTLENBQUUsS0FBTSxZQUFjLEVBQUVBLENBQUksRUFFaEQsR0FBSSxDQUNBLE9BQU8sV0FBVyxhQUFhLGdCQUNsQyxPQUNNLEVBQUcsQ0FDTixNQUFJLGFBQWEsMkJBQTJCLHlCQUNsQyxJQUFJLE1BQU0sOENBQThDLE9BQU8sRUFBRSxTQUFVLGVBQWUsQ0FBQyxFQUUvRixDQUNULENBQ0wsRUFDSSxxQkFBc0MsVUFBWSxDQUNsRCxTQUFTaVYsRUFBcUJqM0MsRUFBUyxDQUMvQkEsSUFBWSxTQUFVQSxFQUFVLENBQUUsR0FDdEMsSUFBSXl4QixFQUFJQyxFQUFJQyxFQUNaLGdCQUFnQjN4QixDQUFPLEVBQ3ZCLEtBQUssUUFBVSxXQUFXLGFBQ3JCLGFBQWFBLEVBQVEsT0FBTyxFQUM1QixRQUFRLE9BQVEsRUFBRSxFQUN2QixJQUFJZ2lDLEVBQU8sd0JBQXdCdlEsRUFBS3p4QixFQUFRLFFBQVUsTUFBUXl4QixJQUFPLE9BQVNBLEVBQUssQ0FBRSxDQUFBLEVBQ3JGc1YsRUFBdUIsSUFBSSw4QkFBOEIsNEJBQTRCLFNBQVMsU0FBUyxHQUFJL21DLENBQU8sRUFBRyxDQUFFLFFBQVMsS0FBSyxRQUFTLEtBQU1naUMsQ0FBTSxDQUFBLENBQUMsRUFDM0o4RSxFQUFrQixJQUFJLHlCQUF5Qix1QkFBdUIsQ0FDdEUsd0JBQXlCblYsR0FBTUQsRUFBSzF4QixFQUFRLGdCQUFrQixNQUFRMHhCLElBQU8sT0FBUyxPQUFTQSxFQUFHLDBCQUE0QixNQUFRQyxJQUFPLE9BQVNBLEVBQUssRUFDdkssQ0FBUyxFQUNHdWxCLEVBQWEsSUFBSSxPQUFPLGtCQUFrQixDQUMxQyxnQkFBaUJwUSxFQUNqQixxQkFBc0JDLENBQ2xDLENBQVMsRUFDRzlVLEVBQWVqeUIsRUFBUSxhQUMzQixLQUFLLGFBQWUsSUFBSSxvQkFBb0Isa0JBQWtCazNDLEVBQVlqbEIsQ0FBWSxFQUN0RixLQUFLLE9BQVMsSUFBSSxlQUFlLGFBQWFpbEIsRUFBWSxLQUFLLGFBQWNqbEIsQ0FBWSxFQUN6RixLQUFLLElBQU0sSUFBSSxZQUFZLFVBQVVpbEIsRUFBWWpsQixDQUFZLEVBQzdELEtBQUssTUFBUSxJQUFJLGNBQWMsWUFBWWlsQixFQUFZamxCLENBQVksRUFDbkUsS0FBSyxLQUFPLElBQUksYUFBYSxXQUFXaWxCLEVBQVlqbEIsQ0FBWSxDQUNuRSxDQUNELGNBQU8sZUFBZWdsQixFQUFzQixVQUFXLENBQ25ELElBQUssVUFBWSxDQUNiLE9BQU8sV0FBVyxhQUFhLFlBQ2xDLEVBQ0QsV0FBWSxHQUNaLGFBQWMsRUFDdEIsQ0FBSyxFQUNEQSxFQUFxQixVQUFVLFdBQWEsVUFBWSxDQUNwRCxPQUFPLEtBQUssT0FDcEIsRUFDSUEsRUFBcUIsVUFBVSxZQUFjLFNBQVU1dEIsRUFBUSxDQUMzRCxPQUFPLEtBQUssYUFBYSxLQUFLQSxDQUFNLENBQzVDLEVBQ1c0dEIsQ0FDWCxFQUFDLEVBQzJCRCx1QkFBQSxxQkFBRyxxQkFDL0IsSUFBSSxnQkFBa0IsU0FBVWgzQyxFQUFTLENBQ3JDLGdCQUFnQkEsRUFBUSxPQUFPLEVBQy9CLHFCQUFxQkEsRUFBUSxZQUFZLEVBQ3pDLHNCQUFzQkEsRUFBUSxhQUFhLENBQy9DLEVBQ0ksZ0JBQWtCLFNBQVU2eEIsRUFBUyxDQUNyQyxHQUFJQSxJQUFZLE9BR2hCLEtBQUloTCxFQUFNLElBQUksSUFBSWdMLENBQU8sRUFDekIsR0FBSWhMLEVBQUksV0FBYSxhQUFlQSxFQUFJLFdBQWEsU0FDakQsTUFBTSxJQUFJLE1BQU0sMENBQTBDLEVBRWxFLEVBQ0kscUJBQXVCLFNBQVVvTCxFQUFjLENBQy9DLEdBQUlBLElBQWlCLElBQU1BLElBQWlCLEtBQ3hDLE1BQU0sSUFBSSxNQUFNLDhCQUE4QixPQUFPQSxFQUFjLEdBQUcsQ0FBQyxDQUUvRSxFQUNJLHNCQUF3QixTQUFVa2xCLEVBQWUsQ0FDakQsR0FBSUEsSUFBa0IsT0FHdEIsS0FBSTNxQixFQUFTLFdBQVcycUIsRUFBYyxTQUFVLENBQUEsRUFDaEQsR0FBSSxNQUFNM3FCLENBQU0sR0FBS0EsRUFBUyxFQUMxQixNQUFNLElBQUksTUFBTSxtREFBbUQsRUFFM0UsZUM5R0EsSUFBSThILEVBQW1CaDNCLGdCQUFRQSxlQUFLLGtCQUFxQixPQUFPLE9BQVUsU0FBU3N3QixFQUFHcm9CLEVBQUdzb0IsRUFBRzBHLEVBQUksQ0FDeEZBLElBQU8sU0FBV0EsRUFBSzFHLEdBQzNCLElBQUkyRyxFQUFPLE9BQU8seUJBQXlCanZCLEVBQUdzb0IsQ0FBQyxHQUMzQyxDQUFDMkcsSUFBUyxRQUFTQSxFQUFPLENBQUNqdkIsRUFBRSxXQUFhaXZCLEVBQUssVUFBWUEsRUFBSyxpQkFDbEVBLEVBQU8sQ0FBRSxXQUFZLEdBQU0sSUFBSyxVQUFXLENBQUUsT0FBT2p2QixFQUFFc29CLENBQUMsQ0FBRSxJQUUzRCxPQUFPLGVBQWVELEVBQUcyRyxFQUFJQyxDQUFJLENBQ3BDLEVBQUssU0FBUzVHLEVBQUdyb0IsRUFBR3NvQixFQUFHMEcsRUFBSSxDQUNwQkEsSUFBTyxTQUFXQSxFQUFLMUcsR0FDM0JELEVBQUUyRyxDQUFFLEVBQUlodkIsRUFBRXNvQixDQUFDLENBQ2QsR0FDR3VwQixFQUFzQjk1QyxnQkFBUUEsZUFBSyxxQkFBd0IsT0FBTyxPQUFVLFNBQVNzd0IsRUFBR3ZlLEVBQUcsQ0FDM0YsT0FBTyxlQUFldWUsRUFBRyxVQUFXLENBQUUsV0FBWSxHQUFNLE1BQU92ZSxDQUFDLENBQUUsQ0FDdEUsRUFBSyxTQUFTdWUsRUFBR3ZlLEVBQUcsQ0FDaEJ1ZSxFQUFFLFFBQWF2ZSxDQUNuQixHQUNJZ29DLEVBQWdCLzVDLGdCQUFRQSxlQUFLLGNBQWlCLFNBQVVnMEIsRUFBSyxDQUM3RCxHQUFJQSxHQUFPQSxFQUFJLFdBQVksT0FBT0EsRUFDbEMsSUFBSXRwQixFQUFTLENBQUEsRUFDYixHQUFJc3BCLEdBQU8sS0FBTSxRQUFTekQsS0FBS3lELEVBQVN6RCxJQUFNLFdBQWEsT0FBTyxVQUFVLGVBQWUsS0FBS3lELEVBQUt6RCxDQUFDLEdBQUd5RyxFQUFnQnRzQixFQUFRc3BCLEVBQUt6RCxDQUFDLEVBQ3ZJLE9BQUF1cEIsRUFBbUJwdkMsRUFBUXNwQixDQUFHLEVBQ3ZCdHBCLENBQ1gsRUFDSXlzQixFQUFnQm4zQixnQkFBUUEsZUFBSyxjQUFpQixTQUFTaUksRUFBRzBwQixFQUFTLENBQ25FLFFBQVNyUSxLQUFLclosRUFBT3FaLElBQU0sV0FBYSxDQUFDLE9BQU8sVUFBVSxlQUFlLEtBQUtxUSxFQUFTclEsQ0FBQyxHQUFHMFYsRUFBZ0JyRixFQUFTMXBCLEVBQUdxWixDQUFDLENBQzVILEVBQ0EsT0FBTyxlQUFjcVEsRUFBVSxhQUFjLENBQUUsTUFBTyxFQUFJLENBQUUsRUFDNURBLEVBQStCLHFCQUFBLE9BQy9CLElBQUlpSSxFQUFhOUcsV0FDYmtuQixFQUFjRCxFQUFhaG5CLFNBQTZCLEtBQ3hENkcsRUFBVyxvQkFBb0JvZ0IsQ0FBVyxFQUM5QyxJQUFJTixFQUF5QnRpQix1QkFDN0IsT0FBTyxlQUFlekYsRUFBUyx1QkFBd0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxVQUFZLENBQUUsT0FBTytuQixFQUF1QixvQkFBcUIsQ0FBSSxDQUFBLEVBQ3JKdmlCLEVBQWEwQyxNQUFvQmxJLENBQU8sbUJDaEM1QixJQUFBLFdBQUFzb0IsSUFDUkEsRUFBQSxLQUFPLE9BQ1BBLEVBQUEsU0FBVyxXQUNYQSxFQUFBLFVBQVksWUFDWkEsRUFBQSxhQUFlLGVBQ2ZBLEVBQUEsUUFBVSxVQUNWQSxFQUFBLEtBQU8sT0FDUEEsRUFBQSxTQUFXLFdBQ1hBLEVBQUEsVUFBWSxZQUNaQSxFQUFBLEtBQU8sT0FDUEEsRUFBQSxNQUFRLFFBQ1JBLEVBQUEsYUFBZSxlQUNmQSxFQUFBLEtBQU8sT0FDUEEsRUFBQSxTQUFXLFdBQ1hBLEVBQUEsZ0JBQWtCLGtCQUNsQkEsRUFBQSxhQUFlLGVBQ2ZBLEVBQUEsT0FBUyxTQUNUQSxFQUFBLG9CQUFzQixzQkFDdEJBLEVBQUEsYUFBZSxlQUNmQSxFQUFBLGNBQWdCLGdCQUNoQkEsRUFBQSxnQkFBa0Isa0JBQ2xCQSxFQUFBLFVBQVksWUFDWkEsRUFBQSxpQkFBbUIsbUJBQ25CQSxFQUFBLE9BQVMsU0FDVEEsRUFBQSxnQkFBa0Isa0JBQ2xCQSxFQUFBLFNBQVcsV0FDWEEsRUFBQSxLQUFPLE9BQ1BBLEVBQUEsYUFBZSxlQUNmQSxFQUFBLFlBQWMsY0E1Qk5BLElBQUEsV0FBQSxDQUFBLENBQUEsRUErQkEsWUFBQUMsSUFDUkEsRUFBQSxPQUFTLFNBQ1RBLEVBQUEsYUFBZSxlQUNmQSxFQUFBLFNBQVcsV0FDWEEsRUFBQSxLQUFPLE9BQ1BBLEVBQUEsS0FBTyxPQUNQQSxFQUFBLFlBQWEsY0FDYkEsRUFBQSxnQkFBaUIsa0JBUFRBLElBQUEsWUFBQSxDQUFBLENBQUEsRUNkTCxNQUFNLFVBQVcsQ0FJcEIsWUFBWXprQyxFQUFnQjBrQyxFQUFrQixDQUh0Q3hzQixFQUFBLGFBQ0FBLEVBQUEsY0FHSixLQUFLLEtBQU9sWSxFQUNaLEtBQUssTUFBUTBrQyxDQUNqQixDQUVRLGVBQTBCLENBU3ZCLE9BUmEsS0FBSyxLQUFLLElBQVl2SixHQUFBLENBQ2hDLE1BQUExdUMsRUFBTSxPQUFPMHVDLENBQUksRUFDbkIsR0FBQSxNQUFNMXVDLENBQUcsRUFDVCxNQUFNLElBQUksTUFBTSxTQUFTLEtBQUssTUFBTSxJQUFJLDRCQUE0QixFQUVqRSxPQUFBQSxDQUFBLENBQ1YsQ0FHTCxDQUVRLEtBQXFCLENBQ3JCLE9BQUEsS0FBSyxLQUFLLFNBQVcsRUFBVSxLQUNmLEtBQUssZ0JBQ04sT0FBTyxDQUFDZzNCLEVBQUt4M0IsSUFBUXczQixFQUFNeDNCLEVBQUssQ0FBQyxDQUN4RCxDQUVRLEtBQXFCLENBQ3JCLEdBQUEsS0FBSyxLQUFLLFNBQVcsRUFBVSxPQUFBLEtBQzdCLE1BQUEwNEMsRUFBYyxLQUFLLGdCQUV6QixPQURjQSxFQUFZLE9BQU8sQ0FBQ2xoQixFQUFLeDNCLElBQVF3M0IsRUFBTXgzQixFQUFLLENBQUMsRUFDNUMwNEMsRUFBWSxNQUMvQixDQUVRLEtBQThCLENBQzlCLEdBQUEsS0FBSyxLQUFLLFNBQVcsRUFBVSxPQUFBLEtBQ25DLEdBQUksS0FBSyxNQUFNLE9BQVMsVUFBVSxPQUFTLENBQ2pDLE1BQUFBLEVBQWMsS0FBSyxnQkFDbEIsT0FBQSxLQUFLLElBQUksR0FBR0EsQ0FBVyxDQUNsQyxDQUNBLEdBQUcsS0FBSyxNQUFNLE9BQU8sVUFBVSxLQUFLLENBQ2hDLE1BQU1DLEVBQVksS0FBSyxNQUN2QixHQUFHQSxFQUFVLFNBQVMsV0FBVyxRQUFVQSxFQUFVLFNBQVMsV0FBVyxhQUFhLENBQzVFLE1BQUFELEVBQWMsS0FBSyxnQkFDbEIsT0FBQSxLQUFLLElBQUksR0FBR0EsQ0FBVyxDQUNsQyxDQUNKLENBQ0EsT0FBTyxLQUFLLEtBQUssT0FBTyxDQUFDNTBCLEVBQUtvckIsSUFBVUEsRUFBT3ByQixFQUFNb3JCLEVBQU9wckIsRUFBTSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQ2xGLENBRVEsS0FBOEIsQ0FDOUIsR0FBQSxLQUFLLEtBQUssU0FBVyxFQUFVLE9BQUEsS0FDbkMsR0FBSSxLQUFLLE1BQU0sT0FBUyxVQUFVLE9BQVMsQ0FDakMsTUFBQTQwQixFQUFjLEtBQUssZ0JBQ2xCLE9BQUEsS0FBSyxJQUFJLEdBQUdBLENBQVcsQ0FDbEMsQ0FDQSxHQUFHLEtBQUssTUFBTSxPQUFPLFVBQVUsS0FBSyxDQUNoQyxNQUFNQyxFQUFZLEtBQUssTUFDdkIsR0FBR0EsRUFBVSxTQUFTLFdBQVcsUUFBVUEsRUFBVSxTQUFTLFdBQVcsYUFBYSxDQUM1RSxNQUFBRCxFQUFjLEtBQUssZ0JBQ2xCLE9BQUEsS0FBSyxJQUFJLEdBQUdBLENBQVcsQ0FDbEMsQ0FDSixDQUNBLE9BQUcsS0FBSyxPQUFPLE1BQVEsS0FBSyxLQUFLLFNBQVMsRUFDL0IsS0FFSixLQUFLLEtBQUssT0FBTyxDQUFDM1ksRUFBS21QLElBQVVBLEVBQU9uUCxFQUFNbVAsRUFBT25QLEVBQU0sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUNsRixDQUVRLE9BQWdCLENBQ3BCLE9BQU8sS0FBSyxLQUFLLE1BQ3JCLENBRVEsT0FBdUIsQ0FDM0IsT0FBTyxLQUFLLEtBQUssT0FBUyxLQUFLLEtBQUssQ0FBQyxFQUFJLElBQzdDLENBRVEsTUFBc0IsQ0FDbkIsT0FBQSxLQUFLLEtBQUssT0FBUyxLQUFLLEtBQUssS0FBSyxLQUFLLE9BQVMsQ0FBQyxFQUFJLElBQ2hFLENBRU8sVUFBVWozQixFQUE0QyxDQUNyRCxPQUFRQSxFQUFVLENBQ2QsSUFBSyxNQUNHLE9BQU8sS0FBSyxNQUNwQixJQUFLLE1BQ0csT0FBTyxLQUFLLE1BQ3BCLElBQUssTUFDRCxPQUFPLEtBQUssTUFDaEIsSUFBSyxNQUNELE9BQU8sS0FBSyxNQUNoQixJQUFLLFFBQ0QsT0FBTyxLQUFLLFFBQ2hCLElBQUssUUFDRCxPQUFPLEtBQUssUUFDaEIsSUFBSyxPQUNELE9BQU8sS0FBSyxPQUNoQixRQUNXLE9BQUEsSUFDZixDQUNSLENBQ0osQ0N6RE8sTUFBTSxvQkFBd0MsQ0FLbkQsYUFBYyxDQUpkbWpCLEVBQUEsYUFDQUEsRUFBQSxvQkFDQUEsRUFBQSxjQWtFQUEsRUFBQSxnQkFBVyxDQUFDME0sRUFBYWpLLElBQWMsQ0FDckMsUUFBUSxJQUFJaUssQ0FBRyxFQUNmLE1BQU1yTCxFQUFRLGdCQUNWLElBQUE3bUIsRUFDSixNQUFRQSxFQUFRNm1CLEVBQU0sS0FBS3FMLENBQUcsS0FBTyxNQUFNLENBQ25DLE1BQUFpZ0IsRUFBVW55QyxFQUFNLENBQUMsRUFDdkIsR0FBSW15QyxLQUFXbHFCLEVBQ2JpSyxFQUFNQSxFQUFJLFFBQVFseUIsRUFBTSxDQUFDLEVBQUdpb0IsRUFBS2txQixDQUFPLENBQUMsTUFFekMsT0FBTSxJQUFJLE1BQU0sS0FBS0EsQ0FBTyxVQUFVLENBRTFDLENBQ0EsZUFBUSxJQUFJamdCLENBQUcsRUFDUkEsQ0FBQSxHQVFUMU0sRUFBQSxrQkFBYSxNQUFRcUssR0FBbUIsQ0FDaEMsTUFBQXVpQixFQUFNLElBQUlaLGNBQUFBLHFCQUNWbmhCLEVBQVMsS0FBSyxNQUFNLFFBQVEsT0FBTyxJQUFLMmhCLEdBQVFBLEVBQU0sSUFBSSxFQUMxRDdxQixFQUFRLE1BQU1pckIsRUFBSSxPQUFPLGNBQWMsQ0FDekMsSUFBSyxLQUFLLE1BQU0sUUFBUSxJQUFJLEdBQzVCLE9BQUEvaEIsRUFDQSxVQUFVUixDQUFBLENBQ1gsRUFDS3R0QixFQUFpQixDQUFBLEVBQ2xCLE9BQUE0a0IsRUFBQSxRQUFTa3JCLEdBQVksQ0FDeEIsU0FBVyxDQUFDM3hDLEVBQUszRSxDQUFLLElBQUssT0FBTyxRQUFRczJDLENBQU8sRUFDMUM5dkMsRUFBTzdCLENBQUcsSUFDTjZCLEVBQUE3QixDQUFHLEVBQUksQ0FBRSxLQUFNM0UsRUFBTSxLQUFNLE1BQU8sQ0FBQSxJQUUzQ3dHLEVBQU83QixDQUFHLEVBQUUsTUFBTSxLQUFLM0UsRUFBTSxLQUFLLENBQ3BDLENBQ0QsRUFDTXdHLENBQUEsR0FyR1QsS0FBSyxLQUFPLFFBQ1osS0FBSyxZQUFjLEdBQ25CLEtBQUssTUFBUSxDQUNYLFlBQVksR0FDWixVQUFVLEdBQ1YsUUFBUSxDQUNOLElBQUksQ0FDRixHQUFHLEVBQ0wsRUFDQSxPQUFPLENBQUMsQ0FDVixDQUFBLEVBRUYsS0FBSyxTQUFTLENBQ2hCLENBRUEsTUFBTSxRQUNKa2pCLEVBQ0FyVSxFQUNBdFgsRUFDd0IsQ0FDeEIsS0FBSyxZQUFjMnJCLEVBQVcsWUFFOUIsS0FBSyxNQUFRQSxFQUFXLFlBQ3hCLE1BQU04QyxFQUFZLEtBQUssTUFBTSxLQUFLLE1BQU0sU0FBUyxFQUNqRCxJQUFJaG1CLEVBQVMsQ0FDWCxRQUFTLEdBQ1QsT0FBUSxFQUFBLEVBRU4sR0FBQSxDQUNFLEdBQUEsQ0FBQyxLQUFLLE1BQ0QsT0FBQUEsRUFHVCxNQUFNc3RCLEVBQVEsS0FBSyxTQUFTdEgsRUFBVSxZQUFZenVCLEVBQVEsU0FBUyxFQUM3RHdULEVBQU8sTUFBTSxLQUFLLFdBQVd1aUIsQ0FBSyxFQUlyQyxHQUZLLFFBQUEsSUFBSSxRQUFTdmlCLENBQUksRUFFdEIsS0FBSyxNQUFNLFFBQVEsQ0FDYixNQUFBZ2xDLEVBQVcsS0FBSyxNQUFNLFFBQVEsS0FBSyxPQUFPLENBQUN2aEIsRUFBS3hGLElBQU0sQ0FDekQsTUFBTWduQixFQUFNamxDLEVBQUtpZSxFQUFFLE1BQU0sSUFBSSxFQUFFLE1BRXpCaHBCLEVBRE0sSUFBSSxXQUFXZ3dDLEVBQU1obkIsRUFBRSxLQUFLLEVBQ3JCLFVBQVVBLEVBQUUsZ0JBQWdCLFFBQVEsRUFDbkQsT0FBQXdGLEVBQUF4RixFQUFFLEtBQUssRUFBRWhwQixFQUNOd3VCLENBQ1QsRUFBRyxDQUFlLENBQUEsRUFDbEJqM0IsRUFBUSxVQUFVLEtBQUssTUFBTSxRQUFRLElBQUksRUFBRXc0QyxFQUNyQyxRQUFBLElBQUksV0FBWXg0QyxDQUFPLENBQ2pDLENBQ08sT0FBQXlJLFFBQ0EwSixFQUFPLENBQ04sT0FBQW5TLEVBQUEsT0FBTyxZQUFZbVMsRUFBTXdaLENBQVUsRUFDM0NsakIsRUFBTyxRQUFVLEdBQ1ZBLENBQ1QsQ0FDRixDQWtEQSxVQUFpQixDQUNGLGFBQUEsS0FBSyxJQUFJLEVBQUksSUFDNUIsQ0FDRixDQUVBLElBQUkscUJDbkhHLE1BQU0sZ0JBQW9DLENBSS9DLGFBQWMsQ0FIZGlqQixFQUFBLGFBQ0FBLEVBQUEsb0JBQ0FBLEVBQUEseUJBRUUsS0FBSyxLQUFPLFFBQ1osS0FBSyxZQUFjLEdBQ25CLEtBQUssaUJBQW1CLEdBQ3hCLEtBQUssU0FBUyxDQUNoQixDQUVBLE1BQU0sUUFDSkMsRUFDQXJVLEVBQ0F0WCxFQUN3QixDQUN4QixLQUFLLFlBQWMyckIsRUFBVyxZQUM5QixLQUFLLGlCQUFtQkEsRUFBVyxZQUNuQyxRQUFRLElBQUkzckIsQ0FBTyxFQUNuQixJQUFJeUksRUFBUyxDQUNYLFFBQVMsR0FDVCxPQUFRLEVBQUEsRUFFTixHQUFBLENBQ0YsTUFBTWl3QyxFQUF3QixNQUFNLHlCQUNsQyxLQUFLLGlCQUFpQixRQUFRLElBQUksRUFBQSxFQUloQyxLQUFLLGlCQUFpQixZQUFZLGVBQzlCLE1BQUEsU0FDSixLQUFLLGlCQUFpQixZQUFZLEtBQ2xDLEtBQUssaUJBQWlCLFFBQVEsSUFBSSxHQUNsQzE0QyxFQUNBLEdBQ0EwNEMsQ0FBQSxFQUlGLEtBQUssaUJBQWlCLFlBQVksS0FDL0IsSUFBSzF5QyxHQUFNQSxFQUFFLEtBQUssRUFDbEIsS0FBTTJ5QyxHQUFVQSxJQUFVLEVBQUksRUFFM0IsTUFBQSxTQUNKLEtBQUssaUJBQWlCLFlBQVksS0FDbEMsS0FBSyxpQkFBaUIsUUFBUSxJQUFJLEdBQ2xDMzRDLEVBQ0EsR0FDQTA0QyxDQUFBLEVBR0ksTUFBQSxTQUNKLEtBQUssaUJBQWlCLFlBQVksS0FDbEMsS0FBSyxpQkFBaUIsUUFBUSxJQUFJLEdBQ2xDMTRDLEVBQ0EwNEMsQ0FBQSxRQUdHdm1DLEVBQU8sQ0FDTm5TLEVBQUEsT0FBTyxZQUFZbVMsRUFBTXdaLENBQVUsRUFDM0NsakIsRUFBTyxRQUFVLEVBQ25CLENBQ1EsZUFBQSxJQUFJLG1CQUFvQixLQUFLLGdCQUFnQixFQUU5Q0EsQ0FDVCxDQUVBLFVBQWlCLENBQ0YsYUFBQSxLQUFLLElBQUksRUFBSSxJQUM1QixDQUNGLENBRUEsSUFBSSxpQkFFSixNQUFNLG9CQUFzQixDQUFDekosRUFBVW92QixJQUM5QkEsRUFBSyxNQUFNLEdBQUcsRUFBRSxPQUFPLENBQUNDLEVBQUdDLEtBQU9ELEdBQUssQ0FBQSxHQUFJQyxDQUFDLEVBQUd0dkIsQ0FBRyxFQVlyRCxPQUFTLElBQUkwNEMsY0FBQUEscUJBRWIsYUFBYSxDQUFDL0ksRUFBYTN1QyxJQUFtQixDQUM5QyxHQUFBMnVDLEVBQUssS0FBSyxhQUFlLFdBQVksQ0FDdkMsTUFBTWlLLEVBQU9qSyxFQUFLLEtBQ2xCLE9BQVEsb0JBQW9CM3VDLEVBQVEsVUFBVTQ0QyxFQUFNLEtBQUssSUFBSSxDQUN0RCxTQUFBakssRUFBSyxLQUFLLGFBQWUsUUFBUSxDQUN4QyxNQUFNdUosRUFBUXZKLEVBQUssS0FDbkIsT0FBTzN1QyxFQUFRLE9BQU9rNEMsRUFBTSxJQUFJLEVBQUUsS0FBQSxLQUdsQyxRQUFPdkosRUFBSyxLQUFLLFVBRXJCLEVBRU0sU0FBVyxNQUNma0ssRUFDQUMsRUFDQTk0QyxFQUNBKzRDLEVBQ0FMLElBQ0csQ0FDSCxNQUFNTSxFQUFjLE1BQU0sZ0JBQWdCSCxFQUFhQyxFQUFPOTRDLENBQU8sRUFFckUsR0FEQSxRQUFRLElBQUlnNUMsQ0FBVyxFQUNuQkEsRUFBWSxRQUFRLFNBQVcsR0FBS0QsRUFDdEMsTUFBTSxTQUFTRixFQUFhQyxFQUFPOTRDLEVBQVMwNEMsQ0FBcUIsTUFDNUQsQ0FFTCxNQUFNTyxFQUFlSixFQUNsQixPQUNFN3lDLEdBQ0MsT0FBTyxLQUFLQSxFQUFFLElBQUksRUFBRSxPQUFTLEdBQzdCLENBQUMweUMsRUFBc0IsU0FBUzF5QyxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFBLEVBRXRELElBQUtBLEdBQU0sQ0FDTixHQUFBQSxFQUFFLEtBQUssYUFBZSxXQUFZLENBQ3BDLE1BQU00eUMsRUFBTzV5QyxFQUFFLEtBQ1IsTUFBQSxDQUNMLE1BQU8sb0JBQW9CaEcsRUFBUSxVQUFVNDRDLEVBQU0sS0FBSyxJQUFJLEVBQzVELEtBQU01eUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUEsQ0FFaEIsU0FBQUEsRUFBRSxLQUFLLGFBQWUsUUFBUSxDQUNyQyxNQUFNa3lDLEVBQVFseUMsRUFBRSxLQUNULE1BQUEsQ0FDTCxNQUFPaEcsRUFBUSxPQUFPazRDLEVBQU0sSUFBSSxFQUFFLE1BQ2xDLEtBQU1seUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUEsQ0FDdkIsS0FHTyxPQUFBLENBQ0wsTUFBT0EsRUFBRSxLQUFLLFdBQ2QsS0FBTUEsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUEsQ0FFekIsQ0FDRCxFQUVHa3pDLEVBQWdDRixFQUFZLFFBQVEsSUFDdkRHLEdBQWlCLENBQ2hCLE1BQU1DLEVBQXVDLENBQUEsRUFHN0MsVUFBV0MsS0FBV0osRUFDaEJFLEVBQWFFLEVBQVEsSUFBSSxJQUNkRCxFQUFBQyxFQUFRLElBQUksRUFBSSxDQUMzQixNQUFPQSxFQUFRLEtBQUEsR0FLZCxNQUFBLENBQ0wsR0FBSUYsRUFBYSxJQUFJLE1BQ3JCLE9BQVFDLENBQUEsQ0FFWixDQUFBLEVBR0YsUUFBUSxJQUFJRixDQUFhLEVBQ25CLE1BQUEsT0FBTyxPQUFPLGNBQWMsQ0FDaEMsSUFBS0osRUFDTCxRQUFTSSxDQUFBLENBQ1YsQ0FDSCxDQUNGLEVBRU0sVUFBVSxDQUFDaEIsRUFBZ0J0eEMsSUFBVSxDQUN6QyxHQUFHc3hDLEVBQU0sT0FBTyxVQUFVLFFBQVVBLEVBQU0sT0FBTyxVQUFVLGNBQ3pELE1BQU8sR0FBR0EsRUFBTSxJQUFJLE1BQU0sT0FBT3R4QyxDQUFHLENBQUMsR0FFcEMsR0FBQSxPQUFPQSxHQUFNLFNBQ2QsTUFBTyxHQUFHc3hDLEVBQU0sSUFBSSxPQUFPdHhDLENBQUcsR0FFbEMsRUFHTSxnQkFBa0IsTUFDdEJpeUMsRUFDQUMsRUFDQTk0QyxJQUNHLENBQ0csTUFBQXM1QyxFQUFXVCxFQUNkLE9BQVE3eUMsR0FBTUEsRUFBRSxHQUFHLEtBQU9BLEVBQUUsR0FBRyxRQUFVQSxFQUFFLEdBQUcsT0FBTyxPQUFTLEdBQUtBLEVBQUUsS0FBSyxFQUMxRSxJQUFLQSxHQUFNLENBQ04sR0FBQUEsRUFBRSxLQUFLLGFBQWUsV0FBWSxDQUNwQyxNQUFNdXpDLEVBQVF2ekMsRUFBRSxLQUNoQixPQUFPLFVBQVVBLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxvQkFBb0JoRyxFQUFRLFVBQVl1NUMsRUFBTSxLQUFLLElBQUksQ0FBQyxDQUVsRixTQUFBdnpDLEVBQUUsS0FBSyxhQUFlLFFBQVEsQ0FDcEMsTUFBTWt5QyxFQUFRbHlDLEVBQUUsS0FDVCxPQUFBLFVBQVVBLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRWhHLEVBQVEsT0FBT2s0QyxFQUFNLElBQUksRUFBRSxLQUFLLENBQUEsS0FHekQsUUFBQSxVQUFVbHlDLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRUEsRUFBRSxLQUFLLFVBQVUsQ0FDbkQsQ0FDRCxFQUNBLEtBQUssR0FBRyxFQUVQLE9BQUFzekMsRUFBUyxTQUFXLEVBQ2YsQ0FDTCxRQUFTLENBQUMsQ0FBQSxFQUdMLE1BQU0sT0FBTyxPQUFPLFdBQVcsQ0FDcEMsSUFBS1IsRUFFTCxNQUFPUSxDQUFBLENBQ1IsQ0FFTCxFQUVNLFNBQVcsTUFDZlQsRUFDQUMsRUFDQTk0QyxFQUNBMDRDLElBQ0csQ0FDRyxNQUFBYyxFQUFrQjdLLEdBQ25CLENBQUNBLEVBQUssR0FBRyxRQUFVQSxFQUFLLEdBQUcsT0FBTyxTQUFTLEVBQ3JDLEdBRU4sR0FBQUEsRUFBSyxLQUFLLGFBQWUsWUFBZUEsRUFBSyxLQUFjLEtBQUssTUFHaEVBLEVBQUssS0FBSyxhQUFlLFNBQVlBLEVBQUssS0FBb0IsTUFHOURBLEVBQUssS0FBSyxhQUFlLFFBQVVBLEVBQUssS0FBSyxhQUFhLE1BS3pEL2lCLEVBQVNpdEIsRUFDWixPQUFPVyxDQUFhLEVBQ3BCLE9BQVE3SyxHQUFTLENBQUMrSixFQUFzQixTQUFTL0osRUFBSyxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUN4RSxPQUFPLENBQUM4SyxFQUFhOUssS0FDYixDQUNMLEdBQUc4SyxFQUNILENBQUM5SyxFQUFLLEdBQUcsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFHLENBQ3hCLE1BQU8sYUFBYUEsRUFBSzN1QyxDQUFPLENBQ2xDLENBQUEsR0FFRCxDQUFFLENBQUEsRUFDSDRyQixHQUFVLE9BQU8sS0FBS0EsQ0FBTSxFQUFFLE9BQVMsSUFDekMsUUFBUSxJQUFJQSxDQUFNLEVBQ1osTUFBQSxPQUFPLE9BQU8sVUFBVSxDQUM1QixJQUFJa3RCLEVBQ0osT0FBQWx0QixDQUFBLENBQ0QsRUFNTCxFQUVNLHlCQUEyQixNQUFPa3RCLEdBQy9CLE1BQU0sT0FBTyxJQUNqQixjQUFjLENBQUUsSUFBS0EsQ0FBTyxDQUFBLEVBQzVCLEtBQU16ckIsR0FDTCxPQUFPLE9BQU9BLEVBQUssVUFBVSxFQUMxQixPQUFRb0UsR0FBT0EsRUFBYSxTQUFXLE1BQVMsRUFDaEQsUUFBU0EsR0FBT0EsRUFBYSxPQUFPLGNBQWMsSUFBS3pyQixHQUFNQSxFQUFFLEtBQUssQ0FBQyxDQUFBLEVDclR2RSxNQUFNLHFCQUF5QyxDQUlwRCxhQUFjLENBSGQwbEIsRUFBQSxhQUNBQSxFQUFBLG9CQUNBQSxFQUFBLGNBRUUsS0FBSyxLQUFPLGVBQ1osS0FBSyxZQUFjLEdBQ25CLEtBQUssTUFBUSxHQUNiLEtBQUssU0FBUyxDQUNoQixDQUVBLE1BQU0sUUFDSkMsRUFDQXJVLEVBQ0F0WCxFQUN3QixDQUN4QixLQUFLLE1BQVEyckIsRUFBVyxZQUN4QixLQUFLLFlBQWNBLEVBQVcsWUFFOUIsSUFBSWxqQixFQUFTLENBQ1gsUUFBUyxHQUNULE9BQVEsRUFBQSxFQUdOLEdBQUEsQ0FDRixNQUFNbWpCLEVBQVN0VSxFQUFNLE9BQ3JCLEdBQUcsRUFBRSxLQUFLLE1BQU0sTUFBTSxRQUFRc1UsR0FDNUIsTUFBTSxJQUFJLE1BQU0sU0FBUyxLQUFLLE1BQU0sTUFBTSxJQUFJLGVBQWUsRUFHNUQsS0FBSyxNQUFNLFNBQVcsS0FBSyxNQUFNLFFBQVEsT0FBTyxLQUN6QzVyQixFQUFBLFVBQVUsS0FBSyxNQUFNLFFBQVEsSUFBSSxFQUFFNHJCLEVBQU8sS0FBSyxNQUFNLE1BQU0sSUFBSSxFQUFFLGFBR3RFelosRUFBTyxDQUNKblMsRUFBQSxPQUFPLFlBQVltUyxFQUFNd1osQ0FBVSxFQUMzQ2xqQixFQUFPLFFBQVUsRUFDbkIsQ0FDTyxPQUFBQSxDQUNULENBRUEsVUFBaUIsQ0FDRixhQUFBLEtBQUssSUFBSSxFQUFJLElBQzVCLENBQ0YsQ0FFQSxJQUFJLHNCQ3ZERyxNQUFNLGtCQUFxQyxDQUk5QyxhQUFhLENBSGJpakIsRUFBQSxhQUNBQSxFQUFBLG9CQUNBQSxFQUFBLGNBRUksS0FBSyxLQUFLLFdBQ1YsS0FBSyxZQUFZLEdBQ2pCLEtBQUssTUFBTSxDQUNQLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFDZCxRQUFRLEdBQ1IsY0FBYyxFQUFBLEVBR2xCLEtBQUssU0FBUyxDQUNsQixDQU9BLE1BQU0sUUFBUUMsRUFBdUJyVSxFQUFVdFgsRUFBeUMsQ0FDcEYsSUFBSXlJLEVBQU8sQ0FDUCxRQUFRLEdBQ1IsT0FBTyxFQUFBLEVBRVIsR0FBQSxDQUdLLEdBREosS0FBSyxZQUFZa2pCLEVBQVcsWUFDeEIsRUFBRSxVQUFXQSxFQUFXLGNBQWdCLEVBQUUsWUFBYUEsRUFBVyxjQUFnQixFQUFFLGtCQUFrQkEsRUFBVyxhQUMxRyxPQUFBbGpCLEVBRVgsS0FBSyxNQUFRa2pCLEVBQVcsWUFFeEIsTUFBTUMsRUFBU3RVLEVBQU0sT0FDZnJWLEVBQVEycEIsRUFBTyxLQUFLLE1BQU0sTUFBTSxJQUFJLEVBQUUsTUFFNUMsT0FEYyxJQUFJLE9BQU8sS0FBSyxNQUFNLGFBQWEsRUFDdkMsS0FBSzNwQixDQUFLLEVBSWhCMnBCLEVBQU8sS0FBSyxNQUFNLE1BQU0sSUFBSSxFQUFFLE1BQVEsS0FIdENBLEVBQU8sS0FBSyxNQUFNLE1BQU0sSUFBSSxFQUFFLE1BQU0sS0FBSyxNQUFNLFFBSzNDbmpCLEVBQUEsQ0FDSixRQUFRLEdBQ1IsT0FBTyxFQUFBLEVBRUpBLFFBQ0owSixFQUFNLENBQ0QsT0FBQW5TLEVBQUEsT0FBTyxZQUFZbVMsRUFBTXdaLENBQVUsRUFDM0NsakIsRUFBTyxRQUFRLEdBQ1JBLENBQ1gsQ0FDSixDQUNBLFVBQWlCLENBQ0EsYUFBQSxLQUFLLElBQUksRUFBRSxJQUM1QixDQUVKLENBQ0EsSUFBSSxtQkMzREcsTUFBTSxlQUFtQyxDQUk1QyxhQUFjLENBSGRpakIsRUFBQSxhQUNBQSxFQUFBLG9CQUNBQSxFQUFBLGNBRUksS0FBSyxLQUFPLGNBQ1osS0FBSyxZQUFjLEdBQ25CLEtBQUssTUFBUSxDQUNULE1BQU8sQ0FBRSxLQUFNLEVBQUcsRUFDbEIsUUFBUyxHQUNULFdBQVcsRUFBQSxFQUdmLEtBQUssU0FBUyxDQUNsQixDQU9BLE1BQU0sUUFBUUMsRUFBeUJyVSxFQUFXdFgsRUFBMEMsQ0FDeEYsSUFBSXlJLEVBQVMsQ0FDVCxRQUFTLEdBQ1QsT0FBUSxFQUFBLEVBR1IsR0FBQSxDQUlJLEdBRkosS0FBSyxZQUFja2pCLEVBQVcsWUFFMUIsRUFBRSxVQUFXQSxFQUFXLGNBQWdCLEVBQUUsWUFBYUEsRUFBVyxjQUFnQixFQUFFLGVBQWdCQSxFQUFXLGFBQ3hHLE9BQUFsakIsRUFFWCxLQUFLLE1BQVFrakIsRUFBVyxZQUN4QixNQUFNQyxFQUFTdFUsRUFBTSxPQUVyQixHQUFHLEVBQUUsS0FBSyxNQUFNLE1BQU0sUUFBUXNVLEdBQzFCLE1BQU0sSUFBSSxNQUFNLFNBQVMsS0FBSyxNQUFNLE1BQU0sSUFBSSxlQUFlLEVBRWpFLE1BQU0zcEIsRUFBUTJwQixFQUFPLEtBQUssTUFBTSxNQUFNLElBQUksRUFBRSxNQUV4QyxPQUFBLEtBQUssTUFBTSxhQUFlLEtBQ3JCLHVEQUF1RCxLQUFLM3BCLENBQUssR0FJbEUycEIsRUFBTyxLQUFLLE1BQU0sTUFBTSxJQUFJLEVBQUUsTUFBUSxLQUN0Q25qQixFQUFPLE9BQU8sSUFKZG1qQixFQUFPLEtBQUssTUFBTSxNQUFNLElBQUksRUFBRSxNQUFRLEtBQUssTUFBTSxRQU05QyxLQUFLLE1BQU0sYUFBZSxNQUM1QixnQkFBZ0IsS0FBSzNwQixDQUFLLEdBSTNCMnBCLEVBQU8sS0FBSyxNQUFNLE1BQU0sSUFBSSxFQUFFLE1BQVEsS0FDdENuakIsRUFBTyxPQUFPLElBSmRtakIsRUFBTyxLQUFLLE1BQU0sTUFBTSxJQUFJLEVBQUUsTUFBUSxLQUFLLE1BQU0sUUFPNUNuakIsRUFBQSxDQUNMLFFBQVMsR0FDVCxPQUFRLEVBQUEsRUFHVEEsUUFDRjBKLEVBQU8sQ0FDSixPQUFBblMsRUFBQSxPQUFPLFlBQVltUyxFQUFNd1osQ0FBVSxFQUMzQ2xqQixFQUFPLFFBQVUsR0FDVkEsQ0FDWCxDQUNKLENBQ0EsVUFBaUIsQ0FDQSxhQUFBLEtBQUssSUFBSSxFQUFJLElBQzlCLENBRUosQ0FDQSxJQUFJLGdCQzVFRyxNQUFNLG1CQUFzQyxDQUkvQyxhQUFhLENBSGJpakIsRUFBQSxhQUNBQSxFQUFBLG9CQUNBQSxFQUFBLGNBRUksS0FBSyxLQUFLLFVBQ1YsS0FBSyxZQUFZLEdBQ2pCLEtBQUssTUFBTSxDQUNQLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFDZCxRQUFRLEdBQ1IsVUFBVSxDQUFBLEVBR2QsS0FBSyxTQUFTLENBQ2xCLENBT0EsTUFBTSxRQUFRQyxFQUF1QnJVLEVBQVV0WCxFQUF5QyxDQUNwRixJQUFJeUksRUFBTyxDQUNQLFFBQVEsR0FDUixPQUFPLEVBQUEsRUFFUixHQUFBLENBR0ssR0FESixLQUFLLFlBQVlrakIsRUFBVyxZQUN4QixFQUFFLFVBQVdBLEVBQVcsY0FBZ0IsRUFBRSxZQUFhQSxFQUFXLGNBQWdCLEVBQUUsa0JBQWtCQSxFQUFXLGFBQzFHLE9BQUFsakIsRUFHWCxLQUFLLE1BQVFrakIsRUFBVyxZQUV4QixNQUFNQyxFQUFTdFUsRUFBTSxPQUNmclYsRUFBUTJwQixFQUFPLEtBQUssTUFBTSxNQUFNLElBQUksRUFBRSxNQUN0Qzh0QixFQUFZLEtBQUssTUFBTSxVQUMxQixPQUFBejNDLElBQVUsUUFBYUEsSUFBVSxLQUUzQnkzQyxFQUFZejNDLEVBQU0sT0FDdkIycEIsRUFBTyxLQUFLLE1BQU0sTUFBTSxJQUFJLEVBQUUsTUFBUSxLQUFLLE1BQU0sUUFFakRBLEVBQU8sS0FBSyxNQUFNLE1BQU0sSUFBSSxFQUFFLE1BQVEsS0FFbENuakIsRUFBQSxDQUNKLFFBQVEsR0FDUixPQUFPLEVBQUEsR0FFSkEsUUFFSjBKLEVBQU0sQ0FDRCxPQUFBblMsRUFBQSxPQUFPLFlBQVltUyxFQUFNd1osQ0FBVSxFQUMzQ2xqQixFQUFPLFFBQVEsR0FDUkEsQ0FDWCxDQUNKLENBQ0EsVUFBaUIsQ0FDQSxhQUFBLEtBQUssSUFBSSxFQUFFLElBQzVCLENBRUosQ0FDQSxJQUFJLG9CQy9ERyxNQUFNLG9CQUF3QyxDQUlqRCxhQUFjLENBSGRpakIsRUFBQSxhQUNBQSxFQUFBLG9CQUNBQSxFQUFBLGNBRUksS0FBSyxLQUFPLE9BQ1osS0FBSyxZQUFjLEdBQ25CLEtBQUssTUFBUSxDQUNULFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQSxFQUVwQixLQUFLLFNBQVMsQ0FDbEIsQ0FPQSxNQUFNLFFBQVFDLEVBQXlCclUsRUFBV3RYLEVBQTBDLENBQ3hGLElBQUl5SSxFQUFTLENBQ1QsUUFBUyxHQUNULE9BQVEsRUFBQSxFQUdSLEdBQUEsQ0FJSSxHQUZKLEtBQUssWUFBY2tqQixFQUFXLFlBRTFCLEVBQUUsWUFBYUEsRUFBVyxhQUNuQixPQUFBbGpCLEVBRVgsS0FBSyxNQUFRa2pCLEVBQVcsWUFFcEIsSUFBQWd1QixNQUFZLEtBRWhCLE9BQUcsS0FBSyxNQUFNLFNBQVcsS0FBSyxNQUFNLFFBQVEsT0FBTyxLQUMvQzM1QyxFQUFRLFVBQVUsS0FBSyxNQUFNLFFBQVEsSUFBSSxFQUFFMjVDLEVBQU0sZUFHOUNseEMsUUFFRjBKLEVBQU8sQ0FDSixPQUFBblMsRUFBQSxPQUFPLFlBQVltUyxFQUFNd1osQ0FBVSxFQUMzQ2xqQixFQUFPLFFBQVUsR0FDVkEsQ0FDWCxDQUNKLENBQ0EsVUFBaUIsQ0FDQSxhQUFBLEtBQUssSUFBSSxFQUFJLElBQzlCLENBRUosQ0FDQSxJQUFJLHFCQzNDRyxNQUFNLGlCQUFvQyxDQUk3QyxhQUFhLENBSGJpakIsRUFBQSxhQUNBQSxFQUFBLG9CQUNBQSxFQUFBLGNBRUksS0FBSyxLQUFLLFNBQ1YsS0FBSyxZQUFZLEdBRWpCLEtBQUssTUFBTSxDQUNQLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFDZCxVQUFVLEdBQ1YsTUFBTSxHQUNOLEtBQUssRUFBQSxFQUdULEtBQUssU0FBUyxDQUNsQixDQU9BLHFCQUFxQmt1QixFQUE4QkMsRUFBbUJDLEVBQWtCQyxFQUFtQ3ppQyxFQUFvQixDQUV2SSxJQUFBMGlDLEVBTUosR0FKZ0JBLEVBQUFILEVBQVcsTUFBTSxXQUFXLEVBSXpDRyxJQUFrQixNQUFRSCxJQUFlLE1BQVFBLElBQWUsR0FBRyxDQUUvRCxHQUFBRCxJQUFjLFVBQVlBLElBQWMsUUFBVUEsSUFBYyxZQUFjQSxJQUFjLFFBQVVBLElBQWMsZUFDeEdBLElBQWMsdUJBQXlCQSxJQUFjLGdCQUFrQkEsSUFBYyxnQkFBa0JBLElBQWMsYUFBZUEsSUFBYyxhQUFlQSxJQUFjLGVBQzFMLE1BQUF0aUMsRUFBTSxPQUFPd2lDLENBQVMsRUFBRSxNQUFXLElBQUlBLEVBQVUsdUJBQzNDLElBQUksTUFBTSxJQUFJQSxFQUFVLGdEQUFtRCxLQUc1RUMsRUFDTCxNQUFBemlDLEVBQU0sT0FBT3dpQyxDQUFTLEVBQUUsTUFBVyxJQUFJQSxFQUFVLCtCQUMzQyxJQUFJLE1BQU0sSUFBSUEsRUFBVSx3REFBMkQsQ0FFakcsQ0FFTyxNQUFBLEVBQ1gsQ0FPQSx3QkFBd0JGLEVBQThCSyxFQUFxQkgsRUFBa0JDLEVBQW1DemlDLEVBQW9CLENBRTVJLElBQUE0aUMsRUFFSixRQUFRMTZDLEVBQUcsRUFBRUEsRUFBRXk2QyxFQUFnQixPQUFPejZDLElBRTlCLE9BQU95NkMsRUFBZ0J6NkMsQ0FBQyxHQUFNLFdBQ2xDMDZDLEVBQW1CRCxFQUFnQno2QyxDQUFDLEVBQUUsTUFBTSxXQUFXLEdBS3hELEdBQUEwNkMsR0FBcUIsTUFBMkNBLElBQXFCLElBQU1ELEVBQWdCLFNBQVcsRUFBRSxDQUVwSCxHQUFBTCxJQUFjLFVBQVlBLElBQWMsUUFBVUEsSUFBYyxZQUFjQSxJQUFjLFFBQVVBLElBQWMsZUFDaEhBLElBQWMsdUJBQXlCQSxJQUFjLGdCQUFrQkEsSUFBYyxnQkFBa0JBLElBQWMsYUFBZUEsSUFBYyxhQUFlQSxJQUFjLGVBQ2xMLE1BQUF0aUMsRUFBTSxPQUFPd2lDLENBQVMsRUFBRSxNQUFXLElBQUlBLEVBQVUsMEJBQzNDLElBQUksTUFBTSxJQUFJQSxFQUFVLG1EQUFzRCxLQUcvRUMsRUFDTCxNQUFBemlDLEVBQU0sT0FBT3dpQyxDQUFTLEVBQUUsTUFBVyxJQUFJQSxFQUFVLHdDQUMzQyxJQUFJLE1BQU0sSUFBSUEsRUFBVSxpRUFBb0UsQ0FFMUcsQ0FFTyxNQUFBLEVBQ1gsQ0FPQSxpQkFBaUJELEVBQW1CQyxFQUFrQnhpQyxFQUFvQixDQUNsRSxJQUFBNmlDLEVBQW1CLE9BQU9OLENBQVUsRUFHckMsR0FBQSxDQUFDLFNBQVNNLENBQWdCLEVBQ3pCLE1BQUE3aUMsRUFBTSxPQUFPd2lDLENBQVMsRUFBRSxNQUFXLElBQUlBLEVBQVUsOEJBQzNDLElBQUksTUFBTSxJQUFJQSxFQUFVLDBEQUE2RCxFQUV4RixNQUFBLEVBQ1gsQ0FNQSxlQUFlRCxFQUFtQkMsRUFBa0J4aUMsRUFBb0IsQ0FFaEUsSUFBQThpQyxFQUFtQlAsRUFBVyxNQUFNLDBCQUEwQixFQUM5RFEsRUFBc0JSLEVBQVcsTUFBTSwwQkFBMEIsRUFDakVTLEVBQW1CVCxFQUFXLE1BQU0sMEJBQTBCLEVBQzlEVSxFQUFpQlYsRUFBVyxNQUFNLDBCQUEwQixFQUM1RFcsRUFBc0JYLEVBQVcsTUFBTSw2REFBNkQsRUFDcEdZLEVBQVdaLEVBQVcsTUFBTSxtREFBbUQsRUFDL0V6dEIsRUFLSixHQUhPQSxFQUFBLElBQUksS0FBS3l0QixDQUFVLEVBR3ZCenRCLElBQVMsUUFBYSxDQUFDLE1BQU1BLEVBQUssUUFBQSxDQUFTLEdBRXZDZ3VCLElBQXFCLE1BQVFFLElBQXFCLE1BQVFDLElBQW1CLE1BQVFGLElBQXdCLE1BQVFJLElBQWEsTUFBUUQsSUFBd0IsS0FDN0osTUFBQWxqQyxFQUFNLE9BQU93aUMsQ0FBUyxFQUFFLE1BQVcsSUFBSUEsRUFBVSw4QkFDM0MsSUFBSSxNQUFNLElBQUlBLEVBQVUsdURBQTBELEVBRzdGLE1BQUEsRUFDWCxDQU1BLGVBQWVELEVBQW1CQyxFQUFrQnhpQyxFQUFvQixDQUtwRSxHQUhnQnVpQyxFQUFXLE1BQU0sMkNBQTJDLElBRzFELEtBQ2QsTUFBQXZpQyxFQUFNLE9BQU93aUMsQ0FBUyxFQUFFLE1BQVcsSUFBSUEsRUFBVSw4QkFDM0MsSUFBSSxNQUFNLElBQUlBLEVBQVUsOEVBQWlGLEVBRTVHLE1BQUEsRUFDWCxDQVFBLGlCQUFpQkQsRUFBb0JELEVBQWtCRSxFQUFrQnhpQyxFQUFtQixDQUNwRixJQUFBbWpDLEVBQ0FydUIsRUFLSixHQUZPQSxFQUFBLElBQUksS0FBS3l0QixDQUFVLEVBRXZCenRCLElBQVMsUUFBYSxDQUFDLE1BQU1BLEVBQUssUUFBQSxDQUFTLEVBQUUsQ0FHNUMsR0FBR3d0QixJQUFjLFdBQ2IsT0FBQWEsRUFBVXJ1QixFQUFLLGNBQ1JxdUIsRUFLUCxJQUFBRCxFQUFzQlgsRUFBVyxNQUFNLDZEQUE2RCxFQUNwR2EsRUFBbUNiLEVBQVcsTUFBTSxtREFBbUQsRUFFeEcsR0FBQVcsSUFBd0IsTUFBUUUsSUFBcUMsS0FBSyxDQUV6RSxJQUFJQyxFQUFRdnVCLEVBQUssZUFBZSxRQUFTLENBQUUsU0FBVSxhQUFjLEVBQ25FLFFBQVEsSUFBSXV1QixDQUFPLEVBQ2ZDLElBQUFBLEVBQVVELEVBQVEsTUFBTSwrQkFBK0IsRUFDM0QsR0FBR0MsSUFBYyxLQUFLLENBQ2xCLElBQUlDLEVBQVksRUFDWkMsRUFBYSxFQUNiQyxFQUFXLEVBRVIsTUFEVyxHQUFHSCxFQUFVQyxDQUFTLENBQUMsSUFBSUQsRUFBVUUsQ0FBVSxDQUFDLElBQUlGLEVBQVVHLENBQVEsQ0FBQyxFQUU3RixDQUNKLENBR0ksSUFBQUgsRUFBVWYsRUFBVyxNQUFNLDhCQUE4QixFQUM3RCxHQUFHZSxJQUFjLEtBQUssQ0FDbEIsSUFBSUMsRUFBWSxFQUNaQyxFQUFhLEVBQ2JDLEVBQVcsRUFFUixNQURXLEdBQUdILEVBQVVDLENBQVMsQ0FBQyxJQUFJRCxFQUFVRSxDQUFVLENBQUMsSUFBSUYsRUFBVUcsQ0FBUSxDQUFDLEVBRTdGLENBRUosQ0FFQSxNQUFBempDLEVBQU0sT0FBT3dpQyxDQUFTLEVBQUUsTUFBVyxJQUFJQSxFQUFVLDhCQUMzQyxJQUFJLE1BQU0sSUFBSUEsRUFBVSx1REFBMEQsQ0FDNUYsQ0FPQSxpQkFBaUJELEVBQW1CbUIsRUFBaUNsQixFQUFrQnhpQyxFQUFxQixDQUd4RyxHQUFHMGpDLElBQWlCLE9BQVUsQ0FDdEIsSUFBQXY2QyxFQUFVLE9BQU8sS0FBS3U2QyxDQUFZLEVBQ3RDLFFBQVFDLEtBQWdCeDZDLEVBQ2pCLEdBQUFBLEVBQVF3NkMsQ0FBWSxJQUFNcEIsRUFDbEIsTUFBQSxFQUduQixDQUVBLE1BQUF2aUMsRUFBTSxPQUFPd2lDLENBQVMsRUFBRSxNQUFTLElBQUlBLEVBQVUsbUNBQ3pDLElBQUksTUFBTSxJQUFJQSxFQUFVLDREQUErRCxDQUNqRyxDQU9BLE1BQU0sYUFBYUQsRUFBd0MsQ0FHdkQsSUFBSXFCLEVBQVksQ0FBQSxFQUViLEdBQUEsQ0FHQyxJQUFJQyxHQURRLE1BQU0sUUFBUSxJQUFJLFFBQVEsSUFBSSxJQUFJLFlBQWEsRUFBSSxFQUFHLE1BQU8sQ0FBQyxNQUFPdEIsRUFBVyxLQUFLLEdBQUcsRUFBRSxHQUNqRixNQUVqQixHQUFBc0IsRUFBVSxTQUFXdEIsRUFBVyxPQUNoQyxNQUFNLElBQUksTUFJZCxRQUFTdUIsS0FBa0JELEVBQ3ZCLFFBQVFFLEtBQWtCeEIsRUFDbkJzQixFQUFVQyxDQUFjLEVBQUUsT0FBU3ZCLEVBQVd3QixDQUFjLEdBQzNESCxFQUFVLEtBQUtDLEVBQVVDLENBQWMsRUFBRSxJQUFJLEVBTXpELEdBQUdGLElBQWMsT0FDYixNQUFNLElBQUksS0FDZCxNQUNFLENBQ0ssTUFBQSxFQUNYLENBQ08sT0FBQUEsQ0FDWCxDQU9BLE1BQU0scUJBQXFCckIsRUFBOEMsQ0FHakUsSUFBQXlCLEVBR0QsR0FBQSxDQUVDLE1BQU1qdUIsRUFBTSxNQUFNLFFBQVEsSUFBSSxRQUFRLElBQUksSUFBSSx5QkFBMEIsRUFBSSxFQUFHLE1BQU8sQ0FBQyxNQUFNLENBQUN3c0IsQ0FBVyxFQUFFLEVBUTNHLEdBTFF4c0IsRUFBSyxjQUFjLENBQTRCLEVBQUUsT0FBU3dzQixJQUN6Q3lCLEVBQUFqdUIsRUFBSyxjQUFjLENBQTRCLEVBQUUsTUFJdkVpdUIsSUFBcUIsT0FDcEIsTUFBTSxJQUFJLEtBQ2QsTUFDRSxDQUNLLE1BQUEsRUFDWCxDQUVPLE9BQUFBLENBQ1gsQ0FPQSxNQUFNLGNBQWN6QixFQUE4QyxDQUcxRCxJQUFBMEIsRUFHRCxHQUFBLENBRUMsTUFBTWx1QixFQUFNLE1BQU0sUUFBUSxJQUFJLFFBQVEsSUFBSSxJQUFJLGtCQUFtQixFQUFJLEVBQUcsTUFBTyxDQUFDLE1BQU0sQ0FBQ3dzQixDQUFXLEVBQUUsRUFRcEcsR0FMSXhzQixFQUFLLE9BQU8sQ0FBcUIsRUFBRSxPQUFTd3NCLElBQ2pDMEIsRUFBQWx1QixFQUFLLE9BQU8sQ0FBcUIsRUFBRSxNQUkvQ2t1QixJQUFlLE9BQ2QsTUFBTSxJQUFJLEtBQ2QsTUFDRSxDQUNLLE1BQUEsRUFDWCxDQUVPLE9BQUFBLENBQ1gsQ0FVQSxxQkFBcUIxQixFQUFnQjJCLEVBQWlCNUIsRUFBZ0JFLEVBQXFCLENBR3ZGLElBQUkyQixFQUFnQixDQUFBLEVBR3BCLEdBQUc3QixJQUFjLFVBQVlBLElBQWMsUUFBVUEsSUFBYyxZQUFjQSxJQUFjLE9BQzNGLE1BQU0sSUFBSSxNQUFNLElBQUlFLEVBQVUsb0NBQXVDLEVBSXpFLEdBQUdGLElBQWMsY0FFYixHQUFHLENBQUMsTUFBTSxRQUFRNEIsQ0FBVyxFQUNYQyxFQUFBLEtBQUtELEVBQVksSUFBSSxNQUVuQyxTQUFRaDhDLEVBQUUsRUFBRUEsRUFBRWc4QyxFQUFZLE9BQU9oOEMsSUFDN0JpOEMsRUFBYyxLQUFLRCxFQUFZaDhDLENBQUMsRUFBRSxJQUFJLFVBTTNDcTZDLEVBQVcsU0FBUyxPQUFPLEdBQUtBLEVBQVcsU0FBUyxRQUFRLEdBQUtBLEVBQVcsU0FBUyxpQkFBaUIsR0FDbEdBLEVBQVcsU0FBUyxrQkFBa0IsR0FBS0EsRUFBVyxTQUFTLEtBQUssR0FBS0EsRUFBVyxTQUFTLFVBQVUsR0FBSUEsRUFBVyxTQUFTLFdBQVcsR0FDMUlBLEVBQVcsU0FBUyxXQUFXLEdBQUtBLEVBQVcsU0FBUyxjQUFjLEdBQUtBLEVBQVcsU0FBUyxRQUFRLEdBQUtBLEVBQVcsU0FBUyxNQUFNLEVBQUUsQ0FHM0ksSUFBSTZCLEVBQXFCN0IsRUFBVyxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQ2hELEdBQUcsQ0FBQyxNQUFNLFFBQVEyQixDQUFXLEVBQ1hDLEVBQUEsS0FBS0QsRUFBWUUsQ0FBa0IsQ0FBQyxNQUVsRCxTQUFRbDhDLEVBQUUsRUFBRUEsRUFBRWc4QyxFQUFZLE9BQU9oOEMsSUFDN0JpOEMsRUFBYyxLQUFLRCxFQUFZaDhDLENBQUMsRUFBRWs4QyxDQUFrQixDQUFDLENBRTdELFNBSUcsQ0FBQyxNQUFNLFFBQVFGLENBQVcsRUFDWEMsRUFBQSxLQUFLRCxFQUFZLElBQUksTUFFbkMsU0FBUWg4QyxFQUFFLEVBQUVBLEVBQUVnOEMsRUFBWSxPQUFPaDhDLElBQzdCaThDLEVBQWMsS0FBS0QsRUFBWWg4QyxDQUFDLEVBQUUsSUFBSSxFQU10RCxHQUFHaThDLElBQWtCLE9BQ2pCLE1BQU0sSUFBSSxNQUFNLElBQUkzQixFQUFVLDhCQUFpQyxFQUc1RCxPQUFBMkIsQ0FDWCxDQVVBLE1BQU0sUUFBUTl2QixFQUF1QnJVLEVBQVV0WCxFQUF5QyxDQUVwRixJQUFJeUksRUFBTyxDQUNQLFFBQVEsR0FDUixPQUFPLEVBQUEsRUFFUixHQUFBLENBR0MsR0FEQSxLQUFLLFlBQWNrakIsRUFBVyxZQUMxQixFQUFFLFVBQVdBLEVBQVcsY0FBZ0IsRUFBRSxVQUFXQSxFQUFXLGFBQ3pELE9BQUFsakIsRUFHWCxNQUFNa3pDLEVBQWlCLEVBR2pCekQsRUFBTSxLQUFLLFlBQVl5RCxDQUFnQixFQUFFLE1BQU0sV0FBVyxLQUdoRSxHQUFHekQsSUFBVSxLQUNILE1BQUEsSUFBSSxNQUFNLHVEQUF1RCxFQUt4RSxHQUFBQSxJQUFVLFFBQVVBLElBQVUsWUFBY0EsSUFBVSxZQUFjQSxJQUFVLFVBQ3RFQSxJQUFVLG1CQUFxQkEsSUFBVSxXQUFhQSxJQUFVLFlBQWNBLElBQVUsZ0JBQ3BGQSxJQUFVLGlCQUFrQkEsSUFBVSxVQUFZQSxJQUFTLFFBQVVBLElBQVUsZ0JBQWtCQSxJQUFVLGVBQ2hILE1BQUEsSUFBSSxNQUFNLHFFQUFxRSxFQUl6RixLQUFLLE1BQVF2c0IsRUFBVyxZQUdwQixJQUFBNEMsRUFBYSxLQUFLLE1BQU0sTUFFdEIsTUFBQXFyQixFQUFZLEtBQUssTUFBTSxNQUFNLEtBRTdCRyxFQUFjLEtBQUssTUFBTSxNQUFNLFNBRS9CRCxFQUFVLEtBQUssTUFBTSxNQUFNLEtBRTNCOEIsRUFBZ0IsS0FBSyxNQUFNLEtBRTdCLElBQUFaLEVBQWMsS0FBSyxNQUFNLE1BQU0sUUFFL0JTLEVBRUFJLEVBQWtCLENBQUEsRUFDbEJDLEVBRUFDLEVBR0osR0FBR0gsSUFBb0IsS0FBSyxDQUdsQixNQUFBSSxFQUFzQixDQUFDaDlDLEVBQVVvdkIsSUFDNUJBLEVBQUssTUFBTSxHQUFHLEVBQUUsT0FBTyxDQUFDQyxFQUFHQyxLQUFPRCxHQUFLLENBQUEsR0FBSUMsQ0FBQyxFQUFHdHZCLENBQUcsRUFNMUQsR0FGd0IrOEMsRUFBQSxPQUFPLEtBQUsvN0MsRUFBUSxTQUFTLEVBRXJEKzdDLEVBQXlCLFNBQVcsRUFDbkMsTUFBTSxJQUFJLE1BQU0sSUFBSWpDLEVBQVUsdUNBQTBDLEVBR3hFLElBQUFtQyxHQUVBMXRCLEVBQVcsU0FBUyxHQUFHLEVBRXZCMHRCLEdBQXFCMXRCLEVBQVcsTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUd2QjB0QixHQUFBMXRCLEVBR3JCLElBQUEydEIsRUFFSixRQUFRMThDLEVBQUUsRUFBRUEsRUFBR3U4QyxFQUF5QixPQUFPdjhDLElBQ3hDeThDLEtBQXVCRixFQUF5QnY4QyxDQUFDLElBQzFCMDhDLEVBQUEsSUFLOUIsR0FBRyxDQUFDQSxFQUNBLE1BQU0sSUFBSSxNQUFNLElBQUlwQyxFQUFVLHVDQUEwQyxFQVN6RSxHQU5BbUMsS0FFaUJSLEVBQUFPLEVBQW9CaDhDLEVBQVEsVUFBVWk4QyxFQUFrQixJQUl6RVIsSUFBa0IsSUFBTUEsSUFBa0IsUUFDdEM3QixJQUFjLFVBQVlBLElBQWMsUUFBVUEsSUFBYyxZQUFjQSxJQUFjLFFBQVVBLElBQWMsZUFDaEhBLElBQWMsdUJBQXlCQSxJQUFjLGdCQUFrQkEsSUFBYyxnQkFBa0JBLElBQWMsYUFBZUEsSUFBYyxhQUFlQSxJQUFjLGdCQUNsTCxNQUFNLElBQUksTUFBTSxJQUFJRSxFQUFVLHlDQUE0QyxFQU0vRSxHQUFBLE9BQU8yQixHQUFrQixTQUFTLENBQ2pDLElBQUlVLEVBQWlCLENBQUEsRUFTckIsR0FQR1YsRUFBYyxPQUFTLEVBQ3RCVSxFQUFpQixPQUFPLEtBQUtWLEVBQWMsQ0FBQyxDQUFDLEVBRTFCVSxFQUFBLE9BQU8sS0FBS1YsQ0FBYSxFQUk3Q1UsRUFBaUIsU0FBUyxNQUFNLEdBQUtBLEVBQWlCLFNBQVMsTUFBTSxFQUFFLENBQ3RFVixFQUFjLEtBQUsscUJBQXFCbHRCLEVBQVdrdEIsRUFBYzdCLEVBQVVFLENBQVMsRUFHcEYsVUFBVzczQyxLQUFTdzVDLEVBQ2hCSSxFQUFnQixLQUFLNTVDLENBQUssQ0FFbEMsQ0FBQSxNQUdnQnc1QyxFQUFBejdDLEVBQVEsVUFBVXV1QixDQUFVLEVBQzVDc3RCLEVBQWdCLENBQUMsRUFBSUosRUFJekIsR0FBR0ksSUFBb0IsT0FDbkIsTUFBTSxJQUFJLE1BQU0sSUFBSS9CLEVBQVUsOEJBQWlDLEVBSW5FZ0MsRUFBYyxLQUFLLHdCQUF3QmxDLEVBQVVpQyxFQUFnQi9CLEVBQVVDLEVBQWN6aUMsQ0FBSyxDQUFBLE1BSWxHdWtDLEVBQWdCLEtBQUt0dEIsQ0FBVSxFQUUvQnV0QixFQUFjLEtBQUsscUJBQXFCbEMsRUFBVXJyQixFQUFXdXJCLEVBQVVDLEVBQWN6aUMsQ0FBSyxFQUk5RixJQUFJOGtDLEVBRUFDLEVBQXVCLENBQUEsRUFHM0IsR0FBR1AsR0FHQyxHQUFHbEMsSUFBYyxvQkFBc0JBLElBQWMsbUJBQXFCQSxJQUFjLGFBQWVBLElBQWMsT0FDekZ3QyxFQUFBUCxFQUFnQixLQUFLLEdBQUcsVUFHM0NqQyxJQUFjLFNBQ2hCLEtBQUssaUJBQWlCaUMsRUFBZ0IsQ0FBQyxFQUFFL0IsRUFBVXhpQyxDQUFLLElBQy9COGtDLEVBQUEsT0FBT1AsRUFBZ0IsQ0FBQyxDQUFDLFdBSWhEakMsSUFBYyxRQUFVQSxJQUFjLFlBQzNDLEdBQUcsS0FBSyxlQUFlaUMsRUFBZ0IsQ0FBQyxFQUFFL0IsRUFBVXhpQyxDQUFLLEVBQUUsQ0FDbkQsSUFBQWdsQyxFQUFnQixLQUFLLGlCQUFpQlQsRUFBZ0IsQ0FBQyxFQUFFakMsRUFBVUUsRUFBVXhpQyxDQUFLLEVBQ25GZ2xDLElBQ3lCRixFQUFBRSxFQUVoQyxVQUdLMUMsSUFBYyxPQUNoQixLQUFLLGVBQWVpQyxFQUFnQixDQUFDLEVBQUUvQixFQUFVeGlDLENBQUssSUFDckQ4a0MsRUFBd0JQLEVBQWdCLENBQUMsV0FJeENqQyxJQUFjLGdCQUFrQkEsSUFBYyxZQUNoRCxLQUFLLGlCQUFpQmlDLEVBQWdCLENBQUMsRUFBRWIsRUFBYWxCLEVBQVV4aUMsQ0FBSyxJQUNwRThrQyxFQUF3QlAsRUFBZ0IsQ0FBQyxXQUl4Q2pDLElBQWMsYUFBZUEsSUFBYyxlQUM3QyxLQUFLLGlCQUFpQmlDLEVBQWdCLENBQUMsRUFBRWIsRUFBYWxCLEVBQVV4aUMsQ0FBSyxJQUN0RCtrQyxFQUFBLENBQUMsRUFBSVIsRUFBZ0IsQ0FBQyxXQUluQ2pDLElBQWMsY0FBYyxDQUVqQyxJQUFJc0IsRUFBVSxNQUFNLEtBQUssYUFBYVcsQ0FBZSxFQUdyRCxHQUFHLENBQUNYLEVBQ0EsTUFBQTVqQyxFQUFNLE9BQU93aUMsQ0FBUyxFQUFFLE1BQVMsK0RBQzNCLElBQUksTUFBTSw4REFBOEQsRUFHbEYsUUFBUXVCLE1BQWtCUSxFQUNSUSxFQUFBLEtBQUssQ0FBRSxLQUFNUixFQUFnQlIsRUFBYyxFQUFHLEtBQU1ILEVBQVVHLEVBQWMsQ0FBQSxDQUFHLENBQ2pHLFNBR0t6QixJQUFjLHNCQUFzQixDQUV6QyxJQUFJMkMsRUFBYyxNQUFNLEtBQUsscUJBQXFCaHVCLENBQVUsRUFHNUQsR0FBSWd1QixFQUlBSCxFQUFzQixDQUFDLENBQUUsS0FBTTd0QixFQUFZLEtBQU1ndUIsRUFBYyxNQUgvRCxPQUFBamxDLEVBQU0sT0FBT3dpQyxDQUFTLEVBQUUsTUFBUyxnRUFDM0IsSUFBSSxNQUFNLCtEQUErRCxDQUduRixTQUdLRixJQUFjLGVBQWUsQ0FFbEMsSUFBSXp6QyxFQUFPLE1BQU0sS0FBSyxjQUFjb29CLENBQVUsRUFHOUMsR0FBSXBvQixFQUlBaTJDLEVBQXNCLENBQUMsQ0FBRSxLQUFNN3RCLEVBQVksS0FBTXBvQixFQUFPLE1BSHhELE9BQUFtUixFQUFNLE9BQU93aUMsQ0FBUyxFQUFFLE1BQVMsb0VBQzNCLElBQUksTUFBTSxtRUFBbUUsQ0FJM0YsRUFHRSxNQUFBeHFCLEVBQWtCLEtBQUssbUJBQW1CdHZCLENBQU8sRUFFdkQsR0FBRyxDQUFDc1gsRUFBTSxLQUFLLFNBQVMsU0FBUyxFQUcxQmdZLElBRUk4c0IsSUFBMEIsT0FDbkI5a0MsRUFBQSxPQUFPd2lDLENBQVMsRUFBRSxNQUFRc0MsRUFHMUI5a0MsRUFBQSxPQUFPd2lDLENBQVMsRUFBRSxNQUFRdUMsT0FJdkMsQ0FHRCxlQUFlRyxFQUFjbHRCLEVBQXdCd3FCLEVBQWlCeGlDLEVBQVU4a0MsRUFBMkJDLEVBQW9CLENBR3hIRCxJQUEwQixPQUN6QjlrQyxFQUFNLE9BQU93aUMsQ0FBUyxFQUFFLE1BQVFzQyxFQUdoQzlrQyxFQUFNLE9BQU93aUMsQ0FBUyxFQUFFLE1BQVF1QyxFQUlqQy9zQixJQUNJOHNCLElBQTBCLE9BQ25CLE1BQUFLLEdBQVczQyxFQUFVeGlDLEVBQU04a0MsQ0FBcUIsRUFFaEQsTUFBQUssR0FBVzNDLEVBQVV4aUMsRUFBTStrQyxDQUFhLEVBRzFELENBR2UsZUFBQUksR0FBVzNDLEVBQWlCeGlDLEVBQVVvbEMsRUFBaUIsQ0FDL0QsR0FBQSxDQUNDLElBQUlDLEVBQWdCLENBQ2hCLElBQUtybEMsRUFBTSxNQUNYLEdBQUtBLEVBQU0sU0FDWCxPQUFRLENBQUMsQ0FBQ3dpQyxDQUFTLEVBQUUsQ0FBQyxNQUFRNEMsRUFBWSxDQUFBLEVBR3hDLE1BQUFydkIsRUFBTSxNQUFNLFFBQVEsSUFBSSxRQUFRLElBQUksSUFBSSxlQUFnQixFQUFJLEVBQUcsTUFBT3N2QixDQUFhLENBQUEsTUFFdkYsQ0FDSyxNQUFBLEVBQ1gsQ0FDSixDQUdBSCxFQUFjbHRCLEVBQWdCd3FCLEVBQVV4aUMsRUFBTThrQyxFQUFzQkMsQ0FBYSxDQUVyRixDQUVRLE9BQUE1ekMsRUFBQSxDQUNKLFFBQVEsR0FDUixPQUFPLEVBQUEsRUFFSkEsUUFDSjBKLEVBQVUsQ0FDTCxPQUFBblMsRUFBQSxPQUFPLFlBQVltUyxFQUFNd1osQ0FBVSxFQUMzQ2xqQixFQUFPLFFBQVEsR0FDUkEsQ0FDWCxDQUNKLENBT0EsbUJBQW1CekksRUFBb0IsQ0FFbkMsTUFBTXF2QixFQUFNLEtBQUssYUFBYSxLQUFLLE1BQU0sU0FBUyxFQUNsRCxPQUFJQSxFQUlHQSxFQUFLLFNBQVNBLEVBQUssS0FBS3J2QixDQUFPLEVBRjNCLEVBR2YsQ0FNQSxhQUFheXVCLEVBQW9DLENBQzFDLEdBQUEsQ0FDTyxNQUFBWSxFQUFPLElBQUksY0FFakIsT0FEQUEsRUFBSyxTQUFTWixDQUFTLEVBQ3BCWSxFQUFLLGNBQWNBLEVBQUssSUFBSSxFQUFFLE9BQU8sRUFDN0JBLEVBRUEsVUFFRixDQUNGLE9BQUEsSUFDWCxDQUNKLENBRUEsVUFBaUIsQ0FDQSxhQUFBLEtBQUssSUFBSSxFQUFFLElBQzVCLENBRUosQ0FDQSxJQUFJLGtCQ3R1QkcsTUFBTSxjQUFpQyxDQUkxQyxhQUFhLENBSGIzRCxFQUFBLGFBQ0FBLEVBQUEsb0JBQ0FBLEVBQUEsY0FFSSxLQUFLLEtBQUssU0FDVixLQUFLLFlBQVksR0FDakIsS0FBSyxNQUFNLENBQ1AsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUNkLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQSxFQUdwQixLQUFLLFNBQVMsQ0FDbEIsQ0FPQSxNQUFNLFFBQVFDLEVBQXVCclUsRUFBVXRYLEVBQXlDLENBQ3BGLElBQUl5SSxFQUFPLENBQ1AsUUFBUSxHQUNSLE9BQU8sRUFBQSxFQUVSLEdBQUEsQ0FHQyxHQURBLEtBQUssWUFBWWtqQixFQUFXLFlBQ3hCLEVBQUUsVUFBV0EsRUFBVyxjQUFnQixFQUFFLFlBQWFBLEVBQVcsYUFDM0QsT0FBQWxqQixFQUdYLEtBQUssTUFBUWtqQixFQUFXLFlBR3hCLE1BQU0xcEIsRUFEU3FWLEVBQU0sT0FDQSxLQUFLLE1BQU0sTUFBTSxJQUFJLEVBQUUsTUFDNUMsT0FBRyxLQUFLLE1BQU0sU0FBVyxLQUFLLE1BQU0sUUFBUSxPQUFPLEtBQy9DdFgsRUFBUSxVQUFVLEtBQUssTUFBTSxRQUFRLElBQUksRUFBSWlDLEdBRXhDd0csRUFBQSxDQUNMLFFBQVEsR0FDUixPQUFPLEVBQUEsRUFHSkEsUUFDSjBKLEVBQU0sQ0FHRCxPQUFBblMsRUFBQSxPQUFPLFlBQVltUyxFQUFNd1osQ0FBVSxFQUMzQ2xqQixFQUFPLFFBQVEsR0FDUkEsQ0FDWCxDQUNKLENBQ0EsVUFBaUIsQ0FDQSxhQUFBLEtBQUssSUFBSSxFQUFFLElBQzVCLENBRUosQ0FDQSxJQUFJLGVDckRHLE1BQU0sZ0JBQW1DLENBTzVDLGFBQWEsQ0FOYmlqQixFQUFBLGFBRUFBLEVBQUEsb0JBRUFBLEVBQUEsY0FJSSxLQUFLLEtBQUssT0FDVixLQUFLLFlBQVksR0FDakIsS0FBSyxTQUFTLEVBRWQsS0FBSyxNQUFNLENBQ1AsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUNsQixXQUFXLENBQUMsS0FBSyxFQUFFLEVBQ25CLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFDbkIsVUFBVSxFQUFBLEVBR2QsS0FBSyxTQUFTLENBQ2xCLENBU0EsTUFBTSxRQUFRQyxFQUF1QnJVLEVBQWtDLENBQ25FLElBQUk3TyxFQUFPLENBRVAsUUFBUSxHQUNSLE9BQU8sRUFBQSxFQUVSLEdBQUEsQ0FnQ1AsSUFBU20wQyxFQUFULFNBQWtCMzZDLEVBQWFFLEVBQXNCMjNDLEVBQWlCeGlDLEVBQVUseUNBS3pFLE1BSkFBLEVBQUFBLEVBQU0sT0FBT3dpQyxDQUFTLElBQXRCeGlDLFlBQUFBLEVBQXlCLFNBQVEsVUFBV0EsRUFBQUEsRUFBTSxPQUFPd2lDLENBQVMsSUFBdEJ4aUMsWUFBQUEsRUFBeUIsU0FBUSxRQUM1RUEsRUFBTSxPQUFPd2lDLENBQVMsRUFBRSxNQUFNLElBRy9CMzNDLElBQU8sV0FBV0EsSUFBTyxXQUN4QkYsR0FBUXFWLEVBQUFBLEVBQU0sT0FBT3dpQyxDQUFTLElBQXRCeGlDLFlBQUFBLEVBQXlCLE1BQU0sYUFFbENuVixJQUFPLFlBQVlBLElBQU8sZ0JBQWdCQSxJQUFPLGlCQUNuRG1WLEVBQUFBLEVBQU0sT0FBT3dpQyxDQUFTLElBQXRCeGlDLFlBQUFBLEVBQXlCLFNBQVEsVUFBYUEsR0FBQUEsRUFBTSxPQUFPd2lDLENBQVMsSUFBdEJ4aUMsWUFBQUEsR0FBeUIsU0FBUSxHQUN0RXJWLEVBQUEsVUFBVSxXQUFXLElBQUksTUFBS3FWLEVBQUFBLEVBQU0sT0FBT3dpQyxDQUFTLElBQXRCeGlDLFlBQUFBLEVBQXlCLEtBQUssRUFBRSxrQkFBa0IsRUFFOUVBLEdBQUFBLEVBQUFBLEVBQU0sT0FBT3dpQyxDQUFTLElBQXRCeGlDLFlBQUFBLEVBQXlCLGNBR2xDblYsSUFBTyxlQUFlQSxJQUFPLHVCQUF1QkEsSUFBTyxnQkFBZ0JBLElBQU8sUUFBUUEsSUFBTyxrQkFDbkdtVixLQUFBQSxFQUFBQSxFQUFNLE9BQU93aUMsQ0FBUyxJQUF0QnhpQyxZQUFBQSxFQUF5QixTQUFRLFVBQWFBLEVBQUFBLEVBQU0sT0FBT3dpQyxDQUFTLElBQXRCeGlDLFlBQUFBLEVBQXlCLFNBQVEsR0FDdEVBLEdBQUFBLEVBQUFBLEVBQU0sT0FBT3dpQyxDQUFTLElBQXRCeGlDLFlBQUFBLEVBQXlCLFVBQ2hDLENBQ0QsTUFBTXVsQyxJQUFTdmxDLEVBQUFBLEVBQU0sT0FBT3dpQyxDQUFTLElBQXRCeGlDLFlBQUFBLEVBQXlCLE1BQ3hDLElBQUlwWixHQUFJLENBQUEsRUFDUixRQUFRc0IsR0FBRSxFQUFFQSxHQUFFcTlDLEdBQVMsT0FBT3I5QyxLQUMxQnRCLEdBQUksS0FBSzIrQyxHQUFTcjlDLEVBQUMsRUFBRSxJQUFJLEVBRzdCeUMsRUFBTS9ELEdBQUksTUFDZCxTQUVLaUUsSUFBTyxZQUFZQSxJQUFPLGFBQWFBLElBQU8sZUFDaERtVixLQUFBQSxFQUFBQSxFQUFNLE9BQU93aUMsQ0FBUyxJQUF0QnhpQyxZQUFBQSxFQUF5QixTQUFRLFVBQWFBLEVBQUFBLEVBQU0sT0FBT3dpQyxDQUFTLElBQXRCeGlDLFlBQUFBLEVBQXlCLFNBQVEsR0FDdEVBLEdBQUFBLEdBQUFBLEVBQU0sT0FBT3dpQyxDQUFTLElBQXRCeGlDLFlBQUFBLEdBQXlCLFVBQ2hDLENBQ0QsTUFBTXVsQyxJQUFTdmxDLEdBQUFBLEVBQU0sT0FBT3dpQyxDQUFTLElBQXRCeGlDLFlBQUFBLEdBQXlCLE1BQ3hDLElBQUlwWixHQUFJLENBQUEsRUFDUixRQUFRc0IsR0FBRSxFQUFFQSxHQUFFcTlDLEdBQVMsT0FBT3I5QyxLQUN0QnRCLEdBQUEsS0FBSzIrQyxHQUFTcjlDLEVBQUMsQ0FBQyxFQUd4QnlDLEVBQU0vRCxHQUFJLE1BQ2QsTUFFS2lFLElBQU8sVUFBVW1WLEVBQU0sS0FBSyxTQUFTLFNBQVMsRUFDbkRyVixFQUFRcVYsRUFBTSxXQUFXLE1BRWpCQSxHQUFBQSxHQUFBQSxFQUFNLE9BQU93aUMsQ0FBUyxJQUF0QnhpQyxZQUFBQSxHQUF5QixNQUVqQyxPQUFxQnJWLEdBQVEsT0FDdkJBLEVBQUEsSUFFSEEsQ0FBQSxFQTdFQyxHQUZKLEtBQUssWUFBWTBwQixFQUFXLFlBRXhCLEVBQUUsY0FBZUEsRUFBVyxjQUFnQixFQUFFLGVBQWdCQSxFQUFXLGNBQWdCLEVBQUUsZUFBZ0JBLEVBQVcsYUFDL0csT0FBQWxqQixFQUlYLEtBQUssTUFBUWtqQixFQUFXLFlBQ3hCLE1BQU1DLEVBQVN0VSxFQUFNLE9BR2Z3bEMsRUFBZSxLQUFLLE1BQU0sV0FBVyxLQUNyQ0MsRUFBZSxLQUFLLE1BQU0sV0FBVyxLQUNyQ0MsRUFBYyxLQUFLLE1BQU0sVUFBVSxLQUl6QyxHQUFHLEVBQUVBLElBQWdCLG9CQUFvQkEsSUFBZ0IsbUJBQW1CQSxJQUFnQixhQUN4RixPQUFBMWxDLEVBQU0sTUFBTSw4QkFDUkEsRUFBTSxLQUFLLFNBQVMsU0FBUyxHQUN0QixPQUFBLE1BQU0sbUJBQW1CQSxFQUFNLEtBQUssRUFFdEM3TyxFQUFBLENBQ0wsUUFBUyxHQUNULE9BQVEsRUFBQSxFQUVMQSxFQXlEWCxJQUFJdzBDLEVBQWtCLEdBQ3RCQSxFQUFXTCxFQUFTSyxFQUFXSCxFQUFlLEtBQUssTUFBTSxXQUFXLEtBQUt4bEMsQ0FBSyxFQUU5RSxJQUFJNGxDLEVBQWtCLEdBQ3RCQSxFQUFXTixFQUFTTSxFQUFXSCxFQUFlLEtBQUssTUFBTSxXQUFXLEtBQUt6bEMsQ0FBSyxFQUV4RSxNQUFBNmxDLEVBQVksS0FBSyxNQUFNLFVBQzdCLElBQUlDLEVBQWlCLEdBYXJCLEdBWEdILElBQWEsSUFBSUMsSUFBYSxHQUNuQkUsRUFBQSxHQUNMSCxJQUFhLElBQUlDLElBQWEsR0FDekJFLEVBQUFGLEVBQ0xBLElBQWEsSUFBSUQsSUFBYSxHQUN6QkcsRUFBQUgsRUFDTEEsSUFBYSxJQUFJQyxJQUFhLEtBQ25DRSxFQUFVLEdBQUdILENBQVUsR0FBR0UsQ0FBUyxHQUFHRCxDQUFVLElBSWhELENBQUM1bEMsRUFBTSxLQUFLLFNBQVMsU0FBUyxFQUU3QnNVLEVBQU8sS0FBSyxNQUFNLFVBQVUsSUFBSSxFQUFFLE1BQU13eEIsTUFFeEMsQ0FFYyxlQUFBaEUsRUFBYVUsRUFBaUJ4aUMsRUFBVyxDQUNwRCxPQUFPLElBQUksUUFBUSxDQUFDcEgsRUFBU0MsSUFBVyxDQUNwQyxJQUFJd3NDLEVBQWdCLENBQ2hCLElBQUtybEMsRUFBTSxNQUNYLEdBQUtBLEVBQU0sU0FDWCxPQUFRLENBQUMsQ0FBQ3dpQyxDQUFTLEVBQUUsQ0FBQyxNQUFRc0QsRUFBVSxDQUFBLEVBRXBDLFFBQUEsSUFBSSxRQUFRLElBQUksSUFBSSxlQUFnQixFQUFJLEVBQUcsTUFBT1QsRUFBZ0J0dkIsR0FBUyxDQUMvRW5kLEVBQVFtZCxDQUFJLENBQ2hCLEVBQUlsYixHQUFVLENBQ1ZoQyxFQUFPZ0MsQ0FBSyxDQUFBLENBQ2YsQ0FBQSxDQUNKLENBQ0wsQ0FFQXlaLEVBQU8sS0FBSyxNQUFNLFVBQVUsSUFBSSxFQUFFLE1BQU13eEIsRUFFeEMsTUFBTWhFLEVBQWEsS0FBSyxNQUFNLFVBQVUsS0FBSzloQyxDQUFLLEVBRTlDQSxFQUFNLEtBQUssU0FBUyxPQUFPLEdBRTNCLE9BQU8sTUFBTSw4Q0FBOEMsQ0FFbkUsQ0FFUSxPQUFBN08sRUFBQSxDQUNKLFFBQVEsR0FDUixPQUFPLEVBQUEsRUFFSkEsUUFDSjBKLEVBQU0sQ0FDVCxPQUFJbUYsRUFBTSxLQUFLLFNBQVMsU0FBUyxHQUN0QixPQUFBLE1BQU0sbUVBQW1FbkYsQ0FBSyxFQUV6Rm1GLEVBQU0sTUFBTSw4REFBOERuRixFQUNuRSxDQUNILFFBQVEsR0FDUixPQUFPLEVBQUEsQ0FFZixDQUNKLENBRUEsVUFBaUIsQ0FDQSxhQUFBLEtBQUssSUFBSSxFQUFFLElBQzVCLENBQ0osQ0FDQSxJQUFJLGlCQ3RNRyxNQUFNLGVBQWtDLENBSTNDLGFBQWEsQ0FIYnVaLEVBQUEsYUFDQUEsRUFBQSxvQkFDQUEsRUFBQSxjQUVJLEtBQUssS0FBSyxTQUNWLEtBQUssWUFBWSxHQUNqQixLQUFLLE1BQU0sQ0FDUCxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUEsRUFHbEIsS0FBSyxTQUFTLENBQ2xCLENBT0EsTUFBTSxRQUFRQyxFQUF1QnJVLEVBQVV0WCxFQUF5QyxPQUNwRixJQUFJeUksRUFBTyxDQUNQLFFBQVEsR0FDUixPQUFPLEVBQUEsRUFFUixHQUFBLENBR0ssR0FESixLQUFLLFlBQVlrakIsRUFBVyxZQUN4QixFQUFFLFVBQVdBLEVBQVcsYUFDakIsT0FBQWxqQixFQUVYLEtBQUssTUFBUWtqQixFQUFXLFlBRXhCLE1BQU1DLEVBQVN0VSxFQUFNLE9BQ3JCLEdBQUcsRUFBRSxLQUFLLE1BQU0sTUFBTSxRQUFRc1UsR0FDMUIsTUFBTSxJQUFJLE1BQU0sU0FBUyxLQUFLLE1BQU0sTUFBTSxJQUFJLFlBQVksRUFFOUQsTUFBTTNwQixHQUFRaXdCLEVBQUF0RyxFQUFPLEtBQUssTUFBTSxNQUFNLElBQUksSUFBNUIsWUFBQXNHLEVBQStCLE1BRzFDLE9BQUFqd0IsSUFBUSxRQUFhQSxJQUFRLE1BQzVCMnBCLEVBQU8sS0FBSyxNQUFNLE1BQU0sSUFBSSxFQUFFLE1BQU0sTUFHckMsQ0FBQyxLQUFLLHVCQUF1QjNwQixDQUFLLEdBQUssRUFBRUEsSUFBVSxRQUFhQSxJQUFTLEtBRXhFMnBCLEVBQU8sS0FBSyxNQUFNLE1BQU0sSUFBSSxFQUFFLE1BQU0sYUFFcENuakIsRUFBTyxRQUFRLElBR2ZtakIsRUFBTyxLQUFLLE1BQU0sTUFBTSxJQUFJLEVBQUUsTUFBTSxLQUdoQ25qQixFQUFBLENBQ1IsUUFBUSxHQUNSLE9BQU8sRUFBQSxFQUVBQSxRQUdKMEosRUFBTSxDQUdELE9BQUFuUyxFQUFBLE9BQU8sWUFBWW1TLEVBQU13WixDQUFVLEVBQzNDbGpCLEVBQU8sUUFBUSxHQUNSQSxDQUNYLENBQ0osQ0FFQSx1QkFBdUJ1QixFQUF1QixDQUkxQyxNQUFNcXpDLEVBQVcsZUFNVixPQUhnQixJQUFJLE9BQU9BLENBQVUsRUFHdEIsS0FBS3J6QyxDQUFJLENBQ25DLENBR0EsVUFBaUIsQ0FDQSxhQUFBLEtBQUssSUFBSSxFQUFFLElBQzVCLENBQ0osQ0FDQSxJQUFJLGdCQ3ZGRyxNQUFNLGVBQWtDLENBSTNDLGFBQWEsQ0FIYjBoQixFQUFBLGFBQ0FBLEVBQUEsb0JBQ0FBLEVBQUEsY0FFSSxLQUFLLEtBQUssU0FDVixLQUFLLFlBQVksR0FDakIsS0FBSyxNQUFNLENBQ1AsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFBLEVBR2xCLEtBQUssU0FBUyxDQUNsQixDQU9BLE1BQU0sUUFBUUMsRUFBdUJyVSxFQUFVdFgsRUFBeUMsT0FDcEYsSUFBSXlJLEVBQU8sQ0FDUCxRQUFRLEdBQ1IsT0FBTyxFQUFBLEVBRVIsR0FBQSxDQUdLLEdBREosS0FBSyxZQUFZa2pCLEVBQVcsWUFDeEIsRUFBRSxVQUFXQSxFQUFXLGFBQ2pCLE9BQUFsakIsRUFFWCxLQUFLLE1BQVFrakIsRUFBVyxZQUV4QixNQUFNQyxFQUFTdFUsRUFBTSxPQUNyQixHQUFHLEVBQUUsS0FBSyxNQUFNLE1BQU0sUUFBUXNVLEdBQzFCLE1BQU0sSUFBSSxNQUFNLFNBQVMsS0FBSyxNQUFNLE1BQU0sSUFBSSxZQUFZLEVBRTlELE1BQU0zcEIsR0FBUWl3QixFQUFBdEcsRUFBTyxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQTVCLFlBQUFzRyxFQUErQixNQUcxQyxPQUFBandCLElBQVEsUUFBYUEsSUFBUSxNQUM1QjJwQixFQUFPLEtBQUssTUFBTSxNQUFNLElBQUksRUFBRSxNQUFNLE1BR3BDLEtBQUssdUJBQXVCM3BCLENBQUssRUFPakMycEIsRUFBTyxLQUFLLE1BQU0sTUFBTSxJQUFJLEVBQUUsTUFBTSxNQUxwQ0EsRUFBTyxLQUFLLE1BQU0sTUFBTSxJQUFJLEVBQUUsTUFBTSxhQUVwQ25qQixFQUFPLFFBQVEsSUFPWEEsRUFBQSxDQUNSLFFBQVEsR0FDUixPQUFPLEVBQUEsRUFFQUEsUUFFSjBKLEVBQU0sQ0FHRCxPQUFBblMsRUFBQSxPQUFPLFlBQVltUyxFQUFNd1osQ0FBVSxFQUMzQ2xqQixFQUFPLFFBQVEsR0FDUkEsQ0FDWCxDQUNKLENBRUEsdUJBQXVCdUIsRUFBdUIsQ0FFMUMsTUFBTXF6QyxFQUFhLGNBS1osT0FIZ0IsSUFBSSxPQUFPQSxDQUFVLEVBR3RCLEtBQUtyekMsQ0FBSSxDQUNuQyxDQUVBLFVBQWlCLENBQ0EsYUFBQSxLQUFLLElBQUksRUFBRSxJQUM1QixDQUNKLENBQ0EsSUFBSSxnQkMxRUosTUFBTSx3QkFBcUQsQ0FDekQsRUFBRyxLQUNILEVBQUcsS0FDSCxFQUFHLEtBQ0gsRUFBRyxLQUNILEVBQUcsS0FDSCxFQUFHLEtBQ0gsRUFBRyxLQUNILEVBQUcsS0FDSCxFQUFHLEtBQ0gsRUFBRyxLQUNILEVBQUcsS0FDSCxFQUFHLEtBQ0gsRUFBRyxLQUNILEVBQUcsS0FDSCxFQUFHLEtBQ0gsRUFBRyxLQUNILEVBQUcsS0FDSCxFQUFHLEtBQ0gsRUFBRyxLQUNILEVBQUcsS0FDSCxFQUFHLEtBQ0gsRUFBRyxLQUNILEVBQUcsS0FDSCxFQUFHLEtBQ0gsRUFBRyxLQUNILEVBQUcsS0FDSCxFQUFHLEtBQ0gsRUFBRyxLQUNILEVBQUcsSUFDSCxFQUFHLElBQ0gsRUFBRyxJQUNILEVBQUcsSUFDSCxFQUFHLElBQ0gsRUFBRyxJQUNILEVBQUcsSUFDSCxFQUFHLElBQ0gsRUFBRyxJQUNILEVBQUcsSUFDSCxFQUFHLElBQ0gsRUFBRyxJQUNILEVBQUcsSUFDSCxFQUFHLElBQ0gsRUFBRyxJQUNILEVBQUcsSUFDSCxFQUFHLElBQ0gsRUFBRyxJQUNILEVBQUcsSUFDSCxFQUFHLElBQ0gsRUFBRyxJQUNILEVBQUcsSUFDSCxFQUFHLElBQ0gsRUFBRyxJQUNILEVBQUcsSUFDSCxFQUFHLElBQ0gsRUFBRyxJQUNILEVBQUcsSUFDSCxFQUFHLElBQ0gsRUFBRyxJQUNILEVBQUcsSUFDSCxFQUFHLElBQ0gsRUFBRyxJQUNILEVBQUcsSUFDSCxFQUFHLElBQ0gsRUFBRyxJQUNILEVBQUcsSUFDSCxFQUFHLElBQ0gsRUFBRyxJQUNILEVBQUcsSUFDSCxFQUFHLElBQ0gsRUFBRyxJQUNILEVBQUcsSUFDSCxFQUFHLElBQ0gsRUFBRyxJQUNILEVBQUcsSUFDSCxFQUFHLElBQ0gsRUFBRyxJQUNILEVBQUcsSUFDSCxFQUFHLElBQ0gsRUFBRyxJQUNILEVBQUcsSUFDSCxFQUFHLElBQ0gsRUFBRyxJQUNILEVBQUcsSUFDSCxJQUFLLElBQ0wsSUFBSyxJQUNMLEVBQUcsSUFDSCxJQUFLLElBQ0wsSUFBSyxJQUNMLElBQUssSUFDTCxJQUFLLEdBQ1AsRUFFTSx3QkFBcUQsQ0FDekQsR0FBSSxJQUNKLEdBQUksSUFDSixHQUFJLElBQ0osR0FBSSxJQUNKLEdBQUksSUFDSixHQUFJLElBQ0osR0FBSSxJQUNKLEdBQUksSUFDSixHQUFJLElBQ0osR0FBSSxJQUNKLEdBQUksSUFDSixHQUFJLElBQ0osR0FBSSxJQUNKLEdBQUksSUFDSixHQUFJLElBQ0osR0FBSSxJQUNKLEdBQUksSUFDSixHQUFJLElBQ0osR0FBSSxJQUNKLEdBQUksSUFDSixHQUFJLElBQ0osR0FBSSxJQUNKLEdBQUksSUFDSixHQUFJLElBQ0osR0FBSSxJQUNKLEdBQUks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SSxFQUM3QmtyRCxFQUFXLFFBQVE3SyxDQUFTLEVBQzVCbUssRUFBSyxXQUFXLFNBQVNVLEVBQVMsT0FBTyxFQUM1Q1YsSUFBTyxRQUVSLE1BRGdCLElBQUksY0FBY25LLEVBQVVtSyxFQUFLeHFELENBQUssRUFDeEMsT0FFaEIsTUFBTXNVLEVBQVN0VSxFQUFNLE9BQ3JCLFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFBc1UsQ0FBTyxDQUFBLENBQUEsQ0FDaEMsQ0FBQSxDQUNGLENBRVAsQ0FBQyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDEyNywxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OF19
|