@mattilsynet/design 2.1.4 → 2.1.6
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/analytics/analytics.js +1 -1
- package/mtds/analytics/analytics.js.map +1 -1
- package/mtds/details/details.stories.d.ts +1 -1
- package/mtds/index.iife.js +3 -3
- package/mtds/input/input.stories.d.ts +2 -1
- package/mtds/package.json.js +1 -1
- package/mtds/styles.css +1 -1
- package/package.json +4 -4
package/mtds/index.iife.js
CHANGED
|
@@ -5,7 +5,7 @@ var mtds=function(I){"use strict";var Ri=Object.defineProperty,en=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) { ${Fi} }`))}static get observedAttributes(){return Object.keys(Dt).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=Wi(this),It(this,ln,this,!0),ce(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(){ce(this,!1),Vi(this,ln,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;he(this)||(t.type==="beforeinput"&&(this._value=e?.value||""),t.type==="blur"&&Ji(this),t.type==="click"&&ts(this,t),t.type==="focus"&&Qi(this,t),t.type==="input"&&es(this,t),t.type==="keydown"&&ns(this,t),t.type==="mousedown"&&fe(t),t.type==="mutation"&&Pt(this,t))}get multiple(){var t;return((t=y(this,"data-multiple"))!=null?t:Rt)!==Rt}set multiple(t){y(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=y(this,"data-creatable"))!=null?t:Rt)!==Rt}set creatable(t){y(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)}},Y=t=>{var e;return((e=t?.textContent)==null?void 0:e.trim())||""},me=t=>t instanceof HTMLDataElement,he=({control:t})=>t?.disabled||t?.readOnly||!1,Pt=(t,e)=>{var n,o;const{_focus:i,_texts:s,items:r,control:a,list:c,multiple:l}=t;let d=`${Y((n=a?.labels)==null?void 0:n[0])}${l?`, ${r.length?s.found.replace("%d",`${r.length}`):s.empty}`:""}`;const u=[];for(const{addedNodes:h,removedNodes:b}of e?.detail||[]){for(const v of h)me(v)&&u.unshift(v);for(const v of b)me(v)&&u.push(v)}const m=l?u.length===1:u[0]===i;if(i&&a&&m){const h=y(a,"aria-expanded"),b=y(a,"inputmode"),v=me(i)?a:i,S=!u[0].isConnected;t._speak=`${s[S?"removed":"added"]} ${Y(u[0])}, `,(Gi||i===a)&&ue(t._speak),a!==v&&(y(a,"aria-expanded",null),y(a,"inputmode","none"),d=" ",a.focus()),setTimeout(()=>{var E;y(a,"aria-expanded",h),y(a,"inputmode",S?"none":b),(E=v?.focus)==null||E.call(v),y(a,"inputmode",b),t._speak="",Xi?It(t,"blur",()=>Pt(t),cn):setTimeout(Pt,100,t)},100)}let f=0;const g=t.querySelector("select"),_=he(t)?"":`${s.remove}, `;for(const h of r){const b=g?.options[f],v=Y(h),S=h.value||v,E=`${t._speak}${v}, ${_}${++f} ${s.of} ${r.length}`;y(h,"role","button"),y(h,"value",S),y(h,"tabindex","-1"),y(h,"aria-label",E),b?Object.assign(b,{textContent:v,value:S}):g?.appendChild(new Option(v,S,!0,!0))}g&&y(g,"multiple",l?"":null);for(const h of[...g?.options||[]].slice(f))h.remove();!l&&f>1&&console.warn("u-combobox: Multiple <data> found in single mode."),c&&y(c,"aria-multiselectable",`${l}`),a&&y(a,"list",Ki(c)),a&&y(a,"aria-label",`${t._speak}${d}`);const w=Y(r[0]);w!==t._item&&Nt(t),t._item=w,un(t),dn(t),(o=ce(t))==null||o.takeRecords()},un=t=>{var e;t.clear&&y(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value)||he(t))},dn=t=>{var e;const{_speak:n,options:o=[],values:i}=t;for(const s of o){const r=(e=y(s,"value"))!=null?e:Y(s);y(s,"aria-label",n?`${n}${Y(s)}`:null),y(s,"selected",i.includes(r)?"":null)}},Nt=t=>{const{multiple:e,control:n,items:o}=t,i=Y(o[0]);!e&&n&&i!==n.value&&an(n,i,i?"insertText":"deleteContent")},ge=(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=>(y(f,"label")||Y(f)).trim().toLowerCase()===d);const m={bubbles:!0,cancelable:!0,detail:u};if(t.dispatchEvent(new CustomEvent("comboboxbeforematch",m))||(u=[...i].find(f=>f.selected)),e)return dn(t),u?ut(t,u,!1):s&&l?ut(t,{value:l},!1):(!c&&!l&&a[0]?ut(t,a[0]):Nt(t),ue(o.invalid));for(const f of i)f.selected=f===u},ut=(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))}},Qi=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),ue()},Ji=t=>fe()||setTimeout(Zi,0,t),Zi=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t.multiple||ge(t),t._focus=void 0)},ts=(t,e)=>{const{clientX:n,clientY:o,target:i}=e,{clear:s,control:r,items:a}=t;if(s?.contains(i))return r&&an(r,"","deleteContentBackward"),r?.focus();for(const c of a){const{top:l,right:d,bottom:u,left:m}=c.getBoundingClientRect();if(c.contains(i))return ut(t,c);if(o>=l&&o<=u&&n>=m&&n<=d)return c.focus()}i===t&&r?.focus()},es=(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 ut(t,c,s)}else s||ge(t,!1);un(t)},ns=(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",()=>y(o,"tabindex",null),cn)),!(!l&&qi(e)||u===-1)){if(r==="ArrowRight"&&!l)u+=1;else if(r==="ArrowLeft"&&!d)u-=1;else if(r==="Enter"&&l){const m=y(i,"form");return y(i,"form","#"),requestAnimationFrame(()=>y(i,"form",m)),ge(t)}else if((r==="Backspace"||r==="Delete")&&!d){if(e.preventDefault(),!a&&s[u])return ut(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",pe);var ve=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",os=ve&&/android/i.test(navigator.userAgent),fn;ve&&/^Mac/i.test(((fn=navigator.userAgentData)==null?void 0:fn.platform)||navigator.platform);var is=`${os?"data":"aria"}-labelledby`,be=":host(:not([hidden])) { display: block }",Ht=typeof HTMLElement>"u"?class{}:HTMLElement;function O(t,e,n){var o;return n===void 0?(o=t.getAttribute(e))!=null?o:null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var pn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},ss=(t,...e)=>pn("add",t,e),rs=(t,...e)=>pn("remove",t,e),Bt=(t,e)=>t.attachShadow({mode:"open"}).append(vn("slot"),vn("style",e)),Ft=new WeakMap,mn=(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)}},as=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},hn=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},ls=0,gn=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++ls).toString(32)}`),t.id):"",vn=(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)},Vt="aria-controls",dt="aria-selected",bn=class extends Ht{constructor(){super(),Bt(this,be)}get tabList(){return qt("u-tablist",this)[0]||null}get selectedIndex(){return Wt(this.tabs)}set selectedIndex(t){ye(this.tabs[t])}get tabs(){return qt("u-tab",this)}get panels(){return qt("u-tabpanel",this)}},_n=class extends Ht{constructor(){super(),Bt(this,be)}connectedCallback(){O(this,"role","tablist"),ss(this,"click,keydown",this),mn(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){rs(this,"click,keydown",this),mn(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s?.setAttribute(dt,"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"&&ye(n[o]),t.type==="keydown"&&!as(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){ye(this.tabs[t])}},_e=!1,wn=class extends Ht{static get observedAttributes(){return["id",dt,Vt]}constructor(){super(),Bt(this,":host(:not([hidden])) { cursor: pointer; display: inline-block }")}connectedCallback(){O(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!_e&&this.selected&&this.tabList){_e=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=qt("u-tabpanel",this.tabsElement||this),n=we(this,e[t.indexOf(this)]);n&&O(n,is,gn(this)),t.forEach((o,i)=>{const s=we(o,e[i]);o.tabIndex=o===this?0:-1,O(o,dt,`${o===this}`),s&&(s.hidden=s!==n),s&&O(o,Vt,s.id)}),_e=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return t?.nodeName==="U-TABLIST"?t:null}get selected(){return O(this,dt)==="true"}set selected(t){O(this,dt,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return we(this)}},yn=class extends Ht{static get observedAttributes(){return["hidden"]}constructor(){super(),Bt(this,be)}connectedCallback(){O(this,"role","tabpanel"),this.hidden=Wt(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){this.hidden||cs(this.firstChild)?O(this,"tabindex",null):this.tabIndex=0}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${Vt}="${this.id}"]`;return hn(this).querySelectorAll(t)}},qt=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),we=(t,e)=>{const n=O(t,Vt)||gn(e),o=hn(t).getElementById(n);return o?.nodeName==="U-TABPANEL"?o:null},Wt=t=>[...t].findIndex(e=>O(e,dt)==="true"),ye=t=>t&&O(t,"aria-selected","true"),cs=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",bn),Ut.define("u-tablist",_n),Ut.define("u-tab",wn),Ut.define("u-tabpanel",yn);const us="2.1.4",xn="_alert_1run0_1 _ds-alert_wy3tx_1",En="_app_1run0_1",Sn="_sticky_1run0_1",Tn="_avatar_1run0_1 _ds-avatar_wy3tx_1",$n="_badge_1run0_1",Cn="_breadcrumbs_1run0_1 _ds-breadcrumbs_wy3tx_1",kn="_button_1run0_1 _ds-button_wy3tx_1",An="_card_1run0_1",Ln="_group_1run0_1",In="_chip_1run0_1 _ds-chip_wy3tx_1",On="_details_1run0_1 _ds-details_wy3tx_1",Mn="_dialog_1run0_1 _ds-dialog_wy3tx_1",Rn="__drawer_1run0_1",Dn="_divider_1run0_1",Pn="_errorsummary_1run0_1 _ds-error-summary_wy3tx_1",Nn="__errorsummary_1run0_1",Hn="_field_1run0_1 _ds-field_wy3tx_1",Bn="__datalist_1run0_1",Fn="_affixes_1run0_1 _ds-field-affixes_wy3tx_1",Un="_fieldset_1run0_1 _ds-fieldset_wy3tx_1",Vn="_heading_1run0_1 _ds-heading_wy3tx_1",qn="_ingress_1run0_1",Wn="_muted_1run0_1",jn="_info_1run0_1",Kn="_prose_1run0_1",Yn="_helptext_1run0_1 _ds-focus_wy3tx_1",zn="_input_1run0_1 _ds-input_wy3tx_1",Xn="_grid_1run0_1",Gn="_flex_1run0_1",Qn="_link_1run0_1",Jn="_logo_1run0_1",Zn="_pagination_1run0_1 _ds-pagination_wy3tx_1",to="_popover_1run0_1",eo="_progress_1run0_1",no="__indeterminate_1run0_1",oo="_skeleton_1run0_1 _ds-skeleton_wy3tx_1",io="__skeleton_1run0_1",so="_spinner_1run0_1",ro="_steps_1run0_1",ao="_table_1run0_1 _ds-table_wy3tx_1",lo="__scrollShadow_1run0_1",co="_tabs_1run0_1 _ds-tabs_wy3tx_1",uo="__scrollMask_1run0_1",fo="_tag_1run0_1 _ds-tag_wy3tx_1",po="_togglegroup_1run0_1",mo="__tooltip_1run0_1",ho="_validation_1run0_1 _ds-validation-message_wy3tx_1",go="_body_1run0_153",vo="__checked_1run0_1",T={alert:xn,app:En,sticky:Sn,avatar:Tn,badge:$n,breadcrumbs:Cn,button:kn,card:An,group:Ln,chip:In,details:On,dialog:Mn,_drawer:Rn,divider:Dn,errorsummary:Pn,_errorsummary:Nn,field:Hn,_datalist:Bn,affixes:Fn,fieldset:Un,heading:Vn,ingress:qn,muted:Wn,info:jn,prose:Kn,helptext:Yn,input:zn,grid:Xn,flex:Gn,link:Qn,logo:Jn,pagination:Zn,popover:to,progress:eo,_indeterminate:no,skeleton:oo,_skeleton:io,spinner:so,steps:ro,table:ao,_scrollShadow:lo,tabs:co,_scrollMask:uo,tag:fo,togglegroup:po,_tooltip:mo,validation:ho,body:go,_checked:vo},ds=Object.freeze(Object.defineProperty({__proto__:null,_checked:vo,_datalist:Bn,_drawer:Rn,_errorsummary:Nn,_indeterminate:no,_scrollMask:uo,_scrollShadow:lo,_skeleton:io,_tooltip:mo,affixes:Fn,alert:xn,app:En,avatar:Tn,badge:$n,body:go,breadcrumbs:Cn,button:kn,card:An,chip:In,default:T,details:On,dialog:Mn,divider:Dn,errorsummary:Pn,field:Hn,fieldset:Un,flex:Gn,grid:Xn,group:Ln,heading:Vn,helptext:Yn,info:jn,ingress:qn,input:zn,link:Qn,logo:Jn,muted:Wn,pagination:Zn,popover:to,progress:eo,prose:Kn,skeleton:oo,spinner:so,steps:ro,sticky:Sn,table:ao,tabs:co,tag:fo,togglegroup:po,validation:ho},Symbol.toStringTag,{value:"Module"})),ft=Math.min,A=Math.max,jt=Math.round,Kt=Math.floor,U=t=>({x:t,y:t}),fs={left:"right",right:"left",bottom:"top",top:"bottom"},ps={start:"end",end:"start"};function bo(t,e,n){return A(t,ft(e,n))}function Yt(t,e){return typeof t=="function"?t(e):t}function tt(t){return t.split("-")[0]}function zt(t){return t.split("-")[1]}function _o(t){return t==="x"?"y":"x"}function wo(t){return t==="y"?"height":"width"}const ms=new Set(["top","bottom"]);function z(t){return ms.has(tt(t))?"y":"x"}function yo(t){return _o(z(t))}function hs(t,e,n){n===void 0&&(n=!1);const o=zt(t),i=yo(t),s=wo(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 gs(t){const e=Xt(t);return[xe(t),e,xe(e)]}function xe(t){return t.replace(/start|end/g,e=>ps[e])}const xo=["left","right"],Eo=["right","left"],vs=["top","bottom"],bs=["bottom","top"];function _s(t,e,n){switch(t){case"top":case"bottom":return n?e?Eo:xo:e?xo:Eo;case"left":case"right":return e?vs:bs;default:return[]}}function ws(t,e,n,o){const i=zt(t);let s=_s(tt(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=>fs[e])}function ys(t){return{top:0,right:0,bottom:0,left:0,...t}}function xs(t){return typeof t!="number"?ys(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 So(t,e,n){let{reference:o,floating:i}=t;const s=z(e),r=yo(e),a=wo(r),c=tt(e),l=s==="y",d=o.x+o.width/2-i.width/2,u=o.y+o.height/2-i.height/2,m=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(zt(e)){case"start":f[r]-=m*(n&&l?-1:1);break;case"end":f[r]+=m*(n&&l?-1:1);break}return f}const Es=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}=So(l,o,c),m=o,f={},g=0;for(let _=0;_<a.length;_++){const{name:w,fn:h}=a[_],{x:b,y:v,data:S,reset:E}=await h({x:d,y:u,initialPlacement:o,placement:m,strategy:i,middlewareData:f,rects:l,platform:r,elements:{reference:t,floating:e}});d=b??d,u=v??u,f={...f,[w]:{...f[w],...S}},E&&g<=50&&(g++,typeof E=="object"&&(E.placement&&(m=E.placement),E.rects&&(l=E.rects===!0?await r.getElementRects({reference:t,floating:e,strategy:i}):E.rects),{x:d,y:u}=So(l,m,c)),_=-1)}return{x:d,y:u,placement:m,strategy:i,middlewareData:f}};async function Ee(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:m=!1,padding:f=0}=Yt(e,t),g=xs(f),w=a[m?u==="floating"?"reference":"floating":u],h=Gt(await s.getClippingRect({element:(n=await(s.isElement==null?void 0:s.isElement(w)))==null||n?w:w.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(a.floating)),boundary:l,rootBoundary:d,strategy:c})),b=u==="floating"?{x:o,y:i,width:r.floating.width,height:r.floating.height}:r.reference,v=await(s.getOffsetParent==null?void 0:s.getOffsetParent(a.floating)),S=await(s.isElement==null?void 0:s.isElement(v))?await(s.getScale==null?void 0:s.getScale(v))||{x:1,y:1}:{x:1,y:1},E=Gt(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:a,rect:b,offsetParent:v,strategy:c}):b);return{top:(h.top-E.top+g.top)/S.y,bottom:(E.bottom-h.bottom+g.bottom)/S.y,left:(h.left-E.left+g.left)/S.x,right:(E.right-h.right+g.right)/S.x}}const Ss=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:m,fallbackStrategy:f="bestFit",fallbackAxisSideDirection:g="none",flipAlignment:_=!0,...w}=Yt(t,e);if((n=s.arrow)!=null&&n.alignmentOffset)return{};const h=tt(i),b=z(a),v=tt(a)===a,S=await(c.isRTL==null?void 0:c.isRTL(l.floating)),E=m||(v||!_?[Xt(a)]:gs(a)),st=g!=="none";!m&&st&&E.push(...ws(a,_,g,S));const W=[a,...E],rt=await Ee(e,w),at=[];let K=((o=s.flip)==null?void 0:o.overflows)||[];if(d&&at.push(rt[h]),u){const lt=hs(i,r,S);at.push(rt[lt[0]],rt[lt[1]])}if(K=[...K,{placement:i,overflows:at}],!at.every(lt=>lt<=0)){var Ct,kt;const lt=(((Ct=s.flip)==null?void 0:Ct.index)||0)+1,tn=W[lt];if(tn&&(!(u==="alignment"?b!==z(tn):!1)||K.every(F=>z(F.placement)===b?F.overflows[0]>0:!0)))return{data:{index:lt,overflows:K},reset:{placement:tn}};let Lt=(kt=K.filter(ct=>ct.overflows[0]<=0).sort((ct,F)=>ct.overflows[1]-F.overflows[1])[0])==null?void 0:kt.placement;if(!Lt)switch(f){case"bestFit":{var At;const ct=(At=K.filter(F=>{if(st){const J=z(F.placement);return J===b||J==="y"}return!0}).map(F=>[F.placement,F.overflows.filter(J=>J>0).reduce((J,Sa)=>J+Sa,0)]).sort((F,J)=>F[1]-J[1])[0])==null?void 0:At[0];ct&&(Lt=ct);break}case"initialPlacement":Lt=a;break}if(i!==Lt)return{reset:{placement:Lt}}}return{}}}},Ts=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:w=>{let{x:h,y:b}=w;return{x:h,y:b}}},...c}=Yt(t,e),l={x:n,y:o},d=await Ee(e,c),u=z(tt(i)),m=_o(u);let f=l[m],g=l[u];if(s){const w=m==="y"?"top":"left",h=m==="y"?"bottom":"right",b=f+d[w],v=f-d[h];f=bo(b,f,v)}if(r){const w=u==="y"?"top":"left",h=u==="y"?"bottom":"right",b=g+d[w],v=g-d[h];g=bo(b,g,v)}const _=a.fn({...e,[m]:f,[u]:g});return{..._,data:{x:_.x-n,y:_.y-o,enabled:{[m]:s,[u]:r}}}}}},$s=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}=Yt(t,e),d=await Ee(e,l),u=tt(i),m=zt(i),f=z(i)==="y",{width:g,height:_}=s.floating;let w,h;u==="top"||u==="bottom"?(w=u,h=m===(await(r.isRTL==null?void 0:r.isRTL(a.floating))?"start":"end")?"left":"right"):(h=u,w=m==="end"?"top":"bottom");const b=_-d.top-d.bottom,v=g-d.left-d.right,S=ft(_-d[w],b),E=ft(g-d[h],v),st=!e.middlewareData.shift;let W=S,rt=E;if((n=e.middlewareData.shift)!=null&&n.enabled.x&&(rt=v),(o=e.middlewareData.shift)!=null&&o.enabled.y&&(W=b),st&&!m){const K=A(d.left,0),Ct=A(d.right,0),kt=A(d.top,0),At=A(d.bottom,0);f?rt=g-2*(K!==0||Ct!==0?K+Ct:A(d.left,d.right)):W=_-2*(kt!==0||At!==0?kt+At:A(d.top,d.bottom))}await c({...e,availableWidth:rt,availableHeight:W});const at=await r.getDimensions(a.floating);return g!==at.width||_!==at.height?{reset:{rects:!0}}:{}}}};function Qt(){return typeof window<"u"}function pt(t){return To(t)?(t.nodeName||"").toLowerCase():"#document"}function L(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function V(t){var e;return(e=(To(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function To(t){return Qt()?t instanceof Node||t instanceof L(t).Node:!1}function D(t){return Qt()?t instanceof Element||t instanceof L(t).Element:!1}function q(t){return Qt()?t instanceof HTMLElement||t instanceof L(t).HTMLElement:!1}function $o(t){return!Qt()||typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof L(t).ShadowRoot}const Cs=new Set(["inline","contents"]);function _t(t){const{overflow:e,overflowX:n,overflowY:o,display:i}=P(t);return/auto|scroll|overlay|hidden|clip/.test(e+o+n)&&!Cs.has(i)}const ks=new Set(["table","td","th"]);function As(t){return ks.has(pt(t))}const Ls=[":popover-open",":modal"];function Jt(t){return Ls.some(e=>{try{return t.matches(e)}catch{return!1}})}const Is=["transform","translate","scale","rotate","perspective"],Os=["transform","translate","scale","rotate","perspective","filter"],Ms=["paint","layout","strict","content"];function Se(t){const e=Te(),n=D(t)?P(t):t;return Is.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)||Os.some(o=>(n.willChange||"").includes(o))||Ms.some(o=>(n.contain||"").includes(o))}function Rs(t){let e=X(t);for(;q(e)&&!mt(e);){if(Se(e))return e;if(Jt(e))return null;e=X(e)}return null}function Te(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const Ds=new Set(["html","body","#document"]);function mt(t){return Ds.has(pt(t))}function P(t){return L(t).getComputedStyle(t)}function Zt(t){return D(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function X(t){if(pt(t)==="html")return t;const e=t.assignedSlot||t.parentNode||$o(t)&&t.host||V(t);return $o(e)?e.host:e}function Co(t){const e=X(t);return mt(e)?t.ownerDocument?t.ownerDocument.body:t.body:q(e)&&_t(e)?e:Co(e)}function wt(t,e,n){var o;e===void 0&&(e=[]),n===void 0&&(n=!0);const i=Co(t),s=i===((o=t.ownerDocument)==null?void 0:o.body),r=L(i);if(s){const a=$e(r);return e.concat(r,r.visualViewport||[],_t(i)?i:[],a&&n?wt(a):[])}return e.concat(i,wt(i,[],n))}function $e(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function ko(t){const e=P(t);let n=parseFloat(e.width)||0,o=parseFloat(e.height)||0;const i=q(t),s=i?t.offsetWidth:n,r=i?t.offsetHeight:o,a=jt(n)!==s||jt(o)!==r;return a&&(n=s,o=r),{width:n,height:o,$:a}}function Ce(t){return D(t)?t:t.contextElement}function ht(t){const e=Ce(t);if(!q(e))return U(1);const n=e.getBoundingClientRect(),{width:o,height:i,$:s}=ko(e);let r=(s?jt(n.width):n.width)/o,a=(s?jt(n.height):n.height)/i;return(!r||!Number.isFinite(r))&&(r=1),(!a||!Number.isFinite(a))&&(a=1),{x:r,y:a}}const Ps=U(0);function Ao(t){const e=L(t);return!Te()||!e.visualViewport?Ps:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function Ns(t,e,n){return e===void 0&&(e=!1),!n||e&&n!==L(t)?!1:e}function et(t,e,n,o){e===void 0&&(e=!1),n===void 0&&(n=!1);const i=t.getBoundingClientRect(),s=Ce(t);let r=U(1);e&&(o?D(o)&&(r=ht(o)):r=ht(t));const a=Ns(s,n,o)?Ao(s):U(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 m=L(s),f=o&&D(o)?L(o):o;let g=m,_=$e(g);for(;_&&o&&f!==g;){const w=ht(_),h=_.getBoundingClientRect(),b=P(_),v=h.left+(_.clientLeft+parseFloat(b.paddingLeft))*w.x,S=h.top+(_.clientTop+parseFloat(b.paddingTop))*w.y;c*=w.x,l*=w.y,d*=w.x,u*=w.y,c+=v,l+=S,g=L(_),_=$e(g)}}return Gt({width:d,height:u,x:c,y:l})}function ke(t,e){const n=Zt(t).scrollLeft;return e?e.left+n:et(V(t)).left+n}function Lo(t,e,n){n===void 0&&(n=!1);const o=t.getBoundingClientRect(),i=o.left+e.scrollLeft-(n?0:ke(t,o)),s=o.top+e.scrollTop;return{x:i,y:s}}function Hs(t){let{elements:e,rect:n,offsetParent:o,strategy:i}=t;const s=i==="fixed",r=V(o),a=e?Jt(e.floating):!1;if(o===r||a&&s)return n;let c={scrollLeft:0,scrollTop:0},l=U(1);const d=U(0),u=q(o);if((u||!u&&!s)&&((pt(o)!=="body"||_t(r))&&(c=Zt(o)),q(o))){const f=et(o);l=ht(o),d.x=f.x+o.clientLeft,d.y=f.y+o.clientTop}const m=r&&!u&&!s?Lo(r,c,!0):U(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+d.x+m.x,y:n.y*l.y-c.scrollTop*l.y+d.y+m.y}}function Bs(t){return Array.from(t.getClientRects())}function Fs(t){const e=V(t),n=Zt(t),o=t.ownerDocument.body,i=A(e.scrollWidth,e.clientWidth,o.scrollWidth,o.clientWidth),s=A(e.scrollHeight,e.clientHeight,o.scrollHeight,o.clientHeight);let r=-n.scrollLeft+ke(t);const a=-n.scrollTop;return P(o).direction==="rtl"&&(r+=A(e.clientWidth,o.clientWidth)-i),{width:i,height:s,x:r,y:a}}function Us(t,e){const n=L(t),o=V(t),i=n.visualViewport;let s=o.clientWidth,r=o.clientHeight,a=0,c=0;if(i){s=i.width,r=i.height;const l=Te();(!l||l&&e==="fixed")&&(a=i.offsetLeft,c=i.offsetTop)}return{width:s,height:r,x:a,y:c}}const Vs=new Set(["absolute","fixed"]);function qs(t,e){const n=et(t,!0,e==="fixed"),o=n.top+t.clientTop,i=n.left+t.clientLeft,s=q(t)?ht(t):U(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 Io(t,e,n){let o;if(e==="viewport")o=Us(t,n);else if(e==="document")o=Fs(V(t));else if(D(e))o=qs(e,n);else{const i=Ao(t);o={x:e.x-i.x,y:e.y-i.y,width:e.width,height:e.height}}return Gt(o)}function Oo(t,e){const n=X(t);return n===e||!D(n)||mt(n)?!1:P(n).position==="fixed"||Oo(n,e)}function Ws(t,e){const n=e.get(t);if(n)return n;let o=wt(t,[],!1).filter(a=>D(a)&&pt(a)!=="body"),i=null;const s=P(t).position==="fixed";let r=s?X(t):t;for(;D(r)&&!mt(r);){const a=P(r),c=Se(r);!c&&a.position==="fixed"&&(i=null),(s?!c&&!i:!c&&a.position==="static"&&!!i&&Vs.has(i.position)||_t(r)&&!c&&Oo(t,r))?o=o.filter(d=>d!==r):i=a,r=X(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)?[]:Ws(e,this._c):[].concat(n),o],a=r[0],c=r.reduce((l,d)=>{const u=Io(e,d,i);return l.top=A(u.top,l.top),l.right=ft(u.right,l.right),l.bottom=ft(u.bottom,l.bottom),l.left=A(u.left,l.left),l},Io(e,a,i));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function Ks(t){const{width:e,height:n}=ko(t);return{width:e,height:n}}function Ys(t,e,n){const o=q(e),i=V(e),s=n==="fixed",r=et(t,!0,s,e);let a={scrollLeft:0,scrollTop:0};const c=U(0);function l(){c.x=ke(i)}if(o||!o&&!s)if((pt(e)!=="body"||_t(i))&&(a=Zt(e)),o){const f=et(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?Lo(i,a):U(0),u=r.left+a.scrollLeft-c.x-d.x,m=r.top+a.scrollTop-c.y-d.y;return{x:u,y:m,width:r.width,height:r.height}}function Ae(t){return P(t).position==="static"}function Mo(t,e){if(!q(t)||P(t).position==="fixed")return null;if(e)return e(t);let n=t.offsetParent;return V(t)===n&&(n=n.ownerDocument.body),n}function Ro(t,e){const n=L(t);if(Jt(t))return n;if(!q(t)){let i=X(t);for(;i&&!mt(i);){if(D(i)&&!Ae(i))return i;i=X(i)}return n}let o=Mo(t,e);for(;o&&As(o)&&Ae(o);)o=Mo(o,e);return o&&mt(o)&&Ae(o)&&!Se(o)?n:o||Rs(t)||n}const zs=async function(t){const e=this.getOffsetParent||Ro,n=this.getDimensions,o=await n(t.floating);return{reference:Ys(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function Xs(t){return P(t).direction==="rtl"}const Gs={convertOffsetParentRelativeRectToViewportRelativeRect:Hs,getDocumentElement:V,getClippingRect:js,getOffsetParent:Ro,getElementRects:zs,getClientRects:Bs,getDimensions:Ks,getScale:ht,isElement:D,isRTL:Xs};function Do(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}function Qs(t,e){let n=null,o;const i=V(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:m,height:f}=l;if(a||e(),!m||!f)return;const g=Kt(u),_=Kt(i.clientWidth-(d+m)),w=Kt(i.clientHeight-(u+f)),h=Kt(d),v={rootMargin:-g+"px "+-_+"px "+-w+"px "+-h+"px",threshold:A(0,ft(1,c))||1};let S=!0;function E(st){const W=st[0].intersectionRatio;if(W!==c){if(!S)return r();W?r(!1,W):o=setTimeout(()=>{r(!1,1e-7)},1e3)}W===1&&!Do(l,t.getBoundingClientRect())&&r(),S=!1}try{n=new IntersectionObserver(E,{...v,root:i.ownerDocument})}catch{n=new IntersectionObserver(E,v)}n.observe(t)}return r(!0),s}function Js(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=Ce(t),d=i||s?[...l?wt(l):[],...wt(e)]:[];d.forEach(h=>{i&&h.addEventListener("scroll",n,{passive:!0}),s&&h.addEventListener("resize",n)});const u=l&&a?Qs(l,n):null;let m=-1,f=null;r&&(f=new ResizeObserver(h=>{let[b]=h;b&&b.target===l&&f&&(f.unobserve(e),cancelAnimationFrame(m),m=requestAnimationFrame(()=>{var v;(v=f)==null||v.observe(e)})),n()}),l&&!c&&f.observe(l),f.observe(e));let g,_=c?et(t):null;c&&w();function w(){const h=et(t);_&&!Do(_,h)&&n(),_=h,g=requestAnimationFrame(w)}return n(),()=>{var h;d.forEach(b=>{i&&b.removeEventListener("scroll",n),s&&b.removeEventListener("resize",n)}),u?.(),(h=f)==null||h.disconnect(),f=null,c&&cancelAnimationFrame(g)}}const Le=Ts,Ie=Ss,Po=$s,Zs=(t,e,n)=>{const o=new Map,i={platform:Gs,...n},s={...i.platform,_c:o};return Es(t,e,{...i,platform:s})},M={capture:!0,passive:!0},te=typeof window<"u"&&typeof document<"u";function tr(t,e){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>t(...o),e)}}function p(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 er=0;const nr=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function ee(t){return t.id||(t.id=`${nr}${++er}`),t.id}const No=(t,e,[...n])=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},$=(t,...e)=>{yt&&(t===window||t===document)&&yt.push(()=>or(t,...e)),No("add",t,e)},or=(t,...e)=>No("remove",t,e);let yt=null;const R=t=>{if(!te)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()}),yt=[],t(),window._mtdsUnbindEvents?.set(n,yt?.slice(0)),yt=null});document.readyState==="complete"?e():$(window,"load",e)},Oe=new WeakMap;function nt(t,e,n){Oe.get(t)?.(),Oe.delete(t),e&&Oe.set(t,Js(e,t,()=>{if(!t.isConnected||!e.isConnected||t.hidden)return nt(t,!1);Zs(e,t,n).then(({x:o,y:i})=>{t.style.left=`${o}px`,t.style.top=`${i}px`})}))}function Ho(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),Ho((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),ir=`.${T.breadcrumbs.split(" ")[0]}`,sr=`.${T.chip.split(" ")[0]}`,rr=`.${T.helptext.split(" ")[0]}`,ar=`.${T.pagination.split(" ")[0]}`,lr='summary,u-summary,a,button,[role="tab"],[role="button"]',cr="click,toggle,submit,change",De="mattilsynet.matomo.cloud",N="mtds-analytics-banner",ur="https://www.mattilsynet.no/om-mattilsynet/personvernerklaering/informasjonskapsler";function Bo(t,e={}){if(te){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"&&dr();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 dr(){if(document.getElementById(N)||window.localStorage.getItem(N))return;document.body.insertAdjacentHTML("afterbegin",`<dialog id="${N}" data-analytics="ignore"><style>
|
|
8
|
+
::slotted(data:focus) { ${Fi} }`))}static get observedAttributes(){return Object.keys(Dt).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=Wi(this),It(this,ln,this,!0),ce(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(){ce(this,!1),Vi(this,ln,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;he(this)||(t.type==="beforeinput"&&(this._value=e?.value||""),t.type==="blur"&&Ji(this),t.type==="click"&&ts(this,t),t.type==="focus"&&Qi(this,t),t.type==="input"&&es(this,t),t.type==="keydown"&&ns(this,t),t.type==="mousedown"&&fe(t),t.type==="mutation"&&Pt(this,t))}get multiple(){var t;return((t=y(this,"data-multiple"))!=null?t:Rt)!==Rt}set multiple(t){y(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=y(this,"data-creatable"))!=null?t:Rt)!==Rt}set creatable(t){y(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)}},Y=t=>{var e;return((e=t?.textContent)==null?void 0:e.trim())||""},me=t=>t instanceof HTMLDataElement,he=({control:t})=>t?.disabled||t?.readOnly||!1,Pt=(t,e)=>{var n,o;const{_focus:i,_texts:s,items:r,control:a,list:c,multiple:l}=t;let d=`${Y((n=a?.labels)==null?void 0:n[0])}${l?`, ${r.length?s.found.replace("%d",`${r.length}`):s.empty}`:""}`;const u=[];for(const{addedNodes:h,removedNodes:b}of e?.detail||[]){for(const v of h)me(v)&&u.unshift(v);for(const v of b)me(v)&&u.push(v)}const m=l?u.length===1:u[0]===i;if(i&&a&&m){const h=y(a,"aria-expanded"),b=y(a,"inputmode"),v=me(i)?a:i,S=!u[0].isConnected;t._speak=`${s[S?"removed":"added"]} ${Y(u[0])}, `,(Gi||i===a)&&ue(t._speak),a!==v&&(y(a,"aria-expanded",null),y(a,"inputmode","none"),d=" ",a.focus()),setTimeout(()=>{var E;y(a,"aria-expanded",h),y(a,"inputmode",S?"none":b),(E=v?.focus)==null||E.call(v),y(a,"inputmode",b),t._speak="",Xi?It(t,"blur",()=>Pt(t),cn):setTimeout(Pt,100,t)},100)}let f=0;const g=t.querySelector("select"),_=he(t)?"":`${s.remove}, `;for(const h of r){const b=g?.options[f],v=Y(h),S=h.value||v,E=`${t._speak}${v}, ${_}${++f} ${s.of} ${r.length}`;y(h,"role","button"),y(h,"value",S),y(h,"tabindex","-1"),y(h,"aria-label",E),b?Object.assign(b,{textContent:v,value:S}):g?.appendChild(new Option(v,S,!0,!0))}g&&y(g,"multiple",l?"":null);for(const h of[...g?.options||[]].slice(f))h.remove();!l&&f>1&&console.warn("u-combobox: Multiple <data> found in single mode."),c&&y(c,"aria-multiselectable",`${l}`),a&&y(a,"list",Ki(c)),a&&y(a,"aria-label",`${t._speak}${d}`);const w=Y(r[0]);w!==t._item&&Nt(t),t._item=w,un(t),dn(t),(o=ce(t))==null||o.takeRecords()},un=t=>{var e;t.clear&&y(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value)||he(t))},dn=t=>{var e;const{_speak:n,options:o=[],values:i}=t;for(const s of o){const r=(e=y(s,"value"))!=null?e:Y(s);y(s,"aria-label",n?`${n}${Y(s)}`:null),y(s,"selected",i.includes(r)?"":null)}},Nt=t=>{const{multiple:e,control:n,items:o}=t,i=Y(o[0]);!e&&n&&i!==n.value&&an(n,i,i?"insertText":"deleteContent")},ge=(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=>(y(f,"label")||Y(f)).trim().toLowerCase()===d);const m={bubbles:!0,cancelable:!0,detail:u};if(t.dispatchEvent(new CustomEvent("comboboxbeforematch",m))||(u=[...i].find(f=>f.selected)),e)return dn(t),u?ut(t,u,!1):s&&l?ut(t,{value:l},!1):(!c&&!l&&a[0]?ut(t,a[0]):Nt(t),ue(o.invalid));for(const f of i)f.selected=f===u},ut=(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))}},Qi=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),ue()},Ji=t=>fe()||setTimeout(Zi,0,t),Zi=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t.multiple||ge(t),t._focus=void 0)},ts=(t,e)=>{const{clientX:n,clientY:o,target:i}=e,{clear:s,control:r,items:a}=t;if(s?.contains(i))return r&&an(r,"","deleteContentBackward"),r?.focus();for(const c of a){const{top:l,right:d,bottom:u,left:m}=c.getBoundingClientRect();if(c.contains(i))return ut(t,c);if(o>=l&&o<=u&&n>=m&&n<=d)return c.focus()}i===t&&r?.focus()},es=(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 ut(t,c,s)}else s||ge(t,!1);un(t)},ns=(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",()=>y(o,"tabindex",null),cn)),!(!l&&qi(e)||u===-1)){if(r==="ArrowRight"&&!l)u+=1;else if(r==="ArrowLeft"&&!d)u-=1;else if(r==="Enter"&&l){const m=y(i,"form");return y(i,"form","#"),requestAnimationFrame(()=>y(i,"form",m)),ge(t)}else if((r==="Backspace"||r==="Delete")&&!d){if(e.preventDefault(),!a&&s[u])return ut(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",pe);var ve=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",os=ve&&/android/i.test(navigator.userAgent),fn;ve&&/^Mac/i.test(((fn=navigator.userAgentData)==null?void 0:fn.platform)||navigator.platform);var is=`${os?"data":"aria"}-labelledby`,be=":host(:not([hidden])) { display: block }",Ht=typeof HTMLElement>"u"?class{}:HTMLElement;function O(t,e,n){var o;return n===void 0?(o=t.getAttribute(e))!=null?o:null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var pn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},ss=(t,...e)=>pn("add",t,e),rs=(t,...e)=>pn("remove",t,e),Bt=(t,e)=>t.attachShadow({mode:"open"}).append(vn("slot"),vn("style",e)),Ft=new WeakMap,mn=(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)}},as=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},hn=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},ls=0,gn=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++ls).toString(32)}`),t.id):"",vn=(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)},Vt="aria-controls",dt="aria-selected",bn=class extends Ht{constructor(){super(),Bt(this,be)}get tabList(){return qt("u-tablist",this)[0]||null}get selectedIndex(){return Wt(this.tabs)}set selectedIndex(t){ye(this.tabs[t])}get tabs(){return qt("u-tab",this)}get panels(){return qt("u-tabpanel",this)}},_n=class extends Ht{constructor(){super(),Bt(this,be)}connectedCallback(){O(this,"role","tablist"),ss(this,"click,keydown",this),mn(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){rs(this,"click,keydown",this),mn(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s?.setAttribute(dt,"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"&&ye(n[o]),t.type==="keydown"&&!as(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){ye(this.tabs[t])}},_e=!1,wn=class extends Ht{static get observedAttributes(){return["id",dt,Vt]}constructor(){super(),Bt(this,":host(:not([hidden])) { cursor: pointer; display: inline-block }")}connectedCallback(){O(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!_e&&this.selected&&this.tabList){_e=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=qt("u-tabpanel",this.tabsElement||this),n=we(this,e[t.indexOf(this)]);n&&O(n,is,gn(this)),t.forEach((o,i)=>{const s=we(o,e[i]);o.tabIndex=o===this?0:-1,O(o,dt,`${o===this}`),s&&(s.hidden=s!==n),s&&O(o,Vt,s.id)}),_e=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return t?.nodeName==="U-TABLIST"?t:null}get selected(){return O(this,dt)==="true"}set selected(t){O(this,dt,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return we(this)}},yn=class extends Ht{static get observedAttributes(){return["hidden"]}constructor(){super(),Bt(this,be)}connectedCallback(){O(this,"role","tabpanel"),this.hidden=Wt(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){this.hidden||cs(this.firstChild)?O(this,"tabindex",null):this.tabIndex=0}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${Vt}="${this.id}"]`;return hn(this).querySelectorAll(t)}},qt=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),we=(t,e)=>{const n=O(t,Vt)||gn(e),o=hn(t).getElementById(n);return o?.nodeName==="U-TABPANEL"?o:null},Wt=t=>[...t].findIndex(e=>O(e,dt)==="true"),ye=t=>t&&O(t,"aria-selected","true"),cs=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",bn),Ut.define("u-tablist",_n),Ut.define("u-tab",wn),Ut.define("u-tabpanel",yn);const us="2.1.6",xn="_alert_1run0_1 _ds-alert_wy3tx_1",En="_app_1run0_1",Sn="_sticky_1run0_1",Tn="_avatar_1run0_1 _ds-avatar_wy3tx_1",$n="_badge_1run0_1",Cn="_breadcrumbs_1run0_1 _ds-breadcrumbs_wy3tx_1",kn="_button_1run0_1 _ds-button_wy3tx_1",An="_card_1run0_1",Ln="_group_1run0_1",In="_chip_1run0_1 _ds-chip_wy3tx_1",On="_details_1run0_1 _ds-details_wy3tx_1",Mn="_dialog_1run0_1 _ds-dialog_wy3tx_1",Rn="__drawer_1run0_1",Dn="_divider_1run0_1",Pn="_errorsummary_1run0_1 _ds-error-summary_wy3tx_1",Nn="__errorsummary_1run0_1",Hn="_field_1run0_1 _ds-field_wy3tx_1",Bn="__datalist_1run0_1",Fn="_affixes_1run0_1 _ds-field-affixes_wy3tx_1",Un="_fieldset_1run0_1 _ds-fieldset_wy3tx_1",Vn="_heading_1run0_1 _ds-heading_wy3tx_1",qn="_ingress_1run0_1",Wn="_muted_1run0_1",jn="_info_1run0_1",Kn="_prose_1run0_1",Yn="_helptext_1run0_1 _ds-focus_wy3tx_1",zn="_input_1run0_1 _ds-input_wy3tx_1",Xn="_grid_1run0_1",Gn="_flex_1run0_1",Qn="_link_1run0_1",Jn="_logo_1run0_1",Zn="_pagination_1run0_1 _ds-pagination_wy3tx_1",to="_popover_1run0_1",eo="_progress_1run0_1",no="__indeterminate_1run0_1",oo="_skeleton_1run0_1 _ds-skeleton_wy3tx_1",io="__skeleton_1run0_1",so="_spinner_1run0_1",ro="_steps_1run0_1",ao="_table_1run0_1 _ds-table_wy3tx_1",lo="__scrollShadow_1run0_1",co="_tabs_1run0_1 _ds-tabs_wy3tx_1",uo="__scrollMask_1run0_1",fo="_tag_1run0_1 _ds-tag_wy3tx_1",po="_togglegroup_1run0_1",mo="__tooltip_1run0_1",ho="_validation_1run0_1 _ds-validation-message_wy3tx_1",go="_body_1run0_153",vo="__checked_1run0_1",T={alert:xn,app:En,sticky:Sn,avatar:Tn,badge:$n,breadcrumbs:Cn,button:kn,card:An,group:Ln,chip:In,details:On,dialog:Mn,_drawer:Rn,divider:Dn,errorsummary:Pn,_errorsummary:Nn,field:Hn,_datalist:Bn,affixes:Fn,fieldset:Un,heading:Vn,ingress:qn,muted:Wn,info:jn,prose:Kn,helptext:Yn,input:zn,grid:Xn,flex:Gn,link:Qn,logo:Jn,pagination:Zn,popover:to,progress:eo,_indeterminate:no,skeleton:oo,_skeleton:io,spinner:so,steps:ro,table:ao,_scrollShadow:lo,tabs:co,_scrollMask:uo,tag:fo,togglegroup:po,_tooltip:mo,validation:ho,body:go,_checked:vo},ds=Object.freeze(Object.defineProperty({__proto__:null,_checked:vo,_datalist:Bn,_drawer:Rn,_errorsummary:Nn,_indeterminate:no,_scrollMask:uo,_scrollShadow:lo,_skeleton:io,_tooltip:mo,affixes:Fn,alert:xn,app:En,avatar:Tn,badge:$n,body:go,breadcrumbs:Cn,button:kn,card:An,chip:In,default:T,details:On,dialog:Mn,divider:Dn,errorsummary:Pn,field:Hn,fieldset:Un,flex:Gn,grid:Xn,group:Ln,heading:Vn,helptext:Yn,info:jn,ingress:qn,input:zn,link:Qn,logo:Jn,muted:Wn,pagination:Zn,popover:to,progress:eo,prose:Kn,skeleton:oo,spinner:so,steps:ro,sticky:Sn,table:ao,tabs:co,tag:fo,togglegroup:po,validation:ho},Symbol.toStringTag,{value:"Module"})),ft=Math.min,A=Math.max,jt=Math.round,Kt=Math.floor,U=t=>({x:t,y:t}),fs={left:"right",right:"left",bottom:"top",top:"bottom"},ps={start:"end",end:"start"};function bo(t,e,n){return A(t,ft(e,n))}function Yt(t,e){return typeof t=="function"?t(e):t}function tt(t){return t.split("-")[0]}function zt(t){return t.split("-")[1]}function _o(t){return t==="x"?"y":"x"}function wo(t){return t==="y"?"height":"width"}const ms=new Set(["top","bottom"]);function z(t){return ms.has(tt(t))?"y":"x"}function yo(t){return _o(z(t))}function hs(t,e,n){n===void 0&&(n=!1);const o=zt(t),i=yo(t),s=wo(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 gs(t){const e=Xt(t);return[xe(t),e,xe(e)]}function xe(t){return t.replace(/start|end/g,e=>ps[e])}const xo=["left","right"],Eo=["right","left"],vs=["top","bottom"],bs=["bottom","top"];function _s(t,e,n){switch(t){case"top":case"bottom":return n?e?Eo:xo:e?xo:Eo;case"left":case"right":return e?vs:bs;default:return[]}}function ws(t,e,n,o){const i=zt(t);let s=_s(tt(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=>fs[e])}function ys(t){return{top:0,right:0,bottom:0,left:0,...t}}function xs(t){return typeof t!="number"?ys(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 So(t,e,n){let{reference:o,floating:i}=t;const s=z(e),r=yo(e),a=wo(r),c=tt(e),l=s==="y",d=o.x+o.width/2-i.width/2,u=o.y+o.height/2-i.height/2,m=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(zt(e)){case"start":f[r]-=m*(n&&l?-1:1);break;case"end":f[r]+=m*(n&&l?-1:1);break}return f}const Es=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}=So(l,o,c),m=o,f={},g=0;for(let _=0;_<a.length;_++){const{name:w,fn:h}=a[_],{x:b,y:v,data:S,reset:E}=await h({x:d,y:u,initialPlacement:o,placement:m,strategy:i,middlewareData:f,rects:l,platform:r,elements:{reference:t,floating:e}});d=b??d,u=v??u,f={...f,[w]:{...f[w],...S}},E&&g<=50&&(g++,typeof E=="object"&&(E.placement&&(m=E.placement),E.rects&&(l=E.rects===!0?await r.getElementRects({reference:t,floating:e,strategy:i}):E.rects),{x:d,y:u}=So(l,m,c)),_=-1)}return{x:d,y:u,placement:m,strategy:i,middlewareData:f}};async function Ee(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:m=!1,padding:f=0}=Yt(e,t),g=xs(f),w=a[m?u==="floating"?"reference":"floating":u],h=Gt(await s.getClippingRect({element:(n=await(s.isElement==null?void 0:s.isElement(w)))==null||n?w:w.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(a.floating)),boundary:l,rootBoundary:d,strategy:c})),b=u==="floating"?{x:o,y:i,width:r.floating.width,height:r.floating.height}:r.reference,v=await(s.getOffsetParent==null?void 0:s.getOffsetParent(a.floating)),S=await(s.isElement==null?void 0:s.isElement(v))?await(s.getScale==null?void 0:s.getScale(v))||{x:1,y:1}:{x:1,y:1},E=Gt(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:a,rect:b,offsetParent:v,strategy:c}):b);return{top:(h.top-E.top+g.top)/S.y,bottom:(E.bottom-h.bottom+g.bottom)/S.y,left:(h.left-E.left+g.left)/S.x,right:(E.right-h.right+g.right)/S.x}}const Ss=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:m,fallbackStrategy:f="bestFit",fallbackAxisSideDirection:g="none",flipAlignment:_=!0,...w}=Yt(t,e);if((n=s.arrow)!=null&&n.alignmentOffset)return{};const h=tt(i),b=z(a),v=tt(a)===a,S=await(c.isRTL==null?void 0:c.isRTL(l.floating)),E=m||(v||!_?[Xt(a)]:gs(a)),st=g!=="none";!m&&st&&E.push(...ws(a,_,g,S));const W=[a,...E],rt=await Ee(e,w),at=[];let K=((o=s.flip)==null?void 0:o.overflows)||[];if(d&&at.push(rt[h]),u){const lt=hs(i,r,S);at.push(rt[lt[0]],rt[lt[1]])}if(K=[...K,{placement:i,overflows:at}],!at.every(lt=>lt<=0)){var Ct,kt;const lt=(((Ct=s.flip)==null?void 0:Ct.index)||0)+1,tn=W[lt];if(tn&&(!(u==="alignment"?b!==z(tn):!1)||K.every(F=>z(F.placement)===b?F.overflows[0]>0:!0)))return{data:{index:lt,overflows:K},reset:{placement:tn}};let Lt=(kt=K.filter(ct=>ct.overflows[0]<=0).sort((ct,F)=>ct.overflows[1]-F.overflows[1])[0])==null?void 0:kt.placement;if(!Lt)switch(f){case"bestFit":{var At;const ct=(At=K.filter(F=>{if(st){const J=z(F.placement);return J===b||J==="y"}return!0}).map(F=>[F.placement,F.overflows.filter(J=>J>0).reduce((J,Sa)=>J+Sa,0)]).sort((F,J)=>F[1]-J[1])[0])==null?void 0:At[0];ct&&(Lt=ct);break}case"initialPlacement":Lt=a;break}if(i!==Lt)return{reset:{placement:Lt}}}return{}}}},Ts=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:w=>{let{x:h,y:b}=w;return{x:h,y:b}}},...c}=Yt(t,e),l={x:n,y:o},d=await Ee(e,c),u=z(tt(i)),m=_o(u);let f=l[m],g=l[u];if(s){const w=m==="y"?"top":"left",h=m==="y"?"bottom":"right",b=f+d[w],v=f-d[h];f=bo(b,f,v)}if(r){const w=u==="y"?"top":"left",h=u==="y"?"bottom":"right",b=g+d[w],v=g-d[h];g=bo(b,g,v)}const _=a.fn({...e,[m]:f,[u]:g});return{..._,data:{x:_.x-n,y:_.y-o,enabled:{[m]:s,[u]:r}}}}}},$s=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}=Yt(t,e),d=await Ee(e,l),u=tt(i),m=zt(i),f=z(i)==="y",{width:g,height:_}=s.floating;let w,h;u==="top"||u==="bottom"?(w=u,h=m===(await(r.isRTL==null?void 0:r.isRTL(a.floating))?"start":"end")?"left":"right"):(h=u,w=m==="end"?"top":"bottom");const b=_-d.top-d.bottom,v=g-d.left-d.right,S=ft(_-d[w],b),E=ft(g-d[h],v),st=!e.middlewareData.shift;let W=S,rt=E;if((n=e.middlewareData.shift)!=null&&n.enabled.x&&(rt=v),(o=e.middlewareData.shift)!=null&&o.enabled.y&&(W=b),st&&!m){const K=A(d.left,0),Ct=A(d.right,0),kt=A(d.top,0),At=A(d.bottom,0);f?rt=g-2*(K!==0||Ct!==0?K+Ct:A(d.left,d.right)):W=_-2*(kt!==0||At!==0?kt+At:A(d.top,d.bottom))}await c({...e,availableWidth:rt,availableHeight:W});const at=await r.getDimensions(a.floating);return g!==at.width||_!==at.height?{reset:{rects:!0}}:{}}}};function Qt(){return typeof window<"u"}function pt(t){return To(t)?(t.nodeName||"").toLowerCase():"#document"}function L(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function V(t){var e;return(e=(To(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function To(t){return Qt()?t instanceof Node||t instanceof L(t).Node:!1}function D(t){return Qt()?t instanceof Element||t instanceof L(t).Element:!1}function q(t){return Qt()?t instanceof HTMLElement||t instanceof L(t).HTMLElement:!1}function $o(t){return!Qt()||typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof L(t).ShadowRoot}const Cs=new Set(["inline","contents"]);function _t(t){const{overflow:e,overflowX:n,overflowY:o,display:i}=P(t);return/auto|scroll|overlay|hidden|clip/.test(e+o+n)&&!Cs.has(i)}const ks=new Set(["table","td","th"]);function As(t){return ks.has(pt(t))}const Ls=[":popover-open",":modal"];function Jt(t){return Ls.some(e=>{try{return t.matches(e)}catch{return!1}})}const Is=["transform","translate","scale","rotate","perspective"],Os=["transform","translate","scale","rotate","perspective","filter"],Ms=["paint","layout","strict","content"];function Se(t){const e=Te(),n=D(t)?P(t):t;return Is.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)||Os.some(o=>(n.willChange||"").includes(o))||Ms.some(o=>(n.contain||"").includes(o))}function Rs(t){let e=X(t);for(;q(e)&&!mt(e);){if(Se(e))return e;if(Jt(e))return null;e=X(e)}return null}function Te(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const Ds=new Set(["html","body","#document"]);function mt(t){return Ds.has(pt(t))}function P(t){return L(t).getComputedStyle(t)}function Zt(t){return D(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function X(t){if(pt(t)==="html")return t;const e=t.assignedSlot||t.parentNode||$o(t)&&t.host||V(t);return $o(e)?e.host:e}function Co(t){const e=X(t);return mt(e)?t.ownerDocument?t.ownerDocument.body:t.body:q(e)&&_t(e)?e:Co(e)}function wt(t,e,n){var o;e===void 0&&(e=[]),n===void 0&&(n=!0);const i=Co(t),s=i===((o=t.ownerDocument)==null?void 0:o.body),r=L(i);if(s){const a=$e(r);return e.concat(r,r.visualViewport||[],_t(i)?i:[],a&&n?wt(a):[])}return e.concat(i,wt(i,[],n))}function $e(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function ko(t){const e=P(t);let n=parseFloat(e.width)||0,o=parseFloat(e.height)||0;const i=q(t),s=i?t.offsetWidth:n,r=i?t.offsetHeight:o,a=jt(n)!==s||jt(o)!==r;return a&&(n=s,o=r),{width:n,height:o,$:a}}function Ce(t){return D(t)?t:t.contextElement}function ht(t){const e=Ce(t);if(!q(e))return U(1);const n=e.getBoundingClientRect(),{width:o,height:i,$:s}=ko(e);let r=(s?jt(n.width):n.width)/o,a=(s?jt(n.height):n.height)/i;return(!r||!Number.isFinite(r))&&(r=1),(!a||!Number.isFinite(a))&&(a=1),{x:r,y:a}}const Ps=U(0);function Ao(t){const e=L(t);return!Te()||!e.visualViewport?Ps:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function Ns(t,e,n){return e===void 0&&(e=!1),!n||e&&n!==L(t)?!1:e}function et(t,e,n,o){e===void 0&&(e=!1),n===void 0&&(n=!1);const i=t.getBoundingClientRect(),s=Ce(t);let r=U(1);e&&(o?D(o)&&(r=ht(o)):r=ht(t));const a=Ns(s,n,o)?Ao(s):U(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 m=L(s),f=o&&D(o)?L(o):o;let g=m,_=$e(g);for(;_&&o&&f!==g;){const w=ht(_),h=_.getBoundingClientRect(),b=P(_),v=h.left+(_.clientLeft+parseFloat(b.paddingLeft))*w.x,S=h.top+(_.clientTop+parseFloat(b.paddingTop))*w.y;c*=w.x,l*=w.y,d*=w.x,u*=w.y,c+=v,l+=S,g=L(_),_=$e(g)}}return Gt({width:d,height:u,x:c,y:l})}function ke(t,e){const n=Zt(t).scrollLeft;return e?e.left+n:et(V(t)).left+n}function Lo(t,e,n){n===void 0&&(n=!1);const o=t.getBoundingClientRect(),i=o.left+e.scrollLeft-(n?0:ke(t,o)),s=o.top+e.scrollTop;return{x:i,y:s}}function Hs(t){let{elements:e,rect:n,offsetParent:o,strategy:i}=t;const s=i==="fixed",r=V(o),a=e?Jt(e.floating):!1;if(o===r||a&&s)return n;let c={scrollLeft:0,scrollTop:0},l=U(1);const d=U(0),u=q(o);if((u||!u&&!s)&&((pt(o)!=="body"||_t(r))&&(c=Zt(o)),q(o))){const f=et(o);l=ht(o),d.x=f.x+o.clientLeft,d.y=f.y+o.clientTop}const m=r&&!u&&!s?Lo(r,c,!0):U(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+d.x+m.x,y:n.y*l.y-c.scrollTop*l.y+d.y+m.y}}function Bs(t){return Array.from(t.getClientRects())}function Fs(t){const e=V(t),n=Zt(t),o=t.ownerDocument.body,i=A(e.scrollWidth,e.clientWidth,o.scrollWidth,o.clientWidth),s=A(e.scrollHeight,e.clientHeight,o.scrollHeight,o.clientHeight);let r=-n.scrollLeft+ke(t);const a=-n.scrollTop;return P(o).direction==="rtl"&&(r+=A(e.clientWidth,o.clientWidth)-i),{width:i,height:s,x:r,y:a}}function Us(t,e){const n=L(t),o=V(t),i=n.visualViewport;let s=o.clientWidth,r=o.clientHeight,a=0,c=0;if(i){s=i.width,r=i.height;const l=Te();(!l||l&&e==="fixed")&&(a=i.offsetLeft,c=i.offsetTop)}return{width:s,height:r,x:a,y:c}}const Vs=new Set(["absolute","fixed"]);function qs(t,e){const n=et(t,!0,e==="fixed"),o=n.top+t.clientTop,i=n.left+t.clientLeft,s=q(t)?ht(t):U(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 Io(t,e,n){let o;if(e==="viewport")o=Us(t,n);else if(e==="document")o=Fs(V(t));else if(D(e))o=qs(e,n);else{const i=Ao(t);o={x:e.x-i.x,y:e.y-i.y,width:e.width,height:e.height}}return Gt(o)}function Oo(t,e){const n=X(t);return n===e||!D(n)||mt(n)?!1:P(n).position==="fixed"||Oo(n,e)}function Ws(t,e){const n=e.get(t);if(n)return n;let o=wt(t,[],!1).filter(a=>D(a)&&pt(a)!=="body"),i=null;const s=P(t).position==="fixed";let r=s?X(t):t;for(;D(r)&&!mt(r);){const a=P(r),c=Se(r);!c&&a.position==="fixed"&&(i=null),(s?!c&&!i:!c&&a.position==="static"&&!!i&&Vs.has(i.position)||_t(r)&&!c&&Oo(t,r))?o=o.filter(d=>d!==r):i=a,r=X(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)?[]:Ws(e,this._c):[].concat(n),o],a=r[0],c=r.reduce((l,d)=>{const u=Io(e,d,i);return l.top=A(u.top,l.top),l.right=ft(u.right,l.right),l.bottom=ft(u.bottom,l.bottom),l.left=A(u.left,l.left),l},Io(e,a,i));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function Ks(t){const{width:e,height:n}=ko(t);return{width:e,height:n}}function Ys(t,e,n){const o=q(e),i=V(e),s=n==="fixed",r=et(t,!0,s,e);let a={scrollLeft:0,scrollTop:0};const c=U(0);function l(){c.x=ke(i)}if(o||!o&&!s)if((pt(e)!=="body"||_t(i))&&(a=Zt(e)),o){const f=et(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?Lo(i,a):U(0),u=r.left+a.scrollLeft-c.x-d.x,m=r.top+a.scrollTop-c.y-d.y;return{x:u,y:m,width:r.width,height:r.height}}function Ae(t){return P(t).position==="static"}function Mo(t,e){if(!q(t)||P(t).position==="fixed")return null;if(e)return e(t);let n=t.offsetParent;return V(t)===n&&(n=n.ownerDocument.body),n}function Ro(t,e){const n=L(t);if(Jt(t))return n;if(!q(t)){let i=X(t);for(;i&&!mt(i);){if(D(i)&&!Ae(i))return i;i=X(i)}return n}let o=Mo(t,e);for(;o&&As(o)&&Ae(o);)o=Mo(o,e);return o&&mt(o)&&Ae(o)&&!Se(o)?n:o||Rs(t)||n}const zs=async function(t){const e=this.getOffsetParent||Ro,n=this.getDimensions,o=await n(t.floating);return{reference:Ys(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function Xs(t){return P(t).direction==="rtl"}const Gs={convertOffsetParentRelativeRectToViewportRelativeRect:Hs,getDocumentElement:V,getClippingRect:js,getOffsetParent:Ro,getElementRects:zs,getClientRects:Bs,getDimensions:Ks,getScale:ht,isElement:D,isRTL:Xs};function Do(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}function Qs(t,e){let n=null,o;const i=V(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:m,height:f}=l;if(a||e(),!m||!f)return;const g=Kt(u),_=Kt(i.clientWidth-(d+m)),w=Kt(i.clientHeight-(u+f)),h=Kt(d),v={rootMargin:-g+"px "+-_+"px "+-w+"px "+-h+"px",threshold:A(0,ft(1,c))||1};let S=!0;function E(st){const W=st[0].intersectionRatio;if(W!==c){if(!S)return r();W?r(!1,W):o=setTimeout(()=>{r(!1,1e-7)},1e3)}W===1&&!Do(l,t.getBoundingClientRect())&&r(),S=!1}try{n=new IntersectionObserver(E,{...v,root:i.ownerDocument})}catch{n=new IntersectionObserver(E,v)}n.observe(t)}return r(!0),s}function Js(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=Ce(t),d=i||s?[...l?wt(l):[],...wt(e)]:[];d.forEach(h=>{i&&h.addEventListener("scroll",n,{passive:!0}),s&&h.addEventListener("resize",n)});const u=l&&a?Qs(l,n):null;let m=-1,f=null;r&&(f=new ResizeObserver(h=>{let[b]=h;b&&b.target===l&&f&&(f.unobserve(e),cancelAnimationFrame(m),m=requestAnimationFrame(()=>{var v;(v=f)==null||v.observe(e)})),n()}),l&&!c&&f.observe(l),f.observe(e));let g,_=c?et(t):null;c&&w();function w(){const h=et(t);_&&!Do(_,h)&&n(),_=h,g=requestAnimationFrame(w)}return n(),()=>{var h;d.forEach(b=>{i&&b.removeEventListener("scroll",n),s&&b.removeEventListener("resize",n)}),u?.(),(h=f)==null||h.disconnect(),f=null,c&&cancelAnimationFrame(g)}}const Le=Ts,Ie=Ss,Po=$s,Zs=(t,e,n)=>{const o=new Map,i={platform:Gs,...n},s={...i.platform,_c:o};return Es(t,e,{...i,platform:s})},M={capture:!0,passive:!0},te=typeof window<"u"&&typeof document<"u";function tr(t,e){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>t(...o),e)}}function p(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 er=0;const nr=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function ee(t){return t.id||(t.id=`${nr}${++er}`),t.id}const No=(t,e,[...n])=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},$=(t,...e)=>{yt&&(t===window||t===document)&&yt.push(()=>or(t,...e)),No("add",t,e)},or=(t,...e)=>No("remove",t,e);let yt=null;const R=t=>{if(!te)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()}),yt=[],t(),window._mtdsUnbindEvents?.set(n,yt?.slice(0)),yt=null});document.readyState==="complete"?e():$(window,"load",e)},Oe=new WeakMap;function nt(t,e,n){Oe.get(t)?.(),Oe.delete(t),e&&Oe.set(t,Js(e,t,()=>{if(!t.isConnected||!e.isConnected||t.hidden)return nt(t,!1);Zs(e,t,n).then(({x:o,y:i})=>{t.style.left=`${o}px`,t.style.top=`${i}px`})}))}function Ho(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),Ho((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),ir=`.${T.breadcrumbs.split(" ")[0]}`,sr=`.${T.chip.split(" ")[0]}`,rr=`.${T.helptext.split(" ")[0]}`,ar=`.${T.pagination.split(" ")[0]}`,lr='summary,u-summary,a,button,[role="tab"],[role="button"]',cr="click,toggle,submit,change",De="mattilsynet.matomo.cloud",N="mtds-analytics-banner",ur="https://www.mattilsynet.no/om-mattilsynet/personvernerklaering/informasjonskapsler";function Bo(t,e={}){if(te){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"&&dr();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 dr(){if(document.getElementById(N)||window.localStorage.getItem(N))return;document.body.insertAdjacentHTML("afterbegin",`<dialog id="${N}" data-analytics="ignore"><style>
|
|
9
9
|
#${N}[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
|
#${N} 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
|
#${N} button:focus-visible { outline: 2px solid }
|
|
@@ -13,7 +13,7 @@ var mtds=function(I){"use strict";var Ri=Object.defineProperty,en=Object.getOwnP
|
|
|
13
13
|
#${N} button:active { background: #054449; scale: .9 }
|
|
14
14
|
#${N} p { margin: 0 .25em }
|
|
15
15
|
</style>
|
|
16
|
-
<p>Vi <a href="${ur}" target="_blank">
|
|
16
|
+
<p>Vi bruker <a href="${ur}" target="_blank">informasjonskapsler</a> for å forbedre brukeropplevelsen.</p>
|
|
17
17
|
<form method="dialog" data-analytics="ignore"><button type="submit" aria-label="OK">×</button></form>
|
|
18
18
|
</dialog>`);const e=document.getElementById(N),n=()=>window.localStorage.setItem(N,"seen");e.addEventListener("close",n,{once:!0}),e.show()}function fr(t){window._mtdsTracking?.enabled&&setTimeout(pr,0,t)}function pr({type:t,target:e}){const n=t==="click"?e?.closest?.(lr):e;if(!(n instanceof Element)||n.closest('[data-analytics="ignore"]'))return;let o="click",i="Button",s=Fo(n)||gr(n)||p(n,"data-tooltip")||"";if(t==="submit")i="Form",o="submit",s=s||document.title;else if(t==="toggle"){if(!n.matches("dialog:modal"))return;i="Dialog",o="open"}else if(t==="change"){const r=p(n,"type"),a=r==="checkbox"||r==="radio"?n.closest("fieldset"):null;i="Form",o="change",s=Fo(a||n)||xt(a?.querySelector("legend"))||xt(n?.labels?.[0])}else if(p(n,"role")==="tab")i="Tab",o="navigate";else if(p(n,"popovertarget")){if(!mr(n)?.matches(":popover-open"))return;i=n.closest(rr)?"HelpText":"Popover",o="open"}else if(n.nodeName.endsWith("SUMMARY")){if(!n.parentElement.open)return;i="Details",o="open"}else if(p(n,"data-command")==="toggle-app-expanded"){const r=hr(n,"--mtds-tooltip-position")==="none";i="Sidebar",o=r?"expand":"minimize",s=r&&p(n,"data-tooltip")||xt(n)}else if(n.closest(ir))i="Breadcrumbs",o="navigate";else if(n.closest(ar))i="Pagintation",o="navigate";else if(n.closest(sr))i="Chip",o=n.hasAttribute("data-removable")?"remove":"click";else if(n.closest("th[aria-sort]"))i="Table",o="sort";else if(n instanceof HTMLAnchorElement)i="Link",o=n.protocol==="mailto:"?"email":"navigate",n.hasAttribute("download")?o="download":n.hash&&n.href.startsWith(location.href.split("#")[0])&&(o="anchor");else if(n.hasAttribute("aria-expanded")){if(p(n,"aria-expanded")!=="true")return;i="Expand",o="open"}Bo("event",{category:p(n,"data-analytics-category")??i,action:p(n,"data-analytics-action")??o,name:p(n,"data-analytics-name")??s})}const xt=t=>t?.textContent?.trim()||"",Fo=t=>t&&p(t,"aria-label")||"",mr=t=>document.getElementById(p(t,"popovertarget")||""),hr=(t,e)=>window.getComputedStyle(t).getPropertyValue(e)?.trim(),gr=t=>{const e=xt(t),n=xt(t.querySelector("h1,h2,h3,h4,h5,h6"));return e.startsWith(n)&&n||e.slice(0,100).trim()};R(()=>$(document,cr,fr,M)),typeof window<"u"&&window.CSSStyleSheet&&document.adoptedStyleSheets&&(()=>{const t="--mtds-app-expanded",e=new CSSStyleSheet,n=()=>!window.localStorage.getItem(t)?.includes("false");document.adoptedStyleSheets.push(e),window.mtdsToggleAppExpanded=o=>{try{const i=o??!n();e.replaceSync?.(`:root { ${t}: var(${t}--${i})}`),window.localStorage.setItem(t,i)}catch{}},window.mtdsToggleAppExpanded(n())})();const Uo=T.app.split(" ")[0],vr=T.sticky.split(" ")[0],br='[data-command="toggle-app-expanded"]',Pe=`.${Uo} > dialog,.${Uo} dialog ~ main`,Vo=t=>{document.startViewTransition?document.startViewTransition(t):t()},qo=t=>Vo(()=>window.mtdsToggleAppExpanded?.(t));function _r({target:t,defaultPrevented:e}){const n=t?.closest?.("a");if(n?.closest("dialog")&&n?.closest(Pe))return Wo();if(e||!(t instanceof HTMLButtonElement)||!t.matches(br))return;getComputedStyle(t).position==="sticky"?qo():Vo(()=>{const i=document.querySelector(Pe);i?.setAttribute("data-closedby","any"),i?.showModal()})}function Wo(){document.querySelector(Pe)?.close()}let Ne=0,vt,j=0,C,He=0,ne=0,Be=!1,Fe=0,ot=0;function wr([t]){C=t,jo()}function jo(){if(!C?.isConnected)return;const t=window.scrollY,e=t<ot;ot=t,e!==vt&&(Ne=(C.parentElement?.getBoundingClientRect().top||0)+ot,vt=e,He=C.offsetHeight,ne=C.getBoundingClientRect().top+ot,Be=C.offsetHeight<=window.innerHeight,Fe=window.innerHeight),!(j===-1&&Be)&&(j!==-1&&(Be||vt&&ot<=ne)?(C.style.setProperty("--pos","sticky"),C.style.setProperty("--top","0px"),j=-1):j===-1&&!vt?(C.style.setProperty("--pos","relative"),C.style.setProperty("--top",`${Math.max(0,ot-Ne)}px`),j=0):j!==1&&!vt&&ot+Fe>=ne+He?(C.style.setProperty("--pos","sticky"),C.style.setProperty("--top",`${Fe-He}px`),j=1):j===1&&vt&&(C.style.setProperty("--pos","relative"),C.style.setProperty("--top",`${ne-Ne}px`),j=0))}R(()=>{gt(document.documentElement,vr,wr),$(document,"click",_r,M),$(window,"resize",tr(Wo,100),M),$(window,"scroll",jo,M)});const yr=(t,e,n=Number.POSITIVE_INFINITY)=>{const o=(n-1)/2,i=Math.max(Math.min(t-Math.floor(o),e-n+1),1),s=Math.min(Math.max(t+Math.ceil(o),n),e),r=Array.from({length:s+1-i},(a,c)=>c+i);return n>4&&i>1&&r.splice(0,2,1,0),n>3&&s<e&&r.splice(-2,2,0,e),r},xr=({current:t=1,total:e=10,show:n=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:yr(t,e,n).map((o,i)=>({current:o===t&&"page",key:`key-${o}-${i}`,page:o}))}),Er=T.breadcrumbs.split(" ")[0];function Sr(t){for(const e of t)e.querySelectorAll("li a").forEach((n,o,{length:i})=>{p(n,"aria-current",o===i-1?"page":null)})}R(()=>gt(document.documentElement,Er,Sr));const Tr=T.dialog.split(" ")[0],$r=te?document.getElementsByClassName(Tr):[],Cr=()=>{for(const t of $r)t.isConnected&&t.showModal&&t.close&&(t.matches('[open]:not([data-modal="false"]):not(:modal)')?(p(t,"open",null),t.showModal()):t.matches(":modal:not([open])")&&(p(t,"open",""),t.close()))},kr=({clientX:t,clientY:e,target:n})=>{if(n instanceof HTMLDialogElement&&p(n,"data-closedby")==="any"){const{top:s,right:r,bottom:a,left:c}=n.getBoundingClientRect();if(!(s<=e&&e<=a&&c<=t&&t<=r))return n.close()}const o=n?.closest?.("dialog");o&&n?.closest?.('[data-command="close"]')&&o.close()};R(()=>{$(document,"click",kr,M),Ho(Cr).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function Ar(t){if(t.animationName!==T._errorsummary)return;const e=t.target?.firstElementChild;e instanceof HTMLHeadingElement&&(p(e,"tabindex","-1"),e.focus())}R(()=>$(document,"animationend",Ar,M));var Lr=Object.defineProperty,Ko=Object.getOwnPropertySymbols,Ir=Object.prototype.hasOwnProperty,Or=Object.prototype.propertyIsEnumerable,Yo=(t,e,n)=>e in t?Lr(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Mr=(t,e)=>{for(var n in e||(e={}))Ir.call(e,n)&&Yo(t,n,e[n]);if(Ko)for(var n of Ko(e))Or.call(e,n)&&Yo(t,n,e[n]);return t},Et=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",oe=Et&&/android/i.test(navigator.userAgent),Ue=Et&&/iPad|iPhone|iPod/.test(navigator.userAgent),zo;Et&&/^Mac/i.test(((zo=navigator.userAgentData)==null?void 0:zo.platform)||navigator.platform);var Rr=`${oe?"data":"aria"}-labelledby`,Dr=":host(:not([hidden])) { display: block }",Pr="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",Xo=typeof HTMLElement>"u"?class{}:HTMLElement;function x(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 Go=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},St=(t,...e)=>Go("add",t,e),ie=(t,...e)=>Go("remove",t,e),Nr=(t,e)=>t.attachShadow({mode:"open"}).append(We("slot"),We("style",e)),se=new WeakMap,Ve=(t,e)=>{if(e===void 0)return se.get(t);try{se.get(t).disconnect(),se.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),se.set(t,n)}},Qo=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},Hr=0,qe=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Hr).toString(32)}`),t.id):"",We=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},Jo={define:(t,e)=>!Et||window.customElements.get(t)||window.customElements.define(t,e)},it,Br=0,Zo=t=>{it||(it=We("div"),it.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",x(it,"aria-live","assertive")),it.isConnected||document.body.append(it),t&&(it.textContent=`${t}${Br++%2?" ":""}`)},Fr=(t,e,n="")=>{var o,i;const s={bubbles:!0,composed:!0,data:e,inputType:n},r=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(o=Object.getOwnPropertyDescriptor(r,"value"))==null?void 0:o.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},je=!1,Ke=t=>(t?.type==="mouseup"&&(je=!1),t?.type==="mousedown"&&(je=!0,St(document,"mouseup",Ke,{once:!0})),je),Ye="disabled",Tt="selected",Ur=class extends Xo{static get observedAttributes(){return[Ye,Tt]}connectedCallback(){Ue||(this.tabIndex=-1),this.hasAttribute("role")||x(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){x(this,"aria-disabled",`${this.disabled}`),x(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[Tt]}set defaultSelected(t){this[Tt]=t}get disabled(){return x(this,Ye)!==null}set disabled(t){x(this,Ye,t?"":null)}get form(){return this.closest("form")}get index(){var t;return[...((t=this.parentElement)==null?void 0:t.options)||[this]].indexOf(this)}get label(){var t;return(t=x(this,"label"))!=null?t:this.text}set label(t){x(this,"label",t)}get selected(){return x(this,Tt)!==null}set selected(t){x(this,Tt,t?"":null)}get text(){var t;return((t=this.textContent)==null?void 0:t.trim())||""}set text(t){this.textContent=t}get value(){var t;return(t=x(this,"value"))!=null?t:this.text}set value(t){x(this,"value",t)}};Jo.define("u-option",Ur);var ti,ei=0,Vr=Ue||oe,ni="click,focusout,input,keydown,mousedown,mouseup",oi="focus,focusin,blur,focusout",re={singular:"%d hit",plural:"%d hits"},ii=class extends Xo{constructor(){super(),this._texts=Mr({},re),this._value="",Nr(this,`${Dr}
|
|
19
19
|
::slotted(u-option) { display: block; cursor: pointer }
|
|
@@ -29,4 +29,4 @@ var mtds=function(I){"use strict";var Ri=Object.defineProperty,en=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 } }`))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(Ze)return;Ze=!0;const t=ba||$i,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let n=Ea(this);if(t&&(n=`${n.replace(/\d+%$/,"")} ${e}%`),$i)for(const o of this.labels)k(o,"aria-label",n);k(this,"aria-busy",`${this.position===-1}`),k(this,"aria-label",n.trim()),k(this,"aria-labelledby",null),k(this,"aria-valuemax","100"),k(this,"aria-valuemin","0"),k(this,"aria-valuenow",`${e}`),k(this,"role",t?"img":"progressbar"),Ze=!1}get labels(){const t=this.closest("label:not([for])"),e=ya(this);return t&&(t.htmlFor=e),ki(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return Oi(this,"value")}set value(t){Mi(this,"value",t)}get max(){return Oi(this,"max")||1}set max(t){Mi(this,"max",t)}};Li.formAssociated=!0;var Ii=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),Oi=(t,e)=>{const n=k(t,e);return Ii(n)?Math.max(0,Number.parseFloat(n)):null},Mi=(t,e,n)=>{if(n===null||Ii(n))k(t,e,`${n}`);else throw new Error(`Failed to set non-numeric '${k}': '${n}'`)};return xa.define("u-progress",Li),I.UHTMLComboboxElement=pe,I.UHTMLTabElement=wn,I.UHTMLTabListElement=_n,I.UHTMLTabPanelElement=yn,I.UHTMLTabsElement=bn,I.analytics=Bo,I.pagination=xr,I.styles=ds,I.toggleAppExpanded=qo,I.version=us,Object.defineProperty(I,Symbol.toStringTag,{value:"Module"}),I}({});
|
|
32
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtY29tYm9ib3gvZGlzdC91LWNvbWJvYm94LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5tanMiLCIuLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2NvcmUvZGlzdC9mbG9hdGluZy11aS5jb3JlLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5kb20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS9kb20vZGlzdC9mbG9hdGluZy11aS5kb20ubWpzIiwiLi4vZGVzaWduc3lzdGVtL3V0aWxzLnRzIiwiLi4vZGVzaWduc3lzdGVtL2FuYWx5dGljcy9hbmFseXRpY3MudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC10b2dnbGUuanMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9wYWdpbmF0aW9uL3BhZ2luYXRpb24taGVscGVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWJzLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2RpYWxvZy9kaWFsb2ctb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZXJyb3JzdW1tYXJ5L2Vycm9yc3VtbWFyeS1vYnNlcnZlci50cyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWRhdGFsaXN0L2Rpc3QvdS1kYXRhbGlzdC5qcyIsIi4uL2Rlc2lnbnN5c3RlbS9maWVsZC9maWVsZC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9maWVsZHNldC9maWVsZHNldC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9sb2dvL2xvZ28tb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vcG9wb3Zlci9wb3BvdmVyLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RhYmxlL3RhYmxlLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RvZ2dsZWdyb3VwL3RvZ2dsZWdyb3VwLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3Rvb2x0aXAvdG9vbHRpcC1vYnNlcnZlci50cyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWRldGFpbHMvZGlzdC91LWRldGFpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1wcm9ncmVzcy9kaXN0L3UtcHJvZ3Jlc3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuXG4vLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0ZJUkVGT1ggPSBJU19CUk9XU0VSICYmIC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBGT0NVU19PVVRMSU5FID0gXCJvdXRsaW5lOiAxcHggZG90dGVkOyBvdXRsaW5lOiA1cHggYXV0byBIaWdobGlnaHQ7IG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvclwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChfZXJyKSB7XG4gIH1cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgKGRldGFpbCkgPT4gZWxlbWVudC5oYW5kbGVFdmVudCh7IHR5cGU6IFwibXV0YXRpb25cIiwgZGV0YWlsIH0pXG4gICAgKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIG9ic2VydmVycy5zZXQoZWxlbWVudCwgb2JzZXJ2ZXIpO1xuICB9XG59O1xudmFyIGFzQnV0dG9uID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGlzQ2xpY2sgPSBcImtleVwiIGluIGV2ZW50ICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKTtcbiAgaWYgKGlzQ2xpY2spIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGlmIChpc0NsaWNrICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBldmVudC50YXJnZXQuY2xpY2soKTtcbiAgcmV0dXJuIGlzQ2xpY2s7XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dDIsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQyKSBlbC50ZXh0Q29udGVudCA9IHRleHQyO1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgTElWRTtcbnZhciBMSVZFX1NSX0ZJWCA9IDA7XG52YXIgc3BlYWsgPSAodGV4dDIpID0+IHtcbiAgaWYgKCFMSVZFKSB7XG4gICAgTElWRSA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgTElWRS5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjpmaXhlZDtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcFwiO1xuICAgIGF0dHIoTElWRSwgXCJhcmlhLWxpdmVcIiwgXCJhc3NlcnRpdmVcIik7XG4gIH1cbiAgaWYgKCFMSVZFLmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChMSVZFKTtcbiAgaWYgKHRleHQyKSBMSVZFLnRleHRDb250ZW50ID0gYCR7dGV4dDJ9JHtMSVZFX1NSX0ZJWCsrICUgMiA/IFwiXFx4QTBcIiA6IFwiXCJ9YDtcbn07XG52YXIgc2V0VmFsdWUgPSAoaW5wdXQsIGRhdGEsIHR5cGUgPSBcIlwiKSA9PiB7XG4gIHZhciBfYTIsIF9iO1xuICBjb25zdCBldmVudCA9IHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUsIGRhdGEsIGlucHV0VHlwZTogdHlwZSB9O1xuICBjb25zdCBwcm90byA9IEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiYmVmb3JlaW5wdXRcIiwgZXZlbnQpKTtcbiAgKF9iID0gKF9hMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIFwidmFsdWVcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChpbnB1dCwgZGF0YSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJpbnB1dFwiLCBldmVudCkpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImNoYW5nZVwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xufTtcbnZhciBJU19QUkVTUyA9IGZhbHNlO1xudmFyIGlzTW91c2VEb3duID0gKGV2ZW50KSA9PiB7XG4gIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm1vdXNldXBcIikgSVNfUFJFU1MgPSBmYWxzZTtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2Vkb3duXCIpIHtcbiAgICBJU19QUkVTUyA9IHRydWU7XG4gICAgb24oZG9jdW1lbnQsIFwibW91c2V1cFwiLCBpc01vdXNlRG93biwgeyBvbmNlOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiBJU19QUkVTUztcbn07XG5cbi8vIHUtY29tYm9ib3gudHNcbnZhciBFVkVOVFMgPSBcImJlZm9yZWlucHV0LGJsdXIsZm9jdXMsY2xpY2ssaW5wdXQsa2V5ZG93bixtb3VzZWRvd25cIjtcbnZhciBFVkVOVF9PTkNFID0geyBvbmNlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH07XG52YXIgSVNfRklSRUZPWF9ERVNLVE9QID0gSVNfRklSRUZPWCAmJiAhSVNfQU5EUk9JRDtcbnZhciBJU19NT0JJTEUgPSBJU19BTkRST0lEIHx8IElTX0lPUztcbnZhciBGQUxTRSA9IFwiZmFsc2VcIjtcbnZhciBURVhUUyA9IHtcbiAgYWRkZWQ6IFwiQWRkZWRcIixcbiAgZW1wdHk6IFwiTm8gc2VsZWN0ZWRcIixcbiAgZm91bmQ6IFwiTmF2aWdhdGUgbGVmdCB0byBmaW5kICVkIHNlbGVjdGVkXCIsXG4gIGludmFsaWQ6IFwiSW52YWxpZCB2YWx1ZVwiLFxuICBvZjogXCJvZlwiLFxuICByZW1vdmU6IFwiUHJlc3MgdG8gcmVtb3ZlXCIsXG4gIHJlbW92ZWQ6IFwiUmVtb3ZlZFwiXG59O1xudmFyIFVIVE1MQ29tYm9ib3hFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2l0ZW0gPSBcIlwiO1xuICAgIHRoaXMuX3NwZWFrID0gXCJcIjtcbiAgICB0aGlzLl90ZXh0cyA9IF9fc3ByZWFkVmFsdWVzKHt9LCBURVhUUyk7XG4gICAgdGhpcy5fdmFsdWUgPSBcIlwiO1xuICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gICAgICAvLyBDb250ZW50IHNsb3RcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYDpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrOyAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCkgfSAvKiBNdXN0IGJlIGRpc3BsYXkgYmxvY2sgaW4gU2FmYXJpIHRvIGFsbG93IGZvY3VzIGluc2lkZSAqL1xuXHRcdFx0XHQ6aG9zdCg6bm90KFtkYXRhLW11bHRpcGxlXSkpIDo6c2xvdHRlZChkYXRhKSxcblx0XHRcdFx0Omhvc3QoW2RhdGEtbXVsdGlwbGU9XCJmYWxzZVwiXSkgOjpzbG90dGVkKGRhdGEpIHsgZGlzcGxheTogbm9uZSB9IC8qIEhpZGUgZGF0YSBpZiBub3QgbXVsdGlwbGUgKi9cblx0XHRcdFx0OjpzbG90dGVkKGlucHV0W2lucHV0bW9kZT1cIm5vbmVcIl0pIHsgb3V0bGluZTogbm9uZSB9IC8qIEhpZGUgdGVtcG9yYXJ5IGZvdWNzIG91dGxpbmUgZmxhc2ggKi9cblx0XHRcdFx0OjpzbG90dGVkKGRlbCkgeyB0ZXh0LWRlY29yYXRpb246IG5vbmUgfVxuXHRcdFx0XHQ6OnNsb3R0ZWQoZGF0YTpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcG9pbnRlci1ldmVudHM6IG5vbmUgfVxuICAgICAgICA6OnNsb3R0ZWQoZGF0YSk6OmFmdGVyIHsgY29udGVudDogJ1xcXFwwMEQ3JzsgY29udGVudDogJ1xcXFwwMEQ3JyAvICcnOyBwYWRkaW5nLWlubGluZTogLjVjaDsgcG9pbnRlci1ldmVudHM6IGF1dG87IGN1cnNvcjogcG9pbnRlciB9XG4gICAgICAgIDo6c2xvdHRlZChkYXRhOmZvY3VzKSB7ICR7Rk9DVVNfT1VUTElORX0gfWBcbiAgICAgIClcbiAgICApO1xuICB9XG4gIC8vIExvY2FsbHkgc3RvcmUgdmFsdWUgdG8gc3RvcmUgdmFsdWUgYmVmb3JlIGlucHV0LWNsaWNrXG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhURVhUUykubWFwKChrZXkpID0+IGBkYXRhLXNyLSR7a2V5fWApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuX3Jvb3QgPSBnZXRSb290KHRoaXMpO1xuICAgIG9uKHRoaXMsIEVWRU5UUywgdGhpcywgdHJ1ZSk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7XG4gICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFtcInZhbHVlXCIsIFwiaWRcIl0sXG4gICAgICAvLyBSZXNwb25kIHRvIGNoYW5nZXMgaW4gPGRhdGE+IHZhbHVlIG9yIGNoYW5nZSBvZiBpZCBmb3IgPGRhdGFsaXN0PiB0byByZWNvbm5lY3Qgd2l0aCBpbnB1dFxuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICAvLyBSZXNwb25kIHRvIGNoYW5nZXMgaW4gPGRhdGE+IHRleHRDb250ZW50XG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfSk7XG4gICAgc2V0VGltZW91dChyZW5kZXIsIDAsIHRoaXMpO1xuICAgIHNldFRpbWVvdXQoc3luY0lucHV0VmFsdWUsIDAsIHRoaXMpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBfLCB2YWwpIHtcbiAgICBjb25zdCB0ZXh0MiA9IHByb3Auc3BsaXQoXCJkYXRhLXNyLVwiKVsxXTtcbiAgICBpZiAoVEVYVFNbdGV4dDJdKSB0aGlzLl90ZXh0c1t0ZXh0Ml0gPSB2YWwgfHwgVEVYVFNbdGV4dDJdO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICAgIG9mZih0aGlzLCBFVkVOVFMsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5fY2xlYXIgPSB0aGlzLl9mb2N1cyA9IHRoaXMuX2NvbnRyb2wgPSB2b2lkIDA7XG4gICAgdGhpcy5fbGlzdCA9IHRoaXMuX29wdGlvbnMgPSB0aGlzLl9yb290ID0gdm9pZCAwO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMpKSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmVmb3JlaW5wdXRcIikgdGhpcy5fdmFsdWUgPSAodGFyZ2V0ID09IG51bGwgPyB2b2lkIDAgOiB0YXJnZXQudmFsdWUpIHx8IFwiXCI7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmx1clwiKSBvbkJsdXIodGhpcyk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikgb25DbGljayh0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiZm9jdXNcIikgb25Gb2N1cyh0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiaW5wdXRcIikgb25JbnB1dCh0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiKSBvbktleURvd24odGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcIm1vdXNlZG93blwiKSBpc01vdXNlRG93bihldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwibXV0YXRpb25cIikgcmVuZGVyKHRoaXMsIGV2ZW50KTtcbiAgfVxuICBnZXQgbXVsdGlwbGUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSBhdHRyKHRoaXMsIFwiZGF0YS1tdWx0aXBsZVwiKSkgIT0gbnVsbCA/IF9hMiA6IEZBTFNFKSAhPT0gRkFMU0U7XG4gIH1cbiAgc2V0IG11bHRpcGxlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImRhdGEtbXVsdGlwbGVcIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IGNyZWF0YWJsZSgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IGF0dHIodGhpcywgXCJkYXRhLWNyZWF0YWJsZVwiKSkgIT0gbnVsbCA/IF9hMiA6IEZBTFNFKSAhPT0gRkFMU0U7XG4gIH1cbiAgc2V0IGNyZWF0YWJsZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJkYXRhLWNyZWF0YWJsZVwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgY29udHJvbCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIGlmICghKChfYTIgPSB0aGlzLl9jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmlzQ29ubmVjdGVkKSlcbiAgICAgIHRoaXMuX2NvbnRyb2wgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFwiKTtcbiAgICByZXR1cm4gdGhpcy5fY29udHJvbDtcbiAgfVxuICBnZXQgbGlzdCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIGlmICghKChfYTIgPSB0aGlzLl9saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmlzQ29ubmVjdGVkKSlcbiAgICAgIHRoaXMuX2xpc3QgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJ1LWRhdGFsaXN0LGRhdGFsaXN0XCIpO1xuICAgIHJldHVybiB0aGlzLl9saXN0O1xuICB9XG4gIGdldCBjbGVhcigpIHtcbiAgICB2YXIgX2EyO1xuICAgIGlmICghKChfYTIgPSB0aGlzLl9jbGVhcikgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpIHRoaXMuX2NsZWFyID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiZGVsXCIpO1xuICAgIHJldHVybiB0aGlzLl9jbGVhcjtcbiAgfVxuICBnZXQgaXRlbXMoKSB7XG4gICAgaWYgKCF0aGlzLl9pdGVtcykgdGhpcy5faXRlbXMgPSB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZGF0YVwiKTtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgdmFyIF9hMiwgX2I7XG4gICAgaWYgKCF0aGlzLl9vcHRpb25zKSB7XG4gICAgICBjb25zdCB0YWcgPSAoKF9hMiA9IHRoaXMubGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5ub2RlTmFtZSkgPT09IFwiVS1EQVRBTElTVFwiID8gXCJ1LW9wdGlvblwiIDogXCJvcHRpb25cIjtcbiAgICAgIHRoaXMuX29wdGlvbnMgPSAoX2IgPSB0aGlzLmxpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYi5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuICBnZXQgdmFsdWVzKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5pdGVtc10ubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKTtcbiAgfVxufTtcbnZhciB0ZXh0ID0gKGVsKSA9PiB7XG4gIHZhciBfYTI7XG4gIHJldHVybiAoKF9hMiA9IGVsID09IG51bGwgPyB2b2lkIDAgOiBlbC50ZXh0Q29udGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG59O1xudmFyIGlzRGF0YSA9IChlbCkgPT4gZWwgaW5zdGFuY2VvZiBIVE1MRGF0YUVsZW1lbnQ7XG52YXIgaXNEaXNhYmxlZCA9ICh7IGNvbnRyb2wgfSkgPT4gKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuZGlzYWJsZWQpIHx8IChjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLnJlYWRPbmx5KSB8fCBmYWxzZTtcbnZhciByZW5kZXIgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IHsgX2ZvY3VzLCBfdGV4dHMsIGl0ZW1zLCBjb250cm9sLCBsaXN0LCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgbGV0IGxhYmVsID0gYCR7dGV4dCgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5sYWJlbHMpID09IG51bGwgPyB2b2lkIDAgOiBfYTJbMF0pfSR7bXVsdGlwbGUgPyBgLCAke2l0ZW1zLmxlbmd0aCA/IF90ZXh0cy5mb3VuZC5yZXBsYWNlKFwiJWRcIiwgYCR7aXRlbXMubGVuZ3RofWApIDogX3RleHRzLmVtcHR5fWAgOiBcIlwifWA7XG4gIGNvbnN0IGVkaXRzID0gW107XG4gIGZvciAoY29uc3QgeyBhZGRlZE5vZGVzLCByZW1vdmVkTm9kZXMgfSBvZiAoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LmRldGFpbCkgfHwgW10pIHtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIGFkZGVkTm9kZXMpIGlmIChpc0RhdGEoZWwpKSBlZGl0cy51bnNoaWZ0KGVsKTtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIHJlbW92ZWROb2RlcykgaWYgKGlzRGF0YShlbCkpIGVkaXRzLnB1c2goZWwpO1xuICB9XG4gIGNvbnN0IHNob3VsZEFubm91bmNlID0gbXVsdGlwbGUgPyBlZGl0cy5sZW5ndGggPT09IDEgOiBlZGl0c1swXSA9PT0gX2ZvY3VzO1xuICBpZiAoX2ZvY3VzICYmIGNvbnRyb2wgJiYgc2hvdWxkQW5ub3VuY2UpIHtcbiAgICBjb25zdCBhcmlhRXhwYW5kZWQgPSBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiKTtcbiAgICBjb25zdCBpbnB1dE1vZGUgPSBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIpO1xuICAgIGNvbnN0IG5leHRGb2N1cyA9IGlzRGF0YShfZm9jdXMpID8gY29udHJvbCA6IF9mb2N1cztcbiAgICBjb25zdCBpc1JlbW92ZSA9ICFlZGl0c1swXS5pc0Nvbm5lY3RlZDtcbiAgICBzZWxmLl9zcGVhayA9IGAke190ZXh0c1tpc1JlbW92ZSA/IFwicmVtb3ZlZFwiIDogXCJhZGRlZFwiXX0gJHt0ZXh0KGVkaXRzWzBdKX0sIGA7XG4gICAgaWYgKElTX01PQklMRSB8fCBfZm9jdXMgPT09IGNvbnRyb2wpIHNwZWFrKHNlbGYuX3NwZWFrKTtcbiAgICBpZiAoY29udHJvbCAhPT0gbmV4dEZvY3VzKSB7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiLCBudWxsKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgXCJub25lXCIpO1xuICAgICAgbGFiZWwgPSBcIlxceEEwXCI7XG4gICAgICBjb250cm9sLmZvY3VzKCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIGF0dHIoY29udHJvbCwgXCJhcmlhLWV4cGFuZGVkXCIsIGFyaWFFeHBhbmRlZCk7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIsIGlzUmVtb3ZlID8gXCJub25lXCIgOiBpbnB1dE1vZGUpO1xuICAgICAgKF9hMyA9IG5leHRGb2N1cyA9PSBudWxsID8gdm9pZCAwIDogbmV4dEZvY3VzLmZvY3VzKSA9PSBudWxsID8gdm9pZCAwIDogX2EzLmNhbGwobmV4dEZvY3VzKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgaW5wdXRNb2RlKTtcbiAgICAgIHNlbGYuX3NwZWFrID0gXCJcIjtcbiAgICAgIGlmIChJU19GSVJFRk9YX0RFU0tUT1ApIG9uKHNlbGYsIFwiYmx1clwiLCAoKSA9PiByZW5kZXIoc2VsZiksIEVWRU5UX09OQ0UpO1xuICAgICAgZWxzZSBzZXRUaW1lb3V0KHJlbmRlciwgMTAwLCBzZWxmKTtcbiAgICB9LCAxMDApO1xuICB9XG4gIGxldCBpZHggPSAwO1xuICBjb25zdCBzZWxlY3QgPSBzZWxmLnF1ZXJ5U2VsZWN0b3IoXCJzZWxlY3RcIik7XG4gIGNvbnN0IHJlbW92ZSA9IGlzRGlzYWJsZWQoc2VsZikgPyBcIlwiIDogYCR7X3RleHRzLnJlbW92ZX0sIGA7XG4gIGZvciAoY29uc3QgaXRlbTIgb2YgaXRlbXMpIHtcbiAgICBjb25zdCBvcHRpb24gPSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zW2lkeF07XG4gICAgY29uc3QgbGFiZWwyID0gdGV4dChpdGVtMik7XG4gICAgY29uc3QgdmFsdWUgPSBpdGVtMi52YWx1ZSB8fCBsYWJlbDI7XG4gICAgY29uc3QgYXJpYSA9IGAke3NlbGYuX3NwZWFrfSR7bGFiZWwyfSwgJHtyZW1vdmV9JHsrK2lkeH0gJHtfdGV4dHMub2Z9ICR7aXRlbXMubGVuZ3RofWA7XG4gICAgYXR0cihpdGVtMiwgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIGF0dHIoaXRlbTIsIFwidmFsdWVcIiwgdmFsdWUpO1xuICAgIGF0dHIoaXRlbTIsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICBhdHRyKGl0ZW0yLCBcImFyaWEtbGFiZWxcIiwgYXJpYSk7XG4gICAgaWYgKG9wdGlvbikgT2JqZWN0LmFzc2lnbihvcHRpb24sIHsgdGV4dENvbnRlbnQ6IGxhYmVsMiwgdmFsdWUgfSk7XG4gICAgZWxzZSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5hcHBlbmRDaGlsZChuZXcgT3B0aW9uKGxhYmVsMiwgdmFsdWUsIHRydWUsIHRydWUpKTtcbiAgfVxuICBpZiAoc2VsZWN0KSBhdHRyKHNlbGVjdCwgXCJtdWx0aXBsZVwiLCBtdWx0aXBsZSA/IFwiXCIgOiBudWxsKTtcbiAgZm9yIChjb25zdCBvcHQgb2YgWy4uLihzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zKSB8fCBbXV0uc2xpY2UoaWR4KSkgb3B0LnJlbW92ZSgpO1xuICBpZiAoIW11bHRpcGxlICYmIGlkeCA+IDEpXG4gICAgY29uc29sZS53YXJuKFwidS1jb21ib2JveDogTXVsdGlwbGUgPGRhdGE+IGZvdW5kIGluIHNpbmdsZSBtb2RlLlwiKTtcbiAgaWYgKGxpc3QpIGF0dHIobGlzdCwgXCJhcmlhLW11bHRpc2VsZWN0YWJsZVwiLCBgJHttdWx0aXBsZX1gKTtcbiAgaWYgKGNvbnRyb2wpIGF0dHIoY29udHJvbCwgXCJsaXN0XCIsIHVzZUlkKGxpc3QpKTtcbiAgaWYgKGNvbnRyb2wpIGF0dHIoY29udHJvbCwgXCJhcmlhLWxhYmVsXCIsIGAke3NlbGYuX3NwZWFrfSR7bGFiZWx9YCk7XG4gIGNvbnN0IGl0ZW0gPSB0ZXh0KGl0ZW1zWzBdKTtcbiAgaWYgKGl0ZW0gIT09IHNlbGYuX2l0ZW0pIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICBzZWxmLl9pdGVtID0gaXRlbTtcbiAgc3luY0NsZWFyV2l0aElucHV0KHNlbGYpO1xuICBzeW5jT3B0aW9uc1dpdGhJdGVtcyhzZWxmKTtcbiAgKF9iID0gbXV0YXRpb25PYnNlcnZlcihzZWxmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLnRha2VSZWNvcmRzKCk7XG59O1xudmFyIHN5bmNDbGVhcldpdGhJbnB1dCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChzZWxmLmNsZWFyKSBhdHRyKHNlbGYuY2xlYXIsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgaWYgKHNlbGYuY2xlYXIpIHNlbGYuY2xlYXIuaGlkZGVuID0gISgoX2EyID0gc2VsZi5jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnZhbHVlKSB8fCBpc0Rpc2FibGVkKHNlbGYpO1xufTtcbnZhciBzeW5jT3B0aW9uc1dpdGhJdGVtcyA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgX3NwZWFrLCBvcHRpb25zID0gW10sIHZhbHVlcyB9ID0gc2VsZjtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gKF9hMiA9IGF0dHIob3B0LCBcInZhbHVlXCIpKSAhPSBudWxsID8gX2EyIDogdGV4dChvcHQpO1xuICAgIGF0dHIob3B0LCBcImFyaWEtbGFiZWxcIiwgX3NwZWFrID8gYCR7X3NwZWFrfSR7dGV4dChvcHQpfWAgOiBudWxsKTtcbiAgICBhdHRyKG9wdCwgXCJzZWxlY3RlZFwiLCB2YWx1ZXMuaW5jbHVkZXModmFsdWUpID8gXCJcIiA6IG51bGwpO1xuICB9XG59O1xudmFyIHN5bmNJbnB1dFZhbHVlID0gKHNlbGYpID0+IHtcbiAgY29uc3QgeyBtdWx0aXBsZSwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gdGV4dChpdGVtc1swXSk7XG4gIGlmICghbXVsdGlwbGUgJiYgY29udHJvbCAmJiB2YWx1ZSAhPT0gY29udHJvbC52YWx1ZSlcbiAgICBzZXRWYWx1ZShjb250cm9sLCB2YWx1ZSwgdmFsdWUgPyBcImluc2VydFRleHRcIiA6IFwiZGVsZXRlQ29udGVudFwiKTtcbn07XG52YXIgZGlzcGF0Y2hNYXRjaCA9IChzZWxmLCBjaGFuZ2UgPSB0cnVlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgX3RleHRzLCBvcHRpb25zID0gW10sIGNyZWF0YWJsZSwgY29udHJvbCwgaXRlbXMsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IHF1ZXJ5ID0gdmFsdWUudG9Mb3dlckNhc2UoKSB8fCBudWxsO1xuICBsZXQgbWF0Y2ggPSBbLi4ub3B0aW9uc10uZmluZChcbiAgICAob3B0KSA9PiAoYXR0cihvcHQsIFwibGFiZWxcIikgfHwgdGV4dChvcHQpKS50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gcXVlcnlcbiAgKTtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogbWF0Y2ggfTtcbiAgaWYgKCFzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiY29tYm9ib3hiZWZvcmVtYXRjaFwiLCBldmVudCkpKVxuICAgIG1hdGNoID0gWy4uLm9wdGlvbnNdLmZpbmQoKG8pID0+IG8uc2VsZWN0ZWQpO1xuICBpZiAoY2hhbmdlKSB7XG4gICAgc3luY09wdGlvbnNXaXRoSXRlbXMoc2VsZik7XG4gICAgaWYgKG1hdGNoKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgbWF0Y2gsIGZhbHNlKTtcbiAgICBpZiAoY3JlYXRhYmxlICYmIHZhbHVlKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgeyB2YWx1ZSB9LCBmYWxzZSk7XG4gICAgaWYgKCFtdWx0aXBsZSAmJiAhdmFsdWUgJiYgaXRlbXNbMF0pIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW1zWzBdKTtcbiAgICBlbHNlIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICAgIHJldHVybiBzcGVhayhfdGV4dHMuaW52YWxpZCk7XG4gIH1cbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykgb3B0LnNlbGVjdGVkID0gb3B0ID09PSBtYXRjaDtcbn07XG52YXIgZGlzcGF0Y2hDaGFuZ2UgPSAoc2VsZiwgaXRlbSwgcmVtb3ZhYmxlID0gdHJ1ZSkgPT4ge1xuICBjb25zdCB7IGNvbnRyb2wsIGl0ZW1zLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgYWRkID0gY3JlYXRlRWxlbWVudChcImRhdGFcIiwgaXRlbS5sYWJlbCB8fCBpdGVtLnZhbHVlLCB7XG4gICAgdmFsdWU6IGl0ZW0udmFsdWVcbiAgfSk7XG4gIGNvbnN0IHJlbW92ZSA9IFsuLi5pdGVtc10uZmluZCgoaSkgPT4gaS52YWx1ZSA9PT0gaXRlbS52YWx1ZSk7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IHJlbW92ZSB8fCBhZGQgfTtcbiAgY29uc3Qgc2tpcCA9IHJlbW92ZSAmJiAhcmVtb3ZhYmxlO1xuICBpZiAoc2tpcCkgcmV0dXJuIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICBpZiAoc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImNvbWJvYm94YmVmb3Jlc2VsZWN0XCIsIGV2ZW50KSkpIHtcbiAgICBpZiAoIW11bHRpcGxlKSBmb3IgKGNvbnN0IGl0ZW0yIG9mIFsuLi5pdGVtc10pIGl0ZW0yLnJlbW92ZSgpO1xuICAgIGlmIChyZW1vdmUpIHJlbW92ZS5yZW1vdmUoKTtcbiAgICBlbHNlIGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYmVmb3JlYmVnaW5cIiwgYWRkKTtcbiAgICBzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiY29tYm9ib3hhZnRlcnNlbGVjdFwiLCBldmVudCkpO1xuICB9XG59O1xudmFyIG9uRm9jdXMgPSAoc2VsZiwgeyB0YXJnZXQgfSkgPT4ge1xuICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHNlbGYuX2ZvY3VzID0gdGFyZ2V0O1xuICBzcGVhaygpO1xufTtcbnZhciBvbkJsdXIgPSAoc2VsZikgPT4gaXNNb3VzZURvd24oKSB8fCBzZXRUaW1lb3V0KG9uQmx1cnJlZCwgMCwgc2VsZik7XG52YXIgb25CbHVycmVkID0gKHNlbGYpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9mb2N1cyB8fCBzZWxmLmNvbnRhaW5zKChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQpKSByZXR1cm47XG4gIGlmICghc2VsZi5tdWx0aXBsZSkgZGlzcGF0Y2hNYXRjaChzZWxmKTtcbiAgc2VsZi5fZm9jdXMgPSB2b2lkIDA7XG59O1xudmFyIG9uQ2xpY2sgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgY29uc3QgeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5LCB0YXJnZXQgfSA9IGV2ZW50O1xuICBjb25zdCB7IGNsZWFyLCBjb250cm9sLCBpdGVtcyB9ID0gc2VsZjtcbiAgaWYgKGNsZWFyID09IG51bGwgPyB2b2lkIDAgOiBjbGVhci5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgaWYgKGNvbnRyb2wpIHNldFZhbHVlKGNvbnRyb2wsIFwiXCIsIFwiZGVsZXRlQ29udGVudEJhY2t3YXJkXCIpO1xuICAgIHJldHVybiBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCk7XG4gIH1cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfSA9IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKGl0ZW0uY29udGFpbnModGFyZ2V0KSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW0pO1xuICAgIGlmICh5ID49IHRvcCAmJiB5IDw9IGJvdHRvbSAmJiB4ID49IGxlZnQgJiYgeCA8PSByaWdodCkgcmV0dXJuIGl0ZW0uZm9jdXMoKTtcbiAgfVxuICBpZiAodGFyZ2V0ID09PSBzZWxmKSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCk7XG59O1xudmFyIG9uSW5wdXQgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgeyBvcHRpb25zID0gW10sIGNvbnRyb2wsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IGlzQ2xpY2sgPSBldmVudCBpbnN0YW5jZW9mIElucHV0RXZlbnQgPyAhZXZlbnQuaW5wdXRUeXBlIHx8IGV2ZW50LmlucHV0VHlwZSA9PT0gXCJpbnNlcnRSZXBsYWNlbWVudFRleHRcIiA6ICEhdmFsdWU7XG4gIGlmIChpc0NsaWNrKSB7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGNvbnRyb2wpIGNvbnRyb2wudmFsdWUgPSBzZWxmLl92YWx1ZTtcbiAgICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKVxuICAgICAgaWYgKG9wdC52YWx1ZSAmJiBvcHQudmFsdWUgPT09IHZhbHVlKVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgb3B0LCBtdWx0aXBsZSk7XG4gIH0gZWxzZSBpZiAoIW11bHRpcGxlKSBkaXNwYXRjaE1hdGNoKHNlbGYsIGZhbHNlKTtcbiAgc3luY0NsZWFyV2l0aElucHV0KHNlbGYpO1xufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkpIHJldHVybjtcbiAgY29uc3QgeyBjbGVhciwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGNvbnN0IHsga2V5LCByZXBlYXQsIHRhcmdldCB9ID0gZXZlbnQ7XG4gIGNvbnN0IGlzQ29udHJvbCA9IGNvbnRyb2wgJiYgY29udHJvbCA9PT0gdGFyZ2V0O1xuICBjb25zdCBpblRleHQgPSBpc0NvbnRyb2wgJiYgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuc2VsZWN0aW9uRW5kKTtcbiAgbGV0IGluZGV4ID0gaXNDb250cm9sID8gaXRlbXMubGVuZ3RoIDogWy4uLml0ZW1zXS5pbmRleE9mKHRhcmdldCk7XG4gIGlmIChpc0NvbnRyb2wgJiYga2V5ID09PSBcIlRhYlwiICYmIGNsZWFyICYmICFjbGVhci5oaWRkZW4pIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNsZWFyLnRhYkluZGV4ID0gLTE7XG4gICAgY2xlYXIuZm9jdXMoKTtcbiAgICBvbihjbGVhciwgXCJibHVyXCIsICgpID0+IGF0dHIoY2xlYXIsIFwidGFiaW5kZXhcIiwgbnVsbCksIEVWRU5UX09OQ0UpO1xuICB9XG4gIGlmICghaXNDb250cm9sICYmIGFzQnV0dG9uKGV2ZW50KSB8fCBpbmRleCA9PT0gLTEpIHJldHVybjtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1JpZ2h0XCIgJiYgIWlzQ29udHJvbCkgaW5kZXggKz0gMTtcbiAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93TGVmdFwiICYmICFpblRleHQpIGluZGV4IC09IDE7XG4gIGVsc2UgaWYgKGtleSA9PT0gXCJFbnRlclwiICYmIGlzQ29udHJvbCkge1xuICAgIGNvbnN0IGZvcm0gPSBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiKTtcbiAgICBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiLCBcIiNcIik7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IGF0dHIoY29udHJvbCwgXCJmb3JtXCIsIGZvcm0pKTtcbiAgICByZXR1cm4gZGlzcGF0Y2hNYXRjaChzZWxmKTtcbiAgfSBlbHNlIGlmICgoa2V5ID09PSBcIkJhY2tzcGFjZVwiIHx8IGtleSA9PT0gXCJEZWxldGVcIikgJiYgIWluVGV4dCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCFyZXBlYXQgJiYgaXRlbXNbaW5kZXhdKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgaXRlbXNbaW5kZXhdKTtcbiAgICBpZiAoaXNDb250cm9sKSBpbmRleCAtPSAxO1xuICB9IGVsc2UgcmV0dXJuIGlzQ29udHJvbCB8fCAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpKTtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgKF9hMiA9IGl0ZW1zW01hdGgubWF4KDAsIGluZGV4KV0gfHwgY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtY29tYm9ib3hcIiwgVUhUTUxDb21ib2JveEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTENvbWJvYm94RWxlbWVudCB9O1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgU0FGRV9MQUJFTExFREJZID0gYCR7SVNfQU5EUk9JRCA/IFwiZGF0YVwiIDogXCJhcmlhXCJ9LWxhYmVsbGVkYnlgO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgX2EyO1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIChfYTIgPSBlbC5nZXRBdHRyaWJ1dGUobmFtZSkpICE9IG51bGwgPyBfYTIgOiBudWxsO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIGF0dGFjaFN0eWxlID0gKGVsZW1lbnQsIGNzcykgPT4gZWxlbWVudC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAvLyBVbm5hbWVkIHNsb3QgZG9lcyBhdXRvbWF0aWNhbGx5IHJlbmRlciBhbGwgdG9wIGVsZW1lbnQgbm9kZXNcbiAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIGNzcylcbik7XG52YXIgb2JzZXJ2ZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgbXV0YXRpb25PYnNlcnZlciA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHJldHVybiBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICB0cnkge1xuICAgIG9ic2VydmVycy5nZXQoZWxlbWVudCkuZGlzY29ubmVjdCgpO1xuICAgIG9ic2VydmVycy5kZWxldGUoZWxlbWVudCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG5cbi8vIHUtdGFicy50c1xudmFyIEFSSUFfQ09OVFJPTFMgPSBcImFyaWEtY29udHJvbHNcIjtcbnZhciBBUklBX1NFTEVDVEVEID0gXCJhcmlhLXNlbGVjdGVkXCI7XG52YXIgVUhUTUxUYWJzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBESVNQTEFZX0JMT0NLKTtcbiAgfVxuICBnZXQgdGFiTGlzdCgpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJsaXN0XCIsIHRoaXMpWzBdIHx8IG51bGw7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldFNlbGVjdGVkSW5kZXgodGhpcy50YWJzKTtcbiAgfVxuICBzZXQgc2VsZWN0ZWRJbmRleChpbmRleCkge1xuICAgIHNldFNlbGVjdGVkKHRoaXMudGFic1tpbmRleF0pO1xuICB9XG4gIGdldCB0YWJzKCkge1xuICAgIHJldHVybiBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYlwiLCB0aGlzKTtcbiAgfVxuICBnZXQgcGFuZWxzKCkge1xuICAgIHJldHVybiBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYnBhbmVsXCIsIHRoaXMpO1xuICB9XG59O1xudmFyIFVIVE1MVGFiTGlzdEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgRElTUExBWV9CTE9DSyk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJ0YWJsaXN0XCIpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICAgIGlmICh0aGlzLnRhYnMubGVuZ3RoKSB0aGlzLmhhbmRsZUV2ZW50KCk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgb2ZmKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIGZhbHNlKTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGlmICghZXZlbnQgfHwgZXZlbnQudHlwZSA9PT0gXCJtdXRhdGlvblwiKSB7XG4gICAgICBjb25zdCB0YWIgPSB0aGlzLnRhYnNbTWF0aC5tYXgodGhpcy5zZWxlY3RlZEluZGV4LCAwKV07XG4gICAgICByZXR1cm4gdGFiID09IG51bGwgPyB2b2lkIDAgOiB0YWIuc2V0QXR0cmlidXRlKEFSSUFfU0VMRUNURUQsIFwidHJ1ZVwiKTtcbiAgICB9XG4gICAgY29uc3QgeyBrZXkgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHRhYnMgPSBbLi4udGhpcy50YWJzXTtcbiAgICBjb25zdCBwcmV2ID0gdGFicy5maW5kSW5kZXgoKHRhYikgPT4gdGFiLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpO1xuICAgIGxldCBuZXh0ID0gcHJldjtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCBwcmV2ID09PSAtMSkgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIpIHNldFNlbGVjdGVkKHRhYnNbcHJldl0pO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIiAmJiAhYXNCdXR0b24oZXZlbnQpKSB7XG4gICAgICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiIHx8IGtleSA9PT0gXCJBcnJvd1JpZ2h0XCIpXG4gICAgICAgIG5leHQgPSAocHJldiArIDEpICUgdGFicy5sZW5ndGg7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiQXJyb3dVcFwiIHx8IGtleSA9PT0gXCJBcnJvd0xlZnRcIilcbiAgICAgICAgbmV4dCA9IChwcmV2IHx8IHRhYnMubGVuZ3RoKSAtIDE7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiRW5kXCIpIG5leHQgPSB0YWJzLmxlbmd0aCAtIDE7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiSG9tZVwiKSBuZXh0ID0gMDtcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJUYWJcIikgbmV4dCA9IGdldFNlbGVjdGVkSW5kZXgodGFicyk7XG4gICAgICBlbHNlIHJldHVybjtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0YWJzW3ByZXZdLnRhYkluZGV4ID0gLTE7XG4gICAgICAgIHRhYnNbbmV4dF0udGFiSW5kZXggPSAwO1xuICAgICAgfSk7XG4gICAgICBpZiAoa2V5ICE9PSBcIlRhYlwiKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRhYnNbbmV4dF0uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpO1xuICB9XG4gIGdldCBzZWxlY3RlZEluZGV4KCkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicyk7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgICBzZXRTZWxlY3RlZCh0aGlzLnRhYnNbaW5kZXhdKTtcbiAgfVxufTtcbnZhciBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG52YXIgVUhUTUxUYWJFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiaWRcIiwgQVJJQV9TRUxFQ1RFRCwgQVJJQV9DT05UUk9MU107XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZShcbiAgICAgIHRoaXMsXG4gICAgICBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrIH1cIlxuICAgICk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJ0YWJcIik7XG4gICAgdGhpcy50YWJJbmRleCA9IHRoaXMuc2VsZWN0ZWQgPyAwIDogLTE7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGlmICghU0tJUF9BVFRSX0NIQU5HRSAmJiB0aGlzLnNlbGVjdGVkICYmIHRoaXMudGFiTGlzdCkge1xuICAgICAgU0tJUF9BVFRSX0NIQU5HRSA9IHRydWU7XG4gICAgICBjb25zdCB0YWJzID0gWy4uLnRoaXMudGFiTGlzdC5xdWVyeVNlbGVjdG9yQWxsKFwidS10YWJcIildO1xuICAgICAgY29uc3QgcGFuZWxzID0gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJwYW5lbFwiLCB0aGlzLnRhYnNFbGVtZW50IHx8IHRoaXMpO1xuICAgICAgY29uc3QgbmV4dFBhbmVsID0gZ2V0UGFuZWwodGhpcywgcGFuZWxzW3RhYnMuaW5kZXhPZih0aGlzKV0pO1xuICAgICAgaWYgKG5leHRQYW5lbCkgYXR0cihuZXh0UGFuZWwsIFNBRkVfTEFCRUxMRURCWSwgdXNlSWQodGhpcykpO1xuICAgICAgdGFicy5mb3JFYWNoKCh0YWIsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhbmVsID0gZ2V0UGFuZWwodGFiLCBwYW5lbHNbaW5kZXhdKTtcbiAgICAgICAgdGFiLnRhYkluZGV4ID0gdGFiID09PSB0aGlzID8gMCA6IC0xO1xuICAgICAgICBhdHRyKHRhYiwgQVJJQV9TRUxFQ1RFRCwgYCR7dGFiID09PSB0aGlzfWApO1xuICAgICAgICBpZiAocGFuZWwpIHBhbmVsLmhpZGRlbiA9IHBhbmVsICE9PSBuZXh0UGFuZWw7XG4gICAgICAgIGlmIChwYW5lbCkgYXR0cih0YWIsIEFSSUFfQ09OVFJPTFMsIHBhbmVsLmlkKTtcbiAgICAgIH0pO1xuICAgICAgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBnZXQgdGFic0VsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcInUtdGFic1wiKTtcbiAgfVxuICBnZXQgdGFiTGlzdCgpIHtcbiAgICBjb25zdCB0YWJsaXN0ID0gdGhpcy5wYXJlbnRFbGVtZW50O1xuICAgIHJldHVybiAodGFibGlzdCA9PSBudWxsID8gdm9pZCAwIDogdGFibGlzdC5ub2RlTmFtZSkgPT09IFwiVS1UQUJMSVNUXCIgPyB0YWJsaXN0IDogbnVsbDtcbiAgfVxuICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgQVJJQV9TRUxFQ1RFRCkgPT09IFwidHJ1ZVwiO1xuICB9XG4gIHNldCBzZWxlY3RlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgQVJJQV9TRUxFQ1RFRCwgYCR7ISF2YWx1ZX1gKTtcbiAgfVxuICAvKiogUmV0cmlldmVzIHRoZSBvcmRpbmFsIHBvc2l0aW9uIG9mIGFuIHRhYiBpbiBhIHRhYmxpc3QuICovXG4gIGdldCBpbmRleCgpIHtcbiAgICBjb25zdCB0YWJMaXN0ID0gdGhpcy50YWJMaXN0O1xuICAgIHJldHVybiB0YWJMaXN0ID8gWy4uLnRhYkxpc3QucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpXS5pbmRleE9mKHRoaXMpIDogMDtcbiAgfVxuICBnZXQgcGFuZWwoKSB7XG4gICAgcmV0dXJuIGdldFBhbmVsKHRoaXMpO1xuICB9XG59O1xudmFyIFVIVE1MVGFiUGFuZWxFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiaGlkZGVuXCJdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgRElTUExBWV9CTE9DSyk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJ0YWJwYW5lbFwiKTtcbiAgICB0aGlzLmhpZGRlbiA9IGdldFNlbGVjdGVkSW5kZXgodGhpcy50YWJzKSA9PT0gLTE7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMuaGlkZGVuIHx8IGlzRm9jdXNhYmxlKHRoaXMuZmlyc3RDaGlsZCkpXG4gICAgICBhdHRyKHRoaXMsIFwidGFiaW5kZXhcIiwgbnVsbCk7XG4gICAgZWxzZSB0aGlzLnRhYkluZGV4ID0gMDtcbiAgfVxuICBnZXQgdGFic0VsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcInUtdGFic1wiKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICBjb25zdCBjc3MgPSBgdS10YWJbJHtBUklBX0NPTlRST0xTfT1cIiR7dGhpcy5pZH1cIl1gO1xuICAgIHJldHVybiBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoY3NzKTtcbiAgfVxufTtcbnZhciBxdWVyeVdpdGhvdXROZXN0ZWQgPSAodGFnLCBzZWxmKSA9PiBzZWxmLnF1ZXJ5U2VsZWN0b3JBbGwoYCR7dGFnfTpub3QoOnNjb3BlIHUtdGFicGFuZWwgJHt0YWd9KWApO1xudmFyIGdldFBhbmVsID0gKHRhYiwgcGFuZWwpID0+IHtcbiAgY29uc3QgaWQyID0gYXR0cih0YWIsIEFSSUFfQ09OVFJPTFMpIHx8IHVzZUlkKHBhbmVsKTtcbiAgY29uc3QgZWwgPSBnZXRSb290KHRhYikuZ2V0RWxlbWVudEJ5SWQoaWQyKTtcbiAgcmV0dXJuIChlbCA9PSBudWxsID8gdm9pZCAwIDogZWwubm9kZU5hbWUpID09PSBcIlUtVEFCUEFORUxcIiA/IGVsIDogbnVsbDtcbn07XG52YXIgZ2V0U2VsZWN0ZWRJbmRleCA9ICh0YWJzKSA9PiBbLi4udGFic10uZmluZEluZGV4KCh0YWIpID0+IGF0dHIodGFiLCBBUklBX1NFTEVDVEVEKSA9PT0gXCJ0cnVlXCIpO1xudmFyIHNldFNlbGVjdGVkID0gKHRhYikgPT4gdGFiICYmIGF0dHIodGFiLCBcImFyaWEtc2VsZWN0ZWRcIiwgXCJ0cnVlXCIpO1xudmFyIGlzRm9jdXNhYmxlID0gKGVsKSA9PiBlbCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgIWVsLm1hdGNoZXMoJzpkaXNhYmxlZCxbdGFiaW5kZXhePVwiLVwiXScpICYmIGVsLm1hdGNoZXMoXG4gIGBbY29udGVudGVkaXRhYmxlXSxbY29udHJvbHNdLFtocmVmXSxbdGFiaW5kZXhdLGlucHV0Om5vdChbdHlwZT1cImhpZGRlblwiXSksc2VsZWN0LHRleHRhcmVhLGJ1dHRvbixzdW1tYXJ5LGlmcmFtZWBcbik7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYnNcIiwgVUhUTUxUYWJzRWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYmxpc3RcIiwgVUhUTUxUYWJMaXN0RWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYlwiLCBVSFRNTFRhYkVsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJwYW5lbFwiLCBVSFRNTFRhYlBhbmVsRWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MVGFiRWxlbWVudCwgVUhUTUxUYWJMaXN0RWxlbWVudCwgVUhUTUxUYWJQYW5lbEVsZW1lbnQsIFVIVE1MVGFic0VsZW1lbnQgfTtcbiIsIi8qKlxuICogQ3VzdG9tIHBvc2l0aW9uaW5nIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3ZpcnR1YWwtZWxlbWVudHNcbiAqL1xuXG5jb25zdCBzaWRlcyA9IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J107XG5jb25zdCBhbGlnbm1lbnRzID0gWydzdGFydCcsICdlbmQnXTtcbmNvbnN0IHBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovc2lkZXMucmVkdWNlKChhY2MsIHNpZGUpID0+IGFjYy5jb25jYXQoc2lkZSwgc2lkZSArIFwiLVwiICsgYWxpZ25tZW50c1swXSwgc2lkZSArIFwiLVwiICsgYWxpZ25tZW50c1sxXSksIFtdKTtcbmNvbnN0IG1pbiA9IE1hdGgubWluO1xuY29uc3QgbWF4ID0gTWF0aC5tYXg7XG5jb25zdCByb3VuZCA9IE1hdGgucm91bmQ7XG5jb25zdCBmbG9vciA9IE1hdGguZmxvb3I7XG5jb25zdCBjcmVhdGVDb29yZHMgPSB2ID0+ICh7XG4gIHg6IHYsXG4gIHk6IHZcbn0pO1xuY29uc3Qgb3Bwb3NpdGVTaWRlTWFwID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuY29uc3Qgb3Bwb3NpdGVBbGlnbm1lbnRNYXAgPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZnVuY3Rpb24gY2xhbXAoc3RhcnQsIHZhbHVlLCBlbmQpIHtcbiAgcmV0dXJuIG1heChzdGFydCwgbWluKHZhbHVlLCBlbmQpKTtcbn1cbmZ1bmN0aW9uIGV2YWx1YXRlKHZhbHVlLCBwYXJhbSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gdmFsdWUocGFyYW0pIDogdmFsdWU7XG59XG5mdW5jdGlvbiBnZXRTaWRlKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59XG5mdW5jdGlvbiBnZXRBeGlzTGVuZ3RoKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbn1cbmNvbnN0IHlBeGlzU2lkZXMgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ3RvcCcsICdib3R0b20nXSk7XG5mdW5jdGlvbiBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHlBeGlzU2lkZXMuaGFzKGdldFNpZGUocGxhY2VtZW50KSkgPyAneScgOiAneCc7XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCkge1xuICByZXR1cm4gZ2V0T3Bwb3NpdGVBeGlzKGdldFNpZGVBeGlzKHBsYWNlbWVudCkpO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50U2lkZXMocGxhY2VtZW50LCByZWN0cywgcnRsKSB7XG4gIGlmIChydGwgPT09IHZvaWQgMCkge1xuICAgIHJ0bCA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnRBeGlzID0gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBsZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGFsaWdubWVudEF4aXMpO1xuICBsZXQgbWFpbkFsaWdubWVudFNpZGUgPSBhbGlnbm1lbnRBeGlzID09PSAneCcgPyBhbGlnbm1lbnQgPT09IChydGwgPyAnZW5kJyA6ICdzdGFydCcpID8gJ3JpZ2h0JyA6ICdsZWZ0JyA6IGFsaWdubWVudCA9PT0gJ3N0YXJ0JyA/ICdib3R0b20nIDogJ3RvcCc7XG4gIGlmIChyZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSA+IHJlY3RzLmZsb2F0aW5nW2xlbmd0aF0pIHtcbiAgICBtYWluQWxpZ25tZW50U2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5BbGlnbm1lbnRTaWRlKTtcbiAgfVxuICByZXR1cm4gW21haW5BbGlnbm1lbnRTaWRlLCBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluQWxpZ25tZW50U2lkZSldO1xufVxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRQbGFjZW1lbnRzKHBsYWNlbWVudCkge1xuICBjb25zdCBvcHBvc2l0ZVBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHJldHVybiBbZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSwgb3Bwb3NpdGVQbGFjZW1lbnQsIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KG9wcG9zaXRlUGxhY2VtZW50KV07XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9zdGFydHxlbmQvZywgYWxpZ25tZW50ID0+IG9wcG9zaXRlQWxpZ25tZW50TWFwW2FsaWdubWVudF0pO1xufVxuY29uc3QgbHJQbGFjZW1lbnQgPSBbJ2xlZnQnLCAncmlnaHQnXTtcbmNvbnN0IHJsUGxhY2VtZW50ID0gWydyaWdodCcsICdsZWZ0J107XG5jb25zdCB0YlBsYWNlbWVudCA9IFsndG9wJywgJ2JvdHRvbSddO1xuY29uc3QgYnRQbGFjZW1lbnQgPSBbJ2JvdHRvbScsICd0b3AnXTtcbmZ1bmN0aW9uIGdldFNpZGVMaXN0KHNpZGUsIGlzU3RhcnQsIHJ0bCkge1xuICBzd2l0Y2ggKHNpZGUpIHtcbiAgICBjYXNlICd0b3AnOlxuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICBpZiAocnRsKSByZXR1cm4gaXNTdGFydCA/IHJsUGxhY2VtZW50IDogbHJQbGFjZW1lbnQ7XG4gICAgICByZXR1cm4gaXNTdGFydCA/IGxyUGxhY2VtZW50IDogcmxQbGFjZW1lbnQ7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuIGlzU3RhcnQgPyB0YlBsYWNlbWVudCA6IGJ0UGxhY2VtZW50O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gW107XG4gIH1cbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMocGxhY2VtZW50LCBmbGlwQWxpZ25tZW50LCBkaXJlY3Rpb24sIHJ0bCkge1xuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgbGV0IGxpc3QgPSBnZXRTaWRlTGlzdChnZXRTaWRlKHBsYWNlbWVudCksIGRpcmVjdGlvbiA9PT0gJ3N0YXJ0JywgcnRsKTtcbiAgaWYgKGFsaWdubWVudCkge1xuICAgIGxpc3QgPSBsaXN0Lm1hcChzaWRlID0+IHNpZGUgKyBcIi1cIiArIGFsaWdubWVudCk7XG4gICAgaWYgKGZsaXBBbGlnbm1lbnQpIHtcbiAgICAgIGxpc3QgPSBsaXN0LmNvbmNhdChsaXN0Lm1hcChnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGlzdDtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLCBzaWRlID0+IG9wcG9zaXRlU2lkZU1hcFtzaWRlXSk7XG59XG5mdW5jdGlvbiBleHBhbmRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgLi4ucGFkZGluZ1xuICB9O1xufVxuZnVuY3Rpb24gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKSB7XG4gIHJldHVybiB0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBleHBhbmRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpIDoge1xuICAgIHRvcDogcGFkZGluZyxcbiAgICByaWdodDogcGFkZGluZyxcbiAgICBib3R0b206IHBhZGRpbmcsXG4gICAgbGVmdDogcGFkZGluZ1xuICB9O1xufVxuZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIGNvbnN0IHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH0gPSByZWN0O1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB0b3A6IHksXG4gICAgbGVmdDogeCxcbiAgICByaWdodDogeCArIHdpZHRoLFxuICAgIGJvdHRvbTogeSArIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuZXhwb3J0IHsgYWxpZ25tZW50cywgY2xhbXAsIGNyZWF0ZUNvb3JkcywgZXZhbHVhdGUsIGV4cGFuZFBhZGRpbmdPYmplY3QsIGZsb29yLCBnZXRBbGlnbm1lbnQsIGdldEFsaWdubWVudEF4aXMsIGdldEFsaWdubWVudFNpZGVzLCBnZXRBeGlzTGVuZ3RoLCBnZXRFeHBhbmRlZFBsYWNlbWVudHMsIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50LCBnZXRPcHBvc2l0ZUF4aXMsIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMsIGdldE9wcG9zaXRlUGxhY2VtZW50LCBnZXRQYWRkaW5nT2JqZWN0LCBnZXRTaWRlLCBnZXRTaWRlQXhpcywgbWF4LCBtaW4sIHBsYWNlbWVudHMsIHJlY3RUb0NsaWVudFJlY3QsIHJvdW5kLCBzaWRlcyB9O1xuIiwiaW1wb3J0IHsgZ2V0U2lkZUF4aXMsIGdldEFsaWdubWVudEF4aXMsIGdldEF4aXNMZW5ndGgsIGdldFNpZGUsIGdldEFsaWdubWVudCwgZXZhbHVhdGUsIGdldFBhZGRpbmdPYmplY3QsIHJlY3RUb0NsaWVudFJlY3QsIG1pbiwgY2xhbXAsIHBsYWNlbWVudHMsIGdldEFsaWdubWVudFNpZGVzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQsIGdldEV4cGFuZGVkUGxhY2VtZW50cywgZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cywgc2lkZXMsIG1heCwgZ2V0T3Bwb3NpdGVBeGlzIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcbmV4cG9ydCB7IHJlY3RUb0NsaWVudFJlY3QgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMnO1xuXG5mdW5jdGlvbiBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChfcmVmLCBwbGFjZW1lbnQsIHJ0bCkge1xuICBsZXQge1xuICAgIHJlZmVyZW5jZSxcbiAgICBmbG9hdGluZ1xuICB9ID0gX3JlZjtcbiAgY29uc3Qgc2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnRBeGlzID0gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbkxlbmd0aCA9IGdldEF4aXNMZW5ndGgoYWxpZ25tZW50QXhpcyk7XG4gIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gIGNvbnN0IGlzVmVydGljYWwgPSBzaWRlQXhpcyA9PT0gJ3knO1xuICBjb25zdCBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZmxvYXRpbmcud2lkdGggLyAyO1xuICBjb25zdCBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGZsb2F0aW5nLmhlaWdodCAvIDI7XG4gIGNvbnN0IGNvbW1vbkFsaWduID0gcmVmZXJlbmNlW2FsaWduTGVuZ3RoXSAvIDIgLSBmbG9hdGluZ1thbGlnbkxlbmd0aF0gLyAyO1xuICBsZXQgY29vcmRzO1xuICBzd2l0Y2ggKHNpZGUpIHtcbiAgICBjYXNlICd0b3AnOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGZsb2F0aW5nLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBmbG9hdGluZy53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54LFxuICAgICAgICB5OiByZWZlcmVuY2UueVxuICAgICAgfTtcbiAgfVxuICBzd2l0Y2ggKGdldEFsaWdubWVudChwbGFjZW1lbnQpKSB7XG4gICAgY2FzZSAnc3RhcnQnOlxuICAgICAgY29vcmRzW2FsaWdubWVudEF4aXNdIC09IGNvbW1vbkFsaWduICogKHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2VuZCc6XG4gICAgICBjb29yZHNbYWxpZ25tZW50QXhpc10gKz0gY29tbW9uQWxpZ24gKiAocnRsICYmIGlzVmVydGljYWwgPyAtMSA6IDEpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGNvb3Jkcztcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMgdGhhdCB3aWxsIHBsYWNlIHRoZSBmbG9hdGluZyBlbGVtZW50XG4gKiBuZXh0IHRvIGEgZ2l2ZW4gcmVmZXJlbmNlIGVsZW1lbnQuXG4gKlxuICogVGhpcyBleHBvcnQgZG9lcyBub3QgaGF2ZSBhbnkgYHBsYXRmb3JtYCBpbnRlcmZhY2UgbG9naWMuIFlvdSB3aWxsIG5lZWQgdG9cbiAqIHdyaXRlIG9uZSBmb3IgdGhlIHBsYXRmb3JtIHlvdSBhcmUgdXNpbmcgRmxvYXRpbmcgVUkgd2l0aC5cbiAqL1xuY29uc3QgY29tcHV0ZVBvc2l0aW9uID0gYXN5bmMgKHJlZmVyZW5jZSwgZmxvYXRpbmcsIGNvbmZpZykgPT4ge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50ID0gJ2JvdHRvbScsXG4gICAgc3RyYXRlZ3kgPSAnYWJzb2x1dGUnLFxuICAgIG1pZGRsZXdhcmUgPSBbXSxcbiAgICBwbGF0Zm9ybVxuICB9ID0gY29uZmlnO1xuICBjb25zdCB2YWxpZE1pZGRsZXdhcmUgPSBtaWRkbGV3YXJlLmZpbHRlcihCb29sZWFuKTtcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChmbG9hdGluZykpO1xuICBsZXQgcmVjdHMgPSBhd2FpdCBwbGF0Zm9ybS5nZXRFbGVtZW50UmVjdHMoe1xuICAgIHJlZmVyZW5jZSxcbiAgICBmbG9hdGluZyxcbiAgICBzdHJhdGVneVxuICB9KTtcbiAgbGV0IHtcbiAgICB4LFxuICAgIHlcbiAgfSA9IGNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50KHJlY3RzLCBwbGFjZW1lbnQsIHJ0bCk7XG4gIGxldCBzdGF0ZWZ1bFBsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgbGV0IG1pZGRsZXdhcmVEYXRhID0ge307XG4gIGxldCByZXNldENvdW50ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWxpZE1pZGRsZXdhcmUubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB7XG4gICAgICBuYW1lLFxuICAgICAgZm5cbiAgICB9ID0gdmFsaWRNaWRkbGV3YXJlW2ldO1xuICAgIGNvbnN0IHtcbiAgICAgIHg6IG5leHRYLFxuICAgICAgeTogbmV4dFksXG4gICAgICBkYXRhLFxuICAgICAgcmVzZXRcbiAgICB9ID0gYXdhaXQgZm4oe1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBpbml0aWFsUGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQ6IHN0YXRlZnVsUGxhY2VtZW50LFxuICAgICAgc3RyYXRlZ3ksXG4gICAgICBtaWRkbGV3YXJlRGF0YSxcbiAgICAgIHJlY3RzLFxuICAgICAgcGxhdGZvcm0sXG4gICAgICBlbGVtZW50czoge1xuICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgIGZsb2F0aW5nXG4gICAgICB9XG4gICAgfSk7XG4gICAgeCA9IG5leHRYICE9IG51bGwgPyBuZXh0WCA6IHg7XG4gICAgeSA9IG5leHRZICE9IG51bGwgPyBuZXh0WSA6IHk7XG4gICAgbWlkZGxld2FyZURhdGEgPSB7XG4gICAgICAuLi5taWRkbGV3YXJlRGF0YSxcbiAgICAgIFtuYW1lXToge1xuICAgICAgICAuLi5taWRkbGV3YXJlRGF0YVtuYW1lXSxcbiAgICAgICAgLi4uZGF0YVxuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHJlc2V0ICYmIHJlc2V0Q291bnQgPD0gNTApIHtcbiAgICAgIHJlc2V0Q291bnQrKztcbiAgICAgIGlmICh0eXBlb2YgcmVzZXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChyZXNldC5wbGFjZW1lbnQpIHtcbiAgICAgICAgICBzdGF0ZWZ1bFBsYWNlbWVudCA9IHJlc2V0LnBsYWNlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzZXQucmVjdHMpIHtcbiAgICAgICAgICByZWN0cyA9IHJlc2V0LnJlY3RzID09PSB0cnVlID8gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICAgICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgICAgIGZsb2F0aW5nLFxuICAgICAgICAgICAgc3RyYXRlZ3lcbiAgICAgICAgICB9KSA6IHJlc2V0LnJlY3RzO1xuICAgICAgICB9XG4gICAgICAgICh7XG4gICAgICAgICAgeCxcbiAgICAgICAgICB5XG4gICAgICAgIH0gPSBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChyZWN0cywgc3RhdGVmdWxQbGFjZW1lbnQsIHJ0bCkpO1xuICAgICAgfVxuICAgICAgaSA9IC0xO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlZnVsUGxhY2VtZW50LFxuICAgIHN0cmF0ZWd5LFxuICAgIG1pZGRsZXdhcmVEYXRhXG4gIH07XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHdpdGggYW4gb2JqZWN0IG9mIG92ZXJmbG93IHNpZGUgb2Zmc2V0cyB0aGF0IGRldGVybWluZSBob3cgbXVjaCB0aGVcbiAqIGVsZW1lbnQgaXMgb3ZlcmZsb3dpbmcgYSBnaXZlbiBjbGlwcGluZyBib3VuZGFyeSBvbiBlYWNoIHNpZGUuXG4gKiAtIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGJvdW5kYXJ5IGJ5IHRoYXQgbnVtYmVyIG9mIHBpeGVsc1xuICogLSBuZWdhdGl2ZSA9IGhvdyBtYW55IHBpeGVscyBsZWZ0IGJlZm9yZSBpdCB3aWxsIG92ZXJmbG93XG4gKiAtIDAgPSBsaWVzIGZsdXNoIHdpdGggdGhlIGJvdW5kYXJ5XG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZGV0ZWN0T3ZlcmZsb3dcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9hd2FpdCRwbGF0Zm9ybSRpc0VsZTtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBjb25zdCB7XG4gICAgeCxcbiAgICB5LFxuICAgIHBsYXRmb3JtLFxuICAgIHJlY3RzLFxuICAgIGVsZW1lbnRzLFxuICAgIHN0cmF0ZWd5XG4gIH0gPSBzdGF0ZTtcbiAgY29uc3Qge1xuICAgIGJvdW5kYXJ5ID0gJ2NsaXBwaW5nQW5jZXN0b3JzJyxcbiAgICByb290Qm91bmRhcnkgPSAndmlld3BvcnQnLFxuICAgIGVsZW1lbnRDb250ZXh0ID0gJ2Zsb2F0aW5nJyxcbiAgICBhbHRCb3VuZGFyeSA9IGZhbHNlLFxuICAgIHBhZGRpbmcgPSAwXG4gIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gIGNvbnN0IHBhZGRpbmdPYmplY3QgPSBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpO1xuICBjb25zdCBhbHRDb250ZXh0ID0gZWxlbWVudENvbnRleHQgPT09ICdmbG9hdGluZycgPyAncmVmZXJlbmNlJyA6ICdmbG9hdGluZyc7XG4gIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIGNvbnN0IGNsaXBwaW5nQ2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QoYXdhaXQgcGxhdGZvcm0uZ2V0Q2xpcHBpbmdSZWN0KHtcbiAgICBlbGVtZW50OiAoKF9hd2FpdCRwbGF0Zm9ybSRpc0VsZSA9IGF3YWl0IChwbGF0Zm9ybS5pc0VsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzRWxlbWVudChlbGVtZW50KSkpICE9IG51bGwgPyBfYXdhaXQkcGxhdGZvcm0kaXNFbGUgOiB0cnVlKSA/IGVsZW1lbnQgOiBlbGVtZW50LmNvbnRleHRFbGVtZW50IHx8IChhd2FpdCAocGxhdGZvcm0uZ2V0RG9jdW1lbnRFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudHMuZmxvYXRpbmcpKSksXG4gICAgYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5LFxuICAgIHN0cmF0ZWd5XG4gIH0pKTtcbiAgY29uc3QgcmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSAnZmxvYXRpbmcnID8ge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aDogcmVjdHMuZmxvYXRpbmcud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0cy5mbG9hdGluZy5oZWlnaHRcbiAgfSA6IHJlY3RzLnJlZmVyZW5jZTtcbiAgY29uc3Qgb2Zmc2V0UGFyZW50ID0gYXdhaXQgKHBsYXRmb3JtLmdldE9mZnNldFBhcmVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gIGNvbnN0IG9mZnNldFNjYWxlID0gKGF3YWl0IChwbGF0Zm9ybS5pc0VsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzRWxlbWVudChvZmZzZXRQYXJlbnQpKSkgPyAoYXdhaXQgKHBsYXRmb3JtLmdldFNjYWxlID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRTY2FsZShvZmZzZXRQYXJlbnQpKSkgfHwge1xuICAgIHg6IDEsXG4gICAgeTogMVxuICB9IDoge1xuICAgIHg6IDEsXG4gICAgeTogMVxuICB9O1xuICBjb25zdCBlbGVtZW50Q2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QocGxhdGZvcm0uY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QgPyBhd2FpdCBwbGF0Zm9ybS5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCh7XG4gICAgZWxlbWVudHMsXG4gICAgcmVjdCxcbiAgICBvZmZzZXRQYXJlbnQsXG4gICAgc3RyYXRlZ3lcbiAgfSkgOiByZWN0KTtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IChjbGlwcGluZ0NsaWVudFJlY3QudG9wIC0gZWxlbWVudENsaWVudFJlY3QudG9wICsgcGFkZGluZ09iamVjdC50b3ApIC8gb2Zmc2V0U2NhbGUueSxcbiAgICBib3R0b206IChlbGVtZW50Q2xpZW50UmVjdC5ib3R0b20gLSBjbGlwcGluZ0NsaWVudFJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20pIC8gb2Zmc2V0U2NhbGUueSxcbiAgICBsZWZ0OiAoY2xpcHBpbmdDbGllbnRSZWN0LmxlZnQgLSBlbGVtZW50Q2xpZW50UmVjdC5sZWZ0ICsgcGFkZGluZ09iamVjdC5sZWZ0KSAvIG9mZnNldFNjYWxlLngsXG4gICAgcmlnaHQ6IChlbGVtZW50Q2xpZW50UmVjdC5yaWdodCAtIGNsaXBwaW5nQ2xpZW50UmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHQpIC8gb2Zmc2V0U2NhbGUueFxuICB9O1xufVxuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gcG9zaXRpb24gYW4gaW5uZXIgZWxlbWVudCBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBzbyB0aGF0IGl0XG4gKiBhcHBlYXJzIGNlbnRlcmVkIHRvIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hcnJvd1xuICovXG5jb25zdCBhcnJvdyA9IG9wdGlvbnMgPT4gKHtcbiAgbmFtZTogJ2Fycm93JyxcbiAgb3B0aW9ucyxcbiAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICBjb25zdCB7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHBsYWNlbWVudCxcbiAgICAgIHJlY3RzLFxuICAgICAgcGxhdGZvcm0sXG4gICAgICBlbGVtZW50cyxcbiAgICAgIG1pZGRsZXdhcmVEYXRhXG4gICAgfSA9IHN0YXRlO1xuICAgIC8vIFNpbmNlIGBlbGVtZW50YCBpcyByZXF1aXJlZCwgd2UgZG9uJ3QgUGFydGlhbDw+IHRoZSB0eXBlLlxuICAgIGNvbnN0IHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwYWRkaW5nID0gMFxuICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSkgfHwge307XG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICB4LFxuICAgICAgeVxuICAgIH07XG4gICAgY29uc3QgYXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgICBjb25zdCBsZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGF4aXMpO1xuICAgIGNvbnN0IGFycm93RGltZW5zaW9ucyA9IGF3YWl0IHBsYXRmb3JtLmdldERpbWVuc2lvbnMoZWxlbWVudCk7XG4gICAgY29uc3QgaXNZQXhpcyA9IGF4aXMgPT09ICd5JztcbiAgICBjb25zdCBtaW5Qcm9wID0gaXNZQXhpcyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgIGNvbnN0IG1heFByb3AgPSBpc1lBeGlzID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICAgIGNvbnN0IGNsaWVudFByb3AgPSBpc1lBeGlzID8gJ2NsaWVudEhlaWdodCcgOiAnY2xpZW50V2lkdGgnO1xuICAgIGNvbnN0IGVuZERpZmYgPSByZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSArIHJlY3RzLnJlZmVyZW5jZVtheGlzXSAtIGNvb3Jkc1theGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbmd0aF07XG4gICAgY29uc3Qgc3RhcnREaWZmID0gY29vcmRzW2F4aXNdIC0gcmVjdHMucmVmZXJlbmNlW2F4aXNdO1xuICAgIGNvbnN0IGFycm93T2Zmc2V0UGFyZW50ID0gYXdhaXQgKHBsYXRmb3JtLmdldE9mZnNldFBhcmVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpKTtcbiAgICBsZXQgY2xpZW50U2l6ZSA9IGFycm93T2Zmc2V0UGFyZW50ID8gYXJyb3dPZmZzZXRQYXJlbnRbY2xpZW50UHJvcF0gOiAwO1xuXG4gICAgLy8gRE9NIHBsYXRmb3JtIGNhbiByZXR1cm4gYHdpbmRvd2AgYXMgdGhlIGBvZmZzZXRQYXJlbnRgLlxuICAgIGlmICghY2xpZW50U2l6ZSB8fCAhKGF3YWl0IChwbGF0Zm9ybS5pc0VsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzRWxlbWVudChhcnJvd09mZnNldFBhcmVudCkpKSkge1xuICAgICAgY2xpZW50U2l6ZSA9IGVsZW1lbnRzLmZsb2F0aW5nW2NsaWVudFByb3BdIHx8IHJlY3RzLmZsb2F0aW5nW2xlbmd0aF07XG4gICAgfVxuICAgIGNvbnN0IGNlbnRlclRvUmVmZXJlbmNlID0gZW5kRGlmZiAvIDIgLSBzdGFydERpZmYgLyAyO1xuXG4gICAgLy8gSWYgdGhlIHBhZGRpbmcgaXMgbGFyZ2UgZW5vdWdoIHRoYXQgaXQgY2F1c2VzIHRoZSBhcnJvdyB0byBubyBsb25nZXIgYmVcbiAgICAvLyBjZW50ZXJlZCwgbW9kaWZ5IHRoZSBwYWRkaW5nIHNvIHRoYXQgaXQgaXMgY2VudGVyZWQuXG4gICAgY29uc3QgbGFyZ2VzdFBvc3NpYmxlUGFkZGluZyA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyIC0gMTtcbiAgICBjb25zdCBtaW5QYWRkaW5nID0gbWluKHBhZGRpbmdPYmplY3RbbWluUHJvcF0sIGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcpO1xuICAgIGNvbnN0IG1heFBhZGRpbmcgPSBtaW4ocGFkZGluZ09iamVjdFttYXhQcm9wXSwgbGFyZ2VzdFBvc3NpYmxlUGFkZGluZyk7XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFycm93IGRvZXNuJ3Qgb3ZlcmZsb3cgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaWYgdGhlIGNlbnRlclxuICAgIC8vIHBvaW50IGlzIG91dHNpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQncyBib3VuZHMuXG4gICAgY29uc3QgbWluJDEgPSBtaW5QYWRkaW5nO1xuICAgIGNvbnN0IG1heCA9IGNsaWVudFNpemUgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAtIG1heFBhZGRpbmc7XG4gICAgY29uc3QgY2VudGVyID0gY2xpZW50U2l6ZSAvIDIgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgKyBjZW50ZXJUb1JlZmVyZW5jZTtcbiAgICBjb25zdCBvZmZzZXQgPSBjbGFtcChtaW4kMSwgY2VudGVyLCBtYXgpO1xuXG4gICAgLy8gSWYgdGhlIHJlZmVyZW5jZSBpcyBzbWFsbCBlbm91Z2ggdGhhdCB0aGUgYXJyb3cncyBwYWRkaW5nIGNhdXNlcyBpdCB0b1xuICAgIC8vIHRvIHBvaW50IHRvIG5vdGhpbmcgZm9yIGFuIGFsaWduZWQgcGxhY2VtZW50LCBhZGp1c3QgdGhlIG9mZnNldCBvZiB0aGVcbiAgICAvLyBmbG9hdGluZyBlbGVtZW50IGl0c2VsZi4gVG8gZW5zdXJlIGBzaGlmdCgpYCBjb250aW51ZXMgdG8gdGFrZSBhY3Rpb24sXG4gICAgLy8gYSBzaW5nbGUgcmVzZXQgaXMgcGVyZm9ybWVkIHdoZW4gdGhpcyBpcyB0cnVlLlxuICAgIGNvbnN0IHNob3VsZEFkZE9mZnNldCA9ICFtaWRkbGV3YXJlRGF0YS5hcnJvdyAmJiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSAhPSBudWxsICYmIGNlbnRlciAhPT0gb2Zmc2V0ICYmIHJlY3RzLnJlZmVyZW5jZVtsZW5ndGhdIC8gMiAtIChjZW50ZXIgPCBtaW4kMSA/IG1pblBhZGRpbmcgOiBtYXhQYWRkaW5nKSAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiA8IDA7XG4gICAgY29uc3QgYWxpZ25tZW50T2Zmc2V0ID0gc2hvdWxkQWRkT2Zmc2V0ID8gY2VudGVyIDwgbWluJDEgPyBjZW50ZXIgLSBtaW4kMSA6IGNlbnRlciAtIG1heCA6IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtheGlzXTogY29vcmRzW2F4aXNdICsgYWxpZ25tZW50T2Zmc2V0LFxuICAgICAgZGF0YToge1xuICAgICAgICBbYXhpc106IG9mZnNldCxcbiAgICAgICAgY2VudGVyT2Zmc2V0OiBjZW50ZXIgLSBvZmZzZXQgLSBhbGlnbm1lbnRPZmZzZXQsXG4gICAgICAgIC4uLihzaG91bGRBZGRPZmZzZXQgJiYge1xuICAgICAgICAgIGFsaWdubWVudE9mZnNldFxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIHJlc2V0OiBzaG91bGRBZGRPZmZzZXRcbiAgICB9O1xuICB9XG59KTtcblxuZnVuY3Rpb24gZ2V0UGxhY2VtZW50TGlzdChhbGlnbm1lbnQsIGF1dG9BbGlnbm1lbnQsIGFsbG93ZWRQbGFjZW1lbnRzKSB7XG4gIGNvbnN0IGFsbG93ZWRQbGFjZW1lbnRzU29ydGVkQnlBbGlnbm1lbnQgPSBhbGlnbm1lbnQgPyBbLi4uYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSA9PT0gYWxpZ25tZW50KSwgLi4uYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSAhPT0gYWxpZ25tZW50KV0gOiBhbGxvd2VkUGxhY2VtZW50cy5maWx0ZXIocGxhY2VtZW50ID0+IGdldFNpZGUocGxhY2VtZW50KSA9PT0gcGxhY2VtZW50KTtcbiAgcmV0dXJuIGFsbG93ZWRQbGFjZW1lbnRzU29ydGVkQnlBbGlnbm1lbnQuZmlsdGVyKHBsYWNlbWVudCA9PiB7XG4gICAgaWYgKGFsaWdubWVudCkge1xuICAgICAgcmV0dXJuIGdldEFsaWdubWVudChwbGFjZW1lbnQpID09PSBhbGlnbm1lbnQgfHwgKGF1dG9BbGlnbm1lbnQgPyBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpICE9PSBwbGFjZW1lbnQgOiBmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcbn1cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGNob29zaW5nIHRoZSBwbGFjZW1lbnRcbiAqIHRoYXQgaGFzIHRoZSBtb3N0IHNwYWNlIGF2YWlsYWJsZSBhdXRvbWF0aWNhbGx5LCB3aXRob3V0IG5lZWRpbmcgdG8gc3BlY2lmeSBhXG4gKiBwcmVmZXJyZWQgcGxhY2VtZW50LiBBbHRlcm5hdGl2ZSB0byBgZmxpcGAuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1BsYWNlbWVudFxuICovXG5jb25zdCBhdXRvUGxhY2VtZW50ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdhdXRvUGxhY2VtZW50JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJGF1dG9QLCBfbWlkZGxld2FyZURhdGEkYXV0b1AyLCBfcGxhY2VtZW50c1RoYXRGaXRPbkU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlY3RzLFxuICAgICAgICBtaWRkbGV3YXJlRGF0YSxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgZWxlbWVudHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY3Jvc3NBeGlzID0gZmFsc2UsXG4gICAgICAgIGFsaWdubWVudCxcbiAgICAgICAgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLFxuICAgICAgICBhdXRvQWxpZ25tZW50ID0gdHJ1ZSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgcGxhY2VtZW50cyQxID0gYWxpZ25tZW50ICE9PSB1bmRlZmluZWQgfHwgYWxsb3dlZFBsYWNlbWVudHMgPT09IHBsYWNlbWVudHMgPyBnZXRQbGFjZW1lbnRMaXN0KGFsaWdubWVudCB8fCBudWxsLCBhdXRvQWxpZ25tZW50LCBhbGxvd2VkUGxhY2VtZW50cykgOiBhbGxvd2VkUGxhY2VtZW50cztcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXggPSAoKF9taWRkbGV3YXJlRGF0YSRhdXRvUCA9IG1pZGRsZXdhcmVEYXRhLmF1dG9QbGFjZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkYXV0b1AuaW5kZXgpIHx8IDA7XG4gICAgICBjb25zdCBjdXJyZW50UGxhY2VtZW50ID0gcGxhY2VtZW50cyQxW2N1cnJlbnRJbmRleF07XG4gICAgICBpZiAoY3VycmVudFBsYWNlbWVudCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsaWdubWVudFNpZGVzID0gZ2V0QWxpZ25tZW50U2lkZXMoY3VycmVudFBsYWNlbWVudCwgcmVjdHMsIGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKSk7XG5cbiAgICAgIC8vIE1ha2UgYGNvbXB1dGVDb29yZHNgIHN0YXJ0IGZyb20gdGhlIHJpZ2h0IHBsYWNlLlxuICAgICAgaWYgKHBsYWNlbWVudCAhPT0gY3VycmVudFBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudHMkMVswXVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnRPdmVyZmxvd3MgPSBbb3ZlcmZsb3dbZ2V0U2lkZShjdXJyZW50UGxhY2VtZW50KV0sIG92ZXJmbG93W2FsaWdubWVudFNpZGVzWzBdXSwgb3ZlcmZsb3dbYWxpZ25tZW50U2lkZXNbMV1dXTtcbiAgICAgIGNvbnN0IGFsbE92ZXJmbG93cyA9IFsuLi4oKChfbWlkZGxld2FyZURhdGEkYXV0b1AyID0gbWlkZGxld2FyZURhdGEuYXV0b1BsYWNlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRhdXRvUDIub3ZlcmZsb3dzKSB8fCBbXSksIHtcbiAgICAgICAgcGxhY2VtZW50OiBjdXJyZW50UGxhY2VtZW50LFxuICAgICAgICBvdmVyZmxvd3M6IGN1cnJlbnRPdmVyZmxvd3NcbiAgICAgIH1dO1xuICAgICAgY29uc3QgbmV4dFBsYWNlbWVudCA9IHBsYWNlbWVudHMkMVtjdXJyZW50SW5kZXggKyAxXTtcblxuICAgICAgLy8gVGhlcmUgYXJlIG1vcmUgcGxhY2VtZW50cyB0byBjaGVjay5cbiAgICAgIGlmIChuZXh0UGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCArIDEsXG4gICAgICAgICAgICBvdmVyZmxvd3M6IGFsbE92ZXJmbG93c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZSA9IGFsbE92ZXJmbG93cy5tYXAoZCA9PiB7XG4gICAgICAgIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChkLnBsYWNlbWVudCk7XG4gICAgICAgIHJldHVybiBbZC5wbGFjZW1lbnQsIGFsaWdubWVudCAmJiBjcm9zc0F4aXMgP1xuICAgICAgICAvLyBDaGVjayBhbG9uZyB0aGUgbWFpbkF4aXMgYW5kIG1haW4gY3Jvc3NBeGlzIHNpZGUuXG4gICAgICAgIGQub3ZlcmZsb3dzLnNsaWNlKDAsIDIpLnJlZHVjZSgoYWNjLCB2KSA9PiBhY2MgKyB2LCAwKSA6XG4gICAgICAgIC8vIENoZWNrIG9ubHkgdGhlIG1haW5BeGlzLlxuICAgICAgICBkLm92ZXJmbG93c1swXSwgZC5vdmVyZmxvd3NdO1xuICAgICAgfSkuc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pO1xuICAgICAgY29uc3QgcGxhY2VtZW50c1RoYXRGaXRPbkVhY2hTaWRlID0gcGxhY2VtZW50c1NvcnRlZEJ5TW9zdFNwYWNlLmZpbHRlcihkID0+IGRbMl0uc2xpY2UoMCxcbiAgICAgIC8vIEFsaWduZWQgcGxhY2VtZW50cyBzaG91bGQgbm90IGNoZWNrIHRoZWlyIG9wcG9zaXRlIGNyb3NzQXhpc1xuICAgICAgLy8gc2lkZS5cbiAgICAgIGdldEFsaWdubWVudChkWzBdKSA/IDIgOiAzKS5ldmVyeSh2ID0+IHYgPD0gMCkpO1xuICAgICAgY29uc3QgcmVzZXRQbGFjZW1lbnQgPSAoKF9wbGFjZW1lbnRzVGhhdEZpdE9uRSA9IHBsYWNlbWVudHNUaGF0Rml0T25FYWNoU2lkZVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wbGFjZW1lbnRzVGhhdEZpdE9uRVswXSkgfHwgcGxhY2VtZW50c1NvcnRlZEJ5TW9zdFNwYWNlWzBdWzBdO1xuICAgICAgaWYgKHJlc2V0UGxhY2VtZW50ICE9PSBwbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBpbmRleDogY3VycmVudEluZGV4ICsgMSxcbiAgICAgICAgICAgIG92ZXJmbG93czogYWxsT3ZlcmZsb3dzXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiByZXNldFBsYWNlbWVudFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBmbGlwcGluZyB0aGUgYHBsYWNlbWVudGBcbiAqIGluIG9yZGVyIHRvIGtlZXAgaXQgaW4gdmlldyB3aGVuIHRoZSBwcmVmZXJyZWQgcGxhY2VtZW50KHMpIHdpbGwgb3ZlcmZsb3cgdGhlXG4gKiBjbGlwcGluZyBib3VuZGFyeS4gQWx0ZXJuYXRpdmUgdG8gYGF1dG9QbGFjZW1lbnRgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2ZsaXBcbiAqL1xuY29uc3QgZmxpcCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnZmxpcCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRhcnJvdywgX21pZGRsZXdhcmVEYXRhJGZsaXA7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBpbml0aWFsUGxhY2VtZW50LFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgZWxlbWVudHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxuICAgICAgICBjcm9zc0F4aXM6IGNoZWNrQ3Jvc3NBeGlzID0gdHJ1ZSxcbiAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzOiBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICAgIGZhbGxiYWNrU3RyYXRlZ3kgPSAnYmVzdEZpdCcsXG4gICAgICAgIGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gPSAnbm9uZScsXG4gICAgICAgIGZsaXBBbGlnbm1lbnQgPSB0cnVlLFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG5cbiAgICAgIC8vIElmIGEgcmVzZXQgYnkgdGhlIGFycm93IHdhcyBjYXVzZWQgZHVlIHRvIGFuIGFsaWdubWVudCBvZmZzZXQgYmVpbmdcbiAgICAgIC8vIGFkZGVkLCB3ZSBzaG91bGQgc2tpcCBhbnkgbG9naWMgbm93IHNpbmNlIGBmbGlwKClgIGhhcyBhbHJlYWR5IGRvbmUgaXRzXG4gICAgICAvLyB3b3JrLlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8yNTQ5I2lzc3VlY29tbWVudC0xNzE5NjAxNjQzXG4gICAgICBpZiAoKF9taWRkbGV3YXJlRGF0YSRhcnJvdyA9IG1pZGRsZXdhcmVEYXRhLmFycm93KSAhPSBudWxsICYmIF9taWRkbGV3YXJlRGF0YSRhcnJvdy5hbGlnbm1lbnRPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGluaXRpYWxTaWRlQXhpcyA9IGdldFNpZGVBeGlzKGluaXRpYWxQbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaXNCYXNlUGxhY2VtZW50ID0gZ2V0U2lkZShpbml0aWFsUGxhY2VtZW50KSA9PT0gaW5pdGlhbFBsYWNlbWVudDtcbiAgICAgIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKTtcbiAgICAgIGNvbnN0IGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwQWxpZ25tZW50ID8gW2dldE9wcG9zaXRlUGxhY2VtZW50KGluaXRpYWxQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkUGxhY2VtZW50cyhpbml0aWFsUGxhY2VtZW50KSk7XG4gICAgICBjb25zdCBoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uID0gZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiAhPT0gJ25vbmUnO1xuICAgICAgaWYgKCFzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgJiYgaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbikge1xuICAgICAgICBmYWxsYmFja1BsYWNlbWVudHMucHVzaCguLi5nZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKGluaXRpYWxQbGFjZW1lbnQsIGZsaXBBbGlnbm1lbnQsIGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24sIHJ0bCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGxhY2VtZW50cyA9IFtpbml0aWFsUGxhY2VtZW50LCAuLi5mYWxsYmFja1BsYWNlbWVudHNdO1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IG92ZXJmbG93cyA9IFtdO1xuICAgICAgbGV0IG92ZXJmbG93c0RhdGEgPSAoKF9taWRkbGV3YXJlRGF0YSRmbGlwID0gbWlkZGxld2FyZURhdGEuZmxpcCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRmbGlwLm92ZXJmbG93cykgfHwgW107XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBvdmVyZmxvd3MucHVzaChvdmVyZmxvd1tzaWRlXSk7XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgY29uc3Qgc2lkZXMgPSBnZXRBbGlnbm1lbnRTaWRlcyhwbGFjZW1lbnQsIHJlY3RzLCBydGwpO1xuICAgICAgICBvdmVyZmxvd3MucHVzaChvdmVyZmxvd1tzaWRlc1swXV0sIG92ZXJmbG93W3NpZGVzWzFdXSk7XG4gICAgICB9XG4gICAgICBvdmVyZmxvd3NEYXRhID0gWy4uLm92ZXJmbG93c0RhdGEsIHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBvdmVyZmxvd3NcbiAgICAgIH1dO1xuXG4gICAgICAvLyBPbmUgb3IgbW9yZSBzaWRlcyBpcyBvdmVyZmxvd2luZy5cbiAgICAgIGlmICghb3ZlcmZsb3dzLmV2ZXJ5KHNpZGUgPT4gc2lkZSA8PSAwKSkge1xuICAgICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJGZsaXAyLCBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXI7XG4gICAgICAgIGNvbnN0IG5leHRJbmRleCA9ICgoKF9taWRkbGV3YXJlRGF0YSRmbGlwMiA9IG1pZGRsZXdhcmVEYXRhLmZsaXApID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkZmxpcDIuaW5kZXgpIHx8IDApICsgMTtcbiAgICAgICAgY29uc3QgbmV4dFBsYWNlbWVudCA9IHBsYWNlbWVudHNbbmV4dEluZGV4XTtcbiAgICAgICAgaWYgKG5leHRQbGFjZW1lbnQpIHtcbiAgICAgICAgICBjb25zdCBpZ25vcmVDcm9zc0F4aXNPdmVyZmxvdyA9IGNoZWNrQ3Jvc3NBeGlzID09PSAnYWxpZ25tZW50JyA/IGluaXRpYWxTaWRlQXhpcyAhPT0gZ2V0U2lkZUF4aXMobmV4dFBsYWNlbWVudCkgOiBmYWxzZTtcbiAgICAgICAgICBpZiAoIWlnbm9yZUNyb3NzQXhpc092ZXJmbG93IHx8XG4gICAgICAgICAgLy8gV2UgbGVhdmUgdGhlIGN1cnJlbnQgbWFpbiBheGlzIG9ubHkgaWYgZXZlcnkgcGxhY2VtZW50IG9uIHRoYXQgYXhpc1xuICAgICAgICAgIC8vIG92ZXJmbG93cyB0aGUgbWFpbiBheGlzLlxuICAgICAgICAgIG92ZXJmbG93c0RhdGEuZXZlcnkoZCA9PiBnZXRTaWRlQXhpcyhkLnBsYWNlbWVudCkgPT09IGluaXRpYWxTaWRlQXhpcyA/IGQub3ZlcmZsb3dzWzBdID4gMCA6IHRydWUpKSB7XG4gICAgICAgICAgICAvLyBUcnkgbmV4dCBwbGFjZW1lbnQgYW5kIHJlLXJ1biB0aGUgbGlmZWN5Y2xlLlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGluZGV4OiBuZXh0SW5kZXgsXG4gICAgICAgICAgICAgICAgb3ZlcmZsb3dzOiBvdmVyZmxvd3NEYXRhXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICAgICAgcGxhY2VtZW50OiBuZXh0UGxhY2VtZW50XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmlyc3QsIGZpbmQgdGhlIGNhbmRpZGF0ZXMgdGhhdCBmaXQgb24gdGhlIG1haW5BeGlzIHNpZGUgb2Ygb3ZlcmZsb3csXG4gICAgICAgIC8vIHRoZW4gZmluZCB0aGUgcGxhY2VtZW50IHRoYXQgZml0cyB0aGUgYmVzdCBvbiB0aGUgbWFpbiBjcm9zc0F4aXMgc2lkZS5cbiAgICAgICAgbGV0IHJlc2V0UGxhY2VtZW50ID0gKF9vdmVyZmxvd3NEYXRhJGZpbHRlciA9IG92ZXJmbG93c0RhdGEuZmlsdGVyKGQgPT4gZC5vdmVyZmxvd3NbMF0gPD0gMCkuc29ydCgoYSwgYikgPT4gYS5vdmVyZmxvd3NbMV0gLSBiLm92ZXJmbG93c1sxXSlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIucGxhY2VtZW50O1xuXG4gICAgICAgIC8vIE90aGVyd2lzZSBmYWxsYmFjay5cbiAgICAgICAgaWYgKCFyZXNldFBsYWNlbWVudCkge1xuICAgICAgICAgIHN3aXRjaCAoZmFsbGJhY2tTdHJhdGVneSkge1xuICAgICAgICAgICAgY2FzZSAnYmVzdEZpdCc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgX292ZXJmbG93c0RhdGEkZmlsdGVyMjtcbiAgICAgICAgICAgICAgICBjb25zdCBwbGFjZW1lbnQgPSAoX292ZXJmbG93c0RhdGEkZmlsdGVyMiA9IG92ZXJmbG93c0RhdGEuZmlsdGVyKGQgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGhhc0ZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNpZGVBeGlzID0gZ2V0U2lkZUF4aXMoZC5wbGFjZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFNpZGVBeGlzID09PSBpbml0aWFsU2lkZUF4aXMgfHxcbiAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgYmlhcyB0byB0aGUgYHlgIHNpZGUgYXhpcyBkdWUgdG8gaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgICAgICAvLyByZWFkaW5nIGRpcmVjdGlvbnMgZmF2b3JpbmcgZ3JlYXRlciB3aWR0aC5cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNpZGVBeGlzID09PSAneSc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KS5tYXAoZCA9PiBbZC5wbGFjZW1lbnQsIGQub3ZlcmZsb3dzLmZpbHRlcihvdmVyZmxvdyA9PiBvdmVyZmxvdyA+IDApLnJlZHVjZSgoYWNjLCBvdmVyZmxvdykgPT4gYWNjICsgb3ZlcmZsb3csIDApXSkuc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX292ZXJmbG93c0RhdGEkZmlsdGVyMlswXTtcbiAgICAgICAgICAgICAgICBpZiAocGxhY2VtZW50KSB7XG4gICAgICAgICAgICAgICAgICByZXNldFBsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2luaXRpYWxQbGFjZW1lbnQnOlxuICAgICAgICAgICAgICByZXNldFBsYWNlbWVudCA9IGluaXRpYWxQbGFjZW1lbnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGxhY2VtZW50ICE9PSByZXNldFBsYWNlbWVudCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgICBwbGFjZW1lbnQ6IHJlc2V0UGxhY2VtZW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0KSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiBvdmVyZmxvdy50b3AgLSByZWN0LmhlaWdodCxcbiAgICByaWdodDogb3ZlcmZsb3cucmlnaHQgLSByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogb3ZlcmZsb3cuYm90dG9tIC0gcmVjdC5oZWlnaHQsXG4gICAgbGVmdDogb3ZlcmZsb3cubGVmdCAtIHJlY3Qud2lkdGhcbiAgfTtcbn1cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xuICByZXR1cm4gc2lkZXMuc29tZShzaWRlID0+IG92ZXJmbG93W3NpZGVdID49IDApO1xufVxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2hpZGUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcmVjdHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc3RyYXRlZ3kgPSAncmVmZXJlbmNlSGlkZGVuJyxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgc3dpdGNoIChzdHJhdGVneSkge1xuICAgICAgICBjYXNlICdyZWZlcmVuY2VIaWRkZW4nOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgICAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zLFxuICAgICAgICAgICAgICBlbGVtZW50Q29udGV4dDogJ3JlZmVyZW5jZSdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0cy5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhpZGRlbk9mZnNldHM6IG9mZnNldHMsXG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlSGlkZGVuOiBpc0FueVNpZGVGdWxseUNsaXBwZWQob2Zmc2V0cylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2VzY2FwZWQnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgICAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zLFxuICAgICAgICAgICAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3RzLmZsb2F0aW5nKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBlc2NhcGVkT2Zmc2V0czogb2Zmc2V0cyxcbiAgICAgICAgICAgICAgICBlc2NhcGVkOiBpc0FueVNpZGVGdWxseUNsaXBwZWQob2Zmc2V0cylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ1JlY3QocmVjdHMpIHtcbiAgY29uc3QgbWluWCA9IG1pbiguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LmxlZnQpKTtcbiAgY29uc3QgbWluWSA9IG1pbiguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LnRvcCkpO1xuICBjb25zdCBtYXhYID0gbWF4KC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QucmlnaHQpKTtcbiAgY29uc3QgbWF4WSA9IG1heCguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LmJvdHRvbSkpO1xuICByZXR1cm4ge1xuICAgIHg6IG1pblgsXG4gICAgeTogbWluWSxcbiAgICB3aWR0aDogbWF4WCAtIG1pblgsXG4gICAgaGVpZ2h0OiBtYXhZIC0gbWluWVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0UmVjdHNCeUxpbmUocmVjdHMpIHtcbiAgY29uc3Qgc29ydGVkUmVjdHMgPSByZWN0cy5zbGljZSgpLnNvcnQoKGEsIGIpID0+IGEueSAtIGIueSk7XG4gIGNvbnN0IGdyb3VwcyA9IFtdO1xuICBsZXQgcHJldlJlY3QgPSBudWxsO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZFJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcmVjdCA9IHNvcnRlZFJlY3RzW2ldO1xuICAgIGlmICghcHJldlJlY3QgfHwgcmVjdC55IC0gcHJldlJlY3QueSA+IHByZXZSZWN0LmhlaWdodCAvIDIpIHtcbiAgICAgIGdyb3Vwcy5wdXNoKFtyZWN0XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdyb3Vwc1tncm91cHMubGVuZ3RoIC0gMV0ucHVzaChyZWN0KTtcbiAgICB9XG4gICAgcHJldlJlY3QgPSByZWN0O1xuICB9XG4gIHJldHVybiBncm91cHMubWFwKHJlY3QgPT4gcmVjdFRvQ2xpZW50UmVjdChnZXRCb3VuZGluZ1JlY3QocmVjdCkpKTtcbn1cbi8qKlxuICogUHJvdmlkZXMgaW1wcm92ZWQgcG9zaXRpb25pbmcgZm9yIGlubGluZSByZWZlcmVuY2UgZWxlbWVudHMgdGhhdCBjYW4gc3BhblxuICogb3ZlciBtdWx0aXBsZSBsaW5lcywgc3VjaCBhcyBoeXBlcmxpbmtzIG9yIHJhbmdlIHNlbGVjdGlvbnMuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaW5saW5lXG4gKi9cbmNvbnN0IGlubGluZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnaW5saW5lJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgZWxlbWVudHMsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgc3RyYXRlZ3lcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIC8vIEEgTW91c2VFdmVudCdzIGNsaWVudHtYLFl9IGNvb3JkcyBjYW4gYmUgdXAgdG8gMiBwaXhlbHMgb2ZmIGFcbiAgICAgIC8vIENsaWVudFJlY3QncyBib3VuZHMsIGRlc3BpdGUgdGhlIGV2ZW50IGxpc3RlbmVyIGJlaW5nIHRyaWdnZXJlZC4gQVxuICAgICAgLy8gcGFkZGluZyBvZiAyIHNlZW1zIHRvIGhhbmRsZSB0aGlzIGlzc3VlLlxuICAgICAgY29uc3Qge1xuICAgICAgICBwYWRkaW5nID0gMixcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IG5hdGl2ZUNsaWVudFJlY3RzID0gQXJyYXkuZnJvbSgoYXdhaXQgKHBsYXRmb3JtLmdldENsaWVudFJlY3RzID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRDbGllbnRSZWN0cyhlbGVtZW50cy5yZWZlcmVuY2UpKSkgfHwgW10pO1xuICAgICAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRSZWN0c0J5TGluZShuYXRpdmVDbGllbnRSZWN0cyk7XG4gICAgICBjb25zdCBmYWxsYmFjayA9IHJlY3RUb0NsaWVudFJlY3QoZ2V0Qm91bmRpbmdSZWN0KG5hdGl2ZUNsaWVudFJlY3RzKSk7XG4gICAgICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgICAgIGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIHR3byByZWN0cyBhbmQgdGhleSBhcmUgZGlzam9pbmVkLlxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID09PSAyICYmIGNsaWVudFJlY3RzWzBdLmxlZnQgPiBjbGllbnRSZWN0c1sxXS5yaWdodCAmJiB4ICE9IG51bGwgJiYgeSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gRmluZCB0aGUgZmlyc3QgcmVjdCBpbiB3aGljaCB0aGUgcG9pbnQgaXMgZnVsbHkgaW5zaWRlLlxuICAgICAgICAgIHJldHVybiBjbGllbnRSZWN0cy5maW5kKHJlY3QgPT4geCA+IHJlY3QubGVmdCAtIHBhZGRpbmdPYmplY3QubGVmdCAmJiB4IDwgcmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHQgJiYgeSA+IHJlY3QudG9wIC0gcGFkZGluZ09iamVjdC50b3AgJiYgeSA8IHJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20pIHx8IGZhbGxiYWNrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlcmUgYXJlIDIgb3IgbW9yZSBjb25uZWN0ZWQgcmVjdHMuXG4gICAgICAgIGlmIChjbGllbnRSZWN0cy5sZW5ndGggPj0gMikge1xuICAgICAgICAgIGlmIChnZXRTaWRlQXhpcyhwbGFjZW1lbnQpID09PSAneScpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0UmVjdCA9IGNsaWVudFJlY3RzWzBdO1xuICAgICAgICAgICAgY29uc3QgbGFzdFJlY3QgPSBjbGllbnRSZWN0c1tjbGllbnRSZWN0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IGlzVG9wID0gZ2V0U2lkZShwbGFjZW1lbnQpID09PSAndG9wJztcbiAgICAgICAgICAgIGNvbnN0IHRvcCA9IGZpcnN0UmVjdC50b3A7XG4gICAgICAgICAgICBjb25zdCBib3R0b20gPSBsYXN0UmVjdC5ib3R0b207XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gaXNUb3AgPyBmaXJzdFJlY3QubGVmdCA6IGxhc3RSZWN0LmxlZnQ7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGlzVG9wID8gZmlyc3RSZWN0LnJpZ2h0IDogbGFzdFJlY3QucmlnaHQ7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgICByaWdodCxcbiAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgeDogbGVmdCxcbiAgICAgICAgICAgICAgeTogdG9wXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpc0xlZnRTaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpID09PSAnbGVmdCc7XG4gICAgICAgICAgY29uc3QgbWF4UmlnaHQgPSBtYXgoLi4uY2xpZW50UmVjdHMubWFwKHJlY3QgPT4gcmVjdC5yaWdodCkpO1xuICAgICAgICAgIGNvbnN0IG1pbkxlZnQgPSBtaW4oLi4uY2xpZW50UmVjdHMubWFwKHJlY3QgPT4gcmVjdC5sZWZ0KSk7XG4gICAgICAgICAgY29uc3QgbWVhc3VyZVJlY3RzID0gY2xpZW50UmVjdHMuZmlsdGVyKHJlY3QgPT4gaXNMZWZ0U2lkZSA/IHJlY3QubGVmdCA9PT0gbWluTGVmdCA6IHJlY3QucmlnaHQgPT09IG1heFJpZ2h0KTtcbiAgICAgICAgICBjb25zdCB0b3AgPSBtZWFzdXJlUmVjdHNbMF0udG9wO1xuICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IG1lYXN1cmVSZWN0c1ttZWFzdXJlUmVjdHMubGVuZ3RoIC0gMV0uYm90dG9tO1xuICAgICAgICAgIGNvbnN0IGxlZnQgPSBtaW5MZWZ0O1xuICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gbWF4UmlnaHQ7XG4gICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICAgICAgY29uc3QgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICBib3R0b20sXG4gICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHg6IGxlZnQsXG4gICAgICAgICAgICB5OiB0b3BcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc2V0UmVjdHMgPSBhd2FpdCBwbGF0Zm9ybS5nZXRFbGVtZW50UmVjdHMoe1xuICAgICAgICByZWZlcmVuY2U6IHtcbiAgICAgICAgICBnZXRCb3VuZGluZ0NsaWVudFJlY3RcbiAgICAgICAgfSxcbiAgICAgICAgZmxvYXRpbmc6IGVsZW1lbnRzLmZsb2F0aW5nLFxuICAgICAgICBzdHJhdGVneVxuICAgICAgfSk7XG4gICAgICBpZiAocmVjdHMucmVmZXJlbmNlLnggIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLnggfHwgcmVjdHMucmVmZXJlbmNlLnkgIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLnkgfHwgcmVjdHMucmVmZXJlbmNlLndpZHRoICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS53aWR0aCB8fCByZWN0cy5yZWZlcmVuY2UuaGVpZ2h0ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcmVjdHM6IHJlc2V0UmVjdHNcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuY29uc3Qgb3JpZ2luU2lkZXMgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2xlZnQnLCAndG9wJ10pO1xuXG4vLyBGb3IgdHlwZSBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSwgdGhlIGBPZmZzZXRPcHRpb25zYCB0eXBlIHdhcyBhbHNvXG4vLyBEZXJpdmFibGUuXG5cbmFzeW5jIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZVRvQ29vcmRzKHN0YXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IHtcbiAgICBwbGFjZW1lbnQsXG4gICAgcGxhdGZvcm0sXG4gICAgZWxlbWVudHNcbiAgfSA9IHN0YXRlO1xuICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICBjb25zdCBpc1ZlcnRpY2FsID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knO1xuICBjb25zdCBtYWluQXhpc011bHRpID0gb3JpZ2luU2lkZXMuaGFzKHNpZGUpID8gLTEgOiAxO1xuICBjb25zdCBjcm9zc0F4aXNNdWx0aSA9IHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxO1xuICBjb25zdCByYXdWYWx1ZSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gIGxldCB7XG4gICAgbWFpbkF4aXMsXG4gICAgY3Jvc3NBeGlzLFxuICAgIGFsaWdubWVudEF4aXNcbiAgfSA9IHR5cGVvZiByYXdWYWx1ZSA9PT0gJ251bWJlcicgPyB7XG4gICAgbWFpbkF4aXM6IHJhd1ZhbHVlLFxuICAgIGNyb3NzQXhpczogMCxcbiAgICBhbGlnbm1lbnRBeGlzOiBudWxsXG4gIH0gOiB7XG4gICAgbWFpbkF4aXM6IHJhd1ZhbHVlLm1haW5BeGlzIHx8IDAsXG4gICAgY3Jvc3NBeGlzOiByYXdWYWx1ZS5jcm9zc0F4aXMgfHwgMCxcbiAgICBhbGlnbm1lbnRBeGlzOiByYXdWYWx1ZS5hbGlnbm1lbnRBeGlzXG4gIH07XG4gIGlmIChhbGlnbm1lbnQgJiYgdHlwZW9mIGFsaWdubWVudEF4aXMgPT09ICdudW1iZXInKSB7XG4gICAgY3Jvc3NBeGlzID0gYWxpZ25tZW50ID09PSAnZW5kJyA/IGFsaWdubWVudEF4aXMgKiAtMSA6IGFsaWdubWVudEF4aXM7XG4gIH1cbiAgcmV0dXJuIGlzVmVydGljYWwgPyB7XG4gICAgeDogY3Jvc3NBeGlzICogY3Jvc3NBeGlzTXVsdGksXG4gICAgeTogbWFpbkF4aXMgKiBtYWluQXhpc011bHRpXG4gIH0gOiB7XG4gICAgeDogbWFpbkF4aXMgKiBtYWluQXhpc011bHRpLFxuICAgIHk6IGNyb3NzQXhpcyAqIGNyb3NzQXhpc011bHRpXG4gIH07XG59XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0gMDtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkb2Zmc2UsIF9taWRkbGV3YXJlRGF0YSRhcnJvdztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBtaWRkbGV3YXJlRGF0YVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3QgZGlmZkNvb3JkcyA9IGF3YWl0IGNvbnZlcnRWYWx1ZVRvQ29vcmRzKHN0YXRlLCBvcHRpb25zKTtcblxuICAgICAgLy8gSWYgdGhlIHBsYWNlbWVudCBpcyB0aGUgc2FtZSBhbmQgdGhlIGFycm93IGNhdXNlZCBhbiBhbGlnbm1lbnQgb2Zmc2V0XG4gICAgICAvLyB0aGVuIHdlIGRvbid0IG5lZWQgdG8gY2hhbmdlIHRoZSBwb3NpdGlvbmluZyBjb29yZGluYXRlcy5cbiAgICAgIGlmIChwbGFjZW1lbnQgPT09ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlLnBsYWNlbWVudCkgJiYgKF9taWRkbGV3YXJlRGF0YSRhcnJvdyA9IG1pZGRsZXdhcmVEYXRhLmFycm93KSAhPSBudWxsICYmIF9taWRkbGV3YXJlRGF0YSRhcnJvdy5hbGlnbm1lbnRPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogeCArIGRpZmZDb29yZHMueCxcbiAgICAgICAgeTogeSArIGRpZmZDb29yZHMueSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIC4uLmRpZmZDb29yZHMsXG4gICAgICAgICAgcGxhY2VtZW50XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzaGlmdCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnRcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxuICAgICAgICBjcm9zc0F4aXM6IGNoZWNrQ3Jvc3NBeGlzID0gZmFsc2UsXG4gICAgICAgIGxpbWl0ZXIgPSB7XG4gICAgICAgICAgZm46IF9yZWYgPT4ge1xuICAgICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgfSA9IF9yZWY7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICB5XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9O1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IGNyb3NzQXhpcyA9IGdldFNpZGVBeGlzKGdldFNpZGUocGxhY2VtZW50KSk7XG4gICAgICBjb25zdCBtYWluQXhpcyA9IGdldE9wcG9zaXRlQXhpcyhjcm9zc0F4aXMpO1xuICAgICAgbGV0IG1haW5BeGlzQ29vcmQgPSBjb29yZHNbbWFpbkF4aXNdO1xuICAgICAgbGV0IGNyb3NzQXhpc0Nvb3JkID0gY29vcmRzW2Nyb3NzQXhpc107XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBjb25zdCBtaW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgICAgICBjb25zdCBtYXhTaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICAgICAgY29uc3QgbWluID0gbWFpbkF4aXNDb29yZCArIG92ZXJmbG93W21pblNpZGVdO1xuICAgICAgICBjb25zdCBtYXggPSBtYWluQXhpc0Nvb3JkIC0gb3ZlcmZsb3dbbWF4U2lkZV07XG4gICAgICAgIG1haW5BeGlzQ29vcmQgPSBjbGFtcChtaW4sIG1haW5BeGlzQ29vcmQsIG1heCk7XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgY29uc3QgbWluU2lkZSA9IGNyb3NzQXhpcyA9PT0gJ3knID8gJ3RvcCcgOiAnbGVmdCc7XG4gICAgICAgIGNvbnN0IG1heFNpZGUgPSBjcm9zc0F4aXMgPT09ICd5JyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICAgICAgY29uc3QgbWluID0gY3Jvc3NBeGlzQ29vcmQgKyBvdmVyZmxvd1ttaW5TaWRlXTtcbiAgICAgICAgY29uc3QgbWF4ID0gY3Jvc3NBeGlzQ29vcmQgLSBvdmVyZmxvd1ttYXhTaWRlXTtcbiAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBjbGFtcChtaW4sIGNyb3NzQXhpc0Nvb3JkLCBtYXgpO1xuICAgICAgfVxuICAgICAgY29uc3QgbGltaXRlZENvb3JkcyA9IGxpbWl0ZXIuZm4oe1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgW21haW5BeGlzXTogbWFpbkF4aXNDb29yZCxcbiAgICAgICAgW2Nyb3NzQXhpc106IGNyb3NzQXhpc0Nvb3JkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmxpbWl0ZWRDb29yZHMsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB4OiBsaW1pdGVkQ29vcmRzLnggLSB4LFxuICAgICAgICAgIHk6IGxpbWl0ZWRDb29yZHMueSAtIHksXG4gICAgICAgICAgZW5hYmxlZDoge1xuICAgICAgICAgICAgW21haW5BeGlzXTogY2hlY2tNYWluQXhpcyxcbiAgICAgICAgICAgIFtjcm9zc0F4aXNdOiBjaGVja0Nyb3NzQXhpc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuLyoqXG4gKiBCdWlsdC1pbiBgbGltaXRlcmAgdGhhdCB3aWxsIHN0b3AgYHNoaWZ0KClgIGF0IGEgY2VydGFpbiBwb2ludC5cbiAqL1xuY29uc3QgbGltaXRTaGlmdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBvcHRpb25zLFxuICAgIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG9mZnNldCA9IDAsXG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWVcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH07XG4gICAgICBjb25zdCBjcm9zc0F4aXMgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgbWFpbkF4aXMgPSBnZXRPcHBvc2l0ZUF4aXMoY3Jvc3NBeGlzKTtcbiAgICAgIGxldCBtYWluQXhpc0Nvb3JkID0gY29vcmRzW21haW5BeGlzXTtcbiAgICAgIGxldCBjcm9zc0F4aXNDb29yZCA9IGNvb3Jkc1tjcm9zc0F4aXNdO1xuICAgICAgY29uc3QgcmF3T2Zmc2V0ID0gZXZhbHVhdGUob2Zmc2V0LCBzdGF0ZSk7XG4gICAgICBjb25zdCBjb21wdXRlZE9mZnNldCA9IHR5cGVvZiByYXdPZmZzZXQgPT09ICdudW1iZXInID8ge1xuICAgICAgICBtYWluQXhpczogcmF3T2Zmc2V0LFxuICAgICAgICBjcm9zc0F4aXM6IDBcbiAgICAgIH0gOiB7XG4gICAgICAgIG1haW5BeGlzOiAwLFxuICAgICAgICBjcm9zc0F4aXM6IDAsXG4gICAgICAgIC4uLnJhd09mZnNldFxuICAgICAgfTtcbiAgICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICAgIGNvbnN0IGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgICAgIGNvbnN0IGxpbWl0TWluID0gcmVjdHMucmVmZXJlbmNlW21haW5BeGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbl0gKyBjb21wdXRlZE9mZnNldC5tYWluQXhpcztcbiAgICAgICAgY29uc3QgbGltaXRNYXggPSByZWN0cy5yZWZlcmVuY2VbbWFpbkF4aXNdICsgcmVjdHMucmVmZXJlbmNlW2xlbl0gLSBjb21wdXRlZE9mZnNldC5tYWluQXhpcztcbiAgICAgICAgaWYgKG1haW5BeGlzQ29vcmQgPCBsaW1pdE1pbikge1xuICAgICAgICAgIG1haW5BeGlzQ29vcmQgPSBsaW1pdE1pbjtcbiAgICAgICAgfSBlbHNlIGlmIChtYWluQXhpc0Nvb3JkID4gbGltaXRNYXgpIHtcbiAgICAgICAgICBtYWluQXhpc0Nvb3JkID0gbGltaXRNYXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaGVja0Nyb3NzQXhpcykge1xuICAgICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJG9mZnNlLCBfbWlkZGxld2FyZURhdGEkb2Zmc2UyO1xuICAgICAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgICAgICBjb25zdCBpc09yaWdpblNpZGUgPSBvcmlnaW5TaWRlcy5oYXMoZ2V0U2lkZShwbGFjZW1lbnQpKTtcbiAgICAgICAgY29uc3QgbGltaXRNaW4gPSByZWN0cy5yZWZlcmVuY2VbY3Jvc3NBeGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbl0gKyAoaXNPcmlnaW5TaWRlID8gKChfbWlkZGxld2FyZURhdGEkb2Zmc2UgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2VbY3Jvc3NBeGlzXSkgfHwgMCA6IDApICsgKGlzT3JpZ2luU2lkZSA/IDAgOiBjb21wdXRlZE9mZnNldC5jcm9zc0F4aXMpO1xuICAgICAgICBjb25zdCBsaW1pdE1heCA9IHJlY3RzLnJlZmVyZW5jZVtjcm9zc0F4aXNdICsgcmVjdHMucmVmZXJlbmNlW2xlbl0gKyAoaXNPcmlnaW5TaWRlID8gMCA6ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlMiA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZTJbY3Jvc3NBeGlzXSkgfHwgMCkgLSAoaXNPcmlnaW5TaWRlID8gY29tcHV0ZWRPZmZzZXQuY3Jvc3NBeGlzIDogMCk7XG4gICAgICAgIGlmIChjcm9zc0F4aXNDb29yZCA8IGxpbWl0TWluKSB7XG4gICAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBsaW1pdE1pbjtcbiAgICAgICAgfSBlbHNlIGlmIChjcm9zc0F4aXNDb29yZCA+IGxpbWl0TWF4KSB7XG4gICAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBsaW1pdE1heDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW21haW5BeGlzXTogbWFpbkF4aXNDb29yZCxcbiAgICAgICAgW2Nyb3NzQXhpc106IGNyb3NzQXhpc0Nvb3JkXG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IOKAlFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc2l6ZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YSwgX3N0YXRlJG1pZGRsZXdhcmVEYXRhMjtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICByZWN0cyxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGFwcGx5ID0gKCkgPT4ge30sXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBpc1lBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knO1xuICAgICAgY29uc3Qge1xuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgICB9ID0gcmVjdHMuZmxvYXRpbmc7XG4gICAgICBsZXQgaGVpZ2h0U2lkZTtcbiAgICAgIGxldCB3aWR0aFNpZGU7XG4gICAgICBpZiAoc2lkZSA9PT0gJ3RvcCcgfHwgc2lkZSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgaGVpZ2h0U2lkZSA9IHNpZGU7XG4gICAgICAgIHdpZHRoU2lkZSA9IGFsaWdubWVudCA9PT0gKChhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSkpID8gJ3N0YXJ0JyA6ICdlbmQnKSA/ICdsZWZ0JyA6ICdyaWdodCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aWR0aFNpZGUgPSBzaWRlO1xuICAgICAgICBoZWlnaHRTaWRlID0gYWxpZ25tZW50ID09PSAnZW5kJyA/ICd0b3AnIDogJ2JvdHRvbSc7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQgPSBoZWlnaHQgLSBvdmVyZmxvdy50b3AgLSBvdmVyZmxvdy5ib3R0b207XG4gICAgICBjb25zdCBtYXhpbXVtQ2xpcHBpbmdXaWR0aCA9IHdpZHRoIC0gb3ZlcmZsb3cubGVmdCAtIG92ZXJmbG93LnJpZ2h0O1xuICAgICAgY29uc3Qgb3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQgPSBtaW4oaGVpZ2h0IC0gb3ZlcmZsb3dbaGVpZ2h0U2lkZV0sIG1heGltdW1DbGlwcGluZ0hlaWdodCk7XG4gICAgICBjb25zdCBvdmVyZmxvd0F2YWlsYWJsZVdpZHRoID0gbWluKHdpZHRoIC0gb3ZlcmZsb3dbd2lkdGhTaWRlXSwgbWF4aW11bUNsaXBwaW5nV2lkdGgpO1xuICAgICAgY29uc3Qgbm9TaGlmdCA9ICFzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdDtcbiAgICAgIGxldCBhdmFpbGFibGVIZWlnaHQgPSBvdmVyZmxvd0F2YWlsYWJsZUhlaWdodDtcbiAgICAgIGxldCBhdmFpbGFibGVXaWR0aCA9IG92ZXJmbG93QXZhaWxhYmxlV2lkdGg7XG4gICAgICBpZiAoKF9zdGF0ZSRtaWRkbGV3YXJlRGF0YSA9IHN0YXRlLm1pZGRsZXdhcmVEYXRhLnNoaWZ0KSAhPSBudWxsICYmIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YS5lbmFibGVkLngpIHtcbiAgICAgICAgYXZhaWxhYmxlV2lkdGggPSBtYXhpbXVtQ2xpcHBpbmdXaWR0aDtcbiAgICAgIH1cbiAgICAgIGlmICgoX3N0YXRlJG1pZGRsZXdhcmVEYXRhMiA9IHN0YXRlLm1pZGRsZXdhcmVEYXRhLnNoaWZ0KSAhPSBudWxsICYmIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTIuZW5hYmxlZC55KSB7XG4gICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IG1heGltdW1DbGlwcGluZ0hlaWdodDtcbiAgICAgIH1cbiAgICAgIGlmIChub1NoaWZ0ICYmICFhbGlnbm1lbnQpIHtcbiAgICAgICAgY29uc3QgeE1pbiA9IG1heChvdmVyZmxvdy5sZWZ0LCAwKTtcbiAgICAgICAgY29uc3QgeE1heCA9IG1heChvdmVyZmxvdy5yaWdodCwgMCk7XG4gICAgICAgIGNvbnN0IHlNaW4gPSBtYXgob3ZlcmZsb3cudG9wLCAwKTtcbiAgICAgICAgY29uc3QgeU1heCA9IG1heChvdmVyZmxvdy5ib3R0b20sIDApO1xuICAgICAgICBpZiAoaXNZQXhpcykge1xuICAgICAgICAgIGF2YWlsYWJsZVdpZHRoID0gd2lkdGggLSAyICogKHhNaW4gIT09IDAgfHwgeE1heCAhPT0gMCA/IHhNaW4gKyB4TWF4IDogbWF4KG92ZXJmbG93LmxlZnQsIG92ZXJmbG93LnJpZ2h0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXZhaWxhYmxlSGVpZ2h0ID0gaGVpZ2h0IC0gMiAqICh5TWluICE9PSAwIHx8IHlNYXggIT09IDAgPyB5TWluICsgeU1heCA6IG1heChvdmVyZmxvdy50b3AsIG92ZXJmbG93LmJvdHRvbSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCBhcHBseSh7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBhdmFpbGFibGVXaWR0aCxcbiAgICAgICAgYXZhaWxhYmxlSGVpZ2h0XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5leHREaW1lbnNpb25zID0gYXdhaXQgcGxhdGZvcm0uZ2V0RGltZW5zaW9ucyhlbGVtZW50cy5mbG9hdGluZyk7XG4gICAgICBpZiAod2lkdGggIT09IG5leHREaW1lbnNpb25zLndpZHRoIHx8IGhlaWdodCAhPT0gbmV4dERpbWVuc2lvbnMuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHJlY3RzOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgc2hpZnQsIHNpemUgfTtcbiIsImZ1bmN0aW9uIGhhc1dpbmRvdygpIHtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xufVxuZnVuY3Rpb24gZ2V0Tm9kZU5hbWUobm9kZSkge1xuICBpZiAoaXNOb2RlKG5vZGUpKSB7XG4gICAgcmV0dXJuIChub2RlLm5vZGVOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIC8vIE1vY2tlZCBub2RlcyBpbiB0ZXN0aW5nIGVudmlyb25tZW50cyBtYXkgbm90IGJlIGluc3RhbmNlcyBvZiBOb2RlLiBCeVxuICAvLyByZXR1cm5pbmcgYCNkb2N1bWVudGAgYW4gaW5maW5pdGUgbG9vcCB3b24ndCBvY2N1ci5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8yMzE3XG4gIHJldHVybiAnI2RvY3VtZW50Jztcbn1cbmZ1bmN0aW9uIGdldFdpbmRvdyhub2RlKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50O1xuICByZXR1cm4gKG5vZGUgPT0gbnVsbCB8fCAoX25vZGUkb3duZXJEb2N1bWVudCA9IG5vZGUub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9ub2RlJG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpIHx8IHdpbmRvdztcbn1cbmZ1bmN0aW9uIGdldERvY3VtZW50RWxlbWVudChub2RlKSB7XG4gIHZhciBfcmVmO1xuICByZXR1cm4gKF9yZWYgPSAoaXNOb2RlKG5vZGUpID8gbm9kZS5vd25lckRvY3VtZW50IDogbm9kZS5kb2N1bWVudCkgfHwgd2luZG93LmRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX3JlZi5kb2N1bWVudEVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc05vZGUodmFsdWUpIHtcbiAgaWYgKCFoYXNXaW5kb3coKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBOb2RlIHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5Ob2RlO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRWxlbWVudCB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQodmFsdWUpIHtcbiAgaWYgKCFoYXNXaW5kb3coKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuSFRNTEVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3QodmFsdWUpIHtcbiAgaWYgKCFoYXNXaW5kb3coKSB8fCB0eXBlb2YgU2hhZG93Um9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgU2hhZG93Um9vdCB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuU2hhZG93Um9vdDtcbn1cbmNvbnN0IGludmFsaWRPdmVyZmxvd0Rpc3BsYXlWYWx1ZXMgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2lubGluZScsICdjb250ZW50cyddKTtcbmZ1bmN0aW9uIGlzT3ZlcmZsb3dFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3Qge1xuICAgIG92ZXJmbG93LFxuICAgIG92ZXJmbG93WCxcbiAgICBvdmVyZmxvd1ksXG4gICAgZGlzcGxheVxuICB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbnxjbGlwLy50ZXN0KG92ZXJmbG93ICsgb3ZlcmZsb3dZICsgb3ZlcmZsb3dYKSAmJiAhaW52YWxpZE92ZXJmbG93RGlzcGxheVZhbHVlcy5oYXMoZGlzcGxheSk7XG59XG5jb25zdCB0YWJsZUVsZW1lbnRzID0gLyojX19QVVJFX18qL25ldyBTZXQoWyd0YWJsZScsICd0ZCcsICd0aCddKTtcbmZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIHRhYmxlRWxlbWVudHMuaGFzKGdldE5vZGVOYW1lKGVsZW1lbnQpKTtcbn1cbmNvbnN0IHRvcExheWVyU2VsZWN0b3JzID0gWyc6cG9wb3Zlci1vcGVuJywgJzptb2RhbCddO1xuZnVuY3Rpb24gaXNUb3BMYXllcihlbGVtZW50KSB7XG4gIHJldHVybiB0b3BMYXllclNlbGVjdG9ycy5zb21lKHNlbGVjdG9yID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQubWF0Y2hlcyhzZWxlY3Rvcik7XG4gICAgfSBjYXRjaCAoX2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xufVxuY29uc3QgdHJhbnNmb3JtUHJvcGVydGllcyA9IFsndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZScsICdzY2FsZScsICdyb3RhdGUnLCAncGVyc3BlY3RpdmUnXTtcbmNvbnN0IHdpbGxDaGFuZ2VWYWx1ZXMgPSBbJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUnLCAnc2NhbGUnLCAncm90YXRlJywgJ3BlcnNwZWN0aXZlJywgJ2ZpbHRlciddO1xuY29uc3QgY29udGFpblZhbHVlcyA9IFsncGFpbnQnLCAnbGF5b3V0JywgJ3N0cmljdCcsICdjb250ZW50J107XG5mdW5jdGlvbiBpc0NvbnRhaW5pbmdCbG9jayhlbGVtZW50T3JDc3MpIHtcbiAgY29uc3Qgd2Via2l0ID0gaXNXZWJLaXQoKTtcbiAgY29uc3QgY3NzID0gaXNFbGVtZW50KGVsZW1lbnRPckNzcykgPyBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnRPckNzcykgOiBlbGVtZW50T3JDc3M7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy10cmFuc2Zvcm1zLTIvI2luZGl2aWR1YWwtdHJhbnNmb3Jtc1xuICByZXR1cm4gdHJhbnNmb3JtUHJvcGVydGllcy5zb21lKHZhbHVlID0+IGNzc1t2YWx1ZV0gPyBjc3NbdmFsdWVdICE9PSAnbm9uZScgOiBmYWxzZSkgfHwgKGNzcy5jb250YWluZXJUeXBlID8gY3NzLmNvbnRhaW5lclR5cGUgIT09ICdub3JtYWwnIDogZmFsc2UpIHx8ICF3ZWJraXQgJiYgKGNzcy5iYWNrZHJvcEZpbHRlciA/IGNzcy5iYWNrZHJvcEZpbHRlciAhPT0gJ25vbmUnIDogZmFsc2UpIHx8ICF3ZWJraXQgJiYgKGNzcy5maWx0ZXIgPyBjc3MuZmlsdGVyICE9PSAnbm9uZScgOiBmYWxzZSkgfHwgd2lsbENoYW5nZVZhbHVlcy5zb21lKHZhbHVlID0+IChjc3Mud2lsbENoYW5nZSB8fCAnJykuaW5jbHVkZXModmFsdWUpKSB8fCBjb250YWluVmFsdWVzLnNvbWUodmFsdWUgPT4gKGNzcy5jb250YWluIHx8ICcnKS5pbmNsdWRlcyh2YWx1ZSkpO1xufVxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgbGV0IGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmICFpc0xhc3RUcmF2ZXJzYWJsZU5vZGUoY3VycmVudE5vZGUpKSB7XG4gICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSBpZiAoaXNUb3BMYXllcihjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gaXNXZWJLaXQoKSB7XG4gIGlmICh0eXBlb2YgQ1NTID09PSAndW5kZWZpbmVkJyB8fCAhQ1NTLnN1cHBvcnRzKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBDU1Muc3VwcG9ydHMoJy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyJywgJ25vbmUnKTtcbn1cbmNvbnN0IGxhc3RUcmF2ZXJzYWJsZU5vZGVOYW1lcyA9IC8qI19fUFVSRV9fKi9uZXcgU2V0KFsnaHRtbCcsICdib2R5JywgJyNkb2N1bWVudCddKTtcbmZ1bmN0aW9uIGlzTGFzdFRyYXZlcnNhYmxlTm9kZShub2RlKSB7XG4gIHJldHVybiBsYXN0VHJhdmVyc2FibGVOb2RlTmFtZXMuaGFzKGdldE5vZGVOYW1lKG5vZGUpKTtcbn1cbmZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59XG5mdW5jdGlvbiBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpIHtcbiAgaWYgKGlzRWxlbWVudChlbGVtZW50KSkge1xuICAgIHJldHVybiB7XG4gICAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsWCxcbiAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsWVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShub2RlKSB7XG4gIGlmIChnZXROb2RlTmFtZShub2RlKSA9PT0gJ2h0bWwnKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID1cbiAgLy8gU3RlcCBpbnRvIHRoZSBzaGFkb3cgRE9NIG9mIHRoZSBwYXJlbnQgb2YgYSBzbG90dGVkIG5vZGUuXG4gIG5vZGUuYXNzaWduZWRTbG90IHx8XG4gIC8vIERPTSBFbGVtZW50IGRldGVjdGVkLlxuICBub2RlLnBhcmVudE5vZGUgfHxcbiAgLy8gU2hhZG93Um9vdCBkZXRlY3RlZC5cbiAgaXNTaGFkb3dSb290KG5vZGUpICYmIG5vZGUuaG9zdCB8fFxuICAvLyBGYWxsYmFjay5cbiAgZ2V0RG9jdW1lbnRFbGVtZW50KG5vZGUpO1xuICByZXR1cm4gaXNTaGFkb3dSb290KHJlc3VsdCkgPyByZXN1bHQuaG9zdCA6IHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKG5vZGUpIHtcbiAgY29uc3QgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUobm9kZSk7XG4gIGlmIChpc0xhc3RUcmF2ZXJzYWJsZU5vZGUocGFyZW50Tm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZS5vd25lckRvY3VtZW50ID8gbm9kZS5vd25lckRvY3VtZW50LmJvZHkgOiBub2RlLmJvZHk7XG4gIH1cbiAgaWYgKGlzSFRNTEVsZW1lbnQocGFyZW50Tm9kZSkgJiYgaXNPdmVyZmxvd0VsZW1lbnQocGFyZW50Tm9kZSkpIHtcbiAgICByZXR1cm4gcGFyZW50Tm9kZTtcbiAgfVxuICByZXR1cm4gZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3IocGFyZW50Tm9kZSk7XG59XG5mdW5jdGlvbiBnZXRPdmVyZmxvd0FuY2VzdG9ycyhub2RlLCBsaXN0LCB0cmF2ZXJzZUlmcmFtZXMpIHtcbiAgdmFyIF9ub2RlJG93bmVyRG9jdW1lbnQyO1xuICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7XG4gICAgbGlzdCA9IFtdO1xuICB9XG4gIGlmICh0cmF2ZXJzZUlmcmFtZXMgPT09IHZvaWQgMCkge1xuICAgIHRyYXZlcnNlSWZyYW1lcyA9IHRydWU7XG4gIH1cbiAgY29uc3Qgc2Nyb2xsYWJsZUFuY2VzdG9yID0gZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3Iobm9kZSk7XG4gIGNvbnN0IGlzQm9keSA9IHNjcm9sbGFibGVBbmNlc3RvciA9PT0gKChfbm9kZSRvd25lckRvY3VtZW50MiA9IG5vZGUub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9ub2RlJG93bmVyRG9jdW1lbnQyLmJvZHkpO1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsYWJsZUFuY2VzdG9yKTtcbiAgaWYgKGlzQm9keSkge1xuICAgIGNvbnN0IGZyYW1lRWxlbWVudCA9IGdldEZyYW1lRWxlbWVudCh3aW4pO1xuICAgIHJldHVybiBsaXN0LmNvbmNhdCh3aW4sIHdpbi52aXN1YWxWaWV3cG9ydCB8fCBbXSwgaXNPdmVyZmxvd0VsZW1lbnQoc2Nyb2xsYWJsZUFuY2VzdG9yKSA/IHNjcm9sbGFibGVBbmNlc3RvciA6IFtdLCBmcmFtZUVsZW1lbnQgJiYgdHJhdmVyc2VJZnJhbWVzID8gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZnJhbWVFbGVtZW50KSA6IFtdKTtcbiAgfVxuICByZXR1cm4gbGlzdC5jb25jYXQoc2Nyb2xsYWJsZUFuY2VzdG9yLCBnZXRPdmVyZmxvd0FuY2VzdG9ycyhzY3JvbGxhYmxlQW5jZXN0b3IsIFtdLCB0cmF2ZXJzZUlmcmFtZXMpKTtcbn1cbmZ1bmN0aW9uIGdldEZyYW1lRWxlbWVudCh3aW4pIHtcbiAgcmV0dXJuIHdpbi5wYXJlbnQgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHdpbi5wYXJlbnQpID8gd2luLmZyYW1lRWxlbWVudCA6IG51bGw7XG59XG5cbmV4cG9ydCB7IGdldENvbXB1dGVkU3R5bGUsIGdldENvbnRhaW5pbmdCbG9jaywgZ2V0RG9jdW1lbnRFbGVtZW50LCBnZXRGcmFtZUVsZW1lbnQsIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yLCBnZXROb2RlTmFtZSwgZ2V0Tm9kZVNjcm9sbCwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMsIGdldFBhcmVudE5vZGUsIGdldFdpbmRvdywgaXNDb250YWluaW5nQmxvY2ssIGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc05vZGUsIGlzT3ZlcmZsb3dFbGVtZW50LCBpc1NoYWRvd1Jvb3QsIGlzVGFibGVFbGVtZW50LCBpc1RvcExheWVyLCBpc1dlYktpdCB9O1xuIiwiaW1wb3J0IHsgcmVjdFRvQ2xpZW50UmVjdCwgYXJyb3cgYXMgYXJyb3ckMSwgYXV0b1BsYWNlbWVudCBhcyBhdXRvUGxhY2VtZW50JDEsIGRldGVjdE92ZXJmbG93IGFzIGRldGVjdE92ZXJmbG93JDEsIGZsaXAgYXMgZmxpcCQxLCBoaWRlIGFzIGhpZGUkMSwgaW5saW5lIGFzIGlubGluZSQxLCBsaW1pdFNoaWZ0IGFzIGxpbWl0U2hpZnQkMSwgb2Zmc2V0IGFzIG9mZnNldCQxLCBzaGlmdCBhcyBzaGlmdCQxLCBzaXplIGFzIHNpemUkMSwgY29tcHV0ZVBvc2l0aW9uIGFzIGNvbXB1dGVQb3NpdGlvbiQxIH0gZnJvbSAnQGZsb2F0aW5nLXVpL2NvcmUnO1xuaW1wb3J0IHsgcm91bmQsIGNyZWF0ZUNvb3JkcywgbWF4LCBtaW4sIGZsb29yIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcbmltcG9ydCB7IGdldENvbXB1dGVkU3R5bGUsIGlzSFRNTEVsZW1lbnQsIGlzRWxlbWVudCwgZ2V0V2luZG93LCBpc1dlYktpdCwgZ2V0RnJhbWVFbGVtZW50LCBnZXROb2RlU2Nyb2xsLCBnZXREb2N1bWVudEVsZW1lbnQsIGlzVG9wTGF5ZXIsIGdldE5vZGVOYW1lLCBpc092ZXJmbG93RWxlbWVudCwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMsIGdldFBhcmVudE5vZGUsIGlzTGFzdFRyYXZlcnNhYmxlTm9kZSwgaXNDb250YWluaW5nQmxvY2ssIGlzVGFibGVFbGVtZW50LCBnZXRDb250YWluaW5nQmxvY2sgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcbmV4cG9ydCB7IGdldE92ZXJmbG93QW5jZXN0b3JzIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzL2RvbSc7XG5cbmZ1bmN0aW9uIGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCkge1xuICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAvLyBJbiB0ZXN0aW5nIGVudmlyb25tZW50cywgdGhlIGB3aWR0aGAgYW5kIGBoZWlnaHRgIHByb3BlcnRpZXMgYXJlIGVtcHR5XG4gIC8vIHN0cmluZ3MgZm9yIFNWRyBlbGVtZW50cywgcmV0dXJuaW5nIE5hTi4gRmFsbGJhY2sgdG8gYDBgIGluIHRoaXMgY2FzZS5cbiAgbGV0IHdpZHRoID0gcGFyc2VGbG9hdChjc3Mud2lkdGgpIHx8IDA7XG4gIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGNzcy5oZWlnaHQpIHx8IDA7XG4gIGNvbnN0IGhhc09mZnNldCA9IGlzSFRNTEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IG9mZnNldFdpZHRoID0gaGFzT2Zmc2V0ID8gZWxlbWVudC5vZmZzZXRXaWR0aCA6IHdpZHRoO1xuICBjb25zdCBvZmZzZXRIZWlnaHQgPSBoYXNPZmZzZXQgPyBlbGVtZW50Lm9mZnNldEhlaWdodCA6IGhlaWdodDtcbiAgY29uc3Qgc2hvdWxkRmFsbGJhY2sgPSByb3VuZCh3aWR0aCkgIT09IG9mZnNldFdpZHRoIHx8IHJvdW5kKGhlaWdodCkgIT09IG9mZnNldEhlaWdodDtcbiAgaWYgKHNob3VsZEZhbGxiYWNrKSB7XG4gICAgd2lkdGggPSBvZmZzZXRXaWR0aDtcbiAgICBoZWlnaHQgPSBvZmZzZXRIZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgJDogc2hvdWxkRmFsbGJhY2tcbiAgfTtcbn1cblxuZnVuY3Rpb24gdW53cmFwRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiAhaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudC5jb250ZXh0RWxlbWVudCA6IGVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldFNjYWxlKGVsZW1lbnQpIHtcbiAgY29uc3QgZG9tRWxlbWVudCA9IHVud3JhcEVsZW1lbnQoZWxlbWVudCk7XG4gIGlmICghaXNIVE1MRWxlbWVudChkb21FbGVtZW50KSkge1xuICAgIHJldHVybiBjcmVhdGVDb29yZHMoMSk7XG4gIH1cbiAgY29uc3QgcmVjdCA9IGRvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgJFxuICB9ID0gZ2V0Q3NzRGltZW5zaW9ucyhkb21FbGVtZW50KTtcbiAgbGV0IHggPSAoJCA/IHJvdW5kKHJlY3Qud2lkdGgpIDogcmVjdC53aWR0aCkgLyB3aWR0aDtcbiAgbGV0IHkgPSAoJCA/IHJvdW5kKHJlY3QuaGVpZ2h0KSA6IHJlY3QuaGVpZ2h0KSAvIGhlaWdodDtcblxuICAvLyAwLCBOYU4sIG9yIEluZmluaXR5IHNob3VsZCBhbHdheXMgZmFsbGJhY2sgdG8gMS5cblxuICBpZiAoIXggfHwgIU51bWJlci5pc0Zpbml0ZSh4KSkge1xuICAgIHggPSAxO1xuICB9XG4gIGlmICgheSB8fCAhTnVtYmVyLmlzRmluaXRlKHkpKSB7XG4gICAgeSA9IDE7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuY29uc3Qgbm9PZmZzZXRzID0gLyojX19QVVJFX18qL2NyZWF0ZUNvb3JkcygwKTtcbmZ1bmN0aW9uIGdldFZpc3VhbE9mZnNldHMoZWxlbWVudCkge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGlmICghaXNXZWJLaXQoKSB8fCAhd2luLnZpc3VhbFZpZXdwb3J0KSB7XG4gICAgcmV0dXJuIG5vT2Zmc2V0cztcbiAgfVxuICByZXR1cm4ge1xuICAgIHg6IHdpbi52aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0LFxuICAgIHk6IHdpbi52aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3BcbiAgfTtcbn1cbmZ1bmN0aW9uIHNob3VsZEFkZFZpc3VhbE9mZnNldHMoZWxlbWVudCwgaXNGaXhlZCwgZmxvYXRpbmdPZmZzZXRQYXJlbnQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuICBpZiAoIWZsb2F0aW5nT2Zmc2V0UGFyZW50IHx8IGlzRml4ZWQgJiYgZmxvYXRpbmdPZmZzZXRQYXJlbnQgIT09IGdldFdpbmRvdyhlbGVtZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gaXNGaXhlZDtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGluY2x1ZGVTY2FsZSwgaXNGaXhlZFN0cmF0ZWd5LCBvZmZzZXRQYXJlbnQpIHtcbiAgaWYgKGluY2x1ZGVTY2FsZSA9PT0gdm9pZCAwKSB7XG4gICAgaW5jbHVkZVNjYWxlID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzRml4ZWRTdHJhdGVneSA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZFN0cmF0ZWd5ID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgY2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IGRvbUVsZW1lbnQgPSB1bndyYXBFbGVtZW50KGVsZW1lbnQpO1xuICBsZXQgc2NhbGUgPSBjcmVhdGVDb29yZHMoMSk7XG4gIGlmIChpbmNsdWRlU2NhbGUpIHtcbiAgICBpZiAob2Zmc2V0UGFyZW50KSB7XG4gICAgICBpZiAoaXNFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgICAgc2NhbGUgPSBnZXRTY2FsZShvZmZzZXRQYXJlbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzY2FsZSA9IGdldFNjYWxlKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuICBjb25zdCB2aXN1YWxPZmZzZXRzID0gc2hvdWxkQWRkVmlzdWFsT2Zmc2V0cyhkb21FbGVtZW50LCBpc0ZpeGVkU3RyYXRlZ3ksIG9mZnNldFBhcmVudCkgPyBnZXRWaXN1YWxPZmZzZXRzKGRvbUVsZW1lbnQpIDogY3JlYXRlQ29vcmRzKDApO1xuICBsZXQgeCA9IChjbGllbnRSZWN0LmxlZnQgKyB2aXN1YWxPZmZzZXRzLngpIC8gc2NhbGUueDtcbiAgbGV0IHkgPSAoY2xpZW50UmVjdC50b3AgKyB2aXN1YWxPZmZzZXRzLnkpIC8gc2NhbGUueTtcbiAgbGV0IHdpZHRoID0gY2xpZW50UmVjdC53aWR0aCAvIHNjYWxlLng7XG4gIGxldCBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodCAvIHNjYWxlLnk7XG4gIGlmIChkb21FbGVtZW50KSB7XG4gICAgY29uc3Qgd2luID0gZ2V0V2luZG93KGRvbUVsZW1lbnQpO1xuICAgIGNvbnN0IG9mZnNldFdpbiA9IG9mZnNldFBhcmVudCAmJiBpc0VsZW1lbnQob2Zmc2V0UGFyZW50KSA/IGdldFdpbmRvdyhvZmZzZXRQYXJlbnQpIDogb2Zmc2V0UGFyZW50O1xuICAgIGxldCBjdXJyZW50V2luID0gd2luO1xuICAgIGxldCBjdXJyZW50SUZyYW1lID0gZ2V0RnJhbWVFbGVtZW50KGN1cnJlbnRXaW4pO1xuICAgIHdoaWxlIChjdXJyZW50SUZyYW1lICYmIG9mZnNldFBhcmVudCAmJiBvZmZzZXRXaW4gIT09IGN1cnJlbnRXaW4pIHtcbiAgICAgIGNvbnN0IGlmcmFtZVNjYWxlID0gZ2V0U2NhbGUoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBpZnJhbWVSZWN0ID0gY3VycmVudElGcmFtZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBsZWZ0ID0gaWZyYW1lUmVjdC5sZWZ0ICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50TGVmdCArIHBhcnNlRmxvYXQoY3NzLnBhZGRpbmdMZWZ0KSkgKiBpZnJhbWVTY2FsZS54O1xuICAgICAgY29uc3QgdG9wID0gaWZyYW1lUmVjdC50b3AgKyAoY3VycmVudElGcmFtZS5jbGllbnRUb3AgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nVG9wKSkgKiBpZnJhbWVTY2FsZS55O1xuICAgICAgeCAqPSBpZnJhbWVTY2FsZS54O1xuICAgICAgeSAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgd2lkdGggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIGhlaWdodCAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgeCArPSBsZWZ0O1xuICAgICAgeSArPSB0b3A7XG4gICAgICBjdXJyZW50V2luID0gZ2V0V2luZG93KGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3Qoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfSk7XG59XG5cbi8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbi8vIGluY29ycmVjdCBmb3IgUlRMLlxuZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50LCByZWN0KSB7XG4gIGNvbnN0IGxlZnRTY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG4gIGlmICghcmVjdCkge1xuICAgIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgbGVmdFNjcm9sbDtcbiAgfVxuICByZXR1cm4gcmVjdC5sZWZ0ICsgbGVmdFNjcm9sbDtcbn1cblxuZnVuY3Rpb24gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCwgaWdub3JlU2Nyb2xsYmFyWCkge1xuICBpZiAoaWdub3JlU2Nyb2xsYmFyWCA9PT0gdm9pZCAwKSB7XG4gICAgaWdub3JlU2Nyb2xsYmFyWCA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGh0bWxSZWN0ID0gZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB4ID0gaHRtbFJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gKGlnbm9yZVNjcm9sbGJhclggPyAwIDpcbiAgLy8gUlRMIDxib2R5PiBzY3JvbGxiYXIuXG4gIGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50LCBodG1sUmVjdCkpO1xuICBjb25zdCB5ID0gaHRtbFJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcDtcbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QoX3JlZikge1xuICBsZXQge1xuICAgIGVsZW1lbnRzLFxuICAgIHJlY3QsXG4gICAgb2Zmc2V0UGFyZW50LFxuICAgIHN0cmF0ZWd5XG4gIH0gPSBfcmVmO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCB0b3BMYXllciA9IGVsZW1lbnRzID8gaXNUb3BMYXllcihlbGVtZW50cy5mbG9hdGluZykgOiBmYWxzZTtcbiAgaWYgKG9mZnNldFBhcmVudCA9PT0gZG9jdW1lbnRFbGVtZW50IHx8IHRvcExheWVyICYmIGlzRml4ZWQpIHtcbiAgICByZXR1cm4gcmVjdDtcbiAgfVxuICBsZXQgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIGxldCBzY2FsZSA9IGNyZWF0ZUNvb3JkcygxKTtcbiAgY29uc3Qgb2Zmc2V0cyA9IGNyZWF0ZUNvb3JkcygwKTtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgaWYgKGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgY29uc3Qgb2Zmc2V0UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQpO1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ID0gb2Zmc2V0UmVjdC54ICsgb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgPSBvZmZzZXRSZWN0LnkgKyBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH1cbiAgfVxuICBjb25zdCBodG1sT2Zmc2V0ID0gZG9jdW1lbnRFbGVtZW50ICYmICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCA/IGdldEhUTUxPZmZzZXQoZG9jdW1lbnRFbGVtZW50LCBzY3JvbGwsIHRydWUpIDogY3JlYXRlQ29vcmRzKDApO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiByZWN0LndpZHRoICogc2NhbGUueCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0ICogc2NhbGUueSxcbiAgICB4OiByZWN0LnggKiBzY2FsZS54IC0gc2Nyb2xsLnNjcm9sbExlZnQgKiBzY2FsZS54ICsgb2Zmc2V0cy54ICsgaHRtbE9mZnNldC54LFxuICAgIHk6IHJlY3QueSAqIHNjYWxlLnkgLSBzY3JvbGwuc2Nyb2xsVG9wICogc2NhbGUueSArIG9mZnNldHMueSArIGh0bWxPZmZzZXQueVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0cyhlbGVtZW50KSB7XG4gIHJldHVybiBBcnJheS5mcm9tKGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKSk7XG59XG5cbi8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGUuXG5mdW5jdGlvbiBnZXREb2N1bWVudFJlY3QoZWxlbWVudCkge1xuICBjb25zdCBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpO1xuICBjb25zdCBib2R5ID0gZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gIGNvbnN0IHdpZHRoID0gbWF4KGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGJvZHkuc2Nyb2xsV2lkdGgsIGJvZHkuY2xpZW50V2lkdGgpO1xuICBjb25zdCBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5LnNjcm9sbEhlaWdodCwgYm9keS5jbGllbnRIZWlnaHQpO1xuICBsZXQgeCA9IC1zY3JvbGwuc2Nyb2xsTGVmdCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCk7XG4gIGNvbnN0IHkgPSAtc2Nyb2xsLnNjcm9sbFRvcDtcbiAgaWYgKGdldENvbXB1dGVkU3R5bGUoYm9keSkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkuY2xpZW50V2lkdGgpIC0gd2lkdGg7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuICBsZXQgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICBsZXQgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIGxldCB4ID0gMDtcbiAgbGV0IHkgPSAwO1xuICBpZiAodmlzdWFsVmlld3BvcnQpIHtcbiAgICB3aWR0aCA9IHZpc3VhbFZpZXdwb3J0LndpZHRoO1xuICAgIGhlaWdodCA9IHZpc3VhbFZpZXdwb3J0LmhlaWdodDtcbiAgICBjb25zdCB2aXN1YWxWaWV3cG9ydEJhc2VkID0gaXNXZWJLaXQoKTtcbiAgICBpZiAoIXZpc3VhbFZpZXdwb3J0QmFzZWQgfHwgdmlzdWFsVmlld3BvcnRCYXNlZCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuY29uc3QgYWJzb2x1dGVPckZpeGVkID0gLyojX19QVVJFX18qL25ldyBTZXQoWydhYnNvbHV0ZScsICdmaXhlZCddKTtcbi8vIFJldHVybnMgdGhlIGlubmVyIGNsaWVudCByZWN0LCBzdWJ0cmFjdGluZyBzY3JvbGxiYXJzIGlmIHByZXNlbnQuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICBjb25zdCBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHRydWUsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgY29uc3QgdG9wID0gY2xpZW50UmVjdC50b3AgKyBlbGVtZW50LmNsaWVudFRvcDtcbiAgY29uc3QgbGVmdCA9IGNsaWVudFJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgY29uc3Qgc2NhbGUgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0U2NhbGUoZWxlbWVudCkgOiBjcmVhdGVDb29yZHMoMSk7XG4gIGNvbnN0IHdpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aCAqIHNjYWxlLng7XG4gIGNvbnN0IGhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0ICogc2NhbGUueTtcbiAgY29uc3QgeCA9IGxlZnQgKiBzY2FsZS54O1xuICBjb25zdCB5ID0gdG9wICogc2NhbGUueTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpIHtcbiAgbGV0IHJlY3Q7XG4gIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAndmlld3BvcnQnKSB7XG4gICAgcmVjdCA9IGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSk7XG4gIH0gZWxzZSBpZiAoY2xpcHBpbmdBbmNlc3RvciA9PT0gJ2RvY3VtZW50Jykge1xuICAgIHJlY3QgPSBnZXREb2N1bWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKTtcbiAgfSBlbHNlIGlmIChpc0VsZW1lbnQoY2xpcHBpbmdBbmNlc3RvcikpIHtcbiAgICByZWN0ID0gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHZpc3VhbE9mZnNldHMgPSBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpO1xuICAgIHJlY3QgPSB7XG4gICAgICB4OiBjbGlwcGluZ0FuY2VzdG9yLnggLSB2aXN1YWxPZmZzZXRzLngsXG4gICAgICB5OiBjbGlwcGluZ0FuY2VzdG9yLnkgLSB2aXN1YWxPZmZzZXRzLnksXG4gICAgICB3aWR0aDogY2xpcHBpbmdBbmNlc3Rvci53aWR0aCxcbiAgICAgIGhlaWdodDogY2xpcHBpbmdBbmNlc3Rvci5oZWlnaHRcbiAgICB9O1xuICB9XG4gIHJldHVybiByZWN0VG9DbGllbnRSZWN0KHJlY3QpO1xufVxuZnVuY3Rpb24gaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKGVsZW1lbnQsIHN0b3BOb2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICBpZiAocGFyZW50Tm9kZSA9PT0gc3RvcE5vZGUgfHwgIWlzRWxlbWVudChwYXJlbnROb2RlKSB8fCBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUocGFyZW50Tm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUocGFyZW50Tm9kZSkucG9zaXRpb24gPT09ICdmaXhlZCcgfHwgaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKHBhcmVudE5vZGUsIHN0b3BOb2RlKTtcbn1cblxuLy8gQSBcImNsaXBwaW5nIGFuY2VzdG9yXCIgaXMgYW4gYG92ZXJmbG93YCBlbGVtZW50IHdpdGggdGhlIGNoYXJhY3RlcmlzdGljIG9mXG4vLyBjbGlwcGluZyAob3IgaGlkaW5nKSBjaGlsZCBlbGVtZW50cy4gVGhpcyByZXR1cm5zIGFsbCBjbGlwcGluZyBhbmNlc3RvcnNcbi8vIG9mIHRoZSBnaXZlbiBlbGVtZW50IHVwIHRoZSB0cmVlLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzKGVsZW1lbnQsIGNhY2hlKSB7XG4gIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGNhY2hlLmdldChlbGVtZW50KTtcbiAgaWYgKGNhY2hlZFJlc3VsdCkge1xuICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gIH1cbiAgbGV0IHJlc3VsdCA9IGdldE92ZXJmbG93QW5jZXN0b3JzKGVsZW1lbnQsIFtdLCBmYWxzZSkuZmlsdGVyKGVsID0+IGlzRWxlbWVudChlbCkgJiYgZ2V0Tm9kZU5hbWUoZWwpICE9PSAnYm9keScpO1xuICBsZXQgY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgPSBudWxsO1xuICBjb25zdCBlbGVtZW50SXNGaXhlZCA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCc7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgd2hpbGUgKGlzRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7XG4gICAgY29uc3QgY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgPSBpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSk7XG4gICAgaWYgKCFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBjb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHNob3VsZERyb3BDdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmICFjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA6ICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBjb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAnc3RhdGljJyAmJiAhIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlICYmIGFic29sdXRlT3JGaXhlZC5oYXMoY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUucG9zaXRpb24pIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKGVsZW1lbnQsIGN1cnJlbnROb2RlKTtcbiAgICBpZiAoc2hvdWxkRHJvcEN1cnJlbnROb2RlKSB7XG4gICAgICAvLyBEcm9wIG5vbi1jb250YWluaW5nIGJsb2Nrcy5cbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoYW5jZXN0b3IgPT4gYW5jZXN0b3IgIT09IGN1cnJlbnROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVjb3JkIGxhc3QgY29udGFpbmluZyBibG9jayBmb3IgbmV4dCBpdGVyYXRpb24uXG4gICAgICBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IGNvbXB1dGVkU3R5bGU7XG4gICAgfVxuICAgIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShjdXJyZW50Tm9kZSk7XG4gIH1cbiAgY2FjaGUuc2V0KGVsZW1lbnQsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIEdldHMgdGhlIG1heGltdW0gYXJlYSB0aGF0IHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gZHVlIHRvIGFueSBudW1iZXIgb2Zcbi8vIGNsaXBwaW5nIGFuY2VzdG9ycy5cbmZ1bmN0aW9uIGdldENsaXBwaW5nUmVjdChfcmVmKSB7XG4gIGxldCB7XG4gICAgZWxlbWVudCxcbiAgICBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnksXG4gICAgc3RyYXRlZ3lcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGVsZW1lbnRDbGlwcGluZ0FuY2VzdG9ycyA9IGJvdW5kYXJ5ID09PSAnY2xpcHBpbmdBbmNlc3RvcnMnID8gaXNUb3BMYXllcihlbGVtZW50KSA/IFtdIDogZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzKGVsZW1lbnQsIHRoaXMuX2MpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgY29uc3QgY2xpcHBpbmdBbmNlc3RvcnMgPSBbLi4uZWxlbWVudENsaXBwaW5nQW5jZXN0b3JzLCByb290Qm91bmRhcnldO1xuICBjb25zdCBmaXJzdENsaXBwaW5nQW5jZXN0b3IgPSBjbGlwcGluZ0FuY2VzdG9yc1swXTtcbiAgY29uc3QgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdBbmNlc3RvcnMucmVkdWNlKChhY2NSZWN0LCBjbGlwcGluZ0FuY2VzdG9yKSA9PiB7XG4gICAgY29uc3QgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGZpcnN0Q2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpKTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQsXG4gICAgaGVpZ2h0OiBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcCxcbiAgICB4OiBjbGlwcGluZ1JlY3QubGVmdCxcbiAgICB5OiBjbGlwcGluZ1JlY3QudG9wXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERpbWVuc2lvbnMoZWxlbWVudCkge1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH0gPSBnZXRDc3NEaW1lbnNpb25zKGVsZW1lbnQpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudChlbGVtZW50LCBvZmZzZXRQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgY29uc3QgaXNGaXhlZCA9IHN0cmF0ZWd5ID09PSAnZml4ZWQnO1xuICBjb25zdCByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHRydWUsIGlzRml4ZWQsIG9mZnNldFBhcmVudCk7XG4gIGxldCBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgY29uc3Qgb2Zmc2V0cyA9IGNyZWF0ZUNvb3JkcygwKTtcblxuICAvLyBJZiB0aGUgPGJvZHk+IHNjcm9sbGJhciBhcHBlYXJzIG9uIHRoZSBsZWZ0IChlLmcuIFJUTCBzeXN0ZW1zKS4gVXNlXG4gIC8vIEZpcmVmb3ggd2l0aCBsYXlvdXQuc2Nyb2xsYmFyLnNpZGUgPSAzIGluIGFib3V0OmNvbmZpZyB0byB0ZXN0IHRoaXMuXG4gIGZ1bmN0aW9uIHNldExlZnRSVExTY3JvbGxiYXJPZmZzZXQoKSB7XG4gICAgb2Zmc2V0cy54ID0gZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQpO1xuICB9XG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50KSB7XG4gICAgICBjb25zdCBvZmZzZXRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgICAgIG9mZnNldHMueCA9IG9mZnNldFJlY3QueCArIG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ID0gb2Zmc2V0UmVjdC55ICsgb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgc2V0TGVmdFJUTFNjcm9sbGJhck9mZnNldCgpO1xuICAgIH1cbiAgfVxuICBpZiAoaXNGaXhlZCAmJiAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgc2V0TGVmdFJUTFNjcm9sbGJhck9mZnNldCgpO1xuICB9XG4gIGNvbnN0IGh0bWxPZmZzZXQgPSBkb2N1bWVudEVsZW1lbnQgJiYgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkID8gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIGNvbnN0IHggPSByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCAtIGh0bWxPZmZzZXQueDtcbiAgY29uc3QgeSA9IHJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcCAtIG9mZnNldHMueSAtIGh0bWxPZmZzZXQueTtcbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1N0YXRpY1Bvc2l0aW9uZWQoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYyc7XG59XG5cbmZ1bmN0aW9uIGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpIHtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAocG9seWZpbGwpIHtcbiAgICByZXR1cm4gcG9seWZpbGwoZWxlbWVudCk7XG4gIH1cbiAgbGV0IHJhd09mZnNldFBhcmVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXG4gIC8vIEZpcmVmb3ggcmV0dXJucyB0aGUgPGh0bWw+IGVsZW1lbnQgYXMgdGhlIG9mZnNldFBhcmVudCBpZiBpdCdzIG5vbi1zdGF0aWMsXG4gIC8vIHdoaWxlIENocm9tZSBhbmQgU2FmYXJpIHJldHVybiB0aGUgPGJvZHk+IGVsZW1lbnQuIFRoZSA8Ym9keT4gZWxlbWVudCBtdXN0XG4gIC8vIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUgY29ycmVjdCBjYWxjdWxhdGlvbnMgZXZlbiBpZiB0aGUgPGh0bWw+IGVsZW1lbnQgaXNcbiAgLy8gbm9uLXN0YXRpYy5cbiAgaWYgKGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSA9PT0gcmF3T2Zmc2V0UGFyZW50KSB7XG4gICAgcmF3T2Zmc2V0UGFyZW50ID0gcmF3T2Zmc2V0UGFyZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuICByZXR1cm4gcmF3T2Zmc2V0UGFyZW50O1xufVxuXG4vLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgaWYgKGlzVG9wTGF5ZXIoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIGxldCBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICAgIHdoaWxlIChzdmdPZmZzZXRQYXJlbnQgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICBpZiAoaXNFbGVtZW50KHN2Z09mZnNldFBhcmVudCkgJiYgIWlzU3RhdGljUG9zaXRpb25lZChzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiBzdmdPZmZzZXRQYXJlbnQ7XG4gICAgICB9XG4gICAgICBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKHN2Z09mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIHJldHVybiB3aW47XG4gIH1cbiAgbGV0IG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpO1xuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCwgcG9seWZpbGwpO1xuICB9XG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgaXNMYXN0VHJhdmVyc2FibGVOb2RlKG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkgJiYgIWlzQ29udGFpbmluZ0Jsb2NrKG9mZnNldFBhcmVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbjtcbn1cblxuY29uc3QgZ2V0RWxlbWVudFJlY3RzID0gYXN5bmMgZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgZ2V0T2Zmc2V0UGFyZW50Rm4gPSB0aGlzLmdldE9mZnNldFBhcmVudCB8fCBnZXRPZmZzZXRQYXJlbnQ7XG4gIGNvbnN0IGdldERpbWVuc2lvbnNGbiA9IHRoaXMuZ2V0RGltZW5zaW9ucztcbiAgY29uc3QgZmxvYXRpbmdEaW1lbnNpb25zID0gYXdhaXQgZ2V0RGltZW5zaW9uc0ZuKGRhdGEuZmxvYXRpbmcpO1xuICByZXR1cm4ge1xuICAgIHJlZmVyZW5jZTogZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoZGF0YS5yZWZlcmVuY2UsIGF3YWl0IGdldE9mZnNldFBhcmVudEZuKGRhdGEuZmxvYXRpbmcpLCBkYXRhLnN0cmF0ZWd5KSxcbiAgICBmbG9hdGluZzoge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICB3aWR0aDogZmxvYXRpbmdEaW1lbnNpb25zLndpZHRoLFxuICAgICAgaGVpZ2h0OiBmbG9hdGluZ0RpbWVuc2lvbnMuaGVpZ2h0XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNSVEwoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5kaXJlY3Rpb24gPT09ICdydGwnO1xufVxuXG5jb25zdCBwbGF0Zm9ybSA9IHtcbiAgY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QsXG4gIGdldERvY3VtZW50RWxlbWVudCxcbiAgZ2V0Q2xpcHBpbmdSZWN0LFxuICBnZXRPZmZzZXRQYXJlbnQsXG4gIGdldEVsZW1lbnRSZWN0cyxcbiAgZ2V0Q2xpZW50UmVjdHMsXG4gIGdldERpbWVuc2lvbnMsXG4gIGdldFNjYWxlLFxuICBpc0VsZW1lbnQsXG4gIGlzUlRMXG59O1xuXG5mdW5jdGlvbiByZWN0c0FyZUVxdWFsKGEsIGIpIHtcbiAgcmV0dXJuIGEueCA9PT0gYi54ICYmIGEueSA9PT0gYi55ICYmIGEud2lkdGggPT09IGIud2lkdGggJiYgYS5oZWlnaHQgPT09IGIuaGVpZ2h0O1xufVxuXG4vLyBodHRwczovL3NhbXRob3IuYXUvMjAyMS9vYnNlcnZpbmctZG9tL1xuZnVuY3Rpb24gb2JzZXJ2ZU1vdmUoZWxlbWVudCwgb25Nb3ZlKSB7XG4gIGxldCBpbyA9IG51bGw7XG4gIGxldCB0aW1lb3V0SWQ7XG4gIGNvbnN0IHJvb3QgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgdmFyIF9pbztcbiAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAoX2lvID0gaW8pID09IG51bGwgfHwgX2lvLmRpc2Nvbm5lY3QoKTtcbiAgICBpbyA9IG51bGw7XG4gIH1cbiAgZnVuY3Rpb24gcmVmcmVzaChza2lwLCB0aHJlc2hvbGQpIHtcbiAgICBpZiAoc2tpcCA9PT0gdm9pZCAwKSB7XG4gICAgICBza2lwID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aHJlc2hvbGQgPT09IHZvaWQgMCkge1xuICAgICAgdGhyZXNob2xkID0gMTtcbiAgICB9XG4gICAgY2xlYW51cCgpO1xuICAgIGNvbnN0IGVsZW1lbnRSZWN0Rm9yUm9vdE1hcmdpbiA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qge1xuICAgICAgbGVmdCxcbiAgICAgIHRvcCxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0XG4gICAgfSA9IGVsZW1lbnRSZWN0Rm9yUm9vdE1hcmdpbjtcbiAgICBpZiAoIXNraXApIHtcbiAgICAgIG9uTW92ZSgpO1xuICAgIH1cbiAgICBpZiAoIXdpZHRoIHx8ICFoZWlnaHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5zZXRUb3AgPSBmbG9vcih0b3ApO1xuICAgIGNvbnN0IGluc2V0UmlnaHQgPSBmbG9vcihyb290LmNsaWVudFdpZHRoIC0gKGxlZnQgKyB3aWR0aCkpO1xuICAgIGNvbnN0IGluc2V0Qm90dG9tID0gZmxvb3Iocm9vdC5jbGllbnRIZWlnaHQgLSAodG9wICsgaGVpZ2h0KSk7XG4gICAgY29uc3QgaW5zZXRMZWZ0ID0gZmxvb3IobGVmdCk7XG4gICAgY29uc3Qgcm9vdE1hcmdpbiA9IC1pbnNldFRvcCArIFwicHggXCIgKyAtaW5zZXRSaWdodCArIFwicHggXCIgKyAtaW5zZXRCb3R0b20gKyBcInB4IFwiICsgLWluc2V0TGVmdCArIFwicHhcIjtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcm9vdE1hcmdpbixcbiAgICAgIHRocmVzaG9sZDogbWF4KDAsIG1pbigxLCB0aHJlc2hvbGQpKSB8fCAxXG4gICAgfTtcbiAgICBsZXQgaXNGaXJzdFVwZGF0ZSA9IHRydWU7XG4gICAgZnVuY3Rpb24gaGFuZGxlT2JzZXJ2ZShlbnRyaWVzKSB7XG4gICAgICBjb25zdCByYXRpbyA9IGVudHJpZXNbMF0uaW50ZXJzZWN0aW9uUmF0aW87XG4gICAgICBpZiAocmF0aW8gIT09IHRocmVzaG9sZCkge1xuICAgICAgICBpZiAoIWlzRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgICByZXR1cm4gcmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmF0aW8pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgcmVmZXJlbmNlIGlzIGNsaXBwZWQsIHRoZSByYXRpbyBpcyAwLiBUaHJvdHRsZSB0aGUgcmVmcmVzaFxuICAgICAgICAgIC8vIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBvZiB1cGRhdGVzLlxuICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgcmVmcmVzaChmYWxzZSwgMWUtNyk7XG4gICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVmcmVzaChmYWxzZSwgcmF0aW8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmF0aW8gPT09IDEgJiYgIXJlY3RzQXJlRXF1YWwoZWxlbWVudFJlY3RGb3JSb290TWFyZ2luLCBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSkge1xuICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgZXZlbiB0aG91Z2ggdGhlIHJhdGlvIGlzIHJlcG9ydGVkIGFzIDEsIHRoZVxuICAgICAgICAvLyBlbGVtZW50IGlzIG5vdCBhY3R1YWxseSBmdWxseSB3aXRoaW4gdGhlIEludGVyc2VjdGlvbk9ic2VydmVyJ3Mgcm9vdFxuICAgICAgICAvLyBhcmVhIGFueW1vcmUuIFRoaXMgY2FuIGhhcHBlbiB1bmRlciBwZXJmb3JtYW5jZSBjb25zdHJhaW50cy4gVGhpcyBtYXlcbiAgICAgICAgLy8gYmUgYSBidWcgaW4gdGhlIGJyb3dzZXIncyBJbnRlcnNlY3Rpb25PYnNlcnZlciBpbXBsZW1lbnRhdGlvbi4gVG9cbiAgICAgICAgLy8gd29yayBhcm91bmQgdGhpcywgd2UgY29tcGFyZSB0aGUgZWxlbWVudCdzIGJvdW5kaW5nIHJlY3Qgbm93IHdpdGhcbiAgICAgICAgLy8gd2hhdCBpdCB3YXMgYXQgdGhlIHRpbWUgd2UgY3JlYXRlZCB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuIElmIHRoZXlcbiAgICAgICAgLy8gYXJlIG5vdCBlcXVhbCB0aGVuIHRoZSBlbGVtZW50IG1vdmVkLCBzbyB3ZSByZWZyZXNoLlxuICAgICAgICByZWZyZXNoKCk7XG4gICAgICB9XG4gICAgICBpc0ZpcnN0VXBkYXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gT2xkZXIgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCBhIGBkb2N1bWVudGAgYXMgdGhlIHJvb3QgYW5kIHdpbGwgdGhyb3cgYW5cbiAgICAvLyBlcnJvci5cbiAgICB0cnkge1xuICAgICAgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlT2JzZXJ2ZSwge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAvLyBIYW5kbGUgPGlmcmFtZT5zXG4gICAgICAgIHJvb3Q6IHJvb3Qub3duZXJEb2N1bWVudFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoX2UpIHtcbiAgICAgIGlvID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGhhbmRsZU9ic2VydmUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpby5vYnNlcnZlKGVsZW1lbnQpO1xuICB9XG4gIHJlZnJlc2godHJ1ZSk7XG4gIHJldHVybiBjbGVhbnVwO1xufVxuXG4vKipcbiAqIEF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgd2hlbiBuZWNlc3NhcnkuXG4gKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgZmxvYXRpbmcgZWxlbWVudCBpcyBtb3VudGVkIG9uIHRoZSBET00gb3JcbiAqIHZpc2libGUgb24gdGhlIHNjcmVlbi5cbiAqIEByZXR1cm5zIGNsZWFudXAgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgaW52b2tlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzXG4gKiByZW1vdmVkIGZyb20gdGhlIERPTSBvciBoaWRkZW4gZnJvbSB0aGUgc2NyZWVuLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9VcGRhdGVcbiAqL1xuZnVuY3Rpb24gYXV0b1VwZGF0ZShyZWZlcmVuY2UsIGZsb2F0aW5nLCB1cGRhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBjb25zdCB7XG4gICAgYW5jZXN0b3JTY3JvbGwgPSB0cnVlLFxuICAgIGFuY2VzdG9yUmVzaXplID0gdHJ1ZSxcbiAgICBlbGVtZW50UmVzaXplID0gdHlwZW9mIFJlc2l6ZU9ic2VydmVyID09PSAnZnVuY3Rpb24nLFxuICAgIGxheW91dFNoaWZ0ID0gdHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyID09PSAnZnVuY3Rpb24nLFxuICAgIGFuaW1hdGlvbkZyYW1lID0gZmFsc2VcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJlZmVyZW5jZUVsID0gdW53cmFwRWxlbWVudChyZWZlcmVuY2UpO1xuICBjb25zdCBhbmNlc3RvcnMgPSBhbmNlc3RvclNjcm9sbCB8fCBhbmNlc3RvclJlc2l6ZSA/IFsuLi4ocmVmZXJlbmNlRWwgPyBnZXRPdmVyZmxvd0FuY2VzdG9ycyhyZWZlcmVuY2VFbCkgOiBbXSksIC4uLmdldE92ZXJmbG93QW5jZXN0b3JzKGZsb2F0aW5nKV0gOiBbXTtcbiAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgIGFuY2VzdG9yU2Nyb2xsICYmIGFuY2VzdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZVxuICAgIH0pO1xuICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gIH0pO1xuICBjb25zdCBjbGVhbnVwSW8gPSByZWZlcmVuY2VFbCAmJiBsYXlvdXRTaGlmdCA/IG9ic2VydmVNb3ZlKHJlZmVyZW5jZUVsLCB1cGRhdGUpIDogbnVsbDtcbiAgbGV0IHJlb2JzZXJ2ZUZyYW1lID0gLTE7XG4gIGxldCByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gIGlmIChlbGVtZW50UmVzaXplKSB7XG4gICAgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoX3JlZiA9PiB7XG4gICAgICBsZXQgW2ZpcnN0RW50cnldID0gX3JlZjtcbiAgICAgIGlmIChmaXJzdEVudHJ5ICYmIGZpcnN0RW50cnkudGFyZ2V0ID09PSByZWZlcmVuY2VFbCAmJiByZXNpemVPYnNlcnZlcikge1xuICAgICAgICAvLyBQcmV2ZW50IHVwZGF0ZSBsb29wcyB3aGVuIHVzaW5nIHRoZSBgc2l6ZWAgbWlkZGxld2FyZS5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8xNzQwXG4gICAgICAgIHJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZShmbG9hdGluZyk7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJlb2JzZXJ2ZUZyYW1lKTtcbiAgICAgICAgcmVvYnNlcnZlRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIHZhciBfcmVzaXplT2JzZXJ2ZXI7XG4gICAgICAgICAgKF9yZXNpemVPYnNlcnZlciA9IHJlc2l6ZU9ic2VydmVyKSA9PSBudWxsIHx8IF9yZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB1cGRhdGUoKTtcbiAgICB9KTtcbiAgICBpZiAocmVmZXJlbmNlRWwgJiYgIWFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHJlZmVyZW5jZUVsKTtcbiAgICB9XG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShmbG9hdGluZyk7XG4gIH1cbiAgbGV0IGZyYW1lSWQ7XG4gIGxldCBwcmV2UmVmUmVjdCA9IGFuaW1hdGlvbkZyYW1lID8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHJlZmVyZW5jZSkgOiBudWxsO1xuICBpZiAoYW5pbWF0aW9uRnJhbWUpIHtcbiAgICBmcmFtZUxvb3AoKTtcbiAgfVxuICBmdW5jdGlvbiBmcmFtZUxvb3AoKSB7XG4gICAgY29uc3QgbmV4dFJlZlJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKTtcbiAgICBpZiAocHJldlJlZlJlY3QgJiYgIXJlY3RzQXJlRXF1YWwocHJldlJlZlJlY3QsIG5leHRSZWZSZWN0KSkge1xuICAgICAgdXBkYXRlKCk7XG4gICAgfVxuICAgIHByZXZSZWZSZWN0ID0gbmV4dFJlZlJlY3Q7XG4gICAgZnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShmcmFtZUxvb3ApO1xuICB9XG4gIHVwZGF0ZSgpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIHZhciBfcmVzaXplT2JzZXJ2ZXIyO1xuICAgIGFuY2VzdG9ycy5mb3JFYWNoKGFuY2VzdG9yID0+IHtcbiAgICAgIGFuY2VzdG9yU2Nyb2xsICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZSk7XG4gICAgICBhbmNlc3RvclJlc2l6ZSAmJiBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGUpO1xuICAgIH0pO1xuICAgIGNsZWFudXBJbyA9PSBudWxsIHx8IGNsZWFudXBJbygpO1xuICAgIChfcmVzaXplT2JzZXJ2ZXIyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyMi5kaXNjb25uZWN0KCk7XG4gICAgcmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICAgIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoZnJhbWVJZCk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHdpdGggYW4gb2JqZWN0IG9mIG92ZXJmbG93IHNpZGUgb2Zmc2V0cyB0aGF0IGRldGVybWluZSBob3cgbXVjaCB0aGVcbiAqIGVsZW1lbnQgaXMgb3ZlcmZsb3dpbmcgYSBnaXZlbiBjbGlwcGluZyBib3VuZGFyeSBvbiBlYWNoIHNpZGUuXG4gKiAtIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGJvdW5kYXJ5IGJ5IHRoYXQgbnVtYmVyIG9mIHBpeGVsc1xuICogLSBuZWdhdGl2ZSA9IGhvdyBtYW55IHBpeGVscyBsZWZ0IGJlZm9yZSBpdCB3aWxsIG92ZXJmbG93XG4gKiAtIDAgPSBsaWVzIGZsdXNoIHdpdGggdGhlIGJvdW5kYXJ5XG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZGV0ZWN0T3ZlcmZsb3dcbiAqL1xuY29uc3QgZGV0ZWN0T3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyQxO1xuXG4vKipcbiAqIE1vZGlmaWVzIHRoZSBwbGFjZW1lbnQgYnkgdHJhbnNsYXRpbmcgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYWxvbmcgdGhlXG4gKiBzcGVjaWZpZWQgYXhlcy5cbiAqIEEgbnVtYmVyIChzaG9ydGhhbmQgZm9yIGBtYWluQXhpc2Agb3IgZGlzdGFuY2UpLCBvciBhbiBheGVzIGNvbmZpZ3VyYXRpb25cbiAqIG9iamVjdCBtYXkgYmUgcGFzc2VkLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL29mZnNldFxuICovXG5jb25zdCBvZmZzZXQgPSBvZmZzZXQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgY2hvb3NpbmcgdGhlIHBsYWNlbWVudFxuICogdGhhdCBoYXMgdGhlIG1vc3Qgc3BhY2UgYXZhaWxhYmxlIGF1dG9tYXRpY2FsbHksIHdpdGhvdXQgbmVlZGluZyB0byBzcGVjaWZ5IGFcbiAqIHByZWZlcnJlZCBwbGFjZW1lbnQuIEFsdGVybmF0aXZlIHRvIGBmbGlwYC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hdXRvUGxhY2VtZW50XG4gKi9cbmNvbnN0IGF1dG9QbGFjZW1lbnQgPSBhdXRvUGxhY2VtZW50JDE7XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IHNoaWZ0aW5nIGl0IGluIG9yZGVyIHRvXG4gKiBrZWVwIGl0IGluIHZpZXcgd2hlbiBpdCB3aWxsIG92ZXJmbG93IHRoZSBjbGlwcGluZyBib3VuZGFyeS5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaGlmdFxuICovXG5jb25zdCBzaGlmdCA9IHNoaWZ0JDE7XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGZsaXBwaW5nIHRoZSBgcGxhY2VtZW50YFxuICogaW4gb3JkZXIgdG8ga2VlcCBpdCBpbiB2aWV3IHdoZW4gdGhlIHByZWZlcnJlZCBwbGFjZW1lbnQocykgd2lsbCBvdmVyZmxvdyB0aGVcbiAqIGNsaXBwaW5nIGJvdW5kYXJ5LiBBbHRlcm5hdGl2ZSB0byBgYXV0b1BsYWNlbWVudGAuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZmxpcFxuICovXG5jb25zdCBmbGlwID0gZmxpcCQxO1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCDigJRcbiAqIGZvciBpbnN0YW5jZSwgcHJldmVudCBpdCBmcm9tIG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyBib3VuZGFyeSBvciBtYXRjaCB0aGVcbiAqIHdpZHRoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaXplXG4gKi9cbmNvbnN0IHNpemUgPSBzaXplJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBoaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50IGluIGFwcGxpY2FibGUgc2l0dWF0aW9ucywgc3VjaCBhc1xuICogd2hlbiBpdCBpcyBub3QgaW4gdGhlIHNhbWUgY2xpcHBpbmcgY29udGV4dCBhcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaGlkZVxuICovXG5jb25zdCBoaWRlID0gaGlkZSQxO1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gcG9zaXRpb24gYW4gaW5uZXIgZWxlbWVudCBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBzbyB0aGF0IGl0XG4gKiBhcHBlYXJzIGNlbnRlcmVkIHRvIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hcnJvd1xuICovXG5jb25zdCBhcnJvdyA9IGFycm93JDE7XG5cbi8qKlxuICogUHJvdmlkZXMgaW1wcm92ZWQgcG9zaXRpb25pbmcgZm9yIGlubGluZSByZWZlcmVuY2UgZWxlbWVudHMgdGhhdCBjYW4gc3BhblxuICogb3ZlciBtdWx0aXBsZSBsaW5lcywgc3VjaCBhcyBoeXBlcmxpbmtzIG9yIHJhbmdlIHNlbGVjdGlvbnMuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaW5saW5lXG4gKi9cbmNvbnN0IGlubGluZSA9IGlubGluZSQxO1xuXG4vKipcbiAqIEJ1aWx0LWluIGBsaW1pdGVyYCB0aGF0IHdpbGwgc3RvcCBgc2hpZnQoKWAgYXQgYSBjZXJ0YWluIHBvaW50LlxuICovXG5jb25zdCBsaW1pdFNoaWZ0ID0gbGltaXRTaGlmdCQxO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyB0aGF0IHdpbGwgcGxhY2UgdGhlIGZsb2F0aW5nIGVsZW1lbnRcbiAqIG5leHQgdG8gYSBnaXZlbiByZWZlcmVuY2UgZWxlbWVudC5cbiAqL1xuY29uc3QgY29tcHV0ZVBvc2l0aW9uID0gKHJlZmVyZW5jZSwgZmxvYXRpbmcsIG9wdGlvbnMpID0+IHtcbiAgLy8gVGhpcyBjYWNoZXMgdGhlIGV4cGVuc2l2ZSBgZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzYCBmdW5jdGlvbiBzbyB0aGF0XG4gIC8vIG11bHRpcGxlIGxpZmVjeWNsZSByZXNldHMgcmUtdXNlIHRoZSBzYW1lIHJlc3VsdC4gSXQgb25seSBsaXZlcyBmb3IgYVxuICAvLyBzaW5nbGUgY2FsbC4gSWYgb3RoZXIgZnVuY3Rpb25zIGJlY29tZSBleHBlbnNpdmUsIHdlIGNhbiBhZGQgdGhlbSBhcyB3ZWxsLlxuICBjb25zdCBjYWNoZSA9IG5ldyBNYXAoKTtcbiAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IHtcbiAgICBwbGF0Zm9ybSxcbiAgICAuLi5vcHRpb25zXG4gIH07XG4gIGNvbnN0IHBsYXRmb3JtV2l0aENhY2hlID0ge1xuICAgIC4uLm1lcmdlZE9wdGlvbnMucGxhdGZvcm0sXG4gICAgX2M6IGNhY2hlXG4gIH07XG4gIHJldHVybiBjb21wdXRlUG9zaXRpb24kMShyZWZlcmVuY2UsIGZsb2F0aW5nLCB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucyxcbiAgICBwbGF0Zm9ybTogcGxhdGZvcm1XaXRoQ2FjaGVcbiAgfSk7XG59O1xuXG5leHBvcnQgeyBhcnJvdywgYXV0b1BsYWNlbWVudCwgYXV0b1VwZGF0ZSwgY29tcHV0ZVBvc2l0aW9uLCBkZXRlY3RPdmVyZmxvdywgZmxpcCwgaGlkZSwgaW5saW5lLCBsaW1pdFNoaWZ0LCBvZmZzZXQsIHBsYXRmb3JtLCBzaGlmdCwgc2l6ZSB9O1xuIiwiaW1wb3J0IHsgYXV0b1VwZGF0ZSwgY29tcHV0ZVBvc2l0aW9uIH0gZnJvbSBcIkBmbG9hdGluZy11aS9kb21cIjtcblxuZXhwb3J0IGNvbnN0IFFVSUNLX0VWRU5UID0geyBjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH07XG5leHBvcnQgY29uc3QgSVNfQlJPV1NFUiA9XG5cdHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiO1xuXG4vLyBUT0RPOiBEb2N1bWVudGF0aW9uIGZvciBwcmV0dHlOdW1iZXJcbmxldCBJTlRMX05VTTogSW50bC5OdW1iZXJGb3JtYXQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcHJldHR5TnVtYmVyKG51bWJlcjogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdGlmICghSU5UTF9OVU0pXG5cdFx0SU5UTF9OVU0gPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXG5cdFx0XHQoSVNfQlJPV1NFUiAmJiBhdHRyKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgXCJsYW5nXCIpKSB8fCBcIm5vXCIsXG5cdFx0KTtcblx0cmV0dXJuIElOVExfTlVNLmZvcm1hdChOdW1iZXIobnVtYmVyKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZTxUIGV4dGVuZHMgdW5rbm93bltdPihcblx0Y2FsbGJhY2s6ICguLi5hcmdzOiBUKSA9PiB2b2lkLFxuXHRkZWxheTogbnVtYmVyLFxuKSB7XG5cdGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cblx0cmV0dXJuICguLi5hcmdzOiBUKSA9PiB7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0XHR0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gY2FsbGJhY2soLi4uYXJncyksIGRlbGF5KTtcblx0fTtcbn1cblxuLyoqXG4gKiBhdHRyXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IGdldCwgc2V0IGFuZCByZW1vdmUgYXR0cmlidXRlc1xuICogQHBhcmFtIGVsIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIG5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lIHRvIGdldCwgc2V0IG9yIHJlbW92ZSwgb3IgYSBvYmplY3QgdG8gc2V0IG11bHRpcGxlIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB2YWx1ZSBBIHZhbGlkIGF0dHJpYnV0ZSB2YWx1ZSBvciBudWxsIHRvIHJlbW92ZSBhdHRyaWJ1dGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dHIoXG5cdGVsOiBFbGVtZW50LFxuXHRuYW1lOiBzdHJpbmcsXG5cdHZhbHVlPzogc3RyaW5nIHwgbnVsbCxcbik6IHN0cmluZyB8IG51bGwge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKSA/PyBudWxsOyAvLyBGYWxsYmFjayB0byBudWxsIG9ubHkgaWYgZWwgaXMgdW5kZWZpbmVkXG5cdGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuXHRyZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiB1c2VJZFxuICogQHJldHVybiBBIGdlbmVyYXRlZCB1bmlxdWUgSURcbiAqL1xubGV0IGlkID0gMDtcbmNvbnN0IFVVSUQgPSBgJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDUpfWA7XG5leHBvcnQgZnVuY3Rpb24gdXNlSWQoZWw6IEVsZW1lbnQpIHtcblx0aWYgKCFlbC5pZCkgZWwuaWQgPSBgJHtVVUlEfSR7KytpZH1gO1xuXHRyZXR1cm4gZWwuaWQ7XG59XG5cbi8vIEludGVybmFsIGhlbHBlciBmb3Igb24gLyBvZmZcbmNvbnN0IGV2ZW50cyA9IChcblx0YWN0aW9uOiBcImFkZFwiIHwgXCJyZW1vdmVcIixcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Wy4uLnJlc3RdOiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPiwgLy8gU3ByZWF0IHRvIG1ha2UgYSBjb3B5IG9mIHRoZSBhcnJheVxuKTogdm9pZCA9PiB7XG5cdGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuXHRcdHJlc3RbMF0gPSB0eXBlO1xuXHRcdGVsZW1lbnRbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXSguLi5yZXN0KTtcblx0fVxufTtcblxuLyoqXG4gKiBvblxuICogQHBhcmFtIGVsZW1lbnQgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gdHlwZXMgQSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGV2ZW50IHR5cGVzXG4gKiBAcGFyYW0gbGlzdGVuZXIgQW4gZXZlbnQgbGlzdGVuZXIgZnVuY3Rpb24gb3IgbGlzdGVuZXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBvbiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4ge1xuXHRpZiAoVU5CSU5EICYmIChlbGVtZW50ID09PSB3aW5kb3cgfHwgZWxlbWVudCA9PT0gZG9jdW1lbnQpKVxuXHRcdFVOQklORC5wdXNoKCgpID0+IG9mZihlbGVtZW50LCAuLi5yZXN0KSk7XG5cdGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbn07XG5cbi8qKlxuICogb2ZmXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9mZiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBXaW5kb3cge1xuXHRcdF9tdGRzVW5iaW5kRXZlbnRzPzogTWFwPHN0cmluZywgQXJyYXk8KCkgPT4gdm9pZD4+O1xuXHR9XG59XG5cbi8qKlxuICogb25Mb2FkZWRcbiAqIEBkZXNjcmlwdGlvbiBSdW5zIGEgY2FsbGJhY2sgd2hlbiB3aW5kb3cgaXMgbG9hZGVkIGluIGJyb3dzZXIsIGFuZCBlbnN1cmVzIGV2ZW50cyBhcmUgdW5ib3VuZCBpZiBob3QgcmVsb2FkaW5nXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHJ1biB3aGVuIHRoZSBwYWdlIGlzIHJlYWR5XG4gKi9cbmxldCBVTkJJTkQ6IEFycmF5PCgpID0+IHZvaWQ+IHwgbnVsbCA9IG51bGw7XG5leHBvcnQgY29uc3Qgb25Mb2FkZWQgPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcblx0aWYgKCFJU19CUk9XU0VSKSByZXR1cm47XG5cdGlmICghd2luZG93Ll9tdGRzVW5iaW5kRXZlbnRzKSB3aW5kb3cuX210ZHNVbmJpbmRFdmVudHMgPSBuZXcgTWFwKCk7XG5cblx0Y29uc3QgcnVuID0gKCkgPT5cblx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0Y29uc3Qga2V5ID0gU3RyaW5nKGNhbGxiYWNrKS5yZXBsYWNlKC8oXFxufFxccykvZywgXCJcIik7XG5cdFx0XHR3aW5kb3cuX210ZHNVbmJpbmRFdmVudHM/LmdldChrZXkpPy5mb3JFYWNoKCh1bmJpbmQpID0+IHtcblx0XHRcdFx0dW5iaW5kKCk7IC8vIFVuYmluZCBwcmV2aW91cyBldmVudHNcblx0XHRcdH0pO1xuXHRcdFx0VU5CSU5EID0gW107IC8vIFByZXBhcmUgdG8gbGlzdGVuIGZvciBuZXdseSBib3VuZCBldmVudHNcblx0XHRcdGNhbGxiYWNrKCk7IC8vIFJ1biBiaW5kaW5nXG5cdFx0XHR3aW5kb3cuX210ZHNVbmJpbmRFdmVudHM/LnNldChrZXksIFVOQklORD8uc2xpY2UoMCkpOyAvLyBTdG9yZSBmb3IgbGF0ZXIgdW5iaW5kaW5nXG5cdFx0XHRVTkJJTkQgPSBudWxsOyAvLyBTdG9wIGxpc3RlbmluZyBmb3IgbmV3bHkgYm91bmQgZXZlbnRzXG5cdFx0fSk7XG5cblx0aWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikgcnVuKCk7XG5cdGVsc2Ugb24od2luZG93LCBcImxvYWRcIiwgcnVuKTtcbn07XG5cbmNvbnN0IEFOQ0hPUkVEID0gbmV3IFdlYWtNYXA8RWxlbWVudCwgUmV0dXJuVHlwZTx0eXBlb2YgYXV0b1VwZGF0ZT4+KCk7XG5leHBvcnQgZnVuY3Rpb24gYW5jaG9yUG9zaXRpb24oXG5cdHRhcmdldDogSFRNTEVsZW1lbnQsXG5cdGFuY2hvcjogZmFsc2UgfCBFbGVtZW50LFxuXHRvcHRpb25zPzogUGFyYW1ldGVyczx0eXBlb2YgY29tcHV0ZVBvc2l0aW9uPlsyXSxcbikge1xuXHRBTkNIT1JFRC5nZXQodGFyZ2V0KT8uKCk7IC8vIFVuYmluZCBwcmV2aW91cyBhbmNob3IgcG9zaXRpb25cblx0QU5DSE9SRUQuZGVsZXRlKHRhcmdldCk7XG5cblx0aWYgKGFuY2hvcilcblx0XHRBTkNIT1JFRC5zZXQoXG5cdFx0XHR0YXJnZXQsXG5cdFx0XHRhdXRvVXBkYXRlKGFuY2hvciwgdGFyZ2V0LCAoKSA9PiB7XG5cdFx0XHRcdGlmICghdGFyZ2V0LmlzQ29ubmVjdGVkIHx8ICFhbmNob3IuaXNDb25uZWN0ZWQgfHwgdGFyZ2V0LmhpZGRlbilcblx0XHRcdFx0XHRyZXR1cm4gYW5jaG9yUG9zaXRpb24odGFyZ2V0LCBmYWxzZSk7XG5cdFx0XHRcdGNvbXB1dGVQb3NpdGlvbihhbmNob3IsIHRhcmdldCwgb3B0aW9ucykudGhlbigoeyB4LCB5IH0pID0+IHtcblx0XHRcdFx0XHR0YXJnZXQuc3R5bGUubGVmdCA9IGAke3h9cHhgO1xuXHRcdFx0XHRcdHRhcmdldC5zdHlsZS50b3AgPSBgJHt5fXB4YDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KSxcblx0XHQpO1xufVxuXG4vKipcbiAqIFNwZWVkIHVwIE11dGF0aW9uT2JzZXJ2ZXIgYnkgZGVib3VuY2luZyBhbmQgb25seSBydW5uaW5nIHdoZW4gcGFnZSBpcyB2aXNpYmxlXG4gKiBAcmV0dXJuIG5ldyBNdXRhaW9uT2JzZXJ2ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2s6IE11dGF0aW9uQ2FsbGJhY2spIHtcblx0bGV0IHF1ZXVlID0gMDtcblxuXHRjb25zdCBvbkZyYW1lID0gKCkgPT4gc2V0VGltZW91dChvblRpbWVyLCAyMDApOyAvLyBVc2UgYm90aCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgYW5kIHNldFRpbWVvdXQgdG8gZGVib3VuY2UgYW5kIG9ubHkgcnVuIHdoZW4gdmlzaWJsZVxuXHRjb25zdCBvblRpbWVyID0gKCkgPT4ge1xuXHRcdGNhbGxiYWNrKFtdLCBvYnNlcnZlcik7XG5cdFx0b2JzZXJ2ZXIudGFrZVJlY29yZHMoKTsgLy8gQ2xlYXIgcmVjb3JkcyB0byBhdm9pZCBydW5uaW5nIGNhbGxiYWNrIG11bHRpcGxlIHRpbWVzXG5cdFx0cXVldWUgPSAwO1xuXHR9O1xuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcblx0XHRpZiAoIXF1ZXVlKSBxdWV1ZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShvbkZyYW1lKTtcblx0fSk7XG5cblx0cmV0dXJuIG9ic2VydmVyO1xufVxuXG4vKipcbiAqIG9uTXV0YXRpb25cbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgb2JzZXJ2ZSBtdXRhdGlvbnMgb24gYSBzcGVjaWZpYyBjbGFzcyBuYW1lXG4gKiBAcGFyYW0gZWwgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gY2xhc3NOYW1lIFRoZSBjbGFzcyBuYW1lIHRvIG9ic2VydmVcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gbXV0YXRpb25zIGFyZSBkZXRlY3RlZFxuICovXG5jb25zdCBNVVRBVE9SUyA9IG5ldyBXZWFrTWFwPEVsZW1lbnQsIEFycmF5PCgpID0+IHZvaWQ+PigpO1xuZXhwb3J0IGNvbnN0IG9uTXV0YXRpb24gPSA8VCBleHRlbmRzIEVsZW1lbnQ+KFxuXHRlbDogRWxlbWVudCxcblx0Y2xhc3NOYW1lOiBzdHJpbmcsXG5cdGNhbGxiYWNrOiAoZWxlbXM6IEhUTUxDb2xsZWN0aW9uT2Y8VD4pID0+IHZvaWQsXG4pID0+IHtcblx0Y29uc3QgZWxlbXMgPSBlbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7XG5cdGNvbnN0IG11dGF0b3IgPSBNVVRBVE9SUy5nZXQoZWwpIHx8IFtdO1xuXG5cdGlmICghbXV0YXRvci5sZW5ndGgpIHtcblx0XHRNVVRBVE9SUy5zZXQoZWwsIG11dGF0b3IpO1xuXHRcdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoKF8sIG9ic2VydmVyKSA9PiB7XG5cdFx0XHRpZiAoZWwuaXNDb25uZWN0ZWQgJiYgbXV0YXRvcj8ubGVuZ3RoKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgY2FsbGJhY2sgb2YgbXV0YXRvcikgY2FsbGJhY2soKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdE1VVEFUT1JTLmRlbGV0ZShlbCk7XG5cdFx0XHR9XG5cdFx0fSkub2JzZXJ2ZShlbCwge1xuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbXCJjbGFzc1wiLCBcImhpZGRlblwiXSxcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdH0pO1xuXHR9XG5cdG11dGF0b3IucHVzaCgoKSA9PiBjYWxsYmFjayhlbGVtcyBhcyBIVE1MQ29sbGVjdGlvbk9mPFQ+KSk7XG59O1xuXG4vKipcbiAqIGlzSW5wdXRMaWtlXG4gKiBAZGVzY3JpcHRpb24gQ2hlY2sgaWYgZWxlbWVudCBpcyBhbiBpbnB1dCBsaWtlIGVsZW1lbnRcbiAqIEBwYXJhbSBlbCBUaGUgZWxlbWVudCB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBhbiBpbnB1dCBsaWtlIGVsZW1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGlzSW5wdXRMaWtlID0gKGVsOiB1bmtub3duKTogZWwgaXMgSFRNTElucHV0RWxlbWVudCA9PlxuXHRlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG5cdFwidmFsaWRpdHlcIiBpbiBlbCAmJlxuXHQhKGVsIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpO1xuXG4vKipcbiAqIHRvQ3VzdG9tRWxlbWVudFByb3BzXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IGNvbnZlcnQgcHJvcHMgdG8gY3VzdG9tIGVsZW1lbnQgYXR0cmlidXRlc1xuICogQHBhcmFtIHByb3BzIFRoZSBwcm9wcyB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIHByb3BzXG4gKi9cbmNvbnN0IFNFTEVDVEVEID0gXCJhcmlhLXNlbGVjdGVkXCI7XG5leHBvcnQgY29uc3QgdG9DdXN0b21FbGVtZW50UHJvcHMgPSAoXG5cdHsgY2xhc3NOYW1lLCBoaWRkZW4sIG9wZW4sIC4uLnJlc3QgfTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGtsYXNzPzogc3RyaW5nLFxuKSA9PiB7XG5cdHJlc3Quc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nID0gdHJ1ZTsgLy8gTWFrZSBOZXh0LmpzIGhhcHB5XG5cdGlmIChyZXN0W1NFTEVDVEVEXSAhPT0gdW5kZWZpbmVkKVxuXHRcdHJlc3RbU0VMRUNURURdID0gYCR7KHJlc3RbU0VMRUNURURdIHx8IFwiZmFsc2VcIikgIT09IFwiZmFsc2VcIn1gOyAvLyBFbnN1cmUgYXJpYS1zZWxlY3RlZCBib29sZWFuIGlzIHN0cmluZ1xuXHRpZiAoY2xhc3NOYW1lIHx8IGtsYXNzKSByZXN0LmNsYXNzID0gYCR7a2xhc3N9ICR7Y2xhc3NOYW1lfWAudHJpbSgpOyAvLyBVc2UgY2xhc3MgaW5zdGVhZCBvZiBjbGFzc05hbWVcblx0aWYgKGhpZGRlbikgcmVzdC5oaWRkZW4gPSB0cnVlOyAvLyBFbnN1cmUgYm9vbGVhbiBwcm9wIGJlaGF2aW91clxuXHRpZiAob3BlbikgcmVzdC5vcGVuID0gdHJ1ZTsgLy8gRW5zdXJlIGJvb2xlYW4gcHJvcCBiZWhhdmlvdXJcblx0cmV0dXJuIHJlc3Q7XG59O1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIElTX0JST1dTRVIsIG9uLCBvbkxvYWRlZCwgUVVJQ0tfRVZFTlQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0JSRUFEQ1JVTUJTID0gYC4ke3N0eWxlcy5icmVhZGNydW1icy5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENTU19DSElQID0gYC4ke3N0eWxlcy5jaGlwLnNwbGl0KFwiIFwiKVswXX1gO1xuY29uc3QgQ1NTX0hFTFBURVhUID0gYC4ke3N0eWxlcy5oZWxwdGV4dC5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENTU19QQUdJTkFUSU9OID0gYC4ke3N0eWxlcy5wYWdpbmF0aW9uLnNwbGl0KFwiIFwiKVswXX1gO1xuY29uc3QgQ0xJQ0tTID0gYHN1bW1hcnksdS1zdW1tYXJ5LGEsYnV0dG9uLFtyb2xlPVwidGFiXCJdLFtyb2xlPVwiYnV0dG9uXCJdYDtcbmNvbnN0IEVWRU5UUyA9IFwiY2xpY2ssdG9nZ2xlLHN1Ym1pdCxjaGFuZ2VcIjtcbmNvbnN0IE1BVE9NTyA9IFwibWF0dGlsc3luZXQubWF0b21vLmNsb3VkXCI7XG5jb25zdCBCQU5ORVIgPSBcIm10ZHMtYW5hbHl0aWNzLWJhbm5lclwiOyAvLyBEaWFsb2cgdG8gc2hvdyBNYXRvbW8gc2NyaXB0IGxvYWRpbmdcbmNvbnN0IEJBTk5FUl9VUkwgPVxuXHRcImh0dHBzOi8vd3d3Lm1hdHRpbHN5bmV0Lm5vL29tLW1hdHRpbHN5bmV0L3BlcnNvbnZlcm5lcmtsYWVyaW5nL2luZm9ybWFzam9uc2thcHNsZXJcIjtcblxudHlwZSBNYXRvbW8gPSAoXG5cdHwgc3RyaW5nXG5cdHwgbnVtYmVyXG5cdHwgYm9vbGVhblxuXHR8IERvY3VtZW50XG5cdHwgRWxlbWVudFxuXHR8ICgodGhpczogUmVjb3JkPHN0cmluZywgPFQ+KCkgPT4gVD4pID0+IHZvaWQpXG4pW107XG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBXaW5kb3cge1xuXHRcdF9wYXE/OiBNYXRvbW9bXTtcblx0XHRfbXRtPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPltdO1xuXHRcdF9tdGRzVHJhY2tpbmc/OiBBbmFseXRpY3NBY3Rpb25zW1wiaW5pdFwiXTtcblx0XHRfbXRkc1VudHJhY2s/OiAoKSA9PiB2b2lkO1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIEFuYWx5dGljc0FjdGlvbnMgPSB7XG5cdGluaXQ6IHtcblx0XHRlbmFibGVkPzogYm9vbGVhbiB8IFwiZGVidWdcIjtcblx0XHRjb25zZW50PzogXCJjdXN0b21cIiB8IHRydWU7XG5cdH0gJiAoXG5cdFx0fCB7XG5cdFx0XHRcdG1hdG9tb0lkOiBudW1iZXIgfCBzdHJpbmc7XG5cdFx0XHRcdG1hdG9tb1RhZ01hbmFnZXJJZD86IG5ldmVyO1xuXHRcdCAgfVxuXHRcdHwge1xuXHRcdFx0XHRtYXRvbW9JZD86IG5ldmVyO1xuXHRcdFx0XHRtYXRvbW9UYWdNYW5hZ2VySWQ6IHN0cmluZztcblx0XHQgIH1cblx0KTtcblx0cGFnZXZpZXc6IHtcblx0XHR1cmw/OiBzdHJpbmc7XG5cdFx0dGl0bGU/OiBzdHJpbmc7XG5cdH07XG5cdGV2ZW50OiB7XG5cdFx0Y2F0ZWdvcnk6IHN0cmluZztcblx0XHRhY3Rpb246IHN0cmluZztcblx0XHRuYW1lPzogc3RyaW5nO1xuXHRcdHZhbHVlPzogbnVtYmVyO1xuXHR9O1xuXHRzZWFyY2g6IHtcblx0XHRxdWVyeTogc3RyaW5nO1xuXHRcdGNhdGVnb3J5Pzogc3RyaW5nO1xuXHRcdHJlc3VsdHM/OiBudW1iZXI7XG5cdH07XG5cdG1hdG9tbzogTWF0b21vO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFuYWx5dGljczxBY3Rpb24gZXh0ZW5kcyBrZXlvZiBBbmFseXRpY3NBY3Rpb25zPihcblx0YWN0aW9uOiBBY3Rpb24sXG5cdGFyZ3MgPSB7fSBhcyBBbmFseXRpY3NBY3Rpb25zW0FjdGlvbl0sXG4pIHtcblx0aWYgKCFJU19CUk9XU0VSKSByZXR1cm47XG5cdGlmICghd2luZG93Ll9wYXEpIHtcblx0XHR3aW5kb3cuX3BhcSA9IFtdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wiSGVhdG1hcFNlc3Npb25SZWNvcmRpbmc6OmRpc2FibGVcIl0pOyAvLyBEaXNhYmxlIGhlYXRtYXBzIGJ5IGRlZmF1bHQgYXMgdGhpcyByZXF1aXJlIGNvb2tpZXNcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcImVuYWJsZUxpbmtUcmFja2luZ1wiXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRUcmFja2VyVXJsXCIsIGBodHRwczovLyR7TUFUT01PfS9tYXRvbW8ucGhwYF0pO1xuXHR9XG5cdGlmICghd2luZG93Ll9tdG0pIHtcblx0XHR3aW5kb3cuX210bSA9IHdpbmRvdy5fbXRtIHx8IFtdOyAvLyBQcmVwYXJlIE1hdG9tbyBUYWcgTWFuYWdlclxuXHRcdHdpbmRvdy5fbXRtLnB1c2goeyBcIm10bS5zdGFydFRpbWVcIjogRGF0ZS5ub3coKSwgZXZlbnQ6IFwibXRtLlN0YXJ0XCIgfSk7XG5cdH1cblxuXHRpZiAoYWN0aW9uID09PSBcImluaXRcIikge1xuXHRcdHdpbmRvdy5fbXRkc1RyYWNraW5nID0ge1xuXHRcdFx0ZW5hYmxlZDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICE9PSBcImxvY2FsaG9zdFwiLFxuXHRcdFx0Li4ud2luZG93Ll9tdGRzVHJhY2tpbmcsXG5cdFx0XHQuLi5hcmdzLFxuXHRcdH0gYXMgQW5hbHl0aWNzQWN0aW9uc1tcImluaXRcIl07XG5cdFx0Y29uc3QgeyBjb25zZW50LCBlbmFibGVkLCBtYXRvbW9JZCwgbWF0b21vVGFnTWFuYWdlcklkIH0gPVxuXHRcdFx0d2luZG93Ll9tdGRzVHJhY2tpbmc7XG5cblx0XHRpZiAobWF0b21vSWQpIHdpbmRvdy5fcGFxLnB1c2goW1wic2V0U2l0ZUlkXCIsIG1hdG9tb0lkXSk7XG5cdFx0aWYgKGVuYWJsZWQpIHtcblx0XHRcdGlmIChjb25zZW50ICE9PSBcImN1c3RvbVwiKSByZW5kZXJCYW5uZXIoKTtcblx0XHRcdGNvbnN0IHNyYyA9IG1hdG9tb1RhZ01hbmFnZXJJZFxuXHRcdFx0XHQ/IGBodHRwczovL2Nkbi5tYXRvbW8uY2xvdWQvJHtNQVRPTU99L2NvbnRhaW5lcl8ke21hdG9tb1RhZ01hbmFnZXJJZH0uanNgXG5cdFx0XHRcdDogYGh0dHBzOi8vY2RuLm1hdG9tby5jbG91ZC8ke01BVE9NT30vbWF0b21vLmpzYDtcblxuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihgc2NyaXB0W3NyYz1cIiR7c3JjfVwiXWApIHx8XG5cdFx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kKFxuXHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSwge1xuXHRcdFx0XHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRcdFx0XHRzcmMsXG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHdpbmRvdy5fbXRkc1RyYWNraW5nPy5lbmFibGVkID09PSBmYWxzZSkgcmV0dXJuO1xuXHRpZiAod2luZG93Ll9tdGRzVHJhY2tpbmc/LmVuYWJsZWQgPT09IFwiZGVidWdcIilcblx0XHRyZXR1cm4gY29uc29sZS5pbmZvKGBhbmFseXRpY3MoXCIke2FjdGlvbn1cIiwgYCwgYXJncywgXCIpXCIpO1xuXG5cdGlmIChhY3Rpb24gPT09IFwicGFnZXZpZXdcIikge1xuXHRcdGNvbnN0IHsgdXJsLCB0aXRsZSB9ID0gYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wicGFnZXZpZXdcIl07XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRDdXN0b21VcmxcIiwgdXJsIHx8IGxvY2F0aW9uLmhyZWZdKTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldERvY3VtZW50VGl0bGVcIiwgdGl0bGUgfHwgZG9jdW1lbnQudGl0bGVdKTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInRyYWNrUGFnZVZpZXdcIl0pO1xuXHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJldmVudFwiKSB7XG5cdFx0Y29uc3QgeyBjYXRlZ29yeSwgYWN0aW9uLCBuYW1lLCB2YWx1ZSB9ID0gYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wiZXZlbnRcIl07XG5cdFx0Y29uc3QgZXZlbnQgPSBbXCJ0cmFja0V2ZW50XCIsIGNhdGVnb3J5LCBhY3Rpb24sIG5hbWUsIHZhbHVlXTtcblxuXHRcdC8vIFdlIGRvIG5vdCB3YW50IHRvIHRyYWNrIGV2ZW50cyB3aXRoIGhhc2ggaW4gVVJMIGFzIHRoaXMgY2F1c2VzIGhhcmQtdG8tcmVhZCBkYXRhLFxuXHRcdC8vIHNvIHRlbXBvcmFyaWx5IHJlbW92ZSB0aGUgaGFzaCBwYXJ0LCBhbmQgYWRkIGl0IGJhY2sgYWZ0ZXIgdGhlIGV2ZW50IGlzIHB1c2hlZFxuXHRcdGxldCB1cmwgPSBsb2NhdGlvbi5ocmVmO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1xuXHRcdFx0ZnVuY3Rpb24gKCkge1xuXHRcdFx0XHR1cmwgPSB0aGlzLmdldEN1cnJlbnRVcmw8c3RyaW5nPigpO1xuXHRcdFx0fSxcblx0XHRdKTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCB1cmwuc3BsaXQoXCIjXCIpWzBdXSk7IC8vIFNraXAgaGFzaCBwYXJ0IG9mIFVSTFxuXHRcdHdpbmRvdy5fcGFxLnB1c2goZXZlbnQuZmlsdGVyKCh2KSA9PiB2ICE9PSB1bmRlZmluZWQpKTsgLy8gUHVzaCBldmVudFxuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0Q3VzdG9tVXJsXCIsIHVybF0pOyAvLyBSZXZlcnJ0IHRvIG9yaWdpbmFsIFVSTCB3aXRoIGhhc2hcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwic2VhcmNoXCIpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRxdWVyeSxcblx0XHRcdGNhdGVnb3J5ID0gZmFsc2UsXG5cdFx0XHRyZXN1bHRzID0gZmFsc2UsXG5cdFx0fSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcInNlYXJjaFwiXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInRyYWNrU2l0ZVNlYXJjaFwiLCBxdWVyeSwgY2F0ZWdvcnksIHJlc3VsdHNdKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwibWF0b21vXCIpIHtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcIm1hdG9tb1wiXSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQmFubmVyKCkge1xuXHRjb25zdCBoYXNTZWVuQmFubmVyID1cblx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZChCQU5ORVIpIHx8IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShCQU5ORVIpO1xuXG5cdGlmIChoYXNTZWVuQmFubmVyKSByZXR1cm47XG5cblx0ZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEhUTUwoXG5cdFx0XCJhZnRlcmJlZ2luXCIsXG5cdFx0YDxkaWFsb2cgaWQ9XCIke0JBTk5FUn1cIiBkYXRhLWFuYWx5dGljcz1cImlnbm9yZVwiPjxzdHlsZT5cblx0XHRcdFx0IyR7QkFOTkVSfVtvcGVuXSB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGJhY2tncm91bmQ6ICMxMTZlNmI7IGJvcmRlci1yYWRpdXM6IC41ZW07IGJvcmRlcjogMDsgYm94LXNoYWRvdzogMCAuMjVlbSAuNWVtIHJnYmEoMCwwLDAsLjMpOyBjb2xvcjogI2ZmZjsgZm9udC1zaXplOiAuODc1ZW07IGluc2V0OiBhdXRvIGF1dG8gMWVtIDFlbTsgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gMmVtKTsgb3V0bGluZTogMDsgcGFkZGluZzogLjVlbTsgcG9zaXRpb246IGZpeGVkOyB6LWluZGV4OiA5OTk5OSB9XG5cdFx0XHRcdCMke0JBTk5FUn0gYnV0dG9uIHsgYWxsOiB1bnNldDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBmbGV4OyB3aWR0aDogMS41ZW07IGhlaWdodDogMS41ZW07IGZvbnQ6IDMwMCAxLjVlbS8xLjM1IHNhbnMtc2VyaWY7IGJvcmRlci1yYWRpdXM6IC4yNWVtOyBwbGFjZS1jb250ZW50OiBjZW50ZXI7IHRyYW5zaXRpb246IC4yczsgdHJhbnNpdGlvbi1wcm9wZXJ0eTogYmFja2dyb3VuZCwgc2NhbGUgfVxuXHRcdFx0XHQjJHtCQU5ORVJ9IGJ1dHRvbjpmb2N1cy12aXNpYmxlIHsgb3V0bGluZTogMnB4IHNvbGlkIH1cblx0XHRcdFx0IyR7QkFOTkVSfSBidXR0b246aG92ZXIgeyBiYWNrZ3JvdW5kOiAjMGE0ZTRmIH1cblx0XHRcdFx0IyR7QkFOTkVSfSBidXR0b246YWN0aXZlIHsgYmFja2dyb3VuZDogIzA1NDQ0OTsgc2NhbGU6IC45IH1cblx0XHRcdFx0IyR7QkFOTkVSfSBwIHsgbWFyZ2luOiAwIC4yNWVtIH1cblx0XHRcdDwvc3R5bGU+XG5cdFx0XHQ8cD5WaSA8YSBocmVmPVwiJHtCQU5ORVJfVVJMfVwiIHRhcmdldD1cIl9ibGFua1wiPmJydWtlciBpbmZvcm1hc2pvbnNrYXBzbGVyPC9hPiBmb3Igw6UgZm9yYmVkcmUgYnJ1a2Vyb3BwbGV2ZWxzZW4uPC9wPlxuXHRcdFx0PGZvcm0gbWV0aG9kPVwiZGlhbG9nXCIgZGF0YS1hbmFseXRpY3M9XCJpZ25vcmVcIj48YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBhcmlhLWxhYmVsPVwiT0tcIj4mdGltZXM7PC9idXR0b24+PC9mb3JtPlxuXHRcdDwvZGlhbG9nPmAsXG5cdCk7XG5cdGNvbnN0IGJhbm5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKEJBTk5FUikgYXMgSFRNTERpYWxvZ0VsZW1lbnQ7XG5cdGNvbnN0IG9uQ2xvc2UgPSAoKSA9PiB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oQkFOTkVSLCBcInNlZW5cIik7XG5cdGJhbm5lci5hZGRFdmVudExpc3RlbmVyKFwiY2xvc2VcIiwgb25DbG9zZSwgeyBvbmNlOiB0cnVlIH0pO1xuXHRiYW5uZXIuc2hvdygpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVUcmFjayhldmVudDogRXZlbnQpIHtcblx0aWYgKHdpbmRvdy5fbXRkc1RyYWNraW5nPy5lbmFibGVkKSBzZXRUaW1lb3V0KHByb2Nlc3NUcmFjaywgMCwgZXZlbnQpOyAvLyBMZXQgb3RoZXIgZXZlbnRzIHByb2Nlc3MgZmlyc3Rcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1RyYWNrKHsgdHlwZSwgdGFyZ2V0IH06IEV2ZW50KSB7XG5cdGNvbnN0IGVsID0gdHlwZSA9PT0gXCJjbGlja1wiID8gKHRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKENMSUNLUykgOiB0YXJnZXQ7XG5cdGlmICghKGVsIGluc3RhbmNlb2YgRWxlbWVudCkgfHwgZWwuY2xvc2VzdCgnW2RhdGEtYW5hbHl0aWNzPVwiaWdub3JlXCJdJykpXG5cdFx0cmV0dXJuO1xuXG5cdGxldCBhY3Rpb24gPSBcImNsaWNrXCI7XG5cdGxldCBjYXRlZ29yeSA9IFwiQnV0dG9uXCI7XG5cdGxldCBuYW1lID0gbGFiZWwoZWwpIHx8IGhlYWRpbmcoZWwpIHx8IGF0dHIoZWwsIFwiZGF0YS10b29sdGlwXCIpIHx8IFwiXCI7XG5cblx0aWYgKHR5cGUgPT09IFwic3VibWl0XCIpIHtcblx0XHRjYXRlZ29yeSA9IFwiRm9ybVwiO1xuXHRcdGFjdGlvbiA9IFwic3VibWl0XCI7XG5cdFx0bmFtZSA9IG5hbWUgfHwgZG9jdW1lbnQudGl0bGU7XG5cdH0gZWxzZSBpZiAodHlwZSA9PT0gXCJ0b2dnbGVcIikge1xuXHRcdGlmICghZWwubWF0Y2hlcyhcImRpYWxvZzptb2RhbFwiKSkgcmV0dXJuOyAvLyBTa2lwIG5vbi1tb2RhbCBkaWFsb2dzXG5cdFx0Y2F0ZWdvcnkgPSBcIkRpYWxvZ1wiO1xuXHRcdGFjdGlvbiA9IFwib3BlblwiO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT09IFwiY2hhbmdlXCIpIHtcblx0XHRjb25zdCB0eXBlID0gYXR0cihlbCwgXCJ0eXBlXCIpO1xuXHRcdGNvbnN0IGdyb3VwID1cblx0XHRcdHR5cGUgPT09IFwiY2hlY2tib3hcIiB8fCB0eXBlID09PSBcInJhZGlvXCIgPyBlbC5jbG9zZXN0KFwiZmllbGRzZXRcIikgOiBudWxsO1xuXG5cdFx0Y2F0ZWdvcnkgPSBcIkZvcm1cIjtcblx0XHRhY3Rpb24gPSBcImNoYW5nZVwiO1xuXHRcdG5hbWUgPVxuXHRcdFx0bGFiZWwoZ3JvdXAgfHwgZWwpIHx8XG5cdFx0XHR0ZXh0KGdyb3VwPy5xdWVyeVNlbGVjdG9yKFwibGVnZW5kXCIpKSB8fFxuXHRcdFx0dGV4dCgoZWwgYXMgSFRNTElucHV0RWxlbWVudCk/LmxhYmVscz8uWzBdKTtcblx0fSBlbHNlIGlmIChhdHRyKGVsLCBcInJvbGVcIikgPT09IFwidGFiXCIpIHtcblx0XHRjYXRlZ29yeSA9IFwiVGFiXCI7XG5cdFx0YWN0aW9uID0gXCJuYXZpZ2F0ZVwiO1xuXHR9IGVsc2UgaWYgKGF0dHIoZWwsIFwicG9wb3ZlcnRhcmdldFwiKSkge1xuXHRcdGlmICghcG9wb3ZlcihlbCk/Lm1hdGNoZXMoXCI6cG9wb3Zlci1vcGVuXCIpKSByZXR1cm47IC8vIFNraXAgaWYgbm90IG9wZW5cblx0XHRjYXRlZ29yeSA9IGVsLmNsb3Nlc3QoQ1NTX0hFTFBURVhUKSA/IFwiSGVscFRleHRcIiA6IFwiUG9wb3ZlclwiO1xuXHRcdGFjdGlvbiA9IFwib3BlblwiO1xuXHR9IGVsc2UgaWYgKGVsLm5vZGVOYW1lLmVuZHNXaXRoKFwiU1VNTUFSWVwiKSkge1xuXHRcdGlmICghKGVsLnBhcmVudEVsZW1lbnQgYXMgSFRNTERldGFpbHNFbGVtZW50KS5vcGVuKSByZXR1cm47IC8vIFNraXAgaWYgbm90IG9wZW5cblx0XHRjYXRlZ29yeSA9IFwiRGV0YWlsc1wiO1xuXHRcdGFjdGlvbiA9IFwib3BlblwiO1xuXHR9IGVsc2UgaWYgKGF0dHIoZWwsIFwiZGF0YS1jb21tYW5kXCIpID09PSBcInRvZ2dsZS1hcHAtZXhwYW5kZWRcIikge1xuXHRcdGNvbnN0IG9wZW4gPSBzdHlsZShlbCwgXCItLW10ZHMtdG9vbHRpcC1wb3NpdGlvblwiKSA9PT0gXCJub25lXCI7XG5cdFx0Y2F0ZWdvcnkgPSBcIlNpZGViYXJcIjtcblx0XHRhY3Rpb24gPSBvcGVuID8gXCJleHBhbmRcIiA6IFwibWluaW1pemVcIjtcblx0XHRuYW1lID0gKG9wZW4gJiYgYXR0cihlbCwgXCJkYXRhLXRvb2x0aXBcIikpIHx8IHRleHQoZWwpO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoQ1NTX0JSRUFEQ1JVTUJTKSkge1xuXHRcdGNhdGVnb3J5ID0gXCJCcmVhZGNydW1ic1wiO1xuXHRcdGFjdGlvbiA9IFwibmF2aWdhdGVcIjtcblx0fSBlbHNlIGlmIChlbC5jbG9zZXN0KENTU19QQUdJTkFUSU9OKSkge1xuXHRcdGNhdGVnb3J5ID0gXCJQYWdpbnRhdGlvblwiO1xuXHRcdGFjdGlvbiA9IFwibmF2aWdhdGVcIjtcblx0fSBlbHNlIGlmIChlbC5jbG9zZXN0KENTU19DSElQKSkge1xuXHRcdGNhdGVnb3J5ID0gXCJDaGlwXCI7XG5cdFx0YWN0aW9uID0gZWwuaGFzQXR0cmlidXRlKFwiZGF0YS1yZW1vdmFibGVcIikgPyBcInJlbW92ZVwiIDogXCJjbGlja1wiO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoXCJ0aFthcmlhLXNvcnRdXCIpKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIlRhYmxlXCI7XG5cdFx0YWN0aW9uID0gXCJzb3J0XCI7XG5cdH0gZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudCkge1xuXHRcdGNhdGVnb3J5ID0gXCJMaW5rXCI7XG5cdFx0YWN0aW9uID0gZWwucHJvdG9jb2wgPT09IFwibWFpbHRvOlwiID8gXCJlbWFpbFwiIDogXCJuYXZpZ2F0ZVwiO1xuXHRcdGlmIChlbC5oYXNBdHRyaWJ1dGUoXCJkb3dubG9hZFwiKSkgYWN0aW9uID0gXCJkb3dubG9hZFwiO1xuXHRcdGVsc2UgaWYgKGVsLmhhc2ggJiYgZWwuaHJlZi5zdGFydHNXaXRoKGxvY2F0aW9uLmhyZWYuc3BsaXQoXCIjXCIpWzBdKSlcblx0XHRcdGFjdGlvbiA9IFwiYW5jaG9yXCI7IC8vIE9ubHkgdHJhY2sgYXMgYW5jaG9yIGlmIHNhbWUgcGFnZVxuXHR9IGVsc2UgaWYgKGVsLmhhc0F0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIikpIHtcblx0XHRpZiAoYXR0cihlbCwgXCJhcmlhLWV4cGFuZGVkXCIpICE9PSBcInRydWVcIikgcmV0dXJuOyAvLyBTa2lwIGlmIG5vdCBvcGVuXG5cdFx0Y2F0ZWdvcnkgPSBcIkV4cGFuZFwiO1xuXHRcdGFjdGlvbiA9IFwib3BlblwiO1xuXHR9XG5cblx0Ly8gUmVzcGVjdCBhdHRyaWJ1dGVzIGFuZCBzZW5kXG5cdGFuYWx5dGljcyhcImV2ZW50XCIsIHtcblx0XHRjYXRlZ29yeTogYXR0cihlbCwgXCJkYXRhLWFuYWx5dGljcy1jYXRlZ29yeVwiKSA/PyBjYXRlZ29yeSxcblx0XHRhY3Rpb246IGF0dHIoZWwsIFwiZGF0YS1hbmFseXRpY3MtYWN0aW9uXCIpID8/IGFjdGlvbixcblx0XHRuYW1lOiBhdHRyKGVsLCBcImRhdGEtYW5hbHl0aWNzLW5hbWVcIikgPz8gbmFtZSxcblx0fSk7XG59XG5cbi8vIFV0aWxpdGllc1xuY29uc3QgdGV4dCA9IChlbD86IEVsZW1lbnQgfCBudWxsKSA9PiBlbD8udGV4dENvbnRlbnQ/LnRyaW0oKSB8fCBcIlwiO1xuY29uc3QgbGFiZWwgPSAoZWw/OiBFbGVtZW50IHwgbnVsbCkgPT4gKGVsICYmIGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiKSkgfHwgXCJcIjtcbmNvbnN0IHBvcG92ZXIgPSAoZWw6IEVsZW1lbnQpID0+XG5cdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGF0dHIoZWwsIFwicG9wb3ZlcnRhcmdldFwiKSB8fCBcIlwiKTtcbmNvbnN0IHN0eWxlID0gKGVsOiBFbGVtZW50LCBrZXk6IHN0cmluZykgPT5cblx0d2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLmdldFByb3BlcnR5VmFsdWUoa2V5KT8udHJpbSgpO1xuY29uc3QgaGVhZGluZyA9IChlbDogRWxlbWVudCkgPT4ge1xuXHRjb25zdCBib2R5ID0gdGV4dChlbCk7XG5cdGNvbnN0IGhlYWQgPSB0ZXh0KGVsLnF1ZXJ5U2VsZWN0b3IoXCJoMSxoMixoMyxoNCxoNSxoNlwiKSk7IC8vIE5vdGU6IGhlYWQgbWlnaHQgYmUgZW1wdHkgc3RyaW5nICcnXG5cdHJldHVybiAoYm9keS5zdGFydHNXaXRoKGhlYWQpICYmIGhlYWQpIHx8IGJvZHkuc2xpY2UoMCwgMTAwKS50cmltKCk7IC8vIExpbWl0IHRvIDEwMCBjaGFyYWN0ZXJzXG59O1xuXG5vbkxvYWRlZCgoKSA9PiBvbihkb2N1bWVudCwgRVZFTlRTLCBoYW5kbGVUcmFjaywgUVVJQ0tfRVZFTlQpKTtcbiIsImlmIChcblx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHR3aW5kb3cuQ1NTU3R5bGVTaGVldCAmJlxuXHRkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHNcbilcblx0KCgpID0+IHtcblx0XHRjb25zdCBrZXkgPSBcIi0tbXRkcy1hcHAtZXhwYW5kZWRcIjtcblx0XHRjb25zdCBzaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cdFx0Y29uc3QgcHJldiA9ICgpID0+ICF3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KT8uaW5jbHVkZXMoXCJmYWxzZVwiKTtcblxuXHRcdGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKHNoZWV0KTtcblx0XHR3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkID0gKGZvcmNlKSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBuZXh0ID0gZm9yY2UgPz8gIXByZXYoKTtcblx0XHRcdFx0c2hlZXQucmVwbGFjZVN5bmM/LihgOnJvb3QgeyAke2tleX06IHZhcigke2tleX0tLSR7bmV4dH0pfWApO1xuXHRcdFx0XHR3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBuZXh0KTtcblx0XHRcdH0gY2F0Y2ggKF9lcnIpIHt9IC8vIGxvY2FsU3RvcmFnZSBpcyBmdWxsIG9yIHJlcGxhY2VTeW5jIGlzIG5vdCBzdXBwb3J0ZWRcblx0XHR9O1xuXG5cdFx0Ly8gU2V0IGFuZCBzdG9yZSBpbml0aWFsIHN0YXRlXG5cdFx0d2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZChwcmV2KCkpO1xuXHR9KSgpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGRlYm91bmNlLCBvbiwgb25Mb2FkZWQsIG9uTXV0YXRpb24sIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgXCIuL2FwcC10b2dnbGVcIjtcblxuY29uc3QgQ1NTX0FQUCA9IHN0eWxlcy5hcHAuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1NUSUNLWSA9IHN0eWxlcy5zdGlja3kuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1RPR0dMRSA9ICdbZGF0YS1jb21tYW5kPVwidG9nZ2xlLWFwcC1leHBhbmRlZFwiXSc7XG5jb25zdCBDU1NfU0lERUJBUiA9IGAuJHtDU1NfQVBQfSA+IGRpYWxvZywuJHtDU1NfQVBQfSBkaWFsb2cgfiBtYWluYDtcblxuY29uc3QgdXNlVHJhbnNpdGlvbiA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xuXHRpZiAoIWRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24pIGNhbGxiYWNrKCk7XG5cdGVsc2UgZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbihjYWxsYmFjayk7XG59O1xuXG5leHBvcnQgY29uc3QgdG9nZ2xlQXBwRXhwYW5kZWQgPSAoZm9yY2U/OiBib29sZWFuKSA9PlxuXHQvLyBAdHMtZXhwZWN0LWVycm9yIHdpbmRvdy5tdGRzQXBwVG9nZ2xlIGNvbWVzIGZyb20gYXBwLXRvZ2dsZS5qc1xuXHR1c2VUcmFuc2l0aW9uKCgpID0+IHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQ/Lihmb3JjZSkpO1xuXG5mdW5jdGlvbiBoYW5kbGVBcHBUb2dnbGVDbGljayh7IHRhcmdldDogZWwsIGRlZmF1bHRQcmV2ZW50ZWQ6IHN0b3AgfTogRXZlbnQpIHtcblx0Y29uc3QgbGluayA9IChlbCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKFwiYVwiKTtcblx0aWYgKGxpbms/LmNsb3Nlc3QoXCJkaWFsb2dcIikgJiYgbGluaz8uY2xvc2VzdChDU1NfU0lERUJBUikpXG5cdFx0cmV0dXJuIGNsb3NlU2lkZWJhcigpOyAvLyBDbG9zZSBzaWRlYmFyIGlmIGxpbmsgaXMgY2xpY2tlZCBpbnNpZGUgc2lkZWJhclxuXG5cdGlmIChzdG9wIHx8ICEoZWwgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCkgfHwgIWVsLm1hdGNoZXMoQ1NTX1RPR0dMRSkpXG5cdFx0cmV0dXJuO1xuXHRjb25zdCBpc0Rlc2t0b3AgPSBnZXRDb21wdXRlZFN0eWxlKGVsKS5wb3NpdGlvbiA9PT0gXCJzdGlja3lcIjtcblxuXHRpZiAoaXNEZXNrdG9wKSB0b2dnbGVBcHBFeHBhbmRlZCgpO1xuXHRlbHNlXG5cdFx0dXNlVHJhbnNpdGlvbigoKSA9PiB7XG5cdFx0XHRjb25zdCBzaWRlYmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGlhbG9nRWxlbWVudD4oQ1NTX1NJREVCQVIpO1xuXHRcdFx0c2lkZWJhcj8uc2V0QXR0cmlidXRlKFwiZGF0YS1jbG9zZWRieVwiLCBcImFueVwiKTsgLy8gQWxsb3cgY2xvc2luZyBieSBjbGlja2luZyBvdXRzaWRlXG5cdFx0XHRzaWRlYmFyPy5zaG93TW9kYWwoKTtcblx0XHR9KTtcbn1cblxuZnVuY3Rpb24gY2xvc2VTaWRlYmFyKCkge1xuXHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaWFsb2dFbGVtZW50PihDU1NfU0lERUJBUik/LmNsb3NlKCk7XG59XG5cbi8vIFNjcm9sbCBzdGF0ZVxubGV0IE1JTl9ZID0gMDsgLy8gT2Zmc2V0IHRvIGF2b2lkIHNjcm9sbCBqdW1wIHdoZW4gc3RpY2t5IGlzIHNldCB0byByZWxhdGl2ZVxubGV0IFNDUk9MTF9VUDogYm9vbGVhbjtcbmxldCBTVElDSyA9IDA7IC8vIC0xID0gc3RpY2sgdG9wLCAwID0gcmVsYXRpdmUsIDEgPSBzdGljayBib3R0b21cbmxldCBTVElDS19FTDogSFRNTEVsZW1lbnQ7XG5sZXQgU1RJQ0tfSCA9IDA7XG5sZXQgU1RJQ0tfWSA9IDA7XG5sZXQgU1RVQ0sgPSBmYWxzZTsgLy8gVXNlZCB0byBmaWd1cmUgaWYgbmF2IGlzIGxhcmdlciB0aGFuIHZpZXdwb3J0XG5sZXQgV0lOX0ggPSAwO1xubGV0IFdJTl9ZID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oW3N0aWNreV06IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdFNUSUNLX0VMID0gc3RpY2t5O1xuXHRoYW5kbGVBcHBTY3JvbGwoKTsgLy8gUnVuIG9uIGNvbm5lY3Rcbn1cblxuZnVuY3Rpb24gaGFuZGxlQXBwU2Nyb2xsKCkge1xuXHRpZiAoIVNUSUNLX0VMPy5pc0Nvbm5lY3RlZCkgcmV0dXJuO1xuXHRjb25zdCBORVhUX1kgPSB3aW5kb3cuc2Nyb2xsWTtcblx0Y29uc3QgTkVYVF9VUCA9IE5FWFRfWSA8IFdJTl9ZO1xuXHRXSU5fWSA9IE5FWFRfWTtcblxuXHQvLyBPbmx5IGNhbGN1bGF0ZSBpZiBzY3JvbGwgZGlyZWN0aW9uIGhhcyBjaGFuZ2VkXG5cdGlmIChORVhUX1VQICE9PSBTQ1JPTExfVVApIHtcblx0XHRNSU5fWSA9IChTVElDS19FTC5wYXJlbnRFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgfHwgMCkgKyBXSU5fWTtcblx0XHRTQ1JPTExfVVAgPSBORVhUX1VQO1xuXHRcdFNUSUNLX0ggPSBTVElDS19FTC5vZmZzZXRIZWlnaHQ7XG5cdFx0U1RJQ0tfWSA9IFNUSUNLX0VMLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIFdJTl9ZO1xuXHRcdFNUVUNLID0gU1RJQ0tfRUwub2Zmc2V0SGVpZ2h0IDw9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0XHRXSU5fSCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0fVxuXG5cdGlmIChTVElDSyA9PT0gLTEgJiYgU1RVQ0spIHJldHVybjsgLy8gQWxsd2F5cyBzdGlja3kgd2hlbiBzaWRlYmFyIGlzIHNtYWxsZXIgdGhhbiB2aWV3cG9ydFxuXHRpZiAoU1RJQ0sgIT09IC0xICYmIChTVFVDSyB8fCAoU0NST0xMX1VQICYmIFdJTl9ZIDw9IFNUSUNLX1kpKSkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJzdGlja3lcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBcIjBweFwiKTtcblx0XHRTVElDSyA9IC0xOyAvLyBOb3Qgc3RpY2tpbmcgdG8gdG9wIGFuZCBzaWRlYmFyIGlzIHNtYWxsZXIgdGhhbiB2aWV3cG9ydCBvciBzY3JvbGxpbmcgdXBcblx0fSBlbHNlIGlmIChTVElDSyA9PT0gLTEgJiYgIVNDUk9MTF9VUCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJyZWxhdGl2ZVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke01hdGgubWF4KDAsIFdJTl9ZIC0gTUlOX1kpfXB4YCk7XG5cdFx0U1RJQ0sgPSAwOyAvLyBTdGlja2luZyB0byB0b3AgYW5kIHNjcm9sbGluZyBkb3duXG5cdH0gZWxzZSBpZiAoU1RJQ0sgIT09IDEgJiYgIVNDUk9MTF9VUCAmJiBXSU5fWSArIFdJTl9IID49IFNUSUNLX1kgKyBTVElDS19IKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInN0aWNreVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke1dJTl9IIC0gU1RJQ0tfSH1weGApO1xuXHRcdFNUSUNLID0gMTsgLy8gTm90IHN0aWNraW5nIHRvIGJvdHRvbSBhbmQgc2Nyb2xsaW5nIGRvd25cblx0fSBlbHNlIGlmIChTVElDSyA9PT0gMSAmJiBTQ1JPTExfVVApIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwicmVsYXRpdmVcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtTVElDS19ZIC0gTUlOX1l9cHhgKTtcblx0XHRTVElDSyA9IDA7IC8vIFN0aWNraW5nIHRvIGJvdHRvbSBhbmQgc2Nyb2xsaW5nIHVwXG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX1NUSUNLWSwgaGFuZGxlTXV0YXRpb24pO1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVBcHBUb2dnbGVDbGljaywgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwicmVzaXplXCIsIGRlYm91bmNlKGNsb3NlU2lkZWJhciwgMTAwKSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwic2Nyb2xsXCIsIGhhbmRsZUFwcFNjcm9sbCwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCJjb25zdCBnZXRTdGVwcyA9IChcblx0bm93OiBudW1iZXIsXG5cdG1heDogbnVtYmVyLFxuXHRzaG93ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuKSA9PiB7XG5cdGNvbnN0IG9mZnNldCA9IChzaG93IC0gMSkgLyAyO1xuXHRjb25zdCBzdGFydCA9IE1hdGgubWF4KE1hdGgubWluKG5vdyAtIE1hdGguZmxvb3Iob2Zmc2V0KSwgbWF4IC0gc2hvdyArIDEpLCAxKTtcblx0Y29uc3QgZW5kID0gTWF0aC5taW4oTWF0aC5tYXgobm93ICsgTWF0aC5jZWlsKG9mZnNldCksIHNob3cpLCBtYXgpO1xuXHRjb25zdCBwYWdlcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGVuZCArIDEgLSBzdGFydCB9LCAoXywgaSkgPT4gaSArIHN0YXJ0KTtcblxuXHRpZiAoc2hvdyA+IDQgJiYgc3RhcnQgPiAxKSBwYWdlcy5zcGxpY2UoMCwgMiwgMSwgMCk7XG5cdGlmIChzaG93ID4gMyAmJiBlbmQgPCBtYXgpIHBhZ2VzLnNwbGljZSgtMiwgMiwgMCwgbWF4KTtcblx0cmV0dXJuIHBhZ2VzO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhZ2luYXRpb24gPSAoeyBjdXJyZW50ID0gMSwgdG90YWwgPSAxMCwgc2hvdyA9IDcgfSkgPT4gKHtcblx0cHJldjogY3VycmVudCA+IDEgPyBjdXJyZW50IC0gMSA6IDAsXG5cdG5leHQ6IGN1cnJlbnQgPCB0b3RhbCA/IGN1cnJlbnQgKyAxIDogMCxcblx0cGFnZXM6IGdldFN0ZXBzKGN1cnJlbnQsIHRvdGFsLCBzaG93KS5tYXAoKHBhZ2UsIGluZGV4KSA9PiAoe1xuXHRcdGN1cnJlbnQ6IHBhZ2UgPT09IGN1cnJlbnQgJiYgKFwicGFnZVwiIGFzIGNvbnN0KSxcblx0XHRrZXk6IGBrZXktJHtwYWdlfS0ke2luZGV4fWAsXG5cdFx0cGFnZSxcblx0fSkpLFxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0JSRUFEQ1JVTUJTID0gc3R5bGVzLmJyZWFkY3J1bWJzLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlQnJlYWRjcnVtYnNNdXRhdGlvbihicmVhZGNydW1iczogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCBicmVhZGN1bWJzIG9mIGJyZWFkY3J1bWJzKVxuXHRcdGJyZWFkY3VtYnMucXVlcnlTZWxlY3RvckFsbChcImxpIGFcIikuZm9yRWFjaCgoY3J1bWIsIGluZGV4LCB7IGxlbmd0aCB9KSA9PiB7XG5cdFx0XHRhdHRyKGNydW1iLCBcImFyaWEtY3VycmVudFwiLCBpbmRleCA9PT0gbGVuZ3RoIC0gMSA/IFwicGFnZVwiIDogbnVsbCk7XG5cdFx0fSk7XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRcdENTU19CUkVBRENSVU1CUyxcblx0XHRoYW5kbGVCcmVhZGNydW1ic011dGF0aW9uLFxuXHQpLFxuKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRhdHRyLFxuXHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyLFxuXHRJU19CUk9XU0VSLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdFFVSUNLX0VWRU5ULFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0RJQUxPRyA9IHN0eWxlcy5kaWFsb2cuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgRElBTE9HUyA9IElTX0JST1dTRVJcblx0PyAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcblx0XHRcdENTU19ESUFMT0csXG5cdFx0KSBhcyBIVE1MQ29sbGVjdGlvbk9mPEhUTUxEaWFsb2dFbGVtZW50Pilcblx0OiBbXTtcblxuY29uc3QgaGFuZGxlTW9kYWwgPSAoKSA9PiB7XG5cdGZvciAoY29uc3QgZGlhbG9nIG9mIERJQUxPR1MpXG5cdFx0aWYgKGRpYWxvZy5pc0Nvbm5lY3RlZCAmJiBkaWFsb2cuc2hvd01vZGFsICYmIGRpYWxvZy5jbG9zZSkge1xuXHRcdFx0aWYgKGRpYWxvZy5tYXRjaGVzKCdbb3Blbl06bm90KFtkYXRhLW1vZGFsPVwiZmFsc2VcIl0pOm5vdCg6bW9kYWwpJykpIHtcblx0XHRcdFx0YXR0cihkaWFsb2csIFwib3BlblwiLCBudWxsKTsgLy8gVXNpbmcgYXR0cmlidXRlIGluc3RlYWQgb2YgLmNsb3NlIHRvIGF2b2lkIGBjbG9zZWAgZXZlbnRcblx0XHRcdFx0ZGlhbG9nLnNob3dNb2RhbCgpO1xuXHRcdFx0fSBlbHNlIGlmIChkaWFsb2cubWF0Y2hlcyhcIjptb2RhbDpub3QoW29wZW5dKVwiKSkge1xuXHRcdFx0XHRhdHRyKGRpYWxvZywgXCJvcGVuXCIsIFwiXCIpOyAvLyBTZXQgYXMgb3BlblxuXHRcdFx0XHRkaWFsb2cuY2xvc2UoKTsgLy8gU28gd2UgY29ycmVjbHR5IGNhbiBjYWxsIC5jbG9zZSwgcmVtb3ZpbmcgPGRpYWxvZz4gZnJvbSAjdG9wLWxheWVyXG5cdFx0XHR9XG5cdFx0fVxufTtcblxuY29uc3QgaGFuZGxlRGlhbG9nQ2xpY2sgPSAoe1xuXHRjbGllbnRYOiB4LFxuXHRjbGllbnRZOiB5LFxuXHR0YXJnZXQ6IGVsLFxufTogTW91c2VFdmVudCkgPT4ge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRGlhbG9nRWxlbWVudCAmJiBhdHRyKGVsLCBcImRhdGEtY2xvc2VkYnlcIikgPT09IFwiYW55XCIpIHtcblx0XHRjb25zdCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCB9ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0Y29uc3QgaXNJbnNpZGUgPSB0b3AgPD0geSAmJiB5IDw9IGJvdHRvbSAmJiBsZWZ0IDw9IHggJiYgeCA8PSByaWdodDtcblx0XHRpZiAoIWlzSW5zaWRlKSByZXR1cm4gZWwuY2xvc2UoKTtcblx0fVxuXHRjb25zdCBkaWFsb2cgPSAoZWwgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImRpYWxvZ1wiKTtcblx0Y29uc3QgY2xvc2UgPSBkaWFsb2cgJiYgKGVsIGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oJ1tkYXRhLWNvbW1hbmQ9XCJjbG9zZVwiXScpO1xuXHRpZiAoY2xvc2UpIGRpYWxvZy5jbG9zZSgpO1xufTtcblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVEaWFsb2dDbGljayBhcyBFdmVudExpc3RlbmVyLCBRVUlDS19FVkVOVCk7XG5cdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoaGFuZGxlTW9kYWwpLm9ic2VydmUoXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRcdHtcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogW1wib3BlblwiXSxcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdH0sXG5cdCk7XG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbiwgb25Mb2FkZWQsIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9zdW1tYXJ5SW5qZWN0KGV2ZW50OiBFdmVudCAmIHsgYW5pbWF0aW9uTmFtZT86IHN0cmluZyB9KSB7XG5cdGlmIChldmVudC5hbmltYXRpb25OYW1lICE9PSBzdHlsZXMuX2Vycm9yc3VtbWFyeSkgcmV0dXJuO1xuXHRjb25zdCBmaXJzdCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmZpcnN0RWxlbWVudENoaWxkO1xuXG5cdGlmIChmaXJzdCBpbnN0YW5jZW9mIEhUTUxIZWFkaW5nRWxlbWVudCkge1xuXHRcdGF0dHIoZmlyc3QsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcblx0XHRmaXJzdC5mb2N1cygpOyAvLyBBdXRvZm9jdXMgZmlyc3QgaGVhZGluZ1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uKGRvY3VtZW50LCBcImFuaW1hdGlvbmVuZFwiLCBoYW5kbGVFcnJvc3VtbWFyeUluamVjdCwgUVVJQ0tfRVZFTlQpLFxuKTtcbiIsInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcblxuLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBTQUZFX0xBQkVMTEVEQlkgPSBgJHtJU19BTkRST0lEID8gXCJkYXRhXCIgOiBcImFyaWFcIn0tbGFiZWxsZWRieWA7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIEZPQ1VTX09VVExJTkUgPSBcIm91dGxpbmU6IDFweCBkb3R0ZWQ7IG91dGxpbmU6IDVweCBhdXRvIEhpZ2hsaWdodDsgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yXCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXR0YWNoU3R5bGUgPSAoZWxlbWVudCwgY3NzKSA9PiBlbGVtZW50LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gIC8vIFVubmFtZWQgc2xvdCBkb2VzIGF1dG9tYXRpY2FsbHkgcmVuZGVyIGFsbCB0b3AgZWxlbWVudCBub2Rlc1xuICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgY3NzKVxuKTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoX2Vycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgTElWRTtcbnZhciBMSVZFX1NSX0ZJWCA9IDA7XG52YXIgc3BlYWsgPSAodGV4dCkgPT4ge1xuICBpZiAoIUxJVkUpIHtcbiAgICBMSVZFID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBMSVZFLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gICAgYXR0cihMSVZFLCBcImFyaWEtbGl2ZVwiLCBcImFzc2VydGl2ZVwiKTtcbiAgfVxuICBpZiAoIUxJVkUuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKExJVkUpO1xuICBpZiAodGV4dCkgTElWRS50ZXh0Q29udGVudCA9IGAke3RleHR9JHtMSVZFX1NSX0ZJWCsrICUgMiA/IFwiXFx4QTBcIiA6IFwiXCJ9YDtcbn07XG52YXIgc2V0VmFsdWUgPSAoaW5wdXQsIGRhdGEsIHR5cGUgPSBcIlwiKSA9PiB7XG4gIHZhciBfYTIsIF9iO1xuICBjb25zdCBldmVudCA9IHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUsIGRhdGEsIGlucHV0VHlwZTogdHlwZSB9O1xuICBjb25zdCBwcm90byA9IEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiYmVmb3JlaW5wdXRcIiwgZXZlbnQpKTtcbiAgKF9iID0gKF9hMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIFwidmFsdWVcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChpbnB1dCwgZGF0YSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJpbnB1dFwiLCBldmVudCkpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImNoYW5nZVwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xufTtcbnZhciBJU19QUkVTUyA9IGZhbHNlO1xudmFyIGlzTW91c2VEb3duID0gKGV2ZW50KSA9PiB7XG4gIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm1vdXNldXBcIikgSVNfUFJFU1MgPSBmYWxzZTtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2Vkb3duXCIpIHtcbiAgICBJU19QUkVTUyA9IHRydWU7XG4gICAgb24oZG9jdW1lbnQsIFwibW91c2V1cFwiLCBpc01vdXNlRG93biwgeyBvbmNlOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiBJU19QUkVTUztcbn07XG5cbi8vIHUtb3B0aW9uLnRzXG52YXIgRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG52YXIgU0VMRUNURUQgPSBcInNlbGVjdGVkXCI7XG52YXIgVUhUTUxPcHRpb25FbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW0RJU0FCTEVELCBTRUxFQ1RFRF07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCFJU19JT1MpIHRoaXMudGFiSW5kZXggPSAtMTtcbiAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKFwicm9sZVwiKSkgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJvcHRpb25cIik7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtZGlzYWJsZWRcIiwgYCR7dGhpcy5kaXNhYmxlZH1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1zZWxlY3RlZFwiLCBgJHt0aGlzLnNlbGVjdGVkfWApO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB3aGV0aGVyIHRoZSBvcHRpb24gaW4gdGhlIGxpc3QgYm94IGlzIHRoZSBkZWZhdWx0IGl0ZW0uICovXG4gIGdldCBkZWZhdWx0U2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXNbU0VMRUNURURdO1xuICB9XG4gIHNldCBkZWZhdWx0U2VsZWN0ZWQodmFsdWUpIHtcbiAgICB0aGlzW1NFTEVDVEVEXSA9IHZhbHVlO1xuICB9XG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBESVNBQkxFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBESVNBQkxFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyBhIHJlZmVyZW5jZSB0byB0aGUgZm9ybSB0aGF0IHRoZSBvYmplY3QgaXMgZW1iZWRkZWQgaW4uICovXG4gIGdldCBmb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJmb3JtXCIpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiBvcHRpb24gaW4gYSBsaXN0IGJveC4gKi9cbiAgZ2V0IGluZGV4KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLigoX2EyID0gdGhpcy5wYXJlbnRFbGVtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLm9wdGlvbnMpIHx8IFt0aGlzXVxuICAgIF0uaW5kZXhPZih0aGlzKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgYSB2YWx1ZSB0aGF0IHlvdSBjYW4gdXNlIHRvIGltcGxlbWVudCB5b3VyIG93biBsYWJlbCBmdW5jdGlvbmFsaXR5IGZvciB0aGUgb2JqZWN0LiAqL1xuICBnZXQgbGFiZWwoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKF9hMiA9IGF0dHIodGhpcywgXCJsYWJlbFwiKSkgIT0gbnVsbCA/IF9hMiA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgbGFiZWwodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwibGFiZWxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBTRUxFQ1RFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBTRUxFQ1RFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSB0ZXh0IHN0cmluZyBzcGVjaWZpZWQgYnkgdGhlIG9wdGlvbiB0YWcuICovXG4gIGdldCB0ZXh0KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gdGhpcy50ZXh0Q29udGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIH1cbiAgc2V0IHRleHQodGV4dCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB0ZXh0O1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdmFsdWUgd2hpY2ggaXMgcmV0dXJuZWQgdG8gdGhlIHNlcnZlciB3aGVuIHRoZSBmb3JtIGNvbnRyb2wgaXMgc3VibWl0dGVkLiAqL1xuICBnZXQgdmFsdWUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKF9hMiA9IGF0dHIodGhpcywgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1vcHRpb25cIiwgVUhUTUxPcHRpb25FbGVtZW50KTtcblxuLy8gdS1kYXRhbGlzdC50c1xudmFyIExJVkVfVElNRVI7XG52YXIgSU5QVVRfREVCT1VOQ0UgPSAwO1xudmFyIElTX01PQklMRSA9IElTX0lPUyB8fCBJU19BTkRST0lEO1xudmFyIEVWRU5UUyA9IFwiY2xpY2ssZm9jdXNvdXQsaW5wdXQsa2V5ZG93bixtb3VzZWRvd24sbW91c2V1cFwiO1xudmFyIEVWRU5UU19JTlBVVCA9IFwiZm9jdXMsZm9jdXNpbixibHVyLGZvY3Vzb3V0XCI7XG52YXIgVEVYVFMgPSB7XG4gIHNpbmd1bGFyOiBcIiVkIGhpdFwiLFxuICBwbHVyYWw6IFwiJWQgaGl0c1wiXG59O1xudmFyIFVIVE1MRGF0YUxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3RleHRzID0gX19zcHJlYWRWYWx1ZXMoe30sIFRFWFRTKTtcbiAgICB0aGlzLl92YWx1ZSA9IFwiXCI7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgYCR7RElTUExBWV9CTE9DS31cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbikgeyBkaXNwbGF5OiBibG9jazsgY3Vyc29yOiBwb2ludGVyIH1cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbjpmb2N1cykgeyAke0ZPQ1VTX09VVExJTkV9IH1cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvblthcmlhLWhpZGRlbj1cInRydWVcIl0pLFxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uW2Rpc2FibGVkXSksXG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb25baGlkZGVuXSkgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQgfWBcbiAgICApO1xuICB9XG4gIC8vIFVzZWQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBhbm5vdW5jZW1lbnRzXG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJpZFwiLCAuLi5PYmplY3Qua2V5cyhURVhUUykubWFwKChrZXkpID0+IGBkYXRhLXNyLSR7a2V5fWApXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmhpZGRlbiA9IHRydWU7XG4gICAgdGhpcy5fcm9vdCA9IGdldFJvb3QodGhpcyk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJsaXN0Ym94XCIpO1xuICAgIGF0dHIodGhpcywgXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuICAgIG9uKHRoaXMuX3Jvb3QsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBvbih0aGlzLl9yb290LCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywge1xuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbXCJkaXNhYmxlZFwiLCBcImhpZGRlblwiLCBcImxhYmVsXCIsIFwidmFsdWVcIl0sXG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLl9yb290IHx8IHRoaXMsIFwiZm9jdXNcIiwgdGhpcywgdHJ1ZSk7XG4gICAgb2ZmKHRoaXMuX3Jvb3QgfHwgdGhpcywgXCJmb2N1c2luXCIsIHRoaXMpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICAgIGRpc2Nvbm5lY3RJbnB1dCh0aGlzKTtcbiAgICB0aGlzLl9yb290ID0gdm9pZCAwO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBfcHJldiwgbmV4dCkge1xuICAgIGNvbnN0IHRleHQgPSBwcm9wID09IG51bGwgPyB2b2lkIDAgOiBwcm9wLnNwbGl0KFwiZGF0YS1zci1cIilbMV07XG4gICAgY29uc3QgY3NzID0gYGlucHV0W2xpc3Q9XCIke3RoaXMuaWR9XCJdYDtcbiAgICBpZiAoVEVYVFNbdGV4dF0pIHRoaXMuX3RleHRzW3RleHRdID0gbmV4dCB8fCBURVhUU1t0ZXh0XTtcbiAgICBlbHNlIGlmICh0aGlzLl9yb290KSB7XG4gICAgICBpZiAodGhpcy5faW5wdXQpIHNldHVwSW5wdXQodGhpcywgdGhpcy5faW5wdXQpO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiB0aGlzLl9yb290LnF1ZXJ5U2VsZWN0b3JBbGwoY3NzKSlcbiAgICAgICAgc2V0dXBJbnB1dCh0aGlzLCBpbnB1dCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgeyB0YXJnZXQsIHR5cGUgfSA9IGV2ZW50O1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKHR5cGUgPT09IFwiY2xpY2tcIikgb25DbGljayh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiZm9jdXNcIiB8fCB0eXBlID09PSBcImZvY3VzaW5cIikgb25Gb2N1cyh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiYmx1clwiIHx8IHR5cGUgPT09IFwiZm9jdXNvdXRcIikgb25CbHVyKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIG9uS2V5RG93bih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgdGhpcy5jb250YWlucyh0YXJnZXQpKVxuICAgICAgaXNNb3VzZURvd24oZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcIm11dGF0aW9uXCIgfHwgdHlwZSA9PT0gXCJpbnB1dFwiKSB7XG4gICAgICBjbGVhclRpbWVvdXQoSU5QVVRfREVCT1VOQ0UpO1xuICAgICAgSU5QVVRfREVCT1VOQ0UgPSBzZXRUaW1lb3V0KG9uSW5wdXQsIDAsIHRoaXMsIGV2ZW50KTtcbiAgICB9XG4gIH1cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ1LW9wdGlvblwiKTtcbiAgfVxufTtcbnZhciBpc0Rpc2FibGVkID0gKGlucHV0KSA9PiAoaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IGlucHV0LmRpc2FibGVkKSB8fCAoaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IGlucHV0LnJlYWRPbmx5KSB8fCBmYWxzZTtcbnZhciBzZXRFeHBhbmRlZCA9IChzZWxmLCBvcGVuKSA9PiB7XG4gIHZhciBfYTIsIF9iLCBfYztcbiAgaWYgKHNlbGYuaGlkZGVuICE9PSBvcGVuKSByZXR1cm47XG4gIHNlbGYuaGlkZGVuID0gaXNEaXNhYmxlZChzZWxmID09IG51bGwgPyB2b2lkIDAgOiBzZWxmLl9pbnB1dCkgfHwgIW9wZW47XG4gIChfYTIgPSBtdXRhdGlvbk9ic2VydmVyKHNlbGYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRha2VSZWNvcmRzKCk7XG4gIGNvbnN0IGlzUG9wb3ZlciA9IHNlbGYuaXNDb25uZWN0ZWQgJiYgc2VsZi5wb3BvdmVyICYmICgoX2IgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmlzQ29ubmVjdGVkKSAmJiAoKF9jID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYy5wb3BvdmVyVGFyZ2V0RWxlbWVudCkgPT09IHNlbGY7XG4gIGlmIChzZWxmLl9pbnB1dCkgc2V0dXBJbnB1dChzZWxmLCBzZWxmLl9pbnB1dCwgb3Blbik7XG4gIGlmIChpc1BvcG92ZXIpIGF0dHIoc2VsZiwgXCJwb3BvdmVyXCIsIFwibWFudWFsXCIpO1xuICBpZiAoaXNQb3BvdmVyKSBzZWxmLnRvZ2dsZVBvcG92ZXIob3Blbik7XG4gIGlmIChvcGVuKSBvbklucHV0KHNlbGYpO1xufTtcbnZhciBkaXNjb25uZWN0SW5wdXQgPSAoc2VsZikgPT4ge1xuICBpZiAoIXNlbGYuX2lucHV0KSByZXR1cm47XG4gIG9mZihzZWxmLl9pbnB1dCB8fCBzZWxmLCBFVkVOVFNfSU5QVVQsIHNlbGYpO1xuICBvZmYoc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gIHNlbGYuX2lucHV0ID0gdm9pZCAwO1xufTtcbnZhciBzZXR1cElucHV0ID0gKHNlbGYsIGlucHV0LCBvcGVuID0gZmFsc2UpID0+IHtcbiAgaWYgKHNlbGYucG9wb3ZlcikgYXR0cihpbnB1dCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKHNlbGYpKTtcbiAgb24oaW5wdXQsIEVWRU5UU19JTlBVVCwgc2VsZiwgdHJ1ZSk7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1hdXRvY29tcGxldGVcIiwgXCJsaXN0XCIpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtY29udHJvbHNcIiwgdXNlSWQoc2VsZikpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7IUlTX01PQklMRSB8fCBvcGVufWApO1xuICBhdHRyKGlucHV0LCBcImF1dG9jb21wbGV0ZVwiLCBcIm9mZlwiKTtcbiAgYXR0cihpbnB1dCwgXCJyb2xlXCIsIGlzRGlzYWJsZWQoaW5wdXQpID8gbnVsbCA6IFwiY29tYm9ib3hcIik7XG59O1xudmFyIG9uRm9jdXMgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgaXNJbnB1dCA9IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQ7XG4gIGlmIChpc0lucHV0ICYmIGV2ZW50LmlzVHJ1c3RlZCkgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIGlmIChzZWxmLl9pbnB1dCAhPT0gZXZlbnQudGFyZ2V0ICYmIGlzSW5wdXQgJiYgZXZlbnQudGFyZ2V0Lmxpc3QgPT09IHNlbGYpIHtcbiAgICBpZiAoc2VsZi5faW5wdXQpIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgICBzZWxmLl9pbnB1dCA9IGV2ZW50LnRhcmdldDtcbiAgICBzZWxmLl9pbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNcIikpO1xuICAgIHNlbGYuX2lucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJmb2N1c2luXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgYXR0cihzZWxmLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKChfYTIgPSBzZWxmLl9pbnB1dC5sYWJlbHMpID09IG51bGwgPyB2b2lkIDAgOiBfYTJbMF0pKTtcbiAgICBvbihzZWxmLl9yb290IHx8IHNlbGYsIEVWRU5UUywgc2VsZik7XG4gICAgc2V0RXhwYW5kZWQoc2VsZiwgYXR0cihzZWxmLl9pbnB1dCwgXCJpbnB1dG1vZGVcIikgIT09IFwibm9uZVwiKTtcbiAgICBzcGVhaygpO1xuICB9XG59O1xudmFyIG9uQmx1ciA9IChzZWxmLCBldmVudCkgPT4ge1xuICBpZiAoIUlTX0FORFJPSUQgJiYgIWlzTW91c2VEb3duKCkgJiYgc2VsZi5faW5wdXQpXG4gICAgc2V0VGltZW91dChvbkJsdXJyZWQsIDAsIHNlbGYpO1xuICBpZiAoZXZlbnQudGFyZ2V0ID09PSBzZWxmLl9pbnB1dCAmJiBldmVudC5pc1RydXN0ZWQpXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59O1xudmFyIG9uQmx1cnJlZCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSAoKF9hMiA9IHNlbGYuX3Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuYWN0aXZlRWxlbWVudCkgfHwgbnVsbDtcbiAgY29uc3QgaW5wdXQgPSBzZWxmLl9pbnB1dDtcbiAgaWYgKGlucHV0ICYmIGlucHV0ICE9PSByZWxhdGVkVGFyZ2V0ICYmICFzZWxmLmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImJsdXJcIiwgeyByZWxhdGVkVGFyZ2V0IH0pKTtcbiAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEZvY3VzRXZlbnQoXCJmb2N1c291dFwiLCB7IGJ1YmJsZXM6IHRydWUsIHJlbGF0ZWRUYXJnZXQgfSlcbiAgICApO1xuICAgIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgfVxufTtcbnZhciBvbkNsaWNrID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9pbnB1dCB8fCBzZWxmLl9pbnB1dCA9PT0gdGFyZ2V0KSByZXR1cm4gc2V0RXhwYW5kZWQoc2VsZiwgdHJ1ZSk7XG4gIGZvciAoY29uc3Qgb3B0IG9mIHNlbGYub3B0aW9ucylcbiAgICBpZiAob3B0LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgIGlmIChhdHRyKHNlbGYsIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIikgIT09IFwidHJ1ZVwiKSB7XG4gICAgICAgIChfYTIgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xuICAgICAgICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2V0VmFsdWUoc2VsZi5faW5wdXQsIG9wdC52YWx1ZSk7XG4gICAgfVxuICBpZiAoSVNfQU5EUk9JRCkgb25CbHVycmVkKHNlbGYpO1xufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IGtleSwgdGFyZ2V0LCBhbHRLZXksIGN0cmxLZXksIHNoaWZ0S2V5LCBtZXRhS2V5IH0gPSBlO1xuICBjb25zdCBpc0VzY2FwZSA9IGtleSA9PT0gXCJFc2NhcGVcIiB8fCBrZXkgPT09IFwiRXNjXCI7XG4gIGlmIChhbHRLZXkgfHwgY3RybEtleSB8fCBtZXRhS2V5IHx8IHNoaWZ0S2V5IHx8IGtleSA9PT0gXCJUYWJcIikgcmV0dXJuO1xuICBpZiAoaXNFc2NhcGUgJiYgIXNlbGYuaGlkZGVuKSBlID09IG51bGwgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gIHNldEV4cGFuZGVkKHNlbGYsICFpc0VzY2FwZSk7XG4gIGNvbnN0IG9wdGlvbnMgPSBbLi4uc2VsZi5vcHRpb25zXS5maWx0ZXIoXG4gICAgKGVsKSA9PiBhdHRyKGVsLCBcImFyaWEtaGlkZGVuXCIpICE9PSBcInRydWVcIiAmJiBlbC5vZmZzZXRIZWlnaHRcbiAgKTtcbiAgY29uc3QgcHJldiA9IG9wdGlvbnMuaW5kZXhPZih0YXJnZXQpO1xuICBsZXQgbmV4dCA9IC0xO1xuICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiKSBuZXh0ID0gKHByZXYgKyAxKSAlIG9wdGlvbnMubGVuZ3RoO1xuICBpZiAoa2V5ID09PSBcIkFycm93VXBcIikgbmV4dCA9ICh+cHJldiA/IHByZXYgOiBvcHRpb25zLmxlbmd0aCkgLSAxO1xuICBpZiAofnByZXYpIHtcbiAgICBpZiAoa2V5ID09PSBcIkhvbWVcIiB8fCBrZXkgPT09IFwiUGFnZVVwXCIpIG5leHQgPSAwO1xuICAgIGlmIChrZXkgPT09IFwiRW5kXCIgfHwga2V5ID09PSBcIlBhZ2VEb3duXCIpIG5leHQgPSBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgaWYgKGtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICBvcHRpb25zW3ByZXZdLmNsaWNrKCk7XG4gICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuICBpZiAob3B0aW9uc1tuZXh0XSkgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykgb3B0aW9uLnRhYkluZGV4ID0gLTE7XG4gIGlmIChvcHRpb25zW25leHRdKSBlLnByZXZlbnREZWZhdWx0KCk7XG4gIChfYTIgPSBvcHRpb25zW25leHRdIHx8IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG4gIGlmICghb3B0aW9uc1tuZXh0XSAmJiBrZXkgPT09IFwiQXJyb3dVcFwiKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIHJldHVybiAoX2EzID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTMuc2V0U2VsZWN0aW9uUmFuZ2UoOTk5LCA5OTkpO1xuICAgIH0pO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYsIGUpID0+IHtcbiAgY29uc3QgeyBfdGV4dHMsIF9yb290LCBfaW5wdXQsIG9wdGlvbnMgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gKF9pbnB1dCA9PSBudWxsID8gdm9pZCAwIDogX2lucHV0LnZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBmaWx0ZXIgPSAhc2VsZi5oYXNBdHRyaWJ1dGUoXCJkYXRhLW5vZmlsdGVyXCIpO1xuICBjb25zdCBoaWRkZW4gPSBbXTtcbiAgY29uc3QgdmlzaWJsZSA9IFtdO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKSB7XG4gICAgY29uc3QgaGlkZSA9IG9wdC5kaXNhYmxlZCB8fCBvcHQuaGlkZGVuIHx8IGZpbHRlciAmJiAhb3B0LmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUpO1xuICAgIChoaWRlID8gaGlkZGVuIDogdmlzaWJsZSkucHVzaChvcHQpO1xuICB9XG4gIGZvciAoY29uc3Qgb3B0IG9mIGhpZGRlbikgYXR0cihvcHQsIFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIpO1xuICBmb3IgKGNvbnN0IG9wdCBvZiB2aXNpYmxlKSBhdHRyKG9wdCwgXCJhcmlhLWhpZGRlblwiLCBcImZhbHNlXCIpO1xuICBjb25zdCB0b3RhbCA9IHZpc2libGUubGVuZ3RoO1xuICBjbGVhclRpbWVvdXQoTElWRV9USU1FUik7XG4gIGlmICgoZSA9PSBudWxsID8gdm9pZCAwIDogZS50eXBlKSA9PT0gXCJpbnB1dFwiICYmIHZhbHVlICE9PSBzZWxmLl92YWx1ZSlcbiAgICBMSVZFX1RJTUVSID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gYCR7IXRvdGFsICYmIHNlbGYuaW5uZXJUZXh0LnRyaW0oKSB8fCBgJHtfdGV4dHNbdG90YWwgPT09IDEgPyBcInNpbmd1bGFyXCIgOiBcInBsdXJhbFwiXX1gLnJlcGxhY2UoXCIlZFwiLCBgJHt0b3RhbH1gKX1gO1xuICAgICAgaWYgKCFzZWxmLmhpZGRlbiAmJiAoX3Jvb3QgPT0gbnVsbCA/IHZvaWQgMCA6IF9yb290LmFjdGl2ZUVsZW1lbnQpID09PSBfaW5wdXQpIHNwZWFrKHRleHQpO1xuICAgICAgc2VsZi5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9LCAxZTMpO1xuICBpZiAoSVNfSU9TKVxuICAgIHZpc2libGUuZm9yRWFjaCgob3B0LCBpZHgpID0+IGF0dHIob3B0LCBcInRpdGxlXCIsIGAke2lkeCArIDF9LyR7dG90YWx9YCkpO1xufTtcbmlmIChJU19CUk9XU0VSKVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwibGlzdFwiLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGdldFJvb3QodGhpcykuZ2V0RWxlbWVudEJ5SWQoYXR0cih0aGlzLCBcImxpc3RcIikgfHwgXCJcIik7XG4gICAgfVxuICB9KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtZGF0YWxpc3RcIiwgVUhUTUxEYXRhTGlzdEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERhdGFMaXN0RWxlbWVudCB9O1xuIiwiaW1wb3J0IHsgZmxpcCwgdHlwZSBQbGFjZW1lbnQsIHNoaWZ0LCBzaXplIH0gZnJvbSBcIkBmbG9hdGluZy11aS9kb21cIjtcbmltcG9ydCB7IFVIVE1MQ29tYm9ib3hFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtY29tYm9ib3hcIjtcbmltcG9ydCB7IFVIVE1MRGF0YUxpc3RFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtZGF0YWxpc3RcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRhbmNob3JQb3NpdGlvbixcblx0YXR0cixcblx0aXNJbnB1dExpa2UsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0b25NdXRhdGlvbixcblx0UVVJQ0tfRVZFTlQsXG5cdHVzZUlkLFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0ZJRUxEID0gc3R5bGVzLmZpZWxkLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19WQUxJREFUSU9OUyA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKTtcbmNvbnN0IENTU19WQUxJREFUSU9OID0gQ1NTX1ZBTElEQVRJT05TWzBdO1xuXG5jb25zdCBnZXRUZXh0ID0gKHN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uLCBrZXk6IHN0cmluZykgPT5cblx0c3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShgLS1tdGRzLXRleHQtJHtrZXl9YCk/LnNsaWNlKDEsIC0xKSB8fCBcIlwiOyAvLyBzbGljZSB0byB0cmltIHF1b3Rlc1xuXG5mdW5jdGlvbiBoYW5kbGVGaWVsZE11dGF0aW9uKFxuXHRmaWVsZHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4sXG5cdHZhbGlkYXRlPzogYm9vbGVhbixcbikge1xuXHRmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcylcblx0XHRpZiAoZmllbGQuaXNDb25uZWN0ZWQpIHtcblx0XHRcdGNvbnN0IGxhYmVsczogSFRNTExhYmVsRWxlbWVudFtdID0gW107XG5cdFx0XHRjb25zdCBkZXNjczogRWxlbWVudFtdID0gW107XG5cdFx0XHRjb25zdCB2YWxpZHM6IEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0bGV0IGNvbWJvYm94OiBVSFRNTENvbWJvYm94RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXHRcdFx0bGV0IGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGVsIG9mIGZpZWxkLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSkge1xuXHRcdFx0XHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MTGFiZWxFbGVtZW50KSBsYWJlbHMucHVzaChlbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgVUhUTUxDb21ib2JveEVsZW1lbnQpIGNvbWJvYm94ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSAmJiAhZWwuaGlkZGVuKSBpbnB1dCA9IGVsO1xuXHRcdFx0XHRlbHNlIGlmIChlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLWRlc2NyaXB0aW9uXCIpKSBkZXNjcy5wdXNoKGVsKTtcblx0XHRcdFx0ZWxzZSBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdHZhbGlkID0gYXR0cihlbCwgXCJkYXRhLWNvbG9yXCIpID09PSBcInN1Y2Nlc3NcIiB8fCAhZWwuY2xpZW50SGVpZ2h0OyAvLyBPbmx5IHNldCBpbnZhbGlkIGlmIFZhbGlkYXRpb24gaXMgdmlzaWJsZVxuXHRcdFx0XHRcdHZhbGlkcy5wdXNoKGVsKTtcblx0XHRcdFx0XHRkZXNjcy51bnNoaWZ0KGVsKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxQYXJhZ3JhcGhFbGVtZW50KVxuXHRcdFx0XHRcdGRlc2NzLnNvbWUoKGRlc2MpID0+IGRlc2MuY29udGFpbnMoZWwpKSB8fCBkZXNjcy5wdXNoKGVsKTsgLy8gT25seSBhZGQgaWYgbm90IGFscmVhZHkgaW5zaWRlIGRlc2NyaXB0aW9uXG5cdFx0XHR9XG5cblx0XHRcdGlmIChpbnB1dCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGxhYmVsIG9mIGxhYmVscykgbGFiZWwuaHRtbEZvciA9IHVzZUlkKGlucHV0KTtcblx0XHRcdFx0aWYgKHZhbGlkYXRlICYmIGF0dHIoZmllbGQsIFwiZGF0YS12YWxpZGF0aW9uXCIpID09PSBcImZvcm1cIikge1xuXHRcdFx0XHRcdHZhbGlkID0gaW5wdXQubWF0Y2hlcyhcIjp2YWxpZFwiKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGVsIG9mIHZhbGlkcykgYXR0cihlbCwgXCJoaWRkZW5cIiwgdmFsaWQgPyBcIlwiIDogbnVsbCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVuZGVyQ29tYm9ib3goY29tYm9ib3gpO1xuXHRcdFx0XHRyZW5kZXJDb3VudGVyKGlucHV0KTtcblx0XHRcdFx0cmVuZGVyVGV4dGFyZWFTaXplKGlucHV0KTtcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIGRlc2NzLm1hcCh1c2VJZCkuam9pbihcIiBcIikgfHwgbnVsbCk7IC8vIFJlbW92ZSBpZiBlbXB0eVxuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtaW52YWxpZFwiLCBgJHshdmFsaWR9YCk7XG5cdFx0XHR9XG5cdFx0fVxufVxuXG4vLyBpT1MgZG9lcyBub3Qgc3VwcG9ydCBmaWVsZC1zaXppbmc6IGNvbnRlbnQsIHNvIHdlIG5lZWQgdG8gbWFudWFsbHkgcmVzaXplXG5mdW5jdGlvbiByZW5kZXJUZXh0YXJlYVNpemUodGV4dGFyZWE6IEVsZW1lbnQpIHtcblx0aWYgKHRleHRhcmVhIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuXHRcdHRleHRhcmVhLnN0eWxlLnNldFByb3BlcnR5KFwiLS1tdGRzLXRleHRhcmVhLWhlaWdodFwiLCBcImF1dG9cIik7XG5cdFx0dGV4dGFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG5cdFx0XHRcIi0tbXRkcy10ZXh0YXJlYS1oZWlnaHRcIixcblx0XHRcdGAke3RleHRhcmVhLnNjcm9sbEhlaWdodH1weGAsXG5cdFx0KTtcblx0fVxufVxuXG4vLyBTZXR1cCB0cmFuc2xhdGlvbnMgZnJvbSBDU1MgY3VzdG9tIHByb3BlcnRpZXNcbmZ1bmN0aW9uIHJlbmRlckNvbWJvYm94KGVsOiBVSFRNTENvbWJvYm94RWxlbWVudCB8IG51bGwpIHtcblx0Y29uc3QgeyBjb250cm9sLCBsaXN0IH0gPSBlbCB8fCB7fTtcblxuXHRpZiAoZWwgJiYgbGlzdCAmJiAhZWwuaGFzQXR0cmlidXRlKFwiZGF0YS1zci1hZGRlZFwiKSkge1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1hZGRlZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWFkZGVkXCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItZW1wdHlcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1lbXB0eVwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLWZvdW5kXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtZm91bmRcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1pbnZhbGlkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtaW52YWxpZFwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLW9mXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtb2ZcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1yZW1vdmVcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1yZW1vdmVcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1yZW1vdmVkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtcmVtb3ZlZFwiKSk7XG5cdFx0YXR0cihsaXN0LCBcImRhdGEtc3ItcGx1cmFsXCIsIGdldFRleHQoc3R5bGUsIFwiZGF0YWxpc3QtcGx1cmFsXCIpKTtcblx0XHRhdHRyKGxpc3QsIFwiZGF0YS1zci1zaW5ndWxhclwiLCBnZXRUZXh0KHN0eWxlLCBcImRhdGFsaXN0LXNpbmd1bGFyXCIpKTtcblx0fVxuXHRpZiAobGlzdCAmJiBjb250cm9sICYmICFsaXN0Lmhhc0F0dHJpYnV0ZShcInBvcG92ZXJcIikpIHtcblx0XHRhdHRyKGxpc3QsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcblx0XHRhdHRyKGNvbnRyb2wsIFwicG9wb3ZlcnRhcmdldFwiLCB1c2VJZChsaXN0KSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQ291bnRlcihpbnB1dDogSFRNTElucHV0RWxlbWVudCkge1xuXHRjb25zdCBlbCA9IGlucHV0Py5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdGNvbnN0IGxpbWl0ID0gZWwgJiYgYXR0cihlbCwgXCJkYXRhLWNvdW50XCIpO1xuXG5cdGlmIChlbCAmJiBsaW1pdCkge1xuXHRcdGNvbnN0IHJlbWFpbmRlciA9IE51bWJlcihsaW1pdCkgLSBpbnB1dC52YWx1ZS5sZW5ndGg7XG5cdFx0Y29uc3QgbmV4dEludmFsaWQgPSByZW1haW5kZXIgPCAwO1xuXHRcdGNvbnN0IHByZXZJbnZhbGlkID0gYXR0cihlbCwgXCJhcmlhLWxpdmVcIikgPT09IFwicG9saXRlXCI7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCB8fCBpbnB1dCk7XG5cdFx0Y29uc3Qgb3ZlciA9IGdldFRleHQoc3R5bGUsIFwiY291bnQtb3ZlclwiKTtcblx0XHRjb25zdCB1bmRlciA9IGdldFRleHQoc3R5bGUsIFwiY291bnQtdW5kZXJcIik7XG5cblx0XHRpZiAocHJldkludmFsaWQgIT09IG5leHRJbnZhbGlkKSB7XG5cdFx0XHRhdHRyKGVsLCBcImFyaWEtbGl2ZVwiLCBuZXh0SW52YWxpZCA/IFwicG9saXRlXCIgOiBcIm9mZlwiKTtcblx0XHRcdGZvciAoY29uc3QgY3NzIG9mIENTU19WQUxJREFUSU9OUykgZWwuY2xhc3NMaXN0LnRvZ2dsZShjc3MsIG5leHRJbnZhbGlkKTtcblx0XHR9XG5cdFx0ZWwudGV4dENvbnRlbnQgPSAobmV4dEludmFsaWQgPyBvdmVyIDogdW5kZXIpLnJlcGxhY2UoXG5cdFx0XHRcIiVkXCIsXG5cdFx0XHRgJHtNYXRoLmFicyhyZW1haW5kZXIpfWAsXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGVGaWVsZFRvZ2dsZShldmVudDogRXZlbnQgJiB7IG5ld1N0YXRlPzogc3RyaW5nIH0pIHtcblx0aWYgKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIFVIVE1MRGF0YUxpc3RFbGVtZW50KSB7XG5cdFx0Y29uc3QgbGlzdCA9IGV2ZW50LnRhcmdldDtcblx0XHRjb25zdCByb290ID0gbGlzdC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QgfCBudWxsO1xuXHRcdGNvbnN0IGFuY2hvciA9IHJvb3Q/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuXHRcdFx0YFtwb3BvdmVydGFyZ2V0PVwiJHtsaXN0LmlkfVwiXWAsXG5cdFx0KTtcblxuXHRcdGlmIChldmVudC5uZXdTdGF0ZSA9PT0gXCJjbG9zZWRcIikgYW5jaG9yUG9zaXRpb24obGlzdCwgZmFsc2UpO1xuXHRcdGVsc2UgaWYgKGFuY2hvcilcblx0XHRcdGFuY2hvclBvc2l0aW9uKGxpc3QsIGFuY2hvciwge1xuXHRcdFx0XHRwbGFjZW1lbnQ6IChhdHRyKGxpc3QsIFwiZGF0YS1wb3NpdGlvblwiKSA/PyBcImJvdHRvbVwiKSBhcyBQbGFjZW1lbnQsXG5cdFx0XHRcdG1pZGRsZXdhcmU6IFtcblx0XHRcdFx0XHRmbGlwKCksXG5cdFx0XHRcdFx0c2hpZnQoKSxcblx0XHRcdFx0XHRzaXplKHtcblx0XHRcdFx0XHRcdHBhZGRpbmc6IDEwLFxuXHRcdFx0XHRcdFx0YXBwbHkoeyBhdmFpbGFibGVIZWlnaHQgfSkge1xuXHRcdFx0XHRcdFx0XHRsaXN0LnN0eWxlLndpZHRoID0gYCR7YW5jaG9yLm9mZnNldFdpZHRofXB4YDtcblx0XHRcdFx0XHRcdFx0bGlzdC5zdHlsZS5tYXhIZWlnaHQgPSBgJHtNYXRoLm1heCg1MCwgYXZhaWxhYmxlSGVpZ2h0KX1weGA7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRdLFxuXHRcdFx0fSk7XG5cdH1cbn1cbi8vIFVwZGF0ZSB3aGVuIHR5cGluZ1xuZnVuY3Rpb24gaGFuZGxlRmllbGRJbnB1dChldmVudDogRXZlbnQpIHtcblx0aWYgKGlzSW5wdXRMaWtlKGV2ZW50LnRhcmdldCkpIHtcblx0XHRyZW5kZXJDb3VudGVyKGV2ZW50LnRhcmdldCk7XG5cdFx0cmVuZGVyVGV4dGFyZWFTaXplKGV2ZW50LnRhcmdldCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRmllbGRWYWxkaWF0aW9uKGV2ZW50OiBFdmVudCkge1xuXHRjb25zdCBmaWVsZCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihgLiR7Q1NTX0ZJRUxEfWApO1xuXHRpZiAoZXZlbnQudHlwZSA9PT0gXCJpbnZhbGlkXCIgJiYgZmllbGQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBzaG93aW5nIGRlZmF1bHQgdmFsaWRhdGlvbiBidWJibGVzXG5cdGhhbmRsZUZpZWxkTXV0YXRpb24oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShDU1NfRklFTEQpLCB0cnVlKTsgLy8gVXBkYXRlIHN0YXRlXG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRCwgaGFuZGxlRmllbGRNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImlucHV0XCIsIGhhbmRsZUZpZWxkSW5wdXQsIFFVSUNLX0VWRU5UKTtcblx0b24oZG9jdW1lbnQsIFwiaW52YWxpZCxzdWJtaXRcIiwgaGFuZGxlRmllbGRWYWxkaWF0aW9uLCB0cnVlKTsgLy8gVXNlIGNhcHR1cmUgYXMgaW52YWxpZCBhbmQgc3VibWl0IGRvZXMgbm90IGJ1YmJsZVxuXHRvbihkb2N1bWVudCwgXCJ0b2dnbGVcIiwgaGFuZGxlRmllbGRUb2dnbGUsIFFVSUNLX0VWRU5UKTsgLy8gVXNlIGNhcHR1cmUgc2luY2UgdG9nZ2xlIGRvZXMgbm90IGJ1YmJsZVxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgaXNJbnB1dExpa2UsIG9uTG9hZGVkLCBvbk11dGF0aW9uLCB1c2VJZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRklFTERTRVQgPSBzdHlsZXMuZmllbGRzZXQuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1ZBTElEQVRJT04gPSBzdHlsZXMudmFsaWRhdGlvbi5zcGxpdChcIiBcIilbMF07XG5jb25zdCBBUklBX0RFU0MgPSBcImFyaWEtZGVzY3JpYmVkYnlcIjtcbmNvbnN0IEFSSUFfSU5WQUxJRCA9IFwiYXJpYS1pbnZhbGlkXCI7XG5cbi8vIFVzaW5nIHJlcXVlc3RBbmltYXRpb25GcmFtZSB0byBlbnN1cmUgaXQgcnVucyBhZnRlciBmaWVsZC1vYnNlcnZlclxuZnVuY3Rpb24gaGFuZGxlRmllbGRzZXRNdXRhdGlvbihmaWVsZHNldHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4pIHtcblx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRmb3IgKGNvbnN0IGZpZWxkc2V0IG9mIGZpZWxkc2V0cylcblx0XHRcdGlmIChmaWVsZHNldC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0XHRjb25zdCBpbnB1dHM6IEhUTUxJbnB1dEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0XHRsZXQgdmFsaWRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdFx0XHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBlbCBvZiBmaWVsZHNldC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikpIHtcblx0XHRcdFx0XHRpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdFx0dmFsaWQgPSBhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8ICFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0XHR2YWxpZElkID0gdXNlSWQoZWwpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoaXNJbnB1dExpa2UoZWwpKSBpbnB1dHMucHVzaChlbCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykge1xuXHRcdFx0XHRcdGNvbnN0IGRlc2MgPSBhdHRyKGlucHV0LCBBUklBX0RFU0MpPy5yZXBsYWNlKHZhbGlkSWQgfHwgXCIjXCIsIFwiXCIpO1xuXG5cdFx0XHRcdFx0YXR0cihpbnB1dCwgQVJJQV9ERVNDLCBgJHt2YWxpZElkIHx8IFwiXCJ9ICR7ZGVzYyB8fCBcIlwifWAudHJpbSgpKTtcblx0XHRcdFx0XHRhdHRyKGlucHV0LCBBUklBX0lOVkFMSUQsIGAkeyF2YWxpZH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRFNFVCwgaGFuZGxlRmllbGRzZXRNdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19MT0dPID0gc3R5bGVzLmxvZ28uc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVMb2dvTXV0YXRpb24oW2xvZ29dOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRpZiAobG9nbz8uaXNDb25uZWN0ZWQgJiYgbG9nbz8uZmlyc3RFbGVtZW50Q2hpbGQgaW5zdGFuY2VvZiBTVkdTVkdFbGVtZW50KSB7XG5cdFx0Zm9yIChjb25zdCBpY29uIG9mIGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvckFsbChcImxpbmtbcmVsfj0naWNvbiddXCIpKVxuXHRcdFx0aWNvbi5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgXCJkaXNhYmxlZFwiKTsgLy8gRGlzYWJsZSBwcmV2aW91cyBpY29uIChidXQgbm90IHJlbW92ZSBpcyBhcyB0aGlzIG1ha2VzIE5leHQuanMgc2FkKVxuXG5cdFx0Y29uc3Qgc3ZnID0gbG9nby5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRjb25zdCBpc0RvdCA9IGxvZ28/Lmhhc0F0dHJpYnV0ZShcImRhdGEtZW52XCIpO1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoc3ZnKTtcblx0XHRjb25zdCB0ZXh0ID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcImNvbG9yXCIpO1xuXHRcdGNvbnN0IGJhY2sgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1tdGRzLWxvZ28tY29sb3JcIik7XG5cdFx0Y29uc3QgaWNvbiA9IHN2Zy5vdXRlckhUTUxcblx0XHRcdC5yZXBsYWNlKC9cXG4rL2csIFwiIFwiKSAvLyBQcmV2ZW50IGxpbmUgYnJlYWtzXG5cdFx0XHQucmVwbGFjZSgvKGZpbGx8d2lkdGh8aGVpZ2h0fHhtbG5zKT1cIlteXCJdK1wiL2dpLCBcIlwiKVxuXHRcdFx0LnJlcGxhY2UoXCI8c3ZnXCIsIGA8c3ZnIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIGZpbGw9XCIke3RleHR9XCJgKTtcblxuXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoXG5cdFx0XHRPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpLCB7XG5cdFx0XHRcdGhyZWY6IGBkYXRhOmltYWdlL3N2Zyt4bWwsJHtlbmNvZGVVUklDb21wb25lbnQoYDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNTUgNTUnPjxyZWN0IGZpbGw9JyR7aXNEb3QgPyBcIm5vbmVcIiA6IGJhY2t9JyB3aWR0aD0nNTEnIGhlaWdodD0nNTEnIHg9JzInIHk9JzInIHN0cm9rZT0nJHt0ZXh0fScgc3Ryb2tlLWRhc2hhcnJheT0nMC4wOSA2LjM4JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1vcGFjaXR5PScke2lzRG90ID8gMC42IDogMH0nIHN0cm9rZS13aWR0aD0nMi4zJyByeD0nMjUuNScvPjxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg3LjUgNy41KVwiPiR7aWNvbn08L2c+PC9zdmc+YCl9YCxcblx0XHRcdFx0cmVsOiBcImljb25cIixcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19MT0dPLCBoYW5kbGVMb2dvTXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCB7IGZsaXAsIHR5cGUgUGxhY2VtZW50LCBzaGlmdCwgc2l6ZSB9IGZyb20gXCJAZmxvYXRpbmctdWkvZG9tXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYW5jaG9yUG9zaXRpb24sIGF0dHIsIG9uLCBvbkxvYWRlZCwgUVVJQ0tfRVZFTlQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1BPUE9WRVIgPSBzdHlsZXMucG9wb3Zlci5zcGxpdChcIiBcIilbMF07XG5sZXQgT1BFTl9QT1BPVkVSUyA9IDA7IC8vIFNwZWVkIHVwIGJ5IG9ubHkgY2hlY2tpbmcgY2xpY2tzIGlmIHdlIGhhdmUgb3BlbiBwb3BvdmVyc1xuXG5mdW5jdGlvbiBoYW5kbGVQb3BvdmVyVG9nZ2xlKHtcblx0dGFyZ2V0OiBlbCxcblx0bmV3U3RhdGUsXG59OiBFdmVudCAmIHsgbmV3U3RhdGU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1BPUE9WRVIpKSB7XG5cdFx0Y29uc3QgaXNDbG9zaW5nID0gbmV3U3RhdGUgPT09IFwiY2xvc2VkXCI7XG5cdFx0Y29uc3QgaXNDb250YWluID0gYXR0cihlbCwgXCJkYXRhLW92ZXJzY3JvbGxcIikgPT09IFwiY29udGFpblwiO1xuXHRcdGNvbnN0IGFuY2hvciA9IChlbC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QpPy5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pihcblx0XHRcdGBbcG9wb3ZlcnRhcmdldD1cIiR7ZWwuaWR9XCJdYCxcblx0XHQpO1xuXG5cdFx0T1BFTl9QT1BPVkVSUyArPSBpc0Nsb3NpbmcgPyAtMSA6IDE7XG5cdFx0aWYgKGlzQ2xvc2luZykgYW5jaG9yUG9zaXRpb24oZWwsIGZhbHNlKTtcblx0XHRlbHNlIGlmIChhbmNob3IpXG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgYW5jaG9yLCB7XG5cdFx0XHRcdHBsYWNlbWVudDogKGF0dHIoZWwsIFwiZGF0YS1wb3NpdGlvblwiKSB8fCBcImJvdHRvbVwiKSBhcyBQbGFjZW1lbnQsXG5cdFx0XHRcdG1pZGRsZXdhcmU6IFtmbGlwKCksIHNoaWZ0KHsgcGFkZGluZzogMTAgfSldLmNvbmNhdChcblx0XHRcdFx0XHRpc0NvbnRhaW5cblx0XHRcdFx0XHRcdD8gc2l6ZSh7XG5cdFx0XHRcdFx0XHRcdFx0cGFkZGluZzogMTAsXG5cdFx0XHRcdFx0XHRcdFx0YXBwbHkoeyBhdmFpbGFibGVIZWlnaHQgfSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZWwuc3R5bGUubWF4SGVpZ2h0ID0gYCR7TWF0aC5tYXgoNTAsIGF2YWlsYWJsZUhlaWdodCl9cHhgO1xuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQ6IFtdLFxuXHRcdFx0XHQpLFxuXHRcdFx0fSk7XG5cdH1cbn1cblxuLy8gUG9seWZpbGwgcG9wb3ZlcnRhcmdldCBmb3IgPGE+IChub3Qgc3VwcG9ydGVkIGJ5IG5hdGl2ZSlcbi8vIGFuZCBhdXRvbWF0aWNhbGx5IGFzc3VtZSBwb3BvdmVydGFyZ2V0IGlzIHRoZSBjbG9zZXN0IHBhcmVudCBwb3BvdmVyXG4vLyBidXQgcmVzcGVjdCB0aGUgcG9wb3ZlcnRhcmdldCBhbmQgcG9wb3ZlcnRhcmdldGFjdGlvbiBhdHRyaWJ1dGVcbmZ1bmN0aW9uIGhhbmRsZVBvcG92ZXJMaW5rQ2xpY2soeyB0YXJnZXQgfTogRXZlbnQpIHtcblx0Y29uc3QgY2xvc2UgPVxuXHRcdE9QRU5fUE9QT1ZFUlMgJiYgKHRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKFwiYSxbcG9wb3ZlcnRhcmdldGFjdGlvbl1cIik7XG5cblx0aWYgKGNsb3NlKSB7XG5cdFx0Y29uc3QgYWN0aW9uID0gYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0YWN0aW9uXCIpIHx8IFwidG9nZ2xlXCI7XG5cdFx0Y29uc3Qgb3BlbiA9IGFjdGlvbiA9PT0gXCJzaG93XCIgfHwgKGFjdGlvbiA9PT0gXCJoaWRlXCIgPyBmYWxzZSA6IHVuZGVmaW5lZCk7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0XCIpIHx8IFwiXCIpO1xuXHRcdGNvbnN0IHBvcG92ZXIgPSAodGFyZ2V0IHx8IGNsb3NlKS5jbG9zZXN0PEhUTUxFbGVtZW50PihgLiR7Q1NTX1BPUE9WRVJ9YCk7XG5cblx0XHQvLyBQb3BvdmVyIGNhbiBiZSBkaXNjb25uZXRlZCBieSBjbGljayBoYW5kbGVyIGRlZXBlciBkb3duIGluIHRoZSBET00gdGhyZWUgYmVmb3JlIHJlYWNoaW5nIGRvY3VtZW50XG5cdFx0aWYgKHBvcG92ZXI/LmlzQ29ubmVjdGVkICYmIHBvcG92ZXI/LnRvZ2dsZVBvcG92ZXIpXG5cdFx0XHRwb3BvdmVyLnRvZ2dsZVBvcG92ZXIob3Blbik7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJ0b2dnbGVcIiwgaGFuZGxlUG9wb3ZlclRvZ2dsZSwgUVVJQ0tfRVZFTlQpOyAvLyBVc2UgY2FwdHVyZSBzaW5jZSB0b2dnbGUgZG9lcyBub3QgYnViYmxlXG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZVBvcG92ZXJMaW5rQ2xpY2spOyAvLyBBbGxvdyBgPGE+YCB0byB1c2UgYHBvcG92ZXJ0YXJnZXRgIGFzIHdlbGxcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19UQUJMRSA9IHN0eWxlcy50YWJsZS5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZVRhYmxlTXV0YXRpb24odGFibGVzOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxUYWJsZUVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgdGFibGUgb2YgdGFibGVzKSB7XG5cdFx0Y29uc3QgdGhzOiBzdHJpbmdbXSA9IFtdOyAvLyBBZGQgZGF0YS10aD1cIlwiIHRvIGVhY2ggY2VsbCB0byBzdXBwb3J0IGRhdGEtbW9iaWxlIGRlc2lnbnNcblxuXHRcdGF0dHIodGFibGUsIFwicm9sZVwiLCBcInRhYmxlXCIpOyAvLyBBZGQgaGVscGluZyByb2xlPVwiXCIgdG8gZW5zdXJlIHNjcmVlbiByZWFkZXJzIHVuZGVyc3RhbmQgdGhlIHRhYmxlIHJlZ2FyZGxlc3Mgb2YgQ1NTIGRpc3BsYXlcblx0XHRpZiAodGFibGUuY2FwdGlvbikgYXR0cih0YWJsZS5jYXB0aW9uLCBcInJvbGVcIiwgXCJjYXB0aW9uXCIpO1xuXHRcdGZvciAoY29uc3QgZ3JvdXAgb2YgW3RhYmxlLnRIZWFkLCB0YWJsZS50Rm9vdCwgLi4udGFibGUudEJvZGllc10pXG5cdFx0XHRpZiAoZ3JvdXApIHtcblx0XHRcdFx0YXR0cihncm91cCwgXCJyb2xlXCIsIFwicm93Z3JvdXBcIik7XG5cdFx0XHRcdGNvbnN0IGlzVGJvZHkgPSBncm91cC5ub2RlTmFtZSA9PT0gXCJUQk9EWVwiO1xuXG5cdFx0XHRcdGZvciAoY29uc3Qgcm93IG9mIGdyb3VwLnJvd3MpIHtcblx0XHRcdFx0XHRhdHRyKHJvdywgXCJyb2xlXCIsIFwicm93XCIpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgY2VsbCBvZiByb3cuY2VsbHMpIHtcblx0XHRcdFx0XHRcdGlmIChpc1Rib2R5KSBhdHRyKGNlbGwsIFwiZGF0YS10aFwiLCB0aHNbY2VsbC5jZWxsSW5kZXhdIHx8IFwiOmVtcHR5XCIpO1xuXHRcdFx0XHRcdFx0ZWxzZSB0aHMucHVzaChjZWxsLmlubmVyVGV4dC50cmltKCkpOyAvLyBVc2luZyBpbm5lclRleHQgdG8gb25seSBpbmNsdWRlIHZpc2libGUgdGV4dFxuXHRcdFx0XHRcdFx0aWYgKGNlbGwubm9kZU5hbWUgPT09IFwiVERcIikgYXR0cihjZWxsLCBcInJvbGVcIiwgXCJjZWxsXCIpO1xuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGF0dHIoY2VsbCwgXCJyb2xlXCIsIGlzVGJvZHkgPyBcInJvd2hlYWRlclwiIDogXCJjb2x1bW5oZWFkZXJcIik7XG5cdFx0XHRcdFx0XHRcdGF0dHIoY2VsbCwgXCJzY29wZVwiLCBpc1Rib2R5ID8gXCJyb3dcIiA6IFwiY29sXCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfVEFCTEUsIGhhbmRsZVRhYmxlTXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBvbiwgb25Mb2FkZWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1RPR0dMRUdST1VQID0gYC4ke3N0eWxlcy50b2dnbGVncm91cC5zcGxpdChcIiBcIilbMF19YDtcblxuLy8gUHJldmVudCBicm93c2VycyBmcm9tIHNob3dpbmcgZGVmYXVsdCB2YWxpZGF0aW9uIGJ1YmJsZXNcbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZWdyb3VwS2V5ZG93bihldmVudDogRXZlbnQgJiBQYXJ0aWFsPEtleWJvYXJkRXZlbnQ+KSB7XG5cdGNvbnN0IHsga2V5LCB0YXJnZXQ6IGVsIH0gPSBldmVudDtcblx0Y29uc3QgZ3JvdXAgPSBlbCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgZWwuY2xvc2VzdChDU1NfVE9HR0xFR1JPVVApO1xuXG5cdGlmICghZ3JvdXApIHJldHVybjtcblx0aWYgKGtleSA9PT0gXCJFbnRlclwiKSBlbC5jbGljaygpO1xuXHRpZiAoa2V5Py5zdGFydHNXaXRoKFwiQXJyb3dcIikpIHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGNvbnN0IGlucHV0cyA9IGdyb3VwLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIik7XG5cdFx0Y29uc3QgaW5kZXggPSBbLi4uaW5wdXRzXS5pbmRleE9mKGVsKTtcblx0XHRjb25zdCBtb3ZlID0ga2V5Lm1hdGNoKC9BcnJvdyhSaWdodHxEb3duKS8pID8gMSA6IC0xO1xuXHRcdGlucHV0c1soaW5wdXRzLmxlbmd0aCArIGluZGV4ICsgbW92ZSkgJSBpbnB1dHMubGVuZ3RoXT8uZm9jdXMoKTtcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiBvbihkb2N1bWVudCwgXCJrZXlkb3duXCIsIGhhbmRsZVRvZ2dsZWdyb3VwS2V5ZG93bikpO1xuIiwiaW1wb3J0IHsgZmxpcCwgdHlwZSBQbGFjZW1lbnQsIHNoaWZ0IH0gZnJvbSBcIkBmbG9hdGluZy11aS9kb21cIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRhbmNob3JQb3NpdGlvbixcblx0YXR0cixcblx0SVNfQlJPV1NFUixcblx0b24sXG5cdG9uTG9hZGVkLFxuXHRRVUlDS19FVkVOVCxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IERFU0NSSUJFREJZID0gXCJhcmlhLWRlc2NyaWJlZGJ5XCI7XG5jb25zdCBFU0MgPSBcIkVzY2FwZVwiO1xuY29uc3QgTEFCRUxMRURCWSA9IFwiYXJpYS1sYWJlbGxlZGJ5XCI7XG5jb25zdCBQT1NJVElPTl9DU1NfUFJPUEVSVFkgPSBcIi0tbXRkcy10b29sdGlwLXBvc2l0aW9uXCI7XG5jb25zdCBUSFJPVFRMRV9ERUxBWSA9IDMwMDtcbmNvbnN0IFRPT0xUSVAgPSBJU19CUk9XU0VSXG5cdD8gT2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCB7XG5cdFx0XHRjbGFzc05hbWU6IHN0eWxlcy5fdG9vbHRpcCxcblx0XHRcdGlkOiBcIm10ZHMtdG9vbHRpcFwiLFxuXHRcdFx0cG9wb3ZlcjogXCJtYW51YWxcIixcblx0XHR9KVxuXHQ6IG51bGw7IC8vIENyZWF0ZSBhIGR1bW15IGVsZW1lbnQgdG8gYXZvaWQgbnVsbCBjaGVja3NcblxubGV0IEFOQ0hPUjogRWxlbWVudCB8IG51bGwgPSBudWxsO1xubGV0IExBU1RfQ0FMTCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbmxldCBUSFJPVFRMRTogbnVtYmVyIHwgUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gPSAwO1xuXG5mdW5jdGlvbiBoYW5kbGVUb29sdGlwTW92ZSh7IHRhcmdldCwgdHlwZSwga2V5IH06IEV2ZW50ICYgeyBrZXk/OiBzdHJpbmcgfSkge1xuXHRpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIgJiYga2V5ICE9PSBFU0MpIHJldHVybjsgLy8gQWxsb3cgRVNDIGRpc21pc3MgdG8gZm9sbG93IGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvQVJJQS9hcGcvcGF0dGVybnMvdG9vbHRpcC9cblx0Y29uc3Qgd2FpdCA9IExBU1RfQ0FMTCArIFRIUk9UVExFX0RFTEFZIC0gRGF0ZS5ub3coKTtcblx0Y2xlYXJUaW1lb3V0KFRIUk9UVExFKTtcblx0VEhST1RUTEUgPSBzZXRUaW1lb3V0KFxuXHRcdGhhbmRsZVRvb2x0aXBNb3ZlVGhyb3R0bGVkLFxuXHRcdE1hdGgubWF4KHdhaXQsIDApLFxuXHRcdGtleSA9PT0gRVNDID8gbnVsbCA6IHRhcmdldCxcblx0KTtcbn1cblxuLy8gVXNpbmcgYSB0aHJvdHRsZWQgZnVuY3Rpb24gdG8gYXZvaWQgcGVyZm9ybWFuY2UgaXNzdWVzXG5mdW5jdGlvbiBoYW5kbGVUb29sdGlwTW92ZVRocm90dGxlZCh0YXJnZXQ6IEVsZW1lbnQgfCBudWxsKSB7XG5cdExBU1RfQ0FMTCA9IERhdGUubm93KCk7XG5cblx0Ly8gQnVpbGQgYW5kIGFwcGVuZCB0b29sdGlwIGlmIG5vdCBleGlzdGluZ1xuXHRpZiAoIVRPT0xUSVAgfHwgdGFyZ2V0ID09PSBUT09MVElQKSByZXR1cm47IC8vIEFsbG93IHRvb2x0aXAgdG8gYmUgaG92ZXJlZCwgZm9sbG93aW5nIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjEvI2NvbnRlbnQtb24taG92ZXItb3ItZm9jdXNcblx0aWYgKCFUT09MVElQPy5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoVE9PTFRJUCk7IC8vIEVuc3VyZSBjb25uZWN0ZWRcblx0bGV0IGFuY2hvciA9IHRhcmdldD8uY2xvc2VzdD8uPEVsZW1lbnQ+KFwiW2RhdGEtdG9vbHRpcF1cIikgfHwgbnVsbDtcblxuXHQvLyBObyBuZWVkIHRvIHVwZGF0ZVxuXHRpZiAoYW5jaG9yID09PSBBTkNIT1IpIHJldHVybjtcblxuXHRjb25zdCBjb250ZW50ID0gKGFuY2hvciAmJiBhdHRyKGFuY2hvciwgXCJkYXRhLXRvb2x0aXBcIikpIHx8IFwiXCI7XG5cdGNvbnN0IHBvc2l0aW9uID1cblx0XHQoYW5jaG9yICYmIGF0dHIoYW5jaG9yLCBcImRhdGEtdG9vbHRpcC1wb3NpdGlvblwiKSkgfHxcblx0XHR3aW5kb3dcblx0XHRcdC5nZXRDb21wdXRlZFN0eWxlKGFuY2hvciB8fCBkb2N1bWVudC5ib2R5KVxuXHRcdFx0LmdldFByb3BlcnR5VmFsdWUoUE9TSVRJT05fQ1NTX1BST1BFUlRZKVxuXHRcdFx0Py50cmltKCkgfHxcblx0XHRcInRvcFwiO1xuXG5cdGNvbnN0IGlzSGlkZGVuID1cblx0XHQhY29udGVudCB8fFxuXHRcdGNvbnRlbnQgPT09IFwiZmFsc2VcIiB8fFxuXHRcdGNvbnRlbnQgPT09IFwidHJ1ZVwiIHx8XG5cdFx0cG9zaXRpb24gPT09IFwibm9uZVwiO1xuXG5cdGlmIChpc0hpZGRlbikgYW5jaG9yID0gbnVsbDsgLy8gRG8gbm90IHNob3cgdG9vbHRpcCBpZiBib29saXNoIHZhbHVlXG5cdGlmIChhbmNob3IpIFRPT0xUSVAudGV4dENvbnRlbnQgPSBjb250ZW50OyAvLyBPbmx5IHVwZGF0ZSBjb250ZW50IGlmIG5ldyBhbmNob3JcblxuXHRjb25zdCBoYWRMYWJlbCA9IEFOQ0hPUiAmJiBhdHRyKEFOQ0hPUiwgTEFCRUxMRURCWSkgPT09IFRPT0xUSVA/LmlkO1xuXHRjb25zdCBoYXNMYWJlbCA9XG5cdFx0KGFuY2hvciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50XG5cdFx0XHQ/IGFuY2hvci5pbm5lclRleHRcblx0XHRcdDogYW5jaG9yPy50ZXh0Q29udGVudFxuXHRcdCk/LnRyaW0oKSB8fFxuXHRcdGFuY2hvcj8uaGFzQXR0cmlidXRlKExBQkVMTEVEQlkpIHx8XG5cdFx0YW5jaG9yPy5oYXNBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIpO1xuXG5cdEFOQ0hPUj8ucmVtb3ZlQXR0cmlidXRlKGhhZExhYmVsID8gTEFCRUxMRURCWSA6IERFU0NSSUJFREJZKTsgLy8gVW5saW5rIHByZXZpb3VzIGFuY2hvclxuXHRhbmNob3JQb3NpdGlvbihUT09MVElQLCBmYWxzZSk7IC8vIFJlc2V0IGFuY2hvciBwb3NpdGlvblxuXG5cdEFOQ0hPUiA9IGFuY2hvcjsgLy8gU3RvcmUgbmV3IGFuY2hvciAtIG1pZ2h0IGJlIG51bGwgaWYgbm8gbmV3IGFuY2hvclxuXHRpZiAoQU5DSE9SKSBhdHRyKEFOQ0hPUiwgaGFzTGFiZWwgPyBERVNDUklCRURCWSA6IExBQkVMTEVEQlksIFRPT0xUSVA/LmlkKTsgLy8gVXNlIHRvb2x0aXAgYXMgZGVzY3JpcHRpb24gaWYgYWxscmVhZHkgaGFzIGxhYmVsXG5cdGlmIChBTkNIT1IpIFRPT0xUSVAuaGlkZVBvcG92ZXIoKTsgLy8gSGlkZSB0b29sdGlwIHNvIGl0IGNhbiBiZSBwbGFjZWQgb24gdG9wLWxheWVyIG9uIG5leHQgc2hvd1xuXHRUT09MVElQLnRvZ2dsZVBvcG92ZXIoISFhbmNob3IpO1xuXHRhbmNob3JQb3NpdGlvbihUT09MVElQLCBhbmNob3IgfHwgZmFsc2UsIHtcblx0XHRwbGFjZW1lbnQ6IHBvc2l0aW9uIGFzIFBsYWNlbWVudCxcblx0XHRtaWRkbGV3YXJlOiBbZmxpcCgpLCBzaGlmdCh7IHBhZGRpbmc6IDEwIH0pXSxcblx0fSk7XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwiYmx1cixmb2N1cyxtb3VzZW91dCxtb3VzZW92ZXJcIiwgaGFuZGxlVG9vbHRpcE1vdmUsIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcImtleWRvd25cIiwgaGFuZGxlVG9vbHRpcE1vdmUsIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcImJsdXJcIiwgaGFuZGxlVG9vbHRpcE1vdmUsIFFVSUNLX0VWRU5UKTtcbn0pO1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xuXG4vLyB1LWRldGFpbHMudHNcbnZhciBVSFRNTERldGFpbHNFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIFVzaW5nIHVuZGVyc2NvcmUgaW5zdGVhZCBvZiBwcml2YXRlIGZpZWxkcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICB0aGlzLl9jb250ZW50ID0gbnVsbDtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgbmFtZTogXCJzdW1tYXJ5XCIgfSksXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IHBhcnQ6IFwiZGV0YWlscy1jb250ZW50XCIgfSksXG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGAke0RJU1BMQVlfQkxPQ0t9XG4gICAgICAgIDo6c2xvdHRlZCh1LXN1bW1hcnkpIHsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBibG9jayB9XG5cdFx0XHRcdDo6c2xvdHRlZCh1LXN1bW1hcnkpOjpiZWZvcmUgeyBjb250ZW50OiAnJzsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBtYXJnaW4taW5saW5lOiAuMDVlbSAuMzEyNWVtOyBib3JkZXItYmxvY2s6IC4zMTI1ZW0gc29saWQgdHJhbnNwYXJlbnQ7IGJvcmRlci1pbmxpbmUtc3RhcnQ6IC41ZW0gc29saWQgfVxuXHRcdFx0XHQ6OnNsb3R0ZWQodS1zdW1tYXJ5W2FyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJdKTo6YmVmb3JlIHsgcm90YXRlOiA5MGRlZyB9XG5cdFx0XHRcdDpob3N0ID4gW3BhcnQ9XCJkZXRhaWxzLWNvbnRlbnRcIl06bm90KFtoaWRkZW49XCJcIl0pIHsgZGlzcGxheTogYmxvY2sgfWBcbiAgICAgIClcbiAgICApO1xuICB9XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJvcGVuXCJdO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHZhciBfYTI7XG4gICAgdGhpcy5fY29udGVudCA9IChfYTIgPSB0aGlzLnNoYWRvd1Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2hpbGRyZW5bMV07XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJncm91cFwiKTtcbiAgICBvbih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLl9jb250ZW50KSBvZmYodGhpcy5fY29udGVudCwgXCJiZWZvcmVtYXRjaFwiLCB0aGlzKTtcbiAgICBvZmYodGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuX2NvbnRlbnQgPSBudWxsO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBwcmV2LCBuZXh0KSB7XG4gICAgY29uc3QgaGlkZSA9IFwib25iZWZvcmVtYXRjaFwiIGluIHRoaXMgPyBcInVudGlsLWZvdW5kXCIgOiB0cnVlO1xuICAgIGNvbnN0IG9wZW4gPSB0aGlzLm9wZW47XG4gICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLmNoaWxkcmVuKVxuICAgICAgaWYgKGVsLm5vZGVOYW1lID09PSBcIlUtU1VNTUFSWVwiKSBhdHRyKGVsLCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7b3Blbn1gKTtcbiAgICBpZiAodGhpcy5fY29udGVudCkge1xuICAgICAgYXR0cih0aGlzLl9jb250ZW50LCBcImFyaWEtaGlkZGVuXCIsIGAkeyFvcGVufWApO1xuICAgICAgdGhpcy5fY29udGVudC5oaWRkZW4gPSBvcGVuID8gZmFsc2UgOiBoaWRlO1xuICAgIH1cbiAgICBpZiAob3BlbiAmJiB0aGlzLm5hbWUpIHtcbiAgICAgIGNvbnN0IHVEZXRhaWxzTGlzdCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYCR7dGhpcy5ub2RlTmFtZX1bbmFtZT1cIiR7dGhpcy5uYW1lfVwiXWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IHVEZXRhaWxzIG9mIHVEZXRhaWxzTGlzdClcbiAgICAgICAgaWYgKHVEZXRhaWxzICE9PSB0aGlzKSB1RGV0YWlscy5vcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChwcm9wID09PSBcIm9wZW5cIiAmJiBwcmV2ID09PSBudWxsICE9PSAobmV4dCA9PT0gbnVsbCkpXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwidG9nZ2xlXCIpKTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCI6c2NvcGUgPiB1LXN1bW1hcnlcIik7XG4gICAgY29uc3QgaXNTdW1tYXJ5ID0gc3VtbWFyeSA9PSBudWxsID8gdm9pZCAwIDogc3VtbWFyeS5jb250YWlucyhldmVudC50YXJnZXQpO1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmVmb3JlbWF0Y2hcIikgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICBpZiAoaXNTdW1tYXJ5ICYmIGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiKSBhc0J1dHRvbihldmVudCk7XG4gICAgaWYgKGlzU3VtbWFyeSAmJiBldmVudC50eXBlID09PSBcImNsaWNrXCIpIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XG4gIH1cbiAgZ2V0IG9wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwib3BlblwiKTtcbiAgfVxuICBzZXQgb3Blbih2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJvcGVuXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIFwibmFtZVwiKSB8fCBcIlwiO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcIm5hbWVcIiwgdmFsdWUpO1xuICB9XG59O1xudmFyIFVIVE1MU3VtbWFyeUVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIHRoaXMuc2xvdCA9IFwic3VtbWFyeVwiO1xuICAgIHRoaXMudGFiSW5kZXggPSAwO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1kZXRhaWxzXCIsIFVIVE1MRGV0YWlsc0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1zdW1tYXJ5XCIsIFVIVE1MU3VtbWFyeUVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERldGFpbHNFbGVtZW50LCBVSFRNTFN1bW1hcnlFbGVtZW50IH07XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfRklSRUZPWCA9IElTX0JST1dTRVIgJiYgL2ZpcmVmb3gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBfYTI7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gKF9hMiA9IGVsLmdldEF0dHJpYnV0ZShuYW1lKSkgIT0gbnVsbCA/IF9hMiA6IG51bGw7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIGdldExhYmVsID0gKGVsKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSBnZXRSb290KGVsKTtcbiAgY29uc3QgbGFiZWwgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikgfHwgXCJcIjtcbiAgY29uc3QgbGFiZWxzID0gKChfYTIgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxsZWRieVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkuc3BsaXQoL1xccysvKSkgfHwgW107XG4gIHJldHVybiBbXG4gICAgLi4ubGFiZWxzLm1hcCgoaWQyKSA9PiByb290ID09IG51bGwgPyB2b2lkIDAgOiByb290LnF1ZXJ5U2VsZWN0b3IoYFtpZD1cIiR7aWQyfVwiXWApKSxcbiAgICAvLyBHZXQgYWxsIGxhYmVsbGVkYnkgZWxlbWVudHNcbiAgICAuLi5BcnJheS5mcm9tKGVsLmxhYmVscyB8fCBbXSlcbiAgICAvLyBHZXQgYWxsIDxsYWJlbD4gZWxlbWVudHNcbiAgXS5yZWR1Y2UoKGFjYywgZWwyKSA9PiB7XG4gICAgdmFyIF9hMztcbiAgICByZXR1cm4gYWNjIHx8ICgoX2EzID0gZWwyID09IG51bGwgPyB2b2lkIDAgOiBlbDIuaW5uZXJUZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnRyaW0oKSkgfHwgXCJcIjtcbiAgfSwgbGFiZWwpO1xufTtcblxuLy8gdS1wcm9ncmVzcy50c1xudmFyIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbnZhciBVSFRNTFByb2dyZXNzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIiwgXCJ2YWx1ZVwiLCBcIm1heFwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBoaWRkZW46IFwiXCIgfSksXG4gICAgICAvLyBTbG90IGhpZGluZyBjb250ZW50IGFsbG93cyBsZWdhY3kgYnJvd3NlciB0byBkaXNwbGF5IGZhbGxiYWNrIHRleHRcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYDpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGJvcmRlcjogMXB4IHNvbGlkOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGhlaWdodDogLjVlbTsgd2lkdGg6IDEwZW07IG92ZXJmbG93OiBoaWRkZW4gfVxuICAgICAgICA6aG9zdDo6YmVmb3JlIHsgY29udGVudDogJyc7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDEwMCU7IGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsgd2lkdGg6IHZhcigtLXBlcmNlbnRhZ2UsIDAlKTsgdHJhbnNpdGlvbjogd2lkdGggLjJzIH1cbiAgICAgICAgOmhvc3QoOm5vdChbdmFsdWVdKSkgeyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsY3VycmVudENvbG9yIDI1JSwgdHJhbnNwYXJlbnQgNTAlLCBjdXJyZW50Q29sb3IgNzUlKSA1MCUvNDAwJSB9XG4gICAgICAgIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSkgeyA6aG9zdCB7IGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZSAycyBsaW5lYXIgaW5maW5pdGUgfSAgfVxuICAgICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUgeyBmcm9tIHsgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAxMDAlIH0gdG8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDAgfSB9YFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKFNLSVBfQVRUUl9DSEFOR0UpIHJldHVybjtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gdHJ1ZTtcbiAgICBjb25zdCByb2xlSW1hZ2UgPSBJU19JT1MgfHwgSVNfRklSRUZPWDtcbiAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCh0aGlzLnBvc2l0aW9uICogMTAwKSk7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcGVyY2VudGFnZVwiLCBgJHtwZXJjZW50YWdlfSVgKTtcbiAgICBsZXQgbGFiZWwgPSBnZXRMYWJlbCh0aGlzKTtcbiAgICBpZiAocm9sZUltYWdlKSBsYWJlbCA9IGAke2xhYmVsLnJlcGxhY2UoL1xcZCslJC8sIFwiXCIpfSAke3BlcmNlbnRhZ2V9JWA7XG4gICAgaWYgKElTX0ZJUkVGT1gpIGZvciAoY29uc3QgZWwgb2YgdGhpcy5sYWJlbHMpIGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtYnVzeVwiLCBgJHt0aGlzLnBvc2l0aW9uID09PSAtMX1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbC50cmltKCkpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsbGVkYnlcIiwgbnVsbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtYXhcIiwgXCIxMDBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtaW5cIiwgXCIwXCIpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbm93XCIsIGAke3BlcmNlbnRhZ2V9YCk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgcm9sZUltYWdlID8gXCJpbWdcIiA6IFwicHJvZ3Jlc3NiYXJcIik7XG4gICAgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xuICB9XG4gIGdldCBsYWJlbHMoKSB7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLmNsb3Nlc3QoXCJsYWJlbDpub3QoW2Zvcl0pXCIpO1xuICAgIGNvbnN0IGlkMiA9IHVzZUlkKHRoaXMpO1xuICAgIGlmIChsYWJlbCkgbGFiZWwuaHRtbEZvciA9IGlkMjtcbiAgICBjb25zdCBlbCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGBsYWJlbFtmb3I9XCIke2lkMn1cIl1gXG4gICAgKTtcbiAgICByZXR1cm4gZWw7XG4gIH1cbiAgZ2V0IHBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlID09PSBudWxsID8gLTEgOiBNYXRoLm1pbih0aGlzLnZhbHVlIC8gdGhpcy5tYXgsIDEpO1xuICB9XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIik7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBtYXgoKSB7XG4gICAgcmV0dXJuIGdldE51bWJlcih0aGlzLCBcIm1heFwiKSB8fCAxO1xuICB9XG4gIHNldCBtYXgobWF4KSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwibWF4XCIsIG1heCk7XG4gIH1cbn07XG4vLyBQcmV2ZW50IENocm9tZSBEZXZUb29scyB3YXJuaW5nIGFib3V0IDxsYWJlbCBmb3I9XCJcIj4gcG9pbnRpbmcgdG8gPHUtcHJvZ3Jlc3M+XG5VSFRNTFByb2dyZXNzRWxlbWVudC5mb3JtQXNzb2NpYXRlZCA9IHRydWU7XG52YXIgaXNOdW1lcmljID0gKHZhbHVlKSA9PiAhTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUZsb2F0KGAke3ZhbHVlfWApKSAmJiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKHZhbHVlKSk7XG52YXIgZ2V0TnVtYmVyID0gKGVsLCBrZXkpID0+IHtcbiAgY29uc3QgdmFsdWUgPSBhdHRyKGVsLCBrZXkpO1xuICByZXR1cm4gaXNOdW1lcmljKHZhbHVlKSA/IE1hdGgubWF4KDAsIE51bWJlci5wYXJzZUZsb2F0KHZhbHVlKSkgOiBudWxsO1xufTtcbnZhciBzZXROdW1iZXIgPSAoZWwsIGtleSwgdmFsKSA9PiB7XG4gIGlmICh2YWwgPT09IG51bGwgfHwgaXNOdW1lcmljKHZhbCkpIGF0dHIoZWwsIGtleSwgYCR7dmFsfWApO1xuICBlbHNlIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNldCBub24tbnVtZXJpYyAnJHthdHRyfSc6ICcke3ZhbH0nYCk7XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1wcm9ncmVzc1wiLCBVSFRNTFByb2dyZXNzRWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MUHJvZ3Jlc3NFbGVtZW50IH07XG4iXSwibmFtZXMiOlsiX19kZWZQcm9wIiwiX19nZXRPd25Qcm9wU3ltYm9scyIsIl9faGFzT3duUHJvcCIsIl9fcHJvcElzRW51bSIsIl9fZGVmTm9ybWFsUHJvcCIsIm9iaiIsImtleSIsInZhbHVlIiwiX19zcHJlYWRWYWx1ZXMiLCJhIiwiYiIsInByb3AiLCJJU19CUk9XU0VSIiwiSVNfQU5EUk9JRCIsIklTX0ZJUkVGT1giLCJJU19JT1MiLCJfYSIsIkZPQ1VTX09VVExJTkUiLCJVSFRNTEVsZW1lbnQiLCJhdHRyIiwiZWwiLCJuYW1lIiwiZXZlbnRzIiwiYWN0aW9uIiwiZWxlbWVudCIsInJlc3QiLCJ0eXBlIiwib24iLCJvZmYiLCJvYnNlcnZlcnMiLCJtdXRhdGlvbk9ic2VydmVyIiwib3B0aW9ucyIsIm9ic2VydmVyIiwiZGV0YWlsIiwiYXNCdXR0b24iLCJldmVudCIsImlzQ2xpY2siLCJnZXRSb290Iiwibm9kZSIsIl9hMiIsInJvb3QiLCJpZCIsInVzZUlkIiwiY3JlYXRlRWxlbWVudCIsInRhZ05hbWUiLCJ0ZXh0MiIsImF0dHJzIiwidmFsIiwiY3VzdG9tRWxlbWVudHMiLCJpbnN0YW5jZSIsIkxJVkUiLCJMSVZFX1NSX0ZJWCIsInNwZWFrIiwic2V0VmFsdWUiLCJpbnB1dCIsImRhdGEiLCJfYiIsInByb3RvIiwiSVNfUFJFU1MiLCJpc01vdXNlRG93biIsIkVWRU5UUyIsIkVWRU5UX09OQ0UiLCJJU19GSVJFRk9YX0RFU0tUT1AiLCJJU19NT0JJTEUiLCJGQUxTRSIsIlRFWFRTIiwiVUhUTUxDb21ib2JveEVsZW1lbnQiLCJyZW5kZXIiLCJzeW5jSW5wdXRWYWx1ZSIsIl8iLCJ0YXJnZXQiLCJpc0Rpc2FibGVkIiwib25CbHVyIiwib25DbGljayIsIm9uRm9jdXMiLCJvbklucHV0Iiwib25LZXlEb3duIiwidGFnIiwidGV4dCIsImlzRGF0YSIsImNvbnRyb2wiLCJzZWxmIiwiX2ZvY3VzIiwiX3RleHRzIiwiaXRlbXMiLCJsaXN0IiwibXVsdGlwbGUiLCJsYWJlbCIsImVkaXRzIiwiYWRkZWROb2RlcyIsInJlbW92ZWROb2RlcyIsInNob3VsZEFubm91bmNlIiwiYXJpYUV4cGFuZGVkIiwiaW5wdXRNb2RlIiwibmV4dEZvY3VzIiwiaXNSZW1vdmUiLCJfYTMiLCJpZHgiLCJzZWxlY3QiLCJyZW1vdmUiLCJpdGVtMiIsIm9wdGlvbiIsImxhYmVsMiIsImFyaWEiLCJvcHQiLCJpdGVtIiwic3luY0NsZWFyV2l0aElucHV0Iiwic3luY09wdGlvbnNXaXRoSXRlbXMiLCJfc3BlYWsiLCJ2YWx1ZXMiLCJkaXNwYXRjaE1hdGNoIiwiY2hhbmdlIiwiY3JlYXRhYmxlIiwicXVlcnkiLCJtYXRjaCIsIm8iLCJkaXNwYXRjaENoYW5nZSIsInJlbW92YWJsZSIsImFkZCIsImkiLCJvbkJsdXJyZWQiLCJ4IiwieSIsImNsZWFyIiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwicmVwZWF0IiwiaXNDb250cm9sIiwiaW5UZXh0IiwiaW5kZXgiLCJmb3JtIiwiU0FGRV9MQUJFTExFREJZIiwiRElTUExBWV9CTE9DSyIsImF0dGFjaFN0eWxlIiwiY3NzIiwiQVJJQV9DT05UUk9MUyIsIkFSSUFfU0VMRUNURUQiLCJVSFRNTFRhYnNFbGVtZW50IiwicXVlcnlXaXRob3V0TmVzdGVkIiwiZ2V0U2VsZWN0ZWRJbmRleCIsInNldFNlbGVjdGVkIiwiVUhUTUxUYWJMaXN0RWxlbWVudCIsInRhYiIsInRhYnMiLCJwcmV2IiwibmV4dCIsIlNLSVBfQVRUUl9DSEFOR0UiLCJVSFRNTFRhYkVsZW1lbnQiLCJwYW5lbHMiLCJuZXh0UGFuZWwiLCJnZXRQYW5lbCIsInBhbmVsIiwidGFibGlzdCIsInRhYkxpc3QiLCJVSFRNTFRhYlBhbmVsRWxlbWVudCIsImlzRm9jdXNhYmxlIiwiaWQyIiwibWluIiwibWF4Iiwicm91bmQiLCJmbG9vciIsImNyZWF0ZUNvb3JkcyIsInYiLCJvcHBvc2l0ZVNpZGVNYXAiLCJvcHBvc2l0ZUFsaWdubWVudE1hcCIsImNsYW1wIiwic3RhcnQiLCJlbmQiLCJldmFsdWF0ZSIsInBhcmFtIiwiZ2V0U2lkZSIsInBsYWNlbWVudCIsImdldEFsaWdubWVudCIsImdldE9wcG9zaXRlQXhpcyIsImF4aXMiLCJnZXRBeGlzTGVuZ3RoIiwieUF4aXNTaWRlcyIsImdldFNpZGVBeGlzIiwiZ2V0QWxpZ25tZW50QXhpcyIsImdldEFsaWdubWVudFNpZGVzIiwicmVjdHMiLCJydGwiLCJhbGlnbm1lbnQiLCJhbGlnbm1lbnRBeGlzIiwibGVuZ3RoIiwibWFpbkFsaWdubWVudFNpZGUiLCJnZXRPcHBvc2l0ZVBsYWNlbWVudCIsImdldEV4cGFuZGVkUGxhY2VtZW50cyIsIm9wcG9zaXRlUGxhY2VtZW50IiwiZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQiLCJsclBsYWNlbWVudCIsInJsUGxhY2VtZW50IiwidGJQbGFjZW1lbnQiLCJidFBsYWNlbWVudCIsImdldFNpZGVMaXN0Iiwic2lkZSIsImlzU3RhcnQiLCJnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzIiwiZmxpcEFsaWdubWVudCIsImRpcmVjdGlvbiIsImV4cGFuZFBhZGRpbmdPYmplY3QiLCJwYWRkaW5nIiwiZ2V0UGFkZGluZ09iamVjdCIsInJlY3RUb0NsaWVudFJlY3QiLCJyZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudCIsIl9yZWYiLCJyZWZlcmVuY2UiLCJmbG9hdGluZyIsInNpZGVBeGlzIiwiYWxpZ25MZW5ndGgiLCJpc1ZlcnRpY2FsIiwiY29tbW9uWCIsImNvbW1vblkiLCJjb21tb25BbGlnbiIsImNvb3JkcyIsImNvbXB1dGVQb3NpdGlvbiIsImNvbmZpZyIsInN0cmF0ZWd5IiwibWlkZGxld2FyZSIsInBsYXRmb3JtIiwidmFsaWRNaWRkbGV3YXJlIiwic3RhdGVmdWxQbGFjZW1lbnQiLCJtaWRkbGV3YXJlRGF0YSIsInJlc2V0Q291bnQiLCJmbiIsIm5leHRYIiwibmV4dFkiLCJyZXNldCIsImRldGVjdE92ZXJmbG93Iiwic3RhdGUiLCJfYXdhaXQkcGxhdGZvcm0kaXNFbGUiLCJlbGVtZW50cyIsImJvdW5kYXJ5Iiwicm9vdEJvdW5kYXJ5IiwiZWxlbWVudENvbnRleHQiLCJhbHRCb3VuZGFyeSIsInBhZGRpbmdPYmplY3QiLCJjbGlwcGluZ0NsaWVudFJlY3QiLCJvZmZzZXRQYXJlbnQiLCJvZmZzZXRTY2FsZSIsImVsZW1lbnRDbGllbnRSZWN0IiwiZmxpcCIsIl9taWRkbGV3YXJlRGF0YSRhcnJvdyIsIl9taWRkbGV3YXJlRGF0YSRmbGlwIiwiaW5pdGlhbFBsYWNlbWVudCIsImNoZWNrTWFpbkF4aXMiLCJjaGVja0Nyb3NzQXhpcyIsInNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyIsImZhbGxiYWNrU3RyYXRlZ3kiLCJmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uIiwiZGV0ZWN0T3ZlcmZsb3dPcHRpb25zIiwiaW5pdGlhbFNpZGVBeGlzIiwiaXNCYXNlUGxhY2VtZW50IiwiZmFsbGJhY2tQbGFjZW1lbnRzIiwiaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiIsInBsYWNlbWVudHMiLCJvdmVyZmxvdyIsIm92ZXJmbG93cyIsIm92ZXJmbG93c0RhdGEiLCJzaWRlcyIsIl9taWRkbGV3YXJlRGF0YSRmbGlwMiIsIl9vdmVyZmxvd3NEYXRhJGZpbHRlciIsIm5leHRJbmRleCIsIm5leHRQbGFjZW1lbnQiLCJkIiwicmVzZXRQbGFjZW1lbnQiLCJfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIyIiwiY3VycmVudFNpZGVBeGlzIiwiYWNjIiwic2hpZnQiLCJsaW1pdGVyIiwiY3Jvc3NBeGlzIiwibWFpbkF4aXMiLCJtYWluQXhpc0Nvb3JkIiwiY3Jvc3NBeGlzQ29vcmQiLCJtaW5TaWRlIiwibWF4U2lkZSIsImxpbWl0ZWRDb29yZHMiLCJzaXplIiwiX3N0YXRlJG1pZGRsZXdhcmVEYXRhIiwiX3N0YXRlJG1pZGRsZXdhcmVEYXRhMiIsImFwcGx5IiwiaXNZQXhpcyIsImhlaWdodFNpZGUiLCJ3aWR0aFNpZGUiLCJtYXhpbXVtQ2xpcHBpbmdIZWlnaHQiLCJtYXhpbXVtQ2xpcHBpbmdXaWR0aCIsIm92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0Iiwib3ZlcmZsb3dBdmFpbGFibGVXaWR0aCIsIm5vU2hpZnQiLCJhdmFpbGFibGVIZWlnaHQiLCJhdmFpbGFibGVXaWR0aCIsInhNaW4iLCJ4TWF4IiwieU1pbiIsInlNYXgiLCJuZXh0RGltZW5zaW9ucyIsImhhc1dpbmRvdyIsImdldE5vZGVOYW1lIiwiaXNOb2RlIiwiZ2V0V2luZG93IiwiX25vZGUkb3duZXJEb2N1bWVudCIsImdldERvY3VtZW50RWxlbWVudCIsImlzRWxlbWVudCIsImlzSFRNTEVsZW1lbnQiLCJpc1NoYWRvd1Jvb3QiLCJpbnZhbGlkT3ZlcmZsb3dEaXNwbGF5VmFsdWVzIiwiaXNPdmVyZmxvd0VsZW1lbnQiLCJvdmVyZmxvd1giLCJvdmVyZmxvd1kiLCJkaXNwbGF5IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInRhYmxlRWxlbWVudHMiLCJpc1RhYmxlRWxlbWVudCIsInRvcExheWVyU2VsZWN0b3JzIiwiaXNUb3BMYXllciIsInNlbGVjdG9yIiwidHJhbnNmb3JtUHJvcGVydGllcyIsIndpbGxDaGFuZ2VWYWx1ZXMiLCJjb250YWluVmFsdWVzIiwiaXNDb250YWluaW5nQmxvY2siLCJlbGVtZW50T3JDc3MiLCJ3ZWJraXQiLCJpc1dlYktpdCIsImdldENvbnRhaW5pbmdCbG9jayIsImN1cnJlbnROb2RlIiwiZ2V0UGFyZW50Tm9kZSIsImlzTGFzdFRyYXZlcnNhYmxlTm9kZSIsImxhc3RUcmF2ZXJzYWJsZU5vZGVOYW1lcyIsImdldE5vZGVTY3JvbGwiLCJyZXN1bHQiLCJnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvciIsInBhcmVudE5vZGUiLCJnZXRPdmVyZmxvd0FuY2VzdG9ycyIsInRyYXZlcnNlSWZyYW1lcyIsIl9ub2RlJG93bmVyRG9jdW1lbnQyIiwic2Nyb2xsYWJsZUFuY2VzdG9yIiwiaXNCb2R5Iiwid2luIiwiZnJhbWVFbGVtZW50IiwiZ2V0RnJhbWVFbGVtZW50IiwiZ2V0Q3NzRGltZW5zaW9ucyIsImhhc09mZnNldCIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0Iiwic2hvdWxkRmFsbGJhY2siLCJ1bndyYXBFbGVtZW50IiwiZ2V0U2NhbGUiLCJkb21FbGVtZW50IiwiJCIsIm5vT2Zmc2V0cyIsImdldFZpc3VhbE9mZnNldHMiLCJzaG91bGRBZGRWaXN1YWxPZmZzZXRzIiwiaXNGaXhlZCIsImZsb2F0aW5nT2Zmc2V0UGFyZW50IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaW5jbHVkZVNjYWxlIiwiaXNGaXhlZFN0cmF0ZWd5IiwiY2xpZW50UmVjdCIsInNjYWxlIiwidmlzdWFsT2Zmc2V0cyIsIm9mZnNldFdpbiIsImN1cnJlbnRXaW4iLCJjdXJyZW50SUZyYW1lIiwiaWZyYW1lU2NhbGUiLCJpZnJhbWVSZWN0IiwiZ2V0V2luZG93U2Nyb2xsQmFyWCIsImxlZnRTY3JvbGwiLCJnZXRIVE1MT2Zmc2V0IiwiZG9jdW1lbnRFbGVtZW50Iiwic2Nyb2xsIiwiaWdub3JlU2Nyb2xsYmFyWCIsImh0bWxSZWN0IiwiY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QiLCJ0b3BMYXllciIsIm9mZnNldHMiLCJpc09mZnNldFBhcmVudEFuRWxlbWVudCIsIm9mZnNldFJlY3QiLCJodG1sT2Zmc2V0IiwiZ2V0Q2xpZW50UmVjdHMiLCJnZXREb2N1bWVudFJlY3QiLCJodG1sIiwiYm9keSIsImdldFZpZXdwb3J0UmVjdCIsInZpc3VhbFZpZXdwb3J0IiwidmlzdWFsVmlld3BvcnRCYXNlZCIsImFic29sdXRlT3JGaXhlZCIsImdldElubmVyQm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yIiwiY2xpcHBpbmdBbmNlc3RvciIsImhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvciIsInN0b3BOb2RlIiwiZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzIiwiY2FjaGUiLCJjYWNoZWRSZXN1bHQiLCJjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSIsImVsZW1lbnRJc0ZpeGVkIiwiY29tcHV0ZWRTdHlsZSIsImN1cnJlbnROb2RlSXNDb250YWluaW5nIiwiYW5jZXN0b3IiLCJnZXRDbGlwcGluZ1JlY3QiLCJjbGlwcGluZ0FuY2VzdG9ycyIsImZpcnN0Q2xpcHBpbmdBbmNlc3RvciIsImNsaXBwaW5nUmVjdCIsImFjY1JlY3QiLCJnZXREaW1lbnNpb25zIiwiZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQiLCJzZXRMZWZ0UlRMU2Nyb2xsYmFyT2Zmc2V0IiwiaXNTdGF0aWNQb3NpdGlvbmVkIiwiZ2V0VHJ1ZU9mZnNldFBhcmVudCIsInBvbHlmaWxsIiwicmF3T2Zmc2V0UGFyZW50IiwiZ2V0T2Zmc2V0UGFyZW50Iiwic3ZnT2Zmc2V0UGFyZW50IiwiZ2V0RWxlbWVudFJlY3RzIiwiZ2V0T2Zmc2V0UGFyZW50Rm4iLCJnZXREaW1lbnNpb25zRm4iLCJmbG9hdGluZ0RpbWVuc2lvbnMiLCJpc1JUTCIsInJlY3RzQXJlRXF1YWwiLCJvYnNlcnZlTW92ZSIsIm9uTW92ZSIsImlvIiwidGltZW91dElkIiwiY2xlYW51cCIsIl9pbyIsInJlZnJlc2giLCJza2lwIiwidGhyZXNob2xkIiwiZWxlbWVudFJlY3RGb3JSb290TWFyZ2luIiwiaW5zZXRUb3AiLCJpbnNldFJpZ2h0IiwiaW5zZXRCb3R0b20iLCJpbnNldExlZnQiLCJpc0ZpcnN0VXBkYXRlIiwiaGFuZGxlT2JzZXJ2ZSIsImVudHJpZXMiLCJyYXRpbyIsImF1dG9VcGRhdGUiLCJ1cGRhdGUiLCJhbmNlc3RvclNjcm9sbCIsImFuY2VzdG9yUmVzaXplIiwiZWxlbWVudFJlc2l6ZSIsImxheW91dFNoaWZ0IiwiYW5pbWF0aW9uRnJhbWUiLCJyZWZlcmVuY2VFbCIsImFuY2VzdG9ycyIsImNsZWFudXBJbyIsInJlb2JzZXJ2ZUZyYW1lIiwicmVzaXplT2JzZXJ2ZXIiLCJmaXJzdEVudHJ5IiwiX3Jlc2l6ZU9ic2VydmVyIiwiZnJhbWVJZCIsInByZXZSZWZSZWN0IiwiZnJhbWVMb29wIiwibmV4dFJlZlJlY3QiLCJfcmVzaXplT2JzZXJ2ZXIyIiwic2hpZnQkMSIsImZsaXAkMSIsInNpemUkMSIsIm1lcmdlZE9wdGlvbnMiLCJwbGF0Zm9ybVdpdGhDYWNoZSIsImNvbXB1dGVQb3NpdGlvbiQxIiwiUVVJQ0tfRVZFTlQiLCJkZWJvdW5jZSIsImNhbGxiYWNrIiwiZGVsYXkiLCJ0aW1lciIsImFyZ3MiLCJVVUlEIiwiVU5CSU5EIiwib25Mb2FkZWQiLCJydW4iLCJ1bmJpbmQiLCJBTkNIT1JFRCIsImFuY2hvclBvc2l0aW9uIiwiYW5jaG9yIiwiY3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlciIsInF1ZXVlIiwib25GcmFtZSIsIm9uVGltZXIiLCJNVVRBVE9SUyIsIm9uTXV0YXRpb24iLCJjbGFzc05hbWUiLCJlbGVtcyIsIm11dGF0b3IiLCJpc0lucHV0TGlrZSIsIkNTU19CUkVBRENSVU1CUyIsInN0eWxlcyIsIkNTU19DSElQIiwiQ1NTX0hFTFBURVhUIiwiQ1NTX1BBR0lOQVRJT04iLCJDTElDS1MiLCJNQVRPTU8iLCJCQU5ORVIiLCJCQU5ORVJfVVJMIiwiYW5hbHl0aWNzIiwiY29uc2VudCIsImVuYWJsZWQiLCJtYXRvbW9JZCIsIm1hdG9tb1RhZ01hbmFnZXJJZCIsInJlbmRlckJhbm5lciIsInNyYyIsInVybCIsInRpdGxlIiwiY2F0ZWdvcnkiLCJyZXN1bHRzIiwiYmFubmVyIiwib25DbG9zZSIsImhhbmRsZVRyYWNrIiwicHJvY2Vzc1RyYWNrIiwiaGVhZGluZyIsImdyb3VwIiwicG9wb3ZlciIsIm9wZW4iLCJzdHlsZSIsImhlYWQiLCJzaGVldCIsImZvcmNlIiwiQ1NTX0FQUCIsIkNTU19TVElDS1kiLCJDU1NfVE9HR0xFIiwiQ1NTX1NJREVCQVIiLCJ1c2VUcmFuc2l0aW9uIiwidG9nZ2xlQXBwRXhwYW5kZWQiLCJoYW5kbGVBcHBUb2dnbGVDbGljayIsInN0b3AiLCJsaW5rIiwiY2xvc2VTaWRlYmFyIiwic2lkZWJhciIsIk1JTl9ZIiwiU0NST0xMX1VQIiwiU1RJQ0siLCJTVElDS19FTCIsIlNUSUNLX0giLCJTVElDS19ZIiwiU1RVQ0siLCJXSU5fSCIsIldJTl9ZIiwiaGFuZGxlTXV0YXRpb24iLCJzdGlja3kiLCJoYW5kbGVBcHBTY3JvbGwiLCJORVhUX1kiLCJORVhUX1VQIiwiZ2V0U3RlcHMiLCJub3ciLCJzaG93Iiwib2Zmc2V0IiwicGFnZXMiLCJwYWdpbmF0aW9uIiwiY3VycmVudCIsInRvdGFsIiwicGFnZSIsImhhbmRsZUJyZWFkY3J1bWJzTXV0YXRpb24iLCJicmVhZGNydW1icyIsImJyZWFkY3VtYnMiLCJjcnVtYiIsIkNTU19ESUFMT0ciLCJESUFMT0dTIiwiaGFuZGxlTW9kYWwiLCJkaWFsb2ciLCJoYW5kbGVEaWFsb2dDbGljayIsImhhbmRsZUVycm9zdW1tYXJ5SW5qZWN0IiwiZmlyc3QiLCJESVNBQkxFRCIsIlNFTEVDVEVEIiwiVUhUTUxPcHRpb25FbGVtZW50IiwiTElWRV9USU1FUiIsIklOUFVUX0RFQk9VTkNFIiwiRVZFTlRTX0lOUFVUIiwiVUhUTUxEYXRhTGlzdEVsZW1lbnQiLCJkaXNjb25uZWN0SW5wdXQiLCJfcHJldiIsInNldHVwSW5wdXQiLCJzZXRFeHBhbmRlZCIsIl9jIiwiaXNQb3BvdmVyIiwiaXNJbnB1dCIsInJlbGF0ZWRUYXJnZXQiLCJhbHRLZXkiLCJjdHJsS2V5Iiwic2hpZnRLZXkiLCJtZXRhS2V5IiwiaXNFc2NhcGUiLCJfcm9vdCIsIl9pbnB1dCIsImZpbHRlciIsImhpZGRlbiIsInZpc2libGUiLCJDU1NfRklFTEQiLCJDU1NfVkFMSURBVElPTlMiLCJDU1NfVkFMSURBVElPTiIsImdldFRleHQiLCJoYW5kbGVGaWVsZE11dGF0aW9uIiwiZmllbGRzIiwidmFsaWRhdGUiLCJmaWVsZCIsImxhYmVscyIsImRlc2NzIiwidmFsaWRzIiwiY29tYm9ib3giLCJ2YWxpZCIsImRlc2MiLCJyZW5kZXJDb21ib2JveCIsInJlbmRlckNvdW50ZXIiLCJyZW5kZXJUZXh0YXJlYVNpemUiLCJ0ZXh0YXJlYSIsImxpbWl0IiwicmVtYWluZGVyIiwibmV4dEludmFsaWQiLCJwcmV2SW52YWxpZCIsIm92ZXIiLCJ1bmRlciIsImhhbmRsZUZpZWxkVG9nZ2xlIiwiaGFuZGxlRmllbGRJbnB1dCIsImhhbmRsZUZpZWxkVmFsZGlhdGlvbiIsIkNTU19GSUVMRFNFVCIsIkFSSUFfREVTQyIsIkFSSUFfSU5WQUxJRCIsImhhbmRsZUZpZWxkc2V0TXV0YXRpb24iLCJmaWVsZHNldHMiLCJmaWVsZHNldCIsImlucHV0cyIsInZhbGlkSWQiLCJDU1NfTE9HTyIsImhhbmRsZUxvZ29NdXRhdGlvbiIsImxvZ28iLCJpY29uIiwic3ZnIiwiaXNEb3QiLCJiYWNrIiwiQ1NTX1BPUE9WRVIiLCJPUEVOX1BPUE9WRVJTIiwiaGFuZGxlUG9wb3ZlclRvZ2dsZSIsIm5ld1N0YXRlIiwiaXNDbG9zaW5nIiwiaXNDb250YWluIiwiaGFuZGxlUG9wb3ZlckxpbmtDbGljayIsImNsb3NlIiwiQ1NTX1RBQkxFIiwiaGFuZGxlVGFibGVNdXRhdGlvbiIsInRhYmxlcyIsInRhYmxlIiwidGhzIiwiaXNUYm9keSIsInJvdyIsImNlbGwiLCJDU1NfVE9HR0xFR1JPVVAiLCJoYW5kbGVUb2dnbGVncm91cEtleWRvd24iLCJtb3ZlIiwiREVTQ1JJQkVEQlkiLCJFU0MiLCJMQUJFTExFREJZIiwiUE9TSVRJT05fQ1NTX1BST1BFUlRZIiwiVEhST1RUTEVfREVMQVkiLCJUT09MVElQIiwiQU5DSE9SIiwiTEFTVF9DQUxMIiwiVEhST1RUTEUiLCJoYW5kbGVUb29sdGlwTW92ZSIsIndhaXQiLCJoYW5kbGVUb29sdGlwTW92ZVRocm90dGxlZCIsImNvbnRlbnQiLCJwb3NpdGlvbiIsImhhZExhYmVsIiwiaGFzTGFiZWwiLCJVSFRNTERldGFpbHNFbGVtZW50IiwiaGlkZSIsInVEZXRhaWxzTGlzdCIsInVEZXRhaWxzIiwic3VtbWFyeSIsImlzU3VtbWFyeSIsIlVIVE1MU3VtbWFyeUVsZW1lbnQiLCJnZXRMYWJlbCIsImVsMiIsIlVIVE1MUHJvZ3Jlc3NFbGVtZW50Iiwicm9sZUltYWdlIiwicGVyY2VudGFnZSIsImdldE51bWJlciIsInNldE51bWJlciIsImlzTnVtZXJpYyJdLCJtYXBwaW5ncyI6ImtDQUFBLElBQUlBLEdBQVksT0FBTyxlQUNuQkMsR0FBc0IsT0FBTyxzQkFDN0JDLEdBQWUsT0FBTyxVQUFVLGVBQ2hDQyxHQUFlLE9BQU8sVUFBVSxxQkFDaENDLEdBQWtCLENBQUNDLEVBQUtDLEVBQUtDLElBQVVELEtBQU9ELEVBQU1MLEdBQVVLLEVBQUtDLEVBQUssQ0FBRSxXQUFZLEdBQU0sYUFBYyxHQUFNLFNBQVUsR0FBTSxNQUFBQyxDQUFLLENBQUUsRUFBSUYsRUFBSUMsQ0FBRyxFQUFJQyxFQUN0SkMsR0FBaUIsQ0FBQ0MsRUFBR0MsSUFBTSxDQUM3QixRQUFTQyxLQUFRRCxJQUFNQSxFQUFJLENBQUEsR0FDckJSLEdBQWEsS0FBS1EsRUFBR0MsQ0FBSSxHQUMzQlAsR0FBZ0JLLEVBQUdFLEVBQU1ELEVBQUVDLENBQUksQ0FBQyxFQUNwQyxHQUFJVixHQUNGLFFBQVNVLEtBQVFWLEdBQW9CUyxDQUFDLEVBQ2hDUCxHQUFhLEtBQUtPLEVBQUdDLENBQUksR0FDM0JQLEdBQWdCSyxFQUFHRSxFQUFNRCxFQUFFQyxDQUFJLENBQUMsRUFFdEMsT0FB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QUFFLEVBQ3JDcEUsRUFBSyxLQUFNLGtCQUFtQixJQUFJLEVBQ2xDQSxFQUFLLEtBQU0sZ0JBQWlCLEtBQUssRUFDakNBLEVBQUssS0FBTSxnQkFBaUIsR0FBRyxFQUMvQkEsRUFBSyxLQUFNLGdCQUFpQixHQUFHdXBCLENBQVUsRUFBRSxFQUMzQ3ZwQixFQUFLLEtBQU0sT0FBUXNwQixFQUFZLE1BQVEsYUFBYSxFQUNwRHJoQixHQUFtQixFQUNyQixDQUNBLElBQUksUUFBUyxDQUNYLE1BQU03RCxFQUFRLEtBQUssUUFBUSxrQkFBa0IsRUFDdkN1RSxFQUFNcEgsR0FBTSxJQUFJLEVBQ3RCLE9BQUk2QyxJQUFPQSxFQUFNLFFBQVV1RSxHQUNoQnpILEdBQVEsSUFBSSxFQUFFLGlCQUN2QixjQUFjeUgsQ0FBRyxJQUN2QixDQUVFLENBQ0EsSUFBSSxVQUFXLENBQ2IsT0FBTyxLQUFLLFFBQVUsS0FBTyxHQUFLLEtBQUssSUFBSSxLQUFLLE1BQVEsS0FBSyxJQUFLLENBQUMsQ0FDckUsQ0FDQSxJQUFJLE9BQVEsQ0FDVixPQUFPNmdCLEdBQVUsS0FBTSxPQUFPLENBQ2hDLENBQ0EsSUFBSSxNQUFNcHFCLEVBQU8sQ0FDZnFxQixHQUFVLEtBQU0sUUFBU3JxQixDQUFLLENBQ2hDLENBQ0EsSUFBSSxLQUFNLENBQ1IsT0FBT29xQixHQUFVLEtBQU0sS0FBSyxHQUFLLENBQ25DLENBQ0EsSUFBSSxJQUFJM2dCLEVBQUssQ0FDWDRnQixHQUFVLEtBQU0sTUFBTzVnQixDQUFHLENBQzVCLENBQ0YsRUFFQXdnQixHQUFxQixlQUFpQixHQUN0QyxJQUFJSyxHQUFhdHFCLEdBQVUsQ0FBQyxPQUFPLE1BQU0sT0FBTyxXQUFXLEdBQUdBLENBQUssRUFBRSxDQUFDLEdBQUssT0FBTyxTQUFTLE9BQU9BLENBQUssQ0FBQyxFQUNwR29xQixHQUFZLENBQUN2cEIsRUFBSWQsSUFBUSxDQUMzQixNQUFNQyxFQUFRWSxFQUFLQyxFQUFJZCxDQUFHLEVBQzFCLE9BQU91cUIsR0FBVXRxQixDQUFLLEVBQUksS0FBSyxJQUFJLEVBQUcsT0FBTyxXQUFXQSxDQUFLLENBQUMsRUFBSSxJQUNwRSxFQUNJcXFCLEdBQVksQ0FBQ3hwQixFQUFJZCxFQUFLeUMsSUFBUSxDQUNoQyxHQUFJQSxJQUFRLE1BQVE4bkIsR0FBVTluQixDQUFHLEVBQUc1QixFQUFLQyxFQUFJZCxFQUFLLEdBQUd5QyxDQUFHLEVBQUUsTUFDckQsT0FBTSxJQUFJLE1BQU0sOEJBQThCNUIsQ0FBSSxPQUFPNEIsQ0FBRyxHQUFHLENBQ3RFLEVBQ0EsT0FBQUMsR0FBZSxPQUFPLGFBQWN3bkIsRUFBb0IiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsMTQsMjIsMjNdfQ==
|
|
32
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtY29tYm9ib3gvZGlzdC91LWNvbWJvYm94LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5tanMiLCIuLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2NvcmUvZGlzdC9mbG9hdGluZy11aS5jb3JlLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5kb20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS9kb20vZGlzdC9mbG9hdGluZy11aS5kb20ubWpzIiwiLi4vZGVzaWduc3lzdGVtL3V0aWxzLnRzIiwiLi4vZGVzaWduc3lzdGVtL2FuYWx5dGljcy9hbmFseXRpY3MudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC10b2dnbGUuanMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9wYWdpbmF0aW9uL3BhZ2luYXRpb24taGVscGVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWJzLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2RpYWxvZy9kaWFsb2ctb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZXJyb3JzdW1tYXJ5L2Vycm9yc3VtbWFyeS1vYnNlcnZlci50cyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWRhdGFsaXN0L2Rpc3QvdS1kYXRhbGlzdC5qcyIsIi4uL2Rlc2lnbnN5c3RlbS9maWVsZC9maWVsZC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9maWVsZHNldC9maWVsZHNldC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9sb2dvL2xvZ28tb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vcG9wb3Zlci9wb3BvdmVyLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RhYmxlL3RhYmxlLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RvZ2dsZWdyb3VwL3RvZ2dsZWdyb3VwLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3Rvb2x0aXAvdG9vbHRpcC1vYnNlcnZlci50cyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWRldGFpbHMvZGlzdC91LWRldGFpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1wcm9ncmVzcy9kaXN0L3UtcHJvZ3Jlc3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuXG4vLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0ZJUkVGT1ggPSBJU19CUk9XU0VSICYmIC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBGT0NVU19PVVRMSU5FID0gXCJvdXRsaW5lOiAxcHggZG90dGVkOyBvdXRsaW5lOiA1cHggYXV0byBIaWdobGlnaHQ7IG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvclwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChfZXJyKSB7XG4gIH1cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgKGRldGFpbCkgPT4gZWxlbWVudC5oYW5kbGVFdmVudCh7IHR5cGU6IFwibXV0YXRpb25cIiwgZGV0YWlsIH0pXG4gICAgKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIG9ic2VydmVycy5zZXQoZWxlbWVudCwgb2JzZXJ2ZXIpO1xuICB9XG59O1xudmFyIGFzQnV0dG9uID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGlzQ2xpY2sgPSBcImtleVwiIGluIGV2ZW50ICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKTtcbiAgaWYgKGlzQ2xpY2spIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGlmIChpc0NsaWNrICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBldmVudC50YXJnZXQuY2xpY2soKTtcbiAgcmV0dXJuIGlzQ2xpY2s7XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dDIsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQyKSBlbC50ZXh0Q29udGVudCA9IHRleHQyO1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgTElWRTtcbnZhciBMSVZFX1NSX0ZJWCA9IDA7XG52YXIgc3BlYWsgPSAodGV4dDIpID0+IHtcbiAgaWYgKCFMSVZFKSB7XG4gICAgTElWRSA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgTElWRS5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjpmaXhlZDtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcFwiO1xuICAgIGF0dHIoTElWRSwgXCJhcmlhLWxpdmVcIiwgXCJhc3NlcnRpdmVcIik7XG4gIH1cbiAgaWYgKCFMSVZFLmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChMSVZFKTtcbiAgaWYgKHRleHQyKSBMSVZFLnRleHRDb250ZW50ID0gYCR7dGV4dDJ9JHtMSVZFX1NSX0ZJWCsrICUgMiA/IFwiXFx4QTBcIiA6IFwiXCJ9YDtcbn07XG52YXIgc2V0VmFsdWUgPSAoaW5wdXQsIGRhdGEsIHR5cGUgPSBcIlwiKSA9PiB7XG4gIHZhciBfYTIsIF9iO1xuICBjb25zdCBldmVudCA9IHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUsIGRhdGEsIGlucHV0VHlwZTogdHlwZSB9O1xuICBjb25zdCBwcm90byA9IEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiYmVmb3JlaW5wdXRcIiwgZXZlbnQpKTtcbiAgKF9iID0gKF9hMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIFwidmFsdWVcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChpbnB1dCwgZGF0YSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJpbnB1dFwiLCBldmVudCkpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImNoYW5nZVwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xufTtcbnZhciBJU19QUkVTUyA9IGZhbHNlO1xudmFyIGlzTW91c2VEb3duID0gKGV2ZW50KSA9PiB7XG4gIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm1vdXNldXBcIikgSVNfUFJFU1MgPSBmYWxzZTtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2Vkb3duXCIpIHtcbiAgICBJU19QUkVTUyA9IHRydWU7XG4gICAgb24oZG9jdW1lbnQsIFwibW91c2V1cFwiLCBpc01vdXNlRG93biwgeyBvbmNlOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiBJU19QUkVTUztcbn07XG5cbi8vIHUtY29tYm9ib3gudHNcbnZhciBFVkVOVFMgPSBcImJlZm9yZWlucHV0LGJsdXIsZm9jdXMsY2xpY2ssaW5wdXQsa2V5ZG93bixtb3VzZWRvd25cIjtcbnZhciBFVkVOVF9PTkNFID0geyBvbmNlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH07XG52YXIgSVNfRklSRUZPWF9ERVNLVE9QID0gSVNfRklSRUZPWCAmJiAhSVNfQU5EUk9JRDtcbnZhciBJU19NT0JJTEUgPSBJU19BTkRST0lEIHx8IElTX0lPUztcbnZhciBGQUxTRSA9IFwiZmFsc2VcIjtcbnZhciBURVhUUyA9IHtcbiAgYWRkZWQ6IFwiQWRkZWRcIixcbiAgZW1wdHk6IFwiTm8gc2VsZWN0ZWRcIixcbiAgZm91bmQ6IFwiTmF2aWdhdGUgbGVmdCB0byBmaW5kICVkIHNlbGVjdGVkXCIsXG4gIGludmFsaWQ6IFwiSW52YWxpZCB2YWx1ZVwiLFxuICBvZjogXCJvZlwiLFxuICByZW1vdmU6IFwiUHJlc3MgdG8gcmVtb3ZlXCIsXG4gIHJlbW92ZWQ6IFwiUmVtb3ZlZFwiXG59O1xudmFyIFVIVE1MQ29tYm9ib3hFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2l0ZW0gPSBcIlwiO1xuICAgIHRoaXMuX3NwZWFrID0gXCJcIjtcbiAgICB0aGlzLl90ZXh0cyA9IF9fc3ByZWFkVmFsdWVzKHt9LCBURVhUUyk7XG4gICAgdGhpcy5fdmFsdWUgPSBcIlwiO1xuICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gICAgICAvLyBDb250ZW50IHNsb3RcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYDpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrOyAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCkgfSAvKiBNdXN0IGJlIGRpc3BsYXkgYmxvY2sgaW4gU2FmYXJpIHRvIGFsbG93IGZvY3VzIGluc2lkZSAqL1xuXHRcdFx0XHQ6aG9zdCg6bm90KFtkYXRhLW11bHRpcGxlXSkpIDo6c2xvdHRlZChkYXRhKSxcblx0XHRcdFx0Omhvc3QoW2RhdGEtbXVsdGlwbGU9XCJmYWxzZVwiXSkgOjpzbG90dGVkKGRhdGEpIHsgZGlzcGxheTogbm9uZSB9IC8qIEhpZGUgZGF0YSBpZiBub3QgbXVsdGlwbGUgKi9cblx0XHRcdFx0OjpzbG90dGVkKGlucHV0W2lucHV0bW9kZT1cIm5vbmVcIl0pIHsgb3V0bGluZTogbm9uZSB9IC8qIEhpZGUgdGVtcG9yYXJ5IGZvdWNzIG91dGxpbmUgZmxhc2ggKi9cblx0XHRcdFx0OjpzbG90dGVkKGRlbCkgeyB0ZXh0LWRlY29yYXRpb246IG5vbmUgfVxuXHRcdFx0XHQ6OnNsb3R0ZWQoZGF0YTpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcG9pbnRlci1ldmVudHM6IG5vbmUgfVxuICAgICAgICA6OnNsb3R0ZWQoZGF0YSk6OmFmdGVyIHsgY29udGVudDogJ1xcXFwwMEQ3JzsgY29udGVudDogJ1xcXFwwMEQ3JyAvICcnOyBwYWRkaW5nLWlubGluZTogLjVjaDsgcG9pbnRlci1ldmVudHM6IGF1dG87IGN1cnNvcjogcG9pbnRlciB9XG4gICAgICAgIDo6c2xvdHRlZChkYXRhOmZvY3VzKSB7ICR7Rk9DVVNfT1VUTElORX0gfWBcbiAgICAgIClcbiAgICApO1xuICB9XG4gIC8vIExvY2FsbHkgc3RvcmUgdmFsdWUgdG8gc3RvcmUgdmFsdWUgYmVmb3JlIGlucHV0LWNsaWNrXG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhURVhUUykubWFwKChrZXkpID0+IGBkYXRhLXNyLSR7a2V5fWApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuX3Jvb3QgPSBnZXRSb290KHRoaXMpO1xuICAgIG9uKHRoaXMsIEVWRU5UUywgdGhpcywgdHJ1ZSk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7XG4gICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFtcInZhbHVlXCIsIFwiaWRcIl0sXG4gICAgICAvLyBSZXNwb25kIHRvIGNoYW5nZXMgaW4gPGRhdGE+IHZhbHVlIG9yIGNoYW5nZSBvZiBpZCBmb3IgPGRhdGFsaXN0PiB0byByZWNvbm5lY3Qgd2l0aCBpbnB1dFxuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICAvLyBSZXNwb25kIHRvIGNoYW5nZXMgaW4gPGRhdGE+IHRleHRDb250ZW50XG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfSk7XG4gICAgc2V0VGltZW91dChyZW5kZXIsIDAsIHRoaXMpO1xuICAgIHNldFRpbWVvdXQoc3luY0lucHV0VmFsdWUsIDAsIHRoaXMpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBfLCB2YWwpIHtcbiAgICBjb25zdCB0ZXh0MiA9IHByb3Auc3BsaXQoXCJkYXRhLXNyLVwiKVsxXTtcbiAgICBpZiAoVEVYVFNbdGV4dDJdKSB0aGlzLl90ZXh0c1t0ZXh0Ml0gPSB2YWwgfHwgVEVYVFNbdGV4dDJdO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICAgIG9mZih0aGlzLCBFVkVOVFMsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5fY2xlYXIgPSB0aGlzLl9mb2N1cyA9IHRoaXMuX2NvbnRyb2wgPSB2b2lkIDA7XG4gICAgdGhpcy5fbGlzdCA9IHRoaXMuX29wdGlvbnMgPSB0aGlzLl9yb290ID0gdm9pZCAwO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMpKSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmVmb3JlaW5wdXRcIikgdGhpcy5fdmFsdWUgPSAodGFyZ2V0ID09IG51bGwgPyB2b2lkIDAgOiB0YXJnZXQudmFsdWUpIHx8IFwiXCI7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmx1clwiKSBvbkJsdXIodGhpcyk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikgb25DbGljayh0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiZm9jdXNcIikgb25Gb2N1cyh0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiaW5wdXRcIikgb25JbnB1dCh0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiKSBvbktleURvd24odGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcIm1vdXNlZG93blwiKSBpc01vdXNlRG93bihldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwibXV0YXRpb25cIikgcmVuZGVyKHRoaXMsIGV2ZW50KTtcbiAgfVxuICBnZXQgbXVsdGlwbGUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSBhdHRyKHRoaXMsIFwiZGF0YS1tdWx0aXBsZVwiKSkgIT0gbnVsbCA/IF9hMiA6IEZBTFNFKSAhPT0gRkFMU0U7XG4gIH1cbiAgc2V0IG11bHRpcGxlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImRhdGEtbXVsdGlwbGVcIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IGNyZWF0YWJsZSgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IGF0dHIodGhpcywgXCJkYXRhLWNyZWF0YWJsZVwiKSkgIT0gbnVsbCA/IF9hMiA6IEZBTFNFKSAhPT0gRkFMU0U7XG4gIH1cbiAgc2V0IGNyZWF0YWJsZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJkYXRhLWNyZWF0YWJsZVwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgY29udHJvbCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIGlmICghKChfYTIgPSB0aGlzLl9jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmlzQ29ubmVjdGVkKSlcbiAgICAgIHRoaXMuX2NvbnRyb2wgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFwiKTtcbiAgICByZXR1cm4gdGhpcy5fY29udHJvbDtcbiAgfVxuICBnZXQgbGlzdCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIGlmICghKChfYTIgPSB0aGlzLl9saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmlzQ29ubmVjdGVkKSlcbiAgICAgIHRoaXMuX2xpc3QgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJ1LWRhdGFsaXN0LGRhdGFsaXN0XCIpO1xuICAgIHJldHVybiB0aGlzLl9saXN0O1xuICB9XG4gIGdldCBjbGVhcigpIHtcbiAgICB2YXIgX2EyO1xuICAgIGlmICghKChfYTIgPSB0aGlzLl9jbGVhcikgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpIHRoaXMuX2NsZWFyID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiZGVsXCIpO1xuICAgIHJldHVybiB0aGlzLl9jbGVhcjtcbiAgfVxuICBnZXQgaXRlbXMoKSB7XG4gICAgaWYgKCF0aGlzLl9pdGVtcykgdGhpcy5faXRlbXMgPSB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZGF0YVwiKTtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgdmFyIF9hMiwgX2I7XG4gICAgaWYgKCF0aGlzLl9vcHRpb25zKSB7XG4gICAgICBjb25zdCB0YWcgPSAoKF9hMiA9IHRoaXMubGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5ub2RlTmFtZSkgPT09IFwiVS1EQVRBTElTVFwiID8gXCJ1LW9wdGlvblwiIDogXCJvcHRpb25cIjtcbiAgICAgIHRoaXMuX29wdGlvbnMgPSAoX2IgPSB0aGlzLmxpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYi5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuICBnZXQgdmFsdWVzKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5pdGVtc10ubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKTtcbiAgfVxufTtcbnZhciB0ZXh0ID0gKGVsKSA9PiB7XG4gIHZhciBfYTI7XG4gIHJldHVybiAoKF9hMiA9IGVsID09IG51bGwgPyB2b2lkIDAgOiBlbC50ZXh0Q29udGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG59O1xudmFyIGlzRGF0YSA9IChlbCkgPT4gZWwgaW5zdGFuY2VvZiBIVE1MRGF0YUVsZW1lbnQ7XG52YXIgaXNEaXNhYmxlZCA9ICh7IGNvbnRyb2wgfSkgPT4gKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuZGlzYWJsZWQpIHx8IChjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLnJlYWRPbmx5KSB8fCBmYWxzZTtcbnZhciByZW5kZXIgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IHsgX2ZvY3VzLCBfdGV4dHMsIGl0ZW1zLCBjb250cm9sLCBsaXN0LCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgbGV0IGxhYmVsID0gYCR7dGV4dCgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5sYWJlbHMpID09IG51bGwgPyB2b2lkIDAgOiBfYTJbMF0pfSR7bXVsdGlwbGUgPyBgLCAke2l0ZW1zLmxlbmd0aCA/IF90ZXh0cy5mb3VuZC5yZXBsYWNlKFwiJWRcIiwgYCR7aXRlbXMubGVuZ3RofWApIDogX3RleHRzLmVtcHR5fWAgOiBcIlwifWA7XG4gIGNvbnN0IGVkaXRzID0gW107XG4gIGZvciAoY29uc3QgeyBhZGRlZE5vZGVzLCByZW1vdmVkTm9kZXMgfSBvZiAoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LmRldGFpbCkgfHwgW10pIHtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIGFkZGVkTm9kZXMpIGlmIChpc0RhdGEoZWwpKSBlZGl0cy51bnNoaWZ0KGVsKTtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIHJlbW92ZWROb2RlcykgaWYgKGlzRGF0YShlbCkpIGVkaXRzLnB1c2goZWwpO1xuICB9XG4gIGNvbnN0IHNob3VsZEFubm91bmNlID0gbXVsdGlwbGUgPyBlZGl0cy5sZW5ndGggPT09IDEgOiBlZGl0c1swXSA9PT0gX2ZvY3VzO1xuICBpZiAoX2ZvY3VzICYmIGNvbnRyb2wgJiYgc2hvdWxkQW5ub3VuY2UpIHtcbiAgICBjb25zdCBhcmlhRXhwYW5kZWQgPSBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiKTtcbiAgICBjb25zdCBpbnB1dE1vZGUgPSBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIpO1xuICAgIGNvbnN0IG5leHRGb2N1cyA9IGlzRGF0YShfZm9jdXMpID8gY29udHJvbCA6IF9mb2N1cztcbiAgICBjb25zdCBpc1JlbW92ZSA9ICFlZGl0c1swXS5pc0Nvbm5lY3RlZDtcbiAgICBzZWxmLl9zcGVhayA9IGAke190ZXh0c1tpc1JlbW92ZSA/IFwicmVtb3ZlZFwiIDogXCJhZGRlZFwiXX0gJHt0ZXh0KGVkaXRzWzBdKX0sIGA7XG4gICAgaWYgKElTX01PQklMRSB8fCBfZm9jdXMgPT09IGNvbnRyb2wpIHNwZWFrKHNlbGYuX3NwZWFrKTtcbiAgICBpZiAoY29udHJvbCAhPT0gbmV4dEZvY3VzKSB7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiLCBudWxsKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgXCJub25lXCIpO1xuICAgICAgbGFiZWwgPSBcIlxceEEwXCI7XG4gICAgICBjb250cm9sLmZvY3VzKCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIGF0dHIoY29udHJvbCwgXCJhcmlhLWV4cGFuZGVkXCIsIGFyaWFFeHBhbmRlZCk7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIsIGlzUmVtb3ZlID8gXCJub25lXCIgOiBpbnB1dE1vZGUpO1xuICAgICAgKF9hMyA9IG5leHRGb2N1cyA9PSBudWxsID8gdm9pZCAwIDogbmV4dEZvY3VzLmZvY3VzKSA9PSBudWxsID8gdm9pZCAwIDogX2EzLmNhbGwobmV4dEZvY3VzKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgaW5wdXRNb2RlKTtcbiAgICAgIHNlbGYuX3NwZWFrID0gXCJcIjtcbiAgICAgIGlmIChJU19GSVJFRk9YX0RFU0tUT1ApIG9uKHNlbGYsIFwiYmx1clwiLCAoKSA9PiByZW5kZXIoc2VsZiksIEVWRU5UX09OQ0UpO1xuICAgICAgZWxzZSBzZXRUaW1lb3V0KHJlbmRlciwgMTAwLCBzZWxmKTtcbiAgICB9LCAxMDApO1xuICB9XG4gIGxldCBpZHggPSAwO1xuICBjb25zdCBzZWxlY3QgPSBzZWxmLnF1ZXJ5U2VsZWN0b3IoXCJzZWxlY3RcIik7XG4gIGNvbnN0IHJlbW92ZSA9IGlzRGlzYWJsZWQoc2VsZikgPyBcIlwiIDogYCR7X3RleHRzLnJlbW92ZX0sIGA7XG4gIGZvciAoY29uc3QgaXRlbTIgb2YgaXRlbXMpIHtcbiAgICBjb25zdCBvcHRpb24gPSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zW2lkeF07XG4gICAgY29uc3QgbGFiZWwyID0gdGV4dChpdGVtMik7XG4gICAgY29uc3QgdmFsdWUgPSBpdGVtMi52YWx1ZSB8fCBsYWJlbDI7XG4gICAgY29uc3QgYXJpYSA9IGAke3NlbGYuX3NwZWFrfSR7bGFiZWwyfSwgJHtyZW1vdmV9JHsrK2lkeH0gJHtfdGV4dHMub2Z9ICR7aXRlbXMubGVuZ3RofWA7XG4gICAgYXR0cihpdGVtMiwgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIGF0dHIoaXRlbTIsIFwidmFsdWVcIiwgdmFsdWUpO1xuICAgIGF0dHIoaXRlbTIsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICBhdHRyKGl0ZW0yLCBcImFyaWEtbGFiZWxcIiwgYXJpYSk7XG4gICAgaWYgKG9wdGlvbikgT2JqZWN0LmFzc2lnbihvcHRpb24sIHsgdGV4dENvbnRlbnQ6IGxhYmVsMiwgdmFsdWUgfSk7XG4gICAgZWxzZSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5hcHBlbmRDaGlsZChuZXcgT3B0aW9uKGxhYmVsMiwgdmFsdWUsIHRydWUsIHRydWUpKTtcbiAgfVxuICBpZiAoc2VsZWN0KSBhdHRyKHNlbGVjdCwgXCJtdWx0aXBsZVwiLCBtdWx0aXBsZSA/IFwiXCIgOiBudWxsKTtcbiAgZm9yIChjb25zdCBvcHQgb2YgWy4uLihzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zKSB8fCBbXV0uc2xpY2UoaWR4KSkgb3B0LnJlbW92ZSgpO1xuICBpZiAoIW11bHRpcGxlICYmIGlkeCA+IDEpXG4gICAgY29uc29sZS53YXJuKFwidS1jb21ib2JveDogTXVsdGlwbGUgPGRhdGE+IGZvdW5kIGluIHNpbmdsZSBtb2RlLlwiKTtcbiAgaWYgKGxpc3QpIGF0dHIobGlzdCwgXCJhcmlhLW11bHRpc2VsZWN0YWJsZVwiLCBgJHttdWx0aXBsZX1gKTtcbiAgaWYgKGNvbnRyb2wpIGF0dHIoY29udHJvbCwgXCJsaXN0XCIsIHVzZUlkKGxpc3QpKTtcbiAgaWYgKGNvbnRyb2wpIGF0dHIoY29udHJvbCwgXCJhcmlhLWxhYmVsXCIsIGAke3NlbGYuX3NwZWFrfSR7bGFiZWx9YCk7XG4gIGNvbnN0IGl0ZW0gPSB0ZXh0KGl0ZW1zWzBdKTtcbiAgaWYgKGl0ZW0gIT09IHNlbGYuX2l0ZW0pIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICBzZWxmLl9pdGVtID0gaXRlbTtcbiAgc3luY0NsZWFyV2l0aElucHV0KHNlbGYpO1xuICBzeW5jT3B0aW9uc1dpdGhJdGVtcyhzZWxmKTtcbiAgKF9iID0gbXV0YXRpb25PYnNlcnZlcihzZWxmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLnRha2VSZWNvcmRzKCk7XG59O1xudmFyIHN5bmNDbGVhcldpdGhJbnB1dCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChzZWxmLmNsZWFyKSBhdHRyKHNlbGYuY2xlYXIsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgaWYgKHNlbGYuY2xlYXIpIHNlbGYuY2xlYXIuaGlkZGVuID0gISgoX2EyID0gc2VsZi5jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnZhbHVlKSB8fCBpc0Rpc2FibGVkKHNlbGYpO1xufTtcbnZhciBzeW5jT3B0aW9uc1dpdGhJdGVtcyA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgX3NwZWFrLCBvcHRpb25zID0gW10sIHZhbHVlcyB9ID0gc2VsZjtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gKF9hMiA9IGF0dHIob3B0LCBcInZhbHVlXCIpKSAhPSBudWxsID8gX2EyIDogdGV4dChvcHQpO1xuICAgIGF0dHIob3B0LCBcImFyaWEtbGFiZWxcIiwgX3NwZWFrID8gYCR7X3NwZWFrfSR7dGV4dChvcHQpfWAgOiBudWxsKTtcbiAgICBhdHRyKG9wdCwgXCJzZWxlY3RlZFwiLCB2YWx1ZXMuaW5jbHVkZXModmFsdWUpID8gXCJcIiA6IG51bGwpO1xuICB9XG59O1xudmFyIHN5bmNJbnB1dFZhbHVlID0gKHNlbGYpID0+IHtcbiAgY29uc3QgeyBtdWx0aXBsZSwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gdGV4dChpdGVtc1swXSk7XG4gIGlmICghbXVsdGlwbGUgJiYgY29udHJvbCAmJiB2YWx1ZSAhPT0gY29udHJvbC52YWx1ZSlcbiAgICBzZXRWYWx1ZShjb250cm9sLCB2YWx1ZSwgdmFsdWUgPyBcImluc2VydFRleHRcIiA6IFwiZGVsZXRlQ29udGVudFwiKTtcbn07XG52YXIgZGlzcGF0Y2hNYXRjaCA9IChzZWxmLCBjaGFuZ2UgPSB0cnVlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgX3RleHRzLCBvcHRpb25zID0gW10sIGNyZWF0YWJsZSwgY29udHJvbCwgaXRlbXMsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IHF1ZXJ5ID0gdmFsdWUudG9Mb3dlckNhc2UoKSB8fCBudWxsO1xuICBsZXQgbWF0Y2ggPSBbLi4ub3B0aW9uc10uZmluZChcbiAgICAob3B0KSA9PiAoYXR0cihvcHQsIFwibGFiZWxcIikgfHwgdGV4dChvcHQpKS50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gcXVlcnlcbiAgKTtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogbWF0Y2ggfTtcbiAgaWYgKCFzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiY29tYm9ib3hiZWZvcmVtYXRjaFwiLCBldmVudCkpKVxuICAgIG1hdGNoID0gWy4uLm9wdGlvbnNdLmZpbmQoKG8pID0+IG8uc2VsZWN0ZWQpO1xuICBpZiAoY2hhbmdlKSB7XG4gICAgc3luY09wdGlvbnNXaXRoSXRlbXMoc2VsZik7XG4gICAgaWYgKG1hdGNoKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgbWF0Y2gsIGZhbHNlKTtcbiAgICBpZiAoY3JlYXRhYmxlICYmIHZhbHVlKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgeyB2YWx1ZSB9LCBmYWxzZSk7XG4gICAgaWYgKCFtdWx0aXBsZSAmJiAhdmFsdWUgJiYgaXRlbXNbMF0pIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW1zWzBdKTtcbiAgICBlbHNlIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICAgIHJldHVybiBzcGVhayhfdGV4dHMuaW52YWxpZCk7XG4gIH1cbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykgb3B0LnNlbGVjdGVkID0gb3B0ID09PSBtYXRjaDtcbn07XG52YXIgZGlzcGF0Y2hDaGFuZ2UgPSAoc2VsZiwgaXRlbSwgcmVtb3ZhYmxlID0gdHJ1ZSkgPT4ge1xuICBjb25zdCB7IGNvbnRyb2wsIGl0ZW1zLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgYWRkID0gY3JlYXRlRWxlbWVudChcImRhdGFcIiwgaXRlbS5sYWJlbCB8fCBpdGVtLnZhbHVlLCB7XG4gICAgdmFsdWU6IGl0ZW0udmFsdWVcbiAgfSk7XG4gIGNvbnN0IHJlbW92ZSA9IFsuLi5pdGVtc10uZmluZCgoaSkgPT4gaS52YWx1ZSA9PT0gaXRlbS52YWx1ZSk7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IHJlbW92ZSB8fCBhZGQgfTtcbiAgY29uc3Qgc2tpcCA9IHJlbW92ZSAmJiAhcmVtb3ZhYmxlO1xuICBpZiAoc2tpcCkgcmV0dXJuIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICBpZiAoc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImNvbWJvYm94YmVmb3Jlc2VsZWN0XCIsIGV2ZW50KSkpIHtcbiAgICBpZiAoIW11bHRpcGxlKSBmb3IgKGNvbnN0IGl0ZW0yIG9mIFsuLi5pdGVtc10pIGl0ZW0yLnJlbW92ZSgpO1xuICAgIGlmIChyZW1vdmUpIHJlbW92ZS5yZW1vdmUoKTtcbiAgICBlbHNlIGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYmVmb3JlYmVnaW5cIiwgYWRkKTtcbiAgICBzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiY29tYm9ib3hhZnRlcnNlbGVjdFwiLCBldmVudCkpO1xuICB9XG59O1xudmFyIG9uRm9jdXMgPSAoc2VsZiwgeyB0YXJnZXQgfSkgPT4ge1xuICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHNlbGYuX2ZvY3VzID0gdGFyZ2V0O1xuICBzcGVhaygpO1xufTtcbnZhciBvbkJsdXIgPSAoc2VsZikgPT4gaXNNb3VzZURvd24oKSB8fCBzZXRUaW1lb3V0KG9uQmx1cnJlZCwgMCwgc2VsZik7XG52YXIgb25CbHVycmVkID0gKHNlbGYpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9mb2N1cyB8fCBzZWxmLmNvbnRhaW5zKChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQpKSByZXR1cm47XG4gIGlmICghc2VsZi5tdWx0aXBsZSkgZGlzcGF0Y2hNYXRjaChzZWxmKTtcbiAgc2VsZi5fZm9jdXMgPSB2b2lkIDA7XG59O1xudmFyIG9uQ2xpY2sgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgY29uc3QgeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5LCB0YXJnZXQgfSA9IGV2ZW50O1xuICBjb25zdCB7IGNsZWFyLCBjb250cm9sLCBpdGVtcyB9ID0gc2VsZjtcbiAgaWYgKGNsZWFyID09IG51bGwgPyB2b2lkIDAgOiBjbGVhci5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgaWYgKGNvbnRyb2wpIHNldFZhbHVlKGNvbnRyb2wsIFwiXCIsIFwiZGVsZXRlQ29udGVudEJhY2t3YXJkXCIpO1xuICAgIHJldHVybiBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCk7XG4gIH1cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfSA9IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKGl0ZW0uY29udGFpbnModGFyZ2V0KSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW0pO1xuICAgIGlmICh5ID49IHRvcCAmJiB5IDw9IGJvdHRvbSAmJiB4ID49IGxlZnQgJiYgeCA8PSByaWdodCkgcmV0dXJuIGl0ZW0uZm9jdXMoKTtcbiAgfVxuICBpZiAodGFyZ2V0ID09PSBzZWxmKSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCk7XG59O1xudmFyIG9uSW5wdXQgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgeyBvcHRpb25zID0gW10sIGNvbnRyb2wsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IGlzQ2xpY2sgPSBldmVudCBpbnN0YW5jZW9mIElucHV0RXZlbnQgPyAhZXZlbnQuaW5wdXRUeXBlIHx8IGV2ZW50LmlucHV0VHlwZSA9PT0gXCJpbnNlcnRSZXBsYWNlbWVudFRleHRcIiA6ICEhdmFsdWU7XG4gIGlmIChpc0NsaWNrKSB7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGNvbnRyb2wpIGNvbnRyb2wudmFsdWUgPSBzZWxmLl92YWx1ZTtcbiAgICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKVxuICAgICAgaWYgKG9wdC52YWx1ZSAmJiBvcHQudmFsdWUgPT09IHZhbHVlKVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgb3B0LCBtdWx0aXBsZSk7XG4gIH0gZWxzZSBpZiAoIW11bHRpcGxlKSBkaXNwYXRjaE1hdGNoKHNlbGYsIGZhbHNlKTtcbiAgc3luY0NsZWFyV2l0aElucHV0KHNlbGYpO1xufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkpIHJldHVybjtcbiAgY29uc3QgeyBjbGVhciwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGNvbnN0IHsga2V5LCByZXBlYXQsIHRhcmdldCB9ID0gZXZlbnQ7XG4gIGNvbnN0IGlzQ29udHJvbCA9IGNvbnRyb2wgJiYgY29udHJvbCA9PT0gdGFyZ2V0O1xuICBjb25zdCBpblRleHQgPSBpc0NvbnRyb2wgJiYgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuc2VsZWN0aW9uRW5kKTtcbiAgbGV0IGluZGV4ID0gaXNDb250cm9sID8gaXRlbXMubGVuZ3RoIDogWy4uLml0ZW1zXS5pbmRleE9mKHRhcmdldCk7XG4gIGlmIChpc0NvbnRyb2wgJiYga2V5ID09PSBcIlRhYlwiICYmIGNsZWFyICYmICFjbGVhci5oaWRkZW4pIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNsZWFyLnRhYkluZGV4ID0gLTE7XG4gICAgY2xlYXIuZm9jdXMoKTtcbiAgICBvbihjbGVhciwgXCJibHVyXCIsICgpID0+IGF0dHIoY2xlYXIsIFwidGFiaW5kZXhcIiwgbnVsbCksIEVWRU5UX09OQ0UpO1xuICB9XG4gIGlmICghaXNDb250cm9sICYmIGFzQnV0dG9uKGV2ZW50KSB8fCBpbmRleCA9PT0gLTEpIHJldHVybjtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1JpZ2h0XCIgJiYgIWlzQ29udHJvbCkgaW5kZXggKz0gMTtcbiAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93TGVmdFwiICYmICFpblRleHQpIGluZGV4IC09IDE7XG4gIGVsc2UgaWYgKGtleSA9PT0gXCJFbnRlclwiICYmIGlzQ29udHJvbCkge1xuICAgIGNvbnN0IGZvcm0gPSBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiKTtcbiAgICBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiLCBcIiNcIik7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IGF0dHIoY29udHJvbCwgXCJmb3JtXCIsIGZvcm0pKTtcbiAgICByZXR1cm4gZGlzcGF0Y2hNYXRjaChzZWxmKTtcbiAgfSBlbHNlIGlmICgoa2V5ID09PSBcIkJhY2tzcGFjZVwiIHx8IGtleSA9PT0gXCJEZWxldGVcIikgJiYgIWluVGV4dCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCFyZXBlYXQgJiYgaXRlbXNbaW5kZXhdKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgaXRlbXNbaW5kZXhdKTtcbiAgICBpZiAoaXNDb250cm9sKSBpbmRleCAtPSAxO1xuICB9IGVsc2UgcmV0dXJuIGlzQ29udHJvbCB8fCAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpKTtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgKF9hMiA9IGl0ZW1zW01hdGgubWF4KDAsIGluZGV4KV0gfHwgY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtY29tYm9ib3hcIiwgVUhUTUxDb21ib2JveEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTENvbWJvYm94RWxlbWVudCB9O1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgU0FGRV9MQUJFTExFREJZID0gYCR7SVNfQU5EUk9JRCA/IFwiZGF0YVwiIDogXCJhcmlhXCJ9LWxhYmVsbGVkYnlgO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgX2EyO1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIChfYTIgPSBlbC5nZXRBdHRyaWJ1dGUobmFtZSkpICE9IG51bGwgPyBfYTIgOiBudWxsO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIGF0dGFjaFN0eWxlID0gKGVsZW1lbnQsIGNzcykgPT4gZWxlbWVudC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAvLyBVbm5hbWVkIHNsb3QgZG9lcyBhdXRvbWF0aWNhbGx5IHJlbmRlciBhbGwgdG9wIGVsZW1lbnQgbm9kZXNcbiAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIGNzcylcbik7XG52YXIgb2JzZXJ2ZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgbXV0YXRpb25PYnNlcnZlciA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHJldHVybiBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICB0cnkge1xuICAgIG9ic2VydmVycy5nZXQoZWxlbWVudCkuZGlzY29ubmVjdCgpO1xuICAgIG9ic2VydmVycy5kZWxldGUoZWxlbWVudCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG5cbi8vIHUtdGFicy50c1xudmFyIEFSSUFfQ09OVFJPTFMgPSBcImFyaWEtY29udHJvbHNcIjtcbnZhciBBUklBX1NFTEVDVEVEID0gXCJhcmlhLXNlbGVjdGVkXCI7XG52YXIgVUhUTUxUYWJzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBESVNQTEFZX0JMT0NLKTtcbiAgfVxuICBnZXQgdGFiTGlzdCgpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJsaXN0XCIsIHRoaXMpWzBdIHx8IG51bGw7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldFNlbGVjdGVkSW5kZXgodGhpcy50YWJzKTtcbiAgfVxuICBzZXQgc2VsZWN0ZWRJbmRleChpbmRleCkge1xuICAgIHNldFNlbGVjdGVkKHRoaXMudGFic1tpbmRleF0pO1xuICB9XG4gIGdldCB0YWJzKCkge1xuICAgIHJldHVybiBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYlwiLCB0aGlzKTtcbiAgfVxuICBnZXQgcGFuZWxzKCkge1xuICAgIHJldHVybiBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYnBhbmVsXCIsIHRoaXMpO1xuICB9XG59O1xudmFyIFVIVE1MVGFiTGlzdEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgRElTUExBWV9CTE9DSyk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJ0YWJsaXN0XCIpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICAgIGlmICh0aGlzLnRhYnMubGVuZ3RoKSB0aGlzLmhhbmRsZUV2ZW50KCk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgb2ZmKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIGZhbHNlKTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGlmICghZXZlbnQgfHwgZXZlbnQudHlwZSA9PT0gXCJtdXRhdGlvblwiKSB7XG4gICAgICBjb25zdCB0YWIgPSB0aGlzLnRhYnNbTWF0aC5tYXgodGhpcy5zZWxlY3RlZEluZGV4LCAwKV07XG4gICAgICByZXR1cm4gdGFiID09IG51bGwgPyB2b2lkIDAgOiB0YWIuc2V0QXR0cmlidXRlKEFSSUFfU0VMRUNURUQsIFwidHJ1ZVwiKTtcbiAgICB9XG4gICAgY29uc3QgeyBrZXkgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHRhYnMgPSBbLi4udGhpcy50YWJzXTtcbiAgICBjb25zdCBwcmV2ID0gdGFicy5maW5kSW5kZXgoKHRhYikgPT4gdGFiLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpO1xuICAgIGxldCBuZXh0ID0gcHJldjtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCBwcmV2ID09PSAtMSkgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIpIHNldFNlbGVjdGVkKHRhYnNbcHJldl0pO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIiAmJiAhYXNCdXR0b24oZXZlbnQpKSB7XG4gICAgICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiIHx8IGtleSA9PT0gXCJBcnJvd1JpZ2h0XCIpXG4gICAgICAgIG5leHQgPSAocHJldiArIDEpICUgdGFicy5sZW5ndGg7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiQXJyb3dVcFwiIHx8IGtleSA9PT0gXCJBcnJvd0xlZnRcIilcbiAgICAgICAgbmV4dCA9IChwcmV2IHx8IHRhYnMubGVuZ3RoKSAtIDE7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiRW5kXCIpIG5leHQgPSB0YWJzLmxlbmd0aCAtIDE7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiSG9tZVwiKSBuZXh0ID0gMDtcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJUYWJcIikgbmV4dCA9IGdldFNlbGVjdGVkSW5kZXgodGFicyk7XG4gICAgICBlbHNlIHJldHVybjtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0YWJzW3ByZXZdLnRhYkluZGV4ID0gLTE7XG4gICAgICAgIHRhYnNbbmV4dF0udGFiSW5kZXggPSAwO1xuICAgICAgfSk7XG4gICAgICBpZiAoa2V5ICE9PSBcIlRhYlwiKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRhYnNbbmV4dF0uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpO1xuICB9XG4gIGdldCBzZWxlY3RlZEluZGV4KCkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicyk7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgICBzZXRTZWxlY3RlZCh0aGlzLnRhYnNbaW5kZXhdKTtcbiAgfVxufTtcbnZhciBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG52YXIgVUhUTUxUYWJFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiaWRcIiwgQVJJQV9TRUxFQ1RFRCwgQVJJQV9DT05UUk9MU107XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZShcbiAgICAgIHRoaXMsXG4gICAgICBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrIH1cIlxuICAgICk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJ0YWJcIik7XG4gICAgdGhpcy50YWJJbmRleCA9IHRoaXMuc2VsZWN0ZWQgPyAwIDogLTE7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGlmICghU0tJUF9BVFRSX0NIQU5HRSAmJiB0aGlzLnNlbGVjdGVkICYmIHRoaXMudGFiTGlzdCkge1xuICAgICAgU0tJUF9BVFRSX0NIQU5HRSA9IHRydWU7XG4gICAgICBjb25zdCB0YWJzID0gWy4uLnRoaXMudGFiTGlzdC5xdWVyeVNlbGVjdG9yQWxsKFwidS10YWJcIildO1xuICAgICAgY29uc3QgcGFuZWxzID0gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJwYW5lbFwiLCB0aGlzLnRhYnNFbGVtZW50IHx8IHRoaXMpO1xuICAgICAgY29uc3QgbmV4dFBhbmVsID0gZ2V0UGFuZWwodGhpcywgcGFuZWxzW3RhYnMuaW5kZXhPZih0aGlzKV0pO1xuICAgICAgaWYgKG5leHRQYW5lbCkgYXR0cihuZXh0UGFuZWwsIFNBRkVfTEFCRUxMRURCWSwgdXNlSWQodGhpcykpO1xuICAgICAgdGFicy5mb3JFYWNoKCh0YWIsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhbmVsID0gZ2V0UGFuZWwodGFiLCBwYW5lbHNbaW5kZXhdKTtcbiAgICAgICAgdGFiLnRhYkluZGV4ID0gdGFiID09PSB0aGlzID8gMCA6IC0xO1xuICAgICAgICBhdHRyKHRhYiwgQVJJQV9TRUxFQ1RFRCwgYCR7dGFiID09PSB0aGlzfWApO1xuICAgICAgICBpZiAocGFuZWwpIHBhbmVsLmhpZGRlbiA9IHBhbmVsICE9PSBuZXh0UGFuZWw7XG4gICAgICAgIGlmIChwYW5lbCkgYXR0cih0YWIsIEFSSUFfQ09OVFJPTFMsIHBhbmVsLmlkKTtcbiAgICAgIH0pO1xuICAgICAgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBnZXQgdGFic0VsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcInUtdGFic1wiKTtcbiAgfVxuICBnZXQgdGFiTGlzdCgpIHtcbiAgICBjb25zdCB0YWJsaXN0ID0gdGhpcy5wYXJlbnRFbGVtZW50O1xuICAgIHJldHVybiAodGFibGlzdCA9PSBudWxsID8gdm9pZCAwIDogdGFibGlzdC5ub2RlTmFtZSkgPT09IFwiVS1UQUJMSVNUXCIgPyB0YWJsaXN0IDogbnVsbDtcbiAgfVxuICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgQVJJQV9TRUxFQ1RFRCkgPT09IFwidHJ1ZVwiO1xuICB9XG4gIHNldCBzZWxlY3RlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgQVJJQV9TRUxFQ1RFRCwgYCR7ISF2YWx1ZX1gKTtcbiAgfVxuICAvKiogUmV0cmlldmVzIHRoZSBvcmRpbmFsIHBvc2l0aW9uIG9mIGFuIHRhYiBpbiBhIHRhYmxpc3QuICovXG4gIGdldCBpbmRleCgpIHtcbiAgICBjb25zdCB0YWJMaXN0ID0gdGhpcy50YWJMaXN0O1xuICAgIHJldHVybiB0YWJMaXN0ID8gWy4uLnRhYkxpc3QucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpXS5pbmRleE9mKHRoaXMpIDogMDtcbiAgfVxuICBnZXQgcGFuZWwoKSB7XG4gICAgcmV0dXJuIGdldFBhbmVsKHRoaXMpO1xuICB9XG59O1xudmFyIFVIVE1MVGFiUGFuZWxFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiaGlkZGVuXCJdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgRElTUExBWV9CTE9DSyk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJ0YWJwYW5lbFwiKTtcbiAgICB0aGlzLmhpZGRlbiA9IGdldFNlbGVjdGVkSW5kZXgodGhpcy50YWJzKSA9PT0gLTE7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMuaGlkZGVuIHx8IGlzRm9jdXNhYmxlKHRoaXMuZmlyc3RDaGlsZCkpXG4gICAgICBhdHRyKHRoaXMsIFwidGFiaW5kZXhcIiwgbnVsbCk7XG4gICAgZWxzZSB0aGlzLnRhYkluZGV4ID0gMDtcbiAgfVxuICBnZXQgdGFic0VsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcInUtdGFic1wiKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICBjb25zdCBjc3MgPSBgdS10YWJbJHtBUklBX0NPTlRST0xTfT1cIiR7dGhpcy5pZH1cIl1gO1xuICAgIHJldHVybiBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoY3NzKTtcbiAgfVxufTtcbnZhciBxdWVyeVdpdGhvdXROZXN0ZWQgPSAodGFnLCBzZWxmKSA9PiBzZWxmLnF1ZXJ5U2VsZWN0b3JBbGwoYCR7dGFnfTpub3QoOnNjb3BlIHUtdGFicGFuZWwgJHt0YWd9KWApO1xudmFyIGdldFBhbmVsID0gKHRhYiwgcGFuZWwpID0+IHtcbiAgY29uc3QgaWQyID0gYXR0cih0YWIsIEFSSUFfQ09OVFJPTFMpIHx8IHVzZUlkKHBhbmVsKTtcbiAgY29uc3QgZWwgPSBnZXRSb290KHRhYikuZ2V0RWxlbWVudEJ5SWQoaWQyKTtcbiAgcmV0dXJuIChlbCA9PSBudWxsID8gdm9pZCAwIDogZWwubm9kZU5hbWUpID09PSBcIlUtVEFCUEFORUxcIiA/IGVsIDogbnVsbDtcbn07XG52YXIgZ2V0U2VsZWN0ZWRJbmRleCA9ICh0YWJzKSA9PiBbLi4udGFic10uZmluZEluZGV4KCh0YWIpID0+IGF0dHIodGFiLCBBUklBX1NFTEVDVEVEKSA9PT0gXCJ0cnVlXCIpO1xudmFyIHNldFNlbGVjdGVkID0gKHRhYikgPT4gdGFiICYmIGF0dHIodGFiLCBcImFyaWEtc2VsZWN0ZWRcIiwgXCJ0cnVlXCIpO1xudmFyIGlzRm9jdXNhYmxlID0gKGVsKSA9PiBlbCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgIWVsLm1hdGNoZXMoJzpkaXNhYmxlZCxbdGFiaW5kZXhePVwiLVwiXScpICYmIGVsLm1hdGNoZXMoXG4gIGBbY29udGVudGVkaXRhYmxlXSxbY29udHJvbHNdLFtocmVmXSxbdGFiaW5kZXhdLGlucHV0Om5vdChbdHlwZT1cImhpZGRlblwiXSksc2VsZWN0LHRleHRhcmVhLGJ1dHRvbixzdW1tYXJ5LGlmcmFtZWBcbik7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYnNcIiwgVUhUTUxUYWJzRWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYmxpc3RcIiwgVUhUTUxUYWJMaXN0RWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYlwiLCBVSFRNTFRhYkVsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJwYW5lbFwiLCBVSFRNTFRhYlBhbmVsRWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MVGFiRWxlbWVudCwgVUhUTUxUYWJMaXN0RWxlbWVudCwgVUhUTUxUYWJQYW5lbEVsZW1lbnQsIFVIVE1MVGFic0VsZW1lbnQgfTtcbiIsIi8qKlxuICogQ3VzdG9tIHBvc2l0aW9uaW5nIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3ZpcnR1YWwtZWxlbWVudHNcbiAqL1xuXG5jb25zdCBzaWRlcyA9IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J107XG5jb25zdCBhbGlnbm1lbnRzID0gWydzdGFydCcsICdlbmQnXTtcbmNvbnN0IHBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovc2lkZXMucmVkdWNlKChhY2MsIHNpZGUpID0+IGFjYy5jb25jYXQoc2lkZSwgc2lkZSArIFwiLVwiICsgYWxpZ25tZW50c1swXSwgc2lkZSArIFwiLVwiICsgYWxpZ25tZW50c1sxXSksIFtdKTtcbmNvbnN0IG1pbiA9IE1hdGgubWluO1xuY29uc3QgbWF4ID0gTWF0aC5tYXg7XG5jb25zdCByb3VuZCA9IE1hdGgucm91bmQ7XG5jb25zdCBmbG9vciA9IE1hdGguZmxvb3I7XG5jb25zdCBjcmVhdGVDb29yZHMgPSB2ID0+ICh7XG4gIHg6IHYsXG4gIHk6IHZcbn0pO1xuY29uc3Qgb3Bwb3NpdGVTaWRlTWFwID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuY29uc3Qgb3Bwb3NpdGVBbGlnbm1lbnRNYXAgPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZnVuY3Rpb24gY2xhbXAoc3RhcnQsIHZhbHVlLCBlbmQpIHtcbiAgcmV0dXJuIG1heChzdGFydCwgbWluKHZhbHVlLCBlbmQpKTtcbn1cbmZ1bmN0aW9uIGV2YWx1YXRlKHZhbHVlLCBwYXJhbSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gdmFsdWUocGFyYW0pIDogdmFsdWU7XG59XG5mdW5jdGlvbiBnZXRTaWRlKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59XG5mdW5jdGlvbiBnZXRBeGlzTGVuZ3RoKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbn1cbmNvbnN0IHlBeGlzU2lkZXMgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ3RvcCcsICdib3R0b20nXSk7XG5mdW5jdGlvbiBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHlBeGlzU2lkZXMuaGFzKGdldFNpZGUocGxhY2VtZW50KSkgPyAneScgOiAneCc7XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCkge1xuICByZXR1cm4gZ2V0T3Bwb3NpdGVBeGlzKGdldFNpZGVBeGlzKHBsYWNlbWVudCkpO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50U2lkZXMocGxhY2VtZW50LCByZWN0cywgcnRsKSB7XG4gIGlmIChydGwgPT09IHZvaWQgMCkge1xuICAgIHJ0bCA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnRBeGlzID0gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBsZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGFsaWdubWVudEF4aXMpO1xuICBsZXQgbWFpbkFsaWdubWVudFNpZGUgPSBhbGlnbm1lbnRBeGlzID09PSAneCcgPyBhbGlnbm1lbnQgPT09IChydGwgPyAnZW5kJyA6ICdzdGFydCcpID8gJ3JpZ2h0JyA6ICdsZWZ0JyA6IGFsaWdubWVudCA9PT0gJ3N0YXJ0JyA/ICdib3R0b20nIDogJ3RvcCc7XG4gIGlmIChyZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSA+IHJlY3RzLmZsb2F0aW5nW2xlbmd0aF0pIHtcbiAgICBtYWluQWxpZ25tZW50U2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5BbGlnbm1lbnRTaWRlKTtcbiAgfVxuICByZXR1cm4gW21haW5BbGlnbm1lbnRTaWRlLCBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluQWxpZ25tZW50U2lkZSldO1xufVxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRQbGFjZW1lbnRzKHBsYWNlbWVudCkge1xuICBjb25zdCBvcHBvc2l0ZVBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHJldHVybiBbZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSwgb3Bwb3NpdGVQbGFjZW1lbnQsIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KG9wcG9zaXRlUGxhY2VtZW50KV07XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9zdGFydHxlbmQvZywgYWxpZ25tZW50ID0+IG9wcG9zaXRlQWxpZ25tZW50TWFwW2FsaWdubWVudF0pO1xufVxuY29uc3QgbHJQbGFjZW1lbnQgPSBbJ2xlZnQnLCAncmlnaHQnXTtcbmNvbnN0IHJsUGxhY2VtZW50ID0gWydyaWdodCcsICdsZWZ0J107XG5jb25zdCB0YlBsYWNlbWVudCA9IFsndG9wJywgJ2JvdHRvbSddO1xuY29uc3QgYnRQbGFjZW1lbnQgPSBbJ2JvdHRvbScsICd0b3AnXTtcbmZ1bmN0aW9uIGdldFNpZGVMaXN0KHNpZGUsIGlzU3RhcnQsIHJ0bCkge1xuICBzd2l0Y2ggKHNpZGUpIHtcbiAgICBjYXNlICd0b3AnOlxuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICBpZiAocnRsKSByZXR1cm4gaXNTdGFydCA/IHJsUGxhY2VtZW50IDogbHJQbGFjZW1lbnQ7XG4gICAgICByZXR1cm4gaXNTdGFydCA/IGxyUGxhY2VtZW50IDogcmxQbGFjZW1lbnQ7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuIGlzU3RhcnQgPyB0YlBsYWNlbWVudCA6IGJ0UGxhY2VtZW50O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gW107XG4gIH1cbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMocGxhY2VtZW50LCBmbGlwQWxpZ25tZW50LCBkaXJlY3Rpb24sIHJ0bCkge1xuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgbGV0IGxpc3QgPSBnZXRTaWRlTGlzdChnZXRTaWRlKHBsYWNlbWVudCksIGRpcmVjdGlvbiA9PT0gJ3N0YXJ0JywgcnRsKTtcbiAgaWYgKGFsaWdubWVudCkge1xuICAgIGxpc3QgPSBsaXN0Lm1hcChzaWRlID0+IHNpZGUgKyBcIi1cIiArIGFsaWdubWVudCk7XG4gICAgaWYgKGZsaXBBbGlnbm1lbnQpIHtcbiAgICAgIGxpc3QgPSBsaXN0LmNvbmNhdChsaXN0Lm1hcChnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGlzdDtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLCBzaWRlID0+IG9wcG9zaXRlU2lkZU1hcFtzaWRlXSk7XG59XG5mdW5jdGlvbiBleHBhbmRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgLi4ucGFkZGluZ1xuICB9O1xufVxuZnVuY3Rpb24gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKSB7XG4gIHJldHVybiB0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBleHBhbmRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpIDoge1xuICAgIHRvcDogcGFkZGluZyxcbiAgICByaWdodDogcGFkZGluZyxcbiAgICBib3R0b206IHBhZGRpbmcsXG4gICAgbGVmdDogcGFkZGluZ1xuICB9O1xufVxuZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIGNvbnN0IHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH0gPSByZWN0O1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB0b3A6IHksXG4gICAgbGVmdDogeCxcbiAgICByaWdodDogeCArIHdpZHRoLFxuICAgIGJvdHRvbTogeSArIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuZXhwb3J0IHsgYWxpZ25tZW50cywgY2xhbXAsIGNyZWF0ZUNvb3JkcywgZXZhbHVhdGUsIGV4cGFuZFBhZGRpbmdPYmplY3QsIGZsb29yLCBnZXRBbGlnbm1lbnQsIGdldEFsaWdubWVudEF4aXMsIGdldEFsaWdubWVudFNpZGVzLCBnZXRBeGlzTGVuZ3RoLCBnZXRFeHBhbmRlZFBsYWNlbWVudHMsIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50LCBnZXRPcHBvc2l0ZUF4aXMsIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMsIGdldE9wcG9zaXRlUGxhY2VtZW50LCBnZXRQYWRkaW5nT2JqZWN0LCBnZXRTaWRlLCBnZXRTaWRlQXhpcywgbWF4LCBtaW4sIHBsYWNlbWVudHMsIHJlY3RUb0NsaWVudFJlY3QsIHJvdW5kLCBzaWRlcyB9O1xuIiwiaW1wb3J0IHsgZ2V0U2lkZUF4aXMsIGdldEFsaWdubWVudEF4aXMsIGdldEF4aXNMZW5ndGgsIGdldFNpZGUsIGdldEFsaWdubWVudCwgZXZhbHVhdGUsIGdldFBhZGRpbmdPYmplY3QsIHJlY3RUb0NsaWVudFJlY3QsIG1pbiwgY2xhbXAsIHBsYWNlbWVudHMsIGdldEFsaWdubWVudFNpZGVzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQsIGdldEV4cGFuZGVkUGxhY2VtZW50cywgZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cywgc2lkZXMsIG1heCwgZ2V0T3Bwb3NpdGVBeGlzIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcbmV4cG9ydCB7IHJlY3RUb0NsaWVudFJlY3QgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMnO1xuXG5mdW5jdGlvbiBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChfcmVmLCBwbGFjZW1lbnQsIHJ0bCkge1xuICBsZXQge1xuICAgIHJlZmVyZW5jZSxcbiAgICBmbG9hdGluZ1xuICB9ID0gX3JlZjtcbiAgY29uc3Qgc2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnRBeGlzID0gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbkxlbmd0aCA9IGdldEF4aXNMZW5ndGgoYWxpZ25tZW50QXhpcyk7XG4gIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gIGNvbnN0IGlzVmVydGljYWwgPSBzaWRlQXhpcyA9PT0gJ3knO1xuICBjb25zdCBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZmxvYXRpbmcud2lkdGggLyAyO1xuICBjb25zdCBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGZsb2F0aW5nLmhlaWdodCAvIDI7XG4gIGNvbnN0IGNvbW1vbkFsaWduID0gcmVmZXJlbmNlW2FsaWduTGVuZ3RoXSAvIDIgLSBmbG9hdGluZ1thbGlnbkxlbmd0aF0gLyAyO1xuICBsZXQgY29vcmRzO1xuICBzd2l0Y2ggKHNpZGUpIHtcbiAgICBjYXNlICd0b3AnOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGZsb2F0aW5nLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBmbG9hdGluZy53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54LFxuICAgICAgICB5OiByZWZlcmVuY2UueVxuICAgICAgfTtcbiAgfVxuICBzd2l0Y2ggKGdldEFsaWdubWVudChwbGFjZW1lbnQpKSB7XG4gICAgY2FzZSAnc3RhcnQnOlxuICAgICAgY29vcmRzW2FsaWdubWVudEF4aXNdIC09IGNvbW1vbkFsaWduICogKHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2VuZCc6XG4gICAgICBjb29yZHNbYWxpZ25tZW50QXhpc10gKz0gY29tbW9uQWxpZ24gKiAocnRsICYmIGlzVmVydGljYWwgPyAtMSA6IDEpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGNvb3Jkcztcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMgdGhhdCB3aWxsIHBsYWNlIHRoZSBmbG9hdGluZyBlbGVtZW50XG4gKiBuZXh0IHRvIGEgZ2l2ZW4gcmVmZXJlbmNlIGVsZW1lbnQuXG4gKlxuICogVGhpcyBleHBvcnQgZG9lcyBub3QgaGF2ZSBhbnkgYHBsYXRmb3JtYCBpbnRlcmZhY2UgbG9naWMuIFlvdSB3aWxsIG5lZWQgdG9cbiAqIHdyaXRlIG9uZSBmb3IgdGhlIHBsYXRmb3JtIHlvdSBhcmUgdXNpbmcgRmxvYXRpbmcgVUkgd2l0aC5cbiAqL1xuY29uc3QgY29tcHV0ZVBvc2l0aW9uID0gYXN5bmMgKHJlZmVyZW5jZSwgZmxvYXRpbmcsIGNvbmZpZykgPT4ge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50ID0gJ2JvdHRvbScsXG4gICAgc3RyYXRlZ3kgPSAnYWJzb2x1dGUnLFxuICAgIG1pZGRsZXdhcmUgPSBbXSxcbiAgICBwbGF0Zm9ybVxuICB9ID0gY29uZmlnO1xuICBjb25zdCB2YWxpZE1pZGRsZXdhcmUgPSBtaWRkbGV3YXJlLmZpbHRlcihCb29sZWFuKTtcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChmbG9hdGluZykpO1xuICBsZXQgcmVjdHMgPSBhd2FpdCBwbGF0Zm9ybS5nZXRFbGVtZW50UmVjdHMoe1xuICAgIHJlZmVyZW5jZSxcbiAgICBmbG9hdGluZyxcbiAgICBzdHJhdGVneVxuICB9KTtcbiAgbGV0IHtcbiAgICB4LFxuICAgIHlcbiAgfSA9IGNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50KHJlY3RzLCBwbGFjZW1lbnQsIHJ0bCk7XG4gIGxldCBzdGF0ZWZ1bFBsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgbGV0IG1pZGRsZXdhcmVEYXRhID0ge307XG4gIGxldCByZXNldENvdW50ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWxpZE1pZGRsZXdhcmUubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB7XG4gICAgICBuYW1lLFxuICAgICAgZm5cbiAgICB9ID0gdmFsaWRNaWRkbGV3YXJlW2ldO1xuICAgIGNvbnN0IHtcbiAgICAgIHg6IG5leHRYLFxuICAgICAgeTogbmV4dFksXG4gICAgICBkYXRhLFxuICAgICAgcmVzZXRcbiAgICB9ID0gYXdhaXQgZm4oe1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBpbml0aWFsUGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQ6IHN0YXRlZnVsUGxhY2VtZW50LFxuICAgICAgc3RyYXRlZ3ksXG4gICAgICBtaWRkbGV3YXJlRGF0YSxcbiAgICAgIHJlY3RzLFxuICAgICAgcGxhdGZvcm0sXG4gICAgICBlbGVtZW50czoge1xuICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgIGZsb2F0aW5nXG4gICAgICB9XG4gICAgfSk7XG4gICAgeCA9IG5leHRYICE9IG51bGwgPyBuZXh0WCA6IHg7XG4gICAgeSA9IG5leHRZICE9IG51bGwgPyBuZXh0WSA6IHk7XG4gICAgbWlkZGxld2FyZURhdGEgPSB7XG4gICAgICAuLi5taWRkbGV3YXJlRGF0YSxcbiAgICAgIFtuYW1lXToge1xuICAgICAgICAuLi5taWRkbGV3YXJlRGF0YVtuYW1lXSxcbiAgICAgICAgLi4uZGF0YVxuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHJlc2V0ICYmIHJlc2V0Q291bnQgPD0gNTApIHtcbiAgICAgIHJlc2V0Q291bnQrKztcbiAgICAgIGlmICh0eXBlb2YgcmVzZXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChyZXNldC5wbGFjZW1lbnQpIHtcbiAgICAgICAgICBzdGF0ZWZ1bFBsYWNlbWVudCA9IHJlc2V0LnBsYWNlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzZXQucmVjdHMpIHtcbiAgICAgICAgICByZWN0cyA9IHJlc2V0LnJlY3RzID09PSB0cnVlID8gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICAgICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgICAgIGZsb2F0aW5nLFxuICAgICAgICAgICAgc3RyYXRlZ3lcbiAgICAgICAgICB9KSA6IHJlc2V0LnJlY3RzO1xuICAgICAgICB9XG4gICAgICAgICh7XG4gICAgICAgICAgeCxcbiAgICAgICAgICB5XG4gICAgICAgIH0gPSBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChyZWN0cywgc3RhdGVmdWxQbGFjZW1lbnQsIHJ0bCkpO1xuICAgICAgfVxuICAgICAgaSA9IC0xO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlZnVsUGxhY2VtZW50LFxuICAgIHN0cmF0ZWd5LFxuICAgIG1pZGRsZXdhcmVEYXRhXG4gIH07XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHdpdGggYW4gb2JqZWN0IG9mIG92ZXJmbG93IHNpZGUgb2Zmc2V0cyB0aGF0IGRldGVybWluZSBob3cgbXVjaCB0aGVcbiAqIGVsZW1lbnQgaXMgb3ZlcmZsb3dpbmcgYSBnaXZlbiBjbGlwcGluZyBib3VuZGFyeSBvbiBlYWNoIHNpZGUuXG4gKiAtIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGJvdW5kYXJ5IGJ5IHRoYXQgbnVtYmVyIG9mIHBpeGVsc1xuICogLSBuZWdhdGl2ZSA9IGhvdyBtYW55IHBpeGVscyBsZWZ0IGJlZm9yZSBpdCB3aWxsIG92ZXJmbG93XG4gKiAtIDAgPSBsaWVzIGZsdXNoIHdpdGggdGhlIGJvdW5kYXJ5XG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZGV0ZWN0T3ZlcmZsb3dcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9hd2FpdCRwbGF0Zm9ybSRpc0VsZTtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBjb25zdCB7XG4gICAgeCxcbiAgICB5LFxuICAgIHBsYXRmb3JtLFxuICAgIHJlY3RzLFxuICAgIGVsZW1lbnRzLFxuICAgIHN0cmF0ZWd5XG4gIH0gPSBzdGF0ZTtcbiAgY29uc3Qge1xuICAgIGJvdW5kYXJ5ID0gJ2NsaXBwaW5nQW5jZXN0b3JzJyxcbiAgICByb290Qm91bmRhcnkgPSAndmlld3BvcnQnLFxuICAgIGVsZW1lbnRDb250ZXh0ID0gJ2Zsb2F0aW5nJyxcbiAgICBhbHRCb3VuZGFyeSA9IGZhbHNlLFxuICAgIHBhZGRpbmcgPSAwXG4gIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gIGNvbnN0IHBhZGRpbmdPYmplY3QgPSBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpO1xuICBjb25zdCBhbHRDb250ZXh0ID0gZWxlbWVudENvbnRleHQgPT09ICdmbG9hdGluZycgPyAncmVmZXJlbmNlJyA6ICdmbG9hdGluZyc7XG4gIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIGNvbnN0IGNsaXBwaW5nQ2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QoYXdhaXQgcGxhdGZvcm0uZ2V0Q2xpcHBpbmdSZWN0KHtcbiAgICBlbGVtZW50OiAoKF9hd2FpdCRwbGF0Zm9ybSRpc0VsZSA9IGF3YWl0IChwbGF0Zm9ybS5pc0VsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzRWxlbWVudChlbGVtZW50KSkpICE9IG51bGwgPyBfYXdhaXQkcGxhdGZvcm0kaXNFbGUgOiB0cnVlKSA/IGVsZW1lbnQgOiBlbGVtZW50LmNvbnRleHRFbGVtZW50IHx8IChhd2FpdCAocGxhdGZvcm0uZ2V0RG9jdW1lbnRFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudHMuZmxvYXRpbmcpKSksXG4gICAgYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5LFxuICAgIHN0cmF0ZWd5XG4gIH0pKTtcbiAgY29uc3QgcmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSAnZmxvYXRpbmcnID8ge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aDogcmVjdHMuZmxvYXRpbmcud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0cy5mbG9hdGluZy5oZWlnaHRcbiAgfSA6IHJlY3RzLnJlZmVyZW5jZTtcbiAgY29uc3Qgb2Zmc2V0UGFyZW50ID0gYXdhaXQgKHBsYXRmb3JtLmdldE9mZnNldFBhcmVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gIGNvbnN0IG9mZnNldFNjYWxlID0gKGF3YWl0IChwbGF0Zm9ybS5pc0VsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzRWxlbWVudChvZmZzZXRQYXJlbnQpKSkgPyAoYXdhaXQgKHBsYXRmb3JtLmdldFNjYWxlID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRTY2FsZShvZmZzZXRQYXJlbnQpKSkgfHwge1xuICAgIHg6IDEsXG4gICAgeTogMVxuICB9IDoge1xuICAgIHg6IDEsXG4gICAgeTogMVxuICB9O1xuICBjb25zdCBlbGVtZW50Q2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QocGxhdGZvcm0uY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QgPyBhd2FpdCBwbGF0Zm9ybS5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCh7XG4gICAgZWxlbWVudHMsXG4gICAgcmVjdCxcbiAgICBvZmZzZXRQYXJlbnQsXG4gICAgc3RyYXRlZ3lcbiAgfSkgOiByZWN0KTtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IChjbGlwcGluZ0NsaWVudFJlY3QudG9wIC0gZWxlbWVudENsaWVudFJlY3QudG9wICsgcGFkZGluZ09iamVjdC50b3ApIC8gb2Zmc2V0U2NhbGUueSxcbiAgICBib3R0b206IChlbGVtZW50Q2xpZW50UmVjdC5ib3R0b20gLSBjbGlwcGluZ0NsaWVudFJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20pIC8gb2Zmc2V0U2NhbGUueSxcbiAgICBsZWZ0OiAoY2xpcHBpbmdDbGllbnRSZWN0LmxlZnQgLSBlbGVtZW50Q2xpZW50UmVjdC5sZWZ0ICsgcGFkZGluZ09iamVjdC5sZWZ0KSAvIG9mZnNldFNjYWxlLngsXG4gICAgcmlnaHQ6IChlbGVtZW50Q2xpZW50UmVjdC5yaWdodCAtIGNsaXBwaW5nQ2xpZW50UmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHQpIC8gb2Zmc2V0U2NhbGUueFxuICB9O1xufVxuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gcG9zaXRpb24gYW4gaW5uZXIgZWxlbWVudCBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBzbyB0aGF0IGl0XG4gKiBhcHBlYXJzIGNlbnRlcmVkIHRvIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hcnJvd1xuICovXG5jb25zdCBhcnJvdyA9IG9wdGlvbnMgPT4gKHtcbiAgbmFtZTogJ2Fycm93JyxcbiAgb3B0aW9ucyxcbiAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICBjb25zdCB7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHBsYWNlbWVudCxcbiAgICAgIHJlY3RzLFxuICAgICAgcGxhdGZvcm0sXG4gICAgICBlbGVtZW50cyxcbiAgICAgIG1pZGRsZXdhcmVEYXRhXG4gICAgfSA9IHN0YXRlO1xuICAgIC8vIFNpbmNlIGBlbGVtZW50YCBpcyByZXF1aXJlZCwgd2UgZG9uJ3QgUGFydGlhbDw+IHRoZSB0eXBlLlxuICAgIGNvbnN0IHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwYWRkaW5nID0gMFxuICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSkgfHwge307XG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICB4LFxuICAgICAgeVxuICAgIH07XG4gICAgY29uc3QgYXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgICBjb25zdCBsZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGF4aXMpO1xuICAgIGNvbnN0IGFycm93RGltZW5zaW9ucyA9IGF3YWl0IHBsYXRmb3JtLmdldERpbWVuc2lvbnMoZWxlbWVudCk7XG4gICAgY29uc3QgaXNZQXhpcyA9IGF4aXMgPT09ICd5JztcbiAgICBjb25zdCBtaW5Qcm9wID0gaXNZQXhpcyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgIGNvbnN0IG1heFByb3AgPSBpc1lBeGlzID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICAgIGNvbnN0IGNsaWVudFByb3AgPSBpc1lBeGlzID8gJ2NsaWVudEhlaWdodCcgOiAnY2xpZW50V2lkdGgnO1xuICAgIGNvbnN0IGVuZERpZmYgPSByZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSArIHJlY3RzLnJlZmVyZW5jZVtheGlzXSAtIGNvb3Jkc1theGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbmd0aF07XG4gICAgY29uc3Qgc3RhcnREaWZmID0gY29vcmRzW2F4aXNdIC0gcmVjdHMucmVmZXJlbmNlW2F4aXNdO1xuICAgIGNvbnN0IGFycm93T2Zmc2V0UGFyZW50ID0gYXdhaXQgKHBsYXRmb3JtLmdldE9mZnNldFBhcmVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpKTtcbiAgICBsZXQgY2xpZW50U2l6ZSA9IGFycm93T2Zmc2V0UGFyZW50ID8gYXJyb3dPZmZzZXRQYXJlbnRbY2xpZW50UHJvcF0gOiAwO1xuXG4gICAgLy8gRE9NIHBsYXRmb3JtIGNhbiByZXR1cm4gYHdpbmRvd2AgYXMgdGhlIGBvZmZzZXRQYXJlbnRgLlxuICAgIGlmICghY2xpZW50U2l6ZSB8fCAhKGF3YWl0IChwbGF0Zm9ybS5pc0VsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzRWxlbWVudChhcnJvd09mZnNldFBhcmVudCkpKSkge1xuICAgICAgY2xpZW50U2l6ZSA9IGVsZW1lbnRzLmZsb2F0aW5nW2NsaWVudFByb3BdIHx8IHJlY3RzLmZsb2F0aW5nW2xlbmd0aF07XG4gICAgfVxuICAgIGNvbnN0IGNlbnRlclRvUmVmZXJlbmNlID0gZW5kRGlmZiAvIDIgLSBzdGFydERpZmYgLyAyO1xuXG4gICAgLy8gSWYgdGhlIHBhZGRpbmcgaXMgbGFyZ2UgZW5vdWdoIHRoYXQgaXQgY2F1c2VzIHRoZSBhcnJvdyB0byBubyBsb25nZXIgYmVcbiAgICAvLyBjZW50ZXJlZCwgbW9kaWZ5IHRoZSBwYWRkaW5nIHNvIHRoYXQgaXQgaXMgY2VudGVyZWQuXG4gICAgY29uc3QgbGFyZ2VzdFBvc3NpYmxlUGFkZGluZyA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyIC0gMTtcbiAgICBjb25zdCBtaW5QYWRkaW5nID0gbWluKHBhZGRpbmdPYmplY3RbbWluUHJvcF0sIGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcpO1xuICAgIGNvbnN0IG1heFBhZGRpbmcgPSBtaW4ocGFkZGluZ09iamVjdFttYXhQcm9wXSwgbGFyZ2VzdFBvc3NpYmxlUGFkZGluZyk7XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFycm93IGRvZXNuJ3Qgb3ZlcmZsb3cgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaWYgdGhlIGNlbnRlclxuICAgIC8vIHBvaW50IGlzIG91dHNpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQncyBib3VuZHMuXG4gICAgY29uc3QgbWluJDEgPSBtaW5QYWRkaW5nO1xuICAgIGNvbnN0IG1heCA9IGNsaWVudFNpemUgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAtIG1heFBhZGRpbmc7XG4gICAgY29uc3QgY2VudGVyID0gY2xpZW50U2l6ZSAvIDIgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgKyBjZW50ZXJUb1JlZmVyZW5jZTtcbiAgICBjb25zdCBvZmZzZXQgPSBjbGFtcChtaW4kMSwgY2VudGVyLCBtYXgpO1xuXG4gICAgLy8gSWYgdGhlIHJlZmVyZW5jZSBpcyBzbWFsbCBlbm91Z2ggdGhhdCB0aGUgYXJyb3cncyBwYWRkaW5nIGNhdXNlcyBpdCB0b1xuICAgIC8vIHRvIHBvaW50IHRvIG5vdGhpbmcgZm9yIGFuIGFsaWduZWQgcGxhY2VtZW50LCBhZGp1c3QgdGhlIG9mZnNldCBvZiB0aGVcbiAgICAvLyBmbG9hdGluZyBlbGVtZW50IGl0c2VsZi4gVG8gZW5zdXJlIGBzaGlmdCgpYCBjb250aW51ZXMgdG8gdGFrZSBhY3Rpb24sXG4gICAgLy8gYSBzaW5nbGUgcmVzZXQgaXMgcGVyZm9ybWVkIHdoZW4gdGhpcyBpcyB0cnVlLlxuICAgIGNvbnN0IHNob3VsZEFkZE9mZnNldCA9ICFtaWRkbGV3YXJlRGF0YS5hcnJvdyAmJiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSAhPSBudWxsICYmIGNlbnRlciAhPT0gb2Zmc2V0ICYmIHJlY3RzLnJlZmVyZW5jZVtsZW5ndGhdIC8gMiAtIChjZW50ZXIgPCBtaW4kMSA/IG1pblBhZGRpbmcgOiBtYXhQYWRkaW5nKSAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiA8IDA7XG4gICAgY29uc3QgYWxpZ25tZW50T2Zmc2V0ID0gc2hvdWxkQWRkT2Zmc2V0ID8gY2VudGVyIDwgbWluJDEgPyBjZW50ZXIgLSBtaW4kMSA6IGNlbnRlciAtIG1heCA6IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtheGlzXTogY29vcmRzW2F4aXNdICsgYWxpZ25tZW50T2Zmc2V0LFxuICAgICAgZGF0YToge1xuICAgICAgICBbYXhpc106IG9mZnNldCxcbiAgICAgICAgY2VudGVyT2Zmc2V0OiBjZW50ZXIgLSBvZmZzZXQgLSBhbGlnbm1lbnRPZmZzZXQsXG4gICAgICAgIC4uLihzaG91bGRBZGRPZmZzZXQgJiYge1xuICAgICAgICAgIGFsaWdubWVudE9mZnNldFxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIHJlc2V0OiBzaG91bGRBZGRPZmZzZXRcbiAgICB9O1xuICB9XG59KTtcblxuZnVuY3Rpb24gZ2V0UGxhY2VtZW50TGlzdChhbGlnbm1lbnQsIGF1dG9BbGlnbm1lbnQsIGFsbG93ZWRQbGFjZW1lbnRzKSB7XG4gIGNvbnN0IGFsbG93ZWRQbGFjZW1lbnRzU29ydGVkQnlBbGlnbm1lbnQgPSBhbGlnbm1lbnQgPyBbLi4uYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSA9PT0gYWxpZ25tZW50KSwgLi4uYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSAhPT0gYWxpZ25tZW50KV0gOiBhbGxvd2VkUGxhY2VtZW50cy5maWx0ZXIocGxhY2VtZW50ID0+IGdldFNpZGUocGxhY2VtZW50KSA9PT0gcGxhY2VtZW50KTtcbiAgcmV0dXJuIGFsbG93ZWRQbGFjZW1lbnRzU29ydGVkQnlBbGlnbm1lbnQuZmlsdGVyKHBsYWNlbWVudCA9PiB7XG4gICAgaWYgKGFsaWdubWVudCkge1xuICAgICAgcmV0dXJuIGdldEFsaWdubWVudChwbGFjZW1lbnQpID09PSBhbGlnbm1lbnQgfHwgKGF1dG9BbGlnbm1lbnQgPyBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpICE9PSBwbGFjZW1lbnQgOiBmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcbn1cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGNob29zaW5nIHRoZSBwbGFjZW1lbnRcbiAqIHRoYXQgaGFzIHRoZSBtb3N0IHNwYWNlIGF2YWlsYWJsZSBhdXRvbWF0aWNhbGx5LCB3aXRob3V0IG5lZWRpbmcgdG8gc3BlY2lmeSBhXG4gKiBwcmVmZXJyZWQgcGxhY2VtZW50LiBBbHRlcm5hdGl2ZSB0byBgZmxpcGAuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1BsYWNlbWVudFxuICovXG5jb25zdCBhdXRvUGxhY2VtZW50ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdhdXRvUGxhY2VtZW50JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJGF1dG9QLCBfbWlkZGxld2FyZURhdGEkYXV0b1AyLCBfcGxhY2VtZW50c1RoYXRGaXRPbkU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlY3RzLFxuICAgICAgICBtaWRkbGV3YXJlRGF0YSxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgZWxlbWVudHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY3Jvc3NBeGlzID0gZmFsc2UsXG4gICAgICAgIGFsaWdubWVudCxcbiAgICAgICAgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLFxuICAgICAgICBhdXRvQWxpZ25tZW50ID0gdHJ1ZSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgcGxhY2VtZW50cyQxID0gYWxpZ25tZW50ICE9PSB1bmRlZmluZWQgfHwgYWxsb3dlZFBsYWNlbWVudHMgPT09IHBsYWNlbWVudHMgPyBnZXRQbGFjZW1lbnRMaXN0KGFsaWdubWVudCB8fCBudWxsLCBhdXRvQWxpZ25tZW50LCBhbGxvd2VkUGxhY2VtZW50cykgOiBhbGxvd2VkUGxhY2VtZW50cztcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXggPSAoKF9taWRkbGV3YXJlRGF0YSRhdXRvUCA9IG1pZGRsZXdhcmVEYXRhLmF1dG9QbGFjZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkYXV0b1AuaW5kZXgpIHx8IDA7XG4gICAgICBjb25zdCBjdXJyZW50UGxhY2VtZW50ID0gcGxhY2VtZW50cyQxW2N1cnJlbnRJbmRleF07XG4gICAgICBpZiAoY3VycmVudFBsYWNlbWVudCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsaWdubWVudFNpZGVzID0gZ2V0QWxpZ25tZW50U2lkZXMoY3VycmVudFBsYWNlbWVudCwgcmVjdHMsIGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKSk7XG5cbiAgICAgIC8vIE1ha2UgYGNvbXB1dGVDb29yZHNgIHN0YXJ0IGZyb20gdGhlIHJpZ2h0IHBsYWNlLlxuICAgICAgaWYgKHBsYWNlbWVudCAhPT0gY3VycmVudFBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudHMkMVswXVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnRPdmVyZmxvd3MgPSBbb3ZlcmZsb3dbZ2V0U2lkZShjdXJyZW50UGxhY2VtZW50KV0sIG92ZXJmbG93W2FsaWdubWVudFNpZGVzWzBdXSwgb3ZlcmZsb3dbYWxpZ25tZW50U2lkZXNbMV1dXTtcbiAgICAgIGNvbnN0IGFsbE92ZXJmbG93cyA9IFsuLi4oKChfbWlkZGxld2FyZURhdGEkYXV0b1AyID0gbWlkZGxld2FyZURhdGEuYXV0b1BsYWNlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRhdXRvUDIub3ZlcmZsb3dzKSB8fCBbXSksIHtcbiAgICAgICAgcGxhY2VtZW50OiBjdXJyZW50UGxhY2VtZW50LFxuICAgICAgICBvdmVyZmxvd3M6IGN1cnJlbnRPdmVyZmxvd3NcbiAgICAgIH1dO1xuICAgICAgY29uc3QgbmV4dFBsYWNlbWVudCA9IHBsYWNlbWVudHMkMVtjdXJyZW50SW5kZXggKyAxXTtcblxuICAgICAgLy8gVGhlcmUgYXJlIG1vcmUgcGxhY2VtZW50cyB0byBjaGVjay5cbiAgICAgIGlmIChuZXh0UGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCArIDEsXG4gICAgICAgICAgICBvdmVyZmxvd3M6IGFsbE92ZXJmbG93c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZSA9IGFsbE92ZXJmbG93cy5tYXAoZCA9PiB7XG4gICAgICAgIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChkLnBsYWNlbWVudCk7XG4gICAgICAgIHJldHVybiBbZC5wbGFjZW1lbnQsIGFsaWdubWVudCAmJiBjcm9zc0F4aXMgP1xuICAgICAgICAvLyBDaGVjayBhbG9uZyB0aGUgbWFpbkF4aXMgYW5kIG1haW4gY3Jvc3NBeGlzIHNpZGUuXG4gICAgICAgIGQub3ZlcmZsb3dzLnNsaWNlKDAsIDIpLnJlZHVjZSgoYWNjLCB2KSA9PiBhY2MgKyB2LCAwKSA6XG4gICAgICAgIC8vIENoZWNrIG9ubHkgdGhlIG1haW5BeGlzLlxuICAgICAgICBkLm92ZXJmbG93c1swXSwgZC5vdmVyZmxvd3NdO1xuICAgICAgfSkuc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pO1xuICAgICAgY29uc3QgcGxhY2VtZW50c1RoYXRGaXRPbkVhY2hTaWRlID0gcGxhY2VtZW50c1NvcnRlZEJ5TW9zdFNwYWNlLmZpbHRlcihkID0+IGRbMl0uc2xpY2UoMCxcbiAgICAgIC8vIEFsaWduZWQgcGxhY2VtZW50cyBzaG91bGQgbm90IGNoZWNrIHRoZWlyIG9wcG9zaXRlIGNyb3NzQXhpc1xuICAgICAgLy8gc2lkZS5cbiAgICAgIGdldEFsaWdubWVudChkWzBdKSA/IDIgOiAzKS5ldmVyeSh2ID0+IHYgPD0gMCkpO1xuICAgICAgY29uc3QgcmVzZXRQbGFjZW1lbnQgPSAoKF9wbGFjZW1lbnRzVGhhdEZpdE9uRSA9IHBsYWNlbWVudHNUaGF0Rml0T25FYWNoU2lkZVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wbGFjZW1lbnRzVGhhdEZpdE9uRVswXSkgfHwgcGxhY2VtZW50c1NvcnRlZEJ5TW9zdFNwYWNlWzBdWzBdO1xuICAgICAgaWYgKHJlc2V0UGxhY2VtZW50ICE9PSBwbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBpbmRleDogY3VycmVudEluZGV4ICsgMSxcbiAgICAgICAgICAgIG92ZXJmbG93czogYWxsT3ZlcmZsb3dzXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiByZXNldFBsYWNlbWVudFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBmbGlwcGluZyB0aGUgYHBsYWNlbWVudGBcbiAqIGluIG9yZGVyIHRvIGtlZXAgaXQgaW4gdmlldyB3aGVuIHRoZSBwcmVmZXJyZWQgcGxhY2VtZW50KHMpIHdpbGwgb3ZlcmZsb3cgdGhlXG4gKiBjbGlwcGluZyBib3VuZGFyeS4gQWx0ZXJuYXRpdmUgdG8gYGF1dG9QbGFjZW1lbnRgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2ZsaXBcbiAqL1xuY29uc3QgZmxpcCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnZmxpcCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRhcnJvdywgX21pZGRsZXdhcmVEYXRhJGZsaXA7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBpbml0aWFsUGxhY2VtZW50LFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgZWxlbWVudHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxuICAgICAgICBjcm9zc0F4aXM6IGNoZWNrQ3Jvc3NBeGlzID0gdHJ1ZSxcbiAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzOiBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICAgIGZhbGxiYWNrU3RyYXRlZ3kgPSAnYmVzdEZpdCcsXG4gICAgICAgIGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gPSAnbm9uZScsXG4gICAgICAgIGZsaXBBbGlnbm1lbnQgPSB0cnVlLFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG5cbiAgICAgIC8vIElmIGEgcmVzZXQgYnkgdGhlIGFycm93IHdhcyBjYXVzZWQgZHVlIHRvIGFuIGFsaWdubWVudCBvZmZzZXQgYmVpbmdcbiAgICAgIC8vIGFkZGVkLCB3ZSBzaG91bGQgc2tpcCBhbnkgbG9naWMgbm93IHNpbmNlIGBmbGlwKClgIGhhcyBhbHJlYWR5IGRvbmUgaXRzXG4gICAgICAvLyB3b3JrLlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8yNTQ5I2lzc3VlY29tbWVudC0xNzE5NjAxNjQzXG4gICAgICBpZiAoKF9taWRkbGV3YXJlRGF0YSRhcnJvdyA9IG1pZGRsZXdhcmVEYXRhLmFycm93KSAhPSBudWxsICYmIF9taWRkbGV3YXJlRGF0YSRhcnJvdy5hbGlnbm1lbnRPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGluaXRpYWxTaWRlQXhpcyA9IGdldFNpZGVBeGlzKGluaXRpYWxQbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaXNCYXNlUGxhY2VtZW50ID0gZ2V0U2lkZShpbml0aWFsUGxhY2VtZW50KSA9PT0gaW5pdGlhbFBsYWNlbWVudDtcbiAgICAgIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKTtcbiAgICAgIGNvbnN0IGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwQWxpZ25tZW50ID8gW2dldE9wcG9zaXRlUGxhY2VtZW50KGluaXRpYWxQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkUGxhY2VtZW50cyhpbml0aWFsUGxhY2VtZW50KSk7XG4gICAgICBjb25zdCBoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uID0gZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiAhPT0gJ25vbmUnO1xuICAgICAgaWYgKCFzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgJiYgaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbikge1xuICAgICAgICBmYWxsYmFja1BsYWNlbWVudHMucHVzaCguLi5nZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKGluaXRpYWxQbGFjZW1lbnQsIGZsaXBBbGlnbm1lbnQsIGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24sIHJ0bCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGxhY2VtZW50cyA9IFtpbml0aWFsUGxhY2VtZW50LCAuLi5mYWxsYmFja1BsYWNlbWVudHNdO1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IG92ZXJmbG93cyA9IFtdO1xuICAgICAgbGV0IG92ZXJmbG93c0RhdGEgPSAoKF9taWRkbGV3YXJlRGF0YSRmbGlwID0gbWlkZGxld2FyZURhdGEuZmxpcCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRmbGlwLm92ZXJmbG93cykgfHwgW107XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBvdmVyZmxvd3MucHVzaChvdmVyZmxvd1tzaWRlXSk7XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgY29uc3Qgc2lkZXMgPSBnZXRBbGlnbm1lbnRTaWRlcyhwbGFjZW1lbnQsIHJlY3RzLCBydGwpO1xuICAgICAgICBvdmVyZmxvd3MucHVzaChvdmVyZmxvd1tzaWRlc1swXV0sIG92ZXJmbG93W3NpZGVzWzFdXSk7XG4gICAgICB9XG4gICAgICBvdmVyZmxvd3NEYXRhID0gWy4uLm92ZXJmbG93c0RhdGEsIHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBvdmVyZmxvd3NcbiAgICAgIH1dO1xuXG4gICAgICAvLyBPbmUgb3IgbW9yZSBzaWRlcyBpcyBvdmVyZmxvd2luZy5cbiAgICAgIGlmICghb3ZlcmZsb3dzLmV2ZXJ5KHNpZGUgPT4gc2lkZSA8PSAwKSkge1xuICAgICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJGZsaXAyLCBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXI7XG4gICAgICAgIGNvbnN0IG5leHRJbmRleCA9ICgoKF9taWRkbGV3YXJlRGF0YSRmbGlwMiA9IG1pZGRsZXdhcmVEYXRhLmZsaXApID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkZmxpcDIuaW5kZXgpIHx8IDApICsgMTtcbiAgICAgICAgY29uc3QgbmV4dFBsYWNlbWVudCA9IHBsYWNlbWVudHNbbmV4dEluZGV4XTtcbiAgICAgICAgaWYgKG5leHRQbGFjZW1lbnQpIHtcbiAgICAgICAgICBjb25zdCBpZ25vcmVDcm9zc0F4aXNPdmVyZmxvdyA9IGNoZWNrQ3Jvc3NBeGlzID09PSAnYWxpZ25tZW50JyA/IGluaXRpYWxTaWRlQXhpcyAhPT0gZ2V0U2lkZUF4aXMobmV4dFBsYWNlbWVudCkgOiBmYWxzZTtcbiAgICAgICAgICBpZiAoIWlnbm9yZUNyb3NzQXhpc092ZXJmbG93IHx8XG4gICAgICAgICAgLy8gV2UgbGVhdmUgdGhlIGN1cnJlbnQgbWFpbiBheGlzIG9ubHkgaWYgZXZlcnkgcGxhY2VtZW50IG9uIHRoYXQgYXhpc1xuICAgICAgICAgIC8vIG92ZXJmbG93cyB0aGUgbWFpbiBheGlzLlxuICAgICAgICAgIG92ZXJmbG93c0RhdGEuZXZlcnkoZCA9PiBnZXRTaWRlQXhpcyhkLnBsYWNlbWVudCkgPT09IGluaXRpYWxTaWRlQXhpcyA/IGQub3ZlcmZsb3dzWzBdID4gMCA6IHRydWUpKSB7XG4gICAgICAgICAgICAvLyBUcnkgbmV4dCBwbGFjZW1lbnQgYW5kIHJlLXJ1biB0aGUgbGlmZWN5Y2xlLlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGluZGV4OiBuZXh0SW5kZXgsXG4gICAgICAgICAgICAgICAgb3ZlcmZsb3dzOiBvdmVyZmxvd3NEYXRhXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICAgICAgcGxhY2VtZW50OiBuZXh0UGxhY2VtZW50XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmlyc3QsIGZpbmQgdGhlIGNhbmRpZGF0ZXMgdGhhdCBmaXQgb24gdGhlIG1haW5BeGlzIHNpZGUgb2Ygb3ZlcmZsb3csXG4gICAgICAgIC8vIHRoZW4gZmluZCB0aGUgcGxhY2VtZW50IHRoYXQgZml0cyB0aGUgYmVzdCBvbiB0aGUgbWFpbiBjcm9zc0F4aXMgc2lkZS5cbiAgICAgICAgbGV0IHJlc2V0UGxhY2VtZW50ID0gKF9vdmVyZmxvd3NEYXRhJGZpbHRlciA9IG92ZXJmbG93c0RhdGEuZmlsdGVyKGQgPT4gZC5vdmVyZmxvd3NbMF0gPD0gMCkuc29ydCgoYSwgYikgPT4gYS5vdmVyZmxvd3NbMV0gLSBiLm92ZXJmbG93c1sxXSlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIucGxhY2VtZW50O1xuXG4gICAgICAgIC8vIE90aGVyd2lzZSBmYWxsYmFjay5cbiAgICAgICAgaWYgKCFyZXNldFBsYWNlbWVudCkge1xuICAgICAgICAgIHN3aXRjaCAoZmFsbGJhY2tTdHJhdGVneSkge1xuICAgICAgICAgICAgY2FzZSAnYmVzdEZpdCc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgX292ZXJmbG93c0RhdGEkZmlsdGVyMjtcbiAgICAgICAgICAgICAgICBjb25zdCBwbGFjZW1lbnQgPSAoX292ZXJmbG93c0RhdGEkZmlsdGVyMiA9IG92ZXJmbG93c0RhdGEuZmlsdGVyKGQgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGhhc0ZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNpZGVBeGlzID0gZ2V0U2lkZUF4aXMoZC5wbGFjZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFNpZGVBeGlzID09PSBpbml0aWFsU2lkZUF4aXMgfHxcbiAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgYmlhcyB0byB0aGUgYHlgIHNpZGUgYXhpcyBkdWUgdG8gaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgICAgICAvLyByZWFkaW5nIGRpcmVjdGlvbnMgZmF2b3JpbmcgZ3JlYXRlciB3aWR0aC5cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNpZGVBeGlzID09PSAneSc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KS5tYXAoZCA9PiBbZC5wbGFjZW1lbnQsIGQub3ZlcmZsb3dzLmZpbHRlcihvdmVyZmxvdyA9PiBvdmVyZmxvdyA+IDApLnJlZHVjZSgoYWNjLCBvdmVyZmxvdykgPT4gYWNjICsgb3ZlcmZsb3csIDApXSkuc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX292ZXJmbG93c0RhdGEkZmlsdGVyMlswXTtcbiAgICAgICAgICAgICAgICBpZiAocGxhY2VtZW50KSB7XG4gICAgICAgICAgICAgICAgICByZXNldFBsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2luaXRpYWxQbGFjZW1lbnQnOlxuICAgICAgICAgICAgICByZXNldFBsYWNlbWVudCA9IGluaXRpYWxQbGFjZW1lbnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGxhY2VtZW50ICE9PSByZXNldFBsYWNlbWVudCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgICBwbGFjZW1lbnQ6IHJlc2V0UGxhY2VtZW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0KSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiBvdmVyZmxvdy50b3AgLSByZWN0LmhlaWdodCxcbiAgICByaWdodDogb3ZlcmZsb3cucmlnaHQgLSByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogb3ZlcmZsb3cuYm90dG9tIC0gcmVjdC5oZWlnaHQsXG4gICAgbGVmdDogb3ZlcmZsb3cubGVmdCAtIHJlY3Qud2lkdGhcbiAgfTtcbn1cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xuICByZXR1cm4gc2lkZXMuc29tZShzaWRlID0+IG92ZXJmbG93W3NpZGVdID49IDApO1xufVxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2hpZGUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcmVjdHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc3RyYXRlZ3kgPSAncmVmZXJlbmNlSGlkZGVuJyxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgc3dpdGNoIChzdHJhdGVneSkge1xuICAgICAgICBjYXNlICdyZWZlcmVuY2VIaWRkZW4nOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgICAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zLFxuICAgICAgICAgICAgICBlbGVtZW50Q29udGV4dDogJ3JlZmVyZW5jZSdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0cy5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhpZGRlbk9mZnNldHM6IG9mZnNldHMsXG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlSGlkZGVuOiBpc0FueVNpZGVGdWxseUNsaXBwZWQob2Zmc2V0cylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2VzY2FwZWQnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgICAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zLFxuICAgICAgICAgICAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3RzLmZsb2F0aW5nKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBlc2NhcGVkT2Zmc2V0czogb2Zmc2V0cyxcbiAgICAgICAgICAgICAgICBlc2NhcGVkOiBpc0FueVNpZGVGdWxseUNsaXBwZWQob2Zmc2V0cylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ1JlY3QocmVjdHMpIHtcbiAgY29uc3QgbWluWCA9IG1pbiguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LmxlZnQpKTtcbiAgY29uc3QgbWluWSA9IG1pbiguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LnRvcCkpO1xuICBjb25zdCBtYXhYID0gbWF4KC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QucmlnaHQpKTtcbiAgY29uc3QgbWF4WSA9IG1heCguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LmJvdHRvbSkpO1xuICByZXR1cm4ge1xuICAgIHg6IG1pblgsXG4gICAgeTogbWluWSxcbiAgICB3aWR0aDogbWF4WCAtIG1pblgsXG4gICAgaGVpZ2h0OiBtYXhZIC0gbWluWVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0UmVjdHNCeUxpbmUocmVjdHMpIHtcbiAgY29uc3Qgc29ydGVkUmVjdHMgPSByZWN0cy5zbGljZSgpLnNvcnQoKGEsIGIpID0+IGEueSAtIGIueSk7XG4gIGNvbnN0IGdyb3VwcyA9IFtdO1xuICBsZXQgcHJldlJlY3QgPSBudWxsO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZFJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcmVjdCA9IHNvcnRlZFJlY3RzW2ldO1xuICAgIGlmICghcHJldlJlY3QgfHwgcmVjdC55IC0gcHJldlJlY3QueSA+IHByZXZSZWN0LmhlaWdodCAvIDIpIHtcbiAgICAgIGdyb3Vwcy5wdXNoKFtyZWN0XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdyb3Vwc1tncm91cHMubGVuZ3RoIC0gMV0ucHVzaChyZWN0KTtcbiAgICB9XG4gICAgcHJldlJlY3QgPSByZWN0O1xuICB9XG4gIHJldHVybiBncm91cHMubWFwKHJlY3QgPT4gcmVjdFRvQ2xpZW50UmVjdChnZXRCb3VuZGluZ1JlY3QocmVjdCkpKTtcbn1cbi8qKlxuICogUHJvdmlkZXMgaW1wcm92ZWQgcG9zaXRpb25pbmcgZm9yIGlubGluZSByZWZlcmVuY2UgZWxlbWVudHMgdGhhdCBjYW4gc3BhblxuICogb3ZlciBtdWx0aXBsZSBsaW5lcywgc3VjaCBhcyBoeXBlcmxpbmtzIG9yIHJhbmdlIHNlbGVjdGlvbnMuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaW5saW5lXG4gKi9cbmNvbnN0IGlubGluZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnaW5saW5lJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgZWxlbWVudHMsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgc3RyYXRlZ3lcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIC8vIEEgTW91c2VFdmVudCdzIGNsaWVudHtYLFl9IGNvb3JkcyBjYW4gYmUgdXAgdG8gMiBwaXhlbHMgb2ZmIGFcbiAgICAgIC8vIENsaWVudFJlY3QncyBib3VuZHMsIGRlc3BpdGUgdGhlIGV2ZW50IGxpc3RlbmVyIGJlaW5nIHRyaWdnZXJlZC4gQVxuICAgICAgLy8gcGFkZGluZyBvZiAyIHNlZW1zIHRvIGhhbmRsZSB0aGlzIGlzc3VlLlxuICAgICAgY29uc3Qge1xuICAgICAgICBwYWRkaW5nID0gMixcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IG5hdGl2ZUNsaWVudFJlY3RzID0gQXJyYXkuZnJvbSgoYXdhaXQgKHBsYXRmb3JtLmdldENsaWVudFJlY3RzID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRDbGllbnRSZWN0cyhlbGVtZW50cy5yZWZlcmVuY2UpKSkgfHwgW10pO1xuICAgICAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRSZWN0c0J5TGluZShuYXRpdmVDbGllbnRSZWN0cyk7XG4gICAgICBjb25zdCBmYWxsYmFjayA9IHJlY3RUb0NsaWVudFJlY3QoZ2V0Qm91bmRpbmdSZWN0KG5hdGl2ZUNsaWVudFJlY3RzKSk7XG4gICAgICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgICAgIGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIHR3byByZWN0cyBhbmQgdGhleSBhcmUgZGlzam9pbmVkLlxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID09PSAyICYmIGNsaWVudFJlY3RzWzBdLmxlZnQgPiBjbGllbnRSZWN0c1sxXS5yaWdodCAmJiB4ICE9IG51bGwgJiYgeSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gRmluZCB0aGUgZmlyc3QgcmVjdCBpbiB3aGljaCB0aGUgcG9pbnQgaXMgZnVsbHkgaW5zaWRlLlxuICAgICAgICAgIHJldHVybiBjbGllbnRSZWN0cy5maW5kKHJlY3QgPT4geCA+IHJlY3QubGVmdCAtIHBhZGRpbmdPYmplY3QubGVmdCAmJiB4IDwgcmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHQgJiYgeSA+IHJlY3QudG9wIC0gcGFkZGluZ09iamVjdC50b3AgJiYgeSA8IHJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20pIHx8IGZhbGxiYWNrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlcmUgYXJlIDIgb3IgbW9yZSBjb25uZWN0ZWQgcmVjdHMuXG4gICAgICAgIGlmIChjbGllbnRSZWN0cy5sZW5ndGggPj0gMikge1xuICAgICAgICAgIGlmIChnZXRTaWRlQXhpcyhwbGFjZW1lbnQpID09PSAneScpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0UmVjdCA9IGNsaWVudFJlY3RzWzBdO1xuICAgICAgICAgICAgY29uc3QgbGFzdFJlY3QgPSBjbGllbnRSZWN0c1tjbGllbnRSZWN0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IGlzVG9wID0gZ2V0U2lkZShwbGFjZW1lbnQpID09PSAndG9wJztcbiAgICAgICAgICAgIGNvbnN0IHRvcCA9IGZpcnN0UmVjdC50b3A7XG4gICAgICAgICAgICBjb25zdCBib3R0b20gPSBsYXN0UmVjdC5ib3R0b207XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gaXNUb3AgPyBmaXJzdFJlY3QubGVmdCA6IGxhc3RSZWN0LmxlZnQ7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGlzVG9wID8gZmlyc3RSZWN0LnJpZ2h0IDogbGFzdFJlY3QucmlnaHQ7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgICByaWdodCxcbiAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgeDogbGVmdCxcbiAgICAgICAgICAgICAgeTogdG9wXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpc0xlZnRTaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpID09PSAnbGVmdCc7XG4gICAgICAgICAgY29uc3QgbWF4UmlnaHQgPSBtYXgoLi4uY2xpZW50UmVjdHMubWFwKHJlY3QgPT4gcmVjdC5yaWdodCkpO1xuICAgICAgICAgIGNvbnN0IG1pbkxlZnQgPSBtaW4oLi4uY2xpZW50UmVjdHMubWFwKHJlY3QgPT4gcmVjdC5sZWZ0KSk7XG4gICAgICAgICAgY29uc3QgbWVhc3VyZVJlY3RzID0gY2xpZW50UmVjdHMuZmlsdGVyKHJlY3QgPT4gaXNMZWZ0U2lkZSA/IHJlY3QubGVmdCA9PT0gbWluTGVmdCA6IHJlY3QucmlnaHQgPT09IG1heFJpZ2h0KTtcbiAgICAgICAgICBjb25zdCB0b3AgPSBtZWFzdXJlUmVjdHNbMF0udG9wO1xuICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IG1lYXN1cmVSZWN0c1ttZWFzdXJlUmVjdHMubGVuZ3RoIC0gMV0uYm90dG9tO1xuICAgICAgICAgIGNvbnN0IGxlZnQgPSBtaW5MZWZ0O1xuICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gbWF4UmlnaHQ7XG4gICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICAgICAgY29uc3QgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICBib3R0b20sXG4gICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHg6IGxlZnQsXG4gICAgICAgICAgICB5OiB0b3BcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc2V0UmVjdHMgPSBhd2FpdCBwbGF0Zm9ybS5nZXRFbGVtZW50UmVjdHMoe1xuICAgICAgICByZWZlcmVuY2U6IHtcbiAgICAgICAgICBnZXRCb3VuZGluZ0NsaWVudFJlY3RcbiAgICAgICAgfSxcbiAgICAgICAgZmxvYXRpbmc6IGVsZW1lbnRzLmZsb2F0aW5nLFxuICAgICAgICBzdHJhdGVneVxuICAgICAgfSk7XG4gICAgICBpZiAocmVjdHMucmVmZXJlbmNlLnggIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLnggfHwgcmVjdHMucmVmZXJlbmNlLnkgIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLnkgfHwgcmVjdHMucmVmZXJlbmNlLndpZHRoICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS53aWR0aCB8fCByZWN0cy5yZWZlcmVuY2UuaGVpZ2h0ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcmVjdHM6IHJlc2V0UmVjdHNcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuY29uc3Qgb3JpZ2luU2lkZXMgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2xlZnQnLCAndG9wJ10pO1xuXG4vLyBGb3IgdHlwZSBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSwgdGhlIGBPZmZzZXRPcHRpb25zYCB0eXBlIHdhcyBhbHNvXG4vLyBEZXJpdmFibGUuXG5cbmFzeW5jIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZVRvQ29vcmRzKHN0YXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IHtcbiAgICBwbGFjZW1lbnQsXG4gICAgcGxhdGZvcm0sXG4gICAgZWxlbWVudHNcbiAgfSA9IHN0YXRlO1xuICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICBjb25zdCBpc1ZlcnRpY2FsID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knO1xuICBjb25zdCBtYWluQXhpc011bHRpID0gb3JpZ2luU2lkZXMuaGFzKHNpZGUpID8gLTEgOiAxO1xuICBjb25zdCBjcm9zc0F4aXNNdWx0aSA9IHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxO1xuICBjb25zdCByYXdWYWx1ZSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gIGxldCB7XG4gICAgbWFpbkF4aXMsXG4gICAgY3Jvc3NBeGlzLFxuICAgIGFsaWdubWVudEF4aXNcbiAgfSA9IHR5cGVvZiByYXdWYWx1ZSA9PT0gJ251bWJlcicgPyB7XG4gICAgbWFpbkF4aXM6IHJhd1ZhbHVlLFxuICAgIGNyb3NzQXhpczogMCxcbiAgICBhbGlnbm1lbnRBeGlzOiBudWxsXG4gIH0gOiB7XG4gICAgbWFpbkF4aXM6IHJhd1ZhbHVlLm1haW5BeGlzIHx8IDAsXG4gICAgY3Jvc3NBeGlzOiByYXdWYWx1ZS5jcm9zc0F4aXMgfHwgMCxcbiAgICBhbGlnbm1lbnRBeGlzOiByYXdWYWx1ZS5hbGlnbm1lbnRBeGlzXG4gIH07XG4gIGlmIChhbGlnbm1lbnQgJiYgdHlwZW9mIGFsaWdubWVudEF4aXMgPT09ICdudW1iZXInKSB7XG4gICAgY3Jvc3NBeGlzID0gYWxpZ25tZW50ID09PSAnZW5kJyA/IGFsaWdubWVudEF4aXMgKiAtMSA6IGFsaWdubWVudEF4aXM7XG4gIH1cbiAgcmV0dXJuIGlzVmVydGljYWwgPyB7XG4gICAgeDogY3Jvc3NBeGlzICogY3Jvc3NBeGlzTXVsdGksXG4gICAgeTogbWFpbkF4aXMgKiBtYWluQXhpc011bHRpXG4gIH0gOiB7XG4gICAgeDogbWFpbkF4aXMgKiBtYWluQXhpc011bHRpLFxuICAgIHk6IGNyb3NzQXhpcyAqIGNyb3NzQXhpc011bHRpXG4gIH07XG59XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0gMDtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkb2Zmc2UsIF9taWRkbGV3YXJlRGF0YSRhcnJvdztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBtaWRkbGV3YXJlRGF0YVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3QgZGlmZkNvb3JkcyA9IGF3YWl0IGNvbnZlcnRWYWx1ZVRvQ29vcmRzKHN0YXRlLCBvcHRpb25zKTtcblxuICAgICAgLy8gSWYgdGhlIHBsYWNlbWVudCBpcyB0aGUgc2FtZSBhbmQgdGhlIGFycm93IGNhdXNlZCBhbiBhbGlnbm1lbnQgb2Zmc2V0XG4gICAgICAvLyB0aGVuIHdlIGRvbid0IG5lZWQgdG8gY2hhbmdlIHRoZSBwb3NpdGlvbmluZyBjb29yZGluYXRlcy5cbiAgICAgIGlmIChwbGFjZW1lbnQgPT09ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlLnBsYWNlbWVudCkgJiYgKF9taWRkbGV3YXJlRGF0YSRhcnJvdyA9IG1pZGRsZXdhcmVEYXRhLmFycm93KSAhPSBudWxsICYmIF9taWRkbGV3YXJlRGF0YSRhcnJvdy5hbGlnbm1lbnRPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogeCArIGRpZmZDb29yZHMueCxcbiAgICAgICAgeTogeSArIGRpZmZDb29yZHMueSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIC4uLmRpZmZDb29yZHMsXG4gICAgICAgICAgcGxhY2VtZW50XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzaGlmdCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnRcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxuICAgICAgICBjcm9zc0F4aXM6IGNoZWNrQ3Jvc3NBeGlzID0gZmFsc2UsXG4gICAgICAgIGxpbWl0ZXIgPSB7XG4gICAgICAgICAgZm46IF9yZWYgPT4ge1xuICAgICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgfSA9IF9yZWY7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICB5XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9O1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IGNyb3NzQXhpcyA9IGdldFNpZGVBeGlzKGdldFNpZGUocGxhY2VtZW50KSk7XG4gICAgICBjb25zdCBtYWluQXhpcyA9IGdldE9wcG9zaXRlQXhpcyhjcm9zc0F4aXMpO1xuICAgICAgbGV0IG1haW5BeGlzQ29vcmQgPSBjb29yZHNbbWFpbkF4aXNdO1xuICAgICAgbGV0IGNyb3NzQXhpc0Nvb3JkID0gY29vcmRzW2Nyb3NzQXhpc107XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBjb25zdCBtaW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgICAgICBjb25zdCBtYXhTaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICAgICAgY29uc3QgbWluID0gbWFpbkF4aXNDb29yZCArIG92ZXJmbG93W21pblNpZGVdO1xuICAgICAgICBjb25zdCBtYXggPSBtYWluQXhpc0Nvb3JkIC0gb3ZlcmZsb3dbbWF4U2lkZV07XG4gICAgICAgIG1haW5BeGlzQ29vcmQgPSBjbGFtcChtaW4sIG1haW5BeGlzQ29vcmQsIG1heCk7XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgY29uc3QgbWluU2lkZSA9IGNyb3NzQXhpcyA9PT0gJ3knID8gJ3RvcCcgOiAnbGVmdCc7XG4gICAgICAgIGNvbnN0IG1heFNpZGUgPSBjcm9zc0F4aXMgPT09ICd5JyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICAgICAgY29uc3QgbWluID0gY3Jvc3NBeGlzQ29vcmQgKyBvdmVyZmxvd1ttaW5TaWRlXTtcbiAgICAgICAgY29uc3QgbWF4ID0gY3Jvc3NBeGlzQ29vcmQgLSBvdmVyZmxvd1ttYXhTaWRlXTtcbiAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBjbGFtcChtaW4sIGNyb3NzQXhpc0Nvb3JkLCBtYXgpO1xuICAgICAgfVxuICAgICAgY29uc3QgbGltaXRlZENvb3JkcyA9IGxpbWl0ZXIuZm4oe1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgW21haW5BeGlzXTogbWFpbkF4aXNDb29yZCxcbiAgICAgICAgW2Nyb3NzQXhpc106IGNyb3NzQXhpc0Nvb3JkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmxpbWl0ZWRDb29yZHMsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB4OiBsaW1pdGVkQ29vcmRzLnggLSB4LFxuICAgICAgICAgIHk6IGxpbWl0ZWRDb29yZHMueSAtIHksXG4gICAgICAgICAgZW5hYmxlZDoge1xuICAgICAgICAgICAgW21haW5BeGlzXTogY2hlY2tNYWluQXhpcyxcbiAgICAgICAgICAgIFtjcm9zc0F4aXNdOiBjaGVja0Nyb3NzQXhpc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuLyoqXG4gKiBCdWlsdC1pbiBgbGltaXRlcmAgdGhhdCB3aWxsIHN0b3AgYHNoaWZ0KClgIGF0IGEgY2VydGFpbiBwb2ludC5cbiAqL1xuY29uc3QgbGltaXRTaGlmdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBvcHRpb25zLFxuICAgIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG9mZnNldCA9IDAsXG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWVcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH07XG4gICAgICBjb25zdCBjcm9zc0F4aXMgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgbWFpbkF4aXMgPSBnZXRPcHBvc2l0ZUF4aXMoY3Jvc3NBeGlzKTtcbiAgICAgIGxldCBtYWluQXhpc0Nvb3JkID0gY29vcmRzW21haW5BeGlzXTtcbiAgICAgIGxldCBjcm9zc0F4aXNDb29yZCA9IGNvb3Jkc1tjcm9zc0F4aXNdO1xuICAgICAgY29uc3QgcmF3T2Zmc2V0ID0gZXZhbHVhdGUob2Zmc2V0LCBzdGF0ZSk7XG4gICAgICBjb25zdCBjb21wdXRlZE9mZnNldCA9IHR5cGVvZiByYXdPZmZzZXQgPT09ICdudW1iZXInID8ge1xuICAgICAgICBtYWluQXhpczogcmF3T2Zmc2V0LFxuICAgICAgICBjcm9zc0F4aXM6IDBcbiAgICAgIH0gOiB7XG4gICAgICAgIG1haW5BeGlzOiAwLFxuICAgICAgICBjcm9zc0F4aXM6IDAsXG4gICAgICAgIC4uLnJhd09mZnNldFxuICAgICAgfTtcbiAgICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICAgIGNvbnN0IGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgICAgIGNvbnN0IGxpbWl0TWluID0gcmVjdHMucmVmZXJlbmNlW21haW5BeGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbl0gKyBjb21wdXRlZE9mZnNldC5tYWluQXhpcztcbiAgICAgICAgY29uc3QgbGltaXRNYXggPSByZWN0cy5yZWZlcmVuY2VbbWFpbkF4aXNdICsgcmVjdHMucmVmZXJlbmNlW2xlbl0gLSBjb21wdXRlZE9mZnNldC5tYWluQXhpcztcbiAgICAgICAgaWYgKG1haW5BeGlzQ29vcmQgPCBsaW1pdE1pbikge1xuICAgICAgICAgIG1haW5BeGlzQ29vcmQgPSBsaW1pdE1pbjtcbiAgICAgICAgfSBlbHNlIGlmIChtYWluQXhpc0Nvb3JkID4gbGltaXRNYXgpIHtcbiAgICAgICAgICBtYWluQXhpc0Nvb3JkID0gbGltaXRNYXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaGVja0Nyb3NzQXhpcykge1xuICAgICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJG9mZnNlLCBfbWlkZGxld2FyZURhdGEkb2Zmc2UyO1xuICAgICAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgICAgICBjb25zdCBpc09yaWdpblNpZGUgPSBvcmlnaW5TaWRlcy5oYXMoZ2V0U2lkZShwbGFjZW1lbnQpKTtcbiAgICAgICAgY29uc3QgbGltaXRNaW4gPSByZWN0cy5yZWZlcmVuY2VbY3Jvc3NBeGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbl0gKyAoaXNPcmlnaW5TaWRlID8gKChfbWlkZGxld2FyZURhdGEkb2Zmc2UgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2VbY3Jvc3NBeGlzXSkgfHwgMCA6IDApICsgKGlzT3JpZ2luU2lkZSA/IDAgOiBjb21wdXRlZE9mZnNldC5jcm9zc0F4aXMpO1xuICAgICAgICBjb25zdCBsaW1pdE1heCA9IHJlY3RzLnJlZmVyZW5jZVtjcm9zc0F4aXNdICsgcmVjdHMucmVmZXJlbmNlW2xlbl0gKyAoaXNPcmlnaW5TaWRlID8gMCA6ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlMiA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZTJbY3Jvc3NBeGlzXSkgfHwgMCkgLSAoaXNPcmlnaW5TaWRlID8gY29tcHV0ZWRPZmZzZXQuY3Jvc3NBeGlzIDogMCk7XG4gICAgICAgIGlmIChjcm9zc0F4aXNDb29yZCA8IGxpbWl0TWluKSB7XG4gICAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBsaW1pdE1pbjtcbiAgICAgICAgfSBlbHNlIGlmIChjcm9zc0F4aXNDb29yZCA+IGxpbWl0TWF4KSB7XG4gICAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBsaW1pdE1heDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW21haW5BeGlzXTogbWFpbkF4aXNDb29yZCxcbiAgICAgICAgW2Nyb3NzQXhpc106IGNyb3NzQXhpc0Nvb3JkXG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IOKAlFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc2l6ZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YSwgX3N0YXRlJG1pZGRsZXdhcmVEYXRhMjtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICByZWN0cyxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGFwcGx5ID0gKCkgPT4ge30sXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBpc1lBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knO1xuICAgICAgY29uc3Qge1xuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgICB9ID0gcmVjdHMuZmxvYXRpbmc7XG4gICAgICBsZXQgaGVpZ2h0U2lkZTtcbiAgICAgIGxldCB3aWR0aFNpZGU7XG4gICAgICBpZiAoc2lkZSA9PT0gJ3RvcCcgfHwgc2lkZSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgaGVpZ2h0U2lkZSA9IHNpZGU7XG4gICAgICAgIHdpZHRoU2lkZSA9IGFsaWdubWVudCA9PT0gKChhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSkpID8gJ3N0YXJ0JyA6ICdlbmQnKSA/ICdsZWZ0JyA6ICdyaWdodCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aWR0aFNpZGUgPSBzaWRlO1xuICAgICAgICBoZWlnaHRTaWRlID0gYWxpZ25tZW50ID09PSAnZW5kJyA/ICd0b3AnIDogJ2JvdHRvbSc7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQgPSBoZWlnaHQgLSBvdmVyZmxvdy50b3AgLSBvdmVyZmxvdy5ib3R0b207XG4gICAgICBjb25zdCBtYXhpbXVtQ2xpcHBpbmdXaWR0aCA9IHdpZHRoIC0gb3ZlcmZsb3cubGVmdCAtIG92ZXJmbG93LnJpZ2h0O1xuICAgICAgY29uc3Qgb3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQgPSBtaW4oaGVpZ2h0IC0gb3ZlcmZsb3dbaGVpZ2h0U2lkZV0sIG1heGltdW1DbGlwcGluZ0hlaWdodCk7XG4gICAgICBjb25zdCBvdmVyZmxvd0F2YWlsYWJsZVdpZHRoID0gbWluKHdpZHRoIC0gb3ZlcmZsb3dbd2lkdGhTaWRlXSwgbWF4aW11bUNsaXBwaW5nV2lkdGgpO1xuICAgICAgY29uc3Qgbm9TaGlmdCA9ICFzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdDtcbiAgICAgIGxldCBhdmFpbGFibGVIZWlnaHQgPSBvdmVyZmxvd0F2YWlsYWJsZUhlaWdodDtcbiAgICAgIGxldCBhdmFpbGFibGVXaWR0aCA9IG92ZXJmbG93QXZhaWxhYmxlV2lkdGg7XG4gICAgICBpZiAoKF9zdGF0ZSRtaWRkbGV3YXJlRGF0YSA9IHN0YXRlLm1pZGRsZXdhcmVEYXRhLnNoaWZ0KSAhPSBudWxsICYmIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YS5lbmFibGVkLngpIHtcbiAgICAgICAgYXZhaWxhYmxlV2lkdGggPSBtYXhpbXVtQ2xpcHBpbmdXaWR0aDtcbiAgICAgIH1cbiAgICAgIGlmICgoX3N0YXRlJG1pZGRsZXdhcmVEYXRhMiA9IHN0YXRlLm1pZGRsZXdhcmVEYXRhLnNoaWZ0KSAhPSBudWxsICYmIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTIuZW5hYmxlZC55KSB7XG4gICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IG1heGltdW1DbGlwcGluZ0hlaWdodDtcbiAgICAgIH1cbiAgICAgIGlmIChub1NoaWZ0ICYmICFhbGlnbm1lbnQpIHtcbiAgICAgICAgY29uc3QgeE1pbiA9IG1heChvdmVyZmxvdy5sZWZ0LCAwKTtcbiAgICAgICAgY29uc3QgeE1heCA9IG1heChvdmVyZmxvdy5yaWdodCwgMCk7XG4gICAgICAgIGNvbnN0IHlNaW4gPSBtYXgob3ZlcmZsb3cudG9wLCAwKTtcbiAgICAgICAgY29uc3QgeU1heCA9IG1heChvdmVyZmxvdy5ib3R0b20sIDApO1xuICAgICAgICBpZiAoaXNZQXhpcykge1xuICAgICAgICAgIGF2YWlsYWJsZVdpZHRoID0gd2lkdGggLSAyICogKHhNaW4gIT09IDAgfHwgeE1heCAhPT0gMCA/IHhNaW4gKyB4TWF4IDogbWF4KG92ZXJmbG93LmxlZnQsIG92ZXJmbG93LnJpZ2h0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXZhaWxhYmxlSGVpZ2h0ID0gaGVpZ2h0IC0gMiAqICh5TWluICE9PSAwIHx8IHlNYXggIT09IDAgPyB5TWluICsgeU1heCA6IG1heChvdmVyZmxvdy50b3AsIG92ZXJmbG93LmJvdHRvbSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCBhcHBseSh7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBhdmFpbGFibGVXaWR0aCxcbiAgICAgICAgYXZhaWxhYmxlSGVpZ2h0XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5leHREaW1lbnNpb25zID0gYXdhaXQgcGxhdGZvcm0uZ2V0RGltZW5zaW9ucyhlbGVtZW50cy5mbG9hdGluZyk7XG4gICAgICBpZiAod2lkdGggIT09IG5leHREaW1lbnNpb25zLndpZHRoIHx8IGhlaWdodCAhPT0gbmV4dERpbWVuc2lvbnMuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHJlY3RzOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgc2hpZnQsIHNpemUgfTtcbiIsImZ1bmN0aW9uIGhhc1dpbmRvdygpIHtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xufVxuZnVuY3Rpb24gZ2V0Tm9kZU5hbWUobm9kZSkge1xuICBpZiAoaXNOb2RlKG5vZGUpKSB7XG4gICAgcmV0dXJuIChub2RlLm5vZGVOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIC8vIE1vY2tlZCBub2RlcyBpbiB0ZXN0aW5nIGVudmlyb25tZW50cyBtYXkgbm90IGJlIGluc3RhbmNlcyBvZiBOb2RlLiBCeVxuICAvLyByZXR1cm5pbmcgYCNkb2N1bWVudGAgYW4gaW5maW5pdGUgbG9vcCB3b24ndCBvY2N1ci5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8yMzE3XG4gIHJldHVybiAnI2RvY3VtZW50Jztcbn1cbmZ1bmN0aW9uIGdldFdpbmRvdyhub2RlKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50O1xuICByZXR1cm4gKG5vZGUgPT0gbnVsbCB8fCAoX25vZGUkb3duZXJEb2N1bWVudCA9IG5vZGUub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9ub2RlJG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpIHx8IHdpbmRvdztcbn1cbmZ1bmN0aW9uIGdldERvY3VtZW50RWxlbWVudChub2RlKSB7XG4gIHZhciBfcmVmO1xuICByZXR1cm4gKF9yZWYgPSAoaXNOb2RlKG5vZGUpID8gbm9kZS5vd25lckRvY3VtZW50IDogbm9kZS5kb2N1bWVudCkgfHwgd2luZG93LmRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX3JlZi5kb2N1bWVudEVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc05vZGUodmFsdWUpIHtcbiAgaWYgKCFoYXNXaW5kb3coKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBOb2RlIHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5Ob2RlO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRWxlbWVudCB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQodmFsdWUpIHtcbiAgaWYgKCFoYXNXaW5kb3coKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuSFRNTEVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3QodmFsdWUpIHtcbiAgaWYgKCFoYXNXaW5kb3coKSB8fCB0eXBlb2YgU2hhZG93Um9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgU2hhZG93Um9vdCB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuU2hhZG93Um9vdDtcbn1cbmNvbnN0IGludmFsaWRPdmVyZmxvd0Rpc3BsYXlWYWx1ZXMgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2lubGluZScsICdjb250ZW50cyddKTtcbmZ1bmN0aW9uIGlzT3ZlcmZsb3dFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3Qge1xuICAgIG92ZXJmbG93LFxuICAgIG92ZXJmbG93WCxcbiAgICBvdmVyZmxvd1ksXG4gICAgZGlzcGxheVxuICB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbnxjbGlwLy50ZXN0KG92ZXJmbG93ICsgb3ZlcmZsb3dZICsgb3ZlcmZsb3dYKSAmJiAhaW52YWxpZE92ZXJmbG93RGlzcGxheVZhbHVlcy5oYXMoZGlzcGxheSk7XG59XG5jb25zdCB0YWJsZUVsZW1lbnRzID0gLyojX19QVVJFX18qL25ldyBTZXQoWyd0YWJsZScsICd0ZCcsICd0aCddKTtcbmZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIHRhYmxlRWxlbWVudHMuaGFzKGdldE5vZGVOYW1lKGVsZW1lbnQpKTtcbn1cbmNvbnN0IHRvcExheWVyU2VsZWN0b3JzID0gWyc6cG9wb3Zlci1vcGVuJywgJzptb2RhbCddO1xuZnVuY3Rpb24gaXNUb3BMYXllcihlbGVtZW50KSB7XG4gIHJldHVybiB0b3BMYXllclNlbGVjdG9ycy5zb21lKHNlbGVjdG9yID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQubWF0Y2hlcyhzZWxlY3Rvcik7XG4gICAgfSBjYXRjaCAoX2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xufVxuY29uc3QgdHJhbnNmb3JtUHJvcGVydGllcyA9IFsndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZScsICdzY2FsZScsICdyb3RhdGUnLCAncGVyc3BlY3RpdmUnXTtcbmNvbnN0IHdpbGxDaGFuZ2VWYWx1ZXMgPSBbJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUnLCAnc2NhbGUnLCAncm90YXRlJywgJ3BlcnNwZWN0aXZlJywgJ2ZpbHRlciddO1xuY29uc3QgY29udGFpblZhbHVlcyA9IFsncGFpbnQnLCAnbGF5b3V0JywgJ3N0cmljdCcsICdjb250ZW50J107XG5mdW5jdGlvbiBpc0NvbnRhaW5pbmdCbG9jayhlbGVtZW50T3JDc3MpIHtcbiAgY29uc3Qgd2Via2l0ID0gaXNXZWJLaXQoKTtcbiAgY29uc3QgY3NzID0gaXNFbGVtZW50KGVsZW1lbnRPckNzcykgPyBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnRPckNzcykgOiBlbGVtZW50T3JDc3M7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy10cmFuc2Zvcm1zLTIvI2luZGl2aWR1YWwtdHJhbnNmb3Jtc1xuICByZXR1cm4gdHJhbnNmb3JtUHJvcGVydGllcy5zb21lKHZhbHVlID0+IGNzc1t2YWx1ZV0gPyBjc3NbdmFsdWVdICE9PSAnbm9uZScgOiBmYWxzZSkgfHwgKGNzcy5jb250YWluZXJUeXBlID8gY3NzLmNvbnRhaW5lclR5cGUgIT09ICdub3JtYWwnIDogZmFsc2UpIHx8ICF3ZWJraXQgJiYgKGNzcy5iYWNrZHJvcEZpbHRlciA/IGNzcy5iYWNrZHJvcEZpbHRlciAhPT0gJ25vbmUnIDogZmFsc2UpIHx8ICF3ZWJraXQgJiYgKGNzcy5maWx0ZXIgPyBjc3MuZmlsdGVyICE9PSAnbm9uZScgOiBmYWxzZSkgfHwgd2lsbENoYW5nZVZhbHVlcy5zb21lKHZhbHVlID0+IChjc3Mud2lsbENoYW5nZSB8fCAnJykuaW5jbHVkZXModmFsdWUpKSB8fCBjb250YWluVmFsdWVzLnNvbWUodmFsdWUgPT4gKGNzcy5jb250YWluIHx8ICcnKS5pbmNsdWRlcyh2YWx1ZSkpO1xufVxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgbGV0IGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmICFpc0xhc3RUcmF2ZXJzYWJsZU5vZGUoY3VycmVudE5vZGUpKSB7XG4gICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSBpZiAoaXNUb3BMYXllcihjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gaXNXZWJLaXQoKSB7XG4gIGlmICh0eXBlb2YgQ1NTID09PSAndW5kZWZpbmVkJyB8fCAhQ1NTLnN1cHBvcnRzKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBDU1Muc3VwcG9ydHMoJy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyJywgJ25vbmUnKTtcbn1cbmNvbnN0IGxhc3RUcmF2ZXJzYWJsZU5vZGVOYW1lcyA9IC8qI19fUFVSRV9fKi9uZXcgU2V0KFsnaHRtbCcsICdib2R5JywgJyNkb2N1bWVudCddKTtcbmZ1bmN0aW9uIGlzTGFzdFRyYXZlcnNhYmxlTm9kZShub2RlKSB7XG4gIHJldHVybiBsYXN0VHJhdmVyc2FibGVOb2RlTmFtZXMuaGFzKGdldE5vZGVOYW1lKG5vZGUpKTtcbn1cbmZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59XG5mdW5jdGlvbiBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpIHtcbiAgaWYgKGlzRWxlbWVudChlbGVtZW50KSkge1xuICAgIHJldHVybiB7XG4gICAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsWCxcbiAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsWVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShub2RlKSB7XG4gIGlmIChnZXROb2RlTmFtZShub2RlKSA9PT0gJ2h0bWwnKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID1cbiAgLy8gU3RlcCBpbnRvIHRoZSBzaGFkb3cgRE9NIG9mIHRoZSBwYXJlbnQgb2YgYSBzbG90dGVkIG5vZGUuXG4gIG5vZGUuYXNzaWduZWRTbG90IHx8XG4gIC8vIERPTSBFbGVtZW50IGRldGVjdGVkLlxuICBub2RlLnBhcmVudE5vZGUgfHxcbiAgLy8gU2hhZG93Um9vdCBkZXRlY3RlZC5cbiAgaXNTaGFkb3dSb290KG5vZGUpICYmIG5vZGUuaG9zdCB8fFxuICAvLyBGYWxsYmFjay5cbiAgZ2V0RG9jdW1lbnRFbGVtZW50KG5vZGUpO1xuICByZXR1cm4gaXNTaGFkb3dSb290KHJlc3VsdCkgPyByZXN1bHQuaG9zdCA6IHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKG5vZGUpIHtcbiAgY29uc3QgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUobm9kZSk7XG4gIGlmIChpc0xhc3RUcmF2ZXJzYWJsZU5vZGUocGFyZW50Tm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZS5vd25lckRvY3VtZW50ID8gbm9kZS5vd25lckRvY3VtZW50LmJvZHkgOiBub2RlLmJvZHk7XG4gIH1cbiAgaWYgKGlzSFRNTEVsZW1lbnQocGFyZW50Tm9kZSkgJiYgaXNPdmVyZmxvd0VsZW1lbnQocGFyZW50Tm9kZSkpIHtcbiAgICByZXR1cm4gcGFyZW50Tm9kZTtcbiAgfVxuICByZXR1cm4gZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3IocGFyZW50Tm9kZSk7XG59XG5mdW5jdGlvbiBnZXRPdmVyZmxvd0FuY2VzdG9ycyhub2RlLCBsaXN0LCB0cmF2ZXJzZUlmcmFtZXMpIHtcbiAgdmFyIF9ub2RlJG93bmVyRG9jdW1lbnQyO1xuICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7XG4gICAgbGlzdCA9IFtdO1xuICB9XG4gIGlmICh0cmF2ZXJzZUlmcmFtZXMgPT09IHZvaWQgMCkge1xuICAgIHRyYXZlcnNlSWZyYW1lcyA9IHRydWU7XG4gIH1cbiAgY29uc3Qgc2Nyb2xsYWJsZUFuY2VzdG9yID0gZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3Iobm9kZSk7XG4gIGNvbnN0IGlzQm9keSA9IHNjcm9sbGFibGVBbmNlc3RvciA9PT0gKChfbm9kZSRvd25lckRvY3VtZW50MiA9IG5vZGUub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9ub2RlJG93bmVyRG9jdW1lbnQyLmJvZHkpO1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsYWJsZUFuY2VzdG9yKTtcbiAgaWYgKGlzQm9keSkge1xuICAgIGNvbnN0IGZyYW1lRWxlbWVudCA9IGdldEZyYW1lRWxlbWVudCh3aW4pO1xuICAgIHJldHVybiBsaXN0LmNvbmNhdCh3aW4sIHdpbi52aXN1YWxWaWV3cG9ydCB8fCBbXSwgaXNPdmVyZmxvd0VsZW1lbnQoc2Nyb2xsYWJsZUFuY2VzdG9yKSA/IHNjcm9sbGFibGVBbmNlc3RvciA6IFtdLCBmcmFtZUVsZW1lbnQgJiYgdHJhdmVyc2VJZnJhbWVzID8gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZnJhbWVFbGVtZW50KSA6IFtdKTtcbiAgfVxuICByZXR1cm4gbGlzdC5jb25jYXQoc2Nyb2xsYWJsZUFuY2VzdG9yLCBnZXRPdmVyZmxvd0FuY2VzdG9ycyhzY3JvbGxhYmxlQW5jZXN0b3IsIFtdLCB0cmF2ZXJzZUlmcmFtZXMpKTtcbn1cbmZ1bmN0aW9uIGdldEZyYW1lRWxlbWVudCh3aW4pIHtcbiAgcmV0dXJuIHdpbi5wYXJlbnQgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHdpbi5wYXJlbnQpID8gd2luLmZyYW1lRWxlbWVudCA6IG51bGw7XG59XG5cbmV4cG9ydCB7IGdldENvbXB1dGVkU3R5bGUsIGdldENvbnRhaW5pbmdCbG9jaywgZ2V0RG9jdW1lbnRFbGVtZW50LCBnZXRGcmFtZUVsZW1lbnQsIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yLCBnZXROb2RlTmFtZSwgZ2V0Tm9kZVNjcm9sbCwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMsIGdldFBhcmVudE5vZGUsIGdldFdpbmRvdywgaXNDb250YWluaW5nQmxvY2ssIGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc05vZGUsIGlzT3ZlcmZsb3dFbGVtZW50LCBpc1NoYWRvd1Jvb3QsIGlzVGFibGVFbGVtZW50LCBpc1RvcExheWVyLCBpc1dlYktpdCB9O1xuIiwiaW1wb3J0IHsgcmVjdFRvQ2xpZW50UmVjdCwgYXJyb3cgYXMgYXJyb3ckMSwgYXV0b1BsYWNlbWVudCBhcyBhdXRvUGxhY2VtZW50JDEsIGRldGVjdE92ZXJmbG93IGFzIGRldGVjdE92ZXJmbG93JDEsIGZsaXAgYXMgZmxpcCQxLCBoaWRlIGFzIGhpZGUkMSwgaW5saW5lIGFzIGlubGluZSQxLCBsaW1pdFNoaWZ0IGFzIGxpbWl0U2hpZnQkMSwgb2Zmc2V0IGFzIG9mZnNldCQxLCBzaGlmdCBhcyBzaGlmdCQxLCBzaXplIGFzIHNpemUkMSwgY29tcHV0ZVBvc2l0aW9uIGFzIGNvbXB1dGVQb3NpdGlvbiQxIH0gZnJvbSAnQGZsb2F0aW5nLXVpL2NvcmUnO1xuaW1wb3J0IHsgcm91bmQsIGNyZWF0ZUNvb3JkcywgbWF4LCBtaW4sIGZsb29yIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcbmltcG9ydCB7IGdldENvbXB1dGVkU3R5bGUsIGlzSFRNTEVsZW1lbnQsIGlzRWxlbWVudCwgZ2V0V2luZG93LCBpc1dlYktpdCwgZ2V0RnJhbWVFbGVtZW50LCBnZXROb2RlU2Nyb2xsLCBnZXREb2N1bWVudEVsZW1lbnQsIGlzVG9wTGF5ZXIsIGdldE5vZGVOYW1lLCBpc092ZXJmbG93RWxlbWVudCwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMsIGdldFBhcmVudE5vZGUsIGlzTGFzdFRyYXZlcnNhYmxlTm9kZSwgaXNDb250YWluaW5nQmxvY2ssIGlzVGFibGVFbGVtZW50LCBnZXRDb250YWluaW5nQmxvY2sgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcbmV4cG9ydCB7IGdldE92ZXJmbG93QW5jZXN0b3JzIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzL2RvbSc7XG5cbmZ1bmN0aW9uIGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCkge1xuICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAvLyBJbiB0ZXN0aW5nIGVudmlyb25tZW50cywgdGhlIGB3aWR0aGAgYW5kIGBoZWlnaHRgIHByb3BlcnRpZXMgYXJlIGVtcHR5XG4gIC8vIHN0cmluZ3MgZm9yIFNWRyBlbGVtZW50cywgcmV0dXJuaW5nIE5hTi4gRmFsbGJhY2sgdG8gYDBgIGluIHRoaXMgY2FzZS5cbiAgbGV0IHdpZHRoID0gcGFyc2VGbG9hdChjc3Mud2lkdGgpIHx8IDA7XG4gIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGNzcy5oZWlnaHQpIHx8IDA7XG4gIGNvbnN0IGhhc09mZnNldCA9IGlzSFRNTEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IG9mZnNldFdpZHRoID0gaGFzT2Zmc2V0ID8gZWxlbWVudC5vZmZzZXRXaWR0aCA6IHdpZHRoO1xuICBjb25zdCBvZmZzZXRIZWlnaHQgPSBoYXNPZmZzZXQgPyBlbGVtZW50Lm9mZnNldEhlaWdodCA6IGhlaWdodDtcbiAgY29uc3Qgc2hvdWxkRmFsbGJhY2sgPSByb3VuZCh3aWR0aCkgIT09IG9mZnNldFdpZHRoIHx8IHJvdW5kKGhlaWdodCkgIT09IG9mZnNldEhlaWdodDtcbiAgaWYgKHNob3VsZEZhbGxiYWNrKSB7XG4gICAgd2lkdGggPSBvZmZzZXRXaWR0aDtcbiAgICBoZWlnaHQgPSBvZmZzZXRIZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgJDogc2hvdWxkRmFsbGJhY2tcbiAgfTtcbn1cblxuZnVuY3Rpb24gdW53cmFwRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiAhaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudC5jb250ZXh0RWxlbWVudCA6IGVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldFNjYWxlKGVsZW1lbnQpIHtcbiAgY29uc3QgZG9tRWxlbWVudCA9IHVud3JhcEVsZW1lbnQoZWxlbWVudCk7XG4gIGlmICghaXNIVE1MRWxlbWVudChkb21FbGVtZW50KSkge1xuICAgIHJldHVybiBjcmVhdGVDb29yZHMoMSk7XG4gIH1cbiAgY29uc3QgcmVjdCA9IGRvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgJFxuICB9ID0gZ2V0Q3NzRGltZW5zaW9ucyhkb21FbGVtZW50KTtcbiAgbGV0IHggPSAoJCA/IHJvdW5kKHJlY3Qud2lkdGgpIDogcmVjdC53aWR0aCkgLyB3aWR0aDtcbiAgbGV0IHkgPSAoJCA/IHJvdW5kKHJlY3QuaGVpZ2h0KSA6IHJlY3QuaGVpZ2h0KSAvIGhlaWdodDtcblxuICAvLyAwLCBOYU4sIG9yIEluZmluaXR5IHNob3VsZCBhbHdheXMgZmFsbGJhY2sgdG8gMS5cblxuICBpZiAoIXggfHwgIU51bWJlci5pc0Zpbml0ZSh4KSkge1xuICAgIHggPSAxO1xuICB9XG4gIGlmICgheSB8fCAhTnVtYmVyLmlzRmluaXRlKHkpKSB7XG4gICAgeSA9IDE7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuY29uc3Qgbm9PZmZzZXRzID0gLyojX19QVVJFX18qL2NyZWF0ZUNvb3JkcygwKTtcbmZ1bmN0aW9uIGdldFZpc3VhbE9mZnNldHMoZWxlbWVudCkge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGlmICghaXNXZWJLaXQoKSB8fCAhd2luLnZpc3VhbFZpZXdwb3J0KSB7XG4gICAgcmV0dXJuIG5vT2Zmc2V0cztcbiAgfVxuICByZXR1cm4ge1xuICAgIHg6IHdpbi52aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0LFxuICAgIHk6IHdpbi52aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3BcbiAgfTtcbn1cbmZ1bmN0aW9uIHNob3VsZEFkZFZpc3VhbE9mZnNldHMoZWxlbWVudCwgaXNGaXhlZCwgZmxvYXRpbmdPZmZzZXRQYXJlbnQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuICBpZiAoIWZsb2F0aW5nT2Zmc2V0UGFyZW50IHx8IGlzRml4ZWQgJiYgZmxvYXRpbmdPZmZzZXRQYXJlbnQgIT09IGdldFdpbmRvdyhlbGVtZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gaXNGaXhlZDtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGluY2x1ZGVTY2FsZSwgaXNGaXhlZFN0cmF0ZWd5LCBvZmZzZXRQYXJlbnQpIHtcbiAgaWYgKGluY2x1ZGVTY2FsZSA9PT0gdm9pZCAwKSB7XG4gICAgaW5jbHVkZVNjYWxlID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzRml4ZWRTdHJhdGVneSA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZFN0cmF0ZWd5ID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgY2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IGRvbUVsZW1lbnQgPSB1bndyYXBFbGVtZW50KGVsZW1lbnQpO1xuICBsZXQgc2NhbGUgPSBjcmVhdGVDb29yZHMoMSk7XG4gIGlmIChpbmNsdWRlU2NhbGUpIHtcbiAgICBpZiAob2Zmc2V0UGFyZW50KSB7XG4gICAgICBpZiAoaXNFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgICAgc2NhbGUgPSBnZXRTY2FsZShvZmZzZXRQYXJlbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzY2FsZSA9IGdldFNjYWxlKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuICBjb25zdCB2aXN1YWxPZmZzZXRzID0gc2hvdWxkQWRkVmlzdWFsT2Zmc2V0cyhkb21FbGVtZW50LCBpc0ZpeGVkU3RyYXRlZ3ksIG9mZnNldFBhcmVudCkgPyBnZXRWaXN1YWxPZmZzZXRzKGRvbUVsZW1lbnQpIDogY3JlYXRlQ29vcmRzKDApO1xuICBsZXQgeCA9IChjbGllbnRSZWN0LmxlZnQgKyB2aXN1YWxPZmZzZXRzLngpIC8gc2NhbGUueDtcbiAgbGV0IHkgPSAoY2xpZW50UmVjdC50b3AgKyB2aXN1YWxPZmZzZXRzLnkpIC8gc2NhbGUueTtcbiAgbGV0IHdpZHRoID0gY2xpZW50UmVjdC53aWR0aCAvIHNjYWxlLng7XG4gIGxldCBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodCAvIHNjYWxlLnk7XG4gIGlmIChkb21FbGVtZW50KSB7XG4gICAgY29uc3Qgd2luID0gZ2V0V2luZG93KGRvbUVsZW1lbnQpO1xuICAgIGNvbnN0IG9mZnNldFdpbiA9IG9mZnNldFBhcmVudCAmJiBpc0VsZW1lbnQob2Zmc2V0UGFyZW50KSA/IGdldFdpbmRvdyhvZmZzZXRQYXJlbnQpIDogb2Zmc2V0UGFyZW50O1xuICAgIGxldCBjdXJyZW50V2luID0gd2luO1xuICAgIGxldCBjdXJyZW50SUZyYW1lID0gZ2V0RnJhbWVFbGVtZW50KGN1cnJlbnRXaW4pO1xuICAgIHdoaWxlIChjdXJyZW50SUZyYW1lICYmIG9mZnNldFBhcmVudCAmJiBvZmZzZXRXaW4gIT09IGN1cnJlbnRXaW4pIHtcbiAgICAgIGNvbnN0IGlmcmFtZVNjYWxlID0gZ2V0U2NhbGUoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBpZnJhbWVSZWN0ID0gY3VycmVudElGcmFtZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBsZWZ0ID0gaWZyYW1lUmVjdC5sZWZ0ICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50TGVmdCArIHBhcnNlRmxvYXQoY3NzLnBhZGRpbmdMZWZ0KSkgKiBpZnJhbWVTY2FsZS54O1xuICAgICAgY29uc3QgdG9wID0gaWZyYW1lUmVjdC50b3AgKyAoY3VycmVudElGcmFtZS5jbGllbnRUb3AgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nVG9wKSkgKiBpZnJhbWVTY2FsZS55O1xuICAgICAgeCAqPSBpZnJhbWVTY2FsZS54O1xuICAgICAgeSAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgd2lkdGggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIGhlaWdodCAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgeCArPSBsZWZ0O1xuICAgICAgeSArPSB0b3A7XG4gICAgICBjdXJyZW50V2luID0gZ2V0V2luZG93KGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3Qoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfSk7XG59XG5cbi8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbi8vIGluY29ycmVjdCBmb3IgUlRMLlxuZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50LCByZWN0KSB7XG4gIGNvbnN0IGxlZnRTY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG4gIGlmICghcmVjdCkge1xuICAgIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgbGVmdFNjcm9sbDtcbiAgfVxuICByZXR1cm4gcmVjdC5sZWZ0ICsgbGVmdFNjcm9sbDtcbn1cblxuZnVuY3Rpb24gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCwgaWdub3JlU2Nyb2xsYmFyWCkge1xuICBpZiAoaWdub3JlU2Nyb2xsYmFyWCA9PT0gdm9pZCAwKSB7XG4gICAgaWdub3JlU2Nyb2xsYmFyWCA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGh0bWxSZWN0ID0gZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB4ID0gaHRtbFJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gKGlnbm9yZVNjcm9sbGJhclggPyAwIDpcbiAgLy8gUlRMIDxib2R5PiBzY3JvbGxiYXIuXG4gIGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50LCBodG1sUmVjdCkpO1xuICBjb25zdCB5ID0gaHRtbFJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcDtcbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QoX3JlZikge1xuICBsZXQge1xuICAgIGVsZW1lbnRzLFxuICAgIHJlY3QsXG4gICAgb2Zmc2V0UGFyZW50LFxuICAgIHN0cmF0ZWd5XG4gIH0gPSBfcmVmO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCB0b3BMYXllciA9IGVsZW1lbnRzID8gaXNUb3BMYXllcihlbGVtZW50cy5mbG9hdGluZykgOiBmYWxzZTtcbiAgaWYgKG9mZnNldFBhcmVudCA9PT0gZG9jdW1lbnRFbGVtZW50IHx8IHRvcExheWVyICYmIGlzRml4ZWQpIHtcbiAgICByZXR1cm4gcmVjdDtcbiAgfVxuICBsZXQgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIGxldCBzY2FsZSA9IGNyZWF0ZUNvb3JkcygxKTtcbiAgY29uc3Qgb2Zmc2V0cyA9IGNyZWF0ZUNvb3JkcygwKTtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgaWYgKGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgY29uc3Qgb2Zmc2V0UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQpO1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ID0gb2Zmc2V0UmVjdC54ICsgb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgPSBvZmZzZXRSZWN0LnkgKyBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH1cbiAgfVxuICBjb25zdCBodG1sT2Zmc2V0ID0gZG9jdW1lbnRFbGVtZW50ICYmICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCA/IGdldEhUTUxPZmZzZXQoZG9jdW1lbnRFbGVtZW50LCBzY3JvbGwsIHRydWUpIDogY3JlYXRlQ29vcmRzKDApO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiByZWN0LndpZHRoICogc2NhbGUueCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0ICogc2NhbGUueSxcbiAgICB4OiByZWN0LnggKiBzY2FsZS54IC0gc2Nyb2xsLnNjcm9sbExlZnQgKiBzY2FsZS54ICsgb2Zmc2V0cy54ICsgaHRtbE9mZnNldC54LFxuICAgIHk6IHJlY3QueSAqIHNjYWxlLnkgLSBzY3JvbGwuc2Nyb2xsVG9wICogc2NhbGUueSArIG9mZnNldHMueSArIGh0bWxPZmZzZXQueVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0cyhlbGVtZW50KSB7XG4gIHJldHVybiBBcnJheS5mcm9tKGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKSk7XG59XG5cbi8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGUuXG5mdW5jdGlvbiBnZXREb2N1bWVudFJlY3QoZWxlbWVudCkge1xuICBjb25zdCBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpO1xuICBjb25zdCBib2R5ID0gZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gIGNvbnN0IHdpZHRoID0gbWF4KGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGJvZHkuc2Nyb2xsV2lkdGgsIGJvZHkuY2xpZW50V2lkdGgpO1xuICBjb25zdCBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5LnNjcm9sbEhlaWdodCwgYm9keS5jbGllbnRIZWlnaHQpO1xuICBsZXQgeCA9IC1zY3JvbGwuc2Nyb2xsTGVmdCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCk7XG4gIGNvbnN0IHkgPSAtc2Nyb2xsLnNjcm9sbFRvcDtcbiAgaWYgKGdldENvbXB1dGVkU3R5bGUoYm9keSkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkuY2xpZW50V2lkdGgpIC0gd2lkdGg7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuICBsZXQgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICBsZXQgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIGxldCB4ID0gMDtcbiAgbGV0IHkgPSAwO1xuICBpZiAodmlzdWFsVmlld3BvcnQpIHtcbiAgICB3aWR0aCA9IHZpc3VhbFZpZXdwb3J0LndpZHRoO1xuICAgIGhlaWdodCA9IHZpc3VhbFZpZXdwb3J0LmhlaWdodDtcbiAgICBjb25zdCB2aXN1YWxWaWV3cG9ydEJhc2VkID0gaXNXZWJLaXQoKTtcbiAgICBpZiAoIXZpc3VhbFZpZXdwb3J0QmFzZWQgfHwgdmlzdWFsVmlld3BvcnRCYXNlZCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuY29uc3QgYWJzb2x1dGVPckZpeGVkID0gLyojX19QVVJFX18qL25ldyBTZXQoWydhYnNvbHV0ZScsICdmaXhlZCddKTtcbi8vIFJldHVybnMgdGhlIGlubmVyIGNsaWVudCByZWN0LCBzdWJ0cmFjdGluZyBzY3JvbGxiYXJzIGlmIHByZXNlbnQuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICBjb25zdCBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHRydWUsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgY29uc3QgdG9wID0gY2xpZW50UmVjdC50b3AgKyBlbGVtZW50LmNsaWVudFRvcDtcbiAgY29uc3QgbGVmdCA9IGNsaWVudFJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgY29uc3Qgc2NhbGUgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0U2NhbGUoZWxlbWVudCkgOiBjcmVhdGVDb29yZHMoMSk7XG4gIGNvbnN0IHdpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aCAqIHNjYWxlLng7XG4gIGNvbnN0IGhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0ICogc2NhbGUueTtcbiAgY29uc3QgeCA9IGxlZnQgKiBzY2FsZS54O1xuICBjb25zdCB5ID0gdG9wICogc2NhbGUueTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpIHtcbiAgbGV0IHJlY3Q7XG4gIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAndmlld3BvcnQnKSB7XG4gICAgcmVjdCA9IGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSk7XG4gIH0gZWxzZSBpZiAoY2xpcHBpbmdBbmNlc3RvciA9PT0gJ2RvY3VtZW50Jykge1xuICAgIHJlY3QgPSBnZXREb2N1bWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKTtcbiAgfSBlbHNlIGlmIChpc0VsZW1lbnQoY2xpcHBpbmdBbmNlc3RvcikpIHtcbiAgICByZWN0ID0gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHZpc3VhbE9mZnNldHMgPSBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpO1xuICAgIHJlY3QgPSB7XG4gICAgICB4OiBjbGlwcGluZ0FuY2VzdG9yLnggLSB2aXN1YWxPZmZzZXRzLngsXG4gICAgICB5OiBjbGlwcGluZ0FuY2VzdG9yLnkgLSB2aXN1YWxPZmZzZXRzLnksXG4gICAgICB3aWR0aDogY2xpcHBpbmdBbmNlc3Rvci53aWR0aCxcbiAgICAgIGhlaWdodDogY2xpcHBpbmdBbmNlc3Rvci5oZWlnaHRcbiAgICB9O1xuICB9XG4gIHJldHVybiByZWN0VG9DbGllbnRSZWN0KHJlY3QpO1xufVxuZnVuY3Rpb24gaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKGVsZW1lbnQsIHN0b3BOb2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICBpZiAocGFyZW50Tm9kZSA9PT0gc3RvcE5vZGUgfHwgIWlzRWxlbWVudChwYXJlbnROb2RlKSB8fCBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUocGFyZW50Tm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUocGFyZW50Tm9kZSkucG9zaXRpb24gPT09ICdmaXhlZCcgfHwgaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKHBhcmVudE5vZGUsIHN0b3BOb2RlKTtcbn1cblxuLy8gQSBcImNsaXBwaW5nIGFuY2VzdG9yXCIgaXMgYW4gYG92ZXJmbG93YCBlbGVtZW50IHdpdGggdGhlIGNoYXJhY3RlcmlzdGljIG9mXG4vLyBjbGlwcGluZyAob3IgaGlkaW5nKSBjaGlsZCBlbGVtZW50cy4gVGhpcyByZXR1cm5zIGFsbCBjbGlwcGluZyBhbmNlc3RvcnNcbi8vIG9mIHRoZSBnaXZlbiBlbGVtZW50IHVwIHRoZSB0cmVlLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzKGVsZW1lbnQsIGNhY2hlKSB7XG4gIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGNhY2hlLmdldChlbGVtZW50KTtcbiAgaWYgKGNhY2hlZFJlc3VsdCkge1xuICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gIH1cbiAgbGV0IHJlc3VsdCA9IGdldE92ZXJmbG93QW5jZXN0b3JzKGVsZW1lbnQsIFtdLCBmYWxzZSkuZmlsdGVyKGVsID0+IGlzRWxlbWVudChlbCkgJiYgZ2V0Tm9kZU5hbWUoZWwpICE9PSAnYm9keScpO1xuICBsZXQgY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgPSBudWxsO1xuICBjb25zdCBlbGVtZW50SXNGaXhlZCA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCc7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgd2hpbGUgKGlzRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7XG4gICAgY29uc3QgY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgPSBpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSk7XG4gICAgaWYgKCFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBjb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHNob3VsZERyb3BDdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmICFjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA6ICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBjb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAnc3RhdGljJyAmJiAhIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlICYmIGFic29sdXRlT3JGaXhlZC5oYXMoY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUucG9zaXRpb24pIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgaGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yKGVsZW1lbnQsIGN1cnJlbnROb2RlKTtcbiAgICBpZiAoc2hvdWxkRHJvcEN1cnJlbnROb2RlKSB7XG4gICAgICAvLyBEcm9wIG5vbi1jb250YWluaW5nIGJsb2Nrcy5cbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoYW5jZXN0b3IgPT4gYW5jZXN0b3IgIT09IGN1cnJlbnROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVjb3JkIGxhc3QgY29udGFpbmluZyBibG9jayBmb3IgbmV4dCBpdGVyYXRpb24uXG4gICAgICBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IGNvbXB1dGVkU3R5bGU7XG4gICAgfVxuICAgIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShjdXJyZW50Tm9kZSk7XG4gIH1cbiAgY2FjaGUuc2V0KGVsZW1lbnQsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIEdldHMgdGhlIG1heGltdW0gYXJlYSB0aGF0IHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gZHVlIHRvIGFueSBudW1iZXIgb2Zcbi8vIGNsaXBwaW5nIGFuY2VzdG9ycy5cbmZ1bmN0aW9uIGdldENsaXBwaW5nUmVjdChfcmVmKSB7XG4gIGxldCB7XG4gICAgZWxlbWVudCxcbiAgICBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnksXG4gICAgc3RyYXRlZ3lcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGVsZW1lbnRDbGlwcGluZ0FuY2VzdG9ycyA9IGJvdW5kYXJ5ID09PSAnY2xpcHBpbmdBbmNlc3RvcnMnID8gaXNUb3BMYXllcihlbGVtZW50KSA/IFtdIDogZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzKGVsZW1lbnQsIHRoaXMuX2MpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgY29uc3QgY2xpcHBpbmdBbmNlc3RvcnMgPSBbLi4uZWxlbWVudENsaXBwaW5nQW5jZXN0b3JzLCByb290Qm91bmRhcnldO1xuICBjb25zdCBmaXJzdENsaXBwaW5nQW5jZXN0b3IgPSBjbGlwcGluZ0FuY2VzdG9yc1swXTtcbiAgY29uc3QgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdBbmNlc3RvcnMucmVkdWNlKChhY2NSZWN0LCBjbGlwcGluZ0FuY2VzdG9yKSA9PiB7XG4gICAgY29uc3QgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGZpcnN0Q2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpKTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQsXG4gICAgaGVpZ2h0OiBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcCxcbiAgICB4OiBjbGlwcGluZ1JlY3QubGVmdCxcbiAgICB5OiBjbGlwcGluZ1JlY3QudG9wXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERpbWVuc2lvbnMoZWxlbWVudCkge1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH0gPSBnZXRDc3NEaW1lbnNpb25zKGVsZW1lbnQpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudChlbGVtZW50LCBvZmZzZXRQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgY29uc3QgaXNGaXhlZCA9IHN0cmF0ZWd5ID09PSAnZml4ZWQnO1xuICBjb25zdCByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHRydWUsIGlzRml4ZWQsIG9mZnNldFBhcmVudCk7XG4gIGxldCBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgY29uc3Qgb2Zmc2V0cyA9IGNyZWF0ZUNvb3JkcygwKTtcblxuICAvLyBJZiB0aGUgPGJvZHk+IHNjcm9sbGJhciBhcHBlYXJzIG9uIHRoZSBsZWZ0IChlLmcuIFJUTCBzeXN0ZW1zKS4gVXNlXG4gIC8vIEZpcmVmb3ggd2l0aCBsYXlvdXQuc2Nyb2xsYmFyLnNpZGUgPSAzIGluIGFib3V0OmNvbmZpZyB0byB0ZXN0IHRoaXMuXG4gIGZ1bmN0aW9uIHNldExlZnRSVExTY3JvbGxiYXJPZmZzZXQoKSB7XG4gICAgb2Zmc2V0cy54ID0gZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQpO1xuICB9XG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50KSB7XG4gICAgICBjb25zdCBvZmZzZXRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgICAgIG9mZnNldHMueCA9IG9mZnNldFJlY3QueCArIG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ID0gb2Zmc2V0UmVjdC55ICsgb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgc2V0TGVmdFJUTFNjcm9sbGJhck9mZnNldCgpO1xuICAgIH1cbiAgfVxuICBpZiAoaXNGaXhlZCAmJiAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgc2V0TGVmdFJUTFNjcm9sbGJhck9mZnNldCgpO1xuICB9XG4gIGNvbnN0IGh0bWxPZmZzZXQgPSBkb2N1bWVudEVsZW1lbnQgJiYgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkID8gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIGNvbnN0IHggPSByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCAtIGh0bWxPZmZzZXQueDtcbiAgY29uc3QgeSA9IHJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcCAtIG9mZnNldHMueSAtIGh0bWxPZmZzZXQueTtcbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1N0YXRpY1Bvc2l0aW9uZWQoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYyc7XG59XG5cbmZ1bmN0aW9uIGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpIHtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAocG9seWZpbGwpIHtcbiAgICByZXR1cm4gcG9seWZpbGwoZWxlbWVudCk7XG4gIH1cbiAgbGV0IHJhd09mZnNldFBhcmVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXG4gIC8vIEZpcmVmb3ggcmV0dXJucyB0aGUgPGh0bWw+IGVsZW1lbnQgYXMgdGhlIG9mZnNldFBhcmVudCBpZiBpdCdzIG5vbi1zdGF0aWMsXG4gIC8vIHdoaWxlIENocm9tZSBhbmQgU2FmYXJpIHJldHVybiB0aGUgPGJvZHk+IGVsZW1lbnQuIFRoZSA8Ym9keT4gZWxlbWVudCBtdXN0XG4gIC8vIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUgY29ycmVjdCBjYWxjdWxhdGlvbnMgZXZlbiBpZiB0aGUgPGh0bWw+IGVsZW1lbnQgaXNcbiAgLy8gbm9uLXN0YXRpYy5cbiAgaWYgKGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSA9PT0gcmF3T2Zmc2V0UGFyZW50KSB7XG4gICAgcmF3T2Zmc2V0UGFyZW50ID0gcmF3T2Zmc2V0UGFyZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuICByZXR1cm4gcmF3T2Zmc2V0UGFyZW50O1xufVxuXG4vLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgaWYgKGlzVG9wTGF5ZXIoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIGxldCBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICAgIHdoaWxlIChzdmdPZmZzZXRQYXJlbnQgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICBpZiAoaXNFbGVtZW50KHN2Z09mZnNldFBhcmVudCkgJiYgIWlzU3RhdGljUG9zaXRpb25lZChzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiBzdmdPZmZzZXRQYXJlbnQ7XG4gICAgICB9XG4gICAgICBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKHN2Z09mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIHJldHVybiB3aW47XG4gIH1cbiAgbGV0IG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpO1xuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCwgcG9seWZpbGwpO1xuICB9XG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgaXNMYXN0VHJhdmVyc2FibGVOb2RlKG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkgJiYgIWlzQ29udGFpbmluZ0Jsb2NrKG9mZnNldFBhcmVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbjtcbn1cblxuY29uc3QgZ2V0RWxlbWVudFJlY3RzID0gYXN5bmMgZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgZ2V0T2Zmc2V0UGFyZW50Rm4gPSB0aGlzLmdldE9mZnNldFBhcmVudCB8fCBnZXRPZmZzZXRQYXJlbnQ7XG4gIGNvbnN0IGdldERpbWVuc2lvbnNGbiA9IHRoaXMuZ2V0RGltZW5zaW9ucztcbiAgY29uc3QgZmxvYXRpbmdEaW1lbnNpb25zID0gYXdhaXQgZ2V0RGltZW5zaW9uc0ZuKGRhdGEuZmxvYXRpbmcpO1xuICByZXR1cm4ge1xuICAgIHJlZmVyZW5jZTogZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoZGF0YS5yZWZlcmVuY2UsIGF3YWl0IGdldE9mZnNldFBhcmVudEZuKGRhdGEuZmxvYXRpbmcpLCBkYXRhLnN0cmF0ZWd5KSxcbiAgICBmbG9hdGluZzoge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICB3aWR0aDogZmxvYXRpbmdEaW1lbnNpb25zLndpZHRoLFxuICAgICAgaGVpZ2h0OiBmbG9hdGluZ0RpbWVuc2lvbnMuaGVpZ2h0XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNSVEwoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5kaXJlY3Rpb24gPT09ICdydGwnO1xufVxuXG5jb25zdCBwbGF0Zm9ybSA9IHtcbiAgY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QsXG4gIGdldERvY3VtZW50RWxlbWVudCxcbiAgZ2V0Q2xpcHBpbmdSZWN0LFxuICBnZXRPZmZzZXRQYXJlbnQsXG4gIGdldEVsZW1lbnRSZWN0cyxcbiAgZ2V0Q2xpZW50UmVjdHMsXG4gIGdldERpbWVuc2lvbnMsXG4gIGdldFNjYWxlLFxuICBpc0VsZW1lbnQsXG4gIGlzUlRMXG59O1xuXG5mdW5jdGlvbiByZWN0c0FyZUVxdWFsKGEsIGIpIHtcbiAgcmV0dXJuIGEueCA9PT0gYi54ICYmIGEueSA9PT0gYi55ICYmIGEud2lkdGggPT09IGIud2lkdGggJiYgYS5oZWlnaHQgPT09IGIuaGVpZ2h0O1xufVxuXG4vLyBodHRwczovL3NhbXRob3IuYXUvMjAyMS9vYnNlcnZpbmctZG9tL1xuZnVuY3Rpb24gb2JzZXJ2ZU1vdmUoZWxlbWVudCwgb25Nb3ZlKSB7XG4gIGxldCBpbyA9IG51bGw7XG4gIGxldCB0aW1lb3V0SWQ7XG4gIGNvbnN0IHJvb3QgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgdmFyIF9pbztcbiAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAoX2lvID0gaW8pID09IG51bGwgfHwgX2lvLmRpc2Nvbm5lY3QoKTtcbiAgICBpbyA9IG51bGw7XG4gIH1cbiAgZnVuY3Rpb24gcmVmcmVzaChza2lwLCB0aHJlc2hvbGQpIHtcbiAgICBpZiAoc2tpcCA9PT0gdm9pZCAwKSB7XG4gICAgICBza2lwID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aHJlc2hvbGQgPT09IHZvaWQgMCkge1xuICAgICAgdGhyZXNob2xkID0gMTtcbiAgICB9XG4gICAgY2xlYW51cCgpO1xuICAgIGNvbnN0IGVsZW1lbnRSZWN0Rm9yUm9vdE1hcmdpbiA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qge1xuICAgICAgbGVmdCxcbiAgICAgIHRvcCxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0XG4gICAgfSA9IGVsZW1lbnRSZWN0Rm9yUm9vdE1hcmdpbjtcbiAgICBpZiAoIXNraXApIHtcbiAgICAgIG9uTW92ZSgpO1xuICAgIH1cbiAgICBpZiAoIXdpZHRoIHx8ICFoZWlnaHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5zZXRUb3AgPSBmbG9vcih0b3ApO1xuICAgIGNvbnN0IGluc2V0UmlnaHQgPSBmbG9vcihyb290LmNsaWVudFdpZHRoIC0gKGxlZnQgKyB3aWR0aCkpO1xuICAgIGNvbnN0IGluc2V0Qm90dG9tID0gZmxvb3Iocm9vdC5jbGllbnRIZWlnaHQgLSAodG9wICsgaGVpZ2h0KSk7XG4gICAgY29uc3QgaW5zZXRMZWZ0ID0gZmxvb3IobGVmdCk7XG4gICAgY29uc3Qgcm9vdE1hcmdpbiA9IC1pbnNldFRvcCArIFwicHggXCIgKyAtaW5zZXRSaWdodCArIFwicHggXCIgKyAtaW5zZXRCb3R0b20gKyBcInB4IFwiICsgLWluc2V0TGVmdCArIFwicHhcIjtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcm9vdE1hcmdpbixcbiAgICAgIHRocmVzaG9sZDogbWF4KDAsIG1pbigxLCB0aHJlc2hvbGQpKSB8fCAxXG4gICAgfTtcbiAgICBsZXQgaXNGaXJzdFVwZGF0ZSA9IHRydWU7XG4gICAgZnVuY3Rpb24gaGFuZGxlT2JzZXJ2ZShlbnRyaWVzKSB7XG4gICAgICBjb25zdCByYXRpbyA9IGVudHJpZXNbMF0uaW50ZXJzZWN0aW9uUmF0aW87XG4gICAgICBpZiAocmF0aW8gIT09IHRocmVzaG9sZCkge1xuICAgICAgICBpZiAoIWlzRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgICByZXR1cm4gcmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmF0aW8pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgcmVmZXJlbmNlIGlzIGNsaXBwZWQsIHRoZSByYXRpbyBpcyAwLiBUaHJvdHRsZSB0aGUgcmVmcmVzaFxuICAgICAgICAgIC8vIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBvZiB1cGRhdGVzLlxuICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgcmVmcmVzaChmYWxzZSwgMWUtNyk7XG4gICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVmcmVzaChmYWxzZSwgcmF0aW8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmF0aW8gPT09IDEgJiYgIXJlY3RzQXJlRXF1YWwoZWxlbWVudFJlY3RGb3JSb290TWFyZ2luLCBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSkge1xuICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgZXZlbiB0aG91Z2ggdGhlIHJhdGlvIGlzIHJlcG9ydGVkIGFzIDEsIHRoZVxuICAgICAgICAvLyBlbGVtZW50IGlzIG5vdCBhY3R1YWxseSBmdWxseSB3aXRoaW4gdGhlIEludGVyc2VjdGlvbk9ic2VydmVyJ3Mgcm9vdFxuICAgICAgICAvLyBhcmVhIGFueW1vcmUuIFRoaXMgY2FuIGhhcHBlbiB1bmRlciBwZXJmb3JtYW5jZSBjb25zdHJhaW50cy4gVGhpcyBtYXlcbiAgICAgICAgLy8gYmUgYSBidWcgaW4gdGhlIGJyb3dzZXIncyBJbnRlcnNlY3Rpb25PYnNlcnZlciBpbXBsZW1lbnRhdGlvbi4gVG9cbiAgICAgICAgLy8gd29yayBhcm91bmQgdGhpcywgd2UgY29tcGFyZSB0aGUgZWxlbWVudCdzIGJvdW5kaW5nIHJlY3Qgbm93IHdpdGhcbiAgICAgICAgLy8gd2hhdCBpdCB3YXMgYXQgdGhlIHRpbWUgd2UgY3JlYXRlZCB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuIElmIHRoZXlcbiAgICAgICAgLy8gYXJlIG5vdCBlcXVhbCB0aGVuIHRoZSBlbGVtZW50IG1vdmVkLCBzbyB3ZSByZWZyZXNoLlxuICAgICAgICByZWZyZXNoKCk7XG4gICAgICB9XG4gICAgICBpc0ZpcnN0VXBkYXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gT2xkZXIgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCBhIGBkb2N1bWVudGAgYXMgdGhlIHJvb3QgYW5kIHdpbGwgdGhyb3cgYW5cbiAgICAvLyBlcnJvci5cbiAgICB0cnkge1xuICAgICAgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlT2JzZXJ2ZSwge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAvLyBIYW5kbGUgPGlmcmFtZT5zXG4gICAgICAgIHJvb3Q6IHJvb3Qub3duZXJEb2N1bWVudFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoX2UpIHtcbiAgICAgIGlvID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGhhbmRsZU9ic2VydmUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpby5vYnNlcnZlKGVsZW1lbnQpO1xuICB9XG4gIHJlZnJlc2godHJ1ZSk7XG4gIHJldHVybiBjbGVhbnVwO1xufVxuXG4vKipcbiAqIEF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgd2hlbiBuZWNlc3NhcnkuXG4gKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgZmxvYXRpbmcgZWxlbWVudCBpcyBtb3VudGVkIG9uIHRoZSBET00gb3JcbiAqIHZpc2libGUgb24gdGhlIHNjcmVlbi5cbiAqIEByZXR1cm5zIGNsZWFudXAgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgaW52b2tlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzXG4gKiByZW1vdmVkIGZyb20gdGhlIERPTSBvciBoaWRkZW4gZnJvbSB0aGUgc2NyZWVuLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9VcGRhdGVcbiAqL1xuZnVuY3Rpb24gYXV0b1VwZGF0ZShyZWZlcmVuY2UsIGZsb2F0aW5nLCB1cGRhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBjb25zdCB7XG4gICAgYW5jZXN0b3JTY3JvbGwgPSB0cnVlLFxuICAgIGFuY2VzdG9yUmVzaXplID0gdHJ1ZSxcbiAgICBlbGVtZW50UmVzaXplID0gdHlwZW9mIFJlc2l6ZU9ic2VydmVyID09PSAnZnVuY3Rpb24nLFxuICAgIGxheW91dFNoaWZ0ID0gdHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyID09PSAnZnVuY3Rpb24nLFxuICAgIGFuaW1hdGlvbkZyYW1lID0gZmFsc2VcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJlZmVyZW5jZUVsID0gdW53cmFwRWxlbWVudChyZWZlcmVuY2UpO1xuICBjb25zdCBhbmNlc3RvcnMgPSBhbmNlc3RvclNjcm9sbCB8fCBhbmNlc3RvclJlc2l6ZSA/IFsuLi4ocmVmZXJlbmNlRWwgPyBnZXRPdmVyZmxvd0FuY2VzdG9ycyhyZWZlcmVuY2VFbCkgOiBbXSksIC4uLmdldE92ZXJmbG93QW5jZXN0b3JzKGZsb2F0aW5nKV0gOiBbXTtcbiAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgIGFuY2VzdG9yU2Nyb2xsICYmIGFuY2VzdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZVxuICAgIH0pO1xuICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gIH0pO1xuICBjb25zdCBjbGVhbnVwSW8gPSByZWZlcmVuY2VFbCAmJiBsYXlvdXRTaGlmdCA/IG9ic2VydmVNb3ZlKHJlZmVyZW5jZUVsLCB1cGRhdGUpIDogbnVsbDtcbiAgbGV0IHJlb2JzZXJ2ZUZyYW1lID0gLTE7XG4gIGxldCByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gIGlmIChlbGVtZW50UmVzaXplKSB7XG4gICAgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoX3JlZiA9PiB7XG4gICAgICBsZXQgW2ZpcnN0RW50cnldID0gX3JlZjtcbiAgICAgIGlmIChmaXJzdEVudHJ5ICYmIGZpcnN0RW50cnkudGFyZ2V0ID09PSByZWZlcmVuY2VFbCAmJiByZXNpemVPYnNlcnZlcikge1xuICAgICAgICAvLyBQcmV2ZW50IHVwZGF0ZSBsb29wcyB3aGVuIHVzaW5nIHRoZSBgc2l6ZWAgbWlkZGxld2FyZS5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8xNzQwXG4gICAgICAgIHJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZShmbG9hdGluZyk7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJlb2JzZXJ2ZUZyYW1lKTtcbiAgICAgICAgcmVvYnNlcnZlRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIHZhciBfcmVzaXplT2JzZXJ2ZXI7XG4gICAgICAgICAgKF9yZXNpemVPYnNlcnZlciA9IHJlc2l6ZU9ic2VydmVyKSA9PSBudWxsIHx8IF9yZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB1cGRhdGUoKTtcbiAgICB9KTtcbiAgICBpZiAocmVmZXJlbmNlRWwgJiYgIWFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHJlZmVyZW5jZUVsKTtcbiAgICB9XG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShmbG9hdGluZyk7XG4gIH1cbiAgbGV0IGZyYW1lSWQ7XG4gIGxldCBwcmV2UmVmUmVjdCA9IGFuaW1hdGlvbkZyYW1lID8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHJlZmVyZW5jZSkgOiBudWxsO1xuICBpZiAoYW5pbWF0aW9uRnJhbWUpIHtcbiAgICBmcmFtZUxvb3AoKTtcbiAgfVxuICBmdW5jdGlvbiBmcmFtZUxvb3AoKSB7XG4gICAgY29uc3QgbmV4dFJlZlJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKTtcbiAgICBpZiAocHJldlJlZlJlY3QgJiYgIXJlY3RzQXJlRXF1YWwocHJldlJlZlJlY3QsIG5leHRSZWZSZWN0KSkge1xuICAgICAgdXBkYXRlKCk7XG4gICAgfVxuICAgIHByZXZSZWZSZWN0ID0gbmV4dFJlZlJlY3Q7XG4gICAgZnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShmcmFtZUxvb3ApO1xuICB9XG4gIHVwZGF0ZSgpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIHZhciBfcmVzaXplT2JzZXJ2ZXIyO1xuICAgIGFuY2VzdG9ycy5mb3JFYWNoKGFuY2VzdG9yID0+IHtcbiAgICAgIGFuY2VzdG9yU2Nyb2xsICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZSk7XG4gICAgICBhbmNlc3RvclJlc2l6ZSAmJiBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGUpO1xuICAgIH0pO1xuICAgIGNsZWFudXBJbyA9PSBudWxsIHx8IGNsZWFudXBJbygpO1xuICAgIChfcmVzaXplT2JzZXJ2ZXIyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyMi5kaXNjb25uZWN0KCk7XG4gICAgcmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICAgIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoZnJhbWVJZCk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHdpdGggYW4gb2JqZWN0IG9mIG92ZXJmbG93IHNpZGUgb2Zmc2V0cyB0aGF0IGRldGVybWluZSBob3cgbXVjaCB0aGVcbiAqIGVsZW1lbnQgaXMgb3ZlcmZsb3dpbmcgYSBnaXZlbiBjbGlwcGluZyBib3VuZGFyeSBvbiBlYWNoIHNpZGUuXG4gKiAtIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGJvdW5kYXJ5IGJ5IHRoYXQgbnVtYmVyIG9mIHBpeGVsc1xuICogLSBuZWdhdGl2ZSA9IGhvdyBtYW55IHBpeGVscyBsZWZ0IGJlZm9yZSBpdCB3aWxsIG92ZXJmbG93XG4gKiAtIDAgPSBsaWVzIGZsdXNoIHdpdGggdGhlIGJvdW5kYXJ5XG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZGV0ZWN0T3ZlcmZsb3dcbiAqL1xuY29uc3QgZGV0ZWN0T3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyQxO1xuXG4vKipcbiAqIE1vZGlmaWVzIHRoZSBwbGFjZW1lbnQgYnkgdHJhbnNsYXRpbmcgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYWxvbmcgdGhlXG4gKiBzcGVjaWZpZWQgYXhlcy5cbiAqIEEgbnVtYmVyIChzaG9ydGhhbmQgZm9yIGBtYWluQXhpc2Agb3IgZGlzdGFuY2UpLCBvciBhbiBheGVzIGNvbmZpZ3VyYXRpb25cbiAqIG9iamVjdCBtYXkgYmUgcGFzc2VkLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL29mZnNldFxuICovXG5jb25zdCBvZmZzZXQgPSBvZmZzZXQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgY2hvb3NpbmcgdGhlIHBsYWNlbWVudFxuICogdGhhdCBoYXMgdGhlIG1vc3Qgc3BhY2UgYXZhaWxhYmxlIGF1dG9tYXRpY2FsbHksIHdpdGhvdXQgbmVlZGluZyB0byBzcGVjaWZ5IGFcbiAqIHByZWZlcnJlZCBwbGFjZW1lbnQuIEFsdGVybmF0aXZlIHRvIGBmbGlwYC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hdXRvUGxhY2VtZW50XG4gKi9cbmNvbnN0IGF1dG9QbGFjZW1lbnQgPSBhdXRvUGxhY2VtZW50JDE7XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IHNoaWZ0aW5nIGl0IGluIG9yZGVyIHRvXG4gKiBrZWVwIGl0IGluIHZpZXcgd2hlbiBpdCB3aWxsIG92ZXJmbG93IHRoZSBjbGlwcGluZyBib3VuZGFyeS5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaGlmdFxuICovXG5jb25zdCBzaGlmdCA9IHNoaWZ0JDE7XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGZsaXBwaW5nIHRoZSBgcGxhY2VtZW50YFxuICogaW4gb3JkZXIgdG8ga2VlcCBpdCBpbiB2aWV3IHdoZW4gdGhlIHByZWZlcnJlZCBwbGFjZW1lbnQocykgd2lsbCBvdmVyZmxvdyB0aGVcbiAqIGNsaXBwaW5nIGJvdW5kYXJ5LiBBbHRlcm5hdGl2ZSB0byBgYXV0b1BsYWNlbWVudGAuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZmxpcFxuICovXG5jb25zdCBmbGlwID0gZmxpcCQxO1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCDigJRcbiAqIGZvciBpbnN0YW5jZSwgcHJldmVudCBpdCBmcm9tIG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyBib3VuZGFyeSBvciBtYXRjaCB0aGVcbiAqIHdpZHRoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaXplXG4gKi9cbmNvbnN0IHNpemUgPSBzaXplJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBoaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50IGluIGFwcGxpY2FibGUgc2l0dWF0aW9ucywgc3VjaCBhc1xuICogd2hlbiBpdCBpcyBub3QgaW4gdGhlIHNhbWUgY2xpcHBpbmcgY29udGV4dCBhcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaGlkZVxuICovXG5jb25zdCBoaWRlID0gaGlkZSQxO1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gcG9zaXRpb24gYW4gaW5uZXIgZWxlbWVudCBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBzbyB0aGF0IGl0XG4gKiBhcHBlYXJzIGNlbnRlcmVkIHRvIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hcnJvd1xuICovXG5jb25zdCBhcnJvdyA9IGFycm93JDE7XG5cbi8qKlxuICogUHJvdmlkZXMgaW1wcm92ZWQgcG9zaXRpb25pbmcgZm9yIGlubGluZSByZWZlcmVuY2UgZWxlbWVudHMgdGhhdCBjYW4gc3BhblxuICogb3ZlciBtdWx0aXBsZSBsaW5lcywgc3VjaCBhcyBoeXBlcmxpbmtzIG9yIHJhbmdlIHNlbGVjdGlvbnMuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaW5saW5lXG4gKi9cbmNvbnN0IGlubGluZSA9IGlubGluZSQxO1xuXG4vKipcbiAqIEJ1aWx0LWluIGBsaW1pdGVyYCB0aGF0IHdpbGwgc3RvcCBgc2hpZnQoKWAgYXQgYSBjZXJ0YWluIHBvaW50LlxuICovXG5jb25zdCBsaW1pdFNoaWZ0ID0gbGltaXRTaGlmdCQxO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyB0aGF0IHdpbGwgcGxhY2UgdGhlIGZsb2F0aW5nIGVsZW1lbnRcbiAqIG5leHQgdG8gYSBnaXZlbiByZWZlcmVuY2UgZWxlbWVudC5cbiAqL1xuY29uc3QgY29tcHV0ZVBvc2l0aW9uID0gKHJlZmVyZW5jZSwgZmxvYXRpbmcsIG9wdGlvbnMpID0+IHtcbiAgLy8gVGhpcyBjYWNoZXMgdGhlIGV4cGVuc2l2ZSBgZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzYCBmdW5jdGlvbiBzbyB0aGF0XG4gIC8vIG11bHRpcGxlIGxpZmVjeWNsZSByZXNldHMgcmUtdXNlIHRoZSBzYW1lIHJlc3VsdC4gSXQgb25seSBsaXZlcyBmb3IgYVxuICAvLyBzaW5nbGUgY2FsbC4gSWYgb3RoZXIgZnVuY3Rpb25zIGJlY29tZSBleHBlbnNpdmUsIHdlIGNhbiBhZGQgdGhlbSBhcyB3ZWxsLlxuICBjb25zdCBjYWNoZSA9IG5ldyBNYXAoKTtcbiAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IHtcbiAgICBwbGF0Zm9ybSxcbiAgICAuLi5vcHRpb25zXG4gIH07XG4gIGNvbnN0IHBsYXRmb3JtV2l0aENhY2hlID0ge1xuICAgIC4uLm1lcmdlZE9wdGlvbnMucGxhdGZvcm0sXG4gICAgX2M6IGNhY2hlXG4gIH07XG4gIHJldHVybiBjb21wdXRlUG9zaXRpb24kMShyZWZlcmVuY2UsIGZsb2F0aW5nLCB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucyxcbiAgICBwbGF0Zm9ybTogcGxhdGZvcm1XaXRoQ2FjaGVcbiAgfSk7XG59O1xuXG5leHBvcnQgeyBhcnJvdywgYXV0b1BsYWNlbWVudCwgYXV0b1VwZGF0ZSwgY29tcHV0ZVBvc2l0aW9uLCBkZXRlY3RPdmVyZmxvdywgZmxpcCwgaGlkZSwgaW5saW5lLCBsaW1pdFNoaWZ0LCBvZmZzZXQsIHBsYXRmb3JtLCBzaGlmdCwgc2l6ZSB9O1xuIiwiaW1wb3J0IHsgYXV0b1VwZGF0ZSwgY29tcHV0ZVBvc2l0aW9uIH0gZnJvbSBcIkBmbG9hdGluZy11aS9kb21cIjtcblxuZXhwb3J0IGNvbnN0IFFVSUNLX0VWRU5UID0geyBjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH07XG5leHBvcnQgY29uc3QgSVNfQlJPV1NFUiA9XG5cdHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiO1xuXG4vLyBUT0RPOiBEb2N1bWVudGF0aW9uIGZvciBwcmV0dHlOdW1iZXJcbmxldCBJTlRMX05VTTogSW50bC5OdW1iZXJGb3JtYXQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcHJldHR5TnVtYmVyKG51bWJlcjogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdGlmICghSU5UTF9OVU0pXG5cdFx0SU5UTF9OVU0gPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXG5cdFx0XHQoSVNfQlJPV1NFUiAmJiBhdHRyKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgXCJsYW5nXCIpKSB8fCBcIm5vXCIsXG5cdFx0KTtcblx0cmV0dXJuIElOVExfTlVNLmZvcm1hdChOdW1iZXIobnVtYmVyKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZTxUIGV4dGVuZHMgdW5rbm93bltdPihcblx0Y2FsbGJhY2s6ICguLi5hcmdzOiBUKSA9PiB2b2lkLFxuXHRkZWxheTogbnVtYmVyLFxuKSB7XG5cdGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cblx0cmV0dXJuICguLi5hcmdzOiBUKSA9PiB7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0XHR0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gY2FsbGJhY2soLi4uYXJncyksIGRlbGF5KTtcblx0fTtcbn1cblxuLyoqXG4gKiBhdHRyXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IGdldCwgc2V0IGFuZCByZW1vdmUgYXR0cmlidXRlc1xuICogQHBhcmFtIGVsIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIG5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lIHRvIGdldCwgc2V0IG9yIHJlbW92ZSwgb3IgYSBvYmplY3QgdG8gc2V0IG11bHRpcGxlIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB2YWx1ZSBBIHZhbGlkIGF0dHJpYnV0ZSB2YWx1ZSBvciBudWxsIHRvIHJlbW92ZSBhdHRyaWJ1dGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dHIoXG5cdGVsOiBFbGVtZW50LFxuXHRuYW1lOiBzdHJpbmcsXG5cdHZhbHVlPzogc3RyaW5nIHwgbnVsbCxcbik6IHN0cmluZyB8IG51bGwge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKSA/PyBudWxsOyAvLyBGYWxsYmFjayB0byBudWxsIG9ubHkgaWYgZWwgaXMgdW5kZWZpbmVkXG5cdGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuXHRyZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiB1c2VJZFxuICogQHJldHVybiBBIGdlbmVyYXRlZCB1bmlxdWUgSURcbiAqL1xubGV0IGlkID0gMDtcbmNvbnN0IFVVSUQgPSBgJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDUpfWA7XG5leHBvcnQgZnVuY3Rpb24gdXNlSWQoZWw6IEVsZW1lbnQpIHtcblx0aWYgKCFlbC5pZCkgZWwuaWQgPSBgJHtVVUlEfSR7KytpZH1gO1xuXHRyZXR1cm4gZWwuaWQ7XG59XG5cbi8vIEludGVybmFsIGhlbHBlciBmb3Igb24gLyBvZmZcbmNvbnN0IGV2ZW50cyA9IChcblx0YWN0aW9uOiBcImFkZFwiIHwgXCJyZW1vdmVcIixcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Wy4uLnJlc3RdOiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPiwgLy8gU3ByZWF0IHRvIG1ha2UgYSBjb3B5IG9mIHRoZSBhcnJheVxuKTogdm9pZCA9PiB7XG5cdGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuXHRcdHJlc3RbMF0gPSB0eXBlO1xuXHRcdGVsZW1lbnRbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXSguLi5yZXN0KTtcblx0fVxufTtcblxuLyoqXG4gKiBvblxuICogQHBhcmFtIGVsZW1lbnQgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gdHlwZXMgQSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGV2ZW50IHR5cGVzXG4gKiBAcGFyYW0gbGlzdGVuZXIgQW4gZXZlbnQgbGlzdGVuZXIgZnVuY3Rpb24gb3IgbGlzdGVuZXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBvbiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4ge1xuXHRpZiAoVU5CSU5EICYmIChlbGVtZW50ID09PSB3aW5kb3cgfHwgZWxlbWVudCA9PT0gZG9jdW1lbnQpKVxuXHRcdFVOQklORC5wdXNoKCgpID0+IG9mZihlbGVtZW50LCAuLi5yZXN0KSk7XG5cdGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbn07XG5cbi8qKlxuICogb2ZmXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9mZiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBXaW5kb3cge1xuXHRcdF9tdGRzVW5iaW5kRXZlbnRzPzogTWFwPHN0cmluZywgQXJyYXk8KCkgPT4gdm9pZD4+O1xuXHR9XG59XG5cbi8qKlxuICogb25Mb2FkZWRcbiAqIEBkZXNjcmlwdGlvbiBSdW5zIGEgY2FsbGJhY2sgd2hlbiB3aW5kb3cgaXMgbG9hZGVkIGluIGJyb3dzZXIsIGFuZCBlbnN1cmVzIGV2ZW50cyBhcmUgdW5ib3VuZCBpZiBob3QgcmVsb2FkaW5nXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHJ1biB3aGVuIHRoZSBwYWdlIGlzIHJlYWR5XG4gKi9cbmxldCBVTkJJTkQ6IEFycmF5PCgpID0+IHZvaWQ+IHwgbnVsbCA9IG51bGw7XG5leHBvcnQgY29uc3Qgb25Mb2FkZWQgPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcblx0aWYgKCFJU19CUk9XU0VSKSByZXR1cm47XG5cdGlmICghd2luZG93Ll9tdGRzVW5iaW5kRXZlbnRzKSB3aW5kb3cuX210ZHNVbmJpbmRFdmVudHMgPSBuZXcgTWFwKCk7XG5cblx0Y29uc3QgcnVuID0gKCkgPT5cblx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0Y29uc3Qga2V5ID0gU3RyaW5nKGNhbGxiYWNrKS5yZXBsYWNlKC8oXFxufFxccykvZywgXCJcIik7XG5cdFx0XHR3aW5kb3cuX210ZHNVbmJpbmRFdmVudHM/LmdldChrZXkpPy5mb3JFYWNoKCh1bmJpbmQpID0+IHtcblx0XHRcdFx0dW5iaW5kKCk7IC8vIFVuYmluZCBwcmV2aW91cyBldmVudHNcblx0XHRcdH0pO1xuXHRcdFx0VU5CSU5EID0gW107IC8vIFByZXBhcmUgdG8gbGlzdGVuIGZvciBuZXdseSBib3VuZCBldmVudHNcblx0XHRcdGNhbGxiYWNrKCk7IC8vIFJ1biBiaW5kaW5nXG5cdFx0XHR3aW5kb3cuX210ZHNVbmJpbmRFdmVudHM/LnNldChrZXksIFVOQklORD8uc2xpY2UoMCkpOyAvLyBTdG9yZSBmb3IgbGF0ZXIgdW5iaW5kaW5nXG5cdFx0XHRVTkJJTkQgPSBudWxsOyAvLyBTdG9wIGxpc3RlbmluZyBmb3IgbmV3bHkgYm91bmQgZXZlbnRzXG5cdFx0fSk7XG5cblx0aWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikgcnVuKCk7XG5cdGVsc2Ugb24od2luZG93LCBcImxvYWRcIiwgcnVuKTtcbn07XG5cbmNvbnN0IEFOQ0hPUkVEID0gbmV3IFdlYWtNYXA8RWxlbWVudCwgUmV0dXJuVHlwZTx0eXBlb2YgYXV0b1VwZGF0ZT4+KCk7XG5leHBvcnQgZnVuY3Rpb24gYW5jaG9yUG9zaXRpb24oXG5cdHRhcmdldDogSFRNTEVsZW1lbnQsXG5cdGFuY2hvcjogZmFsc2UgfCBFbGVtZW50LFxuXHRvcHRpb25zPzogUGFyYW1ldGVyczx0eXBlb2YgY29tcHV0ZVBvc2l0aW9uPlsyXSxcbikge1xuXHRBTkNIT1JFRC5nZXQodGFyZ2V0KT8uKCk7IC8vIFVuYmluZCBwcmV2aW91cyBhbmNob3IgcG9zaXRpb25cblx0QU5DSE9SRUQuZGVsZXRlKHRhcmdldCk7XG5cblx0aWYgKGFuY2hvcilcblx0XHRBTkNIT1JFRC5zZXQoXG5cdFx0XHR0YXJnZXQsXG5cdFx0XHRhdXRvVXBkYXRlKGFuY2hvciwgdGFyZ2V0LCAoKSA9PiB7XG5cdFx0XHRcdGlmICghdGFyZ2V0LmlzQ29ubmVjdGVkIHx8ICFhbmNob3IuaXNDb25uZWN0ZWQgfHwgdGFyZ2V0LmhpZGRlbilcblx0XHRcdFx0XHRyZXR1cm4gYW5jaG9yUG9zaXRpb24odGFyZ2V0LCBmYWxzZSk7XG5cdFx0XHRcdGNvbXB1dGVQb3NpdGlvbihhbmNob3IsIHRhcmdldCwgb3B0aW9ucykudGhlbigoeyB4LCB5IH0pID0+IHtcblx0XHRcdFx0XHR0YXJnZXQuc3R5bGUubGVmdCA9IGAke3h9cHhgO1xuXHRcdFx0XHRcdHRhcmdldC5zdHlsZS50b3AgPSBgJHt5fXB4YDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KSxcblx0XHQpO1xufVxuXG4vKipcbiAqIFNwZWVkIHVwIE11dGF0aW9uT2JzZXJ2ZXIgYnkgZGVib3VuY2luZyBhbmQgb25seSBydW5uaW5nIHdoZW4gcGFnZSBpcyB2aXNpYmxlXG4gKiBAcmV0dXJuIG5ldyBNdXRhaW9uT2JzZXJ2ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2s6IE11dGF0aW9uQ2FsbGJhY2spIHtcblx0bGV0IHF1ZXVlID0gMDtcblxuXHRjb25zdCBvbkZyYW1lID0gKCkgPT4gc2V0VGltZW91dChvblRpbWVyLCAyMDApOyAvLyBVc2UgYm90aCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgYW5kIHNldFRpbWVvdXQgdG8gZGVib3VuY2UgYW5kIG9ubHkgcnVuIHdoZW4gdmlzaWJsZVxuXHRjb25zdCBvblRpbWVyID0gKCkgPT4ge1xuXHRcdGNhbGxiYWNrKFtdLCBvYnNlcnZlcik7XG5cdFx0b2JzZXJ2ZXIudGFrZVJlY29yZHMoKTsgLy8gQ2xlYXIgcmVjb3JkcyB0byBhdm9pZCBydW5uaW5nIGNhbGxiYWNrIG11bHRpcGxlIHRpbWVzXG5cdFx0cXVldWUgPSAwO1xuXHR9O1xuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcblx0XHRpZiAoIXF1ZXVlKSBxdWV1ZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShvbkZyYW1lKTtcblx0fSk7XG5cblx0cmV0dXJuIG9ic2VydmVyO1xufVxuXG4vKipcbiAqIG9uTXV0YXRpb25cbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgb2JzZXJ2ZSBtdXRhdGlvbnMgb24gYSBzcGVjaWZpYyBjbGFzcyBuYW1lXG4gKiBAcGFyYW0gZWwgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gY2xhc3NOYW1lIFRoZSBjbGFzcyBuYW1lIHRvIG9ic2VydmVcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gbXV0YXRpb25zIGFyZSBkZXRlY3RlZFxuICovXG5jb25zdCBNVVRBVE9SUyA9IG5ldyBXZWFrTWFwPEVsZW1lbnQsIEFycmF5PCgpID0+IHZvaWQ+PigpO1xuZXhwb3J0IGNvbnN0IG9uTXV0YXRpb24gPSA8VCBleHRlbmRzIEVsZW1lbnQ+KFxuXHRlbDogRWxlbWVudCxcblx0Y2xhc3NOYW1lOiBzdHJpbmcsXG5cdGNhbGxiYWNrOiAoZWxlbXM6IEhUTUxDb2xsZWN0aW9uT2Y8VD4pID0+IHZvaWQsXG4pID0+IHtcblx0Y29uc3QgZWxlbXMgPSBlbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7XG5cdGNvbnN0IG11dGF0b3IgPSBNVVRBVE9SUy5nZXQoZWwpIHx8IFtdO1xuXG5cdGlmICghbXV0YXRvci5sZW5ndGgpIHtcblx0XHRNVVRBVE9SUy5zZXQoZWwsIG11dGF0b3IpO1xuXHRcdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoKF8sIG9ic2VydmVyKSA9PiB7XG5cdFx0XHRpZiAoZWwuaXNDb25uZWN0ZWQgJiYgbXV0YXRvcj8ubGVuZ3RoKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgY2FsbGJhY2sgb2YgbXV0YXRvcikgY2FsbGJhY2soKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdE1VVEFUT1JTLmRlbGV0ZShlbCk7XG5cdFx0XHR9XG5cdFx0fSkub2JzZXJ2ZShlbCwge1xuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbXCJjbGFzc1wiLCBcImhpZGRlblwiXSxcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdH0pO1xuXHR9XG5cdG11dGF0b3IucHVzaCgoKSA9PiBjYWxsYmFjayhlbGVtcyBhcyBIVE1MQ29sbGVjdGlvbk9mPFQ+KSk7XG59O1xuXG4vKipcbiAqIGlzSW5wdXRMaWtlXG4gKiBAZGVzY3JpcHRpb24gQ2hlY2sgaWYgZWxlbWVudCBpcyBhbiBpbnB1dCBsaWtlIGVsZW1lbnRcbiAqIEBwYXJhbSBlbCBUaGUgZWxlbWVudCB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBhbiBpbnB1dCBsaWtlIGVsZW1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGlzSW5wdXRMaWtlID0gKGVsOiB1bmtub3duKTogZWwgaXMgSFRNTElucHV0RWxlbWVudCA9PlxuXHRlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG5cdFwidmFsaWRpdHlcIiBpbiBlbCAmJlxuXHQhKGVsIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpO1xuXG4vKipcbiAqIHRvQ3VzdG9tRWxlbWVudFByb3BzXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IGNvbnZlcnQgcHJvcHMgdG8gY3VzdG9tIGVsZW1lbnQgYXR0cmlidXRlc1xuICogQHBhcmFtIHByb3BzIFRoZSBwcm9wcyB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIHByb3BzXG4gKi9cbmNvbnN0IFNFTEVDVEVEID0gXCJhcmlhLXNlbGVjdGVkXCI7XG5leHBvcnQgY29uc3QgdG9DdXN0b21FbGVtZW50UHJvcHMgPSAoXG5cdHsgY2xhc3NOYW1lLCBoaWRkZW4sIG9wZW4sIC4uLnJlc3QgfTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGtsYXNzPzogc3RyaW5nLFxuKSA9PiB7XG5cdHJlc3Quc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nID0gdHJ1ZTsgLy8gTWFrZSBOZXh0LmpzIGhhcHB5XG5cdGlmIChyZXN0W1NFTEVDVEVEXSAhPT0gdW5kZWZpbmVkKVxuXHRcdHJlc3RbU0VMRUNURURdID0gYCR7KHJlc3RbU0VMRUNURURdIHx8IFwiZmFsc2VcIikgIT09IFwiZmFsc2VcIn1gOyAvLyBFbnN1cmUgYXJpYS1zZWxlY3RlZCBib29sZWFuIGlzIHN0cmluZ1xuXHRpZiAoY2xhc3NOYW1lIHx8IGtsYXNzKSByZXN0LmNsYXNzID0gYCR7a2xhc3N9ICR7Y2xhc3NOYW1lfWAudHJpbSgpOyAvLyBVc2UgY2xhc3MgaW5zdGVhZCBvZiBjbGFzc05hbWVcblx0aWYgKGhpZGRlbikgcmVzdC5oaWRkZW4gPSB0cnVlOyAvLyBFbnN1cmUgYm9vbGVhbiBwcm9wIGJlaGF2aW91clxuXHRpZiAob3BlbikgcmVzdC5vcGVuID0gdHJ1ZTsgLy8gRW5zdXJlIGJvb2xlYW4gcHJvcCBiZWhhdmlvdXJcblx0cmV0dXJuIHJlc3Q7XG59O1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIElTX0JST1dTRVIsIG9uLCBvbkxvYWRlZCwgUVVJQ0tfRVZFTlQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0JSRUFEQ1JVTUJTID0gYC4ke3N0eWxlcy5icmVhZGNydW1icy5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENTU19DSElQID0gYC4ke3N0eWxlcy5jaGlwLnNwbGl0KFwiIFwiKVswXX1gO1xuY29uc3QgQ1NTX0hFTFBURVhUID0gYC4ke3N0eWxlcy5oZWxwdGV4dC5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENTU19QQUdJTkFUSU9OID0gYC4ke3N0eWxlcy5wYWdpbmF0aW9uLnNwbGl0KFwiIFwiKVswXX1gO1xuY29uc3QgQ0xJQ0tTID0gYHN1bW1hcnksdS1zdW1tYXJ5LGEsYnV0dG9uLFtyb2xlPVwidGFiXCJdLFtyb2xlPVwiYnV0dG9uXCJdYDtcbmNvbnN0IEVWRU5UUyA9IFwiY2xpY2ssdG9nZ2xlLHN1Ym1pdCxjaGFuZ2VcIjtcbmNvbnN0IE1BVE9NTyA9IFwibWF0dGlsc3luZXQubWF0b21vLmNsb3VkXCI7XG5jb25zdCBCQU5ORVIgPSBcIm10ZHMtYW5hbHl0aWNzLWJhbm5lclwiOyAvLyBEaWFsb2cgdG8gc2hvdyBNYXRvbW8gc2NyaXB0IGxvYWRpbmdcbmNvbnN0IEJBTk5FUl9VUkwgPVxuXHRcImh0dHBzOi8vd3d3Lm1hdHRpbHN5bmV0Lm5vL29tLW1hdHRpbHN5bmV0L3BlcnNvbnZlcm5lcmtsYWVyaW5nL2luZm9ybWFzam9uc2thcHNsZXJcIjtcblxudHlwZSBNYXRvbW8gPSAoXG5cdHwgc3RyaW5nXG5cdHwgbnVtYmVyXG5cdHwgYm9vbGVhblxuXHR8IERvY3VtZW50XG5cdHwgRWxlbWVudFxuXHR8ICgodGhpczogUmVjb3JkPHN0cmluZywgPFQ+KCkgPT4gVD4pID0+IHZvaWQpXG4pW107XG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBXaW5kb3cge1xuXHRcdF9wYXE/OiBNYXRvbW9bXTtcblx0XHRfbXRtPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPltdO1xuXHRcdF9tdGRzVHJhY2tpbmc/OiBBbmFseXRpY3NBY3Rpb25zW1wiaW5pdFwiXTtcblx0XHRfbXRkc1VudHJhY2s/OiAoKSA9PiB2b2lkO1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIEFuYWx5dGljc0FjdGlvbnMgPSB7XG5cdGluaXQ6IHtcblx0XHRlbmFibGVkPzogYm9vbGVhbiB8IFwiZGVidWdcIjtcblx0XHRjb25zZW50PzogXCJjdXN0b21cIiB8IHRydWU7XG5cdH0gJiAoXG5cdFx0fCB7XG5cdFx0XHRcdG1hdG9tb0lkOiBudW1iZXIgfCBzdHJpbmc7XG5cdFx0XHRcdG1hdG9tb1RhZ01hbmFnZXJJZD86IG5ldmVyO1xuXHRcdCAgfVxuXHRcdHwge1xuXHRcdFx0XHRtYXRvbW9JZD86IG5ldmVyO1xuXHRcdFx0XHRtYXRvbW9UYWdNYW5hZ2VySWQ6IHN0cmluZztcblx0XHQgIH1cblx0KTtcblx0cGFnZXZpZXc6IHtcblx0XHR1cmw/OiBzdHJpbmc7XG5cdFx0dGl0bGU/OiBzdHJpbmc7XG5cdH07XG5cdGV2ZW50OiB7XG5cdFx0Y2F0ZWdvcnk6IHN0cmluZztcblx0XHRhY3Rpb246IHN0cmluZztcblx0XHRuYW1lPzogc3RyaW5nO1xuXHRcdHZhbHVlPzogbnVtYmVyO1xuXHR9O1xuXHRzZWFyY2g6IHtcblx0XHRxdWVyeTogc3RyaW5nO1xuXHRcdGNhdGVnb3J5Pzogc3RyaW5nO1xuXHRcdHJlc3VsdHM/OiBudW1iZXI7XG5cdH07XG5cdG1hdG9tbzogTWF0b21vO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFuYWx5dGljczxBY3Rpb24gZXh0ZW5kcyBrZXlvZiBBbmFseXRpY3NBY3Rpb25zPihcblx0YWN0aW9uOiBBY3Rpb24sXG5cdGFyZ3MgPSB7fSBhcyBBbmFseXRpY3NBY3Rpb25zW0FjdGlvbl0sXG4pIHtcblx0aWYgKCFJU19CUk9XU0VSKSByZXR1cm47XG5cdGlmICghd2luZG93Ll9wYXEpIHtcblx0XHR3aW5kb3cuX3BhcSA9IFtdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wiSGVhdG1hcFNlc3Npb25SZWNvcmRpbmc6OmRpc2FibGVcIl0pOyAvLyBEaXNhYmxlIGhlYXRtYXBzIGJ5IGRlZmF1bHQgYXMgdGhpcyByZXF1aXJlIGNvb2tpZXNcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcImVuYWJsZUxpbmtUcmFja2luZ1wiXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRUcmFja2VyVXJsXCIsIGBodHRwczovLyR7TUFUT01PfS9tYXRvbW8ucGhwYF0pO1xuXHR9XG5cdGlmICghd2luZG93Ll9tdG0pIHtcblx0XHR3aW5kb3cuX210bSA9IHdpbmRvdy5fbXRtIHx8IFtdOyAvLyBQcmVwYXJlIE1hdG9tbyBUYWcgTWFuYWdlclxuXHRcdHdpbmRvdy5fbXRtLnB1c2goeyBcIm10bS5zdGFydFRpbWVcIjogRGF0ZS5ub3coKSwgZXZlbnQ6IFwibXRtLlN0YXJ0XCIgfSk7XG5cdH1cblxuXHRpZiAoYWN0aW9uID09PSBcImluaXRcIikge1xuXHRcdHdpbmRvdy5fbXRkc1RyYWNraW5nID0ge1xuXHRcdFx0ZW5hYmxlZDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICE9PSBcImxvY2FsaG9zdFwiLFxuXHRcdFx0Li4ud2luZG93Ll9tdGRzVHJhY2tpbmcsXG5cdFx0XHQuLi5hcmdzLFxuXHRcdH0gYXMgQW5hbHl0aWNzQWN0aW9uc1tcImluaXRcIl07XG5cdFx0Y29uc3QgeyBjb25zZW50LCBlbmFibGVkLCBtYXRvbW9JZCwgbWF0b21vVGFnTWFuYWdlcklkIH0gPVxuXHRcdFx0d2luZG93Ll9tdGRzVHJhY2tpbmc7XG5cblx0XHRpZiAobWF0b21vSWQpIHdpbmRvdy5fcGFxLnB1c2goW1wic2V0U2l0ZUlkXCIsIG1hdG9tb0lkXSk7XG5cdFx0aWYgKGVuYWJsZWQpIHtcblx0XHRcdGlmIChjb25zZW50ICE9PSBcImN1c3RvbVwiKSByZW5kZXJCYW5uZXIoKTtcblx0XHRcdGNvbnN0IHNyYyA9IG1hdG9tb1RhZ01hbmFnZXJJZFxuXHRcdFx0XHQ/IGBodHRwczovL2Nkbi5tYXRvbW8uY2xvdWQvJHtNQVRPTU99L2NvbnRhaW5lcl8ke21hdG9tb1RhZ01hbmFnZXJJZH0uanNgXG5cdFx0XHRcdDogYGh0dHBzOi8vY2RuLm1hdG9tby5jbG91ZC8ke01BVE9NT30vbWF0b21vLmpzYDtcblxuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihgc2NyaXB0W3NyYz1cIiR7c3JjfVwiXWApIHx8XG5cdFx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kKFxuXHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSwge1xuXHRcdFx0XHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRcdFx0XHRzcmMsXG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHdpbmRvdy5fbXRkc1RyYWNraW5nPy5lbmFibGVkID09PSBmYWxzZSkgcmV0dXJuO1xuXHRpZiAod2luZG93Ll9tdGRzVHJhY2tpbmc/LmVuYWJsZWQgPT09IFwiZGVidWdcIilcblx0XHRyZXR1cm4gY29uc29sZS5pbmZvKGBhbmFseXRpY3MoXCIke2FjdGlvbn1cIiwgYCwgYXJncywgXCIpXCIpO1xuXG5cdGlmIChhY3Rpb24gPT09IFwicGFnZXZpZXdcIikge1xuXHRcdGNvbnN0IHsgdXJsLCB0aXRsZSB9ID0gYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wicGFnZXZpZXdcIl07XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRDdXN0b21VcmxcIiwgdXJsIHx8IGxvY2F0aW9uLmhyZWZdKTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldERvY3VtZW50VGl0bGVcIiwgdGl0bGUgfHwgZG9jdW1lbnQudGl0bGVdKTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInRyYWNrUGFnZVZpZXdcIl0pO1xuXHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJldmVudFwiKSB7XG5cdFx0Y29uc3QgeyBjYXRlZ29yeSwgYWN0aW9uLCBuYW1lLCB2YWx1ZSB9ID0gYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wiZXZlbnRcIl07XG5cdFx0Y29uc3QgZXZlbnQgPSBbXCJ0cmFja0V2ZW50XCIsIGNhdGVnb3J5LCBhY3Rpb24sIG5hbWUsIHZhbHVlXTtcblxuXHRcdC8vIFdlIGRvIG5vdCB3YW50IHRvIHRyYWNrIGV2ZW50cyB3aXRoIGhhc2ggaW4gVVJMIGFzIHRoaXMgY2F1c2VzIGhhcmQtdG8tcmVhZCBkYXRhLFxuXHRcdC8vIHNvIHRlbXBvcmFyaWx5IHJlbW92ZSB0aGUgaGFzaCBwYXJ0LCBhbmQgYWRkIGl0IGJhY2sgYWZ0ZXIgdGhlIGV2ZW50IGlzIHB1c2hlZFxuXHRcdGxldCB1cmwgPSBsb2NhdGlvbi5ocmVmO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1xuXHRcdFx0ZnVuY3Rpb24gKCkge1xuXHRcdFx0XHR1cmwgPSB0aGlzLmdldEN1cnJlbnRVcmw8c3RyaW5nPigpO1xuXHRcdFx0fSxcblx0XHRdKTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCB1cmwuc3BsaXQoXCIjXCIpWzBdXSk7IC8vIFNraXAgaGFzaCBwYXJ0IG9mIFVSTFxuXHRcdHdpbmRvdy5fcGFxLnB1c2goZXZlbnQuZmlsdGVyKCh2KSA9PiB2ICE9PSB1bmRlZmluZWQpKTsgLy8gUHVzaCBldmVudFxuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0Q3VzdG9tVXJsXCIsIHVybF0pOyAvLyBSZXZlcnJ0IHRvIG9yaWdpbmFsIFVSTCB3aXRoIGhhc2hcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwic2VhcmNoXCIpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRxdWVyeSxcblx0XHRcdGNhdGVnb3J5ID0gZmFsc2UsXG5cdFx0XHRyZXN1bHRzID0gZmFsc2UsXG5cdFx0fSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcInNlYXJjaFwiXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInRyYWNrU2l0ZVNlYXJjaFwiLCBxdWVyeSwgY2F0ZWdvcnksIHJlc3VsdHNdKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwibWF0b21vXCIpIHtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcIm1hdG9tb1wiXSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQmFubmVyKCkge1xuXHRjb25zdCBoYXNTZWVuQmFubmVyID1cblx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZChCQU5ORVIpIHx8IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShCQU5ORVIpO1xuXG5cdGlmIChoYXNTZWVuQmFubmVyKSByZXR1cm47XG5cblx0ZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEhUTUwoXG5cdFx0XCJhZnRlcmJlZ2luXCIsXG5cdFx0YDxkaWFsb2cgaWQ9XCIke0JBTk5FUn1cIiBkYXRhLWFuYWx5dGljcz1cImlnbm9yZVwiPjxzdHlsZT5cblx0XHRcdFx0IyR7QkFOTkVSfVtvcGVuXSB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGJhY2tncm91bmQ6ICMxMTZlNmI7IGJvcmRlci1yYWRpdXM6IC41ZW07IGJvcmRlcjogMDsgYm94LXNoYWRvdzogMCAuMjVlbSAuNWVtIHJnYmEoMCwwLDAsLjMpOyBjb2xvcjogI2ZmZjsgZm9udC1zaXplOiAuODc1ZW07IGluc2V0OiBhdXRvIGF1dG8gMWVtIDFlbTsgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gMmVtKTsgb3V0bGluZTogMDsgcGFkZGluZzogLjVlbTsgcG9zaXRpb246IGZpeGVkOyB6LWluZGV4OiA5OTk5OSB9XG5cdFx0XHRcdCMke0JBTk5FUn0gYnV0dG9uIHsgYWxsOiB1bnNldDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBmbGV4OyB3aWR0aDogMS41ZW07IGhlaWdodDogMS41ZW07IGZvbnQ6IDMwMCAxLjVlbS8xLjM1IHNhbnMtc2VyaWY7IGJvcmRlci1yYWRpdXM6IC4yNWVtOyBwbGFjZS1jb250ZW50OiBjZW50ZXI7IHRyYW5zaXRpb246IC4yczsgdHJhbnNpdGlvbi1wcm9wZXJ0eTogYmFja2dyb3VuZCwgc2NhbGUgfVxuXHRcdFx0XHQjJHtCQU5ORVJ9IGJ1dHRvbjpmb2N1cy12aXNpYmxlIHsgb3V0bGluZTogMnB4IHNvbGlkIH1cblx0XHRcdFx0IyR7QkFOTkVSfSBidXR0b246aG92ZXIgeyBiYWNrZ3JvdW5kOiAjMGE0ZTRmIH1cblx0XHRcdFx0IyR7QkFOTkVSfSBidXR0b246YWN0aXZlIHsgYmFja2dyb3VuZDogIzA1NDQ0OTsgc2NhbGU6IC45IH1cblx0XHRcdFx0IyR7QkFOTkVSfSBwIHsgbWFyZ2luOiAwIC4yNWVtIH1cblx0XHRcdDwvc3R5bGU+XG5cdFx0XHQ8cD5WaSBicnVrZXIgPGEgaHJlZj1cIiR7QkFOTkVSX1VSTH1cIiB0YXJnZXQ9XCJfYmxhbmtcIj5pbmZvcm1hc2pvbnNrYXBzbGVyPC9hPiBmb3Igw6UgZm9yYmVkcmUgYnJ1a2Vyb3BwbGV2ZWxzZW4uPC9wPlxuXHRcdFx0PGZvcm0gbWV0aG9kPVwiZGlhbG9nXCIgZGF0YS1hbmFseXRpY3M9XCJpZ25vcmVcIj48YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBhcmlhLWxhYmVsPVwiT0tcIj4mdGltZXM7PC9idXR0b24+PC9mb3JtPlxuXHRcdDwvZGlhbG9nPmAsXG5cdCk7XG5cdGNvbnN0IGJhbm5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKEJBTk5FUikgYXMgSFRNTERpYWxvZ0VsZW1lbnQ7XG5cdGNvbnN0IG9uQ2xvc2UgPSAoKSA9PiB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oQkFOTkVSLCBcInNlZW5cIik7XG5cdGJhbm5lci5hZGRFdmVudExpc3RlbmVyKFwiY2xvc2VcIiwgb25DbG9zZSwgeyBvbmNlOiB0cnVlIH0pO1xuXHRiYW5uZXIuc2hvdygpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVUcmFjayhldmVudDogRXZlbnQpIHtcblx0aWYgKHdpbmRvdy5fbXRkc1RyYWNraW5nPy5lbmFibGVkKSBzZXRUaW1lb3V0KHByb2Nlc3NUcmFjaywgMCwgZXZlbnQpOyAvLyBMZXQgb3RoZXIgZXZlbnRzIHByb2Nlc3MgZmlyc3Rcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1RyYWNrKHsgdHlwZSwgdGFyZ2V0IH06IEV2ZW50KSB7XG5cdGNvbnN0IGVsID0gdHlwZSA9PT0gXCJjbGlja1wiID8gKHRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKENMSUNLUykgOiB0YXJnZXQ7XG5cdGlmICghKGVsIGluc3RhbmNlb2YgRWxlbWVudCkgfHwgZWwuY2xvc2VzdCgnW2RhdGEtYW5hbHl0aWNzPVwiaWdub3JlXCJdJykpXG5cdFx0cmV0dXJuO1xuXG5cdGxldCBhY3Rpb24gPSBcImNsaWNrXCI7XG5cdGxldCBjYXRlZ29yeSA9IFwiQnV0dG9uXCI7XG5cdGxldCBuYW1lID0gbGFiZWwoZWwpIHx8IGhlYWRpbmcoZWwpIHx8IGF0dHIoZWwsIFwiZGF0YS10b29sdGlwXCIpIHx8IFwiXCI7XG5cblx0aWYgKHR5cGUgPT09IFwic3VibWl0XCIpIHtcblx0XHRjYXRlZ29yeSA9IFwiRm9ybVwiO1xuXHRcdGFjdGlvbiA9IFwic3VibWl0XCI7XG5cdFx0bmFtZSA9IG5hbWUgfHwgZG9jdW1lbnQudGl0bGU7XG5cdH0gZWxzZSBpZiAodHlwZSA9PT0gXCJ0b2dnbGVcIikge1xuXHRcdGlmICghZWwubWF0Y2hlcyhcImRpYWxvZzptb2RhbFwiKSkgcmV0dXJuOyAvLyBTa2lwIG5vbi1tb2RhbCBkaWFsb2dzXG5cdFx0Y2F0ZWdvcnkgPSBcIkRpYWxvZ1wiO1xuXHRcdGFjdGlvbiA9IFwib3BlblwiO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT09IFwiY2hhbmdlXCIpIHtcblx0XHRjb25zdCB0eXBlID0gYXR0cihlbCwgXCJ0eXBlXCIpO1xuXHRcdGNvbnN0IGdyb3VwID1cblx0XHRcdHR5cGUgPT09IFwiY2hlY2tib3hcIiB8fCB0eXBlID09PSBcInJhZGlvXCIgPyBlbC5jbG9zZXN0KFwiZmllbGRzZXRcIikgOiBudWxsO1xuXG5cdFx0Y2F0ZWdvcnkgPSBcIkZvcm1cIjtcblx0XHRhY3Rpb24gPSBcImNoYW5nZVwiO1xuXHRcdG5hbWUgPVxuXHRcdFx0bGFiZWwoZ3JvdXAgfHwgZWwpIHx8XG5cdFx0XHR0ZXh0KGdyb3VwPy5xdWVyeVNlbGVjdG9yKFwibGVnZW5kXCIpKSB8fFxuXHRcdFx0dGV4dCgoZWwgYXMgSFRNTElucHV0RWxlbWVudCk/LmxhYmVscz8uWzBdKTtcblx0fSBlbHNlIGlmIChhdHRyKGVsLCBcInJvbGVcIikgPT09IFwidGFiXCIpIHtcblx0XHRjYXRlZ29yeSA9IFwiVGFiXCI7XG5cdFx0YWN0aW9uID0gXCJuYXZpZ2F0ZVwiO1xuXHR9IGVsc2UgaWYgKGF0dHIoZWwsIFwicG9wb3ZlcnRhcmdldFwiKSkge1xuXHRcdGlmICghcG9wb3ZlcihlbCk/Lm1hdGNoZXMoXCI6cG9wb3Zlci1vcGVuXCIpKSByZXR1cm47IC8vIFNraXAgaWYgbm90IG9wZW5cblx0XHRjYXRlZ29yeSA9IGVsLmNsb3Nlc3QoQ1NTX0hFTFBURVhUKSA/IFwiSGVscFRleHRcIiA6IFwiUG9wb3ZlclwiO1xuXHRcdGFjdGlvbiA9IFwib3BlblwiO1xuXHR9IGVsc2UgaWYgKGVsLm5vZGVOYW1lLmVuZHNXaXRoKFwiU1VNTUFSWVwiKSkge1xuXHRcdGlmICghKGVsLnBhcmVudEVsZW1lbnQgYXMgSFRNTERldGFpbHNFbGVtZW50KS5vcGVuKSByZXR1cm47IC8vIFNraXAgaWYgbm90IG9wZW5cblx0XHRjYXRlZ29yeSA9IFwiRGV0YWlsc1wiO1xuXHRcdGFjdGlvbiA9IFwib3BlblwiO1xuXHR9IGVsc2UgaWYgKGF0dHIoZWwsIFwiZGF0YS1jb21tYW5kXCIpID09PSBcInRvZ2dsZS1hcHAtZXhwYW5kZWRcIikge1xuXHRcdGNvbnN0IG9wZW4gPSBzdHlsZShlbCwgXCItLW10ZHMtdG9vbHRpcC1wb3NpdGlvblwiKSA9PT0gXCJub25lXCI7XG5cdFx0Y2F0ZWdvcnkgPSBcIlNpZGViYXJcIjtcblx0XHRhY3Rpb24gPSBvcGVuID8gXCJleHBhbmRcIiA6IFwibWluaW1pemVcIjtcblx0XHRuYW1lID0gKG9wZW4gJiYgYXR0cihlbCwgXCJkYXRhLXRvb2x0aXBcIikpIHx8IHRleHQoZWwpO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoQ1NTX0JSRUFEQ1JVTUJTKSkge1xuXHRcdGNhdGVnb3J5ID0gXCJCcmVhZGNydW1ic1wiO1xuXHRcdGFjdGlvbiA9IFwibmF2aWdhdGVcIjtcblx0fSBlbHNlIGlmIChlbC5jbG9zZXN0KENTU19QQUdJTkFUSU9OKSkge1xuXHRcdGNhdGVnb3J5ID0gXCJQYWdpbnRhdGlvblwiO1xuXHRcdGFjdGlvbiA9IFwibmF2aWdhdGVcIjtcblx0fSBlbHNlIGlmIChlbC5jbG9zZXN0KENTU19DSElQKSkge1xuXHRcdGNhdGVnb3J5ID0gXCJDaGlwXCI7XG5cdFx0YWN0aW9uID0gZWwuaGFzQXR0cmlidXRlKFwiZGF0YS1yZW1vdmFibGVcIikgPyBcInJlbW92ZVwiIDogXCJjbGlja1wiO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoXCJ0aFthcmlhLXNvcnRdXCIpKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIlRhYmxlXCI7XG5cdFx0YWN0aW9uID0gXCJzb3J0XCI7XG5cdH0gZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudCkge1xuXHRcdGNhdGVnb3J5ID0gXCJMaW5rXCI7XG5cdFx0YWN0aW9uID0gZWwucHJvdG9jb2wgPT09IFwibWFpbHRvOlwiID8gXCJlbWFpbFwiIDogXCJuYXZpZ2F0ZVwiO1xuXHRcdGlmIChlbC5oYXNBdHRyaWJ1dGUoXCJkb3dubG9hZFwiKSkgYWN0aW9uID0gXCJkb3dubG9hZFwiO1xuXHRcdGVsc2UgaWYgKGVsLmhhc2ggJiYgZWwuaHJlZi5zdGFydHNXaXRoKGxvY2F0aW9uLmhyZWYuc3BsaXQoXCIjXCIpWzBdKSlcblx0XHRcdGFjdGlvbiA9IFwiYW5jaG9yXCI7IC8vIE9ubHkgdHJhY2sgYXMgYW5jaG9yIGlmIHNhbWUgcGFnZVxuXHR9IGVsc2UgaWYgKGVsLmhhc0F0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIikpIHtcblx0XHRpZiAoYXR0cihlbCwgXCJhcmlhLWV4cGFuZGVkXCIpICE9PSBcInRydWVcIikgcmV0dXJuOyAvLyBTa2lwIGlmIG5vdCBvcGVuXG5cdFx0Y2F0ZWdvcnkgPSBcIkV4cGFuZFwiO1xuXHRcdGFjdGlvbiA9IFwib3BlblwiO1xuXHR9XG5cblx0Ly8gUmVzcGVjdCBhdHRyaWJ1dGVzIGFuZCBzZW5kXG5cdGFuYWx5dGljcyhcImV2ZW50XCIsIHtcblx0XHRjYXRlZ29yeTogYXR0cihlbCwgXCJkYXRhLWFuYWx5dGljcy1jYXRlZ29yeVwiKSA/PyBjYXRlZ29yeSxcblx0XHRhY3Rpb246IGF0dHIoZWwsIFwiZGF0YS1hbmFseXRpY3MtYWN0aW9uXCIpID8/IGFjdGlvbixcblx0XHRuYW1lOiBhdHRyKGVsLCBcImRhdGEtYW5hbHl0aWNzLW5hbWVcIikgPz8gbmFtZSxcblx0fSk7XG59XG5cbi8vIFV0aWxpdGllc1xuY29uc3QgdGV4dCA9IChlbD86IEVsZW1lbnQgfCBudWxsKSA9PiBlbD8udGV4dENvbnRlbnQ/LnRyaW0oKSB8fCBcIlwiO1xuY29uc3QgbGFiZWwgPSAoZWw/OiBFbGVtZW50IHwgbnVsbCkgPT4gKGVsICYmIGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiKSkgfHwgXCJcIjtcbmNvbnN0IHBvcG92ZXIgPSAoZWw6IEVsZW1lbnQpID0+XG5cdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGF0dHIoZWwsIFwicG9wb3ZlcnRhcmdldFwiKSB8fCBcIlwiKTtcbmNvbnN0IHN0eWxlID0gKGVsOiBFbGVtZW50LCBrZXk6IHN0cmluZykgPT5cblx0d2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLmdldFByb3BlcnR5VmFsdWUoa2V5KT8udHJpbSgpO1xuY29uc3QgaGVhZGluZyA9IChlbDogRWxlbWVudCkgPT4ge1xuXHRjb25zdCBib2R5ID0gdGV4dChlbCk7XG5cdGNvbnN0IGhlYWQgPSB0ZXh0KGVsLnF1ZXJ5U2VsZWN0b3IoXCJoMSxoMixoMyxoNCxoNSxoNlwiKSk7IC8vIE5vdGU6IGhlYWQgbWlnaHQgYmUgZW1wdHkgc3RyaW5nICcnXG5cdHJldHVybiAoYm9keS5zdGFydHNXaXRoKGhlYWQpICYmIGhlYWQpIHx8IGJvZHkuc2xpY2UoMCwgMTAwKS50cmltKCk7IC8vIExpbWl0IHRvIDEwMCBjaGFyYWN0ZXJzXG59O1xuXG5vbkxvYWRlZCgoKSA9PiBvbihkb2N1bWVudCwgRVZFTlRTLCBoYW5kbGVUcmFjaywgUVVJQ0tfRVZFTlQpKTtcbiIsImlmIChcblx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHR3aW5kb3cuQ1NTU3R5bGVTaGVldCAmJlxuXHRkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHNcbilcblx0KCgpID0+IHtcblx0XHRjb25zdCBrZXkgPSBcIi0tbXRkcy1hcHAtZXhwYW5kZWRcIjtcblx0XHRjb25zdCBzaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cdFx0Y29uc3QgcHJldiA9ICgpID0+ICF3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KT8uaW5jbHVkZXMoXCJmYWxzZVwiKTtcblxuXHRcdGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKHNoZWV0KTtcblx0XHR3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkID0gKGZvcmNlKSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBuZXh0ID0gZm9yY2UgPz8gIXByZXYoKTtcblx0XHRcdFx0c2hlZXQucmVwbGFjZVN5bmM/LihgOnJvb3QgeyAke2tleX06IHZhcigke2tleX0tLSR7bmV4dH0pfWApO1xuXHRcdFx0XHR3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBuZXh0KTtcblx0XHRcdH0gY2F0Y2ggKF9lcnIpIHt9IC8vIGxvY2FsU3RvcmFnZSBpcyBmdWxsIG9yIHJlcGxhY2VTeW5jIGlzIG5vdCBzdXBwb3J0ZWRcblx0XHR9O1xuXG5cdFx0Ly8gU2V0IGFuZCBzdG9yZSBpbml0aWFsIHN0YXRlXG5cdFx0d2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZChwcmV2KCkpO1xuXHR9KSgpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGRlYm91bmNlLCBvbiwgb25Mb2FkZWQsIG9uTXV0YXRpb24sIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgXCIuL2FwcC10b2dnbGVcIjtcblxuY29uc3QgQ1NTX0FQUCA9IHN0eWxlcy5hcHAuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1NUSUNLWSA9IHN0eWxlcy5zdGlja3kuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1RPR0dMRSA9ICdbZGF0YS1jb21tYW5kPVwidG9nZ2xlLWFwcC1leHBhbmRlZFwiXSc7XG5jb25zdCBDU1NfU0lERUJBUiA9IGAuJHtDU1NfQVBQfSA+IGRpYWxvZywuJHtDU1NfQVBQfSBkaWFsb2cgfiBtYWluYDtcblxuY29uc3QgdXNlVHJhbnNpdGlvbiA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xuXHRpZiAoIWRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24pIGNhbGxiYWNrKCk7XG5cdGVsc2UgZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbihjYWxsYmFjayk7XG59O1xuXG5leHBvcnQgY29uc3QgdG9nZ2xlQXBwRXhwYW5kZWQgPSAoZm9yY2U/OiBib29sZWFuKSA9PlxuXHQvLyBAdHMtZXhwZWN0LWVycm9yIHdpbmRvdy5tdGRzQXBwVG9nZ2xlIGNvbWVzIGZyb20gYXBwLXRvZ2dsZS5qc1xuXHR1c2VUcmFuc2l0aW9uKCgpID0+IHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQ/Lihmb3JjZSkpO1xuXG5mdW5jdGlvbiBoYW5kbGVBcHBUb2dnbGVDbGljayh7IHRhcmdldDogZWwsIGRlZmF1bHRQcmV2ZW50ZWQ6IHN0b3AgfTogRXZlbnQpIHtcblx0Y29uc3QgbGluayA9IChlbCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKFwiYVwiKTtcblx0aWYgKGxpbms/LmNsb3Nlc3QoXCJkaWFsb2dcIikgJiYgbGluaz8uY2xvc2VzdChDU1NfU0lERUJBUikpXG5cdFx0cmV0dXJuIGNsb3NlU2lkZWJhcigpOyAvLyBDbG9zZSBzaWRlYmFyIGlmIGxpbmsgaXMgY2xpY2tlZCBpbnNpZGUgc2lkZWJhclxuXG5cdGlmIChzdG9wIHx8ICEoZWwgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCkgfHwgIWVsLm1hdGNoZXMoQ1NTX1RPR0dMRSkpXG5cdFx0cmV0dXJuO1xuXHRjb25zdCBpc0Rlc2t0b3AgPSBnZXRDb21wdXRlZFN0eWxlKGVsKS5wb3NpdGlvbiA9PT0gXCJzdGlja3lcIjtcblxuXHRpZiAoaXNEZXNrdG9wKSB0b2dnbGVBcHBFeHBhbmRlZCgpO1xuXHRlbHNlXG5cdFx0dXNlVHJhbnNpdGlvbigoKSA9PiB7XG5cdFx0XHRjb25zdCBzaWRlYmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGlhbG9nRWxlbWVudD4oQ1NTX1NJREVCQVIpO1xuXHRcdFx0c2lkZWJhcj8uc2V0QXR0cmlidXRlKFwiZGF0YS1jbG9zZWRieVwiLCBcImFueVwiKTsgLy8gQWxsb3cgY2xvc2luZyBieSBjbGlja2luZyBvdXRzaWRlXG5cdFx0XHRzaWRlYmFyPy5zaG93TW9kYWwoKTtcblx0XHR9KTtcbn1cblxuZnVuY3Rpb24gY2xvc2VTaWRlYmFyKCkge1xuXHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaWFsb2dFbGVtZW50PihDU1NfU0lERUJBUik/LmNsb3NlKCk7XG59XG5cbi8vIFNjcm9sbCBzdGF0ZVxubGV0IE1JTl9ZID0gMDsgLy8gT2Zmc2V0IHRvIGF2b2lkIHNjcm9sbCBqdW1wIHdoZW4gc3RpY2t5IGlzIHNldCB0byByZWxhdGl2ZVxubGV0IFNDUk9MTF9VUDogYm9vbGVhbjtcbmxldCBTVElDSyA9IDA7IC8vIC0xID0gc3RpY2sgdG9wLCAwID0gcmVsYXRpdmUsIDEgPSBzdGljayBib3R0b21cbmxldCBTVElDS19FTDogSFRNTEVsZW1lbnQ7XG5sZXQgU1RJQ0tfSCA9IDA7XG5sZXQgU1RJQ0tfWSA9IDA7XG5sZXQgU1RVQ0sgPSBmYWxzZTsgLy8gVXNlZCB0byBmaWd1cmUgaWYgbmF2IGlzIGxhcmdlciB0aGFuIHZpZXdwb3J0XG5sZXQgV0lOX0ggPSAwO1xubGV0IFdJTl9ZID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oW3N0aWNreV06IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdFNUSUNLX0VMID0gc3RpY2t5O1xuXHRoYW5kbGVBcHBTY3JvbGwoKTsgLy8gUnVuIG9uIGNvbm5lY3Rcbn1cblxuZnVuY3Rpb24gaGFuZGxlQXBwU2Nyb2xsKCkge1xuXHRpZiAoIVNUSUNLX0VMPy5pc0Nvbm5lY3RlZCkgcmV0dXJuO1xuXHRjb25zdCBORVhUX1kgPSB3aW5kb3cuc2Nyb2xsWTtcblx0Y29uc3QgTkVYVF9VUCA9IE5FWFRfWSA8IFdJTl9ZO1xuXHRXSU5fWSA9IE5FWFRfWTtcblxuXHQvLyBPbmx5IGNhbGN1bGF0ZSBpZiBzY3JvbGwgZGlyZWN0aW9uIGhhcyBjaGFuZ2VkXG5cdGlmIChORVhUX1VQICE9PSBTQ1JPTExfVVApIHtcblx0XHRNSU5fWSA9IChTVElDS19FTC5wYXJlbnRFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgfHwgMCkgKyBXSU5fWTtcblx0XHRTQ1JPTExfVVAgPSBORVhUX1VQO1xuXHRcdFNUSUNLX0ggPSBTVElDS19FTC5vZmZzZXRIZWlnaHQ7XG5cdFx0U1RJQ0tfWSA9IFNUSUNLX0VMLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIFdJTl9ZO1xuXHRcdFNUVUNLID0gU1RJQ0tfRUwub2Zmc2V0SGVpZ2h0IDw9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0XHRXSU5fSCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0fVxuXG5cdGlmIChTVElDSyA9PT0gLTEgJiYgU1RVQ0spIHJldHVybjsgLy8gQWxsd2F5cyBzdGlja3kgd2hlbiBzaWRlYmFyIGlzIHNtYWxsZXIgdGhhbiB2aWV3cG9ydFxuXHRpZiAoU1RJQ0sgIT09IC0xICYmIChTVFVDSyB8fCAoU0NST0xMX1VQICYmIFdJTl9ZIDw9IFNUSUNLX1kpKSkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJzdGlja3lcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBcIjBweFwiKTtcblx0XHRTVElDSyA9IC0xOyAvLyBOb3Qgc3RpY2tpbmcgdG8gdG9wIGFuZCBzaWRlYmFyIGlzIHNtYWxsZXIgdGhhbiB2aWV3cG9ydCBvciBzY3JvbGxpbmcgdXBcblx0fSBlbHNlIGlmIChTVElDSyA9PT0gLTEgJiYgIVNDUk9MTF9VUCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJyZWxhdGl2ZVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke01hdGgubWF4KDAsIFdJTl9ZIC0gTUlOX1kpfXB4YCk7XG5cdFx0U1RJQ0sgPSAwOyAvLyBTdGlja2luZyB0byB0b3AgYW5kIHNjcm9sbGluZyBkb3duXG5cdH0gZWxzZSBpZiAoU1RJQ0sgIT09IDEgJiYgIVNDUk9MTF9VUCAmJiBXSU5fWSArIFdJTl9IID49IFNUSUNLX1kgKyBTVElDS19IKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInN0aWNreVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke1dJTl9IIC0gU1RJQ0tfSH1weGApO1xuXHRcdFNUSUNLID0gMTsgLy8gTm90IHN0aWNraW5nIHRvIGJvdHRvbSBhbmQgc2Nyb2xsaW5nIGRvd25cblx0fSBlbHNlIGlmIChTVElDSyA9PT0gMSAmJiBTQ1JPTExfVVApIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwicmVsYXRpdmVcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtTVElDS19ZIC0gTUlOX1l9cHhgKTtcblx0XHRTVElDSyA9IDA7IC8vIFN0aWNraW5nIHRvIGJvdHRvbSBhbmQgc2Nyb2xsaW5nIHVwXG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX1NUSUNLWSwgaGFuZGxlTXV0YXRpb24pO1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVBcHBUb2dnbGVDbGljaywgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwicmVzaXplXCIsIGRlYm91bmNlKGNsb3NlU2lkZWJhciwgMTAwKSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwic2Nyb2xsXCIsIGhhbmRsZUFwcFNjcm9sbCwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCJjb25zdCBnZXRTdGVwcyA9IChcblx0bm93OiBudW1iZXIsXG5cdG1heDogbnVtYmVyLFxuXHRzaG93ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuKSA9PiB7XG5cdGNvbnN0IG9mZnNldCA9IChzaG93IC0gMSkgLyAyO1xuXHRjb25zdCBzdGFydCA9IE1hdGgubWF4KE1hdGgubWluKG5vdyAtIE1hdGguZmxvb3Iob2Zmc2V0KSwgbWF4IC0gc2hvdyArIDEpLCAxKTtcblx0Y29uc3QgZW5kID0gTWF0aC5taW4oTWF0aC5tYXgobm93ICsgTWF0aC5jZWlsKG9mZnNldCksIHNob3cpLCBtYXgpO1xuXHRjb25zdCBwYWdlcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGVuZCArIDEgLSBzdGFydCB9LCAoXywgaSkgPT4gaSArIHN0YXJ0KTtcblxuXHRpZiAoc2hvdyA+IDQgJiYgc3RhcnQgPiAxKSBwYWdlcy5zcGxpY2UoMCwgMiwgMSwgMCk7XG5cdGlmIChzaG93ID4gMyAmJiBlbmQgPCBtYXgpIHBhZ2VzLnNwbGljZSgtMiwgMiwgMCwgbWF4KTtcblx0cmV0dXJuIHBhZ2VzO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhZ2luYXRpb24gPSAoeyBjdXJyZW50ID0gMSwgdG90YWwgPSAxMCwgc2hvdyA9IDcgfSkgPT4gKHtcblx0cHJldjogY3VycmVudCA+IDEgPyBjdXJyZW50IC0gMSA6IDAsXG5cdG5leHQ6IGN1cnJlbnQgPCB0b3RhbCA/IGN1cnJlbnQgKyAxIDogMCxcblx0cGFnZXM6IGdldFN0ZXBzKGN1cnJlbnQsIHRvdGFsLCBzaG93KS5tYXAoKHBhZ2UsIGluZGV4KSA9PiAoe1xuXHRcdGN1cnJlbnQ6IHBhZ2UgPT09IGN1cnJlbnQgJiYgKFwicGFnZVwiIGFzIGNvbnN0KSxcblx0XHRrZXk6IGBrZXktJHtwYWdlfS0ke2luZGV4fWAsXG5cdFx0cGFnZSxcblx0fSkpLFxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0JSRUFEQ1JVTUJTID0gc3R5bGVzLmJyZWFkY3J1bWJzLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlQnJlYWRjcnVtYnNNdXRhdGlvbihicmVhZGNydW1iczogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCBicmVhZGN1bWJzIG9mIGJyZWFkY3J1bWJzKVxuXHRcdGJyZWFkY3VtYnMucXVlcnlTZWxlY3RvckFsbChcImxpIGFcIikuZm9yRWFjaCgoY3J1bWIsIGluZGV4LCB7IGxlbmd0aCB9KSA9PiB7XG5cdFx0XHRhdHRyKGNydW1iLCBcImFyaWEtY3VycmVudFwiLCBpbmRleCA9PT0gbGVuZ3RoIC0gMSA/IFwicGFnZVwiIDogbnVsbCk7XG5cdFx0fSk7XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRcdENTU19CUkVBRENSVU1CUyxcblx0XHRoYW5kbGVCcmVhZGNydW1ic011dGF0aW9uLFxuXHQpLFxuKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRhdHRyLFxuXHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyLFxuXHRJU19CUk9XU0VSLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdFFVSUNLX0VWRU5ULFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0RJQUxPRyA9IHN0eWxlcy5kaWFsb2cuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgRElBTE9HUyA9IElTX0JST1dTRVJcblx0PyAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcblx0XHRcdENTU19ESUFMT0csXG5cdFx0KSBhcyBIVE1MQ29sbGVjdGlvbk9mPEhUTUxEaWFsb2dFbGVtZW50Pilcblx0OiBbXTtcblxuY29uc3QgaGFuZGxlTW9kYWwgPSAoKSA9PiB7XG5cdGZvciAoY29uc3QgZGlhbG9nIG9mIERJQUxPR1MpXG5cdFx0aWYgKGRpYWxvZy5pc0Nvbm5lY3RlZCAmJiBkaWFsb2cuc2hvd01vZGFsICYmIGRpYWxvZy5jbG9zZSkge1xuXHRcdFx0aWYgKGRpYWxvZy5tYXRjaGVzKCdbb3Blbl06bm90KFtkYXRhLW1vZGFsPVwiZmFsc2VcIl0pOm5vdCg6bW9kYWwpJykpIHtcblx0XHRcdFx0YXR0cihkaWFsb2csIFwib3BlblwiLCBudWxsKTsgLy8gVXNpbmcgYXR0cmlidXRlIGluc3RlYWQgb2YgLmNsb3NlIHRvIGF2b2lkIGBjbG9zZWAgZXZlbnRcblx0XHRcdFx0ZGlhbG9nLnNob3dNb2RhbCgpO1xuXHRcdFx0fSBlbHNlIGlmIChkaWFsb2cubWF0Y2hlcyhcIjptb2RhbDpub3QoW29wZW5dKVwiKSkge1xuXHRcdFx0XHRhdHRyKGRpYWxvZywgXCJvcGVuXCIsIFwiXCIpOyAvLyBTZXQgYXMgb3BlblxuXHRcdFx0XHRkaWFsb2cuY2xvc2UoKTsgLy8gU28gd2UgY29ycmVjbHR5IGNhbiBjYWxsIC5jbG9zZSwgcmVtb3ZpbmcgPGRpYWxvZz4gZnJvbSAjdG9wLWxheWVyXG5cdFx0XHR9XG5cdFx0fVxufTtcblxuY29uc3QgaGFuZGxlRGlhbG9nQ2xpY2sgPSAoe1xuXHRjbGllbnRYOiB4LFxuXHRjbGllbnRZOiB5LFxuXHR0YXJnZXQ6IGVsLFxufTogTW91c2VFdmVudCkgPT4ge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRGlhbG9nRWxlbWVudCAmJiBhdHRyKGVsLCBcImRhdGEtY2xvc2VkYnlcIikgPT09IFwiYW55XCIpIHtcblx0XHRjb25zdCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCB9ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0Y29uc3QgaXNJbnNpZGUgPSB0b3AgPD0geSAmJiB5IDw9IGJvdHRvbSAmJiBsZWZ0IDw9IHggJiYgeCA8PSByaWdodDtcblx0XHRpZiAoIWlzSW5zaWRlKSByZXR1cm4gZWwuY2xvc2UoKTtcblx0fVxuXHRjb25zdCBkaWFsb2cgPSAoZWwgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImRpYWxvZ1wiKTtcblx0Y29uc3QgY2xvc2UgPSBkaWFsb2cgJiYgKGVsIGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oJ1tkYXRhLWNvbW1hbmQ9XCJjbG9zZVwiXScpO1xuXHRpZiAoY2xvc2UpIGRpYWxvZy5jbG9zZSgpO1xufTtcblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVEaWFsb2dDbGljayBhcyBFdmVudExpc3RlbmVyLCBRVUlDS19FVkVOVCk7XG5cdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoaGFuZGxlTW9kYWwpLm9ic2VydmUoXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRcdHtcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogW1wib3BlblwiXSxcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdH0sXG5cdCk7XG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbiwgb25Mb2FkZWQsIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9zdW1tYXJ5SW5qZWN0KGV2ZW50OiBFdmVudCAmIHsgYW5pbWF0aW9uTmFtZT86IHN0cmluZyB9KSB7XG5cdGlmIChldmVudC5hbmltYXRpb25OYW1lICE9PSBzdHlsZXMuX2Vycm9yc3VtbWFyeSkgcmV0dXJuO1xuXHRjb25zdCBmaXJzdCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmZpcnN0RWxlbWVudENoaWxkO1xuXG5cdGlmIChmaXJzdCBpbnN0YW5jZW9mIEhUTUxIZWFkaW5nRWxlbWVudCkge1xuXHRcdGF0dHIoZmlyc3QsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcblx0XHRmaXJzdC5mb2N1cygpOyAvLyBBdXRvZm9jdXMgZmlyc3QgaGVhZGluZ1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uKGRvY3VtZW50LCBcImFuaW1hdGlvbmVuZFwiLCBoYW5kbGVFcnJvc3VtbWFyeUluamVjdCwgUVVJQ0tfRVZFTlQpLFxuKTtcbiIsInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcblxuLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBTQUZFX0xBQkVMTEVEQlkgPSBgJHtJU19BTkRST0lEID8gXCJkYXRhXCIgOiBcImFyaWFcIn0tbGFiZWxsZWRieWA7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIEZPQ1VTX09VVExJTkUgPSBcIm91dGxpbmU6IDFweCBkb3R0ZWQ7IG91dGxpbmU6IDVweCBhdXRvIEhpZ2hsaWdodDsgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yXCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXR0YWNoU3R5bGUgPSAoZWxlbWVudCwgY3NzKSA9PiBlbGVtZW50LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gIC8vIFVubmFtZWQgc2xvdCBkb2VzIGF1dG9tYXRpY2FsbHkgcmVuZGVyIGFsbCB0b3AgZWxlbWVudCBub2Rlc1xuICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgY3NzKVxuKTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoX2Vycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgTElWRTtcbnZhciBMSVZFX1NSX0ZJWCA9IDA7XG52YXIgc3BlYWsgPSAodGV4dCkgPT4ge1xuICBpZiAoIUxJVkUpIHtcbiAgICBMSVZFID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBMSVZFLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gICAgYXR0cihMSVZFLCBcImFyaWEtbGl2ZVwiLCBcImFzc2VydGl2ZVwiKTtcbiAgfVxuICBpZiAoIUxJVkUuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKExJVkUpO1xuICBpZiAodGV4dCkgTElWRS50ZXh0Q29udGVudCA9IGAke3RleHR9JHtMSVZFX1NSX0ZJWCsrICUgMiA/IFwiXFx4QTBcIiA6IFwiXCJ9YDtcbn07XG52YXIgc2V0VmFsdWUgPSAoaW5wdXQsIGRhdGEsIHR5cGUgPSBcIlwiKSA9PiB7XG4gIHZhciBfYTIsIF9iO1xuICBjb25zdCBldmVudCA9IHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUsIGRhdGEsIGlucHV0VHlwZTogdHlwZSB9O1xuICBjb25zdCBwcm90byA9IEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiYmVmb3JlaW5wdXRcIiwgZXZlbnQpKTtcbiAgKF9iID0gKF9hMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIFwidmFsdWVcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChpbnB1dCwgZGF0YSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJpbnB1dFwiLCBldmVudCkpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImNoYW5nZVwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xufTtcbnZhciBJU19QUkVTUyA9IGZhbHNlO1xudmFyIGlzTW91c2VEb3duID0gKGV2ZW50KSA9PiB7XG4gIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm1vdXNldXBcIikgSVNfUFJFU1MgPSBmYWxzZTtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2Vkb3duXCIpIHtcbiAgICBJU19QUkVTUyA9IHRydWU7XG4gICAgb24oZG9jdW1lbnQsIFwibW91c2V1cFwiLCBpc01vdXNlRG93biwgeyBvbmNlOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiBJU19QUkVTUztcbn07XG5cbi8vIHUtb3B0aW9uLnRzXG52YXIgRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG52YXIgU0VMRUNURUQgPSBcInNlbGVjdGVkXCI7XG52YXIgVUhUTUxPcHRpb25FbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW0RJU0FCTEVELCBTRUxFQ1RFRF07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCFJU19JT1MpIHRoaXMudGFiSW5kZXggPSAtMTtcbiAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKFwicm9sZVwiKSkgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJvcHRpb25cIik7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtZGlzYWJsZWRcIiwgYCR7dGhpcy5kaXNhYmxlZH1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1zZWxlY3RlZFwiLCBgJHt0aGlzLnNlbGVjdGVkfWApO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB3aGV0aGVyIHRoZSBvcHRpb24gaW4gdGhlIGxpc3QgYm94IGlzIHRoZSBkZWZhdWx0IGl0ZW0uICovXG4gIGdldCBkZWZhdWx0U2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXNbU0VMRUNURURdO1xuICB9XG4gIHNldCBkZWZhdWx0U2VsZWN0ZWQodmFsdWUpIHtcbiAgICB0aGlzW1NFTEVDVEVEXSA9IHZhbHVlO1xuICB9XG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBESVNBQkxFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBESVNBQkxFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyBhIHJlZmVyZW5jZSB0byB0aGUgZm9ybSB0aGF0IHRoZSBvYmplY3QgaXMgZW1iZWRkZWQgaW4uICovXG4gIGdldCBmb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJmb3JtXCIpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiBvcHRpb24gaW4gYSBsaXN0IGJveC4gKi9cbiAgZ2V0IGluZGV4KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLigoX2EyID0gdGhpcy5wYXJlbnRFbGVtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLm9wdGlvbnMpIHx8IFt0aGlzXVxuICAgIF0uaW5kZXhPZih0aGlzKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgYSB2YWx1ZSB0aGF0IHlvdSBjYW4gdXNlIHRvIGltcGxlbWVudCB5b3VyIG93biBsYWJlbCBmdW5jdGlvbmFsaXR5IGZvciB0aGUgb2JqZWN0LiAqL1xuICBnZXQgbGFiZWwoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKF9hMiA9IGF0dHIodGhpcywgXCJsYWJlbFwiKSkgIT0gbnVsbCA/IF9hMiA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgbGFiZWwodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwibGFiZWxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBTRUxFQ1RFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBTRUxFQ1RFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSB0ZXh0IHN0cmluZyBzcGVjaWZpZWQgYnkgdGhlIG9wdGlvbiB0YWcuICovXG4gIGdldCB0ZXh0KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gdGhpcy50ZXh0Q29udGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIH1cbiAgc2V0IHRleHQodGV4dCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB0ZXh0O1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdmFsdWUgd2hpY2ggaXMgcmV0dXJuZWQgdG8gdGhlIHNlcnZlciB3aGVuIHRoZSBmb3JtIGNvbnRyb2wgaXMgc3VibWl0dGVkLiAqL1xuICBnZXQgdmFsdWUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKF9hMiA9IGF0dHIodGhpcywgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1vcHRpb25cIiwgVUhUTUxPcHRpb25FbGVtZW50KTtcblxuLy8gdS1kYXRhbGlzdC50c1xudmFyIExJVkVfVElNRVI7XG52YXIgSU5QVVRfREVCT1VOQ0UgPSAwO1xudmFyIElTX01PQklMRSA9IElTX0lPUyB8fCBJU19BTkRST0lEO1xudmFyIEVWRU5UUyA9IFwiY2xpY2ssZm9jdXNvdXQsaW5wdXQsa2V5ZG93bixtb3VzZWRvd24sbW91c2V1cFwiO1xudmFyIEVWRU5UU19JTlBVVCA9IFwiZm9jdXMsZm9jdXNpbixibHVyLGZvY3Vzb3V0XCI7XG52YXIgVEVYVFMgPSB7XG4gIHNpbmd1bGFyOiBcIiVkIGhpdFwiLFxuICBwbHVyYWw6IFwiJWQgaGl0c1wiXG59O1xudmFyIFVIVE1MRGF0YUxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3RleHRzID0gX19zcHJlYWRWYWx1ZXMoe30sIFRFWFRTKTtcbiAgICB0aGlzLl92YWx1ZSA9IFwiXCI7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgYCR7RElTUExBWV9CTE9DS31cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbikgeyBkaXNwbGF5OiBibG9jazsgY3Vyc29yOiBwb2ludGVyIH1cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbjpmb2N1cykgeyAke0ZPQ1VTX09VVExJTkV9IH1cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvblthcmlhLWhpZGRlbj1cInRydWVcIl0pLFxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uW2Rpc2FibGVkXSksXG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb25baGlkZGVuXSkgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQgfWBcbiAgICApO1xuICB9XG4gIC8vIFVzZWQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBhbm5vdW5jZW1lbnRzXG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJpZFwiLCAuLi5PYmplY3Qua2V5cyhURVhUUykubWFwKChrZXkpID0+IGBkYXRhLXNyLSR7a2V5fWApXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmhpZGRlbiA9IHRydWU7XG4gICAgdGhpcy5fcm9vdCA9IGdldFJvb3QodGhpcyk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJsaXN0Ym94XCIpO1xuICAgIGF0dHIodGhpcywgXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuICAgIG9uKHRoaXMuX3Jvb3QsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBvbih0aGlzLl9yb290LCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywge1xuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbXCJkaXNhYmxlZFwiLCBcImhpZGRlblwiLCBcImxhYmVsXCIsIFwidmFsdWVcIl0sXG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLl9yb290IHx8IHRoaXMsIFwiZm9jdXNcIiwgdGhpcywgdHJ1ZSk7XG4gICAgb2ZmKHRoaXMuX3Jvb3QgfHwgdGhpcywgXCJmb2N1c2luXCIsIHRoaXMpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICAgIGRpc2Nvbm5lY3RJbnB1dCh0aGlzKTtcbiAgICB0aGlzLl9yb290ID0gdm9pZCAwO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBfcHJldiwgbmV4dCkge1xuICAgIGNvbnN0IHRleHQgPSBwcm9wID09IG51bGwgPyB2b2lkIDAgOiBwcm9wLnNwbGl0KFwiZGF0YS1zci1cIilbMV07XG4gICAgY29uc3QgY3NzID0gYGlucHV0W2xpc3Q9XCIke3RoaXMuaWR9XCJdYDtcbiAgICBpZiAoVEVYVFNbdGV4dF0pIHRoaXMuX3RleHRzW3RleHRdID0gbmV4dCB8fCBURVhUU1t0ZXh0XTtcbiAgICBlbHNlIGlmICh0aGlzLl9yb290KSB7XG4gICAgICBpZiAodGhpcy5faW5wdXQpIHNldHVwSW5wdXQodGhpcywgdGhpcy5faW5wdXQpO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiB0aGlzLl9yb290LnF1ZXJ5U2VsZWN0b3JBbGwoY3NzKSlcbiAgICAgICAgc2V0dXBJbnB1dCh0aGlzLCBpbnB1dCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgeyB0YXJnZXQsIHR5cGUgfSA9IGV2ZW50O1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKHR5cGUgPT09IFwiY2xpY2tcIikgb25DbGljayh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiZm9jdXNcIiB8fCB0eXBlID09PSBcImZvY3VzaW5cIikgb25Gb2N1cyh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiYmx1clwiIHx8IHR5cGUgPT09IFwiZm9jdXNvdXRcIikgb25CbHVyKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIG9uS2V5RG93bih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIgJiYgdGhpcy5jb250YWlucyh0YXJnZXQpKVxuICAgICAgaXNNb3VzZURvd24oZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcIm11dGF0aW9uXCIgfHwgdHlwZSA9PT0gXCJpbnB1dFwiKSB7XG4gICAgICBjbGVhclRpbWVvdXQoSU5QVVRfREVCT1VOQ0UpO1xuICAgICAgSU5QVVRfREVCT1VOQ0UgPSBzZXRUaW1lb3V0KG9uSW5wdXQsIDAsIHRoaXMsIGV2ZW50KTtcbiAgICB9XG4gIH1cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ1LW9wdGlvblwiKTtcbiAgfVxufTtcbnZhciBpc0Rpc2FibGVkID0gKGlucHV0KSA9PiAoaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IGlucHV0LmRpc2FibGVkKSB8fCAoaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IGlucHV0LnJlYWRPbmx5KSB8fCBmYWxzZTtcbnZhciBzZXRFeHBhbmRlZCA9IChzZWxmLCBvcGVuKSA9PiB7XG4gIHZhciBfYTIsIF9iLCBfYztcbiAgaWYgKHNlbGYuaGlkZGVuICE9PSBvcGVuKSByZXR1cm47XG4gIHNlbGYuaGlkZGVuID0gaXNEaXNhYmxlZChzZWxmID09IG51bGwgPyB2b2lkIDAgOiBzZWxmLl9pbnB1dCkgfHwgIW9wZW47XG4gIChfYTIgPSBtdXRhdGlvbk9ic2VydmVyKHNlbGYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRha2VSZWNvcmRzKCk7XG4gIGNvbnN0IGlzUG9wb3ZlciA9IHNlbGYuaXNDb25uZWN0ZWQgJiYgc2VsZi5wb3BvdmVyICYmICgoX2IgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmlzQ29ubmVjdGVkKSAmJiAoKF9jID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYy5wb3BvdmVyVGFyZ2V0RWxlbWVudCkgPT09IHNlbGY7XG4gIGlmIChzZWxmLl9pbnB1dCkgc2V0dXBJbnB1dChzZWxmLCBzZWxmLl9pbnB1dCwgb3Blbik7XG4gIGlmIChpc1BvcG92ZXIpIGF0dHIoc2VsZiwgXCJwb3BvdmVyXCIsIFwibWFudWFsXCIpO1xuICBpZiAoaXNQb3BvdmVyKSBzZWxmLnRvZ2dsZVBvcG92ZXIob3Blbik7XG4gIGlmIChvcGVuKSBvbklucHV0KHNlbGYpO1xufTtcbnZhciBkaXNjb25uZWN0SW5wdXQgPSAoc2VsZikgPT4ge1xuICBpZiAoIXNlbGYuX2lucHV0KSByZXR1cm47XG4gIG9mZihzZWxmLl9pbnB1dCB8fCBzZWxmLCBFVkVOVFNfSU5QVVQsIHNlbGYpO1xuICBvZmYoc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gIHNlbGYuX2lucHV0ID0gdm9pZCAwO1xufTtcbnZhciBzZXR1cElucHV0ID0gKHNlbGYsIGlucHV0LCBvcGVuID0gZmFsc2UpID0+IHtcbiAgaWYgKHNlbGYucG9wb3ZlcikgYXR0cihpbnB1dCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKHNlbGYpKTtcbiAgb24oaW5wdXQsIEVWRU5UU19JTlBVVCwgc2VsZiwgdHJ1ZSk7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1hdXRvY29tcGxldGVcIiwgXCJsaXN0XCIpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtY29udHJvbHNcIiwgdXNlSWQoc2VsZikpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7IUlTX01PQklMRSB8fCBvcGVufWApO1xuICBhdHRyKGlucHV0LCBcImF1dG9jb21wbGV0ZVwiLCBcIm9mZlwiKTtcbiAgYXR0cihpbnB1dCwgXCJyb2xlXCIsIGlzRGlzYWJsZWQoaW5wdXQpID8gbnVsbCA6IFwiY29tYm9ib3hcIik7XG59O1xudmFyIG9uRm9jdXMgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgaXNJbnB1dCA9IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQ7XG4gIGlmIChpc0lucHV0ICYmIGV2ZW50LmlzVHJ1c3RlZCkgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIGlmIChzZWxmLl9pbnB1dCAhPT0gZXZlbnQudGFyZ2V0ICYmIGlzSW5wdXQgJiYgZXZlbnQudGFyZ2V0Lmxpc3QgPT09IHNlbGYpIHtcbiAgICBpZiAoc2VsZi5faW5wdXQpIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgICBzZWxmLl9pbnB1dCA9IGV2ZW50LnRhcmdldDtcbiAgICBzZWxmLl9pbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNcIikpO1xuICAgIHNlbGYuX2lucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJmb2N1c2luXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgYXR0cihzZWxmLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKChfYTIgPSBzZWxmLl9pbnB1dC5sYWJlbHMpID09IG51bGwgPyB2b2lkIDAgOiBfYTJbMF0pKTtcbiAgICBvbihzZWxmLl9yb290IHx8IHNlbGYsIEVWRU5UUywgc2VsZik7XG4gICAgc2V0RXhwYW5kZWQoc2VsZiwgYXR0cihzZWxmLl9pbnB1dCwgXCJpbnB1dG1vZGVcIikgIT09IFwibm9uZVwiKTtcbiAgICBzcGVhaygpO1xuICB9XG59O1xudmFyIG9uQmx1ciA9IChzZWxmLCBldmVudCkgPT4ge1xuICBpZiAoIUlTX0FORFJPSUQgJiYgIWlzTW91c2VEb3duKCkgJiYgc2VsZi5faW5wdXQpXG4gICAgc2V0VGltZW91dChvbkJsdXJyZWQsIDAsIHNlbGYpO1xuICBpZiAoZXZlbnQudGFyZ2V0ID09PSBzZWxmLl9pbnB1dCAmJiBldmVudC5pc1RydXN0ZWQpXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59O1xudmFyIG9uQmx1cnJlZCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSAoKF9hMiA9IHNlbGYuX3Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuYWN0aXZlRWxlbWVudCkgfHwgbnVsbDtcbiAgY29uc3QgaW5wdXQgPSBzZWxmLl9pbnB1dDtcbiAgaWYgKGlucHV0ICYmIGlucHV0ICE9PSByZWxhdGVkVGFyZ2V0ICYmICFzZWxmLmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImJsdXJcIiwgeyByZWxhdGVkVGFyZ2V0IH0pKTtcbiAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEZvY3VzRXZlbnQoXCJmb2N1c291dFwiLCB7IGJ1YmJsZXM6IHRydWUsIHJlbGF0ZWRUYXJnZXQgfSlcbiAgICApO1xuICAgIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgfVxufTtcbnZhciBvbkNsaWNrID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9pbnB1dCB8fCBzZWxmLl9pbnB1dCA9PT0gdGFyZ2V0KSByZXR1cm4gc2V0RXhwYW5kZWQoc2VsZiwgdHJ1ZSk7XG4gIGZvciAoY29uc3Qgb3B0IG9mIHNlbGYub3B0aW9ucylcbiAgICBpZiAob3B0LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgIGlmIChhdHRyKHNlbGYsIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIikgIT09IFwidHJ1ZVwiKSB7XG4gICAgICAgIChfYTIgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xuICAgICAgICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2V0VmFsdWUoc2VsZi5faW5wdXQsIG9wdC52YWx1ZSk7XG4gICAgfVxuICBpZiAoSVNfQU5EUk9JRCkgb25CbHVycmVkKHNlbGYpO1xufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IGtleSwgdGFyZ2V0LCBhbHRLZXksIGN0cmxLZXksIHNoaWZ0S2V5LCBtZXRhS2V5IH0gPSBlO1xuICBjb25zdCBpc0VzY2FwZSA9IGtleSA9PT0gXCJFc2NhcGVcIiB8fCBrZXkgPT09IFwiRXNjXCI7XG4gIGlmIChhbHRLZXkgfHwgY3RybEtleSB8fCBtZXRhS2V5IHx8IHNoaWZ0S2V5IHx8IGtleSA9PT0gXCJUYWJcIikgcmV0dXJuO1xuICBpZiAoaXNFc2NhcGUgJiYgIXNlbGYuaGlkZGVuKSBlID09IG51bGwgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gIHNldEV4cGFuZGVkKHNlbGYsICFpc0VzY2FwZSk7XG4gIGNvbnN0IG9wdGlvbnMgPSBbLi4uc2VsZi5vcHRpb25zXS5maWx0ZXIoXG4gICAgKGVsKSA9PiBhdHRyKGVsLCBcImFyaWEtaGlkZGVuXCIpICE9PSBcInRydWVcIiAmJiBlbC5vZmZzZXRIZWlnaHRcbiAgKTtcbiAgY29uc3QgcHJldiA9IG9wdGlvbnMuaW5kZXhPZih0YXJnZXQpO1xuICBsZXQgbmV4dCA9IC0xO1xuICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiKSBuZXh0ID0gKHByZXYgKyAxKSAlIG9wdGlvbnMubGVuZ3RoO1xuICBpZiAoa2V5ID09PSBcIkFycm93VXBcIikgbmV4dCA9ICh+cHJldiA/IHByZXYgOiBvcHRpb25zLmxlbmd0aCkgLSAxO1xuICBpZiAofnByZXYpIHtcbiAgICBpZiAoa2V5ID09PSBcIkhvbWVcIiB8fCBrZXkgPT09IFwiUGFnZVVwXCIpIG5leHQgPSAwO1xuICAgIGlmIChrZXkgPT09IFwiRW5kXCIgfHwga2V5ID09PSBcIlBhZ2VEb3duXCIpIG5leHQgPSBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgaWYgKGtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICBvcHRpb25zW3ByZXZdLmNsaWNrKCk7XG4gICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuICBpZiAob3B0aW9uc1tuZXh0XSkgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykgb3B0aW9uLnRhYkluZGV4ID0gLTE7XG4gIGlmIChvcHRpb25zW25leHRdKSBlLnByZXZlbnREZWZhdWx0KCk7XG4gIChfYTIgPSBvcHRpb25zW25leHRdIHx8IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG4gIGlmICghb3B0aW9uc1tuZXh0XSAmJiBrZXkgPT09IFwiQXJyb3dVcFwiKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIHJldHVybiAoX2EzID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTMuc2V0U2VsZWN0aW9uUmFuZ2UoOTk5LCA5OTkpO1xuICAgIH0pO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYsIGUpID0+IHtcbiAgY29uc3QgeyBfdGV4dHMsIF9yb290LCBfaW5wdXQsIG9wdGlvbnMgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gKF9pbnB1dCA9PSBudWxsID8gdm9pZCAwIDogX2lucHV0LnZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBmaWx0ZXIgPSAhc2VsZi5oYXNBdHRyaWJ1dGUoXCJkYXRhLW5vZmlsdGVyXCIpO1xuICBjb25zdCBoaWRkZW4gPSBbXTtcbiAgY29uc3QgdmlzaWJsZSA9IFtdO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKSB7XG4gICAgY29uc3QgaGlkZSA9IG9wdC5kaXNhYmxlZCB8fCBvcHQuaGlkZGVuIHx8IGZpbHRlciAmJiAhb3B0LmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUpO1xuICAgIChoaWRlID8gaGlkZGVuIDogdmlzaWJsZSkucHVzaChvcHQpO1xuICB9XG4gIGZvciAoY29uc3Qgb3B0IG9mIGhpZGRlbikgYXR0cihvcHQsIFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIpO1xuICBmb3IgKGNvbnN0IG9wdCBvZiB2aXNpYmxlKSBhdHRyKG9wdCwgXCJhcmlhLWhpZGRlblwiLCBcImZhbHNlXCIpO1xuICBjb25zdCB0b3RhbCA9IHZpc2libGUubGVuZ3RoO1xuICBjbGVhclRpbWVvdXQoTElWRV9USU1FUik7XG4gIGlmICgoZSA9PSBudWxsID8gdm9pZCAwIDogZS50eXBlKSA9PT0gXCJpbnB1dFwiICYmIHZhbHVlICE9PSBzZWxmLl92YWx1ZSlcbiAgICBMSVZFX1RJTUVSID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gYCR7IXRvdGFsICYmIHNlbGYuaW5uZXJUZXh0LnRyaW0oKSB8fCBgJHtfdGV4dHNbdG90YWwgPT09IDEgPyBcInNpbmd1bGFyXCIgOiBcInBsdXJhbFwiXX1gLnJlcGxhY2UoXCIlZFwiLCBgJHt0b3RhbH1gKX1gO1xuICAgICAgaWYgKCFzZWxmLmhpZGRlbiAmJiAoX3Jvb3QgPT0gbnVsbCA/IHZvaWQgMCA6IF9yb290LmFjdGl2ZUVsZW1lbnQpID09PSBfaW5wdXQpIHNwZWFrKHRleHQpO1xuICAgICAgc2VsZi5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9LCAxZTMpO1xuICBpZiAoSVNfSU9TKVxuICAgIHZpc2libGUuZm9yRWFjaCgob3B0LCBpZHgpID0+IGF0dHIob3B0LCBcInRpdGxlXCIsIGAke2lkeCArIDF9LyR7dG90YWx9YCkpO1xufTtcbmlmIChJU19CUk9XU0VSKVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwibGlzdFwiLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGdldFJvb3QodGhpcykuZ2V0RWxlbWVudEJ5SWQoYXR0cih0aGlzLCBcImxpc3RcIikgfHwgXCJcIik7XG4gICAgfVxuICB9KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtZGF0YWxpc3RcIiwgVUhUTUxEYXRhTGlzdEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERhdGFMaXN0RWxlbWVudCB9O1xuIiwiaW1wb3J0IHsgZmxpcCwgdHlwZSBQbGFjZW1lbnQsIHNoaWZ0LCBzaXplIH0gZnJvbSBcIkBmbG9hdGluZy11aS9kb21cIjtcbmltcG9ydCB7IFVIVE1MQ29tYm9ib3hFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtY29tYm9ib3hcIjtcbmltcG9ydCB7IFVIVE1MRGF0YUxpc3RFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtZGF0YWxpc3RcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRhbmNob3JQb3NpdGlvbixcblx0YXR0cixcblx0aXNJbnB1dExpa2UsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0b25NdXRhdGlvbixcblx0UVVJQ0tfRVZFTlQsXG5cdHVzZUlkLFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0ZJRUxEID0gc3R5bGVzLmZpZWxkLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19WQUxJREFUSU9OUyA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKTtcbmNvbnN0IENTU19WQUxJREFUSU9OID0gQ1NTX1ZBTElEQVRJT05TWzBdO1xuXG5jb25zdCBnZXRUZXh0ID0gKHN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uLCBrZXk6IHN0cmluZykgPT5cblx0c3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShgLS1tdGRzLXRleHQtJHtrZXl9YCk/LnNsaWNlKDEsIC0xKSB8fCBcIlwiOyAvLyBzbGljZSB0byB0cmltIHF1b3Rlc1xuXG5mdW5jdGlvbiBoYW5kbGVGaWVsZE11dGF0aW9uKFxuXHRmaWVsZHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4sXG5cdHZhbGlkYXRlPzogYm9vbGVhbixcbikge1xuXHRmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcylcblx0XHRpZiAoZmllbGQuaXNDb25uZWN0ZWQpIHtcblx0XHRcdGNvbnN0IGxhYmVsczogSFRNTExhYmVsRWxlbWVudFtdID0gW107XG5cdFx0XHRjb25zdCBkZXNjczogRWxlbWVudFtdID0gW107XG5cdFx0XHRjb25zdCB2YWxpZHM6IEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0bGV0IGNvbWJvYm94OiBVSFRNTENvbWJvYm94RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXHRcdFx0bGV0IGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGVsIG9mIGZpZWxkLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSkge1xuXHRcdFx0XHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MTGFiZWxFbGVtZW50KSBsYWJlbHMucHVzaChlbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgVUhUTUxDb21ib2JveEVsZW1lbnQpIGNvbWJvYm94ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSAmJiAhZWwuaGlkZGVuKSBpbnB1dCA9IGVsO1xuXHRcdFx0XHRlbHNlIGlmIChlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLWRlc2NyaXB0aW9uXCIpKSBkZXNjcy5wdXNoKGVsKTtcblx0XHRcdFx0ZWxzZSBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdHZhbGlkID0gYXR0cihlbCwgXCJkYXRhLWNvbG9yXCIpID09PSBcInN1Y2Nlc3NcIiB8fCAhZWwuY2xpZW50SGVpZ2h0OyAvLyBPbmx5IHNldCBpbnZhbGlkIGlmIFZhbGlkYXRpb24gaXMgdmlzaWJsZVxuXHRcdFx0XHRcdHZhbGlkcy5wdXNoKGVsKTtcblx0XHRcdFx0XHRkZXNjcy51bnNoaWZ0KGVsKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxQYXJhZ3JhcGhFbGVtZW50KVxuXHRcdFx0XHRcdGRlc2NzLnNvbWUoKGRlc2MpID0+IGRlc2MuY29udGFpbnMoZWwpKSB8fCBkZXNjcy5wdXNoKGVsKTsgLy8gT25seSBhZGQgaWYgbm90IGFscmVhZHkgaW5zaWRlIGRlc2NyaXB0aW9uXG5cdFx0XHR9XG5cblx0XHRcdGlmIChpbnB1dCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGxhYmVsIG9mIGxhYmVscykgbGFiZWwuaHRtbEZvciA9IHVzZUlkKGlucHV0KTtcblx0XHRcdFx0aWYgKHZhbGlkYXRlICYmIGF0dHIoZmllbGQsIFwiZGF0YS12YWxpZGF0aW9uXCIpID09PSBcImZvcm1cIikge1xuXHRcdFx0XHRcdHZhbGlkID0gaW5wdXQubWF0Y2hlcyhcIjp2YWxpZFwiKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGVsIG9mIHZhbGlkcykgYXR0cihlbCwgXCJoaWRkZW5cIiwgdmFsaWQgPyBcIlwiIDogbnVsbCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVuZGVyQ29tYm9ib3goY29tYm9ib3gpO1xuXHRcdFx0XHRyZW5kZXJDb3VudGVyKGlucHV0KTtcblx0XHRcdFx0cmVuZGVyVGV4dGFyZWFTaXplKGlucHV0KTtcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIGRlc2NzLm1hcCh1c2VJZCkuam9pbihcIiBcIikgfHwgbnVsbCk7IC8vIFJlbW92ZSBpZiBlbXB0eVxuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtaW52YWxpZFwiLCBgJHshdmFsaWR9YCk7XG5cdFx0XHR9XG5cdFx0fVxufVxuXG4vLyBpT1MgZG9lcyBub3Qgc3VwcG9ydCBmaWVsZC1zaXppbmc6IGNvbnRlbnQsIHNvIHdlIG5lZWQgdG8gbWFudWFsbHkgcmVzaXplXG5mdW5jdGlvbiByZW5kZXJUZXh0YXJlYVNpemUodGV4dGFyZWE6IEVsZW1lbnQpIHtcblx0aWYgKHRleHRhcmVhIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuXHRcdHRleHRhcmVhLnN0eWxlLnNldFByb3BlcnR5KFwiLS1tdGRzLXRleHRhcmVhLWhlaWdodFwiLCBcImF1dG9cIik7XG5cdFx0dGV4dGFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG5cdFx0XHRcIi0tbXRkcy10ZXh0YXJlYS1oZWlnaHRcIixcblx0XHRcdGAke3RleHRhcmVhLnNjcm9sbEhlaWdodH1weGAsXG5cdFx0KTtcblx0fVxufVxuXG4vLyBTZXR1cCB0cmFuc2xhdGlvbnMgZnJvbSBDU1MgY3VzdG9tIHByb3BlcnRpZXNcbmZ1bmN0aW9uIHJlbmRlckNvbWJvYm94KGVsOiBVSFRNTENvbWJvYm94RWxlbWVudCB8IG51bGwpIHtcblx0Y29uc3QgeyBjb250cm9sLCBsaXN0IH0gPSBlbCB8fCB7fTtcblxuXHRpZiAoZWwgJiYgbGlzdCAmJiAhZWwuaGFzQXR0cmlidXRlKFwiZGF0YS1zci1hZGRlZFwiKSkge1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1hZGRlZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWFkZGVkXCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItZW1wdHlcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1lbXB0eVwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLWZvdW5kXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtZm91bmRcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1pbnZhbGlkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtaW52YWxpZFwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLW9mXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtb2ZcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1yZW1vdmVcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1yZW1vdmVcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1yZW1vdmVkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtcmVtb3ZlZFwiKSk7XG5cdFx0YXR0cihsaXN0LCBcImRhdGEtc3ItcGx1cmFsXCIsIGdldFRleHQoc3R5bGUsIFwiZGF0YWxpc3QtcGx1cmFsXCIpKTtcblx0XHRhdHRyKGxpc3QsIFwiZGF0YS1zci1zaW5ndWxhclwiLCBnZXRUZXh0KHN0eWxlLCBcImRhdGFsaXN0LXNpbmd1bGFyXCIpKTtcblx0fVxuXHRpZiAobGlzdCAmJiBjb250cm9sICYmICFsaXN0Lmhhc0F0dHJpYnV0ZShcInBvcG92ZXJcIikpIHtcblx0XHRhdHRyKGxpc3QsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcblx0XHRhdHRyKGNvbnRyb2wsIFwicG9wb3ZlcnRhcmdldFwiLCB1c2VJZChsaXN0KSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQ291bnRlcihpbnB1dDogSFRNTElucHV0RWxlbWVudCkge1xuXHRjb25zdCBlbCA9IGlucHV0Py5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdGNvbnN0IGxpbWl0ID0gZWwgJiYgYXR0cihlbCwgXCJkYXRhLWNvdW50XCIpO1xuXG5cdGlmIChlbCAmJiBsaW1pdCkge1xuXHRcdGNvbnN0IHJlbWFpbmRlciA9IE51bWJlcihsaW1pdCkgLSBpbnB1dC52YWx1ZS5sZW5ndGg7XG5cdFx0Y29uc3QgbmV4dEludmFsaWQgPSByZW1haW5kZXIgPCAwO1xuXHRcdGNvbnN0IHByZXZJbnZhbGlkID0gYXR0cihlbCwgXCJhcmlhLWxpdmVcIikgPT09IFwicG9saXRlXCI7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCB8fCBpbnB1dCk7XG5cdFx0Y29uc3Qgb3ZlciA9IGdldFRleHQoc3R5bGUsIFwiY291bnQtb3ZlclwiKTtcblx0XHRjb25zdCB1bmRlciA9IGdldFRleHQoc3R5bGUsIFwiY291bnQtdW5kZXJcIik7XG5cblx0XHRpZiAocHJldkludmFsaWQgIT09IG5leHRJbnZhbGlkKSB7XG5cdFx0XHRhdHRyKGVsLCBcImFyaWEtbGl2ZVwiLCBuZXh0SW52YWxpZCA/IFwicG9saXRlXCIgOiBcIm9mZlwiKTtcblx0XHRcdGZvciAoY29uc3QgY3NzIG9mIENTU19WQUxJREFUSU9OUykgZWwuY2xhc3NMaXN0LnRvZ2dsZShjc3MsIG5leHRJbnZhbGlkKTtcblx0XHR9XG5cdFx0ZWwudGV4dENvbnRlbnQgPSAobmV4dEludmFsaWQgPyBvdmVyIDogdW5kZXIpLnJlcGxhY2UoXG5cdFx0XHRcIiVkXCIsXG5cdFx0XHRgJHtNYXRoLmFicyhyZW1haW5kZXIpfWAsXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBoYW5kbGVGaWVsZFRvZ2dsZShldmVudDogRXZlbnQgJiB7IG5ld1N0YXRlPzogc3RyaW5nIH0pIHtcblx0aWYgKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIFVIVE1MRGF0YUxpc3RFbGVtZW50KSB7XG5cdFx0Y29uc3QgbGlzdCA9IGV2ZW50LnRhcmdldDtcblx0XHRjb25zdCByb290ID0gbGlzdC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QgfCBudWxsO1xuXHRcdGNvbnN0IGFuY2hvciA9IHJvb3Q/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuXHRcdFx0YFtwb3BvdmVydGFyZ2V0PVwiJHtsaXN0LmlkfVwiXWAsXG5cdFx0KTtcblxuXHRcdGlmIChldmVudC5uZXdTdGF0ZSA9PT0gXCJjbG9zZWRcIikgYW5jaG9yUG9zaXRpb24obGlzdCwgZmFsc2UpO1xuXHRcdGVsc2UgaWYgKGFuY2hvcilcblx0XHRcdGFuY2hvclBvc2l0aW9uKGxpc3QsIGFuY2hvciwge1xuXHRcdFx0XHRwbGFjZW1lbnQ6IChhdHRyKGxpc3QsIFwiZGF0YS1wb3NpdGlvblwiKSA/PyBcImJvdHRvbVwiKSBhcyBQbGFjZW1lbnQsXG5cdFx0XHRcdG1pZGRsZXdhcmU6IFtcblx0XHRcdFx0XHRmbGlwKCksXG5cdFx0XHRcdFx0c2hpZnQoKSxcblx0XHRcdFx0XHRzaXplKHtcblx0XHRcdFx0XHRcdHBhZGRpbmc6IDEwLFxuXHRcdFx0XHRcdFx0YXBwbHkoeyBhdmFpbGFibGVIZWlnaHQgfSkge1xuXHRcdFx0XHRcdFx0XHRsaXN0LnN0eWxlLndpZHRoID0gYCR7YW5jaG9yLm9mZnNldFdpZHRofXB4YDtcblx0XHRcdFx0XHRcdFx0bGlzdC5zdHlsZS5tYXhIZWlnaHQgPSBgJHtNYXRoLm1heCg1MCwgYXZhaWxhYmxlSGVpZ2h0KX1weGA7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRdLFxuXHRcdFx0fSk7XG5cdH1cbn1cbi8vIFVwZGF0ZSB3aGVuIHR5cGluZ1xuZnVuY3Rpb24gaGFuZGxlRmllbGRJbnB1dChldmVudDogRXZlbnQpIHtcblx0aWYgKGlzSW5wdXRMaWtlKGV2ZW50LnRhcmdldCkpIHtcblx0XHRyZW5kZXJDb3VudGVyKGV2ZW50LnRhcmdldCk7XG5cdFx0cmVuZGVyVGV4dGFyZWFTaXplKGV2ZW50LnRhcmdldCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRmllbGRWYWxkaWF0aW9uKGV2ZW50OiBFdmVudCkge1xuXHRjb25zdCBmaWVsZCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihgLiR7Q1NTX0ZJRUxEfWApO1xuXHRpZiAoZXZlbnQudHlwZSA9PT0gXCJpbnZhbGlkXCIgJiYgZmllbGQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBzaG93aW5nIGRlZmF1bHQgdmFsaWRhdGlvbiBidWJibGVzXG5cdGhhbmRsZUZpZWxkTXV0YXRpb24oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShDU1NfRklFTEQpLCB0cnVlKTsgLy8gVXBkYXRlIHN0YXRlXG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRCwgaGFuZGxlRmllbGRNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImlucHV0XCIsIGhhbmRsZUZpZWxkSW5wdXQsIFFVSUNLX0VWRU5UKTtcblx0b24oZG9jdW1lbnQsIFwiaW52YWxpZCxzdWJtaXRcIiwgaGFuZGxlRmllbGRWYWxkaWF0aW9uLCB0cnVlKTsgLy8gVXNlIGNhcHR1cmUgYXMgaW52YWxpZCBhbmQgc3VibWl0IGRvZXMgbm90IGJ1YmJsZVxuXHRvbihkb2N1bWVudCwgXCJ0b2dnbGVcIiwgaGFuZGxlRmllbGRUb2dnbGUsIFFVSUNLX0VWRU5UKTsgLy8gVXNlIGNhcHR1cmUgc2luY2UgdG9nZ2xlIGRvZXMgbm90IGJ1YmJsZVxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgaXNJbnB1dExpa2UsIG9uTG9hZGVkLCBvbk11dGF0aW9uLCB1c2VJZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRklFTERTRVQgPSBzdHlsZXMuZmllbGRzZXQuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1ZBTElEQVRJT04gPSBzdHlsZXMudmFsaWRhdGlvbi5zcGxpdChcIiBcIilbMF07XG5jb25zdCBBUklBX0RFU0MgPSBcImFyaWEtZGVzY3JpYmVkYnlcIjtcbmNvbnN0IEFSSUFfSU5WQUxJRCA9IFwiYXJpYS1pbnZhbGlkXCI7XG5cbi8vIFVzaW5nIHJlcXVlc3RBbmltYXRpb25GcmFtZSB0byBlbnN1cmUgaXQgcnVucyBhZnRlciBmaWVsZC1vYnNlcnZlclxuZnVuY3Rpb24gaGFuZGxlRmllbGRzZXRNdXRhdGlvbihmaWVsZHNldHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4pIHtcblx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRmb3IgKGNvbnN0IGZpZWxkc2V0IG9mIGZpZWxkc2V0cylcblx0XHRcdGlmIChmaWVsZHNldC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0XHRjb25zdCBpbnB1dHM6IEhUTUxJbnB1dEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0XHRsZXQgdmFsaWRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdFx0XHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBlbCBvZiBmaWVsZHNldC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikpIHtcblx0XHRcdFx0XHRpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdFx0dmFsaWQgPSBhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8ICFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0XHR2YWxpZElkID0gdXNlSWQoZWwpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoaXNJbnB1dExpa2UoZWwpKSBpbnB1dHMucHVzaChlbCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykge1xuXHRcdFx0XHRcdGNvbnN0IGRlc2MgPSBhdHRyKGlucHV0LCBBUklBX0RFU0MpPy5yZXBsYWNlKHZhbGlkSWQgfHwgXCIjXCIsIFwiXCIpO1xuXG5cdFx0XHRcdFx0YXR0cihpbnB1dCwgQVJJQV9ERVNDLCBgJHt2YWxpZElkIHx8IFwiXCJ9ICR7ZGVzYyB8fCBcIlwifWAudHJpbSgpKTtcblx0XHRcdFx0XHRhdHRyKGlucHV0LCBBUklBX0lOVkFMSUQsIGAkeyF2YWxpZH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRFNFVCwgaGFuZGxlRmllbGRzZXRNdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19MT0dPID0gc3R5bGVzLmxvZ28uc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVMb2dvTXV0YXRpb24oW2xvZ29dOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRpZiAobG9nbz8uaXNDb25uZWN0ZWQgJiYgbG9nbz8uZmlyc3RFbGVtZW50Q2hpbGQgaW5zdGFuY2VvZiBTVkdTVkdFbGVtZW50KSB7XG5cdFx0Zm9yIChjb25zdCBpY29uIG9mIGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvckFsbChcImxpbmtbcmVsfj0naWNvbiddXCIpKVxuXHRcdFx0aWNvbi5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgXCJkaXNhYmxlZFwiKTsgLy8gRGlzYWJsZSBwcmV2aW91cyBpY29uIChidXQgbm90IHJlbW92ZSBpcyBhcyB0aGlzIG1ha2VzIE5leHQuanMgc2FkKVxuXG5cdFx0Y29uc3Qgc3ZnID0gbG9nby5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRjb25zdCBpc0RvdCA9IGxvZ28/Lmhhc0F0dHJpYnV0ZShcImRhdGEtZW52XCIpO1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoc3ZnKTtcblx0XHRjb25zdCB0ZXh0ID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcImNvbG9yXCIpO1xuXHRcdGNvbnN0IGJhY2sgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1tdGRzLWxvZ28tY29sb3JcIik7XG5cdFx0Y29uc3QgaWNvbiA9IHN2Zy5vdXRlckhUTUxcblx0XHRcdC5yZXBsYWNlKC9cXG4rL2csIFwiIFwiKSAvLyBQcmV2ZW50IGxpbmUgYnJlYWtzXG5cdFx0XHQucmVwbGFjZSgvKGZpbGx8d2lkdGh8aGVpZ2h0fHhtbG5zKT1cIlteXCJdK1wiL2dpLCBcIlwiKVxuXHRcdFx0LnJlcGxhY2UoXCI8c3ZnXCIsIGA8c3ZnIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIGZpbGw9XCIke3RleHR9XCJgKTtcblxuXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoXG5cdFx0XHRPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpLCB7XG5cdFx0XHRcdGhyZWY6IGBkYXRhOmltYWdlL3N2Zyt4bWwsJHtlbmNvZGVVUklDb21wb25lbnQoYDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNTUgNTUnPjxyZWN0IGZpbGw9JyR7aXNEb3QgPyBcIm5vbmVcIiA6IGJhY2t9JyB3aWR0aD0nNTEnIGhlaWdodD0nNTEnIHg9JzInIHk9JzInIHN0cm9rZT0nJHt0ZXh0fScgc3Ryb2tlLWRhc2hhcnJheT0nMC4wOSA2LjM4JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1vcGFjaXR5PScke2lzRG90ID8gMC42IDogMH0nIHN0cm9rZS13aWR0aD0nMi4zJyByeD0nMjUuNScvPjxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg3LjUgNy41KVwiPiR7aWNvbn08L2c+PC9zdmc+YCl9YCxcblx0XHRcdFx0cmVsOiBcImljb25cIixcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19MT0dPLCBoYW5kbGVMb2dvTXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCB7IGZsaXAsIHR5cGUgUGxhY2VtZW50LCBzaGlmdCwgc2l6ZSB9IGZyb20gXCJAZmxvYXRpbmctdWkvZG9tXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYW5jaG9yUG9zaXRpb24sIGF0dHIsIG9uLCBvbkxvYWRlZCwgUVVJQ0tfRVZFTlQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1BPUE9WRVIgPSBzdHlsZXMucG9wb3Zlci5zcGxpdChcIiBcIilbMF07XG5sZXQgT1BFTl9QT1BPVkVSUyA9IDA7IC8vIFNwZWVkIHVwIGJ5IG9ubHkgY2hlY2tpbmcgY2xpY2tzIGlmIHdlIGhhdmUgb3BlbiBwb3BvdmVyc1xuXG5mdW5jdGlvbiBoYW5kbGVQb3BvdmVyVG9nZ2xlKHtcblx0dGFyZ2V0OiBlbCxcblx0bmV3U3RhdGUsXG59OiBFdmVudCAmIHsgbmV3U3RhdGU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1BPUE9WRVIpKSB7XG5cdFx0Y29uc3QgaXNDbG9zaW5nID0gbmV3U3RhdGUgPT09IFwiY2xvc2VkXCI7XG5cdFx0Y29uc3QgaXNDb250YWluID0gYXR0cihlbCwgXCJkYXRhLW92ZXJzY3JvbGxcIikgPT09IFwiY29udGFpblwiO1xuXHRcdGNvbnN0IGFuY2hvciA9IChlbC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QpPy5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pihcblx0XHRcdGBbcG9wb3ZlcnRhcmdldD1cIiR7ZWwuaWR9XCJdYCxcblx0XHQpO1xuXG5cdFx0T1BFTl9QT1BPVkVSUyArPSBpc0Nsb3NpbmcgPyAtMSA6IDE7XG5cdFx0aWYgKGlzQ2xvc2luZykgYW5jaG9yUG9zaXRpb24oZWwsIGZhbHNlKTtcblx0XHRlbHNlIGlmIChhbmNob3IpXG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgYW5jaG9yLCB7XG5cdFx0XHRcdHBsYWNlbWVudDogKGF0dHIoZWwsIFwiZGF0YS1wb3NpdGlvblwiKSB8fCBcImJvdHRvbVwiKSBhcyBQbGFjZW1lbnQsXG5cdFx0XHRcdG1pZGRsZXdhcmU6IFtmbGlwKCksIHNoaWZ0KHsgcGFkZGluZzogMTAgfSldLmNvbmNhdChcblx0XHRcdFx0XHRpc0NvbnRhaW5cblx0XHRcdFx0XHRcdD8gc2l6ZSh7XG5cdFx0XHRcdFx0XHRcdFx0cGFkZGluZzogMTAsXG5cdFx0XHRcdFx0XHRcdFx0YXBwbHkoeyBhdmFpbGFibGVIZWlnaHQgfSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZWwuc3R5bGUubWF4SGVpZ2h0ID0gYCR7TWF0aC5tYXgoNTAsIGF2YWlsYWJsZUhlaWdodCl9cHhgO1xuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQ6IFtdLFxuXHRcdFx0XHQpLFxuXHRcdFx0fSk7XG5cdH1cbn1cblxuLy8gUG9seWZpbGwgcG9wb3ZlcnRhcmdldCBmb3IgPGE+IChub3Qgc3VwcG9ydGVkIGJ5IG5hdGl2ZSlcbi8vIGFuZCBhdXRvbWF0aWNhbGx5IGFzc3VtZSBwb3BvdmVydGFyZ2V0IGlzIHRoZSBjbG9zZXN0IHBhcmVudCBwb3BvdmVyXG4vLyBidXQgcmVzcGVjdCB0aGUgcG9wb3ZlcnRhcmdldCBhbmQgcG9wb3ZlcnRhcmdldGFjdGlvbiBhdHRyaWJ1dGVcbmZ1bmN0aW9uIGhhbmRsZVBvcG92ZXJMaW5rQ2xpY2soeyB0YXJnZXQgfTogRXZlbnQpIHtcblx0Y29uc3QgY2xvc2UgPVxuXHRcdE9QRU5fUE9QT1ZFUlMgJiYgKHRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKFwiYSxbcG9wb3ZlcnRhcmdldGFjdGlvbl1cIik7XG5cblx0aWYgKGNsb3NlKSB7XG5cdFx0Y29uc3QgYWN0aW9uID0gYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0YWN0aW9uXCIpIHx8IFwidG9nZ2xlXCI7XG5cdFx0Y29uc3Qgb3BlbiA9IGFjdGlvbiA9PT0gXCJzaG93XCIgfHwgKGFjdGlvbiA9PT0gXCJoaWRlXCIgPyBmYWxzZSA6IHVuZGVmaW5lZCk7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0XCIpIHx8IFwiXCIpO1xuXHRcdGNvbnN0IHBvcG92ZXIgPSAodGFyZ2V0IHx8IGNsb3NlKS5jbG9zZXN0PEhUTUxFbGVtZW50PihgLiR7Q1NTX1BPUE9WRVJ9YCk7XG5cblx0XHQvLyBQb3BvdmVyIGNhbiBiZSBkaXNjb25uZXRlZCBieSBjbGljayBoYW5kbGVyIGRlZXBlciBkb3duIGluIHRoZSBET00gdGhyZWUgYmVmb3JlIHJlYWNoaW5nIGRvY3VtZW50XG5cdFx0aWYgKHBvcG92ZXI/LmlzQ29ubmVjdGVkICYmIHBvcG92ZXI/LnRvZ2dsZVBvcG92ZXIpXG5cdFx0XHRwb3BvdmVyLnRvZ2dsZVBvcG92ZXIob3Blbik7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJ0b2dnbGVcIiwgaGFuZGxlUG9wb3ZlclRvZ2dsZSwgUVVJQ0tfRVZFTlQpOyAvLyBVc2UgY2FwdHVyZSBzaW5jZSB0b2dnbGUgZG9lcyBub3QgYnViYmxlXG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZVBvcG92ZXJMaW5rQ2xpY2spOyAvLyBBbGxvdyBgPGE+YCB0byB1c2UgYHBvcG92ZXJ0YXJnZXRgIGFzIHdlbGxcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19UQUJMRSA9IHN0eWxlcy50YWJsZS5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZVRhYmxlTXV0YXRpb24odGFibGVzOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxUYWJsZUVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgdGFibGUgb2YgdGFibGVzKSB7XG5cdFx0Y29uc3QgdGhzOiBzdHJpbmdbXSA9IFtdOyAvLyBBZGQgZGF0YS10aD1cIlwiIHRvIGVhY2ggY2VsbCB0byBzdXBwb3J0IGRhdGEtbW9iaWxlIGRlc2lnbnNcblxuXHRcdGF0dHIodGFibGUsIFwicm9sZVwiLCBcInRhYmxlXCIpOyAvLyBBZGQgaGVscGluZyByb2xlPVwiXCIgdG8gZW5zdXJlIHNjcmVlbiByZWFkZXJzIHVuZGVyc3RhbmQgdGhlIHRhYmxlIHJlZ2FyZGxlc3Mgb2YgQ1NTIGRpc3BsYXlcblx0XHRpZiAodGFibGUuY2FwdGlvbikgYXR0cih0YWJsZS5jYXB0aW9uLCBcInJvbGVcIiwgXCJjYXB0aW9uXCIpO1xuXHRcdGZvciAoY29uc3QgZ3JvdXAgb2YgW3RhYmxlLnRIZWFkLCB0YWJsZS50Rm9vdCwgLi4udGFibGUudEJvZGllc10pXG5cdFx0XHRpZiAoZ3JvdXApIHtcblx0XHRcdFx0YXR0cihncm91cCwgXCJyb2xlXCIsIFwicm93Z3JvdXBcIik7XG5cdFx0XHRcdGNvbnN0IGlzVGJvZHkgPSBncm91cC5ub2RlTmFtZSA9PT0gXCJUQk9EWVwiO1xuXG5cdFx0XHRcdGZvciAoY29uc3Qgcm93IG9mIGdyb3VwLnJvd3MpIHtcblx0XHRcdFx0XHRhdHRyKHJvdywgXCJyb2xlXCIsIFwicm93XCIpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgY2VsbCBvZiByb3cuY2VsbHMpIHtcblx0XHRcdFx0XHRcdGlmIChpc1Rib2R5KSBhdHRyKGNlbGwsIFwiZGF0YS10aFwiLCB0aHNbY2VsbC5jZWxsSW5kZXhdIHx8IFwiOmVtcHR5XCIpO1xuXHRcdFx0XHRcdFx0ZWxzZSB0aHMucHVzaChjZWxsLmlubmVyVGV4dC50cmltKCkpOyAvLyBVc2luZyBpbm5lclRleHQgdG8gb25seSBpbmNsdWRlIHZpc2libGUgdGV4dFxuXHRcdFx0XHRcdFx0aWYgKGNlbGwubm9kZU5hbWUgPT09IFwiVERcIikgYXR0cihjZWxsLCBcInJvbGVcIiwgXCJjZWxsXCIpO1xuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGF0dHIoY2VsbCwgXCJyb2xlXCIsIGlzVGJvZHkgPyBcInJvd2hlYWRlclwiIDogXCJjb2x1bW5oZWFkZXJcIik7XG5cdFx0XHRcdFx0XHRcdGF0dHIoY2VsbCwgXCJzY29wZVwiLCBpc1Rib2R5ID8gXCJyb3dcIiA6IFwiY29sXCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfVEFCTEUsIGhhbmRsZVRhYmxlTXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBvbiwgb25Mb2FkZWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1RPR0dMRUdST1VQID0gYC4ke3N0eWxlcy50b2dnbGVncm91cC5zcGxpdChcIiBcIilbMF19YDtcblxuLy8gUHJldmVudCBicm93c2VycyBmcm9tIHNob3dpbmcgZGVmYXVsdCB2YWxpZGF0aW9uIGJ1YmJsZXNcbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZWdyb3VwS2V5ZG93bihldmVudDogRXZlbnQgJiBQYXJ0aWFsPEtleWJvYXJkRXZlbnQ+KSB7XG5cdGNvbnN0IHsga2V5LCB0YXJnZXQ6IGVsIH0gPSBldmVudDtcblx0Y29uc3QgZ3JvdXAgPSBlbCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgZWwuY2xvc2VzdChDU1NfVE9HR0xFR1JPVVApO1xuXG5cdGlmICghZ3JvdXApIHJldHVybjtcblx0aWYgKGtleSA9PT0gXCJFbnRlclwiKSBlbC5jbGljaygpO1xuXHRpZiAoa2V5Py5zdGFydHNXaXRoKFwiQXJyb3dcIikpIHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGNvbnN0IGlucHV0cyA9IGdyb3VwLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIik7XG5cdFx0Y29uc3QgaW5kZXggPSBbLi4uaW5wdXRzXS5pbmRleE9mKGVsKTtcblx0XHRjb25zdCBtb3ZlID0ga2V5Lm1hdGNoKC9BcnJvdyhSaWdodHxEb3duKS8pID8gMSA6IC0xO1xuXHRcdGlucHV0c1soaW5wdXRzLmxlbmd0aCArIGluZGV4ICsgbW92ZSkgJSBpbnB1dHMubGVuZ3RoXT8uZm9jdXMoKTtcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiBvbihkb2N1bWVudCwgXCJrZXlkb3duXCIsIGhhbmRsZVRvZ2dsZWdyb3VwS2V5ZG93bikpO1xuIiwiaW1wb3J0IHsgZmxpcCwgdHlwZSBQbGFjZW1lbnQsIHNoaWZ0IH0gZnJvbSBcIkBmbG9hdGluZy11aS9kb21cIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRhbmNob3JQb3NpdGlvbixcblx0YXR0cixcblx0SVNfQlJPV1NFUixcblx0b24sXG5cdG9uTG9hZGVkLFxuXHRRVUlDS19FVkVOVCxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IERFU0NSSUJFREJZID0gXCJhcmlhLWRlc2NyaWJlZGJ5XCI7XG5jb25zdCBFU0MgPSBcIkVzY2FwZVwiO1xuY29uc3QgTEFCRUxMRURCWSA9IFwiYXJpYS1sYWJlbGxlZGJ5XCI7XG5jb25zdCBQT1NJVElPTl9DU1NfUFJPUEVSVFkgPSBcIi0tbXRkcy10b29sdGlwLXBvc2l0aW9uXCI7XG5jb25zdCBUSFJPVFRMRV9ERUxBWSA9IDMwMDtcbmNvbnN0IFRPT0xUSVAgPSBJU19CUk9XU0VSXG5cdD8gT2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCB7XG5cdFx0XHRjbGFzc05hbWU6IHN0eWxlcy5fdG9vbHRpcCxcblx0XHRcdGlkOiBcIm10ZHMtdG9vbHRpcFwiLFxuXHRcdFx0cG9wb3ZlcjogXCJtYW51YWxcIixcblx0XHR9KVxuXHQ6IG51bGw7IC8vIENyZWF0ZSBhIGR1bW15IGVsZW1lbnQgdG8gYXZvaWQgbnVsbCBjaGVja3NcblxubGV0IEFOQ0hPUjogRWxlbWVudCB8IG51bGwgPSBudWxsO1xubGV0IExBU1RfQ0FMTCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbmxldCBUSFJPVFRMRTogbnVtYmVyIHwgUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gPSAwO1xuXG5mdW5jdGlvbiBoYW5kbGVUb29sdGlwTW92ZSh7IHRhcmdldCwgdHlwZSwga2V5IH06IEV2ZW50ICYgeyBrZXk/OiBzdHJpbmcgfSkge1xuXHRpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIgJiYga2V5ICE9PSBFU0MpIHJldHVybjsgLy8gQWxsb3cgRVNDIGRpc21pc3MgdG8gZm9sbG93IGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvQVJJQS9hcGcvcGF0dGVybnMvdG9vbHRpcC9cblx0Y29uc3Qgd2FpdCA9IExBU1RfQ0FMTCArIFRIUk9UVExFX0RFTEFZIC0gRGF0ZS5ub3coKTtcblx0Y2xlYXJUaW1lb3V0KFRIUk9UVExFKTtcblx0VEhST1RUTEUgPSBzZXRUaW1lb3V0KFxuXHRcdGhhbmRsZVRvb2x0aXBNb3ZlVGhyb3R0bGVkLFxuXHRcdE1hdGgubWF4KHdhaXQsIDApLFxuXHRcdGtleSA9PT0gRVNDID8gbnVsbCA6IHRhcmdldCxcblx0KTtcbn1cblxuLy8gVXNpbmcgYSB0aHJvdHRsZWQgZnVuY3Rpb24gdG8gYXZvaWQgcGVyZm9ybWFuY2UgaXNzdWVzXG5mdW5jdGlvbiBoYW5kbGVUb29sdGlwTW92ZVRocm90dGxlZCh0YXJnZXQ6IEVsZW1lbnQgfCBudWxsKSB7XG5cdExBU1RfQ0FMTCA9IERhdGUubm93KCk7XG5cblx0Ly8gQnVpbGQgYW5kIGFwcGVuZCB0b29sdGlwIGlmIG5vdCBleGlzdGluZ1xuXHRpZiAoIVRPT0xUSVAgfHwgdGFyZ2V0ID09PSBUT09MVElQKSByZXR1cm47IC8vIEFsbG93IHRvb2x0aXAgdG8gYmUgaG92ZXJlZCwgZm9sbG93aW5nIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjEvI2NvbnRlbnQtb24taG92ZXItb3ItZm9jdXNcblx0aWYgKCFUT09MVElQPy5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoVE9PTFRJUCk7IC8vIEVuc3VyZSBjb25uZWN0ZWRcblx0bGV0IGFuY2hvciA9IHRhcmdldD8uY2xvc2VzdD8uPEVsZW1lbnQ+KFwiW2RhdGEtdG9vbHRpcF1cIikgfHwgbnVsbDtcblxuXHQvLyBObyBuZWVkIHRvIHVwZGF0ZVxuXHRpZiAoYW5jaG9yID09PSBBTkNIT1IpIHJldHVybjtcblxuXHRjb25zdCBjb250ZW50ID0gKGFuY2hvciAmJiBhdHRyKGFuY2hvciwgXCJkYXRhLXRvb2x0aXBcIikpIHx8IFwiXCI7XG5cdGNvbnN0IHBvc2l0aW9uID1cblx0XHQoYW5jaG9yICYmIGF0dHIoYW5jaG9yLCBcImRhdGEtdG9vbHRpcC1wb3NpdGlvblwiKSkgfHxcblx0XHR3aW5kb3dcblx0XHRcdC5nZXRDb21wdXRlZFN0eWxlKGFuY2hvciB8fCBkb2N1bWVudC5ib2R5KVxuXHRcdFx0LmdldFByb3BlcnR5VmFsdWUoUE9TSVRJT05fQ1NTX1BST1BFUlRZKVxuXHRcdFx0Py50cmltKCkgfHxcblx0XHRcInRvcFwiO1xuXG5cdGNvbnN0IGlzSGlkZGVuID1cblx0XHQhY29udGVudCB8fFxuXHRcdGNvbnRlbnQgPT09IFwiZmFsc2VcIiB8fFxuXHRcdGNvbnRlbnQgPT09IFwidHJ1ZVwiIHx8XG5cdFx0cG9zaXRpb24gPT09IFwibm9uZVwiO1xuXG5cdGlmIChpc0hpZGRlbikgYW5jaG9yID0gbnVsbDsgLy8gRG8gbm90IHNob3cgdG9vbHRpcCBpZiBib29saXNoIHZhbHVlXG5cdGlmIChhbmNob3IpIFRPT0xUSVAudGV4dENvbnRlbnQgPSBjb250ZW50OyAvLyBPbmx5IHVwZGF0ZSBjb250ZW50IGlmIG5ldyBhbmNob3JcblxuXHRjb25zdCBoYWRMYWJlbCA9IEFOQ0hPUiAmJiBhdHRyKEFOQ0hPUiwgTEFCRUxMRURCWSkgPT09IFRPT0xUSVA/LmlkO1xuXHRjb25zdCBoYXNMYWJlbCA9XG5cdFx0KGFuY2hvciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50XG5cdFx0XHQ/IGFuY2hvci5pbm5lclRleHRcblx0XHRcdDogYW5jaG9yPy50ZXh0Q29udGVudFxuXHRcdCk/LnRyaW0oKSB8fFxuXHRcdGFuY2hvcj8uaGFzQXR0cmlidXRlKExBQkVMTEVEQlkpIHx8XG5cdFx0YW5jaG9yPy5oYXNBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIpO1xuXG5cdEFOQ0hPUj8ucmVtb3ZlQXR0cmlidXRlKGhhZExhYmVsID8gTEFCRUxMRURCWSA6IERFU0NSSUJFREJZKTsgLy8gVW5saW5rIHByZXZpb3VzIGFuY2hvclxuXHRhbmNob3JQb3NpdGlvbihUT09MVElQLCBmYWxzZSk7IC8vIFJlc2V0IGFuY2hvciBwb3NpdGlvblxuXG5cdEFOQ0hPUiA9IGFuY2hvcjsgLy8gU3RvcmUgbmV3IGFuY2hvciAtIG1pZ2h0IGJlIG51bGwgaWYgbm8gbmV3IGFuY2hvclxuXHRpZiAoQU5DSE9SKSBhdHRyKEFOQ0hPUiwgaGFzTGFiZWwgPyBERVNDUklCRURCWSA6IExBQkVMTEVEQlksIFRPT0xUSVA/LmlkKTsgLy8gVXNlIHRvb2x0aXAgYXMgZGVzY3JpcHRpb24gaWYgYWxscmVhZHkgaGFzIGxhYmVsXG5cdGlmIChBTkNIT1IpIFRPT0xUSVAuaGlkZVBvcG92ZXIoKTsgLy8gSGlkZSB0b29sdGlwIHNvIGl0IGNhbiBiZSBwbGFjZWQgb24gdG9wLWxheWVyIG9uIG5leHQgc2hvd1xuXHRUT09MVElQLnRvZ2dsZVBvcG92ZXIoISFhbmNob3IpO1xuXHRhbmNob3JQb3NpdGlvbihUT09MVElQLCBhbmNob3IgfHwgZmFsc2UsIHtcblx0XHRwbGFjZW1lbnQ6IHBvc2l0aW9uIGFzIFBsYWNlbWVudCxcblx0XHRtaWRkbGV3YXJlOiBbZmxpcCgpLCBzaGlmdCh7IHBhZGRpbmc6IDEwIH0pXSxcblx0fSk7XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwiYmx1cixmb2N1cyxtb3VzZW91dCxtb3VzZW92ZXJcIiwgaGFuZGxlVG9vbHRpcE1vdmUsIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcImtleWRvd25cIiwgaGFuZGxlVG9vbHRpcE1vdmUsIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcImJsdXJcIiwgaGFuZGxlVG9vbHRpcE1vdmUsIFFVSUNLX0VWRU5UKTtcbn0pO1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xuXG4vLyB1LWRldGFpbHMudHNcbnZhciBVSFRNTERldGFpbHNFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIFVzaW5nIHVuZGVyc2NvcmUgaW5zdGVhZCBvZiBwcml2YXRlIGZpZWxkcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICB0aGlzLl9jb250ZW50ID0gbnVsbDtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgbmFtZTogXCJzdW1tYXJ5XCIgfSksXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IHBhcnQ6IFwiZGV0YWlscy1jb250ZW50XCIgfSksXG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGAke0RJU1BMQVlfQkxPQ0t9XG4gICAgICAgIDo6c2xvdHRlZCh1LXN1bW1hcnkpIHsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBibG9jayB9XG5cdFx0XHRcdDo6c2xvdHRlZCh1LXN1bW1hcnkpOjpiZWZvcmUgeyBjb250ZW50OiAnJzsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBtYXJnaW4taW5saW5lOiAuMDVlbSAuMzEyNWVtOyBib3JkZXItYmxvY2s6IC4zMTI1ZW0gc29saWQgdHJhbnNwYXJlbnQ7IGJvcmRlci1pbmxpbmUtc3RhcnQ6IC41ZW0gc29saWQgfVxuXHRcdFx0XHQ6OnNsb3R0ZWQodS1zdW1tYXJ5W2FyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJdKTo6YmVmb3JlIHsgcm90YXRlOiA5MGRlZyB9XG5cdFx0XHRcdDpob3N0ID4gW3BhcnQ9XCJkZXRhaWxzLWNvbnRlbnRcIl06bm90KFtoaWRkZW49XCJcIl0pIHsgZGlzcGxheTogYmxvY2sgfWBcbiAgICAgIClcbiAgICApO1xuICB9XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJvcGVuXCJdO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHZhciBfYTI7XG4gICAgdGhpcy5fY29udGVudCA9IChfYTIgPSB0aGlzLnNoYWRvd1Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2hpbGRyZW5bMV07XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJncm91cFwiKTtcbiAgICBvbih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLl9jb250ZW50KSBvZmYodGhpcy5fY29udGVudCwgXCJiZWZvcmVtYXRjaFwiLCB0aGlzKTtcbiAgICBvZmYodGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuX2NvbnRlbnQgPSBudWxsO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBwcmV2LCBuZXh0KSB7XG4gICAgY29uc3QgaGlkZSA9IFwib25iZWZvcmVtYXRjaFwiIGluIHRoaXMgPyBcInVudGlsLWZvdW5kXCIgOiB0cnVlO1xuICAgIGNvbnN0IG9wZW4gPSB0aGlzLm9wZW47XG4gICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLmNoaWxkcmVuKVxuICAgICAgaWYgKGVsLm5vZGVOYW1lID09PSBcIlUtU1VNTUFSWVwiKSBhdHRyKGVsLCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7b3Blbn1gKTtcbiAgICBpZiAodGhpcy5fY29udGVudCkge1xuICAgICAgYXR0cih0aGlzLl9jb250ZW50LCBcImFyaWEtaGlkZGVuXCIsIGAkeyFvcGVufWApO1xuICAgICAgdGhpcy5fY29udGVudC5oaWRkZW4gPSBvcGVuID8gZmFsc2UgOiBoaWRlO1xuICAgIH1cbiAgICBpZiAob3BlbiAmJiB0aGlzLm5hbWUpIHtcbiAgICAgIGNvbnN0IHVEZXRhaWxzTGlzdCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYCR7dGhpcy5ub2RlTmFtZX1bbmFtZT1cIiR7dGhpcy5uYW1lfVwiXWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IHVEZXRhaWxzIG9mIHVEZXRhaWxzTGlzdClcbiAgICAgICAgaWYgKHVEZXRhaWxzICE9PSB0aGlzKSB1RGV0YWlscy5vcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChwcm9wID09PSBcIm9wZW5cIiAmJiBwcmV2ID09PSBudWxsICE9PSAobmV4dCA9PT0gbnVsbCkpXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwidG9nZ2xlXCIpKTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCI6c2NvcGUgPiB1LXN1bW1hcnlcIik7XG4gICAgY29uc3QgaXNTdW1tYXJ5ID0gc3VtbWFyeSA9PSBudWxsID8gdm9pZCAwIDogc3VtbWFyeS5jb250YWlucyhldmVudC50YXJnZXQpO1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmVmb3JlbWF0Y2hcIikgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICBpZiAoaXNTdW1tYXJ5ICYmIGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiKSBhc0J1dHRvbihldmVudCk7XG4gICAgaWYgKGlzU3VtbWFyeSAmJiBldmVudC50eXBlID09PSBcImNsaWNrXCIpIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XG4gIH1cbiAgZ2V0IG9wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwib3BlblwiKTtcbiAgfVxuICBzZXQgb3Blbih2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJvcGVuXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIFwibmFtZVwiKSB8fCBcIlwiO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcIm5hbWVcIiwgdmFsdWUpO1xuICB9XG59O1xudmFyIFVIVE1MU3VtbWFyeUVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIHRoaXMuc2xvdCA9IFwic3VtbWFyeVwiO1xuICAgIHRoaXMudGFiSW5kZXggPSAwO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1kZXRhaWxzXCIsIFVIVE1MRGV0YWlsc0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1zdW1tYXJ5XCIsIFVIVE1MU3VtbWFyeUVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERldGFpbHNFbGVtZW50LCBVSFRNTFN1bW1hcnlFbGVtZW50IH07XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfRklSRUZPWCA9IElTX0JST1dTRVIgJiYgL2ZpcmVmb3gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBfYTI7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gKF9hMiA9IGVsLmdldEF0dHJpYnV0ZShuYW1lKSkgIT0gbnVsbCA/IF9hMiA6IG51bGw7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIGdldExhYmVsID0gKGVsKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSBnZXRSb290KGVsKTtcbiAgY29uc3QgbGFiZWwgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikgfHwgXCJcIjtcbiAgY29uc3QgbGFiZWxzID0gKChfYTIgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxsZWRieVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkuc3BsaXQoL1xccysvKSkgfHwgW107XG4gIHJldHVybiBbXG4gICAgLi4ubGFiZWxzLm1hcCgoaWQyKSA9PiByb290ID09IG51bGwgPyB2b2lkIDAgOiByb290LnF1ZXJ5U2VsZWN0b3IoYFtpZD1cIiR7aWQyfVwiXWApKSxcbiAgICAvLyBHZXQgYWxsIGxhYmVsbGVkYnkgZWxlbWVudHNcbiAgICAuLi5BcnJheS5mcm9tKGVsLmxhYmVscyB8fCBbXSlcbiAgICAvLyBHZXQgYWxsIDxsYWJlbD4gZWxlbWVudHNcbiAgXS5yZWR1Y2UoKGFjYywgZWwyKSA9PiB7XG4gICAgdmFyIF9hMztcbiAgICByZXR1cm4gYWNjIHx8ICgoX2EzID0gZWwyID09IG51bGwgPyB2b2lkIDAgOiBlbDIuaW5uZXJUZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnRyaW0oKSkgfHwgXCJcIjtcbiAgfSwgbGFiZWwpO1xufTtcblxuLy8gdS1wcm9ncmVzcy50c1xudmFyIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbnZhciBVSFRNTFByb2dyZXNzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIiwgXCJ2YWx1ZVwiLCBcIm1heFwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBoaWRkZW46IFwiXCIgfSksXG4gICAgICAvLyBTbG90IGhpZGluZyBjb250ZW50IGFsbG93cyBsZWdhY3kgYnJvd3NlciB0byBkaXNwbGF5IGZhbGxiYWNrIHRleHRcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYDpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGJvcmRlcjogMXB4IHNvbGlkOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGhlaWdodDogLjVlbTsgd2lkdGg6IDEwZW07IG92ZXJmbG93OiBoaWRkZW4gfVxuICAgICAgICA6aG9zdDo6YmVmb3JlIHsgY29udGVudDogJyc7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDEwMCU7IGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsgd2lkdGg6IHZhcigtLXBlcmNlbnRhZ2UsIDAlKTsgdHJhbnNpdGlvbjogd2lkdGggLjJzIH1cbiAgICAgICAgOmhvc3QoOm5vdChbdmFsdWVdKSkgeyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsY3VycmVudENvbG9yIDI1JSwgdHJhbnNwYXJlbnQgNTAlLCBjdXJyZW50Q29sb3IgNzUlKSA1MCUvNDAwJSB9XG4gICAgICAgIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSkgeyA6aG9zdCB7IGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZSAycyBsaW5lYXIgaW5maW5pdGUgfSAgfVxuICAgICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUgeyBmcm9tIHsgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAxMDAlIH0gdG8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDAgfSB9YFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKFNLSVBfQVRUUl9DSEFOR0UpIHJldHVybjtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gdHJ1ZTtcbiAgICBjb25zdCByb2xlSW1hZ2UgPSBJU19JT1MgfHwgSVNfRklSRUZPWDtcbiAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCh0aGlzLnBvc2l0aW9uICogMTAwKSk7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcGVyY2VudGFnZVwiLCBgJHtwZXJjZW50YWdlfSVgKTtcbiAgICBsZXQgbGFiZWwgPSBnZXRMYWJlbCh0aGlzKTtcbiAgICBpZiAocm9sZUltYWdlKSBsYWJlbCA9IGAke2xhYmVsLnJlcGxhY2UoL1xcZCslJC8sIFwiXCIpfSAke3BlcmNlbnRhZ2V9JWA7XG4gICAgaWYgKElTX0ZJUkVGT1gpIGZvciAoY29uc3QgZWwgb2YgdGhpcy5sYWJlbHMpIGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtYnVzeVwiLCBgJHt0aGlzLnBvc2l0aW9uID09PSAtMX1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbC50cmltKCkpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsbGVkYnlcIiwgbnVsbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtYXhcIiwgXCIxMDBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtaW5cIiwgXCIwXCIpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbm93XCIsIGAke3BlcmNlbnRhZ2V9YCk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgcm9sZUltYWdlID8gXCJpbWdcIiA6IFwicHJvZ3Jlc3NiYXJcIik7XG4gICAgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xuICB9XG4gIGdldCBsYWJlbHMoKSB7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLmNsb3Nlc3QoXCJsYWJlbDpub3QoW2Zvcl0pXCIpO1xuICAgIGNvbnN0IGlkMiA9IHVzZUlkKHRoaXMpO1xuICAgIGlmIChsYWJlbCkgbGFiZWwuaHRtbEZvciA9IGlkMjtcbiAgICBjb25zdCBlbCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGBsYWJlbFtmb3I9XCIke2lkMn1cIl1gXG4gICAgKTtcbiAgICByZXR1cm4gZWw7XG4gIH1cbiAgZ2V0IHBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlID09PSBudWxsID8gLTEgOiBNYXRoLm1pbih0aGlzLnZhbHVlIC8gdGhpcy5tYXgsIDEpO1xuICB9XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIik7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBtYXgoKSB7XG4gICAgcmV0dXJuIGdldE51bWJlcih0aGlzLCBcIm1heFwiKSB8fCAxO1xuICB9XG4gIHNldCBtYXgobWF4KSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwibWF4XCIsIG1heCk7XG4gIH1cbn07XG4vLyBQcmV2ZW50IENocm9tZSBEZXZUb29scyB3YXJuaW5nIGFib3V0IDxsYWJlbCBmb3I9XCJcIj4gcG9pbnRpbmcgdG8gPHUtcHJvZ3Jlc3M+XG5VSFRNTFByb2dyZXNzRWxlbWVudC5mb3JtQXNzb2NpYXRlZCA9IHRydWU7XG52YXIgaXNOdW1lcmljID0gKHZhbHVlKSA9PiAhTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUZsb2F0KGAke3ZhbHVlfWApKSAmJiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKHZhbHVlKSk7XG52YXIgZ2V0TnVtYmVyID0gKGVsLCBrZXkpID0+IHtcbiAgY29uc3QgdmFsdWUgPSBhdHRyKGVsLCBrZXkpO1xuICByZXR1cm4gaXNOdW1lcmljKHZhbHVlKSA/IE1hdGgubWF4KDAsIE51bWJlci5wYXJzZUZsb2F0KHZhbHVlKSkgOiBudWxsO1xufTtcbnZhciBzZXROdW1iZXIgPSAoZWwsIGtleSwgdmFsKSA9PiB7XG4gIGlmICh2YWwgPT09IG51bGwgfHwgaXNOdW1lcmljKHZhbCkpIGF0dHIoZWwsIGtleSwgYCR7dmFsfWApO1xuICBlbHNlIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNldCBub24tbnVtZXJpYyAnJHthdHRyfSc6ICcke3ZhbH0nYCk7XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1wcm9ncmVzc1wiLCBVSFRNTFByb2dyZXNzRWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MUHJvZ3Jlc3NFbGVtZW50IH07XG4iXSwibmFtZXMiOlsiX19kZWZQcm9wIiwiX19nZXRPd25Qcm9wU3ltYm9scyIsIl9faGFzT3duUHJvcCIsIl9fcHJvcElzRW51bSIsIl9fZGVmTm9ybWFsUHJvcCIsIm9iaiIsImtleSIsInZhbHVlIiwiX19zcHJlYWRWYWx1ZXMiLCJhIiwiYiIsInByb3AiLCJJU19CUk9XU0VSIiwiSVNfQU5EUk9JRCIsIklTX0ZJUkVGT1giLCJJU19JT1MiLCJfYSIsIkZPQ1VTX09VVExJTkUiLCJVSFRNTEVsZW1lbnQiLCJhdHRyIiwiZWwiLCJuYW1lIiwiZXZlbnRzIiwiYWN0aW9uIiwiZWxlbWVudCIsInJlc3QiLCJ0eXBlIiwib24iLCJvZmYiLCJvYnNlcnZlcnMiLCJtdXRhdGlvbk9ic2VydmVyIiwib3B0aW9ucyIsIm9ic2VydmVyIiwiZGV0YWlsIiwiYXNCdXR0b24iLCJldmVudCIsImlzQ2xpY2siLCJnZXRSb290Iiwibm9kZSIsIl9hMiIsInJvb3QiLCJpZCIsInVzZUlkIiwiY3JlYXRlRWxlbWVudCIsInRhZ05hbWUiLCJ0ZXh0MiIsImF0dHJzIiwidmFsIiwiY3VzdG9tRWxlbWVudHMiLCJpbnN0YW5jZSIsIkxJVkUiLCJMSVZFX1NSX0ZJWCIsInNwZWFrIiwic2V0VmFsdWUiLCJpbnB1dCIsImRhdGEiLCJfYiIsInByb3RvIiwiSVNfUFJFU1MiLCJpc01vdXNlRG93biIsIkVWRU5UUyIsIkVWRU5UX09OQ0UiLCJJU19GSVJFRk9YX0RFU0tUT1AiLCJJU19NT0JJTEUiLCJGQUxTRSIsIlRFWFRTIiwiVUhUTUxDb21ib2JveEVsZW1lbnQiLCJyZW5kZXIiLCJzeW5jSW5wdXRWYWx1ZSIsIl8iLCJ0YXJnZXQiLCJpc0Rpc2FibGVkIiwib25CbHVyIiwib25DbGljayIsIm9uRm9jdXMiLCJvbklucHV0Iiwib25LZXlEb3duIiwidGFnIiwidGV4dCIsImlzRGF0YSIsImNvbnRyb2wiLCJzZWxmIiwiX2ZvY3VzIiwiX3RleHRzIiwiaXRlbXMiLCJsaXN0IiwibXVsdGlwbGUiLCJsYWJlbCIsImVkaXRzIiwiYWRkZWROb2RlcyIsInJlbW92ZWROb2RlcyIsInNob3VsZEFubm91bmNlIiwiYXJpYUV4cGFuZGVkIiwiaW5wdXRNb2RlIiwibmV4dEZvY3VzIiwiaXNSZW1vdmUiLCJfYTMiLCJpZHgiLCJzZWxlY3QiLCJyZW1vdmUiLCJpdGVtMiIsIm9wdGlvbiIsImxhYmVsMiIsImFyaWEiLCJvcHQiLCJpdGVtIiwic3luY0NsZWFyV2l0aElucHV0Iiwic3luY09wdGlvbnNXaXRoSXRlbXMiLCJfc3BlYWsiLCJ2YWx1ZXMiLCJkaXNwYXRjaE1hdGNoIiwiY2hhbmdlIiwiY3JlYXRhYmxlIiwicXVlcnkiLCJtYXRjaCIsIm8iLCJkaXNwYXRjaENoYW5nZSIsInJlbW92YWJsZSIsImFkZCIsImkiLCJvbkJsdXJyZWQiLCJ4IiwieSIsImNsZWFyIiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwicmVwZWF0IiwiaXNDb250cm9sIiwiaW5UZXh0IiwiaW5kZXgiLCJmb3JtIiwiU0FGRV9MQUJFTExFREJZIiwiRElTUExBWV9CTE9DSyIsImF0dGFjaFN0eWxlIiwiY3NzIiwiQVJJQV9DT05UUk9MUyIsIkFSSUFfU0VMRUNURUQiLCJVSFRNTFRhYnNFbGVtZW50IiwicXVlcnlXaXRob3V0TmVzdGVkIiwiZ2V0U2VsZWN0ZWRJbmRleCIsInNldFNlbGVjdGVkIiwiVUhUTUxUYWJMaXN0RWxlbWVudCIsInRhYiIsInRhYnMiLCJwcmV2IiwibmV4dCIsIlNLSVBfQVRUUl9DSEFOR0UiLCJVSFRNTFRhYkVsZW1lbnQiLCJwYW5lbHMiLCJuZXh0UGFuZWwiLCJnZXRQYW5lbCIsInBhbmVsIiwidGFibGlzdCIsInRhYkxpc3QiLCJVSFRNTFRhYlBhbmVsRWxlbWVudCIsImlzRm9jdXNhYmxlIiwiaWQyIiwibWluIiwibWF4Iiwicm91bmQiLCJmbG9vciIsImNyZWF0ZUNvb3JkcyIsInYiLCJvcHBvc2l0ZVNpZGVNYXAiLCJvcHBvc2l0ZUFsaWdubWVudE1hcCIsImNsYW1wIiwic3RhcnQiLCJlbmQiLCJldmFsdWF0ZSIsInBhcmFtIiwiZ2V0U2lkZSIsInBsYWNlbWVudCIsImdldEFsaWdubWVudCIsImdldE9wcG9zaXRlQXhpcyIsImF4aXMiLCJnZXRBeGlzTGVuZ3RoIiwieUF4aXNTaWRlcyIsImdldFNpZGVBeGlzIiwiZ2V0QWxpZ25tZW50QXhpcyIsImdldEFsaWdubWVudFNpZGVzIiwicmVjdHMiLCJydGwiLCJhbGlnbm1lbnQiLCJhbGlnbm1lbnRBeGlzIiwibGVuZ3RoIiwibWFpbkFsaWdubWVudFNpZGUiLCJnZXRPcHBvc2l0ZVBsYWNlbWVudCIsImdldEV4cGFuZGVkUGxhY2VtZW50cyIsIm9wcG9zaXRlUGxhY2VtZW50IiwiZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQiLCJsclBsYWNlbWVudCIsInJsUGxhY2VtZW50IiwidGJQbGFjZW1lbnQiLCJidFBsYWNlbWVudCIsImdldFNpZGVMaXN0Iiwic2lkZSIsImlzU3RhcnQiLCJnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzIiwiZmxpcEFsaWdubWVudCIsImRpcmVjdGlvbiIsImV4cGFuZFBhZGRpbmdPYmplY3QiLCJwYWRkaW5nIiwiZ2V0UGFkZGluZ09iamVjdCIsInJlY3RUb0NsaWVudFJlY3QiLCJyZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudCIsIl9yZWYiLCJyZWZlcmVuY2UiLCJmbG9hdGluZyIsInNpZGVBeGlzIiwiYWxpZ25MZW5ndGgiLCJpc1ZlcnRpY2FsIiwiY29tbW9uWCIsImNvbW1vblkiLCJjb21tb25BbGlnbiIsImNvb3JkcyIsImNvbXB1dGVQb3NpdGlvbiIsImNvbmZpZyIsInN0cmF0ZWd5IiwibWlkZGxld2FyZSIsInBsYXRmb3JtIiwidmFsaWRNaWRkbGV3YXJlIiwic3RhdGVmdWxQbGFjZW1lbnQiLCJtaWRkbGV3YXJlRGF0YSIsInJlc2V0Q291bnQiLCJmbiIsIm5leHRYIiwibmV4dFkiLCJyZXNldCIsImRldGVjdE92ZXJmbG93Iiwic3RhdGUiLCJfYXdhaXQkcGxhdGZvcm0kaXNFbGUiLCJlbGVtZW50cyIsImJvdW5kYXJ5Iiwicm9vdEJvdW5kYXJ5IiwiZWxlbWVudENvbnRleHQiLCJhbHRCb3VuZGFyeSIsInBhZGRpbmdPYmplY3QiLCJjbGlwcGluZ0NsaWVudFJlY3QiLCJvZmZzZXRQYXJlbnQiLCJvZmZzZXRTY2FsZSIsImVsZW1lbnRDbGllbnRSZWN0IiwiZmxpcCIsIl9taWRkbGV3YXJlRGF0YSRhcnJvdyIsIl9taWRkbGV3YXJlRGF0YSRmbGlwIiwiaW5pdGlhbFBsYWNlbWVudCIsImNoZWNrTWFpbkF4aXMiLCJjaGVja0Nyb3NzQXhpcyIsInNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyIsImZhbGxiYWNrU3RyYXRlZ3kiLCJmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uIiwiZGV0ZWN0T3ZlcmZsb3dPcHRpb25zIiwiaW5pdGlhbFNpZGVBeGlzIiwiaXNCYXNlUGxhY2VtZW50IiwiZmFsbGJhY2tQbGFjZW1lbnRzIiwiaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiIsInBsYWNlbWVudHMiLCJvdmVyZmxvdyIsIm92ZXJmbG93cyIsIm92ZXJmbG93c0RhdGEiLCJzaWRlcyIsIl9taWRkbGV3YXJlRGF0YSRmbGlwMiIsIl9vdmVyZmxvd3NEYXRhJGZpbHRlciIsIm5leHRJbmRleCIsIm5leHRQbGFjZW1lbnQiLCJkIiwicmVzZXRQbGFjZW1lbnQiLCJfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIyIiwiY3VycmVudFNpZGVBeGlzIiwiYWNjIiwic2hpZnQiLCJsaW1pdGVyIiwiY3Jvc3NBeGlzIiwibWFpbkF4aXMiLCJtYWluQXhpc0Nvb3JkIiwiY3Jvc3NBeGlzQ29vcmQiLCJtaW5TaWRlIiwibWF4U2lkZSIsImxpbWl0ZWRDb29yZHMiLCJzaXplIiwiX3N0YXRlJG1pZGRsZXdhcmVEYXRhIiwiX3N0YXRlJG1pZGRsZXdhcmVEYXRhMiIsImFwcGx5IiwiaXNZQXhpcyIsImhlaWdodFNpZGUiLCJ3aWR0aFNpZGUiLCJtYXhpbXVtQ2xpcHBpbmdIZWlnaHQiLCJtYXhpbXVtQ2xpcHBpbmdXaWR0aCIsIm92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0Iiwib3ZlcmZsb3dBdmFpbGFibGVXaWR0aCIsIm5vU2hpZnQiLCJhdmFpbGFibGVIZWlnaHQiLCJhdmFpbGFibGVXaWR0aCIsInhNaW4iLCJ4TWF4IiwieU1pbiIsInlNYXgiLCJuZXh0RGltZW5zaW9ucyIsImhhc1dpbmRvdyIsImdldE5vZGVOYW1lIiwiaXNOb2RlIiwiZ2V0V2luZG93IiwiX25vZGUkb3duZXJEb2N1bWVudCIsImdldERvY3VtZW50RWxlbWVudCIsImlzRWxlbWVudCIsImlzSFRNTEVsZW1lbnQiLCJpc1NoYWRvd1Jvb3QiLCJpbnZhbGlkT3ZlcmZsb3dEaXNwbGF5VmFsdWVzIiwiaXNPdmVyZmxvd0VsZW1lbnQiLCJvdmVyZmxvd1giLCJvdmVyZmxvd1kiLCJkaXNwbGF5IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInRhYmxlRWxlbWVudHMiLCJpc1RhYmxlRWxlbWVudCIsInRvcExheWVyU2VsZWN0b3JzIiwiaXNUb3BMYXllciIsInNlbGVjdG9yIiwidHJhbnNmb3JtUHJvcGVydGllcyIsIndpbGxDaGFuZ2VWYWx1ZXMiLCJjb250YWluVmFsdWVzIiwiaXNDb250YWluaW5nQmxvY2siLCJlbGVtZW50T3JDc3MiLCJ3ZWJraXQiLCJpc1dlYktpdCIsImdldENvbnRhaW5pbmdCbG9jayIsImN1cnJlbnROb2RlIiwiZ2V0UGFyZW50Tm9kZSIsImlzTGFzdFRyYXZlcnNhYmxlTm9kZSIsImxhc3RUcmF2ZXJzYWJsZU5vZGVOYW1lcyIsImdldE5vZGVTY3JvbGwiLCJyZXN1bHQiLCJnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvciIsInBhcmVudE5vZGUiLCJnZXRPdmVyZmxvd0FuY2VzdG9ycyIsInRyYXZlcnNlSWZyYW1lcyIsIl9ub2RlJG93bmVyRG9jdW1lbnQyIiwic2Nyb2xsYWJsZUFuY2VzdG9yIiwiaXNCb2R5Iiwid2luIiwiZnJhbWVFbGVtZW50IiwiZ2V0RnJhbWVFbGVtZW50IiwiZ2V0Q3NzRGltZW5zaW9ucyIsImhhc09mZnNldCIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0Iiwic2hvdWxkRmFsbGJhY2siLCJ1bndyYXBFbGVtZW50IiwiZ2V0U2NhbGUiLCJkb21FbGVtZW50IiwiJCIsIm5vT2Zmc2V0cyIsImdldFZpc3VhbE9mZnNldHMiLCJzaG91bGRBZGRWaXN1YWxPZmZzZXRzIiwiaXNGaXhlZCIsImZsb2F0aW5nT2Zmc2V0UGFyZW50IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaW5jbHVkZVNjYWxlIiwiaXNGaXhlZFN0cmF0ZWd5IiwiY2xpZW50UmVjdCIsInNjYWxlIiwidmlzdWFsT2Zmc2V0cyIsIm9mZnNldFdpbiIsImN1cnJlbnRXaW4iLCJjdXJyZW50SUZyYW1lIiwiaWZyYW1lU2NhbGUiLCJpZnJhbWVSZWN0IiwiZ2V0V2luZG93U2Nyb2xsQmFyWCIsImxlZnRTY3JvbGwiLCJnZXRIVE1MT2Zmc2V0IiwiZG9jdW1lbnRFbGVtZW50Iiwic2Nyb2xsIiwiaWdub3JlU2Nyb2xsYmFyWCIsImh0bWxSZWN0IiwiY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QiLCJ0b3BMYXllciIsIm9mZnNldHMiLCJpc09mZnNldFBhcmVudEFuRWxlbWVudCIsIm9mZnNldFJlY3QiLCJodG1sT2Zmc2V0IiwiZ2V0Q2xpZW50UmVjdHMiLCJnZXREb2N1bWVudFJlY3QiLCJodG1sIiwiYm9keSIsImdldFZpZXdwb3J0UmVjdCIsInZpc3VhbFZpZXdwb3J0IiwidmlzdWFsVmlld3BvcnRCYXNlZCIsImFic29sdXRlT3JGaXhlZCIsImdldElubmVyQm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yIiwiY2xpcHBpbmdBbmNlc3RvciIsImhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvciIsInN0b3BOb2RlIiwiZ2V0Q2xpcHBpbmdFbGVtZW50QW5jZXN0b3JzIiwiY2FjaGUiLCJjYWNoZWRSZXN1bHQiLCJjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSIsImVsZW1lbnRJc0ZpeGVkIiwiY29tcHV0ZWRTdHlsZSIsImN1cnJlbnROb2RlSXNDb250YWluaW5nIiwiYW5jZXN0b3IiLCJnZXRDbGlwcGluZ1JlY3QiLCJjbGlwcGluZ0FuY2VzdG9ycyIsImZpcnN0Q2xpcHBpbmdBbmNlc3RvciIsImNsaXBwaW5nUmVjdCIsImFjY1JlY3QiLCJnZXREaW1lbnNpb25zIiwiZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQiLCJzZXRMZWZ0UlRMU2Nyb2xsYmFyT2Zmc2V0IiwiaXNTdGF0aWNQb3NpdGlvbmVkIiwiZ2V0VHJ1ZU9mZnNldFBhcmVudCIsInBvbHlmaWxsIiwicmF3T2Zmc2V0UGFyZW50IiwiZ2V0T2Zmc2V0UGFyZW50Iiwic3ZnT2Zmc2V0UGFyZW50IiwiZ2V0RWxlbWVudFJlY3RzIiwiZ2V0T2Zmc2V0UGFyZW50Rm4iLCJnZXREaW1lbnNpb25zRm4iLCJmbG9hdGluZ0RpbWVuc2lvbnMiLCJpc1JUTCIsInJlY3RzQXJlRXF1YWwiLCJvYnNlcnZlTW92ZSIsIm9uTW92ZSIsImlvIiwidGltZW91dElkIiwiY2xlYW51cCIsIl9pbyIsInJlZnJlc2giLCJza2lwIiwidGhyZXNob2xkIiwiZWxlbWVudFJlY3RGb3JSb290TWFyZ2luIiwiaW5zZXRUb3AiLCJpbnNldFJpZ2h0IiwiaW5zZXRCb3R0b20iLCJpbnNldExlZnQiLCJpc0ZpcnN0VXBkYXRlIiwiaGFuZGxlT2JzZXJ2ZSIsImVudHJpZXMiLCJyYXRpbyIsImF1dG9VcGRhdGUiLCJ1cGRhdGUiLCJhbmNlc3RvclNjcm9sbCIsImFuY2VzdG9yUmVzaXplIiwiZWxlbWVudFJlc2l6ZSIsImxheW91dFNoaWZ0IiwiYW5pbWF0aW9uRnJhbWUiLCJyZWZlcmVuY2VFbCIsImFuY2VzdG9ycyIsImNsZWFudXBJbyIsInJlb2JzZXJ2ZUZyYW1lIiwicmVzaXplT2JzZXJ2ZXIiLCJmaXJzdEVudHJ5IiwiX3Jlc2l6ZU9ic2VydmVyIiwiZnJhbWVJZCIsInByZXZSZWZSZWN0IiwiZnJhbWVMb29wIiwibmV4dFJlZlJlY3QiLCJfcmVzaXplT2JzZXJ2ZXIyIiwic2hpZnQkMSIsImZsaXAkMSIsInNpemUkMSIsIm1lcmdlZE9wdGlvbnMiLCJwbGF0Zm9ybVdpdGhDYWNoZSIsImNvbXB1dGVQb3NpdGlvbiQxIiwiUVVJQ0tfRVZFTlQiLCJkZWJvdW5jZSIsImNhbGxiYWNrIiwiZGVsYXkiLCJ0aW1lciIsImFyZ3MiLCJVVUlEIiwiVU5CSU5EIiwib25Mb2FkZWQiLCJydW4iLCJ1bmJpbmQiLCJBTkNIT1JFRCIsImFuY2hvclBvc2l0aW9uIiwiYW5jaG9yIiwiY3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlciIsInF1ZXVlIiwib25GcmFtZSIsIm9uVGltZXIiLCJNVVRBVE9SUyIsIm9uTXV0YXRpb24iLCJjbGFzc05hbWUiLCJlbGVtcyIsIm11dGF0b3IiLCJpc0lucHV0TGlrZSIsIkNTU19CUkVBRENSVU1CUyIsInN0eWxlcyIsIkNTU19DSElQIiwiQ1NTX0hFTFBURVhUIiwiQ1NTX1BBR0lOQVRJT04iLCJDTElDS1MiLCJNQVRPTU8iLCJCQU5ORVIiLCJCQU5ORVJfVVJMIiwiYW5hbHl0aWNzIiwiY29uc2VudCIsImVuYWJsZWQiLCJtYXRvbW9JZCIsIm1hdG9tb1RhZ01hbmFnZXJJZCIsInJlbmRlckJhbm5lciIsInNyYyIsInVybCIsInRpdGxlIiwiY2F0ZWdvcnkiLCJyZXN1bHRzIiwiYmFubmVyIiwib25DbG9zZSIsImhhbmRsZVRyYWNrIiwicHJvY2Vzc1RyYWNrIiwiaGVhZGluZyIsImdyb3VwIiwicG9wb3ZlciIsIm9wZW4iLCJzdHlsZSIsImhlYWQiLCJzaGVldCIsImZvcmNlIiwiQ1NTX0FQUCIsIkNTU19TVElDS1kiLCJDU1NfVE9HR0xFIiwiQ1NTX1NJREVCQVIiLCJ1c2VUcmFuc2l0aW9uIiwidG9nZ2xlQXBwRXhwYW5kZWQiLCJoYW5kbGVBcHBUb2dnbGVDbGljayIsInN0b3AiLCJsaW5rIiwiY2xvc2VTaWRlYmFyIiwic2lkZWJhciIsIk1JTl9ZIiwiU0NST0xMX1VQIiwiU1RJQ0siLCJTVElDS19FTCIsIlNUSUNLX0giLCJTVElDS19ZIiwiU1RVQ0siLCJXSU5fSCIsIldJTl9ZIiwiaGFuZGxlTXV0YXRpb24iLCJzdGlja3kiLCJoYW5kbGVBcHBTY3JvbGwiLCJORVhUX1kiLCJORVhUX1VQIiwiZ2V0U3RlcHMiLCJub3ciLCJzaG93Iiwib2Zmc2V0IiwicGFnZXMiLCJwYWdpbmF0aW9uIiwiY3VycmVudCIsInRvdGFsIiwicGFnZSIsImhhbmRsZUJyZWFkY3J1bWJzTXV0YXRpb24iLCJicmVhZGNydW1icyIsImJyZWFkY3VtYnMiLCJjcnVtYiIsIkNTU19ESUFMT0ciLCJESUFMT0dTIiwiaGFuZGxlTW9kYWwiLCJkaWFsb2ciLCJoYW5kbGVEaWFsb2dDbGljayIsImhhbmRsZUVycm9zdW1tYXJ5SW5qZWN0IiwiZmlyc3QiLCJESVNBQkxFRCIsIlNFTEVDVEVEIiwiVUhUTUxPcHRpb25FbGVtZW50IiwiTElWRV9USU1FUiIsIklOUFVUX0RFQk9VTkNFIiwiRVZFTlRTX0lOUFVUIiwiVUhUTUxEYXRhTGlzdEVsZW1lbnQiLCJkaXNjb25uZWN0SW5wdXQiLCJfcHJldiIsInNldHVwSW5wdXQiLCJzZXRFeHBhbmRlZCIsIl9jIiwiaXNQb3BvdmVyIiwiaXNJbnB1dCIsInJlbGF0ZWRUYXJnZXQiLCJhbHRLZXkiLCJjdHJsS2V5Iiwic2hpZnRLZXkiLCJtZXRhS2V5IiwiaXNFc2NhcGUiLCJfcm9vdCIsIl9pbnB1dCIsImZpbHRlciIsImhpZGRlbiIsInZpc2libGUiLCJDU1NfRklFTEQiLCJDU1NfVkFMSURBVElPTlMiLCJDU1NfVkFMSURBVElPTiIsImdldFRleHQiLCJoYW5kbGVGaWVsZE11dGF0aW9uIiwiZmllbGRzIiwidmFsaWRhdGUiLCJmaWVsZCIsImxhYmVscyIsImRlc2NzIiwidmFsaWRzIiwiY29tYm9ib3giLCJ2YWxpZCIsImRlc2MiLCJyZW5kZXJDb21ib2JveCIsInJlbmRlckNvdW50ZXIiLCJyZW5kZXJUZXh0YXJlYVNpemUiLCJ0ZXh0YXJlYSIsImxpbWl0IiwicmVtYWluZGVyIiwibmV4dEludmFsaWQiLCJwcmV2SW52YWxpZCIsIm92ZXIiLCJ1bmRlciIsImhhbmRsZUZpZWxkVG9nZ2xlIiwiaGFuZGxlRmllbGRJbnB1dCIsImhhbmRsZUZpZWxkVmFsZGlhdGlvbiIsIkNTU19GSUVMRFNFVCIsIkFSSUFfREVTQyIsIkFSSUFfSU5WQUxJRCIsImhhbmRsZUZpZWxkc2V0TXV0YXRpb24iLCJmaWVsZHNldHMiLCJmaWVsZHNldCIsImlucHV0cyIsInZhbGlkSWQiLCJDU1NfTE9HTyIsImhhbmRsZUxvZ29NdXRhdGlvbiIsImxvZ28iLCJpY29uIiwic3ZnIiwiaXNEb3QiLCJiYWNrIiwiQ1NTX1BPUE9WRVIiLCJPUEVOX1BPUE9WRVJTIiwiaGFuZGxlUG9wb3ZlclRvZ2dsZSIsIm5ld1N0YXRlIiwiaXNDbG9zaW5nIiwiaXNDb250YWluIiwiaGFuZGxlUG9wb3ZlckxpbmtDbGljayIsImNsb3NlIiwiQ1NTX1RBQkxFIiwiaGFuZGxlVGFibGVNdXRhdGlvbiIsInRhYmxlcyIsInRhYmxlIiwidGhzIiwiaXNUYm9keSIsInJvdyIsImNlbGwiLCJDU1NfVE9HR0xFR1JPVVAiLCJoYW5kbGVUb2dnbGVncm91cEtleWRvd24iLCJtb3ZlIiwiREVTQ1JJQkVEQlkiLCJFU0MiLCJMQUJFTExFREJZIiwiUE9TSVRJT05fQ1NTX1BST1BFUlRZIiwiVEhST1RUTEVfREVMQVkiLCJUT09MVElQIiwiQU5DSE9SIiwiTEFTVF9DQUxMIiwiVEhST1RUTEUiLCJoYW5kbGVUb29sdGlwTW92ZSIsIndhaXQiLCJoYW5kbGVUb29sdGlwTW92ZVRocm90dGxlZCIsImNvbnRlbnQiLCJwb3NpdGlvbiIsImhhZExhYmVsIiwiaGFzTGFiZWwiLCJVSFRNTERldGFpbHNFbGVtZW50IiwiaGlkZSIsInVEZXRhaWxzTGlzdCIsInVEZXRhaWxzIiwic3VtbWFyeSIsImlzU3VtbWFyeSIsIlVIVE1MU3VtbWFyeUVsZW1lbnQiLCJnZXRMYWJlbCIsImVsMiIsIlVIVE1MUHJvZ3Jlc3NFbGVtZW50Iiwicm9sZUltYWdlIiwicGVyY2VudGFnZSIsImdldE51bWJlciIsInNldE51bWJlciIsImlzTnVtZXJpYyJdLCJtYXBwaW5ncyI6ImtDQUFBLElBQUlBLEdBQVksT0FBTyxlQUNuQkMsR0FBc0IsT0FBTyxzQkFDN0JDLEdBQWUsT0FBTyxVQUFVLGVBQ2hDQyxHQUFlLE9BQU8sVUFBVSxxQkFDaENDLEdBQWtCLENBQUNDLEVBQUtDLEVBQUtDLElBQVVELEtBQU9ELEVBQU1MLEdBQVVLLEVBQUtDLEVBQUssQ0FBRSxXQUFZLEdBQU0sYUFBYyxHQUFNLFNBQVUsR0FBTSxNQUFBQyxDQUFLLENBQUUsRUFBSUYsRUFBSUMsQ0FBRyxFQUFJQyxFQUN0SkMsR0FBaUIsQ0FBQ0MsRUFBR0MsSUFBTSxDQUM3QixRQUFTQyxLQUFRRCxJQUFNQSxFQUFJLENBQUEsR0FDckJSLEdBQWEsS0FBS1EsRUFBR0MsQ0FBSSxHQUMzQlAsR0FBZ0JLLEVBQUdFLEVBQU1ELEVBQUVDLENBQUksQ0FBQyxFQUNwQyxHQUFJVixHQUNGLFFBQVNVLEtBQVFWLEdBQW9CUyxDQUFDLEVBQ2hDUCxHQUFhLEtBQUtPLEVBQUdDLENBQUksR0FDM0JQLEdBQWdCSyxFQUFHRSxFQUFNRCxFQUFFQyxDQUFJLENBQUMsRUFFdEMsT0FB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QUFFLEVBQ3JDcEUsRUFBSyxLQUFNLGtCQUFtQixJQUFJLEVBQ2xDQSxFQUFLLEtBQU0sZ0JBQWlCLEtBQUssRUFDakNBLEVBQUssS0FBTSxnQkFBaUIsR0FBRyxFQUMvQkEsRUFBSyxLQUFNLGdCQUFpQixHQUFHdXBCLENBQVUsRUFBRSxFQUMzQ3ZwQixFQUFLLEtBQU0sT0FBUXNwQixFQUFZLE1BQVEsYUFBYSxFQUNwRHJoQixHQUFtQixFQUNyQixDQUNBLElBQUksUUFBUyxDQUNYLE1BQU03RCxFQUFRLEtBQUssUUFBUSxrQkFBa0IsRUFDdkN1RSxFQUFNcEgsR0FBTSxJQUFJLEVBQ3RCLE9BQUk2QyxJQUFPQSxFQUFNLFFBQVV1RSxHQUNoQnpILEdBQVEsSUFBSSxFQUFFLGlCQUN2QixjQUFjeUgsQ0FBRyxJQUN2QixDQUVFLENBQ0EsSUFBSSxVQUFXLENBQ2IsT0FBTyxLQUFLLFFBQVUsS0FBTyxHQUFLLEtBQUssSUFBSSxLQUFLLE1BQVEsS0FBSyxJQUFLLENBQUMsQ0FDckUsQ0FDQSxJQUFJLE9BQVEsQ0FDVixPQUFPNmdCLEdBQVUsS0FBTSxPQUFPLENBQ2hDLENBQ0EsSUFBSSxNQUFNcHFCLEVBQU8sQ0FDZnFxQixHQUFVLEtBQU0sUUFBU3JxQixDQUFLLENBQ2hDLENBQ0EsSUFBSSxLQUFNLENBQ1IsT0FBT29xQixHQUFVLEtBQU0sS0FBSyxHQUFLLENBQ25DLENBQ0EsSUFBSSxJQUFJM2dCLEVBQUssQ0FDWDRnQixHQUFVLEtBQU0sTUFBTzVnQixDQUFHLENBQzVCLENBQ0YsRUFFQXdnQixHQUFxQixlQUFpQixHQUN0QyxJQUFJSyxHQUFhdHFCLEdBQVUsQ0FBQyxPQUFPLE1BQU0sT0FBTyxXQUFXLEdBQUdBLENBQUssRUFBRSxDQUFDLEdBQUssT0FBTyxTQUFTLE9BQU9BLENBQUssQ0FBQyxFQUNwR29xQixHQUFZLENBQUN2cEIsRUFBSWQsSUFBUSxDQUMzQixNQUFNQyxFQUFRWSxFQUFLQyxFQUFJZCxDQUFHLEVBQzFCLE9BQU91cUIsR0FBVXRxQixDQUFLLEVBQUksS0FBSyxJQUFJLEVBQUcsT0FBTyxXQUFXQSxDQUFLLENBQUMsRUFBSSxJQUNwRSxFQUNJcXFCLEdBQVksQ0FBQ3hwQixFQUFJZCxFQUFLeUMsSUFBUSxDQUNoQyxHQUFJQSxJQUFRLE1BQVE4bkIsR0FBVTluQixDQUFHLEVBQUc1QixFQUFLQyxFQUFJZCxFQUFLLEdBQUd5QyxDQUFHLEVBQUUsTUFDckQsT0FBTSxJQUFJLE1BQU0sOEJBQThCNUIsQ0FBSSxPQUFPNEIsQ0FBRyxHQUFHLENBQ3RFLEVBQ0EsT0FBQUMsR0FBZSxPQUFPLGFBQWN3bkIsRUFBb0IiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsMTQsMjIsMjNdfQ==
|