from-programming-notes-scripts
code:script.js
var $,Uo,ee,Qe,Ze,Wo,le={},Le=[],qo=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|inech|zoo|^ord|itera/i;function H(e,t){for(var o in t)eo=to;return e}function et(e){var t=e.parentNode;t&&t.removeChild(e)}function M(e,t,o){var r,a,n,s=arguments,i={};for(n in t)n=="key"?r=tn:n=="ref"?a=tn:in=tn;if(arguments.length>3)for(o=o,n=3;n<arguments.length;n++)o.push(sn);if(o!=null&&(i.children=o),typeof e=="function"&&e.defaultProps!=null)for(n in e.defaultProps)in===void 0&&(in=e.defaultPropsn);return te(e,i,r,a,null)}function te(e,t,o,r,a){var n={type:e,props:t,key:o,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:a??++$.__v};return $.vnode!=null&&$.vnode(n),n}function O(e){return e.children}function pe(e,t){this.props=e,this.context=t}function oe(e,t){if(t==null)return e.__?oe(e.__,e.__.__k.indexOf(e)+1):null;for(var o;t<e.__k.length;t++)if((o=e.__kt)!=null&&o.__e!=null)return o.__e;return typeof e.type=="function"?oe(e):null}function tt(e){var t,o;if((e=e.__)!=null&&e.__c!=null){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if((o=e.__kt)!=null&&o.__e!=null){e.__e=e.__c.base=o.__e;break}return tt(e)}}function ot(e){(!e.__d&&(e.__d=!0)&&ee.push(e)&&!ue.__r++||Ze!==$.debounceRendering)&&((Ze=$.debounceRendering)||Qe)(ue)}function ue(){for(var e;ue.__r=ee.length;)e=ee.sort(function(t,o){return t.__v.__b-o.__v.__b}),ee=[],e.some(function(t){var o,r,a,n,s,i;t.__d&&(s=(n=(o=t).__v).__e,(i=o.__P)&&(r=[],(a=H({},n)).__v=n.__v+1,Me(i,n,a,o.__n,i.ownerSVGElement!==void 0,n.__h!=null?s:null,r,s??oe(n),n.__h),lt(r,n),n.__e!=s&&tt(n)))})}function rt(e,t,o,r,a,n,s,i,c,p){var l,m,f,d,b,h,g,_=r&&r.__k||Le,y=_.length;for(o.__k=[],l=0;l<t.length;l++)if((d=o.__kl=(d=tl)==null||typeof d=="boolean"?null:typeof d=="string"||typeof d=="number"||typeof d=="bigint"?te(null,d,null,null,d):Array.isArray(d)?te(O,{children:d},null,null,null):d.__b>0?te(d.type,d.props,d.key,null,d.__v):d)!=null){if(d.__=o,d.__b=o.__b+1,(f=_l)===null||f&&d.key==f.key&&d.type===f.type)_l=void 0;else for(m=0;m<y;m++){if((f=_m)&&d.key==f.key&&d.type===f.type){_m=void 0;break}f=null}Me(e,d,f=f||le,a,n,s,i,c,p),b=d.__e,(m=d.ref)&&f.ref!=m&&(g||(g=[]),f.ref&&g.push(f.ref,null,d),g.push(m,d.__c||b,d)),b!=null?(h==null&&(h=b),typeof d.type=="function"&&d.__k!=null&&d.__k===f.__k?d.__d=c=nt(d,c,e):c=at(e,d,f,_,b,c),p||o.type!=="option"?typeof o.type=="function"&&(o.__d=c):e.value=""):c&&f.__e==c&&c.parentNode!=e&&(c=oe(f))}for(o.__e=h,l=y;l--;)_l!=null&&(typeof o.type=="function"&&_l.__e!=null&&_l.__e==o.__d&&(o.__d=oe(r,l+1)),ut(_l,_l));if(g)for(l=0;l<g.length;l++)pt(gl,g++l,g++l)}function nt(e,t,o){var r,a;for(r=0;r<e.__k.length;r++)(a=e.__kr)&&(a.__=e,t=typeof a.type=="function"?nt(a,t,o):at(o,a,a,e.__k,a.__e,t));return t}function Ie(e,t){return t=t||[],e==null||typeof e=="boolean"||(Array.isArray(e)?e.some(function(o){Ie(o,t)}):t.push(e)),t}function at(e,t,o,r,a,n){var s,i,c;if(t.__d!==void 0)s=t.__d,t.__d=void 0;else if(o==null||a!=n||a.parentNode==null)e:if(n==null||n.parentNode!==e)e.appendChild(a),s=null;else{for(i=n,c=0;(i=i.nextSibling)&&c<r.length;c+=2)if(i==a)break e;e.insertBefore(a,n),s=n}return s!==void 0?s:a.nextSibling}function Xo(e,t,o,r,a){var n;for(n in o)n==="children"||n==="key"||n in t||de(e,n,null,on,r);for(n in t)a&&typeof tn!="function"||n==="children"||n==="key"||n==="value"||n==="checked"||on===tn||de(e,n,tn,on,r)}function st(e,t,o){t0==="-"?e.setProperty(t,o):et=o==null?"":typeof o!="number"||qo.test(t)?o:o+"px"}function de(e,t,o,r,a){var n;e:if(t==="style")if(typeof o=="string")e.style.cssText=o;else{if(typeof r=="string"&&(e.style.cssText=r=""),r)for(t in r)o&&t in o||st(e.style,t,"");if(o)for(t in o)r&&ot===rt||st(e.style,t,ot)}else if(t0==="o"&&t1==="n")n=t!==(t=t.replace(/Capture$/,"")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.lt+n=o,o?r||e.addEventListener(t,n?ct:it,n):e.removeEventListener(t,n?ct:it,n);else if(t!=="dangerouslySetInnerHTML"){if(a)t=t.replace(/xlinkH:h/,"h").replace(/sName$/,"s");else if(t!=="href"&&t!=="list"&&t!=="form"&&t!=="tabIndex"&&t!=="download"&&t in e)try{et=o??"";break e}catch(s){}typeof o=="function"||(o!=null&&(o!==!1||t0==="a"&&t1==="r")?e.setAttribute(t,o):e.removeAttribute(t))}}function it(e){this.le.type+!1($.event?$.event(e):e)}function ct(e){this.le.type+!0($.event?$.event(e):e)}function Me(e,t,o,r,a,n,s,i,c){var p,l,m,f,d,b,h,g,_,y,P,C=t.type;if(t.constructor!==void 0)return null;o.__h!=null&&(c=o.__h,i=t.__e=o.__e,t.__h=null,n=i),(p=$.__b)&&p(t);try{e:if(typeof C=="function"){if(g=t.props,_=(p=C.contextType)&&rp.__c,y=p?_?_.props.value:p.__:r,o.__c?h=(l=t.__c=o.__c).__=l.__E:("prototype"in C&&C.prototype.render?t.__c=l=new C(g,y):(t.__c=l=new pe(g,y),l.constructor=C,l.render=Jo),_&&_.sub(l),l.props=g,l.state||(l.state={}),l.context=y,l.__n=r,m=l.__d=!0,l.__h=[]),l.__s==null&&(l.__s=l.state),C.getDerivedStateFromProps!=null&&(l.__s==l.state&&(l.__s=H({},l.__s)),H(l.__s,C.getDerivedStateFromProps(g,l.__s))),f=l.props,d=l.state,m)C.getDerivedStateFromProps==null&&l.componentWillMount!=null&&l.componentWillMount(),l.componentDidMount!=null&&l.__h.push(l.componentDidMount);else{if(C.getDerivedStateFromProps==null&&g!==f&&l.componentWillReceiveProps!=null&&l.componentWillReceiveProps(g,y),!l.__e&&l.shouldComponentUpdate!=null&&l.shouldComponentUpdate(g,l.__s,y)===!1||t.__v===o.__v){l.props=g,l.state=l.__s,t.__v!==o.__v&&(l.__d=!1),l.__v=t,t.__e=o.__e,t.__k=o.__k,t.__k.forEach(function(S){S&&(S.__=t)}),l.__h.length&&s.push(l);break e}l.componentWillUpdate!=null&&l.componentWillUpdate(g,l.__s,y),l.componentDidUpdate!=null&&l.__h.push(function(){l.componentDidUpdate(f,d,b)})}l.context=y,l.props=g,l.state=l.__s,(p=$.__r)&&p(t),l.__d=!1,l.__v=t,l.__P=e,p=l.render(l.props,l.state,l.context),l.state=l.__s,l.getChildContext!=null&&(r=H(H({},r),l.getChildContext())),m||l.getSnapshotBeforeUpdate==null||(b=l.getSnapshotBeforeUpdate(f,d)),P=p!=null&&p.type===O&&p.key==null?p.props.children:p,rt(e,Array.isArray(P)?P:P,t,o,r,a,n,s,i,c),l.base=t.__e,t.__h=null,l.__h.length&&s.push(l),h&&(l.__E=l.__=null),l.__e=!1}else n==null&&t.__v===o.__v?(t.__k=o.__k,t.__e=o.__e):t.__e=Vo(o.__e,t,o,r,a,n,s,c);(p=$.diffed)&&p(t)}catch(S){t.__v=null,(c||n!=null)&&(t.__e=i,t.__h=!!c,nn.indexOf(i)=null),$.__e(S,t,o)}}function lt(e,t){$.__c&&$.__c(t,e),e.some(function(o){try{e=o.__h,o.__h=[],e.some(function(r){r.call(o)})}catch(r){$.__e(r,o.__v)}})}function Vo(e,t,o,r,a,n,s,i){var c,p,l,m,f=o.props,d=t.props,b=t.type,h=0;if(b==="svg"&&(a=!0),n!=null){for(;h<n.length;h++)if((c=nh)&&(c===e||(b?c.localName==b:c.nodeType==3))){e=c,nh=null;break}}if(e==null){if(b===null)return document.createTextNode(d);e=a?document.createElementNS("http://www.w3.org/2000/svg",b):document.createElement(b,d.is&&d),n=null,i=!1}if(b===null)f===d||i&&e.data===d||(e.data=d);else{if(n=n&&Le.slice.call(e.childNodes),p=(f=o.props||le).dangerouslySetInnerHTML,l=d.dangerouslySetInnerHTML,!i){if(n!=null)for(f={},m=0;m<e.attributes.length;m++)f[e.attributes[m].name]=e.attributes[m].value;(l||p)&&(l&&(p&&l.__html==p.__html||l.__html===e.innerHTML)||(e.innerHTML=l&&l.__html||""))}if(Xo(e,d,f,a,i),l)t.__k=[];else if(h=t.props.children,rt(e,Array.isArray(h)?h:h,t,o,r,a&&b!=="foreignObject",n,s,e.firstChild,i),n!=null)for(h=n.length;h--;)nh!=null&&et(nh);i||("value"in d&&(h=d.value)!==void 0&&(h!==e.value||b==="progress"&&!h)&&de(e,"value",h,f.value,!1),"checked"in d&&(h=d.checked)!==void 0&&h!==e.checked&&de(e,"checked",h,f.checked,!1))}return e}function pt(e,t,o){try{typeof e=="function"?e(t):e.current=t}catch(r){$.__e(r,o)}}function ut(e,t,o){var r,a,n;if($.unmount&&$.unmount(e),(r=e.ref)&&(r.current&&r.current!==e.__e||pt(r,null,t)),o||typeof e.type=="function"||(o=(a=e.__e)!=null),e.__e=e.__d=void 0,(r=e.__c)!=null){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(s){$.__e(s,t)}r.base=r.__P=null}if(r=e.__k)for(n=0;n<r.length;n++)rn&&ut(rn,t,o);a!=null&&et(a)}function Jo(e,t,o){return this.constructor(e,o)}function A(e,t,o){var r,a,n;$.__&&$.__(e,t),a=(r=typeof o=="function")?null:o&&o.__k||t.__k,n=[],Me(t,e=(!r&&o||t).__k=M(O,null,e),a||le,le,t.ownerSVGElement!==void 0,!r&&o?o:a?null:t.firstChild?Le.slice.call(t.childNodes):null,n,!r&&o?o:a?a.__e:t.firstChild,r),lt(n,e)}function Te(e,t){A(e,t,Te)}function De(e,t,o){var r,a,n,s=arguments,i=H({},e.props);for(n in t)n=="key"?r=tn:n=="ref"?a=tn:in=tn;if(arguments.length>3)for(o=o,n=3;n<arguments.length;n++)o.push(sn);return o!=null&&(i.children=o),te(e.type,i,r||e.key,a||e.ref,null)}$={__e:function(e,t){for(var o,r,a;t=t.__;)if((o=t.__c)&&!o.__)try{if((r=o.constructor)&&r.getDerivedStateFromError!=null&&(o.setState(r.getDerivedStateFromError(e)),a=o.__d),o.componentDidCatch!=null&&(o.componentDidCatch(e),a=o.__d),a)return o.__E=o}catch(n){e=n}throw e},__v:0},Uo=function(e){return e!=null&&e.constructor===void 0},pe.prototype.setState=function(e,t){var o;o=this.__s!=null&&this.__s!==this.state?this.__s:this.__s=H({},this.state),typeof e=="function"&&(e=e(H({},o),this.props)),e&&H(o,e),e!=null&&this.__v&&(t&&this.__h.push(t),ot(this))},pe.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),ot(this))},pe.prototype.render=O,ee=[],Qe=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,ue.__r=0,Wo=0;var dt=function(e,t,o,r){var a;t0=0;for(var n=1;n<t.length;n++){var s=tn++,i=tn?(t0|=s?1:2,o[tn++]):t++n;s===3?r0=i:s===4?r1=Object.assign(r1||{},i):s===5?(r1=r1||{})[t++n]=i:s===6?r1[t++n]+=i+"":s?(a=e.apply(i,dt(e,i,o,"",null)),r.push(a),i0?t0|=2:(tn-2=0,tn=a)):r.push(i)}return r},ft=new Map;function mt(e){var t=ft.get(this);return t||(t=new Map,ft.set(this,t)),(t=dt(this,t.get(e)||(t.set(e,t=function(o){for(var r,a,n=1,s="",i="",c=0,p=function(f){n===1&&(f||(s=s.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?c.push(0,f,s):n===3&&(f||s)?(c.push(3,f,s),n=2):n===2&&s==="..."&&f?c.push(4,f,0):n===2&&s&&!f?c.push(5,0,!0,s):n>=5&&((s||!f&&n===5)&&(c.push(n,0,s,a),n=6),f&&(c.push(n,f,0,a),n=6)),s=""},l=0;l<o.length;l++){l&&(n===1&&p(),p(l));for(var m=0;m<ol.length;m++)r=olm,n===1?r==="<"?(p(),c=c,n=3):s+=r:n===4?s==="--"&&r===">"?(n=1,s=""):s=r+s0:i?r===i?i="":s+=r:r==='"'||r==="'"?i=r:r===">"?(p(),n=1):n&&(r==="="?(n=5,a=s,s=""):r==="/"&&(n<5||olm+1===">")?(p(),n===3&&(c=c0),n=c,(c=c0).push(2,0,n),n=0):r===" "||r===" "||r===` ||r==="\r"?(p(),n=2):s+=r),n===3&&s==="!--"&&(n=4,c=c[0])}return p(),c}(e)),t),arguments,[])).length>1?t:t[0]}var u=mt.bind(M);var ht="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.3/katex.min.js",bt=!1,gt=()=>new Promise(async(e,t)=>{if(document.querySelector(scriptsrc="${ht}")){bt||await xt(),e();return}let o=document.createElement("script");o.addEventListener("load",async()=>{await xt(),bt=!0,e()}),o.addEventListener("error",r=>t(r)),o.src=ht,document.head.appendChild(o)}),xt=()=>new Promise(e=>{let t=setInterval(()=>{!window.katex||(clearInterval(t),e())},500)});var fe,R,_t,re=0,Be=[],vt=$.__b,yt=$.__r,$t=$.diffed,wt=$.__c,kt=$.unmount;function ze(e,t){$.__h&&$.__h(R,e,re||t),re=0;var o=R.__H||(R.__H={__:[],__h:[]});return e>=o.__.length&&o.__.push({}),o.__[e]}function v(e){return re=1,Yo(St,e)}function Yo(e,t,o){var r=ze(fe++,2);return r.t=e,r.__c||(r.__=[o?o(t):St(void 0,t),function(a){var n=r.t(r.__[0],a);r.__[0]!==n&&(r.__=[n,r.__[1]],r.__c.setState({}))}],r.__c=R),r.__}function E(e,t){var o=ze(fe++,3);!$.__s&&Ct(o.__H,t)&&(o.__=e,o.__H=t,R.__H.__h.push(o))}function B(e){return re=5,j(function(){return{current:e}},[])}function j(e,t){var o=ze(fe++,7);return Ct(o.__H,t)&&(o.__=e(),o.__H=t,o.__h=e),o.__}function w(e,t){return re=8,j(function(){return e},t)}function Go(){Be.forEach(function(e){if(e.__P)try{e.__H.__h.forEach(me),e.__H.__h.forEach(Ae),e.__H.__h=[]}catch(t){e.__H.__h=[],$.__e(t,e.__v)}}),Be=[]}$.__b=function(e){R=null,vt&&vt(e)},$.__r=function(e){yt&&yt(e),fe=0;var t=(R=e.__c).__H;t&&(t.__h.forEach(me),t.__h.forEach(Ae),t.__h=[])},$.diffed=function(e){$t&&$t(e);var t=e.__c;t&&t.__H&&t.__H.__h.length&&(Be.push(t)!==1&&_t===$.requestAnimationFrame||((_t=$.requestAnimationFrame)||function(o){var r,a=function(){clearTimeout(n),jt&&cancelAnimationFrame(r),setTimeout(o)},n=setTimeout(a,100);jt&&(r=requestAnimationFrame(a))})(Go)),R=void 0},$.__c=function(e,t){t.some(function(o){try{o.__h.forEach(me),o.__h=o.__h.filter(function(r){return!r.__||Ae(r)})}catch(r){t.some(function(a){a.__h&&(a.__h=[])}),t=[],$.__e(r,o.__v)}}),wt&&wt(e,t)},$.unmount=function(e){kt&&kt(e);var t=e.__c;if(t&&t.__H)try{t.__H.__.forEach(me)}catch(o){$.__e(o,t.__v)}};var jt=typeof requestAnimationFrame=="function";function me(e){var t=R;typeof e.__c=="function"&&e.__c(),R=t}function Ae(e){var t=R;e.__c=e.__(),R=t}function Ct(e,t){return!e||e.length!==t.length||t.some(function(o,r){return o!==e[r]})}function St(e,t){return typeof t=="function"?t(e):t}var G=e=>{let t=B(null),[o,r]=v(e),[a,n]=v(void 0);return E(()=>{(async()=>{await gt();try{katex.render(o,t.current),n(void 0)}catch(s){s instanceof katex.ParseError&&n(s.message)}})()},[o,t]),{ref:t,formula:o,error:a,setFormula:r}};function Qo(e,t){var o,r=null,a=B(null),n=B(null),s=w(function(l){n.current=l,p()},[]),i=B(null),c=B(),p=function(){var m=null;n.current?m=n.current:a.current?m=a.current:t instanceof HTMLElement&&(m=t),i.current!==m&&(c.current&&(c.current(),c.current=null),i.current=m,m&&(c.current=e(m)))};return t&&!(t instanceof HTMLElement)&&(r=t),E(function(){r&&(a.current=r.current),p()},[r,(o=r)==null?void 0:o.current,t]),s}function Zo(e){e===void 0&&(e={});var t=e.onResize,o=B(void 0);o.current=t;var r=B(),a=v({width:void 0,height:void 0}),n=a[0],s=a[1],i=B(!1);E(function(){return function(){i.current=!0}},[]);var c=B({width:void 0,height:void 0}),p=Qo(function(l){return r.current||(r.current=new ResizeObserver(function(m){if(!!Array.isArray(m)&&!!m.length){var f=m[0],d=Math.round(f.contentRect.width),b=Math.round(f.contentRect.height);if(c.current.width!==d||c.current.height!==b){var h={width:d,height:b};o.current?o.current(h):(c.current.width=d,c.current.height=b,i.current||s(h))}}})),r.current.observe(l),function(){r.current&&r.current.unobserve(l)}},e.ref);return j(function(){return{ref:p,width:n.width,height:n.height}},[p,n?n.width:null,n?n.height:null])}var Fe=Zo;import{scrapboxDOM as er}from"../scrapbox-dom-accessor/script.js";function Et({open:e,cursorPosition:t,children:o}){let{ref:r,width:a=0}=Fe(),{width:n=0}=Fe({ref:er.editor}),s=j(()=>Ie(o).length===0,[o]),i=tr(t),c=or(t,s),p=rr(n,a,t,s);return u <div class="popup-menu" style="${i}" hidden="${!e}">
<div ref="${r}" class="button-container" style="${p}">
${o}
</div>
<div class="triangle" style="${c}" />
</div>}var tr=e=>({top:e.styleTop}),or=(e,t)=>({left:e.styleLeft,...t?{borderTopColor:"#555"}:{}});function rr(e,t,o,r){let a=o.styleLeft/e*100,n=20/t*100,s=100-n;return{left:o.styleLeft,transform:translateX(-${Math.max(n,Math.min(a,s))}%),...r?{color:"#eee",fontSize:"11px",display:"inline-block",padding:"0 5px",cursor:"not-allowed",backgroundColor:"#555"}:{}}}var Pt=()=>u<style>
.popup-menu {
position:absolute;
left:0;
width:100%;
z-index:300;
transform:translateY(calc(-100% - 14px));
-webkit-user-select:none;
user-select:none;
font-family:"Open Sans",Helvetica,Arial,"Hiragino Sans",sans-serif;
pointer-events:none
}
.popup-menu .button-container {
position:relative;
display:inline-block;
max-width:70vw;
min-width:80px;
text-align:center;
background-color:#111;
padding:0 1px;
border-radius:4px;
pointer-events:auto
}
max-width:90vw
}
max-width:90vw
}
.popup-menu .triangle {
position:absolute;
transform:translateX(-50%);
width:0;
height:0;
border-top:6px solid #111; border-left:8px solid transparent;
border-right:8px solid transparent
}
max-width:80vw;
text-align:left
}
.button {
font-size:11px;
color:#eee;
cursor:pointer;
display:inline-block;
padding:0 5px
}
.button:not(:first-of-type) {
border:0;
border-left:1px solid #eee }
.button.selected {
background-color:#222;
text-decoration:underline
}
font-size:13px;
padding:6px;
min-width:12vw
}
font-size:13px;
padding:6px;
min-width:12vw
}
.button div.icon {
height:2em;
max-width:10em;
display:inline-block;
overflow:hidden;
margin-left:1px;
vertical-align:top
}
.button div.icon img {
max-height:100%;
vertical-align:unset
}
font-size:11px;
display:block;
line-height:1.2em;
padding:12px 10px;
min-width:40px;
border-left:0
}
border:0;
border-bottom:1px solid #eee }
max-width:80vw;
text-align:left
}
font-size:11px;
display:block;
line-height:1.2em;
padding:12px 10px;
min-width:40px;
border-left:0
}
htmldata-os*='ios' .popup-menu.vertical .button-container .button:not(:last-of-type), .popup-menudata-os*='ios'.vertical .button-container .button:not(:last-of-type) { border:0;
border-bottom:1px solid #eee }
</style>;var Q=(e,t,o)=>E(()=>{let r=new MutationObserver(a=>{r.disconnect(),t(a);for(let n of e)n.current&&r.observe(n.current,o)});for(let a of e)a.current&&r.observe(a.current,o);return()=>r.disconnect()},[]);function q(e,t=0,{immediate:o=!0}={}){if(typeof e!="function")throw new Error("argument is not function.");let r,a=!1,n=t>0?()=>new Promise(i=>setTimeout(()=>i(),t)):()=>{},s=async()=>{if(await n(),!r){a=!1;return}let{parameters:i,resolve:c}=r;r=void 0,c({result:await e(...i),executed:!0}),await s()};return(...i)=>new Promise(async c=>{if(a){r?.resolve?.({executed:!1}),r={parameters:i,resolve:c};return}a=!0,o?c({result:await e(...i),executed:!0}):(r?.resolve?.({executed:!1}),r={parameters:i,resolve:c}),await s()})}function Lt(e,{delay:t=100,immediate:o=!0}={},r=[]){let a=j(()=>q(async n=>{let s=n.target,i=s.style.cssText.replace(/display: none;/,"").trim(),c=n.oldValue.replace(/display: none;/,"").trim();if(i===c)return;let p=parseInt(s.style.top),l=parseInt(s.style.left),m=parseInt(s.style.height),f=s.parentElement.getBoundingClientRect(),d={top:p+f.top,left:l+f.left,right:l+1+f.left,bottom:p+m+f.top,height:m,width:1},b=document.elementsFromPoint(d.left+d.width/2,d.top+d.height/2);await e({cursorRect:d,parentRect:f,elements:b})},t,{immediate:o}),r);Q([{current:document.getElementsByClassName("cursor")?.[0]}],([n])=>a(n),{attributes:!0,attributeFilter:["style"],attributeOldValue:!0})}var nr=()=>{let{ref:e,error:t,setFormula:o}=G(""),[r,a]=v(!1),[n,s]=v({styleTop:0,styleLeft:0});return Lt(({cursorRect:{left:i},parentRect:{top:c,left:p},elements:l})=>{let m=l.find(d=>d.classList.contains("formula"));if(!m){a(!1);return}a(!0),o(m.textContent.slice(3,-1));let{top:f}=m.getBoundingClientRect();s({styleTop:f-c,styleLeft:i-p})}),u
<${Pt} />
<style>
.error {color:#fd7373; }
.katex-display {
display: inline-block !important;
margin: 0 !important;
text-align: inherit !important;
}
</style>
<${Et} cursorPosition="${n}" open="${r}">
${t&&u<span class="error">${t}</span>}
<span class="katex-display" ref="${e}" />
<//>
},he=document.createElement("div");he.dataset.userscriptName="katex-previewer";document.getElementById("editor").append(he);he.attachShadow({mode:"open"});A(u<${nr} />,he.shadowRoot);function Re(){return(Re=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var r in o)Object.prototype.hasOwnProperty.call(o,r)&&(e[r]=o[r])}return e}).apply(this,arguments)}function ar(e){this.getChildContext=function(){return e.context};var t=e.children,o=function(r,a){if(r==null)return{};var n,s,i={},c=Object.keys(r);for(s=0;s<c.length;s++)a.indexOf(n=c[s])>=0||(i[n]=r[n]);return i}(e,["context","children"]);return De(t,o)}function sr(){var e=new CustomEvent("_preact",{detail:{},bubbles:!0,cancelable:!0});this.dispatchEvent(e),this._vdom=M(ar,Re({},this._props,{context:e.detail.context}),function t(o,r){if(o.nodeType===3)return o.data;if(o.nodeType!==1)return null;var a=[],n={},s=0,i=o.attributes,c=o.childNodes;for(s=i.length;s--;)i[s].name!=="slot"&&(n[i[s].name]=i[s].value,n[It(i[s].name)]=i[s].value);for(s=c.length;s--;){var p=t(c[s],null),l=c[s].slot;l?n[l]=M(Mt,{name:l},p):a[s]=p}var m=r?M(Mt,null,a):a;return M(r||o.nodeName.toLowerCase(),n,m)}(this,this._vdomComponent)),(this.hasAttribute("hydrate")?Te:A)(this._vdom,this._root)}function It(e){return e.replace(/-(\w)/g,function(t,o){return o?o.toUpperCase():""})}function ir(e,t,o){if(this._vdom){var r={};r[e]=o=o??void 0,r[It(e)]=o,this._vdom=De(this._vdom,r),A(this._vdom,this._root)}}function cr(){A(this._vdom=null,this._root)}function Mt(e,t){var o=this;return M("slot",Re({},e,{ref:function(r){r?(o.ref=r,o._listener||(o._listener=function(a){a.stopPropagation(),a.detail.context=t},r.addEventListener("_preact",o._listener))):o.ref.removeEventListener("_preact",o._listener)}}))}function Tt(e,t,o,r){function a(){var n=Reflect.construct(HTMLElement,[],a);return n._vdomComponent=e,n._root=r&&r.shadow?n.attachShadow({mode:"open"}):n,n}return(a.prototype=Object.create(HTMLElement.prototype)).constructor=a,a.prototype.connectedCallback=sr,a.prototype.attributeChangedCallback=ir,a.prototype.disconnectedCallback=cr,o=o||e.observedAttributes||Object.keys(e.propTypes||{}),a.observedAttributes=o,o.forEach(function(n){Object.defineProperty(a.prototype,n,{get:function(){return this._vdom.props[n]},set:function(s){this._vdom?this.attributeChangedCallback(n,null,s):(this._props||(this._props={}),this._props[n]=s,this.connectedCallback());var i=typeof s;s!=null&&i!=="string"&&i!=="boolean"&&i!=="number"||this.setAttribute(n,s)}})}),customElements.define(t||e.tagName||e.displayName||e.name,a)}var lr=({props:e})=>{let t=B(null),{children:o,messages:r,position:a,selected:n}=e;return E(()=>{let s=t.current,i=s?.querySelector?.(lidata-key="${n}");if(!i)return;let c=s.getBoundingClientRect(),p=i.getBoundingClientRect();if(c.top>p.top){s.scrollTop-=c.top-p.top;return}if(c.bottom<p.bottom){s.scrollTop+=p.bottom-c.bottom;return}let{top:l,bottom:m}=i.getBoundingClientRect();if(l<0){i.scrollIntoView();return}if(m>window.innerHeight){i.scrollIntoView(!1);return}},[n]),u <style>
ul {
position: absolute;
top: 100%;
left: 0;
z-index: 1000;
min-width: 160px;
max-width: 50vw;
max-height: 80vh;
padding: 5px 0;
margin: 2px 0 0;
font-size: 14px;
font-weight: normal;
line-height: 28px;
text-align: left;
color: var(--dropdown-text-color, #333); background-color: var(--dropdown-bg, #fff); border: 1px solid var(--dropdown-border-color, rgba(0,0,0,0.15));
border-radius: 4px;
box-shadow: 0 6px 12px var(--dropdown-shadow-color, rgba(0,0,0,0.175));
background-clip: padding-box;
white-space: nowrap;
flex-direction: column;
list-style: none;
overflow-x: hidden;
overflow-y: auto;
}
li > * {
display: flex;
padding: 0px 20px;
clear: both;
align-items: center;
}
li > a {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
text-decoration: none;
color: inherit;
overflow: hidden;
text-overflow: ellipsis;
width: 100%;
}
li > a:hover {
color: var(--dropdown-item-hover-text-color, #262626); background-color: var(--dropdown-item-hover-bg, #f5f5f5); }
li.selected {
color: var(--dropdown-item-hover-text-color, #262626); background-color: var(--dropdown-item-hover-bg, #f5f5f5); outline: 0;
box-shadow: 0 0px 0px 3px var(--dropdown-item-select-border-color, #66afe999); transition: border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;
}
li.message {
pointer-events: none;
cursor: not-allowed;
}
img {
height: 1.3em;
margin-right: 3px;
display: inline-block;
}
</style>
<ul ref="${t}" style="top: ${a.top}px; left: ${a.left}px;">
${(Array.isArray(r)?r:r?r:[]).map(s=>u<li class="message">${s}</li>)} ${o.map(s=>u`
<li key="${s.key}"
data-key="${s.key}"
class="${s.key===n&&"selected"}"
${s}
</li>
`)}
</ul>},Dt="x-userscript-dropdown-menu";Tt(lr,Dt,["props"],{shadow:!0});var be=e=>u<${Dt} props="${e}" />;function ge({list:e,onBlur:t,defaultSelected:o}){let[r,a]=v(o),n=j(()=>e[r??o],[r,e,o]),s=w(()=>a(p=>((p??0)-1+e.length)%e.length),[e]),i=w(()=>a(p=>((p??-1)+1)%e.length),[e]),c=w(()=>{a(void 0),t?.()},[]);return{item:n,select:a,selectPrev:s,selectNext:i,blur:c}}var Bt=2147483648,pr=65536,xe=[Bt,0,0,0],ur=e=>e>=65&&e<=90,dr=e=>e>=97&&e<=122,fr=e=>ur(e)?e+32:e,mr=e=>dr(e)?e-32:e,zt=e=>e.split("").map(t=>t.charCodeAt(0));function At(e){let t=[...Array(pr)].map(i=>0),o=0,r=Bt;for(let i of zt(e))i===32?o|=r:(t[i]|=r,t[mr(i)]|=r,t[fr(i)]|=r,r>>>=1);let a=r;function n(i=xe,c=""){let p=i[0],l=i[1],m=i[2],f=i[3];for(let d of zt(c))r=t[d],f=f&o|(f&r)>>>1|m>>>1|m,m=m&o|(m&r)>>>1|l>>>1|l,l=l&o|(l&r)>>>1|p>>>1|p,p=p&o|(p&r)>>>1,l|=p>>>1,m|=l>>>1,f|=m>>>1;return[p,l,m,f]}function s(i,c=0){let p=n(xe,i);return c>=xe.length&&(c=xe.length-1),(p[c]&a)!=0}return s.source=e,s}function Ft({query:e,list:t,convert:o=r=>r}={}){return j(()=>{if(!e||e==="")return t;let r=Math.min(Math.floor(e.length/4),4),a=At( ${e} );return t.filter(n=>a(o(n),r))},[e,t,o])}var Rt=({list:e,onSelect:t,convert:o})=>{let[r,a]=v({}),n=w(x=>{let{left:k=0,bottom:T=0}=x?.current?.getBoudingClientRect?.()??{};a({top:T,left:k})},[]),[s,i]=v(""),[c,p]=v(""),l=Ft({query:s,list:e,convert:o}),{item:m,selectPrev:f,selectNext:d,select:b,blur:h}=ge({list:l});E(()=>{!m||(t?.(m),p(m.text))},[m]);let[g,_]=v(!1),y=w(({target:{value:x}})=>{p(x),_(!0),m?.text!==x&&(h(),i(x))},[m]),P=()=>_(x=>!x),C=()=>!document.activeElement&&_(!1),S=w(x=>{let{key:k,shiftKey:T}=x;if(k==="Escape"){x.preventDefault(),x.stopPropagation(),_(!1);return}if(k==="Enter"){x.preventDefault(),x.stopPropagation(),m||b(0),_(!1);return}if(!(k==="Tab"&&!g)){if(k==="ArrowUp"||k==="Tab"&&T){x.preventDefault(),x.stopPropagation(),f();return}if(k==="ArrowDown"||k==="Tab"&&!T){x.preventDefault(),x.stopPropagation(),d();return}}},[f,d,b,g]),z=w(x=>{x.preventDefault(),x.stopPropagation();let{deltaY:k}=x;if(k>0){d();return}if(k<0){f();return}},[d,f]),L=w(x=>{b(x),_(!1)},[]);return u<span style="position: relative;">
<input
ref="${n}"
type="text"
value="${c}"
onInput="${y}"
onBlur="${C}"
onClick="${P}"
onKeyDown="${S}"
onWheel="${z}"
/>
${g&&u`<${be} position="${{}}"
messages="${l.length===0&&u<span class="message">Not found</span>}"
selected="${m?.key}">
${l.map(({key:x,text:k},T)=>u`
<a key="${x}" onClick="${()=>L(T)}">${k}</a>
`)}
<//>`}
</span>};function X(e,{delay:t},o=[]){let[r,a]=v(!1),n=w(e,o);return E(()=>{(async()=>{let s=setTimeout(()=>a(!0),t);await n(),clearTimeout(s),a(!1)})()},[n,t,...o]),{loading:r}}var Nt=({onClose:e})=>u<div class="background" onClick="${e}"/>,Ot=
.background {
position: fixed;
top: 0;
right: 0;
width: 100%;
height: 100%;
background-color: var(--modal-bg, rgba(0, 0, 0, 0.4));
z-index: 89999;
}
;var Kt=({error:e})=>e&&u
<div class="error">${e}</div>
,Ht=
.error {
display: block;
padding: 15px;
margin: 20px;
text-align: center;
}
.error::before {
font: normal normal normal 14px/1 FontAwesome;
content: '\f071';
margin-right: .3em;
}
;var I=e=>e.toLowerCase().replaceAll(" ","_").replace(/[/?#\{}^|<>]/g,t=>encodeURIComponent(t));var hr=({watchList:e})=>{let[t,o]=v(!1),[r,a]=v(scrapbox.Project.name),[n,s]=v(""),[i,c]=v(!0),p=j(()=>i?n:"",[i,n]),[l,m]=v(!1),{loading:f,items:d}=br({project:r,query:n}),{searching:b,error:h,projects:g}=gr({query:p,watchList:e,includeWatchList:l}),_=j(()=>g.map(({id:x,name:k,displayName:T})=>({key:k,text:T})),[g]);E(()=>h&&c(!0),[h]);let y=({key:x})=>a(x),P=({target:{value:x}})=>{c(!1),s(x)},C=()=>o(!1),S=({key:x})=>{x==="Escape"&&C()},z=({ctrlKey:x,shiftKey:k,altKey:T,metaKey:Pe,target:N})=>{N.target==="_blank"||x||k||T||Pe||C()},L=()=>{c(!0)};return E(()=>scrapbox.PageMenu.addItem({title:"Fulltext Search",image:"https://raw.githubusercontent.com/nota/kamon/master/svg/search.svg",onClick:()=>o(!0)}),[]),t&&u
<${Nt} onClose="${C}"/>
<div class="container" onKeydownCapture="${S}">
<div class="search-form">
<${Rt}
list="${_}"
convert="${({key:x,text:k})=>${x} ${k}}"
onSelect="${y}" />
<input type="text" value="${n}" onInput="${P}" />
<button type="button" onClick="${L}" disabled="${i}">
${i?${b?"Searching...: ":""}Found ${g.length} projects:"Search for all projects"}
</button>
<input
type="checkbox"
value="${!l}"
onChange="${({target:x})=>m(x.value)}" />
<label>Search besides watch list</label>
<span class="info">
${f?Searching for ${n}...:${d.length} results}
</span>
<${Kt} error="${h}" />
</div>
${d.length>0&&u`
<ul class="dropdown">
${d.map(x=>u`<li key="${x.title}">
<a href="/${x.project}/${I(x.title)}"
target="${x.project===scrapbox.Project.name?"":"_blank"}"
rel="${x.project===scrapbox.Project.name?"route":"noopener noreferrer"}"
onClick="${z}">
${x.title}
<div class="description">
${x.lines.map(k=>u<span>${k}</span>)}
</div>
</a>
</li>`)}
</ul>
`}
</div>};function br({project:e,query:t}){let[o,r]=v([]),a=j(()=>q(async(s,i)=>{if(i===""||s===""){r([]);return}try{let c=await fetch(/api/pages/${s}/search/query?q=${encodeURIComponent(i)}),{pages:p}=await c.json();r(p.map(({title:l,words:m,lines:f})=>({project:s,title:l,words:m,lines:f})))}catch(c){console.error(c),r([])}},500,{immediate:!1}),[]),{loading:n}=X(async()=>await a(e,t),{delay:1500},[a,e,t]);return{loading:n,items:o}}function gr({query:e,watchList:t,includeWatchList:o}){let[r,a]=v([]),n=j(()=>{let f=r.map(({id:d})=>d);return t.filter(({id:d})=>!f.some(b=>b===d))},[r,t]),[s,i]=v([]),[c,p]=v(!1),[l,m]=v(void 0);return E(()=>(async()=>{let f=await fetch("/api/projects");if(!f.ok)return[];let d=await f.json();a(d.projects?.map?.(({id:b,name:h,displayName:g})=>({id:b,name:h,displayName:g}))??[])})(),[]),E(()=>(async()=>{if(m(void 0),e===""){i([...r,...n]);return}p(!0),i([]);try{{let f=await fetch(/api/projects/search/query?q=${e}),d=await f.json();if(!f.ok)throw Error(d.message);i(d.projects)}if(o){let f=Math.floor(n.length/100)+1;for(let d=0;d<f;d++){let b=new URLSearchParams;b.append("q",e),n.slice(d*100,100+d*100).forEach(({id:_})=>b.append("ids",_));let h=await fetch(/api/projects/search/watch-list?${b.toString()}),g=await h.json();if(!h.ok)throw Error(g.message);i(_=>[..._,...g.projects])}}}catch(f){m(f.toString())}finally{p(!1)}})(),[e,n,r,o]),{searching:c,error:l,projects:s}}var xr=
:host {
--dropdown-text-color: var(--incremental-fulltext-search-text-color, #333); --dropdown-bg: var(--incremental-fulltext-search-result-bg, #fff); --dropdown-border-color: var(--body-bg, rgba(0,0,0,0.15));
--dropdown-shadow-color: rgba(0,0,0,0.175);
--dropdown-item-hover-text-color: var(--incremental-fulltext-search-hover-text-color, #333); --dropdown-item-hover-bg: var(--incremental-fulltext-search-result-hover-bg, #f5f5f5); }
.container {
display: block;
position: fixed;
width: calc(100% - 20px);
top: 5vh;
left: 10px;
color: var(--incremental-fulltext-search-text-color, #4a4a4a); z-index: 90000;
}
span {
margin-right: .5em;
}
.search-form {
width: inherit;
border-radius: 5px;
padding: 0 10px;
border: transparent;
box-shadow: none;
font-size: 14px;
color: var(--search-form-text-color, rgba(255,255,255,0.35));
background-color: var(--search-form-bg, rgba(255,255,255,0.15));
}
.info {
display: block;
}
.dropdown {
max-height: 80vh;
flex-direction: column;
width: 100%;
padding: 5px 0;
margin: 2px 0 0;
list-style: none;
font-size: 14px;
font-weight: normal;
line-height: 28px;
text-align: left;
border: 1px solid rgba(0,0,0,0.15);
border-radius: 4px;
background-clip: padding-box;
background-color: var(--incremental-fulltext-search-result-bg, #fefefe); white-space: nowrap;
overflow-x: hidden;
overflow-y: auto;
text-overflow: ellipsis;
}
a {
display: block;
padding: 3px 20px;
clear: both;
align-items: center;
font-weight:normal;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
text-decoration: none;
text-overflow: ellipsis;
color: var(--incremental-fulltext-search-text-color, #262626); background-color: var(--incremental-fulltext-search-result-bg, #f5f5f5); }
a:hover {
text-decoration: none;
color: var(--incremental-fulltext-search-hover-text-color, #262626); background-color: var(--incremental-fulltext-search-result-hover-bg, #f5f5f5); }
a:focus {
color: var(--incremental-fulltext-search-hover-text-color, #262626); background-color: var(--incremental-fulltext-search-result-hover-bg, #f5f5f5); outline: 0;
box-shadow: 0 0px 0px 3px rgba(102,175,233,0.6);
transition: border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;
}
.description {
display: block;
margin-top: 0.5em;
color: var(--incremental-fulltext-search-description-text-color, gray);
font-size: 12px;
line-height: 14px;
max-height: 28px;
overflow: hidden;
text-overflow: ellipsis;
}
${Ot}
${Ht}
;function Ut(e){let t=document.createElement("div");t.dataset.userscriptName="incremental-fulltext-search-form",t.attachShadow({mode:"open"}),document.body.append(t),A(u
<style>
:host {
--incremental-fulltext-search-text-color: var(--page-text-color, #4a4a4a); --incremental-fulltext-search-hover-text-color: var(--page-text-color, #4a4a4a); --incremental-fulltext-search-description-text-color: var(--card-description-color, gray);
--incremental-fulltext-search-result-bg: var(--page-bg, #fefefe); --incremental-fulltext-search-result-hover-bg: var(--card-hover-bg, #f5f5f5); }
${xr}
</style>
<${hr} watchList="${e}"/>
,t.shadowRoot)}async function Wt(e,{includeJoined:t=!0}={}){let o=Math.floor(e.length/100)+1,a=(await Promise.all([...Array(o).keys()].map(async n=>{let s=new URLSearchParams;e.slice(n*100,100+n*100).forEach(p=>s.append("ids",p));let i=await fetch(/api/projects?${s.toString()}),{projects:c}=await i.json();return c}))).flat();return t?[...new Set(a.map(({id:s})=>s))].map(s=>a.find(i=>i.id===s)):[...new Set(a.map(({id:n})=>n))].filter(n=>e.some(s=>s===n)).map(n=>a.find(s=>s.id===n))}(async()=>{let e=Object.keys(JSON.parse(localStorage.getItem("projectsLastAccessed"))),t=[...await Wt(e)].map(({id:o,name:r,displayName:a})=>({id:o,name:r,displayName:a})).sort((o,r)=>o.displayName.localeCompare(r.displayName));Ut(t)})();function qt(e){let t=e.flatMap(({changes:a,created:n,userId:s})=>a.flatMap(i=>{let c=_r(i,s,n);return c?[c]:[]})),o=[...new Set(t.map(({created:a})=>parseInt(a)))].sort();return{history:t.reduce((a,n)=>{if(n.type==="insert"){let i={};i[n.created]={text:n.text,userId:n.userId};let c={id:n.id,snapshots:i};if(n.parentId==="_end")return[...a,c];let p=a.findIndex(({id:l})=>l===n.parentId);return p<0?(console.warn("[scrapbox-snapshot@0.1.0] The parent line the snapshot would insert before is not found. change: ",n),[...a,c]):[...a.slice(0,p),c,...a.slice(p)]}let s=a.findIndex(({id:i})=>i===n.id);return s<0?(console.warn("[scrapbox-snapshot@0.1.0] The line data to be append the change is not found. change: ",n),a):n.type==="update"?(a[s].snapshots[n.created]={text:n.text,userId:n.userId},a):(n.type==="delete"&&(a[s].snapshots[n.created]={text:null,userId:n.userId}),a)},[]),range:o}}function _r(e,t,o){let r={userId:t,created:o};if(e._insert)return{type:"insert",id:e.lines.id,parentId:e._insert,text:e.lines.text,...r};if(e._update)return{type:"update",id:e._update,text:e.lines.text,...r};if(e._delete)return{type:"delete",id:e._delete,...r}}var vr=()=>{let[e,t]=v(!1),[o,r]=v(0),[a,n]=v(0),[s,i]=v([]),[c,p]=v(()=>()=>""),{loading:l}=X(async()=>{if(!e)return;let{range:d,getSnapshot:b}=await yr();i(h=>JSON.stringify(h)===JSON.stringify(d)?h:d),p(()=>b)},{delay:1e3},[e]);E(()=>{r(s.length-1),n(s.length-1)},[s]),E(()=>{scrapbox.PageMenu.addItem({title:"Open commit viewer",image:"https://1.bp.blogspot.com/-UZtkSEX0wh4/U5l5_dNcEsI/AAAAAAAAhWs/UzJGVzyiX8Y/s800/kaichu_dokei.png",onClick:()=>t(!0)})},[]);let m=()=>t(!1),f=({target:{value:d}})=>n(parseInt(d));return u
<style>
:host {
}
.background {
position: fixed;
top: 0;
right: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.4);
z-index: 89999;
}
.container {
position: fixed;
top: 5px;
left: 5px;
width: calc(100% - 10px);
max-height: 80vh;
border-radius: 4px;
z-index: 90000;
}
.close-button {
font-size: 30px;
line-height: 1em;
padding: 0;
width: 30px;
height: 30px;
}
pre {
width: 100%;
max-height: 70vh; /* なぜか100%だとはみ出てしまった */
overflow-y: auto;
font-family: var(--history-slider-pre-font, Menlo,Monaco,Consolas,"Courier New",monospace);
word-break: break-all;
word-wrap: break-word;
white-space: pre-wrap;
}
input {
width: 90%;
}
</style>
${e&&u`
<div class="background" onClick="${m}"/>
<div class="container">
<div style="display: inline">
<input type="range" max="${o}" min="0" step="1" value="${a}"
title="${new Date(sa*1e3)}" onInput="${f}" />
<button class="close-button" onClick="${m}">x</button>
</div>
<hr />
${l&&"Loading..."}
</div>
`}
},_e=document.createElement("div");_e.dataset.userscriptName="history-slider";_e.attachShadow({mode:"open"});document.body.append(_e);A(u<${vr} />,_e.shadowRoot);async function yr(){let[e,t]=await Promise.all([wr(),$r()]),o=r=>e.range.includes(r)?e.history.flatMap(({id:a,snapshots:n})=>{let s=Object.keys(n).map(p=>parseInt(p)),i=s.includes(r)?r:s.filter(p=>p<=r).pop();if(i===void 0)return[];let c=n[i];return c.text!==null?[c.text]:[]}).join(
):t.range.includes(r)?t.pages[r].map(a=>a.text).join(
):"";return{range:[...t.range,...e.range],getSnapshot:o}}async function $r(){let e=await fetch(/api/page-snapshots/${scrapbox.Project.name}/${scrapbox.Page.id}),{snapshots:t}=await e.json(),o=Object.fromEntries(t.map(({lines:a,created:n})=>[n,a]));return{range:Object.keys(o).map(a=>parseInt(a)).sort(),pages:o}}async function wr(){let e=await fetch(/api/commits/${scrapbox.Project.name}/${scrapbox.Page.id}),{commits:t}=await e.json();return qt(t)}import{parse as kr}from"../scrapbox-parser@7.1.0/script.js";var Xt=({lines:e,project:t,titleLc:o,noIndent:r})=>{let a=j(()=>{let i=e.map(c=>typeof c=="string"?c:c.text).join(
);return kr(i,{hasTitle:!1})},[e]),n=j(()=>e.flatMap(i=>typeof i=="string"?[]:[i.id]),[e]),s=0;return u${a.flatMap(i=>{switch(i.type){case"title":return[];case"codeBlock":{let c=s;return s+=i.content.split(`
).length+1,[u<${jr}
block="${i}"
project="${t}" titleLc="${o}"
noIndent="${r}"
ids="${n.slice(c,s)}" />]}case"table":{let c=s;return s+=i.cells.length+1,[u<${Cr}
block="${i}"
project="${t}" titleLc="${o}"
noIndent="${r}"
ids="${n.slice(c,s)}" />]}case"line":return s++,[u<${ne}
indent="${i.indent}"
noIndent="${r}">
${i.nodes.length>0?i.nodes.map(c=>u<${ve} node="${c}" project="${t}" />):u<br />}
<//>]}})}},ne=({index:e,indent:t,noIndent:o,children:r})=>u`<div class="line"
data-id="L${e}"
data-indent="${t}"
style="margin-left: ${o?"":${1*t}em};"
${r}</div>,jr=({block:{fileName:e,content:t,indent:o},project:r,titleLc:a,ids:n})=>{let[s,i]=v(""),c=w(()=>{navigator.clipboard.writeText(t),i("Copied"),setTimeout(()=>i(""),1e3)},[t]);return u
<${ne} index="${n0}" indent="${o}"> <span class="code-block">
<span class="code-block-start">
${e.includes(".")?u<a href="/api/code/${r}/${a}/${e}" target="_blank">${e}</a>:e}
</span>
<span class="copy" title="Copy" onClick="${c}">${s}</span>
</span>
<//>
${t.split(`
).map((p,l)=>u<${ne} index="${nl+1}" indent="${o}"> <code class="code-block">
${p}
</code>
<//>`)}
},Cr=({block:{fileName:e,cells:t,indent:o},project:r,titleLc:a,ids:n})=>u
<${ne} index="${n0}" indent="${o}"> <span class="table-block">
<span class="table-block-start">
<a href="/api/table/${r}/${a}/${e}.csv" target="_blank">${e}</a>
</span>
</span>
<//>
${t.map((s,i)=>u`
<${ne} index="${ni+1}" indent="${o}"> <span class="table-block table-block-row">
${s.map((c,p)=>u`<span class="cell col-${p}">
</span>`)}
</span>
<//>
`)}
,ve=({node:e,project:t})=>{switch(e.type){case"code":return u<${Sr} node="${e}" />;case"formula":return u<${Er} node="${e}" />;case"commmandLine":return u<${Pr} node="${e}" />;case"helpfeel":return u<${Lr} node="${e}" />;case"quote":return u<${Ir} node="${e}" project="${t}" />;case"strong":return u<${Mr} node="${e}" project="${t}" />;case"decoration":return u<${Tr} node="${e}" project="${t}" />;case"plain":case"blank":return u<${Br} node="${e}" />;case"hashTag":return u<${zr} node="${e}" project="${t}" />;case"link":return u<${Ar} node="${e}" project="${t}" />;case"googleMap":return u<${Dr} node="${e}" />;case"icon":return u<${Vt} node="${e}" project="${t}" />;case"strongIcon":return u<${Vt} node="${e}" project="${t}" strong />;case"image":return u<${Jt} node="${e}" />;case"strongImage":return u<${Jt} node="${e}" strong />}},Sr=({node:{text:e}})=>u<code class="code">${e}</code>,Er=({node:{formula:e}})=>{let{ref:t,error:o,setFormula:r}=G("");return r(e),u
<span class="formula${o?" error":""}">
${o?u<code>${e}</code>:u<span class="katex-display" ref="${t}"/>}
</span>},Pr=({node:{text:e,symbol:t}})=>u<code class="cli">
<span class="prefix">${t}</span>
${" "}
<span class="command">${e}</span>
</code>,Lr=({node:{text:e}})=>u<code class="helpfeel">
<span class="prefix">?</span>
${" "}
<span class="entry">${e}</span>
</code>,Ir=({node:{nodes:e},project:t})=>u
<blockquote class="quote">
${e.map(o=>u<${ve} node="${o}" project="${t}" />)}
</blockquote>
,Mr=({node:{nodes:e},project:t})=>u
<strong>
${e.map(o=>u<${ve} node="${o}" project="${t}" />)}
</strong>
,Tr=({node:{decos:e,nodes:t},project:o})=>u
<span class="${e.map(r=>deco-${r}).join(" ")}">
${t.map(r=>u<${ve} node="${r}" project="${o}" />)}
</span>
,Dr=({node:{place:e,latitude:t,longitude:o,zoom:r}})=>u
<span class="pointing-device-map">
rel="noopner noreferrer"
target="_blank">
<img class="google-map"
src="/api/google-map/static-map?center=${t}%2C${o}&markers=${e}&zoom=${r}&_csrf=${window._csrf}" />
</a>
</span>
,Br=({node:{text:e}})=>u${e},Vt=({node:{pathType:e,path:t},strong:o,project:r})=>{let a=e==="relative"?r:t.match(/\/([\w\-]+)/)[1],n=e==="relative"?t:t.match(/\/[\w\-]+\/(.+)$/)[1],s=I(n);return u
<a href="/${a}/${s}"
rel="${a===scrapbox.Project.name?"route":"noopener noreferrer"}"
target="${a===scrapbox.Project.name?"":"_blank"}">
<img class="${o?"icon strong-icon":"icon"}"
alt="${n}"
src="/api/pages/${a}/${s}/icon">${n}</img>
</a>
},Jt=({node:{link:e,src:t},strong:o})=>{let r=e||(/https:\/\/gyazo\.com\/[^\/]+\/thumb\/1000/.test(t)?t.slice(0,-"/thumb/1000".length):t);return u
<a class="${e?"link":""}" href="${r}" rel="noopner noreferrer" target="_blank">
<img class="${o?"image strong-image":"image"}" src="${t}" />
</a>
},zr=({node:{href:e},project:t})=>u
<a href="/${t}/${I(e)}"
class="page-link"
type="hashTag"
rel="${t===scrapbox.Project.name?"route":"noopener noreferrer"}"
target="${t===scrapbox.Project.name?"":"_blank"}">
</a>
,Ar=({node:{pathType:e,href:t,content:o},project:r})=>{switch(e){case"root":{let[n,s,i,c]=t.match(/\/([\w\-]+)\/([^#]*)(.*)/)??["","","",""];return u
<a class="page-link"
type="link" href="/${s}/${I(i)}${c}"
rel="${s===scrapbox.Project.name?"route":"noopener noreferrer"}"
target="${s===scrapbox.Project.name?"":"_blank"}">
${t}
</a>}case"relative":{let[n,s,i]=t.match(/^([^#]*)(.*)/)??["","",""];return u
<a class="page-link"
type="link" href="/${r}/${I(s)}${i}"
rel="${r===scrapbox.Project.name?"route":"noopener noreferrer"}"
target="${r===scrapbox.Project.name?"":"_blank"}">
${t}
</a>}case"absolute":let a=new URL(t);switch(a.hostname){case"www.youtube.com":return u<iframe
type="text/html"
allowfullscreen='' />;case"vimeo.com":return u<iframe
type="text/html"
allowfullscreen='' />;default:break}return/\.(?:mp3|ogg|wav)/.test(t)??o===""?u<audio preload='none' src="${t}" controls />:u<a class="link" href="${t}" rel="noopener noreferrer" target="_blank">
${o||t}
</a>}},Yt=
a {
background-color: transparent;
text-decoration: none;
cursor: pointer;
}
img {
display: inline-block;
max-width: 100%;
max-height: 100px;
}
code {
font-family: var(--code-text-font, Menlo, Monaco, Consolas, "Courier New", monospace);
font-size: 90%;
background-color: var(--code-bg, rgba(0,0,0,0.04));
padding: 0;
white-space: pre-wrap;
word-wrap: break-word;
}
blockquote {
background-color: var(--quote-bg-color, rgba(0,0,0,0.05));
display: block;
padding-left: 4px;
margin: 0px;
}
strong {
font-weight: bold;
}
iframe {
display: inline-block;
margin: 3px 0;
vertical-align: middle;
max-width: 100%;
width: 640px;
height: 360px;
border: 0;
}
audio {
display: inline-block;
vertical-align: middle;
white-space: initial;
max-width: 100%;
}
.formula {
margin: auto 6px;
}
.formula.error code {color:#fd7373; }
.katex-display {
display: inline-block !important;
margin: 0 !important;
text-align: inherit !important;
}
.error .katex-display {
display: none;
}
.cli {
border-radius: 4px;
}
.cli .prefix {
}
.helpfeel {
border-radius: 4px;
padding: 3px !important;
}
.helpfeel .prefix {
}
.helpfeel .entry {
}
.code-block {
display: block;
line-height: 1.7em;
background-color: var(--code-bg, rgba(0,0,0,0.04));
}
.code-block-start {
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
font-size: .9em;
padding: 1px 2px;
}
.code-block-start a {
text-decoration: underline;
}
code.code-block,
.table-block.table-block-row {
padding-left: 1.0em;
}
.copy {
font-family: 'FontAwesome';
cursor: pointer;
}
.table-block {
white-space: nowrap;
}
.table-block-start {
padding: 1px 2px;
font-size: .9em;
}
.table-block-start a {
text-decoration: underline;
}
.cell {
margin: 0;
padding: 0 2px 0 8px;
box-sizing: content-box;
display: inline-block;
white-space: pre;
}
.cell:nth-child(2n+1) {
background-color: rgba(0,0,0,0.04);
}
.cell:nth-child(2n) {
background-color: rgba(0,0,0,0.06);
}
.strong-image {
max-height: 100%;
}
.icon {
height: 11px;
vertical-align: middle;
}
.strong-icon {
height: calc(11px * 1.2);
}
.deco-\\/ {font-style: italic;}
.deco-\\*-1 {font-weight: bold;}
.deco-\\*-2 {font-weight: bold; font-size: 1.20em;}
.deco-\\*-3 {font-weight: bold; font-size: 1.44em;}
.deco-\\*-4 {font-weight: bold; font-size: 1.73em;}
.deco-\\*-5 {font-weight: bold; font-size: 2.07em;}
.deco-\\*-6 {font-weight: bold; font-size: 2.49em;}
.deco-\\*-7 {font-weight: bold; font-size: 3.00em;}
.deco-\\*-8 {font-weight: bold; font-size: 3.58em;}
.deco-\\*-9 {font-weight: bold; font-size: 4.30em;}
.deco-\\*-10 {font-weight: bold; font-size: 5.16em;}
.deco-\\- {text-decoration: line-through;}
.deco-_ {text-decoration: underline;}
.page-link {color: var(--page-link-color, #5e8af7);} .page-link:hover {color: var(--page-link-hover-color, #2d67f5);} .empty-page-link {color: :var(--empty-page-link-color, #fd7373);} .empty-page-link:hover {color: :var(--empty-page-link-hover-color, #fd7373);} .link {
text-decoration: underline;
}
.link:hover {color: var(--page-link-color-hover-color, #2d67f5);} .link img {
padding-bottom: 3px;
border-style: none none solid;
border-width: 1.5px;
}
.permalink {
background-color: var(--line-permalink-color, rgba(234,218,74,0.75));
}
;var Fr=1,Gt="wc-";function Rr(){let e=Math.random().toString(36).slice(2);return${Gt}${e}-${Fr++}}var Qt=${Gt}text,Zt=!1,Nr=typeof window!="undefined"&&!!window.customElements;function ae(e,t,o){if(Array.isArray(e)){let r=e.map((a,n)=>ae(a,t,wc-slot-${n}));return o?M(O,{key:o},r):r}if(typeof e!="object")return Zt||(Zt=!0,Nr&&window.customElements.define(Qt,class extends HTMLElement{})),M(Qt,{key:o,slot:t},e);if(Kr(e)){let{type:r}=e;if(typeof r=="string")return{...e,props:{...e.props,slot:t},key:e.key??o};if(typeof r=="symbol"){let p=r;if(p.description==="react.fragment")return{...e,props:{...e.props,children:ae(e.props.children,t)},key:e.key??o};throw new Error("Could not handle node of type "+String(p))}let{props:{children:a,...n},key:s}=e,i=eo.get(r);if(i)return M(i,{...n,key:s??o,slot:t},a);let c=Or(r);return eo.set(r,c),M(c,{...n,key:s??o,slot:t},a)}return null}var eo=new WeakMap;function Or(e){return Hr(e)?class extends e{render(){let t=super.render();return M(O,{children:ae(t,this.props.slot)})}}:({slot:t,...o})=>{let r=e(o);return M(O,{children:ae(r,t)})}}function Kr(e){return e!=null&&e.type!==void 0}function Hr(e){return!!e.prototype&&!!e.prototype.isReactComponent}function Ur(e,t){if(!t||t.length===0)return e.children;let o=e,r=[];for(let a of t){let n=o[a];r.push(ae(n,a,slot-${a}))}return r.push(e.children),r}var to=Symbol("slot");function*Wr(e,t){for(let o=e;o<t;o++)yield o}function qr(e,t){let o=e[0],r=[];for(let a of Wr(0,t.length)){let n=t[a];if(typeof n!="object")o+=oo(String(n));else{let s=n[to];s&&s!=="children"?(o+=<slot name="${oo(s)}"></slot>,r.push(s)):o+="<slot></slot>"}o+=e[a+1]}return[o,r]}function Xr(e){switch(e){case"&":return"&";case"<":return"<";case">":return">";case'"':return""";case"'":return"'";default:return e}}function oo(e){return e.replace(/[&<>"']/g,Xr)}function V(e,...t){let o=Rr(),r=!1,a=document.createDocumentFragment(),[n,s]=qr(e,t);return Object.assign(i=>{if(!r){r=!0;let p=document.createElement("div");p.insertAdjacentHTML("afterbegin",n),a.append(...p.childNodes);class l extends HTMLElement{constructor(){super();this.attachShadow({mode:"open"}).appendChild(a.cloneNode(!0))}}window.customElements.define(o,l)}let c=Ur(i,s);return M(o,{},c)},{elementName:o})}function J(e){return{[to]:e||""}}var ye=
:host {
display: inline-block;
position: absolute;
cursor: default;
}
,Vr=V
<style>
${ye}
:host {
top: 0;
left: 0;
}
::slotted(*) {
border-right: 1px solid var(--status-bar-border-color, #a9aaaf); border-bottom: 1px solid var(--status-bar-border-color, #a9aaaf); }
::slotted(*:last-of-type) {
border-bottom-right-radius: 3px;
}
</style>
${J()}
,Jr=V
<style>
${ye}
:host {
top: 0;
right: 0;
}
::slotted(*) {
border-left: 1px solid var(--status-bar-border-color, #a9aaaf); border-bottom: 1px solid var(--status-bar-border-color, #a9aaaf); }
::slotted(*:first-of-type) {
border-bottom-left-radius: 3px;
}
</style>
${J()}
,Yr=V
<style>
${ye}
:host {
bottom: 0;
right: 0;
}
::slotted(*) {
border-left: 1px solid var(--status-bar-border-color, #a9aaaf); border-top: 1px solid var(--status-bar-border-color, #a9aaaf); }
::slotted(*:first-of-type) {
border-top-left-radius: 3px;
}
</style>
${J()}
,Gr=V
<style>
${ye}
:host {
bottom: 0;
left: 0;
}
::slotted(*) {
border-right: 1px solid var(--status-bar-border-color, #a9aaaf); border-top: 1px solid var(--status-bar-border-color, #a9aaaf); }
::slotted(*:last-of-type) {
border-top-right-radius: 3px;
}
</style>
${J()}
,$e=({orientation:e,children:t})=>{if(!t||t.length===0)return u;switch(e){case"top-left":return u<${Vr}>${t}<//>;case"top-right":return u<${Jr}>${t}<//>;case"bottom-right":return u<${Yr}>${t}<//>;case"bottom-left":return u<${Gr}>${t}<//>;default:throw Error(${e} is an invalid value)}};var ro=({project:e,titleLc:t,lines:o,loading:r,hasChild:a,style:n,theme:s,onPointerEnterCapture:i,onPointerLeaveCapture:c,onClick:p})=>(o.length>0||r)&&u<div class="text-bubble${a?" no-scroll":""}"
data-theme="${s}"
onPointerEnterCapture="${i}"
onPointerLeaveCapture="${c}"
onClick="${p}"
style="${n}" >
<${$e} orientation="${o.length>0?"top-right":"top-left"}">
${r&&u<span>${o.length>0?"Updating...":"Loading..."}</span>}
${e!==scrapbox.Project.name&&u`
<${Zr} project="${e}" titleLc="${t}" />
`}
<//>
${o.length>0&&u`
<${Xt} lines="${o}" project="${e}" titleLc="${t}" />
`}
</div>,no=
.text-bubble {
padding: 5px 0px 5px 5px;
font-size: 11px;
line-height: 1.42857;
user-select: text;
position: absolute;
max-height: 80vh;
overflow-y: auto;
border-radius: 4px;
--text-bubble-border-color: hsl(221, 15%, 25%);
border: 1px solid var(--text-bubble-border-color, #f2f2f3); --status-bar-border-color: var(--text-bubble-border-color, #f2f2f3); box-shadow: 0 6px 12px rgba(0,0,0,0.175);
z-index: 9000;
}
.text-bubble.no-scroll {
overflow-y: hidden;
}
--text-bubble-border-color: hsl(0, 0%, 39%);
}
--text-bubble-border-color: hsl(0, 0%, 89%);
}
--text-bubble-border-color: hsl(53, 8%, 58%);
}
--text-bubble-border-color: hsl(203, 42%, 17%);
}
--text-bubble-border-color: hsl(227, 68%, 62%);
}
--text-bubble-border-color: hsl(267, 39%, 60%);
}
--text-bubble-border-color: hsl(136, 29%, 50%);
}
--text-bubble-border-color: hsl(43, 71%, 51%);
}
--text-bubble-border-color: hsl(4, 58%, 56%);
}
--text-bubble-border-color: hsl(72, 64%, 57%);
}
--text-bubble-border-color: hsl(331, 21%, 26%);
}
--text-bubble-border-color: hsl(176, 29%, 67%);
}
${Yt}
,Qr=V
<style>
::slotted(a) {
text-decoration: none;
}
</style>
${J()}
;function Zr({project:e,titleLc:t}){return u<${Qr}>
<a href="/${e}/${t}"
target="_blank"
rel="noopener noreferrer"
/${e}
</a>
<//>}var ao=({loading:e,hasChild:t,children:o,...r})=>{let a=B(null),n=w(s=>{t||(s.preventDefault(),s.stopPropagation(),a.current.scrollLeft+=s.deltaY<0?-120:120)},[]);return(o.length>0||e)&&u
<div class="card-bubble" ...${r}>
<ul ref="${a}" onWheel="${n}">
${o.map(s=>u<li>${s}</li>)}
</ul>
${e&&u`
<${$e} orientation="${o.length>0?"top-left":"bottom-left"}">
<span>${o.length>0?"Updating...":"Loading..."}</span>
<//>
`}
</div>},so=
.card-bubble {
background-color: var(--page-bg, #FFF); box-shadow: 0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);
position: absolute;
max-width: 80vw;
box-sizing: content-box;
z-index: 9000;
font-size: 11px;
line-height: 1.42857;
}
.card-bubble > ul {
display: flex;
padding: 0px;
margin: 0px;
list-style: none;
overflow-x: auto;
overflow-y: visible;
}
.card-bubble > ul > li {
display: block;
position: relative;
float: none;
margin: 5px;
box-sizing: border-box;
box-shadow: var(--card-box-shadow, 0 2px 0 rgba(0,0,0,0.12));
border-radius: 2px;
width: 120px;
height: 120px;
}
;import{parse as en}from"../scrapbox-parser@7.1.0/script.js";var io=({project:e,title:t,descriptions:o,thumbnail:r,theme:a,onPointerEnterCapture:n,onPointerLeaveCapture:s})=>{let i=j(()=>r?[]:en(o.join(
),{hasTitle:!1}),[o,r]);return u
<a class="related-page-card page-link" type="link"
data-theme="${a}"
onPointerEnterCapture="${n}"
onPointerLeaveCapture="${s}"
href="/${e}/${I(t)}"
rel="${e===scrapbox.Project.name?"route":"noopner noreferrer"}"
target="${e!==scrapbox.Project.name?"_blank":""}">
<div class="hover" />
<div class="content">
<div class="header">
<div class="title">${t}</div>
</div>
${r?u<div class="thumbnail"><img src="${r}"/></div>:u`<div class="description">
${i.flatMap((c,p)=>c.type==="line"?[u`<p key="${p}">
${c.nodes.map(l=>u<${co} node="${l}" project="${e}" />)}
</>`]:[])}
</div>`}
</div>
</a>
},co=({node:e,project:t})=>{switch(e.type){case"code":return u<code>${e.text}</code>;case"formula":return u<${tn} node="${e}" />;case"commmandLine":return u<code>${e.symbol} ${e.text}</code>;case"helpfeel":return u<code>? ${e.text}</code>;case"quote":case"strong":case"decoration":return e.nodes.map(o=>u<${co} node="${o}" project="${t}" />);case"googleMap":case"image":case"strongImage":return u;case"icon":case"strongIcon":return u<${on} node="${e}" project="${t}" />;case"hashTag":return u<${rn} node="${e}" project="${t}" />;case"link":return u<${nn} node="${e}" project="${t}" />;case"plain":case"blank":return u${e.text}}},tn=({node:{formula:e}})=>{let{ref:t,error:o,setFormula:r}=G("");return r(e),u
<span class="formula${o?" error":""}">
${!o&&u<span class="katex-display" ref="${t}"/>}
</span>},on=({node:{pathType:e,path:t},project:o})=>{let r=e==="relative"?o:t.match(/\/([\w\-]+)/)[1],a=e==="relative"?t:t.match(/\/[\w\-]+\/(.+)$/)[1];return u<img class="icon" src="/api/pages/${r}/${I(a)}/icon" />},rn=({node:{href:e},project:t})=>u<span class="page-link">#${e}</span>,nn=({node:{pathType:e,href:t,content:o},project:r})=>e!=="absolute"?u<span class="page-link">${t}</span>:u<span class="link">${o||t}</span>,lo=
--card-title-bg: hsl(0, 0%, 39%);
}
--card-title-bg: hsl(0, 0%, 89%);
}
--card-title-bg: hsl(53, 8%, 58%);
}
--card-title-bg: hsl(203, 42%, 17%);
}
--card-title-bg: hsl(227, 68%, 62%);
}
--card-title-bg: hsl(267, 39%, 60%);
}
--card-title-bg: hsl(136, 29%, 50%);
}
--card-title-bg: hsl(43, 71%, 51%);
}
--card-title-bg: hsl(4, 58%, 56%);
}
--card-title-bg: hsl(72, 64%, 57%);
}
--card-title-bg: hsl(331, 21%, 26%);
}
--card-title-bg: hsl(176, 29%, 67%);
}
.related-page-card {
display: block;
position: relative;
height: inherit;
width: inherit;
overflow: hidden;
text-overflow: ellipsis;
font-family: "Roboto",Helvetica,Arial,"Hiragino Sans",sans-serif;
background-color: var(--card-bg, #fff); color: var(--card-title-color, #555); word-break: break-word;
text-decoration: none;
}
.related-page-card:hover {
box-shadow: var(--card-box-hover-shadow, 0 2px 0 rgba(0,0,0,0.23));
}
.related-page-card:focus {
outline: 0;
box-shadow: 0 0px 0px 3px rgba(102,175,233,0.6);
transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s
}
.related-page-card.hover {
opacity: 0;
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
background-color: var(--card-hover-bg, rgba(0,0,0,0.05));
mix-blend-mode: multiply;
z-index: 1;
transition: background-color .1s
}
.related-page-card:hover .hover{
opacity: 1;
}
.related-page-card:active .hover{
opacity: 1;
background-color: var(--card-active-bg, rgba(0,0,0,0.1))
}
.related-page-card .content {
height: calc(100% - 5px);
width: inherit;
display: flex;
flex-direction: column;
overflow: hidden;
}
.related-page-card .content .header {
width: 100%;
text-overflow: ellipsis;
border-top: var(--card-title-bg, #f2f2f3) solid 10px; padding: 8px 10px;
}
.related-page-card .content .header .title {
font-size: 11px; /* 14 * 0.8 */
line-height: 16px; /* 20 * 0.8 */
font-weight: bold;
max-height: 48px; /* 60 * 0.8 */
margin: 0;
overflow: hidden;
display: block;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
text-overflow: ellipsis;
}
.related-page-card .content .description {
line-height: 16px; /* 20 * 0.8 */
padding: 8px 10px 0;
font-size: 10px; /* 12 * 0.8 */
white-space: pre-line;
column-count: 1;
column-gap: 2em;
column-width: 10em;
height: inherit;
color: var(--card-description-color, gray);
flex-shrink: 16;
overflow: hidden;
}
.related-page-card .content .thumbnail {
display: block;
width: 100%;
margin: 0 auto;
padding: 0 5px;
}
.related-page-card .content .description p {
margin: 0;
display: block;
}
.related-page-card .content .description code {
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
font-size: 90%;
background-color: var(--code-bg, rgba(0,0,0,0.04));
padding: 0;
white-space: pre-wrap;
word-wrap: break-word;
}
.related-page-card .content .description .icon {
height: 9px; /* 11 * 0.8 */
vertical-align: middle;
}
.related-page-card .content .description .page-link {
background-color: transparent;
text-decoration: none;
cursor: pointer;
}
;function po({expired:e=60,whiteList:t=[]}={}){let[o,r]=v({}),[a,n]=v([]),s=j(()=>[...new Set([scrapbox.Project.name,...t])],[t]),i=w(async(f,d)=>{let b=uo(f,d),h=new Date().getTime()/1e3,g=!0;if(r(y=>(g=(y[b]?.checked??0)+e<h,y[b]={project:f,titleLc:d,loading:g,lines:y[b]?.lines??[],linked:y[b]?.linked??[],checked:h},{...y})),!g)return;let _;try{_=await an(f,d)}catch(y){console.error(y)}finally{r(y=>(y[b]={project:f,titleLc:d,loading:!1,lines:_?.lines??y[b]?.lines??[],linked:_?.linked??y[b]?.linked??[],checked:y[b]?.checked??h},{...y}))}},[e]),c=w(async(f,d)=>{if(!!s.includes(f))for(let b of s)await i(b,d)},[i,s]),p=w((f,d,b,h)=>{!s.includes(d)||n(g=>{let _=s.map(y=>uo(y,b));return[...g.slice(0,f),{ids:_,position:h}]})},[s]),l=w(f=>n(d=>[...d.slice(0,f)]),[]);return{cards:j(()=>{let f=[{project:scrapbox.Project.name,titleLc:I(scrapbox.Page.title??"")}];return a.flatMap(({ids:d,position:b})=>{let h=d.flatMap(S=>o[S]?[o[S]]:[]),{project:g,titleLc:_,lines:y}=h.find(S=>S.lines.length>0)??h[0],P=h.flatMap(({project:S,linked:z})=>z.map(L=>({...L,project:S}))),C={project:g,titleLc:_,position:b,lines:_===f[0].titleLc?[]:y,linked:P.flatMap(({project:S,title:z,...L})=>f.some(x=>x.project===S&&x.titleLc===I(z))?[]:[{project:S,title:z,...L}]),loading:h.every(({loading:S})=>S)};return f.push({project:g,titleLc:_}),C.lines.length>0||C.linked.length>0?[C]:[]})},[o,a]),cache:c,show:p,hide:l}}function uo(e,t){return/${e}/${t}}async function an(e,t){let o=await fetch(/api/pages/${e}/${t});if(!o.ok)return{};let r=await o.json();if(!r.lines)return{};let{lines:a,links:n,relatedPages:{links1hop:s}}=r,i=n.map(p=>I(p)),c=s.flatMap(({title:p,descriptions:l,image:m})=>i.includes(I(p))?[]:[{title:p,descriptions:l,image:m}]);return{lines:a.slice(1),linked:c}}function Y(e,t,o,r){E(()=>(e.addEventListener(t,o,r),()=>e.removeEventListener(t,o,r)),[e,o,r,t])}var Ne="default-light";function fo(){let[e,t]=v({}),o=w(a=>{e[a]||a!==scrapbox.Project.name&&(async()=>{t(n=>(n[a]=Ne,{...n}));try{let n=await fetch(/api/projects/${a}),{theme:s}=await n.json();t(i=>(i[a]=s??Ne,{...i}))}catch(n){}})()},[e]);return{getTheme:w(a=>a===scrapbox.Project.name?document.documentElement.dataset.projectTheme:e[a]??Ne,[e]),loadTheme:o}}var mo="scrap-bubble",sn=({delay:e=500,expired:t=60,whiteList:o=[]}={})=>{let{cards:r,cache:a,show:n,hide:s}=po({expired:t,whiteList:o}),[i,c]=v(null),{getTheme:p,loadTheme:l}=fo(),m=w((b,h)=>{if(!h.matches("a.page-link, .line-title .text"))return;let[g,_,y]=h.classList.contains("page-link")?h.href.match(/\/([\w\-]+)\/([^#]*)/)??["","",""]:["",scrapbox.Project.name,scrapbox.Page.title];if(_==="")return;let P=I(decodeURIComponent(y));l(_),a(_,P),c(C=>(clearTimeout(C),setTimeout(()=>{let{top:S,right:z,left:L,bottom:x}=h.getBoundingClientRect(),k=document.getElementById("editor").getBoundingClientRect(),T=(L-k.left)/k.width>.5;n(b,_,P,{top:Math.round(x-k.top),bottom:Math.round(k.bottom-S),...T?{right:Math.round(k.right-z)}:{left:Math.round(L-k.left)}})},e)))},[a,n,l]),f=w(({target:b})=>{!b.matches("a.page-link, .line-title .text")||c(h=>(clearTimeout(h),null))},[]),d=document.getElementById("editor");return Y(d,"pointerenter",({target:b})=>m(0,b),{capture:!0}),Y(d,"pointerleave",f,{capture:!0}),Y(document,"click",({target:b})=>{b.dataset.userscriptName!==mo&&s(0)},{capture:!0}),Q([{current:document.getElementsByClassName("page-wrapper")[0]}],([{target:b}])=>{b.classList.contains("enter")||s(0)},{attributes:!0,attributeFilter:["class"]}),u
<style>
* {box-sizing: border-box;}
${no}
${so}
${lo}
</style>
${r.map(({project:b,titleLc:h,lines:g,position:{top:_,left:y,bottom:P,right:C},linked:S,loading:z},L)=>u`<${O} key="/${b}/${h}/">
<${ro}
project="${b}" titleLc="${h}"
theme="${p(b)}"
style="top: ${_}px; ${y?left: ${y}:right: ${C}}px;"
lines="${g}"
loading="${z}"
onPointerEnterCapture="${({target:x})=>m(L+1,x)}"
onPointerLeaveCapture="${f}"
onClick="${()=>s(L+1)}"
hasChild="${r.length>L+1}" />
<${ao}
loading="${z}"
style="bottom: ${P}px; ${y?left: ${y}:right: ${C}}px;"
onClickCapture="${({target:x})=>x.tagName!=="A"&&s(L+1)}"
hasChild="${r.length>L+1}">
${S.map(x=>u`
<${io}
key="/${x.project}/${x.title}"
project="${x.project}" title="${x.title}"
theme="${p(x.project)}"
descriptions="${x.descriptions}" thumbnail="${x.image}"
onPointerEnterCapture="${({target:k})=>m(L+1,k)}"
onPointerLeaveCapture="${f}" />
`)}
<//>
<//>`)}
};function ho({delay:e=500,expired:t=60,whiteList:o=[]}={}){let r=document.createElement("div");r.dataset.userscriptName=mo,document.getElementById("editor").append(r),r.attachShadow({mode:"open"}),A(u<${sn} delay="${e}" expired="${t}" whiteList="${o}"/>,r.shadowRoot)}var we=(e,t)=>t.some(o=>e instanceof o),bo,go;function cn(){return bo||(bo=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])}function ln(){return go||(go=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])}var xo=new WeakMap,Oe=new WeakMap,_o=new WeakMap,Ke=new WeakMap,se=new WeakMap;function pn(e){let t=new Promise((o,r)=>{let a=()=>{e.removeEventListener("success",n),e.removeEventListener("error",s)},n=()=>{o(K(e.result)),a()},s=()=>{r(e.error),a()};e.addEventListener("success",n),e.addEventListener("error",s)});return t.then(o=>{o instanceof IDBCursor&&xo.set(o,e)}).catch(()=>{}),se.set(t,e),t}function un(e){if(Oe.has(e))return;let t=new Promise((o,r)=>{let a=()=>{e.removeEventListener("complete",n),e.removeEventListener("error",s),e.removeEventListener("abort",s)},n=()=>{o(),a()},s=()=>{r(e.error||new DOMException("AbortError","AbortError")),a()};e.addEventListener("complete",n),e.addEventListener("error",s),e.addEventListener("abort",s)});Oe.set(e,t)}var He={get(e,t,o){if(e instanceof IDBTransaction){if(t==="done")return Oe.get(e);if(t==="objectStoreNames")return e.objectStoreNames||_o.get(e);if(t==="store")return o.objectStoreNames[1]?void 0:o.objectStore(o.objectStoreNames[0])}return K(e[t])},set(e,t,o){return e[t]=o,!0},has(e,t){return e instanceof IDBTransaction&&(t==="done"||t==="store")?!0:t in e}};function ke(e){He=e(He)}function dn(e){return e===IDBDatabase.prototype.transaction&&!("objectStoreNames"in IDBTransaction.prototype)?function(t,...o){let r=e.call(Z(this),t,...o);return _o.set(r,t.sort?t.sort():[t]),K(r)}:ln().includes(e)?function(...t){return e.apply(Z(this),t),K(xo.get(this))}:function(...t){return K(e.apply(Z(this),t))}}function fn(e){return typeof e=="function"?dn(e):(e instanceof IDBTransaction&&un(e),we(e,cn())?new Proxy(e,He):e)}function K(e){if(e instanceof IDBRequest)return pn(e);if(Ke.has(e))return Ke.get(e);let t=fn(e);return t!==e&&(Ke.set(e,t),se.set(t,e)),t}var Z=e=>se.get(e);function je(e,t,{blocked:o,upgrade:r,blocking:a,terminated:n}={}){let s=indexedDB.open(e,t),i=K(s);return r&&s.addEventListener("upgradeneeded",c=>{r(K(s.result),c.oldVersion,c.newVersion,K(s.transaction))}),o&&s.addEventListener("blocked",()=>o()),i.then(c=>{n&&c.addEventListener("close",()=>n()),a&&c.addEventListener("versionchange",()=>a())}).catch(()=>{}),i}var mn=["get","getKey","getAll","getAllKeys","count"],hn=["put","add","delete","clear"],Ue=new Map;function vo(e,t){if(!(e instanceof IDBDatabase&&!(t in e)&&typeof t=="string"))return;if(Ue.get(t))return Ue.get(t);let o=t.replace(/FromIndex$/,""),r=t!==o,a=hn.includes(o);if(!(o in(r?IDBIndex:IDBObjectStore).prototype)||!(a||mn.includes(o)))return;let n=async function(s,...i){let c=this.transaction(s,a?"readwrite":"readonly"),p=c.store;return r&&(p=p.index(i.shift())),(await Promise.all([p[o](...i),a&&c.done]))[0]};return Ue.set(t,n),n}ke(e=>({...e,get:(t,o,r)=>vo(t,o)||e.get(t,o,r),has:(t,o)=>!!vo(t,o)||e.has(t,o)}));var bn=["continue","continuePrimaryKey","advance"],yo={},We=new WeakMap,$o=new WeakMap,gn={get(e,t){if(!bn.includes(t))return e[t];let o=yo[t];return o||(o=yo[t]=function(...r){We.set(this,$o.get(this)[t](...r))}),o}};async function*xn(...e){let t=this;if(t instanceof IDBCursor||(t=await t.openCursor(...e)),!t)return;t=t;let o=new Proxy(t,gn);for($o.set(o,t),se.set(o,Z(t));t;)yield o,t=await(We.get(o)||t.continue()),We.delete(o)}function wo(e,t){return t===Symbol.asyncIterator&&we(e,[IDBIndex,IDBObjectStore,IDBCursor])||t==="iterate"&&we(e,[IDBIndex,IDBObjectStore])}ke(e=>({...e,get(t,o,r){return wo(t,o)?xn:e.get(t,o,r)},has(t,o){return wo(t,o)||e.has(t,o)}}));var ko="/api/code/programming-notes/scrapbox-link-database@0.2.0/worker_min.js";var Ce="cache-links",jo="UserScript",Co=7;var qe=new Worker(ko);function _n(){return je(jo,Co,{upgrade(e){[...e.objectStoreNames].forEach(o=>e.deleteObjectStore(o)),e.createObjectStore(Ce,{keyPath:"id"}).createIndex("fetched","fetched")}})}var vn=_n();async function So(e,t){if(e=[...new Set(e)],e.length===0)return{};let o=await yn(e,t),a=(await vn).transaction(Ce,"readwrite"),n=a.objectStore(Ce),s=await Promise.all(e.map(async i=>{let c=await n.get(i);return c?{id:i,project:c.project,pages:c.pages}:void 0}));return await a.done,{data:s.filter(i=>i),hasUpdate:o}}function yn(e,t){return new Promise(o=>{let r=({data:a})=>{qe.removeEventListener("message",r),o(a)};qe.addEventListener("message",r),qe.postMessage({projectIds:e,options:t})})}var Xe=[...Array(navigator.hardwareConcurrency/2)].map(e=>new Worker("/api/code/programming-notes/advanced-link-searcher@0.2.0/worker.js")),Eo="UserScript-SearchEngine",ie="search-list",Po=8;function $n(){return U("","Start initializing"),je(Eo,Po,{upgrade(e){[...e.objectStoreNames].forEach(t=>e.deleteObjectStore(t)),e.createObjectStore(ie,{keyPath:"key"})}}).then(e=>(U("","Finish initializing"),e))}var Lo=$n();async function Io(e,t,{icon:o=!1}={}){async function r(n){U("update",${e} Loadng link data...);let{data:s,hasUpdate:i}=await So(t,n);if(U("update",${e} Loaded.),!i&&(await(await Lo).getAllKeys(ie)).some(_=>_[0]===e&&_[1]===scrapbox.Project.name)){U("update",${e} Search items are up to date.);return}U("update",${e} Creating search items...);let c=o?s.flatMap(({project:h,pages:g})=>g.flatMap(({title:y,hasIcon:P})=>P?[y]:[]).map(y=>({project:h,title:y}))):kn(s.flatMap(({project:h,pages:g})=>[...new Set(g.flatMap(({title:y,links:P})=>[y,...P]))].map(y=>({project:h,title:y}))));U("update",${e} Created ${c.length} search items.);let p=Math.floor(c.length/Xe.length)+1,l=Xe.map((h,g)=>c.slice(g*p,(g+1)*p));U("update",${e} Putting ${c.length} search items on Indexed DB...);let f=(await Lo).transaction(ie,"readwrite"),d=f.objectStore(ie),b=await d.getAllKeys();await Promise.all(l.map((h,g)=>b.find(_=>_[0]===e&&_[1]===scrapbox.Project.name&&_[2]===g)?d.put({list:h,key:[e,scrapbox.Project.name,g]}):d.add({list:h,key:[e,scrapbox.Project.name,g]}))),await f.done,U("update",${e} Finish putting on Indexed DB.)}return{search:q(async(n,s)=>{let i=Xe.map((l,m)=>new Promise(f=>{let d=({data:b})=>{l.removeEventListener("message",d),f(b)};l.addEventListener("message",d),l.postMessage({query:n,key:[e,scrapbox.Project.name,m],DBName:Eo,StoreName:ie,Version:Po,searchOptions:s})})),c=await Promise.all(i),p=s?.limit??30;return{result:wn(c).flatMap(l=>l.flat()).slice(0,p)}}),update:r}}function U(e,...t){console.log(${e}@advanced-link-searcher@0.2.0,...t)}function wn(e){return e[0].map((t,o)=>e.map(r=>r[o]))}function kn(e){let t=e;for(let o=t.length;1<o;o--){let r=Math.floor(Math.random()*o);[t[r],t[o-1]]=[t[o-1],t[r]]}return t}function Mo(e,t,{icon:o,projectIds:r,limit:a}={},n=[]){let[s,i]=v(void 0),[c,p]=v([]),{loading:l}=X(()=>(async()=>{let f=await Io(e,r,{icon:o});await f.update(),i(()=>f.search)})(),{delay:1e3},[e,r,o,...n]),{loading:m}=X(()=>(async()=>{if(!s)return;let{executed:f,result:d}=await s(t,{limit:a});f&&p(d.result)})(),{delay:1e3},[t,s,a,...n]);return{searching:m,loading:l,results:c}}function F(e,t,o,r,a){let{enable:n=!0,filter:s,preventDefault:i=!0,stopPropagation:c=!0,capture:p=!1,keydown:l=!0,keyup:m=!1}=r??{},f=j(()=>n?d=>{if(typeof t=="string"){if(t!==d.key)return}else if(t.key&&t.key!==d.key||t.shiftKey!==void 0&&t.shiftKey!==d.shiftKey||t.ctrlKey!==void 0&&t.ctrlKey!==d.ctrlKey||t.altKey!==void 0&&t.altKey!==d.altKey||t.metaKey!==void 0&&t.metaKey!==d.metaKey)return;!(s?.(d)??!0)||(i&&d.preventDefault(),c&&d.stopPropagation(),o())}:void 0,[t,o,n,s,i,c,a??[]]);E(()=>{if(!(!l||!f))return e.addEventListener("keydown",f,{capture:p}),()=>e.removeEventListener("keydown",f,{capture:p})},[e,f,l,p]),E(()=>{if(!(!m||!f))return e.addEventListener("keyup",f,{capture:p}),()=>e.removeEventListener("keyup",f,{capture:p})},[e,f,m,p])}import{press as Ve}from"../scrapbox-keyboard-emulation-2/script.js";import{scrapboxDOM as jn}from"../scrapbox-dom-accessor/script.js";var To=e=>new Promise(t=>setTimeout(t,e));async function Do(e,{wait:t=1}={}){let o=jn.textInput;o.focus(),o.value=e;let r=document.createEvent("UIEvent");r.initEvent("input",!0,!1),o.dispatchEvent(r),await To(t)}import{getLink as Sn,getHeadCharDOM as En,getIndex as Pn,getText as Bo}from"../scrapbox-access-nodes@0.1.0/script.js";import{position as Ln}from"../scrapbox-cursor-position-6/script.js";import{scrapboxDOM as Mn}from"../scrapbox-dom-accessor/script.js";async function Cn(e){Ve("Home"),Ve("Home"),Ve("End",{shiftKey:!0}),await Do(e)}function In(){let{char:e,line:t}=Ln(),o=Sn(e),r=Pn(En(o)),a=Bo(o);if(t===void 0)throw Error("line is undefined");if(r===void 0)throw Error("start is undefined");if(a===void 0)throw Error("text is undefined");return{line:Bo(t),start:r,text:a}}async function Se(e){Mn.textInput.focus();let{line:t,start:o,text:r}=In(),a=t.slice(0,o),n=t.slice(o+r.length);e=r.startsWith("#")?#${e}:${e},await Cn(${a}${e}${n})}import{scrapboxDOM as W}from"../scrapbox-dom-accessor/script.js";import{position as An}from"../scrapbox-cursor-position-6/script.js";var Je=({position:e,item:t,loading:o,searching:r,query:a,list:n,icon:s})=>u <${be} position="${e}" selected="${t?.key}"
messages="${u<span>${o?"Loading...":r?Searching for "${a}"...:"Ready to search."}</span>}">
${n.map(({key:i,href:c,project:p,onClick:l})=>u`
<a href="${c}"
key="${i}"
tabindex="-1"
onClick="${l}">
${s&&u<img src="/api/pages${c}/icon" />}
${i}
</a>
`)}
<//>
,Tn=
:host {
--dropdown-text-color: var(--page-text-color, #333); --dropdown-bg: var(--page-bg, #fff); --dropdown-border-color: var(--body-bg, rgba(0,0,0,0.15));
--dropdown-shadow-color: rgba(0,0,0,0.175);
--dropdown-item-hover-text-color: var(--page-text-color, #333); --dropdown-item-hover-bg: var(--card-hover-bg, #f5f5f5); }
,Dn=({projectIds:e})=>{let{item:t,list:o,confirm:r,confirmIcon:a,start:n,cancel:s,isOpen:i,isEnableKeyboard:c,loading:p,searching:l,query:m,selectPrev:f,selectNext:d,position:b}=Ye("internal-completion",e,{internal:!0,filter:/^[^\/:]/}),h=W.textInput;return F(h,"Escape",s,{enable:c},[c]),F(h,{key:" ",ctrlKey:!0},n,{stopPropagation:!1}),i&&u<${Je}
position="${b}"
list="${o}"
item="${t}"
query="${m}"
loading="${p}"
searching="${l}" />},Bn=({projectIds:e})=>{let{item:t,list:o,confirm:r,confirmIcon:a,start:n,cancel:s,isOpen:i,isEnableKeyboard:c,loading:p,searching:l,query:m,selectPrev:f,selectNext:d,position:b}=Ye("external-completion",e,{filter:/^\//}),h=W.textInput;return F(h,{key:"Tab",shiftKey:!0},f,{enable:c},[c]),F(h,{key:"Tab",shiftKey:!1},d,{enable:c},[c]),F(h,{key:"Enter",ctrlKey:!0},a,{enable:c},[c]),F(h,"Enter",r,{enable:c},[c]),F(h,"Escape",s,{enable:c},[c]),F(h,{key:" ",ctrlKey:!0},n,{stopPropagation:!1}),i&&u<${Je}
position="${b}"
list="${o}"
item="${t}"
query="${m}"
loading="${p}"
searching="${l}" />},zn=({projectIds:e})=>{let{item:t,list:o,confirm:r,confirmIcon:a,start:n,cancel:s,isOpen:i,isEnableKeyboard:c,loading:p,searching:l,query:m,selectPrev:f,selectNext:d,position:b}=Ye("emoji-completion",e,{icon:!0,filter:/^:/}),h=W.textInput;return F(h,{key:"Tab",shiftKey:!0},f,{enable:c},[c]),F(h,{key:"Tab",shiftKey:!1},d,{enable:c},[c]),F(h,"Enter",a,{enable:c},[c]),F(h,"Escape",s,{enable:c},[c]),F(h,{key:" ",ctrlKey:!0},n,{stopPropagation:!1}),i&&u<${Je}
position="${b}"
list="${o}"
item="${t}"
query="${m}"
loading="${p}"
searching="${l}"
icon="${!0}" />};async function zo(e){let t=document.createElement("div");t.dataset.userscriptName="external-completion",document.getElementById("editor").append(t),t.attachShadow({mode:"open"}),A(u
<style>${Tn}</style>
${(e.internal?.length??0)>0&&u<${Dn} projectIds="${e.internal}" />}
${(e.external?.length??0)>0&&u<${Bn} projectIds="${e.external}" />}
${(e.emoji?.length??0)>0&&u<${zn} projectIds="${e.emoji}" />}
,t.shadowRoot)}function Ye(e,t,{icon:o,filter:r,internal:a}={}){let[n,s]=v(""),[i,c]=v(!1),[p,l]=v(!0),m=w(()=>c(!1),[]),{loading:f,searching:d,results:b}=Mo(e,n,{icon:o,projectIds:t}),h=w(async(N,D)=>{D.stopPropagation(),!(D.metaKey||D.ctrlKey||D.altKey||D.shiftKey)&&(D.preventDefault(),await Se(N),m())},[m]),g=j(()=>b.map(({project:N,title:D})=>({key:/${N}/${D},href:/${N}/${I(D)},project:N,onClick:ce=>h(a?D:o?/${N}/${D}.icon:/${N}/${D},ce)})),[b,n,a]),_=j(()=>p&&i&&g.length>0,[p,i,g.length]),y=j(()=>p&&i&&(g.length>0||f||d),[p,i,g.length,f,d]),{item:P,selectPrev:C,selectNext:S}=ge({list:g,defaultSelected:0}),z=w(async()=>{await Se(P.key),m()},[P,m]),L=w(async()=>{await Se(${P.key}.icon),m()},[P,m]),[x,k]=v({top:0,left:0}),T=w(async()=>{let{char:N}=An(),D=N?.closest?.('.page-link[type="link"]');if(!D){m();return}let ce=D.textContent.slice(1,-1);if(!r.test(ce))return;c(!0),s(ce.slice(1));let Ro=parseInt(W.cursor.style.top),No=parseInt(W.cursor.style.height),Oo=Ro+No,{left:Ko}=W.editor.getBoundingClientRect(),Ho=D.getBoundingClientRect().left;k({top:Oo,left:Math.round(Ho-Ko)})},[r]);Fn(T);let Pe=w(async()=>{l(!0),await T()},[T]);return{item:P,list:g,confirm:z,confirmIcon:L,start:Pe,cancel:m,isOpen:y,isEnableKeyboard:_,query:n,loading:f,searching:d,selectPrev:C,selectNext:S,position:x}}function Fn(e,t){let o=j(()=>q(e,t??100),[e,t]),r=w(a=>{a.key!=="Delete"&&a.key!=="Backspace"&&a.key!=="Enter"||o(a)},[o]);Y(W.textInput,"input",o),Y(W.textInput,"keyup",r),Q([{current:W.textInput}],([a])=>e(a),{attributes:!0,attributeFilter:["style"]})}var Rn=["takker-memex","takker-private","takker","takker-PS"],Ge=[];switch(scrapbox.Project.name){case"hub":case"villagepump":case"verbalizing-community":Ge.push("villagepump","hub","verbalizing-community");break;case"programming-notes":case"customize":case"scrapboxlab":Ge.push("programming-notes","customize","scrapboxlab");break}ho({expired:10,whiteList:[...Rn,...Ge]});var Nn=Object.keys(JSON.parse(localStorage.getItem("projectsLastAccessed"))),Ao=["57b3fe09ec2b330f00f15382","5ebf80b491582c001e38c967","5adc2250d5caf30014910a83"],Ee=["5f2f02f3c4a48d00237e1534","5ed109bc910d920023cd8fd5","5edea5a1df929a001ea458a7","5f47d1468338f2001ed14791","60cac90372951b00222901fe","5c761758dfd2e10017490824"];switch(scrapbox.Project.name){case"hub":case"villagepump":case"verbalizing-community":Ee.push("5c53b72c0f34df0017239d97","5e2455255664e000177a46fc","608eae2195c39d001cdf60ff");break;case"programming-notes":case"customize":case"scrapboxlab":Ee.push("5c26f344f7bb4f0017abe8c5","592e2353c23398001181e38a","5af3b5e49df3fd001499c6af");break}var On=await fetch(/api/projects/${scrapbox.Project.name}`),{id:Fo}=await On.json(),Kn=Nn.filter(e=>!...Ao,...Ee,Fo.includes(e));zo({internal:Ee.filter(e=>e!==Fo),external:Kn,emoji:Ao}); //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiZGVuby1jYWNoZTpodHRwczovL3NjcmFwYm94LmlvL2FwaS9jb2RlL3Byb2dyYW1taW5nLW5vdGVzL3ByZWFjdEAxMC41LjEzL3NjcmlwdC5qcyIsICJkZW5vLWNhY2hlOmh0dHBzOi8vc2NyYXBib3guaW8vYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvaHRtQDMuMC40L3NjcmlwdC5qcyIsICJkZW5vLWNhY2hlOmh0dHBzOi8vc2NyYXBib3guaW8vYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvaHRtQDMuMC40JTJGcHJlYWN0L3NjcmlwdC5qcyIsICJkZW5vLWNhY2hlOmh0dHBzOi8vc2NyYXBib3guaW8vYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvS2FUZVgtQ0ROL3NjcmlwdC5qcyIsICJkZW5vLWNhY2hlOmh0dHBzOi8vc2NyYXBib3guaW8vYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvcHJlYWN0QDEwLjUuMTMvaG9va3MuanMiLCAiZGVuby1jYWNoZTpodHRwczovL3NjcmFwYm94LmlvL2FwaS9jb2RlL3Byb2dyYW1taW5nLW5vdGVzL3VzZS1LYVRlWC9zY3JpcHQuanMiLCAiZGVuby1jYWNoZTpodHRwczovL3NjcmFwYm94LmlvL2FwaS9jb2RlL3Byb2dyYW1taW5nLW5vdGVzL3VzZS1yZXNpemUtb2JzZXJ2ZXJANy4wLjAvc2NyaXB0LmpzIiwgImRlbm8tY2FjaGU6aHR0cHM6Ly9zY3JhcGJveC5pby9hcGkvY29kZS9wcm9ncmFtbWluZy1ub3Rlcy9wb3B1cC1jb250YWluZXJAMC4xLjAvc2NyaXB0LmpzIiwgImRlbm8tY2FjaGU6aHR0cHM6Ly9zY3JhcGJveC5pby9hcGkvY29kZS9wcm9ncmFtbWluZy1ub3Rlcy91c2VNdXRhdGlvbk9ic2VydmVyL3NjcmlwdC5qcyIsICJkZW5vLWNhY2hlOmh0dHBzOi8vc2NyYXBib3guaW8vYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvY3VzdG9tLXRocm90dGxlL3NjcmlwdC5qcyIsICJkZW5vLWNhY2hlOmh0dHBzOi8vc2NyYXBib3guaW8vYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvdXNlLWN1cnNvci1vYnNlcnZlci9zY3JpcHQuanMiLCAiZGVuby1jYWNoZTpodHRwczovL3NjcmFwYm94LmlvL2FwaS9jb2RlL3Byb2dyYW1taW5nLW5vdGVzLyVFNiU5NSVCMCVFNSVCQyU4RiVFMyU4MiU5MnByZXZpZXclRTMlODElOTklRTMlODIlOEJVc2VyU2NyaXB0L3NjcmlwdC5qcyIsICJkZW5vLWNhY2hlOmh0dHBzOi8vc2NyYXBib3guaW8vYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvcHJlYWN0LWN1c3RvbS1lbGVtZW50QDQuMi4xL3NjcmlwdC5qcyIsICJkZW5vLWNhY2hlOmh0dHBzOi8vc2NyYXBib3guaW8vYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvZHJvcGRvd24tY29udGFpbmVyQDAuMS4xL3NjcmlwdC5qcyIsICJkZW5vLWNhY2hlOmh0dHBzOi8vc2NyYXBib3guaW8vYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvdXNlLXNlbGVjdEAwLjEuMC9zY3JpcHQuanMiLCAiZGVuby1jYWNoZTpodHRwczovL3NjcmFwYm94LmlvL2FwaS9jb2RlL3Byb2dyYW1taW5nLW5vdGVzL2FzZWFyY2hAMS4wLjIvc2NyaXB0LmpzIiwgImRlbm8tY2FjaGU6aHR0cHM6Ly9zY3JhcGJveC5pby9hcGkvY29kZS9wcm9ncmFtbWluZy1ub3Rlcy91c2Utc2VhcmNoQDAuMS4wL3NjcmlwdC5qcyIsICJkZW5vLWNhY2hlOmh0dHBzOi8vc2NyYXBib3guaW8vYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvZnV6enktc2VsZWN0LW1lbnVAMC4xLjAvc2NyaXB0LmpzIiwgImRlbm8tY2FjaGU6aHR0cHM6Ly9zY3JhcGJveC5pby9hcGkvY29kZS9wcm9ncmFtbWluZy1ub3Rlcy91c2UtbG9hZGVyL3NjcmlwdC5qcyIsICJkZW5vLWNhY2hlOmh0dHBzOi8vc2NyYXBib3guaW8vYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvbW9kYWwtYmFja2dyb3VuZEAwLjEuMC9zY3JpcHQuanMiLCAiZGVuby1jYWNoZTpodHRwczovL3NjcmFwYm94LmlvL2FwaS9jb2RlL3Byb2dyYW1taW5nLW5vdGVzL3NjcmFwYm94LWluY3JlbWVudGFsLWZ1bGx0ZXh0LXNlYXJjaC9lcnJvci5qcyIsICJkZW5vLWNhY2hlOmh0dHBzOi8vc2NyYXBib3guaW8vYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvc2NyYXBib3gtdGl0bGVMYy9zY3JpcHQuanMiLCAiZGVuby1jYWNoZTpodHRwczovL3NjcmFwYm94LmlvL2FwaS9jb2RlL3Byb2dyYW1taW5nLW5vdGVzL3NjcmFwYm94LWluY3JlbWVudGFsLWZ1bGx0ZXh0LXNlYXJjaC9zY3JpcHQuanMiLCAiZGVuby1jYWNoZTpodHRwczovL3NjcmFwYm94LmlvL2FwaS9jb2RlL3Byb2dyYW1taW5nLW5vdGVzL3NjcmFwYm94JUUzJTgxJUFFcHJvamVjdCVFNiU4MyU4NSVFNSVBMCVCMSVFMyU4MiU5MiVFNCVCOCU4MCVFNiU4QiVBQyVFMyU4MSU5NyVFMyU4MSVBNiVFNSU4RiU5NiVFNSVCRSU5NyVFMyU4MSU5OSVFMyU4MiU4QlVzZXJTY3JpcHQvc2NyaXB0LmpzIiwgImRlbm8tY2FjaGU6aHR0cHM6Ly9zY3JhcGJveC5pby9hcGkvY29kZS9wcm9ncmFtbWluZy1ub3Rlcy9zY3JhcGJveC1pbmNyZW1lbnRhbC1mdWxsdGV4dC1zZWFyY2gvc2FtcGxlLmpzIiwgImRlbm8tY2FjaGU6aHR0cHM6Ly9zY3JhcGJveC5pby9hcGkvY29kZS9wcm9ncmFtbWluZy1ub3Rlcy9zY3JhcGJveC1zbmFwc2hvdEAwLjEuMC9zY3JpcHQuanMiLCAiZGVuby1jYWNoZTpodHRwczovL3NjcmFwYm94LmlvL2FwaS9jb2RlL3Byb2dyYW1taW5nLW5vdGVzL3NjcmFwYm94LWhpc3Rvcnktc2xpZGVyQDAuMi4xL3NjcmlwdC5qcyIsICJkZW5vLWNhY2hlOmh0dHBzOi8vc2NyYXBib3guaW8vYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvdGV4dC1idWJibGUtY29tcG9uZW50QDAuMi4wJTJGcGFyc2VyL3NjcmlwdC5qcyIsICJkZW5vLWNhY2hlOmh0dHBzOi8vc2NyYXBib3guaW8vYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvcmVhY3Qtd2Mvc2NyaXB0LmpzIiwgImRlbm8tY2FjaGU6aHR0cHM6Ly9zY3JhcGJveC5pby9hcGkvY29kZS9wcm9ncmFtbWluZy1ub3Rlcy9zdGF0dXMtYmFyQDAuMS4wL3NjcmlwdC5qcyIsICJkZW5vLWNhY2hlOmh0dHBzOi8vc2NyYXBib3guaW8vYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvU2NyYXBCdWJibGVAMC4yLjAlMkZUZXh0QnViYmxlL3NjcmlwdC5qcyIsICJkZW5vLWNhY2hlOmh0dHBzOi8vc2NyYXBib3guaW8vYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvU2NyYXBCdWJibGVAMC4yLjAlMkZDYXJkQnViYmxlL3NjcmlwdC5qcyIsICJkZW5vLWNhY2hlOmh0dHBzOi8vc2NyYXBib3guaW8vYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvY2FyZC1idWJibGUtY29tcG9uZW50QDAuMS4wL3NjcmlwdC5qcyIsICJkZW5vLWNhY2hlOmh0dHBzOi8vc2NyYXBib3guaW8vYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvU2NyYXBCdWJibGVAMC4yLjAlMkZ1c2UtY2FyZHMvc2NyaXB0LmpzIiwgImRlbm8tY2FjaGU6aHR0cHM6Ly9zY3JhcGJveC5pby9hcGkvY29kZS9wcm9ncmFtbWluZy1ub3Rlcy91c2UtZXZlbnQtbGlzdGVuZXIvc2NyaXB0LmpzIiwgImRlbm8tY2FjaGU6aHR0cHM6Ly9zY3JhcGJveC5pby9hcGkvY29kZS9wcm9ncmFtbWluZy1ub3Rlcy91c2UtcHJvamVjdC10aGVtZS9zY3JpcHQuanMiLCAiZGVuby1jYWNoZTpodHRwczovL3NjcmFwYm94LmlvL2FwaS9jb2RlL3Byb2dyYW1taW5nLW5vdGVzL1NjcmFwQnViYmxlQDAuMi4wL3NjcmlwdC5qcyIsICJkZW5vLWNhY2hlOmh0dHBzOi8vc2NyYXBib3guaW8vYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvaWRiL3dyYXAtaWRiLXZhbHVlLmpzIiwgImRlbm8tY2FjaGU6aHR0cHM6Ly9zY3JhcGJveC5pby9hcGkvY29kZS9wcm9ncmFtbWluZy1ub3Rlcy9pZGIvaW5kZXguanMiLCAiZGVuby1jYWNoZTpodHRwczovL3NjcmFwYm94LmlvL2FwaS9jb2RlL3Byb2dyYW1taW5nLW5vdGVzL2lkYi9hc3luYy1pdGVyYXRvcnMuanMiLCAiZGVuby1jYWNoZTpodHRwczovL3NjcmFwYm94LmlvL2FwaS9jb2RlL3Byb2dyYW1taW5nLW5vdGVzL3NjcmFwYm94LWxpbmstZGF0YWJhc2VAMC4yLjAvd29ya2VyU3JjLmpzIiwgImRlbm8tY2FjaGU6aHR0cHM6Ly9zY3JhcGJveC5pby9hcGkvY29kZS9wcm9ncmFtbWluZy1ub3Rlcy9zY3JhcGJveC1saW5rLWRhdGFiYXNlQDAuMi4wL3NldHRpbmdzLmpzIiwgImRlbm8tY2FjaGU6aHR0cHM6Ly9zY3JhcGJveC5pby9hcGkvY29kZS9wcm9ncmFtbWluZy1ub3Rlcy9zY3JhcGJveC1saW5rLWRhdGFiYXNlQDAuMi4wL3NjcmlwdC5qcyIsICJkZW5vLWNhY2hlOmh0dHBzOi8vc2NyYXBib3guaW8vYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvYWR2YW5jZWQtbGluay1zZWFyY2hlckAwLjIuMC9zY3JpcHQuanMiLCAiZGVuby1jYWNoZTpodHRwczovL3NjcmFwYm94LmlvL2FwaS9jb2RlL3Byb2dyYW1taW5nLW5vdGVzL3VzZS1jcm9zcy1zZWFyY2hAMC4xLjAvc2NyaXB0LmpzIiwgImRlbm8tY2FjaGU6aHR0cHM6Ly9zY3JhcGJveC5pby9hcGkvY29kZS9wcm9ncmFtbWluZy1ub3Rlcy91c2Uta2V5Ym9hcmRAMC4xLjAvc2NyaXB0LmpzIiwgImRlbm8tY2FjaGU6aHR0cHM6Ly9zY3JhcGJveC5pby9hcGkvY29kZS9wcm9ncmFtbWluZy1ub3Rlcy9leHRlcm5hbC1jb21wbGV0aW9uQDAuNC4wJTJGcmVwbGFjZUxpbmsvc2NyaXB0LmpzIiwgImRlbm8tY2FjaGU6aHR0cHM6Ly9zY3JhcGJveC5pby9hcGkvY29kZS9wcm9ncmFtbWluZy1ub3Rlcy9zY3JhcGJveC1pbnNlcnQtdGV4dC0yL3NjcmlwdC5qcyIsICJkZW5vLWNhY2hlOmh0dHBzOi8vc2NyYXBib3guaW8vYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvcHJvZ3JhbSVFMyU4MSVBN3NsZWVwJUUzJTgyJTkyJUU1JUFFJTlGJUU3JThGJUJFJUUzJTgxJTk5JUUzJTgyJThCJUU2JTk2JUI5JUU2JUIzJTk1L3NjcmlwdC5qcyIsICJkZW5vLWNhY2hlOmh0dHBzOi8vc2NyYXBib3guaW8vYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvZXh0ZXJuYWwtY29tcGxldGlvbkAwLjQuMC9zY3JpcHQuanMiLCAiZGVuby1jYWNoZTpodHRwczovL3NjcmFwYm94LmlvL2FwaS9jb2RlL3Rha2tlci9mcm9tLXByb2dyYW1taW5nLW5vdGVzL2luZGV4LmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgbixsLHUsaSx0LG8scj17fSxmPVtdLGU9L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaTtmdW5jdGlvbiBjKG4sbCl7Zm9yKHZhciB1IGluIGwpblt1XT1sW3VdO3JldHVybiBufWZ1bmN0aW9uIHMobil7dmFyIGw9bi5wYXJlbnROb2RlO2wmJmwucmVtb3ZlQ2hpbGQobil9ZnVuY3Rpb24gYShuLGwsdSl7dmFyIGksdCxvLHI9YXJndW1lbnRzLGY9e307Zm9yKG8gaW4gbClcImtleVwiPT1vP2k9bFtvXTpcInJlZlwiPT1vP3Q9bFtvXTpmW29dPWxbb107aWYoYXJndW1lbnRzLmxlbmd0aD4zKWZvcih1PVt1XSxvPTM7bzxhcmd1bWVudHMubGVuZ3RoO28rKyl1LnB1c2gocltvXSk7aWYobnVsbCE9dSYmKGYuY2hpbGRyZW49dSksXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmbnVsbCE9bi5kZWZhdWx0UHJvcHMpZm9yKG8gaW4gbi5kZWZhdWx0UHJvcHMpdm9pZCAwPT09ZltvXSYmKGZbb109bi5kZWZhdWx0UHJvcHNbb10pO3JldHVybiB2KG4sZixpLHQsbnVsbCl9ZnVuY3Rpb24gdihsLHUsaSx0LG8pe3ZhciByPXt0eXBlOmwscHJvcHM6dSxrZXk6aSxyZWY6dCxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fZDp2b2lkIDAsX19jOm51bGwsX19oOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjpudWxsPT1vPysrbi5fX3Y6b307cmV0dXJuIG51bGwhPW4udm5vZGUmJm4udm5vZGUocikscn1mdW5jdGlvbiBoKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19ZnVuY3Rpb24geShuKXtyZXR1cm4gbi5jaGlsZHJlbn1mdW5jdGlvbiBwKG4sbCl7dGhpcy5wcm9wcz1uLHRoaXMuY29udGV4dD1sfWZ1bmN0aW9uIGQobixsKXtpZihudWxsPT1sKXJldHVybiBuLl9fP2Qobi5fXyxuLl9fLl9fay5pbmRleE9mKG4pKzEpOm51bGw7Zm9yKHZhciB1O2w8bi5fX2subGVuZ3RoO2wrKylpZihudWxsIT0odT1uLl9fa1tsXSkmJm51bGwhPXUuX19lKXJldHVybiB1Ll9fZTtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnR5cGU/ZChuKTpudWxsfWZ1bmN0aW9uIF8obil7dmFyIGwsdTtpZihudWxsIT0obj1uLl9fKSYmbnVsbCE9bi5fX2Mpe2ZvcihuLl9fZT1uLl9fYy5iYXNlPW51bGwsbD0wO2w8bi5fX2subGVuZ3RoO2wrKylpZihudWxsIT0odT1uLl9fa1tsXSkmJm51bGwhPXUuX19lKXtuLl9fZT1uLl9fYy5iYXNlPXUuX19lO2JyZWFrfXJldHVybiBfKG4pfX1mdW5jdGlvbiBrKGwpeyghbC5fX2QmJihsLl9fZD0hMCkmJnUucHVzaChsKSYmIWIuX19yKyt8fHQhPT1uLmRlYm91bmNlUmVuZGVyaW5nKSYmKCh0PW4uZGVib3VuY2VSZW5kZXJpbmcpfHxpKShiKX1mdW5jdGlvbiBiKCl7Zm9yKHZhciBuO2IuX19yPXUubGVuZ3RoOyluPXUuc29ydChmdW5jdGlvbihuLGwpe3JldHVybiBuLl9fdi5fX2ItbC5fX3YuX19ifSksdT1bXSxuLnNvbWUoZnVuY3Rpb24obil7dmFyIGwsdSxpLHQsbyxyO24uX19kJiYobz0odD0obD1uKS5fX3YpLl9fZSwocj1sLl9fUCkmJih1PVtdLChpPWMoe30sdCkpLl9fdj10Ll9fdisxLEkocix0LGksbC5fX24sdm9pZCAwIT09ci5vd25lclNWR0VsZW1lbnQsbnVsbCE9dC5fX2g/W29dOm51bGwsdSxudWxsPT1vP2QodCk6byx0Ll9faCksVCh1LHQpLHQuX19lIT1vJiZfKHQpKSl9KX1mdW5jdGlvbiBtKG4sbCx1LGksdCxvLGUsYyxzLGEpe3ZhciBoLHAsXyxrLGIsbSx3LEE9aSYmaS5fX2t8fGYsUD1BLmxlbmd0aDtmb3IodS5fX2s9W10saD0wO2g8bC5sZW5ndGg7aCsrKWlmKG51bGwhPShrPXUuX19rW2hdPW51bGw9PShrPWxbaF0pfHxcImJvb2xlYW5cIj09dHlwZW9mIGs/bnVsbDpcInN0cmluZ1wiPT10eXBlb2Yga3x8XCJudW1iZXJcIj09dHlwZW9mIGt8fFwiYmlnaW50XCI9PXR5cGVvZiBrP3YobnVsbCxrLG51bGwsbnVsbCxrKTpBcnJheS5pc0FycmF5KGspP3YoeSx7Y2hpbGRyZW46a30sbnVsbCxudWxsLG51bGwpOmsuX19iPjA/dihrLnR5cGUsay5wcm9wcyxrLmtleSxudWxsLGsuX192KTprKSl7aWYoay5fXz11LGsuX19iPXUuX19iKzEsbnVsbD09PShfPUFbaF0pfHxfJiZrLmtleT09Xy5rZXkmJmsudHlwZT09PV8udHlwZSlBW2hdPXZvaWQgMDtlbHNlIGZvcihwPTA7cDxQO3ArKyl7aWYoKF89QVtwXSkmJmsua2V5PT1fLmtleSYmay50eXBlPT09Xy50eXBlKXtBW3BdPXZvaWQgMDticmVha31fPW51bGx9SShuLGssXz1ffHxyLHQsbyxlLGMscyxhKSxiPWsuX19lLChwPWsucmVmKSYmXy5yZWYhPXAmJih3fHwodz1bXSksXy5yZWYmJncucHVzaChfLnJlZixudWxsLGspLHcucHVzaChwLGsuX19jfHxiLGspKSxudWxsIT1iPyhudWxsPT1tJiYobT1iKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBrLnR5cGUmJm51bGwhPWsuX19rJiZrLl9faz09PV8uX19rP2suX19kPXM9ZyhrLHMsbik6cz14KG4sayxfLEEsYixzKSxhfHxcIm9wdGlvblwiIT09dS50eXBlP1wiZnVuY3Rpb25cIj09dHlwZW9mIHUudHlwZSYmKHUuX19kPXMpOm4udmFsdWU9XCJcIik6cyYmXy5fX2U9PXMmJnMucGFyZW50Tm9kZSE9biYmKHM9ZChfKSl9Zm9yKHUuX19lPW0saD1QO2gtLTspbnVsbCE9QVtoXSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHUudHlwZSYmbnVsbCE9QVtoXS5fX2UmJkFbaF0uX19lPT11Ll9fZCYmKHUuX19kPWQoaSxoKzEpKSxMKEFbaF0sQVtoXSkpO2lmKHcpZm9yKGg9MDtoPHcubGVuZ3RoO2grKyl6KHdbaF0sd1srK2hdLHdbKytoXSl9ZnVuY3Rpb24gZyhuLGwsdSl7dmFyIGksdDtmb3IoaT0wO2k8bi5fX2subGVuZ3RoO2krKykodD1uLl9fa1tpXSkmJih0Ll9fPW4sbD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnR5cGU/Zyh0LGwsdSk6eCh1LHQsdCxuLl9fayx0Ll9fZSxsKSk7cmV0dXJuIGx9ZnVuY3Rpb24gdyhuLGwpe3JldHVybiBsPWx8fFtdLG51bGw9PW58fFwiYm9vbGVhblwiPT10eXBlb2Ygbnx8KEFycmF5LmlzQXJyYXkobik/bi5zb21lKGZ1bmN0aW9uKG4pe3cobixsKX0pOmwucHVzaChuKSksbH1mdW5jdGlvbiB4KG4sbCx1LGksdCxvKXt2YXIgcixmLGU7aWYodm9pZCAwIT09bC5fX2Qpcj1sLl9fZCxsLl9fZD12b2lkIDA7ZWxzZSBpZihudWxsPT11fHx0IT1vfHxudWxsPT10LnBhcmVudE5vZGUpbjppZihudWxsPT1vfHxvLnBhcmVudE5vZGUhPT1uKW4uYXBwZW5kQ2hpbGQodCkscj1udWxsO2Vsc2V7Zm9yKGY9byxlPTA7KGY9Zi5uZXh0U2libGluZykmJmU8aS5sZW5ndGg7ZSs9MilpZihmPT10KWJyZWFrIG47bi5pbnNlcnRCZWZvcmUodCxvKSxyPW99cmV0dXJuIHZvaWQgMCE9PXI/cjp0Lm5leHRTaWJsaW5nfWZ1bmN0aW9uIEEobixsLHUsaSx0KXt2YXIgbztmb3IobyBpbiB1KVwiY2hpbGRyZW5cIj09PW98fFwia2V5XCI9PT1vfHxvIGluIGx8fEMobixvLG51bGwsdVtvXSxpKTtmb3IobyBpbiBsKXQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGxbb118fFwiY2hpbGRyZW5cIj09PW98fFwia2V5XCI9PT1vfHxcInZhbHVlXCI9PT1vfHxcImNoZWNrZWRcIj09PW98fHVbb109PT1sW29dfHxDKG4sbyxsW29dLHVbb10saSl9ZnVuY3Rpb24gUChuLGwsdSl7XCItXCI9PT1sWzBdP24uc2V0UHJvcGVydHkobCx1KTpuW2xdPW51bGw9PXU/XCJcIjpcIm51bWJlclwiIT10eXBlb2YgdXx8ZS50ZXN0KGwpP3U6dStcInB4XCJ9ZnVuY3Rpb24gQyhuLGwsdSxpLHQpe3ZhciBvO246aWYoXCJzdHlsZVwiPT09bClpZihcInN0cmluZ1wiPT10eXBlb2YgdSluLnN0eWxlLmNzc1RleHQ9dTtlbHNle2lmKFwic3RyaW5nXCI9PXR5cGVvZiBpJiYobi5zdHlsZS5jc3NUZXh0PWk9XCJcIiksaSlmb3IobCBpbiBpKXUmJmwgaW4gdXx8UChuLnN0eWxlLGwsXCJcIik7aWYodSlmb3IobCBpbiB1KWkmJnVbbF09PT1pW2xdfHxQKG4uc3R5bGUsbCx1W2xdKX1lbHNlIGlmKFwib1wiPT09bFswXSYmXCJuXCI9PT1sWzFdKW89bCE9PShsPWwucmVwbGFjZSgvQ2FwdHVyZSQvLFwiXCIpKSxsPWwudG9Mb3dlckNhc2UoKWluIG4/bC50b0xvd2VyQ2FzZSgpLnNsaWNlKDIpOmwuc2xpY2UoMiksbi5sfHwobi5sPXt9KSxuLmxbbCtvXT11LHU/aXx8bi5hZGRFdmVudExpc3RlbmVyKGwsbz9IOiQsbyk6bi5yZW1vdmVFdmVudExpc3RlbmVyKGwsbz9IOiQsbyk7ZWxzZSBpZihcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCIhPT1sKXtpZih0KWw9bC5yZXBsYWNlKC94bGlua1tIOmhdLyxcImhcIikucmVwbGFjZSgvc05hbWUkLyxcInNcIik7ZWxzZSBpZihcImhyZWZcIiE9PWwmJlwibGlzdFwiIT09bCYmXCJmb3JtXCIhPT1sJiZcInRhYkluZGV4XCIhPT1sJiZcImRvd25sb2FkXCIhPT1sJiZsIGluIG4pdHJ5e25bbF09bnVsbD09dT9cIlwiOnU7YnJlYWsgbn1jYXRjaChuKXt9XCJmdW5jdGlvblwiPT10eXBlb2YgdXx8KG51bGwhPXUmJighMSE9PXV8fFwiYVwiPT09bFswXSYmXCJyXCI9PT1sWzFdKT9uLnNldEF0dHJpYnV0ZShsLHUpOm4ucmVtb3ZlQXR0cmlidXRlKGwpKX19ZnVuY3Rpb24gJChsKXt0aGlzLmxbbC50eXBlKyExXShuLmV2ZW50P24uZXZlbnQobCk6bCl9ZnVuY3Rpb24gSChsKXt0aGlzLmxbbC50eXBlKyEwXShuLmV2ZW50P24uZXZlbnQobCk6bCl9ZnVuY3Rpb24gSShsLHUsaSx0LG8scixmLGUscyl7dmFyIGEsdixoLGQsXyxrLGIsZyx3LHgsQSxQPXUudHlwZTtpZih2b2lkIDAhPT11LmNvbnN0cnVjdG9yKXJldHVybiBudWxsO251bGwhPWkuX19oJiYocz1pLl9faCxlPXUuX19lPWkuX19lLHUuX19oPW51bGwscj1bZV0pLChhPW4uX19iKSYmYSh1KTt0cnl7bjppZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBQKXtpZihnPXUucHJvcHMsdz0oYT1QLmNvbnRleHRUeXBlKSYmdFthLl9fY10seD1hP3c/dy5wcm9wcy52YWx1ZTphLl9fOnQsaS5fX2M/Yj0odj11Ll9fYz1pLl9fYykuX189di5fX0U6KFwicHJvdG90eXBlXCJpbiBQJiZQLnByb3RvdHlwZS5yZW5kZXI/dS5fX2M9dj1uZXcgUChnLHgpOih1Ll9fYz12PW5ldyBwKGcseCksdi5jb25zdHJ1Y3Rvcj1QLHYucmVuZGVyPU0pLHcmJncuc3ViKHYpLHYucHJvcHM9Zyx2LnN0YXRlfHwodi5zdGF0ZT17fSksdi5jb250ZXh0PXgsdi5fX249dCxoPXYuX19kPSEwLHYuX19oPVtdKSxudWxsPT12Ll9fcyYmKHYuX19zPXYuc3RhdGUpLG51bGwhPVAuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzJiYodi5fX3M9PXYuc3RhdGUmJih2Ll9fcz1jKHt9LHYuX19zKSksYyh2Ll9fcyxQLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhnLHYuX19zKSkpLGQ9di5wcm9wcyxfPXYuc3RhdGUsaCludWxsPT1QLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyYmbnVsbCE9di5jb21wb25lbnRXaWxsTW91bnQmJnYuY29tcG9uZW50V2lsbE1vdW50KCksbnVsbCE9di5jb21wb25lbnREaWRNb3VudCYmdi5fX2gucHVzaCh2LmNvbXBvbmVudERpZE1vdW50KTtlbHNle2lmKG51bGw9PVAuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzJiZnIT09ZCYmbnVsbCE9di5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZ2LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoZyx4KSwhdi5fX2UmJm51bGwhPXYuc2hvdWxkQ29tcG9uZW50VXBkYXRlJiYhMT09PXYuc2hvdWxkQ29tcG9uZW50VXBkYXRlKGcsdi5fX3MseCl8fHUuX192PT09aS5fX3Ype3YucHJvcHM9Zyx2LnN0YXRlPXYuX19zLHUuX192IT09aS5fX3YmJih2Ll9fZD0hMSksdi5fX3Y9dSx1Ll9fZT1pLl9fZSx1Ll9faz1pLl9fayx1Ll9fay5mb3JFYWNoKGZ1bmN0aW9uKG4pe24mJihuLl9fPXUpfSksdi5fX2gubGVuZ3RoJiZmLnB1c2godik7YnJlYWsgbn1udWxsIT12LmNvbXBvbmVudFdpbGxVcGRhdGUmJnYuY29tcG9uZW50V2lsbFVwZGF0ZShnLHYuX19zLHgpLG51bGwhPXYuY29tcG9uZW50RGlkVXBkYXRlJiZ2Ll9faC5wdXNoKGZ1bmN0aW9uKCl7di5jb21wb25lbnREaWRVcGRhdGUoZCxfLGspfSl9di5jb250ZXh0PXgsdi5wcm9wcz1nLHYuc3RhdGU9di5fX3MsKGE9bi5fX3IpJiZhKHUpLHYuX19kPSExLHYuX192PXUsdi5fX1A9bCxhPXYucmVuZGVyKHYucHJvcHMsdi5zdGF0ZSx2LmNvbnRleHQpLHYuc3RhdGU9di5fX3MsbnVsbCE9di5nZXRDaGlsZENvbnRleHQmJih0PWMoYyh7fSx0KSx2LmdldENoaWxkQ29udGV4dCgpKSksaHx8bnVsbD09di5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8KGs9di5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShkLF8pKSxBPW51bGwhPWEmJmEudHlwZT09PXkmJm51bGw9PWEua2V5P2EucHJvcHMuY2hpbGRyZW46YSxtKGwsQXJyYXkuaXNBcnJheShBKT9BOltBXSx1LGksdCxvLHIsZixlLHMpLHYuYmFzZT11Ll9fZSx1Ll9faD1udWxsLHYuX19oLmxlbmd0aCYmZi5wdXNoKHYpLGImJih2Ll9fRT12Ll9fPW51bGwpLHYuX19lPSExfWVsc2UgbnVsbD09ciYmdS5fX3Y9PT1pLl9fdj8odS5fX2s9aS5fX2ssdS5fX2U9aS5fX2UpOnUuX19lPWooaS5fX2UsdSxpLHQsbyxyLGYscyk7KGE9bi5kaWZmZWQpJiZhKHUpfWNhdGNoKGwpe3UuX192PW51bGwsKHN8fG51bGwhPXIpJiYodS5fX2U9ZSx1Ll9faD0hIXMscltyLmluZGV4T2YoZSldPW51bGwpLG4uX19lKGwsdSxpKX19ZnVuY3Rpb24gVChsLHUpe24uX19jJiZuLl9fYyh1LGwpLGwuc29tZShmdW5jdGlvbih1KXt0cnl7bD11Ll9faCx1Ll9faD1bXSxsLnNvbWUoZnVuY3Rpb24obil7bi5jYWxsKHUpfSl9Y2F0Y2gobCl7bi5fX2UobCx1Ll9fdil9fSl9ZnVuY3Rpb24gaihuLGwsdSxpLHQsbyxlLGMpe3ZhciBhLHYsaCx5LHA9dS5wcm9wcyxkPWwucHJvcHMsXz1sLnR5cGUsaz0wO2lmKFwic3ZnXCI9PT1fJiYodD0hMCksbnVsbCE9bylmb3IoO2s8by5sZW5ndGg7aysrKWlmKChhPW9ba10pJiYoYT09PW58fChfP2EubG9jYWxOYW1lPT1fOjM9PWEubm9kZVR5cGUpKSl7bj1hLG9ba109bnVsbDticmVha31pZihudWxsPT1uKXtpZihudWxsPT09XylyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZCk7bj10P2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXyk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChfLGQuaXMmJmQpLG89bnVsbCxjPSExfWlmKG51bGw9PT1fKXA9PT1kfHxjJiZuLmRhdGE9PT1kfHwobi5kYXRhPWQpO2Vsc2V7aWYobz1vJiZmLnNsaWNlLmNhbGwobi5jaGlsZE5vZGVzKSx2PShwPXUucHJvcHN8fHIpLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLGg9ZC5kYW5nZXJvdXNseVNldElubmVySFRNTCwhYyl7aWYobnVsbCE9bylmb3IocD17fSx5PTA7eTxuLmF0dHJpYnV0ZXMubGVuZ3RoO3krKylwW24uYXR0cmlidXRlc1t5XS5uYW1lXT1uLmF0dHJpYnV0ZXNbeV0udmFsdWU7KGh8fHYpJiYoaCYmKHYmJmguX19odG1sPT12Ll9faHRtbHx8aC5fX2h0bWw9PT1uLmlubmVySFRNTCl8fChuLmlubmVySFRNTD1oJiZoLl9faHRtbHx8XCJcIikpfWlmKEEobixkLHAsdCxjKSxoKWwuX19rPVtdO2Vsc2UgaWYoaz1sLnByb3BzLmNoaWxkcmVuLG0obixBcnJheS5pc0FycmF5KGspP2s6W2tdLGwsdSxpLHQmJlwiZm9yZWlnbk9iamVjdFwiIT09XyxvLGUsbi5maXJzdENoaWxkLGMpLG51bGwhPW8pZm9yKGs9by5sZW5ndGg7ay0tOyludWxsIT1vW2tdJiZzKG9ba10pO2N8fChcInZhbHVlXCJpbiBkJiZ2b2lkIDAhPT0oaz1kLnZhbHVlKSYmKGshPT1uLnZhbHVlfHxcInByb2dyZXNzXCI9PT1fJiYhaykmJkMobixcInZhbHVlXCIsayxwLnZhbHVlLCExKSxcImNoZWNrZWRcImluIGQmJnZvaWQgMCE9PShrPWQuY2hlY2tlZCkmJmshPT1uLmNoZWNrZWQmJkMobixcImNoZWNrZWRcIixrLHAuY2hlY2tlZCwhMSkpfXJldHVybiBufWZ1bmN0aW9uIHoobCx1LGkpe3RyeXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBsP2wodSk6bC5jdXJyZW50PXV9Y2F0Y2gobCl7bi5fX2UobCxpKX19ZnVuY3Rpb24gTChsLHUsaSl7dmFyIHQsbyxyO2lmKG4udW5tb3VudCYmbi51bm1vdW50KGwpLCh0PWwucmVmKSYmKHQuY3VycmVudCYmdC5jdXJyZW50IT09bC5fX2V8fHoodCxudWxsLHUpKSxpfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBsLnR5cGV8fChpPW51bGwhPShvPWwuX19lKSksbC5fX2U9bC5fX2Q9dm9pZCAwLG51bGwhPSh0PWwuX19jKSl7aWYodC5jb21wb25lbnRXaWxsVW5tb3VudCl0cnl7dC5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKGwpe24uX19lKGwsdSl9dC5iYXNlPXQuX19QPW51bGx9aWYodD1sLl9faylmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXRbcl0mJkwodFtyXSx1LGkpO251bGwhPW8mJnMobyl9ZnVuY3Rpb24gTShuLGwsdSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3Iobix1KX1mdW5jdGlvbiBOKGwsdSxpKXt2YXIgdCxvLGU7bi5fXyYmbi5fXyhsLHUpLG89KHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgaSk/bnVsbDppJiZpLl9fa3x8dS5fX2ssZT1bXSxJKHUsbD0oIXQmJml8fHUpLl9faz1hKHksbnVsbCxbbF0pLG98fHIscix2b2lkIDAhPT11Lm93bmVyU1ZHRWxlbWVudCwhdCYmaT9baV06bz9udWxsOnUuZmlyc3RDaGlsZD9mLnNsaWNlLmNhbGwodS5jaGlsZE5vZGVzKTpudWxsLGUsIXQmJmk/aTpvP28uX19lOnUuZmlyc3RDaGlsZCx0KSxUKGUsbCl9ZnVuY3Rpb24gTyhuLGwpe04obixsLE8pfWZ1bmN0aW9uIFMobixsLHUpe3ZhciBpLHQsbyxyPWFyZ3VtZW50cyxmPWMoe30sbi5wcm9wcyk7Zm9yKG8gaW4gbClcImtleVwiPT1vP2k9bFtvXTpcInJlZlwiPT1vP3Q9bFtvXTpmW29dPWxbb107aWYoYXJndW1lbnRzLmxlbmd0aD4zKWZvcih1PVt1XSxvPTM7bzxhcmd1bWVudHMubGVuZ3RoO28rKyl1LnB1c2gocltvXSk7cmV0dXJuIG51bGwhPXUmJihmLmNoaWxkcmVuPXUpLHYobi50eXBlLGYsaXx8bi5rZXksdHx8bi5yZWYsbnVsbCl9ZnVuY3Rpb24gcShuLGwpe3ZhciB1PXtfX2M6bD1cIl9fY0NcIitvKyssX186bixDb25zdW1lcjpmdW5jdGlvbihuLGwpe3JldHVybiBuLmNoaWxkcmVuKGwpfSxQcm92aWRlcjpmdW5jdGlvbihuKXt2YXIgdSxpO3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dHx8KHU9W10sKGk9e30pW2xdPXRoaXMsdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gaX0sdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24obil7dGhpcy5wcm9wcy52YWx1ZSE9PW4udmFsdWUmJnUuc29tZShrKX0sdGhpcy5zdWI9ZnVuY3Rpb24obil7dS5wdXNoKG4pO3ZhciBsPW4uY29tcG9uZW50V2lsbFVubW91bnQ7bi5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3Uuc3BsaWNlKHUuaW5kZXhPZihuKSwxKSxsJiZsLmNhbGwobil9fSksbi5jaGlsZHJlbn19O3JldHVybiB1LlByb3ZpZGVyLl9fPXUuQ29uc3VtZXIuY29udGV4dFR5cGU9dX1uPXtfX2U6ZnVuY3Rpb24obixsKXtmb3IodmFyIHUsaSx0O2w9bC5fXzspaWYoKHU9bC5fX2MpJiYhdS5fXyl0cnl7aWYoKGk9dS5jb25zdHJ1Y3RvcikmJm51bGwhPWkuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yJiYodS5zZXRTdGF0ZShpLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihuKSksdD11Ll9fZCksbnVsbCE9dS5jb21wb25lbnREaWRDYXRjaCYmKHUuY29tcG9uZW50RGlkQ2F0Y2gobiksdD11Ll9fZCksdClyZXR1cm4gdS5fX0U9dX1jYXRjaChsKXtuPWx9dGhyb3cgbn0sX192OjB9LGw9ZnVuY3Rpb24obil7cmV0dXJuIG51bGwhPW4mJnZvaWQgMD09PW4uY29uc3RydWN0b3J9LHAucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKG4sbCl7dmFyIHU7dT1udWxsIT10aGlzLl9fcyYmdGhpcy5fX3MhPT10aGlzLnN0YXRlP3RoaXMuX19zOnRoaXMuX19zPWMoe30sdGhpcy5zdGF0ZSksXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKG49bihjKHt9LHUpLHRoaXMucHJvcHMpKSxuJiZjKHUsbiksbnVsbCE9biYmdGhpcy5fX3YmJihsJiZ0aGlzLl9faC5wdXNoKGwpLGsodGhpcykpfSxwLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihuKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLG4mJnRoaXMuX19oLnB1c2gobiksayh0aGlzKSl9LHAucHJvdG90eXBlLnJlbmRlcj15LHU9W10saT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm9taXNlP1Byb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSk6c2V0VGltZW91dCxiLl9fcj0wLG89MDtleHBvcnR7TiBhcyByZW5kZXIsTyBhcyBoeWRyYXRlLGEgYXMgY3JlYXRlRWxlbWVudCxhIGFzIGgseSBhcyBGcmFnbWVudCxoIGFzIGNyZWF0ZVJlZixsIGFzIGlzVmFsaWRFbGVtZW50LHAgYXMgQ29tcG9uZW50LFMgYXMgY2xvbmVFbGVtZW50LHEgYXMgY3JlYXRlQ29udGV4dCx3IGFzIHRvQ2hpbGRBcnJheSxuIGFzIG9wdGlvbnN9O1xuIiwgInZhciBuPWZ1bmN0aW9uKHQscyxyLGUpe3ZhciB1O3NbMF09MDtmb3IodmFyIGg9MTtoPHMubGVuZ3RoO2grKyl7dmFyIHA9c1toKytdLGE9c1toXT8oc1swXXw9cD8xOjIscltzW2grK11dKTpzWysraF07Mz09PXA/ZVswXT1hOjQ9PT1wP2VbMV09T2JqZWN0LmFzc2lnbihlWzFdfHx7fSxhKTo1PT09cD8oZVsxXT1lWzFdfHx7fSlbc1srK2hdXT1hOjY9PT1wP2VbMV1bc1srK2hdXSs9YStcIlwiOnA/KHU9dC5hcHBseShhLG4odCxhLHIsW1wiXCIsbnVsbF0pKSxlLnB1c2godSksYVswXT9zWzBdfD0yOihzW2gtMl09MCxzW2hdPXUpKTplLnB1c2goYSl9cmV0dXJuIGV9LHQ9bmV3IE1hcDtleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzKXt2YXIgcj10LmdldCh0aGlzKTtyZXR1cm4gcnx8KHI9bmV3IE1hcCx0LnNldCh0aGlzLHIpKSwocj1uKHRoaXMsci5nZXQocyl8fChyLnNldChzLHI9ZnVuY3Rpb24obil7Zm9yKHZhciB0LHMscj0xLGU9XCJcIix1PVwiXCIsaD1bMF0scD1mdW5jdGlvbihuKXsxPT09ciYmKG58fChlPWUucmVwbGFjZSgvXlxccypcXG5cXHMqfFxccypcXG5cXHMqJC9nLFwiXCIpKSk/aC5wdXNoKDAsbixlKTozPT09ciYmKG58fGUpPyhoLnB1c2goMyxuLGUpLHI9Mik6Mj09PXImJlwiLi4uXCI9PT1lJiZuP2gucHVzaCg0LG4sMCk6Mj09PXImJmUmJiFuP2gucHVzaCg1LDAsITAsZSk6cj49NSYmKChlfHwhbiYmNT09PXIpJiYoaC5wdXNoKHIsMCxlLHMpLHI9NiksbiYmKGgucHVzaChyLG4sMCxzKSxyPTYpKSxlPVwiXCJ9LGE9MDthPG4ubGVuZ3RoO2ErKyl7YSYmKDE9PT1yJiZwKCkscChhKSk7Zm9yKHZhciBsPTA7bDxuW2FdLmxlbmd0aDtsKyspdD1uW2FdW2xdLDE9PT1yP1wiPFwiPT09dD8ocCgpLGg9W2hdLHI9Myk6ZSs9dDo0PT09cj9cIi0tXCI9PT1lJiZcIj5cIj09PXQ/KHI9MSxlPVwiXCIpOmU9dCtlWzBdOnU/dD09PXU/dT1cIlwiOmUrPXQ6J1wiJz09PXR8fFwiJ1wiPT09dD91PXQ6XCI+XCI9PT10PyhwKCkscj0xKTpyJiYoXCI9XCI9PT10PyhyPTUscz1lLGU9XCJcIik6XCIvXCI9PT10JiYocjw1fHxcIj5cIj09PW5bYV1bbCsxXSk/KHAoKSwzPT09ciYmKGg9aFswXSkscj1oLChoPWhbMF0pLnB1c2goMiwwLHIpLHI9MCk6XCIgXCI9PT10fHxcIlxcdFwiPT09dHx8XCJcXG5cIj09PXR8fFwiXFxyXCI9PT10PyhwKCkscj0yKTplKz10KSwzPT09ciYmXCIhLS1cIj09PWUmJihyPTQsaD1oWzBdKX1yZXR1cm4gcCgpLGh9KHMpKSxyKSxhcmd1bWVudHMsW10pKS5sZW5ndGg+MT9yOnJbMF19XG4iLCAiaW1wb3J0IHtofSBmcm9tICcuLi9wcmVhY3RAMTAuNS4xMy9zY3JpcHQuanMnO1xuaW1wb3J0IGh0bSBmcm9tICcuLi9odG1AMy4wLjQvc2NyaXB0LmpzJztcbmV4cG9ydCAqIGZyb20gJy4uL3ByZWFjdEAxMC41LjEzL3NjcmlwdC5qcyc7XG5leHBvcnQgY29uc3QgaHRtbCA9IGh0bS5iaW5kKGgpO1xuIiwgImNvbnN0IHNyYyA9ICdodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9LYVRlWC8wLjEzLjMva2F0ZXgubWluLmpzJztcblxubGV0IGxvYWRlZCA9IGZhbHNlO1xuZXhwb3J0IGNvbnN0IGluc3RhbGwgPSAoKSA9PiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gIC8vIOS6jOmHjeiqreOBv+i+vOOBv+mYsuatolxuICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihgc2NyaXB0W3NyYz1cIiR7c3JjfVwiXWApKSB7XG4gICAgaWYgKCFsb2FkZWQpIHtcbiAgICAgIGF3YWl0IHdhaXQoKTtcbiAgICB9XG4gICAgcmVzb2x2ZSgpO1xuICAgIHJldHVybjtcbiAgfVxuICBcbiAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgc2NyaXB0LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgd2FpdCgpO1xuICAgIGxvYWRlZCA9IHRydWU7XG4gICAgcmVzb2x2ZSgpO1xuICB9KTtcbiAgc2NyaXB0LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZSA9PiByZWplY3QoZSkpO1xuICBzY3JpcHQuc3JjID0gc3JjO1xuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG59KTtcbiBcbi8vIOacrOW9k+OBq+iqreOBv+i+vOOBvuOCjOOBn+OBi+eiuuiqjeOBmeOCi1xuY29uc3Qgd2FpdCA9ICgpID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICBpZiAoIXdpbmRvdy5rYXRleCkgcmV0dXJuO1xuICAgIGNsZWFySW50ZXJ2YWwodGltZXIpO1xuICAgIHJlc29sdmUoKTtcbiAgfSwgNTAwKTtcbn0pO1xuIiwgImltcG9ydHtvcHRpb25zIGFzIG59ZnJvbVwiLi9zY3JpcHQuanNcIjt2YXIgdCx1LHIsbz0wLGk9W10sYz1uLl9fYixmPW4uX19yLGU9bi5kaWZmZWQsYT1uLl9fYyx2PW4udW5tb3VudDtmdW5jdGlvbiBtKHQscil7bi5fX2gmJm4uX19oKHUsdCxvfHxyKSxvPTA7dmFyIGk9dS5fX0h8fCh1Ll9fSD17X186W10sX19oOltdfSk7cmV0dXJuIHQ+PWkuX18ubGVuZ3RoJiZpLl9fLnB1c2goe30pLGkuX19bdF19ZnVuY3Rpb24gbChuKXtyZXR1cm4gbz0xLHAodyxuKX1mdW5jdGlvbiBwKG4scixvKXt2YXIgaT1tKHQrKywyKTtyZXR1cm4gaS50PW4saS5fX2N8fChpLl9fPVtvP28ocik6dyh2b2lkIDAsciksZnVuY3Rpb24obil7dmFyIHQ9aS50KGkuX19bMF0sbik7aS5fX1swXSE9PXQmJihpLl9fPVt0LGkuX19bMV1dLGkuX19jLnNldFN0YXRlKHt9KSl9XSxpLl9fYz11KSxpLl9ffWZ1bmN0aW9uIHkocixvKXt2YXIgaT1tKHQrKywzKTshbi5fX3MmJmsoaS5fX0gsbykmJihpLl9fPXIsaS5fX0g9byx1Ll9fSC5fX2gucHVzaChpKSl9ZnVuY3Rpb24gaChyLG8pe3ZhciBpPW0odCsrLDQpOyFuLl9fcyYmayhpLl9fSCxvKSYmKGkuX189cixpLl9fSD1vLHUuX19oLnB1c2goaSkpfWZ1bmN0aW9uIHMobil7cmV0dXJuIG89NSxkKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bn19LFtdKX1mdW5jdGlvbiBfKG4sdCx1KXtvPTYsaChmdW5jdGlvbigpe1wiZnVuY3Rpb25cIj09dHlwZW9mIG4/bih0KCkpOm4mJihuLmN1cnJlbnQ9dCgpKX0sbnVsbD09dT91OnUuY29uY2F0KG4pKX1mdW5jdGlvbiBkKG4sdSl7dmFyIHI9bSh0KyssNyk7cmV0dXJuIGsoci5fX0gsdSkmJihyLl9fPW4oKSxyLl9fSD11LHIuX19oPW4pLHIuX199ZnVuY3Rpb24gQShuLHQpe3JldHVybiBvPTgsZChmdW5jdGlvbigpe3JldHVybiBufSx0KX1mdW5jdGlvbiBGKG4pe3ZhciByPXUuY29udGV4dFtuLl9fY10sbz1tKHQrKyw5KTtyZXR1cm4gby5fX2M9bixyPyhudWxsPT1vLl9fJiYoby5fXz0hMCxyLnN1Yih1KSksci5wcm9wcy52YWx1ZSk6bi5fX31mdW5jdGlvbiBUKHQsdSl7bi51c2VEZWJ1Z1ZhbHVlJiZuLnVzZURlYnVnVmFsdWUodT91KHQpOnQpfWZ1bmN0aW9uIHEobil7dmFyIHI9bSh0KyssMTApLG89bCgpO3JldHVybiByLl9fPW4sdS5jb21wb25lbnREaWRDYXRjaHx8KHUuY29tcG9uZW50RGlkQ2F0Y2g9ZnVuY3Rpb24obil7ci5fXyYmci5fXyhuKSxvWzFdKG4pfSksW29bMF0sZnVuY3Rpb24oKXtvWzFdKHZvaWQgMCl9XX1mdW5jdGlvbiB4KCl7aS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKHQuX19QKXRyeXt0Ll9fSC5fX2guZm9yRWFjaChnKSx0Ll9fSC5fX2guZm9yRWFjaChqKSx0Ll9fSC5fX2g9W119Y2F0Y2godSl7dC5fX0guX19oPVtdLG4uX19lKHUsdC5fX3YpfX0pLGk9W119bi5fX2I9ZnVuY3Rpb24obil7dT1udWxsLGMmJmMobil9LG4uX19yPWZ1bmN0aW9uKG4pe2YmJmYobiksdD0wO3ZhciByPSh1PW4uX19jKS5fX0g7ciYmKHIuX19oLmZvckVhY2goZyksci5fX2guZm9yRWFjaChqKSxyLl9faD1bXSl9LG4uZGlmZmVkPWZ1bmN0aW9uKHQpe2UmJmUodCk7dmFyIG89dC5fX2M7byYmby5fX0gmJm8uX19ILl9faC5sZW5ndGgmJigxIT09aS5wdXNoKG8pJiZyPT09bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fCgocj1uLnJlcXVlc3RBbmltYXRpb25GcmFtZSl8fGZ1bmN0aW9uKG4pe3ZhciB0LHU9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQociksYiYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodCksc2V0VGltZW91dChuKX0scj1zZXRUaW1lb3V0KHUsMTAwKTtiJiYodD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodSkpfSkoeCkpLHU9dm9pZCAwfSxuLl9fYz1mdW5jdGlvbih0LHUpe3Uuc29tZShmdW5jdGlvbih0KXt0cnl7dC5fX2guZm9yRWFjaChnKSx0Ll9faD10Ll9faC5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIW4uX198fGoobil9KX1jYXRjaChyKXt1LnNvbWUoZnVuY3Rpb24obil7bi5fX2gmJihuLl9faD1bXSl9KSx1PVtdLG4uX19lKHIsdC5fX3YpfX0pLGEmJmEodCx1KX0sbi51bm1vdW50PWZ1bmN0aW9uKHQpe3YmJnYodCk7dmFyIHU9dC5fX2M7aWYodSYmdS5fX0gpdHJ5e3UuX19ILl9fLmZvckVhY2goZyl9Y2F0Y2godCl7bi5fX2UodCx1Ll9fdil9fTt2YXIgYj1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ZnVuY3Rpb24gZyhuKXt2YXIgdD11O1wiZnVuY3Rpb25cIj09dHlwZW9mIG4uX19jJiZuLl9fYygpLHU9dH1mdW5jdGlvbiBqKG4pe3ZhciB0PXU7bi5fX2M9bi5fXygpLHU9dH1mdW5jdGlvbiBrKG4sdCl7cmV0dXJuIW58fG4ubGVuZ3RoIT09dC5sZW5ndGh8fHQuc29tZShmdW5jdGlvbih0LHUpe3JldHVybiB0IT09blt1XX0pfWZ1bmN0aW9uIHcobix0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Qobik6dH1leHBvcnR7bCBhcyB1c2VTdGF0ZSxwIGFzIHVzZVJlZHVjZXIseSBhcyB1c2VFZmZlY3QsaCBhcyB1c2VMYXlvdXRFZmZlY3QscyBhcyB1c2VSZWYsXyBhcyB1c2VJbXBlcmF0aXZlSGFuZGxlLGQgYXMgdXNlTWVtbyxBIGFzIHVzZUNhbGxiYWNrLEYgYXMgdXNlQ29udGV4dCxUIGFzIHVzZURlYnVnVmFsdWUscSBhcyB1c2VFcnJvckJvdW5kYXJ5fTtcbiIsICJpbXBvcnQge2luc3RhbGx9IGZyb20gJy4uL0thVGVYLUNETi9zY3JpcHQuanMnO1xuaW1wb3J0IHt1c2VTdGF0ZSwgdXNlUmVmLCB1c2VFZmZlY3R9IGZyb20gJy4uL3ByZWFjdEAxMC41LjEzL2hvb2tzLmpzJztcblxuZXhwb3J0IGNvbnN0IHVzZUthVGVYID0gKF9mb3JtdWxhKSA9PiB7XG4gIGNvbnN0IHJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgW2Zvcm11bGEsIHNldEZvcm11bGFdID0gdXNlU3RhdGUoX2Zvcm11bGEpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKHVuZGVmaW5lZCk7XG4gIFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIChhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBpbnN0YWxsKCk7XG4gICAgICB0cnkge1xuICAgICAgICBrYXRleC5yZW5kZXIoZm9ybXVsYSwgcmVmLmN1cnJlbnQpO1xuICAgICAgICBzZXRFcnJvcih1bmRlZmluZWQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIGthdGV4LlBhcnNlRXJyb3IpIHtcbiAgICAgICAgICBzZXRFcnJvcihlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoKTtcbiAgfSwgW2Zvcm11bGEsIHJlZl0pO1xuICBcbiAgcmV0dXJuIHtyZWYsIGZvcm11bGEsIGVycm9yLCBzZXRGb3JtdWxhfTtcbn07XG4iLCAiaW1wb3J0IHsgdXNlUmVmLCB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VDYWxsYmFjayB9IGZyb20gJy4uL3ByZWFjdEAxMC41LjEzL2hvb2tzLmpzJztcblxuLy8gVGhpcyBvZiBjb3Vyc2UgY291bGQndmUgYmVlbiBtb3JlIHN0cmVhbWxpbmVkIHdpdGggaW50ZXJuYWwgc3RhdGUgaW5zdGVhZCBvZlxuLy8gcmVmcywgYnV0IHRoZW4gaG9zdCBob29rcyAvIGNvbXBvbmVudHMgY291bGQgbm90IG9wdCBvdXQgb2YgcmVuZGVycy5cbi8vIFRoaXMgY291bGQndmUgYmVlbiBleHBvcnRlZCB0byBpdHMgb3duIG1vZHVsZSwgYnV0IHRoZSBjdXJyZW50IGJ1aWxkIGRvZXNuJ3Rcbi8vIHNlZW0gdG8gd29yayB3aXRoIG1vZHVsZSBpbXBvcnRzIGFuZCBJIGhhZCBubyBtb3JlIHRpbWUgdG8gc3BlbmQgb24gdGhpcy4uLlxuZnVuY3Rpb24gdXNlUmVzb2x2ZWRFbGVtZW50KHN1YnNjcmliZXIsIHJlZk9yRWxlbWVudCkge1xuICB2YXIgX3JlZjtcblxuICAvLyBUaGUgZGVmYXVsdCByZWYgaGFzIHRvIGJlIG5vbi1jb25kaXRpb25hbGx5IGRlY2xhcmVkIGhlcmUgd2hldGhlciBvciBub3RcbiAgLy8gaXQnbGwgYmUgdXNlZCBhcyB0aGF0J3MgaG93IGhvb2tzIHdvcmsuXG4gIC8vIEBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2hvb2tzLXJ1bGVzLmh0bWwjZXhwbGFuYXRpb25cbiAgdmFyIHJlZiA9IG51bGw7IC8vIERlZmF1bHQgcmVmXG5cbiAgdmFyIHJlZkVsZW1lbnQgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBjYWxsYmFja1JlZkVsZW1lbnQgPSB1c2VSZWYobnVsbCk7XG4gIHZhciByZWZDYWxsYmFjayA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgY2FsbGJhY2tSZWZFbGVtZW50LmN1cnJlbnQgPSBlbGVtZW50O1xuICAgIGNhbGxTdWJzY3JpYmVyKCk7XG4gIH0sIFtdKTtcbiAgdmFyIGxhc3RSZXBvcnRlZEVsZW1lbnRSZWYgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBjbGVhbnVwUmVmID0gdXNlUmVmKCk7XG5cbiAgdmFyIGNhbGxTdWJzY3JpYmVyID0gZnVuY3Rpb24gY2FsbFN1YnNjcmliZXIoKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBudWxsO1xuXG4gICAgaWYgKGNhbGxiYWNrUmVmRWxlbWVudC5jdXJyZW50KSB7XG4gICAgICBlbGVtZW50ID0gY2FsbGJhY2tSZWZFbGVtZW50LmN1cnJlbnQ7XG4gICAgfSBlbHNlIGlmIChyZWZFbGVtZW50LmN1cnJlbnQpIHtcbiAgICAgIGVsZW1lbnQgPSByZWZFbGVtZW50LmN1cnJlbnQ7XG4gICAgfSBlbHNlIGlmIChyZWZPckVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgZWxlbWVudCA9IHJlZk9yRWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAobGFzdFJlcG9ydGVkRWxlbWVudFJlZi5jdXJyZW50ID09PSBlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNsZWFudXBSZWYuY3VycmVudCkge1xuICAgICAgY2xlYW51cFJlZi5jdXJyZW50KCk7IC8vIE1ha2luZyBzdXJlIHRoZSBjbGVhbnVwIGlzIG5vdCBjYWxsZWQgYWNjaWRlbnRhbGx5IG11bHRpcGxlIHRpbWVzLlxuXG4gICAgICBjbGVhbnVwUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cblxuICAgIGxhc3RSZXBvcnRlZEVsZW1lbnRSZWYuY3VycmVudCA9IGVsZW1lbnQ7IC8vIE9ubHkgY2FsbGluZyB0aGUgc3Vic2NyaWJlciwgaWYgdGhlcmUncyBhbiBhY3R1YWwgZWxlbWVudCB0byByZXBvcnQuXG5cbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgY2xlYW51cFJlZi5jdXJyZW50ID0gc3Vic2NyaWJlcihlbGVtZW50KTtcbiAgICB9XG4gIH07XG5cbiAgaWYgKHJlZk9yRWxlbWVudCAmJiAhKHJlZk9yRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuICAgIC8vIE92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgcmVmIHdpdGggdGhlIGdpdmVuIG9uZVxuICAgIHJlZiA9IHJlZk9yRWxlbWVudDtcbiAgfSAvLyBPbiBlYWNoIHJlbmRlciwgd2UgY2hlY2sgd2hldGhlciBhIHJlZiBjaGFuZ2VkLCBvciBpZiB3ZSBnb3QgYSBuZXcgcmF3XG4gIC8vIGVsZW1lbnQuXG5cblxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IG1lYW4gdGhhdCBcImVsZW1lbnRcIiB3aWxsIG5lY2Vzc2FyaWx5IGJlIHdoYXRldmVyXG4gICAgLy8gdGhlIHJlZiBjdXJyZW50bHkgaG9sZHMuIEl0J2xsIHNpbXBseSBcInVwZGF0ZVwiIGBlbGVtZW50YCBlYWNoIHJlbmRlciB0b1xuICAgIC8vIHRoZSBjdXJyZW50IHJlZiB2YWx1ZSwgYnV0IHRoZXJlJ3Mgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIHJlZiB2YWx1ZSB3aWxsXG4gICAgLy8gbm90IGNoYW5nZSBsYXRlciB3aXRob3V0IGEgcmVuZGVyLlxuICAgIC8vIFRoaXMgbWF5IG9yIG1heSBub3QgYmUgYSBwcm9ibGVtIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWMgdXNlIGNhc2UuXG4gICAgaWYgKHJlZikge1xuICAgICAgcmVmRWxlbWVudC5jdXJyZW50ID0gcmVmLmN1cnJlbnQ7XG4gICAgfVxuXG4gICAgY2FsbFN1YnNjcmliZXIoKTtcbiAgfSwgW3JlZiwgKF9yZWYgPSByZWYpID09IG51bGwgPyB2b2lkIDAgOiBfcmVmLmN1cnJlbnQsIHJlZk9yRWxlbWVudF0pO1xuICByZXR1cm4gcmVmQ2FsbGJhY2s7XG59XG5cbmZ1bmN0aW9uIHVzZVJlc2l6ZU9ic2VydmVyKG9wdHMpIHtcbiAgaWYgKG9wdHMgPT09IHZvaWQgMCkge1xuICAgIG9wdHMgPSB7fTtcbiAgfVxuXG4gIC8vIFNhdmluZyB0aGUgY2FsbGJhY2sgYXMgYSByZWYuIFdpdGggdGhpcywgSSBkb24ndCBuZWVkIHRvIHB1dCBvblJlc2l6ZSBpbiB0aGVcbiAgLy8gZWZmZWN0IGRlcCBhcnJheSwgYW5kIGp1c3QgcGFzc2luZyBpbiBhbiBhbm9ueW1vdXMgZnVuY3Rpb24gd2l0aG91dCBtZW1vaXNpbmdcbiAgLy8gd2lsbCBub3QgcmVpbnN0YW50aWF0ZSB0aGUgaG9vaydzIFJlc2l6ZU9ic2VydmVyXG4gIHZhciBvblJlc2l6ZSA9IG9wdHMub25SZXNpemU7XG4gIHZhciBvblJlc2l6ZVJlZiA9IHVzZVJlZih1bmRlZmluZWQpO1xuICBvblJlc2l6ZVJlZi5jdXJyZW50ID0gb25SZXNpemU7IC8vIFVzaW5nIGEgc2luZ2xlIGluc3RhbmNlIHRocm91Z2hvdXQgdGhlIGhvb2sncyBsaWZldGltZVxuXG4gIHZhciByZXNpemVPYnNlcnZlclJlZiA9IHVzZVJlZigpO1xuXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZSh7XG4gICAgd2lkdGg6IHVuZGVmaW5lZCxcbiAgICBoZWlnaHQ6IHVuZGVmaW5lZFxuICB9KSxcbiAgICAgIHNpemUgPSBfdXNlU3RhdGVbMF0sXG4gICAgICBzZXRTaXplID0gX3VzZVN0YXRlWzFdOyAvLyBJbiBjZXJ0YWluIGVkZ2UgY2FzZXMgdGhlIFJPIG1pZ2h0IHdhbnQgdG8gcmVwb3J0IGEgc2l6ZSBjaGFuZ2UganVzdCBhZnRlclxuICAvLyB0aGUgY29tcG9uZW50IHVubW91bnRlZC5cblxuXG4gIHZhciBkaWRVbm1vdW50ID0gdXNlUmVmKGZhbHNlKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgZGlkVW5tb3VudC5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9O1xuICB9LCBbXSk7IC8vIFVzaW5nIGEgcmVmIHRvIHRyYWNrIHRoZSBwcmV2aW91cyB3aWR0aCAvIGhlaWdodCB0byBhdm9pZCB1bm5lY2Vzc2FyeSByZW5kZXJzXG5cbiAgdmFyIHByZXZpb3VzID0gdXNlUmVmKHtcbiAgICB3aWR0aDogdW5kZWZpbmVkLFxuICAgIGhlaWdodDogdW5kZWZpbmVkXG4gIH0pOyAvLyBUaGlzIGJsb2NrIGlzIGtpbmRhIGxpa2UgYSB1c2VFZmZlY3QsIG9ubHkgaXQncyBjYWxsZWQgd2hlbmV2ZXIgYSBuZXdcbiAgLy8gZWxlbWVudCBjb3VsZCBiZSByZXNvbHZlZCBiYXNlZCBvbiB0aGUgcmVmIG9wdGlvbi4gSXQgYWxzbyBoYXMgYSBjbGVhbnVwXG4gIC8vIGZ1bmN0aW9uLlxuXG4gIHZhciByZWZDYWxsYmFjayA9IHVzZVJlc29sdmVkRWxlbWVudChmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIC8vIEluaXRpYWxpc2luZyB0aGUgUk8gaW5zdGFuY2VcbiAgICBpZiAoIXJlc2l6ZU9ic2VydmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIC8vIFNhdmluZyBhIHNpbmdsZSBpbnN0YW5jZSwgdXNlZCBieSB0aGUgaG9vayBmcm9tIHRoaXMgcG9pbnQgb24uXG4gICAgICByZXNpemVPYnNlcnZlclJlZi5jdXJyZW50ID0gbmV3IFJlc2l6ZU9ic2VydmVyKGZ1bmN0aW9uIChlbnRyaWVzKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlbnRyaWVzKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBTaW5jZSB3ZSBvbmx5IG9ic2VydmUgdGhlIG9uZSBlbGVtZW50LCB3ZSBkb24ndCBuZWVkIHRvIGxvb3Agb3ZlciB0aGVcbiAgICAgICAgLy8gYXJyYXlcblxuXG4gICAgICAgIGlmICghZW50cmllcy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZW50cnkgPSBlbnRyaWVzWzBdOyAvLyBgTWF0aC5yb3VuZGAgaXMgaW4gbGluZSB3aXRoIGhvdyBDU1MgcmVzb2x2ZXMgc3ViLXBpeGVsIHZhbHVlc1xuXG4gICAgICAgIHZhciBuZXdXaWR0aCA9IE1hdGgucm91bmQoZW50cnkuY29udGVudFJlY3Qud2lkdGgpO1xuICAgICAgICB2YXIgbmV3SGVpZ2h0ID0gTWF0aC5yb3VuZChlbnRyeS5jb250ZW50UmVjdC5oZWlnaHQpO1xuXG4gICAgICAgIGlmIChwcmV2aW91cy5jdXJyZW50LndpZHRoICE9PSBuZXdXaWR0aCB8fCBwcmV2aW91cy5jdXJyZW50LmhlaWdodCAhPT0gbmV3SGVpZ2h0KSB7XG4gICAgICAgICAgdmFyIG5ld1NpemUgPSB7XG4gICAgICAgICAgICB3aWR0aDogbmV3V2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IG5ld0hlaWdodFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAob25SZXNpemVSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgb25SZXNpemVSZWYuY3VycmVudChuZXdTaXplKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJldmlvdXMuY3VycmVudC53aWR0aCA9IG5ld1dpZHRoO1xuICAgICAgICAgICAgcHJldmlvdXMuY3VycmVudC5oZWlnaHQgPSBuZXdIZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghZGlkVW5tb3VudC5jdXJyZW50KSB7XG4gICAgICAgICAgICAgIHNldFNpemUobmV3U2l6ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXNpemVPYnNlcnZlclJlZi5jdXJyZW50Lm9ic2VydmUoZWxlbWVudCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChyZXNpemVPYnNlcnZlclJlZi5jdXJyZW50KSB7XG4gICAgICAgIHJlc2l6ZU9ic2VydmVyUmVmLmN1cnJlbnQudW5vYnNlcnZlKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIG9wdHMucmVmKTtcbiAgcmV0dXJuIHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZWY6IHJlZkNhbGxiYWNrLFxuICAgICAgd2lkdGg6IHNpemUud2lkdGgsXG4gICAgICBoZWlnaHQ6IHNpemUuaGVpZ2h0XG4gICAgfTtcbiAgfSwgW3JlZkNhbGxiYWNrLCBzaXplID8gc2l6ZS53aWR0aCA6IG51bGwsIHNpemUgPyBzaXplLmhlaWdodCA6IG51bGxdKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlUmVzaXplT2JzZXJ2ZXI7XG4iLCAiaW1wb3J0IHtodG1sLCB0b0NoaWxkQXJyYXl9IGZyb20gJy4uL2h0bUAzLjAuNCUyRnByZWFjdC9zY3JpcHQuanMnO1xuaW1wb3J0IHt1c2VTdGF0ZSwgdXNlTWVtbywgdXNlRWZmZWN0LCB1c2VDYWxsYmFja30gZnJvbSAnLi4vcHJlYWN0QDEwLjUuMTMvaG9va3MuanMnO1xuaW1wb3J0IHVzZVJlc2l6ZU9ic2VydmVyIGZyb20gJy4uL3VzZS1yZXNpemUtb2JzZXJ2ZXJANy4wLjAvc2NyaXB0LmpzJztcbmltcG9ydCB7c2NyYXBib3hET019IGZyb20gJy4uL3NjcmFwYm94LWRvbS1hY2Nlc3Nvci9zY3JpcHQuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gUG9wdXBDb250YWluZXIoe1xuICBvcGVuLFxuICBjdXJzb3JQb3NpdGlvbixcbiAgY2hpbGRyZW4sXG59KSB7XG4gIGNvbnN0IHsgcmVmLCB3aWR0aDogYnV0dG9uQ29udGFpbmVyV2lkdGggPSAwIH0gPSB1c2VSZXNpemVPYnNlcnZlcigpO1xuICBjb25zdCB7IHdpZHRoOiBlZGl0b3JXaWR0aCA9IDAgfSA9IHVzZVJlc2l6ZU9ic2VydmVyKHsgcmVmOiBzY3JhcGJveERPTS5lZGl0b3IgfSk7XG4gIGNvbnN0IGlzRW1wdHkgPSB1c2VNZW1vKCgpID0+IHRvQ2hpbGRBcnJheShjaGlsZHJlbikubGVuZ3RoID09PSAwLCBbY2hpbGRyZW5dKTtcbiAgXG4gIGNvbnN0IHBvcHVwTWVudVN0eWxlID0gY2FsY1BvcHVwTWVudVN0eWxlKGN1cnNvclBvc2l0aW9uKTtcbiAgY29uc3QgdHJpYW5nbGVTdHlsZSA9IGNhbGNUcmlhbmdsZVN0eWxlKGN1cnNvclBvc2l0aW9uLCBpc0VtcHR5KTtcbiAgY29uc3QgYnV0dG9uQ29udGFpbmVyU3R5bGUgPSBjYWxjQnV0dG9uQ29udGFpbmVyU3R5bGUoZWRpdG9yV2lkdGgsIGJ1dHRvbkNvbnRhaW5lcldpZHRoLCBjdXJzb3JQb3NpdGlvbiwgaXNFbXB0eSk7XG5cbiAgcmV0dXJuIGh0bWxgXG4gICAgPGRpdiBjbGFzcz1cInBvcHVwLW1lbnVcIiBzdHlsZT1cIiR7cG9wdXBNZW51U3R5bGV9XCIgaGlkZGVuPVwiJHshb3Blbn1cIj5cbiAgICAgIDxkaXYgcmVmPVwiJHtyZWZ9XCIgY2xhc3M9XCJidXR0b24tY29udGFpbmVyXCIgc3R5bGU9XCIke2J1dHRvbkNvbnRhaW5lclN0eWxlfVwiPlxuICAgICAgICAke2NoaWxkcmVufVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwidHJpYW5nbGVcIiBzdHlsZT1cIiR7dHJpYW5nbGVTdHlsZX1cIiAvPlxuICAgIDwvZGl2PmA7XG59XG5cbi8qKiAucG9wdXAtbWVudSDjga7jgrnjgr/jgqTjg6vjgpLoqIjnrpfjgZnjgosgKi9cbmNvbnN0IGNhbGNQb3B1cE1lbnVTdHlsZSA9IChjdXJzb3JQb3NpdGlvbikgPT4gKHsgdG9wOiBjdXJzb3JQb3NpdGlvbi5zdHlsZVRvcCB9KTtcblxuLyoqIC50cmlhbmdsZSDjga7jgrnjgr/jgqTjg6vjgpLoqIjnrpfjgZnjgosgKi9cbmNvbnN0IGNhbGNUcmlhbmdsZVN0eWxlID0gKGN1cnNvclBvc2l0aW9uLCBpc0VtcHR5KSA9PiAoe1xuICAgIGxlZnQ6IGN1cnNvclBvc2l0aW9uLnN0eWxlTGVmdCxcbiAgICAuLi4oaXNFbXB0eVxuICAgICAgPyB7XG4gICAgICAgICAgYm9yZGVyVG9wQ29sb3I6ICcjNTU1JyxcbiAgICAgICAgfVxuICAgICAgOiB7fSksXG4gIH0pO1xuXG4vKiogLmJ1dHRvbi1jb250YWluZXIg44Gu44K544K/44Kk44Or44KS6KiI566X44GZ44KLICovXG5mdW5jdGlvbiBjYWxjQnV0dG9uQ29udGFpbmVyU3R5bGUoXG4gIGVkaXRvcldpZHRoLFxuICBidXR0b25Db250YWluZXJXaWR0aCxcbiAgY3Vyc29yUG9zaXRpb24sXG4gIGlzRW1wdHksXG4pIHtcbiAgY29uc3QgdHJhbnNsYXRlWCA9IChjdXJzb3JQb3NpdGlvbi5zdHlsZUxlZnQgLyBlZGl0b3JXaWR0aCkgKiAxMDA7XG4gIC8vIOerr+OBq+WvhOOCiumBjuOBjuOBquOBhOOCiOOBhuOBq+OAgXRyYW5zbGF0ZVgg44Gu5LiK6ZmQ44O75LiL6ZmQ44KS6Kit5a6a44GX44Gm44GK44GP44CCXG4gIC8vIOWApOOBr+ODleOCo+ODvOODquODs+OCsOOBp+axuuOCgeOBpuOBiuOCiuOAgeS9leOBi+OBq+ijj+aJk+OBoeOBleOCjOOBn+OCguOBruOBp+OBr+OBquOBhOOBruOBp+OAgeWkieOBiOOBn+OBi+OBo+OBn+OCiemBqeW9k+OBq+WkieOBiOOCi+OAglxuICBjb25zdCBtaW5UcmFuc2xhdGVYID0gKDIwIC8gYnV0dG9uQ29udGFpbmVyV2lkdGgpICogMTAwO1xuICBjb25zdCBtYXhUcmFuc2xhdGVYID0gMTAwIC0gbWluVHJhbnNsYXRlWDtcblxuICByZXR1cm4ge1xuICAgIGxlZnQ6IGN1cnNvclBvc2l0aW9uLnN0eWxlTGVmdCxcbiAgICB0cmFuc2Zvcm06IGB0cmFuc2xhdGVYKC0ke01hdGgubWF4KG1pblRyYW5zbGF0ZVgsIE1hdGgubWluKHRyYW5zbGF0ZVgsIG1heFRyYW5zbGF0ZVgpKX0lKWAsXG4gICAgLi4uKGlzRW1wdHlcbiAgICAgID8ge1xuICAgICAgICAgIGNvbG9yOiAnI2VlZScsXG4gICAgICAgICAgZm9udFNpemU6ICcxMXB4JyxcbiAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgICAgICBwYWRkaW5nOiAnMCA1cHgnLFxuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkJyxcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjNTU1JyxcbiAgICAgICAgfVxuICAgICAgOiB7fSksXG4gIH07XG59XG5leHBvcnQgY29uc3QgQ1NTID0gKCkgPT4gaHRtbGA8c3R5bGU+XG4gIC5wb3B1cC1tZW51IHtcbiAgICBwb3NpdGlvbjphYnNvbHV0ZTtcbiAgICBsZWZ0OjA7XG4gICAgd2lkdGg6MTAwJTtcbiAgICB6LWluZGV4OjMwMDtcbiAgICB0cmFuc2Zvcm06dHJhbnNsYXRlWShjYWxjKC0xMDAlIC0gMTRweCkpO1xuICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTtcbiAgICB1c2VyLXNlbGVjdDpub25lO1xuICAgIGZvbnQtZmFtaWx5OlwiT3BlbiBTYW5zXCIsSGVsdmV0aWNhLEFyaWFsLFwiSGlyYWdpbm8gU2Fuc1wiLHNhbnMtc2VyaWY7XG4gICAgcG9pbnRlci1ldmVudHM6bm9uZVxuICB9XG4gIC5wb3B1cC1tZW51IC5idXR0b24tY29udGFpbmVyIHtcbiAgICBwb3NpdGlvbjpyZWxhdGl2ZTtcbiAgICBkaXNwbGF5OmlubGluZS1ibG9jaztcbiAgICBtYXgtd2lkdGg6NzB2dztcbiAgICBtaW4td2lkdGg6ODBweDtcbiAgICB0ZXh0LWFsaWduOmNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiMxMTE7XG4gICAgcGFkZGluZzowIDFweDtcbiAgICBib3JkZXItcmFkaXVzOjRweDtcbiAgICBwb2ludGVyLWV2ZW50czphdXRvXG4gIH1cbiAgaHRtbFtkYXRhLW9zKj0nYW5kcm9pZCddIC5wb3B1cC1tZW51IC5idXR0b24tY29udGFpbmVyLFxuICAucG9wdXAtbWVudSAuYnV0dG9uLWNvbnRhaW5lcltkYXRhLW9zKj0nYW5kcm9pZCddIHtcbiAgICBtYXgtd2lkdGg6OTB2d1xuICB9XG4gIGh0bWxbZGF0YS1vcyo9J2lvcyddIC5wb3B1cC1tZW51IC5idXR0b24tY29udGFpbmVyLFxuICAucG9wdXAtbWVudSAuYnV0dG9uLWNvbnRhaW5lcltkYXRhLW9zKj0naW9zJ10ge1xuICAgIG1heC13aWR0aDo5MHZ3XG4gIH1cbiAgLnBvcHVwLW1lbnUgLnRyaWFuZ2xlIHtcbiAgICBwb3NpdGlvbjphYnNvbHV0ZTtcbiAgICB0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTtcbiAgICB3aWR0aDowO1xuICAgIGhlaWdodDowO1xuICAgIGJvcmRlci10b3A6NnB4IHNvbGlkICMxMTE7XG4gICAgYm9yZGVyLWxlZnQ6OHB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIGJvcmRlci1yaWdodDo4cHggc29saWQgdHJhbnNwYXJlbnRcbiAgfVxuICBodG1sW2RhdGEtb3MqPSdhbmRyb2lkJ10gLnBvcHVwLW1lbnUudmVydGljYWwgLmJ1dHRvbi1jb250YWluZXIsXG4gIC5wb3B1cC1tZW51W2RhdGEtb3MqPSdhbmRyb2lkJ10udmVydGljYWwgLmJ1dHRvbi1jb250YWluZXIge1xuICAgIG1heC13aWR0aDo4MHZ3O1xuICAgIHRleHQtYWxpZ246bGVmdFxuICB9XG4gIC5idXR0b24ge1xuICAgIGZvbnQtc2l6ZToxMXB4O1xuICAgIGNvbG9yOiNlZWU7XG4gICAgY3Vyc29yOnBvaW50ZXI7XG4gICAgZGlzcGxheTppbmxpbmUtYmxvY2s7XG4gICAgcGFkZGluZzowIDVweFxuICB9XG4gIC5idXR0b246bm90KDpmaXJzdC1vZi10eXBlKSB7XG4gICAgYm9yZGVyOjA7XG4gICAgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlZWVcbiAgfVxuICAuYnV0dG9uLnNlbGVjdGVkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiMyMjI7XG4gICAgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZVxuICB9XG4gIGh0bWxbZGF0YS1vcyo9J2FuZHJvaWQnXSAuYnV0dG9uIHtcbiAgICBmb250LXNpemU6MTNweDtcbiAgICBwYWRkaW5nOjZweDtcbiAgICBtaW4td2lkdGg6MTJ2d1xuICB9XG4gIGh0bWxbZGF0YS1vcyo9J2lvcyddIC5idXR0b257XG4gICAgZm9udC1zaXplOjEzcHg7XG4gICAgcGFkZGluZzo2cHg7XG4gICAgbWluLXdpZHRoOjEydndcbiAgfVxuICAuYnV0dG9uIGRpdi5pY29uIHtcbiAgICBoZWlnaHQ6MmVtO1xuICAgIG1heC13aWR0aDoxMGVtO1xuICAgIGRpc3BsYXk6aW5saW5lLWJsb2NrO1xuICAgIG92ZXJmbG93OmhpZGRlbjtcbiAgICBtYXJnaW4tbGVmdDoxcHg7XG4gICAgdmVydGljYWwtYWxpZ246dG9wXG4gIH1cbiAgLmJ1dHRvbiBkaXYuaWNvbiBpbWcge1xuICAgIG1heC1oZWlnaHQ6MTAwJTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjp1bnNldFxuICB9XG4gIGh0bWxbZGF0YS1vcyo9J2FuZHJvaWQnXSAucG9wdXAtbWVudS52ZXJ0aWNhbCAuYnV0dG9uLWNvbnRhaW5lciAuYnV0dG9uLFxuICAucG9wdXAtbWVudVtkYXRhLW9zKj0nYW5kcm9pZCddLnZlcnRpY2FsIC5idXR0b24tY29udGFpbmVyIC5idXR0b24ge1xuICAgIGZvbnQtc2l6ZToxMXB4O1xuICAgIGRpc3BsYXk6YmxvY2s7XG4gICAgbGluZS1oZWlnaHQ6MS4yZW07XG4gICAgcGFkZGluZzoxMnB4IDEwcHg7XG4gICAgbWluLXdpZHRoOjQwcHg7XG4gICAgYm9yZGVyLWxlZnQ6MFxuICB9XG4gIGh0bWxbZGF0YS1vcyo9J2FuZHJvaWQnXSAucG9wdXAtbWVudS52ZXJ0aWNhbCAuYnV0dG9uLWNvbnRhaW5lciAuYnV0dG9uOm5vdCg6bGFzdC1vZi10eXBlKSxcbiAgLnBvcHVwLW1lbnVbZGF0YS1vcyo9J2FuZHJvaWQnXS52ZXJ0aWNhbCAuYnV0dG9uLWNvbnRhaW5lciAuYnV0dG9uOm5vdCg6bGFzdC1vZi10eXBlKSB7XG4gICAgYm9yZGVyOjA7XG4gICAgYm9yZGVyLWJvdHRvbToxcHggc29saWQgI2VlZVxuICB9XG4gIGh0bWxbZGF0YS1vcyo9J2lvcyddIC5wb3B1cC1tZW51LnZlcnRpY2FsIC5idXR0b24tY29udGFpbmVyLFxuICAucG9wdXAtbWVudVtkYXRhLW9zKj0naW9zJ10udmVydGljYWwgLmJ1dHRvbi1jb250YWluZXIge1xuICAgIG1heC13aWR0aDo4MHZ3O1xuICAgIHRleHQtYWxpZ246bGVmdFxuICB9XG4gIGh0bWxbZGF0YS1vcyo9J2lvcyddIC5wb3B1cC1tZW51LnZlcnRpY2FsIC5idXR0b24tY29udGFpbmVyIC5idXR0b24sXG4gIC5wb3B1cC1tZW51W2RhdGEtb3MqPSdpb3MnXS52ZXJ0aWNhbCAuYnV0dG9uLWNvbnRhaW5lciAuYnV0dG9uIHtcbiAgICBmb250LXNpemU6MTFweDtcbiAgICBkaXNwbGF5OmJsb2NrO1xuICAgIGxpbmUtaGVpZ2h0OjEuMmVtO1xuICAgIHBhZGRpbmc6MTJweCAxMHB4O1xuICAgIG1pbi13aWR0aDo0MHB4O1xuICAgIGJvcmRlci1sZWZ0OjBcbiAgfVxuICBodG1sW2RhdGEtb3MqPSdpb3MnXSAucG9wdXAtbWVudS52ZXJ0aWNhbCAuYnV0dG9uLWNvbnRhaW5lciAuYnV0dG9uOm5vdCg6bGFzdC1vZi10eXBlKSxcbiAgLnBvcHVwLW1lbnVbZGF0YS1vcyo9J2lvcyddLnZlcnRpY2FsIC5idXR0b24tY29udGFpbmVyIC5idXR0b246bm90KDpsYXN0LW9mLXR5cGUpIHtcbiAgICBib3JkZXI6MDtcbiAgICBib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWVlXG4gIH1cbjwvc3R5bGU+YDsiLCAiaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSAnLi4vcHJlYWN0QDEwLjUuMTMvaG9va3MuanMnO1xuXG5leHBvcnQgY29uc3QgdXNlTXV0YXRpb25PYnNlcnZlciA9IChlbGVtZW50cywgY2FsbGJhY2ssIGNvbmZpZykgPT4gXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbXV0YXRpb25PYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcbiAgICAgIG11dGF0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgY2FsbGJhY2sobXV0YXRpb25zKTtcbiAgICAgIGZvciAoY29uc3QgZWxlbSBvZiBlbGVtZW50cykge1xuICAgICAgICBlbGVtLmN1cnJlbnQgJiYgbXV0YXRpb25PYnNlcnZlci5vYnNlcnZlKGVsZW0uY3VycmVudCwgY29uZmlnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZvciAoY29uc3QgZWxlbSBvZiBlbGVtZW50cykge1xuICAgICAgZWxlbS5jdXJyZW50ICYmIG11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZShlbGVtLmN1cnJlbnQsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IG11dGF0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9LCBbXSk7XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIHRocm90dGxlKGNhbGxiYWNrLCBkZWxheSA9IDAsIHtpbW1lZGlhdGUgPSB0cnVlfSA9IHt9KSB7XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBFcnJvcignYXJndW1lbnQgaXMgbm90IGZ1bmN0aW9uLicpXG4gIGxldCBxdWV1ZSA9IHVuZGVmaW5lZDtcbiAgbGV0IHJ1bm5pbmcgPSBmYWxzZTtcbiAgY29uc3Qgc2xlZXAgPSBkZWxheSA+IDAgP1xuICAgICgpID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIGRlbGF5KSkgOlxuICAgICgpID0+IHt9O1xuICBjb25zdCBydW5OZXh0ID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHNsZWVwKCk7XG4gICAgaWYgKCFxdWV1ZSkge1xuICAgICAgcnVubmluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7cGFyYW1ldGVycywgcmVzb2x2ZX0gPSBxdWV1ZTtcbiAgICBxdWV1ZSA9IHVuZGVmaW5lZDtcbiAgICByZXNvbHZlKHtyZXN1bHQ6IGF3YWl0IGNhbGxiYWNrKC4uLnBhcmFtZXRlcnMpLCBleGVjdXRlZDogdHJ1ZX0pO1xuICAgIGF3YWl0IHJ1bk5leHQoKTtcbiAgfTtcbiAgcmV0dXJuICguLi5wYXJhbWV0ZXJzKSA9PiBuZXcgUHJvbWlzZShhc3luYyByZXNvbHZlID0+IHtcbiAgICBpZiAocnVubmluZykge1xuICAgICAgcXVldWU/LnJlc29sdmU/Lih7ZXhlY3V0ZWQ6IGZhbHNlfSk7XG4gICAgICBxdWV1ZSA9IHtwYXJhbWV0ZXJzLCByZXNvbHZlfTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcnVubmluZyA9IHRydWU7XG4gICAgaWYgKGltbWVkaWF0ZSkge1xuICAgICAgLy8g5Yem55CG44GM5p2l44Gf44KJ55u044Gh44Gr5a6f6KGM44GZ44KLXG4gICAgICByZXNvbHZlKHtyZXN1bHQ6IGF3YWl0IGNhbGxiYWNrKC4uLnBhcmFtZXRlcnMpLCBleGVjdXRlZDogdHJ1ZX0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDmnIDliJ3jga7lh6bnkIbjgoJkZWxheeOBoOOBkeW+heOBpFxuICAgICAgcXVldWU/LnJlc29sdmU/Lih7ZXhlY3V0ZWQ6IGZhbHNlfSk7XG4gICAgICBxdWV1ZSA9IHtwYXJhbWV0ZXJzLCByZXNvbHZlfTtcbiAgICB9XG4gICAgYXdhaXQgcnVuTmV4dCgpO1xuICB9KTtcbn0iLCAiaW1wb3J0IHt1c2VNZW1vfSBmcm9tICcuLi9wcmVhY3RAMTAuNS4xMy9ob29rcy5qcyc7XG5pbXBvcnQge3VzZU11dGF0aW9uT2JzZXJ2ZXJ9IGZyb20gJy4uL3VzZU11dGF0aW9uT2JzZXJ2ZXIvc2NyaXB0LmpzJztcbmltcG9ydCB7dGhyb3R0bGV9IGZyb20gJy4uL2N1c3RvbS10aHJvdHRsZS9zY3JpcHQuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlQ3Vyc29yT2JzZXJ2ZXIoX2NhbGxiYWNrLCB7ZGVsYXkgPSAxMDAsIGltbWVkaWF0ZSA9IHRydWV9ID0ge30sIGRlcHMgPSBbXSkge1xuICBjb25zdCBjYWxsYmFjayA9IHVzZU1lbW8oKCkgPT4gdGhyb3R0bGUoYXN5bmMgKG11dGF0aW9uKSA9PiB7XG4gICAgY29uc3QgY3Vyc29yID0gbXV0YXRpb24udGFyZ2V0O1xuICAgIC8vIOWkieabtOeCueOBjGRpc3BsYXk6IG5vbmXjgZfjgYvjgarjgZHjgozjgbDkvZXjgoLjgZfjgarjgYRcbiAgICBjb25zdCBuZXdDU1NUZXh0ID0gY3Vyc29yLnN0eWxlLmNzc1RleHQucmVwbGFjZSgvZGlzcGxheTogbm9uZTsvLCAnJykudHJpbSgpO1xuICAgIGNvbnN0IG9sZENTU1RleHQgPSBtdXRhdGlvbi5vbGRWYWx1ZS5yZXBsYWNlKC9kaXNwbGF5OiBub25lOy8sICcnKS50cmltKCk7XG4gICAgaWYgKG5ld0NTU1RleHQgPT09IG9sZENTU1RleHQpIHJldHVybjtcbiAgICBjb25zdCB0b3AgPSBwYXJzZUludChjdXJzb3Iuc3R5bGUudG9wKTtcbiAgICBjb25zdCBsZWZ0ID0gcGFyc2VJbnQoY3Vyc29yLnN0eWxlLmxlZnQpO1xuICAgIGNvbnN0IGhlaWdodCA9IHBhcnNlSW50KGN1cnNvci5zdHlsZS5oZWlnaHQpO1xuICAgIGNvbnN0IHBhcmVudFJlY3QgPSBjdXJzb3IucGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBjdXJzb3JSZWN0ID0ge1xuICAgICAgdG9wOiB0b3AgKyBwYXJlbnRSZWN0LnRvcCxcbiAgICAgIGxlZnQ6IGxlZnQgKyBwYXJlbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogbGVmdCArIDEgKyBwYXJlbnRSZWN0LmxlZnQsXG4gICAgICBib3R0b206IHRvcCArIGhlaWdodCArIHBhcmVudFJlY3QudG9wLFxuICAgICAgaGVpZ2h0LFxuICAgICAgd2lkdGg6IDEsXG4gICAgfTtcbiAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LmVsZW1lbnRzRnJvbVBvaW50KFxuICAgICAgY3Vyc29yUmVjdC5sZWZ0ICsgY3Vyc29yUmVjdC53aWR0aCAvIDIsIGN1cnNvclJlY3QudG9wICsgY3Vyc29yUmVjdC5oZWlnaHQgLyAyXG4gICAgKTtcbiAgICBhd2FpdCBfY2FsbGJhY2soe2N1cnNvclJlY3QsIHBhcmVudFJlY3QsIGVsZW1lbnRzfSk7XG4gIH0sIGRlbGF5LCB7aW1tZWRpYXRlfSksIGRlcHMpO1xuICB1c2VNdXRhdGlvbk9ic2VydmVyKFt7Y3VycmVudDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY3Vyc29yJyk/LlswXX1dLCAoW211dGF0aW9uXSkgPT4gY2FsbGJhY2sobXV0YXRpb24pLCB7YXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbJ3N0eWxlJ10sIGF0dHJpYnV0ZU9sZFZhbHVlOiB0cnVlfSk7XG59XG4iLCAiaW1wb3J0IHtodG1sLCByZW5kZXJ9IGZyb20gJy4uL2h0bUAzLjAuNCUyRnByZWFjdC9zY3JpcHQuanMnO1xuaW1wb3J0IHt1c2VLYVRlWH0gZnJvbSAnLi4vdXNlLUthVGVYL3NjcmlwdC5qcyc7XG5pbXBvcnQge3VzZVN0YXRlfSBmcm9tICcuLi9wcmVhY3RAMTAuNS4xMy9ob29rcy5qcyc7XG5pbXBvcnQge1BvcHVwQ29udGFpbmVyLCBDU1N9IGZyb20gJy4uL3BvcHVwLWNvbnRhaW5lckAwLjEuMC9zY3JpcHQuanMnO1xuaW1wb3J0IHt1c2VDdXJzb3JPYnNlcnZlcn0gZnJvbSAnLi4vdXNlLWN1cnNvci1vYnNlcnZlci9zY3JpcHQuanMnO1xuXG5jb25zdCBBcHAgPSAoKSA9PiB7XG4gIGNvbnN0IHtyZWYsIGVycm9yLCBzZXRGb3JtdWxhfSA9IHVzZUthVGVYKCcnKTsgLy8g5pWw5byPcmVuZGVyaW5n55SoaG9va1xuICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7IC8vIHBvcHVw44Gu6ZaL6ZaJXG4gIGNvbnN0IFtjdXJzb3JQb3NpdGlvbiwgc2V0Q3Vyc29yUG9zaXRpb25dID0gdXNlU3RhdGUoe1xuICAgIHN0eWxlVG9wOiAwLFxuICAgIHN0eWxlTGVmdDogMCxcbiAgfSk7IC8vIGN1cnNvcuOBruS9jee9rlxuICBcbiAgLy8gLmZvcm11bGHlhoXjgatjdXJzb3LjgYzmnaXjgZ/jgolwcmV2aWV344KS6ZaL5aeL44GZ44KLXG4gIHVzZUN1cnNvck9ic2VydmVyKCh7XG4gICAgY3Vyc29yUmVjdDoge2xlZnR9LFxuICAgIHBhcmVudFJlY3Q6IHt0b3A6IGVkaXRvclRvcCwgbGVmdDogZWRpdG9yTGVmdH0sXG4gICAgZWxlbWVudHNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGZvcm11bGFET00gPSBlbGVtZW50cy5maW5kKGVsZW1lbnQgPT4gZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2Zvcm11bGEnKSk7XG4gICAgaWYgKCFmb3JtdWxhRE9NKSB7XG4gICAgICBzZXRPcGVuKGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0T3Blbih0cnVlKTtcbiAgICBzZXRGb3JtdWxhKGZvcm11bGFET00udGV4dENvbnRlbnQuc2xpY2UoMywgLTEpKTtcbiAgICAgICAgIFxuICAgIC8vIHBvcHVw44KS5Ye644GZeeW6p+aomeOBr+OAgVskIF3jga7kuIrnq6/jgavlkIjjgo/jgZvjgotcbiAgICBjb25zdCB7dG9wOiBmb3JtdWxhVG9wfSA9IGZvcm11bGFET00uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgc2V0Q3Vyc29yUG9zaXRpb24oe1xuICAgICAgc3R5bGVUb3A6IGZvcm11bGFUb3AgLSBlZGl0b3JUb3AsXG4gICAgICBzdHlsZUxlZnQ6IGxlZnQgLSBlZGl0b3JMZWZ0LFxuICAgIH0pO1xuICB9KTtcbiAgXG4gIHJldHVybiBodG1sYFxuICAgIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvS2FUZVgvMC4xMi4wL2thdGV4Lm1pbi5jc3NcIiAvPlxuICAgIDwke0NTU30gLz5cbiAgICA8c3R5bGU+XG4gICAgICAuZXJyb3Ige2NvbG9yOiNmZDczNzM7IH1cbiAgICAgIC5rYXRleC1kaXNwbGF5IHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICAgICAgICB0ZXh0LWFsaWduOiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgICAgIGNvbG9yOiAjZWVlO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG4gICAgPCR7UG9wdXBDb250YWluZXJ9IGN1cnNvclBvc2l0aW9uPVwiJHtjdXJzb3JQb3NpdGlvbn1cIiBvcGVuPVwiJHtvcGVufVwiPlxuICAgICAgJHtlcnJvciAmJiBodG1sYDxzcGFuIGNsYXNzPVwiZXJyb3JcIj4ke2Vycm9yfTwvc3Bhbj5gfVxuICAgICAgPHNwYW4gY2xhc3M9XCJrYXRleC1kaXNwbGF5XCIgcmVmPVwiJHtyZWZ9XCIgLz5cbiAgICA8Ly8+XG4gIGA7XG59O1xuXG5jb25zdCBhcHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbmFwcC5kYXRhc2V0LnVzZXJzY3JpcHROYW1lPSAna2F0ZXgtcHJldmlld2VyJztcbmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKS5hcHBlbmQoYXBwKTtcbmFwcC5hdHRhY2hTaGFkb3coe21vZGU6ICdvcGVuJ30pO1xucmVuZGVyKGh0bWxgPCR7QXBwfSAvPmAsIGFwcC5zaGFkb3dSb290KTtcbiIsICJpbXBvcnR7aCBhcyB0LGh5ZHJhdGUgYXMgZSxyZW5kZXIgYXMgbixjbG9uZUVsZW1lbnQgYXMgb31mcm9tXCIuLi9odG1AMy4wLjQlMkZwcmVhY3Qvc2NyaXB0LmpzXCI7ZnVuY3Rpb24gcigpe3JldHVybihyPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPWFyZ3VtZW50c1tlXTtmb3IodmFyIG8gaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixvKSYmKHRbb109bltvXSl9cmV0dXJuIHR9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gaSh0KXt0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiB0LmNvbnRleHR9O3ZhciBlPXQuY2hpbGRyZW4sbj1mdW5jdGlvbih0LGUpe2lmKG51bGw9PXQpcmV0dXJue307dmFyIG4sbyxyPXt9LGk9T2JqZWN0LmtleXModCk7Zm9yKG89MDtvPGkubGVuZ3RoO28rKyllLmluZGV4T2Yobj1pW29dKT49MHx8KHJbbl09dFtuXSk7cmV0dXJuIHJ9KHQsW1wiY29udGV4dFwiLFwiY2hpbGRyZW5cIl0pO3JldHVybiBvKGUsbil9ZnVuY3Rpb24gYSgpe3ZhciBvPW5ldyBDdXN0b21FdmVudChcIl9wcmVhY3RcIix7ZGV0YWlsOnt9LGJ1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pO3RoaXMuZGlzcGF0Y2hFdmVudChvKSx0aGlzLl92ZG9tPXQoaSxyKHt9LHRoaXMuX3Byb3BzLHtjb250ZXh0Om8uZGV0YWlsLmNvbnRleHR9KSxmdW5jdGlvbiBlKG4sbyl7aWYoMz09PW4ubm9kZVR5cGUpcmV0dXJuIG4uZGF0YTtpZigxIT09bi5ub2RlVHlwZSlyZXR1cm4gbnVsbDt2YXIgcj1bXSxpPXt9LGE9MCxjPW4uYXR0cmlidXRlcyxsPW4uY2hpbGROb2Rlcztmb3IoYT1jLmxlbmd0aDthLS07KVwic2xvdFwiIT09Y1thXS5uYW1lJiYoaVtjW2FdLm5hbWVdPWNbYV0udmFsdWUsaVtzKGNbYV0ubmFtZSldPWNbYV0udmFsdWUpO2ZvcihhPWwubGVuZ3RoO2EtLTspe3ZhciBwPWUobFthXSxudWxsKSxkPWxbYV0uc2xvdDtkP2lbZF09dCh1LHtuYW1lOmR9LHApOnJbYV09cH12YXIgaD1vP3QodSxudWxsLHIpOnI7cmV0dXJuIHQob3x8bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGksaCl9KHRoaXMsdGhpcy5fdmRvbUNvbXBvbmVudCkpLCh0aGlzLmhhc0F0dHJpYnV0ZShcImh5ZHJhdGVcIik/ZTpuKSh0aGlzLl92ZG9tLHRoaXMuX3Jvb3QpfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQucmVwbGFjZSgvLShcXHcpL2csZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9lLnRvVXBwZXJDYXNlKCk6XCJcIn0pfWZ1bmN0aW9uIGModCxlLHIpe2lmKHRoaXMuX3Zkb20pe3ZhciBpPXt9O2lbdF09cj1udWxsPT1yP3ZvaWQgMDpyLGlbcyh0KV09cix0aGlzLl92ZG9tPW8odGhpcy5fdmRvbSxpKSxuKHRoaXMuX3Zkb20sdGhpcy5fcm9vdCl9fWZ1bmN0aW9uIGwoKXtuKHRoaXMuX3Zkb209bnVsbCx0aGlzLl9yb290KX1mdW5jdGlvbiB1KGUsbil7dmFyIG89dGhpcztyZXR1cm4gdChcInNsb3RcIixyKHt9LGUse3JlZjpmdW5jdGlvbih0KXt0PyhvLnJlZj10LG8uX2xpc3RlbmVyfHwoby5fbGlzdGVuZXI9ZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKSx0LmRldGFpbC5jb250ZXh0PW59LHQuYWRkRXZlbnRMaXN0ZW5lcihcIl9wcmVhY3RcIixvLl9saXN0ZW5lcikpKTpvLnJlZi5yZW1vdmVFdmVudExpc3RlbmVyKFwiX3ByZWFjdFwiLG8uX2xpc3RlbmVyKX19KSl9ZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odCxlLG4sbyl7ZnVuY3Rpb24gcigpe3ZhciBlPVJlZmxlY3QuY29uc3RydWN0KEhUTUxFbGVtZW50LFtdLHIpO3JldHVybiBlLl92ZG9tQ29tcG9uZW50PXQsZS5fcm9vdD1vJiZvLnNoYWRvdz9lLmF0dGFjaFNoYWRvdyh7bW9kZTpcIm9wZW5cIn0pOmUsZX1yZXR1cm4oci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShIVE1MRWxlbWVudC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrPWEsci5wcm90b3R5cGUuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrPWMsci5wcm90b3R5cGUuZGlzY29ubmVjdGVkQ2FsbGJhY2s9bCxuPW58fHQub2JzZXJ2ZWRBdHRyaWJ1dGVzfHxPYmplY3Qua2V5cyh0LnByb3BUeXBlc3x8e30pLHIub2JzZXJ2ZWRBdHRyaWJ1dGVzPW4sbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSx0LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmRvbS5wcm9wc1t0XX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3Zkb20/dGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxudWxsLGUpOih0aGlzLl9wcm9wc3x8KHRoaXMuX3Byb3BzPXt9KSx0aGlzLl9wcm9wc1t0XT1lLHRoaXMuY29ubmVjdGVkQ2FsbGJhY2soKSk7dmFyIG49dHlwZW9mIGU7bnVsbCE9ZSYmXCJzdHJpbmdcIiE9PW4mJlwiYm9vbGVhblwiIT09biYmXCJudW1iZXJcIiE9PW58fHRoaXMuc2V0QXR0cmlidXRlKHQsZSl9fSl9KSxjdXN0b21FbGVtZW50cy5kZWZpbmUoZXx8dC50YWdOYW1lfHx0LmRpc3BsYXlOYW1lfHx0Lm5hbWUscil9XG4iLCAiaW1wb3J0IHtodG1sfSBmcm9tIFwiLi4vaHRtQDMuMC40JTJGcHJlYWN0L3NjcmlwdC5qc1wiO1xuaW1wb3J0IHJlZ2lzdGVyIGZyb20gJy4uL3ByZWFjdC1jdXN0b20tZWxlbWVudEA0LjIuMS9zY3JpcHQuanMnO1xuaW1wb3J0IHt1c2VSZWYsIHVzZUVmZmVjdH0gZnJvbSAnLi4vcHJlYWN0QDEwLjUuMTMvaG9va3MuanMnO1xuXG5jb25zdCBEcm9wZG93bk1lbnUgPSAoe3Byb3BzfSkgPT4ge1xuICBjb25zdCByZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IHtjaGlsZHJlbiwgbWVzc2FnZXMsIHBvc2l0aW9uLCBzZWxlY3RlZH0gPSBwcm9wcztcbiAgXG4gIC8vIOimgee0oOOBjOaPj+eUu+mgmOWfn+WkluOBq+OBguOBo+OBn+OCieOAgXNjcm9sbOOBl+OBpuimi+OBiOOCi+OCiOOBhuOBq+OBmeOCi1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHVsID0gcmVmLmN1cnJlbnQ7XG4gICAgY29uc3Qgc2VsZWN0ZWRMaSA9IHVsPy5xdWVyeVNlbGVjdG9yPy4oYGxpW2RhdGEta2V5PVwiJHtzZWxlY3RlZH1cIl1gKTtcbiAgICBpZiAoIXNlbGVjdGVkTGkpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCByb290ID0gdWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgaXRlbSA9IHNlbGVjdGVkTGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKHJvb3QudG9wID4gaXRlbS50b3ApIHtcbiAgICAgIHVsLnNjcm9sbFRvcCAtPSByb290LnRvcCAtIGl0ZW0udG9wO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocm9vdC5ib3R0b20gPCBpdGVtLmJvdHRvbSkge1xuICAgICAgdWwuc2Nyb2xsVG9wICs9IGl0ZW0uYm90dG9tIC0gcm9vdC5ib3R0b207XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGJyb3dzZXLjga7ooajnpLrpoJjln5/lhoXjgavjgoLlj47jgoHjgotcbiAgICBjb25zdCB7dG9wLCBib3R0b219ID0gc2VsZWN0ZWRMaS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBpZiAodG9wIDwgMCApIHtcbiAgICAgIHNlbGVjdGVkTGkuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGJvdHRvbSA+IHdpbmRvdy5pbm5lckhlaWdodCkge1xuICAgICAgc2VsZWN0ZWRMaS5zY3JvbGxJbnRvVmlldyhmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9LCBbc2VsZWN0ZWRdKTtcbiAgXG4gIHJldHVybiBodG1sYFxuICAgIDxzdHlsZT5cbiAgICAgIHVsIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDEwMCU7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHotaW5kZXg6IDEwMDA7XG4gICAgICAgIG1pbi13aWR0aDogMTYwcHg7XG4gICAgICAgIG1heC13aWR0aDogNTB2dztcbiAgICAgICAgbWF4LWhlaWdodDogODB2aDtcbiAgICAgICAgcGFkZGluZzogNXB4IDA7XG4gICAgICAgIG1hcmdpbjogMnB4IDAgMDtcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICBsaW5lLWhlaWdodDogMjhweDtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgY29sb3I6IHZhcigtLWRyb3Bkb3duLXRleHQtY29sb3IsICMzMzMpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kcm9wZG93bi1iZywgI2ZmZik7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWRyb3Bkb3duLWJvcmRlci1jb2xvciwgcmdiYSgwLDAsMCwwLjE1KSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgYm94LXNoYWRvdzogMCA2cHggMTJweCB2YXIoLS1kcm9wZG93bi1zaGFkb3ctY29sb3IsIHJnYmEoMCwwLDAsMC4xNzUpKTtcbiAgICAgICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgfVxuICAgICAgbGkgPiAqIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgcGFkZGluZzogMHB4IDIwcHg7XG4gICAgICAgIGNsZWFyOiBib3RoO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgfVxuICAgICAgbGkgPiBhIHtcbiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuICAgICAgbGkgPiBhOmhvdmVyIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWRyb3Bkb3duLWl0ZW0taG92ZXItdGV4dC1jb2xvciwgIzI2MjYyNik7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRyb3Bkb3duLWl0ZW0taG92ZXItYmcsICNmNWY1ZjUpO1xuICAgICAgfVxuICAgICAgbGkuc2VsZWN0ZWQge1xuICAgICAgICBjb2xvcjogdmFyKC0tZHJvcGRvd24taXRlbS1ob3Zlci10ZXh0LWNvbG9yLCAjMjYyNjI2KTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZHJvcGRvd24taXRlbS1ob3Zlci1iZywgI2Y1ZjVmNSk7XG4gICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMHB4IDBweCAzcHggdmFyKC0tZHJvcGRvd24taXRlbS1zZWxlY3QtYm9yZGVyLWNvbG9yLCAjNjZhZmU5OTkpO1xuICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgZWFzZS1pbi1vdXQgMC4xNXMsYm94LXNoYWRvdyBlYXNlLWluLW91dCAwLjE1cztcbiAgICAgIH1cbiAgICAgIGxpLm1lc3NhZ2Uge1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgIH1cbiAgICAgIGltZyB7XG4gICAgICAgIGhlaWdodDogMS4zZW07XG4gICAgICAgIG1hcmdpbi1yaWdodDogM3B4O1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB9XG4gICAgPC9zdHlsZT5cbiAgICA8dWwgcmVmPVwiJHtyZWZ9XCIgc3R5bGU9XCJ0b3A6ICR7cG9zaXRpb24udG9wfXB4OyBsZWZ0OiAke3Bvc2l0aW9uLmxlZnR9cHg7XCI+XG4gICAgICAkeyhBcnJheS5pc0FycmF5KG1lc3NhZ2VzKSA/IG1lc3NhZ2VzIDogbWVzc2FnZXMgPyBbbWVzc2FnZXNdIDogW10pLm1hcChtZXNzYWdlID0+IGh0bWxgPGxpIGNsYXNzPVwibWVzc2FnZVwiPiR7bWVzc2FnZX08L2xpPmApfVxuICAgICAgJHtjaGlsZHJlbi5tYXAoXG4gICAgICAgIGNoaWxkID0+IGh0bWxgXG4gICAgICAgICAgPGxpIGtleT1cIiR7Y2hpbGQua2V5fVwiXG4gICAgICAgICAgICBkYXRhLWtleT1cIiR7Y2hpbGQua2V5fVwiXG4gICAgICAgICAgICBjbGFzcz1cIiR7Y2hpbGQua2V5ID09PSBzZWxlY3RlZCAmJiAnc2VsZWN0ZWQnfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAke2NoaWxkfVxuICAgICAgICAgIDwvbGk+XG4gICAgICBgKX1cbiAgICA8L3VsPmA7XG59O1xuXG4vLyBDdXN0b20gRWxlbWVudOOBq+OBmeOCi1xuY29uc3QgdGFnID0gJ3gtdXNlcnNjcmlwdC1kcm9wZG93bi1tZW51JztcbnJlZ2lzdGVyKERyb3Bkb3duTWVudSwgdGFnLCBbJ3Byb3BzJ10sIHtzaGFkb3c6IHRydWV9KTtcbmNvbnN0IGRyb3Bkb3duTWVudSA9IHByb3BzID0+IGh0bWxgPCR7dGFnfSBwcm9wcz1cIiR7cHJvcHN9XCIgLz5gO1xuZXhwb3J0IHtkcm9wZG93bk1lbnUgYXMgRHJvcGRvd25NZW51fTtcbiIsICJpbXBvcnQge3VzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZUNhbGxiYWNrfSBmcm9tICcuLi9wcmVhY3RAMTAuNS4xMy9ob29rcy5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTZWxlY3Qoe1xuICBsaXN0LFxuICBvbkJsdXIsXG4gIGRlZmF1bHRTZWxlY3RlZCxcbn0pIHtcbiAgY29uc3QgW2luZGV4LCBzZXRJbmRleF0gPSB1c2VTdGF0ZShkZWZhdWx0U2VsZWN0ZWQpOyAvLyDmnKrpgbjmip7jga7jgajjgY3jga91bmRlZmluZWTjgavjgarjgotcbiAgY29uc3QgaXRlbSA9IHVzZU1lbW8oKCkgPT4gbGlzdFtpbmRleCA/PyBkZWZhdWx0U2VsZWN0ZWRdLCBbaW5kZXgsIGxpc3QsIGRlZmF1bHRTZWxlY3RlZF0pO1xuICBcbiAgLy8g5YmN44Gu6aCF55uu44Gr56e75YuV44GZ44KLXG4gIGNvbnN0IHNlbGVjdFByZXYgPSB1c2VDYWxsYmFjayhcbiAgICAoKSA9PiBzZXRJbmRleChfaW5kZXggPT4gKChfaW5kZXggPz8gMCkgLSAxICsgbGlzdC5sZW5ndGgpICUgbGlzdC5sZW5ndGgpLFxuICBbbGlzdF0pO1xuICAvLyDmrKHjga7poIXnm67jgavnp7vli5XjgZnjgotcbiAgY29uc3Qgc2VsZWN0TmV4dCA9IHVzZUNhbGxiYWNrKFxuICAgICgpID0+IHNldEluZGV4KF9pbmRleCA9PiAoKF9pbmRleCA/PyAtMSkgKyAxKSAlIGxpc3QubGVuZ3RoKSxcbiAgW2xpc3RdKTtcbiAgLy8g6aCF55uu6YG45oqe44KS6Kej6Zmk44GZ44KLXG4gIGNvbnN0IGJsdXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SW5kZXgodW5kZWZpbmVkKTtcbiAgICBvbkJsdXI/LigpO1xuICB9LCBbXSk7XG4gIFxuICByZXR1cm4ge1xuICAgIGl0ZW0sXG4gICAgc2VsZWN0OiBzZXRJbmRleCxcbiAgICBzZWxlY3RQcmV2LFxuICAgIHNlbGVjdE5leHQsXG4gICAgYmx1cixcbiAgfTtcbn1cbiIsICJjb25zdCBJTklUUEFUID0gMHg4MDAwMDAwMDsgLy8gMDEwMCwwMDAwLDAwMDAsMDAwMCwwMDAwLDAwMDAsMDAwMCwwMDAwXG5jb25zdCBNQVhDSEFSID0gMHgxMDAwMDtcbmNvbnN0IElOSVRTVEFURSA9IFtJTklUUEFULCAwLCAwLCAwXTsgLy8g5Yid5pyf54q25oWL44Gu54q25oWL6YG356e75qmf5qKwXG5jb25zdCBpc3VwcGVyID0gYyA9PiAoYyA+PSAweDQxKSAmJiAoYyA8PSAweDVhKTtcbmNvbnN0IGlzbG93ZXIgPSBjID0+IChjID49IDB4NjEpICYmIChjIDw9IDB4N2EpO1xuY29uc3QgdG9sb3dlciA9IGMgPT4gaXN1cHBlcihjKSA/IChjICsgMHgyMCkgOiBjO1xuY29uc3QgdG91cHBlciA9IGMgPT4gaXNsb3dlcihjKSA/IChjIC0gMHgyMCkgOiBjO1xuY29uc3QgdW5wYWNrID0gc3RyID0+IHN0ci5zcGxpdCgnJykubWFwKGMgPT4gYy5jaGFyQ29kZUF0KDApKTtcblxuZXhwb3J0IGZ1bmN0aW9uIEFzZWFyY2goc291cmNlKSB7XG4gIGNvbnN0IHNoaWZ0cGF0ID0gWy4uLkFycmF5KE1BWENIQVIpXS5tYXAoXyA9PiAwKTtcbiAgbGV0IGVwc2lsb24gPSAwO1xuICBcbiAgLy8g5Y+X55CG54q25oWL44KS5L2c44KLXG4gIGxldCBtYXNrID0gSU5JVFBBVDtcbiAgZm9yIChsZXQgaSBvZiB1bnBhY2soc291cmNlKSkge1xuICAgIGlmIChpID09PSAweDIwKSB7XG4gICAgICBlcHNpbG9uIHw9IG1hc2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNoaWZ0cGF0W2ldIHw9IG1hc2s7XG4gICAgICBzaGlmdHBhdFt0b3VwcGVyKGkpXSB8PSBtYXNrO1xuICAgICAgc2hpZnRwYXRbdG9sb3dlcihpKV0gfD0gbWFzaztcbiAgICAgIG1hc2sgPj4+PSAxO1xuICAgIH1cbiAgfVxuICBjb25zdCBhY2NlcHRwYXQgPSBtYXNrOyAvLyDlj5fnkIbnirbmhYsg5bem44GL44KJ5pWw44GI44GmdW5wYWNrKHNvdXJjZSnjga7plbfjgZXjgajnrYnjgZfjgYTloLTmiYDjgavjg5Xjg6njgrDjgYznq4vjgaPjgabjgYTjgotcblxuICBmdW5jdGlvbiBnZXRTdGF0ZSAoc3RhdGU9SU5JVFNUQVRFLCBzdHIgPSAnJykge1xuICAgIGxldCBpMCA9IHN0YXRlWzBdO1xuICAgIGxldCBpMSA9IHN0YXRlWzFdO1xuICAgIGxldCBpMiA9IHN0YXRlWzJdO1xuICAgIGxldCBpMyA9IHN0YXRlWzNdO1xuICAgIGZvciAobGV0IGMgb2YgdW5wYWNrKHN0cikpIHtcbiAgICAgIG1hc2sgPSBzaGlmdHBhdFtjXTtcbiAgICAgIGkzID0gKGkzICYgZXBzaWxvbikgfCAoKGkzICYgbWFzaykgPj4+IDEpIHwgKGkyID4+PiAxKSB8IGkyO1xuICAgICAgaTIgPSAoaTIgJiBlcHNpbG9uKSB8ICgoaTIgJiBtYXNrKSA+Pj4gMSkgfCAoaTEgPj4+IDEpIHwgaTE7XG4gICAgICBpMSA9IChpMSAmIGVwc2lsb24pIHwgKChpMSAmIG1hc2spID4+PiAxKSB8IChpMCA+Pj4gMSkgfCBpMDtcbiAgICAgIGkwID0gKGkwICYgZXBzaWxvbikgfCAoKGkwICYgbWFzaykgPj4+IDEpO1xuICAgICAgaTEgfD0gKGkwID4+PiAxKTtcbiAgICAgIGkyIHw9IChpMSA+Pj4gMSk7XG4gICAgICBpMyB8PSAoaTIgPj4+IDEpO1xuICAgIH1cbiAgICByZXR1cm4gW2kwLCBpMSwgaTIsIGkzXVxuICB9XG4gIFxuICBmdW5jdGlvbiBtYXRjaCAoc3RyLCBhbWJpZyA9IDApIHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKElOSVRTVEFURSwgc3RyKTtcbiAgICBpZiAoYW1iaWcgPj0gSU5JVFNUQVRFLmxlbmd0aCkge1xuICAgICAgYW1iaWcgPSBJTklUU1RBVEUubGVuZ3RoLTE7XG4gICAgfVxuICAgIHJldHVybiAoc3RhdGVbYW1iaWddICYgYWNjZXB0cGF0KSAhPT0gMDtcbiAgfVxuXG4gIG1hdGNoLnNvdXJjZSA9IHNvdXJjZTtcblxuICByZXR1cm4gbWF0Y2g7XG59XG4iLCAiaW1wb3J0IHt1c2VNZW1vfSBmcm9tICcuLi9wcmVhY3RAMTAuNS4xMy9ob29rcy5qcyc7XG5pbXBvcnQge0FzZWFyY2h9IGZyb20gJy4uL2FzZWFyY2hAMS4wLjIvc2NyaXB0LmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNlYXJjaCh7cXVlcnksIGxpc3QsIGNvbnZlcnQgPSB0ZXh0ID0+IHRleHR9ID0ge30pIHtcbiAgcmV0dXJuIHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghcXVlcnl8fCBxdWVyeSA9PT0gJycpIHJldHVybiBsaXN0O1xuICAgIFxuICAgIC8vIOOBguOBhOOBvuOBhOW6puOCkuioreWumuOBmeOCi1xuICAgIGNvbnN0IGFtYmlnID0gTWF0aC5taW4oTWF0aC5mbG9vcihxdWVyeS5sZW5ndGggLyA0KSwgNCk7XG4gICAgY29uc3QgbWF0Y2ggPSBBc2VhcmNoKGAgJHtxdWVyeX0gYCk7XG4gICAgLy8gVE9ETzog44GC44GE44G+44GE5bqm6aCG44Gr5Lim44Gz5pu/44GI44KLXG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKGl0ZW0gPT4gbWF0Y2goY29udmVydChpdGVtKSwgYW1iaWcpKTtcbiAgfSwgW3F1ZXJ5LCBsaXN0LCBjb252ZXJ0XSk7XG59IiwgImltcG9ydCB7aHRtbH0gZnJvbSAnLi4vaHRtQDMuMC40JTJGcHJlYWN0L3NjcmlwdC5qcyc7XG5pbXBvcnQge0Ryb3Bkb3duTWVudX0gZnJvbSAnLi4vZHJvcGRvd24tY29udGFpbmVyQDAuMS4xL3NjcmlwdC5qcyc7XG5pbXBvcnQge3VzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0fSBmcm9tICcuLi9wcmVhY3RAMTAuNS4xMy9ob29rcy5qcyc7XG5pbXBvcnQge3VzZVNlbGVjdH0gZnJvbSAnLi4vdXNlLXNlbGVjdEAwLjEuMC9zY3JpcHQuanMnO1xuaW1wb3J0IHt1c2VTZWFyY2h9IGZyb20gJy4uL3VzZS1zZWFyY2hAMC4xLjAvc2NyaXB0LmpzJztcblxuZXhwb3J0IGNvbnN0IEZ1enp5U2VsZWN0ID0gKHtsaXN0OiBfaW5pdGlhbExpc3QsIG9uU2VsZWN0LCBjb252ZXJ0fSkgPT4ge1xuICAvLyBEcm9wRG93buOBruW6p+aomeioiOeul1xuICBjb25zdCBbcG9zaXRpb24sIHNldFBvc2l0aW9uXSA9IHVzZVN0YXRlKHt9KTtcbiAgY29uc3QgYWRqdXN0ID0gdXNlQ2FsbGJhY2socmVmID0+IHtcbiAgICBjb25zdCB7bGVmdD0gMCwgYm90dG9tID0gMH0gPSByZWY/LmN1cnJlbnQ/LmdldEJvdWRpbmdDbGllbnRSZWN0Py4oKSA/PyB7fTtcbiAgICBzZXRQb3NpdGlvbih7dG9wOiBib3R0b20sIGxlZnR9KTtcbiAgfSwgW10pO1xuICBcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtkaXNwbGF5LCBzZXREaXNwbGF5XSA9IHVzZVN0YXRlKCcnKTsgLy8gPGlucHV0PuOBq+ihqOekuuOBmeOCi+aWh+Wtl+WIl1xuICBjb25zdCBsaXN0ID0gdXNlU2VhcmNoKHtxdWVyeSwgbGlzdDogX2luaXRpYWxMaXN0LCBjb252ZXJ0fSk7XG4gIGNvbnN0IHtcbiAgICBpdGVtLFxuICAgIHNlbGVjdFByZXYsXG4gICAgc2VsZWN0TmV4dCxcbiAgICBzZWxlY3QsXG4gICAgYmx1cixcbiAgfSA9IHVzZVNlbGVjdCh7bGlzdH0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXRlbSkgcmV0dXJuO1xuICAgIG9uU2VsZWN0Py4oaXRlbSk7XG4gICAgc2V0RGlzcGxheShpdGVtLnRleHQpO1xuICB9LCBbaXRlbV0pO1xuICBcbiAgLy8g6ZaL6ZaJ5Yik5a6a44O76KGo56S644GZ44KL5paH5a2X5YiX44Gu5pu05paw44O75qSc57Si5paH5a2X5YiX44Gu5pu05pawXG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3Qgb25JbnB1dCA9IHVzZUNhbGxiYWNrKCh7dGFyZ2V0OiB7dmFsdWV9fSkgPT4ge1xuICAgIHNldERpc3BsYXkodmFsdWUpO1xuICAgIHNldE9wZW4odHJ1ZSk7XG4gICAgaWYgKGl0ZW0/LnRleHQgPT09IHZhbHVlKSByZXR1cm47XG4gICAgYmx1cigpO1xuICAgIHNldFF1ZXJ5KHZhbHVlKTtcbiAgfSwgW2l0ZW1dKTtcbiAgY29uc3Qgb25DbGljayA9ICgpID0+IHNldE9wZW4ob2xkID0+ICFvbGQpO1xuICBjb25zdCBvbkJsdXIgPSAoKSA9PiAhZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiBzZXRPcGVuKGZhbHNlKTtcbiAgXG4gIGNvbnN0IG9uS2V5RG93biA9IHVzZUNhbGxiYWNrKGUgPT4ge1xuICAgIGNvbnN0IHtrZXksIHNoaWZ0S2V5fSA9IGU7XG4gICAgaWYgKGtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBzZXRPcGVuKGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGtleSA9PT0gJ0VudGVyJykge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGlmICghaXRlbSkge1xuICAgICAgICBzZWxlY3QoMCk7XG4gICAgICB9XG4gICAgICBzZXRPcGVuKGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gd2luZG9344GM6ZaL44GE44Gm44GE44Gq44GR44KM44Gw44CBZm9jdXPjgpLliKXjga5jb21wb25lbnTjgavnp7vjgZlcbiAgICBpZiAoa2V5ID09PSAnVGFiJyAmJiAhb3BlbikgcmV0dXJuO1xuICAgIFxuICAgIGlmIChrZXkgPT09ICdBcnJvd1VwJyB8fCAoa2V5ID09PSAnVGFiJyAmJiBzaGlmdEtleSkpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBzZWxlY3RQcmV2KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChrZXkgPT09ICdBcnJvd0Rvd24nIHx8IChrZXkgPT09ICdUYWInICYmICFzaGlmdEtleSkpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBzZWxlY3ROZXh0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9LCBbc2VsZWN0UHJldiwgc2VsZWN0TmV4dCwgc2VsZWN0LCBvcGVuXSk7XG4gIGNvbnN0IG9uV2hlZWwgPSB1c2VDYWxsYmFjayhlID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCB7ZGVsdGFZfSA9IGU7XG4gICAgaWYgKGRlbHRhWSA+IDApIHtcbiAgICAgIHNlbGVjdE5leHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGRlbHRhWSA8IDApIHtcbiAgICAgIHNlbGVjdFByZXYoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0sIFtzZWxlY3ROZXh0LCBzZWxlY3RQcmV2XSk7XG4gIFxuICBjb25zdCBvbkNsaWNrSXRlbSA9IHVzZUNhbGxiYWNrKChpbmRleCkgPT4ge1xuICAgIHNlbGVjdChpbmRleCk7XG4gICAgc2V0T3BlbihmYWxzZSk7XG4gIH0sIFtdKTtcbiAgXG4gIHJldHVybiBodG1sYDxzcGFuIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxuICAgICAgPGlucHV0XG4gICAgICAgIHJlZj1cIiR7YWRqdXN0fVwiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgdmFsdWU9XCIke2Rpc3BsYXl9XCJcbiAgICAgICAgb25JbnB1dD1cIiR7b25JbnB1dH1cIlxuICAgICAgICBvbkJsdXI9XCIke29uQmx1cn1cIlxuICAgICAgICBvbkNsaWNrPVwiJHtvbkNsaWNrfVwiXG4gICAgICAgIG9uS2V5RG93bj1cIiR7b25LZXlEb3dufVwiXG4gICAgICAgIG9uV2hlZWw9XCIke29uV2hlZWx9XCJcbiAgICAgICAgLz5cbiAgICAgICR7b3BlbiAmJiBodG1sYDwke0Ryb3Bkb3duTWVudX0gcG9zaXRpb249XCIkeyh7fSl9XCIgXG4gICAgICAgIG1lc3NhZ2VzPVwiJHtsaXN0Lmxlbmd0aCA9PT0gMCAmJiBodG1sYDxzcGFuIGNsYXNzPVwibWVzc2FnZVwiPk5vdCBmb3VuZDwvc3Bhbj5gfVwiXG4gICAgICAgIHNlbGVjdGVkPVwiJHtpdGVtPy5rZXl9XCI+XG4gICAgICAgICR7bGlzdC5tYXAoXG4gICAgICAgICAgKHtrZXksIHRleHR9LCBpbmRleCkgPT4gaHRtbGBcbiAgICAgICAgICAgIDxhIGtleT1cIiR7a2V5fVwiIG9uQ2xpY2s9XCIkeygpID0+IG9uQ2xpY2tJdGVtKGluZGV4KX1cIj4ke3RleHR9PC9hPlxuICAgICAgICAgIGBcbiAgICAgICAgKX1cbiAgICAgIDwvLz5gfVxuICA8L3NwYW4+YDtcbn07XG5leHBvcnQgZnVuY3Rpb24gdXNlRnV6enlTZWxlY3QocHJvcHMpIHtcbiAgY29uc3Qge3F1ZXJ5LCBsaXN0OiBpbml0aWFsTGlzdCA9IFtdLCBjb252ZXJ0fSA9IHByb3BzID8/IHt9O1xuICBjb25zdCBsaXN0ID0gdXNlU2VhcmNoKHtxdWVyeSwgbGlzdDogaW5pdGlhbExpc3QsIGNvbnZlcnR9KTtcbiAgY29uc3Qge2l0ZW0sIHNlbGVjdFByZXYsIHNlbGVjdE5leHR9XG4gICAgPSB1c2VTZWxlY3Qoe1xuICAgICAgbGlzdCxcbiAgICAgIGRlZmF1bHRTZWxlY3RlZDogMCxcbiAgICB9KTtcbiAgXG59XG4iLCAiaW1wb3J0IHt1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VDYWxsYmFja30gZnJvbSAnLi4vcHJlYWN0QDEwLjUuMTMvaG9va3MuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlTG9hZGVyKF9jYWxsYmFjaywge2RlbGF5fSwgZGVwcyA9IFtdKSB7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgY2FsbGJhY2sgPSB1c2VDYWxsYmFjayhfY2FsbGJhY2ssIGRlcHMpOyAvLyDjgZPjgozjgpLlhaXjgozjgarjgYTjgajjgIFjYWxsYmFja+OBjOS9leW6puOCgnJlbmRlcmluZ+OBleOCjOOBpuOBl+OBvuOBhlxuICBcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHNldExvYWRpbmcodHJ1ZSksIGRlbGF5KTtcbiAgICAgIGF3YWl0IGNhbGxiYWNrKCk7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgfSkoKTtcbiAgfSwgW2NhbGxiYWNrLCBkZWxheSwgLi4uZGVwc10pO1xuICBcbiAgcmV0dXJuIHtsb2FkaW5nfTtcbn1cbiIsICJpbXBvcnQge2h0bWx9IGZyb20gJy4uL2h0bUAzLjAuNCUyRnByZWFjdC9zY3JpcHQuanMnO1xuXG5leHBvcnQgY29uc3QgQmFja2dyb3VuZCA9ICh7b25DbG9zZX0pID0+IGh0bWxgPGRpdiBjbGFzcz1cImJhY2tncm91bmRcIiBvbkNsaWNrPVwiJHtvbkNsb3NlfVwiLz5gO1xuZXhwb3J0IGNvbnN0IENTUyA9IGBcbi5iYWNrZ3JvdW5kIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tb2RhbC1iZywgcmdiYSgwLCAwLCAwLCAwLjQpKTtcbiAgei1pbmRleDogODk5OTk7XG59XG5gO1xuICAiLCAiaW1wb3J0IHtodG1sfSBmcm9tICcuLi9odG1AMy4wLjQlMkZwcmVhY3Qvc2NyaXB0LmpzJztcblxuZXhwb3J0IGNvbnN0IEVycm9yTXNnID0gKHtlcnJvcn0pID0+IGVycm9yICYmIGh0bWxgXG4gIDxkaXYgY2xhc3M9XCJlcnJvclwiPiR7ZXJyb3J9PC9kaXY+XG5gO1xuZXhwb3J0IGNvbnN0IENTUyA9IGBcbi5lcnJvciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAxNXB4O1xuICBtYXJnaW46IDIwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2ViY2NkMTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZGVkZTtcbiAgY29sb3I6ICNhOTQ0NDI7XG59XG4uZXJyb3I6OmJlZm9yZSB7XG4gIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHgvMSBGb250QXdlc29tZTtcbiAgY29udGVudDogJ1xcZjA3MSc7XG4gIG1hcmdpbi1yaWdodDogLjNlbTtcbn1cbmA7XG4iLCAiZXhwb3J0IGNvbnN0IHRvTGMgPSB0ZXh0ID0+IHRleHQudG9Mb3dlckNhc2UoKVxuICAucmVwbGFjZUFsbCgnICcsICdfJylcbiAgLnJlcGxhY2UoL1svPyNcXHt9Xnw8Pl0vZywgY2hhciA9PiBlbmNvZGVVUklDb21wb25lbnQoY2hhcikpO1xuIiwgImltcG9ydCB7aHRtbCwgcmVuZGVyfSBmcm9tICcuLi9odG1AMy4wLjQlMkZwcmVhY3Qvc2NyaXB0LmpzJztcbmltcG9ydCB7dGhyb3R0bGV9IGZyb20gJy4uL2N1c3RvbS10aHJvdHRsZS9zY3JpcHQuanMnO1xuaW1wb3J0IHtGdXp6eVNlbGVjdH0gZnJvbSAnLi4vZnV6enktc2VsZWN0LW1lbnVAMC4xLjAvc2NyaXB0LmpzJztcbmltcG9ydCB7dXNlU3RhdGUsIHVzZU1lbW8sIHVzZUVmZmVjdH0gZnJvbSAnLi4vcHJlYWN0QDEwLjUuMTMvaG9va3MuanMnO1xuaW1wb3J0IHt1c2VMb2FkZXJ9IGZyb20gJy4uL3VzZS1sb2FkZXIvc2NyaXB0LmpzJztcbmltcG9ydCB7QmFja2dyb3VuZCwgQ1NTIGFzIEJhY2tncm91bmRDU1N9IGZyb20gJy4uL21vZGFsLWJhY2tncm91bmRAMC4xLjAvc2NyaXB0LmpzJztcbmltcG9ydCB7UHJvamVjdFNlbGVjdG9yfSBmcm9tICcuL3NlbGVjdG9yLmpzJztcbmltcG9ydCB7RXJyb3JNc2csIENTUyBhcyBFcnJvckNTU30gZnJvbSAnLi9lcnJvci5qcyc7XG5pbXBvcnQge3RvTGN9IGZyb20gJy4uL3NjcmFwYm94LXRpdGxlTGMvc2NyaXB0LmpzJztcblxuY29uc3QgQXBwID0gKHt3YXRjaExpc3R9KSA9PiB7XG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Byb2plY3QsIHNldFByb2plY3RdID0gdXNlU3RhdGUoc2NyYXBib3guUHJvamVjdC5uYW1lKTtcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtkaXNhYmxlZCwgc2V0RGlzYWJsZWRdID0gdXNlU3RhdGUodHJ1ZSk7XG4gIC8vIOODnOOCv+ODs+OBrueKtuaFi+OBi+OCieOAgeaoquaWreaknOe0ouOBrumWi+Wni+OCkuWIpOWumuOBmeOCi1xuICBjb25zdCBxdWVyeUZvclByb2plY3QgPSB1c2VNZW1vKCgpID0+IGRpc2FibGVkID8gcXVlcnkgOiAnJywgW2Rpc2FibGVkLCBxdWVyeV0pO1xuICBcbiAgY29uc3QgW2luY2x1ZGVXYXRjaExpc3QsIHNldEluY2x1ZGVXYXRjaExpc3RdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCB7bG9hZGluZywgaXRlbXN9ID0gdXNlU2VhcmNoKHtwcm9qZWN0LCBxdWVyeX0pOyAvLyDlhajmlofmpJzntKLjgZnjgotcbiAgY29uc3Qge3NlYXJjaGluZywgZXJyb3IsIHByb2plY3RzfSA9IHVzZVByb2plY3RTZWFyY2goeyAvLyBwcm9qZWN044KS5qiq5pat5qSc57Si44GZ44KLXG4gICAgcXVlcnk6IHF1ZXJ5Rm9yUHJvamVjdCxcbiAgICB3YXRjaExpc3Q6IHdhdGNoTGlzdCxcbiAgICBpbmNsdWRlV2F0Y2hMaXN0LFxuICB9KTtcbiAgLy8gRnV6enlTZWxlY3TnlKjjgavjg4fjg7zjgr/jgpLliqDlt6XjgZnjgotcbiAgY29uc3QgbGlzdCA9IHVzZU1lbW8oKCkgPT4gXG4gICAgcHJvamVjdHMubWFwKCh7aWQsIG5hbWUsIGRpc3BsYXlOYW1lfSkgPT4gKHtrZXk6IG5hbWUsIHRleHQ6IGRpc3BsYXlOYW1lfSkpLFxuICBbcHJvamVjdHNdKTtcbiAgXG4gIC8vIOaoquaWreaknOe0ouOBrkFQSSBsaW1pdOOBq+W8leOBo+OBi+OBi+OBo+OBpuOBhOOCi+OBqOOBjeOBr+ODnOOCv+ODs+OCkueEoeWKueWMluOBmeOCi1xuICB1c2VFZmZlY3QoKCkgPT4gZXJyb3IgJiYgc2V0RGlzYWJsZWQodHJ1ZSksIFtlcnJvcl0pO1xuICBcbiAgLy8g5YWl5Yqb5qyE44Gu5YCk44KS5Y+N5pig44GZ44KLXG4gIGNvbnN0IG9uUHJvamVjdENoYW5nZSA9ICh7a2V5fSkgPT4gc2V0UHJvamVjdChrZXkpO1xuICBjb25zdCBvbklucHV0ID0gKHt0YXJnZXQ6IHt2YWx1ZX19KSA9PiB7XG4gICAgc2V0RGlzYWJsZWQoZmFsc2UpO1xuICAgIHNldFF1ZXJ5KHZhbHVlKTtcbiAgfTtcbiAgXG4gIC8vIGNvbXBvbmVudOOCkumWieOBmOOCi1xuICBjb25zdCBjbG9zZSA9ICgpID0+IHNldE9wZW4oZmFsc2UpO1xuICBjb25zdCBoYW5kbGVLZXlkb3duID0gKHtrZXl9KSA9PiB7XG4gICAgaWYgKGtleSAhPT0gJ0VzY2FwZScpIHJldHVybjtcbiAgICBjbG9zZSgpO1xuICB9XG4gIGNvbnN0IG9uQ2xpY2sgPSAoe2N0cmxLZXksIHNoaWZ0S2V5LCBhbHRLZXksIG1ldGFLZXksIHRhcmdldH0pID0+IHtcbiAgICBpZiAodGFyZ2V0LnRhcmdldCA9PT0gJ19ibGFuaycgfHwgY3RybEtleSB8fCBzaGlmdEtleSB8fCBhbHRLZXkgfHwgbWV0YUtleSkgcmV0dXJuO1xuICAgIGNsb3NlKCk7XG4gIH07XG4gIFxuICAvLyBwcm9qZWN05qiq5pat5qSc57Si44KS6ZaL5aeL44GZ44KLXG4gIGNvbnN0IG9uRmlsdGVyID0gKCkgPT4ge1xuICAgIHNldERpc2FibGVkKHRydWUpO1xuICB9XG4gIFxuICAvLyBQYWdlIE1lbnXjgYvjgonmk43kvZzjgZnjgotcbiAgdXNlRWZmZWN0KCgpID0+IHNjcmFwYm94LlBhZ2VNZW51LmFkZEl0ZW0oe1xuICAgIHRpdGxlOiAnRnVsbHRleHQgU2VhcmNoJyxcbiAgICBpbWFnZTogJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9ub3RhL2thbW9uL21hc3Rlci9zdmcvc2VhcmNoLnN2ZycsXG4gICAgb25DbGljazogKCkgPT4gc2V0T3Blbih0cnVlKSxcbiAgfSksIFtdKTtcbiAgXG4gIHJldHVybiBvcGVuICYmIGh0bWxgXG4gICAgPCR7QmFja2dyb3VuZH0gb25DbG9zZT1cIiR7Y2xvc2V9XCIvPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIiBvbktleWRvd25DYXB0dXJlPVwiJHtoYW5kbGVLZXlkb3dufVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1mb3JtXCI+XG4gICAgICAgIDwke0Z1enp5U2VsZWN0fVxuICAgICAgICAgIGxpc3Q9XCIke2xpc3R9XCJcbiAgICAgICAgICBjb252ZXJ0PVwiJHsoe2tleSwgdGV4dH0pID0+IGAke2tleX0gJHt0ZXh0fWB9XCJcbiAgICAgICAgICBvblNlbGVjdD1cIiR7b25Qcm9qZWN0Q2hhbmdlfVwiIC8+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHZhbHVlPVwiJHtxdWVyeX1cIiBvbklucHV0PVwiJHtvbklucHV0fVwiIC8+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9XCIke29uRmlsdGVyfVwiIGRpc2FibGVkPVwiJHtkaXNhYmxlZH1cIj5cbiAgICAgICAgICAke2Rpc2FibGVkID9cbiAgICAgICAgICAgIGAke3NlYXJjaGluZyA/ICdTZWFyY2hpbmcuLi46ICcgOiAnJ31Gb3VuZCAke3Byb2plY3RzLmxlbmd0aH0gcHJvamVjdHNgIDpcbiAgICAgICAgICAgICdTZWFyY2ggZm9yIGFsbCBwcm9qZWN0cydcbiAgICAgICAgICB9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIHZhbHVlPVwiJHshaW5jbHVkZVdhdGNoTGlzdH1cIlxuICAgICAgICAgIG9uQ2hhbmdlPVwiJHsoe3RhcmdldH0pID0+IHNldEluY2x1ZGVXYXRjaExpc3QodGFyZ2V0LnZhbHVlKX1cIiAvPlxuICAgICAgICA8bGFiZWw+U2VhcmNoIGJlc2lkZXMgd2F0Y2ggbGlzdDwvbGFiZWw+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mb1wiPlxuICAgICAgICAgICR7bG9hZGluZyA/IGBTZWFyY2hpbmcgZm9yICR7cXVlcnl9Li4uYCA6IGAke2l0ZW1zLmxlbmd0aH0gcmVzdWx0c2B9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPCR7RXJyb3JNc2d9IGVycm9yPVwiJHtlcnJvcn1cIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICAke2l0ZW1zLmxlbmd0aCA+IDAgJiYgaHRtbGBcbiAgICAgICAgPHVsIGNsYXNzPVwiZHJvcGRvd25cIj5cbiAgICAgICAgICAke2l0ZW1zLm1hcChpdGVtID0+IGh0bWxgPGxpIGtleT1cIiR7aXRlbS50aXRsZX1cIj5cbiAgICAgICAgICAgIDxhIGhyZWY9XCIvJHtpdGVtLnByb2plY3R9LyR7dG9MYyhpdGVtLnRpdGxlKX1cIlxuICAgICAgICAgICAgICB0YXJnZXQ9XCIke2l0ZW0ucHJvamVjdCA9PT0gc2NyYXBib3guUHJvamVjdC5uYW1lID8gJycgOiAnX2JsYW5rJ31cIlxuICAgICAgICAgICAgICByZWw9XCIke2l0ZW0ucHJvamVjdCA9PT0gc2NyYXBib3guUHJvamVjdC5uYW1lID8gJ3JvdXRlJyA6ICdub29wZW5lciBub3JlZmVycmVyJ31cIlxuICAgICAgICAgICAgICBvbkNsaWNrPVwiJHtvbkNsaWNrfVwiPlxuICAgICAgICAgICAgICAke2l0ZW0udGl0bGV9XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICR7aXRlbS5saW5lcy5tYXAobGluZSA9PiBodG1sYDxzcGFuPiR7bGluZX08L3NwYW4+YCl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvbGk+YCl9XG4gICAgICAgIDwvdWw+XG4gICAgICBgfVxuICAgIDwvZGl2PmA7XG59O1xuXG5mdW5jdGlvbiB1c2VTZWFyY2goe3Byb2plY3QsIHF1ZXJ5fSkge1xuICBjb25zdCBbaXRlbXMsIHNldEl0ZW1zXSA9IHVzZVN0YXRlKFtdKTtcbiAgXG4gIGNvbnN0IHNlYXJjaCA9IHVzZU1lbW8oKCkgPT4gdGhyb3R0bGUoYXN5bmMgKF9wcm9qZWN0LCBfcXVlcnkpID0+IHtcbiAgICBpZiAoX3F1ZXJ5ID09PSAnJyB8fCBfcHJvamVjdCA9PT0gJycpIHtcbiAgICAgIHNldEl0ZW1zKFtdKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAvYXBpL3BhZ2VzLyR7X3Byb2plY3R9L3NlYXJjaC9xdWVyeT9xPSR7ZW5jb2RlVVJJQ29tcG9uZW50KF9xdWVyeSl9YCk7XG4gICAgICBjb25zdCB7cGFnZXN9ID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgIHNldEl0ZW1zKHBhZ2VzLm1hcCgoe3RpdGxlLCB3b3JkcywgbGluZXN9KSA9PiAoe3Byb2plY3Q6IF9wcm9qZWN0LCB0aXRsZSwgd29yZHMsIGxpbmVzfSkpKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICBzZXRJdGVtcyhbXSk7XG4gICAgfVxuICB9LCA1MDAsIHtpbW1lZGlhdGU6IGZhbHNlfSksIFtdKTtcbiAgXG4gIGNvbnN0IHtsb2FkaW5nfSA9IHVzZUxvYWRlcihcbiAgICBhc3luYyAoKSA9PiBhd2FpdCBzZWFyY2gocHJvamVjdCwgcXVlcnkpLFxuICAgIHtkZWxheTogMTUwMH0sXG4gICAgW3NlYXJjaCwgcHJvamVjdCwgcXVlcnldXG4gICk7XG4gIFxuICByZXR1cm4ge2xvYWRpbmcsIGl0ZW1zfTtcbn1cbmZ1bmN0aW9uIHVzZVByb2plY3RTZWFyY2goe3F1ZXJ5LCB3YXRjaExpc3Q6IF93YXRjaExpc3QsIGluY2x1ZGVXYXRjaExpc3R9KSB7XG4gIGNvbnN0IFtqb2luZWRMaXN0LCBzZXRKb2luZWRMaXN0XSA9IHVzZVN0YXRlKFtdKTsgLy8g5Y+C5Yqg44GX44Gm44GE44KLcHJvamVjdOOBrmxpc3RcbiAgY29uc3Qgd2F0Y2hMaXN0ID0gdXNlTWVtbygoKSA9PiB7IC8vIHdhdGNoTGlzdOOBi+OCieWPguWKoOOBl+OBpuOBhOOCi3Byb2plY3TjgpLkuojjgoHpmaTjgYTjgabjgYrjgY9cbiAgICBjb25zdCBpZHMgPSBqb2luZWRMaXN0Lm1hcCgoe2lkfSkgPT4gaWQpO1xuICAgIHJldHVybiBfd2F0Y2hMaXN0LmZpbHRlcigoe2lkfSkgPT4gIWlkcy5zb21lKF9pZCA9PiBfaWQgPT09IGlkKSk7XG4gIH0sIFtqb2luZWRMaXN0LCBfd2F0Y2hMaXN0XSk7XG4gIGNvbnN0IFtwcm9qZWN0cywgc2V0UHJvamVjdHNdID0gdXNlU3RhdGUoW10pOyAvLyDmpJzntKLntZDmnpxcbiAgY29uc3QgW3NlYXJjaGluZywgc2V0U2VhcmNoaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTsgLy8g5qSc57Si5Lit44GL44Gp44GG44GLXG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGUodW5kZWZpbmVkKTtcbiAgXG4gIC8vIHByb2plY3QgbGlzdOOCkuWIneacn+WMluOBmeOCi1xuICB1c2VFZmZlY3QoKCkgPT4gKGFzeW5jICgpID0+IHtcbiAgICAvLyDlj4LliqDjgZfjgabjgYTjgotwcm9qZWN044KS5Y+W5b6X44GZ44KLXG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9hcGkvcHJvamVjdHMnKTtcbiAgICBpZiAoIXJlcy5vaykgcmV0dXJuIFtdO1xuICAgIGNvbnN0IGpzb24gPSBhd2FpdCByZXMuanNvbigpO1xuICAgIHNldEpvaW5lZExpc3QoanNvbi5wcm9qZWN0cz8ubWFwPy5cbiAgICAgICgoe2lkLCBuYW1lLCBkaXNwbGF5TmFtZX0pID0+ICh7aWQsIG5hbWUsIGRpc3BsYXlOYW1lfSkpID8/IFtdKTtcbiAgfSkoKSwgW10pO1xuICBcbiAgLy8gcHJvamVjdOOCkuaoquaWreaknOe0ouOBmeOCi1xuICB1c2VFZmZlY3QoKCkgPT4gKGFzeW5jICgpID0+IHtcbiAgICAgIHNldEVycm9yKHVuZGVmaW5lZCk7XG4gICAgICBcbiAgICAgIC8vIOaknOe0ouiqnuWPpeOBjOepuuOBquOCieOAgWRlZmF1bHTjga5wcm9qZWN0IGxpc3TjgpLov5TjgZlcbiAgICAgIGlmIChxdWVyeSA9PT0gJycpIHtcbiAgICAgICAgc2V0UHJvamVjdHMoWy4uLmpvaW5lZExpc3QsIC4uLndhdGNoTGlzdF0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBcbiAgICAgIHNldFNlYXJjaGluZyh0cnVlKTtcbiAgICAgIHNldFByb2plY3RzKFtdKTsgLy8g5LiA5pem44Kv44Oq44KiXG4gICAgICB0cnkge1xuICAgICAgICAvLyDlj4LliqDjgZfjgabjgYTjgotwcm9qZWN044GL44KJ5qSc57Si44GZ44KLXG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgL2FwaS9wcm9qZWN0cy9zZWFyY2gvcXVlcnk/cT0ke3F1ZXJ5fWApO1xuICAgICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICAgIGlmICghcmVzLm9rKSB0aHJvdyBFcnJvcihqc29uLm1lc3NhZ2UpO1xuICAgICAgICAgIHNldFByb2plY3RzKGpzb24ucHJvamVjdHMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdhdGNoIGxpc3TjgYvjgonmpJzntKLjgZnjgotcbiAgICAgICAgaWYgKGluY2x1ZGVXYXRjaExpc3QpIHtcbiAgICAgICAgICAvLyAxMDDku7bjgZrjgaTmpJzntKLjgZnjgotcbiAgICAgICAgICBjb25zdCBjaHVua051bSA9IE1hdGguZmxvb3Iod2F0Y2hMaXN0Lmxlbmd0aCAvIDEwMCkgKyAxO1xuICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjaHVua051bTsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgICAgICAgcGFyYW1zLmFwcGVuZCgncScsIHF1ZXJ5KTtcbiAgICAgICAgICAgIHdhdGNoTGlzdC5zbGljZShpbmRleCAqIDEwMCwgMTAwICsgaW5kZXggKiAxMDApXG4gICAgICAgICAgICAgIC5mb3JFYWNoKCh7aWR9KSA9PiBwYXJhbXMuYXBwZW5kKCdpZHMnLCBpZCkpO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYC9hcGkvcHJvamVjdHMvc2VhcmNoL3dhdGNoLWxpc3Q/JHtwYXJhbXMudG9TdHJpbmcoKX1gKTtcbiAgICAgICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICAgICAgaWYgKCFyZXMub2spIHRocm93IEVycm9yKGpzb24ubWVzc2FnZSk7XG4gICAgICAgICAgICBzZXRQcm9qZWN0cyhiZWZvcmUgPT4gWy4uLmJlZm9yZSwgLi4uanNvbi5wcm9qZWN0c10pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIHNldEVycm9yKGUudG9TdHJpbmcoKSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRTZWFyY2hpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pKCksXG4gICAgW3F1ZXJ5LCB3YXRjaExpc3QsIGpvaW5lZExpc3QsIGluY2x1ZGVXYXRjaExpc3RdLFxuICApO1xuICBcbiAgcmV0dXJuIHtzZWFyY2hpbmcsIGVycm9yLCBwcm9qZWN0c307XG59XG5jb25zdCBDU1MgPSBgXG46aG9zdCB7XG4gIC0tZHJvcGRvd24tdGV4dC1jb2xvcjogdmFyKC0taW5jcmVtZW50YWwtZnVsbHRleHQtc2VhcmNoLXRleHQtY29sb3IsICMzMzMpO1xuICAtLWRyb3Bkb3duLWJnOiB2YXIoLS1pbmNyZW1lbnRhbC1mdWxsdGV4dC1zZWFyY2gtcmVzdWx0LWJnLCAjZmZmKTtcbiAgLS1kcm9wZG93bi1ib3JkZXItY29sb3I6IHZhcigtLWJvZHktYmcsIHJnYmEoMCwwLDAsMC4xNSkpO1xuICAtLWRyb3Bkb3duLXNoYWRvdy1jb2xvcjogcmdiYSgwLDAsMCwwLjE3NSk7XG4gIC0tZHJvcGRvd24taXRlbS1ob3Zlci10ZXh0LWNvbG9yOiB2YXIoLS1pbmNyZW1lbnRhbC1mdWxsdGV4dC1zZWFyY2gtaG92ZXItdGV4dC1jb2xvciwgIzMzMyk7XG4gIC0tZHJvcGRvd24taXRlbS1ob3Zlci1iZzogdmFyKC0taW5jcmVtZW50YWwtZnVsbHRleHQtc2VhcmNoLXJlc3VsdC1ob3Zlci1iZywgI2Y1ZjVmNSk7XG4gIC0tZHJvcGRvd24taXRlbS1zZWxlY3QtYm9yZGVyLWNvbG9yOiAjNjZhZmU5OTk7XG59XG4uY29udGFpbmVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpO1xuICB0b3A6IDV2aDtcbiAgbGVmdDogMTBweDtcbiAgY29sb3I6IHZhcigtLWluY3JlbWVudGFsLWZ1bGx0ZXh0LXNlYXJjaC10ZXh0LWNvbG9yLCAjNGE0YTRhKTtcbiAgei1pbmRleDogOTAwMDA7XG59XG5zcGFuIHtcbiAgbWFyZ2luLXJpZ2h0OiAuNWVtO1xufVxuLnNlYXJjaC1mb3JtIHtcbiAgd2lkdGg6IGluaGVyaXQ7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgcGFkZGluZzogMCAxMHB4O1xuICBib3JkZXI6IHRyYW5zcGFyZW50O1xuICBib3gtc2hhZG93OiBub25lO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGNvbG9yOiB2YXIoLS1zZWFyY2gtZm9ybS10ZXh0LWNvbG9yLCByZ2JhKDI1NSwyNTUsMjU1LDAuMzUpKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2VhcmNoLWZvcm0tYmcsIHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpO1xufVxuLmluZm8ge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5kcm9wZG93biB7XG4gIG1heC1oZWlnaHQ6IDgwdmg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiA1cHggMDtcbiAgbWFyZ2luOiAycHggMCAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAyOHB4O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMTUpO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWluY3JlbWVudGFsLWZ1bGx0ZXh0LXNlYXJjaC1yZXN1bHQtYmcsICNmZWZlZmUpO1xuICAgICAgICBcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cbmEge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogM3B4IDIwcHg7XG4gIGNsZWFyOiBib3RoO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmb250LXdlaWdodDpub3JtYWw7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIGNvbG9yOiB2YXIoLS1pbmNyZW1lbnRhbC1mdWxsdGV4dC1zZWFyY2gtdGV4dC1jb2xvciwgIzI2MjYyNik7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWluY3JlbWVudGFsLWZ1bGx0ZXh0LXNlYXJjaC1yZXN1bHQtYmcsICNmNWY1ZjUpO1xufVxuYTpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6IHZhcigtLWluY3JlbWVudGFsLWZ1bGx0ZXh0LXNlYXJjaC1ob3Zlci10ZXh0LWNvbG9yLCAjMjYyNjI2KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taW5jcmVtZW50YWwtZnVsbHRleHQtc2VhcmNoLXJlc3VsdC1ob3Zlci1iZywgI2Y1ZjVmNSk7XG59XG5hOmZvY3VzIHtcbiAgY29sb3I6IHZhcigtLWluY3JlbWVudGFsLWZ1bGx0ZXh0LXNlYXJjaC1ob3Zlci10ZXh0LWNvbG9yLCAjMjYyNjI2KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taW5jcmVtZW50YWwtZnVsbHRleHQtc2VhcmNoLXJlc3VsdC1ob3Zlci1iZywgI2Y1ZjVmNSk7XG4gIG91dGxpbmU6IDA7XG4gIGJveC1zaGFkb3c6IDAgMHB4IDBweCAzcHggcmdiYSgxMDIsMTc1LDIzMywwLjYpO1xuICBib3JkZXItY29sb3I6ICM2NmFmZTk7XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciBlYXNlLWluLW91dCAwLjE1cyxib3gtc2hhZG93IGVhc2UtaW4tb3V0IDAuMTVzO1xufVxuLmRlc2NyaXB0aW9uIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi10b3A6IDAuNWVtO1xuICBjb2xvcjogdmFyKC0taW5jcmVtZW50YWwtZnVsbHRleHQtc2VhcmNoLWRlc2NyaXB0aW9uLXRleHQtY29sb3IsIGdyYXkpO1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxNHB4O1xuICBtYXgtaGVpZ2h0OiAyOHB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cbiR7QmFja2dyb3VuZENTU31cbiR7RXJyb3JDU1N9XG5gO1xuXG5leHBvcnQgZnVuY3Rpb24gbW91bnQod2F0Y2hMaXN0KSB7XG4gIGNvbnN0IGFwcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBhcHAuZGF0YXNldC51c2Vyc2NyaXB0TmFtZSA9ICdpbmNyZW1lbnRhbC1mdWxsdGV4dC1zZWFyY2gtZm9ybSc7XG4gIGFwcC5hdHRhY2hTaGFkb3coe21vZGU6ICdvcGVuJ30pO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZChhcHApO1xuICByZW5kZXIoaHRtbGBcbiAgICA8c3R5bGU+XG4gICAgICA6aG9zdCB7XG4gICAgICAgIC0taW5jcmVtZW50YWwtZnVsbHRleHQtc2VhcmNoLXRleHQtY29sb3I6IHZhcigtLXBhZ2UtdGV4dC1jb2xvciwgIzRhNGE0YSk7XG4gICAgICAgIC0taW5jcmVtZW50YWwtZnVsbHRleHQtc2VhcmNoLWhvdmVyLXRleHQtY29sb3I6IHZhcigtLXBhZ2UtdGV4dC1jb2xvciwgIzRhNGE0YSk7XG4gICAgICAgIC0taW5jcmVtZW50YWwtZnVsbHRleHQtc2VhcmNoLWRlc2NyaXB0aW9uLXRleHQtY29sb3I6IHZhcigtLWNhcmQtZGVzY3JpcHRpb24tY29sb3IsIGdyYXkpO1xuICAgICAgICAtLWluY3JlbWVudGFsLWZ1bGx0ZXh0LXNlYXJjaC1yZXN1bHQtYmc6IHZhcigtLXBhZ2UtYmcsICNmZWZlZmUpO1xuICAgICAgICAtLWluY3JlbWVudGFsLWZ1bGx0ZXh0LXNlYXJjaC1yZXN1bHQtaG92ZXItYmc6IHZhcigtLWNhcmQtaG92ZXItYmcsICNmNWY1ZjUpO1xuICAgICAgfVxuICAgICAgJHtDU1N9XG4gICAgPC9zdHlsZT5cbiAgICA8JHtBcHB9IHdhdGNoTGlzdD1cIiR7d2F0Y2hMaXN0fVwiLz5cbiAgYCwgYXBwLnNoYWRvd1Jvb3QpO1xufVxuIiwgImV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQcm9qZWN0SW5mbyhwcm9qZWN0SWRzLCB7aW5jbHVkZUpvaW5lZCA9IHRydWV9ID0ge30pIHtcbiAgY29uc3QgY2h1bmtOdW0gPSBNYXRoLmZsb29yKHByb2plY3RJZHMubGVuZ3RoIC8gMTAwKSArIDE7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKFsuLi5BcnJheShjaHVua051bSkua2V5cygpXVxuICAgIC5tYXAoYXN5bmMgaW5kZXggPT4ge1xuICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgcHJvamVjdElkcy5zbGljZShpbmRleCAqIDEwMCwgMTAwICsgaW5kZXggKiAxMDApLmZvckVhY2goaWQgPT4gcGFyYW1zLmFwcGVuZCgnaWRzJywgaWQpKTtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAvYXBpL3Byb2plY3RzPyR7cGFyYW1zLnRvU3RyaW5nKCl9YCk7XG4gICAgICBjb25zdCB7cHJvamVjdHN9ID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgIHJldHVybiBwcm9qZWN0cztcbiAgICB9KSk7XG4gIGNvbnN0IHByb2plY3RzID0gcmVzdWx0LmZsYXQoKTtcbiAgXG4gIGlmIChpbmNsdWRlSm9pbmVkKSB7XG4gICAgLy8g6YeN6KSH44KS5Y+W44KK6Zmk44GPXG4gICAgY29uc3QgaWRzID0gWy4uLm5ldyBTZXQocHJvamVjdHMubWFwKCh7aWR9KSA9PiBpZCkpXTtcbiAgICByZXR1cm4gaWRzLm1hcChpZCA9PiBwcm9qZWN0cy5maW5kKHByb2plY3QgPT4gcHJvamVjdC5pZCA9PT0gaWQpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBwcm9qZWN0SWRz44Gr44GC44KLcHJvamVjdOOBruOBv+i/lOOBmVxuICAgIHJldHVybiBbLi4ubmV3IFNldChwcm9qZWN0cy5tYXAoKHtpZH0pID0+IGlkKSldXG4gICAgICAuZmlsdGVyKGlkID0+IHByb2plY3RJZHMuc29tZShfaWQgPT4gX2lkID09PSBpZCkpXG4gICAgICAubWFwKGlkID0+IHByb2plY3RzLmZpbmQocHJvamVjdCA9PiBwcm9qZWN0LmlkID09PSBpZCkpO1xuICB9XG59IiwgImltcG9ydCB7bW91bnR9IGZyb20gJy4vc2NyaXB0LmpzJztcbmltcG9ydCB7Z2V0UHJvamVjdEluZm99IGZyb20gJy4uL3NjcmFwYm9444GucHJvamVjdOaDheWgseOCkuS4gOaLrOOBl+OBpuWPluW+l+OBmeOCi1VzZXJTY3JpcHQvc2NyaXB0LmpzJztcblxuKGFzeW5jICgpID0+IHtcbiAgLy8gd2F0Y2ggbGlzdOOBi+OCieOCguOBqOOBo+OBpuOBj+OCi1xuICBjb25zdCB3YXRjaExpc3RJZHMgPSBPYmplY3Qua2V5cyhKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdwcm9qZWN0c0xhc3RBY2Nlc3NlZCcpKSk7XG4gIGNvbnN0IHdhdGNoTGlzdCA9IFsuLi5hd2FpdCBnZXRQcm9qZWN0SW5mbyh3YXRjaExpc3RJZHMpXVxuICAgIC5tYXAoKHtpZCwgbmFtZSwgZGlzcGxheU5hbWV9KSA9PiAoe2lkLCBuYW1lLCBkaXNwbGF5TmFtZX0pKVxuICAgIC5zb3J0KChhLCBiKSA9PiBhLmRpc3BsYXlOYW1lLmxvY2FsZUNvbXBhcmUoYi5kaXNwbGF5TmFtZSkpO1xuICBtb3VudCh3YXRjaExpc3QpO1xufSkoKTtcbiIsICJleHBvcnQgZnVuY3Rpb24gY29udmVydChjb21taXRzKSB7XG4gIC8vIF9pbnNlcnQsIF91cGRhdGUsIF9kZWxldGXku6XlpJbjgpLnhKHoppbjgZnjgotcbiAgY29uc3QgY2hhbmdlcyA9IGNvbW1pdHMuZmxhdE1hcChcbiAgICAoe2NoYW5nZXMsIGNyZWF0ZWQsIHVzZXJJZH0pID0+IGNoYW5nZXMuZmxhdE1hcChjaGFuZ2UgPT4ge1xuICAgICAgY29uc3QgY2hhbmdlSW5mbyA9IG1ha2VDaGFuZ2VJbmZvKGNoYW5nZSwgdXNlcklkLCBjcmVhdGVkKTtcbiAgICAgIHJldHVybiBjaGFuZ2VJbmZvID8gW2NoYW5nZUluZm9dIDogW107XG4gICAgfSlcbiAgKTtcblxuICBjb25zdCByYW5nZSA9IFsuLi5uZXcgU2V0KGNoYW5nZXMubWFwKCh7Y3JlYXRlZH0pID0+IHBhcnNlSW50KGNyZWF0ZWQpKSldLnNvcnQoKTtcbiAgLy8gTGluZVNuYXBzaG9044Gr5aSJ5o+b44GZ44KLXG4gIGNvbnN0IGxpbmVzID0gY2hhbmdlcy5yZWR1Y2UoKGxpbmVzLCBjaGFuZ2UpID0+IHtcbiAgICBpZiAoY2hhbmdlLnR5cGUgPT09ICdpbnNlcnQnKSB7XG4gICAgICBjb25zdCBzbmFwc2hvdHMgPSB7fTtcbiAgICAgIHNuYXBzaG90c1tjaGFuZ2UuY3JlYXRlZF0gPSB7dGV4dDogY2hhbmdlLnRleHQsIHVzZXJJZDogY2hhbmdlLnVzZXJJZH07XG4gICAgICBjb25zdCBsaW5lID0ge1xuICAgICAgICBpZDogY2hhbmdlLmlkLFxuICAgICAgICBzbmFwc2hvdHMsXG4gICAgICB9O1xuICAgICAgaWYgKGNoYW5nZS5wYXJlbnRJZCA9PT0gJ19lbmQnKSByZXR1cm4gWy4uLmxpbmVzLCBsaW5lXTtcbiAgICAgIFxuICAgICAgLy8gcGFyZW50SWTjga7jg4fjg7zjgr/jga7liY3jgavmjL/lhaXjgZnjgotcbiAgICAgIGNvbnN0IGluZGV4ID0gbGluZXMuZmluZEluZGV4KCh7aWR9KSA9PiBpZCA9PT0gY2hhbmdlLnBhcmVudElkKTtcbiAgICAgIC8vIHBhcmVudElk44Gu44OH44O844K/44GM5a2Y5Zyo44GX44Gq44GL44Gj44Gf44KJ44CB44Go44KK44GC44GI44Ga5pyr5bC+44Gr5oy/5YWl44GZ44KLXG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgW3NjcmFwYm94LXNuYXBzaG90QDAuMS4wXSBUaGUgcGFyZW50IGxpbmUgdGhlIHNuYXBzaG90IHdvdWxkIGluc2VydCBiZWZvcmUgaXMgbm90IGZvdW5kLiBjaGFuZ2U6IGAsIGNoYW5nZSk7XG4gICAgICAgIHJldHVybiBbLi4ubGluZXMsIGxpbmVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFsuLi5saW5lcy5zbGljZSgwLCBpbmRleCksIGxpbmUsIC4uLmxpbmVzLnNsaWNlKGluZGV4KV07XG4gICAgfVxuICAgIFxuICAgIC8vIOihjOODh+ODvOOCv+OCkui/veWKoOOBmeOCi3NuYXBzaG9044KS5o6i44GZXG4gICAgY29uc3QgaW5kZXggPSBsaW5lcy5maW5kSW5kZXgoKHtpZH0pID0+IGlkID09PSBjaGFuZ2UuaWQpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIGNvbnNvbGUud2FybihgW3NjcmFwYm94LXNuYXBzaG90QDAuMS4wXSBUaGUgbGluZSBkYXRhIHRvIGJlIGFwcGVuZCB0aGUgY2hhbmdlIGlzIG5vdCBmb3VuZC4gY2hhbmdlOiBgLCBjaGFuZ2UpO1xuICAgICAgcmV0dXJuIGxpbmVzO1xuICAgIH1cbiAgICBcbiAgICBpZiAoY2hhbmdlLnR5cGUgPT09ICd1cGRhdGUnKSB7XG4gICAgICBsaW5lc1tpbmRleF0uc25hcHNob3RzW2NoYW5nZS5jcmVhdGVkXSA9IHt0ZXh0OiBjaGFuZ2UudGV4dCwgdXNlcklkOiBjaGFuZ2UudXNlcklkfTtcbiAgICAgIHJldHVybiBsaW5lcztcbiAgICB9XG4gICAgaWYgKGNoYW5nZS50eXBlID09PSAnZGVsZXRlJykge1xuICAgICAgbGluZXNbaW5kZXhdLnNuYXBzaG90c1tjaGFuZ2UuY3JlYXRlZF0gPSB7dGV4dDogbnVsbCwgdXNlcklkOiBjaGFuZ2UudXNlcklkfTtcbiAgICAgIHJldHVybiBsaW5lcztcbiAgICB9XG4gICAgcmV0dXJuIGxpbmVzO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIHtoaXN0b3J5OiBsaW5lcywgcmFuZ2V9O1xufVxuXG5mdW5jdGlvbiBtYWtlQ2hhbmdlSW5mbyhjaGFuZ2UsIHVzZXJJZCwgY3JlYXRlZCkge1xuICBjb25zdCBjaGFuZ2VJbmZvID0ge3VzZXJJZCwgY3JlYXRlZH07XG4gIGlmIChjaGFuZ2UuX2luc2VydCkgcmV0dXJuIHtcbiAgICB0eXBlOiAnaW5zZXJ0JyxcbiAgICBpZDogY2hhbmdlLmxpbmVzLmlkLFxuICAgIHBhcmVudElkOiBjaGFuZ2UuX2luc2VydCxcbiAgICB0ZXh0OiBjaGFuZ2UubGluZXMudGV4dCxcbiAgICAuLi5jaGFuZ2VJbmZvXG4gIH07XG4gIGlmIChjaGFuZ2UuX3VwZGF0ZSkgcmV0dXJuIHtcbiAgICB0eXBlOiAndXBkYXRlJyxcbiAgICBpZDogY2hhbmdlLl91cGRhdGUsXG4gICAgdGV4dDogY2hhbmdlLmxpbmVzLnRleHQsXG4gICAgLi4uY2hhbmdlSW5mb1xuICB9O1xuICBpZiAoY2hhbmdlLl9kZWxldGUpIHJldHVybiB7XG4gICAgdHlwZTogJ2RlbGV0ZScsXG4gICAgaWQ6IGNoYW5nZS5fZGVsZXRlLFxuICAgIC4uLmNoYW5nZUluZm9cbiAgfTtcbiAgcmV0dXJuO1xufSIsICJpbXBvcnQge2h0bWwsIHJlbmRlcn0gZnJvbSAnLi4vaHRtQDMuMC40JTJGcHJlYWN0L3NjcmlwdC5qcyc7XG5pbXBvcnQge3VzZVN0YXRlLCB1c2VSZWYsIHVzZUVmZmVjdH0gZnJvbSAnLi4vcHJlYWN0QDEwLjUuMTMvaG9va3MuanMnO1xuaW1wb3J0IHt1c2VMb2FkZXJ9IGZyb20gJy4uL3VzZS1sb2FkZXIvc2NyaXB0LmpzJztcbmltcG9ydCB7Y29udmVydH0gZnJvbSAnLi4vc2NyYXBib3gtc25hcHNob3RAMC4xLjAvc2NyaXB0LmpzJztcblxuY29uc3QgQXBwID0gKCkgPT4ge1xuICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFttYXgsIHNldE1heF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2luZGV4LCBzZXRJbmRleF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW3JhbmdlLCBzZXRSYW5nZV0gPSB1c2VTdGF0ZShbXSk7XG4gIGNvbnN0IFtzbmFwc2hvdCwgc2V0U25hcHNob3RdID0gdXNlU3RhdGUoKCkgPT4gKCkgPT4gJycpO1xuICBcbiAgY29uc3Qge2xvYWRpbmd9ID0gdXNlTG9hZGVyKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIW9wZW4pIHJldHVybjtcbiAgICBjb25zdCB7cmFuZ2UsIGdldFNuYXBzaG90fSA9IGF3YWl0IGNyZWF0ZVNuYXBzaG90KCk7XG4gICAgc2V0UmFuZ2Uob2xkID0+IEpTT04uc3RyaW5naWZ5KG9sZCkgPT09IEpTT04uc3RyaW5naWZ5KHJhbmdlKSA/IG9sZCA6IHJhbmdlKTtcbiAgICBzZXRTbmFwc2hvdCgoKSA9PiBnZXRTbmFwc2hvdCk7XG4gIH0sIHtkZWxheTogMTAwMH0sIFtvcGVuXSk7XG4gIFxuICAvLyByYW5nZeOBjOWkieabtOOBleOCjOOBn+OBqOOBjeOBoOOBkXNsaWRlcuOBruS9jee9ruOCknJlc2V044GZ44KLXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0TWF4KHJhbmdlLmxlbmd0aCAtIDEpO1xuICAgIHNldEluZGV4KHJhbmdlLmxlbmd0aCAtIDEpO1xuICB9LCBbcmFuZ2VdKTtcbiAgXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2NyYXBib3guUGFnZU1lbnUuYWRkTWVudSh7XG4gICAgICB0aXRsZTogJ+WxpeattOOCueODqeOCpOODgOODvCcsXG4gICAgICBpbWFnZTogJ2h0dHBzOi8vMS5icC5ibG9nc3BvdC5jb20vLVVadGtTRVgwd2g0L1U1bDVfZE5jRXNJL0FBQUFBQUFBaFdzL1V6SkdWenlpWDhZL3M4MDAva2FpY2h1X2Rva2VpLnBuZycsXG4gICAgICBvbkNsaWNrOiAoKSA9PiBzZXRPcGVuKHRydWUpLFxuICAgIH0pO1xuICB9LCBbXSk7XG4gIFxuICBjb25zdCBjbG9zZSA9ICgpID0+IHNldE9wZW4oZmFsc2UpO1xuICBjb25zdCBvblNsaWRlckNoYW5nZSA9ICh7dGFyZ2V0OiB7dmFsdWV9fSkgPT4gc2V0SW5kZXgocGFyc2VJbnQodmFsdWUpKTtcbiAgXG4gIHJldHVybiBodG1sYFxuICAgIDxzdHlsZT5cbiAgICAgIDpob3N0IHtcbiAgICAgICAgY29sb3I6IHZhcigtLXBhZ2UtdGV4dC1jb2xvciwgIzRhNGE0YSk7XG4gICAgICB9XG4gICAgICAuYmFja2dyb3VuZCB7XG4gICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQpO1xuICAgICAgICB6LWluZGV4OiA4OTk5OTtcbiAgICAgIH1cbiAgICAgIC5jb250YWluZXIge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHRvcDogNXB4O1xuICAgICAgICBsZWZ0OiA1cHg7XG4gICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAxMHB4KTtcbiAgICAgICAgbWF4LWhlaWdodDogODB2aDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFnZS1iZywgI2ZlZmVmZSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYm9keS1iZywgI2RjZGRlMCk7XG4gICAgICAgIHotaW5kZXg6IDkwMDAwO1xuICAgICAgfVxuICAgICAgLmNsb3NlLWJ1dHRvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMzBweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDFlbTtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgd2lkdGg6IDMwcHg7XG4gICAgICAgIGhlaWdodDogMzBweDtcbiAgICAgIH1cbiAgICAgIHByZSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXgtaGVpZ2h0OiA3MHZoOyAvKiDjgarjgZzjgYsxMDAl44Gg44Go44Gv44G/5Ye644Gm44GX44G+44Gj44GfICovXG4gICAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1oaXN0b3J5LXNsaWRlci1wcmUtZm9udCwgTWVubG8sTW9uYWNvLENvbnNvbGFzLFwiQ291cmllciBOZXdcIixtb25vc3BhY2UpO1xuICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICAgICAgfVxuICAgICAgaW5wdXQge1xuICAgICAgICB3aWR0aDogOTAlO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG4gICAgJHtvcGVuICYmIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwiYmFja2dyb3VuZFwiIG9uQ2xpY2s9XCIke2Nsb3NlfVwiLz5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGlubGluZVwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBtYXg9XCIke21heH1cIiBtaW49XCIwXCIgc3RlcD1cIjFcIiB2YWx1ZT1cIiR7aW5kZXh9XCJcbiAgICAgICAgICAgIHRpdGxlPVwiJHtuZXcgRGF0ZShyYW5nZVtpbmRleF0gKiAxMDAwKX1cIlxuICAgICAgICAgICAgb25JbnB1dD1cIiR7b25TbGlkZXJDaGFuZ2V9XCIgLz5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2xvc2UtYnV0dG9uXCIgb25DbGljaz1cIiR7Y2xvc2V9XCI+eDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGhyIC8+XG4gICAgICAgICR7bG9hZGluZyAmJiAnTG9hZGluZy4uLid9XG4gICAgICAgIDxwcmU+JHtzbmFwc2hvdChyYW5nZVtpbmRleF0pfTwvcHJlPlxuICAgICAgPC9kaXY+XG4gICAgYH1cbiAgYDtcbn07XG5jb25zdCBhcHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbmFwcC5kYXRhc2V0LnVzZXJzY3JpcHROYW1lPSAnaGlzdG9yeS1zbGlkZXInO1xuYXBwLmF0dGFjaFNoYWRvdyh7bW9kZTogJ29wZW4nfSk7XG5kb2N1bWVudC5ib2R5LmFwcGVuZChhcHApO1xucmVuZGVyKGh0bWxgPCR7QXBwfSAvPmAsIGFwcC5zaGFkb3dSb290KTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlU25hcHNob3QoKSB7XG4gIGNvbnN0IFtjb21taXRIaXN0b3J5LCBwYWdlSGlzdG9yeV0gPSBhd2FpdCBQcm9taXNlLmFsbChbZ2V0Q29tbWl0c0hpc3RvcnkoKSwgZ2V0UGFnZVNuYXBzaG90cygpXSk7XG4gIGNvbnN0IGdldFNuYXBzaG90ID0gdGltZSA9PiB7XG4gICAgLy8g56+E5Zuy5aSW44Gq44KJcGFnZUhpc3RvcnnjgYvjgonlj5blvpfjgZnjgotcbiAgICBpZiAoIWNvbW1pdEhpc3RvcnkucmFuZ2UuaW5jbHVkZXModGltZSkpIHtcbiAgICAgIGlmICghcGFnZUhpc3RvcnkucmFuZ2UuaW5jbHVkZXModGltZSkpIHJldHVybiAnJztcbiAgICAgIHJldHVybiBwYWdlSGlzdG9yeS5wYWdlc1t0aW1lXS5tYXAobGluZSA9PiBsaW5lLnRleHQpLmpvaW4oJ1xcbicpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gY29tbWl0SGlzdG9yeS5oaXN0b3J5LmZsYXRNYXAoKHtpZCwgc25hcHNob3RzfSkgPT4ge1xuICAgICAgLy8gdGltZeOBruaZguOBruaWh+Wtl+WIl+OCkuWPluW+l+OBmeOCi1xuICAgICAgY29uc3QgdGltZXMgPSBPYmplY3Qua2V5cyhzbmFwc2hvdHMpLm1hcChrZXkgPT4gcGFyc2VJbnQoa2V5KSk7XG4gICAgICBjb25zdCBrZXkgPSB0aW1lcy5pbmNsdWRlcyh0aW1lKSA/IHRpbWUgOiB0aW1lcy5maWx0ZXIoa2V5ID0+IGtleSA8PSB0aW1lKS5wb3AoKTtcbiAgICAgIC8vIHRpbWXjga7mmYLjgb7jgaDooYzjgYznlJ/miJDjgZXjgozjgabjgYTjgarjgZHjgozjgbB1bmRlZmluZWTjgavjgarjgotcbiAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtdO1xuICAgICAgY29uc3QgbGluZSA9IHNuYXBzaG90c1trZXldO1xuICAgICAgcmV0dXJuIGxpbmUudGV4dCAhPT0gbnVsbCA/IFtsaW5lLnRleHRdIDogW107XG4gICAgfSkuam9pbignXFxuJyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICByYW5nZTogWy4uLnBhZ2VIaXN0b3J5LnJhbmdlLCAuLi5jb21taXRIaXN0b3J5LnJhbmdlXSxcbiAgICBnZXRTbmFwc2hvdCxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UGFnZVNuYXBzaG90cygpIHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYC9hcGkvcGFnZS1zbmFwc2hvdHMvJHtzY3JhcGJveC5Qcm9qZWN0Lm5hbWV9LyR7c2NyYXBib3guUGFnZS5pZH1gKTtcbiAgY29uc3Qge3NuYXBzaG90c30gPSBhd2FpdCByZXMuanNvbigpO1xuICBjb25zdCBwYWdlcyA9IE9iamVjdC5mcm9tRW50cmllcyhzbmFwc2hvdHMubWFwKCh7bGluZXMsIGNyZWF0ZWR9KSA9PiBbY3JlYXRlZCwgbGluZXNdKSk7XG4gIGNvbnN0IHJhbmdlID0gIE9iamVjdC5rZXlzKHBhZ2VzKS5tYXAoY3JlYXRlZCA9PiBwYXJzZUludChjcmVhdGVkKSkuc29ydCgpO1xuICByZXR1cm4ge3JhbmdlLCBwYWdlc307XG59XG5hc3luYyBmdW5jdGlvbiBnZXRDb21taXRzSGlzdG9yeSgpIHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYC9hcGkvY29tbWl0cy8ke3NjcmFwYm94LlByb2plY3QubmFtZX0vJHtzY3JhcGJveC5QYWdlLmlkfWApO1xuICBjb25zdCB7Y29tbWl0c30gPSBhd2FpdCByZXMuanNvbigpO1xuICByZXR1cm4gY29udmVydChjb21taXRzKTtcbn0iLCAiaW1wb3J0IHtodG1sfSBmcm9tICcuLi9odG1AMy4wLjQlMkZwcmVhY3Qvc2NyaXB0LmpzJztcbmltcG9ydCB7dXNlU3RhdGUsIHVzZU1lbW8sIHVzZUNhbGxiYWNrfSBmcm9tICcuLi9wcmVhY3RAMTAuNS4xMy9ob29rcy5qcyc7XG5pbXBvcnQge3VzZUthVGVYfSBmcm9tICcuLi91c2UtS2FUZVgvc2NyaXB0LmpzJztcbmltcG9ydCB7cGFyc2V9IGZyb20gJy4uL3NjcmFwYm94LXBhcnNlckA3LjEuMC9zY3JpcHQuanMnO1xuaW1wb3J0IHt0b0xjfSBmcm9tICcuLi9zY3JhcGJveC10aXRsZUxjL3NjcmlwdC5qcyc7XG5cbmV4cG9ydCBjb25zdCBDb250ZW50ID0gKHtsaW5lcywgcHJvamVjdCwgdGl0bGVMYywgbm9JbmRlbnR9KSA9PiB7XG4gIGNvbnN0IGJsb2NrcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IGxpbmVzLm1hcChsaW5lID0+IHR5cGVvZiBsaW5lID09PSAnc3RyaW5nJyA/IGxpbmUgOiBsaW5lLnRleHQpLmpvaW4oJ1xcbicpO1xuICAgICAgcmV0dXJuIHBhcnNlKHRleHQsIHtoYXNUaXRsZTogZmFsc2V9KTtcbiAgICB9LFxuICAgIFtsaW5lc11cbiAgKTtcbiAgY29uc3QgbGluZUlkcyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gbGluZXMuZmxhdE1hcChsaW5lID0+IHR5cGVvZiBsaW5lID09PSAnc3RyaW5nJyA/IFtdIDogW2xpbmUuaWRdKSxcbiAgICBbbGluZXNdXG4gICk7XG4gIFxuICBsZXQgY291bnRlciA9IDA7XG4gIHJldHVybiBodG1sYCR7YmxvY2tzLmZsYXRNYXAoYmxvY2sgPT4ge1xuICAgICAgc3dpdGNoIChibG9jay50eXBlKSB7XG4gICAgICAgIGNhc2UgJ3RpdGxlJzpcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIGNhc2UgJ2NvZGVCbG9jayc6IHtcbiAgICAgICAgICBjb25zdCBzdGFydCA9IGNvdW50ZXI7XG4gICAgICAgICAgY291bnRlciArPSBibG9jay5jb250ZW50LnNwbGl0KCdcXG4nKS5sZW5ndGggKyAxO1xuICAgICAgICAgIHJldHVybiBbaHRtbGA8JHtDb2RlQmxvY2t9XG4gICAgICAgICAgICBrZXk9XCIke2xpbmVJZHNbc3RhcnRdfVwiXG4gICAgICAgICAgICBibG9jaz1cIiR7YmxvY2t9XCJcbiAgICAgICAgICAgIHByb2plY3Q9XCIke3Byb2plY3R9XCIgdGl0bGVMYz1cIiR7dGl0bGVMY31cIlxuICAgICAgICAgICAgbm9JbmRlbnQ9XCIke25vSW5kZW50fVwiXG4gICAgICAgICAgICBpZHM9XCIke2xpbmVJZHMuc2xpY2Uoc3RhcnQsIGNvdW50ZXIpfVwiIC8+YF07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAndGFibGUnOiB7XG4gICAgICAgICAgY29uc3Qgc3RhcnQgPSBjb3VudGVyO1xuICAgICAgICAgIGNvdW50ZXIgKz0gYmxvY2suY2VsbHMubGVuZ3RoICsgMTtcbiAgICAgICAgICByZXR1cm4gW2h0bWxgPCR7VGFibGV9XG4gICAgICAgICAgICBrZXk9XCIke2xpbmVJZHNbc3RhcnRdfVwiXG4gICAgICAgICAgICBibG9jaz1cIiR7YmxvY2t9XCJcbiAgICAgICAgICAgIHByb2plY3Q9XCIke3Byb2plY3R9XCIgdGl0bGVMYz1cIiR7dGl0bGVMY31cIlxuICAgICAgICAgICAgbm9JbmRlbnQ9XCIke25vSW5kZW50fVwiXG4gICAgICAgICAgICBpZHM9XCIke2xpbmVJZHMuc2xpY2Uoc3RhcnQsIGNvdW50ZXIpfVwiIC8+YF07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnbGluZSc6XG4gICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgIHJldHVybiBbaHRtbGA8JHtMaW5lfVxuICAgICAgICAgICAga2V5PVwiJHtsaW5lSWRzW2NvdW50ZXIgLSAxXX1cIlxuICAgICAgICAgICAgaW5kZXg9XCIke2xpbmVJZHNbY291bnRlciAtIDFdfVwiXG4gICAgICAgICAgICBpbmRlbnQ9XCIke2Jsb2NrLmluZGVudH1cIlxuICAgICAgICAgICAgbm9JbmRlbnQ9XCIke25vSW5kZW50fVwiPlxuICAgICAgICAgICAgICAke2Jsb2NrLm5vZGVzLmxlbmd0aCA+IDAgPyBibG9jay5ub2Rlcy5tYXAobm9kZSA9PiBodG1sYDwke05vZGV9IG5vZGU9XCIke25vZGV9XCIgcHJvamVjdD1cIiR7cHJvamVjdH1cIiAvPmApIDogaHRtbGA8YnIgLz5gfVxuICAgICAgICAgICAgPC8vPmBdO1xuICAgICAgfVxuICAgIH0pfWA7XG59O1xuXG5jb25zdCBMaW5lID0gKHtpbmRleCwgaW5kZW50LCBub0luZGVudCwgY2hpbGRyZW59KSA9PlxuICBodG1sYDxkaXYgY2xhc3M9XCJsaW5lXCJcbiAgICBkYXRhLWlkPVwiTCR7aW5kZXh9XCJcbiAgICBkYXRhLWluZGVudD1cIiR7aW5kZW50fVwiXG4gICAgc3R5bGU9XCJtYXJnaW4tbGVmdDogJHtub0luZGVudCA/ICcnIDogYCR7MS4wICogaW5kZW50fWVtYH07XCJcbiAgPiR7Y2hpbGRyZW59PC9kaXY+YDtcblxuY29uc3QgQ29kZUJsb2NrID0gKHtibG9jazoge2ZpbGVOYW1lLCBjb250ZW50LCBpbmRlbnR9LCBwcm9qZWN0LCB0aXRsZUxjLCBpZHN9KSA9PiB7XG4gIGNvbnN0IFtidXR0b25MYWJlbCwgc2V0QnV0dG9uTGFiZWxdID0gdXNlU3RhdGUoJ1xcdWYwYzUnKTtcbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoY29udGVudCk7XG4gICAgc2V0QnV0dG9uTGFiZWwoJ0NvcGllZCcpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0QnV0dG9uTGFiZWwoJ1xcdWYwYzUnKSwgMTAwMCk7XG4gIH0sIFtjb250ZW50XSk7XG4gIFxuICByZXR1cm4gaHRtbGBcbiAgICA8JHtMaW5lfSBpbmRleD1cIiR7aWRzWzBdfVwiIGluZGVudD1cIiR7aW5kZW50fVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjb2RlLWJsb2NrXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY29kZS1ibG9jay1zdGFydFwiPlxuICAgICAgICAgICR7ZmlsZU5hbWUuaW5jbHVkZXMoJy4nKSA/XG4gICAgICAgICAgICBodG1sYDxhIGhyZWY9XCIvYXBpL2NvZGUvJHtwcm9qZWN0fS8ke3RpdGxlTGN9LyR7ZmlsZU5hbWV9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+JHtmaWxlTmFtZX08L2E+YCA6XG4gICAgICAgICAgICBmaWxlTmFtZX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNvcHlcIiB0aXRsZT1cIkNvcHlcIiBvbkNsaWNrPVwiJHtoYW5kbGVDbGlja31cIj4ke2J1dHRvbkxhYmVsfTwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8Ly8+XG4gICAgJHtjb250ZW50LnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUsIGluZGV4KSA9PiBodG1sYDwke0xpbmV9IGluZGV4PVwiJHtpZHNbaW5kZXggKyAxXX1cIiBpbmRlbnQ9XCIke2luZGVudH1cIj5cbiAgICAgIDxjb2RlIGNsYXNzPVwiY29kZS1ibG9ja1wiPlxuICAgICAgICAke2xpbmV9XG4gICAgICA8L2NvZGU+XG4gICAgPC8vPmApfVxuICBgO1xufTtcbmNvbnN0IFRhYmxlID0gKHtibG9jazoge2ZpbGVOYW1lLCBjZWxscywgaW5kZW50fSwgcHJvamVjdCwgdGl0bGVMYywgaWRzfSkgPT4gXG4gIGh0bWxgXG4gICAgPCR7TGluZX0gaW5kZXg9XCIke2lkc1swXX1cIiBpbmRlbnQ9XCIke2luZGVudH1cIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGFibGUtYmxvY2tcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWJsZS1ibG9jay1zdGFydFwiPlxuICAgICAgICAgIDxhIGhyZWY9XCIvYXBpL3RhYmxlLyR7cHJvamVjdH0vJHt0aXRsZUxjfS8ke2ZpbGVOYW1lfS5jc3ZcIiB0YXJnZXQ9XCJfYmxhbmtcIj4ke2ZpbGVOYW1lfTwvYT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgIDwvLz5cbiAgICAke2NlbGxzLm1hcCgoY2VsbCwgaSkgPT4gaHRtbGBcbiAgICAgIDwke0xpbmV9IGluZGV4PVwiJHtpZHNbaSArIDFdfVwiIGluZGVudD1cIiR7aW5kZW50fVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRhYmxlLWJsb2NrIHRhYmxlLWJsb2NrLXJvd1wiPlxuICAgICAgICAgICR7Y2VsbC5tYXAoKHJvdywgaW5kZXgpID0+IGh0bWxgPHNwYW4gY2xhc3M9XCJjZWxsIGNvbC0ke2luZGV4fVwiPlxuICAgICAgICAgICAgJHtyb3dbMF0/LnRleHQgPz8gJyd9XG4gICAgICAgICAgPC9zcGFuPmApfVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8Ly8+XG4gICAgYCl9XG4gIGA7XG5jb25zdCBOb2RlID0gKHtub2RlLCBwcm9qZWN0fSkgPT4ge1xuICBzd2l0Y2gobm9kZS50eXBlKSB7XG4gICAgY2FzZSAnY29kZSc6XG4gICAgICByZXR1cm4gaHRtbGA8JHtDb2RlfSBub2RlPVwiJHtub2RlfVwiIC8+YDtcbiAgICBjYXNlICdmb3JtdWxhJzpcbiAgICAgIHJldHVybiBodG1sYDwke0Zvcm11bGF9IG5vZGU9XCIke25vZGV9XCIgLz5gO1xuICAgIGNhc2UgJ2NvbW1tYW5kTGluZSc6XG4gICAgICByZXR1cm4gaHRtbGA8JHtDb21tYW5kTGluZX0gbm9kZT1cIiR7bm9kZX1cIiAvPmA7XG4gICAgY2FzZSAnaGVscGZlZWwnOlxuICAgICAgcmV0dXJuIGh0bWxgPCR7SGVscGZlZWx9IG5vZGU9XCIke25vZGV9XCIgLz5gO1xuICAgIGNhc2UgJ3F1b3RlJzpcbiAgICAgIHJldHVybiBodG1sYDwke1F1b3RlfSBub2RlPVwiJHtub2RlfVwiIHByb2plY3Q9XCIke3Byb2plY3R9XCIgLz5gO1xuICAgIGNhc2UgJ3N0cm9uZyc6XG4gICAgICByZXR1cm4gaHRtbGA8JHtTdHJvbmd9IG5vZGU9XCIke25vZGV9XCIgcHJvamVjdD1cIiR7cHJvamVjdH1cIiAvPmA7XG4gICAgY2FzZSAnZGVjb3JhdGlvbic6XG4gICAgICByZXR1cm4gaHRtbGA8JHtEZWNvcmF0aW9ufSBub2RlPVwiJHtub2RlfVwiIHByb2plY3Q9XCIke3Byb2plY3R9XCIgLz5gO1xuICAgIGNhc2UgJ3BsYWluJzpcbiAgICBjYXNlICdibGFuayc6XG4gICAgICByZXR1cm4gaHRtbGA8JHtQbGFpbn0gbm9kZT1cIiR7bm9kZX1cIiAvPmA7XG4gICAgY2FzZSAnaGFzaFRhZyc6XG4gICAgICByZXR1cm4gaHRtbGA8JHtIYXNoVGFnfSBub2RlPVwiJHtub2RlfVwiIHByb2plY3Q9XCIke3Byb2plY3R9XCIgLz5gO1xuICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgcmV0dXJuIGh0bWxgPCR7TGlua30gbm9kZT1cIiR7bm9kZX1cIiBwcm9qZWN0PVwiJHtwcm9qZWN0fVwiIC8+YDtcbiAgICBjYXNlICdnb29nbGVNYXAnOlxuICAgICAgcmV0dXJuIGh0bWxgPCR7R29vZ2xlTWFwfSBub2RlPVwiJHtub2RlfVwiIC8+YDtcbiAgICBjYXNlICdpY29uJzpcbiAgICAgIHJldHVybiBodG1sYDwke0ljb259IG5vZGU9XCIke25vZGV9XCIgcHJvamVjdD1cIiR7cHJvamVjdH1cIiAvPmA7XG4gICAgY2FzZSAnc3Ryb25nSWNvbic6XG4gICAgICByZXR1cm4gaHRtbGA8JHtJY29ufSBub2RlPVwiJHtub2RlfVwiIHByb2plY3Q9XCIke3Byb2plY3R9XCIgc3Ryb25nIC8+YDtcbiAgICBjYXNlICdpbWFnZSc6XG4gICAgICByZXR1cm4gaHRtbGA8JHtJbWFnZX0gbm9kZT1cIiR7bm9kZX1cIiAvPmA7XG4gICAgY2FzZSAnc3Ryb25nSW1hZ2UnOlxuICAgICAgcmV0dXJuIGh0bWxgPCR7SW1hZ2V9IG5vZGU9XCIke25vZGV9XCIgc3Ryb25nIC8+YDtcbiAgfVxufTtcblxuY29uc3QgQ29kZSA9ICh7bm9kZToge3RleHR9fSkgPT4gaHRtbGA8Y29kZSBjbGFzcz1cImNvZGVcIj4ke3RleHR9PC9jb2RlPmA7XG5jb25zdCBGb3JtdWxhID0gKHtub2RlOiB7Zm9ybXVsYX19KSA9PiB7XG4gIGNvbnN0IHtyZWYsIGVycm9yLCBzZXRGb3JtdWxhfSA9IHVzZUthVGVYKCcnKTtcbiAgc2V0Rm9ybXVsYShmb3JtdWxhKTtcbiAgXG4gIHJldHVybiBodG1sYFxuICAgIDxzcGFuIGNsYXNzPVwiZm9ybXVsYSR7ZXJyb3IgPyAnIGVycm9yJyA6ICcnfVwiPlxuICAgICAgJHtlcnJvciA/IGh0bWxgPGNvZGU+JHtmb3JtdWxhfTwvY29kZT5gIDpcbiAgICAgICAgaHRtbGA8c3BhbiBjbGFzcz1cImthdGV4LWRpc3BsYXlcIiByZWY9XCIke3JlZn1cIi8+YH1cbiAgICA8L3NwYW4+YDtcbn1cbmNvbnN0IENvbW1hbmRMaW5lID0gKHtub2RlOiB7dGV4dCwgc3ltYm9sfX0pID0+XG4gIGh0bWxgPGNvZGUgY2xhc3M9XCJjbGlcIj5cbiAgICA8c3BhbiBjbGFzcz1cInByZWZpeFwiPiR7c3ltYm9sfTwvc3Bhbj5cbiAgICAkeycgJ31cbiAgICA8c3BhbiBjbGFzcz1cImNvbW1hbmRcIj4ke3RleHR9PC9zcGFuPlxuICA8L2NvZGU+YDtcbmNvbnN0IEhlbHBmZWVsID0gKHtub2RlOiB7dGV4dH19KSA9PlxuICBodG1sYDxjb2RlIGNsYXNzPVwiaGVscGZlZWxcIj5cbiAgICA8c3BhbiBjbGFzcz1cInByZWZpeFwiPj88L3NwYW4+XG4gICAgJHsnICd9XG4gICAgPHNwYW4gY2xhc3M9XCJlbnRyeVwiPiR7dGV4dH08L3NwYW4+XG4gIDwvY29kZT5gO1xuY29uc3QgUXVvdGUgPSAoe25vZGU6IHtub2Rlc30sIHByb2plY3R9KSA9PiBodG1sYFxuICA8YmxvY2txdW90ZSBjbGFzcz1cInF1b3RlXCI+XG4gICAgJHtub2Rlcy5tYXAobm9kZSA9PiBodG1sYDwke05vZGV9IG5vZGU9XCIke25vZGV9XCIgcHJvamVjdD1cIiR7cHJvamVjdH1cIiAvPmApfVxuICA8L2Jsb2NrcXVvdGU+XG5gO1xuY29uc3QgU3Ryb25nID0gKHtub2RlOiB7bm9kZXN9LCBwcm9qZWN0fSkgPT4gaHRtbGBcbiAgPHN0cm9uZz5cbiAgICAke25vZGVzLm1hcChub2RlID0+IGh0bWxgPCR7Tm9kZX0gbm9kZT1cIiR7bm9kZX1cIiBwcm9qZWN0PVwiJHtwcm9qZWN0fVwiIC8+YCl9XG4gIDwvc3Ryb25nPlxuYDtcbmNvbnN0IERlY29yYXRpb24gPSAoe25vZGU6IHtkZWNvcywgbm9kZXN9LCBwcm9qZWN0fSkgPT4gaHRtbGBcbiAgPHNwYW4gY2xhc3M9XCIke2RlY29zLm1hcChkZWNvID0+IGBkZWNvLSR7ZGVjb31gKS5qb2luKCcgJyl9XCI+XG4gICAgJHtub2Rlcy5tYXAobm9kZSA9PiBodG1sYDwke05vZGV9IG5vZGU9XCIke25vZGV9XCIgcHJvamVjdD1cIiR7cHJvamVjdH1cIiAvPmApfVxuICA8L3NwYW4+XG5gO1xuY29uc3QgR29vZ2xlTWFwID0gKHtub2RlOiB7cGxhY2UsIGxhdGl0dWRlLCBsb25naXR1ZGUsIHpvb219fSkgPT4gaHRtbGBcbiAgPHNwYW4gY2xhc3M9XCJwb2ludGluZy1kZXZpY2UtbWFwXCI+XG4gICAgPGEgaHJlZj1cImh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy9zZWFyY2gvJHtwbGFjZX0vQCR7bGF0aXR1ZGV9LCR7bG9uZ2l0dWRlfSwke3pvb219elwiXG4gICAgICByZWw9XCJub29wbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICA8aW1nIGNsYXNzPVwiZ29vZ2xlLW1hcFwiXG4gICAgICAgIHNyYz1cIi9hcGkvZ29vZ2xlLW1hcC9zdGF0aWMtbWFwP2NlbnRlcj0ke2xhdGl0dWRlfSUyQyR7bG9uZ2l0dWRlfSZtYXJrZXJzPSR7cGxhY2V9Jnpvb209JHt6b29tfSZfY3NyZj0ke3dpbmRvdy5fY3NyZn1cIiAvPlxuICAgIDwvYT5cbiAgPC9zcGFuPlxuYDtcbmNvbnN0IFBsYWluID0gKHtub2RlOiB7dGV4dH19KSA9PiBodG1sYCR7dGV4dH1gO1xuY29uc3QgSWNvbiA9ICh7bm9kZToge3BhdGhUeXBlLCBwYXRofSwgc3Ryb25nLCBwcm9qZWN0OiBfcHJvamVjdH0pID0+IHtcbiAgY29uc3QgcHJvamVjdCA9IHBhdGhUeXBlID09PSAncmVsYXRpdmUnID8gX3Byb2plY3QgOiBwYXRoLm1hdGNoKC9cXC8oW1xcd1xcLV0rKS8pWzFdO1xuICBjb25zdCB0aXRsZSA9IHBhdGhUeXBlID09PSAncmVsYXRpdmUnID8gcGF0aDogcGF0aC5tYXRjaCgvXFwvW1xcd1xcLV0rXFwvKC4rKSQvKVsxXTtcbiAgY29uc3QgdGl0bGVMYyA9IHRvTGModGl0bGUpO1xuICBcbiAgcmV0dXJuIGh0bWxgXG4gICAgPGEgaHJlZj1cIi8ke3Byb2plY3R9LyR7dGl0bGVMY31cIlxuICAgICAgcmVsPVwiJHtwcm9qZWN0ID09PSBzY3JhcGJveC5Qcm9qZWN0Lm5hbWUgPyAncm91dGUnIDogJ25vb3BlbmVyIG5vcmVmZXJyZXInfVwiIFxuICAgICAgdGFyZ2V0PVwiJHtwcm9qZWN0ID09PSBzY3JhcGJveC5Qcm9qZWN0Lm5hbWUgPyAnJyA6ICdfYmxhbmsnfVwiPlxuICAgICAgPGltZyBjbGFzcz1cIiR7c3Ryb25nID8gJ2ljb24gc3Ryb25nLWljb24nIDogJ2ljb24nfVwiXG4gICAgICAgIGFsdD1cIiR7dGl0bGV9XCJcbiAgICAgICAgc3JjPVwiL2FwaS9wYWdlcy8ke3Byb2plY3R9LyR7dGl0bGVMY30vaWNvblwiPiR7dGl0bGV9PC9pbWc+XG4gICAgPC9hPlxuICBgO1xufTtcbmNvbnN0IEltYWdlID0gKHtub2RlOiB7bGluaywgc3JjfSwgc3Ryb25nfSkgPT4ge1xuICBjb25zdCBocmVmID0gbGluayB8fCAoL2h0dHBzOlxcL1xcL2d5YXpvXFwuY29tXFwvW15cXC9dK1xcL3RodW1iXFwvMTAwMC8udGVzdChzcmMpID9cbiAgICBzcmMuc2xpY2UoMCwgLScvdGh1bWIvMTAwMCcubGVuZ3RoKSA6IHNyYyk7XG4gIFxuICByZXR1cm4gaHRtbGBcbiAgICA8YSBjbGFzcz1cIiR7bGluayA/ICdsaW5rJyA6ICcnfVwiIGhyZWY9XCIke2hyZWZ9XCIgcmVsPVwibm9vcG5lciBub3JlZmVycmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICA8aW1nIGNsYXNzPVwiJHtzdHJvbmcgPyAnaW1hZ2Ugc3Ryb25nLWltYWdlJyA6ICdpbWFnZSd9XCIgc3JjPVwiJHtzcmN9XCIgLz5cbiAgICA8L2E+XG4gIGA7XG59O1xuY29uc3QgSGFzaFRhZyA9ICh7bm9kZToge2hyZWZ9LCBwcm9qZWN0fSkgPT4gaHRtbGBcbiAgPGEgaHJlZj1cIi8ke3Byb2plY3R9LyR7dG9MYyhocmVmKX1cIlxuICAgIGNsYXNzPVwicGFnZS1saW5rXCJcbiAgICB0eXBlPVwiaGFzaFRhZ1wiXG4gICAgcmVsPVwiJHtwcm9qZWN0ID09PSBzY3JhcGJveC5Qcm9qZWN0Lm5hbWUgPyAncm91dGUnIDogJ25vb3BlbmVyIG5vcmVmZXJyZXInfVwiIFxuICAgIHRhcmdldD1cIiR7cHJvamVjdCA9PT0gc2NyYXBib3guUHJvamVjdC5uYW1lID8gJycgOiAnX2JsYW5rJ31cIj5cbiAgICAjJHtocmVmfVxuICA8L2E+XG5gO1xuY29uc3QgTGluayA9ICh7bm9kZToge3BhdGhUeXBlLCBocmVmLCBjb250ZW50fSwgcHJvamVjdH0pID0+IHtcbiAgc3dpdGNoIChwYXRoVHlwZSkge1xuICAgIGNhc2UgJ3Jvb3QnOiB7XG4gICAgICBjb25zdCBbXywgX3Byb2plY3QsIHRpdGxlLCBoYXNoXSA9IGhyZWYubWF0Y2goL1xcLyhbXFx3XFwtXSspXFwvKFteI10qKSguKikvKSA/PyBbJycsICcnLCAnJywgJyddO1xuICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCJcbiAgICAgICAgICB0eXBlPVwibGlua1wiIGhyZWY9XCIvJHtfcHJvamVjdH0vJHt0b0xjKHRpdGxlKX0ke2hhc2h9XCJcbiAgICAgICAgICByZWw9XCIke19wcm9qZWN0ID09PSBzY3JhcGJveC5Qcm9qZWN0Lm5hbWUgPyAncm91dGUnIDogJ25vb3BlbmVyIG5vcmVmZXJyZXInfVwiIFxuICAgICAgICAgIHRhcmdldD1cIiR7X3Byb2plY3QgPT09IHNjcmFwYm94LlByb2plY3QubmFtZSA/ICcnIDogJ19ibGFuayd9XCI+XG4gICAgICAgICAgJHtocmVmfVxuICAgICAgICA8L2E+YDtcbiAgICB9XG4gICAgY2FzZSAncmVsYXRpdmUnOiB7XG4gICAgICBjb25zdCBbXywgdGl0bGUsIGhhc2hdID0gaHJlZi5tYXRjaCgvXihbXiNdKikoLiopLykgPz8gWycnLCAnJywgJyddO1xuICAgICAgcmV0dXJuIGh0bWxgIFxuICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiXG4gICAgICAgICAgdHlwZT1cImxpbmtcIiBocmVmPVwiLyR7cHJvamVjdH0vJHt0b0xjKHRpdGxlKX0ke2hhc2h9XCJcbiAgICAgICAgICByZWw9XCIke3Byb2plY3QgPT09IHNjcmFwYm94LlByb2plY3QubmFtZSA/ICdyb3V0ZScgOiAnbm9vcGVuZXIgbm9yZWZlcnJlcid9XCIgXG4gICAgICAgICAgdGFyZ2V0PVwiJHtwcm9qZWN0ID09PSBzY3JhcGJveC5Qcm9qZWN0Lm5hbWUgPyAnJyA6ICdfYmxhbmsnfVwiPlxuICAgICAgICAgICR7aHJlZn1cbiAgICAgICAgPC9hPmA7XG4gICAgfVxuICAgIGNhc2UgJ2Fic29sdXRlJzpcbiAgICAgIC8vIOOCs+ODvOODieOBjOmBqeW9k+OBquOBruOBr+W+jOOBp+ebtOOBmVxuICAgICAgLy8g5YuV55S744Go55S75YOP44Gu6K2Y5Yil44KS6KGM44GGXG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGhyZWYpO1xuICAgICAgc3dpdGNoICh1cmwuaG9zdG5hbWUpIHtcbiAgICAgICAgY2FzZSAnd3d3LnlvdXR1YmUuY29tJzpcbiAgICAgICAgICByZXR1cm4gaHRtbGA8aWZyYW1lXG4gICAgICAgICAgICBzcmM9XCJodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC8ke3VybC5zZWFyY2hQYXJhbXMuZ2V0KCd2Jyl9P2F1dG9wbGF5PTAmc3RhcnQ9MFwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dC9odG1sXCJcbiAgICAgICAgICAgIGFsbG93ZnVsbHNjcmVlbj0nJyAvPmA7XG4gICAgICAgIGNhc2UgJ3ZpbWVvLmNvbSc6XG4gICAgICAgICAgcmV0dXJuIGh0bWxgPGlmcmFtZVxuICAgICAgICAgICAgc3JjPVwiaHR0cHM6Ly9wbGF5ZXIudmltZW8uY29tL3ZpZGVvLyR7dXJsLnBhdGhuYW1lLnNsaWNlKDEpfVwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dC9odG1sXCJcbiAgICAgICAgICAgIGFsbG93ZnVsbHNjcmVlbj0nJyAvPmA7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoL1xcLig/Om1wM3xvZ2d8d2F2KS8udGVzdChocmVmKSA/PyBjb250ZW50ID09PSAnJykge1xuICAgICAgICByZXR1cm4gaHRtbGA8YXVkaW8gcHJlbG9hZD0nbm9uZScgc3JjPVwiJHtocmVmfVwiIGNvbnRyb2xzIC8+YDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBodG1sYDxhIGNsYXNzPVwibGlua1wiIGhyZWY9XCIke2hyZWZ9XCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgICAke1xuICAgICAgICAgIC8vIGNvbnRlbnTjgYznqbrjga7jgajjgY3jga91bmRlZmluZWTjgafjga/jgarjgY8nJ+OBq+OBquOCi+OBruOBp+OAgVxuICAgICAgICAgIC8vID8/44Gn44Gv44Gq44GPfHzjgadmYWxsYmFja+WHpueQhuOCkuOBmeOCi+W/heimgeOBjOOBguOCi1xuICAgICAgICAgIGNvbnRlbnQgfHwgaHJlZlxuICAgICAgICB9XG4gICAgICA8L2E+YDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IENTUyA9IGBcbmEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5pbWcge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgbWF4LWhlaWdodDogMTAwcHg7XG59XG5jb2RlIHtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWNvZGUtdGV4dC1mb250LCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2UpO1xuICBmb250LXNpemU6IDkwJTtcbiAgY29sb3I6IHZhcigtLWNvZGUtY29sb3IsICMzNDJkOWMpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2RlLWJnLCByZ2JhKDAsMCwwLDAuMDQpKTtcbiAgcGFkZGluZzogMDtcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG59XG5ibG9ja3F1b3RlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcXVvdGUtYmctY29sb3IsIHJnYmEoMCwwLDAsMC4wNSkpO1xuICBkaXNwbGF5OiBibG9jaztcbiAgYm9yZGVyLWxlZnQ6IHNvbGlkIDRweCAjYTBhMGEwO1xuICBwYWRkaW5nLWxlZnQ6IDRweDtcbiAgbWFyZ2luOiAwcHg7XG59XG5zdHJvbmcge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbmlmcmFtZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luOiAzcHggMDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICB3aWR0aDogNjQwcHg7XG4gIGhlaWdodDogMzYwcHg7XG4gIGJvcmRlcjogMDtcbn1cbmF1ZGlvIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aGl0ZS1zcGFjZTogaW5pdGlhbDtcbiAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG4uZm9ybXVsYSB7XG4gIG1hcmdpbjogYXV0byA2cHg7XG59XG4uZm9ybXVsYS5lcnJvciBjb2RlIHtjb2xvcjojZmQ3MzczOyB9XG4ua2F0ZXgtZGlzcGxheSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuICBtYXJnaW46IDAgIWltcG9ydGFudDtcbiAgdGV4dC1hbGlnbjogaW5oZXJpdCAhaW1wb3J0YW50O1xufVxuLmVycm9yIC5rYXRleC1kaXNwbGF5IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5jbGkge1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4uY2xpIC5wcmVmaXgge1xuICBjb2xvcjogIzljNjI0ODtcbn1cbi5oZWxwZmVlbCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmYmViZGQ7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgcGFkZGluZzogM3B4ICFpbXBvcnRhbnQ7XG59XG4uaGVscGZlZWwgLnByZWZpeCB7XG4gIGNvbG9yOiAjZjE3YzAwO1xufVxuLmhlbHBmZWVsIC5lbnRyeSB7XG4gIGNvbG9yOiAjY2M1MDIwO1xufVxuXG4uY29kZS1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBsaW5lLWhlaWdodDogMS43ZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvZGUtYmcsIHJnYmEoMCwwLDAsMC4wNCkpO1xufVxuLmNvZGUtYmxvY2stc3RhcnQge1xuICBmb250LWZhbWlseTogTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlO1xuICBjb2xvcjogIzM0MmQ5YztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmY2ZjNjtcbiAgZm9udC1zaXplOiAuOWVtO1xuICBwYWRkaW5nOiAxcHggMnB4O1xufVxuLmNvZGUtYmxvY2stc3RhcnQgYSB7XG4gIGNvbG9yOiAjMzQyZDljO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbmNvZGUuY29kZS1ibG9jayxcbi50YWJsZS1ibG9jay50YWJsZS1ibG9jay1yb3cge1xuICBwYWRkaW5nLWxlZnQ6IDEuMGVtO1xufVxuLmNvcHkge1xuICBmb250LWZhbWlseTogJ0ZvbnRBd2Vzb21lJztcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4udGFibGUtYmxvY2sge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuLnRhYmxlLWJsb2NrLXN0YXJ0IHtcbiAgcGFkZGluZzogMXB4IDJweDtcbiAgZm9udC1zaXplOiAuOWVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjZmM2O1xufVxuLnRhYmxlLWJsb2NrLXN0YXJ0IGEge1xuICBjb2xvcjogIzM0MmQ5YztcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY2VsbCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMCAycHggMCA4cHg7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdoaXRlLXNwYWNlOiBwcmU7XG59XG4uY2VsbDpudGgtY2hpbGQoMm4rMSkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsMCwwLDAuMDQpO1xufVxuLmNlbGw6bnRoLWNoaWxkKDJuKSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwwLDAsMC4wNik7XG59XG5cbi5zdHJvbmctaW1hZ2Uge1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xufVxuLmljb24ge1xuICBoZWlnaHQ6IDExcHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uc3Ryb25nLWljb24ge1xuICBoZWlnaHQ6IGNhbGMoMTFweCAqIDEuMik7XG59XG5cbi5kZWNvLVxcXFwvIHtmb250LXN0eWxlOiBpdGFsaWM7fVxuLmRlY28tXFxcXCotMSB7Zm9udC13ZWlnaHQ6IGJvbGQ7fVxuLmRlY28tXFxcXCotMiB7Zm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMS4yMGVtO31cbi5kZWNvLVxcXFwqLTMge2ZvbnQtd2VpZ2h0OiBib2xkOyBmb250LXNpemU6IDEuNDRlbTt9XG4uZGVjby1cXFxcKi00IHtmb250LXdlaWdodDogYm9sZDsgZm9udC1zaXplOiAxLjczZW07fVxuLmRlY28tXFxcXCotNSB7Zm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMi4wN2VtO31cbi5kZWNvLVxcXFwqLTYge2ZvbnQtd2VpZ2h0OiBib2xkOyBmb250LXNpemU6IDIuNDllbTt9XG4uZGVjby1cXFxcKi03IHtmb250LXdlaWdodDogYm9sZDsgZm9udC1zaXplOiAzLjAwZW07fVxuLmRlY28tXFxcXCotOCB7Zm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMy41OGVtO31cbi5kZWNvLVxcXFwqLTkge2ZvbnQtd2VpZ2h0OiBib2xkOyBmb250LXNpemU6IDQuMzBlbTt9XG4uZGVjby1cXFxcKi0xMCB7Zm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogNS4xNmVtO31cbi5kZWNvLVxcXFwtIHt0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDt9XG4uZGVjby1fIHt0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTt9XG4ucGFnZS1saW5rIHtjb2xvcjogdmFyKC0tcGFnZS1saW5rLWNvbG9yLCAjNWU4YWY3KTt9XG4ucGFnZS1saW5rOmhvdmVyIHtjb2xvcjogdmFyKC0tcGFnZS1saW5rLWhvdmVyLWNvbG9yLCAjMmQ2N2Y1KTt9XG4uZW1wdHktcGFnZS1saW5rIHtjb2xvcjogOnZhcigtLWVtcHR5LXBhZ2UtbGluay1jb2xvciwgI2ZkNzM3Myk7fVxuLmVtcHR5LXBhZ2UtbGluazpob3ZlciB7Y29sb3I6IDp2YXIoLS1lbXB0eS1wYWdlLWxpbmstaG92ZXItY29sb3IsICNmZDczNzMpO31cbi5saW5rIHtcbiAgY29sb3I6IHZhcigtLXBhZ2UtbGluay1jb2xvciwgIzVlOGFmNyk7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmxpbms6aG92ZXIge2NvbG9yOiB2YXIoLS1wYWdlLWxpbmstY29sb3ItaG92ZXItY29sb3IsICMyZDY3ZjUpO31cbi5saW5rIGltZyB7XG4gIHBhZGRpbmctYm90dG9tOiAzcHg7XG4gIGJvcmRlci1zdHlsZTogbm9uZSBub25lIHNvbGlkO1xuICBib3JkZXItd2lkdGg6IDEuNXB4O1xuICBib3JkZXItY29sb3I6ICM4ZmFkZjk7XG59XG5cbi5wZXJtYWxpbmsge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1saW5lLXBlcm1hbGluay1jb2xvciwgcmdiYSgyMzQsMjE4LDc0LDAuNzUpKTtcbn1cbmA7XG4iLCAiaW1wb3J0IHtoLCBGcmFnbWVudH0gZnJvbSAnLi4vcHJlYWN0QDEwLjUuMTMvc2NyaXB0LmpzJzt2YXIgRT0xLGE9XCJ3Yy1cIjtmdW5jdGlvbiBrKCl7Y29uc3QgdD1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtyZXR1cm5gJHthfSR7dH0tJHtFKyt9YH12YXIgZj1gJHthfXRleHRgLG09ITEsdj10eXBlb2Ygd2luZG93IT1cInVuZGVmaW5lZFwiJiYhIXdpbmRvdy5jdXN0b21FbGVtZW50cztmdW5jdGlvbiBsKHQscixlKXtpZihBcnJheS5pc0FycmF5KHQpKXtjb25zdCBuPXQubWFwKChzLG8pPT5sKHMscixgd2Mtc2xvdC0ke299YCkpO3JldHVybiBlP2goRnJhZ21lbnQse2tleTplfSxuKTpufWlmKHR5cGVvZiB0IT1cIm9iamVjdFwiKXJldHVybiBtfHwobT0hMCx2JiZ3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKGYsY2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudHt9KSksaChmLHtrZXk6ZSxzbG90OnJ9LHQpO2lmKHgodCkpe2NvbnN0e3R5cGU6bn09dDtpZih0eXBlb2Ygbj09XCJzdHJpbmdcIilyZXR1cm57Li4udCxwcm9wczp7Li4udC5wcm9wcyxzbG90OnJ9LGtleTp0LmtleT8/ZX07aWYodHlwZW9mIG49PVwic3ltYm9sXCIpe2NvbnN0IGk9bjtpZihpLmRlc2NyaXB0aW9uPT09XCJyZWFjdC5mcmFnbWVudFwiKXJldHVybnsuLi50LHByb3BzOnsuLi50LnByb3BzLGNoaWxkcmVuOmwodC5wcm9wcy5jaGlsZHJlbixyKX0sa2V5OnQua2V5Pz9lfTt0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgaGFuZGxlIG5vZGUgb2YgdHlwZSBcIitTdHJpbmcoaSkpfWNvbnN0e3Byb3BzOntjaGlsZHJlbjpzLC4uLm99LGtleTpjfT10LHU9Zy5nZXQobik7aWYodSlyZXR1cm4gaCh1LHsuLi5vLGtleTpjPz9lLHNsb3Q6cn0scyk7Y29uc3QgcD1TKG4pO3JldHVybiBnLnNldChuLHApLGgocCx7Li4ubyxrZXk6Yz8/ZSxzbG90OnJ9LHMpfXJldHVybiBudWxsfXZhciBnPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIFModCl7cmV0dXJuIGIodCk/Y2xhc3MgZXh0ZW5kcyB0e3JlbmRlcigpe2NvbnN0IHI9c3VwZXIucmVuZGVyKCk7cmV0dXJuIGgoRnJhZ21lbnQse2NoaWxkcmVuOmwocix0aGlzLnByb3BzLnNsb3QpfSl9fTooe3Nsb3Q6ciwuLi5lfSk9Pntjb25zdCBuPXQoZSk7cmV0dXJuIGgoRnJhZ21lbnQse2NoaWxkcmVuOmwobixyKX0pfX1mdW5jdGlvbiB4KHQpe3JldHVybiB0IT1udWxsJiZ0LnR5cGUhPT12b2lkIDB9ZnVuY3Rpb24gYih0KXtyZXR1cm4hIXQucHJvdG90eXBlJiYhIXQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnR9ZnVuY3Rpb24gQyh0LHIpe2lmKCFyfHxyLmxlbmd0aD09PTApcmV0dXJuIHQuY2hpbGRyZW47Y29uc3QgZT10LG49W107Zm9yKGNvbnN0IHMgb2Ygcil7Y29uc3Qgbz1lW3NdO24ucHVzaChsKG8scyxgc2xvdC0ke3N9YCkpfXJldHVybiBuLnB1c2godC5jaGlsZHJlbiksbn12YXIgeT1TeW1ib2woXCJzbG90XCIpO2Z1bmN0aW9uKiQodCxyKXtmb3IobGV0IGU9dDtlPHI7ZSsrKXlpZWxkIGV9ZnVuY3Rpb24gRih0LHIpe2xldCBlPXRbMF07Y29uc3Qgbj1bXTtmb3IoY29uc3QgcyBvZiAkKDAsci5sZW5ndGgpKXtjb25zdCBvPXJbc107aWYodHlwZW9mIG8hPVwib2JqZWN0XCIpZSs9ZChTdHJpbmcobykpO2Vsc2V7Y29uc3QgYz1vW3ldO2MmJmMhPT1cImNoaWxkcmVuXCI/KGUrPWA8c2xvdCBuYW1lPVwiJHtkKGMpfVwiPjwvc2xvdD5gLG4ucHVzaChjKSk6ZSs9XCI8c2xvdD48L3Nsb3Q+XCJ9ZSs9dFtzKzFdfXJldHVybltlLG5dfWZ1bmN0aW9uIE0odCl7c3dpdGNoKHQpe2Nhc2VcIiZcIjpyZXR1cm5cIiZhbXA7XCI7Y2FzZVwiPFwiOnJldHVyblwiJmx0O1wiO2Nhc2VcIj5cIjpyZXR1cm5cIiZndDtcIjtjYXNlJ1wiJzpyZXR1cm5cIiZxdW90O1wiO2Nhc2VcIidcIjpyZXR1cm5cIiYjMzk7XCI7ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bJjw+XCInXS9nLE0pfWZ1bmN0aW9uIGoodCwuLi5yKXtjb25zdCBlPWsoKTtsZXQgbj0hMTtjb25zdCBzPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxbbyxjXT1GKHQscik7cmV0dXJuIE9iamVjdC5hc3NpZ24odT0+e2lmKCFuKXtuPSEwO2NvbnN0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtpLmluc2VydEFkamFjZW50SFRNTChcImFmdGVyYmVnaW5cIixvKSxzLmFwcGVuZCguLi5pLmNoaWxkTm9kZXMpO2NsYXNzIHcgZXh0ZW5kcyBIVE1MRWxlbWVudHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCk7dGhpcy5hdHRhY2hTaGFkb3coe21vZGU6XCJvcGVuXCJ9KS5hcHBlbmRDaGlsZChzLmNsb25lTm9kZSghMCkpfX13aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKGUsdyl9Y29uc3QgcD1DKHUsYyk7cmV0dXJuIGgoZSx7fSxwKX0se2VsZW1lbnROYW1lOmV9KX1mdW5jdGlvbiBOKHQpe3JldHVybntbeV06dHx8XCJcIn19ZXhwb3J0e2ogYXMgaHRtbCxOIGFzIHNsb3R9OyIsICJpbXBvcnQge2h0bWwsIEZyYWdtZW50fSBmcm9tICcuLi9odG1AMy4wLjQlMkZwcmVhY3Qvc2NyaXB0LmpzJztcbmltcG9ydCB7aHRtbCBhcyB3Y0h0bWwsIHNsb3R9IGZyb20gJy4uL3JlYWN0LXdjL3NjcmlwdC5qcyc7XG5pbXBvcnQge3VzZVN0YXRlLCB1c2VDYWxsYmFja30gZnJvbSAnLi4vcHJlYWN0QDEwLjUuMTMvaG9va3MuanMnO1xuXG5jb25zdCBDU1MgPSBgXG46aG9zdCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYWdlLWJnLCAjZmVmZWZlKTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuYDtcbmNvbnN0IFRMQ29udGFpbmVyID0gd2NIdG1sYFxuICA8c3R5bGU+XG4gICAgJHtDU1N9XG4gICAgOmhvc3Qge1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICB9XG4gICAgOjpzbG90dGVkKCopIHtcbiAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLXN0YXR1cy1iYXItYm9yZGVyLWNvbG9yLCAjYTlhYWFmKTtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1zdGF0dXMtYmFyLWJvcmRlci1jb2xvciwgI2E5YWFhZik7XG4gICAgfVxuICAgIDo6c2xvdHRlZCgqOmxhc3Qtb2YtdHlwZSkge1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDtcbiAgICB9XG4gIDwvc3R5bGU+XG4gICR7c2xvdCgpfVxuYDtcbmNvbnN0IFRSQ29udGFpbmVyID0gd2NIdG1sYFxuICA8c3R5bGU+XG4gICAgJHtDU1N9XG4gICAgOmhvc3Qge1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgfVxuICAgIDo6c2xvdHRlZCgqKSB7XG4gICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLXN0YXR1cy1iYXItYm9yZGVyLWNvbG9yLCAjYTlhYWFmKTtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1zdGF0dXMtYmFyLWJvcmRlci1jb2xvciwgI2E5YWFhZik7XG4gICAgfVxuICAgIDo6c2xvdHRlZCgqOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDtcbiAgICB9XG4gIDwvc3R5bGU+XG4gICR7c2xvdCgpfVxuYDtcbmNvbnN0IEJSQ29udGFpbmVyID0gd2NIdG1sYFxuICA8c3R5bGU+XG4gICAgJHtDU1N9XG4gICAgOmhvc3Qge1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgfVxuICAgIDo6c2xvdHRlZCgqKSB7XG4gICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLXN0YXR1cy1iYXItYm9yZGVyLWNvbG9yLCAjYTlhYWFmKTtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1zdGF0dXMtYmFyLWJvcmRlci1jb2xvciwgI2E5YWFhZik7XG4gICAgfVxuICAgIDo6c2xvdHRlZCgqOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDNweDtcbiAgICB9XG4gIDwvc3R5bGU+XG4gICR7c2xvdCgpfVxuYDtcbmNvbnN0IEJMQ29udGFpbmVyID0gd2NIdG1sYFxuICA8c3R5bGU+XG4gICAgJHtDU1N9XG4gICAgOmhvc3Qge1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICB9XG4gICAgOjpzbG90dGVkKCopIHtcbiAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLXN0YXR1cy1iYXItYm9yZGVyLWNvbG9yLCAjYTlhYWFmKTtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1zdGF0dXMtYmFyLWJvcmRlci1jb2xvciwgI2E5YWFhZik7XG4gICAgfVxuICAgIDo6c2xvdHRlZCgqOmxhc3Qtb2YtdHlwZSkge1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDNweDtcbiAgICB9XG4gIDwvc3R5bGU+XG4gICR7c2xvdCgpfVxuYDtcblxuZXhwb3J0IGNvbnN0IFN0YXR1c0JhciA9ICh7b3JpZW50YXRpb24sIGNoaWxkcmVufSkgPT4ge1xuICBpZiAoIWNoaWxkcmVuIHx8IGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGh0bWxgYDtcbiAgc3dpdGNoIChvcmllbnRhdGlvbikge1xuICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgIHJldHVybiBodG1sYDwke1RMQ29udGFpbmVyfT4ke2NoaWxkcmVufTwvLz5gO1xuICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICByZXR1cm4gaHRtbGA8JHtUUkNvbnRhaW5lcn0+JHtjaGlsZHJlbn08Ly8+YDtcbiAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgcmV0dXJuIGh0bWxgPCR7QlJDb250YWluZXJ9PiR7Y2hpbGRyZW59PC8vPmA7XG4gICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgcmV0dXJuIGh0bWxgPCR7QkxDb250YWluZXJ9PiR7Y2hpbGRyZW59PC8vPmA7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IEVycm9yKGAke29yaWVudGF0aW9ufSBpcyBhbiBpbnZhbGlkIHZhbHVlYCk7XG4gIH1cbn07IiwgImltcG9ydCB7Q29udGVudCwgQ1NTIGFzIGNvbnRlbnRDU1N9IGZyb20gJy4uL3RleHQtYnViYmxlLWNvbXBvbmVudEAwLjIuMCUyRnBhcnNlci9zY3JpcHQuanMnO1xuaW1wb3J0IHtodG1sfSBmcm9tICcuLi9odG1AMy4wLjQlMkZwcmVhY3Qvc2NyaXB0LmpzJztcbmltcG9ydCB7U3RhdHVzQmFyfSBmcm9tICcuLi9zdGF0dXMtYmFyQDAuMS4wL3NjcmlwdC5qcyc7XG5cbmV4cG9ydCBjb25zdCBUZXh0QnViYmxlID0gKHtcbiAgcHJvamVjdCwgdGl0bGVMYywgbGluZXMsIGxvYWRpbmcsIGhhc0NoaWxkLCBzdHlsZSwgdGhlbWUsXG4gIG9uUG9pbnRlckVudGVyQ2FwdHVyZSxcbiAgb25Qb2ludGVyTGVhdmVDYXB0dXJlLFxuICBvbkNsaWNrLFxufSkgPT4gKGxpbmVzLmxlbmd0aCA+IDAgfHwgbG9hZGluZykgJiYgaHRtbGA8ZGl2IGNsYXNzPVwidGV4dC1idWJibGUke2hhc0NoaWxkID8gJyBuby1zY3JvbGwnIDogJyd9XCJcbiAgICBkYXRhLXRoZW1lPVwiJHt0aGVtZX1cIlxuICAgIG9uUG9pbnRlckVudGVyQ2FwdHVyZT1cIiR7b25Qb2ludGVyRW50ZXJDYXB0dXJlfVwiXG4gICAgb25Qb2ludGVyTGVhdmVDYXB0dXJlPVwiJHtvblBvaW50ZXJMZWF2ZUNhcHR1cmV9XCJcbiAgICBvbkNsaWNrPVwiJHtvbkNsaWNrfVwiXG4gICAgc3R5bGU9XCIke3N0eWxlfVwiID5cbiAgICA8JHtTdGF0dXNCYXJ9IG9yaWVudGF0aW9uPVwiJHtsaW5lcy5sZW5ndGggPiAwID8gJ3RvcC1yaWdodCcgOiAndG9wLWxlZnQnfVwiPlxuICAgICAgJHtsb2FkaW5nICYmIGh0bWxgPHNwYW4+JHtsaW5lcy5sZW5ndGggPiAwID8gJ1VwZGF0aW5nLi4uJyA6ICdMb2FkaW5nLi4uJ308L3NwYW4+YH1cbiAgICAgICR7cHJvamVjdCAhPT0gc2NyYXBib3guUHJvamVjdC5uYW1lICYmIGh0bWxgXG4gICAgICAgIDwke1Byb2plY3RCYWRnZX0gcHJvamVjdD1cIiR7cHJvamVjdH1cIiB0aXRsZUxjPVwiJHt0aXRsZUxjfVwiIC8+XG4gICAgICBgfVxuICAgIDwvLz5cbiAgICAke2xpbmVzLmxlbmd0aCA+IDAgJiYgaHRtbGBcbiAgICAgIDwke0NvbnRlbnR9IGxpbmVzPVwiJHtsaW5lc31cIiBwcm9qZWN0PVwiJHtwcm9qZWN0fVwiIHRpdGxlTGM9XCIke3RpdGxlTGN9XCIgLz5cbiAgICBgfVxuICA8L2Rpdj5gO1xuIFxuZXhwb3J0IGNvbnN0IENTUyA9IGBcbi50ZXh0LWJ1YmJsZSB7XG4gIHBhZGRpbmc6IDVweCAwcHggNXB4IDVweDtcbiAgZm9udC1zaXplOiAxMXB4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NztcbiAgdXNlci1zZWxlY3Q6IHRleHQ7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbWF4LWhlaWdodDogODB2aDtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFnZS1iZywgI2ZlZmVmZSk7XG4gIGNvbG9yOiB2YXIoLS1wYWdlLXRleHQtY29sb3IsICM0YTRhNGEpO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIC0tdGV4dC1idWJibGUtYm9yZGVyLWNvbG9yOiBoc2woMjIxLCAxNSUsIDI1JSk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXRleHQtYnViYmxlLWJvcmRlci1jb2xvciwgI2YyZjJmMyk7XG4gIC0tc3RhdHVzLWJhci1ib3JkZXItY29sb3I6IHZhcigtLXRleHQtYnViYmxlLWJvcmRlci1jb2xvciwgI2YyZjJmMyk7XG4gIGJveC1zaGFkb3c6IDAgNnB4IDEycHggcmdiYSgwLDAsMCwwLjE3NSk7XG4gIFxuICB6LWluZGV4OiA5MDAwO1xufVxuLnRleHQtYnViYmxlLm5vLXNjcm9sbCB7XG4gIG92ZXJmbG93LXk6IGhpZGRlbjtcbn1cblxuLnRleHQtYnViYmxlW2RhdGEtdGhlbWU9XCJkZWZhdWx0LWRhcmtcIl0ge1xuICAtLXRleHQtYnViYmxlLWJvcmRlci1jb2xvcjogaHNsKDAsIDAlLCAzOSUpO1xufVxuLnRleHQtYnViYmxlW2RhdGEtdGhlbWU9XCJkZWZhdWx0LW1pbmltYWxcIl0ge1xuICAtLXRleHQtYnViYmxlLWJvcmRlci1jb2xvcjogaHNsKDAsIDAlLCA4OSUpO1xufVxuLnRleHQtYnViYmxlW2RhdGEtdGhlbWU9XCJwYXBlci1saWdodFwiXSB7XG4gIC0tdGV4dC1idWJibGUtYm9yZGVyLWNvbG9yOiBoc2woNTMsIDglLCA1OCUpO1xufVxuLnRleHQtYnViYmxlW2RhdGEtdGhlbWU9XCJwYXBlci1kYXJrLWRhcmtcIl0ge1xuICAtLXRleHQtYnViYmxlLWJvcmRlci1jb2xvcjogaHNsKDIwMywgNDIlLCAxNyUpO1xufVxuLnRleHQtYnViYmxlW2RhdGEtdGhlbWU9XCJibHVlXCJdIHtcbiAgLS10ZXh0LWJ1YmJsZS1ib3JkZXItY29sb3I6IGhzbCgyMjcsIDY4JSwgNjIlKTtcbn1cbi50ZXh0LWJ1YmJsZVtkYXRhLXRoZW1lPVwicHVycGxlXCJdIHtcbiAgLS10ZXh0LWJ1YmJsZS1ib3JkZXItY29sb3I6IGhzbCgyNjcsIDM5JSwgNjAlKTtcbn1cbi50ZXh0LWJ1YmJsZVtkYXRhLXRoZW1lPVwiZ3JlZW5cIl0ge1xuICAtLXRleHQtYnViYmxlLWJvcmRlci1jb2xvcjogaHNsKDEzNiwgMjklLCA1MCUpO1xufVxuLnRleHQtYnViYmxlW2RhdGEtdGhlbWU9XCJvcmFuZ2VcIl0ge1xuICAtLXRleHQtYnViYmxlLWJvcmRlci1jb2xvcjogaHNsKDQzLCA3MSUsIDUxJSk7XG59XG4udGV4dC1idWJibGVbZGF0YS10aGVtZT1cInJlZFwiXSB7XG4gIC0tdGV4dC1idWJibGUtYm9yZGVyLWNvbG9yOiBoc2woNCwgNTglLCA1NiUpO1xufVxuLnRleHQtYnViYmxlW2RhdGEtdGhlbWU9XCJzcHJpbmdcIl0ge1xuICAtLXRleHQtYnViYmxlLWJvcmRlci1jb2xvcjogaHNsKDcyLCA2NCUsIDU3JSk7XG59XG4udGV4dC1idWJibGVbZGF0YS10aGVtZT1cImt5b3RvXCJdIHtcbiAgLS10ZXh0LWJ1YmJsZS1ib3JkZXItY29sb3I6IGhzbCgzMzEsIDIxJSwgMjYlKTtcbn1cbi50ZXh0LWJ1YmJsZVtkYXRhLXRoZW1lPVwibmV3eW9ya1wiXSB7XG4gIC0tdGV4dC1idWJibGUtYm9yZGVyLWNvbG9yOiBoc2woMTc2LCAyOSUsIDY3JSk7XG59XG5cbiR7Y29udGVudENTU31cbmA7XG5cbmltcG9ydCB7aHRtbCBhcyB3Y0h0bWwsIHNsb3R9IGZyb20gJy4uL3JlYWN0LXdjL3NjcmlwdC5qcyc7XG5cbmNvbnN0IF9wcm9qZWN0QmFkZ2UgPSB3Y0h0bWxgXG4gIDxzdHlsZT5cbiAgICA6OnNsb3R0ZWQoYSkge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgY29sb3I6IHZhcigtLXRvb2wtdGV4dC1jb2xvciwgIzM2M2M0OSk7XG4gICAgfVxuICA8L3N0eWxlPlxuICAke3Nsb3QoKX1cbmA7XG5mdW5jdGlvbiBQcm9qZWN0QmFkZ2Uoe3Byb2plY3QsIHRpdGxlTGN9KSB7XG4gIHJldHVybiBodG1sYDwke19wcm9qZWN0QmFkZ2V9PlxuICAgIDxhIGhyZWY9XCIvJHtwcm9qZWN0fS8ke3RpdGxlTGN9XCJcbiAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgID5cbiAgICAgIC8ke3Byb2plY3R9XG4gICAgPC9hPlxuICA8Ly8+YDtcbn0iLCAiaW1wb3J0IHtodG1sfSBmcm9tICcuLi9odG1AMy4wLjQlMkZwcmVhY3Qvc2NyaXB0LmpzJztcbmltcG9ydCB7dXNlUmVmLCB1c2VDYWxsYmFja30gZnJvbSAnLi4vcHJlYWN0QDEwLjUuMTMvaG9va3MuanMnO1xuaW1wb3J0IHtTdGF0dXNCYXJ9IGZyb20gJy4uL3N0YXR1cy1iYXJAMC4xLjAvc2NyaXB0LmpzJztcblxuZXhwb3J0IGNvbnN0IENhcmRCdWJibGUgPSAoe1xuICBsb2FkaW5nLFxuICBoYXNDaGlsZCxcbiAgY2hpbGRyZW4sXG4gIC4uLnJlc3Rcbn0pID0+IHtcbiAgXG4gIGNvbnN0IHJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgaGFuZGxlV2hlZWwgPSB1c2VDYWxsYmFjayhlID0+IHtcbiAgICBpZiAoaGFzQ2hpbGQpIHJldHVybjsgLy8gc2Nyb2xs44Gn44GN44Gq44GE44Go44GN44Gv44K544Or44O8XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgcmVmLmN1cnJlbnQuc2Nyb2xsTGVmdCArPSBlLmRlbHRhWSA8IDAgPyAtMTIwIDogMTIwO1xuICB9LCBbXSk7XG4gIFxuICByZXR1cm4gKGNoaWxkcmVuLmxlbmd0aCA+IDAgfHwgbG9hZGluZykgJiYgaHRtbGBcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1idWJibGVcIiAuLi4ke3Jlc3R9PlxuICAgICAgPHVsIHJlZj1cIiR7cmVmfVwiIG9uV2hlZWw9XCIke2hhbmRsZVdoZWVsfVwiPlxuICAgICAgICAke2NoaWxkcmVuLm1hcChjaGlsZCA9PiBodG1sYDxsaT4ke2NoaWxkfTwvbGk+YCl9XG4gICAgICA8L3VsPlxuICAgICAgJHtsb2FkaW5nICYmIGh0bWxgXG4gICAgICAgIDwke1N0YXR1c0Jhcn0gb3JpZW50YXRpb249XCIke2NoaWxkcmVuLmxlbmd0aCA+IDAgPyAndG9wLWxlZnQnIDogJ2JvdHRvbS1sZWZ0J31cIj5cbiAgICAgICAgICA8c3Bhbj4ke2NoaWxkcmVuLmxlbmd0aCA+IDAgPyAnVXBkYXRpbmcuLi4nIDogJ0xvYWRpbmcuLi4nfTwvc3Bhbj5cbiAgICAgICAgPC8vPlxuICAgICAgYH1cbiAgICA8L2Rpdj5gO1xufTtcbiBcbmV4cG9ydCBjb25zdCBDU1MgPSBgXG4uY2FyZC1idWJibGUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYWdlLWJnLCAjRkZGKTtcbiAgYm94LXNoYWRvdzogMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXgtd2lkdGg6IDgwdnc7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICB6LWluZGV4OiA5MDAwO1xuICBmb250LXNpemU6IDExcHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3O1xufVxuLmNhcmQtYnViYmxlID4gdWwge1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nOiAwcHg7XG4gIG1hcmdpbjogMHB4O1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBvdmVyZmxvdy14OiBhdXRvO1xuICBvdmVyZmxvdy15OiB2aXNpYmxlO1xufVxuLmNhcmQtYnViYmxlID4gdWwgPiBsaSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsb2F0OiBub25lO1xuICBtYXJnaW46IDVweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNoYWRvdzogdmFyKC0tY2FyZC1ib3gtc2hhZG93LCAwIDJweCAwIHJnYmEoMCwwLDAsMC4xMikpO1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIFxuICB3aWR0aDogMTIwcHg7XG4gIGhlaWdodDogMTIwcHg7XG59XG5gOyIsICJpbXBvcnQge2h0bWx9IGZyb20gJy4uL2h0bUAzLjAuNCUyRnByZWFjdC9zY3JpcHQuanMnO1xuaW1wb3J0IHt1c2VTdGF0ZSwgdXNlTWVtbywgdXNlQ2FsbGJhY2t9IGZyb20gJy4uL3ByZWFjdEAxMC41LjEzL2hvb2tzLmpzJztcbmltcG9ydCB7dXNlS2FUZVh9IGZyb20gJy4uL3VzZS1LYVRlWC9zY3JpcHQuanMnO1xuaW1wb3J0IHtwYXJzZX0gZnJvbSAnLi4vc2NyYXBib3gtcGFyc2VyQDcuMS4wL3NjcmlwdC5qcyc7XG5pbXBvcnQge3RvTGN9IGZyb20gJy4uL3NjcmFwYm94LXRpdGxlTGMvc2NyaXB0LmpzJztcblxuZXhwb3J0IGNvbnN0IFJlbGF0ZWRQYWdlQ2FyZCA9ICh7XG4gIHByb2plY3QsIHRpdGxlLCBkZXNjcmlwdGlvbnMsIHRodW1ibmFpbCwgdGhlbWUsXG4gIG9uUG9pbnRlckVudGVyQ2FwdHVyZSxcbiAgb25Qb2ludGVyTGVhdmVDYXB0dXJlLFxufSkgPT4ge1xuICBjb25zdCBibG9ja3MgPSB1c2VNZW1vKCgpID0+IHRodW1ibmFpbCA/IFtdIDpcbiAgICBwYXJzZShkZXNjcmlwdGlvbnMuam9pbignXFxuJyksIHtoYXNUaXRsZTogZmFsc2V9KSxcbiAgICBbZGVzY3JpcHRpb25zLCB0aHVtYm5haWxdXG4gICk7XG4gIFxuICByZXR1cm4gaHRtbGBcbiAgICA8YSBjbGFzcz1cInJlbGF0ZWQtcGFnZS1jYXJkIHBhZ2UtbGlua1wiIHR5cGU9XCJsaW5rXCJcbiAgICAgIGRhdGEtdGhlbWU9XCIke3RoZW1lfVwiXG4gICAgICBvblBvaW50ZXJFbnRlckNhcHR1cmU9XCIke29uUG9pbnRlckVudGVyQ2FwdHVyZX1cIlxuICAgICAgb25Qb2ludGVyTGVhdmVDYXB0dXJlPVwiJHtvblBvaW50ZXJMZWF2ZUNhcHR1cmV9XCJcbiAgICAgIGhyZWY9XCIvJHtwcm9qZWN0fS8ke3RvTGModGl0bGUpfVwiXG4gICAgICByZWw9XCIke3Byb2plY3QgPT09IHNjcmFwYm94LlByb2plY3QubmFtZSA/ICdyb3V0ZScgOiAnbm9vcG5lciBub3JlZmVycmVyJ31cIlxuICAgICAgdGFyZ2V0PVwiJHtwcm9qZWN0ICE9PSBzY3JhcGJveC5Qcm9qZWN0Lm5hbWUgPyAnX2JsYW5rJyA6ICcnfVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImhvdmVyXCIgLz5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj4ke3RpdGxlfTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgJHt0aHVtYm5haWwgPyBcbiAgICAgICAgICBodG1sYDxkaXYgY2xhc3M9XCJ0aHVtYm5haWxcIj48aW1nIHNyYz1cIiR7dGh1bWJuYWlsfVwiLz48L2Rpdj5gIDpcbiAgICAgICAgICBodG1sYDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgJHtibG9ja3MuZmxhdE1hcCgoYmxvY2ssIGluZGV4KSA9PiBibG9jay50eXBlID09PSAnbGluZScgP1xuICAgICAgICAgICAgICBbaHRtbGA8cCBrZXk9XCIke2luZGV4fVwiPlxuICAgICAgICAgICAgICAgICR7YmxvY2subm9kZXMubWFwKG5vZGUgPT5cbiAgICAgICAgICAgICAgICAgIGh0bWxgPCR7Tm9kZX0gbm9kZT1cIiR7bm9kZX1cIiBwcm9qZWN0PVwiJHtwcm9qZWN0fVwiIC8+YFxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvPmBdIDogW11cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+YFxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIGA7XG59O1xuXG5jb25zdCBOb2RlID0gKHtub2RlLCBwcm9qZWN0fSkgPT4ge1xuICBzd2l0Y2gobm9kZS50eXBlKSB7XG4gICAgY2FzZSAnY29kZSc6XG4gICAgICByZXR1cm4gaHRtbGA8Y29kZT4ke25vZGUudGV4dH08L2NvZGU+YDtcbiAgICBjYXNlICdmb3JtdWxhJzpcbiAgICAgIHJldHVybiBodG1sYDwke0Zvcm11bGF9IG5vZGU9XCIke25vZGV9XCIgLz5gO1xuICAgIGNhc2UgJ2NvbW1tYW5kTGluZSc6XG4gICAgICByZXR1cm4gaHRtbGA8Y29kZT4ke25vZGUuc3ltYm9sfSAke25vZGUudGV4dH08L2NvZGU+YDtcbiAgICBjYXNlICdoZWxwZmVlbCc6XG4gICAgICByZXR1cm4gaHRtbGA8Y29kZT4/ICR7bm9kZS50ZXh0fTwvY29kZT5gO1xuICAgIGNhc2UgJ3F1b3RlJzpcbiAgICBjYXNlICdzdHJvbmcnOlxuICAgIGNhc2UgJ2RlY29yYXRpb24nOlxuICAgICAgcmV0dXJuIG5vZGUubm9kZXMubWFwKG5vZGUgPT5odG1sYDwke05vZGV9IG5vZGU9XCIke25vZGV9XCIgcHJvamVjdD1cIiR7cHJvamVjdH1cIiAvPmApO1xuICAgIGNhc2UgJ2dvb2dsZU1hcCc6XG4gICAgY2FzZSAnaW1hZ2UnOlxuICAgIGNhc2UgJ3N0cm9uZ0ltYWdlJzpcbiAgICAgIHJldHVybiBodG1sYGA7XG4gICAgY2FzZSAnaWNvbic6XG4gICAgY2FzZSAnc3Ryb25nSWNvbic6XG4gICAgICByZXR1cm4gaHRtbGA8JHtJY29ufSBub2RlPVwiJHtub2RlfVwiIHByb2plY3Q9XCIke3Byb2plY3R9XCIgLz5gO1xuICAgIGNhc2UgJ2hhc2hUYWcnOlxuICAgICAgcmV0dXJuIGh0bWxgPCR7SGFzaFRhZ30gbm9kZT1cIiR7bm9kZX1cIiBwcm9qZWN0PVwiJHtwcm9qZWN0fVwiIC8+YDtcbiAgICBjYXNlICdsaW5rJzpcbiAgICAgIHJldHVybiBodG1sYDwke0xpbmt9IG5vZGU9XCIke25vZGV9XCIgcHJvamVjdD1cIiR7cHJvamVjdH1cIiAvPmA7XG4gICAgY2FzZSAncGxhaW4nOlxuICAgIGNhc2UgJ2JsYW5rJzpcbiAgICAgIHJldHVybiBodG1sYCR7bm9kZS50ZXh0fWA7XG4gIH1cbn07XG5cbmNvbnN0IEZvcm11bGEgPSAoe25vZGU6IHtmb3JtdWxhfX0pID0+IHtcbiAgY29uc3Qge3JlZiwgZXJyb3IsIHNldEZvcm11bGF9ID0gdXNlS2FUZVgoJycpO1xuICBzZXRGb3JtdWxhKGZvcm11bGEpO1xuICBcbiAgcmV0dXJuIGh0bWxgXG4gICAgPHNwYW4gY2xhc3M9XCJmb3JtdWxhJHtlcnJvciA/ICcgZXJyb3InIDogJyd9XCI+XG4gICAgICAkeyFlcnJvciAmJiBodG1sYDxzcGFuIGNsYXNzPVwia2F0ZXgtZGlzcGxheVwiIHJlZj1cIiR7cmVmfVwiLz5gfVxuICAgIDwvc3Bhbj5gO1xufVxuY29uc3QgSWNvbiA9ICh7bm9kZToge3BhdGhUeXBlLCBwYXRofSwgcHJvamVjdDogX3Byb2plY3R9KSA9PiB7XG4gIGNvbnN0IHByb2plY3QgPSBwYXRoVHlwZSA9PT0gJ3JlbGF0aXZlJyA/IF9wcm9qZWN0IDogcGF0aC5tYXRjaCgvXFwvKFtcXHdcXC1dKykvKVsxXTtcbiAgY29uc3QgdGl0bGUgPSBwYXRoVHlwZSA9PT0gJ3JlbGF0aXZlJyA/IHBhdGg6IHBhdGgubWF0Y2goL1xcL1tcXHdcXC1dK1xcLyguKykkLylbMV07XG4gIFxuICByZXR1cm4gaHRtbGA8aW1nIGNsYXNzPVwiaWNvblwiIHNyYz1cIi9hcGkvcGFnZXMvJHtwcm9qZWN0fS8ke3RvTGModGl0bGUpfS9pY29uXCIgLz5gO1xufTtcbmNvbnN0IEhhc2hUYWcgPSAoe25vZGU6IHtocmVmfSwgcHJvamVjdH0pID0+IGh0bWxgPHNwYW4gY2xhc3M9XCJwYWdlLWxpbmtcIj4jJHtocmVmfTwvc3Bhbj5gO1xuY29uc3QgTGluayA9ICh7bm9kZToge3BhdGhUeXBlLCBocmVmLCBjb250ZW50fSwgcHJvamVjdH0pID0+IHBhdGhUeXBlICE9PSAnYWJzb2x1dGUnID9cbiAgaHRtbGA8c3BhbiBjbGFzcz1cInBhZ2UtbGlua1wiPiR7aHJlZn08L3NwYW4+YCA6XG4gIC8vIGNvbnRlbnTjgYznqbrjga7jgajjgY3jga91bmRlZmluZWTjgafjga/jgarjgY8nJ+OBq+OBquOCi+OBruOBp+OAgVxuICAvLyA/P+OBp+OBr+OBquOBj3x844GnZmFsbGJhY2vlh6bnkIbjgpLjgZnjgovlv4XopoHjgYzjgYLjgotcbiAgaHRtbGA8c3BhbiBjbGFzcz1cImxpbmtcIj4ke2NvbnRlbnQgfHwgaHJlZn08L3NwYW4+YDtcblxuZXhwb3J0IGNvbnN0IENTUyA9IGBcbi5yZWxhdGVkLXBhZ2UtY2FyZFtkYXRhLXRoZW1lPVwiZGVmYXVsdC1kYXJrXCJdIHtcbiAgLS1jYXJkLXRpdGxlLWJnOiBoc2woMCwgMCUsIDM5JSk7XG59XG4ucmVsYXRlZC1wYWdlLWNhcmRbZGF0YS10aGVtZT1cImRlZmF1bHQtbWluaW1hbFwiXSB7XG4gIC0tY2FyZC10aXRsZS1iZzogaHNsKDAsIDAlLCA4OSUpO1xufVxuLnJlbGF0ZWQtcGFnZS1jYXJkW2RhdGEtdGhlbWU9XCJwYXBlci1saWdodFwiXSB7XG4gIC0tY2FyZC10aXRsZS1iZzogaHNsKDUzLCA4JSwgNTglKTtcbn1cbi5yZWxhdGVkLXBhZ2UtY2FyZFtkYXRhLXRoZW1lPVwicGFwZXItZGFyay1kYXJrXCJdIHtcbiAgLS1jYXJkLXRpdGxlLWJnOiBoc2woMjAzLCA0MiUsIDE3JSk7XG59XG4ucmVsYXRlZC1wYWdlLWNhcmRbZGF0YS10aGVtZT1cImJsdWVcIl0ge1xuICAtLWNhcmQtdGl0bGUtYmc6IGhzbCgyMjcsIDY4JSwgNjIlKTtcbn1cbi5yZWxhdGVkLXBhZ2UtY2FyZFtkYXRhLXRoZW1lPVwicHVycGxlXCJdIHtcbiAgLS1jYXJkLXRpdGxlLWJnOiBoc2woMjY3LCAzOSUsIDYwJSk7XG59XG4udGV4dC1idWJibGVbZGF0YS10aGVtZT1cImdyZWVuXCJdIHtcbiAgLS1jYXJkLXRpdGxlLWJnOiBoc2woMTM2LCAyOSUsIDUwJSk7XG59XG4ucmVsYXRlZC1wYWdlLWNhcmRbZGF0YS10aGVtZT1cIm9yYW5nZVwiXSB7XG4gIC0tY2FyZC10aXRsZS1iZzogaHNsKDQzLCA3MSUsIDUxJSk7XG59XG4ucmVsYXRlZC1wYWdlLWNhcmRbZGF0YS10aGVtZT1cInJlZFwiXSB7XG4gIC0tY2FyZC10aXRsZS1iZzogaHNsKDQsIDU4JSwgNTYlKTtcbn1cbi5yZWxhdGVkLXBhZ2UtY2FyZFtkYXRhLXRoZW1lPVwic3ByaW5nXCJdIHtcbiAgLS1jYXJkLXRpdGxlLWJnOiBoc2woNzIsIDY0JSwgNTclKTtcbn1cbi5yZWxhdGVkLXBhZ2UtY2FyZFtkYXRhLXRoZW1lPVwia3lvdG9cIl0ge1xuICAtLWNhcmQtdGl0bGUtYmc6IGhzbCgzMzEsIDIxJSwgMjYlKTtcbn1cbi5yZWxhdGVkLXBhZ2UtY2FyZFtkYXRhLXRoZW1lPVwibmV3eW9ya1wiXSB7XG4gIC0tY2FyZC10aXRsZS1iZzogaHNsKDE3NiwgMjklLCA2NyUpO1xufVxuXG4ucmVsYXRlZC1wYWdlLWNhcmQge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IGluaGVyaXQ7XG4gIHdpZHRoOiBpbmhlcml0O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgZm9udC1mYW1pbHk6IFwiUm9ib3RvXCIsSGVsdmV0aWNhLEFyaWFsLFwiSGlyYWdpbm8gU2Fuc1wiLHNhbnMtc2VyaWY7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNhcmQtYmcsICNmZmYpO1xuICBjb2xvcjogdmFyKC0tY2FyZC10aXRsZS1jb2xvciwgIzU1NSk7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5yZWxhdGVkLXBhZ2UtY2FyZDpob3ZlciB7XG4gIGJveC1zaGFkb3c6IHZhcigtLWNhcmQtYm94LWhvdmVyLXNoYWRvdywgMCAycHggMCByZ2JhKDAsMCwwLDAuMjMpKTtcbn1cbi5yZWxhdGVkLXBhZ2UtY2FyZDpmb2N1cyB7XG4gIG91dGxpbmU6IDA7XG4gIGJveC1zaGFkb3c6IDAgMHB4IDBweCAzcHggcmdiYSgxMDIsMTc1LDIzMywwLjYpO1xuICBib3JkZXItY29sb3I6ICM2NmFmZTk7XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciBlYXNlLWluLW91dCAwLjE1cywgYm94LXNoYWRvdyBlYXNlLWluLW91dCAwLjE1c1xufVxuLnJlbGF0ZWQtcGFnZS1jYXJkLmhvdmVyIHtcbiAgb3BhY2l0eTogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNhcmQtaG92ZXItYmcsIHJnYmEoMCwwLDAsMC4wNSkpO1xuICBtaXgtYmxlbmQtbW9kZTogbXVsdGlwbHk7XG4gIHotaW5kZXg6IDE7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgLjFzXG59XG4ucmVsYXRlZC1wYWdlLWNhcmQ6aG92ZXIgLmhvdmVye1xuICBvcGFjaXR5OiAxO1xufVxuLnJlbGF0ZWQtcGFnZS1jYXJkOmFjdGl2ZSAuaG92ZXJ7XG4gIG9wYWNpdHk6IDE7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNhcmQtYWN0aXZlLWJnLCByZ2JhKDAsMCwwLDAuMSkpXG59XG4ucmVsYXRlZC1wYWdlLWNhcmQgLmNvbnRlbnQge1xuICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDVweCk7XG4gIHdpZHRoOiBpbmhlcml0O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLnJlbGF0ZWQtcGFnZS1jYXJkIC5jb250ZW50IC5oZWFkZXIge1xuICB3aWR0aDogMTAwJTtcbiAgY29sb3I6ICMzOTZiZGQ7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBib3JkZXItdG9wOiB2YXIoLS1jYXJkLXRpdGxlLWJnLCAjZjJmMmYzKSBzb2xpZCAxMHB4O1xuICBwYWRkaW5nOiA4cHggMTBweDtcbn1cbi5yZWxhdGVkLXBhZ2UtY2FyZCAuY29udGVudCAuaGVhZGVyIC50aXRsZSB7XG4gIGZvbnQtc2l6ZTogMTFweDsgLyogMTQgKiAwLjggKi9cbiAgbGluZS1oZWlnaHQ6IDE2cHg7IC8qIDIwICogMC44ICovXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBtYXgtaGVpZ2h0OiA0OHB4OyAvKiA2MCAqIDAuOCAqL1xuICBjb2xvcjogdmFyKC0tY2FyZC10aXRsZS1jb2xvciwgIzM2M2M0OSk7XG4gIG1hcmdpbjogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIC13ZWJraXQtbGluZS1jbGFtcDogMztcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG4ucmVsYXRlZC1wYWdlLWNhcmQgLmNvbnRlbnQgLmRlc2NyaXB0aW9uIHtcbiAgbGluZS1oZWlnaHQ6IDE2cHg7IC8qIDIwICogMC44ICovXG4gIHBhZGRpbmc6IDhweCAxMHB4IDA7XG4gIGZvbnQtc2l6ZTogMTBweDsgLyogMTIgKiAwLjggKi9cbiAgd2hpdGUtc3BhY2U6IHByZS1saW5lO1xuICBjb2x1bW4tY291bnQ6IDE7XG4gIGNvbHVtbi1nYXA6IDJlbTtcbiAgY29sdW1uLXdpZHRoOiAxMGVtO1xuICBoZWlnaHQ6IGluaGVyaXQ7XG4gIGNvbG9yOiB2YXIoLS1jYXJkLWRlc2NyaXB0aW9uLWNvbG9yLCBncmF5KTtcbiAgZmxleC1zaHJpbms6IDE2O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLnJlbGF0ZWQtcGFnZS1jYXJkIC5jb250ZW50IC50aHVtYm5haWwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBwYWRkaW5nOiAwIDVweDtcbn1cbi5yZWxhdGVkLXBhZ2UtY2FyZCAuY29udGVudCAuZGVzY3JpcHRpb24gcCB7XG4gIG1hcmdpbjogMDtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4ucmVsYXRlZC1wYWdlLWNhcmQgLmNvbnRlbnQgLmRlc2NyaXB0aW9uIGNvZGUge1xuICBmb250LWZhbWlseTogTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlO1xuICBmb250LXNpemU6IDkwJTtcbiAgY29sb3I6IHZhcigtLWNvZGUtY29sb3IsICMzNDJkOWMpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2RlLWJnLCByZ2JhKDAsMCwwLDAuMDQpKTtcbiAgcGFkZGluZzogMDtcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG59XG4gXG4ucmVsYXRlZC1wYWdlLWNhcmQgLmNvbnRlbnQgLmRlc2NyaXB0aW9uIC5pY29uIHtcbiAgaGVpZ2h0OiA5cHg7IC8qIDExICogMC44ICovXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4ucmVsYXRlZC1wYWdlLWNhcmQgLmNvbnRlbnQgLmRlc2NyaXB0aW9uIC5wYWdlLWxpbmsge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGNvbG9yOiB2YXIoLS1wYWdlLWxpbmstY29sb3IsICM1ZThhZjcpO1xufVxuYDtcbiIsICJpbXBvcnQge3VzZVN0YXRlLCB1c2VNZW1vLCB1c2VDYWxsYmFja30gZnJvbSAnLi4vcHJlYWN0QDEwLjUuMTMvaG9va3MuanMnO1xuaW1wb3J0IHt0b0xjfSBmcm9tICcuLi9zY3JhcGJveC10aXRsZUxjL3NjcmlwdC5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VDYXJkcyh7ZXhwaXJlZCA9IDYwLCB3aGl0ZUxpc3Q6IF93aGl0ZUxpc3QgPSBbXX0gPSB7fSkge1xuICBjb25zdCBbY2FjaGVzLCBzZXRDYWNoZXNdID0gdXNlU3RhdGUoe30pO1xuICAvLyDooajnpLrjgZnjgovjg4fjg7zjgr/jga5jYWNoZSBpZOOBruODquOCueODiOOBqOihqOekuuS9jee9ruOBqOOBruODmuOCouOBruODquOCueODiFxuICBjb25zdCBbc2VsZWN0ZWRMaXN0LCBzZXRTZWxlY3RlZExpc3RdID0gdXNlU3RhdGUoW10pO1xuICBcbiAgLy8g44GT44Gu44Oq44K544OI44Gr44GC44KLcHJvamVjdOS7peWkluOBr+ihqOekuuOBl+OBquOBhFxuICBjb25zdCB3aGl0ZUxpc3QgPSB1c2VNZW1vKFxuICAgICgpID0+IFsuLi5uZXcgU2V0KFtzY3JhcGJveC5Qcm9qZWN0Lm5hbWUsIC4uLl93aGl0ZUxpc3RdKV0sXG4gICAgW193aGl0ZUxpc3RdXG4gICk7XG4gIFxuICAvLyDnibnlrprjga5wcm9qZWN044GucGFnZeOBruaDheWgseOCkmNhY2hl44GZ44KLXG4gIGNvbnN0IF9jYWNoZSA9IHVzZUNhbGxiYWNrKGFzeW5jIChwcm9qZWN0LCB0aXRsZUxjKSA9PiB7XG4gICAgY29uc3QgaWQgPSB0b0lkKHByb2plY3QsIHRpdGxlTGMpO1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMDsgLy8gY2FjaGXjga7mpJzoqLzplovlp4vmmYLliLtcbiAgICBsZXQgX2V4cGlyZWQgPSB0cnVlO1xuICAgIHNldENhY2hlcyhvbGRDYWNoZXMgPT4ge1xuICAgICAgX2V4cGlyZWQgPSAob2xkQ2FjaGVzW2lkXT8uY2hlY2tlZCA/PyAwKSArIGV4cGlyZWQgPCBub3c7IC8vIGNhY2hl44Gu5a+/5ZG944KS5Yik5a6a44GZ44KLXG4gICAgICBvbGRDYWNoZXNbaWRdID0ge1xuICAgICAgICBwcm9qZWN0LCB0aXRsZUxjLFxuICAgICAgICBsb2FkaW5nOiBfZXhwaXJlZCxcbiAgICAgICAgbGluZXM6IG9sZENhY2hlc1tpZF0/LmxpbmVzID8/IFtdLFxuICAgICAgICBsaW5rZWQ6IG9sZENhY2hlc1tpZF0/LmxpbmtlZCA/PyBbXSxcbiAgICAgICAgY2hlY2tlZDogbm93LFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7Li4ub2xkQ2FjaGVzfTtcbiAgICB9KTtcbiAgICBpZiAoIV9leHBpcmVkKSByZXR1cm47XG4gICAgXG4gICAgLy8gY2FjaGXjgYzlr7/lkb3liIfjgozjga7jgajjgY3jga/lho3nlJ/miJDjgZnjgotcbiAgICBsZXQgY2FjaGU7XG4gICAgdHJ5IHtcbiAgICAgIGNhY2hlID0gYXdhaXQgZmV0Y2hQYWdlKHByb2plY3QsIHRpdGxlTGMpO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0Q2FjaGVzKG9sZENhY2hlcyA9PiB7XG4gICAgICAgIG9sZENhY2hlc1tpZF0gPSB7XG4gICAgICAgICAgcHJvamVjdCwgdGl0bGVMYyxcbiAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAvLyBjYWNoZeOBruWPluW+l+OBq+WkseaVl+OBl+OBpuOBhOOBn+OCieabtOaWsOOBl+OBquOBhFxuICAgICAgICAgIGxpbmVzOiBjYWNoZT8ubGluZXMgPz8gb2xkQ2FjaGVzW2lkXT8ubGluZXMgPz8gW10sXG4gICAgICAgICAgbGlua2VkOiBjYWNoZT8ubGlua2VkID8/IG9sZENhY2hlc1tpZF0/LmxpbmtlZCA/PyBbXSxcbiAgICAgICAgICBjaGVja2VkOiBvbGRDYWNoZXNbaWRdPy5jaGVja2VkID8/IG5vdyxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHsuLi5vbGRDYWNoZXN9O1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbZXhwaXJlZF0pO1xuICAgIFxuICAvLyB3aGl0ZUxpc3TkuK3jga5wcm9qZWN044Gr5a2Y5Zyo44GZ44KL5ZCM5ZCN44Gu44Oa44O844K444KS5YWo44GmY2FjaGXjgZnjgotcbiAgY29uc3QgY2FjaGUgPSB1c2VDYWxsYmFjayhhc3luYyAocHJvamVjdCwgdGl0bGVMYykgPT4ge1xuICAgIC8vIHdoaXRlTGlzdOOBq+OBquOBhHByb2plY3Tjga7loLTlkIjjga/kvZXjgoLjgZfjgarjgYRcbiAgICBpZiAoIXdoaXRlTGlzdC5pbmNsdWRlcyhwcm9qZWN0KSkgcmV0dXJuO1xuICAgIC8vIHdoaXRlTGlzdOOBq+OBguOCi3Byb2plY3TjgavjgaTjgYTjgabjgoJjYWNoZeOBl+OBpuOBiuOBj1xuICAgIGZvciAoY29uc3QgX3Byb2plY3Qgb2Ygd2hpdGVMaXN0KSB7XG4gICAgICBhd2FpdCBfY2FjaGUoX3Byb2plY3QsIHRpdGxlTGMpO1xuICAgIH1cbiAgfSwgW19jYWNoZSwgd2hpdGVMaXN0XSk7XG4gIC8vIGRlcHRo6ZqO5bGk55uu44Gr44Kr44O844OJ44KS6KGo56S644GZ44KLXG4gIGNvbnN0IHNob3cgPSB1c2VDYWxsYmFjaygoZGVwdGgsIHByb2plY3QsIHRpdGxlTGMsIHBvc2l0aW9uKSA9PiB7XG4gICAgLy8gd2hpdGVMaXN044Gr44Gq44GEcHJvamVjdOOBruWgtOWQiOOBr+S9leOCguOBl+OBquOBhFxuICAgIGlmICghd2hpdGVMaXN0LmluY2x1ZGVzKHByb2plY3QpKSByZXR1cm47XG4gICAgXG4gICAgc2V0U2VsZWN0ZWRMaXN0KGxpc3QgPT4ge1xuICAgICAgY29uc3QgaWRzID0gd2hpdGVMaXN0Lm1hcChfcHJvamVjdCA9PiB0b0lkKF9wcm9qZWN0LCB0aXRsZUxjKSk7XG4gICAgICByZXR1cm4gWy4uLmxpc3Quc2xpY2UoMCwgZGVwdGgpLCB7aWRzLCBwb3NpdGlvbn1dO1xuICAgIH0pO1xuICB9LCBbd2hpdGVMaXN0XSk7XG4gIC8vIGRlcHRo6ZqO5bGk5Lul6ZmN44Gu44Kr44O844OJ44KS5raI44GZXG4gIGNvbnN0IGhpZGUgPSB1c2VDYWxsYmFjaygoZGVwdGgpID0+IHNldFNlbGVjdGVkTGlzdChsaXN0ID0+IFsuLi5saXN0LnNsaWNlKDAsIGRlcHRoKV0pLCBbXSk7XG4gIFxuICBjb25zdCBjYXJkcyA9IHVzZU1lbW8oXG4gICAgKCkgPT4ge1xuICAgICAgLy8g5Lul5YmN44Gu6ZqO5bGk44GudGV4dCBidWJibGXjgafkvb/jgaPjgZ/jg5rjg7zjgrjjga9jYXJkIGJ1YmJsZeOBq+S9v+OCj+OBquOBhFxuICAgICAgY29uc3Qgc2hvd2VkUGFnZXMgPSBbe3Byb2plY3Q6IHNjcmFwYm94LlByb2plY3QubmFtZSwgdGl0bGVMYzogdG9MYyhzY3JhcGJveC5QYWdlLnRpdGxlID8/ICcnKX1dO1xuICAgICAgcmV0dXJuIHNlbGVjdGVkTGlzdC5mbGF0TWFwKCh7aWRzLCBwb3NpdGlvbn0pID0+IHtcbiAgICAgICAgY29uc3QgY2FjaGVMaXN0ID0gaWRzLmZsYXRNYXAoaWQgPT4gY2FjaGVzW2lkXSA/IFtjYWNoZXNbaWRdXSA6IFtdKTtcbiAgICAgICAgLy8gdGV4dCBidWJibGXjgafooajnpLrjgZnjgovjg5rjg7zjgrjjgpLmsbrjgoHjgotcbiAgICAgICAgY29uc3Qge3Byb2plY3QsIHRpdGxlTGMsIGxpbmVzfSA9IGNhY2hlTGlzdFxuICAgICAgICAgIC5maW5kKGNhY2hlID0+IGNhY2hlLmxpbmVzLmxlbmd0aCA+IDApID8/IGNhY2hlTGlzdFswXTtcbiAgICAgICAgY29uc3QgbGlua2VkID0gY2FjaGVMaXN0LmZsYXRNYXAoXG4gICAgICAgICAgKHtwcm9qZWN0LCBsaW5rZWR9KSA9PiBsaW5rZWQubWFwKHBhZ2UgPT4gKHsuLi5wYWdlLCBwcm9qZWN0fSkpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNhcmQgPSB7XG4gICAgICAgICAgcHJvamVjdCwgdGl0bGVMYywgcG9zaXRpb24sXG4gICAgICAgICAgbGluZXM6IHRpdGxlTGMgPT09IHNob3dlZFBhZ2VzWzBdLnRpdGxlTGMgPyBbXSA6IGxpbmVzLCAvLyBlZGl0b3LjgafplovjgYTjgabjgYTjgovjg5rjg7zjgrjjga/ooajnpLrjgZfjgarjgYRcbiAgICAgICAgICBsaW5rZWQ6IGxpbmtlZC5mbGF0TWFwKCh7cHJvamVjdDogX3Byb2plY3QsIHRpdGxlLCAuLi5wYWdlfSkgPT5cbiAgICAgICAgICAgICFzaG93ZWRQYWdlcy5zb21lKHBhZ2UgPT4gcGFnZS5wcm9qZWN0ID09PSBfcHJvamVjdCAmJiBwYWdlLnRpdGxlTGMgPT09dG9MYyh0aXRsZSkpID9cbiAgICAgICAgICAgICAgW3twcm9qZWN0OiBfcHJvamVjdCwgdGl0bGUsIC4uLnBhZ2V9XSA6XG4gICAgICAgICAgICAgIFtdXG4gICAgICAgICAgKSxcbiAgICAgICAgICBsb2FkaW5nOiBjYWNoZUxpc3QuZXZlcnkoKHtsb2FkaW5nfSkgPT4gbG9hZGluZyksXG4gICAgICAgIH07XG4gICAgICAgIHNob3dlZFBhZ2VzLnB1c2goe3Byb2plY3QsIHRpdGxlTGN9KTtcbiAgICAgICAgLy8gbGluZXPjgoJsaW5rZWTjgoLnqbrjga7jgajjgY3jga/mtojjgZlcbiAgICAgICAgcmV0dXJuIGNhcmQubGluZXMubGVuZ3RoID4gMCB8fCBjYXJkLmxpbmtlZC5sZW5ndGggPiAwID8gW2NhcmRdIDogW107XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtjYWNoZXMsIHNlbGVjdGVkTGlzdF1cbiAgKTtcbiAgXG4gIHJldHVybiB7Y2FyZHMsIGNhY2hlLCBzaG93LCBoaWRlfTtcbn1cblxuZnVuY3Rpb24gdG9JZChwcm9qZWN0LCB0aXRsZUxjKSB7XG4gIHJldHVybiBgLyR7cHJvamVjdH0vJHt0aXRsZUxjfWA7XG59XG5hc3luYyBmdW5jdGlvbiBmZXRjaFBhZ2UocHJvamVjdCAsdGl0bGVMYykge1xuICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgL2FwaS9wYWdlcy8ke3Byb2plY3R9LyR7dGl0bGVMY31gKTtcbiAgLy8g5a2Y5Zyo44GX44Gq44GE44Oa44O844K444Gu5pmCXG4gIGlmICghcmVzLm9rKSByZXR1cm4ge307XG4gIGNvbnN0IGpzb24gPSBhd2FpdCByZXMuanNvbigpO1xuICBpZiAoIWpzb24ubGluZXMpIHJldHVybiB7fTtcbiAgY29uc3Qge2xpbmVzLCBsaW5rcywgcmVsYXRlZFBhZ2VzOiB7bGlua3MxaG9wfX0gPSBqc29uO1xuICBcbiAgLy8g6YCG44Oq44Oz44Kv44KS5Y+W5b6X44GZ44KLXG4gIGNvbnN0IGxpbmtzTGMgPSBsaW5rcy5tYXAobGluayA9PiB0b0xjKGxpbmspKTtcbiAgY29uc3QgcGFnZXMgPSBsaW5rczFob3AuZmxhdE1hcCgoe1xuICAgICAgdGl0bGUsIGRlc2NyaXB0aW9ucywgaW1hZ2VcbiAgICB9KSA9PiAhbGlua3NMYy5pbmNsdWRlcyh0b0xjKHRpdGxlKSkgP1xuICAgICAgW3t0aXRsZSwgZGVzY3JpcHRpb25zLCBpbWFnZX1dIDpcbiAgICAgIFtdXG4gICk7XG4gIHJldHVybiB7XG4gICAgbGluZXM6IGxpbmVzLnNsaWNlKDEpLCAvLyB0aXRsZeOCkumZpOOBj1xuICAgIGxpbmtlZDogcGFnZXMsXG4gIH07XG59XG5cbi8vIGNhY2hl44GL44KJ5Y+W44KK5Ye644GZXG5mdW5jdGlvbiBmaW5kKGxpc3QsIHByb2plY3QsIHRpdGxlTGMpIHsgXG4gIHJldHVybiBsaXN0LmZpbmQoY2FyZCA9PiBjYXJkLnByb2plY3QgPT09IHByb2plY3QgJiYgY2FyZC50aXRsZUxjID09PSB0aXRsZUxjKTtcbn1cbiIsICJpbXBvcnQge3VzZUVmZmVjdH0gZnJvbSAnLi4vcHJlYWN0QDEwLjUuMTMvaG9va3MuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlRXZlbnRMaXN0ZW5lcihlbGVtZW50LCB0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucykge1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gICAgcmV0dXJuICgpID0+IGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH0sIFtlbGVtZW50LCBsaXN0ZW5lciwgb3B0aW9ucywgdHlwZV0pO1xufVxuIiwgImltcG9ydCB7dXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2t9IGZyb20gJy4uL3ByZWFjdEAxMC41LjEzL2hvb2tzLmpzJztcblxuY29uc3QgZGVmYXVsdFRoZW1lID0gJ2RlZmF1bHQtbGlnaHQnO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2plY3RUaGVtZSgpIHtcbiAgY29uc3QgW21hcCwgc2V0TWFwXSA9IHVzZVN0YXRlKHt9KTtcbiAgXG4gIC8vIHByb2plY3Tjga50aGVtZeaDheWgseOCkuWPluW+l+OBmeOCi1xuICBjb25zdCBsb2FkVGhlbWUgPSB1c2VDYWxsYmFjayhwcm9qZWN0ID0+IHtcbiAgICBpZiAobWFwW3Byb2plY3RdKSByZXR1cm47IC8vIGNhY2hl44Gu5Y+W5b6X44GvMeWbnuOBoOOBkVxuICAgIGlmIChwcm9qZWN0ID09PSBzY3JhcGJveC5Qcm9qZWN0Lm5hbWUpIHJldHVybjtcbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgc2V0TWFwKG9sZE1hcCA9PiB7XG4gICAgICAgIG9sZE1hcFtwcm9qZWN0XSA9IGRlZmF1bHRUaGVtZTtcbiAgICAgICAgcmV0dXJuIHsuLi5vbGRNYXB9O1xuICAgICAgfSk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgL2FwaS9wcm9qZWN0cy8ke3Byb2plY3R9YCk7XG4gICAgICAgIGNvbnN0IHt0aGVtZX0gPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICBzZXRNYXAob2xkTWFwID0+IHtcbiAgICAgICAgICBvbGRNYXBbcHJvamVjdF0gPSB0aGVtZSA/PyBkZWZhdWx0VGhlbWU7XG4gICAgICAgICAgcmV0dXJuIHsuLi5vbGRNYXB9O1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgfVxuICAgIH0pKCk7XG4gIH0sIFttYXBdKTtcbiAgXG4gIGNvbnN0IGdldFRoZW1lID0gdXNlQ2FsbGJhY2soKHByb2plY3QpID0+IHtcbiAgICBpZiAocHJvamVjdCA9PT0gc2NyYXBib3guUHJvamVjdC5uYW1lKSByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRhdGFzZXQucHJvamVjdFRoZW1lO1xuICAgIHJldHVybiBtYXBbcHJvamVjdF0gPz8gZGVmYXVsdFRoZW1lO1xuICB9LCBbbWFwXSk7XG4gIFxuICByZXR1cm4ge2dldFRoZW1lLCBsb2FkVGhlbWV9O1xufVxuIiwgImltcG9ydCB7VGV4dEJ1YmJsZSwgQ1NTIGFzIHRleHRDU1N9IGZyb20gJy4uL1NjcmFwQnViYmxlQDAuMi4wJTJGVGV4dEJ1YmJsZS9zY3JpcHQuanMnO1xuaW1wb3J0IHtDYXJkQnViYmxlLCBDU1MgYXMgbGlzdENTU30gZnJvbSAnLi4vU2NyYXBCdWJibGVAMC4yLjAlMkZDYXJkQnViYmxlL3NjcmlwdC5qcyc7XG5pbXBvcnQge1JlbGF0ZWRQYWdlQ2FyZCwgQ1NTIGFzIGNhcmRDU1N9IGZyb20gJy4uL2NhcmQtYnViYmxlLWNvbXBvbmVudEAwLjEuMC9zY3JpcHQuanMnO1xuaW1wb3J0IHtodG1sLCBGcmFnbWVudCwgcmVuZGVyfSBmcm9tICcuLi9odG1AMy4wLjQlMkZwcmVhY3Qvc2NyaXB0LmpzJztcbmltcG9ydCB7dXNlU3RhdGUsIHVzZUNhbGxiYWNrfSBmcm9tICcuLi9wcmVhY3RAMTAuNS4xMy9ob29rcy5qcyc7XG5pbXBvcnQge3VzZUNhcmRzfSBmcm9tICcuLi9TY3JhcEJ1YmJsZUAwLjIuMCUyRnVzZS1jYXJkcy9zY3JpcHQuanMnO1xuaW1wb3J0IHt1c2VFdmVudExpc3RlbmVyfSBmcm9tICcuLi91c2UtZXZlbnQtbGlzdGVuZXIvc2NyaXB0LmpzJztcbmltcG9ydCB7dXNlUHJvamVjdFRoZW1lfSBmcm9tICcuLi91c2UtcHJvamVjdC10aGVtZS9zY3JpcHQuanMnO1xuaW1wb3J0IHt1c2VNdXRhdGlvbk9ic2VydmVyfSBmcm9tICcuLi91c2VNdXRhdGlvbk9ic2VydmVyL3NjcmlwdC5qcyc7XG5pbXBvcnQge3RvTGN9IGZyb20gJy4uL3NjcmFwYm94LXRpdGxlTGMvc2NyaXB0LmpzJztcblxuY29uc3QgdXNlcnNjcmlwdE5hbWUgPSAnc2NyYXAtYnViYmxlJztcbmV4cG9ydCBjb25zdCBBcHAgPSAoe2RlbGF5ID0gNTAwLCBleHBpcmVkID0gNjAsIHdoaXRlTGlzdCA9IFtdfSA9IHt9KSA9PiB7XG4gIGNvbnN0IHtjYXJkcywgY2FjaGUsIHNob3csIGhpZGV9ID0gdXNlQ2FyZHMoe2V4cGlyZWQsIHdoaXRlTGlzdH0pO1xuICBjb25zdCBbdGltZXIsIHNldFRpbWVyXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCB7Z2V0VGhlbWUsIGxvYWRUaGVtZX0gPSB1c2VQcm9qZWN0VGhlbWUoKTtcbiAgXG4gIGNvbnN0IHNob3dDYXJkID0gdXNlQ2FsbGJhY2soKGRlcHRoLCBsaW5rKSA9PiB7XG4gICAgaWYgKCFsaW5rLm1hdGNoZXMoJ2EucGFnZS1saW5rLCAubGluZS10aXRsZSAudGV4dCcpKSByZXR1cm47XG4gICAgXG4gICAgY29uc3QgW18sIHByb2plY3QsIGVuY29kZWRUaXRsZUxjXSA9IGxpbmsuY2xhc3NMaXN0LmNvbnRhaW5zKCdwYWdlLWxpbmsnKSA/XG4gICAgICBsaW5rLmhyZWYubWF0Y2goL1xcLyhbXFx3XFwtXSspXFwvKFteI10qKS8pID8/IFsnJywnJywnJ10gOlxuICAgICAgWycnLCBzY3JhcGJveC5Qcm9qZWN0Lm5hbWUsIHNjcmFwYm94LlBhZ2UudGl0bGVdO1xuICAgIGlmIChwcm9qZWN0ID09PSAnJykgcmV0dXJuO1xuICAgIGNvbnN0IHRpdGxlTGMgPSB0b0xjKGRlY29kZVVSSUNvbXBvbmVudChlbmNvZGVkVGl0bGVMYykpO1xuICAgIGxvYWRUaGVtZShwcm9qZWN0KTtcbiAgICBjYWNoZShwcm9qZWN0LCB0aXRsZUxjKTtcbiAgXG4gICAgc2V0VGltZXIoYmVmb3JlID0+IHtcbiAgICAgIGNsZWFyVGltZW91dChiZWZvcmUpO1xuICAgICAgcmV0dXJuIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCB7dG9wLCByaWdodCwgbGVmdCwgYm90dG9tfSA9IGxpbmsuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGFkanVzdFJpZ2h0ID0gKGxlZnQgLSByb290LmxlZnQpLyByb290LndpZHRoID4gMC41OyAvLyDlj7Plr4TjgZvjgavjgZnjgovjgYvjganjgYbjgYtcbiAgICAgICAgc2hvdyhkZXB0aCwgcHJvamVjdCwgdGl0bGVMYywge1xuICAgICAgICAgIHRvcDogTWF0aC5yb3VuZChib3R0b20gLSByb290LnRvcCksXG4gICAgICAgICAgYm90dG9tOiBNYXRoLnJvdW5kKHJvb3QuYm90dG9tIC0gdG9wKSxcbiAgICAgICAgICAuLi4oYWRqdXN0UmlnaHQgP1xuICAgICAgICAgICAge3JpZ2h0OiBNYXRoLnJvdW5kKHJvb3QucmlnaHQgLSByaWdodCl9IDpcbiAgICAgICAgICAgIHtsZWZ0OiBNYXRoLnJvdW5kKGxlZnQgLSByb290LmxlZnQpfVxuICAgICAgICAgICksXG4gICAgICAgIH0pO1xuICAgICAgfSwgZGVsYXkpO1xuICAgIH0pO1xuICB9LCBbY2FjaGUsIHNob3csIGxvYWRUaGVtZV0pO1xuICBjb25zdCBjYW5jZWwgPSB1c2VDYWxsYmFjaygoe3RhcmdldH0pID0+IHtcbiAgICBpZiAoIXRhcmdldC5tYXRjaGVzKCdhLnBhZ2UtbGluaywgLmxpbmUtdGl0bGUgLnRleHQnKSkgcmV0dXJuO1xuICAgIFxuICAgIHNldFRpbWVyKGJlZm9yZSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQoYmVmb3JlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICB9LCBbXSk7XG4gIFxuICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XG4gIHVzZUV2ZW50TGlzdGVuZXIoZWRpdG9yLCAncG9pbnRlcmVudGVyJywgKHt0YXJnZXR9KSA9PiBzaG93Q2FyZCgwLCB0YXJnZXQpLCB7Y2FwdHVyZTogdHJ1ZX0pO1xuICB1c2VFdmVudExpc3RlbmVyKGVkaXRvciwgJ3BvaW50ZXJsZWF2ZScsIGNhbmNlbCwge2NhcHR1cmU6IHRydWV9KTtcbiAgdXNlRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwgJ2NsaWNrJywgKHt0YXJnZXR9KSA9PiB7XG4gICAgaWYgKHRhcmdldC5kYXRhc2V0LnVzZXJzY3JpcHROYW1lID09PSB1c2Vyc2NyaXB0TmFtZSkgcmV0dXJuO1xuICAgIGhpZGUoMCk7XG4gIH0sIHtjYXB0dXJlOiB0cnVlfSk7XG4gIFxuICB1c2VNdXRhdGlvbk9ic2VydmVyKFxuICAgIFt7Y3VycmVudDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInBhZ2Utd3JhcHBlclwiKVswXX1dLFxuICAgICAgKFt7dGFyZ2V0fV0pID0+IHtcbiAgICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZW50ZXJcIikpIHJldHVybjtcbiAgICAgIGhpZGUoMCk7XG4gICAgfSxcbiAgICB7YXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbXCJjbGFzc1wiXX1cbiAgKTtcbiAgXG4gIHJldHVybiBodG1sYFxuICAgIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvS2FUZVgvMC4xMi4wL2thdGV4Lm1pbi5jc3NcIiAvPlxuICAgIDxzdHlsZT5cbiAgICAgICoge2JveC1zaXppbmc6IGJvcmRlci1ib3g7fVxuICAgICAgJHt0ZXh0Q1NTfVxuICAgICAgJHtsaXN0Q1NTfVxuICAgICAgJHtjYXJkQ1NTfVxuICAgIDwvc3R5bGU+XG4gICAgJHtjYXJkcy5tYXAoKHtcbiAgICAgIHByb2plY3QsIHRpdGxlTGMsIGxpbmVzLCBwb3NpdGlvbjoge3RvcCwgbGVmdCwgYm90dG9tLCByaWdodH0sIGxpbmtlZCwgbG9hZGluZyxcbiAgICB9LCBpbmRleCkgPT4gaHRtbGA8JHtGcmFnbWVudH0ga2V5PVwiLyR7cHJvamVjdH0vJHt0aXRsZUxjfS9cIj5cbiAgICAgIDwke1RleHRCdWJibGV9XG4gICAgICAgIHByb2plY3Q9XCIke3Byb2plY3R9XCIgdGl0bGVMYz1cIiR7dGl0bGVMY31cIlxuICAgICAgICB0aGVtZT1cIiR7Z2V0VGhlbWUocHJvamVjdCl9XCJcbiAgICAgICAgc3R5bGU9XCJ0b3A6ICR7dG9wfXB4OyAke2xlZnQgPyBgbGVmdDogJHtsZWZ0fWAgOiBgcmlnaHQ6ICR7cmlnaHR9YH1weDtcIlxuICAgICAgICBsaW5lcz1cIiR7bGluZXN9XCJcbiAgICAgICAgbG9hZGluZz1cIiR7bG9hZGluZ31cIlxuICAgICAgICBvblBvaW50ZXJFbnRlckNhcHR1cmU9XCIkeyh7dGFyZ2V0fSkgPT4gc2hvd0NhcmQoaW5kZXggKyAxLCB0YXJnZXQpfVwiXG4gICAgICAgIG9uUG9pbnRlckxlYXZlQ2FwdHVyZT1cIiR7Y2FuY2VsfVwiXG4gICAgICAgIG9uQ2xpY2s9XCIkeygpID0+IGhpZGUoaW5kZXggKyAxKX1cIlxuICAgICAgICBoYXNDaGlsZD1cIiR7Y2FyZHMubGVuZ3RoID4gaW5kZXggKyAxfVwiIC8+XG4gICAgICA8JHtDYXJkQnViYmxlfVxuICAgICAgICBsb2FkaW5nPVwiJHtsb2FkaW5nfVwiXG4gICAgICAgIHN0eWxlPVwiYm90dG9tOiAke2JvdHRvbX1weDsgJHtsZWZ0ID8gYGxlZnQ6ICR7bGVmdH1gIDogYHJpZ2h0OiAke3JpZ2h0fWB9cHg7XCJcbiAgICAgICAgb25DbGlja0NhcHR1cmU9XCIkeyh7dGFyZ2V0fSkgPT4gdGFyZ2V0LnRhZ05hbWUgIT09ICdBJyYmIGhpZGUoaW5kZXggKyAxKX1cIlxuICAgICAgICBoYXNDaGlsZD1cIiR7Y2FyZHMubGVuZ3RoID4gaW5kZXggKyAxfVwiPlxuICAgICAgICAke2xpbmtlZC5tYXAocGFnZSA9PiBodG1sYFxuICAgICAgICAgIDwke1JlbGF0ZWRQYWdlQ2FyZH1cbiAgICAgICAgICAgIGtleT1cIi8ke3BhZ2UucHJvamVjdH0vJHtwYWdlLnRpdGxlfVwiXG4gICAgICAgICAgICBwcm9qZWN0PVwiJHtwYWdlLnByb2plY3R9XCIgdGl0bGU9XCIke3BhZ2UudGl0bGV9XCJcbiAgICAgICAgICAgIHRoZW1lPVwiJHtnZXRUaGVtZShwYWdlLnByb2plY3QpfVwiXG4gICAgICAgICAgICBkZXNjcmlwdGlvbnM9XCIke3BhZ2UuZGVzY3JpcHRpb25zfVwiIHRodW1ibmFpbD1cIiR7cGFnZS5pbWFnZX1cIlxuICAgICAgICAgICAgb25Qb2ludGVyRW50ZXJDYXB0dXJlPVwiJHsoe3RhcmdldH0pID0+IHNob3dDYXJkKGluZGV4ICsgMSwgdGFyZ2V0KX1cIlxuICAgICAgICAgICAgb25Qb2ludGVyTGVhdmVDYXB0dXJlPVwiJHtjYW5jZWx9XCIgLz5cbiAgICAgICAgYCl9XG4gICAgICA8Ly8+XG4gICAgPC8vPmApfVxuICBgO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1vdW50KHtkZWxheSA9IDUwMCwgZXhwaXJlZCA9IDYwLCB3aGl0ZUxpc3QgPSBbXX0gPSB7fSkge1xuICBjb25zdCBhcHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgYXBwLmRhdGFzZXQudXNlcnNjcmlwdE5hbWU9IHVzZXJzY3JpcHROYW1lO1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJykuYXBwZW5kKGFwcCk7XG4gIGFwcC5hdHRhY2hTaGFkb3coe21vZGU6ICdvcGVuJ30pO1xuICByZW5kZXIoaHRtbGA8JHtBcHB9IGRlbGF5PVwiJHtkZWxheX1cIiBleHBpcmVkPVwiJHtleHBpcmVkfVwiIHdoaXRlTGlzdD1cIiR7d2hpdGVMaXN0fVwiLz5gLCBhcHAuc2hhZG93Um9vdCk7XG59XG4iLCAiY29uc3QgaW5zdGFuY2VPZkFueSA9IChvYmplY3QsIGNvbnN0cnVjdG9ycykgPT4gY29uc3RydWN0b3JzLnNvbWUoKGMpID0+IG9iamVjdCBpbnN0YW5jZW9mIGMpO1xuXG5sZXQgaWRiUHJveHlhYmxlVHlwZXM7XG5sZXQgY3Vyc29yQWR2YW5jZU1ldGhvZHM7XG4vLyBUaGlzIGlzIGEgZnVuY3Rpb24gdG8gcHJldmVudCBpdCB0aHJvd2luZyB1cCBpbiBub2RlIGVudmlyb25tZW50cy5cbmZ1bmN0aW9uIGdldElkYlByb3h5YWJsZVR5cGVzKCkge1xuICAgIHJldHVybiAoaWRiUHJveHlhYmxlVHlwZXMgfHxcbiAgICAgICAgKGlkYlByb3h5YWJsZVR5cGVzID0gW1xuICAgICAgICAgICAgSURCRGF0YWJhc2UsXG4gICAgICAgICAgICBJREJPYmplY3RTdG9yZSxcbiAgICAgICAgICAgIElEQkluZGV4LFxuICAgICAgICAgICAgSURCQ3Vyc29yLFxuICAgICAgICAgICAgSURCVHJhbnNhY3Rpb24sXG4gICAgICAgIF0pKTtcbn1cbi8vIFRoaXMgaXMgYSBmdW5jdGlvbiB0byBwcmV2ZW50IGl0IHRocm93aW5nIHVwIGluIG5vZGUgZW52aXJvbm1lbnRzLlxuZnVuY3Rpb24gZ2V0Q3Vyc29yQWR2YW5jZU1ldGhvZHMoKSB7XG4gICAgcmV0dXJuIChjdXJzb3JBZHZhbmNlTWV0aG9kcyB8fFxuICAgICAgICAoY3Vyc29yQWR2YW5jZU1ldGhvZHMgPSBbXG4gICAgICAgICAgICBJREJDdXJzb3IucHJvdG90eXBlLmFkdmFuY2UsXG4gICAgICAgICAgICBJREJDdXJzb3IucHJvdG90eXBlLmNvbnRpbnVlLFxuICAgICAgICAgICAgSURCQ3Vyc29yLnByb3RvdHlwZS5jb250aW51ZVByaW1hcnlLZXksXG4gICAgICAgIF0pKTtcbn1cbmNvbnN0IGN1cnNvclJlcXVlc3RNYXAgPSBuZXcgV2Vha01hcCgpO1xuY29uc3QgdHJhbnNhY3Rpb25Eb25lTWFwID0gbmV3IFdlYWtNYXAoKTtcbmNvbnN0IHRyYW5zYWN0aW9uU3RvcmVOYW1lc01hcCA9IG5ldyBXZWFrTWFwKCk7XG5jb25zdCB0cmFuc2Zvcm1DYWNoZSA9IG5ldyBXZWFrTWFwKCk7XG5jb25zdCByZXZlcnNlVHJhbnNmb3JtQ2FjaGUgPSBuZXcgV2Vha01hcCgpO1xuZnVuY3Rpb24gcHJvbWlzaWZ5UmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgdW5saXN0ZW4gPSAoKSA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N1Y2Nlc3MnLCBzdWNjZXNzKTtcbiAgICAgICAgICAgIHJlcXVlc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCBlcnJvcik7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKHdyYXAocmVxdWVzdC5yZXN1bHQpKTtcbiAgICAgICAgICAgIHVubGlzdGVuKCk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KHJlcXVlc3QuZXJyb3IpO1xuICAgICAgICAgICAgdW5saXN0ZW4oKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdzdWNjZXNzJywgc3VjY2Vzcyk7XG4gICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBlcnJvcik7XG4gICAgfSk7XG4gICAgcHJvbWlzZVxuICAgICAgICAudGhlbigodmFsdWUpID0+IHtcbiAgICAgICAgLy8gU2luY2UgY3Vyc29yaW5nIHJldXNlcyB0aGUgSURCUmVxdWVzdCAoKnNpZ2gqKSwgd2UgY2FjaGUgaXQgZm9yIGxhdGVyIHJldHJpZXZhbFxuICAgICAgICAvLyAoc2VlIHdyYXBGdW5jdGlvbikuXG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIElEQkN1cnNvcikge1xuICAgICAgICAgICAgY3Vyc29yUmVxdWVzdE1hcC5zZXQodmFsdWUsIHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENhdGNoaW5nIHRvIGF2b2lkIFwiVW5jYXVnaHQgUHJvbWlzZSBleGNlcHRpb25zXCJcbiAgICB9KVxuICAgICAgICAuY2F0Y2goKCkgPT4geyB9KTtcbiAgICAvLyBUaGlzIG1hcHBpbmcgZXhpc3RzIGluIHJldmVyc2VUcmFuc2Zvcm1DYWNoZSBidXQgZG9lc24ndCBkb2Vzbid0IGV4aXN0IGluIHRyYW5zZm9ybUNhY2hlLiBUaGlzXG4gICAgLy8gaXMgYmVjYXVzZSB3ZSBjcmVhdGUgbWFueSBwcm9taXNlcyBmcm9tIGEgc2luZ2xlIElEQlJlcXVlc3QuXG4gICAgcmV2ZXJzZVRyYW5zZm9ybUNhY2hlLnNldChwcm9taXNlLCByZXF1ZXN0KTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGNhY2hlRG9uZVByb21pc2VGb3JUcmFuc2FjdGlvbih0eCkge1xuICAgIC8vIEVhcmx5IGJhaWwgaWYgd2UndmUgYWxyZWFkeSBjcmVhdGVkIGEgZG9uZSBwcm9taXNlIGZvciB0aGlzIHRyYW5zYWN0aW9uLlxuICAgIGlmICh0cmFuc2FjdGlvbkRvbmVNYXAuaGFzKHR4KSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGRvbmUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHVubGlzdGVuID0gKCkgPT4ge1xuICAgICAgICAgICAgdHgucmVtb3ZlRXZlbnRMaXN0ZW5lcignY29tcGxldGUnLCBjb21wbGV0ZSk7XG4gICAgICAgICAgICB0eC5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIGVycm9yKTtcbiAgICAgICAgICAgIHR4LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgZXJyb3IpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIHVubGlzdGVuKCk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KHR4LmVycm9yIHx8IG5ldyBET01FeGNlcHRpb24oJ0Fib3J0RXJyb3InLCAnQWJvcnRFcnJvcicpKTtcbiAgICAgICAgICAgIHVubGlzdGVuKCk7XG4gICAgICAgIH07XG4gICAgICAgIHR4LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBsZXRlJywgY29tcGxldGUpO1xuICAgICAgICB0eC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGVycm9yKTtcbiAgICAgICAgdHguYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBlcnJvcik7XG4gICAgfSk7XG4gICAgLy8gQ2FjaGUgaXQgZm9yIGxhdGVyIHJldHJpZXZhbC5cbiAgICB0cmFuc2FjdGlvbkRvbmVNYXAuc2V0KHR4LCBkb25lKTtcbn1cbmxldCBpZGJQcm94eVRyYXBzID0ge1xuICAgIGdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7XG4gICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBJREJUcmFuc2FjdGlvbikge1xuICAgICAgICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgdHJhbnNhY3Rpb24uZG9uZS5cbiAgICAgICAgICAgIGlmIChwcm9wID09PSAnZG9uZScpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uRG9uZU1hcC5nZXQodGFyZ2V0KTtcbiAgICAgICAgICAgIC8vIFBvbHlmaWxsIGZvciBvYmplY3RTdG9yZU5hbWVzIGJlY2F1c2Ugb2YgRWRnZS5cbiAgICAgICAgICAgIGlmIChwcm9wID09PSAnb2JqZWN0U3RvcmVOYW1lcycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0Lm9iamVjdFN0b3JlTmFtZXMgfHwgdHJhbnNhY3Rpb25TdG9yZU5hbWVzTWFwLmdldCh0YXJnZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTWFrZSB0eC5zdG9yZSByZXR1cm4gdGhlIG9ubHkgc3RvcmUgaW4gdGhlIHRyYW5zYWN0aW9uLCBvciB1bmRlZmluZWQgaWYgdGhlcmUgYXJlIG1hbnkuXG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gJ3N0b3JlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWNlaXZlci5vYmplY3RTdG9yZU5hbWVzWzFdXG4gICAgICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIDogcmVjZWl2ZXIub2JqZWN0U3RvcmUocmVjZWl2ZXIub2JqZWN0U3RvcmVOYW1lc1swXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRWxzZSB0cmFuc2Zvcm0gd2hhdGV2ZXIgd2UgZ2V0IGJhY2suXG4gICAgICAgIHJldHVybiB3cmFwKHRhcmdldFtwcm9wXSk7XG4gICAgfSxcbiAgICBzZXQodGFyZ2V0LCBwcm9wLCB2YWx1ZSkge1xuICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBoYXModGFyZ2V0LCBwcm9wKSB7XG4gICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBJREJUcmFuc2FjdGlvbiAmJlxuICAgICAgICAgICAgKHByb3AgPT09ICdkb25lJyB8fCBwcm9wID09PSAnc3RvcmUnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3AgaW4gdGFyZ2V0O1xuICAgIH0sXG59O1xuZnVuY3Rpb24gcmVwbGFjZVRyYXBzKGNhbGxiYWNrKSB7XG4gICAgaWRiUHJveHlUcmFwcyA9IGNhbGxiYWNrKGlkYlByb3h5VHJhcHMpO1xufVxuZnVuY3Rpb24gd3JhcEZ1bmN0aW9uKGZ1bmMpIHtcbiAgICAvLyBEdWUgdG8gZXhwZWN0ZWQgb2JqZWN0IGVxdWFsaXR5ICh3aGljaCBpcyBlbmZvcmNlZCBieSB0aGUgY2FjaGluZyBpbiBgd3JhcGApLCB3ZVxuICAgIC8vIG9ubHkgY3JlYXRlIG9uZSBuZXcgZnVuYyBwZXIgZnVuYy5cbiAgICAvLyBFZGdlIGRvZXNuJ3Qgc3VwcG9ydCBvYmplY3RTdG9yZU5hbWVzIChib29vKSwgc28gd2UgcG9seWZpbGwgaXQgaGVyZS5cbiAgICBpZiAoZnVuYyA9PT0gSURCRGF0YWJhc2UucHJvdG90eXBlLnRyYW5zYWN0aW9uICYmXG4gICAgICAgICEoJ29iamVjdFN0b3JlTmFtZXMnIGluIElEQlRyYW5zYWN0aW9uLnByb3RvdHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzdG9yZU5hbWVzLCAuLi5hcmdzKSB7XG4gICAgICAgICAgICBjb25zdCB0eCA9IGZ1bmMuY2FsbCh1bndyYXAodGhpcyksIHN0b3JlTmFtZXMsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgdHJhbnNhY3Rpb25TdG9yZU5hbWVzTWFwLnNldCh0eCwgc3RvcmVOYW1lcy5zb3J0ID8gc3RvcmVOYW1lcy5zb3J0KCkgOiBbc3RvcmVOYW1lc10pO1xuICAgICAgICAgICAgcmV0dXJuIHdyYXAodHgpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBDdXJzb3IgbWV0aG9kcyBhcmUgc3BlY2lhbCwgYXMgdGhlIGJlaGF2aW91ciBpcyBhIGxpdHRsZSBtb3JlIGRpZmZlcmVudCB0byBzdGFuZGFyZCBJREIuIEluXG4gICAgLy8gSURCLCB5b3UgYWR2YW5jZSB0aGUgY3Vyc29yIGFuZCB3YWl0IGZvciBhIG5ldyAnc3VjY2Vzcycgb24gdGhlIElEQlJlcXVlc3QgdGhhdCBnYXZlIHlvdSB0aGVcbiAgICAvLyBjdXJzb3IuIEl0J3Mga2luZGEgbGlrZSBhIHByb21pc2UgdGhhdCBjYW4gcmVzb2x2ZSB3aXRoIG1hbnkgdmFsdWVzLiBUaGF0IGRvZXNuJ3QgbWFrZSBzZW5zZVxuICAgIC8vIHdpdGggcmVhbCBwcm9taXNlcywgc28gZWFjaCBhZHZhbmNlIG1ldGhvZHMgcmV0dXJucyBhIG5ldyBwcm9taXNlIGZvciB0aGUgY3Vyc29yIG9iamVjdCwgb3JcbiAgICAvLyB1bmRlZmluZWQgaWYgdGhlIGVuZCBvZiB0aGUgY3Vyc29yIGhhcyBiZWVuIHJlYWNoZWQuXG4gICAgaWYgKGdldEN1cnNvckFkdmFuY2VNZXRob2RzKCkuaW5jbHVkZXMoZnVuYykpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICAvLyBDYWxsaW5nIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiB3aXRoIHRoZSBwcm94eSBhcyAndGhpcycgY2F1c2VzIElMTEVHQUwgSU5WT0NBVElPTiwgc28gd2UgdXNlXG4gICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgb2JqZWN0LlxuICAgICAgICAgICAgZnVuYy5hcHBseSh1bndyYXAodGhpcyksIGFyZ3MpO1xuICAgICAgICAgICAgcmV0dXJuIHdyYXAoY3Vyc29yUmVxdWVzdE1hcC5nZXQodGhpcykpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgLy8gQ2FsbGluZyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCB0aGUgcHJveHkgYXMgJ3RoaXMnIGNhdXNlcyBJTExFR0FMIElOVk9DQVRJT04sIHNvIHdlIHVzZVxuICAgICAgICAvLyB0aGUgb3JpZ2luYWwgb2JqZWN0LlxuICAgICAgICByZXR1cm4gd3JhcChmdW5jLmFwcGx5KHVud3JhcCh0aGlzKSwgYXJncykpO1xuICAgIH07XG59XG5mdW5jdGlvbiB0cmFuc2Zvcm1DYWNoYWJsZVZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgcmV0dXJuIHdyYXBGdW5jdGlvbih2YWx1ZSk7XG4gICAgLy8gVGhpcyBkb2Vzbid0IHJldHVybiwgaXQganVzdCBjcmVhdGVzIGEgJ2RvbmUnIHByb21pc2UgZm9yIHRoZSB0cmFuc2FjdGlvbixcbiAgICAvLyB3aGljaCBpcyBsYXRlciByZXR1cm5lZCBmb3IgdHJhbnNhY3Rpb24uZG9uZSAoc2VlIGlkYk9iamVjdEhhbmRsZXIpLlxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIElEQlRyYW5zYWN0aW9uKVxuICAgICAgICBjYWNoZURvbmVQcm9taXNlRm9yVHJhbnNhY3Rpb24odmFsdWUpO1xuICAgIGlmIChpbnN0YW5jZU9mQW55KHZhbHVlLCBnZXRJZGJQcm94eWFibGVUeXBlcygpKSlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm94eSh2YWx1ZSwgaWRiUHJveHlUcmFwcyk7XG4gICAgLy8gUmV0dXJuIHRoZSBzYW1lIHZhbHVlIGJhY2sgaWYgd2UncmUgbm90IGdvaW5nIHRvIHRyYW5zZm9ybSBpdC5cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiB3cmFwKHZhbHVlKSB7XG4gICAgLy8gV2Ugc29tZXRpbWVzIGdlbmVyYXRlIG11bHRpcGxlIHByb21pc2VzIGZyb20gYSBzaW5nbGUgSURCUmVxdWVzdCAoZWcgd2hlbiBjdXJzb3JpbmcpLCBiZWNhdXNlXG4gICAgLy8gSURCIGlzIHdlaXJkIGFuZCBhIHNpbmdsZSBJREJSZXF1ZXN0IGNhbiB5aWVsZCBtYW55IHJlc3BvbnNlcywgc28gdGhlc2UgY2FuJ3QgYmUgY2FjaGVkLlxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIElEQlJlcXVlc3QpXG4gICAgICAgIHJldHVybiBwcm9taXNpZnlSZXF1ZXN0KHZhbHVlKTtcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IHRyYW5zZm9ybWVkIHRoaXMgdmFsdWUgYmVmb3JlLCByZXVzZSB0aGUgdHJhbnNmb3JtZWQgdmFsdWUuXG4gICAgLy8gVGhpcyBpcyBmYXN0ZXIsIGJ1dCBpdCBhbHNvIHByb3ZpZGVzIG9iamVjdCBlcXVhbGl0eS5cbiAgICBpZiAodHJhbnNmb3JtQ2FjaGUuaGFzKHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybUNhY2hlLmdldCh2YWx1ZSk7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB0cmFuc2Zvcm1DYWNoYWJsZVZhbHVlKHZhbHVlKTtcbiAgICAvLyBOb3QgYWxsIHR5cGVzIGFyZSB0cmFuc2Zvcm1lZC5cbiAgICAvLyBUaGVzZSBtYXkgYmUgcHJpbWl0aXZlIHR5cGVzLCBzbyB0aGV5IGNhbid0IGJlIFdlYWtNYXAga2V5cy5cbiAgICBpZiAobmV3VmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgIHRyYW5zZm9ybUNhY2hlLnNldCh2YWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICByZXZlcnNlVHJhbnNmb3JtQ2FjaGUuc2V0KG5ld1ZhbHVlLCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdWYWx1ZTtcbn1cbmNvbnN0IHVud3JhcCA9ICh2YWx1ZSkgPT4gcmV2ZXJzZVRyYW5zZm9ybUNhY2hlLmdldCh2YWx1ZSk7XG5cbmV4cG9ydCB7IHJldmVyc2VUcmFuc2Zvcm1DYWNoZSBhcyBhLCBpbnN0YW5jZU9mQW55IGFzIGksIHJlcGxhY2VUcmFwcyBhcyByLCB1bndyYXAgYXMgdSwgd3JhcCBhcyB3IH07XG4iLCAiaW1wb3J0IHsgdyBhcyB3cmFwLCByIGFzIHJlcGxhY2VUcmFwcyB9IGZyb20gJy4vd3JhcC1pZGItdmFsdWUuanMnO1xuZXhwb3J0IHsgdSBhcyB1bndyYXAsIHcgYXMgd3JhcCB9IGZyb20gJy4vd3JhcC1pZGItdmFsdWUuanMnO1xuXG4vKipcbiAqIE9wZW4gYSBkYXRhYmFzZS5cbiAqXG4gKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBkYXRhYmFzZS5cbiAqIEBwYXJhbSB2ZXJzaW9uIFNjaGVtYSB2ZXJzaW9uLlxuICogQHBhcmFtIGNhbGxiYWNrcyBBZGRpdGlvbmFsIGNhbGxiYWNrcy5cbiAqL1xuZnVuY3Rpb24gb3BlbkRCKG5hbWUsIHZlcnNpb24sIHsgYmxvY2tlZCwgdXBncmFkZSwgYmxvY2tpbmcsIHRlcm1pbmF0ZWQgfSA9IHt9KSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKG5hbWUsIHZlcnNpb24pO1xuICAgIGNvbnN0IG9wZW5Qcm9taXNlID0gd3JhcChyZXF1ZXN0KTtcbiAgICBpZiAodXBncmFkZSkge1xuICAgICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3VwZ3JhZGVuZWVkZWQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHVwZ3JhZGUod3JhcChyZXF1ZXN0LnJlc3VsdCksIGV2ZW50Lm9sZFZlcnNpb24sIGV2ZW50Lm5ld1ZlcnNpb24sIHdyYXAocmVxdWVzdC50cmFuc2FjdGlvbikpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGJsb2NrZWQpXG4gICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcignYmxvY2tlZCcsICgpID0+IGJsb2NrZWQoKSk7XG4gICAgb3BlblByb21pc2VcbiAgICAgICAgLnRoZW4oKGRiKSA9PiB7XG4gICAgICAgIGlmICh0ZXJtaW5hdGVkKVxuICAgICAgICAgICAgZGIuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCAoKSA9PiB0ZXJtaW5hdGVkKCkpO1xuICAgICAgICBpZiAoYmxvY2tpbmcpXG4gICAgICAgICAgICBkYi5hZGRFdmVudExpc3RlbmVyKCd2ZXJzaW9uY2hhbmdlJywgKCkgPT4gYmxvY2tpbmcoKSk7XG4gICAgfSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHsgfSk7XG4gICAgcmV0dXJuIG9wZW5Qcm9taXNlO1xufVxuLyoqXG4gKiBEZWxldGUgYSBkYXRhYmFzZS5cbiAqXG4gKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBkYXRhYmFzZS5cbiAqL1xuZnVuY3Rpb24gZGVsZXRlREIobmFtZSwgeyBibG9ja2VkIH0gPSB7fSkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UobmFtZSk7XG4gICAgaWYgKGJsb2NrZWQpXG4gICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcignYmxvY2tlZCcsICgpID0+IGJsb2NrZWQoKSk7XG4gICAgcmV0dXJuIHdyYXAocmVxdWVzdCkudGhlbigoKSA9PiB1bmRlZmluZWQpO1xufVxuXG5jb25zdCByZWFkTWV0aG9kcyA9IFsnZ2V0JywgJ2dldEtleScsICdnZXRBbGwnLCAnZ2V0QWxsS2V5cycsICdjb3VudCddO1xuY29uc3Qgd3JpdGVNZXRob2RzID0gWydwdXQnLCAnYWRkJywgJ2RlbGV0ZScsICdjbGVhciddO1xuY29uc3QgY2FjaGVkTWV0aG9kcyA9IG5ldyBNYXAoKTtcbmZ1bmN0aW9uIGdldE1ldGhvZCh0YXJnZXQsIHByb3ApIHtcbiAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBJREJEYXRhYmFzZSAmJlxuICAgICAgICAhKHByb3AgaW4gdGFyZ2V0KSAmJlxuICAgICAgICB0eXBlb2YgcHJvcCA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNhY2hlZE1ldGhvZHMuZ2V0KHByb3ApKVxuICAgICAgICByZXR1cm4gY2FjaGVkTWV0aG9kcy5nZXQocHJvcCk7XG4gICAgY29uc3QgdGFyZ2V0RnVuY05hbWUgPSBwcm9wLnJlcGxhY2UoL0Zyb21JbmRleCQvLCAnJyk7XG4gICAgY29uc3QgdXNlSW5kZXggPSBwcm9wICE9PSB0YXJnZXRGdW5jTmFtZTtcbiAgICBjb25zdCBpc1dyaXRlID0gd3JpdGVNZXRob2RzLmluY2x1ZGVzKHRhcmdldEZ1bmNOYW1lKTtcbiAgICBpZiAoXG4gICAgLy8gQmFpbCBpZiB0aGUgdGFyZ2V0IGRvZXNuJ3QgZXhpc3Qgb24gdGhlIHRhcmdldC4gRWcsIGdldEFsbCBpc24ndCBpbiBFZGdlLlxuICAgICEodGFyZ2V0RnVuY05hbWUgaW4gKHVzZUluZGV4ID8gSURCSW5kZXggOiBJREJPYmplY3RTdG9yZSkucHJvdG90eXBlKSB8fFxuICAgICAgICAhKGlzV3JpdGUgfHwgcmVhZE1ldGhvZHMuaW5jbHVkZXModGFyZ2V0RnVuY05hbWUpKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1ldGhvZCA9IGFzeW5jIGZ1bmN0aW9uIChzdG9yZU5hbWUsIC4uLmFyZ3MpIHtcbiAgICAgICAgLy8gaXNXcml0ZSA/ICdyZWFkd3JpdGUnIDogdW5kZWZpbmVkIGd6aXBwcyBiZXR0ZXIsIGJ1dCBmYWlscyBpbiBFZGdlIDooXG4gICAgICAgIGNvbnN0IHR4ID0gdGhpcy50cmFuc2FjdGlvbihzdG9yZU5hbWUsIGlzV3JpdGUgPyAncmVhZHdyaXRlJyA6ICdyZWFkb25seScpO1xuICAgICAgICBsZXQgdGFyZ2V0ID0gdHguc3RvcmU7XG4gICAgICAgIGlmICh1c2VJbmRleClcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5pbmRleChhcmdzLnNoaWZ0KCkpO1xuICAgICAgICAvLyBNdXN0IHJlamVjdCBpZiBvcCByZWplY3RzLlxuICAgICAgICAvLyBJZiBpdCdzIGEgd3JpdGUgb3BlcmF0aW9uLCBtdXN0IHJlamVjdCBpZiB0eC5kb25lIHJlamVjdHMuXG4gICAgICAgIC8vIE11c3QgcmVqZWN0IHdpdGggb3AgcmVqZWN0aW9uIGZpcnN0LlxuICAgICAgICAvLyBNdXN0IHJlc29sdmUgd2l0aCBvcCB2YWx1ZS5cbiAgICAgICAgLy8gTXVzdCBoYW5kbGUgYm90aCBwcm9taXNlcyAobm8gdW5oYW5kbGVkIHJlamVjdGlvbnMpXG4gICAgICAgIHJldHVybiAoYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgdGFyZ2V0W3RhcmdldEZ1bmNOYW1lXSguLi5hcmdzKSxcbiAgICAgICAgICAgIGlzV3JpdGUgJiYgdHguZG9uZSxcbiAgICAgICAgXSkpWzBdO1xuICAgIH07XG4gICAgY2FjaGVkTWV0aG9kcy5zZXQocHJvcCwgbWV0aG9kKTtcbiAgICByZXR1cm4gbWV0aG9kO1xufVxucmVwbGFjZVRyYXBzKChvbGRUcmFwcykgPT4gKHtcbiAgICAuLi5vbGRUcmFwcyxcbiAgICBnZXQ6ICh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSA9PiBnZXRNZXRob2QodGFyZ2V0LCBwcm9wKSB8fCBvbGRUcmFwcy5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlciksXG4gICAgaGFzOiAodGFyZ2V0LCBwcm9wKSA9PiAhIWdldE1ldGhvZCh0YXJnZXQsIHByb3ApIHx8IG9sZFRyYXBzLmhhcyh0YXJnZXQsIHByb3ApLFxufSkpO1xuXG5leHBvcnQgeyBkZWxldGVEQiwgb3BlbkRCIH07XG4iLCAiaW1wb3J0IHsgciBhcyByZXBsYWNlVHJhcHMsIGkgYXMgaW5zdGFuY2VPZkFueSwgYSBhcyByZXZlcnNlVHJhbnNmb3JtQ2FjaGUsIHUgYXMgdW53cmFwIH0gZnJvbSAnLi93cmFwLWlkYi12YWx1ZS5qcyc7XG5cbmNvbnN0IGFkdmFuY2VNZXRob2RQcm9wcyA9IFsnY29udGludWUnLCAnY29udGludWVQcmltYXJ5S2V5JywgJ2FkdmFuY2UnXTtcbmNvbnN0IG1ldGhvZE1hcCA9IHt9O1xuY29uc3QgYWR2YW5jZVJlc3VsdHMgPSBuZXcgV2Vha01hcCgpO1xuY29uc3QgaXR0clByb3hpZWRDdXJzb3JUb09yaWdpbmFsUHJveHkgPSBuZXcgV2Vha01hcCgpO1xuY29uc3QgY3Vyc29ySXRlcmF0b3JUcmFwcyA9IHtcbiAgICBnZXQodGFyZ2V0LCBwcm9wKSB7XG4gICAgICAgIGlmICghYWR2YW5jZU1ldGhvZFByb3BzLmluY2x1ZGVzKHByb3ApKVxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtwcm9wXTtcbiAgICAgICAgbGV0IGNhY2hlZEZ1bmMgPSBtZXRob2RNYXBbcHJvcF07XG4gICAgICAgIGlmICghY2FjaGVkRnVuYykge1xuICAgICAgICAgICAgY2FjaGVkRnVuYyA9IG1ldGhvZE1hcFtwcm9wXSA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgYWR2YW5jZVJlc3VsdHMuc2V0KHRoaXMsIGl0dHJQcm94aWVkQ3Vyc29yVG9PcmlnaW5hbFByb3h5LmdldCh0aGlzKVtwcm9wXSguLi5hcmdzKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWNoZWRGdW5jO1xuICAgIH0sXG59O1xuYXN5bmMgZnVuY3Rpb24qIGl0ZXJhdGUoLi4uYXJncykge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby10aGlzLWFzc2lnbm1lbnRcbiAgICBsZXQgY3Vyc29yID0gdGhpcztcbiAgICBpZiAoIShjdXJzb3IgaW5zdGFuY2VvZiBJREJDdXJzb3IpKSB7XG4gICAgICAgIGN1cnNvciA9IGF3YWl0IGN1cnNvci5vcGVuQ3Vyc29yKC4uLmFyZ3MpO1xuICAgIH1cbiAgICBpZiAoIWN1cnNvcilcbiAgICAgICAgcmV0dXJuO1xuICAgIGN1cnNvciA9IGN1cnNvcjtcbiAgICBjb25zdCBwcm94aWVkQ3Vyc29yID0gbmV3IFByb3h5KGN1cnNvciwgY3Vyc29ySXRlcmF0b3JUcmFwcyk7XG4gICAgaXR0clByb3hpZWRDdXJzb3JUb09yaWdpbmFsUHJveHkuc2V0KHByb3hpZWRDdXJzb3IsIGN1cnNvcik7XG4gICAgLy8gTWFwIHRoaXMgZG91YmxlLXByb3h5IGJhY2sgdG8gdGhlIG9yaWdpbmFsLCBzbyBvdGhlciBjdXJzb3IgbWV0aG9kcyB3b3JrLlxuICAgIHJldmVyc2VUcmFuc2Zvcm1DYWNoZS5zZXQocHJveGllZEN1cnNvciwgdW53cmFwKGN1cnNvcikpO1xuICAgIHdoaWxlIChjdXJzb3IpIHtcbiAgICAgICAgeWllbGQgcHJveGllZEN1cnNvcjtcbiAgICAgICAgLy8gSWYgb25lIG9mIHRoZSBhZHZhbmNpbmcgbWV0aG9kcyB3YXMgbm90IGNhbGxlZCwgY2FsbCBjb250aW51ZSgpLlxuICAgICAgICBjdXJzb3IgPSBhd2FpdCAoYWR2YW5jZVJlc3VsdHMuZ2V0KHByb3hpZWRDdXJzb3IpIHx8IGN1cnNvci5jb250aW51ZSgpKTtcbiAgICAgICAgYWR2YW5jZVJlc3VsdHMuZGVsZXRlKHByb3hpZWRDdXJzb3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzSXRlcmF0b3JQcm9wKHRhcmdldCwgcHJvcCkge1xuICAgIHJldHVybiAoKHByb3AgPT09IFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmXG4gICAgICAgIGluc3RhbmNlT2ZBbnkodGFyZ2V0LCBbSURCSW5kZXgsIElEQk9iamVjdFN0b3JlLCBJREJDdXJzb3JdKSkgfHxcbiAgICAgICAgKHByb3AgPT09ICdpdGVyYXRlJyAmJiBpbnN0YW5jZU9mQW55KHRhcmdldCwgW0lEQkluZGV4LCBJREJPYmplY3RTdG9yZV0pKSk7XG59XG5yZXBsYWNlVHJhcHMoKG9sZFRyYXBzKSA9PiAoe1xuICAgIC4uLm9sZFRyYXBzLFxuICAgIGdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7XG4gICAgICAgIGlmIChpc0l0ZXJhdG9yUHJvcCh0YXJnZXQsIHByb3ApKVxuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdGU7XG4gICAgICAgIHJldHVybiBvbGRUcmFwcy5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcik7XG4gICAgfSxcbiAgICBoYXModGFyZ2V0LCBwcm9wKSB7XG4gICAgICAgIHJldHVybiBpc0l0ZXJhdG9yUHJvcCh0YXJnZXQsIHByb3ApIHx8IG9sZFRyYXBzLmhhcyh0YXJnZXQsIHByb3ApO1xuICAgIH0sXG59KSk7XG4iLCAiZXhwb3J0IGNvbnN0IHNyYyA9ICcvYXBpL2NvZGUvcHJvZ3JhbW1pbmctbm90ZXMvc2NyYXBib3gtbGluay1kYXRhYmFzZUAwLjIuMC93b3JrZXJfbWluLmpzJztcbiIsICJleHBvcnQgY29uc3QgU3RvcmVOYW1lID0gJ2NhY2hlLWxpbmtzJztcbmV4cG9ydCBjb25zdCBEQk5hbWUgPSAnVXNlclNjcmlwdCc7XG5leHBvcnQgY29uc3QgVmVyc2lvbiA9IDc7XG4iLCAiaW1wb3J0IHsgb3BlbkRCIH0gZnJvbSAnLi4vaWRiL3dpdGgtYXN5bmMtaXR0ci5qcyc7XG5pbXBvcnQge3NyY30gZnJvbSAnLi93b3JrZXJTcmMuanMnO1xuaW1wb3J0IHtEQk5hbWUsIFZlcnNpb24sIFN0b3JlTmFtZX0gZnJvbSAnLi9zZXR0aW5ncy5qcyc7XG5cbmNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIoc3JjKTtcblxuLy8gZGF0YWJhc2XjgpLliJ3mnJ/ljJbjgZnjgotcbmZ1bmN0aW9uIGluaXRpYWxpemUoKSB7XG4gIHJldHVybiBvcGVuREIoREJOYW1lLCBWZXJzaW9uLCB7XG4gICAgLy8g5pu05paw5Yem55CGXG4gICAgdXBncmFkZShkYikge1xuICAgICAgLy8gT2JqZWN0IFN0b3Jl44KS44GZ44G544Gm5raI44GZXG4gICAgICBbLi4uZGIub2JqZWN0U3RvcmVOYW1lc10uZm9yRWFjaChzdG9yZU5hbWUgPT5cbiAgICAgICAgZGIuZGVsZXRlT2JqZWN0U3RvcmUoc3RvcmVOYW1lKVxuICAgICAgKTtcbiAgICAgIFxuICAgICAgLy8gb2JqZWN0IHN0b3Jl44KS5L2c44KK55u044GZXG4gICAgICBjb25zdCBzdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKFN0b3JlTmFtZSwge1xuICAgICAgICAgIGtleVBhdGg6ICdpZCcsXG4gICAgICAgIH0pO1xuICAgICAgc3RvcmUuY3JlYXRlSW5kZXgoJ2ZldGNoZWQnLCAnZmV0Y2hlZCcpO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vLyDliJ3mnJ/ljJZcbmNvbnN0IGdldERCID0gaW5pdGlhbGl6ZSgpO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0KHByb2plY3RJZHMsIG9wdGlvbnMpIHtcbiAgLy8g5LqI44KB6YeN6KSH44KS5raI44GX44Gm44GK44GPXG4gIHByb2plY3RJZHMgPSBbLi4ubmV3IFNldChwcm9qZWN0SWRzKV07XG4gIGlmIChwcm9qZWN0SWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHt9O1xuICBcbiAgLy8g5YWI44Gr5pu05paw44GZ44KLXG4gIGNvbnN0IGhhc1VwZGF0ZSA9IGF3YWl0IHVwZGF0ZShwcm9qZWN0SWRzLCBvcHRpb25zKTtcbiAgXG4gIC8vIGRhdGFiYXNl44GL44KJ5Y+W44Gj44Gm44GP44KLXG4gIGNvbnN0IGRiID0gYXdhaXQgZ2V0REI7XG4gIGNvbnN0IHR4ID0gZGIudHJhbnNhY3Rpb24oU3RvcmVOYW1lLCAncmVhZHdyaXRlJyk7XG4gIGNvbnN0IHN0b3JlID0gdHgub2JqZWN0U3RvcmUoU3RvcmVOYW1lKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvamVjdElkcy5tYXAoYXN5bmMgaWQgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBzdG9yZS5nZXQoaWQpO1xuICAgIHJldHVybiBkYXRhID8ge2lkLCBwcm9qZWN0OiBkYXRhLnByb2plY3QsIHBhZ2VzOiBkYXRhLnBhZ2VzfSA6IHVuZGVmaW5lZDtcbiAgfSkpO1xuICBhd2FpdCB0eC5kb25lO1xuICByZXR1cm4ge2RhdGE6IHJlc3VsdC5maWx0ZXIoZGF0YSA9PiBkYXRhKSwgaGFzVXBkYXRlfTtcbn1cblxuLy8gY2FjaGXjgpLmtojjgZlcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGVhcihwcm9qZWN0SWRzKSB7XG4gIC8vIGNhY2hl44KS5YmK6Zmk44GZ44KLXG4gIGNvbnN0IGRiID0gYXdhaXQgZ2V0REI7XG4gIGNvbnN0IHR4ID0gZGIudHJhbnNhY3Rpb24oU3RvcmVOYW1lLCAncmVhZHdyaXRlJyk7XG4gIGNvbnN0IHN0b3JlID0gdHgub2JqZWN0U3RvcmUoU3RvcmVOYW1lKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwocHJvamVjdElkcy5tYXAoaWQgPT4gc3RvcmUuZGVsZXRlKGlkKSkpO1xuICBhd2FpdCB0eC5kb25lO1xufVxuXG4vLyBkYXRh44KS5pu05paw44GZ44KLXG4vLyByZWxvYWTjgpLjgaTjgZHjgovjgahwcm9qZWN0c+WFqOOBpuOCkm5ldHdvcmvjgYvjgonlj5blvpfjgZfnm7TjgZnjgYzjgIHmm7TmlrDjgYzopovjgaTjgYvjgonjgarjgZHjgozjgbDkvZXjgoLjgZfjgarjgYRcbmZ1bmN0aW9uIHVwZGF0ZShwcm9qZWN0SWRzLCBvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBjb25zdCBoYW5kbGVNZXNzYWdlID0gKHtkYXRhfSkgPT4ge1xuICAgICAgd29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBoYW5kbGVNZXNzYWdlKTtcbiAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgfTtcbiAgICB3b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGhhbmRsZU1lc3NhZ2UpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7cHJvamVjdElkcywgb3B0aW9uc30pO1xuICB9KTtcbn1cbiIsICJpbXBvcnQge2dldCBhcyBnZXRMaW5rc30gZnJvbSAnLi4vc2NyYXBib3gtbGluay1kYXRhYmFzZUAwLjIuMC9zY3JpcHQuanMnO1xuaW1wb3J0IHtvcGVuREJ9IGZyb20gJy4uL2lkYi93aXRoLWFzeW5jLWl0dHIuanMnO1xuaW1wb3J0IHt0aHJvdHRsZX0gZnJvbSAnLi4vY3VzdG9tLXRocm90dGxlL3NjcmlwdC5qcyc7XG5cbi8vIFdlYiBXb3JrZXLjgpLkvZzjgaPjgabjgYrjgY9cbmNvbnN0IHdvcmtlcnMgPSBbLi4uQXJyYXkobmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3kgLyAyKV0gLy8g44Gq44KT44Go44Gq44GP5Y2K5YiG44Gr44GX44Gm44G/44GfXG4gIC5tYXAoXyA9PlxuICAgIC8vIOebuOWvvuODkeOCueOBr+S9v+OBiOOBquOBhOOBv+OBn+OBhFxuICAgIG5ldyBXb3JrZXIoJy9hcGkvY29kZS9wcm9ncmFtbWluZy1ub3Rlcy9hZHZhbmNlZC1saW5rLXNlYXJjaGVyQDAuMi4wL3dvcmtlci5qcycpXG4gICk7XG5cbi8vIGRhdGFiYXNl44Gu6Kit5a6aXG5jb25zdCBEQk5hbWUgPSAnVXNlclNjcmlwdC1TZWFyY2hFbmdpbmUnO1xuY29uc3QgU3RvcmVOYW1lID0gJ3NlYXJjaC1saXN0JztcbmNvbnN0IFZlcnNpb24gPSA4O1xuXG4vLyBkYXRhYmFzZeOBruWIneacn+WMllxuZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgX2xvZygnJywgJ1N0YXJ0IGluaXRpYWxpemluZycpO1xuICByZXR1cm4gb3BlbkRCKERCTmFtZSwgVmVyc2lvbiwge1xuICAgIHVwZ3JhZGUoZGIpIHtcbiAgICAgIC8vIE9iamVjdCBTdG9yZeOCkuOBmeOBueOBpua2iOOBmVxuICAgICAgWy4uLmRiLm9iamVjdFN0b3JlTmFtZXNdLmZvckVhY2goc3RvcmVOYW1lID0+XG4gICAgICAgIGRiLmRlbGV0ZU9iamVjdFN0b3JlKHN0b3JlTmFtZSlcbiAgICAgICk7XG4gICAgICBcbiAgICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKFN0b3JlTmFtZSwge2tleVBhdGg6ICdrZXknfSk7XG4gICAgfSxcbiAgfSkudGhlbihkYiA9PiB7XG4gICAgX2xvZygnJywgJ0ZpbmlzaCBpbml0aWFsaXppbmcnKTtcbiAgICByZXR1cm4gZGI7XG4gIH0pO1xufVxuY29uc3QgZ2V0REIgPSBpbml0aWFsaXplKCk7XG5cbi8vIOaknOe0ouOCqOODs+OCuOODs+OCkuS9nOOCi1xuLy8gaWNvbuOCknRydWXjgavjgZnjgovjgajjgIFpY29u44Gr44Gq44KL44Oa44O844K444Gu44G/44KS5qSc57Si44K944O844K544Gr44GZ44KLXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3Jvc3NTZWFyY2gobmFtZSwgcHJvamVjdElkcywge2ljb24gPSBmYWxzZX0gPSB7fSkge1xuICAvLyBXb3JrZXLjgYzmpJzntKLjgavkvb/jgYbjg6rjgrnjg4jjgpLkvZzjgotcbiAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlKG9wdGlvbnMpIHtcbiAgICBfbG9nKCd1cGRhdGUnLCBgWyR7bmFtZX1dIExvYWRuZyBsaW5rIGRhdGEuLi5gKTtcbiAgICBjb25zdCB7ZGF0YSwgaGFzVXBkYXRlfSA9IGF3YWl0IGdldExpbmtzKHByb2plY3RJZHMsIG9wdGlvbnMpO1xuICAgIF9sb2coJ3VwZGF0ZScsIGBbJHtuYW1lfV0gTG9hZGVkLmApO1xuICAgIC8vIOS9leOCguabtOaWsOOBjOOBquOBkeOCjOOBsOijnOWujOOCveODvOOCueOCkuabtOaWsOOBl+OBquOBhFxuICAgIGlmICghaGFzVXBkYXRlKSB7XG4gICAgICBjb25zdCBkYiA9IGF3YWl0IGdldERCO1xuICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IGRiLmdldEFsbEtleXMoU3RvcmVOYW1lKTtcbiAgICAgIGlmIChrZXlzLnNvbWUoa2V5ID0+IGtleVswXSA9PT0gbmFtZSAmJiBrZXlbMV0gPT09IHNjcmFwYm94LlByb2plY3QubmFtZSkpIHtcbiAgICAgICAgX2xvZygndXBkYXRlJywgYFske25hbWV9XSBTZWFyY2ggaXRlbXMgYXJlIHVwIHRvIGRhdGUuYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgX2xvZygndXBkYXRlJywgYFske25hbWV9XSBDcmVhdGluZyBzZWFyY2ggaXRlbXMuLi5gKTtcbiAgICAvLyDmpJzntKLnlKjjg6rjgrnjg4jjgpLkvZzjgotcbiAgICBjb25zdCBzb3VyY2UgPSBpY29uID9cbiAgICAgIC8vIOOCouOCpOOCs+ODs+eUqOODquOCueODiOOBr+i+nuabuOmghuOBq+S4puOBueOBpuOBiuOBj1xuICAgICAgZGF0YS5mbGF0TWFwKCh7cHJvamVjdCwgcGFnZXN9KSA9PiB7XG4gICAgICAgIGNvbnN0IHRpdGxlcyA9IHBhZ2VzLmZsYXRNYXAoKHt0aXRsZSwgaGFzSWNvbn0pID0+IGhhc0ljb24gPyBbdGl0bGVdIDogW10pO1xuICAgICAgICByZXR1cm4gdGl0bGVzLm1hcCh0aXRsZSA9PiAoe3Byb2plY3QsIHRpdGxlfSkpO1xuICAgICAgfSkgOlxuICAgICAgLy8g5aSW6YOocHJvamVjdCBsaW5r44GvcHJvamVjdOOBq+mWouOCj+OCieOBmnNodWZmbGXjgZnjgotcbiAgICAgIC8vIHNlcmVuZGlwaXR544KS5ZCR5LiK44GV44Gb44KLXG4gICAgICBzaHVmZmxlKGRhdGEuZmxhdE1hcCgoe3Byb2plY3QsIHBhZ2VzfSkgPT4ge1xuICAgICAgICBjb25zdCB0aXRsZXMgPSBbLi4ubmV3IFNldChwYWdlcy5mbGF0TWFwKCh7dGl0bGUsIGxpbmtzfSkgPT4gW3RpdGxlLCAuLi5saW5rc10pKV07XG4gICAgICAgIHJldHVybiB0aXRsZXMubWFwKHRpdGxlID0+ICh7cHJvamVjdCwgdGl0bGV9KSk7XG4gICAgICB9KSk7XG4gICAgX2xvZygndXBkYXRlJywgYFske25hbWV9XSBDcmVhdGVkICR7c291cmNlLmxlbmd0aH0gc2VhcmNoIGl0ZW1zLmApO1xuICAgIFxuICAgIC8vIOaknOe0oueUqOaWh+Wtl+WIl+ODquOCueODiOOCkndvcmtlcnPliIbjgaDjgZHliIblibLjgZnjgotcbiAgICBjb25zdCBjaHVua0xlbmd0aCA9IE1hdGguZmxvb3Ioc291cmNlLmxlbmd0aC93b3JrZXJzLmxlbmd0aCkgKyAxO1xuICAgIGNvbnN0IGxpc3RzID0gd29ya2Vycy5tYXAoKF8sIGkpID0+IHNvdXJjZS5zbGljZShpICogY2h1bmtMZW5ndGgsIChpICsgMSkgKiBjaHVua0xlbmd0aCkpO1xuICAgIFxuICAgIC8vIGRhdGFiYXNl44Gr5qC857SN44GZ44KLXG4gICAgX2xvZygndXBkYXRlJywgYFske25hbWV9XSBQdXR0aW5nICR7c291cmNlLmxlbmd0aH0gc2VhcmNoIGl0ZW1zIG9uIEluZGV4ZWQgREIuLi5gKTtcbiAgICBjb25zdCBkYiA9IGF3YWl0IGdldERCO1xuICAgIGNvbnN0IHR4ID0gZGIudHJhbnNhY3Rpb24oU3RvcmVOYW1lLCAncmVhZHdyaXRlJyk7XG4gICAgY29uc3Qgc3RvcmUgPSB0eC5vYmplY3RTdG9yZShTdG9yZU5hbWUpO1xuICAgIGNvbnN0IGtleXMgPSBhd2FpdCBzdG9yZS5nZXRBbGxLZXlzKCk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwobGlzdHMubWFwKChsaXN0LCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIGtleXMuZmluZChrZXkgPT4ga2V5WzBdID09PSBuYW1lICYmIGtleVsxXSA9PT0gc2NyYXBib3guUHJvamVjdC5uYW1lICYmIGtleVsyXSA9PT0gaW5kZXgpID9cbiAgICAgICAgc3RvcmUucHV0KHtsaXN0LCBrZXk6IFtuYW1lLCBzY3JhcGJveC5Qcm9qZWN0Lm5hbWUsIGluZGV4XX0pIDpcbiAgICAgICAgc3RvcmUuYWRkKHtsaXN0LCBrZXk6IFtuYW1lLCBzY3JhcGJveC5Qcm9qZWN0Lm5hbWUsIGluZGV4XX0pO1xuICAgIH0pKTtcbiAgICBhd2FpdCB0eC5kb25lO1xuICAgIF9sb2coJ3VwZGF0ZScsIGBbJHtuYW1lfV0gRmluaXNoIHB1dHRpbmcgb24gSW5kZXhlZCBEQi5gKTtcbiAgfVxuICBcbiAgY29uc3Qgc2VhcmNoID0gdGhyb3R0bGUoYXN5bmMgKHF1ZXJ5LCBzZWFyY2hPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgcGVuZGluZ3MgPSB3b3JrZXJzLm1hcCgod29ya2VyLCBrZXkpID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgY29uc3QgbGlzdGVuZXIgPSAoe2RhdGF9KSA9PiB7XG4gICAgICAgIHdvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfTtcbiAgICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIpO1xuICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtxdWVyeSwga2V5OiBbbmFtZSwgc2NyYXBib3guUHJvamVjdC5uYW1lLCBrZXldLCBEQk5hbWUsIFN0b3JlTmFtZSwgVmVyc2lvbiwgc2VhcmNoT3B0aW9uc30pO1xuICAgIH0pKTtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwocGVuZGluZ3MpO1xuICAgIFxuICAgIC8vIOi7oue9ruOBl+OBpuabluaYp+W6pumghuOBq+e1kOaenOOCkuS4puOBueOBpuOAgWxpbWl05YiG44Gg44GR6L+U44GZXG4gICAgLy9fbG9nKCdzZWFyY2gnLCAnRmluaXNoIGEgc2VhcmNoJywgcmVzdWx0cyk7XG4gICAgY29uc3QgbGltaXQgPSBzZWFyY2hPcHRpb25zPy5saW1pdCA/PyAzMDtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzdWx0OiB0cmFuc3Bvc2UocmVzdWx0cykuZmxhdE1hcChsaXN0cyA9PiBsaXN0cy5mbGF0KCkpLnNsaWNlKDAsIGxpbWl0KSxcbiAgICB9O1xuICB9KTtcbiAgXG4gIHJldHVybiB7c2VhcmNoLCB1cGRhdGV9O1xufVxuICBcbiAgXG5mdW5jdGlvbiBfbG9nKGZ1bmN0aW9uTmFtZSwgLi4ubWVzc2FnZXMpIHtcbiAgY29uc29sZS5sb2coYFske2Z1bmN0aW9uTmFtZX1AYWR2YW5jZWQtbGluay1zZWFyY2hlckAwLjIuMF1gLCAuLi5tZXNzYWdlcyk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zcG9zZShhKSB7XG4gIHJldHVybiBhWzBdLm1hcCgoXywgYykgPT4gYS5tYXAociA9PiByW2NdKSk7XG59XG5cbmZ1bmN0aW9uIHNodWZmbGUoYXJyYXkpIHtcbiAgbGV0IHJlc3VsdCA9IGFycmF5O1xuICBmb3IgKGxldCBpID0gcmVzdWx0Lmxlbmd0aDsgMSA8IGk7IGktLSkge1xuICAgIGNvbnN0IGsgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBpKTtcbiAgICBbcmVzdWx0W2tdLCByZXN1bHRbaSAtIDFdXSA9IFtyZXN1bHRbaSAtIDFdLCByZXN1bHRba11dO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG4iLCAiaW1wb3J0IHt1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VDYWxsYmFja30gZnJvbSAnLi4vcHJlYWN0QDEwLjUuMTMvaG9va3MuanMnO1xuaW1wb3J0IHt1c2VMb2FkZXJ9IGZyb20gJy4uL3VzZS1sb2FkZXIvc2NyaXB0LmpzJztcbmltcG9ydCB7Y3Jvc3NTZWFyY2h9IGZyb20gJy4uL2FkdmFuY2VkLWxpbmstc2VhcmNoZXJAMC4yLjAvc2NyaXB0LmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUNyb3NzU2VhcmNoKG5hbWUsIHF1ZXJ5LCB7aWNvbiwgcHJvamVjdElkcywgbGltaXR9ID0ge30sIGRlcHMgPSBbXSkge1xuICBjb25zdCBbc2VhcmNoLCBzZXRTZWFyY2hdID0gdXNlU3RhdGUodW5kZWZpbmVkKTtcbiAgY29uc3QgW3Jlc3VsdHMsIHNldFJlc3VsdHNdID0gdXNlU3RhdGUoW10pO1xuXG4gIGNvbnN0IHtsb2FkaW5nfSA9IHVzZUxvYWRlcigoKSA9PiAoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGZ1bmNzID0gYXdhaXQgY3Jvc3NTZWFyY2gobmFtZSwgcHJvamVjdElkcywge2ljb259KTtcbiAgICBhd2FpdCBmdW5jcy51cGRhdGUoKTtcbiAgICBzZXRTZWFyY2goKCkgPT4gZnVuY3Muc2VhcmNoKTtcbiAgfSkoKSwge2RlbGF5OiAxMDAwfSwgW25hbWUsIHByb2plY3RJZHMsIGljb24sIC4uLmRlcHNdKTtcbiAgY29uc3Qge2xvYWRpbmc6IHNlYXJjaGluZ30gPSB1c2VMb2FkZXIoKCkgPT4gKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIXNlYXJjaCkgcmV0dXJuO1xuICAgIGNvbnN0IHtleGVjdXRlZCwgcmVzdWx0fSA9IGF3YWl0IHNlYXJjaChxdWVyeSwge2xpbWl0fSk7XG4gICAgaWYgKGV4ZWN1dGVkKSBzZXRSZXN1bHRzKHJlc3VsdC5yZXN1bHQpO1xuICB9KSgpLCB7ZGVsYXk6IDEwMDB9LCBbcXVlcnksIHNlYXJjaCwgbGltaXQsIC4uLmRlcHNdKTtcbiAgXG4gIHJldHVybiB7XG4gICAgc2VhcmNoaW5nLFxuICAgIGxvYWRpbmcsXG4gICAgcmVzdWx0cyxcbiAgfVxufVxuIiwgImltcG9ydCB7dXNlTWVtbywgdXNlRWZmZWN0fSBmcm9tICcuLi9wcmVhY3RAMTAuNS4xMy9ob29rcy5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VLZXlib2FyZChlbGVtZW50LCBrZXlzLCBjYWxsYmFjaywgb3B0aW9ucywgZGVwcykge1xuICBjb25zdCB7XG4gICAgZW5hYmxlID0gdHJ1ZSxcbiAgICBmaWx0ZXIsXG4gICAgcHJldmVudERlZmF1bHQgPSB0cnVlLFxuICAgIHN0b3BQcm9wYWdhdGlvbiA9IHRydWUsXG4gICAgY2FwdHVyZSA9IGZhbHNlLFxuICAgIGtleWRvd24gPSB0cnVlLFxuICAgIGtleXVwID0gZmFsc2UsXG4gIH0gPSBvcHRpb25zID8/IHt9O1xuICBcbiAgY29uc3QgaGFuZGxlRXZlbnQgPSB1c2VNZW1vKCgpID0+IGVuYWJsZSA/XG4gICAgZSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGtleXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChrZXlzICE9PSBlLmtleSkgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGtleXMua2V5ICYmIGtleXMua2V5ICE9PSBlLmtleSkgcmV0dXJuO1xuICAgICAgICBpZiAoa2V5cy5zaGlmdEtleSAhPT0gdW5kZWZpbmVkICYmIGtleXMuc2hpZnRLZXkgIT09IGUuc2hpZnRLZXkpIHJldHVybjtcbiAgICAgICAgaWYgKGtleXMuY3RybEtleSAhPT0gdW5kZWZpbmVkICYmIGtleXMuY3RybEtleSAhPT0gZS5jdHJsS2V5KSByZXR1cm47XG4gICAgICAgIGlmIChrZXlzLmFsdEtleSAhPT0gdW5kZWZpbmVkICYmIGtleXMuYWx0S2V5ICE9PSBlLmFsdEtleSkgcmV0dXJuO1xuICAgICAgICBpZiAoa2V5cy5tZXRhS2V5ICE9PSB1bmRlZmluZWQgJiYga2V5cy5tZXRhS2V5ICE9PSBlLm1ldGFLZXkpIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghKGZpbHRlcj8uKGUpID8/IHRydWUpKSByZXR1cm47XG4gICAgICBcbiAgICAgIGlmIChwcmV2ZW50RGVmYXVsdCkgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKHN0b3BQcm9wYWdhdGlvbikgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgICBcbiAgICB9IDogdW5kZWZpbmVkLFxuICAgIFtrZXlzLCBjYWxsYmFjaywgZW5hYmxlLCBmaWx0ZXIsIHByZXZlbnREZWZhdWx0LCBzdG9wUHJvcGFnYXRpb24sIGRlcHMgPz8gW11dXG4gICk7XG4gIFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICgha2V5ZG93biB8fCAhaGFuZGxlRXZlbnQpIHJldHVybjtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVFdmVudCwge2NhcHR1cmV9KTtcbiAgICByZXR1cm4gKCkgPT4gZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlRXZlbnQsIHtjYXB0dXJlfSk7XG4gIH0sIFtlbGVtZW50LCBoYW5kbGVFdmVudCwga2V5ZG93biwgY2FwdHVyZV0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICgha2V5dXAgfHwgIWhhbmRsZUV2ZW50KSByZXR1cm47XG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIGhhbmRsZUV2ZW50LCB7Y2FwdHVyZX0pO1xuICAgIHJldHVybiAoKSA9PiBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgaGFuZGxlRXZlbnQsIHtjYXB0dXJlfSk7XG4gIH0sIFtlbGVtZW50LCBoYW5kbGVFdmVudCwga2V5dXAsIGNhcHR1cmVdKTtcbn0iLCAiaW1wb3J0IHtwcmVzc30gZnJvbSAnLi4vc2NyYXBib3gta2V5Ym9hcmQtZW11bGF0aW9uL3NjcmlwdC5qcycgO1xuaW1wb3J0IHtpbnNlcnRUZXh0fSBmcm9tICcuLi9zY3JhcGJveC1pbnNlcnQtdGV4dC0yL3NjcmlwdC5qcyc7XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VMaW5lKHRleHQpIHtcbiAgcHJlc3MoJ0hvbWUnKTtcbiAgcHJlc3MoJ0hvbWUnKTtcbiAgcHJlc3MoJ0VuZCcsIHtzaGlmdEtleTogdHJ1ZX0pO1xuICBhd2FpdCBpbnNlcnRUZXh0KHRleHQpO1xufVxuIFxuaW1wb3J0IHtcbiAgZ2V0TGluayBhcyBfZ2V0TGluayxcbiAgZ2V0SGVhZENoYXJET00sXG4gIGdldEluZGV4LFxuICBnZXRUZXh0LFxufSBmcm9tICcuLi9zY3JhcGJveC1hY2Nlc3Mtbm9kZXNAMC4xLjAvc2NyaXB0LmpzJztcbmltcG9ydCB7cG9zaXRpb259IGZyb20gJy4uL3NjcmFwYm94LWN1cnNvci1wb3NpdGlvbi0yL3NjcmlwdC5qcyc7XG5cbmZ1bmN0aW9uIGdldExpbmsoKSB7XG4gIGNvbnN0IHtjaGFyLCBsaW5lfSA9IHBvc2l0aW9uKCk7XG4gIGNvbnN0IGxpbmtET00gPSBfZ2V0TGluayhjaGFyKTtcbiAgY29uc3Qgc3RhcnQgPSBnZXRJbmRleChnZXRIZWFkQ2hhckRPTShsaW5rRE9NKSk7XG4gIGNvbnN0IHRleHQgPSBnZXRUZXh0KGxpbmtET00pO1xuICBpZiAobGluZSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBFcnJvcignbGluZSBpcyB1bmRlZmluZWQnKTtcbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHRocm93IEVycm9yKCdzdGFydCBpcyB1bmRlZmluZWQnKTtcbiAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCkgdGhyb3cgRXJyb3IoJ3RleHQgaXMgdW5kZWZpbmVkJyk7XG4gIHJldHVybiB7bGluZTogZ2V0VGV4dChsaW5lKSwgc3RhcnQsIHRleHR9XG59XG4gXG5pbXBvcnQge3NjcmFwYm94RE9NfSBmcm9tICcuLi9zY3JhcGJveC1kb20tYWNjZXNzb3Ivc2NyaXB0LmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VMaW5rKG5ld0xpbmtUZXh0KSB7XG4gIHNjcmFwYm94RE9NLnRleHRJbnB1dC5mb2N1cygpO1xuICBjb25zdCB7bGluZSwgc3RhcnQsIHRleHR9ID0gZ2V0TGluaygpO1xuICBjb25zdCBmaXJzdCA9IGxpbmUuc2xpY2UoMCwgc3RhcnQpO1xuICBjb25zdCBsYXN0ID0gbGluZS5zbGljZShzdGFydCArIHRleHQubGVuZ3RoKTtcbiAgbmV3TGlua1RleHQgPSB0ZXh0LnN0YXJ0c1dpdGgoJyMnKSA/IGAjJHtuZXdMaW5rVGV4dH1gIDogYFske25ld0xpbmtUZXh0fV1gO1xuICBhd2FpdCByZXBsYWNlTGluZShgJHtmaXJzdH0ke25ld0xpbmtUZXh0fSR7bGFzdH1gKTtcbn0iLCAiaW1wb3J0IHtzY3JhcGJveERPTX0gZnJvbSAnLi4vc2NyYXBib3gtZG9tLWFjY2Vzc29yL3NjcmlwdC5qcyc7XG5pbXBvcnQge3NsZWVwfSBmcm9tICcuLi9wcm9ncmFt44Gnc2xlZXDjgpLlrp/nj77jgZnjgovmlrnms5Uvc2NyaXB0LmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluc2VydFRleHQodGV4dCwge3dhaXQgPSAxfSA9IHt9KSB7XG4gIGNvbnN0IGN1cnNvciA9IHNjcmFwYm94RE9NLnRleHRJbnB1dDtcbiAgY3Vyc29yLmZvY3VzKCk7XG4gIGN1cnNvci52YWx1ZSA9IHRleHQ7XG4gIFxuICBjb25zdCB1aUV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ1VJRXZlbnQnKTtcbiAgdWlFdmVudC5pbml0RXZlbnQoJ2lucHV0JywgdHJ1ZSwgZmFsc2UpO1xuICBjdXJzb3IuZGlzcGF0Y2hFdmVudCh1aUV2ZW50KTtcbiAgYXdhaXQgc2xlZXAod2FpdCk7XG59IiwgImV4cG9ydCBjb25zdCBzbGVlcCA9IChtaWxsaXNlY29uZHMpID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtaWxsaXNlY29uZHMpKTsiLCAiaW1wb3J0IHtodG1sLCByZW5kZXJ9IGZyb20gJy4uL2h0bUAzLjAuNCUyRnByZWFjdC9zY3JpcHQuanMnO1xuaW1wb3J0IHt1c2VTdGF0ZSwgdXNlTWVtbywgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdH0gZnJvbSAnLi4vcHJlYWN0QDEwLjUuMTMvaG9va3MuanMnO1xuaW1wb3J0IHt1c2VDcm9zc1NlYXJjaH0gZnJvbSAnLi4vdXNlLWNyb3NzLXNlYXJjaEAwLjEuMC9zY3JpcHQuanMnO1xuaW1wb3J0IHt1c2VTZWxlY3R9IGZyb20gJy4uL3VzZS1zZWxlY3RAMC4xLjAvc2NyaXB0LmpzJztcbmltcG9ydCB7dXNlS2V5Ym9hcmR9IGZyb20gJy4uL3VzZS1rZXlib2FyZEAwLjEuMC9zY3JpcHQuanMnO1xuaW1wb3J0IHtEcm9wZG93bk1lbnV9IGZyb20gJy4uL2Ryb3Bkb3duLWNvbnRhaW5lckAwLjEuMS9zY3JpcHQuanMnO1xuaW1wb3J0IHt0b0xjfSBmcm9tICcuLi9zY3JhcGJveC10aXRsZUxjL3NjcmlwdC5qcyc7XG5pbXBvcnQge3JlcGxhY2VMaW5rfSBmcm9tICcuLi9leHRlcm5hbC1jb21wbGV0aW9uQDAuNC4wJTJGcmVwbGFjZUxpbmsvc2NyaXB0LmpzJztcbmltcG9ydCB7c2NyYXBib3hET019IGZyb20gJy4uL3NjcmFwYm94LWRvbS1hY2Nlc3Nvci9zY3JpcHQuanMnO1xuXG5jb25zdCBDb21wbGV0aW9uID0gKHtwb3NpdGlvbiwgaXRlbSwgbG9hZGluZywgc2VhcmNoaW5nLCBxdWVyeSwgbGlzdCwgaWNvbn0pID0+IGh0bWxgXG4gIDwke0Ryb3Bkb3duTWVudX0gcG9zaXRpb249XCIke3Bvc2l0aW9ufVwiIHNlbGVjdGVkPVwiJHtpdGVtPy5rZXl9XCJcbiAgICBtZXNzYWdlcz1cIiR7aHRtbGA8c3Bhbj4ke2xvYWRpbmcgPyAnTG9hZGluZy4uLicgOiBzZWFyY2hpbmcgPyBgU2VhcmNoaW5nIGZvciBcIiR7cXVlcnl9XCIuLi5gIDogJ1JlYWR5IHRvIHNlYXJjaC4nfTwvc3Bhbj5gfVwiPlxuICAgICR7bGlzdC5tYXAoKHtrZXksIGhyZWYsIHByb2plY3QsIG9uQ2xpY2t9KSA9PiBodG1sYFxuICAgICAgPGEgaHJlZj1cIiR7aHJlZn1cIlxuICAgICAgICBrZXk9XCIke2tleX1cIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgb25DbGljaz1cIiR7b25DbGlja31cIj5cbiAgICAgICAgJHtpY29uICYmIGh0bWxgPGltZyBzcmM9XCIvYXBpL3BhZ2VzJHtocmVmfS9pY29uXCIgLz5gfVxuICAgICAgICAke2tleX1cbiAgICAgIDwvYT5cbiAgICBgKX1cbiAgPC8vPlxuYDtcblxuY29uc3QgQ1NTID0gYFxuOmhvc3Qge1xuICAtLWRyb3Bkb3duLXRleHQtY29sb3I6IHZhcigtLXBhZ2UtdGV4dC1jb2xvciwgIzMzMyk7XG4gIC0tZHJvcGRvd24tYmc6IHZhcigtLXBhZ2UtYmcsICNmZmYpO1xuICAtLWRyb3Bkb3duLWJvcmRlci1jb2xvcjogdmFyKC0tYm9keS1iZywgcmdiYSgwLDAsMCwwLjE1KSk7XG4gIC0tZHJvcGRvd24tc2hhZG93LWNvbG9yOiByZ2JhKDAsMCwwLDAuMTc1KTtcbiAgLS1kcm9wZG93bi1pdGVtLWhvdmVyLXRleHQtY29sb3I6IHZhcigtLXBhZ2UtdGV4dC1jb2xvciwgIzMzMyk7XG4gIC0tZHJvcGRvd24taXRlbS1ob3Zlci1iZzogdmFyKC0tY2FyZC1ob3Zlci1iZywgI2Y1ZjVmNSk7XG4gIC0tZHJvcGRvd24taXRlbS1zZWxlY3QtYm9yZGVyLWNvbG9yOiAjNjZhZmU5OTk7XG59XG5gO1xuXG5jb25zdCBJbnRlcm5hbENvbXBsZXRpb24gPSAoe3Byb2plY3RJZHN9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBpdGVtLFxuICAgIGxpc3QsXG4gICAgY29uZmlybSxcbiAgICBjb25maXJtSWNvbixcbiAgICBzdGFydCxcbiAgICBjYW5jZWwsIC8vIOS4gOaZgueahOOBq+ijnOWujOOCkuatouOCgeOCi1xuICAgIGlzT3BlbixcbiAgICBpc0VuYWJsZUtleWJvYXJkLFxuICAgIGxvYWRpbmcsXG4gICAgc2VhcmNoaW5nLFxuICAgIHF1ZXJ5LFxuICAgIHNlbGVjdFByZXYsXG4gICAgc2VsZWN0TmV4dCxcbiAgICBwb3NpdGlvbixcbiAgfSA9IHVzZUV4dGVybmFsQ29tcGxldGlvbignaW50ZXJuYWwtY29tcGxldGlvbicsIHByb2plY3RJZHMsIHtpbnRlcm5hbDogdHJ1ZSwgZmlsdGVyOiAvXlteXFwvOl0vfSk7XG5cbiAgY29uc3QgdGV4dElucHV0ID0gc2NyYXBib3hET00udGV4dElucHV0O1xuICB1c2VLZXlib2FyZCh0ZXh0SW5wdXQsICdFc2NhcGUnLCBjYW5jZWwsIHtlbmFibGU6IGlzRW5hYmxlS2V5Ym9hcmR9LCBbaXNFbmFibGVLZXlib2FyZF0pO1xuICB1c2VLZXlib2FyZCh0ZXh0SW5wdXQsIHtrZXk6ICcgJywgY3RybEtleTogdHJ1ZX0sIHN0YXJ0LCB7c3RvcFByb3BhZ2F0aW9uOiBmYWxzZX0pO1xuICBcbiAgcmV0dXJuIGlzT3BlbiAmJiBodG1sYDwke0NvbXBsZXRpb259XG4gICAgcG9zaXRpb249XCIke3Bvc2l0aW9ufVwiXG4gICAgbGlzdD1cIiR7bGlzdH1cIlxuICAgIGl0ZW09XCIke2l0ZW19XCJcbiAgICBxdWVyeT1cIiR7cXVlcnl9XCIgXG4gICAgbG9hZGluZz1cIiR7bG9hZGluZ31cIlxuICAgIHNlYXJjaGluZz1cIiR7c2VhcmNoaW5nfVwiIC8+YDtcbn07XG5cbmNvbnN0IEV4dGVybmFsQ29tcGxldGlvbiA9ICh7cHJvamVjdElkc30pID0+IHtcbiAgY29uc3Qge1xuICAgIGl0ZW0sXG4gICAgbGlzdCxcbiAgICBjb25maXJtLFxuICAgIGNvbmZpcm1JY29uLFxuICAgIHN0YXJ0LFxuICAgIGNhbmNlbCwgLy8g5LiA5pmC55qE44Gr6KOc5a6M44KS5q2i44KB44KLXG4gICAgaXNPcGVuLFxuICAgIGlzRW5hYmxlS2V5Ym9hcmQsXG4gICAgbG9hZGluZyxcbiAgICBzZWFyY2hpbmcsXG4gICAgcXVlcnksXG4gICAgc2VsZWN0UHJldixcbiAgICBzZWxlY3ROZXh0LFxuICAgIHBvc2l0aW9uLFxuICB9ID0gdXNlRXh0ZXJuYWxDb21wbGV0aW9uKCdleHRlcm5hbC1jb21wbGV0aW9uJywgcHJvamVjdElkcywge2ZpbHRlcjogL15cXC8vfSk7XG5cbiAgY29uc3QgdGV4dElucHV0ID0gc2NyYXBib3hET00udGV4dElucHV0O1xuICB1c2VLZXlib2FyZCh0ZXh0SW5wdXQsIHtrZXk6ICdUYWInLCBzaGlmdEtleTogdHJ1ZX0sIHNlbGVjdFByZXYsIHtlbmFibGU6IGlzRW5hYmxlS2V5Ym9hcmR9LCBbaXNFbmFibGVLZXlib2FyZF0pO1xuICB1c2VLZXlib2FyZCh0ZXh0SW5wdXQsIHtrZXk6ICdUYWInLCBzaGlmdEtleTogZmFsc2V9LCBzZWxlY3ROZXh0LCB7ZW5hYmxlOiBpc0VuYWJsZUtleWJvYXJkfSwgW2lzRW5hYmxlS2V5Ym9hcmRdKTtcbiAgdXNlS2V5Ym9hcmQodGV4dElucHV0LCB7a2V5OiAnRW50ZXInLCBjdHJsS2V5OiB0cnVlfSwgY29uZmlybUljb24sIHtlbmFibGU6IGlzRW5hYmxlS2V5Ym9hcmR9LCBbaXNFbmFibGVLZXlib2FyZF0pO1xuICB1c2VLZXlib2FyZCh0ZXh0SW5wdXQsICdFbnRlcicsIGNvbmZpcm0sIHtlbmFibGU6IGlzRW5hYmxlS2V5Ym9hcmR9LCBbaXNFbmFibGVLZXlib2FyZF0pO1xuICB1c2VLZXlib2FyZCh0ZXh0SW5wdXQsICdFc2NhcGUnLCBjYW5jZWwsIHtlbmFibGU6IGlzRW5hYmxlS2V5Ym9hcmR9LCBbaXNFbmFibGVLZXlib2FyZF0pO1xuICB1c2VLZXlib2FyZCh0ZXh0SW5wdXQsIHtrZXk6ICcgJywgY3RybEtleTogdHJ1ZX0sIHN0YXJ0LCB7c3RvcFByb3BhZ2F0aW9uOiBmYWxzZX0pO1xuICBcbiAgcmV0dXJuIGlzT3BlbiAmJiBodG1sYDwke0NvbXBsZXRpb259XG4gICAgcG9zaXRpb249XCIke3Bvc2l0aW9ufVwiXG4gICAgbGlzdD1cIiR7bGlzdH1cIlxuICAgIGl0ZW09XCIke2l0ZW19XCJcbiAgICBxdWVyeT1cIiR7cXVlcnl9XCIgXG4gICAgbG9hZGluZz1cIiR7bG9hZGluZ31cIlxuICAgIHNlYXJjaGluZz1cIiR7c2VhcmNoaW5nfVwiIC8+YDtcbn07XG5cbmNvbnN0IEVtb2ppQ29tcGxldGlvbiA9ICh7cHJvamVjdElkc30pID0+IHtcbiAgY29uc3Qge1xuICAgIGl0ZW0sXG4gICAgbGlzdCxcbiAgICBjb25maXJtLFxuICAgIGNvbmZpcm1JY29uLFxuICAgIHN0YXJ0LFxuICAgIGNhbmNlbCwgLy8g5LiA5pmC55qE44Gr6KOc5a6M44KS5q2i44KB44KLXG4gICAgaXNPcGVuLFxuICAgIGlzRW5hYmxlS2V5Ym9hcmQsXG4gICAgbG9hZGluZyxcbiAgICBzZWFyY2hpbmcsXG4gICAgcXVlcnksXG4gICAgc2VsZWN0UHJldixcbiAgICBzZWxlY3ROZXh0LFxuICAgIHBvc2l0aW9uLFxuICB9ID0gdXNlRXh0ZXJuYWxDb21wbGV0aW9uKCdlbW9qaS1jb21wbGV0aW9uJywgcHJvamVjdElkcywge2ljb246IHRydWUsIGZpbHRlcjogL146L30pO1xuXG4gIGNvbnN0IHRleHRJbnB1dCA9IHNjcmFwYm94RE9NLnRleHRJbnB1dDtcbiAgdXNlS2V5Ym9hcmQodGV4dElucHV0LCB7a2V5OiAnVGFiJywgc2hpZnRLZXk6IHRydWV9LCBzZWxlY3RQcmV2LCB7ZW5hYmxlOiBpc0VuYWJsZUtleWJvYXJkfSwgW2lzRW5hYmxlS2V5Ym9hcmRdKTtcbiAgdXNlS2V5Ym9hcmQodGV4dElucHV0LCB7a2V5OiAnVGFiJywgc2hpZnRLZXk6IGZhbHNlfSwgc2VsZWN0TmV4dCwge2VuYWJsZTogaXNFbmFibGVLZXlib2FyZH0sIFtpc0VuYWJsZUtleWJvYXJkXSk7XG4gIHVzZUtleWJvYXJkKHRleHRJbnB1dCwgJ0VudGVyJywgY29uZmlybUljb24sIHtlbmFibGU6IGlzRW5hYmxlS2V5Ym9hcmR9LCBbaXNFbmFibGVLZXlib2FyZF0pO1xuICB1c2VLZXlib2FyZCh0ZXh0SW5wdXQsICdFc2NhcGUnLCBjYW5jZWwsIHtlbmFibGU6IGlzRW5hYmxlS2V5Ym9hcmR9LCBbaXNFbmFibGVLZXlib2FyZF0pO1xuICB1c2VLZXlib2FyZCh0ZXh0SW5wdXQsIHtrZXk6ICcgJywgY3RybEtleTogdHJ1ZX0sIHN0YXJ0LCB7c3RvcFByb3BhZ2F0aW9uOiBmYWxzZX0pO1xuICBcbiAgcmV0dXJuIGlzT3BlbiAmJiBodG1sYDwke0NvbXBsZXRpb259XG4gICAgcG9zaXRpb249XCIke3Bvc2l0aW9ufVwiXG4gICAgbGlzdD1cIiR7bGlzdH1cIlxuICAgIGl0ZW09XCIke2l0ZW19XCJcbiAgICBxdWVyeT1cIiR7cXVlcnl9XCIgXG4gICAgbG9hZGluZz1cIiR7bG9hZGluZ31cIlxuICAgIHNlYXJjaGluZz1cIiR7c2VhcmNoaW5nfVwiXG4gICAgaWNvbj1cIiR7dHJ1ZX1cIiAvPmA7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbW91bnQocHJvcHMpIHtcbiAgY29uc3QgYXBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGFwcC5kYXRhc2V0LnVzZXJzY3JpcHROYW1lPSAnZXh0ZXJuYWwtY29tcGxldGlvbic7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKS5hcHBlbmQoYXBwKTtcbiAgYXBwLmF0dGFjaFNoYWRvdyh7bW9kZTogJ29wZW4nfSk7XG4gIHJlbmRlcihodG1sYFxuICAgIDxzdHlsZT4ke0NTU308L3N0eWxlPlxuICAgICR7KHByb3BzLmludGVybmFsPy5sZW5ndGggPz8gMCkgPiAwICYmIGh0bWxgPCR7SW50ZXJuYWxDb21wbGV0aW9ufSBwcm9qZWN0SWRzPVwiJHtwcm9wcy5pbnRlcm5hbH1cIiAvPmB9XG4gICAgJHsocHJvcHMuZXh0ZXJuYWw/Lmxlbmd0aCA/PyAwKSA+IDAgJiYgaHRtbGA8JHtFeHRlcm5hbENvbXBsZXRpb259IHByb2plY3RJZHM9XCIke3Byb3BzLmV4dGVybmFsfVwiIC8+YH1cbiAgICAkeyhwcm9wcy5lbW9qaT8ubGVuZ3RoID8/IDApID4gMCAmJiBodG1sYDwke0Vtb2ppQ29tcGxldGlvbn0gcHJvamVjdElkcz1cIiR7cHJvcHMuZW1vaml9XCIgLz5gfVxuICBgLCBhcHAuc2hhZG93Um9vdCk7XG59XG5pbXBvcnQge3Bvc2l0aW9uIGFzIGNhcmV0UG9zfSBmcm9tICcuLi9zY3JhcGJveC1jdXJzb3ItcG9zaXRpb24tMi9zY3JpcHQuanMnO1xuXG5mdW5jdGlvbiB1c2VFeHRlcm5hbENvbXBsZXRpb24obmFtZSwgcHJvamVjdElkcywge2ljb24sIGZpbHRlciwgaW50ZXJuYWx9ID0ge30pIHtcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2VuYWJsZSwgc2V0RW5hYmxlXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBjYW5jZWwgPSB1c2VDYWxsYmFjaygoKSA9PiBzZXRPcGVuKGZhbHNlKSwgW10pO1xuICBcbiAgLy8g5qSc57Si57WQ5p6cXG4gIGNvbnN0IHtsb2FkaW5nLCBzZWFyY2hpbmcsIHJlc3VsdHN9ID0gdXNlQ3Jvc3NTZWFyY2gobmFtZSwgcXVlcnksIHtpY29uLCBwcm9qZWN0SWRzfSk7XG4gIC8v56K65a6a5pmC44Gu5Yem55CGXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VDYWxsYmFjayhhc3luYyAoa2V5LCBlKSA9PiB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAvLyDkv67po77jgq3jg7zjgYzmirzjgZXjgozjgabjgYTjgZ/jgonkvZXjgoLjgZfjgarjgYRcbiAgICBpZiAoZS5tZXRhS2V5IHx8IGUuY3RybEtleSB8fCBlLmFsdEtleSB8fCBlLnNoaWZ0S2V5KSByZXR1cm47XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGF3YWl0IHJlcGxhY2VMaW5rKGtleSk7XG4gICAgY2FuY2VsKCk7IC8vIOijnOWujOOCkue1guS6huOBmeOCi1xuICB9LCBbY2FuY2VsXSk7XG4gIC8vIFVJ55So44Gr5Yqg5bel44GZ44KLXG4gIGNvbnN0IGxpc3QgPSB1c2VNZW1vKFxuICAgICgpID0+IHJlc3VsdHNcbiAgICAgIC5tYXAoKHtwcm9qZWN0LCB0aXRsZX0pID0+ICh7XG4gICAgICAgIGtleTogYC8ke3Byb2plY3R9LyR7dGl0bGV9YCxcbiAgICAgICAgaHJlZjogYC8ke3Byb2plY3R9LyR7dG9MYyh0aXRsZSl9YCxcbiAgICAgICAgcHJvamVjdCxcbiAgICAgICAgb25DbGljazogZSA9PiBvbkNsaWNrKGludGVybmFsID8gdGl0bGUgOiBpY29uID8gYC8ke3Byb2plY3R9LyR7dGl0bGV9Lmljb25gIDogYC8ke3Byb2plY3R9LyR7dGl0bGV9YCwgZSksXG4gICAgICB9KSksXG4gICAgW3Jlc3VsdHMsIHF1ZXJ5LCBpbnRlcm5hbF1cbiAgKTtcbiAgXG4gIC8vIOOCreODvOaTjeS9nOOBruacieWKueOBi+OBqeOBhuOBi+OBrmZsYWdcbiAgY29uc3QgaXNFbmFibGVLZXlib2FyZCA9XG4gICAgdXNlTWVtbygoKSA9PiBlbmFibGUgJiYgb3BlbiAmJiBsaXN0Lmxlbmd0aCA+IDAsIFtlbmFibGUsIG9wZW4sIGxpc3QubGVuZ3RoXSk7XG4gIC8vIOijnOWujHdpbmRvd+OCkumWi+OBj+OBi+OBqeOBhuOBi+OBrmZsYWdcbiAgY29uc3QgaXNPcGVuID0gdXNlTWVtbyhcbiAgICAoKSA9PiBlbmFibGUgJiYgb3BlbiAmJiAobGlzdC5sZW5ndGggPiAwIHx8IGxvYWRpbmcgfHwgc2VhcmNoaW5nKSxcbiAgICBbZW5hYmxlLCBvcGVuLCBsaXN0Lmxlbmd0aCwgbG9hZGluZywgc2VhcmNoaW5nXVxuICApO1xuICBcbiAgLy8g6aCF55uu6YG45oqeXG4gIGNvbnN0IHtpdGVtLCBzZWxlY3RQcmV2LCBzZWxlY3ROZXh0fSA9IHVzZVNlbGVjdCh7XG4gICAgbGlzdCxcbiAgICBkZWZhdWx0U2VsZWN0ZWQ6IDAsXG4gIH0pOyBcbiAgXG4gIC8v56K65a6a5pmC44Gu5Yem55CGXG4gIGNvbnN0IGNvbmZpcm0gPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgcmVwbGFjZUxpbmsoaXRlbS5rZXkpO1xuICAgIGNhbmNlbCgpO1xuICB9LCBbaXRlbSwgY2FuY2VsXSk7XG4gIGNvbnN0IGNvbmZpcm1JY29uID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHJlcGxhY2VMaW5rKGAke2l0ZW0ua2V5fS5pY29uYCk7XG4gICAgY2FuY2VsKCk7XG4gIH0sIFtpdGVtLCBjYW5jZWxdKTtcbiAgXG4gIGNvbnN0IFtwb3NpdGlvbiwgc2V0UG9zaXRpb25dID0gdXNlU3RhdGUoe3RvcDogMCwgbGVmdDogMH0pOyAvLyBwb3B1cOOBruS9jee9rlxuICAvLyAuY3Vyc29y44GMLnBhZ2UtbGlua+OBruS4reOBq+OBhOOBn+OCieijnOWujOOCkumWi+Wni+OBmeOCi1xuICBjb25zdCBzdGFydENvbXBsZXRpb24gPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qge2NoYXJ9ID0gY2FyZXRQb3MoKTtcbiAgICBjb25zdCBsaW5rID0gY2hhcj8uY2xvc2VzdD8uKCcucGFnZS1saW5rW3R5cGU9XCJsaW5rXCJdJyk7IC8vIGhhc2ggdGFn44Gv6Zmk5aSW44GZ44KLXG4gICAgaWYgKCFsaW5rKSB7XG4gICAgICBjYW5jZWwoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gLmN1cnNvci1saW5l44Gr44Gq44Gj44Gm44GE44KL44Gv44Ga44Gq44Gu44Gn44CBW13jgaflm7Ljgb7jgozjgabjgYTjgovjgajjgb/jgarjgZfjgabjgYTjgYRcbiAgICBjb25zdCB0ZXh0ID0gbGluay50ZXh0Q29udGVudC5zbGljZSgxLCAtMSk7XG4gICAgLy8g5aSW6YOocHJvamVjdCBsaW5r6KiY5rOV44Gu44G/44KS5a++6LGh44Go44GZ44KLXG4gICAgaWYgKCFmaWx0ZXIudGVzdCh0ZXh0KSkgcmV0dXJuO1xuICAgIHNldE9wZW4odHJ1ZSk7XG4gICAgc2V0UXVlcnkodGV4dC5zbGljZSgxKSk7XG4gICAgXG4gICAgLy8gbGVmdOOBr2xpbmvjga7lt6bnq6/jgavlkIjjgo/jgZvjgotcbiAgICBjb25zdCB0b3AgPSBwYXJzZUludChzY3JhcGJveERPTS5jdXJzb3Iuc3R5bGUudG9wKTtcbiAgICBjb25zdCBoZWlnaHQgPSBwYXJzZUludChzY3JhcGJveERPTS5jdXJzb3Iuc3R5bGUuaGVpZ2h0KTtcbiAgICBjb25zdCBib3R0b20gPSB0b3AgKyBoZWlnaHQ7XG4gICAgY29uc3Qge2xlZnQ6IGVMZWZ0fSA9IHNjcmFwYm94RE9NLmVkaXRvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBsZWZ0ID0gbGluay5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgIHNldFBvc2l0aW9uKHt0b3A6IGJvdHRvbSwgbGVmdDogTWF0aC5yb3VuZChsZWZ0IC0gZUxlZnQpfSk7XG4gIH0sIFtmaWx0ZXJdKTtcbiAgdXNlT25UZXh0Q2hhbmdlKHN0YXJ0Q29tcGxldGlvbik7XG4gIC8vIOaJi+WLleOBp+ijnOWujOOCkuacieWKueOBq+OBmeOCi1xuICBjb25zdCBzdGFydCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBzZXRFbmFibGUodHJ1ZSk7XG4gICAgYXdhaXQgc3RhcnRDb21wbGV0aW9uKCk7XG4gIH0sIFtzdGFydENvbXBsZXRpb25dKTtcbiAgXG4gIHJldHVybiB7XG4gICAgaXRlbSxcbiAgICBsaXN0LFxuICAgIGNvbmZpcm0sXG4gICAgY29uZmlybUljb24sXG4gICAgc3RhcnQsXG4gICAgY2FuY2VsLFxuICAgIGlzT3BlbixcbiAgICBpc0VuYWJsZUtleWJvYXJkLFxuICAgIHF1ZXJ5LFxuICAgIGxvYWRpbmcsXG4gICAgc2VhcmNoaW5nLFxuICAgIHNlbGVjdFByZXYsXG4gICAgc2VsZWN0TmV4dCxcbiAgICBwb3NpdGlvbixcbiAgfVxufVxuaW1wb3J0IHt1c2VFdmVudExpc3RlbmVyfSBmcm9tICcuLi91c2UtZXZlbnQtbGlzdGVuZXIvc2NyaXB0LmpzJztcbmltcG9ydCB7dXNlTXV0YXRpb25PYnNlcnZlcn0gZnJvbSAnLi4vdXNlTXV0YXRpb25PYnNlcnZlci9zY3JpcHQuanMnO1xuaW1wb3J0IHt0aHJvdHRsZX0gZnJvbSAnLi4vY3VzdG9tLXRocm90dGxlL3NjcmlwdC5qcyc7XG5cbmZ1bmN0aW9uIHVzZU9uVGV4dENoYW5nZShjYWxsYmFjaywgZGVsYXkpIHtcbiAgY29uc3Qgb25JbnB1dCA9IHVzZU1lbW8oKCkgPT4gdGhyb3R0bGUoY2FsbGJhY2ssIGRlbGF5ID8/IDEwMCksIFtjYWxsYmFjaywgZGVsYXldKTtcbiAgY29uc3Qgb25LZXlVcCA9IHVzZUNhbGxiYWNrKGUgPT4ge1xuICAgIGlmIChlLmtleSAhPT0gJ0RlbGV0ZScgJiYgZS5rZXkgIT09IFwiQmFja3NwYWNlXCIgJiYgZS5rZXkgIT09ICdFbnRlcicpIHJldHVybjtcbiAgICBvbklucHV0KGUpO1xuICB9LCBbb25JbnB1dF0pO1xuICB1c2VFdmVudExpc3RlbmVyKHNjcmFwYm94RE9NLnRleHRJbnB1dCwgJ2lucHV0Jywgb25JbnB1dCk7XG4gIHVzZUV2ZW50TGlzdGVuZXIoc2NyYXBib3hET00udGV4dElucHV0LCAna2V5dXAnLCBvbktleVVwKTsgLy8g5paH5a2X5YmK6Zmk44Kt44O844KS5qSc55+l44GZ44KLXG4gIHVzZU11dGF0aW9uT2JzZXJ2ZXIoW3tjdXJyZW50OiBzY3JhcGJveERPTS50ZXh0SW5wdXR9XSwgKFttdXRhdGlvbl0pID0+IGNhbGxiYWNrKG11dGF0aW9uKSwge2F0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWydzdHlsZSddfSk7XG59IiwgImltcG9ydCAnL2FwaS9jb2RlL3Byb2dyYW1taW5nLW5vdGVzL+aVsOW8j+OCknByZXZpZXfjgZnjgotVc2VyU2NyaXB0L3NjcmlwdC5qcyc7XG5pbXBvcnQgJy9hcGkvY29kZS9wcm9ncmFtbWluZy1ub3Rlcy9zY3JhcGJveC1pbmNyZW1lbnRhbC1mdWxsdGV4dC1zZWFyY2gvc2FtcGxlLmpzJztcbmltcG9ydCAnL2FwaS9jb2RlL3Byb2dyYW1taW5nLW5vdGVzL3NjcmFwYm94LWhpc3Rvcnktc2xpZGVyQDAuMi4xL3NjcmlwdC5qcyc7XG5cbmltcG9ydCB7bW91bnR9IGZyb20gJy9hcGkvY29kZS9wcm9ncmFtbWluZy1ub3Rlcy9TY3JhcEJ1YmJsZUAwLjIuMC9zY3JpcHQuanMnO1xuY29uc3QgdGFra2VyX2xpc3QgPSBbJ3Rha2tlci1tZW1leCcsJ3Rha2tlci1wcml2YXRlJywgJ3Rha2tlcicsICd0YWtrZXItUFMnXTtcbmNvbnN0IGFkZGl0aW9uYWxfbGlzdD0gW107XG5zd2l0Y2ggKHNjcmFwYm94LlByb2plY3QubmFtZSkge1xuICAgY2FzZSAnaHViJzpcbiAgIGNhc2UgJ3ZpbGxhZ2VwdW1wJzpcbiAgIGNhc2UgJ3ZlcmJhbGl6aW5nLWNvbW11bml0eSc6XG4gICAgIGFkZGl0aW9uYWxfbGlzdC5wdXNoKCd2aWxsYWdlcHVtcCcsICdodWInLCAndmVyYmFsaXppbmctY29tbXVuaXR5Jyk7XG4gICAgIGJyZWFrO1xuICAgY2FzZSAncHJvZ3JhbW1pbmctbm90ZXMnOlxuICAgY2FzZSAnY3VzdG9taXplJzpcbiAgIGNhc2UgJ3NjcmFwYm94bGFiJzpcbiAgICAgYWRkaXRpb25hbF9saXN0LnB1c2goJ3Byb2dyYW1taW5nLW5vdGVzJywgJ2N1c3RvbWl6ZScsICdzY3JhcGJveGxhYicpO1xuICAgICBicmVhaztcbn1cbm1vdW50KHtleHBpcmVkOiAxMCAvKjYw56eS44Gv6ZW344GE44Gu44GnMTDnp5LjgavjgZfjgZ8qLywgd2hpdGVMaXN0OiBbLi4udGFra2VyX2xpc3QsIC4uLmFkZGl0aW9uYWxfbGlzdF19KTtcblxuaW1wb3J0IHttb3VudCBhcyBtb3VudENvbXBsZXRpb259IGZyb20gJy9hcGkvY29kZS9wcm9ncmFtbWluZy1ub3Rlcy9leHRlcm5hbC1jb21wbGV0aW9uQDAuNC4wL3NjcmlwdC5qcyc7XG5cbmNvbnN0IHdhdGNoTGlzdElkcyA9IE9iamVjdC5rZXlzKEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Byb2plY3RzTGFzdEFjY2Vzc2VkJykpKTtcbmNvbnN0IGljb25JZHMgPSBbXG4gICc1N2IzZmUwOWVjMmIzMzBmMDBmMTUzODInLCAvLyAvaWNvbnMgSWNvbnNcbiAgJzVlYmY4MGI0OTE1ODJjMDAxZTM4Yzk2NycsIC8vIC9JY29uczIgSWNvbnMyXG4gICc1YWRjMjI1MGQ1Y2FmMzAwMTQ5MTBhODMnLCAvLyAvZW1vamkgZW1vamlcbl07XG5jb25zdCBpbnRlcm5hbElkcyA9IFtcbiAgJzVmMmYwMmYzYzRhNDhkMDAyMzdlMTUzNCcsIC8vIC90YWtrZXIg44GP44Gf44GP44Gf44GY44KF44GG44KI44KTXG4gICc1ZWQxMDliYzkxMGQ5MjAwMjNjZDhmZDUnLCAvLyAvdGFra2VyLW1lbWV4IHRha2tlcidzIG1lbWV4XG4gICc1ZWRlYTVhMWRmOTI5YTAwMWVhNDU4YTcnLCAvLyAvdGFra2VyLWNvbGxhYm9yYXRpb24tMSB0YWtrZXItY29sbGFib3JhdGlvbi0xXG4gICc1ZjQ3ZDE0NjgzMzhmMjAwMWVkMTQ3OTEnLCAvLyAvdGFra2VyLXByaXZhdGUgdGFra2VyLXByaXZhdGVcbiAgJzYwY2FjOTAzNzI5NTFiMDAyMjI5MDFmZScsIC8vIC90YWtrZXItUFMg44CO5ZWP6aGM6Kej5rG65aSn5YWo44CPXG4gICc1Yzc2MTc1OGRmZDJlMTAwMTc0OTA4MjQnLCAvLyAvcHJvZ3JhbW1pbmctbm90ZXMgcHJvZ3JhbW1pbmctbm90ZXNcbl07XG5zd2l0Y2ggKHNjcmFwYm94LlByb2plY3QubmFtZSkge1xuICAgY2FzZSAnaHViJzpcbiAgIGNhc2UgJ3ZpbGxhZ2VwdW1wJzpcbiAgIGNhc2UgJ3ZlcmJhbGl6aW5nLWNvbW11bml0eSc6XG4gICAgIGludGVybmFsSWRzLnB1c2goXG4gICAgICAgJzVjNTNiNzJjMGYzNGRmMDAxNzIzOWQ5NycsIC8vIC9odWIgaHViXG4gICAgICAgJzVlMjQ1NTI1NTY2NGUwMDAxNzdhNDZmYycsIC8vIC92aWxsYWdlcHVtcCDkupXmiLjnq69cbiAgICAgICAnNjA4ZWFlMjE5NWMzOWQwMDFjZGY2MGZmJywgLy8gL3ZlcmJhbGl6aW5nLWNvbW11bml0eSDoqIDoqp7ljJbjgrPjg5/jg6Xjg4vjg4bjgqPjgI7jgrfjg4rjg5fjgrnjgI9cbiAgICAgKTtcbiAgICAgYnJlYWs7XG4gICBjYXNlICdwcm9ncmFtbWluZy1ub3Rlcyc6XG4gICBjYXNlICdjdXN0b21pemUnOlxuICAgY2FzZSAnc2NyYXBib3hsYWInOlxuICAgICBpbnRlcm5hbElkcy5wdXNoKFxuICAgICAgICc1YzI2ZjM0NGY3YmI0ZjAwMTdhYmU4YzUnLCAvLyAvZGVuby1qYSBkZW5vLWphXG4gICAgICAgJzU5MmUyMzUzYzIzMzk4MDAxMTgxZTM4YScsIC8vIC9jdXN0b21pemUgU2NyYXBib3jjgqvjgrnjgr/jg57jgqTjgrrjgrPjg6zjgq/jgrfjg6fjg7NcbiAgICAgICAnNWFmM2I1ZTQ5ZGYzZmQwMDE0OTljNmFmJywgLy8gL3NjcmFwYm94bGFiIFNjcmFwYm9456CU56m25LyaXG4gICAgICk7XG4gICAgIGJyZWFrO1xufVxuXG4vLyB3YXRjaExpc3TjgYvjgonnj77lnKhwcm9qZWN044Go5Yil44Gu6KOc5a6M44Gn5L2/44GGcHJvamVjdOOCkumZpOOBj1xuY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYC9hcGkvcHJvamVjdHMvJHtzY3JhcGJveC5Qcm9qZWN0Lm5hbWV9YCk7XG5jb25zdCB7aWR9ID0gYXdhaXQgcmVzLmpzb24oKTtcbmNvbnN0IHByb2plY3RJZHMgPSB3YXRjaExpc3RJZHNcbiAgLmZpbHRlcihfaWQgPT4gIVsuLi5pY29uSWRzLCAuLi5pbnRlcm5hbElkcywgaWRdLmluY2x1ZGVzKF9pZCkpO1xuXG4vLyDotbfli5Vcbm1vdW50Q29tcGxldGlvbih7XG4gIGludGVybmFsOiBpbnRlcm5hbElkcy5maWx0ZXIoX2lkID0+IF9pZCAhPT0gaWQpLCAvLyBpbnRlcm5hbC1jb21wbGV0aW9u44Gr5L2/44GGcHJvamVjdOOBrmlkIGxpc3RcbiAgZXh0ZXJuYWw6IHByb2plY3RJZHMsIC8vIGV4dGVybmFsLWNvbXBsZXRpb27jgavkvb/jgYZwcm9qZWN044GuaWQgbGlzdFxuICBlbW9qaTogaWNvbklkcywgLy8gZW1vamktY29tcGxldGlvbuOBq+S9v+OBhnByb2plY3Tjga5pZCBsaXN0XG59KTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxHQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRyxHQUFFLEdBQUcsR0FBRSxvRUFBb0UsV0FBVyxFQUFFLEVBQUUsQ0FBQyxPQUFRLEtBQUssR0FBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU8sR0FBRSxZQUFXLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxXQUFXLEdBQUcsRUFBRSxZQUFZLEdBQUcsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLElBQUssR0FBRSxBQUFPLEdBQVAsTUFBUyxFQUFFLEVBQUUsR0FBRyxBQUFPLEdBQVAsTUFBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsVUFBVSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxVQUFVLE9BQU8sSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsQUFBTSxHQUFOLE1BQVUsR0FBRSxTQUFTLEdBQUcsQUFBWSxNQUFPLElBQW5CLFlBQXNCLEFBQU0sRUFBRSxjQUFSLEtBQXFCLElBQUksSUFBSyxHQUFFLGFBQWEsQUFBUyxFQUFFLEtBQVgsUUFBZ0IsR0FBRSxHQUFHLEVBQUUsYUFBYSxJQUFJLE1BQU8sSUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFJLEdBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsSUFBSSxLQUFLLElBQUksT0FBTyxJQUFJLEtBQUssSUFBSSxLQUFLLFlBQVksT0FBTyxJQUFVLEdBQUUsRUFBRSxFQUFFLEtBQU8sTUFBTyxBQUFNLEdBQUUsT0FBUixNQUFlLEVBQUUsTUFBTSxHQUFHLEVBQW9DLFdBQVcsRUFBRSxDQUFDLE1BQU8sR0FBRSxTQUFTLFlBQVcsRUFBRSxFQUFFLENBQUMsS0FBSyxNQUFNLEVBQUUsS0FBSyxRQUFRLEVBQUUsWUFBVyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEFBQU0sR0FBTixLQUFRLE1BQU8sR0FBRSxHQUFHLEdBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLFFBQVEsR0FBRyxHQUFHLEtBQUssT0FBUSxHQUFFLEVBQUUsRUFBRSxJQUFJLE9BQU8sSUFBSSxHQUFHLEFBQU8sR0FBRSxFQUFFLElBQUksS0FBZixNQUFvQixBQUFNLEVBQUUsS0FBUixLQUFZLE1BQU8sR0FBRSxJQUFJLE1BQU0sQUFBWSxPQUFPLEdBQUUsTUFBckIsV0FBMEIsR0FBRSxHQUFHLEtBQUssWUFBVyxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxBQUFPLEdBQUUsRUFBRSxLQUFYLE1BQWdCLEFBQU0sRUFBRSxLQUFSLEtBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxPQUFPLElBQUksR0FBRyxBQUFPLEdBQUUsRUFBRSxJQUFJLEtBQWYsTUFBb0IsQUFBTSxFQUFFLEtBQVIsS0FBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksS0FBSyxFQUFFLElBQUksTUFBTSxNQUFPLElBQUUsSUFBSSxZQUFXLEVBQUUsQ0FBQyxBQUFDLEVBQUMsRUFBRSxLQUFNLEdBQUUsSUFBSSxLQUFLLEdBQUUsS0FBSyxJQUFJLENBQUMsR0FBRSxPQUFPLEtBQUksRUFBRSxvQkFBc0IsS0FBRSxFQUFFLG9CQUFvQixJQUFHLElBQUcsYUFBWSxDQUFDLE9BQVEsR0FBRSxHQUFFLElBQUksR0FBRSxRQUFRLEVBQUUsR0FBRSxLQUFLLFNBQVMsRUFBRSxFQUFFLENBQUMsTUFBTyxHQUFFLElBQUksSUFBSSxFQUFFLElBQUksTUFBTSxHQUFFLEdBQUcsRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFNLEdBQUcsR0FBRyxHQUFFLEdBQUcsS0FBSyxJQUFLLEdBQUUsRUFBRSxNQUFPLEdBQUUsR0FBSSxHQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQUFBUyxFQUFFLGtCQUFYLE9BQTJCLEFBQU0sRUFBRSxLQUFSLEtBQVksQ0FBQyxHQUFHLEtBQUssRUFBUSxHQUFFLEdBQUUsR0FBSyxFQUFFLEtBQUssR0FBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEdBQUcsR0FBRSxPQUFPLFlBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEdBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxHQUFHLEFBQU8sR0FBRSxFQUFFLElBQUksR0FBRyxBQUFPLEdBQUUsRUFBRSxLQUFYLE1BQWdCLEFBQVcsTUFBTyxJQUFsQixVQUFvQixLQUFLLEFBQVUsTUFBTyxJQUFqQixVQUFvQixBQUFVLE1BQU8sSUFBakIsVUFBb0IsQUFBVSxNQUFPLElBQWpCLFNBQW1CLEdBQUUsS0FBSyxFQUFFLEtBQUssS0FBSyxHQUFHLE1BQU0sUUFBUSxHQUFHLEdBQUUsRUFBRSxDQUFDLFNBQVMsR0FBRyxLQUFLLEtBQUssTUFBTSxFQUFFLElBQUksRUFBRSxHQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEtBQUssRUFBRSxLQUFLLElBQXpPLEtBQTRPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQUFBUSxHQUFFLEVBQUUsTUFBWixNQUFpQixHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsV0FBWSxLQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLE9BQU8sTUFBTSxFQUFFLEtBQUssR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUssR0FBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEdBQUksSUFBSSxHQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQUFBTSxHQUFOLEtBQVMsQ0FBTSxHQUFOLE1BQVUsR0FBRSxHQUFHLEFBQVksTUFBTyxHQUFFLE1BQXJCLFlBQTJCLEFBQU0sRUFBRSxLQUFSLE1BQWEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEFBQVcsRUFBRSxPQUFiLFNBQWtCLEFBQVksTUFBTyxHQUFFLE1BQXJCLFlBQTRCLEdBQUUsSUFBSSxHQUFHLEVBQUUsTUFBTSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxZQUFZLEdBQUksR0FBRSxHQUFFLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxBQUFNLEVBQUUsSUFBUixNQUFhLENBQVksTUFBTyxHQUFFLE1BQXJCLFlBQTJCLEFBQU0sRUFBRSxHQUFHLEtBQVgsTUFBZ0IsRUFBRSxHQUFHLEtBQUssRUFBRSxLQUFNLEdBQUUsSUFBSSxHQUFFLEVBQUUsRUFBRSxJQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxZQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksT0FBTyxJQUFJLEFBQUMsR0FBRSxFQUFFLElBQUksS0FBTSxHQUFFLEdBQUcsRUFBRSxFQUFFLEFBQVksTUFBTyxHQUFFLE1BQXJCLFdBQTBCLEdBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksTUFBTyxHQUFFLFlBQVcsRUFBRSxFQUFFLENBQUMsTUFBTyxHQUFFLEdBQUcsR0FBRyxBQUFNLEdBQU4sTUFBUyxBQUFXLE1BQU8sSUFBbEIsV0FBc0IsT0FBTSxRQUFRLEdBQUcsRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDLEdBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUUsWUFBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsR0FBRyxBQUFTLEVBQUUsTUFBWCxPQUFlLEVBQUUsRUFBRSxJQUFJ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RSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssR0FBRyxBQUFTLEVBQUUsY0FBWCxPQUF1QixNQUFPLE1BQUssQUFBTSxFQUFFLEtBQVIsTUFBYyxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEtBQUssRUFBRSxDQUFDLElBQUssR0FBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQUFBWSxNQUFPLElBQW5CLFdBQXFCLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFHLEdBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFHLEdBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsSUFBSyxjQUFjLElBQUcsRUFBRSxVQUFVLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBSSxHQUFFLEVBQUUsR0FBSSxHQUFFLElBQUksRUFBRSxHQUFJLElBQUUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLEVBQUUsT0FBTyxJQUFHLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxPQUFRLEdBQUUsTUFBTSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksQUFBTSxFQUFFLEtBQVIsTUFBYyxHQUFFLElBQUksRUFBRSxPQUFPLEFBQU0sRUFBRSwwQkFBUixNQUFtQyxHQUFFLEtBQUssRUFBRSxPQUFRLEdBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsQUFBTSxFQUFFLDBCQUFSLE1BQWtDLEFBQU0sRUFBRSxvQkFBUixNQUE0QixFQUFFLHFCQUFxQixBQUFNLEVBQUUsbUJBQVIsTUFBMkIsRUFBRSxJQUFJLEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxHQUFHLEFBQU0sRUFBRSwwQkFBUixNQUFrQyxJQUFJLEdBQUcsQUFBTSxFQUFFLDJCQUFSLE1BQW1DLEVBQUUsMEJBQTBCLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxBQUFNLEVBQUUsdUJBQVIsTUFBK0IsQUFBSyxFQUFFLHNCQUFzQixFQUFFLEVBQUUsSUFBSSxLQUFyQyxJQUF5QyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFNLEdBQUUsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksUUFBUSxTQUFTLEVBQUUsQ0FBQyxHQUFJLEdBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxRQUFRLEVBQUUsS0FBSyxHQUFHLFFBQVEsQUFBTSxFQUFFLHFCQUFSLE1BQTZCLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxJQUFJLEdBQUcsQUFBTSxFQUFFLG9CQUFSLE1BQTRCLEVBQUUsSUFBSSxLQUFLLFVBQVUsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFLLEdBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEFBQU0sRUFBRSxpQkFBUixNQUEwQixHQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxvQkFBb0IsR0FBRyxBQUFNLEVBQUUseUJBQVIsTUFBa0MsR0FBRSxFQUFFLHdCQUF3QixFQUFFLElBQUksRUFBRSxBQUFNLEdBQU4sTUFBUyxFQUFFLE9BQU8sR0FBRyxBQUFNLEVBQUUsS0FBUixLQUFZLEVBQUUsTUFBTSxTQUFTLEVBQUUsR0FBRSxFQUFFLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxLQUFLLEVBQUUsSUFBSSxRQUFRLEVBQUUsS0FBSyxHQUFHLEdBQUksR0FBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsSUFBSSxPQUFRLEFBQU0sSUFBTixNQUFTLEVBQUUsTUFBTSxFQUFFLElBQUssR0FBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEFBQUMsR0FBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQU4sQ0FBUyxFQUFFLElBQUksS0FBTSxJQUFHLEFBQU0sR0FBTixPQUFXLEdBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxJQUFJLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLFlBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLFdBQVcsRUFBTixDQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsUUFBUSxZQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFB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QUUsQ0FBQyxNQUFPLE1BQUssWUFBWSxFQUFFLEdBQUcsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRyxHQUFFLEFBQVksTUFBTyxJQUFuQixZQUFzQixLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRSxFQUFFLEVBQUcsRUFBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUUsR0FBRSxBQUFTLEVBQUUsa0JBQVgsT0FBMkIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFdBQVcsR0FBRSxNQUFNLEtBQUssRUFBRSxZQUFZLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxHQUFHLEdBQUUsRUFBRSxHQUFHLFlBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBRyxZQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLElBQUksSUFBSyxHQUFFLEFBQU8sR0FBUCxNQUFTLEVBQUUsRUFBRSxHQUFHLEFBQU8sR0FBUCxNQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxVQUFVLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLFVBQVUsT0FBTyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksTUFBTyxBQUFNLElBQU4sTUFBVSxHQUFFLFNBQVMsR0FBRyxHQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLE1BQXllLEVBQUUsQ0FBQyxJQUFJLFNBQVMsRUFBRSxFQUFFLENBQUMsT0FBUSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxHQUFJLEdBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFJLEdBQUUsRUFBRSxjQUFjLEFBQU0sRUFBRSwwQkFBUixNQUFtQyxHQUFFLFNBQVMsRUFBRSx5QkFBeUIsSUFBSSxFQUFFLEVBQUUsS0FBSyxBQUFNLEVBQUUsbUJBQVIsTUFBNEIsR0FBRSxrQkFBa0IsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU8sR0FBRSxJQUFJLFFBQVEsRUFBTixDQUFTLEVBQUUsRUFBRSxLQUFNLElBQUcsSUFBSSxHQUFHLEdBQUUsU0FBUyxFQUFFLENBQUMsTUFBTyxBQUFNLElBQU4sTUFBUyxBQUFTLEVBQUUsY0FBWCxRQUF3QixHQUFFLFVBQVUsU0FBUyxTQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEFBQU0sS0FBSyxLQUFYLE1BQWdCLEtBQUssTUFBTSxLQUFLLE1BQU0sS0FBSyxJQUFJLEtBQUssSUFBSSxFQUFFLEdBQUcsS0FBSyxPQUFPLEFBQVksTUFBTyxJQUFuQixZQUF1QixHQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsS0FBSyxRQUFRLEdBQUcsRUFBRSxFQUFFLEdBQUcsQUFBTSxHQUFOLE1BQVMsS0FBSyxLQUFNLElBQUcsS0FBSyxJQUFJLEtBQUssR0FBRyxHQUFFLFFBQVEsR0FBRSxVQUFVLFlBQVksU0FBUyxFQUFFLENBQUMsS0FBSyxLQUFNLE1BQUssSUFBSSxHQUFHLEdBQUcsS0FBSyxJQUFJLEtBQUssR0FBRyxHQUFFLFFBQVEsR0FBRSxVQUFVLE9BQU8sRUFBRSxHQUFFLEdBQUcsR0FBRSxBQUFZLE1BQU8sVUFBbkIsV0FBMkIsUUFBUSxVQUFVLEtBQUssS0FBSyxRQUFRLFdBQVcsV0FBVyxHQUFFLElBQUksRUFBRSxHQUFFLEVDQXJvVCxHQUFJLElBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLE9BQVEsR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFJLEdBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxBQUFJLElBQUosRUFBTSxFQUFFLEdBQUcsRUFBRSxBQUFJLElBQUosRUFBTSxFQUFFLEdBQUcsT0FBTyxPQUFPLEVBQUUsSUFBSSxHQUFHLEdBQUcsQUFBSSxJQUFKLEVBQU8sR0FBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsQUFBSSxJQUFKLEVBQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFHLEdBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUcsR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxNQUFPLElBQUcsR0FBRSxHQUFJLEtBQW1CLFlBQVMsRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFFLElBQUksTUFBTSxNQUFPLElBQUksR0FBRSxHQUFJLEtBQUksR0FBRSxJQUFJLEtBQUssSUFBSyxHQUFFLEdBQUUsS0FBSyxFQUFFLElBQUksSUFBSyxHQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLE9BQVEsR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsQUFBSSxJQUFKLEdBQVEsSUFBSSxHQUFFLEVBQUUsUUFBUSx1QkFBdUIsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsQUFBSSxJQUFKLEdBQVEsSUFBRyxHQUFJLEdBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQUFBSSxJQUFKLEdBQU8sQUFBUSxJQUFSLE9BQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsQUFBSSxJQUFKLEdBQU8sR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFLLEtBQUcsQ0FBQyxHQUFHLEFBQUksSUFBSixJQUFTLEdBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLENBQUksSUFBSixHQUFPLElBQUksRUFBRSxJQUFJLE9BQVEsR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEFBQUksSUFBSixFQUFNLEFBQU0sSUFBTixJQUFTLEtBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxBQUFJLElBQUosRUFBTSxBQUFPLElBQVAsTUFBVSxBQUFNLElBQU4sSUFBUyxHQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxBQUFNLElBQU4sS0FBUyxBQUFNLElBQU4sSUFBUSxFQUFFLEVBQUUsQUFBTSxJQUFOLElBQVMsS0FBSSxFQUFFLEdBQUcsR0FBSSxDQUFNLElBQU4sSUFBUyxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxBQUFNLElBQU4sS0FBVSxHQUFFLEdBQUcsQUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFiLEtBQWtCLEtBQUksQUFBSSxJQUFKLEdBQVEsR0FBRSxFQUFFLElBQUksRUFBRSxFQUFHLEdBQUUsRUFBRSxJQUFJLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEFBQU0sSUFBTixLQUFTLEFBQU8sSUFBUCxLQUFVLEFBQU8sSUFBUDtBQUFBLEdBQVUsQUFBTyxJQUFQLEtBQVUsS0FBSSxFQUFFLEdBQUcsR0FBRyxHQUFHLEFBQUksSUFBSixHQUFPLEFBQVEsSUFBUixPQUFZLEdBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxNQUFPLEtBQUksR0FBRyxJQUFJLEdBQUcsVUFBVSxLQUFLLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0NHNXFDLEdBQU0sR0FBTyxHQUFJLEtBQUssR0NIN0IsR0FBTSxJQUFNLG1FQUVSLEdBQVMsR0FDQSxHQUFVLElBQU0sR0FBSSxTQUFRLE1BQU8sRUFBUyxJQUFXLENBRWxFLEdBQUksU0FBUyxjQUFjLGVBQWUsUUFBVSxDQUNsRCxBQUFLLElBQ0gsS0FBTSxNQUVSLElBQ0EsT0FHRixHQUFNLEdBQVMsU0FBUyxjQUFjLFVBQ3RDLEVBQU8saUJBQWlCLE9BQVEsU0FBWSxDQUMxQyxLQUFNLE1BQ04sR0FBUyxHQUNULE1BRUYsRUFBTyxpQkFBaUIsUUFBUyxHQUFLLEVBQU8sSUFDN0MsRUFBTyxJQUFNLEdBQ2IsU0FBUyxLQUFLLFlBQVksS0FJdEIsR0FBTyxJQUFNLEdBQUksU0FBUSxHQUFXLENBQ3hDLEdBQU0sR0FBUSxZQUFZLElBQU0sQ0FDOUIsQUFBSSxDQUFDLE9BQU8sT0FDWixlQUFjLEdBQ2QsTUFDQyxPQzlCaUMsR0FBSSxJQUFFLEVBQUUsR0FBRSxHQUFFLEVBQUUsR0FBRSxHQUFHLEdBQUUsRUFBRSxJQUFJLEdBQUUsRUFBRSxJQUFJLEdBQUUsRUFBRSxPQUFPLEdBQUUsRUFBRSxJQUFJLEdBQUUsRUFBRSxRQUFRLFlBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBRyxHQUFHLEdBQUUsRUFBRSxHQUFJLEdBQUUsRUFBRSxLQUFNLEdBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssTUFBTyxJQUFHLEVBQUUsR0FBRyxRQUFRLEVBQUUsR0FBRyxLQUFLLElBQUksRUFBRSxHQUFHLEdBQUcsV0FBVyxFQUFFLENBQUMsTUFBTyxJQUFFLEVBQUUsR0FBRSxHQUFFLEdBQUcsWUFBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFFLEtBQUksR0FBRyxNQUFPLEdBQUUsRUFBRSxFQUFFLEVBQUUsS0FBTSxHQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxHQUFFLE9BQU8sR0FBRyxTQUFTLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBSSxHQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxTQUFTLE9BQU8sRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLFdBQVcsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEdBQUUsS0FBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUUsRUFBRSxJQUFJLElBQUssR0FBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxJQUFzRixXQUFXLEVBQUUsQ0FBQyxNQUFPLElBQUUsRUFBRSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLElBQThHLFdBQVcsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEdBQUUsS0FBSSxHQUFHLE1BQU8sSUFBRSxFQUFFLElBQUksSUFBSyxHQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsV0FBVyxFQUFFLEVBQUUsQ0FBQyxNQUFPLElBQUUsRUFBRSxFQUFFLFVBQVUsQ0FBQyxNQUFPLElBQUcsR0FBbVYsYUFBWSxDQUFDLEdBQUUsUUFBUSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLElBQUksUUFBUSxJQUFHLEVBQUUsSUFBSSxJQUFJLFFBQVEsSUFBRyxFQUFFLElBQUksSUFBSSxTQUFTLEVBQU4sQ0FBUyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsUUFBUSxHQUFFLEdBQUcsRUFBRSxJQUFJLFNBQVMsRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFHLEdBQUUsSUFBSSxFQUFFLElBQUksU0FBUyxFQUFFLENBQUMsSUFBRyxHQUFFLEdBQUcsR0FBRSxFQUFFLEdBQUksR0FBRyxHQUFFLEVBQUUsS0FBSyxJ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SUFBSSxDQUFDLEdBQUksR0FBRSxVQUFVLEdBQUcsT0FBUSxLQUFLLEdBQUUsT0FBTyxVQUFVLGVBQWUsS0FBSyxFQUFFLElBQUssR0FBRSxHQUFHLEVBQUUsSUFBSSxNQUFPLEtBQUksTUFBTSxLQUFLLFdBQVcsWUFBVyxFQUFFLENBQUMsS0FBSyxnQkFBZ0IsVUFBVSxDQUFDLE1BQU8sR0FBRSxTQUFTLEdBQUksR0FBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUcsQUFBTSxHQUFOLEtBQVEsTUFBTSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxLQUFLLEdBQUksR0FBRSxHQUFHLEVBQUUsSUFBSSxNQUFPLElBQUcsRUFBRSxDQUFDLFVBQVUsYUFBYSxNQUFPLElBQUUsRUFBRSxHQUFHLGFBQVksQ0FBQyxHQUFJLEdBQUUsR0FBSSxhQUFZLFVBQVUsQ0FBQyxPQUFPLEdBQUcsUUFBUSxHQUFHLFdBQVcsS0FBSyxLQUFLLGNBQWMsR0FBRyxLQUFLLE1BQU0sRUFBRSxHQUFFLEdBQUUsR0FBRyxLQUFLLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxVQUFVLFdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxBQUFJLEVBQUUsV0FBTixFQUFlLE1BQU8sR0FBRSxLQUFLLEdBQUcsQUFBSSxFQUFFLFdBQU4sRUFBZSxNQUFPLE1BQUssR0FBSSxHQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsV0FBVyxJQUFJLEVBQUUsRUFBRSxPQUFPLEtBQUssQUFBUyxFQUFFLEdBQUcsT0FBZCxRQUFxQixHQUFFLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxJQUFJLEVBQUUsRUFBRSxPQUFPLEtBQUssQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUksR0FBRSxFQUFFLEVBQUUsR0FBRSxLQUFLLEdBQUcsRUFBRSxNQUFPLEdBQUUsR0FBRyxFQUFFLFNBQVMsY0FBYyxFQUFFLElBQUksS0FBSyxLQUFLLGlCQUFrQixNQUFLLGFBQWEsV0FBVyxHQUFFLEdBQUcsS0FBSyxNQUFNLEtBQUssT0FBTyxZQUFXLEVBQUUsQ0FBQyxNQUFPLEdBQUUsUUFBUSxTQUFTLFNBQVMsRUFBRSxFQUFFLENBQUMsTUFBTyxHQUFFLEVBQUUsY0FBYyxLQUFLLFlBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssTUFBTSxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsR0FBRyxFQUFRLEdBQUUsT0FBUyxFQUFFLEdBQUUsSUFBSSxFQUFFLEtBQUssTUFBTSxHQUFFLEtBQUssTUFBTSxHQUFHLEVBQUUsS0FBSyxNQUFNLEtBQUssUUFBUSxhQUFZLENBQUMsRUFBRSxLQUFLLE1BQU0sS0FBSyxLQUFLLE9BQU8sWUFBVyxFQUFFLEVBQUUsQ0FBQyxHQUFJLEdBQUUsS0FBSyxNQUFPLEdBQUUsT0FBTyxHQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksU0FBUyxFQUFFLENBQUMsRUFBRyxHQUFFLElBQUksRUFBRSxFQUFFLFdBQVksR0FBRSxVQUFVLFNBQVMsRUFBRSxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxRQUFRLEdBQUcsRUFBRSxpQkFBaUIsVUFBVSxFQUFFLGFBQWEsRUFBRSxJQUFJLG9CQUFvQixVQUFVLEVBQUUsZUFBOEIsWUFBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUksR0FBRSxRQUFRLFVBQVUsWUFBWSxHQUFHLEdBQUcsTUFBTyxHQUFFLGVBQWUsRUFBRSxFQUFFLE1BQU0sR0FBRyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsS0FBSyxTQUFTLEVBQUUsRUFBRSxNQUFPLEdBQUUsVUFBVSxPQUFPLE9BQU8sWUFBWSxZQUFZLFlBQVksRUFBRSxFQUFFLFVBQVUsa0JBQWtCLEdBQUUsRUFBRSxVQUFVLHlCQUF5QixHQUFFLEVBQUUsVUFBVSxxQkFBcUIsR0FBRSxFQUFFLEdBQUcsRUFBRSxvQkFBb0IsT0FBTyxLQUFLLEVBQUUsV0FBVyxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsRUFBRSxRQUFRLFNBQVMsRUFBRSxDQUFDLE9BQU8sZUFBZSxFQUFFLFVBQVUsRUFBRSxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU8sTUFBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFDLEtBQUssTUFBTSxLQUFLLHlCQUF5QixFQUFFLEtBQUssR0FBSSxNQUFLLFFBQVMsTUFBSyxPQUFPLElBQUksS0FBSyxPQUFPLEdBQUcsRUFBRSxLQUFLLHFCQUFxQixHQUFJLEdBQUUsTUFBTyxHQUFFLEFBQU0sR0FBTixNQUFTLEFBQVcsSUFBWCxVQUFjLEFBQVksSUFBWixXQUFlLEFBQVcsSUFBWCxVQUFjLEtBQUssYUFBYSxFQUFFLFFBQVEsZUFBZSxPQUFPLEdBQUcsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLEtBQUssR0NJcjhFLEdBQU0sSUFBZSxDQUFDLENBQUMsV0FBVyxDQUNoQyxHQUFNLEdBQU0sRUFBTyxNQUNiLENBQUMsV0FBVSxXQUFVLFdBQVUsWUFBWSxFQUdqRCxTQUFVLElBQU0sQ0FDZCxHQUFNLEdBQUssRUFBSSxRQUNULEVBQWEsR0FBSSxnQkFBZ0IsZ0JBQWdCLE9BQ3ZELEdBQUksQ0FBQyxFQUFZLE9BRWpCLEdBQU0sR0FBTyxFQUFHLHdCQUNWLEVBQU8sRUFBVyx3QkFDeEIsR0FBSSxFQUFLLElBQU0sRUFBSyxJQUFLLENBQ3ZCLEVBQUcsV0FBYSxFQUFLLElBQU0sRUFBSyxJQUNoQyxPQUVGLEdBQUksRUFBSyxPQUFTLEVBQUssT0FBUSxDQUM3QixFQUFHLFdBQWEsRUFBSyxPQUFTLEVBQUssT0FDbkMsT0FHRixHQUFNLENBQUMsTUFBSyxVQUFVLEVBQVcsd0JBQ2pDLEdBQUksRUFBTSxFQUFJLENBQ1osRUFBVyxpQkFDWCxPQUVGLEdBQUksRUFBUyxPQUFPLFlBQWEsQ0FDL0IsRUFBVyxlQUFlLElBQzFCLFNBRUQsQ0FBQyxJQUVHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGVBa0VNLGtCQUFvQixFQUFTLGdCQUFnQixFQUFTO0FBQUEsUUFDNUQsT0FBTSxRQUFRLEdBQVksRUFBVyxFQUFXLENBQUMsR0FBWSxJQUFJLElBQUksR0FBVyx3QkFBMkI7QUFBQSxRQUM1RyxFQUFTLElBQ1QsR0FBUztBQUFBLHFCQUNJLEVBQU07QUFBQSx3QkFDSCxFQUFNO0FBQUEscUJBQ1QsRUFBTSxNQUFRLEdBQVk7QUFBQTtBQUFBLGNBRWpDO0FBQUE7QUFBQTtBQUFBLFlBT1IsR0FBTSw2QkFDWixHQUFTLEdBQWMsR0FBSyxDQUFDLFNBQVUsQ0FBQyxPQUFRLEtBQ2hELEdBQU0sSUFBZSxHQUFTLEtBQVEsYUFBYyxRQ3JIN0MsWUFBbUIsQ0FDeEIsT0FDQSxTQUNBLG1CQUNDLENBQ0QsR0FBTSxDQUFDLEVBQU8sR0FBWSxFQUFTLEdBQzdCLEVBQU8sRUFBUSxJQUFNLEVBQUssR0FBUyxHQUFrQixDQUFDLEVBQU8sRUFBTSxJQUduRSxFQUFhLEVBQ2pCLElBQU0sRUFBUyxHQUFZLEtBQVUsR0FBSyxFQUFJLEVBQUssUUFBVSxFQUFLLFFBQ3BFLENBQUMsSUFFSyxFQUFhLEVBQ2pCLElBQU0sRUFBUyxHQUFZLEtBQVUsSUFBTSxHQUFLLEVBQUssUUFDdkQsQ0FBQyxJQUVLLEVBQU8sRUFBWSxJQUFNLENBQzdCLEVBQVMsUUFDVCxPQUNDLElBRUgsTUFBTyxDQUNMLE9BQ0EsT0FBUSxFQUNSLGFBQ0EsYUFDQSxRQzdCSixHQUFNLElBQVUsV0FDVixHQUFVLE1BQ1YsR0FBWSxDQUFDLEdBQVMsRUFBRyxFQUFHLEdBQzVCLEdBQVUsR0FBTSxHQUFLLElBQVUsR0FBSyxHQUNwQyxHQUFVLEdBQU0sR0FBSyxJQUFVLEdBQUssSUFDcEMsR0FBVSxHQUFLLEdBQVEsR0FBTSxFQUFJLEdBQVEsRUFDekMsR0FBVSxHQUFLLEdBQVEsR0FBTSxFQUFJLEdBQVEsRUFDekMsR0FBUyxHQUFPLEVBQUksTUFBTSxJQUFJLElBQUksR0FBSyxFQUFFLFdBQVcsSUFFbkQsWUFBaUIsRUFBUSxDQUM5QixHQUFNLEdBQVcsQ0FBQyxHQUFHLE1BQU0sS0FBVSxJQUFJLEdBQUssR0FDMUMsRUFBVSxFQUdWLEVBQU8sR0FDWCxPQUFTLEtBQUssSUFBTyxHQUNuQixBQUFJLElBQU0sR0FDUixHQUFXLEVBRVgsR0FBUyxJQUFNLEVBQ2YsRUFBUyxHQUFRLEtBQU8sRUFDeEIsRUFBUyxHQUFRLEtBQU8sRUFDeEIsS0FBVSxHQUdkLEdBQU0sR0FBWSxFQUVsQixXQUFtQixFQUFNLEdBQVcsRUFBTSxHQUFJLENBQzVDLEdBQUksR0FBSyxFQUFNLEdBQ1gsRUFBSyxFQUFNLEdBQ1gsRUFBSyxFQUFNLEdBQ1gsRUFBSyxFQUFNLEdBQ2YsT0FBUyxLQUFLLElBQU8sR0FDbkIsRUFBTyxFQUFTLEdBQ2hCLEVBQU0sRUFBSyxFQUFhLEdBQUssS0FBVSxFQUFNLElBQU8sRUFBSyxFQUN6RCxFQUFNLEVBQUssRUFBYSxHQUFLLEtBQVUsRUFBTSxJQUFPLEVBQUssRUFDekQsRUFBTSxFQUFLLEVBQWEsR0FBSyxLQUFVLEVBQU0sSUFBTyxFQUFLLEVBQ3pELEVBQU0sRUFBSyxFQUFhLEdBQUssS0FBVSxFQUN2QyxHQUFPLElBQU8sRUFDZCxHQUFPLElBQU8sRUFDZCxHQUFPLElBQU8sRUFFaEIsTUFBTyxDQUFDLEVBQUksRUFBSSxFQUFJLEdBR3RCLFdBQWdCLEVBQUssRUFBUSxFQUFHLENBQzlCLEdBQU0sR0FBUSxFQUFTLEdBQVcsR0FDbEMsTUFBSSxJQUFTLEdBQVUsUUFDckIsR0FBUSxHQUFVLE9BQU8sR0FFbkIsR0FBTSxHQUFTLElBQWUsRUFHeEMsU0FBTSxPQUFTLEVBRVIsRUNwREYsWUFBbUIsQ0FBQyxRQUFPLE9BQU0sVUFBVSxHQUFRLEdBQVEsR0FBSSxDQUNwRSxNQUFPLEdBQVEsSUFBTSxDQUNuQixHQUFJLENBQUMsR0FBUSxJQUFVLEdBQUksTUFBTyxHQUdsQyxHQUFNLEdBQVEsS0FBSyxJQUFJLEtBQUssTUFBTSxFQUFNLE9BQVMsR0FBSSxHQUMvQyxFQUFRLEdBQVEsSUFBSSxNQUUxQixNQUFPLEdBQUssT0FBTyxHQUFRLEVBQU0sRUFBUSxHQUFPLEtBQy9DLENBQUMsRUFBTyxFQUFNLElDTlosR0FBTSxJQUFjLENBQUMsQ0FBQyxLQUFNLEVBQWMsV0FBVSxhQUFhLENBRXRFLEdBQU0sQ0FBQyxFQUFVLEdBQWUsRUFBUyxJQUNuQyxFQUFTLEVBQVksR0FBTyxDQUNoQyxHQUFNLENBQUMsT0FBTSxFQUFHLFNBQVMsR0FBSyxHQUFLLFNBQVMsMEJBQTRCLEdBQ3hFLEVBQVksQ0FBQyxJQUFLLEVBQVEsVUFDekIsSUFFRyxDQUFDLEVBQU8sR0FBWSxFQUFTLElBQzdCLENBQUMsRUFBUyxHQUFjLEVBQVMsSUFDakMsRUFBTyxHQUFVLENBQUMsUUFBTyxLQUFNLEVBQWMsWUFDN0MsQ0FDSixPQUNBLGFBQ0EsYUFDQSxTQUNBLFFBQ0UsR0FBVSxDQUFDLFNBQ2YsRUFBVSxJQUFNLENBQ2QsQUFBSSxDQUFDLEdBQ0wsS0FBVyxHQUNYLEVBQVcsRUFBSyxRQUNmLENBQUMsSUFHSixHQUFNLENBQUMsRUFBTSxHQUFXLEVBQVMsSUFDM0IsRUFBVSxFQUFZLENBQUMsQ0FBQyxPQUFRLENBQUMsWUFBWSxDQUdqRCxBQUZBLEVBQVcsR0FDWCxFQUFRLElBQ0osR0FBTSxPQUFTLEdBQ25CLEtBQ0EsRUFBUyxLQUNSLENBQUMsSUFDRSxFQUFVLElBQU0sRUFBUSxHQUFPLENBQUMsR0FDaEMsRUFBUyxJQUFNLENBQUMsU0FBUyxlQUFpQixFQUFRLElBRWxELEVBQVksRUFBWSxHQUFLLENBQ2pDLEdBQU0sQ0FBQyxNQUFLLFlBQVksRUFDeEIsR0FBSSxJQUFRLFNBQVUsQ0FDcEIsRUFBRSxpQkFDRixFQUFFLGtCQUNGLEVBQVEsSUFDUixPQUVGLEdBQUksSUFBUSxRQUFTLENBQ25CLEVBQUUsaUJBQ0YsRUFBRSxrQkFDRyxHQUNILEVBQU8sR0FFVCxFQUFRLElBQ1IsT0FJRixHQUFJLE1BQVEsT0FBUyxDQUFDLEdBRXRCLElBQUksSUFBUSxXQUFjLElBQVEsT0FBUyxFQUFXLENBQ3BELEVBQUUsaUJBQ0YsRUFBRSxrQkFDRixJQUNBLE9BRUYsR0FBSSxJQUFRLGFBQWdCLElBQVEsT0FBUyxDQUFDLEVBQVcsQ0FDdkQsRUFBRSxpQkFDRixFQUFFLGtCQUNGLElBQ0EsVUFFRCxDQUFDLEVBQVksRUFBWSxFQUFRLElBQzlCLEVBQVUsRUFBWSxHQUFLLENBQy9CLEVBQUUsaUJBQ0YsRUFBRSxrQkFDRixHQUFNLENBQUMsVUFBVSxFQUNqQixHQUFJLEVBQVMsRUFBRyxDQUNkLElBQ0EsT0FFRixHQUFJLEVBQVMsRUFBRyxDQUNkLElBQ0EsU0FFRCxDQUFDLEVBQVksSUFFVixFQUFjLEVBQVksQUFBQyxHQUFVLENBQ3pDLEVBQU8sR0FDUCxFQUFRLEtBQ1AsSUFFSCxNQUFPO0FBQUE7QUFBQSxlQUVNO0FBQUE7QUFBQSxpQkFFRTtBQUFBLG1CQUNFO0FBQUEsa0JBQ0Q7QUFBQSxtQkFDQztBQUFBLHFCQUNFO0FBQUEsbUJBQ0Y7QUFBQTtBQUFBLFFBRVgsR0FBUSxLQUFRLGdCQUEyQjtBQUFBLG9CQUMvQixFQUFLLFNBQVcsR0FBSztBQUFBLG9CQUNyQixHQUFNO0FBQUEsVUFDaEIsRUFBSyxJQUNMLENBQUMsQ0FBQyxNQUFLLFFBQU8sSUFBVTtBQUFBLHNCQUNaLGVBQWlCLElBQU0sRUFBWSxPQUFXO0FBQUE7QUFBQTtZQzdHN0QsV0FBbUIsRUFBVyxDQUFDLFNBQVEsRUFBTyxHQUFJLENBQ3ZELEdBQU0sQ0FBQyxFQUFTLEdBQWMsRUFBUyxJQUNqQyxFQUFXLEVBQVksRUFBVyxHQUV4QyxTQUFVLElBQU0sQ0FDZCxBQUFDLFVBQVksQ0FDWCxHQUFNLEdBQVEsV0FBVyxJQUFNLEVBQVcsSUFBTyxHQUNqRCxLQUFNLEtBQ04sYUFBYSxHQUNiLEVBQVcsU0FFWixDQUFDLEVBQVUsRUFBTyxHQUFHLElBRWpCLENBQUMsV0NiSCxHQUFNLElBQWEsQ0FBQyxDQUFDLGFBQWEscUNBQXdDLE9BQ3BFLEdBQU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7RUNEWixHQUFNLElBQVcsQ0FBQyxDQUFDLFdBQVcsR0FBUztBQUFBLHVCQUN2QjtBQUFBLEVBRVYsR0FBTTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7RUNMWixHQUFNLEdBQU8sR0FBUSxFQUFLLGNBQzlCLFdBQVcsSUFBSyxLQUNoQixRQUFRLGdCQUFpQixHQUFRLG1CQUFtQixJQ1F2RCxHQUFNLElBQU0sQ0FBQyxDQUFDLGVBQWUsQ0FDM0IsR0FBTSxDQUFDLEVBQU0sR0FBVyxFQUFTLElBQzNCLENBQUMsRUFBUyxHQUFjLEVBQVMsU0FBUyxRQUFRLE1BQ2xELENBQUMsRUFBTyxHQUFZLEVBQVMsSUFDN0IsQ0FBQyxFQUFVLEdBQWUsRUFBUyxJQUVuQyxFQUFrQixFQUFRLElBQU0sRUFBVyxFQUFRLEdBQUksQ0FBQyxFQUFVLElBRWxFLENBQUMsRUFBa0IsR0FBdUIsRUFBUyxJQUNuRCxDQUFDLFVBQVMsU0FBUyxHQUFVLENBQUMsVUFBUyxVQUN2QyxDQUFDLFlBQVcsUUFBTyxZQUFZLEdBQWlCLENBQ3BELE1BQU8sRUFDUCxVQUFXLEVBQ1gscUJBR0ksRUFBTyxFQUFRLElBQ25CLEVBQVMsSUFBSSxDQUFDLENBQUMsS0FBSSxPQUFNLGlCQUFrQixFQUFDLElBQUssRUFBTSxLQUFNLEtBQy9ELENBQUMsSUFHRCxFQUFVLElBQU0sR0FBUyxFQUFZLElBQU8sQ0FBQyxJQUc3QyxHQUFNLEdBQWtCLENBQUMsQ0FBQyxTQUFTLEVBQVcsR0FDeEMsRUFBVSxDQUFDLENBQUMsT0FBUSxDQUFDLFlBQVksQ0FDckMsRUFBWSxJQUNaLEVBQVMsSUFJTCxFQUFRLElBQU0sRUFBUSxJQUN0QixFQUFnQixDQUFDLENBQUMsU0FBUyxDQUMvQixBQUFJLElBQVEsVUFDWixLQUVJLEVBQVUsQ0FBQyxDQUFDLFVBQVMsV0FBVSxTQUFRLFdBQVMsWUFBWSxDQUNoRSxBQUFJLEVBQU8sU0FBVyxVQUFZLEdBQVcsR0FBWSxHQUFVLElBQ25FLEtBSUksRUFBVyxJQUFNLENBQ3JCLEVBQVksS0FJZCxTQUFVLElBQU0sU0FBUyxTQUFTLFFBQVEsQ0FDeEMsTUFBTyxrQkFDUCxNQUFPLHFFQUNQLFFBQVMsSUFBTSxFQUFRLE1BQ3JCLElBRUcsR0FBUTtBQUFBLE9BQ1YsZUFBdUI7QUFBQSwrQ0FDaUI7QUFBQTtBQUFBLFdBRXBDO0FBQUEsa0JBQ087QUFBQSxxQkFDRyxDQUFDLENBQUMsTUFBSyxVQUFVLEdBQUcsS0FBTztBQUFBLHNCQUMxQjtBQUFBLG9DQUNjLGVBQW1CO0FBQUEseUNBQ2QsZ0JBQXVCO0FBQUEsWUFDcEQsRUFDQSxHQUFHLEVBQVksaUJBQW1CLFdBQVcsRUFBUyxrQkFDdEQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFLTyxDQUFDO0FBQUEsc0JBQ0UsQ0FBQyxDQUFDLFlBQVksRUFBb0IsRUFBTztBQUFBO0FBQUE7QUFBQSxZQUduRCxFQUFVLGlCQUFpQixPQUFhLEdBQUcsRUFBTTtBQUFBO0FBQUEsV0FFbEQsYUFBbUI7QUFBQTtBQUFBLFFBRXRCLEVBQU0sT0FBUyxHQUFLO0FBQUE7QUFBQSxZQUVoQixFQUFNLElBQUksR0FBUSxhQUFnQixFQUFLO0FBQUEsd0JBQzNCLEVBQUssV0FBVyxFQUFLLEVBQUs7QUFBQSx3QkFDMUIsRUFBSyxVQUFZLFNBQVMsUUFBUSxLQUFPLEdBQUs7QUFBQSxxQkFDakQsRUFBSyxVQUFZLFNBQVMsUUFBUSxLQUFPLFFBQVU7QUFBQSx5QkFDL0M7QUFBQSxnQkFDVCxFQUFLO0FBQUE7QUFBQSxrQkFFSCxFQUFLLE1BQU0sSUFBSSxHQUFRLFVBQWE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsYUFTdEQsWUFBbUIsQ0FBQyxVQUFTLFNBQVEsQ0FDbkMsR0FBTSxDQUFDLEVBQU8sR0FBWSxFQUFTLElBRTdCLEVBQVMsRUFBUSxJQUFNLEVBQVMsTUFBTyxFQUFVLElBQVcsQ0FDaEUsR0FBSSxJQUFXLElBQU0sSUFBYSxHQUFJLENBQ3BDLEVBQVMsSUFDVCxPQUVGLEdBQUksQ0FDRixHQUFNLEdBQU0sS0FBTSxPQUFNLGNBQWMsb0JBQTJCLG1CQUFtQixNQUM5RSxDQUFDLFNBQVMsS0FBTSxHQUFJLE9BQzFCLEVBQVMsRUFBTSxJQUFJLENBQUMsQ0FBQyxRQUFPLFFBQU8sV0FBWSxFQUFDLFFBQVMsRUFBVSxRQUFPLFFBQU8sa0JBQzNFLEVBQU4sQ0FDQSxRQUFRLE1BQU0sR0FDZCxFQUFTLE1BRVYsSUFBSyxDQUFDLFVBQVcsS0FBUyxJQUV2QixDQUFDLFdBQVcsRUFDaEIsU0FBWSxLQUFNLEdBQU8sRUFBUyxHQUNsQyxDQUFDLE1BQU8sTUFDUixDQUFDLEVBQVEsRUFBUyxJQUdwQixNQUFPLENBQUMsVUFBUyxTQUVuQixZQUEwQixDQUFDLFFBQU8sVUFBVyxFQUFZLG9CQUFtQixDQUMxRSxHQUFNLENBQUMsRUFBWSxHQUFpQixFQUFTLElBQ3ZDLEVBQVksRUFBUSxJQUFNLENBQzlCLEdBQU0sR0FBTSxFQUFXLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FDckMsTUFBTyxHQUFXLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFJLEtBQUssR0FBTyxJQUFRLEtBQzNELENBQUMsRUFBWSxJQUNWLENBQUMsRUFBVSxHQUFlLEVBQVMsSUFDbkMsQ0FBQyxFQUFXLEdBQWdCLEVBQVMsSUFDckMsQ0FBQyxFQUFPLEdBQVksRUFBUyxRQUduQyxTQUFVLElBQU8sVUFBWSxDQUUzQixHQUFNLEdBQU0sS0FBTSxPQUFNLGlCQUN4QixHQUFJLENBQUMsRUFBSSxHQUFJLE1BQU8sR0FDcEIsR0FBTSxHQUFPLEtBQU0sR0FBSSxPQUN2QixFQUFjLEVBQUssVUFBVSxNQUMxQixDQUFDLENBQUMsS0FBSSxPQUFNLGlCQUFrQixFQUFDLEtBQUksT0FBTSxrQkFBa0IsUUFDMUQsSUFHTixFQUFVLElBQU8sVUFBWSxDQUl6QixHQUhBLEVBQVMsUUFHTCxJQUFVLEdBQUksQ0FDaEIsRUFBWSxDQUFDLEdBQUcsRUFBWSxHQUFHLElBQy9CLE9BR0YsRUFBYSxJQUNiLEVBQVksSUFDWixHQUFJLENBRUYsQ0FDRSxHQUFNLEdBQU0sS0FBTSxPQUFNLGdDQUFnQyxLQUNsRCxFQUFPLEtBQU0sR0FBSSxPQUN2QixHQUFJLENBQUMsRUFBSSxHQUFJLEtBQU0sT0FBTSxFQUFLLFNBQzlCLEVBQVksRUFBSyxVQUduQixHQUFJLEVBQWtCLENBRXBCLEdBQU0sR0FBVyxLQUFLLE1BQU0sRUFBVSxPQUFTLEtBQU8sRUFDdEQsT0FBUyxHQUFRLEVBQUcsRUFBUSxFQUFVLElBQVMsQ0FDN0MsR0FBTSxHQUFTLEdBQUksaUJBQ25CLEVBQU8sT0FBTyxJQUFLLEdBQ25CLEVBQVUsTUFBTSxFQUFRLElBQUssSUFBTSxFQUFRLEtBQ3hDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsRUFBTyxPQUFPLE1BQU8sSUFDMUMsR0FBTSxHQUFNLEtBQU0sT0FBTSxtQ0FBbUMsRUFBTyxjQUM1RCxFQUFPLEtBQU0sR0FBSSxPQUN2QixHQUFJLENBQUMsRUFBSSxHQUFJLEtBQU0sT0FBTSxFQUFLLFNBQzlCLEVBQVksR0FBVSxDQUFDLEdBQUcsRUFBUSxHQUFHLEVBQUssbUJBR3hDLEVBQU4sQ0FDQSxFQUFTLEVBQUUsbUJBQ1gsQ0FDQSxFQUFhLFNBR2pCLENBQUMsRUFBTyxFQUFXLEVBQVksSUFHMUIsQ0FBQyxZQUFXLFFBQU8sWUFFNUIsR0FBTSxJQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUE4RlY7QUFBQSxFQUNBO0FBQUEsRUFHSyxZQUFlLEVBQVcsQ0FDL0IsR0FBTSxHQUFNLFNBQVMsY0FBYyxPQUNuQyxFQUFJLFFBQVEsZUFBaUIsbUNBQzdCLEVBQUksYUFBYSxDQUFDLEtBQU0sU0FDeEIsU0FBUyxLQUFLLE9BQU8sR0FDckIsRUFBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVNEO0FBQUE7QUFBQSxPQUVELGlCQUFrQjtBQUFBLElBQ3BCLEVBQUksWUN6VFQsa0JBQXFDLEVBQVksQ0FBQyxnQkFBZ0IsSUFBUSxHQUFJLENBQzVFLEdBQU0sR0FBVyxLQUFLLE1BQU0sRUFBVyxPQUFTLEtBQU8sRUFTakQsRUFBVyxBQVJGLE1BQU0sU0FBUSxJQUFJLENBQUMsR0FBRyxNQUFNLEdBQVUsUUFDbEQsSUFBSSxLQUFNLElBQVMsQ0FDbEIsR0FBTSxHQUFTLEdBQUksaUJBQ25CLEVBQVcsTUFBTSxFQUFRLElBQUssSUFBTSxFQUFRLEtBQUssUUFBUSxHQUFNLEVBQU8sT0FBTyxNQUFPLElBQ3BGLEdBQU0sR0FBTSxLQUFNLE9BQU0saUJBQWlCLEVBQU8sY0FDMUMsQ0FBQyxZQUFZLEtBQU0sR0FBSSxPQUM3QixNQUFPLE9BRWEsT0FFeEIsTUFBSSxHQUdLLEFBREssQ0FBQyxHQUFHLEdBQUksS0FBSSxFQUFTLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FDcEMsSUFBSSxHQUFNLEVBQVMsS0FBSyxHQUFXLEVBQVEsS0FBTyxJQUd0RCxDQUFDLEdBQUcsR0FBSSxLQUFJLEVBQVMsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUN2QyxPQUFPLEdBQU0sRUFBVyxLQUFLLEdBQU8sSUFBUSxJQUM1QyxJQUFJLEdBQU0sRUFBUyxLQUFLLEdBQVcsRUFBUSxLQUFPLElDakJ6RCxBQUFDLFVBQVksQ0FFWCxHQUFNLEdBQWUsT0FBTyxLQUFLLEtBQUssTUFBTSxhQUFhLFFBQVEsMEJBQzNELEVBQVksQ0FBQyxHQUFHLEtBQU0sSUFBZSxJQUN4QyxJQUFJLENBQUMsQ0FBQyxLQUFJLE9BQU0saUJBQWtCLEVBQUMsS0FBSSxPQUFNLGlCQUM3QyxLQUFLLENBQUMsRUFBRyxJQUFNLEVBQUUsWUFBWSxjQUFjLEVBQUUsY0FDaEQsR0FBTSxPQ1RELFlBQWlCLEVBQVMsQ0FFL0IsR0FBTSxHQUFVLEVBQVEsUUFDdEIsQ0FBQyxDQUFDLFVBQVMsVUFBUyxZQUFZLEVBQVEsUUFBUSxHQUFVLENBQ3hELEdBQU0sR0FBYSxHQUFlLEVBQVEsRUFBUSxHQUNsRCxNQUFPLEdBQWEsQ0FBQyxHQUFjLE1BSWpDLEVBQVEsQ0FBQyxHQUFHLEdBQUksS0FBSSxFQUFRLElBQUksQ0FBQyxDQUFDLGFBQWEsU0FBUyxNQUFZLE9Bd0MxRSxNQUFPLENBQUMsUUF0Q00sRUFBUSxPQUFPLENBQUMsRUFBTyxJQUFXLENBQzlDLEdBQUksRUFBTyxPQUFTLFNBQVUsQ0FDNUIsR0FBTSxHQUFZLEdBQ2xCLEVBQVUsRUFBTyxTQUFXLENBQUMsS0FBTSxFQUFPLEtBQU0sT0FBUSxFQUFPLFFBQy9ELEdBQU0sR0FBTyxDQUNYLEdBQUksRUFBTyxHQUNYLGFBRUYsR0FBSSxFQUFPLFdBQWEsT0FBUSxNQUFPLENBQUMsR0FBRyxFQUFPLEdBR2xELEdBQU0sR0FBUSxFQUFNLFVBQVUsQ0FBQyxDQUFDLFFBQVEsSUFBTyxFQUFPLFVBRXRELE1BQUksR0FBUSxFQUNWLFNBQVEsS0FBSyxvR0FBcUcsR0FDM0csQ0FBQyxHQUFHLEVBQU8sSUFFYixDQUFDLEdBQUcsRUFBTSxNQUFNLEVBQUcsR0FBUSxFQUFNLEdBQUcsRUFBTSxNQUFNLElBSXpELEdBQU0sR0FBUSxFQUFNLFVBQVUsQ0FBQyxDQUFDLFFBQVEsSUFBTyxFQUFPLElBQ3RELE1BQUksR0FBUSxFQUNWLFNBQVEsS0FBSyx5RkFBMEYsR0FDaEcsR0FHTCxFQUFPLE9BQVMsU0FDbEIsR0FBTSxHQUFPLFVBQVUsRUFBTyxTQUFXLENBQUMsS0FBTSxFQUFPLEtBQU0sT0FBUSxFQUFPLFFBQ3JFLEdBRUwsR0FBTyxPQUFTLFVBQ2xCLEdBQU0sR0FBTyxVQUFVLEVBQU8sU0FBVyxDQUFDLEtBQU0sS0FBTSxPQUFRLEVBQU8sU0FDOUQsSUFHUixJQUVxQixTQUcxQixZQUF3QixFQUFRLEVBQVEsRUFBUyxDQUMvQyxHQUFNLEdBQWEsQ0FBQyxTQUFRLFdBQzVCLEdBQUksRUFBTyxRQUFTLE1BQU8sQ0FDekIsS0FBTSxTQUNOLEdBQUksRUFBTyxNQUFNLEdBQ2pCLFNBQVUsRUFBTyxRQUNqQixLQUFNLEVBQU8sTUFBTSxRQUNoQixHQUVMLEdBQUksRUFBTyxRQUFTLE1BQU8sQ0FDekIsS0FBTSxTQUNOLEdBQUksRUFBTyxRQUNYLEtBQU0sRUFBTyxNQUFNLFFBQ2hCLEdBRUwsR0FBSSxFQUFPLFFBQVMsTUFBTyxDQUN6QixLQUFNLFNBQ04sR0FBSSxFQUFPLFdBQ1IsR0NqRVAsR0FBTSxJQUFNLElBQU0sQ0FDaEIsR0FBTSxDQUFDLEVBQU0sR0FBVyxFQUFTLElBQzNCLENBQUMsRUFBSyxHQUFVLEVBQVMsR0FDekIsQ0FBQyxFQUFPLEdBQVksRUFBUyxHQUM3QixDQUFDLEVBQU8sR0FBWSxFQUFTLElBQzdCLENBQUMsRUFBVSxHQUFlLEVBQVMsSUFBTSxJQUFNLElBRS9DLENBQUMsV0FBVyxFQUFVLFNBQVksQ0FDdEMsR0FBSSxDQUFDLEVBQU0sT0FDWCxHQUFNLENBQUMsUUFBTyxlQUFlLEtBQU0sTUFDbkMsRUFBUyxHQUFPLEtBQUssVUFBVSxLQUFTLEtBQUssVUFBVSxHQUFTLEVBQU0sR0FDdEUsRUFBWSxJQUFNLElBQ2pCLENBQUMsTUFBTyxLQUFPLENBQUMsSUFHbkIsRUFBVSxJQUFNLENBQ2QsRUFBTyxFQUFNLE9BQVMsR0FDdEIsRUFBUyxFQUFNLE9BQVMsSUFDdkIsQ0FBQyxJQUVKLEVBQVUsSUFBTSxDQUNkLFNBQVMsU0FBUyxRQUFRLENBQ3hCLE1BQU8sVUFDUCxNQUFPLG1HQUNQLFFBQVMsSUFBTSxFQUFRLE9BRXhCLElBRUgsR0FBTSxHQUFRLElBQU0sRUFBUSxJQUN0QixFQUFpQixDQUFDLENBQUMsT0FBUSxDQUFDLFlBQVksRUFBUyxTQUFTLElBRWhFLE1BQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUE2Q0gsR0FBUTtBQUFBLHlDQUMyQjtBQUFBO0FBQUE7QUFBQSxxQ0FHSiw4QkFBZ0M7QUFBQSxxQkFDaEQsR0FBSSxNQUFLLEVBQU0sR0FBUztBQUFBLHVCQUN0QjtBQUFBLGtEQUMyQjtBQUFBO0FBQUE7QUFBQSxVQUd4QyxHQUFXO0FBQUEsZUFDTixFQUFTLEVBQU07QUFBQTtBQUFBO0FBQUEsS0FLeEIsR0FBTSxTQUFTLGNBQWMsT0FDbkMsR0FBSSxRQUFRLGVBQWdCLGlCQUM1QixHQUFJLGFBQWEsQ0FBQyxLQUFNLFNBQ3hCLFNBQVMsS0FBSyxPQUFPLElBQ3JCLEVBQU8sS0FBUSxRQUFVLEdBQUksWUFFN0IsbUJBQWdDLENBQzlCLEdBQU0sQ0FBQyxFQUFlLEdBQWUsS0FBTSxTQUFRLElBQUksQ0FBQyxLQUFxQixPQUN2RSxFQUFjLEdBRWIsRUFBYyxNQUFNLFNBQVMsR0FLM0IsRUFBYyxRQUFRLFFBQVEsQ0FBQyxDQUFDLEtBQUksZUFBZSxDQUV4RCxHQUFNLEdBQVEsT0FBTyxLQUFLLEdBQVcsSUFBSSxHQUFPLFNBQVMsSUFDbkQsRUFBTSxFQUFNLFNBQVMsR0FBUSxFQUFPLEVBQU0sT0FBTyxHQUFPLEdBQU8sR0FBTSxNQUUzRSxHQUFJLElBQVEsT0FBVyxNQUFPLEdBQzlCLEdBQU0sR0FBTyxFQUFVLEdBQ3ZCLE1BQU8sR0FBSyxPQUFTLEtBQU8sQ0FBQyxFQUFLLE1BQVEsS0FDekMsS0FBSztBQUFBLEdBWkQsRUFBWSxNQUFNLFNBQVMsR0FDekIsRUFBWSxNQUFNLEdBQU0sSUFBSSxHQUFRLEVBQUssTUFBTSxLQUFLO0FBQUEsR0FEYixHQWNsRCxNQUFPLENBQ0wsTUFBTyxDQUFDLEdBQUcsRUFBWSxNQUFPLEdBQUcsRUFBYyxPQUMvQyxlQUlKLG1CQUFrQyxDQUNoQyxHQUFNLEdBQU0sS0FBTSxPQUFNLHVCQUF1QixTQUFTLFFBQVEsUUFBUSxTQUFTLEtBQUssTUFDaEYsQ0FBQyxhQUFhLEtBQU0sR0FBSSxPQUN4QixFQUFRLE9BQU8sWUFBWSxFQUFVLElBQUksQ0FBQyxDQUFDLFFBQU8sYUFBYSxDQUFDLEVBQVMsS0FFL0UsTUFBTyxDQUFDLE1BRE8sT0FBTyxLQUFLLEdBQU8sSUFBSSxHQUFXLFNBQVMsSUFBVSxPQUNyRCxTQUVqQixtQkFBbUMsQ0FDakMsR0FBTSxHQUFNLEtBQU0sT0FBTSxnQkFBZ0IsU0FBUyxRQUFRLFFBQVEsU0FBUyxLQUFLLE1BQ3pFLENBQUMsV0FBVyxLQUFNLEdBQUksT0FDNUIsTUFBTyxJQUFRLEdDdklqQiw0REFHTyxHQUFNLElBQVUsQ0FBQyxDQUFDLFFBQU8sVUFBUyxVQUFTLGNBQWMsQ0FDOUQsR0FBTSxHQUFTLEVBQVEsSUFBTSxDQUN6QixHQUFNLEdBQU8sRUFBTSxJQUFJLEdBQVEsTUFBTyxJQUFTLFNBQVcsRUFBTyxFQUFLLE1BQU0sS0FBSztBQUFBLEdBQ2pGLE1BQU8sSUFBTSxFQUFNLENBQUMsU0FBVSxNQUVoQyxDQUFDLElBRUcsRUFBVSxFQUNkLElBQU0sRUFBTSxRQUFRLEdBQVEsTUFBTyxJQUFTLFNBQVcsR0FBSyxDQUFDLEVBQUssS0FDbEUsQ0FBQyxJQUdDLEVBQVUsRUFDZCxNQUFPLEtBQU8sRUFBTyxRQUFRLEdBQVMsQ0FDbEMsT0FBUSxFQUFNLFVBQ1AsUUFDSCxNQUFPLE9BQ0osWUFBYSxDQUNoQixHQUFNLEdBQVEsRUFDZCxVQUFXLEVBQU0sUUFBUSxNQUFNO0FBQUEsR0FBTSxPQUFTLEVBQ3ZDLENBQUMsS0FBUTtBQUFBLG1CQUNQLEVBQVE7QUFBQSxxQkFDTjtBQUFBLHVCQUNFLGVBQXFCO0FBQUEsd0JBQ3BCO0FBQUEsbUJBQ0wsRUFBUSxNQUFNLEVBQU8sY0FFM0IsUUFBUyxDQUNaLEdBQU0sR0FBUSxFQUNkLFVBQVcsRUFBTSxNQUFNLE9BQVMsRUFDekIsQ0FBQyxLQUFRO0FBQUEsbUJBQ1AsRUFBUTtBQUFBLHFCQUNOO0FBQUEsdUJBQ0UsZUFBcUI7QUFBQSx3QkFDcEI7QUFBQSxtQkFDTCxFQUFRLE1BQU0sRUFBTyxjQUUzQixPQUNILFdBQ08sQ0FBQyxLQUFRO0FBQUEsbUJBQ1AsRUFBUSxFQUFVO0FBQUEscUJBQ2hCLEVBQVEsRUFBVTtBQUFBLHNCQUNqQixFQUFNO0FBQUEsd0JBQ0o7QUFBQSxnQkFDUixFQUFNLE1BQU0sT0FBUyxFQUFJLEVBQU0sTUFBTSxJQUFJLEdBQVEsS0FBUSxZQUFjLGVBQWtCLFNBQWlCO0FBQUEseUJBTXBILEdBQU8sQ0FBQyxDQUFDLFFBQU8sU0FBUSxXQUFVLGNBQ3RDO0FBQUEsZ0JBQ2M7QUFBQSxtQkFDRztBQUFBLDBCQUNPLEVBQVcsR0FBSyxHQUFHLEVBQU07QUFBQSxLQUM5QyxVQUVDLEdBQVksQ0FBQyxDQUFDLE1BQU8sQ0FBQyxXQUFVLFVBQVMsVUFBUyxVQUFTLFVBQVMsU0FBUyxDQUNqRixHQUFNLENBQUMsRUFBYSxHQUFrQixFQUFTLEtBQ3pDLEVBQWMsRUFBWSxJQUFNLENBQ3BDLFVBQVUsVUFBVSxVQUFVLEdBQzlCLEVBQWUsVUFDZixXQUFXLElBQU0sRUFBZSxLQUFXLE1BQzFDLENBQUMsSUFFSixNQUFPO0FBQUEsT0FDRixhQUFlLEVBQUksZUFBZTtBQUFBO0FBQUE7QUFBQSxZQUc3QixFQUFTLFNBQVMsS0FDbEIsdUJBQTBCLEtBQVcsS0FBVyxzQkFBNkIsUUFDN0U7QUFBQTtBQUFBLG1EQUV1QyxNQUFnQjtBQUFBO0FBQUE7QUFBQSxNQUc3RCxFQUFRLE1BQU07QUFBQSxHQUFNLElBQUksQ0FBQyxFQUFNLElBQVUsS0FBUSxhQUFlLEVBQUksRUFBUSxlQUFlO0FBQUE7QUFBQSxVQUV2RjtBQUFBO0FBQUE7QUFBQSxLQUtKLEdBQVEsQ0FBQyxDQUFDLE1BQU8sQ0FBQyxXQUFVLFFBQU8sVUFBUyxVQUFTLFVBQVMsU0FDbEU7QUFBQSxPQUNLLGFBQWUsRUFBSSxlQUFlO0FBQUE7QUFBQTtBQUFBLGdDQUdULEtBQVcsS0FBVywwQkFBaUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUlqRixFQUFNLElBQUksQ0FBQyxFQUFNLElBQU07QUFBQSxTQUNwQixhQUFlLEVBQUksRUFBSSxlQUFlO0FBQUE7QUFBQSxZQUVuQyxFQUFLLElBQUksQ0FBQyxFQUFLLElBQVUsMEJBQTZCO0FBQUEsY0FDcEQsRUFBSSxJQUFJLE1BQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTXhCLEdBQU8sQ0FBQyxDQUFDLE9BQU0sYUFBYSxDQUNoQyxPQUFPLEVBQUssVUFDTCxPQUNILE1BQU8sTUFBUSxZQUFjLFlBQzFCLFVBQ0gsTUFBTyxNQUFRLFlBQWlCLFlBQzdCLGVBQ0gsTUFBTyxNQUFRLFlBQXFCLFlBQ2pDLFdBQ0gsTUFBTyxNQUFRLFlBQWtCLFlBQzlCLFFBQ0gsTUFBTyxNQUFRLFlBQWUsZUFBa0IsWUFDN0MsU0FDSCxNQUFPLE1BQVEsWUFBZ0IsZUFBa0IsWUFDOUMsYUFDSCxNQUFPLE1BQVEsWUFBb0IsZUFBa0IsWUFDbEQsWUFDQSxRQUNILE1BQU8sTUFBUSxZQUFlLFlBQzNCLFVBQ0gsTUFBTyxNQUFRLFlBQWlCLGVBQWtCLFlBQy9DLE9BQ0gsTUFBTyxNQUFRLFlBQWMsZUFBa0IsWUFDNUMsWUFDSCxNQUFPLE1BQVEsWUFBbUIsWUFDL0IsT0FDSCxNQUFPLE1BQVEsWUFBYyxlQUFrQixZQUM1QyxhQUNILE1BQU8sTUFBUSxZQUFjLGVBQWtCLG1CQUM1QyxRQUNILE1BQU8sTUFBUSxZQUFlLFlBQzNCLGNBQ0gsTUFBTyxNQUFRLFlBQWUsaUJBSTlCLEdBQU8sQ0FBQyxDQUFDLEtBQU0sQ0FBQyxXQUFXLHVCQUEwQixXQUNyRCxHQUFVLENBQUMsQ0FBQyxLQUFNLENBQUMsY0FBYyxDQUNyQyxHQUFNLENBQUMsTUFBSyxRQUFPLGNBQWMsRUFBUyxJQUMxQyxTQUFXLEdBRUo7QUFBQSwwQkFDaUIsRUFBUSxTQUFXO0FBQUEsUUFDckMsRUFBUSxVQUFhLFdBQ3JCLHFDQUF3QztBQUFBLGNBRzFDLEdBQWMsQ0FBQyxDQUFDLEtBQU0sQ0FBQyxPQUFNLGFBQ2pDO0FBQUEsMkJBQ3lCO0FBQUEsTUFDckI7QUFBQSw0QkFDc0I7QUFBQSxXQUV0QixHQUFXLENBQUMsQ0FBQyxLQUFNLENBQUMsV0FDeEI7QUFBQTtBQUFBLE1BRUk7QUFBQSwwQkFDb0I7QUFBQSxXQUVwQixHQUFRLENBQUMsQ0FBQyxLQUFNLENBQUMsU0FBUSxhQUFhO0FBQUE7QUFBQSxNQUV0QyxFQUFNLElBQUksR0FBUSxLQUFRLFlBQWMsZUFBa0I7QUFBQTtBQUFBLEVBRzFELEdBQVMsQ0FBQyxDQUFDLEtBQU0sQ0FBQyxTQUFRLGFBQWE7QUFBQTtBQUFBLE1BRXZDLEVBQU0sSUFBSSxHQUFRLEtBQVEsWUFBYyxlQUFrQjtBQUFBO0FBQUEsRUFHMUQsR0FBYSxDQUFDLENBQUMsS0FBTSxDQUFDLFFBQU8sU0FBUSxhQUFhO0FBQUEsaUJBQ3ZDLEVBQU0sSUFBSSxHQUFRLFFBQVEsS0FBUSxLQUFLO0FBQUEsTUFDbEQsRUFBTSxJQUFJLEdBQVEsS0FBUSxZQUFjLGVBQWtCO0FBQUE7QUFBQSxFQUcxRCxHQUFZLENBQUMsQ0FBQyxLQUFNLENBQUMsUUFBTyxXQUFVLFlBQVcsV0FBVztBQUFBO0FBQUEsa0RBRWhCLE1BQVUsS0FBWSxLQUFhO0FBQUE7QUFBQTtBQUFBO0FBQUEsaURBSXBDLE9BQWMsYUFBcUIsVUFBYyxXQUFjLE9BQU87QUFBQTtBQUFBO0FBQUEsRUFJakgsR0FBUSxDQUFDLENBQUMsS0FBTSxDQUFDLFdBQVcsSUFBTyxJQUNuQyxHQUFPLENBQUMsQ0FBQyxLQUFNLENBQUMsV0FBVSxRQUFPLFNBQVEsUUFBUyxLQUFjLENBQ3BFLEdBQU0sR0FBVSxJQUFhLFdBQWEsRUFBVyxFQUFLLE1BQU0sZUFBZSxHQUN6RSxFQUFRLElBQWEsV0FBYSxFQUFNLEVBQUssTUFBTSxvQkFBb0IsR0FDdkUsRUFBVSxFQUFLLEdBRXJCLE1BQU87QUFBQSxnQkFDTyxLQUFXO0FBQUEsYUFDZCxJQUFZLFNBQVMsUUFBUSxLQUFPLFFBQVU7QUFBQSxnQkFDM0MsSUFBWSxTQUFTLFFBQVEsS0FBTyxHQUFLO0FBQUEsb0JBQ3JDLEVBQVMsbUJBQXFCO0FBQUEsZUFDbkM7QUFBQSwwQkFDVyxLQUFXLFdBQWlCO0FBQUE7QUFBQSxLQUloRCxHQUFRLENBQUMsQ0FBQyxLQUFNLENBQUMsT0FBTSxPQUFNLFlBQVksQ0FDN0MsR0FBTSxHQUFPLEdBQVMsNkNBQTRDLEtBQUssR0FDckUsRUFBSSxNQUFNLEVBQUcsQ0FBQyxjQUFjLFFBQVUsR0FFeEMsTUFBTztBQUFBLGdCQUNPLEVBQU8sT0FBUyxhQUFhO0FBQUEsb0JBQ3pCLEVBQVMscUJBQXVCLGlCQUFpQjtBQUFBO0FBQUEsS0FJL0QsR0FBVSxDQUFDLENBQUMsS0FBTSxDQUFDLFFBQU8sYUFBYTtBQUFBLGNBQy9CLEtBQVcsRUFBSztBQUFBO0FBQUE7QUFBQSxXQUduQixJQUFZLFNBQVMsUUFBUSxLQUFPLFFBQVU7QUFBQSxjQUMzQyxJQUFZLFNBQVMsUUFBUSxLQUFPLEdBQUs7QUFBQSxPQUNoRDtBQUFBO0FBQUEsRUFHRCxHQUFPLENBQUMsQ0FBQyxLQUFNLENBQUMsV0FBVSxPQUFNLFdBQVUsYUFBYSxDQUMzRCxPQUFRLE9BQ0QsT0FBUSxDQUNYLEdBQU0sQ0FBQyxFQUFHLEVBQVUsRUFBTyxHQUFRLEVBQUssTUFBTSw2QkFBK0IsQ0FBQyxHQUFJLEdBQUksR0FBSSxJQUMxRixNQUFPO0FBQUE7QUFBQSwrQkFFa0IsS0FBWSxFQUFLLEtBQVM7QUFBQSxpQkFDeEMsSUFBYSxTQUFTLFFBQVEsS0FBTyxRQUFVO0FBQUEsb0JBQzVDLElBQWEsU0FBUyxRQUFRLEtBQU8sR0FBSztBQUFBLFlBQ2xEO0FBQUEsa0JBR0gsV0FBWSxDQUNmLEdBQU0sQ0FBQyxFQUFHLEVBQU8sR0FBUSxFQUFLLE1BQU0saUJBQW1CLENBQUMsR0FBSSxHQUFJLElBQ2hFLE1BQU87QUFBQTtBQUFBLCtCQUVrQixLQUFXLEVBQUssS0FBUztBQUFBLGlCQUN2QyxJQUFZLFNBQVMsUUFBUSxLQUFPLFFBQVU7QUFBQSxvQkFDM0MsSUFBWSxTQUFTLFFBQVEsS0FBTyxHQUFLO0FBQUEsWUFDakQ7QUFBQSxrQkFHSCxXQUdILEdBQU0sR0FBTSxHQUFJLEtBQUksR0FDcEIsT0FBUSxFQUFJLGNBQ0wsa0JBQ0gsTUFBTztBQUFBLGlEQUNnQyxFQUFJLGFBQWEsSUFBSTtBQUFBO0FBQUEsdUNBR3pELFlBQ0gsTUFBTztBQUFBLGtEQUNpQyxFQUFJLFNBQVMsTUFBTTtBQUFBO0FBQUEsMkNBSTNELE1BRUosTUFBSSxvQkFBb0IsS0FBSyxJQUFTLElBQVksR0FDekMsK0JBQWtDLGlCQUVwQywwQkFBNkI7QUFBQSxVQUloQyxHQUFXO0FBQUEsY0FNUixHQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7RUN4UnFDLEdBQUksSUFBRSxFQUFFLEdBQUUsTUFBTSxhQUFZLENBQUMsR0FBTSxHQUFFLEtBQUssU0FBUyxTQUFTLElBQUksTUFBTSxHQUFHLE1BQU0sR0FBRyxLQUFJLEtBQUssT0FBTSxHQUFJLElBQUUsR0FBRyxTQUFRLEdBQUUsR0FBRyxHQUFFLE1BQU8sU0FBUSxhQUFhLENBQUMsQ0FBQyxPQUFPLGVBQWUsWUFBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFNLEdBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUUsRUFBRSxFQUFFLFdBQVcsTUFBTSxNQUFPLEdBQUUsRUFBRSxFQUFTLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLE1BQU8sSUFBRyxTQUFTLE1BQU8sS0FBSSxJQUFFLEdBQUcsSUFBRyxPQUFPLGVBQWUsT0FBTyxHQUFFLGFBQWMsWUFBVyxLQUFLLEVBQUUsR0FBRSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUUsR0FBRyxDQUFDLEdBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLE1BQU8sSUFBRyxTQUFTLE1BQU0sSUFBSSxFQUFFLE1BQU0sSUFBSSxFQUFFLE1BQU0sS0FBSyxHQUFHLElBQUksRUFBRSxLQUFLLEdBQUcsR0FBRyxNQUFPLElBQUcsU0FBUyxDQUFDLEdBQU0sR0FBRSxFQUFFLEdBQUcsRUFBRSxjQUFjLGlCQUFpQixNQUFNLElBQUksRUFBRSxNQUFNLElBQUksRUFBRSxNQUFNLFNBQVMsR0FBRSxFQUFFLE1BQU0sU0FBUyxJQUFJLElBQUksRUFBRSxLQUFLLEdBQUcsS0FBTSxJQUFJLE9BQU0saUNBQWlDLE9BQU8sSUFBSSxHQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLE1BQU8sR0FBRSxFQUFFLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFNLEdBQUUsR0FBRSxHQUFHLE1BQU8sSUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFHLE1BQU8sTUFBSyxHQUFJLElBQUUsR0FBSSxTQUFRLFlBQVcsRUFBRSxDQUFDLE1BQU8sSUFBRSxHQUFHLGFBQWMsRUFBQyxDQUFDLFFBQVEsQ0FBQyxHQUFNLEdBQUUsTUFBTSxTQUFTLE1BQU8sR0FBRSxFQUFTLENBQUMsU0FBUyxHQUFFLEVBQUUsS0FBSyxNQUFNLFVBQVUsQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsR0FBTSxHQUFFLEVBQUUsR0FBRyxNQUFPLEdBQUUsRUFBUyxDQUFDLFNBQVMsR0FBRSxFQUFFLE1BQU0sWUFBVyxFQUFFLENBQUMsTUFBTyxJQUFHLE1BQU0sRUFBRSxPQUFPLE9BQU8sWUFBVyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxFQUFFLFVBQVUsaUJBQWlCLFlBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTyxHQUFFLFNBQVMsR0FBTSxHQUFFLEVBQUUsRUFBRSxHQUFHLE9BQVUsS0FBSyxHQUFFLENBQUMsR0FBTSxHQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssR0FBRSxFQUFFLEVBQUUsUUFBUSxNQUFNLE1BQU8sR0FBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEdBQUksSUFBRSxPQUFPLFFBQVEsWUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFRLEdBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxLQUFNLEdBQUUsWUFBVyxFQUFFLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFTLEVBQUUsR0FBRyxPQUFVLEtBQUssSUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLEdBQU0sR0FBRSxFQUFFLEdBQUcsR0FBRyxNQUFPLElBQUcsU0FBUyxHQUFHLEdBQUUsT0FBTyxRQUFRLENBQUMsR0FBTSxHQUFFLEVBQUUsSUFBRyxHQUFHLElBQUksV0FBWSxJQUFHLGVBQWUsR0FBRSxjQUFjLEVBQUUsS0FBSyxJQUFJLEdBQUcs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