@mattilsynet/design 1.1.2 → 1.1.3
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/app/app-observer.d.ts +0 -0
- package/mtds/app/app-observer.js +34 -0
- package/mtds/app/app-observer.js.map +1 -0
- package/mtds/app/app-toggle.js +24 -0
- package/mtds/app/app-toggle.js.map +1 -0
- package/mtds/app/app-toggle2.js +9 -0
- package/mtds/app/app-toggle2.js.map +1 -0
- package/mtds/app/app.d.ts +18 -0
- package/mtds/app/app.js +36 -0
- package/mtds/app/app.js.map +1 -0
- package/mtds/app/app.stories.d.ts +16 -0
- package/mtds/divider/divider.d.ts +2 -2
- package/mtds/divider/divider.js.map +1 -1
- package/mtds/field/field.d.ts +1 -4
- package/mtds/field/field.js +44 -35
- package/mtds/field/field.js.map +1 -1
- package/mtds/index.d.ts +3 -1
- package/mtds/index.iife.js +5 -5
- package/mtds/index.js +6 -4
- package/mtds/index.js.map +1 -1
- package/mtds/layout/layout.d.ts +1 -7
- package/mtds/layout/layout.js +12 -15
- package/mtds/layout/layout.js.map +1 -1
- package/mtds/layout/layout.stories.d.ts +0 -1
- package/mtds/logo/logo-observer.js +9 -9
- package/mtds/logo/logo-observer.js.map +1 -1
- package/mtds/package.json.js +5 -0
- package/mtds/package.json.js.map +1 -0
- package/mtds/popover/popover-observer.js +13 -13
- package/mtds/popover/popover-observer.js.map +1 -1
- package/mtds/react.d.ts +1 -0
- package/mtds/react.js +60 -59
- package/mtds/react.js.map +1 -1
- package/mtds/styles.css +1 -1
- package/mtds/styles.json +36 -35
- package/mtds/styles.module.css.js +80 -78
- package/mtds/styles.module.css.js.map +1 -1
- package/mtds/tailwind.css +2 -0
- package/mtds/utils.js +35 -26
- package/mtds/utils.js.map +1 -1
- package/package.json +7 -7
- package/mtds/layout/app-observer.d.ts +0 -1
- package/mtds/layout/app-observer.js +0 -34
- package/mtds/layout/app-observer.js.map +0 -1
package/mtds/index.iife.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
var mtds=function(tt){"use strict";var go;const $o=(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},wo=({current:t=1,total:e=10,show:n=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:$o(t,e,n).map((o,i)=>({current:o===t&&"page",key:`key-${o}-${i}`,page:o}))}),ce="_alert_mc7vk_1 _ds-alert_oaddr_1",de="_avatar_mc7vk_1 _ds-avatar_oaddr_1",ue="_badge_mc7vk_1",fe="_breadcrumbs_mc7vk_1 _ds-breadcrumbs_oaddr_1",pe="_button_mc7vk_1 _ds-button_oaddr_1",he="_card_mc7vk_1",me="_info_mc7vk_1",ve="_group_mc7vk_1",_e="_chip_mc7vk_1 _ds-chip_oaddr_1",be="_details_mc7vk_1 _ds-details_oaddr_1",ge="_dialog_mc7vk_1 _ds-dialog_oaddr_1",ye="_divider_mc7vk_1",Ee="_errorsummary_mc7vk_1 _ds-error-summary_oaddr_1",$e="__errorsummary_mc7vk_1",we="_field_mc7vk_1 _ds-field_oaddr_1",Se="_affixes_mc7vk_1 _ds-field-affixes_oaddr_1",Te="_fieldset_mc7vk_1 _ds-fieldset_oaddr_1",ke="_heading_mc7vk_1 _ds-heading_oaddr_1",xe="_helptext_mc7vk_1 _ds-focus_oaddr_1",Ie="_input_mc7vk_1 _ds-input_oaddr_1",Ce="_app_mc7vk_1",Ae="_grid_mc7vk_1",Le="_flex_mc7vk_1",Me="_prose_mc7vk_1",Oe="_link_mc7vk_1",Pe="_logo_mc7vk_1",De="_pagination_mc7vk_1 _ds-pagination_oaddr_1",Ne="_popover_mc7vk_1",Re="_progress_mc7vk_1",He="__indeterminate_mc7vk_1",Be="_skeleton_mc7vk_1 _ds-skeleton_oaddr_1",Fe="__skeleton_mc7vk_1",Ue="_spinner_mc7vk_1",Ve="_table_mc7vk_1 _ds-table_oaddr_1",Ye="__scrollShadow_mc7vk_1",Ke="_tabs_mc7vk_1 _ds-tabs_oaddr_1",We="_tag_mc7vk_1 _ds-tag_oaddr_1",qe="__tooltip_mc7vk_1",je="_validation_mc7vk_1 _ds-validation-message_oaddr_1",Xe="_body_mc7vk_144",g={alert:ce,avatar:de,badge:ue,breadcrumbs:fe,button:pe,card:he,info:me,group:ve,chip:_e,details:be,dialog:ge,divider:ye,errorsummary:Ee,_errorsummary:$e,field:we,affixes:Se,fieldset:Te,heading:ke,helptext:xe,input:Ie,app:Ce,grid:Ae,flex:Le,prose:Me,link:Oe,logo:Pe,pagination:De,popover:Ne,progress:Re,_indeterminate:He,skeleton:Be,_skeleton:Fe,spinner:Ue,table:Ve,_scrollShadow:Ye,tabs:Ke,tag:We,_tooltip:qe,validation:je,body:Xe},So=Object.freeze(Object.defineProperty({__proto__:null,_errorsummary:$e,_indeterminate:He,_scrollShadow:Ye,_skeleton:Fe,_tooltip:qe,affixes:Se,alert:ce,app:Ce,avatar:de,badge:ue,body:Xe,breadcrumbs:fe,button:pe,card:he,chip:_e,default:g,details:be,dialog:ge,divider:ye,errorsummary:Ee,field:we,fieldset:Te,flex:Le,grid:Ae,group:ve,heading:ke,helptext:xe,info:me,input:Ie,link:Oe,logo:Pe,pagination:De,popover:Ne,progress:Re,prose:Me,skeleton:Be,spinner:Ue,table:Ve,tabs:Ke,tag:We,validation:je},Symbol.toStringTag,{value:"Module"})),T={capture:!0,passive:!0},L=typeof window<"u"&&typeof document<"u";function d(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 To=0;const ko=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function W(t){return t.id||(t.id=`${ko}${++To}`),t.id}const xo=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},y=(t,...e)=>xo("add",t,e),k=L?document.createElement("div"):null,et=new Map,Io=()=>{for(const[t,e]of et)e()};k&&(k.style.cssText="position:absolute;padding:1px;top:0;left:0px",y(window,"load,resize,scroll",Io,T));const M={top:0,right:1,bottom:2,left:3};function q(t,e,n){var Eo;if(e===!1||!e.isConnected||!t.isConnected)return et.delete(t);if(k!=null&&k.isConnected||document.body.append(k||""),!et.has(t)){const gs=M[n]??M.bottom;return(Eo=et.set(t,()=>q(t,e,gs)).get(t))==null?void 0:Eo()}const o=e instanceof HTMLElement,{offsetWidth:i,offsetHeight:s}=t,r=o?e.offsetWidth:e.clientWidth,a=o?e.offsetHeight:e.clientHeight,{width:c,height:l,left:f,top:m}=e.getBoundingClientRect(),w=Math.round(f-(r-c)/2),E=Math.round(m-(a-l)/2),ae=w-i>0,K=r+r+i<window.innerWidth,xt=E-s>0,v=E+a+s<window.innerHeight,J=n===M.bottom&&K||!ae,Z=n===M.bottom&&v||!xt,le=Math.min(Math.max(10,w-(i-r)/2),window.innerWidth-i-10),bs=Math.min(Math.max(10,E-(s-a)/2),window.innerHeight-s-10),yo=n===M.top||n===M.bottom;t.style.left=`${Math.round(yo?le:J?w+r:w-i)}px`,t.style.top=`${Math.round(yo?Z?E+a:E-s:bs)}px`,k==null||k.style.setProperty("translate",`${Math.round(window.scrollX+w+r+i+30)}px ${Math.round(window.scrollY+E+a+s+30)}px`)}function Ge(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 It=new WeakMap,O=(t,e,n)=>{const o=t.getElementsByClassName(e),i=It.get(t)||[];i.length||(It.set(t,i),Ge((s,r)=>{if(t.isConnected&&(i!=null&&i.length))for(const a of i)a();else r==null||r.disconnect(),It.delete(t)}).observe(t,{attributeFilter:["class"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>n(o))},S=t=>{L&&(document.readyState==="complete"?window.requestAnimationFrame(t):y(window,"load",t))},Ct=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),Co=g.breadcrumbs.split(" ")[0];function Ao(t){for(const e of t)e.querySelectorAll("li a").forEach((n,o,{length:i})=>{d(n,"aria-current",o===i-1?"page":null)})}S(()=>O(document.documentElement,Co,Ao));const Lo=g.dialog.split(" ")[0],Mo=L?document.getElementsByClassName(Lo):[],Oo=()=>{for(const t of Mo)t.isConnected&&t.showModal&&t.close&&(t.matches('[open]:not([data-modal="false"]):not(:modal)')?(d(t,"open",null),t.showModal()):t.matches(":modal:not([open])")&&(d(t,"open",""),t.close()))},Po=({clientX:t,clientY:e,target:n})=>{var o;if(n instanceof HTMLDialogElement&&d(n,"data-closedby")==="any"){const{top:i,right:s,bottom:r,left:a}=n.getBoundingClientRect();i<=e&&e<=r&&a<=t&&t<=s||n.close()}else n instanceof Element&&n.closest('button[data-command="close"]')&&((o=n==null?void 0:n.closest("dialog"))==null||o.close())};S(()=>{y(document,"click",Po,T),Ge(Oo).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function Do(t){var n;if(t.animationName!==g._errorsummary)return;const e=(n=t.target)==null?void 0:n.firstElementChild;e instanceof HTMLHeadingElement&&(d(e,"tabindex","-1"),e.focus())}S(()=>y(document,"animationend",Do,T));var No=Object.defineProperty,ze=Object.getOwnPropertySymbols,Ro=Object.prototype.hasOwnProperty,Ho=Object.prototype.propertyIsEnumerable,Qe=(t,e,n)=>e in t?No(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Bo=(t,e)=>{for(var n in e||(e={}))Ro.call(e,n)&&Qe(t,n,e[n]);if(ze)for(var n of ze(e))Ho.call(e,n)&&Qe(t,n,e[n]);return t},P=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Fo=P&&/android/i.test(navigator.userAgent),At=P&&/iPad|iPhone|iPod/.test(navigator.userAgent),Je=P&&/^((?!chrome|android).)*safari/i.test(navigator.userAgent),Ze;P&&/^Mac/i.test(((Ze=navigator.userAgentData)==null?void 0:Ze.platform)||navigator.platform);var Uo=`${Fo?"data":"aria"}-labelledby`,tn=`${Je?"aria":"data"}-multiselectable`,en=":host(:not([hidden])) { display: block }",Vo="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",nn=typeof HTMLElement>"u"?class{}:HTMLElement;function p(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 on=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Lt=(t,...e)=>on("add",t,e),Mt=(t,...e)=>on("remove",t,e),sn=(t,e)=>t.attachShadow({mode:"open"}).append(Pt("slot"),Pt("style",e)),nt=new WeakMap,rn=(t,e)=>{if(e===void 0)return nt.get(t);try{nt.get(t).disconnect(),nt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),nt.set(t,n)}},an=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},Yo=0,Ot=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Yo).toString(32)}`),t.id):"",Pt=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},ln={define:(t,e)=>!P||window.customElements.get(t)||window.customElements.define(t,e)},Ko=t=>{const e=Pt("div");return e.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",p(e,"aria-live",t),e};function cn(t,e,n){if(!e)return Object.keys(t).map(i=>`data-sr-${i}`);const o=(e==null?void 0:e.startsWith("data-sr-"))&&e.slice(8);return o&&n&&t[o]&&(t[o]=n),[]}var Dt="disabled",j="selected",Wo=class extends nn{static get observedAttributes(){return[Dt,j]}constructor(){super(),sn(this,`${en}:host(:focus){${Vo}}:host{ cursor: pointer }`)}connectedCallback(){At||(this.tabIndex=-1),p(this,"role")||p(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){p(this,"aria-disabled",`${this.disabled}`),p(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[j]}set defaultSelected(e){this[j]=e}get disabled(){return p(this,Dt)!==null}set disabled(e){p(this,Dt,e?"":null)}get form(){return this.closest("form")}get index(){var e;const n=(e=this.closest("u-datalist"))==null?void 0:e.getElementsByTagName("u-option");return Array.from(n||[this]).indexOf(this)}get label(){return p(this,"label")||this.text}set label(e){p(this,"label",e)}get selected(){return p(this,j)!==null}set selected(e){p(this,j,e?"":null)}get text(){var e;return((e=this.textContent)==null?void 0:e.trim())||""}set text(e){this.textContent=e}get value(){return p(this,"value")||this.text}set value(e){p(this,"value",e)}};ln.define("u-option",Wo);var Nt=!1,dn,qo=0,D,jo=Je&&!At,un="click,focusout,input,keydown,mousedown,mouseup",fn={singular:"%d hit",plural:"%d hits"},pn=class extends nn{constructor(){super(),this._blurTimer=0,this._input=null,this._root=null,this._value="",this._texts=Bo({},fn),sn(this,`${en}::slotted(u-option[disabled]) { display: none !important }`)}static get observedAttributes(){return["id",...cn(fn)]}connectedCallback(){this.hidden=!0,this._root=an(this),D||(D=Ko("assertive")),D.isConnected||document.body.appendChild(D),p(this,"role","listbox"),p(this,"tabindex","-1"),Lt(this._root,"focusin",this),Lt(this._root,"focus",this,!0),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){Mt(this._root||this,"focus",this,!0),Mt(this._root||this,"focusin",this),Rt(this),this._root=null}attributeChangedCallback(e,n,o){var i;cn(this._texts,e,o);const s=(i=this._root)==null?void 0:i.querySelectorAll(`input[list="${this.id}"]`);for(const r of s||[])mn(this,r)}handleEvent(e){const{type:n}=e;e.defaultPrevented||(n==="click"&&zo(this,e),(n==="focus"||n==="focusin")&&Xo(this,e),n==="focusout"&&Go(this),n==="keydown"&&Qo(this,e),(n==="mutation"||n==="input")&&_n(this,e),n==="mouseup"&&(Nt=!1),n==="mousedown"&&(Nt=this.contains(e.target)))}get options(){return this.getElementsByTagName("u-option")}},Xo=(t,{target:e})=>{var n;const o=t._input===e;if(o||t.contains(e))return clearTimeout(t._blurTimer);!o&&e instanceof HTMLInputElement&&p(e,"list")===t.id&&(t._input&&Rt(t),t._input=e,p(t,Uo,Ot((n=t._input.labels)==null?void 0:n[0])),Lt(t._root||t,un,t),rn(t,{attributeFilter:["value"],attributes:!0,childList:!0,subtree:!0}),N(t,!0))},Go=t=>{Nt||(t._blurTimer=setTimeout(()=>Rt(t)))},zo=(t,{target:e})=>{var n,o,i,s,r;const a=p(t,tn)!=="true",c=[...t.options].find(l=>l.contains(e));if(t._input===e)N(t,!0);else if(c&&ot(c)){for(const l of t.options)l===c?l.selected=!0:a&&(l.selected=!1);(o=(n=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"value"))==null?void 0:n.set)==null||o.call(t._input,c.value),a&&((i=t._input)==null||i.focus(),N(t,!1)),(s=t._input)==null||s.dispatchEvent(new Event("input",{bubbles:!0,composed:!0})),(r=t._input)==null||r.dispatchEvent(new Event("change",{bubbles:!0}))}},Qo=(t,e)=>{var n,o;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;e.key!=="Escape"&&N(t,!0);const{key:i}=e,s=(n=t._root)==null?void 0:n.activeElement,r=hn(t),a=r.indexOf(s);let c=-1;if(i==="ArrowDown"&&(c=(a+1)%r.length),i==="ArrowUp"&&(c=(~a?a:r.length)-1),~a&&((i==="Home"||i==="PageUp")&&(c=0),(i==="End"||i==="PageDown")&&(c=r.length-1),i==="Enter"))return r[a].click(),e.preventDefault();if(r[c])for(const l of r)l.tabIndex=-1;r[c]&&e.preventDefault(),(o=r[c]||t._input)==null||o.focus(),i==="Escape"&&N(t,!1)},N=(t,e)=>{t.hidden=!e,t.popover&&t.togglePopover(e),t._input&&mn(t,t._input,e),e&&_n(t)},Rt=t=>{Mt(t._root||t,un,t),rn(t,!1),N(t,!1),t._input=null},hn=t=>[...t.options].filter(e=>!e.disabled&&e.offsetWidth&&e.offsetHeight),ot=t=>t instanceof HTMLOptionElement||t.getAttribute("role")==="option",mn=(t,e,n=!1)=>{p(e,"popovertarget",Ot(t)),p(e,"aria-autocomplete","list"),p(e,"aria-controls",Ot(t)),p(e,"aria-expanded",`${jo||n}`),p(e,"autocomplete","off"),p(e,"role","combobox")},vn=t=>(t==null?void 0:t.toLowerCase().trim())||"",_n=(t,e)=>{var n;const o=vn((n=t._input)==null?void 0:n.value);if(!((e==null?void 0:e.type)==="mutation"||t._value!==o))return;const s=t.hidden,r=p(t,tn)!=="true",a=e instanceof InputEvent&&!ti(e);t.hidden=!0,t._value=o;for(const l of t.options){const f=[l.value,l.label,l.text].map(vn);l.hidden=!f.some(m=>m.includes(o)),r&&a&&ot(l)&&(l.selected=f.includes(o))}t.hidden=s;const c=hn(t);clearTimeout(dn),dn=setTimeout(()=>{const{length:l}=c.filter(ot),f=++qo%2?" ":"",m=`${`${t._texts[l===1?"singular":"plural"]}`.replace("%d",`${l}`)}`;D&&(D.textContent=`${!l&&t.innerText.trim()||m}${f}`)},1e3),At&&c.map((l,f,m)=>{l.title=`${f+1}/${m}`})};P&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return an(this).getElementById(p(this,"list")||"")}}),ln.define("u-datalist",pn);var Jo=" ".repeat(100),Zo="insertReplacementText";function ti(t){var e;const n=t instanceof Event&&t.type==="input"&&t.target instanceof HTMLInputElement&&(!t.inputType||t.inputType===Zo);if(n){const o=t.target.value,i=Array.from(((e=t.target.list)==null?void 0:e.options)||[]).some(s=>s.value===o&&!ot(s));t.target.value=o.split(Jo)[i?1:0]}return n}const bn=g.field.split(" ")[0],ei="--mtds-text-count-over",ni="--mtds-text-count-under",gn=g.validation.split(" "),oi=gn[0];function ii(t){for(const e of t)if(e.isConnected){const n=[],o=[];let i=null,s=null,r=!0;for(const a of e.getElementsByTagName("*"))a instanceof HTMLLabelElement?n.push(a):a instanceof pn?s=a:Ct(a)?i=a:a.classList.contains(oi)?(r=d(a,"data-color")==="success"||!a.clientWidth||!a.clientHeight,o.unshift(W(a))):a instanceof HTMLParagraphElement&&o.push(W(a));if(i){for(const a of n)a.htmlFor=W(i);si(i,s),En(i),yn(i),d(i,"aria-describedby",o.join(" ")||null),d(i,"aria-invalid",`${!r}`)}}}function yn(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function si(t,e){if(d(t,"list",e?W(e):null),!e)return;t.hasAttribute("placeholder")||d(t,"placeholder","");const n=window.getComputedStyle(e),o=t.closest("u-tags"),i=s=>n.getPropertyValue(`--mtds-text-${s}`);d(e,"data-sr-plural",i("datalist-plural")),d(e,"data-sr-singular",i("datalist-singular")),o&&(d(o,"data-sr-added",i("tags-added")),d(o,"data-sr-empty",i("tags-empty")),d(o,"data-sr-found",i("tags-found")),d(o,"data-sr-of",i("tags-of")),d(o,"data-sr-remove",i("tags-remove")),d(o,"data-sr-removed",i("tags-removed")))}function En(t){var o,i;const e=t==null?void 0:t.nextElementSibling,n=e&&d(e,"data-count");if(e&&n){const s=Number(n)-t.value.length,r=s<0,a=d(e,"aria-live")==="polite",c=window.getComputedStyle(e||t),l=((o=c.getPropertyValue(ei))==null?void 0:o.slice(1,-1))||"",f=((i=c.getPropertyValue(ni))==null?void 0:i.slice(1,-1))||"";if(a!==r){d(e,"aria-live",r?"polite":"off");for(const m of gn)e.classList.toggle(m,r)}e.textContent=(r?l:f).replace("%d",`${Math.abs(s)}`)}}function ri({target:t}){Ct(t)&&(En(t),yn(t))}function ai(t){var e,n;(n=(e=t.target)==null?void 0:e.closest)!=null&&n.call(e,`.${bn}`)&&t.preventDefault()}S(()=>{O(document.documentElement,bn,ii),y(document,"input",ri,T),y(document,"invalid",ai,!0)});const li=g.fieldset.split(" ")[0],ci=g.validation.split(" ")[0];function di(t){for(const e of t)if(e.isConnected){const n=[];let o=null;for(const i of e.getElementsByTagName("*"))i.classList.contains(ci)?o=W(i):Ct(i)&&n.push(i);for(const i of n)d(i,"aria-describedby",o),d(i,"aria-invalid",`${!!o}`)}}S(()=>O(document.documentElement,li,di));const X=L?new CSSStyleSheet:null,Ht=g.app.split(" ")[0],$n=`.${Ht} > nav, .${Ht} nav:has(+ main)`,ui='[data-command="toggle-app-expanded"]',it="--mtdsc-app-expanded",fi=960;function pi(t){t.target instanceof Element&&(t.target.closest(ui)&&(t.preventDefault(),document.startViewTransition?document.startViewTransition(Bt):Bt()),window.innerWidth<=fi&&t.target.matches($n)&&console.log(t.target))}let h,wn;function hi(t){for(const e of t)e.isConnected&&(h=e.querySelector($n),wn=e.querySelector("main"))}function Bt(t=!0){const e=window.localStorage.getItem(it)!=="false",n=t?!e:e;X==null||X.replaceSync(`:root { ${it}: var(${it}--${n}) }`),window.localStorage.setItem(it,`${n}`)}X&&((go=document.adoptedStyleSheets)==null||go.push(X)),L&&Bt(!1);let Ft=0,st=0,rt=0,R,x=0,Ut=0,H=0,Vt=!1;const at="--mtdsc-app-nav-align",lt="--mtdsc-app-nav-bottom",ct="--mtdsc-app-nav-position",dt="--mtdsc-app-nav-top";function mi(){if(!(h!=null&&h.isConnected))return;const t=window.scrollY,e=t<H;H=t,e!==R&&(Ft=h.offsetHeight,Vt=h.offsetHeight<=window.innerHeight,st=h.offsetTop,rt=wn.offsetTop,R=e,Ut=window.innerHeight),!(x===-1&&Vt)&&(x!==-1&&(Vt||R&&H<=st)?(h.style.setProperty(ct,"sticky"),h.style.setProperty(dt,"0px"),h.style.removeProperty(lt),h.style.setProperty(at,"start"),x=-1):x===-1&&!R?(h.style.setProperty(ct,"relative"),h.style.setProperty(dt,`${Math.max(0,H-rt)}px`),h.style.removeProperty(lt),h.style.setProperty(at,"start"),x=0):x!==1&&!R&&H+Ut>=st+Ft?(h.style.setProperty(ct,"sticky"),h.style.removeProperty(dt),h.style.setProperty(lt,"0px"),h.style.setProperty(at,"end"),x=1):x===1&&R&&(h.style.setProperty(ct,"relative"),h.style.setProperty(dt,`${Math.min(st-rt,H+Ut-Ft-rt)}px`),h.style.removeProperty(lt),h.style.setProperty(at,"start"),x=0))}S(()=>{O(document.documentElement,Ht,hi),y(window,"scroll",mi,T),y(document,"click",pi)});const vi=g.logo.split(" ")[0];function _i([t]){if(t!=null&&t.isConnected&&(t==null?void 0:t.firstElementChild)instanceof SVGSVGElement){for(const r of document.head.querySelectorAll("link[rel~='icon']"))r.remove();const e=t.firstElementChild,n=t==null?void 0:t.hasAttribute("data-env"),o=window.getComputedStyle(e),i=o.getPropertyValue("color"),s=o.getPropertyValue("--mtds-logo-color");document.head.appendChild(Object.assign(document.createElement("link"),{href:`data:image/svg+xml,${encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 55 55'><rect fill='${n?"none":s}' width='51' height='51' x='2' y='2' stroke='${i}' stroke-dasharray='0.09 6.38' stroke-linecap='round' stroke-opacity='${n?.6:0}' stroke-width='2.3' rx='25.5'/><g transform="translate(7.5 7.5)">${e.outerHTML.replace(/(fill|width|height|xmlns)=\S+/gi,"").replace("<svg",`<svg width="40" height="40" fill="${i}"`)}</g></svg>`)}`,rel:"icon"}))}}S(()=>O(document.documentElement,vi,_i));const Sn=g.popover.split(" ")[0];let Yt=0;function bi({target:t,newState:e}){var n;if(t instanceof HTMLElement&&t.classList.contains(Sn)){const o=(n=t.getRootNode())==null?void 0:n.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?(Yt-=1,q(t,!1)):o&&(Yt+=1,q(t,o,d(t,"data-position")||"bottom"))}}function gi({target:t}){var n;const e=Yt&&((n=t==null?void 0:t.closest)==null?void 0:n.call(t,"a,[popovertargetaction]"));if(e){const o=d(e,"popovertargetaction")||"toggle",i=o==="show"||(o==="hide"?!1:void 0),r=(document.getElementById(d(e,"popovertarget")||"")||e).closest(`.${Sn}`);r!=null&&r.togglePopover&&r.togglePopover(i)}}S(()=>{y(document,"beforetoggle",bi,T),y(document,"click",gi)});const yi=g.table.split(" ")[0];function Ei(t){for(const e of t){const n=[];d(e,"role","table"),e.caption&&d(e.caption,"role","caption");for(const o of[e.tHead,e.tFoot,...e.tBodies])if(o){d(o,"role","rowgroup");const i=o.nodeName==="TBODY";for(const s of o.rows){d(s,"role","row");for(const r of s.cells)i?d(r,"data-th",n[r.cellIndex]||":empty"):n.push(r.innerText.trim()),r.nodeName==="TD"?d(r,"role","cell"):(d(r,"role",i?"rowheader":"columnheader"),d(r,"scope",i?"row":"col"))}}}}S(()=>O(document.documentElement,yi,Ei));const Tn="aria-describedby",kn="Escape",ut="aria-labelledby",$i="--mtds-tooltip-position",wi=300,_=L?Object.assign(document.createElement("div"),{className:g._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let I=null,xn=Number.NEGATIVE_INFINITY,In=0;function Kt({target:t,type:e,key:n}){if(e==="keydown"&&n!==kn)return;const o=xn+wi-Date.now();clearTimeout(In),In=setTimeout(Si,Math.max(o,0),n===kn?null:t)}function Si(t){var a,c,l;if(xn=Date.now(),!_||t===_)return;_!=null&&_.isConnected||document.body.append(_);let e=((a=t==null?void 0:t.closest)==null?void 0:a.call(t,"[data-tooltip]"))||null;if(e===I)return;const n=e&&d(e,"data-tooltip")||"",o=e&&d(e,"data-tooltip-position")||((c=window.getComputedStyle(e||document.body).getPropertyValue($i))==null?void 0:c.trim())||"top";(!n||n==="false"||n==="true"||o==="none")&&(e=null),e&&(_.textContent=n);const s=I&&d(I,ut)===(_==null?void 0:_.id),r=((l=e instanceof HTMLElement?e.innerText:e==null?void 0:e.textContent)==null?void 0:l.trim())||(e==null?void 0:e.hasAttribute(ut))||(e==null?void 0:e.hasAttribute("aria-label"));I==null||I.removeAttribute(s?ut:Tn),q(_,!1),I=e,I&&d(I,r?Tn:ut,_==null?void 0:_.id),_.togglePopover(!!e),q(_,e||!1,o)}S(()=>{y(document,"blur,focus,mouseout,mouseover",Kt,T),y(window,"keydown",Kt,T),y(window,"blur",Kt,T)});var Cn=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",An;Cn&&/^Mac/i.test(((An=navigator.userAgentData)==null?void 0:An.platform)||navigator.platform);var Ti=":host(:not([hidden])) { display: block }",Ln=typeof HTMLElement>"u"?class{}:HTMLElement;function C(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 Mn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},On=(t,...e)=>Mn("add",t,e),Pn=(t,...e)=>Mn("remove",t,e),ki=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},xi=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},Wt=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))C(o,i,s);return o},Dn={define:(t,e)=>!Cn||window.customElements.get(t)||window.customElements.define(t,e)},Ii=class extends Ln{constructor(){super(),this._content=null,this.attachShadow({mode:"open"}).append(Wt("slot",null,{name:"summary"}),Wt("slot",null,{part:"details-content"}),Wt("style",`${Ti}
|
|
1
|
+
var mtds=function(W){"use strict";const mo="1.1.3",_o=(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,d)=>d+i);return n>4&&i>1&&r.splice(0,2,1,0),n>3&&s<e&&r.splice(-2,2,0,e),r},vo=({current:t=1,total:e=10,show:n=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:_o(t,e,n).map((o,i)=>({current:o===t&&"page",key:`key-${o}-${i}`,page:o}))}),ee="_alert_1knko_1 _ds-alert_oaddr_1",ne="_app_1knko_1",oe="_sticky_1knko_1",ie="_avatar_1knko_1 _ds-avatar_oaddr_1",se="_badge_1knko_1",re="_breadcrumbs_1knko_1 _ds-breadcrumbs_oaddr_1",ae="_button_1knko_1 _ds-button_oaddr_1",le="_card_1knko_1",de="_info_1knko_1",ce="_group_1knko_1",ue="_chip_1knko_1 _ds-chip_oaddr_1",fe="_details_1knko_1 _ds-details_oaddr_1",pe="_dialog_1knko_1 _ds-dialog_oaddr_1",he="_divider_1knko_1",me="_errorsummary_1knko_1 _ds-error-summary_oaddr_1",_e="__errorsummary_1knko_1",ve="_field_1knko_1 _ds-field_oaddr_1",be="_affixes_1knko_1 _ds-field-affixes_oaddr_1",ge="_fieldset_1knko_1 _ds-fieldset_oaddr_1",ye="_heading_1knko_1 _ds-heading_oaddr_1",Ee="_helptext_1knko_1 _ds-focus_oaddr_1",ke="_input_1knko_1 _ds-input_oaddr_1",we="_grid_1knko_1",$e="_flex_1knko_1",Se="_prose_1knko_1",Te="_link_1knko_1",Ce="_logo_1knko_1",xe="_pagination_1knko_1 _ds-pagination_oaddr_1",Ie="_popover_1knko_1",Ae="_progress_1knko_1",Le="__indeterminate_1knko_1",Me="_skeleton_1knko_1 _ds-skeleton_oaddr_1",Oe="__skeleton_1knko_1",Pe="_spinner_1knko_1",De="_table_1knko_1 _ds-table_oaddr_1",Re="__scrollShadow_1knko_1",He="_tabs_1knko_1 _ds-tabs_oaddr_1",Ne="_tag_1knko_1 _ds-tag_oaddr_1",Be="__tooltip_1knko_1",Fe="_validation_1knko_1 _ds-validation-message_oaddr_1",Ue="_body_1knko_142",b={alert:ee,app:ne,sticky:oe,avatar:ie,badge:se,breadcrumbs:re,button:ae,card:le,info:de,group:ce,chip:ue,details:fe,dialog:pe,divider:he,errorsummary:me,_errorsummary:_e,field:ve,affixes:be,fieldset:ge,heading:ye,helptext:Ee,input:ke,grid:we,flex:$e,prose:Se,link:Te,logo:Ce,pagination:xe,popover:Ie,progress:Ae,_indeterminate:Le,skeleton:Me,_skeleton:Oe,spinner:Pe,table:De,_scrollShadow:Re,tabs:He,tag:Ne,_tooltip:Be,validation:Fe,body:Ue},bo=Object.freeze(Object.defineProperty({__proto__:null,_errorsummary:_e,_indeterminate:Le,_scrollShadow:Re,_skeleton:Oe,_tooltip:Be,affixes:be,alert:ee,app:ne,avatar:ie,badge:se,body:Ue,breadcrumbs:re,button:ae,card:le,chip:ue,default:b,details:fe,dialog:pe,divider:he,errorsummary:me,field:ve,fieldset:ge,flex:$e,grid:we,group:ce,heading:ye,helptext:Ee,info:de,input:ke,link:Te,logo:Ce,pagination:xe,popover:Ie,progress:Ae,prose:Se,skeleton:Me,spinner:Pe,sticky:oe,table:De,tabs:He,tag:Ne,validation:Fe},Symbol.toStringTag,{value:"Module"})),$={capture:!0,passive:!0},Z=typeof window<"u"&&typeof document<"u";function go(t,e){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>t(...o),e)}}function c(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 yo=0;const Eo=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function K(t){return t.id||(t.id=`${Eo}${++yo}`),t.id}const ko=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},g=(t,...e)=>ko("add",t,e),T=Z?document.createElement("div"):null,tt=new Map,wo=()=>{for(const[t,e]of tt)e()};T&&(T.style.cssText="position:absolute;padding:1px;top:0;left:0px",g(window,"load,resize,scroll",wo,$));const M={top:0,right:1,bottom:2,left:3};function q(t,e,n){var ho;if(e===!1||!e.isConnected||!t.isConnected)return tt.delete(t);if(T!=null&&T.isConnected||document.body.append(T||""),!tt.has(t)){const ms=M[n]??M.bottom;return(ho=tt.set(t,()=>q(t,e,ms)).get(t))==null?void 0:ho()}const o=e instanceof HTMLElement,{offsetWidth:i,offsetHeight:s}=t,r=o?e.offsetWidth:e.clientWidth,a=o?e.offsetHeight:e.clientHeight,{width:d,height:l,left:f,top:h}=e.getBoundingClientRect(),w=Math.round(f-(r-d)/2),E=Math.round(h-(a-l)/2),Zt=w-i>0,Y=r+r+i<window.innerWidth,yt=E-s>0,m=E+a+s<window.innerHeight,Q=n===M.right&&Y||!Zt,J=n===M.bottom&&m||!yt,te=Math.min(Math.max(10,w-(i-r)/2),window.innerWidth-i-10),hs=Math.min(Math.max(10,E-(s-a)/2),window.innerHeight-s-10),po=n===M.top||n===M.bottom;t.style.left=`${Math.round(po?te:Q?w+r:w-i)}px`,t.style.top=`${Math.round(po?J?E+a:E-s:hs)}px`,T==null||T.style.setProperty("translate",`${Math.round(window.scrollX+w+r+i+30)}px ${Math.round(window.scrollY+E+a+s+30)}px`)}function Ve(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 Et=new WeakMap,O=(t,e,n)=>{const o=t.getElementsByClassName(e),i=Et.get(t)||[];i.length||(Et.set(t,i),Ve((s,r)=>{if(t.isConnected&&(i!=null&&i.length))for(const a of i)a();else r==null||r.disconnect(),Et.delete(t)}).observe(t,{attributeFilter:["class"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>n(o))},S=t=>{if(!Z)return;const e=()=>requestAnimationFrame(t);document.readyState==="complete"?e():g(window,"load",e)},kt=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement);typeof window<"u"&&window.CSSStyleSheet&&document.adoptedStyleSheets&&(()=>{const t="--mtds-app-expanded",e=new CSSStyleSheet;document.adoptedStyleSheets.push(e),window.mtdsAppToggle=(n=!0)=>{var s;const o=!((s=window.localStorage.getItem(t))!=null&&s.includes("false")),i=n?!o:o;e.replaceSync(`:root { ${t}: var(${t}--${i})}`),window.localStorage.setItem(t,i)},window.mtdsAppToggle(!1)})();const Ye=b.app.split(" ")[0],$o=b.sticky.split(" ")[0],So='[data-command="toggle-app-expanded"]',We=`.${Ye} > dialog,.${Ye} dialog ~ main`,To=t=>{document.startViewTransition?document.startViewTransition(t):t()};function Co({target:t}){t instanceof HTMLButtonElement&&t.matches(So)&&To(()=>{var e;if(getComputedStyle(t).position==="sticky")(e=window.mtdsAppToggle)==null||e.call(window);else{const n=document.querySelector(We);n==null||n.setAttribute("data-closedby","any"),n==null||n.showModal()}})}function xo(){var t;(t=document.querySelector(We))==null||t.close()}let wt=0,P,C=0,_,$t=0,et=0,St=!1,Tt=0,I=0;function Io([t]){_=t,Ke()}function Ke(){var n;if(!(_!=null&&_.isConnected))return;const t=window.scrollY,e=t<I;I=t,e!==P&&(wt=(((n=_.parentElement)==null?void 0:n.getBoundingClientRect().top)||0)+I,P=e,$t=_.offsetHeight,et=_.getBoundingClientRect().top+I,St=_.offsetHeight<=window.innerHeight,Tt=window.innerHeight),!(C===-1&&St)&&(C!==-1&&(St||P&&I<=et)?(_.style.setProperty("--pos","sticky"),_.style.setProperty("--top","0px"),C=-1):C===-1&&!P?(_.style.setProperty("--pos","relative"),_.style.setProperty("--top",`${Math.max(0,I-wt)}px`),C=0):C!==1&&!P&&I+Tt>=et+$t?(_.style.setProperty("--pos","sticky"),_.style.setProperty("--top",`${Tt-$t}px`),C=1):C===1&&P&&(_.style.setProperty("--pos","relative"),_.style.setProperty("--top",`${et-wt}px`),C=0))}S(()=>{O(document.documentElement,$o,Io),g(document,"click",Co,$),g(window,"resize",go(xo,100),$),g(window,"scroll",Ke,$)});const Ao=b.breadcrumbs.split(" ")[0];function Lo(t){for(const e of t)e.querySelectorAll("li a").forEach((n,o,{length:i})=>{c(n,"aria-current",o===i-1?"page":null)})}S(()=>O(document.documentElement,Ao,Lo));const Mo=b.dialog.split(" ")[0],Oo=Z?document.getElementsByClassName(Mo):[],Po=()=>{for(const t of Oo)t.isConnected&&t.showModal&&t.close&&(t.matches('[open]:not([data-modal="false"]):not(:modal)')?(c(t,"open",null),t.showModal()):t.matches(":modal:not([open])")&&(c(t,"open",""),t.close()))},Do=({clientX:t,clientY:e,target:n})=>{var o;if(n instanceof HTMLDialogElement&&c(n,"data-closedby")==="any"){const{top:i,right:s,bottom:r,left:a}=n.getBoundingClientRect();i<=e&&e<=r&&a<=t&&t<=s||n.close()}else n instanceof Element&&n.closest('button[data-command="close"]')&&((o=n==null?void 0:n.closest("dialog"))==null||o.close())};S(()=>{g(document,"click",Do,$),Ve(Po).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function Ro(t){var n;if(t.animationName!==b._errorsummary)return;const e=(n=t.target)==null?void 0:n.firstElementChild;e instanceof HTMLHeadingElement&&(c(e,"tabindex","-1"),e.focus())}S(()=>g(document,"animationend",Ro,$));var Ho=Object.defineProperty,qe=Object.getOwnPropertySymbols,No=Object.prototype.hasOwnProperty,Bo=Object.prototype.propertyIsEnumerable,je=(t,e,n)=>e in t?Ho(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Fo=(t,e)=>{for(var n in e||(e={}))No.call(e,n)&&je(t,n,e[n]);if(qe)for(var n of qe(e))Bo.call(e,n)&&je(t,n,e[n]);return t},D=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Uo=D&&/android/i.test(navigator.userAgent),Ct=D&&/iPad|iPhone|iPod/.test(navigator.userAgent),Xe=D&&/^((?!chrome|android).)*safari/i.test(navigator.userAgent),Ge;D&&/^Mac/i.test(((Ge=navigator.userAgentData)==null?void 0:Ge.platform)||navigator.platform);var Vo=`${Uo?"data":"aria"}-labelledby`,ze=`${Xe?"aria":"data"}-multiselectable`,Qe=":host(:not([hidden])) { display: block }",Yo="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",Je=typeof HTMLElement>"u"?class{}:HTMLElement;function p(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 Ze=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},xt=(t,...e)=>Ze("add",t,e),It=(t,...e)=>Ze("remove",t,e),tn=(t,e)=>t.attachShadow({mode:"open"}).append(Lt("slot"),Lt("style",e)),nt=new WeakMap,en=(t,e)=>{if(e===void 0)return nt.get(t);try{nt.get(t).disconnect(),nt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),nt.set(t,n)}},nn=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},Wo=0,At=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Wo).toString(32)}`),t.id):"",Lt=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},on={define:(t,e)=>!D||window.customElements.get(t)||window.customElements.define(t,e)},Ko=t=>{const e=Lt("div");return e.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",p(e,"aria-live",t),e};function sn(t,e,n){if(!e)return Object.keys(t).map(i=>`data-sr-${i}`);const o=(e==null?void 0:e.startsWith("data-sr-"))&&e.slice(8);return o&&n&&t[o]&&(t[o]=n),[]}var Mt="disabled",j="selected",qo=class extends Je{static get observedAttributes(){return[Mt,j]}constructor(){super(),tn(this,`${Qe}:host(:focus){${Yo}}:host{ cursor: pointer }`)}connectedCallback(){Ct||(this.tabIndex=-1),p(this,"role")||p(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){p(this,"aria-disabled",`${this.disabled}`),p(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[j]}set defaultSelected(e){this[j]=e}get disabled(){return p(this,Mt)!==null}set disabled(e){p(this,Mt,e?"":null)}get form(){return this.closest("form")}get index(){var e;const n=(e=this.closest("u-datalist"))==null?void 0:e.getElementsByTagName("u-option");return Array.from(n||[this]).indexOf(this)}get label(){return p(this,"label")||this.text}set label(e){p(this,"label",e)}get selected(){return p(this,j)!==null}set selected(e){p(this,j,e?"":null)}get text(){var e;return((e=this.textContent)==null?void 0:e.trim())||""}set text(e){this.textContent=e}get value(){return p(this,"value")||this.text}set value(e){p(this,"value",e)}};on.define("u-option",qo);var Ot=!1,rn,jo=0,R,Xo=Xe&&!Ct,an="click,focusout,input,keydown,mousedown,mouseup",ln={singular:"%d hit",plural:"%d hits"},dn=class extends Je{constructor(){super(),this._blurTimer=0,this._input=null,this._root=null,this._value="",this._texts=Fo({},ln),tn(this,`${Qe}::slotted(u-option[disabled]) { display: none !important }`)}static get observedAttributes(){return["id",...sn(ln)]}connectedCallback(){this.hidden=!0,this._root=nn(this),R||(R=Ko("assertive")),R.isConnected||document.body.appendChild(R),p(this,"role","listbox"),p(this,"tabindex","-1"),xt(this._root,"focusin",this),xt(this._root,"focus",this,!0),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){It(this._root||this,"focus",this,!0),It(this._root||this,"focusin",this),Pt(this),this._root=null}attributeChangedCallback(e,n,o){var i;sn(this._texts,e,o);const s=(i=this._root)==null?void 0:i.querySelectorAll(`input[list="${this.id}"]`);for(const r of s||[])un(this,r)}handleEvent(e){const{type:n}=e;e.defaultPrevented||(n==="click"&&Qo(this,e),(n==="focus"||n==="focusin")&&Go(this,e),n==="focusout"&&zo(this),n==="keydown"&&Jo(this,e),(n==="mutation"||n==="input")&&pn(this,e),n==="mouseup"&&(Ot=!1),n==="mousedown"&&(Ot=this.contains(e.target)))}get options(){return this.getElementsByTagName("u-option")}},Go=(t,{target:e})=>{var n;const o=t._input===e;if(o||t.contains(e))return clearTimeout(t._blurTimer);!o&&e instanceof HTMLInputElement&&p(e,"list")===t.id&&(t._input&&Pt(t),t._input=e,p(t,Vo,At((n=t._input.labels)==null?void 0:n[0])),xt(t._root||t,an,t),en(t,{attributeFilter:["value"],attributes:!0,childList:!0,subtree:!0}),H(t,!0))},zo=t=>{Ot||(t._blurTimer=setTimeout(()=>Pt(t)))},Qo=(t,{target:e})=>{var n,o,i,s,r;const a=p(t,ze)!=="true",d=[...t.options].find(l=>l.contains(e));if(t._input===e)H(t,!0);else if(d&&ot(d)){for(const l of t.options)l===d?l.selected=!0:a&&(l.selected=!1);(o=(n=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"value"))==null?void 0:n.set)==null||o.call(t._input,d.value),a&&((i=t._input)==null||i.focus(),H(t,!1)),(s=t._input)==null||s.dispatchEvent(new Event("input",{bubbles:!0,composed:!0})),(r=t._input)==null||r.dispatchEvent(new Event("change",{bubbles:!0}))}},Jo=(t,e)=>{var n,o;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;e.key!=="Escape"&&H(t,!0);const{key:i}=e,s=(n=t._root)==null?void 0:n.activeElement,r=cn(t),a=r.indexOf(s);let d=-1;if(i==="ArrowDown"&&(d=(a+1)%r.length),i==="ArrowUp"&&(d=(~a?a:r.length)-1),~a&&((i==="Home"||i==="PageUp")&&(d=0),(i==="End"||i==="PageDown")&&(d=r.length-1),i==="Enter"))return r[a].click(),e.preventDefault();if(r[d])for(const l of r)l.tabIndex=-1;r[d]&&e.preventDefault(),(o=r[d]||t._input)==null||o.focus(),i==="Escape"&&H(t,!1)},H=(t,e)=>{t.hidden=!e,t.popover&&t.togglePopover(e),t._input&&un(t,t._input,e),e&&pn(t)},Pt=t=>{It(t._root||t,an,t),en(t,!1),H(t,!1),t._input=null},cn=t=>[...t.options].filter(e=>!e.disabled&&e.offsetWidth&&e.offsetHeight),ot=t=>t instanceof HTMLOptionElement||t.getAttribute("role")==="option",un=(t,e,n=!1)=>{p(e,"popovertarget",At(t)),p(e,"aria-autocomplete","list"),p(e,"aria-controls",At(t)),p(e,"aria-expanded",`${Xo||n}`),p(e,"autocomplete","off"),p(e,"role","combobox")},fn=t=>(t==null?void 0:t.toLowerCase().trim())||"",pn=(t,e)=>{var n;const o=fn((n=t._input)==null?void 0:n.value);if(!((e==null?void 0:e.type)==="mutation"||t._value!==o))return;const s=t.hidden,r=p(t,ze)!=="true",a=e instanceof InputEvent&&!ei(e);t.hidden=!0,t._value=o;for(const l of t.options){const f=[l.value,l.label,l.text].map(fn);l.hidden=!f.some(h=>h.includes(o)),r&&a&&ot(l)&&(l.selected=f.includes(o))}t.hidden=s;const d=cn(t);clearTimeout(rn),rn=setTimeout(()=>{const{length:l}=d.filter(ot),f=++jo%2?" ":"",h=`${`${t._texts[l===1?"singular":"plural"]}`.replace("%d",`${l}`)}`;R&&(R.textContent=`${!l&&t.innerText.trim()||h}${f}`)},1e3),Ct&&d.map((l,f,h)=>{l.title=`${f+1}/${h}`})};D&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return nn(this).getElementById(p(this,"list")||"")}}),on.define("u-datalist",dn);var Zo=" ".repeat(100),ti="insertReplacementText";function ei(t){var e;const n=t instanceof Event&&t.type==="input"&&t.target instanceof HTMLInputElement&&(!t.inputType||t.inputType===ti);if(n){const o=t.target.value,i=Array.from(((e=t.target.list)==null?void 0:e.options)||[]).some(s=>s.value===o&&!ot(s));t.target.value=o.split(Zo)[i?1:0]}return n}const hn=b.field.split(" ")[0],ni="--mtds-text-count-over",oi="--mtds-text-count-under",mn=b.validation.split(" "),ii=mn[0];function si(t){for(const e of t)if(e.isConnected){const n=[],o=[];let i=null,s=null,r=!0;for(const a of e.getElementsByTagName("*"))a instanceof HTMLLabelElement?n.push(a):a instanceof dn?s=a:kt(a)?i=a:a.classList.contains(ii)?(r=c(a,"data-color")==="success"||!a.clientWidth||!a.clientHeight,o.unshift(K(a))):a instanceof HTMLParagraphElement&&o.push(K(a));if(i){for(const a of n)a.htmlFor=K(i);ri(i,s),vn(i),_n(i),c(i,"aria-describedby",o.join(" ")||null),c(i,"aria-invalid",`${!r}`)}}}function _n(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function ri(t,e){if(c(t,"list",e?K(e):null),!e)return;t.hasAttribute("placeholder")||c(t,"placeholder","");const n=window.getComputedStyle(e),o=t.closest("u-tags"),i=s=>n.getPropertyValue(`--mtds-text-${s}`);c(e,"data-sr-plural",i("datalist-plural")),c(e,"data-sr-singular",i("datalist-singular")),o&&(c(o,"data-sr-added",i("tags-added")),c(o,"data-sr-empty",i("tags-empty")),c(o,"data-sr-found",i("tags-found")),c(o,"data-sr-of",i("tags-of")),c(o,"data-sr-remove",i("tags-remove")),c(o,"data-sr-removed",i("tags-removed")))}function vn(t){var o,i;const e=t==null?void 0:t.nextElementSibling,n=e&&c(e,"data-count");if(e&&n){const s=Number(n)-t.value.length,r=s<0,a=c(e,"aria-live")==="polite",d=window.getComputedStyle(e||t),l=((o=d.getPropertyValue(ni))==null?void 0:o.slice(1,-1))||"",f=((i=d.getPropertyValue(oi))==null?void 0:i.slice(1,-1))||"";if(a!==r){c(e,"aria-live",r?"polite":"off");for(const h of mn)e.classList.toggle(h,r)}e.textContent=(r?l:f).replace("%d",`${Math.abs(s)}`)}}function ai({target:t}){kt(t)&&(vn(t),_n(t))}function li(t){var e,n;(n=(e=t.target)==null?void 0:e.closest)!=null&&n.call(e,`.${hn}`)&&t.preventDefault()}S(()=>{O(document.documentElement,hn,si),g(document,"input",ai,$),g(document,"invalid",li,!0)});const di=b.fieldset.split(" ")[0],ci=b.validation.split(" ")[0];function ui(t){for(const e of t)if(e.isConnected){const n=[];let o=null;for(const i of e.getElementsByTagName("*"))i.classList.contains(ci)?o=K(i):kt(i)&&n.push(i);for(const i of n)c(i,"aria-describedby",o),c(i,"aria-invalid",`${!!o}`)}}S(()=>O(document.documentElement,di,ui));const fi=b.logo.split(" ")[0];function pi([t]){if(t!=null&&t.isConnected&&(t==null?void 0:t.firstElementChild)instanceof SVGSVGElement){for(const a of document.head.querySelectorAll("link[rel~='icon']"))a.setAttribute("rel","disabled");const e=t.firstElementChild,n=t==null?void 0:t.hasAttribute("data-env"),o=window.getComputedStyle(e),i=o.getPropertyValue("color"),s=o.getPropertyValue("--mtds-logo-color"),r=e.outerHTML.replace(/\n+/g," ").replace(/(fill|width|height|xmlns)=\S+/gi,"").replace("<svg",`<svg width="40" height="40" fill="${i}"`);document.head.appendChild(Object.assign(document.createElement("link"),{href:`data:image/svg+xml,${encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 55 55'><rect fill='${n?"none":s}' width='51' height='51' x='2' y='2' stroke='${i}' stroke-dasharray='0.09 6.38' stroke-linecap='round' stroke-opacity='${n?.6:0}' stroke-width='2.3' rx='25.5'/><g transform="translate(7.5 7.5)">${r}</g></svg>`)}`,rel:"icon"}))}}S(()=>O(document.documentElement,fi,pi));const bn=b.popover.split(" ")[0];let Dt=0;function hi({target:t,newState:e}){var n;if(t instanceof HTMLElement&&t.classList.contains(bn)){const o=(n=t.getRootNode())==null?void 0:n.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?(Dt-=1,q(t,!1)):o&&(Dt+=1,q(t,o,c(t,"data-position")||"bottom"))}}function mi({target:t}){var n;const e=Dt&&((n=t==null?void 0:t.closest)==null?void 0:n.call(t,"a,[popovertargetaction]"));if(e){const o=c(e,"popovertargetaction")||"toggle",i=o==="show"||(o==="hide"?!1:void 0),r=(document.getElementById(c(e,"popovertarget")||"")||e).closest(`.${bn}`);r!=null&&r.isConnected&&(r!=null&&r.togglePopover)&&r.togglePopover(i)}}S(()=>{g(document,"toggle",hi,$),g(document,"click",mi)});const _i=b.table.split(" ")[0];function vi(t){for(const e of t){const n=[];c(e,"role","table"),e.caption&&c(e.caption,"role","caption");for(const o of[e.tHead,e.tFoot,...e.tBodies])if(o){c(o,"role","rowgroup");const i=o.nodeName==="TBODY";for(const s of o.rows){c(s,"role","row");for(const r of s.cells)i?c(r,"data-th",n[r.cellIndex]||":empty"):n.push(r.innerText.trim()),r.nodeName==="TD"?c(r,"role","cell"):(c(r,"role",i?"rowheader":"columnheader"),c(r,"scope",i?"row":"col"))}}}}S(()=>O(document.documentElement,_i,vi));const gn="aria-describedby",yn="Escape",it="aria-labelledby",bi="--mtds-tooltip-position",gi=300,v=Z?Object.assign(document.createElement("div"),{className:b._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let x=null,En=Number.NEGATIVE_INFINITY,kn=0;function Rt({target:t,type:e,key:n}){if(e==="keydown"&&n!==yn)return;const o=En+gi-Date.now();clearTimeout(kn),kn=setTimeout(yi,Math.max(o,0),n===yn?null:t)}function yi(t){var a,d,l;if(En=Date.now(),!v||t===v)return;v!=null&&v.isConnected||document.body.append(v);let e=((a=t==null?void 0:t.closest)==null?void 0:a.call(t,"[data-tooltip]"))||null;if(e===x)return;const n=e&&c(e,"data-tooltip")||"",o=e&&c(e,"data-tooltip-position")||((d=window.getComputedStyle(e||document.body).getPropertyValue(bi))==null?void 0:d.trim())||"top";(!n||n==="false"||n==="true"||o==="none")&&(e=null),e&&(v.textContent=n);const s=x&&c(x,it)===(v==null?void 0:v.id),r=((l=e instanceof HTMLElement?e.innerText:e==null?void 0:e.textContent)==null?void 0:l.trim())||(e==null?void 0:e.hasAttribute(it))||(e==null?void 0:e.hasAttribute("aria-label"));x==null||x.removeAttribute(s?it:gn),q(v,!1),x=e,x&&c(x,r?gn:it,v==null?void 0:v.id),v.togglePopover(!!e),q(v,e||!1,o)}S(()=>{g(document,"blur,focus,mouseout,mouseover",Rt,$),g(window,"keydown",Rt,$),g(window,"blur",Rt,$)});var wn=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",$n;wn&&/^Mac/i.test((($n=navigator.userAgentData)==null?void 0:$n.platform)||navigator.platform);var Ei=":host(:not([hidden])) { display: block }",Sn=typeof HTMLElement>"u"?class{}:HTMLElement;function A(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 Tn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Cn=(t,...e)=>Tn("add",t,e),xn=(t,...e)=>Tn("remove",t,e),ki=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},wi=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},Ht=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))A(o,i,s);return o},In={define:(t,e)=>!wn||window.customElements.get(t)||window.customElements.define(t,e)},$i=class extends Sn{constructor(){super(),this._content=null,this.attachShadow({mode:"open"}).append(Ht("slot",null,{name:"summary"}),Ht("slot",null,{part:"details-content"}),Ht("style",`${Ei}
|
|
2
2
|
::slotted(u-summary) { cursor: pointer; display: block }
|
|
3
3
|
::slotted(u-summary)::before { content: ''; display: inline-block; vertical-align: middle; margin-inline: .05em .3125em; border-block: .3125em solid transparent; border-inline-start: .5em solid }
|
|
4
4
|
::slotted(u-summary[aria-expanded="true"])::before { rotate: 90deg }
|
|
5
|
-
:host > [part="details-content"]:not([hidden=""]) { display: block }`))}static get observedAttributes(){return["open"]}connectedCallback(){var t;this._content=(t=this.shadowRoot)==null?void 0:t.children[1],
|
|
5
|
+
:host > [part="details-content"]:not([hidden=""]) { display: block }`))}static get observedAttributes(){return["open"]}connectedCallback(){var t;this._content=(t=this.shadowRoot)==null?void 0:t.children[1],Cn(this._content,"beforematch",this),Cn(this,"click,keydown",this),this.attributeChangedCallback()}disconnectedCallback(){this._content&&xn(this._content,"beforematch",this),xn(this,"click,keydown",this),this._content=null}attributeChangedCallback(t,e,n){const o="onbeforematch"in this?"until-found":!0,i=this.open;for(const s of this.children)s.nodeName==="U-SUMMARY"&&A(s,"aria-expanded",`${i}`);if(this._content&&(A(this._content,"aria-hidden",`${!i}`),this._content.hidden=i?!1:o),i&&this.name){const s=wi(this).querySelectorAll(`${this.nodeName}[name="${this.name}"]`);for(const r of s)r!==this&&(r.open=!1)}t==="open"&&e===null!=(n===null)&&this.dispatchEvent(new Event("toggle"))}handleEvent(t){const e=this.querySelector(":scope > u-summary"),n=e==null?void 0:e.contains(t.target);t.defaultPrevented||(t.type==="beforematch"&&(this.open=!0),n&&t.type==="keydown"&&ki(t),n&&t.type==="click"&&(this.open=!this.open))}get open(){return this.hasAttribute("open")}set open(t){A(this,"open",t?"":null)}get name(){return A(this,"name")||""}set name(t){A(this,"name",t)}},Si=class extends Sn{connectedCallback(){A(this,"role","button"),this.slot="summary",this.tabIndex=0}};In.define("u-details",$i),In.define("u-summary",Si);var st=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",An=st&&/firefox/i.test(navigator.userAgent),Ti=st&&/iPad|iPhone|iPod/.test(navigator.userAgent),Ln;st&&/^Mac/i.test(((Ln=navigator.userAgentData)==null?void 0:Ln.platform)||navigator.platform);var Ci=typeof HTMLElement>"u"?class{}:HTMLElement;function y(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 Mn=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},xi=0,Ii=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++xi).toString(32)}`),t.id):"",On=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))y(o,i,s);return o},Ai={define:(t,e)=>!st||window.customElements.get(t)||window.customElements.define(t,e)},Li=t=>{var e;const n=Mn(t),o=y(t,"aria-label")||"";return[...(((e=y(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(s=>n==null?void 0:n.querySelector(`[id="${s}"]`)),...Array.from(t.labels||[])].reduce((s,r)=>{var a;return s||((a=r==null?void 0:r.innerText)==null?void 0:a.trim())||""},o)},Nt=!1,Pn=class extends Ci{static get observedAttributes(){return["aria-label","aria-labelledby","value","max"]}constructor(){super(),this.attachShadow({mode:"open"}).append(On("slot",null,{hidden:""}),On("style",`:host(:not([hidden])) { box-sizing: border-box; border: 1px solid; display: inline-block; height: .5em; width: 10em; overflow: hidden }
|
|
6
6
|
:host::before { content: ''; display: block; height: 100%; background: currentColor; width: var(--percentage, 0%); transition: width .2s }
|
|
7
7
|
:host(:not([value])) { background: linear-gradient(90deg,currentColor 25%, transparent 50%, currentColor 75%) 50%/400% }
|
|
8
8
|
@media (prefers-reduced-motion: no-preference) { :host { animation: indeterminate 2s linear infinite } }
|
|
9
|
-
@keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(qt)return;qt=!0;const t=Ai||Nn,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let n=Di(this);if(t&&(n=`${n.replace(/\d+%$/,"")} ${e}%`),Nn)for(const o of this.labels)b(o,"aria-label",n);b(this,"aria-busy",`${this.position===-1}`),b(this,"aria-label",n.trim()),b(this,"aria-labelledby",null),b(this,"aria-valuemax","100"),b(this,"aria-valuemin","0"),b(this,"aria-valuenow",`${e}`),b(this,"role",t?"img":"progressbar"),qt=!1}get labels(){const t=this.closest("label:not([for])"),e=Oi(this);return t&&(t.htmlFor=e),Hn(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return Vn(this,"value")}set value(t){Yn(this,"value",t)}get max(){return Vn(this,"max")||1}set max(t){Yn(this,"max",t)}};Fn.formAssociated=!0;var Un=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),Vn=(t,e)=>{const n=b(t,e);return Un(n)?Math.max(0,Number.parseFloat(n)):null},Yn=(t,e,n)=>{if(n===null||Un(n))b(t,e,`${n}`);else throw new Error(`Failed to set non-numeric '${b}': '${n}'`)};Pi.define("u-progress",Fn);var jt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Ni=jt&&/android/i.test(navigator.userAgent),Kn;jt&&/^Mac/i.test(((Kn=navigator.userAgentData)==null?void 0:Kn.platform)||navigator.platform);var Ri=`${Ni?"data":"aria"}-labelledby`,Xt=":host(:not([hidden])) { display: block }",pt=typeof HTMLElement>"u"?class{}:HTMLElement;function $(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 Wn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Hi=(t,...e)=>Wn("add",t,e),Bi=(t,...e)=>Wn("remove",t,e),ht=(t,e)=>t.attachShadow({mode:"open"}).append(Gn("slot"),Gn("style",e)),mt=new WeakMap,qn=(t,e)=>{if(e===void 0)return mt.get(t);try{mt.get(t).disconnect(),mt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),mt.set(t,n)}},Fi=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},jn=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},Ui=0,Xn=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Ui).toString(32)}`),t.id):"",Gn=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},vt={define:(t,e)=>!jt||window.customElements.get(t)||window.customElements.define(t,e)},_t="aria-controls",B="aria-selected",Vi=class extends pt{constructor(){super(),ht(this,Xt)}get tabList(){return bt("u-tablist",this)[0]||null}get selectedIndex(){return gt(this.tabs)}set selectedIndex(t){Qt(this.tabs[t])}get tabs(){return bt("u-tab",this)}get panels(){return bt("u-tabpanel",this)}},Yi=class extends pt{constructor(){super(),ht(this,Xt)}connectedCallback(){$(this,"role","tablist"),Hi(this,"click,keydown",this),qn(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){Bi(this,"click,keydown",this),qn(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s==null?void 0:s.setAttribute(B,"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"&&Qt(n[o]),t.type==="keydown"&&!Fi(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=gt(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 gt(this.tabs)}set selectedIndex(t){Qt(this.tabs[t])}},Gt=!1,Ki=class extends pt{static get observedAttributes(){return["id",B,_t]}constructor(){super(),ht(this,":host(:not([hidden])) { cursor: pointer; display: inline-block }")}connectedCallback(){$(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!Gt&&this.selected&&this.tabList){Gt=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=bt("u-tabpanel",this.tabsElement||this),n=zt(this,e[t.indexOf(this)]);n&&$(n,Ri,Xn(this)),t.forEach((o,i)=>{const s=zt(o,e[i]);o.tabIndex=o===this?0:-1,$(o,B,`${o===this}`),s&&(s.hidden=s!==n),s&&$(o,_t,s.id)}),Gt=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return(t==null?void 0:t.nodeName)==="U-TABLIST"?t:null}get selected(){return $(this,B)==="true"}set selected(t){$(this,B,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return zt(this)}},Wi=class extends pt{static get observedAttributes(){return["hidden"]}constructor(){super(),ht(this,Xt)}connectedCallback(){$(this,"role","tabpanel"),this.hidden=gt(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){this.hidden||qi(this.firstChild)?$(this,"tabindex",null):this.tabIndex=0}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${_t}="${this.id}"]`;return jn(this).querySelectorAll(t)}},bt=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),zt=(t,e)=>{const n=$(t,_t)||Xn(e),o=jn(t).getElementById(n);return(o==null?void 0:o.nodeName)==="U-TABPANEL"?o:null},gt=t=>[...t].findIndex(e=>$(e,B)==="true"),Qt=t=>t&&$(t,"aria-selected","true"),qi=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');vt.define("u-tabs",Vi),vt.define("u-tablist",Yi),vt.define("u-tab",Ki),vt.define("u-tabpanel",Wi);var ji=Object.defineProperty,zn=Object.getOwnPropertySymbols,Xi=Object.prototype.hasOwnProperty,Gi=Object.prototype.propertyIsEnumerable,Qn=(t,e,n)=>e in t?ji(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Jn=(t,e)=>{for(var n in e||(e={}))Xi.call(e,n)&&Qn(t,n,e[n]);if(zn)for(var n of zn(e))Gi.call(e,n)&&Qn(t,n,e[n]);return t},A=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Zn=A&&/android/i.test(navigator.userAgent),zi=A&&/firefox/i.test(navigator.userAgent),yt=A&&/iPad|iPhone|iPod/.test(navigator.userAgent),to=A&&/^((?!chrome|android).)*safari/i.test(navigator.userAgent),eo,Qi=A&&/^Mac/i.test(((eo=navigator.userAgentData)==null?void 0:eo.platform)||navigator.platform),Ji=`${Zn?"data":"aria"}-labelledby`,Jt=`${to?"aria":"data"}-multiselectable`,no=":host(:not([hidden])) { display: block }",oo="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",Zt=typeof HTMLElement>"u"?class{}:HTMLElement;function u(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 io=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},G=(t,...e)=>io("add",t,e),z=(t,...e)=>io("remove",t,e),so=(t,e)=>t.attachShadow({mode:"open"}).append(F("slot"),F("style",e)),Et=new WeakMap,$t=(t,e)=>{if(e===void 0)return Et.get(t);try{Et.get(t).disconnect(),Et.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),Et.set(t,n)}},Zi=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},wt=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},ts=0,te=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++ts).toString(32)}`),t.id):"",F=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))u(o,i,s);return o},ee={define:(t,e)=>!A||window.customElements.get(t)||window.customElements.define(t,e)},ro=t=>{const e=F("div");return e.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",u(e,"aria-live",t),e};function St(t,e,n){if(!e)return Object.keys(t).map(i=>`data-sr-${i}`);const o=(e==null?void 0:e.startsWith("data-sr-"))&&e.slice(8);return o&&n&&t[o]&&(t[o]=n),[]}var ne="disabled",Q="selected",es=class extends Zt{static get observedAttributes(){return[ne,Q]}constructor(){super(),so(this,`${no}:host(:focus){${oo}}:host{ cursor: pointer }`)}connectedCallback(){yt||(this.tabIndex=-1),u(this,"role")||u(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){u(this,"aria-disabled",`${this.disabled}`),u(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[Q]}set defaultSelected(t){this[Q]=t}get disabled(){return u(this,ne)!==null}set disabled(t){u(this,ne,t?"":null)}get form(){return this.closest("form")}get index(){var t;const e=(t=this.closest("u-datalist"))==null?void 0:t.getElementsByTagName("u-option");return Array.from(e||[this]).indexOf(this)}get label(){return u(this,"label")||this.text}set label(t){u(this,"label",t)}get selected(){return u(this,Q)!==null}set selected(t){u(this,Q,t?"":null)}get text(){var t;return((t=this.textContent)==null?void 0:t.trim())||""}set text(t){this.textContent=t}get value(){return u(this,"value")||this.text}set value(t){u(this,"value",t)}};ee.define("u-option",es);var oe=!1,ao,ns=0,U,os=to&&!yt,lo="click,focusout,input,keydown,mousedown,mouseup",co={singular:"%d hit",plural:"%d hits"},is=class extends Zt{constructor(){super(),this._blurTimer=0,this._input=null,this._root=null,this._value="",this._texts=Jn({},co),so(this,`${no}::slotted(u-option[disabled]) { display: none !important }`)}static get observedAttributes(){return["id",...St(co)]}connectedCallback(){this.hidden=!0,this._root=wt(this),U||(U=ro("assertive")),U.isConnected||document.body.appendChild(U),u(this,"role","listbox"),G(this._root,"focusin",this),G(this._root,"focus",this,!0),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){z(this._root||this,"focus",this,!0),z(this._root||this,"focusin",this),ie(this),this._root=null}attributeChangedCallback(t,e,n){var o;St(this._texts,t,n);const i=(o=this._root)==null?void 0:o.querySelectorAll(`input[list="${this.id}"]`);for(const s of i||[])fo(this,s)}handleEvent(t){const{type:e}=t;t.defaultPrevented||(e==="click"&&as(this,t),(e==="focus"||e==="focusin")&&ss(this,t),e==="focusout"&&rs(this),e==="keydown"&&ls(this,t),(e==="mutation"||e==="input")&&ho(this,t),e==="mouseup"&&(oe=!1),e==="mousedown"&&(oe=this.contains(t.target)))}get options(){return this.getElementsByTagName("u-option")}},ss=(t,{target:e})=>{var n;const o=t._input===e;if(o||t.contains(e))return clearTimeout(t._blurTimer);!o&&e instanceof HTMLInputElement&&u(e,"list")===t.id&&(t._input&&ie(t),t._input=e,u(t,Ji,te((n=t._input.labels)==null?void 0:n[0])),G(t._root||t,lo,t),$t(t,{attributeFilter:["value"],attributes:!0,childList:!0,subtree:!0}),V(t,!0))},rs=t=>{oe||(t._blurTimer=setTimeout(()=>ie(t)))},as=(t,{target:e})=>{var n,o,i,s,r;const a=u(t,Jt)!=="true",c=[...t.options].find(l=>l.contains(e));if(t._input===e)V(t,!0);else if(c&&Tt(c)){for(const l of t.options)l===c?l.selected=!0:a&&(l.selected=!1);(o=(n=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"value"))==null?void 0:n.set)==null||o.call(t._input,c.value),a&&((i=t._input)==null||i.focus(),V(t,!1)),(s=t._input)==null||s.dispatchEvent(new Event("input",{bubbles:!0,composed:!0})),(r=t._input)==null||r.dispatchEvent(new Event("change",{bubbles:!0}))}},ls=(t,e)=>{var n,o;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;e.key!=="Escape"&&V(t,!0);const{key:i}=e,s=(n=t._root)==null?void 0:n.activeElement,r=uo(t),a=r.indexOf(s);let c=-1;if(i==="ArrowDown"&&(c=(a+1)%r.length),i==="ArrowUp"&&(c=(~a?a:r.length)-1),~a&&((i==="Home"||i==="PageUp")&&(c=0),(i==="End"||i==="PageDown")&&(c=r.length-1),i==="Enter"))return r[a].click(),e.preventDefault();if(r[c])for(const l of r)l.tabIndex=-1;r[c]&&e.preventDefault(),(o=r[c]||t._input)==null||o.focus(),i==="Escape"&&V(t,!1)},V=(t,e)=>{t.hidden=!e,t.popover&&t.togglePopover(e),t._input&&fo(t,t._input,e),e&&ho(t)},ie=t=>{z(t._root||t,lo,t),$t(t,!1),V(t,!1),t._input=null},uo=t=>[...t.options].filter(e=>!e.disabled&&e.offsetWidth&&e.offsetHeight),Tt=t=>t instanceof HTMLOptionElement||t.getAttribute("role")==="option",fo=(t,e,n=!1)=>{u(e,"popovertarget",te(t)),u(e,"aria-autocomplete","list"),u(e,"aria-controls",te(t)),u(e,"aria-expanded",`${os||n}`),u(e,"autocomplete","off"),u(e,"role","combobox")},po=t=>(t==null?void 0:t.toLowerCase().trim())||"",ho=(t,e)=>{var n;const o=po((n=t._input)==null?void 0:n.value);if(!((e==null?void 0:e.type)==="mutation"||t._value!==o))return;const s=t.hidden,r=u(t,Jt)!=="true",a=e instanceof InputEvent&&!vo(e);t.hidden=!0,t._value=o;for(const l of t.options){const f=[l.value,l.label,l.text].map(po);l.hidden=!f.some(m=>m.includes(o)),r&&a&&Tt(l)&&(l.selected=f.includes(o))}t.hidden=s;const c=uo(t);clearTimeout(ao),ao=setTimeout(()=>{const{length:l}=c.filter(Tt),f=++ns%2?" ":"",m=`${`${t._texts[l===1?"singular":"plural"]}`.replace("%d",`${l}`)}`;U&&(U.textContent=`${!l&&t.innerText.trim()||m}${f}`)},1e3),yt&&c.map((l,f,m)=>{l.title=`${f+1}/${m}`})};A&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return wt(this).getElementById(u(this,"list")||"")}}),ee.define("u-datalist",is);var mo=" ".repeat(100),cs="insertReplacementText",se=({value:t})=>t.split(mo)[0];function vo(t){var e;const n=t instanceof Event&&t.type==="input"&&t.target instanceof HTMLInputElement&&(!t.inputType||t.inputType===cs);if(n){const o=t.target.value,i=Array.from(((e=t.target.list)==null?void 0:e.options)||[]).some(s=>s.value===o&&!Tt(s));t.target.value=o.split(mo)[i?1:0]}return n}var Y,ds=Zn||yt,us=zi||Qi,_o="input,focusin,focusout,keydown",bo={added:"Added",remove:"Press to remove",removed:"Removed",empty:"No selected",found:"Navigate left to find %d selected",of:"of"},fs=class extends Zt{constructor(){super(),this._blurAnnounceReset=!1,this._blurTimer=0,this._focusIndex=null,this._root=null,this._texts=Jn({},bo),this.attachShadow({mode:"open"}).append(F("slot"),F("style",`:host(:not([hidden])){ display: inline-block }
|
|
9
|
+
@keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(Nt)return;Nt=!0;const t=Ti||An,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let n=Li(this);if(t&&(n=`${n.replace(/\d+%$/,"")} ${e}%`),An)for(const o of this.labels)y(o,"aria-label",n);y(this,"aria-busy",`${this.position===-1}`),y(this,"aria-label",n.trim()),y(this,"aria-labelledby",null),y(this,"aria-valuemax","100"),y(this,"aria-valuemin","0"),y(this,"aria-valuenow",`${e}`),y(this,"role",t?"img":"progressbar"),Nt=!1}get labels(){const t=this.closest("label:not([for])"),e=Ii(this);return t&&(t.htmlFor=e),Mn(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return Rn(this,"value")}set value(t){Hn(this,"value",t)}get max(){return Rn(this,"max")||1}set max(t){Hn(this,"max",t)}};Pn.formAssociated=!0;var Dn=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),Rn=(t,e)=>{const n=y(t,e);return Dn(n)?Math.max(0,Number.parseFloat(n)):null},Hn=(t,e,n)=>{if(n===null||Dn(n))y(t,e,`${n}`);else throw new Error(`Failed to set non-numeric '${y}': '${n}'`)};Ai.define("u-progress",Pn);var Bt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Mi=Bt&&/android/i.test(navigator.userAgent),Nn;Bt&&/^Mac/i.test(((Nn=navigator.userAgentData)==null?void 0:Nn.platform)||navigator.platform);var Oi=`${Mi?"data":"aria"}-labelledby`,Ft=":host(:not([hidden])) { display: block }",rt=typeof HTMLElement>"u"?class{}:HTMLElement;function k(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 Bn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Pi=(t,...e)=>Bn("add",t,e),Di=(t,...e)=>Bn("remove",t,e),at=(t,e)=>t.attachShadow({mode:"open"}).append(Yn("slot"),Yn("style",e)),lt=new WeakMap,Fn=(t,e)=>{if(e===void 0)return lt.get(t);try{lt.get(t).disconnect(),lt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),lt.set(t,n)}},Ri=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Un=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},Hi=0,Vn=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Hi).toString(32)}`),t.id):"",Yn=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},dt={define:(t,e)=>!Bt||window.customElements.get(t)||window.customElements.define(t,e)},ct="aria-controls",N="aria-selected",Ni=class extends rt{constructor(){super(),at(this,Ft)}get tabList(){return ut("u-tablist",this)[0]||null}get selectedIndex(){return ft(this.tabs)}set selectedIndex(t){Yt(this.tabs[t])}get tabs(){return ut("u-tab",this)}get panels(){return ut("u-tabpanel",this)}},Bi=class extends rt{constructor(){super(),at(this,Ft)}connectedCallback(){k(this,"role","tablist"),Pi(this,"click,keydown",this),Fn(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){Di(this,"click,keydown",this),Fn(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s==null?void 0:s.setAttribute(N,"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"&&Yt(n[o]),t.type==="keydown"&&!Ri(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=ft(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 ft(this.tabs)}set selectedIndex(t){Yt(this.tabs[t])}},Ut=!1,Fi=class extends rt{static get observedAttributes(){return["id",N,ct]}constructor(){super(),at(this,":host(:not([hidden])) { cursor: pointer; display: inline-block }")}connectedCallback(){k(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!Ut&&this.selected&&this.tabList){Ut=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=ut("u-tabpanel",this.tabsElement||this),n=Vt(this,e[t.indexOf(this)]);n&&k(n,Oi,Vn(this)),t.forEach((o,i)=>{const s=Vt(o,e[i]);o.tabIndex=o===this?0:-1,k(o,N,`${o===this}`),s&&(s.hidden=s!==n),s&&k(o,ct,s.id)}),Ut=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return(t==null?void 0:t.nodeName)==="U-TABLIST"?t:null}get selected(){return k(this,N)==="true"}set selected(t){k(this,N,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return Vt(this)}},Ui=class extends rt{static get observedAttributes(){return["hidden"]}constructor(){super(),at(this,Ft)}connectedCallback(){k(this,"role","tabpanel"),this.hidden=ft(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){this.hidden||Vi(this.firstChild)?k(this,"tabindex",null):this.tabIndex=0}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${ct}="${this.id}"]`;return Un(this).querySelectorAll(t)}},ut=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),Vt=(t,e)=>{const n=k(t,ct)||Vn(e),o=Un(t).getElementById(n);return(o==null?void 0:o.nodeName)==="U-TABPANEL"?o:null},ft=t=>[...t].findIndex(e=>k(e,N)==="true"),Yt=t=>t&&k(t,"aria-selected","true"),Vi=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');dt.define("u-tabs",Ni),dt.define("u-tablist",Bi),dt.define("u-tab",Fi),dt.define("u-tabpanel",Ui);var Yi=Object.defineProperty,Wn=Object.getOwnPropertySymbols,Wi=Object.prototype.hasOwnProperty,Ki=Object.prototype.propertyIsEnumerable,Kn=(t,e,n)=>e in t?Yi(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,qn=(t,e)=>{for(var n in e||(e={}))Wi.call(e,n)&&Kn(t,n,e[n]);if(Wn)for(var n of Wn(e))Ki.call(e,n)&&Kn(t,n,e[n]);return t},L=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",jn=L&&/android/i.test(navigator.userAgent),qi=L&&/firefox/i.test(navigator.userAgent),pt=L&&/iPad|iPhone|iPod/.test(navigator.userAgent),Xn=L&&/^((?!chrome|android).)*safari/i.test(navigator.userAgent),Gn,ji=L&&/^Mac/i.test(((Gn=navigator.userAgentData)==null?void 0:Gn.platform)||navigator.platform),Xi=`${jn?"data":"aria"}-labelledby`,Wt=`${Xn?"aria":"data"}-multiselectable`,zn=":host(:not([hidden])) { display: block }",Qn="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",Kt=typeof HTMLElement>"u"?class{}:HTMLElement;function u(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 Jn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},X=(t,...e)=>Jn("add",t,e),G=(t,...e)=>Jn("remove",t,e),Zn=(t,e)=>t.attachShadow({mode:"open"}).append(B("slot"),B("style",e)),ht=new WeakMap,mt=(t,e)=>{if(e===void 0)return ht.get(t);try{ht.get(t).disconnect(),ht.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),ht.set(t,n)}},Gi=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},_t=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},zi=0,qt=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++zi).toString(32)}`),t.id):"",B=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))u(o,i,s);return o},jt={define:(t,e)=>!L||window.customElements.get(t)||window.customElements.define(t,e)},to=t=>{const e=B("div");return e.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",u(e,"aria-live",t),e};function vt(t,e,n){if(!e)return Object.keys(t).map(i=>`data-sr-${i}`);const o=(e==null?void 0:e.startsWith("data-sr-"))&&e.slice(8);return o&&n&&t[o]&&(t[o]=n),[]}var Xt="disabled",z="selected",Qi=class extends Kt{static get observedAttributes(){return[Xt,z]}constructor(){super(),Zn(this,`${zn}:host(:focus){${Qn}}:host{ cursor: pointer }`)}connectedCallback(){pt||(this.tabIndex=-1),u(this,"role")||u(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){u(this,"aria-disabled",`${this.disabled}`),u(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[z]}set defaultSelected(t){this[z]=t}get disabled(){return u(this,Xt)!==null}set disabled(t){u(this,Xt,t?"":null)}get form(){return this.closest("form")}get index(){var t;const e=(t=this.closest("u-datalist"))==null?void 0:t.getElementsByTagName("u-option");return Array.from(e||[this]).indexOf(this)}get label(){return u(this,"label")||this.text}set label(t){u(this,"label",t)}get selected(){return u(this,z)!==null}set selected(t){u(this,z,t?"":null)}get text(){var t;return((t=this.textContent)==null?void 0:t.trim())||""}set text(t){this.textContent=t}get value(){return u(this,"value")||this.text}set value(t){u(this,"value",t)}};jt.define("u-option",Qi);var Gt=!1,eo,Ji=0,F,Zi=Xn&&!pt,no="click,focusout,input,keydown,mousedown,mouseup",oo={singular:"%d hit",plural:"%d hits"},ts=class extends Kt{constructor(){super(),this._blurTimer=0,this._input=null,this._root=null,this._value="",this._texts=qn({},oo),Zn(this,`${zn}::slotted(u-option[disabled]) { display: none !important }`)}static get observedAttributes(){return["id",...vt(oo)]}connectedCallback(){this.hidden=!0,this._root=_t(this),F||(F=to("assertive")),F.isConnected||document.body.appendChild(F),u(this,"role","listbox"),X(this._root,"focusin",this),X(this._root,"focus",this,!0),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){G(this._root||this,"focus",this,!0),G(this._root||this,"focusin",this),zt(this),this._root=null}attributeChangedCallback(t,e,n){var o;vt(this._texts,t,n);const i=(o=this._root)==null?void 0:o.querySelectorAll(`input[list="${this.id}"]`);for(const s of i||[])so(this,s)}handleEvent(t){const{type:e}=t;t.defaultPrevented||(e==="click"&&os(this,t),(e==="focus"||e==="focusin")&&es(this,t),e==="focusout"&&ns(this),e==="keydown"&&is(this,t),(e==="mutation"||e==="input")&&ao(this,t),e==="mouseup"&&(Gt=!1),e==="mousedown"&&(Gt=this.contains(t.target)))}get options(){return this.getElementsByTagName("u-option")}},es=(t,{target:e})=>{var n;const o=t._input===e;if(o||t.contains(e))return clearTimeout(t._blurTimer);!o&&e instanceof HTMLInputElement&&u(e,"list")===t.id&&(t._input&&zt(t),t._input=e,u(t,Xi,qt((n=t._input.labels)==null?void 0:n[0])),X(t._root||t,no,t),mt(t,{attributeFilter:["value"],attributes:!0,childList:!0,subtree:!0}),U(t,!0))},ns=t=>{Gt||(t._blurTimer=setTimeout(()=>zt(t)))},os=(t,{target:e})=>{var n,o,i,s,r;const a=u(t,Wt)!=="true",d=[...t.options].find(l=>l.contains(e));if(t._input===e)U(t,!0);else if(d&&bt(d)){for(const l of t.options)l===d?l.selected=!0:a&&(l.selected=!1);(o=(n=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"value"))==null?void 0:n.set)==null||o.call(t._input,d.value),a&&((i=t._input)==null||i.focus(),U(t,!1)),(s=t._input)==null||s.dispatchEvent(new Event("input",{bubbles:!0,composed:!0})),(r=t._input)==null||r.dispatchEvent(new Event("change",{bubbles:!0}))}},is=(t,e)=>{var n,o;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;e.key!=="Escape"&&U(t,!0);const{key:i}=e,s=(n=t._root)==null?void 0:n.activeElement,r=io(t),a=r.indexOf(s);let d=-1;if(i==="ArrowDown"&&(d=(a+1)%r.length),i==="ArrowUp"&&(d=(~a?a:r.length)-1),~a&&((i==="Home"||i==="PageUp")&&(d=0),(i==="End"||i==="PageDown")&&(d=r.length-1),i==="Enter"))return r[a].click(),e.preventDefault();if(r[d])for(const l of r)l.tabIndex=-1;r[d]&&e.preventDefault(),(o=r[d]||t._input)==null||o.focus(),i==="Escape"&&U(t,!1)},U=(t,e)=>{t.hidden=!e,t.popover&&t.togglePopover(e),t._input&&so(t,t._input,e),e&&ao(t)},zt=t=>{G(t._root||t,no,t),mt(t,!1),U(t,!1),t._input=null},io=t=>[...t.options].filter(e=>!e.disabled&&e.offsetWidth&&e.offsetHeight),bt=t=>t instanceof HTMLOptionElement||t.getAttribute("role")==="option",so=(t,e,n=!1)=>{u(e,"popovertarget",qt(t)),u(e,"aria-autocomplete","list"),u(e,"aria-controls",qt(t)),u(e,"aria-expanded",`${Zi||n}`),u(e,"autocomplete","off"),u(e,"role","combobox")},ro=t=>(t==null?void 0:t.toLowerCase().trim())||"",ao=(t,e)=>{var n;const o=ro((n=t._input)==null?void 0:n.value);if(!((e==null?void 0:e.type)==="mutation"||t._value!==o))return;const s=t.hidden,r=u(t,Wt)!=="true",a=e instanceof InputEvent&&!co(e);t.hidden=!0,t._value=o;for(const l of t.options){const f=[l.value,l.label,l.text].map(ro);l.hidden=!f.some(h=>h.includes(o)),r&&a&&bt(l)&&(l.selected=f.includes(o))}t.hidden=s;const d=io(t);clearTimeout(eo),eo=setTimeout(()=>{const{length:l}=d.filter(bt),f=++Ji%2?" ":"",h=`${`${t._texts[l===1?"singular":"plural"]}`.replace("%d",`${l}`)}`;F&&(F.textContent=`${!l&&t.innerText.trim()||h}${f}`)},1e3),pt&&d.map((l,f,h)=>{l.title=`${f+1}/${h}`})};L&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return _t(this).getElementById(u(this,"list")||"")}}),jt.define("u-datalist",ts);var lo=" ".repeat(100),ss="insertReplacementText",Qt=({value:t})=>t.split(lo)[0];function co(t){var e;const n=t instanceof Event&&t.type==="input"&&t.target instanceof HTMLInputElement&&(!t.inputType||t.inputType===ss);if(n){const o=t.target.value,i=Array.from(((e=t.target.list)==null?void 0:e.options)||[]).some(s=>s.value===o&&!bt(s));t.target.value=o.split(lo)[i?1:0]}return n}var V,rs=jn||pt,as=qi||ji,uo="input,focusin,focusout,keydown",fo={added:"Added",remove:"Press to remove",removed:"Removed",empty:"No selected",found:"Navigate left to find %d selected",of:"of"},ls=class extends Kt{constructor(){super(),this._blurAnnounceReset=!1,this._blurTimer=0,this._focusIndex=null,this._root=null,this._texts=qn({},fo),this.attachShadow({mode:"open"}).append(B("slot"),B("style",`:host(:not([hidden])){ display: inline-block }
|
|
10
10
|
::slotted(data) { cursor: pointer; display: inline-block; outline: none; pointer-events: none }
|
|
11
11
|
::slotted(data)::after { content: '\\00D7'; content: '\\00D7' / ''; padding-inline: .5ch; pointer-events: auto }
|
|
12
|
-
::slotted(data:focus)::after { ${
|
|
13
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vZGVzaWduc3lzdGVtL3BhZ2luYXRpb24vcGFnaW5hdGlvbi1oZWxwZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vdXRpbHMudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYnJlYWRjcnVtYnMvYnJlYWRjcnVtYnMtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZGlhbG9nL2RpYWxvZy1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9lcnJvcnN1bW1hcnkvZXJyb3JzdW1tYXJ5LW9ic2VydmVyLnRzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtZGF0YWxpc3QvZGlzdC91LWRhdGFsaXN0LmpzIiwiLi4vZGVzaWduc3lzdGVtL2ZpZWxkL2ZpZWxkLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2ZpZWxkc2V0L2ZpZWxkc2V0LW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2xheW91dC9hcHAtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vbG9nby9sb2dvLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3BvcG92ZXIvcG9wb3Zlci1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90YWJsZS90YWJsZS1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b29sdGlwL3Rvb2x0aXAtb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kZXRhaWxzL2Rpc3QvdS1kZXRhaWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtcHJvZ3Jlc3MvZGlzdC91LXByb2dyZXNzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LXRhZ3MvZGlzdC91LXRhZ3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZ2V0U3RlcHMgPSAoXG5cdG5vdzogbnVtYmVyLFxuXHRtYXg6IG51bWJlcixcblx0c2hvdyA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbikgPT4ge1xuXHRjb25zdCBvZmZzZXQgPSAoc2hvdyAtIDEpIC8gMjtcblx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heChNYXRoLm1pbihub3cgLSBNYXRoLmZsb29yKG9mZnNldCksIG1heCAtIHNob3cgKyAxKSwgMSk7XG5cdGNvbnN0IGVuZCA9IE1hdGgubWluKE1hdGgubWF4KG5vdyArIE1hdGguY2VpbChvZmZzZXQpLCBzaG93KSwgbWF4KTtcblx0Y29uc3QgcGFnZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBlbmQgKyAxIC0gc3RhcnQgfSwgKF8sIGkpID0+IGkgKyBzdGFydCk7XG5cblx0aWYgKHNob3cgPiA0ICYmIHN0YXJ0ID4gMSkgcGFnZXMuc3BsaWNlKDAsIDIsIDEsIDApO1xuXHRpZiAoc2hvdyA+IDMgJiYgZW5kIDwgbWF4KSBwYWdlcy5zcGxpY2UoLTIsIDIsIDAsIG1heCk7XG5cdHJldHVybiBwYWdlcztcbn07XG5cbmV4cG9ydCBjb25zdCBwYWdpbmF0aW9uID0gKHsgY3VycmVudCA9IDEsIHRvdGFsID0gMTAsIHNob3cgPSA3IH0pID0+ICh7XG5cdHByZXY6IGN1cnJlbnQgPiAxID8gY3VycmVudCAtIDEgOiAwLFxuXHRuZXh0OiBjdXJyZW50IDwgdG90YWwgPyBjdXJyZW50ICsgMSA6IDAsXG5cdHBhZ2VzOiBnZXRTdGVwcyhjdXJyZW50LCB0b3RhbCwgc2hvdykubWFwKChwYWdlLCBpbmRleCkgPT4gKHtcblx0XHRjdXJyZW50OiBwYWdlID09PSBjdXJyZW50ICYmIChcInBhZ2VcIiBhcyBjb25zdCksXG5cdFx0a2V5OiBga2V5LSR7cGFnZX0tJHtpbmRleH1gLFxuXHRcdHBhZ2UsXG5cdH0pKSxcbn0pO1xuIiwiaW1wb3J0IHsgY2xzeCB9IGZyb20gXCJjbHN4XCI7XG5cbmV4cG9ydCBjb25zdCBRVUlDS19FVkVOVCA9IHsgY2FwdHVyZTogdHJ1ZSwgcGFzc2l2ZTogdHJ1ZSB9O1xuZXhwb3J0IGNvbnN0IElTX0JST1dTRVIgPVxuXHR0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIjtcblxuLy8gVE9ETzogRG9jdW1lbnRhdGlvbiBmb3IgcHJldHR5TnVtYmVyXG5sZXQgSU5UTF9OVU06IEludGwuTnVtYmVyRm9ybWF0IHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHByZXR0eU51bWJlcihudW1iZXI6IG51bWJlciB8IHN0cmluZykge1xuXHRpZiAoIUlOVExfTlVNKVxuXHRcdElOVExfTlVNID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KFxuXHRcdFx0KElTX0JST1dTRVIgJiYgYXR0cihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIFwibGFuZ1wiKSkgfHwgXCJub1wiLFxuXHRcdCk7XG5cdHJldHVybiBJTlRMX05VTS5mb3JtYXQoTnVtYmVyKG51bWJlcikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVib3VuY2U8VCBleHRlbmRzIHVua25vd25bXT4oXG5cdGNhbGxiYWNrOiAoLi4uYXJnczogVCkgPT4gdm9pZCxcblx0ZGVsYXk6IG51bWJlcixcbikge1xuXHRsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuXG5cdHJldHVybiAoLi4uYXJnczogVCkgPT4ge1xuXHRcdGNsZWFyVGltZW91dCh0aW1lcik7XG5cdFx0dGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGNhbGxiYWNrKC4uLmFyZ3MpLCBkZWxheSk7XG5cdH07XG59XG5cbi8qKlxuICogYXR0clxuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBnZXQsIHNldCBhbmQgcmVtb3ZlIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSBlbCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSBuYW1lIFRoZSBhdHRyaWJ1dGUgbmFtZSB0byBnZXQsIHNldCBvciByZW1vdmUsIG9yIGEgb2JqZWN0IHRvIHNldCBtdWx0aXBsZSBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0gdmFsdWUgQSB2YWxpZCBhdHRyaWJ1dGUgdmFsdWUgb3IgbnVsbCB0byByZW1vdmUgYXR0cmlidXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRyKFxuXHRlbDogRWxlbWVudCxcblx0bmFtZTogc3RyaW5nLFxuXHR2YWx1ZT86IHN0cmluZyB8IG51bGwsXG4pOiBzdHJpbmcgfCBudWxsIHtcblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSkgPz8gbnVsbDsgLy8gRmFsbGJhY2sgdG8gbnVsbCBvbmx5IGlmIGVsIGlzIHVuZGVmaW5lZFxuXHRpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblx0ZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcblx0cmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogdXNlSWRcbiAqIEByZXR1cm4gQSBnZW5lcmF0ZWQgdW5pcXVlIElEXG4gKi9cbmxldCBpZCA9IDA7XG5jb25zdCBVVUlEID0gYCR7RGF0ZS5ub3coKS50b1N0cmluZygzNil9JHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCA1KX1gO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlkKGVsOiBFbGVtZW50KSB7XG5cdGlmICghZWwuaWQpIGVsLmlkID0gYCR7VVVJRH0keysraWR9YDtcblx0cmV0dXJuIGVsLmlkO1xufVxuXG4vLyBJbnRlcm5hbCBoZWxwZXIgZm9yIG9uIC8gb2ZmXG5jb25zdCBldmVudHMgPSAoXG5cdGFjdGlvbjogXCJhZGRcIiB8IFwicmVtb3ZlXCIsXG5cdGVsZW1lbnQ6IE5vZGUgfCBXaW5kb3csXG5cdHJlc3Q6IFBhcmFtZXRlcnM8dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI+LFxuKTogdm9pZCA9PiB7XG5cdGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuXHRcdHJlc3RbMF0gPSB0eXBlO1xuXHRcdGVsZW1lbnRbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXSguLi5yZXN0KTtcblx0fVxufTtcblxuLyoqXG4gKiBvblxuICogQHBhcmFtIGVsZW1lbnQgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gdHlwZXMgQSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGV2ZW50IHR5cGVzXG4gKiBAcGFyYW0gbGlzdGVuZXIgQW4gZXZlbnQgbGlzdGVuZXIgZnVuY3Rpb24gb3IgbGlzdGVuZXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBvbiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xuXG4vKipcbiAqIG9mZlxuICogQHBhcmFtIGVsZW1lbnQgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gdHlwZXMgQSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGV2ZW50IHR5cGVzXG4gKiBAcGFyYW0gbGlzdGVuZXIgQW4gZXZlbnQgbGlzdGVuZXIgZnVuY3Rpb24gb3IgbGlzdGVuZXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBvZmYgPSAoXG5cdGVsZW1lbnQ6IE5vZGUgfCBXaW5kb3csXG5cdC4uLnJlc3Q6IFBhcmFtZXRlcnM8dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXI+XG4pOiB2b2lkID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcblxuLyoqXG4gKiBTY3JvbGxlciB0YXJnZXMgaGVscGluZyBhbmNob3JQb3NpdGlvblxuICovXG5jb25zdCBTQ1JPTExFUiA9IElTX0JST1dTRVIgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpIDogbnVsbDsgLy8gVXNlZCB0byBlbnN1cmUgd2UgaGF2ZSBzY3JvbGxhYmlsaXR5IHVuZGVyXG5jb25zdCBUQVJHRVRTID0gbmV3IE1hcDxFbGVtZW50LCAoKSA9PiB2b2lkPigpOyAvLyBTdG9yZSBjdXJyZW50IG9wZW4gcG9wcGVycyBhbmQgdGhlaXIgdXBkYXRlIGZ1bmN0aW9uc1xuY29uc3QgVEFSR0VUU19VUERBVEUgPSAoKSA9PiB7XG5cdGZvciAoY29uc3QgW18sIHVwZGF0ZV0gb2YgVEFSR0VUUykgdXBkYXRlKCk7XG59O1xuXG5pZiAoU0NST0xMRVIpIHtcblx0U0NST0xMRVIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7cGFkZGluZzoxcHg7dG9wOjA7bGVmdDowcHhcIjtcblx0b24od2luZG93LCBcImxvYWQscmVzaXplLHNjcm9sbFwiLCBUQVJHRVRTX1VQREFURSwgUVVJQ0tfRVZFTlQpO1xufVxuXG4vKipcbiAqIGFuY2hvclBvc2l0aW9uXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSBFbGVtZW50IHRvIHBvc2l0aW9uXG4gKiBAcGFyYW0gYW5jaG9yIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBhbmNob3JcbiAqL1xuY29uc3QgUE9TSVRJT04gPSB7IHRvcDogMCwgcmlnaHQ6IDEsIGJvdHRvbTogMiwgbGVmdDogMyB9OyAvLyBTcGVlZCB1cCBieSB1c2luZyBhIGNvbnN0IG1hcFxuXG5leHBvcnQgZnVuY3Rpb24gYW5jaG9yUG9zaXRpb24oXG5cdHRhcmdldDogSFRNTEVsZW1lbnQsXG5cdGFuY2hvcjogRWxlbWVudCB8IGZhbHNlLFxuXHRwb3NpdGlvbj86IHN0cmluZyB8IG51bWJlcixcbikge1xuXHRpZiAoYW5jaG9yID09PSBmYWxzZSB8fCAhYW5jaG9yLmlzQ29ubmVjdGVkIHx8ICF0YXJnZXQuaXNDb25uZWN0ZWQpXG5cdFx0cmV0dXJuIFRBUkdFVFMuZGVsZXRlKHRhcmdldCk7IC8vIFN0b3Agd2F0Y2hpbmcgaWYgYW5jaG9yIGlzIHJlbW92ZWQgZnJvbSBET01cblx0aWYgKCFTQ1JPTExFUj8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFNDUk9MTEVSIHx8IFwiXCIpOyAvLyBFbnN1cmUgd2UgaGF2ZSB0aGUgc2Nyb2xsZXJcblx0aWYgKCFUQVJHRVRTLmhhcyh0YXJnZXQpKSB7XG5cdFx0Ly8gU2V0dXAgbmV3IHRhcmdldCBvciB1cGRhdGUgcG9zaXRpb25cblx0XHRjb25zdCBwbGFjZSA9XG5cdFx0XHRQT1NJVElPTltwb3NpdGlvbiBhcyBrZXlvZiB0eXBlb2YgUE9TSVRJT05dID8/IFBPU0lUSU9OLmJvdHRvbTsgLy8gVXNlIENTUyBwcm9wZXJ0eSB0byBzdG9yZSBwb3NpdGlvbiBmb3IgbW9yZSBmbGV4aWJpbGl0eVxuXHRcdHJldHVybiBUQVJHRVRTLnNldCh0YXJnZXQsICgpID0+IGFuY2hvclBvc2l0aW9uKHRhcmdldCwgYW5jaG9yLCBwbGFjZSkpLmdldChcblx0XHRcdHRhcmdldCxcblx0XHQpPy4oKTsgLy8gU3RhcnQgd2F0Y2hpbmcgaWYgbm90IGFscmVhZHkgd2F0Y2hpbmdcblx0fVxuXG5cdGNvbnN0IGlzSFRNTEFuY2hvciA9IGFuY2hvciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OyAvLyBTVkcgb3IgWE1MIGVsZW1lbnRzIGRvZXMgbm90IGhhdmUgb2Zmc2V0V2lkdGggb3Igb2Zmc2V0SGVpZ2h0XG5cdGNvbnN0IHsgb2Zmc2V0V2lkdGg6IHRhcmdldFcsIG9mZnNldEhlaWdodDogdGFyZ2V0SCB9ID0gdGFyZ2V0O1xuXHRjb25zdCBhbmNob3JXID0gaXNIVE1MQW5jaG9yID8gYW5jaG9yLm9mZnNldFdpZHRoIDogYW5jaG9yLmNsaWVudFdpZHRoO1xuXHRjb25zdCBhbmNob3JIID0gaXNIVE1MQW5jaG9yID8gYW5jaG9yLm9mZnNldEhlaWdodCA6IGFuY2hvci5jbGllbnRIZWlnaHQ7XG5cdGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wIH0gPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdGNvbnN0IGFuY2hvclggPSBNYXRoLnJvdW5kKGxlZnQgLSAoYW5jaG9yVyAtIHdpZHRoKSAvIDIpOyAvLyBDb3JyZWN0IGZvciBDU1MgdHJhbnNmb3JtIHNjYWxlXG5cdGNvbnN0IGFuY2hvclkgPSBNYXRoLnJvdW5kKHRvcCAtIChhbmNob3JIIC0gaGVpZ2h0KSAvIDIpOyAvLyBDb3JyZWN0IGZvciBDU1MgdHJhbnNmb3JtIHNjYWxlXG5cblx0Y29uc3QgaGFzU3BhY2VMZWZ0ID0gYW5jaG9yWCAtIHRhcmdldFcgPiAwO1xuXHRjb25zdCBoYXNTcGFjZVJpZ2h0ID0gYW5jaG9yVyArIGFuY2hvclcgKyB0YXJnZXRXIDwgd2luZG93LmlubmVyV2lkdGg7XG5cdGNvbnN0IGhhc1NwYWNlT3ZlciA9IGFuY2hvclkgLSB0YXJnZXRIID4gMDtcblx0Y29uc3QgaGFzU3BhY2VVbmRlciA9IGFuY2hvclkgKyBhbmNob3JIICsgdGFyZ2V0SCA8IHdpbmRvdy5pbm5lckhlaWdodDtcblx0Y29uc3QgcG9zaXRpb25SaWdodCA9XG5cdFx0KHBvc2l0aW9uID09PSBQT1NJVElPTi5ib3R0b20gJiYgaGFzU3BhY2VSaWdodCkgfHwgIWhhc1NwYWNlTGVmdDsgLy8gQWx3YXlzIHBvc2l0aW9uIHJpZ2h0IHdoZW4gbm8gaGFzU3BhY2VMZWZ0LCBhcyBubyBPUyBzY3JvbGxzIGZ1cnRoZXIgdXAgdGhhbiAwXG5cdGNvbnN0IHBvc2l0aW9uVW5kZXIgPVxuXHRcdChwb3NpdGlvbiA9PT0gUE9TSVRJT04uYm90dG9tICYmIGhhc1NwYWNlVW5kZXIpIHx8ICFoYXNTcGFjZU92ZXI7IC8vIEFsd2F5cyBwb3NpdGlvbiB1bmRlciB3aGVuIG5vIGhhc1NwYWNlT3ZlciwgYXMgbm8gT1Mgc2Nyb2xscyBmdXJ0aGVyIHVwIHRoYW4gMFxuXHRjb25zdCBjZW50ZXJYID0gTWF0aC5taW4oXG5cdFx0TWF0aC5tYXgoMTAsIGFuY2hvclggLSAodGFyZ2V0VyAtIGFuY2hvclcpIC8gMiksXG5cdFx0d2luZG93LmlubmVyV2lkdGggLSB0YXJnZXRXIC0gMTAsXG5cdCk7XG5cdGNvbnN0IGNlbnRlclkgPSBNYXRoLm1pbihcblx0XHRNYXRoLm1heCgxMCwgYW5jaG9yWSAtICh0YXJnZXRIIC0gYW5jaG9ySCkgLyAyKSxcblx0XHR3aW5kb3cuaW5uZXJIZWlnaHQgLSB0YXJnZXRIIC0gMTAsXG5cdCk7XG5cdGNvbnN0IGlzVmVydGljYWwgPSBwb3NpdGlvbiA9PT0gUE9TSVRJT04udG9wIHx8IHBvc2l0aW9uID09PSBQT1NJVElPTi5ib3R0b207XG5cblx0dGFyZ2V0LnN0eWxlLmxlZnQgPSBgJHtNYXRoLnJvdW5kKGlzVmVydGljYWwgPyBjZW50ZXJYIDogcG9zaXRpb25SaWdodCA/IGFuY2hvclggKyBhbmNob3JXIDogYW5jaG9yWCAtIHRhcmdldFcpfXB4YDtcblx0dGFyZ2V0LnN0eWxlLnRvcCA9IGAke01hdGgucm91bmQoaXNWZXJ0aWNhbCA/IChwb3NpdGlvblVuZGVyID8gYW5jaG9yWSArIGFuY2hvckggOiBhbmNob3JZIC0gdGFyZ2V0SCkgOiBjZW50ZXJZKX1weGA7XG5cdFNDUk9MTEVSPy5zdHlsZS5zZXRQcm9wZXJ0eShcblx0XHRcInRyYW5zbGF0ZVwiLFxuXHRcdGAke01hdGgucm91bmQod2luZG93LnNjcm9sbFggKyBhbmNob3JYICsgYW5jaG9yVyArIHRhcmdldFcgKyAzMCl9cHggJHtNYXRoLnJvdW5kKHdpbmRvdy5zY3JvbGxZICsgYW5jaG9yWSArIGFuY2hvckggKyB0YXJnZXRIICsgMzApfXB4YCxcblx0KTtcbn1cblxuLyoqXG4gKiBTcGVlZCB1cCBNdXRhdGlvbk9ic2VydmVyIGJ5IGRlYm91bmNpbmcgYW5kIG9ubHkgcnVubmluZyB3aGVuIHBhZ2UgaXMgdmlzaWJsZVxuICogQHJldHVybiBuZXcgTXV0YWlvbk9ic2VydmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrOiBNdXRhdGlvbkNhbGxiYWNrKSB7XG5cdGxldCBxdWV1ZSA9IDA7XG5cblx0Y29uc3Qgb25GcmFtZSA9ICgpID0+IHNldFRpbWVvdXQob25UaW1lciwgMjAwKTsgLy8gVXNlIGJvdGggcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGFuZCBzZXRUaW1lb3V0IHRvIGRlYm91bmNlIGFuZCBvbmx5IHJ1biB3aGVuIHZpc2libGVcblx0Y29uc3Qgb25UaW1lciA9ICgpID0+IHtcblx0XHRjYWxsYmFjayhbXSwgb2JzZXJ2ZXIpO1xuXHRcdG9ic2VydmVyLnRha2VSZWNvcmRzKCk7IC8vIENsZWFyIHJlY29yZHMgdG8gYXZvaWQgcnVubmluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuXHRcdHF1ZXVlID0gMDtcblx0fTtcblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG5cdFx0aWYgKCFxdWV1ZSkgcXVldWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUob25GcmFtZSk7XG5cdH0pO1xuXG5cdHJldHVybiBvYnNlcnZlcjtcbn1cblxuLyoqXG4gKiBvbk11dGF0aW9uXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IG9ic2VydmUgbXV0YXRpb25zIG9uIGEgc3BlY2lmaWMgY2xhc3MgbmFtZVxuICogQHBhcmFtIGVsIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgY2xhc3MgbmFtZSB0byBvYnNlcnZlXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHJ1biB3aGVuIG11dGF0aW9ucyBhcmUgZGV0ZWN0ZWRcbiAqL1xuY29uc3QgTVVUQVRPUlMgPSBuZXcgV2Vha01hcDxFbGVtZW50LCBBcnJheTwoKSA9PiB2b2lkPj4oKTtcbmV4cG9ydCBjb25zdCBvbk11dGF0aW9uID0gPFQgZXh0ZW5kcyBFbGVtZW50Pihcblx0ZWw6IEVsZW1lbnQsXG5cdGNsYXNzTmFtZTogc3RyaW5nLFxuXHRjYWxsYmFjazogKGVsZW1zOiBIVE1MQ29sbGVjdGlvbk9mPFQ+KSA9PiB2b2lkLFxuKSA9PiB7XG5cdGNvbnN0IGVsZW1zID0gZWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpO1xuXHRjb25zdCBtdXRhdG9yID0gTVVUQVRPUlMuZ2V0KGVsKSB8fCBbXTtcblxuXHRpZiAoIW11dGF0b3IubGVuZ3RoKSB7XG5cdFx0TVVUQVRPUlMuc2V0KGVsLCBtdXRhdG9yKTtcblx0XHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKChfLCBvYnNlcnZlcikgPT4ge1xuXHRcdFx0aWYgKGVsLmlzQ29ubmVjdGVkICYmIG11dGF0b3I/Lmxlbmd0aCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIG11dGF0b3IpIGNhbGxiYWNrKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRNVVRBVE9SUy5kZWxldGUoZWwpO1xuXHRcdFx0fVxuXHRcdH0pLm9ic2VydmUoZWwsIHtcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogW1wiY2xhc3NcIl0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdFx0c3VidHJlZTogdHJ1ZSxcblx0XHR9KTtcblx0fVxuXHRtdXRhdG9yLnB1c2goKCkgPT4gY2FsbGJhY2soZWxlbXMgYXMgSFRNTENvbGxlY3Rpb25PZjxUPikpO1xufTtcblxuLyoqXG4gKiBvbkxvYWRlZFxuICogQGRlc2NyaXB0aW9uIFJ1bnMgYSBjYWxsYmFjayB3aGVuIHdpbmRvdyBpcyBsb2FkZWQgaW4gYnJvd3NlclxuICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBydW4gd2hlbiB0aGUgcGFnZSBpcyByZWFkeVxuICovXG5leHBvcnQgY29uc3Qgb25Mb2FkZWQgPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcblx0aWYgKCFJU19CUk9XU0VSKSByZXR1cm47XG5cdGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpXG5cdFx0d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayk7IC8vIEVuc3VyZSB3ZSBydW4gYWZ0ZXIgYWxsIG90aGVyIGxvYWQgZXZlbnRzXG5cdGVsc2Ugb24od2luZG93LCBcImxvYWRcIiwgY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBpc0lucHV0TGlrZVxuICogQGRlc2NyaXB0aW9uIENoZWNrIGlmIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKiBAcGFyYW0gZWwgVGhlIGVsZW1lbnQgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGVsZW1lbnQgaXMgYW4gaW5wdXQgbGlrZSBlbGVtZW50XG4gKi9cbmV4cG9ydCBjb25zdCBpc0lucHV0TGlrZSA9IChlbDogdW5rbm93bik6IGVsIGlzIEhUTUxJbnB1dEVsZW1lbnQgPT5cblx0ZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcInZhbGlkaXR5XCIgaW4gZWwgJiZcblx0IShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KTtcblxuLyoqXG4gKiB0b0N1c3RvbUVsZW1lbnRQcm9wc1xuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBjb252ZXJ0IHByb3BzIHRvIGN1c3RvbSBlbGVtZW50IGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcHMgdG8gY29udmVydFxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBwcm9wc1xuICovXG5leHBvcnQgY29uc3QgdG9DdXN0b21FbGVtZW50UHJvcHMgPSAoXG5cdHsgY2xhc3NOYW1lLCBoaWRkZW4sIG9wZW4sIC4uLnJlc3QgfTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGtsYXNzPzogc3RyaW5nLFxuKSA9PiB7XG5cdHJlc3QuY2xhc3MgPSBjbHN4KGtsYXNzLCBjbGFzc05hbWUgfHwgXCJcIikgfHwgdW5kZWZpbmVkOyAvLyBVc2UgY2xhc3MgaW5zdGVhZCBvZiBjbGFzc05hbWVcblx0aWYgKGhpZGRlbikgcmVzdC5oaWRkZW4gPSB0cnVlOyAvLyBFbnN1cmUgYm9vbGVhbiBwcm9wIGJlaGF2aW91clxuXHRpZiAob3BlbikgcmVzdC5vcGVuID0gdHJ1ZTsgLy8gRW5zdXJlIGJvb2xlYW4gcHJvcCBiZWhhdmlvdXJcblx0cmV0dXJuIHJlc3Q7XG59O1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19CUkVBRENSVU1CUyA9IHN0eWxlcy5icmVhZGNydW1icy5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKGJyZWFkY3J1bWJzOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRmb3IgKGNvbnN0IGJyZWFkY3VtYnMgb2YgYnJlYWRjcnVtYnMpXG5cdFx0YnJlYWRjdW1icy5xdWVyeVNlbGVjdG9yQWxsKFwibGkgYVwiKS5mb3JFYWNoKChjcnVtYiwgaW5kZXgsIHsgbGVuZ3RoIH0pID0+IHtcblx0XHRcdGF0dHIoY3J1bWIsIFwiYXJpYS1jdXJyZW50XCIsIGluZGV4ID09PSBsZW5ndGggLSAxID8gXCJwYWdlXCIgOiBudWxsKTtcblx0XHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19CUkVBRENSVU1CUywgaGFuZGxlTXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRJU19CUk9XU0VSLFxuXHRRVUlDS19FVkVOVCxcblx0YXR0cixcblx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcixcblx0b24sXG5cdG9uTG9hZGVkLFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0RJQUxPRyA9IHN0eWxlcy5kaWFsb2cuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgRElBTE9HUyA9IElTX0JST1dTRVJcblx0PyAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcblx0XHRcdENTU19ESUFMT0csXG5cdFx0KSBhcyBIVE1MQ29sbGVjdGlvbk9mPEhUTUxEaWFsb2dFbGVtZW50Pilcblx0OiBbXTtcblxuY29uc3QgaGFuZGxlTW9kYWwgPSAoKSA9PiB7XG5cdGZvciAoY29uc3QgZGlhbG9nIG9mIERJQUxPR1MpXG5cdFx0aWYgKGRpYWxvZy5pc0Nvbm5lY3RlZCAmJiBkaWFsb2cuc2hvd01vZGFsICYmIGRpYWxvZy5jbG9zZSkge1xuXHRcdFx0aWYgKGRpYWxvZy5tYXRjaGVzKCdbb3Blbl06bm90KFtkYXRhLW1vZGFsPVwiZmFsc2VcIl0pOm5vdCg6bW9kYWwpJykpIHtcblx0XHRcdFx0YXR0cihkaWFsb2csIFwib3BlblwiLCBudWxsKTsgLy8gVXNpbmcgYXR0cmlidXRlIGluc3RlYWQgb2YgLmNsb3NlIHRvIGF2b2lkIGBjbG9zZWAgZXZlbnRcblx0XHRcdFx0ZGlhbG9nLnNob3dNb2RhbCgpO1xuXHRcdFx0fSBlbHNlIGlmIChkaWFsb2cubWF0Y2hlcyhcIjptb2RhbDpub3QoW29wZW5dKVwiKSkge1xuXHRcdFx0XHRhdHRyKGRpYWxvZywgXCJvcGVuXCIsIFwiXCIpOyAvLyBTZXQgYXMgb3BlblxuXHRcdFx0XHRkaWFsb2cuY2xvc2UoKTsgLy8gU28gd2UgY29ycmVjbHR5IGNhbiBjYWxsIC5jbG9zZSwgcmVtb3ZpbmcgPGRpYWxvZz4gZnJvbSAjdG9wLWxheWVyXG5cdFx0XHR9XG5cdFx0fVxufTtcblxuY29uc3QgaGFuZGxlQ2xpY2sgPSAoeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5LCB0YXJnZXQ6IGVsIH06IE1vdXNlRXZlbnQpID0+IHtcblx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTERpYWxvZ0VsZW1lbnQgJiYgYXR0cihlbCwgXCJkYXRhLWNsb3NlZGJ5XCIpID09PSBcImFueVwiKSB7XG5cdFx0Y29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfSA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdGNvbnN0IGlzSW5zaWRlID0gdG9wIDw9IHkgJiYgeSA8PSBib3R0b20gJiYgbGVmdCA8PSB4ICYmIHggPD0gcmlnaHQ7XG5cblx0XHRpZiAoIWlzSW5zaWRlKSBlbC5jbG9zZSgpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdGVsIGluc3RhbmNlb2YgRWxlbWVudCAmJlxuXHRcdGVsLmNsb3Nlc3QoJ2J1dHRvbltkYXRhLWNvbW1hbmQ9XCJjbG9zZVwiXScpXG5cdCkge1xuXHRcdGVsPy5jbG9zZXN0KFwiZGlhbG9nXCIpPy5jbG9zZSgpO1xuXHR9XG59O1xuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZUNsaWNrIGFzIEV2ZW50TGlzdGVuZXIsIFFVSUNLX0VWRU5UKTtcblx0Y3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlcihoYW5kbGVNb2RhbCkub2JzZXJ2ZShcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5cdFx0e1xuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbXCJvcGVuXCJdLFxuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRcdHN1YnRyZWU6IHRydWUsXG5cdFx0fSxcblx0KTtcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFFVSUNLX0VWRU5ULCBhdHRyLCBvbiwgb25Mb2FkZWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZnVuY3Rpb24gaGFuZGxlSW5qZWN0KGV2ZW50OiBFdmVudCAmIHsgYW5pbWF0aW9uTmFtZT86IHN0cmluZyB9KSB7XG5cdGlmIChldmVudC5hbmltYXRpb25OYW1lICE9PSBzdHlsZXMuX2Vycm9yc3VtbWFyeSkgcmV0dXJuO1xuXHRjb25zdCBmaXJzdCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmZpcnN0RWxlbWVudENoaWxkO1xuXG5cdGlmIChmaXJzdCBpbnN0YW5jZW9mIEhUTUxIZWFkaW5nRWxlbWVudCkge1xuXHRcdGF0dHIoZmlyc3QsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcblx0XHRmaXJzdC5mb2N1cygpOyAvLyBBdXRvZm9jdXMgZmlyc3QgaGVhZGluZ1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uKGRvY3VtZW50LCBcImFuaW1hdGlvbmVuZFwiLCBoYW5kbGVJbmplY3QsIFFVSUNLX0VWRU5UKSk7XG4iLCJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5cbi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfRklSRUZPWCA9IElTX0JST1dTRVIgJiYgL2ZpcmVmb3gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfU0FGQVJJID0gSVNfQlJPV1NFUiAmJiAvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBTQUZFX0xBQkVMTEVEQlkgPSBgJHtJU19BTkRST0lEID8gXCJkYXRhXCIgOiBcImFyaWFcIn0tbGFiZWxsZWRieWA7XG52YXIgU0FGRV9NVUxUSVNFTEVDVEFCTEUgPSBgJHtJU19TQUZBUkkgPyBcImFyaWFcIiA6IFwiZGF0YVwifS1tdWx0aXNlbGVjdGFibGVgO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBGT0NVU19PVVRMSU5FID0gXCJvdXRsaW5lOiAxcHggZG90dGVkOyBvdXRsaW5lOiA1cHggYXV0byBIaWdobGlnaHQ7IG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvclwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBfYTI7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gKF9hMiA9IGVsLmdldEF0dHJpYnV0ZShuYW1lKSkgIT0gbnVsbCA/IF9hMiA6IG51bGw7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXR0YWNoU3R5bGUgPSAoZWxlbWVudCwgY3NzKSA9PiBlbGVtZW50LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gIC8vIFVubmFtZWQgc2xvdCBkb2VzIGF1dG9tYXRpY2FsbHkgcmVuZGVyIGFsbCB0b3AgZWxlbWVudCBub2Rlc1xuICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgY3NzKVxuKTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gIH1cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgKGRldGFpbCkgPT4gZWxlbWVudC5oYW5kbGVFdmVudCh7IHR5cGU6IFwibXV0YXRpb25cIiwgZGV0YWlsIH0pXG4gICAgKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIG9ic2VydmVycy5zZXQoZWxlbWVudCwgb2JzZXJ2ZXIpO1xuICB9XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBjcmVhdGVBcmlhTGl2ZSA9IChtb2RlKSA9PiB7XG4gIGNvbnN0IGxpdmUgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBsaXZlLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gIGF0dHIobGl2ZSwgXCJhcmlhLWxpdmVcIiwgbW9kZSk7XG4gIHJldHVybiBsaXZlO1xufTtcbmZ1bmN0aW9uIGF0dHJpYnV0ZVRleHRzKHRleHRzLCBwcm9wLCB2YWx1ZSkge1xuICBpZiAoIXByb3ApIHJldHVybiBPYmplY3Qua2V5cyh0ZXh0cykubWFwKChrZXkyKSA9PiBgZGF0YS1zci0ke2tleTJ9YCk7XG4gIGNvbnN0IGtleSA9IChwcm9wID09IG51bGwgPyB2b2lkIDAgOiBwcm9wLnN0YXJ0c1dpdGgoXCJkYXRhLXNyLVwiKSkgJiYgcHJvcC5zbGljZSg4KTtcbiAgaWYgKGtleSAmJiB2YWx1ZSAmJiB0ZXh0c1trZXldKSB0ZXh0c1trZXldID0gdmFsdWU7XG4gIHJldHVybiBbXTtcbn1cblxuLy8gdS1vcHRpb24udHNcbnZhciBESVNBQkxFRCA9IFwiZGlzYWJsZWRcIjtcbnZhciBTRUxFQ1RFRCA9IFwic2VsZWN0ZWRcIjtcbnZhciBVSFRNTE9wdGlvbkVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbRElTQUJMRUQsIFNFTEVDVEVEXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKFxuICAgICAgdGhpcyxcbiAgICAgIGAke0RJU1BMQVlfQkxPQ0t9Omhvc3QoOmZvY3VzKXske0ZPQ1VTX09VVExJTkV9fTpob3N0eyBjdXJzb3I6IHBvaW50ZXIgfWBcbiAgICApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICghSVNfSU9TKSB0aGlzLnRhYkluZGV4ID0gLTE7XG4gICAgaWYgKCFhdHRyKHRoaXMsIFwicm9sZVwiKSkgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJvcHRpb25cIik7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtZGlzYWJsZWRcIiwgYCR7dGhpcy5kaXNhYmxlZH1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1zZWxlY3RlZFwiLCBgJHt0aGlzLnNlbGVjdGVkfWApO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB3aGV0aGVyIHRoZSBvcHRpb24gaW4gdGhlIGxpc3QgYm94IGlzIHRoZSBkZWZhdWx0IGl0ZW0uICovXG4gIGdldCBkZWZhdWx0U2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXNbU0VMRUNURURdO1xuICB9XG4gIHNldCBkZWZhdWx0U2VsZWN0ZWQodmFsdWUpIHtcbiAgICB0aGlzW1NFTEVDVEVEXSA9IHZhbHVlO1xuICB9XG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBESVNBQkxFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBESVNBQkxFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyBhIHJlZmVyZW5jZSB0byB0aGUgZm9ybSB0aGF0IHRoZSBvYmplY3QgaXMgZW1iZWRkZWQgaW4uICovXG4gIGdldCBmb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJmb3JtXCIpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiBvcHRpb24gaW4gYSBsaXN0IGJveC4gKi9cbiAgZ2V0IGluZGV4KCkge1xuICAgIHZhciBfYTI7XG4gICAgY29uc3Qgb3B0aW9ucyA9IChfYTIgPSB0aGlzLmNsb3Nlc3QoXCJ1LWRhdGFsaXN0XCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidS1vcHRpb25cIik7XG4gICAgcmV0dXJuIEFycmF5LmZyb20ob3B0aW9ucyB8fCBbdGhpc10pLmluZGV4T2YodGhpcyk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIGEgdmFsdWUgdGhhdCB5b3UgY2FuIHVzZSB0byBpbXBsZW1lbnQgeW91ciBvd24gbGFiZWwgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIG9iamVjdC4gKi9cbiAgZ2V0IGxhYmVsKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIFwibGFiZWxcIikgfHwgdGhpcy50ZXh0O1xuICB9XG4gIHNldCBsYWJlbCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJsYWJlbFwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIFNFTEVDVEVEKSAhPT0gbnVsbDtcbiAgfVxuICBzZXQgc2VsZWN0ZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFNFTEVDVEVELCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIHRleHQgc3RyaW5nIHNwZWNpZmllZCBieSB0aGUgb3B0aW9uIHRhZy4gKi9cbiAgZ2V0IHRleHQoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSB0aGlzLnRleHRDb250ZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKSkgfHwgXCJcIjtcbiAgfVxuICBzZXQgdGV4dCh0ZXh0KSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHRleHQ7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSB2YWx1ZSB3aGljaCBpcyByZXR1cm5lZCB0byB0aGUgc2VydmVyIHdoZW4gdGhlIGZvcm0gY29udHJvbCBpcyBzdWJtaXR0ZWQuICovXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBcInZhbHVlXCIpIHx8IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1vcHRpb25cIiwgVUhUTUxPcHRpb25FbGVtZW50KTtcblxuLy8gdS1kYXRhbGlzdC50c1xudmFyIElTX1BSRVNTID0gZmFsc2U7XG52YXIgTElWRV9USU1FUjtcbnZhciBMSVZFX1NSX0ZJWCA9IDA7XG52YXIgTElWRTtcbnZhciBJU19TQUZBUklfTUFDID0gSVNfU0FGQVJJICYmICFJU19JT1M7XG52YXIgRVZFTlRTID0gXCJjbGljayxmb2N1c291dCxpbnB1dCxrZXlkb3duLG1vdXNlZG93bixtb3VzZXVwXCI7XG52YXIgVEVYVFMgPSB7XG4gIHNpbmd1bGFyOiBcIiVkIGhpdFwiLFxuICBwbHVyYWw6IFwiJWQgaGl0c1wiXG59O1xudmFyIFVIVE1MRGF0YUxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIFVzaW5nIHVuZGVyc2NvcmUgaW5zdGVhZCBvZiBwcml2YXRlIGZpZWxkcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICAvLyBfYW5ub3VuY2VDb3VudCA9IDA7XG4gICAgLy8gX2Fubm91bmNlVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVtYmVyID0gMDtcbiAgICB0aGlzLl9ibHVyVGltZXIgPSAwO1xuICAgIHRoaXMuX2lucHV0ID0gbnVsbDtcbiAgICB0aGlzLl9yb290ID0gbnVsbDtcbiAgICB0aGlzLl92YWx1ZSA9IFwiXCI7XG4gICAgLy8gU3RvcmUgc2FuaXRpemVkIHZhbHVlIHRvIHNwZWVkIHVwIG9wdGlvbiBmaWx0ZXJpbmdcbiAgICB0aGlzLl90ZXh0cyA9IF9fc3ByZWFkVmFsdWVzKHt9LCBURVhUUyk7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgYCR7RElTUExBWV9CTE9DS306OnNsb3R0ZWQodS1vcHRpb25bZGlzYWJsZWRdKSB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudCB9YFxuICAgICAgLy8gSGlkZSBkaXNhYmxlZCBvcHRpb25zXG4gICAgKTtcbiAgfVxuICAvLyBTcGVlZCB1cCB0cmFuc2xhdGVkIHRleHRzXG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJpZFwiLCAuLi5hdHRyaWJ1dGVUZXh0cyhURVhUUyldO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuaGlkZGVuID0gdHJ1ZTtcbiAgICB0aGlzLl9yb290ID0gZ2V0Um9vdCh0aGlzKTtcbiAgICBpZiAoIUxJVkUpIExJVkUgPSBjcmVhdGVBcmlhTGl2ZShcImFzc2VydGl2ZVwiKTtcbiAgICBpZiAoIUxJVkUuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoTElWRSk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJsaXN0Ym94XCIpO1xuICAgIGF0dHIodGhpcywgXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuICAgIG9uKHRoaXMuX3Jvb3QsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBvbih0aGlzLl9yb290LCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgb2ZmKHRoaXMuX3Jvb3QgfHwgdGhpcywgXCJmb2N1c1wiLCB0aGlzLCB0cnVlKTtcbiAgICBvZmYodGhpcy5fcm9vdCB8fCB0aGlzLCBcImZvY3VzaW5cIiwgdGhpcyk7XG4gICAgZGlzY29ubmVjdElucHV0KHRoaXMpO1xuICAgIHRoaXMuX3Jvb3QgPSBudWxsO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBfcHJldiwgbmV4dCkge1xuICAgIHZhciBfYTI7XG4gICAgYXR0cmlidXRlVGV4dHModGhpcy5fdGV4dHMsIHByb3AsIG5leHQpO1xuICAgIGNvbnN0IGlucHV0cyA9IChfYTIgPSB0aGlzLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnF1ZXJ5U2VsZWN0b3JBbGwoYGlucHV0W2xpc3Q9XCIke3RoaXMuaWR9XCJdYCk7XG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dHMgfHwgW10pIHNldHVwSW5wdXQodGhpcywgaW5wdXQpO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgeyB0eXBlIH0gPSBldmVudDtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmICh0eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImZvY3VzXCIgfHwgdHlwZSA9PT0gXCJmb2N1c2luXCIpIG9uRm9jdXNJbih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiZm9jdXNvdXRcIikgb25Gb2N1c091dCh0aGlzKTtcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIG9uS2V5RG93bih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwibXV0YXRpb25cIiB8fCB0eXBlID09PSBcImlucHV0XCIpIHNldHVwT3B0aW9ucyh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiKSBJU19QUkVTUyA9IGZhbHNlO1xuICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiKSBJU19QUkVTUyA9IHRoaXMuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgfVxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcInUtb3B0aW9uXCIpO1xuICB9XG59O1xudmFyIG9uRm9jdXNJbiA9IChzZWxmLCB7IHRhcmdldCB9KSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IGlzSW5wdXQgPSBzZWxmLl9pbnB1dCA9PT0gdGFyZ2V0O1xuICBjb25zdCBpc0luc2lkZSA9IGlzSW5wdXQgfHwgc2VsZi5jb250YWlucyh0YXJnZXQpO1xuICBpZiAoaXNJbnNpZGUpIHJldHVybiBjbGVhclRpbWVvdXQoc2VsZi5fYmx1clRpbWVyKTtcbiAgaWYgKCFpc0lucHV0ICYmIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgYXR0cih0YXJnZXQsIFwibGlzdFwiKSA9PT0gc2VsZi5pZCkge1xuICAgIGlmIChzZWxmLl9pbnB1dCkgZGlzY29ubmVjdElucHV0KHNlbGYpO1xuICAgIHNlbGYuX2lucHV0ID0gdGFyZ2V0O1xuICAgIGF0dHIoc2VsZiwgU0FGRV9MQUJFTExFREJZLCB1c2VJZCgoX2EyID0gc2VsZi5faW5wdXQubGFiZWxzKSA9PSBudWxsID8gdm9pZCAwIDogX2EyWzBdKSk7XG4gICAgb24oc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIoc2VsZiwge1xuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbXCJ2YWx1ZVwiXSxcbiAgICAgIC8vIExpc3RlbiBmb3IgdmFsdWUgY2hhbmdlcyB0byBzaG93IHUtb3B0aW9uc1xuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcbiAgICBzZXRFeHBhbmRlZChzZWxmLCB0cnVlKTtcbiAgfVxufTtcbnZhciBvbkZvY3VzT3V0ID0gKHNlbGYpID0+IHtcbiAgaWYgKCFJU19QUkVTUykgc2VsZi5fYmx1clRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBkaXNjb25uZWN0SW5wdXQoc2VsZikpO1xufTtcbnZhciBvbkNsaWNrID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgdmFyIF9hMiwgX2IsIF9jLCBfZCwgX2U7XG4gIGNvbnN0IGlzU2luZ2xlID0gYXR0cihzZWxmLCBTQUZFX01VTFRJU0VMRUNUQUJMRSkgIT09IFwidHJ1ZVwiO1xuICBjb25zdCBvcHRpb24gPSBbLi4uc2VsZi5vcHRpb25zXS5maW5kKChvcHQpID0+IG9wdC5jb250YWlucyh0YXJnZXQpKTtcbiAgaWYgKHNlbGYuX2lucHV0ID09PSB0YXJnZXQpIHtcbiAgICBzZXRFeHBhbmRlZChzZWxmLCB0cnVlKTtcbiAgfSBlbHNlIGlmIChvcHRpb24gJiYgaXNJbnRlcmFjdGl2ZU9wdGlvbihvcHRpb24pKSB7XG4gICAgZm9yIChjb25zdCBvcHQgb2Ygc2VsZi5vcHRpb25zKSB7XG4gICAgICBpZiAob3B0ID09PSBvcHRpb24pIG9wdC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICBlbHNlIGlmIChpc1NpbmdsZSkgb3B0LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgfVxuICAgIChfYiA9IChfYTIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsXG4gICAgICBcInZhbHVlXCJcbiAgICApKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoc2VsZi5faW5wdXQsIG9wdGlvbi52YWx1ZSk7XG4gICAgaWYgKGlzU2luZ2xlKSB7XG4gICAgICAoX2MgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jLmZvY3VzKCk7XG4gICAgICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gICAgfVxuICAgIChfZCA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2QuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBFdmVudChcImlucHV0XCIsIHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUgfSlcbiAgICApO1xuICAgIChfZSA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2UuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJjaGFuZ2VcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgfVxufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGlmIChldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LnNoaWZ0S2V5KSByZXR1cm47XG4gIGlmIChldmVudC5rZXkgIT09IFwiRXNjYXBlXCIpIHNldEV4cGFuZGVkKHNlbGYsIHRydWUpO1xuICBjb25zdCB7IGtleSB9ID0gZXZlbnQ7XG4gIGNvbnN0IGFjdGl2ZSA9IChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQ7XG4gIGNvbnN0IG9wdGlvbnMgPSBnZXRWaXNpYmxlT3B0aW9ucyhzZWxmKTtcbiAgY29uc3QgaW5kZXggPSBvcHRpb25zLmluZGV4T2YoYWN0aXZlKTtcbiAgbGV0IG5leHQgPSAtMTtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIikgbmV4dCA9IChpbmRleCArIDEpICUgb3B0aW9ucy5sZW5ndGg7XG4gIGlmIChrZXkgPT09IFwiQXJyb3dVcFwiKSBuZXh0ID0gKH5pbmRleCA/IGluZGV4IDogb3B0aW9ucy5sZW5ndGgpIC0gMTtcbiAgaWYgKH5pbmRleCkge1xuICAgIGlmIChrZXkgPT09IFwiSG9tZVwiIHx8IGtleSA9PT0gXCJQYWdlVXBcIikgbmV4dCA9IDA7XG4gICAgaWYgKGtleSA9PT0gXCJFbmRcIiB8fCBrZXkgPT09IFwiUGFnZURvd25cIikgbmV4dCA9IG9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICBpZiAoa2V5ID09PSBcIkVudGVyXCIpIHtcbiAgICAgIG9wdGlvbnNbaW5kZXhdLmNsaWNrKCk7XG4gICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbiAgaWYgKG9wdGlvbnNbbmV4dF0pIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIG9wdGlvbi50YWJJbmRleCA9IC0xO1xuICBpZiAob3B0aW9uc1tuZXh0XSkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgKF9iID0gb3B0aW9uc1tuZXh0XSB8fCBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmZvY3VzKCk7XG4gIGlmIChrZXkgPT09IFwiRXNjYXBlXCIpIHNldEV4cGFuZGVkKHNlbGYsIGZhbHNlKTtcbn07XG52YXIgc2V0RXhwYW5kZWQgPSAoc2VsZiwgb3BlbikgPT4ge1xuICBzZWxmLmhpZGRlbiA9ICFvcGVuO1xuICBpZiAoc2VsZi5wb3BvdmVyKSBzZWxmLnRvZ2dsZVBvcG92ZXIob3Blbik7XG4gIGlmIChzZWxmLl9pbnB1dCkgc2V0dXBJbnB1dChzZWxmLCBzZWxmLl9pbnB1dCwgb3Blbik7XG4gIGlmIChvcGVuKSBzZXR1cE9wdGlvbnMoc2VsZik7XG59O1xudmFyIGRpc2Nvbm5lY3RJbnB1dCA9IChzZWxmKSA9PiB7XG4gIG9mZihzZWxmLl9yb290IHx8IHNlbGYsIEVWRU5UUywgc2VsZik7XG4gIG11dGF0aW9uT2JzZXJ2ZXIoc2VsZiwgZmFsc2UpO1xuICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gIHNlbGYuX2lucHV0ID0gbnVsbDtcbn07XG52YXIgZ2V0VmlzaWJsZU9wdGlvbnMgPSAoc2VsZikgPT4gWy4uLnNlbGYub3B0aW9uc10uZmlsdGVyKFxuICAob3B0KSA9PiAhb3B0LmRpc2FibGVkICYmIG9wdC5vZmZzZXRXaWR0aCAmJiBvcHQub2Zmc2V0SGVpZ2h0XG4gIC8vIENoZWNrcyBkaXNhYmxlZCBvciB2aXNpYmlsaXR5IChzaW5jZSBoaWRkZW4gYXR0cmlidXRlIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBkaXNwbGF5OiBibG9jaylcbik7XG52YXIgaXNJbnRlcmFjdGl2ZU9wdGlvbiA9IChvcHRpb24pID0+IG9wdGlvbiBpbnN0YW5jZW9mIEhUTUxPcHRpb25FbGVtZW50IHx8IG9wdGlvbi5nZXRBdHRyaWJ1dGUoXCJyb2xlXCIpID09PSBcIm9wdGlvblwiO1xudmFyIHNldHVwSW5wdXQgPSAoc2VsZiwgaW5wdXQsIG9wZW4gPSBmYWxzZSkgPT4ge1xuICBhdHRyKGlucHV0LCBcInBvcG92ZXJ0YXJnZXRcIiwgdXNlSWQoc2VsZikpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtYXV0b2NvbXBsZXRlXCIsIFwibGlzdFwiKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWNvbnRyb2xzXCIsIHVzZUlkKHNlbGYpKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWV4cGFuZGVkXCIsIGAke0lTX1NBRkFSSV9NQUMgfHwgb3Blbn1gKTtcbiAgYXR0cihpbnB1dCwgXCJhdXRvY29tcGxldGVcIiwgXCJvZmZcIik7XG4gIGF0dHIoaW5wdXQsIFwicm9sZVwiLCBcImNvbWJvYm94XCIpO1xufTtcbnZhciBzYW5pdGl6ZSA9IChzdHIpID0+IChzdHIgPT0gbnVsbCA/IHZvaWQgMCA6IHN0ci50b0xvd2VyQ2FzZSgpLnRyaW0oKSkgfHwgXCJcIjtcbnZhciBzZXR1cE9wdGlvbnMgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgdmFsdWUgPSBzYW5pdGl6ZSgoX2EyID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudmFsdWUpO1xuICBjb25zdCBoYXNDaGFuZ2UgPSAoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm11dGF0aW9uXCIgfHwgc2VsZi5fdmFsdWUgIT09IHZhbHVlO1xuICBpZiAoIWhhc0NoYW5nZSkgcmV0dXJuO1xuICBjb25zdCBoaWRkZW4gPSBzZWxmLmhpZGRlbjtcbiAgY29uc3QgaXNTaW5nbGUgPSBhdHRyKHNlbGYsIFNBRkVfTVVMVElTRUxFQ1RBQkxFKSAhPT0gXCJ0cnVlXCI7XG4gIGNvbnN0IGlzVHlwaW5nID0gZXZlbnQgaW5zdGFuY2VvZiBJbnB1dEV2ZW50ICYmICFpc0RhdGFsaXN0Q2xpY2soZXZlbnQpO1xuICBzZWxmLmhpZGRlbiA9IHRydWU7XG4gIHNlbGYuX3ZhbHVlID0gdmFsdWU7XG4gIGZvciAoY29uc3Qgb3B0IG9mIHNlbGYub3B0aW9ucykge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBbb3B0LnZhbHVlLCBvcHQubGFiZWwsIG9wdC50ZXh0XS5tYXAoc2FuaXRpemUpO1xuICAgIG9wdC5oaWRkZW4gPSAhY29udGVudC5zb21lKChzdHIpID0+IHN0ci5pbmNsdWRlcyh2YWx1ZSkpO1xuICAgIGlmIChpc1NpbmdsZSAmJiBpc1R5cGluZyAmJiBpc0ludGVyYWN0aXZlT3B0aW9uKG9wdCkpXG4gICAgICBvcHQuc2VsZWN0ZWQgPSBjb250ZW50LmluY2x1ZGVzKHZhbHVlKTtcbiAgfVxuICBzZWxmLmhpZGRlbiA9IGhpZGRlbjtcbiAgY29uc3QgdmlzaWJsZSA9IGdldFZpc2libGVPcHRpb25zKHNlbGYpO1xuICBjbGVhclRpbWVvdXQoTElWRV9USU1FUik7XG4gIExJVkVfVElNRVIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBjb25zdCB7IGxlbmd0aCB9ID0gdmlzaWJsZS5maWx0ZXIoaXNJbnRlcmFjdGl2ZU9wdGlvbik7XG4gICAgY29uc3QgbGl2ZVNyRml4ID0gKytMSVZFX1NSX0ZJWCAlIDIgPyBcIlxceEEwXCIgOiBcIlwiO1xuICAgIGNvbnN0IGNvdW50VGV4dCA9IGAke2Ake3NlbGYuX3RleHRzW2xlbmd0aCA9PT0gMSA/IFwic2luZ3VsYXJcIiA6IFwicGx1cmFsXCJdfWAucmVwbGFjZShcIiVkXCIsIGAke2xlbmd0aH1gKX1gO1xuICAgIGlmIChMSVZFKVxuICAgICAgTElWRS50ZXh0Q29udGVudCA9IGAkeyFsZW5ndGggJiYgc2VsZi5pbm5lclRleHQudHJpbSgpIHx8IGNvdW50VGV4dH0ke2xpdmVTckZpeH1gO1xuICB9LCAxZTMpO1xuICBpZiAoSVNfSU9TKVxuICAgIHZpc2libGUubWFwKChvcHQsIGluZGV4LCBsZW5ndGgpID0+IHtcbiAgICAgIG9wdC50aXRsZSA9IGAke2luZGV4ICsgMX0vJHtsZW5ndGh9YDtcbiAgICB9KTtcbn07XG5pZiAoSVNfQlJPV1NFUilcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcImxpc3RcIiwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBnZXRSb290KHRoaXMpLmdldEVsZW1lbnRCeUlkKGF0dHIodGhpcywgXCJsaXN0XCIpIHx8IFwiXCIpO1xuICAgIH1cbiAgfSk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWRhdGFsaXN0XCIsIFVIVE1MRGF0YUxpc3RFbGVtZW50KTtcbnZhciBTUExJVF9DSEFSID0gXCJcXHUyMDAxXCIucmVwZWF0KDEwMCk7XG52YXIgU1BMSVRfQVRUUiA9IElTX0ZJUkVGT1ggPyBcImxhYmVsXCIgOiBcInZhbHVlXCI7XG52YXIgRklSRUZPWF9PUFRJT05fQ0xJQ0sgPSBcImluc2VydFJlcGxhY2VtZW50VGV4dFwiO1xudmFyIGdldERhdGFsaXN0VmFsdWUgPSAoe1xuICB2YWx1ZVxufSkgPT4gdmFsdWUuc3BsaXQoU1BMSVRfQ0hBUilbMF07XG5mdW5jdGlvbiBpc0RhdGFsaXN0Q2xpY2soZXZlbnQpIHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgaXNDbGljayA9IGV2ZW50IGluc3RhbmNlb2YgRXZlbnQgJiYgZXZlbnQudHlwZSA9PT0gXCJpbnB1dFwiICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgKCFldmVudC5pbnB1dFR5cGUgfHwgZXZlbnQuaW5wdXRUeXBlID09PSBGSVJFRk9YX09QVElPTl9DTElDSyk7XG4gIGlmIChpc0NsaWNrKSB7XG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgY29uc3QgaWdub3JlZCA9IEFycmF5LmZyb20oKChfYTIgPSBldmVudC50YXJnZXQubGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5vcHRpb25zKSB8fCBbXSkuc29tZShcbiAgICAgIChvcHQpID0+IG9wdC52YWx1ZSA9PT0gdmFsdWUgJiYgIWlzSW50ZXJhY3RpdmVPcHRpb24ob3B0KVxuICAgICk7XG4gICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gdmFsdWUuc3BsaXQoU1BMSVRfQ0hBUilbaWdub3JlZCA/IDEgOiAwXTtcbiAgfVxuICByZXR1cm4gaXNDbGljaztcbn1cbmZ1bmN0aW9uIHN5bmNEYXRhbGlzdFN0YXRlKGlucHV0KSB7XG4gIHZhciBfYTI7XG4gIGZvciAoY29uc3Qgb3B0aW9uIG9mICgoX2EyID0gaW5wdXQubGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jaGlsZHJlbikgfHwgW10pXG4gICAgaWYgKG9wdGlvbiBpbnN0YW5jZW9mIEhUTUxPcHRpb25FbGVtZW50IHx8IG9wdGlvbiBpbnN0YW5jZW9mIFVIVE1MT3B0aW9uRWxlbWVudCkge1xuICAgICAgb3B0aW9uW1NQTElUX0FUVFJdID0gYCR7Z2V0RGF0YWxpc3RWYWx1ZShvcHRpb24pfSR7U1BMSVRfQ0hBUn0ke2lucHV0LnZhbHVlfWA7XG4gICAgfVxufVxuXG5leHBvcnQgeyBVSFRNTERhdGFMaXN0RWxlbWVudCwgZ2V0RGF0YWxpc3RWYWx1ZSwgaXNEYXRhbGlzdENsaWNrLCBzeW5jRGF0YWxpc3RTdGF0ZSB9O1xuIiwiaW1wb3J0IHsgVUhUTUxEYXRhTGlzdEVsZW1lbnQgfSBmcm9tIFwiQHUtZWxlbWVudHMvdS1kYXRhbGlzdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdFFVSUNLX0VWRU5ULFxuXHRhdHRyLFxuXHRpc0lucHV0TGlrZSxcblx0b24sXG5cdG9uTG9hZGVkLFxuXHRvbk11dGF0aW9uLFxuXHR1c2VJZCxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19GSUVMRCA9IHN0eWxlcy5maWVsZC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfUFJPUEVSVFlfT1ZFUiA9IFwiLS1tdGRzLXRleHQtY291bnQtb3ZlclwiO1xuY29uc3QgQ1NTX1BST1BFUlRZX1VOREVSID0gXCItLW10ZHMtdGV4dC1jb3VudC11bmRlclwiO1xuY29uc3QgQ1NTX1ZBTElEQVRJT05TID0gc3R5bGVzLnZhbGlkYXRpb24uc3BsaXQoXCIgXCIpO1xuY29uc3QgQ1NTX1ZBTElEQVRJT04gPSBDU1NfVkFMSURBVElPTlNbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKGZpZWxkczogSFRNTENvbGxlY3Rpb25PZjxFbGVtZW50Pikge1xuXHRmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcylcblx0XHRpZiAoZmllbGQuaXNDb25uZWN0ZWQpIHtcblx0XHRcdGNvbnN0IGxhYmVsczogSFRNTExhYmVsRWxlbWVudFtdID0gW107XG5cdFx0XHRjb25zdCBkZXNjczogc3RyaW5nW10gPSBbXTtcblx0XHRcdGxldCBpbnB1dDogSFRNTElucHV0RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXHRcdFx0bGV0IGRhdGFsaXN0OiBVSFRNTERhdGFMaXN0RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXHRcdFx0bGV0IHZhbGlkID0gdHJ1ZTtcblxuXHRcdFx0Zm9yIChjb25zdCBlbCBvZiBmaWVsZC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikpIHtcblx0XHRcdFx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTExhYmVsRWxlbWVudCkgbGFiZWxzLnB1c2goZWwpO1xuXHRcdFx0XHRlbHNlIGlmIChlbCBpbnN0YW5jZW9mIFVIVE1MRGF0YUxpc3RFbGVtZW50KSBkYXRhbGlzdCA9IGVsO1xuXHRcdFx0XHRlbHNlIGlmIChpc0lucHV0TGlrZShlbCkpIGlucHV0ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhDU1NfVkFMSURBVElPTikpIHtcblx0XHRcdFx0XHQvLyBNdXN0IGJlIGJlZm9yZSBpbnN0YW5jZW9mIEhUTUxQYXJhZ3JhcGhFbGVtZW50IHNpbmNlIHZhbGlkYXRpb24gY2FuIGFsc28gYmUgYSA8cD5cblx0XHRcdFx0XHR2YWxpZCA9XG5cdFx0XHRcdFx0XHRhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8XG5cdFx0XHRcdFx0XHQhZWwuY2xpZW50V2lkdGggfHxcblx0XHRcdFx0XHRcdCFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0ZGVzY3MudW5zaGlmdCh1c2VJZChlbCkpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgSFRNTFBhcmFncmFwaEVsZW1lbnQpIGRlc2NzLnB1c2godXNlSWQoZWwpKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlucHV0KSB7XG5cdFx0XHRcdGZvciAoY29uc3QgbGFiZWwgb2YgbGFiZWxzKSBsYWJlbC5odG1sRm9yID0gdXNlSWQoaW5wdXQpO1xuXHRcdFx0XHRyZW5kZXJEYXRhbGlzdChpbnB1dCwgZGF0YWxpc3QpO1xuXHRcdFx0XHRyZW5kZXJDb3VudGVyKGlucHV0KTtcblx0XHRcdFx0cmVuZGVyVGV4dGFyZWFTaXplKGlucHV0KTtcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIGRlc2NzLmpvaW4oXCIgXCIpIHx8IG51bGwpOyAvLyBSZW1vdmUgaWYgZW1wdHlcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWludmFsaWRcIiwgYCR7IXZhbGlkfWApO1xuXHRcdFx0fVxuXHRcdH1cbn1cblxuLy8gaU9TIGRvZXMgbm90IHN1cHBvcnQgZmllbGQtc2l6aW5nOiBjb250ZW50LCBzbyB3ZSBuZWVkIHRvIG1hbnVhbGx5IHJlc2l6ZVxuZnVuY3Rpb24gcmVuZGVyVGV4dGFyZWFTaXplKHRleHRhcmVhOiBFbGVtZW50KSB7XG5cdGlmICh0ZXh0YXJlYSBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcblx0XHR0ZXh0YXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tbXRkcy10ZXh0YXJlYS1oZWlnaHRcIiwgXCJhdXRvXCIpO1xuXHRcdHRleHRhcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuXHRcdFx0XCItLW10ZHMtdGV4dGFyZWEtaGVpZ2h0XCIsXG5cdFx0XHRgJHt0ZXh0YXJlYS5zY3JvbGxIZWlnaHR9cHhgLFxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyRGF0YWxpc3QoXG5cdGlucHV0OiBIVE1MSW5wdXRFbGVtZW50LFxuXHRsaXN0PzogVUhUTUxEYXRhTGlzdEVsZW1lbnQgfCBudWxsLFxuKSB7XG5cdGF0dHIoaW5wdXQsIFwibGlzdFwiLCBsaXN0ID8gdXNlSWQobGlzdCkgOiBudWxsKTtcblxuXHRpZiAoIWxpc3QpIHJldHVybjtcblx0aWYgKCFpbnB1dC5oYXNBdHRyaWJ1dGUoXCJwbGFjZWhvbGRlclwiKSkgYXR0cihpbnB1dCwgXCJwbGFjZWhvbGRlclwiLCBcIlwiKTsgLy8gTmVlZGVkIHRvIHJlbmRlciBkcm9wZG93biBjaGV2cm9uIHdoZW4gPGRhdGFsaXN0PiBpcyBwcmVzZW50XG5cblx0Ly8gU2V0dXAgdHJhbnNsYXRpb25zIGZyb20gQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzXG5cdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobGlzdCk7XG5cdGNvbnN0IHRhZ3MgPSBpbnB1dC5jbG9zZXN0KFwidS10YWdzXCIpO1xuXHRjb25zdCBpMTFuID0gKGtleTogc3RyaW5nKSA9PiBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGAtLW10ZHMtdGV4dC0ke2tleX1gKTtcblxuXHRhdHRyKGxpc3QsIFwiZGF0YS1zci1wbHVyYWxcIiwgaTExbihcImRhdGFsaXN0LXBsdXJhbFwiKSk7XG5cdGF0dHIobGlzdCwgXCJkYXRhLXNyLXNpbmd1bGFyXCIsIGkxMW4oXCJkYXRhbGlzdC1zaW5ndWxhclwiKSk7XG5cblx0aWYgKHRhZ3MpIHtcblx0XHRhdHRyKHRhZ3MsIFwiZGF0YS1zci1hZGRlZFwiLCBpMTFuKFwidGFncy1hZGRlZFwiKSk7XG5cdFx0YXR0cih0YWdzLCBcImRhdGEtc3ItZW1wdHlcIiwgaTExbihcInRhZ3MtZW1wdHlcIikpO1xuXHRcdGF0dHIodGFncywgXCJkYXRhLXNyLWZvdW5kXCIsIGkxMW4oXCJ0YWdzLWZvdW5kXCIpKTtcblx0XHRhdHRyKHRhZ3MsIFwiZGF0YS1zci1vZlwiLCBpMTFuKFwidGFncy1vZlwiKSk7XG5cdFx0YXR0cih0YWdzLCBcImRhdGEtc3ItcmVtb3ZlXCIsIGkxMW4oXCJ0YWdzLXJlbW92ZVwiKSk7XG5cdFx0YXR0cih0YWdzLCBcImRhdGEtc3ItcmVtb3ZlZFwiLCBpMTFuKFwidGFncy1yZW1vdmVkXCIpKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW5kZXJDb3VudGVyKGlucHV0OiBIVE1MSW5wdXRFbGVtZW50KSB7XG5cdGNvbnN0IGVsID0gaW5wdXQ/Lm5leHRFbGVtZW50U2libGluZztcblx0Y29uc3QgbGltaXQgPSBlbCAmJiBhdHRyKGVsLCBcImRhdGEtY291bnRcIik7XG5cblx0aWYgKGVsICYmIGxpbWl0KSB7XG5cdFx0Y29uc3QgcmVtYWluZGVyID0gTnVtYmVyKGxpbWl0KSAtIGlucHV0LnZhbHVlLmxlbmd0aDtcblx0XHRjb25zdCBuZXh0SW52YWxpZCA9IHJlbWFpbmRlciA8IDA7XG5cdFx0Y29uc3QgcHJldkludmFsaWQgPSBhdHRyKGVsLCBcImFyaWEtbGl2ZVwiKSA9PT0gXCJwb2xpdGVcIjtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsIHx8IGlucHV0KTtcblx0XHRjb25zdCBvdmVyID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShDU1NfUFJPUEVSVFlfT1ZFUik/LnNsaWNlKDEsIC0xKSB8fCBcIlwiOyAvLyBzbGljZSB0byB0cmltIHF1b3Rlc1xuXHRcdGNvbnN0IHVuZGVyID1cblx0XHRcdHN0eWxlLmdldFByb3BlcnR5VmFsdWUoQ1NTX1BST1BFUlRZX1VOREVSKT8uc2xpY2UoMSwgLTEpIHx8IFwiXCI7IC8vIHNsaWNlIHRvIHRyaW0gcXVvdGVzXG5cblx0XHRpZiAocHJldkludmFsaWQgIT09IG5leHRJbnZhbGlkKSB7XG5cdFx0XHRhdHRyKGVsLCBcImFyaWEtbGl2ZVwiLCBuZXh0SW52YWxpZCA/IFwicG9saXRlXCIgOiBcIm9mZlwiKTtcblx0XHRcdGZvciAoY29uc3QgY3NzIG9mIENTU19WQUxJREFUSU9OUykgZWwuY2xhc3NMaXN0LnRvZ2dsZShjc3MsIG5leHRJbnZhbGlkKTtcblx0XHR9XG5cdFx0ZWwudGV4dENvbnRlbnQgPSAobmV4dEludmFsaWQgPyBvdmVyIDogdW5kZXIpLnJlcGxhY2UoXG5cdFx0XHRcIiVkXCIsXG5cdFx0XHRgJHtNYXRoLmFicyhyZW1haW5kZXIpfWAsXG5cdFx0KTtcblx0fVxufVxuXG4vLyBVcGRhdGUgd2hlbiB0eXBpbmdcbmZ1bmN0aW9uIGhhbmRsZUlucHV0KHsgdGFyZ2V0IH06IEV2ZW50KSB7XG5cdGlmIChpc0lucHV0TGlrZSh0YXJnZXQpKSB7XG5cdFx0cmVuZGVyQ291bnRlcih0YXJnZXQpO1xuXHRcdHJlbmRlclRleHRhcmVhU2l6ZSh0YXJnZXQpO1xuXG5cdFx0Ly8gY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQ7XG5cdFx0Ly8gY29uc3QgbGlzdCA9IGlucHV0Lmxpc3Q7XG5cdFx0Ly8gaWYgKGxpc3QpIHtcblx0XHQvLyAgIGNvbnNvbGUubG9nKCdldHRlcnDDpScpO1xuXHRcdC8vICAgaWYgKGlzRGF0YWxpc3RDbGljayhldmVudCkpIHJldHVybjsgLy8gVXNlciBjbGlja2VkIG9wdGlvbiBlbGVtZW50XG5cdFx0Ly8gICBpZiAoYXR0cihsaXN0LCAnZGF0YS1maWx0ZXInKSA9PT0gJ2ZhbHNlJykgc3luY0RhdGFsaXN0U3RhdGUoaW5wdXQpOyAvLyBBbGxvdyBjdXN0b20gZmlsdGVyaW5nXG5cdFx0Ly8gfVxuXHR9XG59XG5cbi8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBzaG93aW5nIGRlZmF1bHQgdmFsaWRhdGlvbiBidWJibGVzXG5mdW5jdGlvbiBoYW5kbGVJbnZhbGlkKGV2ZW50OiBFdmVudCkge1xuXHRpZiAoKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKGAuJHtDU1NfRklFTER9YCkpXG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0ZJRUxELCBoYW5kbGVNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImlucHV0XCIsIGhhbmRsZUlucHV0LCBRVUlDS19FVkVOVCk7XG5cdG9uKGRvY3VtZW50LCBcImludmFsaWRcIiwgaGFuZGxlSW52YWxpZCwgdHJ1ZSk7IC8vIFVzZSBjYXB0dXJlIGFzIGludmFsaWQgZG9lcyBub2UgYnV0dGxlXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBpc0lucHV0TGlrZSwgb25Mb2FkZWQsIG9uTXV0YXRpb24sIHVzZUlkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19GSUVMRFNFVCA9IHN0eWxlcy5maWVsZHNldC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVkFMSURBVElPTiA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oZmllbGRzZXRzOiBIVE1MQ29sbGVjdGlvbk9mPEVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgZmllbGRzZXQgb2YgZmllbGRzZXRzKVxuXHRcdGlmIChmaWVsZHNldC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0Y29uc3QgaW5wdXRzOiBIVE1MSW5wdXRFbGVtZW50W10gPSBbXTtcblx0XHRcdGxldCB2YWxpZGF0aW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGVsIG9mIGZpZWxkc2V0LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSkge1xuXHRcdFx0XHRpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkgdmFsaWRhdGlvbklkID0gdXNlSWQoZWwpO1xuXHRcdFx0XHRlbHNlIGlmIChpc0lucHV0TGlrZShlbCkpIGlucHV0cy5wdXNoKGVsKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dHMpIHtcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIHZhbGlkYXRpb25JZCk7XG5cdFx0XHRcdGF0dHIoaW5wdXQsIFwiYXJpYS1pbnZhbGlkXCIsIGAkeyEhdmFsaWRhdGlvbklkfWApO1xuXHRcdFx0fVxuXHRcdH1cbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRFNFVCwgaGFuZGxlTXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBJU19CUk9XU0VSLCBRVUlDS19FVkVOVCwgb24sIG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbi8vIFNldHRpbmcgYXBwLWV4cGFuZGVkIGFzIENTUyBjdXN0b20gcHJvcGVydHkgb2YgY29uc3RydWN0ZWQgc3R5bGUgc2hlZXQgdG9cbi8vIGF2b2lkIGZsYXNoIG9mIHVuc3R5bGVkIGNvbnRlbnQgYW5kIHN0aWxsIGJlIE5leHQuanMgaHlkcmF0aW9uIGNvbXBhdGlibGVcbmNvbnN0IENTU19TSEVFVCA9IElTX0JST1dTRVIgPyBuZXcgQ1NTU3R5bGVTaGVldCgpIDogbnVsbDtcbmNvbnN0IENTU19BUFAgPSBzdHlsZXMuYXBwLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19OQVYgPSBgLiR7Q1NTX0FQUH0gPiBuYXYsIC4ke0NTU19BUFB9IG5hdjpoYXMoKyBtYWluKWA7XG5jb25zdCBDU1NfVE9HR0xFID0gJ1tkYXRhLWNvbW1hbmQ9XCJ0b2dnbGUtYXBwLWV4cGFuZGVkXCJdJztcbmNvbnN0IEtFWV9UT0dHTEUgPSBcIi0tbXRkc2MtYXBwLWV4cGFuZGVkXCI7XG5jb25zdCBNT0JJTEVfTkFWX0JSRUFLUE9JTlQgPSA5NjA7XG5cbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZUNsaWNrKGV2ZW50OiBFdmVudCkge1xuXHRpZiAoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkge1xuXHRcdGlmIChldmVudC50YXJnZXQuY2xvc2VzdChDU1NfVE9HR0xFKSkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gRW5zdXJlIGJ1dHRvbiBkb2VzIG5vdCBjYXVzZSBzdWJtaXQgZXZlbiB3aXRob3V0IGB0eXBlPVwiYnV0dG9uXCJgXG5cdFx0XHRpZiAoIWRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24pIHRvZ2dsZUV4cGFuZGVkKCk7XG5cdFx0XHRlbHNlIGRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24odG9nZ2xlRXhwYW5kZWQpO1xuXHRcdH1cblx0XHRpZiAoXG5cdFx0XHR3aW5kb3cuaW5uZXJXaWR0aCA8PSBNT0JJTEVfTkFWX0JSRUFLUE9JTlQgJiZcblx0XHRcdGV2ZW50LnRhcmdldC5tYXRjaGVzKENTU19OQVYpXG5cdFx0KSB7XG5cdFx0XHRjb25zb2xlLmxvZyhldmVudC50YXJnZXQpO1xuXHRcdH1cblx0fVxufVxuXG4vLyBUT0RPIEJldHRlciBoYW5kbGUgZm9yIHdoZW4gYXBwIGlzIG5vdCBpbiBET01cbmxldCBOQVY6IEhUTUxFbGVtZW50O1xubGV0IE1BSU46IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oYXBwczogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCBhcHAgb2YgYXBwcylcblx0XHRpZiAoYXBwLmlzQ29ubmVjdGVkKSB7XG5cdFx0XHROQVYgPSBhcHAucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oQ1NTX05BVikgYXMgSFRNTEVsZW1lbnQ7XG5cdFx0XHRNQUlOID0gYXBwLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFwibWFpblwiKSBhcyBIVE1MRWxlbWVudDtcblx0XHR9XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZUV4cGFuZGVkKHRvZ2dsZSA9IHRydWUpIHtcblx0Y29uc3QgcHJldiA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShLRVlfVE9HR0xFKSAhPT0gXCJmYWxzZVwiO1xuXHRjb25zdCBuZXh0ID0gdG9nZ2xlID8gIXByZXYgOiBwcmV2O1xuXHRDU1NfU0hFRVQ/LnJlcGxhY2VTeW5jKFxuXHRcdGA6cm9vdCB7ICR7S0VZX1RPR0dMRX06IHZhcigke0tFWV9UT0dHTEV9LS0ke25leHR9KSB9YCxcblx0KTtcblx0Ly8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7Q1NTX0FQUH0gYXNpZGVgKT8udG9nZ2xlQXR0cmlidXRlKFwiaGlkZGVuXCIpOyAvLyBKdXN0IGZvciB0ZXN0aW5nXG5cdHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShLRVlfVE9HR0xFLCBgJHtuZXh0fWApO1xufVxuXG4vLyBSdW4gaW5zdGFudGx5IHRvIGF2b2lkIGZsYXNoIG9mIHVuc3R5bGVkIGNvbnRlbnRcbi8vIFVzaW5nIGFkb3B0ZWRTdHlsZVNoZWV0cyB0byBhdm9pZCBOZXh0LmpzIGh5ZHJhdGlvbiBjb25mbGljdFxuaWYgKENTU19TSEVFVCkgZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzPy5wdXNoKENTU19TSEVFVCk7XG5pZiAoSVNfQlJPV1NFUikgdG9nZ2xlRXhwYW5kZWQoZmFsc2UpOyAvLyBTeW5jIFVJIHdpdGggc3RvcmVcblxubGV0IE5BVl9IID0gMDtcbmxldCBOQVZfWSA9IDA7XG5sZXQgT0ZGU0VUX1kgPSAwOyAvLyBVc2VkIHRvIGZpZ3VyZSBtaW4gdG9wIG9mIHRoZSBzaWRlYmFyXG5sZXQgU0NST0xMX1VQOiBib29sZWFuO1xubGV0IFNUSUNLX0RJUiA9IDA7IC8vIC0xID0gc3RpY2sgdG9wLCAwID0gcmVsYXRpdmUsIDEgPSBzdGljayBib3R0b21cbmxldCBXSU5fSCA9IDA7XG5sZXQgV0lOX1kgPSAwO1xubGV0IE5BVl9MVF9XSU4gPSBmYWxzZTsgLy8gVXNlZCB0byBmaWd1cmUgaWYgbmF2IGlzIGxhcmdlciB0aGFuIHZpZXdwb3J0XG5jb25zdCBLRVlfTkFWX0FMSUdOID0gXCItLW10ZHNjLWFwcC1uYXYtYWxpZ25cIjtcbmNvbnN0IEtFWV9OQVZfQk9UVE9NID0gXCItLW10ZHNjLWFwcC1uYXYtYm90dG9tXCI7XG5jb25zdCBLRVlfTkFWX1BPUyA9IFwiLS1tdGRzYy1hcHAtbmF2LXBvc2l0aW9uXCI7XG5jb25zdCBLRVlfTkFWX1RPUCA9IFwiLS1tdGRzYy1hcHAtbmF2LXRvcFwiO1xuXG5mdW5jdGlvbiBoYW5kbGVTY3JvbGwoKSB7XG5cdGlmICghTkFWPy5pc0Nvbm5lY3RlZCkgcmV0dXJuO1xuXHRjb25zdCBORVhUX1kgPSB3aW5kb3cuc2Nyb2xsWTtcblx0Y29uc3QgTkVYVF9VUCA9IE5FWFRfWSA8IFdJTl9ZO1xuXHRXSU5fWSA9IE5FWFRfWTtcblxuXHQvLyBPbmx5IGNhbGN1bGF0ZSBpZiBzY3JvbGwgZGlyZWN0aW9uIGhhcyBjaGFuZ2VkXG5cdGlmIChORVhUX1VQICE9PSBTQ1JPTExfVVApIHtcblx0XHROQVZfSCA9IE5BVi5vZmZzZXRIZWlnaHQ7XG5cdFx0TkFWX0xUX1dJTiA9IE5BVi5vZmZzZXRIZWlnaHQgPD0gd2luZG93LmlubmVySGVpZ2h0O1xuXHRcdE5BVl9ZID0gTkFWLm9mZnNldFRvcDtcblx0XHRPRkZTRVRfWSA9IE1BSU4ub2Zmc2V0VG9wO1xuXHRcdFNDUk9MTF9VUCA9IE5FWFRfVVA7XG5cdFx0V0lOX0ggPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdH1cblxuXHRpZiAoU1RJQ0tfRElSID09PSAtMSAmJiBOQVZfTFRfV0lOKSByZXR1cm47IC8vIEFsbHdheXMgc3RpY2t5IHdoZW4gc2lkZWJhciBpcyBzbWFsbGVyIHRoYW4gdmlld3BvcnRcblx0aWYgKFNUSUNLX0RJUiAhPT0gLTEgJiYgKE5BVl9MVF9XSU4gfHwgKFNDUk9MTF9VUCAmJiBXSU5fWSA8PSBOQVZfWSkpKSB7XG5cdFx0Ly8gTm90IHN0aWNraW5nIHRvIHRvcCBhbmQgc2Nyb2xsaW5nIHVwIG9yIHNpZGViYXIgaXMgc21hbGxlciB0aGFuIHZpZXdwb3J0XG5cdFx0TkFWLnN0eWxlLnNldFByb3BlcnR5KEtFWV9OQVZfUE9TLCBcInN0aWNreVwiKTtcblx0XHROQVYuc3R5bGUuc2V0UHJvcGVydHkoS0VZX05BVl9UT1AsIFwiMHB4XCIpO1xuXHRcdE5BVi5zdHlsZS5yZW1vdmVQcm9wZXJ0eShLRVlfTkFWX0JPVFRPTSk7XG5cdFx0TkFWLnN0eWxlLnNldFByb3BlcnR5KEtFWV9OQVZfQUxJR04sIFwic3RhcnRcIik7XG5cdFx0U1RJQ0tfRElSID0gLTE7XG5cdFx0Ly8gY29uc29sZS5sb2coXCJhXCIpO1xuXHR9IGVsc2UgaWYgKFNUSUNLX0RJUiA9PT0gLTEgJiYgIVNDUk9MTF9VUCkge1xuXHRcdC8vIFN0aWNraW5nIHRvIHRvcCBhbmQgc2Nyb2xsaW5nIGRvd25cblx0XHROQVYuc3R5bGUuc2V0UHJvcGVydHkoS0VZX05BVl9QT1MsIFwicmVsYXRpdmVcIik7XG5cdFx0TkFWLnN0eWxlLnNldFByb3BlcnR5KEtFWV9OQVZfVE9QLCBgJHtNYXRoLm1heCgwLCBXSU5fWSAtIE9GRlNFVF9ZKX1weGApO1xuXHRcdE5BVi5zdHlsZS5yZW1vdmVQcm9wZXJ0eShLRVlfTkFWX0JPVFRPTSk7XG5cdFx0TkFWLnN0eWxlLnNldFByb3BlcnR5KEtFWV9OQVZfQUxJR04sIFwic3RhcnRcIik7XG5cdFx0U1RJQ0tfRElSID0gMDtcblx0XHQvLyBjb25zb2xlLmxvZyhcImJcIik7XG5cdH0gZWxzZSBpZiAoU1RJQ0tfRElSICE9PSAxICYmICFTQ1JPTExfVVAgJiYgV0lOX1kgKyBXSU5fSCA+PSBOQVZfWSArIE5BVl9IKSB7XG5cdFx0Ly8gTm90IHN0aWNraW5nIHRvIGJvdHRvbSBhbmQgc2Nyb2xsaW5nIGRvd25cblx0XHROQVYuc3R5bGUuc2V0UHJvcGVydHkoS0VZX05BVl9QT1MsIFwic3RpY2t5XCIpO1xuXHRcdE5BVi5zdHlsZS5yZW1vdmVQcm9wZXJ0eShLRVlfTkFWX1RPUCk7XG5cdFx0TkFWLnN0eWxlLnNldFByb3BlcnR5KEtFWV9OQVZfQk9UVE9NLCBcIjBweFwiKTtcblx0XHROQVYuc3R5bGUuc2V0UHJvcGVydHkoS0VZX05BVl9BTElHTiwgXCJlbmRcIik7XG5cdFx0U1RJQ0tfRElSID0gMTtcblx0XHQvLyBjb25zb2xlLmxvZyhcImNcIik7XG5cdH0gZWxzZSBpZiAoU1RJQ0tfRElSID09PSAxICYmIFNDUk9MTF9VUCkge1xuXHRcdE5BVi5zdHlsZS5zZXRQcm9wZXJ0eShLRVlfTkFWX1BPUywgXCJyZWxhdGl2ZVwiKTtcblx0XHROQVYuc3R5bGUuc2V0UHJvcGVydHkoXG5cdFx0XHRLRVlfTkFWX1RPUCxcblx0XHRcdGAke01hdGgubWluKE5BVl9ZIC0gT0ZGU0VUX1ksIFdJTl9ZICsgV0lOX0ggLSBOQVZfSCAtIE9GRlNFVF9ZKX1weGAsXG5cdFx0KTtcblx0XHROQVYuc3R5bGUucmVtb3ZlUHJvcGVydHkoS0VZX05BVl9CT1RUT00pO1xuXHRcdE5BVi5zdHlsZS5zZXRQcm9wZXJ0eShLRVlfTkFWX0FMSUdOLCBcInN0YXJ0XCIpO1xuXHRcdFNUSUNLX0RJUiA9IDA7XG5cdFx0Ly8gY29uc29sZS5sb2coXCJkXCIpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19BUFAsIGhhbmRsZU11dGF0aW9uKTtcblx0b24od2luZG93LCBcInNjcm9sbFwiLCBoYW5kbGVTY3JvbGwsIFFVSUNLX0VWRU5UKTtcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlVG9nZ2xlQ2xpY2spO1xufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0xPR08gPSBzdHlsZXMubG9nby5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKFtsb2dvXTogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0aWYgKGxvZ28/LmlzQ29ubmVjdGVkICYmIGxvZ28/LmZpcnN0RWxlbWVudENoaWxkIGluc3RhbmNlb2YgU1ZHU1ZHRWxlbWVudCkge1xuXHRcdGZvciAoY29uc3QgaWNvbiBvZiBkb2N1bWVudC5oZWFkLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaW5rW3JlbH49J2ljb24nXVwiKSlcblx0XHRcdGljb24ucmVtb3ZlKCk7XG5cblx0XHRjb25zdCBzdmcgPSBsb2dvLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdGNvbnN0IGlzRG90ID0gbG9nbz8uaGFzQXR0cmlidXRlKFwiZGF0YS1lbnZcIik7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzdmcpO1xuXHRcdGNvbnN0IHRleHQgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sb3JcIik7XG5cdFx0Y29uc3QgYmFjayA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCItLW10ZHMtbG9nby1jb2xvclwiKTtcblxuXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoXG5cdFx0XHRPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpLCB7XG5cdFx0XHRcdGhyZWY6IGBkYXRhOmltYWdlL3N2Zyt4bWwsJHtlbmNvZGVVUklDb21wb25lbnQoYDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNTUgNTUnPjxyZWN0IGZpbGw9JyR7aXNEb3QgPyBcIm5vbmVcIiA6IGJhY2t9JyB3aWR0aD0nNTEnIGhlaWdodD0nNTEnIHg9JzInIHk9JzInIHN0cm9rZT0nJHt0ZXh0fScgc3Ryb2tlLWRhc2hhcnJheT0nMC4wOSA2LjM4JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1vcGFjaXR5PScke2lzRG90ID8gMC42IDogMH0nIHN0cm9rZS13aWR0aD0nMi4zJyByeD0nMjUuNScvPjxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg3LjUgNy41KVwiPiR7c3ZnLm91dGVySFRNTC5yZXBsYWNlKC8oZmlsbHx3aWR0aHxoZWlnaHR8eG1sbnMpPVxcUysvZ2ksIFwiXCIpLnJlcGxhY2UoXCI8c3ZnXCIsIGA8c3ZnIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIGZpbGw9XCIke3RleHR9XCJgKX08L2c+PC9zdmc+YCl9YCxcblx0XHRcdFx0cmVsOiBcImljb25cIixcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19MT0dPLCBoYW5kbGVNdXRhdGlvbikpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFFVSUNLX0VWRU5ULCBhbmNob3JQb3NpdGlvbiwgYXR0ciwgb24sIG9uTG9hZGVkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19QT1BPVkVSID0gc3R5bGVzLnBvcG92ZXIuc3BsaXQoXCIgXCIpWzBdO1xubGV0IE9QRU5fUE9QT1ZFUlMgPSAwOyAvLyBTcGVlZCB1cCBieSBvbmx5IGNoZWNraW5nIGNsaWNrcyBpZiB3ZSBoYXZlIG9wZW4gcG9wb3ZlcnNcblxuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlKHsgdGFyZ2V0OiBlbCwgbmV3U3RhdGUgfTogRXZlbnQgJiB7IG5ld1N0YXRlPzogc3RyaW5nIH0pIHtcblx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19QT1BPVkVSKSkge1xuXHRcdGNvbnN0IGFuY2hvciA9IChlbC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QpPy5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pihcblx0XHRcdGBbcG9wb3ZlcnRhcmdldD1cIiR7ZWwuaWR9XCJdYCxcblx0XHQpO1xuXG5cdFx0aWYgKG5ld1N0YXRlID09PSBcImNsb3NlZFwiKSB7XG5cdFx0XHRPUEVOX1BPUE9WRVJTIC09IDE7XG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgZmFsc2UpO1xuXHRcdH0gZWxzZSBpZiAoYW5jaG9yKSB7XG5cdFx0XHRPUEVOX1BPUE9WRVJTICs9IDE7XG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgYW5jaG9yLCBhdHRyKGVsLCBcImRhdGEtcG9zaXRpb25cIikgfHwgXCJib3R0b21cIik7XG5cdFx0fVxuXHR9XG59XG5cbi8vIFBvbHlmaWxsIHBvcG92ZXJ0YXJnZXQgZm9yIDxhPiAobm90IHN1cHBvcnRlZCBieSBuYXRpdmUpXG4vLyBhbmQgYXV0b21hdGljYWxseSBhc3N1bWUgcG9wb3ZlcnRhcmdldCBpcyB0aGUgY2xvc2VzdCBwYXJlbnQgcG9wb3ZlclxuLy8gYnV0IHJlc3BlY3QgdGhlIHBvcG92ZXJ0YXJnZXQgYW5kIHBvcG92ZXJ0YXJnZXRhY3Rpb24gYXR0cmlidXRlXG5mdW5jdGlvbiBoYW5kbGVMaW5rQ2xpY2soeyB0YXJnZXQgfTogRXZlbnQpIHtcblx0Y29uc3QgY2xvc2UgPVxuXHRcdE9QRU5fUE9QT1ZFUlMgJiYgKHRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKFwiYSxbcG9wb3ZlcnRhcmdldGFjdGlvbl1cIik7XG5cblx0aWYgKGNsb3NlKSB7XG5cdFx0Y29uc3QgYWN0aW9uID0gYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0YWN0aW9uXCIpIHx8IFwidG9nZ2xlXCI7XG5cdFx0Y29uc3Qgb3BlbiA9IGFjdGlvbiA9PT0gXCJzaG93XCIgfHwgKGFjdGlvbiA9PT0gXCJoaWRlXCIgPyBmYWxzZSA6IHVuZGVmaW5lZCk7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0XCIpIHx8IFwiXCIpO1xuXHRcdGNvbnN0IHBvcG92ZXIgPSAodGFyZ2V0IHx8IGNsb3NlKS5jbG9zZXN0PEhUTUxFbGVtZW50PihgLiR7Q1NTX1BPUE9WRVJ9YCk7XG5cblx0XHRpZiAocG9wb3Zlcj8udG9nZ2xlUG9wb3ZlcikgcG9wb3Zlci50b2dnbGVQb3BvdmVyKG9wZW4pO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwiYmVmb3JldG9nZ2xlXCIsIGhhbmRsZVRvZ2dsZSwgUVVJQ0tfRVZFTlQpOyAvLyBVc2UgY2FwdHVyZSBzaW5jZSB0b2dnbGUgZG9lcyBub3QgYnViYmxlXG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZUxpbmtDbGljayk7IC8vIEFsbG93IGA8YT5gIHRvIHVzZSBgcG9wb3ZlcnRhcmdldGAgYXMgd2VsbFxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1RBQkxFID0gc3R5bGVzLnRhYmxlLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24odGFibGVzOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxUYWJsZUVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgdGFibGUgb2YgdGFibGVzKSB7XG5cdFx0Y29uc3QgdGhzOiBzdHJpbmdbXSA9IFtdOyAvLyBBZGQgZGF0YS10aD1cIlwiIHRvIGVhY2ggY2VsbCB0byBzdXBwb3J0IGRhdGEtbW9iaWxlIGRlc2lnbnNcblxuXHRcdGF0dHIodGFibGUsIFwicm9sZVwiLCBcInRhYmxlXCIpOyAvLyBBZGQgaGVscGluZyByb2xlPVwiXCIgdG8gZW5zdXJlIHNjcmVlbiByZWFkZXJzIHVuZGVyc3RhbmQgdGhlIHRhYmxlIHJlZ2FyZGxlc3Mgb2YgQ1NTIGRpc3BsYXlcblx0XHRpZiAodGFibGUuY2FwdGlvbikgYXR0cih0YWJsZS5jYXB0aW9uLCBcInJvbGVcIiwgXCJjYXB0aW9uXCIpO1xuXHRcdGZvciAoY29uc3QgZ3JvdXAgb2YgW3RhYmxlLnRIZWFkLCB0YWJsZS50Rm9vdCwgLi4udGFibGUudEJvZGllc10pXG5cdFx0XHRpZiAoZ3JvdXApIHtcblx0XHRcdFx0YXR0cihncm91cCwgXCJyb2xlXCIsIFwicm93Z3JvdXBcIik7XG5cdFx0XHRcdGNvbnN0IGlzVGJvZHkgPSBncm91cC5ub2RlTmFtZSA9PT0gXCJUQk9EWVwiO1xuXG5cdFx0XHRcdGZvciAoY29uc3Qgcm93IG9mIGdyb3VwLnJvd3MpIHtcblx0XHRcdFx0XHRhdHRyKHJvdywgXCJyb2xlXCIsIFwicm93XCIpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgY2VsbCBvZiByb3cuY2VsbHMpIHtcblx0XHRcdFx0XHRcdGlmIChpc1Rib2R5KSBhdHRyKGNlbGwsIFwiZGF0YS10aFwiLCB0aHNbY2VsbC5jZWxsSW5kZXhdIHx8IFwiOmVtcHR5XCIpO1xuXHRcdFx0XHRcdFx0ZWxzZSB0aHMucHVzaChjZWxsLmlubmVyVGV4dC50cmltKCkpOyAvLyBVc2luZyBpbm5lclRleHQgdG8gb25seSBpbmNsdWRlIHZpc2libGUgdGV4dFxuXHRcdFx0XHRcdFx0aWYgKGNlbGwubm9kZU5hbWUgPT09IFwiVERcIikgYXR0cihjZWxsLCBcInJvbGVcIiwgXCJjZWxsXCIpO1xuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGF0dHIoY2VsbCwgXCJyb2xlXCIsIGlzVGJvZHkgPyBcInJvd2hlYWRlclwiIDogXCJjb2x1bW5oZWFkZXJcIik7XG5cdFx0XHRcdFx0XHRcdGF0dHIoY2VsbCwgXCJzY29wZVwiLCBpc1Rib2R5ID8gXCJyb3dcIiA6IFwiY29sXCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfVEFCTEUsIGhhbmRsZU11dGF0aW9uKSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0SVNfQlJPV1NFUixcblx0UVVJQ0tfRVZFTlQsXG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRvbixcblx0b25Mb2FkZWQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBERVNDUklCRURCWSA9IFwiYXJpYS1kZXNjcmliZWRieVwiO1xuY29uc3QgRVNDID0gXCJFc2NhcGVcIjtcbmNvbnN0IExBQkVMTEVEQlkgPSBcImFyaWEtbGFiZWxsZWRieVwiO1xuY29uc3QgUE9TSVRJT05fQ1NTX1BST1BFUlRZID0gXCItLW10ZHMtdG9vbHRpcC1wb3NpdGlvblwiO1xuY29uc3QgVEhST1RUTEVfREVMQVkgPSAzMDA7XG5jb25zdCBUT09MVElQID0gSVNfQlJPV1NFUlxuXHQ/IE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwge1xuXHRcdFx0Y2xhc3NOYW1lOiBzdHlsZXMuX3Rvb2x0aXAsXG5cdFx0XHRpZDogXCJtdGRzLXRvb2x0aXBcIixcblx0XHRcdHBvcG92ZXI6IFwibWFudWFsXCIsXG5cdFx0fSlcblx0OiBudWxsOyAvLyBDcmVhdGUgYSBkdW1teSBlbGVtZW50IHRvIGF2b2lkIG51bGwgY2hlY2tzXG5cbmxldCBBTkNIT1I6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbmxldCBMQVNUX0NBTEwgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5sZXQgVEhST1RUTEU6IG51bWJlciB8IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+ID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlTW92ZSh7IHRhcmdldCwgdHlwZSwga2V5IH06IEV2ZW50ICYgeyBrZXk/OiBzdHJpbmcgfSkge1xuXHRpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIgJiYga2V5ICE9PSBFU0MpIHJldHVybjsgLy8gQWxsb3cgRVNDIGRpc21pc3MgdG8gZm9sbG93IGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvQVJJQS9hcGcvcGF0dGVybnMvdG9vbHRpcC9cblx0Y29uc3Qgd2FpdCA9IExBU1RfQ0FMTCArIFRIUk9UVExFX0RFTEFZIC0gRGF0ZS5ub3coKTtcblx0Y2xlYXJUaW1lb3V0KFRIUk9UVExFKTtcblx0VEhST1RUTEUgPSBzZXRUaW1lb3V0KFxuXHRcdGhhbmRsZU1vdmVUaHJvdHRsZWQsXG5cdFx0TWF0aC5tYXgod2FpdCwgMCksXG5cdFx0a2V5ID09PSBFU0MgPyBudWxsIDogdGFyZ2V0LFxuXHQpO1xufVxuXG4vLyBVc2luZyBhIHRocm90dGxlZCBmdW5jdGlvbiB0byBhdm9pZCBwZXJmb3JtYW5jZSBpc3N1ZXNcbmZ1bmN0aW9uIGhhbmRsZU1vdmVUaHJvdHRsZWQodGFyZ2V0OiBFbGVtZW50IHwgbnVsbCkge1xuXHRMQVNUX0NBTEwgPSBEYXRlLm5vdygpO1xuXG5cdC8vIEJ1aWxkIGFuZCBhcHBlbmQgdG9vbHRpcCBpZiBub3QgZXhpc3Rpbmdcblx0aWYgKCFUT09MVElQIHx8IHRhcmdldCA9PT0gVE9PTFRJUCkgcmV0dXJuOyAvLyBBbGxvdyB0b29sdGlwIHRvIGJlIGhvdmVyZWQsIGZvbGxvd2luZyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIxLyNjb250ZW50LW9uLWhvdmVyLW9yLWZvY3VzXG5cdGlmICghVE9PTFRJUD8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFRPT0xUSVApOyAvLyBFbnN1cmUgY29ubmVjdGVkXG5cdGxldCBhbmNob3IgPSB0YXJnZXQ/LmNsb3Nlc3Q/LjxFbGVtZW50PihcIltkYXRhLXRvb2x0aXBdXCIpIHx8IG51bGw7XG5cblx0Ly8gTm8gbmVlZCB0byB1cGRhdGVcblx0aWYgKGFuY2hvciA9PT0gQU5DSE9SKSByZXR1cm47XG5cblx0Y29uc3QgY29udGVudCA9IChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwXCIpKSB8fCBcIlwiO1xuXHRjb25zdCBwb3NpdGlvbiA9XG5cdFx0KGFuY2hvciAmJiBhdHRyKGFuY2hvciwgXCJkYXRhLXRvb2x0aXAtcG9zaXRpb25cIikpIHx8XG5cdFx0d2luZG93XG5cdFx0XHQuZ2V0Q29tcHV0ZWRTdHlsZShhbmNob3IgfHwgZG9jdW1lbnQuYm9keSlcblx0XHRcdC5nZXRQcm9wZXJ0eVZhbHVlKFBPU0lUSU9OX0NTU19QUk9QRVJUWSlcblx0XHRcdD8udHJpbSgpIHx8XG5cdFx0XCJ0b3BcIjtcblxuXHRjb25zdCBpc0hpZGRlbiA9XG5cdFx0IWNvbnRlbnQgfHxcblx0XHRjb250ZW50ID09PSBcImZhbHNlXCIgfHxcblx0XHRjb250ZW50ID09PSBcInRydWVcIiB8fFxuXHRcdHBvc2l0aW9uID09PSBcIm5vbmVcIjtcblxuXHRpZiAoaXNIaWRkZW4pIGFuY2hvciA9IG51bGw7IC8vIERvIG5vdCBzaG93IHRvb2x0aXAgaWYgYm9vbGlzaCB2YWx1ZVxuXHRpZiAoYW5jaG9yKSBUT09MVElQLnRleHRDb250ZW50ID0gY29udGVudDsgLy8gT25seSB1cGRhdGUgY29udGVudCBpZiBuZXcgYW5jaG9yXG5cblx0Y29uc3QgaGFkTGFiZWwgPSBBTkNIT1IgJiYgYXR0cihBTkNIT1IsIExBQkVMTEVEQlkpID09PSBUT09MVElQPy5pZDtcblx0Y29uc3QgaGFzTGFiZWwgPVxuXHRcdChhbmNob3IgaW5zdGFuY2VvZiBIVE1MRWxlbWVudFxuXHRcdFx0PyBhbmNob3IuaW5uZXJUZXh0XG5cdFx0XHQ6IGFuY2hvcj8udGV4dENvbnRlbnRcblx0XHQpPy50cmltKCkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShMQUJFTExFREJZKSB8fFxuXHRcdGFuY2hvcj8uaGFzQXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKTtcblxuXHRBTkNIT1I/LnJlbW92ZUF0dHJpYnV0ZShoYWRMYWJlbCA/IExBQkVMTEVEQlkgOiBERVNDUklCRURCWSk7IC8vIFVubGluayBwcmV2aW91cyBhbmNob3Jcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgZmFsc2UpOyAvLyBSZXNldCBhbmNob3IgcG9zaXRpb25cblxuXHRBTkNIT1IgPSBhbmNob3I7IC8vIFN0b3JlIG5ldyBhbmNob3IgLSBtaWdodCBiZSBudWxsIGlmIG5vIG5ldyBhbmNob3Jcblx0aWYgKEFOQ0hPUikgYXR0cihBTkNIT1IsIGhhc0xhYmVsID8gREVTQ1JJQkVEQlkgOiBMQUJFTExFREJZLCBUT09MVElQPy5pZCk7IC8vIFVzZSB0b29sdGlwIGFzIGRlc2NyaXB0aW9uIGlmIGFsbHJlYWR5IGhhcyBsYWJlbFxuXHRUT09MVElQLnRvZ2dsZVBvcG92ZXIoISFhbmNob3IpO1xuXHRhbmNob3JQb3NpdGlvbihUT09MVElQLCBhbmNob3IgfHwgZmFsc2UsIHBvc2l0aW9uKTtcbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJibHVyLGZvY3VzLG1vdXNlb3V0LG1vdXNlb3ZlclwiLCBoYW5kbGVNb3ZlLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJrZXlkb3duXCIsIGhhbmRsZU1vdmUsIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcImJsdXJcIiwgaGFuZGxlTW92ZSwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgX2EyO1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIChfYTIgPSBlbC5nZXRBdHRyaWJ1dGUobmFtZSkpICE9IG51bGwgPyBfYTIgOiBudWxsO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIGFzQnV0dG9uID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGlzQ2xpY2sgPSBcImtleVwiIGluIGV2ZW50ICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKTtcbiAgaWYgKGlzQ2xpY2spIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGlmIChpc0NsaWNrICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBldmVudC50YXJnZXQuY2xpY2soKTtcbiAgcmV0dXJuIGlzQ2xpY2s7XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIGlmIChhdHRycykgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJzKSkgYXR0cihlbCwga2V5LCB2YWwpO1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcblxuLy8gdS1kZXRhaWxzLnRzXG52YXIgVUhUTUxEZXRhaWxzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvLyBVc2luZyB1bmRlcnNjb3JlIGluc3RlYWQgb2YgcHJpdmF0ZSBmaWVsZHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5fY29udGVudCA9IG51bGw7XG4gICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IG5hbWU6IFwic3VtbWFyeVwiIH0pLFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBwYXJ0OiBcImRldGFpbHMtY29udGVudFwiIH0pLFxuICAgICAgY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgJHtESVNQTEFZX0JMT0NLfVxuICAgICAgICA6OnNsb3R0ZWQodS1zdW1tYXJ5KSB7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogYmxvY2sgfVxuXHRcdFx0XHQ6OnNsb3R0ZWQodS1zdW1tYXJ5KTo6YmVmb3JlIHsgY29udGVudDogJyc7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgbWFyZ2luLWlubGluZTogLjA1ZW0gLjMxMjVlbTsgYm9yZGVyLWJsb2NrOiAuMzEyNWVtIHNvbGlkIHRyYW5zcGFyZW50OyBib3JkZXItaW5saW5lLXN0YXJ0OiAuNWVtIHNvbGlkIH1cblx0XHRcdFx0OjpzbG90dGVkKHUtc3VtbWFyeVthcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXSk6OmJlZm9yZSB7IHJvdGF0ZTogOTBkZWcgfVxuXHRcdFx0XHQ6aG9zdCA+IFtwYXJ0PVwiZGV0YWlscy1jb250ZW50XCJdOm5vdChbaGlkZGVuPVwiXCJdKSB7IGRpc3BsYXk6IGJsb2NrIH1gXG4gICAgICApXG4gICAgKTtcbiAgfVxuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wib3BlblwiXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB2YXIgX2EyO1xuICAgIHRoaXMuX2NvbnRlbnQgPSAoX2EyID0gdGhpcy5zaGFkb3dSb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNoaWxkcmVuWzFdO1xuICAgIG9uKHRoaXMuX2NvbnRlbnQsIFwiYmVmb3JlbWF0Y2hcIiwgdGhpcyk7XG4gICAgb24odGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMuX2NvbnRlbnQpIG9mZih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9mZih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgdGhpcy5fY29udGVudCA9IG51bGw7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIHByZXYsIG5leHQpIHtcbiAgICBjb25zdCBoaWRlID0gXCJvbmJlZm9yZW1hdGNoXCIgaW4gdGhpcyA/IFwidW50aWwtZm91bmRcIiA6IHRydWU7XG4gICAgY29uc3Qgb3BlbiA9IHRoaXMub3BlbjtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMuY2hpbGRyZW4pXG4gICAgICBpZiAoZWwubm9kZU5hbWUgPT09IFwiVS1TVU1NQVJZXCIpIGF0dHIoZWwsIFwiYXJpYS1leHBhbmRlZFwiLCBgJHtvcGVufWApO1xuICAgIGlmICh0aGlzLl9jb250ZW50KSB7XG4gICAgICBhdHRyKHRoaXMuX2NvbnRlbnQsIFwiYXJpYS1oaWRkZW5cIiwgYCR7IW9wZW59YCk7XG4gICAgICB0aGlzLl9jb250ZW50LmhpZGRlbiA9IG9wZW4gPyBmYWxzZSA6IGhpZGU7XG4gICAgfVxuICAgIGlmIChvcGVuICYmIHRoaXMubmFtZSkge1xuICAgICAgY29uc3QgdURldGFpbHNMaXN0ID0gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgJHt0aGlzLm5vZGVOYW1lfVtuYW1lPVwiJHt0aGlzLm5hbWV9XCJdYFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgdURldGFpbHMgb2YgdURldGFpbHNMaXN0KVxuICAgICAgICBpZiAodURldGFpbHMgIT09IHRoaXMpIHVEZXRhaWxzLm9wZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHByb3AgPT09IFwib3BlblwiICYmIHByZXYgPT09IG51bGwgIT09IChuZXh0ID09PSBudWxsKSlcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJ0b2dnbGVcIikpO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IHRoaXMucXVlcnlTZWxlY3RvcihcIjpzY29wZSA+IHUtc3VtbWFyeVwiKTtcbiAgICBjb25zdCBpc1N1bW1hcnkgPSBzdW1tYXJ5ID09IG51bGwgPyB2b2lkIDAgOiBzdW1tYXJ5LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJiZWZvcmVtYXRjaFwiKSB0aGlzLm9wZW4gPSB0cnVlO1xuICAgIGlmIChpc1N1bW1hcnkgJiYgZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIGFzQnV0dG9uKGV2ZW50KTtcbiAgICBpZiAoaXNTdW1tYXJ5ICYmIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikgdGhpcy5vcGVuID0gIXRoaXMub3BlbjtcbiAgfVxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJvcGVuXCIpO1xuICB9XG4gIHNldCBvcGVuKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcIm9wZW5cIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgXCJuYW1lXCIpIHx8IFwiXCI7XG4gIH1cbiAgc2V0IG5hbWUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwibmFtZVwiLCB2YWx1ZSk7XG4gIH1cbn07XG52YXIgVUhUTUxTdW1tYXJ5RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJidXR0b25cIik7XG4gICAgdGhpcy5zbG90ID0gXCJzdW1tYXJ5XCI7XG4gICAgdGhpcy50YWJJbmRleCA9IDA7XG4gIH1cbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWRldGFpbHNcIiwgVUhUTUxEZXRhaWxzRWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXN1bW1hcnlcIiwgVUhUTUxTdW1tYXJ5RWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MRGV0YWlsc0VsZW1lbnQsIFVIVE1MU3VtbWFyeUVsZW1lbnQgfTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19GSVJFRk9YID0gSVNfQlJPV1NFUiAmJiAvZmlyZWZveC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZ2V0TGFiZWwgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9IGdldFJvb3QoZWwpO1xuICBjb25zdCBsYWJlbCA9IGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiKSB8fCBcIlwiO1xuICBjb25zdCBsYWJlbHMgPSAoKF9hMiA9IGF0dHIoZWwsIFwiYXJpYS1sYWJlbGxlZGJ5XCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKS5zcGxpdCgvXFxzKy8pKSB8fCBbXTtcbiAgcmV0dXJuIFtcbiAgICAuLi5sYWJlbHMubWFwKChpZDIpID0+IHJvb3QgPT0gbnVsbCA/IHZvaWQgMCA6IHJvb3QucXVlcnlTZWxlY3RvcihgW2lkPVwiJHtpZDJ9XCJdYCkpLFxuICAgIC8vIEdldCBhbGwgbGFiZWxsZWRieSBlbGVtZW50c1xuICAgIC4uLkFycmF5LmZyb20oZWwubGFiZWxzIHx8IFtdKVxuICAgIC8vIEdldCBhbGwgPGxhYmVsPiBlbGVtZW50c1xuICBdLnJlZHVjZSgoYWNjLCBlbDIpID0+IHtcbiAgICB2YXIgX2EzO1xuICAgIHJldHVybiBhY2MgfHwgKChfYTMgPSBlbDIgPT0gbnVsbCA/IHZvaWQgMCA6IGVsMi5pbm5lclRleHQpID09IG51bGwgPyB2b2lkIDAgOiBfYTMudHJpbSgpKSB8fCBcIlwiO1xuICB9LCBsYWJlbCk7XG59O1xuXG4vLyB1LXByb2dyZXNzLnRzXG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MUHJvZ3Jlc3NFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiLCBcInZhbHVlXCIsIFwibWF4XCJdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IGhpZGRlbjogXCJcIiB9KSxcbiAgICAgIC8vIFNsb3QgaGlkaW5nIGNvbnRlbnQgYWxsb3dzIGxlZ2FjeSBicm93c2VyIHRvIGRpc3BsYXkgZmFsbGJhY2sgdGV4dFxuICAgICAgY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgYm9yZGVyOiAxcHggc29saWQ7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgaGVpZ2h0OiAuNWVtOyB3aWR0aDogMTBlbTsgb3ZlcmZsb3c6IGhpZGRlbiB9XG4gICAgICAgIDpob3N0OjpiZWZvcmUgeyBjb250ZW50OiAnJzsgZGlzcGxheTogYmxvY2s7IGhlaWdodDogMTAwJTsgYmFja2dyb3VuZDogY3VycmVudENvbG9yOyB3aWR0aDogdmFyKC0tcGVyY2VudGFnZSwgMCUpOyB0cmFuc2l0aW9uOiB3aWR0aCAuMnMgfVxuICAgICAgICA6aG9zdCg6bm90KFt2YWx1ZV0pKSB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZyxjdXJyZW50Q29sb3IgMjUlLCB0cmFuc3BhcmVudCA1MCUsIGN1cnJlbnRDb2xvciA3NSUpIDUwJS80MDAlIH1cbiAgICAgICAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKSB7IDpob3N0IHsgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlIDJzIGxpbmVhciBpbmZpbml0ZSB9ICB9XG4gICAgICAgIEBrZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZSB7IGZyb20geyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDEwMCUgfSB0byB7IGJhY2tncm91bmQtcG9zaXRpb24teDogMCB9IH1gXG4gICAgICApXG4gICAgKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoU0tJUF9BVFRSX0NIQU5HRSkgcmV0dXJuO1xuICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgIGNvbnN0IHJvbGVJbWFnZSA9IElTX0lPUyB8fCBJU19GSVJFRk9YO1xuICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKHRoaXMucG9zaXRpb24gKiAxMDApKTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wZXJjZW50YWdlXCIsIGAke3BlcmNlbnRhZ2V9JWApO1xuICAgIGxldCBsYWJlbCA9IGdldExhYmVsKHRoaXMpO1xuICAgIGlmIChyb2xlSW1hZ2UpIGxhYmVsID0gYCR7bGFiZWwucmVwbGFjZSgvXFxkKyUkLywgXCJcIil9ICR7cGVyY2VudGFnZX0lYDtcbiAgICBpZiAoSVNfRklSRUZPWCkgZm9yIChjb25zdCBlbCBvZiB0aGlzLmxhYmVscykgYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIsIGxhYmVsKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1idXN5XCIsIGAke3RoaXMucG9zaXRpb24gPT09IC0xfWApO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsXCIsIGxhYmVsLnRyaW0oKSk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtbGFiZWxsZWRieVwiLCBudWxsKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW1heFwiLCBcIjEwMFwiKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW1pblwiLCBcIjBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVub3dcIiwgYCR7cGVyY2VudGFnZX1gKTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCByb2xlSW1hZ2UgPyBcImltZ1wiIDogXCJwcm9ncmVzc2JhclwiKTtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG4gIH1cbiAgZ2V0IGxhYmVscygpIHtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuY2xvc2VzdChcImxhYmVsOm5vdChbZm9yXSlcIik7XG4gICAgY29uc3QgaWQyID0gdXNlSWQodGhpcyk7XG4gICAgaWYgKGxhYmVsKSBsYWJlbC5odG1sRm9yID0gaWQyO1xuICAgIGNvbnN0IGVsID0gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYGxhYmVsW2Zvcj1cIiR7aWQyfVwiXWBcbiAgICApO1xuICAgIHJldHVybiBlbDtcbiAgfVxuICBnZXQgcG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUgPT09IG51bGwgPyAtMSA6IE1hdGgubWluKHRoaXMudmFsdWUgLyB0aGlzLm1heCwgMSk7XG4gIH1cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBnZXROdW1iZXIodGhpcywgXCJ2YWx1ZVwiKTtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBzZXROdW1iZXIodGhpcywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IG1heCgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwibWF4XCIpIHx8IDE7XG4gIH1cbiAgc2V0IG1heChtYXgpIHtcbiAgICBzZXROdW1iZXIodGhpcywgXCJtYXhcIiwgbWF4KTtcbiAgfVxufTtcbi8vIFByZXZlbnQgQ2hyb21lIERldlRvb2xzIHdhcm5pbmcgYWJvdXQgPGxhYmVsIGZvcj1cIlwiPiBwb2ludGluZyB0byA8dS1wcm9ncmVzcz5cblVIVE1MUHJvZ3Jlc3NFbGVtZW50LmZvcm1Bc3NvY2lhdGVkID0gdHJ1ZTtcbnZhciBpc051bWVyaWMgPSAodmFsdWUpID0+ICFOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlRmxvYXQoYCR7dmFsdWV9YCkpICYmIE51bWJlci5pc0Zpbml0ZShOdW1iZXIodmFsdWUpKTtcbnZhciBnZXROdW1iZXIgPSAoZWwsIGtleSkgPT4ge1xuICBjb25zdCB2YWx1ZSA9IGF0dHIoZWwsIGtleSk7XG4gIHJldHVybiBpc051bWVyaWModmFsdWUpID8gTWF0aC5tYXgoMCwgTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUpKSA6IG51bGw7XG59O1xudmFyIHNldE51bWJlciA9IChlbCwga2V5LCB2YWwpID0+IHtcbiAgaWYgKHZhbCA9PT0gbnVsbCB8fCBpc051bWVyaWModmFsKSkgYXR0cihlbCwga2V5LCBgJHt2YWx9YCk7XG4gIGVsc2UgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2V0IG5vbi1udW1lcmljICcke2F0dHJ9JzogJyR7dmFsfSdgKTtcbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXByb2dyZXNzXCIsIFVIVE1MUHJvZ3Jlc3NFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxQcm9ncmVzc0VsZW1lbnQgfTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgLy8gVW5uYW1lZCBzbG90IGRvZXMgYXV0b21hdGljYWxseSByZW5kZXIgYWxsIHRvcCBlbGVtZW50IG5vZGVzXG4gIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBjc3MpXG4pO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xuXG4vLyB1LXRhYnMudHNcbnZhciBBUklBX0NPTlRST0xTID0gXCJhcmlhLWNvbnRyb2xzXCI7XG52YXIgQVJJQV9TRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xudmFyIFVIVE1MVGFic0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgRElTUExBWV9CTE9DSyk7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFibGlzdFwiLCB0aGlzKVswXSB8fCBudWxsO1xuICB9XG4gIGdldCBzZWxlY3RlZEluZGV4KCkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicyk7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgICBzZXRTZWxlY3RlZCh0aGlzLnRhYnNbaW5kZXhdKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJcIiwgdGhpcyk7XG4gIH1cbiAgZ2V0IHBhbmVscygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJwYW5lbFwiLCB0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYkxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFibGlzdFwiKTtcbiAgICBvbih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCkgdGhpcy5oYW5kbGVFdmVudCgpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LnR5cGUgPT09IFwibXV0YXRpb25cIikge1xuICAgICAgY29uc3QgdGFiID0gdGhpcy50YWJzW01hdGgubWF4KHRoaXMuc2VsZWN0ZWRJbmRleCwgMCldO1xuICAgICAgcmV0dXJuIHRhYiA9PSBudWxsID8gdm9pZCAwIDogdGFiLnNldEF0dHJpYnV0ZShBUklBX1NFTEVDVEVELCBcInRydWVcIik7XG4gICAgfVxuICAgIGNvbnN0IHsga2V5IH0gPSBldmVudDtcbiAgICBjb25zdCB0YWJzID0gWy4uLnRoaXMudGFic107XG4gICAgY29uc3QgcHJldiA9IHRhYnMuZmluZEluZGV4KCh0YWIpID0+IHRhYi5jb250YWlucyhldmVudC50YXJnZXQpKTtcbiAgICBsZXQgbmV4dCA9IHByZXY7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgcHJldiA9PT0gLTEpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSBzZXRTZWxlY3RlZCh0YWJzW3ByZXZdKTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIgJiYgIWFzQnV0dG9uKGV2ZW50KSkge1xuICAgICAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIiB8fCBrZXkgPT09IFwiQXJyb3dSaWdodFwiKVxuICAgICAgICBuZXh0ID0gKHByZXYgKyAxKSAlIHRhYnMubGVuZ3RoO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93VXBcIiB8fCBrZXkgPT09IFwiQXJyb3dMZWZ0XCIpXG4gICAgICAgIG5leHQgPSAocHJldiB8fCB0YWJzLmxlbmd0aCkgLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkVuZFwiKSBuZXh0ID0gdGFicy5sZW5ndGggLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkhvbWVcIikgbmV4dCA9IDA7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiVGFiXCIpIG5leHQgPSBnZXRTZWxlY3RlZEluZGV4KHRhYnMpO1xuICAgICAgZWxzZSByZXR1cm47XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGFic1twcmV2XS50YWJJbmRleCA9IC0xO1xuICAgICAgICB0YWJzW25leHRdLnRhYkluZGV4ID0gMDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGtleSAhPT0gXCJUYWJcIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0YWJzW25leHRdLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJzKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpO1xuICB9XG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgc2V0U2VsZWN0ZWQodGhpcy50YWJzW2luZGV4XSk7XG4gIH1cbn07XG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MVGFiRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImlkXCIsIEFSSUFfU0VMRUNURUQsIEFSSUFfQ09OVFJPTFNdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jayB9XCJcbiAgICApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFiXCIpO1xuICAgIHRoaXMudGFiSW5kZXggPSB0aGlzLnNlbGVjdGVkID8gMCA6IC0xO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoIVNLSVBfQVRUUl9DSEFOR0UgJiYgdGhpcy5zZWxlY3RlZCAmJiB0aGlzLnRhYkxpc3QpIHtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgICAgY29uc3QgdGFicyA9IFsuLi50aGlzLnRhYkxpc3QucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpXTtcbiAgICAgIGNvbnN0IHBhbmVscyA9IHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFicGFuZWxcIiwgdGhpcy50YWJzRWxlbWVudCB8fCB0aGlzKTtcbiAgICAgIGNvbnN0IG5leHRQYW5lbCA9IGdldFBhbmVsKHRoaXMsIHBhbmVsc1t0YWJzLmluZGV4T2YodGhpcyldKTtcbiAgICAgIGlmIChuZXh0UGFuZWwpIGF0dHIobmV4dFBhbmVsLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKHRoaXMpKTtcbiAgICAgIHRhYnMuZm9yRWFjaCgodGFiLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBwYW5lbCA9IGdldFBhbmVsKHRhYiwgcGFuZWxzW2luZGV4XSk7XG4gICAgICAgIHRhYi50YWJJbmRleCA9IHRhYiA9PT0gdGhpcyA/IDAgOiAtMTtcbiAgICAgICAgYXR0cih0YWIsIEFSSUFfU0VMRUNURUQsIGAke3RhYiA9PT0gdGhpc31gKTtcbiAgICAgICAgaWYgKHBhbmVsKSBwYW5lbC5oaWRkZW4gPSBwYW5lbCAhPT0gbmV4dFBhbmVsO1xuICAgICAgICBpZiAocGFuZWwpIGF0dHIodGFiLCBBUklBX0NPTlRST0xTLCBwYW5lbC5pZCk7XG4gICAgICB9KTtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgY29uc3QgdGFibGlzdCA9IHRoaXMucGFyZW50RWxlbWVudDtcbiAgICByZXR1cm4gKHRhYmxpc3QgPT0gbnVsbCA/IHZvaWQgMCA6IHRhYmxpc3Qubm9kZU5hbWUpID09PSBcIlUtVEFCTElTVFwiID8gdGFibGlzdCA6IG51bGw7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQpID09PSBcInRydWVcIjtcbiAgfVxuICBzZXQgc2VsZWN0ZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQsIGAkeyEhdmFsdWV9YCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiB0YWIgaW4gYSB0YWJsaXN0LiAqL1xuICBnZXQgaW5kZXgoKSB7XG4gICAgY29uc3QgdGFiTGlzdCA9IHRoaXMudGFiTGlzdDtcbiAgICByZXR1cm4gdGFiTGlzdCA/IFsuLi50YWJMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKV0uaW5kZXhPZih0aGlzKSA6IDA7XG4gIH1cbiAgZ2V0IHBhbmVsKCkge1xuICAgIHJldHVybiBnZXRQYW5lbCh0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYlBhbmVsRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImhpZGRlblwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFicGFuZWxcIik7XG4gICAgdGhpcy5oaWRkZW4gPSBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicykgPT09IC0xO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLmhpZGRlbiB8fCBpc0ZvY3VzYWJsZSh0aGlzLmZpcnN0Q2hpbGQpKVxuICAgICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIG51bGwpO1xuICAgIGVsc2UgdGhpcy50YWJJbmRleCA9IDA7XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgY29uc3QgY3NzID0gYHUtdGFiWyR7QVJJQV9DT05UUk9MU309XCIke3RoaXMuaWR9XCJdYDtcbiAgICByZXR1cm4gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKGNzcyk7XG4gIH1cbn07XG52YXIgcXVlcnlXaXRob3V0TmVzdGVkID0gKHRhZywgc2VsZikgPT4gc2VsZi5xdWVyeVNlbGVjdG9yQWxsKGAke3RhZ306bm90KDpzY29wZSB1LXRhYnBhbmVsICR7dGFnfSlgKTtcbnZhciBnZXRQYW5lbCA9ICh0YWIsIHBhbmVsKSA9PiB7XG4gIGNvbnN0IGlkMiA9IGF0dHIodGFiLCBBUklBX0NPTlRST0xTKSB8fCB1c2VJZChwYW5lbCk7XG4gIGNvbnN0IGVsID0gZ2V0Um9vdCh0YWIpLmdldEVsZW1lbnRCeUlkKGlkMik7XG4gIHJldHVybiAoZWwgPT0gbnVsbCA/IHZvaWQgMCA6IGVsLm5vZGVOYW1lKSA9PT0gXCJVLVRBQlBBTkVMXCIgPyBlbCA6IG51bGw7XG59O1xudmFyIGdldFNlbGVjdGVkSW5kZXggPSAodGFicykgPT4gWy4uLnRhYnNdLmZpbmRJbmRleCgodGFiKSA9PiBhdHRyKHRhYiwgQVJJQV9TRUxFQ1RFRCkgPT09IFwidHJ1ZVwiKTtcbnZhciBzZXRTZWxlY3RlZCA9ICh0YWIpID0+IHRhYiAmJiBhdHRyKHRhYiwgXCJhcmlhLXNlbGVjdGVkXCIsIFwidHJ1ZVwiKTtcbnZhciBpc0ZvY3VzYWJsZSA9IChlbCkgPT4gZWwgaW5zdGFuY2VvZiBFbGVtZW50ICYmICFlbC5tYXRjaGVzKCc6ZGlzYWJsZWQsW3RhYmluZGV4Xj1cIi1cIl0nKSAmJiBlbC5tYXRjaGVzKFxuICBgW2NvbnRlbnRlZGl0YWJsZV0sW2NvbnRyb2xzXSxbaHJlZl0sW3RhYmluZGV4XSxpbnB1dDpub3QoW3R5cGU9XCJoaWRkZW5cIl0pLHNlbGVjdCx0ZXh0YXJlYSxidXR0b24sc3VtbWFyeSxpZnJhbWVgXG4pO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJzXCIsIFVIVE1MVGFic0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJsaXN0XCIsIFVIVE1MVGFiTGlzdEVsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJcIiwgVUhUTUxUYWJFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtdGFicGFuZWxcIiwgVUhUTUxUYWJQYW5lbEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTFRhYkVsZW1lbnQsIFVIVE1MVGFiTGlzdEVsZW1lbnQsIFVIVE1MVGFiUGFuZWxFbGVtZW50LCBVSFRNTFRhYnNFbGVtZW50IH07XG4iLCJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5cbi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfRklSRUZPWCA9IElTX0JST1dTRVIgJiYgL2ZpcmVmb3gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfU0FGQVJJID0gSVNfQlJPV1NFUiAmJiAvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xudmFyIElTX01BQyA9IElTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgU0FGRV9MQUJFTExFREJZID0gYCR7SVNfQU5EUk9JRCA/IFwiZGF0YVwiIDogXCJhcmlhXCJ9LWxhYmVsbGVkYnlgO1xudmFyIFNBRkVfTVVMVElTRUxFQ1RBQkxFID0gYCR7SVNfU0FGQVJJID8gXCJhcmlhXCIgOiBcImRhdGFcIn0tbXVsdGlzZWxlY3RhYmxlYDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgRk9DVVNfT1VUTElORSA9IFwib3V0bGluZTogMXB4IGRvdHRlZDsgb3V0bGluZTogNXB4IGF1dG8gSGlnaGxpZ2h0OyBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3JcIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgX2EyO1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIChfYTIgPSBlbC5nZXRBdHRyaWJ1dGUobmFtZSkpICE9IG51bGwgPyBfYTIgOiBudWxsO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIGF0dGFjaFN0eWxlID0gKGVsZW1lbnQsIGNzcykgPT4gZWxlbWVudC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAvLyBVbm5hbWVkIHNsb3QgZG9lcyBhdXRvbWF0aWNhbGx5IHJlbmRlciBhbGwgdG9wIGVsZW1lbnQgbm9kZXNcbiAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIGNzcylcbik7XG52YXIgb2JzZXJ2ZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgbXV0YXRpb25PYnNlcnZlciA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHJldHVybiBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICB0cnkge1xuICAgIG9ic2VydmVycy5nZXQoZWxlbWVudCkuZGlzY29ubmVjdCgpO1xuICAgIG9ic2VydmVycy5kZWxldGUoZWxlbWVudCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIGNyZWF0ZUFyaWFMaXZlID0gKG1vZGUpID0+IHtcbiAgY29uc3QgbGl2ZSA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGxpdmUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246Zml4ZWQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXBcIjtcbiAgYXR0cihsaXZlLCBcImFyaWEtbGl2ZVwiLCBtb2RlKTtcbiAgcmV0dXJuIGxpdmU7XG59O1xuZnVuY3Rpb24gYXR0cmlidXRlVGV4dHModGV4dHMsIHByb3AsIHZhbHVlKSB7XG4gIGlmICghcHJvcCkgcmV0dXJuIE9iamVjdC5rZXlzKHRleHRzKS5tYXAoKGtleTIpID0+IGBkYXRhLXNyLSR7a2V5Mn1gKTtcbiAgY29uc3Qga2V5ID0gKHByb3AgPT0gbnVsbCA/IHZvaWQgMCA6IHByb3Auc3RhcnRzV2l0aChcImRhdGEtc3ItXCIpKSAmJiBwcm9wLnNsaWNlKDgpO1xuICBpZiAoa2V5ICYmIHZhbHVlICYmIHRleHRzW2tleV0pIHRleHRzW2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIFtdO1xufVxuXG4vLyAuLi91LWRhdGFsaXN0L3Utb3B0aW9uLnRzXG52YXIgRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG52YXIgU0VMRUNURUQgPSBcInNlbGVjdGVkXCI7XG52YXIgVUhUTUxPcHRpb25FbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW0RJU0FCTEVELCBTRUxFQ1RFRF07XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtESVNQTEFZX0JMT0NLfTpob3N0KDpmb2N1cyl7JHtGT0NVU19PVVRMSU5FfX06aG9zdHsgY3Vyc29yOiBwb2ludGVyIH1gXG4gICAgKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoIUlTX0lPUykgdGhpcy50YWJJbmRleCA9IC0xO1xuICAgIGlmICghYXR0cih0aGlzLCBcInJvbGVcIikpIGF0dHIodGhpcywgXCJyb2xlXCIsIFwib3B0aW9uXCIpO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWRpc2FibGVkXCIsIGAke3RoaXMuZGlzYWJsZWR9YCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtc2VsZWN0ZWRcIiwgYCR7dGhpcy5zZWxlY3RlZH1gKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgd2hldGhlciB0aGUgb3B0aW9uIGluIHRoZSBsaXN0IGJveCBpcyB0aGUgZGVmYXVsdCBpdGVtLiAqL1xuICBnZXQgZGVmYXVsdFNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzW1NFTEVDVEVEXTtcbiAgfVxuICBzZXQgZGVmYXVsdFNlbGVjdGVkKHZhbHVlKSB7XG4gICAgdGhpc1tTRUxFQ1RFRF0gPSB2YWx1ZTtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgRElTQUJMRUQpICE9PSBudWxsO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgRElTQUJMRUQsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIC8qKiBSZXRyaWV2ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGZvcm0gdGhhdCB0aGUgb2JqZWN0IGlzIGVtYmVkZGVkIGluLiAqL1xuICBnZXQgZm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwiZm9ybVwiKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIG9yZGluYWwgcG9zaXRpb24gb2YgYW4gb3B0aW9uIGluIGEgbGlzdCBib3guICovXG4gIGdldCBpbmRleCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIGNvbnN0IG9wdGlvbnMgPSAoX2EyID0gdGhpcy5jbG9zZXN0KFwidS1kYXRhbGlzdFwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5nZXRFbGVtZW50c0J5VGFnTmFtZShcInUtb3B0aW9uXCIpO1xuICAgIHJldHVybiBBcnJheS5mcm9tKG9wdGlvbnMgfHwgW3RoaXNdKS5pbmRleE9mKHRoaXMpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyBhIHZhbHVlIHRoYXQgeW91IGNhbiB1c2UgdG8gaW1wbGVtZW50IHlvdXIgb3duIGxhYmVsIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBvYmplY3QuICovXG4gIGdldCBsYWJlbCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBcImxhYmVsXCIpIHx8IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgbGFiZWwodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwibGFiZWxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBTRUxFQ1RFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBTRUxFQ1RFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSB0ZXh0IHN0cmluZyBzcGVjaWZpZWQgYnkgdGhlIG9wdGlvbiB0YWcuICovXG4gIGdldCB0ZXh0KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gdGhpcy50ZXh0Q29udGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIH1cbiAgc2V0IHRleHQodGV4dCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB0ZXh0O1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdmFsdWUgd2hpY2ggaXMgcmV0dXJuZWQgdG8gdGhlIHNlcnZlciB3aGVuIHRoZSBmb3JtIGNvbnRyb2wgaXMgc3VibWl0dGVkLiAqL1xuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgXCJ2YWx1ZVwiKSB8fCB0aGlzLnRleHQ7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgfVxufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtb3B0aW9uXCIsIFVIVE1MT3B0aW9uRWxlbWVudCk7XG5cbi8vIC4uL3UtZGF0YWxpc3QvdS1kYXRhbGlzdC50c1xudmFyIElTX1BSRVNTID0gZmFsc2U7XG52YXIgTElWRV9USU1FUjtcbnZhciBMSVZFX1NSX0ZJWCA9IDA7XG52YXIgTElWRTtcbnZhciBJU19TQUZBUklfTUFDID0gSVNfU0FGQVJJICYmICFJU19JT1M7XG52YXIgRVZFTlRTID0gXCJjbGljayxmb2N1c291dCxpbnB1dCxrZXlkb3duLG1vdXNlZG93bixtb3VzZXVwXCI7XG52YXIgVEVYVFMgPSB7XG4gIHNpbmd1bGFyOiBcIiVkIGhpdFwiLFxuICBwbHVyYWw6IFwiJWQgaGl0c1wiXG59O1xudmFyIFVIVE1MRGF0YUxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIFVzaW5nIHVuZGVyc2NvcmUgaW5zdGVhZCBvZiBwcml2YXRlIGZpZWxkcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICAvLyBfYW5ub3VuY2VDb3VudCA9IDA7XG4gICAgLy8gX2Fubm91bmNlVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVtYmVyID0gMDtcbiAgICB0aGlzLl9ibHVyVGltZXIgPSAwO1xuICAgIHRoaXMuX2lucHV0ID0gbnVsbDtcbiAgICB0aGlzLl9yb290ID0gbnVsbDtcbiAgICB0aGlzLl92YWx1ZSA9IFwiXCI7XG4gICAgLy8gU3RvcmUgc2FuaXRpemVkIHZhbHVlIHRvIHNwZWVkIHVwIG9wdGlvbiBmaWx0ZXJpbmdcbiAgICB0aGlzLl90ZXh0cyA9IF9fc3ByZWFkVmFsdWVzKHt9LCBURVhUUyk7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgYCR7RElTUExBWV9CTE9DS306OnNsb3R0ZWQodS1vcHRpb25bZGlzYWJsZWRdKSB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudCB9YFxuICAgICAgLy8gSGlkZSBkaXNhYmxlZCBvcHRpb25zXG4gICAgKTtcbiAgfVxuICAvLyBTcGVlZCB1cCB0cmFuc2xhdGVkIHRleHRzXG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJpZFwiLCAuLi5hdHRyaWJ1dGVUZXh0cyhURVhUUyldO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuaGlkZGVuID0gdHJ1ZTtcbiAgICB0aGlzLl9yb290ID0gZ2V0Um9vdCh0aGlzKTtcbiAgICBpZiAoIUxJVkUpIExJVkUgPSBjcmVhdGVBcmlhTGl2ZShcImFzc2VydGl2ZVwiKTtcbiAgICBpZiAoIUxJVkUuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoTElWRSk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJsaXN0Ym94XCIpO1xuICAgIG9uKHRoaXMuX3Jvb3QsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBvbih0aGlzLl9yb290LCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgb2ZmKHRoaXMuX3Jvb3QgfHwgdGhpcywgXCJmb2N1c1wiLCB0aGlzLCB0cnVlKTtcbiAgICBvZmYodGhpcy5fcm9vdCB8fCB0aGlzLCBcImZvY3VzaW5cIiwgdGhpcyk7XG4gICAgZGlzY29ubmVjdElucHV0KHRoaXMpO1xuICAgIHRoaXMuX3Jvb3QgPSBudWxsO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBfcHJldiwgbmV4dCkge1xuICAgIHZhciBfYTI7XG4gICAgYXR0cmlidXRlVGV4dHModGhpcy5fdGV4dHMsIHByb3AsIG5leHQpO1xuICAgIGNvbnN0IGlucHV0cyA9IChfYTIgPSB0aGlzLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnF1ZXJ5U2VsZWN0b3JBbGwoYGlucHV0W2xpc3Q9XCIke3RoaXMuaWR9XCJdYCk7XG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dHMgfHwgW10pIHNldHVwSW5wdXQodGhpcywgaW5wdXQpO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgeyB0eXBlIH0gPSBldmVudDtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmICh0eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImZvY3VzXCIgfHwgdHlwZSA9PT0gXCJmb2N1c2luXCIpIG9uRm9jdXNJbih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiZm9jdXNvdXRcIikgb25Gb2N1c091dCh0aGlzKTtcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIG9uS2V5RG93bih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwibXV0YXRpb25cIiB8fCB0eXBlID09PSBcImlucHV0XCIpIHNldHVwT3B0aW9ucyh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwibW91c2V1cFwiKSBJU19QUkVTUyA9IGZhbHNlO1xuICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiKSBJU19QUkVTUyA9IHRoaXMuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgfVxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcInUtb3B0aW9uXCIpO1xuICB9XG59O1xudmFyIG9uRm9jdXNJbiA9IChzZWxmLCB7IHRhcmdldCB9KSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IGlzSW5wdXQgPSBzZWxmLl9pbnB1dCA9PT0gdGFyZ2V0O1xuICBjb25zdCBpc0luc2lkZSA9IGlzSW5wdXQgfHwgc2VsZi5jb250YWlucyh0YXJnZXQpO1xuICBpZiAoaXNJbnNpZGUpIHJldHVybiBjbGVhclRpbWVvdXQoc2VsZi5fYmx1clRpbWVyKTtcbiAgaWYgKCFpc0lucHV0ICYmIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgYXR0cih0YXJnZXQsIFwibGlzdFwiKSA9PT0gc2VsZi5pZCkge1xuICAgIGlmIChzZWxmLl9pbnB1dCkgZGlzY29ubmVjdElucHV0KHNlbGYpO1xuICAgIHNlbGYuX2lucHV0ID0gdGFyZ2V0O1xuICAgIGF0dHIoc2VsZiwgU0FGRV9MQUJFTExFREJZLCB1c2VJZCgoX2EyID0gc2VsZi5faW5wdXQubGFiZWxzKSA9PSBudWxsID8gdm9pZCAwIDogX2EyWzBdKSk7XG4gICAgb24oc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIoc2VsZiwge1xuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbXCJ2YWx1ZVwiXSxcbiAgICAgIC8vIExpc3RlbiBmb3IgdmFsdWUgY2hhbmdlcyB0byBzaG93IHUtb3B0aW9uc1xuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcbiAgICBzZXRFeHBhbmRlZChzZWxmLCB0cnVlKTtcbiAgfVxufTtcbnZhciBvbkZvY3VzT3V0ID0gKHNlbGYpID0+IHtcbiAgaWYgKCFJU19QUkVTUykgc2VsZi5fYmx1clRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBkaXNjb25uZWN0SW5wdXQoc2VsZikpO1xufTtcbnZhciBvbkNsaWNrID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgdmFyIF9hMiwgX2IsIF9jLCBfZCwgX2U7XG4gIGNvbnN0IGlzU2luZ2xlID0gYXR0cihzZWxmLCBTQUZFX01VTFRJU0VMRUNUQUJMRSkgIT09IFwidHJ1ZVwiO1xuICBjb25zdCBvcHRpb24gPSBbLi4uc2VsZi5vcHRpb25zXS5maW5kKChvcHQpID0+IG9wdC5jb250YWlucyh0YXJnZXQpKTtcbiAgaWYgKHNlbGYuX2lucHV0ID09PSB0YXJnZXQpIHtcbiAgICBzZXRFeHBhbmRlZChzZWxmLCB0cnVlKTtcbiAgfSBlbHNlIGlmIChvcHRpb24gJiYgaXNJbnRlcmFjdGl2ZU9wdGlvbihvcHRpb24pKSB7XG4gICAgZm9yIChjb25zdCBvcHQgb2Ygc2VsZi5vcHRpb25zKSB7XG4gICAgICBpZiAob3B0ID09PSBvcHRpb24pIG9wdC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICBlbHNlIGlmIChpc1NpbmdsZSkgb3B0LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgfVxuICAgIChfYiA9IChfYTIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsXG4gICAgICBcInZhbHVlXCJcbiAgICApKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoc2VsZi5faW5wdXQsIG9wdGlvbi52YWx1ZSk7XG4gICAgaWYgKGlzU2luZ2xlKSB7XG4gICAgICAoX2MgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jLmZvY3VzKCk7XG4gICAgICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gICAgfVxuICAgIChfZCA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2QuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBFdmVudChcImlucHV0XCIsIHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUgfSlcbiAgICApO1xuICAgIChfZSA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2UuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJjaGFuZ2VcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgfVxufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGlmIChldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LnNoaWZ0S2V5KSByZXR1cm47XG4gIGlmIChldmVudC5rZXkgIT09IFwiRXNjYXBlXCIpIHNldEV4cGFuZGVkKHNlbGYsIHRydWUpO1xuICBjb25zdCB7IGtleSB9ID0gZXZlbnQ7XG4gIGNvbnN0IGFjdGl2ZSA9IChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQ7XG4gIGNvbnN0IG9wdGlvbnMgPSBnZXRWaXNpYmxlT3B0aW9ucyhzZWxmKTtcbiAgY29uc3QgaW5kZXggPSBvcHRpb25zLmluZGV4T2YoYWN0aXZlKTtcbiAgbGV0IG5leHQgPSAtMTtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIikgbmV4dCA9IChpbmRleCArIDEpICUgb3B0aW9ucy5sZW5ndGg7XG4gIGlmIChrZXkgPT09IFwiQXJyb3dVcFwiKSBuZXh0ID0gKH5pbmRleCA/IGluZGV4IDogb3B0aW9ucy5sZW5ndGgpIC0gMTtcbiAgaWYgKH5pbmRleCkge1xuICAgIGlmIChrZXkgPT09IFwiSG9tZVwiIHx8IGtleSA9PT0gXCJQYWdlVXBcIikgbmV4dCA9IDA7XG4gICAgaWYgKGtleSA9PT0gXCJFbmRcIiB8fCBrZXkgPT09IFwiUGFnZURvd25cIikgbmV4dCA9IG9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICBpZiAoa2V5ID09PSBcIkVudGVyXCIpIHtcbiAgICAgIG9wdGlvbnNbaW5kZXhdLmNsaWNrKCk7XG4gICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbiAgaWYgKG9wdGlvbnNbbmV4dF0pIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIG9wdGlvbi50YWJJbmRleCA9IC0xO1xuICBpZiAob3B0aW9uc1tuZXh0XSkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgKF9iID0gb3B0aW9uc1tuZXh0XSB8fCBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmZvY3VzKCk7XG4gIGlmIChrZXkgPT09IFwiRXNjYXBlXCIpIHNldEV4cGFuZGVkKHNlbGYsIGZhbHNlKTtcbn07XG52YXIgc2V0RXhwYW5kZWQgPSAoc2VsZiwgb3BlbikgPT4ge1xuICBzZWxmLmhpZGRlbiA9ICFvcGVuO1xuICBpZiAoc2VsZi5wb3BvdmVyKSBzZWxmLnRvZ2dsZVBvcG92ZXIob3Blbik7XG4gIGlmIChzZWxmLl9pbnB1dCkgc2V0dXBJbnB1dChzZWxmLCBzZWxmLl9pbnB1dCwgb3Blbik7XG4gIGlmIChvcGVuKSBzZXR1cE9wdGlvbnMoc2VsZik7XG59O1xudmFyIGRpc2Nvbm5lY3RJbnB1dCA9IChzZWxmKSA9PiB7XG4gIG9mZihzZWxmLl9yb290IHx8IHNlbGYsIEVWRU5UUywgc2VsZik7XG4gIG11dGF0aW9uT2JzZXJ2ZXIoc2VsZiwgZmFsc2UpO1xuICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gIHNlbGYuX2lucHV0ID0gbnVsbDtcbn07XG52YXIgZ2V0VmlzaWJsZU9wdGlvbnMgPSAoc2VsZikgPT4gWy4uLnNlbGYub3B0aW9uc10uZmlsdGVyKFxuICAob3B0KSA9PiAhb3B0LmRpc2FibGVkICYmIG9wdC5vZmZzZXRXaWR0aCAmJiBvcHQub2Zmc2V0SGVpZ2h0XG4gIC8vIENoZWNrcyBkaXNhYmxlZCBvciB2aXNpYmlsaXR5IChzaW5jZSBoaWRkZW4gYXR0cmlidXRlIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBkaXNwbGF5OiBibG9jaylcbik7XG52YXIgaXNJbnRlcmFjdGl2ZU9wdGlvbiA9IChvcHRpb24pID0+IG9wdGlvbiBpbnN0YW5jZW9mIEhUTUxPcHRpb25FbGVtZW50IHx8IG9wdGlvbi5nZXRBdHRyaWJ1dGUoXCJyb2xlXCIpID09PSBcIm9wdGlvblwiO1xudmFyIHNldHVwSW5wdXQgPSAoc2VsZiwgaW5wdXQsIG9wZW4gPSBmYWxzZSkgPT4ge1xuICBhdHRyKGlucHV0LCBcInBvcG92ZXJ0YXJnZXRcIiwgdXNlSWQoc2VsZikpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtYXV0b2NvbXBsZXRlXCIsIFwibGlzdFwiKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWNvbnRyb2xzXCIsIHVzZUlkKHNlbGYpKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWV4cGFuZGVkXCIsIGAke0lTX1NBRkFSSV9NQUMgfHwgb3Blbn1gKTtcbiAgYXR0cihpbnB1dCwgXCJhdXRvY29tcGxldGVcIiwgXCJvZmZcIik7XG4gIGF0dHIoaW5wdXQsIFwicm9sZVwiLCBcImNvbWJvYm94XCIpO1xufTtcbnZhciBzYW5pdGl6ZSA9IChzdHIpID0+IChzdHIgPT0gbnVsbCA/IHZvaWQgMCA6IHN0ci50b0xvd2VyQ2FzZSgpLnRyaW0oKSkgfHwgXCJcIjtcbnZhciBzZXR1cE9wdGlvbnMgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgdmFsdWUgPSBzYW5pdGl6ZSgoX2EyID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudmFsdWUpO1xuICBjb25zdCBoYXNDaGFuZ2UgPSAoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm11dGF0aW9uXCIgfHwgc2VsZi5fdmFsdWUgIT09IHZhbHVlO1xuICBpZiAoIWhhc0NoYW5nZSkgcmV0dXJuO1xuICBjb25zdCBoaWRkZW4gPSBzZWxmLmhpZGRlbjtcbiAgY29uc3QgaXNTaW5nbGUgPSBhdHRyKHNlbGYsIFNBRkVfTVVMVElTRUxFQ1RBQkxFKSAhPT0gXCJ0cnVlXCI7XG4gIGNvbnN0IGlzVHlwaW5nID0gZXZlbnQgaW5zdGFuY2VvZiBJbnB1dEV2ZW50ICYmICFpc0RhdGFsaXN0Q2xpY2soZXZlbnQpO1xuICBzZWxmLmhpZGRlbiA9IHRydWU7XG4gIHNlbGYuX3ZhbHVlID0gdmFsdWU7XG4gIGZvciAoY29uc3Qgb3B0IG9mIHNlbGYub3B0aW9ucykge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBbb3B0LnZhbHVlLCBvcHQubGFiZWwsIG9wdC50ZXh0XS5tYXAoc2FuaXRpemUpO1xuICAgIG9wdC5oaWRkZW4gPSAhY29udGVudC5zb21lKChzdHIpID0+IHN0ci5pbmNsdWRlcyh2YWx1ZSkpO1xuICAgIGlmIChpc1NpbmdsZSAmJiBpc1R5cGluZyAmJiBpc0ludGVyYWN0aXZlT3B0aW9uKG9wdCkpXG4gICAgICBvcHQuc2VsZWN0ZWQgPSBjb250ZW50LmluY2x1ZGVzKHZhbHVlKTtcbiAgfVxuICBzZWxmLmhpZGRlbiA9IGhpZGRlbjtcbiAgY29uc3QgdmlzaWJsZSA9IGdldFZpc2libGVPcHRpb25zKHNlbGYpO1xuICBjbGVhclRpbWVvdXQoTElWRV9USU1FUik7XG4gIExJVkVfVElNRVIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBjb25zdCB7IGxlbmd0aCB9ID0gdmlzaWJsZS5maWx0ZXIoaXNJbnRlcmFjdGl2ZU9wdGlvbik7XG4gICAgY29uc3QgbGl2ZVNyRml4ID0gKytMSVZFX1NSX0ZJWCAlIDIgPyBcIlxceEEwXCIgOiBcIlwiO1xuICAgIGNvbnN0IGNvdW50VGV4dCA9IGAke2Ake3NlbGYuX3RleHRzW2xlbmd0aCA9PT0gMSA/IFwic2luZ3VsYXJcIiA6IFwicGx1cmFsXCJdfWAucmVwbGFjZShcIiVkXCIsIGAke2xlbmd0aH1gKX1gO1xuICAgIGlmIChMSVZFKVxuICAgICAgTElWRS50ZXh0Q29udGVudCA9IGAkeyFsZW5ndGggJiYgc2VsZi5pbm5lclRleHQudHJpbSgpIHx8IGNvdW50VGV4dH0ke2xpdmVTckZpeH1gO1xuICB9LCAxZTMpO1xuICBpZiAoSVNfSU9TKVxuICAgIHZpc2libGUubWFwKChvcHQsIGluZGV4LCBsZW5ndGgpID0+IHtcbiAgICAgIG9wdC50aXRsZSA9IGAke2luZGV4ICsgMX0vJHtsZW5ndGh9YDtcbiAgICB9KTtcbn07XG5pZiAoSVNfQlJPV1NFUilcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcImxpc3RcIiwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBnZXRSb290KHRoaXMpLmdldEVsZW1lbnRCeUlkKGF0dHIodGhpcywgXCJsaXN0XCIpIHx8IFwiXCIpO1xuICAgIH1cbiAgfSk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWRhdGFsaXN0XCIsIFVIVE1MRGF0YUxpc3RFbGVtZW50KTtcbnZhciBTUExJVF9DSEFSID0gXCJcXHUyMDAxXCIucmVwZWF0KDEwMCk7XG52YXIgRklSRUZPWF9PUFRJT05fQ0xJQ0sgPSBcImluc2VydFJlcGxhY2VtZW50VGV4dFwiO1xudmFyIGdldERhdGFsaXN0VmFsdWUgPSAoe1xuICB2YWx1ZVxufSkgPT4gdmFsdWUuc3BsaXQoU1BMSVRfQ0hBUilbMF07XG5mdW5jdGlvbiBpc0RhdGFsaXN0Q2xpY2soZXZlbnQpIHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgaXNDbGljayA9IGV2ZW50IGluc3RhbmNlb2YgRXZlbnQgJiYgZXZlbnQudHlwZSA9PT0gXCJpbnB1dFwiICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgKCFldmVudC5pbnB1dFR5cGUgfHwgZXZlbnQuaW5wdXRUeXBlID09PSBGSVJFRk9YX09QVElPTl9DTElDSyk7XG4gIGlmIChpc0NsaWNrKSB7XG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgY29uc3QgaWdub3JlZCA9IEFycmF5LmZyb20oKChfYTIgPSBldmVudC50YXJnZXQubGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5vcHRpb25zKSB8fCBbXSkuc29tZShcbiAgICAgIChvcHQpID0+IG9wdC52YWx1ZSA9PT0gdmFsdWUgJiYgIWlzSW50ZXJhY3RpdmVPcHRpb24ob3B0KVxuICAgICk7XG4gICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gdmFsdWUuc3BsaXQoU1BMSVRfQ0hBUilbaWdub3JlZCA/IDEgOiAwXTtcbiAgfVxuICByZXR1cm4gaXNDbGljaztcbn1cblxuLy8gdS10YWdzLnRzXG52YXIgTElWRTI7XG52YXIgSVNfTU9CSUxFID0gSVNfQU5EUk9JRCB8fCBJU19JT1M7XG52YXIgSVNfRklSRUZPWF9NQUMgPSBJU19GSVJFRk9YIHx8IElTX01BQztcbnZhciBFVkVOVFMyID0gXCJpbnB1dCxmb2N1c2luLGZvY3Vzb3V0LGtleWRvd25cIjtcbnZhciBURVhUUzIgPSB7XG4gIGFkZGVkOiBcIkFkZGVkXCIsXG4gIHJlbW92ZTogXCJQcmVzcyB0byByZW1vdmVcIixcbiAgcmVtb3ZlZDogXCJSZW1vdmVkXCIsXG4gIGVtcHR5OiBcIk5vIHNlbGVjdGVkXCIsXG4gIGZvdW5kOiBcIk5hdmlnYXRlIGxlZnQgdG8gZmluZCAlZCBzZWxlY3RlZFwiLFxuICBvZjogXCJvZlwiXG59O1xudmFyIFVIVE1MVGFnc0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgLy8gVXNpbmcgdW5kZXJzY29yZSBpbnN0ZWFkIG9mIHByaXZhdGUgZmllbGRzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgIHRoaXMuX2JsdXJBbm5vdW5jZVJlc2V0ID0gZmFsc2U7XG4gICAgdGhpcy5fYmx1clRpbWVyID0gMDtcbiAgICB0aGlzLl9mb2N1c0luZGV4ID0gbnVsbDtcbiAgICB0aGlzLl9yb290ID0gbnVsbDtcbiAgICB0aGlzLl90ZXh0cyA9IF9fc3ByZWFkVmFsdWVzKHt9LCBURVhUUzIpO1xuICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gICAgICAvLyBDb250ZW50IHNsb3RcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYDpob3N0KDpub3QoW2hpZGRlbl0pKXsgZGlzcGxheTogaW5saW5lLWJsb2NrIH1cbiAgICAgICAgOjpzbG90dGVkKGRhdGEpIHsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IG91dGxpbmU6IG5vbmU7IHBvaW50ZXItZXZlbnRzOiBub25lIH1cbiAgICAgICAgOjpzbG90dGVkKGRhdGEpOjphZnRlciB7IGNvbnRlbnQ6ICdcXFxcMDBENyc7IGNvbnRlbnQ6ICdcXFxcMDBENycgLyAnJzsgcGFkZGluZy1pbmxpbmU6IC41Y2g7IHBvaW50ZXItZXZlbnRzOiBhdXRvIH1cbiAgICAgICAgOjpzbG90dGVkKGRhdGE6Zm9jdXMpOjphZnRlciB7ICR7Rk9DVVNfT1VUTElORX0gfWBcbiAgICAgICAgLy8gU2hvdyBmb2N1cyBvdXRsaW5lIGFyb3VuZCA6OmFmdGVyIG9ubHlcbiAgICAgIClcbiAgICApO1xuICB9XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBhdHRyaWJ1dGVUZXh0cyhURVhUUzIpO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuX3Jvb3QgPSBnZXRSb290KHRoaXMpO1xuICAgIGlmICghTElWRTIpIExJVkUyID0gY3JlYXRlQXJpYUxpdmUoXCJwb2xpdGVcIik7XG4gICAgaWYgKCFMSVZFMi5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChMSVZFMik7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICBvbih0aGlzLl9yb290LCBcImNsaWNrXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMsIEVWRU5UUzIsIHRoaXMpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gcmVuZGVyKHRoaXMpKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socHJvcCwgX3ByZXYsIG5leHQpIHtcbiAgICBhdHRyaWJ1dGVUZXh0cyh0aGlzLl90ZXh0cywgcHJvcCwgbmV4dCk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gICAgb2ZmKHRoaXMuX3Jvb3QgfHwgdGhpcywgXCJjbGlja1wiLCB0aGlzKTtcbiAgICBvZmYodGhpcywgRVZFTlRTMiwgdGhpcyk7XG4gICAgdGhpcy5fcm9vdCA9IG51bGw7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2syKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJmb2N1c2luXCIpIG9uRm9jdXNJbjIodGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImZvY3Vzb3V0XCIpIG9uRm9jdXNPdXQyKHRoaXMpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImlucHV0XCIpIG9uSW5wdXRPcHRpb25DbGljayh0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiKSBvbktleURvd24yKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJtdXRhdGlvblwiKSByZW5kZXIodGhpcywgZXZlbnQpO1xuICB9XG4gIGdldCBpdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKFwiZGF0YVwiKTtcbiAgfVxuICBnZXQgY29udHJvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7XG4gIH1cbn07XG52YXIgZGlzcGF0Y2hDaGFuZ2UgPSAoc2VsZiwgaXRlbSkgPT4ge1xuICByZXR1cm4gc2VsZi5kaXNwYXRjaEV2ZW50KFxuICAgIG5ldyBDdXN0b21FdmVudChcInRhZ3NcIiwge1xuICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICBkZXRhaWw6IHsgaXRlbSwgYWN0aW9uOiBpdGVtLmlzQ29ubmVjdGVkID8gXCJyZW1vdmVcIiA6IFwiYWRkXCIgfVxuICAgIH0pXG4gICk7XG59O1xudmFyIHJlbmRlciA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyLCBfYiwgX2MsIF9kLCBfZTtcbiAgY29uc3QgdGV4dHMgPSBzZWxmLl90ZXh0cztcbiAgY29uc3QgY2hhbmdlID0gTnVtYmVyLmlzTmFOKHNlbGYuX2ZvY3VzSW5kZXgpID8gbnVsbCA6IGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC5kZXRhaWxbMF07XG4gIGNvbnN0IGNoYW5nZUl0ZW0gPSAoY2hhbmdlID09IG51bGwgPyB2b2lkIDAgOiBjaGFuZ2UuYWRkZWROb2Rlc1swXSkgfHwgKGNoYW5nZSA9PSBudWxsID8gdm9pZCAwIDogY2hhbmdlLnJlbW92ZWROb2Rlc1swXSk7XG4gIGNvbnN0IGNoYW5nZVRleHQgPSBgJHtjaGFuZ2VJdGVtID8gYCR7Y2hhbmdlSXRlbS5pc0Nvbm5lY3RlZCA/IHRleHRzLmFkZGVkIDogdGV4dHMucmVtb3ZlZH0gJHtjaGFuZ2VJdGVtLnRleHRDb250ZW50fSwgYCA6IFwiXCJ9YDtcbiAgY29uc3QgbGFiZWwgPSAoKF9jID0gKF9iID0gKF9hMiA9IHNlbGYuY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5sYWJlbHMpID09IG51bGwgPyB2b2lkIDAgOiBfYlswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jLnRleHRDb250ZW50KSB8fCBcIlwiO1xuICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgYXR0cihzZWxmLCBcInJvbGVcIiwgXCJncm91cFwiKTtcbiAgYXR0cihzZWxmLCBcImFyaWEtbGFiZWxcIiwgbGFiZWwpO1xuICBzZWxmLml0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4LCB7IGxlbmd0aCB9KSA9PiB7XG4gICAgY29uc3QgbGFiZWwyID0gYCR7Y2hhbmdlVGV4dH0ke2l0ZW0udGV4dENvbnRlbnR9LCAke3RleHRzLnJlbW92ZX0sICR7aW5kZXggKyAxfSAke3RleHRzLm9mfSAke2xlbmd0aH1gO1xuICAgIGF0dHIoaXRlbSwgXCJhcmlhLWxhYmVsXCIsIGxhYmVsMik7XG4gICAgYXR0cihpdGVtLCBcInJvbGVcIiwgXCJidXR0b25cIik7XG4gICAgaXRlbS50YWJJbmRleCA9IC0xO1xuICAgIGl0ZW0udmFsdWUgPSAoaXRlbS52YWx1ZSB8fCBpdGVtLnRleHRDb250ZW50IHx8IFwiXCIpLnRyaW0oKTtcbiAgICB2YWx1ZXMucHVzaChpdGVtLnZhbHVlKTtcbiAgfSk7XG4gIGNvbnN0IGNvbnRyb2wgPSBzZWxmLmNvbnRyb2w7XG4gIGNvbnN0IGNvbnRyb2xMYWJlbCA9IGAke2NoYW5nZVRleHR9JHtsYWJlbH0sICR7dmFsdWVzLmxlbmd0aCA/IHRleHRzLmZvdW5kLnJlcGxhY2UoXCIlZFwiLCBgJHt2YWx1ZXMubGVuZ3RofWApIDogdGV4dHMuZW1wdHl9YDtcbiAgY29uc3QgbGlzdCA9IGNvbnRyb2wgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXR0cihjb250cm9sLCBcImxpc3RcIikgfHwgXCJcIik7XG4gIGNvbnN0IG9wdGlvbnMgPSBsaXN0ID09IG51bGwgPyB2b2lkIDAgOiBsaXN0LmNoaWxkcmVuO1xuICBpZiAoY29udHJvbCkgYXR0cihjb250cm9sLCBcImFyaWEtbGFiZWxcIiwgY29udHJvbExhYmVsKTtcbiAgaWYgKGxpc3QpIGF0dHIobGlzdCwgU0FGRV9NVUxUSVNFTEVDVEFCTEUsIFwidHJ1ZVwiKTtcbiAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucyB8fCBbXSlcbiAgICBvcHRpb24uc2VsZWN0ZWQgPSB2YWx1ZXMuaW5jbHVkZXMoZ2V0RGF0YWxpc3RWYWx1ZShvcHRpb24pKTtcbiAgaWYgKGNoYW5nZVRleHQpIHtcbiAgICBjb25zdCBuZXh0Rm9jdXMgPSBzZWxmLml0ZW1zWyhzZWxmLl9mb2N1c0luZGV4IHx8IDEpIC0gMV0gfHwgY29udHJvbDtcbiAgICBjb25zdCBzYW1lRm9jdXMgPSBuZXh0Rm9jdXMgPT09ICgoX2QgPSBnZXRSb290KHNlbGYpKSA9PSBudWxsID8gdm9pZCAwIDogX2QuYWN0aXZlRWxlbWVudCk7XG4gICAgY29uc3QgdG1wRm9jdXMgPSBvcHRpb25zIHx8IHNlbGYuaXRlbXM7XG4gICAgc2VsZi5fYmx1ckFubm91bmNlUmVzZXQgPSBmYWxzZTtcbiAgICBpZiAobmV4dEZvY3VzID09PSBjb250cm9sKSB7XG4gICAgICBpZiAoc2FtZUZvY3VzKSB7XG4gICAgICAgIGlmIChJU19NT0JJTEUgJiYgTElWRTIpIExJVkUyLnRleHRDb250ZW50ID0gY2hhbmdlVGV4dDtcbiAgICAgICAgZWxzZSAoX2UgPSB0bXBGb2N1c1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lLmZvY3VzKCk7XG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IG5leHRGb2N1cyA9PSBudWxsID8gdm9pZCAwIDogbmV4dEZvY3VzLmZvY3VzKCksIDEwMCk7XG4gICAgfSBlbHNlIG5leHRGb2N1cyA9PSBudWxsID8gdm9pZCAwIDogbmV4dEZvY3VzLmZvY3VzKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIUlTX0ZJUkVGT1hfTUFDKSByZXR1cm4gcmVuZGVyKHNlbGYpO1xuICAgICAgc2VsZi5fYmx1ckFubm91bmNlUmVzZXQgPSB0cnVlO1xuICAgIH0sIDUwMCk7XG4gIH1cbn07XG52YXIgb25Gb2N1c0luMiA9IChzZWxmLCB7IHRhcmdldCB9KSA9PiB7XG4gIGNsZWFyVGltZW91dChzZWxmLl9ibHVyVGltZXIpO1xuICBzZWxmLl9mb2N1c0luZGV4ID0gWy4uLnNlbGYuaXRlbXNdLmluZGV4T2YodGFyZ2V0KTtcbn07XG52YXIgb25Gb2N1c091dDIgPSAoc2VsZikgPT4ge1xuICBpZiAoc2VsZi5fYmx1ckFubm91bmNlUmVzZXQpIHJlbmRlcihzZWxmKTtcbiAgc2VsZi5fYmx1clRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgc2VsZi5fZm9jdXNJbmRleCA9IG51bGw7XG4gIH0pO1xufTtcbnZhciBvbkNsaWNrMiA9IChzZWxmLCB7IHRhcmdldCwgY2xpZW50WDogeCwgY2xpZW50WTogeSB9KSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IGl0ZW1zID0gc2VsZi5jb250YWlucyh0YXJnZXQpID8gWy4uLnNlbGYuaXRlbXNdIDogbnVsbDtcbiAgY29uc3QgaXRlbVJlbW92ZSA9IGl0ZW1zID09IG51bGwgPyB2b2lkIDAgOiBpdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLmNvbnRhaW5zKHRhcmdldCkpO1xuICBjb25zdCBpdGVtQ2xpY2tlZCA9IGl0ZW1zID09IG51bGwgPyB2b2lkIDAgOiBpdGVtcy5maW5kKChpdGVtKSA9PiB7XG4gICAgY29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfSA9IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIHkgPj0gdG9wICYmIHkgPD0gYm90dG9tICYmIHggPj0gbGVmdCAmJiB4IDw9IHJpZ2h0O1xuICB9KTtcbiAgaWYgKGl0ZW1SZW1vdmUpIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW1SZW1vdmUpICYmIGl0ZW1SZW1vdmUucmVtb3ZlKCk7XG4gIGVsc2UgaWYgKGl0ZW1DbGlja2VkKSBpdGVtQ2xpY2tlZC5mb2N1cygpO1xuICBlbHNlIGlmICh0YXJnZXQgPT09IHNlbGYpIChfYTIgPSBzZWxmLmNvbnRyb2wpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZm9jdXMoKTtcbn07XG52YXIgb25JbnB1dE9wdGlvbkNsaWNrID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0O1xuICBpZiAoIWlzRGF0YWxpc3RDbGljayhldmVudCkgfHwgIShpbnB1dCA9PSBudWxsID8gdm9pZCAwIDogaW5wdXQudmFsdWUudHJpbSgpKSkgcmV0dXJuO1xuICBjb25zdCB2YWx1ZSA9IGdldERhdGFsaXN0VmFsdWUoaW5wdXQpO1xuICBjb25zdCBpdGVtcyA9IFsuLi5zZWxmLml0ZW1zXTtcbiAgY29uc3Qgb3B0aW9ucyA9IFsuLi4oKF9hMiA9IGlucHV0ID09IG51bGwgPyB2b2lkIDAgOiBpbnB1dC5saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNoaWxkcmVuKSB8fCBbXV07XG4gIGNvbnN0IG9wdGlvbkNsaWNrZWQgPSBvcHRpb25zLmZpbmQoKG9wdCkgPT4gZ2V0RGF0YWxpc3RWYWx1ZShvcHQpID09PSB2YWx1ZSk7XG4gIGNvbnN0IGl0ZW1SZW1vdmUgPSBpdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZSk7XG4gIGNvbnN0IGl0ZW1BZGQgPSBjcmVhdGVFbGVtZW50KFwiZGF0YVwiLCAob3B0aW9uQ2xpY2tlZCA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9uQ2xpY2tlZC50ZXh0KSB8fCB2YWx1ZSwge1xuICAgIHZhbHVlXG4gIH0pO1xuICBpbnB1dC52YWx1ZSA9IFwiXCI7XG4gIGlmICghZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgaXRlbVJlbW92ZSB8fCBpdGVtQWRkKSkgcmV0dXJuO1xuICBpZiAoaXRlbVJlbW92ZSkgcmV0dXJuIGl0ZW1SZW1vdmUucmVtb3ZlKCk7XG4gIGlmICghaXRlbXNbMF0pIHJldHVybiBzZWxmLnByZXBlbmQoaXRlbUFkZCk7XG4gIGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyZW5kXCIsIGl0ZW1BZGQpO1xufTtcbnZhciBvbktleURvd24yID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTIsIF9iO1xuICBjb25zdCB7IGtleSwgcmVwZWF0LCB0YXJnZXQgfSA9IGV2ZW50O1xuICBjb25zdCBpbnB1dCA9IHNlbGYuY29udHJvbCA9PT0gdGFyZ2V0ID8gc2VsZi5jb250cm9sIDogbnVsbDtcbiAgY29uc3QgaXNDYXJldEluc2lkZSA9IGlucHV0ID09IG51bGwgPyB2b2lkIDAgOiBpbnB1dC5zZWxlY3Rpb25FbmQ7XG4gIGxldCBpbmRleCA9IGlucHV0ID8gc2VsZi5pdGVtcy5sZW5ndGggOiAoX2EyID0gc2VsZi5fZm9jdXNJbmRleCkgIT0gbnVsbCA/IF9hMiA6IC0xO1xuICBpZiAoaW5kZXggPT09IC0xIHx8ICFpbnB1dCAmJiBhc0J1dHRvbihldmVudCkpIHJldHVybjtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1JpZ2h0XCIgJiYgIWlucHV0KSBpbmRleCArPSAxO1xuICBlbHNlIGlmIChrZXkgPT09IFwiQXJyb3dMZWZ0XCIgJiYgIWlzQ2FyZXRJbnNpZGUpIGluZGV4IC09IDE7XG4gIGVsc2UgaWYgKGtleSA9PT0gXCJFbnRlclwiICYmIGlucHV0KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICByZXR1cm4gaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJpbnB1dFwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICB9IGVsc2UgaWYgKChrZXkgPT09IFwiQmFja3NwYWNlXCIgfHwga2V5ID09PSBcIkRlbGV0ZVwiKSAmJiAhaXNDYXJldEluc2lkZSkge1xuICAgIGNvbnN0IHJlbW92ZSA9ICFyZXBlYXQgJiYgc2VsZi5pdGVtc1tpbmRleF07XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAocmVtb3ZlKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgcmVtb3ZlKSAmJiByZW1vdmUucmVtb3ZlKCk7XG4gICAgaWYgKGlucHV0KSBpbmRleCAtPSAxO1xuICB9IGVsc2UgcmV0dXJuO1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAoX2IgPSBzZWxmLml0ZW1zW01hdGgubWF4KDAsIGluZGV4KV0gfHwgc2VsZi5jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2IuZm9jdXMoKTtcbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhZ3NcIiwgVUhUTUxUYWdzRWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MVGFnc0VsZW1lbnQgfTtcbiJdLCJuYW1lcyI6WyJnZXRTdGVwcyIsIm5vdyIsIm1heCIsInNob3ciLCJvZmZzZXQiLCJzdGFydCIsImVuZCIsInBhZ2VzIiwiXyIsImkiLCJwYWdpbmF0aW9uIiwiY3VycmVudCIsInRvdGFsIiwicGFnZSIsImluZGV4IiwiUVVJQ0tfRVZFTlQiLCJJU19CUk9XU0VSIiwiYXR0ciIsImVsIiwibmFtZSIsInZhbHVlIiwiaWQiLCJVVUlEIiwidXNlSWQiLCJldmVudHMiLCJhY3Rpb24iLCJlbGVtZW50IiwicmVzdCIsInR5cGUiLCJvbiIsIlNDUk9MTEVSIiwiVEFSR0VUUyIsIlRBUkdFVFNfVVBEQVRFIiwidXBkYXRlIiwiUE9TSVRJT04iLCJhbmNob3JQb3NpdGlvbiIsInRhcmdldCIsImFuY2hvciIsInBvc2l0aW9uIiwicGxhY2UiLCJfYSIsImlzSFRNTEFuY2hvciIsInRhcmdldFciLCJ0YXJnZXRIIiwiYW5jaG9yVyIsImFuY2hvckgiLCJ3aWR0aCIsImhlaWdodCIsImxlZnQiLCJ0b3AiLCJhbmNob3JYIiwiYW5jaG9yWSIsImhhc1NwYWNlTGVmdCIsImhhc1NwYWNlUmlnaHQiLCJoYXNTcGFjZU92ZXIiLCJoYXNTcGFjZVVuZGVyIiwicG9zaXRpb25SaWdodCIsInBvc2l0aW9uVW5kZXIiLCJjZW50ZXJYIiwiY2VudGVyWSIsImlzVmVydGljYWwiLCJjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyIiwiY2FsbGJhY2siLCJxdWV1ZSIsIm9uRnJhbWUiLCJvblRpbWVyIiwib2JzZXJ2ZXIiLCJNVVRBVE9SUyIsIm9uTXV0YXRpb24iLCJjbGFzc05hbWUiLCJlbGVtcyIsIm11dGF0b3IiLCJvbkxvYWRlZCIsImlzSW5wdXRMaWtlIiwiQ1NTX0JSRUFEQ1JVTUJTIiwic3R5bGVzIiwiaGFuZGxlTXV0YXRpb24iLCJicmVhZGNydW1icyIsImJyZWFkY3VtYnMiLCJjcnVtYiIsImxlbmd0aCIsIkNTU19ESUFMT0ciLCJESUFMT0dTIiwiaGFuZGxlTW9kYWwiLCJkaWFsb2ciLCJoYW5kbGVDbGljayIsIngiLCJ5IiwicmlnaHQiLCJib3R0b20iLCJoYW5kbGVJbmplY3QiLCJldmVudCIsImZpcnN0IiwiX19kZWZQcm9wIiwiX19nZXRPd25Qcm9wU3ltYm9scyIsIl9faGFzT3duUHJvcCIsIl9fcHJvcElzRW51bSIsIl9fZGVmTm9ybWFsUHJvcCIsIm9iaiIsImtleSIsIl9fc3ByZWFkVmFsdWVzIiwiYSIsImIiLCJwcm9wIiwiSVNfQU5EUk9JRCIsIklTX0lPUyIsIklTX1NBRkFSSSIsIklTX0JST1dTRVIkNCIsIlNBRkVfTEFCRUxMRURCWSIsIlNBRkVfTVVMVElTRUxFQ1RBQkxFIiwiRElTUExBWV9CTE9DSyIsIkZPQ1VTX09VVExJTkUiLCJVSFRNTEVsZW1lbnQiLCJfYTIiLCJvZmYiLCJhdHRhY2hTdHlsZSIsImNzcyIsImNyZWF0ZUVsZW1lbnQiLCJvYnNlcnZlcnMiLCJtdXRhdGlvbk9ic2VydmVyIiwib3B0aW9ucyIsImRldGFpbCIsImdldFJvb3QiLCJub2RlIiwicm9vdCIsInRhZ05hbWUiLCJ0ZXh0IiwiYXR0cnMiLCJjdXN0b21FbGVtZW50cyIsImluc3RhbmNlIiwiY3JlYXRlQXJpYUxpdmUiLCJtb2RlIiwibGl2ZSIsImF0dHJpYnV0ZVRleHRzIiwidGV4dHMiLCJrZXkyIiwiRElTQUJMRUQiLCJTRUxFQ1RFRCIsIlVIVE1MT3B0aW9uRWxlbWVudCIsIklTX1BSRVNTIiwiTElWRV9USU1FUiIsIkxJVkVfU1JfRklYIiwiTElWRSIsIklTX1NBRkFSSV9NQUMiLCJFVkVOVFMiLCJURVhUUyIsIlVIVE1MRGF0YUxpc3RFbGVtZW50IiwiZGlzY29ubmVjdElucHV0IiwiX3ByZXYiLCJuZXh0IiwiaW5wdXRzIiwiaW5wdXQiLCJzZXR1cElucHV0Iiwib25DbGljayIsIm9uRm9jdXNJbiIsIm9uRm9jdXNPdXQiLCJvbktleURvd24iLCJzZXR1cE9wdGlvbnMiLCJzZWxmIiwiaXNJbnB1dCIsInNldEV4cGFuZGVkIiwiX2IiLCJfYyIsIl9kIiwiX2UiLCJpc1NpbmdsZSIsIm9wdGlvbiIsIm9wdCIsImlzSW50ZXJhY3RpdmVPcHRpb24iLCJhY3RpdmUiLCJnZXRWaXNpYmxlT3B0aW9ucyIsIm9wZW4iLCJzYW5pdGl6ZSIsInN0ciIsImhpZGRlbiIsImlzVHlwaW5nIiwiaXNEYXRhbGlzdENsaWNrIiwiY29udGVudCIsInZpc2libGUiLCJsaXZlU3JGaXgiLCJjb3VudFRleHQiLCJTUExJVF9DSEFSIiwiRklSRUZPWF9PUFRJT05fQ0xJQ0siLCJpc0NsaWNrIiwiaWdub3JlZCIsIkNTU19GSUVMRCIsIkNTU19QUk9QRVJUWV9PVkVSIiwiQ1NTX1BST1BFUlRZX1VOREVSIiwiQ1NTX1ZBTElEQVRJT05TIiwiQ1NTX1ZBTElEQVRJT04iLCJmaWVsZHMiLCJmaWVsZCIsImxhYmVscyIsImRlc2NzIiwiZGF0YWxpc3QiLCJ2YWxpZCIsImxhYmVsIiwicmVuZGVyRGF0YWxpc3QiLCJyZW5kZXJDb3VudGVyIiwicmVuZGVyVGV4dGFyZWFTaXplIiwidGV4dGFyZWEiLCJsaXN0Iiwic3R5bGUiLCJ0YWdzIiwiaTExbiIsImxpbWl0IiwicmVtYWluZGVyIiwibmV4dEludmFsaWQiLCJwcmV2SW52YWxpZCIsIm92ZXIiLCJ1bmRlciIsImhhbmRsZUlucHV0IiwiaGFuZGxlSW52YWxpZCIsIkNTU19GSUVMRFNFVCIsImZpZWxkc2V0cyIsImZpZWxkc2V0IiwidmFsaWRhdGlvbklkIiwiQ1NTX1NIRUVUIiwiQ1NTX0FQUCIsIkNTU19OQVYiLCJDU1NfVE9HR0xFIiwiS0VZX1RPR0dMRSIsIk1PQklMRV9OQVZfQlJFQUtQT0lOVCIsImhhbmRsZVRvZ2dsZUNsaWNrIiwidG9nZ2xlRXhwYW5kZWQiLCJOQVYiLCJNQUlOIiwiYXBwcyIsImFwcCIsInRvZ2dsZSIsInByZXYiLCJOQVZfSCIsIk5BVl9ZIiwiT0ZGU0VUX1kiLCJTQ1JPTExfVVAiLCJTVElDS19ESVIiLCJXSU5fSCIsIldJTl9ZIiwiTkFWX0xUX1dJTiIsIktFWV9OQVZfQUxJR04iLCJLRVlfTkFWX0JPVFRPTSIsIktFWV9OQVZfUE9TIiwiS0VZX05BVl9UT1AiLCJoYW5kbGVTY3JvbGwiLCJORVhUX1kiLCJORVhUX1VQIiwiQ1NTX0xPR08iLCJsb2dvIiwiaWNvbiIsInN2ZyIsImlzRG90IiwiYmFjayIsIkNTU19QT1BPVkVSIiwiT1BFTl9QT1BPVkVSUyIsImhhbmRsZVRvZ2dsZSIsIm5ld1N0YXRlIiwiaGFuZGxlTGlua0NsaWNrIiwiY2xvc2UiLCJwb3BvdmVyIiwiQ1NTX1RBQkxFIiwidGFibGVzIiwidGFibGUiLCJ0aHMiLCJncm91cCIsImlzVGJvZHkiLCJyb3ciLCJjZWxsIiwiREVTQ1JJQkVEQlkiLCJFU0MiLCJMQUJFTExFREJZIiwiUE9TSVRJT05fQ1NTX1BST1BFUlRZIiwiVEhST1RUTEVfREVMQVkiLCJUT09MVElQIiwiQU5DSE9SIiwiTEFTVF9DQUxMIiwiVEhST1RUTEUiLCJoYW5kbGVNb3ZlIiwid2FpdCIsImhhbmRsZU1vdmVUaHJvdHRsZWQiLCJoYWRMYWJlbCIsImhhc0xhYmVsIiwiSVNfQlJPV1NFUiQzIiwiYXNCdXR0b24iLCJ2YWwiLCJVSFRNTERldGFpbHNFbGVtZW50IiwiaGlkZSIsInVEZXRhaWxzTGlzdCIsInVEZXRhaWxzIiwic3VtbWFyeSIsImlzU3VtbWFyeSIsIlVIVE1MU3VtbWFyeUVsZW1lbnQiLCJJU19GSVJFRk9YIiwiSVNfQlJPV1NFUiQyIiwiZ2V0TGFiZWwiLCJpZDIiLCJhY2MiLCJlbDIiLCJfYTMiLCJTS0lQX0FUVFJfQ0hBTkdFIiwiVUhUTUxQcm9ncmVzc0VsZW1lbnQiLCJyb2xlSW1hZ2UiLCJwZXJjZW50YWdlIiwiZ2V0TnVtYmVyIiwic2V0TnVtYmVyIiwiaXNOdW1lcmljIiwiSVNfQlJPV1NFUiQxIiwiQVJJQV9DT05UUk9MUyIsIkFSSUFfU0VMRUNURUQiLCJVSFRNTFRhYnNFbGVtZW50IiwicXVlcnlXaXRob3V0TmVzdGVkIiwiZ2V0U2VsZWN0ZWRJbmRleCIsInNldFNlbGVjdGVkIiwiVUhUTUxUYWJMaXN0RWxlbWVudCIsInRhYiIsInRhYnMiLCJVSFRNTFRhYkVsZW1lbnQiLCJwYW5lbHMiLCJuZXh0UGFuZWwiLCJnZXRQYW5lbCIsInBhbmVsIiwidGFibGlzdCIsInRhYkxpc3QiLCJVSFRNTFRhYlBhbmVsRWxlbWVudCIsImlzRm9jdXNhYmxlIiwidGFnIiwiSVNfTUFDIiwiZ2V0RGF0YWxpc3RWYWx1ZSIsIkxJVkUyIiwiSVNfTU9CSUxFIiwiSVNfRklSRUZPWF9NQUMiLCJFVkVOVFMyIiwiVEVYVFMyIiwiVUhUTUxUYWdzRWxlbWVudCIsInJlbmRlciIsIm9uQ2xpY2syIiwib25Gb2N1c0luMiIsIm9uRm9jdXNPdXQyIiwib25JbnB1dE9wdGlvbkNsaWNrIiwib25LZXlEb3duMiIsImRpc3BhdGNoQ2hhbmdlIiwiaXRlbSIsImNoYW5nZSIsImNoYW5nZUl0ZW0iLCJjaGFuZ2VUZXh0IiwidmFsdWVzIiwibGFiZWwyIiwiY29udHJvbCIsImNvbnRyb2xMYWJlbCIsIm5leHRGb2N1cyIsInNhbWVGb2N1cyIsInRtcEZvY3VzIiwiaXRlbXMiLCJpdGVtUmVtb3ZlIiwiaXRlbUNsaWNrZWQiLCJvcHRpb25DbGlja2VkIiwiaXRlbUFkZCIsInJlcGVhdCIsImlzQ2FyZXRJbnNpZGUiLCJyZW1vdmUiXSwibWFwcGluZ3MiOiIwQ0FBQSxNQUFNQSxHQUFXLENBQ2hCQyxFQUNBQyxFQUNBQyxFQUFPLE9BQU8sb0JBQ1YsQ0FDRSxNQUFBQyxHQUFVRCxFQUFPLEdBQUssRUFDdEJFLEVBQVEsS0FBSyxJQUFJLEtBQUssSUFBSUosRUFBTSxLQUFLLE1BQU1HLENBQU0sRUFBR0YsRUFBTUMsRUFBTyxDQUFDLEVBQUcsQ0FBQyxFQUN0RUcsRUFBTSxLQUFLLElBQUksS0FBSyxJQUFJTCxFQUFNLEtBQUssS0FBS0csQ0FBTSxFQUFHRCxDQUFJLEVBQUdELENBQUcsRUFDM0RLLEVBQVEsTUFBTSxLQUFLLENBQUUsT0FBUUQsRUFBTSxFQUFJRCxDQUFTLEVBQUEsQ0FBQ0csRUFBR0MsSUFBTUEsRUFBSUosQ0FBSyxFQUVyRSxPQUFBRixFQUFPLEdBQUtFLEVBQVEsS0FBUyxPQUFPLEVBQUcsRUFBRyxFQUFHLENBQUMsRUFDOUNGLEVBQU8sR0FBS0csRUFBTUosS0FBVyxPQUFPLEdBQUksRUFBRyxFQUFHQSxDQUFHLEVBQzlDSyxDQUNSLEVBRWFHLEdBQWEsQ0FBQyxDQUFFLFFBQUFDLEVBQVUsRUFBRyxNQUFB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
|
|
12
|
+
::slotted(data:focus)::after { ${Qn} }`))}static get observedAttributes(){return vt(fo)}connectedCallback(){this._root=_t(this),V||(V=to("polite")),V.isConnected||document.body.appendChild(V),mt(this,{childList:!0}),X(this._root,"click",this),X(this,uo,this),setTimeout(()=>gt(this))}attributeChangedCallback(t,e,n){vt(this._texts,t,n)}disconnectedCallback(){mt(this,!1),G(this._root||this,"click",this),G(this,uo,this),this._root=null}handleEvent(t){t.defaultPrevented||(t.type==="click"&&us(this,t),t.type==="focusin"&&ds(this,t),t.type==="focusout"&&cs(this),t.type==="input"&&fs(this,t),t.type==="keydown"&&ps(this,t),t.type==="mutation"&>(this,t))}get items(){return this.querySelectorAll("data")}get control(){return this.querySelector("input")}},Jt=(t,e)=>t.dispatchEvent(new CustomEvent("tags",{bubbles:!0,cancelable:!0,detail:{item:e,action:e.isConnected?"remove":"add"}})),gt=(t,e)=>{var n,o,i,s,r;const a=t._texts,d=Number.isNaN(t._focusIndex)?null:e==null?void 0:e.detail[0],l=(d==null?void 0:d.addedNodes[0])||(d==null?void 0:d.removedNodes[0]),f=`${l?`${l.isConnected?a.added:a.removed} ${l.textContent}, `:""}`,h=((i=(o=(n=t.control)==null?void 0:n.labels)==null?void 0:o[0])==null?void 0:i.textContent)||"",w=[];u(t,"role","group"),u(t,"aria-label",h),t.items.forEach((m,Q,{length:J})=>{const te=`${f}${m.textContent}, ${a.remove}, ${Q+1} ${a.of} ${J}`;u(m,"aria-label",te),u(m,"role","button"),m.tabIndex=-1,m.value=(m.value||m.textContent||"").trim(),w.push(m.value)});const E=t.control,Zt=`${f}${h}, ${w.length?a.found.replace("%d",`${w.length}`):a.empty}`,Y=E&&document.getElementById(u(E,"list")||""),yt=Y==null?void 0:Y.children;E&&u(E,"aria-label",Zt),Y&&u(Y,Wt,"true");for(const m of yt||[])m.selected=w.includes(Qt(m));if(f){const m=t.items[(t._focusIndex||1)-1]||E,Q=m===((s=_t(t))==null?void 0:s.activeElement),J=yt||t.items;t._blurAnnounceReset=!1,m===E?(Q&&(rs&&V?V.textContent=f:(r=J[0])==null||r.focus()),setTimeout(()=>m==null?void 0:m.focus(),100)):m==null||m.focus(),setTimeout(()=>{if(!as)return gt(t);t._blurAnnounceReset=!0},500)}},ds=(t,{target:e})=>{clearTimeout(t._blurTimer),t._focusIndex=[...t.items].indexOf(e)},cs=t=>{t._blurAnnounceReset&>(t),t._blurTimer=setTimeout(()=>{t._focusIndex=null})},us=(t,{target:e,clientX:n,clientY:o})=>{var i;const s=t.contains(e)?[...t.items]:null,r=s==null?void 0:s.find(d=>d.contains(e)),a=s==null?void 0:s.find(d=>{const{top:l,right:f,bottom:h,left:w}=d.getBoundingClientRect();return o>=l&&o<=h&&n>=w&&n<=f});r?Jt(t,r)&&r.remove():a?a.focus():e===t&&((i=t.control)==null||i.focus())},fs=(t,e)=>{var n;const o=e.target;if(!co(e)||!(o!=null&&o.value.trim()))return;const i=Qt(o),s=[...t.items],a=[...((n=o==null?void 0:o.list)==null?void 0:n.children)||[]].find(f=>Qt(f)===i),d=s.find(f=>f.value===i),l=B("data",(a==null?void 0:a.text)||i,{value:i});if(o.value="",!!Jt(t,d||l)){if(d)return d.remove();if(!s[0])return t.prepend(l);s[s.length-1].insertAdjacentElement("afterend",l)}},ps=(t,e)=>{var n,o;const{key:i,repeat:s,target:r}=e,a=t.control===r?t.control:null,d=a==null?void 0:a.selectionEnd;let l=a?t.items.length:(n=t._focusIndex)!=null?n:-1;if(!(l===-1||!a&&Gi(e))){if(i==="ArrowRight"&&!a)l+=1;else if(i==="ArrowLeft"&&!d)l-=1;else{if(i==="Enter"&&a)return e.preventDefault(),a.dispatchEvent(new Event("input",{bubbles:!0}));if((i==="Backspace"||i==="Delete")&&!d){const f=!s&&t.items[l];if(e.preventDefault(),f)return Jt(t,f)&&f.remove();a&&(l-=1)}else return}e.preventDefault(),(o=t.items[Math.max(0,l)]||t.control)==null||o.focus()}};return jt.define("u-tags",ls),W.pagination=vo,W.styles=bo,W.version=mo,Object.defineProperty(W,Symbol.toStringTag,{value:"Module"}),W}({});
|
|
13
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vZGVzaWduc3lzdGVtL3BhZ2luYXRpb24vcGFnaW5hdGlvbi1oZWxwZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vdXRpbHMudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC10b2dnbGUuanMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9icmVhZGNydW1icy9icmVhZGNydW1icy1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9kaWFsb2cvZGlhbG9nLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2Vycm9yc3VtbWFyeS9lcnJvcnN1bW1hcnktb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kYXRhbGlzdC9kaXN0L3UtZGF0YWxpc3QuanMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGQvZmllbGQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGRzZXQvZmllbGRzZXQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vbG9nby9sb2dvLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3BvcG92ZXIvcG9wb3Zlci1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90YWJsZS90YWJsZS1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b29sdGlwL3Rvb2x0aXAtb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kZXRhaWxzL2Rpc3QvdS1kZXRhaWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtcHJvZ3Jlc3MvZGlzdC91LXByb2dyZXNzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LXRhZ3MvZGlzdC91LXRhZ3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZ2V0U3RlcHMgPSAoXG5cdG5vdzogbnVtYmVyLFxuXHRtYXg6IG51bWJlcixcblx0c2hvdyA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbikgPT4ge1xuXHRjb25zdCBvZmZzZXQgPSAoc2hvdyAtIDEpIC8gMjtcblx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heChNYXRoLm1pbihub3cgLSBNYXRoLmZsb29yKG9mZnNldCksIG1heCAtIHNob3cgKyAxKSwgMSk7XG5cdGNvbnN0IGVuZCA9IE1hdGgubWluKE1hdGgubWF4KG5vdyArIE1hdGguY2VpbChvZmZzZXQpLCBzaG93KSwgbWF4KTtcblx0Y29uc3QgcGFnZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBlbmQgKyAxIC0gc3RhcnQgfSwgKF8sIGkpID0+IGkgKyBzdGFydCk7XG5cblx0aWYgKHNob3cgPiA0ICYmIHN0YXJ0ID4gMSkgcGFnZXMuc3BsaWNlKDAsIDIsIDEsIDApO1xuXHRpZiAoc2hvdyA+IDMgJiYgZW5kIDwgbWF4KSBwYWdlcy5zcGxpY2UoLTIsIDIsIDAsIG1heCk7XG5cdHJldHVybiBwYWdlcztcbn07XG5cbmV4cG9ydCBjb25zdCBwYWdpbmF0aW9uID0gKHsgY3VycmVudCA9IDEsIHRvdGFsID0gMTAsIHNob3cgPSA3IH0pID0+ICh7XG5cdHByZXY6IGN1cnJlbnQgPiAxID8gY3VycmVudCAtIDEgOiAwLFxuXHRuZXh0OiBjdXJyZW50IDwgdG90YWwgPyBjdXJyZW50ICsgMSA6IDAsXG5cdHBhZ2VzOiBnZXRTdGVwcyhjdXJyZW50LCB0b3RhbCwgc2hvdykubWFwKChwYWdlLCBpbmRleCkgPT4gKHtcblx0XHRjdXJyZW50OiBwYWdlID09PSBjdXJyZW50ICYmIChcInBhZ2VcIiBhcyBjb25zdCksXG5cdFx0a2V5OiBga2V5LSR7cGFnZX0tJHtpbmRleH1gLFxuXHRcdHBhZ2UsXG5cdH0pKSxcbn0pO1xuIiwiaW1wb3J0IHsgY2xzeCB9IGZyb20gXCJjbHN4XCI7XG5cbmV4cG9ydCBjb25zdCBRVUlDS19FVkVOVCA9IHsgY2FwdHVyZTogdHJ1ZSwgcGFzc2l2ZTogdHJ1ZSB9O1xuZXhwb3J0IGNvbnN0IElTX0JST1dTRVIgPVxuXHR0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIjtcblxuLy8gVE9ETzogRG9jdW1lbnRhdGlvbiBmb3IgcHJldHR5TnVtYmVyXG5sZXQgSU5UTF9OVU06IEludGwuTnVtYmVyRm9ybWF0IHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHByZXR0eU51bWJlcihudW1iZXI6IG51bWJlciB8IHN0cmluZykge1xuXHRpZiAoIUlOVExfTlVNKVxuXHRcdElOVExfTlVNID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KFxuXHRcdFx0KElTX0JST1dTRVIgJiYgYXR0cihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIFwibGFuZ1wiKSkgfHwgXCJub1wiLFxuXHRcdCk7XG5cdHJldHVybiBJTlRMX05VTS5mb3JtYXQoTnVtYmVyKG51bWJlcikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVib3VuY2U8VCBleHRlbmRzIHVua25vd25bXT4oXG5cdGNhbGxiYWNrOiAoLi4uYXJnczogVCkgPT4gdm9pZCxcblx0ZGVsYXk6IG51bWJlcixcbikge1xuXHRsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuXG5cdHJldHVybiAoLi4uYXJnczogVCkgPT4ge1xuXHRcdGNsZWFyVGltZW91dCh0aW1lcik7XG5cdFx0dGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGNhbGxiYWNrKC4uLmFyZ3MpLCBkZWxheSk7XG5cdH07XG59XG5cbi8qKlxuICogYXR0clxuICogQGRlc2NyaXB0aW9uIFV0aWxpdHkgdG8gcXVpY2tseSBnZXQsIHNldCBhbmQgcmVtb3ZlIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSBlbCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSBuYW1lIFRoZSBhdHRyaWJ1dGUgbmFtZSB0byBnZXQsIHNldCBvciByZW1vdmUsIG9yIGEgb2JqZWN0IHRvIHNldCBtdWx0aXBsZSBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0gdmFsdWUgQSB2YWxpZCBhdHRyaWJ1dGUgdmFsdWUgb3IgbnVsbCB0byByZW1vdmUgYXR0cmlidXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRyKFxuXHRlbDogRWxlbWVudCxcblx0bmFtZTogc3RyaW5nLFxuXHR2YWx1ZT86IHN0cmluZyB8IG51bGwsXG4pOiBzdHJpbmcgfCBudWxsIHtcblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSkgPz8gbnVsbDsgLy8gRmFsbGJhY2sgdG8gbnVsbCBvbmx5IGlmIGVsIGlzIHVuZGVmaW5lZFxuXHRpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblx0ZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcblx0cmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogdXNlSWRcbiAqIEByZXR1cm4gQSBnZW5lcmF0ZWQgdW5pcXVlIElEXG4gKi9cbmxldCBpZCA9IDA7XG5jb25zdCBVVUlEID0gYCR7RGF0ZS5ub3coKS50b1N0cmluZygzNil9JHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCA1KX1gO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlkKGVsOiBFbGVtZW50KSB7XG5cdGlmICghZWwuaWQpIGVsLmlkID0gYCR7VVVJRH0keysraWR9YDtcblx0cmV0dXJuIGVsLmlkO1xufVxuXG4vLyBJbnRlcm5hbCBoZWxwZXIgZm9yIG9uIC8gb2ZmXG5jb25zdCBldmVudHMgPSAoXG5cdGFjdGlvbjogXCJhZGRcIiB8IFwicmVtb3ZlXCIsXG5cdGVsZW1lbnQ6IE5vZGUgfCBXaW5kb3csXG5cdHJlc3Q6IFBhcmFtZXRlcnM8dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI+LFxuKTogdm9pZCA9PiB7XG5cdGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuXHRcdHJlc3RbMF0gPSB0eXBlO1xuXHRcdGVsZW1lbnRbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXSguLi5yZXN0KTtcblx0fVxufTtcblxuLyoqXG4gKiBvblxuICogQHBhcmFtIGVsZW1lbnQgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gdHlwZXMgQSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGV2ZW50IHR5cGVzXG4gKiBAcGFyYW0gbGlzdGVuZXIgQW4gZXZlbnQgbGlzdGVuZXIgZnVuY3Rpb24gb3IgbGlzdGVuZXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBvbiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xuXG4vKipcbiAqIG9mZlxuICogQHBhcmFtIGVsZW1lbnQgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gdHlwZXMgQSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGV2ZW50IHR5cGVzXG4gKiBAcGFyYW0gbGlzdGVuZXIgQW4gZXZlbnQgbGlzdGVuZXIgZnVuY3Rpb24gb3IgbGlzdGVuZXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBvZmYgPSAoXG5cdGVsZW1lbnQ6IE5vZGUgfCBXaW5kb3csXG5cdC4uLnJlc3Q6IFBhcmFtZXRlcnM8dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXI+XG4pOiB2b2lkID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcblxuLyoqXG4gKiBTY3JvbGxlciB0YXJnZXMgaGVscGluZyBhbmNob3JQb3NpdGlvblxuICovXG5jb25zdCBTQ1JPTExFUiA9IElTX0JST1dTRVIgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpIDogbnVsbDsgLy8gVXNlZCB0byBlbnN1cmUgd2UgaGF2ZSBzY3JvbGxhYmlsaXR5IHVuZGVyXG5jb25zdCBUQVJHRVRTID0gbmV3IE1hcDxFbGVtZW50LCAoKSA9PiB2b2lkPigpOyAvLyBTdG9yZSBjdXJyZW50IG9wZW4gcG9wcGVycyBhbmQgdGhlaXIgdXBkYXRlIGZ1bmN0aW9uc1xuY29uc3QgVEFSR0VUU19VUERBVEUgPSAoKSA9PiB7XG5cdGZvciAoY29uc3QgW18sIHVwZGF0ZV0gb2YgVEFSR0VUUykgdXBkYXRlKCk7XG59O1xuXG5pZiAoU0NST0xMRVIpIHtcblx0U0NST0xMRVIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7cGFkZGluZzoxcHg7dG9wOjA7bGVmdDowcHhcIjtcblx0b24od2luZG93LCBcImxvYWQscmVzaXplLHNjcm9sbFwiLCBUQVJHRVRTX1VQREFURSwgUVVJQ0tfRVZFTlQpO1xufVxuXG4vKipcbiAqIGFuY2hvclBvc2l0aW9uXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSBFbGVtZW50IHRvIHBvc2l0aW9uXG4gKiBAcGFyYW0gYW5jaG9yIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBhbmNob3JcbiAqL1xuY29uc3QgUE9TSVRJT04gPSB7IHRvcDogMCwgcmlnaHQ6IDEsIGJvdHRvbTogMiwgbGVmdDogMyB9OyAvLyBTcGVlZCB1cCBieSB1c2luZyBhIGNvbnN0IG1hcFxuXG5leHBvcnQgZnVuY3Rpb24gYW5jaG9yUG9zaXRpb24oXG5cdHRhcmdldDogSFRNTEVsZW1lbnQsXG5cdGFuY2hvcjogRWxlbWVudCB8IGZhbHNlLFxuXHRwb3NpdGlvbj86IHN0cmluZyB8IG51bWJlcixcbikge1xuXHRpZiAoYW5jaG9yID09PSBmYWxzZSB8fCAhYW5jaG9yLmlzQ29ubmVjdGVkIHx8ICF0YXJnZXQuaXNDb25uZWN0ZWQpXG5cdFx0cmV0dXJuIFRBUkdFVFMuZGVsZXRlKHRhcmdldCk7IC8vIFN0b3Agd2F0Y2hpbmcgaWYgYW5jaG9yIGlzIHJlbW92ZWQgZnJvbSBET01cblx0aWYgKCFTQ1JPTExFUj8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFNDUk9MTEVSIHx8IFwiXCIpOyAvLyBFbnN1cmUgd2UgaGF2ZSB0aGUgc2Nyb2xsZXJcblx0aWYgKCFUQVJHRVRTLmhhcyh0YXJnZXQpKSB7XG5cdFx0Ly8gU2V0dXAgbmV3IHRhcmdldCBvciB1cGRhdGUgcG9zaXRpb25cblx0XHRjb25zdCBwbGFjZSA9XG5cdFx0XHRQT1NJVElPTltwb3NpdGlvbiBhcyBrZXlvZiB0eXBlb2YgUE9TSVRJT05dID8/IFBPU0lUSU9OLmJvdHRvbTsgLy8gVXNlIENTUyBwcm9wZXJ0eSB0byBzdG9yZSBwb3NpdGlvbiBmb3IgbW9yZSBmbGV4aWJpbGl0eVxuXHRcdHJldHVybiBUQVJHRVRTLnNldCh0YXJnZXQsICgpID0+IGFuY2hvclBvc2l0aW9uKHRhcmdldCwgYW5jaG9yLCBwbGFjZSkpLmdldChcblx0XHRcdHRhcmdldCxcblx0XHQpPy4oKTsgLy8gU3RhcnQgd2F0Y2hpbmcgaWYgbm90IGFscmVhZHkgd2F0Y2hpbmdcblx0fVxuXG5cdGNvbnN0IGlzSFRNTEFuY2hvciA9IGFuY2hvciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OyAvLyBTVkcgb3IgWE1MIGVsZW1lbnRzIGRvZXMgbm90IGhhdmUgb2Zmc2V0V2lkdGggb3Igb2Zmc2V0SGVpZ2h0XG5cdGNvbnN0IHsgb2Zmc2V0V2lkdGg6IHRhcmdldFcsIG9mZnNldEhlaWdodDogdGFyZ2V0SCB9ID0gdGFyZ2V0O1xuXHRjb25zdCBhbmNob3JXID0gaXNIVE1MQW5jaG9yID8gYW5jaG9yLm9mZnNldFdpZHRoIDogYW5jaG9yLmNsaWVudFdpZHRoO1xuXHRjb25zdCBhbmNob3JIID0gaXNIVE1MQW5jaG9yID8gYW5jaG9yLm9mZnNldEhlaWdodCA6IGFuY2hvci5jbGllbnRIZWlnaHQ7XG5cdGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wIH0gPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdGNvbnN0IGFuY2hvclggPSBNYXRoLnJvdW5kKGxlZnQgLSAoYW5jaG9yVyAtIHdpZHRoKSAvIDIpOyAvLyBDb3JyZWN0IGZvciBDU1MgdHJhbnNmb3JtIHNjYWxlXG5cdGNvbnN0IGFuY2hvclkgPSBNYXRoLnJvdW5kKHRvcCAtIChhbmNob3JIIC0gaGVpZ2h0KSAvIDIpOyAvLyBDb3JyZWN0IGZvciBDU1MgdHJhbnNmb3JtIHNjYWxlXG5cblx0Y29uc3QgaGFzU3BhY2VMZWZ0ID0gYW5jaG9yWCAtIHRhcmdldFcgPiAwO1xuXHRjb25zdCBoYXNTcGFjZVJpZ2h0ID0gYW5jaG9yVyArIGFuY2hvclcgKyB0YXJnZXRXIDwgd2luZG93LmlubmVyV2lkdGg7XG5cdGNvbnN0IGhhc1NwYWNlT3ZlciA9IGFuY2hvclkgLSB0YXJnZXRIID4gMDtcblx0Y29uc3QgaGFzU3BhY2VVbmRlciA9IGFuY2hvclkgKyBhbmNob3JIICsgdGFyZ2V0SCA8IHdpbmRvdy5pbm5lckhlaWdodDtcblx0Y29uc3QgcG9zaXRpb25SaWdodCA9XG5cdFx0KHBvc2l0aW9uID09PSBQT1NJVElPTi5yaWdodCAmJiBoYXNTcGFjZVJpZ2h0KSB8fCAhaGFzU3BhY2VMZWZ0OyAvLyBBbHdheXMgcG9zaXRpb24gcmlnaHQgd2hlbiBubyBoYXNTcGFjZUxlZnQsIGFzIG5vIE9TIHNjcm9sbHMgZnVydGhlciB1cCB0aGFuIDBcblx0Y29uc3QgcG9zaXRpb25VbmRlciA9XG5cdFx0KHBvc2l0aW9uID09PSBQT1NJVElPTi5ib3R0b20gJiYgaGFzU3BhY2VVbmRlcikgfHwgIWhhc1NwYWNlT3ZlcjsgLy8gQWx3YXlzIHBvc2l0aW9uIHVuZGVyIHdoZW4gbm8gaGFzU3BhY2VPdmVyLCBhcyBubyBPUyBzY3JvbGxzIGZ1cnRoZXIgdXAgdGhhbiAwXG5cdGNvbnN0IGNlbnRlclggPSBNYXRoLm1pbihcblx0XHRNYXRoLm1heCgxMCwgYW5jaG9yWCAtICh0YXJnZXRXIC0gYW5jaG9yVykgLyAyKSxcblx0XHR3aW5kb3cuaW5uZXJXaWR0aCAtIHRhcmdldFcgLSAxMCxcblx0KTtcblx0Y29uc3QgY2VudGVyWSA9IE1hdGgubWluKFxuXHRcdE1hdGgubWF4KDEwLCBhbmNob3JZIC0gKHRhcmdldEggLSBhbmNob3JIKSAvIDIpLFxuXHRcdHdpbmRvdy5pbm5lckhlaWdodCAtIHRhcmdldEggLSAxMCxcblx0KTtcblx0Y29uc3QgaXNWZXJ0aWNhbCA9IHBvc2l0aW9uID09PSBQT1NJVElPTi50b3AgfHwgcG9zaXRpb24gPT09IFBPU0lUSU9OLmJvdHRvbTtcblxuXHR0YXJnZXQuc3R5bGUubGVmdCA9IGAke01hdGgucm91bmQoaXNWZXJ0aWNhbCA/IGNlbnRlclggOiBwb3NpdGlvblJpZ2h0ID8gYW5jaG9yWCArIGFuY2hvclcgOiBhbmNob3JYIC0gdGFyZ2V0Vyl9cHhgO1xuXHR0YXJnZXQuc3R5bGUudG9wID0gYCR7TWF0aC5yb3VuZChpc1ZlcnRpY2FsID8gKHBvc2l0aW9uVW5kZXIgPyBhbmNob3JZICsgYW5jaG9ySCA6IGFuY2hvclkgLSB0YXJnZXRIKSA6IGNlbnRlclkpfXB4YDtcblx0U0NST0xMRVI/LnN0eWxlLnNldFByb3BlcnR5KFxuXHRcdFwidHJhbnNsYXRlXCIsXG5cdFx0YCR7TWF0aC5yb3VuZCh3aW5kb3cuc2Nyb2xsWCArIGFuY2hvclggKyBhbmNob3JXICsgdGFyZ2V0VyArIDMwKX1weCAke01hdGgucm91bmQod2luZG93LnNjcm9sbFkgKyBhbmNob3JZICsgYW5jaG9ySCArIHRhcmdldEggKyAzMCl9cHhgLFxuXHQpO1xufVxuXG4vKipcbiAqIFNwZWVkIHVwIE11dGF0aW9uT2JzZXJ2ZXIgYnkgZGVib3VuY2luZyBhbmQgb25seSBydW5uaW5nIHdoZW4gcGFnZSBpcyB2aXNpYmxlXG4gKiBAcmV0dXJuIG5ldyBNdXRhaW9uT2JzZXJ2ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2s6IE11dGF0aW9uQ2FsbGJhY2spIHtcblx0bGV0IHF1ZXVlID0gMDtcblxuXHRjb25zdCBvbkZyYW1lID0gKCkgPT4gc2V0VGltZW91dChvblRpbWVyLCAyMDApOyAvLyBVc2UgYm90aCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgYW5kIHNldFRpbWVvdXQgdG8gZGVib3VuY2UgYW5kIG9ubHkgcnVuIHdoZW4gdmlzaWJsZVxuXHRjb25zdCBvblRpbWVyID0gKCkgPT4ge1xuXHRcdGNhbGxiYWNrKFtdLCBvYnNlcnZlcik7XG5cdFx0b2JzZXJ2ZXIudGFrZVJlY29yZHMoKTsgLy8gQ2xlYXIgcmVjb3JkcyB0byBhdm9pZCBydW5uaW5nIGNhbGxiYWNrIG11bHRpcGxlIHRpbWVzXG5cdFx0cXVldWUgPSAwO1xuXHR9O1xuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcblx0XHRpZiAoIXF1ZXVlKSBxdWV1ZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShvbkZyYW1lKTtcblx0fSk7XG5cblx0cmV0dXJuIG9ic2VydmVyO1xufVxuXG4vKipcbiAqIG9uTXV0YXRpb25cbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgb2JzZXJ2ZSBtdXRhdGlvbnMgb24gYSBzcGVjaWZpYyBjbGFzcyBuYW1lXG4gKiBAcGFyYW0gZWwgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gY2xhc3NOYW1lIFRoZSBjbGFzcyBuYW1lIHRvIG9ic2VydmVcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gbXV0YXRpb25zIGFyZSBkZXRlY3RlZFxuICovXG5jb25zdCBNVVRBVE9SUyA9IG5ldyBXZWFrTWFwPEVsZW1lbnQsIEFycmF5PCgpID0+IHZvaWQ+PigpO1xuZXhwb3J0IGNvbnN0IG9uTXV0YXRpb24gPSA8VCBleHRlbmRzIEVsZW1lbnQ+KFxuXHRlbDogRWxlbWVudCxcblx0Y2xhc3NOYW1lOiBzdHJpbmcsXG5cdGNhbGxiYWNrOiAoZWxlbXM6IEhUTUxDb2xsZWN0aW9uT2Y8VD4pID0+IHZvaWQsXG4pID0+IHtcblx0Y29uc3QgZWxlbXMgPSBlbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7XG5cdGNvbnN0IG11dGF0b3IgPSBNVVRBVE9SUy5nZXQoZWwpIHx8IFtdO1xuXG5cdGlmICghbXV0YXRvci5sZW5ndGgpIHtcblx0XHRNVVRBVE9SUy5zZXQoZWwsIG11dGF0b3IpO1xuXHRcdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoKF8sIG9ic2VydmVyKSA9PiB7XG5cdFx0XHRpZiAoZWwuaXNDb25uZWN0ZWQgJiYgbXV0YXRvcj8ubGVuZ3RoKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgY2FsbGJhY2sgb2YgbXV0YXRvcikgY2FsbGJhY2soKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdE1VVEFUT1JTLmRlbGV0ZShlbCk7XG5cdFx0XHR9XG5cdFx0fSkub2JzZXJ2ZShlbCwge1xuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbXCJjbGFzc1wiXSxcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdH0pO1xuXHR9XG5cdG11dGF0b3IucHVzaCgoKSA9PiBjYWxsYmFjayhlbGVtcyBhcyBIVE1MQ29sbGVjdGlvbk9mPFQ+KSk7XG59O1xuXG4vKipcbiAqIG9uTG9hZGVkXG4gKiBAZGVzY3JpcHRpb24gUnVucyBhIGNhbGxiYWNrIHdoZW4gd2luZG93IGlzIGxvYWRlZCBpbiBicm93c2VyXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHJ1biB3aGVuIHRoZSBwYWdlIGlzIHJlYWR5XG4gKi9cbmV4cG9ydCBjb25zdCBvbkxvYWRlZCA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xuXHRpZiAoIUlTX0JST1dTRVIpIHJldHVybjtcblx0Y29uc3QgcnVuID0gKCkgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKTsgLy8gRW5zdXJlIHdlIHJ1biBhZnRlciBhbGwgb3RoZXIgbG9hZCBldmVudHNcblx0aWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikgcnVuKCk7XG5cdGVsc2Ugb24od2luZG93LCBcImxvYWRcIiwgcnVuKTtcbn07XG5cbi8qKlxuICogaXNJbnB1dExpa2VcbiAqIEBkZXNjcmlwdGlvbiBDaGVjayBpZiBlbGVtZW50IGlzIGFuIGlucHV0IGxpa2UgZWxlbWVudFxuICogQHBhcmFtIGVsIFRoZSBlbGVtZW50IHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBlbGVtZW50IGlzIGFuIGlucHV0IGxpa2UgZWxlbWVudFxuICovXG5leHBvcnQgY29uc3QgaXNJbnB1dExpa2UgPSAoZWw6IHVua25vd24pOiBlbCBpcyBIVE1MSW5wdXRFbGVtZW50ID0+XG5cdGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcblx0XCJ2YWxpZGl0eVwiIGluIGVsICYmXG5cdCEoZWwgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCk7XG5cbi8qKlxuICogdG9DdXN0b21FbGVtZW50UHJvcHNcbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgY29udmVydCBwcm9wcyB0byBjdXN0b20gZWxlbWVudCBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0gcHJvcHMgVGhlIHByb3BzIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgcHJvcHNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvQ3VzdG9tRWxlbWVudFByb3BzID0gKFxuXHR7IGNsYXNzTmFtZSwgaGlkZGVuLCBvcGVuLCAuLi5yZXN0IH06IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRrbGFzcz86IHN0cmluZyxcbikgPT4ge1xuXHRyZXN0LnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyA9IHRydWU7IC8vIE1ha2UgTmV4dC5qcyBoYXBweVxuXHRyZXN0LmNsYXNzID0gY2xzeChrbGFzcywgY2xhc3NOYW1lIHx8IFwiXCIpIHx8IHVuZGVmaW5lZDsgLy8gVXNlIGNsYXNzIGluc3RlYWQgb2YgY2xhc3NOYW1lXG5cdGlmIChoaWRkZW4pIHJlc3QuaGlkZGVuID0gdHJ1ZTsgLy8gRW5zdXJlIGJvb2xlYW4gcHJvcCBiZWhhdmlvdXJcblx0aWYgKG9wZW4pIHJlc3Qub3BlbiA9IHRydWU7IC8vIEVuc3VyZSBib29sZWFuIHByb3AgYmVoYXZpb3VyXG5cdHJldHVybiByZXN0O1xufTtcbiIsImlmIChcblx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHR3aW5kb3cuQ1NTU3R5bGVTaGVldCAmJlxuXHRkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHNcbilcblx0KCgpID0+IHtcblx0XHRjb25zdCBrZXkgPSBcIi0tbXRkcy1hcHAtZXhwYW5kZWRcIjtcblx0XHRjb25zdCBzaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cblx0XHRkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMucHVzaChzaGVldCk7XG5cdFx0d2luZG93Lm10ZHNBcHBUb2dnbGUgPSAodG9nZ2xlID0gdHJ1ZSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJldiA9ICF3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KT8uaW5jbHVkZXMoXCJmYWxzZVwiKTtcblx0XHRcdGNvbnN0IG5leHQgPSB0b2dnbGUgPyAhcHJldiA6IHByZXY7XG5cblx0XHRcdHNoZWV0LnJlcGxhY2VTeW5jKGA6cm9vdCB7ICR7a2V5fTogdmFyKCR7a2V5fS0tJHtuZXh0fSl9YCk7XG5cdFx0XHR3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBuZXh0KTtcblx0XHR9O1xuXHRcdHdpbmRvdy5tdGRzQXBwVG9nZ2xlKGZhbHNlKTsgLy8gU2V0IGFuZCBzdG9yZSBpbml0aWFsIHN0YXRlXG5cdH0pKCk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgUVVJQ0tfRVZFTlQsIGRlYm91bmNlLCBvbiwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCBcIi4vYXBwLXRvZ2dsZVwiO1xuXG5jb25zdCBDU1NfQVBQID0gc3R5bGVzLmFwcC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfU1RJQ0tZID0gc3R5bGVzLnN0aWNreS5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVE9HR0xFID0gJ1tkYXRhLWNvbW1hbmQ9XCJ0b2dnbGUtYXBwLWV4cGFuZGVkXCJdJztcbmNvbnN0IENTU19TSURFQkFSID0gYC4ke0NTU19BUFB9ID4gZGlhbG9nLC4ke0NTU19BUFB9IGRpYWxvZyB+IG1haW5gO1xuXG5jb25zdCB1c2VUcmFuc2l0aW9uID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XG5cdGlmICghZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbikgY2FsbGJhY2soKTtcblx0ZWxzZSBkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKGNhbGxiYWNrKTtcbn07XG5cbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZUNsaWNrKHsgdGFyZ2V0OiBlbCB9OiBFdmVudCkge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiBlbC5tYXRjaGVzKENTU19UT0dHTEUpKVxuXHRcdHVzZVRyYW5zaXRpb24oKCkgPT4ge1xuXHRcdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciB3aW5kb3cubXRkc0FwcFRvZ2dsZSBjb21lcyBmcm9tIGFwcC10b2dnbGUuanNcblx0XHRcdGlmIChnZXRDb21wdXRlZFN0eWxlKGVsKS5wb3NpdGlvbiA9PT0gXCJzdGlja3lcIikgd2luZG93Lm10ZHNBcHBUb2dnbGU/LigpO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHNpZGViYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaWFsb2dFbGVtZW50PihDU1NfU0lERUJBUik7XG5cdFx0XHRcdHNpZGViYXI/LnNldEF0dHJpYnV0ZShcImRhdGEtY2xvc2VkYnlcIiwgXCJhbnlcIik7IC8vIEFsbG93IGNsb3NpbmcgYnkgY2xpY2tpbmcgb3V0c2lkZVxuXHRcdFx0XHRzaWRlYmFyPy5zaG93TW9kYWwoKTtcblx0XHRcdH1cblx0XHR9KTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlUmVzaXplKCkge1xuXHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaWFsb2dFbGVtZW50PihDU1NfU0lERUJBUik/LmNsb3NlKCk7XG59XG5cbi8vIFNjcm9sbCBzdGF0ZVxubGV0IE1JTl9ZID0gMDsgLy8gT2Zmc2V0IHRvIGF2b2lkIHNjcm9sbCBqdW1wIHdoZW4gc3RpY2t5IGlzIHNldCB0byByZWxhdGl2ZVxubGV0IFNDUk9MTF9VUDogYm9vbGVhbjtcbmxldCBTVElDSyA9IDA7IC8vIC0xID0gc3RpY2sgdG9wLCAwID0gcmVsYXRpdmUsIDEgPSBzdGljayBib3R0b21cbmxldCBTVElDS19FTDogSFRNTEVsZW1lbnQ7XG5sZXQgU1RJQ0tfSCA9IDA7XG5sZXQgU1RJQ0tfWSA9IDA7XG5sZXQgU1RVQ0sgPSBmYWxzZTsgLy8gVXNlZCB0byBmaWd1cmUgaWYgbmF2IGlzIGxhcmdlciB0aGFuIHZpZXdwb3J0XG5sZXQgV0lOX0ggPSAwO1xubGV0IFdJTl9ZID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oW3N0aWNreV06IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdFNUSUNLX0VMID0gc3RpY2t5O1xuXHRoYW5kbGVTY3JvbGwoKTsgLy8gUnVuIG9uIGNvbm5lY3Rcbn1cblxuZnVuY3Rpb24gaGFuZGxlU2Nyb2xsKCkge1xuXHRpZiAoIVNUSUNLX0VMPy5pc0Nvbm5lY3RlZCkgcmV0dXJuO1xuXHRjb25zdCBORVhUX1kgPSB3aW5kb3cuc2Nyb2xsWTtcblx0Y29uc3QgTkVYVF9VUCA9IE5FWFRfWSA8IFdJTl9ZO1xuXHRXSU5fWSA9IE5FWFRfWTtcblxuXHQvLyBPbmx5IGNhbGN1bGF0ZSBpZiBzY3JvbGwgZGlyZWN0aW9uIGhhcyBjaGFuZ2VkXG5cdGlmIChORVhUX1VQICE9PSBTQ1JPTExfVVApIHtcblx0XHRNSU5fWSA9IChTVElDS19FTC5wYXJlbnRFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgfHwgMCkgKyBXSU5fWTtcblx0XHRTQ1JPTExfVVAgPSBORVhUX1VQO1xuXHRcdFNUSUNLX0ggPSBTVElDS19FTC5vZmZzZXRIZWlnaHQ7XG5cdFx0U1RJQ0tfWSA9IFNUSUNLX0VMLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIFdJTl9ZO1xuXHRcdFNUVUNLID0gU1RJQ0tfRUwub2Zmc2V0SGVpZ2h0IDw9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0XHRXSU5fSCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0fVxuXG5cdGlmIChTVElDSyA9PT0gLTEgJiYgU1RVQ0spIHJldHVybjsgLy8gQWxsd2F5cyBzdGlja3kgd2hlbiBzaWRlYmFyIGlzIHNtYWxsZXIgdGhhbiB2aWV3cG9ydFxuXHRpZiAoU1RJQ0sgIT09IC0xICYmIChTVFVDSyB8fCAoU0NST0xMX1VQICYmIFdJTl9ZIDw9IFNUSUNLX1kpKSkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJzdGlja3lcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBcIjBweFwiKTtcblx0XHRTVElDSyA9IC0xOyAvLyBOb3Qgc3RpY2tpbmcgdG8gdG9wIGFuZCBzaWRlYmFyIGlzIHNtYWxsZXIgdGhhbiB2aWV3cG9ydCBvciBzY3JvbGxpbmcgdXBcblx0fSBlbHNlIGlmIChTVElDSyA9PT0gLTEgJiYgIVNDUk9MTF9VUCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJyZWxhdGl2ZVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke01hdGgubWF4KDAsIFdJTl9ZIC0gTUlOX1kpfXB4YCk7XG5cdFx0U1RJQ0sgPSAwOyAvLyBTdGlja2luZyB0byB0b3AgYW5kIHNjcm9sbGluZyBkb3duXG5cdH0gZWxzZSBpZiAoU1RJQ0sgIT09IDEgJiYgIVNDUk9MTF9VUCAmJiBXSU5fWSArIFdJTl9IID49IFNUSUNLX1kgKyBTVElDS19IKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInN0aWNreVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke1dJTl9IIC0gU1RJQ0tfSH1weGApO1xuXHRcdFNUSUNLID0gMTsgLy8gTm90IHN0aWNraW5nIHRvIGJvdHRvbSBhbmQgc2Nyb2xsaW5nIGRvd25cblx0fSBlbHNlIGlmIChTVElDSyA9PT0gMSAmJiBTQ1JPTExfVVApIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwicmVsYXRpdmVcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtTVElDS19ZIC0gTUlOX1l9cHhgKTtcblx0XHRTVElDSyA9IDA7IC8vIFN0aWNraW5nIHRvIGJvdHRvbSBhbmQgc2Nyb2xsaW5nIHVwXG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX1NUSUNLWSwgaGFuZGxlTXV0YXRpb24pO1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVUb2dnbGVDbGljaywgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwicmVzaXplXCIsIGRlYm91bmNlKGhhbmRsZVJlc2l6ZSwgMTAwKSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwic2Nyb2xsXCIsIGhhbmRsZVNjcm9sbCwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0JSRUFEQ1JVTUJTID0gc3R5bGVzLmJyZWFkY3J1bWJzLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oYnJlYWRjcnVtYnM6IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgYnJlYWRjdW1icyBvZiBicmVhZGNydW1icylcblx0XHRicmVhZGN1bWJzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaSBhXCIpLmZvckVhY2goKGNydW1iLCBpbmRleCwgeyBsZW5ndGggfSkgPT4ge1xuXHRcdFx0YXR0cihjcnVtYiwgXCJhcmlhLWN1cnJlbnRcIiwgaW5kZXggPT09IGxlbmd0aCAtIDEgPyBcInBhZ2VcIiA6IG51bGwpO1xuXHRcdH0pO1xufVxuXG5vbkxvYWRlZCgoKSA9PlxuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0JSRUFEQ1JVTUJTLCBoYW5kbGVNdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdElTX0JST1dTRVIsXG5cdFFVSUNLX0VWRU5ULFxuXHRhdHRyLFxuXHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyLFxuXHRvbixcblx0b25Mb2FkZWQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRElBTE9HID0gc3R5bGVzLmRpYWxvZy5zcGxpdChcIiBcIilbMF07XG5jb25zdCBESUFMT0dTID0gSVNfQlJPV1NFUlxuXHQ/IChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuXHRcdFx0Q1NTX0RJQUxPRyxcblx0XHQpIGFzIEhUTUxDb2xsZWN0aW9uT2Y8SFRNTERpYWxvZ0VsZW1lbnQ+KVxuXHQ6IFtdO1xuXG5jb25zdCBoYW5kbGVNb2RhbCA9ICgpID0+IHtcblx0Zm9yIChjb25zdCBkaWFsb2cgb2YgRElBTE9HUylcblx0XHRpZiAoZGlhbG9nLmlzQ29ubmVjdGVkICYmIGRpYWxvZy5zaG93TW9kYWwgJiYgZGlhbG9nLmNsb3NlKSB7XG5cdFx0XHRpZiAoZGlhbG9nLm1hdGNoZXMoJ1tvcGVuXTpub3QoW2RhdGEtbW9kYWw9XCJmYWxzZVwiXSk6bm90KDptb2RhbCknKSkge1xuXHRcdFx0XHRhdHRyKGRpYWxvZywgXCJvcGVuXCIsIG51bGwpOyAvLyBVc2luZyBhdHRyaWJ1dGUgaW5zdGVhZCBvZiAuY2xvc2UgdG8gYXZvaWQgYGNsb3NlYCBldmVudFxuXHRcdFx0XHRkaWFsb2cuc2hvd01vZGFsKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGRpYWxvZy5tYXRjaGVzKFwiOm1vZGFsOm5vdChbb3Blbl0pXCIpKSB7XG5cdFx0XHRcdGF0dHIoZGlhbG9nLCBcIm9wZW5cIiwgXCJcIik7IC8vIFNldCBhcyBvcGVuXG5cdFx0XHRcdGRpYWxvZy5jbG9zZSgpOyAvLyBTbyB3ZSBjb3JyZWNsdHkgY2FuIGNhbGwgLmNsb3NlLCByZW1vdmluZyA8ZGlhbG9nPiBmcm9tICN0b3AtbGF5ZXJcblx0XHRcdH1cblx0XHR9XG59O1xuXG5jb25zdCBoYW5kbGVDbGljayA9ICh7IGNsaWVudFg6IHgsIGNsaWVudFk6IHksIHRhcmdldDogZWwgfTogTW91c2VFdmVudCkgPT4ge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRGlhbG9nRWxlbWVudCAmJiBhdHRyKGVsLCBcImRhdGEtY2xvc2VkYnlcIikgPT09IFwiYW55XCIpIHtcblx0XHRjb25zdCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCB9ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0Y29uc3QgaXNJbnNpZGUgPSB0b3AgPD0geSAmJiB5IDw9IGJvdHRvbSAmJiBsZWZ0IDw9IHggJiYgeCA8PSByaWdodDtcblxuXHRcdGlmICghaXNJbnNpZGUpIGVsLmNsb3NlKCk7XG5cdH0gZWxzZSBpZiAoXG5cdFx0ZWwgaW5zdGFuY2VvZiBFbGVtZW50ICYmXG5cdFx0ZWwuY2xvc2VzdCgnYnV0dG9uW2RhdGEtY29tbWFuZD1cImNsb3NlXCJdJylcblx0KSB7XG5cdFx0ZWw/LmNsb3Nlc3QoXCJkaWFsb2dcIik/LmNsb3NlKCk7XG5cdH1cbn07XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlQ2xpY2sgYXMgRXZlbnRMaXN0ZW5lciwgUVVJQ0tfRVZFTlQpO1xuXHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKGhhbmRsZU1vZGFsKS5vYnNlcnZlKFxuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHR7XG5cdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFtcIm9wZW5cIl0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdFx0c3VidHJlZTogdHJ1ZSxcblx0XHR9LFxuXHQpO1xufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgUVVJQ0tfRVZFTlQsIGF0dHIsIG9uLCBvbkxvYWRlZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5mdW5jdGlvbiBoYW5kbGVJbmplY3QoZXZlbnQ6IEV2ZW50ICYgeyBhbmltYXRpb25OYW1lPzogc3RyaW5nIH0pIHtcblx0aWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgIT09IHN0eWxlcy5fZXJyb3JzdW1tYXJ5KSByZXR1cm47XG5cdGNvbnN0IGZpcnN0ID0gKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KT8uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cblx0aWYgKGZpcnN0IGluc3RhbmNlb2YgSFRNTEhlYWRpbmdFbGVtZW50KSB7XG5cdFx0YXR0cihmaXJzdCwgXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuXHRcdGZpcnN0LmZvY3VzKCk7IC8vIEF1dG9mb2N1cyBmaXJzdCBoZWFkaW5nXG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb24oZG9jdW1lbnQsIFwiYW5pbWF0aW9uZW5kXCIsIGhhbmRsZUluamVjdCwgUVVJQ0tfRVZFTlQpKTtcbiIsInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcblxuLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19GSVJFRk9YID0gSVNfQlJPV1NFUiAmJiAvZmlyZWZveC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19TQUZBUkkgPSBJU19CUk9XU0VSICYmIC9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBTQUZFX01VTFRJU0VMRUNUQUJMRSA9IGAke0lTX1NBRkFSSSA/IFwiYXJpYVwiIDogXCJkYXRhXCJ9LW11bHRpc2VsZWN0YWJsZWA7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIEZPQ1VTX09VVExJTkUgPSBcIm91dGxpbmU6IDFweCBkb3R0ZWQ7IG91dGxpbmU6IDVweCBhdXRvIEhpZ2hsaWdodDsgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yXCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgLy8gVW5uYW1lZCBzbG90IGRvZXMgYXV0b21hdGljYWxseSByZW5kZXIgYWxsIHRvcCBlbGVtZW50IG5vZGVzXG4gIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBjc3MpXG4pO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIGNyZWF0ZUFyaWFMaXZlID0gKG1vZGUpID0+IHtcbiAgY29uc3QgbGl2ZSA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGxpdmUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246Zml4ZWQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXBcIjtcbiAgYXR0cihsaXZlLCBcImFyaWEtbGl2ZVwiLCBtb2RlKTtcbiAgcmV0dXJuIGxpdmU7XG59O1xuZnVuY3Rpb24gYXR0cmlidXRlVGV4dHModGV4dHMsIHByb3AsIHZhbHVlKSB7XG4gIGlmICghcHJvcCkgcmV0dXJuIE9iamVjdC5rZXlzKHRleHRzKS5tYXAoKGtleTIpID0+IGBkYXRhLXNyLSR7a2V5Mn1gKTtcbiAgY29uc3Qga2V5ID0gKHByb3AgPT0gbnVsbCA/IHZvaWQgMCA6IHByb3Auc3RhcnRzV2l0aChcImRhdGEtc3ItXCIpKSAmJiBwcm9wLnNsaWNlKDgpO1xuICBpZiAoa2V5ICYmIHZhbHVlICYmIHRleHRzW2tleV0pIHRleHRzW2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIFtdO1xufVxuXG4vLyB1LW9wdGlvbi50c1xudmFyIERJU0FCTEVEID0gXCJkaXNhYmxlZFwiO1xudmFyIFNFTEVDVEVEID0gXCJzZWxlY3RlZFwiO1xudmFyIFVIVE1MT3B0aW9uRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtESVNBQkxFRCwgU0VMRUNURURdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgYCR7RElTUExBWV9CTE9DS306aG9zdCg6Zm9jdXMpeyR7Rk9DVVNfT1VUTElORX19Omhvc3R7IGN1cnNvcjogcG9pbnRlciB9YFxuICAgICk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCFJU19JT1MpIHRoaXMudGFiSW5kZXggPSAtMTtcbiAgICBpZiAoIWF0dHIodGhpcywgXCJyb2xlXCIpKSBhdHRyKHRoaXMsIFwicm9sZVwiLCBcIm9wdGlvblwiKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1kaXNhYmxlZFwiLCBgJHt0aGlzLmRpc2FibGVkfWApO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXNlbGVjdGVkXCIsIGAke3RoaXMuc2VsZWN0ZWR9YCk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHdoZXRoZXIgdGhlIG9wdGlvbiBpbiB0aGUgbGlzdCBib3ggaXMgdGhlIGRlZmF1bHQgaXRlbS4gKi9cbiAgZ2V0IGRlZmF1bHRTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpc1tTRUxFQ1RFRF07XG4gIH1cbiAgc2V0IGRlZmF1bHRTZWxlY3RlZCh2YWx1ZSkge1xuICAgIHRoaXNbU0VMRUNURURdID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGRpc2FibGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIERJU0FCTEVEKSAhPT0gbnVsbDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIERJU0FCTEVELCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICAvKiogUmV0cmlldmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBmb3JtIHRoYXQgdGhlIG9iamVjdCBpcyBlbWJlZGRlZCBpbi4gKi9cbiAgZ2V0IGZvcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcImZvcm1cIik7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSBvcmRpbmFsIHBvc2l0aW9uIG9mIGFuIG9wdGlvbiBpbiBhIGxpc3QgYm94LiAqL1xuICBnZXQgaW5kZXgoKSB7XG4gICAgdmFyIF9hMjtcbiAgICBjb25zdCBvcHRpb25zID0gKF9hMiA9IHRoaXMuY2xvc2VzdChcInUtZGF0YWxpc3RcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ1LW9wdGlvblwiKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShvcHRpb25zIHx8IFt0aGlzXSkuaW5kZXhPZih0aGlzKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgYSB2YWx1ZSB0aGF0IHlvdSBjYW4gdXNlIHRvIGltcGxlbWVudCB5b3VyIG93biBsYWJlbCBmdW5jdGlvbmFsaXR5IGZvciB0aGUgb2JqZWN0LiAqL1xuICBnZXQgbGFiZWwoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgXCJsYWJlbFwiKSB8fCB0aGlzLnRleHQ7XG4gIH1cbiAgc2V0IGxhYmVsKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImxhYmVsXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgU0VMRUNURUQpICE9PSBudWxsO1xuICB9XG4gIHNldCBzZWxlY3RlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgU0VMRUNURUQsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdGV4dCBzdHJpbmcgc3BlY2lmaWVkIGJ5IHRoZSBvcHRpb24gdGFnLiAqL1xuICBnZXQgdGV4dCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IHRoaXMudGV4dENvbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICB9XG4gIHNldCB0ZXh0KHRleHQpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIHZhbHVlIHdoaWNoIGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIgd2hlbiB0aGUgZm9ybSBjb250cm9sIGlzIHN1Ym1pdHRlZC4gKi9cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIFwidmFsdWVcIikgfHwgdGhpcy50ZXh0O1xuICB9XG4gIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gIH1cbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LW9wdGlvblwiLCBVSFRNTE9wdGlvbkVsZW1lbnQpO1xuXG4vLyB1LWRhdGFsaXN0LnRzXG52YXIgSVNfUFJFU1MgPSBmYWxzZTtcbnZhciBMSVZFX1RJTUVSO1xudmFyIExJVkVfU1JfRklYID0gMDtcbnZhciBMSVZFO1xudmFyIElTX1NBRkFSSV9NQUMgPSBJU19TQUZBUkkgJiYgIUlTX0lPUztcbnZhciBFVkVOVFMgPSBcImNsaWNrLGZvY3Vzb3V0LGlucHV0LGtleWRvd24sbW91c2Vkb3duLG1vdXNldXBcIjtcbnZhciBURVhUUyA9IHtcbiAgc2luZ3VsYXI6IFwiJWQgaGl0XCIsXG4gIHBsdXJhbDogXCIlZCBoaXRzXCJcbn07XG52YXIgVUhUTUxEYXRhTGlzdEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgLy8gVXNpbmcgdW5kZXJzY29yZSBpbnN0ZWFkIG9mIHByaXZhdGUgZmllbGRzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgIC8vIF9hbm5vdW5jZUNvdW50ID0gMDtcbiAgICAvLyBfYW5ub3VuY2VUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudW1iZXIgPSAwO1xuICAgIHRoaXMuX2JsdXJUaW1lciA9IDA7XG4gICAgdGhpcy5faW5wdXQgPSBudWxsO1xuICAgIHRoaXMuX3Jvb3QgPSBudWxsO1xuICAgIHRoaXMuX3ZhbHVlID0gXCJcIjtcbiAgICAvLyBTdG9yZSBzYW5pdGl6ZWQgdmFsdWUgdG8gc3BlZWQgdXAgb3B0aW9uIGZpbHRlcmluZ1xuICAgIHRoaXMuX3RleHRzID0gX19zcHJlYWRWYWx1ZXMoe30sIFRFWFRTKTtcbiAgICBhdHRhY2hTdHlsZShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtESVNQTEFZX0JMT0NLfTo6c2xvdHRlZCh1LW9wdGlvbltkaXNhYmxlZF0pIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50IH1gXG4gICAgICAvLyBIaWRlIGRpc2FibGVkIG9wdGlvbnNcbiAgICApO1xuICB9XG4gIC8vIFNwZWVkIHVwIHRyYW5zbGF0ZWQgdGV4dHNcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImlkXCIsIC4uLmF0dHJpYnV0ZVRleHRzKFRFWFRTKV07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuX3Jvb3QgPSBnZXRSb290KHRoaXMpO1xuICAgIGlmICghTElWRSkgTElWRSA9IGNyZWF0ZUFyaWFMaXZlKFwiYXNzZXJ0aXZlXCIpO1xuICAgIGlmICghTElWRS5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChMSVZFKTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcImxpc3Rib3hcIik7XG4gICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG4gICAgb24odGhpcy5fcm9vdCwgXCJmb2N1c2luXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMuX3Jvb3QsIFwiZm9jdXNcIiwgdGhpcywgdHJ1ZSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpKTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBvZmYodGhpcy5fcm9vdCB8fCB0aGlzLCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIG9mZih0aGlzLl9yb290IHx8IHRoaXMsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBkaXNjb25uZWN0SW5wdXQodGhpcyk7XG4gICAgdGhpcy5fcm9vdCA9IG51bGw7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIF9wcmV2LCBuZXh0KSB7XG4gICAgdmFyIF9hMjtcbiAgICBhdHRyaWJ1dGVUZXh0cyh0aGlzLl90ZXh0cywgcHJvcCwgbmV4dCk7XG4gICAgY29uc3QgaW5wdXRzID0gKF9hMiA9IHRoaXMuX3Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIucXVlcnlTZWxlY3RvckFsbChgaW5wdXRbbGlzdD1cIiR7dGhpcy5pZH1cIl1gKTtcbiAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cyB8fCBbXSkgc2V0dXBJbnB1dCh0aGlzLCBpbnB1dCk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCB7IHR5cGUgfSA9IGV2ZW50O1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKHR5cGUgPT09IFwiY2xpY2tcIikgb25DbGljayh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiZm9jdXNcIiB8fCB0eXBlID09PSBcImZvY3VzaW5cIikgb25Gb2N1c0luKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJmb2N1c291dFwiKSBvbkZvY3VzT3V0KHRoaXMpO1xuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgb25LZXlEb3duKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJtdXRhdGlvblwiIHx8IHR5cGUgPT09IFwiaW5wdXRcIikgc2V0dXBPcHRpb25zKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIpIElTX1BSRVNTID0gZmFsc2U7XG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIElTX1BSRVNTID0gdGhpcy5jb250YWlucyhldmVudC50YXJnZXQpO1xuICB9XG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidS1vcHRpb25cIik7XG4gIH1cbn07XG52YXIgb25Gb2N1c0luID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgaXNJbnB1dCA9IHNlbGYuX2lucHV0ID09PSB0YXJnZXQ7XG4gIGNvbnN0IGlzSW5zaWRlID0gaXNJbnB1dCB8fCBzZWxmLmNvbnRhaW5zKHRhcmdldCk7XG4gIGlmIChpc0luc2lkZSkgcmV0dXJuIGNsZWFyVGltZW91dChzZWxmLl9ibHVyVGltZXIpO1xuICBpZiAoIWlzSW5wdXQgJiYgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBhdHRyKHRhcmdldCwgXCJsaXN0XCIpID09PSBzZWxmLmlkKSB7XG4gICAgaWYgKHNlbGYuX2lucHV0KSBkaXNjb25uZWN0SW5wdXQoc2VsZik7XG4gICAgc2VsZi5faW5wdXQgPSB0YXJnZXQ7XG4gICAgYXR0cihzZWxmLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKChfYTIgPSBzZWxmLl9pbnB1dC5sYWJlbHMpID09IG51bGwgPyB2b2lkIDAgOiBfYTJbMF0pKTtcbiAgICBvbihzZWxmLl9yb290IHx8IHNlbGYsIEVWRU5UUywgc2VsZik7XG4gICAgbXV0YXRpb25PYnNlcnZlcihzZWxmLCB7XG4gICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFtcInZhbHVlXCJdLFxuICAgICAgLy8gTGlzdGVuIGZvciB2YWx1ZSBjaGFuZ2VzIHRvIHNob3cgdS1vcHRpb25zXG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgc3VidHJlZTogdHJ1ZVxuICAgIH0pO1xuICAgIHNldEV4cGFuZGVkKHNlbGYsIHRydWUpO1xuICB9XG59O1xudmFyIG9uRm9jdXNPdXQgPSAoc2VsZikgPT4ge1xuICBpZiAoIUlTX1BSRVNTKSBzZWxmLl9ibHVyVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGRpc2Nvbm5lY3RJbnB1dChzZWxmKSk7XG59O1xudmFyIG9uQ2xpY2sgPSAoc2VsZiwgeyB0YXJnZXQgfSkgPT4ge1xuICB2YXIgX2EyLCBfYiwgX2MsIF9kLCBfZTtcbiAgY29uc3QgaXNTaW5nbGUgPSBhdHRyKHNlbGYsIFNBRkVfTVVMVElTRUxFQ1RBQkxFKSAhPT0gXCJ0cnVlXCI7XG4gIGNvbnN0IG9wdGlvbiA9IFsuLi5zZWxmLm9wdGlvbnNdLmZpbmQoKG9wdCkgPT4gb3B0LmNvbnRhaW5zKHRhcmdldCkpO1xuICBpZiAoc2VsZi5faW5wdXQgPT09IHRhcmdldCkge1xuICAgIHNldEV4cGFuZGVkKHNlbGYsIHRydWUpO1xuICB9IGVsc2UgaWYgKG9wdGlvbiAmJiBpc0ludGVyYWN0aXZlT3B0aW9uKG9wdGlvbikpIHtcbiAgICBmb3IgKGNvbnN0IG9wdCBvZiBzZWxmLm9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHQgPT09IG9wdGlvbikgb3B0LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIGVsc2UgaWYgKGlzU2luZ2xlKSBvcHQuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgKF9iID0gKF9hMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICBIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSxcbiAgICAgIFwidmFsdWVcIlxuICAgICkpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChzZWxmLl9pbnB1dCwgb3B0aW9uLnZhbHVlKTtcbiAgICBpZiAoaXNTaW5nbGUpIHtcbiAgICAgIChfYyA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2MuZm9jdXMoKTtcbiAgICAgIHNldEV4cGFuZGVkKHNlbGYsIGZhbHNlKTtcbiAgICB9XG4gICAgKF9kID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfZC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEV2ZW50KFwiaW5wdXRcIiwgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KVxuICAgICk7XG4gICAgKF9lID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfZS5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImNoYW5nZVwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICB9XG59O1xudmFyIG9uS2V5RG93biA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgaWYgKGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkpIHJldHVybjtcbiAgaWYgKGV2ZW50LmtleSAhPT0gXCJFc2NhcGVcIikgc2V0RXhwYW5kZWQoc2VsZiwgdHJ1ZSk7XG4gIGNvbnN0IHsga2V5IH0gPSBldmVudDtcbiAgY29uc3QgYWN0aXZlID0gKF9hMiA9IHNlbGYuX3Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuYWN0aXZlRWxlbWVudDtcbiAgY29uc3Qgb3B0aW9ucyA9IGdldFZpc2libGVPcHRpb25zKHNlbGYpO1xuICBjb25zdCBpbmRleCA9IG9wdGlvbnMuaW5kZXhPZihhY3RpdmUpO1xuICBsZXQgbmV4dCA9IC0xO1xuICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiKSBuZXh0ID0gKGluZGV4ICsgMSkgJSBvcHRpb25zLmxlbmd0aDtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1VwXCIpIG5leHQgPSAofmluZGV4ID8gaW5kZXggOiBvcHRpb25zLmxlbmd0aCkgLSAxO1xuICBpZiAofmluZGV4KSB7XG4gICAgaWYgKGtleSA9PT0gXCJIb21lXCIgfHwga2V5ID09PSBcIlBhZ2VVcFwiKSBuZXh0ID0gMDtcbiAgICBpZiAoa2V5ID09PSBcIkVuZFwiIHx8IGtleSA9PT0gXCJQYWdlRG93blwiKSBuZXh0ID0gb3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIGlmIChrZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgb3B0aW9uc1tpbmRleF0uY2xpY2soKTtcbiAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuICBpZiAob3B0aW9uc1tuZXh0XSkgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykgb3B0aW9uLnRhYkluZGV4ID0gLTE7XG4gIGlmIChvcHRpb25zW25leHRdKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAoX2IgPSBvcHRpb25zW25leHRdIHx8IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuZm9jdXMoKTtcbiAgaWYgKGtleSA9PT0gXCJFc2NhcGVcIikgc2V0RXhwYW5kZWQoc2VsZiwgZmFsc2UpO1xufTtcbnZhciBzZXRFeHBhbmRlZCA9IChzZWxmLCBvcGVuKSA9PiB7XG4gIHNlbGYuaGlkZGVuID0gIW9wZW47XG4gIGlmIChzZWxmLnBvcG92ZXIpIHNlbGYudG9nZ2xlUG9wb3ZlcihvcGVuKTtcbiAgaWYgKHNlbGYuX2lucHV0KSBzZXR1cElucHV0KHNlbGYsIHNlbGYuX2lucHV0LCBvcGVuKTtcbiAgaWYgKG9wZW4pIHNldHVwT3B0aW9ucyhzZWxmKTtcbn07XG52YXIgZGlzY29ubmVjdElucHV0ID0gKHNlbGYpID0+IHtcbiAgb2ZmKHNlbGYuX3Jvb3QgfHwgc2VsZiwgRVZFTlRTLCBzZWxmKTtcbiAgbXV0YXRpb25PYnNlcnZlcihzZWxmLCBmYWxzZSk7XG4gIHNldEV4cGFuZGVkKHNlbGYsIGZhbHNlKTtcbiAgc2VsZi5faW5wdXQgPSBudWxsO1xufTtcbnZhciBnZXRWaXNpYmxlT3B0aW9ucyA9IChzZWxmKSA9PiBbLi4uc2VsZi5vcHRpb25zXS5maWx0ZXIoXG4gIChvcHQpID0+ICFvcHQuZGlzYWJsZWQgJiYgb3B0Lm9mZnNldFdpZHRoICYmIG9wdC5vZmZzZXRIZWlnaHRcbiAgLy8gQ2hlY2tzIGRpc2FibGVkIG9yIHZpc2liaWxpdHkgKHNpbmNlIGhpZGRlbiBhdHRyaWJ1dGUgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IGRpc3BsYXk6IGJsb2NrKVxuKTtcbnZhciBpc0ludGVyYWN0aXZlT3B0aW9uID0gKG9wdGlvbikgPT4gb3B0aW9uIGluc3RhbmNlb2YgSFRNTE9wdGlvbkVsZW1lbnQgfHwgb3B0aW9uLmdldEF0dHJpYnV0ZShcInJvbGVcIikgPT09IFwib3B0aW9uXCI7XG52YXIgc2V0dXBJbnB1dCA9IChzZWxmLCBpbnB1dCwgb3BlbiA9IGZhbHNlKSA9PiB7XG4gIGF0dHIoaW5wdXQsIFwicG9wb3ZlcnRhcmdldFwiLCB1c2VJZChzZWxmKSk7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1hdXRvY29tcGxldGVcIiwgXCJsaXN0XCIpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtY29udHJvbHNcIiwgdXNlSWQoc2VsZikpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7SVNfU0FGQVJJX01BQyB8fCBvcGVufWApO1xuICBhdHRyKGlucHV0LCBcImF1dG9jb21wbGV0ZVwiLCBcIm9mZlwiKTtcbiAgYXR0cihpbnB1dCwgXCJyb2xlXCIsIFwiY29tYm9ib3hcIik7XG59O1xudmFyIHNhbml0aXplID0gKHN0cikgPT4gKHN0ciA9PSBudWxsID8gdm9pZCAwIDogc3RyLnRvTG93ZXJDYXNlKCkudHJpbSgpKSB8fCBcIlwiO1xudmFyIHNldHVwT3B0aW9ucyA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB2YWx1ZSA9IHNhbml0aXplKChfYTIgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi52YWx1ZSk7XG4gIGNvbnN0IGhhc0NoYW5nZSA9IChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibXV0YXRpb25cIiB8fCBzZWxmLl92YWx1ZSAhPT0gdmFsdWU7XG4gIGlmICghaGFzQ2hhbmdlKSByZXR1cm47XG4gIGNvbnN0IGhpZGRlbiA9IHNlbGYuaGlkZGVuO1xuICBjb25zdCBpc1NpbmdsZSA9IGF0dHIoc2VsZiwgU0FGRV9NVUxUSVNFTEVDVEFCTEUpICE9PSBcInRydWVcIjtcbiAgY29uc3QgaXNUeXBpbmcgPSBldmVudCBpbnN0YW5jZW9mIElucHV0RXZlbnQgJiYgIWlzRGF0YWxpc3RDbGljayhldmVudCk7XG4gIHNlbGYuaGlkZGVuID0gdHJ1ZTtcbiAgc2VsZi5fdmFsdWUgPSB2YWx1ZTtcbiAgZm9yIChjb25zdCBvcHQgb2Ygc2VsZi5vcHRpb25zKSB7XG4gICAgY29uc3QgY29udGVudCA9IFtvcHQudmFsdWUsIG9wdC5sYWJlbCwgb3B0LnRleHRdLm1hcChzYW5pdGl6ZSk7XG4gICAgb3B0LmhpZGRlbiA9ICFjb250ZW50LnNvbWUoKHN0cikgPT4gc3RyLmluY2x1ZGVzKHZhbHVlKSk7XG4gICAgaWYgKGlzU2luZ2xlICYmIGlzVHlwaW5nICYmIGlzSW50ZXJhY3RpdmVPcHRpb24ob3B0KSlcbiAgICAgIG9wdC5zZWxlY3RlZCA9IGNvbnRlbnQuaW5jbHVkZXModmFsdWUpO1xuICB9XG4gIHNlbGYuaGlkZGVuID0gaGlkZGVuO1xuICBjb25zdCB2aXNpYmxlID0gZ2V0VmlzaWJsZU9wdGlvbnMoc2VsZik7XG4gIGNsZWFyVGltZW91dChMSVZFX1RJTUVSKTtcbiAgTElWRV9USU1FUiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSB2aXNpYmxlLmZpbHRlcihpc0ludGVyYWN0aXZlT3B0aW9uKTtcbiAgICBjb25zdCBsaXZlU3JGaXggPSArK0xJVkVfU1JfRklYICUgMiA/IFwiXFx4QTBcIiA6IFwiXCI7XG4gICAgY29uc3QgY291bnRUZXh0ID0gYCR7YCR7c2VsZi5fdGV4dHNbbGVuZ3RoID09PSAxID8gXCJzaW5ndWxhclwiIDogXCJwbHVyYWxcIl19YC5yZXBsYWNlKFwiJWRcIiwgYCR7bGVuZ3RofWApfWA7XG4gICAgaWYgKExJVkUpXG4gICAgICBMSVZFLnRleHRDb250ZW50ID0gYCR7IWxlbmd0aCAmJiBzZWxmLmlubmVyVGV4dC50cmltKCkgfHwgY291bnRUZXh0fSR7bGl2ZVNyRml4fWA7XG4gIH0sIDFlMyk7XG4gIGlmIChJU19JT1MpXG4gICAgdmlzaWJsZS5tYXAoKG9wdCwgaW5kZXgsIGxlbmd0aCkgPT4ge1xuICAgICAgb3B0LnRpdGxlID0gYCR7aW5kZXggKyAxfS8ke2xlbmd0aH1gO1xuICAgIH0pO1xufTtcbmlmIChJU19CUk9XU0VSKVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwibGlzdFwiLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGdldFJvb3QodGhpcykuZ2V0RWxlbWVudEJ5SWQoYXR0cih0aGlzLCBcImxpc3RcIikgfHwgXCJcIik7XG4gICAgfVxuICB9KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtZGF0YWxpc3RcIiwgVUhUTUxEYXRhTGlzdEVsZW1lbnQpO1xudmFyIFNQTElUX0NIQVIgPSBcIlxcdTIwMDFcIi5yZXBlYXQoMTAwKTtcbnZhciBTUExJVF9BVFRSID0gSVNfRklSRUZPWCA/IFwibGFiZWxcIiA6IFwidmFsdWVcIjtcbnZhciBGSVJFRk9YX09QVElPTl9DTElDSyA9IFwiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0XCI7XG52YXIgZ2V0RGF0YWxpc3RWYWx1ZSA9ICh7XG4gIHZhbHVlXG59KSA9PiB2YWx1ZS5zcGxpdChTUExJVF9DSEFSKVswXTtcbmZ1bmN0aW9uIGlzRGF0YWxpc3RDbGljayhldmVudCkge1xuICB2YXIgX2EyO1xuICBjb25zdCBpc0NsaWNrID0gZXZlbnQgaW5zdGFuY2VvZiBFdmVudCAmJiBldmVudC50eXBlID09PSBcImlucHV0XCIgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiAoIWV2ZW50LmlucHV0VHlwZSB8fCBldmVudC5pbnB1dFR5cGUgPT09IEZJUkVGT1hfT1BUSU9OX0NMSUNLKTtcbiAgaWYgKGlzQ2xpY2spIHtcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBjb25zdCBpZ25vcmVkID0gQXJyYXkuZnJvbSgoKF9hMiA9IGV2ZW50LnRhcmdldC5saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLm9wdGlvbnMpIHx8IFtdKS5zb21lKFxuICAgICAgKG9wdCkgPT4gb3B0LnZhbHVlID09PSB2YWx1ZSAmJiAhaXNJbnRlcmFjdGl2ZU9wdGlvbihvcHQpXG4gICAgKTtcbiAgICBldmVudC50YXJnZXQudmFsdWUgPSB2YWx1ZS5zcGxpdChTUExJVF9DSEFSKVtpZ25vcmVkID8gMSA6IDBdO1xuICB9XG4gIHJldHVybiBpc0NsaWNrO1xufVxuZnVuY3Rpb24gc3luY0RhdGFsaXN0U3RhdGUoaW5wdXQpIHtcbiAgdmFyIF9hMjtcbiAgZm9yIChjb25zdCBvcHRpb24gb2YgKChfYTIgPSBpbnB1dC5saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNoaWxkcmVuKSB8fCBbXSlcbiAgICBpZiAob3B0aW9uIGluc3RhbmNlb2YgSFRNTE9wdGlvbkVsZW1lbnQgfHwgb3B0aW9uIGluc3RhbmNlb2YgVUhUTUxPcHRpb25FbGVtZW50KSB7XG4gICAgICBvcHRpb25bU1BMSVRfQVRUUl0gPSBgJHtnZXREYXRhbGlzdFZhbHVlKG9wdGlvbil9JHtTUExJVF9DSEFSfSR7aW5wdXQudmFsdWV9YDtcbiAgICB9XG59XG5cbmV4cG9ydCB7IFVIVE1MRGF0YUxpc3RFbGVtZW50LCBnZXREYXRhbGlzdFZhbHVlLCBpc0RhdGFsaXN0Q2xpY2ssIHN5bmNEYXRhbGlzdFN0YXRlIH07XG4iLCJpbXBvcnQgeyBVSFRNTERhdGFMaXN0RWxlbWVudCB9IGZyb20gXCJAdS1lbGVtZW50cy91LWRhdGFsaXN0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0UVVJQ0tfRVZFTlQsXG5cdGF0dHIsXG5cdGlzSW5wdXRMaWtlLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdG9uTXV0YXRpb24sXG5cdHVzZUlkLFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0ZJRUxEID0gc3R5bGVzLmZpZWxkLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19QUk9QRVJUWV9PVkVSID0gXCItLW10ZHMtdGV4dC1jb3VudC1vdmVyXCI7XG5jb25zdCBDU1NfUFJPUEVSVFlfVU5ERVIgPSBcIi0tbXRkcy10ZXh0LWNvdW50LXVuZGVyXCI7XG5jb25zdCBDU1NfVkFMSURBVElPTlMgPSBzdHlsZXMudmFsaWRhdGlvbi5zcGxpdChcIiBcIik7XG5jb25zdCBDU1NfVkFMSURBVElPTiA9IENTU19WQUxJREFUSU9OU1swXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oZmllbGRzOiBIVE1MQ29sbGVjdGlvbk9mPEVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKVxuXHRcdGlmIChmaWVsZC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0Y29uc3QgbGFiZWxzOiBIVE1MTGFiZWxFbGVtZW50W10gPSBbXTtcblx0XHRcdGNvbnN0IGRlc2NzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0bGV0IGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgZGF0YWxpc3Q6IFVIVE1MRGF0YUxpc3RFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGVsIG9mIGZpZWxkLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSkge1xuXHRcdFx0XHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MTGFiZWxFbGVtZW50KSBsYWJlbHMucHVzaChlbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgVUhUTUxEYXRhTGlzdEVsZW1lbnQpIGRhdGFsaXN0ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSkgaW5wdXQgPSBlbDtcblx0XHRcdFx0ZWxzZSBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdC8vIE11c3QgYmUgYmVmb3JlIGluc3RhbmNlb2YgSFRNTFBhcmFncmFwaEVsZW1lbnQgc2luY2UgdmFsaWRhdGlvbiBjYW4gYWxzbyBiZSBhIDxwPlxuXHRcdFx0XHRcdHZhbGlkID1cblx0XHRcdFx0XHRcdGF0dHIoZWwsIFwiZGF0YS1jb2xvclwiKSA9PT0gXCJzdWNjZXNzXCIgfHxcblx0XHRcdFx0XHRcdCFlbC5jbGllbnRXaWR0aCB8fFxuXHRcdFx0XHRcdFx0IWVsLmNsaWVudEhlaWdodDsgLy8gT25seSBzZXQgaW52YWxpZCBpZiBWYWxpZGF0aW9uIGlzIHZpc2libGVcblx0XHRcdFx0XHRkZXNjcy51bnNoaWZ0KHVzZUlkKGVsKSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBIVE1MUGFyYWdyYXBoRWxlbWVudCkgZGVzY3MucHVzaCh1c2VJZChlbCkpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaW5wdXQpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBsYWJlbCBvZiBsYWJlbHMpIGxhYmVsLmh0bWxGb3IgPSB1c2VJZChpbnB1dCk7XG5cdFx0XHRcdHJlbmRlckRhdGFsaXN0KGlucHV0LCBkYXRhbGlzdCk7XG5cdFx0XHRcdHJlbmRlckNvdW50ZXIoaW5wdXQpO1xuXHRcdFx0XHRyZW5kZXJUZXh0YXJlYVNpemUoaW5wdXQpO1xuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgZGVzY3Muam9pbihcIiBcIikgfHwgbnVsbCk7IC8vIFJlbW92ZSBpZiBlbXB0eVxuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtaW52YWxpZFwiLCBgJHshdmFsaWR9YCk7XG5cdFx0XHR9XG5cdFx0fVxufVxuXG4vLyBpT1MgZG9lcyBub3Qgc3VwcG9ydCBmaWVsZC1zaXppbmc6IGNvbnRlbnQsIHNvIHdlIG5lZWQgdG8gbWFudWFsbHkgcmVzaXplXG5mdW5jdGlvbiByZW5kZXJUZXh0YXJlYVNpemUodGV4dGFyZWE6IEVsZW1lbnQpIHtcblx0aWYgKHRleHRhcmVhIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuXHRcdHRleHRhcmVhLnN0eWxlLnNldFByb3BlcnR5KFwiLS1tdGRzLXRleHRhcmVhLWhlaWdodFwiLCBcImF1dG9cIik7XG5cdFx0dGV4dGFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG5cdFx0XHRcIi0tbXRkcy10ZXh0YXJlYS1oZWlnaHRcIixcblx0XHRcdGAke3RleHRhcmVhLnNjcm9sbEhlaWdodH1weGAsXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW5kZXJEYXRhbGlzdChcblx0aW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQsXG5cdGxpc3Q/OiBVSFRNTERhdGFMaXN0RWxlbWVudCB8IG51bGwsXG4pIHtcblx0YXR0cihpbnB1dCwgXCJsaXN0XCIsIGxpc3QgPyB1c2VJZChsaXN0KSA6IG51bGwpO1xuXG5cdGlmICghbGlzdCkgcmV0dXJuO1xuXHRpZiAoIWlucHV0Lmhhc0F0dHJpYnV0ZShcInBsYWNlaG9sZGVyXCIpKSBhdHRyKGlucHV0LCBcInBsYWNlaG9sZGVyXCIsIFwiXCIpOyAvLyBOZWVkZWQgdG8gcmVuZGVyIGRyb3Bkb3duIGNoZXZyb24gd2hlbiA8ZGF0YWxpc3Q+IGlzIHByZXNlbnRcblxuXHQvLyBTZXR1cCB0cmFuc2xhdGlvbnMgZnJvbSBDU1MgY3VzdG9tIHByb3BlcnRpZXNcblx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShsaXN0KTtcblx0Y29uc3QgdGFncyA9IGlucHV0LmNsb3Nlc3QoXCJ1LXRhZ3NcIik7XG5cdGNvbnN0IGkxMW4gPSAoa2V5OiBzdHJpbmcpID0+IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoYC0tbXRkcy10ZXh0LSR7a2V5fWApO1xuXG5cdGF0dHIobGlzdCwgXCJkYXRhLXNyLXBsdXJhbFwiLCBpMTFuKFwiZGF0YWxpc3QtcGx1cmFsXCIpKTtcblx0YXR0cihsaXN0LCBcImRhdGEtc3Itc2luZ3VsYXJcIiwgaTExbihcImRhdGFsaXN0LXNpbmd1bGFyXCIpKTtcblxuXHRpZiAodGFncykge1xuXHRcdGF0dHIodGFncywgXCJkYXRhLXNyLWFkZGVkXCIsIGkxMW4oXCJ0YWdzLWFkZGVkXCIpKTtcblx0XHRhdHRyKHRhZ3MsIFwiZGF0YS1zci1lbXB0eVwiLCBpMTFuKFwidGFncy1lbXB0eVwiKSk7XG5cdFx0YXR0cih0YWdzLCBcImRhdGEtc3ItZm91bmRcIiwgaTExbihcInRhZ3MtZm91bmRcIikpO1xuXHRcdGF0dHIodGFncywgXCJkYXRhLXNyLW9mXCIsIGkxMW4oXCJ0YWdzLW9mXCIpKTtcblx0XHRhdHRyKHRhZ3MsIFwiZGF0YS1zci1yZW1vdmVcIiwgaTExbihcInRhZ3MtcmVtb3ZlXCIpKTtcblx0XHRhdHRyKHRhZ3MsIFwiZGF0YS1zci1yZW1vdmVkXCIsIGkxMW4oXCJ0YWdzLXJlbW92ZWRcIikpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlbmRlckNvdW50ZXIoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0Y29uc3QgZWwgPSBpbnB1dD8ubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRjb25zdCBsaW1pdCA9IGVsICYmIGF0dHIoZWwsIFwiZGF0YS1jb3VudFwiKTtcblxuXHRpZiAoZWwgJiYgbGltaXQpIHtcblx0XHRjb25zdCByZW1haW5kZXIgPSBOdW1iZXIobGltaXQpIC0gaW5wdXQudmFsdWUubGVuZ3RoO1xuXHRcdGNvbnN0IG5leHRJbnZhbGlkID0gcmVtYWluZGVyIDwgMDtcblx0XHRjb25zdCBwcmV2SW52YWxpZCA9IGF0dHIoZWwsIFwiYXJpYS1saXZlXCIpID09PSBcInBvbGl0ZVwiO1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwgfHwgaW5wdXQpO1xuXHRcdGNvbnN0IG92ZXIgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKENTU19QUk9QRVJUWV9PVkVSKT8uc2xpY2UoMSwgLTEpIHx8IFwiXCI7IC8vIHNsaWNlIHRvIHRyaW0gcXVvdGVzXG5cdFx0Y29uc3QgdW5kZXIgPVxuXHRcdFx0c3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShDU1NfUFJPUEVSVFlfVU5ERVIpPy5zbGljZSgxLCAtMSkgfHwgXCJcIjsgLy8gc2xpY2UgdG8gdHJpbSBxdW90ZXNcblxuXHRcdGlmIChwcmV2SW52YWxpZCAhPT0gbmV4dEludmFsaWQpIHtcblx0XHRcdGF0dHIoZWwsIFwiYXJpYS1saXZlXCIsIG5leHRJbnZhbGlkID8gXCJwb2xpdGVcIiA6IFwib2ZmXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBjc3Mgb2YgQ1NTX1ZBTElEQVRJT05TKSBlbC5jbGFzc0xpc3QudG9nZ2xlKGNzcywgbmV4dEludmFsaWQpO1xuXHRcdH1cblx0XHRlbC50ZXh0Q29udGVudCA9IChuZXh0SW52YWxpZCA/IG92ZXIgOiB1bmRlcikucmVwbGFjZShcblx0XHRcdFwiJWRcIixcblx0XHRcdGAke01hdGguYWJzKHJlbWFpbmRlcil9YCxcblx0XHQpO1xuXHR9XG59XG5cbi8vIFVwZGF0ZSB3aGVuIHR5cGluZ1xuZnVuY3Rpb24gaGFuZGxlSW5wdXQoeyB0YXJnZXQgfTogRXZlbnQpIHtcblx0aWYgKGlzSW5wdXRMaWtlKHRhcmdldCkpIHtcblx0XHRyZW5kZXJDb3VudGVyKHRhcmdldCk7XG5cdFx0cmVuZGVyVGV4dGFyZWFTaXplKHRhcmdldCk7XG5cblx0XHQvLyBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldDtcblx0XHQvLyBjb25zdCBsaXN0ID0gaW5wdXQubGlzdDtcblx0XHQvLyBpZiAobGlzdCkge1xuXHRcdC8vICAgY29uc29sZS5sb2coJ2V0dGVycMOlJyk7XG5cdFx0Ly8gICBpZiAoaXNEYXRhbGlzdENsaWNrKGV2ZW50KSkgcmV0dXJuOyAvLyBVc2VyIGNsaWNrZWQgb3B0aW9uIGVsZW1lbnRcblx0XHQvLyAgIGlmIChhdHRyKGxpc3QsICdkYXRhLWZpbHRlcicpID09PSAnZmFsc2UnKSBzeW5jRGF0YWxpc3RTdGF0ZShpbnB1dCk7IC8vIEFsbG93IGN1c3RvbSBmaWx0ZXJpbmdcblx0XHQvLyB9XG5cdH1cbn1cblxuLy8gUHJldmVudCBicm93c2VycyBmcm9tIHNob3dpbmcgZGVmYXVsdCB2YWxpZGF0aW9uIGJ1YmJsZXNcbmZ1bmN0aW9uIGhhbmRsZUludmFsaWQoZXZlbnQ6IEV2ZW50KSB7XG5cdGlmICgoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oYC4ke0NTU19GSUVMRH1gKSlcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfRklFTEQsIGhhbmRsZU11dGF0aW9uKTtcblx0b24oZG9jdW1lbnQsIFwiaW5wdXRcIiwgaGFuZGxlSW5wdXQsIFFVSUNLX0VWRU5UKTtcblx0b24oZG9jdW1lbnQsIFwiaW52YWxpZFwiLCBoYW5kbGVJbnZhbGlkLCB0cnVlKTsgLy8gVXNlIGNhcHR1cmUgYXMgaW52YWxpZCBkb2VzIG5vZSBidXR0bGVcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIGlzSW5wdXRMaWtlLCBvbkxvYWRlZCwgb25NdXRhdGlvbiwgdXNlSWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0ZJRUxEU0VUID0gc3R5bGVzLmZpZWxkc2V0LnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19WQUxJREFUSU9OID0gc3R5bGVzLnZhbGlkYXRpb24uc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihmaWVsZHNldHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCBmaWVsZHNldCBvZiBmaWVsZHNldHMpXG5cdFx0aWYgKGZpZWxkc2V0LmlzQ29ubmVjdGVkKSB7XG5cdFx0XHRjb25zdCBpbnB1dHM6IEhUTUxJbnB1dEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0bGV0IHZhbGlkYXRpb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cblx0XHRcdGZvciAoY29uc3QgZWwgb2YgZmllbGRzZXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpKSB7XG5cdFx0XHRcdGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1ZBTElEQVRJT04pKSB2YWxpZGF0aW9uSWQgPSB1c2VJZChlbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSkgaW5wdXRzLnB1c2goZWwpO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykge1xuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgdmFsaWRhdGlvbklkKTtcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWludmFsaWRcIiwgYCR7ISF2YWxpZGF0aW9uSWR9YCk7XG5cdFx0XHR9XG5cdFx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PlxuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0ZJRUxEU0VULCBoYW5kbGVNdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19MT0dPID0gc3R5bGVzLmxvZ28uc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihbbG9nb106IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdGlmIChsb2dvPy5pc0Nvbm5lY3RlZCAmJiBsb2dvPy5maXJzdEVsZW1lbnRDaGlsZCBpbnN0YW5jZW9mIFNWR1NWR0VsZW1lbnQpIHtcblx0XHRmb3IgKGNvbnN0IGljb24gb2YgZG9jdW1lbnQuaGVhZC5xdWVyeVNlbGVjdG9yQWxsKFwibGlua1tyZWx+PSdpY29uJ11cIikpXG5cdFx0XHRpY29uLnNldEF0dHJpYnV0ZShcInJlbFwiLCBcImRpc2FibGVkXCIpOyAvLyBEaXNhYmxlIHByZXZpb3VzIGljb24gKGJ1dCBub3QgcmVtb3ZlIGlzIGFzIHRoaXMgbWFrZXMgTmV4dC5qcyBzYWQpXG5cblx0XHRjb25zdCBzdmcgPSBsb2dvLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdGNvbnN0IGlzRG90ID0gbG9nbz8uaGFzQXR0cmlidXRlKFwiZGF0YS1lbnZcIik7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzdmcpO1xuXHRcdGNvbnN0IHRleHQgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sb3JcIik7XG5cdFx0Y29uc3QgYmFjayA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCItLW10ZHMtbG9nby1jb2xvclwiKTtcblx0XHRjb25zdCBpY29uID0gc3ZnLm91dGVySFRNTFxuXHRcdFx0LnJlcGxhY2UoL1xcbisvZywgXCIgXCIpIC8vIFByZXZlbnQgbGluZSBicmVha3Ncblx0XHRcdC5yZXBsYWNlKC8oZmlsbHx3aWR0aHxoZWlnaHR8eG1sbnMpPVxcUysvZ2ksIFwiXCIpXG5cdFx0XHQucmVwbGFjZShcIjxzdmdcIiwgYDxzdmcgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgZmlsbD1cIiR7dGV4dH1cImApO1xuXG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChcblx0XHRcdE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIiksIHtcblx0XHRcdFx0aHJlZjogYGRhdGE6aW1hZ2Uvc3ZnK3htbCwke2VuY29kZVVSSUNvbXBvbmVudChgPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA1NSA1NSc+PHJlY3QgZmlsbD0nJHtpc0RvdCA/IFwibm9uZVwiIDogYmFja30nIHdpZHRoPSc1MScgaGVpZ2h0PSc1MScgeD0nMicgeT0nMicgc3Ryb2tlPScke3RleHR9JyBzdHJva2UtZGFzaGFycmF5PScwLjA5IDYuMzgnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW9wYWNpdHk9JyR7aXNEb3QgPyAwLjYgOiAwfScgc3Ryb2tlLXdpZHRoPScyLjMnIHJ4PScyNS41Jy8+PGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDcuNSA3LjUpXCI+JHtpY29ufTwvZz48L3N2Zz5gKX1gLFxuXHRcdFx0XHRyZWw6IFwiaWNvblwiLFxuXHRcdFx0fSksXG5cdFx0KTtcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiBvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0xPR08sIGhhbmRsZU11dGF0aW9uKSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgUVVJQ0tfRVZFTlQsIGFuY2hvclBvc2l0aW9uLCBhdHRyLCBvbiwgb25Mb2FkZWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1BPUE9WRVIgPSBzdHlsZXMucG9wb3Zlci5zcGxpdChcIiBcIilbMF07XG5sZXQgT1BFTl9QT1BPVkVSUyA9IDA7IC8vIFNwZWVkIHVwIGJ5IG9ubHkgY2hlY2tpbmcgY2xpY2tzIGlmIHdlIGhhdmUgb3BlbiBwb3BvdmVyc1xuXG5mdW5jdGlvbiBoYW5kbGVUb2dnbGUoeyB0YXJnZXQ6IGVsLCBuZXdTdGF0ZSB9OiBFdmVudCAmIHsgbmV3U3RhdGU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1BPUE9WRVIpKSB7XG5cdFx0Y29uc3QgYW5jaG9yID0gKGVsLmdldFJvb3ROb2RlKCkgYXMgU2hhZG93Um9vdCk/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuXHRcdFx0YFtwb3BvdmVydGFyZ2V0PVwiJHtlbC5pZH1cIl1gLFxuXHRcdCk7XG5cblx0XHRpZiAobmV3U3RhdGUgPT09IFwiY2xvc2VkXCIpIHtcblx0XHRcdE9QRU5fUE9QT1ZFUlMgLT0gMTtcblx0XHRcdGFuY2hvclBvc2l0aW9uKGVsLCBmYWxzZSk7XG5cdFx0fSBlbHNlIGlmIChhbmNob3IpIHtcblx0XHRcdE9QRU5fUE9QT1ZFUlMgKz0gMTtcblx0XHRcdGFuY2hvclBvc2l0aW9uKGVsLCBhbmNob3IsIGF0dHIoZWwsIFwiZGF0YS1wb3NpdGlvblwiKSB8fCBcImJvdHRvbVwiKTtcblx0XHR9XG5cdH1cbn1cblxuLy8gUG9seWZpbGwgcG9wb3ZlcnRhcmdldCBmb3IgPGE+IChub3Qgc3VwcG9ydGVkIGJ5IG5hdGl2ZSlcbi8vIGFuZCBhdXRvbWF0aWNhbGx5IGFzc3VtZSBwb3BvdmVydGFyZ2V0IGlzIHRoZSBjbG9zZXN0IHBhcmVudCBwb3BvdmVyXG4vLyBidXQgcmVzcGVjdCB0aGUgcG9wb3ZlcnRhcmdldCBhbmQgcG9wb3ZlcnRhcmdldGFjdGlvbiBhdHRyaWJ1dGVcbmZ1bmN0aW9uIGhhbmRsZUxpbmtDbGljayh7IHRhcmdldCB9OiBFdmVudCkge1xuXHRjb25zdCBjbG9zZSA9XG5cdFx0T1BFTl9QT1BPVkVSUyAmJiAodGFyZ2V0IGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oXCJhLFtwb3BvdmVydGFyZ2V0YWN0aW9uXVwiKTtcblxuXHRpZiAoY2xvc2UpIHtcblx0XHRjb25zdCBhY3Rpb24gPSBhdHRyKGNsb3NlLCBcInBvcG92ZXJ0YXJnZXRhY3Rpb25cIikgfHwgXCJ0b2dnbGVcIjtcblx0XHRjb25zdCBvcGVuID0gYWN0aW9uID09PSBcInNob3dcIiB8fCAoYWN0aW9uID09PSBcImhpZGVcIiA/IGZhbHNlIDogdW5kZWZpbmVkKTtcblx0XHRjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhdHRyKGNsb3NlLCBcInBvcG92ZXJ0YXJnZXRcIikgfHwgXCJcIik7XG5cdFx0Y29uc3QgcG9wb3ZlciA9ICh0YXJnZXQgfHwgY2xvc2UpLmNsb3Nlc3Q8SFRNTEVsZW1lbnQ+KGAuJHtDU1NfUE9QT1ZFUn1gKTtcblxuXHRcdC8vIFBvcG92ZXIgY2FuIGJlIGRpc2Nvbm5ldGVkIGJ5IGNsaWNrIGhhbmRsZXIgZGVlcGVyIGRvd24gaW4gdGhlIERPTSB0aHJlZSBiZWZvcmUgcmVhY2hpbmcgZG9jdW1lbnRcblx0XHRpZiAocG9wb3Zlcj8uaXNDb25uZWN0ZWQgJiYgcG9wb3Zlcj8udG9nZ2xlUG9wb3Zlcilcblx0XHRcdHBvcG92ZXIudG9nZ2xlUG9wb3ZlcihvcGVuKTtcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uKGRvY3VtZW50LCBcInRvZ2dsZVwiLCBoYW5kbGVUb2dnbGUsIFFVSUNLX0VWRU5UKTsgLy8gVXNlIGNhcHR1cmUgc2luY2UgdG9nZ2xlIGRvZXMgbm90IGJ1YmJsZVxuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVMaW5rQ2xpY2spOyAvLyBBbGxvdyBgPGE+YCB0byB1c2UgYHBvcG92ZXJ0YXJnZXRgIGFzIHdlbGxcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19UQUJMRSA9IHN0eWxlcy50YWJsZS5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKHRhYmxlczogSFRNTENvbGxlY3Rpb25PZjxIVE1MVGFibGVFbGVtZW50Pikge1xuXHRmb3IgKGNvbnN0IHRhYmxlIG9mIHRhYmxlcykge1xuXHRcdGNvbnN0IHRoczogc3RyaW5nW10gPSBbXTsgLy8gQWRkIGRhdGEtdGg9XCJcIiB0byBlYWNoIGNlbGwgdG8gc3VwcG9ydCBkYXRhLW1vYmlsZSBkZXNpZ25zXG5cblx0XHRhdHRyKHRhYmxlLCBcInJvbGVcIiwgXCJ0YWJsZVwiKTsgLy8gQWRkIGhlbHBpbmcgcm9sZT1cIlwiIHRvIGVuc3VyZSBzY3JlZW4gcmVhZGVycyB1bmRlcnN0YW5kIHRoZSB0YWJsZSByZWdhcmRsZXNzIG9mIENTUyBkaXNwbGF5XG5cdFx0aWYgKHRhYmxlLmNhcHRpb24pIGF0dHIodGFibGUuY2FwdGlvbiwgXCJyb2xlXCIsIFwiY2FwdGlvblwiKTtcblx0XHRmb3IgKGNvbnN0IGdyb3VwIG9mIFt0YWJsZS50SGVhZCwgdGFibGUudEZvb3QsIC4uLnRhYmxlLnRCb2RpZXNdKVxuXHRcdFx0aWYgKGdyb3VwKSB7XG5cdFx0XHRcdGF0dHIoZ3JvdXAsIFwicm9sZVwiLCBcInJvd2dyb3VwXCIpO1xuXHRcdFx0XHRjb25zdCBpc1Rib2R5ID0gZ3JvdXAubm9kZU5hbWUgPT09IFwiVEJPRFlcIjtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHJvdyBvZiBncm91cC5yb3dzKSB7XG5cdFx0XHRcdFx0YXR0cihyb3csIFwicm9sZVwiLCBcInJvd1wiKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGNlbGwgb2Ygcm93LmNlbGxzKSB7XG5cdFx0XHRcdFx0XHRpZiAoaXNUYm9keSkgYXR0cihjZWxsLCBcImRhdGEtdGhcIiwgdGhzW2NlbGwuY2VsbEluZGV4XSB8fCBcIjplbXB0eVwiKTtcblx0XHRcdFx0XHRcdGVsc2UgdGhzLnB1c2goY2VsbC5pbm5lclRleHQudHJpbSgpKTsgLy8gVXNpbmcgaW5uZXJUZXh0IHRvIG9ubHkgaW5jbHVkZSB2aXNpYmxlIHRleHRcblx0XHRcdFx0XHRcdGlmIChjZWxsLm5vZGVOYW1lID09PSBcIlREXCIpIGF0dHIoY2VsbCwgXCJyb2xlXCIsIFwiY2VsbFwiKTtcblx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhdHRyKGNlbGwsIFwicm9sZVwiLCBpc1Rib2R5ID8gXCJyb3doZWFkZXJcIiA6IFwiY29sdW1uaGVhZGVyXCIpO1xuXHRcdFx0XHRcdFx0XHRhdHRyKGNlbGwsIFwic2NvcGVcIiwgaXNUYm9keSA/IFwicm93XCIgOiBcImNvbFwiKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiBvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX1RBQkxFLCBoYW5kbGVNdXRhdGlvbikpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdElTX0JST1dTRVIsXG5cdFFVSUNLX0VWRU5ULFxuXHRhbmNob3JQb3NpdGlvbixcblx0YXR0cixcblx0b24sXG5cdG9uTG9hZGVkLFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgREVTQ1JJQkVEQlkgPSBcImFyaWEtZGVzY3JpYmVkYnlcIjtcbmNvbnN0IEVTQyA9IFwiRXNjYXBlXCI7XG5jb25zdCBMQUJFTExFREJZID0gXCJhcmlhLWxhYmVsbGVkYnlcIjtcbmNvbnN0IFBPU0lUSU9OX0NTU19QUk9QRVJUWSA9IFwiLS1tdGRzLXRvb2x0aXAtcG9zaXRpb25cIjtcbmNvbnN0IFRIUk9UVExFX0RFTEFZID0gMzAwO1xuY29uc3QgVE9PTFRJUCA9IElTX0JST1dTRVJcblx0PyBPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIHtcblx0XHRcdGNsYXNzTmFtZTogc3R5bGVzLl90b29sdGlwLFxuXHRcdFx0aWQ6IFwibXRkcy10b29sdGlwXCIsXG5cdFx0XHRwb3BvdmVyOiBcIm1hbnVhbFwiLFxuXHRcdH0pXG5cdDogbnVsbDsgLy8gQ3JlYXRlIGEgZHVtbXkgZWxlbWVudCB0byBhdm9pZCBudWxsIGNoZWNrc1xuXG5sZXQgQU5DSE9SOiBFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5sZXQgTEFTVF9DQUxMID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xubGV0IFRIUk9UVExFOiBudW1iZXIgfCBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiA9IDA7XG5cbmZ1bmN0aW9uIGhhbmRsZU1vdmUoeyB0YXJnZXQsIHR5cGUsIGtleSB9OiBFdmVudCAmIHsga2V5Pzogc3RyaW5nIH0pIHtcblx0aWYgKHR5cGUgPT09IFwia2V5ZG93blwiICYmIGtleSAhPT0gRVNDKSByZXR1cm47IC8vIEFsbG93IEVTQyBkaXNtaXNzIHRvIGZvbGxvdyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL3Rvb2x0aXAvXG5cdGNvbnN0IHdhaXQgPSBMQVNUX0NBTEwgKyBUSFJPVFRMRV9ERUxBWSAtIERhdGUubm93KCk7XG5cdGNsZWFyVGltZW91dChUSFJPVFRMRSk7XG5cdFRIUk9UVExFID0gc2V0VGltZW91dChcblx0XHRoYW5kbGVNb3ZlVGhyb3R0bGVkLFxuXHRcdE1hdGgubWF4KHdhaXQsIDApLFxuXHRcdGtleSA9PT0gRVNDID8gbnVsbCA6IHRhcmdldCxcblx0KTtcbn1cblxuLy8gVXNpbmcgYSB0aHJvdHRsZWQgZnVuY3Rpb24gdG8gYXZvaWQgcGVyZm9ybWFuY2UgaXNzdWVzXG5mdW5jdGlvbiBoYW5kbGVNb3ZlVGhyb3R0bGVkKHRhcmdldDogRWxlbWVudCB8IG51bGwpIHtcblx0TEFTVF9DQUxMID0gRGF0ZS5ub3coKTtcblxuXHQvLyBCdWlsZCBhbmQgYXBwZW5kIHRvb2x0aXAgaWYgbm90IGV4aXN0aW5nXG5cdGlmICghVE9PTFRJUCB8fCB0YXJnZXQgPT09IFRPT0xUSVApIHJldHVybjsgLy8gQWxsb3cgdG9vbHRpcCB0byBiZSBob3ZlcmVkLCBmb2xsb3dpbmcgaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMS8jY29udGVudC1vbi1ob3Zlci1vci1mb2N1c1xuXHRpZiAoIVRPT0xUSVA/LmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChUT09MVElQKTsgLy8gRW5zdXJlIGNvbm5lY3RlZFxuXHRsZXQgYW5jaG9yID0gdGFyZ2V0Py5jbG9zZXN0Py48RWxlbWVudD4oXCJbZGF0YS10b29sdGlwXVwiKSB8fCBudWxsO1xuXG5cdC8vIE5vIG5lZWQgdG8gdXBkYXRlXG5cdGlmIChhbmNob3IgPT09IEFOQ0hPUikgcmV0dXJuO1xuXG5cdGNvbnN0IGNvbnRlbnQgPSAoYW5jaG9yICYmIGF0dHIoYW5jaG9yLCBcImRhdGEtdG9vbHRpcFwiKSkgfHwgXCJcIjtcblx0Y29uc3QgcG9zaXRpb24gPVxuXHRcdChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwLXBvc2l0aW9uXCIpKSB8fFxuXHRcdHdpbmRvd1xuXHRcdFx0LmdldENvbXB1dGVkU3R5bGUoYW5jaG9yIHx8IGRvY3VtZW50LmJvZHkpXG5cdFx0XHQuZ2V0UHJvcGVydHlWYWx1ZShQT1NJVElPTl9DU1NfUFJPUEVSVFkpXG5cdFx0XHQ/LnRyaW0oKSB8fFxuXHRcdFwidG9wXCI7XG5cblx0Y29uc3QgaXNIaWRkZW4gPVxuXHRcdCFjb250ZW50IHx8XG5cdFx0Y29udGVudCA9PT0gXCJmYWxzZVwiIHx8XG5cdFx0Y29udGVudCA9PT0gXCJ0cnVlXCIgfHxcblx0XHRwb3NpdGlvbiA9PT0gXCJub25lXCI7XG5cblx0aWYgKGlzSGlkZGVuKSBhbmNob3IgPSBudWxsOyAvLyBEbyBub3Qgc2hvdyB0b29sdGlwIGlmIGJvb2xpc2ggdmFsdWVcblx0aWYgKGFuY2hvcikgVE9PTFRJUC50ZXh0Q29udGVudCA9IGNvbnRlbnQ7IC8vIE9ubHkgdXBkYXRlIGNvbnRlbnQgaWYgbmV3IGFuY2hvclxuXG5cdGNvbnN0IGhhZExhYmVsID0gQU5DSE9SICYmIGF0dHIoQU5DSE9SLCBMQUJFTExFREJZKSA9PT0gVE9PTFRJUD8uaWQ7XG5cdGNvbnN0IGhhc0xhYmVsID1cblx0XHQoYW5jaG9yIGluc3RhbmNlb2YgSFRNTEVsZW1lbnRcblx0XHRcdD8gYW5jaG9yLmlubmVyVGV4dFxuXHRcdFx0OiBhbmNob3I/LnRleHRDb250ZW50XG5cdFx0KT8udHJpbSgpIHx8XG5cdFx0YW5jaG9yPy5oYXNBdHRyaWJ1dGUoTEFCRUxMRURCWSkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShcImFyaWEtbGFiZWxcIik7XG5cblx0QU5DSE9SPy5yZW1vdmVBdHRyaWJ1dGUoaGFkTGFiZWwgPyBMQUJFTExFREJZIDogREVTQ1JJQkVEQlkpOyAvLyBVbmxpbmsgcHJldmlvdXMgYW5jaG9yXG5cdGFuY2hvclBvc2l0aW9uKFRPT0xUSVAsIGZhbHNlKTsgLy8gUmVzZXQgYW5jaG9yIHBvc2l0aW9uXG5cblx0QU5DSE9SID0gYW5jaG9yOyAvLyBTdG9yZSBuZXcgYW5jaG9yIC0gbWlnaHQgYmUgbnVsbCBpZiBubyBuZXcgYW5jaG9yXG5cdGlmIChBTkNIT1IpIGF0dHIoQU5DSE9SLCBoYXNMYWJlbCA/IERFU0NSSUJFREJZIDogTEFCRUxMRURCWSwgVE9PTFRJUD8uaWQpOyAvLyBVc2UgdG9vbHRpcCBhcyBkZXNjcmlwdGlvbiBpZiBhbGxyZWFkeSBoYXMgbGFiZWxcblx0VE9PTFRJUC50b2dnbGVQb3BvdmVyKCEhYW5jaG9yKTtcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgYW5jaG9yIHx8IGZhbHNlLCBwb3NpdGlvbik7XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwiYmx1cixmb2N1cyxtb3VzZW91dCxtb3VzZW92ZXJcIiwgaGFuZGxlTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwia2V5ZG93blwiLCBoYW5kbGVNb3ZlLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJibHVyXCIsIGhhbmRsZU1vdmUsIFFVSUNLX0VWRU5UKTtcbn0pO1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG5cbi8vIHUtZGV0YWlscy50c1xudmFyIFVIVE1MRGV0YWlsc0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgLy8gVXNpbmcgdW5kZXJzY29yZSBpbnN0ZWFkIG9mIHByaXZhdGUgZmllbGRzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgIHRoaXMuX2NvbnRlbnQgPSBudWxsO1xuICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBuYW1lOiBcInN1bW1hcnlcIiB9KSxcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgcGFydDogXCJkZXRhaWxzLWNvbnRlbnRcIiB9KSxcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYCR7RElTUExBWV9CTE9DS31cbiAgICAgICAgOjpzbG90dGVkKHUtc3VtbWFyeSkgeyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGJsb2NrIH1cblx0XHRcdFx0OjpzbG90dGVkKHUtc3VtbWFyeSk6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1hcmdpbi1pbmxpbmU6IC4wNWVtIC4zMTI1ZW07IGJvcmRlci1ibG9jazogLjMxMjVlbSBzb2xpZCB0cmFuc3BhcmVudDsgYm9yZGVyLWlubGluZS1zdGFydDogLjVlbSBzb2xpZCB9XG5cdFx0XHRcdDo6c2xvdHRlZCh1LXN1bW1hcnlbYXJpYS1leHBhbmRlZD1cInRydWVcIl0pOjpiZWZvcmUgeyByb3RhdGU6IDkwZGVnIH1cblx0XHRcdFx0Omhvc3QgPiBbcGFydD1cImRldGFpbHMtY29udGVudFwiXTpub3QoW2hpZGRlbj1cIlwiXSkgeyBkaXNwbGF5OiBibG9jayB9YFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcIm9wZW5cIl07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdmFyIF9hMjtcbiAgICB0aGlzLl9jb250ZW50ID0gKF9hMiA9IHRoaXMuc2hhZG93Um9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jaGlsZHJlblsxXTtcbiAgICBvbih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLl9jb250ZW50KSBvZmYodGhpcy5fY29udGVudCwgXCJiZWZvcmVtYXRjaFwiLCB0aGlzKTtcbiAgICBvZmYodGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuX2NvbnRlbnQgPSBudWxsO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBwcmV2LCBuZXh0KSB7XG4gICAgY29uc3QgaGlkZSA9IFwib25iZWZvcmVtYXRjaFwiIGluIHRoaXMgPyBcInVudGlsLWZvdW5kXCIgOiB0cnVlO1xuICAgIGNvbnN0IG9wZW4gPSB0aGlzLm9wZW47XG4gICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLmNoaWxkcmVuKVxuICAgICAgaWYgKGVsLm5vZGVOYW1lID09PSBcIlUtU1VNTUFSWVwiKSBhdHRyKGVsLCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7b3Blbn1gKTtcbiAgICBpZiAodGhpcy5fY29udGVudCkge1xuICAgICAgYXR0cih0aGlzLl9jb250ZW50LCBcImFyaWEtaGlkZGVuXCIsIGAkeyFvcGVufWApO1xuICAgICAgdGhpcy5fY29udGVudC5oaWRkZW4gPSBvcGVuID8gZmFsc2UgOiBoaWRlO1xuICAgIH1cbiAgICBpZiAob3BlbiAmJiB0aGlzLm5hbWUpIHtcbiAgICAgIGNvbnN0IHVEZXRhaWxzTGlzdCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYCR7dGhpcy5ub2RlTmFtZX1bbmFtZT1cIiR7dGhpcy5uYW1lfVwiXWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IHVEZXRhaWxzIG9mIHVEZXRhaWxzTGlzdClcbiAgICAgICAgaWYgKHVEZXRhaWxzICE9PSB0aGlzKSB1RGV0YWlscy5vcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChwcm9wID09PSBcIm9wZW5cIiAmJiBwcmV2ID09PSBudWxsICE9PSAobmV4dCA9PT0gbnVsbCkpXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwidG9nZ2xlXCIpKTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCI6c2NvcGUgPiB1LXN1bW1hcnlcIik7XG4gICAgY29uc3QgaXNTdW1tYXJ5ID0gc3VtbWFyeSA9PSBudWxsID8gdm9pZCAwIDogc3VtbWFyeS5jb250YWlucyhldmVudC50YXJnZXQpO1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmVmb3JlbWF0Y2hcIikgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICBpZiAoaXNTdW1tYXJ5ICYmIGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiKSBhc0J1dHRvbihldmVudCk7XG4gICAgaWYgKGlzU3VtbWFyeSAmJiBldmVudC50eXBlID09PSBcImNsaWNrXCIpIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XG4gIH1cbiAgZ2V0IG9wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwib3BlblwiKTtcbiAgfVxuICBzZXQgb3Blbih2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJvcGVuXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIFwibmFtZVwiKSB8fCBcIlwiO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcIm5hbWVcIiwgdmFsdWUpO1xuICB9XG59O1xudmFyIFVIVE1MU3VtbWFyeUVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIHRoaXMuc2xvdCA9IFwic3VtbWFyeVwiO1xuICAgIHRoaXMudGFiSW5kZXggPSAwO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1kZXRhaWxzXCIsIFVIVE1MRGV0YWlsc0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1zdW1tYXJ5XCIsIFVIVE1MU3VtbWFyeUVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERldGFpbHNFbGVtZW50LCBVSFRNTFN1bW1hcnlFbGVtZW50IH07XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfRklSRUZPWCA9IElTX0JST1dTRVIgJiYgL2ZpcmVmb3gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBfYTI7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gKF9hMiA9IGVsLmdldEF0dHJpYnV0ZShuYW1lKSkgIT0gbnVsbCA/IF9hMiA6IG51bGw7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIGdldExhYmVsID0gKGVsKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSBnZXRSb290KGVsKTtcbiAgY29uc3QgbGFiZWwgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikgfHwgXCJcIjtcbiAgY29uc3QgbGFiZWxzID0gKChfYTIgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxsZWRieVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkuc3BsaXQoL1xccysvKSkgfHwgW107XG4gIHJldHVybiBbXG4gICAgLi4ubGFiZWxzLm1hcCgoaWQyKSA9PiByb290ID09IG51bGwgPyB2b2lkIDAgOiByb290LnF1ZXJ5U2VsZWN0b3IoYFtpZD1cIiR7aWQyfVwiXWApKSxcbiAgICAvLyBHZXQgYWxsIGxhYmVsbGVkYnkgZWxlbWVudHNcbiAgICAuLi5BcnJheS5mcm9tKGVsLmxhYmVscyB8fCBbXSlcbiAgICAvLyBHZXQgYWxsIDxsYWJlbD4gZWxlbWVudHNcbiAgXS5yZWR1Y2UoKGFjYywgZWwyKSA9PiB7XG4gICAgdmFyIF9hMztcbiAgICByZXR1cm4gYWNjIHx8ICgoX2EzID0gZWwyID09IG51bGwgPyB2b2lkIDAgOiBlbDIuaW5uZXJUZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnRyaW0oKSkgfHwgXCJcIjtcbiAgfSwgbGFiZWwpO1xufTtcblxuLy8gdS1wcm9ncmVzcy50c1xudmFyIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbnZhciBVSFRNTFByb2dyZXNzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIiwgXCJ2YWx1ZVwiLCBcIm1heFwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBoaWRkZW46IFwiXCIgfSksXG4gICAgICAvLyBTbG90IGhpZGluZyBjb250ZW50IGFsbG93cyBsZWdhY3kgYnJvd3NlciB0byBkaXNwbGF5IGZhbGxiYWNrIHRleHRcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYDpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGJvcmRlcjogMXB4IHNvbGlkOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGhlaWdodDogLjVlbTsgd2lkdGg6IDEwZW07IG92ZXJmbG93OiBoaWRkZW4gfVxuICAgICAgICA6aG9zdDo6YmVmb3JlIHsgY29udGVudDogJyc7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDEwMCU7IGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsgd2lkdGg6IHZhcigtLXBlcmNlbnRhZ2UsIDAlKTsgdHJhbnNpdGlvbjogd2lkdGggLjJzIH1cbiAgICAgICAgOmhvc3QoOm5vdChbdmFsdWVdKSkgeyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsY3VycmVudENvbG9yIDI1JSwgdHJhbnNwYXJlbnQgNTAlLCBjdXJyZW50Q29sb3IgNzUlKSA1MCUvNDAwJSB9XG4gICAgICAgIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSkgeyA6aG9zdCB7IGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZSAycyBsaW5lYXIgaW5maW5pdGUgfSAgfVxuICAgICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUgeyBmcm9tIHsgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAxMDAlIH0gdG8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDAgfSB9YFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKFNLSVBfQVRUUl9DSEFOR0UpIHJldHVybjtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gdHJ1ZTtcbiAgICBjb25zdCByb2xlSW1hZ2UgPSBJU19JT1MgfHwgSVNfRklSRUZPWDtcbiAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCh0aGlzLnBvc2l0aW9uICogMTAwKSk7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcGVyY2VudGFnZVwiLCBgJHtwZXJjZW50YWdlfSVgKTtcbiAgICBsZXQgbGFiZWwgPSBnZXRMYWJlbCh0aGlzKTtcbiAgICBpZiAocm9sZUltYWdlKSBsYWJlbCA9IGAke2xhYmVsLnJlcGxhY2UoL1xcZCslJC8sIFwiXCIpfSAke3BlcmNlbnRhZ2V9JWA7XG4gICAgaWYgKElTX0ZJUkVGT1gpIGZvciAoY29uc3QgZWwgb2YgdGhpcy5sYWJlbHMpIGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtYnVzeVwiLCBgJHt0aGlzLnBvc2l0aW9uID09PSAtMX1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbC50cmltKCkpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsbGVkYnlcIiwgbnVsbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtYXhcIiwgXCIxMDBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtaW5cIiwgXCIwXCIpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbm93XCIsIGAke3BlcmNlbnRhZ2V9YCk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgcm9sZUltYWdlID8gXCJpbWdcIiA6IFwicHJvZ3Jlc3NiYXJcIik7XG4gICAgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xuICB9XG4gIGdldCBsYWJlbHMoKSB7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLmNsb3Nlc3QoXCJsYWJlbDpub3QoW2Zvcl0pXCIpO1xuICAgIGNvbnN0IGlkMiA9IHVzZUlkKHRoaXMpO1xuICAgIGlmIChsYWJlbCkgbGFiZWwuaHRtbEZvciA9IGlkMjtcbiAgICBjb25zdCBlbCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGBsYWJlbFtmb3I9XCIke2lkMn1cIl1gXG4gICAgKTtcbiAgICByZXR1cm4gZWw7XG4gIH1cbiAgZ2V0IHBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlID09PSBudWxsID8gLTEgOiBNYXRoLm1pbih0aGlzLnZhbHVlIC8gdGhpcy5tYXgsIDEpO1xuICB9XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIik7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBtYXgoKSB7XG4gICAgcmV0dXJuIGdldE51bWJlcih0aGlzLCBcIm1heFwiKSB8fCAxO1xuICB9XG4gIHNldCBtYXgobWF4KSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwibWF4XCIsIG1heCk7XG4gIH1cbn07XG4vLyBQcmV2ZW50IENocm9tZSBEZXZUb29scyB3YXJuaW5nIGFib3V0IDxsYWJlbCBmb3I9XCJcIj4gcG9pbnRpbmcgdG8gPHUtcHJvZ3Jlc3M+XG5VSFRNTFByb2dyZXNzRWxlbWVudC5mb3JtQXNzb2NpYXRlZCA9IHRydWU7XG52YXIgaXNOdW1lcmljID0gKHZhbHVlKSA9PiAhTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUZsb2F0KGAke3ZhbHVlfWApKSAmJiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKHZhbHVlKSk7XG52YXIgZ2V0TnVtYmVyID0gKGVsLCBrZXkpID0+IHtcbiAgY29uc3QgdmFsdWUgPSBhdHRyKGVsLCBrZXkpO1xuICByZXR1cm4gaXNOdW1lcmljKHZhbHVlKSA/IE1hdGgubWF4KDAsIE51bWJlci5wYXJzZUZsb2F0KHZhbHVlKSkgOiBudWxsO1xufTtcbnZhciBzZXROdW1iZXIgPSAoZWwsIGtleSwgdmFsKSA9PiB7XG4gIGlmICh2YWwgPT09IG51bGwgfHwgaXNOdW1lcmljKHZhbCkpIGF0dHIoZWwsIGtleSwgYCR7dmFsfWApO1xuICBlbHNlIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNldCBub24tbnVtZXJpYyAnJHthdHRyfSc6ICcke3ZhbH0nYCk7XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1wcm9ncmVzc1wiLCBVSFRNTFByb2dyZXNzRWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MUHJvZ3Jlc3NFbGVtZW50IH07XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBTQUZFX0xBQkVMTEVEQlkgPSBgJHtJU19BTkRST0lEID8gXCJkYXRhXCIgOiBcImFyaWFcIn0tbGFiZWxsZWRieWA7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBfYTI7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gKF9hMiA9IGVsLmdldEF0dHJpYnV0ZShuYW1lKSkgIT0gbnVsbCA/IF9hMiA6IG51bGw7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXR0YWNoU3R5bGUgPSAoZWxlbWVudCwgY3NzKSA9PiBlbGVtZW50LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gIC8vIFVubmFtZWQgc2xvdCBkb2VzIGF1dG9tYXRpY2FsbHkgcmVuZGVyIGFsbCB0b3AgZWxlbWVudCBub2Rlc1xuICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgY3NzKVxuKTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gIH1cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgKGRldGFpbCkgPT4gZWxlbWVudC5oYW5kbGVFdmVudCh7IHR5cGU6IFwibXV0YXRpb25cIiwgZGV0YWlsIH0pXG4gICAgKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIG9ic2VydmVycy5zZXQoZWxlbWVudCwgb2JzZXJ2ZXIpO1xuICB9XG59O1xudmFyIGFzQnV0dG9uID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGlzQ2xpY2sgPSBcImtleVwiIGluIGV2ZW50ICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKTtcbiAgaWYgKGlzQ2xpY2spIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGlmIChpc0NsaWNrICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBldmVudC50YXJnZXQuY2xpY2soKTtcbiAgcmV0dXJuIGlzQ2xpY2s7XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcblxuLy8gdS10YWJzLnRzXG52YXIgQVJJQV9DT05UUk9MUyA9IFwiYXJpYS1jb250cm9sc1wiO1xudmFyIEFSSUFfU0VMRUNURUQgPSBcImFyaWEtc2VsZWN0ZWRcIjtcbnZhciBVSFRNTFRhYnNFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGdldCB0YWJMaXN0KCkge1xuICAgIHJldHVybiBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYmxpc3RcIiwgdGhpcylbMF0gfHwgbnVsbDtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpO1xuICB9XG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgc2V0U2VsZWN0ZWQodGhpcy50YWJzW2luZGV4XSk7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFiXCIsIHRoaXMpO1xuICB9XG4gIGdldCBwYW5lbHMoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFicGFuZWxcIiwgdGhpcyk7XG4gIH1cbn07XG52YXIgVUhUTUxUYWJMaXN0RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBESVNQTEFZX0JMT0NLKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcInRhYmxpc3RcIik7XG4gICAgb24odGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgeyBjaGlsZExpc3Q6IHRydWUgfSk7XG4gICAgaWYgKHRoaXMudGFicy5sZW5ndGgpIHRoaXMuaGFuZGxlRXZlbnQoKTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBvZmYodGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgaWYgKCFldmVudCB8fCBldmVudC50eXBlID09PSBcIm11dGF0aW9uXCIpIHtcbiAgICAgIGNvbnN0IHRhYiA9IHRoaXMudGFic1tNYXRoLm1heCh0aGlzLnNlbGVjdGVkSW5kZXgsIDApXTtcbiAgICAgIHJldHVybiB0YWIgPT0gbnVsbCA/IHZvaWQgMCA6IHRhYi5zZXRBdHRyaWJ1dGUoQVJJQV9TRUxFQ1RFRCwgXCJ0cnVlXCIpO1xuICAgIH1cbiAgICBjb25zdCB7IGtleSB9ID0gZXZlbnQ7XG4gICAgY29uc3QgdGFicyA9IFsuLi50aGlzLnRhYnNdO1xuICAgIGNvbnN0IHByZXYgPSB0YWJzLmZpbmRJbmRleCgodGFiKSA9PiB0YWIuY29udGFpbnMoZXZlbnQudGFyZ2V0KSk7XG4gICAgbGV0IG5leHQgPSBwcmV2O1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkIHx8IHByZXYgPT09IC0xKSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikgc2V0U2VsZWN0ZWQodGFic1twcmV2XSk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiICYmICFhc0J1dHRvbihldmVudCkpIHtcbiAgICAgIGlmIChrZXkgPT09IFwiQXJyb3dEb3duXCIgfHwga2V5ID09PSBcIkFycm93UmlnaHRcIilcbiAgICAgICAgbmV4dCA9IChwcmV2ICsgMSkgJSB0YWJzLmxlbmd0aDtcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJBcnJvd1VwXCIgfHwga2V5ID09PSBcIkFycm93TGVmdFwiKVxuICAgICAgICBuZXh0ID0gKHByZXYgfHwgdGFicy5sZW5ndGgpIC0gMTtcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJFbmRcIikgbmV4dCA9IHRhYnMubGVuZ3RoIC0gMTtcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJIb21lXCIpIG5leHQgPSAwO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIlRhYlwiKSBuZXh0ID0gZ2V0U2VsZWN0ZWRJbmRleCh0YWJzKTtcbiAgICAgIGVsc2UgcmV0dXJuO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRhYnNbcHJldl0udGFiSW5kZXggPSAtMTtcbiAgICAgICAgdGFic1tuZXh0XS50YWJJbmRleCA9IDA7XG4gICAgICB9KTtcbiAgICAgIGlmIChrZXkgIT09IFwiVGFiXCIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGFic1tuZXh0XS5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXQgdGFic0VsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcInUtdGFic1wiKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKFwidS10YWJcIik7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldFNlbGVjdGVkSW5kZXgodGhpcy50YWJzKTtcbiAgfVxuICBzZXQgc2VsZWN0ZWRJbmRleChpbmRleCkge1xuICAgIHNldFNlbGVjdGVkKHRoaXMudGFic1tpbmRleF0pO1xuICB9XG59O1xudmFyIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbnZhciBVSFRNTFRhYkVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJpZFwiLCBBUklBX1NFTEVDVEVELCBBUklBX0NPTlRST0xTXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKFxuICAgICAgdGhpcyxcbiAgICAgIFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgfVwiXG4gICAgKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcInRhYlwiKTtcbiAgICB0aGlzLnRhYkluZGV4ID0gdGhpcy5zZWxlY3RlZCA/IDAgOiAtMTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCFTS0lQX0FUVFJfQ0hBTkdFICYmIHRoaXMuc2VsZWN0ZWQgJiYgdGhpcy50YWJMaXN0KSB7XG4gICAgICBTS0lQX0FUVFJfQ0hBTkdFID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHRhYnMgPSBbLi4udGhpcy50YWJMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKV07XG4gICAgICBjb25zdCBwYW5lbHMgPSBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYnBhbmVsXCIsIHRoaXMudGFic0VsZW1lbnQgfHwgdGhpcyk7XG4gICAgICBjb25zdCBuZXh0UGFuZWwgPSBnZXRQYW5lbCh0aGlzLCBwYW5lbHNbdGFicy5pbmRleE9mKHRoaXMpXSk7XG4gICAgICBpZiAobmV4dFBhbmVsKSBhdHRyKG5leHRQYW5lbCwgU0FGRV9MQUJFTExFREJZLCB1c2VJZCh0aGlzKSk7XG4gICAgICB0YWJzLmZvckVhY2goKHRhYiwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSBnZXRQYW5lbCh0YWIsIHBhbmVsc1tpbmRleF0pO1xuICAgICAgICB0YWIudGFiSW5kZXggPSB0YWIgPT09IHRoaXMgPyAwIDogLTE7XG4gICAgICAgIGF0dHIodGFiLCBBUklBX1NFTEVDVEVELCBgJHt0YWIgPT09IHRoaXN9YCk7XG4gICAgICAgIGlmIChwYW5lbCkgcGFuZWwuaGlkZGVuID0gcGFuZWwgIT09IG5leHRQYW5lbDtcbiAgICAgICAgaWYgKHBhbmVsKSBhdHRyKHRhYiwgQVJJQV9DT05UUk9MUywgcGFuZWwuaWQpO1xuICAgICAgfSk7XG4gICAgICBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJMaXN0KCkge1xuICAgIGNvbnN0IHRhYmxpc3QgPSB0aGlzLnBhcmVudEVsZW1lbnQ7XG4gICAgcmV0dXJuICh0YWJsaXN0ID09IG51bGwgPyB2b2lkIDAgOiB0YWJsaXN0Lm5vZGVOYW1lKSA9PT0gXCJVLVRBQkxJU1RcIiA/IHRhYmxpc3QgOiBudWxsO1xuICB9XG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBBUklBX1NFTEVDVEVEKSA9PT0gXCJ0cnVlXCI7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBBUklBX1NFTEVDVEVELCBgJHshIXZhbHVlfWApO1xuICB9XG4gIC8qKiBSZXRyaWV2ZXMgdGhlIG9yZGluYWwgcG9zaXRpb24gb2YgYW4gdGFiIGluIGEgdGFibGlzdC4gKi9cbiAgZ2V0IGluZGV4KCkge1xuICAgIGNvbnN0IHRhYkxpc3QgPSB0aGlzLnRhYkxpc3Q7XG4gICAgcmV0dXJuIHRhYkxpc3QgPyBbLi4udGFiTGlzdC5xdWVyeVNlbGVjdG9yQWxsKFwidS10YWJcIildLmluZGV4T2YodGhpcykgOiAwO1xuICB9XG4gIGdldCBwYW5lbCgpIHtcbiAgICByZXR1cm4gZ2V0UGFuZWwodGhpcyk7XG4gIH1cbn07XG52YXIgVUhUTUxUYWJQYW5lbEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJoaWRkZW5cIl07XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBESVNQTEFZX0JMT0NLKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcInRhYnBhbmVsXCIpO1xuICAgIHRoaXMuaGlkZGVuID0gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpID09PSAtMTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAodGhpcy5oaWRkZW4gfHwgaXNGb2N1c2FibGUodGhpcy5maXJzdENoaWxkKSlcbiAgICAgIGF0dHIodGhpcywgXCJ0YWJpbmRleFwiLCBudWxsKTtcbiAgICBlbHNlIHRoaXMudGFiSW5kZXggPSAwO1xuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJzKCkge1xuICAgIGNvbnN0IGNzcyA9IGB1LXRhYlske0FSSUFfQ09OVFJPTFN9PVwiJHt0aGlzLmlkfVwiXWA7XG4gICAgcmV0dXJuIGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChjc3MpO1xuICB9XG59O1xudmFyIHF1ZXJ5V2l0aG91dE5lc3RlZCA9ICh0YWcsIHNlbGYpID0+IHNlbGYucXVlcnlTZWxlY3RvckFsbChgJHt0YWd9Om5vdCg6c2NvcGUgdS10YWJwYW5lbCAke3RhZ30pYCk7XG52YXIgZ2V0UGFuZWwgPSAodGFiLCBwYW5lbCkgPT4ge1xuICBjb25zdCBpZDIgPSBhdHRyKHRhYiwgQVJJQV9DT05UUk9MUykgfHwgdXNlSWQocGFuZWwpO1xuICBjb25zdCBlbCA9IGdldFJvb3QodGFiKS5nZXRFbGVtZW50QnlJZChpZDIpO1xuICByZXR1cm4gKGVsID09IG51bGwgPyB2b2lkIDAgOiBlbC5ub2RlTmFtZSkgPT09IFwiVS1UQUJQQU5FTFwiID8gZWwgOiBudWxsO1xufTtcbnZhciBnZXRTZWxlY3RlZEluZGV4ID0gKHRhYnMpID0+IFsuLi50YWJzXS5maW5kSW5kZXgoKHRhYikgPT4gYXR0cih0YWIsIEFSSUFfU0VMRUNURUQpID09PSBcInRydWVcIik7XG52YXIgc2V0U2VsZWN0ZWQgPSAodGFiKSA9PiB0YWIgJiYgYXR0cih0YWIsIFwiYXJpYS1zZWxlY3RlZFwiLCBcInRydWVcIik7XG52YXIgaXNGb2N1c2FibGUgPSAoZWwpID0+IGVsIGluc3RhbmNlb2YgRWxlbWVudCAmJiAhZWwubWF0Y2hlcygnOmRpc2FibGVkLFt0YWJpbmRleF49XCItXCJdJykgJiYgZWwubWF0Y2hlcyhcbiAgYFtjb250ZW50ZWRpdGFibGVdLFtjb250cm9sc10sW2hyZWZdLFt0YWJpbmRleF0saW5wdXQ6bm90KFt0eXBlPVwiaGlkZGVuXCJdKSxzZWxlY3QsdGV4dGFyZWEsYnV0dG9uLHN1bW1hcnksaWZyYW1lYFxuKTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtdGFic1wiLCBVSFRNTFRhYnNFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtdGFibGlzdFwiLCBVSFRNTFRhYkxpc3RFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtdGFiXCIsIFVIVE1MVGFiRWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYnBhbmVsXCIsIFVIVE1MVGFiUGFuZWxFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxUYWJFbGVtZW50LCBVSFRNTFRhYkxpc3RFbGVtZW50LCBVSFRNTFRhYlBhbmVsRWxlbWVudCwgVUhUTUxUYWJzRWxlbWVudCB9O1xuIiwidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuXG4vLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0ZJUkVGT1ggPSBJU19CUk9XU0VSICYmIC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX1NBRkFSSSA9IElTX0JST1dTRVIgJiYgL14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbnZhciBJU19NQUMgPSBJU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBTQUZFX01VTFRJU0VMRUNUQUJMRSA9IGAke0lTX1NBRkFSSSA/IFwiYXJpYVwiIDogXCJkYXRhXCJ9LW11bHRpc2VsZWN0YWJsZWA7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIEZPQ1VTX09VVExJTkUgPSBcIm91dGxpbmU6IDFweCBkb3R0ZWQ7IG91dGxpbmU6IDVweCBhdXRvIEhpZ2hsaWdodDsgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yXCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgLy8gVW5uYW1lZCBzbG90IGRvZXMgYXV0b21hdGljYWxseSByZW5kZXIgYWxsIHRvcCBlbGVtZW50IG5vZGVzXG4gIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBjc3MpXG4pO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIGlmIChhdHRycykgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJzKSkgYXR0cihlbCwga2V5LCB2YWwpO1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBjcmVhdGVBcmlhTGl2ZSA9IChtb2RlKSA9PiB7XG4gIGNvbnN0IGxpdmUgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBsaXZlLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gIGF0dHIobGl2ZSwgXCJhcmlhLWxpdmVcIiwgbW9kZSk7XG4gIHJldHVybiBsaXZlO1xufTtcbmZ1bmN0aW9uIGF0dHJpYnV0ZVRleHRzKHRleHRzLCBwcm9wLCB2YWx1ZSkge1xuICBpZiAoIXByb3ApIHJldHVybiBPYmplY3Qua2V5cyh0ZXh0cykubWFwKChrZXkyKSA9PiBgZGF0YS1zci0ke2tleTJ9YCk7XG4gIGNvbnN0IGtleSA9IChwcm9wID09IG51bGwgPyB2b2lkIDAgOiBwcm9wLnN0YXJ0c1dpdGgoXCJkYXRhLXNyLVwiKSkgJiYgcHJvcC5zbGljZSg4KTtcbiAgaWYgKGtleSAmJiB2YWx1ZSAmJiB0ZXh0c1trZXldKSB0ZXh0c1trZXldID0gdmFsdWU7XG4gIHJldHVybiBbXTtcbn1cblxuLy8gLi4vdS1kYXRhbGlzdC91LW9wdGlvbi50c1xudmFyIERJU0FCTEVEID0gXCJkaXNhYmxlZFwiO1xudmFyIFNFTEVDVEVEID0gXCJzZWxlY3RlZFwiO1xudmFyIFVIVE1MT3B0aW9uRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtESVNBQkxFRCwgU0VMRUNURURdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgYCR7RElTUExBWV9CTE9DS306aG9zdCg6Zm9jdXMpeyR7Rk9DVVNfT1VUTElORX19Omhvc3R7IGN1cnNvcjogcG9pbnRlciB9YFxuICAgICk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCFJU19JT1MpIHRoaXMudGFiSW5kZXggPSAtMTtcbiAgICBpZiAoIWF0dHIodGhpcywgXCJyb2xlXCIpKSBhdHRyKHRoaXMsIFwicm9sZVwiLCBcIm9wdGlvblwiKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1kaXNhYmxlZFwiLCBgJHt0aGlzLmRpc2FibGVkfWApO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXNlbGVjdGVkXCIsIGAke3RoaXMuc2VsZWN0ZWR9YCk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHdoZXRoZXIgdGhlIG9wdGlvbiBpbiB0aGUgbGlzdCBib3ggaXMgdGhlIGRlZmF1bHQgaXRlbS4gKi9cbiAgZ2V0IGRlZmF1bHRTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpc1tTRUxFQ1RFRF07XG4gIH1cbiAgc2V0IGRlZmF1bHRTZWxlY3RlZCh2YWx1ZSkge1xuICAgIHRoaXNbU0VMRUNURURdID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGRpc2FibGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIERJU0FCTEVEKSAhPT0gbnVsbDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIERJU0FCTEVELCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICAvKiogUmV0cmlldmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBmb3JtIHRoYXQgdGhlIG9iamVjdCBpcyBlbWJlZGRlZCBpbi4gKi9cbiAgZ2V0IGZvcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcImZvcm1cIik7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSBvcmRpbmFsIHBvc2l0aW9uIG9mIGFuIG9wdGlvbiBpbiBhIGxpc3QgYm94LiAqL1xuICBnZXQgaW5kZXgoKSB7XG4gICAgdmFyIF9hMjtcbiAgICBjb25zdCBvcHRpb25zID0gKF9hMiA9IHRoaXMuY2xvc2VzdChcInUtZGF0YWxpc3RcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ1LW9wdGlvblwiKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShvcHRpb25zIHx8IFt0aGlzXSkuaW5kZXhPZih0aGlzKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgYSB2YWx1ZSB0aGF0IHlvdSBjYW4gdXNlIHRvIGltcGxlbWVudCB5b3VyIG93biBsYWJlbCBmdW5jdGlvbmFsaXR5IGZvciB0aGUgb2JqZWN0LiAqL1xuICBnZXQgbGFiZWwoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgXCJsYWJlbFwiKSB8fCB0aGlzLnRleHQ7XG4gIH1cbiAgc2V0IGxhYmVsKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImxhYmVsXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgU0VMRUNURUQpICE9PSBudWxsO1xuICB9XG4gIHNldCBzZWxlY3RlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgU0VMRUNURUQsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdGV4dCBzdHJpbmcgc3BlY2lmaWVkIGJ5IHRoZSBvcHRpb24gdGFnLiAqL1xuICBnZXQgdGV4dCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IHRoaXMudGV4dENvbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICB9XG4gIHNldCB0ZXh0KHRleHQpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIHZhbHVlIHdoaWNoIGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIgd2hlbiB0aGUgZm9ybSBjb250cm9sIGlzIHN1Ym1pdHRlZC4gKi9cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIFwidmFsdWVcIikgfHwgdGhpcy50ZXh0O1xuICB9XG4gIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gIH1cbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LW9wdGlvblwiLCBVSFRNTE9wdGlvbkVsZW1lbnQpO1xuXG4vLyAuLi91LWRhdGFsaXN0L3UtZGF0YWxpc3QudHNcbnZhciBJU19QUkVTUyA9IGZhbHNlO1xudmFyIExJVkVfVElNRVI7XG52YXIgTElWRV9TUl9GSVggPSAwO1xudmFyIExJVkU7XG52YXIgSVNfU0FGQVJJX01BQyA9IElTX1NBRkFSSSAmJiAhSVNfSU9TO1xudmFyIEVWRU5UUyA9IFwiY2xpY2ssZm9jdXNvdXQsaW5wdXQsa2V5ZG93bixtb3VzZWRvd24sbW91c2V1cFwiO1xudmFyIFRFWFRTID0ge1xuICBzaW5ndWxhcjogXCIlZCBoaXRcIixcbiAgcGx1cmFsOiBcIiVkIGhpdHNcIlxufTtcbnZhciBVSFRNTERhdGFMaXN0RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvLyBVc2luZyB1bmRlcnNjb3JlIGluc3RlYWQgb2YgcHJpdmF0ZSBmaWVsZHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgLy8gX2Fubm91bmNlQ291bnQgPSAwO1xuICAgIC8vIF9hbm5vdW5jZVRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bWJlciA9IDA7XG4gICAgdGhpcy5fYmx1clRpbWVyID0gMDtcbiAgICB0aGlzLl9pbnB1dCA9IG51bGw7XG4gICAgdGhpcy5fcm9vdCA9IG51bGw7XG4gICAgdGhpcy5fdmFsdWUgPSBcIlwiO1xuICAgIC8vIFN0b3JlIHNhbml0aXplZCB2YWx1ZSB0byBzcGVlZCB1cCBvcHRpb24gZmlsdGVyaW5nXG4gICAgdGhpcy5fdGV4dHMgPSBfX3NwcmVhZFZhbHVlcyh7fSwgVEVYVFMpO1xuICAgIGF0dGFjaFN0eWxlKFxuICAgICAgdGhpcyxcbiAgICAgIGAke0RJU1BMQVlfQkxPQ0t9OjpzbG90dGVkKHUtb3B0aW9uW2Rpc2FibGVkXSkgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQgfWBcbiAgICAgIC8vIEhpZGUgZGlzYWJsZWQgb3B0aW9uc1xuICAgICk7XG4gIH1cbiAgLy8gU3BlZWQgdXAgdHJhbnNsYXRlZCB0ZXh0c1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiaWRcIiwgLi4uYXR0cmlidXRlVGV4dHMoVEVYVFMpXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmhpZGRlbiA9IHRydWU7XG4gICAgdGhpcy5fcm9vdCA9IGdldFJvb3QodGhpcyk7XG4gICAgaWYgKCFMSVZFKSBMSVZFID0gY3JlYXRlQXJpYUxpdmUoXCJhc3NlcnRpdmVcIik7XG4gICAgaWYgKCFMSVZFLmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKExJVkUpO1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwibGlzdGJveFwiKTtcbiAgICBvbih0aGlzLl9yb290LCBcImZvY3VzaW5cIiwgdGhpcyk7XG4gICAgb24odGhpcy5fcm9vdCwgXCJmb2N1c1wiLCB0aGlzLCB0cnVlKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLl9yb290IHx8IHRoaXMsIFwiZm9jdXNcIiwgdGhpcywgdHJ1ZSk7XG4gICAgb2ZmKHRoaXMuX3Jvb3QgfHwgdGhpcywgXCJmb2N1c2luXCIsIHRoaXMpO1xuICAgIGRpc2Nvbm5lY3RJbnB1dCh0aGlzKTtcbiAgICB0aGlzLl9yb290ID0gbnVsbDtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socHJvcCwgX3ByZXYsIG5leHQpIHtcbiAgICB2YXIgX2EyO1xuICAgIGF0dHJpYnV0ZVRleHRzKHRoaXMuX3RleHRzLCBwcm9wLCBuZXh0KTtcbiAgICBjb25zdCBpbnB1dHMgPSAoX2EyID0gdGhpcy5fcm9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5xdWVyeVNlbGVjdG9yQWxsKGBpbnB1dFtsaXN0PVwiJHt0aGlzLmlkfVwiXWApO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgaW5wdXRzIHx8IFtdKSBzZXR1cElucHV0KHRoaXMsIGlucHV0KTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHsgdHlwZSB9ID0gZXZlbnQ7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICBpZiAodHlwZSA9PT0gXCJjbGlja1wiKSBvbkNsaWNrKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJmb2N1c1wiIHx8IHR5cGUgPT09IFwiZm9jdXNpblwiKSBvbkZvY3VzSW4odGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImZvY3Vzb3V0XCIpIG9uRm9jdXNPdXQodGhpcyk7XG4gICAgaWYgKHR5cGUgPT09IFwia2V5ZG93blwiKSBvbktleURvd24odGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcIm11dGF0aW9uXCIgfHwgdHlwZSA9PT0gXCJpbnB1dFwiKSBzZXR1cE9wdGlvbnModGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcIm1vdXNldXBcIikgSVNfUFJFU1MgPSBmYWxzZTtcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIikgSVNfUFJFU1MgPSB0aGlzLmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gIH1cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ1LW9wdGlvblwiKTtcbiAgfVxufTtcbnZhciBvbkZvY3VzSW4gPSAoc2VsZiwgeyB0YXJnZXQgfSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCBpc0lucHV0ID0gc2VsZi5faW5wdXQgPT09IHRhcmdldDtcbiAgY29uc3QgaXNJbnNpZGUgPSBpc0lucHV0IHx8IHNlbGYuY29udGFpbnModGFyZ2V0KTtcbiAgaWYgKGlzSW5zaWRlKSByZXR1cm4gY2xlYXJUaW1lb3V0KHNlbGYuX2JsdXJUaW1lcik7XG4gIGlmICghaXNJbnB1dCAmJiB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIGF0dHIodGFyZ2V0LCBcImxpc3RcIikgPT09IHNlbGYuaWQpIHtcbiAgICBpZiAoc2VsZi5faW5wdXQpIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgICBzZWxmLl9pbnB1dCA9IHRhcmdldDtcbiAgICBhdHRyKHNlbGYsIFNBRkVfTEFCRUxMRURCWSwgdXNlSWQoKF9hMiA9IHNlbGYuX2lucHV0LmxhYmVscykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMlswXSkpO1xuICAgIG9uKHNlbGYuX3Jvb3QgfHwgc2VsZiwgRVZFTlRTLCBzZWxmKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHNlbGYsIHtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1widmFsdWVcIl0sXG4gICAgICAvLyBMaXN0ZW4gZm9yIHZhbHVlIGNoYW5nZXMgdG8gc2hvdyB1LW9wdGlvbnNcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfSk7XG4gICAgc2V0RXhwYW5kZWQoc2VsZiwgdHJ1ZSk7XG4gIH1cbn07XG52YXIgb25Gb2N1c091dCA9IChzZWxmKSA9PiB7XG4gIGlmICghSVNfUFJFU1MpIHNlbGYuX2JsdXJUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gZGlzY29ubmVjdElucHV0KHNlbGYpKTtcbn07XG52YXIgb25DbGljayA9IChzZWxmLCB7IHRhcmdldCB9KSA9PiB7XG4gIHZhciBfYTIsIF9iLCBfYywgX2QsIF9lO1xuICBjb25zdCBpc1NpbmdsZSA9IGF0dHIoc2VsZiwgU0FGRV9NVUxUSVNFTEVDVEFCTEUpICE9PSBcInRydWVcIjtcbiAgY29uc3Qgb3B0aW9uID0gWy4uLnNlbGYub3B0aW9uc10uZmluZCgob3B0KSA9PiBvcHQuY29udGFpbnModGFyZ2V0KSk7XG4gIGlmIChzZWxmLl9pbnB1dCA9PT0gdGFyZ2V0KSB7XG4gICAgc2V0RXhwYW5kZWQoc2VsZiwgdHJ1ZSk7XG4gIH0gZWxzZSBpZiAob3B0aW9uICYmIGlzSW50ZXJhY3RpdmVPcHRpb24ob3B0aW9uKSkge1xuICAgIGZvciAoY29uc3Qgb3B0IG9mIHNlbGYub3B0aW9ucykge1xuICAgICAgaWYgKG9wdCA9PT0gb3B0aW9uKSBvcHQuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgZWxzZSBpZiAoaXNTaW5nbGUpIG9wdC5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIH1cbiAgICAoX2IgPSAoX2EyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgIEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLFxuICAgICAgXCJ2YWx1ZVwiXG4gICAgKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5zZXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKHNlbGYuX2lucHV0LCBvcHRpb24udmFsdWUpO1xuICAgIGlmIChpc1NpbmdsZSkge1xuICAgICAgKF9jID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYy5mb2N1cygpO1xuICAgICAgc2V0RXhwYW5kZWQoc2VsZiwgZmFsc2UpO1xuICAgIH1cbiAgICAoX2QgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9kLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgRXZlbnQoXCJpbnB1dFwiLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pXG4gICAgKTtcbiAgICAoX2UgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2hhbmdlXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gIH1cbn07XG52YXIgb25LZXlEb3duID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTIsIF9iO1xuICBpZiAoZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSkgcmV0dXJuO1xuICBpZiAoZXZlbnQua2V5ICE9PSBcIkVzY2FwZVwiKSBzZXRFeHBhbmRlZChzZWxmLCB0cnVlKTtcbiAgY29uc3QgeyBrZXkgfSA9IGV2ZW50O1xuICBjb25zdCBhY3RpdmUgPSAoX2EyID0gc2VsZi5fcm9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5hY3RpdmVFbGVtZW50O1xuICBjb25zdCBvcHRpb25zID0gZ2V0VmlzaWJsZU9wdGlvbnMoc2VsZik7XG4gIGNvbnN0IGluZGV4ID0gb3B0aW9ucy5pbmRleE9mKGFjdGl2ZSk7XG4gIGxldCBuZXh0ID0gLTE7XG4gIGlmIChrZXkgPT09IFwiQXJyb3dEb3duXCIpIG5leHQgPSAoaW5kZXggKyAxKSAlIG9wdGlvbnMubGVuZ3RoO1xuICBpZiAoa2V5ID09PSBcIkFycm93VXBcIikgbmV4dCA9ICh+aW5kZXggPyBpbmRleCA6IG9wdGlvbnMubGVuZ3RoKSAtIDE7XG4gIGlmICh+aW5kZXgpIHtcbiAgICBpZiAoa2V5ID09PSBcIkhvbWVcIiB8fCBrZXkgPT09IFwiUGFnZVVwXCIpIG5leHQgPSAwO1xuICAgIGlmIChrZXkgPT09IFwiRW5kXCIgfHwga2V5ID09PSBcIlBhZ2VEb3duXCIpIG5leHQgPSBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgaWYgKGtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICBvcHRpb25zW2luZGV4XS5jbGljaygpO1xuICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG4gIGlmIChvcHRpb25zW25leHRdKSBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSBvcHRpb24udGFiSW5kZXggPSAtMTtcbiAgaWYgKG9wdGlvbnNbbmV4dF0pIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIChfYiA9IG9wdGlvbnNbbmV4dF0gfHwgc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5mb2N1cygpO1xuICBpZiAoa2V5ID09PSBcIkVzY2FwZVwiKSBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG59O1xudmFyIHNldEV4cGFuZGVkID0gKHNlbGYsIG9wZW4pID0+IHtcbiAgc2VsZi5oaWRkZW4gPSAhb3BlbjtcbiAgaWYgKHNlbGYucG9wb3Zlcikgc2VsZi50b2dnbGVQb3BvdmVyKG9wZW4pO1xuICBpZiAoc2VsZi5faW5wdXQpIHNldHVwSW5wdXQoc2VsZiwgc2VsZi5faW5wdXQsIG9wZW4pO1xuICBpZiAob3Blbikgc2V0dXBPcHRpb25zKHNlbGYpO1xufTtcbnZhciBkaXNjb25uZWN0SW5wdXQgPSAoc2VsZikgPT4ge1xuICBvZmYoc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICBtdXRhdGlvbk9ic2VydmVyKHNlbGYsIGZhbHNlKTtcbiAgc2V0RXhwYW5kZWQoc2VsZiwgZmFsc2UpO1xuICBzZWxmLl9pbnB1dCA9IG51bGw7XG59O1xudmFyIGdldFZpc2libGVPcHRpb25zID0gKHNlbGYpID0+IFsuLi5zZWxmLm9wdGlvbnNdLmZpbHRlcihcbiAgKG9wdCkgPT4gIW9wdC5kaXNhYmxlZCAmJiBvcHQub2Zmc2V0V2lkdGggJiYgb3B0Lm9mZnNldEhlaWdodFxuICAvLyBDaGVja3MgZGlzYWJsZWQgb3IgdmlzaWJpbGl0eSAoc2luY2UgaGlkZGVuIGF0dHJpYnV0ZSBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgZGlzcGxheTogYmxvY2spXG4pO1xudmFyIGlzSW50ZXJhY3RpdmVPcHRpb24gPSAob3B0aW9uKSA9PiBvcHRpb24gaW5zdGFuY2VvZiBIVE1MT3B0aW9uRWxlbWVudCB8fCBvcHRpb24uZ2V0QXR0cmlidXRlKFwicm9sZVwiKSA9PT0gXCJvcHRpb25cIjtcbnZhciBzZXR1cElucHV0ID0gKHNlbGYsIGlucHV0LCBvcGVuID0gZmFsc2UpID0+IHtcbiAgYXR0cihpbnB1dCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKHNlbGYpKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWF1dG9jb21wbGV0ZVwiLCBcImxpc3RcIik7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1jb250cm9sc1wiLCB1c2VJZChzZWxmKSk7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1leHBhbmRlZFwiLCBgJHtJU19TQUZBUklfTUFDIHx8IG9wZW59YCk7XG4gIGF0dHIoaW5wdXQsIFwiYXV0b2NvbXBsZXRlXCIsIFwib2ZmXCIpO1xuICBhdHRyKGlucHV0LCBcInJvbGVcIiwgXCJjb21ib2JveFwiKTtcbn07XG52YXIgc2FuaXRpemUgPSAoc3RyKSA9PiAoc3RyID09IG51bGwgPyB2b2lkIDAgOiBzdHIudG9Mb3dlckNhc2UoKS50cmltKCkpIHx8IFwiXCI7XG52YXIgc2V0dXBPcHRpb25zID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHZhbHVlID0gc2FuaXRpemUoKF9hMiA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnZhbHVlKTtcbiAgY29uc3QgaGFzQ2hhbmdlID0gKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtdXRhdGlvblwiIHx8IHNlbGYuX3ZhbHVlICE9PSB2YWx1ZTtcbiAgaWYgKCFoYXNDaGFuZ2UpIHJldHVybjtcbiAgY29uc3QgaGlkZGVuID0gc2VsZi5oaWRkZW47XG4gIGNvbnN0IGlzU2luZ2xlID0gYXR0cihzZWxmLCBTQUZFX01VTFRJU0VMRUNUQUJMRSkgIT09IFwidHJ1ZVwiO1xuICBjb25zdCBpc1R5cGluZyA9IGV2ZW50IGluc3RhbmNlb2YgSW5wdXRFdmVudCAmJiAhaXNEYXRhbGlzdENsaWNrKGV2ZW50KTtcbiAgc2VsZi5oaWRkZW4gPSB0cnVlO1xuICBzZWxmLl92YWx1ZSA9IHZhbHVlO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBzZWxmLm9wdGlvbnMpIHtcbiAgICBjb25zdCBjb250ZW50ID0gW29wdC52YWx1ZSwgb3B0LmxhYmVsLCBvcHQudGV4dF0ubWFwKHNhbml0aXplKTtcbiAgICBvcHQuaGlkZGVuID0gIWNvbnRlbnQuc29tZSgoc3RyKSA9PiBzdHIuaW5jbHVkZXModmFsdWUpKTtcbiAgICBpZiAoaXNTaW5nbGUgJiYgaXNUeXBpbmcgJiYgaXNJbnRlcmFjdGl2ZU9wdGlvbihvcHQpKVxuICAgICAgb3B0LnNlbGVjdGVkID0gY29udGVudC5pbmNsdWRlcyh2YWx1ZSk7XG4gIH1cbiAgc2VsZi5oaWRkZW4gPSBoaWRkZW47XG4gIGNvbnN0IHZpc2libGUgPSBnZXRWaXNpYmxlT3B0aW9ucyhzZWxmKTtcbiAgY2xlYXJUaW1lb3V0KExJVkVfVElNRVIpO1xuICBMSVZFX1RJTUVSID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgY29uc3QgeyBsZW5ndGggfSA9IHZpc2libGUuZmlsdGVyKGlzSW50ZXJhY3RpdmVPcHRpb24pO1xuICAgIGNvbnN0IGxpdmVTckZpeCA9ICsrTElWRV9TUl9GSVggJSAyID8gXCJcXHhBMFwiIDogXCJcIjtcbiAgICBjb25zdCBjb3VudFRleHQgPSBgJHtgJHtzZWxmLl90ZXh0c1tsZW5ndGggPT09IDEgPyBcInNpbmd1bGFyXCIgOiBcInBsdXJhbFwiXX1gLnJlcGxhY2UoXCIlZFwiLCBgJHtsZW5ndGh9YCl9YDtcbiAgICBpZiAoTElWRSlcbiAgICAgIExJVkUudGV4dENvbnRlbnQgPSBgJHshbGVuZ3RoICYmIHNlbGYuaW5uZXJUZXh0LnRyaW0oKSB8fCBjb3VudFRleHR9JHtsaXZlU3JGaXh9YDtcbiAgfSwgMWUzKTtcbiAgaWYgKElTX0lPUylcbiAgICB2aXNpYmxlLm1hcCgob3B0LCBpbmRleCwgbGVuZ3RoKSA9PiB7XG4gICAgICBvcHQudGl0bGUgPSBgJHtpbmRleCArIDF9LyR7bGVuZ3RofWA7XG4gICAgfSk7XG59O1xuaWYgKElTX0JST1dTRVIpXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJsaXN0XCIsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gZ2V0Um9vdCh0aGlzKS5nZXRFbGVtZW50QnlJZChhdHRyKHRoaXMsIFwibGlzdFwiKSB8fCBcIlwiKTtcbiAgICB9XG4gIH0pO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1kYXRhbGlzdFwiLCBVSFRNTERhdGFMaXN0RWxlbWVudCk7XG52YXIgU1BMSVRfQ0hBUiA9IFwiXFx1MjAwMVwiLnJlcGVhdCgxMDApO1xudmFyIEZJUkVGT1hfT1BUSU9OX0NMSUNLID0gXCJpbnNlcnRSZXBsYWNlbWVudFRleHRcIjtcbnZhciBnZXREYXRhbGlzdFZhbHVlID0gKHtcbiAgdmFsdWVcbn0pID0+IHZhbHVlLnNwbGl0KFNQTElUX0NIQVIpWzBdO1xuZnVuY3Rpb24gaXNEYXRhbGlzdENsaWNrKGV2ZW50KSB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IGlzQ2xpY2sgPSBldmVudCBpbnN0YW5jZW9mIEV2ZW50ICYmIGV2ZW50LnR5cGUgPT09IFwiaW5wdXRcIiAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmICghZXZlbnQuaW5wdXRUeXBlIHx8IGV2ZW50LmlucHV0VHlwZSA9PT0gRklSRUZPWF9PUFRJT05fQ0xJQ0spO1xuICBpZiAoaXNDbGljaykge1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIGNvbnN0IGlnbm9yZWQgPSBBcnJheS5mcm9tKCgoX2EyID0gZXZlbnQudGFyZ2V0Lmxpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIub3B0aW9ucykgfHwgW10pLnNvbWUoXG4gICAgICAob3B0KSA9PiBvcHQudmFsdWUgPT09IHZhbHVlICYmICFpc0ludGVyYWN0aXZlT3B0aW9uKG9wdClcbiAgICApO1xuICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHZhbHVlLnNwbGl0KFNQTElUX0NIQVIpW2lnbm9yZWQgPyAxIDogMF07XG4gIH1cbiAgcmV0dXJuIGlzQ2xpY2s7XG59XG5cbi8vIHUtdGFncy50c1xudmFyIExJVkUyO1xudmFyIElTX01PQklMRSA9IElTX0FORFJPSUQgfHwgSVNfSU9TO1xudmFyIElTX0ZJUkVGT1hfTUFDID0gSVNfRklSRUZPWCB8fCBJU19NQUM7XG52YXIgRVZFTlRTMiA9IFwiaW5wdXQsZm9jdXNpbixmb2N1c291dCxrZXlkb3duXCI7XG52YXIgVEVYVFMyID0ge1xuICBhZGRlZDogXCJBZGRlZFwiLFxuICByZW1vdmU6IFwiUHJlc3MgdG8gcmVtb3ZlXCIsXG4gIHJlbW92ZWQ6IFwiUmVtb3ZlZFwiLFxuICBlbXB0eTogXCJObyBzZWxlY3RlZFwiLFxuICBmb3VuZDogXCJOYXZpZ2F0ZSBsZWZ0IHRvIGZpbmQgJWQgc2VsZWN0ZWRcIixcbiAgb2Y6IFwib2ZcIlxufTtcbnZhciBVSFRNTFRhZ3NFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIFVzaW5nIHVuZGVyc2NvcmUgaW5zdGVhZCBvZiBwcml2YXRlIGZpZWxkcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICB0aGlzLl9ibHVyQW5ub3VuY2VSZXNldCA9IGZhbHNlO1xuICAgIHRoaXMuX2JsdXJUaW1lciA9IDA7XG4gICAgdGhpcy5fZm9jdXNJbmRleCA9IG51bGw7XG4gICAgdGhpcy5fcm9vdCA9IG51bGw7XG4gICAgdGhpcy5fdGV4dHMgPSBfX3NwcmVhZFZhbHVlcyh7fSwgVEVYVFMyKTtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAgICAgLy8gQ29udGVudCBzbG90XG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGA6aG9zdCg6bm90KFtoaWRkZW5dKSl7IGRpc3BsYXk6IGlubGluZS1ibG9jayB9XG4gICAgICAgIDo6c2xvdHRlZChkYXRhKSB7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBvdXRsaW5lOiBub25lOyBwb2ludGVyLWV2ZW50czogbm9uZSB9XG4gICAgICAgIDo6c2xvdHRlZChkYXRhKTo6YWZ0ZXIgeyBjb250ZW50OiAnXFxcXDAwRDcnOyBjb250ZW50OiAnXFxcXDAwRDcnIC8gJyc7IHBhZGRpbmctaW5saW5lOiAuNWNoOyBwb2ludGVyLWV2ZW50czogYXV0byB9XG4gICAgICAgIDo6c2xvdHRlZChkYXRhOmZvY3VzKTo6YWZ0ZXIgeyAke0ZPQ1VTX09VVExJTkV9IH1gXG4gICAgICAgIC8vIFNob3cgZm9jdXMgb3V0bGluZSBhcm91bmQgOjphZnRlciBvbmx5XG4gICAgICApXG4gICAgKTtcbiAgfVxuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gYXR0cmlidXRlVGV4dHMoVEVYVFMyKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLl9yb290ID0gZ2V0Um9vdCh0aGlzKTtcbiAgICBpZiAoIUxJVkUyKSBMSVZFMiA9IGNyZWF0ZUFyaWFMaXZlKFwicG9saXRlXCIpO1xuICAgIGlmICghTElWRTIuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoTElWRTIpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgeyBjaGlsZExpc3Q6IHRydWUgfSk7XG4gICAgb24odGhpcy5fcm9vdCwgXCJjbGlja1wiLCB0aGlzKTtcbiAgICBvbih0aGlzLCBFVkVOVFMyLCB0aGlzKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHJlbmRlcih0aGlzKSk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIF9wcmV2LCBuZXh0KSB7XG4gICAgYXR0cmlidXRlVGV4dHModGhpcy5fdGV4dHMsIHByb3AsIG5leHQpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICAgIG9mZih0aGlzLl9yb290IHx8IHRoaXMsIFwiY2xpY2tcIiwgdGhpcyk7XG4gICAgb2ZmKHRoaXMsIEVWRU5UUzIsIHRoaXMpO1xuICAgIHRoaXMuX3Jvb3QgPSBudWxsO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSBvbkNsaWNrMih0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiZm9jdXNpblwiKSBvbkZvY3VzSW4yKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJmb2N1c291dFwiKSBvbkZvY3VzT3V0Mih0aGlzKTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJpbnB1dFwiKSBvbklucHV0T3B0aW9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgb25LZXlEb3duMih0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwibXV0YXRpb25cIikgcmVuZGVyKHRoaXMsIGV2ZW50KTtcbiAgfVxuICBnZXQgaXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChcImRhdGFcIik7XG4gIH1cbiAgZ2V0IGNvbnRyb2woKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihcImlucHV0XCIpO1xuICB9XG59O1xudmFyIGRpc3BhdGNoQ2hhbmdlID0gKHNlbGYsIGl0ZW0pID0+IHtcbiAgcmV0dXJuIHNlbGYuZGlzcGF0Y2hFdmVudChcbiAgICBuZXcgQ3VzdG9tRXZlbnQoXCJ0YWdzXCIsIHtcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgICAgZGV0YWlsOiB7IGl0ZW0sIGFjdGlvbjogaXRlbS5pc0Nvbm5lY3RlZCA/IFwicmVtb3ZlXCIgOiBcImFkZFwiIH1cbiAgICB9KVxuICApO1xufTtcbnZhciByZW5kZXIgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMiwgX2IsIF9jLCBfZCwgX2U7XG4gIGNvbnN0IHRleHRzID0gc2VsZi5fdGV4dHM7XG4gIGNvbnN0IGNoYW5nZSA9IE51bWJlci5pc05hTihzZWxmLl9mb2N1c0luZGV4KSA/IG51bGwgOiBldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQuZGV0YWlsWzBdO1xuICBjb25zdCBjaGFuZ2VJdGVtID0gKGNoYW5nZSA9PSBudWxsID8gdm9pZCAwIDogY2hhbmdlLmFkZGVkTm9kZXNbMF0pIHx8IChjaGFuZ2UgPT0gbnVsbCA/IHZvaWQgMCA6IGNoYW5nZS5yZW1vdmVkTm9kZXNbMF0pO1xuICBjb25zdCBjaGFuZ2VUZXh0ID0gYCR7Y2hhbmdlSXRlbSA/IGAke2NoYW5nZUl0ZW0uaXNDb25uZWN0ZWQgPyB0ZXh0cy5hZGRlZCA6IHRleHRzLnJlbW92ZWR9ICR7Y2hhbmdlSXRlbS50ZXh0Q29udGVudH0sIGAgOiBcIlwifWA7XG4gIGNvbnN0IGxhYmVsID0gKChfYyA9IChfYiA9IChfYTIgPSBzZWxmLmNvbnRyb2wpID09IG51bGwgPyB2b2lkIDAgOiBfYTIubGFiZWxzKSA9PSBudWxsID8gdm9pZCAwIDogX2JbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfYy50ZXh0Q29udGVudCkgfHwgXCJcIjtcbiAgY29uc3QgdmFsdWVzID0gW107XG4gIGF0dHIoc2VsZiwgXCJyb2xlXCIsIFwiZ3JvdXBcIik7XG4gIGF0dHIoc2VsZiwgXCJhcmlhLWxhYmVsXCIsIGxhYmVsKTtcbiAgc2VsZi5pdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCwgeyBsZW5ndGggfSkgPT4ge1xuICAgIGNvbnN0IGxhYmVsMiA9IGAke2NoYW5nZVRleHR9JHtpdGVtLnRleHRDb250ZW50fSwgJHt0ZXh0cy5yZW1vdmV9LCAke2luZGV4ICsgMX0gJHt0ZXh0cy5vZn0gJHtsZW5ndGh9YDtcbiAgICBhdHRyKGl0ZW0sIFwiYXJpYS1sYWJlbFwiLCBsYWJlbDIpO1xuICAgIGF0dHIoaXRlbSwgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIGl0ZW0udGFiSW5kZXggPSAtMTtcbiAgICBpdGVtLnZhbHVlID0gKGl0ZW0udmFsdWUgfHwgaXRlbS50ZXh0Q29udGVudCB8fCBcIlwiKS50cmltKCk7XG4gICAgdmFsdWVzLnB1c2goaXRlbS52YWx1ZSk7XG4gIH0pO1xuICBjb25zdCBjb250cm9sID0gc2VsZi5jb250cm9sO1xuICBjb25zdCBjb250cm9sTGFiZWwgPSBgJHtjaGFuZ2VUZXh0fSR7bGFiZWx9LCAke3ZhbHVlcy5sZW5ndGggPyB0ZXh0cy5mb3VuZC5yZXBsYWNlKFwiJWRcIiwgYCR7dmFsdWVzLmxlbmd0aH1gKSA6IHRleHRzLmVtcHR5fWA7XG4gIGNvbnN0IGxpc3QgPSBjb250cm9sICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGF0dHIoY29udHJvbCwgXCJsaXN0XCIpIHx8IFwiXCIpO1xuICBjb25zdCBvcHRpb25zID0gbGlzdCA9PSBudWxsID8gdm9pZCAwIDogbGlzdC5jaGlsZHJlbjtcbiAgaWYgKGNvbnRyb2wpIGF0dHIoY29udHJvbCwgXCJhcmlhLWxhYmVsXCIsIGNvbnRyb2xMYWJlbCk7XG4gIGlmIChsaXN0KSBhdHRyKGxpc3QsIFNBRkVfTVVMVElTRUxFQ1RBQkxFLCBcInRydWVcIik7XG4gIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMgfHwgW10pXG4gICAgb3B0aW9uLnNlbGVjdGVkID0gdmFsdWVzLmluY2x1ZGVzKGdldERhdGFsaXN0VmFsdWUob3B0aW9uKSk7XG4gIGlmIChjaGFuZ2VUZXh0KSB7XG4gICAgY29uc3QgbmV4dEZvY3VzID0gc2VsZi5pdGVtc1soc2VsZi5fZm9jdXNJbmRleCB8fCAxKSAtIDFdIHx8IGNvbnRyb2w7XG4gICAgY29uc3Qgc2FtZUZvY3VzID0gbmV4dEZvY3VzID09PSAoKF9kID0gZ2V0Um9vdChzZWxmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9kLmFjdGl2ZUVsZW1lbnQpO1xuICAgIGNvbnN0IHRtcEZvY3VzID0gb3B0aW9ucyB8fCBzZWxmLml0ZW1zO1xuICAgIHNlbGYuX2JsdXJBbm5vdW5jZVJlc2V0ID0gZmFsc2U7XG4gICAgaWYgKG5leHRGb2N1cyA9PT0gY29udHJvbCkge1xuICAgICAgaWYgKHNhbWVGb2N1cykge1xuICAgICAgICBpZiAoSVNfTU9CSUxFICYmIExJVkUyKSBMSVZFMi50ZXh0Q29udGVudCA9IGNoYW5nZVRleHQ7XG4gICAgICAgIGVsc2UgKF9lID0gdG1wRm9jdXNbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfZS5mb2N1cygpO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiBuZXh0Rm9jdXMgPT0gbnVsbCA/IHZvaWQgMCA6IG5leHRGb2N1cy5mb2N1cygpLCAxMDApO1xuICAgIH0gZWxzZSBuZXh0Rm9jdXMgPT0gbnVsbCA/IHZvaWQgMCA6IG5leHRGb2N1cy5mb2N1cygpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCFJU19GSVJFRk9YX01BQykgcmV0dXJuIHJlbmRlcihzZWxmKTtcbiAgICAgIHNlbGYuX2JsdXJBbm5vdW5jZVJlc2V0ID0gdHJ1ZTtcbiAgICB9LCA1MDApO1xuICB9XG59O1xudmFyIG9uRm9jdXNJbjIgPSAoc2VsZiwgeyB0YXJnZXQgfSkgPT4ge1xuICBjbGVhclRpbWVvdXQoc2VsZi5fYmx1clRpbWVyKTtcbiAgc2VsZi5fZm9jdXNJbmRleCA9IFsuLi5zZWxmLml0ZW1zXS5pbmRleE9mKHRhcmdldCk7XG59O1xudmFyIG9uRm9jdXNPdXQyID0gKHNlbGYpID0+IHtcbiAgaWYgKHNlbGYuX2JsdXJBbm5vdW5jZVJlc2V0KSByZW5kZXIoc2VsZik7XG4gIHNlbGYuX2JsdXJUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHNlbGYuX2ZvY3VzSW5kZXggPSBudWxsO1xuICB9KTtcbn07XG52YXIgb25DbGljazIgPSAoc2VsZiwgeyB0YXJnZXQsIGNsaWVudFg6IHgsIGNsaWVudFk6IHkgfSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCBpdGVtcyA9IHNlbGYuY29udGFpbnModGFyZ2V0KSA/IFsuLi5zZWxmLml0ZW1zXSA6IG51bGw7XG4gIGNvbnN0IGl0ZW1SZW1vdmUgPSBpdGVtcyA9PSBudWxsID8gdm9pZCAwIDogaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5jb250YWlucyh0YXJnZXQpKTtcbiAgY29uc3QgaXRlbUNsaWNrZWQgPSBpdGVtcyA9PSBudWxsID8gdm9pZCAwIDogaXRlbXMuZmluZCgoaXRlbSkgPT4ge1xuICAgIGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiB5ID49IHRvcCAmJiB5IDw9IGJvdHRvbSAmJiB4ID49IGxlZnQgJiYgeCA8PSByaWdodDtcbiAgfSk7XG4gIGlmIChpdGVtUmVtb3ZlKSBkaXNwYXRjaENoYW5nZShzZWxmLCBpdGVtUmVtb3ZlKSAmJiBpdGVtUmVtb3ZlLnJlbW92ZSgpO1xuICBlbHNlIGlmIChpdGVtQ2xpY2tlZCkgaXRlbUNsaWNrZWQuZm9jdXMoKTtcbiAgZWxzZSBpZiAodGFyZ2V0ID09PSBzZWxmKSAoX2EyID0gc2VsZi5jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG59O1xudmFyIG9uSW5wdXRPcHRpb25DbGljayA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldDtcbiAgaWYgKCFpc0RhdGFsaXN0Q2xpY2soZXZlbnQpIHx8ICEoaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IGlucHV0LnZhbHVlLnRyaW0oKSkpIHJldHVybjtcbiAgY29uc3QgdmFsdWUgPSBnZXREYXRhbGlzdFZhbHVlKGlucHV0KTtcbiAgY29uc3QgaXRlbXMgPSBbLi4uc2VsZi5pdGVtc107XG4gIGNvbnN0IG9wdGlvbnMgPSBbLi4uKChfYTIgPSBpbnB1dCA9PSBudWxsID8gdm9pZCAwIDogaW5wdXQubGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jaGlsZHJlbikgfHwgW11dO1xuICBjb25zdCBvcHRpb25DbGlja2VkID0gb3B0aW9ucy5maW5kKChvcHQpID0+IGdldERhdGFsaXN0VmFsdWUob3B0KSA9PT0gdmFsdWUpO1xuICBjb25zdCBpdGVtUmVtb3ZlID0gaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gdmFsdWUpO1xuICBjb25zdCBpdGVtQWRkID0gY3JlYXRlRWxlbWVudChcImRhdGFcIiwgKG9wdGlvbkNsaWNrZWQgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbkNsaWNrZWQudGV4dCkgfHwgdmFsdWUsIHtcbiAgICB2YWx1ZVxuICB9KTtcbiAgaW5wdXQudmFsdWUgPSBcIlwiO1xuICBpZiAoIWRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW1SZW1vdmUgfHwgaXRlbUFkZCkpIHJldHVybjtcbiAgaWYgKGl0ZW1SZW1vdmUpIHJldHVybiBpdGVtUmVtb3ZlLnJlbW92ZSgpO1xuICBpZiAoIWl0ZW1zWzBdKSByZXR1cm4gc2VsZi5wcmVwZW5kKGl0ZW1BZGQpO1xuICBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXS5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJhZnRlcmVuZFwiLCBpdGVtQWRkKTtcbn07XG52YXIgb25LZXlEb3duMiA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgeyBrZXksIHJlcGVhdCwgdGFyZ2V0IH0gPSBldmVudDtcbiAgY29uc3QgaW5wdXQgPSBzZWxmLmNvbnRyb2wgPT09IHRhcmdldCA/IHNlbGYuY29udHJvbCA6IG51bGw7XG4gIGNvbnN0IGlzQ2FyZXRJbnNpZGUgPSBpbnB1dCA9PSBudWxsID8gdm9pZCAwIDogaW5wdXQuc2VsZWN0aW9uRW5kO1xuICBsZXQgaW5kZXggPSBpbnB1dCA/IHNlbGYuaXRlbXMubGVuZ3RoIDogKF9hMiA9IHNlbGYuX2ZvY3VzSW5kZXgpICE9IG51bGwgPyBfYTIgOiAtMTtcbiAgaWYgKGluZGV4ID09PSAtMSB8fCAhaW5wdXQgJiYgYXNCdXR0b24oZXZlbnQpKSByZXR1cm47XG4gIGlmIChrZXkgPT09IFwiQXJyb3dSaWdodFwiICYmICFpbnB1dCkgaW5kZXggKz0gMTtcbiAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93TGVmdFwiICYmICFpc0NhcmV0SW5zaWRlKSBpbmRleCAtPSAxO1xuICBlbHNlIGlmIChrZXkgPT09IFwiRW50ZXJcIiAmJiBpbnB1dCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgcmV0dXJuIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiaW5wdXRcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgfSBlbHNlIGlmICgoa2V5ID09PSBcIkJhY2tzcGFjZVwiIHx8IGtleSA9PT0gXCJEZWxldGVcIikgJiYgIWlzQ2FyZXRJbnNpZGUpIHtcbiAgICBjb25zdCByZW1vdmUgPSAhcmVwZWF0ICYmIHNlbGYuaXRlbXNbaW5kZXhdO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKHJlbW92ZSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIHJlbW92ZSkgJiYgcmVtb3ZlLnJlbW92ZSgpO1xuICAgIGlmIChpbnB1dCkgaW5kZXggLT0gMTtcbiAgfSBlbHNlIHJldHVybjtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgKF9iID0gc2VsZi5pdGVtc1tNYXRoLm1heCgwLCBpbmRleCldIHx8IHNlbGYuY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmZvY3VzKCk7XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWdzXCIsIFVIVE1MVGFnc0VsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTFRhZ3NFbGVtZW50IH07XG4iXSwibmFtZXMiOlsiZ2V0U3RlcHMiLCJub3ciLCJtYXgiLCJzaG93Iiwib2Zmc2V0Iiwic3RhcnQiLCJlbmQiLCJwYWdlcyIsIl8iLCJpIiwicGFnaW5hdGlvbiIsImN1cnJlbnQiLCJ0b3RhbCIsInBhZ2UiLCJpbmRleCIsIlFVSUNLX0VWRU5UIiwiSVNfQlJPV1NFUiIsImRlYm91bmNlIiwiY2FsbGJhY2siLCJkZWxheSIsInRpbWVyIiwiYXJncyIsImF0dHIiLCJlbCIsIm5hbWUiLCJ2YWx1ZSIsImlkIiwiVVVJRCIsInVzZUlkIiwiZXZlbnRzIiwiYWN0aW9uIiwiZWxlbWVudCIsInJlc3QiLCJ0eXBlIiwib24iLCJTQ1JPTExFUiIsIlRBUkdFVFMiLCJUQVJHRVRTX1VQREFURSIsInVwZGF0ZSIsIlBPU0lUSU9OIiwiYW5jaG9yUG9zaXRpb24iLCJ0YXJnZXQiLCJhbmNob3IiLCJwb3NpdGlvbiIsInBsYWNlIiwiX2EiLCJpc0hUTUxBbmNob3IiLCJ0YXJnZXRXIiwidGFyZ2V0SCIsImFuY2hvclciLCJhbmNob3JIIiwid2lkdGgiLCJoZWlnaHQiLCJsZWZ0IiwidG9wIiwiYW5jaG9yWCIsImFuY2hvclkiLCJoYXNTcGFjZUxlZnQiLCJoYXNTcGFjZVJpZ2h0IiwiaGFzU3BhY2VPdmVyIiwiaGFzU3BhY2VVbmRlciIsInBvc2l0aW9uUmlnaHQiLCJwb3NpdGlvblVuZGVyIiwiY2VudGVyWCIsImNlbnRlclkiLCJpc1ZlcnRpY2FsIiwiY3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlciIsInF1ZXVlIiwib25GcmFtZSIsIm9uVGltZXIiLCJvYnNlcnZlciIsIk1VVEFUT1JTIiwib25NdXRhdGlvbiIsImNsYXNzTmFtZSIsImVsZW1zIiwibXV0YXRvciIsIm9uTG9hZGVkIiwicnVuIiwiaXNJbnB1dExpa2UiLCJrZXkiLCJzaGVldCIsInRvZ2dsZSIsInByZXYiLCJuZXh0IiwiQ1NTX0FQUCIsInN0eWxlcyIsIkNTU19TVElDS1kiLCJDU1NfVE9HR0xFIiwiQ1NTX1NJREVCQVIiLCJ1c2VUcmFuc2l0aW9uIiwiaGFuZGxlVG9nZ2xlQ2xpY2siLCJzaWRlYmFyIiwiaGFuZGxlUmVzaXplIiwiTUlOX1kiLCJTQ1JPTExfVVAiLCJTVElDSyIsIlNUSUNLX0VMIiwiU1RJQ0tfSCIsIlNUSUNLX1kiLCJTVFVDSyIsIldJTl9IIiwiV0lOX1kiLCJoYW5kbGVNdXRhdGlvbiIsInN0aWNreSIsImhhbmRsZVNjcm9sbCIsIk5FWFRfWSIsIk5FWFRfVVAiLCJDU1NfQlJFQURDUlVNQlMiLCJicmVhZGNydW1icyIsImJyZWFkY3VtYnMiLCJjcnVtYiIsImxlbmd0aCIsIkNTU19ESUFMT0ciLCJESUFMT0dTIiwiaGFuZGxlTW9kYWwiLCJkaWFsb2ciLCJoYW5kbGVDbGljayIsIngiLCJ5IiwicmlnaHQiLCJib3R0b20iLCJoYW5kbGVJbmplY3QiLCJldmVudCIsImZpcnN0IiwiX19kZWZQcm9wIiwiX19nZXRPd25Qcm9wU3ltYm9scyIsIl9faGFzT3duUHJvcCIsIl9fcHJvcElzRW51bSIsIl9fZGVmTm9ybWFsUHJvcCIsIm9iaiIsIl9fc3ByZWFkVmFsdWVzIiwiYSIsImIiLCJwcm9wIiwiSVNfQU5EUk9JRCIsIklTX0lPUyIsIklTX1NBRkFSSSIsIklTX0JST1dTRVIkNCIsIlNBRkVfTEFCRUxMRURCWSIsIlNBRkVfTVVMVElTRUxFQ1RBQkxFIiwiRElTUExBWV9CTE9DSyIsIkZPQ1VTX09VVExJTkUiLCJVSFRNTEVsZW1lbnQiLCJfYTIiLCJvZmYiLCJhdHRhY2hTdHlsZSIsImNzcyIsImNyZWF0ZUVsZW1lbnQiLCJvYnNlcnZlcnMiLCJtdXRhdGlvbk9ic2VydmVyIiwib3B0aW9ucyIsImRldGFpbCIsImdldFJvb3QiLCJub2RlIiwicm9vdCIsInRhZ05hbWUiLCJ0ZXh0IiwiYXR0cnMiLCJjdXN0b21FbGVtZW50cyIsImluc3RhbmNlIiwiY3JlYXRlQXJpYUxpdmUiLCJtb2RlIiwibGl2ZSIsImF0dHJpYnV0ZVRleHRzIiwidGV4dHMiLCJrZXkyIiwiRElTQUJMRUQiLCJTRUxFQ1RFRCIsIlVIVE1MT3B0aW9uRWxlbWVudCIsIklTX1BSRVNTIiwiTElWRV9USU1FUiIsIkxJVkVfU1JfRklYIiwiTElWRSIsIklTX1NBRkFSSV9NQUMiLCJFVkVOVFMiLCJURVhUUyIsIlVIVE1MRGF0YUxpc3RFbGVtZW50IiwiZGlzY29ubmVjdElucHV0IiwiX3ByZXYiLCJpbnB1dHMiLCJpbnB1dCIsInNldHVwSW5wdXQiLCJvbkNsaWNrIiwib25Gb2N1c0luIiwib25Gb2N1c091dCIsIm9uS2V5RG93biIsInNldHVwT3B0aW9ucyIsInNlbGYiLCJpc0lucHV0Iiwic2V0RXhwYW5kZWQiLCJfYiIsIl9jIiwiX2QiLCJfZSIsImlzU2luZ2xlIiwib3B0aW9uIiwib3B0IiwiaXNJbnRlcmFjdGl2ZU9wdGlvbiIsImFjdGl2ZSIsImdldFZpc2libGVPcHRpb25zIiwib3BlbiIsInNhbml0aXplIiwic3RyIiwiaGlkZGVuIiwiaXNUeXBpbmciLCJpc0RhdGFsaXN0Q2xpY2siLCJjb250ZW50IiwidmlzaWJsZSIsImxpdmVTckZpeCIsImNvdW50VGV4dCIsIlNQTElUX0NIQVIiLCJGSVJFRk9YX09QVElPTl9DTElDSyIsImlzQ2xpY2siLCJpZ25vcmVkIiwiQ1NTX0ZJRUxEIiwiQ1NTX1BST1BFUlRZX09WRVIiLCJDU1NfUFJPUEVSVFlfVU5ERVIiLCJDU1NfVkFMSURBVElPTlMiLCJDU1NfVkFMSURBVElPTiIsImZpZWxkcyIsImZpZWxkIiwibGFiZWxzIiwiZGVzY3MiLCJkYXRhbGlzdCIsInZhbGlkIiwibGFiZWwiLCJyZW5kZXJEYXRhbGlzdCIsInJlbmRlckNvdW50ZXIiLCJyZW5kZXJUZXh0YXJlYVNpemUiLCJ0ZXh0YXJlYSIsImxpc3QiLCJzdHlsZSIsInRhZ3MiLCJpMTFuIiwibGltaXQiLCJyZW1haW5kZXIiLCJuZXh0SW52YWxpZCIsInByZXZJbnZhbGlkIiwib3ZlciIsInVuZGVyIiwiaGFuZGxlSW5wdXQiLCJoYW5kbGVJbnZhbGlkIiwiQ1NTX0ZJRUxEU0VUIiwiZmllbGRzZXRzIiwiZmllbGRzZXQiLCJ2YWxpZGF0aW9uSWQiLCJDU1NfTE9HTyIsImxvZ28iLCJpY29uIiwic3ZnIiwiaXNEb3QiLCJiYWNrIiwiQ1NTX1BPUE9WRVIiLCJPUEVOX1BPUE9WRVJTIiwiaGFuZGxlVG9nZ2xlIiwibmV3U3RhdGUiLCJoYW5kbGVMaW5rQ2xpY2siLCJjbG9zZSIsInBvcG92ZXIiLCJDU1NfVEFCTEUiLCJ0YWJsZXMiLCJ0YWJsZSIsInRocyIsImdyb3VwIiwiaXNUYm9keSIsInJvdyIsImNlbGwiLCJERVNDUklCRURCWSIsIkVTQyIsIkxBQkVMTEVEQlkiLCJQT1NJVElPTl9DU1NfUFJPUEVSVFkiLCJUSFJPVFRMRV9ERUxBWSIsIlRPT0xUSVAiLCJBTkNIT1IiLCJMQVNUX0NBTEwiLCJUSFJPVFRMRSIsImhhbmRsZU1vdmUiLCJ3YWl0IiwiaGFuZGxlTW92ZVRocm90dGxlZCIsImhhZExhYmVsIiwiaGFzTGFiZWwiLCJJU19CUk9XU0VSJDMiLCJhc0J1dHRvbiIsInZhbCIsIlVIVE1MRGV0YWlsc0VsZW1lbnQiLCJoaWRlIiwidURldGFpbHNMaXN0IiwidURldGFpbHMiLCJzdW1tYXJ5IiwiaXNTdW1tYXJ5IiwiVUhUTUxTdW1tYXJ5RWxlbWVudCIsIklTX0ZJUkVGT1giLCJJU19CUk9XU0VSJDIiLCJnZXRMYWJlbCIsImlkMiIsImFjYyIsImVsMiIsIl9hMyIsIlNLSVBfQVRUUl9DSEFOR0UiLCJVSFRNTFByb2dyZXNzRWxlbWVudCIsInJvbGVJbWFnZSIsInBlcmNlbnRhZ2UiLCJnZXROdW1iZXIiLCJzZXROdW1iZXIiLCJpc051bWVyaWMiLCJJU19CUk9XU0VSJDEiLCJBUklBX0NPTlRST0xTIiwiQVJJQV9TRUxFQ1RFRCIsIlVIVE1MVGFic0VsZW1lbnQiLCJxdWVyeVdpdGhvdXROZXN0ZWQiLCJnZXRTZWxlY3RlZEluZGV4Iiwic2V0U2VsZWN0ZWQiLCJVSFRNTFRhYkxpc3RFbGVtZW50IiwidGFiIiwidGFicyIsIlVIVE1MVGFiRWxlbWVudCIsInBhbmVscyIsIm5leHRQYW5lbCIsImdldFBhbmVsIiwicGFuZWwiLCJ0YWJsaXN0IiwidGFiTGlzdCIsIlVIVE1MVGFiUGFuZWxFbGVtZW50IiwiaXNGb2N1c2FibGUiLCJ0YWciLCJJU19NQUMiLCJnZXREYXRhbGlzdFZhbHVlIiwiTElWRTIiLCJJU19NT0JJTEUiLCJJU19GSVJFRk9YX01BQyIsIkVWRU5UUzIiLCJURVhUUzIiLCJVSFRNTFRhZ3NFbGVtZW50IiwicmVuZGVyIiwib25DbGljazIiLCJvbkZvY3VzSW4yIiwib25Gb2N1c091dDIiLCJvbklucHV0T3B0aW9uQ2xpY2siLCJvbktleURvd24yIiwiZGlzcGF0Y2hDaGFuZ2UiLCJpdGVtIiwiY2hhbmdlIiwiY2hhbmdlSXRlbSIsImNoYW5nZVRleHQiLCJ2YWx1ZXMiLCJsYWJlbDIiLCJjb250cm9sIiwiY29udHJvbExhYmVsIiwibmV4dEZvY3VzIiwic2FtZUZvY3VzIiwidG1wRm9jdXMiLCJpdGVtcyIsIml0ZW1SZW1vdmUiLCJpdGVtQ2xpY2tlZCIsIm9wdGlvbkNsaWNrZWQiLCJpdGVtQWRkIiwicmVwZWF0IiwiaXNDYXJldEluc2lkZSIsInJlbW92ZSJdLCJtYXBwaW5ncyI6Im1EQUFNQSxHQUFXLENBQ2hCQyxFQUNBQyxFQUNBQyxFQUFPLE9BQU8sb0JBQ1YsQ0FDRSxNQUFBQyxHQUFVRCxFQUFPLEdBQUssRUFDdEJFLEVBQVEsS0FBSyxJQUFJLEtBQUssSUFBSUosRUFBTSxLQUFLLE1BQU1HLENBQU0sRUFBR0YsRUFBTUMsRUFBTyxDQUFDLEVBQUcsQ0FBQyxFQUN0RUcsRUFBTSxLQUFLLElBQUksS0FBSyxJQUFJTCxFQUFNLEtBQUssS0FBS0csQ0FBTSxFQUFHRCxDQUFJLEVBQUdELENBQUcsRUFDM0RLLEVBQVEsTUFBTSxLQUFLLENBQUUsT0FBUUQsRUFBTSxFQUFJRCxDQUFTLEVBQUEsQ0FBQ0csRUFBR0MsSUFBTUEsRUFBSUosQ0FBSyxFQUVyRSxPQUFBRixFQUFPLEdBQUtFLEVBQVEsS0FBUyxPQUFPLEVBQUcsRUFBRyxFQUFHLENBQUMsRUFDOUNGLEVBQU8sR0FBS0csRUFBTUosS0FBVyxPQUFPLEdBQUksRUFBRyxFQUFHQSxDQUFHLEVBQzlDSyxDQUNSLEVBRWFHLEdBQWEsQ0FBQyxDQUFFLFFBQUFDLEVBQVUsRUFBRyxNQUFBQyxFQUFRLEdBQUksS0FBQVQsRUFBTyxNQUFTLENBQ3JFLEtBQU1RLEVBQVUsRUFBSUEsRUFBVSxFQUFJLEVBQ2xDLEtBQU1BLEVBQVVDLEVBQVFELEVBQVUsRUFBSSxFQUN0QyxNQUFPWCxHQUFTVyxFQUFTQyxFQUFPVCxDQUFJLEVBQUUsSUFBSSxDQUFDVSxFQUFNQyxLQUFXLENBQzNELFFBQVNELElBQVNGLEdBQVksT0FDOUIsSUFBSyxPQUFPRSxDQUFJLElBQUlDLENBQUssR0FDekIsS0FBQUQsQ0FBQSxFQUNDLENBQ0gsa3ZFQ3JCYUUsRUFBYyxDQUFFLFFBQVMsR0FBTSxRQUFTLEVBQUssRUFDN0NDLEVBQ1osT0FBTyxPQUFXLEtBQWUsT0FBTyxTQUFhLElBWXRDLFNBQUFDLEdBQ2ZDLEVBQ0FDLEVBQ0MsQ0FDRyxJQUFBQyxFQUVKLE1BQU8sSUFBSUMsSUFBWSxDQUN0QixhQUFhRCxDQUFLLEVBQ2xCQSxFQUFRLFdBQVcsSUFBTUYsRUFBUyxHQUFHRyxDQUFJLEVBQUdGLENBQUssQ0FDbEQsQ0FDRCxDQVNnQixTQUFBRyxFQUNmQyxFQUNBQyxFQUNBQyxFQUNnQixDQUNoQixPQUFJQSxJQUFVLE9BQWtCRixFQUFHLGFBQWFDLENBQUksR0FBSyxNQUNyREMsSUFBVSxLQUFTRixFQUFBLGdCQUFnQkMsQ0FBSSxFQUNsQ0QsRUFBRyxhQUFhQyxDQUFJLElBQU1DLEdBQVVGLEVBQUEsYUFBYUMsRUFBTUMsQ0FBSyxFQUM5RCxLQUNSLENBTUEsSUFBSUMsR0FBSyxFQUNULE1BQU1DLEdBQU8sR0FBRyxLQUFLLElBQU0sRUFBQSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEtBQUssU0FBUyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUcsQ0FBQyxDQUFDLEdBQ3pFLFNBQVNDLEVBQU1MLEVBQWEsQ0FDOUIsT0FBQ0EsRUFBRyxLQUFJQSxFQUFHLEdBQUssR0FBR0ksRUFBSSxHQUFHLEVBQUVELEVBQUUsSUFDM0JILEVBQUcsRUFDWCxDQUdBLE1BQU1NLEdBQVMsQ0FDZEMsRUFDQUMsRUFDQUMsSUFDVSxDQUNWLFVBQVdDLEtBQVFELEVBQUssQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUNuQ0EsRUFBSyxDQUFDLEVBQUlDLEVBQ1ZGLEVBQVEsR0FBR0QsQ0FBTSxlQUFlLEVBQUUsR0FBR0UsQ0FBSSxDQUUzQyxFQVFhRSxFQUFLLENBQ2pCSCxLQUNHQyxJQUNPSCxHQUFPLE1BQU9FLEVBQVNDLENBQUksRUFnQmhDRyxFQUFXbkIsRUFBYSxTQUFTLGNBQWMsS0FBSyxFQUFJLEtBQ3hEb0IsT0FBYyxJQUNkQyxHQUFpQixJQUFNLENBQzVCLFNBQVcsQ0FBQzdCLEVBQUc4QixDQUFNLElBQUtGLEdBQWdCRSxFQUFBLENBQzNDLEVBRUlILElBQ0hBLEVBQVMsTUFBTSxRQUFVLCtDQUN0QkQsRUFBQSxPQUFRLHFCQUFzQkcsR0FBZ0J0QixDQUFXLEdBUTdELE1BQU13QixFQUFXLENBQUUsSUFBSyxFQUFHLE1BQU8sRUFBRyxPQUFRLEVBQUcsS0FBTSxDQUFFLEVBRXhDLFNBQUFDLEVBQ2ZDLEVBQ0FDLEVBQ0FDLEVBQ0MsUUFDRCxHQUFJRCxJQUFXLElBQVMsQ0FBQ0EsRUFBTyxhQUFlLENBQUNELEVBQU8sWUFDL0MsT0FBQUwsR0FBUSxPQUFPSyxDQUFNLEVBRTdCLEdBREtOLEdBQUEsTUFBQUEsRUFBVSxzQkFBc0IsS0FBSyxPQUFPQSxHQUFZLEVBQUUsRUFDM0QsQ0FBQ0MsR0FBUSxJQUFJSyxDQUFNLEVBQUcsQ0FFekIsTUFBTUcsR0FDTEwsRUFBU0ksQ0FBaUMsR0FBS0osRUFBUyxPQUNsRCxPQUFBTSxHQUFBVCxHQUFRLElBQUlLLEVBQVEsSUFBTUQsRUFBZUMsRUFBUUMsRUFBUUUsRUFBSyxDQUFDLEVBQUUsSUFDdkVILENBQUEsSUFETSxZQUFBSSxJQUVILENBR0wsTUFBTUMsRUFBZUosYUFBa0IsWUFDakMsQ0FBRSxZQUFhSyxFQUFTLGFBQWNDLENBQVksRUFBQVAsRUFDbERRLEVBQVVILEVBQWVKLEVBQU8sWUFBY0EsRUFBTyxZQUNyRFEsRUFBVUosRUFBZUosRUFBTyxhQUFlQSxFQUFPLGFBQ3RELENBQUUsTUFBQVMsRUFBTyxPQUFBQyxFQUFRLEtBQUFDLEVBQU0sSUFBQUMsQ0FBSSxFQUFJWixFQUFPLHNCQUFzQixFQUM1RGEsRUFBVSxLQUFLLE1BQU1GLEdBQVFKLEVBQVVFLEdBQVMsQ0FBQyxFQUNqREssRUFBVSxLQUFLLE1BQU1GLEdBQU9KLEVBQVVFLEdBQVUsQ0FBQyxFQUVqREssR0FBZUYsRUFBVVIsRUFBVSxFQUNuQ1csRUFBZ0JULEVBQVVBLEVBQVVGLEVBQVUsT0FBTyxXQUNyRFksR0FBZUgsRUFBVVIsRUFBVSxFQUNuQ1ksRUFBZ0JKLEVBQVVOLEVBQVVGLEVBQVUsT0FBTyxZQUNyRGEsRUFDSmxCLElBQWFKLEVBQVMsT0FBU21CLEdBQWtCLENBQUNELEdBQzlDSyxFQUNKbkIsSUFBYUosRUFBUyxRQUFVcUIsR0FBa0IsQ0FBQ0QsR0FDL0NJLEdBQVUsS0FBSyxJQUNwQixLQUFLLElBQUksR0FBSVIsR0FBV1IsRUFBVUUsR0FBVyxDQUFDLEVBQzlDLE9BQU8sV0FBYUYsRUFBVSxFQUMvQixFQUNNaUIsR0FBVSxLQUFLLElBQ3BCLEtBQUssSUFBSSxHQUFJUixHQUFXUixFQUFVRSxHQUFXLENBQUMsRUFDOUMsT0FBTyxZQUFjRixFQUFVLEVBQ2hDLEVBQ01pQixHQUFhdEIsSUFBYUosRUFBUyxLQUFPSSxJQUFhSixFQUFTLE9BRXRFRSxFQUFPLE1BQU0sS0FBTyxHQUFHLEtBQUssTUFBTXdCLEdBQWFGLEdBQVVGLEVBQWdCTixFQUFVTixFQUFVTSxFQUFVUixDQUFPLENBQUMsS0FDL0dOLEVBQU8sTUFBTSxJQUFNLEdBQUcsS0FBSyxNQUFNd0IsR0FBY0gsRUFBZ0JOLEVBQVVOLEVBQVVNLEVBQVVSLEVBQVdnQixFQUFPLENBQUMsS0FDaEg3QixHQUFBLE1BQUFBLEVBQVUsTUFBTSxZQUNmLFlBQ0EsR0FBRyxLQUFLLE1BQU0sT0FBTyxRQUFVb0IsRUFBVU4sRUFBVUYsRUFBVSxFQUFFLENBQUMsTUFBTSxLQUFLLE1BQU0sT0FBTyxRQUFVUyxFQUFVTixFQUFVRixFQUFVLEVBQUUsQ0FBQyxLQUVySSxDQU1PLFNBQVNrQixHQUFnQ2hELEVBQTRCLENBQzNFLElBQUlpRCxFQUFRLEVBRVosTUFBTUMsRUFBVSxJQUFNLFdBQVdDLEVBQVMsR0FBRyxFQUN2Q0EsRUFBVSxJQUFNLENBQ1puRCxFQUFBLEdBQUlvRCxDQUFRLEVBQ3JCQSxFQUFTLFlBQVksRUFDYkgsRUFBQSxDQUNULEVBQ01HLEVBQVcsSUFBSSxpQkFBaUIsSUFBTSxDQUN0Q0gsSUFBZUEsRUFBQSxzQkFBc0JDLENBQU8sRUFBQSxDQUNqRCxFQUVNLE9BQUFFLENBQ1IsQ0FTQSxNQUFNQyxPQUFlLFFBQ1JDLEVBQWEsQ0FDekJqRCxFQUNBa0QsRUFDQXZELElBQ0ksQ0FDRSxNQUFBd0QsRUFBUW5ELEVBQUcsdUJBQXVCa0QsQ0FBUyxFQUMzQ0UsRUFBVUosR0FBUyxJQUFJaEQsQ0FBRSxHQUFLLENBQUMsRUFFaENvRCxFQUFRLFNBQ0hKLEdBQUEsSUFBSWhELEVBQUlvRCxDQUFPLEVBQ1FULEdBQUEsQ0FBQzFELEVBQUc4RCxJQUFhLENBQzVDLEdBQUEvQyxFQUFHLGNBQWVvRCxHQUFBLE1BQUFBLEVBQVMsUUFDbkJ6RCxVQUFBQSxLQUFZeUQsRUFBU3pELEVBQVMsT0FFekNvRCxHQUFBLE1BQUFBLEVBQVUsYUFDVkMsR0FBUyxPQUFPaEQsQ0FBRSxDQUNuQixDQUNBLEVBQUUsUUFBUUEsRUFBSSxDQUNkLGdCQUFpQixDQUFDLE9BQU8sRUFDekIsV0FBWSxHQUNaLFVBQVcsR0FDWCxRQUFTLEVBQUEsQ0FDVCxHQUVGb0QsRUFBUSxLQUFLLElBQU16RCxFQUFTd0QsQ0FBNEIsQ0FBQyxDQUMxRCxFQU9hRSxFQUFZMUQsR0FBeUIsQ0FDakQsR0FBSSxDQUFDRixFQUFZLE9BQ1gsTUFBQTZELEVBQU0sSUFBTSxzQkFBc0IzRCxDQUFRLEVBQzVDLFNBQVMsYUFBZSxXQUFnQjJELEVBQUEsRUFDdkMzQyxFQUFHLE9BQVEsT0FBUTJDLENBQUcsQ0FDNUIsRUFRYUMsR0FBZXZELEdBQzNCQSxhQUFjLGFBQ2QsYUFBY0EsR0FDZCxFQUFFQSxhQUFjLG1CQzlPaEIsT0FBTyxPQUFXLEtBQ2xCLE9BQU8sZUFDUCxTQUFTLHFCQUVSLElBQU0sQ0FDTixNQUFNd0QsRUFBTSxzQkFDTkMsRUFBUSxJQUFJLGNBRWxCLFNBQVMsbUJBQW1CLEtBQUtBLENBQUssRUFDdEMsT0FBTyxjQUFnQixDQUFDQyxFQUFTLEtBQVMsT0FDekMsTUFBTUMsRUFBTyxHQUFDckMsRUFBQSxPQUFPLGFBQWEsUUFBUWtDLENBQUcsSUFBL0IsTUFBQWxDLEVBQWtDLFNBQVMsVUFDbkRzQyxFQUFPRixFQUFTLENBQUNDLEVBQU9BLEVBRTlCRixFQUFNLFlBQVksV0FBV0QsQ0FBRyxTQUFTQSxDQUFHLEtBQUtJLENBQUksSUFBSSxFQUN6RCxPQUFPLGFBQWEsUUFBUUosRUFBS0ksQ0FBSSxDQUNyQyxFQUNELE9BQU8sY0FBYyxFQUFLLENBQzVCLEdBQUssRUNkTCxNQUFNQyxHQUFVQyxFQUFPLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUNqQ0MsR0FBYUQsRUFBTyxPQUFPLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFDdkNFLEdBQWEsdUNBQ2JDLEdBQWMsSUFBSUosRUFBTyxjQUFjQSxFQUFPLGlCQUU5Q0ssR0FBaUJ2RSxHQUF5QixDQUMxQyxTQUFTLG9CQUNULFNBQVMsb0JBQW9CQSxDQUFRLEVBREVBLEVBQUEsQ0FFN0MsRUFFQSxTQUFTd0UsR0FBa0IsQ0FBRSxPQUFRbkUsR0FBYSxDQUM3Q0EsYUFBYyxtQkFBcUJBLEVBQUcsUUFBUWdFLEVBQVUsR0FDM0RFLEdBQWMsSUFBTSxPQUVuQixHQUFJLGlCQUFpQmxFLENBQUUsRUFBRSxXQUFhLG1CQUFpQix5Q0FDbEQsQ0FDRSxNQUFBb0UsRUFBVSxTQUFTLGNBQWlDSCxFQUFXLEVBQzVERyxHQUFBLE1BQUFBLEVBQUEsYUFBYSxnQkFBaUIsT0FDdkNBLEdBQUEsTUFBQUEsRUFBUyxXQUFVLENBQ3BCLENBQ0EsQ0FDSCxDQUVBLFNBQVNDLElBQWUsUUFDZC9DLEVBQUEsU0FBQSxjQUFpQzJDLEVBQVcsSUFBNUMsTUFBQTNDLEVBQStDLE9BQ3pELENBR0EsSUFBSWdELEdBQVEsRUFDUkMsRUFDQUMsRUFBUSxFQUNSQyxFQUNBQyxHQUFVLEVBQ1ZDLEdBQVUsRUFDVkMsR0FBUSxHQUNSQyxHQUFRLEVBQ1JDLEVBQVEsRUFFWixTQUFTQyxHQUFlLENBQUNDLENBQU0sRUFBa0MsQ0FDckRQLEVBQUFPLEVBQ0VDLEdBQUEsQ0FDZCxDQUVBLFNBQVNBLElBQWUsT0FDbkIsR0FBQSxFQUFDUixHQUFBLE1BQUFBLEVBQVUsYUFBYSxPQUM1QixNQUFNUyxFQUFTLE9BQU8sUUFDaEJDLEVBQVVELEVBQVNKLEVBQ2pCQSxFQUFBSSxFQUdKQyxJQUFZWixJQUNmRCxNQUFTaEQsRUFBQW1ELEVBQVMsZ0JBQVQsWUFBQW5ELEVBQXdCLHdCQUF3QixNQUFPLEdBQUt3RCxFQUN6RFAsRUFBQVksRUFDWlQsR0FBVUQsRUFBUyxhQUNURSxHQUFBRixFQUFTLHNCQUFzQixFQUFFLElBQU1LLEVBQ3pDRixHQUFBSCxFQUFTLGNBQWdCLE9BQU8sWUFDeENJLEdBQVEsT0FBTyxhQUdaLEVBQUFMLElBQVUsSUFBTUksTUFDaEJKLElBQVUsS0FBT0ksSUFBVUwsR0FBYU8sR0FBU0gsS0FDM0NGLEVBQUEsTUFBTSxZQUFZLFFBQVMsUUFBUSxFQUNuQ0EsRUFBQSxNQUFNLFlBQVksUUFBUyxLQUFLLEVBQ2pDRCxFQUFBLElBQ0VBLElBQVUsSUFBTSxDQUFDRCxHQUNsQkUsRUFBQSxNQUFNLFlBQVksUUFBUyxVQUFVLEVBQ3JDQSxFQUFBLE1BQU0sWUFBWSxRQUFTLEdBQUcsS0FBSyxJQUFJLEVBQUdLLEVBQVFSLEVBQUssQ0FBQyxJQUFJLEVBQzdERSxFQUFBLEdBQ0VBLElBQVUsR0FBSyxDQUFDRCxHQUFhTyxFQUFRRCxJQUFTRixHQUFVRCxJQUN6REQsRUFBQSxNQUFNLFlBQVksUUFBUyxRQUFRLEVBQzVDQSxFQUFTLE1BQU0sWUFBWSxRQUFTLEdBQUdJLEdBQVFILEVBQU8sSUFBSSxFQUNsREYsRUFBQSxHQUNFQSxJQUFVLEdBQUtELElBQ2hCRSxFQUFBLE1BQU0sWUFBWSxRQUFTLFVBQVUsRUFDOUNBLEVBQVMsTUFBTSxZQUFZLFFBQVMsR0FBR0UsR0FBVUwsRUFBSyxJQUFJLEVBQ2xERSxFQUFBLEdBRVYsQ0FFQW5CLEVBQVMsSUFBTSxDQUNISixFQUFBLFNBQVMsZ0JBQWlCYyxHQUFZZ0IsRUFBYyxFQUM1RHBFLEVBQUEsU0FBVSxRQUFTd0QsR0FBbUIzRSxDQUFXLEVBQ3BEbUIsRUFBRyxPQUFRLFNBQVVqQixHQUFTMkUsR0FBYyxHQUFHLEVBQUc3RSxDQUFXLEVBQzFEbUIsRUFBQSxPQUFRLFNBQVVzRSxHQUFjekYsQ0FBVyxDQUMvQyxDQUFDLEVDckZELE1BQU00RixHQUFrQnRCLEVBQU8sWUFBWSxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBRXZELFNBQVNpQixHQUFlTSxFQUE0QyxDQUNuRSxVQUFXQyxLQUFjRCxFQUNiQyxFQUFBLGlCQUFpQixNQUFNLEVBQUUsUUFBUSxDQUFDQyxFQUFPaEcsRUFBTyxDQUFFLE9BQUFpRyxLQUFhLENBQ3pFekYsRUFBS3dGLEVBQU8sZUFBZ0JoRyxJQUFVaUcsRUFBUyxFQUFJLE9BQVMsSUFBSSxDQUFBLENBQ2hFLENBQ0gsQ0FFQW5DLEVBQVMsSUFDUkosRUFBVyxTQUFTLGdCQUFpQm1DLEdBQWlCTCxFQUFjLENBQ3JFLEVDSkEsTUFBTVUsR0FBYTNCLEVBQU8sT0FBTyxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQ3ZDNEIsR0FBVWpHLEVBQ1osU0FBUyx1QkFDVmdHLEVBQ0QsRUFDQyxDQUFDLEVBRUVFLEdBQWMsSUFBTSxDQUN6QixVQUFXQyxLQUFVRixHQUNoQkUsRUFBTyxhQUFlQSxFQUFPLFdBQWFBLEVBQU8sUUFDaERBLEVBQU8sUUFBUSw4Q0FBOEMsR0FDM0Q3RixFQUFBNkYsRUFBUSxPQUFRLElBQUksRUFDekJBLEVBQU8sVUFBVSxHQUNQQSxFQUFPLFFBQVEsb0JBQW9CLElBQ3hDN0YsRUFBQTZGLEVBQVEsT0FBUSxFQUFFLEVBQ3ZCQSxFQUFPLE1BQU0sR0FHakIsRUFFTUMsR0FBYyxDQUFDLENBQUUsUUFBU0MsRUFBRyxRQUFTQyxFQUFHLE9BQVEvRixLQUFxQixPQUMzRSxHQUFJQSxhQUFjLG1CQUFxQkQsRUFBS0MsRUFBSSxlQUFlLElBQU0sTUFBTyxDQUMzRSxLQUFNLENBQUUsSUFBQStCLEVBQUssTUFBQWlFLEVBQU8sT0FBQUMsRUFBUSxLQUFBbkUsQ0FBSyxFQUFJOUIsRUFBRyxzQkFBc0IsRUFDN0MrQixHQUFPZ0UsR0FBS0EsR0FBS0UsR0FBVW5FLEdBQVFnRSxHQUFLQSxHQUFLRSxHQUUvQ2hHLEVBQUcsTUFBTSxDQUFBLE1BRXhCQSxhQUFjLFNBQ2RBLEVBQUcsUUFBUSw4QkFBOEIsS0FFckNzQixFQUFBdEIsR0FBQSxZQUFBQSxFQUFBLFFBQVEsWUFBUixNQUFBc0IsRUFBbUIsUUFFekIsRUFFQStCLEVBQVMsSUFBTSxDQUNYMUMsRUFBQSxTQUFVLFFBQVNrRixHQUE4QnJHLENBQVcsRUFDL0RtRCxHQUFnQ2dELEVBQVcsRUFBRSxRQUM1QyxTQUFTLGdCQUNULENBQ0MsZ0JBQWlCLENBQUMsTUFBTSxFQUN4QixXQUFZLEdBQ1osVUFBVyxHQUNYLFFBQVMsRUFBQSxDQUVYLENBQ0QsQ0FBQyxFQ3BERCxTQUFTTyxHQUFhQyxFQUEyQyxPQUM1RCxHQUFBQSxFQUFNLGdCQUFrQnJDLEVBQU8sY0FBZSxPQUM1QyxNQUFBc0MsR0FBUzlFLEVBQUE2RSxFQUFNLFNBQU4sWUFBQTdFLEVBQTBCLGtCQUVyQzhFLGFBQWlCLHFCQUNmckcsRUFBQXFHLEVBQU8sV0FBWSxJQUFJLEVBQzVCQSxFQUFNLE1BQU0sRUFFZCxDQUVBL0MsRUFBUyxJQUFNMUMsRUFBRyxTQUFVLGVBQWdCdUYsR0FBYzFHLENBQVcsQ0FBQyxFQ2J0RSxJQUFJNkcsR0FBWSxPQUFPLGVBQ25CQyxHQUFzQixPQUFPLHNCQUM3QkMsR0FBZSxPQUFPLFVBQVUsZUFDaENDLEdBQWUsT0FBTyxVQUFVLHFCQUNoQ0MsR0FBa0IsQ0FBQ0MsRUFBS2xELEVBQUt0RCxJQUFVc0QsS0FBT2tELEVBQU1MLEdBQVVLLEVBQUtsRCxFQUFLLENBQUUsV0FBWSxHQUFNLGFBQWMsR0FBTSxTQUFVLEdBQU0sTUFBQXRELENBQUssQ0FBRSxFQUFJd0csRUFBSWxELENBQUcsRUFBSXRELEVBQ3RKeUcsR0FBaUIsQ0FBQ0MsRUFBR0MsSUFBTSxDQUM3QixRQUFTQyxLQUFRRCxJQUFNQSxFQUFJLENBQUEsR0FDckJOLEdBQWEsS0FBS00sRUFBR0MsQ0FBSSxHQUMzQkwsR0FBZ0JHLEVBQUdFLEVBQU1ELEVBQUVDLENBQUksQ0FBQyxFQUNwQyxHQUFJUixHQUNGLFFBQVNRLEtBQVFSLEdBQW9CTyxDQUFDLEVBQ2hDTCxHQUFhLEtBQUtLLEVBQUdDLENBQUksR0FDM0JMLEdBQWdCRyxFQUFHRSxFQUFNRCxFQUFFQyxDQUFJLENBQUMsRUFFdEMsT0FBT0YsQ0FDVCxFQUdJbkgsRUFBYSxPQUFPLE9BQVcsS0FBZSxPQUFPLE9BQU8sU0FBYSxLQUFlLE9BQU8sT0FBTyxVQUFjLElBQ3BIc0gsR0FBYXRILEdBQWMsV0FBVyxLQUFLLFVBQVUsU0FBUyxFQUU5RHVILEdBQVN2SCxHQUFjLG1CQUFtQixLQUFLLFVBQVUsU0FBUyxFQUNsRXdILEdBQVl4SCxHQUFjLGlDQUFpQyxLQUFLLFVBQVUsU0FBUyxFQUNuRjZCLEdBQ000RixHQUNWLFFBQVEsT0FBTzVGLEdBQUssVUFBVSxnQkFBa0IsS0FBTyxPQUFTQSxHQUFHLFdBQWEsVUFBVSxRQUFRLEVBQ2xHLElBQUk2RixHQUFrQixHQUFHSixHQUFhLE9BQVMsTUFBTSxjQUNqREssR0FBdUIsR0FBR0gsR0FBWSxPQUFTLE1BQU0sbUJBQ3JESSxHQUFnQiwyQ0FDaEJDLEdBQWdCLCtGQUNoQkMsR0FBZSxPQUFPLFlBQWdCLElBQWMsS0FBTSxDQUM5RCxFQUFJLFlBQ0osU0FBU3hILEVBQUtDLEVBQUlDLEVBQU1DLEVBQU8sQ0FDN0IsSUFBSXNILEVBQ0osT0FBSXRILElBQVUsUUFBZ0JzSCxFQUFNeEgsRUFBRyxhQUFhQyxDQUFJLElBQU0sS0FBT3VILEVBQU0sTUFDdkV0SCxJQUFVLEtBQU1GLEVBQUcsZ0JBQWdCQyxDQUFJLEVBQ2xDRCxFQUFHLGFBQWFDLENBQUksSUFBTUMsR0FBT0YsRUFBRyxhQUFhQyxFQUFNQyxDQUFLLEVBQzlELEtBQ1QsQ0FDQSxJQUFJSSxHQUFTLENBQUNDLEVBQVFDLEVBQVNDLElBQVMsQ0FDdEMsVUFBV0MsS0FBUUQsRUFBSyxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQ2xDQSxFQUFLLENBQUMsRUFBSUMsRUFDVixRQUFRLFVBQVUsR0FBR0gsQ0FBTSxlQUFlLEVBQUUsTUFBTUMsRUFBU0MsQ0FBSSxDQUVuRSxFQUNJRSxHQUFLLENBQUNILEtBQVlDLElBQVNILEdBQU8sTUFBT0UsRUFBU0MsQ0FBSSxFQUN0RGdILEdBQU0sQ0FBQ2pILEtBQVlDLElBQVNILEdBQU8sU0FBVUUsRUFBU0MsQ0FBSSxFQUMxRGlILEdBQWMsQ0FBQ2xILEVBQVNtSCxJQUFRbkgsRUFBUSxhQUFhLENBQUUsS0FBTSxNQUFRLENBQUEsRUFBRSxPQUN6RW9ILEdBQWMsTUFBTSxFQUVwQkEsR0FBYyxRQUFTRCxDQUFHLENBQzVCLEVBQ0lFLEdBQTRCLElBQUksUUFDaENDLEdBQW1CLENBQUN0SCxFQUFTdUgsSUFBWSxDQUMzQyxHQUFJQSxJQUFZLE9BQVEsT0FBT0YsR0FBVSxJQUFJckgsQ0FBTyxFQUNwRCxHQUFJLENBQ0ZxSCxHQUFVLElBQUlySCxDQUFPLEVBQUUsV0FBWSxFQUNuQ3FILEdBQVUsT0FBT3JILENBQU8sQ0FDekIsTUFBYSxDQUNoQixDQUNFLEdBQUl1SCxFQUFTLENBQ1gsTUFBTWhGLEVBQVcsSUFBSSxpQkFDbEJpRixHQUFXeEgsRUFBUSxZQUFZLENBQUUsS0FBTSxXQUFZLE9BQUF3SCxDQUFRLENBQUEsQ0FDN0QsRUFDRGpGLEVBQVMsUUFBUXZDLEVBQVN1SCxDQUFPLEVBQ2pDRixHQUFVLElBQUlySCxFQUFTdUMsQ0FBUSxDQUNuQyxDQUNBLEVBQ0lrRixHQUFXQyxHQUFTLENBQ3RCLElBQUlWLEVBQ0osTUFBTVcsSUFBU1gsRUFBTVUsRUFBSyxjQUFnQixLQUFPLE9BQVNWLEVBQUksS0FBS1UsQ0FBSSxJQUFNQSxFQUFLLGNBQ2xGLE9BQU9DLGFBQWdCLFVBQVlBLGFBQWdCLFdBQWFBLEVBQU8sUUFDekUsRUFDSWhJLEdBQUssRUFDTEUsR0FBU0wsR0FDTkEsR0FDQUEsRUFBRyxLQUFJQSxFQUFHLEdBQUssSUFBSUEsRUFBRyxTQUFTLFlBQVcsQ0FBRSxJQUFJLEVBQUVHLElBQUksU0FBUyxFQUFFLENBQUMsSUFDaEVILEVBQUcsSUFGTSxHQUlkNEgsR0FBZ0IsQ0FBQ1EsRUFBU0MsRUFBTUMsSUFBVSxDQUM1QyxNQUFNdEksRUFBSyxTQUFTLGNBQWNvSSxDQUFPLEVBQ3pDLE9BQUlDLElBQU1ySSxFQUFHLFlBQWNxSSxHQUNwQnJJLENBQ1QsRUFDSXVJLEdBQWlCLENBQ25CLE9BQVEsQ0FBQ3RJLEVBQU11SSxJQUFhLENBQUMvSSxHQUFjLE9BQU8sZUFBZSxJQUFJUSxDQUFJLEdBQUssT0FBTyxlQUFlLE9BQU9BLEVBQU11SSxDQUFRLENBQzNILEVBQ0lDLEdBQWtCQyxHQUFTLENBQzdCLE1BQU1DLEVBQU9mLEdBQWMsS0FBSyxFQUNoQyxPQUFBZSxFQUFLLE1BQU0sUUFBVSw4REFDckI1SSxFQUFLNEksRUFBTSxZQUFhRCxDQUFJLEVBQ3JCQyxDQUNULEVBQ0EsU0FBU0MsR0FBZUMsRUFBTy9CLEVBQU01RyxFQUFPLENBQzFDLEdBQUksQ0FBQzRHLEVBQU0sT0FBTyxPQUFPLEtBQUsrQixDQUFLLEVBQUUsSUFBS0MsR0FBUyxXQUFXQSxDQUFJLEVBQUUsRUFDcEUsTUFBTXRGLEdBQU9zRCxHQUFRLEtBQU8sT0FBU0EsRUFBSyxXQUFXLFVBQVUsSUFBTUEsRUFBSyxNQUFNLENBQUMsRUFDakYsT0FBSXRELEdBQU90RCxHQUFTMkksRUFBTXJGLENBQUcsSUFBR3FGLEVBQU1yRixDQUFHLEVBQUl0RCxHQUN0QyxDQUFFLENBQ1gsQ0FHQSxJQUFJNkksR0FBVyxXQUNYQyxFQUFXLFdBQ1hDLEdBQXFCLGNBQWMxQixFQUFhLENBRWxELFdBQVcsb0JBQXFCLENBQzlCLE1BQU8sQ0FBQ3dCLEdBQVVDLENBQVEsQ0FDOUIsQ0FDRSxhQUFjLENBQ1osTUFBTyxFQUNQdEIsR0FDRSxLQUNBLEdBQUdMLEVBQWEsaUJBQWlCQyxFQUFhLDJCQUMvQyxDQUNMLENBQ0UsbUJBQW9CLENBQ2JOLEtBQVEsS0FBSyxTQUFXLElBQ3hCakgsRUFBSyxLQUFNLE1BQU0sR0FBR0EsRUFBSyxLQUFNLE9BQVEsUUFBUSxFQUNwRCxLQUFLLHlCQUEwQixDQUNuQyxDQUNFLDBCQUEyQixDQUN6QkEsRUFBSyxLQUFNLGdCQUFpQixHQUFHLEtBQUssUUFBUSxFQUFFLEVBQzlDQSxFQUFLLEtBQU0sZ0JBQWlCLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FDbEQsQ0FFRSxJQUFJLGlCQUFrQixDQUNwQixPQUFPLEtBQUtpSixDQUFRLENBQ3hCLENBQ0UsSUFBSSxnQkFBZ0I5SSxFQUFPLENBQ3pCLEtBQUs4SSxDQUFRLEVBQUk5SSxDQUNyQixDQUNFLElBQUksVUFBVyxDQUNiLE9BQU9ILEVBQUssS0FBTWdKLEVBQVEsSUFBTSxJQUNwQyxDQUNFLElBQUksU0FBUzdJLEVBQU8sQ0FDbEJILEVBQUssS0FBTWdKLEdBQVU3SSxFQUFRLEdBQUssSUFBSSxDQUMxQyxDQUVFLElBQUksTUFBTyxDQUNULE9BQU8sS0FBSyxRQUFRLE1BQU0sQ0FDOUIsQ0FFRSxJQUFJLE9BQVEsQ0FDVixJQUFJc0gsRUFDSixNQUFNTyxHQUFXUCxFQUFNLEtBQUssUUFBUSxZQUFZLElBQU0sS0FBTyxPQUFTQSxFQUFJLHFCQUFxQixVQUFVLEVBQ3pHLE9BQU8sTUFBTSxLQUFLTyxHQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxJQUFJLENBQ3JELENBRUUsSUFBSSxPQUFRLENBQ1YsT0FBT2hJLEVBQUssS0FBTSxPQUFPLEdBQUssS0FBSyxJQUN2QyxDQUNFLElBQUksTUFBTUcsRUFBTyxDQUNmSCxFQUFLLEtBQU0sUUFBU0csQ0FBSyxDQUM3QixDQUNFLElBQUksVUFBVyxDQUNiLE9BQU9ILEVBQUssS0FBTWlKLENBQVEsSUFBTSxJQUNwQyxDQUNFLElBQUksU0FBUzlJLEVBQU8sQ0FDbEJILEVBQUssS0FBTWlKLEVBQVU5SSxFQUFRLEdBQUssSUFBSSxDQUMxQyxDQUVFLElBQUksTUFBTyxDQUNULElBQUlzSCxFQUNKLFFBQVNBLEVBQU0sS0FBSyxjQUFnQixLQUFPLE9BQVNBLEVBQUksS0FBSSxJQUFPLEVBQ3ZFLENBQ0UsSUFBSSxLQUFLYSxFQUFNLENBQ2IsS0FBSyxZQUFjQSxDQUN2QixDQUVFLElBQUksT0FBUSxDQUNWLE9BQU90SSxFQUFLLEtBQU0sT0FBTyxHQUFLLEtBQUssSUFDdkMsQ0FDRSxJQUFJLE1BQU1HLEVBQU8sQ0FDZkgsRUFBSyxLQUFNLFFBQVNHLENBQUssQ0FDN0IsQ0FDQSxFQUNBcUksR0FBZSxPQUFPLFdBQVlVLEVBQWtCLEVBR3BELElBQUlDLEdBQVcsR0FDWEMsR0FDQUMsR0FBYyxFQUNkQyxFQUNBQyxHQUFnQnJDLElBQWEsQ0FBQ0QsR0FDOUJ1QyxHQUFTLGlEQUNUQyxHQUFRLENBQ1YsU0FBVSxTQUNWLE9BQVEsU0FDVixFQUNJQyxHQUF1QixjQUFjbEMsRUFBYSxDQUNwRCxhQUFjLENBQ1osTUFBTyxFQUlQLEtBQUssV0FBYSxFQUNsQixLQUFLLE9BQVMsS0FDZCxLQUFLLE1BQVEsS0FDYixLQUFLLE9BQVMsR0FFZCxLQUFLLE9BQVNaLEdBQWUsQ0FBQSxFQUFJNkMsRUFBSyxFQUN0QzlCLEdBQ0UsS0FDQSxHQUFHTCxFQUFhLDREQUVqQixDQUNMLENBR0UsV0FBVyxvQkFBcUIsQ0FDOUIsTUFBTyxDQUFDLEtBQU0sR0FBR3VCLEdBQWVZLEVBQUssQ0FBQyxDQUMxQyxDQUNFLG1CQUFvQixDQUNsQixLQUFLLE9BQVMsR0FDZCxLQUFLLE1BQVF2QixHQUFRLElBQUksRUFDcEJvQixJQUFNQSxFQUFPWixHQUFlLFdBQVcsR0FDdkNZLEVBQUssYUFBYSxTQUFTLEtBQUssWUFBWUEsQ0FBSSxFQUNyRHRKLEVBQUssS0FBTSxPQUFRLFNBQVMsRUFDNUJBLEVBQUssS0FBTSxXQUFZLElBQUksRUFDM0JZLEdBQUcsS0FBSyxNQUFPLFVBQVcsSUFBSSxFQUM5QkEsR0FBRyxLQUFLLE1BQU8sUUFBUyxLQUFNLEVBQUksRUFDbEMsV0FBVyxJQUFNLEtBQUssMEJBQTBCLENBQ3BELENBQ0Usc0JBQXVCLENBQ3JCOEcsR0FBSSxLQUFLLE9BQVMsS0FBTSxRQUFTLEtBQU0sRUFBSSxFQUMzQ0EsR0FBSSxLQUFLLE9BQVMsS0FBTSxVQUFXLElBQUksRUFDdkNpQyxHQUFnQixJQUFJLEVBQ3BCLEtBQUssTUFBUSxJQUNqQixDQUNFLHlCQUF5QjVDLEVBQU02QyxFQUFPL0YsRUFBTSxDQUMxQyxJQUFJNEQsRUFDSm9CLEdBQWUsS0FBSyxPQUFROUIsRUFBTWxELENBQUksRUFDdEMsTUFBTWdHLEdBQVVwQyxFQUFNLEtBQUssUUFBVSxLQUFPLE9BQVNBLEVBQUksaUJBQWlCLGVBQWUsS0FBSyxFQUFFLElBQUksRUFDcEcsVUFBV3FDLEtBQVNELEdBQVUsQ0FBRSxFQUFFRSxHQUFXLEtBQU1ELENBQUssQ0FDNUQsQ0FDRSxZQUFZMUQsRUFBTyxDQUNqQixLQUFNLENBQUUsS0FBQXpGLENBQUksRUFBS3lGLEVBQ2JBLEVBQU0sbUJBQ056RixJQUFTLFNBQVNxSixHQUFRLEtBQU01RCxDQUFLLEdBQ3JDekYsSUFBUyxTQUFXQSxJQUFTLFlBQVdzSixHQUFVLEtBQU03RCxDQUFLLEVBQzdEekYsSUFBUyxZQUFZdUosR0FBVyxJQUFJLEVBQ3BDdkosSUFBUyxXQUFXd0osR0FBVSxLQUFNL0QsQ0FBSyxHQUN6Q3pGLElBQVMsWUFBY0EsSUFBUyxVQUFTeUosR0FBYSxLQUFNaEUsQ0FBSyxFQUNqRXpGLElBQVMsWUFBV3dJLEdBQVcsSUFDL0J4SSxJQUFTLGNBQWF3SSxHQUFXLEtBQUssU0FBUy9DLEVBQU0sTUFBTSxHQUNuRSxDQUNFLElBQUksU0FBVSxDQUNaLE9BQU8sS0FBSyxxQkFBcUIsVUFBVSxDQUMvQyxDQUNBLEVBQ0k2RCxHQUFZLENBQUNJLEVBQU0sQ0FBRSxPQUFBbEosS0FBYSxDQUNwQyxJQUFJc0csRUFDSixNQUFNNkMsRUFBVUQsRUFBSyxTQUFXbEosRUFFaEMsR0FEaUJtSixHQUFXRCxFQUFLLFNBQVNsSixDQUFNLEVBQ2xDLE9BQU8sYUFBYWtKLEVBQUssVUFBVSxFQUM3QyxDQUFDQyxHQUFXbkosYUFBa0Isa0JBQW9CbkIsRUFBS21CLEVBQVEsTUFBTSxJQUFNa0osRUFBSyxLQUM5RUEsRUFBSyxRQUFRVixHQUFnQlUsQ0FBSSxFQUNyQ0EsRUFBSyxPQUFTbEosRUFDZG5CLEVBQUtxSyxFQUFNakQsR0FBaUI5RyxJQUFPbUgsRUFBTTRDLEVBQUssT0FBTyxTQUFXLEtBQU8sT0FBUzVDLEVBQUksQ0FBQyxDQUFDLENBQUMsRUFDdkY3RyxHQUFHeUosRUFBSyxPQUFTQSxFQUFNYixHQUFRYSxDQUFJLEVBQ25DdEMsR0FBaUJzQyxFQUFNLENBQ3JCLGdCQUFpQixDQUFDLE9BQU8sRUFFekIsV0FBWSxHQUNaLFVBQVcsR0FDWCxRQUFTLEVBQ2YsQ0FBSyxFQUNERSxFQUFZRixFQUFNLEVBQUksRUFFMUIsRUFDSUgsR0FBY0csR0FBUyxDQUNwQmxCLEtBQVVrQixFQUFLLFdBQWEsV0FBVyxJQUFNVixHQUFnQlUsQ0FBSSxDQUFDLEVBQ3pFLEVBQ0lMLEdBQVUsQ0FBQ0ssRUFBTSxDQUFFLE9BQUFsSixLQUFhLENBQ2xDLElBQUlzRyxFQUFLK0MsRUFBSUMsRUFBSUMsRUFBSUMsRUFDckIsTUFBTUMsRUFBVzVLLEVBQUtxSyxFQUFNaEQsRUFBb0IsSUFBTSxPQUNoRHdELEVBQVMsQ0FBQyxHQUFHUixFQUFLLE9BQU8sRUFBRSxLQUFNUyxHQUFRQSxFQUFJLFNBQVMzSixDQUFNLENBQUMsRUFDbkUsR0FBSWtKLEVBQUssU0FBV2xKLEVBQ2xCb0osRUFBWUYsRUFBTSxFQUFJLFVBQ2JRLEdBQVVFLEdBQW9CRixDQUFNLEVBQUcsQ0FDaEQsVUFBV0MsS0FBT1QsRUFBSyxRQUNqQlMsSUFBUUQsRUFBUUMsRUFBSSxTQUFXLEdBQzFCRixJQUFVRSxFQUFJLFNBQVcsS0FFbkNOLEdBQU0vQyxFQUFNLE9BQU8seUJBQ2xCLGlCQUFpQixVQUNqQixPQUNELElBQUssS0FBTyxPQUFTQSxFQUFJLE1BQVEsTUFBZ0IrQyxFQUFHLEtBQUtILEVBQUssT0FBUVEsRUFBTyxLQUFLLEVBQy9FRCxLQUNESCxFQUFLSixFQUFLLFNBQVcsTUFBZ0JJLEVBQUcsTUFBTyxFQUNoREYsRUFBWUYsRUFBTSxFQUFLLElBRXhCSyxFQUFLTCxFQUFLLFNBQVcsTUFBZ0JLLEVBQUcsY0FDdkMsSUFBSSxNQUFNLFFBQVMsQ0FBRSxRQUFTLEdBQU0sU0FBVSxFQUFNLENBQUEsQ0FDckQsR0FDQUMsRUFBS04sRUFBSyxTQUFXLE1BQWdCTSxFQUFHLGNBQWMsSUFBSSxNQUFNLFNBQVUsQ0FBRSxRQUFTLEVBQU0sQ0FBQSxDQUFDLENBQ2pHLENBQ0EsRUFDSVIsR0FBWSxDQUFDRSxFQUFNakUsSUFBVSxDQUMvQixJQUFJcUIsRUFBSytDLEVBQ1QsR0FBSXBFLEVBQU0sUUFBVUEsRUFBTSxTQUFXQSxFQUFNLFNBQVdBLEVBQU0sU0FBVSxPQUNsRUEsRUFBTSxNQUFRLFVBQVVtRSxFQUFZRixFQUFNLEVBQUksRUFDbEQsS0FBTSxDQUFFLElBQUE1RyxDQUFHLEVBQUsyQyxFQUNWNEUsR0FBVXZELEVBQU00QyxFQUFLLFFBQVUsS0FBTyxPQUFTNUMsRUFBSSxjQUNuRE8sRUFBVWlELEdBQWtCWixDQUFJLEVBQ2hDN0ssRUFBUXdJLEVBQVEsUUFBUWdELENBQU0sRUFDcEMsSUFBSW5ILEVBQU8sR0FHWCxHQUZJSixJQUFRLGNBQWFJLEdBQVFyRSxFQUFRLEdBQUt3SSxFQUFRLFFBQ2xEdkUsSUFBUSxZQUFXSSxHQUFRLENBQUNyRSxFQUFRQSxFQUFRd0ksRUFBUSxRQUFVLEdBQzlELENBQUN4SSxLQUNDaUUsSUFBUSxRQUFVQSxJQUFRLFlBQVVJLEVBQU8sSUFDM0NKLElBQVEsT0FBU0EsSUFBUSxjQUFZSSxFQUFPbUUsRUFBUSxPQUFTLEdBQzdEdkUsSUFBUSxTQUNWLE9BQUF1RSxFQUFReEksQ0FBSyxFQUFFLE1BQU8sRUFDZjRHLEVBQU0sZUFBZ0IsRUFHakMsR0FBSTRCLEVBQVFuRSxDQUFJLEVBQUcsVUFBV2dILEtBQVU3QyxFQUFTNkMsRUFBTyxTQUFXLEdBQy9EN0MsRUFBUW5FLENBQUksR0FBR3VDLEVBQU0sZUFBZ0IsR0FDeENvRSxFQUFLeEMsRUFBUW5FLENBQUksR0FBS3dHLEVBQUssU0FBVyxNQUFnQkcsRUFBRyxNQUFPLEVBQzdEL0csSUFBUSxVQUFVOEcsRUFBWUYsRUFBTSxFQUFLLENBQy9DLEVBQ0lFLEVBQWMsQ0FBQ0YsRUFBTWEsSUFBUyxDQUNoQ2IsRUFBSyxPQUFTLENBQUNhLEVBQ1hiLEVBQUssU0FBU0EsRUFBSyxjQUFjYSxDQUFJLEVBQ3JDYixFQUFLLFFBQVFOLEdBQVdNLEVBQU1BLEVBQUssT0FBUWEsQ0FBSSxFQUMvQ0EsR0FBTWQsR0FBYUMsQ0FBSSxDQUM3QixFQUNJVixHQUFtQlUsR0FBUyxDQUM5QjNDLEdBQUkyQyxFQUFLLE9BQVNBLEVBQU1iLEdBQVFhLENBQUksRUFDcEN0QyxHQUFpQnNDLEVBQU0sRUFBSyxFQUM1QkUsRUFBWUYsRUFBTSxFQUFLLEVBQ3ZCQSxFQUFLLE9BQVMsSUFDaEIsRUFDSVksR0FBcUJaLEdBQVMsQ0FBQyxHQUFHQSxFQUFLLE9BQU8sRUFBRSxPQUNqRFMsR0FBUSxDQUFDQSxFQUFJLFVBQVlBLEVBQUksYUFBZUEsRUFBSSxZQUVuRCxFQUNJQyxHQUF1QkYsR0FBV0EsYUFBa0IsbUJBQXFCQSxFQUFPLGFBQWEsTUFBTSxJQUFNLFNBQ3pHZCxHQUFhLENBQUNNLEVBQU1QLEVBQU9vQixFQUFPLEtBQVUsQ0FDOUNsTCxFQUFLOEosRUFBTyxnQkFBaUJ4SixHQUFNK0osQ0FBSSxDQUFDLEVBQ3hDckssRUFBSzhKLEVBQU8sb0JBQXFCLE1BQU0sRUFDdkM5SixFQUFLOEosRUFBTyxnQkFBaUJ4SixHQUFNK0osQ0FBSSxDQUFDLEVBQ3hDckssRUFBSzhKLEVBQU8sZ0JBQWlCLEdBQUdQLElBQWlCMkIsQ0FBSSxFQUFFLEVBQ3ZEbEwsRUFBSzhKLEVBQU8sZUFBZ0IsS0FBSyxFQUNqQzlKLEVBQUs4SixFQUFPLE9BQVEsVUFBVSxDQUNoQyxFQUNJcUIsR0FBWUMsSUFBU0EsR0FBTyxLQUFPLE9BQVNBLEVBQUksWUFBVyxFQUFHLEtBQUksSUFBTyxHQUN6RWhCLEdBQWUsQ0FBQ0MsRUFBTWpFLElBQVUsQ0FDbEMsSUFBSXFCLEVBQ0osTUFBTXRILEVBQVFnTCxJQUFVMUQsRUFBTTRDLEVBQUssU0FBVyxLQUFPLE9BQVM1QyxFQUFJLEtBQUssRUFFdkUsR0FBSSxHQURlckIsR0FBUyxLQUFPLE9BQVNBLEVBQU0sUUFBVSxZQUFjaUUsRUFBSyxTQUFXbEssR0FDMUUsT0FDaEIsTUFBTWtMLEVBQVNoQixFQUFLLE9BQ2RPLEVBQVc1SyxFQUFLcUssRUFBTWhELEVBQW9CLElBQU0sT0FDaERpRSxFQUFXbEYsYUFBaUIsWUFBYyxDQUFDbUYsR0FBZ0JuRixDQUFLLEVBQ3RFaUUsRUFBSyxPQUFTLEdBQ2RBLEVBQUssT0FBU2xLLEVBQ2QsVUFBVzJLLEtBQU9ULEVBQUssUUFBUyxDQUM5QixNQUFNbUIsRUFBVSxDQUFDVixFQUFJLE1BQU9BLEVBQUksTUFBT0EsRUFBSSxJQUFJLEVBQUUsSUFBSUssRUFBUSxFQUM3REwsRUFBSSxPQUFTLENBQUNVLEVBQVEsS0FBTUosR0FBUUEsRUFBSSxTQUFTakwsQ0FBSyxDQUFDLEVBQ25EeUssR0FBWVUsR0FBWVAsR0FBb0JELENBQUcsSUFDakRBLEVBQUksU0FBV1UsRUFBUSxTQUFTckwsQ0FBSyxFQUMzQyxDQUNFa0ssRUFBSyxPQUFTZ0IsRUFDZCxNQUFNSSxFQUFVUixHQUFrQlosQ0FBSSxFQUN0QyxhQUFhakIsRUFBVSxFQUN2QkEsR0FBYSxXQUFXLElBQU0sQ0FDNUIsS0FBTSxDQUFFLE9BQUEzRCxDQUFRLEVBQUdnRyxFQUFRLE9BQU9WLEVBQW1CLEVBQy9DVyxFQUFZLEVBQUVyQyxHQUFjLEVBQUksSUFBUyxHQUN6Q3NDLEVBQVksR0FBRyxHQUFHdEIsRUFBSyxPQUFPNUUsSUFBVyxFQUFJLFdBQWEsUUFBUSxDQUFDLEdBQUcsUUFBUSxLQUFNLEdBQUdBLENBQU0sRUFBRSxDQUFDLEdBQ2xHNkQsSUFDRkEsRUFBSyxZQUFjLEdBQUcsQ0FBQzdELEdBQVU0RSxFQUFLLFVBQVUsS0FBTSxHQUFJc0IsQ0FBUyxHQUFHRCxDQUFTLEdBQ2xGLEVBQUUsR0FBRyxFQUNGekUsSUFDRndFLEVBQVEsSUFBSSxDQUFDWCxFQUFLdEwsRUFBT2lHLElBQVcsQ0FDbENxRixFQUFJLE1BQVEsR0FBR3RMLEVBQVEsQ0FBQyxJQUFJaUcsQ0FBTSxFQUN4QyxDQUFLLENBQ0wsRUFDSS9GLEdBQ0YsT0FBTyxlQUFlLGlCQUFpQixVQUFXLE9BQVEsQ0FDeEQsYUFBYyxHQUNkLFdBQVksR0FDWixLQUFNLENBQ0osT0FBT3dJLEdBQVEsSUFBSSxFQUFFLGVBQWVsSSxFQUFLLEtBQU0sTUFBTSxHQUFLLEVBQUUsQ0FDbEUsQ0FDQSxDQUFHLEVBQ0h3SSxHQUFlLE9BQU8sYUFBY2tCLEVBQW9CLEVBQ3hELElBQUlrQyxHQUFhLElBQVMsT0FBTyxHQUFHLEVBRWhDQyxHQUF1Qix3QkFJM0IsU0FBU04sR0FBZ0JuRixFQUFPLENBQzlCLElBQUlxQixFQUNKLE1BQU1xRSxFQUFVMUYsYUFBaUIsT0FBU0EsRUFBTSxPQUFTLFNBQVdBLEVBQU0sa0JBQWtCLG1CQUFxQixDQUFDQSxFQUFNLFdBQWFBLEVBQU0sWUFBY3lGLElBQ3pKLEdBQUlDLEVBQVMsQ0FDWCxNQUFNM0wsRUFBUWlHLEVBQU0sT0FBTyxNQUNyQjJGLEVBQVUsTUFBTSxPQUFPdEUsRUFBTXJCLEVBQU0sT0FBTyxPQUFTLEtBQU8sT0FBU3FCLEVBQUksVUFBWSxDQUFBLENBQUUsRUFBRSxLQUMxRnFELEdBQVFBLEVBQUksUUFBVTNLLEdBQVMsQ0FBQzRLLEdBQW9CRCxDQUFHLENBQ3pELEVBQ0QxRSxFQUFNLE9BQU8sTUFBUWpHLEVBQU0sTUFBTXlMLEVBQVUsRUFBRUcsRUFBVSxFQUFJLENBQUMsQ0FDaEUsQ0FDRSxPQUFPRCxDQUNULENDellBLE1BQU1FLEdBQVlqSSxFQUFPLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUNyQ2tJLEdBQW9CLHlCQUNwQkMsR0FBcUIsMEJBQ3JCQyxHQUFrQnBJLEVBQU8sV0FBVyxNQUFNLEdBQUcsRUFDN0NxSSxHQUFpQkQsR0FBZ0IsQ0FBQyxFQUV4QyxTQUFTbkgsR0FBZXFILEVBQW1DLENBQzFELFVBQVdDLEtBQVNELEVBQ25CLEdBQUlDLEVBQU0sWUFBYSxDQUN0QixNQUFNQyxFQUE2QixDQUFDLEVBQzlCQyxFQUFrQixDQUFDLEVBQ3pCLElBQUkxQyxFQUFpQyxLQUNqQzJDLEVBQXdDLEtBQ3hDQyxFQUFRLEdBRVosVUFBV3pNLEtBQU1xTSxFQUFNLHFCQUFxQixHQUFHLEVBQzFDck0sYUFBYyxpQkFBeUJzTSxFQUFBLEtBQUt0TSxDQUFFLEVBQ3pDQSxhQUFjeUosR0FBaUMrQyxFQUFBeE0sRUFDL0N1RCxHQUFZdkQsQ0FBRSxFQUFXNkosRUFBQTdKLEVBQ3pCQSxFQUFHLFVBQVUsU0FBU21NLEVBQWMsR0FHM0NNLEVBQUExTSxFQUFLQyxFQUFJLFlBQVksSUFBTSxXQUMzQixDQUFDQSxFQUFHLGFBQ0osQ0FBQ0EsRUFBRyxhQUNDdU0sRUFBQSxRQUFRbE0sRUFBTUwsQ0FBRSxDQUFDLEdBQ2JBLGFBQWMsd0JBQTRCLEtBQUtLLEVBQU1MLENBQUUsQ0FBQyxFQUdwRSxHQUFJNkosRUFBTyxDQUNWLFVBQVc2QyxLQUFTSixFQUFjSSxFQUFBLFFBQVVyTSxFQUFNd0osQ0FBSyxFQUN2RDhDLEdBQWU5QyxFQUFPMkMsQ0FBUSxFQUM5QkksR0FBYy9DLENBQUssRUFDbkJnRCxHQUFtQmhELENBQUssRUFDeEI5SixFQUFLOEosRUFBTyxtQkFBb0IwQyxFQUFNLEtBQUssR0FBRyxHQUFLLElBQUksRUFDdkR4TSxFQUFLOEosRUFBTyxlQUFnQixHQUFHLENBQUM0QyxDQUFLLEVBQUUsQ0FBQSxDQUN4QyxDQUVILENBR0EsU0FBU0ksR0FBbUJDLEVBQW1CLENBQzFDQSxhQUFvQixzQkFDZEEsRUFBQSxNQUFNLFlBQVkseUJBQTBCLE1BQU0sRUFDM0RBLEVBQVMsTUFBTSxZQUNkLHlCQUNBLEdBQUdBLEVBQVMsWUFBWSxJQUN6QixFQUVGLENBRUEsU0FBU0gsR0FDUjlDLEVBQ0FrRCxFQUNDLENBR0QsR0FGQWhOLEVBQUs4SixFQUFPLE9BQVFrRCxFQUFPMU0sRUFBTTBNLENBQUksRUFBSSxJQUFJLEVBRXpDLENBQUNBLEVBQU0sT0FDTmxELEVBQU0sYUFBYSxhQUFhLEdBQVE5SixFQUFBOEosRUFBTyxjQUFlLEVBQUUsRUFHL0QsTUFBQW1ELEVBQVEsT0FBTyxpQkFBaUJELENBQUksRUFDcENFLEVBQU9wRCxFQUFNLFFBQVEsUUFBUSxFQUM3QnFELEVBQVExSixHQUFnQndKLEVBQU0saUJBQWlCLGVBQWV4SixDQUFHLEVBQUUsRUFFekV6RCxFQUFLZ04sRUFBTSxpQkFBa0JHLEVBQUssaUJBQWlCLENBQUMsRUFDcERuTixFQUFLZ04sRUFBTSxtQkFBb0JHLEVBQUssbUJBQW1CLENBQUMsRUFFcERELElBQ0hsTixFQUFLa04sRUFBTSxnQkFBaUJDLEVBQUssWUFBWSxDQUFDLEVBQzlDbk4sRUFBS2tOLEVBQU0sZ0JBQWlCQyxFQUFLLFlBQVksQ0FBQyxFQUM5Q25OLEVBQUtrTixFQUFNLGdCQUFpQkMsRUFBSyxZQUFZLENBQUMsRUFDOUNuTixFQUFLa04sRUFBTSxhQUFjQyxFQUFLLFNBQVMsQ0FBQyxFQUN4Q25OLEVBQUtrTixFQUFNLGlCQUFrQkMsRUFBSyxhQUFhLENBQUMsRUFDaERuTixFQUFLa04sRUFBTSxrQkFBbUJDLEVBQUssY0FBYyxDQUFDLEVBRXBELENBRUEsU0FBU04sR0FBYy9DLEVBQXlCLFNBQy9DLE1BQU03SixFQUFLNkosR0FBQSxZQUFBQSxFQUFPLG1CQUNac0QsRUFBUW5OLEdBQU1ELEVBQUtDLEVBQUksWUFBWSxFQUV6QyxHQUFJQSxHQUFNbU4sRUFBTyxDQUNoQixNQUFNQyxFQUFZLE9BQU9ELENBQUssRUFBSXRELEVBQU0sTUFBTSxPQUN4Q3dELEVBQWNELEVBQVksRUFDMUJFLEVBQWN2TixFQUFLQyxFQUFJLFdBQVcsSUFBTSxTQUN4Q2dOLEVBQVEsT0FBTyxpQkFBaUJoTixHQUFNNkosQ0FBSyxFQUMzQzBELElBQU9qTSxFQUFBMEwsRUFBTSxpQkFBaUJoQixFQUFpQixJQUF4QyxZQUFBMUssRUFBMkMsTUFBTSxFQUFHLE1BQU8sR0FDbEVrTSxJQUNMakQsRUFBQXlDLEVBQU0saUJBQWlCZixFQUFrQixJQUF6QyxZQUFBMUIsRUFBNEMsTUFBTSxFQUFHLE1BQU8sR0FFN0QsR0FBSStDLElBQWdCRCxFQUFhLENBQ2hDdE4sRUFBS0MsRUFBSSxZQUFhcU4sRUFBYyxTQUFXLEtBQUssRUFDcEQsVUFBVzFGLEtBQU91RSxHQUFpQmxNLEVBQUcsVUFBVSxPQUFPMkgsRUFBSzBGLENBQVcsQ0FBQSxDQUVyRXJOLEVBQUEsYUFBZXFOLEVBQWNFLEVBQU9DLEdBQU8sUUFDN0MsS0FDQSxHQUFHLEtBQUssSUFBSUosQ0FBUyxDQUFDLEVBQ3ZCLENBQUEsQ0FFRixDQUdBLFNBQVNLLEdBQVksQ0FBRSxPQUFBdk0sR0FBaUIsQ0FDbkNxQyxHQUFZckMsQ0FBTSxJQUNyQjBMLEdBQWMxTCxDQUFNLEVBQ3BCMkwsR0FBbUIzTCxDQUFNLEVBVTNCLENBR0EsU0FBU3dNLEdBQWN2SCxFQUFjLFVBQy9Cb0UsR0FBQWpKLEVBQUE2RSxFQUFNLFNBQU4sWUFBQTdFLEVBQTBCLFVBQTFCLE1BQUFpSixFQUFBLEtBQUFqSixFQUFvQyxJQUFJeUssRUFBUyxLQUNyRDVGLEVBQU0sZUFBZSxDQUN2QixDQUVBOUMsRUFBUyxJQUFNLENBQ0hKLEVBQUEsU0FBUyxnQkFBaUI4SSxHQUFXaEgsRUFBYyxFQUMzRHBFLEVBQUEsU0FBVSxRQUFTOE0sR0FBYWpPLENBQVcsRUFDM0NtQixFQUFBLFNBQVUsVUFBVytNLEdBQWUsRUFBSSxDQUM1QyxDQUFDLEVDeklELE1BQU1DLEdBQWU3SixFQUFPLFNBQVMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUMzQ3FJLEdBQWlCckksRUFBTyxXQUFXLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFFckQsU0FBU2lCLEdBQWU2SSxFQUFzQyxDQUM3RCxVQUFXQyxLQUFZRCxFQUN0QixHQUFJQyxFQUFTLFlBQWEsQ0FDekIsTUFBTWpFLEVBQTZCLENBQUMsRUFDcEMsSUFBSWtFLEVBQThCLEtBRWxDLFVBQVc5TixLQUFNNk4sRUFBUyxxQkFBcUIsR0FBRyxFQUM3QzdOLEVBQUcsVUFBVSxTQUFTbU0sRUFBYyxFQUFHMkIsRUFBZXpOLEVBQU1MLENBQUUsRUFDekR1RCxHQUFZdkQsQ0FBRSxHQUFHNEosRUFBTyxLQUFLNUosQ0FBRSxFQUd6QyxVQUFXNkosS0FBU0QsRUFDZDdKLEVBQUE4SixFQUFPLG1CQUFvQmlFLENBQVksRUFDNUMvTixFQUFLOEosRUFBTyxlQUFnQixHQUFHLENBQUMsQ0FBQ2lFLENBQVksRUFBRSxDQUNoRCxDQUVILENBRUF6SyxFQUFTLElBQ1JKLEVBQVcsU0FBUyxnQkFBaUIwSyxHQUFjNUksRUFBYyxDQUNsRSxFQ3ZCQSxNQUFNZ0osR0FBV2pLLEVBQU8sS0FBSyxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBRXpDLFNBQVNpQixHQUFlLENBQUNpSixDQUFJLEVBQWtDLENBQzlELEdBQUlBLEdBQUEsTUFBQUEsRUFBTSxjQUFlQSxHQUFBLFlBQUFBLEVBQU0sNkJBQTZCLGNBQWUsQ0FDMUUsVUFBV0MsS0FBUSxTQUFTLEtBQUssaUJBQWlCLG1CQUFtQixFQUNwRUEsRUFBSyxhQUFhLE1BQU8sVUFBVSxFQUVwQyxNQUFNQyxFQUFNRixFQUFLLGtCQUNYRyxFQUFRSCxHQUFBLFlBQUFBLEVBQU0sYUFBYSxZQUMzQmhCLEVBQVEsT0FBTyxpQkFBaUJrQixDQUFHLEVBQ25DN0YsRUFBTzJFLEVBQU0saUJBQWlCLE9BQU8sRUFDckNvQixFQUFPcEIsRUFBTSxpQkFBaUIsbUJBQW1CLEVBQ2pEaUIsRUFBT0MsRUFBSSxVQUNmLFFBQVEsT0FBUSxHQUFHLEVBQ25CLFFBQVEsa0NBQW1DLEVBQUUsRUFDN0MsUUFBUSxPQUFRLHFDQUFxQzdGLENBQUksR0FBRyxFQUU5RCxTQUFTLEtBQUssWUFDYixPQUFPLE9BQU8sU0FBUyxjQUFjLE1BQU0sRUFBRyxDQUM3QyxLQUFNLHNCQUFzQixtQkFBbUIsMkVBQTJFOEYsRUFBUSxPQUFTQyxDQUFJLGdEQUFnRC9GLENBQUkseUVBQXlFOEYsRUFBUSxHQUFNLENBQUMscUVBQXFFRixDQUFJLFlBQVksQ0FBQyxHQUNqWCxJQUFLLE1BQ0wsQ0FBQSxDQUNGLENBQUEsQ0FFRixDQUVBNUssRUFBUyxJQUFNSixFQUFXLFNBQVMsZ0JBQWlCOEssR0FBVWhKLEVBQWMsQ0FBQyxFQzFCN0UsTUFBTXNKLEdBQWN2SyxFQUFPLFFBQVEsTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUMvQyxJQUFJd0ssR0FBZ0IsRUFFcEIsU0FBU0MsR0FBYSxDQUFFLE9BQVF2TyxFQUFJLFNBQUF3TyxHQUEyQyxPQUM5RSxHQUFJeE8sYUFBYyxhQUFlQSxFQUFHLFVBQVUsU0FBU3FPLEVBQVcsRUFBRyxDQUM5RCxNQUFBbE4sR0FBVUcsRUFBQXRCLEVBQUcsWUFBQSxJQUFILFlBQUFzQixFQUFpQyxjQUNoRCxtQkFBbUJ0QixFQUFHLEVBQUUsTUFHckJ3TyxJQUFhLFVBQ0NGLElBQUEsRUFDakJyTixFQUFlakIsRUFBSSxFQUFLLEdBQ2RtQixJQUNPbU4sSUFBQSxFQUNqQnJOLEVBQWVqQixFQUFJbUIsRUFBUXBCLEVBQUtDLEVBQUksZUFBZSxHQUFLLFFBQVEsRUFDakUsQ0FFRixDQUtBLFNBQVN5TyxHQUFnQixDQUFFLE9BQUF2TixHQUFpQixPQUMzQyxNQUFNd04sRUFDTEosTUFBa0JoTixFQUFBSixHQUFBLFlBQUFBLEVBQW9CLFVBQXBCLFlBQUFJLEVBQUEsS0FBQUosRUFBOEIsNEJBRWpELEdBQUl3TixFQUFPLENBQ1YsTUFBTW5PLEVBQVNSLEVBQUsyTyxFQUFPLHFCQUFxQixHQUFLLFNBQy9DekQsRUFBTzFLLElBQVcsU0FBV0EsSUFBVyxPQUFTLEdBQVEsUUFFekRvTyxHQURTLFNBQVMsZUFBZTVPLEVBQUsyTyxFQUFPLGVBQWUsR0FBSyxFQUFFLEdBQzlDQSxHQUFPLFFBQXFCLElBQUlMLEVBQVcsRUFBRSxFQUdwRU0sR0FBQSxNQUFBQSxFQUFTLGNBQWVBLEdBQUEsTUFBQUEsRUFBUyxnQkFDcENBLEVBQVEsY0FBYzFELENBQUksQ0FBQSxDQUU3QixDQUVBNUgsRUFBUyxJQUFNLENBQ1gxQyxFQUFBLFNBQVUsU0FBVTROLEdBQWMvTyxDQUFXLEVBQzdDbUIsRUFBQSxTQUFVLFFBQVM4TixFQUFlLENBQ3RDLENBQUMsRUN6Q0QsTUFBTUcsR0FBWTlLLEVBQU8sTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBRTNDLFNBQVNpQixHQUFlOEosRUFBNEMsQ0FDbkUsVUFBV0MsS0FBU0QsRUFBUSxDQUMzQixNQUFNRSxFQUFnQixDQUFDLEVBRWxCaFAsRUFBQStPLEVBQU8sT0FBUSxPQUFPLEVBQ3ZCQSxFQUFNLFNBQVMvTyxFQUFLK08sRUFBTSxRQUFTLE9BQVEsU0FBUyxFQUM3QyxVQUFBRSxJQUFTLENBQUNGLEVBQU0sTUFBT0EsRUFBTSxNQUFPLEdBQUdBLEVBQU0sT0FBTyxFQUM5RCxHQUFJRSxFQUFPLENBQ0xqUCxFQUFBaVAsRUFBTyxPQUFRLFVBQVUsRUFDeEIsTUFBQUMsRUFBVUQsRUFBTSxXQUFhLFFBRXhCLFVBQUFFLEtBQU9GLEVBQU0sS0FBTSxDQUN4QmpQLEVBQUFtUCxFQUFLLE9BQVEsS0FBSyxFQUNaLFVBQUFDLEtBQVFELEVBQUksTUFDbEJELElBQWNFLEVBQU0sVUFBV0osRUFBSUksRUFBSyxTQUFTLEdBQUssUUFBUSxFQUN6REosRUFBQSxLQUFLSSxFQUFLLFVBQVUsTUFBTSxFQUMvQkEsRUFBSyxXQUFhLEtBQVdwUCxFQUFBb1AsRUFBTSxPQUFRLE1BQU0sR0FFcERwUCxFQUFLb1AsRUFBTSxPQUFRRixFQUFVLFlBQWMsY0FBYyxFQUN6RGxQLEVBQUtvUCxFQUFNLFFBQVNGLEVBQVUsTUFBUSxLQUFLLEVBRTdDLENBQ0QsQ0FDRCxDQUVILENBRUE1TCxFQUFTLElBQU1KLEVBQVcsU0FBUyxnQkFBaUIyTCxHQUFXN0osRUFBYyxDQUFDLEVDdEI5RSxNQUFNcUssR0FBYyxtQkFDZEMsR0FBTSxTQUNOQyxHQUFhLGtCQUNiQyxHQUF3QiwwQkFDeEJDLEdBQWlCLElBQ2pCQyxFQUFVaFEsRUFDYixPQUFPLE9BQU8sU0FBUyxjQUFjLEtBQUssRUFBRyxDQUM3QyxVQUFXcUUsRUFBTyxTQUNsQixHQUFJLGVBQ0osUUFBUyxRQUNWLENBQUMsRUFDQSxLQUVILElBQUk0TCxFQUF5QixLQUN6QkMsR0FBWSxPQUFPLGtCQUNuQkMsR0FBbUQsRUFFdkQsU0FBU0MsR0FBVyxDQUFFLE9BQUEzTyxFQUFRLEtBQUFSLEVBQU0sSUFBQThDLEdBQWlDLENBQ2hFLEdBQUE5QyxJQUFTLFdBQWE4QyxJQUFRNkwsR0FBSyxPQUN2QyxNQUFNUyxFQUFPSCxHQUFZSCxHQUFpQixLQUFLLElBQUksRUFDbkQsYUFBYUksRUFBUSxFQUNWQSxHQUFBLFdBQ1ZHLEdBQ0EsS0FBSyxJQUFJRCxFQUFNLENBQUMsRUFDaEJ0TSxJQUFRNkwsR0FBTSxLQUFPbk8sQ0FDdEIsQ0FDRCxDQUdBLFNBQVM2TyxHQUFvQjdPLEVBQXdCLFdBSWhELEdBSEp5TyxHQUFZLEtBQUssSUFBSSxFQUdqQixDQUFDRixHQUFXdk8sSUFBV3VPLEVBQVMsT0FDL0JBLEdBQUEsTUFBQUEsRUFBUyxhQUFzQixTQUFBLEtBQUssT0FBT0EsQ0FBTyxFQUN2RCxJQUFJdE8sSUFBU0csRUFBQUosR0FBQSxZQUFBQSxFQUFRLFVBQVIsWUFBQUksRUFBQSxLQUFBSixFQUEyQixvQkFBcUIsS0FHN0QsR0FBSUMsSUFBV3VPLEVBQVEsT0FFdkIsTUFBTW5FLEVBQVdwSyxHQUFVcEIsRUFBS29CLEVBQVEsY0FBYyxHQUFNLEdBQ3REQyxFQUNKRCxHQUFVcEIsRUFBS29CLEVBQVEsdUJBQXVCLEtBQy9Db0osRUFBQSxPQUNFLGlCQUFpQnBKLEdBQVUsU0FBUyxJQUFJLEVBQ3hDLGlCQUFpQm9PLEVBQXFCLElBRnhDLFlBQUFoRixFQUdHLFNBQ0gsT0FHQSxDQUFDZ0IsR0FDREEsSUFBWSxTQUNaQSxJQUFZLFFBQ1puSyxJQUFhLFVBRVNELEVBQUEsTUFDbkJBLE1BQWdCLFlBQWNvSyxHQUVsQyxNQUFNeUUsRUFBV04sR0FBVTNQLEVBQUsyUCxFQUFRSixFQUFVLEtBQU1HLEdBQUEsWUFBQUEsRUFBUyxJQUMzRFEsSUFDSnpGLEVBQUFySixhQUFrQixZQUNoQkEsRUFBTyxVQUNQQSxHQUFBLFlBQUFBLEVBQVEsY0FGVixZQUFBcUosRUFHRSxVQUNIckosR0FBQSxZQUFBQSxFQUFRLGFBQWFtTyxPQUNyQm5PLEdBQUEsWUFBQUEsRUFBUSxhQUFhLGVBRWR1TyxHQUFBLE1BQUFBLEVBQUEsZ0JBQWdCTSxFQUFXVixHQUFhRixJQUNoRG5PLEVBQWV3TyxFQUFTLEVBQUssRUFFcEJDLEVBQUF2TyxFQUNMdU8sR0FBYTNQLEVBQUEyUCxFQUFRTyxFQUFXYixHQUFjRSxHQUFZRyxHQUFBLFlBQUFBLEVBQVMsRUFBRSxFQUNqRUEsRUFBQSxjQUFjLENBQUMsQ0FBQ3RPLENBQU0sRUFDZkYsRUFBQXdPLEVBQVN0TyxHQUFVLEdBQU9DLENBQVEsQ0FDbEQsQ0FFQWlDLEVBQVMsSUFBTSxDQUNYMUMsRUFBQSxTQUFVLGdDQUFpQ2tQLEdBQVlyUSxDQUFXLEVBQ2xFbUIsRUFBQSxPQUFRLFVBQVdrUCxHQUFZclEsQ0FBVyxFQUMxQ21CLEVBQUEsT0FBUSxPQUFRa1AsR0FBWXJRLENBQVcsQ0FDM0MsQ0FBQyxFQ3pGRCxJQUFJQyxHQUFhLE9BQU8sT0FBVyxLQUFlLE9BQU8sT0FBTyxTQUFhLEtBQWUsT0FBTyxPQUFPLFVBQWMsSUFDcEg2QixHQUNNNE8sSUFDVixRQUFRLE9BQU81TyxHQUFLLFVBQVUsZ0JBQWtCLEtBQU8sT0FBU0EsR0FBRyxXQUFhLFVBQVUsUUFBUSxFQUNsRyxJQUFJK0YsR0FBZ0IsMkNBQ2hCRSxHQUFlLE9BQU8sWUFBZ0IsSUFBYyxLQUFNLENBQzlELEVBQUksWUFDSixTQUFTeEgsRUFBS0MsRUFBSUMsRUFBTUMsRUFBTyxDQUM3QixJQUFJc0gsRUFDSixPQUFJdEgsSUFBVSxRQUFnQnNILEVBQU14SCxFQUFHLGFBQWFDLENBQUksSUFBTSxLQUFPdUgsRUFBTSxNQUN2RXRILElBQVUsS0FBTUYsRUFBRyxnQkFBZ0JDLENBQUksRUFDbENELEVBQUcsYUFBYUMsQ0FBSSxJQUFNQyxHQUFPRixFQUFHLGFBQWFDLEVBQU1DLENBQUssRUFDOUQsS0FDVCxDQUNBLElBQUlJLEdBQVMsQ0FBQ0MsRUFBUUMsRUFBU0MsSUFBUyxDQUN0QyxVQUFXQyxLQUFRRCxFQUFLLENBQUMsRUFBRSxNQUFNLEdBQUcsRUFDbENBLEVBQUssQ0FBQyxFQUFJQyxFQUNWLFFBQVEsVUFBVSxHQUFHSCxDQUFNLGVBQWUsRUFBRSxNQUFNQyxFQUFTQyxDQUFJLENBRW5FLEVBQ0lFLEdBQUssQ0FBQ0gsS0FBWUMsSUFBU0gsR0FBTyxNQUFPRSxFQUFTQyxDQUFJLEVBQ3REZ0gsR0FBTSxDQUFDakgsS0FBWUMsSUFBU0gsR0FBTyxTQUFVRSxFQUFTQyxDQUFJLEVBQzFEMFAsR0FBWWhLLEdBQVUsQ0FDeEIsTUFBTTBGLEVBQVUsUUFBUzFGLElBQVVBLEVBQU0sTUFBUSxLQUFPQSxFQUFNLE1BQVEsU0FDdEUsT0FBSTBGLEdBQVMxRixFQUFNLGVBQWdCLEVBQy9CMEYsR0FBVzFGLEVBQU0sa0JBQWtCLGFBQWFBLEVBQU0sT0FBTyxNQUFPLEVBQ2pFMEYsQ0FDVCxFQUNJNUQsR0FBV0MsR0FBUyxDQUN0QixJQUFJVixFQUNKLE1BQU1XLElBQVNYLEVBQU1VLEVBQUssY0FBZ0IsS0FBTyxPQUFTVixFQUFJLEtBQUtVLENBQUksSUFBTUEsRUFBSyxjQUNsRixPQUFPQyxhQUFnQixVQUFZQSxhQUFnQixXQUFhQSxFQUFPLFFBQ3pFLEVBQ0lQLEdBQWdCLENBQUNRLEVBQVNDLEVBQU1DLElBQVUsQ0FDNUMsTUFBTXRJLEVBQUssU0FBUyxjQUFjb0ksQ0FBTyxFQUV6QyxHQURJQyxJQUFNckksRUFBRyxZQUFjcUksR0FDdkJDLEVBQU8sU0FBVyxDQUFDOUUsRUFBSzRNLENBQUcsSUFBSyxPQUFPLFFBQVE5SCxDQUFLLEVBQUd2SSxFQUFLQyxFQUFJd0QsRUFBSzRNLENBQUcsRUFDNUUsT0FBT3BRLENBQ1QsRUFDSXVJLEdBQWlCLENBQ25CLE9BQVEsQ0FBQ3RJLEVBQU11SSxJQUFhLENBQUMvSSxJQUFjLE9BQU8sZUFBZSxJQUFJUSxDQUFJLEdBQUssT0FBTyxlQUFlLE9BQU9BLEVBQU11SSxDQUFRLENBQzNILEVBR0k2SCxHQUFzQixjQUFjOUksRUFBYSxDQUNuRCxhQUFjLENBQ1osTUFBTyxFQUVQLEtBQUssU0FBVyxLQUNoQixLQUFLLGFBQWEsQ0FBRSxLQUFNLE1BQU0sQ0FBRSxFQUFFLE9BQ2xDSyxHQUFjLE9BQVEsS0FBTSxDQUFFLEtBQU0sU0FBUyxDQUFFLEVBQy9DQSxHQUFjLE9BQVEsS0FBTSxDQUFFLEtBQU0saUJBQWlCLENBQUUsRUFDdkRBLEdBQ0UsUUFDQSxHQUFHUCxFQUFhO0FBQUE7QUFBQTtBQUFBO0FBQUEseUVBS3hCLENBQ0ssQ0FDTCxDQUVFLFdBQVcsb0JBQXFCLENBQzlCLE1BQU8sQ0FBQyxNQUFNLENBQ2xCLENBQ0UsbUJBQW9CLENBQ2xCLElBQUlHLEVBQ0osS0FBSyxVQUFZQSxFQUFNLEtBQUssYUFBZSxLQUFPLE9BQVNBLEVBQUksU0FBUyxDQUFDLEVBQ3pFN0csR0FBRyxLQUFLLFNBQVUsY0FBZSxJQUFJLEVBQ3JDQSxHQUFHLEtBQU0sZ0JBQWlCLElBQUksRUFDOUIsS0FBSyx5QkFBMEIsQ0FDbkMsQ0FDRSxzQkFBdUIsQ0FDakIsS0FBSyxVQUFVOEcsR0FBSSxLQUFLLFNBQVUsY0FBZSxJQUFJLEVBQ3pEQSxHQUFJLEtBQU0sZ0JBQWlCLElBQUksRUFDL0IsS0FBSyxTQUFXLElBQ3BCLENBQ0UseUJBQXlCWCxFQUFNbkQsRUFBTUMsRUFBTSxDQUN6QyxNQUFNME0sRUFBTyxrQkFBbUIsS0FBTyxjQUFnQixHQUNqRHJGLEVBQU8sS0FBSyxLQUNsQixVQUFXakwsS0FBTSxLQUFLLFNBQ2hCQSxFQUFHLFdBQWEsYUFBYUQsRUFBS0MsRUFBSSxnQkFBaUIsR0FBR2lMLENBQUksRUFBRSxFQUt0RSxHQUpJLEtBQUssV0FDUGxMLEVBQUssS0FBSyxTQUFVLGNBQWUsR0FBRyxDQUFDa0wsQ0FBSSxFQUFFLEVBQzdDLEtBQUssU0FBUyxPQUFTQSxFQUFPLEdBQVFxRixHQUVwQ3JGLEdBQVEsS0FBSyxLQUFNLENBQ3JCLE1BQU1zRixFQUFldEksR0FBUSxJQUFJLEVBQUUsaUJBQ2pDLEdBQUcsS0FBSyxRQUFRLFVBQVUsS0FBSyxJQUFJLElBQ3BDLEVBQ0QsVUFBV3VJLEtBQVlELEVBQ2pCQyxJQUFhLE9BQU1BLEVBQVMsS0FBTyxHQUMvQyxDQUNRMUosSUFBUyxRQUFVbkQsSUFBUyxPQUFVQyxJQUFTLE9BQ2pELEtBQUssY0FBYyxJQUFJLE1BQU0sUUFBUSxDQUFDLENBQzVDLENBQ0UsWUFBWXVDLEVBQU8sQ0FDakIsTUFBTXNLLEVBQVUsS0FBSyxjQUFjLG9CQUFvQixFQUNqREMsRUFBWUQsR0FBVyxLQUFPLE9BQVNBLEVBQVEsU0FBU3RLLEVBQU0sTUFBTSxFQUN0RUEsRUFBTSxtQkFDTkEsRUFBTSxPQUFTLGdCQUFlLEtBQUssS0FBTyxJQUMxQ3VLLEdBQWF2SyxFQUFNLE9BQVMsV0FBV2dLLEdBQVNoSyxDQUFLLEVBQ3JEdUssR0FBYXZLLEVBQU0sT0FBUyxVQUFTLEtBQUssS0FBTyxDQUFDLEtBQUssTUFDL0QsQ0FDRSxJQUFJLE1BQU8sQ0FDVCxPQUFPLEtBQUssYUFBYSxNQUFNLENBQ25DLENBQ0UsSUFBSSxLQUFLakcsRUFBTyxDQUNkSCxFQUFLLEtBQU0sT0FBUUcsRUFBUSxHQUFLLElBQUksQ0FDeEMsQ0FDRSxJQUFJLE1BQU8sQ0FDVCxPQUFPSCxFQUFLLEtBQU0sTUFBTSxHQUFLLEVBQ2pDLENBQ0UsSUFBSSxLQUFLRyxFQUFPLENBQ2RILEVBQUssS0FBTSxPQUFRRyxDQUFLLENBQzVCLENBQ0EsRUFDSXlRLEdBQXNCLGNBQWNwSixFQUFhLENBQ25ELG1CQUFvQixDQUNsQnhILEVBQUssS0FBTSxPQUFRLFFBQVEsRUFDM0IsS0FBSyxLQUFPLFVBQ1osS0FBSyxTQUFXLENBQ3BCLENBQ0EsRUFDQXdJLEdBQWUsT0FBTyxZQUFhOEgsRUFBbUIsRUFDdEQ5SCxHQUFlLE9BQU8sWUFBYW9JLEVBQW1CLEVDOUh0RCxJQUFJbFIsR0FBYSxPQUFPLE9BQVcsS0FBZSxPQUFPLE9BQU8sU0FBYSxLQUFlLE9BQU8sT0FBTyxVQUFjLElBQ3BIbVIsR0FBYW5SLElBQWMsV0FBVyxLQUFLLFVBQVUsU0FBUyxFQUM5RHVILEdBQVN2SCxJQUFjLG1CQUFtQixLQUFLLFVBQVUsU0FBUyxFQUNsRTZCLEdBQ011UCxJQUNWLFFBQVEsT0FBT3ZQLEdBQUssVUFBVSxnQkFBa0IsS0FBTyxPQUFTQSxHQUFHLFdBQWEsVUFBVSxRQUFRLEVBQ2xHLElBQUlpRyxHQUFlLE9BQU8sWUFBZ0IsSUFBYyxLQUFNLENBQzlELEVBQUksWUFDSixTQUFTeEgsRUFBS0MsRUFBSUMsRUFBTUMsRUFBTyxDQUM3QixJQUFJc0gsRUFDSixPQUFJdEgsSUFBVSxRQUFnQnNILEVBQU14SCxFQUFHLGFBQWFDLENBQUksSUFBTSxLQUFPdUgsRUFBTSxNQUN2RXRILElBQVUsS0FBTUYsRUFBRyxnQkFBZ0JDLENBQUksRUFDbENELEVBQUcsYUFBYUMsQ0FBSSxJQUFNQyxHQUFPRixFQUFHLGFBQWFDLEVBQU1DLENBQUssRUFDOUQsS0FDVCxDQUNBLElBQUkrSCxHQUFXQyxHQUFTLENBQ3RCLElBQUlWLEVBQ0osTUFBTVcsSUFBU1gsRUFBTVUsRUFBSyxjQUFnQixLQUFPLE9BQVNWLEVBQUksS0FBS1UsQ0FBSSxJQUFNQSxFQUFLLGNBQ2xGLE9BQU9DLGFBQWdCLFVBQVlBLGFBQWdCLFdBQWFBLEVBQU8sUUFDekUsRUFDSWhJLEdBQUssRUFDTEUsR0FBU0wsR0FDTkEsR0FDQUEsRUFBRyxLQUFJQSxFQUFHLEdBQUssSUFBSUEsRUFBRyxTQUFTLFlBQVcsQ0FBRSxJQUFJLEVBQUVHLElBQUksU0FBUyxFQUFFLENBQUMsSUFDaEVILEVBQUcsSUFGTSxHQUlkNEgsR0FBZ0IsQ0FBQ1EsRUFBU0MsRUFBTUMsSUFBVSxDQUM1QyxNQUFNdEksRUFBSyxTQUFTLGNBQWNvSSxDQUFPLEVBRXpDLEdBRElDLElBQU1ySSxFQUFHLFlBQWNxSSxHQUN2QkMsRUFBTyxTQUFXLENBQUM5RSxFQUFLNE0sQ0FBRyxJQUFLLE9BQU8sUUFBUTlILENBQUssRUFBR3ZJLEVBQUtDLEVBQUl3RCxFQUFLNE0sQ0FBRyxFQUM1RSxPQUFPcFEsQ0FDVCxFQUNJdUksR0FBaUIsQ0FDbkIsT0FBUSxDQUFDdEksRUFBTXVJLElBQWEsQ0FBQy9JLElBQWMsT0FBTyxlQUFlLElBQUlRLENBQUksR0FBSyxPQUFPLGVBQWUsT0FBT0EsRUFBTXVJLENBQVEsQ0FDM0gsRUFDSXNJLEdBQVk5USxHQUFPLENBQ3JCLElBQUl3SCxFQUNKLE1BQU1XLEVBQU9GLEdBQVFqSSxDQUFFLEVBQ2pCME0sRUFBUTNNLEVBQUtDLEVBQUksWUFBWSxHQUFLLEdBRXhDLE1BQU8sQ0FDTCxNQUZld0gsRUFBTXpILEVBQUtDLEVBQUksaUJBQWlCLElBQU0sS0FBTyxPQUFTd0gsRUFBSSxLQUFJLEVBQUcsTUFBTSxLQUFLLElBQU0sQ0FBRSxHQUV6RixJQUFLdUosR0FBUTVJLEdBQVEsS0FBTyxPQUFTQSxFQUFLLGNBQWMsUUFBUTRJLENBQUcsSUFBSSxDQUFDLEVBRWxGLEdBQUcsTUFBTSxLQUFLL1EsRUFBRyxRQUFVLENBQUUsQ0FBQSxDQUVqQyxFQUFJLE9BQU8sQ0FBQ2dSLEVBQUtDLElBQVEsQ0FDckIsSUFBSUMsRUFDSixPQUFPRixLQUFTRSxFQUFNRCxHQUFPLEtBQU8sT0FBU0EsRUFBSSxZQUFjLEtBQU8sT0FBU0MsRUFBSSxLQUFJLElBQU8sRUFDL0YsRUFBRXhFLENBQUssQ0FDVixFQUdJeUUsR0FBbUIsR0FDbkJDLEdBQXVCLGNBQWM3SixFQUFhLENBRXBELFdBQVcsb0JBQXFCLENBQzlCLE1BQU8sQ0FBQyxhQUFjLGtCQUFtQixRQUFTLEtBQUssQ0FDM0QsQ0FDRSxhQUFjLENBQ1osTUFBTyxFQUNQLEtBQUssYUFBYSxDQUFFLEtBQU0sTUFBTSxDQUFFLEVBQUUsT0FDbENLLEdBQWMsT0FBUSxLQUFNLENBQUUsT0FBUSxFQUFFLENBQUUsRUFFMUNBLEdBQ0UsUUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDBHQUtSLENBQ0ssQ0FDTCxDQUNFLG1CQUFvQixDQUNsQixLQUFLLHlCQUEwQixDQUNuQyxDQUNFLDBCQUEyQixDQUN6QixHQUFJdUosR0FBa0IsT0FDdEJBLEdBQW1CLEdBQ25CLE1BQU1FLEVBQVlySyxJQUFVNEosR0FDdEJVLEVBQWEsS0FBSyxJQUFJLEVBQUcsS0FBSyxNQUFNLEtBQUssU0FBVyxHQUFHLENBQUMsRUFDOUQsS0FBSyxNQUFNLFlBQVksZUFBZ0IsR0FBR0EsQ0FBVSxHQUFHLEVBQ3ZELElBQUk1RSxFQUFRb0UsR0FBUyxJQUFJLEVBRXpCLEdBRElPLElBQVczRSxFQUFRLEdBQUdBLEVBQU0sUUFBUSxRQUFTLEVBQUUsQ0FBQyxJQUFJNEUsQ0FBVSxLQUM5RFYsR0FBWSxVQUFXNVEsS0FBTSxLQUFLLE9BQVFELEVBQUtDLEVBQUksYUFBYzBNLENBQUssRUFDMUUzTSxFQUFLLEtBQU0sWUFBYSxHQUFHLEtBQUssV0FBYSxFQUFFLEVBQUUsRUFDakRBLEVBQUssS0FBTSxhQUFjMk0sRUFBTSxLQUFJLENBQUUsRUFDckMzTSxFQUFLLEtBQU0sa0JBQW1CLElBQUksRUFDbENBLEVBQUssS0FBTSxnQkFBaUIsS0FBSyxFQUNqQ0EsRUFBSyxLQUFNLGdCQUFpQixHQUFHLEVBQy9CQSxFQUFLLEtBQU0sZ0JBQWlCLEdBQUd1UixDQUFVLEVBQUUsRUFDM0N2UixFQUFLLEtBQU0sT0FBUXNSLEVBQVksTUFBUSxhQUFhLEVBQ3BERixHQUFtQixFQUN2QixDQUNFLElBQUksUUFBUyxDQUNYLE1BQU16RSxFQUFRLEtBQUssUUFBUSxrQkFBa0IsRUFDdkNxRSxFQUFNMVEsR0FBTSxJQUFJLEVBQ3RCLE9BQUlxTSxJQUFPQSxFQUFNLFFBQVVxRSxHQUNoQjlJLEdBQVEsSUFBSSxFQUFFLGlCQUN2QixjQUFjOEksQ0FBRyxJQUNsQixDQUVMLENBQ0UsSUFBSSxVQUFXLENBQ2IsT0FBTyxLQUFLLFFBQVUsS0FBTyxHQUFLLEtBQUssSUFBSSxLQUFLLE1BQVEsS0FBSyxJQUFLLENBQUMsQ0FDdkUsQ0FDRSxJQUFJLE9BQVEsQ0FDVixPQUFPUSxHQUFVLEtBQU0sT0FBTyxDQUNsQyxDQUNFLElBQUksTUFBTXJSLEVBQU8sQ0FDZnNSLEdBQVUsS0FBTSxRQUFTdFIsQ0FBSyxDQUNsQyxDQUNFLElBQUksS0FBTSxDQUNSLE9BQU9xUixHQUFVLEtBQU0sS0FBSyxHQUFLLENBQ3JDLENBQ0UsSUFBSSxJQUFJNVMsRUFBSyxDQUNYNlMsR0FBVSxLQUFNLE1BQU83UyxDQUFHLENBQzlCLENBQ0EsRUFFQXlTLEdBQXFCLGVBQWlCLEdBQ3RDLElBQUlLLEdBQWF2UixHQUFVLENBQUMsT0FBTyxNQUFNLE9BQU8sV0FBVyxHQUFHQSxDQUFLLEVBQUUsQ0FBQyxHQUFLLE9BQU8sU0FBUyxPQUFPQSxDQUFLLENBQUMsRUFDcEdxUixHQUFZLENBQUN2UixFQUFJd0QsSUFBUSxDQUMzQixNQUFNdEQsRUFBUUgsRUFBS0MsRUFBSXdELENBQUcsRUFDMUIsT0FBT2lPLEdBQVV2UixDQUFLLEVBQUksS0FBSyxJQUFJLEVBQUcsT0FBTyxXQUFXQSxDQUFLLENBQUMsRUFBSSxJQUNwRSxFQUNJc1IsR0FBWSxDQUFDeFIsRUFBSXdELEVBQUs0TSxJQUFRLENBQ2hDLEdBQUlBLElBQVEsTUFBUXFCLEdBQVVyQixDQUFHLEVBQUdyUSxFQUFLQyxFQUFJd0QsRUFBSyxHQUFHNE0sQ0FBRyxFQUFFLE1BQ3JELE9BQU0sSUFBSSxNQUFNLDhCQUE4QnJRLENBQUksT0FBT3FRLENBQUcsR0FBRyxDQUN0RSxFQUNBN0gsR0FBZSxPQUFPLGFBQWM2SSxFQUFvQixFQ2xJeEQsSUFBSTNSLEdBQWEsT0FBTyxPQUFXLEtBQWUsT0FBTyxPQUFPLFNBQWEsS0FBZSxPQUFPLE9BQU8sVUFBYyxJQUNwSHNILEdBQWF0SCxJQUFjLFdBQVcsS0FBSyxVQUFVLFNBQVMsRUFDOUQ2QixHQUNNb1EsSUFDVixRQUFRLE9BQU9wUSxHQUFLLFVBQVUsZ0JBQWtCLEtBQU8sT0FBU0EsR0FBRyxXQUFhLFVBQVUsUUFBUSxFQUNsRyxJQUFJNkYsR0FBa0IsR0FBR0osR0FBYSxPQUFTLE1BQU0sY0FDakRNLEdBQWdCLDJDQUNoQkUsR0FBZSxPQUFPLFlBQWdCLElBQWMsS0FBTSxDQUM5RCxFQUFJLFlBQ0osU0FBU3hILEVBQUtDLEVBQUlDLEVBQU1DLEVBQU8sQ0FDN0IsSUFBSXNILEVBQ0osT0FBSXRILElBQVUsUUFBZ0JzSCxFQUFNeEgsRUFBRyxhQUFhQyxDQUFJLElBQU0sS0FBT3VILEVBQU0sTUFDdkV0SCxJQUFVLEtBQU1GLEVBQUcsZ0JBQWdCQyxDQUFJLEVBQ2xDRCxFQUFHLGFBQWFDLENBQUksSUFBTUMsR0FBT0YsRUFBRyxhQUFhQyxFQUFNQyxDQUFLLEVBQzlELEtBQ1QsQ0FDQSxJQUFJSSxHQUFTLENBQUNDLEVBQVFDLEVBQVNDLElBQVMsQ0FDdEMsVUFBV0MsS0FBUUQsRUFBSyxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQ2xDQSxFQUFLLENBQUMsRUFBSUMsRUFDVixRQUFRLFVBQVUsR0FBR0gsQ0FBTSxlQUFlLEVBQUUsTUFBTUMsRUFBU0MsQ0FBSSxDQUVuRSxFQUNJRSxHQUFLLENBQUNILEtBQVlDLElBQVNILEdBQU8sTUFBT0UsRUFBU0MsQ0FBSSxFQUN0RGdILEdBQU0sQ0FBQ2pILEtBQVlDLElBQVNILEdBQU8sU0FBVUUsRUFBU0MsQ0FBSSxFQUMxRGlILEdBQWMsQ0FBQ2xILEVBQVNtSCxJQUFRbkgsRUFBUSxhQUFhLENBQUUsS0FBTSxNQUFRLENBQUEsRUFBRSxPQUN6RW9ILEdBQWMsTUFBTSxFQUVwQkEsR0FBYyxRQUFTRCxDQUFHLENBQzVCLEVBQ0lFLEdBQTRCLElBQUksUUFDaENDLEdBQW1CLENBQUN0SCxFQUFTdUgsSUFBWSxDQUMzQyxHQUFJQSxJQUFZLE9BQVEsT0FBT0YsR0FBVSxJQUFJckgsQ0FBTyxFQUNwRCxHQUFJLENBQ0ZxSCxHQUFVLElBQUlySCxDQUFPLEVBQUUsV0FBWSxFQUNuQ3FILEdBQVUsT0FBT3JILENBQU8sQ0FDekIsTUFBYSxDQUNoQixDQUNFLEdBQUl1SCxFQUFTLENBQ1gsTUFBTWhGLEVBQVcsSUFBSSxpQkFDbEJpRixHQUFXeEgsRUFBUSxZQUFZLENBQUUsS0FBTSxXQUFZLE9BQUF3SCxDQUFRLENBQUEsQ0FDN0QsRUFDRGpGLEVBQVMsUUFBUXZDLEVBQVN1SCxDQUFPLEVBQ2pDRixHQUFVLElBQUlySCxFQUFTdUMsQ0FBUSxDQUNuQyxDQUNBLEVBQ0lvTixHQUFZaEssR0FBVSxDQUN4QixNQUFNMEYsRUFBVSxRQUFTMUYsSUFBVUEsRUFBTSxNQUFRLEtBQU9BLEVBQU0sTUFBUSxTQUN0RSxPQUFJMEYsR0FBUzFGLEVBQU0sZUFBZ0IsRUFDL0IwRixHQUFXMUYsRUFBTSxrQkFBa0IsYUFBYUEsRUFBTSxPQUFPLE1BQU8sRUFDakUwRixDQUNULEVBQ0k1RCxHQUFXQyxHQUFTLENBQ3RCLElBQUlWLEVBQ0osTUFBTVcsSUFBU1gsRUFBTVUsRUFBSyxjQUFnQixLQUFPLE9BQVNWLEVBQUksS0FBS1UsQ0FBSSxJQUFNQSxFQUFLLGNBQ2xGLE9BQU9DLGFBQWdCLFVBQVlBLGFBQWdCLFdBQWFBLEVBQU8sUUFDekUsRUFDSWhJLEdBQUssRUFDTEUsR0FBU0wsR0FDTkEsR0FDQUEsRUFBRyxLQUFJQSxFQUFHLEdBQUssSUFBSUEsRUFBRyxTQUFTLFlBQVcsQ0FBRSxJQUFJLEVBQUVHLElBQUksU0FBUyxFQUFFLENBQUMsSUFDaEVILEVBQUcsSUFGTSxHQUlkNEgsR0FBZ0IsQ0FBQ1EsRUFBU0MsRUFBTUMsSUFBVSxDQUM1QyxNQUFNdEksRUFBSyxTQUFTLGNBQWNvSSxDQUFPLEVBQ3pDLE9BQUlDLElBQU1ySSxFQUFHLFlBQWNxSSxHQUNwQnJJLENBQ1QsRUFDSXVJLEdBQWlCLENBQ25CLE9BQVEsQ0FBQ3RJLEVBQU11SSxJQUFhLENBQUMvSSxJQUFjLE9BQU8sZUFBZSxJQUFJUSxDQUFJLEdBQUssT0FBTyxlQUFlLE9BQU9BLEVBQU11SSxDQUFRLENBQzNILEVBR0ltSixHQUFnQixnQkFDaEJDLEVBQWdCLGdCQUNoQkMsR0FBbUIsY0FBY3RLLEVBQWEsQ0FDaEQsYUFBYyxDQUNaLE1BQU8sRUFDUEcsR0FBWSxLQUFNTCxFQUFhLENBQ25DLENBQ0UsSUFBSSxTQUFVLENBQ1osT0FBT3lLLEdBQW1CLFlBQWEsSUFBSSxFQUFFLENBQUMsR0FBSyxJQUN2RCxDQUNFLElBQUksZUFBZ0IsQ0FDbEIsT0FBT0MsR0FBaUIsS0FBSyxJQUFJLENBQ3JDLENBQ0UsSUFBSSxjQUFjeFMsRUFBTyxDQUN2QnlTLEdBQVksS0FBSyxLQUFLelMsQ0FBSyxDQUFDLENBQ2hDLENBQ0UsSUFBSSxNQUFPLENBQ1QsT0FBT3VTLEdBQW1CLFFBQVMsSUFBSSxDQUMzQyxDQUNFLElBQUksUUFBUyxDQUNYLE9BQU9BLEdBQW1CLGFBQWMsSUFBSSxDQUNoRCxDQUNBLEVBQ0lHLEdBQXNCLGNBQWMxSyxFQUFhLENBQ25ELGFBQWMsQ0FDWixNQUFPLEVBQ1BHLEdBQVksS0FBTUwsRUFBYSxDQUNuQyxDQUNFLG1CQUFvQixDQUNsQnRILEVBQUssS0FBTSxPQUFRLFNBQVMsRUFDNUJZLEdBQUcsS0FBTSxnQkFBaUIsSUFBSSxFQUM5Qm1ILEdBQWlCLEtBQU0sQ0FBRSxVQUFXLEVBQUksQ0FBRSxFQUN0QyxLQUFLLEtBQUssUUFBUSxLQUFLLFlBQWEsQ0FDNUMsQ0FDRSxzQkFBdUIsQ0FDckJMLEdBQUksS0FBTSxnQkFBaUIsSUFBSSxFQUMvQkssR0FBaUIsS0FBTSxFQUFLLENBQ2hDLENBQ0UsWUFBWTNCLEVBQU8sQ0FDakIsR0FBSSxDQUFDQSxHQUFTQSxFQUFNLE9BQVMsV0FBWSxDQUN2QyxNQUFNK0wsRUFBTSxLQUFLLEtBQUssS0FBSyxJQUFJLEtBQUssY0FBZSxDQUFDLENBQUMsRUFDckQsT0FBT0EsR0FBTyxLQUFPLE9BQVNBLEVBQUksYUFBYU4sRUFBZSxNQUFNLENBQzFFLENBQ0ksS0FBTSxDQUFFLElBQUFwTyxDQUFHLEVBQUsyQyxFQUNWZ00sRUFBTyxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQ3BCeE8sRUFBT3dPLEVBQUssVUFBV0QsR0FBUUEsRUFBSSxTQUFTL0wsRUFBTSxNQUFNLENBQUMsRUFDL0QsSUFBSXZDLEVBQU9ELEVBQ1gsR0FBSSxFQUFBd0MsRUFBTSxrQkFBb0J4QyxJQUFTLE1BQ25Dd0MsRUFBTSxPQUFTLFNBQVM2TCxHQUFZRyxFQUFLeE8sQ0FBSSxDQUFDLEVBQzlDd0MsRUFBTSxPQUFTLFdBQWEsQ0FBQ2dLLEdBQVNoSyxDQUFLLEdBQUcsQ0FDaEQsR0FBSTNDLElBQVEsYUFBZUEsSUFBUSxhQUNqQ0ksR0FBUUQsRUFBTyxHQUFLd08sRUFBSyxlQUNsQjNPLElBQVEsV0FBYUEsSUFBUSxZQUNwQ0ksR0FBUUQsR0FBUXdPLEVBQUssUUFBVSxVQUN4QjNPLElBQVEsTUFBT0ksRUFBT3VPLEVBQUssT0FBUyxVQUNwQzNPLElBQVEsT0FBUUksRUFBTyxVQUN2QkosSUFBUSxNQUFPSSxFQUFPbU8sR0FBaUJJLENBQUksTUFDL0MsUUFDTCxXQUFXLElBQU0sQ0FDZkEsRUFBS3hPLENBQUksRUFBRSxTQUFXLEdBQ3RCd08sRUFBS3ZPLENBQUksRUFBRSxTQUFXLENBQzlCLENBQU8sRUFDR0osSUFBUSxRQUNWMkMsRUFBTSxlQUFnQixFQUN0QmdNLEVBQUt2TyxDQUFJLEVBQUUsTUFBTyxFQUUxQixDQUNBLENBQ0UsSUFBSSxhQUFjLENBQ2hCLE9BQU8sS0FBSyxRQUFRLFFBQVEsQ0FDaEMsQ0FDRSxJQUFJLE1BQU8sQ0FDVCxPQUFPLEtBQUssaUJBQWlCLE9BQU8sQ0FDeEMsQ0FDRSxJQUFJLGVBQWdCLENBQ2xCLE9BQU9tTyxHQUFpQixLQUFLLElBQUksQ0FDckMsQ0FDRSxJQUFJLGNBQWN4UyxFQUFPLENBQ3ZCeVMsR0FBWSxLQUFLLEtBQUt6UyxDQUFLLENBQUMsQ0FDaEMsQ0FDQSxFQUNJNFIsR0FBbUIsR0FDbkJpQixHQUFrQixjQUFjN0ssRUFBYSxDQUUvQyxXQUFXLG9CQUFxQixDQUM5QixNQUFPLENBQUMsS0FBTXFLLEVBQWVELEVBQWEsQ0FDOUMsQ0FDRSxhQUFjLENBQ1osTUFBTyxFQUNQakssR0FDRSxLQUNBLGtFQUNELENBQ0wsQ0FDRSxtQkFBb0IsQ0FDbEIzSCxFQUFLLEtBQU0sT0FBUSxLQUFLLEVBQ3hCLEtBQUssU0FBVyxLQUFLLFNBQVcsRUFBSSxFQUN4QyxDQUNFLDBCQUEyQixDQUN6QixHQUFJLENBQUNvUixJQUFvQixLQUFLLFVBQVksS0FBSyxRQUFTLENBQ3REQSxHQUFtQixHQUNuQixNQUFNZ0IsRUFBTyxDQUFDLEdBQUcsS0FBSyxRQUFRLGlCQUFpQixPQUFPLENBQUMsRUFDakRFLEVBQVNQLEdBQW1CLGFBQWMsS0FBSyxhQUFlLElBQUksRUFDbEVRLEVBQVlDLEdBQVMsS0FBTUYsRUFBT0YsRUFBSyxRQUFRLElBQUksQ0FBQyxDQUFDLEVBQ3ZERyxHQUFXdlMsRUFBS3VTLEVBQVduTCxHQUFpQjlHLEdBQU0sSUFBSSxDQUFDLEVBQzNEOFIsRUFBSyxRQUFRLENBQUNELEVBQUszUyxJQUFVLENBQzNCLE1BQU1pVCxFQUFRRCxHQUFTTCxFQUFLRyxFQUFPOVMsQ0FBSyxDQUFDLEVBQ3pDMlMsRUFBSSxTQUFXQSxJQUFRLEtBQU8sRUFBSSxHQUNsQ25TLEVBQUttUyxFQUFLTixFQUFlLEdBQUdNLElBQVEsSUFBSSxFQUFFLEVBQ3RDTSxJQUFPQSxFQUFNLE9BQVNBLElBQVVGLEdBQ2hDRSxHQUFPelMsRUFBS21TLEVBQUtQLEdBQWVhLEVBQU0sRUFBRSxDQUNwRCxDQUFPLEVBQ0RyQixHQUFtQixFQUN6QixDQUNBLENBQ0UsSUFBSSxhQUFjLENBQ2hCLE9BQU8sS0FBSyxRQUFRLFFBQVEsQ0FDaEMsQ0FDRSxJQUFJLFNBQVUsQ0FDWixNQUFNc0IsRUFBVSxLQUFLLGNBQ3JCLE9BQVFBLEdBQVcsS0FBTyxPQUFTQSxFQUFRLFlBQWMsWUFBY0EsRUFBVSxJQUNyRixDQUNFLElBQUksVUFBVyxDQUNiLE9BQU8xUyxFQUFLLEtBQU02UixDQUFhLElBQU0sTUFDekMsQ0FDRSxJQUFJLFNBQVMxUixFQUFPLENBQ2xCSCxFQUFLLEtBQU02UixFQUFlLEdBQUcsQ0FBQyxDQUFDMVIsQ0FBSyxFQUFFLENBQzFDLENBRUUsSUFBSSxPQUFRLENBQ1YsTUFBTXdTLEVBQVUsS0FBSyxRQUNyQixPQUFPQSxFQUFVLENBQUMsR0FBR0EsRUFBUSxpQkFBaUIsT0FBTyxDQUFDLEVBQUUsUUFBUSxJQUFJLEVBQUksQ0FDNUUsQ0FDRSxJQUFJLE9BQVEsQ0FDVixPQUFPSCxHQUFTLElBQUksQ0FDeEIsQ0FDQSxFQUNJSSxHQUF1QixjQUFjcEwsRUFBYSxDQUVwRCxXQUFXLG9CQUFxQixDQUM5QixNQUFPLENBQUMsUUFBUSxDQUNwQixDQUNFLGFBQWMsQ0FDWixNQUFPLEVBQ1BHLEdBQVksS0FBTUwsRUFBYSxDQUNuQyxDQUNFLG1CQUFvQixDQUNsQnRILEVBQUssS0FBTSxPQUFRLFVBQVUsRUFDN0IsS0FBSyxPQUFTZ1MsR0FBaUIsS0FBSyxJQUFJLElBQU0sR0FDOUMsS0FBSyx5QkFBMEIsQ0FDbkMsQ0FDRSwwQkFBMkIsQ0FDckIsS0FBSyxRQUFVYSxHQUFZLEtBQUssVUFBVSxFQUM1QzdTLEVBQUssS0FBTSxXQUFZLElBQUksRUFDeEIsS0FBSyxTQUFXLENBQ3pCLENBQ0UsSUFBSSxhQUFjLENBQ2hCLE9BQU8sS0FBSyxRQUFRLFFBQVEsQ0FDaEMsQ0FDRSxJQUFJLE1BQU8sQ0FDVCxNQUFNNEgsRUFBTSxTQUFTZ0ssRUFBYSxLQUFLLEtBQUssRUFBRSxLQUM5QyxPQUFPMUosR0FBUSxJQUFJLEVBQUUsaUJBQWlCTixDQUFHLENBQzdDLENBQ0EsRUFDSW1LLEdBQXFCLENBQUNlLEVBQUt6SSxJQUFTQSxFQUFLLGlCQUFpQixHQUFHeUksQ0FBRywwQkFBMEJBLENBQUcsR0FBRyxFQUNoR04sR0FBVyxDQUFDTCxFQUFLTSxJQUFVLENBQzdCLE1BQU16QixFQUFNaFIsRUFBS21TLEVBQUtQLEVBQWEsR0FBS3RSLEdBQU1tUyxDQUFLLEVBQzdDeFMsRUFBS2lJLEdBQVFpSyxDQUFHLEVBQUUsZUFBZW5CLENBQUcsRUFDMUMsT0FBUS9RLEdBQU0sS0FBTyxPQUFTQSxFQUFHLFlBQWMsYUFBZUEsRUFBSyxJQUNyRSxFQUNJK1IsR0FBb0JJLEdBQVMsQ0FBQyxHQUFHQSxDQUFJLEVBQUUsVUFBV0QsR0FBUW5TLEVBQUttUyxFQUFLTixDQUFhLElBQU0sTUFBTSxFQUM3RkksR0FBZUUsR0FBUUEsR0FBT25TLEVBQUttUyxFQUFLLGdCQUFpQixNQUFNLEVBQy9EVSxHQUFlNVMsR0FBT0EsYUFBYyxTQUFXLENBQUNBLEVBQUcsUUFBUSwyQkFBMkIsR0FBS0EsRUFBRyxRQUNoRyxpSEFDRixFQUNBdUksR0FBZSxPQUFPLFNBQVVzSixFQUFnQixFQUNoRHRKLEdBQWUsT0FBTyxZQUFhMEosRUFBbUIsRUFDdEQxSixHQUFlLE9BQU8sUUFBUzZKLEVBQWUsRUFDOUM3SixHQUFlLE9BQU8sYUFBY29LLEVBQW9CLEVDM1B4RCxJQUFJdE0sR0FBWSxPQUFPLGVBQ25CQyxHQUFzQixPQUFPLHNCQUM3QkMsR0FBZSxPQUFPLFVBQVUsZUFDaENDLEdBQWUsT0FBTyxVQUFVLHFCQUNoQ0MsR0FBa0IsQ0FBQ0MsRUFBS2xELEVBQUt0RCxJQUFVc0QsS0FBT2tELEVBQU1MLEdBQVVLLEVBQUtsRCxFQUFLLENBQUUsV0FBWSxHQUFNLGFBQWMsR0FBTSxTQUFVLEdBQU0sTUFBQXRELENBQUssQ0FBRSxFQUFJd0csRUFBSWxELENBQUcsRUFBSXRELEVBQ3RKeUcsR0FBaUIsQ0FBQ0MsRUFBR0MsSUFBTSxDQUM3QixRQUFTQyxLQUFRRCxJQUFNQSxFQUFJLENBQUEsR0FDckJOLEdBQWEsS0FBS00sRUFBR0MsQ0FBSSxHQUMzQkwsR0FBZ0JHLEVBQUdFLEVBQU1ELEVBQUVDLENBQUksQ0FBQyxFQUNwQyxHQUFJUixHQUNGLFFBQVNRLEtBQVFSLEdBQW9CTyxDQUFDLEVBQ2hDTCxHQUFhLEtBQUtLLEVBQUdDLENBQUksR0FDM0JMLEdBQWdCRyxFQUFHRSxFQUFNRCxFQUFFQyxDQUFJLENBQUMsRUFFdEMsT0FBT0YsQ0FDVCxFQUdJbkgsRUFBYSxPQUFPLE9BQVcsS0FBZSxPQUFPLE9BQU8sU0FBYSxLQUFlLE9BQU8sT0FBTyxVQUFjLElBQ3BIc0gsR0FBYXRILEdBQWMsV0FBVyxLQUFLLFVBQVUsU0FBUyxFQUM5RG1SLEdBQWFuUixHQUFjLFdBQVcsS0FBSyxVQUFVLFNBQVMsRUFDOUR1SCxHQUFTdkgsR0FBYyxtQkFBbUIsS0FBSyxVQUFVLFNBQVMsRUFDbEV3SCxHQUFZeEgsR0FBYyxpQ0FBaUMsS0FBSyxVQUFVLFNBQVMsRUFDbkY2QixHQUNBd1IsR0FBU3JULEdBQ2IsUUFBUSxPQUFPNkIsR0FBSyxVQUFVLGdCQUFrQixLQUFPLE9BQVNBLEdBQUcsV0FBYSxVQUFVLFFBQVEsRUFDOUY2RixHQUFrQixHQUFHSixHQUFhLE9BQVMsTUFBTSxjQUNqREssR0FBdUIsR0FBR0gsR0FBWSxPQUFTLE1BQU0sbUJBQ3JESSxHQUFnQiwyQ0FDaEJDLEdBQWdCLCtGQUNoQkMsR0FBZSxPQUFPLFlBQWdCLElBQWMsS0FBTSxDQUM5RCxFQUFJLFlBQ0osU0FBU3hILEVBQUtDLEVBQUlDLEVBQU1DLEVBQU8sQ0FDN0IsSUFBSXNILEVBQ0osT0FBSXRILElBQVUsUUFBZ0JzSCxFQUFNeEgsRUFBRyxhQUFhQyxDQUFJLElBQU0sS0FBT3VILEVBQU0sTUFDdkV0SCxJQUFVLEtBQU1GLEVBQUcsZ0JBQWdCQyxDQUFJLEVBQ2xDRCxFQUFHLGFBQWFDLENBQUksSUFBTUMsR0FBT0YsRUFBRyxhQUFhQyxFQUFNQyxDQUFLLEVBQzlELEtBQ1QsQ0FDQSxJQUFJSSxHQUFTLENBQUNDLEVBQVFDLEVBQVNDLElBQVMsQ0FDdEMsVUFBV0MsS0FBUUQsRUFBSyxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQ2xDQSxFQUFLLENBQUMsRUFBSUMsRUFDVixRQUFRLFVBQVUsR0FBR0gsQ0FBTSxlQUFlLEVBQUUsTUFBTUMsRUFBU0MsQ0FBSSxDQUVuRSxFQUNJRSxFQUFLLENBQUNILEtBQVlDLElBQVNILEdBQU8sTUFBT0UsRUFBU0MsQ0FBSSxFQUN0RGdILEVBQU0sQ0FBQ2pILEtBQVlDLElBQVNILEdBQU8sU0FBVUUsRUFBU0MsQ0FBSSxFQUMxRGlILEdBQWMsQ0FBQ2xILEVBQVNtSCxJQUFRbkgsRUFBUSxhQUFhLENBQUUsS0FBTSxNQUFRLENBQUEsRUFBRSxPQUN6RW9ILEVBQWMsTUFBTSxFQUVwQkEsRUFBYyxRQUFTRCxDQUFHLENBQzVCLEVBQ0lFLEdBQTRCLElBQUksUUFDaENDLEdBQW1CLENBQUN0SCxFQUFTdUgsSUFBWSxDQUMzQyxHQUFJQSxJQUFZLE9BQVEsT0FBT0YsR0FBVSxJQUFJckgsQ0FBTyxFQUNwRCxHQUFJLENBQ0ZxSCxHQUFVLElBQUlySCxDQUFPLEVBQUUsV0FBWSxFQUNuQ3FILEdBQVUsT0FBT3JILENBQU8sQ0FDekIsTUFBYSxDQUNoQixDQUNFLEdBQUl1SCxFQUFTLENBQ1gsTUFBTWhGLEVBQVcsSUFBSSxpQkFDbEJpRixHQUFXeEgsRUFBUSxZQUFZLENBQUUsS0FBTSxXQUFZLE9BQUF3SCxDQUFRLENBQUEsQ0FDN0QsRUFDRGpGLEVBQVMsUUFBUXZDLEVBQVN1SCxDQUFPLEVBQ2pDRixHQUFVLElBQUlySCxFQUFTdUMsQ0FBUSxDQUNuQyxDQUNBLEVBQ0lvTixHQUFZaEssR0FBVSxDQUN4QixNQUFNMEYsRUFBVSxRQUFTMUYsSUFBVUEsRUFBTSxNQUFRLEtBQU9BLEVBQU0sTUFBUSxTQUN0RSxPQUFJMEYsR0FBUzFGLEVBQU0sZUFBZ0IsRUFDL0IwRixHQUFXMUYsRUFBTSxrQkFBa0IsYUFBYUEsRUFBTSxPQUFPLE1BQU8sRUFDakUwRixDQUNULEVBQ0k1RCxHQUFXQyxHQUFTLENBQ3RCLElBQUlWLEVBQ0osTUFBTVcsSUFBU1gsRUFBTVUsRUFBSyxjQUFnQixLQUFPLE9BQVNWLEVBQUksS0FBS1UsQ0FBSSxJQUFNQSxFQUFLLGNBQ2xGLE9BQU9DLGFBQWdCLFVBQVlBLGFBQWdCLFdBQWFBLEVBQU8sUUFDekUsRUFDSWhJLEdBQUssRUFDTEUsR0FBU0wsR0FDTkEsR0FDQUEsRUFBRyxLQUFJQSxFQUFHLEdBQUssSUFBSUEsRUFBRyxTQUFTLFlBQVcsQ0FBRSxJQUFJLEVBQUVHLElBQUksU0FBUyxFQUFFLENBQUMsSUFDaEVILEVBQUcsSUFGTSxHQUlkNEgsRUFBZ0IsQ0FBQ1EsRUFBU0MsRUFBTUMsSUFBVSxDQUM1QyxNQUFNdEksRUFBSyxTQUFTLGNBQWNvSSxDQUFPLEVBRXpDLEdBRElDLElBQU1ySSxFQUFHLFlBQWNxSSxHQUN2QkMsRUFBTyxTQUFXLENBQUM5RSxFQUFLNE0sQ0FBRyxJQUFLLE9BQU8sUUFBUTlILENBQUssRUFBR3ZJLEVBQUtDLEVBQUl3RCxFQUFLNE0sQ0FBRyxFQUM1RSxPQUFPcFEsQ0FDVCxFQUNJdUksR0FBaUIsQ0FDbkIsT0FBUSxDQUFDdEksRUFBTXVJLElBQWEsQ0FBQy9JLEdBQWMsT0FBTyxlQUFlLElBQUlRLENBQUksR0FBSyxPQUFPLGVBQWUsT0FBT0EsRUFBTXVJLENBQVEsQ0FDM0gsRUFDSUMsR0FBa0JDLEdBQVMsQ0FDN0IsTUFBTUMsRUFBT2YsRUFBYyxLQUFLLEVBQ2hDLE9BQUFlLEVBQUssTUFBTSxRQUFVLDhEQUNyQjVJLEVBQUs0SSxFQUFNLFlBQWFELENBQUksRUFDckJDLENBQ1QsRUFDQSxTQUFTQyxHQUFlQyxFQUFPL0IsRUFBTTVHLEVBQU8sQ0FDMUMsR0FBSSxDQUFDNEcsRUFBTSxPQUFPLE9BQU8sS0FBSytCLENBQUssRUFBRSxJQUFLQyxHQUFTLFdBQVdBLENBQUksRUFBRSxFQUNwRSxNQUFNdEYsR0FBT3NELEdBQVEsS0FBTyxPQUFTQSxFQUFLLFdBQVcsVUFBVSxJQUFNQSxFQUFLLE1BQU0sQ0FBQyxFQUNqRixPQUFJdEQsR0FBT3RELEdBQVMySSxFQUFNckYsQ0FBRyxJQUFHcUYsRUFBTXJGLENBQUcsRUFBSXRELEdBQ3RDLENBQUUsQ0FDWCxDQUdBLElBQUk2SSxHQUFXLFdBQ1hDLEVBQVcsV0FDWEMsR0FBcUIsY0FBYzFCLEVBQWEsQ0FFbEQsV0FBVyxvQkFBcUIsQ0FDOUIsTUFBTyxDQUFDd0IsR0FBVUMsQ0FBUSxDQUM5QixDQUNFLGFBQWMsQ0FDWixNQUFPLEVBQ1B0QixHQUNFLEtBQ0EsR0FBR0wsRUFBYSxpQkFBaUJDLEVBQWEsMkJBQy9DLENBQ0wsQ0FDRSxtQkFBb0IsQ0FDYk4sS0FBUSxLQUFLLFNBQVcsSUFDeEJqSCxFQUFLLEtBQU0sTUFBTSxHQUFHQSxFQUFLLEtBQU0sT0FBUSxRQUFRLEVBQ3BELEtBQUsseUJBQTBCLENBQ25DLENBQ0UsMEJBQTJCLENBQ3pCQSxFQUFLLEtBQU0sZ0JBQWlCLEdBQUcsS0FBSyxRQUFRLEVBQUUsRUFDOUNBLEVBQUssS0FBTSxnQkFBaUIsR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUNsRCxDQUVFLElBQUksaUJBQWtCLENBQ3BCLE9BQU8sS0FBS2lKLENBQVEsQ0FDeEIsQ0FDRSxJQUFJLGdCQUFnQjlJLEVBQU8sQ0FDekIsS0FBSzhJLENBQVEsRUFBSTlJLENBQ3JCLENBQ0UsSUFBSSxVQUFXLENBQ2IsT0FBT0gsRUFBSyxLQUFNZ0osRUFBUSxJQUFNLElBQ3BDLENBQ0UsSUFBSSxTQUFTN0ksRUFBTyxDQUNsQkgsRUFBSyxLQUFNZ0osR0FBVTdJLEVBQVEsR0FBSyxJQUFJLENBQzFDLENBRUUsSUFBSSxNQUFPLENBQ1QsT0FBTyxLQUFLLFFBQVEsTUFBTSxDQUM5QixDQUVFLElBQUksT0FBUSxDQUNWLElBQUlzSCxFQUNKLE1BQU1PLEdBQVdQLEVBQU0sS0FBSyxRQUFRLFlBQVksSUFBTSxLQUFPLE9BQVNBLEVBQUkscUJBQXFCLFVBQVUsRUFDekcsT0FBTyxNQUFNLEtBQUtPLEdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLElBQUksQ0FDckQsQ0FFRSxJQUFJLE9BQVEsQ0FDVixPQUFPaEksRUFBSyxLQUFNLE9BQU8sR0FBSyxLQUFLLElBQ3ZDLENBQ0UsSUFBSSxNQUFNRyxFQUFPLENBQ2ZILEVBQUssS0FBTSxRQUFTRyxDQUFLLENBQzdCLENBQ0UsSUFBSSxVQUFXLENBQ2IsT0FBT0gsRUFBSyxLQUFNaUosQ0FBUSxJQUFNLElBQ3BDLENBQ0UsSUFBSSxTQUFTOUksRUFBTyxDQUNsQkgsRUFBSyxLQUFNaUosRUFBVTlJLEVBQVEsR0FBSyxJQUFJLENBQzFDLENBRUUsSUFBSSxNQUFPLENBQ1QsSUFBSXNILEVBQ0osUUFBU0EsRUFBTSxLQUFLLGNBQWdCLEtBQU8sT0FBU0EsRUFBSSxLQUFJLElBQU8sRUFDdkUsQ0FDRSxJQUFJLEtBQUthLEVBQU0sQ0FDYixLQUFLLFlBQWNBLENBQ3ZCLENBRUUsSUFBSSxPQUFRLENBQ1YsT0FBT3RJLEVBQUssS0FBTSxPQUFPLEdBQUssS0FBSyxJQUN2QyxDQUNFLElBQUksTUFBTUcsRUFBTyxDQUNmSCxFQUFLLEtBQU0sUUFBU0csQ0FBSyxDQUM3QixDQUNBLEVBQ0FxSSxHQUFlLE9BQU8sV0FBWVUsRUFBa0IsRUFHcEQsSUFBSUMsR0FBVyxHQUNYQyxHQUNBQyxHQUFjLEVBQ2RDLEVBQ0FDLEdBQWdCckMsSUFBYSxDQUFDRCxHQUM5QnVDLEdBQVMsaURBQ1RDLEdBQVEsQ0FDVixTQUFVLFNBQ1YsT0FBUSxTQUNWLEVBQ0lDLEdBQXVCLGNBQWNsQyxFQUFhLENBQ3BELGFBQWMsQ0FDWixNQUFPLEVBSVAsS0FBSyxXQUFhLEVBQ2xCLEtBQUssT0FBUyxLQUNkLEtBQUssTUFBUSxLQUNiLEtBQUssT0FBUyxHQUVkLEtBQUssT0FBU1osR0FBZSxDQUFBLEVBQUk2QyxFQUFLLEVBQ3RDOUIsR0FDRSxLQUNBLEdBQUdMLEVBQWEsNERBRWpCLENBQ0wsQ0FHRSxXQUFXLG9CQUFxQixDQUM5QixNQUFPLENBQUMsS0FBTSxHQUFHdUIsR0FBZVksRUFBSyxDQUFDLENBQzFDLENBQ0UsbUJBQW9CLENBQ2xCLEtBQUssT0FBUyxHQUNkLEtBQUssTUFBUXZCLEdBQVEsSUFBSSxFQUNwQm9CLElBQU1BLEVBQU9aLEdBQWUsV0FBVyxHQUN2Q1ksRUFBSyxhQUFhLFNBQVMsS0FBSyxZQUFZQSxDQUFJLEVBQ3JEdEosRUFBSyxLQUFNLE9BQVEsU0FBUyxFQUM1QlksRUFBRyxLQUFLLE1BQU8sVUFBVyxJQUFJLEVBQzlCQSxFQUFHLEtBQUssTUFBTyxRQUFTLEtBQU0sRUFBSSxFQUNsQyxXQUFXLElBQU0sS0FBSywwQkFBMEIsQ0FDcEQsQ0FDRSxzQkFBdUIsQ0FDckI4RyxFQUFJLEtBQUssT0FBUyxLQUFNLFFBQVMsS0FBTSxFQUFJLEVBQzNDQSxFQUFJLEtBQUssT0FBUyxLQUFNLFVBQVcsSUFBSSxFQUN2Q2lDLEdBQWdCLElBQUksRUFDcEIsS0FBSyxNQUFRLElBQ2pCLENBQ0UseUJBQXlCNUMsRUFBTTZDLEVBQU8vRixFQUFNLENBQzFDLElBQUk0RCxFQUNKb0IsR0FBZSxLQUFLLE9BQVE5QixFQUFNbEQsQ0FBSSxFQUN0QyxNQUFNZ0csR0FBVXBDLEVBQU0sS0FBSyxRQUFVLEtBQU8sT0FBU0EsRUFBSSxpQkFBaUIsZUFBZSxLQUFLLEVBQUUsSUFBSSxFQUNwRyxVQUFXcUMsS0FBU0QsR0FBVSxDQUFFLEVBQUVFLEdBQVcsS0FBTUQsQ0FBSyxDQUM1RCxDQUNFLFlBQVkxRCxFQUFPLENBQ2pCLEtBQU0sQ0FBRSxLQUFBekYsQ0FBSSxFQUFLeUYsRUFDYkEsRUFBTSxtQkFDTnpGLElBQVMsU0FBU3FKLEdBQVEsS0FBTTVELENBQUssR0FDckN6RixJQUFTLFNBQVdBLElBQVMsWUFBV3NKLEdBQVUsS0FBTTdELENBQUssRUFDN0R6RixJQUFTLFlBQVl1SixHQUFXLElBQUksRUFDcEN2SixJQUFTLFdBQVd3SixHQUFVLEtBQU0vRCxDQUFLLEdBQ3pDekYsSUFBUyxZQUFjQSxJQUFTLFVBQVN5SixHQUFhLEtBQU1oRSxDQUFLLEVBQ2pFekYsSUFBUyxZQUFXd0ksR0FBVyxJQUMvQnhJLElBQVMsY0FBYXdJLEdBQVcsS0FBSyxTQUFTL0MsRUFBTSxNQUFNLEdBQ25FLENBQ0UsSUFBSSxTQUFVLENBQ1osT0FBTyxLQUFLLHFCQUFxQixVQUFVLENBQy9DLENBQ0EsRUFDSTZELEdBQVksQ0FBQ0ksRUFBTSxDQUFFLE9BQUFsSixLQUFhLENBQ3BDLElBQUlzRyxFQUNKLE1BQU02QyxFQUFVRCxFQUFLLFNBQVdsSixFQUVoQyxHQURpQm1KLEdBQVdELEVBQUssU0FBU2xKLENBQU0sRUFDbEMsT0FBTyxhQUFha0osRUFBSyxVQUFVLEVBQzdDLENBQUNDLEdBQVduSixhQUFrQixrQkFBb0JuQixFQUFLbUIsRUFBUSxNQUFNLElBQU1rSixFQUFLLEtBQzlFQSxFQUFLLFFBQVFWLEdBQWdCVSxDQUFJLEVBQ3JDQSxFQUFLLE9BQVNsSixFQUNkbkIsRUFBS3FLLEVBQU1qRCxHQUFpQjlHLElBQU9tSCxFQUFNNEMsRUFBSyxPQUFPLFNBQVcsS0FBTyxPQUFTNUMsRUFBSSxDQUFDLENBQUMsQ0FBQyxFQUN2RjdHLEVBQUd5SixFQUFLLE9BQVNBLEVBQU1iLEdBQVFhLENBQUksRUFDbkN0QyxHQUFpQnNDLEVBQU0sQ0FDckIsZ0JBQWlCLENBQUMsT0FBTyxFQUV6QixXQUFZLEdBQ1osVUFBVyxHQUNYLFFBQVMsRUFDZixDQUFLLEVBQ0RFLEVBQVlGLEVBQU0sRUFBSSxFQUUxQixFQUNJSCxHQUFjRyxHQUFTLENBQ3BCbEIsS0FBVWtCLEVBQUssV0FBYSxXQUFXLElBQU1WLEdBQWdCVSxDQUFJLENBQUMsRUFDekUsRUFDSUwsR0FBVSxDQUFDSyxFQUFNLENBQUUsT0FBQWxKLEtBQWEsQ0FDbEMsSUFBSXNHLEVBQUsrQyxFQUFJQyxFQUFJQyxFQUFJQyxFQUNyQixNQUFNQyxFQUFXNUssRUFBS3FLLEVBQU1oRCxFQUFvQixJQUFNLE9BQ2hEd0QsRUFBUyxDQUFDLEdBQUdSLEVBQUssT0FBTyxFQUFFLEtBQU1TLEdBQVFBLEVBQUksU0FBUzNKLENBQU0sQ0FBQyxFQUNuRSxHQUFJa0osRUFBSyxTQUFXbEosRUFDbEJvSixFQUFZRixFQUFNLEVBQUksVUFDYlEsR0FBVUUsR0FBb0JGLENBQU0sRUFBRyxDQUNoRCxVQUFXQyxLQUFPVCxFQUFLLFFBQ2pCUyxJQUFRRCxFQUFRQyxFQUFJLFNBQVcsR0FDMUJGLElBQVVFLEVBQUksU0FBVyxLQUVuQ04sR0FBTS9DLEVBQU0sT0FBTyx5QkFDbEIsaUJBQWlCLFVBQ2pCLE9BQ0QsSUFBSyxLQUFPLE9BQVNBLEVBQUksTUFBUSxNQUFnQitDLEVBQUcsS0FBS0gsRUFBSyxPQUFRUSxFQUFPLEtBQUssRUFDL0VELEtBQ0RILEVBQUtKLEVBQUssU0FBVyxNQUFnQkksRUFBRyxNQUFPLEVBQ2hERixFQUFZRixFQUFNLEVBQUssSUFFeEJLLEVBQUtMLEVBQUssU0FBVyxNQUFnQkssRUFBRyxjQUN2QyxJQUFJLE1BQU0sUUFBUyxDQUFFLFFBQVMsR0FBTSxTQUFVLEVBQU0sQ0FBQSxDQUNyRCxHQUNBQyxFQUFLTixFQUFLLFNBQVcsTUFBZ0JNLEVBQUcsY0FBYyxJQUFJLE1BQU0sU0FBVSxDQUFFLFFBQVMsRUFBTSxDQUFBLENBQUMsQ0FDakcsQ0FDQSxFQUNJUixHQUFZLENBQUNFLEVBQU1qRSxJQUFVLENBQy9CLElBQUlxQixFQUFLK0MsRUFDVCxHQUFJcEUsRUFBTSxRQUFVQSxFQUFNLFNBQVdBLEVBQU0sU0FBV0EsRUFBTSxTQUFVLE9BQ2xFQSxFQUFNLE1BQVEsVUFBVW1FLEVBQVlGLEVBQU0sRUFBSSxFQUNsRCxLQUFNLENBQUUsSUFBQTVHLENBQUcsRUFBSzJDLEVBQ1Y0RSxHQUFVdkQsRUFBTTRDLEVBQUssUUFBVSxLQUFPLE9BQVM1QyxFQUFJLGNBQ25ETyxFQUFVaUQsR0FBa0JaLENBQUksRUFDaEM3SyxFQUFRd0ksRUFBUSxRQUFRZ0QsQ0FBTSxFQUNwQyxJQUFJbkgsRUFBTyxHQUdYLEdBRklKLElBQVEsY0FBYUksR0FBUXJFLEVBQVEsR0FBS3dJLEVBQVEsUUFDbER2RSxJQUFRLFlBQVdJLEdBQVEsQ0FBQ3JFLEVBQVFBLEVBQVF3SSxFQUFRLFFBQVUsR0FDOUQsQ0FBQ3hJLEtBQ0NpRSxJQUFRLFFBQVVBLElBQVEsWUFBVUksRUFBTyxJQUMzQ0osSUFBUSxPQUFTQSxJQUFRLGNBQVlJLEVBQU9tRSxFQUFRLE9BQVMsR0FDN0R2RSxJQUFRLFNBQ1YsT0FBQXVFLEVBQVF4SSxDQUFLLEVBQUUsTUFBTyxFQUNmNEcsRUFBTSxlQUFnQixFQUdqQyxHQUFJNEIsRUFBUW5FLENBQUksRUFBRyxVQUFXZ0gsS0FBVTdDLEVBQVM2QyxFQUFPLFNBQVcsR0FDL0Q3QyxFQUFRbkUsQ0FBSSxHQUFHdUMsRUFBTSxlQUFnQixHQUN4Q29FLEVBQUt4QyxFQUFRbkUsQ0FBSSxHQUFLd0csRUFBSyxTQUFXLE1BQWdCRyxFQUFHLE1BQU8sRUFDN0QvRyxJQUFRLFVBQVU4RyxFQUFZRixFQUFNLEVBQUssQ0FDL0MsRUFDSUUsRUFBYyxDQUFDRixFQUFNYSxJQUFTLENBQ2hDYixFQUFLLE9BQVMsQ0FBQ2EsRUFDWGIsRUFBSyxTQUFTQSxFQUFLLGNBQWNhLENBQUksRUFDckNiLEVBQUssUUFBUU4sR0FBV00sRUFBTUEsRUFBSyxPQUFRYSxDQUFJLEVBQy9DQSxHQUFNZCxHQUFhQyxDQUFJLENBQzdCLEVBQ0lWLEdBQW1CVSxHQUFTLENBQzlCM0MsRUFBSTJDLEVBQUssT0FBU0EsRUFBTWIsR0FBUWEsQ0FBSSxFQUNwQ3RDLEdBQWlCc0MsRUFBTSxFQUFLLEVBQzVCRSxFQUFZRixFQUFNLEVBQUssRUFDdkJBLEVBQUssT0FBUyxJQUNoQixFQUNJWSxHQUFxQlosR0FBUyxDQUFDLEdBQUdBLEVBQUssT0FBTyxFQUFFLE9BQ2pEUyxHQUFRLENBQUNBLEVBQUksVUFBWUEsRUFBSSxhQUFlQSxFQUFJLFlBRW5ELEVBQ0lDLEdBQXVCRixHQUFXQSxhQUFrQixtQkFBcUJBLEVBQU8sYUFBYSxNQUFNLElBQU0sU0FDekdkLEdBQWEsQ0FBQ00sRUFBTVAsRUFBT29CLEVBQU8sS0FBVSxDQUM5Q2xMLEVBQUs4SixFQUFPLGdCQUFpQnhKLEdBQU0rSixDQUFJLENBQUMsRUFDeENySyxFQUFLOEosRUFBTyxvQkFBcUIsTUFBTSxFQUN2QzlKLEVBQUs4SixFQUFPLGdCQUFpQnhKLEdBQU0rSixDQUFJLENBQUMsRUFDeENySyxFQUFLOEosRUFBTyxnQkFBaUIsR0FBR1AsSUFBaUIyQixDQUFJLEVBQUUsRUFDdkRsTCxFQUFLOEosRUFBTyxlQUFnQixLQUFLLEVBQ2pDOUosRUFBSzhKLEVBQU8sT0FBUSxVQUFVLENBQ2hDLEVBQ0lxQixHQUFZQyxJQUFTQSxHQUFPLEtBQU8sT0FBU0EsRUFBSSxZQUFXLEVBQUcsS0FBSSxJQUFPLEdBQ3pFaEIsR0FBZSxDQUFDQyxFQUFNakUsSUFBVSxDQUNsQyxJQUFJcUIsRUFDSixNQUFNdEgsRUFBUWdMLElBQVUxRCxFQUFNNEMsRUFBSyxTQUFXLEtBQU8sT0FBUzVDLEVBQUksS0FBSyxFQUV2RSxHQUFJLEdBRGVyQixHQUFTLEtBQU8sT0FBU0EsRUFBTSxRQUFVLFlBQWNpRSxFQUFLLFNBQVdsSyxHQUMxRSxPQUNoQixNQUFNa0wsRUFBU2hCLEVBQUssT0FDZE8sRUFBVzVLLEVBQUtxSyxFQUFNaEQsRUFBb0IsSUFBTSxPQUNoRGlFLEVBQVdsRixhQUFpQixZQUFjLENBQUNtRixHQUFnQm5GLENBQUssRUFDdEVpRSxFQUFLLE9BQVMsR0FDZEEsRUFBSyxPQUFTbEssRUFDZCxVQUFXMkssS0FBT1QsRUFBSyxRQUFTLENBQzlCLE1BQU1tQixFQUFVLENBQUNWLEVBQUksTUFBT0EsRUFBSSxNQUFPQSxFQUFJLElBQUksRUFBRSxJQUFJSyxFQUFRLEVBQzdETCxFQUFJLE9BQVMsQ0FBQ1UsRUFBUSxLQUFNSixHQUFRQSxFQUFJLFNBQVNqTCxDQUFLLENBQUMsRUFDbkR5SyxHQUFZVSxHQUFZUCxHQUFvQkQsQ0FBRyxJQUNqREEsRUFBSSxTQUFXVSxFQUFRLFNBQVNyTCxDQUFLLEVBQzNDLENBQ0VrSyxFQUFLLE9BQVNnQixFQUNkLE1BQU1JLEVBQVVSLEdBQWtCWixDQUFJLEVBQ3RDLGFBQWFqQixFQUFVLEVBQ3ZCQSxHQUFhLFdBQVcsSUFBTSxDQUM1QixLQUFNLENBQUUsT0FBQTNELENBQVEsRUFBR2dHLEVBQVEsT0FBT1YsRUFBbUIsRUFDL0NXLEVBQVksRUFBRXJDLEdBQWMsRUFBSSxJQUFTLEdBQ3pDc0MsRUFBWSxHQUFHLEdBQUd0QixFQUFLLE9BQU81RSxJQUFXLEVBQUksV0FBYSxRQUFRLENBQUMsR0FBRyxRQUFRLEtBQU0sR0FBR0EsQ0FBTSxFQUFFLENBQUMsR0FDbEc2RCxJQUNGQSxFQUFLLFlBQWMsR0FBRyxDQUFDN0QsR0FBVTRFLEVBQUssVUFBVSxLQUFNLEdBQUlzQixDQUFTLEdBQUdELENBQVMsR0FDbEYsRUFBRSxHQUFHLEVBQ0Z6RSxJQUNGd0UsRUFBUSxJQUFJLENBQUNYLEVBQUt0TCxFQUFPaUcsSUFBVyxDQUNsQ3FGLEVBQUksTUFBUSxHQUFHdEwsRUFBUSxDQUFDLElBQUlpRyxDQUFNLEVBQ3hDLENBQUssQ0FDTCxFQUNJL0YsR0FDRixPQUFPLGVBQWUsaUJBQWlCLFVBQVcsT0FBUSxDQUN4RCxhQUFjLEdBQ2QsV0FBWSxHQUNaLEtBQU0sQ0FDSixPQUFPd0ksR0FBUSxJQUFJLEVBQUUsZUFBZWxJLEVBQUssS0FBTSxNQUFNLEdBQUssRUFBRSxDQUNsRSxDQUNBLENBQUcsRUFDSHdJLEdBQWUsT0FBTyxhQUFja0IsRUFBb0IsRUFDeEQsSUFBSWtDLEdBQWEsSUFBUyxPQUFPLEdBQUcsRUFDaENDLEdBQXVCLHdCQUN2Qm1ILEdBQW1CLENBQUMsQ0FDdEIsTUFBQTdTLENBQ0YsSUFBTUEsRUFBTSxNQUFNeUwsRUFBVSxFQUFFLENBQUMsRUFDL0IsU0FBU0wsR0FBZ0JuRixFQUFPLENBQzlCLElBQUlxQixFQUNKLE1BQU1xRSxFQUFVMUYsYUFBaUIsT0FBU0EsRUFBTSxPQUFTLFNBQVdBLEVBQU0sa0JBQWtCLG1CQUFxQixDQUFDQSxFQUFNLFdBQWFBLEVBQU0sWUFBY3lGLElBQ3pKLEdBQUlDLEVBQVMsQ0FDWCxNQUFNM0wsRUFBUWlHLEVBQU0sT0FBTyxNQUNyQjJGLEVBQVUsTUFBTSxPQUFPdEUsRUFBTXJCLEVBQU0sT0FBTyxPQUFTLEtBQU8sT0FBU3FCLEVBQUksVUFBWSxDQUFBLENBQUUsRUFBRSxLQUMxRnFELEdBQVFBLEVBQUksUUFBVTNLLEdBQVMsQ0FBQzRLLEdBQW9CRCxDQUFHLENBQ3pELEVBQ0QxRSxFQUFNLE9BQU8sTUFBUWpHLEVBQU0sTUFBTXlMLEVBQVUsRUFBRUcsRUFBVSxFQUFJLENBQUMsQ0FDaEUsQ0FDRSxPQUFPRCxDQUNULENBR0EsSUFBSW1ILEVBQ0FDLEdBQVlsTSxJQUFjQyxHQUMxQmtNLEdBQWlCdEMsSUFBY2tDLEdBQy9CSyxHQUFVLGlDQUNWQyxHQUFTLENBQ1gsTUFBTyxRQUNQLE9BQVEsa0JBQ1IsUUFBUyxVQUNULE1BQU8sY0FDUCxNQUFPLG9DQUNQLEdBQUksSUFDTixFQUNJQyxHQUFtQixjQUFjOUwsRUFBYSxDQUNoRCxhQUFjLENBQ1osTUFBTyxFQUVQLEtBQUssbUJBQXFCLEdBQzFCLEtBQUssV0FBYSxFQUNsQixLQUFLLFlBQWMsS0FDbkIsS0FBSyxNQUFRLEtBQ2IsS0FBSyxPQUFTWixHQUFlLENBQUEsRUFBSXlNLEVBQU0sRUFDdkMsS0FBSyxhQUFhLENBQUUsS0FBTSxNQUFNLENBQUUsRUFBRSxPQUNsQ3hMLEVBQWMsTUFBTSxFQUVwQkEsRUFDRSxRQUNBO0FBQUE7QUFBQTtBQUFBLHlDQUdpQ04sRUFBYSxJQUV0RCxDQUNLLENBQ0wsQ0FFRSxXQUFXLG9CQUFxQixDQUM5QixPQUFPc0IsR0FBZXdLLEVBQU0sQ0FDaEMsQ0FDRSxtQkFBb0IsQ0FDbEIsS0FBSyxNQUFRbkwsR0FBUSxJQUFJLEVBQ3BCK0ssSUFBT0EsRUFBUXZLLEdBQWUsUUFBUSxHQUN0Q3VLLEVBQU0sYUFBYSxTQUFTLEtBQUssWUFBWUEsQ0FBSyxFQUN2RGxMLEdBQWlCLEtBQU0sQ0FBRSxVQUFXLEVBQUksQ0FBRSxFQUMxQ25ILEVBQUcsS0FBSyxNQUFPLFFBQVMsSUFBSSxFQUM1QkEsRUFBRyxLQUFNd1MsR0FBUyxJQUFJLEVBQ3RCLFdBQVcsSUFBTUcsR0FBTyxJQUFJLENBQUMsQ0FDakMsQ0FDRSx5QkFBeUJ4TSxFQUFNNkMsRUFBTy9GLEVBQU0sQ0FDMUNnRixHQUFlLEtBQUssT0FBUTlCLEVBQU1sRCxDQUFJLENBQzFDLENBQ0Usc0JBQXVCLENBQ3JCa0UsR0FBaUIsS0FBTSxFQUFLLEVBQzVCTCxFQUFJLEtBQUssT0FBUyxLQUFNLFFBQVMsSUFBSSxFQUNyQ0EsRUFBSSxLQUFNMEwsR0FBUyxJQUFJLEVBQ3ZCLEtBQUssTUFBUSxJQUNqQixDQUNFLFlBQVloTixFQUFPLENBQ2JBLEVBQU0sbUJBQ05BLEVBQU0sT0FBUyxTQUFTb04sR0FBUyxLQUFNcE4sQ0FBSyxFQUM1Q0EsRUFBTSxPQUFTLFdBQVdxTixHQUFXLEtBQU1yTixDQUFLLEVBQ2hEQSxFQUFNLE9BQVMsWUFBWXNOLEdBQVksSUFBSSxFQUMzQ3ROLEVBQU0sT0FBUyxTQUFTdU4sR0FBbUIsS0FBTXZOLENBQUssRUFDdERBLEVBQU0sT0FBUyxXQUFXd04sR0FBVyxLQUFNeE4sQ0FBSyxFQUNoREEsRUFBTSxPQUFTLFlBQVltTixHQUFPLEtBQU1uTixDQUFLLEVBQ3JELENBQ0UsSUFBSSxPQUFRLENBQ1YsT0FBTyxLQUFLLGlCQUFpQixNQUFNLENBQ3ZDLENBQ0UsSUFBSSxTQUFVLENBQ1osT0FBTyxLQUFLLGNBQWMsT0FBTyxDQUNyQyxDQUNBLEVBQ0l5TixHQUFpQixDQUFDeEosRUFBTXlKLElBQ25CekosRUFBSyxjQUNWLElBQUksWUFBWSxPQUFRLENBQ3RCLFFBQVMsR0FDVCxXQUFZLEdBQ1osT0FBUSxDQUFFLEtBQUF5SixFQUFNLE9BQVFBLEVBQUssWUFBYyxTQUFXLEtBQUssQ0FDNUQsQ0FBQSxDQUNGLEVBRUNQLEdBQVMsQ0FBQ2xKLEVBQU1qRSxJQUFVLENBQzVCLElBQUlxQixFQUFLK0MsRUFBSUMsRUFBSUMsRUFBSUMsRUFDckIsTUFBTTdCLEVBQVF1QixFQUFLLE9BQ2IwSixFQUFTLE9BQU8sTUFBTTFKLEVBQUssV0FBVyxFQUFJLEtBQU9qRSxHQUFTLEtBQU8sT0FBU0EsRUFBTSxPQUFPLENBQUMsRUFDeEY0TixHQUFjRCxHQUFVLEtBQU8sT0FBU0EsRUFBTyxXQUFXLENBQUMsS0FBT0EsR0FBVSxLQUFPLE9BQVNBLEVBQU8sYUFBYSxDQUFDLEdBQ2pIRSxFQUFhLEdBQUdELEVBQWEsR0FBR0EsRUFBVyxZQUFjbEwsRUFBTSxNQUFRQSxFQUFNLE9BQU8sSUFBSWtMLEVBQVcsV0FBVyxLQUFPLEVBQUUsR0FDdkhySCxJQUFVbEMsR0FBTUQsR0FBTS9DLEVBQU00QyxFQUFLLFVBQVksS0FBTyxPQUFTNUMsRUFBSSxTQUFXLEtBQU8sT0FBUytDLEVBQUcsQ0FBQyxJQUFNLEtBQU8sT0FBU0MsRUFBRyxjQUFnQixHQUN6SXlKLEVBQVMsQ0FBRSxFQUNqQmxVLEVBQUtxSyxFQUFNLE9BQVEsT0FBTyxFQUMxQnJLLEVBQUtxSyxFQUFNLGFBQWNzQyxDQUFLLEVBQzlCdEMsRUFBSyxNQUFNLFFBQVEsQ0FBQ3lKLEVBQU10VSxFQUFPLENBQUUsT0FBQWlHLEtBQWEsQ0FDOUMsTUFBTTBPLEdBQVMsR0FBR0YsQ0FBVSxHQUFHSCxFQUFLLFdBQVcsS0FBS2hMLEVBQU0sTUFBTSxLQUFLdEosRUFBUSxDQUFDLElBQUlzSixFQUFNLEVBQUUsSUFBSXJELENBQU0sR0FDcEd6RixFQUFLOFQsRUFBTSxhQUFjSyxFQUFNLEVBQy9CblUsRUFBSzhULEVBQU0sT0FBUSxRQUFRLEVBQzNCQSxFQUFLLFNBQVcsR0FDaEJBLEVBQUssT0FBU0EsRUFBSyxPQUFTQSxFQUFLLGFBQWUsSUFBSSxLQUFNLEVBQzFESSxFQUFPLEtBQUtKLEVBQUssS0FBSyxDQUMxQixDQUFHLEVBQ0QsTUFBTU0sRUFBVS9KLEVBQUssUUFDZmdLLEdBQWUsR0FBR0osQ0FBVSxHQUFHdEgsQ0FBSyxLQUFLdUgsRUFBTyxPQUFTcEwsRUFBTSxNQUFNLFFBQVEsS0FBTSxHQUFHb0wsRUFBTyxNQUFNLEVBQUUsRUFBSXBMLEVBQU0sS0FBSyxHQUNwSGtFLEVBQU9vSCxHQUFXLFNBQVMsZUFBZXBVLEVBQUtvVSxFQUFTLE1BQU0sR0FBSyxFQUFFLEVBQ3JFcE0sR0FBVWdGLEdBQVEsS0FBTyxPQUFTQSxFQUFLLFNBQ3pDb0gsR0FBU3BVLEVBQUtvVSxFQUFTLGFBQWNDLEVBQVksRUFDakRySCxHQUFNaE4sRUFBS2dOLEVBQU0zRixHQUFzQixNQUFNLEVBQ2pELFVBQVd3RCxLQUFVN0MsSUFBVyxDQUFFLEVBQ2hDNkMsRUFBTyxTQUFXcUosRUFBTyxTQUFTbEIsR0FBaUJuSSxDQUFNLENBQUMsRUFDNUQsR0FBSW9KLEVBQVksQ0FDZCxNQUFNSyxFQUFZakssRUFBSyxPQUFPQSxFQUFLLGFBQWUsR0FBSyxDQUFDLEdBQUsrSixFQUN2REcsRUFBWUQsTUFBZ0I1SixFQUFLeEMsR0FBUW1DLENBQUksSUFBTSxLQUFPLE9BQVNLLEVBQUcsZUFDdEU4SixFQUFXeE0sSUFBV3FDLEVBQUssTUFDakNBLEVBQUssbUJBQXFCLEdBQ3RCaUssSUFBY0YsR0FDWkcsSUFDRXJCLElBQWFELEVBQU9BLEVBQU0sWUFBY2dCLEdBQ3RDdEosRUFBSzZKLEVBQVMsQ0FBQyxJQUFNLE1BQWdCN0osRUFBRyxNQUFPLEdBRXZELFdBQVcsSUFBTTJKLEdBQWEsS0FBTyxPQUFTQSxFQUFVLE1BQU8sRUFBRSxHQUFHLEdBQy9EQSxHQUFhLE1BQWdCQSxFQUFVLE1BQU8sRUFDckQsV0FBVyxJQUFNLENBQ2YsR0FBSSxDQUFDbkIsR0FBZ0IsT0FBT0ksR0FBT2xKLENBQUksRUFDdkNBLEVBQUssbUJBQXFCLEVBQzNCLEVBQUUsR0FBRyxDQUNWLENBQ0EsRUFDSW9KLEdBQWEsQ0FBQ3BKLEVBQU0sQ0FBRSxPQUFBbEosS0FBYSxDQUNyQyxhQUFha0osRUFBSyxVQUFVLEVBQzVCQSxFQUFLLFlBQWMsQ0FBQyxHQUFHQSxFQUFLLEtBQUssRUFBRSxRQUFRbEosQ0FBTSxDQUNuRCxFQUNJdVMsR0FBZXJKLEdBQVMsQ0FDdEJBLEVBQUssb0JBQW9Ca0osR0FBT2xKLENBQUksRUFDeENBLEVBQUssV0FBYSxXQUFXLElBQU0sQ0FDakNBLEVBQUssWUFBYyxJQUN2QixDQUFHLENBQ0gsRUFDSW1KLEdBQVcsQ0FBQ25KLEVBQU0sQ0FBRSxPQUFBbEosRUFBUSxRQUFTNEUsRUFBRyxRQUFTQyxLQUFRLENBQzNELElBQUl5QixFQUNKLE1BQU1nTixFQUFRcEssRUFBSyxTQUFTbEosQ0FBTSxFQUFJLENBQUMsR0FBR2tKLEVBQUssS0FBSyxFQUFJLEtBQ2xEcUssRUFBYUQsR0FBUyxLQUFPLE9BQVNBLEVBQU0sS0FBTVgsR0FBU0EsRUFBSyxTQUFTM1MsQ0FBTSxDQUFDLEVBQ2hGd1QsRUFBY0YsR0FBUyxLQUFPLE9BQVNBLEVBQU0sS0FBTVgsR0FBUyxDQUNoRSxLQUFNLENBQUUsSUFBQTlSLEVBQUssTUFBQWlFLEVBQU8sT0FBQUMsRUFBUSxLQUFBbkUsQ0FBTSxFQUFHK1IsRUFBSyxzQkFBdUIsRUFDakUsT0FBTzlOLEdBQUtoRSxHQUFPZ0UsR0FBS0UsR0FBVUgsR0FBS2hFLEdBQVFnRSxHQUFLRSxDQUN4RCxDQUFHLEVBQ0d5TyxFQUFZYixHQUFleEosRUFBTXFLLENBQVUsR0FBS0EsRUFBVyxPQUFRLEVBQzlEQyxFQUFhQSxFQUFZLE1BQU8sRUFDaEN4VCxJQUFXa0osS0FBTzVDLEVBQU00QyxFQUFLLFVBQVksTUFBZ0I1QyxFQUFJLE1BQU8sRUFDL0UsRUFDSWtNLEdBQXFCLENBQUN0SixFQUFNakUsSUFBVSxDQUN4QyxJQUFJcUIsRUFDSixNQUFNcUMsRUFBUTFELEVBQU0sT0FDcEIsR0FBSSxDQUFDbUYsR0FBZ0JuRixDQUFLLEdBQUssRUFBRTBELEdBQVMsTUFBZ0JBLEVBQU0sTUFBTSxLQUFNLEdBQUcsT0FDL0UsTUFBTTNKLEVBQVE2UyxHQUFpQmxKLENBQUssRUFDOUIySyxFQUFRLENBQUMsR0FBR3BLLEVBQUssS0FBSyxFQUV0QnVLLEVBRFUsQ0FBQyxLQUFLbk4sRUFBTXFDLEdBQVMsS0FBTyxPQUFTQSxFQUFNLE9BQVMsS0FBTyxPQUFTckMsRUFBSSxXQUFhLENBQUEsQ0FBRSxFQUN6RSxLQUFNcUQsR0FBUWtJLEdBQWlCbEksQ0FBRyxJQUFNM0ssQ0FBSyxFQUNyRXVVLEVBQWFELEVBQU0sS0FBTVgsR0FBU0EsRUFBSyxRQUFVM1QsQ0FBSyxFQUN0RDBVLEVBQVVoTixFQUFjLFFBQVMrTSxHQUFpQixLQUFPLE9BQVNBLEVBQWMsT0FBU3pVLEVBQU8sQ0FDcEcsTUFBQUEsQ0FDSixDQUFHLEVBRUQsR0FEQTJKLEVBQU0sTUFBUSxHQUNWLEVBQUMrSixHQUFleEosRUFBTXFLLEdBQWNHLENBQU8sRUFDL0MsSUFBSUgsRUFBWSxPQUFPQSxFQUFXLE9BQVEsRUFDMUMsR0FBSSxDQUFDRCxFQUFNLENBQUMsRUFBRyxPQUFPcEssRUFBSyxRQUFRd0ssQ0FBTyxFQUMxQ0osRUFBTUEsRUFBTSxPQUFTLENBQUMsRUFBRSxzQkFBc0IsV0FBWUksQ0FBTyxFQUNuRSxFQUNJakIsR0FBYSxDQUFDdkosRUFBTWpFLElBQVUsQ0FDaEMsSUFBSXFCLEVBQUsrQyxFQUNULEtBQU0sQ0FBRSxJQUFBL0csRUFBSyxPQUFBcVIsRUFBUSxPQUFBM1QsQ0FBUSxFQUFHaUYsRUFDMUIwRCxFQUFRTyxFQUFLLFVBQVlsSixFQUFTa0osRUFBSyxRQUFVLEtBQ2pEMEssRUFBZ0JqTCxHQUFTLEtBQU8sT0FBU0EsRUFBTSxhQUNyRCxJQUFJdEssRUFBUXNLLEVBQVFPLEVBQUssTUFBTSxRQUFVNUMsRUFBTTRDLEVBQUssY0FBZ0IsS0FBTzVDLEVBQU0sR0FDakYsR0FBSSxFQUFBakksSUFBVSxJQUFNLENBQUNzSyxHQUFTc0csR0FBU2hLLENBQUssR0FDNUMsSUFBSTNDLElBQVEsY0FBZ0IsQ0FBQ3FHLEVBQU90SyxHQUFTLFVBQ3BDaUUsSUFBUSxhQUFlLENBQUNzUixFQUFldlYsR0FBUyxNQUNwRCxJQUFJaUUsSUFBUSxTQUFXcUcsRUFDMUIsT0FBQTFELEVBQU0sZUFBZ0IsRUFDZjBELEVBQU0sY0FBYyxJQUFJLE1BQU0sUUFBUyxDQUFFLFFBQVMsRUFBSSxDQUFFLENBQUMsRUFDM0QsSUFBS3JHLElBQVEsYUFBZUEsSUFBUSxXQUFhLENBQUNzUixFQUFlLENBQ3RFLE1BQU1DLEVBQVMsQ0FBQ0YsR0FBVXpLLEVBQUssTUFBTTdLLENBQUssRUFFMUMsR0FEQTRHLEVBQU0sZUFBZ0IsRUFDbEI0TyxFQUFRLE9BQU9uQixHQUFleEosRUFBTTJLLENBQU0sR0FBS0EsRUFBTyxPQUFRLEVBQzlEbEwsSUFBT3RLLEdBQVMsRUFDeEIsS0FBUyxRQUNQNEcsRUFBTSxlQUFnQixHQUNyQm9FLEVBQUtILEVBQUssTUFBTSxLQUFLLElBQUksRUFBRzdLLENBQUssQ0FBQyxHQUFLNkssRUFBSyxVQUFZLE1BQWdCRyxFQUFHLE1BQU8sRUFDckYsRUFDQSxPQUFBaEMsR0FBZSxPQUFPLFNBQVU4SyxFQUFnQiIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOls3LDE0LDE1LDE2LDE3XX0=
|