@verdaccio/ui-theme 9.0.0-next-9.4 → 9.0.0-next-9.5

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.
@@ -1,2 +1,2 @@
1
- import{a as e}from"./rolldown-runtime.M0LkISsN.js";import{Bt as t,Ht as n,Jn as r,Nt as i,Pt as a,Qn as o,Yn as s,Yt as c,Zn as l,_n as u,bn as d,en as ee,hn as f,jt as p,ln as m,mt as h,pt as g,qt as te,sn as _,tr as ne,vn as re,wn as v,wt as ie,yn as ae}from"./vendors.DuKlkuTQ.js";import{d as oe,g as se,h as ce,r as y,t as le,u as b}from"./utils.CCleS53e.js";var x=`#4b5e40`,ue={primary:{main:x},secondary:{main:`#20232a`}},de=r[900],fe=r[700];r[200];var S=l(),C=e(ne(),1),w={primaryColor:x,pkgManagers:[`yarn`,`pnpm`,`npm`],scope:``,base:``,flags:{},login:!0,url_prefix:``,showInfo:!0,showSettings:!0,showThemeSwitch:!0,showFooter:!0,showSearch:!0,showRaw:!0,showDownloadTarball:!0,showUplinks:!0,hideDeprecatedVersions:!1,title:`Verdaccio`};function pe(e={}){let t=window?.__VERDACCIO_BASENAME_UI_OPTIONS||{},n={...w,...t,...e,flags:{...w.flags,...t.flags,...e.flags}};return n.primaryColor||=x,n}var T=(0,C.createContext)(void 0),me=({children:e,overrideConfig:t={}})=>{let n=(0,C.useMemo)(()=>({configOptions:pe(t)}),[t]);return(0,S.jsx)(T.Provider,{value:n,children:e})},E=()=>{let e=(0,C.useContext)(T);if(!e)throw Error(`useConfig must be used within AppConfigurationProvider`);return e},he=e(re(),1),D;try{localStorage.setItem(`__TEST__`,``),localStorage.removeItem(`__TEST__`),D=localStorage}catch{D=he.default}function O(e,t){D.setItem(`username`,e),D.setItem(`token`,t)}function ge(){D.removeItem(`username`),D.removeItem(`token`)}function _e(){return{username:D.getItem(`username`),token:D.getItem(`token`)}}var ve=D,ye=class extends Error{code;constructor(e,t){super(e),this.name=`CustomError`,this.code=t??500}};function be(e){if(e.headers){let t=e.headers.get(`Content-Type`);if(t?.includes(`application/pdf`))return Promise.all([e.ok,e.blob(),e.status]);if(t?.includes(`application/json`))return Promise.all([e.ok,e.json(),e.status]);if(t?.includes(`text/`))return Promise.all([e.ok,e.text(),e.status]);if(e.url&&e.url.endsWith(`.tgz`)===!0)return Promise.all([e.ok,e.blob(),e.status])}return Promise.all([e.ok,e.text(),e.status])}var k=`Authorization`,A=new class{request(e,t=`GET`,n={headers:{}}){let r=ve.getItem(`token`),i=new Headers(n.headers);return r&&i.has(k)===!1&&(i.set(k,`Bearer ${r}`),n.headers=i),i.set(`x-client`,`verdaccio-ui`),new Promise((r,i)=>{fetch(e,{method:t,credentials:`same-origin`,signal:n.signal,...n}).then(be).then(e=>{let[t,n,a]=e;t===!0?r(n):i(new ye(typeof n==`string`?n:n?.error??n?.message??`Unknown error`,a))}).catch(e=>{i(e)})})}};function j(e,t,n,r){let i=`${e}${t}`;return n&&(i+=n),r&&(i+=`?v=${r}`),i}function M(e,t,n,r){let i=j(e,t,n,r),{data:a,error:o,isLoading:s,mutate:c}=u(i,()=>A.request(i));return{data:a,error:o,isLoading:s,mutate:c}}var N={primaryColor:`#ffffff`,darkMode:!1,pkgManagers:[`yarn`,`pnpm`,`npm`],scope:``,base:``,login:!0,flags:{},url_prefix:``,title:`Verdaccio`};function P(){return window?.__VERDACCIO_BASENAME_UI_OPTIONS??N}var F=function(e){return e.LOGIN=`/-/verdaccio/sec/login`,e.SIGNUP=`/-/verdaccio/sec/signup`,e.CONFIG=`/-/verdaccio/packages`,e.PACKAGES=`/-/verdaccio/data/packages`,e.SEARCH=`/-/verdaccio/data/search/`,e.SIDEBAR=`/-/verdaccio/data/sidebar/`,e.README=`/-/verdaccio/data/package/readme/`,e}({}),I={JSON:`application/json`};function L(e){return e.replace(/\/$/,``)}function xe(e,t){return t?`${t}/${e}`:e}var R=(0,C.createContext)(void 0),Se=({children:e})=>{let{scope:t,package:n,version:r}=f(),i=L(P().base),a=xe(n??``,t),o=M(i,F.README,a,r),s=M(i,F.SIDEBAR,a,r),c=o.isLoading||s.isLoading,l=o.error||s.error,u=o.error?.code??s.error?.code,d=(0,C.useMemo)(()=>({packageMeta:s.data,readMe:o.data,packageName:a,packageVersion:r,isLoading:c,isForbidden:u===403,isUnAuthorized:u===401,hasNotBeenFound:u===404,isError:u!==void 0,error:l}),[s.data,o.data,a,r,c,u,l]);return(0,S.jsx)(R.Provider,{value:d,children:e})},Ce=()=>{let e=(0,C.useContext)(R);if(e===void 0)throw Error(`useVersion must be used within a VersionProvider`);return e},z=(e,t)=>{let[n,r]=(0,C.useState)(()=>{try{let n=window.localStorage.getItem(e);return n?JSON.parse(n):t}catch(e){return console.error(`An error occurred getting a sessionStorage key`,e),t}});return[n,t=>{try{let i=t instanceof Function?t(n):t;r(i),window.localStorage.setItem(e,JSON.stringify(i))}catch(e){console.error(`An error occurred writing to sessionStorage`,e)}}]},B=(0,C.createContext)({setLanguage:e=>{},language:`en-US`,listLanguages:[]}),we=({children:e,onMount:t,i18n:n,listLanguages:r})=>{let i=n.languages?.[0],[a,o]=z(`language`,i),s=(0,C.useCallback)(async()=>{await n.changeLanguage(a)},[n,a]);return(0,C.useEffect)(()=>{s(),t()},[a,t,s]),(0,S.jsx)(ae,{i18n:n,children:(0,S.jsx)(B.Provider,{value:{setLanguage:o,language:a,listLanguages:r},children:e})})},Te=()=>(0,C.useContext)(B),V=(0,C.createContext)({}),Ee=P(),De=({children:e})=>{let t=M(L(Ee.base),F.PACKAGES);return(0,S.jsx)(V.Provider,{value:{manifests:t.data??[],isLoading:t.isLoading,isError:t.error?.code!==void 0},children:e})},Oe=()=>(0,C.useContext)(V),H=async(e,t,n,r)=>{let i=t.toUpperCase()===`GET`,a=e;return A.request(a,t,{body:i?void 0:JSON.stringify(n),headers:{Accept:I.JSON,...i?{}:{"Content-Type":I.JSON}},signal:r?.signal})};function U(e,t,n=`POST`,r={}){let{data:i,error:a,isMutating:o,trigger:s}=_(r.buildUrl?r.buildUrl(e,t):`${e}${t}`,(e,{arg:t})=>H(e,n,t??{}));return{data:i,error:a,isMutating:o,trigger:s}}async function ke(e,{arg:t}){return A.request(t.link,`GET`,{headers:{accept:`text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3`},credentials:`include`})}function Ae(){let{trigger:e,isMutating:t,error:n}=_(`tarball-download`,ke);return{download:e,isDownloading:t,error:n}}function W(){let{token:e,username:t}=_e();return le(e)?{token:null,username:null}:{token:e,username:t}}function je(e){let t=e?.info?.message||e?.response?.data?.message||e?.message||`Authentication failed`;return Error(t)}var G=(0,C.createContext)({userState:{token:null,username:null},setUserState:()=>{},handleLogin:async()=>{},logOutUser:()=>{}}),Me=L(P().base),Ne=({children:e})=>{let[t,n]=C.useState(W()),{data:r,isMutating:i,trigger:a}=U(Me,F.LOGIN,`POST`);return(0,C.useEffect)(()=>{r&&!i&&(n(r),r.username&&r.token&&O(r.username,r.token))},[r,i]),(0,S.jsx)(G.Provider,{value:{handleLogin:async e=>{await a(e)},userState:t,logOutUser:()=>{n(W()),ge(),window.location?.reload()},setUserState:n},children:e})},Pe=()=>(0,C.useContext)(G),K=(0,C.createContext)({isLatest:!1,isGlobal:!1,yarnModern:!1}),Fe=({children:e})=>{let[t,n]=z(`settings-ui-verdaccio`,{}),[r,i]=(0,C.useState)(t||{}),a=(0,C.useCallback)(e=>{i(e),n(e)},[n]),o=(0,C.useMemo)(()=>({localSettings:r||{},updateSettings:a}),[r,a]);return(0,S.jsx)(K.Provider,{value:o,children:e})},Ie=()=>(0,C.useContext)(K),q=(0,C.createContext)({searchResults:[],isLoading:!1}),Le=P();function Re(e,t,n=`POST`){let{data:r,error:i,isMutating:a,trigger:o}=_(`${e}${t}`,(e,{arg:t})=>H(`${e}${encodeURIComponent(t?.text??``)}`,n,t??{},{signal:t?.signal}));return{data:r,error:i,isMutating:a,trigger:o}}var ze=({children:e})=>{let{data:t,isMutating:n,error:r,trigger:i}=Re(L(Le.base),F.SEARCH,`GET`),a={searchResults:t??[],isLoading:n,isError:!!r,error:r,doSearch:async e=>{try{await i({text:e.text,signal:e.signal})}catch(e){console.error(`Search failed:`,e)}}};return(0,S.jsx)(q.Provider,{value:a,children:e})},Be=()=>(0,C.useContext)(q),J=(0,C.createContext)(void 0),Ve=({children:e})=>{let{download:t,isDownloading:n}=Ae(),r=(0,C.useCallback)(async({link:e})=>{try{let n=await t({link:e});if(!n)return;ce(n,se(e))}catch(e){console.error(`Error during tarball download:`,e)}},[t]);return(0,S.jsx)(J.Provider,{value:{downloadTarball:r,isDownloading:n},children:e})},Y=()=>{let e=(0,C.useContext)(J);if(!e)throw Error(`useDownload must be used within a DownloadProvider`);return e},He=o(m,{target:`e2ct7p50`})({name:`lq5caq`,styles:`text-decoration:none;&:hover,&:focus{text-decoration:underline;}`}),X=function({ref:e,to:t,children:n,variant:r,className:i,onClick:a}){return(0,S.jsx)(He,{className:i,onClick:a,ref:e,to:t,children:(0,S.jsx)(v,{color:`primary`,variant:r,children:n})})},Z=o(`div`,{target:`e19ns5fr1`})(({theme:e})=>({flex:`1 1 auto`,borderBottom:`1px dotted ${e.palette.mode==`light`?`rgba(0, 0, 0, 0.2)`:`rgba(255, 255, 255, 0.2)`} `,whiteSpace:`nowrap`,height:`0.5em`,margin:`0 16px`}),``),Q=o(p,{target:`e19ns5fr0`})(({theme:e})=>({flex:`none`,opacity:.6,color:e.palette.mode==`light`?e.palette.black:s.white}),``);function Ue(e){return Object.keys(e).reduce((t,n)=>(e[n].deprecated||(t[n]=e[n]),t),{})}var We=({versions:e,packageName:t,time:n})=>{let{t:r}=d(),{configOptions:o}=E(),s=o.hideDeprecatedVersions?Ue(e):e;return(0,S.jsx)(a,{dense:!0,children:Object.keys(s).sort((e,t)=>{let r=n[e]?new Date(n[e]).getTime():0;return(n[t]?new Date(n[t]).getTime():0)-r}).map(a=>(0,S.jsxs)(i,{className:`version-item`,"data-testid":`version-${a}`,sx:{pr:0},children:[(0,S.jsx)(X,{to:`${y.DETAIL}${t}/v/${a}`,variant:`outline`,children:(0,S.jsx)(Q,{"data-testid":`version-list-link`,disableTypography:!1,primary:a,sx:typeof e[a]?.deprecated==`string`?{textDecoration:`line-through`}:void 0})}),typeof e[a]?.deprecated==`string`?(0,S.jsx)(te,{color:`warning`,"data-testid":`deprecated-badge`,label:r(`versions.deprecated`),size:`small`,sx:{marginLeft:1},variant:`outlined`}):null,(0,S.jsx)(Z,{}),(0,S.jsx)(Q,{"data-testid":`version-list-text`,primary:n[a]?oe(n[a]):r(`versions.not-available`),slotProps:{primary:{title:b(n[a])}}})]},a))})},Ge=({tags:e,packageName:t,time:n})=>(0,S.jsx)(a,{dense:!0,children:Object.keys(e).sort((t,r)=>n[e[t]]<n[e[r]]?1:n[e[t]]>n[e[r]]?-1:0).map(n=>(0,S.jsxs)(i,{className:`version-item`,"data-testid":`tag-${n}`,sx:{pr:0},children:[(0,S.jsx)(X,{to:`${y.DETAIL}${t}/v/${e[n]}`,variant:`outline`,children:(0,S.jsx)(Q,{children:n})}),(0,S.jsx)(Z,{}),(0,S.jsx)(Q,{children:e[n]})]},n))}),Ke=e(h(),1),qe=e(g(),1),$=o(v,{target:`e1kn2fte0`})(e=>({fontWeight:e.theme&&e.theme.fontWeight.bold,textTransform:`capitalize`}),``),Je=({packageMeta:e,packageName:r})=>{let{t:i}=d(),{configOptions:a}=E(),{versions:o={},time:s={},"dist-tags":l={}}=e,[u,f]=(0,C.useState)(o);if(!e||Object.keys(e).length===0)return null;let p=a.hideDeprecatedVersions,m=l&&Object.keys(l).length>0&&r,h=u&&Object.keys(u).length>0&&r,g=e=>{f(Object.keys(o).reduce((t,n)=>((e===``||o[n]!==void 0&&qe.default.satisfies(n,e,{includePrerelease:!0,loose:!0}))&&(t[n]=o[n]),t),{}))};return(0,S.jsx)(n,{sx:{mb:2},children:(0,S.jsx)(t,{children:(0,S.jsxs)(ee,{"data-testid":`versions`,sx:{m:2},children:[m?(0,S.jsxs)(S.Fragment,{children:[(0,S.jsxs)($,{variant:`subtitle1`,children:[i(`versions.current-tags`),(0,S.jsx)(`span`,{children:` (${Object.keys(l).length})`})]}),(0,S.jsx)(Ge,{packageName:r,tags:l,time:s})]}):null,(0,S.jsxs)(S.Fragment,{children:[(0,S.jsxs)($,{variant:`subtitle1`,children:[i(`versions.version-history`),(0,S.jsx)(`span`,{children:` (${Object.keys(u).length})`})]}),(0,S.jsx)(ie,{helperText:i(`versions.search.placeholder`),onChange:(0,Ke.default)(e=>{g(e.target.value)},200),size:`small`,variant:`standard`,sx:{width:`50%`}})]}),h?(0,S.jsxs)(S.Fragment,{children:[p===!0&&(0,S.jsx)(c,{severity:`info`,sx:{marginTop:1,marginBottom:1},children:i(`versions.hide-deprecated`)}),(0,S.jsx)(We,{packageName:r,time:s,versions:u})]}):null]})})})};export{me as C,fe as D,de as E,O as S,ue as T,z as _,ze as a,L as b,Ie as c,je as d,U as f,Te as g,we as h,Y as i,Ne as l,Oe as m,X as n,Be as o,De as p,Ve as r,Fe as s,Je as t,Pe as u,Se as v,E as w,P as x,Ce as y};
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVyc2lvbnMuREY3UXhUMFouanMiLCJuYW1lcyI6WyJnZXRDb25maWd1cmF0aW9uIiwibWVtb3J5U3RvcmFnZSIsImNvbmZpZ3VyYXRpb24iLCJfc3R5bGVkIiwiX3N0eWxlZCIsIkxpbmsiLCJMaXN0SXRlbVRleHQiLCJMaW5rIiwiTGlzdEl0ZW1UZXh0IiwiX3N0eWxlZCIsInNlbXZlciIsIkZyYWdtZW50Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vdWktY29tcG9uZW50cy9idWlsZC9UaGVtZS9jb2xvcnMubWpzIiwiLi4vLi4vLi4vdWktY29tcG9uZW50cy9idWlsZC9wcm92aWRlcnMvQXBwQ29uZmlndXJhdGlvblByb3ZpZGVyL0FwcENvbmZpZ3VyYXRpb25Qcm92aWRlci5tanMiLCIuLi8uLi8uLi91aS1jb21wb25lbnRzL2J1aWxkL3N0b3JlL3N0b3JhZ2UubWpzIiwiLi4vLi4vLi4vdWktY29tcG9uZW50cy9idWlsZC9zdG9yZS9hcGkubWpzIiwiLi4vLi4vLi4vdWktY29tcG9uZW50cy9idWlsZC9hcGkvdXNlLWRhdGEubWpzIiwiLi4vLi4vLi4vdWktY29tcG9uZW50cy9idWlsZC9jb25maWd1cmF0aW9uLm1qcyIsIi4uLy4uLy4uL3VpLWNvbXBvbmVudHMvYnVpbGQvc3RvcmUvcm91dGVzLm1qcyIsIi4uLy4uLy4uL3VpLWNvbXBvbmVudHMvYnVpbGQvc3RvcmUvdXRpbHMubWpzIiwiLi4vLi4vLi4vdWktY29tcG9uZW50cy9idWlsZC9wcm92aWRlcnMvVmVyc2lvblByb3ZpZGVyL1ZlcnNpb25Qcm92aWRlci5tanMiLCIuLi8uLi8uLi91aS1jb21wb25lbnRzL2J1aWxkL2hvb2tzL3VzZUxvY2FsU3RvcmFnZS5tanMiLCIuLi8uLi8uLi91aS1jb21wb25lbnRzL2J1aWxkL3Byb3ZpZGVycy9UcmFuc2xhdG9yUHJvdmlkZXIvVHJhbnNsYXRvclByb3ZpZGVyLm1qcyIsIi4uLy4uLy4uL3VpLWNvbXBvbmVudHMvYnVpbGQvcHJvdmlkZXJzL01hbmlmZXN0c1Byb3ZpZGVyL01hbmlmZXN0c1Byb3ZpZGVyLm1qcyIsIi4uLy4uLy4uL3VpLWNvbXBvbmVudHMvYnVpbGQvYXBpL3VzZS1kYXRhLW11dGF0aW9uLm1qcyIsIi4uLy4uLy4uL3VpLWNvbXBvbmVudHMvYnVpbGQvcHJvdmlkZXJzL0F1dGhQcm92aWRlci91dGlscy5tanMiLCIuLi8uLi8uLi91aS1jb21wb25lbnRzL2J1aWxkL3Byb3ZpZGVycy9BdXRoUHJvdmlkZXIvQXV0aFByb3ZpZGVyLm1qcyIsIi4uLy4uLy4uL3VpLWNvbXBvbmVudHMvYnVpbGQvcHJvdmlkZXJzL1BlcnNpc3RlbmNlU2V0dGluZ1Byb3ZpZGVyL1BlcnNpc3RlbmNlU2V0dGluZ1Byb3ZpZGVyLm1qcyIsIi4uLy4uLy4uL3VpLWNvbXBvbmVudHMvYnVpbGQvcHJvdmlkZXJzL1NlYXJjaFByb3ZpZGVyL1NlYXJjaFByb3ZpZGVyLm1qcyIsIi4uLy4uLy4uL3VpLWNvbXBvbmVudHMvYnVpbGQvcHJvdmlkZXJzL0Rvd25sb2FkUHJvdmlkZXIvRG93bmxvYWRQcm92aWRlci5tanMiLCIuLi8uLi8uLi91aS1jb21wb25lbnRzL2J1aWxkL2NvbXBvbmVudHMvTGluay9MaW5rLm1qcyIsIi4uLy4uLy4uL3VpLWNvbXBvbmVudHMvYnVpbGQvY29tcG9uZW50cy9WZXJzaW9ucy9zdHlsZXMubWpzIiwiLi4vLi4vLi4vdWktY29tcG9uZW50cy9idWlsZC9jb21wb25lbnRzL1ZlcnNpb25zL0hpc3RvcnlMaXN0Lm1qcyIsIi4uLy4uLy4uL3VpLWNvbXBvbmVudHMvYnVpbGQvY29tcG9uZW50cy9WZXJzaW9ucy9UYWdMaXN0Lm1qcyIsIi4uLy4uLy4uL3VpLWNvbXBvbmVudHMvYnVpbGQvY29tcG9uZW50cy9WZXJzaW9ucy9WZXJzaW9ucy5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19leHBvcnRBbGwgfSBmcm9tIFwiLi4vX3ZpcnR1YWwvX3JvbGxkb3duL3J1bnRpbWUubWpzXCI7XG5pbXBvcnQgeyBncmV5IH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWwvY29sb3JzXCI7XG4vLyNyZWdpb24gc3JjL1RoZW1lL2NvbG9ycy50c1xudmFyIGNvbG9yc19leHBvcnRzID0gLyogQF9fUFVSRV9fICovIF9fZXhwb3J0QWxsKHtcblx0UFJJTUFSWV9DT0xPUjogKCkgPT4gUFJJTUFSWV9DT0xPUixcblx0YmFzZUNvbG9yczogKCkgPT4gYmFzZUNvbG9ycyxcblx0Z3JleURhcms6ICgpID0+IGdyZXlEYXJrLFxuXHRncmV5TGlnaHQ6ICgpID0+IGdyZXlMaWdodCxcblx0Z3JleU1lZGl1bTogKCkgPT4gZ3JleU1lZGl1bVxufSk7XG52YXIgUFJJTUFSWV9DT0xPUiA9IFwiIzRiNWU0MFwiO1xudmFyIGJhc2VDb2xvcnMgPSB7XG5cdHByaW1hcnk6IHsgbWFpbjogUFJJTUFSWV9DT0xPUiB9LFxuXHRzZWNvbmRhcnk6IHsgbWFpbjogXCIjMjAyMzJhXCIgfVxufTtcbnZhciBncmV5RGFyayA9IGdyZXlbOTAwXTtcbnZhciBncmV5TWVkaXVtID0gZ3JleVs3MDBdO1xudmFyIGdyZXlMaWdodCA9IGdyZXlbMjAwXTtcbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgUFJJTUFSWV9DT0xPUiwgYmFzZUNvbG9ycywgY29sb3JzX2V4cG9ydHMsIGdyZXlEYXJrLCBncmV5TWVkaXVtIH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbG9ycy5tanMubWFwIiwiaW1wb3J0IHsgUFJJTUFSWV9DT0xPUiB9IGZyb20gXCIuLi8uLi9UaGVtZS9jb2xvcnMubWpzXCI7XG5pbXBvcnQgeyBqc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcbi8vI3JlZ2lvbiBzcmMvcHJvdmlkZXJzL0FwcENvbmZpZ3VyYXRpb25Qcm92aWRlci9BcHBDb25maWd1cmF0aW9uUHJvdmlkZXIudHN4XG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuXHRwcmltYXJ5Q29sb3I6IFBSSU1BUllfQ09MT1IsXG5cdHBrZ01hbmFnZXJzOiBbXG5cdFx0XCJ5YXJuXCIsXG5cdFx0XCJwbnBtXCIsXG5cdFx0XCJucG1cIlxuXHRdLFxuXHRzY29wZTogXCJcIixcblx0YmFzZTogXCJcIixcblx0ZmxhZ3M6IHt9LFxuXHRsb2dpbjogdHJ1ZSxcblx0dXJsX3ByZWZpeDogXCJcIixcblx0c2hvd0luZm86IHRydWUsXG5cdHNob3dTZXR0aW5nczogdHJ1ZSxcblx0c2hvd1RoZW1lU3dpdGNoOiB0cnVlLFxuXHRzaG93Rm9vdGVyOiB0cnVlLFxuXHRzaG93U2VhcmNoOiB0cnVlLFxuXHRzaG93UmF3OiB0cnVlLFxuXHRzaG93RG93bmxvYWRUYXJiYWxsOiB0cnVlLFxuXHRzaG93VXBsaW5rczogdHJ1ZSxcblx0aGlkZURlcHJlY2F0ZWRWZXJzaW9uczogZmFsc2UsXG5cdHRpdGxlOiBcIlZlcmRhY2Npb1wiXG59O1xuLyoqXG4qIE1lcmdlcyBkZWZhdWx0cywgd2luZG93IGdsb2JhbHMsIGFuZCBvcHRpb25hbCBsb2NhbCBvdmVycmlkZXMuXG4qL1xuZnVuY3Rpb24gZ2V0Q29uZmlndXJhdGlvbihvdmVycmlkZXMgPSB7fSkge1xuXHRjb25zdCB3aW5kb3dPcHRpb25zID0gd2luZG93Py5fX1ZFUkRBQ0NJT19CQVNFTkFNRV9VSV9PUFRJT05TIHx8IHt9O1xuXHRjb25zdCB1aUNvbmZpZ3VyYXRpb24gPSB7XG5cdFx0Li4uREVGQVVMVF9PUFRJT05TLFxuXHRcdC4uLndpbmRvd09wdGlvbnMsXG5cdFx0Li4ub3ZlcnJpZGVzLFxuXHRcdGZsYWdzOiB7XG5cdFx0XHQuLi5ERUZBVUxUX09QVElPTlMuZmxhZ3MsXG5cdFx0XHQuLi53aW5kb3dPcHRpb25zLmZsYWdzLFxuXHRcdFx0Li4ub3ZlcnJpZGVzLmZsYWdzXG5cdFx0fVxuXHR9O1xuXHRpZiAoIXVpQ29uZmlndXJhdGlvbi5wcmltYXJ5Q29sb3IpIHVpQ29uZmlndXJhdGlvbi5wcmltYXJ5Q29sb3IgPSBQUklNQVJZX0NPTE9SO1xuXHRyZXR1cm4gdWlDb25maWd1cmF0aW9uO1xufVxudmFyIEFwcENvbmZpZ3VyYXRpb25Db250ZXh0ID0gY3JlYXRlQ29udGV4dCh2b2lkIDApO1xudmFyIEFwcENvbmZpZ3VyYXRpb25Qcm92aWRlciA9ICh7IGNoaWxkcmVuLCBvdmVycmlkZUNvbmZpZyA9IHt9IH0pID0+IHtcblx0Y29uc3QgdmFsdWUgPSB1c2VNZW1vKCgpID0+ICh7IGNvbmZpZ09wdGlvbnM6IGdldENvbmZpZ3VyYXRpb24ob3ZlcnJpZGVDb25maWcpIH0pLCBbb3ZlcnJpZGVDb25maWddKTtcblx0cmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goQXBwQ29uZmlndXJhdGlvbkNvbnRleHQuUHJvdmlkZXIsIHtcblx0XHR2YWx1ZSxcblx0XHRjaGlsZHJlblxuXHR9KTtcbn07XG52YXIgdXNlQ29uZmlnID0gKCkgPT4ge1xuXHRjb25zdCBjdHggPSB1c2VDb250ZXh0KEFwcENvbmZpZ3VyYXRpb25Db250ZXh0KTtcblx0aWYgKCFjdHgpIHRocm93IG5ldyBFcnJvcihcInVzZUNvbmZpZyBtdXN0IGJlIHVzZWQgd2l0aGluIEFwcENvbmZpZ3VyYXRpb25Qcm92aWRlclwiKTtcblx0cmV0dXJuIGN0eDtcbn07XG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7IEFwcENvbmZpZ3VyYXRpb25Qcm92aWRlciwgdXNlQ29uZmlnIH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFwcENvbmZpZ3VyYXRpb25Qcm92aWRlci5tanMubWFwIiwiaW1wb3J0IG1lbW9yeVN0b3JhZ2UgZnJvbSBcImxvY2Fsc3RvcmFnZS1tZW1vcnlcIjtcbi8vI3JlZ2lvbiBzcmMvc3RvcmUvc3RvcmFnZS50c1xudmFyIHN0b3JhZ2U7XG50cnkge1xuXHRsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIl9fVEVTVF9fXCIsIFwiXCIpO1xuXHRsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcIl9fVEVTVF9fXCIpO1xuXHRzdG9yYWdlID0gbG9jYWxTdG9yYWdlO1xufSBjYXRjaCB7XG5cdHN0b3JhZ2UgPSBtZW1vcnlTdG9yYWdlO1xufVxuZnVuY3Rpb24gc2F2ZUF1dGgodXNlcm5hbWUsIHRva2VuKSB7XG5cdHN0b3JhZ2Uuc2V0SXRlbShcInVzZXJuYW1lXCIsIHVzZXJuYW1lKTtcblx0c3RvcmFnZS5zZXRJdGVtKFwidG9rZW5cIiwgdG9rZW4pO1xufVxuZnVuY3Rpb24gY2xlYXJBdXRoKCkge1xuXHRzdG9yYWdlLnJlbW92ZUl0ZW0oXCJ1c2VybmFtZVwiKTtcblx0c3RvcmFnZS5yZW1vdmVJdGVtKFwidG9rZW5cIik7XG59XG5mdW5jdGlvbiBnZXRBdXRoKCkge1xuXHRyZXR1cm4ge1xuXHRcdHVzZXJuYW1lOiBzdG9yYWdlLmdldEl0ZW0oXCJ1c2VybmFtZVwiKSxcblx0XHR0b2tlbjogc3RvcmFnZS5nZXRJdGVtKFwidG9rZW5cIilcblx0fTtcbn1cbnZhciBzdG9yYWdlX2RlZmF1bHQgPSBzdG9yYWdlO1xuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBjbGVhckF1dGgsIHN0b3JhZ2VfZGVmYXVsdCBhcyBkZWZhdWx0LCBnZXRBdXRoLCBzYXZlQXV0aCB9O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdG9yYWdlLm1qcy5tYXAiLCJpbXBvcnQgc3RvcmFnZV9kZWZhdWx0IGZyb20gXCIuL3N0b3JhZ2UubWpzXCI7XG4vLyNyZWdpb24gc3JjL3N0b3JlL2FwaS50c1xudmFyIEN1c3RvbUVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG5cdGNvZGU7XG5cdGNvbnN0cnVjdG9yKG1lc3NhZ2UsIGNvZGUpIHtcblx0XHRzdXBlcihtZXNzYWdlKTtcblx0XHR0aGlzLm5hbWUgPSBcIkN1c3RvbUVycm9yXCI7XG5cdFx0dGhpcy5jb2RlID0gY29kZSA/PyA1MDA7XG5cdH1cbn07XG4vKipcbiogSGFuZGxlcyByZXNwb25zZSBhY2NvcmRpbmcgdG8gY29udGVudCB0eXBlXG4qIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZVxuKiBAcmV0dXJucyB7cHJvbWlzZX1cbiovXG5mdW5jdGlvbiBoYW5kbGVSZXNwb25zZVR5cGUocmVzcG9uc2UpIHtcblx0aWYgKHJlc3BvbnNlLmhlYWRlcnMpIHtcblx0XHRjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpO1xuXHRcdGlmIChjb250ZW50VHlwZT8uaW5jbHVkZXMoXCJhcHBsaWNhdGlvbi9wZGZcIikpIHJldHVybiBQcm9taXNlLmFsbChbXG5cdFx0XHRyZXNwb25zZS5vayxcblx0XHRcdHJlc3BvbnNlLmJsb2IoKSxcblx0XHRcdHJlc3BvbnNlLnN0YXR1c1xuXHRcdF0pO1xuXHRcdGlmIChjb250ZW50VHlwZT8uaW5jbHVkZXMoXCJhcHBsaWNhdGlvbi9qc29uXCIpKSByZXR1cm4gUHJvbWlzZS5hbGwoW1xuXHRcdFx0cmVzcG9uc2Uub2ssXG5cdFx0XHRyZXNwb25zZS5qc29uKCksXG5cdFx0XHRyZXNwb25zZS5zdGF0dXNcblx0XHRdKTtcblx0XHRpZiAoY29udGVudFR5cGU/LmluY2x1ZGVzKFwidGV4dC9cIikpIHJldHVybiBQcm9taXNlLmFsbChbXG5cdFx0XHRyZXNwb25zZS5vayxcblx0XHRcdHJlc3BvbnNlLnRleHQoKSxcblx0XHRcdHJlc3BvbnNlLnN0YXR1c1xuXHRcdF0pO1xuXHRcdGlmIChyZXNwb25zZS51cmwgJiYgcmVzcG9uc2UudXJsLmVuZHNXaXRoKFwiLnRnelwiKSA9PT0gdHJ1ZSkgcmV0dXJuIFByb21pc2UuYWxsKFtcblx0XHRcdHJlc3BvbnNlLm9rLFxuXHRcdFx0cmVzcG9uc2UuYmxvYigpLFxuXHRcdFx0cmVzcG9uc2Uuc3RhdHVzXG5cdFx0XSk7XG5cdH1cblx0cmV0dXJuIFByb21pc2UuYWxsKFtcblx0XHRyZXNwb25zZS5vayxcblx0XHRyZXNwb25zZS50ZXh0KCksXG5cdFx0cmVzcG9uc2Uuc3RhdHVzXG5cdF0pO1xufVxudmFyIEF1dGhIZWFkZXIgPSBcIkF1dGhvcml6YXRpb25cIjtcbnZhciBBUEkgPSBjbGFzcyB7XG5cdHJlcXVlc3QodXJsLCBtZXRob2QgPSBcIkdFVFwiLCBvcHRpb25zID0geyBoZWFkZXJzOiB7fSB9KSB7XG5cdFx0Y29uc3QgdG9rZW4gPSBzdG9yYWdlX2RlZmF1bHQuZ2V0SXRlbShcInRva2VuXCIpO1xuXHRcdGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpO1xuXHRcdGlmICh0b2tlbiAmJiBoZWFkZXJzLmhhcyhBdXRoSGVhZGVyKSA9PT0gZmFsc2UpIHtcblx0XHRcdGhlYWRlcnMuc2V0KEF1dGhIZWFkZXIsIGBCZWFyZXIgJHt0b2tlbn1gKTtcblx0XHRcdG9wdGlvbnMuaGVhZGVycyA9IGhlYWRlcnM7XG5cdFx0fVxuXHRcdGhlYWRlcnMuc2V0KFwieC1jbGllbnRcIiwgXCJ2ZXJkYWNjaW8tdWlcIik7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGZldGNoKHVybCwge1xuXHRcdFx0XHRtZXRob2QsXG5cdFx0XHRcdGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdHNpZ25hbDogb3B0aW9ucy5zaWduYWwsXG5cdFx0XHRcdC4uLm9wdGlvbnNcblx0XHRcdH0pLnRoZW4oaGFuZGxlUmVzcG9uc2VUeXBlKS50aGVuKChyZXNwb25zZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBbb2ssIGRhdGEsIHN0YXR1c10gPSByZXNwb25zZTtcblx0XHRcdFx0aWYgKG9rID09PSB0cnVlKSByZXNvbHZlKGRhdGEpO1xuXHRcdFx0XHRlbHNlIHJlamVjdChuZXcgQ3VzdG9tRXJyb3IodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgPyBkYXRhIDogZGF0YT8uZXJyb3IgPz8gZGF0YT8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIiwgc3RhdHVzKSk7XG5cdFx0XHR9KS5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG59O1xudmFyIGFwaV9kZWZhdWx0ID0gbmV3IEFQSSgpO1xuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBhcGlfZGVmYXVsdCBhcyBkZWZhdWx0IH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwaS5tanMubWFwIiwiaW1wb3J0IGFwaV9kZWZhdWx0IGZyb20gXCIuLi9zdG9yZS9hcGkubWpzXCI7XG5pbXBvcnQgdXNlU1dSIGZyb20gXCJzd3JcIjtcbi8vI3JlZ2lvbiBzcmMvYXBpL3VzZS1kYXRhLnRzXG5mdW5jdGlvbiBidWlsZFVybChiYXNlUGF0aCwgcm91dGUsIHBhY2thZ2VOYW1lLCBwYWNrYWdlVmVyc2lvbikge1xuXHRsZXQgdXJsID0gYCR7YmFzZVBhdGh9JHtyb3V0ZX1gO1xuXHRpZiAocGFja2FnZU5hbWUpIHVybCArPSBwYWNrYWdlTmFtZTtcblx0aWYgKHBhY2thZ2VWZXJzaW9uKSB1cmwgKz0gYD92PSR7cGFja2FnZVZlcnNpb259YDtcblx0cmV0dXJuIHVybDtcbn1cbmZ1bmN0aW9uIHVzZURhdGEoYmFzZVBhdGgsIHJvdXRlLCBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24pIHtcblx0Y29uc3QgdXJsID0gYnVpbGRVcmwoYmFzZVBhdGgsIHJvdXRlLCBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24pO1xuXHRjb25zdCB7IGRhdGEsIGVycm9yLCBpc0xvYWRpbmcsIG11dGF0ZSB9ID0gdXNlU1dSKHVybCwgKCkgPT4gYXBpX2RlZmF1bHQucmVxdWVzdCh1cmwpKTtcblx0cmV0dXJuIHtcblx0XHRkYXRhLFxuXHRcdGVycm9yLFxuXHRcdGlzTG9hZGluZyxcblx0XHRtdXRhdGVcblx0fTtcbn1cbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgdXNlRGF0YSB9O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2UtZGF0YS5tanMubWFwIiwiLy8jcmVnaW9uIHNyYy9jb25maWd1cmF0aW9uLnRzXG52YXIgZGVmYXVsdFZhbHVlcyA9IHtcblx0cHJpbWFyeUNvbG9yOiBcIiNmZmZmZmZcIixcblx0ZGFya01vZGU6IGZhbHNlLFxuXHRwa2dNYW5hZ2VyczogW1xuXHRcdFwieWFyblwiLFxuXHRcdFwicG5wbVwiLFxuXHRcdFwibnBtXCJcblx0XSxcblx0c2NvcGU6IFwiXCIsXG5cdGJhc2U6IFwiXCIsXG5cdGxvZ2luOiB0cnVlLFxuXHRmbGFnczoge30sXG5cdHVybF9wcmVmaXg6IFwiXCIsXG5cdHRpdGxlOiBcIlZlcmRhY2Npb1wiXG59O1xuZnVuY3Rpb24gZ2V0Q29uZmlndXJhdGlvbigpIHtcblx0cmV0dXJuIHdpbmRvdz8uX19WRVJEQUNDSU9fQkFTRU5BTUVfVUlfT1BUSU9OUyA/PyBkZWZhdWx0VmFsdWVzO1xufVxuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBnZXRDb25maWd1cmF0aW9uIH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmZpZ3VyYXRpb24ubWpzLm1hcCIsIi8vI3JlZ2lvbiBzcmMvc3RvcmUvcm91dGVzLnRzXG4vKipcbiogQGRlcHJlY2F0ZWQgdXNlIEFQSVJvdXRlIGluIHV0aWxzL3JvdXRlcy50c1xuKi9cbnZhciBBUElSb3V0ZSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihBUElSb3V0ZSkge1xuXHRBUElSb3V0ZVtcIkxPR0lOXCJdID0gXCIvLS92ZXJkYWNjaW8vc2VjL2xvZ2luXCI7XG5cdEFQSVJvdXRlW1wiU0lHTlVQXCJdID0gXCIvLS92ZXJkYWNjaW8vc2VjL3NpZ251cFwiO1xuXHRBUElSb3V0ZVtcIkNPTkZJR1wiXSA9IFwiLy0vdmVyZGFjY2lvL3BhY2thZ2VzXCI7XG5cdEFQSVJvdXRlW1wiUEFDS0FHRVNcIl0gPSBcIi8tL3ZlcmRhY2Npby9kYXRhL3BhY2thZ2VzXCI7XG5cdEFQSVJvdXRlW1wiU0VBUkNIXCJdID0gXCIvLS92ZXJkYWNjaW8vZGF0YS9zZWFyY2gvXCI7XG5cdEFQSVJvdXRlW1wiU0lERUJBUlwiXSA9IFwiLy0vdmVyZGFjY2lvL2RhdGEvc2lkZWJhci9cIjtcblx0QVBJUm91dGVbXCJSRUFETUVcIl0gPSBcIi8tL3ZlcmRhY2Npby9kYXRhL3BhY2thZ2UvcmVhZG1lL1wiO1xuXHRyZXR1cm4gQVBJUm91dGU7XG59KHt9KTtcbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgQVBJUm91dGUgfTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cm91dGVzLm1qcy5tYXAiLCIvLyNyZWdpb24gc3JjL3N0b3JlL3V0aWxzLnRzXG52YXIgSEVBREVSUyA9IHsgSlNPTjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfTtcbmZ1bmN0aW9uIHN0cmlwVHJhaWxpbmdTbGFzaCh1cmwpIHtcblx0cmV0dXJuIHVybC5yZXBsYWNlKC9cXC8kLywgXCJcIik7XG59XG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7IEhFQURFUlMsIHN0cmlwVHJhaWxpbmdTbGFzaCB9O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5tanMubWFwIiwiaW1wb3J0IHsgdXNlRGF0YSB9IGZyb20gXCIuLi8uLi9hcGkvdXNlLWRhdGEubWpzXCI7XG5pbXBvcnQgeyBnZXRDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb24ubWpzXCI7XG5pbXBvcnQgeyBBUElSb3V0ZSB9IGZyb20gXCIuLi8uLi9zdG9yZS9yb3V0ZXMubWpzXCI7XG5pbXBvcnQgeyBzdHJpcFRyYWlsaW5nU2xhc2ggfSBmcm9tIFwiLi4vLi4vc3RvcmUvdXRpbHMubWpzXCI7XG5pbXBvcnQgeyBqc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVBhcmFtcyB9IGZyb20gXCJyZWFjdC1yb3V0ZXJcIjtcbi8vI3JlZ2lvbiBzcmMvcHJvdmlkZXJzL1ZlcnNpb25Qcm92aWRlci9WZXJzaW9uUHJvdmlkZXIudHN4XG5mdW5jdGlvbiBnZXRSb3V0ZXJQYWNrYWdlTmFtZShwYWNrYWdlTmFtZSwgc2NvcGUpIHtcblx0cmV0dXJuIHNjb3BlID8gYCR7c2NvcGV9LyR7cGFja2FnZU5hbWV9YCA6IHBhY2thZ2VOYW1lO1xufVxudmFyIERldGFpbENvbnRleHQgPSBjcmVhdGVDb250ZXh0KHZvaWQgMCk7XG52YXIgVmVyc2lvblByb3ZpZGVyID0gKHsgY2hpbGRyZW4gfSkgPT4ge1xuXHRjb25zdCB7IHNjb3BlLCBwYWNrYWdlOiBwa2dOYW1lLCB2ZXJzaW9uOiBwYWNrYWdlVmVyc2lvbiB9ID0gdXNlUGFyYW1zKCk7XG5cdGNvbnN0IGJhc2VQYXRoID0gc3RyaXBUcmFpbGluZ1NsYXNoKGdldENvbmZpZ3VyYXRpb24oKS5iYXNlKTtcblx0Y29uc3QgcGFja2FnZU5hbWUgPSBnZXRSb3V0ZXJQYWNrYWdlTmFtZShwa2dOYW1lID8/IFwiXCIsIHNjb3BlKTtcblx0Y29uc3QgcmVhZG1lRGF0YSA9IHVzZURhdGEoYmFzZVBhdGgsIEFQSVJvdXRlLlJFQURNRSwgcGFja2FnZU5hbWUsIHBhY2thZ2VWZXJzaW9uKTtcblx0Y29uc3Qgc2lkZWJhckRhdGEgPSB1c2VEYXRhKGJhc2VQYXRoLCBBUElSb3V0ZS5TSURFQkFSLCBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24pO1xuXHRjb25zdCBpc0xvYWRpbmcgPSByZWFkbWVEYXRhLmlzTG9hZGluZyB8fCBzaWRlYmFyRGF0YS5pc0xvYWRpbmc7XG5cdGNvbnN0IGVycm9yID0gcmVhZG1lRGF0YS5lcnJvciB8fCBzaWRlYmFyRGF0YS5lcnJvcjtcblx0Y29uc3QgZXJyb3JDb2RlID0gcmVhZG1lRGF0YS5lcnJvcj8uY29kZSA/PyBzaWRlYmFyRGF0YS5lcnJvcj8uY29kZTtcblx0Y29uc3QgdmFsdWUgPSB1c2VNZW1vKCgpID0+ICh7XG5cdFx0cGFja2FnZU1ldGE6IHNpZGViYXJEYXRhLmRhdGEsXG5cdFx0cmVhZE1lOiByZWFkbWVEYXRhLmRhdGEsXG5cdFx0cGFja2FnZU5hbWUsXG5cdFx0cGFja2FnZVZlcnNpb24sXG5cdFx0aXNMb2FkaW5nLFxuXHRcdGlzRm9yYmlkZGVuOiBlcnJvckNvZGUgPT09IDQwMyxcblx0XHRpc1VuQXV0aG9yaXplZDogZXJyb3JDb2RlID09PSA0MDEsXG5cdFx0aGFzTm90QmVlbkZvdW5kOiBlcnJvckNvZGUgPT09IDQwNCxcblx0XHRpc0Vycm9yOiBlcnJvckNvZGUgIT09IHZvaWQgMCxcblx0XHRlcnJvclxuXHR9KSwgW1xuXHRcdHNpZGViYXJEYXRhLmRhdGEsXG5cdFx0cmVhZG1lRGF0YS5kYXRhLFxuXHRcdHBhY2thZ2VOYW1lLFxuXHRcdHBhY2thZ2VWZXJzaW9uLFxuXHRcdGlzTG9hZGluZyxcblx0XHRlcnJvckNvZGUsXG5cdFx0ZXJyb3Jcblx0XSk7XG5cdHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KERldGFpbENvbnRleHQuUHJvdmlkZXIsIHtcblx0XHR2YWx1ZSxcblx0XHRjaGlsZHJlblxuXHR9KTtcbn07XG52YXIgdXNlVmVyc2lvbiA9ICgpID0+IHtcblx0Y29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRGV0YWlsQ29udGV4dCk7XG5cdGlmIChjb250ZXh0ID09PSB2b2lkIDApIHRocm93IG5ldyBFcnJvcihcInVzZVZlcnNpb24gbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFZlcnNpb25Qcm92aWRlclwiKTtcblx0cmV0dXJuIGNvbnRleHQ7XG59O1xuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBWZXJzaW9uUHJvdmlkZXIgYXMgZGVmYXVsdCwgdXNlVmVyc2lvbiB9O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1WZXJzaW9uUHJvdmlkZXIubWpzLm1hcCIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG4vLyNyZWdpb24gc3JjL2hvb2tzL3VzZUxvY2FsU3RvcmFnZS50c1xuLyoqXG4qIFxuKiAgQGV4YW1wbGVcbmBgYGpzeFxuY29uc3QgW2lzRGFya01vZGVTdG9yYWdlLCBzZXRJc0RhcmtNb2RlXSA9IHVzZUxvY2FsU3RvcmFnZSgnZGFya01vZGUnLCBpc0RhcmtNb2RlRGVmYXVsdCk7XG5gYGBcblxuYmFzZWQgb24gaHR0cHM6Ly91c2Vob29rcy5jb20vdXNlTG9jYWxTdG9yYWdlL1xuQGNhdGVnb3J5IEhvb2tzXG4qL1xudmFyIHVzZUxvY2FsU3RvcmFnZSA9IChrZXksIGluaXRpYWxWYWx1ZSkgPT4ge1xuXHRjb25zdCBbc3RvcmVkVmFsdWUsIHNldFN0b3JlZFZhbHVlXSA9IHVzZVN0YXRlKCgpID0+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgaXRlbSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuXHRcdFx0cmV0dXJuIGl0ZW0gPyBKU09OLnBhcnNlKGl0ZW0pIDogaW5pdGlhbFZhbHVlO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiQW4gZXJyb3Igb2NjdXJyZWQgZ2V0dGluZyBhIHNlc3Npb25TdG9yYWdlIGtleVwiLCBlcnJvcik7XG5cdFx0XHRyZXR1cm4gaW5pdGlhbFZhbHVlO1xuXHRcdH1cblx0fSk7XG5cdGNvbnN0IHNldFZhbHVlID0gKHZhbHVlKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHZhbHVlVG9TdG9yZSA9IHZhbHVlIGluc3RhbmNlb2YgRnVuY3Rpb24gPyB2YWx1ZShzdG9yZWRWYWx1ZSkgOiB2YWx1ZTtcblx0XHRcdHNldFN0b3JlZFZhbHVlKHZhbHVlVG9TdG9yZSk7XG5cdFx0XHR3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeSh2YWx1ZVRvU3RvcmUpKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIkFuIGVycm9yIG9jY3VycmVkIHdyaXRpbmcgdG8gc2Vzc2lvblN0b3JhZ2VcIiwgZXJyb3IpO1xuXHRcdH1cblx0fTtcblx0cmV0dXJuIFtzdG9yZWRWYWx1ZSwgc2V0VmFsdWVdO1xufTtcbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgdXNlTG9jYWxTdG9yYWdlIGFzIGRlZmF1bHQgfTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlTG9jYWxTdG9yYWdlLm1qcy5tYXAiLCJpbXBvcnQgdXNlTG9jYWxTdG9yYWdlIGZyb20gXCIuLi8uLi9ob29rcy91c2VMb2NhbFN0b3JhZ2UubWpzXCI7XG5pbXBvcnQgeyBqc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEkxOG5leHRQcm92aWRlciB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG4vLyNyZWdpb24gc3JjL3Byb3ZpZGVycy9UcmFuc2xhdG9yUHJvdmlkZXIvVHJhbnNsYXRvclByb3ZpZGVyLnRzeFxudmFyIEkxOG5UcmFuc2xhdG9yQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuXHRzZXRMYW5ndWFnZTogKF9sbmcpID0+IHt9LFxuXHRsYW5ndWFnZTogXCJlbi1VU1wiLFxuXHRsaXN0TGFuZ3VhZ2VzOiBbXVxufSk7XG4vKipcbiogVHJhbnNsYXRvciBwcm92aWRlclxuKiBAY2F0ZWdvcnkgUHJvdmlkZXJcbiovXG52YXIgVHJhbnNsYXRvclByb3ZpZGVyID0gKHsgY2hpbGRyZW4sIG9uTW91bnQsIGkxOG4sIGxpc3RMYW5ndWFnZXMgfSkgPT4ge1xuXHRjb25zdCBjdXJyZW50TGFuZ3VhZ2UgPSBpMThuLmxhbmd1YWdlcz8uWzBdO1xuXHRjb25zdCBbbGFuZ3VhZ2UsIHNldExhbmd1YWdlXSA9IHVzZUxvY2FsU3RvcmFnZShcImxhbmd1YWdlXCIsIGN1cnJlbnRMYW5ndWFnZSk7XG5cdGNvbnN0IGNoYW5nZUxhbmd1YWdlID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuXHRcdGF3YWl0IGkxOG4uY2hhbmdlTGFuZ3VhZ2UobGFuZ3VhZ2UpO1xuXHR9LCBbaTE4biwgbGFuZ3VhZ2VdKTtcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRjaGFuZ2VMYW5ndWFnZSgpO1xuXHRcdG9uTW91bnQoKTtcblx0fSwgW1xuXHRcdGxhbmd1YWdlLFxuXHRcdG9uTW91bnQsXG5cdFx0Y2hhbmdlTGFuZ3VhZ2Vcblx0XSk7XG5cdHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEkxOG5leHRQcm92aWRlciwge1xuXHRcdGkxOG4sXG5cdFx0Y2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goSTE4blRyYW5zbGF0b3JDb250ZXh0LlByb3ZpZGVyLCB7XG5cdFx0XHR2YWx1ZToge1xuXHRcdFx0XHRzZXRMYW5ndWFnZSxcblx0XHRcdFx0bGFuZ3VhZ2UsXG5cdFx0XHRcdGxpc3RMYW5ndWFnZXNcblx0XHRcdH0sXG5cdFx0XHRjaGlsZHJlblxuXHRcdH0pXG5cdH0pO1xufTtcbnZhciB1c2VMYW5ndWFnZSA9ICgpID0+IHVzZUNvbnRleHQoSTE4blRyYW5zbGF0b3JDb250ZXh0KTtcbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgVHJhbnNsYXRvclByb3ZpZGVyIGFzIGRlZmF1bHQsIHVzZUxhbmd1YWdlIH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRyYW5zbGF0b3JQcm92aWRlci5tanMubWFwIiwiaW1wb3J0IHsgdXNlRGF0YSB9IGZyb20gXCIuLi8uLi9hcGkvdXNlLWRhdGEubWpzXCI7XG5pbXBvcnQgeyBnZXRDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb24ubWpzXCI7XG5pbXBvcnQgeyBBUElSb3V0ZSB9IGZyb20gXCIuLi8uLi9zdG9yZS9yb3V0ZXMubWpzXCI7XG5pbXBvcnQgeyBzdHJpcFRyYWlsaW5nU2xhc2ggfSBmcm9tIFwiLi4vLi4vc3RvcmUvdXRpbHMubWpzXCI7XG5pbXBvcnQgeyBqc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcbi8vI3JlZ2lvbiBzcmMvcHJvdmlkZXJzL01hbmlmZXN0c1Byb3ZpZGVyL01hbmlmZXN0c1Byb3ZpZGVyLnRzeFxudmFyIE1hbmlmZXN0c0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KHt9KTtcbnZhciBjb25maWd1cmF0aW9uID0gZ2V0Q29uZmlndXJhdGlvbigpO1xudmFyIE1hbmlmZXN0c1Byb3ZpZGVyID0gKHsgY2hpbGRyZW4gfSkgPT4ge1xuXHRjb25zdCBkYXRhID0gdXNlRGF0YShzdHJpcFRyYWlsaW5nU2xhc2goY29uZmlndXJhdGlvbi5iYXNlKSwgQVBJUm91dGUuUEFDS0FHRVMpO1xuXHRyZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChNYW5pZmVzdHNDb250ZXh0LlByb3ZpZGVyLCB7XG5cdFx0dmFsdWU6IHtcblx0XHRcdG1hbmlmZXN0czogZGF0YS5kYXRhID8/IFtdLFxuXHRcdFx0aXNMb2FkaW5nOiBkYXRhLmlzTG9hZGluZyxcblx0XHRcdGlzRXJyb3I6IHR5cGVvZiBkYXRhLmVycm9yPy5jb2RlICE9PSBcInVuZGVmaW5lZFwiXG5cdFx0fSxcblx0XHRjaGlsZHJlblxuXHR9KTtcbn07XG52YXIgdXNlTWFuaWZlc3RzID0gKCkgPT4gdXNlQ29udGV4dChNYW5pZmVzdHNDb250ZXh0KTtcbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgTWFuaWZlc3RzUHJvdmlkZXIgYXMgZGVmYXVsdCwgdXNlTWFuaWZlc3RzIH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1hbmlmZXN0c1Byb3ZpZGVyLm1qcy5tYXAiLCJpbXBvcnQgYXBpX2RlZmF1bHQgZnJvbSBcIi4uL3N0b3JlL2FwaS5tanNcIjtcbmltcG9ydCB7IEhFQURFUlMgfSBmcm9tIFwiLi4vc3RvcmUvdXRpbHMubWpzXCI7XG5pbXBvcnQgdXNlU1dSTXV0YXRpb24gZnJvbSBcInN3ci9tdXRhdGlvblwiO1xuLy8jcmVnaW9uIHNyYy9hcGkvdXNlLWRhdGEtbXV0YXRpb24udHNcbnZhciBmZXRjaGVyID0gYXN5bmMgKHVybCwgbWV0aG9kLCBib2R5LCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IGlzR2V0ID0gbWV0aG9kLnRvVXBwZXJDYXNlKCkgPT09IFwiR0VUXCI7XG5cdGNvbnN0IGZpbmFsVXJsID0gdXJsO1xuXHRyZXR1cm4gYXBpX2RlZmF1bHQucmVxdWVzdChmaW5hbFVybCwgbWV0aG9kLCB7XG5cdFx0Ym9keTogaXNHZXQgPyB2b2lkIDAgOiBKU09OLnN0cmluZ2lmeShib2R5KSxcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHRBY2NlcHQ6IEhFQURFUlMuSlNPTixcblx0XHRcdC4uLmlzR2V0ID8ge30gOiB7IFwiQ29udGVudC1UeXBlXCI6IEhFQURFUlMuSlNPTiB9XG5cdFx0fSxcblx0XHRzaWduYWw6IG9wdGlvbnM/LnNpZ25hbFxuXHR9KTtcbn07XG5mdW5jdGlvbiB1c2VEYXRhTXV0YXRpb24oYmFzZVBhdGgsIHJvdXRlLCBtZXRob2QgPSBcIlBPU1RcIiwgb3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IHsgZGF0YSwgZXJyb3IsIGlzTXV0YXRpbmcsIHRyaWdnZXIgfSA9IHVzZVNXUk11dGF0aW9uKG9wdGlvbnMuYnVpbGRVcmwgPyBvcHRpb25zLmJ1aWxkVXJsKGJhc2VQYXRoLCByb3V0ZSkgOiBgJHtiYXNlUGF0aH0ke3JvdXRlfWAsICh1cmwsIHsgYXJnIH0pID0+IHtcblx0XHRyZXR1cm4gZmV0Y2hlcih1cmwsIG1ldGhvZCwgYXJnID8/IHt9KTtcblx0fSk7XG5cdHJldHVybiB7XG5cdFx0ZGF0YSxcblx0XHRlcnJvcixcblx0XHRpc011dGF0aW5nLFxuXHRcdHRyaWdnZXJcblx0fTtcbn1cbmFzeW5jIGZ1bmN0aW9uIHRhcmJhbGxGZXRjaGVyKHVybCwgeyBhcmcgfSkge1xuXHRyZXR1cm4gYXBpX2RlZmF1bHQucmVxdWVzdChhcmcubGluaywgXCJHRVRcIiwge1xuXHRcdGhlYWRlcnM6IHsgYWNjZXB0OiBcInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjgsYXBwbGljYXRpb24vc2lnbmVkLWV4Y2hhbmdlO3Y9YjNcIiB9LFxuXHRcdGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIlxuXHR9KTtcbn1cbmZ1bmN0aW9uIHVzZVRhcmJhbGxEb3dubG9hZCgpIHtcblx0Y29uc3QgeyB0cmlnZ2VyLCBpc011dGF0aW5nLCBlcnJvciB9ID0gdXNlU1dSTXV0YXRpb24oXCJ0YXJiYWxsLWRvd25sb2FkXCIsIHRhcmJhbGxGZXRjaGVyKTtcblx0cmV0dXJuIHtcblx0XHRkb3dubG9hZDogdHJpZ2dlcixcblx0XHRpc0Rvd25sb2FkaW5nOiBpc011dGF0aW5nLFxuXHRcdGVycm9yXG5cdH07XG59XG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7IGZldGNoZXIsIHVzZURhdGFNdXRhdGlvbiwgdXNlVGFyYmFsbERvd25sb2FkIH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZS1kYXRhLW11dGF0aW9uLm1qcy5tYXAiLCJpbXBvcnQgeyBpc1Rva2VuRXhwaXJlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3Rva2VuLm1qc1wiO1xuaW1wb3J0IFwiLi4vLi4vdXRpbHMvaW5kZXgubWpzXCI7XG5pbXBvcnQgeyBnZXRBdXRoIH0gZnJvbSBcIi4uLy4uL3N0b3JlL3N0b3JhZ2UubWpzXCI7XG4vLyNyZWdpb24gc3JjL3Byb3ZpZGVycy9BdXRoUHJvdmlkZXIvdXRpbHMudHNcbmZ1bmN0aW9uIGdldERlZmF1bHRVc2VyU3RhdGUoKSB7XG5cdGNvbnN0IHsgdG9rZW4sIHVzZXJuYW1lIH0gPSBnZXRBdXRoKCk7XG5cdHJldHVybiBpc1Rva2VuRXhwaXJlKHRva2VuKSA/IHtcblx0XHR0b2tlbjogbnVsbCxcblx0XHR1c2VybmFtZTogbnVsbFxuXHR9IDoge1xuXHRcdHRva2VuLFxuXHRcdHVzZXJuYW1lXG5cdH07XG59XG5mdW5jdGlvbiBub3JtYWxpemVBdXRoRXJyb3IoZXJyKSB7XG5cdGNvbnN0IG1lc3NhZ2UgPSBlcnI/LmluZm8/Lm1lc3NhZ2UgfHwgZXJyPy5yZXNwb25zZT8uZGF0YT8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgXCJBdXRoZW50aWNhdGlvbiBmYWlsZWRcIjtcblx0cmV0dXJuIG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgZ2V0RGVmYXVsdFVzZXJTdGF0ZSwgbm9ybWFsaXplQXV0aEVycm9yIH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLm1qcy5tYXAiLCJpbXBvcnQgeyBjbGVhckF1dGgsIHNhdmVBdXRoIH0gZnJvbSBcIi4uLy4uL3N0b3JlL3N0b3JhZ2UubWpzXCI7XG5pbXBvcnQgeyBnZXRDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb24ubWpzXCI7XG5pbXBvcnQgeyBBUElSb3V0ZSB9IGZyb20gXCIuLi8uLi9zdG9yZS9yb3V0ZXMubWpzXCI7XG5pbXBvcnQgeyBzdHJpcFRyYWlsaW5nU2xhc2ggfSBmcm9tIFwiLi4vLi4vc3RvcmUvdXRpbHMubWpzXCI7XG5pbXBvcnQgeyB1c2VEYXRhTXV0YXRpb24gfSBmcm9tIFwiLi4vLi4vYXBpL3VzZS1kYXRhLW11dGF0aW9uLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFVzZXJTdGF0ZSB9IGZyb20gXCIuL3V0aWxzLm1qc1wiO1xuaW1wb3J0IHsganN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG4vLyNyZWdpb24gc3JjL3Byb3ZpZGVycy9BdXRoUHJvdmlkZXIvQXV0aFByb3ZpZGVyLnRzeFxudmFyIEF1dGhDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG5cdHVzZXJTdGF0ZToge1xuXHRcdHRva2VuOiBudWxsLFxuXHRcdHVzZXJuYW1lOiBudWxsXG5cdH0sXG5cdHNldFVzZXJTdGF0ZTogKCkgPT4ge30sXG5cdGhhbmRsZUxvZ2luOiBhc3luYyAoKSA9PiB7fSxcblx0bG9nT3V0VXNlcjogKCkgPT4ge31cbn0pO1xudmFyIGJhc2VQYXRoID0gc3RyaXBUcmFpbGluZ1NsYXNoKGdldENvbmZpZ3VyYXRpb24oKS5iYXNlKTtcbnZhciBBdXRoUHJvdmlkZXIgPSAoeyBjaGlsZHJlbiB9KSA9PiB7XG5cdGNvbnN0IFt1c2VyU3RhdGUsIHNldFVzZXJTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZShnZXREZWZhdWx0VXNlclN0YXRlKCkpO1xuXHRjb25zdCB7IGRhdGEsIGlzTXV0YXRpbmcsIHRyaWdnZXIgfSA9IHVzZURhdGFNdXRhdGlvbihiYXNlUGF0aCwgQVBJUm91dGUuTE9HSU4sIFwiUE9TVFwiKTtcblx0Y29uc3QgaGFuZGxlTG9naW4gPSBhc3luYyAoYm9keSkgPT4ge1xuXHRcdGF3YWl0IHRyaWdnZXIoYm9keSk7XG5cdH07XG5cdGNvbnN0IGxvZ091dFVzZXIgPSAoKSA9PiB7XG5cdFx0c2V0VXNlclN0YXRlKGdldERlZmF1bHRVc2VyU3RhdGUoKSk7XG5cdFx0Y2xlYXJBdXRoKCk7XG5cdFx0d2luZG93LmxvY2F0aW9uPy5yZWxvYWQoKTtcblx0fTtcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoZGF0YSAmJiAhaXNNdXRhdGluZykge1xuXHRcdFx0c2V0VXNlclN0YXRlKGRhdGEpO1xuXHRcdFx0aWYgKGRhdGEudXNlcm5hbWUgJiYgZGF0YS50b2tlbikgc2F2ZUF1dGgoZGF0YS51c2VybmFtZSwgZGF0YS50b2tlbik7XG5cdFx0fVxuXHR9LCBbZGF0YSwgaXNNdXRhdGluZ10pO1xuXHRyZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChBdXRoQ29udGV4dC5Qcm92aWRlciwge1xuXHRcdHZhbHVlOiB7XG5cdFx0XHRoYW5kbGVMb2dpbixcblx0XHRcdHVzZXJTdGF0ZSxcblx0XHRcdGxvZ091dFVzZXIsXG5cdFx0XHRzZXRVc2VyU3RhdGVcblx0XHR9LFxuXHRcdGNoaWxkcmVuXG5cdH0pO1xufTtcbnZhciB1c2VBdXRoID0gKCkgPT4gdXNlQ29udGV4dChBdXRoQ29udGV4dCk7XG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7IEF1dGhDb250ZXh0LCBBdXRoUHJvdmlkZXIsIHVzZUF1dGggfTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXV0aFByb3ZpZGVyLm1qcy5tYXAiLCJpbXBvcnQgdXNlTG9jYWxTdG9yYWdlIGZyb20gXCIuLi8uLi9ob29rcy91c2VMb2NhbFN0b3JhZ2UubWpzXCI7XG5pbXBvcnQgeyBqc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuLy8jcmVnaW9uIHNyYy9wcm92aWRlcnMvUGVyc2lzdGVuY2VTZXR0aW5nUHJvdmlkZXIvUGVyc2lzdGVuY2VTZXR0aW5nUHJvdmlkZXIudHN4XG52YXIgUGVyc2lzdGVuY2VTZXR0aW5nQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuXHRpc0xhdGVzdDogZmFsc2UsXG5cdGlzR2xvYmFsOiBmYWxzZSxcblx0eWFybk1vZGVybjogZmFsc2Vcbn0pO1xudmFyIFBlcnNpc3RlbmNlU2V0dGluZ1Byb3ZpZGVyID0gKHsgY2hpbGRyZW4gfSkgPT4ge1xuXHRjb25zdCBbc2V0dGluZ3MsIHNldFNldHRpbmdzXSA9IHVzZUxvY2FsU3RvcmFnZShgc2V0dGluZ3MtdWktdmVyZGFjY2lvYCwge30pO1xuXHRjb25zdCBbbG9jYWxTZXR0aW5ncywgc2V0TG9jYWxTZXR0aW5nc10gPSB1c2VTdGF0ZShzZXR0aW5ncyA/IHNldHRpbmdzIDoge30pO1xuXHRjb25zdCB1cGRhdGVTZXR0aW5ncyA9IHVzZUNhbGxiYWNrKChuZXdTZXR0aW5ncykgPT4ge1xuXHRcdHNldExvY2FsU2V0dGluZ3MobmV3U2V0dGluZ3MpO1xuXHRcdHNldFNldHRpbmdzKG5ld1NldHRpbmdzKTtcblx0fSwgW3NldFNldHRpbmdzXSk7XG5cdGNvbnN0IHZhbHVlID0gdXNlTWVtbygoKSA9PiAoe1xuXHRcdGxvY2FsU2V0dGluZ3M6IGxvY2FsU2V0dGluZ3MgPyBsb2NhbFNldHRpbmdzIDoge30sXG5cdFx0dXBkYXRlU2V0dGluZ3Ncblx0fSksIFtsb2NhbFNldHRpbmdzLCB1cGRhdGVTZXR0aW5nc10pO1xuXHRyZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChQZXJzaXN0ZW5jZVNldHRpbmdDb250ZXh0LlByb3ZpZGVyLCB7XG5cdFx0dmFsdWUsXG5cdFx0Y2hpbGRyZW5cblx0fSk7XG59O1xudmFyIHVzZVNldHRpbmdzID0gKCkgPT4gdXNlQ29udGV4dChQZXJzaXN0ZW5jZVNldHRpbmdDb250ZXh0KTtcbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgUGVyc2lzdGVuY2VTZXR0aW5nUHJvdmlkZXIsIHVzZVNldHRpbmdzIH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBlcnNpc3RlbmNlU2V0dGluZ1Byb3ZpZGVyLm1qcy5tYXAiLCJpbXBvcnQgeyBnZXRDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb24ubWpzXCI7XG5pbXBvcnQgeyBBUElSb3V0ZSB9IGZyb20gXCIuLi8uLi9zdG9yZS9yb3V0ZXMubWpzXCI7XG5pbXBvcnQgeyBzdHJpcFRyYWlsaW5nU2xhc2ggfSBmcm9tIFwiLi4vLi4vc3RvcmUvdXRpbHMubWpzXCI7XG5pbXBvcnQgeyBmZXRjaGVyIH0gZnJvbSBcIi4uLy4uL2FwaS91c2UtZGF0YS1tdXRhdGlvbi5tanNcIjtcbmltcG9ydCB7IGpzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHVzZVNXUk11dGF0aW9uIGZyb20gXCJzd3IvbXV0YXRpb25cIjtcbi8vI3JlZ2lvbiBzcmMvcHJvdmlkZXJzL1NlYXJjaFByb3ZpZGVyL1NlYXJjaFByb3ZpZGVyLnRzeFxudmFyIFNlYXJjaENvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcblx0c2VhcmNoUmVzdWx0czogW10sXG5cdGlzTG9hZGluZzogZmFsc2Vcbn0pO1xudmFyIGNvbmZpZ3VyYXRpb24gPSBnZXRDb25maWd1cmF0aW9uKCk7XG5mdW5jdGlvbiB1c2VEYXRhU2VhcmNoTXV0YXRpb24oYmFzZVBhdGgsIHJvdXRlLCBtZXRob2QgPSBcIlBPU1RcIikge1xuXHRjb25zdCB7IGRhdGEsIGVycm9yLCBpc011dGF0aW5nLCB0cmlnZ2VyIH0gPSB1c2VTV1JNdXRhdGlvbihgJHtiYXNlUGF0aH0ke3JvdXRlfWAsICh1cmwsIHsgYXJnIH0pID0+IHtcblx0XHRyZXR1cm4gZmV0Y2hlcihgJHt1cmx9JHtlbmNvZGVVUklDb21wb25lbnQoYXJnPy50ZXh0ID8/IFwiXCIpfWAsIG1ldGhvZCwgYXJnID8/IHt9LCB7IHNpZ25hbDogYXJnPy5zaWduYWwgfSk7XG5cdH0pO1xuXHRyZXR1cm4ge1xuXHRcdGRhdGEsXG5cdFx0ZXJyb3IsXG5cdFx0aXNNdXRhdGluZyxcblx0XHR0cmlnZ2VyXG5cdH07XG59XG52YXIgU2VhcmNoUHJvdmlkZXIgPSAoeyBjaGlsZHJlbiB9KSA9PiB7XG5cdGNvbnN0IHsgZGF0YSwgaXNNdXRhdGluZywgZXJyb3IsIHRyaWdnZXIgfSA9IHVzZURhdGFTZWFyY2hNdXRhdGlvbihzdHJpcFRyYWlsaW5nU2xhc2goY29uZmlndXJhdGlvbi5iYXNlKSwgQVBJUm91dGUuU0VBUkNILCBcIkdFVFwiKTtcblx0Y29uc3QgZG9TZWFyY2ggPSBhc3luYyAocXVlcnkpID0+IHtcblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgdHJpZ2dlcih7XG5cdFx0XHRcdHRleHQ6IHF1ZXJ5LnRleHQsXG5cdFx0XHRcdHNpZ25hbDogcXVlcnkuc2lnbmFsXG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJTZWFyY2ggZmFpbGVkOlwiLCBlcnIpO1xuXHRcdH1cblx0fTtcblx0Y29uc3QgdmFsdWUgPSB7XG5cdFx0c2VhcmNoUmVzdWx0czogZGF0YSA/PyBbXSxcblx0XHRpc0xvYWRpbmc6IGlzTXV0YXRpbmcsXG5cdFx0aXNFcnJvcjogISFlcnJvcixcblx0XHRlcnJvcixcblx0XHRkb1NlYXJjaFxuXHR9O1xuXHRyZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChTZWFyY2hDb250ZXh0LlByb3ZpZGVyLCB7XG5cdFx0dmFsdWUsXG5cdFx0Y2hpbGRyZW5cblx0fSk7XG59O1xudmFyIHVzZVNlYXJjaCA9ICgpID0+IHVzZUNvbnRleHQoU2VhcmNoQ29udGV4dCk7XG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7IFNlYXJjaENvbnRleHQsIFNlYXJjaFByb3ZpZGVyIGFzIGRlZmF1bHQsIHVzZVNlYXJjaCB9O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1TZWFyY2hQcm92aWRlci5tanMubWFwIiwiaW1wb3J0IHsgZG93bmxvYWRGaWxlLCBleHRyYWN0RmlsZU5hbWUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXJsLm1qc1wiO1xuaW1wb3J0IHsgdXNlVGFyYmFsbERvd25sb2FkIH0gZnJvbSBcIi4uLy4uL2FwaS91c2UtZGF0YS1tdXRhdGlvbi5tanNcIjtcbmltcG9ydCB7IGpzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcbi8vI3JlZ2lvbiBzcmMvcHJvdmlkZXJzL0Rvd25sb2FkUHJvdmlkZXIvRG93bmxvYWRQcm92aWRlci50c3hcbnZhciBEb3dubG9hZENvbnRleHQgPSBjcmVhdGVDb250ZXh0KHZvaWQgMCk7XG52YXIgRG93bmxvYWRQcm92aWRlciA9ICh7IGNoaWxkcmVuIH0pID0+IHtcblx0Y29uc3QgeyBkb3dubG9hZCwgaXNEb3dubG9hZGluZyB9ID0gdXNlVGFyYmFsbERvd25sb2FkKCk7XG5cdGNvbnN0IGRvd25sb2FkVGFyYmFsbCA9IHVzZUNhbGxiYWNrKGFzeW5jICh7IGxpbmsgfSkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBmaWxlU3RyZWFtID0gYXdhaXQgZG93bmxvYWQoeyBsaW5rIH0pO1xuXHRcdFx0aWYgKCFmaWxlU3RyZWFtKSByZXR1cm47XG5cdFx0XHRkb3dubG9hZEZpbGUoZmlsZVN0cmVhbSwgZXh0cmFjdEZpbGVOYW1lKGxpbmspKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIkVycm9yIGR1cmluZyB0YXJiYWxsIGRvd25sb2FkOlwiLCBlcnJvcik7XG5cdFx0fVxuXHR9LCBbZG93bmxvYWRdKTtcblx0cmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRG93bmxvYWRDb250ZXh0LlByb3ZpZGVyLCB7XG5cdFx0dmFsdWU6IHtcblx0XHRcdGRvd25sb2FkVGFyYmFsbCxcblx0XHRcdGlzRG93bmxvYWRpbmdcblx0XHR9LFxuXHRcdGNoaWxkcmVuXG5cdH0pO1xufTtcbnZhciB1c2VEb3dubG9hZCA9ICgpID0+IHtcblx0Y29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRG93bmxvYWRDb250ZXh0KTtcblx0aWYgKCFjb250ZXh0KSB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VEb3dubG9hZCBtdXN0IGJlIHVzZWQgd2l0aGluIGEgRG93bmxvYWRQcm92aWRlclwiKTtcblx0cmV0dXJuIGNvbnRleHQ7XG59O1xuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBEb3dubG9hZFByb3ZpZGVyLCB1c2VEb3dubG9hZCB9O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1Eb3dubG9hZFByb3ZpZGVyLm1qcy5tYXAiLCJpbXBvcnQgX3N0eWxlZCBmcm9tIFwiQGVtb3Rpb24vc3R5bGVkL2Jhc2VcIjtcbmltcG9ydCB7IGpzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IFwicmVhY3RcIjtcbmltcG9ydCB7IExpbmsgfSBmcm9tIFwicmVhY3Qtcm91dGVyXCI7XG5pbXBvcnQgVHlwb2dyYXBoeSBmcm9tIFwiQG11aS9tYXRlcmlhbC9UeXBvZ3JhcGh5XCI7XG4vLyNyZWdpb24gc3JjL2NvbXBvbmVudHMvTGluay9MaW5rLnRzeFxuZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7XG5cdHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjtcbn1cbnZhciBDdXN0b21Sb3V0ZXJMaW5rID0gLyogQF9fUFVSRV9fICovIF9zdHlsZWQoTGluaywgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8geyB0YXJnZXQ6IFwiZTJjdDdwNTBcIiB9IDoge1xuXHR0YXJnZXQ6IFwiZTJjdDdwNTBcIixcblx0bGFiZWw6IFwiQ3VzdG9tUm91dGVyTGlua1wiXG59KShwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG5cdG5hbWU6IFwibHE1Y2FxXCIsXG5cdHN0eWxlczogXCJ0ZXh0LWRlY29yYXRpb246bm9uZTsmOmhvdmVyLCY6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9XCJcbn0gOiB7XG5cdG5hbWU6IFwibHE1Y2FxXCIsXG5cdHN0eWxlczogXCJ0ZXh0LWRlY29yYXRpb246bm9uZTsmOmhvdmVyLCY6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9LyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk5b2IyMWxMM0oxYm01bGNpOTNiM0pyTDNabGNtUmhZMk5wYnk5MlpYSmtZV05qYVc4dmNHRmphMkZuWlhNdmRXa3RZMjl0Y0c5dVpXNTBjeTl6Y21NdlkyOXRjRzl1Wlc1MGN5OU1hVzVyTDB4cGJtc3VkSE40SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVzeVF5SXNJbVpwYkdVaU9pSXZhRzl0WlM5eWRXNXVaWEl2ZDI5eWF5OTJaWEprWVdOamFXOHZkbVZ5WkdGalkybHZMM0JoWTJ0aFoyVnpMM1ZwTFdOdmJYQnZibVZ1ZEhNdmMzSmpMMk52YlhCdmJtVnVkSE12VEdsdWF5OU1hVzVyTG5SemVDSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQnpkSGxzWldRZ1puSnZiU0FuUUdWdGIzUnBiMjR2YzNSNWJHVmtKenRjYm1sdGNHOXlkQ0JVZVhCdlozSmhjR2g1SUdaeWIyMGdKMEJ0ZFdrdmJXRjBaWEpwWVd3dlZIbHdiMmR5WVhCb2VTYzdYRzVwYlhCdmNuUWdVbVZoWTNRZ1puSnZiU0FuY21WaFkzUW5PMXh1YVcxd2IzSjBJSHNnVEdsdWF5QmhjeUJTYjNWMFpYSk1hVzVySUgwZ1puSnZiU0FuY21WaFkzUXRjbTkxZEdWeUp6dGNibHh1WTI5dWMzUWdRM1Z6ZEc5dFVtOTFkR1Z5VEdsdWF5QTlJSE4wZVd4bFpDaFNiM1YwWlhKTWFXNXJLV0JjYmlBZ2RHVjRkQzFrWldOdmNtRjBhVzl1T2lCdWIyNWxPMXh1SUNBbU9taHZkbVZ5TEZ4dUlDQW1PbVp2WTNWeklIdGNiaUFnSUNCMFpYaDBMV1JsWTI5eVlYUnBiMjQ2SUhWdVpHVnliR2x1WlR0Y2JpQWdmVnh1WUR0Y2JseHVZMjl1YzNRZ1RHbHVheUE5SUdaMWJtTjBhVzl1SUV4cGJtdEdkVzVqZEdsdmJpaDdYRzRnSUhKbFppeGNiaUFnZEc4c1hHNGdJR05vYVd4a2NtVnVMRnh1SUNCMllYSnBZVzUwTEZ4dUlDQmpiR0Z6YzA1aGJXVXNYRzRnSUc5dVEyeHBZMnNzWEc1OU9pQmhibmtnSmlCN0lISmxaajg2SUZKbFlXTjBMbEpsWms5aWFtVmpkRHhJVkUxTVFXNWphRzl5Uld4bGJXVnVkQ0I4SUc1MWJHdytJSDBwSUh0Y2JpQWdjbVYwZFhKdUlDaGNiaUFnSUNBOFEzVnpkRzl0VW05MWRHVnlUR2x1YXlCamJHRnpjMDVoYldVOWUyTnNZWE56VG1GdFpYMGdiMjVEYkdsamF6MTdiMjVEYkdsamEzMGdjbVZtUFh0eVpXWjlJSFJ2UFh0MGIzMCtYRzRnSUNBZ0lDQThWSGx3YjJkeVlYQm9lU0JqYjJ4dmNqMWNJbkJ5YVcxaGNubGNJaUIyWVhKcFlXNTBQWHQyWVhKcFlXNTBmVDVjYmlBZ0lDQWdJQ0FnZTJOb2FXeGtjbVZ1ZlZ4dUlDQWdJQ0FnUEM5VWVYQnZaM0poY0doNVBseHVJQ0FnSUR3dlEzVnpkRzl0VW05MWRHVnlUR2x1YXo1Y2JpQWdLVHRjYm4wN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElFeHBibXM3WEc0aVhYMD0gKi9cIixcblx0dG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59KTtcbnZhciBMaW5rJDEgPSBmdW5jdGlvbiBMaW5rRnVuY3Rpb24oeyByZWYsIHRvLCBjaGlsZHJlbiwgdmFyaWFudCwgY2xhc3NOYW1lLCBvbkNsaWNrIH0pIHtcblx0cmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goQ3VzdG9tUm91dGVyTGluaywge1xuXHRcdGNsYXNzTmFtZSxcblx0XHRvbkNsaWNrLFxuXHRcdHJlZixcblx0XHR0byxcblx0XHRjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChUeXBvZ3JhcGh5LCB7XG5cdFx0XHRjb2xvcjogXCJwcmltYXJ5XCIsXG5cdFx0XHR2YXJpYW50LFxuXHRcdFx0Y2hpbGRyZW5cblx0XHR9KVxuXHR9KTtcbn07XG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7IExpbmskMSBhcyBkZWZhdWx0IH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUxpbmsubWpzLm1hcCIsImltcG9ydCBfc3R5bGVkIGZyb20gXCJAZW1vdGlvbi9zdHlsZWQvYmFzZVwiO1xuaW1wb3J0IHsgY29tbW9uIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWwvY29sb3JzXCI7XG5pbXBvcnQgTGlzdEl0ZW1UZXh0IGZyb20gXCJAbXVpL21hdGVyaWFsL0xpc3RJdGVtVGV4dFwiO1xuLy8jcmVnaW9uIHNyYy9jb21wb25lbnRzL1ZlcnNpb25zL3N0eWxlcy50c1xudmFyIFNwYWNlciA9IC8qIEBfX1BVUkVfXyAqLyBfc3R5bGVkKFwiZGl2XCIsIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHsgdGFyZ2V0OiBcImUxOW5zNWZyMVwiIH0gOiB7XG5cdHRhcmdldDogXCJlMTluczVmcjFcIixcblx0bGFiZWw6IFwiU3BhY2VyXCJcbn0pKCh7IHRoZW1lIH0pID0+ICh7XG5cdGZsZXg6IFwiMSAxIGF1dG9cIixcblx0Ym9yZGVyQm90dG9tOiBgMXB4IGRvdHRlZCAke3RoZW1lLnBhbGV0dGUubW9kZSA9PSBcImxpZ2h0XCIgPyBcInJnYmEoMCwgMCwgMCwgMC4yKVwiIDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMilcIn0gYCxcblx0d2hpdGVTcGFjZTogXCJub3dyYXBcIixcblx0aGVpZ2h0OiBcIjAuNWVtXCIsXG5cdG1hcmdpbjogXCIwIDE2cHhcIlxufSksIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpOW9iMjFsTDNKMWJtNWxjaTkzYjNKckwzWmxjbVJoWTJOcGJ5OTJaWEprWVdOamFXOHZjR0ZqYTJGblpYTXZkV2t0WTI5dGNHOXVaVzUwY3k5emNtTXZZMjl0Y0c5dVpXNTBjeTlXWlhKemFXOXVjeTl6ZEhsc1pYTXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCVFhOQ0lpd2labWxzWlNJNklpOW9iMjFsTDNKMWJtNWxjaTkzYjNKckwzWmxjbVJoWTJOcGJ5OTJaWEprWVdOamFXOHZjR0ZqYTJGblpYTXZkV2t0WTI5dGNHOXVaVzUwY3k5emNtTXZZMjl0Y0c5dVpXNTBjeTlXWlhKemFXOXVjeTl6ZEhsc1pYTXVkSE1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnYzNSNWJHVmtJR1p5YjIwZ0owQmxiVzkwYVc5dUwzTjBlV3hsWkNjN1hHNXBiWEJ2Y25RZ2V5QmtaV1poZFd4MElHRnpJRTExYVV4cGMzUkpkR1Z0VkdWNGRDQjlJR1p5YjIwZ0owQnRkV2t2YldGMFpYSnBZV3d2VEdsemRFbDBaVzFVWlhoMEp6dGNibWx0Y0c5eWRDQjdJR052YlcxdmJpQjlJR1p5YjIwZ0owQnRkV2t2YldGMFpYSnBZV3d2WTI5c2IzSnpKenRjYmx4dWFXMXdiM0owSUhSNWNHVWdleUJVYUdWdFpTQjlJR1p5YjIwZ0p5NHVMeTR1TDFSb1pXMWxKenRjYmx4dVpYaHdiM0owSUdOdmJuTjBJRk53WVdObGNpQTlJSE4wZVd4bFpDZ25aR2wySnlrOGV5QjBhR1Z0WlQ4NklGUm9aVzFsSUgwK0tDaDdJSFJvWlcxbElIMHBJRDArSUNoN1hHNGdJR1pzWlhnNklDY3hJREVnWVhWMGJ5Y3NYRzRnSUdKdmNtUmxja0p2ZEhSdmJUb2dZREZ3ZUNCa2IzUjBaV1FnSkh0Y2JpQWdJQ0IwYUdWdFpTNXdZV3hsZEhSbExtMXZaR1VnUFQwZ0oyeHBaMmgwSnlBL0lDZHlaMkpoS0RBc0lEQXNJREFzSURBdU1pa25JRG9nSjNKblltRW9NalUxTENBeU5UVXNJREkxTlN3Z01DNHlLU2RjYmlBZ2ZTQmdMRnh1SUNCM2FHbDBaVk53WVdObE9pQW5ibTkzY21Gd0p5eGNiaUFnYUdWcFoyaDBPaUFuTUM0MVpXMG5MRnh1SUNCdFlYSm5hVzQ2SUNjd0lERTJjSGduTEZ4dWZTa3BPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdUR2x6ZEVsMFpXMVVaWGgwSUQwZ2MzUjViR1ZrS0UxMWFVeHBjM1JKZEdWdFZHVjRkQ2s4ZXlCMGFHVnRaVDg2SUZSb1pXMWxJSDArS0NoN0lIUm9aVzFsSUgwcElEMCtJQ2g3WEc0Z0lHWnNaWGc2SUNkdWIyNWxKeXhjYmlBZ2IzQmhZMmwwZVRvZ01DNDJMRnh1SUNCamIyeHZjam9nZEdobGJXVXVjR0ZzWlhSMFpTNXRiMlJsSUQwOUlDZHNhV2RvZENjZ1B5QjBhR1Z0WlM1d1lXeGxkSFJsTG1Kc1lXTnJJRG9nWTI5dGJXOXVMbmRvYVhSbExGeHVmU2twTzF4dUlsMTkgKi9cIik7XG52YXIgTGlzdEl0ZW1UZXh0JDEgPSAvKiBAX19QVVJFX18gKi8gX3N0eWxlZChMaXN0SXRlbVRleHQsIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHsgdGFyZ2V0OiBcImUxOW5zNWZyMFwiIH0gOiB7XG5cdHRhcmdldDogXCJlMTluczVmcjBcIixcblx0bGFiZWw6IFwiTGlzdEl0ZW1UZXh0XCJcbn0pKCh7IHRoZW1lIH0pID0+ICh7XG5cdGZsZXg6IFwibm9uZVwiLFxuXHRvcGFjaXR5OiAuNixcblx0Y29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PSBcImxpZ2h0XCIgPyB0aGVtZS5wYWxldHRlLmJsYWNrIDogY29tbW9uLndoaXRlXG59KSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk5b2IyMWxMM0oxYm01bGNpOTNiM0pyTDNabGNtUmhZMk5wYnk5MlpYSmtZV05qYVc4dmNHRmphMkZuWlhNdmRXa3RZMjl0Y0c5dVpXNTBjeTl6Y21NdlkyOXRjRzl1Wlc1MGN5OVdaWEp6YVc5dWN5OXpkSGxzWlhNdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJaMEkwUWlJc0ltWnBiR1VpT2lJdmFHOXRaUzl5ZFc1dVpYSXZkMjl5YXk5MlpYSmtZV05qYVc4dmRtVnlaR0ZqWTJsdkwzQmhZMnRoWjJWekwzVnBMV052YlhCdmJtVnVkSE12YzNKakwyTnZiWEJ2Ym1WdWRITXZWbVZ5YzJsdmJuTXZjM1I1YkdWekxuUnpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSE4wZVd4bFpDQm1jbTl0SUNkQVpXMXZkR2x2Ymk5emRIbHNaV1FuTzF4dWFXMXdiM0owSUhzZ1pHVm1ZWFZzZENCaGN5Qk5kV2xNYVhOMFNYUmxiVlJsZUhRZ2ZTQm1jbTl0SUNkQWJYVnBMMjFoZEdWeWFXRnNMMHhwYzNSSmRHVnRWR1Y0ZENjN1hHNXBiWEJ2Y25RZ2V5QmpiMjF0YjI0Z2ZTQm1jbTl0SUNkQWJYVnBMMjFoZEdWeWFXRnNMMk52Ykc5eWN5YzdYRzVjYm1sdGNHOXlkQ0IwZVhCbElIc2dWR2hsYldVZ2ZTQm1jbTl0SUNjdUxpOHVMaTlVYUdWdFpTYzdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQlRjR0ZqWlhJZ1BTQnpkSGxzWldRb0oyUnBkaWNwUEhzZ2RHaGxiV1UvT2lCVWFHVnRaU0I5UGlnb2V5QjBhR1Z0WlNCOUtTQTlQaUFvZTF4dUlDQm1iR1Y0T2lBbk1TQXhJR0YxZEc4bkxGeHVJQ0JpYjNKa1pYSkNiM1IwYjIwNklHQXhjSGdnWkc5MGRHVmtJQ1I3WEc0Z0lDQWdkR2hsYldVdWNHRnNaWFIwWlM1dGIyUmxJRDA5SUNkc2FXZG9kQ2NnUHlBbmNtZGlZU2d3TENBd0xDQXdMQ0F3TGpJcEp5QTZJQ2R5WjJKaEtESTFOU3dnTWpVMUxDQXlOVFVzSURBdU1pa25YRzRnSUgwZ1lDeGNiaUFnZDJocGRHVlRjR0ZqWlRvZ0oyNXZkM0poY0Njc1hHNGdJR2hsYVdkb2REb2dKekF1TldWdEp5eGNiaUFnYldGeVoybHVPaUFuTUNBeE5uQjRKeXhjYm4wcEtUdGNibHh1Wlhod2IzSjBJR052Ym5OMElFeHBjM1JKZEdWdFZHVjRkQ0E5SUhOMGVXeGxaQ2hOZFdsTWFYTjBTWFJsYlZSbGVIUXBQSHNnZEdobGJXVS9PaUJVYUdWdFpTQjlQaWdvZXlCMGFHVnRaU0I5S1NBOVBpQW9lMXh1SUNCbWJHVjRPaUFuYm05dVpTY3NYRzRnSUc5d1lXTnBkSGs2SURBdU5peGNiaUFnWTI5c2IzSTZJSFJvWlcxbExuQmhiR1YwZEdVdWJXOWtaU0E5UFNBbmJHbG5hSFFuSUQ4Z2RHaGxiV1V1Y0dGc1pYUjBaUzVpYkdGamF5QTZJR052YlcxdmJpNTNhR2wwWlN4Y2JuMHBLVHRjYmlKZGZRPT0gKi9cIik7XG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7IExpc3RJdGVtVGV4dCQxIGFzIExpc3RJdGVtVGV4dCwgU3BhY2VyIH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0eWxlcy5tanMubWFwIiwiaW1wb3J0IHsgZm9ybWF0RGF0ZSwgZm9ybWF0RGF0ZURpc3RhbmNlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3V0aWxzLm1qc1wiO1xuaW1wb3J0IHsgUm91dGUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcm91dGVzLm1qc1wiO1xuaW1wb3J0IFwiLi4vLi4vdXRpbHMvaW5kZXgubWpzXCI7XG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tIFwiLi4vLi4vcHJvdmlkZXJzL0FwcENvbmZpZ3VyYXRpb25Qcm92aWRlci9BcHBDb25maWd1cmF0aW9uUHJvdmlkZXIubWpzXCI7XG5pbXBvcnQgXCIuLi8uLi9wcm92aWRlcnMvaW5kZXgubWpzXCI7XG5pbXBvcnQgTGluayBmcm9tIFwiLi4vTGluay9MaW5rLm1qc1wiO1xuaW1wb3J0IFwiLi4vTGluay9pbmRleC5tanNcIjtcbmltcG9ydCB7IExpc3RJdGVtVGV4dCwgU3BhY2VyIH0gZnJvbSBcIi4vc3R5bGVzLm1qc1wiO1xuaW1wb3J0IHsganN4LCBqc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tIFwicmVhY3QtaTE4bmV4dFwiO1xuaW1wb3J0IExpc3QgZnJvbSBcIkBtdWkvbWF0ZXJpYWwvTGlzdFwiO1xuaW1wb3J0IExpc3RJdGVtIGZyb20gXCJAbXVpL21hdGVyaWFsL0xpc3RJdGVtXCI7XG5pbXBvcnQgQ2hpcCBmcm9tIFwiQG11aS9tYXRlcmlhbC9DaGlwXCI7XG4vLyNyZWdpb24gc3JjL2NvbXBvbmVudHMvVmVyc2lvbnMvSGlzdG9yeUxpc3QudHN4XG5mdW5jdGlvbiBmaWx0ZXJEZXByZWNhdGVkKHZlcnNpb25zKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyh2ZXJzaW9ucykucmVkdWNlKChwcmV2LCBjdXJyZW50KSA9PiB7XG5cdFx0aWYgKCF2ZXJzaW9uc1tjdXJyZW50XS5kZXByZWNhdGVkKSBwcmV2W2N1cnJlbnRdID0gdmVyc2lvbnNbY3VycmVudF07XG5cdFx0cmV0dXJuIHByZXY7XG5cdH0sIHt9KTtcbn1cbnZhciBWZXJzaW9uc0hpc3RvcnlMaXN0ID0gKHsgdmVyc2lvbnMsIHBhY2thZ2VOYW1lLCB0aW1lIH0pID0+IHtcblx0Y29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuXHRjb25zdCB7IGNvbmZpZ09wdGlvbnMgfSA9IHVzZUNvbmZpZygpO1xuXHRjb25zdCBsaXN0VmVyc2lvbnMgPSBjb25maWdPcHRpb25zLmhpZGVEZXByZWNhdGVkVmVyc2lvbnMgPyBmaWx0ZXJEZXByZWNhdGVkKHZlcnNpb25zKSA6IHZlcnNpb25zO1xuXHRyZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChMaXN0LCB7XG5cdFx0ZGVuc2U6IHRydWUsXG5cdFx0Y2hpbGRyZW46IE9iamVjdC5rZXlzKGxpc3RWZXJzaW9ucykuc29ydCgoYSwgYikgPT4ge1xuXHRcdFx0Y29uc3QgdGltZUEgPSB0aW1lW2FdID8gbmV3IERhdGUodGltZVthXSkuZ2V0VGltZSgpIDogMDtcblx0XHRcdHJldHVybiAodGltZVtiXSA/IG5ldyBEYXRlKHRpbWVbYl0pLmdldFRpbWUoKSA6IDApIC0gdGltZUE7XG5cdFx0fSkubWFwKCh2ZXJzaW9uKSA9PiAvKiBAX19QVVJFX18gKi8ganN4cyhMaXN0SXRlbSwge1xuXHRcdFx0Y2xhc3NOYW1lOiBcInZlcnNpb24taXRlbVwiLFxuXHRcdFx0XCJkYXRhLXRlc3RpZFwiOiBgdmVyc2lvbi0ke3ZlcnNpb259YCxcblx0XHRcdHN4OiB7IHByOiAwIH0sXG5cdFx0XHRjaGlsZHJlbjogW1xuXHRcdFx0XHQvKiBAX19QVVJFX18gKi8ganN4KExpbmssIHtcblx0XHRcdFx0XHR0bzogYCR7Um91dGUuREVUQUlMfSR7cGFja2FnZU5hbWV9L3YvJHt2ZXJzaW9ufWAsXG5cdFx0XHRcdFx0dmFyaWFudDogXCJvdXRsaW5lXCIsXG5cdFx0XHRcdFx0Y2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goTGlzdEl0ZW1UZXh0LCB7XG5cdFx0XHRcdFx0XHRcImRhdGEtdGVzdGlkXCI6IGB2ZXJzaW9uLWxpc3QtbGlua2AsXG5cdFx0XHRcdFx0XHRkaXNhYmxlVHlwb2dyYXBoeTogZmFsc2UsXG5cdFx0XHRcdFx0XHRwcmltYXJ5OiB2ZXJzaW9uLFxuXHRcdFx0XHRcdFx0c3g6IHR5cGVvZiB2ZXJzaW9uc1t2ZXJzaW9uXT8uZGVwcmVjYXRlZCA9PT0gXCJzdHJpbmdcIiA/IHsgdGV4dERlY29yYXRpb246IFwibGluZS10aHJvdWdoXCIgfSA6IHZvaWQgMFxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR0eXBlb2YgdmVyc2lvbnNbdmVyc2lvbl0/LmRlcHJlY2F0ZWQgPT09IFwic3RyaW5nXCIgPyAvKiBAX19QVVJFX18gKi8ganN4KENoaXAsIHtcblx0XHRcdFx0XHRjb2xvcjogXCJ3YXJuaW5nXCIsXG5cdFx0XHRcdFx0XCJkYXRhLXRlc3RpZFwiOiBcImRlcHJlY2F0ZWQtYmFkZ2VcIixcblx0XHRcdFx0XHRsYWJlbDogdChcInZlcnNpb25zLmRlcHJlY2F0ZWRcIiksXG5cdFx0XHRcdFx0c2l6ZTogXCJzbWFsbFwiLFxuXHRcdFx0XHRcdHN4OiB7IG1hcmdpbkxlZnQ6IDEgfSxcblx0XHRcdFx0XHR2YXJpYW50OiBcIm91dGxpbmVkXCJcblx0XHRcdFx0fSkgOiBudWxsLFxuXHRcdFx0XHQvKiBAX19QVVJFX18gKi8ganN4KFNwYWNlciwge30pLFxuXHRcdFx0XHQvKiBAX19QVVJFX18gKi8ganN4KExpc3RJdGVtVGV4dCwge1xuXHRcdFx0XHRcdFwiZGF0YS10ZXN0aWRcIjogYHZlcnNpb24tbGlzdC10ZXh0YCxcblx0XHRcdFx0XHRwcmltYXJ5OiB0aW1lW3ZlcnNpb25dID8gZm9ybWF0RGF0ZURpc3RhbmNlKHRpbWVbdmVyc2lvbl0pIDogdChcInZlcnNpb25zLm5vdC1hdmFpbGFibGVcIiksXG5cdFx0XHRcdFx0c2xvdFByb3BzOiB7IHByaW1hcnk6IHsgdGl0bGU6IGZvcm1hdERhdGUodGltZVt2ZXJzaW9uXSkgfSB9XG5cdFx0XHRcdH0pXG5cdFx0XHRdXG5cdFx0fSwgdmVyc2lvbikpXG5cdH0pO1xufTtcbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgVmVyc2lvbnNIaXN0b3J5TGlzdCBhcyBkZWZhdWx0IH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUhpc3RvcnlMaXN0Lm1qcy5tYXAiLCJpbXBvcnQgeyBSb3V0ZSB9IGZyb20gXCIuLi8uLi91dGlscy9yb3V0ZXMubWpzXCI7XG5pbXBvcnQgXCIuLi8uLi91dGlscy9pbmRleC5tanNcIjtcbmltcG9ydCBMaW5rIGZyb20gXCIuLi9MaW5rL0xpbmsubWpzXCI7XG5pbXBvcnQgXCIuLi9MaW5rL2luZGV4Lm1qc1wiO1xuaW1wb3J0IHsgTGlzdEl0ZW1UZXh0LCBTcGFjZXIgfSBmcm9tIFwiLi9zdHlsZXMubWpzXCI7XG5pbXBvcnQgeyBqc3gsIGpzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCBcInJlYWN0XCI7XG5pbXBvcnQgTGlzdCBmcm9tIFwiQG11aS9tYXRlcmlhbC9MaXN0XCI7XG5pbXBvcnQgTGlzdEl0ZW0gZnJvbSBcIkBtdWkvbWF0ZXJpYWwvTGlzdEl0ZW1cIjtcbi8vI3JlZ2lvbiBzcmMvY29tcG9uZW50cy9WZXJzaW9ucy9UYWdMaXN0LnRzeFxudmFyIFZlcnNpb25zVGFnTGlzdCA9ICh7IHRhZ3MsIHBhY2thZ2VOYW1lLCB0aW1lIH0pID0+IC8qIEBfX1BVUkVfXyAqLyBqc3goTGlzdCwge1xuXHRkZW5zZTogdHJ1ZSxcblx0Y2hpbGRyZW46IE9iamVjdC5rZXlzKHRhZ3MpLnNvcnQoKGEsIGIpID0+IHtcblx0XHRyZXR1cm4gdGltZVt0YWdzW2FdXSA8IHRpbWVbdGFnc1tiXV0gPyAxIDogdGltZVt0YWdzW2FdXSA+IHRpbWVbdGFnc1tiXV0gPyAtMSA6IDA7XG5cdH0pLm1hcCgodGFnKSA9PiAvKiBAX19QVVJFX18gKi8ganN4cyhMaXN0SXRlbSwge1xuXHRcdGNsYXNzTmFtZTogXCJ2ZXJzaW9uLWl0ZW1cIixcblx0XHRcImRhdGEtdGVzdGlkXCI6IGB0YWctJHt0YWd9YCxcblx0XHRzeDogeyBwcjogMCB9LFxuXHRcdGNoaWxkcmVuOiBbXG5cdFx0XHQvKiBAX19QVVJFX18gKi8ganN4KExpbmssIHtcblx0XHRcdFx0dG86IGAke1JvdXRlLkRFVEFJTH0ke3BhY2thZ2VOYW1lfS92LyR7dGFnc1t0YWddfWAsXG5cdFx0XHRcdHZhcmlhbnQ6IFwib3V0bGluZVwiLFxuXHRcdFx0XHRjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChMaXN0SXRlbVRleHQsIHsgY2hpbGRyZW46IHRhZyB9KVxuXHRcdFx0fSksXG5cdFx0XHQvKiBAX19QVVJFX18gKi8ganN4KFNwYWNlciwge30pLFxuXHRcdFx0LyogQF9fUFVSRV9fICovIGpzeChMaXN0SXRlbVRleHQsIHsgY2hpbGRyZW46IHRhZ3NbdGFnXSB9KVxuXHRcdF1cblx0fSwgdGFnKSlcbn0pO1xuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBWZXJzaW9uc1RhZ0xpc3QgYXMgZGVmYXVsdCB9O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1UYWdMaXN0Lm1qcy5tYXAiLCJpbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tIFwiLi4vLi4vcHJvdmlkZXJzL0FwcENvbmZpZ3VyYXRpb25Qcm92aWRlci9BcHBDb25maWd1cmF0aW9uUHJvdmlkZXIubWpzXCI7XG5pbXBvcnQgXCIuLi8uLi9wcm92aWRlcnMvaW5kZXgubWpzXCI7XG5pbXBvcnQgVmVyc2lvbnNIaXN0b3J5TGlzdCBmcm9tIFwiLi9IaXN0b3J5TGlzdC5tanNcIjtcbmltcG9ydCBWZXJzaW9uc1RhZ0xpc3QgZnJvbSBcIi4vVGFnTGlzdC5tanNcIjtcbmltcG9ydCBfc3R5bGVkIGZyb20gXCJAZW1vdGlvbi9zdHlsZWQvYmFzZVwiO1xuaW1wb3J0IHsgRnJhZ21lbnQsIGpzeCwganN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBCb3ggZnJvbSBcIkBtdWkvbWF0ZXJpYWwvQm94XCI7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgVHlwb2dyYXBoeSBmcm9tIFwiQG11aS9tYXRlcmlhbC9UeXBvZ3JhcGh5XCI7XG5pbXBvcnQgQ2FyZCBmcm9tIFwiQG11aS9tYXRlcmlhbC9DYXJkXCI7XG5pbXBvcnQgQ2FyZENvbnRlbnQgZnJvbSBcIkBtdWkvbWF0ZXJpYWwvQ2FyZENvbnRlbnRcIjtcbmltcG9ydCBBbGVydCBmcm9tIFwiQG11aS9tYXRlcmlhbC9BbGVydFwiO1xuaW1wb3J0IFRleHRGaWVsZCBmcm9tIFwiQG11aS9tYXRlcmlhbC9UZXh0RmllbGRcIjtcbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwibG9kYXNoL2RlYm91bmNlXCI7XG5pbXBvcnQgc2VtdmVyIGZyb20gXCJzZW12ZXJcIjtcbi8vI3JlZ2lvbiBzcmMvY29tcG9uZW50cy9WZXJzaW9ucy9WZXJzaW9ucy50c3hcbnZhciBTdHlsZWRUZXh0ID0gLyogQF9fUFVSRV9fICovIF9zdHlsZWQoVHlwb2dyYXBoeSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8geyB0YXJnZXQ6IFwiZTFrbjJmdGUwXCIgfSA6IHtcblx0dGFyZ2V0OiBcImUxa24yZnRlMFwiLFxuXHRsYWJlbDogXCJTdHlsZWRUZXh0XCJcbn0pKChwcm9wcykgPT4gKHtcblx0Zm9udFdlaWdodDogcHJvcHMudGhlbWUgJiYgcHJvcHMudGhlbWUuZm9udFdlaWdodC5ib2xkLFxuXHR0ZXh0VHJhbnNmb3JtOiBcImNhcGl0YWxpemVcIlxufSksIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpOW9iMjFsTDNKMWJtNWxjaTkzYjNKckwzWmxjbVJoWTJOcGJ5OTJaWEprWVdOamFXOHZjR0ZqYTJGblpYTXZkV2t0WTI5dGNHOXVaVzUwY3k5emNtTXZZMjl0Y0c5dVpXNTBjeTlXWlhKemFXOXVjeTlXWlhKemFXOXVjeTUwYzNnaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQmJVSXdRaUlzSW1acGJHVWlPaUl2YUc5dFpTOXlkVzV1WlhJdmQyOXlheTkyWlhKa1lXTmphVzh2ZG1WeVpHRmpZMmx2TDNCaFkydGhaMlZ6TDNWcExXTnZiWEJ2Ym1WdWRITXZjM0pqTDJOdmJYQnZibVZ1ZEhNdlZtVnljMmx2Ym5NdlZtVnljMmx2Ym5NdWRITjRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSE4wZVd4bFpDQm1jbTl0SUNkQVpXMXZkR2x2Ymk5emRIbHNaV1FuTzF4dWFXMXdiM0owSUVGc1pYSjBJR1p5YjIwZ0owQnRkV2t2YldGMFpYSnBZV3d2UVd4bGNuUW5PMXh1YVcxd2IzSjBJRUp2ZUNCbWNtOXRJQ2RBYlhWcEwyMWhkR1Z5YVdGc0wwSnZlQ2M3WEc1cGJYQnZjblFnUTJGeVpDQm1jbTl0SUNkQWJYVnBMMjFoZEdWeWFXRnNMME5oY21Rbk8xeHVhVzF3YjNKMElFTmhjbVJEYjI1MFpXNTBJR1p5YjIwZ0owQnRkV2t2YldGMFpYSnBZV3d2UTJGeVpFTnZiblJsYm5Rbk8xeHVhVzF3YjNKMElGUmxlSFJHYVdWc1pDQm1jbTl0SUNkQWJYVnBMMjFoZEdWeWFXRnNMMVJsZUhSR2FXVnNaQ2M3WEc1cGJYQnZjblFnVkhsd2IyZHlZWEJvZVNCbWNtOXRJQ2RBYlhWcEwyMWhkR1Z5YVdGc0wxUjVjRzluY21Gd2FIa25PMXh1YVcxd2IzSjBJR1JsWW05MWJtTmxJR1p5YjIwZ0oyeHZaR0Z6YUM5a1pXSnZkVzVqWlNjN1hHNXBiWEJ2Y25RZ1VtVmhZM1FzSUhzZ2RYTmxVM1JoZEdVZ2ZTQm1jbTl0SUNkeVpXRmpkQ2M3WEc1cGJYQnZjblFnZXlCMWMyVlVjbUZ1YzJ4aGRHbHZiaUI5SUdaeWIyMGdKM0psWVdOMExXa3hPRzVsZUhRbk8xeHVhVzF3YjNKMElITmxiWFpsY2lCbWNtOXRJQ2R6WlcxMlpYSW5PMXh1WEc1cGJYQnZjblFnZEhsd1pTQjdJRlJvWlcxbElIMGdabkp2YlNBbkxpNHZMaTR2VkdobGJXVW5PMXh1YVcxd2IzSjBJSHNnZFhObFEyOXVabWxuSUgwZ1puSnZiU0FuTGk0dkxpNHZjSEp2ZG1sa1pYSnpKenRjYm1sdGNHOXlkQ0JXWlhKemFXOXVjMGhwYzNSdmNubE1hWE4wSUdaeWIyMGdKeTR2U0dsemRHOXllVXhwYzNRbk8xeHVhVzF3YjNKMElGWmxjbk5wYjI1elZHRm5UR2x6ZENCbWNtOXRJQ2N1TDFSaFoweHBjM1FuTzF4dVhHNWxlSEJ2Y25RZ2RIbHdaU0JRY205d2N5QTlJSHNnY0dGamEyRm5aVTFsZEdFNklHRnVlVHNnY0dGamEyRm5aVTVoYldVNklITjBjbWx1WnlCOU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1UzUjViR1ZrVkdWNGRDQTlJSE4wZVd4bFpDaFVlWEJ2WjNKaGNHaDVLVHg3SUhSb1pXMWxQem9nVkdobGJXVWdmVDRvS0hCeWIzQnpLU0E5UGlBb2UxeHVJQ0JtYjI1MFYyVnBaMmgwT2lCd2NtOXdjeTUwYUdWdFpTQW1KaUJ3Y205d2N5NTBhR1Z0WlM1bWIyNTBWMlZwWjJoMExtSnZiR1FzWEc0Z0lIUmxlSFJVY21GdWMyWnZjbTA2SUNkallYQnBkR0ZzYVhwbEp5eGNibjBwS1R0Y2JseHVZMjl1YzNRZ1ZtVnljMmx2Ym5NNklGSmxZV04wTGtaRFBGQnliM0J6UGlBOUlDaDdJSEJoWTJ0aFoyVk5aWFJoTENCd1lXTnJZV2RsVG1GdFpTQjlLU0E5UGlCN1hHNGdJR052Ym5OMElIc2dkQ0I5SUQwZ2RYTmxWSEpoYm5Oc1lYUnBiMjRvS1R0Y2JpQWdZMjl1YzNRZ2V5QmpiMjVtYVdkUGNIUnBiMjV6SUgwZ1BTQjFjMlZEYjI1bWFXY29LVHRjYmlBZ1kyOXVjM1FnZXlCMlpYSnphVzl1Y3lBOUlIdDlMQ0IwYVcxbElEMGdlMzBzSUZzblpHbHpkQzEwWVdkekoxMDZJR1JwYzNSVVlXZHpJRDBnZTMwZ2ZTQTlJSEJoWTJ0aFoyVk5aWFJoTzF4dVhHNGdJR052Ym5OMElGdHdZV05yWVdkbFZtVnljMmx2Ym5Nc0lITmxkRkJoWTJ0aFoyVldaWEp6YVc5dWMxMGdQU0IxYzJWVGRHRjBaU2gyWlhKemFXOXVjeWs3WEc0Z0lHbG1JQ2doY0dGamEyRm5aVTFsZEdFZ2ZId2dUMkpxWldOMExtdGxlWE1vY0dGamEyRm5aVTFsZEdFcExteGxibWQwYUNBOVBUMGdNQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQnVkV3hzTzF4dUlDQjlYRzRnSUdOdmJuTjBJR2hwWkdWRVpYQnlaV05oZEdWa1ZtVnljMmx2Ym5NZ1BTQmpiMjVtYVdkUGNIUnBiMjV6TG1ocFpHVkVaWEJ5WldOaGRHVmtWbVZ5YzJsdmJuTTdYRzRnSUdOdmJuTjBJR2hoYzBScGMzUlVZV2R6SUQwZ1pHbHpkRlJoWjNNZ0ppWWdUMkpxWldOMExtdGxlWE1vWkdsemRGUmhaM01wTG14bGJtZDBhQ0ErSURBZ0ppWWdjR0ZqYTJGblpVNWhiV1U3WEc0Z0lHTnZibk4wSUdoaGMxWmxjbk5wYjI1SWFYTjBiM0o1SUQxY2JpQWdJQ0J3WVdOcllXZGxWbVZ5YzJsdmJuTWdKaVlnVDJKcVpXTjBMbXRsZVhNb2NHRmphMkZuWlZabGNuTnBiMjV6S1M1c1pXNW5kR2dnUGlBd0lDWW1JSEJoWTJ0aFoyVk9ZVzFsTzF4dVhHNGdJR052Ym5OMElHWnBiSFJsY2xabGNuTnBiMjV6SUQwZ0tIUmxlSFJUWldGeVkyZ3BJRDArSUh0Y2JpQWdJQ0JqYjI1emRDQm1hV3gwWlhKbFpGWmxjbk5wYjI1eklEMGdUMkpxWldOMExtdGxlWE1vZG1WeWMybHZibk1wTG5KbFpIVmpaU2dvWVdOakxDQjJaWEp6YVc5dUtTQTlQaUI3WEc0Z0lDQWdJQ0JwWmlBb2RHVjRkRk5sWVhKamFDQWhQVDBnSnljcElIdGNiaUFnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUIyWlhKemFXOXVjMXQyWlhKemFXOXVYU0FoUFQwZ0ozVnVaR1ZtYVc1bFpDY3BJSHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9jMlZ0ZG1WeUxuTmhkR2x6Wm1sbGN5aDJaWEp6YVc5dUxDQjBaWGgwVTJWaGNtTm9MQ0I3SUdsdVkyeDFaR1ZRY21WeVpXeGxZWE5sT2lCMGNuVmxMQ0JzYjI5elpUb2dkSEoxWlNCOUtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1lXTmpXM1psY25OcGIyNWRJRDBnZG1WeWMybHZibk5iZG1WeWMybHZibDA3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQmhZMk5iZG1WeWMybHZibDBnUFNCMlpYSnphVzl1YzF0MlpYSnphVzl1WFR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhKbGRIVnliaUJoWTJNN1hHNGdJQ0FnZlN3Z2UzMHBPMXh1WEc0Z0lDQWdjMlYwVUdGamEyRm5aVlpsY25OcGIyNXpLR1pwYkhSbGNtVmtWbVZ5YzJsdmJuTXBPMXh1SUNCOU8xeHVYRzRnSUhKbGRIVnliaUFvWEc0Z0lDQWdQRU5oY21RZ2MzZzllM3NnYldJNklESWdmWDArWEc0Z0lDQWdJQ0E4UTJGeVpFTnZiblJsYm5RK1hHNGdJQ0FnSUNBZ0lEeENiM2dnWkdGMFlTMTBaWE4wYVdROVhDSjJaWEp6YVc5dWMxd2lJSE40UFh0N0lHMDZJRElnZlgwK1hHNGdJQ0FnSUNBZ0lDQWdlMmhoYzBScGMzUlVZV2R6SUQ4Z0tGeHVJQ0FnSUNBZ0lDQWdJQ0FnUEQ1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnUEZOMGVXeGxaRlJsZUhRZ2RtRnlhV0Z1ZEQxY0luTjFZblJwZEd4bE1Wd2lQbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHQwS0NkMlpYSnphVzl1Y3k1amRYSnlaVzUwTFhSaFozTW5LWDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4YzNCaGJqNTdZQ0FvSkh0UFltcGxZM1F1YTJWNWN5aGthWE4wVkdGbmN5a3ViR1Z1WjNSb2ZTbGdmVHd2YzNCaGJqNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1BDOVRkSGxzWldSVVpYaDBQbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQThWbVZ5YzJsdmJuTlVZV2RNYVhOMElIQmhZMnRoWjJWT1lXMWxQWHR3WVdOcllXZGxUbUZ0WlgwZ2RHRm5jejE3WkdsemRGUmhaM045SUhScGJXVTllM1JwYldWOUlDOCtYRzRnSUNBZ0lDQWdJQ0FnSUNBOEx6NWNiaUFnSUNBZ0lDQWdJQ0FwSURvZ2JuVnNiSDFjYmlBZ0lDQWdJQ0FnSUNBOFBseHVJQ0FnSUNBZ0lDQWdJQ0FnUEZOMGVXeGxaRlJsZUhRZ2RtRnlhV0Z1ZEQxY0luTjFZblJwZEd4bE1Wd2lQbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjdkQ2duZG1WeWMybHZibk11ZG1WeWMybHZiaTFvYVhOMGIzSjVKeWw5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJRHh6Y0dGdVBudGdJQ2drZTA5aWFtVmpkQzVyWlhsektIQmhZMnRoWjJWV1pYSnphVzl1Y3lrdWJHVnVaM1JvZlNsZ2ZUd3ZjM0JoYmo1Y2JpQWdJQ0FnSUNBZ0lDQWdJRHd2VTNSNWJHVmtWR1Y0ZEQ1Y2JpQWdJQ0FnSUNBZ0lDQWdJRHhVWlhoMFJtbGxiR1JjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdhR1ZzY0dWeVZHVjRkRDE3ZENnbmRtVnljMmx2Ym5NdWMyVmhjbU5vTG5Cc1lXTmxhRzlzWkdWeUp5bDlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHOXVRMmhoYm1kbFBYdGtaV0p2ZFc1alpTZ29aU2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHWnBiSFJsY2xabGNuTnBiMjV6S0dVdWRHRnlaMlYwTG5aaGJIVmxLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdmU3dnTWpBd0tYMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2MybDZaVDFjSW5OdFlXeHNYQ0pjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5YVdGdWREMWNJbk4wWVc1a1lYSmtYQ0pjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdjM2c5ZTNzZ2QybGtkR2c2SUNjMU1DVW5JSDE5WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZQbHh1SUNBZ0lDQWdJQ0FnSUR3dlBseHVJQ0FnSUNBZ0lDQWdJSHRvWVhOV1pYSnphVzl1U0dsemRHOXllU0EvSUNoY2JpQWdJQ0FnSUNBZ0lDQWdJRHcrWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSHRvYVdSbFJHVndjbVZqWVhSbFpGWmxjbk5wYjI1eklEMDlQU0IwY25WbElDWW1JQ2hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlCQWRITXRhV2R1YjNKbElDMGdRV3hsY25RZ1pHOWxjeUJoWTJObGNIUWdZMmhwYkdSeVpXNGdaR1Z6Y0dsMFpTQjBhR1VnZEhsd1pTQmxjbkp2Y2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUR4QmJHVnlkQ0J6WlhabGNtbDBlVDFjSW1sdVptOWNJaUJ6ZUQxN2V5QnRZWEpuYVc1VWIzQTZJREVzSUcxaGNtZHBia0p2ZEhSdmJUb2dNU0I5ZlQ1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIdDBLQ2QyWlhKemFXOXVjeTVvYVdSbExXUmxjSEpsWTJGMFpXUW5LWDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4TDBGc1pYSjBQbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQXBmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQThWbVZ5YzJsdmJuTklhWE4wYjNKNVRHbHpkRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEJoWTJ0aFoyVk9ZVzFsUFh0d1lXTnJZV2RsVG1GdFpYMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhVzFsUFh0MGFXMWxmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpsY25OcGIyNXpQWHR3WVdOcllXZGxWbVZ5YzJsdmJuTjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDOCtYRzRnSUNBZ0lDQWdJQ0FnSUNBOEx6NWNiaUFnSUNBZ0lDQWdJQ0FwSURvZ2JuVnNiSDFjYmlBZ0lDQWdJQ0FnUEM5Q2IzZytYRzRnSUNBZ0lDQThMME5oY21SRGIyNTBaVzUwUGx4dUlDQWdJRHd2UTJGeVpENWNiaUFnS1R0Y2JuMDdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJRlpsY25OcGIyNXpPMXh1SWwxOSAqL1wiKTtcbnZhciBWZXJzaW9ucyA9ICh7IHBhY2thZ2VNZXRhLCBwYWNrYWdlTmFtZSB9KSA9PiB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcblx0Y29uc3QgeyBjb25maWdPcHRpb25zIH0gPSB1c2VDb25maWcoKTtcblx0Y29uc3QgeyB2ZXJzaW9ucyA9IHt9LCB0aW1lID0ge30sIFtcImRpc3QtdGFnc1wiXTogZGlzdFRhZ3MgPSB7fSB9ID0gcGFja2FnZU1ldGE7XG5cdGNvbnN0IFtwYWNrYWdlVmVyc2lvbnMsIHNldFBhY2thZ2VWZXJzaW9uc10gPSB1c2VTdGF0ZSh2ZXJzaW9ucyk7XG5cdGlmICghcGFja2FnZU1ldGEgfHwgT2JqZWN0LmtleXMocGFja2FnZU1ldGEpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IGhpZGVEZXByZWNhdGVkVmVyc2lvbnMgPSBjb25maWdPcHRpb25zLmhpZGVEZXByZWNhdGVkVmVyc2lvbnM7XG5cdGNvbnN0IGhhc0Rpc3RUYWdzID0gZGlzdFRhZ3MgJiYgT2JqZWN0LmtleXMoZGlzdFRhZ3MpLmxlbmd0aCA+IDAgJiYgcGFja2FnZU5hbWU7XG5cdGNvbnN0IGhhc1ZlcnNpb25IaXN0b3J5ID0gcGFja2FnZVZlcnNpb25zICYmIE9iamVjdC5rZXlzKHBhY2thZ2VWZXJzaW9ucykubGVuZ3RoID4gMCAmJiBwYWNrYWdlTmFtZTtcblx0Y29uc3QgZmlsdGVyVmVyc2lvbnMgPSAodGV4dFNlYXJjaCkgPT4ge1xuXHRcdHNldFBhY2thZ2VWZXJzaW9ucyhPYmplY3Qua2V5cyh2ZXJzaW9ucykucmVkdWNlKChhY2MsIHZlcnNpb24pID0+IHtcblx0XHRcdGlmICh0ZXh0U2VhcmNoICE9PSBcIlwiKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgdmVyc2lvbnNbdmVyc2lvbl0gIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0XHRpZiAoc2VtdmVyLnNhdGlzZmllcyh2ZXJzaW9uLCB0ZXh0U2VhcmNoLCB7XG5cdFx0XHRcdFx0XHRpbmNsdWRlUHJlcmVsZWFzZTogdHJ1ZSxcblx0XHRcdFx0XHRcdGxvb3NlOiB0cnVlXG5cdFx0XHRcdFx0fSkpIGFjY1t2ZXJzaW9uXSA9IHZlcnNpb25zW3ZlcnNpb25dO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgYWNjW3ZlcnNpb25dID0gdmVyc2lvbnNbdmVyc2lvbl07XG5cdFx0XHRyZXR1cm4gYWNjO1xuXHRcdH0sIHt9KSk7XG5cdH07XG5cdHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KENhcmQsIHtcblx0XHRzeDogeyBtYjogMiB9LFxuXHRcdGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KENhcmRDb250ZW50LCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4cyhCb3gsIHtcblx0XHRcdFwiZGF0YS10ZXN0aWRcIjogXCJ2ZXJzaW9uc1wiLFxuXHRcdFx0c3g6IHsgbTogMiB9LFxuXHRcdFx0Y2hpbGRyZW46IFtcblx0XHRcdFx0aGFzRGlzdFRhZ3MgPyAvKiBAX19QVVJFX18gKi8ganN4cyhGcmFnbWVudCwgeyBjaGlsZHJlbjogWy8qIEBfX1BVUkVfXyAqLyBqc3hzKFN0eWxlZFRleHQsIHtcblx0XHRcdFx0XHR2YXJpYW50OiBcInN1YnRpdGxlMVwiLFxuXHRcdFx0XHRcdGNoaWxkcmVuOiBbdChcInZlcnNpb25zLmN1cnJlbnQtdGFnc1wiKSwgLyogQF9fUFVSRV9fICovIGpzeChcInNwYW5cIiwgeyBjaGlsZHJlbjogYCAoJHtPYmplY3Qua2V5cyhkaXN0VGFncykubGVuZ3RofSlgIH0pXVxuXHRcdFx0XHR9KSwgLyogQF9fUFVSRV9fICovIGpzeChWZXJzaW9uc1RhZ0xpc3QsIHtcblx0XHRcdFx0XHRwYWNrYWdlTmFtZSxcblx0XHRcdFx0XHR0YWdzOiBkaXN0VGFncyxcblx0XHRcdFx0XHR0aW1lXG5cdFx0XHRcdH0pXSB9KSA6IG51bGwsXG5cdFx0XHRcdC8qIEBfX1BVUkVfXyAqLyBqc3hzKEZyYWdtZW50LCB7IGNoaWxkcmVuOiBbLyogQF9fUFVSRV9fICovIGpzeHMoU3R5bGVkVGV4dCwge1xuXHRcdFx0XHRcdHZhcmlhbnQ6IFwic3VidGl0bGUxXCIsXG5cdFx0XHRcdFx0Y2hpbGRyZW46IFt0KFwidmVyc2lvbnMudmVyc2lvbi1oaXN0b3J5XCIpLCAvKiBAX19QVVJFX18gKi8ganN4KFwic3BhblwiLCB7IGNoaWxkcmVuOiBgICgke09iamVjdC5rZXlzKHBhY2thZ2VWZXJzaW9ucykubGVuZ3RofSlgIH0pXVxuXHRcdFx0XHR9KSwgLyogQF9fUFVSRV9fICovIGpzeChUZXh0RmllbGQsIHtcblx0XHRcdFx0XHRoZWxwZXJUZXh0OiB0KFwidmVyc2lvbnMuc2VhcmNoLnBsYWNlaG9sZGVyXCIpLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBkZWJvdW5jZSgoZSkgPT4ge1xuXHRcdFx0XHRcdFx0ZmlsdGVyVmVyc2lvbnMoZS50YXJnZXQudmFsdWUpO1xuXHRcdFx0XHRcdH0sIDIwMCksXG5cdFx0XHRcdFx0c2l6ZTogXCJzbWFsbFwiLFxuXHRcdFx0XHRcdHZhcmlhbnQ6IFwic3RhbmRhcmRcIixcblx0XHRcdFx0XHRzeDogeyB3aWR0aDogXCI1MCVcIiB9XG5cdFx0XHRcdH0pXSB9KSxcblx0XHRcdFx0aGFzVmVyc2lvbkhpc3RvcnkgPyAvKiBAX19QVVJFX18gKi8ganN4cyhGcmFnbWVudCwgeyBjaGlsZHJlbjogW2hpZGVEZXByZWNhdGVkVmVyc2lvbnMgPT09IHRydWUgJiYgLyogQF9fUFVSRV9fICovIGpzeChBbGVydCwge1xuXHRcdFx0XHRcdHNldmVyaXR5OiBcImluZm9cIixcblx0XHRcdFx0XHRzeDoge1xuXHRcdFx0XHRcdFx0bWFyZ2luVG9wOiAxLFxuXHRcdFx0XHRcdFx0bWFyZ2luQm90dG9tOiAxXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRjaGlsZHJlbjogdChcInZlcnNpb25zLmhpZGUtZGVwcmVjYXRlZFwiKVxuXHRcdFx0XHR9KSwgLyogQF9fUFVSRV9fICovIGpzeChWZXJzaW9uc0hpc3RvcnlMaXN0LCB7XG5cdFx0XHRcdFx0cGFja2FnZU5hbWUsXG5cdFx0XHRcdFx0dGltZSxcblx0XHRcdFx0XHR2ZXJzaW9uczogcGFja2FnZVZlcnNpb25zXG5cdFx0XHRcdH0pXSB9KSA6IG51bGxcblx0XHRcdF1cblx0XHR9KSB9KVxuXHR9KTtcbn07XG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7IFZlcnNpb25zIGFzIGRlZmF1bHQgfTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VmVyc2lvbnMubWpzLm1hcCJdLCJtYXBwaW5ncyI6IjJXQVVBLElBQUksRUFBZ0IsVUFDaEIsR0FBYSxDQUNoQixRQUFTLENBQUUsS0FBTSxFQUFlLENBQ2hDLFVBQVcsQ0FBRSxLQUFNLFVBQVcsQ0FDOUIsQ0FDRyxHQUFXLEVBQUssS0FDaEIsR0FBYSxFQUFLLEtBQ04sRUFBSywyQkNiakIsRUFBa0IsQ0FDckIsYUFBYyxFQUNkLFlBQWEsQ0FDWixPQUNBLE9BQ0EsTUFDQSxDQUNELE1BQU8sR0FDUCxLQUFNLEdBQ04sTUFBTyxFQUFFLENBQ1QsTUFBTyxHQUNQLFdBQVksR0FDWixTQUFVLEdBQ1YsYUFBYyxHQUNkLGdCQUFpQixHQUNqQixXQUFZLEdBQ1osV0FBWSxHQUNaLFFBQVMsR0FDVCxvQkFBcUIsR0FDckIsWUFBYSxHQUNiLHVCQUF3QixHQUN4QixNQUFPLFlBQ1AsQ0FJRCxTQUFTQSxHQUFpQixFQUFZLEVBQUUsQ0FBRSxDQUN6QyxJQUFNLEVBQWdCLFFBQVEsaUNBQW1DLEVBQUUsQ0FDN0QsRUFBa0IsQ0FDdkIsR0FBRyxFQUNILEdBQUcsRUFDSCxHQUFHLEVBQ0gsTUFBTyxDQUNO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
1
+ import{a as e}from"./rolldown-runtime.M0LkISsN.js";import{$n as t,Bt as n,Ht as r,Nt as i,Pt as a,Qn as o,Xn as s,Yn as c,Yt as l,_n as u,bn as d,en as ee,hn as f,jt as p,ln as m,mt as h,nr as g,pt as te,qt as ne,sn as _,vn as re,wn as v,wt as ie,yn as ae}from"./vendors.DzxewqGz.js";import{d as oe,g as se,h as ce,r as y,t as le,u as b}from"./utils.GdLDo5re.js";var x=`#4b5e40`,ue={primary:{main:x},secondary:{main:`#20232a`}},de=c[900],fe=c[700];c[200];var S=o(),C=e(g(),1),w={primaryColor:x,pkgManagers:[`yarn`,`pnpm`,`npm`],scope:``,base:``,flags:{},login:!0,url_prefix:``,showInfo:!0,showSettings:!0,showThemeSwitch:!0,showFooter:!0,showSearch:!0,showRaw:!0,showDownloadTarball:!0,showUplinks:!0,hideDeprecatedVersions:!1,title:`Verdaccio`};function pe(e={}){let t=window?.__VERDACCIO_BASENAME_UI_OPTIONS||{},n={...w,...t,...e,flags:{...w.flags,...t.flags,...e.flags}};return n.primaryColor||=x,n}var T=(0,C.createContext)(void 0),me=({children:e,overrideConfig:t={}})=>{let n=(0,C.useMemo)(()=>({configOptions:pe(t)}),[t]);return(0,S.jsx)(T.Provider,{value:n,children:e})},E=()=>{let e=(0,C.useContext)(T);if(!e)throw Error(`useConfig must be used within AppConfigurationProvider`);return e},he=e(re(),1),D;try{localStorage.setItem(`__TEST__`,``),localStorage.removeItem(`__TEST__`),D=localStorage}catch{D=he.default}function O(e,t){D.setItem(`username`,e),D.setItem(`token`,t)}function ge(){D.removeItem(`username`),D.removeItem(`token`)}function _e(){return{username:D.getItem(`username`),token:D.getItem(`token`)}}var ve=D,ye=class extends Error{code;constructor(e,t){super(e),this.name=`CustomError`,this.code=t??500}};function be(e){if(e.headers){let t=e.headers.get(`Content-Type`);if(t?.includes(`application/pdf`))return Promise.all([e.ok,e.blob(),e.status]);if(t?.includes(`application/json`))return Promise.all([e.ok,e.json(),e.status]);if(t?.includes(`text/`))return Promise.all([e.ok,e.text(),e.status]);if(e.url&&e.url.endsWith(`.tgz`)===!0)return Promise.all([e.ok,e.blob(),e.status])}return Promise.all([e.ok,e.text(),e.status])}var k=`Authorization`,A=new class{request(e,t=`GET`,n={headers:{}}){let r=ve.getItem(`token`),i=new Headers(n.headers);return r&&i.has(k)===!1&&(i.set(k,`Bearer ${r}`),n.headers=i),i.set(`x-client`,`verdaccio-ui`),new Promise((r,i)=>{fetch(e,{method:t,credentials:`same-origin`,signal:n.signal,...n}).then(be).then(e=>{let[t,n,a]=e;t===!0?r(n):i(new ye(typeof n==`string`?n:n?.error??n?.message??`Unknown error`,a))}).catch(e=>{i(e)})})}};function j(e,t,n,r){let i=`${e}${t}`;return n&&(i+=n),r&&(i+=`?v=${r}`),i}function M(e,t,n,r){let i=j(e,t,n,r),{data:a,error:o,isLoading:s,mutate:c}=u(i,()=>A.request(i));return{data:a,error:o,isLoading:s,mutate:c}}var N={primaryColor:`#ffffff`,darkMode:!1,pkgManagers:[`yarn`,`pnpm`,`npm`],scope:``,base:``,login:!0,flags:{},url_prefix:``,title:`Verdaccio`};function P(){return window?.__VERDACCIO_BASENAME_UI_OPTIONS??N}var F=function(e){return e.LOGIN=`/-/verdaccio/sec/login`,e.SIGNUP=`/-/verdaccio/sec/signup`,e.CONFIG=`/-/verdaccio/packages`,e.PACKAGES=`/-/verdaccio/data/packages`,e.SEARCH=`/-/verdaccio/data/search/`,e.SIDEBAR=`/-/verdaccio/data/sidebar/`,e.README=`/-/verdaccio/data/package/readme/`,e}({}),I={JSON:`application/json`};function L(e){return e.replace(/\/$/,``)}function xe(e,t){return t?`${t}/${e}`:e}var R=(0,C.createContext)(void 0),Se=({children:e})=>{let{scope:t,package:n,version:r}=f(),i=L(P().base),a=xe(n??``,t),o=M(i,F.README,a,r),s=M(i,F.SIDEBAR,a,r),c=o.isLoading||s.isLoading,l=o.error||s.error,u=o.error?.code??s.error?.code,d=(0,C.useMemo)(()=>({packageMeta:s.data,readMe:o.data,packageName:a,packageVersion:r,isLoading:c,isForbidden:u===403,isUnAuthorized:u===401,hasNotBeenFound:u===404,isError:u!==void 0,error:l}),[s.data,o.data,a,r,c,u,l]);return(0,S.jsx)(R.Provider,{value:d,children:e})},Ce=()=>{let e=(0,C.useContext)(R);if(e===void 0)throw Error(`useVersion must be used within a VersionProvider`);return e},z=(e,t)=>{let[n,r]=(0,C.useState)(()=>{try{let n=window.localStorage.getItem(e);return n?JSON.parse(n):t}catch(e){return console.error(`An error occurred getting a sessionStorage key`,e),t}});return[n,t=>{try{let i=t instanceof Function?t(n):t;r(i),window.localStorage.setItem(e,JSON.stringify(i))}catch(e){console.error(`An error occurred writing to sessionStorage`,e)}}]},B=(0,C.createContext)({setLanguage:e=>{},language:`en-US`,listLanguages:[]}),we=({children:e,onMount:t,i18n:n,listLanguages:r})=>{let i=n.languages?.[0],[a,o]=z(`language`,i),s=(0,C.useCallback)(async()=>{await n.changeLanguage(a)},[n,a]);return(0,C.useEffect)(()=>{s(),t()},[a,t,s]),(0,S.jsx)(ae,{i18n:n,children:(0,S.jsx)(B.Provider,{value:{setLanguage:o,language:a,listLanguages:r},children:e})})},Te=()=>(0,C.useContext)(B),V=(0,C.createContext)({}),Ee=P(),De=({children:e})=>{let t=M(L(Ee.base),F.PACKAGES);return(0,S.jsx)(V.Provider,{value:{manifests:t.data??[],isLoading:t.isLoading,isError:t.error?.code!==void 0},children:e})},Oe=()=>(0,C.useContext)(V),H=async(e,t,n,r)=>{let i=t.toUpperCase()===`GET`,a=e;return A.request(a,t,{body:i?void 0:JSON.stringify(n),headers:{Accept:I.JSON,...i?{}:{"Content-Type":I.JSON}},signal:r?.signal})};function U(e,t,n=`POST`,r={}){let{data:i,error:a,isMutating:o,trigger:s}=_(r.buildUrl?r.buildUrl(e,t):`${e}${t}`,(e,{arg:t})=>H(e,n,t??{}));return{data:i,error:a,isMutating:o,trigger:s}}async function ke(e,{arg:t}){return A.request(t.link,`GET`,{headers:{accept:`text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3`},credentials:`include`})}function Ae(){let{trigger:e,isMutating:t,error:n}=_(`tarball-download`,ke);return{download:e,isDownloading:t,error:n}}function W(){let{token:e,username:t}=_e();return le(e)?{token:null,username:null}:{token:e,username:t}}function je(e){let t=e?.info?.message||e?.response?.data?.message||e?.message||`Authentication failed`;return Error(t)}var G=(0,C.createContext)({userState:{token:null,username:null},setUserState:()=>{},handleLogin:async()=>{},logOutUser:()=>{}}),Me=L(P().base),Ne=({children:e})=>{let[t,n]=C.useState(W()),{data:r,isMutating:i,trigger:a}=U(Me,F.LOGIN,`POST`);return(0,C.useEffect)(()=>{r&&!i&&(n(r),r.username&&r.token&&O(r.username,r.token))},[r,i]),(0,S.jsx)(G.Provider,{value:{handleLogin:async e=>{await a(e)},userState:t,logOutUser:()=>{n(W()),ge(),window.location?.reload()},setUserState:n},children:e})},Pe=()=>(0,C.useContext)(G),K=(0,C.createContext)({isLatest:!1,isGlobal:!1,yarnModern:!1}),Fe=({children:e})=>{let[t,n]=z(`settings-ui-verdaccio`,{}),[r,i]=(0,C.useState)(t||{}),a=(0,C.useCallback)(e=>{i(e),n(e)},[n]),o=(0,C.useMemo)(()=>({localSettings:r||{},updateSettings:a}),[r,a]);return(0,S.jsx)(K.Provider,{value:o,children:e})},Ie=()=>(0,C.useContext)(K),q=(0,C.createContext)({searchResults:[],isLoading:!1}),Le=P();function Re(e,t,n=`POST`){let{data:r,error:i,isMutating:a,trigger:o}=_(`${e}${t}`,(e,{arg:t})=>H(`${e}${encodeURIComponent(t?.text??``)}`,n,t??{},{signal:t?.signal}));return{data:r,error:i,isMutating:a,trigger:o}}var ze=({children:e})=>{let{data:t,isMutating:n,error:r,trigger:i}=Re(L(Le.base),F.SEARCH,`GET`),a={searchResults:t??[],isLoading:n,isError:!!r,error:r,doSearch:async e=>{try{await i({text:e.text,signal:e.signal})}catch(e){console.error(`Search failed:`,e)}}};return(0,S.jsx)(q.Provider,{value:a,children:e})},Be=()=>(0,C.useContext)(q),J=(0,C.createContext)(void 0),Ve=({children:e})=>{let{download:t,isDownloading:n}=Ae(),r=(0,C.useCallback)(async({link:e})=>{try{let n=await t({link:e});if(!n)return;ce(n,se(e))}catch(e){console.error(`Error during tarball download:`,e)}},[t]);return(0,S.jsx)(J.Provider,{value:{downloadTarball:r,isDownloading:n},children:e})},Y=()=>{let e=(0,C.useContext)(J);if(!e)throw Error(`useDownload must be used within a DownloadProvider`);return e},He=t(m,{target:`e2ct7p50`})({name:`lq5caq`,styles:`text-decoration:none;&:hover,&:focus{text-decoration:underline;}`}),X=function({ref:e,to:t,children:n,variant:r,className:i,onClick:a}){return(0,S.jsx)(He,{className:i,onClick:a,ref:e,to:t,children:(0,S.jsx)(v,{color:`primary`,variant:r,children:n})})},Z=t(`div`,{target:`e19ns5fr1`})(({theme:e})=>({flex:`1 1 auto`,borderBottom:`1px dotted ${e.palette.mode==`light`?`rgba(0, 0, 0, 0.2)`:`rgba(255, 255, 255, 0.2)`} `,whiteSpace:`nowrap`,height:`0.5em`,margin:`0 16px`}),``),Q=t(p,{target:`e19ns5fr0`})(({theme:e})=>({flex:`none`,opacity:.6,color:e.palette.mode==`light`?e.palette.black:s.white}),``);function Ue(e){return Object.keys(e).reduce((t,n)=>(e[n].deprecated||(t[n]=e[n]),t),{})}var We=({versions:e,packageName:t,time:n})=>{let{t:r}=d(),{configOptions:o}=E(),s=o.hideDeprecatedVersions?Ue(e):e;return(0,S.jsx)(a,{dense:!0,children:Object.keys(s).sort((e,t)=>{let r=n[e]?new Date(n[e]).getTime():0;return(n[t]?new Date(n[t]).getTime():0)-r}).map(a=>(0,S.jsxs)(i,{className:`version-item`,"data-testid":`version-${a}`,sx:{pr:0},children:[(0,S.jsx)(X,{to:`${y.DETAIL}${t}/v/${a}`,variant:`outline`,children:(0,S.jsx)(Q,{"data-testid":`version-list-link`,disableTypography:!1,primary:a,sx:typeof e[a]?.deprecated==`string`?{textDecoration:`line-through`}:void 0})}),typeof e[a]?.deprecated==`string`?(0,S.jsx)(ne,{color:`warning`,"data-testid":`deprecated-badge`,label:r(`versions.deprecated`),size:`small`,sx:{marginLeft:1},variant:`outlined`}):null,(0,S.jsx)(Z,{}),(0,S.jsx)(Q,{"data-testid":`version-list-text`,primary:n[a]?oe(n[a]):r(`versions.not-available`),slotProps:{primary:{title:b(n[a])}}})]},a))})},Ge=({tags:e,packageName:t,time:n})=>(0,S.jsx)(a,{dense:!0,children:Object.keys(e).sort((t,r)=>n[e[t]]<n[e[r]]?1:n[e[t]]>n[e[r]]?-1:0).map(n=>(0,S.jsxs)(i,{className:`version-item`,"data-testid":`tag-${n}`,sx:{pr:0},children:[(0,S.jsx)(X,{to:`${y.DETAIL}${t}/v/${e[n]}`,variant:`outline`,children:(0,S.jsx)(Q,{children:n})}),(0,S.jsx)(Z,{}),(0,S.jsx)(Q,{children:e[n]})]},n))}),Ke=e(h(),1),qe=e(te(),1),$=t(v,{target:`e1kn2fte0`})(e=>({fontWeight:e.theme&&e.theme.fontWeight.bold,textTransform:`capitalize`}),``),Je=({packageMeta:e,packageName:t})=>{let{t:i}=d(),{configOptions:a}=E(),{versions:o={},time:s={},"dist-tags":c={}}=e,[u,f]=(0,C.useState)(o);if(!e||Object.keys(e).length===0)return null;let p=a.hideDeprecatedVersions,m=c&&Object.keys(c).length>0&&t,h=u&&Object.keys(u).length>0&&t,g=e=>{f(Object.keys(o).reduce((t,n)=>((e===``||o[n]!==void 0&&qe.default.satisfies(n,e,{includePrerelease:!0,loose:!0}))&&(t[n]=o[n]),t),{}))};return(0,S.jsx)(r,{sx:{mb:2},children:(0,S.jsx)(n,{children:(0,S.jsxs)(ee,{"data-testid":`versions`,sx:{m:2},children:[m?(0,S.jsxs)(S.Fragment,{children:[(0,S.jsxs)($,{variant:`subtitle1`,children:[i(`versions.current-tags`),(0,S.jsx)(`span`,{children:` (${Object.keys(c).length})`})]}),(0,S.jsx)(Ge,{packageName:t,tags:c,time:s})]}):null,(0,S.jsxs)(S.Fragment,{children:[(0,S.jsxs)($,{variant:`subtitle1`,children:[i(`versions.version-history`),(0,S.jsx)(`span`,{children:` (${Object.keys(u).length})`})]}),(0,S.jsx)(ie,{helperText:i(`versions.search.placeholder`),onChange:(0,Ke.default)(e=>{g(e.target.value)},200),size:`small`,variant:`standard`,sx:{width:`50%`}})]}),h?(0,S.jsxs)(S.Fragment,{children:[p===!0&&(0,S.jsx)(l,{severity:`info`,sx:{marginTop:1,marginBottom:1},children:i(`versions.hide-deprecated`)}),(0,S.jsx)(We,{packageName:t,time:s,versions:u})]}):null]})})})};export{me as C,fe as D,de as E,O as S,ue as T,z as _,ze as a,L as b,Ie as c,je as d,U as f,Te as g,we as h,Y as i,Ne as l,Oe as m,X as n,Be as o,De as p,Ve as r,Fe as s,Je as t,Pe as u,Se as v,E as w,P as x,Ce as y};
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVyc2lvbnMuRGNqT3RtMTguanMiLCJuYW1lcyI6WyJnZXRDb25maWd1cmF0aW9uIiwibWVtb3J5U3RvcmFnZSIsImNvbmZpZ3VyYXRpb24iLCJfc3R5bGVkIiwiX3N0eWxlZCIsIkxpbmsiLCJMaXN0SXRlbVRleHQiLCJMaW5rIiwiTGlzdEl0ZW1UZXh0IiwiX3N0eWxlZCIsInNlbXZlciIsIkZyYWdtZW50Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vdWktY29tcG9uZW50cy9idWlsZC9UaGVtZS9jb2xvcnMubWpzIiwiLi4vLi4vLi4vdWktY29tcG9uZW50cy9idWlsZC9wcm92aWRlcnMvQXBwQ29uZmlndXJhdGlvblByb3ZpZGVyL0FwcENvbmZpZ3VyYXRpb25Qcm92aWRlci5tanMiLCIuLi8uLi8uLi91aS1jb21wb25lbnRzL2J1aWxkL3N0b3JlL3N0b3JhZ2UubWpzIiwiLi4vLi4vLi4vdWktY29tcG9uZW50cy9idWlsZC9zdG9yZS9hcGkubWpzIiwiLi4vLi4vLi4vdWktY29tcG9uZW50cy9idWlsZC9hcGkvdXNlLWRhdGEubWpzIiwiLi4vLi4vLi4vdWktY29tcG9uZW50cy9idWlsZC9jb25maWd1cmF0aW9uLm1qcyIsIi4uLy4uLy4uL3VpLWNvbXBvbmVudHMvYnVpbGQvc3RvcmUvcm91dGVzLm1qcyIsIi4uLy4uLy4uL3VpLWNvbXBvbmVudHMvYnVpbGQvc3RvcmUvdXRpbHMubWpzIiwiLi4vLi4vLi4vdWktY29tcG9uZW50cy9idWlsZC9wcm92aWRlcnMvVmVyc2lvblByb3ZpZGVyL1ZlcnNpb25Qcm92aWRlci5tanMiLCIuLi8uLi8uLi91aS1jb21wb25lbnRzL2J1aWxkL2hvb2tzL3VzZUxvY2FsU3RvcmFnZS5tanMiLCIuLi8uLi8uLi91aS1jb21wb25lbnRzL2J1aWxkL3Byb3ZpZGVycy9UcmFuc2xhdG9yUHJvdmlkZXIvVHJhbnNsYXRvclByb3ZpZGVyLm1qcyIsIi4uLy4uLy4uL3VpLWNvbXBvbmVudHMvYnVpbGQvcHJvdmlkZXJzL01hbmlmZXN0c1Byb3ZpZGVyL01hbmlmZXN0c1Byb3ZpZGVyLm1qcyIsIi4uLy4uLy4uL3VpLWNvbXBvbmVudHMvYnVpbGQvYXBpL3VzZS1kYXRhLW11dGF0aW9uLm1qcyIsIi4uLy4uLy4uL3VpLWNvbXBvbmVudHMvYnVpbGQvcHJvdmlkZXJzL0F1dGhQcm92aWRlci91dGlscy5tanMiLCIuLi8uLi8uLi91aS1jb21wb25lbnRzL2J1aWxkL3Byb3ZpZGVycy9BdXRoUHJvdmlkZXIvQXV0aFByb3ZpZGVyLm1qcyIsIi4uLy4uLy4uL3VpLWNvbXBvbmVudHMvYnVpbGQvcHJvdmlkZXJzL1BlcnNpc3RlbmNlU2V0dGluZ1Byb3ZpZGVyL1BlcnNpc3RlbmNlU2V0dGluZ1Byb3ZpZGVyLm1qcyIsIi4uLy4uLy4uL3VpLWNvbXBvbmVudHMvYnVpbGQvcHJvdmlkZXJzL1NlYXJjaFByb3ZpZGVyL1NlYXJjaFByb3ZpZGVyLm1qcyIsIi4uLy4uLy4uL3VpLWNvbXBvbmVudHMvYnVpbGQvcHJvdmlkZXJzL0Rvd25sb2FkUHJvdmlkZXIvRG93bmxvYWRQcm92aWRlci5tanMiLCIuLi8uLi8uLi91aS1jb21wb25lbnRzL2J1aWxkL2NvbXBvbmVudHMvTGluay9MaW5rLm1qcyIsIi4uLy4uLy4uL3VpLWNvbXBvbmVudHMvYnVpbGQvY29tcG9uZW50cy9WZXJzaW9ucy9zdHlsZXMubWpzIiwiLi4vLi4vLi4vdWktY29tcG9uZW50cy9idWlsZC9jb21wb25lbnRzL1ZlcnNpb25zL0hpc3RvcnlMaXN0Lm1qcyIsIi4uLy4uLy4uL3VpLWNvbXBvbmVudHMvYnVpbGQvY29tcG9uZW50cy9WZXJzaW9ucy9UYWdMaXN0Lm1qcyIsIi4uLy4uLy4uL3VpLWNvbXBvbmVudHMvYnVpbGQvY29tcG9uZW50cy9WZXJzaW9ucy9WZXJzaW9ucy5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19leHBvcnRBbGwgfSBmcm9tIFwiLi4vX3ZpcnR1YWwvX3JvbGxkb3duL3J1bnRpbWUubWpzXCI7XG5pbXBvcnQgeyBncmV5IH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWwvY29sb3JzXCI7XG4vLyNyZWdpb24gc3JjL1RoZW1lL2NvbG9ycy50c1xudmFyIGNvbG9yc19leHBvcnRzID0gLyogQF9fUFVSRV9fICovIF9fZXhwb3J0QWxsKHtcblx0UFJJTUFSWV9DT0xPUjogKCkgPT4gUFJJTUFSWV9DT0xPUixcblx0YmFzZUNvbG9yczogKCkgPT4gYmFzZUNvbG9ycyxcblx0Z3JleURhcms6ICgpID0+IGdyZXlEYXJrLFxuXHRncmV5TGlnaHQ6ICgpID0+IGdyZXlMaWdodCxcblx0Z3JleU1lZGl1bTogKCkgPT4gZ3JleU1lZGl1bVxufSk7XG52YXIgUFJJTUFSWV9DT0xPUiA9IFwiIzRiNWU0MFwiO1xudmFyIGJhc2VDb2xvcnMgPSB7XG5cdHByaW1hcnk6IHsgbWFpbjogUFJJTUFSWV9DT0xPUiB9LFxuXHRzZWNvbmRhcnk6IHsgbWFpbjogXCIjMjAyMzJhXCIgfVxufTtcbnZhciBncmV5RGFyayA9IGdyZXlbOTAwXTtcbnZhciBncmV5TWVkaXVtID0gZ3JleVs3MDBdO1xudmFyIGdyZXlMaWdodCA9IGdyZXlbMjAwXTtcbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgUFJJTUFSWV9DT0xPUiwgYmFzZUNvbG9ycywgY29sb3JzX2V4cG9ydHMsIGdyZXlEYXJrLCBncmV5TWVkaXVtIH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbG9ycy5tanMubWFwIiwiaW1wb3J0IHsgUFJJTUFSWV9DT0xPUiB9IGZyb20gXCIuLi8uLi9UaGVtZS9jb2xvcnMubWpzXCI7XG5pbXBvcnQgeyBqc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcbi8vI3JlZ2lvbiBzcmMvcHJvdmlkZXJzL0FwcENvbmZpZ3VyYXRpb25Qcm92aWRlci9BcHBDb25maWd1cmF0aW9uUHJvdmlkZXIudHN4XG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuXHRwcmltYXJ5Q29sb3I6IFBSSU1BUllfQ09MT1IsXG5cdHBrZ01hbmFnZXJzOiBbXG5cdFx0XCJ5YXJuXCIsXG5cdFx0XCJwbnBtXCIsXG5cdFx0XCJucG1cIlxuXHRdLFxuXHRzY29wZTogXCJcIixcblx0YmFzZTogXCJcIixcblx0ZmxhZ3M6IHt9LFxuXHRsb2dpbjogdHJ1ZSxcblx0dXJsX3ByZWZpeDogXCJcIixcblx0c2hvd0luZm86IHRydWUsXG5cdHNob3dTZXR0aW5nczogdHJ1ZSxcblx0c2hvd1RoZW1lU3dpdGNoOiB0cnVlLFxuXHRzaG93Rm9vdGVyOiB0cnVlLFxuXHRzaG93U2VhcmNoOiB0cnVlLFxuXHRzaG93UmF3OiB0cnVlLFxuXHRzaG93RG93bmxvYWRUYXJiYWxsOiB0cnVlLFxuXHRzaG93VXBsaW5rczogdHJ1ZSxcblx0aGlkZURlcHJlY2F0ZWRWZXJzaW9uczogZmFsc2UsXG5cdHRpdGxlOiBcIlZlcmRhY2Npb1wiXG59O1xuLyoqXG4qIE1lcmdlcyBkZWZhdWx0cywgd2luZG93IGdsb2JhbHMsIGFuZCBvcHRpb25hbCBsb2NhbCBvdmVycmlkZXMuXG4qL1xuZnVuY3Rpb24gZ2V0Q29uZmlndXJhdGlvbihvdmVycmlkZXMgPSB7fSkge1xuXHRjb25zdCB3aW5kb3dPcHRpb25zID0gd2luZG93Py5fX1ZFUkRBQ0NJT19CQVNFTkFNRV9VSV9PUFRJT05TIHx8IHt9O1xuXHRjb25zdCB1aUNvbmZpZ3VyYXRpb24gPSB7XG5cdFx0Li4uREVGQVVMVF9PUFRJT05TLFxuXHRcdC4uLndpbmRvd09wdGlvbnMsXG5cdFx0Li4ub3ZlcnJpZGVzLFxuXHRcdGZsYWdzOiB7XG5cdFx0XHQuLi5ERUZBVUxUX09QVElPTlMuZmxhZ3MsXG5cdFx0XHQuLi53aW5kb3dPcHRpb25zLmZsYWdzLFxuXHRcdFx0Li4ub3ZlcnJpZGVzLmZsYWdzXG5cdFx0fVxuXHR9O1xuXHRpZiAoIXVpQ29uZmlndXJhdGlvbi5wcmltYXJ5Q29sb3IpIHVpQ29uZmlndXJhdGlvbi5wcmltYXJ5Q29sb3IgPSBQUklNQVJZX0NPTE9SO1xuXHRyZXR1cm4gdWlDb25maWd1cmF0aW9uO1xufVxudmFyIEFwcENvbmZpZ3VyYXRpb25Db250ZXh0ID0gY3JlYXRlQ29udGV4dCh2b2lkIDApO1xudmFyIEFwcENvbmZpZ3VyYXRpb25Qcm92aWRlciA9ICh7IGNoaWxkcmVuLCBvdmVycmlkZUNvbmZpZyA9IHt9IH0pID0+IHtcblx0Y29uc3QgdmFsdWUgPSB1c2VNZW1vKCgpID0+ICh7IGNvbmZpZ09wdGlvbnM6IGdldENvbmZpZ3VyYXRpb24ob3ZlcnJpZGVDb25maWcpIH0pLCBbb3ZlcnJpZGVDb25maWddKTtcblx0cmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goQXBwQ29uZmlndXJhdGlvbkNvbnRleHQuUHJvdmlkZXIsIHtcblx0XHR2YWx1ZSxcblx0XHRjaGlsZHJlblxuXHR9KTtcbn07XG52YXIgdXNlQ29uZmlnID0gKCkgPT4ge1xuXHRjb25zdCBjdHggPSB1c2VDb250ZXh0KEFwcENvbmZpZ3VyYXRpb25Db250ZXh0KTtcblx0aWYgKCFjdHgpIHRocm93IG5ldyBFcnJvcihcInVzZUNvbmZpZyBtdXN0IGJlIHVzZWQgd2l0aGluIEFwcENvbmZpZ3VyYXRpb25Qcm92aWRlclwiKTtcblx0cmV0dXJuIGN0eDtcbn07XG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7IEFwcENvbmZpZ3VyYXRpb25Qcm92aWRlciwgdXNlQ29uZmlnIH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFwcENvbmZpZ3VyYXRpb25Qcm92aWRlci5tanMubWFwIiwiaW1wb3J0IG1lbW9yeVN0b3JhZ2UgZnJvbSBcImxvY2Fsc3RvcmFnZS1tZW1vcnlcIjtcbi8vI3JlZ2lvbiBzcmMvc3RvcmUvc3RvcmFnZS50c1xudmFyIHN0b3JhZ2U7XG50cnkge1xuXHRsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIl9fVEVTVF9fXCIsIFwiXCIpO1xuXHRsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcIl9fVEVTVF9fXCIpO1xuXHRzdG9yYWdlID0gbG9jYWxTdG9yYWdlO1xufSBjYXRjaCB7XG5cdHN0b3JhZ2UgPSBtZW1vcnlTdG9yYWdlO1xufVxuZnVuY3Rpb24gc2F2ZUF1dGgodXNlcm5hbWUsIHRva2VuKSB7XG5cdHN0b3JhZ2Uuc2V0SXRlbShcInVzZXJuYW1lXCIsIHVzZXJuYW1lKTtcblx0c3RvcmFnZS5zZXRJdGVtKFwidG9rZW5cIiwgdG9rZW4pO1xufVxuZnVuY3Rpb24gY2xlYXJBdXRoKCkge1xuXHRzdG9yYWdlLnJlbW92ZUl0ZW0oXCJ1c2VybmFtZVwiKTtcblx0c3RvcmFnZS5yZW1vdmVJdGVtKFwidG9rZW5cIik7XG59XG5mdW5jdGlvbiBnZXRBdXRoKCkge1xuXHRyZXR1cm4ge1xuXHRcdHVzZXJuYW1lOiBzdG9yYWdlLmdldEl0ZW0oXCJ1c2VybmFtZVwiKSxcblx0XHR0b2tlbjogc3RvcmFnZS5nZXRJdGVtKFwidG9rZW5cIilcblx0fTtcbn1cbnZhciBzdG9yYWdlX2RlZmF1bHQgPSBzdG9yYWdlO1xuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBjbGVhckF1dGgsIHN0b3JhZ2VfZGVmYXVsdCBhcyBkZWZhdWx0LCBnZXRBdXRoLCBzYXZlQXV0aCB9O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdG9yYWdlLm1qcy5tYXAiLCJpbXBvcnQgc3RvcmFnZV9kZWZhdWx0IGZyb20gXCIuL3N0b3JhZ2UubWpzXCI7XG4vLyNyZWdpb24gc3JjL3N0b3JlL2FwaS50c1xudmFyIEN1c3RvbUVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG5cdGNvZGU7XG5cdGNvbnN0cnVjdG9yKG1lc3NhZ2UsIGNvZGUpIHtcblx0XHRzdXBlcihtZXNzYWdlKTtcblx0XHR0aGlzLm5hbWUgPSBcIkN1c3RvbUVycm9yXCI7XG5cdFx0dGhpcy5jb2RlID0gY29kZSA/PyA1MDA7XG5cdH1cbn07XG4vKipcbiogSGFuZGxlcyByZXNwb25zZSBhY2NvcmRpbmcgdG8gY29udGVudCB0eXBlXG4qIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZVxuKiBAcmV0dXJucyB7cHJvbWlzZX1cbiovXG5mdW5jdGlvbiBoYW5kbGVSZXNwb25zZVR5cGUocmVzcG9uc2UpIHtcblx0aWYgKHJlc3BvbnNlLmhlYWRlcnMpIHtcblx0XHRjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpO1xuXHRcdGlmIChjb250ZW50VHlwZT8uaW5jbHVkZXMoXCJhcHBsaWNhdGlvbi9wZGZcIikpIHJldHVybiBQcm9taXNlLmFsbChbXG5cdFx0XHRyZXNwb25zZS5vayxcblx0XHRcdHJlc3BvbnNlLmJsb2IoKSxcblx0XHRcdHJlc3BvbnNlLnN0YXR1c1xuXHRcdF0pO1xuXHRcdGlmIChjb250ZW50VHlwZT8uaW5jbHVkZXMoXCJhcHBsaWNhdGlvbi9qc29uXCIpKSByZXR1cm4gUHJvbWlzZS5hbGwoW1xuXHRcdFx0cmVzcG9uc2Uub2ssXG5cdFx0XHRyZXNwb25zZS5qc29uKCksXG5cdFx0XHRyZXNwb25zZS5zdGF0dXNcblx0XHRdKTtcblx0XHRpZiAoY29udGVudFR5cGU/LmluY2x1ZGVzKFwidGV4dC9cIikpIHJldHVybiBQcm9taXNlLmFsbChbXG5cdFx0XHRyZXNwb25zZS5vayxcblx0XHRcdHJlc3BvbnNlLnRleHQoKSxcblx0XHRcdHJlc3BvbnNlLnN0YXR1c1xuXHRcdF0pO1xuXHRcdGlmIChyZXNwb25zZS51cmwgJiYgcmVzcG9uc2UudXJsLmVuZHNXaXRoKFwiLnRnelwiKSA9PT0gdHJ1ZSkgcmV0dXJuIFByb21pc2UuYWxsKFtcblx0XHRcdHJlc3BvbnNlLm9rLFxuXHRcdFx0cmVzcG9uc2UuYmxvYigpLFxuXHRcdFx0cmVzcG9uc2Uuc3RhdHVzXG5cdFx0XSk7XG5cdH1cblx0cmV0dXJuIFByb21pc2UuYWxsKFtcblx0XHRyZXNwb25zZS5vayxcblx0XHRyZXNwb25zZS50ZXh0KCksXG5cdFx0cmVzcG9uc2Uuc3RhdHVzXG5cdF0pO1xufVxudmFyIEF1dGhIZWFkZXIgPSBcIkF1dGhvcml6YXRpb25cIjtcbnZhciBBUEkgPSBjbGFzcyB7XG5cdHJlcXVlc3QodXJsLCBtZXRob2QgPSBcIkdFVFwiLCBvcHRpb25zID0geyBoZWFkZXJzOiB7fSB9KSB7XG5cdFx0Y29uc3QgdG9rZW4gPSBzdG9yYWdlX2RlZmF1bHQuZ2V0SXRlbShcInRva2VuXCIpO1xuXHRcdGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpO1xuXHRcdGlmICh0b2tlbiAmJiBoZWFkZXJzLmhhcyhBdXRoSGVhZGVyKSA9PT0gZmFsc2UpIHtcblx0XHRcdGhlYWRlcnMuc2V0KEF1dGhIZWFkZXIsIGBCZWFyZXIgJHt0b2tlbn1gKTtcblx0XHRcdG9wdGlvbnMuaGVhZGVycyA9IGhlYWRlcnM7XG5cdFx0fVxuXHRcdGhlYWRlcnMuc2V0KFwieC1jbGllbnRcIiwgXCJ2ZXJkYWNjaW8tdWlcIik7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGZldGNoKHVybCwge1xuXHRcdFx0XHRtZXRob2QsXG5cdFx0XHRcdGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdHNpZ25hbDogb3B0aW9ucy5zaWduYWwsXG5cdFx0XHRcdC4uLm9wdGlvbnNcblx0XHRcdH0pLnRoZW4oaGFuZGxlUmVzcG9uc2VUeXBlKS50aGVuKChyZXNwb25zZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBbb2ssIGRhdGEsIHN0YXR1c10gPSByZXNwb25zZTtcblx0XHRcdFx0aWYgKG9rID09PSB0cnVlKSByZXNvbHZlKGRhdGEpO1xuXHRcdFx0XHRlbHNlIHJlamVjdChuZXcgQ3VzdG9tRXJyb3IodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgPyBkYXRhIDogZGF0YT8uZXJyb3IgPz8gZGF0YT8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIiwgc3RhdHVzKSk7XG5cdFx0XHR9KS5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG59O1xudmFyIGFwaV9kZWZhdWx0ID0gbmV3IEFQSSgpO1xuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBhcGlfZGVmYXVsdCBhcyBkZWZhdWx0IH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwaS5tanMubWFwIiwiaW1wb3J0IGFwaV9kZWZhdWx0IGZyb20gXCIuLi9zdG9yZS9hcGkubWpzXCI7XG5pbXBvcnQgdXNlU1dSIGZyb20gXCJzd3JcIjtcbi8vI3JlZ2lvbiBzcmMvYXBpL3VzZS1kYXRhLnRzXG5mdW5jdGlvbiBidWlsZFVybChiYXNlUGF0aCwgcm91dGUsIHBhY2thZ2VOYW1lLCBwYWNrYWdlVmVyc2lvbikge1xuXHRsZXQgdXJsID0gYCR7YmFzZVBhdGh9JHtyb3V0ZX1gO1xuXHRpZiAocGFja2FnZU5hbWUpIHVybCArPSBwYWNrYWdlTmFtZTtcblx0aWYgKHBhY2thZ2VWZXJzaW9uKSB1cmwgKz0gYD92PSR7cGFja2FnZVZlcnNpb259YDtcblx0cmV0dXJuIHVybDtcbn1cbmZ1bmN0aW9uIHVzZURhdGEoYmFzZVBhdGgsIHJvdXRlLCBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24pIHtcblx0Y29uc3QgdXJsID0gYnVpbGRVcmwoYmFzZVBhdGgsIHJvdXRlLCBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24pO1xuXHRjb25zdCB7IGRhdGEsIGVycm9yLCBpc0xvYWRpbmcsIG11dGF0ZSB9ID0gdXNlU1dSKHVybCwgKCkgPT4gYXBpX2RlZmF1bHQucmVxdWVzdCh1cmwpKTtcblx0cmV0dXJuIHtcblx0XHRkYXRhLFxuXHRcdGVycm9yLFxuXHRcdGlzTG9hZGluZyxcblx0XHRtdXRhdGVcblx0fTtcbn1cbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgdXNlRGF0YSB9O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2UtZGF0YS5tanMubWFwIiwiLy8jcmVnaW9uIHNyYy9jb25maWd1cmF0aW9uLnRzXG52YXIgZGVmYXVsdFZhbHVlcyA9IHtcblx0cHJpbWFyeUNvbG9yOiBcIiNmZmZmZmZcIixcblx0ZGFya01vZGU6IGZhbHNlLFxuXHRwa2dNYW5hZ2VyczogW1xuXHRcdFwieWFyblwiLFxuXHRcdFwicG5wbVwiLFxuXHRcdFwibnBtXCJcblx0XSxcblx0c2NvcGU6IFwiXCIsXG5cdGJhc2U6IFwiXCIsXG5cdGxvZ2luOiB0cnVlLFxuXHRmbGFnczoge30sXG5cdHVybF9wcmVmaXg6IFwiXCIsXG5cdHRpdGxlOiBcIlZlcmRhY2Npb1wiXG59O1xuZnVuY3Rpb24gZ2V0Q29uZmlndXJhdGlvbigpIHtcblx0cmV0dXJuIHdpbmRvdz8uX19WRVJEQUNDSU9fQkFTRU5BTUVfVUlfT1BUSU9OUyA/PyBkZWZhdWx0VmFsdWVzO1xufVxuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBnZXRDb25maWd1cmF0aW9uIH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmZpZ3VyYXRpb24ubWpzLm1hcCIsIi8vI3JlZ2lvbiBzcmMvc3RvcmUvcm91dGVzLnRzXG4vKipcbiogQGRlcHJlY2F0ZWQgdXNlIEFQSVJvdXRlIGluIHV0aWxzL3JvdXRlcy50c1xuKi9cbnZhciBBUElSb3V0ZSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihBUElSb3V0ZSkge1xuXHRBUElSb3V0ZVtcIkxPR0lOXCJdID0gXCIvLS92ZXJkYWNjaW8vc2VjL2xvZ2luXCI7XG5cdEFQSVJvdXRlW1wiU0lHTlVQXCJdID0gXCIvLS92ZXJkYWNjaW8vc2VjL3NpZ251cFwiO1xuXHRBUElSb3V0ZVtcIkNPTkZJR1wiXSA9IFwiLy0vdmVyZGFjY2lvL3BhY2thZ2VzXCI7XG5cdEFQSVJvdXRlW1wiUEFDS0FHRVNcIl0gPSBcIi8tL3ZlcmRhY2Npby9kYXRhL3BhY2thZ2VzXCI7XG5cdEFQSVJvdXRlW1wiU0VBUkNIXCJdID0gXCIvLS92ZXJkYWNjaW8vZGF0YS9zZWFyY2gvXCI7XG5cdEFQSVJvdXRlW1wiU0lERUJBUlwiXSA9IFwiLy0vdmVyZGFjY2lvL2RhdGEvc2lkZWJhci9cIjtcblx0QVBJUm91dGVbXCJSRUFETUVcIl0gPSBcIi8tL3ZlcmRhY2Npby9kYXRhL3BhY2thZ2UvcmVhZG1lL1wiO1xuXHRyZXR1cm4gQVBJUm91dGU7XG59KHt9KTtcbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgQVBJUm91dGUgfTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cm91dGVzLm1qcy5tYXAiLCIvLyNyZWdpb24gc3JjL3N0b3JlL3V0aWxzLnRzXG52YXIgSEVBREVSUyA9IHsgSlNPTjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfTtcbmZ1bmN0aW9uIHN0cmlwVHJhaWxpbmdTbGFzaCh1cmwpIHtcblx0cmV0dXJuIHVybC5yZXBsYWNlKC9cXC8kLywgXCJcIik7XG59XG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7IEhFQURFUlMsIHN0cmlwVHJhaWxpbmdTbGFzaCB9O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5tanMubWFwIiwiaW1wb3J0IHsgdXNlRGF0YSB9IGZyb20gXCIuLi8uLi9hcGkvdXNlLWRhdGEubWpzXCI7XG5pbXBvcnQgeyBnZXRDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb24ubWpzXCI7XG5pbXBvcnQgeyBBUElSb3V0ZSB9IGZyb20gXCIuLi8uLi9zdG9yZS9yb3V0ZXMubWpzXCI7XG5pbXBvcnQgeyBzdHJpcFRyYWlsaW5nU2xhc2ggfSBmcm9tIFwiLi4vLi4vc3RvcmUvdXRpbHMubWpzXCI7XG5pbXBvcnQgeyBqc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVBhcmFtcyB9IGZyb20gXCJyZWFjdC1yb3V0ZXJcIjtcbi8vI3JlZ2lvbiBzcmMvcHJvdmlkZXJzL1ZlcnNpb25Qcm92aWRlci9WZXJzaW9uUHJvdmlkZXIudHN4XG5mdW5jdGlvbiBnZXRSb3V0ZXJQYWNrYWdlTmFtZShwYWNrYWdlTmFtZSwgc2NvcGUpIHtcblx0cmV0dXJuIHNjb3BlID8gYCR7c2NvcGV9LyR7cGFja2FnZU5hbWV9YCA6IHBhY2thZ2VOYW1lO1xufVxudmFyIERldGFpbENvbnRleHQgPSBjcmVhdGVDb250ZXh0KHZvaWQgMCk7XG52YXIgVmVyc2lvblByb3ZpZGVyID0gKHsgY2hpbGRyZW4gfSkgPT4ge1xuXHRjb25zdCB7IHNjb3BlLCBwYWNrYWdlOiBwa2dOYW1lLCB2ZXJzaW9uOiBwYWNrYWdlVmVyc2lvbiB9ID0gdXNlUGFyYW1zKCk7XG5cdGNvbnN0IGJhc2VQYXRoID0gc3RyaXBUcmFpbGluZ1NsYXNoKGdldENvbmZpZ3VyYXRpb24oKS5iYXNlKTtcblx0Y29uc3QgcGFja2FnZU5hbWUgPSBnZXRSb3V0ZXJQYWNrYWdlTmFtZShwa2dOYW1lID8/IFwiXCIsIHNjb3BlKTtcblx0Y29uc3QgcmVhZG1lRGF0YSA9IHVzZURhdGEoYmFzZVBhdGgsIEFQSVJvdXRlLlJFQURNRSwgcGFja2FnZU5hbWUsIHBhY2thZ2VWZXJzaW9uKTtcblx0Y29uc3Qgc2lkZWJhckRhdGEgPSB1c2VEYXRhKGJhc2VQYXRoLCBBUElSb3V0ZS5TSURFQkFSLCBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24pO1xuXHRjb25zdCBpc0xvYWRpbmcgPSByZWFkbWVEYXRhLmlzTG9hZGluZyB8fCBzaWRlYmFyRGF0YS5pc0xvYWRpbmc7XG5cdGNvbnN0IGVycm9yID0gcmVhZG1lRGF0YS5lcnJvciB8fCBzaWRlYmFyRGF0YS5lcnJvcjtcblx0Y29uc3QgZXJyb3JDb2RlID0gcmVhZG1lRGF0YS5lcnJvcj8uY29kZSA/PyBzaWRlYmFyRGF0YS5lcnJvcj8uY29kZTtcblx0Y29uc3QgdmFsdWUgPSB1c2VNZW1vKCgpID0+ICh7XG5cdFx0cGFja2FnZU1ldGE6IHNpZGViYXJEYXRhLmRhdGEsXG5cdFx0cmVhZE1lOiByZWFkbWVEYXRhLmRhdGEsXG5cdFx0cGFja2FnZU5hbWUsXG5cdFx0cGFja2FnZVZlcnNpb24sXG5cdFx0aXNMb2FkaW5nLFxuXHRcdGlzRm9yYmlkZGVuOiBlcnJvckNvZGUgPT09IDQwMyxcblx0XHRpc1VuQXV0aG9yaXplZDogZXJyb3JDb2RlID09PSA0MDEsXG5cdFx0aGFzTm90QmVlbkZvdW5kOiBlcnJvckNvZGUgPT09IDQwNCxcblx0XHRpc0Vycm9yOiBlcnJvckNvZGUgIT09IHZvaWQgMCxcblx0XHRlcnJvclxuXHR9KSwgW1xuXHRcdHNpZGViYXJEYXRhLmRhdGEsXG5cdFx0cmVhZG1lRGF0YS5kYXRhLFxuXHRcdHBhY2thZ2VOYW1lLFxuXHRcdHBhY2thZ2VWZXJzaW9uLFxuXHRcdGlzTG9hZGluZyxcblx0XHRlcnJvckNvZGUsXG5cdFx0ZXJyb3Jcblx0XSk7XG5cdHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KERldGFpbENvbnRleHQuUHJvdmlkZXIsIHtcblx0XHR2YWx1ZSxcblx0XHRjaGlsZHJlblxuXHR9KTtcbn07XG52YXIgdXNlVmVyc2lvbiA9ICgpID0+IHtcblx0Y29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRGV0YWlsQ29udGV4dCk7XG5cdGlmIChjb250ZXh0ID09PSB2b2lkIDApIHRocm93IG5ldyBFcnJvcihcInVzZVZlcnNpb24gbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFZlcnNpb25Qcm92aWRlclwiKTtcblx0cmV0dXJuIGNvbnRleHQ7XG59O1xuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBWZXJzaW9uUHJvdmlkZXIgYXMgZGVmYXVsdCwgdXNlVmVyc2lvbiB9O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1WZXJzaW9uUHJvdmlkZXIubWpzLm1hcCIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG4vLyNyZWdpb24gc3JjL2hvb2tzL3VzZUxvY2FsU3RvcmFnZS50c1xuLyoqXG4qIFxuKiAgQGV4YW1wbGVcbmBgYGpzeFxuY29uc3QgW2lzRGFya01vZGVTdG9yYWdlLCBzZXRJc0RhcmtNb2RlXSA9IHVzZUxvY2FsU3RvcmFnZSgnZGFya01vZGUnLCBpc0RhcmtNb2RlRGVmYXVsdCk7XG5gYGBcblxuYmFzZWQgb24gaHR0cHM6Ly91c2Vob29rcy5jb20vdXNlTG9jYWxTdG9yYWdlL1xuQGNhdGVnb3J5IEhvb2tzXG4qL1xudmFyIHVzZUxvY2FsU3RvcmFnZSA9IChrZXksIGluaXRpYWxWYWx1ZSkgPT4ge1xuXHRjb25zdCBbc3RvcmVkVmFsdWUsIHNldFN0b3JlZFZhbHVlXSA9IHVzZVN0YXRlKCgpID0+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgaXRlbSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuXHRcdFx0cmV0dXJuIGl0ZW0gPyBKU09OLnBhcnNlKGl0ZW0pIDogaW5pdGlhbFZhbHVlO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiQW4gZXJyb3Igb2NjdXJyZWQgZ2V0dGluZyBhIHNlc3Npb25TdG9yYWdlIGtleVwiLCBlcnJvcik7XG5cdFx0XHRyZXR1cm4gaW5pdGlhbFZhbHVlO1xuXHRcdH1cblx0fSk7XG5cdGNvbnN0IHNldFZhbHVlID0gKHZhbHVlKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHZhbHVlVG9TdG9yZSA9IHZhbHVlIGluc3RhbmNlb2YgRnVuY3Rpb24gPyB2YWx1ZShzdG9yZWRWYWx1ZSkgOiB2YWx1ZTtcblx0XHRcdHNldFN0b3JlZFZhbHVlKHZhbHVlVG9TdG9yZSk7XG5cdFx0XHR3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeSh2YWx1ZVRvU3RvcmUpKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIkFuIGVycm9yIG9jY3VycmVkIHdyaXRpbmcgdG8gc2Vzc2lvblN0b3JhZ2VcIiwgZXJyb3IpO1xuXHRcdH1cblx0fTtcblx0cmV0dXJuIFtzdG9yZWRWYWx1ZSwgc2V0VmFsdWVdO1xufTtcbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgdXNlTG9jYWxTdG9yYWdlIGFzIGRlZmF1bHQgfTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlTG9jYWxTdG9yYWdlLm1qcy5tYXAiLCJpbXBvcnQgdXNlTG9jYWxTdG9yYWdlIGZyb20gXCIuLi8uLi9ob29rcy91c2VMb2NhbFN0b3JhZ2UubWpzXCI7XG5pbXBvcnQgeyBqc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEkxOG5leHRQcm92aWRlciB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG4vLyNyZWdpb24gc3JjL3Byb3ZpZGVycy9UcmFuc2xhdG9yUHJvdmlkZXIvVHJhbnNsYXRvclByb3ZpZGVyLnRzeFxudmFyIEkxOG5UcmFuc2xhdG9yQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuXHRzZXRMYW5ndWFnZTogKF9sbmcpID0+IHt9LFxuXHRsYW5ndWFnZTogXCJlbi1VU1wiLFxuXHRsaXN0TGFuZ3VhZ2VzOiBbXVxufSk7XG4vKipcbiogVHJhbnNsYXRvciBwcm92aWRlclxuKiBAY2F0ZWdvcnkgUHJvdmlkZXJcbiovXG52YXIgVHJhbnNsYXRvclByb3ZpZGVyID0gKHsgY2hpbGRyZW4sIG9uTW91bnQsIGkxOG4sIGxpc3RMYW5ndWFnZXMgfSkgPT4ge1xuXHRjb25zdCBjdXJyZW50TGFuZ3VhZ2UgPSBpMThuLmxhbmd1YWdlcz8uWzBdO1xuXHRjb25zdCBbbGFuZ3VhZ2UsIHNldExhbmd1YWdlXSA9IHVzZUxvY2FsU3RvcmFnZShcImxhbmd1YWdlXCIsIGN1cnJlbnRMYW5ndWFnZSk7XG5cdGNvbnN0IGNoYW5nZUxhbmd1YWdlID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuXHRcdGF3YWl0IGkxOG4uY2hhbmdlTGFuZ3VhZ2UobGFuZ3VhZ2UpO1xuXHR9LCBbaTE4biwgbGFuZ3VhZ2VdKTtcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRjaGFuZ2VMYW5ndWFnZSgpO1xuXHRcdG9uTW91bnQoKTtcblx0fSwgW1xuXHRcdGxhbmd1YWdlLFxuXHRcdG9uTW91bnQsXG5cdFx0Y2hhbmdlTGFuZ3VhZ2Vcblx0XSk7XG5cdHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEkxOG5leHRQcm92aWRlciwge1xuXHRcdGkxOG4sXG5cdFx0Y2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goSTE4blRyYW5zbGF0b3JDb250ZXh0LlByb3ZpZGVyLCB7XG5cdFx0XHR2YWx1ZToge1xuXHRcdFx0XHRzZXRMYW5ndWFnZSxcblx0XHRcdFx0bGFuZ3VhZ2UsXG5cdFx0XHRcdGxpc3RMYW5ndWFnZXNcblx0XHRcdH0sXG5cdFx0XHRjaGlsZHJlblxuXHRcdH0pXG5cdH0pO1xufTtcbnZhciB1c2VMYW5ndWFnZSA9ICgpID0+IHVzZUNvbnRleHQoSTE4blRyYW5zbGF0b3JDb250ZXh0KTtcbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgVHJhbnNsYXRvclByb3ZpZGVyIGFzIGRlZmF1bHQsIHVzZUxhbmd1YWdlIH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRyYW5zbGF0b3JQcm92aWRlci5tanMubWFwIiwiaW1wb3J0IHsgdXNlRGF0YSB9IGZyb20gXCIuLi8uLi9hcGkvdXNlLWRhdGEubWpzXCI7XG5pbXBvcnQgeyBnZXRDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb24ubWpzXCI7XG5pbXBvcnQgeyBBUElSb3V0ZSB9IGZyb20gXCIuLi8uLi9zdG9yZS9yb3V0ZXMubWpzXCI7XG5pbXBvcnQgeyBzdHJpcFRyYWlsaW5nU2xhc2ggfSBmcm9tIFwiLi4vLi4vc3RvcmUvdXRpbHMubWpzXCI7XG5pbXBvcnQgeyBqc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcbi8vI3JlZ2lvbiBzcmMvcHJvdmlkZXJzL01hbmlmZXN0c1Byb3ZpZGVyL01hbmlmZXN0c1Byb3ZpZGVyLnRzeFxudmFyIE1hbmlmZXN0c0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KHt9KTtcbnZhciBjb25maWd1cmF0aW9uID0gZ2V0Q29uZmlndXJhdGlvbigpO1xudmFyIE1hbmlmZXN0c1Byb3ZpZGVyID0gKHsgY2hpbGRyZW4gfSkgPT4ge1xuXHRjb25zdCBkYXRhID0gdXNlRGF0YShzdHJpcFRyYWlsaW5nU2xhc2goY29uZmlndXJhdGlvbi5iYXNlKSwgQVBJUm91dGUuUEFDS0FHRVMpO1xuXHRyZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChNYW5pZmVzdHNDb250ZXh0LlByb3ZpZGVyLCB7XG5cdFx0dmFsdWU6IHtcblx0XHRcdG1hbmlmZXN0czogZGF0YS5kYXRhID8/IFtdLFxuXHRcdFx0aXNMb2FkaW5nOiBkYXRhLmlzTG9hZGluZyxcblx0XHRcdGlzRXJyb3I6IHR5cGVvZiBkYXRhLmVycm9yPy5jb2RlICE9PSBcInVuZGVmaW5lZFwiXG5cdFx0fSxcblx0XHRjaGlsZHJlblxuXHR9KTtcbn07XG52YXIgdXNlTWFuaWZlc3RzID0gKCkgPT4gdXNlQ29udGV4dChNYW5pZmVzdHNDb250ZXh0KTtcbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgTWFuaWZlc3RzUHJvdmlkZXIgYXMgZGVmYXVsdCwgdXNlTWFuaWZlc3RzIH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1hbmlmZXN0c1Byb3ZpZGVyLm1qcy5tYXAiLCJpbXBvcnQgYXBpX2RlZmF1bHQgZnJvbSBcIi4uL3N0b3JlL2FwaS5tanNcIjtcbmltcG9ydCB7IEhFQURFUlMgfSBmcm9tIFwiLi4vc3RvcmUvdXRpbHMubWpzXCI7XG5pbXBvcnQgdXNlU1dSTXV0YXRpb24gZnJvbSBcInN3ci9tdXRhdGlvblwiO1xuLy8jcmVnaW9uIHNyYy9hcGkvdXNlLWRhdGEtbXV0YXRpb24udHNcbnZhciBmZXRjaGVyID0gYXN5bmMgKHVybCwgbWV0aG9kLCBib2R5LCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IGlzR2V0ID0gbWV0aG9kLnRvVXBwZXJDYXNlKCkgPT09IFwiR0VUXCI7XG5cdGNvbnN0IGZpbmFsVXJsID0gdXJsO1xuXHRyZXR1cm4gYXBpX2RlZmF1bHQucmVxdWVzdChmaW5hbFVybCwgbWV0aG9kLCB7XG5cdFx0Ym9keTogaXNHZXQgPyB2b2lkIDAgOiBKU09OLnN0cmluZ2lmeShib2R5KSxcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHRBY2NlcHQ6IEhFQURFUlMuSlNPTixcblx0XHRcdC4uLmlzR2V0ID8ge30gOiB7IFwiQ29udGVudC1UeXBlXCI6IEhFQURFUlMuSlNPTiB9XG5cdFx0fSxcblx0XHRzaWduYWw6IG9wdGlvbnM/LnNpZ25hbFxuXHR9KTtcbn07XG5mdW5jdGlvbiB1c2VEYXRhTXV0YXRpb24oYmFzZVBhdGgsIHJvdXRlLCBtZXRob2QgPSBcIlBPU1RcIiwgb3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IHsgZGF0YSwgZXJyb3IsIGlzTXV0YXRpbmcsIHRyaWdnZXIgfSA9IHVzZVNXUk11dGF0aW9uKG9wdGlvbnMuYnVpbGRVcmwgPyBvcHRpb25zLmJ1aWxkVXJsKGJhc2VQYXRoLCByb3V0ZSkgOiBgJHtiYXNlUGF0aH0ke3JvdXRlfWAsICh1cmwsIHsgYXJnIH0pID0+IHtcblx0XHRyZXR1cm4gZmV0Y2hlcih1cmwsIG1ldGhvZCwgYXJnID8/IHt9KTtcblx0fSk7XG5cdHJldHVybiB7XG5cdFx0ZGF0YSxcblx0XHRlcnJvcixcblx0XHRpc011dGF0aW5nLFxuXHRcdHRyaWdnZXJcblx0fTtcbn1cbmFzeW5jIGZ1bmN0aW9uIHRhcmJhbGxGZXRjaGVyKHVybCwgeyBhcmcgfSkge1xuXHRyZXR1cm4gYXBpX2RlZmF1bHQucmVxdWVzdChhcmcubGluaywgXCJHRVRcIiwge1xuXHRcdGhlYWRlcnM6IHsgYWNjZXB0OiBcInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjgsYXBwbGljYXRpb24vc2lnbmVkLWV4Y2hhbmdlO3Y9YjNcIiB9LFxuXHRcdGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIlxuXHR9KTtcbn1cbmZ1bmN0aW9uIHVzZVRhcmJhbGxEb3dubG9hZCgpIHtcblx0Y29uc3QgeyB0cmlnZ2VyLCBpc011dGF0aW5nLCBlcnJvciB9ID0gdXNlU1dSTXV0YXRpb24oXCJ0YXJiYWxsLWRvd25sb2FkXCIsIHRhcmJhbGxGZXRjaGVyKTtcblx0cmV0dXJuIHtcblx0XHRkb3dubG9hZDogdHJpZ2dlcixcblx0XHRpc0Rvd25sb2FkaW5nOiBpc011dGF0aW5nLFxuXHRcdGVycm9yXG5cdH07XG59XG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7IGZldGNoZXIsIHVzZURhdGFNdXRhdGlvbiwgdXNlVGFyYmFsbERvd25sb2FkIH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZS1kYXRhLW11dGF0aW9uLm1qcy5tYXAiLCJpbXBvcnQgeyBpc1Rva2VuRXhwaXJlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3Rva2VuLm1qc1wiO1xuaW1wb3J0IFwiLi4vLi4vdXRpbHMvaW5kZXgubWpzXCI7XG5pbXBvcnQgeyBnZXRBdXRoIH0gZnJvbSBcIi4uLy4uL3N0b3JlL3N0b3JhZ2UubWpzXCI7XG4vLyNyZWdpb24gc3JjL3Byb3ZpZGVycy9BdXRoUHJvdmlkZXIvdXRpbHMudHNcbmZ1bmN0aW9uIGdldERlZmF1bHRVc2VyU3RhdGUoKSB7XG5cdGNvbnN0IHsgdG9rZW4sIHVzZXJuYW1lIH0gPSBnZXRBdXRoKCk7XG5cdHJldHVybiBpc1Rva2VuRXhwaXJlKHRva2VuKSA/IHtcblx0XHR0b2tlbjogbnVsbCxcblx0XHR1c2VybmFtZTogbnVsbFxuXHR9IDoge1xuXHRcdHRva2VuLFxuXHRcdHVzZXJuYW1lXG5cdH07XG59XG5mdW5jdGlvbiBub3JtYWxpemVBdXRoRXJyb3IoZXJyKSB7XG5cdGNvbnN0IG1lc3NhZ2UgPSBlcnI/LmluZm8/Lm1lc3NhZ2UgfHwgZXJyPy5yZXNwb25zZT8uZGF0YT8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgXCJBdXRoZW50aWNhdGlvbiBmYWlsZWRcIjtcblx0cmV0dXJuIG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgZ2V0RGVmYXVsdFVzZXJTdGF0ZSwgbm9ybWFsaXplQXV0aEVycm9yIH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLm1qcy5tYXAiLCJpbXBvcnQgeyBjbGVhckF1dGgsIHNhdmVBdXRoIH0gZnJvbSBcIi4uLy4uL3N0b3JlL3N0b3JhZ2UubWpzXCI7XG5pbXBvcnQgeyBnZXRDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb24ubWpzXCI7XG5pbXBvcnQgeyBBUElSb3V0ZSB9IGZyb20gXCIuLi8uLi9zdG9yZS9yb3V0ZXMubWpzXCI7XG5pbXBvcnQgeyBzdHJpcFRyYWlsaW5nU2xhc2ggfSBmcm9tIFwiLi4vLi4vc3RvcmUvdXRpbHMubWpzXCI7XG5pbXBvcnQgeyB1c2VEYXRhTXV0YXRpb24gfSBmcm9tIFwiLi4vLi4vYXBpL3VzZS1kYXRhLW11dGF0aW9uLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFVzZXJTdGF0ZSB9IGZyb20gXCIuL3V0aWxzLm1qc1wiO1xuaW1wb3J0IHsganN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG4vLyNyZWdpb24gc3JjL3Byb3ZpZGVycy9BdXRoUHJvdmlkZXIvQXV0aFByb3ZpZGVyLnRzeFxudmFyIEF1dGhDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG5cdHVzZXJTdGF0ZToge1xuXHRcdHRva2VuOiBudWxsLFxuXHRcdHVzZXJuYW1lOiBudWxsXG5cdH0sXG5cdHNldFVzZXJTdGF0ZTogKCkgPT4ge30sXG5cdGhhbmRsZUxvZ2luOiBhc3luYyAoKSA9PiB7fSxcblx0bG9nT3V0VXNlcjogKCkgPT4ge31cbn0pO1xudmFyIGJhc2VQYXRoID0gc3RyaXBUcmFpbGluZ1NsYXNoKGdldENvbmZpZ3VyYXRpb24oKS5iYXNlKTtcbnZhciBBdXRoUHJvdmlkZXIgPSAoeyBjaGlsZHJlbiB9KSA9PiB7XG5cdGNvbnN0IFt1c2VyU3RhdGUsIHNldFVzZXJTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZShnZXREZWZhdWx0VXNlclN0YXRlKCkpO1xuXHRjb25zdCB7IGRhdGEsIGlzTXV0YXRpbmcsIHRyaWdnZXIgfSA9IHVzZURhdGFNdXRhdGlvbihiYXNlUGF0aCwgQVBJUm91dGUuTE9HSU4sIFwiUE9TVFwiKTtcblx0Y29uc3QgaGFuZGxlTG9naW4gPSBhc3luYyAoYm9keSkgPT4ge1xuXHRcdGF3YWl0IHRyaWdnZXIoYm9keSk7XG5cdH07XG5cdGNvbnN0IGxvZ091dFVzZXIgPSAoKSA9PiB7XG5cdFx0c2V0VXNlclN0YXRlKGdldERlZmF1bHRVc2VyU3RhdGUoKSk7XG5cdFx0Y2xlYXJBdXRoKCk7XG5cdFx0d2luZG93LmxvY2F0aW9uPy5yZWxvYWQoKTtcblx0fTtcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoZGF0YSAmJiAhaXNNdXRhdGluZykge1xuXHRcdFx0c2V0VXNlclN0YXRlKGRhdGEpO1xuXHRcdFx0aWYgKGRhdGEudXNlcm5hbWUgJiYgZGF0YS50b2tlbikgc2F2ZUF1dGgoZGF0YS51c2VybmFtZSwgZGF0YS50b2tlbik7XG5cdFx0fVxuXHR9LCBbZGF0YSwgaXNNdXRhdGluZ10pO1xuXHRyZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChBdXRoQ29udGV4dC5Qcm92aWRlciwge1xuXHRcdHZhbHVlOiB7XG5cdFx0XHRoYW5kbGVMb2dpbixcblx0XHRcdHVzZXJTdGF0ZSxcblx0XHRcdGxvZ091dFVzZXIsXG5cdFx0XHRzZXRVc2VyU3RhdGVcblx0XHR9LFxuXHRcdGNoaWxkcmVuXG5cdH0pO1xufTtcbnZhciB1c2VBdXRoID0gKCkgPT4gdXNlQ29udGV4dChBdXRoQ29udGV4dCk7XG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7IEF1dGhDb250ZXh0LCBBdXRoUHJvdmlkZXIsIHVzZUF1dGggfTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXV0aFByb3ZpZGVyLm1qcy5tYXAiLCJpbXBvcnQgdXNlTG9jYWxTdG9yYWdlIGZyb20gXCIuLi8uLi9ob29rcy91c2VMb2NhbFN0b3JhZ2UubWpzXCI7XG5pbXBvcnQgeyBqc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuLy8jcmVnaW9uIHNyYy9wcm92aWRlcnMvUGVyc2lzdGVuY2VTZXR0aW5nUHJvdmlkZXIvUGVyc2lzdGVuY2VTZXR0aW5nUHJvdmlkZXIudHN4XG52YXIgUGVyc2lzdGVuY2VTZXR0aW5nQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuXHRpc0xhdGVzdDogZmFsc2UsXG5cdGlzR2xvYmFsOiBmYWxzZSxcblx0eWFybk1vZGVybjogZmFsc2Vcbn0pO1xudmFyIFBlcnNpc3RlbmNlU2V0dGluZ1Byb3ZpZGVyID0gKHsgY2hpbGRyZW4gfSkgPT4ge1xuXHRjb25zdCBbc2V0dGluZ3MsIHNldFNldHRpbmdzXSA9IHVzZUxvY2FsU3RvcmFnZShgc2V0dGluZ3MtdWktdmVyZGFjY2lvYCwge30pO1xuXHRjb25zdCBbbG9jYWxTZXR0aW5ncywgc2V0TG9jYWxTZXR0aW5nc10gPSB1c2VTdGF0ZShzZXR0aW5ncyA/IHNldHRpbmdzIDoge30pO1xuXHRjb25zdCB1cGRhdGVTZXR0aW5ncyA9IHVzZUNhbGxiYWNrKChuZXdTZXR0aW5ncykgPT4ge1xuXHRcdHNldExvY2FsU2V0dGluZ3MobmV3U2V0dGluZ3MpO1xuXHRcdHNldFNldHRpbmdzKG5ld1NldHRpbmdzKTtcblx0fSwgW3NldFNldHRpbmdzXSk7XG5cdGNvbnN0IHZhbHVlID0gdXNlTWVtbygoKSA9PiAoe1xuXHRcdGxvY2FsU2V0dGluZ3M6IGxvY2FsU2V0dGluZ3MgPyBsb2NhbFNldHRpbmdzIDoge30sXG5cdFx0dXBkYXRlU2V0dGluZ3Ncblx0fSksIFtsb2NhbFNldHRpbmdzLCB1cGRhdGVTZXR0aW5nc10pO1xuXHRyZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChQZXJzaXN0ZW5jZVNldHRpbmdDb250ZXh0LlByb3ZpZGVyLCB7XG5cdFx0dmFsdWUsXG5cdFx0Y2hpbGRyZW5cblx0fSk7XG59O1xudmFyIHVzZVNldHRpbmdzID0gKCkgPT4gdXNlQ29udGV4dChQZXJzaXN0ZW5jZVNldHRpbmdDb250ZXh0KTtcbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgUGVyc2lzdGVuY2VTZXR0aW5nUHJvdmlkZXIsIHVzZVNldHRpbmdzIH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBlcnNpc3RlbmNlU2V0dGluZ1Byb3ZpZGVyLm1qcy5tYXAiLCJpbXBvcnQgeyBnZXRDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb24ubWpzXCI7XG5pbXBvcnQgeyBBUElSb3V0ZSB9IGZyb20gXCIuLi8uLi9zdG9yZS9yb3V0ZXMubWpzXCI7XG5pbXBvcnQgeyBzdHJpcFRyYWlsaW5nU2xhc2ggfSBmcm9tIFwiLi4vLi4vc3RvcmUvdXRpbHMubWpzXCI7XG5pbXBvcnQgeyBmZXRjaGVyIH0gZnJvbSBcIi4uLy4uL2FwaS91c2UtZGF0YS1tdXRhdGlvbi5tanNcIjtcbmltcG9ydCB7IGpzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHVzZVNXUk11dGF0aW9uIGZyb20gXCJzd3IvbXV0YXRpb25cIjtcbi8vI3JlZ2lvbiBzcmMvcHJvdmlkZXJzL1NlYXJjaFByb3ZpZGVyL1NlYXJjaFByb3ZpZGVyLnRzeFxudmFyIFNlYXJjaENvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcblx0c2VhcmNoUmVzdWx0czogW10sXG5cdGlzTG9hZGluZzogZmFsc2Vcbn0pO1xudmFyIGNvbmZpZ3VyYXRpb24gPSBnZXRDb25maWd1cmF0aW9uKCk7XG5mdW5jdGlvbiB1c2VEYXRhU2VhcmNoTXV0YXRpb24oYmFzZVBhdGgsIHJvdXRlLCBtZXRob2QgPSBcIlBPU1RcIikge1xuXHRjb25zdCB7IGRhdGEsIGVycm9yLCBpc011dGF0aW5nLCB0cmlnZ2VyIH0gPSB1c2VTV1JNdXRhdGlvbihgJHtiYXNlUGF0aH0ke3JvdXRlfWAsICh1cmwsIHsgYXJnIH0pID0+IHtcblx0XHRyZXR1cm4gZmV0Y2hlcihgJHt1cmx9JHtlbmNvZGVVUklDb21wb25lbnQoYXJnPy50ZXh0ID8/IFwiXCIpfWAsIG1ldGhvZCwgYXJnID8/IHt9LCB7IHNpZ25hbDogYXJnPy5zaWduYWwgfSk7XG5cdH0pO1xuXHRyZXR1cm4ge1xuXHRcdGRhdGEsXG5cdFx0ZXJyb3IsXG5cdFx0aXNNdXRhdGluZyxcblx0XHR0cmlnZ2VyXG5cdH07XG59XG52YXIgU2VhcmNoUHJvdmlkZXIgPSAoeyBjaGlsZHJlbiB9KSA9PiB7XG5cdGNvbnN0IHsgZGF0YSwgaXNNdXRhdGluZywgZXJyb3IsIHRyaWdnZXIgfSA9IHVzZURhdGFTZWFyY2hNdXRhdGlvbihzdHJpcFRyYWlsaW5nU2xhc2goY29uZmlndXJhdGlvbi5iYXNlKSwgQVBJUm91dGUuU0VBUkNILCBcIkdFVFwiKTtcblx0Y29uc3QgZG9TZWFyY2ggPSBhc3luYyAocXVlcnkpID0+IHtcblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgdHJpZ2dlcih7XG5cdFx0XHRcdHRleHQ6IHF1ZXJ5LnRleHQsXG5cdFx0XHRcdHNpZ25hbDogcXVlcnkuc2lnbmFsXG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJTZWFyY2ggZmFpbGVkOlwiLCBlcnIpO1xuXHRcdH1cblx0fTtcblx0Y29uc3QgdmFsdWUgPSB7XG5cdFx0c2VhcmNoUmVzdWx0czogZGF0YSA/PyBbXSxcblx0XHRpc0xvYWRpbmc6IGlzTXV0YXRpbmcsXG5cdFx0aXNFcnJvcjogISFlcnJvcixcblx0XHRlcnJvcixcblx0XHRkb1NlYXJjaFxuXHR9O1xuXHRyZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChTZWFyY2hDb250ZXh0LlByb3ZpZGVyLCB7XG5cdFx0dmFsdWUsXG5cdFx0Y2hpbGRyZW5cblx0fSk7XG59O1xudmFyIHVzZVNlYXJjaCA9ICgpID0+IHVzZUNvbnRleHQoU2VhcmNoQ29udGV4dCk7XG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7IFNlYXJjaENvbnRleHQsIFNlYXJjaFByb3ZpZGVyIGFzIGRlZmF1bHQsIHVzZVNlYXJjaCB9O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1TZWFyY2hQcm92aWRlci5tanMubWFwIiwiaW1wb3J0IHsgZG93bmxvYWRGaWxlLCBleHRyYWN0RmlsZU5hbWUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXJsLm1qc1wiO1xuaW1wb3J0IHsgdXNlVGFyYmFsbERvd25sb2FkIH0gZnJvbSBcIi4uLy4uL2FwaS91c2UtZGF0YS1tdXRhdGlvbi5tanNcIjtcbmltcG9ydCB7IGpzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcbi8vI3JlZ2lvbiBzcmMvcHJvdmlkZXJzL0Rvd25sb2FkUHJvdmlkZXIvRG93bmxvYWRQcm92aWRlci50c3hcbnZhciBEb3dubG9hZENvbnRleHQgPSBjcmVhdGVDb250ZXh0KHZvaWQgMCk7XG52YXIgRG93bmxvYWRQcm92aWRlciA9ICh7IGNoaWxkcmVuIH0pID0+IHtcblx0Y29uc3QgeyBkb3dubG9hZCwgaXNEb3dubG9hZGluZyB9ID0gdXNlVGFyYmFsbERvd25sb2FkKCk7XG5cdGNvbnN0IGRvd25sb2FkVGFyYmFsbCA9IHVzZUNhbGxiYWNrKGFzeW5jICh7IGxpbmsgfSkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBmaWxlU3RyZWFtID0gYXdhaXQgZG93bmxvYWQoeyBsaW5rIH0pO1xuXHRcdFx0aWYgKCFmaWxlU3RyZWFtKSByZXR1cm47XG5cdFx0XHRkb3dubG9hZEZpbGUoZmlsZVN0cmVhbSwgZXh0cmFjdEZpbGVOYW1lKGxpbmspKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIkVycm9yIGR1cmluZyB0YXJiYWxsIGRvd25sb2FkOlwiLCBlcnJvcik7XG5cdFx0fVxuXHR9LCBbZG93bmxvYWRdKTtcblx0cmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRG93bmxvYWRDb250ZXh0LlByb3ZpZGVyLCB7XG5cdFx0dmFsdWU6IHtcblx0XHRcdGRvd25sb2FkVGFyYmFsbCxcblx0XHRcdGlzRG93bmxvYWRpbmdcblx0XHR9LFxuXHRcdGNoaWxkcmVuXG5cdH0pO1xufTtcbnZhciB1c2VEb3dubG9hZCA9ICgpID0+IHtcblx0Y29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRG93bmxvYWRDb250ZXh0KTtcblx0aWYgKCFjb250ZXh0KSB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VEb3dubG9hZCBtdXN0IGJlIHVzZWQgd2l0aGluIGEgRG93bmxvYWRQcm92aWRlclwiKTtcblx0cmV0dXJuIGNvbnRleHQ7XG59O1xuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBEb3dubG9hZFByb3ZpZGVyLCB1c2VEb3dubG9hZCB9O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1Eb3dubG9hZFByb3ZpZGVyLm1qcy5tYXAiLCJpbXBvcnQgX3N0eWxlZCBmcm9tIFwiQGVtb3Rpb24vc3R5bGVkL2Jhc2VcIjtcbmltcG9ydCB7IGpzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IFwicmVhY3RcIjtcbmltcG9ydCB7IExpbmsgfSBmcm9tIFwicmVhY3Qtcm91dGVyXCI7XG5pbXBvcnQgVHlwb2dyYXBoeSBmcm9tIFwiQG11aS9tYXRlcmlhbC9UeXBvZ3JhcGh5XCI7XG4vLyNyZWdpb24gc3JjL2NvbXBvbmVudHMvTGluay9MaW5rLnRzeFxuZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7XG5cdHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjtcbn1cbnZhciBDdXN0b21Sb3V0ZXJMaW5rID0gLyogQF9fUFVSRV9fICovIF9zdHlsZWQoTGluaywgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8geyB0YXJnZXQ6IFwiZTJjdDdwNTBcIiB9IDoge1xuXHR0YXJnZXQ6IFwiZTJjdDdwNTBcIixcblx0bGFiZWw6IFwiQ3VzdG9tUm91dGVyTGlua1wiXG59KShwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG5cdG5hbWU6IFwibHE1Y2FxXCIsXG5cdHN0eWxlczogXCJ0ZXh0LWRlY29yYXRpb246bm9uZTsmOmhvdmVyLCY6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9XCJcbn0gOiB7XG5cdG5hbWU6IFwibHE1Y2FxXCIsXG5cdHN0eWxlczogXCJ0ZXh0LWRlY29yYXRpb246bm9uZTsmOmhvdmVyLCY6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9LyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk5b2IyMWxMM0oxYm01bGNpOTNiM0pyTDNabGNtUmhZMk5wYnk5MlpYSmtZV05qYVc4dmNHRmphMkZuWlhNdmRXa3RZMjl0Y0c5dVpXNTBjeTl6Y21NdlkyOXRjRzl1Wlc1MGN5OU1hVzVyTDB4cGJtc3VkSE40SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVzeVF5SXNJbVpwYkdVaU9pSXZhRzl0WlM5eWRXNXVaWEl2ZDI5eWF5OTJaWEprWVdOamFXOHZkbVZ5WkdGalkybHZMM0JoWTJ0aFoyVnpMM1ZwTFdOdmJYQnZibVZ1ZEhNdmMzSmpMMk52YlhCdmJtVnVkSE12VEdsdWF5OU1hVzVyTG5SemVDSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQnpkSGxzWldRZ1puSnZiU0FuUUdWdGIzUnBiMjR2YzNSNWJHVmtKenRjYm1sdGNHOXlkQ0JVZVhCdlozSmhjR2g1SUdaeWIyMGdKMEJ0ZFdrdmJXRjBaWEpwWVd3dlZIbHdiMmR5WVhCb2VTYzdYRzVwYlhCdmNuUWdVbVZoWTNRZ1puSnZiU0FuY21WaFkzUW5PMXh1YVcxd2IzSjBJSHNnVEdsdWF5QmhjeUJTYjNWMFpYSk1hVzVySUgwZ1puSnZiU0FuY21WaFkzUXRjbTkxZEdWeUp6dGNibHh1WTI5dWMzUWdRM1Z6ZEc5dFVtOTFkR1Z5VEdsdWF5QTlJSE4wZVd4bFpDaFNiM1YwWlhKTWFXNXJLV0JjYmlBZ2RHVjRkQzFrWldOdmNtRjBhVzl1T2lCdWIyNWxPMXh1SUNBbU9taHZkbVZ5TEZ4dUlDQW1PbVp2WTNWeklIdGNiaUFnSUNCMFpYaDBMV1JsWTI5eVlYUnBiMjQ2SUhWdVpHVnliR2x1WlR0Y2JpQWdmVnh1WUR0Y2JseHVZMjl1YzNRZ1RHbHVheUE5SUdaMWJtTjBhVzl1SUV4cGJtdEdkVzVqZEdsdmJpaDdYRzRnSUhKbFppeGNiaUFnZEc4c1hHNGdJR05vYVd4a2NtVnVMRnh1SUNCMllYSnBZVzUwTEZ4dUlDQmpiR0Z6YzA1aGJXVXNYRzRnSUc5dVEyeHBZMnNzWEc1OU9pQmhibmtnSmlCN0lISmxaajg2SUZKbFlXTjBMbEpsWms5aWFtVmpkRHhJVkUxTVFXNWphRzl5Uld4bGJXVnVkQ0I4SUc1MWJHdytJSDBwSUh0Y2JpQWdjbVYwZFhKdUlDaGNiaUFnSUNBOFEzVnpkRzl0VW05MWRHVnlUR2x1YXlCamJHRnpjMDVoYldVOWUyTnNZWE56VG1GdFpYMGdiMjVEYkdsamF6MTdiMjVEYkdsamEzMGdjbVZtUFh0eVpXWjlJSFJ2UFh0MGIzMCtYRzRnSUNBZ0lDQThWSGx3YjJkeVlYQm9lU0JqYjJ4dmNqMWNJbkJ5YVcxaGNubGNJaUIyWVhKcFlXNTBQWHQyWVhKcFlXNTBmVDVjYmlBZ0lDQWdJQ0FnZTJOb2FXeGtjbVZ1ZlZ4dUlDQWdJQ0FnUEM5VWVYQnZaM0poY0doNVBseHVJQ0FnSUR3dlEzVnpkRzl0VW05MWRHVnlUR2x1YXo1Y2JpQWdLVHRjYm4wN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElFeHBibXM3WEc0aVhYMD0gKi9cIixcblx0dG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59KTtcbnZhciBMaW5rJDEgPSBmdW5jdGlvbiBMaW5rRnVuY3Rpb24oeyByZWYsIHRvLCBjaGlsZHJlbiwgdmFyaWFudCwgY2xhc3NOYW1lLCBvbkNsaWNrIH0pIHtcblx0cmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goQ3VzdG9tUm91dGVyTGluaywge1xuXHRcdGNsYXNzTmFtZSxcblx0XHRvbkNsaWNrLFxuXHRcdHJlZixcblx0XHR0byxcblx0XHRjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChUeXBvZ3JhcGh5LCB7XG5cdFx0XHRjb2xvcjogXCJwcmltYXJ5XCIsXG5cdFx0XHR2YXJpYW50LFxuXHRcdFx0Y2hpbGRyZW5cblx0XHR9KVxuXHR9KTtcbn07XG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7IExpbmskMSBhcyBkZWZhdWx0IH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUxpbmsubWpzLm1hcCIsImltcG9ydCBfc3R5bGVkIGZyb20gXCJAZW1vdGlvbi9zdHlsZWQvYmFzZVwiO1xuaW1wb3J0IHsgY29tbW9uIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWwvY29sb3JzXCI7XG5pbXBvcnQgTGlzdEl0ZW1UZXh0IGZyb20gXCJAbXVpL21hdGVyaWFsL0xpc3RJdGVtVGV4dFwiO1xuLy8jcmVnaW9uIHNyYy9jb21wb25lbnRzL1ZlcnNpb25zL3N0eWxlcy50c1xudmFyIFNwYWNlciA9IC8qIEBfX1BVUkVfXyAqLyBfc3R5bGVkKFwiZGl2XCIsIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHsgdGFyZ2V0OiBcImUxOW5zNWZyMVwiIH0gOiB7XG5cdHRhcmdldDogXCJlMTluczVmcjFcIixcblx0bGFiZWw6IFwiU3BhY2VyXCJcbn0pKCh7IHRoZW1lIH0pID0+ICh7XG5cdGZsZXg6IFwiMSAxIGF1dG9cIixcblx0Ym9yZGVyQm90dG9tOiBgMXB4IGRvdHRlZCAke3RoZW1lLnBhbGV0dGUubW9kZSA9PSBcImxpZ2h0XCIgPyBcInJnYmEoMCwgMCwgMCwgMC4yKVwiIDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMilcIn0gYCxcblx0d2hpdGVTcGFjZTogXCJub3dyYXBcIixcblx0aGVpZ2h0OiBcIjAuNWVtXCIsXG5cdG1hcmdpbjogXCIwIDE2cHhcIlxufSksIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpOW9iMjFsTDNKMWJtNWxjaTkzYjNKckwzWmxjbVJoWTJOcGJ5OTJaWEprWVdOamFXOHZjR0ZqYTJGblpYTXZkV2t0WTI5dGNHOXVaVzUwY3k5emNtTXZZMjl0Y0c5dVpXNTBjeTlXWlhKemFXOXVjeTl6ZEhsc1pYTXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCVFhOQ0lpd2labWxzWlNJNklpOW9iMjFsTDNKMWJtNWxjaTkzYjNKckwzWmxjbVJoWTJOcGJ5OTJaWEprWVdOamFXOHZjR0ZqYTJGblpYTXZkV2t0WTI5dGNHOXVaVzUwY3k5emNtTXZZMjl0Y0c5dVpXNTBjeTlXWlhKemFXOXVjeTl6ZEhsc1pYTXVkSE1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnYzNSNWJHVmtJR1p5YjIwZ0owQmxiVzkwYVc5dUwzTjBlV3hsWkNjN1hHNXBiWEJ2Y25RZ2V5QmtaV1poZFd4MElHRnpJRTExYVV4cGMzUkpkR1Z0VkdWNGRDQjlJR1p5YjIwZ0owQnRkV2t2YldGMFpYSnBZV3d2VEdsemRFbDBaVzFVWlhoMEp6dGNibWx0Y0c5eWRDQjdJR052YlcxdmJpQjlJR1p5YjIwZ0owQnRkV2t2YldGMFpYSnBZV3d2WTI5c2IzSnpKenRjYmx4dWFXMXdiM0owSUhSNWNHVWdleUJVYUdWdFpTQjlJR1p5YjIwZ0p5NHVMeTR1TDFSb1pXMWxKenRjYmx4dVpYaHdiM0owSUdOdmJuTjBJRk53WVdObGNpQTlJSE4wZVd4bFpDZ25aR2wySnlrOGV5QjBhR1Z0WlQ4NklGUm9aVzFsSUgwK0tDaDdJSFJvWlcxbElIMHBJRDArSUNoN1hHNGdJR1pzWlhnNklDY3hJREVnWVhWMGJ5Y3NYRzRnSUdKdmNtUmxja0p2ZEhSdmJUb2dZREZ3ZUNCa2IzUjBaV1FnSkh0Y2JpQWdJQ0IwYUdWdFpTNXdZV3hsZEhSbExtMXZaR1VnUFQwZ0oyeHBaMmgwSnlBL0lDZHlaMkpoS0RBc0lEQXNJREFzSURBdU1pa25JRG9nSjNKblltRW9NalUxTENBeU5UVXNJREkxTlN3Z01DNHlLU2RjYmlBZ2ZTQmdMRnh1SUNCM2FHbDBaVk53WVdObE9pQW5ibTkzY21Gd0p5eGNiaUFnYUdWcFoyaDBPaUFuTUM0MVpXMG5MRnh1SUNCdFlYSm5hVzQ2SUNjd0lERTJjSGduTEZ4dWZTa3BPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdUR2x6ZEVsMFpXMVVaWGgwSUQwZ2MzUjViR1ZrS0UxMWFVeHBjM1JKZEdWdFZHVjRkQ2s4ZXlCMGFHVnRaVDg2SUZSb1pXMWxJSDArS0NoN0lIUm9aVzFsSUgwcElEMCtJQ2g3WEc0Z0lHWnNaWGc2SUNkdWIyNWxKeXhjYmlBZ2IzQmhZMmwwZVRvZ01DNDJMRnh1SUNCamIyeHZjam9nZEdobGJXVXVjR0ZzWlhSMFpTNXRiMlJsSUQwOUlDZHNhV2RvZENjZ1B5QjBhR1Z0WlM1d1lXeGxkSFJsTG1Kc1lXTnJJRG9nWTI5dGJXOXVMbmRvYVhSbExGeHVmU2twTzF4dUlsMTkgKi9cIik7XG52YXIgTGlzdEl0ZW1UZXh0JDEgPSAvKiBAX19QVVJFX18gKi8gX3N0eWxlZChMaXN0SXRlbVRleHQsIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHsgdGFyZ2V0OiBcImUxOW5zNWZyMFwiIH0gOiB7XG5cdHRhcmdldDogXCJlMTluczVmcjBcIixcblx0bGFiZWw6IFwiTGlzdEl0ZW1UZXh0XCJcbn0pKCh7IHRoZW1lIH0pID0+ICh7XG5cdGZsZXg6IFwibm9uZVwiLFxuXHRvcGFjaXR5OiAuNixcblx0Y29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PSBcImxpZ2h0XCIgPyB0aGVtZS5wYWxldHRlLmJsYWNrIDogY29tbW9uLndoaXRlXG59KSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk5b2IyMWxMM0oxYm01bGNpOTNiM0pyTDNabGNtUmhZMk5wYnk5MlpYSmtZV05qYVc4dmNHRmphMkZuWlhNdmRXa3RZMjl0Y0c5dVpXNTBjeTl6Y21NdlkyOXRjRzl1Wlc1MGN5OVdaWEp6YVc5dWN5OXpkSGxzWlhNdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJaMEkwUWlJc0ltWnBiR1VpT2lJdmFHOXRaUzl5ZFc1dVpYSXZkMjl5YXk5MlpYSmtZV05qYVc4dmRtVnlaR0ZqWTJsdkwzQmhZMnRoWjJWekwzVnBMV052YlhCdmJtVnVkSE12YzNKakwyTnZiWEJ2Ym1WdWRITXZWbVZ5YzJsdmJuTXZjM1I1YkdWekxuUnpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSE4wZVd4bFpDQm1jbTl0SUNkQVpXMXZkR2x2Ymk5emRIbHNaV1FuTzF4dWFXMXdiM0owSUhzZ1pHVm1ZWFZzZENCaGN5Qk5kV2xNYVhOMFNYUmxiVlJsZUhRZ2ZTQm1jbTl0SUNkQWJYVnBMMjFoZEdWeWFXRnNMMHhwYzNSSmRHVnRWR1Y0ZENjN1hHNXBiWEJ2Y25RZ2V5QmpiMjF0YjI0Z2ZTQm1jbTl0SUNkQWJYVnBMMjFoZEdWeWFXRnNMMk52Ykc5eWN5YzdYRzVjYm1sdGNHOXlkQ0IwZVhCbElIc2dWR2hsYldVZ2ZTQm1jbTl0SUNjdUxpOHVMaTlVYUdWdFpTYzdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQlRjR0ZqWlhJZ1BTQnpkSGxzWldRb0oyUnBkaWNwUEhzZ2RHaGxiV1UvT2lCVWFHVnRaU0I5UGlnb2V5QjBhR1Z0WlNCOUtTQTlQaUFvZTF4dUlDQm1iR1Y0T2lBbk1TQXhJR0YxZEc4bkxGeHVJQ0JpYjNKa1pYSkNiM1IwYjIwNklHQXhjSGdnWkc5MGRHVmtJQ1I3WEc0Z0lDQWdkR2hsYldVdWNHRnNaWFIwWlM1dGIyUmxJRDA5SUNkc2FXZG9kQ2NnUHlBbmNtZGlZU2d3TENBd0xDQXdMQ0F3TGpJcEp5QTZJQ2R5WjJKaEtESTFOU3dnTWpVMUxDQXlOVFVzSURBdU1pa25YRzRnSUgwZ1lDeGNiaUFnZDJocGRHVlRjR0ZqWlRvZ0oyNXZkM0poY0Njc1hHNGdJR2hsYVdkb2REb2dKekF1TldWdEp5eGNiaUFnYldGeVoybHVPaUFuTUNBeE5uQjRKeXhjYm4wcEtUdGNibHh1Wlhod2IzSjBJR052Ym5OMElFeHBjM1JKZEdWdFZHVjRkQ0E5SUhOMGVXeGxaQ2hOZFdsTWFYTjBTWFJsYlZSbGVIUXBQSHNnZEdobGJXVS9PaUJVYUdWdFpTQjlQaWdvZXlCMGFHVnRaU0I5S1NBOVBpQW9lMXh1SUNCbWJHVjRPaUFuYm05dVpTY3NYRzRnSUc5d1lXTnBkSGs2SURBdU5peGNiaUFnWTI5c2IzSTZJSFJvWlcxbExuQmhiR1YwZEdVdWJXOWtaU0E5UFNBbmJHbG5hSFFuSUQ4Z2RHaGxiV1V1Y0dGc1pYUjBaUzVpYkdGamF5QTZJR052YlcxdmJpNTNhR2wwWlN4Y2JuMHBLVHRjYmlKZGZRPT0gKi9cIik7XG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7IExpc3RJdGVtVGV4dCQxIGFzIExpc3RJdGVtVGV4dCwgU3BhY2VyIH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0eWxlcy5tanMubWFwIiwiaW1wb3J0IHsgZm9ybWF0RGF0ZSwgZm9ybWF0RGF0ZURpc3RhbmNlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3V0aWxzLm1qc1wiO1xuaW1wb3J0IHsgUm91dGUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcm91dGVzLm1qc1wiO1xuaW1wb3J0IFwiLi4vLi4vdXRpbHMvaW5kZXgubWpzXCI7XG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tIFwiLi4vLi4vcHJvdmlkZXJzL0FwcENvbmZpZ3VyYXRpb25Qcm92aWRlci9BcHBDb25maWd1cmF0aW9uUHJvdmlkZXIubWpzXCI7XG5pbXBvcnQgXCIuLi8uLi9wcm92aWRlcnMvaW5kZXgubWpzXCI7XG5pbXBvcnQgTGluayBmcm9tIFwiLi4vTGluay9MaW5rLm1qc1wiO1xuaW1wb3J0IFwiLi4vTGluay9pbmRleC5tanNcIjtcbmltcG9ydCB7IExpc3RJdGVtVGV4dCwgU3BhY2VyIH0gZnJvbSBcIi4vc3R5bGVzLm1qc1wiO1xuaW1wb3J0IHsganN4LCBqc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tIFwicmVhY3QtaTE4bmV4dFwiO1xuaW1wb3J0IExpc3QgZnJvbSBcIkBtdWkvbWF0ZXJpYWwvTGlzdFwiO1xuaW1wb3J0IExpc3RJdGVtIGZyb20gXCJAbXVpL21hdGVyaWFsL0xpc3RJdGVtXCI7XG5pbXBvcnQgQ2hpcCBmcm9tIFwiQG11aS9tYXRlcmlhbC9DaGlwXCI7XG4vLyNyZWdpb24gc3JjL2NvbXBvbmVudHMvVmVyc2lvbnMvSGlzdG9yeUxpc3QudHN4XG5mdW5jdGlvbiBmaWx0ZXJEZXByZWNhdGVkKHZlcnNpb25zKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyh2ZXJzaW9ucykucmVkdWNlKChwcmV2LCBjdXJyZW50KSA9PiB7XG5cdFx0aWYgKCF2ZXJzaW9uc1tjdXJyZW50XS5kZXByZWNhdGVkKSBwcmV2W2N1cnJlbnRdID0gdmVyc2lvbnNbY3VycmVudF07XG5cdFx0cmV0dXJuIHByZXY7XG5cdH0sIHt9KTtcbn1cbnZhciBWZXJzaW9uc0hpc3RvcnlMaXN0ID0gKHsgdmVyc2lvbnMsIHBhY2thZ2VOYW1lLCB0aW1lIH0pID0+IHtcblx0Y29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuXHRjb25zdCB7IGNvbmZpZ09wdGlvbnMgfSA9IHVzZUNvbmZpZygpO1xuXHRjb25zdCBsaXN0VmVyc2lvbnMgPSBjb25maWdPcHRpb25zLmhpZGVEZXByZWNhdGVkVmVyc2lvbnMgPyBmaWx0ZXJEZXByZWNhdGVkKHZlcnNpb25zKSA6IHZlcnNpb25zO1xuXHRyZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChMaXN0LCB7XG5cdFx0ZGVuc2U6IHRydWUsXG5cdFx0Y2hpbGRyZW46IE9iamVjdC5rZXlzKGxpc3RWZXJzaW9ucykuc29ydCgoYSwgYikgPT4ge1xuXHRcdFx0Y29uc3QgdGltZUEgPSB0aW1lW2FdID8gbmV3IERhdGUodGltZVthXSkuZ2V0VGltZSgpIDogMDtcblx0XHRcdHJldHVybiAodGltZVtiXSA/IG5ldyBEYXRlKHRpbWVbYl0pLmdldFRpbWUoKSA6IDApIC0gdGltZUE7XG5cdFx0fSkubWFwKCh2ZXJzaW9uKSA9PiAvKiBAX19QVVJFX18gKi8ganN4cyhMaXN0SXRlbSwge1xuXHRcdFx0Y2xhc3NOYW1lOiBcInZlcnNpb24taXRlbVwiLFxuXHRcdFx0XCJkYXRhLXRlc3RpZFwiOiBgdmVyc2lvbi0ke3ZlcnNpb259YCxcblx0XHRcdHN4OiB7IHByOiAwIH0sXG5cdFx0XHRjaGlsZHJlbjogW1xuXHRcdFx0XHQvKiBAX19QVVJFX18gKi8ganN4KExpbmssIHtcblx0XHRcdFx0XHR0bzogYCR7Um91dGUuREVUQUlMfSR7cGFja2FnZU5hbWV9L3YvJHt2ZXJzaW9ufWAsXG5cdFx0XHRcdFx0dmFyaWFudDogXCJvdXRsaW5lXCIsXG5cdFx0XHRcdFx0Y2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goTGlzdEl0ZW1UZXh0LCB7XG5cdFx0XHRcdFx0XHRcImRhdGEtdGVzdGlkXCI6IGB2ZXJzaW9uLWxpc3QtbGlua2AsXG5cdFx0XHRcdFx0XHRkaXNhYmxlVHlwb2dyYXBoeTogZmFsc2UsXG5cdFx0XHRcdFx0XHRwcmltYXJ5OiB2ZXJzaW9uLFxuXHRcdFx0XHRcdFx0c3g6IHR5cGVvZiB2ZXJzaW9uc1t2ZXJzaW9uXT8uZGVwcmVjYXRlZCA9PT0gXCJzdHJpbmdcIiA/IHsgdGV4dERlY29yYXRpb246IFwibGluZS10aHJvdWdoXCIgfSA6IHZvaWQgMFxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0pLFxuXHRcdFx0XHR0eXBlb2YgdmVyc2lvbnNbdmVyc2lvbl0/LmRlcHJlY2F0ZWQgPT09IFwic3RyaW5nXCIgPyAvKiBAX19QVVJFX18gKi8ganN4KENoaXAsIHtcblx0XHRcdFx0XHRjb2xvcjogXCJ3YXJuaW5nXCIsXG5cdFx0XHRcdFx0XCJkYXRhLXRlc3RpZFwiOiBcImRlcHJlY2F0ZWQtYmFkZ2VcIixcblx0XHRcdFx0XHRsYWJlbDogdChcInZlcnNpb25zLmRlcHJlY2F0ZWRcIiksXG5cdFx0XHRcdFx0c2l6ZTogXCJzbWFsbFwiLFxuXHRcdFx0XHRcdHN4OiB7IG1hcmdpbkxlZnQ6IDEgfSxcblx0XHRcdFx0XHR2YXJpYW50OiBcIm91dGxpbmVkXCJcblx0XHRcdFx0fSkgOiBudWxsLFxuXHRcdFx0XHQvKiBAX19QVVJFX18gKi8ganN4KFNwYWNlciwge30pLFxuXHRcdFx0XHQvKiBAX19QVVJFX18gKi8ganN4KExpc3RJdGVtVGV4dCwge1xuXHRcdFx0XHRcdFwiZGF0YS10ZXN0aWRcIjogYHZlcnNpb24tbGlzdC10ZXh0YCxcblx0XHRcdFx0XHRwcmltYXJ5OiB0aW1lW3ZlcnNpb25dID8gZm9ybWF0RGF0ZURpc3RhbmNlKHRpbWVbdmVyc2lvbl0pIDogdChcInZlcnNpb25zLm5vdC1hdmFpbGFibGVcIiksXG5cdFx0XHRcdFx0c2xvdFByb3BzOiB7IHByaW1hcnk6IHsgdGl0bGU6IGZvcm1hdERhdGUodGltZVt2ZXJzaW9uXSkgfSB9XG5cdFx0XHRcdH0pXG5cdFx0XHRdXG5cdFx0fSwgdmVyc2lvbikpXG5cdH0pO1xufTtcbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgVmVyc2lvbnNIaXN0b3J5TGlzdCBhcyBkZWZhdWx0IH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUhpc3RvcnlMaXN0Lm1qcy5tYXAiLCJpbXBvcnQgeyBSb3V0ZSB9IGZyb20gXCIuLi8uLi91dGlscy9yb3V0ZXMubWpzXCI7XG5pbXBvcnQgXCIuLi8uLi91dGlscy9pbmRleC5tanNcIjtcbmltcG9ydCBMaW5rIGZyb20gXCIuLi9MaW5rL0xpbmsubWpzXCI7XG5pbXBvcnQgXCIuLi9MaW5rL2luZGV4Lm1qc1wiO1xuaW1wb3J0IHsgTGlzdEl0ZW1UZXh0LCBTcGFjZXIgfSBmcm9tIFwiLi9zdHlsZXMubWpzXCI7XG5pbXBvcnQgeyBqc3gsIGpzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCBcInJlYWN0XCI7XG5pbXBvcnQgTGlzdCBmcm9tIFwiQG11aS9tYXRlcmlhbC9MaXN0XCI7XG5pbXBvcnQgTGlzdEl0ZW0gZnJvbSBcIkBtdWkvbWF0ZXJpYWwvTGlzdEl0ZW1cIjtcbi8vI3JlZ2lvbiBzcmMvY29tcG9uZW50cy9WZXJzaW9ucy9UYWdMaXN0LnRzeFxudmFyIFZlcnNpb25zVGFnTGlzdCA9ICh7IHRhZ3MsIHBhY2thZ2VOYW1lLCB0aW1lIH0pID0+IC8qIEBfX1BVUkVfXyAqLyBqc3goTGlzdCwge1xuXHRkZW5zZTogdHJ1ZSxcblx0Y2hpbGRyZW46IE9iamVjdC5rZXlzKHRhZ3MpLnNvcnQoKGEsIGIpID0+IHtcblx0XHRyZXR1cm4gdGltZVt0YWdzW2FdXSA8IHRpbWVbdGFnc1tiXV0gPyAxIDogdGltZVt0YWdzW2FdXSA+IHRpbWVbdGFnc1tiXV0gPyAtMSA6IDA7XG5cdH0pLm1hcCgodGFnKSA9PiAvKiBAX19QVVJFX18gKi8ganN4cyhMaXN0SXRlbSwge1xuXHRcdGNsYXNzTmFtZTogXCJ2ZXJzaW9uLWl0ZW1cIixcblx0XHRcImRhdGEtdGVzdGlkXCI6IGB0YWctJHt0YWd9YCxcblx0XHRzeDogeyBwcjogMCB9LFxuXHRcdGNoaWxkcmVuOiBbXG5cdFx0XHQvKiBAX19QVVJFX18gKi8ganN4KExpbmssIHtcblx0XHRcdFx0dG86IGAke1JvdXRlLkRFVEFJTH0ke3BhY2thZ2VOYW1lfS92LyR7dGFnc1t0YWddfWAsXG5cdFx0XHRcdHZhcmlhbnQ6IFwib3V0bGluZVwiLFxuXHRcdFx0XHRjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChMaXN0SXRlbVRleHQsIHsgY2hpbGRyZW46IHRhZyB9KVxuXHRcdFx0fSksXG5cdFx0XHQvKiBAX19QVVJFX18gKi8ganN4KFNwYWNlciwge30pLFxuXHRcdFx0LyogQF9fUFVSRV9fICovIGpzeChMaXN0SXRlbVRleHQsIHsgY2hpbGRyZW46IHRhZ3NbdGFnXSB9KVxuXHRcdF1cblx0fSwgdGFnKSlcbn0pO1xuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBWZXJzaW9uc1RhZ0xpc3QgYXMgZGVmYXVsdCB9O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1UYWdMaXN0Lm1qcy5tYXAiLCJpbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tIFwiLi4vLi4vcHJvdmlkZXJzL0FwcENvbmZpZ3VyYXRpb25Qcm92aWRlci9BcHBDb25maWd1cmF0aW9uUHJvdmlkZXIubWpzXCI7XG5pbXBvcnQgXCIuLi8uLi9wcm92aWRlcnMvaW5kZXgubWpzXCI7XG5pbXBvcnQgVmVyc2lvbnNIaXN0b3J5TGlzdCBmcm9tIFwiLi9IaXN0b3J5TGlzdC5tanNcIjtcbmltcG9ydCBWZXJzaW9uc1RhZ0xpc3QgZnJvbSBcIi4vVGFnTGlzdC5tanNcIjtcbmltcG9ydCBfc3R5bGVkIGZyb20gXCJAZW1vdGlvbi9zdHlsZWQvYmFzZVwiO1xuaW1wb3J0IHsgRnJhZ21lbnQsIGpzeCwganN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBCb3ggZnJvbSBcIkBtdWkvbWF0ZXJpYWwvQm94XCI7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgVHlwb2dyYXBoeSBmcm9tIFwiQG11aS9tYXRlcmlhbC9UeXBvZ3JhcGh5XCI7XG5pbXBvcnQgQ2FyZCBmcm9tIFwiQG11aS9tYXRlcmlhbC9DYXJkXCI7XG5pbXBvcnQgQ2FyZENvbnRlbnQgZnJvbSBcIkBtdWkvbWF0ZXJpYWwvQ2FyZENvbnRlbnRcIjtcbmltcG9ydCBBbGVydCBmcm9tIFwiQG11aS9tYXRlcmlhbC9BbGVydFwiO1xuaW1wb3J0IFRleHRGaWVsZCBmcm9tIFwiQG11aS9tYXRlcmlhbC9UZXh0RmllbGRcIjtcbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwibG9kYXNoL2RlYm91bmNlXCI7XG5pbXBvcnQgc2VtdmVyIGZyb20gXCJzZW12ZXJcIjtcbi8vI3JlZ2lvbiBzcmMvY29tcG9uZW50cy9WZXJzaW9ucy9WZXJzaW9ucy50c3hcbnZhciBTdHlsZWRUZXh0ID0gLyogQF9fUFVSRV9fICovIF9zdHlsZWQoVHlwb2dyYXBoeSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8geyB0YXJnZXQ6IFwiZTFrbjJmdGUwXCIgfSA6IHtcblx0dGFyZ2V0OiBcImUxa24yZnRlMFwiLFxuXHRsYWJlbDogXCJTdHlsZWRUZXh0XCJcbn0pKChwcm9wcykgPT4gKHtcblx0Zm9udFdlaWdodDogcHJvcHMudGhlbWUgJiYgcHJvcHMudGhlbWUuZm9udFdlaWdodC5ib2xkLFxuXHR0ZXh0VHJhbnNmb3JtOiBcImNhcGl0YWxpemVcIlxufSksIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpOW9iMjFsTDNKMWJtNWxjaTkzYjNKckwzWmxjbVJoWTJOcGJ5OTJaWEprWVdOamFXOHZjR0ZqYTJGblpYTXZkV2t0WTI5dGNHOXVaVzUwY3k5emNtTXZZMjl0Y0c5dVpXNTBjeTlXWlhKemFXOXVjeTlXWlhKemFXOXVjeTUwYzNnaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQmJVSXdRaUlzSW1acGJHVWlPaUl2YUc5dFpTOXlkVzV1WlhJdmQyOXlheTkyWlhKa1lXTmphVzh2ZG1WeVpHRmpZMmx2TDNCaFkydGhaMlZ6TDNWcExXTnZiWEJ2Ym1WdWRITXZjM0pqTDJOdmJYQnZibVZ1ZEhNdlZtVnljMmx2Ym5NdlZtVnljMmx2Ym5NdWRITjRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSE4wZVd4bFpDQm1jbTl0SUNkQVpXMXZkR2x2Ymk5emRIbHNaV1FuTzF4dWFXMXdiM0owSUVGc1pYSjBJR1p5YjIwZ0owQnRkV2t2YldGMFpYSnBZV3d2UVd4bGNuUW5PMXh1YVcxd2IzSjBJRUp2ZUNCbWNtOXRJQ2RBYlhWcEwyMWhkR1Z5YVdGc0wwSnZlQ2M3WEc1cGJYQnZjblFnUTJGeVpDQm1jbTl0SUNkQWJYVnBMMjFoZEdWeWFXRnNMME5oY21Rbk8xeHVhVzF3YjNKMElFTmhjbVJEYjI1MFpXNTBJR1p5YjIwZ0owQnRkV2t2YldGMFpYSnBZV3d2UTJGeVpFTnZiblJsYm5Rbk8xeHVhVzF3YjNKMElGUmxlSFJHYVdWc1pDQm1jbTl0SUNkQWJYVnBMMjFoZEdWeWFXRnNMMVJsZUhSR2FXVnNaQ2M3WEc1cGJYQnZjblFnVkhsd2IyZHlZWEJvZVNCbWNtOXRJQ2RBYlhWcEwyMWhkR1Z5YVdGc0wxUjVjRzluY21Gd2FIa25PMXh1YVcxd2IzSjBJR1JsWW05MWJtTmxJR1p5YjIwZ0oyeHZaR0Z6YUM5a1pXSnZkVzVqWlNjN1hHNXBiWEJ2Y25RZ1VtVmhZM1FzSUhzZ2RYTmxVM1JoZEdVZ2ZTQm1jbTl0SUNkeVpXRmpkQ2M3WEc1cGJYQnZjblFnZXlCMWMyVlVjbUZ1YzJ4aGRHbHZiaUI5SUdaeWIyMGdKM0psWVdOMExXa3hPRzVsZUhRbk8xeHVhVzF3YjNKMElITmxiWFpsY2lCbWNtOXRJQ2R6WlcxMlpYSW5PMXh1WEc1cGJYQnZjblFnZEhsd1pTQjdJRlJvWlcxbElIMGdabkp2YlNBbkxpNHZMaTR2VkdobGJXVW5PMXh1YVcxd2IzSjBJSHNnZFhObFEyOXVabWxuSUgwZ1puSnZiU0FuTGk0dkxpNHZjSEp2ZG1sa1pYSnpKenRjYm1sdGNHOXlkQ0JXWlhKemFXOXVjMGhwYzNSdmNubE1hWE4wSUdaeWIyMGdKeTR2U0dsemRHOXllVXhwYzNRbk8xeHVhVzF3YjNKMElGWmxjbk5wYjI1elZHRm5UR2x6ZENCbWNtOXRJQ2N1TDFSaFoweHBjM1FuTzF4dVhHNWxlSEJ2Y25RZ2RIbHdaU0JRY205d2N5QTlJSHNnY0dGamEyRm5aVTFsZEdFNklHRnVlVHNnY0dGamEyRm5aVTVoYldVNklITjBjbWx1WnlCOU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1UzUjViR1ZrVkdWNGRDQTlJSE4wZVd4bFpDaFVlWEJ2WjNKaGNHaDVLVHg3SUhSb1pXMWxQem9nVkdobGJXVWdmVDRvS0hCeWIzQnpLU0E5UGlBb2UxeHVJQ0JtYjI1MFYyVnBaMmgwT2lCd2NtOXdjeTUwYUdWdFpTQW1KaUJ3Y205d2N5NTBhR1Z0WlM1bWIyNTBWMlZwWjJoMExtSnZiR1FzWEc0Z0lIUmxlSFJVY21GdWMyWnZjbTA2SUNkallYQnBkR0ZzYVhwbEp5eGNibjBwS1R0Y2JseHVZMjl1YzNRZ1ZtVnljMmx2Ym5NNklGSmxZV04wTGtaRFBGQnliM0J6UGlBOUlDaDdJSEJoWTJ0aFoyVk5aWFJoTENCd1lXTnJZV2RsVG1GdFpTQjlLU0E5UGlCN1hHNGdJR052Ym5OMElIc2dkQ0I5SUQwZ2RYTmxWSEpoYm5Oc1lYUnBiMjRvS1R0Y2JpQWdZMjl1YzNRZ2V5QmpiMjVtYVdkUGNIUnBiMjV6SUgwZ1BTQjFjMlZEYjI1bWFXY29LVHRjYmlBZ1kyOXVjM1FnZXlCMlpYSnphVzl1Y3lBOUlIdDlMQ0IwYVcxbElEMGdlMzBzSUZzblpHbHpkQzEwWVdkekoxMDZJR1JwYzNSVVlXZHpJRDBnZTMwZ2ZTQTlJSEJoWTJ0aFoyVk5aWFJoTzF4dVhHNGdJR052Ym5OMElGdHdZV05yWVdkbFZtVnljMmx2Ym5Nc0lITmxkRkJoWTJ0aFoyVldaWEp6YVc5dWMxMGdQU0IxYzJWVGRHRjBaU2gyWlhKemFXOXVjeWs3WEc0Z0lHbG1JQ2doY0dGamEyRm5aVTFsZEdFZ2ZId2dUMkpxWldOMExtdGxlWE1vY0dGamEyRm5aVTFsZEdFcExteGxibWQwYUNBOVBUMGdNQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQnVkV3hzTzF4dUlDQjlYRzRnSUdOdmJuTjBJR2hwWkdWRVpYQnlaV05oZEdWa1ZtVnljMmx2Ym5NZ1BTQmpiMjVtYVdkUGNIUnBiMjV6TG1ocFpHVkVaWEJ5WldOaGRHVmtWbVZ5YzJsdmJuTTdYRzRnSUdOdmJuTjBJR2hoYzBScGMzUlVZV2R6SUQwZ1pHbHpkRlJoWjNNZ0ppWWdUMkpxWldOMExtdGxlWE1vWkdsemRGUmhaM01wTG14bGJtZDBhQ0ErSURBZ0ppWWdjR0ZqYTJGblpVNWhiV1U3WEc0Z0lHTnZibk4wSUdoaGMxWmxjbk5wYjI1SWFYTjBiM0o1SUQxY2JpQWdJQ0J3WVdOcllXZGxWbVZ5YzJsdmJuTWdKaVlnVDJKcVpXTjBMbXRsZVhNb2NHRmphMkZuWlZabGNuTnBiMjV6S1M1c1pXNW5kR2dnUGlBd0lDWW1JSEJoWTJ0aFoyVk9ZVzFsTzF4dVhHNGdJR052Ym5OMElHWnBiSFJsY2xabGNuTnBiMjV6SUQwZ0tIUmxlSFJUWldGeVkyZ3BJRDArSUh0Y2JpQWdJQ0JqYjI1emRDQm1hV3gwWlhKbFpGWmxjbk5wYjI1eklEMGdUMkpxWldOMExtdGxlWE1vZG1WeWMybHZibk1wTG5KbFpIVmpaU2dvWVdOakxDQjJaWEp6YVc5dUtTQTlQaUI3WEc0Z0lDQWdJQ0JwWmlBb2RHVjRkRk5sWVhKamFDQWhQVDBnSnljcElIdGNiaUFnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUIyWlhKemFXOXVjMXQyWlhKemFXOXVYU0FoUFQwZ0ozVnVaR1ZtYVc1bFpDY3BJSHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9jMlZ0ZG1WeUxuTmhkR2x6Wm1sbGN5aDJaWEp6YVc5dUxDQjBaWGgwVTJWaGNtTm9MQ0I3SUdsdVkyeDFaR1ZRY21WeVpXeGxZWE5sT2lCMGNuVmxMQ0JzYjI5elpUb2dkSEoxWlNCOUtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1lXTmpXM1psY25OcGIyNWRJRDBnZG1WeWMybHZibk5iZG1WeWMybHZibDA3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQmhZMk5iZG1WeWMybHZibDBnUFNCMlpYSnphVzl1YzF0MlpYSnphVzl1WFR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhKbGRIVnliaUJoWTJNN1hHNGdJQ0FnZlN3Z2UzMHBPMXh1WEc0Z0lDQWdjMlYwVUdGamEyRm5aVlpsY25OcGIyNXpLR1pwYkhSbGNtVmtWbVZ5YzJsdmJuTXBPMXh1SUNCOU8xeHVYRzRnSUhKbGRIVnliaUFvWEc0Z0lDQWdQRU5oY21RZ2MzZzllM3NnYldJNklESWdmWDArWEc0Z0lDQWdJQ0E4UTJGeVpFTnZiblJsYm5RK1hHNGdJQ0FnSUNBZ0lEeENiM2dnWkdGMFlTMTBaWE4wYVdROVhDSjJaWEp6YVc5dWMxd2lJSE40UFh0N0lHMDZJRElnZlgwK1hHNGdJQ0FnSUNBZ0lDQWdlMmhoYzBScGMzUlVZV2R6SUQ4Z0tGeHVJQ0FnSUNBZ0lDQWdJQ0FnUEQ1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnUEZOMGVXeGxaRlJsZUhRZ2RtRnlhV0Z1ZEQxY0luTjFZblJwZEd4bE1Wd2lQbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHQwS0NkMlpYSnphVzl1Y3k1amRYSnlaVzUwTFhSaFozTW5LWDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4YzNCaGJqNTdZQ0FvSkh0UFltcGxZM1F1YTJWNWN5aGthWE4wVkdGbmN5a3ViR1Z1WjNSb2ZTbGdmVHd2YzNCaGJqNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1BDOVRkSGxzWldSVVpYaDBQbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQThWbVZ5YzJsdmJuTlVZV2RNYVhOMElIQmhZMnRoWjJWT1lXMWxQWHR3WVdOcllXZGxUbUZ0WlgwZ2RHRm5jejE3WkdsemRGUmhaM045SUhScGJXVTllM1JwYldWOUlDOCtYRzRnSUNBZ0lDQWdJQ0FnSUNBOEx6NWNiaUFnSUNBZ0lDQWdJQ0FwSURvZ2JuVnNiSDFjYmlBZ0lDQWdJQ0FnSUNBOFBseHVJQ0FnSUNBZ0lDQWdJQ0FnUEZOMGVXeGxaRlJsZUhRZ2RtRnlhV0Z1ZEQxY0luTjFZblJwZEd4bE1Wd2lQbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjdkQ2duZG1WeWMybHZibk11ZG1WeWMybHZiaTFvYVhOMGIzSjVKeWw5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJRHh6Y0dGdVBudGdJQ2drZTA5aWFtVmpkQzVyWlhsektIQmhZMnRoWjJWV1pYSnphVzl1Y3lrdWJHVnVaM1JvZlNsZ2ZUd3ZjM0JoYmo1Y2JpQWdJQ0FnSUNBZ0lDQWdJRHd2VTNSNWJHVmtWR1Y0ZEQ1Y2JpQWdJQ0FnSUNBZ0lDQWdJRHhVWlhoMFJtbGxiR1JjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdhR1ZzY0dWeVZHVjRkRDE3ZENnbmRtVnljMmx2Ym5NdWMyVmhjbU5vTG5Cc1lXTmxhRzlzWkdWeUp5bDlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHOXVRMmhoYm1kbFBYdGtaV0p2ZFc1alpTZ29aU2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHWnBiSFJsY2xabGNuTnBiMjV6S0dVdWRHRnlaMlYwTG5aaGJIVmxLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdmU3dnTWpBd0tYMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2MybDZaVDFjSW5OdFlXeHNYQ0pjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5YVdGdWREMWNJbk4wWVc1a1lYSmtYQ0pjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdjM2c5ZTNzZ2QybGtkR2c2SUNjMU1DVW5JSDE5WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZQbHh1SUNBZ0lDQWdJQ0FnSUR3dlBseHVJQ0FnSUNBZ0lDQWdJSHRvWVhOV1pYSnphVzl1U0dsemRHOXllU0EvSUNoY2JpQWdJQ0FnSUNBZ0lDQWdJRHcrWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSHRvYVdSbFJHVndjbVZqWVhSbFpGWmxjbk5wYjI1eklEMDlQU0IwY25WbElDWW1JQ2hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlCQWRITXRhV2R1YjNKbElDMGdRV3hsY25RZ1pHOWxjeUJoWTJObGNIUWdZMmhwYkdSeVpXNGdaR1Z6Y0dsMFpTQjBhR1VnZEhsd1pTQmxjbkp2Y2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUR4QmJHVnlkQ0J6WlhabGNtbDBlVDFjSW1sdVptOWNJaUJ6ZUQxN2V5QnRZWEpuYVc1VWIzQTZJREVzSUcxaGNtZHBia0p2ZEhSdmJUb2dNU0I5ZlQ1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIdDBLQ2QyWlhKemFXOXVjeTVvYVdSbExXUmxjSEpsWTJGMFpXUW5LWDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4TDBGc1pYSjBQbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQXBmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQThWbVZ5YzJsdmJuTklhWE4wYjNKNVRHbHpkRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEJoWTJ0aFoyVk9ZVzFsUFh0d1lXTnJZV2RsVG1GdFpYMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhVzFsUFh0MGFXMWxmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpsY25OcGIyNXpQWHR3WVdOcllXZGxWbVZ5YzJsdmJuTjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDOCtYRzRnSUNBZ0lDQWdJQ0FnSUNBOEx6NWNiaUFnSUNBZ0lDQWdJQ0FwSURvZ2JuVnNiSDFjYmlBZ0lDQWdJQ0FnUEM5Q2IzZytYRzRnSUNBZ0lDQThMME5oY21SRGIyNTBaVzUwUGx4dUlDQWdJRHd2UTJGeVpENWNiaUFnS1R0Y2JuMDdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJRlpsY25OcGIyNXpPMXh1SWwxOSAqL1wiKTtcbnZhciBWZXJzaW9ucyA9ICh7IHBhY2thZ2VNZXRhLCBwYWNrYWdlTmFtZSB9KSA9PiB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcblx0Y29uc3QgeyBjb25maWdPcHRpb25zIH0gPSB1c2VDb25maWcoKTtcblx0Y29uc3QgeyB2ZXJzaW9ucyA9IHt9LCB0aW1lID0ge30sIFtcImRpc3QtdGFnc1wiXTogZGlzdFRhZ3MgPSB7fSB9ID0gcGFja2FnZU1ldGE7XG5cdGNvbnN0IFtwYWNrYWdlVmVyc2lvbnMsIHNldFBhY2thZ2VWZXJzaW9uc10gPSB1c2VTdGF0ZSh2ZXJzaW9ucyk7XG5cdGlmICghcGFja2FnZU1ldGEgfHwgT2JqZWN0LmtleXMocGFja2FnZU1ldGEpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IGhpZGVEZXByZWNhdGVkVmVyc2lvbnMgPSBjb25maWdPcHRpb25zLmhpZGVEZXByZWNhdGVkVmVyc2lvbnM7XG5cdGNvbnN0IGhhc0Rpc3RUYWdzID0gZGlzdFRhZ3MgJiYgT2JqZWN0LmtleXMoZGlzdFRhZ3MpLmxlbmd0aCA+IDAgJiYgcGFja2FnZU5hbWU7XG5cdGNvbnN0IGhhc1ZlcnNpb25IaXN0b3J5ID0gcGFja2FnZVZlcnNpb25zICYmIE9iamVjdC5rZXlzKHBhY2thZ2VWZXJzaW9ucykubGVuZ3RoID4gMCAmJiBwYWNrYWdlTmFtZTtcblx0Y29uc3QgZmlsdGVyVmVyc2lvbnMgPSAodGV4dFNlYXJjaCkgPT4ge1xuXHRcdHNldFBhY2thZ2VWZXJzaW9ucyhPYmplY3Qua2V5cyh2ZXJzaW9ucykucmVkdWNlKChhY2MsIHZlcnNpb24pID0+IHtcblx0XHRcdGlmICh0ZXh0U2VhcmNoICE9PSBcIlwiKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgdmVyc2lvbnNbdmVyc2lvbl0gIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0XHRpZiAoc2VtdmVyLnNhdGlzZmllcyh2ZXJzaW9uLCB0ZXh0U2VhcmNoLCB7XG5cdFx0XHRcdFx0XHRpbmNsdWRlUHJlcmVsZWFzZTogdHJ1ZSxcblx0XHRcdFx0XHRcdGxvb3NlOiB0cnVlXG5cdFx0XHRcdFx0fSkpIGFjY1t2ZXJzaW9uXSA9IHZlcnNpb25zW3ZlcnNpb25dO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgYWNjW3ZlcnNpb25dID0gdmVyc2lvbnNbdmVyc2lvbl07XG5cdFx0XHRyZXR1cm4gYWNjO1xuXHRcdH0sIHt9KSk7XG5cdH07XG5cdHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KENhcmQsIHtcblx0XHRzeDogeyBtYjogMiB9LFxuXHRcdGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KENhcmRDb250ZW50LCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4cyhCb3gsIHtcblx0XHRcdFwiZGF0YS10ZXN0aWRcIjogXCJ2ZXJzaW9uc1wiLFxuXHRcdFx0c3g6IHsgbTogMiB9LFxuXHRcdFx0Y2hpbGRyZW46IFtcblx0XHRcdFx0aGFzRGlzdFRhZ3MgPyAvKiBAX19QVVJFX18gKi8ganN4cyhGcmFnbWVudCwgeyBjaGlsZHJlbjogWy8qIEBfX1BVUkVfXyAqLyBqc3hzKFN0eWxlZFRleHQsIHtcblx0XHRcdFx0XHR2YXJpYW50OiBcInN1YnRpdGxlMVwiLFxuXHRcdFx0XHRcdGNoaWxkcmVuOiBbdChcInZlcnNpb25zLmN1cnJlbnQtdGFnc1wiKSwgLyogQF9fUFVSRV9fICovIGpzeChcInNwYW5cIiwgeyBjaGlsZHJlbjogYCAoJHtPYmplY3Qua2V5cyhkaXN0VGFncykubGVuZ3RofSlgIH0pXVxuXHRcdFx0XHR9KSwgLyogQF9fUFVSRV9fICovIGpzeChWZXJzaW9uc1RhZ0xpc3QsIHtcblx0XHRcdFx0XHRwYWNrYWdlTmFtZSxcblx0XHRcdFx0XHR0YWdzOiBkaXN0VGFncyxcblx0XHRcdFx0XHR0aW1lXG5cdFx0XHRcdH0pXSB9KSA6IG51bGwsXG5cdFx0XHRcdC8qIEBfX1BVUkVfXyAqLyBqc3hzKEZyYWdtZW50LCB7IGNoaWxkcmVuOiBbLyogQF9fUFVSRV9fICovIGpzeHMoU3R5bGVkVGV4dCwge1xuXHRcdFx0XHRcdHZhcmlhbnQ6IFwic3VidGl0bGUxXCIsXG5cdFx0XHRcdFx0Y2hpbGRyZW46IFt0KFwidmVyc2lvbnMudmVyc2lvbi1oaXN0b3J5XCIpLCAvKiBAX19QVVJFX18gKi8ganN4KFwic3BhblwiLCB7IGNoaWxkcmVuOiBgICgke09iamVjdC5rZXlzKHBhY2thZ2VWZXJzaW9ucykubGVuZ3RofSlgIH0pXVxuXHRcdFx0XHR9KSwgLyogQF9fUFVSRV9fICovIGpzeChUZXh0RmllbGQsIHtcblx0XHRcdFx0XHRoZWxwZXJUZXh0OiB0KFwidmVyc2lvbnMuc2VhcmNoLnBsYWNlaG9sZGVyXCIpLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBkZWJvdW5jZSgoZSkgPT4ge1xuXHRcdFx0XHRcdFx0ZmlsdGVyVmVyc2lvbnMoZS50YXJnZXQudmFsdWUpO1xuXHRcdFx0XHRcdH0sIDIwMCksXG5cdFx0XHRcdFx0c2l6ZTogXCJzbWFsbFwiLFxuXHRcdFx0XHRcdHZhcmlhbnQ6IFwic3RhbmRhcmRcIixcblx0XHRcdFx0XHRzeDogeyB3aWR0aDogXCI1MCVcIiB9XG5cdFx0XHRcdH0pXSB9KSxcblx0XHRcdFx0aGFzVmVyc2lvbkhpc3RvcnkgPyAvKiBAX19QVVJFX18gKi8ganN4cyhGcmFnbWVudCwgeyBjaGlsZHJlbjogW2hpZGVEZXByZWNhdGVkVmVyc2lvbnMgPT09IHRydWUgJiYgLyogQF9fUFVSRV9fICovIGpzeChBbGVydCwge1xuXHRcdFx0XHRcdHNldmVyaXR5OiBcImluZm9cIixcblx0XHRcdFx0XHRzeDoge1xuXHRcdFx0XHRcdFx0bWFyZ2luVG9wOiAxLFxuXHRcdFx0XHRcdFx0bWFyZ2luQm90dG9tOiAxXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRjaGlsZHJlbjogdChcInZlcnNpb25zLmhpZGUtZGVwcmVjYXRlZFwiKVxuXHRcdFx0XHR9KSwgLyogQF9fUFVSRV9fICovIGpzeChWZXJzaW9uc0hpc3RvcnlMaXN0LCB7XG5cdFx0XHRcdFx0cGFja2FnZU5hbWUsXG5cdFx0XHRcdFx0dGltZSxcblx0XHRcdFx0XHR2ZXJzaW9uczogcGFja2FnZVZlcnNpb25zXG5cdFx0XHRcdH0pXSB9KSA6IG51bGxcblx0XHRcdF1cblx0XHR9KSB9KVxuXHR9KTtcbn07XG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7IFZlcnNpb25zIGFzIGRlZmF1bHQgfTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VmVyc2lvbnMubWpzLm1hcCJdLCJtYXBwaW5ncyI6IjJXQVVBLElBQUksRUFBZ0IsVUFDaEIsR0FBYSxDQUNoQixRQUFTLENBQUUsS0FBTSxFQUFlLENBQ2hDLFVBQVcsQ0FBRSxLQUFNLFVBQVcsQ0FDOUIsQ0FDRyxHQUFXLEVBQUssS0FDaEIsR0FBYSxFQUFLLEtBQ04sRUFBSywwQkNiakIsRUFBa0IsQ0FDckIsYUFBYyxFQUNkLFlBQWEsQ0FDWixPQUNBLE9BQ0EsTUFDQSxDQUNELE1BQU8sR0FDUCxLQUFNLEdBQ04sTUFBTyxFQUFFLENBQ1QsTUFBTyxHQUNQLFdBQVksR0FDWixTQUFVLEdBQ1YsYUFBYyxHQUNkLGdCQUFpQixHQUNqQixXQUFZLEdBQ1osV0FBWSxHQUNaLFFBQVMsR0FDVCxvQkFBcUIsR0FDckIsWUFBYSxHQUNiLHVCQUF3QixHQUN4QixNQUFPLFlBQ1AsQ0FJRCxTQUFTQSxHQUFpQixFQUFZLEVBQUUsQ0FBRSxDQUN6QyxJQUFNLEVBQWdCLFFBQVEsaUNBQW1DLEVBQUUsQ0FDN0QsRUFBa0IsQ0FDdkIsR0FBRyxFQUNILEdBQUcsRUFDSCxHQUFHLEVBQ0gsTUFBTyxDQUNO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