@mattilsynet/design 2.1.7 → 2.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/mtds/index.iife.js +3 -3
- package/mtds/layout/layout.d.ts +0 -7
- package/mtds/layout/layout.js +10 -13
- package/mtds/layout/layout.js.map +1 -1
- package/mtds/package.json.js +1 -1
- package/mtds/progress/progress.stories.d.ts +0 -3
- package/mtds/react.js +31 -31
- package/mtds/styles.css +1 -1
- package/mtds/tooltip/tooltip-observer.js +1 -1
- package/mtds/tooltip/tooltip-observer.js.map +1 -1
- package/mtds/typography/typography.d.ts +10 -2
- package/mtds/typography/typography.js +14 -11
- package/mtds/typography/typography.js.map +1 -1
- package/package.json +3 -3
package/mtds/index.iife.js
CHANGED
|
@@ -5,7 +5,7 @@ var mtds=function(O){"use strict";var Pi=Object.defineProperty,nn=Object.getOwnP
|
|
|
5
5
|
::slotted(del) { text-decoration: none }
|
|
6
6
|
::slotted(data:not([hidden])) { display: inline-block; pointer-events: none }
|
|
7
7
|
::slotted(data)::after { content: '\\00D7'; content: '\\00D7' / ''; padding-inline: .5ch; pointer-events: auto; cursor: pointer }
|
|
8
|
-
::slotted(data:focus) { ${Vi} }`,dn="beforeinput,blur,focus,click,input,keydown,mousedown",un={once:!0,passive:!0},Ji=Fi&&!sn,Zi=sn||Ui,fn="".repeat(5),Rt="false",Dt={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},me=class extends qi{constructor(){super(),this._item="",this._speak="",this._texts=Bi({},Dt),this._value="",this.shadowRoot||this.attachShadow({mode:"open"}).append(Mt("slot"),Mt("style",Qi))}static get observedAttributes(){return Object.keys(Dt).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=ji(this),It(this,dn,this,!0),de(this,{attributeFilter:["value","id"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(Pt,0,this),setTimeout(Nt,0,this)}attributeChangedCallback(t,e,n){const o=t.split("data-sr-")[1];Dt[o]&&(this._texts[o]=n||Dt[o])}disconnectedCallback(){de(this,!1),Wi(this,dn,this,!0),this._items=this._clear=this._focus=this._control=void 0,this._list=this._options=this._root=void 0}handleEvent(t){const e=t.target;ge(this)||(t.type==="beforeinput"&&(this._value=e?.value||""),t.type==="blur"&&es(this),t.type==="click"&&os(this,t),t.type==="focus"&&ts(this,t),t.type==="input"&&is(this,t),t.type==="keydown"&&ss(this,t),t.type==="mousedown"&&pe(t),t.type==="mutation"&&Pt(this,t))}get multiple(){var t;return((t=_(this,"data-multiple"))!=null?t:Rt)!==Rt}set multiple(t){_(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=_(this,"data-creatable"))!=null?t:Rt)!==Rt}set creatable(t){_(this,"data-creatable",t?"":null)}get control(){var t;return(t=this._control)!=null&&t.isConnected||(this._control=this.querySelector("input")),this._control}get list(){var t;return(t=this._list)!=null&&t.isConnected||(this._list=this.querySelector("u-datalist,datalist")),this._list}get clear(){var t;return(t=this._clear)!=null&&t.isConnected||(this._clear=this.querySelector("del")),this._clear}get items(){return this._items||(this._items=this.getElementsByTagName("data")),this._items}get options(){var t,e;if(!this._options){const n=((t=this.list)==null?void 0:t.nodeName)==="U-DATALIST"?"u-option":"option";this._options=(e=this.list)==null?void 0:e.getElementsByTagName(n)}return this._options}get values(){return[...this.items].map(({value:t})=>t)}},tt=t=>{var e;return((e=t?.textContent)==null?void 0:e.trim())||""},he=t=>t instanceof HTMLDataElement,ge=({control:t})=>t?.disabled||t?.readOnly||!1,Pt=(t,e)=>{var n;const{_focus:o,_texts:i,items:s,control:r,list:a,multiple:c}=t;if(!r||!a)return;const l=Xi(r),d=l.endsWith(fn)?_(r,"data-label"):l;_(r,"data-label",d);let u=`${d}${c?`, ${s.length?i.found.replace("%d",`${s.length}`):i.empty}`:""}`;const p=[];for(const{addedNodes:g,removedNodes:E}of e?.detail||[]){for(const w of g)he(w)&&p.unshift(w);for(const w of E)he(w)&&p.push(w)}const f=c?p.length===1:p[0]===o;if(o&&f){const g=_(r,"aria-expanded"),E=_(r,"inputmode"),w=he(o)?r:o,S=!p[0].isConnected;t._speak=`${i[S?"removed":"added"]} ${tt(p[0])}, `,(Zi||o===r)&&ue(t._speak),r!==w&&(_(r,"aria-expanded",null),_(r,"inputmode","none"),u=" ",r.focus()),setTimeout(()=>{var D;_(r,"aria-expanded",g),_(r,"inputmode",S?"none":E),(D=w?.focus)==null||D.call(w),_(r,"inputmode",E),t._speak="",Ji?It(t,"blur",()=>Pt(t),un):setTimeout(Pt,100,t)},100)}let b=0;const h=t.querySelector("select"),y=ge(t)?"":`${i.remove}, `;for(const g of s){const E=h?.options[b],w=tt(g),S=g.value||w,D=`${t._speak}${w}, ${y}${++b} ${i.of} ${s.length}`;_(g,"role","button"),_(g,"value",S),_(g,"tabindex","-1"),_(g,"aria-label",D),E?Object.assign(E,{textContent:w,value:S}):h?.appendChild(new Option(w,S,!0,!0))}h&&_(h,"multiple",c?"":null);for(const g of[...h?.options||[]].slice(b))g.remove();!c&&b>1&&console.warn("u-combobox: Multiple <data> found in single mode."),_(a,"aria-multiselectable",`${c}`),_(r,"list",ln(a)),_(r,"aria-label",`${t._speak}${u}${fn}`),a.hasAttribute("popover")&&(_(r,"popovertarget",ln(a)),_(a,"popover","manual"));const v=tt(s[0]);v!==t._item&&Nt(t),t._item=v,pn(t),mn(t),(n=de(t))==null||n.takeRecords()},pn=t=>{var e;t.clear&&_(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value)||ge(t))},mn=t=>{var e;const{_speak:n,options:o=[],values:i}=t;for(const s of o){const r=(e=_(s,"value"))!=null?e:tt(s);_(s,"aria-label",n?`${n}${tt(s)}`:null),_(s,"selected",i.includes(r)?"":null)}},Nt=t=>{const{multiple:e,control:n,items:o}=t,i=tt(o[0]);!e&&n&&i!==n.value&&cn(n,i,i?"insertText":"deleteContent")},be=(t,e=!0)=>{var n;const{_texts:o,options:i=[],creatable:s,control:r,items:a,multiple:c}=t,l=((n=r?.value)==null?void 0:n.trim())||"",d=l.toLowerCase()||null;let u=[...i].find(f=>(_(f,"label")||tt(f)).trim().toLowerCase()===d);const p={bubbles:!0,cancelable:!0,detail:u};if(t.dispatchEvent(new CustomEvent("comboboxbeforematch",p))||(u=[...i].find(f=>f.selected)),e)return mn(t),u?dt(t,u,!1):s&&l?dt(t,{value:l},!1):(!c&&!l&&a[0]?dt(t,a[0]):Nt(t),ue(o.invalid));for(const f of i)f.selected=f===u},dt=(t,e,n=!0)=>{const{control:o,items:i,multiple:s}=t,r=Mt("data",e.label||e.value,{value:e.value}),a=[...i].find(d=>d.value===e.value),c={bubbles:!0,cancelable:!0,detail:a||r};if(a&&!n)return Nt(t);if(t.dispatchEvent(new CustomEvent("comboboxbeforeselect",c))){if(!s)for(const d of[...i])d.remove();a?a.remove():o?.insertAdjacentElement("beforebegin",r),t.dispatchEvent(new CustomEvent("comboboxafterselect",c))}},ts=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),ue()},es=t=>pe()||setTimeout(ns,0,t),ns=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t.multiple||be(t),t._focus=void 0)},os=(t,e)=>{const{clientX:n,clientY:o,target:i}=e,{clear:s,control:r,items:a}=t;if(s?.contains(i))return r&&cn(r,"","deleteContentBackward"),r?.focus();for(const c of a){const{top:l,right:d,bottom:u,left:p}=c.getBoundingClientRect();if(c.contains(i))return dt(t,c);if(o>=l&&o<=u&&n>=p&&n<=d)return c.focus()}i===t&&r?.focus()},is=(t,e)=>{var n;const{options:o=[],control:i,multiple:s}=t,r=((n=i?.value)==null?void 0:n.trim())||"";if(e instanceof InputEvent?!e.inputType||e.inputType==="insertReplacementText":!!r){e.stopImmediatePropagation(),i&&(i.value=t._value);for(const c of o)if(c.value&&c.value===r)return dt(t,c,s)}else s||be(t,!1);pn(t)},ss=(t,e)=>{var n;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;const{clear:o,control:i,items:s}=t,{key:r,repeat:a,target:c}=e,l=i&&i===c,d=l&&i?.selectionEnd;let u=l?s.length:[...s].indexOf(c);if(l&&r==="Tab"&&o&&!o.hidden&&(e.preventDefault(),o.tabIndex=-1,o.focus(),It(o,"blur",()=>_(o,"tabindex",null),un)),!(!l&&zi(e)||u===-1)){if(r==="ArrowRight"&&!l)u+=1;else if(r==="ArrowLeft"&&!d)u-=1;else if(r==="Enter"&&l){const p=_(i,"form");return _(i,"form","#"),requestAnimationFrame(()=>_(i,"form",p)),be(t)}else if((r==="Backspace"||r==="Delete")&&!d){if(e.preventDefault(),!a&&s[u])return dt(t,s[u]);l&&(u-=1)}else return l||i?.focus();e.preventDefault(),(n=s[Math.max(0,u)]||i)==null||n.focus()}};Yi.define("u-combobox",me);var ve=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",rs=ve&&/android/i.test(navigator.userAgent),hn;ve&&/^Mac/i.test(((hn=navigator.userAgentData)==null?void 0:hn.platform)||navigator.platform);var as=`${rs?"data":"aria"}-labelledby`,_e=":host(:not([hidden])) { display: block }",Ht=typeof HTMLElement>"u"?class{}:HTMLElement;function C(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var gn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},ls=(t,...e)=>gn("add",t,e),cs=(t,...e)=>gn("remove",t,e),Bt=(t,e)=>t.shadowRoot||t.attachShadow({mode:"open"}).append(yn("slot"),yn("style",e)),Ft=new WeakMap,bn=(t,e)=>{if(e===void 0)return Ft.get(t);try{Ft.get(t).disconnect(),Ft.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),Ft.set(t,n)}},ds=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},vn=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},us=0,_n=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++us).toString(32)}`),t.id):"",yn=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},Ut={define:(t,e)=>!ve||window.customElements.get(t)||window.customElements.define(t,e)},fs=_e,ps=_e,ms=_e,hs=':host(:not([hidden])) { display: inline-block; cursor: pointer }:host([aria-disabled="true"]) { cursor: default }',Vt="aria-controls",ut="aria-selected",wn=class extends Ht{constructor(){super(),Bt(this,fs)}get tabList(){return qt("u-tablist",this)[0]||null}get selectedIndex(){return Wt(this.tabs)}set selectedIndex(t){Ee(this.tabs[t])}get tabs(){return qt("u-tab",this)}get panels(){return qt("u-tabpanel",this)}},En=class extends Ht{constructor(){super(),Bt(this,ps)}connectedCallback(){C(this,"role","tablist"),ls(this,"click,keydown",this),bn(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){cs(this,"click,keydown",this),bn(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s?.setAttribute(ut,"true")}const{key:e}=t,n=[...this.tabs],o=n.findIndex(s=>s.contains(t.target));let i=o;if(!(t.defaultPrevented||o===-1)&&(t.type==="click"&&Ee(n[o]),t.type==="keydown"&&!ds(t))){if(e==="ArrowDown"||e==="ArrowRight")i=(o+1)%n.length;else if(e==="ArrowUp"||e==="ArrowLeft")i=(o||n.length)-1;else if(e==="End")i=n.length-1;else if(e==="Home")i=0;else if(e==="Tab")i=Wt(n);else return;setTimeout(()=>{n[o].tabIndex=-1,n[i].tabIndex=0}),e!=="Tab"&&(t.preventDefault(),n[i].focus())}}get tabsElement(){return this.closest("u-tabs")}get tabs(){return this.querySelectorAll("u-tab")}get selectedIndex(){return Wt(this.tabs)}set selectedIndex(t){Ee(this.tabs[t])}},ye=!1,xn=class extends Ht{static get observedAttributes(){return["id",ut,Vt]}constructor(){super(),Bt(this,hs)}connectedCallback(){C(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!ye&&this.selected&&this.tabList){ye=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=qt("u-tabpanel",this.tabsElement||this),n=we(this,e[t.indexOf(this)]);n&&C(n,as,_n(this)),t.forEach((o,i)=>{const s=we(o,e[i]);o.tabIndex=o===this?0:-1,C(o,ut,`${o===this}`),C(o,Vt,s?.id||null),s&&(s.hidden=s!==n)}),ye=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return t?.nodeName==="U-TABLIST"?t:null}get selected(){return C(this,ut)==="true"}set selected(t){C(this,ut,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return we(this)}},Sn=class extends Ht{static get observedAttributes(){return["hidden"]}constructor(){super(),Bt(this,ms)}connectedCallback(){C(this,"role","tabpanel"),this.hidden=Wt(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){const t=this.hidden;C(this,"aria-hidden",`${t}`),C(this,"tabindex",t||gs(this.firstChild)?null:"0")}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${Vt}="${this.id}"]`;return vn(this).querySelectorAll(t)}},qt=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),we=(t,e)=>{const n=C(t,Vt)||_n(e),o=vn(t).getElementById(n);return o?.nodeName==="U-TABPANEL"?o:null},Wt=t=>[...t].findIndex(e=>C(e,ut)==="true"),Ee=t=>t&&C(t,"aria-disabled")!=="true"&&C(t,"aria-selected","true"),gs=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');Ut.define("u-tabs",wn),Ut.define("u-tablist",En),Ut.define("u-tab",xn),Ut.define("u-tabpanel",Sn);const bs="2.1.7",Tn="_alert_1run0_1 _ds-alert_alzsp_1",$n="_app_1run0_1",Cn="_sticky_1run0_1",An="_avatar_1run0_1 _ds-avatar_alzsp_1",Ln="_badge_1run0_1",kn="_breadcrumbs_1run0_1 _ds-breadcrumbs_alzsp_1",In="_button_1run0_1 _ds-button_alzsp_1",On="_card_1run0_1",Mn="_group_1run0_1",Rn="_chip_1run0_1 _ds-chip_alzsp_1",Dn="_details_1run0_1 _ds-details_alzsp_1",Pn="_dialog_1run0_1 _ds-dialog_alzsp_1",Nn="__drawer_1run0_1",Hn="_divider_1run0_1",Bn="_errorsummary_1run0_1 _ds-error-summary_alzsp_1",Fn="__errorsummary_1run0_1",Un="_field_1run0_1 _ds-field_alzsp_1",Vn="__datalist_1run0_1",qn="_affixes_1run0_1 _ds-field-affixes_alzsp_1",Wn="_fieldset_1run0_1 _ds-fieldset_alzsp_1",zn="_heading_1run0_1 _ds-heading_alzsp_1",jn="_ingress_1run0_1",Kn="_muted_1run0_1",Yn="_info_1run0_1",Xn="_prose_1run0_1",Gn="_helptext_1run0_1 _ds-focus_alzsp_1",Qn="_input_1run0_1 _ds-input_alzsp_1",Jn="_grid_1run0_1",Zn="_flex_1run0_1",to="_link_1run0_1",eo="_logo_1run0_1",no="_pagination_1run0_1 _ds-pagination_alzsp_1",oo="_popover_1run0_1",io="_progress_1run0_1",so="__indeterminate_1run0_1",ro="_skeleton_1run0_1 _ds-skeleton_alzsp_1",ao="__skeleton_1run0_1",lo="_spinner_1run0_1",co="_steps_1run0_1",uo="_table_1run0_1 _ds-table_alzsp_1",fo="__scrollShadow_1run0_1",po="_tabs_1run0_1 _ds-tabs_alzsp_1",mo="__scrollMask_1run0_1",ho="_tag_1run0_1 _ds-tag_alzsp_1",go="_togglegroup_1run0_1",bo="__tooltip_1run0_1",vo="_validation_1run0_1 _ds-validation-message_alzsp_1",_o="_body_1run0_153",yo="__checked_1run0_1",T={alert:Tn,app:$n,sticky:Cn,avatar:An,badge:Ln,breadcrumbs:kn,button:In,card:On,group:Mn,chip:Rn,details:Dn,dialog:Pn,_drawer:Nn,divider:Hn,errorsummary:Bn,_errorsummary:Fn,field:Un,_datalist:Vn,affixes:qn,fieldset:Wn,heading:zn,ingress:jn,muted:Kn,info:Yn,prose:Xn,helptext:Gn,input:Qn,grid:Jn,flex:Zn,link:to,logo:eo,pagination:no,popover:oo,progress:io,_indeterminate:so,skeleton:ro,_skeleton:ao,spinner:lo,steps:co,table:uo,_scrollShadow:fo,tabs:po,_scrollMask:mo,tag:ho,togglegroup:go,_tooltip:bo,validation:vo,body:_o,_checked:yo},vs=Object.freeze(Object.defineProperty({__proto__:null,_checked:yo,_datalist:Vn,_drawer:Nn,_errorsummary:Fn,_indeterminate:so,_scrollMask:mo,_scrollShadow:fo,_skeleton:ao,_tooltip:bo,affixes:qn,alert:Tn,app:$n,avatar:An,badge:Ln,body:_o,breadcrumbs:kn,button:In,card:On,chip:Rn,default:T,details:Dn,dialog:Pn,divider:Hn,errorsummary:Bn,field:Un,fieldset:Wn,flex:Zn,grid:Jn,group:Mn,heading:zn,helptext:Gn,info:Yn,ingress:jn,input:Qn,link:to,logo:eo,muted:Kn,pagination:no,popover:oo,progress:io,prose:Xn,skeleton:ro,spinner:lo,steps:co,sticky:Cn,table:uo,tabs:po,tag:ho,togglegroup:go,validation:vo},Symbol.toStringTag,{value:"Module"})),ft=Math.min,k=Math.max,zt=Math.round,jt=Math.floor,V=t=>({x:t,y:t}),_s={left:"right",right:"left",bottom:"top",top:"bottom"},ys={start:"end",end:"start"};function wo(t,e,n){return k(t,ft(e,n))}function Kt(t,e){return typeof t=="function"?t(e):t}function et(t){return t.split("-")[0]}function Yt(t){return t.split("-")[1]}function Eo(t){return t==="x"?"y":"x"}function xo(t){return t==="y"?"height":"width"}const ws=new Set(["top","bottom"]);function X(t){return ws.has(et(t))?"y":"x"}function So(t){return Eo(X(t))}function Es(t,e,n){n===void 0&&(n=!1);const o=Yt(t),i=So(t),s=xo(i);let r=i==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return e.reference[s]>e.floating[s]&&(r=Xt(r)),[r,Xt(r)]}function xs(t){const e=Xt(t);return[xe(t),e,xe(e)]}function xe(t){return t.replace(/start|end/g,e=>ys[e])}const To=["left","right"],$o=["right","left"],Ss=["top","bottom"],Ts=["bottom","top"];function $s(t,e,n){switch(t){case"top":case"bottom":return n?e?$o:To:e?To:$o;case"left":case"right":return e?Ss:Ts;default:return[]}}function Cs(t,e,n,o){const i=Yt(t);let s=$s(et(t),n==="start",o);return i&&(s=s.map(r=>r+"-"+i),e&&(s=s.concat(s.map(xe)))),s}function Xt(t){return t.replace(/left|right|bottom|top/g,e=>_s[e])}function As(t){return{top:0,right:0,bottom:0,left:0,...t}}function Ls(t){return typeof t!="number"?As(t):{top:t,right:t,bottom:t,left:t}}function Gt(t){const{x:e,y:n,width:o,height:i}=t;return{width:o,height:i,top:n,left:e,right:e+o,bottom:n+i,x:e,y:n}}function Co(t,e,n){let{reference:o,floating:i}=t;const s=X(e),r=So(e),a=xo(r),c=et(e),l=s==="y",d=o.x+o.width/2-i.width/2,u=o.y+o.height/2-i.height/2,p=o[a]/2-i[a]/2;let f;switch(c){case"top":f={x:d,y:o.y-i.height};break;case"bottom":f={x:d,y:o.y+o.height};break;case"right":f={x:o.x+o.width,y:u};break;case"left":f={x:o.x-i.width,y:u};break;default:f={x:o.x,y:o.y}}switch(Yt(e)){case"start":f[r]-=p*(n&&l?-1:1);break;case"end":f[r]+=p*(n&&l?-1:1);break}return f}const ks=async(t,e,n)=>{const{placement:o="bottom",strategy:i="absolute",middleware:s=[],platform:r}=n,a=s.filter(Boolean),c=await(r.isRTL==null?void 0:r.isRTL(e));let l=await r.getElementRects({reference:t,floating:e,strategy:i}),{x:d,y:u}=Co(l,o,c),p=o,f={},b=0;for(let h=0;h<a.length;h++){const{name:y,fn:v}=a[h],{x:g,y:E,data:w,reset:S}=await v({x:d,y:u,initialPlacement:o,placement:p,strategy:i,middlewareData:f,rects:l,platform:r,elements:{reference:t,floating:e}});d=g??d,u=E??u,f={...f,[y]:{...f[y],...w}},S&&b<=50&&(b++,typeof S=="object"&&(S.placement&&(p=S.placement),S.rects&&(l=S.rects===!0?await r.getElementRects({reference:t,floating:e,strategy:i}):S.rects),{x:d,y:u}=Co(l,p,c)),h=-1)}return{x:d,y:u,placement:p,strategy:i,middlewareData:f}};async function Se(t,e){var n;e===void 0&&(e={});const{x:o,y:i,platform:s,rects:r,elements:a,strategy:c}=t,{boundary:l="clippingAncestors",rootBoundary:d="viewport",elementContext:u="floating",altBoundary:p=!1,padding:f=0}=Kt(e,t),b=Ls(f),y=a[p?u==="floating"?"reference":"floating":u],v=Gt(await s.getClippingRect({element:(n=await(s.isElement==null?void 0:s.isElement(y)))==null||n?y:y.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(a.floating)),boundary:l,rootBoundary:d,strategy:c})),g=u==="floating"?{x:o,y:i,width:r.floating.width,height:r.floating.height}:r.reference,E=await(s.getOffsetParent==null?void 0:s.getOffsetParent(a.floating)),w=await(s.isElement==null?void 0:s.isElement(E))?await(s.getScale==null?void 0:s.getScale(E))||{x:1,y:1}:{x:1,y:1},S=Gt(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:a,rect:g,offsetParent:E,strategy:c}):g);return{top:(v.top-S.top+b.top)/w.y,bottom:(S.bottom-v.bottom+b.bottom)/w.y,left:(v.left-S.left+b.left)/w.x,right:(S.right-v.right+b.right)/w.x}}const Is=function(t){return t===void 0&&(t={}),{name:"flip",options:t,async fn(e){var n,o;const{placement:i,middlewareData:s,rects:r,initialPlacement:a,platform:c,elements:l}=e,{mainAxis:d=!0,crossAxis:u=!0,fallbackPlacements:p,fallbackStrategy:f="bestFit",fallbackAxisSideDirection:b="none",flipAlignment:h=!0,...y}=Kt(t,e);if((n=s.arrow)!=null&&n.alignmentOffset)return{};const v=et(i),g=X(a),E=et(a)===a,w=await(c.isRTL==null?void 0:c.isRTL(l.floating)),S=p||(E||!h?[Xt(a)]:xs(a)),D=b!=="none";!p&&D&&S.push(...Cs(a,h,b,w));const z=[a,...S],rt=await Se(e,y),at=[];let Y=((o=s.flip)==null?void 0:o.overflows)||[];if(d&&at.push(rt[v]),u){const lt=Es(i,r,w);at.push(rt[lt[0]],rt[lt[1]])}if(Y=[...Y,{placement:i,overflows:at}],!at.every(lt=>lt<=0)){var Ct,At;const lt=(((Ct=s.flip)==null?void 0:Ct.index)||0)+1,en=z[lt];if(en&&(!(u==="alignment"?g!==X(en):!1)||Y.every(U=>X(U.placement)===g?U.overflows[0]>0:!0)))return{data:{index:lt,overflows:Y},reset:{placement:en}};let kt=(At=Y.filter(ct=>ct.overflows[0]<=0).sort((ct,U)=>ct.overflows[1]-U.overflows[1])[0])==null?void 0:At.placement;if(!kt)switch(f){case"bestFit":{var Lt;const ct=(Lt=Y.filter(U=>{if(D){const J=X(U.placement);return J===g||J==="y"}return!0}).map(U=>[U.placement,U.overflows.filter(J=>J>0).reduce((J,Ba)=>J+Ba,0)]).sort((U,J)=>U[1]-J[1])[0])==null?void 0:Lt[0];ct&&(kt=ct);break}case"initialPlacement":kt=a;break}if(i!==kt)return{reset:{placement:kt}}}return{}}}},Os=function(t){return t===void 0&&(t={}),{name:"shift",options:t,async fn(e){const{x:n,y:o,placement:i}=e,{mainAxis:s=!0,crossAxis:r=!1,limiter:a={fn:y=>{let{x:v,y:g}=y;return{x:v,y:g}}},...c}=Kt(t,e),l={x:n,y:o},d=await Se(e,c),u=X(et(i)),p=Eo(u);let f=l[p],b=l[u];if(s){const y=p==="y"?"top":"left",v=p==="y"?"bottom":"right",g=f+d[y],E=f-d[v];f=wo(g,f,E)}if(r){const y=u==="y"?"top":"left",v=u==="y"?"bottom":"right",g=b+d[y],E=b-d[v];b=wo(g,b,E)}const h=a.fn({...e,[p]:f,[u]:b});return{...h,data:{x:h.x-n,y:h.y-o,enabled:{[p]:s,[u]:r}}}}}},Ms=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){var n,o;const{placement:i,rects:s,platform:r,elements:a}=e,{apply:c=()=>{},...l}=Kt(t,e),d=await Se(e,l),u=et(i),p=Yt(i),f=X(i)==="y",{width:b,height:h}=s.floating;let y,v;u==="top"||u==="bottom"?(y=u,v=p===(await(r.isRTL==null?void 0:r.isRTL(a.floating))?"start":"end")?"left":"right"):(v=u,y=p==="end"?"top":"bottom");const g=h-d.top-d.bottom,E=b-d.left-d.right,w=ft(h-d[y],g),S=ft(b-d[v],E),D=!e.middlewareData.shift;let z=w,rt=S;if((n=e.middlewareData.shift)!=null&&n.enabled.x&&(rt=E),(o=e.middlewareData.shift)!=null&&o.enabled.y&&(z=g),D&&!p){const Y=k(d.left,0),Ct=k(d.right,0),At=k(d.top,0),Lt=k(d.bottom,0);f?rt=b-2*(Y!==0||Ct!==0?Y+Ct:k(d.left,d.right)):z=h-2*(At!==0||Lt!==0?At+Lt:k(d.top,d.bottom))}await c({...e,availableWidth:rt,availableHeight:z});const at=await r.getDimensions(a.floating);return b!==at.width||h!==at.height?{reset:{rects:!0}}:{}}}};function Qt(){return typeof window<"u"}function pt(t){return Ao(t)?(t.nodeName||"").toLowerCase():"#document"}function I(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function q(t){var e;return(e=(Ao(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function Ao(t){return Qt()?t instanceof Node||t instanceof I(t).Node:!1}function P(t){return Qt()?t instanceof Element||t instanceof I(t).Element:!1}function W(t){return Qt()?t instanceof HTMLElement||t instanceof I(t).HTMLElement:!1}function Lo(t){return!Qt()||typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof I(t).ShadowRoot}const Rs=new Set(["inline","contents"]);function _t(t){const{overflow:e,overflowX:n,overflowY:o,display:i}=N(t);return/auto|scroll|overlay|hidden|clip/.test(e+o+n)&&!Rs.has(i)}const Ds=new Set(["table","td","th"]);function Ps(t){return Ds.has(pt(t))}const Ns=[":popover-open",":modal"];function Jt(t){return Ns.some(e=>{try{return t.matches(e)}catch{return!1}})}const Hs=["transform","translate","scale","rotate","perspective"],Bs=["transform","translate","scale","rotate","perspective","filter"],Fs=["paint","layout","strict","content"];function Te(t){const e=$e(),n=P(t)?N(t):t;return Hs.some(o=>n[o]?n[o]!=="none":!1)||(n.containerType?n.containerType!=="normal":!1)||!e&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!e&&(n.filter?n.filter!=="none":!1)||Bs.some(o=>(n.willChange||"").includes(o))||Fs.some(o=>(n.contain||"").includes(o))}function Us(t){let e=G(t);for(;W(e)&&!mt(e);){if(Te(e))return e;if(Jt(e))return null;e=G(e)}return null}function $e(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const Vs=new Set(["html","body","#document"]);function mt(t){return Vs.has(pt(t))}function N(t){return I(t).getComputedStyle(t)}function Zt(t){return P(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function G(t){if(pt(t)==="html")return t;const e=t.assignedSlot||t.parentNode||Lo(t)&&t.host||q(t);return Lo(e)?e.host:e}function ko(t){const e=G(t);return mt(e)?t.ownerDocument?t.ownerDocument.body:t.body:W(e)&&_t(e)?e:ko(e)}function yt(t,e,n){var o;e===void 0&&(e=[]),n===void 0&&(n=!0);const i=ko(t),s=i===((o=t.ownerDocument)==null?void 0:o.body),r=I(i);if(s){const a=Ce(r);return e.concat(r,r.visualViewport||[],_t(i)?i:[],a&&n?yt(a):[])}return e.concat(i,yt(i,[],n))}function Ce(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function Io(t){const e=N(t);let n=parseFloat(e.width)||0,o=parseFloat(e.height)||0;const i=W(t),s=i?t.offsetWidth:n,r=i?t.offsetHeight:o,a=zt(n)!==s||zt(o)!==r;return a&&(n=s,o=r),{width:n,height:o,$:a}}function Ae(t){return P(t)?t:t.contextElement}function ht(t){const e=Ae(t);if(!W(e))return V(1);const n=e.getBoundingClientRect(),{width:o,height:i,$:s}=Io(e);let r=(s?zt(n.width):n.width)/o,a=(s?zt(n.height):n.height)/i;return(!r||!Number.isFinite(r))&&(r=1),(!a||!Number.isFinite(a))&&(a=1),{x:r,y:a}}const qs=V(0);function Oo(t){const e=I(t);return!$e()||!e.visualViewport?qs:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function Ws(t,e,n){return e===void 0&&(e=!1),!n||e&&n!==I(t)?!1:e}function nt(t,e,n,o){e===void 0&&(e=!1),n===void 0&&(n=!1);const i=t.getBoundingClientRect(),s=Ae(t);let r=V(1);e&&(o?P(o)&&(r=ht(o)):r=ht(t));const a=Ws(s,n,o)?Oo(s):V(0);let c=(i.left+a.x)/r.x,l=(i.top+a.y)/r.y,d=i.width/r.x,u=i.height/r.y;if(s){const p=I(s),f=o&&P(o)?I(o):o;let b=p,h=Ce(b);for(;h&&o&&f!==b;){const y=ht(h),v=h.getBoundingClientRect(),g=N(h),E=v.left+(h.clientLeft+parseFloat(g.paddingLeft))*y.x,w=v.top+(h.clientTop+parseFloat(g.paddingTop))*y.y;c*=y.x,l*=y.y,d*=y.x,u*=y.y,c+=E,l+=w,b=I(h),h=Ce(b)}}return Gt({width:d,height:u,x:c,y:l})}function te(t,e){const n=Zt(t).scrollLeft;return e?e.left+n:nt(q(t)).left+n}function Mo(t,e){const n=t.getBoundingClientRect(),o=n.left+e.scrollLeft-te(t,n),i=n.top+e.scrollTop;return{x:o,y:i}}function zs(t){let{elements:e,rect:n,offsetParent:o,strategy:i}=t;const s=i==="fixed",r=q(o),a=e?Jt(e.floating):!1;if(o===r||a&&s)return n;let c={scrollLeft:0,scrollTop:0},l=V(1);const d=V(0),u=W(o);if((u||!u&&!s)&&((pt(o)!=="body"||_t(r))&&(c=Zt(o)),W(o))){const f=nt(o);l=ht(o),d.x=f.x+o.clientLeft,d.y=f.y+o.clientTop}const p=r&&!u&&!s?Mo(r,c):V(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+d.x+p.x,y:n.y*l.y-c.scrollTop*l.y+d.y+p.y}}function js(t){return Array.from(t.getClientRects())}function Ks(t){const e=q(t),n=Zt(t),o=t.ownerDocument.body,i=k(e.scrollWidth,e.clientWidth,o.scrollWidth,o.clientWidth),s=k(e.scrollHeight,e.clientHeight,o.scrollHeight,o.clientHeight);let r=-n.scrollLeft+te(t);const a=-n.scrollTop;return N(o).direction==="rtl"&&(r+=k(e.clientWidth,o.clientWidth)-i),{width:i,height:s,x:r,y:a}}const Ro=25;function Ys(t,e){const n=I(t),o=q(t),i=n.visualViewport;let s=o.clientWidth,r=o.clientHeight,a=0,c=0;if(i){s=i.width,r=i.height;const d=$e();(!d||d&&e==="fixed")&&(a=i.offsetLeft,c=i.offsetTop)}const l=te(o);if(l<=0){const d=o.ownerDocument,u=d.body,p=getComputedStyle(u),f=d.compatMode==="CSS1Compat"&&parseFloat(p.marginLeft)+parseFloat(p.marginRight)||0,b=Math.abs(o.clientWidth-u.clientWidth-f);b<=Ro&&(s-=b)}else l<=Ro&&(s+=l);return{width:s,height:r,x:a,y:c}}const Xs=new Set(["absolute","fixed"]);function Gs(t,e){const n=nt(t,!0,e==="fixed"),o=n.top+t.clientTop,i=n.left+t.clientLeft,s=W(t)?ht(t):V(1),r=t.clientWidth*s.x,a=t.clientHeight*s.y,c=i*s.x,l=o*s.y;return{width:r,height:a,x:c,y:l}}function Do(t,e,n){let o;if(e==="viewport")o=Ys(t,n);else if(e==="document")o=Ks(q(t));else if(P(e))o=Gs(e,n);else{const i=Oo(t);o={x:e.x-i.x,y:e.y-i.y,width:e.width,height:e.height}}return Gt(o)}function Po(t,e){const n=G(t);return n===e||!P(n)||mt(n)?!1:N(n).position==="fixed"||Po(n,e)}function Qs(t,e){const n=e.get(t);if(n)return n;let o=yt(t,[],!1).filter(a=>P(a)&&pt(a)!=="body"),i=null;const s=N(t).position==="fixed";let r=s?G(t):t;for(;P(r)&&!mt(r);){const a=N(r),c=Te(r);!c&&a.position==="fixed"&&(i=null),(s?!c&&!i:!c&&a.position==="static"&&!!i&&Xs.has(i.position)||_t(r)&&!c&&Po(t,r))?o=o.filter(d=>d!==r):i=a,r=G(r)}return e.set(t,o),o}function Js(t){let{element:e,boundary:n,rootBoundary:o,strategy:i}=t;const r=[...n==="clippingAncestors"?Jt(e)?[]:Qs(e,this._c):[].concat(n),o],a=r[0],c=r.reduce((l,d)=>{const u=Do(e,d,i);return l.top=k(u.top,l.top),l.right=ft(u.right,l.right),l.bottom=ft(u.bottom,l.bottom),l.left=k(u.left,l.left),l},Do(e,a,i));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function Zs(t){const{width:e,height:n}=Io(t);return{width:e,height:n}}function tr(t,e,n){const o=W(e),i=q(e),s=n==="fixed",r=nt(t,!0,s,e);let a={scrollLeft:0,scrollTop:0};const c=V(0);function l(){c.x=te(i)}if(o||!o&&!s)if((pt(e)!=="body"||_t(i))&&(a=Zt(e)),o){const f=nt(e,!0,s,e);c.x=f.x+e.clientLeft,c.y=f.y+e.clientTop}else i&&l();s&&!o&&i&&l();const d=i&&!o&&!s?Mo(i,a):V(0),u=r.left+a.scrollLeft-c.x-d.x,p=r.top+a.scrollTop-c.y-d.y;return{x:u,y:p,width:r.width,height:r.height}}function Le(t){return N(t).position==="static"}function No(t,e){if(!W(t)||N(t).position==="fixed")return null;if(e)return e(t);let n=t.offsetParent;return q(t)===n&&(n=n.ownerDocument.body),n}function Ho(t,e){const n=I(t);if(Jt(t))return n;if(!W(t)){let i=G(t);for(;i&&!mt(i);){if(P(i)&&!Le(i))return i;i=G(i)}return n}let o=No(t,e);for(;o&&Ps(o)&&Le(o);)o=No(o,e);return o&&mt(o)&&Le(o)&&!Te(o)?n:o||Us(t)||n}const er=async function(t){const e=this.getOffsetParent||Ho,n=this.getDimensions,o=await n(t.floating);return{reference:tr(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function nr(t){return N(t).direction==="rtl"}const or={convertOffsetParentRelativeRectToViewportRelativeRect:zs,getDocumentElement:q,getClippingRect:Js,getOffsetParent:Ho,getElementRects:er,getClientRects:js,getDimensions:Zs,getScale:ht,isElement:P,isRTL:nr};function Bo(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}function ir(t,e){let n=null,o;const i=q(t);function s(){var a;clearTimeout(o),(a=n)==null||a.disconnect(),n=null}function r(a,c){a===void 0&&(a=!1),c===void 0&&(c=1),s();const l=t.getBoundingClientRect(),{left:d,top:u,width:p,height:f}=l;if(a||e(),!p||!f)return;const b=jt(u),h=jt(i.clientWidth-(d+p)),y=jt(i.clientHeight-(u+f)),v=jt(d),E={rootMargin:-b+"px "+-h+"px "+-y+"px "+-v+"px",threshold:k(0,ft(1,c))||1};let w=!0;function S(D){const z=D[0].intersectionRatio;if(z!==c){if(!w)return r();z?r(!1,z):o=setTimeout(()=>{r(!1,1e-7)},1e3)}z===1&&!Bo(l,t.getBoundingClientRect())&&r(),w=!1}try{n=new IntersectionObserver(S,{...E,root:i.ownerDocument})}catch{n=new IntersectionObserver(S,E)}n.observe(t)}return r(!0),s}function sr(t,e,n,o){o===void 0&&(o={});const{ancestorScroll:i=!0,ancestorResize:s=!0,elementResize:r=typeof ResizeObserver=="function",layoutShift:a=typeof IntersectionObserver=="function",animationFrame:c=!1}=o,l=Ae(t),d=i||s?[...l?yt(l):[],...yt(e)]:[];d.forEach(v=>{i&&v.addEventListener("scroll",n,{passive:!0}),s&&v.addEventListener("resize",n)});const u=l&&a?ir(l,n):null;let p=-1,f=null;r&&(f=new ResizeObserver(v=>{let[g]=v;g&&g.target===l&&f&&(f.unobserve(e),cancelAnimationFrame(p),p=requestAnimationFrame(()=>{var E;(E=f)==null||E.observe(e)})),n()}),l&&!c&&f.observe(l),f.observe(e));let b,h=c?nt(t):null;c&&y();function y(){const v=nt(t);h&&!Bo(h,v)&&n(),h=v,b=requestAnimationFrame(y)}return n(),()=>{var v;d.forEach(g=>{i&&g.removeEventListener("scroll",n),s&&g.removeEventListener("resize",n)}),u?.(),(v=f)==null||v.disconnect(),f=null,c&&cancelAnimationFrame(b)}}const ke=Os,Ie=Is,Fo=Ms,rr=(t,e,n)=>{const o=new Map,i={platform:or,...n},s={...i.platform,_c:o};return ks(t,e,{...i,platform:s})},M={capture:!0,passive:!0},ee=typeof window<"u"&&typeof document<"u";function ar(t,e){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>t(...o),e)}}function m(t,e,n){return n===void 0?t.getAttribute(e)??null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}let lr=0;const cr=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function ne(t){return t.id||(t.id=`${cr}${++lr}`),t.id}const Uo=(t,e,[...n])=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},$=(t,...e)=>{wt&&(t===window||t===document)&&wt.push(()=>dr(t,...e)),Uo("add",t,e)},dr=(t,...e)=>Uo("remove",t,e);let wt=null;const R=t=>{if(!ee)return;window._mtdsUnbindEvents||(window._mtdsUnbindEvents=new Map);const e=()=>requestAnimationFrame(()=>{const n=String(t).replace(/(\n|\s)/g,"");window._mtdsUnbindEvents?.get(n)?.forEach(o=>{o()}),wt=[],t(),window._mtdsUnbindEvents?.set(n,wt?.slice(0)),wt=null});document.readyState==="complete"?e():$(window,"load",e)},Oe=new WeakMap;function ot(t,e,n){Oe.get(t)?.(),Oe.delete(t),e&&Oe.set(t,sr(e,t,()=>{if(!t.isConnected||!e.isConnected||t.hidden)return ot(t,!1);rr(e,t,n).then(({x:o,y:i})=>{t.style.left=`${o}px`,t.style.top=`${i}px`})}))}function Vo(t){let e=0;const n=()=>setTimeout(o,200),o=()=>{t([],i),i.takeRecords(),e=0},i=new MutationObserver(()=>{e||(e=requestAnimationFrame(n))});return i}const Me=new WeakMap,gt=(t,e,n)=>{const o=t.getElementsByClassName(e),i=Me.get(t)||[];i.length||(Me.set(t,i),Vo((s,r)=>{if(t.isConnected&&i?.length)for(const a of i)a();else r?.disconnect(),Me.delete(t)}).observe(t,{attributeFilter:["class","hidden"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>n(o))},Re=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),ur=`.${T.breadcrumbs.split(" ")[0]}`,fr=`.${T.chip.split(" ")[0]}`,pr=`.${T.helptext.split(" ")[0]}`,mr=`.${T.pagination.split(" ")[0]}`,hr='summary,u-summary,a,button,[role="tab"],[role="button"]',gr="click,toggle,submit,change",De="mattilsynet.matomo.cloud",H="mtds-analytics-banner",br="https://www.mattilsynet.no/om-mattilsynet/personvernerklaering/informasjonskapsler";function qo(t,e={}){if(ee){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${De}/matomo.php`])),window._mtm||(window._mtm=window._mtm||[],window._mtm.push({"mtm.startTime":Date.now(),event:"mtm.Start"})),t==="init"){window._mtdsTracking={enabled:window.location.hostname!=="localhost",...window._mtdsTracking,...e};const{consent:n,enabled:o,matomoId:i,matomoTagManagerId:s}=window._mtdsTracking;if(i&&window._paq.push(["setSiteId",i]),o){n!=="custom"&&vr();const r=s?`https://cdn.matomo.cloud/${De}/container_${s}.js`:`https://cdn.matomo.cloud/${De}/matomo.js`;document.querySelector(`script[src="${r}"]`)||document.head.append(Object.assign(document.createElement("script"),{async:!0,src:r}))}}if(window._mtdsTracking?.enabled!==!1){if(window._mtdsTracking?.enabled==="debug")return console.info(`analytics("${t}", `,e,")");if(t==="pageview"){const{url:n,title:o}=e;window._paq.push(["setCustomUrl",n||location.href]),window._paq.push(["setDocumentTitle",o||document.title]),window._paq.push(["trackPageView"])}else if(t==="event"){const{category:n,action:o,name:i,value:s}=e,r=["trackEvent",n,o,i,s];let a=location.href;window._paq.push([function(){a=this.getCurrentUrl()}]),window._paq.push(["setCustomUrl",a.split("#")[0]]),window._paq.push(r.filter(c=>c!==void 0)),window._paq.push(["setCustomUrl",a])}else if(t==="search"){const{query:n,category:o=!1,results:i=!1}=e;window._paq.push(["trackSiteSearch",n,o,i])}else t==="matomo"&&window._paq.push(e)}}}function vr(){if(document.getElementById(H)||window.localStorage.getItem(H))return;document.body.insertAdjacentHTML("afterbegin",`<dialog id="${H}" data-analytics="ignore"><style>
|
|
8
|
+
::slotted(data:focus) { ${Vi} }`,dn="beforeinput,blur,focus,click,input,keydown,mousedown",un={once:!0,passive:!0},Ji=Fi&&!sn,Zi=sn||Ui,fn="".repeat(5),Rt="false",Dt={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},me=class extends qi{constructor(){super(),this._item="",this._speak="",this._texts=Bi({},Dt),this._value="",this.shadowRoot||this.attachShadow({mode:"open"}).append(Mt("slot"),Mt("style",Qi))}static get observedAttributes(){return Object.keys(Dt).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=ji(this),It(this,dn,this,!0),de(this,{attributeFilter:["value","id"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(Pt,0,this),setTimeout(Nt,0,this)}attributeChangedCallback(t,e,n){const o=t.split("data-sr-")[1];Dt[o]&&(this._texts[o]=n||Dt[o])}disconnectedCallback(){de(this,!1),Wi(this,dn,this,!0),this._items=this._clear=this._focus=this._control=void 0,this._list=this._options=this._root=void 0}handleEvent(t){const e=t.target;ge(this)||(t.type==="beforeinput"&&(this._value=e?.value||""),t.type==="blur"&&es(this),t.type==="click"&&os(this,t),t.type==="focus"&&ts(this,t),t.type==="input"&&is(this,t),t.type==="keydown"&&ss(this,t),t.type==="mousedown"&&pe(t),t.type==="mutation"&&Pt(this,t))}get multiple(){var t;return((t=_(this,"data-multiple"))!=null?t:Rt)!==Rt}set multiple(t){_(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=_(this,"data-creatable"))!=null?t:Rt)!==Rt}set creatable(t){_(this,"data-creatable",t?"":null)}get control(){var t;return(t=this._control)!=null&&t.isConnected||(this._control=this.querySelector("input")),this._control}get list(){var t;return(t=this._list)!=null&&t.isConnected||(this._list=this.querySelector("u-datalist,datalist")),this._list}get clear(){var t;return(t=this._clear)!=null&&t.isConnected||(this._clear=this.querySelector("del")),this._clear}get items(){return this._items||(this._items=this.getElementsByTagName("data")),this._items}get options(){var t,e;if(!this._options){const n=((t=this.list)==null?void 0:t.nodeName)==="U-DATALIST"?"u-option":"option";this._options=(e=this.list)==null?void 0:e.getElementsByTagName(n)}return this._options}get values(){return[...this.items].map(({value:t})=>t)}},tt=t=>{var e;return((e=t?.textContent)==null?void 0:e.trim())||""},he=t=>t instanceof HTMLDataElement,ge=({control:t})=>t?.disabled||t?.readOnly||!1,Pt=(t,e)=>{var n;const{_focus:o,_texts:i,items:s,control:r,list:a,multiple:c}=t;if(!r||!a)return;const l=Xi(r),d=l.endsWith(fn)?_(r,"data-label"):l;_(r,"data-label",d);let u=`${d}${c?`, ${s.length?i.found.replace("%d",`${s.length}`):i.empty}`:""}`;const p=[];for(const{addedNodes:g,removedNodes:E}of e?.detail||[]){for(const w of g)he(w)&&p.unshift(w);for(const w of E)he(w)&&p.push(w)}const f=c?p.length===1:p[0]===o;if(o&&f){const g=_(r,"aria-expanded"),E=_(r,"inputmode"),w=he(o)?r:o,S=!p[0].isConnected;t._speak=`${i[S?"removed":"added"]} ${tt(p[0])}, `,(Zi||o===r)&&ue(t._speak),r!==w&&(_(r,"aria-expanded",null),_(r,"inputmode","none"),u=" ",r.focus()),setTimeout(()=>{var D;_(r,"aria-expanded",g),_(r,"inputmode",S?"none":E),(D=w?.focus)==null||D.call(w),_(r,"inputmode",E),t._speak="",Ji?It(t,"blur",()=>Pt(t),un):setTimeout(Pt,100,t)},100)}let b=0;const h=t.querySelector("select"),y=ge(t)?"":`${i.remove}, `;for(const g of s){const E=h?.options[b],w=tt(g),S=g.value||w,D=`${t._speak}${w}, ${y}${++b} ${i.of} ${s.length}`;_(g,"role","button"),_(g,"value",S),_(g,"tabindex","-1"),_(g,"aria-label",D),E?Object.assign(E,{textContent:w,value:S}):h?.appendChild(new Option(w,S,!0,!0))}h&&_(h,"multiple",c?"":null);for(const g of[...h?.options||[]].slice(b))g.remove();!c&&b>1&&console.warn("u-combobox: Multiple <data> found in single mode."),_(a,"aria-multiselectable",`${c}`),_(r,"list",ln(a)),_(r,"aria-label",`${t._speak}${u}${fn}`),a.hasAttribute("popover")&&(_(r,"popovertarget",ln(a)),_(a,"popover","manual"));const v=tt(s[0]);v!==t._item&&Nt(t),t._item=v,pn(t),mn(t),(n=de(t))==null||n.takeRecords()},pn=t=>{var e;t.clear&&_(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value)||ge(t))},mn=t=>{var e;const{_speak:n,options:o=[],values:i}=t;for(const s of o){const r=(e=_(s,"value"))!=null?e:tt(s);_(s,"aria-label",n?`${n}${tt(s)}`:null),_(s,"selected",i.includes(r)?"":null)}},Nt=t=>{const{multiple:e,control:n,items:o}=t,i=tt(o[0]);!e&&n&&i!==n.value&&cn(n,i,i?"insertText":"deleteContent")},be=(t,e=!0)=>{var n;const{_texts:o,options:i=[],creatable:s,control:r,items:a,multiple:c}=t,l=((n=r?.value)==null?void 0:n.trim())||"",d=l.toLowerCase()||null;let u=[...i].find(f=>(_(f,"label")||tt(f)).trim().toLowerCase()===d);const p={bubbles:!0,cancelable:!0,detail:u};if(t.dispatchEvent(new CustomEvent("comboboxbeforematch",p))||(u=[...i].find(f=>f.selected)),e)return mn(t),u?dt(t,u,!1):s&&l?dt(t,{value:l},!1):(!c&&!l&&a[0]?dt(t,a[0]):Nt(t),ue(o.invalid));for(const f of i)f.selected=f===u},dt=(t,e,n=!0)=>{const{control:o,items:i,multiple:s}=t,r=Mt("data",e.label||e.value,{value:e.value}),a=[...i].find(d=>d.value===e.value),c={bubbles:!0,cancelable:!0,detail:a||r};if(a&&!n)return Nt(t);if(t.dispatchEvent(new CustomEvent("comboboxbeforeselect",c))){if(!s)for(const d of[...i])d.remove();a?a.remove():o?.insertAdjacentElement("beforebegin",r),t.dispatchEvent(new CustomEvent("comboboxafterselect",c))}},ts=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),ue()},es=t=>pe()||setTimeout(ns,0,t),ns=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t.multiple||be(t),t._focus=void 0)},os=(t,e)=>{const{clientX:n,clientY:o,target:i}=e,{clear:s,control:r,items:a}=t;if(s?.contains(i))return r&&cn(r,"","deleteContentBackward"),r?.focus();for(const c of a){const{top:l,right:d,bottom:u,left:p}=c.getBoundingClientRect();if(c.contains(i))return dt(t,c);if(o>=l&&o<=u&&n>=p&&n<=d)return c.focus()}i===t&&r?.focus()},is=(t,e)=>{var n;const{options:o=[],control:i,multiple:s}=t,r=((n=i?.value)==null?void 0:n.trim())||"";if(e instanceof InputEvent?!e.inputType||e.inputType==="insertReplacementText":!!r){e.stopImmediatePropagation(),i&&(i.value=t._value);for(const c of o)if(c.value&&c.value===r)return dt(t,c,s)}else s||be(t,!1);pn(t)},ss=(t,e)=>{var n;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;const{clear:o,control:i,items:s}=t,{key:r,repeat:a,target:c}=e,l=i&&i===c,d=l&&i?.selectionEnd;let u=l?s.length:[...s].indexOf(c);if(l&&r==="Tab"&&o&&!o.hidden&&(e.preventDefault(),o.tabIndex=-1,o.focus(),It(o,"blur",()=>_(o,"tabindex",null),un)),!(!l&&zi(e)||u===-1)){if(r==="ArrowRight"&&!l)u+=1;else if(r==="ArrowLeft"&&!d)u-=1;else if(r==="Enter"&&l){const p=_(i,"form");return _(i,"form","#"),requestAnimationFrame(()=>_(i,"form",p)),be(t)}else if((r==="Backspace"||r==="Delete")&&!d){if(e.preventDefault(),!a&&s[u])return dt(t,s[u]);l&&(u-=1)}else return l||i?.focus();e.preventDefault(),(n=s[Math.max(0,u)]||i)==null||n.focus()}};Yi.define("u-combobox",me);var ve=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",rs=ve&&/android/i.test(navigator.userAgent),hn;ve&&/^Mac/i.test(((hn=navigator.userAgentData)==null?void 0:hn.platform)||navigator.platform);var as=`${rs?"data":"aria"}-labelledby`,_e=":host(:not([hidden])) { display: block }",Ht=typeof HTMLElement>"u"?class{}:HTMLElement;function C(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var gn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},ls=(t,...e)=>gn("add",t,e),cs=(t,...e)=>gn("remove",t,e),Bt=(t,e)=>t.shadowRoot||t.attachShadow({mode:"open"}).append(yn("slot"),yn("style",e)),Ft=new WeakMap,bn=(t,e)=>{if(e===void 0)return Ft.get(t);try{Ft.get(t).disconnect(),Ft.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),Ft.set(t,n)}},ds=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},vn=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},us=0,_n=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++us).toString(32)}`),t.id):"",yn=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},Ut={define:(t,e)=>!ve||window.customElements.get(t)||window.customElements.define(t,e)},fs=_e,ps=_e,ms=_e,hs=':host(:not([hidden])) { display: inline-block; cursor: pointer }:host([aria-disabled="true"]) { cursor: default }',Vt="aria-controls",ut="aria-selected",wn=class extends Ht{constructor(){super(),Bt(this,fs)}get tabList(){return qt("u-tablist",this)[0]||null}get selectedIndex(){return Wt(this.tabs)}set selectedIndex(t){Ee(this.tabs[t])}get tabs(){return qt("u-tab",this)}get panels(){return qt("u-tabpanel",this)}},En=class extends Ht{constructor(){super(),Bt(this,ps)}connectedCallback(){C(this,"role","tablist"),ls(this,"click,keydown",this),bn(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){cs(this,"click,keydown",this),bn(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s?.setAttribute(ut,"true")}const{key:e}=t,n=[...this.tabs],o=n.findIndex(s=>s.contains(t.target));let i=o;if(!(t.defaultPrevented||o===-1)&&(t.type==="click"&&Ee(n[o]),t.type==="keydown"&&!ds(t))){if(e==="ArrowDown"||e==="ArrowRight")i=(o+1)%n.length;else if(e==="ArrowUp"||e==="ArrowLeft")i=(o||n.length)-1;else if(e==="End")i=n.length-1;else if(e==="Home")i=0;else if(e==="Tab")i=Wt(n);else return;setTimeout(()=>{n[o].tabIndex=-1,n[i].tabIndex=0}),e!=="Tab"&&(t.preventDefault(),n[i].focus())}}get tabsElement(){return this.closest("u-tabs")}get tabs(){return this.querySelectorAll("u-tab")}get selectedIndex(){return Wt(this.tabs)}set selectedIndex(t){Ee(this.tabs[t])}},ye=!1,xn=class extends Ht{static get observedAttributes(){return["id",ut,Vt]}constructor(){super(),Bt(this,hs)}connectedCallback(){C(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!ye&&this.selected&&this.tabList){ye=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=qt("u-tabpanel",this.tabsElement||this),n=we(this,e[t.indexOf(this)]);n&&C(n,as,_n(this)),t.forEach((o,i)=>{const s=we(o,e[i]);o.tabIndex=o===this?0:-1,C(o,ut,`${o===this}`),C(o,Vt,s?.id||null),s&&(s.hidden=s!==n)}),ye=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return t?.nodeName==="U-TABLIST"?t:null}get selected(){return C(this,ut)==="true"}set selected(t){C(this,ut,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return we(this)}},Sn=class extends Ht{static get observedAttributes(){return["hidden"]}constructor(){super(),Bt(this,ms)}connectedCallback(){C(this,"role","tabpanel"),this.hidden=Wt(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){const t=this.hidden;C(this,"aria-hidden",`${t}`),C(this,"tabindex",t||gs(this.firstChild)?null:"0")}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${Vt}="${this.id}"]`;return vn(this).querySelectorAll(t)}},qt=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),we=(t,e)=>{const n=C(t,Vt)||_n(e),o=vn(t).getElementById(n);return o?.nodeName==="U-TABPANEL"?o:null},Wt=t=>[...t].findIndex(e=>C(e,ut)==="true"),Ee=t=>t&&C(t,"aria-disabled")!=="true"&&C(t,"aria-selected","true"),gs=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');Ut.define("u-tabs",wn),Ut.define("u-tablist",En),Ut.define("u-tab",xn),Ut.define("u-tabpanel",Sn);const bs="2.1.9",Tn="_alert_1run0_1 _ds-alert_alzsp_1",$n="_app_1run0_1",Cn="_sticky_1run0_1",An="_avatar_1run0_1 _ds-avatar_alzsp_1",Ln="_badge_1run0_1",kn="_breadcrumbs_1run0_1 _ds-breadcrumbs_alzsp_1",In="_button_1run0_1 _ds-button_alzsp_1",On="_card_1run0_1",Mn="_group_1run0_1",Rn="_chip_1run0_1 _ds-chip_alzsp_1",Dn="_details_1run0_1 _ds-details_alzsp_1",Pn="_dialog_1run0_1 _ds-dialog_alzsp_1",Nn="__drawer_1run0_1",Hn="_divider_1run0_1",Bn="_errorsummary_1run0_1 _ds-error-summary_alzsp_1",Fn="__errorsummary_1run0_1",Un="_field_1run0_1 _ds-field_alzsp_1",Vn="__datalist_1run0_1",qn="_affixes_1run0_1 _ds-field-affixes_alzsp_1",Wn="_fieldset_1run0_1 _ds-fieldset_alzsp_1",zn="_heading_1run0_1 _ds-heading_alzsp_1",jn="_ingress_1run0_1",Kn="_muted_1run0_1",Yn="_info_1run0_1",Xn="_prose_1run0_1",Gn="_helptext_1run0_1 _ds-focus_alzsp_1",Qn="_input_1run0_1 _ds-input_alzsp_1",Jn="_grid_1run0_1",Zn="_flex_1run0_1",to="_link_1run0_1",eo="_logo_1run0_1",no="_pagination_1run0_1 _ds-pagination_alzsp_1",oo="_popover_1run0_1",io="_progress_1run0_1",so="__indeterminate_1run0_1",ro="_skeleton_1run0_1 _ds-skeleton_alzsp_1",ao="__skeleton_1run0_1",lo="_spinner_1run0_1",co="_steps_1run0_1",uo="_table_1run0_1 _ds-table_alzsp_1",fo="__scrollShadow_1run0_1",po="_tabs_1run0_1 _ds-tabs_alzsp_1",mo="__scrollMask_1run0_1",ho="_tag_1run0_1 _ds-tag_alzsp_1",go="_togglegroup_1run0_1",bo="__tooltip_1run0_1",vo="_validation_1run0_1 _ds-validation-message_alzsp_1",_o="_body_1run0_153",yo="__checked_1run0_1",T={alert:Tn,app:$n,sticky:Cn,avatar:An,badge:Ln,breadcrumbs:kn,button:In,card:On,group:Mn,chip:Rn,details:Dn,dialog:Pn,_drawer:Nn,divider:Hn,errorsummary:Bn,_errorsummary:Fn,field:Un,_datalist:Vn,affixes:qn,fieldset:Wn,heading:zn,ingress:jn,muted:Kn,info:Yn,prose:Xn,helptext:Gn,input:Qn,grid:Jn,flex:Zn,link:to,logo:eo,pagination:no,popover:oo,progress:io,_indeterminate:so,skeleton:ro,_skeleton:ao,spinner:lo,steps:co,table:uo,_scrollShadow:fo,tabs:po,_scrollMask:mo,tag:ho,togglegroup:go,_tooltip:bo,validation:vo,body:_o,_checked:yo},vs=Object.freeze(Object.defineProperty({__proto__:null,_checked:yo,_datalist:Vn,_drawer:Nn,_errorsummary:Fn,_indeterminate:so,_scrollMask:mo,_scrollShadow:fo,_skeleton:ao,_tooltip:bo,affixes:qn,alert:Tn,app:$n,avatar:An,badge:Ln,body:_o,breadcrumbs:kn,button:In,card:On,chip:Rn,default:T,details:Dn,dialog:Pn,divider:Hn,errorsummary:Bn,field:Un,fieldset:Wn,flex:Zn,grid:Jn,group:Mn,heading:zn,helptext:Gn,info:Yn,ingress:jn,input:Qn,link:to,logo:eo,muted:Kn,pagination:no,popover:oo,progress:io,prose:Xn,skeleton:ro,spinner:lo,steps:co,sticky:Cn,table:uo,tabs:po,tag:ho,togglegroup:go,validation:vo},Symbol.toStringTag,{value:"Module"})),ft=Math.min,k=Math.max,zt=Math.round,jt=Math.floor,V=t=>({x:t,y:t}),_s={left:"right",right:"left",bottom:"top",top:"bottom"},ys={start:"end",end:"start"};function wo(t,e,n){return k(t,ft(e,n))}function Kt(t,e){return typeof t=="function"?t(e):t}function et(t){return t.split("-")[0]}function Yt(t){return t.split("-")[1]}function Eo(t){return t==="x"?"y":"x"}function xo(t){return t==="y"?"height":"width"}const ws=new Set(["top","bottom"]);function X(t){return ws.has(et(t))?"y":"x"}function So(t){return Eo(X(t))}function Es(t,e,n){n===void 0&&(n=!1);const o=Yt(t),i=So(t),s=xo(i);let r=i==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return e.reference[s]>e.floating[s]&&(r=Xt(r)),[r,Xt(r)]}function xs(t){const e=Xt(t);return[xe(t),e,xe(e)]}function xe(t){return t.replace(/start|end/g,e=>ys[e])}const To=["left","right"],$o=["right","left"],Ss=["top","bottom"],Ts=["bottom","top"];function $s(t,e,n){switch(t){case"top":case"bottom":return n?e?$o:To:e?To:$o;case"left":case"right":return e?Ss:Ts;default:return[]}}function Cs(t,e,n,o){const i=Yt(t);let s=$s(et(t),n==="start",o);return i&&(s=s.map(r=>r+"-"+i),e&&(s=s.concat(s.map(xe)))),s}function Xt(t){return t.replace(/left|right|bottom|top/g,e=>_s[e])}function As(t){return{top:0,right:0,bottom:0,left:0,...t}}function Ls(t){return typeof t!="number"?As(t):{top:t,right:t,bottom:t,left:t}}function Gt(t){const{x:e,y:n,width:o,height:i}=t;return{width:o,height:i,top:n,left:e,right:e+o,bottom:n+i,x:e,y:n}}function Co(t,e,n){let{reference:o,floating:i}=t;const s=X(e),r=So(e),a=xo(r),c=et(e),l=s==="y",d=o.x+o.width/2-i.width/2,u=o.y+o.height/2-i.height/2,p=o[a]/2-i[a]/2;let f;switch(c){case"top":f={x:d,y:o.y-i.height};break;case"bottom":f={x:d,y:o.y+o.height};break;case"right":f={x:o.x+o.width,y:u};break;case"left":f={x:o.x-i.width,y:u};break;default:f={x:o.x,y:o.y}}switch(Yt(e)){case"start":f[r]-=p*(n&&l?-1:1);break;case"end":f[r]+=p*(n&&l?-1:1);break}return f}const ks=async(t,e,n)=>{const{placement:o="bottom",strategy:i="absolute",middleware:s=[],platform:r}=n,a=s.filter(Boolean),c=await(r.isRTL==null?void 0:r.isRTL(e));let l=await r.getElementRects({reference:t,floating:e,strategy:i}),{x:d,y:u}=Co(l,o,c),p=o,f={},b=0;for(let h=0;h<a.length;h++){const{name:y,fn:v}=a[h],{x:g,y:E,data:w,reset:S}=await v({x:d,y:u,initialPlacement:o,placement:p,strategy:i,middlewareData:f,rects:l,platform:r,elements:{reference:t,floating:e}});d=g??d,u=E??u,f={...f,[y]:{...f[y],...w}},S&&b<=50&&(b++,typeof S=="object"&&(S.placement&&(p=S.placement),S.rects&&(l=S.rects===!0?await r.getElementRects({reference:t,floating:e,strategy:i}):S.rects),{x:d,y:u}=Co(l,p,c)),h=-1)}return{x:d,y:u,placement:p,strategy:i,middlewareData:f}};async function Se(t,e){var n;e===void 0&&(e={});const{x:o,y:i,platform:s,rects:r,elements:a,strategy:c}=t,{boundary:l="clippingAncestors",rootBoundary:d="viewport",elementContext:u="floating",altBoundary:p=!1,padding:f=0}=Kt(e,t),b=Ls(f),y=a[p?u==="floating"?"reference":"floating":u],v=Gt(await s.getClippingRect({element:(n=await(s.isElement==null?void 0:s.isElement(y)))==null||n?y:y.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(a.floating)),boundary:l,rootBoundary:d,strategy:c})),g=u==="floating"?{x:o,y:i,width:r.floating.width,height:r.floating.height}:r.reference,E=await(s.getOffsetParent==null?void 0:s.getOffsetParent(a.floating)),w=await(s.isElement==null?void 0:s.isElement(E))?await(s.getScale==null?void 0:s.getScale(E))||{x:1,y:1}:{x:1,y:1},S=Gt(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:a,rect:g,offsetParent:E,strategy:c}):g);return{top:(v.top-S.top+b.top)/w.y,bottom:(S.bottom-v.bottom+b.bottom)/w.y,left:(v.left-S.left+b.left)/w.x,right:(S.right-v.right+b.right)/w.x}}const Is=function(t){return t===void 0&&(t={}),{name:"flip",options:t,async fn(e){var n,o;const{placement:i,middlewareData:s,rects:r,initialPlacement:a,platform:c,elements:l}=e,{mainAxis:d=!0,crossAxis:u=!0,fallbackPlacements:p,fallbackStrategy:f="bestFit",fallbackAxisSideDirection:b="none",flipAlignment:h=!0,...y}=Kt(t,e);if((n=s.arrow)!=null&&n.alignmentOffset)return{};const v=et(i),g=X(a),E=et(a)===a,w=await(c.isRTL==null?void 0:c.isRTL(l.floating)),S=p||(E||!h?[Xt(a)]:xs(a)),D=b!=="none";!p&&D&&S.push(...Cs(a,h,b,w));const z=[a,...S],rt=await Se(e,y),at=[];let Y=((o=s.flip)==null?void 0:o.overflows)||[];if(d&&at.push(rt[v]),u){const lt=Es(i,r,w);at.push(rt[lt[0]],rt[lt[1]])}if(Y=[...Y,{placement:i,overflows:at}],!at.every(lt=>lt<=0)){var Ct,At;const lt=(((Ct=s.flip)==null?void 0:Ct.index)||0)+1,en=z[lt];if(en&&(!(u==="alignment"?g!==X(en):!1)||Y.every(U=>X(U.placement)===g?U.overflows[0]>0:!0)))return{data:{index:lt,overflows:Y},reset:{placement:en}};let kt=(At=Y.filter(ct=>ct.overflows[0]<=0).sort((ct,U)=>ct.overflows[1]-U.overflows[1])[0])==null?void 0:At.placement;if(!kt)switch(f){case"bestFit":{var Lt;const ct=(Lt=Y.filter(U=>{if(D){const J=X(U.placement);return J===g||J==="y"}return!0}).map(U=>[U.placement,U.overflows.filter(J=>J>0).reduce((J,Ba)=>J+Ba,0)]).sort((U,J)=>U[1]-J[1])[0])==null?void 0:Lt[0];ct&&(kt=ct);break}case"initialPlacement":kt=a;break}if(i!==kt)return{reset:{placement:kt}}}return{}}}},Os=function(t){return t===void 0&&(t={}),{name:"shift",options:t,async fn(e){const{x:n,y:o,placement:i}=e,{mainAxis:s=!0,crossAxis:r=!1,limiter:a={fn:y=>{let{x:v,y:g}=y;return{x:v,y:g}}},...c}=Kt(t,e),l={x:n,y:o},d=await Se(e,c),u=X(et(i)),p=Eo(u);let f=l[p],b=l[u];if(s){const y=p==="y"?"top":"left",v=p==="y"?"bottom":"right",g=f+d[y],E=f-d[v];f=wo(g,f,E)}if(r){const y=u==="y"?"top":"left",v=u==="y"?"bottom":"right",g=b+d[y],E=b-d[v];b=wo(g,b,E)}const h=a.fn({...e,[p]:f,[u]:b});return{...h,data:{x:h.x-n,y:h.y-o,enabled:{[p]:s,[u]:r}}}}}},Ms=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){var n,o;const{placement:i,rects:s,platform:r,elements:a}=e,{apply:c=()=>{},...l}=Kt(t,e),d=await Se(e,l),u=et(i),p=Yt(i),f=X(i)==="y",{width:b,height:h}=s.floating;let y,v;u==="top"||u==="bottom"?(y=u,v=p===(await(r.isRTL==null?void 0:r.isRTL(a.floating))?"start":"end")?"left":"right"):(v=u,y=p==="end"?"top":"bottom");const g=h-d.top-d.bottom,E=b-d.left-d.right,w=ft(h-d[y],g),S=ft(b-d[v],E),D=!e.middlewareData.shift;let z=w,rt=S;if((n=e.middlewareData.shift)!=null&&n.enabled.x&&(rt=E),(o=e.middlewareData.shift)!=null&&o.enabled.y&&(z=g),D&&!p){const Y=k(d.left,0),Ct=k(d.right,0),At=k(d.top,0),Lt=k(d.bottom,0);f?rt=b-2*(Y!==0||Ct!==0?Y+Ct:k(d.left,d.right)):z=h-2*(At!==0||Lt!==0?At+Lt:k(d.top,d.bottom))}await c({...e,availableWidth:rt,availableHeight:z});const at=await r.getDimensions(a.floating);return b!==at.width||h!==at.height?{reset:{rects:!0}}:{}}}};function Qt(){return typeof window<"u"}function pt(t){return Ao(t)?(t.nodeName||"").toLowerCase():"#document"}function I(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function q(t){var e;return(e=(Ao(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function Ao(t){return Qt()?t instanceof Node||t instanceof I(t).Node:!1}function P(t){return Qt()?t instanceof Element||t instanceof I(t).Element:!1}function W(t){return Qt()?t instanceof HTMLElement||t instanceof I(t).HTMLElement:!1}function Lo(t){return!Qt()||typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof I(t).ShadowRoot}const Rs=new Set(["inline","contents"]);function _t(t){const{overflow:e,overflowX:n,overflowY:o,display:i}=N(t);return/auto|scroll|overlay|hidden|clip/.test(e+o+n)&&!Rs.has(i)}const Ds=new Set(["table","td","th"]);function Ps(t){return Ds.has(pt(t))}const Ns=[":popover-open",":modal"];function Jt(t){return Ns.some(e=>{try{return t.matches(e)}catch{return!1}})}const Hs=["transform","translate","scale","rotate","perspective"],Bs=["transform","translate","scale","rotate","perspective","filter"],Fs=["paint","layout","strict","content"];function Te(t){const e=$e(),n=P(t)?N(t):t;return Hs.some(o=>n[o]?n[o]!=="none":!1)||(n.containerType?n.containerType!=="normal":!1)||!e&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!e&&(n.filter?n.filter!=="none":!1)||Bs.some(o=>(n.willChange||"").includes(o))||Fs.some(o=>(n.contain||"").includes(o))}function Us(t){let e=G(t);for(;W(e)&&!mt(e);){if(Te(e))return e;if(Jt(e))return null;e=G(e)}return null}function $e(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const Vs=new Set(["html","body","#document"]);function mt(t){return Vs.has(pt(t))}function N(t){return I(t).getComputedStyle(t)}function Zt(t){return P(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function G(t){if(pt(t)==="html")return t;const e=t.assignedSlot||t.parentNode||Lo(t)&&t.host||q(t);return Lo(e)?e.host:e}function ko(t){const e=G(t);return mt(e)?t.ownerDocument?t.ownerDocument.body:t.body:W(e)&&_t(e)?e:ko(e)}function yt(t,e,n){var o;e===void 0&&(e=[]),n===void 0&&(n=!0);const i=ko(t),s=i===((o=t.ownerDocument)==null?void 0:o.body),r=I(i);if(s){const a=Ce(r);return e.concat(r,r.visualViewport||[],_t(i)?i:[],a&&n?yt(a):[])}return e.concat(i,yt(i,[],n))}function Ce(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function Io(t){const e=N(t);let n=parseFloat(e.width)||0,o=parseFloat(e.height)||0;const i=W(t),s=i?t.offsetWidth:n,r=i?t.offsetHeight:o,a=zt(n)!==s||zt(o)!==r;return a&&(n=s,o=r),{width:n,height:o,$:a}}function Ae(t){return P(t)?t:t.contextElement}function ht(t){const e=Ae(t);if(!W(e))return V(1);const n=e.getBoundingClientRect(),{width:o,height:i,$:s}=Io(e);let r=(s?zt(n.width):n.width)/o,a=(s?zt(n.height):n.height)/i;return(!r||!Number.isFinite(r))&&(r=1),(!a||!Number.isFinite(a))&&(a=1),{x:r,y:a}}const qs=V(0);function Oo(t){const e=I(t);return!$e()||!e.visualViewport?qs:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function Ws(t,e,n){return e===void 0&&(e=!1),!n||e&&n!==I(t)?!1:e}function nt(t,e,n,o){e===void 0&&(e=!1),n===void 0&&(n=!1);const i=t.getBoundingClientRect(),s=Ae(t);let r=V(1);e&&(o?P(o)&&(r=ht(o)):r=ht(t));const a=Ws(s,n,o)?Oo(s):V(0);let c=(i.left+a.x)/r.x,l=(i.top+a.y)/r.y,d=i.width/r.x,u=i.height/r.y;if(s){const p=I(s),f=o&&P(o)?I(o):o;let b=p,h=Ce(b);for(;h&&o&&f!==b;){const y=ht(h),v=h.getBoundingClientRect(),g=N(h),E=v.left+(h.clientLeft+parseFloat(g.paddingLeft))*y.x,w=v.top+(h.clientTop+parseFloat(g.paddingTop))*y.y;c*=y.x,l*=y.y,d*=y.x,u*=y.y,c+=E,l+=w,b=I(h),h=Ce(b)}}return Gt({width:d,height:u,x:c,y:l})}function te(t,e){const n=Zt(t).scrollLeft;return e?e.left+n:nt(q(t)).left+n}function Mo(t,e){const n=t.getBoundingClientRect(),o=n.left+e.scrollLeft-te(t,n),i=n.top+e.scrollTop;return{x:o,y:i}}function zs(t){let{elements:e,rect:n,offsetParent:o,strategy:i}=t;const s=i==="fixed",r=q(o),a=e?Jt(e.floating):!1;if(o===r||a&&s)return n;let c={scrollLeft:0,scrollTop:0},l=V(1);const d=V(0),u=W(o);if((u||!u&&!s)&&((pt(o)!=="body"||_t(r))&&(c=Zt(o)),W(o))){const f=nt(o);l=ht(o),d.x=f.x+o.clientLeft,d.y=f.y+o.clientTop}const p=r&&!u&&!s?Mo(r,c):V(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+d.x+p.x,y:n.y*l.y-c.scrollTop*l.y+d.y+p.y}}function js(t){return Array.from(t.getClientRects())}function Ks(t){const e=q(t),n=Zt(t),o=t.ownerDocument.body,i=k(e.scrollWidth,e.clientWidth,o.scrollWidth,o.clientWidth),s=k(e.scrollHeight,e.clientHeight,o.scrollHeight,o.clientHeight);let r=-n.scrollLeft+te(t);const a=-n.scrollTop;return N(o).direction==="rtl"&&(r+=k(e.clientWidth,o.clientWidth)-i),{width:i,height:s,x:r,y:a}}const Ro=25;function Ys(t,e){const n=I(t),o=q(t),i=n.visualViewport;let s=o.clientWidth,r=o.clientHeight,a=0,c=0;if(i){s=i.width,r=i.height;const d=$e();(!d||d&&e==="fixed")&&(a=i.offsetLeft,c=i.offsetTop)}const l=te(o);if(l<=0){const d=o.ownerDocument,u=d.body,p=getComputedStyle(u),f=d.compatMode==="CSS1Compat"&&parseFloat(p.marginLeft)+parseFloat(p.marginRight)||0,b=Math.abs(o.clientWidth-u.clientWidth-f);b<=Ro&&(s-=b)}else l<=Ro&&(s+=l);return{width:s,height:r,x:a,y:c}}const Xs=new Set(["absolute","fixed"]);function Gs(t,e){const n=nt(t,!0,e==="fixed"),o=n.top+t.clientTop,i=n.left+t.clientLeft,s=W(t)?ht(t):V(1),r=t.clientWidth*s.x,a=t.clientHeight*s.y,c=i*s.x,l=o*s.y;return{width:r,height:a,x:c,y:l}}function Do(t,e,n){let o;if(e==="viewport")o=Ys(t,n);else if(e==="document")o=Ks(q(t));else if(P(e))o=Gs(e,n);else{const i=Oo(t);o={x:e.x-i.x,y:e.y-i.y,width:e.width,height:e.height}}return Gt(o)}function Po(t,e){const n=G(t);return n===e||!P(n)||mt(n)?!1:N(n).position==="fixed"||Po(n,e)}function Qs(t,e){const n=e.get(t);if(n)return n;let o=yt(t,[],!1).filter(a=>P(a)&&pt(a)!=="body"),i=null;const s=N(t).position==="fixed";let r=s?G(t):t;for(;P(r)&&!mt(r);){const a=N(r),c=Te(r);!c&&a.position==="fixed"&&(i=null),(s?!c&&!i:!c&&a.position==="static"&&!!i&&Xs.has(i.position)||_t(r)&&!c&&Po(t,r))?o=o.filter(d=>d!==r):i=a,r=G(r)}return e.set(t,o),o}function Js(t){let{element:e,boundary:n,rootBoundary:o,strategy:i}=t;const r=[...n==="clippingAncestors"?Jt(e)?[]:Qs(e,this._c):[].concat(n),o],a=r[0],c=r.reduce((l,d)=>{const u=Do(e,d,i);return l.top=k(u.top,l.top),l.right=ft(u.right,l.right),l.bottom=ft(u.bottom,l.bottom),l.left=k(u.left,l.left),l},Do(e,a,i));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function Zs(t){const{width:e,height:n}=Io(t);return{width:e,height:n}}function tr(t,e,n){const o=W(e),i=q(e),s=n==="fixed",r=nt(t,!0,s,e);let a={scrollLeft:0,scrollTop:0};const c=V(0);function l(){c.x=te(i)}if(o||!o&&!s)if((pt(e)!=="body"||_t(i))&&(a=Zt(e)),o){const f=nt(e,!0,s,e);c.x=f.x+e.clientLeft,c.y=f.y+e.clientTop}else i&&l();s&&!o&&i&&l();const d=i&&!o&&!s?Mo(i,a):V(0),u=r.left+a.scrollLeft-c.x-d.x,p=r.top+a.scrollTop-c.y-d.y;return{x:u,y:p,width:r.width,height:r.height}}function Le(t){return N(t).position==="static"}function No(t,e){if(!W(t)||N(t).position==="fixed")return null;if(e)return e(t);let n=t.offsetParent;return q(t)===n&&(n=n.ownerDocument.body),n}function Ho(t,e){const n=I(t);if(Jt(t))return n;if(!W(t)){let i=G(t);for(;i&&!mt(i);){if(P(i)&&!Le(i))return i;i=G(i)}return n}let o=No(t,e);for(;o&&Ps(o)&&Le(o);)o=No(o,e);return o&&mt(o)&&Le(o)&&!Te(o)?n:o||Us(t)||n}const er=async function(t){const e=this.getOffsetParent||Ho,n=this.getDimensions,o=await n(t.floating);return{reference:tr(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function nr(t){return N(t).direction==="rtl"}const or={convertOffsetParentRelativeRectToViewportRelativeRect:zs,getDocumentElement:q,getClippingRect:Js,getOffsetParent:Ho,getElementRects:er,getClientRects:js,getDimensions:Zs,getScale:ht,isElement:P,isRTL:nr};function Bo(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}function ir(t,e){let n=null,o;const i=q(t);function s(){var a;clearTimeout(o),(a=n)==null||a.disconnect(),n=null}function r(a,c){a===void 0&&(a=!1),c===void 0&&(c=1),s();const l=t.getBoundingClientRect(),{left:d,top:u,width:p,height:f}=l;if(a||e(),!p||!f)return;const b=jt(u),h=jt(i.clientWidth-(d+p)),y=jt(i.clientHeight-(u+f)),v=jt(d),E={rootMargin:-b+"px "+-h+"px "+-y+"px "+-v+"px",threshold:k(0,ft(1,c))||1};let w=!0;function S(D){const z=D[0].intersectionRatio;if(z!==c){if(!w)return r();z?r(!1,z):o=setTimeout(()=>{r(!1,1e-7)},1e3)}z===1&&!Bo(l,t.getBoundingClientRect())&&r(),w=!1}try{n=new IntersectionObserver(S,{...E,root:i.ownerDocument})}catch{n=new IntersectionObserver(S,E)}n.observe(t)}return r(!0),s}function sr(t,e,n,o){o===void 0&&(o={});const{ancestorScroll:i=!0,ancestorResize:s=!0,elementResize:r=typeof ResizeObserver=="function",layoutShift:a=typeof IntersectionObserver=="function",animationFrame:c=!1}=o,l=Ae(t),d=i||s?[...l?yt(l):[],...yt(e)]:[];d.forEach(v=>{i&&v.addEventListener("scroll",n,{passive:!0}),s&&v.addEventListener("resize",n)});const u=l&&a?ir(l,n):null;let p=-1,f=null;r&&(f=new ResizeObserver(v=>{let[g]=v;g&&g.target===l&&f&&(f.unobserve(e),cancelAnimationFrame(p),p=requestAnimationFrame(()=>{var E;(E=f)==null||E.observe(e)})),n()}),l&&!c&&f.observe(l),f.observe(e));let b,h=c?nt(t):null;c&&y();function y(){const v=nt(t);h&&!Bo(h,v)&&n(),h=v,b=requestAnimationFrame(y)}return n(),()=>{var v;d.forEach(g=>{i&&g.removeEventListener("scroll",n),s&&g.removeEventListener("resize",n)}),u?.(),(v=f)==null||v.disconnect(),f=null,c&&cancelAnimationFrame(b)}}const ke=Os,Ie=Is,Fo=Ms,rr=(t,e,n)=>{const o=new Map,i={platform:or,...n},s={...i.platform,_c:o};return ks(t,e,{...i,platform:s})},M={capture:!0,passive:!0},ee=typeof window<"u"&&typeof document<"u";function ar(t,e){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>t(...o),e)}}function m(t,e,n){return n===void 0?t.getAttribute(e)??null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}let lr=0;const cr=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function ne(t){return t.id||(t.id=`${cr}${++lr}`),t.id}const Uo=(t,e,[...n])=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},$=(t,...e)=>{wt&&(t===window||t===document)&&wt.push(()=>dr(t,...e)),Uo("add",t,e)},dr=(t,...e)=>Uo("remove",t,e);let wt=null;const R=t=>{if(!ee)return;window._mtdsUnbindEvents||(window._mtdsUnbindEvents=new Map);const e=()=>requestAnimationFrame(()=>{const n=String(t).replace(/(\n|\s)/g,"");window._mtdsUnbindEvents?.get(n)?.forEach(o=>{o()}),wt=[],t(),window._mtdsUnbindEvents?.set(n,wt?.slice(0)),wt=null});document.readyState==="complete"?e():$(window,"load",e)},Oe=new WeakMap;function ot(t,e,n){Oe.get(t)?.(),Oe.delete(t),e&&Oe.set(t,sr(e,t,()=>{if(!t.isConnected||!e.isConnected||t.hidden)return ot(t,!1);rr(e,t,n).then(({x:o,y:i})=>{t.style.left=`${o}px`,t.style.top=`${i}px`})}))}function Vo(t){let e=0;const n=()=>setTimeout(o,200),o=()=>{t([],i),i.takeRecords(),e=0},i=new MutationObserver(()=>{e||(e=requestAnimationFrame(n))});return i}const Me=new WeakMap,gt=(t,e,n)=>{const o=t.getElementsByClassName(e),i=Me.get(t)||[];i.length||(Me.set(t,i),Vo((s,r)=>{if(t.isConnected&&i?.length)for(const a of i)a();else r?.disconnect(),Me.delete(t)}).observe(t,{attributeFilter:["class","hidden"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>n(o))},Re=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),ur=`.${T.breadcrumbs.split(" ")[0]}`,fr=`.${T.chip.split(" ")[0]}`,pr=`.${T.helptext.split(" ")[0]}`,mr=`.${T.pagination.split(" ")[0]}`,hr='summary,u-summary,a,button,[role="tab"],[role="button"]',gr="click,toggle,submit,change",De="mattilsynet.matomo.cloud",H="mtds-analytics-banner",br="https://www.mattilsynet.no/om-mattilsynet/personvernerklaering/informasjonskapsler";function qo(t,e={}){if(ee){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${De}/matomo.php`])),window._mtm||(window._mtm=window._mtm||[],window._mtm.push({"mtm.startTime":Date.now(),event:"mtm.Start"})),t==="init"){window._mtdsTracking={enabled:window.location.hostname!=="localhost",...window._mtdsTracking,...e};const{consent:n,enabled:o,matomoId:i,matomoTagManagerId:s}=window._mtdsTracking;if(i&&window._paq.push(["setSiteId",i]),o){n!=="custom"&&vr();const r=s?`https://cdn.matomo.cloud/${De}/container_${s}.js`:`https://cdn.matomo.cloud/${De}/matomo.js`;document.querySelector(`script[src="${r}"]`)||document.head.append(Object.assign(document.createElement("script"),{async:!0,src:r}))}}if(window._mtdsTracking?.enabled!==!1){if(window._mtdsTracking?.enabled==="debug")return console.info(`analytics("${t}", `,e,")");if(t==="pageview"){const{url:n,title:o}=e;window._paq.push(["setCustomUrl",n||location.href]),window._paq.push(["setDocumentTitle",o||document.title]),window._paq.push(["trackPageView"])}else if(t==="event"){const{category:n,action:o,name:i,value:s}=e,r=["trackEvent",n,o,i,s];let a=location.href;window._paq.push([function(){a=this.getCurrentUrl()}]),window._paq.push(["setCustomUrl",a.split("#")[0]]),window._paq.push(r.filter(c=>c!==void 0)),window._paq.push(["setCustomUrl",a])}else if(t==="search"){const{query:n,category:o=!1,results:i=!1}=e;window._paq.push(["trackSiteSearch",n,o,i])}else t==="matomo"&&window._paq.push(e)}}}function vr(){if(document.getElementById(H)||window.localStorage.getItem(H))return;document.body.insertAdjacentHTML("afterbegin",`<dialog id="${H}" data-analytics="ignore"><style>
|
|
9
9
|
#${H}[open] { box-sizing: border-box; display: flex; align-items: center; background: #116e6b; border-radius: .5em; border: 0; box-shadow: 0 .25em .5em rgba(0,0,0,.3); color: #fff; font-size: .875em; inset: auto auto 1em 1em; max-width: calc(100vw - 2em); outline: 0; padding: .5em; position: fixed; z-index: 99999 }
|
|
10
10
|
#${H} button { all: unset; box-sizing: border-box; cursor: pointer; display: flex; width: 1.5em; height: 1.5em; font: 300 1.5em/1.35 sans-serif; border-radius: .25em; place-content: center; transition: .2s; transition-property: background, scale }
|
|
11
11
|
#${H} button:focus-visible { outline: 2px solid }
|
|
@@ -20,7 +20,7 @@ var mtds=function(O){"use strict";var Pi=Object.defineProperty,nn=Object.getOwnP
|
|
|
20
20
|
::slotted(u-option:focus) { ${qr} }
|
|
21
21
|
::slotted(u-option[aria-hidden="true"]),
|
|
22
22
|
::slotted(u-option[disabled]),
|
|
23
|
-
::slotted(u-option[hidden]) { display: none !important }`,ii,si=0,Gr=Ue||ie,ri="click,focusout,input,keydown,mousedown,mouseup",ai="focus,focusin,blur,focusout",ae={singular:"%d hit",plural:"%d hits"},li=class extends Zo{constructor(){super(),this._texts=Fr({},ae),this._value="",Wr(this,Xr)}static get observedAttributes(){return["id",...Object.keys(ae).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=ei(this),x(this,"role","listbox"),x(this,"tabindex","-1"),St(this._root,"focusin",this),St(this._root,"focus",this,!0),Ve(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){se(this._root||this,"focus",this,!0),se(this._root||this,"focusin",this),Ve(this,!1),Ye(this),this._root=void 0}attributeChangedCallback(t,e,n){const o=t?.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(ae[o])this._texts[o]=n||ae[o];else if(this._root){this._input&&Xe(this,this._input);for(const s of this._root.querySelectorAll(i))Xe(this,s)}}handleEvent(t){const{target:e,type:n}=t;t.defaultPrevented||(n==="click"&&Zr(this,t),(n==="focus"||n==="focusin")&&Qr(this,t),(n==="blur"||n==="focusout")&&Jr(this,t),n==="keydown"&&ta(this,t),n==="mousedown"&&this.contains(e)&&je(t),(n==="mutation"||n==="input")&&(clearTimeout(si),si=setTimeout(ui,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},ci=t=>t?.disabled||t?.readOnly||!1,$t=(t,e)=>{var n,o,i;if(t.hidden!==e)return;t.hidden=ci(t?._input)||!e,(n=Ve(t))==null||n.takeRecords();const s=t.isConnected&&t.popover&&((o=t._input)==null?void 0:o.isConnected)&&((i=t._input)==null?void 0:i.popoverTargetElement)===t;t._input&&Xe(t,t._input,e),s&&x(t,"popover","manual"),s&&t.togglePopover(e),e&&ui(t)},Ye=t=>{t._input&&(se(t._input||t,ai,t),se(t._root||t,ri,t),$t(t,!1),t._input=void 0)},Xe=(t,e,n=!1)=>{t.popover&&x(e,"popovertarget",qe(t)),St(e,ai,t,!0),x(e,"aria-autocomplete","list"),x(e,"aria-controls",qe(t)),x(e,"aria-expanded",`${!Gr||n}`),x(e,"autocomplete","off"),x(e,"role",ci(e)?null:"combobox")},Qr=(t,e)=>{var n;const o=e.target instanceof HTMLInputElement;o&&e.isTrusted&&e.stopImmediatePropagation(),t._input!==e.target&&o&&e.target.list===t&&(t._input&&Ye(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),x(t,Ur,qe((n=t._input.labels)==null?void 0:n[0])),St(t._root||t,ri,t),$t(t,x(t._input,"inputmode")!=="none"),oi())},Jr=(t,e)=>{!ie&&!je()&&t._input&&setTimeout(di,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},di=t=>{var e;const n=((e=t._root)==null?void 0:e.activeElement)||null,o=t._input;o&&o!==n&&!t.contains(n)&&(o.dispatchEvent(new FocusEvent("blur",{relatedTarget:n})),o.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:n})),Ye(t))},Zr=(t,{target:e})=>{var n;if(!t._input||t._input===e)return $t(t,!0);for(const o of t.options)if(o.contains(e))return x(t,"aria-multiselectable")!=="true"&&((n=t._input)==null||n.focus(),$t(t,!1)),Kr(t._input,o.value);ie&&di(t)},ta=(t,e)=>{var n;const{key:o,target:i,altKey:s,ctrlKey:r,shiftKey:a,metaKey:c}=e,l=o==="Escape"||o==="Esc";if(s||r||c||a||o==="Tab")return;l&&!t.hidden&&e?.preventDefault(),$t(t,!l);const d=[...t.options].filter(f=>x(f,"aria-hidden")!=="true"&&f.offsetHeight),u=d.indexOf(i);let p=-1;if(o==="ArrowDown"&&(p=(u+1)%d.length),o==="ArrowUp"&&(p=(~u?u:d.length)-1),~u&&((o==="Home"||o==="PageUp")&&(p=0),(o==="End"||o==="PageDown")&&(p=d.length-1),o==="Enter"))return d[u].click(),e.preventDefault();if(d[p])for(const f of d)f.tabIndex=-1;d[p]&&e.preventDefault(),(n=d[p]||t._input)==null||n.focus(),!d[p]&&o==="ArrowUp"&&setTimeout(()=>{var f;return(f=t._input)==null?void 0:f.setSelectionRange(999,999)})},ui=(t,e)=>{const{_texts:n,_root:o,_input:i,options:s}=t,r=i?.value.toLowerCase().trim()||"",a=!t.hasAttribute("data-nofilter"),c=[],l=[];for(const u of s)(u.disabled||u.hidden||a&&!u.label.toLowerCase().includes(r)?c:l).push(u);for(const u of c)x(u,"aria-hidden","true");for(const u of l)x(u,"aria-hidden","false");const d=l.length;clearTimeout(ii),e?.type==="input"&&r!==t._value&&(ii=setTimeout(()=>{const u=`${!d&&t.innerText.trim()||`${n[d===1?"singular":"plural"]}`.replace("%d",`${d}`)}`;!t.hidden&&o?.activeElement===i&&oi(u),t._value=r},1e3)),Ue&&l.map((u,p)=>x(u,"title",`${p+1}/${d}`))};xt&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return ei(this).getElementById(x(this,"list")||"")}}),ni.define("u-datalist",li);const Ge=T.field.split(" ")[0],fi=T.validation.split(" "),ea=fi[0],B=(t,e)=>t.getPropertyValue(`--mtds-text-${e}`)?.slice(1,-1)||"";function pi(t,e){for(const n of t)if(n.isConnected){const o=[],i=[],s=[];let r=null,a=null,c=!0;for(const l of n.getElementsByTagName("*"))l instanceof HTMLLabelElement?o.push(l):l instanceof me?r=l:Re(l)&&!l.hidden?a=l:l.hasAttribute("data-description")?i.push(l):l.classList.contains(ea)?(c=m(l,"data-color")==="success"||!l.clientHeight,s.push(l),i.unshift(l)):l instanceof HTMLParagraphElement&&(i.some(d=>d.contains(l))||i.push(l));if(a){for(const l of o)l.htmlFor=ne(a);if(e&&m(n,"data-validation")==="form"){c=a.matches(":valid");for(const l of s)m(l,"hidden",c?"":null)}na(r),hi(a),mi(a),m(a,"aria-describedby",i.map(ne).join(" ")||null),m(a,"aria-invalid",`${!c}`)}}}function mi(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function na(t){const{control:e,list:n}=t||{};if(t&&n&&!t.hasAttribute("data-sr-added")){const o=window.getComputedStyle(t);m(t,"data-sr-added",B(o,"combobox-added")),m(t,"data-sr-empty",B(o,"combobox-empty")),m(t,"data-sr-found",B(o,"combobox-found")),m(t,"data-sr-invalid",B(o,"combobox-invalid")),m(t,"data-sr-of",B(o,"combobox-of")),m(t,"data-sr-remove",B(o,"combobox-remove")),m(t,"data-sr-removed",B(o,"combobox-removed")),m(n,"data-sr-plural",B(o,"datalist-plural")),m(n,"data-sr-singular",B(o,"datalist-singular"))}n&&e&&!n.hasAttribute("popover")&&(m(n,"popover","manual"),m(e,"popovertarget",ne(n)))}function hi(t){const e=t?.nextElementSibling,n=e&&m(e,"data-count");if(e&&n){const o=Number(n)-t.value.length,i=o<0,s=m(e,"aria-live")==="polite",r=window.getComputedStyle(e||t),a=B(r,"count-over"),c=B(r,"count-under");if(s!==i){m(e,"aria-live",i?"polite":"off");for(const l of fi)e.classList.toggle(l,i)}e.textContent=(i?a:c).replace("%d",`${Math.abs(o)}`)}}function oa(t){if(t.target instanceof li){const e=t.target,o=e.getRootNode()?.querySelector(`[popovertarget="${e.id}"]`);t.newState==="closed"?ot(e,!1):o&&ot(e,o,{placement:m(e,"data-position")??"bottom",middleware:[Ie(),ke(),Fo({padding:10,apply({availableHeight:i}){e.style.width=`${o.offsetWidth}px`,e.style.maxHeight=`${Math.max(50,i)}px`}})]})}}function ia(t){Re(t.target)&&(hi(t.target),mi(t.target))}function sa(t){const e=t.target?.closest?.(`.${Ge}`);t.type==="invalid"&&e&&t.preventDefault(),pi(document.getElementsByClassName(Ge),!0)}R(()=>{gt(document.documentElement,Ge,pi),$(document,"input",ia,M),$(document,"invalid,submit",sa,!0),$(document,"toggle",oa,M)});const ra=T.fieldset.split(" ")[0],aa=T.validation.split(" ")[0],gi="aria-describedby",la="aria-invalid";function ca(t){requestAnimationFrame(()=>{for(const e of t)if(e.isConnected){const n=[];let o=null,i=!0;for(const s of e.getElementsByTagName("*"))s.classList.contains(aa)?(i=m(s,"data-color")==="success"||!s.clientHeight,o=ne(s)):Re(s)&&n.push(s);for(const s of n){const r=m(s,gi)?.replace(o||"#","");m(s,gi,`${o||""} ${r||""}`.trim()),m(s,la,`${!i}`)}}})}R(()=>gt(document.documentElement,ra,ca));const da=T.logo.split(" ")[0];function ua([t]){if(t?.isConnected&&t?.firstElementChild instanceof SVGSVGElement){for(const a of document.head.querySelectorAll("link[rel~='icon']"))a.setAttribute("rel","disabled");const e=t.firstElementChild,n=t?.hasAttribute("data-env"),o=window.getComputedStyle(e),i=o.getPropertyValue("color"),s=o.getPropertyValue("--mtds-logo-color"),r=e.outerHTML.replace(/\n+/g," ").replace(/(fill|width|height|xmlns)="[^"]+"/gi,"").replace("<svg",`<svg width="40" height="40" fill="${i}"`);document.head.appendChild(Object.assign(document.createElement("link"),{href:`data:image/svg+xml,${encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 55 55'><rect fill='${n?"none":s}' width='51' height='51' x='2' y='2' stroke='${i}' stroke-dasharray='0.09 6.38' stroke-linecap='round' stroke-opacity='${n?.6:0}' stroke-width='2.3' rx='25.5'/><g transform="translate(7.5 7.5)">${r}</g></svg>`)}`,rel:"icon"}))}}R(()=>gt(document.documentElement,da,ua));const bi=T.popover.split(" ")[0];let vi=0;function fa({target:t,newState:e}){if(t instanceof HTMLElement&&t.classList.contains(bi)){const n=e==="closed",o=m(t,"data-overscroll")==="contain",i=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);vi+=n?-1:1,n?ot(t,!1):i&&ot(t,i,{placement:m(t,"data-position")||"bottom",middleware:[Ie(),ke({padding:10})].concat(o?Fo({padding:10,apply({availableHeight:s}){t.style.maxHeight=`${Math.max(50,s)}px`}}):[])})}}function pa({target:t}){const e=vi&&t?.closest?.("a,[popovertargetaction]");if(e){const n=m(e,"popovertargetaction")||"toggle",o=n==="show"||(n==="hide"?!1:void 0),s=(document.getElementById(m(e,"popovertarget")||"")||e).closest(`.${bi}`);s?.isConnected&&s?.togglePopover&&s.togglePopover(o)}}R(()=>{$(document,"toggle",fa,M),$(document,"click",pa)});const ma=T.table.split(" ")[0];function ha(t){for(const e of t){const n=Array.from(e.tHead?.rows[0]?.cells||[],o=>o.innerText.trim());for(const o of e.tBodies)for(const i of o.rows)for(const s of i.cells)m(s,"data-th",n[s.cellIndex]||":empty")}}R(()=>gt(document.documentElement,ma,ha));const ga=`.${T.togglegroup.split(" ")[0]}`;function ba(t){const{key:e,target:n}=t,o=n instanceof HTMLInputElement&&n.closest(ga);if(o&&(e==="Enter"&&n.click(),e?.startsWith("Arrow"))){t.preventDefault();const i=o.getElementsByTagName("input"),s=[...i].indexOf(n),r=e.match(/Arrow(Right|Down)/)?1:-1;i[(i.length+s+r)%i.length]?.focus()}}R(()=>$(document,"keydown",ba));const _i="aria-describedby",yi="Escape",le="aria-labelledby",va="--mtds-tooltip-position",_a=300,F=ee?Object.assign(document.createElement("div"),{className:T._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let Q=null,wi=Number.NEGATIVE_INFINITY,Ei=0;function Qe({target:t,type:e,key:n}){if(e==="keydown"&&n!==yi)return;const o=wi+_a-Date.now();clearTimeout(Ei),Ei=setTimeout(ya,Math.max(o,0),n===yi?null:t)}function ya(t){if(wi=Date.now(),!F||t===F)return;F?.isConnected||document.body.append(F);let e=t?.closest?.("[data-tooltip]")||null;if(e===Q)return;const n=e&&m(e,"data-tooltip")||"",o=e&&m(e,"data-tooltip-position")||window.getComputedStyle(e||document.body).getPropertyValue(va)?.trim()||"top";(!n||n==="false"||n==="true"||o==="none")&&(e=null),e&&(F.textContent=n);const s=Q&&m(Q,le)===F?.id,r=(e instanceof HTMLElement?e.innerText:e?.textContent)?.trim()||e?.hasAttribute(le)||e?.hasAttribute("aria-label");Q?.removeAttribute(s?le:_i),ot(F,!1),Q=e,Q&&m(Q,r?_i:le,F?.id),Q&&F.hidePopover(),F.togglePopover(!!e),ot(F,e||!1,{placement:o,middleware:[Ie(),ke({padding:10})]})}R(()=>{$(document,"blur,focus,mouseout,mouseover",Qe,M),$(window,"keydown",Qe,M),$(window,"blur",Qe,M)});var Je=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",wa=Je&&/android/i.test(navigator.userAgent),xi;Je&&/^Mac/i.test(((xi=navigator.userAgentData)==null?void 0:xi.platform)||navigator.platform);var Ea=`${wa?"data":"aria"}-labelledby`,xa=":host(:not([hidden])) { display: block }",Si=typeof HTMLElement>"u"?class{}:HTMLElement;function K(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var Ti=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},$i=(t,...e)=>Ti("add",t,e),Ci=(t,...e)=>Ti("remove",t,e),Sa=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Ta=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},$a=0,Ca=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++$a).toString(32)}`),t.id):"",Ze=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))K(o,i,s);return o},Ai={define:(t,e)=>!Je||window.customElements.get(t)||window.customElements.define(t,e)},Aa=`${xa}
|
|
23
|
+
::slotted(u-option[hidden]) { display: none !important }`,ii,si=0,Gr=Ue||ie,ri="click,focusout,input,keydown,mousedown,mouseup",ai="focus,focusin,blur,focusout",ae={singular:"%d hit",plural:"%d hits"},li=class extends Zo{constructor(){super(),this._texts=Fr({},ae),this._value="",Wr(this,Xr)}static get observedAttributes(){return["id",...Object.keys(ae).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=ei(this),x(this,"role","listbox"),x(this,"tabindex","-1"),St(this._root,"focusin",this),St(this._root,"focus",this,!0),Ve(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){se(this._root||this,"focus",this,!0),se(this._root||this,"focusin",this),Ve(this,!1),Ye(this),this._root=void 0}attributeChangedCallback(t,e,n){const o=t?.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(ae[o])this._texts[o]=n||ae[o];else if(this._root){this._input&&Xe(this,this._input);for(const s of this._root.querySelectorAll(i))Xe(this,s)}}handleEvent(t){const{target:e,type:n}=t;t.defaultPrevented||(n==="click"&&Zr(this,t),(n==="focus"||n==="focusin")&&Qr(this,t),(n==="blur"||n==="focusout")&&Jr(this,t),n==="keydown"&&ta(this,t),n==="mousedown"&&this.contains(e)&&je(t),(n==="mutation"||n==="input")&&(clearTimeout(si),si=setTimeout(ui,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},ci=t=>t?.disabled||t?.readOnly||!1,$t=(t,e)=>{var n,o,i;if(t.hidden!==e)return;t.hidden=ci(t?._input)||!e,(n=Ve(t))==null||n.takeRecords();const s=t.isConnected&&t.popover&&((o=t._input)==null?void 0:o.isConnected)&&((i=t._input)==null?void 0:i.popoverTargetElement)===t;t._input&&Xe(t,t._input,e),s&&x(t,"popover","manual"),s&&t.togglePopover(e),e&&ui(t)},Ye=t=>{t._input&&(se(t._input||t,ai,t),se(t._root||t,ri,t),$t(t,!1),t._input=void 0)},Xe=(t,e,n=!1)=>{t.popover&&x(e,"popovertarget",qe(t)),St(e,ai,t,!0),x(e,"aria-autocomplete","list"),x(e,"aria-controls",qe(t)),x(e,"aria-expanded",`${!Gr||n}`),x(e,"autocomplete","off"),x(e,"role",ci(e)?null:"combobox")},Qr=(t,e)=>{var n;const o=e.target instanceof HTMLInputElement;o&&e.isTrusted&&e.stopImmediatePropagation(),t._input!==e.target&&o&&e.target.list===t&&(t._input&&Ye(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),x(t,Ur,qe((n=t._input.labels)==null?void 0:n[0])),St(t._root||t,ri,t),$t(t,x(t._input,"inputmode")!=="none"),oi())},Jr=(t,e)=>{!ie&&!je()&&t._input&&setTimeout(di,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},di=t=>{var e;const n=((e=t._root)==null?void 0:e.activeElement)||null,o=t._input;o&&o!==n&&!t.contains(n)&&(o.dispatchEvent(new FocusEvent("blur",{relatedTarget:n})),o.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:n})),Ye(t))},Zr=(t,{target:e})=>{var n;if(!t._input||t._input===e)return $t(t,!0);for(const o of t.options)if(o.contains(e))return x(t,"aria-multiselectable")!=="true"&&((n=t._input)==null||n.focus(),$t(t,!1)),Kr(t._input,o.value);ie&&di(t)},ta=(t,e)=>{var n;const{key:o,target:i,altKey:s,ctrlKey:r,shiftKey:a,metaKey:c}=e,l=o==="Escape"||o==="Esc";if(s||r||c||a||o==="Tab")return;l&&!t.hidden&&e?.preventDefault(),$t(t,!l);const d=[...t.options].filter(f=>x(f,"aria-hidden")!=="true"&&f.offsetHeight),u=d.indexOf(i);let p=-1;if(o==="ArrowDown"&&(p=(u+1)%d.length),o==="ArrowUp"&&(p=(~u?u:d.length)-1),~u&&((o==="Home"||o==="PageUp")&&(p=0),(o==="End"||o==="PageDown")&&(p=d.length-1),o==="Enter"))return d[u].click(),e.preventDefault();if(d[p])for(const f of d)f.tabIndex=-1;d[p]&&e.preventDefault(),(n=d[p]||t._input)==null||n.focus(),!d[p]&&o==="ArrowUp"&&setTimeout(()=>{var f;return(f=t._input)==null?void 0:f.setSelectionRange(999,999)})},ui=(t,e)=>{const{_texts:n,_root:o,_input:i,options:s}=t,r=i?.value.toLowerCase().trim()||"",a=!t.hasAttribute("data-nofilter"),c=[],l=[];for(const u of s)(u.disabled||u.hidden||a&&!u.label.toLowerCase().includes(r)?c:l).push(u);for(const u of c)x(u,"aria-hidden","true");for(const u of l)x(u,"aria-hidden","false");const d=l.length;clearTimeout(ii),e?.type==="input"&&r!==t._value&&(ii=setTimeout(()=>{const u=`${!d&&t.innerText.trim()||`${n[d===1?"singular":"plural"]}`.replace("%d",`${d}`)}`;!t.hidden&&o?.activeElement===i&&oi(u),t._value=r},1e3)),Ue&&l.map((u,p)=>x(u,"title",`${p+1}/${d}`))};xt&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return ei(this).getElementById(x(this,"list")||"")}}),ni.define("u-datalist",li);const Ge=T.field.split(" ")[0],fi=T.validation.split(" "),ea=fi[0],B=(t,e)=>t.getPropertyValue(`--mtds-text-${e}`)?.slice(1,-1)||"";function pi(t,e){for(const n of t)if(n.isConnected){const o=[],i=[],s=[];let r=null,a=null,c=!0;for(const l of n.getElementsByTagName("*"))l instanceof HTMLLabelElement?o.push(l):l instanceof me?r=l:Re(l)&&!l.hidden?a=l:l.hasAttribute("data-description")?i.push(l):l.classList.contains(ea)?(c=m(l,"data-color")==="success"||!l.clientHeight,s.push(l),i.unshift(l)):l instanceof HTMLParagraphElement&&(i.some(d=>d.contains(l))||i.push(l));if(a){for(const l of o)l.htmlFor=ne(a);if(e&&m(n,"data-validation")==="form"){c=a.matches(":valid");for(const l of s)m(l,"hidden",c?"":null)}na(r),hi(a),mi(a),m(a,"aria-describedby",i.map(ne).join(" ")||null),m(a,"aria-invalid",`${!c}`)}}}function mi(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function na(t){const{control:e,list:n}=t||{};if(t&&n&&!t.hasAttribute("data-sr-added")){const o=window.getComputedStyle(t);m(t,"data-sr-added",B(o,"combobox-added")),m(t,"data-sr-empty",B(o,"combobox-empty")),m(t,"data-sr-found",B(o,"combobox-found")),m(t,"data-sr-invalid",B(o,"combobox-invalid")),m(t,"data-sr-of",B(o,"combobox-of")),m(t,"data-sr-remove",B(o,"combobox-remove")),m(t,"data-sr-removed",B(o,"combobox-removed")),m(n,"data-sr-plural",B(o,"datalist-plural")),m(n,"data-sr-singular",B(o,"datalist-singular"))}n&&e&&!n.hasAttribute("popover")&&(m(n,"popover","manual"),m(e,"popovertarget",ne(n)))}function hi(t){const e=t?.nextElementSibling,n=e&&m(e,"data-count");if(e&&n){const o=Number(n)-t.value.length,i=o<0,s=m(e,"aria-live")==="polite",r=window.getComputedStyle(e||t),a=B(r,"count-over"),c=B(r,"count-under");if(s!==i){m(e,"aria-live",i?"polite":"off");for(const l of fi)e.classList.toggle(l,i)}e.textContent=(i?a:c).replace("%d",`${Math.abs(o)}`)}}function oa(t){if(t.target instanceof li){const e=t.target,o=e.getRootNode()?.querySelector(`[popovertarget="${e.id}"]`);t.newState==="closed"?ot(e,!1):o&&ot(e,o,{placement:m(e,"data-position")??"bottom",middleware:[Ie(),ke(),Fo({padding:10,apply({availableHeight:i}){e.style.width=`${o.offsetWidth}px`,e.style.maxHeight=`${Math.max(50,i)}px`}})]})}}function ia(t){Re(t.target)&&(hi(t.target),mi(t.target))}function sa(t){const e=t.target?.closest?.(`.${Ge}`);t.type==="invalid"&&e&&t.preventDefault(),pi(document.getElementsByClassName(Ge),!0)}R(()=>{gt(document.documentElement,Ge,pi),$(document,"input",ia,M),$(document,"invalid,submit",sa,!0),$(document,"toggle",oa,M)});const ra=T.fieldset.split(" ")[0],aa=T.validation.split(" ")[0],gi="aria-describedby",la="aria-invalid";function ca(t){requestAnimationFrame(()=>{for(const e of t)if(e.isConnected){const n=[];let o=null,i=!0;for(const s of e.getElementsByTagName("*"))s.classList.contains(aa)?(i=m(s,"data-color")==="success"||!s.clientHeight,o=ne(s)):Re(s)&&n.push(s);for(const s of n){const r=m(s,gi)?.replace(o||"#","");m(s,gi,`${o||""} ${r||""}`.trim()),m(s,la,`${!i}`)}}})}R(()=>gt(document.documentElement,ra,ca));const da=T.logo.split(" ")[0];function ua([t]){if(t?.isConnected&&t?.firstElementChild instanceof SVGSVGElement){for(const a of document.head.querySelectorAll("link[rel~='icon']"))a.setAttribute("rel","disabled");const e=t.firstElementChild,n=t?.hasAttribute("data-env"),o=window.getComputedStyle(e),i=o.getPropertyValue("color"),s=o.getPropertyValue("--mtds-logo-color"),r=e.outerHTML.replace(/\n+/g," ").replace(/(fill|width|height|xmlns)="[^"]+"/gi,"").replace("<svg",`<svg width="40" height="40" fill="${i}"`);document.head.appendChild(Object.assign(document.createElement("link"),{href:`data:image/svg+xml,${encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 55 55'><rect fill='${n?"none":s}' width='51' height='51' x='2' y='2' stroke='${i}' stroke-dasharray='0.09 6.38' stroke-linecap='round' stroke-opacity='${n?.6:0}' stroke-width='2.3' rx='25.5'/><g transform="translate(7.5 7.5)">${r}</g></svg>`)}`,rel:"icon"}))}}R(()=>gt(document.documentElement,da,ua));const bi=T.popover.split(" ")[0];let vi=0;function fa({target:t,newState:e}){if(t instanceof HTMLElement&&t.classList.contains(bi)){const n=e==="closed",o=m(t,"data-overscroll")==="contain",i=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);vi+=n?-1:1,n?ot(t,!1):i&&ot(t,i,{placement:m(t,"data-position")||"bottom",middleware:[Ie(),ke({padding:10})].concat(o?Fo({padding:10,apply({availableHeight:s}){t.style.maxHeight=`${Math.max(50,s)}px`}}):[])})}}function pa({target:t}){const e=vi&&t?.closest?.("a,[popovertargetaction]");if(e){const n=m(e,"popovertargetaction")||"toggle",o=n==="show"||(n==="hide"?!1:void 0),s=(document.getElementById(m(e,"popovertarget")||"")||e).closest(`.${bi}`);s?.isConnected&&s?.togglePopover&&s.togglePopover(o)}}R(()=>{$(document,"toggle",fa,M),$(document,"click",pa)});const ma=T.table.split(" ")[0];function ha(t){for(const e of t){const n=Array.from(e.tHead?.rows[0]?.cells||[],o=>o.innerText.trim());for(const o of e.tBodies)for(const i of o.rows)for(const s of i.cells)m(s,"data-th",n[s.cellIndex]||":empty")}}R(()=>gt(document.documentElement,ma,ha));const ga=`.${T.togglegroup.split(" ")[0]}`;function ba(t){const{key:e,target:n}=t,o=n instanceof HTMLInputElement&&n.closest(ga);if(o&&(e==="Enter"&&n.click(),e?.startsWith("Arrow"))){t.preventDefault();const i=o.getElementsByTagName("input"),s=[...i].indexOf(n),r=e.match(/Arrow(Right|Down)/)?1:-1;i[(i.length+s+r)%i.length]?.focus()}}R(()=>$(document,"keydown",ba));const _i="aria-describedby",yi="Escape",le="aria-labelledby",va="--mtds-tooltip-position",_a=300,F=ee?Object.assign(document.createElement("div"),{className:T._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let Q=null,wi=Number.NEGATIVE_INFINITY,Ei=0;function Qe({target:t,type:e,key:n}){if(e==="keydown"&&n!==yi)return;const o=wi+_a-Date.now();clearTimeout(Ei),Ei=setTimeout(ya,Math.max(o,0),n===yi?null:t)}function ya(t){if(wi=Date.now(),!F||t===F)return;F?.isConnected||document.body.append(F);let e=t?.closest?.("[data-tooltip]")||null;if(e===Q)return;const n=e&&m(e,"data-tooltip")||"",o=e&&m(e,"data-tooltip-position")||window.getComputedStyle(e||document.body).getPropertyValue(va)?.trim()||"top";(!n||n==="false"||n==="true"||o==="none")&&(e=null),e&&(F.textContent=n);const s=Q&&m(Q,le)===F?.id,r=(e instanceof HTMLElement?e.innerText:e?.textContent)?.trim()||e?.hasAttribute(le)||e?.hasAttribute("aria-label");Q?.removeAttribute(s?le:_i),ot(F,!1),Q=e,Q&&m(Q,r?_i:le,F?.id),Q?.isConnected&&F.hidePopover(),F.togglePopover(!!e),ot(F,e||!1,{placement:o,middleware:[Ie(),ke({padding:10})]})}R(()=>{$(document,"blur,focus,mouseout,mouseover",Qe,M),$(window,"keydown",Qe,M),$(window,"blur",Qe,M)});var Je=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",wa=Je&&/android/i.test(navigator.userAgent),xi;Je&&/^Mac/i.test(((xi=navigator.userAgentData)==null?void 0:xi.platform)||navigator.platform);var Ea=`${wa?"data":"aria"}-labelledby`,xa=":host(:not([hidden])) { display: block }",Si=typeof HTMLElement>"u"?class{}:HTMLElement;function K(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var Ti=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},$i=(t,...e)=>Ti("add",t,e),Ci=(t,...e)=>Ti("remove",t,e),Sa=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Ta=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},$a=0,Ca=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++$a).toString(32)}`),t.id):"",Ze=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))K(o,i,s);return o},Ai={define:(t,e)=>!Je||window.customElements.get(t)||window.customElements.define(t,e)},Aa=`${xa}
|
|
24
24
|
::slotted(u-summary) { cursor: pointer; display: block }
|
|
25
25
|
::slotted(u-summary)::before { content: ''; display: inline-block; vertical-align: middle; margin-inline: .05em .3125em; border-block: .3125em solid transparent; border-inline-start: .5em solid }
|
|
26
26
|
::slotted(u-summary[aria-expanded="true"])::before { rotate: 90deg }
|
|
@@ -29,4 +29,4 @@ var mtds=function(O){"use strict";var Pi=Object.defineProperty,nn=Object.getOwnP
|
|
|
29
29
|
:host(:not([value])) { background: linear-gradient(90deg,currentColor 25%, transparent 50%, currentColor 75%) 50%/400% }
|
|
30
30
|
@media (prefers-reduced-motion: no-preference) { :host { animation: indeterminate 2s linear infinite } }
|
|
31
31
|
@keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`,tn=!1,Oi=class extends Oa{static get observedAttributes(){return["aria-label","aria-labelledby","value","max"]}constructor(){super(),this.shadowRoot||this.attachShadow({mode:"open"}).append(Ii("slot",null,{hidden:""}),Ii("style",Ha))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(tn)return;tn=!0;const t=Ia||Li,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let n=Na(this);if(t&&(n=`${n.replace(/\d+%$/,"")} ${e}%`),Li)for(const o of this.labels)L(o,"aria-label",n);L(this,"aria-busy",`${this.position===-1}`),L(this,"aria-label",n.trim()),L(this,"aria-labelledby",null),L(this,"aria-valuemax","100"),L(this,"aria-valuemin","0"),L(this,"aria-valuenow",`${e}`),L(this,"role",t?"img":"progressbar"),tn=!1}get labels(){const t=this.closest("label:not([for])"),e=Da(this);return t&&(t.htmlFor=e),Ma(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return Ri(this,"value")}set value(t){Di(this,"value",t)}get max(){return Ri(this,"max")||1}set max(t){Di(this,"max",t)}};Oi.formAssociated=!0;var Mi=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),Ri=(t,e)=>{const n=L(t,e);return Mi(n)?Math.max(0,Number.parseFloat(n)):null},Di=(t,e,n)=>{if(n===null||Mi(n))L(t,e,`${n}`);else throw new Error(`Failed to set non-numeric '${L}': '${n}'`)};return Pa.define("u-progress",Oi),O.UHTMLComboboxElement=me,O.UHTMLTabElement=xn,O.UHTMLTabListElement=En,O.UHTMLTabPanelElement=Sn,O.UHTMLTabsElement=wn,O.analytics=qo,O.pagination=Lr,O.styles=vs,O.toggleAppExpanded=Ko,O.version=bs,Object.defineProperty(O,Symbol.toStringTag,{value:"Module"}),O}({});
|
|
32
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtY29tYm9ib3gvZGlzdC91LWNvbWJvYm94LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5tanMiLCIuLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2NvcmUvZGlzdC9mbG9hdGluZy11aS5jb3JlLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5kb20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS9kb20vZGlzdC9mbG9hdGluZy11aS5kb20ubWpzIiwiLi4vZGVzaWduc3lzdGVtL3V0aWxzLnRzIiwiLi4vZGVzaWduc3lzdGVtL2FuYWx5dGljcy9hbmFseXRpY3MudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC10b2dnbGUuanMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9wYWdpbmF0aW9uL3BhZ2luYXRpb24taGVscGVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWJzLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2RpYWxvZy9kaWFsb2ctb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZXJyb3JzdW1tYXJ5L2Vycm9yc3VtbWFyeS1vYnNlcnZlci50cyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWRhdGFsaXN0L2Rpc3QvdS1kYXRhbGlzdC5qcyIsIi4uL2Rlc2lnbnN5c3RlbS9maWVsZC9maWVsZC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9maWVsZHNldC9maWVsZHNldC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9sb2dvL2xvZ28tb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vcG9wb3Zlci9wb3BvdmVyLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RhYmxlL3RhYmxlLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RvZ2dsZWdyb3VwL3RvZ2dsZWdyb3VwLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3Rvb2x0aXAvdG9vbHRpcC1vYnNlcnZlci50cyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWRldGFpbHMvZGlzdC91LWRldGFpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1wcm9ncmVzcy9kaXN0L3UtcHJvZ3Jlc3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuXG4vLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0ZJUkVGT1ggPSBJU19CUk9XU0VSICYmIC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBGT0NVU19PVVRMSU5FID0gXCJvdXRsaW5lOiAxcHggZG90dGVkOyBvdXRsaW5lOiA1cHggYXV0byBIaWdobGlnaHQ7IG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvclwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChfZXJyKSB7XG4gIH1cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgKGRldGFpbCkgPT4gZWxlbWVudC5oYW5kbGVFdmVudCh7IHR5cGU6IFwibXV0YXRpb25cIiwgZGV0YWlsIH0pXG4gICAgKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIG9ic2VydmVycy5zZXQoZWxlbWVudCwgb2JzZXJ2ZXIpO1xuICB9XG59O1xudmFyIGFzQnV0dG9uID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGlzQ2xpY2sgPSBcImtleVwiIGluIGV2ZW50ICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKTtcbiAgaWYgKGlzQ2xpY2spIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGlmIChpc0NsaWNrICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBldmVudC50YXJnZXQuY2xpY2soKTtcbiAgcmV0dXJuIGlzQ2xpY2s7XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dDIsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQyKSBlbC50ZXh0Q29udGVudCA9IHRleHQyO1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZ2V0TGFiZWwgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgbGFiZWwgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikgfHwgXCJcIjtcbiAgY29uc3QgbGFiZWxzID0gKChfYTIgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxsZWRieVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkuc3BsaXQoL1xccysvKSkgfHwgW107XG4gIHJldHVybiBbXG4gICAgLi4ubGFiZWxzLm1hcCgoaWQyKSA9PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZDIpKSxcbiAgICAvLyBHZXQgYWxsIGxhYmVsbGVkYnkgZWxlbWVudHNcbiAgICAuLi5BcnJheS5mcm9tKGVsLmxhYmVscyB8fCBbXSlcbiAgICAvLyBHZXQgYWxsIDxsYWJlbD4gZWxlbWVudHNcbiAgXS5yZWR1Y2UoKGFjYywgZWwyKSA9PiB7XG4gICAgdmFyIF9hMztcbiAgICByZXR1cm4gYWNjIHx8ICgoX2EzID0gZWwyID09IG51bGwgPyB2b2lkIDAgOiBlbDIuaW5uZXJUZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnRyaW0oKSkgfHwgXCJcIjtcbiAgfSwgbGFiZWwpO1xufTtcbnZhciBMSVZFO1xudmFyIExJVkVfU1JfRklYID0gMDtcbnZhciBzcGVhayA9ICh0ZXh0MikgPT4ge1xuICBpZiAoIUxJVkUpIHtcbiAgICBMSVZFID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBMSVZFLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gICAgYXR0cihMSVZFLCBcImFyaWEtbGl2ZVwiLCBcImFzc2VydGl2ZVwiKTtcbiAgfVxuICBpZiAoIUxJVkUuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKExJVkUpO1xuICBpZiAodGV4dDIpIExJVkUudGV4dENvbnRlbnQgPSBgJHt0ZXh0Mn0ke0xJVkVfU1JfRklYKysgJSAyID8gXCJcXHhBMFwiIDogXCJcIn1gO1xufTtcbnZhciBzZXRWYWx1ZSA9IChpbnB1dCwgZGF0YSwgdHlwZSA9IFwiXCIpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSwgZGF0YSwgaW5wdXRUeXBlOiB0eXBlIH07XG4gIGNvbnN0IHByb3RvID0gSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGU7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJiZWZvcmVpbnB1dFwiLCBldmVudCkpO1xuICAoX2IgPSAoX2EyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgXCJ2YWx1ZVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5zZXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKGlucHV0LCBkYXRhKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImlucHV0XCIsIGV2ZW50KSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2hhbmdlXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG59O1xudmFyIElTX1BSRVNTID0gZmFsc2U7XG52YXIgaXNNb3VzZURvd24gPSAoZXZlbnQpID0+IHtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2V1cFwiKSBJU19QUkVTUyA9IGZhbHNlO1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZWRvd25cIikge1xuICAgIElTX1BSRVNTID0gdHJ1ZTtcbiAgICBvbihkb2N1bWVudCwgXCJtb3VzZXVwXCIsIGlzTW91c2VEb3duLCB7IG9uY2U6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIElTX1BSRVNTO1xufTtcbnZhciBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QgPSAoc3R5bGUsIHNsb3QgPSBcIjxzbG90Pjwvc2xvdD5cIikgPT4gYDx0ZW1wbGF0ZSBzaGFkb3dyb290bW9kZT1cIm9wZW5cIj4ke3Nsb3R9PHN0eWxlPiR7c3R5bGV9PC9zdHlsZT48L3RlbXBsYXRlPmA7XG5cbi8vIHUtY29tYm9ib3gudHNcbnZhciBVSFRNTENvbWJvYm94U3R5bGUgPSBgOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2s7IC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKSB9IC8qIE11c3QgYmUgZGlzcGxheSBibG9jayBpbiBTYWZhcmkgdG8gYWxsb3cgZm9jdXMgaW5zaWRlICovXG46aG9zdCg6bm90KFtkYXRhLW11bHRpcGxlXSkpIDo6c2xvdHRlZChkYXRhKSxcbjpob3N0KFtkYXRhLW11bHRpcGxlPVwiZmFsc2VcIl0pIDo6c2xvdHRlZChkYXRhKSB7IGRpc3BsYXk6IG5vbmUgfSAvKiBIaWRlIGRhdGEgaWYgbm90IG11bHRpcGxlICovXG46OnNsb3R0ZWQoaW5wdXRbaW5wdXRtb2RlPVwibm9uZVwiXSkgeyBvdXRsaW5lOiBub25lIH0gLyogSGlkZSB0ZW1wb3JhcnkgZm91Y3Mgb3V0bGluZSBmbGFzaCAqL1xuOjpzbG90dGVkKGRlbCkgeyB0ZXh0LWRlY29yYXRpb246IG5vbmUgfVxuOjpzbG90dGVkKGRhdGE6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBvaW50ZXItZXZlbnRzOiBub25lIH1cbjo6c2xvdHRlZChkYXRhKTo6YWZ0ZXIgeyBjb250ZW50OiAnXFxcXDAwRDcnOyBjb250ZW50OiAnXFxcXDAwRDcnIC8gJyc7IHBhZGRpbmctaW5saW5lOiAuNWNoOyBwb2ludGVyLWV2ZW50czogYXV0bzsgY3Vyc29yOiBwb2ludGVyIH1cbjo6c2xvdHRlZChkYXRhOmZvY3VzKSB7ICR7Rk9DVVNfT1VUTElORX0gfWA7XG52YXIgVUhUTUxDb21ib2JveFNoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoVUhUTUxDb21ib2JveFN0eWxlKTtcbnZhciBFVkVOVFMgPSBcImJlZm9yZWlucHV0LGJsdXIsZm9jdXMsY2xpY2ssaW5wdXQsa2V5ZG93bixtb3VzZWRvd25cIjtcbnZhciBFVkVOVF9PTkNFID0geyBvbmNlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH07XG52YXIgSVNfRklSRUZPWF9ERVNLVE9QID0gSVNfRklSRUZPWCAmJiAhSVNfQU5EUk9JRDtcbnZhciBJU19NT0JJTEUgPSBJU19BTkRST0lEIHx8IElTX0lPUztcbnZhciBNT0RJRklFRCA9IFwiXFx1MjAwQlwiLnJlcGVhdCg1KTtcbnZhciBGQUxTRSA9IFwiZmFsc2VcIjtcbnZhciBURVhUUyA9IHtcbiAgYWRkZWQ6IFwiQWRkZWRcIixcbiAgZW1wdHk6IFwiTm8gc2VsZWN0ZWRcIixcbiAgZm91bmQ6IFwiTmF2aWdhdGUgbGVmdCB0byBmaW5kICVkIHNlbGVjdGVkXCIsXG4gIGludmFsaWQ6IFwiSW52YWxpZCB2YWx1ZVwiLFxuICBvZjogXCJvZlwiLFxuICByZW1vdmU6IFwiUHJlc3MgdG8gcmVtb3ZlXCIsXG4gIHJlbW92ZWQ6IFwiUmVtb3ZlZFwiXG59O1xudmFyIFVIVE1MQ29tYm9ib3hFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2l0ZW0gPSBcIlwiO1xuICAgIHRoaXMuX3NwZWFrID0gXCJcIjtcbiAgICB0aGlzLl90ZXh0cyA9IF9fc3ByZWFkVmFsdWVzKHt9LCBURVhUUyk7XG4gICAgdGhpcy5fdmFsdWUgPSBcIlwiO1xuICAgIGlmICghdGhpcy5zaGFkb3dSb290KVxuICAgICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAgICAgICAvLyBDb250ZW50IHNsb3RcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIFVIVE1MQ29tYm9ib3hTdHlsZSlcbiAgICAgICk7XG4gIH1cbiAgLy8gTG9jYWxseSBzdG9yZSB2YWx1ZSB0byBzdG9yZSB2YWx1ZSBiZWZvcmUgaW5wdXQtY2xpY2tcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKFRFWFRTKS5tYXAoKGtleSkgPT4gYGRhdGEtc3ItJHtrZXl9YCk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5fcm9vdCA9IGdldFJvb3QodGhpcyk7XG4gICAgb24odGhpcywgRVZFTlRTLCB0aGlzLCB0cnVlKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1widmFsdWVcIiwgXCJpZFwiXSxcbiAgICAgIC8vIFJlc3BvbmQgdG8gY2hhbmdlcyBpbiA8ZGF0YT4gdmFsdWUgb3IgY2hhbmdlIG9mIGlkIGZvciA8ZGF0YWxpc3Q+IHRvIHJlY29ubmVjdCB3aXRoIGlucHV0XG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgIC8vIFJlc3BvbmQgdG8gY2hhbmdlcyBpbiA8ZGF0YT4gdGV4dENvbnRlbnRcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KHJlbmRlciwgMCwgdGhpcyk7XG4gICAgc2V0VGltZW91dChzeW5jSW5wdXRWYWx1ZSwgMCwgdGhpcyk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIF8sIHZhbCkge1xuICAgIGNvbnN0IHRleHQyID0gcHJvcC5zcGxpdChcImRhdGEtc3ItXCIpWzFdO1xuICAgIGlmIChURVhUU1t0ZXh0Ml0pIHRoaXMuX3RleHRzW3RleHQyXSA9IHZhbCB8fCBURVhUU1t0ZXh0Ml07XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gICAgb2ZmKHRoaXMsIEVWRU5UUywgdGhpcywgdHJ1ZSk7XG4gICAgdGhpcy5faXRlbXMgPSB0aGlzLl9jbGVhciA9IHRoaXMuX2ZvY3VzID0gdGhpcy5fY29udHJvbCA9IHZvaWQgMDtcbiAgICB0aGlzLl9saXN0ID0gdGhpcy5fb3B0aW9ucyA9IHRoaXMuX3Jvb3QgPSB2b2lkIDA7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJiZWZvcmVpbnB1dFwiKSB0aGlzLl92YWx1ZSA9ICh0YXJnZXQgPT0gbnVsbCA/IHZvaWQgMCA6IHRhcmdldC52YWx1ZSkgfHwgXCJcIjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJibHVyXCIpIG9uQmx1cih0aGlzKTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSBvbkNsaWNrKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJmb2N1c1wiKSBvbkZvY3VzKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJpbnB1dFwiKSBvbklucHV0KHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIG9uS2V5RG93bih0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwibW91c2Vkb3duXCIpIGlzTW91c2VEb3duKGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJtdXRhdGlvblwiKSByZW5kZXIodGhpcywgZXZlbnQpO1xuICB9XG4gIGdldCBtdWx0aXBsZSgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IGF0dHIodGhpcywgXCJkYXRhLW11bHRpcGxlXCIpKSAhPSBudWxsID8gX2EyIDogRkFMU0UpICE9PSBGQUxTRTtcbiAgfVxuICBzZXQgbXVsdGlwbGUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwiZGF0YS1tdWx0aXBsZVwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgY3JlYXRhYmxlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gYXR0cih0aGlzLCBcImRhdGEtY3JlYXRhYmxlXCIpKSAhPSBudWxsID8gX2EyIDogRkFMU0UpICE9PSBGQUxTRTtcbiAgfVxuICBzZXQgY3JlYXRhYmxlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImRhdGEtY3JlYXRhYmxlXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBjb250cm9sKCkge1xuICAgIHZhciBfYTI7XG4gICAgaWYgKCEoKF9hMiA9IHRoaXMuX2NvbnRyb2wpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKVxuICAgICAgdGhpcy5fY29udHJvbCA9IHRoaXMucXVlcnlTZWxlY3RvcihcImlucHV0XCIpO1xuICAgIHJldHVybiB0aGlzLl9jb250cm9sO1xuICB9XG4gIGdldCBsaXN0KCkge1xuICAgIHZhciBfYTI7XG4gICAgaWYgKCEoKF9hMiA9IHRoaXMuX2xpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKVxuICAgICAgdGhpcy5fbGlzdCA9IHRoaXMucXVlcnlTZWxlY3RvcihcInUtZGF0YWxpc3QsZGF0YWxpc3RcIik7XG4gICAgcmV0dXJuIHRoaXMuX2xpc3Q7XG4gIH1cbiAgZ2V0IGNsZWFyKCkge1xuICAgIHZhciBfYTI7XG4gICAgaWYgKCEoKF9hMiA9IHRoaXMuX2NsZWFyKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmlzQ29ubmVjdGVkKSkgdGhpcy5fY2xlYXIgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJkZWxcIik7XG4gICAgcmV0dXJuIHRoaXMuX2NsZWFyO1xuICB9XG4gIGdldCBpdGVtcygpIHtcbiAgICBpZiAoIXRoaXMuX2l0ZW1zKSB0aGlzLl9pdGVtcyA9IHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJkYXRhXCIpO1xuICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgfVxuICBnZXQgb3B0aW9ucygpIHtcbiAgICB2YXIgX2EyLCBfYjtcbiAgICBpZiAoIXRoaXMuX29wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHRhZyA9ICgoX2EyID0gdGhpcy5saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLm5vZGVOYW1lKSA9PT0gXCJVLURBVEFMSVNUXCIgPyBcInUtb3B0aW9uXCIgOiBcIm9wdGlvblwiO1xuICAgICAgdGhpcy5fb3B0aW9ucyA9IChfYiA9IHRoaXMubGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG4gIGdldCB2YWx1ZXMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLml0ZW1zXS5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpO1xuICB9XG59O1xudmFyIHRleHQgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgcmV0dXJuICgoX2EyID0gZWwgPT0gbnVsbCA/IHZvaWQgMCA6IGVsLnRleHRDb250ZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKSkgfHwgXCJcIjtcbn07XG52YXIgaXNEYXRhID0gKGVsKSA9PiBlbCBpbnN0YW5jZW9mIEhUTUxEYXRhRWxlbWVudDtcbnZhciBpc0Rpc2FibGVkID0gKHsgY29udHJvbCB9KSA9PiAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5kaXNhYmxlZCkgfHwgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wucmVhZE9ubHkpIHx8IGZhbHNlO1xudmFyIHJlbmRlciA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF9mb2N1cywgX3RleHRzLCBpdGVtcywgY29udHJvbCwgbGlzdCwgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGlmICghY29udHJvbCB8fCAhbGlzdCkgcmV0dXJuO1xuICBjb25zdCBwcmV2ID0gZ2V0TGFiZWwoY29udHJvbCk7XG4gIGNvbnN0IG5leHQgPSBwcmV2LmVuZHNXaXRoKE1PRElGSUVEKSA/IGF0dHIoY29udHJvbCwgXCJkYXRhLWxhYmVsXCIpIDogcHJldjtcbiAgYXR0cihjb250cm9sLCBcImRhdGEtbGFiZWxcIiwgbmV4dCk7XG4gIGxldCBsYWJlbCA9IGAke25leHR9JHttdWx0aXBsZSA/IGAsICR7aXRlbXMubGVuZ3RoID8gX3RleHRzLmZvdW5kLnJlcGxhY2UoXCIlZFwiLCBgJHtpdGVtcy5sZW5ndGh9YCkgOiBfdGV4dHMuZW1wdHl9YCA6IFwiXCJ9YDtcbiAgY29uc3QgZWRpdHMgPSBbXTtcbiAgZm9yIChjb25zdCB7IGFkZGVkTm9kZXMsIHJlbW92ZWROb2RlcyB9IG9mIChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQuZGV0YWlsKSB8fCBbXSkge1xuICAgIGZvciAoY29uc3QgZWwgb2YgYWRkZWROb2RlcykgaWYgKGlzRGF0YShlbCkpIGVkaXRzLnVuc2hpZnQoZWwpO1xuICAgIGZvciAoY29uc3QgZWwgb2YgcmVtb3ZlZE5vZGVzKSBpZiAoaXNEYXRhKGVsKSkgZWRpdHMucHVzaChlbCk7XG4gIH1cbiAgY29uc3Qgc2hvdWxkQW5ub3VuY2UgPSBtdWx0aXBsZSA/IGVkaXRzLmxlbmd0aCA9PT0gMSA6IGVkaXRzWzBdID09PSBfZm9jdXM7XG4gIGlmIChfZm9jdXMgJiYgc2hvdWxkQW5ub3VuY2UpIHtcbiAgICBjb25zdCBhcmlhRXhwYW5kZWQgPSBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiKTtcbiAgICBjb25zdCBpbnB1dE1vZGUgPSBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIpO1xuICAgIGNvbnN0IG5leHRGb2N1cyA9IGlzRGF0YShfZm9jdXMpID8gY29udHJvbCA6IF9mb2N1cztcbiAgICBjb25zdCBpc1JlbW92ZSA9ICFlZGl0c1swXS5pc0Nvbm5lY3RlZDtcbiAgICBzZWxmLl9zcGVhayA9IGAke190ZXh0c1tpc1JlbW92ZSA/IFwicmVtb3ZlZFwiIDogXCJhZGRlZFwiXX0gJHt0ZXh0KGVkaXRzWzBdKX0sIGA7XG4gICAgaWYgKElTX01PQklMRSB8fCBfZm9jdXMgPT09IGNvbnRyb2wpIHNwZWFrKHNlbGYuX3NwZWFrKTtcbiAgICBpZiAoY29udHJvbCAhPT0gbmV4dEZvY3VzKSB7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiLCBudWxsKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgXCJub25lXCIpO1xuICAgICAgbGFiZWwgPSBcIlxceEEwXCI7XG4gICAgICBjb250cm9sLmZvY3VzKCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIGF0dHIoY29udHJvbCwgXCJhcmlhLWV4cGFuZGVkXCIsIGFyaWFFeHBhbmRlZCk7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIsIGlzUmVtb3ZlID8gXCJub25lXCIgOiBpbnB1dE1vZGUpO1xuICAgICAgKF9hMyA9IG5leHRGb2N1cyA9PSBudWxsID8gdm9pZCAwIDogbmV4dEZvY3VzLmZvY3VzKSA9PSBudWxsID8gdm9pZCAwIDogX2EzLmNhbGwobmV4dEZvY3VzKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgaW5wdXRNb2RlKTtcbiAgICAgIHNlbGYuX3NwZWFrID0gXCJcIjtcbiAgICAgIGlmIChJU19GSVJFRk9YX0RFU0tUT1ApIG9uKHNlbGYsIFwiYmx1clwiLCAoKSA9PiByZW5kZXIoc2VsZiksIEVWRU5UX09OQ0UpO1xuICAgICAgZWxzZSBzZXRUaW1lb3V0KHJlbmRlciwgMTAwLCBzZWxmKTtcbiAgICB9LCAxMDApO1xuICB9XG4gIGxldCBpZHggPSAwO1xuICBjb25zdCBzZWxlY3QgPSBzZWxmLnF1ZXJ5U2VsZWN0b3IoXCJzZWxlY3RcIik7XG4gIGNvbnN0IHJlbW92ZSA9IGlzRGlzYWJsZWQoc2VsZikgPyBcIlwiIDogYCR7X3RleHRzLnJlbW92ZX0sIGA7XG4gIGZvciAoY29uc3QgaXRlbTIgb2YgaXRlbXMpIHtcbiAgICBjb25zdCBvcHRpb24gPSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zW2lkeF07XG4gICAgY29uc3QgbGFiZWwyID0gdGV4dChpdGVtMik7XG4gICAgY29uc3QgdmFsdWUgPSBpdGVtMi52YWx1ZSB8fCBsYWJlbDI7XG4gICAgY29uc3QgYXJpYSA9IGAke3NlbGYuX3NwZWFrfSR7bGFiZWwyfSwgJHtyZW1vdmV9JHsrK2lkeH0gJHtfdGV4dHMub2Z9ICR7aXRlbXMubGVuZ3RofWA7XG4gICAgYXR0cihpdGVtMiwgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIGF0dHIoaXRlbTIsIFwidmFsdWVcIiwgdmFsdWUpO1xuICAgIGF0dHIoaXRlbTIsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICBhdHRyKGl0ZW0yLCBcImFyaWEtbGFiZWxcIiwgYXJpYSk7XG4gICAgaWYgKG9wdGlvbikgT2JqZWN0LmFzc2lnbihvcHRpb24sIHsgdGV4dENvbnRlbnQ6IGxhYmVsMiwgdmFsdWUgfSk7XG4gICAgZWxzZSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5hcHBlbmRDaGlsZChuZXcgT3B0aW9uKGxhYmVsMiwgdmFsdWUsIHRydWUsIHRydWUpKTtcbiAgfVxuICBpZiAoc2VsZWN0KSBhdHRyKHNlbGVjdCwgXCJtdWx0aXBsZVwiLCBtdWx0aXBsZSA/IFwiXCIgOiBudWxsKTtcbiAgZm9yIChjb25zdCBvcHQgb2YgWy4uLihzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zKSB8fCBbXV0uc2xpY2UoaWR4KSkgb3B0LnJlbW92ZSgpO1xuICBpZiAoIW11bHRpcGxlICYmIGlkeCA+IDEpXG4gICAgY29uc29sZS53YXJuKFwidS1jb21ib2JveDogTXVsdGlwbGUgPGRhdGE+IGZvdW5kIGluIHNpbmdsZSBtb2RlLlwiKTtcbiAgYXR0cihsaXN0LCBcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCIsIGAke211bHRpcGxlfWApO1xuICBhdHRyKGNvbnRyb2wsIFwibGlzdFwiLCB1c2VJZChsaXN0KSk7XG4gIGF0dHIoY29udHJvbCwgXCJhcmlhLWxhYmVsXCIsIGAke3NlbGYuX3NwZWFrfSR7bGFiZWx9JHtNT0RJRklFRH1gKTtcbiAgaWYgKGxpc3QuaGFzQXR0cmlidXRlKFwicG9wb3ZlclwiKSkge1xuICAgIGF0dHIoY29udHJvbCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKGxpc3QpKTtcbiAgICBhdHRyKGxpc3QsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcbiAgfVxuICBjb25zdCBpdGVtID0gdGV4dChpdGVtc1swXSk7XG4gIGlmIChpdGVtICE9PSBzZWxmLl9pdGVtKSBzeW5jSW5wdXRWYWx1ZShzZWxmKTtcbiAgc2VsZi5faXRlbSA9IGl0ZW07XG4gIHN5bmNDbGVhcldpdGhJbnB1dChzZWxmKTtcbiAgc3luY09wdGlvbnNXaXRoSXRlbXMoc2VsZik7XG4gIChfYTIgPSBtdXRhdGlvbk9ic2VydmVyKHNlbGYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRha2VSZWNvcmRzKCk7XG59O1xudmFyIHN5bmNDbGVhcldpdGhJbnB1dCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChzZWxmLmNsZWFyKSBhdHRyKHNlbGYuY2xlYXIsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgaWYgKHNlbGYuY2xlYXIpIHNlbGYuY2xlYXIuaGlkZGVuID0gISgoX2EyID0gc2VsZi5jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnZhbHVlKSB8fCBpc0Rpc2FibGVkKHNlbGYpO1xufTtcbnZhciBzeW5jT3B0aW9uc1dpdGhJdGVtcyA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgX3NwZWFrLCBvcHRpb25zID0gW10sIHZhbHVlcyB9ID0gc2VsZjtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gKF9hMiA9IGF0dHIob3B0LCBcInZhbHVlXCIpKSAhPSBudWxsID8gX2EyIDogdGV4dChvcHQpO1xuICAgIGF0dHIob3B0LCBcImFyaWEtbGFiZWxcIiwgX3NwZWFrID8gYCR7X3NwZWFrfSR7dGV4dChvcHQpfWAgOiBudWxsKTtcbiAgICBhdHRyKG9wdCwgXCJzZWxlY3RlZFwiLCB2YWx1ZXMuaW5jbHVkZXModmFsdWUpID8gXCJcIiA6IG51bGwpO1xuICB9XG59O1xudmFyIHN5bmNJbnB1dFZhbHVlID0gKHNlbGYpID0+IHtcbiAgY29uc3QgeyBtdWx0aXBsZSwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gdGV4dChpdGVtc1swXSk7XG4gIGlmICghbXVsdGlwbGUgJiYgY29udHJvbCAmJiB2YWx1ZSAhPT0gY29udHJvbC52YWx1ZSlcbiAgICBzZXRWYWx1ZShjb250cm9sLCB2YWx1ZSwgdmFsdWUgPyBcImluc2VydFRleHRcIiA6IFwiZGVsZXRlQ29udGVudFwiKTtcbn07XG52YXIgZGlzcGF0Y2hNYXRjaCA9IChzZWxmLCBjaGFuZ2UgPSB0cnVlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgX3RleHRzLCBvcHRpb25zID0gW10sIGNyZWF0YWJsZSwgY29udHJvbCwgaXRlbXMsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IHF1ZXJ5ID0gdmFsdWUudG9Mb3dlckNhc2UoKSB8fCBudWxsO1xuICBsZXQgbWF0Y2ggPSBbLi4ub3B0aW9uc10uZmluZChcbiAgICAob3B0KSA9PiAoYXR0cihvcHQsIFwibGFiZWxcIikgfHwgdGV4dChvcHQpKS50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gcXVlcnlcbiAgKTtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogbWF0Y2ggfTtcbiAgaWYgKCFzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiY29tYm9ib3hiZWZvcmVtYXRjaFwiLCBldmVudCkpKVxuICAgIG1hdGNoID0gWy4uLm9wdGlvbnNdLmZpbmQoKG8pID0+IG8uc2VsZWN0ZWQpO1xuICBpZiAoY2hhbmdlKSB7XG4gICAgc3luY09wdGlvbnNXaXRoSXRlbXMoc2VsZik7XG4gICAgaWYgKG1hdGNoKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgbWF0Y2gsIGZhbHNlKTtcbiAgICBpZiAoY3JlYXRhYmxlICYmIHZhbHVlKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgeyB2YWx1ZSB9LCBmYWxzZSk7XG4gICAgaWYgKCFtdWx0aXBsZSAmJiAhdmFsdWUgJiYgaXRlbXNbMF0pIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW1zWzBdKTtcbiAgICBlbHNlIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICAgIHJldHVybiBzcGVhayhfdGV4dHMuaW52YWxpZCk7XG4gIH1cbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykgb3B0LnNlbGVjdGVkID0gb3B0ID09PSBtYXRjaDtcbn07XG52YXIgZGlzcGF0Y2hDaGFuZ2UgPSAoc2VsZiwgaXRlbSwgcmVtb3ZhYmxlID0gdHJ1ZSkgPT4ge1xuICBjb25zdCB7IGNvbnRyb2wsIGl0ZW1zLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgYWRkID0gY3JlYXRlRWxlbWVudChcImRhdGFcIiwgaXRlbS5sYWJlbCB8fCBpdGVtLnZhbHVlLCB7XG4gICAgdmFsdWU6IGl0ZW0udmFsdWVcbiAgfSk7XG4gIGNvbnN0IHJlbW92ZSA9IFsuLi5pdGVtc10uZmluZCgoaSkgPT4gaS52YWx1ZSA9PT0gaXRlbS52YWx1ZSk7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IHJlbW92ZSB8fCBhZGQgfTtcbiAgY29uc3Qgc2tpcCA9IHJlbW92ZSAmJiAhcmVtb3ZhYmxlO1xuICBpZiAoc2tpcCkgcmV0dXJuIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICBpZiAoc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImNvbWJvYm94YmVmb3Jlc2VsZWN0XCIsIGV2ZW50KSkpIHtcbiAgICBpZiAoIW11bHRpcGxlKSBmb3IgKGNvbnN0IGl0ZW0yIG9mIFsuLi5pdGVtc10pIGl0ZW0yLnJlbW92ZSgpO1xuICAgIGlmIChyZW1vdmUpIHJlbW92ZS5yZW1vdmUoKTtcbiAgICBlbHNlIGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYmVmb3JlYmVnaW5cIiwgYWRkKTtcbiAgICBzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiY29tYm9ib3hhZnRlcnNlbGVjdFwiLCBldmVudCkpO1xuICB9XG59O1xudmFyIG9uRm9jdXMgPSAoc2VsZiwgeyB0YXJnZXQgfSkgPT4ge1xuICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHNlbGYuX2ZvY3VzID0gdGFyZ2V0O1xuICBzcGVhaygpO1xufTtcbnZhciBvbkJsdXIgPSAoc2VsZikgPT4gaXNNb3VzZURvd24oKSB8fCBzZXRUaW1lb3V0KG9uQmx1cnJlZCwgMCwgc2VsZik7XG52YXIgb25CbHVycmVkID0gKHNlbGYpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9mb2N1cyB8fCBzZWxmLmNvbnRhaW5zKChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQpKSByZXR1cm47XG4gIGlmICghc2VsZi5tdWx0aXBsZSkgZGlzcGF0Y2hNYXRjaChzZWxmKTtcbiAgc2VsZi5fZm9jdXMgPSB2b2lkIDA7XG59O1xudmFyIG9uQ2xpY2sgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgY29uc3QgeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5LCB0YXJnZXQgfSA9IGV2ZW50O1xuICBjb25zdCB7IGNsZWFyLCBjb250cm9sLCBpdGVtcyB9ID0gc2VsZjtcbiAgaWYgKGNsZWFyID09IG51bGwgPyB2b2lkIDAgOiBjbGVhci5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgaWYgKGNvbnRyb2wpIHNldFZhbHVlKGNvbnRyb2wsIFwiXCIsIFwiZGVsZXRlQ29udGVudEJhY2t3YXJkXCIpO1xuICAgIHJldHVybiBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCk7XG4gIH1cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfSA9IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKGl0ZW0uY29udGFpbnModGFyZ2V0KSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW0pO1xuICAgIGlmICh5ID49IHRvcCAmJiB5IDw9IGJvdHRvbSAmJiB4ID49IGxlZnQgJiYgeCA8PSByaWdodCkgcmV0dXJuIGl0ZW0uZm9jdXMoKTtcbiAgfVxuICBpZiAodGFyZ2V0ID09PSBzZWxmKSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCk7XG59O1xudmFyIG9uSW5wdXQgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgeyBvcHRpb25zID0gW10sIGNvbnRyb2wsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IGlzQ2xpY2sgPSBldmVudCBpbnN0YW5jZW9mIElucHV0RXZlbnQgPyAhZXZlbnQuaW5wdXRUeXBlIHx8IGV2ZW50LmlucHV0VHlwZSA9PT0gXCJpbnNlcnRSZXBsYWNlbWVudFRleHRcIiA6ICEhdmFsdWU7XG4gIGlmIChpc0NsaWNrKSB7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGNvbnRyb2wpIGNvbnRyb2wudmFsdWUgPSBzZWxmLl92YWx1ZTtcbiAgICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKVxuICAgICAgaWYgKG9wdC52YWx1ZSAmJiBvcHQudmFsdWUgPT09IHZhbHVlKVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgb3B0LCBtdWx0aXBsZSk7XG4gIH0gZWxzZSBpZiAoIW11bHRpcGxlKSBkaXNwYXRjaE1hdGNoKHNlbGYsIGZhbHNlKTtcbiAgc3luY0NsZWFyV2l0aElucHV0KHNlbGYpO1xufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkpIHJldHVybjtcbiAgY29uc3QgeyBjbGVhciwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGNvbnN0IHsga2V5LCByZXBlYXQsIHRhcmdldCB9ID0gZXZlbnQ7XG4gIGNvbnN0IGlzQ29udHJvbCA9IGNvbnRyb2wgJiYgY29udHJvbCA9PT0gdGFyZ2V0O1xuICBjb25zdCBpblRleHQgPSBpc0NvbnRyb2wgJiYgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuc2VsZWN0aW9uRW5kKTtcbiAgbGV0IGluZGV4ID0gaXNDb250cm9sID8gaXRlbXMubGVuZ3RoIDogWy4uLml0ZW1zXS5pbmRleE9mKHRhcmdldCk7XG4gIGlmIChpc0NvbnRyb2wgJiYga2V5ID09PSBcIlRhYlwiICYmIGNsZWFyICYmICFjbGVhci5oaWRkZW4pIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNsZWFyLnRhYkluZGV4ID0gLTE7XG4gICAgY2xlYXIuZm9jdXMoKTtcbiAgICBvbihjbGVhciwgXCJibHVyXCIsICgpID0+IGF0dHIoY2xlYXIsIFwidGFiaW5kZXhcIiwgbnVsbCksIEVWRU5UX09OQ0UpO1xuICB9XG4gIGlmICghaXNDb250cm9sICYmIGFzQnV0dG9uKGV2ZW50KSB8fCBpbmRleCA9PT0gLTEpIHJldHVybjtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1JpZ2h0XCIgJiYgIWlzQ29udHJvbCkgaW5kZXggKz0gMTtcbiAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93TGVmdFwiICYmICFpblRleHQpIGluZGV4IC09IDE7XG4gIGVsc2UgaWYgKGtleSA9PT0gXCJFbnRlclwiICYmIGlzQ29udHJvbCkge1xuICAgIGNvbnN0IGZvcm0gPSBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiKTtcbiAgICBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiLCBcIiNcIik7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IGF0dHIoY29udHJvbCwgXCJmb3JtXCIsIGZvcm0pKTtcbiAgICByZXR1cm4gZGlzcGF0Y2hNYXRjaChzZWxmKTtcbiAgfSBlbHNlIGlmICgoa2V5ID09PSBcIkJhY2tzcGFjZVwiIHx8IGtleSA9PT0gXCJEZWxldGVcIikgJiYgIWluVGV4dCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCFyZXBlYXQgJiYgaXRlbXNbaW5kZXhdKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgaXRlbXNbaW5kZXhdKTtcbiAgICBpZiAoaXNDb250cm9sKSBpbmRleCAtPSAxO1xuICB9IGVsc2UgcmV0dXJuIGlzQ29udHJvbCB8fCAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpKTtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgKF9hMiA9IGl0ZW1zW01hdGgubWF4KDAsIGluZGV4KV0gfHwgY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtY29tYm9ib3hcIiwgVUhUTUxDb21ib2JveEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTENvbWJvYm94RWxlbWVudCwgVUhUTUxDb21ib2JveFNoYWRvd1Jvb3QsIFVIVE1MQ29tYm9ib3hTdHlsZSB9O1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgU0FGRV9MQUJFTExFREJZID0gYCR7SVNfQU5EUk9JRCA/IFwiZGF0YVwiIDogXCJhcmlhXCJ9LWxhYmVsbGVkYnlgO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuc2hhZG93Um9vdCB8fCBlbGVtZW50LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gIC8vIFVubmFtZWQgc2xvdCBkb2VzIGF1dG9tYXRpY2FsbHkgcmVuZGVyIGFsbCB0b3AgZWxlbWVudCBub2Rlc1xuICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgY3NzKVxuKTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoX2Vycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZGVjbGFyYXRpdmVTaGFkb3dSb290ID0gKHN0eWxlLCBzbG90ID0gXCI8c2xvdD48L3Nsb3Q+XCIpID0+IGA8dGVtcGxhdGUgc2hhZG93cm9vdG1vZGU9XCJvcGVuXCI+JHtzbG90fTxzdHlsZT4ke3N0eWxlfTwvc3R5bGU+PC90ZW1wbGF0ZT5gO1xuXG4vLyB1LXRhYnMudHNcbnZhciBVSFRNTFRhYnNTdHlsZSA9IERJU1BMQVlfQkxPQ0s7XG52YXIgVUhUTUxUYWJMaXN0U3R5bGUgPSBESVNQTEFZX0JMT0NLO1xudmFyIFVIVE1MVGFiUGFuZWxTdHlsZSA9IERJU1BMQVlfQkxPQ0s7XG52YXIgVUhUTUxUYWJTdHlsZSA9ICc6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGN1cnNvcjogcG9pbnRlciB9Omhvc3QoW2FyaWEtZGlzYWJsZWQ9XCJ0cnVlXCJdKSB7IGN1cnNvcjogZGVmYXVsdCB9JztcbnZhciBVSFRNTFRhYnNTaGFkb3dSb290ID0gZGVjbGFyYXRpdmVTaGFkb3dSb290KFVIVE1MVGFic1N0eWxlKTtcbnZhciBVSFRNTFRhYkxpc3RTaGFkb3dSb290ID0gZGVjbGFyYXRpdmVTaGFkb3dSb290KFVIVE1MVGFiTGlzdFN0eWxlKTtcbnZhciBVSFRNTFRhYlNoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoVUhUTUxUYWJTdHlsZSk7XG52YXIgVUhUTUxUYWJQYW5lbFNoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoVUhUTUxUYWJQYW5lbFN0eWxlKTtcbnZhciBBUklBX0NPTlRST0xTID0gXCJhcmlhLWNvbnRyb2xzXCI7XG52YXIgQVJJQV9TRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xudmFyIFVIVE1MVGFic0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgVUhUTUxUYWJzU3R5bGUpO1xuICB9XG4gIGdldCB0YWJMaXN0KCkge1xuICAgIHJldHVybiBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYmxpc3RcIiwgdGhpcylbMF0gfHwgbnVsbDtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpO1xuICB9XG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgc2V0U2VsZWN0ZWQodGhpcy50YWJzW2luZGV4XSk7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFiXCIsIHRoaXMpO1xuICB9XG4gIGdldCBwYW5lbHMoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFicGFuZWxcIiwgdGhpcyk7XG4gIH1cbn07XG52YXIgVUhUTUxUYWJMaXN0RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBVSFRNTFRhYkxpc3RTdHlsZSk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJ0YWJsaXN0XCIpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICAgIGlmICh0aGlzLnRhYnMubGVuZ3RoKSB0aGlzLmhhbmRsZUV2ZW50KCk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgb2ZmKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIGZhbHNlKTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGlmICghZXZlbnQgfHwgZXZlbnQudHlwZSA9PT0gXCJtdXRhdGlvblwiKSB7XG4gICAgICBjb25zdCB0YWIgPSB0aGlzLnRhYnNbTWF0aC5tYXgodGhpcy5zZWxlY3RlZEluZGV4LCAwKV07XG4gICAgICByZXR1cm4gdGFiID09IG51bGwgPyB2b2lkIDAgOiB0YWIuc2V0QXR0cmlidXRlKEFSSUFfU0VMRUNURUQsIFwidHJ1ZVwiKTtcbiAgICB9XG4gICAgY29uc3QgeyBrZXkgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHRhYnMgPSBbLi4udGhpcy50YWJzXTtcbiAgICBjb25zdCBwcmV2ID0gdGFicy5maW5kSW5kZXgoKHRhYikgPT4gdGFiLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpO1xuICAgIGxldCBuZXh0ID0gcHJldjtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCBwcmV2ID09PSAtMSkgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIpIHNldFNlbGVjdGVkKHRhYnNbcHJldl0pO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIiAmJiAhYXNCdXR0b24oZXZlbnQpKSB7XG4gICAgICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiIHx8IGtleSA9PT0gXCJBcnJvd1JpZ2h0XCIpXG4gICAgICAgIG5leHQgPSAocHJldiArIDEpICUgdGFicy5sZW5ndGg7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiQXJyb3dVcFwiIHx8IGtleSA9PT0gXCJBcnJvd0xlZnRcIilcbiAgICAgICAgbmV4dCA9IChwcmV2IHx8IHRhYnMubGVuZ3RoKSAtIDE7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiRW5kXCIpIG5leHQgPSB0YWJzLmxlbmd0aCAtIDE7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiSG9tZVwiKSBuZXh0ID0gMDtcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJUYWJcIikgbmV4dCA9IGdldFNlbGVjdGVkSW5kZXgodGFicyk7XG4gICAgICBlbHNlIHJldHVybjtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0YWJzW3ByZXZdLnRhYkluZGV4ID0gLTE7XG4gICAgICAgIHRhYnNbbmV4dF0udGFiSW5kZXggPSAwO1xuICAgICAgfSk7XG4gICAgICBpZiAoa2V5ICE9PSBcIlRhYlwiKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRhYnNbbmV4dF0uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpO1xuICB9XG4gIGdldCBzZWxlY3RlZEluZGV4KCkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicyk7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgICBzZXRTZWxlY3RlZCh0aGlzLnRhYnNbaW5kZXhdKTtcbiAgfVxufTtcbnZhciBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG52YXIgVUhUTUxUYWJFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiaWRcIiwgQVJJQV9TRUxFQ1RFRCwgQVJJQV9DT05UUk9MU107XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBVSFRNTFRhYlN0eWxlKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcInRhYlwiKTtcbiAgICB0aGlzLnRhYkluZGV4ID0gdGhpcy5zZWxlY3RlZCA/IDAgOiAtMTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCFTS0lQX0FUVFJfQ0hBTkdFICYmIHRoaXMuc2VsZWN0ZWQgJiYgdGhpcy50YWJMaXN0KSB7XG4gICAgICBTS0lQX0FUVFJfQ0hBTkdFID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHRhYnMgPSBbLi4udGhpcy50YWJMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKV07XG4gICAgICBjb25zdCBwYW5lbHMgPSBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYnBhbmVsXCIsIHRoaXMudGFic0VsZW1lbnQgfHwgdGhpcyk7XG4gICAgICBjb25zdCBuZXh0UGFuZWwgPSBnZXRQYW5lbCh0aGlzLCBwYW5lbHNbdGFicy5pbmRleE9mKHRoaXMpXSk7XG4gICAgICBpZiAobmV4dFBhbmVsKSBhdHRyKG5leHRQYW5lbCwgU0FGRV9MQUJFTExFREJZLCB1c2VJZCh0aGlzKSk7XG4gICAgICB0YWJzLmZvckVhY2goKHRhYiwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSBnZXRQYW5lbCh0YWIsIHBhbmVsc1tpbmRleF0pO1xuICAgICAgICB0YWIudGFiSW5kZXggPSB0YWIgPT09IHRoaXMgPyAwIDogLTE7XG4gICAgICAgIGF0dHIodGFiLCBBUklBX1NFTEVDVEVELCBgJHt0YWIgPT09IHRoaXN9YCk7XG4gICAgICAgIGF0dHIodGFiLCBBUklBX0NPTlRST0xTLCAocGFuZWwgPT0gbnVsbCA/IHZvaWQgMCA6IHBhbmVsLmlkKSB8fCBudWxsKTtcbiAgICAgICAgaWYgKHBhbmVsKSBwYW5lbC5oaWRkZW4gPSBwYW5lbCAhPT0gbmV4dFBhbmVsO1xuICAgICAgfSk7XG4gICAgICBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJMaXN0KCkge1xuICAgIGNvbnN0IHRhYmxpc3QgPSB0aGlzLnBhcmVudEVsZW1lbnQ7XG4gICAgcmV0dXJuICh0YWJsaXN0ID09IG51bGwgPyB2b2lkIDAgOiB0YWJsaXN0Lm5vZGVOYW1lKSA9PT0gXCJVLVRBQkxJU1RcIiA/IHRhYmxpc3QgOiBudWxsO1xuICB9XG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBBUklBX1NFTEVDVEVEKSA9PT0gXCJ0cnVlXCI7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBBUklBX1NFTEVDVEVELCBgJHshIXZhbHVlfWApO1xuICB9XG4gIC8qKiBSZXRyaWV2ZXMgdGhlIG9yZGluYWwgcG9zaXRpb24gb2YgYW4gdGFiIGluIGEgdGFibGlzdC4gKi9cbiAgZ2V0IGluZGV4KCkge1xuICAgIGNvbnN0IHRhYkxpc3QgPSB0aGlzLnRhYkxpc3Q7XG4gICAgcmV0dXJuIHRhYkxpc3QgPyBbLi4udGFiTGlzdC5xdWVyeVNlbGVjdG9yQWxsKFwidS10YWJcIildLmluZGV4T2YodGhpcykgOiAwO1xuICB9XG4gIGdldCBwYW5lbCgpIHtcbiAgICByZXR1cm4gZ2V0UGFuZWwodGhpcyk7XG4gIH1cbn07XG52YXIgVUhUTUxUYWJQYW5lbEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJoaWRkZW5cIl07XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBVSFRNTFRhYlBhbmVsU3R5bGUpO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFicGFuZWxcIik7XG4gICAgdGhpcy5oaWRkZW4gPSBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicykgPT09IC0xO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGNvbnN0IGhpZGRlbiA9IHRoaXMuaGlkZGVuO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWhpZGRlblwiLCBgJHtoaWRkZW59YCk7XG4gICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIGhpZGRlbiB8fCBpc0ZvY3VzYWJsZSh0aGlzLmZpcnN0Q2hpbGQpID8gbnVsbCA6IFwiMFwiKTtcbiAgfVxuICBnZXQgdGFic0VsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcInUtdGFic1wiKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICBjb25zdCBjc3MgPSBgdS10YWJbJHtBUklBX0NPTlRST0xTfT1cIiR7dGhpcy5pZH1cIl1gO1xuICAgIHJldHVybiBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoY3NzKTtcbiAgfVxufTtcbnZhciBxdWVyeVdpdGhvdXROZXN0ZWQgPSAodGFnLCBzZWxmKSA9PiBzZWxmLnF1ZXJ5U2VsZWN0b3JBbGwoYCR7dGFnfTpub3QoOnNjb3BlIHUtdGFicGFuZWwgJHt0YWd9KWApO1xudmFyIGdldFBhbmVsID0gKHRhYiwgcGFuZWwpID0+IHtcbiAgY29uc3QgaWQyID0gYXR0cih0YWIsIEFSSUFfQ09OVFJPTFMpIHx8IHVzZUlkKHBhbmVsKTtcbiAgY29uc3QgZWwgPSBnZXRSb290KHRhYikuZ2V0RWxlbWVudEJ5SWQoaWQyKTtcbiAgcmV0dXJuIChlbCA9PSBudWxsID8gdm9pZCAwIDogZWwubm9kZU5hbWUpID09PSBcIlUtVEFCUEFORUxcIiA/IGVsIDogbnVsbDtcbn07XG52YXIgZ2V0U2VsZWN0ZWRJbmRleCA9ICh0YWJzKSA9PiBbLi4udGFic10uZmluZEluZGV4KCh0YWIpID0+IGF0dHIodGFiLCBBUklBX1NFTEVDVEVEKSA9PT0gXCJ0cnVlXCIpO1xudmFyIHNldFNlbGVjdGVkID0gKHRhYikgPT4gdGFiICYmIGF0dHIodGFiLCBcImFyaWEtZGlzYWJsZWRcIikgIT09IFwidHJ1ZVwiICYmIGF0dHIodGFiLCBcImFyaWEtc2VsZWN0ZWRcIiwgXCJ0cnVlXCIpO1xudmFyIGlzRm9jdXNhYmxlID0gKGVsKSA9PiBlbCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgIWVsLm1hdGNoZXMoJzpkaXNhYmxlZCxbdGFiaW5kZXhePVwiLVwiXScpICYmIGVsLm1hdGNoZXMoXG4gIGBbY29udGVudGVkaXRhYmxlXSxbY29udHJvbHNdLFtocmVmXSxbdGFiaW5kZXhdLGlucHV0Om5vdChbdHlwZT1cImhpZGRlblwiXSksc2VsZWN0LHRleHRhcmVhLGJ1dHRvbixzdW1tYXJ5LGlmcmFtZWBcbik7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYnNcIiwgVUhUTUxUYWJzRWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYmxpc3RcIiwgVUhUTUxUYWJMaXN0RWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYlwiLCBVSFRNTFRhYkVsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJwYW5lbFwiLCBVSFRNTFRhYlBhbmVsRWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MVGFiRWxlbWVudCwgVUhUTUxUYWJMaXN0RWxlbWVudCwgVUhUTUxUYWJMaXN0U2hhZG93Um9vdCwgVUhUTUxUYWJMaXN0U3R5bGUsIFVIVE1MVGFiUGFuZWxFbGVtZW50LCBVSFRNTFRhYlBhbmVsU2hhZG93Um9vdCwgVUhUTUxUYWJQYW5lbFN0eWxlLCBVSFRNTFRhYlNoYWRvd1Jvb3QsIFVIVE1MVGFiU3R5bGUsIFVIVE1MVGFic0VsZW1lbnQsIFVIVE1MVGFic1NoYWRvd1Jvb3QsIFVIVE1MVGFic1N0eWxlIH07XG4iLCIvKipcbiAqIEN1c3RvbSBwb3NpdGlvbmluZyByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy92aXJ0dWFsLWVsZW1lbnRzXG4gKi9cblxuY29uc3Qgc2lkZXMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddO1xuY29uc3QgYWxpZ25tZW50cyA9IFsnc3RhcnQnLCAnZW5kJ107XG5jb25zdCBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL3NpZGVzLnJlZHVjZSgoYWNjLCBzaWRlKSA9PiBhY2MuY29uY2F0KHNpZGUsIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMF0sIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMV0pLCBbXSk7XG5jb25zdCBtaW4gPSBNYXRoLm1pbjtcbmNvbnN0IG1heCA9IE1hdGgubWF4O1xuY29uc3Qgcm91bmQgPSBNYXRoLnJvdW5kO1xuY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yO1xuY29uc3QgY3JlYXRlQ29vcmRzID0gdiA9PiAoe1xuICB4OiB2LFxuICB5OiB2XG59KTtcbmNvbnN0IG9wcG9zaXRlU2lkZU1hcCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmNvbnN0IG9wcG9zaXRlQWxpZ25tZW50TWFwID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmZ1bmN0aW9uIGNsYW1wKHN0YXJ0LCB2YWx1ZSwgZW5kKSB7XG4gIHJldHVybiBtYXgoc3RhcnQsIG1pbih2YWx1ZSwgZW5kKSk7XG59XG5mdW5jdGlvbiBldmFsdWF0ZSh2YWx1ZSwgcGFyYW0pIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKHBhcmFtKSA6IHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0U2lkZShwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QXhpc0xlbmd0aChheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG59XG5jb25zdCB5QXhpc1NpZGVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWyd0b3AnLCAnYm90dG9tJ10pO1xuZnVuY3Rpb24gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSB7XG4gIHJldHVybiB5QXhpc1NpZGVzLmhhcyhnZXRTaWRlKHBsYWNlbWVudCkpID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGdldE9wcG9zaXRlQXhpcyhnZXRTaWRlQXhpcyhwbGFjZW1lbnQpKTtcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudFNpZGVzKHBsYWNlbWVudCwgcmVjdHMsIHJ0bCkge1xuICBpZiAocnRsID09PSB2b2lkIDApIHtcbiAgICBydGwgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChhbGlnbm1lbnRBeGlzKTtcbiAgbGV0IG1haW5BbGlnbm1lbnRTaWRlID0gYWxpZ25tZW50QXhpcyA9PT0gJ3gnID8gYWxpZ25tZW50ID09PSAocnRsID8gJ2VuZCcgOiAnc3RhcnQnKSA/ICdyaWdodCcgOiAnbGVmdCcgOiBhbGlnbm1lbnQgPT09ICdzdGFydCcgPyAnYm90dG9tJyA6ICd0b3AnO1xuICBpZiAocmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gPiByZWN0cy5mbG9hdGluZ1tsZW5ndGhdKSB7XG4gICAgbWFpbkFsaWdubWVudFNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluQWxpZ25tZW50U2lkZSk7XG4gIH1cbiAgcmV0dXJuIFttYWluQWxpZ25tZW50U2lkZSwgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpbkFsaWdubWVudFNpZGUpXTtcbn1cbmZ1bmN0aW9uIGdldEV4cGFuZGVkUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgY29uc3Qgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGFsaWdubWVudCA9PiBvcHBvc2l0ZUFsaWdubWVudE1hcFthbGlnbm1lbnRdKTtcbn1cbmNvbnN0IGxyUGxhY2VtZW50ID0gWydsZWZ0JywgJ3JpZ2h0J107XG5jb25zdCBybFBsYWNlbWVudCA9IFsncmlnaHQnLCAnbGVmdCddO1xuY29uc3QgdGJQbGFjZW1lbnQgPSBbJ3RvcCcsICdib3R0b20nXTtcbmNvbnN0IGJ0UGxhY2VtZW50ID0gWydib3R0b20nLCAndG9wJ107XG5mdW5jdGlvbiBnZXRTaWRlTGlzdChzaWRlLCBpc1N0YXJ0LCBydGwpIHtcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgaWYgKHJ0bCkgcmV0dXJuIGlzU3RhcnQgPyBybFBsYWNlbWVudCA6IGxyUGxhY2VtZW50O1xuICAgICAgcmV0dXJuIGlzU3RhcnQgPyBsclBsYWNlbWVudCA6IHJsUGxhY2VtZW50O1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiBpc1N0YXJ0ID8gdGJQbGFjZW1lbnQgOiBidFBsYWNlbWVudDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFtdO1xuICB9XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKHBsYWNlbWVudCwgZmxpcEFsaWdubWVudCwgZGlyZWN0aW9uLCBydGwpIHtcbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGxldCBsaXN0ID0gZ2V0U2lkZUxpc3QoZ2V0U2lkZShwbGFjZW1lbnQpLCBkaXJlY3Rpb24gPT09ICdzdGFydCcsIHJ0bCk7XG4gIGlmIChhbGlnbm1lbnQpIHtcbiAgICBsaXN0ID0gbGlzdC5tYXAoc2lkZSA9PiBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnQpO1xuICAgIGlmIChmbGlwQWxpZ25tZW50KSB7XG4gICAgICBsaXN0ID0gbGlzdC5jb25jYXQobGlzdC5tYXAoZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxpc3Q7XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgc2lkZSA9PiBvcHBvc2l0ZVNpZGVNYXBbc2lkZV0pO1xufVxuZnVuY3Rpb24gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwLFxuICAgIC4uLnBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhZGRpbmdPYmplY3QocGFkZGluZykge1xuICByZXR1cm4gdHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSA6IHtcbiAgICB0b3A6IHBhZGRpbmcsXG4gICAgcmlnaHQ6IHBhZGRpbmcsXG4gICAgYm90dG9tOiBwYWRkaW5nLFxuICAgIGxlZnQ6IHBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICBjb25zdCB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gcmVjdDtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIGxlZnQ6IHgsXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmV4cG9ydCB7IGFsaWdubWVudHMsIGNsYW1wLCBjcmVhdGVDb29yZHMsIGV2YWx1YXRlLCBleHBhbmRQYWRkaW5nT2JqZWN0LCBmbG9vciwgZ2V0QWxpZ25tZW50LCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0QXhpc0xlbmd0aCwgZ2V0RXhwYW5kZWRQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBeGlzLCBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZVBsYWNlbWVudCwgZ2V0UGFkZGluZ09iamVjdCwgZ2V0U2lkZSwgZ2V0U2lkZUF4aXMsIG1heCwgbWluLCBwbGFjZW1lbnRzLCByZWN0VG9DbGllbnRSZWN0LCByb3VuZCwgc2lkZXMgfTtcbiIsImltcG9ydCB7IGdldFNpZGVBeGlzLCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBeGlzTGVuZ3RoLCBnZXRTaWRlLCBnZXRBbGlnbm1lbnQsIGV2YWx1YXRlLCBnZXRQYWRkaW5nT2JqZWN0LCByZWN0VG9DbGllbnRSZWN0LCBtaW4sIGNsYW1wLCBwbGFjZW1lbnRzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQsIGdldE9wcG9zaXRlUGxhY2VtZW50LCBnZXRFeHBhbmRlZFBsYWNlbWVudHMsIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMsIHNpZGVzLCBtYXgsIGdldE9wcG9zaXRlQXhpcyB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5leHBvcnQgeyByZWN0VG9DbGllbnRSZWN0IH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcblxuZnVuY3Rpb24gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQoX3JlZiwgcGxhY2VtZW50LCBydGwpIHtcbiAgbGV0IHtcbiAgICByZWZlcmVuY2UsXG4gICAgZmxvYXRpbmdcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IHNpZGVBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25MZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGFsaWdubWVudEF4aXMpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBpc1ZlcnRpY2FsID0gc2lkZUF4aXMgPT09ICd5JztcbiAgY29uc3QgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGZsb2F0aW5nLndpZHRoIC8gMjtcbiAgY29uc3QgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBmbG9hdGluZy5oZWlnaHQgLyAyO1xuICBjb25zdCBjb21tb25BbGlnbiA9IHJlZmVyZW5jZVthbGlnbkxlbmd0aF0gLyAyIC0gZmxvYXRpbmdbYWxpZ25MZW5ndGhdIC8gMjtcbiAgbGV0IGNvb3JkcztcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBmbG9hdGluZy5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54IC0gZmxvYXRpbmcud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cbiAgc3dpdGNoIChnZXRBbGlnbm1lbnQocGxhY2VtZW50KSkge1xuICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgIGNvb3Jkc1thbGlnbm1lbnRBeGlzXSAtPSBjb21tb25BbGlnbiAqIChydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmQnOlxuICAgICAgY29vcmRzW2FsaWdubWVudEF4aXNdICs9IGNvbW1vbkFsaWduICogKHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBjb29yZHM7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICpcbiAqIFRoaXMgZXhwb3J0IGRvZXMgbm90IGhhdmUgYW55IGBwbGF0Zm9ybWAgaW50ZXJmYWNlIGxvZ2ljLiBZb3Ugd2lsbCBuZWVkIHRvXG4gKiB3cml0ZSBvbmUgZm9yIHRoZSBwbGF0Zm9ybSB5b3UgYXJlIHVzaW5nIEZsb2F0aW5nIFVJIHdpdGguXG4gKi9cbmNvbnN0IGNvbXB1dGVQb3NpdGlvbiA9IGFzeW5jIChyZWZlcmVuY2UsIGZsb2F0aW5nLCBjb25maWcpID0+IHtcbiAgY29uc3Qge1xuICAgIHBsYWNlbWVudCA9ICdib3R0b20nLFxuICAgIHN0cmF0ZWd5ID0gJ2Fic29sdXRlJyxcbiAgICBtaWRkbGV3YXJlID0gW10sXG4gICAgcGxhdGZvcm1cbiAgfSA9IGNvbmZpZztcbiAgY29uc3QgdmFsaWRNaWRkbGV3YXJlID0gbWlkZGxld2FyZS5maWx0ZXIoQm9vbGVhbik7XG4gIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZmxvYXRpbmcpKTtcbiAgbGV0IHJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICByZWZlcmVuY2UsXG4gICAgZmxvYXRpbmcsXG4gICAgc3RyYXRlZ3lcbiAgfSk7XG4gIGxldCB7XG4gICAgeCxcbiAgICB5XG4gIH0gPSBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChyZWN0cywgcGxhY2VtZW50LCBydGwpO1xuICBsZXQgc3RhdGVmdWxQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gIGxldCBtaWRkbGV3YXJlRGF0YSA9IHt9O1xuICBsZXQgcmVzZXRDb3VudCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsaWRNaWRkbGV3YXJlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIGZuXG4gICAgfSA9IHZhbGlkTWlkZGxld2FyZVtpXTtcbiAgICBjb25zdCB7XG4gICAgICB4OiBuZXh0WCxcbiAgICAgIHk6IG5leHRZLFxuICAgICAgZGF0YSxcbiAgICAgIHJlc2V0XG4gICAgfSA9IGF3YWl0IGZuKHtcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgaW5pdGlhbFBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICAgIHN0cmF0ZWd5LFxuICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICBmbG9hdGluZ1xuICAgICAgfVxuICAgIH0pO1xuICAgIHggPSBuZXh0WCAhPSBudWxsID8gbmV4dFggOiB4O1xuICAgIHkgPSBuZXh0WSAhPSBudWxsID8gbmV4dFkgOiB5O1xuICAgIG1pZGRsZXdhcmVEYXRhID0ge1xuICAgICAgLi4ubWlkZGxld2FyZURhdGEsXG4gICAgICBbbmFtZV06IHtcbiAgICAgICAgLi4ubWlkZGxld2FyZURhdGFbbmFtZV0sXG4gICAgICAgIC4uLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChyZXNldCAmJiByZXNldENvdW50IDw9IDUwKSB7XG4gICAgICByZXNldENvdW50Kys7XG4gICAgICBpZiAodHlwZW9mIHJlc2V0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAocmVzZXQucGxhY2VtZW50KSB7XG4gICAgICAgICAgc3RhdGVmdWxQbGFjZW1lbnQgPSByZXNldC5wbGFjZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc2V0LnJlY3RzKSB7XG4gICAgICAgICAgcmVjdHMgPSByZXNldC5yZWN0cyA9PT0gdHJ1ZSA/IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgICAgICBmbG9hdGluZyxcbiAgICAgICAgICAgIHN0cmF0ZWd5XG4gICAgICAgICAgfSkgOiByZXNldC5yZWN0cztcbiAgICAgICAgfVxuICAgICAgICAoe1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeVxuICAgICAgICB9ID0gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQocmVjdHMsIHN0YXRlZnVsUGxhY2VtZW50LCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGkgPSAtMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICBzdHJhdGVneSxcbiAgICBtaWRkbGV3YXJlRGF0YVxuICB9O1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBvZiBvdmVyZmxvdyBzaWRlIG9mZnNldHMgdGhhdCBkZXRlcm1pbmUgaG93IG11Y2ggdGhlXG4gKiBlbGVtZW50IGlzIG92ZXJmbG93aW5nIGEgZ2l2ZW4gY2xpcHBpbmcgYm91bmRhcnkgb24gZWFjaCBzaWRlLlxuICogLSBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBib3VuZGFyeSBieSB0aGF0IG51bWJlciBvZiBwaXhlbHNcbiAqIC0gbmVnYXRpdmUgPSBob3cgbWFueSBwaXhlbHMgbGVmdCBiZWZvcmUgaXQgd2lsbCBvdmVyZmxvd1xuICogLSAwID0gbGllcyBmbHVzaCB3aXRoIHRoZSBib3VuZGFyeVxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2RldGVjdE92ZXJmbG93XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KHN0YXRlLCBvcHRpb25zKSB7XG4gIHZhciBfYXdhaXQkcGxhdGZvcm0kaXNFbGU7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgY29uc3Qge1xuICAgIHgsXG4gICAgeSxcbiAgICBwbGF0Zm9ybSxcbiAgICByZWN0cyxcbiAgICBlbGVtZW50cyxcbiAgICBzdHJhdGVneVxuICB9ID0gc3RhdGU7XG4gIGNvbnN0IHtcbiAgICBib3VuZGFyeSA9ICdjbGlwcGluZ0FuY2VzdG9ycycsXG4gICAgcm9vdEJvdW5kYXJ5ID0gJ3ZpZXdwb3J0JyxcbiAgICBlbGVtZW50Q29udGV4dCA9ICdmbG9hdGluZycsXG4gICAgYWx0Qm91bmRhcnkgPSBmYWxzZSxcbiAgICBwYWRkaW5nID0gMFxuICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgY29uc3QgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSAnZmxvYXRpbmcnID8gJ3JlZmVyZW5jZScgOiAnZmxvYXRpbmcnO1xuICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICBjb25zdCBjbGlwcGluZ0NsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KGF3YWl0IHBsYXRmb3JtLmdldENsaXBwaW5nUmVjdCh7XG4gICAgZWxlbWVudDogKChfYXdhaXQkcGxhdGZvcm0kaXNFbGUgPSBhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoZWxlbWVudCkpKSAhPSBudWxsID8gX2F3YWl0JHBsYXRmb3JtJGlzRWxlIDogdHJ1ZSkgPyBlbGVtZW50IDogZWxlbWVudC5jb250ZXh0RWxlbWVudCB8fCAoYXdhaXQgKHBsYXRmb3JtLmdldERvY3VtZW50RWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnRzLmZsb2F0aW5nKSkpLFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9KSk7XG4gIGNvbnN0IHJlY3QgPSBlbGVtZW50Q29udGV4dCA9PT0gJ2Zsb2F0aW5nJyA/IHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGg6IHJlY3RzLmZsb2F0aW5nLndpZHRoLFxuICAgIGhlaWdodDogcmVjdHMuZmxvYXRpbmcuaGVpZ2h0XG4gIH0gOiByZWN0cy5yZWZlcmVuY2U7XG4gIGNvbnN0IG9mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBvZmZzZXRTY2FsZSA9IChhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQob2Zmc2V0UGFyZW50KSkpID8gKGF3YWl0IChwbGF0Zm9ybS5nZXRTY2FsZSA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0U2NhbGUob2Zmc2V0UGFyZW50KSkpIHx8IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfSA6IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfTtcbiAgY29uc3QgZWxlbWVudENsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KHBsYXRmb3JtLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0ID8gYXdhaXQgcGxhdGZvcm0uY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Qoe1xuICAgIGVsZW1lbnRzLFxuICAgIHJlY3QsXG4gICAgb2Zmc2V0UGFyZW50LFxuICAgIHN0cmF0ZWd5XG4gIH0pIDogcmVjdCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiAoY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wKSAvIG9mZnNldFNjYWxlLnksXG4gICAgYm90dG9tOiAoZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSAvIG9mZnNldFNjYWxlLnksXG4gICAgbGVmdDogKGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCkgLyBvZmZzZXRTY2FsZS54LFxuICAgIHJpZ2h0OiAoZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0KSAvIG9mZnNldFNjYWxlLnhcbiAgfTtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIHBvc2l0aW9uIGFuIGlubmVyIGVsZW1lbnQgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgc28gdGhhdCBpdFxuICogYXBwZWFycyBjZW50ZXJlZCB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXJyb3dcbiAqL1xuY29uc3QgYXJyb3cgPSBvcHRpb25zID0+ICh7XG4gIG5hbWU6ICdhcnJvdycsXG4gIG9wdGlvbnMsXG4gIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgY29uc3Qge1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBwbGFjZW1lbnQsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHMsXG4gICAgICBtaWRkbGV3YXJlRGF0YVxuICAgIH0gPSBzdGF0ZTtcbiAgICAvLyBTaW5jZSBgZWxlbWVudGAgaXMgcmVxdWlyZWQsIHdlIGRvbid0IFBhcnRpYWw8PiB0aGUgdHlwZS5cbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcGFkZGluZyA9IDBcbiAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpIHx8IHt9O1xuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgeCxcbiAgICAgIHlcbiAgICB9O1xuICAgIGNvbnN0IGF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gICAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChheGlzKTtcbiAgICBjb25zdCBhcnJvd0RpbWVuc2lvbnMgPSBhd2FpdCBwbGF0Zm9ybS5nZXREaW1lbnNpb25zKGVsZW1lbnQpO1xuICAgIGNvbnN0IGlzWUF4aXMgPSBheGlzID09PSAneSc7XG4gICAgY29uc3QgbWluUHJvcCA9IGlzWUF4aXMgPyAndG9wJyA6ICdsZWZ0JztcbiAgICBjb25zdCBtYXhQcm9wID0gaXNZQXhpcyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICBjb25zdCBjbGllbnRQcm9wID0gaXNZQXhpcyA/ICdjbGllbnRIZWlnaHQnIDogJ2NsaWVudFdpZHRoJztcbiAgICBjb25zdCBlbmREaWZmID0gcmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gKyByZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBjb29yZHNbYXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIGNvbnN0IHN0YXJ0RGlmZiA9IGNvb3Jkc1theGlzXSAtIHJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgICBjb25zdCBhcnJvd09mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50KSk7XG4gICAgbGV0IGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGFycm93T2Zmc2V0UGFyZW50W2NsaWVudFByb3BdIDogMDtcblxuICAgIC8vIERPTSBwbGF0Zm9ybSBjYW4gcmV0dXJuIGB3aW5kb3dgIGFzIHRoZSBgb2Zmc2V0UGFyZW50YC5cbiAgICBpZiAoIWNsaWVudFNpemUgfHwgIShhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoYXJyb3dPZmZzZXRQYXJlbnQpKSkpIHtcbiAgICAgIGNsaWVudFNpemUgPSBlbGVtZW50cy5mbG9hdGluZ1tjbGllbnRQcm9wXSB8fCByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIH1cbiAgICBjb25zdCBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjtcblxuICAgIC8vIElmIHRoZSBwYWRkaW5nIGlzIGxhcmdlIGVub3VnaCB0aGF0IGl0IGNhdXNlcyB0aGUgYXJyb3cgdG8gbm8gbG9uZ2VyIGJlXG4gICAgLy8gY2VudGVyZWQsIG1vZGlmeSB0aGUgcGFkZGluZyBzbyB0aGF0IGl0IGlzIGNlbnRlcmVkLlxuICAgIGNvbnN0IGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcgPSBjbGllbnRTaXplIC8gMiAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiAtIDE7XG4gICAgY29uc3QgbWluUGFkZGluZyA9IG1pbihwYWRkaW5nT2JqZWN0W21pblByb3BdLCBsYXJnZXN0UG9zc2libGVQYWRkaW5nKTtcbiAgICBjb25zdCBtYXhQYWRkaW5nID0gbWluKHBhZGRpbmdPYmplY3RbbWF4UHJvcF0sIGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcpO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBmbG9hdGluZyBlbGVtZW50IGlmIHRoZSBjZW50ZXJcbiAgICAvLyBwb2ludCBpcyBvdXRzaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50J3MgYm91bmRzLlxuICAgIGNvbnN0IG1pbiQxID0gbWluUGFkZGluZztcbiAgICBjb25zdCBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLSBtYXhQYWRkaW5nO1xuICAgIGNvbnN0IGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gICAgY29uc3Qgb2Zmc2V0ID0gY2xhbXAobWluJDEsIGNlbnRlciwgbWF4KTtcblxuICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGwgZW5vdWdoIHRoYXQgdGhlIGFycm93J3MgcGFkZGluZyBjYXVzZXMgaXQgdG9cbiAgICAvLyB0byBwb2ludCB0byBub3RoaW5nIGZvciBhbiBhbGlnbmVkIHBsYWNlbWVudCwgYWRqdXN0IHRoZSBvZmZzZXQgb2YgdGhlXG4gICAgLy8gZmxvYXRpbmcgZWxlbWVudCBpdHNlbGYuIFRvIGVuc3VyZSBgc2hpZnQoKWAgY29udGludWVzIHRvIHRha2UgYWN0aW9uLFxuICAgIC8vIGEgc2luZ2xlIHJlc2V0IGlzIHBlcmZvcm1lZCB3aGVuIHRoaXMgaXMgdHJ1ZS5cbiAgICBjb25zdCBzaG91bGRBZGRPZmZzZXQgPSAhbWlkZGxld2FyZURhdGEuYXJyb3cgJiYgZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT0gbnVsbCAmJiBjZW50ZXIgIT09IG9mZnNldCAmJiByZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSAvIDIgLSAoY2VudGVyIDwgbWluJDEgPyBtaW5QYWRkaW5nIDogbWF4UGFkZGluZykgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgPCAwO1xuICAgIGNvbnN0IGFsaWdubWVudE9mZnNldCA9IHNob3VsZEFkZE9mZnNldCA/IGNlbnRlciA8IG1pbiQxID8gY2VudGVyIC0gbWluJDEgOiBjZW50ZXIgLSBtYXggOiAwO1xuICAgIHJldHVybiB7XG4gICAgICBbYXhpc106IGNvb3Jkc1theGlzXSArIGFsaWdubWVudE9mZnNldCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgW2F4aXNdOiBvZmZzZXQsXG4gICAgICAgIGNlbnRlck9mZnNldDogY2VudGVyIC0gb2Zmc2V0IC0gYWxpZ25tZW50T2Zmc2V0LFxuICAgICAgICAuLi4oc2hvdWxkQWRkT2Zmc2V0ICYmIHtcbiAgICAgICAgICBhbGlnbm1lbnRPZmZzZXRcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICByZXNldDogc2hvdWxkQWRkT2Zmc2V0XG4gICAgfTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGdldFBsYWNlbWVudExpc3QoYWxpZ25tZW50LCBhdXRvQWxpZ25tZW50LCBhbGxvd2VkUGxhY2VtZW50cykge1xuICBjb25zdCBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50ID0gYWxpZ25tZW50ID8gWy4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgPT09IGFsaWdubWVudCksIC4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT09IGFsaWdubWVudCldIDogYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRTaWRlKHBsYWNlbWVudCkgPT09IHBsYWNlbWVudCk7XG4gIHJldHVybiBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50LmZpbHRlcihwbGFjZW1lbnQgPT4ge1xuICAgIGlmIChhbGlnbm1lbnQpIHtcbiAgICAgIHJldHVybiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSA9PT0gYWxpZ25tZW50IHx8IChhdXRvQWxpZ25tZW50ID8gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSAhPT0gcGxhY2VtZW50IDogZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnYXV0b1BsYWNlbWVudCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRhdXRvUCwgX21pZGRsZXdhcmVEYXRhJGF1dG9QMiwgX3BsYWNlbWVudHNUaGF0Rml0T25FO1xuICAgICAgY29uc3Qge1xuICAgICAgICByZWN0cyxcbiAgICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBhbGlnbm1lbnQsXG4gICAgICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cyxcbiAgICAgICAgYXV0b0FsaWdubWVudCA9IHRydWUsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHMkMSA9IGFsaWdubWVudCAhPT0gdW5kZWZpbmVkIHx8IGFsbG93ZWRQbGFjZW1lbnRzID09PSBwbGFjZW1lbnRzID8gZ2V0UGxhY2VtZW50TGlzdChhbGlnbm1lbnQgfHwgbnVsbCwgYXV0b0FsaWdubWVudCwgYWxsb3dlZFBsYWNlbWVudHMpIDogYWxsb3dlZFBsYWNlbWVudHM7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gKChfbWlkZGxld2FyZURhdGEkYXV0b1AgPSBtaWRkbGV3YXJlRGF0YS5hdXRvUGxhY2VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGF1dG9QLmluZGV4KSB8fCAwO1xuICAgICAgY29uc3QgY3VycmVudFBsYWNlbWVudCA9IHBsYWNlbWVudHMkMVtjdXJyZW50SW5kZXhdO1xuICAgICAgaWYgKGN1cnJlbnRQbGFjZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBjb25zdCBhbGlnbm1lbnRTaWRlcyA9IGdldEFsaWdubWVudFNpZGVzKGN1cnJlbnRQbGFjZW1lbnQsIHJlY3RzLCBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSkpO1xuXG4gICAgICAvLyBNYWtlIGBjb21wdXRlQ29vcmRzYCBzdGFydCBmcm9tIHRoZSByaWdodCBwbGFjZS5cbiAgICAgIGlmIChwbGFjZW1lbnQgIT09IGN1cnJlbnRQbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnRzJDFbMF1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50T3ZlcmZsb3dzID0gW292ZXJmbG93W2dldFNpZGUoY3VycmVudFBsYWNlbWVudCldLCBvdmVyZmxvd1thbGlnbm1lbnRTaWRlc1swXV0sIG92ZXJmbG93W2FsaWdubWVudFNpZGVzWzFdXV07XG4gICAgICBjb25zdCBhbGxPdmVyZmxvd3MgPSBbLi4uKCgoX21pZGRsZXdhcmVEYXRhJGF1dG9QMiA9IG1pZGRsZXdhcmVEYXRhLmF1dG9QbGFjZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkYXV0b1AyLm92ZXJmbG93cykgfHwgW10pLCB7XG4gICAgICAgIHBsYWNlbWVudDogY3VycmVudFBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzOiBjdXJyZW50T3ZlcmZsb3dzXG4gICAgICB9XTtcbiAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzJDFbY3VycmVudEluZGV4ICsgMV07XG5cbiAgICAgIC8vIFRoZXJlIGFyZSBtb3JlIHBsYWNlbWVudHMgdG8gY2hlY2suXG4gICAgICBpZiAobmV4dFBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGluZGV4OiBjdXJyZW50SW5kZXggKyAxLFxuICAgICAgICAgICAgb3ZlcmZsb3dzOiBhbGxPdmVyZmxvd3NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IG5leHRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2UgPSBhbGxPdmVyZmxvd3MubWFwKGQgPT4ge1xuICAgICAgICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQoZC5wbGFjZW1lbnQpO1xuICAgICAgICByZXR1cm4gW2QucGxhY2VtZW50LCBhbGlnbm1lbnQgJiYgY3Jvc3NBeGlzID9cbiAgICAgICAgLy8gQ2hlY2sgYWxvbmcgdGhlIG1haW5BeGlzIGFuZCBtYWluIGNyb3NzQXhpcyBzaWRlLlxuICAgICAgICBkLm92ZXJmbG93cy5zbGljZSgwLCAyKS5yZWR1Y2UoKGFjYywgdikgPT4gYWNjICsgdiwgMCkgOlxuICAgICAgICAvLyBDaGVjayBvbmx5IHRoZSBtYWluQXhpcy5cbiAgICAgICAgZC5vdmVyZmxvd3NbMF0sIGQub3ZlcmZsb3dzXTtcbiAgICAgIH0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHNUaGF0Rml0T25FYWNoU2lkZSA9IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZS5maWx0ZXIoZCA9PiBkWzJdLnNsaWNlKDAsXG4gICAgICAvLyBBbGlnbmVkIHBsYWNlbWVudHMgc2hvdWxkIG5vdCBjaGVjayB0aGVpciBvcHBvc2l0ZSBjcm9zc0F4aXNcbiAgICAgIC8vIHNpZGUuXG4gICAgICBnZXRBbGlnbm1lbnQoZFswXSkgPyAyIDogMykuZXZlcnkodiA9PiB2IDw9IDApKTtcbiAgICAgIGNvbnN0IHJlc2V0UGxhY2VtZW50ID0gKChfcGxhY2VtZW50c1RoYXRGaXRPbkUgPSBwbGFjZW1lbnRzVGhhdEZpdE9uRWFjaFNpZGVbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfcGxhY2VtZW50c1RoYXRGaXRPbkVbMF0pIHx8IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZVswXVswXTtcbiAgICAgIGlmIChyZXNldFBsYWNlbWVudCAhPT0gcGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCArIDEsXG4gICAgICAgICAgICBvdmVyZmxvd3M6IGFsbE92ZXJmbG93c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogcmVzZXRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2ZsaXAnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkYXJyb3csIF9taWRkbGV3YXJlRGF0YSRmbGlwO1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgaW5pdGlhbFBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWUsXG4gICAgICAgIGZhbGxiYWNrUGxhY2VtZW50czogc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgICAgICBmYWxsYmFja1N0cmF0ZWd5ID0gJ2Jlc3RGaXQnLFxuICAgICAgICBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uID0gJ25vbmUnLFxuICAgICAgICBmbGlwQWxpZ25tZW50ID0gdHJ1ZSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuXG4gICAgICAvLyBJZiBhIHJlc2V0IGJ5IHRoZSBhcnJvdyB3YXMgY2F1c2VkIGR1ZSB0byBhbiBhbGlnbm1lbnQgb2Zmc2V0IGJlaW5nXG4gICAgICAvLyBhZGRlZCwgd2Ugc2hvdWxkIHNraXAgYW55IGxvZ2ljIG5vdyBzaW5jZSBgZmxpcCgpYCBoYXMgYWxyZWFkeSBkb25lIGl0c1xuICAgICAgLy8gd29yay5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjU0OSNpc3N1ZWNvbW1lbnQtMTcxOTYwMTY0M1xuICAgICAgaWYgKChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBpbml0aWFsU2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhpbml0aWFsUGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGlzQmFzZVBsYWNlbWVudCA9IGdldFNpZGUoaW5pdGlhbFBsYWNlbWVudCkgPT09IGluaXRpYWxQbGFjZW1lbnQ7XG4gICAgICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gICAgICBjb25zdCBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcEFsaWdubWVudCA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChpbml0aWFsUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZFBsYWNlbWVudHMoaW5pdGlhbFBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiA9IGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gIT09ICdub25lJztcbiAgICAgIGlmICghc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzICYmIGhhc0ZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24pIHtcbiAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzLnB1c2goLi4uZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cyhpbml0aWFsUGxhY2VtZW50LCBmbGlwQWxpZ25tZW50LCBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uLCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBsYWNlbWVudHMgPSBbaW5pdGlhbFBsYWNlbWVudCwgLi4uZmFsbGJhY2tQbGFjZW1lbnRzXTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBvdmVyZmxvd3MgPSBbXTtcbiAgICAgIGxldCBvdmVyZmxvd3NEYXRhID0gKChfbWlkZGxld2FyZURhdGEkZmxpcCA9IG1pZGRsZXdhcmVEYXRhLmZsaXApID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkZmxpcC5vdmVyZmxvd3MpIHx8IFtdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZV0pO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IHNpZGVzID0gZ2V0QWxpZ25tZW50U2lkZXMocGxhY2VtZW50LCByZWN0cywgcnRsKTtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZXNbMF1dLCBvdmVyZmxvd1tzaWRlc1sxXV0pO1xuICAgICAgfVxuICAgICAgb3ZlcmZsb3dzRGF0YSA9IFsuLi5vdmVyZmxvd3NEYXRhLCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzXG4gICAgICB9XTtcblxuICAgICAgLy8gT25lIG9yIG1vcmUgc2lkZXMgaXMgb3ZlcmZsb3dpbmcuXG4gICAgICBpZiAoIW92ZXJmbG93cy5ldmVyeShzaWRlID0+IHNpZGUgPD0gMCkpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRmbGlwMiwgX292ZXJmbG93c0RhdGEkZmlsdGVyO1xuICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoKChfbWlkZGxld2FyZURhdGEkZmxpcDIgPSBtaWRkbGV3YXJlRGF0YS5mbGlwKSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGZsaXAyLmluZGV4KSB8fCAwKSArIDE7XG4gICAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzW25leHRJbmRleF07XG4gICAgICAgIGlmIChuZXh0UGxhY2VtZW50KSB7XG4gICAgICAgICAgY29uc3QgaWdub3JlQ3Jvc3NBeGlzT3ZlcmZsb3cgPSBjaGVja0Nyb3NzQXhpcyA9PT0gJ2FsaWdubWVudCcgPyBpbml0aWFsU2lkZUF4aXMgIT09IGdldFNpZGVBeGlzKG5leHRQbGFjZW1lbnQpIDogZmFsc2U7XG4gICAgICAgICAgaWYgKCFpZ25vcmVDcm9zc0F4aXNPdmVyZmxvdyB8fFxuICAgICAgICAgIC8vIFdlIGxlYXZlIHRoZSBjdXJyZW50IG1haW4gYXhpcyBvbmx5IGlmIGV2ZXJ5IHBsYWNlbWVudCBvbiB0aGF0IGF4aXNcbiAgICAgICAgICAvLyBvdmVyZmxvd3MgdGhlIG1haW4gYXhpcy5cbiAgICAgICAgICBvdmVyZmxvd3NEYXRhLmV2ZXJ5KGQgPT4gZ2V0U2lkZUF4aXMoZC5wbGFjZW1lbnQpID09PSBpbml0aWFsU2lkZUF4aXMgPyBkLm92ZXJmbG93c1swXSA+IDAgOiB0cnVlKSkge1xuICAgICAgICAgICAgLy8gVHJ5IG5leHQgcGxhY2VtZW50IGFuZCByZS1ydW4gdGhlIGxpZmVjeWNsZS5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBpbmRleDogbmV4dEluZGV4LFxuICAgICAgICAgICAgICAgIG92ZXJmbG93czogb3ZlcmZsb3dzRGF0YVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpcnN0LCBmaW5kIHRoZSBjYW5kaWRhdGVzIHRoYXQgZml0IG9uIHRoZSBtYWluQXhpcyBzaWRlIG9mIG92ZXJmbG93LFxuICAgICAgICAvLyB0aGVuIGZpbmQgdGhlIHBsYWNlbWVudCB0aGF0IGZpdHMgdGhlIGJlc3Qgb24gdGhlIG1haW4gY3Jvc3NBeGlzIHNpZGUuXG4gICAgICAgIGxldCByZXNldFBsYWNlbWVudCA9IChfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIgPSBvdmVyZmxvd3NEYXRhLmZpbHRlcihkID0+IGQub3ZlcmZsb3dzWzBdIDw9IDApLnNvcnQoKGEsIGIpID0+IGEub3ZlcmZsb3dzWzFdIC0gYi5vdmVyZmxvd3NbMV0pWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX292ZXJmbG93c0RhdGEkZmlsdGVyLnBsYWNlbWVudDtcblxuICAgICAgICAvLyBPdGhlcndpc2UgZmFsbGJhY2suXG4gICAgICAgIGlmICghcmVzZXRQbGFjZW1lbnQpIHtcbiAgICAgICAgICBzd2l0Y2ggKGZhbGxiYWNrU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Jlc3RGaXQnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIF9vdmVyZmxvd3NEYXRhJGZpbHRlcjI7XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2VtZW50ID0gKF9vdmVyZmxvd3NEYXRhJGZpbHRlcjIgPSBvdmVyZmxvd3NEYXRhLmZpbHRlcihkID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTaWRlQXhpcyA9IGdldFNpZGVBeGlzKGQucGxhY2VtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTaWRlQXhpcyA9PT0gaW5pdGlhbFNpZGVBeGlzIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGJpYXMgdG8gdGhlIGB5YCBzaWRlIGF4aXMgZHVlIHRvIGhvcml6b250YWxcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVhZGluZyBkaXJlY3Rpb25zIGZhdm9yaW5nIGdyZWF0ZXIgd2lkdGguXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTaWRlQXhpcyA9PT0gJ3knO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSkubWFwKGQgPT4gW2QucGxhY2VtZW50LCBkLm92ZXJmbG93cy5maWx0ZXIob3ZlcmZsb3cgPT4gb3ZlcmZsb3cgPiAwKS5yZWR1Y2UoKGFjYywgb3ZlcmZsb3cpID0+IGFjYyArIG92ZXJmbG93LCAwKV0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9vdmVyZmxvd3NEYXRhJGZpbHRlcjJbMF07XG4gICAgICAgICAgICAgICAgaWYgKHBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdpbml0aWFsUGxhY2VtZW50JzpcbiAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBpbml0aWFsUGxhY2VtZW50O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBsYWNlbWVudCAhPT0gcmVzZXRQbGFjZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgICAgcGxhY2VtZW50OiByZXNldFBsYWNlbWVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQsXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoXG4gIH07XG59XG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIHNpZGVzLnNvbWUoc2lkZSA9PiBvdmVyZmxvd1tzaWRlXSA+PSAwKTtcbn1cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBoaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50IGluIGFwcGxpY2FibGUgc2l0dWF0aW9ucywgc3VjaCBhc1xuICogd2hlbiBpdCBpcyBub3QgaW4gdGhlIHNhbWUgY2xpcHBpbmcgY29udGV4dCBhcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaGlkZVxuICovXG5jb25zdCBoaWRlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdoaWRlJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlY3RzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0cmF0ZWd5ID0gJ3JlZmVyZW5jZUhpZGRlbicsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIHN3aXRjaCAoc3RyYXRlZ3kpIHtcbiAgICAgICAgY2FzZSAncmVmZXJlbmNlSGlkZGVuJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdHMucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VIaWRkZW5PZmZzZXRzOiBvZmZzZXRzLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhpZGRlbjogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICdlc2NhcGVkJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgYWx0Qm91bmRhcnk6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0cy5mbG9hdGluZyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZXNjYXBlZE9mZnNldHM6IG9mZnNldHMsXG4gICAgICAgICAgICAgICAgZXNjYXBlZDogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3RzKSB7XG4gIGNvbnN0IG1pblggPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5sZWZ0KSk7XG4gIGNvbnN0IG1pblkgPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC50b3ApKTtcbiAgY29uc3QgbWF4WCA9IG1heCguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LnJpZ2h0KSk7XG4gIGNvbnN0IG1heFkgPSBtYXgoLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5ib3R0b20pKTtcbiAgcmV0dXJuIHtcbiAgICB4OiBtaW5YLFxuICAgIHk6IG1pblksXG4gICAgd2lkdGg6IG1heFggLSBtaW5YLFxuICAgIGhlaWdodDogbWF4WSAtIG1pbllcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFJlY3RzQnlMaW5lKHJlY3RzKSB7XG4gIGNvbnN0IHNvcnRlZFJlY3RzID0gcmVjdHMuc2xpY2UoKS5zb3J0KChhLCBiKSA9PiBhLnkgLSBiLnkpO1xuICBjb25zdCBncm91cHMgPSBbXTtcbiAgbGV0IHByZXZSZWN0ID0gbnVsbDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRSZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHJlY3QgPSBzb3J0ZWRSZWN0c1tpXTtcbiAgICBpZiAoIXByZXZSZWN0IHx8IHJlY3QueSAtIHByZXZSZWN0LnkgPiBwcmV2UmVjdC5oZWlnaHQgLyAyKSB7XG4gICAgICBncm91cHMucHVzaChbcmVjdF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cHNbZ3JvdXBzLmxlbmd0aCAtIDFdLnB1c2gocmVjdCk7XG4gICAgfVxuICAgIHByZXZSZWN0ID0gcmVjdDtcbiAgfVxuICByZXR1cm4gZ3JvdXBzLm1hcChyZWN0ID0+IHJlY3RUb0NsaWVudFJlY3QoZ2V0Qm91bmRpbmdSZWN0KHJlY3QpKSk7XG59XG4vKipcbiAqIFByb3ZpZGVzIGltcHJvdmVkIHBvc2l0aW9uaW5nIGZvciBpbmxpbmUgcmVmZXJlbmNlIGVsZW1lbnRzIHRoYXQgY2FuIHNwYW5cbiAqIG92ZXIgbXVsdGlwbGUgbGluZXMsIHN1Y2ggYXMgaHlwZXJsaW5rcyBvciByYW5nZSBzZWxlY3Rpb25zLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2lubGluZVxuICovXG5jb25zdCBpbmxpbmUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2lubGluZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIHN0cmF0ZWd5XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICAvLyBBIE1vdXNlRXZlbnQncyBjbGllbnR7WCxZfSBjb29yZHMgY2FuIGJlIHVwIHRvIDIgcGl4ZWxzIG9mZiBhXG4gICAgICAvLyBDbGllbnRSZWN0J3MgYm91bmRzLCBkZXNwaXRlIHRoZSBldmVudCBsaXN0ZW5lciBiZWluZyB0cmlnZ2VyZWQuIEFcbiAgICAgIC8vIHBhZGRpbmcgb2YgMiBzZWVtcyB0byBoYW5kbGUgdGhpcyBpc3N1ZS5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGFkZGluZyA9IDIsXG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBuYXRpdmVDbGllbnRSZWN0cyA9IEFycmF5LmZyb20oKGF3YWl0IChwbGF0Zm9ybS5nZXRDbGllbnRSZWN0cyA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0Q2xpZW50UmVjdHMoZWxlbWVudHMucmVmZXJlbmNlKSkpIHx8IFtdKTtcbiAgICAgIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0UmVjdHNCeUxpbmUobmF0aXZlQ2xpZW50UmVjdHMpO1xuICAgICAgY29uc3QgZmFsbGJhY2sgPSByZWN0VG9DbGllbnRSZWN0KGdldEJvdW5kaW5nUmVjdChuYXRpdmVDbGllbnRSZWN0cykpO1xuICAgICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgICBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSB7XG4gICAgICAgIC8vIFRoZXJlIGFyZSB0d28gcmVjdHMgYW5kIHRoZXkgYXJlIGRpc2pvaW5lZC5cbiAgICAgICAgaWYgKGNsaWVudFJlY3RzLmxlbmd0aCA9PT0gMiAmJiBjbGllbnRSZWN0c1swXS5sZWZ0ID4gY2xpZW50UmVjdHNbMV0ucmlnaHQgJiYgeCAhPSBudWxsICYmIHkgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IHJlY3QgaW4gd2hpY2ggdGhlIHBvaW50IGlzIGZ1bGx5IGluc2lkZS5cbiAgICAgICAgICByZXR1cm4gY2xpZW50UmVjdHMuZmluZChyZWN0ID0+IHggPiByZWN0LmxlZnQgLSBwYWRkaW5nT2JqZWN0LmxlZnQgJiYgeCA8IHJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0ICYmIHkgPiByZWN0LnRvcCAtIHBhZGRpbmdPYmplY3QudG9wICYmIHkgPCByZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSB8fCBmYWxsYmFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZXJlIGFyZSAyIG9yIG1vcmUgY29ubmVjdGVkIHJlY3RzLlxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICBpZiAoZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RSZWN0ID0gY2xpZW50UmVjdHNbY2xpZW50UmVjdHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb25zdCBpc1RvcCA9IGdldFNpZGUocGxhY2VtZW50KSA9PT0gJ3RvcCc7XG4gICAgICAgICAgICBjb25zdCB0b3AgPSBmaXJzdFJlY3QudG9wO1xuICAgICAgICAgICAgY29uc3QgYm90dG9tID0gbGFzdFJlY3QuYm90dG9tO1xuICAgICAgICAgICAgY29uc3QgbGVmdCA9IGlzVG9wID8gZmlyc3RSZWN0LmxlZnQgOiBsYXN0UmVjdC5sZWZ0O1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBpc1RvcCA/IGZpcnN0UmVjdC5yaWdodCA6IGxhc3RSZWN0LnJpZ2h0O1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgIHg6IGxlZnQsXG4gICAgICAgICAgICAgIHk6IHRvcFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaXNMZWZ0U2lkZSA9IGdldFNpZGUocGxhY2VtZW50KSA9PT0gJ2xlZnQnO1xuICAgICAgICAgIGNvbnN0IG1heFJpZ2h0ID0gbWF4KC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QucmlnaHQpKTtcbiAgICAgICAgICBjb25zdCBtaW5MZWZ0ID0gbWluKC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QubGVmdCkpO1xuICAgICAgICAgIGNvbnN0IG1lYXN1cmVSZWN0cyA9IGNsaWVudFJlY3RzLmZpbHRlcihyZWN0ID0+IGlzTGVmdFNpZGUgPyByZWN0LmxlZnQgPT09IG1pbkxlZnQgOiByZWN0LnJpZ2h0ID09PSBtYXhSaWdodCk7XG4gICAgICAgICAgY29uc3QgdG9wID0gbWVhc3VyZVJlY3RzWzBdLnRvcDtcbiAgICAgICAgICBjb25zdCBib3R0b20gPSBtZWFzdXJlUmVjdHNbbWVhc3VyZVJlY3RzLmxlbmd0aCAtIDFdLmJvdHRvbTtcbiAgICAgICAgICBjb25zdCBsZWZ0ID0gbWluTGVmdDtcbiAgICAgICAgICBjb25zdCByaWdodCA9IG1heFJpZ2h0O1xuICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB4OiBsZWZ0LFxuICAgICAgICAgICAgeTogdG9wXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNldFJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICAgICAgcmVmZXJlbmNlOiB7XG4gICAgICAgICAgZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG4gICAgICAgIH0sXG4gICAgICAgIGZsb2F0aW5nOiBlbGVtZW50cy5mbG9hdGluZyxcbiAgICAgICAgc3RyYXRlZ3lcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlY3RzLnJlZmVyZW5jZS54ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS54IHx8IHJlY3RzLnJlZmVyZW5jZS55ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS55IHx8IHJlY3RzLnJlZmVyZW5jZS53aWR0aCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2Uud2lkdGggfHwgcmVjdHMucmVmZXJlbmNlLmhlaWdodCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHJlY3RzOiByZXNldFJlY3RzXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IG9yaWdpblNpZGVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWydsZWZ0JywgJ3RvcCddKTtcblxuLy8gRm9yIHR5cGUgYmFja3dhcmRzLWNvbXBhdGliaWxpdHksIHRoZSBgT2Zmc2V0T3B0aW9uc2AgdHlwZSB3YXMgYWxzb1xuLy8gRGVyaXZhYmxlLlxuXG5hc3luYyBmdW5jdGlvbiBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50LFxuICAgIHBsYXRmb3JtLFxuICAgIGVsZW1lbnRzXG4gIH0gPSBzdGF0ZTtcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgaXNWZXJ0aWNhbCA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgY29uc3QgbWFpbkF4aXNNdWx0aSA9IG9yaWdpblNpZGVzLmhhcyhzaWRlKSA/IC0xIDogMTtcbiAgY29uc3QgY3Jvc3NBeGlzTXVsdGkgPSBydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMTtcbiAgY29uc3QgcmF3VmFsdWUgPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICBsZXQge1xuICAgIG1haW5BeGlzLFxuICAgIGNyb3NzQXhpcyxcbiAgICBhbGlnbm1lbnRBeGlzXG4gIH0gPSB0eXBlb2YgcmF3VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZSxcbiAgICBjcm9zc0F4aXM6IDAsXG4gICAgYWxpZ25tZW50QXhpczogbnVsbFxuICB9IDoge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZS5tYWluQXhpcyB8fCAwLFxuICAgIGNyb3NzQXhpczogcmF3VmFsdWUuY3Jvc3NBeGlzIHx8IDAsXG4gICAgYWxpZ25tZW50QXhpczogcmF3VmFsdWUuYWxpZ25tZW50QXhpc1xuICB9O1xuICBpZiAoYWxpZ25tZW50ICYmIHR5cGVvZiBhbGlnbm1lbnRBeGlzID09PSAnbnVtYmVyJykge1xuICAgIGNyb3NzQXhpcyA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyBhbGlnbm1lbnRBeGlzICogLTEgOiBhbGlnbm1lbnRBeGlzO1xuICB9XG4gIHJldHVybiBpc1ZlcnRpY2FsID8ge1xuICAgIHg6IGNyb3NzQXhpcyAqIGNyb3NzQXhpc011bHRpLFxuICAgIHk6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aVxuICB9IDoge1xuICAgIHg6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aSxcbiAgICB5OiBjcm9zc0F4aXMgKiBjcm9zc0F4aXNNdWx0aVxuICB9O1xufVxuXG4vKipcbiAqIE1vZGlmaWVzIHRoZSBwbGFjZW1lbnQgYnkgdHJhbnNsYXRpbmcgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYWxvbmcgdGhlXG4gKiBzcGVjaWZpZWQgYXhlcy5cbiAqIEEgbnVtYmVyIChzaG9ydGhhbmQgZm9yIGBtYWluQXhpc2Agb3IgZGlzdGFuY2UpLCBvciBhbiBheGVzIGNvbmZpZ3VyYXRpb25cbiAqIG9iamVjdCBtYXkgYmUgcGFzc2VkLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL29mZnNldFxuICovXG5jb25zdCBvZmZzZXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IDA7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJG9mZnNlLCBfbWlkZGxld2FyZURhdGEkYXJyb3c7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgbWlkZGxld2FyZURhdGFcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IGRpZmZDb29yZHMgPSBhd2FpdCBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucyk7XG5cbiAgICAgIC8vIElmIHRoZSBwbGFjZW1lbnQgaXMgdGhlIHNhbWUgYW5kIHRoZSBhcnJvdyBjYXVzZWQgYW4gYWxpZ25tZW50IG9mZnNldFxuICAgICAgLy8gdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGNoYW5nZSB0aGUgcG9zaXRpb25pbmcgY29vcmRpbmF0ZXMuXG4gICAgICBpZiAocGxhY2VtZW50ID09PSAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZSA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZS5wbGFjZW1lbnQpICYmIChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHggKyBkaWZmQ29vcmRzLngsXG4gICAgICAgIHk6IHkgKyBkaWZmQ29vcmRzLnksXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAuLi5kaWZmQ29vcmRzLFxuICAgICAgICAgIHBsYWNlbWVudFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IHNoaWZ0aW5nIGl0IGluIG9yZGVyIHRvXG4gKiBrZWVwIGl0IGluIHZpZXcgd2hlbiBpdCB3aWxsIG92ZXJmbG93IHRoZSBjbGlwcGluZyBib3VuZGFyeS5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaGlmdFxuICovXG5jb25zdCBzaGlmdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc2hpZnQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBsaW1pdGVyID0ge1xuICAgICAgICAgIGZuOiBfcmVmID0+IHtcbiAgICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgIHlcbiAgICAgICAgICAgIH0gPSBfcmVmO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBjcm9zc0F4aXMgPSBnZXRTaWRlQXhpcyhnZXRTaWRlKHBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgbWFpbkF4aXMgPSBnZXRPcHBvc2l0ZUF4aXMoY3Jvc3NBeGlzKTtcbiAgICAgIGxldCBtYWluQXhpc0Nvb3JkID0gY29vcmRzW21haW5BeGlzXTtcbiAgICAgIGxldCBjcm9zc0F4aXNDb29yZCA9IGNvb3Jkc1tjcm9zc0F4aXNdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgY29uc3QgbWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyAndG9wJyA6ICdsZWZ0JztcbiAgICAgICAgY29uc3QgbWF4U2lkZSA9IG1haW5BeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IG1haW5BeGlzQ29vcmQgKyBvdmVyZmxvd1ttaW5TaWRlXTtcbiAgICAgICAgY29uc3QgbWF4ID0gbWFpbkF4aXNDb29yZCAtIG92ZXJmbG93W21heFNpZGVdO1xuICAgICAgICBtYWluQXhpc0Nvb3JkID0gY2xhbXAobWluLCBtYWluQXhpc0Nvb3JkLCBtYXgpO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IG1pblNpZGUgPSBjcm9zc0F4aXMgPT09ICd5JyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgICAgICBjb25zdCBtYXhTaWRlID0gY3Jvc3NBeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IGNyb3NzQXhpc0Nvb3JkICsgb3ZlcmZsb3dbbWluU2lkZV07XG4gICAgICAgIGNvbnN0IG1heCA9IGNyb3NzQXhpc0Nvb3JkIC0gb3ZlcmZsb3dbbWF4U2lkZV07XG4gICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gY2xhbXAobWluLCBjcm9zc0F4aXNDb29yZCwgbWF4KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxpbWl0ZWRDb29yZHMgPSBsaW1pdGVyLmZuKHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5saW1pdGVkQ29vcmRzLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgeDogbGltaXRlZENvb3Jkcy54IC0geCxcbiAgICAgICAgICB5OiBsaW1pdGVkQ29vcmRzLnkgLSB5LFxuICAgICAgICAgIGVuYWJsZWQ6IHtcbiAgICAgICAgICAgIFttYWluQXhpc106IGNoZWNrTWFpbkF4aXMsXG4gICAgICAgICAgICBbY3Jvc3NBeGlzXTogY2hlY2tDcm9zc0F4aXNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgb3B0aW9ucyxcbiAgICBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBtaWRkbGV3YXJlRGF0YVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBvZmZzZXQgPSAwLFxuICAgICAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXG4gICAgICAgIGNyb3NzQXhpczogY2hlY2tDcm9zc0F4aXMgPSB0cnVlXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9O1xuICAgICAgY29uc3QgY3Jvc3NBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IG1haW5BeGlzID0gZ2V0T3Bwb3NpdGVBeGlzKGNyb3NzQXhpcyk7XG4gICAgICBsZXQgbWFpbkF4aXNDb29yZCA9IGNvb3Jkc1ttYWluQXhpc107XG4gICAgICBsZXQgY3Jvc3NBeGlzQ29vcmQgPSBjb29yZHNbY3Jvc3NBeGlzXTtcbiAgICAgIGNvbnN0IHJhd09mZnNldCA9IGV2YWx1YXRlKG9mZnNldCwgc3RhdGUpO1xuICAgICAgY29uc3QgY29tcHV0ZWRPZmZzZXQgPSB0eXBlb2YgcmF3T2Zmc2V0ID09PSAnbnVtYmVyJyA/IHtcbiAgICAgICAgbWFpbkF4aXM6IHJhd09mZnNldCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwXG4gICAgICB9IDoge1xuICAgICAgICBtYWluQXhpczogMCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwLFxuICAgICAgICAuLi5yYXdPZmZzZXRcbiAgICAgIH07XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgICAgICBjb25zdCBsaW1pdE1pbiA9IHJlY3RzLnJlZmVyZW5jZVttYWluQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGNvbnN0IGxpbWl0TWF4ID0gcmVjdHMucmVmZXJlbmNlW21haW5BeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dIC0gY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGlmIChtYWluQXhpc0Nvb3JkIDwgbGltaXRNaW4pIHtcbiAgICAgICAgICBtYWluQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAobWFpbkF4aXNDb29yZCA+IGxpbWl0TWF4KSB7XG4gICAgICAgICAgbWFpbkF4aXNDb29yZCA9IGxpbWl0TWF4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRvZmZzZSwgX21pZGRsZXdhcmVEYXRhJG9mZnNlMjtcbiAgICAgICAgY29uc3QgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICAgICAgY29uc3QgaXNPcmlnaW5TaWRlID0gb3JpZ2luU2lkZXMuaGFzKGdldFNpZGUocGxhY2VtZW50KSk7XG4gICAgICAgIGNvbnN0IGxpbWl0TWluID0gcmVjdHMucmVmZXJlbmNlW2Nyb3NzQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgKGlzT3JpZ2luU2lkZSA/ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlW2Nyb3NzQXhpc10pIHx8IDAgOiAwKSArIChpc09yaWdpblNpZGUgPyAwIDogY29tcHV0ZWRPZmZzZXQuY3Jvc3NBeGlzKTtcbiAgICAgICAgY29uc3QgbGltaXRNYXggPSByZWN0cy5yZWZlcmVuY2VbY3Jvc3NBeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dICsgKGlzT3JpZ2luU2lkZSA/IDAgOiAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZTIgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2UyW2Nyb3NzQXhpc10pIHx8IDApIC0gKGlzT3JpZ2luU2lkZSA/IGNvbXB1dGVkT2Zmc2V0LmNyb3NzQXhpcyA6IDApO1xuICAgICAgICBpZiAoY3Jvc3NBeGlzQ29vcmQgPCBsaW1pdE1pbikge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBeGlzQ29vcmQgPiBsaW1pdE1heCkge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNYXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCDigJRcbiAqIGZvciBpbnN0YW5jZSwgcHJldmVudCBpdCBmcm9tIG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyBib3VuZGFyeSBvciBtYXRjaCB0aGVcbiAqIHdpZHRoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaXplXG4gKi9cbmNvbnN0IHNpemUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3NpemUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfc3RhdGUkbWlkZGxld2FyZURhdGEsIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTI7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBlbGVtZW50c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBhcHBseSA9ICgpID0+IHt9LFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaXNZQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfSA9IHJlY3RzLmZsb2F0aW5nO1xuICAgICAgbGV0IGhlaWdodFNpZGU7XG4gICAgICBsZXQgd2lkdGhTaWRlO1xuICAgICAgaWYgKHNpZGUgPT09ICd0b3AnIHx8IHNpZGUgPT09ICdib3R0b20nKSB7XG4gICAgICAgIGhlaWdodFNpZGUgPSBzaWRlO1xuICAgICAgICB3aWR0aFNpZGUgPSBhbGlnbm1lbnQgPT09ICgoYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpKSA/ICdzdGFydCcgOiAnZW5kJykgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2lkdGhTaWRlID0gc2lkZTtcbiAgICAgICAgaGVpZ2h0U2lkZSA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyAndG9wJyA6ICdib3R0b20nO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nSGVpZ2h0ID0gaGVpZ2h0IC0gb3ZlcmZsb3cudG9wIC0gb3ZlcmZsb3cuYm90dG9tO1xuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nV2lkdGggPSB3aWR0aCAtIG92ZXJmbG93LmxlZnQgLSBvdmVyZmxvdy5yaWdodDtcbiAgICAgIGNvbnN0IG92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0ID0gbWluKGhlaWdodCAtIG92ZXJmbG93W2hlaWdodFNpZGVdLCBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3dBdmFpbGFibGVXaWR0aCA9IG1pbih3aWR0aCAtIG92ZXJmbG93W3dpZHRoU2lkZV0sIG1heGltdW1DbGlwcGluZ1dpZHRoKTtcbiAgICAgIGNvbnN0IG5vU2hpZnQgPSAhc3RhdGUubWlkZGxld2FyZURhdGEuc2hpZnQ7XG4gICAgICBsZXQgYXZhaWxhYmxlSGVpZ2h0ID0gb3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQ7XG4gICAgICBsZXQgYXZhaWxhYmxlV2lkdGggPSBvdmVyZmxvd0F2YWlsYWJsZVdpZHRoO1xuICAgICAgaWYgKChfc3RhdGUkbWlkZGxld2FyZURhdGEgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEuZW5hYmxlZC54KSB7XG4gICAgICAgIGF2YWlsYWJsZVdpZHRoID0gbWF4aW11bUNsaXBwaW5nV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAoKF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTIgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEyLmVuYWJsZWQueSkge1xuICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQ7XG4gICAgICB9XG4gICAgICBpZiAobm9TaGlmdCAmJiAhYWxpZ25tZW50KSB7XG4gICAgICAgIGNvbnN0IHhNaW4gPSBtYXgob3ZlcmZsb3cubGVmdCwgMCk7XG4gICAgICAgIGNvbnN0IHhNYXggPSBtYXgob3ZlcmZsb3cucmlnaHQsIDApO1xuICAgICAgICBjb25zdCB5TWluID0gbWF4KG92ZXJmbG93LnRvcCwgMCk7XG4gICAgICAgIGNvbnN0IHlNYXggPSBtYXgob3ZlcmZsb3cuYm90dG9tLCAwKTtcbiAgICAgICAgaWYgKGlzWUF4aXMpIHtcbiAgICAgICAgICBhdmFpbGFibGVXaWR0aCA9IHdpZHRoIC0gMiAqICh4TWluICE9PSAwIHx8IHhNYXggIT09IDAgPyB4TWluICsgeE1heCA6IG1heChvdmVyZmxvdy5sZWZ0LCBvdmVyZmxvdy5yaWdodCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IGhlaWdodCAtIDIgKiAoeU1pbiAhPT0gMCB8fCB5TWF4ICE9PSAwID8geU1pbiArIHlNYXggOiBtYXgob3ZlcmZsb3cudG9wLCBvdmVyZmxvdy5ib3R0b20pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgYXBwbHkoe1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYXZhaWxhYmxlV2lkdGgsXG4gICAgICAgIGF2YWlsYWJsZUhlaWdodFxuICAgICAgfSk7XG4gICAgICBjb25zdCBuZXh0RGltZW5zaW9ucyA9IGF3YWl0IHBsYXRmb3JtLmdldERpbWVuc2lvbnMoZWxlbWVudHMuZmxvYXRpbmcpO1xuICAgICAgaWYgKHdpZHRoICE9PSBuZXh0RGltZW5zaW9ucy53aWR0aCB8fCBoZWlnaHQgIT09IG5leHREaW1lbnNpb25zLmhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICByZWN0czogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnQgeyBhcnJvdywgYXV0b1BsYWNlbWVudCwgY29tcHV0ZVBvc2l0aW9uLCBkZXRlY3RPdmVyZmxvdywgZmxpcCwgaGlkZSwgaW5saW5lLCBsaW1pdFNoaWZ0LCBvZmZzZXQsIHNoaWZ0LCBzaXplIH07XG4iLCJmdW5jdGlvbiBoYXNXaW5kb3coKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbn1cbmZ1bmN0aW9uIGdldE5vZGVOYW1lKG5vZGUpIHtcbiAgaWYgKGlzTm9kZShub2RlKSkge1xuICAgIHJldHVybiAobm9kZS5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgfVxuICAvLyBNb2NrZWQgbm9kZXMgaW4gdGVzdGluZyBlbnZpcm9ubWVudHMgbWF5IG5vdCBiZSBpbnN0YW5jZXMgb2YgTm9kZS4gQnlcbiAgLy8gcmV0dXJuaW5nIGAjZG9jdW1lbnRgIGFuIGluZmluaXRlIGxvb3Agd29uJ3Qgb2NjdXIuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjMxN1xuICByZXR1cm4gJyNkb2N1bWVudCc7XG59XG5mdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICB2YXIgX25vZGUkb3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIChub2RlID09IG51bGwgfHwgKF9ub2RlJG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSB8fCB3aW5kb3c7XG59XG5mdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQobm9kZSkge1xuICB2YXIgX3JlZjtcbiAgcmV0dXJuIChfcmVmID0gKGlzTm9kZShub2RlKSA/IG5vZGUub3duZXJEb2N1bWVudCA6IG5vZGUuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9yZWYuZG9jdW1lbnRFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNOb2RlKHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgTm9kZSB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuTm9kZTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkhUTUxFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNTaGFkb3dSb290KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkgfHwgdHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLlNoYWRvd1Jvb3Q7XG59XG5jb25zdCBpbnZhbGlkT3ZlcmZsb3dEaXNwbGF5VmFsdWVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWydpbmxpbmUnLCAnY29udGVudHMnXSk7XG5mdW5jdGlvbiBpc092ZXJmbG93RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICBvdmVyZmxvdyxcbiAgICBvdmVyZmxvd1gsXG4gICAgb3ZlcmZsb3dZLFxuICAgIGRpc3BsYXlcbiAgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkgJiYgIWludmFsaWRPdmVyZmxvd0Rpc3BsYXlWYWx1ZXMuaGFzKGRpc3BsYXkpO1xufVxuY29uc3QgdGFibGVFbGVtZW50cyA9IC8qI19fUFVSRV9fKi9uZXcgU2V0KFsndGFibGUnLCAndGQnLCAndGgnXSk7XG5mdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiB0YWJsZUVsZW1lbnRzLmhhcyhnZXROb2RlTmFtZShlbGVtZW50KSk7XG59XG5jb25zdCB0b3BMYXllclNlbGVjdG9ycyA9IFsnOnBvcG92ZXItb3BlbicsICc6bW9kYWwnXTtcbmZ1bmN0aW9uIGlzVG9wTGF5ZXIoZWxlbWVudCkge1xuICByZXR1cm4gdG9wTGF5ZXJTZWxlY3RvcnMuc29tZShzZWxlY3RvciA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBlbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgIH0gY2F0Y2ggKF9lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbn1cbmNvbnN0IHRyYW5zZm9ybVByb3BlcnRpZXMgPSBbJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUnLCAnc2NhbGUnLCAncm90YXRlJywgJ3BlcnNwZWN0aXZlJ107XG5jb25zdCB3aWxsQ2hhbmdlVmFsdWVzID0gWyd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlJywgJ3NjYWxlJywgJ3JvdGF0ZScsICdwZXJzcGVjdGl2ZScsICdmaWx0ZXInXTtcbmNvbnN0IGNvbnRhaW5WYWx1ZXMgPSBbJ3BhaW50JywgJ2xheW91dCcsICdzdHJpY3QnLCAnY29udGVudCddO1xuZnVuY3Rpb24gaXNDb250YWluaW5nQmxvY2soZWxlbWVudE9yQ3NzKSB7XG4gIGNvbnN0IHdlYmtpdCA9IGlzV2ViS2l0KCk7XG4gIGNvbnN0IGNzcyA9IGlzRWxlbWVudChlbGVtZW50T3JDc3MpID8gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50T3JDc3MpIDogZWxlbWVudE9yQ3NzO1xuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdHJhbnNmb3Jtcy0yLyNpbmRpdmlkdWFsLXRyYW5zZm9ybXNcbiAgcmV0dXJuIHRyYW5zZm9ybVByb3BlcnRpZXMuc29tZSh2YWx1ZSA9PiBjc3NbdmFsdWVdID8gY3NzW3ZhbHVlXSAhPT0gJ25vbmUnIDogZmFsc2UpIHx8IChjc3MuY29udGFpbmVyVHlwZSA/IGNzcy5jb250YWluZXJUeXBlICE9PSAnbm9ybWFsJyA6IGZhbHNlKSB8fCAhd2Via2l0ICYmIChjc3MuYmFja2Ryb3BGaWx0ZXIgPyBjc3MuYmFja2Ryb3BGaWx0ZXIgIT09ICdub25lJyA6IGZhbHNlKSB8fCAhd2Via2l0ICYmIChjc3MuZmlsdGVyID8gY3NzLmZpbHRlciAhPT0gJ25vbmUnIDogZmFsc2UpIHx8IHdpbGxDaGFuZ2VWYWx1ZXMuc29tZSh2YWx1ZSA9PiAoY3NzLndpbGxDaGFuZ2UgfHwgJycpLmluY2x1ZGVzKHZhbHVlKSkgfHwgY29udGFpblZhbHVlcy5zb21lKHZhbHVlID0+IChjc3MuY29udGFpbiB8fCAnJykuaW5jbHVkZXModmFsdWUpKTtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKGN1cnJlbnROb2RlKSkge1xuICAgIGlmIChpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2UgaWYgKGlzVG9wTGF5ZXIoY3VycmVudE5vZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzV2ViS2l0KCkge1xuICBpZiAodHlwZW9mIENTUyA9PT0gJ3VuZGVmaW5lZCcgfHwgIUNTUy5zdXBwb3J0cykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gQ1NTLnN1cHBvcnRzKCctd2Via2l0LWJhY2tkcm9wLWZpbHRlcicsICdub25lJyk7XG59XG5jb25zdCBsYXN0VHJhdmVyc2FibGVOb2RlTmFtZXMgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXSk7XG5mdW5jdGlvbiBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUobm9kZSkge1xuICByZXR1cm4gbGFzdFRyYXZlcnNhYmxlTm9kZU5hbWVzLmhhcyhnZXROb2RlTmFtZShub2RlKSk7XG59XG5mdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufVxuZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KSB7XG4gIGlmIChpc0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbFgsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhcmVudE5vZGUobm9kZSkge1xuICBpZiAoZ2V0Tm9kZU5hbWUobm9kZSkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBub2RlO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9XG4gIC8vIFN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlLlxuICBub2RlLmFzc2lnbmVkU2xvdCB8fFxuICAvLyBET00gRWxlbWVudCBkZXRlY3RlZC5cbiAgbm9kZS5wYXJlbnROb2RlIHx8XG4gIC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWQuXG4gIGlzU2hhZG93Um9vdChub2RlKSAmJiBub2RlLmhvc3QgfHxcbiAgLy8gRmFsbGJhY2suXG4gIGdldERvY3VtZW50RWxlbWVudChub2RlKTtcbiAgcmV0dXJuIGlzU2hhZG93Um9vdChyZXN1bHQpID8gcmVzdWx0Lmhvc3QgOiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKG5vZGUpO1xuICBpZiAoaXNMYXN0VHJhdmVyc2FibGVOb2RlKHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudCA/IG5vZGUub3duZXJEb2N1bWVudC5ib2R5IDogbm9kZS5ib2R5O1xuICB9XG4gIGlmIChpc0hUTUxFbGVtZW50KHBhcmVudE5vZGUpICYmIGlzT3ZlcmZsb3dFbGVtZW50KHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKHBhcmVudE5vZGUpO1xufVxuZnVuY3Rpb24gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMobm9kZSwgbGlzdCwgdHJhdmVyc2VJZnJhbWVzKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50MjtcbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuICBpZiAodHJhdmVyc2VJZnJhbWVzID09PSB2b2lkIDApIHtcbiAgICB0cmF2ZXJzZUlmcmFtZXMgPSB0cnVlO1xuICB9XG4gIGNvbnN0IHNjcm9sbGFibGVBbmNlc3RvciA9IGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKG5vZGUpO1xuICBjb25zdCBpc0JvZHkgPSBzY3JvbGxhYmxlQW5jZXN0b3IgPT09ICgoX25vZGUkb3duZXJEb2N1bWVudDIgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50Mi5ib2R5KTtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KHNjcm9sbGFibGVBbmNlc3Rvcik7XG4gIGlmIChpc0JvZHkpIHtcbiAgICBjb25zdCBmcmFtZUVsZW1lbnQgPSBnZXRGcmFtZUVsZW1lbnQod2luKTtcbiAgICByZXR1cm4gbGlzdC5jb25jYXQod2luLCB3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzT3ZlcmZsb3dFbGVtZW50KHNjcm9sbGFibGVBbmNlc3RvcikgPyBzY3JvbGxhYmxlQW5jZXN0b3IgOiBbXSwgZnJhbWVFbGVtZW50ICYmIHRyYXZlcnNlSWZyYW1lcyA/IGdldE92ZXJmbG93QW5jZXN0b3JzKGZyYW1lRWxlbWVudCkgOiBbXSk7XG4gIH1cbiAgcmV0dXJuIGxpc3QuY29uY2F0KHNjcm9sbGFibGVBbmNlc3RvciwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoc2Nyb2xsYWJsZUFuY2VzdG9yLCBbXSwgdHJhdmVyc2VJZnJhbWVzKSk7XG59XG5mdW5jdGlvbiBnZXRGcmFtZUVsZW1lbnQod2luKSB7XG4gIHJldHVybiB3aW4ucGFyZW50ICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih3aW4ucGFyZW50KSA/IHdpbi5mcmFtZUVsZW1lbnQgOiBudWxsO1xufVxuXG5leHBvcnQgeyBnZXRDb21wdXRlZFN0eWxlLCBnZXRDb250YWluaW5nQmxvY2ssIGdldERvY3VtZW50RWxlbWVudCwgZ2V0RnJhbWVFbGVtZW50LCBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvciwgZ2V0Tm9kZU5hbWUsIGdldE5vZGVTY3JvbGwsIGdldE92ZXJmbG93QW5jZXN0b3JzLCBnZXRQYXJlbnROb2RlLCBnZXRXaW5kb3csIGlzQ29udGFpbmluZ0Jsb2NrLCBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzTGFzdFRyYXZlcnNhYmxlTm9kZSwgaXNOb2RlLCBpc092ZXJmbG93RWxlbWVudCwgaXNTaGFkb3dSb290LCBpc1RhYmxlRWxlbWVudCwgaXNUb3BMYXllciwgaXNXZWJLaXQgfTtcbiIsImltcG9ydCB7IHJlY3RUb0NsaWVudFJlY3QsIGFycm93IGFzIGFycm93JDEsIGF1dG9QbGFjZW1lbnQgYXMgYXV0b1BsYWNlbWVudCQxLCBkZXRlY3RPdmVyZmxvdyBhcyBkZXRlY3RPdmVyZmxvdyQxLCBmbGlwIGFzIGZsaXAkMSwgaGlkZSBhcyBoaWRlJDEsIGlubGluZSBhcyBpbmxpbmUkMSwgbGltaXRTaGlmdCBhcyBsaW1pdFNoaWZ0JDEsIG9mZnNldCBhcyBvZmZzZXQkMSwgc2hpZnQgYXMgc2hpZnQkMSwgc2l6ZSBhcyBzaXplJDEsIGNvbXB1dGVQb3NpdGlvbiBhcyBjb21wdXRlUG9zaXRpb24kMSB9IGZyb20gJ0BmbG9hdGluZy11aS9jb3JlJztcbmltcG9ydCB7IHJvdW5kLCBjcmVhdGVDb29yZHMsIG1heCwgbWluLCBmbG9vciB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5pbXBvcnQgeyBnZXRDb21wdXRlZFN0eWxlIGFzIGdldENvbXB1dGVkU3R5bGUkMSwgaXNIVE1MRWxlbWVudCwgaXNFbGVtZW50LCBnZXRXaW5kb3csIGlzV2ViS2l0LCBnZXRGcmFtZUVsZW1lbnQsIGdldE5vZGVTY3JvbGwsIGdldERvY3VtZW50RWxlbWVudCwgaXNUb3BMYXllciwgZ2V0Tm9kZU5hbWUsIGlzT3ZlcmZsb3dFbGVtZW50LCBnZXRPdmVyZmxvd0FuY2VzdG9ycywgZ2V0UGFyZW50Tm9kZSwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc0NvbnRhaW5pbmdCbG9jaywgaXNUYWJsZUVsZW1lbnQsIGdldENvbnRhaW5pbmdCbG9jayB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuZXhwb3J0IHsgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcblxuZnVuY3Rpb24gZ2V0Q3NzRGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUkMShlbGVtZW50KTtcbiAgLy8gSW4gdGVzdGluZyBlbnZpcm9ubWVudHMsIHRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzIGFyZSBlbXB0eVxuICAvLyBzdHJpbmdzIGZvciBTVkcgZWxlbWVudHMsIHJldHVybmluZyBOYU4uIEZhbGxiYWNrIHRvIGAwYCBpbiB0aGlzIGNhc2UuXG4gIGxldCB3aWR0aCA9IHBhcnNlRmxvYXQoY3NzLndpZHRoKSB8fCAwO1xuICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChjc3MuaGVpZ2h0KSB8fCAwO1xuICBjb25zdCBoYXNPZmZzZXQgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBvZmZzZXRXaWR0aCA9IGhhc09mZnNldCA/IGVsZW1lbnQub2Zmc2V0V2lkdGggOiB3aWR0aDtcbiAgY29uc3Qgb2Zmc2V0SGVpZ2h0ID0gaGFzT2Zmc2V0ID8gZWxlbWVudC5vZmZzZXRIZWlnaHQgOiBoZWlnaHQ7XG4gIGNvbnN0IHNob3VsZEZhbGxiYWNrID0gcm91bmQod2lkdGgpICE9PSBvZmZzZXRXaWR0aCB8fCByb3VuZChoZWlnaHQpICE9PSBvZmZzZXRIZWlnaHQ7XG4gIGlmIChzaG91bGRGYWxsYmFjaykge1xuICAgIHdpZHRoID0gb2Zmc2V0V2lkdGg7XG4gICAgaGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0O1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICQ6IHNob3VsZEZhbGxiYWNrXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVud3JhcEVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gIWlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgOiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRTY2FsZShlbGVtZW50KSB7XG4gIGNvbnN0IGRvbUVsZW1lbnQgPSB1bndyYXBFbGVtZW50KGVsZW1lbnQpO1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZG9tRWxlbWVudCkpIHtcbiAgICByZXR1cm4gY3JlYXRlQ29vcmRzKDEpO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBkb21FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZG9tRWxlbWVudCk7XG4gIGxldCB4ID0gKCQgPyByb3VuZChyZWN0LndpZHRoKSA6IHJlY3Qud2lkdGgpIC8gd2lkdGg7XG4gIGxldCB5ID0gKCQgPyByb3VuZChyZWN0LmhlaWdodCkgOiByZWN0LmhlaWdodCkgLyBoZWlnaHQ7XG5cbiAgLy8gMCwgTmFOLCBvciBJbmZpbml0eSBzaG91bGQgYWx3YXlzIGZhbGxiYWNrIHRvIDEuXG5cbiAgaWYgKCF4IHx8ICFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICB4ID0gMTtcbiAgfVxuICBpZiAoIXkgfHwgIU51bWJlci5pc0Zpbml0ZSh5KSkge1xuICAgIHkgPSAxO1xuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmNvbnN0IG5vT2Zmc2V0cyA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb29yZHMoMCk7XG5mdW5jdGlvbiBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBpZiAoIWlzV2ViS2l0KCkgfHwgIXdpbi52aXN1YWxWaWV3cG9ydCkge1xuICAgIHJldHVybiBub09mZnNldHM7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCxcbiAgICB5OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wXG4gIH07XG59XG5mdW5jdGlvbiBzaG91bGRBZGRWaXN1YWxPZmZzZXRzKGVsZW1lbnQsIGlzRml4ZWQsIGZsb2F0aW5nT2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cbiAgaWYgKCFmbG9hdGluZ09mZnNldFBhcmVudCB8fCBpc0ZpeGVkICYmIGZsb2F0aW5nT2Zmc2V0UGFyZW50ICE9PSBnZXRXaW5kb3coZWxlbWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzRml4ZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSwgb2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBkb21FbGVtZW50ID0gdW53cmFwRWxlbWVudChlbGVtZW50KTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBpZiAoaW5jbHVkZVNjYWxlKSB7XG4gICAgaWYgKG9mZnNldFBhcmVudCkge1xuICAgICAgaWYgKGlzRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHNjYWxlID0gZ2V0U2NhbGUob2Zmc2V0UGFyZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IHNob3VsZEFkZFZpc3VhbE9mZnNldHMoZG9tRWxlbWVudCwgaXNGaXhlZFN0cmF0ZWd5LCBvZmZzZXRQYXJlbnQpID8gZ2V0VmlzdWFsT2Zmc2V0cyhkb21FbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgbGV0IHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgdmlzdWFsT2Zmc2V0cy54KSAvIHNjYWxlLng7XG4gIGxldCB5ID0gKGNsaWVudFJlY3QudG9wICsgdmlzdWFsT2Zmc2V0cy55KSAvIHNjYWxlLnk7XG4gIGxldCB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZS54O1xuICBsZXQgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZS55O1xuICBpZiAoZG9tRWxlbWVudCkge1xuICAgIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhkb21FbGVtZW50KTtcbiAgICBjb25zdCBvZmZzZXRXaW4gPSBvZmZzZXRQYXJlbnQgJiYgaXNFbGVtZW50KG9mZnNldFBhcmVudCkgPyBnZXRXaW5kb3cob2Zmc2V0UGFyZW50KSA6IG9mZnNldFBhcmVudDtcbiAgICBsZXQgY3VycmVudFdpbiA9IHdpbjtcbiAgICBsZXQgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB3aGlsZSAoY3VycmVudElGcmFtZSAmJiBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0V2luICE9PSBjdXJyZW50V2luKSB7XG4gICAgICBjb25zdCBpZnJhbWVTY2FsZSA9IGdldFNjYWxlKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgaWZyYW1lUmVjdCA9IGN1cnJlbnRJRnJhbWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlJDEoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBsZWZ0ID0gaWZyYW1lUmVjdC5sZWZ0ICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50TGVmdCArIHBhcnNlRmxvYXQoY3NzLnBhZGRpbmdMZWZ0KSkgKiBpZnJhbWVTY2FsZS54O1xuICAgICAgY29uc3QgdG9wID0gaWZyYW1lUmVjdC50b3AgKyAoY3VycmVudElGcmFtZS5jbGllbnRUb3AgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nVG9wKSkgKiBpZnJhbWVTY2FsZS55O1xuICAgICAgeCAqPSBpZnJhbWVTY2FsZS54O1xuICAgICAgeSAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgd2lkdGggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIGhlaWdodCAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgeCArPSBsZWZ0O1xuICAgICAgeSArPSB0b3A7XG4gICAgICBjdXJyZW50V2luID0gZ2V0V2luZG93KGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3Qoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfSk7XG59XG5cbi8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbi8vIGluY29ycmVjdCBmb3IgUlRMLlxuZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50LCByZWN0KSB7XG4gIGNvbnN0IGxlZnRTY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG4gIGlmICghcmVjdCkge1xuICAgIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgbGVmdFNjcm9sbDtcbiAgfVxuICByZXR1cm4gcmVjdC5sZWZ0ICsgbGVmdFNjcm9sbDtcbn1cblxuZnVuY3Rpb24gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkge1xuICBjb25zdCBodG1sUmVjdCA9IGRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgeCA9IGh0bWxSZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50LCBodG1sUmVjdCk7XG4gIGNvbnN0IHkgPSBodG1sUmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wO1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdChfcmVmKSB7XG4gIGxldCB7XG4gICAgZWxlbWVudHMsXG4gICAgcmVjdCxcbiAgICBvZmZzZXRQYXJlbnQsXG4gICAgc3RyYXRlZ3lcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGlzRml4ZWQgPSBzdHJhdGVneSA9PT0gJ2ZpeGVkJztcbiAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IHRvcExheWVyID0gZWxlbWVudHMgPyBpc1RvcExheWVyKGVsZW1lbnRzLmZsb2F0aW5nKSA6IGZhbHNlO1xuICBpZiAob2Zmc2V0UGFyZW50ID09PSBkb2N1bWVudEVsZW1lbnQgfHwgdG9wTGF5ZXIgJiYgaXNGaXhlZCkge1xuICAgIHJldHVybiByZWN0O1xuICB9XG4gIGxldCBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuICBjb25zdCBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBjb25zdCBvZmZzZXRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCk7XG4gICAgICBzY2FsZSA9IGdldFNjYWxlKG9mZnNldFBhcmVudCk7XG4gICAgICBvZmZzZXRzLnggPSBvZmZzZXRSZWN0LnggKyBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSA9IG9mZnNldFJlY3QueSArIG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfVxuICB9XG4gIGNvbnN0IGh0bWxPZmZzZXQgPSBkb2N1bWVudEVsZW1lbnQgJiYgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkID8gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHJlY3Qud2lkdGggKiBzY2FsZS54LFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHQgKiBzY2FsZS55LFxuICAgIHg6IHJlY3QueCAqIHNjYWxlLnggLSBzY3JvbGwuc2Nyb2xsTGVmdCAqIHNjYWxlLnggKyBvZmZzZXRzLnggKyBodG1sT2Zmc2V0LngsXG4gICAgeTogcmVjdC55ICogc2NhbGUueSAtIHNjcm9sbC5zY3JvbGxUb3AgKiBzY2FsZS55ICsgb2Zmc2V0cy55ICsgaHRtbE9mZnNldC55XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oZWxlbWVudC5nZXRDbGllbnRSZWN0cygpKTtcbn1cblxuLy8gR2V0cyB0aGUgZW50aXJlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgZG9jdW1lbnQgYXJlYSwgZXZlbiBleHRlbmRpbmcgb3V0c2lkZVxuLy8gb2YgdGhlIGA8aHRtbD5gIGFuZCBgPGJvZHk+YCByZWN0IGJvdW5kcyBpZiBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZS5cbmZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHNjcm9sbCA9IGdldE5vZGVTY3JvbGwoZWxlbWVudCk7XG4gIGNvbnN0IGJvZHkgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgY29uc3Qgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgYm9keS5jbGllbnRXaWR0aCk7XG4gIGNvbnN0IGhlaWdodCA9IG1heChodG1sLnNjcm9sbEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGJvZHkuc2Nyb2xsSGVpZ2h0LCBib2R5LmNsaWVudEhlaWdodCk7XG4gIGxldCB4ID0gLXNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgY29uc3QgeSA9IC1zY3JvbGwuc2Nyb2xsVG9wO1xuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZSQxKGJvZHkpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5LmNsaWVudFdpZHRoKSAtIHdpZHRoO1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG4vLyBTYWZldHkgY2hlY2s6IGVuc3VyZSB0aGUgc2Nyb2xsYmFyIHNwYWNlIGlzIHJlYXNvbmFibGUgaW4gY2FzZSB0aGlzXG4vLyBjYWxjdWxhdGlvbiBpcyBhZmZlY3RlZCBieSB1bnVzdWFsIHN0eWxlcy5cbi8vIE1vc3Qgc2Nyb2xsYmFycyBsZWF2ZSAxNS0xOHB4IG9mIHNwYWNlLlxuY29uc3QgU0NST0xMQkFSX01BWCA9IDI1O1xuZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgY29uc3QgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgY29uc3QgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIGxldCB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIGxldCBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgbGV0IHggPSAwO1xuICBsZXQgeSA9IDA7XG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIGNvbnN0IHZpc3VhbFZpZXdwb3J0QmFzZWQgPSBpc1dlYktpdCgpO1xuICAgIGlmICghdmlzdWFsVmlld3BvcnRCYXNlZCB8fCB2aXN1YWxWaWV3cG9ydEJhc2VkICYmIHN0cmF0ZWd5ID09PSAnZml4ZWQnKSB7XG4gICAgICB4ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdDtcbiAgICAgIHkgPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG4gIGNvbnN0IHdpbmRvd1Njcm9sbGJhclggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGh0bWwpO1xuICAvLyA8aHRtbD4gYG92ZXJmbG93OiBoaWRkZW5gICsgYHNjcm9sbGJhci1ndXR0ZXI6IHN0YWJsZWAgcmVkdWNlcyB0aGVcbiAgLy8gdmlzdWFsIHdpZHRoIG9mIHRoZSA8aHRtbD4gYnV0IHRoaXMgaXMgbm90IGNvbnNpZGVyZWQgaW4gdGhlIHNpemVcbiAgLy8gb2YgYGh0bWwuY2xpZW50V2lkdGhgLlxuICBpZiAod2luZG93U2Nyb2xsYmFyWCA8PSAwKSB7XG4gICAgY29uc3QgZG9jID0gaHRtbC5vd25lckRvY3VtZW50O1xuICAgIGNvbnN0IGJvZHkgPSBkb2MuYm9keTtcbiAgICBjb25zdCBib2R5U3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZShib2R5KTtcbiAgICBjb25zdCBib2R5TWFyZ2luSW5saW5lID0gZG9jLmNvbXBhdE1vZGUgPT09ICdDU1MxQ29tcGF0JyA/IHBhcnNlRmxvYXQoYm9keVN0eWxlcy5tYXJnaW5MZWZ0KSArIHBhcnNlRmxvYXQoYm9keVN0eWxlcy5tYXJnaW5SaWdodCkgfHwgMCA6IDA7XG4gICAgY29uc3QgY2xpcHBpbmdTdGFibGVTY3JvbGxiYXJXaWR0aCA9IE1hdGguYWJzKGh0bWwuY2xpZW50V2lkdGggLSBib2R5LmNsaWVudFdpZHRoIC0gYm9keU1hcmdpbklubGluZSk7XG4gICAgaWYgKGNsaXBwaW5nU3RhYmxlU2Nyb2xsYmFyV2lkdGggPD0gU0NST0xMQkFSX01BWCkge1xuICAgICAgd2lkdGggLT0gY2xpcHBpbmdTdGFibGVTY3JvbGxiYXJXaWR0aDtcbiAgICB9XG4gIH0gZWxzZSBpZiAod2luZG93U2Nyb2xsYmFyWCA8PSBTQ1JPTExCQVJfTUFYKSB7XG4gICAgLy8gSWYgdGhlIDxib2R5PiBzY3JvbGxiYXIgaXMgb24gdGhlIGxlZnQsIHRoZSB3aWR0aCBuZWVkcyB0byBiZSBleHRlbmRlZFxuICAgIC8vIGJ5IHRoZSBzY3JvbGxiYXIgYW1vdW50IHNvIHRoZXJlIGlzbid0IGV4dHJhIHNwYWNlIG9uIHRoZSByaWdodC5cbiAgICB3aWR0aCArPSB3aW5kb3dTY3JvbGxiYXJYO1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5jb25zdCBhYnNvbHV0ZU9yRml4ZWQgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2Fic29sdXRlJywgJ2ZpeGVkJ10pO1xuLy8gUmV0dXJucyB0aGUgaW5uZXIgY2xpZW50IHJlY3QsIHN1YnRyYWN0aW5nIHNjcm9sbGJhcnMgaWYgcHJlc2VudC5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICBjb25zdCB0b3AgPSBjbGllbnRSZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICBjb25zdCBsZWZ0ID0gY2xpZW50UmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICBjb25zdCBzY2FsZSA9IGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRTY2FsZShlbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygxKTtcbiAgY29uc3Qgd2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoICogc2NhbGUueDtcbiAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQgKiBzY2FsZS55O1xuICBjb25zdCB4ID0gbGVmdCAqIHNjYWxlLng7XG4gIGNvbnN0IHkgPSB0b3AgKiBzY2FsZS55O1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkge1xuICBsZXQgcmVjdDtcbiAgaWYgKGNsaXBwaW5nQW5jZXN0b3IgPT09ICd2aWV3cG9ydCcpIHtcbiAgICByZWN0ID0gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KTtcbiAgfSBlbHNlIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAnZG9jdW1lbnQnKSB7XG4gICAgcmVjdCA9IGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpO1xuICB9IGVsc2UgaWYgKGlzRWxlbWVudChjbGlwcGluZ0FuY2VzdG9yKSkge1xuICAgIHJlY3QgPSBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IGdldFZpc3VhbE9mZnNldHMoZWxlbWVudCk7XG4gICAgcmVjdCA9IHtcbiAgICAgIHg6IGNsaXBwaW5nQW5jZXN0b3IueCAtIHZpc3VhbE9mZnNldHMueCxcbiAgICAgIHk6IGNsaXBwaW5nQW5jZXN0b3IueSAtIHZpc3VhbE9mZnNldHMueSxcbiAgICAgIHdpZHRoOiBjbGlwcGluZ0FuY2VzdG9yLndpZHRoLFxuICAgICAgaGVpZ2h0OiBjbGlwcGluZ0FuY2VzdG9yLmhlaWdodFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3QocmVjdCk7XG59XG5mdW5jdGlvbiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgc3RvcE5vZGUpIHtcbiAgY29uc3QgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIGlmIChwYXJlbnROb2RlID09PSBzdG9wTm9kZSB8fCAhaXNFbGVtZW50KHBhcmVudE5vZGUpIHx8IGlzTGFzdFRyYXZlcnNhYmxlTm9kZShwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSQxKHBhcmVudE5vZGUpLnBvc2l0aW9uID09PSAnZml4ZWQnIHx8IGhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvcihwYXJlbnROb2RlLCBzdG9wTm9kZSk7XG59XG5cbi8vIEEgXCJjbGlwcGluZyBhbmNlc3RvclwiIGlzIGFuIGBvdmVyZmxvd2AgZWxlbWVudCB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgY2hpbGQgZWxlbWVudHMuIFRoaXMgcmV0dXJucyBhbGwgY2xpcHBpbmcgYW5jZXN0b3JzXG4vLyBvZiB0aGUgZ2l2ZW4gZWxlbWVudCB1cCB0aGUgdHJlZS5cbmZ1bmN0aW9uIGdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyhlbGVtZW50LCBjYWNoZSkge1xuICBjb25zdCBjYWNoZWRSZXN1bHQgPSBjYWNoZS5nZXQoZWxlbWVudCk7XG4gIGlmIChjYWNoZWRSZXN1bHQpIHtcbiAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICB9XG4gIGxldCByZXN1bHQgPSBnZXRPdmVyZmxvd0FuY2VzdG9ycyhlbGVtZW50LCBbXSwgZmFsc2UpLmZpbHRlcihlbCA9PiBpc0VsZW1lbnQoZWwpICYmIGdldE5vZGVOYW1lKGVsKSAhPT0gJ2JvZHknKTtcbiAgbGV0IGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgY29uc3QgZWxlbWVudElzRml4ZWQgPSBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCc7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgd2hpbGUgKGlzRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSQxKGN1cnJlbnROb2RlKTtcbiAgICBjb25zdCBjdXJyZW50Tm9kZUlzQ29udGFpbmluZyA9IGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKTtcbiAgICBpZiAoIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc2hvdWxkRHJvcEN1cnJlbnROb2RlID0gZWxlbWVudElzRml4ZWQgPyAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlIDogIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdzdGF0aWMnICYmICEhY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgJiYgYWJzb2x1dGVPckZpeGVkLmhhcyhjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZS5wb3NpdGlvbikgfHwgaXNPdmVyZmxvd0VsZW1lbnQoY3VycmVudE5vZGUpICYmICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgY3VycmVudE5vZGUpO1xuICAgIGlmIChzaG91bGREcm9wQ3VycmVudE5vZGUpIHtcbiAgICAgIC8vIERyb3Agbm9uLWNvbnRhaW5pbmcgYmxvY2tzLlxuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihhbmNlc3RvciA9PiBhbmNlc3RvciAhPT0gY3VycmVudE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWNvcmQgbGFzdCBjb250YWluaW5nIGJsb2NrIGZvciBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICBjYWNoZS5zZXQoZWxlbWVudCwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgYW5jZXN0b3JzLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBlbGVtZW50LFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9ID0gX3JlZjtcbiAgY29uc3QgZWxlbWVudENsaXBwaW5nQW5jZXN0b3JzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ0FuY2VzdG9ycycgPyBpc1RvcExheWVyKGVsZW1lbnQpID8gW10gOiBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMoZWxlbWVudCwgdGhpcy5fYykgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICBjb25zdCBjbGlwcGluZ0FuY2VzdG9ycyA9IFsuLi5lbGVtZW50Q2xpcHBpbmdBbmNlc3RvcnMsIHJvb3RCb3VuZGFyeV07XG4gIGNvbnN0IGZpcnN0Q2xpcHBpbmdBbmNlc3RvciA9IGNsaXBwaW5nQW5jZXN0b3JzWzBdO1xuICBjb25zdCBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ0FuY2VzdG9ycy5yZWR1Y2UoKGFjY1JlY3QsIGNsaXBwaW5nQW5jZXN0b3IpID0+IHtcbiAgICBjb25zdCByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGNsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgZmlyc3RDbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdCxcbiAgICBoZWlnaHQ6IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wLFxuICAgIHg6IGNsaXBwaW5nUmVjdC5sZWZ0LFxuICAgIHk6IGNsaXBwaW5nUmVjdC50b3BcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGVsZW1lbnQsIG9mZnNldFBhcmVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuXG4gIC8vIElmIHRoZSA8Ym9keT4gc2Nyb2xsYmFyIGFwcGVhcnMgb24gdGhlIGxlZnQgKGUuZy4gUlRMIHN5c3RlbXMpLiBVc2VcbiAgLy8gRmlyZWZveCB3aXRoIGxheW91dC5zY3JvbGxiYXIuc2lkZSA9IDMgaW4gYWJvdXQ6Y29uZmlnIHRvIHRlc3QgdGhpcy5cbiAgZnVuY3Rpb24gc2V0TGVmdFJUTFNjcm9sbGJhck9mZnNldCgpIHtcbiAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gIH1cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IG9mZnNldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlLCBpc0ZpeGVkLCBvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ID0gb2Zmc2V0UmVjdC54ICsgb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgPSBvZmZzZXRSZWN0LnkgKyBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBzZXRMZWZ0UlRMU2Nyb2xsYmFyT2Zmc2V0KCk7XG4gICAgfVxuICB9XG4gIGlmIChpc0ZpeGVkICYmICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiBkb2N1bWVudEVsZW1lbnQpIHtcbiAgICBzZXRMZWZ0UlRMU2Nyb2xsYmFyT2Zmc2V0KCk7XG4gIH1cbiAgY29uc3QgaHRtbE9mZnNldCA9IGRvY3VtZW50RWxlbWVudCAmJiAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQgPyBnZXRIVE1MT2Zmc2V0KGRvY3VtZW50RWxlbWVudCwgc2Nyb2xsKSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgY29uc3QgeCA9IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54IC0gaHRtbE9mZnNldC54O1xuICBjb25zdCB5ID0gcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55IC0gaHRtbE9mZnNldC55O1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGljUG9zaXRpb25lZChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnO1xufVxuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAocG9seWZpbGwpIHtcbiAgICByZXR1cm4gcG9seWZpbGwoZWxlbWVudCk7XG4gIH1cbiAgbGV0IHJhd09mZnNldFBhcmVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXG4gIC8vIEZpcmVmb3ggcmV0dXJucyB0aGUgPGh0bWw+IGVsZW1lbnQgYXMgdGhlIG9mZnNldFBhcmVudCBpZiBpdCdzIG5vbi1zdGF0aWMsXG4gIC8vIHdoaWxlIENocm9tZSBhbmQgU2FmYXJpIHJldHVybiB0aGUgPGJvZHk+IGVsZW1lbnQuIFRoZSA8Ym9keT4gZWxlbWVudCBtdXN0XG4gIC8vIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUgY29ycmVjdCBjYWxjdWxhdGlvbnMgZXZlbiBpZiB0aGUgPGh0bWw+IGVsZW1lbnQgaXNcbiAgLy8gbm9uLXN0YXRpYy5cbiAgaWYgKGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSA9PT0gcmF3T2Zmc2V0UGFyZW50KSB7XG4gICAgcmF3T2Zmc2V0UGFyZW50ID0gcmF3T2Zmc2V0UGFyZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuICByZXR1cm4gcmF3T2Zmc2V0UGFyZW50O1xufVxuXG4vLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgaWYgKGlzVG9wTGF5ZXIoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIGxldCBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICAgIHdoaWxlIChzdmdPZmZzZXRQYXJlbnQgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICBpZiAoaXNFbGVtZW50KHN2Z09mZnNldFBhcmVudCkgJiYgIWlzU3RhdGljUG9zaXRpb25lZChzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiBzdmdPZmZzZXRQYXJlbnQ7XG4gICAgICB9XG4gICAgICBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKHN2Z09mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIHJldHVybiB3aW47XG4gIH1cbiAgbGV0IG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpO1xuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCwgcG9seWZpbGwpO1xuICB9XG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgaXNMYXN0VHJhdmVyc2FibGVOb2RlKG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkgJiYgIWlzQ29udGFpbmluZ0Jsb2NrKG9mZnNldFBhcmVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbjtcbn1cblxuY29uc3QgZ2V0RWxlbWVudFJlY3RzID0gYXN5bmMgZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgZ2V0T2Zmc2V0UGFyZW50Rm4gPSB0aGlzLmdldE9mZnNldFBhcmVudCB8fCBnZXRPZmZzZXRQYXJlbnQ7XG4gIGNvbnN0IGdldERpbWVuc2lvbnNGbiA9IHRoaXMuZ2V0RGltZW5zaW9ucztcbiAgY29uc3QgZmxvYXRpbmdEaW1lbnNpb25zID0gYXdhaXQgZ2V0RGltZW5zaW9uc0ZuKGRhdGEuZmxvYXRpbmcpO1xuICByZXR1cm4ge1xuICAgIHJlZmVyZW5jZTogZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoZGF0YS5yZWZlcmVuY2UsIGF3YWl0IGdldE9mZnNldFBhcmVudEZuKGRhdGEuZmxvYXRpbmcpLCBkYXRhLnN0cmF0ZWd5KSxcbiAgICBmbG9hdGluZzoge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICB3aWR0aDogZmxvYXRpbmdEaW1lbnNpb25zLndpZHRoLFxuICAgICAgaGVpZ2h0OiBmbG9hdGluZ0RpbWVuc2lvbnMuaGVpZ2h0XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNSVEwoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSQxKGVsZW1lbnQpLmRpcmVjdGlvbiA9PT0gJ3J0bCc7XG59XG5cbmNvbnN0IHBsYXRmb3JtID0ge1xuICBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCxcbiAgZ2V0RG9jdW1lbnRFbGVtZW50LFxuICBnZXRDbGlwcGluZ1JlY3QsXG4gIGdldE9mZnNldFBhcmVudCxcbiAgZ2V0RWxlbWVudFJlY3RzLFxuICBnZXRDbGllbnRSZWN0cyxcbiAgZ2V0RGltZW5zaW9ucyxcbiAgZ2V0U2NhbGUsXG4gIGlzRWxlbWVudCxcbiAgaXNSVExcbn07XG5cbmZ1bmN0aW9uIHJlY3RzQXJlRXF1YWwoYSwgYikge1xuICByZXR1cm4gYS54ID09PSBiLnggJiYgYS55ID09PSBiLnkgJiYgYS53aWR0aCA9PT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PT0gYi5oZWlnaHQ7XG59XG5cbi8vIGh0dHBzOi8vc2FtdGhvci5hdS8yMDIxL29ic2VydmluZy1kb20vXG5mdW5jdGlvbiBvYnNlcnZlTW92ZShlbGVtZW50LCBvbk1vdmUpIHtcbiAgbGV0IGlvID0gbnVsbDtcbiAgbGV0IHRpbWVvdXRJZDtcbiAgY29uc3Qgcm9vdCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICB2YXIgX2lvO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgIChfaW8gPSBpbykgPT0gbnVsbCB8fCBfaW8uZGlzY29ubmVjdCgpO1xuICAgIGlvID0gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiByZWZyZXNoKHNraXAsIHRocmVzaG9sZCkge1xuICAgIGlmIChza2lwID09PSB2b2lkIDApIHtcbiAgICAgIHNraXAgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJlc2hvbGQgPSAxO1xuICAgIH1cbiAgICBjbGVhbnVwKCk7XG4gICAgY29uc3QgZWxlbWVudFJlY3RGb3JSb290TWFyZ2luID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB7XG4gICAgICBsZWZ0LFxuICAgICAgdG9wLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9ID0gZWxlbWVudFJlY3RGb3JSb290TWFyZ2luO1xuICAgIGlmICghc2tpcCkge1xuICAgICAgb25Nb3ZlKCk7XG4gICAgfVxuICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbnNldFRvcCA9IGZsb29yKHRvcCk7XG4gICAgY29uc3QgaW5zZXRSaWdodCA9IGZsb29yKHJvb3QuY2xpZW50V2lkdGggLSAobGVmdCArIHdpZHRoKSk7XG4gICAgY29uc3QgaW5zZXRCb3R0b20gPSBmbG9vcihyb290LmNsaWVudEhlaWdodCAtICh0b3AgKyBoZWlnaHQpKTtcbiAgICBjb25zdCBpbnNldExlZnQgPSBmbG9vcihsZWZ0KTtcbiAgICBjb25zdCByb290TWFyZ2luID0gLWluc2V0VG9wICsgXCJweCBcIiArIC1pbnNldFJpZ2h0ICsgXCJweCBcIiArIC1pbnNldEJvdHRvbSArIFwicHggXCIgKyAtaW5zZXRMZWZ0ICsgXCJweFwiO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICByb290TWFyZ2luLFxuICAgICAgdGhyZXNob2xkOiBtYXgoMCwgbWluKDEsIHRocmVzaG9sZCkpIHx8IDFcbiAgICB9O1xuICAgIGxldCBpc0ZpcnN0VXBkYXRlID0gdHJ1ZTtcbiAgICBmdW5jdGlvbiBoYW5kbGVPYnNlcnZlKGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IHJhdGlvID0gZW50cmllc1swXS5pbnRlcnNlY3Rpb25SYXRpbztcbiAgICAgIGlmIChyYXRpbyAhPT0gdGhyZXNob2xkKSB7XG4gICAgICAgIGlmICghaXNGaXJzdFVwZGF0ZSkge1xuICAgICAgICAgIHJldHVybiByZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyYXRpbykge1xuICAgICAgICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgY2xpcHBlZCwgdGhlIHJhdGlvIGlzIDAuIFRocm90dGxlIHRoZSByZWZyZXNoXG4gICAgICAgICAgLy8gdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIG9mIHVwZGF0ZXMuXG4gICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZWZyZXNoKGZhbHNlLCAxZS03KTtcbiAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZyZXNoKGZhbHNlLCByYXRpbyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyYXRpbyA9PT0gMSAmJiAhcmVjdHNBcmVFcXVhbChlbGVtZW50UmVjdEZvclJvb3RNYXJnaW4sIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKSB7XG4gICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBldmVuIHRob3VnaCB0aGUgcmF0aW8gaXMgcmVwb3J0ZWQgYXMgMSwgdGhlXG4gICAgICAgIC8vIGVsZW1lbnQgaXMgbm90IGFjdHVhbGx5IGZ1bGx5IHdpdGhpbiB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIncyByb290XG4gICAgICAgIC8vIGFyZWEgYW55bW9yZS4gVGhpcyBjYW4gaGFwcGVuIHVuZGVyIHBlcmZvcm1hbmNlIGNvbnN0cmFpbnRzLiBUaGlzIG1heVxuICAgICAgICAvLyBiZSBhIGJ1ZyBpbiB0aGUgYnJvd3NlcidzIEludGVyc2VjdGlvbk9ic2VydmVyIGltcGxlbWVudGF0aW9uLiBUb1xuICAgICAgICAvLyB3b3JrIGFyb3VuZCB0aGlzLCB3ZSBjb21wYXJlIHRoZSBlbGVtZW50J3MgYm91bmRpbmcgcmVjdCBub3cgd2l0aFxuICAgICAgICAvLyB3aGF0IGl0IHdhcyBhdCB0aGUgdGltZSB3ZSBjcmVhdGVkIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlci4gSWYgdGhleVxuICAgICAgICAvLyBhcmUgbm90IGVxdWFsIHRoZW4gdGhlIGVsZW1lbnQgbW92ZWQsIHNvIHdlIHJlZnJlc2guXG4gICAgICAgIHJlZnJlc2goKTtcbiAgICAgIH1cbiAgICAgIGlzRmlyc3RVcGRhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBPbGRlciBicm93c2VycyBkb24ndCBzdXBwb3J0IGEgYGRvY3VtZW50YCBhcyB0aGUgcm9vdCBhbmQgd2lsbCB0aHJvdyBhblxuICAgIC8vIGVycm9yLlxuICAgIHRyeSB7XG4gICAgICBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihoYW5kbGVPYnNlcnZlLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIC8vIEhhbmRsZSA8aWZyYW1lPnNcbiAgICAgICAgcm9vdDogcm9vdC5vd25lckRvY3VtZW50XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChfZSkge1xuICAgICAgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlT2JzZXJ2ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlvLm9ic2VydmUoZWxlbWVudCk7XG4gIH1cbiAgcmVmcmVzaCh0cnVlKTtcbiAgcmV0dXJuIGNsZWFudXA7XG59XG5cbi8qKlxuICogQXV0b21hdGljYWxseSB1cGRhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCB3aGVuIG5lY2Vzc2FyeS5cbiAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzIG1vdW50ZWQgb24gdGhlIERPTSBvclxuICogdmlzaWJsZSBvbiB0aGUgc2NyZWVuLlxuICogQHJldHVybnMgY2xlYW51cCBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBpbnZva2VkIHdoZW4gdGhlIGZsb2F0aW5nIGVsZW1lbnQgaXNcbiAqIHJlbW92ZWQgZnJvbSB0aGUgRE9NIG9yIGhpZGRlbiBmcm9tIHRoZSBzY3JlZW4uXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1VwZGF0ZVxuICovXG5mdW5jdGlvbiBhdXRvVXBkYXRlKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHVwZGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGNvbnN0IHtcbiAgICBhbmNlc3RvclNjcm9sbCA9IHRydWUsXG4gICAgYW5jZXN0b3JSZXNpemUgPSB0cnVlLFxuICAgIGVsZW1lbnRSZXNpemUgPSB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgbGF5b3V0U2hpZnQgPSB0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgYW5pbWF0aW9uRnJhbWUgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVmZXJlbmNlRWwgPSB1bndyYXBFbGVtZW50KHJlZmVyZW5jZSk7XG4gIGNvbnN0IGFuY2VzdG9ycyA9IGFuY2VzdG9yU2Nyb2xsIHx8IGFuY2VzdG9yUmVzaXplID8gWy4uLihyZWZlcmVuY2VFbCA/IGdldE92ZXJmbG93QW5jZXN0b3JzKHJlZmVyZW5jZUVsKSA6IFtdKSwgLi4uZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZmxvYXRpbmcpXSA6IFtdO1xuICBhbmNlc3RvcnMuZm9yRWFjaChhbmNlc3RvciA9PiB7XG4gICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfSk7XG4gICAgYW5jZXN0b3JSZXNpemUgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlKTtcbiAgfSk7XG4gIGNvbnN0IGNsZWFudXBJbyA9IHJlZmVyZW5jZUVsICYmIGxheW91dFNoaWZ0ID8gb2JzZXJ2ZU1vdmUocmVmZXJlbmNlRWwsIHVwZGF0ZSkgOiBudWxsO1xuICBsZXQgcmVvYnNlcnZlRnJhbWUgPSAtMTtcbiAgbGV0IHJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgaWYgKGVsZW1lbnRSZXNpemUpIHtcbiAgICByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihfcmVmID0+IHtcbiAgICAgIGxldCBbZmlyc3RFbnRyeV0gPSBfcmVmO1xuICAgICAgaWYgKGZpcnN0RW50cnkgJiYgZmlyc3RFbnRyeS50YXJnZXQgPT09IHJlZmVyZW5jZUVsICYmIHJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIC8vIFByZXZlbnQgdXBkYXRlIGxvb3BzIHdoZW4gdXNpbmcgdGhlIGBzaXplYCBtaWRkbGV3YXJlLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzE3NDBcbiAgICAgICAgcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmVvYnNlcnZlRnJhbWUpO1xuICAgICAgICByZW9ic2VydmVGcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgdmFyIF9yZXNpemVPYnNlcnZlcjtcbiAgICAgICAgICAoX3Jlc2l6ZU9ic2VydmVyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoZmxvYXRpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIGlmIChyZWZlcmVuY2VFbCAmJiAhYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUocmVmZXJlbmNlRWwpO1xuICAgIH1cbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgfVxuICBsZXQgZnJhbWVJZDtcbiAgbGV0IHByZXZSZWZSZWN0ID0gYW5pbWF0aW9uRnJhbWUgPyBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKSA6IG51bGw7XG4gIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgIGZyYW1lTG9vcCgpO1xuICB9XG4gIGZ1bmN0aW9uIGZyYW1lTG9vcCgpIHtcbiAgICBjb25zdCBuZXh0UmVmUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2UpO1xuICAgIGlmIChwcmV2UmVmUmVjdCAmJiAhcmVjdHNBcmVFcXVhbChwcmV2UmVmUmVjdCwgbmV4dFJlZlJlY3QpKSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gICAgcHJldlJlZlJlY3QgPSBuZXh0UmVmUmVjdDtcbiAgICBmcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lTG9vcCk7XG4gIH1cbiAgdXBkYXRlKCk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgdmFyIF9yZXNpemVPYnNlcnZlcjI7XG4gICAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlKTtcbiAgICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gICAgfSk7XG4gICAgY2xlYW51cElvID09IG51bGwgfHwgY2xlYW51cElvKCk7XG4gICAgKF9yZXNpemVPYnNlcnZlcjIgPSByZXNpemVPYnNlcnZlcikgPT0gbnVsbCB8fCBfcmVzaXplT2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTtcbiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgaWYgKGFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZUlkKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgb2Ygb3ZlcmZsb3cgc2lkZSBvZmZzZXRzIHRoYXQgZGV0ZXJtaW5lIGhvdyBtdWNoIHRoZVxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cbiAqIC0gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgYm91bmRhcnkgYnkgdGhhdCBudW1iZXIgb2YgcGl4ZWxzXG4gKiAtIG5lZ2F0aXZlID0gaG93IG1hbnkgcGl4ZWxzIGxlZnQgYmVmb3JlIGl0IHdpbGwgb3ZlcmZsb3dcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9kZXRlY3RPdmVyZmxvd1xuICovXG5jb25zdCBkZXRlY3RPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93JDE7XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IG9mZnNldCQxO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGF1dG9QbGFjZW1lbnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gc2hpZnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmbGlwJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IOKAlFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IHNpemUkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBoaWRlJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gYXJyb3ckMTtcblxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gaW5saW5lJDE7XG5cbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBsaW1pdFNoaWZ0JDE7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSAocmVmZXJlbmNlLCBmbG9hdGluZywgb3B0aW9ucykgPT4ge1xuICAvLyBUaGlzIGNhY2hlcyB0aGUgZXhwZW5zaXZlIGBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnNgIGZ1bmN0aW9uIHNvIHRoYXRcbiAgLy8gbXVsdGlwbGUgbGlmZWN5Y2xlIHJlc2V0cyByZS11c2UgdGhlIHNhbWUgcmVzdWx0LiBJdCBvbmx5IGxpdmVzIGZvciBhXG4gIC8vIHNpbmdsZSBjYWxsLiBJZiBvdGhlciBmdW5jdGlvbnMgYmVjb21lIGV4cGVuc2l2ZSwgd2UgY2FuIGFkZCB0aGVtIGFzIHdlbGwuXG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcCgpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0ge1xuICAgIHBsYXRmb3JtLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgY29uc3QgcGxhdGZvcm1XaXRoQ2FjaGUgPSB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucy5wbGF0Zm9ybSxcbiAgICBfYzogY2FjaGVcbiAgfTtcbiAgcmV0dXJuIGNvbXB1dGVQb3NpdGlvbiQxKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHtcbiAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgIHBsYXRmb3JtOiBwbGF0Zm9ybVdpdGhDYWNoZVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgcGxhdGZvcm0sIHNoaWZ0LCBzaXplIH07XG4iLCJpbXBvcnQgeyBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24gfSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xuXG5leHBvcnQgY29uc3QgUVVJQ0tfRVZFTlQgPSB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IHRydWUgfTtcbmV4cG9ydCBjb25zdCBJU19CUk9XU0VSID1cblx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCI7XG5cbi8vIFRPRE86IERvY3VtZW50YXRpb24gZm9yIHByZXR0eU51bWJlclxubGV0IElOVExfTlVNOiBJbnRsLk51bWJlckZvcm1hdCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBwcmV0dHlOdW1iZXIobnVtYmVyOiBudW1iZXIgfCBzdHJpbmcpIHtcblx0aWYgKCFJTlRMX05VTSlcblx0XHRJTlRMX05VTSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcblx0XHRcdChJU19CUk9XU0VSICYmIGF0dHIoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBcImxhbmdcIikpIHx8IFwibm9cIixcblx0XHQpO1xuXHRyZXR1cm4gSU5UTF9OVU0uZm9ybWF0KE51bWJlcihudW1iZXIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlPFQgZXh0ZW5kcyB1bmtub3duW10+KFxuXHRjYWxsYmFjazogKC4uLmFyZ3M6IFQpID0+IHZvaWQsXG5cdGRlbGF5OiBudW1iZXIsXG4pIHtcblx0bGV0IHRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcblxuXHRyZXR1cm4gKC4uLmFyZ3M6IFQpID0+IHtcblx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRcdHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBjYWxsYmFjayguLi5hcmdzKSwgZGVsYXkpO1xuXHR9O1xufVxuXG4vKipcbiAqIGF0dHJcbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgZ2V0LCBzZXQgYW5kIHJlbW92ZSBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0gZWwgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gbmFtZSBUaGUgYXR0cmlidXRlIG5hbWUgdG8gZ2V0LCBzZXQgb3IgcmVtb3ZlLCBvciBhIG9iamVjdCB0byBzZXQgbXVsdGlwbGUgYXR0cmlidXRlc1xuICogQHBhcmFtIHZhbHVlIEEgdmFsaWQgYXR0cmlidXRlIHZhbHVlIG9yIG51bGwgdG8gcmVtb3ZlIGF0dHJpYnV0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0cihcblx0ZWw6IEVsZW1lbnQsXG5cdG5hbWU6IHN0cmluZyxcblx0dmFsdWU/OiBzdHJpbmcgfCBudWxsLFxuKTogc3RyaW5nIHwgbnVsbCB7XG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpID8/IG51bGw7IC8vIEZhbGxiYWNrIHRvIG51bGwgb25seSBpZiBlbCBpcyB1bmRlZmluZWRcblx0aWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG5cdHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIHVzZUlkXG4gKiBAcmV0dXJuIEEgZ2VuZXJhdGVkIHVuaXF1ZSBJRFxuICovXG5sZXQgaWQgPSAwO1xuY29uc3QgVVVJRCA9IGAke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgNSl9YDtcbmV4cG9ydCBmdW5jdGlvbiB1c2VJZChlbDogRWxlbWVudCkge1xuXHRpZiAoIWVsLmlkKSBlbC5pZCA9IGAke1VVSUR9JHsrK2lkfWA7XG5cdHJldHVybiBlbC5pZDtcbn1cblxuLy8gSW50ZXJuYWwgaGVscGVyIGZvciBvbiAvIG9mZlxuY29uc3QgZXZlbnRzID0gKFxuXHRhY3Rpb246IFwiYWRkXCIgfCBcInJlbW92ZVwiLFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHRbLi4ucmVzdF06IFBhcmFtZXRlcnM8dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI+LCAvLyBTcHJlYXQgdG8gbWFrZSBhIGNvcHkgb2YgdGhlIGFycmF5XG4pOiB2b2lkID0+IHtcblx0Zm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG5cdFx0cmVzdFswXSA9IHR5cGU7XG5cdFx0ZWxlbWVudFtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdKC4uLnJlc3QpO1xuXHR9XG59O1xuXG4vKipcbiAqIG9uXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9uID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiB7XG5cdGlmIChVTkJJTkQgJiYgKGVsZW1lbnQgPT09IHdpbmRvdyB8fCBlbGVtZW50ID09PSBkb2N1bWVudCkpXG5cdFx0VU5CSU5ELnB1c2goKCkgPT4gb2ZmKGVsZW1lbnQsIC4uLnJlc3QpKTtcblx0ZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xufTtcblxuLyoqXG4gKiBvZmZcbiAqIEBwYXJhbSBlbGVtZW50IFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIHR5cGVzIEEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBldmVudCB0eXBlc1xuICogQHBhcmFtIGxpc3RlbmVyIEFuIGV2ZW50IGxpc3RlbmVyIGZ1bmN0aW9uIG9yIGxpc3RlbmVyIG9iamVjdFxuICovXG5leHBvcnQgY29uc3Qgb2ZmID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIFdpbmRvdyB7XG5cdFx0X210ZHNVbmJpbmRFdmVudHM/OiBNYXA8c3RyaW5nLCBBcnJheTwoKSA9PiB2b2lkPj47XG5cdH1cbn1cblxuLyoqXG4gKiBvbkxvYWRlZFxuICogQGRlc2NyaXB0aW9uIFJ1bnMgYSBjYWxsYmFjayB3aGVuIHdpbmRvdyBpcyBsb2FkZWQgaW4gYnJvd3NlciwgYW5kIGVuc3VyZXMgZXZlbnRzIGFyZSB1bmJvdW5kIGlmIGhvdCByZWxvYWRpbmdcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gdGhlIHBhZ2UgaXMgcmVhZHlcbiAqL1xubGV0IFVOQklORDogQXJyYXk8KCkgPT4gdm9pZD4gfCBudWxsID0gbnVsbDtcbmV4cG9ydCBjb25zdCBvbkxvYWRlZCA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xuXHRpZiAoIUlTX0JST1dTRVIpIHJldHVybjtcblx0aWYgKCF3aW5kb3cuX210ZHNVbmJpbmRFdmVudHMpIHdpbmRvdy5fbXRkc1VuYmluZEV2ZW50cyA9IG5ldyBNYXAoKTtcblxuXHRjb25zdCBydW4gPSAoKSA9PlxuXHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0XHRjb25zdCBrZXkgPSBTdHJpbmcoY2FsbGJhY2spLnJlcGxhY2UoLyhcXG58XFxzKS9nLCBcIlwiKTtcblx0XHRcdHdpbmRvdy5fbXRkc1VuYmluZEV2ZW50cz8uZ2V0KGtleSk/LmZvckVhY2goKHVuYmluZCkgPT4ge1xuXHRcdFx0XHR1bmJpbmQoKTsgLy8gVW5iaW5kIHByZXZpb3VzIGV2ZW50c1xuXHRcdFx0fSk7XG5cdFx0XHRVTkJJTkQgPSBbXTsgLy8gUHJlcGFyZSB0byBsaXN0ZW4gZm9yIG5ld2x5IGJvdW5kIGV2ZW50c1xuXHRcdFx0Y2FsbGJhY2soKTsgLy8gUnVuIGJpbmRpbmdcblx0XHRcdHdpbmRvdy5fbXRkc1VuYmluZEV2ZW50cz8uc2V0KGtleSwgVU5CSU5EPy5zbGljZSgwKSk7IC8vIFN0b3JlIGZvciBsYXRlciB1bmJpbmRpbmdcblx0XHRcdFVOQklORCA9IG51bGw7IC8vIFN0b3AgbGlzdGVuaW5nIGZvciBuZXdseSBib3VuZCBldmVudHNcblx0XHR9KTtcblxuXHRpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSBydW4oKTtcblx0ZWxzZSBvbih3aW5kb3csIFwibG9hZFwiLCBydW4pO1xufTtcblxuY29uc3QgQU5DSE9SRUQgPSBuZXcgV2Vha01hcDxFbGVtZW50LCBSZXR1cm5UeXBlPHR5cGVvZiBhdXRvVXBkYXRlPj4oKTtcbmV4cG9ydCBmdW5jdGlvbiBhbmNob3JQb3NpdGlvbihcblx0dGFyZ2V0OiBIVE1MRWxlbWVudCxcblx0YW5jaG9yOiBmYWxzZSB8IEVsZW1lbnQsXG5cdG9wdGlvbnM/OiBQYXJhbWV0ZXJzPHR5cGVvZiBjb21wdXRlUG9zaXRpb24+WzJdLFxuKSB7XG5cdEFOQ0hPUkVELmdldCh0YXJnZXQpPy4oKTsgLy8gVW5iaW5kIHByZXZpb3VzIGFuY2hvciBwb3NpdGlvblxuXHRBTkNIT1JFRC5kZWxldGUodGFyZ2V0KTtcblxuXHRpZiAoYW5jaG9yKVxuXHRcdEFOQ0hPUkVELnNldChcblx0XHRcdHRhcmdldCxcblx0XHRcdGF1dG9VcGRhdGUoYW5jaG9yLCB0YXJnZXQsICgpID0+IHtcblx0XHRcdFx0aWYgKCF0YXJnZXQuaXNDb25uZWN0ZWQgfHwgIWFuY2hvci5pc0Nvbm5lY3RlZCB8fCB0YXJnZXQuaGlkZGVuKVxuXHRcdFx0XHRcdHJldHVybiBhbmNob3JQb3NpdGlvbih0YXJnZXQsIGZhbHNlKTtcblx0XHRcdFx0Y29tcHV0ZVBvc2l0aW9uKGFuY2hvciwgdGFyZ2V0LCBvcHRpb25zKS50aGVuKCh7IHgsIHkgfSkgPT4ge1xuXHRcdFx0XHRcdHRhcmdldC5zdHlsZS5sZWZ0ID0gYCR7eH1weGA7XG5cdFx0XHRcdFx0dGFyZ2V0LnN0eWxlLnRvcCA9IGAke3l9cHhgO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pLFxuXHRcdCk7XG59XG5cbi8qKlxuICogU3BlZWQgdXAgTXV0YXRpb25PYnNlcnZlciBieSBkZWJvdW5jaW5nIGFuZCBvbmx5IHJ1bm5pbmcgd2hlbiBwYWdlIGlzIHZpc2libGVcbiAqIEByZXR1cm4gbmV3IE11dGFpb25PYnNlcnZlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjazogTXV0YXRpb25DYWxsYmFjaykge1xuXHRsZXQgcXVldWUgPSAwO1xuXG5cdGNvbnN0IG9uRnJhbWUgPSAoKSA9PiBzZXRUaW1lb3V0KG9uVGltZXIsIDIwMCk7IC8vIFVzZSBib3RoIHJlcXVlc3RBbmltYXRpb25GcmFtZSBhbmQgc2V0VGltZW91dCB0byBkZWJvdW5jZSBhbmQgb25seSBydW4gd2hlbiB2aXNpYmxlXG5cdGNvbnN0IG9uVGltZXIgPSAoKSA9PiB7XG5cdFx0Y2FsbGJhY2soW10sIG9ic2VydmVyKTtcblx0XHRvYnNlcnZlci50YWtlUmVjb3JkcygpOyAvLyBDbGVhciByZWNvcmRzIHRvIGF2b2lkIHJ1bm5pbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcblx0XHRxdWV1ZSA9IDA7XG5cdH07XG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdGlmICghcXVldWUpIHF1ZXVlID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKG9uRnJhbWUpO1xuXHR9KTtcblxuXHRyZXR1cm4gb2JzZXJ2ZXI7XG59XG5cbi8qKlxuICogb25NdXRhdGlvblxuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBvYnNlcnZlIG11dGF0aW9ucyBvbiBhIHNwZWNpZmljIGNsYXNzIG5hbWVcbiAqIEBwYXJhbSBlbCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSBjbGFzc05hbWUgVGhlIGNsYXNzIG5hbWUgdG8gb2JzZXJ2ZVxuICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBydW4gd2hlbiBtdXRhdGlvbnMgYXJlIGRldGVjdGVkXG4gKi9cbmNvbnN0IE1VVEFUT1JTID0gbmV3IFdlYWtNYXA8RWxlbWVudCwgQXJyYXk8KCkgPT4gdm9pZD4+KCk7XG5leHBvcnQgY29uc3Qgb25NdXRhdGlvbiA9IDxUIGV4dGVuZHMgRWxlbWVudD4oXG5cdGVsOiBFbGVtZW50LFxuXHRjbGFzc05hbWU6IHN0cmluZyxcblx0Y2FsbGJhY2s6IChlbGVtczogSFRNTENvbGxlY3Rpb25PZjxUPikgPT4gdm9pZCxcbikgPT4ge1xuXHRjb25zdCBlbGVtcyA9IGVsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcblx0Y29uc3QgbXV0YXRvciA9IE1VVEFUT1JTLmdldChlbCkgfHwgW107XG5cblx0aWYgKCFtdXRhdG9yLmxlbmd0aCkge1xuXHRcdE1VVEFUT1JTLnNldChlbCwgbXV0YXRvcik7XG5cdFx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcigoXywgb2JzZXJ2ZXIpID0+IHtcblx0XHRcdGlmIChlbC5pc0Nvbm5lY3RlZCAmJiBtdXRhdG9yPy5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBjYWxsYmFjayBvZiBtdXRhdG9yKSBjYWxsYmFjaygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0TVVUQVRPUlMuZGVsZXRlKGVsKTtcblx0XHRcdH1cblx0XHR9KS5vYnNlcnZlKGVsLCB7XG5cdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFtcImNsYXNzXCIsIFwiaGlkZGVuXCJdLFxuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRcdHN1YnRyZWU6IHRydWUsXG5cdFx0fSk7XG5cdH1cblx0bXV0YXRvci5wdXNoKCgpID0+IGNhbGxiYWNrKGVsZW1zIGFzIEhUTUxDb2xsZWN0aW9uT2Y8VD4pKTtcbn07XG5cbi8qKlxuICogaXNJbnB1dExpa2VcbiAqIEBkZXNjcmlwdGlvbiBDaGVjayBpZiBlbGVtZW50IGlzIGFuIGlucHV0IGxpa2UgZWxlbWVudFxuICogQHBhcmFtIGVsIFRoZSBlbGVtZW50IHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBlbGVtZW50IGlzIGFuIGlucHV0IGxpa2UgZWxlbWVudFxuICovXG5leHBvcnQgY29uc3QgaXNJbnB1dExpa2UgPSAoZWw6IHVua25vd24pOiBlbCBpcyBIVE1MSW5wdXRFbGVtZW50ID0+XG5cdGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcblx0XCJ2YWxpZGl0eVwiIGluIGVsICYmXG5cdCEoZWwgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCk7XG5cbi8qKlxuICogdG9DdXN0b21FbGVtZW50UHJvcHNcbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgY29udmVydCBwcm9wcyB0byBjdXN0b20gZWxlbWVudCBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0gcHJvcHMgVGhlIHByb3BzIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgcHJvcHNcbiAqL1xuY29uc3QgU0VMRUNURUQgPSBcImFyaWEtc2VsZWN0ZWRcIjtcbmV4cG9ydCBjb25zdCB0b0N1c3RvbUVsZW1lbnRQcm9wcyA9IChcblx0eyBjbGFzc05hbWUsIGhpZGRlbiwgb3BlbiwgLi4ucmVzdCB9OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0a2xhc3M/OiBzdHJpbmcsXG4pID0+IHtcblx0cmVzdC5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcgPSB0cnVlOyAvLyBNYWtlIE5leHQuanMgaGFwcHlcblx0aWYgKHJlc3RbU0VMRUNURURdICE9PSB1bmRlZmluZWQpXG5cdFx0cmVzdFtTRUxFQ1RFRF0gPSBgJHsocmVzdFtTRUxFQ1RFRF0gfHwgXCJmYWxzZVwiKSAhPT0gXCJmYWxzZVwifWA7IC8vIEVuc3VyZSBhcmlhLXNlbGVjdGVkIGJvb2xlYW4gaXMgc3RyaW5nXG5cdGlmIChjbGFzc05hbWUgfHwga2xhc3MpIHJlc3QuY2xhc3MgPSBgJHtrbGFzc30gJHtjbGFzc05hbWV9YC50cmltKCk7IC8vIFVzZSBjbGFzcyBpbnN0ZWFkIG9mIGNsYXNzTmFtZVxuXHRpZiAoaGlkZGVuKSByZXN0LmhpZGRlbiA9IHRydWU7IC8vIEVuc3VyZSBib29sZWFuIHByb3AgYmVoYXZpb3VyXG5cdGlmIChvcGVuKSByZXN0Lm9wZW4gPSB0cnVlOyAvLyBFbnN1cmUgYm9vbGVhbiBwcm9wIGJlaGF2aW91clxuXHRyZXR1cm4gcmVzdDtcbn07XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgSVNfQlJPV1NFUiwgb24sIG9uTG9hZGVkLCBRVUlDS19FVkVOVCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfQlJFQURDUlVNQlMgPSBgLiR7c3R5bGVzLmJyZWFkY3J1bWJzLnNwbGl0KFwiIFwiKVswXX1gO1xuY29uc3QgQ1NTX0NISVAgPSBgLiR7c3R5bGVzLmNoaXAuc3BsaXQoXCIgXCIpWzBdfWA7XG5jb25zdCBDU1NfSEVMUFRFWFQgPSBgLiR7c3R5bGVzLmhlbHB0ZXh0LnNwbGl0KFwiIFwiKVswXX1gO1xuY29uc3QgQ1NTX1BBR0lOQVRJT04gPSBgLiR7c3R5bGVzLnBhZ2luYXRpb24uc3BsaXQoXCIgXCIpWzBdfWA7XG5jb25zdCBDTElDS1MgPSBgc3VtbWFyeSx1LXN1bW1hcnksYSxidXR0b24sW3JvbGU9XCJ0YWJcIl0sW3JvbGU9XCJidXR0b25cIl1gO1xuY29uc3QgRVZFTlRTID0gXCJjbGljayx0b2dnbGUsc3VibWl0LGNoYW5nZVwiO1xuY29uc3QgTUFUT01PID0gXCJtYXR0aWxzeW5ldC5tYXRvbW8uY2xvdWRcIjtcbmNvbnN0IEJBTk5FUiA9IFwibXRkcy1hbmFseXRpY3MtYmFubmVyXCI7IC8vIERpYWxvZyB0byBzaG93IE1hdG9tbyBzY3JpcHQgbG9hZGluZ1xuY29uc3QgQkFOTkVSX1VSTCA9XG5cdFwiaHR0cHM6Ly93d3cubWF0dGlsc3luZXQubm8vb20tbWF0dGlsc3luZXQvcGVyc29udmVybmVya2xhZXJpbmcvaW5mb3JtYXNqb25za2Fwc2xlclwiO1xuXG50eXBlIE1hdG9tbyA9IChcblx0fCBzdHJpbmdcblx0fCBudW1iZXJcblx0fCBib29sZWFuXG5cdHwgRG9jdW1lbnRcblx0fCBFbGVtZW50XG5cdHwgKCh0aGlzOiBSZWNvcmQ8c3RyaW5nLCA8VD4oKSA9PiBUPikgPT4gdm9pZClcbilbXTtcbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIFdpbmRvdyB7XG5cdFx0X3BhcT86IE1hdG9tb1tdO1xuXHRcdF9tdG0/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+W107XG5cdFx0X210ZHNUcmFja2luZz86IEFuYWx5dGljc0FjdGlvbnNbXCJpbml0XCJdO1xuXHRcdF9tdGRzVW50cmFjaz86ICgpID0+IHZvaWQ7XG5cdH1cbn1cblxuZXhwb3J0IHR5cGUgQW5hbHl0aWNzQWN0aW9ucyA9IHtcblx0aW5pdDoge1xuXHRcdGVuYWJsZWQ/OiBib29sZWFuIHwgXCJkZWJ1Z1wiO1xuXHRcdGNvbnNlbnQ/OiBcImN1c3RvbVwiIHwgdHJ1ZTtcblx0fSAmIChcblx0XHR8IHtcblx0XHRcdFx0bWF0b21vSWQ6IG51bWJlciB8IHN0cmluZztcblx0XHRcdFx0bWF0b21vVGFnTWFuYWdlcklkPzogbmV2ZXI7XG5cdFx0ICB9XG5cdFx0fCB7XG5cdFx0XHRcdG1hdG9tb0lkPzogbmV2ZXI7XG5cdFx0XHRcdG1hdG9tb1RhZ01hbmFnZXJJZDogc3RyaW5nO1xuXHRcdCAgfVxuXHQpO1xuXHRwYWdldmlldzoge1xuXHRcdHVybD86IHN0cmluZztcblx0XHR0aXRsZT86IHN0cmluZztcblx0fTtcblx0ZXZlbnQ6IHtcblx0XHRjYXRlZ29yeTogc3RyaW5nO1xuXHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdG5hbWU/OiBzdHJpbmc7XG5cdFx0dmFsdWU/OiBudW1iZXI7XG5cdH07XG5cdHNlYXJjaDoge1xuXHRcdHF1ZXJ5OiBzdHJpbmc7XG5cdFx0Y2F0ZWdvcnk/OiBzdHJpbmc7XG5cdFx0cmVzdWx0cz86IG51bWJlcjtcblx0fTtcblx0bWF0b21vOiBNYXRvbW87XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYW5hbHl0aWNzPEFjdGlvbiBleHRlbmRzIGtleW9mIEFuYWx5dGljc0FjdGlvbnM+KFxuXHRhY3Rpb246IEFjdGlvbixcblx0YXJncyA9IHt9IGFzIEFuYWx5dGljc0FjdGlvbnNbQWN0aW9uXSxcbikge1xuXHRpZiAoIUlTX0JST1dTRVIpIHJldHVybjtcblx0aWYgKCF3aW5kb3cuX3BhcSkge1xuXHRcdHdpbmRvdy5fcGFxID0gW107XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJIZWF0bWFwU2Vzc2lvblJlY29yZGluZzo6ZGlzYWJsZVwiXSk7IC8vIERpc2FibGUgaGVhdG1hcHMgYnkgZGVmYXVsdCBhcyB0aGlzIHJlcXVpcmUgY29va2llc1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wiZW5hYmxlTGlua1RyYWNraW5nXCJdKTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldFRyYWNrZXJVcmxcIiwgYGh0dHBzOi8vJHtNQVRPTU99L21hdG9tby5waHBgXSk7XG5cdH1cblx0aWYgKCF3aW5kb3cuX210bSkge1xuXHRcdHdpbmRvdy5fbXRtID0gd2luZG93Ll9tdG0gfHwgW107IC8vIFByZXBhcmUgTWF0b21vIFRhZyBNYW5hZ2VyXG5cdFx0d2luZG93Ll9tdG0ucHVzaCh7IFwibXRtLnN0YXJ0VGltZVwiOiBEYXRlLm5vdygpLCBldmVudDogXCJtdG0uU3RhcnRcIiB9KTtcblx0fVxuXG5cdGlmIChhY3Rpb24gPT09IFwiaW5pdFwiKSB7XG5cdFx0d2luZG93Ll9tdGRzVHJhY2tpbmcgPSB7XG5cdFx0XHRlbmFibGVkOiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgIT09IFwibG9jYWxob3N0XCIsXG5cdFx0XHQuLi53aW5kb3cuX210ZHNUcmFja2luZyxcblx0XHRcdC4uLmFyZ3MsXG5cdFx0fSBhcyBBbmFseXRpY3NBY3Rpb25zW1wiaW5pdFwiXTtcblx0XHRjb25zdCB7IGNvbnNlbnQsIGVuYWJsZWQsIG1hdG9tb0lkLCBtYXRvbW9UYWdNYW5hZ2VySWQgfSA9XG5cdFx0XHR3aW5kb3cuX210ZHNUcmFja2luZztcblxuXHRcdGlmIChtYXRvbW9JZCkgd2luZG93Ll9wYXEucHVzaChbXCJzZXRTaXRlSWRcIiwgbWF0b21vSWRdKTtcblx0XHRpZiAoZW5hYmxlZCkge1xuXHRcdFx0aWYgKGNvbnNlbnQgIT09IFwiY3VzdG9tXCIpIHJlbmRlckJhbm5lcigpO1xuXHRcdFx0Y29uc3Qgc3JjID0gbWF0b21vVGFnTWFuYWdlcklkXG5cdFx0XHRcdD8gYGh0dHBzOi8vY2RuLm1hdG9tby5jbG91ZC8ke01BVE9NT30vY29udGFpbmVyXyR7bWF0b21vVGFnTWFuYWdlcklkfS5qc2Bcblx0XHRcdFx0OiBgaHR0cHM6Ly9jZG4ubWF0b21vLmNsb3VkLyR7TUFUT01PfS9tYXRvbW8uanNgO1xuXG5cdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBzY3JpcHRbc3JjPVwiJHtzcmN9XCJdYCkgfHxcblx0XHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmQoXG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpLCB7XG5cdFx0XHRcdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdFx0XHRcdHNyYyxcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRpZiAod2luZG93Ll9tdGRzVHJhY2tpbmc/LmVuYWJsZWQgPT09IGZhbHNlKSByZXR1cm47XG5cdGlmICh3aW5kb3cuX210ZHNUcmFja2luZz8uZW5hYmxlZCA9PT0gXCJkZWJ1Z1wiKVxuXHRcdHJldHVybiBjb25zb2xlLmluZm8oYGFuYWx5dGljcyhcIiR7YWN0aW9ufVwiLCBgLCBhcmdzLCBcIilcIik7XG5cblx0aWYgKGFjdGlvbiA9PT0gXCJwYWdldmlld1wiKSB7XG5cdFx0Y29uc3QgeyB1cmwsIHRpdGxlIH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJwYWdldmlld1wiXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCB1cmwgfHwgbG9jYXRpb24uaHJlZl0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0RG9jdW1lbnRUaXRsZVwiLCB0aXRsZSB8fCBkb2N1bWVudC50aXRsZV0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1widHJhY2tQYWdlVmlld1wiXSk7XG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcImV2ZW50XCIpIHtcblx0XHRjb25zdCB7IGNhdGVnb3J5LCBhY3Rpb24sIG5hbWUsIHZhbHVlIH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJldmVudFwiXTtcblx0XHRjb25zdCBldmVudCA9IFtcInRyYWNrRXZlbnRcIiwgY2F0ZWdvcnksIGFjdGlvbiwgbmFtZSwgdmFsdWVdO1xuXG5cdFx0Ly8gV2UgZG8gbm90IHdhbnQgdG8gdHJhY2sgZXZlbnRzIHdpdGggaGFzaCBpbiBVUkwgYXMgdGhpcyBjYXVzZXMgaGFyZC10by1yZWFkIGRhdGEsXG5cdFx0Ly8gc28gdGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSBoYXNoIHBhcnQsIGFuZCBhZGQgaXQgYmFjayBhZnRlciB0aGUgZXZlbnQgaXMgcHVzaGVkXG5cdFx0bGV0IHVybCA9IGxvY2F0aW9uLmhyZWY7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXG5cdFx0XHRmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHVybCA9IHRoaXMuZ2V0Q3VycmVudFVybDxzdHJpbmc+KCk7XG5cdFx0XHR9LFxuXHRcdF0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0Q3VzdG9tVXJsXCIsIHVybC5zcGxpdChcIiNcIilbMF1dKTsgLy8gU2tpcCBoYXNoIHBhcnQgb2YgVVJMXG5cdFx0d2luZG93Ll9wYXEucHVzaChldmVudC5maWx0ZXIoKHYpID0+IHYgIT09IHVuZGVmaW5lZCkpOyAvLyBQdXNoIGV2ZW50XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRDdXN0b21VcmxcIiwgdXJsXSk7IC8vIFJldmVycnQgdG8gb3JpZ2luYWwgVVJMIHdpdGggaGFzaFxuXHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJzZWFyY2hcIikge1xuXHRcdGNvbnN0IHtcblx0XHRcdHF1ZXJ5LFxuXHRcdFx0Y2F0ZWdvcnkgPSBmYWxzZSxcblx0XHRcdHJlc3VsdHMgPSBmYWxzZSxcblx0XHR9ID0gYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wic2VhcmNoXCJdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1widHJhY2tTaXRlU2VhcmNoXCIsIHF1ZXJ5LCBjYXRlZ29yeSwgcmVzdWx0c10pO1xuXHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJtYXRvbW9cIikge1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wibWF0b21vXCJdKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW5kZXJCYW5uZXIoKSB7XG5cdGNvbnN0IGhhc1NlZW5CYW5uZXIgPVxuXHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKEJBTk5FUikgfHwgd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKEJBTk5FUik7XG5cblx0aWYgKGhhc1NlZW5CYW5uZXIpIHJldHVybjtcblxuXHRkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50SFRNTChcblx0XHRcImFmdGVyYmVnaW5cIixcblx0XHRgPGRpYWxvZyBpZD1cIiR7QkFOTkVSfVwiIGRhdGEtYW5hbHl0aWNzPVwiaWdub3JlXCI+PHN0eWxlPlxuXHRcdFx0XHQjJHtCQU5ORVJ9W29wZW5dIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgYmFja2dyb3VuZDogIzExNmU2YjsgYm9yZGVyLXJhZGl1czogLjVlbTsgYm9yZGVyOiAwOyBib3gtc2hhZG93OiAwIC4yNWVtIC41ZW0gcmdiYSgwLDAsMCwuMyk7IGNvbG9yOiAjZmZmOyBmb250LXNpemU6IC44NzVlbTsgaW5zZXQ6IGF1dG8gYXV0byAxZW0gMWVtOyBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSAyZW0pOyBvdXRsaW5lOiAwOyBwYWRkaW5nOiAuNWVtOyBwb3NpdGlvbjogZml4ZWQ7IHotaW5kZXg6IDk5OTk5IH1cblx0XHRcdFx0IyR7QkFOTkVSfSBidXR0b24geyBhbGw6IHVuc2V0OyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGZsZXg7IHdpZHRoOiAxLjVlbTsgaGVpZ2h0OiAxLjVlbTsgZm9udDogMzAwIDEuNWVtLzEuMzUgc2Fucy1zZXJpZjsgYm9yZGVyLXJhZGl1czogLjI1ZW07IHBsYWNlLWNvbnRlbnQ6IGNlbnRlcjsgdHJhbnNpdGlvbjogLjJzOyB0cmFuc2l0aW9uLXByb3BlcnR5OiBiYWNrZ3JvdW5kLCBzY2FsZSB9XG5cdFx0XHRcdCMke0JBTk5FUn0gYnV0dG9uOmZvY3VzLXZpc2libGUgeyBvdXRsaW5lOiAycHggc29saWQgfVxuXHRcdFx0XHQjJHtCQU5ORVJ9IGJ1dHRvbjpob3ZlciB7IGJhY2tncm91bmQ6ICMwYTRlNGYgfVxuXHRcdFx0XHQjJHtCQU5ORVJ9IGJ1dHRvbjphY3RpdmUgeyBiYWNrZ3JvdW5kOiAjMDU0NDQ5OyBzY2FsZTogLjkgfVxuXHRcdFx0XHQjJHtCQU5ORVJ9IHAgeyBtYXJnaW46IDAgLjI1ZW0gfVxuXHRcdFx0PC9zdHlsZT5cblx0XHRcdDxwPlZpIGJydWtlciA8YSBocmVmPVwiJHtCQU5ORVJfVVJMfVwiIHRhcmdldD1cIl9ibGFua1wiPmluZm9ybWFzam9uc2thcHNsZXI8L2E+IGZvciDDpSBmb3JiZWRyZSBicnVrZXJvcHBsZXZlbHNlbi48L3A+XG5cdFx0XHQ8Zm9ybSBtZXRob2Q9XCJkaWFsb2dcIiBkYXRhLWFuYWx5dGljcz1cImlnbm9yZVwiPjxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGFyaWEtbGFiZWw9XCJPS1wiPiZ0aW1lczs8L2J1dHRvbj48L2Zvcm0+XG5cdFx0PC9kaWFsb2c+YCxcblx0KTtcblx0Y29uc3QgYmFubmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoQkFOTkVSKSBhcyBIVE1MRGlhbG9nRWxlbWVudDtcblx0Y29uc3Qgb25DbG9zZSA9ICgpID0+IHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShCQU5ORVIsIFwic2VlblwiKTtcblx0YmFubmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbG9zZVwiLCBvbkNsb3NlLCB7IG9uY2U6IHRydWUgfSk7XG5cdGJhbm5lci5zaG93KCk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRyYWNrKGV2ZW50OiBFdmVudCkge1xuXHRpZiAod2luZG93Ll9tdGRzVHJhY2tpbmc/LmVuYWJsZWQpIHNldFRpbWVvdXQocHJvY2Vzc1RyYWNrLCAwLCBldmVudCk7IC8vIExldCBvdGhlciBldmVudHMgcHJvY2VzcyBmaXJzdFxufVxuXG5mdW5jdGlvbiBwcm9jZXNzVHJhY2soeyB0eXBlLCB0YXJnZXQgfTogRXZlbnQpIHtcblx0Y29uc3QgZWwgPSB0eXBlID09PSBcImNsaWNrXCIgPyAodGFyZ2V0IGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oQ0xJQ0tTKSA6IHRhcmdldDtcblx0aWYgKCEoZWwgaW5zdGFuY2VvZiBFbGVtZW50KSB8fCBlbC5jbG9zZXN0KCdbZGF0YS1hbmFseXRpY3M9XCJpZ25vcmVcIl0nKSlcblx0XHRyZXR1cm47XG5cblx0bGV0IGFjdGlvbiA9IFwiY2xpY2tcIjtcblx0bGV0IGNhdGVnb3J5ID0gXCJCdXR0b25cIjtcblx0bGV0IG5hbWUgPSBsYWJlbChlbCkgfHwgaGVhZGluZyhlbCkgfHwgYXR0cihlbCwgXCJkYXRhLXRvb2x0aXBcIikgfHwgXCJcIjtcblxuXHRpZiAodHlwZSA9PT0gXCJzdWJtaXRcIikge1xuXHRcdGNhdGVnb3J5ID0gXCJGb3JtXCI7XG5cdFx0YWN0aW9uID0gXCJzdWJtaXRcIjtcblx0XHRuYW1lID0gbmFtZSB8fCBkb2N1bWVudC50aXRsZTtcblx0fSBlbHNlIGlmICh0eXBlID09PSBcInRvZ2dsZVwiKSB7XG5cdFx0aWYgKCFlbC5tYXRjaGVzKFwiZGlhbG9nOm1vZGFsXCIpKSByZXR1cm47IC8vIFNraXAgbm9uLW1vZGFsIGRpYWxvZ3Ncblx0XHRjYXRlZ29yeSA9IFwiRGlhbG9nXCI7XG5cdFx0YWN0aW9uID0gXCJvcGVuXCI7XG5cdH0gZWxzZSBpZiAodHlwZSA9PT0gXCJjaGFuZ2VcIikge1xuXHRcdGNvbnN0IHR5cGUgPSBhdHRyKGVsLCBcInR5cGVcIik7XG5cdFx0Y29uc3QgZ3JvdXAgPVxuXHRcdFx0dHlwZSA9PT0gXCJjaGVja2JveFwiIHx8IHR5cGUgPT09IFwicmFkaW9cIiA/IGVsLmNsb3Nlc3QoXCJmaWVsZHNldFwiKSA6IG51bGw7XG5cblx0XHRjYXRlZ29yeSA9IFwiRm9ybVwiO1xuXHRcdGFjdGlvbiA9IFwiY2hhbmdlXCI7XG5cdFx0bmFtZSA9XG5cdFx0XHRsYWJlbChncm91cCB8fCBlbCkgfHxcblx0XHRcdHRleHQoZ3JvdXA/LnF1ZXJ5U2VsZWN0b3IoXCJsZWdlbmRcIikpIHx8XG5cdFx0XHR0ZXh0KChlbCBhcyBIVE1MSW5wdXRFbGVtZW50KT8ubGFiZWxzPy5bMF0pO1xuXHR9IGVsc2UgaWYgKGF0dHIoZWwsIFwicm9sZVwiKSA9PT0gXCJ0YWJcIikge1xuXHRcdGNhdGVnb3J5ID0gXCJUYWJcIjtcblx0XHRhY3Rpb24gPSBcIm5hdmlnYXRlXCI7XG5cdH0gZWxzZSBpZiAoYXR0cihlbCwgXCJwb3BvdmVydGFyZ2V0XCIpKSB7XG5cdFx0aWYgKCFwb3BvdmVyKGVsKT8ubWF0Y2hlcyhcIjpwb3BvdmVyLW9wZW5cIikpIHJldHVybjsgLy8gU2tpcCBpZiBub3Qgb3BlblxuXHRcdGNhdGVnb3J5ID0gZWwuY2xvc2VzdChDU1NfSEVMUFRFWFQpID8gXCJIZWxwVGV4dFwiIDogXCJQb3BvdmVyXCI7XG5cdFx0YWN0aW9uID0gXCJvcGVuXCI7XG5cdH0gZWxzZSBpZiAoZWwubm9kZU5hbWUuZW5kc1dpdGgoXCJTVU1NQVJZXCIpKSB7XG5cdFx0aWYgKCEoZWwucGFyZW50RWxlbWVudCBhcyBIVE1MRGV0YWlsc0VsZW1lbnQpLm9wZW4pIHJldHVybjsgLy8gU2tpcCBpZiBub3Qgb3BlblxuXHRcdGNhdGVnb3J5ID0gXCJEZXRhaWxzXCI7XG5cdFx0YWN0aW9uID0gXCJvcGVuXCI7XG5cdH0gZWxzZSBpZiAoYXR0cihlbCwgXCJkYXRhLWNvbW1hbmRcIikgPT09IFwidG9nZ2xlLWFwcC1leHBhbmRlZFwiKSB7XG5cdFx0Y29uc3Qgb3BlbiA9IHN0eWxlKGVsLCBcIi0tbXRkcy10b29sdGlwLXBvc2l0aW9uXCIpID09PSBcIm5vbmVcIjtcblx0XHRjYXRlZ29yeSA9IFwiU2lkZWJhclwiO1xuXHRcdGFjdGlvbiA9IG9wZW4gPyBcImV4cGFuZFwiIDogXCJtaW5pbWl6ZVwiO1xuXHRcdG5hbWUgPSAob3BlbiAmJiBhdHRyKGVsLCBcImRhdGEtdG9vbHRpcFwiKSkgfHwgdGV4dChlbCk7XG5cdH0gZWxzZSBpZiAoZWwuY2xvc2VzdChDU1NfQlJFQURDUlVNQlMpKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkJyZWFkY3J1bWJzXCI7XG5cdFx0YWN0aW9uID0gXCJuYXZpZ2F0ZVwiO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoQ1NTX1BBR0lOQVRJT04pKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIlBhZ2ludGF0aW9uXCI7XG5cdFx0YWN0aW9uID0gXCJuYXZpZ2F0ZVwiO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoQ1NTX0NISVApKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkNoaXBcIjtcblx0XHRhY3Rpb24gPSBlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLXJlbW92YWJsZVwiKSA/IFwicmVtb3ZlXCIgOiBcImNsaWNrXCI7XG5cdH0gZWxzZSBpZiAoZWwuY2xvc2VzdChcInRoW2FyaWEtc29ydF1cIikpIHtcblx0XHRjYXRlZ29yeSA9IFwiVGFibGVcIjtcblx0XHRhY3Rpb24gPSBcInNvcnRcIjtcblx0fSBlbHNlIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxBbmNob3JFbGVtZW50KSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkxpbmtcIjtcblx0XHRhY3Rpb24gPSBlbC5wcm90b2NvbCA9PT0gXCJtYWlsdG86XCIgPyBcImVtYWlsXCIgOiBcIm5hdmlnYXRlXCI7XG5cdFx0aWYgKGVsLmhhc0F0dHJpYnV0ZShcImRvd25sb2FkXCIpKSBhY3Rpb24gPSBcImRvd25sb2FkXCI7XG5cdFx0ZWxzZSBpZiAoZWwuaGFzaCAmJiBlbC5ocmVmLnN0YXJ0c1dpdGgobG9jYXRpb24uaHJlZi5zcGxpdChcIiNcIilbMF0pKVxuXHRcdFx0YWN0aW9uID0gXCJhbmNob3JcIjsgLy8gT25seSB0cmFjayBhcyBhbmNob3IgaWYgc2FtZSBwYWdlXG5cdH0gZWxzZSBpZiAoZWwuaGFzQXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiKSkge1xuXHRcdGlmIChhdHRyKGVsLCBcImFyaWEtZXhwYW5kZWRcIikgIT09IFwidHJ1ZVwiKSByZXR1cm47IC8vIFNraXAgaWYgbm90IG9wZW5cblx0XHRjYXRlZ29yeSA9IFwiRXhwYW5kXCI7XG5cdFx0YWN0aW9uID0gXCJvcGVuXCI7XG5cdH1cblxuXHQvLyBSZXNwZWN0IGF0dHJpYnV0ZXMgYW5kIHNlbmRcblx0YW5hbHl0aWNzKFwiZXZlbnRcIiwge1xuXHRcdGNhdGVnb3J5OiBhdHRyKGVsLCBcImRhdGEtYW5hbHl0aWNzLWNhdGVnb3J5XCIpID8/IGNhdGVnb3J5LFxuXHRcdGFjdGlvbjogYXR0cihlbCwgXCJkYXRhLWFuYWx5dGljcy1hY3Rpb25cIikgPz8gYWN0aW9uLFxuXHRcdG5hbWU6IGF0dHIoZWwsIFwiZGF0YS1hbmFseXRpY3MtbmFtZVwiKSA/PyBuYW1lLFxuXHR9KTtcbn1cblxuLy8gVXRpbGl0aWVzXG5jb25zdCB0ZXh0ID0gKGVsPzogRWxlbWVudCB8IG51bGwpID0+IGVsPy50ZXh0Q29udGVudD8udHJpbSgpIHx8IFwiXCI7XG5jb25zdCBsYWJlbCA9IChlbD86IEVsZW1lbnQgfCBudWxsKSA9PiAoZWwgJiYgYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIpKSB8fCBcIlwiO1xuY29uc3QgcG9wb3ZlciA9IChlbDogRWxlbWVudCkgPT5cblx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXR0cihlbCwgXCJwb3BvdmVydGFyZ2V0XCIpIHx8IFwiXCIpO1xuY29uc3Qgc3R5bGUgPSAoZWw6IEVsZW1lbnQsIGtleTogc3RyaW5nKSA9PlxuXHR3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCkuZ2V0UHJvcGVydHlWYWx1ZShrZXkpPy50cmltKCk7XG5jb25zdCBoZWFkaW5nID0gKGVsOiBFbGVtZW50KSA9PiB7XG5cdGNvbnN0IGJvZHkgPSB0ZXh0KGVsKTtcblx0Y29uc3QgaGVhZCA9IHRleHQoZWwucXVlcnlTZWxlY3RvcihcImgxLGgyLGgzLGg0LGg1LGg2XCIpKTsgLy8gTm90ZTogaGVhZCBtaWdodCBiZSBlbXB0eSBzdHJpbmcgJydcblx0cmV0dXJuIChib2R5LnN0YXJ0c1dpdGgoaGVhZCkgJiYgaGVhZCkgfHwgYm9keS5zbGljZSgwLCAxMDApLnRyaW0oKTsgLy8gTGltaXQgdG8gMTAwIGNoYXJhY3RlcnNcbn07XG5cbm9uTG9hZGVkKCgpID0+IG9uKGRvY3VtZW50LCBFVkVOVFMsIGhhbmRsZVRyYWNrLCBRVUlDS19FVkVOVCkpO1xuIiwiaWYgKFxuXHR0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdHdpbmRvdy5DU1NTdHlsZVNoZWV0ICYmXG5cdGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0c1xuKVxuXHQoKCkgPT4ge1xuXHRcdGNvbnN0IGtleSA9IFwiLS1tdGRzLWFwcC1leHBhbmRlZFwiO1xuXHRcdGNvbnN0IHNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblx0XHRjb25zdCBwcmV2ID0gKCkgPT4gIXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpPy5pbmNsdWRlcyhcImZhbHNlXCIpO1xuXG5cdFx0ZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzLnB1c2goc2hlZXQpO1xuXHRcdHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQgPSAoZm9yY2UpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IG5leHQgPSBmb3JjZSA/PyAhcHJldigpO1xuXHRcdFx0XHRzaGVldC5yZXBsYWNlU3luYz8uKGA6cm9vdCB7ICR7a2V5fTogdmFyKCR7a2V5fS0tJHtuZXh0fSl9YCk7XG5cdFx0XHRcdHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIG5leHQpO1xuXHRcdFx0fSBjYXRjaCAoX2Vycikge30gLy8gbG9jYWxTdG9yYWdlIGlzIGZ1bGwgb3IgcmVwbGFjZVN5bmMgaXMgbm90IHN1cHBvcnRlZFxuXHRcdH07XG5cblx0XHQvLyBTZXQgYW5kIHN0b3JlIGluaXRpYWwgc3RhdGVcblx0XHR3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkKHByZXYoKSk7XG5cdH0pKCk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgZGVib3VuY2UsIG9uLCBvbkxvYWRlZCwgb25NdXRhdGlvbiwgUVVJQ0tfRVZFTlQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCBcIi4vYXBwLXRvZ2dsZVwiO1xuXG5jb25zdCBDU1NfQVBQID0gc3R5bGVzLmFwcC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfU1RJQ0tZID0gc3R5bGVzLnN0aWNreS5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVE9HR0xFID0gJ1tkYXRhLWNvbW1hbmQ9XCJ0b2dnbGUtYXBwLWV4cGFuZGVkXCJdJztcbmNvbnN0IENTU19TSURFQkFSID0gYC4ke0NTU19BUFB9ID4gZGlhbG9nLC4ke0NTU19BUFB9IGRpYWxvZyB+IG1haW5gO1xuXG5jb25zdCB1c2VUcmFuc2l0aW9uID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XG5cdGlmICghZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbikgY2FsbGJhY2soKTtcblx0ZWxzZSBkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0b2dnbGVBcHBFeHBhbmRlZCA9IChmb3JjZT86IGJvb2xlYW4pID0+XG5cdC8vIEB0cy1leHBlY3QtZXJyb3Igd2luZG93Lm10ZHNBcHBUb2dnbGUgY29tZXMgZnJvbSBhcHAtdG9nZ2xlLmpzXG5cdHVzZVRyYW5zaXRpb24oKCkgPT4gd2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZD8uKGZvcmNlKSk7XG5cbmZ1bmN0aW9uIGhhbmRsZUFwcFRvZ2dsZUNsaWNrKHsgdGFyZ2V0OiBlbCwgZGVmYXVsdFByZXZlbnRlZDogc3RvcCB9OiBFdmVudCkge1xuXHRjb25zdCBsaW5rID0gKGVsIGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oXCJhXCIpO1xuXHRpZiAobGluaz8uY2xvc2VzdChcImRpYWxvZ1wiKSAmJiBsaW5rPy5jbG9zZXN0KENTU19TSURFQkFSKSlcblx0XHRyZXR1cm4gY2xvc2VTaWRlYmFyKCk7IC8vIENsb3NlIHNpZGViYXIgaWYgbGluayBpcyBjbGlja2VkIGluc2lkZSBzaWRlYmFyXG5cblx0aWYgKHN0b3AgfHwgIShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSB8fCAhZWwubWF0Y2hlcyhDU1NfVE9HR0xFKSlcblx0XHRyZXR1cm47XG5cdGNvbnN0IGlzRGVza3RvcCA9IGdldENvbXB1dGVkU3R5bGUoZWwpLnBvc2l0aW9uID09PSBcInN0aWNreVwiO1xuXG5cdGlmIChpc0Rlc2t0b3ApIHRvZ2dsZUFwcEV4cGFuZGVkKCk7XG5cdGVsc2Vcblx0XHR1c2VUcmFuc2l0aW9uKCgpID0+IHtcblx0XHRcdGNvbnN0IHNpZGViYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaWFsb2dFbGVtZW50PihDU1NfU0lERUJBUik7XG5cdFx0XHRzaWRlYmFyPy5zZXRBdHRyaWJ1dGUoXCJkYXRhLWNsb3NlZGJ5XCIsIFwiYW55XCIpOyAvLyBBbGxvdyBjbG9zaW5nIGJ5IGNsaWNraW5nIG91dHNpZGVcblx0XHRcdHNpZGViYXI/LnNob3dNb2RhbCgpO1xuXHRcdH0pO1xufVxuXG5mdW5jdGlvbiBjbG9zZVNpZGViYXIoKSB7XG5cdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpYWxvZ0VsZW1lbnQ+KENTU19TSURFQkFSKT8uY2xvc2UoKTtcbn1cblxuLy8gU2Nyb2xsIHN0YXRlXG5sZXQgTUlOX1kgPSAwOyAvLyBPZmZzZXQgdG8gYXZvaWQgc2Nyb2xsIGp1bXAgd2hlbiBzdGlja3kgaXMgc2V0IHRvIHJlbGF0aXZlXG5sZXQgU0NST0xMX1VQOiBib29sZWFuO1xubGV0IFNUSUNLID0gMDsgLy8gLTEgPSBzdGljayB0b3AsIDAgPSByZWxhdGl2ZSwgMSA9IHN0aWNrIGJvdHRvbVxubGV0IFNUSUNLX0VMOiBIVE1MRWxlbWVudDtcbmxldCBTVElDS19IID0gMDtcbmxldCBTVElDS19ZID0gMDtcbmxldCBTVFVDSyA9IGZhbHNlOyAvLyBVc2VkIHRvIGZpZ3VyZSBpZiBuYXYgaXMgbGFyZ2VyIHRoYW4gdmlld3BvcnRcbmxldCBXSU5fSCA9IDA7XG5sZXQgV0lOX1kgPSAwO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihbc3RpY2t5XTogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0U1RJQ0tfRUwgPSBzdGlja3k7XG5cdGhhbmRsZUFwcFNjcm9sbCgpOyAvLyBSdW4gb24gY29ubmVjdFxufVxuXG5mdW5jdGlvbiBoYW5kbGVBcHBTY3JvbGwoKSB7XG5cdGlmICghU1RJQ0tfRUw/LmlzQ29ubmVjdGVkKSByZXR1cm47XG5cdGNvbnN0IE5FWFRfWSA9IHdpbmRvdy5zY3JvbGxZO1xuXHRjb25zdCBORVhUX1VQID0gTkVYVF9ZIDwgV0lOX1k7XG5cdFdJTl9ZID0gTkVYVF9ZO1xuXG5cdC8vIE9ubHkgY2FsY3VsYXRlIGlmIHNjcm9sbCBkaXJlY3Rpb24gaGFzIGNoYW5nZWRcblx0aWYgKE5FWFRfVVAgIT09IFNDUk9MTF9VUCkge1xuXHRcdE1JTl9ZID0gKFNUSUNLX0VMLnBhcmVudEVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCB8fCAwKSArIFdJTl9ZO1xuXHRcdFNDUk9MTF9VUCA9IE5FWFRfVVA7XG5cdFx0U1RJQ0tfSCA9IFNUSUNLX0VMLm9mZnNldEhlaWdodDtcblx0XHRTVElDS19ZID0gU1RJQ0tfRUwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgV0lOX1k7XG5cdFx0U1RVQ0sgPSBTVElDS19FTC5vZmZzZXRIZWlnaHQgPD0gd2luZG93LmlubmVySGVpZ2h0O1xuXHRcdFdJTl9IID0gd2luZG93LmlubmVySGVpZ2h0O1xuXHR9XG5cblx0aWYgKFNUSUNLID09PSAtMSAmJiBTVFVDSykgcmV0dXJuOyAvLyBBbGx3YXlzIHN0aWNreSB3aGVuIHNpZGViYXIgaXMgc21hbGxlciB0aGFuIHZpZXdwb3J0XG5cdGlmIChTVElDSyAhPT0gLTEgJiYgKFNUVUNLIHx8IChTQ1JPTExfVVAgJiYgV0lOX1kgPD0gU1RJQ0tfWSkpKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInN0aWNreVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIFwiMHB4XCIpO1xuXHRcdFNUSUNLID0gLTE7IC8vIE5vdCBzdGlja2luZyB0byB0b3AgYW5kIHNpZGViYXIgaXMgc21hbGxlciB0aGFuIHZpZXdwb3J0IG9yIHNjcm9sbGluZyB1cFxuXHR9IGVsc2UgaWYgKFNUSUNLID09PSAtMSAmJiAhU0NST0xMX1VQKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInJlbGF0aXZlXCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7TWF0aC5tYXgoMCwgV0lOX1kgLSBNSU5fWSl9cHhgKTtcblx0XHRTVElDSyA9IDA7IC8vIFN0aWNraW5nIHRvIHRvcCBhbmQgc2Nyb2xsaW5nIGRvd25cblx0fSBlbHNlIGlmIChTVElDSyAhPT0gMSAmJiAhU0NST0xMX1VQICYmIFdJTl9ZICsgV0lOX0ggPj0gU1RJQ0tfWSArIFNUSUNLX0gpIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwic3RpY2t5XCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7V0lOX0ggLSBTVElDS19IfXB4YCk7XG5cdFx0U1RJQ0sgPSAxOyAvLyBOb3Qgc3RpY2tpbmcgdG8gYm90dG9tIGFuZCBzY3JvbGxpbmcgZG93blxuXHR9IGVsc2UgaWYgKFNUSUNLID09PSAxICYmIFNDUk9MTF9VUCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJyZWxhdGl2ZVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke1NUSUNLX1kgLSBNSU5fWX1weGApO1xuXHRcdFNUSUNLID0gMDsgLy8gU3RpY2tpbmcgdG8gYm90dG9tIGFuZCBzY3JvbGxpbmcgdXBcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfU1RJQ0tZLCBoYW5kbGVNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZUFwcFRvZ2dsZUNsaWNrLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJyZXNpemVcIiwgZGVib3VuY2UoY2xvc2VTaWRlYmFyLCAxMDApLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJzY3JvbGxcIiwgaGFuZGxlQXBwU2Nyb2xsLCBRVUlDS19FVkVOVCk7XG59KTtcbiIsImNvbnN0IGdldFN0ZXBzID0gKFxuXHRub3c6IG51bWJlcixcblx0bWF4OiBudW1iZXIsXG5cdHNob3cgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXG4pID0+IHtcblx0Y29uc3Qgb2Zmc2V0ID0gKHNob3cgLSAxKSAvIDI7XG5cdGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoTWF0aC5taW4obm93IC0gTWF0aC5mbG9vcihvZmZzZXQpLCBtYXggLSBzaG93ICsgMSksIDEpO1xuXHRjb25zdCBlbmQgPSBNYXRoLm1pbihNYXRoLm1heChub3cgKyBNYXRoLmNlaWwob2Zmc2V0KSwgc2hvdyksIG1heCk7XG5cdGNvbnN0IHBhZ2VzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogZW5kICsgMSAtIHN0YXJ0IH0sIChfLCBpKSA9PiBpICsgc3RhcnQpO1xuXG5cdGlmIChzaG93ID4gNCAmJiBzdGFydCA+IDEpIHBhZ2VzLnNwbGljZSgwLCAyLCAxLCAwKTtcblx0aWYgKHNob3cgPiAzICYmIGVuZCA8IG1heCkgcGFnZXMuc3BsaWNlKC0yLCAyLCAwLCBtYXgpO1xuXHRyZXR1cm4gcGFnZXM7XG59O1xuXG5leHBvcnQgY29uc3QgcGFnaW5hdGlvbiA9ICh7IGN1cnJlbnQgPSAxLCB0b3RhbCA9IDEwLCBzaG93ID0gNyB9KSA9PiAoe1xuXHRwcmV2OiBjdXJyZW50ID4gMSA/IGN1cnJlbnQgLSAxIDogMCxcblx0bmV4dDogY3VycmVudCA8IHRvdGFsID8gY3VycmVudCArIDEgOiAwLFxuXHRwYWdlczogZ2V0U3RlcHMoY3VycmVudCwgdG90YWwsIHNob3cpLm1hcCgocGFnZSwgaW5kZXgpID0+ICh7XG5cdFx0Y3VycmVudDogcGFnZSA9PT0gY3VycmVudCAmJiAoXCJwYWdlXCIgYXMgY29uc3QpLFxuXHRcdGtleTogYGtleS0ke3BhZ2V9LSR7aW5kZXh9YCxcblx0XHRwYWdlLFxuXHR9KSksXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfQlJFQURDUlVNQlMgPSBzdHlsZXMuYnJlYWRjcnVtYnMuc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVCcmVhZGNydW1ic011dGF0aW9uKGJyZWFkY3J1bWJzOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRmb3IgKGNvbnN0IGJyZWFkY3VtYnMgb2YgYnJlYWRjcnVtYnMpXG5cdFx0YnJlYWRjdW1icy5xdWVyeVNlbGVjdG9yQWxsKFwibGkgYVwiKS5mb3JFYWNoKChjcnVtYiwgaW5kZXgsIHsgbGVuZ3RoIH0pID0+IHtcblx0XHRcdGF0dHIoY3J1bWIsIFwiYXJpYS1jdXJyZW50XCIsIGluZGV4ID09PSBsZW5ndGggLSAxID8gXCJwYWdlXCIgOiBudWxsKTtcblx0XHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5cdFx0Q1NTX0JSRUFEQ1JVTUJTLFxuXHRcdGhhbmRsZUJyZWFkY3J1bWJzTXV0YXRpb24sXG5cdCksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdGF0dHIsXG5cdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIsXG5cdElTX0JST1dTRVIsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0UVVJQ0tfRVZFTlQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRElBTE9HID0gc3R5bGVzLmRpYWxvZy5zcGxpdChcIiBcIilbMF07XG5jb25zdCBESUFMT0dTID0gSVNfQlJPV1NFUlxuXHQ/IChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuXHRcdFx0Q1NTX0RJQUxPRyxcblx0XHQpIGFzIEhUTUxDb2xsZWN0aW9uT2Y8SFRNTERpYWxvZ0VsZW1lbnQ+KVxuXHQ6IFtdO1xuXG5jb25zdCBoYW5kbGVNb2RhbCA9ICgpID0+IHtcblx0Zm9yIChjb25zdCBkaWFsb2cgb2YgRElBTE9HUylcblx0XHRpZiAoZGlhbG9nLmlzQ29ubmVjdGVkICYmIGRpYWxvZy5zaG93TW9kYWwgJiYgZGlhbG9nLmNsb3NlKSB7XG5cdFx0XHRpZiAoZGlhbG9nLm1hdGNoZXMoJ1tvcGVuXTpub3QoW2RhdGEtbW9kYWw9XCJmYWxzZVwiXSk6bm90KDptb2RhbCknKSkge1xuXHRcdFx0XHRhdHRyKGRpYWxvZywgXCJvcGVuXCIsIG51bGwpOyAvLyBVc2luZyBhdHRyaWJ1dGUgaW5zdGVhZCBvZiAuY2xvc2UgdG8gYXZvaWQgYGNsb3NlYCBldmVudFxuXHRcdFx0XHRkaWFsb2cuc2hvd01vZGFsKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGRpYWxvZy5tYXRjaGVzKFwiOm1vZGFsOm5vdChbb3Blbl0pXCIpKSB7XG5cdFx0XHRcdGF0dHIoZGlhbG9nLCBcIm9wZW5cIiwgXCJcIik7IC8vIFNldCBhcyBvcGVuXG5cdFx0XHRcdGRpYWxvZy5jbG9zZSgpOyAvLyBTbyB3ZSBjb3JyZWNsdHkgY2FuIGNhbGwgLmNsb3NlLCByZW1vdmluZyA8ZGlhbG9nPiBmcm9tICN0b3AtbGF5ZXJcblx0XHRcdH1cblx0XHR9XG59O1xuXG5jb25zdCBoYW5kbGVEaWFsb2dDbGljayA9ICh7XG5cdGNsaWVudFg6IHgsXG5cdGNsaWVudFk6IHksXG5cdHRhcmdldDogZWwsXG59OiBNb3VzZUV2ZW50KSA9PiB7XG5cdGlmIChlbCBpbnN0YW5jZW9mIEhUTUxEaWFsb2dFbGVtZW50ICYmIGF0dHIoZWwsIFwiZGF0YS1jbG9zZWRieVwiKSA9PT0gXCJhbnlcIikge1xuXHRcdGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRjb25zdCBpc0luc2lkZSA9IHRvcCA8PSB5ICYmIHkgPD0gYm90dG9tICYmIGxlZnQgPD0geCAmJiB4IDw9IHJpZ2h0O1xuXHRcdGlmICghaXNJbnNpZGUpIHJldHVybiBlbC5jbG9zZSgpO1xuXHR9XG5cdGNvbnN0IGRpYWxvZyA9IChlbCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKFwiZGlhbG9nXCIpO1xuXHRjb25zdCBjbG9zZSA9IGRpYWxvZyAmJiAoZWwgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LignW2RhdGEtY29tbWFuZD1cImNsb3NlXCJdJyk7XG5cdGlmIChjbG9zZSkgZGlhbG9nLmNsb3NlKCk7XG59O1xuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZURpYWxvZ0NsaWNrIGFzIEV2ZW50TGlzdGVuZXIsIFFVSUNLX0VWRU5UKTtcblx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcihoYW5kbGVNb2RhbCkub2JzZXJ2ZShcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5cdFx0e1xuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbXCJvcGVuXCJdLFxuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRcdHN1YnRyZWU6IHRydWUsXG5cdFx0fSxcblx0KTtcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uLCBvbkxvYWRlZCwgUVVJQ0tfRVZFTlQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZnVuY3Rpb24gaGFuZGxlRXJyb3N1bW1hcnlJbmplY3QoZXZlbnQ6IEV2ZW50ICYgeyBhbmltYXRpb25OYW1lPzogc3RyaW5nIH0pIHtcblx0aWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgIT09IHN0eWxlcy5fZXJyb3JzdW1tYXJ5KSByZXR1cm47XG5cdGNvbnN0IGZpcnN0ID0gKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KT8uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cblx0aWYgKGZpcnN0IGluc3RhbmNlb2YgSFRNTEhlYWRpbmdFbGVtZW50KSB7XG5cdFx0YXR0cihmaXJzdCwgXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuXHRcdGZpcnN0LmZvY3VzKCk7IC8vIEF1dG9mb2N1cyBmaXJzdCBoZWFkaW5nXG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b24oZG9jdW1lbnQsIFwiYW5pbWF0aW9uZW5kXCIsIGhhbmRsZUVycm9zdW1tYXJ5SW5qZWN0LCBRVUlDS19FVkVOVCksXG4pO1xuIiwidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuXG4vLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgRk9DVVNfT1VUTElORSA9IFwib3V0bGluZTogMXB4IGRvdHRlZDsgb3V0bGluZTogNXB4IGF1dG8gSGlnaGxpZ2h0OyBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3JcIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuc2hhZG93Um9vdCB8fCBlbGVtZW50LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gIC8vIFVubmFtZWQgc2xvdCBkb2VzIGF1dG9tYXRpY2FsbHkgcmVuZGVyIGFsbCB0b3AgZWxlbWVudCBub2Rlc1xuICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgY3NzKVxuKTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoX2Vycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgTElWRTtcbnZhciBMSVZFX1NSX0ZJWCA9IDA7XG52YXIgc3BlYWsgPSAodGV4dCkgPT4ge1xuICBpZiAoIUxJVkUpIHtcbiAgICBMSVZFID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBMSVZFLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gICAgYXR0cihMSVZFLCBcImFyaWEtbGl2ZVwiLCBcImFzc2VydGl2ZVwiKTtcbiAgfVxuICBpZiAoIUxJVkUuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKExJVkUpO1xuICBpZiAodGV4dCkgTElWRS50ZXh0Q29udGVudCA9IGAke3RleHR9JHtMSVZFX1NSX0ZJWCsrICUgMiA/IFwiXFx4QTBcIiA6IFwiXCJ9YDtcbn07XG52YXIgc2V0VmFsdWUgPSAoaW5wdXQsIGRhdGEsIHR5cGUgPSBcIlwiKSA9PiB7XG4gIHZhciBfYTIsIF9iO1xuICBjb25zdCBldmVudCA9IHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUsIGRhdGEsIGlucHV0VHlwZTogdHlwZSB9O1xuICBjb25zdCBwcm90byA9IEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiYmVmb3JlaW5wdXRcIiwgZXZlbnQpKTtcbiAgKF9iID0gKF9hMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIFwidmFsdWVcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChpbnB1dCwgZGF0YSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJpbnB1dFwiLCBldmVudCkpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImNoYW5nZVwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xufTtcbnZhciBJU19QUkVTUyA9IGZhbHNlO1xudmFyIGlzTW91c2VEb3duID0gKGV2ZW50KSA9PiB7XG4gIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm1vdXNldXBcIikgSVNfUFJFU1MgPSBmYWxzZTtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2Vkb3duXCIpIHtcbiAgICBJU19QUkVTUyA9IHRydWU7XG4gICAgb24oZG9jdW1lbnQsIFwibW91c2V1cFwiLCBpc01vdXNlRG93biwgeyBvbmNlOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiBJU19QUkVTUztcbn07XG52YXIgZGVjbGFyYXRpdmVTaGFkb3dSb290ID0gKHN0eWxlLCBzbG90ID0gXCI8c2xvdD48L3Nsb3Q+XCIpID0+IGA8dGVtcGxhdGUgc2hhZG93cm9vdG1vZGU9XCJvcGVuXCI+JHtzbG90fTxzdHlsZT4ke3N0eWxlfTwvc3R5bGU+PC90ZW1wbGF0ZT5gO1xuXG4vLyB1LW9wdGlvbi50c1xudmFyIERJU0FCTEVEID0gXCJkaXNhYmxlZFwiO1xudmFyIFNFTEVDVEVEID0gXCJzZWxlY3RlZFwiO1xudmFyIFVIVE1MT3B0aW9uRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtESVNBQkxFRCwgU0VMRUNURURdO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICghSVNfSU9TKSB0aGlzLnRhYkluZGV4ID0gLTE7XG4gICAgaWYgKCF0aGlzLmhhc0F0dHJpYnV0ZShcInJvbGVcIikpIGF0dHIodGhpcywgXCJyb2xlXCIsIFwib3B0aW9uXCIpO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWRpc2FibGVkXCIsIGAke3RoaXMuZGlzYWJsZWR9YCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtc2VsZWN0ZWRcIiwgYCR7dGhpcy5zZWxlY3RlZH1gKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgd2hldGhlciB0aGUgb3B0aW9uIGluIHRoZSBsaXN0IGJveCBpcyB0aGUgZGVmYXVsdCBpdGVtLiAqL1xuICBnZXQgZGVmYXVsdFNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzW1NFTEVDVEVEXTtcbiAgfVxuICBzZXQgZGVmYXVsdFNlbGVjdGVkKHZhbHVlKSB7XG4gICAgdGhpc1tTRUxFQ1RFRF0gPSB2YWx1ZTtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgRElTQUJMRUQpICE9PSBudWxsO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgRElTQUJMRUQsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIC8qKiBSZXRyaWV2ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGZvcm0gdGhhdCB0aGUgb2JqZWN0IGlzIGVtYmVkZGVkIGluLiAqL1xuICBnZXQgZm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwiZm9ybVwiKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIG9yZGluYWwgcG9zaXRpb24gb2YgYW4gb3B0aW9uIGluIGEgbGlzdCBib3guICovXG4gIGdldCBpbmRleCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiBbXG4gICAgICAuLi4oKF9hMiA9IHRoaXMucGFyZW50RWxlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5vcHRpb25zKSB8fCBbdGhpc11cbiAgICBdLmluZGV4T2YodGhpcyk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIGEgdmFsdWUgdGhhdCB5b3UgY2FuIHVzZSB0byBpbXBsZW1lbnQgeW91ciBvd24gbGFiZWwgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIG9iamVjdC4gKi9cbiAgZ2V0IGxhYmVsKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIChfYTIgPSBhdHRyKHRoaXMsIFwibGFiZWxcIikpICE9IG51bGwgPyBfYTIgOiB0aGlzLnRleHQ7XG4gIH1cbiAgc2V0IGxhYmVsKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImxhYmVsXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgU0VMRUNURUQpICE9PSBudWxsO1xuICB9XG4gIHNldCBzZWxlY3RlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgU0VMRUNURUQsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdGV4dCBzdHJpbmcgc3BlY2lmaWVkIGJ5IHRoZSBvcHRpb24gdGFnLiAqL1xuICBnZXQgdGV4dCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IHRoaXMudGV4dENvbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICB9XG4gIHNldCB0ZXh0KHRleHQpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIHZhbHVlIHdoaWNoIGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIgd2hlbiB0aGUgZm9ybSBjb250cm9sIGlzIHN1Ym1pdHRlZC4gKi9cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIChfYTIgPSBhdHRyKHRoaXMsIFwidmFsdWVcIikpICE9IG51bGwgPyBfYTIgOiB0aGlzLnRleHQ7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgfVxufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtb3B0aW9uXCIsIFVIVE1MT3B0aW9uRWxlbWVudCk7XG5cbi8vIHUtZGF0YWxpc3QudHNcbnZhciBVSFRNTERhdGFMaXN0U3R5bGUgPSBgJHtESVNQTEFZX0JMT0NLfVxuOjpzbG90dGVkKHUtb3B0aW9uKSB7IGRpc3BsYXk6IGJsb2NrOyBjdXJzb3I6IHBvaW50ZXIgfVxuOjpzbG90dGVkKHUtb3B0aW9uOmZvY3VzKSB7ICR7Rk9DVVNfT1VUTElORX0gfVxuOjpzbG90dGVkKHUtb3B0aW9uW2FyaWEtaGlkZGVuPVwidHJ1ZVwiXSksXG46OnNsb3R0ZWQodS1vcHRpb25bZGlzYWJsZWRdKSxcbjo6c2xvdHRlZCh1LW9wdGlvbltoaWRkZW5dKSB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudCB9YDtcbnZhciBVSFRNTERhdGFMaXN0U2hhZG93Um9vdCA9IGRlY2xhcmF0aXZlU2hhZG93Um9vdChVSFRNTERhdGFMaXN0U3R5bGUpO1xudmFyIExJVkVfVElNRVI7XG52YXIgSU5QVVRfREVCT1VOQ0UgPSAwO1xudmFyIElTX01PQklMRSA9IElTX0lPUyB8fCBJU19BTkRST0lEO1xudmFyIEVWRU5UUyA9IFwiY2xpY2ssZm9jdXNvdXQsaW5wdXQsa2V5ZG93bixtb3VzZWRvd24sbW91c2V1cFwiO1xudmFyIEVWRU5UU19JTlBVVCA9IFwiZm9jdXMsZm9jdXNpbixibHVyLGZvY3Vzb3V0XCI7XG52YXIgVEVYVFMgPSB7XG4gIHNpbmd1bGFyOiBcIiVkIGhpdFwiLFxuICBwbHVyYWw6IFwiJWQgaGl0c1wiXG59O1xudmFyIFVIVE1MRGF0YUxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3RleHRzID0gX19zcHJlYWRWYWx1ZXMoe30sIFRFWFRTKTtcbiAgICB0aGlzLl92YWx1ZSA9IFwiXCI7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgVUhUTUxEYXRhTGlzdFN0eWxlKTtcbiAgfVxuICAvLyBVc2VkIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgYW5ub3VuY2VtZW50c1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiaWRcIiwgLi4uT2JqZWN0LmtleXMoVEVYVFMpLm1hcCgoa2V5KSA9PiBgZGF0YS1zci0ke2tleX1gKV07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuX3Jvb3QgPSBnZXRSb290KHRoaXMpO1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwibGlzdGJveFwiKTtcbiAgICBhdHRyKHRoaXMsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICBvbih0aGlzLl9yb290LCBcImZvY3VzaW5cIiwgdGhpcyk7XG4gICAgb24odGhpcy5fcm9vdCwgXCJmb2N1c1wiLCB0aGlzLCB0cnVlKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1wiZGlzYWJsZWRcIiwgXCJoaWRkZW5cIiwgXCJsYWJlbFwiLCBcInZhbHVlXCJdLFxuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpKTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBvZmYodGhpcy5fcm9vdCB8fCB0aGlzLCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIG9mZih0aGlzLl9yb290IHx8IHRoaXMsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIGZhbHNlKTtcbiAgICBkaXNjb25uZWN0SW5wdXQodGhpcyk7XG4gICAgdGhpcy5fcm9vdCA9IHZvaWQgMDtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socHJvcCwgX3ByZXYsIG5leHQpIHtcbiAgICBjb25zdCB0ZXh0ID0gcHJvcCA9PSBudWxsID8gdm9pZCAwIDogcHJvcC5zcGxpdChcImRhdGEtc3ItXCIpWzFdO1xuICAgIGNvbnN0IGNzcyA9IGBpbnB1dFtsaXN0PVwiJHt0aGlzLmlkfVwiXWA7XG4gICAgaWYgKFRFWFRTW3RleHRdKSB0aGlzLl90ZXh0c1t0ZXh0XSA9IG5leHQgfHwgVEVYVFNbdGV4dF07XG4gICAgZWxzZSBpZiAodGhpcy5fcm9vdCkge1xuICAgICAgaWYgKHRoaXMuX2lucHV0KSBzZXR1cElucHV0KHRoaXMsIHRoaXMuX2lucHV0KTtcbiAgICAgIGZvciAoY29uc3QgaW5wdXQgb2YgdGhpcy5fcm9vdC5xdWVyeVNlbGVjdG9yQWxsKGNzcykpXG4gICAgICAgIHNldHVwSW5wdXQodGhpcywgaW5wdXQpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHsgdGFyZ2V0LCB0eXBlIH0gPSBldmVudDtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmICh0eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImZvY3VzXCIgfHwgdHlwZSA9PT0gXCJmb2N1c2luXCIpIG9uRm9jdXModGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImJsdXJcIiB8fCB0eXBlID09PSBcImZvY3Vzb3V0XCIpIG9uQmx1cih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwia2V5ZG93blwiKSBvbktleURvd24odGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiICYmIHRoaXMuY29udGFpbnModGFyZ2V0KSlcbiAgICAgIGlzTW91c2VEb3duKGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJtdXRhdGlvblwiIHx8IHR5cGUgPT09IFwiaW5wdXRcIikge1xuICAgICAgY2xlYXJUaW1lb3V0KElOUFVUX0RFQk9VTkNFKTtcbiAgICAgIElOUFVUX0RFQk9VTkNFID0gc2V0VGltZW91dChvbklucHV0LCAwLCB0aGlzLCBldmVudCk7XG4gICAgfVxuICB9XG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidS1vcHRpb25cIik7XG4gIH1cbn07XG52YXIgaXNEaXNhYmxlZCA9IChpbnB1dCkgPT4gKGlucHV0ID09IG51bGwgPyB2b2lkIDAgOiBpbnB1dC5kaXNhYmxlZCkgfHwgKGlucHV0ID09IG51bGwgPyB2b2lkIDAgOiBpbnB1dC5yZWFkT25seSkgfHwgZmFsc2U7XG52YXIgc2V0RXhwYW5kZWQgPSAoc2VsZiwgb3BlbikgPT4ge1xuICB2YXIgX2EyLCBfYiwgX2M7XG4gIGlmIChzZWxmLmhpZGRlbiAhPT0gb3BlbikgcmV0dXJuO1xuICBzZWxmLmhpZGRlbiA9IGlzRGlzYWJsZWQoc2VsZiA9PSBudWxsID8gdm9pZCAwIDogc2VsZi5faW5wdXQpIHx8ICFvcGVuO1xuICAoX2EyID0gbXV0YXRpb25PYnNlcnZlcihzZWxmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50YWtlUmVjb3JkcygpO1xuICBjb25zdCBpc1BvcG92ZXIgPSBzZWxmLmlzQ29ubmVjdGVkICYmIHNlbGYucG9wb3ZlciAmJiAoKF9iID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5pc0Nvbm5lY3RlZCkgJiYgKChfYyA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2MucG9wb3ZlclRhcmdldEVsZW1lbnQpID09PSBzZWxmO1xuICBpZiAoc2VsZi5faW5wdXQpIHNldHVwSW5wdXQoc2VsZiwgc2VsZi5faW5wdXQsIG9wZW4pO1xuICBpZiAoaXNQb3BvdmVyKSBhdHRyKHNlbGYsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcbiAgaWYgKGlzUG9wb3Zlcikgc2VsZi50b2dnbGVQb3BvdmVyKG9wZW4pO1xuICBpZiAob3Blbikgb25JbnB1dChzZWxmKTtcbn07XG52YXIgZGlzY29ubmVjdElucHV0ID0gKHNlbGYpID0+IHtcbiAgaWYgKCFzZWxmLl9pbnB1dCkgcmV0dXJuO1xuICBvZmYoc2VsZi5faW5wdXQgfHwgc2VsZiwgRVZFTlRTX0lOUFVULCBzZWxmKTtcbiAgb2ZmKHNlbGYuX3Jvb3QgfHwgc2VsZiwgRVZFTlRTLCBzZWxmKTtcbiAgc2V0RXhwYW5kZWQoc2VsZiwgZmFsc2UpO1xuICBzZWxmLl9pbnB1dCA9IHZvaWQgMDtcbn07XG52YXIgc2V0dXBJbnB1dCA9IChzZWxmLCBpbnB1dCwgb3BlbiA9IGZhbHNlKSA9PiB7XG4gIGlmIChzZWxmLnBvcG92ZXIpIGF0dHIoaW5wdXQsIFwicG9wb3ZlcnRhcmdldFwiLCB1c2VJZChzZWxmKSk7XG4gIG9uKGlucHV0LCBFVkVOVFNfSU5QVVQsIHNlbGYsIHRydWUpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtYXV0b2NvbXBsZXRlXCIsIFwibGlzdFwiKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWNvbnRyb2xzXCIsIHVzZUlkKHNlbGYpKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWV4cGFuZGVkXCIsIGAkeyFJU19NT0JJTEUgfHwgb3Blbn1gKTtcbiAgYXR0cihpbnB1dCwgXCJhdXRvY29tcGxldGVcIiwgXCJvZmZcIik7XG4gIGF0dHIoaW5wdXQsIFwicm9sZVwiLCBpc0Rpc2FibGVkKGlucHV0KSA/IG51bGwgOiBcImNvbWJvYm94XCIpO1xufTtcbnZhciBvbkZvY3VzID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IGlzSW5wdXQgPSBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50O1xuICBpZiAoaXNJbnB1dCAmJiBldmVudC5pc1RydXN0ZWQpIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICBpZiAoc2VsZi5faW5wdXQgIT09IGV2ZW50LnRhcmdldCAmJiBpc0lucHV0ICYmIGV2ZW50LnRhcmdldC5saXN0ID09PSBzZWxmKSB7XG4gICAgaWYgKHNlbGYuX2lucHV0KSBkaXNjb25uZWN0SW5wdXQoc2VsZik7XG4gICAgc2VsZi5faW5wdXQgPSBldmVudC50YXJnZXQ7XG4gICAgc2VsZi5faW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImZvY3VzXCIpKTtcbiAgICBzZWxmLl9pbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNpblwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgIGF0dHIoc2VsZiwgU0FGRV9MQUJFTExFREJZLCB1c2VJZCgoX2EyID0gc2VsZi5faW5wdXQubGFiZWxzKSA9PSBudWxsID8gdm9pZCAwIDogX2EyWzBdKSk7XG4gICAgb24oc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICAgIHNldEV4cGFuZGVkKHNlbGYsIGF0dHIoc2VsZi5faW5wdXQsIFwiaW5wdXRtb2RlXCIpICE9PSBcIm5vbmVcIik7XG4gICAgc3BlYWsoKTtcbiAgfVxufTtcbnZhciBvbkJsdXIgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgaWYgKCFJU19BTkRST0lEICYmICFpc01vdXNlRG93bigpICYmIHNlbGYuX2lucHV0KVxuICAgIHNldFRpbWVvdXQob25CbHVycmVkLCAwLCBzZWxmKTtcbiAgaWYgKGV2ZW50LnRhcmdldCA9PT0gc2VsZi5faW5wdXQgJiYgZXZlbnQuaXNUcnVzdGVkKVxuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufTtcbnZhciBvbkJsdXJyZWQgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByZWxhdGVkVGFyZ2V0ID0gKChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQpIHx8IG51bGw7XG4gIGNvbnN0IGlucHV0ID0gc2VsZi5faW5wdXQ7XG4gIGlmIChpbnB1dCAmJiBpbnB1dCAhPT0gcmVsYXRlZFRhcmdldCAmJiAhc2VsZi5jb250YWlucyhyZWxhdGVkVGFyZ2V0KSkge1xuICAgIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJibHVyXCIsIHsgcmVsYXRlZFRhcmdldCB9KSk7XG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNvdXRcIiwgeyBidWJibGVzOiB0cnVlLCByZWxhdGVkVGFyZ2V0IH0pXG4gICAgKTtcbiAgICBkaXNjb25uZWN0SW5wdXQoc2VsZik7XG4gIH1cbn07XG52YXIgb25DbGljayA9IChzZWxmLCB7IHRhcmdldCB9KSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmICghc2VsZi5faW5wdXQgfHwgc2VsZi5faW5wdXQgPT09IHRhcmdldCkgcmV0dXJuIHNldEV4cGFuZGVkKHNlbGYsIHRydWUpO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBzZWxmLm9wdGlvbnMpXG4gICAgaWYgKG9wdC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICBpZiAoYXR0cihzZWxmLCBcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCIpICE9PSBcInRydWVcIikge1xuICAgICAgICAoX2EyID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZm9jdXMoKTtcbiAgICAgICAgc2V0RXhwYW5kZWQoc2VsZiwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldFZhbHVlKHNlbGYuX2lucHV0LCBvcHQudmFsdWUpO1xuICAgIH1cbiAgaWYgKElTX0FORFJPSUQpIG9uQmx1cnJlZChzZWxmKTtcbn07XG52YXIgb25LZXlEb3duID0gKHNlbGYsIGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgeyBrZXksIHRhcmdldCwgYWx0S2V5LCBjdHJsS2V5LCBzaGlmdEtleSwgbWV0YUtleSB9ID0gZTtcbiAgY29uc3QgaXNFc2NhcGUgPSBrZXkgPT09IFwiRXNjYXBlXCIgfHwga2V5ID09PSBcIkVzY1wiO1xuICBpZiAoYWx0S2V5IHx8IGN0cmxLZXkgfHwgbWV0YUtleSB8fCBzaGlmdEtleSB8fCBrZXkgPT09IFwiVGFiXCIpIHJldHVybjtcbiAgaWYgKGlzRXNjYXBlICYmICFzZWxmLmhpZGRlbikgZSA9PSBudWxsID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICBzZXRFeHBhbmRlZChzZWxmLCAhaXNFc2NhcGUpO1xuICBjb25zdCBvcHRpb25zID0gWy4uLnNlbGYub3B0aW9uc10uZmlsdGVyKFxuICAgIChlbCkgPT4gYXR0cihlbCwgXCJhcmlhLWhpZGRlblwiKSAhPT0gXCJ0cnVlXCIgJiYgZWwub2Zmc2V0SGVpZ2h0XG4gICk7XG4gIGNvbnN0IHByZXYgPSBvcHRpb25zLmluZGV4T2YodGFyZ2V0KTtcbiAgbGV0IG5leHQgPSAtMTtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIikgbmV4dCA9IChwcmV2ICsgMSkgJSBvcHRpb25zLmxlbmd0aDtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1VwXCIpIG5leHQgPSAofnByZXYgPyBwcmV2IDogb3B0aW9ucy5sZW5ndGgpIC0gMTtcbiAgaWYgKH5wcmV2KSB7XG4gICAgaWYgKGtleSA9PT0gXCJIb21lXCIgfHwga2V5ID09PSBcIlBhZ2VVcFwiKSBuZXh0ID0gMDtcbiAgICBpZiAoa2V5ID09PSBcIkVuZFwiIHx8IGtleSA9PT0gXCJQYWdlRG93blwiKSBuZXh0ID0gb3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIGlmIChrZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgb3B0aW9uc1twcmV2XS5jbGljaygpO1xuICAgICAgcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbiAgaWYgKG9wdGlvbnNbbmV4dF0pIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIG9wdGlvbi50YWJJbmRleCA9IC0xO1xuICBpZiAob3B0aW9uc1tuZXh0XSkgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAoX2EyID0gb3B0aW9uc1tuZXh0XSB8fCBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xuICBpZiAoIW9wdGlvbnNbbmV4dF0gJiYga2V5ID09PSBcIkFycm93VXBcIilcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHZhciBfYTM7XG4gICAgICByZXR1cm4gKF9hMyA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnNldFNlbGVjdGlvblJhbmdlKDk5OSwgOTk5KTtcbiAgICB9KTtcbn07XG52YXIgb25JbnB1dCA9IChzZWxmLCBlKSA9PiB7XG4gIGNvbnN0IHsgX3RleHRzLCBfcm9vdCwgX2lucHV0LCBvcHRpb25zIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9IChfaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IF9pbnB1dC52YWx1ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKSkgfHwgXCJcIjtcbiAgY29uc3QgZmlsdGVyID0gIXNlbGYuaGFzQXR0cmlidXRlKFwiZGF0YS1ub2ZpbHRlclwiKTtcbiAgY29uc3QgaGlkZGVuID0gW107XG4gIGNvbnN0IHZpc2libGUgPSBbXTtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGNvbnN0IGhpZGUgPSBvcHQuZGlzYWJsZWQgfHwgb3B0LmhpZGRlbiB8fCBmaWx0ZXIgJiYgIW9wdC5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHZhbHVlKTtcbiAgICAoaGlkZSA/IGhpZGRlbiA6IHZpc2libGUpLnB1c2gob3B0KTtcbiAgfVxuICBmb3IgKGNvbnN0IG9wdCBvZiBoaWRkZW4pIGF0dHIob3B0LCBcImFyaWEtaGlkZGVuXCIsIFwidHJ1ZVwiKTtcbiAgZm9yIChjb25zdCBvcHQgb2YgdmlzaWJsZSkgYXR0cihvcHQsIFwiYXJpYS1oaWRkZW5cIiwgXCJmYWxzZVwiKTtcbiAgY29uc3QgdG90YWwgPSB2aXNpYmxlLmxlbmd0aDtcbiAgY2xlYXJUaW1lb3V0KExJVkVfVElNRVIpO1xuICBpZiAoKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUudHlwZSkgPT09IFwiaW5wdXRcIiAmJiB2YWx1ZSAhPT0gc2VsZi5fdmFsdWUpXG4gICAgTElWRV9USU1FUiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IGAkeyF0b3RhbCAmJiBzZWxmLmlubmVyVGV4dC50cmltKCkgfHwgYCR7X3RleHRzW3RvdGFsID09PSAxID8gXCJzaW5ndWxhclwiIDogXCJwbHVyYWxcIl19YC5yZXBsYWNlKFwiJWRcIiwgYCR7dG90YWx9YCl9YDtcbiAgICAgIGlmICghc2VsZi5oaWRkZW4gJiYgKF9yb290ID09IG51bGwgPyB2b2lkIDAgOiBfcm9vdC5hY3RpdmVFbGVtZW50KSA9PT0gX2lucHV0KSBzcGVhayh0ZXh0KTtcbiAgICAgIHNlbGYuX3ZhbHVlID0gdmFsdWU7XG4gICAgfSwgMWUzKTtcbiAgaWYgKElTX0lPUylcbiAgICB2aXNpYmxlLm1hcCgob3B0LCBpZHgpID0+IGF0dHIob3B0LCBcInRpdGxlXCIsIGAke2lkeCArIDF9LyR7dG90YWx9YCkpO1xufTtcbmlmIChJU19CUk9XU0VSKVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwibGlzdFwiLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGdldFJvb3QodGhpcykuZ2V0RWxlbWVudEJ5SWQoYXR0cih0aGlzLCBcImxpc3RcIikgfHwgXCJcIik7XG4gICAgfVxuICB9KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtZGF0YWxpc3RcIiwgVUhUTUxEYXRhTGlzdEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERhdGFMaXN0RWxlbWVudCwgVUhUTUxEYXRhTGlzdFNoYWRvd1Jvb3QsIFVIVE1MRGF0YUxpc3RTdHlsZSB9O1xuIiwiaW1wb3J0IHsgZmxpcCwgdHlwZSBQbGFjZW1lbnQsIHNoaWZ0LCBzaXplIH0gZnJvbSBcIkBmbG9hdGluZy11aS9kb21cIjtcbmltcG9ydCB7IFVIVE1MQ29tYm9ib3hFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtY29tYm9ib3hcIjtcbmltcG9ydCB7IFVIVE1MRGF0YUxpc3RFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtZGF0YWxpc3RcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRhbmNob3JQb3NpdGlvbixcblx0YXR0cixcblx0aXNJbnB1dExpa2UsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0b25NdXRhdGlvbixcblx0UVVJQ0tfRVZFTlQsXG5cdHVzZUlkLFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0ZJRUxEID0gc3R5bGVzLmZpZWxkLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19WQUxJREFUSU9OUyA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKTtcbmNvbnN0IENTU19WQUxJREFUSU9OID0gQ1NTX1ZBTElEQVRJT05TWzBdO1xuXG5jb25zdCBnZXRUZXh0ID0gKHN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uLCBrZXk6IHN0cmluZykgPT5cblx0c3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShgLS1tdGRzLXRleHQtJHtrZXl9YCk/LnNsaWNlKDEsIC0xKSB8fCBcIlwiOyAvLyBzbGljZSB0byB0cmltIHF1b3Rlc1xuXG5mdW5jdGlvbiBoYW5kbGVGaWVsZE11dGF0aW9uKFxuXHRmaWVsZHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4sXG5cdHZhbGlkYXRlPzogYm9vbGVhbixcbikge1xuXHRmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcylcblx0XHRpZiAoZmllbGQuaXNDb25uZWN0ZWQpIHtcblx0XHRcdGNvbnN0IGxhYmVsczogSFRNTExhYmVsRWxlbWVudFtdID0gW107XG5cdFx0XHRjb25zdCBkZXNjczogRWxlbWVudFtdID0gW107XG5cdFx0XHRjb25zdCB2YWxpZHM6IEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0bGV0IGNvbWJvYm94OiBVSFRNTENvbWJvYm94RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXHRcdFx0bGV0IGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGVsIG9mIGZpZWxkLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSkge1xuXHRcdFx0XHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MTGFiZWxFbGVtZW50KSBsYWJlbHMucHVzaChlbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgVUhUTUxDb21ib2JveEVsZW1lbnQpIGNvbWJvYm94ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSAmJiAhZWwuaGlkZGVuKSBpbnB1dCA9IGVsO1xuXHRcdFx0XHRlbHNlIGlmIChlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLWRlc2NyaXB0aW9uXCIpKSBkZXNjcy5wdXNoKGVsKTtcblx0XHRcdFx0ZWxzZSBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdHZhbGlkID0gYXR0cihlbCwgXCJkYXRhLWNvbG9yXCIpID09PSBcInN1Y2Nlc3NcIiB8fCAhZWwuY2xpZW50SGVpZ2h0OyAvLyBPbmx5IHNldCBpbnZhbGlkIGlmIFZhbGlkYXRpb24gaXMgdmlzaWJsZVxuXHRcdFx0XHRcdHZhbGlkcy5wdXNoKGVsKTtcblx0XHRcdFx0XHRkZXNjcy51bnNoaWZ0KGVsKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxQYXJhZ3JhcGhFbGVtZW50KVxuXHRcdFx0XHRcdGRlc2NzLnNvbWUoKGRlc2MpID0+IGRlc2MuY29udGFpbnMoZWwpKSB8fCBkZXNjcy5wdXNoKGVsKTsgLy8gT25seSBhZGQgaWYgbm90IGFscmVhZHkgaW5zaWRlIGRlc2NyaXB0aW9uXG5cdFx0XHR9XG5cblx0XHRcdGlmIChpbnB1dCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGxhYmVsIG9mIGxhYmVscykgbGFiZWwuaHRtbEZvciA9IHVzZUlkKGlucHV0KTtcblx0XHRcdFx0aWYgKHZhbGlkYXRlICYmIGF0dHIoZmllbGQsIFwiZGF0YS12YWxpZGF0aW9uXCIpID09PSBcImZvcm1cIikge1xuXHRcdFx0XHRcdHZhbGlkID0gaW5wdXQubWF0Y2hlcyhcIjp2YWxpZFwiKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGVsIG9mIHZhbGlkcykgYXR0cihlbCwgXCJoaWRkZW5cIiwgdmFsaWQgPyBcIlwiIDogbnVsbCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVuZGVyQ29tYm9ib3goY29tYm9ib3gpO1xuXHRcdFx0XHRyZW5kZXJDb3VudGVyKGlucHV0KTtcblx0XHRcdFx0cmVuZGVyVGV4dGFyZWFTaXplKGlucHV0KTtcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIGRlc2NzLm1hcCh1c2VJZCkuam9pbihcIiBcIikgfHwgbnVsbCk7IC8vIFJlbW92ZSBpZiBlbXB0eVxuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtaW52YWxpZFwiLCBgJHshdmFsaWR9YCk7XG5cdFx0XHR9XG5cdFx0fVxufVxuXG4vLyBpT1MgZG9lcyBub3Qgc3VwcG9ydCBmaWVsZC1zaXppbmc6IGNvbnRlbnQsIHNvIHdlIG5lZWQgdG8gbWFudWFsbHkgcmVzaXplXG5mdW5jdGlvbiByZW5kZXJUZXh0YXJlYVNpemUodGV4dGFyZWE6IEVsZW1lbnQpIHtcblx0aWYgKHRleHRhcmVhIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuXHRcdHRleHRhcmVhLnN0eWxlLnNldFByb3BlcnR5KFwiLS1tdGRzLXRleHRhcmVhLWhlaWdodFwiLCBcImF1dG9cIik7XG5cdFx0dGV4dGFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG5cdFx0XHRcIi0tbXRkcy10ZXh0YXJlYS1oZWlnaHRcIixcblx0XHRcdGAke3RleHRhcmVhLnNjcm9sbEhlaWdodH1weGAsXG5cdFx0KTtcblx0fVxufVxuXG4vLyBTZXR1cCB0cmFuc2xhdGlvbnMgZnJvbSBDU1MgY3VzdG9tIHByb3BlcnRpZXNcbmZ1bmN0aW9uIHJlbmRlckNvbWJvYm94KGVsOiBVSFRNTENvbWJvYm94RWxlbWVudCB8IG51bGwpIHtcblx0Y29uc3QgeyBjb250cm9sLCBsaXN0IH0gPSBlbCB8fCB7fTtcblxuXHRpZiAoZWwgJiYgbGlzdCAmJiAhZWwuaGFzQXR0cmlidXRlKFwiZGF0YS1zci1hZGRlZFwiKSkge1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1hZGRlZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWFkZGVkXCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItZW1wdHlcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1lbXB0eVwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLWZvdW5kXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtZm91bmRcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1pbnZhbGlkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtaW52YWxpZFwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLW9mXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtb2ZcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1yZW1vdmVcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1yZW1vdmVcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1yZW1vdmVkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtcmVtb3ZlZFwiKSk7XG5cdFx0YXR0cihsaXN0LCBcImRhdGEtc3ItcGx1cmFsXCIsIGdldFRleHQoc3R5bGUsIFwiZGF0YWxpc3QtcGx1cmFsXCIpKTtcblx0XHRhdHRyKGxpc3QsIFwiZGF0YS1zci1zaW5ndWxhclwiLCBnZXRUZXh0KHN0eWxlLCBcImRhdGFsaXN0LXNpbmd1bGFyXCIpKTtcblx0fVxuXHRpZiAobGlzdCAmJiBjb250cm9sICYmICFsaXN0Lmhhc0F0dHJpYnV0ZShcInBvcG92ZXJcIikpIHtcblx0XHRhdHRyKGxpc3QsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcblx0XHRhdHRyKGNvbnRyb2wsIFwicG9wb3ZlcnRhcmdldFwiLCB1c2VJZChsaXN0KSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQ291bnRlcihpbnB1dDogSFRNTElucHV0RWxlbWVudCkge1xuXHRjb25zdCBlbCA9IGlucHV0Py5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdGNvbnN0IGxpbWl0ID0gZWwgJiYgYXR0cihlbCwgXCJkYXRhLWNvdW50XCIpO1xuXG5cdGlmIChlbCAmJiBsaW1pdCkge1xuXHRcdGNvbnN0IHJlbWFpbmRlciA9IE51bWJlcihsaW1pdCkgLSBpbnB1dC52YWx1ZS5sZW5ndGg7XG5cdFx0Y29uc3QgbmV4dEludmFsaWQgPSByZW1haW5kZXIgPCAwO1xuXHRcdGNvbnN0IHByZXZJbnZhbGlkID0gYXR0cihlbCwgXCJhcmlhLWxpdmVcIikgPT09IFwicG9saXRlXCI7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCB8fCBpbnB1dCk7XG5cdFx0Y29uc3Qgb3ZlciA9IGdldFRleHQoc3R5bGUsIFwiY291bnQtb3ZlclwiKTtcblx0XHRjb25zdCB1bmRlciA9IGdldFRleHQoc3R5bGUsIFwiY291bnQtdW5kZXJcIik7XG5cblx0XHRpZiAocHJldkludmFsaWQgIT09IG5leHRJbnZhbGlkKSB7XG5cdFx0XHRhdHRyKGVsLCBcImFyaWEtbGl2ZVwiLCBuZXh0SW52YWxpZCA/IFwicG9saXRlXCIgOiBcIm9mZlwiKTtcblx0XHRcdGZvciAoY29uc3QgY3NzIG9mIENTU19WQUxJREFUSU9OUykgZWwuY2xhc3NMaXN0LnRvZ2dsZShjc3MsIG5leHRJbnZhbGlkKTtcblx0XHR9XG5cdFx0ZWwudGV4dENvbnRlbnQgPSAobmV4dEludmFsaWQgPyBvdmVyIDogdW5kZXIpLnJlcGxhY2UoXG5cdFx0XHRcIiVkXCIsXG5cdFx0XHRgJHtNYXRoLmFicyhyZW1haW5kZXIpfWAsXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGVGaWVsZFRvZ2dsZShldmVudDogRXZlbnQgJiB7IG5ld1N0YXRlPzogc3RyaW5nIH0pIHtcblx0aWYgKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIFVIVE1MRGF0YUxpc3RFbGVtZW50KSB7XG5cdFx0Y29uc3QgbGlzdCA9IGV2ZW50LnRhcmdldDtcblx0XHRjb25zdCByb290ID0gbGlzdC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QgfCBudWxsO1xuXHRcdGNvbnN0IGFuY2hvciA9IHJvb3Q/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuXHRcdFx0YFtwb3BvdmVydGFyZ2V0PVwiJHtsaXN0LmlkfVwiXWAsXG5cdFx0KTtcblxuXHRcdGlmIChldmVudC5uZXdTdGF0ZSA9PT0gXCJjbG9zZWRcIikgYW5jaG9yUG9zaXRpb24obGlzdCwgZmFsc2UpO1xuXHRcdGVsc2UgaWYgKGFuY2hvcilcblx0XHRcdGFuY2hvclBvc2l0aW9uKGxpc3QsIGFuY2hvciwge1xuXHRcdFx0XHRwbGFjZW1lbnQ6IChhdHRyKGxpc3QsIFwiZGF0YS1wb3NpdGlvblwiKSA/PyBcImJvdHRvbVwiKSBhcyBQbGFjZW1lbnQsXG5cdFx0XHRcdG1pZGRsZXdhcmU6IFtcblx0XHRcdFx0XHRmbGlwKCksXG5cdFx0XHRcdFx0c2hpZnQoKSxcblx0XHRcdFx0XHRzaXplKHtcblx0XHRcdFx0XHRcdHBhZGRpbmc6IDEwLFxuXHRcdFx0XHRcdFx0YXBwbHkoeyBhdmFpbGFibGVIZWlnaHQgfSkge1xuXHRcdFx0XHRcdFx0XHRsaXN0LnN0eWxlLndpZHRoID0gYCR7YW5jaG9yLm9mZnNldFdpZHRofXB4YDtcblx0XHRcdFx0XHRcdFx0bGlzdC5zdHlsZS5tYXhIZWlnaHQgPSBgJHtNYXRoLm1heCg1MCwgYXZhaWxhYmxlSGVpZ2h0KX1weGA7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRdLFxuXHRcdFx0fSk7XG5cdH1cbn1cbi8vIFVwZGF0ZSB3aGVuIHR5cGluZ1xuZnVuY3Rpb24gaGFuZGxlRmllbGRJbnB1dChldmVudDogRXZlbnQpIHtcblx0aWYgKGlzSW5wdXRMaWtlKGV2ZW50LnRhcmdldCkpIHtcblx0XHRyZW5kZXJDb3VudGVyKGV2ZW50LnRhcmdldCk7XG5cdFx0cmVuZGVyVGV4dGFyZWFTaXplKGV2ZW50LnRhcmdldCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRmllbGRWYWxkaWF0aW9uKGV2ZW50OiBFdmVudCkge1xuXHRjb25zdCBmaWVsZCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihgLiR7Q1NTX0ZJRUxEfWApO1xuXHRpZiAoZXZlbnQudHlwZSA9PT0gXCJpbnZhbGlkXCIgJiYgZmllbGQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBzaG93aW5nIGRlZmF1bHQgdmFsaWRhdGlvbiBidWJibGVzXG5cdGhhbmRsZUZpZWxkTXV0YXRpb24oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShDU1NfRklFTEQpLCB0cnVlKTsgLy8gVXBkYXRlIHN0YXRlXG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRCwgaGFuZGxlRmllbGRNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImlucHV0XCIsIGhhbmRsZUZpZWxkSW5wdXQsIFFVSUNLX0VWRU5UKTtcblx0b24oZG9jdW1lbnQsIFwiaW52YWxpZCxzdWJtaXRcIiwgaGFuZGxlRmllbGRWYWxkaWF0aW9uLCB0cnVlKTsgLy8gVXNlIGNhcHR1cmUgYXMgaW52YWxpZCBhbmQgc3VibWl0IGRvZXMgbm90IGJ1YmJsZVxuXHRvbihkb2N1bWVudCwgXCJ0b2dnbGVcIiwgaGFuZGxlRmllbGRUb2dnbGUsIFFVSUNLX0VWRU5UKTsgLy8gVXNlIGNhcHR1cmUgc2luY2UgdG9nZ2xlIGRvZXMgbm90IGJ1YmJsZVxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgaXNJbnB1dExpa2UsIG9uTG9hZGVkLCBvbk11dGF0aW9uLCB1c2VJZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRklFTERTRVQgPSBzdHlsZXMuZmllbGRzZXQuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1ZBTElEQVRJT04gPSBzdHlsZXMudmFsaWRhdGlvbi5zcGxpdChcIiBcIilbMF07XG5jb25zdCBBUklBX0RFU0MgPSBcImFyaWEtZGVzY3JpYmVkYnlcIjtcbmNvbnN0IEFSSUFfSU5WQUxJRCA9IFwiYXJpYS1pbnZhbGlkXCI7XG5cbi8vIFVzaW5nIHJlcXVlc3RBbmltYXRpb25GcmFtZSB0byBlbnN1cmUgaXQgcnVucyBhZnRlciBmaWVsZC1vYnNlcnZlclxuZnVuY3Rpb24gaGFuZGxlRmllbGRzZXRNdXRhdGlvbihmaWVsZHNldHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4pIHtcblx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRmb3IgKGNvbnN0IGZpZWxkc2V0IG9mIGZpZWxkc2V0cylcblx0XHRcdGlmIChmaWVsZHNldC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0XHRjb25zdCBpbnB1dHM6IEhUTUxJbnB1dEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0XHRsZXQgdmFsaWRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdFx0XHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBlbCBvZiBmaWVsZHNldC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikpIHtcblx0XHRcdFx0XHRpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdFx0dmFsaWQgPSBhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8ICFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0XHR2YWxpZElkID0gdXNlSWQoZWwpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoaXNJbnB1dExpa2UoZWwpKSBpbnB1dHMucHVzaChlbCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykge1xuXHRcdFx0XHRcdGNvbnN0IGRlc2MgPSBhdHRyKGlucHV0LCBBUklBX0RFU0MpPy5yZXBsYWNlKHZhbGlkSWQgfHwgXCIjXCIsIFwiXCIpO1xuXG5cdFx0XHRcdFx0YXR0cihpbnB1dCwgQVJJQV9ERVNDLCBgJHt2YWxpZElkIHx8IFwiXCJ9ICR7ZGVzYyB8fCBcIlwifWAudHJpbSgpKTtcblx0XHRcdFx0XHRhdHRyKGlucHV0LCBBUklBX0lOVkFMSUQsIGAkeyF2YWxpZH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRFNFVCwgaGFuZGxlRmllbGRzZXRNdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19MT0dPID0gc3R5bGVzLmxvZ28uc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVMb2dvTXV0YXRpb24oW2xvZ29dOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRpZiAobG9nbz8uaXNDb25uZWN0ZWQgJiYgbG9nbz8uZmlyc3RFbGVtZW50Q2hpbGQgaW5zdGFuY2VvZiBTVkdTVkdFbGVtZW50KSB7XG5cdFx0Zm9yIChjb25zdCBpY29uIG9mIGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvckFsbChcImxpbmtbcmVsfj0naWNvbiddXCIpKVxuXHRcdFx0aWNvbi5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgXCJkaXNhYmxlZFwiKTsgLy8gRGlzYWJsZSBwcmV2aW91cyBpY29uIChidXQgbm90IHJlbW92ZSBpcyBhcyB0aGlzIG1ha2VzIE5leHQuanMgc2FkKVxuXG5cdFx0Y29uc3Qgc3ZnID0gbG9nby5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRjb25zdCBpc0RvdCA9IGxvZ28/Lmhhc0F0dHJpYnV0ZShcImRhdGEtZW52XCIpO1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoc3ZnKTtcblx0XHRjb25zdCB0ZXh0ID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcImNvbG9yXCIpO1xuXHRcdGNvbnN0IGJhY2sgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1tdGRzLWxvZ28tY29sb3JcIik7XG5cdFx0Y29uc3QgaWNvbiA9IHN2Zy5vdXRlckhUTUxcblx0XHRcdC5yZXBsYWNlKC9cXG4rL2csIFwiIFwiKSAvLyBQcmV2ZW50IGxpbmUgYnJlYWtzXG5cdFx0XHQucmVwbGFjZSgvKGZpbGx8d2lkdGh8aGVpZ2h0fHhtbG5zKT1cIlteXCJdK1wiL2dpLCBcIlwiKVxuXHRcdFx0LnJlcGxhY2UoXCI8c3ZnXCIsIGA8c3ZnIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIGZpbGw9XCIke3RleHR9XCJgKTtcblxuXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoXG5cdFx0XHRPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpLCB7XG5cdFx0XHRcdGhyZWY6IGBkYXRhOmltYWdlL3N2Zyt4bWwsJHtlbmNvZGVVUklDb21wb25lbnQoYDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNTUgNTUnPjxyZWN0IGZpbGw9JyR7aXNEb3QgPyBcIm5vbmVcIiA6IGJhY2t9JyB3aWR0aD0nNTEnIGhlaWdodD0nNTEnIHg9JzInIHk9JzInIHN0cm9rZT0nJHt0ZXh0fScgc3Ryb2tlLWRhc2hhcnJheT0nMC4wOSA2LjM4JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1vcGFjaXR5PScke2lzRG90ID8gMC42IDogMH0nIHN0cm9rZS13aWR0aD0nMi4zJyByeD0nMjUuNScvPjxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg3LjUgNy41KVwiPiR7aWNvbn08L2c+PC9zdmc+YCl9YCxcblx0XHRcdFx0cmVsOiBcImljb25cIixcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19MT0dPLCBoYW5kbGVMb2dvTXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCB7IGZsaXAsIHR5cGUgUGxhY2VtZW50LCBzaGlmdCwgc2l6ZSB9IGZyb20gXCJAZmxvYXRpbmctdWkvZG9tXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYW5jaG9yUG9zaXRpb24sIGF0dHIsIG9uLCBvbkxvYWRlZCwgUVVJQ0tfRVZFTlQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1BPUE9WRVIgPSBzdHlsZXMucG9wb3Zlci5zcGxpdChcIiBcIilbMF07XG5sZXQgT1BFTl9QT1BPVkVSUyA9IDA7IC8vIFNwZWVkIHVwIGJ5IG9ubHkgY2hlY2tpbmcgY2xpY2tzIGlmIHdlIGhhdmUgb3BlbiBwb3BvdmVyc1xuXG5mdW5jdGlvbiBoYW5kbGVQb3BvdmVyVG9nZ2xlKHtcblx0dGFyZ2V0OiBlbCxcblx0bmV3U3RhdGUsXG59OiBFdmVudCAmIHsgbmV3U3RhdGU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1BPUE9WRVIpKSB7XG5cdFx0Y29uc3QgaXNDbG9zaW5nID0gbmV3U3RhdGUgPT09IFwiY2xvc2VkXCI7XG5cdFx0Y29uc3QgaXNDb250YWluID0gYXR0cihlbCwgXCJkYXRhLW92ZXJzY3JvbGxcIikgPT09IFwiY29udGFpblwiO1xuXHRcdGNvbnN0IGFuY2hvciA9IChlbC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QpPy5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pihcblx0XHRcdGBbcG9wb3ZlcnRhcmdldD1cIiR7ZWwuaWR9XCJdYCxcblx0XHQpO1xuXG5cdFx0T1BFTl9QT1BPVkVSUyArPSBpc0Nsb3NpbmcgPyAtMSA6IDE7XG5cdFx0aWYgKGlzQ2xvc2luZykgYW5jaG9yUG9zaXRpb24oZWwsIGZhbHNlKTtcblx0XHRlbHNlIGlmIChhbmNob3IpXG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgYW5jaG9yLCB7XG5cdFx0XHRcdHBsYWNlbWVudDogKGF0dHIoZWwsIFwiZGF0YS1wb3NpdGlvblwiKSB8fCBcImJvdHRvbVwiKSBhcyBQbGFjZW1lbnQsXG5cdFx0XHRcdG1pZGRsZXdhcmU6IFtmbGlwKCksIHNoaWZ0KHsgcGFkZGluZzogMTAgfSldLmNvbmNhdChcblx0XHRcdFx0XHRpc0NvbnRhaW5cblx0XHRcdFx0XHRcdD8gc2l6ZSh7XG5cdFx0XHRcdFx0XHRcdFx0cGFkZGluZzogMTAsXG5cdFx0XHRcdFx0XHRcdFx0YXBwbHkoeyBhdmFpbGFibGVIZWlnaHQgfSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZWwuc3R5bGUubWF4SGVpZ2h0ID0gYCR7TWF0aC5tYXgoNTAsIGF2YWlsYWJsZUhlaWdodCl9cHhgO1xuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQ6IFtdLFxuXHRcdFx0XHQpLFxuXHRcdFx0fSk7XG5cdH1cbn1cblxuLy8gUG9seWZpbGwgcG9wb3ZlcnRhcmdldCBmb3IgPGE+IChub3Qgc3VwcG9ydGVkIGJ5IG5hdGl2ZSlcbi8vIGFuZCBhdXRvbWF0aWNhbGx5IGFzc3VtZSBwb3BvdmVydGFyZ2V0IGlzIHRoZSBjbG9zZXN0IHBhcmVudCBwb3BvdmVyXG4vLyBidXQgcmVzcGVjdCB0aGUgcG9wb3ZlcnRhcmdldCBhbmQgcG9wb3ZlcnRhcmdldGFjdGlvbiBhdHRyaWJ1dGVcbmZ1bmN0aW9uIGhhbmRsZVBvcG92ZXJMaW5rQ2xpY2soeyB0YXJnZXQgfTogRXZlbnQpIHtcblx0Y29uc3QgY2xvc2UgPVxuXHRcdE9QRU5fUE9QT1ZFUlMgJiYgKHRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKFwiYSxbcG9wb3ZlcnRhcmdldGFjdGlvbl1cIik7XG5cblx0aWYgKGNsb3NlKSB7XG5cdFx0Y29uc3QgYWN0aW9uID0gYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0YWN0aW9uXCIpIHx8IFwidG9nZ2xlXCI7XG5cdFx0Y29uc3Qgb3BlbiA9IGFjdGlvbiA9PT0gXCJzaG93XCIgfHwgKGFjdGlvbiA9PT0gXCJoaWRlXCIgPyBmYWxzZSA6IHVuZGVmaW5lZCk7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0XCIpIHx8IFwiXCIpO1xuXHRcdGNvbnN0IHBvcG92ZXIgPSAodGFyZ2V0IHx8IGNsb3NlKS5jbG9zZXN0PEhUTUxFbGVtZW50PihgLiR7Q1NTX1BPUE9WRVJ9YCk7XG5cblx0XHQvLyBQb3BvdmVyIGNhbiBiZSBkaXNjb25uZXRlZCBieSBjbGljayBoYW5kbGVyIGRlZXBlciBkb3duIGluIHRoZSBET00gdGhyZWUgYmVmb3JlIHJlYWNoaW5nIGRvY3VtZW50XG5cdFx0aWYgKHBvcG92ZXI/LmlzQ29ubmVjdGVkICYmIHBvcG92ZXI/LnRvZ2dsZVBvcG92ZXIpXG5cdFx0XHRwb3BvdmVyLnRvZ2dsZVBvcG92ZXIob3Blbik7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJ0b2dnbGVcIiwgaGFuZGxlUG9wb3ZlclRvZ2dsZSwgUVVJQ0tfRVZFTlQpOyAvLyBVc2UgY2FwdHVyZSBzaW5jZSB0b2dnbGUgZG9lcyBub3QgYnViYmxlXG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZVBvcG92ZXJMaW5rQ2xpY2spOyAvLyBBbGxvdyBgPGE+YCB0byB1c2UgYHBvcG92ZXJ0YXJnZXRgIGFzIHdlbGxcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19UQUJMRSA9IHN0eWxlcy50YWJsZS5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZVRhYmxlTXV0YXRpb24odGFibGVzOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxUYWJsZUVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgdGFibGUgb2YgdGFibGVzKSB7XG5cdFx0Y29uc3QgdGhzID0gQXJyYXkuZnJvbSh0YWJsZS50SGVhZD8ucm93c1swXT8uY2VsbHMgfHwgW10sICh0aCkgPT5cblx0XHRcdHRoLmlubmVyVGV4dC50cmltKCksXG5cdFx0KTtcblxuXHRcdGZvciAoY29uc3QgdGJvZHkgb2YgdGFibGUudEJvZGllcylcblx0XHRcdGZvciAoY29uc3Qgcm93IG9mIHRib2R5LnJvd3MpXG5cdFx0XHRcdGZvciAoY29uc3QgY2VsbCBvZiByb3cuY2VsbHMpXG5cdFx0XHRcdFx0YXR0cihjZWxsLCBcImRhdGEtdGhcIiwgdGhzW2NlbGwuY2VsbEluZGV4XSB8fCBcIjplbXB0eVwiKTtcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PlxuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX1RBQkxFLCBoYW5kbGVUYWJsZU11dGF0aW9uKSxcbik7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgb24sIG9uTG9hZGVkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19UT0dHTEVHUk9VUCA9IGAuJHtzdHlsZXMudG9nZ2xlZ3JvdXAuc3BsaXQoXCIgXCIpWzBdfWA7XG5cbi8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBzaG93aW5nIGRlZmF1bHQgdmFsaWRhdGlvbiBidWJibGVzXG5mdW5jdGlvbiBoYW5kbGVUb2dnbGVncm91cEtleWRvd24oZXZlbnQ6IEV2ZW50ICYgUGFydGlhbDxLZXlib2FyZEV2ZW50Pikge1xuXHRjb25zdCB7IGtleSwgdGFyZ2V0OiBlbCB9ID0gZXZlbnQ7XG5cdGNvbnN0IGdyb3VwID0gZWwgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIGVsLmNsb3Nlc3QoQ1NTX1RPR0dMRUdST1VQKTtcblxuXHRpZiAoIWdyb3VwKSByZXR1cm47XG5cdGlmIChrZXkgPT09IFwiRW50ZXJcIikgZWwuY2xpY2soKTtcblx0aWYgKGtleT8uc3RhcnRzV2l0aChcIkFycm93XCIpKSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRjb25zdCBpbnB1dHMgPSBncm91cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpO1xuXHRcdGNvbnN0IGluZGV4ID0gWy4uLmlucHV0c10uaW5kZXhPZihlbCk7XG5cdFx0Y29uc3QgbW92ZSA9IGtleS5tYXRjaCgvQXJyb3coUmlnaHR8RG93bikvKSA/IDEgOiAtMTtcblx0XHRpbnB1dHNbKGlucHV0cy5sZW5ndGggKyBpbmRleCArIG1vdmUpICUgaW5wdXRzLmxlbmd0aF0/LmZvY3VzKCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb24oZG9jdW1lbnQsIFwia2V5ZG93blwiLCBoYW5kbGVUb2dnbGVncm91cEtleWRvd24pKTtcbiIsImltcG9ydCB7IGZsaXAsIHR5cGUgUGxhY2VtZW50LCBzaGlmdCB9IGZyb20gXCJAZmxvYXRpbmctdWkvZG9tXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0YW5jaG9yUG9zaXRpb24sXG5cdGF0dHIsXG5cdElTX0JST1dTRVIsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0UVVJQ0tfRVZFTlQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBERVNDUklCRURCWSA9IFwiYXJpYS1kZXNjcmliZWRieVwiO1xuY29uc3QgRVNDID0gXCJFc2NhcGVcIjtcbmNvbnN0IExBQkVMTEVEQlkgPSBcImFyaWEtbGFiZWxsZWRieVwiO1xuY29uc3QgUE9TSVRJT05fQ1NTX1BST1BFUlRZID0gXCItLW10ZHMtdG9vbHRpcC1wb3NpdGlvblwiO1xuY29uc3QgVEhST1RUTEVfREVMQVkgPSAzMDA7XG5jb25zdCBUT09MVElQID0gSVNfQlJPV1NFUlxuXHQ/IE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwge1xuXHRcdFx0Y2xhc3NOYW1lOiBzdHlsZXMuX3Rvb2x0aXAsXG5cdFx0XHRpZDogXCJtdGRzLXRvb2x0aXBcIixcblx0XHRcdHBvcG92ZXI6IFwibWFudWFsXCIsXG5cdFx0fSlcblx0OiBudWxsOyAvLyBDcmVhdGUgYSBkdW1teSBlbGVtZW50IHRvIGF2b2lkIG51bGwgY2hlY2tzXG5cbmxldCBBTkNIT1I6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbmxldCBMQVNUX0NBTEwgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5sZXQgVEhST1RUTEU6IG51bWJlciB8IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+ID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlVG9vbHRpcE1vdmUoeyB0YXJnZXQsIHR5cGUsIGtleSB9OiBFdmVudCAmIHsga2V5Pzogc3RyaW5nIH0pIHtcblx0aWYgKHR5cGUgPT09IFwia2V5ZG93blwiICYmIGtleSAhPT0gRVNDKSByZXR1cm47IC8vIEFsbG93IEVTQyBkaXNtaXNzIHRvIGZvbGxvdyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL3Rvb2x0aXAvXG5cdGNvbnN0IHdhaXQgPSBMQVNUX0NBTEwgKyBUSFJPVFRMRV9ERUxBWSAtIERhdGUubm93KCk7XG5cdGNsZWFyVGltZW91dChUSFJPVFRMRSk7XG5cdFRIUk9UVExFID0gc2V0VGltZW91dChcblx0XHRoYW5kbGVUb29sdGlwTW92ZVRocm90dGxlZCxcblx0XHRNYXRoLm1heCh3YWl0LCAwKSxcblx0XHRrZXkgPT09IEVTQyA/IG51bGwgOiB0YXJnZXQsXG5cdCk7XG59XG5cbi8vIFVzaW5nIGEgdGhyb3R0bGVkIGZ1bmN0aW9uIHRvIGF2b2lkIHBlcmZvcm1hbmNlIGlzc3Vlc1xuZnVuY3Rpb24gaGFuZGxlVG9vbHRpcE1vdmVUaHJvdHRsZWQodGFyZ2V0OiBFbGVtZW50IHwgbnVsbCkge1xuXHRMQVNUX0NBTEwgPSBEYXRlLm5vdygpO1xuXG5cdC8vIEJ1aWxkIGFuZCBhcHBlbmQgdG9vbHRpcCBpZiBub3QgZXhpc3Rpbmdcblx0aWYgKCFUT09MVElQIHx8IHRhcmdldCA9PT0gVE9PTFRJUCkgcmV0dXJuOyAvLyBBbGxvdyB0b29sdGlwIHRvIGJlIGhvdmVyZWQsIGZvbGxvd2luZyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIxLyNjb250ZW50LW9uLWhvdmVyLW9yLWZvY3VzXG5cdGlmICghVE9PTFRJUD8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFRPT0xUSVApOyAvLyBFbnN1cmUgY29ubmVjdGVkXG5cdGxldCBhbmNob3IgPSB0YXJnZXQ/LmNsb3Nlc3Q/LjxFbGVtZW50PihcIltkYXRhLXRvb2x0aXBdXCIpIHx8IG51bGw7XG5cblx0Ly8gTm8gbmVlZCB0byB1cGRhdGVcblx0aWYgKGFuY2hvciA9PT0gQU5DSE9SKSByZXR1cm47XG5cblx0Y29uc3QgY29udGVudCA9IChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwXCIpKSB8fCBcIlwiO1xuXHRjb25zdCBwb3NpdGlvbiA9XG5cdFx0KGFuY2hvciAmJiBhdHRyKGFuY2hvciwgXCJkYXRhLXRvb2x0aXAtcG9zaXRpb25cIikpIHx8XG5cdFx0d2luZG93XG5cdFx0XHQuZ2V0Q29tcHV0ZWRTdHlsZShhbmNob3IgfHwgZG9jdW1lbnQuYm9keSlcblx0XHRcdC5nZXRQcm9wZXJ0eVZhbHVlKFBPU0lUSU9OX0NTU19QUk9QRVJUWSlcblx0XHRcdD8udHJpbSgpIHx8XG5cdFx0XCJ0b3BcIjtcblxuXHRjb25zdCBpc0hpZGRlbiA9XG5cdFx0IWNvbnRlbnQgfHxcblx0XHRjb250ZW50ID09PSBcImZhbHNlXCIgfHxcblx0XHRjb250ZW50ID09PSBcInRydWVcIiB8fFxuXHRcdHBvc2l0aW9uID09PSBcIm5vbmVcIjtcblxuXHRpZiAoaXNIaWRkZW4pIGFuY2hvciA9IG51bGw7IC8vIERvIG5vdCBzaG93IHRvb2x0aXAgaWYgYm9vbGlzaCB2YWx1ZVxuXHRpZiAoYW5jaG9yKSBUT09MVElQLnRleHRDb250ZW50ID0gY29udGVudDsgLy8gT25seSB1cGRhdGUgY29udGVudCBpZiBuZXcgYW5jaG9yXG5cblx0Y29uc3QgaGFkTGFiZWwgPSBBTkNIT1IgJiYgYXR0cihBTkNIT1IsIExBQkVMTEVEQlkpID09PSBUT09MVElQPy5pZDtcblx0Y29uc3QgaGFzTGFiZWwgPVxuXHRcdChhbmNob3IgaW5zdGFuY2VvZiBIVE1MRWxlbWVudFxuXHRcdFx0PyBhbmNob3IuaW5uZXJUZXh0XG5cdFx0XHQ6IGFuY2hvcj8udGV4dENvbnRlbnRcblx0XHQpPy50cmltKCkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShMQUJFTExFREJZKSB8fFxuXHRcdGFuY2hvcj8uaGFzQXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKTtcblxuXHRBTkNIT1I/LnJlbW92ZUF0dHJpYnV0ZShoYWRMYWJlbCA/IExBQkVMTEVEQlkgOiBERVNDUklCRURCWSk7IC8vIFVubGluayBwcmV2aW91cyBhbmNob3Jcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgZmFsc2UpOyAvLyBSZXNldCBhbmNob3IgcG9zaXRpb25cblxuXHRBTkNIT1IgPSBhbmNob3I7IC8vIFN0b3JlIG5ldyBhbmNob3IgLSBtaWdodCBiZSBudWxsIGlmIG5vIG5ldyBhbmNob3Jcblx0aWYgKEFOQ0hPUikgYXR0cihBTkNIT1IsIGhhc0xhYmVsID8gREVTQ1JJQkVEQlkgOiBMQUJFTExFREJZLCBUT09MVElQPy5pZCk7IC8vIFVzZSB0b29sdGlwIGFzIGRlc2NyaXB0aW9uIGlmIGFsbHJlYWR5IGhhcyBsYWJlbFxuXHRpZiAoQU5DSE9SKSBUT09MVElQLmhpZGVQb3BvdmVyKCk7IC8vIEhpZGUgdG9vbHRpcCBzbyBpdCBjYW4gYmUgcGxhY2VkIG9uIHRvcC1sYXllciBvbiBuZXh0IHNob3dcblx0VE9PTFRJUC50b2dnbGVQb3BvdmVyKCEhYW5jaG9yKTtcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgYW5jaG9yIHx8IGZhbHNlLCB7XG5cdFx0cGxhY2VtZW50OiBwb3NpdGlvbiBhcyBQbGFjZW1lbnQsXG5cdFx0bWlkZGxld2FyZTogW2ZsaXAoKSwgc2hpZnQoeyBwYWRkaW5nOiAxMCB9KV0sXG5cdH0pO1xufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uKGRvY3VtZW50LCBcImJsdXIsZm9jdXMsbW91c2VvdXQsbW91c2VvdmVyXCIsIGhhbmRsZVRvb2x0aXBNb3ZlLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJrZXlkb3duXCIsIGhhbmRsZVRvb2x0aXBNb3ZlLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJibHVyXCIsIGhhbmRsZVRvb2x0aXBNb3ZlLCBRVUlDS19FVkVOVCk7XG59KTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIGlmIChhdHRycykgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJzKSkgYXR0cihlbCwga2V5LCB2YWwpO1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QgPSAoc3R5bGUsIHNsb3QgPSBcIjxzbG90Pjwvc2xvdD5cIikgPT4gYDx0ZW1wbGF0ZSBzaGFkb3dyb290bW9kZT1cIm9wZW5cIj4ke3Nsb3R9PHN0eWxlPiR7c3R5bGV9PC9zdHlsZT48L3RlbXBsYXRlPmA7XG5cbi8vIHUtZGV0YWlscy50c1xudmFyIFVIVE1MRGV0YWlsc1N0eWxlID0gYCR7RElTUExBWV9CTE9DS31cbjo6c2xvdHRlZCh1LXN1bW1hcnkpIHsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBibG9jayB9XG46OnNsb3R0ZWQodS1zdW1tYXJ5KTo6YmVmb3JlIHsgY29udGVudDogJyc7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgbWFyZ2luLWlubGluZTogLjA1ZW0gLjMxMjVlbTsgYm9yZGVyLWJsb2NrOiAuMzEyNWVtIHNvbGlkIHRyYW5zcGFyZW50OyBib3JkZXItaW5saW5lLXN0YXJ0OiAuNWVtIHNvbGlkIH1cbjo6c2xvdHRlZCh1LXN1bW1hcnlbYXJpYS1leHBhbmRlZD1cInRydWVcIl0pOjpiZWZvcmUgeyByb3RhdGU6IDkwZGVnIH1cbjpob3N0ID4gW3BhcnQ9XCJkZXRhaWxzLWNvbnRlbnRcIl06bm90KFtoaWRkZW49XCJcIl0pIHsgZGlzcGxheTogYmxvY2sgfWA7XG52YXIgVUhUTUxEZXRhaWxzU2hhZG93Um9vdCA9IGRlY2xhcmF0aXZlU2hhZG93Um9vdChcbiAgVUhUTUxEZXRhaWxzU3R5bGUsXG4gICc8c2xvdCBuYW1lPVwic3VtbWFyeVwiPjwvc2xvdD48c2xvdCBwYXJ0PVwiZGV0YWlscy1jb250ZW50XCIgaGlkZGVuPVwidW50aWwtZm91bmRcIj48L3Nsb3Q+J1xuKTtcbnZhciBVSFRNTERldGFpbHNFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIFVzaW5nIHVuZGVyc2NvcmUgaW5zdGVhZCBvZiBwcml2YXRlIGZpZWxkcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICB0aGlzLl9jb250ZW50ID0gbnVsbDtcbiAgICBpZiAoIXRoaXMuc2hhZG93Um9vdClcbiAgICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IG5hbWU6IFwic3VtbWFyeVwiIH0pLFxuICAgICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IHBhcnQ6IFwiZGV0YWlscy1jb250ZW50XCIgfSksXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBVSFRNTERldGFpbHNTdHlsZSlcbiAgICAgICk7XG4gIH1cbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcIm9wZW5cIl07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdmFyIF9hMjtcbiAgICB0aGlzLl9jb250ZW50ID0gKF9hMiA9IHRoaXMuc2hhZG93Um9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jaGlsZHJlblsxXTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcImdyb3VwXCIpO1xuICAgIG9uKHRoaXMuX2NvbnRlbnQsIFwiYmVmb3JlbWF0Y2hcIiwgdGhpcyk7XG4gICAgb24odGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMuX2NvbnRlbnQpIG9mZih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9mZih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgdGhpcy5fY29udGVudCA9IG51bGw7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIHByZXYsIG5leHQpIHtcbiAgICBjb25zdCBoaWRlID0gXCJvbmJlZm9yZW1hdGNoXCIgaW4gdGhpcyA/IFwidW50aWwtZm91bmRcIiA6IHRydWU7XG4gICAgY29uc3Qgb3BlbiA9IHRoaXMub3BlbjtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMuY2hpbGRyZW4pXG4gICAgICBpZiAoZWwubm9kZU5hbWUgPT09IFwiVS1TVU1NQVJZXCIpIHtcbiAgICAgICAgYXR0cih0aGlzLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKGVsKSk7XG4gICAgICAgIGF0dHIoZWwsIFwiYXJpYS1leHBhbmRlZFwiLCBgJHtvcGVufWApO1xuICAgICAgfVxuICAgIGlmICh0aGlzLl9jb250ZW50KSB7XG4gICAgICBhdHRyKHRoaXMuX2NvbnRlbnQsIFwiYXJpYS1oaWRkZW5cIiwgYCR7IW9wZW59YCk7XG4gICAgICB0aGlzLl9jb250ZW50LmhpZGRlbiA9IG9wZW4gPyBmYWxzZSA6IGhpZGU7XG4gICAgfVxuICAgIGlmIChvcGVuICYmIHRoaXMubmFtZSkge1xuICAgICAgY29uc3QgdURldGFpbHNMaXN0ID0gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgJHt0aGlzLm5vZGVOYW1lfVtuYW1lPVwiJHt0aGlzLm5hbWV9XCJdYFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgdURldGFpbHMgb2YgdURldGFpbHNMaXN0KVxuICAgICAgICBpZiAodURldGFpbHMgIT09IHRoaXMpIHVEZXRhaWxzLm9wZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHByb3AgPT09IFwib3BlblwiICYmIHByZXYgPT09IG51bGwgIT09IChuZXh0ID09PSBudWxsKSlcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJ0b2dnbGVcIikpO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IHRoaXMucXVlcnlTZWxlY3RvcihcIjpzY29wZSA+IHUtc3VtbWFyeVwiKTtcbiAgICBjb25zdCBpc1N1bW1hcnkgPSBzdW1tYXJ5ID09IG51bGwgPyB2b2lkIDAgOiBzdW1tYXJ5LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJiZWZvcmVtYXRjaFwiKSB0aGlzLm9wZW4gPSB0cnVlO1xuICAgIGlmIChpc1N1bW1hcnkgJiYgZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIGFzQnV0dG9uKGV2ZW50KTtcbiAgICBpZiAoaXNTdW1tYXJ5ICYmIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikgdGhpcy5vcGVuID0gIXRoaXMub3BlbjtcbiAgfVxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJvcGVuXCIpO1xuICB9XG4gIHNldCBvcGVuKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcIm9wZW5cIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgXCJuYW1lXCIpIHx8IFwiXCI7XG4gIH1cbiAgc2V0IG5hbWUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwibmFtZVwiLCB2YWx1ZSk7XG4gIH1cbn07XG52YXIgVUhUTUxTdW1tYXJ5RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJidXR0b25cIik7XG4gICAgdGhpcy5zbG90ID0gXCJzdW1tYXJ5XCI7XG4gICAgdGhpcy50YWJJbmRleCA9IDA7XG4gIH1cbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWRldGFpbHNcIiwgVUhUTUxEZXRhaWxzRWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXN1bW1hcnlcIiwgVUhUTUxTdW1tYXJ5RWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MRGV0YWlsc0VsZW1lbnQsIFVIVE1MRGV0YWlsc1NoYWRvd1Jvb3QsIFVIVE1MRGV0YWlsc1N0eWxlLCBVSFRNTFN1bW1hcnlFbGVtZW50IH07XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfRklSRUZPWCA9IElTX0JST1dTRVIgJiYgL2ZpcmVmb3gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIGlmIChhdHRycykgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJzKSkgYXR0cihlbCwga2V5LCB2YWwpO1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBnZXRMYWJlbCA9IChlbCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCBsYWJlbCA9IGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiKSB8fCBcIlwiO1xuICBjb25zdCBsYWJlbHMgPSAoKF9hMiA9IGF0dHIoZWwsIFwiYXJpYS1sYWJlbGxlZGJ5XCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKS5zcGxpdCgvXFxzKy8pKSB8fCBbXTtcbiAgcmV0dXJuIFtcbiAgICAuLi5sYWJlbHMubWFwKChpZDIpID0+IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkMikpLFxuICAgIC8vIEdldCBhbGwgbGFiZWxsZWRieSBlbGVtZW50c1xuICAgIC4uLkFycmF5LmZyb20oZWwubGFiZWxzIHx8IFtdKVxuICAgIC8vIEdldCBhbGwgPGxhYmVsPiBlbGVtZW50c1xuICBdLnJlZHVjZSgoYWNjLCBlbDIpID0+IHtcbiAgICB2YXIgX2EzO1xuICAgIHJldHVybiBhY2MgfHwgKChfYTMgPSBlbDIgPT0gbnVsbCA/IHZvaWQgMCA6IGVsMi5pbm5lclRleHQpID09IG51bGwgPyB2b2lkIDAgOiBfYTMudHJpbSgpKSB8fCBcIlwiO1xuICB9LCBsYWJlbCk7XG59O1xudmFyIGRlY2xhcmF0aXZlU2hhZG93Um9vdCA9IChzdHlsZSwgc2xvdCA9IFwiPHNsb3Q+PC9zbG90PlwiKSA9PiBgPHRlbXBsYXRlIHNoYWRvd3Jvb3Rtb2RlPVwib3BlblwiPiR7c2xvdH08c3R5bGU+JHtzdHlsZX08L3N0eWxlPjwvdGVtcGxhdGU+YDtcblxuLy8gdS1wcm9ncmVzcy50c1xudmFyIFVIVE1MUHJvZ3Jlc3NTdHlsZSA9IGA6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBib3JkZXI6IDFweCBzb2xpZDsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBoZWlnaHQ6IC41ZW07IHdpZHRoOiAxMGVtOyBvdmVyZmxvdzogaGlkZGVuIH1cbjpob3N0OjpiZWZvcmUgeyBjb250ZW50OiAnJzsgZGlzcGxheTogYmxvY2s7IGhlaWdodDogMTAwJTsgYmFja2dyb3VuZDogY3VycmVudENvbG9yOyB3aWR0aDogdmFyKC0tcGVyY2VudGFnZSwgMCUpOyB0cmFuc2l0aW9uOiB3aWR0aCAuMnMgfVxuOmhvc3QoOm5vdChbdmFsdWVdKSkgeyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsY3VycmVudENvbG9yIDI1JSwgdHJhbnNwYXJlbnQgNTAlLCBjdXJyZW50Q29sb3IgNzUlKSA1MCUvNDAwJSB9XG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IG5vLXByZWZlcmVuY2UpIHsgOmhvc3QgeyBhbmltYXRpb246IGluZGV0ZXJtaW5hdGUgMnMgbGluZWFyIGluZmluaXRlIH0gIH1cbkBrZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZSB7IGZyb20geyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDEwMCUgfSB0byB7IGJhY2tncm91bmQtcG9zaXRpb24teDogMCB9IH1gO1xudmFyIFVIVE1MUHJvZ3Jlc3NTaGFkb3dSb290ID0gZGVjbGFyYXRpdmVTaGFkb3dSb290KFxuICBVSFRNTFByb2dyZXNzU3R5bGUsXG4gIFwiPHNsb3QgaGlkZGVuPjwvc2xvdD5cIlxuKTtcbnZhciBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG52YXIgVUhUTUxQcm9ncmVzc0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIFwidmFsdWVcIiwgXCJtYXhcIl07XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAoIXRoaXMuc2hhZG93Um9vdClcbiAgICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IGhpZGRlbjogXCJcIiB9KSxcbiAgICAgICAgLy8gU2xvdCBoaWRpbmcgY29udGVudCBhbGxvd3MgbGVnYWN5IGJyb3dzZXIgdG8gZGlzcGxheSBmYWxsYmFjayB0ZXh0XG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBVSFRNTFByb2dyZXNzU3R5bGUpXG4gICAgICApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGlmIChTS0lQX0FUVFJfQ0hBTkdFKSByZXR1cm47XG4gICAgU0tJUF9BVFRSX0NIQU5HRSA9IHRydWU7XG4gICAgY29uc3Qgcm9sZUltYWdlID0gSVNfSU9TIHx8IElTX0ZJUkVGT1g7XG4gICAgY29uc3QgcGVyY2VudGFnZSA9IE1hdGgubWF4KDAsIE1hdGgucm91bmQodGhpcy5wb3NpdGlvbiAqIDEwMCkpO1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBlcmNlbnRhZ2VcIiwgYCR7cGVyY2VudGFnZX0lYCk7XG4gICAgbGV0IGxhYmVsID0gZ2V0TGFiZWwodGhpcyk7XG4gICAgaWYgKHJvbGVJbWFnZSkgbGFiZWwgPSBgJHtsYWJlbC5yZXBsYWNlKC9cXGQrJSQvLCBcIlwiKX0gJHtwZXJjZW50YWdlfSVgO1xuICAgIGlmIChJU19GSVJFRk9YKSBmb3IgKGNvbnN0IGVsIG9mIHRoaXMubGFiZWxzKSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIiwgbGFiZWwpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWJ1c3lcIiwgYCR7dGhpcy5wb3NpdGlvbiA9PT0gLTF9YCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtbGFiZWxcIiwgbGFiZWwudHJpbSgpKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIG51bGwpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbWF4XCIsIFwiMTAwXCIpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbWluXCIsIFwiMFwiKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW5vd1wiLCBgJHtwZXJjZW50YWdlfWApO1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIHJvbGVJbWFnZSA/IFwiaW1nXCIgOiBcInByb2dyZXNzYmFyXCIpO1xuICAgIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbiAgfVxuICBnZXQgbGFiZWxzKCkge1xuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5jbG9zZXN0KFwibGFiZWw6bm90KFtmb3JdKVwiKTtcbiAgICBjb25zdCBpZDIgPSB1c2VJZCh0aGlzKTtcbiAgICBpZiAobGFiZWwpIGxhYmVsLmh0bWxGb3IgPSBpZDI7XG4gICAgY29uc3QgZWwgPSBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgbGFiZWxbZm9yPVwiJHtpZDJ9XCJdYFxuICAgICk7XG4gICAgcmV0dXJuIGVsO1xuICB9XG4gIGdldCBwb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSA9PT0gbnVsbCA/IC0xIDogTWF0aC5taW4odGhpcy52YWx1ZSAvIHRoaXMubWF4LCAxKTtcbiAgfVxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIGdldE51bWJlcih0aGlzLCBcInZhbHVlXCIpO1xuICB9XG4gIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgIHNldE51bWJlcih0aGlzLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbWF4KCkge1xuICAgIHJldHVybiBnZXROdW1iZXIodGhpcywgXCJtYXhcIikgfHwgMTtcbiAgfVxuICBzZXQgbWF4KG1heCkge1xuICAgIHNldE51bWJlcih0aGlzLCBcIm1heFwiLCBtYXgpO1xuICB9XG59O1xuLy8gUHJldmVudCBDaHJvbWUgRGV2VG9vbHMgd2FybmluZyBhYm91dCA8bGFiZWwgZm9yPVwiXCI+IHBvaW50aW5nIHRvIDx1LXByb2dyZXNzPlxuVUhUTUxQcm9ncmVzc0VsZW1lbnQuZm9ybUFzc29jaWF0ZWQgPSB0cnVlO1xudmFyIGlzTnVtZXJpYyA9ICh2YWx1ZSkgPT4gIU51bWJlci5pc05hTihOdW1iZXIucGFyc2VGbG9hdChgJHt2YWx1ZX1gKSkgJiYgTnVtYmVyLmlzRmluaXRlKE51bWJlcih2YWx1ZSkpO1xudmFyIGdldE51bWJlciA9IChlbCwga2V5KSA9PiB7XG4gIGNvbnN0IHZhbHVlID0gYXR0cihlbCwga2V5KTtcbiAgcmV0dXJuIGlzTnVtZXJpYyh2YWx1ZSkgPyBNYXRoLm1heCgwLCBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZSkpIDogbnVsbDtcbn07XG52YXIgc2V0TnVtYmVyID0gKGVsLCBrZXksIHZhbCkgPT4ge1xuICBpZiAodmFsID09PSBudWxsIHx8IGlzTnVtZXJpYyh2YWwpKSBhdHRyKGVsLCBrZXksIGAke3ZhbH1gKTtcbiAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBzZXQgbm9uLW51bWVyaWMgJyR7YXR0cn0nOiAnJHt2YWx9J2ApO1xufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtcHJvZ3Jlc3NcIiwgVUhUTUxQcm9ncmVzc0VsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTFByb2dyZXNzRWxlbWVudCwgVUhUTUxQcm9ncmVzc1NoYWRvd1Jvb3QsIFVIVE1MUHJvZ3Jlc3NTdHlsZSB9O1xuIl0sIm5hbWVzIjpbIl9fZGVmUHJvcCIsIl9fZ2V0T3duUHJvcFN5bWJvbHMiLCJfX2hhc093blByb3AiLCJfX3Byb3BJc0VudW0iLCJfX2RlZk5vcm1hbFByb3AiLCJvYmoiLCJrZXkiLCJ2YWx1ZSIsIl9fc3ByZWFkVmFsdWVzIiwiYSIsImIiLCJwcm9wIiwiSVNfQlJPV1NFUiIsIklTX0FORFJPSUQiLCJJU19GSVJFRk9YIiwiSVNfSU9TIiwiX2EiLCJGT0NVU19PVVRMSU5FIiwiVUhUTUxFbGVtZW50IiwiYXR0ciIsImVsIiwibmFtZSIsImV2ZW50cyIsImFjdGlvbiIsImVsZW1lbnQiLCJyZXN0IiwidHlwZSIsIm9uIiwib2ZmIiwib2JzZXJ2ZXJzIiwibXV0YXRpb25PYnNlcnZlciIsIm9wdGlvbnMiLCJvYnNlcnZlciIsImRldGFpbCIsImFzQnV0dG9uIiwiZXZlbnQiLCJpc0NsaWNrIiwiZ2V0Um9vdCIsIm5vZGUiLCJfYTIiLCJyb290IiwiaWQiLCJ1c2VJZCIsImNyZWF0ZUVsZW1lbnQiLCJ0YWdOYW1lIiwidGV4dDIiLCJhdHRycyIsInZhbCIsImN1c3RvbUVsZW1lbnRzIiwiaW5zdGFuY2UiLCJnZXRMYWJlbCIsImxhYmVsIiwiaWQyIiwiYWNjIiwiZWwyIiwiX2EzIiwiTElWRSIsIkxJVkVfU1JfRklYIiwic3BlYWsiLCJzZXRWYWx1ZSIsImlucHV0IiwiZGF0YSIsIl9iIiwicHJvdG8iLCJJU19QUkVTUyIsImlzTW91c2VEb3duIiwiVUhUTUxDb21ib2JveFN0eWxlIiwiRVZFTlRTIiwiRVZFTlRfT05DRSIsIklTX0ZJUkVGT1hfREVTS1RPUCIsIklTX01PQklMRSIsIk1PRElGSUVEIiwiRkFMU0UiLCJURVhUUyIsIlVIVE1MQ29tYm9ib3hFbGVtZW50IiwicmVuZGVyIiwic3luY0lucHV0VmFsdWUiLCJfIiwidGFyZ2V0IiwiaXNEaXNhYmxlZCIsIm9uQmx1ciIsIm9uQ2xpY2siLCJvbkZvY3VzIiwib25JbnB1dCIsIm9uS2V5RG93biIsInRhZyIsInRleHQiLCJpc0RhdGEiLCJjb250cm9sIiwic2VsZiIsIl9mb2N1cyIsIl90ZXh0cyIsIml0ZW1zIiwibGlzdCIsIm11bHRpcGxlIiwicHJldiIsIm5leHQiLCJlZGl0cyIsImFkZGVkTm9kZXMiLCJyZW1vdmVkTm9kZXMiLCJzaG91bGRBbm5vdW5jZSIsImFyaWFFeHBhbmRlZCIsImlucHV0TW9kZSIsIm5leHRGb2N1cyIsImlzUmVtb3ZlIiwiaWR4Iiwic2VsZWN0IiwicmVtb3ZlIiwiaXRlbTIiLCJvcHRpb24iLCJsYWJlbDIiLCJhcmlhIiwib3B0IiwiaXRlbSIsInN5bmNDbGVhcldpdGhJbnB1dCIsInN5bmNPcHRpb25zV2l0aEl0ZW1zIiwiX3NwZWFrIiwidmFsdWVzIiwiZGlzcGF0Y2hNYXRjaCIsImNoYW5nZSIsImNyZWF0YWJsZSIsInF1ZXJ5IiwibWF0Y2giLCJvIiwiZGlzcGF0Y2hDaGFuZ2UiLCJyZW1vdmFibGUiLCJhZGQiLCJpIiwib25CbHVycmVkIiwieCIsInkiLCJjbGVhciIsInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCIsInJlcGVhdCIsImlzQ29udHJvbCIsImluVGV4dCIsImluZGV4IiwiZm9ybSIsIlNBRkVfTEFCRUxMRURCWSIsIkRJU1BMQVlfQkxPQ0siLCJhdHRhY2hTdHlsZSIsImNzcyIsIlVIVE1MVGFic1N0eWxlIiwiVUhUTUxUYWJMaXN0U3R5bGUiLCJVSFRNTFRhYlBhbmVsU3R5bGUiLCJVSFRNTFRhYlN0eWxlIiwiQVJJQV9DT05UUk9MUyIsIkFSSUFfU0VMRUNURUQiLCJVSFRNTFRhYnNFbGVtZW50IiwicXVlcnlXaXRob3V0TmVzdGVkIiwiZ2V0U2VsZWN0ZWRJbmRleCIsInNldFNlbGVjdGVkIiwiVUhUTUxUYWJMaXN0RWxlbWVudCIsInRhYiIsInRhYnMiLCJTS0lQX0FUVFJfQ0hBTkdFIiwiVUhUTUxUYWJFbGVtZW50IiwicGFuZWxzIiwibmV4dFBhbmVsIiwiZ2V0UGFuZWwiLCJwYW5lbCIsInRhYmxpc3QiLCJ0YWJMaXN0IiwiVUhUTUxUYWJQYW5lbEVsZW1lbnQiLCJoaWRkZW4iLCJpc0ZvY3VzYWJsZSIsIm1pbiIsIm1heCIsInJvdW5kIiwiZmxvb3IiLCJjcmVhdGVDb29yZHMiLCJ2Iiwib3Bwb3NpdGVTaWRlTWFwIiwib3Bwb3NpdGVBbGlnbm1lbnRNYXAiLCJjbGFtcCIsInN0YXJ0IiwiZW5kIiwiZXZhbHVhdGUiLCJwYXJhbSIsImdldFNpZGUiLCJwbGFjZW1lbnQiLCJnZXRBbGlnbm1lbnQiLCJnZXRPcHBvc2l0ZUF4aXMiLCJheGlzIiwiZ2V0QXhpc0xlbmd0aCIsInlBeGlzU2lkZXMiLCJnZXRTaWRlQXhpcyIsImdldEFsaWdubWVudEF4aXMiLCJnZXRBbGlnbm1lbnRTaWRlcyIsInJlY3RzIiwicnRsIiwiYWxpZ25tZW50IiwiYWxpZ25tZW50QXhpcyIsImxlbmd0aCIsIm1haW5BbGlnbm1lbnRTaWRlIiwiZ2V0T3Bwb3NpdGVQbGFjZW1lbnQiLCJnZXRFeHBhbmRlZFBsYWNlbWVudHMiLCJvcHBvc2l0ZVBsYWNlbWVudCIsImdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50IiwibHJQbGFjZW1lbnQiLCJybFBsYWNlbWVudCIsInRiUGxhY2VtZW50IiwiYnRQbGFjZW1lbnQiLCJnZXRTaWRlTGlzdCIsInNpZGUiLCJpc1N0YXJ0IiwiZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cyIsImZsaXBBbGlnbm1lbnQiLCJkaXJlY3Rpb24iLCJleHBhbmRQYWRkaW5nT2JqZWN0IiwicGFkZGluZyIsImdldFBhZGRpbmdPYmplY3QiLCJyZWN0VG9DbGllbnRSZWN0IiwicmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwiY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQiLCJfcmVmIiwicmVmZXJlbmNlIiwiZmxvYXRpbmciLCJzaWRlQXhpcyIsImFsaWduTGVuZ3RoIiwiaXNWZXJ0aWNhbCIsImNvbW1vblgiLCJjb21tb25ZIiwiY29tbW9uQWxpZ24iLCJjb29yZHMiLCJjb21wdXRlUG9zaXRpb24iLCJjb25maWciLCJzdHJhdGVneSIsIm1pZGRsZXdhcmUiLCJwbGF0Zm9ybSIsInZhbGlkTWlkZGxld2FyZSIsInN0YXRlZnVsUGxhY2VtZW50IiwibWlkZGxld2FyZURhdGEiLCJyZXNldENvdW50IiwiZm4iLCJuZXh0WCIsIm5leHRZIiwicmVzZXQiLCJkZXRlY3RPdmVyZmxvdyIsInN0YXRlIiwiX2F3YWl0JHBsYXRmb3JtJGlzRWxlIiwiZWxlbWVudHMiLCJib3VuZGFyeSIsInJvb3RCb3VuZGFyeSIsImVsZW1lbnRDb250ZXh0IiwiYWx0Qm91bmRhcnkiLCJwYWRkaW5nT2JqZWN0IiwiY2xpcHBpbmdDbGllbnRSZWN0Iiwib2Zmc2V0UGFyZW50Iiwib2Zmc2V0U2NhbGUiLCJlbGVtZW50Q2xpZW50UmVjdCIsImZsaXAiLCJfbWlkZGxld2FyZURhdGEkYXJyb3ciLCJfbWlkZGxld2FyZURhdGEkZmxpcCIsImluaXRpYWxQbGFjZW1lbnQiLCJjaGVja01haW5BeGlzIiwiY2hlY2tDcm9zc0F4aXMiLCJzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMiLCJmYWxsYmFja1N0cmF0ZWd5IiwiZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiIsImRldGVjdE92ZXJmbG93T3B0aW9ucyIsImluaXRpYWxTaWRlQXhpcyIsImlzQmFzZVBsYWNlbWVudCIsImZhbGxiYWNrUGxhY2VtZW50cyIsImhhc0ZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24iLCJwbGFjZW1lbnRzIiwib3ZlcmZsb3ciLCJvdmVyZmxvd3MiLCJvdmVyZmxvd3NEYXRhIiwic2lkZXMiLCJfbWlkZGxld2FyZURhdGEkZmxpcDIiLCJfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIiLCJuZXh0SW5kZXgiLCJuZXh0UGxhY2VtZW50IiwiZCIsInJlc2V0UGxhY2VtZW50IiwiX292ZXJmbG93c0RhdGEkZmlsdGVyMiIsImN1cnJlbnRTaWRlQXhpcyIsInNoaWZ0IiwibGltaXRlciIsImNyb3NzQXhpcyIsIm1haW5BeGlzIiwibWFpbkF4aXNDb29yZCIsImNyb3NzQXhpc0Nvb3JkIiwibWluU2lkZSIsIm1heFNpZGUiLCJsaW1pdGVkQ29vcmRzIiwic2l6ZSIsIl9zdGF0ZSRtaWRkbGV3YXJlRGF0YSIsIl9zdGF0ZSRtaWRkbGV3YXJlRGF0YTIiLCJhcHBseSIsImlzWUF4aXMiLCJoZWlnaHRTaWRlIiwid2lkdGhTaWRlIiwibWF4aW11bUNsaXBwaW5nSGVpZ2h0IiwibWF4aW11bUNsaXBwaW5nV2lkdGgiLCJvdmVyZmxvd0F2YWlsYWJsZUhlaWdodCIsIm92ZXJmbG93QXZhaWxhYmxlV2lkdGgiLCJub1NoaWZ0IiwiYXZhaWxhYmxlSGVpZ2h0IiwiYXZhaWxhYmxlV2lkdGgiLCJ4TWluIiwieE1heCIsInlNaW4iLCJ5TWF4IiwibmV4dERpbWVuc2lvbnMiLCJoYXNXaW5kb3ciLCJnZXROb2RlTmFtZSIsImlzTm9kZSIsImdldFdpbmRvdyIsIl9ub2RlJG93bmVyRG9jdW1lbnQiLCJnZXREb2N1bWVudEVsZW1lbnQiLCJpc0VsZW1lbnQiLCJpc0hUTUxFbGVtZW50IiwiaXNTaGFkb3dSb290IiwiaW52YWxpZE92ZXJmbG93RGlzcGxheVZhbHVlcyIsImlzT3ZlcmZsb3dFbGVtZW50Iiwib3ZlcmZsb3dYIiwib3ZlcmZsb3dZIiwiZGlzcGxheSIsImdldENvbXB1dGVkU3R5bGUiLCJ0YWJsZUVsZW1lbnRzIiwiaXNUYWJsZUVsZW1lbnQiLCJ0b3BMYXllclNlbGVjdG9ycyIsImlzVG9wTGF5ZXIiLCJzZWxlY3RvciIsInRyYW5zZm9ybVByb3BlcnRpZXMiLCJ3aWxsQ2hhbmdlVmFsdWVzIiwiY29udGFpblZhbHVlcyIsImlzQ29udGFpbmluZ0Jsb2NrIiwiZWxlbWVudE9yQ3NzIiwid2Via2l0IiwiaXNXZWJLaXQiLCJnZXRDb250YWluaW5nQmxvY2siLCJjdXJyZW50Tm9kZSIsImdldFBhcmVudE5vZGUiLCJpc0xhc3RUcmF2ZXJzYWJsZU5vZGUiLCJsYXN0VHJhdmVyc2FibGVOb2RlTmFtZXMiLCJnZXROb2RlU2Nyb2xsIiwicmVzdWx0IiwiZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3IiLCJwYXJlbnROb2RlIiwiZ2V0T3ZlcmZsb3dBbmNlc3RvcnMiLCJ0cmF2ZXJzZUlmcmFtZXMiLCJfbm9kZSRvd25lckRvY3VtZW50MiIsInNjcm9sbGFibGVBbmNlc3RvciIsImlzQm9keSIsIndpbiIsImZyYW1lRWxlbWVudCIsImdldEZyYW1lRWxlbWVudCIsImdldENzc0RpbWVuc2lvbnMiLCJnZXRDb21wdXRlZFN0eWxlJDEiLCJoYXNPZmZzZXQiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsInNob3VsZEZhbGxiYWNrIiwidW53cmFwRWxlbWVudCIsImdldFNjYWxlIiwiZG9tRWxlbWVudCIsIiQiLCJub09mZnNldHMiLCJnZXRWaXN1YWxPZmZzZXRzIiwic2hvdWxkQWRkVmlzdWFsT2Zmc2V0cyIsImlzRml4ZWQiLCJmbG9hdGluZ09mZnNldFBhcmVudCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImluY2x1ZGVTY2FsZSIsImlzRml4ZWRTdHJhdGVneSIsImNsaWVudFJlY3QiLCJzY2FsZSIsInZpc3VhbE9mZnNldHMiLCJvZmZzZXRXaW4iLCJjdXJyZW50V2luIiwiY3VycmVudElGcmFtZSIsImlmcmFtZVNjYWxlIiwiaWZyYW1lUmVjdCIsImdldFdpbmRvd1Njcm9sbEJhclgiLCJsZWZ0U2Nyb2xsIiwiZ2V0SFRNTE9mZnNldCIsImRvY3VtZW50RWxlbWVudCIsInNjcm9sbCIsImh0bWxSZWN0IiwiY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QiLCJ0b3BMYXllciIsIm9mZnNldHMiLCJpc09mZnNldFBhcmVudEFuRWxlbWVudCIsIm9mZnNldFJlY3QiLCJodG1sT2Zmc2V0IiwiZ2V0Q2xpZW50UmVjdHMiLCJnZXREb2N1bWVudFJlY3QiLCJodG1sIiwiYm9keSIsIlNDUk9MTEJBUl9NQVgiLCJnZXRWaWV3cG9ydFJlY3QiLCJ2aXN1YWxWaWV3cG9ydCIsInZpc3VhbFZpZXdwb3J0QmFzZWQiLCJ3aW5kb3dTY3JvbGxiYXJYIiwiZG9jIiwiYm9keVN0eWxlcyIsImJvZHlNYXJnaW5JbmxpbmUiLCJjbGlwcGluZ1N0YWJsZVNjcm9sbGJhcldpZHRoIiwiYWJzb2x1dGVPckZpeGVkIiwiZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QiLCJnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IiLCJjbGlwcGluZ0FuY2VzdG9yIiwiaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yIiwic3RvcE5vZGUiLCJnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMiLCJjYWNoZSIsImNhY2hlZFJlc3VsdCIsImN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlIiwiZWxlbWVudElzRml4ZWQiLCJjb21wdXRlZFN0eWxlIiwiY3VycmVudE5vZGVJc0NvbnRhaW5pbmciLCJhbmNlc3RvciIsImdldENsaXBwaW5nUmVjdCIsImNsaXBwaW5nQW5jZXN0b3JzIiwiZmlyc3RDbGlwcGluZ0FuY2VzdG9yIiwiY2xpcHBpbmdSZWN0IiwiYWNjUmVjdCIsImdldERpbWVuc2lvbnMiLCJnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudCIsInNldExlZnRSVExTY3JvbGxiYXJPZmZzZXQiLCJpc1N0YXRpY1Bvc2l0aW9uZWQiLCJnZXRUcnVlT2Zmc2V0UGFyZW50IiwicG9seWZpbGwiLCJyYXdPZmZzZXRQYXJlbnQiLCJnZXRPZmZzZXRQYXJlbnQiLCJzdmdPZmZzZXRQYXJlbnQiLCJnZXRFbGVtZW50UmVjdHMiLCJnZXRPZmZzZXRQYXJlbnRGbiIsImdldERpbWVuc2lvbnNGbiIsImZsb2F0aW5nRGltZW5zaW9ucyIsImlzUlRMIiwicmVjdHNBcmVFcXVhbCIsIm9ic2VydmVNb3ZlIiwib25Nb3ZlIiwiaW8iLCJ0aW1lb3V0SWQiLCJjbGVhbnVwIiwiX2lvIiwicmVmcmVzaCIsInNraXAiLCJ0aHJlc2hvbGQiLCJlbGVtZW50UmVjdEZvclJvb3RNYXJnaW4iLCJpbnNldFRvcCIsImluc2V0UmlnaHQiLCJpbnNldEJvdHRvbSIsImluc2V0TGVmdCIsImlzRmlyc3RVcGRhdGUiLCJoYW5kbGVPYnNlcnZlIiwiZW50cmllcyIsInJhdGlvIiwiYXV0b1VwZGF0ZSIsInVwZGF0ZSIsImFuY2VzdG9yU2Nyb2xsIiwiYW5jZXN0b3JSZXNpemUiLCJlbGVtZW50UmVzaXplIiwibGF5b3V0U2hpZnQiLCJhbmltYXRpb25GcmFtZSIsInJlZmVyZW5jZUVsIiwiYW5jZXN0b3JzIiwiY2xlYW51cElvIiwicmVvYnNlcnZlRnJhbWUiLCJyZXNpemVPYnNlcnZlciIsImZpcnN0RW50cnkiLCJfcmVzaXplT2JzZXJ2ZXIiLCJmcmFtZUlkIiwicHJldlJlZlJlY3QiLCJmcmFtZUxvb3AiLCJuZXh0UmVmUmVjdCIsIl9yZXNpemVPYnNlcnZlcjIiLCJzaGlmdCQxIiwiZmxpcCQxIiwic2l6ZSQxIiwibWVyZ2VkT3B0aW9ucyIsInBsYXRmb3JtV2l0aENhY2hlIiwiY29tcHV0ZVBvc2l0aW9uJDEiLCJRVUlDS19FVkVOVCIsImRlYm91bmNlIiwiY2FsbGJhY2siLCJkZWxheSIsInRpbWVyIiwiYXJncyIsIlVVSUQiLCJVTkJJTkQiLCJvbkxvYWRlZCIsInJ1biIsInVuYmluZCIsIkFOQ0hPUkVEIiwiYW5jaG9yUG9zaXRpb24iLCJhbmNob3IiLCJjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyIiwicXVldWUiLCJvbkZyYW1lIiwib25UaW1lciIsIk1VVEFUT1JTIiwib25NdXRhdGlvbiIsImNsYXNzTmFtZSIsImVsZW1zIiwibXV0YXRvciIsImlzSW5wdXRMaWtlIiwiQ1NTX0JSRUFEQ1JVTUJTIiwic3R5bGVzIiwiQ1NTX0NISVAiLCJDU1NfSEVMUFRFWFQiLCJDU1NfUEFHSU5BVElPTiIsIkNMSUNLUyIsIk1BVE9NTyIsIkJBTk5FUiIsIkJBTk5FUl9VUkwiLCJhbmFseXRpY3MiLCJjb25zZW50IiwiZW5hYmxlZCIsIm1hdG9tb0lkIiwibWF0b21vVGFnTWFuYWdlcklkIiwicmVuZGVyQmFubmVyIiwic3JjIiwidXJsIiwidGl0bGUiLCJjYXRlZ29yeSIsInJlc3VsdHMiLCJiYW5uZXIiLCJvbkNsb3NlIiwiaGFuZGxlVHJhY2siLCJwcm9jZXNzVHJhY2siLCJoZWFkaW5nIiwiZ3JvdXAiLCJwb3BvdmVyIiwib3BlbiIsInN0eWxlIiwiaGVhZCIsInNoZWV0IiwiZm9yY2UiLCJDU1NfQVBQIiwiQ1NTX1NUSUNLWSIsIkNTU19UT0dHTEUiLCJDU1NfU0lERUJBUiIsInVzZVRyYW5zaXRpb24iLCJ0b2dnbGVBcHBFeHBhbmRlZCIsImhhbmRsZUFwcFRvZ2dsZUNsaWNrIiwic3RvcCIsImxpbmsiLCJjbG9zZVNpZGViYXIiLCJzaWRlYmFyIiwiTUlOX1kiLCJTQ1JPTExfVVAiLCJTVElDSyIsIlNUSUNLX0VMIiwiU1RJQ0tfSCIsIlNUSUNLX1kiLCJTVFVDSyIsIldJTl9IIiwiV0lOX1kiLCJoYW5kbGVNdXRhdGlvbiIsInN0aWNreSIsImhhbmRsZUFwcFNjcm9sbCIsIk5FWFRfWSIsIk5FWFRfVVAiLCJnZXRTdGVwcyIsIm5vdyIsInNob3ciLCJvZmZzZXQiLCJwYWdlcyIsInBhZ2luYXRpb24iLCJjdXJyZW50IiwidG90YWwiLCJwYWdlIiwiaGFuZGxlQnJlYWRjcnVtYnNNdXRhdGlvbiIsImJyZWFkY3J1bWJzIiwiYnJlYWRjdW1icyIsImNydW1iIiwiQ1NTX0RJQUxPRyIsIkRJQUxPR1MiLCJoYW5kbGVNb2RhbCIsImRpYWxvZyIsImhhbmRsZURpYWxvZ0NsaWNrIiwiaGFuZGxlRXJyb3N1bW1hcnlJbmplY3QiLCJmaXJzdCIsIkRJU0FCTEVEIiwiU0VMRUNURUQiLCJVSFRNTE9wdGlvbkVsZW1lbnQiLCJVSFRNTERhdGFMaXN0U3R5bGUiLCJMSVZFX1RJTUVSIiwiSU5QVVRfREVCT1VOQ0UiLCJFVkVOVFNfSU5QVVQiLCJVSFRNTERhdGFMaXN0RWxlbWVudCIsImRpc2Nvbm5lY3RJbnB1dCIsIl9wcmV2Iiwic2V0dXBJbnB1dCIsInNldEV4cGFuZGVkIiwiX2MiLCJpc1BvcG92ZXIiLCJpc0lucHV0IiwicmVsYXRlZFRhcmdldCIsImFsdEtleSIsImN0cmxLZXkiLCJzaGlmdEtleSIsIm1ldGFLZXkiLCJpc0VzY2FwZSIsIl9yb290IiwiX2lucHV0IiwiZmlsdGVyIiwidmlzaWJsZSIsIkNTU19GSUVMRCIsIkNTU19WQUxJREFUSU9OUyIsIkNTU19WQUxJREFUSU9OIiwiZ2V0VGV4dCIsImhhbmRsZUZpZWxkTXV0YXRpb24iLCJmaWVsZHMiLCJ2YWxpZGF0ZSIsImZpZWxkIiwibGFiZWxzIiwiZGVzY3MiLCJ2YWxpZHMiLCJjb21ib2JveCIsInZhbGlkIiwiZGVzYyIsInJlbmRlckNvbWJvYm94IiwicmVuZGVyQ291bnRlciIsInJlbmRlclRleHRhcmVhU2l6ZSIsInRleHRhcmVhIiwibGltaXQiLCJyZW1haW5kZXIiLCJuZXh0SW52YWxpZCIsInByZXZJbnZhbGlkIiwib3ZlciIsInVuZGVyIiwiaGFuZGxlRmllbGRUb2dnbGUiLCJoYW5kbGVGaWVsZElucHV0IiwiaGFuZGxlRmllbGRWYWxkaWF0aW9uIiwiQ1NTX0ZJRUxEU0VUIiwiQVJJQV9ERVNDIiwiQVJJQV9JTlZBTElEIiwiaGFuZGxlRmllbGRzZXRNdXRhdGlvbiIsImZpZWxkc2V0cyIsImZpZWxkc2V0IiwiaW5wdXRzIiwidmFsaWRJZCIsIkNTU19MT0dPIiwiaGFuZGxlTG9nb011dGF0aW9uIiwibG9nbyIsImljb24iLCJzdmciLCJpc0RvdCIsImJhY2siLCJDU1NfUE9QT1ZFUiIsIk9QRU5fUE9QT1ZFUlMiLCJoYW5kbGVQb3BvdmVyVG9nZ2xlIiwibmV3U3RhdGUiLCJpc0Nsb3NpbmciLCJpc0NvbnRhaW4iLCJoYW5kbGVQb3BvdmVyTGlua0NsaWNrIiwiY2xvc2UiLCJDU1NfVEFCTEUiLCJoYW5kbGVUYWJsZU11dGF0aW9uIiwidGFibGVzIiwidGFibGUiLCJ0aHMiLCJ0aCIsInRib2R5Iiwicm93IiwiY2VsbCIsIkNTU19UT0dHTEVHUk9VUCIsImhhbmRsZVRvZ2dsZWdyb3VwS2V5ZG93biIsIm1vdmUiLCJERVNDUklCRURCWSIsIkVTQyIsIkxBQkVMTEVEQlkiLCJQT1NJVElPTl9DU1NfUFJPUEVSVFkiLCJUSFJPVFRMRV9ERUxBWSIsIlRPT0xUSVAiLCJBTkNIT1IiLCJMQVNUX0NBTEwiLCJUSFJPVFRMRSIsImhhbmRsZVRvb2x0aXBNb3ZlIiwid2FpdCIsImhhbmRsZVRvb2x0aXBNb3ZlVGhyb3R0bGVkIiwiY29udGVudCIsInBvc2l0aW9uIiwiaGFkTGFiZWwiLCJoYXNMYWJlbCIsIlVIVE1MRGV0YWlsc1N0eWxlIiwiVUhUTUxEZXRhaWxzRWxlbWVudCIsImhpZGUiLCJ1RGV0YWlsc0xpc3QiLCJ1RGV0YWlscyIsInN1bW1hcnkiLCJpc1N1bW1hcnkiLCJVSFRNTFN1bW1hcnlFbGVtZW50IiwiVUhUTUxQcm9ncmVzc1N0eWxlIiwiVUhUTUxQcm9ncmVzc0VsZW1lbnQiLCJyb2xlSW1hZ2UiLCJwZXJjZW50YWdlIiwiZ2V0TnVtYmVyIiwic2V0TnVtYmVyIiwiaXNOdW1lcmljIl0sIm1hcHBpbmdzIjoia0NBQUEsSUFBSUEsR0FBWSxPQUFPLGVBQ25CQyxHQUFzQixPQUFPLHNCQUM3QkMsR0FBZSxPQUFPLFVBQVUsZUFDaENDLEdBQWUsT0FBTyxVQUFVLHFCQUNoQ0MsR0FBa0IsQ0FBQ0MsRUFBS0MsRUFBS0MsSUFBVUQsS0FBT0QsRUFBTUwsR0FBVUssRUFBS0MsRUFBSyxDQUFFLFdBQVksR0FBTSxhQUFjLEdBQU0sU0FBVSxHQUFNLE1BQUFDLENBQUssQ0FBRSxFQUFJRixFQUFJQyxDQUFHLEVBQUlDLEVBQ3RKQyxHQUFpQixDQUFDQyxFQUFHQyxJQUFNLENBQzdCLFFBQVNDLEtBQVFELElBQU1BLEVBQUksQ0FBQSxHQUNyQlIsR0FBYSxLQUFLUSxFQUFHQyxDQUFJLEdBQzNCUCxHQUFnQkssRUFBR0UsRUFBTUQsRUFBRUMsQ0FBSSxDQUFDLEVBQ3BDLEdBQUlW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QUFVLENBQUMsT0FBTyxNQUFNLE9BQU8sV0FBVyxHQUFHQSxDQUFLLEVBQUUsQ0FBQyxHQUFLLE9BQU8sU0FBUyxPQUFPQSxDQUFLLENBQUMsRUFDcEdvckIsR0FBWSxDQUFDdnFCLEVBQUlkLElBQVEsQ0FDM0IsTUFBTUMsRUFBUVksRUFBS0MsRUFBSWQsQ0FBRyxFQUMxQixPQUFPdXJCLEdBQVV0ckIsQ0FBSyxFQUFJLEtBQUssSUFBSSxFQUFHLE9BQU8sV0FBV0EsQ0FBSyxDQUFDLEVBQUksSUFDcEUsRUFDSXFyQixHQUFZLENBQUN4cUIsRUFBSWQsRUFBS3lDLElBQVEsQ0FDaEMsR0FBSUEsSUFBUSxNQUFROG9CLEdBQVU5b0IsQ0FBRyxFQUFHNUIsRUFBS0MsRUFBSWQsRUFBSyxHQUFHeUMsQ0FBRyxFQUFFLE1BQ3JELE9BQU0sSUFBSSxNQUFNLDhCQUE4QjVCLENBQUksT0FBTzRCLENBQUcsR0FBRyxDQUN0RSxFQUNBLE9BQUFDLEdBQWUsT0FBTyxhQUFjd29CLEVBQW9CIiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDMsNCw1LDE0LDIyLDIzXX0=
|
|
32
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtY29tYm9ib3gvZGlzdC91LWNvbWJvYm94LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5tanMiLCIuLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2NvcmUvZGlzdC9mbG9hdGluZy11aS5jb3JlLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5kb20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS9kb20vZGlzdC9mbG9hdGluZy11aS5kb20ubWpzIiwiLi4vZGVzaWduc3lzdGVtL3V0aWxzLnRzIiwiLi4vZGVzaWduc3lzdGVtL2FuYWx5dGljcy9hbmFseXRpY3MudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC10b2dnbGUuanMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9wYWdpbmF0aW9uL3BhZ2luYXRpb24taGVscGVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWJzLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2RpYWxvZy9kaWFsb2ctb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZXJyb3JzdW1tYXJ5L2Vycm9yc3VtbWFyeS1vYnNlcnZlci50cyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWRhdGFsaXN0L2Rpc3QvdS1kYXRhbGlzdC5qcyIsIi4uL2Rlc2lnbnN5c3RlbS9maWVsZC9maWVsZC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9maWVsZHNldC9maWVsZHNldC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9sb2dvL2xvZ28tb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vcG9wb3Zlci9wb3BvdmVyLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RhYmxlL3RhYmxlLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RvZ2dsZWdyb3VwL3RvZ2dsZWdyb3VwLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3Rvb2x0aXAvdG9vbHRpcC1vYnNlcnZlci50cyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWRldGFpbHMvZGlzdC91LWRldGFpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1wcm9ncmVzcy9kaXN0L3UtcHJvZ3Jlc3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuXG4vLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0ZJUkVGT1ggPSBJU19CUk9XU0VSICYmIC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBGT0NVU19PVVRMSU5FID0gXCJvdXRsaW5lOiAxcHggZG90dGVkOyBvdXRsaW5lOiA1cHggYXV0byBIaWdobGlnaHQ7IG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvclwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChfZXJyKSB7XG4gIH1cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgKGRldGFpbCkgPT4gZWxlbWVudC5oYW5kbGVFdmVudCh7IHR5cGU6IFwibXV0YXRpb25cIiwgZGV0YWlsIH0pXG4gICAgKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIG9ic2VydmVycy5zZXQoZWxlbWVudCwgb2JzZXJ2ZXIpO1xuICB9XG59O1xudmFyIGFzQnV0dG9uID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGlzQ2xpY2sgPSBcImtleVwiIGluIGV2ZW50ICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKTtcbiAgaWYgKGlzQ2xpY2spIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGlmIChpc0NsaWNrICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBldmVudC50YXJnZXQuY2xpY2soKTtcbiAgcmV0dXJuIGlzQ2xpY2s7XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dDIsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQyKSBlbC50ZXh0Q29udGVudCA9IHRleHQyO1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZ2V0TGFiZWwgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgbGFiZWwgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikgfHwgXCJcIjtcbiAgY29uc3QgbGFiZWxzID0gKChfYTIgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxsZWRieVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkuc3BsaXQoL1xccysvKSkgfHwgW107XG4gIHJldHVybiBbXG4gICAgLi4ubGFiZWxzLm1hcCgoaWQyKSA9PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZDIpKSxcbiAgICAvLyBHZXQgYWxsIGxhYmVsbGVkYnkgZWxlbWVudHNcbiAgICAuLi5BcnJheS5mcm9tKGVsLmxhYmVscyB8fCBbXSlcbiAgICAvLyBHZXQgYWxsIDxsYWJlbD4gZWxlbWVudHNcbiAgXS5yZWR1Y2UoKGFjYywgZWwyKSA9PiB7XG4gICAgdmFyIF9hMztcbiAgICByZXR1cm4gYWNjIHx8ICgoX2EzID0gZWwyID09IG51bGwgPyB2b2lkIDAgOiBlbDIuaW5uZXJUZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnRyaW0oKSkgfHwgXCJcIjtcbiAgfSwgbGFiZWwpO1xufTtcbnZhciBMSVZFO1xudmFyIExJVkVfU1JfRklYID0gMDtcbnZhciBzcGVhayA9ICh0ZXh0MikgPT4ge1xuICBpZiAoIUxJVkUpIHtcbiAgICBMSVZFID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBMSVZFLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gICAgYXR0cihMSVZFLCBcImFyaWEtbGl2ZVwiLCBcImFzc2VydGl2ZVwiKTtcbiAgfVxuICBpZiAoIUxJVkUuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKExJVkUpO1xuICBpZiAodGV4dDIpIExJVkUudGV4dENvbnRlbnQgPSBgJHt0ZXh0Mn0ke0xJVkVfU1JfRklYKysgJSAyID8gXCJcXHhBMFwiIDogXCJcIn1gO1xufTtcbnZhciBzZXRWYWx1ZSA9IChpbnB1dCwgZGF0YSwgdHlwZSA9IFwiXCIpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSwgZGF0YSwgaW5wdXRUeXBlOiB0eXBlIH07XG4gIGNvbnN0IHByb3RvID0gSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGU7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJiZWZvcmVpbnB1dFwiLCBldmVudCkpO1xuICAoX2IgPSAoX2EyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgXCJ2YWx1ZVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5zZXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKGlucHV0LCBkYXRhKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImlucHV0XCIsIGV2ZW50KSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2hhbmdlXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG59O1xudmFyIElTX1BSRVNTID0gZmFsc2U7XG52YXIgaXNNb3VzZURvd24gPSAoZXZlbnQpID0+IHtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2V1cFwiKSBJU19QUkVTUyA9IGZhbHNlO1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZWRvd25cIikge1xuICAgIElTX1BSRVNTID0gdHJ1ZTtcbiAgICBvbihkb2N1bWVudCwgXCJtb3VzZXVwXCIsIGlzTW91c2VEb3duLCB7IG9uY2U6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIElTX1BSRVNTO1xufTtcbnZhciBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QgPSAoc3R5bGUsIHNsb3QgPSBcIjxzbG90Pjwvc2xvdD5cIikgPT4gYDx0ZW1wbGF0ZSBzaGFkb3dyb290bW9kZT1cIm9wZW5cIj4ke3Nsb3R9PHN0eWxlPiR7c3R5bGV9PC9zdHlsZT48L3RlbXBsYXRlPmA7XG5cbi8vIHUtY29tYm9ib3gudHNcbnZhciBVSFRNTENvbWJvYm94U3R5bGUgPSBgOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2s7IC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKSB9IC8qIE11c3QgYmUgZGlzcGxheSBibG9jayBpbiBTYWZhcmkgdG8gYWxsb3cgZm9jdXMgaW5zaWRlICovXG46aG9zdCg6bm90KFtkYXRhLW11bHRpcGxlXSkpIDo6c2xvdHRlZChkYXRhKSxcbjpob3N0KFtkYXRhLW11bHRpcGxlPVwiZmFsc2VcIl0pIDo6c2xvdHRlZChkYXRhKSB7IGRpc3BsYXk6IG5vbmUgfSAvKiBIaWRlIGRhdGEgaWYgbm90IG11bHRpcGxlICovXG46OnNsb3R0ZWQoaW5wdXRbaW5wdXRtb2RlPVwibm9uZVwiXSkgeyBvdXRsaW5lOiBub25lIH0gLyogSGlkZSB0ZW1wb3JhcnkgZm91Y3Mgb3V0bGluZSBmbGFzaCAqL1xuOjpzbG90dGVkKGRlbCkgeyB0ZXh0LWRlY29yYXRpb246IG5vbmUgfVxuOjpzbG90dGVkKGRhdGE6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBvaW50ZXItZXZlbnRzOiBub25lIH1cbjo6c2xvdHRlZChkYXRhKTo6YWZ0ZXIgeyBjb250ZW50OiAnXFxcXDAwRDcnOyBjb250ZW50OiAnXFxcXDAwRDcnIC8gJyc7IHBhZGRpbmctaW5saW5lOiAuNWNoOyBwb2ludGVyLWV2ZW50czogYXV0bzsgY3Vyc29yOiBwb2ludGVyIH1cbjo6c2xvdHRlZChkYXRhOmZvY3VzKSB7ICR7Rk9DVVNfT1VUTElORX0gfWA7XG52YXIgVUhUTUxDb21ib2JveFNoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoVUhUTUxDb21ib2JveFN0eWxlKTtcbnZhciBFVkVOVFMgPSBcImJlZm9yZWlucHV0LGJsdXIsZm9jdXMsY2xpY2ssaW5wdXQsa2V5ZG93bixtb3VzZWRvd25cIjtcbnZhciBFVkVOVF9PTkNFID0geyBvbmNlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH07XG52YXIgSVNfRklSRUZPWF9ERVNLVE9QID0gSVNfRklSRUZPWCAmJiAhSVNfQU5EUk9JRDtcbnZhciBJU19NT0JJTEUgPSBJU19BTkRST0lEIHx8IElTX0lPUztcbnZhciBNT0RJRklFRCA9IFwiXFx1MjAwQlwiLnJlcGVhdCg1KTtcbnZhciBGQUxTRSA9IFwiZmFsc2VcIjtcbnZhciBURVhUUyA9IHtcbiAgYWRkZWQ6IFwiQWRkZWRcIixcbiAgZW1wdHk6IFwiTm8gc2VsZWN0ZWRcIixcbiAgZm91bmQ6IFwiTmF2aWdhdGUgbGVmdCB0byBmaW5kICVkIHNlbGVjdGVkXCIsXG4gIGludmFsaWQ6IFwiSW52YWxpZCB2YWx1ZVwiLFxuICBvZjogXCJvZlwiLFxuICByZW1vdmU6IFwiUHJlc3MgdG8gcmVtb3ZlXCIsXG4gIHJlbW92ZWQ6IFwiUmVtb3ZlZFwiXG59O1xudmFyIFVIVE1MQ29tYm9ib3hFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2l0ZW0gPSBcIlwiO1xuICAgIHRoaXMuX3NwZWFrID0gXCJcIjtcbiAgICB0aGlzLl90ZXh0cyA9IF9fc3ByZWFkVmFsdWVzKHt9LCBURVhUUyk7XG4gICAgdGhpcy5fdmFsdWUgPSBcIlwiO1xuICAgIGlmICghdGhpcy5zaGFkb3dSb290KVxuICAgICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAgICAgICAvLyBDb250ZW50IHNsb3RcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIFVIVE1MQ29tYm9ib3hTdHlsZSlcbiAgICAgICk7XG4gIH1cbiAgLy8gTG9jYWxseSBzdG9yZSB2YWx1ZSB0byBzdG9yZSB2YWx1ZSBiZWZvcmUgaW5wdXQtY2xpY2tcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKFRFWFRTKS5tYXAoKGtleSkgPT4gYGRhdGEtc3ItJHtrZXl9YCk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5fcm9vdCA9IGdldFJvb3QodGhpcyk7XG4gICAgb24odGhpcywgRVZFTlRTLCB0aGlzLCB0cnVlKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1widmFsdWVcIiwgXCJpZFwiXSxcbiAgICAgIC8vIFJlc3BvbmQgdG8gY2hhbmdlcyBpbiA8ZGF0YT4gdmFsdWUgb3IgY2hhbmdlIG9mIGlkIGZvciA8ZGF0YWxpc3Q+IHRvIHJlY29ubmVjdCB3aXRoIGlucHV0XG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgIC8vIFJlc3BvbmQgdG8gY2hhbmdlcyBpbiA8ZGF0YT4gdGV4dENvbnRlbnRcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KHJlbmRlciwgMCwgdGhpcyk7XG4gICAgc2V0VGltZW91dChzeW5jSW5wdXRWYWx1ZSwgMCwgdGhpcyk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIF8sIHZhbCkge1xuICAgIGNvbnN0IHRleHQyID0gcHJvcC5zcGxpdChcImRhdGEtc3ItXCIpWzFdO1xuICAgIGlmIChURVhUU1t0ZXh0Ml0pIHRoaXMuX3RleHRzW3RleHQyXSA9IHZhbCB8fCBURVhUU1t0ZXh0Ml07XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gICAgb2ZmKHRoaXMsIEVWRU5UUywgdGhpcywgdHJ1ZSk7XG4gICAgdGhpcy5faXRlbXMgPSB0aGlzLl9jbGVhciA9IHRoaXMuX2ZvY3VzID0gdGhpcy5fY29udHJvbCA9IHZvaWQgMDtcbiAgICB0aGlzLl9saXN0ID0gdGhpcy5fb3B0aW9ucyA9IHRoaXMuX3Jvb3QgPSB2b2lkIDA7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJiZWZvcmVpbnB1dFwiKSB0aGlzLl92YWx1ZSA9ICh0YXJnZXQgPT0gbnVsbCA/IHZvaWQgMCA6IHRhcmdldC52YWx1ZSkgfHwgXCJcIjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJibHVyXCIpIG9uQmx1cih0aGlzKTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSBvbkNsaWNrKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJmb2N1c1wiKSBvbkZvY3VzKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJpbnB1dFwiKSBvbklucHV0KHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIG9uS2V5RG93bih0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwibW91c2Vkb3duXCIpIGlzTW91c2VEb3duKGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJtdXRhdGlvblwiKSByZW5kZXIodGhpcywgZXZlbnQpO1xuICB9XG4gIGdldCBtdWx0aXBsZSgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IGF0dHIodGhpcywgXCJkYXRhLW11bHRpcGxlXCIpKSAhPSBudWxsID8gX2EyIDogRkFMU0UpICE9PSBGQUxTRTtcbiAgfVxuICBzZXQgbXVsdGlwbGUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwiZGF0YS1tdWx0aXBsZVwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgY3JlYXRhYmxlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gYXR0cih0aGlzLCBcImRhdGEtY3JlYXRhYmxlXCIpKSAhPSBudWxsID8gX2EyIDogRkFMU0UpICE9PSBGQUxTRTtcbiAgfVxuICBzZXQgY3JlYXRhYmxlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImRhdGEtY3JlYXRhYmxlXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBjb250cm9sKCkge1xuICAgIHZhciBfYTI7XG4gICAgaWYgKCEoKF9hMiA9IHRoaXMuX2NvbnRyb2wpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKVxuICAgICAgdGhpcy5fY29udHJvbCA9IHRoaXMucXVlcnlTZWxlY3RvcihcImlucHV0XCIpO1xuICAgIHJldHVybiB0aGlzLl9jb250cm9sO1xuICB9XG4gIGdldCBsaXN0KCkge1xuICAgIHZhciBfYTI7XG4gICAgaWYgKCEoKF9hMiA9IHRoaXMuX2xpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKVxuICAgICAgdGhpcy5fbGlzdCA9IHRoaXMucXVlcnlTZWxlY3RvcihcInUtZGF0YWxpc3QsZGF0YWxpc3RcIik7XG4gICAgcmV0dXJuIHRoaXMuX2xpc3Q7XG4gIH1cbiAgZ2V0IGNsZWFyKCkge1xuICAgIHZhciBfYTI7XG4gICAgaWYgKCEoKF9hMiA9IHRoaXMuX2NsZWFyKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmlzQ29ubmVjdGVkKSkgdGhpcy5fY2xlYXIgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJkZWxcIik7XG4gICAgcmV0dXJuIHRoaXMuX2NsZWFyO1xuICB9XG4gIGdldCBpdGVtcygpIHtcbiAgICBpZiAoIXRoaXMuX2l0ZW1zKSB0aGlzLl9pdGVtcyA9IHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJkYXRhXCIpO1xuICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgfVxuICBnZXQgb3B0aW9ucygpIHtcbiAgICB2YXIgX2EyLCBfYjtcbiAgICBpZiAoIXRoaXMuX29wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHRhZyA9ICgoX2EyID0gdGhpcy5saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLm5vZGVOYW1lKSA9PT0gXCJVLURBVEFMSVNUXCIgPyBcInUtb3B0aW9uXCIgOiBcIm9wdGlvblwiO1xuICAgICAgdGhpcy5fb3B0aW9ucyA9IChfYiA9IHRoaXMubGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG4gIGdldCB2YWx1ZXMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLml0ZW1zXS5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpO1xuICB9XG59O1xudmFyIHRleHQgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgcmV0dXJuICgoX2EyID0gZWwgPT0gbnVsbCA/IHZvaWQgMCA6IGVsLnRleHRDb250ZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKSkgfHwgXCJcIjtcbn07XG52YXIgaXNEYXRhID0gKGVsKSA9PiBlbCBpbnN0YW5jZW9mIEhUTUxEYXRhRWxlbWVudDtcbnZhciBpc0Rpc2FibGVkID0gKHsgY29udHJvbCB9KSA9PiAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5kaXNhYmxlZCkgfHwgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wucmVhZE9ubHkpIHx8IGZhbHNlO1xudmFyIHJlbmRlciA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF9mb2N1cywgX3RleHRzLCBpdGVtcywgY29udHJvbCwgbGlzdCwgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGlmICghY29udHJvbCB8fCAhbGlzdCkgcmV0dXJuO1xuICBjb25zdCBwcmV2ID0gZ2V0TGFiZWwoY29udHJvbCk7XG4gIGNvbnN0IG5leHQgPSBwcmV2LmVuZHNXaXRoKE1PRElGSUVEKSA/IGF0dHIoY29udHJvbCwgXCJkYXRhLWxhYmVsXCIpIDogcHJldjtcbiAgYXR0cihjb250cm9sLCBcImRhdGEtbGFiZWxcIiwgbmV4dCk7XG4gIGxldCBsYWJlbCA9IGAke25leHR9JHttdWx0aXBsZSA/IGAsICR7aXRlbXMubGVuZ3RoID8gX3RleHRzLmZvdW5kLnJlcGxhY2UoXCIlZFwiLCBgJHtpdGVtcy5sZW5ndGh9YCkgOiBfdGV4dHMuZW1wdHl9YCA6IFwiXCJ9YDtcbiAgY29uc3QgZWRpdHMgPSBbXTtcbiAgZm9yIChjb25zdCB7IGFkZGVkTm9kZXMsIHJlbW92ZWROb2RlcyB9IG9mIChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQuZGV0YWlsKSB8fCBbXSkge1xuICAgIGZvciAoY29uc3QgZWwgb2YgYWRkZWROb2RlcykgaWYgKGlzRGF0YShlbCkpIGVkaXRzLnVuc2hpZnQoZWwpO1xuICAgIGZvciAoY29uc3QgZWwgb2YgcmVtb3ZlZE5vZGVzKSBpZiAoaXNEYXRhKGVsKSkgZWRpdHMucHVzaChlbCk7XG4gIH1cbiAgY29uc3Qgc2hvdWxkQW5ub3VuY2UgPSBtdWx0aXBsZSA/IGVkaXRzLmxlbmd0aCA9PT0gMSA6IGVkaXRzWzBdID09PSBfZm9jdXM7XG4gIGlmIChfZm9jdXMgJiYgc2hvdWxkQW5ub3VuY2UpIHtcbiAgICBjb25zdCBhcmlhRXhwYW5kZWQgPSBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiKTtcbiAgICBjb25zdCBpbnB1dE1vZGUgPSBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIpO1xuICAgIGNvbnN0IG5leHRGb2N1cyA9IGlzRGF0YShfZm9jdXMpID8gY29udHJvbCA6IF9mb2N1cztcbiAgICBjb25zdCBpc1JlbW92ZSA9ICFlZGl0c1swXS5pc0Nvbm5lY3RlZDtcbiAgICBzZWxmLl9zcGVhayA9IGAke190ZXh0c1tpc1JlbW92ZSA/IFwicmVtb3ZlZFwiIDogXCJhZGRlZFwiXX0gJHt0ZXh0KGVkaXRzWzBdKX0sIGA7XG4gICAgaWYgKElTX01PQklMRSB8fCBfZm9jdXMgPT09IGNvbnRyb2wpIHNwZWFrKHNlbGYuX3NwZWFrKTtcbiAgICBpZiAoY29udHJvbCAhPT0gbmV4dEZvY3VzKSB7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiLCBudWxsKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgXCJub25lXCIpO1xuICAgICAgbGFiZWwgPSBcIlxceEEwXCI7XG4gICAgICBjb250cm9sLmZvY3VzKCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIGF0dHIoY29udHJvbCwgXCJhcmlhLWV4cGFuZGVkXCIsIGFyaWFFeHBhbmRlZCk7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIsIGlzUmVtb3ZlID8gXCJub25lXCIgOiBpbnB1dE1vZGUpO1xuICAgICAgKF9hMyA9IG5leHRGb2N1cyA9PSBudWxsID8gdm9pZCAwIDogbmV4dEZvY3VzLmZvY3VzKSA9PSBudWxsID8gdm9pZCAwIDogX2EzLmNhbGwobmV4dEZvY3VzKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgaW5wdXRNb2RlKTtcbiAgICAgIHNlbGYuX3NwZWFrID0gXCJcIjtcbiAgICAgIGlmIChJU19GSVJFRk9YX0RFU0tUT1ApIG9uKHNlbGYsIFwiYmx1clwiLCAoKSA9PiByZW5kZXIoc2VsZiksIEVWRU5UX09OQ0UpO1xuICAgICAgZWxzZSBzZXRUaW1lb3V0KHJlbmRlciwgMTAwLCBzZWxmKTtcbiAgICB9LCAxMDApO1xuICB9XG4gIGxldCBpZHggPSAwO1xuICBjb25zdCBzZWxlY3QgPSBzZWxmLnF1ZXJ5U2VsZWN0b3IoXCJzZWxlY3RcIik7XG4gIGNvbnN0IHJlbW92ZSA9IGlzRGlzYWJsZWQoc2VsZikgPyBcIlwiIDogYCR7X3RleHRzLnJlbW92ZX0sIGA7XG4gIGZvciAoY29uc3QgaXRlbTIgb2YgaXRlbXMpIHtcbiAgICBjb25zdCBvcHRpb24gPSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zW2lkeF07XG4gICAgY29uc3QgbGFiZWwyID0gdGV4dChpdGVtMik7XG4gICAgY29uc3QgdmFsdWUgPSBpdGVtMi52YWx1ZSB8fCBsYWJlbDI7XG4gICAgY29uc3QgYXJpYSA9IGAke3NlbGYuX3NwZWFrfSR7bGFiZWwyfSwgJHtyZW1vdmV9JHsrK2lkeH0gJHtfdGV4dHMub2Z9ICR7aXRlbXMubGVuZ3RofWA7XG4gICAgYXR0cihpdGVtMiwgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIGF0dHIoaXRlbTIsIFwidmFsdWVcIiwgdmFsdWUpO1xuICAgIGF0dHIoaXRlbTIsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICBhdHRyKGl0ZW0yLCBcImFyaWEtbGFiZWxcIiwgYXJpYSk7XG4gICAgaWYgKG9wdGlvbikgT2JqZWN0LmFzc2lnbihvcHRpb24sIHsgdGV4dENvbnRlbnQ6IGxhYmVsMiwgdmFsdWUgfSk7XG4gICAgZWxzZSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5hcHBlbmRDaGlsZChuZXcgT3B0aW9uKGxhYmVsMiwgdmFsdWUsIHRydWUsIHRydWUpKTtcbiAgfVxuICBpZiAoc2VsZWN0KSBhdHRyKHNlbGVjdCwgXCJtdWx0aXBsZVwiLCBtdWx0aXBsZSA/IFwiXCIgOiBudWxsKTtcbiAgZm9yIChjb25zdCBvcHQgb2YgWy4uLihzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zKSB8fCBbXV0uc2xpY2UoaWR4KSkgb3B0LnJlbW92ZSgpO1xuICBpZiAoIW11bHRpcGxlICYmIGlkeCA+IDEpXG4gICAgY29uc29sZS53YXJuKFwidS1jb21ib2JveDogTXVsdGlwbGUgPGRhdGE+IGZvdW5kIGluIHNpbmdsZSBtb2RlLlwiKTtcbiAgYXR0cihsaXN0LCBcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCIsIGAke211bHRpcGxlfWApO1xuICBhdHRyKGNvbnRyb2wsIFwibGlzdFwiLCB1c2VJZChsaXN0KSk7XG4gIGF0dHIoY29udHJvbCwgXCJhcmlhLWxhYmVsXCIsIGAke3NlbGYuX3NwZWFrfSR7bGFiZWx9JHtNT0RJRklFRH1gKTtcbiAgaWYgKGxpc3QuaGFzQXR0cmlidXRlKFwicG9wb3ZlclwiKSkge1xuICAgIGF0dHIoY29udHJvbCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKGxpc3QpKTtcbiAgICBhdHRyKGxpc3QsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcbiAgfVxuICBjb25zdCBpdGVtID0gdGV4dChpdGVtc1swXSk7XG4gIGlmIChpdGVtICE9PSBzZWxmLl9pdGVtKSBzeW5jSW5wdXRWYWx1ZShzZWxmKTtcbiAgc2VsZi5faXRlbSA9IGl0ZW07XG4gIHN5bmNDbGVhcldpdGhJbnB1dChzZWxmKTtcbiAgc3luY09wdGlvbnNXaXRoSXRlbXMoc2VsZik7XG4gIChfYTIgPSBtdXRhdGlvbk9ic2VydmVyKHNlbGYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRha2VSZWNvcmRzKCk7XG59O1xudmFyIHN5bmNDbGVhcldpdGhJbnB1dCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChzZWxmLmNsZWFyKSBhdHRyKHNlbGYuY2xlYXIsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgaWYgKHNlbGYuY2xlYXIpIHNlbGYuY2xlYXIuaGlkZGVuID0gISgoX2EyID0gc2VsZi5jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnZhbHVlKSB8fCBpc0Rpc2FibGVkKHNlbGYpO1xufTtcbnZhciBzeW5jT3B0aW9uc1dpdGhJdGVtcyA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgX3NwZWFrLCBvcHRpb25zID0gW10sIHZhbHVlcyB9ID0gc2VsZjtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gKF9hMiA9IGF0dHIob3B0LCBcInZhbHVlXCIpKSAhPSBudWxsID8gX2EyIDogdGV4dChvcHQpO1xuICAgIGF0dHIob3B0LCBcImFyaWEtbGFiZWxcIiwgX3NwZWFrID8gYCR7X3NwZWFrfSR7dGV4dChvcHQpfWAgOiBudWxsKTtcbiAgICBhdHRyKG9wdCwgXCJzZWxlY3RlZFwiLCB2YWx1ZXMuaW5jbHVkZXModmFsdWUpID8gXCJcIiA6IG51bGwpO1xuICB9XG59O1xudmFyIHN5bmNJbnB1dFZhbHVlID0gKHNlbGYpID0+IHtcbiAgY29uc3QgeyBtdWx0aXBsZSwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gdGV4dChpdGVtc1swXSk7XG4gIGlmICghbXVsdGlwbGUgJiYgY29udHJvbCAmJiB2YWx1ZSAhPT0gY29udHJvbC52YWx1ZSlcbiAgICBzZXRWYWx1ZShjb250cm9sLCB2YWx1ZSwgdmFsdWUgPyBcImluc2VydFRleHRcIiA6IFwiZGVsZXRlQ29udGVudFwiKTtcbn07XG52YXIgZGlzcGF0Y2hNYXRjaCA9IChzZWxmLCBjaGFuZ2UgPSB0cnVlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgX3RleHRzLCBvcHRpb25zID0gW10sIGNyZWF0YWJsZSwgY29udHJvbCwgaXRlbXMsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IHF1ZXJ5ID0gdmFsdWUudG9Mb3dlckNhc2UoKSB8fCBudWxsO1xuICBsZXQgbWF0Y2ggPSBbLi4ub3B0aW9uc10uZmluZChcbiAgICAob3B0KSA9PiAoYXR0cihvcHQsIFwibGFiZWxcIikgfHwgdGV4dChvcHQpKS50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gcXVlcnlcbiAgKTtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogbWF0Y2ggfTtcbiAgaWYgKCFzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiY29tYm9ib3hiZWZvcmVtYXRjaFwiLCBldmVudCkpKVxuICAgIG1hdGNoID0gWy4uLm9wdGlvbnNdLmZpbmQoKG8pID0+IG8uc2VsZWN0ZWQpO1xuICBpZiAoY2hhbmdlKSB7XG4gICAgc3luY09wdGlvbnNXaXRoSXRlbXMoc2VsZik7XG4gICAgaWYgKG1hdGNoKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgbWF0Y2gsIGZhbHNlKTtcbiAgICBpZiAoY3JlYXRhYmxlICYmIHZhbHVlKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgeyB2YWx1ZSB9LCBmYWxzZSk7XG4gICAgaWYgKCFtdWx0aXBsZSAmJiAhdmFsdWUgJiYgaXRlbXNbMF0pIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW1zWzBdKTtcbiAgICBlbHNlIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICAgIHJldHVybiBzcGVhayhfdGV4dHMuaW52YWxpZCk7XG4gIH1cbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykgb3B0LnNlbGVjdGVkID0gb3B0ID09PSBtYXRjaDtcbn07XG52YXIgZGlzcGF0Y2hDaGFuZ2UgPSAoc2VsZiwgaXRlbSwgcmVtb3ZhYmxlID0gdHJ1ZSkgPT4ge1xuICBjb25zdCB7IGNvbnRyb2wsIGl0ZW1zLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgYWRkID0gY3JlYXRlRWxlbWVudChcImRhdGFcIiwgaXRlbS5sYWJlbCB8fCBpdGVtLnZhbHVlLCB7XG4gICAgdmFsdWU6IGl0ZW0udmFsdWVcbiAgfSk7XG4gIGNvbnN0IHJlbW92ZSA9IFsuLi5pdGVtc10uZmluZCgoaSkgPT4gaS52YWx1ZSA9PT0gaXRlbS52YWx1ZSk7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IHJlbW92ZSB8fCBhZGQgfTtcbiAgY29uc3Qgc2tpcCA9IHJlbW92ZSAmJiAhcmVtb3ZhYmxlO1xuICBpZiAoc2tpcCkgcmV0dXJuIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICBpZiAoc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImNvbWJvYm94YmVmb3Jlc2VsZWN0XCIsIGV2ZW50KSkpIHtcbiAgICBpZiAoIW11bHRpcGxlKSBmb3IgKGNvbnN0IGl0ZW0yIG9mIFsuLi5pdGVtc10pIGl0ZW0yLnJlbW92ZSgpO1xuICAgIGlmIChyZW1vdmUpIHJlbW92ZS5yZW1vdmUoKTtcbiAgICBlbHNlIGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYmVmb3JlYmVnaW5cIiwgYWRkKTtcbiAgICBzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiY29tYm9ib3hhZnRlcnNlbGVjdFwiLCBldmVudCkpO1xuICB9XG59O1xudmFyIG9uRm9jdXMgPSAoc2VsZiwgeyB0YXJnZXQgfSkgPT4ge1xuICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHNlbGYuX2ZvY3VzID0gdGFyZ2V0O1xuICBzcGVhaygpO1xufTtcbnZhciBvbkJsdXIgPSAoc2VsZikgPT4gaXNNb3VzZURvd24oKSB8fCBzZXRUaW1lb3V0KG9uQmx1cnJlZCwgMCwgc2VsZik7XG52YXIgb25CbHVycmVkID0gKHNlbGYpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9mb2N1cyB8fCBzZWxmLmNvbnRhaW5zKChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQpKSByZXR1cm47XG4gIGlmICghc2VsZi5tdWx0aXBsZSkgZGlzcGF0Y2hNYXRjaChzZWxmKTtcbiAgc2VsZi5fZm9jdXMgPSB2b2lkIDA7XG59O1xudmFyIG9uQ2xpY2sgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgY29uc3QgeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5LCB0YXJnZXQgfSA9IGV2ZW50O1xuICBjb25zdCB7IGNsZWFyLCBjb250cm9sLCBpdGVtcyB9ID0gc2VsZjtcbiAgaWYgKGNsZWFyID09IG51bGwgPyB2b2lkIDAgOiBjbGVhci5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgaWYgKGNvbnRyb2wpIHNldFZhbHVlKGNvbnRyb2wsIFwiXCIsIFwiZGVsZXRlQ29udGVudEJhY2t3YXJkXCIpO1xuICAgIHJldHVybiBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCk7XG4gIH1cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfSA9IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKGl0ZW0uY29udGFpbnModGFyZ2V0KSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW0pO1xuICAgIGlmICh5ID49IHRvcCAmJiB5IDw9IGJvdHRvbSAmJiB4ID49IGxlZnQgJiYgeCA8PSByaWdodCkgcmV0dXJuIGl0ZW0uZm9jdXMoKTtcbiAgfVxuICBpZiAodGFyZ2V0ID09PSBzZWxmKSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCk7XG59O1xudmFyIG9uSW5wdXQgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgeyBvcHRpb25zID0gW10sIGNvbnRyb2wsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IGlzQ2xpY2sgPSBldmVudCBpbnN0YW5jZW9mIElucHV0RXZlbnQgPyAhZXZlbnQuaW5wdXRUeXBlIHx8IGV2ZW50LmlucHV0VHlwZSA9PT0gXCJpbnNlcnRSZXBsYWNlbWVudFRleHRcIiA6ICEhdmFsdWU7XG4gIGlmIChpc0NsaWNrKSB7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGNvbnRyb2wpIGNvbnRyb2wudmFsdWUgPSBzZWxmLl92YWx1ZTtcbiAgICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKVxuICAgICAgaWYgKG9wdC52YWx1ZSAmJiBvcHQudmFsdWUgPT09IHZhbHVlKVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgb3B0LCBtdWx0aXBsZSk7XG4gIH0gZWxzZSBpZiAoIW11bHRpcGxlKSBkaXNwYXRjaE1hdGNoKHNlbGYsIGZhbHNlKTtcbiAgc3luY0NsZWFyV2l0aElucHV0KHNlbGYpO1xufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkpIHJldHVybjtcbiAgY29uc3QgeyBjbGVhciwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGNvbnN0IHsga2V5LCByZXBlYXQsIHRhcmdldCB9ID0gZXZlbnQ7XG4gIGNvbnN0IGlzQ29udHJvbCA9IGNvbnRyb2wgJiYgY29udHJvbCA9PT0gdGFyZ2V0O1xuICBjb25zdCBpblRleHQgPSBpc0NvbnRyb2wgJiYgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuc2VsZWN0aW9uRW5kKTtcbiAgbGV0IGluZGV4ID0gaXNDb250cm9sID8gaXRlbXMubGVuZ3RoIDogWy4uLml0ZW1zXS5pbmRleE9mKHRhcmdldCk7XG4gIGlmIChpc0NvbnRyb2wgJiYga2V5ID09PSBcIlRhYlwiICYmIGNsZWFyICYmICFjbGVhci5oaWRkZW4pIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNsZWFyLnRhYkluZGV4ID0gLTE7XG4gICAgY2xlYXIuZm9jdXMoKTtcbiAgICBvbihjbGVhciwgXCJibHVyXCIsICgpID0+IGF0dHIoY2xlYXIsIFwidGFiaW5kZXhcIiwgbnVsbCksIEVWRU5UX09OQ0UpO1xuICB9XG4gIGlmICghaXNDb250cm9sICYmIGFzQnV0dG9uKGV2ZW50KSB8fCBpbmRleCA9PT0gLTEpIHJldHVybjtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1JpZ2h0XCIgJiYgIWlzQ29udHJvbCkgaW5kZXggKz0gMTtcbiAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93TGVmdFwiICYmICFpblRleHQpIGluZGV4IC09IDE7XG4gIGVsc2UgaWYgKGtleSA9PT0gXCJFbnRlclwiICYmIGlzQ29udHJvbCkge1xuICAgIGNvbnN0IGZvcm0gPSBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiKTtcbiAgICBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiLCBcIiNcIik7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IGF0dHIoY29udHJvbCwgXCJmb3JtXCIsIGZvcm0pKTtcbiAgICByZXR1cm4gZGlzcGF0Y2hNYXRjaChzZWxmKTtcbiAgfSBlbHNlIGlmICgoa2V5ID09PSBcIkJhY2tzcGFjZVwiIHx8IGtleSA9PT0gXCJEZWxldGVcIikgJiYgIWluVGV4dCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCFyZXBlYXQgJiYgaXRlbXNbaW5kZXhdKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgaXRlbXNbaW5kZXhdKTtcbiAgICBpZiAoaXNDb250cm9sKSBpbmRleCAtPSAxO1xuICB9IGVsc2UgcmV0dXJuIGlzQ29udHJvbCB8fCAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpKTtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgKF9hMiA9IGl0ZW1zW01hdGgubWF4KDAsIGluZGV4KV0gfHwgY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtY29tYm9ib3hcIiwgVUhUTUxDb21ib2JveEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTENvbWJvYm94RWxlbWVudCwgVUhUTUxDb21ib2JveFNoYWRvd1Jvb3QsIFVIVE1MQ29tYm9ib3hTdHlsZSB9O1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgU0FGRV9MQUJFTExFREJZID0gYCR7SVNfQU5EUk9JRCA/IFwiZGF0YVwiIDogXCJhcmlhXCJ9LWxhYmVsbGVkYnlgO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuc2hhZG93Um9vdCB8fCBlbGVtZW50LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gIC8vIFVubmFtZWQgc2xvdCBkb2VzIGF1dG9tYXRpY2FsbHkgcmVuZGVyIGFsbCB0b3AgZWxlbWVudCBub2Rlc1xuICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgY3NzKVxuKTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoX2Vycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZGVjbGFyYXRpdmVTaGFkb3dSb290ID0gKHN0eWxlLCBzbG90ID0gXCI8c2xvdD48L3Nsb3Q+XCIpID0+IGA8dGVtcGxhdGUgc2hhZG93cm9vdG1vZGU9XCJvcGVuXCI+JHtzbG90fTxzdHlsZT4ke3N0eWxlfTwvc3R5bGU+PC90ZW1wbGF0ZT5gO1xuXG4vLyB1LXRhYnMudHNcbnZhciBVSFRNTFRhYnNTdHlsZSA9IERJU1BMQVlfQkxPQ0s7XG52YXIgVUhUTUxUYWJMaXN0U3R5bGUgPSBESVNQTEFZX0JMT0NLO1xudmFyIFVIVE1MVGFiUGFuZWxTdHlsZSA9IERJU1BMQVlfQkxPQ0s7XG52YXIgVUhUTUxUYWJTdHlsZSA9ICc6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGN1cnNvcjogcG9pbnRlciB9Omhvc3QoW2FyaWEtZGlzYWJsZWQ9XCJ0cnVlXCJdKSB7IGN1cnNvcjogZGVmYXVsdCB9JztcbnZhciBVSFRNTFRhYnNTaGFkb3dSb290ID0gZGVjbGFyYXRpdmVTaGFkb3dSb290KFVIVE1MVGFic1N0eWxlKTtcbnZhciBVSFRNTFRhYkxpc3RTaGFkb3dSb290ID0gZGVjbGFyYXRpdmVTaGFkb3dSb290KFVIVE1MVGFiTGlzdFN0eWxlKTtcbnZhciBVSFRNTFRhYlNoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoVUhUTUxUYWJTdHlsZSk7XG52YXIgVUhUTUxUYWJQYW5lbFNoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoVUhUTUxUYWJQYW5lbFN0eWxlKTtcbnZhciBBUklBX0NPTlRST0xTID0gXCJhcmlhLWNvbnRyb2xzXCI7XG52YXIgQVJJQV9TRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xudmFyIFVIVE1MVGFic0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgVUhUTUxUYWJzU3R5bGUpO1xuICB9XG4gIGdldCB0YWJMaXN0KCkge1xuICAgIHJldHVybiBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYmxpc3RcIiwgdGhpcylbMF0gfHwgbnVsbDtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpO1xuICB9XG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgc2V0U2VsZWN0ZWQodGhpcy50YWJzW2luZGV4XSk7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFiXCIsIHRoaXMpO1xuICB9XG4gIGdldCBwYW5lbHMoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFicGFuZWxcIiwgdGhpcyk7XG4gIH1cbn07XG52YXIgVUhUTUxUYWJMaXN0RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBVSFRNTFRhYkxpc3RTdHlsZSk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJ0YWJsaXN0XCIpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICAgIGlmICh0aGlzLnRhYnMubGVuZ3RoKSB0aGlzLmhhbmRsZUV2ZW50KCk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgb2ZmKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIGZhbHNlKTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGlmICghZXZlbnQgfHwgZXZlbnQudHlwZSA9PT0gXCJtdXRhdGlvblwiKSB7XG4gICAgICBjb25zdCB0YWIgPSB0aGlzLnRhYnNbTWF0aC5tYXgodGhpcy5zZWxlY3RlZEluZGV4LCAwKV07XG4gICAgICByZXR1cm4gdGFiID09IG51bGwgPyB2b2lkIDAgOiB0YWIuc2V0QXR0cmlidXRlKEFSSUFfU0VMRUNURUQsIFwidHJ1ZVwiKTtcbiAgICB9XG4gICAgY29uc3QgeyBrZXkgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHRhYnMgPSBbLi4udGhpcy50YWJzXTtcbiAgICBjb25zdCBwcmV2ID0gdGFicy5maW5kSW5kZXgoKHRhYikgPT4gdGFiLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpO1xuICAgIGxldCBuZXh0ID0gcHJldjtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCBwcmV2ID09PSAtMSkgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIpIHNldFNlbGVjdGVkKHRhYnNbcHJldl0pO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIiAmJiAhYXNCdXR0b24oZXZlbnQpKSB7XG4gICAgICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiIHx8IGtleSA9PT0gXCJBcnJvd1JpZ2h0XCIpXG4gICAgICAgIG5leHQgPSAocHJldiArIDEpICUgdGFicy5sZW5ndGg7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiQXJyb3dVcFwiIHx8IGtleSA9PT0gXCJBcnJvd0xlZnRcIilcbiAgICAgICAgbmV4dCA9IChwcmV2IHx8IHRhYnMubGVuZ3RoKSAtIDE7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiRW5kXCIpIG5leHQgPSB0YWJzLmxlbmd0aCAtIDE7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiSG9tZVwiKSBuZXh0ID0gMDtcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJUYWJcIikgbmV4dCA9IGdldFNlbGVjdGVkSW5kZXgodGFicyk7XG4gICAgICBlbHNlIHJldHVybjtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0YWJzW3ByZXZdLnRhYkluZGV4ID0gLTE7XG4gICAgICAgIHRhYnNbbmV4dF0udGFiSW5kZXggPSAwO1xuICAgICAgfSk7XG4gICAgICBpZiAoa2V5ICE9PSBcIlRhYlwiKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRhYnNbbmV4dF0uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpO1xuICB9XG4gIGdldCBzZWxlY3RlZEluZGV4KCkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicyk7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgICBzZXRTZWxlY3RlZCh0aGlzLnRhYnNbaW5kZXhdKTtcbiAgfVxufTtcbnZhciBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG52YXIgVUhUTUxUYWJFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiaWRcIiwgQVJJQV9TRUxFQ1RFRCwgQVJJQV9DT05UUk9MU107XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBVSFRNTFRhYlN0eWxlKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcInRhYlwiKTtcbiAgICB0aGlzLnRhYkluZGV4ID0gdGhpcy5zZWxlY3RlZCA/IDAgOiAtMTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCFTS0lQX0FUVFJfQ0hBTkdFICYmIHRoaXMuc2VsZWN0ZWQgJiYgdGhpcy50YWJMaXN0KSB7XG4gICAgICBTS0lQX0FUVFJfQ0hBTkdFID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHRhYnMgPSBbLi4udGhpcy50YWJMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKV07XG4gICAgICBjb25zdCBwYW5lbHMgPSBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYnBhbmVsXCIsIHRoaXMudGFic0VsZW1lbnQgfHwgdGhpcyk7XG4gICAgICBjb25zdCBuZXh0UGFuZWwgPSBnZXRQYW5lbCh0aGlzLCBwYW5lbHNbdGFicy5pbmRleE9mKHRoaXMpXSk7XG4gICAgICBpZiAobmV4dFBhbmVsKSBhdHRyKG5leHRQYW5lbCwgU0FGRV9MQUJFTExFREJZLCB1c2VJZCh0aGlzKSk7XG4gICAgICB0YWJzLmZvckVhY2goKHRhYiwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSBnZXRQYW5lbCh0YWIsIHBhbmVsc1tpbmRleF0pO1xuICAgICAgICB0YWIudGFiSW5kZXggPSB0YWIgPT09IHRoaXMgPyAwIDogLTE7XG4gICAgICAgIGF0dHIodGFiLCBBUklBX1NFTEVDVEVELCBgJHt0YWIgPT09IHRoaXN9YCk7XG4gICAgICAgIGF0dHIodGFiLCBBUklBX0NPTlRST0xTLCAocGFuZWwgPT0gbnVsbCA/IHZvaWQgMCA6IHBhbmVsLmlkKSB8fCBudWxsKTtcbiAgICAgICAgaWYgKHBhbmVsKSBwYW5lbC5oaWRkZW4gPSBwYW5lbCAhPT0gbmV4dFBhbmVsO1xuICAgICAgfSk7XG4gICAgICBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJMaXN0KCkge1xuICAgIGNvbnN0IHRhYmxpc3QgPSB0aGlzLnBhcmVudEVsZW1lbnQ7XG4gICAgcmV0dXJuICh0YWJsaXN0ID09IG51bGwgPyB2b2lkIDAgOiB0YWJsaXN0Lm5vZGVOYW1lKSA9PT0gXCJVLVRBQkxJU1RcIiA/IHRhYmxpc3QgOiBudWxsO1xuICB9XG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBBUklBX1NFTEVDVEVEKSA9PT0gXCJ0cnVlXCI7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBBUklBX1NFTEVDVEVELCBgJHshIXZhbHVlfWApO1xuICB9XG4gIC8qKiBSZXRyaWV2ZXMgdGhlIG9yZGluYWwgcG9zaXRpb24gb2YgYW4gdGFiIGluIGEgdGFibGlzdC4gKi9cbiAgZ2V0IGluZGV4KCkge1xuICAgIGNvbnN0IHRhYkxpc3QgPSB0aGlzLnRhYkxpc3Q7XG4gICAgcmV0dXJuIHRhYkxpc3QgPyBbLi4udGFiTGlzdC5xdWVyeVNlbGVjdG9yQWxsKFwidS10YWJcIildLmluZGV4T2YodGhpcykgOiAwO1xuICB9XG4gIGdldCBwYW5lbCgpIHtcbiAgICByZXR1cm4gZ2V0UGFuZWwodGhpcyk7XG4gIH1cbn07XG52YXIgVUhUTUxUYWJQYW5lbEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJoaWRkZW5cIl07XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBVSFRNTFRhYlBhbmVsU3R5bGUpO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFicGFuZWxcIik7XG4gICAgdGhpcy5oaWRkZW4gPSBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicykgPT09IC0xO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGNvbnN0IGhpZGRlbiA9IHRoaXMuaGlkZGVuO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWhpZGRlblwiLCBgJHtoaWRkZW59YCk7XG4gICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIGhpZGRlbiB8fCBpc0ZvY3VzYWJsZSh0aGlzLmZpcnN0Q2hpbGQpID8gbnVsbCA6IFwiMFwiKTtcbiAgfVxuICBnZXQgdGFic0VsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcInUtdGFic1wiKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICBjb25zdCBjc3MgPSBgdS10YWJbJHtBUklBX0NPTlRST0xTfT1cIiR7dGhpcy5pZH1cIl1gO1xuICAgIHJldHVybiBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoY3NzKTtcbiAgfVxufTtcbnZhciBxdWVyeVdpdGhvdXROZXN0ZWQgPSAodGFnLCBzZWxmKSA9PiBzZWxmLnF1ZXJ5U2VsZWN0b3JBbGwoYCR7dGFnfTpub3QoOnNjb3BlIHUtdGFicGFuZWwgJHt0YWd9KWApO1xudmFyIGdldFBhbmVsID0gKHRhYiwgcGFuZWwpID0+IHtcbiAgY29uc3QgaWQyID0gYXR0cih0YWIsIEFSSUFfQ09OVFJPTFMpIHx8IHVzZUlkKHBhbmVsKTtcbiAgY29uc3QgZWwgPSBnZXRSb290KHRhYikuZ2V0RWxlbWVudEJ5SWQoaWQyKTtcbiAgcmV0dXJuIChlbCA9PSBudWxsID8gdm9pZCAwIDogZWwubm9kZU5hbWUpID09PSBcIlUtVEFCUEFORUxcIiA/IGVsIDogbnVsbDtcbn07XG52YXIgZ2V0U2VsZWN0ZWRJbmRleCA9ICh0YWJzKSA9PiBbLi4udGFic10uZmluZEluZGV4KCh0YWIpID0+IGF0dHIodGFiLCBBUklBX1NFTEVDVEVEKSA9PT0gXCJ0cnVlXCIpO1xudmFyIHNldFNlbGVjdGVkID0gKHRhYikgPT4gdGFiICYmIGF0dHIodGFiLCBcImFyaWEtZGlzYWJsZWRcIikgIT09IFwidHJ1ZVwiICYmIGF0dHIodGFiLCBcImFyaWEtc2VsZWN0ZWRcIiwgXCJ0cnVlXCIpO1xudmFyIGlzRm9jdXNhYmxlID0gKGVsKSA9PiBlbCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgIWVsLm1hdGNoZXMoJzpkaXNhYmxlZCxbdGFiaW5kZXhePVwiLVwiXScpICYmIGVsLm1hdGNoZXMoXG4gIGBbY29udGVudGVkaXRhYmxlXSxbY29udHJvbHNdLFtocmVmXSxbdGFiaW5kZXhdLGlucHV0Om5vdChbdHlwZT1cImhpZGRlblwiXSksc2VsZWN0LHRleHRhcmVhLGJ1dHRvbixzdW1tYXJ5LGlmcmFtZWBcbik7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYnNcIiwgVUhUTUxUYWJzRWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYmxpc3RcIiwgVUhUTUxUYWJMaXN0RWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYlwiLCBVSFRNTFRhYkVsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJwYW5lbFwiLCBVSFRNTFRhYlBhbmVsRWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MVGFiRWxlbWVudCwgVUhUTUxUYWJMaXN0RWxlbWVudCwgVUhUTUxUYWJMaXN0U2hhZG93Um9vdCwgVUhUTUxUYWJMaXN0U3R5bGUsIFVIVE1MVGFiUGFuZWxFbGVtZW50LCBVSFRNTFRhYlBhbmVsU2hhZG93Um9vdCwgVUhUTUxUYWJQYW5lbFN0eWxlLCBVSFRNTFRhYlNoYWRvd1Jvb3QsIFVIVE1MVGFiU3R5bGUsIFVIVE1MVGFic0VsZW1lbnQsIFVIVE1MVGFic1NoYWRvd1Jvb3QsIFVIVE1MVGFic1N0eWxlIH07XG4iLCIvKipcbiAqIEN1c3RvbSBwb3NpdGlvbmluZyByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy92aXJ0dWFsLWVsZW1lbnRzXG4gKi9cblxuY29uc3Qgc2lkZXMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddO1xuY29uc3QgYWxpZ25tZW50cyA9IFsnc3RhcnQnLCAnZW5kJ107XG5jb25zdCBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL3NpZGVzLnJlZHVjZSgoYWNjLCBzaWRlKSA9PiBhY2MuY29uY2F0KHNpZGUsIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMF0sIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMV0pLCBbXSk7XG5jb25zdCBtaW4gPSBNYXRoLm1pbjtcbmNvbnN0IG1heCA9IE1hdGgubWF4O1xuY29uc3Qgcm91bmQgPSBNYXRoLnJvdW5kO1xuY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yO1xuY29uc3QgY3JlYXRlQ29vcmRzID0gdiA9PiAoe1xuICB4OiB2LFxuICB5OiB2XG59KTtcbmNvbnN0IG9wcG9zaXRlU2lkZU1hcCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmNvbnN0IG9wcG9zaXRlQWxpZ25tZW50TWFwID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmZ1bmN0aW9uIGNsYW1wKHN0YXJ0LCB2YWx1ZSwgZW5kKSB7XG4gIHJldHVybiBtYXgoc3RhcnQsIG1pbih2YWx1ZSwgZW5kKSk7XG59XG5mdW5jdGlvbiBldmFsdWF0ZSh2YWx1ZSwgcGFyYW0pIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKHBhcmFtKSA6IHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0U2lkZShwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QXhpc0xlbmd0aChheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG59XG5jb25zdCB5QXhpc1NpZGVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWyd0b3AnLCAnYm90dG9tJ10pO1xuZnVuY3Rpb24gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSB7XG4gIHJldHVybiB5QXhpc1NpZGVzLmhhcyhnZXRTaWRlKHBsYWNlbWVudCkpID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGdldE9wcG9zaXRlQXhpcyhnZXRTaWRlQXhpcyhwbGFjZW1lbnQpKTtcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudFNpZGVzKHBsYWNlbWVudCwgcmVjdHMsIHJ0bCkge1xuICBpZiAocnRsID09PSB2b2lkIDApIHtcbiAgICBydGwgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChhbGlnbm1lbnRBeGlzKTtcbiAgbGV0IG1haW5BbGlnbm1lbnRTaWRlID0gYWxpZ25tZW50QXhpcyA9PT0gJ3gnID8gYWxpZ25tZW50ID09PSAocnRsID8gJ2VuZCcgOiAnc3RhcnQnKSA/ICdyaWdodCcgOiAnbGVmdCcgOiBhbGlnbm1lbnQgPT09ICdzdGFydCcgPyAnYm90dG9tJyA6ICd0b3AnO1xuICBpZiAocmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gPiByZWN0cy5mbG9hdGluZ1tsZW5ndGhdKSB7XG4gICAgbWFpbkFsaWdubWVudFNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluQWxpZ25tZW50U2lkZSk7XG4gIH1cbiAgcmV0dXJuIFttYWluQWxpZ25tZW50U2lkZSwgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpbkFsaWdubWVudFNpZGUpXTtcbn1cbmZ1bmN0aW9uIGdldEV4cGFuZGVkUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgY29uc3Qgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGFsaWdubWVudCA9PiBvcHBvc2l0ZUFsaWdubWVudE1hcFthbGlnbm1lbnRdKTtcbn1cbmNvbnN0IGxyUGxhY2VtZW50ID0gWydsZWZ0JywgJ3JpZ2h0J107XG5jb25zdCBybFBsYWNlbWVudCA9IFsncmlnaHQnLCAnbGVmdCddO1xuY29uc3QgdGJQbGFjZW1lbnQgPSBbJ3RvcCcsICdib3R0b20nXTtcbmNvbnN0IGJ0UGxhY2VtZW50ID0gWydib3R0b20nLCAndG9wJ107XG5mdW5jdGlvbiBnZXRTaWRlTGlzdChzaWRlLCBpc1N0YXJ0LCBydGwpIHtcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgaWYgKHJ0bCkgcmV0dXJuIGlzU3RhcnQgPyBybFBsYWNlbWVudCA6IGxyUGxhY2VtZW50O1xuICAgICAgcmV0dXJuIGlzU3RhcnQgPyBsclBsYWNlbWVudCA6IHJsUGxhY2VtZW50O1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiBpc1N0YXJ0ID8gdGJQbGFjZW1lbnQgOiBidFBsYWNlbWVudDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFtdO1xuICB9XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKHBsYWNlbWVudCwgZmxpcEFsaWdubWVudCwgZGlyZWN0aW9uLCBydGwpIHtcbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGxldCBsaXN0ID0gZ2V0U2lkZUxpc3QoZ2V0U2lkZShwbGFjZW1lbnQpLCBkaXJlY3Rpb24gPT09ICdzdGFydCcsIHJ0bCk7XG4gIGlmIChhbGlnbm1lbnQpIHtcbiAgICBsaXN0ID0gbGlzdC5tYXAoc2lkZSA9PiBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnQpO1xuICAgIGlmIChmbGlwQWxpZ25tZW50KSB7XG4gICAgICBsaXN0ID0gbGlzdC5jb25jYXQobGlzdC5tYXAoZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxpc3Q7XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgc2lkZSA9PiBvcHBvc2l0ZVNpZGVNYXBbc2lkZV0pO1xufVxuZnVuY3Rpb24gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwLFxuICAgIC4uLnBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhZGRpbmdPYmplY3QocGFkZGluZykge1xuICByZXR1cm4gdHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSA6IHtcbiAgICB0b3A6IHBhZGRpbmcsXG4gICAgcmlnaHQ6IHBhZGRpbmcsXG4gICAgYm90dG9tOiBwYWRkaW5nLFxuICAgIGxlZnQ6IHBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICBjb25zdCB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gcmVjdDtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIGxlZnQ6IHgsXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmV4cG9ydCB7IGFsaWdubWVudHMsIGNsYW1wLCBjcmVhdGVDb29yZHMsIGV2YWx1YXRlLCBleHBhbmRQYWRkaW5nT2JqZWN0LCBmbG9vciwgZ2V0QWxpZ25tZW50LCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0QXhpc0xlbmd0aCwgZ2V0RXhwYW5kZWRQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBeGlzLCBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZVBsYWNlbWVudCwgZ2V0UGFkZGluZ09iamVjdCwgZ2V0U2lkZSwgZ2V0U2lkZUF4aXMsIG1heCwgbWluLCBwbGFjZW1lbnRzLCByZWN0VG9DbGllbnRSZWN0LCByb3VuZCwgc2lkZXMgfTtcbiIsImltcG9ydCB7IGdldFNpZGVBeGlzLCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBeGlzTGVuZ3RoLCBnZXRTaWRlLCBnZXRBbGlnbm1lbnQsIGV2YWx1YXRlLCBnZXRQYWRkaW5nT2JqZWN0LCByZWN0VG9DbGllbnRSZWN0LCBtaW4sIGNsYW1wLCBwbGFjZW1lbnRzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQsIGdldE9wcG9zaXRlUGxhY2VtZW50LCBnZXRFeHBhbmRlZFBsYWNlbWVudHMsIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMsIHNpZGVzLCBtYXgsIGdldE9wcG9zaXRlQXhpcyB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5leHBvcnQgeyByZWN0VG9DbGllbnRSZWN0IH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcblxuZnVuY3Rpb24gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQoX3JlZiwgcGxhY2VtZW50LCBydGwpIHtcbiAgbGV0IHtcbiAgICByZWZlcmVuY2UsXG4gICAgZmxvYXRpbmdcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IHNpZGVBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25MZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGFsaWdubWVudEF4aXMpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBpc1ZlcnRpY2FsID0gc2lkZUF4aXMgPT09ICd5JztcbiAgY29uc3QgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGZsb2F0aW5nLndpZHRoIC8gMjtcbiAgY29uc3QgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBmbG9hdGluZy5oZWlnaHQgLyAyO1xuICBjb25zdCBjb21tb25BbGlnbiA9IHJlZmVyZW5jZVthbGlnbkxlbmd0aF0gLyAyIC0gZmxvYXRpbmdbYWxpZ25MZW5ndGhdIC8gMjtcbiAgbGV0IGNvb3JkcztcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBmbG9hdGluZy5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54IC0gZmxvYXRpbmcud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cbiAgc3dpdGNoIChnZXRBbGlnbm1lbnQocGxhY2VtZW50KSkge1xuICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgIGNvb3Jkc1thbGlnbm1lbnRBeGlzXSAtPSBjb21tb25BbGlnbiAqIChydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmQnOlxuICAgICAgY29vcmRzW2FsaWdubWVudEF4aXNdICs9IGNvbW1vbkFsaWduICogKHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBjb29yZHM7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICpcbiAqIFRoaXMgZXhwb3J0IGRvZXMgbm90IGhhdmUgYW55IGBwbGF0Zm9ybWAgaW50ZXJmYWNlIGxvZ2ljLiBZb3Ugd2lsbCBuZWVkIHRvXG4gKiB3cml0ZSBvbmUgZm9yIHRoZSBwbGF0Zm9ybSB5b3UgYXJlIHVzaW5nIEZsb2F0aW5nIFVJIHdpdGguXG4gKi9cbmNvbnN0IGNvbXB1dGVQb3NpdGlvbiA9IGFzeW5jIChyZWZlcmVuY2UsIGZsb2F0aW5nLCBjb25maWcpID0+IHtcbiAgY29uc3Qge1xuICAgIHBsYWNlbWVudCA9ICdib3R0b20nLFxuICAgIHN0cmF0ZWd5ID0gJ2Fic29sdXRlJyxcbiAgICBtaWRkbGV3YXJlID0gW10sXG4gICAgcGxhdGZvcm1cbiAgfSA9IGNvbmZpZztcbiAgY29uc3QgdmFsaWRNaWRkbGV3YXJlID0gbWlkZGxld2FyZS5maWx0ZXIoQm9vbGVhbik7XG4gIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZmxvYXRpbmcpKTtcbiAgbGV0IHJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICByZWZlcmVuY2UsXG4gICAgZmxvYXRpbmcsXG4gICAgc3RyYXRlZ3lcbiAgfSk7XG4gIGxldCB7XG4gICAgeCxcbiAgICB5XG4gIH0gPSBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChyZWN0cywgcGxhY2VtZW50LCBydGwpO1xuICBsZXQgc3RhdGVmdWxQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gIGxldCBtaWRkbGV3YXJlRGF0YSA9IHt9O1xuICBsZXQgcmVzZXRDb3VudCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsaWRNaWRkbGV3YXJlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIGZuXG4gICAgfSA9IHZhbGlkTWlkZGxld2FyZVtpXTtcbiAgICBjb25zdCB7XG4gICAgICB4OiBuZXh0WCxcbiAgICAgIHk6IG5leHRZLFxuICAgICAgZGF0YSxcbiAgICAgIHJlc2V0XG4gICAgfSA9IGF3YWl0IGZuKHtcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgaW5pdGlhbFBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICAgIHN0cmF0ZWd5LFxuICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICBmbG9hdGluZ1xuICAgICAgfVxuICAgIH0pO1xuICAgIHggPSBuZXh0WCAhPSBudWxsID8gbmV4dFggOiB4O1xuICAgIHkgPSBuZXh0WSAhPSBudWxsID8gbmV4dFkgOiB5O1xuICAgIG1pZGRsZXdhcmVEYXRhID0ge1xuICAgICAgLi4ubWlkZGxld2FyZURhdGEsXG4gICAgICBbbmFtZV06IHtcbiAgICAgICAgLi4ubWlkZGxld2FyZURhdGFbbmFtZV0sXG4gICAgICAgIC4uLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChyZXNldCAmJiByZXNldENvdW50IDw9IDUwKSB7XG4gICAgICByZXNldENvdW50Kys7XG4gICAgICBpZiAodHlwZW9mIHJlc2V0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAocmVzZXQucGxhY2VtZW50KSB7XG4gICAgICAgICAgc3RhdGVmdWxQbGFjZW1lbnQgPSByZXNldC5wbGFjZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc2V0LnJlY3RzKSB7XG4gICAgICAgICAgcmVjdHMgPSByZXNldC5yZWN0cyA9PT0gdHJ1ZSA/IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgICAgICBmbG9hdGluZyxcbiAgICAgICAgICAgIHN0cmF0ZWd5XG4gICAgICAgICAgfSkgOiByZXNldC5yZWN0cztcbiAgICAgICAgfVxuICAgICAgICAoe1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeVxuICAgICAgICB9ID0gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQocmVjdHMsIHN0YXRlZnVsUGxhY2VtZW50LCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGkgPSAtMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICBzdHJhdGVneSxcbiAgICBtaWRkbGV3YXJlRGF0YVxuICB9O1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBvZiBvdmVyZmxvdyBzaWRlIG9mZnNldHMgdGhhdCBkZXRlcm1pbmUgaG93IG11Y2ggdGhlXG4gKiBlbGVtZW50IGlzIG92ZXJmbG93aW5nIGEgZ2l2ZW4gY2xpcHBpbmcgYm91bmRhcnkgb24gZWFjaCBzaWRlLlxuICogLSBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBib3VuZGFyeSBieSB0aGF0IG51bWJlciBvZiBwaXhlbHNcbiAqIC0gbmVnYXRpdmUgPSBob3cgbWFueSBwaXhlbHMgbGVmdCBiZWZvcmUgaXQgd2lsbCBvdmVyZmxvd1xuICogLSAwID0gbGllcyBmbHVzaCB3aXRoIHRoZSBib3VuZGFyeVxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2RldGVjdE92ZXJmbG93XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KHN0YXRlLCBvcHRpb25zKSB7XG4gIHZhciBfYXdhaXQkcGxhdGZvcm0kaXNFbGU7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgY29uc3Qge1xuICAgIHgsXG4gICAgeSxcbiAgICBwbGF0Zm9ybSxcbiAgICByZWN0cyxcbiAgICBlbGVtZW50cyxcbiAgICBzdHJhdGVneVxuICB9ID0gc3RhdGU7XG4gIGNvbnN0IHtcbiAgICBib3VuZGFyeSA9ICdjbGlwcGluZ0FuY2VzdG9ycycsXG4gICAgcm9vdEJvdW5kYXJ5ID0gJ3ZpZXdwb3J0JyxcbiAgICBlbGVtZW50Q29udGV4dCA9ICdmbG9hdGluZycsXG4gICAgYWx0Qm91bmRhcnkgPSBmYWxzZSxcbiAgICBwYWRkaW5nID0gMFxuICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgY29uc3QgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSAnZmxvYXRpbmcnID8gJ3JlZmVyZW5jZScgOiAnZmxvYXRpbmcnO1xuICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICBjb25zdCBjbGlwcGluZ0NsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KGF3YWl0IHBsYXRmb3JtLmdldENsaXBwaW5nUmVjdCh7XG4gICAgZWxlbWVudDogKChfYXdhaXQkcGxhdGZvcm0kaXNFbGUgPSBhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoZWxlbWVudCkpKSAhPSBudWxsID8gX2F3YWl0JHBsYXRmb3JtJGlzRWxlIDogdHJ1ZSkgPyBlbGVtZW50IDogZWxlbWVudC5jb250ZXh0RWxlbWVudCB8fCAoYXdhaXQgKHBsYXRmb3JtLmdldERvY3VtZW50RWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnRzLmZsb2F0aW5nKSkpLFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9KSk7XG4gIGNvbnN0IHJlY3QgPSBlbGVtZW50Q29udGV4dCA9PT0gJ2Zsb2F0aW5nJyA/IHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGg6IHJlY3RzLmZsb2F0aW5nLndpZHRoLFxuICAgIGhlaWdodDogcmVjdHMuZmxvYXRpbmcuaGVpZ2h0XG4gIH0gOiByZWN0cy5yZWZlcmVuY2U7XG4gIGNvbnN0IG9mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBvZmZzZXRTY2FsZSA9IChhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQob2Zmc2V0UGFyZW50KSkpID8gKGF3YWl0IChwbGF0Zm9ybS5nZXRTY2FsZSA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0U2NhbGUob2Zmc2V0UGFyZW50KSkpIHx8IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfSA6IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfTtcbiAgY29uc3QgZWxlbWVudENsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KHBsYXRmb3JtLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0ID8gYXdhaXQgcGxhdGZvcm0uY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Qoe1xuICAgIGVsZW1lbnRzLFxuICAgIHJlY3QsXG4gICAgb2Zmc2V0UGFyZW50LFxuICAgIHN0cmF0ZWd5XG4gIH0pIDogcmVjdCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiAoY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wKSAvIG9mZnNldFNjYWxlLnksXG4gICAgYm90dG9tOiAoZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSAvIG9mZnNldFNjYWxlLnksXG4gICAgbGVmdDogKGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCkgLyBvZmZzZXRTY2FsZS54LFxuICAgIHJpZ2h0OiAoZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0KSAvIG9mZnNldFNjYWxlLnhcbiAgfTtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIHBvc2l0aW9uIGFuIGlubmVyIGVsZW1lbnQgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgc28gdGhhdCBpdFxuICogYXBwZWFycyBjZW50ZXJlZCB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXJyb3dcbiAqL1xuY29uc3QgYXJyb3cgPSBvcHRpb25zID0+ICh7XG4gIG5hbWU6ICdhcnJvdycsXG4gIG9wdGlvbnMsXG4gIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgY29uc3Qge1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBwbGFjZW1lbnQsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHMsXG4gICAgICBtaWRkbGV3YXJlRGF0YVxuICAgIH0gPSBzdGF0ZTtcbiAgICAvLyBTaW5jZSBgZWxlbWVudGAgaXMgcmVxdWlyZWQsIHdlIGRvbid0IFBhcnRpYWw8PiB0aGUgdHlwZS5cbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcGFkZGluZyA9IDBcbiAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpIHx8IHt9O1xuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgeCxcbiAgICAgIHlcbiAgICB9O1xuICAgIGNvbnN0IGF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gICAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChheGlzKTtcbiAgICBjb25zdCBhcnJvd0RpbWVuc2lvbnMgPSBhd2FpdCBwbGF0Zm9ybS5nZXREaW1lbnNpb25zKGVsZW1lbnQpO1xuICAgIGNvbnN0IGlzWUF4aXMgPSBheGlzID09PSAneSc7XG4gICAgY29uc3QgbWluUHJvcCA9IGlzWUF4aXMgPyAndG9wJyA6ICdsZWZ0JztcbiAgICBjb25zdCBtYXhQcm9wID0gaXNZQXhpcyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICBjb25zdCBjbGllbnRQcm9wID0gaXNZQXhpcyA/ICdjbGllbnRIZWlnaHQnIDogJ2NsaWVudFdpZHRoJztcbiAgICBjb25zdCBlbmREaWZmID0gcmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gKyByZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBjb29yZHNbYXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIGNvbnN0IHN0YXJ0RGlmZiA9IGNvb3Jkc1theGlzXSAtIHJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgICBjb25zdCBhcnJvd09mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50KSk7XG4gICAgbGV0IGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGFycm93T2Zmc2V0UGFyZW50W2NsaWVudFByb3BdIDogMDtcblxuICAgIC8vIERPTSBwbGF0Zm9ybSBjYW4gcmV0dXJuIGB3aW5kb3dgIGFzIHRoZSBgb2Zmc2V0UGFyZW50YC5cbiAgICBpZiAoIWNsaWVudFNpemUgfHwgIShhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoYXJyb3dPZmZzZXRQYXJlbnQpKSkpIHtcbiAgICAgIGNsaWVudFNpemUgPSBlbGVtZW50cy5mbG9hdGluZ1tjbGllbnRQcm9wXSB8fCByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIH1cbiAgICBjb25zdCBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjtcblxuICAgIC8vIElmIHRoZSBwYWRkaW5nIGlzIGxhcmdlIGVub3VnaCB0aGF0IGl0IGNhdXNlcyB0aGUgYXJyb3cgdG8gbm8gbG9uZ2VyIGJlXG4gICAgLy8gY2VudGVyZWQsIG1vZGlmeSB0aGUgcGFkZGluZyBzbyB0aGF0IGl0IGlzIGNlbnRlcmVkLlxuICAgIGNvbnN0IGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcgPSBjbGllbnRTaXplIC8gMiAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiAtIDE7XG4gICAgY29uc3QgbWluUGFkZGluZyA9IG1pbihwYWRkaW5nT2JqZWN0W21pblByb3BdLCBsYXJnZXN0UG9zc2libGVQYWRkaW5nKTtcbiAgICBjb25zdCBtYXhQYWRkaW5nID0gbWluKHBhZGRpbmdPYmplY3RbbWF4UHJvcF0sIGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcpO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBmbG9hdGluZyBlbGVtZW50IGlmIHRoZSBjZW50ZXJcbiAgICAvLyBwb2ludCBpcyBvdXRzaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50J3MgYm91bmRzLlxuICAgIGNvbnN0IG1pbiQxID0gbWluUGFkZGluZztcbiAgICBjb25zdCBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLSBtYXhQYWRkaW5nO1xuICAgIGNvbnN0IGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gICAgY29uc3Qgb2Zmc2V0ID0gY2xhbXAobWluJDEsIGNlbnRlciwgbWF4KTtcblxuICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGwgZW5vdWdoIHRoYXQgdGhlIGFycm93J3MgcGFkZGluZyBjYXVzZXMgaXQgdG9cbiAgICAvLyB0byBwb2ludCB0byBub3RoaW5nIGZvciBhbiBhbGlnbmVkIHBsYWNlbWVudCwgYWRqdXN0IHRoZSBvZmZzZXQgb2YgdGhlXG4gICAgLy8gZmxvYXRpbmcgZWxlbWVudCBpdHNlbGYuIFRvIGVuc3VyZSBgc2hpZnQoKWAgY29udGludWVzIHRvIHRha2UgYWN0aW9uLFxuICAgIC8vIGEgc2luZ2xlIHJlc2V0IGlzIHBlcmZvcm1lZCB3aGVuIHRoaXMgaXMgdHJ1ZS5cbiAgICBjb25zdCBzaG91bGRBZGRPZmZzZXQgPSAhbWlkZGxld2FyZURhdGEuYXJyb3cgJiYgZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT0gbnVsbCAmJiBjZW50ZXIgIT09IG9mZnNldCAmJiByZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSAvIDIgLSAoY2VudGVyIDwgbWluJDEgPyBtaW5QYWRkaW5nIDogbWF4UGFkZGluZykgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgPCAwO1xuICAgIGNvbnN0IGFsaWdubWVudE9mZnNldCA9IHNob3VsZEFkZE9mZnNldCA/IGNlbnRlciA8IG1pbiQxID8gY2VudGVyIC0gbWluJDEgOiBjZW50ZXIgLSBtYXggOiAwO1xuICAgIHJldHVybiB7XG4gICAgICBbYXhpc106IGNvb3Jkc1theGlzXSArIGFsaWdubWVudE9mZnNldCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgW2F4aXNdOiBvZmZzZXQsXG4gICAgICAgIGNlbnRlck9mZnNldDogY2VudGVyIC0gb2Zmc2V0IC0gYWxpZ25tZW50T2Zmc2V0LFxuICAgICAgICAuLi4oc2hvdWxkQWRkT2Zmc2V0ICYmIHtcbiAgICAgICAgICBhbGlnbm1lbnRPZmZzZXRcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICByZXNldDogc2hvdWxkQWRkT2Zmc2V0XG4gICAgfTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGdldFBsYWNlbWVudExpc3QoYWxpZ25tZW50LCBhdXRvQWxpZ25tZW50LCBhbGxvd2VkUGxhY2VtZW50cykge1xuICBjb25zdCBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50ID0gYWxpZ25tZW50ID8gWy4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgPT09IGFsaWdubWVudCksIC4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT09IGFsaWdubWVudCldIDogYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRTaWRlKHBsYWNlbWVudCkgPT09IHBsYWNlbWVudCk7XG4gIHJldHVybiBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50LmZpbHRlcihwbGFjZW1lbnQgPT4ge1xuICAgIGlmIChhbGlnbm1lbnQpIHtcbiAgICAgIHJldHVybiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSA9PT0gYWxpZ25tZW50IHx8IChhdXRvQWxpZ25tZW50ID8gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSAhPT0gcGxhY2VtZW50IDogZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnYXV0b1BsYWNlbWVudCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRhdXRvUCwgX21pZGRsZXdhcmVEYXRhJGF1dG9QMiwgX3BsYWNlbWVudHNUaGF0Rml0T25FO1xuICAgICAgY29uc3Qge1xuICAgICAgICByZWN0cyxcbiAgICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBhbGlnbm1lbnQsXG4gICAgICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cyxcbiAgICAgICAgYXV0b0FsaWdubWVudCA9IHRydWUsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHMkMSA9IGFsaWdubWVudCAhPT0gdW5kZWZpbmVkIHx8IGFsbG93ZWRQbGFjZW1lbnRzID09PSBwbGFjZW1lbnRzID8gZ2V0UGxhY2VtZW50TGlzdChhbGlnbm1lbnQgfHwgbnVsbCwgYXV0b0FsaWdubWVudCwgYWxsb3dlZFBsYWNlbWVudHMpIDogYWxsb3dlZFBsYWNlbWVudHM7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gKChfbWlkZGxld2FyZURhdGEkYXV0b1AgPSBtaWRkbGV3YXJlRGF0YS5hdXRvUGxhY2VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGF1dG9QLmluZGV4KSB8fCAwO1xuICAgICAgY29uc3QgY3VycmVudFBsYWNlbWVudCA9IHBsYWNlbWVudHMkMVtjdXJyZW50SW5kZXhdO1xuICAgICAgaWYgKGN1cnJlbnRQbGFjZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBjb25zdCBhbGlnbm1lbnRTaWRlcyA9IGdldEFsaWdubWVudFNpZGVzKGN1cnJlbnRQbGFjZW1lbnQsIHJlY3RzLCBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSkpO1xuXG4gICAgICAvLyBNYWtlIGBjb21wdXRlQ29vcmRzYCBzdGFydCBmcm9tIHRoZSByaWdodCBwbGFjZS5cbiAgICAgIGlmIChwbGFjZW1lbnQgIT09IGN1cnJlbnRQbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnRzJDFbMF1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50T3ZlcmZsb3dzID0gW292ZXJmbG93W2dldFNpZGUoY3VycmVudFBsYWNlbWVudCldLCBvdmVyZmxvd1thbGlnbm1lbnRTaWRlc1swXV0sIG92ZXJmbG93W2FsaWdubWVudFNpZGVzWzFdXV07XG4gICAgICBjb25zdCBhbGxPdmVyZmxvd3MgPSBbLi4uKCgoX21pZGRsZXdhcmVEYXRhJGF1dG9QMiA9IG1pZGRsZXdhcmVEYXRhLmF1dG9QbGFjZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkYXV0b1AyLm92ZXJmbG93cykgfHwgW10pLCB7XG4gICAgICAgIHBsYWNlbWVudDogY3VycmVudFBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzOiBjdXJyZW50T3ZlcmZsb3dzXG4gICAgICB9XTtcbiAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzJDFbY3VycmVudEluZGV4ICsgMV07XG5cbiAgICAgIC8vIFRoZXJlIGFyZSBtb3JlIHBsYWNlbWVudHMgdG8gY2hlY2suXG4gICAgICBpZiAobmV4dFBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGluZGV4OiBjdXJyZW50SW5kZXggKyAxLFxuICAgICAgICAgICAgb3ZlcmZsb3dzOiBhbGxPdmVyZmxvd3NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IG5leHRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2UgPSBhbGxPdmVyZmxvd3MubWFwKGQgPT4ge1xuICAgICAgICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQoZC5wbGFjZW1lbnQpO1xuICAgICAgICByZXR1cm4gW2QucGxhY2VtZW50LCBhbGlnbm1lbnQgJiYgY3Jvc3NBeGlzID9cbiAgICAgICAgLy8gQ2hlY2sgYWxvbmcgdGhlIG1haW5BeGlzIGFuZCBtYWluIGNyb3NzQXhpcyBzaWRlLlxuICAgICAgICBkLm92ZXJmbG93cy5zbGljZSgwLCAyKS5yZWR1Y2UoKGFjYywgdikgPT4gYWNjICsgdiwgMCkgOlxuICAgICAgICAvLyBDaGVjayBvbmx5IHRoZSBtYWluQXhpcy5cbiAgICAgICAgZC5vdmVyZmxvd3NbMF0sIGQub3ZlcmZsb3dzXTtcbiAgICAgIH0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHNUaGF0Rml0T25FYWNoU2lkZSA9IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZS5maWx0ZXIoZCA9PiBkWzJdLnNsaWNlKDAsXG4gICAgICAvLyBBbGlnbmVkIHBsYWNlbWVudHMgc2hvdWxkIG5vdCBjaGVjayB0aGVpciBvcHBvc2l0ZSBjcm9zc0F4aXNcbiAgICAgIC8vIHNpZGUuXG4gICAgICBnZXRBbGlnbm1lbnQoZFswXSkgPyAyIDogMykuZXZlcnkodiA9PiB2IDw9IDApKTtcbiAgICAgIGNvbnN0IHJlc2V0UGxhY2VtZW50ID0gKChfcGxhY2VtZW50c1RoYXRGaXRPbkUgPSBwbGFjZW1lbnRzVGhhdEZpdE9uRWFjaFNpZGVbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfcGxhY2VtZW50c1RoYXRGaXRPbkVbMF0pIHx8IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZVswXVswXTtcbiAgICAgIGlmIChyZXNldFBsYWNlbWVudCAhPT0gcGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCArIDEsXG4gICAgICAgICAgICBvdmVyZmxvd3M6IGFsbE92ZXJmbG93c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogcmVzZXRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2ZsaXAnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkYXJyb3csIF9taWRkbGV3YXJlRGF0YSRmbGlwO1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgaW5pdGlhbFBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWUsXG4gICAgICAgIGZhbGxiYWNrUGxhY2VtZW50czogc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgICAgICBmYWxsYmFja1N0cmF0ZWd5ID0gJ2Jlc3RGaXQnLFxuICAgICAgICBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uID0gJ25vbmUnLFxuICAgICAgICBmbGlwQWxpZ25tZW50ID0gdHJ1ZSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuXG4gICAgICAvLyBJZiBhIHJlc2V0IGJ5IHRoZSBhcnJvdyB3YXMgY2F1c2VkIGR1ZSB0byBhbiBhbGlnbm1lbnQgb2Zmc2V0IGJlaW5nXG4gICAgICAvLyBhZGRlZCwgd2Ugc2hvdWxkIHNraXAgYW55IGxvZ2ljIG5vdyBzaW5jZSBgZmxpcCgpYCBoYXMgYWxyZWFkeSBkb25lIGl0c1xuICAgICAgLy8gd29yay5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjU0OSNpc3N1ZWNvbW1lbnQtMTcxOTYwMTY0M1xuICAgICAgaWYgKChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBpbml0aWFsU2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhpbml0aWFsUGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGlzQmFzZVBsYWNlbWVudCA9IGdldFNpZGUoaW5pdGlhbFBsYWNlbWVudCkgPT09IGluaXRpYWxQbGFjZW1lbnQ7XG4gICAgICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gICAgICBjb25zdCBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcEFsaWdubWVudCA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChpbml0aWFsUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZFBsYWNlbWVudHMoaW5pdGlhbFBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiA9IGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gIT09ICdub25lJztcbiAgICAgIGlmICghc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzICYmIGhhc0ZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24pIHtcbiAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzLnB1c2goLi4uZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cyhpbml0aWFsUGxhY2VtZW50LCBmbGlwQWxpZ25tZW50LCBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uLCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBsYWNlbWVudHMgPSBbaW5pdGlhbFBsYWNlbWVudCwgLi4uZmFsbGJhY2tQbGFjZW1lbnRzXTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBvdmVyZmxvd3MgPSBbXTtcbiAgICAgIGxldCBvdmVyZmxvd3NEYXRhID0gKChfbWlkZGxld2FyZURhdGEkZmxpcCA9IG1pZGRsZXdhcmVEYXRhLmZsaXApID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkZmxpcC5vdmVyZmxvd3MpIHx8IFtdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZV0pO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IHNpZGVzID0gZ2V0QWxpZ25tZW50U2lkZXMocGxhY2VtZW50LCByZWN0cywgcnRsKTtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZXNbMF1dLCBvdmVyZmxvd1tzaWRlc1sxXV0pO1xuICAgICAgfVxuICAgICAgb3ZlcmZsb3dzRGF0YSA9IFsuLi5vdmVyZmxvd3NEYXRhLCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzXG4gICAgICB9XTtcblxuICAgICAgLy8gT25lIG9yIG1vcmUgc2lkZXMgaXMgb3ZlcmZsb3dpbmcuXG4gICAgICBpZiAoIW92ZXJmbG93cy5ldmVyeShzaWRlID0+IHNpZGUgPD0gMCkpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRmbGlwMiwgX292ZXJmbG93c0RhdGEkZmlsdGVyO1xuICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoKChfbWlkZGxld2FyZURhdGEkZmxpcDIgPSBtaWRkbGV3YXJlRGF0YS5mbGlwKSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGZsaXAyLmluZGV4KSB8fCAwKSArIDE7XG4gICAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzW25leHRJbmRleF07XG4gICAgICAgIGlmIChuZXh0UGxhY2VtZW50KSB7XG4gICAgICAgICAgY29uc3QgaWdub3JlQ3Jvc3NBeGlzT3ZlcmZsb3cgPSBjaGVja0Nyb3NzQXhpcyA9PT0gJ2FsaWdubWVudCcgPyBpbml0aWFsU2lkZUF4aXMgIT09IGdldFNpZGVBeGlzKG5leHRQbGFjZW1lbnQpIDogZmFsc2U7XG4gICAgICAgICAgaWYgKCFpZ25vcmVDcm9zc0F4aXNPdmVyZmxvdyB8fFxuICAgICAgICAgIC8vIFdlIGxlYXZlIHRoZSBjdXJyZW50IG1haW4gYXhpcyBvbmx5IGlmIGV2ZXJ5IHBsYWNlbWVudCBvbiB0aGF0IGF4aXNcbiAgICAgICAgICAvLyBvdmVyZmxvd3MgdGhlIG1haW4gYXhpcy5cbiAgICAgICAgICBvdmVyZmxvd3NEYXRhLmV2ZXJ5KGQgPT4gZ2V0U2lkZUF4aXMoZC5wbGFjZW1lbnQpID09PSBpbml0aWFsU2lkZUF4aXMgPyBkLm92ZXJmbG93c1swXSA+IDAgOiB0cnVlKSkge1xuICAgICAgICAgICAgLy8gVHJ5IG5leHQgcGxhY2VtZW50IGFuZCByZS1ydW4gdGhlIGxpZmVjeWNsZS5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBpbmRleDogbmV4dEluZGV4LFxuICAgICAgICAgICAgICAgIG92ZXJmbG93czogb3ZlcmZsb3dzRGF0YVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpcnN0LCBmaW5kIHRoZSBjYW5kaWRhdGVzIHRoYXQgZml0IG9uIHRoZSBtYWluQXhpcyBzaWRlIG9mIG92ZXJmbG93LFxuICAgICAgICAvLyB0aGVuIGZpbmQgdGhlIHBsYWNlbWVudCB0aGF0IGZpdHMgdGhlIGJlc3Qgb24gdGhlIG1haW4gY3Jvc3NBeGlzIHNpZGUuXG4gICAgICAgIGxldCByZXNldFBsYWNlbWVudCA9IChfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIgPSBvdmVyZmxvd3NEYXRhLmZpbHRlcihkID0+IGQub3ZlcmZsb3dzWzBdIDw9IDApLnNvcnQoKGEsIGIpID0+IGEub3ZlcmZsb3dzWzFdIC0gYi5vdmVyZmxvd3NbMV0pWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX292ZXJmbG93c0RhdGEkZmlsdGVyLnBsYWNlbWVudDtcblxuICAgICAgICAvLyBPdGhlcndpc2UgZmFsbGJhY2suXG4gICAgICAgIGlmICghcmVzZXRQbGFjZW1lbnQpIHtcbiAgICAgICAgICBzd2l0Y2ggKGZhbGxiYWNrU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Jlc3RGaXQnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIF9vdmVyZmxvd3NEYXRhJGZpbHRlcjI7XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2VtZW50ID0gKF9vdmVyZmxvd3NEYXRhJGZpbHRlcjIgPSBvdmVyZmxvd3NEYXRhLmZpbHRlcihkID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTaWRlQXhpcyA9IGdldFNpZGVBeGlzKGQucGxhY2VtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTaWRlQXhpcyA9PT0gaW5pdGlhbFNpZGVBeGlzIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGJpYXMgdG8gdGhlIGB5YCBzaWRlIGF4aXMgZHVlIHRvIGhvcml6b250YWxcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVhZGluZyBkaXJlY3Rpb25zIGZhdm9yaW5nIGdyZWF0ZXIgd2lkdGguXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTaWRlQXhpcyA9PT0gJ3knO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSkubWFwKGQgPT4gW2QucGxhY2VtZW50LCBkLm92ZXJmbG93cy5maWx0ZXIob3ZlcmZsb3cgPT4gb3ZlcmZsb3cgPiAwKS5yZWR1Y2UoKGFjYywgb3ZlcmZsb3cpID0+IGFjYyArIG92ZXJmbG93LCAwKV0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9vdmVyZmxvd3NEYXRhJGZpbHRlcjJbMF07XG4gICAgICAgICAgICAgICAgaWYgKHBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdpbml0aWFsUGxhY2VtZW50JzpcbiAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBpbml0aWFsUGxhY2VtZW50O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBsYWNlbWVudCAhPT0gcmVzZXRQbGFjZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgICAgcGxhY2VtZW50OiByZXNldFBsYWNlbWVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQsXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoXG4gIH07XG59XG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIHNpZGVzLnNvbWUoc2lkZSA9PiBvdmVyZmxvd1tzaWRlXSA+PSAwKTtcbn1cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBoaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50IGluIGFwcGxpY2FibGUgc2l0dWF0aW9ucywgc3VjaCBhc1xuICogd2hlbiBpdCBpcyBub3QgaW4gdGhlIHNhbWUgY2xpcHBpbmcgY29udGV4dCBhcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaGlkZVxuICovXG5jb25zdCBoaWRlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdoaWRlJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlY3RzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0cmF0ZWd5ID0gJ3JlZmVyZW5jZUhpZGRlbicsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIHN3aXRjaCAoc3RyYXRlZ3kpIHtcbiAgICAgICAgY2FzZSAncmVmZXJlbmNlSGlkZGVuJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdHMucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VIaWRkZW5PZmZzZXRzOiBvZmZzZXRzLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhpZGRlbjogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICdlc2NhcGVkJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgYWx0Qm91bmRhcnk6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0cy5mbG9hdGluZyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZXNjYXBlZE9mZnNldHM6IG9mZnNldHMsXG4gICAgICAgICAgICAgICAgZXNjYXBlZDogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3RzKSB7XG4gIGNvbnN0IG1pblggPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5sZWZ0KSk7XG4gIGNvbnN0IG1pblkgPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC50b3ApKTtcbiAgY29uc3QgbWF4WCA9IG1heCguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LnJpZ2h0KSk7XG4gIGNvbnN0IG1heFkgPSBtYXgoLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5ib3R0b20pKTtcbiAgcmV0dXJuIHtcbiAgICB4OiBtaW5YLFxuICAgIHk6IG1pblksXG4gICAgd2lkdGg6IG1heFggLSBtaW5YLFxuICAgIGhlaWdodDogbWF4WSAtIG1pbllcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFJlY3RzQnlMaW5lKHJlY3RzKSB7XG4gIGNvbnN0IHNvcnRlZFJlY3RzID0gcmVjdHMuc2xpY2UoKS5zb3J0KChhLCBiKSA9PiBhLnkgLSBiLnkpO1xuICBjb25zdCBncm91cHMgPSBbXTtcbiAgbGV0IHByZXZSZWN0ID0gbnVsbDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRSZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHJlY3QgPSBzb3J0ZWRSZWN0c1tpXTtcbiAgICBpZiAoIXByZXZSZWN0IHx8IHJlY3QueSAtIHByZXZSZWN0LnkgPiBwcmV2UmVjdC5oZWlnaHQgLyAyKSB7XG4gICAgICBncm91cHMucHVzaChbcmVjdF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cHNbZ3JvdXBzLmxlbmd0aCAtIDFdLnB1c2gocmVjdCk7XG4gICAgfVxuICAgIHByZXZSZWN0ID0gcmVjdDtcbiAgfVxuICByZXR1cm4gZ3JvdXBzLm1hcChyZWN0ID0+IHJlY3RUb0NsaWVudFJlY3QoZ2V0Qm91bmRpbmdSZWN0KHJlY3QpKSk7XG59XG4vKipcbiAqIFByb3ZpZGVzIGltcHJvdmVkIHBvc2l0aW9uaW5nIGZvciBpbmxpbmUgcmVmZXJlbmNlIGVsZW1lbnRzIHRoYXQgY2FuIHNwYW5cbiAqIG92ZXIgbXVsdGlwbGUgbGluZXMsIHN1Y2ggYXMgaHlwZXJsaW5rcyBvciByYW5nZSBzZWxlY3Rpb25zLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2lubGluZVxuICovXG5jb25zdCBpbmxpbmUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2lubGluZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIHN0cmF0ZWd5XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICAvLyBBIE1vdXNlRXZlbnQncyBjbGllbnR7WCxZfSBjb29yZHMgY2FuIGJlIHVwIHRvIDIgcGl4ZWxzIG9mZiBhXG4gICAgICAvLyBDbGllbnRSZWN0J3MgYm91bmRzLCBkZXNwaXRlIHRoZSBldmVudCBsaXN0ZW5lciBiZWluZyB0cmlnZ2VyZWQuIEFcbiAgICAgIC8vIHBhZGRpbmcgb2YgMiBzZWVtcyB0byBoYW5kbGUgdGhpcyBpc3N1ZS5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGFkZGluZyA9IDIsXG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBuYXRpdmVDbGllbnRSZWN0cyA9IEFycmF5LmZyb20oKGF3YWl0IChwbGF0Zm9ybS5nZXRDbGllbnRSZWN0cyA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0Q2xpZW50UmVjdHMoZWxlbWVudHMucmVmZXJlbmNlKSkpIHx8IFtdKTtcbiAgICAgIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0UmVjdHNCeUxpbmUobmF0aXZlQ2xpZW50UmVjdHMpO1xuICAgICAgY29uc3QgZmFsbGJhY2sgPSByZWN0VG9DbGllbnRSZWN0KGdldEJvdW5kaW5nUmVjdChuYXRpdmVDbGllbnRSZWN0cykpO1xuICAgICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgICBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSB7XG4gICAgICAgIC8vIFRoZXJlIGFyZSB0d28gcmVjdHMgYW5kIHRoZXkgYXJlIGRpc2pvaW5lZC5cbiAgICAgICAgaWYgKGNsaWVudFJlY3RzLmxlbmd0aCA9PT0gMiAmJiBjbGllbnRSZWN0c1swXS5sZWZ0ID4gY2xpZW50UmVjdHNbMV0ucmlnaHQgJiYgeCAhPSBudWxsICYmIHkgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IHJlY3QgaW4gd2hpY2ggdGhlIHBvaW50IGlzIGZ1bGx5IGluc2lkZS5cbiAgICAgICAgICByZXR1cm4gY2xpZW50UmVjdHMuZmluZChyZWN0ID0+IHggPiByZWN0LmxlZnQgLSBwYWRkaW5nT2JqZWN0LmxlZnQgJiYgeCA8IHJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0ICYmIHkgPiByZWN0LnRvcCAtIHBhZGRpbmdPYmplY3QudG9wICYmIHkgPCByZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSB8fCBmYWxsYmFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZXJlIGFyZSAyIG9yIG1vcmUgY29ubmVjdGVkIHJlY3RzLlxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICBpZiAoZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RSZWN0ID0gY2xpZW50UmVjdHNbY2xpZW50UmVjdHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb25zdCBpc1RvcCA9IGdldFNpZGUocGxhY2VtZW50KSA9PT0gJ3RvcCc7XG4gICAgICAgICAgICBjb25zdCB0b3AgPSBmaXJzdFJlY3QudG9wO1xuICAgICAgICAgICAgY29uc3QgYm90dG9tID0gbGFzdFJlY3QuYm90dG9tO1xuICAgICAgICAgICAgY29uc3QgbGVmdCA9IGlzVG9wID8gZmlyc3RSZWN0LmxlZnQgOiBsYXN0UmVjdC5sZWZ0O1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBpc1RvcCA/IGZpcnN0UmVjdC5yaWdodCA6IGxhc3RSZWN0LnJpZ2h0O1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgIHg6IGxlZnQsXG4gICAgICAgICAgICAgIHk6IHRvcFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaXNMZWZ0U2lkZSA9IGdldFNpZGUocGxhY2VtZW50KSA9PT0gJ2xlZnQnO1xuICAgICAgICAgIGNvbnN0IG1heFJpZ2h0ID0gbWF4KC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QucmlnaHQpKTtcbiAgICAgICAgICBjb25zdCBtaW5MZWZ0ID0gbWluKC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QubGVmdCkpO1xuICAgICAgICAgIGNvbnN0IG1lYXN1cmVSZWN0cyA9IGNsaWVudFJlY3RzLmZpbHRlcihyZWN0ID0+IGlzTGVmdFNpZGUgPyByZWN0LmxlZnQgPT09IG1pbkxlZnQgOiByZWN0LnJpZ2h0ID09PSBtYXhSaWdodCk7XG4gICAgICAgICAgY29uc3QgdG9wID0gbWVhc3VyZVJlY3RzWzBdLnRvcDtcbiAgICAgICAgICBjb25zdCBib3R0b20gPSBtZWFzdXJlUmVjdHNbbWVhc3VyZVJlY3RzLmxlbmd0aCAtIDFdLmJvdHRvbTtcbiAgICAgICAgICBjb25zdCBsZWZ0ID0gbWluTGVmdDtcbiAgICAgICAgICBjb25zdCByaWdodCA9IG1heFJpZ2h0O1xuICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB4OiBsZWZ0LFxuICAgICAgICAgICAgeTogdG9wXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNldFJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICAgICAgcmVmZXJlbmNlOiB7XG4gICAgICAgICAgZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG4gICAgICAgIH0sXG4gICAgICAgIGZsb2F0aW5nOiBlbGVtZW50cy5mbG9hdGluZyxcbiAgICAgICAgc3RyYXRlZ3lcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlY3RzLnJlZmVyZW5jZS54ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS54IHx8IHJlY3RzLnJlZmVyZW5jZS55ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS55IHx8IHJlY3RzLnJlZmVyZW5jZS53aWR0aCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2Uud2lkdGggfHwgcmVjdHMucmVmZXJlbmNlLmhlaWdodCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHJlY3RzOiByZXNldFJlY3RzXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IG9yaWdpblNpZGVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWydsZWZ0JywgJ3RvcCddKTtcblxuLy8gRm9yIHR5cGUgYmFja3dhcmRzLWNvbXBhdGliaWxpdHksIHRoZSBgT2Zmc2V0T3B0aW9uc2AgdHlwZSB3YXMgYWxzb1xuLy8gRGVyaXZhYmxlLlxuXG5hc3luYyBmdW5jdGlvbiBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50LFxuICAgIHBsYXRmb3JtLFxuICAgIGVsZW1lbnRzXG4gIH0gPSBzdGF0ZTtcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgaXNWZXJ0aWNhbCA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgY29uc3QgbWFpbkF4aXNNdWx0aSA9IG9yaWdpblNpZGVzLmhhcyhzaWRlKSA/IC0xIDogMTtcbiAgY29uc3QgY3Jvc3NBeGlzTXVsdGkgPSBydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMTtcbiAgY29uc3QgcmF3VmFsdWUgPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICBsZXQge1xuICAgIG1haW5BeGlzLFxuICAgIGNyb3NzQXhpcyxcbiAgICBhbGlnbm1lbnRBeGlzXG4gIH0gPSB0eXBlb2YgcmF3VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZSxcbiAgICBjcm9zc0F4aXM6IDAsXG4gICAgYWxpZ25tZW50QXhpczogbnVsbFxuICB9IDoge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZS5tYWluQXhpcyB8fCAwLFxuICAgIGNyb3NzQXhpczogcmF3VmFsdWUuY3Jvc3NBeGlzIHx8IDAsXG4gICAgYWxpZ25tZW50QXhpczogcmF3VmFsdWUuYWxpZ25tZW50QXhpc1xuICB9O1xuICBpZiAoYWxpZ25tZW50ICYmIHR5cGVvZiBhbGlnbm1lbnRBeGlzID09PSAnbnVtYmVyJykge1xuICAgIGNyb3NzQXhpcyA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyBhbGlnbm1lbnRBeGlzICogLTEgOiBhbGlnbm1lbnRBeGlzO1xuICB9XG4gIHJldHVybiBpc1ZlcnRpY2FsID8ge1xuICAgIHg6IGNyb3NzQXhpcyAqIGNyb3NzQXhpc011bHRpLFxuICAgIHk6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aVxuICB9IDoge1xuICAgIHg6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aSxcbiAgICB5OiBjcm9zc0F4aXMgKiBjcm9zc0F4aXNNdWx0aVxuICB9O1xufVxuXG4vKipcbiAqIE1vZGlmaWVzIHRoZSBwbGFjZW1lbnQgYnkgdHJhbnNsYXRpbmcgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYWxvbmcgdGhlXG4gKiBzcGVjaWZpZWQgYXhlcy5cbiAqIEEgbnVtYmVyIChzaG9ydGhhbmQgZm9yIGBtYWluQXhpc2Agb3IgZGlzdGFuY2UpLCBvciBhbiBheGVzIGNvbmZpZ3VyYXRpb25cbiAqIG9iamVjdCBtYXkgYmUgcGFzc2VkLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL29mZnNldFxuICovXG5jb25zdCBvZmZzZXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IDA7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJG9mZnNlLCBfbWlkZGxld2FyZURhdGEkYXJyb3c7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgbWlkZGxld2FyZURhdGFcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IGRpZmZDb29yZHMgPSBhd2FpdCBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucyk7XG5cbiAgICAgIC8vIElmIHRoZSBwbGFjZW1lbnQgaXMgdGhlIHNhbWUgYW5kIHRoZSBhcnJvdyBjYXVzZWQgYW4gYWxpZ25tZW50IG9mZnNldFxuICAgICAgLy8gdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGNoYW5nZSB0aGUgcG9zaXRpb25pbmcgY29vcmRpbmF0ZXMuXG4gICAgICBpZiAocGxhY2VtZW50ID09PSAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZSA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZS5wbGFjZW1lbnQpICYmIChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHggKyBkaWZmQ29vcmRzLngsXG4gICAgICAgIHk6IHkgKyBkaWZmQ29vcmRzLnksXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAuLi5kaWZmQ29vcmRzLFxuICAgICAgICAgIHBsYWNlbWVudFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IHNoaWZ0aW5nIGl0IGluIG9yZGVyIHRvXG4gKiBrZWVwIGl0IGluIHZpZXcgd2hlbiBpdCB3aWxsIG92ZXJmbG93IHRoZSBjbGlwcGluZyBib3VuZGFyeS5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaGlmdFxuICovXG5jb25zdCBzaGlmdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc2hpZnQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBsaW1pdGVyID0ge1xuICAgICAgICAgIGZuOiBfcmVmID0+IHtcbiAgICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgIHlcbiAgICAgICAgICAgIH0gPSBfcmVmO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBjcm9zc0F4aXMgPSBnZXRTaWRlQXhpcyhnZXRTaWRlKHBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgbWFpbkF4aXMgPSBnZXRPcHBvc2l0ZUF4aXMoY3Jvc3NBeGlzKTtcbiAgICAgIGxldCBtYWluQXhpc0Nvb3JkID0gY29vcmRzW21haW5BeGlzXTtcbiAgICAgIGxldCBjcm9zc0F4aXNDb29yZCA9IGNvb3Jkc1tjcm9zc0F4aXNdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgY29uc3QgbWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyAndG9wJyA6ICdsZWZ0JztcbiAgICAgICAgY29uc3QgbWF4U2lkZSA9IG1haW5BeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IG1haW5BeGlzQ29vcmQgKyBvdmVyZmxvd1ttaW5TaWRlXTtcbiAgICAgICAgY29uc3QgbWF4ID0gbWFpbkF4aXNDb29yZCAtIG92ZXJmbG93W21heFNpZGVdO1xuICAgICAgICBtYWluQXhpc0Nvb3JkID0gY2xhbXAobWluLCBtYWluQXhpc0Nvb3JkLCBtYXgpO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IG1pblNpZGUgPSBjcm9zc0F4aXMgPT09ICd5JyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgICAgICBjb25zdCBtYXhTaWRlID0gY3Jvc3NBeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IGNyb3NzQXhpc0Nvb3JkICsgb3ZlcmZsb3dbbWluU2lkZV07XG4gICAgICAgIGNvbnN0IG1heCA9IGNyb3NzQXhpc0Nvb3JkIC0gb3ZlcmZsb3dbbWF4U2lkZV07XG4gICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gY2xhbXAobWluLCBjcm9zc0F4aXNDb29yZCwgbWF4KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxpbWl0ZWRDb29yZHMgPSBsaW1pdGVyLmZuKHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5saW1pdGVkQ29vcmRzLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgeDogbGltaXRlZENvb3Jkcy54IC0geCxcbiAgICAgICAgICB5OiBsaW1pdGVkQ29vcmRzLnkgLSB5LFxuICAgICAgICAgIGVuYWJsZWQ6IHtcbiAgICAgICAgICAgIFttYWluQXhpc106IGNoZWNrTWFpbkF4aXMsXG4gICAgICAgICAgICBbY3Jvc3NBeGlzXTogY2hlY2tDcm9zc0F4aXNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgb3B0aW9ucyxcbiAgICBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBtaWRkbGV3YXJlRGF0YVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBvZmZzZXQgPSAwLFxuICAgICAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXG4gICAgICAgIGNyb3NzQXhpczogY2hlY2tDcm9zc0F4aXMgPSB0cnVlXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9O1xuICAgICAgY29uc3QgY3Jvc3NBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IG1haW5BeGlzID0gZ2V0T3Bwb3NpdGVBeGlzKGNyb3NzQXhpcyk7XG4gICAgICBsZXQgbWFpbkF4aXNDb29yZCA9IGNvb3Jkc1ttYWluQXhpc107XG4gICAgICBsZXQgY3Jvc3NBeGlzQ29vcmQgPSBjb29yZHNbY3Jvc3NBeGlzXTtcbiAgICAgIGNvbnN0IHJhd09mZnNldCA9IGV2YWx1YXRlKG9mZnNldCwgc3RhdGUpO1xuICAgICAgY29uc3QgY29tcHV0ZWRPZmZzZXQgPSB0eXBlb2YgcmF3T2Zmc2V0ID09PSAnbnVtYmVyJyA/IHtcbiAgICAgICAgbWFpbkF4aXM6IHJhd09mZnNldCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwXG4gICAgICB9IDoge1xuICAgICAgICBtYWluQXhpczogMCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwLFxuICAgICAgICAuLi5yYXdPZmZzZXRcbiAgICAgIH07XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgICAgICBjb25zdCBsaW1pdE1pbiA9IHJlY3RzLnJlZmVyZW5jZVttYWluQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGNvbnN0IGxpbWl0TWF4ID0gcmVjdHMucmVmZXJlbmNlW21haW5BeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dIC0gY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGlmIChtYWluQXhpc0Nvb3JkIDwgbGltaXRNaW4pIHtcbiAgICAgICAgICBtYWluQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAobWFpbkF4aXNDb29yZCA+IGxpbWl0TWF4KSB7XG4gICAgICAgICAgbWFpbkF4aXNDb29yZCA9IGxpbWl0TWF4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRvZmZzZSwgX21pZGRsZXdhcmVEYXRhJG9mZnNlMjtcbiAgICAgICAgY29uc3QgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICAgICAgY29uc3QgaXNPcmlnaW5TaWRlID0gb3JpZ2luU2lkZXMuaGFzKGdldFNpZGUocGxhY2VtZW50KSk7XG4gICAgICAgIGNvbnN0IGxpbWl0TWluID0gcmVjdHMucmVmZXJlbmNlW2Nyb3NzQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgKGlzT3JpZ2luU2lkZSA/ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlW2Nyb3NzQXhpc10pIHx8IDAgOiAwKSArIChpc09yaWdpblNpZGUgPyAwIDogY29tcHV0ZWRPZmZzZXQuY3Jvc3NBeGlzKTtcbiAgICAgICAgY29uc3QgbGltaXRNYXggPSByZWN0cy5yZWZlcmVuY2VbY3Jvc3NBeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dICsgKGlzT3JpZ2luU2lkZSA/IDAgOiAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZTIgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2UyW2Nyb3NzQXhpc10pIHx8IDApIC0gKGlzT3JpZ2luU2lkZSA/IGNvbXB1dGVkT2Zmc2V0LmNyb3NzQXhpcyA6IDApO1xuICAgICAgICBpZiAoY3Jvc3NBeGlzQ29vcmQgPCBsaW1pdE1pbikge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBeGlzQ29vcmQgPiBsaW1pdE1heCkge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNYXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCDigJRcbiAqIGZvciBpbnN0YW5jZSwgcHJldmVudCBpdCBmcm9tIG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyBib3VuZGFyeSBvciBtYXRjaCB0aGVcbiAqIHdpZHRoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaXplXG4gKi9cbmNvbnN0IHNpemUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3NpemUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfc3RhdGUkbWlkZGxld2FyZURhdGEsIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTI7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBlbGVtZW50c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBhcHBseSA9ICgpID0+IHt9LFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaXNZQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfSA9IHJlY3RzLmZsb2F0aW5nO1xuICAgICAgbGV0IGhlaWdodFNpZGU7XG4gICAgICBsZXQgd2lkdGhTaWRlO1xuICAgICAgaWYgKHNpZGUgPT09ICd0b3AnIHx8IHNpZGUgPT09ICdib3R0b20nKSB7XG4gICAgICAgIGhlaWdodFNpZGUgPSBzaWRlO1xuICAgICAgICB3aWR0aFNpZGUgPSBhbGlnbm1lbnQgPT09ICgoYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpKSA/ICdzdGFydCcgOiAnZW5kJykgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2lkdGhTaWRlID0gc2lkZTtcbiAgICAgICAgaGVpZ2h0U2lkZSA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyAndG9wJyA6ICdib3R0b20nO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nSGVpZ2h0ID0gaGVpZ2h0IC0gb3ZlcmZsb3cudG9wIC0gb3ZlcmZsb3cuYm90dG9tO1xuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nV2lkdGggPSB3aWR0aCAtIG92ZXJmbG93LmxlZnQgLSBvdmVyZmxvdy5yaWdodDtcbiAgICAgIGNvbnN0IG92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0ID0gbWluKGhlaWdodCAtIG92ZXJmbG93W2hlaWdodFNpZGVdLCBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3dBdmFpbGFibGVXaWR0aCA9IG1pbih3aWR0aCAtIG92ZXJmbG93W3dpZHRoU2lkZV0sIG1heGltdW1DbGlwcGluZ1dpZHRoKTtcbiAgICAgIGNvbnN0IG5vU2hpZnQgPSAhc3RhdGUubWlkZGxld2FyZURhdGEuc2hpZnQ7XG4gICAgICBsZXQgYXZhaWxhYmxlSGVpZ2h0ID0gb3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQ7XG4gICAgICBsZXQgYXZhaWxhYmxlV2lkdGggPSBvdmVyZmxvd0F2YWlsYWJsZVdpZHRoO1xuICAgICAgaWYgKChfc3RhdGUkbWlkZGxld2FyZURhdGEgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEuZW5hYmxlZC54KSB7XG4gICAgICAgIGF2YWlsYWJsZVdpZHRoID0gbWF4aW11bUNsaXBwaW5nV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAoKF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTIgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEyLmVuYWJsZWQueSkge1xuICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQ7XG4gICAgICB9XG4gICAgICBpZiAobm9TaGlmdCAmJiAhYWxpZ25tZW50KSB7XG4gICAgICAgIGNvbnN0IHhNaW4gPSBtYXgob3ZlcmZsb3cubGVmdCwgMCk7XG4gICAgICAgIGNvbnN0IHhNYXggPSBtYXgob3ZlcmZsb3cucmlnaHQsIDApO1xuICAgICAgICBjb25zdCB5TWluID0gbWF4KG92ZXJmbG93LnRvcCwgMCk7XG4gICAgICAgIGNvbnN0IHlNYXggPSBtYXgob3ZlcmZsb3cuYm90dG9tLCAwKTtcbiAgICAgICAgaWYgKGlzWUF4aXMpIHtcbiAgICAgICAgICBhdmFpbGFibGVXaWR0aCA9IHdpZHRoIC0gMiAqICh4TWluICE9PSAwIHx8IHhNYXggIT09IDAgPyB4TWluICsgeE1heCA6IG1heChvdmVyZmxvdy5sZWZ0LCBvdmVyZmxvdy5yaWdodCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IGhlaWdodCAtIDIgKiAoeU1pbiAhPT0gMCB8fCB5TWF4ICE9PSAwID8geU1pbiArIHlNYXggOiBtYXgob3ZlcmZsb3cudG9wLCBvdmVyZmxvdy5ib3R0b20pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgYXBwbHkoe1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYXZhaWxhYmxlV2lkdGgsXG4gICAgICAgIGF2YWlsYWJsZUhlaWdodFxuICAgICAgfSk7XG4gICAgICBjb25zdCBuZXh0RGltZW5zaW9ucyA9IGF3YWl0IHBsYXRmb3JtLmdldERpbWVuc2lvbnMoZWxlbWVudHMuZmxvYXRpbmcpO1xuICAgICAgaWYgKHdpZHRoICE9PSBuZXh0RGltZW5zaW9ucy53aWR0aCB8fCBoZWlnaHQgIT09IG5leHREaW1lbnNpb25zLmhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICByZWN0czogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnQgeyBhcnJvdywgYXV0b1BsYWNlbWVudCwgY29tcHV0ZVBvc2l0aW9uLCBkZXRlY3RPdmVyZmxvdywgZmxpcCwgaGlkZSwgaW5saW5lLCBsaW1pdFNoaWZ0LCBvZmZzZXQsIHNoaWZ0LCBzaXplIH07XG4iLCJmdW5jdGlvbiBoYXNXaW5kb3coKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbn1cbmZ1bmN0aW9uIGdldE5vZGVOYW1lKG5vZGUpIHtcbiAgaWYgKGlzTm9kZShub2RlKSkge1xuICAgIHJldHVybiAobm9kZS5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgfVxuICAvLyBNb2NrZWQgbm9kZXMgaW4gdGVzdGluZyBlbnZpcm9ubWVudHMgbWF5IG5vdCBiZSBpbnN0YW5jZXMgb2YgTm9kZS4gQnlcbiAgLy8gcmV0dXJuaW5nIGAjZG9jdW1lbnRgIGFuIGluZmluaXRlIGxvb3Agd29uJ3Qgb2NjdXIuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjMxN1xuICByZXR1cm4gJyNkb2N1bWVudCc7XG59XG5mdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICB2YXIgX25vZGUkb3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIChub2RlID09IG51bGwgfHwgKF9ub2RlJG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSB8fCB3aW5kb3c7XG59XG5mdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQobm9kZSkge1xuICB2YXIgX3JlZjtcbiAgcmV0dXJuIChfcmVmID0gKGlzTm9kZShub2RlKSA/IG5vZGUub3duZXJEb2N1bWVudCA6IG5vZGUuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9yZWYuZG9jdW1lbnRFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNOb2RlKHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgTm9kZSB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuTm9kZTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkhUTUxFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNTaGFkb3dSb290KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkgfHwgdHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLlNoYWRvd1Jvb3Q7XG59XG5jb25zdCBpbnZhbGlkT3ZlcmZsb3dEaXNwbGF5VmFsdWVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWydpbmxpbmUnLCAnY29udGVudHMnXSk7XG5mdW5jdGlvbiBpc092ZXJmbG93RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICBvdmVyZmxvdyxcbiAgICBvdmVyZmxvd1gsXG4gICAgb3ZlcmZsb3dZLFxuICAgIGRpc3BsYXlcbiAgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkgJiYgIWludmFsaWRPdmVyZmxvd0Rpc3BsYXlWYWx1ZXMuaGFzKGRpc3BsYXkpO1xufVxuY29uc3QgdGFibGVFbGVtZW50cyA9IC8qI19fUFVSRV9fKi9uZXcgU2V0KFsndGFibGUnLCAndGQnLCAndGgnXSk7XG5mdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiB0YWJsZUVsZW1lbnRzLmhhcyhnZXROb2RlTmFtZShlbGVtZW50KSk7XG59XG5jb25zdCB0b3BMYXllclNlbGVjdG9ycyA9IFsnOnBvcG92ZXItb3BlbicsICc6bW9kYWwnXTtcbmZ1bmN0aW9uIGlzVG9wTGF5ZXIoZWxlbWVudCkge1xuICByZXR1cm4gdG9wTGF5ZXJTZWxlY3RvcnMuc29tZShzZWxlY3RvciA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBlbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgIH0gY2F0Y2ggKF9lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbn1cbmNvbnN0IHRyYW5zZm9ybVByb3BlcnRpZXMgPSBbJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUnLCAnc2NhbGUnLCAncm90YXRlJywgJ3BlcnNwZWN0aXZlJ107XG5jb25zdCB3aWxsQ2hhbmdlVmFsdWVzID0gWyd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlJywgJ3NjYWxlJywgJ3JvdGF0ZScsICdwZXJzcGVjdGl2ZScsICdmaWx0ZXInXTtcbmNvbnN0IGNvbnRhaW5WYWx1ZXMgPSBbJ3BhaW50JywgJ2xheW91dCcsICdzdHJpY3QnLCAnY29udGVudCddO1xuZnVuY3Rpb24gaXNDb250YWluaW5nQmxvY2soZWxlbWVudE9yQ3NzKSB7XG4gIGNvbnN0IHdlYmtpdCA9IGlzV2ViS2l0KCk7XG4gIGNvbnN0IGNzcyA9IGlzRWxlbWVudChlbGVtZW50T3JDc3MpID8gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50T3JDc3MpIDogZWxlbWVudE9yQ3NzO1xuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdHJhbnNmb3Jtcy0yLyNpbmRpdmlkdWFsLXRyYW5zZm9ybXNcbiAgcmV0dXJuIHRyYW5zZm9ybVByb3BlcnRpZXMuc29tZSh2YWx1ZSA9PiBjc3NbdmFsdWVdID8gY3NzW3ZhbHVlXSAhPT0gJ25vbmUnIDogZmFsc2UpIHx8IChjc3MuY29udGFpbmVyVHlwZSA/IGNzcy5jb250YWluZXJUeXBlICE9PSAnbm9ybWFsJyA6IGZhbHNlKSB8fCAhd2Via2l0ICYmIChjc3MuYmFja2Ryb3BGaWx0ZXIgPyBjc3MuYmFja2Ryb3BGaWx0ZXIgIT09ICdub25lJyA6IGZhbHNlKSB8fCAhd2Via2l0ICYmIChjc3MuZmlsdGVyID8gY3NzLmZpbHRlciAhPT0gJ25vbmUnIDogZmFsc2UpIHx8IHdpbGxDaGFuZ2VWYWx1ZXMuc29tZSh2YWx1ZSA9PiAoY3NzLndpbGxDaGFuZ2UgfHwgJycpLmluY2x1ZGVzKHZhbHVlKSkgfHwgY29udGFpblZhbHVlcy5zb21lKHZhbHVlID0+IChjc3MuY29udGFpbiB8fCAnJykuaW5jbHVkZXModmFsdWUpKTtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKGN1cnJlbnROb2RlKSkge1xuICAgIGlmIChpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2UgaWYgKGlzVG9wTGF5ZXIoY3VycmVudE5vZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzV2ViS2l0KCkge1xuICBpZiAodHlwZW9mIENTUyA9PT0gJ3VuZGVmaW5lZCcgfHwgIUNTUy5zdXBwb3J0cykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gQ1NTLnN1cHBvcnRzKCctd2Via2l0LWJhY2tkcm9wLWZpbHRlcicsICdub25lJyk7XG59XG5jb25zdCBsYXN0VHJhdmVyc2FibGVOb2RlTmFtZXMgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXSk7XG5mdW5jdGlvbiBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUobm9kZSkge1xuICByZXR1cm4gbGFzdFRyYXZlcnNhYmxlTm9kZU5hbWVzLmhhcyhnZXROb2RlTmFtZShub2RlKSk7XG59XG5mdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufVxuZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KSB7XG4gIGlmIChpc0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbFgsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhcmVudE5vZGUobm9kZSkge1xuICBpZiAoZ2V0Tm9kZU5hbWUobm9kZSkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBub2RlO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9XG4gIC8vIFN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlLlxuICBub2RlLmFzc2lnbmVkU2xvdCB8fFxuICAvLyBET00gRWxlbWVudCBkZXRlY3RlZC5cbiAgbm9kZS5wYXJlbnROb2RlIHx8XG4gIC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWQuXG4gIGlzU2hhZG93Um9vdChub2RlKSAmJiBub2RlLmhvc3QgfHxcbiAgLy8gRmFsbGJhY2suXG4gIGdldERvY3VtZW50RWxlbWVudChub2RlKTtcbiAgcmV0dXJuIGlzU2hhZG93Um9vdChyZXN1bHQpID8gcmVzdWx0Lmhvc3QgOiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKG5vZGUpO1xuICBpZiAoaXNMYXN0VHJhdmVyc2FibGVOb2RlKHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudCA/IG5vZGUub3duZXJEb2N1bWVudC5ib2R5IDogbm9kZS5ib2R5O1xuICB9XG4gIGlmIChpc0hUTUxFbGVtZW50KHBhcmVudE5vZGUpICYmIGlzT3ZlcmZsb3dFbGVtZW50KHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKHBhcmVudE5vZGUpO1xufVxuZnVuY3Rpb24gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMobm9kZSwgbGlzdCwgdHJhdmVyc2VJZnJhbWVzKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50MjtcbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuICBpZiAodHJhdmVyc2VJZnJhbWVzID09PSB2b2lkIDApIHtcbiAgICB0cmF2ZXJzZUlmcmFtZXMgPSB0cnVlO1xuICB9XG4gIGNvbnN0IHNjcm9sbGFibGVBbmNlc3RvciA9IGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKG5vZGUpO1xuICBjb25zdCBpc0JvZHkgPSBzY3JvbGxhYmxlQW5jZXN0b3IgPT09ICgoX25vZGUkb3duZXJEb2N1bWVudDIgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50Mi5ib2R5KTtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KHNjcm9sbGFibGVBbmNlc3Rvcik7XG4gIGlmIChpc0JvZHkpIHtcbiAgICBjb25zdCBmcmFtZUVsZW1lbnQgPSBnZXRGcmFtZUVsZW1lbnQod2luKTtcbiAgICByZXR1cm4gbGlzdC5jb25jYXQod2luLCB3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzT3ZlcmZsb3dFbGVtZW50KHNjcm9sbGFibGVBbmNlc3RvcikgPyBzY3JvbGxhYmxlQW5jZXN0b3IgOiBbXSwgZnJhbWVFbGVtZW50ICYmIHRyYXZlcnNlSWZyYW1lcyA/IGdldE92ZXJmbG93QW5jZXN0b3JzKGZyYW1lRWxlbWVudCkgOiBbXSk7XG4gIH1cbiAgcmV0dXJuIGxpc3QuY29uY2F0KHNjcm9sbGFibGVBbmNlc3RvciwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoc2Nyb2xsYWJsZUFuY2VzdG9yLCBbXSwgdHJhdmVyc2VJZnJhbWVzKSk7XG59XG5mdW5jdGlvbiBnZXRGcmFtZUVsZW1lbnQod2luKSB7XG4gIHJldHVybiB3aW4ucGFyZW50ICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih3aW4ucGFyZW50KSA/IHdpbi5mcmFtZUVsZW1lbnQgOiBudWxsO1xufVxuXG5leHBvcnQgeyBnZXRDb21wdXRlZFN0eWxlLCBnZXRDb250YWluaW5nQmxvY2ssIGdldERvY3VtZW50RWxlbWVudCwgZ2V0RnJhbWVFbGVtZW50LCBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvciwgZ2V0Tm9kZU5hbWUsIGdldE5vZGVTY3JvbGwsIGdldE92ZXJmbG93QW5jZXN0b3JzLCBnZXRQYXJlbnROb2RlLCBnZXRXaW5kb3csIGlzQ29udGFpbmluZ0Jsb2NrLCBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzTGFzdFRyYXZlcnNhYmxlTm9kZSwgaXNOb2RlLCBpc092ZXJmbG93RWxlbWVudCwgaXNTaGFkb3dSb290LCBpc1RhYmxlRWxlbWVudCwgaXNUb3BMYXllciwgaXNXZWJLaXQgfTtcbiIsImltcG9ydCB7IHJlY3RUb0NsaWVudFJlY3QsIGFycm93IGFzIGFycm93JDEsIGF1dG9QbGFjZW1lbnQgYXMgYXV0b1BsYWNlbWVudCQxLCBkZXRlY3RPdmVyZmxvdyBhcyBkZXRlY3RPdmVyZmxvdyQxLCBmbGlwIGFzIGZsaXAkMSwgaGlkZSBhcyBoaWRlJDEsIGlubGluZSBhcyBpbmxpbmUkMSwgbGltaXRTaGlmdCBhcyBsaW1pdFNoaWZ0JDEsIG9mZnNldCBhcyBvZmZzZXQkMSwgc2hpZnQgYXMgc2hpZnQkMSwgc2l6ZSBhcyBzaXplJDEsIGNvbXB1dGVQb3NpdGlvbiBhcyBjb21wdXRlUG9zaXRpb24kMSB9IGZyb20gJ0BmbG9hdGluZy11aS9jb3JlJztcbmltcG9ydCB7IHJvdW5kLCBjcmVhdGVDb29yZHMsIG1heCwgbWluLCBmbG9vciB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5pbXBvcnQgeyBnZXRDb21wdXRlZFN0eWxlIGFzIGdldENvbXB1dGVkU3R5bGUkMSwgaXNIVE1MRWxlbWVudCwgaXNFbGVtZW50LCBnZXRXaW5kb3csIGlzV2ViS2l0LCBnZXRGcmFtZUVsZW1lbnQsIGdldE5vZGVTY3JvbGwsIGdldERvY3VtZW50RWxlbWVudCwgaXNUb3BMYXllciwgZ2V0Tm9kZU5hbWUsIGlzT3ZlcmZsb3dFbGVtZW50LCBnZXRPdmVyZmxvd0FuY2VzdG9ycywgZ2V0UGFyZW50Tm9kZSwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc0NvbnRhaW5pbmdCbG9jaywgaXNUYWJsZUVsZW1lbnQsIGdldENvbnRhaW5pbmdCbG9jayB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuZXhwb3J0IHsgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcblxuZnVuY3Rpb24gZ2V0Q3NzRGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUkMShlbGVtZW50KTtcbiAgLy8gSW4gdGVzdGluZyBlbnZpcm9ubWVudHMsIHRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzIGFyZSBlbXB0eVxuICAvLyBzdHJpbmdzIGZvciBTVkcgZWxlbWVudHMsIHJldHVybmluZyBOYU4uIEZhbGxiYWNrIHRvIGAwYCBpbiB0aGlzIGNhc2UuXG4gIGxldCB3aWR0aCA9IHBhcnNlRmxvYXQoY3NzLndpZHRoKSB8fCAwO1xuICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChjc3MuaGVpZ2h0KSB8fCAwO1xuICBjb25zdCBoYXNPZmZzZXQgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBvZmZzZXRXaWR0aCA9IGhhc09mZnNldCA/IGVsZW1lbnQub2Zmc2V0V2lkdGggOiB3aWR0aDtcbiAgY29uc3Qgb2Zmc2V0SGVpZ2h0ID0gaGFzT2Zmc2V0ID8gZWxlbWVudC5vZmZzZXRIZWlnaHQgOiBoZWlnaHQ7XG4gIGNvbnN0IHNob3VsZEZhbGxiYWNrID0gcm91bmQod2lkdGgpICE9PSBvZmZzZXRXaWR0aCB8fCByb3VuZChoZWlnaHQpICE9PSBvZmZzZXRIZWlnaHQ7XG4gIGlmIChzaG91bGRGYWxsYmFjaykge1xuICAgIHdpZHRoID0gb2Zmc2V0V2lkdGg7XG4gICAgaGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0O1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICQ6IHNob3VsZEZhbGxiYWNrXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVud3JhcEVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gIWlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgOiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRTY2FsZShlbGVtZW50KSB7XG4gIGNvbnN0IGRvbUVsZW1lbnQgPSB1bndyYXBFbGVtZW50KGVsZW1lbnQpO1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZG9tRWxlbWVudCkpIHtcbiAgICByZXR1cm4gY3JlYXRlQ29vcmRzKDEpO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBkb21FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZG9tRWxlbWVudCk7XG4gIGxldCB4ID0gKCQgPyByb3VuZChyZWN0LndpZHRoKSA6IHJlY3Qud2lkdGgpIC8gd2lkdGg7XG4gIGxldCB5ID0gKCQgPyByb3VuZChyZWN0LmhlaWdodCkgOiByZWN0LmhlaWdodCkgLyBoZWlnaHQ7XG5cbiAgLy8gMCwgTmFOLCBvciBJbmZpbml0eSBzaG91bGQgYWx3YXlzIGZhbGxiYWNrIHRvIDEuXG5cbiAgaWYgKCF4IHx8ICFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICB4ID0gMTtcbiAgfVxuICBpZiAoIXkgfHwgIU51bWJlci5pc0Zpbml0ZSh5KSkge1xuICAgIHkgPSAxO1xuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmNvbnN0IG5vT2Zmc2V0cyA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb29yZHMoMCk7XG5mdW5jdGlvbiBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBpZiAoIWlzV2ViS2l0KCkgfHwgIXdpbi52aXN1YWxWaWV3cG9ydCkge1xuICAgIHJldHVybiBub09mZnNldHM7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCxcbiAgICB5OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wXG4gIH07XG59XG5mdW5jdGlvbiBzaG91bGRBZGRWaXN1YWxPZmZzZXRzKGVsZW1lbnQsIGlzRml4ZWQsIGZsb2F0aW5nT2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cbiAgaWYgKCFmbG9hdGluZ09mZnNldFBhcmVudCB8fCBpc0ZpeGVkICYmIGZsb2F0aW5nT2Zmc2V0UGFyZW50ICE9PSBnZXRXaW5kb3coZWxlbWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzRml4ZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSwgb2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBkb21FbGVtZW50ID0gdW53cmFwRWxlbWVudChlbGVtZW50KTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBpZiAoaW5jbHVkZVNjYWxlKSB7XG4gICAgaWYgKG9mZnNldFBhcmVudCkge1xuICAgICAgaWYgKGlzRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHNjYWxlID0gZ2V0U2NhbGUob2Zmc2V0UGFyZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IHNob3VsZEFkZFZpc3VhbE9mZnNldHMoZG9tRWxlbWVudCwgaXNGaXhlZFN0cmF0ZWd5LCBvZmZzZXRQYXJlbnQpID8gZ2V0VmlzdWFsT2Zmc2V0cyhkb21FbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgbGV0IHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgdmlzdWFsT2Zmc2V0cy54KSAvIHNjYWxlLng7XG4gIGxldCB5ID0gKGNsaWVudFJlY3QudG9wICsgdmlzdWFsT2Zmc2V0cy55KSAvIHNjYWxlLnk7XG4gIGxldCB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZS54O1xuICBsZXQgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZS55O1xuICBpZiAoZG9tRWxlbWVudCkge1xuICAgIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhkb21FbGVtZW50KTtcbiAgICBjb25zdCBvZmZzZXRXaW4gPSBvZmZzZXRQYXJlbnQgJiYgaXNFbGVtZW50KG9mZnNldFBhcmVudCkgPyBnZXRXaW5kb3cob2Zmc2V0UGFyZW50KSA6IG9mZnNldFBhcmVudDtcbiAgICBsZXQgY3VycmVudFdpbiA9IHdpbjtcbiAgICBsZXQgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB3aGlsZSAoY3VycmVudElGcmFtZSAmJiBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0V2luICE9PSBjdXJyZW50V2luKSB7XG4gICAgICBjb25zdCBpZnJhbWVTY2FsZSA9IGdldFNjYWxlKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgaWZyYW1lUmVjdCA9IGN1cnJlbnRJRnJhbWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlJDEoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBsZWZ0ID0gaWZyYW1lUmVjdC5sZWZ0ICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50TGVmdCArIHBhcnNlRmxvYXQoY3NzLnBhZGRpbmdMZWZ0KSkgKiBpZnJhbWVTY2FsZS54O1xuICAgICAgY29uc3QgdG9wID0gaWZyYW1lUmVjdC50b3AgKyAoY3VycmVudElGcmFtZS5jbGllbnRUb3AgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nVG9wKSkgKiBpZnJhbWVTY2FsZS55O1xuICAgICAgeCAqPSBpZnJhbWVTY2FsZS54O1xuICAgICAgeSAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgd2lkdGggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIGhlaWdodCAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgeCArPSBsZWZ0O1xuICAgICAgeSArPSB0b3A7XG4gICAgICBjdXJyZW50V2luID0gZ2V0V2luZG93KGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3Qoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfSk7XG59XG5cbi8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbi8vIGluY29ycmVjdCBmb3IgUlRMLlxuZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50LCByZWN0KSB7XG4gIGNvbnN0IGxlZnRTY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG4gIGlmICghcmVjdCkge1xuICAgIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgbGVmdFNjcm9sbDtcbiAgfVxuICByZXR1cm4gcmVjdC5sZWZ0ICsgbGVmdFNjcm9sbDtcbn1cblxuZnVuY3Rpb24gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkge1xuICBjb25zdCBodG1sUmVjdCA9IGRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgeCA9IGh0bWxSZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50LCBodG1sUmVjdCk7XG4gIGNvbnN0IHkgPSBodG1sUmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wO1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdChfcmVmKSB7XG4gIGxldCB7XG4gICAgZWxlbWVudHMsXG4gICAgcmVjdCxcbiAgICBvZmZzZXRQYXJlbnQsXG4gICAgc3RyYXRlZ3lcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGlzRml4ZWQgPSBzdHJhdGVneSA9PT0gJ2ZpeGVkJztcbiAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IHRvcExheWVyID0gZWxlbWVudHMgPyBpc1RvcExheWVyKGVsZW1lbnRzLmZsb2F0aW5nKSA6IGZhbHNlO1xuICBpZiAob2Zmc2V0UGFyZW50ID09PSBkb2N1bWVudEVsZW1lbnQgfHwgdG9wTGF5ZXIgJiYgaXNGaXhlZCkge1xuICAgIHJldHVybiByZWN0O1xuICB9XG4gIGxldCBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuICBjb25zdCBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBjb25zdCBvZmZzZXRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCk7XG4gICAgICBzY2FsZSA9IGdldFNjYWxlKG9mZnNldFBhcmVudCk7XG4gICAgICBvZmZzZXRzLnggPSBvZmZzZXRSZWN0LnggKyBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSA9IG9mZnNldFJlY3QueSArIG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfVxuICB9XG4gIGNvbnN0IGh0bWxPZmZzZXQgPSBkb2N1bWVudEVsZW1lbnQgJiYgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkID8gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHJlY3Qud2lkdGggKiBzY2FsZS54LFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHQgKiBzY2FsZS55LFxuICAgIHg6IHJlY3QueCAqIHNjYWxlLnggLSBzY3JvbGwuc2Nyb2xsTGVmdCAqIHNjYWxlLnggKyBvZmZzZXRzLnggKyBodG1sT2Zmc2V0LngsXG4gICAgeTogcmVjdC55ICogc2NhbGUueSAtIHNjcm9sbC5zY3JvbGxUb3AgKiBzY2FsZS55ICsgb2Zmc2V0cy55ICsgaHRtbE9mZnNldC55XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oZWxlbWVudC5nZXRDbGllbnRSZWN0cygpKTtcbn1cblxuLy8gR2V0cyB0aGUgZW50aXJlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgZG9jdW1lbnQgYXJlYSwgZXZlbiBleHRlbmRpbmcgb3V0c2lkZVxuLy8gb2YgdGhlIGA8aHRtbD5gIGFuZCBgPGJvZHk+YCByZWN0IGJvdW5kcyBpZiBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZS5cbmZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHNjcm9sbCA9IGdldE5vZGVTY3JvbGwoZWxlbWVudCk7XG4gIGNvbnN0IGJvZHkgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgY29uc3Qgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgYm9keS5jbGllbnRXaWR0aCk7XG4gIGNvbnN0IGhlaWdodCA9IG1heChodG1sLnNjcm9sbEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGJvZHkuc2Nyb2xsSGVpZ2h0LCBib2R5LmNsaWVudEhlaWdodCk7XG4gIGxldCB4ID0gLXNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgY29uc3QgeSA9IC1zY3JvbGwuc2Nyb2xsVG9wO1xuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZSQxKGJvZHkpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5LmNsaWVudFdpZHRoKSAtIHdpZHRoO1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG4vLyBTYWZldHkgY2hlY2s6IGVuc3VyZSB0aGUgc2Nyb2xsYmFyIHNwYWNlIGlzIHJlYXNvbmFibGUgaW4gY2FzZSB0aGlzXG4vLyBjYWxjdWxhdGlvbiBpcyBhZmZlY3RlZCBieSB1bnVzdWFsIHN0eWxlcy5cbi8vIE1vc3Qgc2Nyb2xsYmFycyBsZWF2ZSAxNS0xOHB4IG9mIHNwYWNlLlxuY29uc3QgU0NST0xMQkFSX01BWCA9IDI1O1xuZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgY29uc3QgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgY29uc3QgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIGxldCB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIGxldCBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgbGV0IHggPSAwO1xuICBsZXQgeSA9IDA7XG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIGNvbnN0IHZpc3VhbFZpZXdwb3J0QmFzZWQgPSBpc1dlYktpdCgpO1xuICAgIGlmICghdmlzdWFsVmlld3BvcnRCYXNlZCB8fCB2aXN1YWxWaWV3cG9ydEJhc2VkICYmIHN0cmF0ZWd5ID09PSAnZml4ZWQnKSB7XG4gICAgICB4ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdDtcbiAgICAgIHkgPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG4gIGNvbnN0IHdpbmRvd1Njcm9sbGJhclggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGh0bWwpO1xuICAvLyA8aHRtbD4gYG92ZXJmbG93OiBoaWRkZW5gICsgYHNjcm9sbGJhci1ndXR0ZXI6IHN0YWJsZWAgcmVkdWNlcyB0aGVcbiAgLy8gdmlzdWFsIHdpZHRoIG9mIHRoZSA8aHRtbD4gYnV0IHRoaXMgaXMgbm90IGNvbnNpZGVyZWQgaW4gdGhlIHNpemVcbiAgLy8gb2YgYGh0bWwuY2xpZW50V2lkdGhgLlxuICBpZiAod2luZG93U2Nyb2xsYmFyWCA8PSAwKSB7XG4gICAgY29uc3QgZG9jID0gaHRtbC5vd25lckRvY3VtZW50O1xuICAgIGNvbnN0IGJvZHkgPSBkb2MuYm9keTtcbiAgICBjb25zdCBib2R5U3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZShib2R5KTtcbiAgICBjb25zdCBib2R5TWFyZ2luSW5saW5lID0gZG9jLmNvbXBhdE1vZGUgPT09ICdDU1MxQ29tcGF0JyA/IHBhcnNlRmxvYXQoYm9keVN0eWxlcy5tYXJnaW5MZWZ0KSArIHBhcnNlRmxvYXQoYm9keVN0eWxlcy5tYXJnaW5SaWdodCkgfHwgMCA6IDA7XG4gICAgY29uc3QgY2xpcHBpbmdTdGFibGVTY3JvbGxiYXJXaWR0aCA9IE1hdGguYWJzKGh0bWwuY2xpZW50V2lkdGggLSBib2R5LmNsaWVudFdpZHRoIC0gYm9keU1hcmdpbklubGluZSk7XG4gICAgaWYgKGNsaXBwaW5nU3RhYmxlU2Nyb2xsYmFyV2lkdGggPD0gU0NST0xMQkFSX01BWCkge1xuICAgICAgd2lkdGggLT0gY2xpcHBpbmdTdGFibGVTY3JvbGxiYXJXaWR0aDtcbiAgICB9XG4gIH0gZWxzZSBpZiAod2luZG93U2Nyb2xsYmFyWCA8PSBTQ1JPTExCQVJfTUFYKSB7XG4gICAgLy8gSWYgdGhlIDxib2R5PiBzY3JvbGxiYXIgaXMgb24gdGhlIGxlZnQsIHRoZSB3aWR0aCBuZWVkcyB0byBiZSBleHRlbmRlZFxuICAgIC8vIGJ5IHRoZSBzY3JvbGxiYXIgYW1vdW50IHNvIHRoZXJlIGlzbid0IGV4dHJhIHNwYWNlIG9uIHRoZSByaWdodC5cbiAgICB3aWR0aCArPSB3aW5kb3dTY3JvbGxiYXJYO1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5jb25zdCBhYnNvbHV0ZU9yRml4ZWQgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2Fic29sdXRlJywgJ2ZpeGVkJ10pO1xuLy8gUmV0dXJucyB0aGUgaW5uZXIgY2xpZW50IHJlY3QsIHN1YnRyYWN0aW5nIHNjcm9sbGJhcnMgaWYgcHJlc2VudC5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICBjb25zdCB0b3AgPSBjbGllbnRSZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICBjb25zdCBsZWZ0ID0gY2xpZW50UmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICBjb25zdCBzY2FsZSA9IGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRTY2FsZShlbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygxKTtcbiAgY29uc3Qgd2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoICogc2NhbGUueDtcbiAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQgKiBzY2FsZS55O1xuICBjb25zdCB4ID0gbGVmdCAqIHNjYWxlLng7XG4gIGNvbnN0IHkgPSB0b3AgKiBzY2FsZS55O1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkge1xuICBsZXQgcmVjdDtcbiAgaWYgKGNsaXBwaW5nQW5jZXN0b3IgPT09ICd2aWV3cG9ydCcpIHtcbiAgICByZWN0ID0gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KTtcbiAgfSBlbHNlIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAnZG9jdW1lbnQnKSB7XG4gICAgcmVjdCA9IGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpO1xuICB9IGVsc2UgaWYgKGlzRWxlbWVudChjbGlwcGluZ0FuY2VzdG9yKSkge1xuICAgIHJlY3QgPSBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IGdldFZpc3VhbE9mZnNldHMoZWxlbWVudCk7XG4gICAgcmVjdCA9IHtcbiAgICAgIHg6IGNsaXBwaW5nQW5jZXN0b3IueCAtIHZpc3VhbE9mZnNldHMueCxcbiAgICAgIHk6IGNsaXBwaW5nQW5jZXN0b3IueSAtIHZpc3VhbE9mZnNldHMueSxcbiAgICAgIHdpZHRoOiBjbGlwcGluZ0FuY2VzdG9yLndpZHRoLFxuICAgICAgaGVpZ2h0OiBjbGlwcGluZ0FuY2VzdG9yLmhlaWdodFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3QocmVjdCk7XG59XG5mdW5jdGlvbiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgc3RvcE5vZGUpIHtcbiAgY29uc3QgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIGlmIChwYXJlbnROb2RlID09PSBzdG9wTm9kZSB8fCAhaXNFbGVtZW50KHBhcmVudE5vZGUpIHx8IGlzTGFzdFRyYXZlcnNhYmxlTm9kZShwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSQxKHBhcmVudE5vZGUpLnBvc2l0aW9uID09PSAnZml4ZWQnIHx8IGhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvcihwYXJlbnROb2RlLCBzdG9wTm9kZSk7XG59XG5cbi8vIEEgXCJjbGlwcGluZyBhbmNlc3RvclwiIGlzIGFuIGBvdmVyZmxvd2AgZWxlbWVudCB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgY2hpbGQgZWxlbWVudHMuIFRoaXMgcmV0dXJucyBhbGwgY2xpcHBpbmcgYW5jZXN0b3JzXG4vLyBvZiB0aGUgZ2l2ZW4gZWxlbWVudCB1cCB0aGUgdHJlZS5cbmZ1bmN0aW9uIGdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyhlbGVtZW50LCBjYWNoZSkge1xuICBjb25zdCBjYWNoZWRSZXN1bHQgPSBjYWNoZS5nZXQoZWxlbWVudCk7XG4gIGlmIChjYWNoZWRSZXN1bHQpIHtcbiAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICB9XG4gIGxldCByZXN1bHQgPSBnZXRPdmVyZmxvd0FuY2VzdG9ycyhlbGVtZW50LCBbXSwgZmFsc2UpLmZpbHRlcihlbCA9PiBpc0VsZW1lbnQoZWwpICYmIGdldE5vZGVOYW1lKGVsKSAhPT0gJ2JvZHknKTtcbiAgbGV0IGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgY29uc3QgZWxlbWVudElzRml4ZWQgPSBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCc7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgd2hpbGUgKGlzRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSQxKGN1cnJlbnROb2RlKTtcbiAgICBjb25zdCBjdXJyZW50Tm9kZUlzQ29udGFpbmluZyA9IGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKTtcbiAgICBpZiAoIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc2hvdWxkRHJvcEN1cnJlbnROb2RlID0gZWxlbWVudElzRml4ZWQgPyAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlIDogIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdzdGF0aWMnICYmICEhY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgJiYgYWJzb2x1dGVPckZpeGVkLmhhcyhjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZS5wb3NpdGlvbikgfHwgaXNPdmVyZmxvd0VsZW1lbnQoY3VycmVudE5vZGUpICYmICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgY3VycmVudE5vZGUpO1xuICAgIGlmIChzaG91bGREcm9wQ3VycmVudE5vZGUpIHtcbiAgICAgIC8vIERyb3Agbm9uLWNvbnRhaW5pbmcgYmxvY2tzLlxuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihhbmNlc3RvciA9PiBhbmNlc3RvciAhPT0gY3VycmVudE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWNvcmQgbGFzdCBjb250YWluaW5nIGJsb2NrIGZvciBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICBjYWNoZS5zZXQoZWxlbWVudCwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgYW5jZXN0b3JzLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBlbGVtZW50LFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9ID0gX3JlZjtcbiAgY29uc3QgZWxlbWVudENsaXBwaW5nQW5jZXN0b3JzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ0FuY2VzdG9ycycgPyBpc1RvcExheWVyKGVsZW1lbnQpID8gW10gOiBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMoZWxlbWVudCwgdGhpcy5fYykgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICBjb25zdCBjbGlwcGluZ0FuY2VzdG9ycyA9IFsuLi5lbGVtZW50Q2xpcHBpbmdBbmNlc3RvcnMsIHJvb3RCb3VuZGFyeV07XG4gIGNvbnN0IGZpcnN0Q2xpcHBpbmdBbmNlc3RvciA9IGNsaXBwaW5nQW5jZXN0b3JzWzBdO1xuICBjb25zdCBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ0FuY2VzdG9ycy5yZWR1Y2UoKGFjY1JlY3QsIGNsaXBwaW5nQW5jZXN0b3IpID0+IHtcbiAgICBjb25zdCByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGNsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgZmlyc3RDbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdCxcbiAgICBoZWlnaHQ6IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wLFxuICAgIHg6IGNsaXBwaW5nUmVjdC5sZWZ0LFxuICAgIHk6IGNsaXBwaW5nUmVjdC50b3BcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGVsZW1lbnQsIG9mZnNldFBhcmVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuXG4gIC8vIElmIHRoZSA8Ym9keT4gc2Nyb2xsYmFyIGFwcGVhcnMgb24gdGhlIGxlZnQgKGUuZy4gUlRMIHN5c3RlbXMpLiBVc2VcbiAgLy8gRmlyZWZveCB3aXRoIGxheW91dC5zY3JvbGxiYXIuc2lkZSA9IDMgaW4gYWJvdXQ6Y29uZmlnIHRvIHRlc3QgdGhpcy5cbiAgZnVuY3Rpb24gc2V0TGVmdFJUTFNjcm9sbGJhck9mZnNldCgpIHtcbiAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gIH1cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IG9mZnNldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlLCBpc0ZpeGVkLCBvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ID0gb2Zmc2V0UmVjdC54ICsgb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgPSBvZmZzZXRSZWN0LnkgKyBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBzZXRMZWZ0UlRMU2Nyb2xsYmFyT2Zmc2V0KCk7XG4gICAgfVxuICB9XG4gIGlmIChpc0ZpeGVkICYmICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiBkb2N1bWVudEVsZW1lbnQpIHtcbiAgICBzZXRMZWZ0UlRMU2Nyb2xsYmFyT2Zmc2V0KCk7XG4gIH1cbiAgY29uc3QgaHRtbE9mZnNldCA9IGRvY3VtZW50RWxlbWVudCAmJiAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQgPyBnZXRIVE1MT2Zmc2V0KGRvY3VtZW50RWxlbWVudCwgc2Nyb2xsKSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgY29uc3QgeCA9IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54IC0gaHRtbE9mZnNldC54O1xuICBjb25zdCB5ID0gcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55IC0gaHRtbE9mZnNldC55O1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGljUG9zaXRpb25lZChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnO1xufVxuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAocG9seWZpbGwpIHtcbiAgICByZXR1cm4gcG9seWZpbGwoZWxlbWVudCk7XG4gIH1cbiAgbGV0IHJhd09mZnNldFBhcmVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXG4gIC8vIEZpcmVmb3ggcmV0dXJucyB0aGUgPGh0bWw+IGVsZW1lbnQgYXMgdGhlIG9mZnNldFBhcmVudCBpZiBpdCdzIG5vbi1zdGF0aWMsXG4gIC8vIHdoaWxlIENocm9tZSBhbmQgU2FmYXJpIHJldHVybiB0aGUgPGJvZHk+IGVsZW1lbnQuIFRoZSA8Ym9keT4gZWxlbWVudCBtdXN0XG4gIC8vIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUgY29ycmVjdCBjYWxjdWxhdGlvbnMgZXZlbiBpZiB0aGUgPGh0bWw+IGVsZW1lbnQgaXNcbiAgLy8gbm9uLXN0YXRpYy5cbiAgaWYgKGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSA9PT0gcmF3T2Zmc2V0UGFyZW50KSB7XG4gICAgcmF3T2Zmc2V0UGFyZW50ID0gcmF3T2Zmc2V0UGFyZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuICByZXR1cm4gcmF3T2Zmc2V0UGFyZW50O1xufVxuXG4vLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgaWYgKGlzVG9wTGF5ZXIoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIGxldCBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICAgIHdoaWxlIChzdmdPZmZzZXRQYXJlbnQgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICBpZiAoaXNFbGVtZW50KHN2Z09mZnNldFBhcmVudCkgJiYgIWlzU3RhdGljUG9zaXRpb25lZChzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiBzdmdPZmZzZXRQYXJlbnQ7XG4gICAgICB9XG4gICAgICBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKHN2Z09mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIHJldHVybiB3aW47XG4gIH1cbiAgbGV0IG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpO1xuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCwgcG9seWZpbGwpO1xuICB9XG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgaXNMYXN0VHJhdmVyc2FibGVOb2RlKG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkgJiYgIWlzQ29udGFpbmluZ0Jsb2NrKG9mZnNldFBhcmVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbjtcbn1cblxuY29uc3QgZ2V0RWxlbWVudFJlY3RzID0gYXN5bmMgZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgZ2V0T2Zmc2V0UGFyZW50Rm4gPSB0aGlzLmdldE9mZnNldFBhcmVudCB8fCBnZXRPZmZzZXRQYXJlbnQ7XG4gIGNvbnN0IGdldERpbWVuc2lvbnNGbiA9IHRoaXMuZ2V0RGltZW5zaW9ucztcbiAgY29uc3QgZmxvYXRpbmdEaW1lbnNpb25zID0gYXdhaXQgZ2V0RGltZW5zaW9uc0ZuKGRhdGEuZmxvYXRpbmcpO1xuICByZXR1cm4ge1xuICAgIHJlZmVyZW5jZTogZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoZGF0YS5yZWZlcmVuY2UsIGF3YWl0IGdldE9mZnNldFBhcmVudEZuKGRhdGEuZmxvYXRpbmcpLCBkYXRhLnN0cmF0ZWd5KSxcbiAgICBmbG9hdGluZzoge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICB3aWR0aDogZmxvYXRpbmdEaW1lbnNpb25zLndpZHRoLFxuICAgICAgaGVpZ2h0OiBmbG9hdGluZ0RpbWVuc2lvbnMuaGVpZ2h0XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNSVEwoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSQxKGVsZW1lbnQpLmRpcmVjdGlvbiA9PT0gJ3J0bCc7XG59XG5cbmNvbnN0IHBsYXRmb3JtID0ge1xuICBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCxcbiAgZ2V0RG9jdW1lbnRFbGVtZW50LFxuICBnZXRDbGlwcGluZ1JlY3QsXG4gIGdldE9mZnNldFBhcmVudCxcbiAgZ2V0RWxlbWVudFJlY3RzLFxuICBnZXRDbGllbnRSZWN0cyxcbiAgZ2V0RGltZW5zaW9ucyxcbiAgZ2V0U2NhbGUsXG4gIGlzRWxlbWVudCxcbiAgaXNSVExcbn07XG5cbmZ1bmN0aW9uIHJlY3RzQXJlRXF1YWwoYSwgYikge1xuICByZXR1cm4gYS54ID09PSBiLnggJiYgYS55ID09PSBiLnkgJiYgYS53aWR0aCA9PT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PT0gYi5oZWlnaHQ7XG59XG5cbi8vIGh0dHBzOi8vc2FtdGhvci5hdS8yMDIxL29ic2VydmluZy1kb20vXG5mdW5jdGlvbiBvYnNlcnZlTW92ZShlbGVtZW50LCBvbk1vdmUpIHtcbiAgbGV0IGlvID0gbnVsbDtcbiAgbGV0IHRpbWVvdXRJZDtcbiAgY29uc3Qgcm9vdCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICB2YXIgX2lvO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgIChfaW8gPSBpbykgPT0gbnVsbCB8fCBfaW8uZGlzY29ubmVjdCgpO1xuICAgIGlvID0gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiByZWZyZXNoKHNraXAsIHRocmVzaG9sZCkge1xuICAgIGlmIChza2lwID09PSB2b2lkIDApIHtcbiAgICAgIHNraXAgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJlc2hvbGQgPSAxO1xuICAgIH1cbiAgICBjbGVhbnVwKCk7XG4gICAgY29uc3QgZWxlbWVudFJlY3RGb3JSb290TWFyZ2luID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB7XG4gICAgICBsZWZ0LFxuICAgICAgdG9wLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9ID0gZWxlbWVudFJlY3RGb3JSb290TWFyZ2luO1xuICAgIGlmICghc2tpcCkge1xuICAgICAgb25Nb3ZlKCk7XG4gICAgfVxuICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbnNldFRvcCA9IGZsb29yKHRvcCk7XG4gICAgY29uc3QgaW5zZXRSaWdodCA9IGZsb29yKHJvb3QuY2xpZW50V2lkdGggLSAobGVmdCArIHdpZHRoKSk7XG4gICAgY29uc3QgaW5zZXRCb3R0b20gPSBmbG9vcihyb290LmNsaWVudEhlaWdodCAtICh0b3AgKyBoZWlnaHQpKTtcbiAgICBjb25zdCBpbnNldExlZnQgPSBmbG9vcihsZWZ0KTtcbiAgICBjb25zdCByb290TWFyZ2luID0gLWluc2V0VG9wICsgXCJweCBcIiArIC1pbnNldFJpZ2h0ICsgXCJweCBcIiArIC1pbnNldEJvdHRvbSArIFwicHggXCIgKyAtaW5zZXRMZWZ0ICsgXCJweFwiO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICByb290TWFyZ2luLFxuICAgICAgdGhyZXNob2xkOiBtYXgoMCwgbWluKDEsIHRocmVzaG9sZCkpIHx8IDFcbiAgICB9O1xuICAgIGxldCBpc0ZpcnN0VXBkYXRlID0gdHJ1ZTtcbiAgICBmdW5jdGlvbiBoYW5kbGVPYnNlcnZlKGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IHJhdGlvID0gZW50cmllc1swXS5pbnRlcnNlY3Rpb25SYXRpbztcbiAgICAgIGlmIChyYXRpbyAhPT0gdGhyZXNob2xkKSB7XG4gICAgICAgIGlmICghaXNGaXJzdFVwZGF0ZSkge1xuICAgICAgICAgIHJldHVybiByZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyYXRpbykge1xuICAgICAgICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgY2xpcHBlZCwgdGhlIHJhdGlvIGlzIDAuIFRocm90dGxlIHRoZSByZWZyZXNoXG4gICAgICAgICAgLy8gdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIG9mIHVwZGF0ZXMuXG4gICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZWZyZXNoKGZhbHNlLCAxZS03KTtcbiAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZyZXNoKGZhbHNlLCByYXRpbyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyYXRpbyA9PT0gMSAmJiAhcmVjdHNBcmVFcXVhbChlbGVtZW50UmVjdEZvclJvb3RNYXJnaW4sIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKSB7XG4gICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBldmVuIHRob3VnaCB0aGUgcmF0aW8gaXMgcmVwb3J0ZWQgYXMgMSwgdGhlXG4gICAgICAgIC8vIGVsZW1lbnQgaXMgbm90IGFjdHVhbGx5IGZ1bGx5IHdpdGhpbiB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIncyByb290XG4gICAgICAgIC8vIGFyZWEgYW55bW9yZS4gVGhpcyBjYW4gaGFwcGVuIHVuZGVyIHBlcmZvcm1hbmNlIGNvbnN0cmFpbnRzLiBUaGlzIG1heVxuICAgICAgICAvLyBiZSBhIGJ1ZyBpbiB0aGUgYnJvd3NlcidzIEludGVyc2VjdGlvbk9ic2VydmVyIGltcGxlbWVudGF0aW9uLiBUb1xuICAgICAgICAvLyB3b3JrIGFyb3VuZCB0aGlzLCB3ZSBjb21wYXJlIHRoZSBlbGVtZW50J3MgYm91bmRpbmcgcmVjdCBub3cgd2l0aFxuICAgICAgICAvLyB3aGF0IGl0IHdhcyBhdCB0aGUgdGltZSB3ZSBjcmVhdGVkIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlci4gSWYgdGhleVxuICAgICAgICAvLyBhcmUgbm90IGVxdWFsIHRoZW4gdGhlIGVsZW1lbnQgbW92ZWQsIHNvIHdlIHJlZnJlc2guXG4gICAgICAgIHJlZnJlc2goKTtcbiAgICAgIH1cbiAgICAgIGlzRmlyc3RVcGRhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBPbGRlciBicm93c2VycyBkb24ndCBzdXBwb3J0IGEgYGRvY3VtZW50YCBhcyB0aGUgcm9vdCBhbmQgd2lsbCB0aHJvdyBhblxuICAgIC8vIGVycm9yLlxuICAgIHRyeSB7XG4gICAgICBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihoYW5kbGVPYnNlcnZlLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIC8vIEhhbmRsZSA8aWZyYW1lPnNcbiAgICAgICAgcm9vdDogcm9vdC5vd25lckRvY3VtZW50XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChfZSkge1xuICAgICAgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlT2JzZXJ2ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlvLm9ic2VydmUoZWxlbWVudCk7XG4gIH1cbiAgcmVmcmVzaCh0cnVlKTtcbiAgcmV0dXJuIGNsZWFudXA7XG59XG5cbi8qKlxuICogQXV0b21hdGljYWxseSB1cGRhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCB3aGVuIG5lY2Vzc2FyeS5cbiAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzIG1vdW50ZWQgb24gdGhlIERPTSBvclxuICogdmlzaWJsZSBvbiB0aGUgc2NyZWVuLlxuICogQHJldHVybnMgY2xlYW51cCBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBpbnZva2VkIHdoZW4gdGhlIGZsb2F0aW5nIGVsZW1lbnQgaXNcbiAqIHJlbW92ZWQgZnJvbSB0aGUgRE9NIG9yIGhpZGRlbiBmcm9tIHRoZSBzY3JlZW4uXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1VwZGF0ZVxuICovXG5mdW5jdGlvbiBhdXRvVXBkYXRlKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHVwZGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGNvbnN0IHtcbiAgICBhbmNlc3RvclNjcm9sbCA9IHRydWUsXG4gICAgYW5jZXN0b3JSZXNpemUgPSB0cnVlLFxuICAgIGVsZW1lbnRSZXNpemUgPSB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgbGF5b3V0U2hpZnQgPSB0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgYW5pbWF0aW9uRnJhbWUgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVmZXJlbmNlRWwgPSB1bndyYXBFbGVtZW50KHJlZmVyZW5jZSk7XG4gIGNvbnN0IGFuY2VzdG9ycyA9IGFuY2VzdG9yU2Nyb2xsIHx8IGFuY2VzdG9yUmVzaXplID8gWy4uLihyZWZlcmVuY2VFbCA/IGdldE92ZXJmbG93QW5jZXN0b3JzKHJlZmVyZW5jZUVsKSA6IFtdKSwgLi4uZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZmxvYXRpbmcpXSA6IFtdO1xuICBhbmNlc3RvcnMuZm9yRWFjaChhbmNlc3RvciA9PiB7XG4gICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfSk7XG4gICAgYW5jZXN0b3JSZXNpemUgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlKTtcbiAgfSk7XG4gIGNvbnN0IGNsZWFudXBJbyA9IHJlZmVyZW5jZUVsICYmIGxheW91dFNoaWZ0ID8gb2JzZXJ2ZU1vdmUocmVmZXJlbmNlRWwsIHVwZGF0ZSkgOiBudWxsO1xuICBsZXQgcmVvYnNlcnZlRnJhbWUgPSAtMTtcbiAgbGV0IHJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgaWYgKGVsZW1lbnRSZXNpemUpIHtcbiAgICByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihfcmVmID0+IHtcbiAgICAgIGxldCBbZmlyc3RFbnRyeV0gPSBfcmVmO1xuICAgICAgaWYgKGZpcnN0RW50cnkgJiYgZmlyc3RFbnRyeS50YXJnZXQgPT09IHJlZmVyZW5jZUVsICYmIHJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIC8vIFByZXZlbnQgdXBkYXRlIGxvb3BzIHdoZW4gdXNpbmcgdGhlIGBzaXplYCBtaWRkbGV3YXJlLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzE3NDBcbiAgICAgICAgcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmVvYnNlcnZlRnJhbWUpO1xuICAgICAgICByZW9ic2VydmVGcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgdmFyIF9yZXNpemVPYnNlcnZlcjtcbiAgICAgICAgICAoX3Jlc2l6ZU9ic2VydmVyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoZmxvYXRpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIGlmIChyZWZlcmVuY2VFbCAmJiAhYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUocmVmZXJlbmNlRWwpO1xuICAgIH1cbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgfVxuICBsZXQgZnJhbWVJZDtcbiAgbGV0IHByZXZSZWZSZWN0ID0gYW5pbWF0aW9uRnJhbWUgPyBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKSA6IG51bGw7XG4gIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgIGZyYW1lTG9vcCgpO1xuICB9XG4gIGZ1bmN0aW9uIGZyYW1lTG9vcCgpIHtcbiAgICBjb25zdCBuZXh0UmVmUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2UpO1xuICAgIGlmIChwcmV2UmVmUmVjdCAmJiAhcmVjdHNBcmVFcXVhbChwcmV2UmVmUmVjdCwgbmV4dFJlZlJlY3QpKSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gICAgcHJldlJlZlJlY3QgPSBuZXh0UmVmUmVjdDtcbiAgICBmcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lTG9vcCk7XG4gIH1cbiAgdXBkYXRlKCk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgdmFyIF9yZXNpemVPYnNlcnZlcjI7XG4gICAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlKTtcbiAgICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gICAgfSk7XG4gICAgY2xlYW51cElvID09IG51bGwgfHwgY2xlYW51cElvKCk7XG4gICAgKF9yZXNpemVPYnNlcnZlcjIgPSByZXNpemVPYnNlcnZlcikgPT0gbnVsbCB8fCBfcmVzaXplT2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTtcbiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgaWYgKGFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZUlkKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgb2Ygb3ZlcmZsb3cgc2lkZSBvZmZzZXRzIHRoYXQgZGV0ZXJtaW5lIGhvdyBtdWNoIHRoZVxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cbiAqIC0gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgYm91bmRhcnkgYnkgdGhhdCBudW1iZXIgb2YgcGl4ZWxzXG4gKiAtIG5lZ2F0aXZlID0gaG93IG1hbnkgcGl4ZWxzIGxlZnQgYmVmb3JlIGl0IHdpbGwgb3ZlcmZsb3dcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9kZXRlY3RPdmVyZmxvd1xuICovXG5jb25zdCBkZXRlY3RPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93JDE7XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IG9mZnNldCQxO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGF1dG9QbGFjZW1lbnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gc2hpZnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmbGlwJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IOKAlFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IHNpemUkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBoaWRlJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gYXJyb3ckMTtcblxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gaW5saW5lJDE7XG5cbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBsaW1pdFNoaWZ0JDE7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSAocmVmZXJlbmNlLCBmbG9hdGluZywgb3B0aW9ucykgPT4ge1xuICAvLyBUaGlzIGNhY2hlcyB0aGUgZXhwZW5zaXZlIGBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnNgIGZ1bmN0aW9uIHNvIHRoYXRcbiAgLy8gbXVsdGlwbGUgbGlmZWN5Y2xlIHJlc2V0cyByZS11c2UgdGhlIHNhbWUgcmVzdWx0LiBJdCBvbmx5IGxpdmVzIGZvciBhXG4gIC8vIHNpbmdsZSBjYWxsLiBJZiBvdGhlciBmdW5jdGlvbnMgYmVjb21lIGV4cGVuc2l2ZSwgd2UgY2FuIGFkZCB0aGVtIGFzIHdlbGwuXG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcCgpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0ge1xuICAgIHBsYXRmb3JtLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgY29uc3QgcGxhdGZvcm1XaXRoQ2FjaGUgPSB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucy5wbGF0Zm9ybSxcbiAgICBfYzogY2FjaGVcbiAgfTtcbiAgcmV0dXJuIGNvbXB1dGVQb3NpdGlvbiQxKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHtcbiAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgIHBsYXRmb3JtOiBwbGF0Zm9ybVdpdGhDYWNoZVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgcGxhdGZvcm0sIHNoaWZ0LCBzaXplIH07XG4iLCJpbXBvcnQgeyBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24gfSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xuXG5leHBvcnQgY29uc3QgUVVJQ0tfRVZFTlQgPSB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IHRydWUgfTtcbmV4cG9ydCBjb25zdCBJU19CUk9XU0VSID1cblx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCI7XG5cbi8vIFRPRE86IERvY3VtZW50YXRpb24gZm9yIHByZXR0eU51bWJlclxubGV0IElOVExfTlVNOiBJbnRsLk51bWJlckZvcm1hdCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBwcmV0dHlOdW1iZXIobnVtYmVyOiBudW1iZXIgfCBzdHJpbmcpIHtcblx0aWYgKCFJTlRMX05VTSlcblx0XHRJTlRMX05VTSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcblx0XHRcdChJU19CUk9XU0VSICYmIGF0dHIoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBcImxhbmdcIikpIHx8IFwibm9cIixcblx0XHQpO1xuXHRyZXR1cm4gSU5UTF9OVU0uZm9ybWF0KE51bWJlcihudW1iZXIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlPFQgZXh0ZW5kcyB1bmtub3duW10+KFxuXHRjYWxsYmFjazogKC4uLmFyZ3M6IFQpID0+IHZvaWQsXG5cdGRlbGF5OiBudW1iZXIsXG4pIHtcblx0bGV0IHRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcblxuXHRyZXR1cm4gKC4uLmFyZ3M6IFQpID0+IHtcblx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRcdHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBjYWxsYmFjayguLi5hcmdzKSwgZGVsYXkpO1xuXHR9O1xufVxuXG4vKipcbiAqIGF0dHJcbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgZ2V0LCBzZXQgYW5kIHJlbW92ZSBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0gZWwgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gbmFtZSBUaGUgYXR0cmlidXRlIG5hbWUgdG8gZ2V0LCBzZXQgb3IgcmVtb3ZlLCBvciBhIG9iamVjdCB0byBzZXQgbXVsdGlwbGUgYXR0cmlidXRlc1xuICogQHBhcmFtIHZhbHVlIEEgdmFsaWQgYXR0cmlidXRlIHZhbHVlIG9yIG51bGwgdG8gcmVtb3ZlIGF0dHJpYnV0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0cihcblx0ZWw6IEVsZW1lbnQsXG5cdG5hbWU6IHN0cmluZyxcblx0dmFsdWU/OiBzdHJpbmcgfCBudWxsLFxuKTogc3RyaW5nIHwgbnVsbCB7XG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpID8/IG51bGw7IC8vIEZhbGxiYWNrIHRvIG51bGwgb25seSBpZiBlbCBpcyB1bmRlZmluZWRcblx0aWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG5cdHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIHVzZUlkXG4gKiBAcmV0dXJuIEEgZ2VuZXJhdGVkIHVuaXF1ZSBJRFxuICovXG5sZXQgaWQgPSAwO1xuY29uc3QgVVVJRCA9IGAke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgNSl9YDtcbmV4cG9ydCBmdW5jdGlvbiB1c2VJZChlbDogRWxlbWVudCkge1xuXHRpZiAoIWVsLmlkKSBlbC5pZCA9IGAke1VVSUR9JHsrK2lkfWA7XG5cdHJldHVybiBlbC5pZDtcbn1cblxuLy8gSW50ZXJuYWwgaGVscGVyIGZvciBvbiAvIG9mZlxuY29uc3QgZXZlbnRzID0gKFxuXHRhY3Rpb246IFwiYWRkXCIgfCBcInJlbW92ZVwiLFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHRbLi4ucmVzdF06IFBhcmFtZXRlcnM8dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI+LCAvLyBTcHJlYXQgdG8gbWFrZSBhIGNvcHkgb2YgdGhlIGFycmF5XG4pOiB2b2lkID0+IHtcblx0Zm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG5cdFx0cmVzdFswXSA9IHR5cGU7XG5cdFx0ZWxlbWVudFtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdKC4uLnJlc3QpO1xuXHR9XG59O1xuXG4vKipcbiAqIG9uXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9uID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiB7XG5cdGlmIChVTkJJTkQgJiYgKGVsZW1lbnQgPT09IHdpbmRvdyB8fCBlbGVtZW50ID09PSBkb2N1bWVudCkpXG5cdFx0VU5CSU5ELnB1c2goKCkgPT4gb2ZmKGVsZW1lbnQsIC4uLnJlc3QpKTtcblx0ZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xufTtcblxuLyoqXG4gKiBvZmZcbiAqIEBwYXJhbSBlbGVtZW50IFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIHR5cGVzIEEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBldmVudCB0eXBlc1xuICogQHBhcmFtIGxpc3RlbmVyIEFuIGV2ZW50IGxpc3RlbmVyIGZ1bmN0aW9uIG9yIGxpc3RlbmVyIG9iamVjdFxuICovXG5leHBvcnQgY29uc3Qgb2ZmID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIFdpbmRvdyB7XG5cdFx0X210ZHNVbmJpbmRFdmVudHM/OiBNYXA8c3RyaW5nLCBBcnJheTwoKSA9PiB2b2lkPj47XG5cdH1cbn1cblxuLyoqXG4gKiBvbkxvYWRlZFxuICogQGRlc2NyaXB0aW9uIFJ1bnMgYSBjYWxsYmFjayB3aGVuIHdpbmRvdyBpcyBsb2FkZWQgaW4gYnJvd3NlciwgYW5kIGVuc3VyZXMgZXZlbnRzIGFyZSB1bmJvdW5kIGlmIGhvdCByZWxvYWRpbmdcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gdGhlIHBhZ2UgaXMgcmVhZHlcbiAqL1xubGV0IFVOQklORDogQXJyYXk8KCkgPT4gdm9pZD4gfCBudWxsID0gbnVsbDtcbmV4cG9ydCBjb25zdCBvbkxvYWRlZCA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xuXHRpZiAoIUlTX0JST1dTRVIpIHJldHVybjtcblx0aWYgKCF3aW5kb3cuX210ZHNVbmJpbmRFdmVudHMpIHdpbmRvdy5fbXRkc1VuYmluZEV2ZW50cyA9IG5ldyBNYXAoKTtcblxuXHRjb25zdCBydW4gPSAoKSA9PlxuXHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0XHRjb25zdCBrZXkgPSBTdHJpbmcoY2FsbGJhY2spLnJlcGxhY2UoLyhcXG58XFxzKS9nLCBcIlwiKTtcblx0XHRcdHdpbmRvdy5fbXRkc1VuYmluZEV2ZW50cz8uZ2V0KGtleSk/LmZvckVhY2goKHVuYmluZCkgPT4ge1xuXHRcdFx0XHR1bmJpbmQoKTsgLy8gVW5iaW5kIHByZXZpb3VzIGV2ZW50c1xuXHRcdFx0fSk7XG5cdFx0XHRVTkJJTkQgPSBbXTsgLy8gUHJlcGFyZSB0byBsaXN0ZW4gZm9yIG5ld2x5IGJvdW5kIGV2ZW50c1xuXHRcdFx0Y2FsbGJhY2soKTsgLy8gUnVuIGJpbmRpbmdcblx0XHRcdHdpbmRvdy5fbXRkc1VuYmluZEV2ZW50cz8uc2V0KGtleSwgVU5CSU5EPy5zbGljZSgwKSk7IC8vIFN0b3JlIGZvciBsYXRlciB1bmJpbmRpbmdcblx0XHRcdFVOQklORCA9IG51bGw7IC8vIFN0b3AgbGlzdGVuaW5nIGZvciBuZXdseSBib3VuZCBldmVudHNcblx0XHR9KTtcblxuXHRpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSBydW4oKTtcblx0ZWxzZSBvbih3aW5kb3csIFwibG9hZFwiLCBydW4pO1xufTtcblxuY29uc3QgQU5DSE9SRUQgPSBuZXcgV2Vha01hcDxFbGVtZW50LCBSZXR1cm5UeXBlPHR5cGVvZiBhdXRvVXBkYXRlPj4oKTtcbmV4cG9ydCBmdW5jdGlvbiBhbmNob3JQb3NpdGlvbihcblx0dGFyZ2V0OiBIVE1MRWxlbWVudCxcblx0YW5jaG9yOiBmYWxzZSB8IEVsZW1lbnQsXG5cdG9wdGlvbnM/OiBQYXJhbWV0ZXJzPHR5cGVvZiBjb21wdXRlUG9zaXRpb24+WzJdLFxuKSB7XG5cdEFOQ0hPUkVELmdldCh0YXJnZXQpPy4oKTsgLy8gVW5iaW5kIHByZXZpb3VzIGFuY2hvciBwb3NpdGlvblxuXHRBTkNIT1JFRC5kZWxldGUodGFyZ2V0KTtcblxuXHRpZiAoYW5jaG9yKVxuXHRcdEFOQ0hPUkVELnNldChcblx0XHRcdHRhcmdldCxcblx0XHRcdGF1dG9VcGRhdGUoYW5jaG9yLCB0YXJnZXQsICgpID0+IHtcblx0XHRcdFx0aWYgKCF0YXJnZXQuaXNDb25uZWN0ZWQgfHwgIWFuY2hvci5pc0Nvbm5lY3RlZCB8fCB0YXJnZXQuaGlkZGVuKVxuXHRcdFx0XHRcdHJldHVybiBhbmNob3JQb3NpdGlvbih0YXJnZXQsIGZhbHNlKTtcblx0XHRcdFx0Y29tcHV0ZVBvc2l0aW9uKGFuY2hvciwgdGFyZ2V0LCBvcHRpb25zKS50aGVuKCh7IHgsIHkgfSkgPT4ge1xuXHRcdFx0XHRcdHRhcmdldC5zdHlsZS5sZWZ0ID0gYCR7eH1weGA7XG5cdFx0XHRcdFx0dGFyZ2V0LnN0eWxlLnRvcCA9IGAke3l9cHhgO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pLFxuXHRcdCk7XG59XG5cbi8qKlxuICogU3BlZWQgdXAgTXV0YXRpb25PYnNlcnZlciBieSBkZWJvdW5jaW5nIGFuZCBvbmx5IHJ1bm5pbmcgd2hlbiBwYWdlIGlzIHZpc2libGVcbiAqIEByZXR1cm4gbmV3IE11dGFpb25PYnNlcnZlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjazogTXV0YXRpb25DYWxsYmFjaykge1xuXHRsZXQgcXVldWUgPSAwO1xuXG5cdGNvbnN0IG9uRnJhbWUgPSAoKSA9PiBzZXRUaW1lb3V0KG9uVGltZXIsIDIwMCk7IC8vIFVzZSBib3RoIHJlcXVlc3RBbmltYXRpb25GcmFtZSBhbmQgc2V0VGltZW91dCB0byBkZWJvdW5jZSBhbmQgb25seSBydW4gd2hlbiB2aXNpYmxlXG5cdGNvbnN0IG9uVGltZXIgPSAoKSA9PiB7XG5cdFx0Y2FsbGJhY2soW10sIG9ic2VydmVyKTtcblx0XHRvYnNlcnZlci50YWtlUmVjb3JkcygpOyAvLyBDbGVhciByZWNvcmRzIHRvIGF2b2lkIHJ1bm5pbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcblx0XHRxdWV1ZSA9IDA7XG5cdH07XG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdGlmICghcXVldWUpIHF1ZXVlID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKG9uRnJhbWUpO1xuXHR9KTtcblxuXHRyZXR1cm4gb2JzZXJ2ZXI7XG59XG5cbi8qKlxuICogb25NdXRhdGlvblxuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBvYnNlcnZlIG11dGF0aW9ucyBvbiBhIHNwZWNpZmljIGNsYXNzIG5hbWVcbiAqIEBwYXJhbSBlbCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSBjbGFzc05hbWUgVGhlIGNsYXNzIG5hbWUgdG8gb2JzZXJ2ZVxuICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBydW4gd2hlbiBtdXRhdGlvbnMgYXJlIGRldGVjdGVkXG4gKi9cbmNvbnN0IE1VVEFUT1JTID0gbmV3IFdlYWtNYXA8RWxlbWVudCwgQXJyYXk8KCkgPT4gdm9pZD4+KCk7XG5leHBvcnQgY29uc3Qgb25NdXRhdGlvbiA9IDxUIGV4dGVuZHMgRWxlbWVudD4oXG5cdGVsOiBFbGVtZW50LFxuXHRjbGFzc05hbWU6IHN0cmluZyxcblx0Y2FsbGJhY2s6IChlbGVtczogSFRNTENvbGxlY3Rpb25PZjxUPikgPT4gdm9pZCxcbikgPT4ge1xuXHRjb25zdCBlbGVtcyA9IGVsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcblx0Y29uc3QgbXV0YXRvciA9IE1VVEFUT1JTLmdldChlbCkgfHwgW107XG5cblx0aWYgKCFtdXRhdG9yLmxlbmd0aCkge1xuXHRcdE1VVEFUT1JTLnNldChlbCwgbXV0YXRvcik7XG5cdFx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcigoXywgb2JzZXJ2ZXIpID0+IHtcblx0XHRcdGlmIChlbC5pc0Nvbm5lY3RlZCAmJiBtdXRhdG9yPy5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBjYWxsYmFjayBvZiBtdXRhdG9yKSBjYWxsYmFjaygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0TVVUQVRPUlMuZGVsZXRlKGVsKTtcblx0XHRcdH1cblx0XHR9KS5vYnNlcnZlKGVsLCB7XG5cdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFtcImNsYXNzXCIsIFwiaGlkZGVuXCJdLFxuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRcdHN1YnRyZWU6IHRydWUsXG5cdFx0fSk7XG5cdH1cblx0bXV0YXRvci5wdXNoKCgpID0+IGNhbGxiYWNrKGVsZW1zIGFzIEhUTUxDb2xsZWN0aW9uT2Y8VD4pKTtcbn07XG5cbi8qKlxuICogaXNJbnB1dExpa2VcbiAqIEBkZXNjcmlwdGlvbiBDaGVjayBpZiBlbGVtZW50IGlzIGFuIGlucHV0IGxpa2UgZWxlbWVudFxuICogQHBhcmFtIGVsIFRoZSBlbGVtZW50IHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBlbGVtZW50IGlzIGFuIGlucHV0IGxpa2UgZWxlbWVudFxuICovXG5leHBvcnQgY29uc3QgaXNJbnB1dExpa2UgPSAoZWw6IHVua25vd24pOiBlbCBpcyBIVE1MSW5wdXRFbGVtZW50ID0+XG5cdGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcblx0XCJ2YWxpZGl0eVwiIGluIGVsICYmXG5cdCEoZWwgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCk7XG5cbi8qKlxuICogdG9DdXN0b21FbGVtZW50UHJvcHNcbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgY29udmVydCBwcm9wcyB0byBjdXN0b20gZWxlbWVudCBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0gcHJvcHMgVGhlIHByb3BzIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgcHJvcHNcbiAqL1xuY29uc3QgU0VMRUNURUQgPSBcImFyaWEtc2VsZWN0ZWRcIjtcbmV4cG9ydCBjb25zdCB0b0N1c3RvbUVsZW1lbnRQcm9wcyA9IChcblx0eyBjbGFzc05hbWUsIGhpZGRlbiwgb3BlbiwgLi4ucmVzdCB9OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0a2xhc3M/OiBzdHJpbmcsXG4pID0+IHtcblx0cmVzdC5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcgPSB0cnVlOyAvLyBNYWtlIE5leHQuanMgaGFwcHlcblx0aWYgKHJlc3RbU0VMRUNURURdICE9PSB1bmRlZmluZWQpXG5cdFx0cmVzdFtTRUxFQ1RFRF0gPSBgJHsocmVzdFtTRUxFQ1RFRF0gfHwgXCJmYWxzZVwiKSAhPT0gXCJmYWxzZVwifWA7IC8vIEVuc3VyZSBhcmlhLXNlbGVjdGVkIGJvb2xlYW4gaXMgc3RyaW5nXG5cdGlmIChjbGFzc05hbWUgfHwga2xhc3MpIHJlc3QuY2xhc3MgPSBgJHtrbGFzc30gJHtjbGFzc05hbWV9YC50cmltKCk7IC8vIFVzZSBjbGFzcyBpbnN0ZWFkIG9mIGNsYXNzTmFtZVxuXHRpZiAoaGlkZGVuKSByZXN0LmhpZGRlbiA9IHRydWU7IC8vIEVuc3VyZSBib29sZWFuIHByb3AgYmVoYXZpb3VyXG5cdGlmIChvcGVuKSByZXN0Lm9wZW4gPSB0cnVlOyAvLyBFbnN1cmUgYm9vbGVhbiBwcm9wIGJlaGF2aW91clxuXHRyZXR1cm4gcmVzdDtcbn07XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgSVNfQlJPV1NFUiwgb24sIG9uTG9hZGVkLCBRVUlDS19FVkVOVCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfQlJFQURDUlVNQlMgPSBgLiR7c3R5bGVzLmJyZWFkY3J1bWJzLnNwbGl0KFwiIFwiKVswXX1gO1xuY29uc3QgQ1NTX0NISVAgPSBgLiR7c3R5bGVzLmNoaXAuc3BsaXQoXCIgXCIpWzBdfWA7XG5jb25zdCBDU1NfSEVMUFRFWFQgPSBgLiR7c3R5bGVzLmhlbHB0ZXh0LnNwbGl0KFwiIFwiKVswXX1gO1xuY29uc3QgQ1NTX1BBR0lOQVRJT04gPSBgLiR7c3R5bGVzLnBhZ2luYXRpb24uc3BsaXQoXCIgXCIpWzBdfWA7XG5jb25zdCBDTElDS1MgPSBgc3VtbWFyeSx1LXN1bW1hcnksYSxidXR0b24sW3JvbGU9XCJ0YWJcIl0sW3JvbGU9XCJidXR0b25cIl1gO1xuY29uc3QgRVZFTlRTID0gXCJjbGljayx0b2dnbGUsc3VibWl0LGNoYW5nZVwiO1xuY29uc3QgTUFUT01PID0gXCJtYXR0aWxzeW5ldC5tYXRvbW8uY2xvdWRcIjtcbmNvbnN0IEJBTk5FUiA9IFwibXRkcy1hbmFseXRpY3MtYmFubmVyXCI7IC8vIERpYWxvZyB0byBzaG93IE1hdG9tbyBzY3JpcHQgbG9hZGluZ1xuY29uc3QgQkFOTkVSX1VSTCA9XG5cdFwiaHR0cHM6Ly93d3cubWF0dGlsc3luZXQubm8vb20tbWF0dGlsc3luZXQvcGVyc29udmVybmVya2xhZXJpbmcvaW5mb3JtYXNqb25za2Fwc2xlclwiO1xuXG50eXBlIE1hdG9tbyA9IChcblx0fCBzdHJpbmdcblx0fCBudW1iZXJcblx0fCBib29sZWFuXG5cdHwgRG9jdW1lbnRcblx0fCBFbGVtZW50XG5cdHwgKCh0aGlzOiBSZWNvcmQ8c3RyaW5nLCA8VD4oKSA9PiBUPikgPT4gdm9pZClcbilbXTtcbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIFdpbmRvdyB7XG5cdFx0X3BhcT86IE1hdG9tb1tdO1xuXHRcdF9tdG0/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+W107XG5cdFx0X210ZHNUcmFja2luZz86IEFuYWx5dGljc0FjdGlvbnNbXCJpbml0XCJdO1xuXHRcdF9tdGRzVW50cmFjaz86ICgpID0+IHZvaWQ7XG5cdH1cbn1cblxuZXhwb3J0IHR5cGUgQW5hbHl0aWNzQWN0aW9ucyA9IHtcblx0aW5pdDoge1xuXHRcdGVuYWJsZWQ/OiBib29sZWFuIHwgXCJkZWJ1Z1wiO1xuXHRcdGNvbnNlbnQ/OiBcImN1c3RvbVwiIHwgdHJ1ZTtcblx0fSAmIChcblx0XHR8IHtcblx0XHRcdFx0bWF0b21vSWQ6IG51bWJlciB8IHN0cmluZztcblx0XHRcdFx0bWF0b21vVGFnTWFuYWdlcklkPzogbmV2ZXI7XG5cdFx0ICB9XG5cdFx0fCB7XG5cdFx0XHRcdG1hdG9tb0lkPzogbmV2ZXI7XG5cdFx0XHRcdG1hdG9tb1RhZ01hbmFnZXJJZDogc3RyaW5nO1xuXHRcdCAgfVxuXHQpO1xuXHRwYWdldmlldzoge1xuXHRcdHVybD86IHN0cmluZztcblx0XHR0aXRsZT86IHN0cmluZztcblx0fTtcblx0ZXZlbnQ6IHtcblx0XHRjYXRlZ29yeTogc3RyaW5nO1xuXHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdG5hbWU/OiBzdHJpbmc7XG5cdFx0dmFsdWU/OiBudW1iZXI7XG5cdH07XG5cdHNlYXJjaDoge1xuXHRcdHF1ZXJ5OiBzdHJpbmc7XG5cdFx0Y2F0ZWdvcnk/OiBzdHJpbmc7XG5cdFx0cmVzdWx0cz86IG51bWJlcjtcblx0fTtcblx0bWF0b21vOiBNYXRvbW87XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYW5hbHl0aWNzPEFjdGlvbiBleHRlbmRzIGtleW9mIEFuYWx5dGljc0FjdGlvbnM+KFxuXHRhY3Rpb246IEFjdGlvbixcblx0YXJncyA9IHt9IGFzIEFuYWx5dGljc0FjdGlvbnNbQWN0aW9uXSxcbikge1xuXHRpZiAoIUlTX0JST1dTRVIpIHJldHVybjtcblx0aWYgKCF3aW5kb3cuX3BhcSkge1xuXHRcdHdpbmRvdy5fcGFxID0gW107XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJIZWF0bWFwU2Vzc2lvblJlY29yZGluZzo6ZGlzYWJsZVwiXSk7IC8vIERpc2FibGUgaGVhdG1hcHMgYnkgZGVmYXVsdCBhcyB0aGlzIHJlcXVpcmUgY29va2llc1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wiZW5hYmxlTGlua1RyYWNraW5nXCJdKTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldFRyYWNrZXJVcmxcIiwgYGh0dHBzOi8vJHtNQVRPTU99L21hdG9tby5waHBgXSk7XG5cdH1cblx0aWYgKCF3aW5kb3cuX210bSkge1xuXHRcdHdpbmRvdy5fbXRtID0gd2luZG93Ll9tdG0gfHwgW107IC8vIFByZXBhcmUgTWF0b21vIFRhZyBNYW5hZ2VyXG5cdFx0d2luZG93Ll9tdG0ucHVzaCh7IFwibXRtLnN0YXJ0VGltZVwiOiBEYXRlLm5vdygpLCBldmVudDogXCJtdG0uU3RhcnRcIiB9KTtcblx0fVxuXG5cdGlmIChhY3Rpb24gPT09IFwiaW5pdFwiKSB7XG5cdFx0d2luZG93Ll9tdGRzVHJhY2tpbmcgPSB7XG5cdFx0XHRlbmFibGVkOiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgIT09IFwibG9jYWxob3N0XCIsXG5cdFx0XHQuLi53aW5kb3cuX210ZHNUcmFja2luZyxcblx0XHRcdC4uLmFyZ3MsXG5cdFx0fSBhcyBBbmFseXRpY3NBY3Rpb25zW1wiaW5pdFwiXTtcblx0XHRjb25zdCB7IGNvbnNlbnQsIGVuYWJsZWQsIG1hdG9tb0lkLCBtYXRvbW9UYWdNYW5hZ2VySWQgfSA9XG5cdFx0XHR3aW5kb3cuX210ZHNUcmFja2luZztcblxuXHRcdGlmIChtYXRvbW9JZCkgd2luZG93Ll9wYXEucHVzaChbXCJzZXRTaXRlSWRcIiwgbWF0b21vSWRdKTtcblx0XHRpZiAoZW5hYmxlZCkge1xuXHRcdFx0aWYgKGNvbnNlbnQgIT09IFwiY3VzdG9tXCIpIHJlbmRlckJhbm5lcigpO1xuXHRcdFx0Y29uc3Qgc3JjID0gbWF0b21vVGFnTWFuYWdlcklkXG5cdFx0XHRcdD8gYGh0dHBzOi8vY2RuLm1hdG9tby5jbG91ZC8ke01BVE9NT30vY29udGFpbmVyXyR7bWF0b21vVGFnTWFuYWdlcklkfS5qc2Bcblx0XHRcdFx0OiBgaHR0cHM6Ly9jZG4ubWF0b21vLmNsb3VkLyR7TUFUT01PfS9tYXRvbW8uanNgO1xuXG5cdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBzY3JpcHRbc3JjPVwiJHtzcmN9XCJdYCkgfHxcblx0XHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmQoXG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpLCB7XG5cdFx0XHRcdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdFx0XHRcdHNyYyxcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRpZiAod2luZG93Ll9tdGRzVHJhY2tpbmc/LmVuYWJsZWQgPT09IGZhbHNlKSByZXR1cm47XG5cdGlmICh3aW5kb3cuX210ZHNUcmFja2luZz8uZW5hYmxlZCA9PT0gXCJkZWJ1Z1wiKVxuXHRcdHJldHVybiBjb25zb2xlLmluZm8oYGFuYWx5dGljcyhcIiR7YWN0aW9ufVwiLCBgLCBhcmdzLCBcIilcIik7XG5cblx0aWYgKGFjdGlvbiA9PT0gXCJwYWdldmlld1wiKSB7XG5cdFx0Y29uc3QgeyB1cmwsIHRpdGxlIH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJwYWdldmlld1wiXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCB1cmwgfHwgbG9jYXRpb24uaHJlZl0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0RG9jdW1lbnRUaXRsZVwiLCB0aXRsZSB8fCBkb2N1bWVudC50aXRsZV0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1widHJhY2tQYWdlVmlld1wiXSk7XG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcImV2ZW50XCIpIHtcblx0XHRjb25zdCB7IGNhdGVnb3J5LCBhY3Rpb24sIG5hbWUsIHZhbHVlIH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJldmVudFwiXTtcblx0XHRjb25zdCBldmVudCA9IFtcInRyYWNrRXZlbnRcIiwgY2F0ZWdvcnksIGFjdGlvbiwgbmFtZSwgdmFsdWVdO1xuXG5cdFx0Ly8gV2UgZG8gbm90IHdhbnQgdG8gdHJhY2sgZXZlbnRzIHdpdGggaGFzaCBpbiBVUkwgYXMgdGhpcyBjYXVzZXMgaGFyZC10by1yZWFkIGRhdGEsXG5cdFx0Ly8gc28gdGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSBoYXNoIHBhcnQsIGFuZCBhZGQgaXQgYmFjayBhZnRlciB0aGUgZXZlbnQgaXMgcHVzaGVkXG5cdFx0bGV0IHVybCA9IGxvY2F0aW9uLmhyZWY7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXG5cdFx0XHRmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHVybCA9IHRoaXMuZ2V0Q3VycmVudFVybDxzdHJpbmc+KCk7XG5cdFx0XHR9LFxuXHRcdF0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0Q3VzdG9tVXJsXCIsIHVybC5zcGxpdChcIiNcIilbMF1dKTsgLy8gU2tpcCBoYXNoIHBhcnQgb2YgVVJMXG5cdFx0d2luZG93Ll9wYXEucHVzaChldmVudC5maWx0ZXIoKHYpID0+IHYgIT09IHVuZGVmaW5lZCkpOyAvLyBQdXNoIGV2ZW50XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRDdXN0b21VcmxcIiwgdXJsXSk7IC8vIFJldmVycnQgdG8gb3JpZ2luYWwgVVJMIHdpdGggaGFzaFxuXHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJzZWFyY2hcIikge1xuXHRcdGNvbnN0IHtcblx0XHRcdHF1ZXJ5LFxuXHRcdFx0Y2F0ZWdvcnkgPSBmYWxzZSxcblx0XHRcdHJlc3VsdHMgPSBmYWxzZSxcblx0XHR9ID0gYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wic2VhcmNoXCJdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1widHJhY2tTaXRlU2VhcmNoXCIsIHF1ZXJ5LCBjYXRlZ29yeSwgcmVzdWx0c10pO1xuXHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJtYXRvbW9cIikge1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wibWF0b21vXCJdKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW5kZXJCYW5uZXIoKSB7XG5cdGNvbnN0IGhhc1NlZW5CYW5uZXIgPVxuXHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKEJBTk5FUikgfHwgd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKEJBTk5FUik7XG5cblx0aWYgKGhhc1NlZW5CYW5uZXIpIHJldHVybjtcblxuXHRkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50SFRNTChcblx0XHRcImFmdGVyYmVnaW5cIixcblx0XHRgPGRpYWxvZyBpZD1cIiR7QkFOTkVSfVwiIGRhdGEtYW5hbHl0aWNzPVwiaWdub3JlXCI+PHN0eWxlPlxuXHRcdFx0XHQjJHtCQU5ORVJ9W29wZW5dIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgYmFja2dyb3VuZDogIzExNmU2YjsgYm9yZGVyLXJhZGl1czogLjVlbTsgYm9yZGVyOiAwOyBib3gtc2hhZG93OiAwIC4yNWVtIC41ZW0gcmdiYSgwLDAsMCwuMyk7IGNvbG9yOiAjZmZmOyBmb250LXNpemU6IC44NzVlbTsgaW5zZXQ6IGF1dG8gYXV0byAxZW0gMWVtOyBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSAyZW0pOyBvdXRsaW5lOiAwOyBwYWRkaW5nOiAuNWVtOyBwb3NpdGlvbjogZml4ZWQ7IHotaW5kZXg6IDk5OTk5IH1cblx0XHRcdFx0IyR7QkFOTkVSfSBidXR0b24geyBhbGw6IHVuc2V0OyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGZsZXg7IHdpZHRoOiAxLjVlbTsgaGVpZ2h0OiAxLjVlbTsgZm9udDogMzAwIDEuNWVtLzEuMzUgc2Fucy1zZXJpZjsgYm9yZGVyLXJhZGl1czogLjI1ZW07IHBsYWNlLWNvbnRlbnQ6IGNlbnRlcjsgdHJhbnNpdGlvbjogLjJzOyB0cmFuc2l0aW9uLXByb3BlcnR5OiBiYWNrZ3JvdW5kLCBzY2FsZSB9XG5cdFx0XHRcdCMke0JBTk5FUn0gYnV0dG9uOmZvY3VzLXZpc2libGUgeyBvdXRsaW5lOiAycHggc29saWQgfVxuXHRcdFx0XHQjJHtCQU5ORVJ9IGJ1dHRvbjpob3ZlciB7IGJhY2tncm91bmQ6ICMwYTRlNGYgfVxuXHRcdFx0XHQjJHtCQU5ORVJ9IGJ1dHRvbjphY3RpdmUgeyBiYWNrZ3JvdW5kOiAjMDU0NDQ5OyBzY2FsZTogLjkgfVxuXHRcdFx0XHQjJHtCQU5ORVJ9IHAgeyBtYXJnaW46IDAgLjI1ZW0gfVxuXHRcdFx0PC9zdHlsZT5cblx0XHRcdDxwPlZpIGJydWtlciA8YSBocmVmPVwiJHtCQU5ORVJfVVJMfVwiIHRhcmdldD1cIl9ibGFua1wiPmluZm9ybWFzam9uc2thcHNsZXI8L2E+IGZvciDDpSBmb3JiZWRyZSBicnVrZXJvcHBsZXZlbHNlbi48L3A+XG5cdFx0XHQ8Zm9ybSBtZXRob2Q9XCJkaWFsb2dcIiBkYXRhLWFuYWx5dGljcz1cImlnbm9yZVwiPjxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGFyaWEtbGFiZWw9XCJPS1wiPiZ0aW1lczs8L2J1dHRvbj48L2Zvcm0+XG5cdFx0PC9kaWFsb2c+YCxcblx0KTtcblx0Y29uc3QgYmFubmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoQkFOTkVSKSBhcyBIVE1MRGlhbG9nRWxlbWVudDtcblx0Y29uc3Qgb25DbG9zZSA9ICgpID0+IHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShCQU5ORVIsIFwic2VlblwiKTtcblx0YmFubmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbG9zZVwiLCBvbkNsb3NlLCB7IG9uY2U6IHRydWUgfSk7XG5cdGJhbm5lci5zaG93KCk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRyYWNrKGV2ZW50OiBFdmVudCkge1xuXHRpZiAod2luZG93Ll9tdGRzVHJhY2tpbmc/LmVuYWJsZWQpIHNldFRpbWVvdXQocHJvY2Vzc1RyYWNrLCAwLCBldmVudCk7IC8vIExldCBvdGhlciBldmVudHMgcHJvY2VzcyBmaXJzdFxufVxuXG5mdW5jdGlvbiBwcm9jZXNzVHJhY2soeyB0eXBlLCB0YXJnZXQgfTogRXZlbnQpIHtcblx0Y29uc3QgZWwgPSB0eXBlID09PSBcImNsaWNrXCIgPyAodGFyZ2V0IGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oQ0xJQ0tTKSA6IHRhcmdldDtcblx0aWYgKCEoZWwgaW5zdGFuY2VvZiBFbGVtZW50KSB8fCBlbC5jbG9zZXN0KCdbZGF0YS1hbmFseXRpY3M9XCJpZ25vcmVcIl0nKSlcblx0XHRyZXR1cm47XG5cblx0bGV0IGFjdGlvbiA9IFwiY2xpY2tcIjtcblx0bGV0IGNhdGVnb3J5ID0gXCJCdXR0b25cIjtcblx0bGV0IG5hbWUgPSBsYWJlbChlbCkgfHwgaGVhZGluZyhlbCkgfHwgYXR0cihlbCwgXCJkYXRhLXRvb2x0aXBcIikgfHwgXCJcIjtcblxuXHRpZiAodHlwZSA9PT0gXCJzdWJtaXRcIikge1xuXHRcdGNhdGVnb3J5ID0gXCJGb3JtXCI7XG5cdFx0YWN0aW9uID0gXCJzdWJtaXRcIjtcblx0XHRuYW1lID0gbmFtZSB8fCBkb2N1bWVudC50aXRsZTtcblx0fSBlbHNlIGlmICh0eXBlID09PSBcInRvZ2dsZVwiKSB7XG5cdFx0aWYgKCFlbC5tYXRjaGVzKFwiZGlhbG9nOm1vZGFsXCIpKSByZXR1cm47IC8vIFNraXAgbm9uLW1vZGFsIGRpYWxvZ3Ncblx0XHRjYXRlZ29yeSA9IFwiRGlhbG9nXCI7XG5cdFx0YWN0aW9uID0gXCJvcGVuXCI7XG5cdH0gZWxzZSBpZiAodHlwZSA9PT0gXCJjaGFuZ2VcIikge1xuXHRcdGNvbnN0IHR5cGUgPSBhdHRyKGVsLCBcInR5cGVcIik7XG5cdFx0Y29uc3QgZ3JvdXAgPVxuXHRcdFx0dHlwZSA9PT0gXCJjaGVja2JveFwiIHx8IHR5cGUgPT09IFwicmFkaW9cIiA/IGVsLmNsb3Nlc3QoXCJmaWVsZHNldFwiKSA6IG51bGw7XG5cblx0XHRjYXRlZ29yeSA9IFwiRm9ybVwiO1xuXHRcdGFjdGlvbiA9IFwiY2hhbmdlXCI7XG5cdFx0bmFtZSA9XG5cdFx0XHRsYWJlbChncm91cCB8fCBlbCkgfHxcblx0XHRcdHRleHQoZ3JvdXA/LnF1ZXJ5U2VsZWN0b3IoXCJsZWdlbmRcIikpIHx8XG5cdFx0XHR0ZXh0KChlbCBhcyBIVE1MSW5wdXRFbGVtZW50KT8ubGFiZWxzPy5bMF0pO1xuXHR9IGVsc2UgaWYgKGF0dHIoZWwsIFwicm9sZVwiKSA9PT0gXCJ0YWJcIikge1xuXHRcdGNhdGVnb3J5ID0gXCJUYWJcIjtcblx0XHRhY3Rpb24gPSBcIm5hdmlnYXRlXCI7XG5cdH0gZWxzZSBpZiAoYXR0cihlbCwgXCJwb3BvdmVydGFyZ2V0XCIpKSB7XG5cdFx0aWYgKCFwb3BvdmVyKGVsKT8ubWF0Y2hlcyhcIjpwb3BvdmVyLW9wZW5cIikpIHJldHVybjsgLy8gU2tpcCBpZiBub3Qgb3BlblxuXHRcdGNhdGVnb3J5ID0gZWwuY2xvc2VzdChDU1NfSEVMUFRFWFQpID8gXCJIZWxwVGV4dFwiIDogXCJQb3BvdmVyXCI7XG5cdFx0YWN0aW9uID0gXCJvcGVuXCI7XG5cdH0gZWxzZSBpZiAoZWwubm9kZU5hbWUuZW5kc1dpdGgoXCJTVU1NQVJZXCIpKSB7XG5cdFx0aWYgKCEoZWwucGFyZW50RWxlbWVudCBhcyBIVE1MRGV0YWlsc0VsZW1lbnQpLm9wZW4pIHJldHVybjsgLy8gU2tpcCBpZiBub3Qgb3BlblxuXHRcdGNhdGVnb3J5ID0gXCJEZXRhaWxzXCI7XG5cdFx0YWN0aW9uID0gXCJvcGVuXCI7XG5cdH0gZWxzZSBpZiAoYXR0cihlbCwgXCJkYXRhLWNvbW1hbmRcIikgPT09IFwidG9nZ2xlLWFwcC1leHBhbmRlZFwiKSB7XG5cdFx0Y29uc3Qgb3BlbiA9IHN0eWxlKGVsLCBcIi0tbXRkcy10b29sdGlwLXBvc2l0aW9uXCIpID09PSBcIm5vbmVcIjtcblx0XHRjYXRlZ29yeSA9IFwiU2lkZWJhclwiO1xuXHRcdGFjdGlvbiA9IG9wZW4gPyBcImV4cGFuZFwiIDogXCJtaW5pbWl6ZVwiO1xuXHRcdG5hbWUgPSAob3BlbiAmJiBhdHRyKGVsLCBcImRhdGEtdG9vbHRpcFwiKSkgfHwgdGV4dChlbCk7XG5cdH0gZWxzZSBpZiAoZWwuY2xvc2VzdChDU1NfQlJFQURDUlVNQlMpKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkJyZWFkY3J1bWJzXCI7XG5cdFx0YWN0aW9uID0gXCJuYXZpZ2F0ZVwiO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoQ1NTX1BBR0lOQVRJT04pKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIlBhZ2ludGF0aW9uXCI7XG5cdFx0YWN0aW9uID0gXCJuYXZpZ2F0ZVwiO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoQ1NTX0NISVApKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkNoaXBcIjtcblx0XHRhY3Rpb24gPSBlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLXJlbW92YWJsZVwiKSA/IFwicmVtb3ZlXCIgOiBcImNsaWNrXCI7XG5cdH0gZWxzZSBpZiAoZWwuY2xvc2VzdChcInRoW2FyaWEtc29ydF1cIikpIHtcblx0XHRjYXRlZ29yeSA9IFwiVGFibGVcIjtcblx0XHRhY3Rpb24gPSBcInNvcnRcIjtcblx0fSBlbHNlIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxBbmNob3JFbGVtZW50KSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkxpbmtcIjtcblx0XHRhY3Rpb24gPSBlbC5wcm90b2NvbCA9PT0gXCJtYWlsdG86XCIgPyBcImVtYWlsXCIgOiBcIm5hdmlnYXRlXCI7XG5cdFx0aWYgKGVsLmhhc0F0dHJpYnV0ZShcImRvd25sb2FkXCIpKSBhY3Rpb24gPSBcImRvd25sb2FkXCI7XG5cdFx0ZWxzZSBpZiAoZWwuaGFzaCAmJiBlbC5ocmVmLnN0YXJ0c1dpdGgobG9jYXRpb24uaHJlZi5zcGxpdChcIiNcIilbMF0pKVxuXHRcdFx0YWN0aW9uID0gXCJhbmNob3JcIjsgLy8gT25seSB0cmFjayBhcyBhbmNob3IgaWYgc2FtZSBwYWdlXG5cdH0gZWxzZSBpZiAoZWwuaGFzQXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiKSkge1xuXHRcdGlmIChhdHRyKGVsLCBcImFyaWEtZXhwYW5kZWRcIikgIT09IFwidHJ1ZVwiKSByZXR1cm47IC8vIFNraXAgaWYgbm90IG9wZW5cblx0XHRjYXRlZ29yeSA9IFwiRXhwYW5kXCI7XG5cdFx0YWN0aW9uID0gXCJvcGVuXCI7XG5cdH1cblxuXHQvLyBSZXNwZWN0IGF0dHJpYnV0ZXMgYW5kIHNlbmRcblx0YW5hbHl0aWNzKFwiZXZlbnRcIiwge1xuXHRcdGNhdGVnb3J5OiBhdHRyKGVsLCBcImRhdGEtYW5hbHl0aWNzLWNhdGVnb3J5XCIpID8/IGNhdGVnb3J5LFxuXHRcdGFjdGlvbjogYXR0cihlbCwgXCJkYXRhLWFuYWx5dGljcy1hY3Rpb25cIikgPz8gYWN0aW9uLFxuXHRcdG5hbWU6IGF0dHIoZWwsIFwiZGF0YS1hbmFseXRpY3MtbmFtZVwiKSA/PyBuYW1lLFxuXHR9KTtcbn1cblxuLy8gVXRpbGl0aWVzXG5jb25zdCB0ZXh0ID0gKGVsPzogRWxlbWVudCB8IG51bGwpID0+IGVsPy50ZXh0Q29udGVudD8udHJpbSgpIHx8IFwiXCI7XG5jb25zdCBsYWJlbCA9IChlbD86IEVsZW1lbnQgfCBudWxsKSA9PiAoZWwgJiYgYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIpKSB8fCBcIlwiO1xuY29uc3QgcG9wb3ZlciA9IChlbDogRWxlbWVudCkgPT5cblx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXR0cihlbCwgXCJwb3BvdmVydGFyZ2V0XCIpIHx8IFwiXCIpO1xuY29uc3Qgc3R5bGUgPSAoZWw6IEVsZW1lbnQsIGtleTogc3RyaW5nKSA9PlxuXHR3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCkuZ2V0UHJvcGVydHlWYWx1ZShrZXkpPy50cmltKCk7XG5jb25zdCBoZWFkaW5nID0gKGVsOiBFbGVtZW50KSA9PiB7XG5cdGNvbnN0IGJvZHkgPSB0ZXh0KGVsKTtcblx0Y29uc3QgaGVhZCA9IHRleHQoZWwucXVlcnlTZWxlY3RvcihcImgxLGgyLGgzLGg0LGg1LGg2XCIpKTsgLy8gTm90ZTogaGVhZCBtaWdodCBiZSBlbXB0eSBzdHJpbmcgJydcblx0cmV0dXJuIChib2R5LnN0YXJ0c1dpdGgoaGVhZCkgJiYgaGVhZCkgfHwgYm9keS5zbGljZSgwLCAxMDApLnRyaW0oKTsgLy8gTGltaXQgdG8gMTAwIGNoYXJhY3RlcnNcbn07XG5cbm9uTG9hZGVkKCgpID0+IG9uKGRvY3VtZW50LCBFVkVOVFMsIGhhbmRsZVRyYWNrLCBRVUlDS19FVkVOVCkpO1xuIiwiaWYgKFxuXHR0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdHdpbmRvdy5DU1NTdHlsZVNoZWV0ICYmXG5cdGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0c1xuKVxuXHQoKCkgPT4ge1xuXHRcdGNvbnN0IGtleSA9IFwiLS1tdGRzLWFwcC1leHBhbmRlZFwiO1xuXHRcdGNvbnN0IHNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblx0XHRjb25zdCBwcmV2ID0gKCkgPT4gIXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpPy5pbmNsdWRlcyhcImZhbHNlXCIpO1xuXG5cdFx0ZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzLnB1c2goc2hlZXQpO1xuXHRcdHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQgPSAoZm9yY2UpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IG5leHQgPSBmb3JjZSA/PyAhcHJldigpO1xuXHRcdFx0XHRzaGVldC5yZXBsYWNlU3luYz8uKGA6cm9vdCB7ICR7a2V5fTogdmFyKCR7a2V5fS0tJHtuZXh0fSl9YCk7XG5cdFx0XHRcdHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIG5leHQpO1xuXHRcdFx0fSBjYXRjaCAoX2Vycikge30gLy8gbG9jYWxTdG9yYWdlIGlzIGZ1bGwgb3IgcmVwbGFjZVN5bmMgaXMgbm90IHN1cHBvcnRlZFxuXHRcdH07XG5cblx0XHQvLyBTZXQgYW5kIHN0b3JlIGluaXRpYWwgc3RhdGVcblx0XHR3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkKHByZXYoKSk7XG5cdH0pKCk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgZGVib3VuY2UsIG9uLCBvbkxvYWRlZCwgb25NdXRhdGlvbiwgUVVJQ0tfRVZFTlQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCBcIi4vYXBwLXRvZ2dsZVwiO1xuXG5jb25zdCBDU1NfQVBQID0gc3R5bGVzLmFwcC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfU1RJQ0tZID0gc3R5bGVzLnN0aWNreS5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVE9HR0xFID0gJ1tkYXRhLWNvbW1hbmQ9XCJ0b2dnbGUtYXBwLWV4cGFuZGVkXCJdJztcbmNvbnN0IENTU19TSURFQkFSID0gYC4ke0NTU19BUFB9ID4gZGlhbG9nLC4ke0NTU19BUFB9IGRpYWxvZyB+IG1haW5gO1xuXG5jb25zdCB1c2VUcmFuc2l0aW9uID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XG5cdGlmICghZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbikgY2FsbGJhY2soKTtcblx0ZWxzZSBkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0b2dnbGVBcHBFeHBhbmRlZCA9IChmb3JjZT86IGJvb2xlYW4pID0+XG5cdC8vIEB0cy1leHBlY3QtZXJyb3Igd2luZG93Lm10ZHNBcHBUb2dnbGUgY29tZXMgZnJvbSBhcHAtdG9nZ2xlLmpzXG5cdHVzZVRyYW5zaXRpb24oKCkgPT4gd2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZD8uKGZvcmNlKSk7XG5cbmZ1bmN0aW9uIGhhbmRsZUFwcFRvZ2dsZUNsaWNrKHsgdGFyZ2V0OiBlbCwgZGVmYXVsdFByZXZlbnRlZDogc3RvcCB9OiBFdmVudCkge1xuXHRjb25zdCBsaW5rID0gKGVsIGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oXCJhXCIpO1xuXHRpZiAobGluaz8uY2xvc2VzdChcImRpYWxvZ1wiKSAmJiBsaW5rPy5jbG9zZXN0KENTU19TSURFQkFSKSlcblx0XHRyZXR1cm4gY2xvc2VTaWRlYmFyKCk7IC8vIENsb3NlIHNpZGViYXIgaWYgbGluayBpcyBjbGlja2VkIGluc2lkZSBzaWRlYmFyXG5cblx0aWYgKHN0b3AgfHwgIShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSB8fCAhZWwubWF0Y2hlcyhDU1NfVE9HR0xFKSlcblx0XHRyZXR1cm47XG5cdGNvbnN0IGlzRGVza3RvcCA9IGdldENvbXB1dGVkU3R5bGUoZWwpLnBvc2l0aW9uID09PSBcInN0aWNreVwiO1xuXG5cdGlmIChpc0Rlc2t0b3ApIHRvZ2dsZUFwcEV4cGFuZGVkKCk7XG5cdGVsc2Vcblx0XHR1c2VUcmFuc2l0aW9uKCgpID0+IHtcblx0XHRcdGNvbnN0IHNpZGViYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaWFsb2dFbGVtZW50PihDU1NfU0lERUJBUik7XG5cdFx0XHRzaWRlYmFyPy5zZXRBdHRyaWJ1dGUoXCJkYXRhLWNsb3NlZGJ5XCIsIFwiYW55XCIpOyAvLyBBbGxvdyBjbG9zaW5nIGJ5IGNsaWNraW5nIG91dHNpZGVcblx0XHRcdHNpZGViYXI/LnNob3dNb2RhbCgpO1xuXHRcdH0pO1xufVxuXG5mdW5jdGlvbiBjbG9zZVNpZGViYXIoKSB7XG5cdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpYWxvZ0VsZW1lbnQ+KENTU19TSURFQkFSKT8uY2xvc2UoKTtcbn1cblxuLy8gU2Nyb2xsIHN0YXRlXG5sZXQgTUlOX1kgPSAwOyAvLyBPZmZzZXQgdG8gYXZvaWQgc2Nyb2xsIGp1bXAgd2hlbiBzdGlja3kgaXMgc2V0IHRvIHJlbGF0aXZlXG5sZXQgU0NST0xMX1VQOiBib29sZWFuO1xubGV0IFNUSUNLID0gMDsgLy8gLTEgPSBzdGljayB0b3AsIDAgPSByZWxhdGl2ZSwgMSA9IHN0aWNrIGJvdHRvbVxubGV0IFNUSUNLX0VMOiBIVE1MRWxlbWVudDtcbmxldCBTVElDS19IID0gMDtcbmxldCBTVElDS19ZID0gMDtcbmxldCBTVFVDSyA9IGZhbHNlOyAvLyBVc2VkIHRvIGZpZ3VyZSBpZiBuYXYgaXMgbGFyZ2VyIHRoYW4gdmlld3BvcnRcbmxldCBXSU5fSCA9IDA7XG5sZXQgV0lOX1kgPSAwO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihbc3RpY2t5XTogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0U1RJQ0tfRUwgPSBzdGlja3k7XG5cdGhhbmRsZUFwcFNjcm9sbCgpOyAvLyBSdW4gb24gY29ubmVjdFxufVxuXG5mdW5jdGlvbiBoYW5kbGVBcHBTY3JvbGwoKSB7XG5cdGlmICghU1RJQ0tfRUw/LmlzQ29ubmVjdGVkKSByZXR1cm47XG5cdGNvbnN0IE5FWFRfWSA9IHdpbmRvdy5zY3JvbGxZO1xuXHRjb25zdCBORVhUX1VQID0gTkVYVF9ZIDwgV0lOX1k7XG5cdFdJTl9ZID0gTkVYVF9ZO1xuXG5cdC8vIE9ubHkgY2FsY3VsYXRlIGlmIHNjcm9sbCBkaXJlY3Rpb24gaGFzIGNoYW5nZWRcblx0aWYgKE5FWFRfVVAgIT09IFNDUk9MTF9VUCkge1xuXHRcdE1JTl9ZID0gKFNUSUNLX0VMLnBhcmVudEVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCB8fCAwKSArIFdJTl9ZO1xuXHRcdFNDUk9MTF9VUCA9IE5FWFRfVVA7XG5cdFx0U1RJQ0tfSCA9IFNUSUNLX0VMLm9mZnNldEhlaWdodDtcblx0XHRTVElDS19ZID0gU1RJQ0tfRUwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgV0lOX1k7XG5cdFx0U1RVQ0sgPSBTVElDS19FTC5vZmZzZXRIZWlnaHQgPD0gd2luZG93LmlubmVySGVpZ2h0O1xuXHRcdFdJTl9IID0gd2luZG93LmlubmVySGVpZ2h0O1xuXHR9XG5cblx0aWYgKFNUSUNLID09PSAtMSAmJiBTVFVDSykgcmV0dXJuOyAvLyBBbGx3YXlzIHN0aWNreSB3aGVuIHNpZGViYXIgaXMgc21hbGxlciB0aGFuIHZpZXdwb3J0XG5cdGlmIChTVElDSyAhPT0gLTEgJiYgKFNUVUNLIHx8IChTQ1JPTExfVVAgJiYgV0lOX1kgPD0gU1RJQ0tfWSkpKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInN0aWNreVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIFwiMHB4XCIpO1xuXHRcdFNUSUNLID0gLTE7IC8vIE5vdCBzdGlja2luZyB0byB0b3AgYW5kIHNpZGViYXIgaXMgc21hbGxlciB0aGFuIHZpZXdwb3J0IG9yIHNjcm9sbGluZyB1cFxuXHR9IGVsc2UgaWYgKFNUSUNLID09PSAtMSAmJiAhU0NST0xMX1VQKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInJlbGF0aXZlXCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7TWF0aC5tYXgoMCwgV0lOX1kgLSBNSU5fWSl9cHhgKTtcblx0XHRTVElDSyA9IDA7IC8vIFN0aWNraW5nIHRvIHRvcCBhbmQgc2Nyb2xsaW5nIGRvd25cblx0fSBlbHNlIGlmIChTVElDSyAhPT0gMSAmJiAhU0NST0xMX1VQICYmIFdJTl9ZICsgV0lOX0ggPj0gU1RJQ0tfWSArIFNUSUNLX0gpIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwic3RpY2t5XCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7V0lOX0ggLSBTVElDS19IfXB4YCk7XG5cdFx0U1RJQ0sgPSAxOyAvLyBOb3Qgc3RpY2tpbmcgdG8gYm90dG9tIGFuZCBzY3JvbGxpbmcgZG93blxuXHR9IGVsc2UgaWYgKFNUSUNLID09PSAxICYmIFNDUk9MTF9VUCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJyZWxhdGl2ZVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke1NUSUNLX1kgLSBNSU5fWX1weGApO1xuXHRcdFNUSUNLID0gMDsgLy8gU3RpY2tpbmcgdG8gYm90dG9tIGFuZCBzY3JvbGxpbmcgdXBcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfU1RJQ0tZLCBoYW5kbGVNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZUFwcFRvZ2dsZUNsaWNrLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJyZXNpemVcIiwgZGVib3VuY2UoY2xvc2VTaWRlYmFyLCAxMDApLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJzY3JvbGxcIiwgaGFuZGxlQXBwU2Nyb2xsLCBRVUlDS19FVkVOVCk7XG59KTtcbiIsImNvbnN0IGdldFN0ZXBzID0gKFxuXHRub3c6IG51bWJlcixcblx0bWF4OiBudW1iZXIsXG5cdHNob3cgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXG4pID0+IHtcblx0Y29uc3Qgb2Zmc2V0ID0gKHNob3cgLSAxKSAvIDI7XG5cdGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoTWF0aC5taW4obm93IC0gTWF0aC5mbG9vcihvZmZzZXQpLCBtYXggLSBzaG93ICsgMSksIDEpO1xuXHRjb25zdCBlbmQgPSBNYXRoLm1pbihNYXRoLm1heChub3cgKyBNYXRoLmNlaWwob2Zmc2V0KSwgc2hvdyksIG1heCk7XG5cdGNvbnN0IHBhZ2VzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogZW5kICsgMSAtIHN0YXJ0IH0sIChfLCBpKSA9PiBpICsgc3RhcnQpO1xuXG5cdGlmIChzaG93ID4gNCAmJiBzdGFydCA+IDEpIHBhZ2VzLnNwbGljZSgwLCAyLCAxLCAwKTtcblx0aWYgKHNob3cgPiAzICYmIGVuZCA8IG1heCkgcGFnZXMuc3BsaWNlKC0yLCAyLCAwLCBtYXgpO1xuXHRyZXR1cm4gcGFnZXM7XG59O1xuXG5leHBvcnQgY29uc3QgcGFnaW5hdGlvbiA9ICh7IGN1cnJlbnQgPSAxLCB0b3RhbCA9IDEwLCBzaG93ID0gNyB9KSA9PiAoe1xuXHRwcmV2OiBjdXJyZW50ID4gMSA/IGN1cnJlbnQgLSAxIDogMCxcblx0bmV4dDogY3VycmVudCA8IHRvdGFsID8gY3VycmVudCArIDEgOiAwLFxuXHRwYWdlczogZ2V0U3RlcHMoY3VycmVudCwgdG90YWwsIHNob3cpLm1hcCgocGFnZSwgaW5kZXgpID0+ICh7XG5cdFx0Y3VycmVudDogcGFnZSA9PT0gY3VycmVudCAmJiAoXCJwYWdlXCIgYXMgY29uc3QpLFxuXHRcdGtleTogYGtleS0ke3BhZ2V9LSR7aW5kZXh9YCxcblx0XHRwYWdlLFxuXHR9KSksXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfQlJFQURDUlVNQlMgPSBzdHlsZXMuYnJlYWRjcnVtYnMuc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVCcmVhZGNydW1ic011dGF0aW9uKGJyZWFkY3J1bWJzOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRmb3IgKGNvbnN0IGJyZWFkY3VtYnMgb2YgYnJlYWRjcnVtYnMpXG5cdFx0YnJlYWRjdW1icy5xdWVyeVNlbGVjdG9yQWxsKFwibGkgYVwiKS5mb3JFYWNoKChjcnVtYiwgaW5kZXgsIHsgbGVuZ3RoIH0pID0+IHtcblx0XHRcdGF0dHIoY3J1bWIsIFwiYXJpYS1jdXJyZW50XCIsIGluZGV4ID09PSBsZW5ndGggLSAxID8gXCJwYWdlXCIgOiBudWxsKTtcblx0XHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5cdFx0Q1NTX0JSRUFEQ1JVTUJTLFxuXHRcdGhhbmRsZUJyZWFkY3J1bWJzTXV0YXRpb24sXG5cdCksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdGF0dHIsXG5cdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIsXG5cdElTX0JST1dTRVIsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0UVVJQ0tfRVZFTlQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRElBTE9HID0gc3R5bGVzLmRpYWxvZy5zcGxpdChcIiBcIilbMF07XG5jb25zdCBESUFMT0dTID0gSVNfQlJPV1NFUlxuXHQ/IChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuXHRcdFx0Q1NTX0RJQUxPRyxcblx0XHQpIGFzIEhUTUxDb2xsZWN0aW9uT2Y8SFRNTERpYWxvZ0VsZW1lbnQ+KVxuXHQ6IFtdO1xuXG5jb25zdCBoYW5kbGVNb2RhbCA9ICgpID0+IHtcblx0Zm9yIChjb25zdCBkaWFsb2cgb2YgRElBTE9HUylcblx0XHRpZiAoZGlhbG9nLmlzQ29ubmVjdGVkICYmIGRpYWxvZy5zaG93TW9kYWwgJiYgZGlhbG9nLmNsb3NlKSB7XG5cdFx0XHRpZiAoZGlhbG9nLm1hdGNoZXMoJ1tvcGVuXTpub3QoW2RhdGEtbW9kYWw9XCJmYWxzZVwiXSk6bm90KDptb2RhbCknKSkge1xuXHRcdFx0XHRhdHRyKGRpYWxvZywgXCJvcGVuXCIsIG51bGwpOyAvLyBVc2luZyBhdHRyaWJ1dGUgaW5zdGVhZCBvZiAuY2xvc2UgdG8gYXZvaWQgYGNsb3NlYCBldmVudFxuXHRcdFx0XHRkaWFsb2cuc2hvd01vZGFsKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGRpYWxvZy5tYXRjaGVzKFwiOm1vZGFsOm5vdChbb3Blbl0pXCIpKSB7XG5cdFx0XHRcdGF0dHIoZGlhbG9nLCBcIm9wZW5cIiwgXCJcIik7IC8vIFNldCBhcyBvcGVuXG5cdFx0XHRcdGRpYWxvZy5jbG9zZSgpOyAvLyBTbyB3ZSBjb3JyZWNsdHkgY2FuIGNhbGwgLmNsb3NlLCByZW1vdmluZyA8ZGlhbG9nPiBmcm9tICN0b3AtbGF5ZXJcblx0XHRcdH1cblx0XHR9XG59O1xuXG5jb25zdCBoYW5kbGVEaWFsb2dDbGljayA9ICh7XG5cdGNsaWVudFg6IHgsXG5cdGNsaWVudFk6IHksXG5cdHRhcmdldDogZWwsXG59OiBNb3VzZUV2ZW50KSA9PiB7XG5cdGlmIChlbCBpbnN0YW5jZW9mIEhUTUxEaWFsb2dFbGVtZW50ICYmIGF0dHIoZWwsIFwiZGF0YS1jbG9zZWRieVwiKSA9PT0gXCJhbnlcIikge1xuXHRcdGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRjb25zdCBpc0luc2lkZSA9IHRvcCA8PSB5ICYmIHkgPD0gYm90dG9tICYmIGxlZnQgPD0geCAmJiB4IDw9IHJpZ2h0O1xuXHRcdGlmICghaXNJbnNpZGUpIHJldHVybiBlbC5jbG9zZSgpO1xuXHR9XG5cdGNvbnN0IGRpYWxvZyA9IChlbCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKFwiZGlhbG9nXCIpO1xuXHRjb25zdCBjbG9zZSA9IGRpYWxvZyAmJiAoZWwgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LignW2RhdGEtY29tbWFuZD1cImNsb3NlXCJdJyk7XG5cdGlmIChjbG9zZSkgZGlhbG9nLmNsb3NlKCk7XG59O1xuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZURpYWxvZ0NsaWNrIGFzIEV2ZW50TGlzdGVuZXIsIFFVSUNLX0VWRU5UKTtcblx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcihoYW5kbGVNb2RhbCkub2JzZXJ2ZShcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5cdFx0e1xuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbXCJvcGVuXCJdLFxuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRcdHN1YnRyZWU6IHRydWUsXG5cdFx0fSxcblx0KTtcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uLCBvbkxvYWRlZCwgUVVJQ0tfRVZFTlQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZnVuY3Rpb24gaGFuZGxlRXJyb3N1bW1hcnlJbmplY3QoZXZlbnQ6IEV2ZW50ICYgeyBhbmltYXRpb25OYW1lPzogc3RyaW5nIH0pIHtcblx0aWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgIT09IHN0eWxlcy5fZXJyb3JzdW1tYXJ5KSByZXR1cm47XG5cdGNvbnN0IGZpcnN0ID0gKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KT8uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cblx0aWYgKGZpcnN0IGluc3RhbmNlb2YgSFRNTEhlYWRpbmdFbGVtZW50KSB7XG5cdFx0YXR0cihmaXJzdCwgXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuXHRcdGZpcnN0LmZvY3VzKCk7IC8vIEF1dG9mb2N1cyBmaXJzdCBoZWFkaW5nXG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b24oZG9jdW1lbnQsIFwiYW5pbWF0aW9uZW5kXCIsIGhhbmRsZUVycm9zdW1tYXJ5SW5qZWN0LCBRVUlDS19FVkVOVCksXG4pO1xuIiwidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuXG4vLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgRk9DVVNfT1VUTElORSA9IFwib3V0bGluZTogMXB4IGRvdHRlZDsgb3V0bGluZTogNXB4IGF1dG8gSGlnaGxpZ2h0OyBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3JcIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuc2hhZG93Um9vdCB8fCBlbGVtZW50LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gIC8vIFVubmFtZWQgc2xvdCBkb2VzIGF1dG9tYXRpY2FsbHkgcmVuZGVyIGFsbCB0b3AgZWxlbWVudCBub2Rlc1xuICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgY3NzKVxuKTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoX2Vycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgTElWRTtcbnZhciBMSVZFX1NSX0ZJWCA9IDA7XG52YXIgc3BlYWsgPSAodGV4dCkgPT4ge1xuICBpZiAoIUxJVkUpIHtcbiAgICBMSVZFID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBMSVZFLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gICAgYXR0cihMSVZFLCBcImFyaWEtbGl2ZVwiLCBcImFzc2VydGl2ZVwiKTtcbiAgfVxuICBpZiAoIUxJVkUuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKExJVkUpO1xuICBpZiAodGV4dCkgTElWRS50ZXh0Q29udGVudCA9IGAke3RleHR9JHtMSVZFX1NSX0ZJWCsrICUgMiA/IFwiXFx4QTBcIiA6IFwiXCJ9YDtcbn07XG52YXIgc2V0VmFsdWUgPSAoaW5wdXQsIGRhdGEsIHR5cGUgPSBcIlwiKSA9PiB7XG4gIHZhciBfYTIsIF9iO1xuICBjb25zdCBldmVudCA9IHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUsIGRhdGEsIGlucHV0VHlwZTogdHlwZSB9O1xuICBjb25zdCBwcm90byA9IEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiYmVmb3JlaW5wdXRcIiwgZXZlbnQpKTtcbiAgKF9iID0gKF9hMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIFwidmFsdWVcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChpbnB1dCwgZGF0YSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJpbnB1dFwiLCBldmVudCkpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImNoYW5nZVwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xufTtcbnZhciBJU19QUkVTUyA9IGZhbHNlO1xudmFyIGlzTW91c2VEb3duID0gKGV2ZW50KSA9PiB7XG4gIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm1vdXNldXBcIikgSVNfUFJFU1MgPSBmYWxzZTtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2Vkb3duXCIpIHtcbiAgICBJU19QUkVTUyA9IHRydWU7XG4gICAgb24oZG9jdW1lbnQsIFwibW91c2V1cFwiLCBpc01vdXNlRG93biwgeyBvbmNlOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiBJU19QUkVTUztcbn07XG52YXIgZGVjbGFyYXRpdmVTaGFkb3dSb290ID0gKHN0eWxlLCBzbG90ID0gXCI8c2xvdD48L3Nsb3Q+XCIpID0+IGA8dGVtcGxhdGUgc2hhZG93cm9vdG1vZGU9XCJvcGVuXCI+JHtzbG90fTxzdHlsZT4ke3N0eWxlfTwvc3R5bGU+PC90ZW1wbGF0ZT5gO1xuXG4vLyB1LW9wdGlvbi50c1xudmFyIERJU0FCTEVEID0gXCJkaXNhYmxlZFwiO1xudmFyIFNFTEVDVEVEID0gXCJzZWxlY3RlZFwiO1xudmFyIFVIVE1MT3B0aW9uRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtESVNBQkxFRCwgU0VMRUNURURdO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICghSVNfSU9TKSB0aGlzLnRhYkluZGV4ID0gLTE7XG4gICAgaWYgKCF0aGlzLmhhc0F0dHJpYnV0ZShcInJvbGVcIikpIGF0dHIodGhpcywgXCJyb2xlXCIsIFwib3B0aW9uXCIpO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWRpc2FibGVkXCIsIGAke3RoaXMuZGlzYWJsZWR9YCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtc2VsZWN0ZWRcIiwgYCR7dGhpcy5zZWxlY3RlZH1gKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgd2hldGhlciB0aGUgb3B0aW9uIGluIHRoZSBsaXN0IGJveCBpcyB0aGUgZGVmYXVsdCBpdGVtLiAqL1xuICBnZXQgZGVmYXVsdFNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzW1NFTEVDVEVEXTtcbiAgfVxuICBzZXQgZGVmYXVsdFNlbGVjdGVkKHZhbHVlKSB7XG4gICAgdGhpc1tTRUxFQ1RFRF0gPSB2YWx1ZTtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgRElTQUJMRUQpICE9PSBudWxsO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgRElTQUJMRUQsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIC8qKiBSZXRyaWV2ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGZvcm0gdGhhdCB0aGUgb2JqZWN0IGlzIGVtYmVkZGVkIGluLiAqL1xuICBnZXQgZm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwiZm9ybVwiKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIG9yZGluYWwgcG9zaXRpb24gb2YgYW4gb3B0aW9uIGluIGEgbGlzdCBib3guICovXG4gIGdldCBpbmRleCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiBbXG4gICAgICAuLi4oKF9hMiA9IHRoaXMucGFyZW50RWxlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5vcHRpb25zKSB8fCBbdGhpc11cbiAgICBdLmluZGV4T2YodGhpcyk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIGEgdmFsdWUgdGhhdCB5b3UgY2FuIHVzZSB0byBpbXBsZW1lbnQgeW91ciBvd24gbGFiZWwgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIG9iamVjdC4gKi9cbiAgZ2V0IGxhYmVsKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIChfYTIgPSBhdHRyKHRoaXMsIFwibGFiZWxcIikpICE9IG51bGwgPyBfYTIgOiB0aGlzLnRleHQ7XG4gIH1cbiAgc2V0IGxhYmVsKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImxhYmVsXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgU0VMRUNURUQpICE9PSBudWxsO1xuICB9XG4gIHNldCBzZWxlY3RlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgU0VMRUNURUQsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdGV4dCBzdHJpbmcgc3BlY2lmaWVkIGJ5IHRoZSBvcHRpb24gdGFnLiAqL1xuICBnZXQgdGV4dCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IHRoaXMudGV4dENvbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICB9XG4gIHNldCB0ZXh0KHRleHQpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIHZhbHVlIHdoaWNoIGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIgd2hlbiB0aGUgZm9ybSBjb250cm9sIGlzIHN1Ym1pdHRlZC4gKi9cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIChfYTIgPSBhdHRyKHRoaXMsIFwidmFsdWVcIikpICE9IG51bGwgPyBfYTIgOiB0aGlzLnRleHQ7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgfVxufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtb3B0aW9uXCIsIFVIVE1MT3B0aW9uRWxlbWVudCk7XG5cbi8vIHUtZGF0YWxpc3QudHNcbnZhciBVSFRNTERhdGFMaXN0U3R5bGUgPSBgJHtESVNQTEFZX0JMT0NLfVxuOjpzbG90dGVkKHUtb3B0aW9uKSB7IGRpc3BsYXk6IGJsb2NrOyBjdXJzb3I6IHBvaW50ZXIgfVxuOjpzbG90dGVkKHUtb3B0aW9uOmZvY3VzKSB7ICR7Rk9DVVNfT1VUTElORX0gfVxuOjpzbG90dGVkKHUtb3B0aW9uW2FyaWEtaGlkZGVuPVwidHJ1ZVwiXSksXG46OnNsb3R0ZWQodS1vcHRpb25bZGlzYWJsZWRdKSxcbjo6c2xvdHRlZCh1LW9wdGlvbltoaWRkZW5dKSB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudCB9YDtcbnZhciBVSFRNTERhdGFMaXN0U2hhZG93Um9vdCA9IGRlY2xhcmF0aXZlU2hhZG93Um9vdChVSFRNTERhdGFMaXN0U3R5bGUpO1xudmFyIExJVkVfVElNRVI7XG52YXIgSU5QVVRfREVCT1VOQ0UgPSAwO1xudmFyIElTX01PQklMRSA9IElTX0lPUyB8fCBJU19BTkRST0lEO1xudmFyIEVWRU5UUyA9IFwiY2xpY2ssZm9jdXNvdXQsaW5wdXQsa2V5ZG93bixtb3VzZWRvd24sbW91c2V1cFwiO1xudmFyIEVWRU5UU19JTlBVVCA9IFwiZm9jdXMsZm9jdXNpbixibHVyLGZvY3Vzb3V0XCI7XG52YXIgVEVYVFMgPSB7XG4gIHNpbmd1bGFyOiBcIiVkIGhpdFwiLFxuICBwbHVyYWw6IFwiJWQgaGl0c1wiXG59O1xudmFyIFVIVE1MRGF0YUxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3RleHRzID0gX19zcHJlYWRWYWx1ZXMoe30sIFRFWFRTKTtcbiAgICB0aGlzLl92YWx1ZSA9IFwiXCI7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgVUhUTUxEYXRhTGlzdFN0eWxlKTtcbiAgfVxuICAvLyBVc2VkIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgYW5ub3VuY2VtZW50c1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiaWRcIiwgLi4uT2JqZWN0LmtleXMoVEVYVFMpLm1hcCgoa2V5KSA9PiBgZGF0YS1zci0ke2tleX1gKV07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuX3Jvb3QgPSBnZXRSb290KHRoaXMpO1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwibGlzdGJveFwiKTtcbiAgICBhdHRyKHRoaXMsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICBvbih0aGlzLl9yb290LCBcImZvY3VzaW5cIiwgdGhpcyk7XG4gICAgb24odGhpcy5fcm9vdCwgXCJmb2N1c1wiLCB0aGlzLCB0cnVlKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1wiZGlzYWJsZWRcIiwgXCJoaWRkZW5cIiwgXCJsYWJlbFwiLCBcInZhbHVlXCJdLFxuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpKTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBvZmYodGhpcy5fcm9vdCB8fCB0aGlzLCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIG9mZih0aGlzLl9yb290IHx8IHRoaXMsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIGZhbHNlKTtcbiAgICBkaXNjb25uZWN0SW5wdXQodGhpcyk7XG4gICAgdGhpcy5fcm9vdCA9IHZvaWQgMDtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socHJvcCwgX3ByZXYsIG5leHQpIHtcbiAgICBjb25zdCB0ZXh0ID0gcHJvcCA9PSBudWxsID8gdm9pZCAwIDogcHJvcC5zcGxpdChcImRhdGEtc3ItXCIpWzFdO1xuICAgIGNvbnN0IGNzcyA9IGBpbnB1dFtsaXN0PVwiJHt0aGlzLmlkfVwiXWA7XG4gICAgaWYgKFRFWFRTW3RleHRdKSB0aGlzLl90ZXh0c1t0ZXh0XSA9IG5leHQgfHwgVEVYVFNbdGV4dF07XG4gICAgZWxzZSBpZiAodGhpcy5fcm9vdCkge1xuICAgICAgaWYgKHRoaXMuX2lucHV0KSBzZXR1cElucHV0KHRoaXMsIHRoaXMuX2lucHV0KTtcbiAgICAgIGZvciAoY29uc3QgaW5wdXQgb2YgdGhpcy5fcm9vdC5xdWVyeVNlbGVjdG9yQWxsKGNzcykpXG4gICAgICAgIHNldHVwSW5wdXQodGhpcywgaW5wdXQpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHsgdGFyZ2V0LCB0eXBlIH0gPSBldmVudDtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmICh0eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImZvY3VzXCIgfHwgdHlwZSA9PT0gXCJmb2N1c2luXCIpIG9uRm9jdXModGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImJsdXJcIiB8fCB0eXBlID09PSBcImZvY3Vzb3V0XCIpIG9uQmx1cih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwia2V5ZG93blwiKSBvbktleURvd24odGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiICYmIHRoaXMuY29udGFpbnModGFyZ2V0KSlcbiAgICAgIGlzTW91c2VEb3duKGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJtdXRhdGlvblwiIHx8IHR5cGUgPT09IFwiaW5wdXRcIikge1xuICAgICAgY2xlYXJUaW1lb3V0KElOUFVUX0RFQk9VTkNFKTtcbiAgICAgIElOUFVUX0RFQk9VTkNFID0gc2V0VGltZW91dChvbklucHV0LCAwLCB0aGlzLCBldmVudCk7XG4gICAgfVxuICB9XG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidS1vcHRpb25cIik7XG4gIH1cbn07XG52YXIgaXNEaXNhYmxlZCA9IChpbnB1dCkgPT4gKGlucHV0ID09IG51bGwgPyB2b2lkIDAgOiBpbnB1dC5kaXNhYmxlZCkgfHwgKGlucHV0ID09IG51bGwgPyB2b2lkIDAgOiBpbnB1dC5yZWFkT25seSkgfHwgZmFsc2U7XG52YXIgc2V0RXhwYW5kZWQgPSAoc2VsZiwgb3BlbikgPT4ge1xuICB2YXIgX2EyLCBfYiwgX2M7XG4gIGlmIChzZWxmLmhpZGRlbiAhPT0gb3BlbikgcmV0dXJuO1xuICBzZWxmLmhpZGRlbiA9IGlzRGlzYWJsZWQoc2VsZiA9PSBudWxsID8gdm9pZCAwIDogc2VsZi5faW5wdXQpIHx8ICFvcGVuO1xuICAoX2EyID0gbXV0YXRpb25PYnNlcnZlcihzZWxmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50YWtlUmVjb3JkcygpO1xuICBjb25zdCBpc1BvcG92ZXIgPSBzZWxmLmlzQ29ubmVjdGVkICYmIHNlbGYucG9wb3ZlciAmJiAoKF9iID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5pc0Nvbm5lY3RlZCkgJiYgKChfYyA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2MucG9wb3ZlclRhcmdldEVsZW1lbnQpID09PSBzZWxmO1xuICBpZiAoc2VsZi5faW5wdXQpIHNldHVwSW5wdXQoc2VsZiwgc2VsZi5faW5wdXQsIG9wZW4pO1xuICBpZiAoaXNQb3BvdmVyKSBhdHRyKHNlbGYsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcbiAgaWYgKGlzUG9wb3Zlcikgc2VsZi50b2dnbGVQb3BvdmVyKG9wZW4pO1xuICBpZiAob3Blbikgb25JbnB1dChzZWxmKTtcbn07XG52YXIgZGlzY29ubmVjdElucHV0ID0gKHNlbGYpID0+IHtcbiAgaWYgKCFzZWxmLl9pbnB1dCkgcmV0dXJuO1xuICBvZmYoc2VsZi5faW5wdXQgfHwgc2VsZiwgRVZFTlRTX0lOUFVULCBzZWxmKTtcbiAgb2ZmKHNlbGYuX3Jvb3QgfHwgc2VsZiwgRVZFTlRTLCBzZWxmKTtcbiAgc2V0RXhwYW5kZWQoc2VsZiwgZmFsc2UpO1xuICBzZWxmLl9pbnB1dCA9IHZvaWQgMDtcbn07XG52YXIgc2V0dXBJbnB1dCA9IChzZWxmLCBpbnB1dCwgb3BlbiA9IGZhbHNlKSA9PiB7XG4gIGlmIChzZWxmLnBvcG92ZXIpIGF0dHIoaW5wdXQsIFwicG9wb3ZlcnRhcmdldFwiLCB1c2VJZChzZWxmKSk7XG4gIG9uKGlucHV0LCBFVkVOVFNfSU5QVVQsIHNlbGYsIHRydWUpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtYXV0b2NvbXBsZXRlXCIsIFwibGlzdFwiKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWNvbnRyb2xzXCIsIHVzZUlkKHNlbGYpKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWV4cGFuZGVkXCIsIGAkeyFJU19NT0JJTEUgfHwgb3Blbn1gKTtcbiAgYXR0cihpbnB1dCwgXCJhdXRvY29tcGxldGVcIiwgXCJvZmZcIik7XG4gIGF0dHIoaW5wdXQsIFwicm9sZVwiLCBpc0Rpc2FibGVkKGlucHV0KSA/IG51bGwgOiBcImNvbWJvYm94XCIpO1xufTtcbnZhciBvbkZvY3VzID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IGlzSW5wdXQgPSBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50O1xuICBpZiAoaXNJbnB1dCAmJiBldmVudC5pc1RydXN0ZWQpIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICBpZiAoc2VsZi5faW5wdXQgIT09IGV2ZW50LnRhcmdldCAmJiBpc0lucHV0ICYmIGV2ZW50LnRhcmdldC5saXN0ID09PSBzZWxmKSB7XG4gICAgaWYgKHNlbGYuX2lucHV0KSBkaXNjb25uZWN0SW5wdXQoc2VsZik7XG4gICAgc2VsZi5faW5wdXQgPSBldmVudC50YXJnZXQ7XG4gICAgc2VsZi5faW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImZvY3VzXCIpKTtcbiAgICBzZWxmLl9pbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNpblwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgIGF0dHIoc2VsZiwgU0FGRV9MQUJFTExFREJZLCB1c2VJZCgoX2EyID0gc2VsZi5faW5wdXQubGFiZWxzKSA9PSBudWxsID8gdm9pZCAwIDogX2EyWzBdKSk7XG4gICAgb24oc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICAgIHNldEV4cGFuZGVkKHNlbGYsIGF0dHIoc2VsZi5faW5wdXQsIFwiaW5wdXRtb2RlXCIpICE9PSBcIm5vbmVcIik7XG4gICAgc3BlYWsoKTtcbiAgfVxufTtcbnZhciBvbkJsdXIgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgaWYgKCFJU19BTkRST0lEICYmICFpc01vdXNlRG93bigpICYmIHNlbGYuX2lucHV0KVxuICAgIHNldFRpbWVvdXQob25CbHVycmVkLCAwLCBzZWxmKTtcbiAgaWYgKGV2ZW50LnRhcmdldCA9PT0gc2VsZi5faW5wdXQgJiYgZXZlbnQuaXNUcnVzdGVkKVxuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufTtcbnZhciBvbkJsdXJyZWQgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByZWxhdGVkVGFyZ2V0ID0gKChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQpIHx8IG51bGw7XG4gIGNvbnN0IGlucHV0ID0gc2VsZi5faW5wdXQ7XG4gIGlmIChpbnB1dCAmJiBpbnB1dCAhPT0gcmVsYXRlZFRhcmdldCAmJiAhc2VsZi5jb250YWlucyhyZWxhdGVkVGFyZ2V0KSkge1xuICAgIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJibHVyXCIsIHsgcmVsYXRlZFRhcmdldCB9KSk7XG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNvdXRcIiwgeyBidWJibGVzOiB0cnVlLCByZWxhdGVkVGFyZ2V0IH0pXG4gICAgKTtcbiAgICBkaXNjb25uZWN0SW5wdXQoc2VsZik7XG4gIH1cbn07XG52YXIgb25DbGljayA9IChzZWxmLCB7IHRhcmdldCB9KSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmICghc2VsZi5faW5wdXQgfHwgc2VsZi5faW5wdXQgPT09IHRhcmdldCkgcmV0dXJuIHNldEV4cGFuZGVkKHNlbGYsIHRydWUpO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBzZWxmLm9wdGlvbnMpXG4gICAgaWYgKG9wdC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICBpZiAoYXR0cihzZWxmLCBcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCIpICE9PSBcInRydWVcIikge1xuICAgICAgICAoX2EyID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZm9jdXMoKTtcbiAgICAgICAgc2V0RXhwYW5kZWQoc2VsZiwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldFZhbHVlKHNlbGYuX2lucHV0LCBvcHQudmFsdWUpO1xuICAgIH1cbiAgaWYgKElTX0FORFJPSUQpIG9uQmx1cnJlZChzZWxmKTtcbn07XG52YXIgb25LZXlEb3duID0gKHNlbGYsIGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgeyBrZXksIHRhcmdldCwgYWx0S2V5LCBjdHJsS2V5LCBzaGlmdEtleSwgbWV0YUtleSB9ID0gZTtcbiAgY29uc3QgaXNFc2NhcGUgPSBrZXkgPT09IFwiRXNjYXBlXCIgfHwga2V5ID09PSBcIkVzY1wiO1xuICBpZiAoYWx0S2V5IHx8IGN0cmxLZXkgfHwgbWV0YUtleSB8fCBzaGlmdEtleSB8fCBrZXkgPT09IFwiVGFiXCIpIHJldHVybjtcbiAgaWYgKGlzRXNjYXBlICYmICFzZWxmLmhpZGRlbikgZSA9PSBudWxsID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICBzZXRFeHBhbmRlZChzZWxmLCAhaXNFc2NhcGUpO1xuICBjb25zdCBvcHRpb25zID0gWy4uLnNlbGYub3B0aW9uc10uZmlsdGVyKFxuICAgIChlbCkgPT4gYXR0cihlbCwgXCJhcmlhLWhpZGRlblwiKSAhPT0gXCJ0cnVlXCIgJiYgZWwub2Zmc2V0SGVpZ2h0XG4gICk7XG4gIGNvbnN0IHByZXYgPSBvcHRpb25zLmluZGV4T2YodGFyZ2V0KTtcbiAgbGV0IG5leHQgPSAtMTtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIikgbmV4dCA9IChwcmV2ICsgMSkgJSBvcHRpb25zLmxlbmd0aDtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1VwXCIpIG5leHQgPSAofnByZXYgPyBwcmV2IDogb3B0aW9ucy5sZW5ndGgpIC0gMTtcbiAgaWYgKH5wcmV2KSB7XG4gICAgaWYgKGtleSA9PT0gXCJIb21lXCIgfHwga2V5ID09PSBcIlBhZ2VVcFwiKSBuZXh0ID0gMDtcbiAgICBpZiAoa2V5ID09PSBcIkVuZFwiIHx8IGtleSA9PT0gXCJQYWdlRG93blwiKSBuZXh0ID0gb3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIGlmIChrZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgb3B0aW9uc1twcmV2XS5jbGljaygpO1xuICAgICAgcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbiAgaWYgKG9wdGlvbnNbbmV4dF0pIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIG9wdGlvbi50YWJJbmRleCA9IC0xO1xuICBpZiAob3B0aW9uc1tuZXh0XSkgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAoX2EyID0gb3B0aW9uc1tuZXh0XSB8fCBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xuICBpZiAoIW9wdGlvbnNbbmV4dF0gJiYga2V5ID09PSBcIkFycm93VXBcIilcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHZhciBfYTM7XG4gICAgICByZXR1cm4gKF9hMyA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnNldFNlbGVjdGlvblJhbmdlKDk5OSwgOTk5KTtcbiAgICB9KTtcbn07XG52YXIgb25JbnB1dCA9IChzZWxmLCBlKSA9PiB7XG4gIGNvbnN0IHsgX3RleHRzLCBfcm9vdCwgX2lucHV0LCBvcHRpb25zIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9IChfaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IF9pbnB1dC52YWx1ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKSkgfHwgXCJcIjtcbiAgY29uc3QgZmlsdGVyID0gIXNlbGYuaGFzQXR0cmlidXRlKFwiZGF0YS1ub2ZpbHRlclwiKTtcbiAgY29uc3QgaGlkZGVuID0gW107XG4gIGNvbnN0IHZpc2libGUgPSBbXTtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGNvbnN0IGhpZGUgPSBvcHQuZGlzYWJsZWQgfHwgb3B0LmhpZGRlbiB8fCBmaWx0ZXIgJiYgIW9wdC5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHZhbHVlKTtcbiAgICAoaGlkZSA/IGhpZGRlbiA6IHZpc2libGUpLnB1c2gob3B0KTtcbiAgfVxuICBmb3IgKGNvbnN0IG9wdCBvZiBoaWRkZW4pIGF0dHIob3B0LCBcImFyaWEtaGlkZGVuXCIsIFwidHJ1ZVwiKTtcbiAgZm9yIChjb25zdCBvcHQgb2YgdmlzaWJsZSkgYXR0cihvcHQsIFwiYXJpYS1oaWRkZW5cIiwgXCJmYWxzZVwiKTtcbiAgY29uc3QgdG90YWwgPSB2aXNpYmxlLmxlbmd0aDtcbiAgY2xlYXJUaW1lb3V0KExJVkVfVElNRVIpO1xuICBpZiAoKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUudHlwZSkgPT09IFwiaW5wdXRcIiAmJiB2YWx1ZSAhPT0gc2VsZi5fdmFsdWUpXG4gICAgTElWRV9USU1FUiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IGAkeyF0b3RhbCAmJiBzZWxmLmlubmVyVGV4dC50cmltKCkgfHwgYCR7X3RleHRzW3RvdGFsID09PSAxID8gXCJzaW5ndWxhclwiIDogXCJwbHVyYWxcIl19YC5yZXBsYWNlKFwiJWRcIiwgYCR7dG90YWx9YCl9YDtcbiAgICAgIGlmICghc2VsZi5oaWRkZW4gJiYgKF9yb290ID09IG51bGwgPyB2b2lkIDAgOiBfcm9vdC5hY3RpdmVFbGVtZW50KSA9PT0gX2lucHV0KSBzcGVhayh0ZXh0KTtcbiAgICAgIHNlbGYuX3ZhbHVlID0gdmFsdWU7XG4gICAgfSwgMWUzKTtcbiAgaWYgKElTX0lPUylcbiAgICB2aXNpYmxlLm1hcCgob3B0LCBpZHgpID0+IGF0dHIob3B0LCBcInRpdGxlXCIsIGAke2lkeCArIDF9LyR7dG90YWx9YCkpO1xufTtcbmlmIChJU19CUk9XU0VSKVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwibGlzdFwiLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGdldFJvb3QodGhpcykuZ2V0RWxlbWVudEJ5SWQoYXR0cih0aGlzLCBcImxpc3RcIikgfHwgXCJcIik7XG4gICAgfVxuICB9KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtZGF0YWxpc3RcIiwgVUhUTUxEYXRhTGlzdEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERhdGFMaXN0RWxlbWVudCwgVUhUTUxEYXRhTGlzdFNoYWRvd1Jvb3QsIFVIVE1MRGF0YUxpc3RTdHlsZSB9O1xuIiwiaW1wb3J0IHsgZmxpcCwgdHlwZSBQbGFjZW1lbnQsIHNoaWZ0LCBzaXplIH0gZnJvbSBcIkBmbG9hdGluZy11aS9kb21cIjtcbmltcG9ydCB7IFVIVE1MQ29tYm9ib3hFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtY29tYm9ib3hcIjtcbmltcG9ydCB7IFVIVE1MRGF0YUxpc3RFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtZGF0YWxpc3RcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRhbmNob3JQb3NpdGlvbixcblx0YXR0cixcblx0aXNJbnB1dExpa2UsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0b25NdXRhdGlvbixcblx0UVVJQ0tfRVZFTlQsXG5cdHVzZUlkLFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0ZJRUxEID0gc3R5bGVzLmZpZWxkLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19WQUxJREFUSU9OUyA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKTtcbmNvbnN0IENTU19WQUxJREFUSU9OID0gQ1NTX1ZBTElEQVRJT05TWzBdO1xuXG5jb25zdCBnZXRUZXh0ID0gKHN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uLCBrZXk6IHN0cmluZykgPT5cblx0c3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShgLS1tdGRzLXRleHQtJHtrZXl9YCk/LnNsaWNlKDEsIC0xKSB8fCBcIlwiOyAvLyBzbGljZSB0byB0cmltIHF1b3Rlc1xuXG5mdW5jdGlvbiBoYW5kbGVGaWVsZE11dGF0aW9uKFxuXHRmaWVsZHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4sXG5cdHZhbGlkYXRlPzogYm9vbGVhbixcbikge1xuXHRmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcylcblx0XHRpZiAoZmllbGQuaXNDb25uZWN0ZWQpIHtcblx0XHRcdGNvbnN0IGxhYmVsczogSFRNTExhYmVsRWxlbWVudFtdID0gW107XG5cdFx0XHRjb25zdCBkZXNjczogRWxlbWVudFtdID0gW107XG5cdFx0XHRjb25zdCB2YWxpZHM6IEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0bGV0IGNvbWJvYm94OiBVSFRNTENvbWJvYm94RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXHRcdFx0bGV0IGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGVsIG9mIGZpZWxkLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSkge1xuXHRcdFx0XHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MTGFiZWxFbGVtZW50KSBsYWJlbHMucHVzaChlbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgVUhUTUxDb21ib2JveEVsZW1lbnQpIGNvbWJvYm94ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSAmJiAhZWwuaGlkZGVuKSBpbnB1dCA9IGVsO1xuXHRcdFx0XHRlbHNlIGlmIChlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLWRlc2NyaXB0aW9uXCIpKSBkZXNjcy5wdXNoKGVsKTtcblx0XHRcdFx0ZWxzZSBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdHZhbGlkID0gYXR0cihlbCwgXCJkYXRhLWNvbG9yXCIpID09PSBcInN1Y2Nlc3NcIiB8fCAhZWwuY2xpZW50SGVpZ2h0OyAvLyBPbmx5IHNldCBpbnZhbGlkIGlmIFZhbGlkYXRpb24gaXMgdmlzaWJsZVxuXHRcdFx0XHRcdHZhbGlkcy5wdXNoKGVsKTtcblx0XHRcdFx0XHRkZXNjcy51bnNoaWZ0KGVsKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxQYXJhZ3JhcGhFbGVtZW50KVxuXHRcdFx0XHRcdGRlc2NzLnNvbWUoKGRlc2MpID0+IGRlc2MuY29udGFpbnMoZWwpKSB8fCBkZXNjcy5wdXNoKGVsKTsgLy8gT25seSBhZGQgaWYgbm90IGFscmVhZHkgaW5zaWRlIGRlc2NyaXB0aW9uXG5cdFx0XHR9XG5cblx0XHRcdGlmIChpbnB1dCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGxhYmVsIG9mIGxhYmVscykgbGFiZWwuaHRtbEZvciA9IHVzZUlkKGlucHV0KTtcblx0XHRcdFx0aWYgKHZhbGlkYXRlICYmIGF0dHIoZmllbGQsIFwiZGF0YS12YWxpZGF0aW9uXCIpID09PSBcImZvcm1cIikge1xuXHRcdFx0XHRcdHZhbGlkID0gaW5wdXQubWF0Y2hlcyhcIjp2YWxpZFwiKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGVsIG9mIHZhbGlkcykgYXR0cihlbCwgXCJoaWRkZW5cIiwgdmFsaWQgPyBcIlwiIDogbnVsbCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVuZGVyQ29tYm9ib3goY29tYm9ib3gpO1xuXHRcdFx0XHRyZW5kZXJDb3VudGVyKGlucHV0KTtcblx0XHRcdFx0cmVuZGVyVGV4dGFyZWFTaXplKGlucHV0KTtcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIGRlc2NzLm1hcCh1c2VJZCkuam9pbihcIiBcIikgfHwgbnVsbCk7IC8vIFJlbW92ZSBpZiBlbXB0eVxuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtaW52YWxpZFwiLCBgJHshdmFsaWR9YCk7XG5cdFx0XHR9XG5cdFx0fVxufVxuXG4vLyBpT1MgZG9lcyBub3Qgc3VwcG9ydCBmaWVsZC1zaXppbmc6IGNvbnRlbnQsIHNvIHdlIG5lZWQgdG8gbWFudWFsbHkgcmVzaXplXG5mdW5jdGlvbiByZW5kZXJUZXh0YXJlYVNpemUodGV4dGFyZWE6IEVsZW1lbnQpIHtcblx0aWYgKHRleHRhcmVhIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuXHRcdHRleHRhcmVhLnN0eWxlLnNldFByb3BlcnR5KFwiLS1tdGRzLXRleHRhcmVhLWhlaWdodFwiLCBcImF1dG9cIik7XG5cdFx0dGV4dGFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG5cdFx0XHRcIi0tbXRkcy10ZXh0YXJlYS1oZWlnaHRcIixcblx0XHRcdGAke3RleHRhcmVhLnNjcm9sbEhlaWdodH1weGAsXG5cdFx0KTtcblx0fVxufVxuXG4vLyBTZXR1cCB0cmFuc2xhdGlvbnMgZnJvbSBDU1MgY3VzdG9tIHByb3BlcnRpZXNcbmZ1bmN0aW9uIHJlbmRlckNvbWJvYm94KGVsOiBVSFRNTENvbWJvYm94RWxlbWVudCB8IG51bGwpIHtcblx0Y29uc3QgeyBjb250cm9sLCBsaXN0IH0gPSBlbCB8fCB7fTtcblxuXHRpZiAoZWwgJiYgbGlzdCAmJiAhZWwuaGFzQXR0cmlidXRlKFwiZGF0YS1zci1hZGRlZFwiKSkge1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1hZGRlZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWFkZGVkXCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItZW1wdHlcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1lbXB0eVwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLWZvdW5kXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtZm91bmRcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1pbnZhbGlkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtaW52YWxpZFwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLW9mXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtb2ZcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1yZW1vdmVcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1yZW1vdmVcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1yZW1vdmVkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtcmVtb3ZlZFwiKSk7XG5cdFx0YXR0cihsaXN0LCBcImRhdGEtc3ItcGx1cmFsXCIsIGdldFRleHQoc3R5bGUsIFwiZGF0YWxpc3QtcGx1cmFsXCIpKTtcblx0XHRhdHRyKGxpc3QsIFwiZGF0YS1zci1zaW5ndWxhclwiLCBnZXRUZXh0KHN0eWxlLCBcImRhdGFsaXN0LXNpbmd1bGFyXCIpKTtcblx0fVxuXHRpZiAobGlzdCAmJiBjb250cm9sICYmICFsaXN0Lmhhc0F0dHJpYnV0ZShcInBvcG92ZXJcIikpIHtcblx0XHRhdHRyKGxpc3QsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcblx0XHRhdHRyKGNvbnRyb2wsIFwicG9wb3ZlcnRhcmdldFwiLCB1c2VJZChsaXN0KSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQ291bnRlcihpbnB1dDogSFRNTElucHV0RWxlbWVudCkge1xuXHRjb25zdCBlbCA9IGlucHV0Py5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdGNvbnN0IGxpbWl0ID0gZWwgJiYgYXR0cihlbCwgXCJkYXRhLWNvdW50XCIpO1xuXG5cdGlmIChlbCAmJiBsaW1pdCkge1xuXHRcdGNvbnN0IHJlbWFpbmRlciA9IE51bWJlcihsaW1pdCkgLSBpbnB1dC52YWx1ZS5sZW5ndGg7XG5cdFx0Y29uc3QgbmV4dEludmFsaWQgPSByZW1haW5kZXIgPCAwO1xuXHRcdGNvbnN0IHByZXZJbnZhbGlkID0gYXR0cihlbCwgXCJhcmlhLWxpdmVcIikgPT09IFwicG9saXRlXCI7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCB8fCBpbnB1dCk7XG5cdFx0Y29uc3Qgb3ZlciA9IGdldFRleHQoc3R5bGUsIFwiY291bnQtb3ZlclwiKTtcblx0XHRjb25zdCB1bmRlciA9IGdldFRleHQoc3R5bGUsIFwiY291bnQtdW5kZXJcIik7XG5cblx0XHRpZiAocHJldkludmFsaWQgIT09IG5leHRJbnZhbGlkKSB7XG5cdFx0XHRhdHRyKGVsLCBcImFyaWEtbGl2ZVwiLCBuZXh0SW52YWxpZCA/IFwicG9saXRlXCIgOiBcIm9mZlwiKTtcblx0XHRcdGZvciAoY29uc3QgY3NzIG9mIENTU19WQUxJREFUSU9OUykgZWwuY2xhc3NMaXN0LnRvZ2dsZShjc3MsIG5leHRJbnZhbGlkKTtcblx0XHR9XG5cdFx0ZWwudGV4dENvbnRlbnQgPSAobmV4dEludmFsaWQgPyBvdmVyIDogdW5kZXIpLnJlcGxhY2UoXG5cdFx0XHRcIiVkXCIsXG5cdFx0XHRgJHtNYXRoLmFicyhyZW1haW5kZXIpfWAsXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGVGaWVsZFRvZ2dsZShldmVudDogRXZlbnQgJiB7IG5ld1N0YXRlPzogc3RyaW5nIH0pIHtcblx0aWYgKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIFVIVE1MRGF0YUxpc3RFbGVtZW50KSB7XG5cdFx0Y29uc3QgbGlzdCA9IGV2ZW50LnRhcmdldDtcblx0XHRjb25zdCByb290ID0gbGlzdC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QgfCBudWxsO1xuXHRcdGNvbnN0IGFuY2hvciA9IHJvb3Q/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuXHRcdFx0YFtwb3BvdmVydGFyZ2V0PVwiJHtsaXN0LmlkfVwiXWAsXG5cdFx0KTtcblxuXHRcdGlmIChldmVudC5uZXdTdGF0ZSA9PT0gXCJjbG9zZWRcIikgYW5jaG9yUG9zaXRpb24obGlzdCwgZmFsc2UpO1xuXHRcdGVsc2UgaWYgKGFuY2hvcilcblx0XHRcdGFuY2hvclBvc2l0aW9uKGxpc3QsIGFuY2hvciwge1xuXHRcdFx0XHRwbGFjZW1lbnQ6IChhdHRyKGxpc3QsIFwiZGF0YS1wb3NpdGlvblwiKSA/PyBcImJvdHRvbVwiKSBhcyBQbGFjZW1lbnQsXG5cdFx0XHRcdG1pZGRsZXdhcmU6IFtcblx0XHRcdFx0XHRmbGlwKCksXG5cdFx0XHRcdFx0c2hpZnQoKSxcblx0XHRcdFx0XHRzaXplKHtcblx0XHRcdFx0XHRcdHBhZGRpbmc6IDEwLFxuXHRcdFx0XHRcdFx0YXBwbHkoeyBhdmFpbGFibGVIZWlnaHQgfSkge1xuXHRcdFx0XHRcdFx0XHRsaXN0LnN0eWxlLndpZHRoID0gYCR7YW5jaG9yLm9mZnNldFdpZHRofXB4YDtcblx0XHRcdFx0XHRcdFx0bGlzdC5zdHlsZS5tYXhIZWlnaHQgPSBgJHtNYXRoLm1heCg1MCwgYXZhaWxhYmxlSGVpZ2h0KX1weGA7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRdLFxuXHRcdFx0fSk7XG5cdH1cbn1cbi8vIFVwZGF0ZSB3aGVuIHR5cGluZ1xuZnVuY3Rpb24gaGFuZGxlRmllbGRJbnB1dChldmVudDogRXZlbnQpIHtcblx0aWYgKGlzSW5wdXRMaWtlKGV2ZW50LnRhcmdldCkpIHtcblx0XHRyZW5kZXJDb3VudGVyKGV2ZW50LnRhcmdldCk7XG5cdFx0cmVuZGVyVGV4dGFyZWFTaXplKGV2ZW50LnRhcmdldCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRmllbGRWYWxkaWF0aW9uKGV2ZW50OiBFdmVudCkge1xuXHRjb25zdCBmaWVsZCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihgLiR7Q1NTX0ZJRUxEfWApO1xuXHRpZiAoZXZlbnQudHlwZSA9PT0gXCJpbnZhbGlkXCIgJiYgZmllbGQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBzaG93aW5nIGRlZmF1bHQgdmFsaWRhdGlvbiBidWJibGVzXG5cdGhhbmRsZUZpZWxkTXV0YXRpb24oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShDU1NfRklFTEQpLCB0cnVlKTsgLy8gVXBkYXRlIHN0YXRlXG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRCwgaGFuZGxlRmllbGRNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImlucHV0XCIsIGhhbmRsZUZpZWxkSW5wdXQsIFFVSUNLX0VWRU5UKTtcblx0b24oZG9jdW1lbnQsIFwiaW52YWxpZCxzdWJtaXRcIiwgaGFuZGxlRmllbGRWYWxkaWF0aW9uLCB0cnVlKTsgLy8gVXNlIGNhcHR1cmUgYXMgaW52YWxpZCBhbmQgc3VibWl0IGRvZXMgbm90IGJ1YmJsZVxuXHRvbihkb2N1bWVudCwgXCJ0b2dnbGVcIiwgaGFuZGxlRmllbGRUb2dnbGUsIFFVSUNLX0VWRU5UKTsgLy8gVXNlIGNhcHR1cmUgc2luY2UgdG9nZ2xlIGRvZXMgbm90IGJ1YmJsZVxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgaXNJbnB1dExpa2UsIG9uTG9hZGVkLCBvbk11dGF0aW9uLCB1c2VJZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRklFTERTRVQgPSBzdHlsZXMuZmllbGRzZXQuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1ZBTElEQVRJT04gPSBzdHlsZXMudmFsaWRhdGlvbi5zcGxpdChcIiBcIilbMF07XG5jb25zdCBBUklBX0RFU0MgPSBcImFyaWEtZGVzY3JpYmVkYnlcIjtcbmNvbnN0IEFSSUFfSU5WQUxJRCA9IFwiYXJpYS1pbnZhbGlkXCI7XG5cbi8vIFVzaW5nIHJlcXVlc3RBbmltYXRpb25GcmFtZSB0byBlbnN1cmUgaXQgcnVucyBhZnRlciBmaWVsZC1vYnNlcnZlclxuZnVuY3Rpb24gaGFuZGxlRmllbGRzZXRNdXRhdGlvbihmaWVsZHNldHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4pIHtcblx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRmb3IgKGNvbnN0IGZpZWxkc2V0IG9mIGZpZWxkc2V0cylcblx0XHRcdGlmIChmaWVsZHNldC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0XHRjb25zdCBpbnB1dHM6IEhUTUxJbnB1dEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0XHRsZXQgdmFsaWRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdFx0XHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBlbCBvZiBmaWVsZHNldC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikpIHtcblx0XHRcdFx0XHRpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdFx0dmFsaWQgPSBhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8ICFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0XHR2YWxpZElkID0gdXNlSWQoZWwpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoaXNJbnB1dExpa2UoZWwpKSBpbnB1dHMucHVzaChlbCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykge1xuXHRcdFx0XHRcdGNvbnN0IGRlc2MgPSBhdHRyKGlucHV0LCBBUklBX0RFU0MpPy5yZXBsYWNlKHZhbGlkSWQgfHwgXCIjXCIsIFwiXCIpO1xuXG5cdFx0XHRcdFx0YXR0cihpbnB1dCwgQVJJQV9ERVNDLCBgJHt2YWxpZElkIHx8IFwiXCJ9ICR7ZGVzYyB8fCBcIlwifWAudHJpbSgpKTtcblx0XHRcdFx0XHRhdHRyKGlucHV0LCBBUklBX0lOVkFMSUQsIGAkeyF2YWxpZH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRFNFVCwgaGFuZGxlRmllbGRzZXRNdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19MT0dPID0gc3R5bGVzLmxvZ28uc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVMb2dvTXV0YXRpb24oW2xvZ29dOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRpZiAobG9nbz8uaXNDb25uZWN0ZWQgJiYgbG9nbz8uZmlyc3RFbGVtZW50Q2hpbGQgaW5zdGFuY2VvZiBTVkdTVkdFbGVtZW50KSB7XG5cdFx0Zm9yIChjb25zdCBpY29uIG9mIGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvckFsbChcImxpbmtbcmVsfj0naWNvbiddXCIpKVxuXHRcdFx0aWNvbi5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgXCJkaXNhYmxlZFwiKTsgLy8gRGlzYWJsZSBwcmV2aW91cyBpY29uIChidXQgbm90IHJlbW92ZSBpcyBhcyB0aGlzIG1ha2VzIE5leHQuanMgc2FkKVxuXG5cdFx0Y29uc3Qgc3ZnID0gbG9nby5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRjb25zdCBpc0RvdCA9IGxvZ28/Lmhhc0F0dHJpYnV0ZShcImRhdGEtZW52XCIpO1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoc3ZnKTtcblx0XHRjb25zdCB0ZXh0ID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcImNvbG9yXCIpO1xuXHRcdGNvbnN0IGJhY2sgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1tdGRzLWxvZ28tY29sb3JcIik7XG5cdFx0Y29uc3QgaWNvbiA9IHN2Zy5vdXRlckhUTUxcblx0XHRcdC5yZXBsYWNlKC9cXG4rL2csIFwiIFwiKSAvLyBQcmV2ZW50IGxpbmUgYnJlYWtzXG5cdFx0XHQucmVwbGFjZSgvKGZpbGx8d2lkdGh8aGVpZ2h0fHhtbG5zKT1cIlteXCJdK1wiL2dpLCBcIlwiKVxuXHRcdFx0LnJlcGxhY2UoXCI8c3ZnXCIsIGA8c3ZnIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIGZpbGw9XCIke3RleHR9XCJgKTtcblxuXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoXG5cdFx0XHRPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpLCB7XG5cdFx0XHRcdGhyZWY6IGBkYXRhOmltYWdlL3N2Zyt4bWwsJHtlbmNvZGVVUklDb21wb25lbnQoYDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNTUgNTUnPjxyZWN0IGZpbGw9JyR7aXNEb3QgPyBcIm5vbmVcIiA6IGJhY2t9JyB3aWR0aD0nNTEnIGhlaWdodD0nNTEnIHg9JzInIHk9JzInIHN0cm9rZT0nJHt0ZXh0fScgc3Ryb2tlLWRhc2hhcnJheT0nMC4wOSA2LjM4JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1vcGFjaXR5PScke2lzRG90ID8gMC42IDogMH0nIHN0cm9rZS13aWR0aD0nMi4zJyByeD0nMjUuNScvPjxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg3LjUgNy41KVwiPiR7aWNvbn08L2c+PC9zdmc+YCl9YCxcblx0XHRcdFx0cmVsOiBcImljb25cIixcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19MT0dPLCBoYW5kbGVMb2dvTXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCB7IGZsaXAsIHR5cGUgUGxhY2VtZW50LCBzaGlmdCwgc2l6ZSB9IGZyb20gXCJAZmxvYXRpbmctdWkvZG9tXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYW5jaG9yUG9zaXRpb24sIGF0dHIsIG9uLCBvbkxvYWRlZCwgUVVJQ0tfRVZFTlQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1BPUE9WRVIgPSBzdHlsZXMucG9wb3Zlci5zcGxpdChcIiBcIilbMF07XG5sZXQgT1BFTl9QT1BPVkVSUyA9IDA7IC8vIFNwZWVkIHVwIGJ5IG9ubHkgY2hlY2tpbmcgY2xpY2tzIGlmIHdlIGhhdmUgb3BlbiBwb3BvdmVyc1xuXG5mdW5jdGlvbiBoYW5kbGVQb3BvdmVyVG9nZ2xlKHtcblx0dGFyZ2V0OiBlbCxcblx0bmV3U3RhdGUsXG59OiBFdmVudCAmIHsgbmV3U3RhdGU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1BPUE9WRVIpKSB7XG5cdFx0Y29uc3QgaXNDbG9zaW5nID0gbmV3U3RhdGUgPT09IFwiY2xvc2VkXCI7XG5cdFx0Y29uc3QgaXNDb250YWluID0gYXR0cihlbCwgXCJkYXRhLW92ZXJzY3JvbGxcIikgPT09IFwiY29udGFpblwiO1xuXHRcdGNvbnN0IGFuY2hvciA9IChlbC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QpPy5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pihcblx0XHRcdGBbcG9wb3ZlcnRhcmdldD1cIiR7ZWwuaWR9XCJdYCxcblx0XHQpO1xuXG5cdFx0T1BFTl9QT1BPVkVSUyArPSBpc0Nsb3NpbmcgPyAtMSA6IDE7XG5cdFx0aWYgKGlzQ2xvc2luZykgYW5jaG9yUG9zaXRpb24oZWwsIGZhbHNlKTtcblx0XHRlbHNlIGlmIChhbmNob3IpXG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgYW5jaG9yLCB7XG5cdFx0XHRcdHBsYWNlbWVudDogKGF0dHIoZWwsIFwiZGF0YS1wb3NpdGlvblwiKSB8fCBcImJvdHRvbVwiKSBhcyBQbGFjZW1lbnQsXG5cdFx0XHRcdG1pZGRsZXdhcmU6IFtmbGlwKCksIHNoaWZ0KHsgcGFkZGluZzogMTAgfSldLmNvbmNhdChcblx0XHRcdFx0XHRpc0NvbnRhaW5cblx0XHRcdFx0XHRcdD8gc2l6ZSh7XG5cdFx0XHRcdFx0XHRcdFx0cGFkZGluZzogMTAsXG5cdFx0XHRcdFx0XHRcdFx0YXBwbHkoeyBhdmFpbGFibGVIZWlnaHQgfSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZWwuc3R5bGUubWF4SGVpZ2h0ID0gYCR7TWF0aC5tYXgoNTAsIGF2YWlsYWJsZUhlaWdodCl9cHhgO1xuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQ6IFtdLFxuXHRcdFx0XHQpLFxuXHRcdFx0fSk7XG5cdH1cbn1cblxuLy8gUG9seWZpbGwgcG9wb3ZlcnRhcmdldCBmb3IgPGE+IChub3Qgc3VwcG9ydGVkIGJ5IG5hdGl2ZSlcbi8vIGFuZCBhdXRvbWF0aWNhbGx5IGFzc3VtZSBwb3BvdmVydGFyZ2V0IGlzIHRoZSBjbG9zZXN0IHBhcmVudCBwb3BvdmVyXG4vLyBidXQgcmVzcGVjdCB0aGUgcG9wb3ZlcnRhcmdldCBhbmQgcG9wb3ZlcnRhcmdldGFjdGlvbiBhdHRyaWJ1dGVcbmZ1bmN0aW9uIGhhbmRsZVBvcG92ZXJMaW5rQ2xpY2soeyB0YXJnZXQgfTogRXZlbnQpIHtcblx0Y29uc3QgY2xvc2UgPVxuXHRcdE9QRU5fUE9QT1ZFUlMgJiYgKHRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKFwiYSxbcG9wb3ZlcnRhcmdldGFjdGlvbl1cIik7XG5cblx0aWYgKGNsb3NlKSB7XG5cdFx0Y29uc3QgYWN0aW9uID0gYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0YWN0aW9uXCIpIHx8IFwidG9nZ2xlXCI7XG5cdFx0Y29uc3Qgb3BlbiA9IGFjdGlvbiA9PT0gXCJzaG93XCIgfHwgKGFjdGlvbiA9PT0gXCJoaWRlXCIgPyBmYWxzZSA6IHVuZGVmaW5lZCk7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0XCIpIHx8IFwiXCIpO1xuXHRcdGNvbnN0IHBvcG92ZXIgPSAodGFyZ2V0IHx8IGNsb3NlKS5jbG9zZXN0PEhUTUxFbGVtZW50PihgLiR7Q1NTX1BPUE9WRVJ9YCk7XG5cblx0XHQvLyBQb3BvdmVyIGNhbiBiZSBkaXNjb25uZXRlZCBieSBjbGljayBoYW5kbGVyIGRlZXBlciBkb3duIGluIHRoZSBET00gdGhyZWUgYmVmb3JlIHJlYWNoaW5nIGRvY3VtZW50XG5cdFx0aWYgKHBvcG92ZXI/LmlzQ29ubmVjdGVkICYmIHBvcG92ZXI/LnRvZ2dsZVBvcG92ZXIpXG5cdFx0XHRwb3BvdmVyLnRvZ2dsZVBvcG92ZXIob3Blbik7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJ0b2dnbGVcIiwgaGFuZGxlUG9wb3ZlclRvZ2dsZSwgUVVJQ0tfRVZFTlQpOyAvLyBVc2UgY2FwdHVyZSBzaW5jZSB0b2dnbGUgZG9lcyBub3QgYnViYmxlXG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZVBvcG92ZXJMaW5rQ2xpY2spOyAvLyBBbGxvdyBgPGE+YCB0byB1c2UgYHBvcG92ZXJ0YXJnZXRgIGFzIHdlbGxcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19UQUJMRSA9IHN0eWxlcy50YWJsZS5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZVRhYmxlTXV0YXRpb24odGFibGVzOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxUYWJsZUVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgdGFibGUgb2YgdGFibGVzKSB7XG5cdFx0Y29uc3QgdGhzID0gQXJyYXkuZnJvbSh0YWJsZS50SGVhZD8ucm93c1swXT8uY2VsbHMgfHwgW10sICh0aCkgPT5cblx0XHRcdHRoLmlubmVyVGV4dC50cmltKCksXG5cdFx0KTtcblxuXHRcdGZvciAoY29uc3QgdGJvZHkgb2YgdGFibGUudEJvZGllcylcblx0XHRcdGZvciAoY29uc3Qgcm93IG9mIHRib2R5LnJvd3MpXG5cdFx0XHRcdGZvciAoY29uc3QgY2VsbCBvZiByb3cuY2VsbHMpXG5cdFx0XHRcdFx0YXR0cihjZWxsLCBcImRhdGEtdGhcIiwgdGhzW2NlbGwuY2VsbEluZGV4XSB8fCBcIjplbXB0eVwiKTtcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PlxuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX1RBQkxFLCBoYW5kbGVUYWJsZU11dGF0aW9uKSxcbik7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgb24sIG9uTG9hZGVkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19UT0dHTEVHUk9VUCA9IGAuJHtzdHlsZXMudG9nZ2xlZ3JvdXAuc3BsaXQoXCIgXCIpWzBdfWA7XG5cbi8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBzaG93aW5nIGRlZmF1bHQgdmFsaWRhdGlvbiBidWJibGVzXG5mdW5jdGlvbiBoYW5kbGVUb2dnbGVncm91cEtleWRvd24oZXZlbnQ6IEV2ZW50ICYgUGFydGlhbDxLZXlib2FyZEV2ZW50Pikge1xuXHRjb25zdCB7IGtleSwgdGFyZ2V0OiBlbCB9ID0gZXZlbnQ7XG5cdGNvbnN0IGdyb3VwID0gZWwgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIGVsLmNsb3Nlc3QoQ1NTX1RPR0dMRUdST1VQKTtcblxuXHRpZiAoIWdyb3VwKSByZXR1cm47XG5cdGlmIChrZXkgPT09IFwiRW50ZXJcIikgZWwuY2xpY2soKTtcblx0aWYgKGtleT8uc3RhcnRzV2l0aChcIkFycm93XCIpKSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRjb25zdCBpbnB1dHMgPSBncm91cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpO1xuXHRcdGNvbnN0IGluZGV4ID0gWy4uLmlucHV0c10uaW5kZXhPZihlbCk7XG5cdFx0Y29uc3QgbW92ZSA9IGtleS5tYXRjaCgvQXJyb3coUmlnaHR8RG93bikvKSA/IDEgOiAtMTtcblx0XHRpbnB1dHNbKGlucHV0cy5sZW5ndGggKyBpbmRleCArIG1vdmUpICUgaW5wdXRzLmxlbmd0aF0/LmZvY3VzKCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb24oZG9jdW1lbnQsIFwia2V5ZG93blwiLCBoYW5kbGVUb2dnbGVncm91cEtleWRvd24pKTtcbiIsImltcG9ydCB7IGZsaXAsIHR5cGUgUGxhY2VtZW50LCBzaGlmdCB9IGZyb20gXCJAZmxvYXRpbmctdWkvZG9tXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0YW5jaG9yUG9zaXRpb24sXG5cdGF0dHIsXG5cdElTX0JST1dTRVIsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0UVVJQ0tfRVZFTlQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBERVNDUklCRURCWSA9IFwiYXJpYS1kZXNjcmliZWRieVwiO1xuY29uc3QgRVNDID0gXCJFc2NhcGVcIjtcbmNvbnN0IExBQkVMTEVEQlkgPSBcImFyaWEtbGFiZWxsZWRieVwiO1xuY29uc3QgUE9TSVRJT05fQ1NTX1BST1BFUlRZID0gXCItLW10ZHMtdG9vbHRpcC1wb3NpdGlvblwiO1xuY29uc3QgVEhST1RUTEVfREVMQVkgPSAzMDA7XG5jb25zdCBUT09MVElQID0gSVNfQlJPV1NFUlxuXHQ/IE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwge1xuXHRcdFx0Y2xhc3NOYW1lOiBzdHlsZXMuX3Rvb2x0aXAsXG5cdFx0XHRpZDogXCJtdGRzLXRvb2x0aXBcIixcblx0XHRcdHBvcG92ZXI6IFwibWFudWFsXCIsXG5cdFx0fSlcblx0OiBudWxsOyAvLyBDcmVhdGUgYSBkdW1teSBlbGVtZW50IHRvIGF2b2lkIG51bGwgY2hlY2tzXG5cbmxldCBBTkNIT1I6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbmxldCBMQVNUX0NBTEwgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5sZXQgVEhST1RUTEU6IG51bWJlciB8IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+ID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlVG9vbHRpcE1vdmUoeyB0YXJnZXQsIHR5cGUsIGtleSB9OiBFdmVudCAmIHsga2V5Pzogc3RyaW5nIH0pIHtcblx0aWYgKHR5cGUgPT09IFwia2V5ZG93blwiICYmIGtleSAhPT0gRVNDKSByZXR1cm47IC8vIEFsbG93IEVTQyBkaXNtaXNzIHRvIGZvbGxvdyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL3Rvb2x0aXAvXG5cdGNvbnN0IHdhaXQgPSBMQVNUX0NBTEwgKyBUSFJPVFRMRV9ERUxBWSAtIERhdGUubm93KCk7XG5cdGNsZWFyVGltZW91dChUSFJPVFRMRSk7XG5cdFRIUk9UVExFID0gc2V0VGltZW91dChcblx0XHRoYW5kbGVUb29sdGlwTW92ZVRocm90dGxlZCxcblx0XHRNYXRoLm1heCh3YWl0LCAwKSxcblx0XHRrZXkgPT09IEVTQyA/IG51bGwgOiB0YXJnZXQsXG5cdCk7XG59XG5cbi8vIFVzaW5nIGEgdGhyb3R0bGVkIGZ1bmN0aW9uIHRvIGF2b2lkIHBlcmZvcm1hbmNlIGlzc3Vlc1xuZnVuY3Rpb24gaGFuZGxlVG9vbHRpcE1vdmVUaHJvdHRsZWQodGFyZ2V0OiBFbGVtZW50IHwgbnVsbCkge1xuXHRMQVNUX0NBTEwgPSBEYXRlLm5vdygpO1xuXG5cdC8vIEJ1aWxkIGFuZCBhcHBlbmQgdG9vbHRpcCBpZiBub3QgZXhpc3Rpbmdcblx0aWYgKCFUT09MVElQIHx8IHRhcmdldCA9PT0gVE9PTFRJUCkgcmV0dXJuOyAvLyBBbGxvdyB0b29sdGlwIHRvIGJlIGhvdmVyZWQsIGZvbGxvd2luZyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIxLyNjb250ZW50LW9uLWhvdmVyLW9yLWZvY3VzXG5cdGlmICghVE9PTFRJUD8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFRPT0xUSVApOyAvLyBFbnN1cmUgY29ubmVjdGVkXG5cdGxldCBhbmNob3IgPSB0YXJnZXQ/LmNsb3Nlc3Q/LjxFbGVtZW50PihcIltkYXRhLXRvb2x0aXBdXCIpIHx8IG51bGw7XG5cblx0Ly8gTm8gbmVlZCB0byB1cGRhdGVcblx0aWYgKGFuY2hvciA9PT0gQU5DSE9SKSByZXR1cm47XG5cblx0Y29uc3QgY29udGVudCA9IChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwXCIpKSB8fCBcIlwiO1xuXHRjb25zdCBwb3NpdGlvbiA9XG5cdFx0KGFuY2hvciAmJiBhdHRyKGFuY2hvciwgXCJkYXRhLXRvb2x0aXAtcG9zaXRpb25cIikpIHx8XG5cdFx0d2luZG93XG5cdFx0XHQuZ2V0Q29tcHV0ZWRTdHlsZShhbmNob3IgfHwgZG9jdW1lbnQuYm9keSlcblx0XHRcdC5nZXRQcm9wZXJ0eVZhbHVlKFBPU0lUSU9OX0NTU19QUk9QRVJUWSlcblx0XHRcdD8udHJpbSgpIHx8XG5cdFx0XCJ0b3BcIjtcblxuXHRjb25zdCBpc0hpZGRlbiA9XG5cdFx0IWNvbnRlbnQgfHxcblx0XHRjb250ZW50ID09PSBcImZhbHNlXCIgfHxcblx0XHRjb250ZW50ID09PSBcInRydWVcIiB8fFxuXHRcdHBvc2l0aW9uID09PSBcIm5vbmVcIjtcblxuXHRpZiAoaXNIaWRkZW4pIGFuY2hvciA9IG51bGw7IC8vIERvIG5vdCBzaG93IHRvb2x0aXAgaWYgYm9vbGlzaCB2YWx1ZVxuXHRpZiAoYW5jaG9yKSBUT09MVElQLnRleHRDb250ZW50ID0gY29udGVudDsgLy8gT25seSB1cGRhdGUgY29udGVudCBpZiBuZXcgYW5jaG9yXG5cblx0Y29uc3QgaGFkTGFiZWwgPSBBTkNIT1IgJiYgYXR0cihBTkNIT1IsIExBQkVMTEVEQlkpID09PSBUT09MVElQPy5pZDtcblx0Y29uc3QgaGFzTGFiZWwgPVxuXHRcdChhbmNob3IgaW5zdGFuY2VvZiBIVE1MRWxlbWVudFxuXHRcdFx0PyBhbmNob3IuaW5uZXJUZXh0XG5cdFx0XHQ6IGFuY2hvcj8udGV4dENvbnRlbnRcblx0XHQpPy50cmltKCkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShMQUJFTExFREJZKSB8fFxuXHRcdGFuY2hvcj8uaGFzQXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKTtcblxuXHRBTkNIT1I/LnJlbW92ZUF0dHJpYnV0ZShoYWRMYWJlbCA/IExBQkVMTEVEQlkgOiBERVNDUklCRURCWSk7IC8vIFVubGluayBwcmV2aW91cyBhbmNob3Jcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgZmFsc2UpOyAvLyBSZXNldCBhbmNob3IgcG9zaXRpb25cblxuXHRBTkNIT1IgPSBhbmNob3I7IC8vIFN0b3JlIG5ldyBhbmNob3IgLSBtaWdodCBiZSBudWxsIGlmIG5vIG5ldyBhbmNob3Jcblx0aWYgKEFOQ0hPUikgYXR0cihBTkNIT1IsIGhhc0xhYmVsID8gREVTQ1JJQkVEQlkgOiBMQUJFTExFREJZLCBUT09MVElQPy5pZCk7IC8vIFVzZSB0b29sdGlwIGFzIGRlc2NyaXB0aW9uIGlmIGFsbHJlYWR5IGhhcyBsYWJlbFxuXHRpZiAoQU5DSE9SPy5pc0Nvbm5lY3RlZCkgVE9PTFRJUC5oaWRlUG9wb3ZlcigpOyAvLyBIaWRlIHRvb2x0aXAgc28gaXQgY2FuIGJlIHBsYWNlZCBvbiB0b3AtbGF5ZXIgb24gbmV4dCBzaG93XG5cdFRPT0xUSVAudG9nZ2xlUG9wb3ZlcighIWFuY2hvcik7XG5cdGFuY2hvclBvc2l0aW9uKFRPT0xUSVAsIGFuY2hvciB8fCBmYWxzZSwge1xuXHRcdHBsYWNlbWVudDogcG9zaXRpb24gYXMgUGxhY2VtZW50LFxuXHRcdG1pZGRsZXdhcmU6IFtmbGlwKCksIHNoaWZ0KHsgcGFkZGluZzogMTAgfSldLFxuXHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJibHVyLGZvY3VzLG1vdXNlb3V0LG1vdXNlb3ZlclwiLCBoYW5kbGVUb29sdGlwTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwia2V5ZG93blwiLCBoYW5kbGVUb29sdGlwTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwiYmx1clwiLCBoYW5kbGVUb29sdGlwTW92ZSwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBTQUZFX0xBQkVMTEVEQlkgPSBgJHtJU19BTkRST0lEID8gXCJkYXRhXCIgOiBcImFyaWFcIn0tbGFiZWxsZWRieWA7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIGFzQnV0dG9uID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGlzQ2xpY2sgPSBcImtleVwiIGluIGV2ZW50ICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKTtcbiAgaWYgKGlzQ2xpY2spIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGlmIChpc0NsaWNrICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBldmVudC50YXJnZXQuY2xpY2soKTtcbiAgcmV0dXJuIGlzQ2xpY2s7XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZGVjbGFyYXRpdmVTaGFkb3dSb290ID0gKHN0eWxlLCBzbG90ID0gXCI8c2xvdD48L3Nsb3Q+XCIpID0+IGA8dGVtcGxhdGUgc2hhZG93cm9vdG1vZGU9XCJvcGVuXCI+JHtzbG90fTxzdHlsZT4ke3N0eWxlfTwvc3R5bGU+PC90ZW1wbGF0ZT5gO1xuXG4vLyB1LWRldGFpbHMudHNcbnZhciBVSFRNTERldGFpbHNTdHlsZSA9IGAke0RJU1BMQVlfQkxPQ0t9XG46OnNsb3R0ZWQodS1zdW1tYXJ5KSB7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogYmxvY2sgfVxuOjpzbG90dGVkKHUtc3VtbWFyeSk6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1hcmdpbi1pbmxpbmU6IC4wNWVtIC4zMTI1ZW07IGJvcmRlci1ibG9jazogLjMxMjVlbSBzb2xpZCB0cmFuc3BhcmVudDsgYm9yZGVyLWlubGluZS1zdGFydDogLjVlbSBzb2xpZCB9XG46OnNsb3R0ZWQodS1zdW1tYXJ5W2FyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJdKTo6YmVmb3JlIHsgcm90YXRlOiA5MGRlZyB9XG46aG9zdCA+IFtwYXJ0PVwiZGV0YWlscy1jb250ZW50XCJdOm5vdChbaGlkZGVuPVwiXCJdKSB7IGRpc3BsYXk6IGJsb2NrIH1gO1xudmFyIFVIVE1MRGV0YWlsc1NoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoXG4gIFVIVE1MRGV0YWlsc1N0eWxlLFxuICAnPHNsb3QgbmFtZT1cInN1bW1hcnlcIj48L3Nsb3Q+PHNsb3QgcGFydD1cImRldGFpbHMtY29udGVudFwiIGhpZGRlbj1cInVudGlsLWZvdW5kXCI+PC9zbG90Pidcbik7XG52YXIgVUhUTUxEZXRhaWxzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvLyBVc2luZyB1bmRlcnNjb3JlIGluc3RlYWQgb2YgcHJpdmF0ZSBmaWVsZHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5fY29udGVudCA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnNoYWRvd1Jvb3QpXG4gICAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBuYW1lOiBcInN1bW1hcnlcIiB9KSxcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBwYXJ0OiBcImRldGFpbHMtY29udGVudFwiIH0pLFxuICAgICAgICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgVUhUTUxEZXRhaWxzU3R5bGUpXG4gICAgICApO1xuICB9XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJvcGVuXCJdO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHZhciBfYTI7XG4gICAgdGhpcy5fY29udGVudCA9IChfYTIgPSB0aGlzLnNoYWRvd1Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2hpbGRyZW5bMV07XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJncm91cFwiKTtcbiAgICBvbih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLl9jb250ZW50KSBvZmYodGhpcy5fY29udGVudCwgXCJiZWZvcmVtYXRjaFwiLCB0aGlzKTtcbiAgICBvZmYodGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuX2NvbnRlbnQgPSBudWxsO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBwcmV2LCBuZXh0KSB7XG4gICAgY29uc3QgaGlkZSA9IFwib25iZWZvcmVtYXRjaFwiIGluIHRoaXMgPyBcInVudGlsLWZvdW5kXCIgOiB0cnVlO1xuICAgIGNvbnN0IG9wZW4gPSB0aGlzLm9wZW47XG4gICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLmNoaWxkcmVuKVxuICAgICAgaWYgKGVsLm5vZGVOYW1lID09PSBcIlUtU1VNTUFSWVwiKSB7XG4gICAgICAgIGF0dHIodGhpcywgU0FGRV9MQUJFTExFREJZLCB1c2VJZChlbCkpO1xuICAgICAgICBhdHRyKGVsLCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7b3Blbn1gKTtcbiAgICAgIH1cbiAgICBpZiAodGhpcy5fY29udGVudCkge1xuICAgICAgYXR0cih0aGlzLl9jb250ZW50LCBcImFyaWEtaGlkZGVuXCIsIGAkeyFvcGVufWApO1xuICAgICAgdGhpcy5fY29udGVudC5oaWRkZW4gPSBvcGVuID8gZmFsc2UgOiBoaWRlO1xuICAgIH1cbiAgICBpZiAob3BlbiAmJiB0aGlzLm5hbWUpIHtcbiAgICAgIGNvbnN0IHVEZXRhaWxzTGlzdCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYCR7dGhpcy5ub2RlTmFtZX1bbmFtZT1cIiR7dGhpcy5uYW1lfVwiXWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IHVEZXRhaWxzIG9mIHVEZXRhaWxzTGlzdClcbiAgICAgICAgaWYgKHVEZXRhaWxzICE9PSB0aGlzKSB1RGV0YWlscy5vcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChwcm9wID09PSBcIm9wZW5cIiAmJiBwcmV2ID09PSBudWxsICE9PSAobmV4dCA9PT0gbnVsbCkpXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwidG9nZ2xlXCIpKTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCI6c2NvcGUgPiB1LXN1bW1hcnlcIik7XG4gICAgY29uc3QgaXNTdW1tYXJ5ID0gc3VtbWFyeSA9PSBudWxsID8gdm9pZCAwIDogc3VtbWFyeS5jb250YWlucyhldmVudC50YXJnZXQpO1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmVmb3JlbWF0Y2hcIikgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICBpZiAoaXNTdW1tYXJ5ICYmIGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiKSBhc0J1dHRvbihldmVudCk7XG4gICAgaWYgKGlzU3VtbWFyeSAmJiBldmVudC50eXBlID09PSBcImNsaWNrXCIpIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XG4gIH1cbiAgZ2V0IG9wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwib3BlblwiKTtcbiAgfVxuICBzZXQgb3Blbih2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJvcGVuXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIFwibmFtZVwiKSB8fCBcIlwiO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcIm5hbWVcIiwgdmFsdWUpO1xuICB9XG59O1xudmFyIFVIVE1MU3VtbWFyeUVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIHRoaXMuc2xvdCA9IFwic3VtbWFyeVwiO1xuICAgIHRoaXMudGFiSW5kZXggPSAwO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1kZXRhaWxzXCIsIFVIVE1MRGV0YWlsc0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1zdW1tYXJ5XCIsIFVIVE1MU3VtbWFyeUVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERldGFpbHNFbGVtZW50LCBVSFRNTERldGFpbHNTaGFkb3dSb290LCBVSFRNTERldGFpbHNTdHlsZSwgVUhUTUxTdW1tYXJ5RWxlbWVudCB9O1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0ZJUkVGT1ggPSBJU19CUk9XU0VSICYmIC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZ2V0TGFiZWwgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgbGFiZWwgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikgfHwgXCJcIjtcbiAgY29uc3QgbGFiZWxzID0gKChfYTIgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxsZWRieVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkuc3BsaXQoL1xccysvKSkgfHwgW107XG4gIHJldHVybiBbXG4gICAgLi4ubGFiZWxzLm1hcCgoaWQyKSA9PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZDIpKSxcbiAgICAvLyBHZXQgYWxsIGxhYmVsbGVkYnkgZWxlbWVudHNcbiAgICAuLi5BcnJheS5mcm9tKGVsLmxhYmVscyB8fCBbXSlcbiAgICAvLyBHZXQgYWxsIDxsYWJlbD4gZWxlbWVudHNcbiAgXS5yZWR1Y2UoKGFjYywgZWwyKSA9PiB7XG4gICAgdmFyIF9hMztcbiAgICByZXR1cm4gYWNjIHx8ICgoX2EzID0gZWwyID09IG51bGwgPyB2b2lkIDAgOiBlbDIuaW5uZXJUZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnRyaW0oKSkgfHwgXCJcIjtcbiAgfSwgbGFiZWwpO1xufTtcbnZhciBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QgPSAoc3R5bGUsIHNsb3QgPSBcIjxzbG90Pjwvc2xvdD5cIikgPT4gYDx0ZW1wbGF0ZSBzaGFkb3dyb290bW9kZT1cIm9wZW5cIj4ke3Nsb3R9PHN0eWxlPiR7c3R5bGV9PC9zdHlsZT48L3RlbXBsYXRlPmA7XG5cbi8vIHUtcHJvZ3Jlc3MudHNcbnZhciBVSFRNTFByb2dyZXNzU3R5bGUgPSBgOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgYm9yZGVyOiAxcHggc29saWQ7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgaGVpZ2h0OiAuNWVtOyB3aWR0aDogMTBlbTsgb3ZlcmZsb3c6IGhpZGRlbiB9XG46aG9zdDo6YmVmb3JlIHsgY29udGVudDogJyc7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDEwMCU7IGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsgd2lkdGg6IHZhcigtLXBlcmNlbnRhZ2UsIDAlKTsgdHJhbnNpdGlvbjogd2lkdGggLjJzIH1cbjpob3N0KDpub3QoW3ZhbHVlXSkpIHsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLGN1cnJlbnRDb2xvciAyNSUsIHRyYW5zcGFyZW50IDUwJSwgY3VycmVudENvbG9yIDc1JSkgNTAlLzQwMCUgfVxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKSB7IDpob3N0IHsgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlIDJzIGxpbmVhciBpbmZpbml0ZSB9ICB9XG5Aa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUgeyBmcm9tIHsgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAxMDAlIH0gdG8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDAgfSB9YDtcbnZhciBVSFRNTFByb2dyZXNzU2hhZG93Um9vdCA9IGRlY2xhcmF0aXZlU2hhZG93Um9vdChcbiAgVUhUTUxQcm9ncmVzc1N0eWxlLFxuICBcIjxzbG90IGhpZGRlbj48L3Nsb3Q+XCJcbik7XG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MUHJvZ3Jlc3NFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiLCBcInZhbHVlXCIsIFwibWF4XCJdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKCF0aGlzLnNoYWRvd1Jvb3QpXG4gICAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBoaWRkZW46IFwiXCIgfSksXG4gICAgICAgIC8vIFNsb3QgaGlkaW5nIGNvbnRlbnQgYWxsb3dzIGxlZ2FjeSBicm93c2VyIHRvIGRpc3BsYXkgZmFsbGJhY2sgdGV4dFxuICAgICAgICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgVUhUTUxQcm9ncmVzc1N0eWxlKVxuICAgICAgKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoU0tJUF9BVFRSX0NIQU5HRSkgcmV0dXJuO1xuICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgIGNvbnN0IHJvbGVJbWFnZSA9IElTX0lPUyB8fCBJU19GSVJFRk9YO1xuICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKHRoaXMucG9zaXRpb24gKiAxMDApKTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wZXJjZW50YWdlXCIsIGAke3BlcmNlbnRhZ2V9JWApO1xuICAgIGxldCBsYWJlbCA9IGdldExhYmVsKHRoaXMpO1xuICAgIGlmIChyb2xlSW1hZ2UpIGxhYmVsID0gYCR7bGFiZWwucmVwbGFjZSgvXFxkKyUkLywgXCJcIil9ICR7cGVyY2VudGFnZX0lYDtcbiAgICBpZiAoSVNfRklSRUZPWCkgZm9yIChjb25zdCBlbCBvZiB0aGlzLmxhYmVscykgYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIsIGxhYmVsKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1idXN5XCIsIGAke3RoaXMucG9zaXRpb24gPT09IC0xfWApO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsXCIsIGxhYmVsLnRyaW0oKSk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtbGFiZWxsZWRieVwiLCBudWxsKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW1heFwiLCBcIjEwMFwiKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW1pblwiLCBcIjBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVub3dcIiwgYCR7cGVyY2VudGFnZX1gKTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCByb2xlSW1hZ2UgPyBcImltZ1wiIDogXCJwcm9ncmVzc2JhclwiKTtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG4gIH1cbiAgZ2V0IGxhYmVscygpIHtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuY2xvc2VzdChcImxhYmVsOm5vdChbZm9yXSlcIik7XG4gICAgY29uc3QgaWQyID0gdXNlSWQodGhpcyk7XG4gICAgaWYgKGxhYmVsKSBsYWJlbC5odG1sRm9yID0gaWQyO1xuICAgIGNvbnN0IGVsID0gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYGxhYmVsW2Zvcj1cIiR7aWQyfVwiXWBcbiAgICApO1xuICAgIHJldHVybiBlbDtcbiAgfVxuICBnZXQgcG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUgPT09IG51bGwgPyAtMSA6IE1hdGgubWluKHRoaXMudmFsdWUgLyB0aGlzLm1heCwgMSk7XG4gIH1cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBnZXROdW1iZXIodGhpcywgXCJ2YWx1ZVwiKTtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBzZXROdW1iZXIodGhpcywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IG1heCgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwibWF4XCIpIHx8IDE7XG4gIH1cbiAgc2V0IG1heChtYXgpIHtcbiAgICBzZXROdW1iZXIodGhpcywgXCJtYXhcIiwgbWF4KTtcbiAgfVxufTtcbi8vIFByZXZlbnQgQ2hyb21lIERldlRvb2xzIHdhcm5pbmcgYWJvdXQgPGxhYmVsIGZvcj1cIlwiPiBwb2ludGluZyB0byA8dS1wcm9ncmVzcz5cblVIVE1MUHJvZ3Jlc3NFbGVtZW50LmZvcm1Bc3NvY2lhdGVkID0gdHJ1ZTtcbnZhciBpc051bWVyaWMgPSAodmFsdWUpID0+ICFOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlRmxvYXQoYCR7dmFsdWV9YCkpICYmIE51bWJlci5pc0Zpbml0ZShOdW1iZXIodmFsdWUpKTtcbnZhciBnZXROdW1iZXIgPSAoZWwsIGtleSkgPT4ge1xuICBjb25zdCB2YWx1ZSA9IGF0dHIoZWwsIGtleSk7XG4gIHJldHVybiBpc051bWVyaWModmFsdWUpID8gTWF0aC5tYXgoMCwgTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUpKSA6IG51bGw7XG59O1xudmFyIHNldE51bWJlciA9IChlbCwga2V5LCB2YWwpID0+IHtcbiAgaWYgKHZhbCA9PT0gbnVsbCB8fCBpc051bWVyaWModmFsKSkgYXR0cihlbCwga2V5LCBgJHt2YWx9YCk7XG4gIGVsc2UgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2V0IG5vbi1udW1lcmljICcke2F0dHJ9JzogJyR7dmFsfSdgKTtcbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXByb2dyZXNzXCIsIFVIVE1MUHJvZ3Jlc3NFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxQcm9ncmVzc0VsZW1lbnQsIFVIVE1MUHJvZ3Jlc3NTaGFkb3dSb290LCBVSFRNTFByb2dyZXNzU3R5bGUgfTtcbiJdLCJuYW1lcyI6WyJfX2RlZlByb3AiLCJfX2dldE93blByb3BTeW1ib2xzIiwiX19oYXNPd25Qcm9wIiwiX19wcm9wSXNFbnVtIiwiX19kZWZOb3JtYWxQcm9wIiwib2JqIiwia2V5IiwidmFsdWUiLCJfX3NwcmVhZFZhbHVlcyIsImEiLCJiIiwicHJvcCIsIklTX0JST1dTRVIiLCJJU19BTkRST0lEIiwiSVNfRklSRUZPWCIsIklTX0lPUyIsIl9hIiwiRk9DVVNfT1VUTElORSIsIlVIVE1MRWxlbWVudCIsImF0dHIiLCJlbCIsIm5hbWUiLCJldmVudHMiLCJhY3Rpb24iLCJlbGVtZW50IiwicmVzdCIsInR5cGUiLCJvbiIsIm9mZiIsIm9ic2VydmVycyIsIm11dGF0aW9uT2JzZXJ2ZXIiLCJvcHRpb25zIiwib2JzZXJ2ZXIiLCJkZXRhaWwiLCJhc0J1dHRvbiIsImV2ZW50IiwiaXNDbGljayIsImdldFJvb3QiLCJub2RlIiwiX2EyIiwicm9vdCIsImlkIiwidXNlSWQiLCJjcmVhdGVFbGVtZW50IiwidGFnTmFtZSIsInRleHQyIiwiYXR0cnMiLCJ2YWwiLCJjdXN0b21FbGVtZW50cyIsImluc3RhbmNlIiwiZ2V0TGFiZWwiLCJsYWJlbCIsImlkMiIsImFjYyIsImVsMiIsIl9hMyIsIkxJVkUiLCJMSVZFX1NSX0ZJWCIsInNwZWFrIiwic2V0VmFsdWUiLCJpbnB1dCIsImRhdGEiLCJfYiIsInByb3RvIiwiSVNfUFJFU1MiLCJpc01vdXNlRG93biIsIlVIVE1MQ29tYm9ib3hTdHlsZSIsIkVWRU5UUyIsIkVWRU5UX09OQ0UiLCJJU19GSVJFRk9YX0RFU0tUT1AiLCJJU19NT0JJTEUiLCJNT0RJRklFRCIsIkZBTFNFIiwiVEVYVFMiLCJVSFRNTENvbWJvYm94RWxlbWVudCIsInJlbmRlciIsInN5bmNJbnB1dFZhbHVlIiwiXyIsInRhcmdldCIsImlzRGlzYWJsZWQiLCJvbkJsdXIiLCJvbkNsaWNrIiwib25Gb2N1cyIsIm9uSW5wdXQiLCJvbktleURvd24iLCJ0YWciLCJ0ZXh0IiwiaXNEYXRhIiwiY29udHJvbCIsInNlbGYiLCJfZm9jdXMiLCJfdGV4dHMiLCJpdGVtcyIsImxpc3QiLCJtdWx0aXBsZSIsInByZXYiLCJuZXh0IiwiZWRpdHMiLCJhZGRlZE5vZGVzIiwicmVtb3ZlZE5vZGVzIiwic2hvdWxkQW5ub3VuY2UiLCJhcmlhRXhwYW5kZWQiLCJpbnB1dE1vZGUiLCJuZXh0Rm9jdXMiLCJpc1JlbW92ZSIsImlkeCIsInNlbGVjdCIsInJlbW92ZSIsIml0ZW0yIiwib3B0aW9uIiwibGFiZWwyIiwiYXJpYSIsIm9wdCIsIml0ZW0iLCJzeW5jQ2xlYXJXaXRoSW5wdXQiLCJzeW5jT3B0aW9uc1dpdGhJdGVtcyIsIl9zcGVhayIsInZhbHVlcyIsImRpc3BhdGNoTWF0Y2giLCJjaGFuZ2UiLCJjcmVhdGFibGUiLCJxdWVyeSIsIm1hdGNoIiwibyIsImRpc3BhdGNoQ2hhbmdlIiwicmVtb3ZhYmxlIiwiYWRkIiwiaSIsIm9uQmx1cnJlZCIsIngiLCJ5IiwiY2xlYXIiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJyZXBlYXQiLCJpc0NvbnRyb2wiLCJpblRleHQiLCJpbmRleCIsImZvcm0iLCJTQUZFX0xBQkVMTEVEQlkiLCJESVNQTEFZX0JMT0NLIiwiYXR0YWNoU3R5bGUiLCJjc3MiLCJVSFRNTFRhYnNTdHlsZSIsIlVIVE1MVGFiTGlzdFN0eWxlIiwiVUhUTUxUYWJQYW5lbFN0eWxlIiwiVUhUTUxUYWJTdHlsZSIsIkFSSUFfQ09OVFJPTFMiLCJBUklBX1NFTEVDVEVEIiwiVUhUTUxUYWJzRWxlbWVudCIsInF1ZXJ5V2l0aG91dE5lc3RlZCIsImdldFNlbGVjdGVkSW5kZXgiLCJzZXRTZWxlY3RlZCIsIlVIVE1MVGFiTGlzdEVsZW1lbnQiLCJ0YWIiLCJ0YWJzIiwiU0tJUF9BVFRSX0NIQU5HRSIsIlVIVE1MVGFiRWxlbWVudCIsInBhbmVscyIsIm5leHRQYW5lbCIsImdldFBhbmVsIiwicGFuZWwiLCJ0YWJsaXN0IiwidGFiTGlzdCIsIlVIVE1MVGFiUGFuZWxFbGVtZW50IiwiaGlkZGVuIiwiaXNGb2N1c2FibGUiLCJtaW4iLCJtYXgiLCJyb3VuZCIsImZsb29yIiwiY3JlYXRlQ29vcmRzIiwidiIsIm9wcG9zaXRlU2lkZU1hcCIsIm9wcG9zaXRlQWxpZ25tZW50TWFwIiwiY2xhbXAiLCJzdGFydCIsImVuZCIsImV2YWx1YXRlIiwicGFyYW0iLCJnZXRTaWRlIiwicGxhY2VtZW50IiwiZ2V0QWxpZ25tZW50IiwiZ2V0T3Bwb3NpdGVBeGlzIiwiYXhpcyIsImdldEF4aXNMZW5ndGgiLCJ5QXhpc1NpZGVzIiwiZ2V0U2lkZUF4aXMiLCJnZXRBbGlnbm1lbnRBeGlzIiwiZ2V0QWxpZ25tZW50U2lkZXMiLCJyZWN0cyIsInJ0bCIsImFsaWdubWVudCIsImFsaWdubWVudEF4aXMiLCJsZW5ndGgiLCJtYWluQWxpZ25tZW50U2lkZSIsImdldE9wcG9zaXRlUGxhY2VtZW50IiwiZ2V0RXhwYW5kZWRQbGFjZW1lbnRzIiwib3Bwb3NpdGVQbGFjZW1lbnQiLCJnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCIsImxyUGxhY2VtZW50IiwicmxQbGFjZW1lbnQiLCJ0YlBsYWNlbWVudCIsImJ0UGxhY2VtZW50IiwiZ2V0U2lkZUxpc3QiLCJzaWRlIiwiaXNTdGFydCIsImdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMiLCJmbGlwQWxpZ25tZW50IiwiZGlyZWN0aW9uIiwiZXhwYW5kUGFkZGluZ09iamVjdCIsInBhZGRpbmciLCJnZXRQYWRkaW5nT2JqZWN0IiwicmVjdFRvQ2xpZW50UmVjdCIsInJlY3QiLCJ3aWR0aCIsImhlaWdodCIsImNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50IiwiX3JlZiIsInJlZmVyZW5jZSIsImZsb2F0aW5nIiwic2lkZUF4aXMiLCJhbGlnbkxlbmd0aCIsImlzVmVydGljYWwiLCJjb21tb25YIiwiY29tbW9uWSIsImNvbW1vbkFsaWduIiwiY29vcmRzIiwiY29tcHV0ZVBvc2l0aW9uIiwiY29uZmlnIiwic3RyYXRlZ3kiLCJtaWRkbGV3YXJlIiwicGxhdGZvcm0iLCJ2YWxpZE1pZGRsZXdhcmUiLCJzdGF0ZWZ1bFBsYWNlbWVudCIsIm1pZGRsZXdhcmVEYXRhIiwicmVzZXRDb3VudCIsImZuIiwibmV4dFgiLCJuZXh0WSIsInJlc2V0IiwiZGV0ZWN0T3ZlcmZsb3ciLCJzdGF0ZSIsIl9hd2FpdCRwbGF0Zm9ybSRpc0VsZSIsImVsZW1lbnRzIiwiYm91bmRhcnkiLCJyb290Qm91bmRhcnkiLCJlbGVtZW50Q29udGV4dCIsImFsdEJvdW5kYXJ5IiwicGFkZGluZ09iamVjdCIsImNsaXBwaW5nQ2xpZW50UmVjdCIsIm9mZnNldFBhcmVudCIsIm9mZnNldFNjYWxlIiwiZWxlbWVudENsaWVudFJlY3QiLCJmbGlwIiwiX21pZGRsZXdhcmVEYXRhJGFycm93IiwiX21pZGRsZXdhcmVEYXRhJGZsaXAiLCJpbml0aWFsUGxhY2VtZW50IiwiY2hlY2tNYWluQXhpcyIsImNoZWNrQ3Jvc3NBeGlzIiwic3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIiwiZmFsbGJhY2tTdHJhdGVneSIsImZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24iLCJkZXRlY3RPdmVyZmxvd09wdGlvbnMiLCJpbml0aWFsU2lkZUF4aXMiLCJpc0Jhc2VQbGFjZW1lbnQiLCJmYWxsYmFja1BsYWNlbWVudHMiLCJoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uIiwicGxhY2VtZW50cyIsIm92ZXJmbG93Iiwib3ZlcmZsb3dzIiwib3ZlcmZsb3dzRGF0YSIsInNpZGVzIiwiX21pZGRsZXdhcmVEYXRhJGZsaXAyIiwiX292ZXJmbG93c0RhdGEkZmlsdGVyIiwibmV4dEluZGV4IiwibmV4dFBsYWNlbWVudCIsImQiLCJyZXNldFBsYWNlbWVudCIsIl9vdmVyZmxvd3NEYXRhJGZpbHRlcjIiLCJjdXJyZW50U2lkZUF4aXMiLCJzaGlmdCIsImxpbWl0ZXIiLCJjcm9zc0F4aXMiLCJtYWluQXhpcyIsIm1haW5BeGlzQ29vcmQiLCJjcm9zc0F4aXNDb29yZCIsIm1pblNpZGUiLCJtYXhTaWRlIiwibGltaXRlZENvb3JkcyIsInNpemUiLCJfc3RhdGUkbWlkZGxld2FyZURhdGEiLCJfc3RhdGUkbWlkZGxld2FyZURhdGEyIiwiYXBwbHkiLCJpc1lBeGlzIiwiaGVpZ2h0U2lkZSIsIndpZHRoU2lkZSIsIm1heGltdW1DbGlwcGluZ0hlaWdodCIsIm1heGltdW1DbGlwcGluZ1dpZHRoIiwib3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQiLCJvdmVyZmxvd0F2YWlsYWJsZVdpZHRoIiwibm9TaGlmdCIsImF2YWlsYWJsZUhlaWdodCIsImF2YWlsYWJsZVdpZHRoIiwieE1pbiIsInhNYXgiLCJ5TWluIiwieU1heCIsIm5leHREaW1lbnNpb25zIiwiaGFzV2luZG93IiwiZ2V0Tm9kZU5hbWUiLCJpc05vZGUiLCJnZXRXaW5kb3ciLCJfbm9kZSRvd25lckRvY3VtZW50IiwiZ2V0RG9jdW1lbnRFbGVtZW50IiwiaXNFbGVtZW50IiwiaXNIVE1MRWxlbWVudCIsImlzU2hhZG93Um9vdCIsImludmFsaWRPdmVyZmxvd0Rpc3BsYXlWYWx1ZXMiLCJpc092ZXJmbG93RWxlbWVudCIsIm92ZXJmbG93WCIsIm92ZXJmbG93WSIsImRpc3BsYXkiLCJnZXRDb21wdXRlZFN0eWxlIiwidGFibGVFbGVtZW50cyIsImlzVGFibGVFbGVtZW50IiwidG9wTGF5ZXJTZWxlY3RvcnMiLCJpc1RvcExheWVyIiwic2VsZWN0b3IiLCJ0cmFuc2Zvcm1Qcm9wZXJ0aWVzIiwid2lsbENoYW5nZVZhbHVlcyIsImNvbnRhaW5WYWx1ZXMiLCJpc0NvbnRhaW5pbmdCbG9jayIsImVsZW1lbnRPckNzcyIsIndlYmtpdCIsImlzV2ViS2l0IiwiZ2V0Q29udGFpbmluZ0Jsb2NrIiwiY3VycmVudE5vZGUiLCJnZXRQYXJlbnROb2RlIiwiaXNMYXN0VHJhdmVyc2FibGVOb2RlIiwibGFzdFRyYXZlcnNhYmxlTm9kZU5hbWVzIiwiZ2V0Tm9kZVNjcm9sbCIsInJlc3VsdCIsImdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yIiwicGFyZW50Tm9kZSIsImdldE92ZXJmbG93QW5jZXN0b3JzIiwidHJhdmVyc2VJZnJhbWVzIiwiX25vZGUkb3duZXJEb2N1bWVudDIiLCJzY3JvbGxhYmxlQW5jZXN0b3IiLCJpc0JvZHkiLCJ3aW4iLCJmcmFtZUVsZW1lbnQiLCJnZXRGcmFtZUVsZW1lbnQiLCJnZXRDc3NEaW1lbnNpb25zIiwiZ2V0Q29tcHV0ZWRTdHlsZSQxIiwiaGFzT2Zmc2V0Iiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJzaG91bGRGYWxsYmFjayIsInVud3JhcEVsZW1lbnQiLCJnZXRTY2FsZSIsImRvbUVsZW1lbnQiLCIkIiwibm9PZmZzZXRzIiwiZ2V0VmlzdWFsT2Zmc2V0cyIsInNob3VsZEFkZFZpc3VhbE9mZnNldHMiLCJpc0ZpeGVkIiwiZmxvYXRpbmdPZmZzZXRQYXJlbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJpbmNsdWRlU2NhbGUiLCJpc0ZpeGVkU3RyYXRlZ3kiLCJjbGllbnRSZWN0Iiwic2NhbGUiLCJ2aXN1YWxPZmZzZXRzIiwib2Zmc2V0V2luIiwiY3VycmVudFdpbiIsImN1cnJlbnRJRnJhbWUiLCJpZnJhbWVTY2FsZSIsImlmcmFtZVJlY3QiLCJnZXRXaW5kb3dTY3JvbGxCYXJYIiwibGVmdFNjcm9sbCIsImdldEhUTUxPZmZzZXQiLCJkb2N1bWVudEVsZW1lbnQiLCJzY3JvbGwiLCJodG1sUmVjdCIsImNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0IiwidG9wTGF5ZXIiLCJvZmZzZXRzIiwiaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQiLCJvZmZzZXRSZWN0IiwiaHRtbE9mZnNldCIsImdldENsaWVudFJlY3RzIiwiZ2V0RG9jdW1lbnRSZWN0IiwiaHRtbCIsImJvZHkiLCJTQ1JPTExCQVJfTUFYIiwiZ2V0Vmlld3BvcnRSZWN0IiwidmlzdWFsVmlld3BvcnQiLCJ2aXN1YWxWaWV3cG9ydEJhc2VkIiwid2luZG93U2Nyb2xsYmFyWCIsImRvYyIsImJvZHlTdHlsZXMiLCJib2R5TWFyZ2luSW5saW5lIiwiY2xpcHBpbmdTdGFibGVTY3JvbGxiYXJXaWR0aCIsImFic29sdXRlT3JGaXhlZCIsImdldElubmVyQm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yIiwiY2xpcHBpbmdBbmNlc3RvciIsImhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvciIsInN0b3BOb2RlIiwiZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzIiwiY2FjaGUiLCJjYWNoZWRSZXN1bHQiLCJjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSIsImVsZW1lbnRJc0ZpeGVkIiwiY29tcHV0ZWRTdHlsZSIsImN1cnJlbnROb2RlSXNDb250YWluaW5nIiwiYW5jZXN0b3IiLCJnZXRDbGlwcGluZ1JlY3QiLCJjbGlwcGluZ0FuY2VzdG9ycyIsImZpcnN0Q2xpcHBpbmdBbmNlc3RvciIsImNsaXBwaW5nUmVjdCIsImFjY1JlY3QiLCJnZXREaW1lbnNpb25zIiwiZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQiLCJzZXRMZWZ0UlRMU2Nyb2xsYmFyT2Zmc2V0IiwiaXNTdGF0aWNQb3NpdGlvbmVkIiwiZ2V0VHJ1ZU9mZnNldFBhcmVudCIsInBvbHlmaWxsIiwicmF3T2Zmc2V0UGFyZW50IiwiZ2V0T2Zmc2V0UGFyZW50Iiwic3ZnT2Zmc2V0UGFyZW50IiwiZ2V0RWxlbWVudFJlY3RzIiwiZ2V0T2Zmc2V0UGFyZW50Rm4iLCJnZXREaW1lbnNpb25zRm4iLCJmbG9hdGluZ0RpbWVuc2lvbnMiLCJpc1JUTCIsInJlY3RzQXJlRXF1YWwiLCJvYnNlcnZlTW92ZSIsIm9uTW92ZSIsImlvIiwidGltZW91dElkIiwiY2xlYW51cCIsIl9pbyIsInJlZnJlc2giLCJza2lwIiwidGhyZXNob2xkIiwiZWxlbWVudFJlY3RGb3JSb290TWFyZ2luIiwiaW5zZXRUb3AiLCJpbnNldFJpZ2h0IiwiaW5zZXRCb3R0b20iLCJpbnNldExlZnQiLCJpc0ZpcnN0VXBkYXRlIiwiaGFuZGxlT2JzZXJ2ZSIsImVudHJpZXMiLCJyYXRpbyIsImF1dG9VcGRhdGUiLCJ1cGRhdGUiLCJhbmNlc3RvclNjcm9sbCIsImFuY2VzdG9yUmVzaXplIiwiZWxlbWVudFJlc2l6ZSIsImxheW91dFNoaWZ0IiwiYW5pbWF0aW9uRnJhbWUiLCJyZWZlcmVuY2VFbCIsImFuY2VzdG9ycyIsImNsZWFudXBJbyIsInJlb2JzZXJ2ZUZyYW1lIiwicmVzaXplT2JzZXJ2ZXIiLCJmaXJzdEVudHJ5IiwiX3Jlc2l6ZU9ic2VydmVyIiwiZnJhbWVJZCIsInByZXZSZWZSZWN0IiwiZnJhbWVMb29wIiwibmV4dFJlZlJlY3QiLCJfcmVzaXplT2JzZXJ2ZXIyIiwic2hpZnQkMSIsImZsaXAkMSIsInNpemUkMSIsIm1lcmdlZE9wdGlvbnMiLCJwbGF0Zm9ybVdpdGhDYWNoZSIsImNvbXB1dGVQb3NpdGlvbiQxIiwiUVVJQ0tfRVZFTlQiLCJkZWJvdW5jZSIsImNhbGxiYWNrIiwiZGVsYXkiLCJ0aW1lciIsImFyZ3MiLCJVVUlEIiwiVU5CSU5EIiwib25Mb2FkZWQiLCJydW4iLCJ1bmJpbmQiLCJBTkNIT1JFRCIsImFuY2hvclBvc2l0aW9uIiwiYW5jaG9yIiwiY3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlciIsInF1ZXVlIiwib25GcmFtZSIsIm9uVGltZXIiLCJNVVRBVE9SUyIsIm9uTXV0YXRpb24iLCJjbGFzc05hbWUiLCJlbGVtcyIsIm11dGF0b3IiLCJpc0lucHV0TGlrZSIsIkNTU19CUkVBRENSVU1CUyIsInN0eWxlcyIsIkNTU19DSElQIiwiQ1NTX0hFTFBURVhUIiwiQ1NTX1BBR0lOQVRJT04iLCJDTElDS1MiLCJNQVRPTU8iLCJCQU5ORVIiLCJCQU5ORVJfVVJMIiwiYW5hbHl0aWNzIiwiY29uc2VudCIsImVuYWJsZWQiLCJtYXRvbW9JZCIsIm1hdG9tb1RhZ01hbmFnZXJJZCIsInJlbmRlckJhbm5lciIsInNyYyIsInVybCIsInRpdGxlIiwiY2F0ZWdvcnkiLCJyZXN1bHRzIiwiYmFubmVyIiwib25DbG9zZSIsImhhbmRsZVRyYWNrIiwicHJvY2Vzc1RyYWNrIiwiaGVhZGluZyIsImdyb3VwIiwicG9wb3ZlciIsIm9wZW4iLCJzdHlsZSIsImhlYWQiLCJzaGVldCIsImZvcmNlIiwiQ1NTX0FQUCIsIkNTU19TVElDS1kiLCJDU1NfVE9HR0xFIiwiQ1NTX1NJREVCQVIiLCJ1c2VUcmFuc2l0aW9uIiwidG9nZ2xlQXBwRXhwYW5kZWQiLCJoYW5kbGVBcHBUb2dnbGVDbGljayIsInN0b3AiLCJsaW5rIiwiY2xvc2VTaWRlYmFyIiwic2lkZWJhciIsIk1JTl9ZIiwiU0NST0xMX1VQIiwiU1RJQ0siLCJTVElDS19FTCIsIlNUSUNLX0giLCJTVElDS19ZIiwiU1RVQ0siLCJXSU5fSCIsIldJTl9ZIiwiaGFuZGxlTXV0YXRpb24iLCJzdGlja3kiLCJoYW5kbGVBcHBTY3JvbGwiLCJORVhUX1kiLCJORVhUX1VQIiwiZ2V0U3RlcHMiLCJub3ciLCJzaG93Iiwib2Zmc2V0IiwicGFnZXMiLCJwYWdpbmF0aW9uIiwiY3VycmVudCIsInRvdGFsIiwicGFnZSIsImhhbmRsZUJyZWFkY3J1bWJzTXV0YXRpb24iLCJicmVhZGNydW1icyIsImJyZWFkY3VtYnMiLCJjcnVtYiIsIkNTU19ESUFMT0ciLCJESUFMT0dTIiwiaGFuZGxlTW9kYWwiLCJkaWFsb2ciLCJoYW5kbGVEaWFsb2dDbGljayIsImhhbmRsZUVycm9zdW1tYXJ5SW5qZWN0IiwiZmlyc3QiLCJESVNBQkxFRCIsIlNFTEVDVEVEIiwiVUhUTUxPcHRpb25FbGVtZW50IiwiVUhUTUxEYXRhTGlzdFN0eWxlIiwiTElWRV9USU1FUiIsIklOUFVUX0RFQk9VTkNFIiwiRVZFTlRTX0lOUFVUIiwiVUhUTUxEYXRhTGlzdEVsZW1lbnQiLCJkaXNjb25uZWN0SW5wdXQiLCJfcHJldiIsInNldHVwSW5wdXQiLCJzZXRFeHBhbmRlZCIsIl9jIiwiaXNQb3BvdmVyIiwiaXNJbnB1dCIsInJlbGF0ZWRUYXJnZXQiLCJhbHRLZXkiLCJjdHJsS2V5Iiwic2hpZnRLZXkiLCJtZXRhS2V5IiwiaXNFc2NhcGUiLCJfcm9vdCIsIl9pbnB1dCIsImZpbHRlciIsInZpc2libGUiLCJDU1NfRklFTEQiLCJDU1NfVkFMSURBVElPTlMiLCJDU1NfVkFMSURBVElPTiIsImdldFRleHQiLCJoYW5kbGVGaWVsZE11dGF0aW9uIiwiZmllbGRzIiwidmFsaWRhdGUiLCJmaWVsZCIsImxhYmVscyIsImRlc2NzIiwidmFsaWRzIiwiY29tYm9ib3giLCJ2YWxpZCIsImRlc2MiLCJyZW5kZXJDb21ib2JveCIsInJlbmRlckNvdW50ZXIiLCJyZW5kZXJUZXh0YXJlYVNpemUiLCJ0ZXh0YXJlYSIsImxpbWl0IiwicmVtYWluZGVyIiwibmV4dEludmFsaWQiLCJwcmV2SW52YWxpZCIsIm92ZXIiLCJ1bmRlciIsImhhbmRsZUZpZWxkVG9nZ2xlIiwiaGFuZGxlRmllbGRJbnB1dCIsImhhbmRsZUZpZWxkVmFsZGlhdGlvbiIsIkNTU19GSUVMRFNFVCIsIkFSSUFfREVTQyIsIkFSSUFfSU5WQUxJRCIsImhhbmRsZUZpZWxkc2V0TXV0YXRpb24iLCJmaWVsZHNldHMiLCJmaWVsZHNldCIsImlucHV0cyIsInZhbGlkSWQiLCJDU1NfTE9HTyIsImhhbmRsZUxvZ29NdXRhdGlvbiIsImxvZ28iLCJpY29uIiwic3ZnIiwiaXNEb3QiLCJiYWNrIiwiQ1NTX1BPUE9WRVIiLCJPUEVOX1BPUE9WRVJTIiwiaGFuZGxlUG9wb3ZlclRvZ2dsZSIsIm5ld1N0YXRlIiwiaXNDbG9zaW5nIiwiaXNDb250YWluIiwiaGFuZGxlUG9wb3ZlckxpbmtDbGljayIsImNsb3NlIiwiQ1NTX1RBQkxFIiwiaGFuZGxlVGFibGVNdXRhdGlvbiIsInRhYmxlcyIsInRhYmxlIiwidGhzIiwidGgiLCJ0Ym9keSIsInJvdyIsImNlbGwiLCJDU1NfVE9HR0xFR1JPVVAiLCJoYW5kbGVUb2dnbGVncm91cEtleWRvd24iLCJtb3ZlIiwiREVTQ1JJQkVEQlkiLCJFU0MiLCJMQUJFTExFREJZIiwiUE9TSVRJT05fQ1NTX1BST1BFUlRZIiwiVEhST1RUTEVfREVMQVkiLCJUT09MVElQIiwiQU5DSE9SIiwiTEFTVF9DQUxMIiwiVEhST1RUTEUiLCJoYW5kbGVUb29sdGlwTW92ZSIsIndhaXQiLCJoYW5kbGVUb29sdGlwTW92ZVRocm90dGxlZCIsImNvbnRlbnQiLCJwb3NpdGlvbiIsImhhZExhYmVsIiwiaGFzTGFiZWwiLCJVSFRNTERldGFpbHNTdHlsZSIsIlVIVE1MRGV0YWlsc0VsZW1lbnQiLCJoaWRlIiwidURldGFpbHNMaXN0IiwidURldGFpbHMiLCJzdW1tYXJ5IiwiaXNTdW1tYXJ5IiwiVUhUTUxTdW1tYXJ5RWxlbWVudCIsIlVIVE1MUHJvZ3Jlc3NTdHlsZSIsIlVIVE1MUHJvZ3Jlc3NFbGVtZW50Iiwicm9sZUltYWdlIiwicGVyY2VudGFnZSIsImdldE51bWJlciIsInNldE51bWJlciIsImlzTnVtZXJpYyJdLCJtYXBwaW5ncyI6ImtDQUFBLElBQUlBLEdBQVksT0FBTyxlQUNuQkMsR0FBc0IsT0FBTyxzQkFDN0JDLEdBQWUsT0FBTyxVQUFVLGVBQ2hDQyxHQUFlLE9BQU8sVUFBVSxxQkFDaENDLEdBQWtCLENBQUNDLEVBQUtDLEVBQUtDLElBQVVELEtBQU9ELEVBQU1MLEdBQVVLLEVBQUtDLEVBQUssQ0FBRSxXQUFZLEdBQU0sYUFBYyxHQUFNLFNBQVUsR0FBTSxNQUFBQyxDQUFLLENBQUUsRUFBSUYsRUFBSUMsQ0FBRyxFQUFJQyxFQUN0SkMsR0FBaUIsQ0FBQ0MsRUFBR0MsSUFBTSxDQUM3QixRQUFTQyxLQUFRRCxJQUFNQSxFQUFJLENBQUEsR0FDckJSLEdBQWEsS0FBS1EsRUFBR0MsQ0FBSSxHQUMzQlAsR0FBZ0JLLEVBQUdFLEVBQU1ELEVBQUVDLENBQUksQ0FB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QixHQUN0QyxJQUFJSyxHQUFhdHJCLEdBQVUsQ0FBQyxPQUFPLE1BQU0sT0FBTyxXQUFXLEdBQUdBLENBQUssRUFBRSxDQUFDLEdBQUssT0FBTyxTQUFTLE9BQU9BLENBQUssQ0FBQyxFQUNwR29yQixHQUFZLENBQUN2cUIsRUFBSWQsSUFBUSxDQUMzQixNQUFNQyxFQUFRWSxFQUFLQyxFQUFJZCxDQUFHLEVBQzFCLE9BQU91ckIsR0FBVXRyQixDQUFLLEVBQUksS0FBSyxJQUFJLEVBQUcsT0FBTyxXQUFXQSxDQUFLLENBQUMsRUFBSSxJQUNwRSxFQUNJcXJCLEdBQVksQ0FBQ3hxQixFQUFJZCxFQUFLeUMsSUFBUSxDQUNoQyxHQUFJQSxJQUFRLE1BQVE4b0IsR0FBVTlvQixDQUFHLEVBQUc1QixFQUFLQyxFQUFJZCxFQUFLLEdBQUd5QyxDQUFHLEVBQUUsTUFDckQsT0FBTSxJQUFJLE1BQU0sOEJBQThCNUIsQ0FBSSxPQUFPNEIsQ0FBRyxHQUFHLENBQ3RFLEVBQ0EsT0FBQUMsR0FBZSxPQUFPLGFBQWN3b0IsRUFBb0IiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsMTQsMjIsMjNdfQ==
|