"use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[616],{9940:(e,t,r)=>{r.d(t,{A:()=>s}),r(6540);var n=r(7437),o=r(4848);function s(e){const{styles:t,defaultTheme:r={}}=e,s="function"==typeof t?e=>{return t(null==(n=e)||0===Object.keys(n).length?r:e);var n}:t;return(0,o.jsx)(n.mL,{styles:s})}},9495:(e,t,r)=>{r.r(t),r.d(t,{GlobalStyles:()=>c.A,StyledEngineProvider:()=>u,ThemeContext:()=>s.T,css:()=>o.AH,default:()=>p,internal_processStyles:()=>d,keyframes:()=>o.i7});var n=r(8202),o=r(7437),s=r(9214),i=(r(6540),r(5815)),a=r(4848);let l;function u(e){const{injectFirst:t,children:r}=e;return t&&l?(0,a.jsx)(s.C,{value:l,children:r}):r}"object"==typeof document&&(l=(0,i.A)({key:"css",prepend:!0}));var c=r(9940);function p(e,t){return(0,n.A)(e,t)}const d=(e,t)=>{Array.isArray(e.__emotion_styles)&&(e.__emotion_styles=t(e.__emotion_styles))}},771:(e,t,r)=>{var n=r(4994);t.X4=function(e,t){return e=a(e),t=i(t),"rgb"!==e.type&&"hsl"!==e.type||(e.type+="a"),"color"===e.type?e.values[3]=`/${t}`:e.values[3]=t,l(e)},t.e$=c,t.eM=function(e,t){const r=u(e),n=u(t);return(Math.max(r,n)+.05)/(Math.min(r,n)+.05)},t.a=p;var o=n(r(8944)),s=n(r(7535));function i(e,t=0,r=1){return(0,s.default)(e,t,r)}function a(e){if(e.type)return e;if("#"===e.charAt(0))return a(function(e){e=e.slice(1);const t=new RegExp(`.{1,${e.length>=6?2:1}}`,"g");let r=e.match(t);return r&&1===r[0].length&&(r=r.map((e=>e+e))),r?`rgb${4===r.length?"a":""}(${r.map(((e,t)=>t<3?parseInt(e,16):Math.round(parseInt(e,16)/255*1e3)/1e3)).join(", ")})`:""}(e));const t=e.indexOf("("),r=e.substring(0,t);if(-1===["rgb","rgba","hsl","hsla","color"].indexOf(r))throw new Error((0,o.default)(9,e));let n,s=e.substring(t+1,e.length-1);if("color"===r){if(s=s.split(" "),n=s.shift(),4===s.length&&"/"===s[3].charAt(0)&&(s[3]=s[3].slice(1)),-1===["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].indexOf(n))throw new Error((0,o.default)(10,n))}else s=s.split(",");return s=s.map((e=>parseFloat(e))),{type:r,values:s,colorSpace:n}}function l(e){const{type:t,colorSpace:r}=e;let{values:n}=e;return-1!==t.indexOf("rgb")?n=n.map(((e,t)=>t<3?parseInt(e,10):e)):-1!==t.indexOf("hsl")&&(n[1]=`${n[1]}%`,n[2]=`${n[2]}%`),n=-1!==t.indexOf("color")?`${r} ${n.join(" ")}`:`${n.join(", ")}`,`${t}(${n})`}function u(e){let t="hsl"===(e=a(e)).type||"hsla"===e.type?a(function(e){e=a(e);const{values:t}=e,r=t[0],n=t[1]/100,o=t[2]/100,s=n*Math.min(o,1-o),i=(e,t=(e+r/30)%12)=>o-s*Math.max(Math.min(t-3,9-t,1),-1);let u="rgb";const c=[Math.round(255*i(0)),Math.round(255*i(8)),Math.round(255*i(4))];return"hsla"===e.type&&(u+="a",c.push(t[3])),l({type:u,values:c})}(e)).values:e.values;return t=t.map((t=>("color"!==e.type&&(t/=255),t<=.03928?t/12.92:((t+.055)/1.055)**2.4))),Number((.2126*t[0]+.7152*t[1]+.0722*t[2]).toFixed(3))}function c(e,t){if(e=a(e),t=i(t),-1!==e.type.indexOf("hsl"))e.values[2]*=1-t;else if(-1!==e.type.indexOf("rgb")||-1!==e.type.indexOf("color"))for(let r=0;r<3;r+=1)e.values[r]*=1-t;return l(e)}function p(e,t){if(e=a(e),t=i(t),-1!==e.type.indexOf("hsl"))e.values[2]+=(100-e.values[2])*t;else if(-1!==e.type.indexOf("rgb"))for(let r=0;r<3;r+=1)e.values[r]+=(255-e.values[r])*t;else if(-1!==e.type.indexOf("color"))for(let r=0;r<3;r+=1)e.values[r]+=(1-e.values[r])*t;return l(e)}},6461:(e,t,r)=>{var n=r(4994);t.Ay=function(e={}){const{themeId:t,defaultTheme:r=y,rootShouldForwardProp:n=m,slotShouldForwardProp:l=m}=e,c=e=>(0,u.default)((0,o.default)({},e,{theme:g((0,o.default)({},e,{defaultTheme:r,themeId:t}))}));return c.__mui_systemSx=!0,(e,u={})=>{(0,i.internal_processStyles)(e,(e=>e.filter((e=>!(null!=e&&e.__mui_systemSx)))));const{name:p,slot:f,skipVariantsResolver:y,skipSx:v,overridesResolver:x=A(h(f))}=u,k=(0,s.default)(u,d),w=void 0!==y?y:f&&"Root"!==f&&"root"!==f||!1,S=v||!1;let j=m;"Root"===f||"root"===f?j=n:f?j=l:function(e){return"string"==typeof e&&e.charCodeAt(0)>96}(e)&&(j=void 0);const O=(0,i.default)(e,(0,o.default)({shouldForwardProp:j,label:void 0},k)),C=e=>"function"==typeof e&&e.__emotion_real!==e||(0,a.isPlainObject)(e)?n=>b(e,(0,o.default)({},n,{theme:g({theme:n.theme,defaultTheme:r,themeId:t})})):e,_=(n,...s)=>{let i=C(n);const a=s?s.map(C):[];p&&x&&a.push((e=>{const n=g((0,o.default)({},e,{defaultTheme:r,themeId:t}));if(!n.components||!n.components[p]||!n.components[p].styleOverrides)return null;const s=n.components[p].styleOverrides,i={};return Object.entries(s).forEach((([t,r])=>{i[t]=b(r,(0,o.default)({},e,{theme:n}))})),x(e,i)})),p&&!w&&a.push((e=>{var n;const s=g((0,o.default)({},e,{defaultTheme:r,themeId:t}));return b({variants:null==s||null==(n=s.components)||null==(n=n[p])?void 0:n.variants},(0,o.default)({},e,{theme:s}))})),S||a.push(c);const l=a.length-s.length;if(Array.isArray(n)&&l>0){const e=new Array(l).fill("");i=[...n,...e],i.raw=[...n.raw,...e]}const u=O(i,...a);return e.muiName&&(u.muiName=e.muiName),u};return O.withConfig&&(_.withConfig=O.withConfig),_}};var o=n(r(4634)),s=n(r(4893)),i=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=f(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&Object.prototype.hasOwnProperty.call(e,s)){var i=o?Object.getOwnPropertyDescriptor(e,s):null;i&&(i.get||i.set)?Object.defineProperty(n,s,i):n[s]=e[s]}return n.default=e,r&&r.set(e,n),n}(r(9495)),a=r(4239),l=(n(r(7149)),n(r(7320)),n(r(3142))),u=n(r(3857));const c=["ownerState"],p=["variants"],d=["name","slot","skipVariantsResolver","skipSx","overridesResolver"];function f(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(f=function(e){return e?r:t})(e)}function m(e){return"ownerState"!==e&&"theme"!==e&&"sx"!==e&&"as"!==e}const y=(0,l.default)(),h=e=>e?e.charAt(0).toLowerCase()+e.slice(1):e;function g({defaultTheme:e,theme:t,themeId:r}){return n=t,0===Object.keys(n).length?e:t[r]||t;var n}function A(e){return e?(t,r)=>r[e]:null}function b(e,t){let{ownerState:r}=t,n=(0,s.default)(t,c);const i="function"==typeof e?e((0,o.default)({ownerState:r},n)):e;if(Array.isArray(i))return i.flatMap((e=>b(e,(0,o.default)({ownerState:r},n))));if(i&&"object"==typeof i&&Array.isArray(i.variants)){const{variants:e=[]}=i;let t=(0,s.default)(i,p);return e.forEach((e=>{let s=!0;"function"==typeof e.props?s=e.props((0,o.default)({ownerState:r},n,r)):Object.keys(e.props).forEach((t=>{(null==r?void 0:r[t])!==e.props[t]&&n[t]!==e.props[t]&&(s=!1)})),s&&(Array.isArray(t)||(t=[t]),t.push("function"==typeof e.style?e.style((0,o.default)({ownerState:r},n,r)):e.style))})),t}return i}},3575:(e,t,r)=>{r.d(t,{A:()=>b});var n=r(8587),o=r(8168),s=r(6540),i=r(4164),a=r(1609),l=r(5659),u=r(3967),c=r(6606),p=r(8676),d=r(8749),f=r(4848);const m=["className","component","disableGutters","fixed","maxWidth","classes"],y=(0,d.A)(),h=(0,p.A)("div",{name:"MuiContainer",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[t.root,t[`maxWidth${(0,u.A)(String(r.maxWidth))}`],r.fixed&&t.fixed,r.disableGutters&&t.disableGutters]}}),g=e=>(0,c.A)({props:e,name:"MuiContainer",defaultTheme:y}),A=(e,t)=>{const{classes:r,fixed:n,disableGutters:o,maxWidth:s}=e,i={root:["root",s&&`maxWidth${(0,u.A)(String(s))}`,n&&"fixed",o&&"disableGutters"]};return(0,l.A)(i,(e=>(0,a.Ay)(t,e)),r)};function b(e={}){const{createStyledComponent:t=h,useThemeProps:r=g,componentName:a="MuiContainer"}=e,l=t((({theme:e,ownerState:t})=>(0,o.A)({width:"100%",marginLeft:"auto",boxSizing:"border-box",marginRight:"auto",display:"block"},!t.disableGutters&&{paddingLeft:e.spacing(2),paddingRight:e.spacing(2),[e.breakpoints.up("sm")]:{paddingLeft:e.spacing(3),paddingRight:e.spacing(3)}})),(({theme:e,ownerState:t})=>t.fixed&&Object.keys(e.breakpoints.values).reduce(((t,r)=>{const n=r,o=e.breakpoints.values[n];return 0!==o&&(t[e.breakpoints.up(n)]={maxWidth:`${o}${e.breakpoints.unit}`}),t}),{})),(({theme:e,ownerState:t})=>(0,o.A)({},"xs"===t.maxWidth&&{[e.breakpoints.up("xs")]:{maxWidth:Math.max(e.breakpoints.values.xs,444)}},t.maxWidth&&"xs"!==t.maxWidth&&{[e.breakpoints.up(t.maxWidth)]:{maxWidth:`${e.breakpoints.values[t.maxWidth]}${e.breakpoints.unit}`}})));return s.forwardRef((function(e,t){const s=r(e),{className:u,component:c="div",disableGutters:p=!1,fixed:d=!1,maxWidth:y="lg"}=s,h=(0,n.A)(s,m),g=(0,o.A)({},s,{component:c,disableGutters:p,fixed:d,maxWidth:y}),b=A(g,a);return(0,f.jsx)(l,(0,o.A)({as:c,ownerState:g,className:(0,i.A)(b.root,u),ref:t},h))}))}},2221:(e,t,r)=>{r.d(t,{A:()=>l,b:()=>a});var n=r(6540),o=r(7379),s=r(4848);const i=n.createContext(void 0);function a({props:e,name:t}){return function(e){const{theme:t,name:r,props:n}=e;if(!t||!t.components||!t.components[r])return n;const s=t.components[r];return s.defaultProps?(0,o.A)(s.defaultProps,n):s.styleOverrides||s.variants?n:(0,o.A)(s,n)}({props:e,name:t,theme:{components:n.useContext(i)}})}const l=function({value:e,children:t}){return(0,s.jsx)(i.Provider,{value:e,children:t})}},2967:(e,t,r)=>{r.d(t,{A:()=>i}),r(6540);var n=r(9940),o=r(2858),s=r(4848);const i=function({styles:e,themeId:t,defaultTheme:r={}}){const i=(0,o.A)(r),a="function"==typeof e?e(t&&i[t]||i):e;return(0,s.jsx)(n.A,{styles:a})}},3788:(e,t,r)=>{r.d(t,{A:()=>c,I:()=>u});var n=r(8168),o=r(8587),s=r(6540),i=r(4848);const a=["value"],l=s.createContext(),u=()=>{const e=s.useContext(l);return null!=e&&e},c=function(e){let{value:t}=e,r=(0,o.A)(e,a);return(0,i.jsx)(l.Provider,(0,n.A)({value:null==t||t},r))}},7163:(e,t,r)=>{r.d(t,{A:()=>w});var n=r(8587),o=r(8168),s=r(6540),i=r(4164),a=r(1317),l=r(1609),u=r(5659),c=r(8676),p=r(6606),d=r(9599),f=r(8749),m=r(9452),y=r(8248),h=r(4848);const g=["component","direction","spacing","divider","children","className","useFlexGap"],A=(0,f.A)(),b=(0,c.A)("div",{name:"MuiStack",slot:"Root",overridesResolver:(e,t)=>t.root});function v(e){return(0,p.A)({props:e,name:"MuiStack",defaultTheme:A})}function x(e,t){const r=s.Children.toArray(e).filter(Boolean);return r.reduce(((e,n,o)=>(e.push(n),o{let r=(0,o.A)({display:"flex",flexDirection:"column"},(0,m.NI)({theme:t},(0,m.kW)({values:e.direction,breakpoints:t.breakpoints.values}),(e=>({flexDirection:e}))));if(e.spacing){const n=(0,y.LX)(t),o=Object.keys(t.breakpoints.values).reduce(((t,r)=>(("object"==typeof e.spacing&&null!=e.spacing[r]||"object"==typeof e.direction&&null!=e.direction[r])&&(t[r]=!0),t)),{}),s=(0,m.kW)({values:e.direction,base:o}),i=(0,m.kW)({values:e.spacing,base:o});"object"==typeof s&&Object.keys(s).forEach(((e,t,r)=>{if(!s[e]){const n=t>0?s[r[t-1]]:"column";s[e]=n}}));const l=(t,r)=>{return e.useFlexGap?{gap:(0,y._W)(n,t)}:{"& > :not(style):not(style)":{margin:0},"& > :not(style) ~ :not(style)":{[`margin${o=r?s[r]:e.direction,{row:"Left","row-reverse":"Right",column:"Top","column-reverse":"Bottom"}[o]}`]:(0,y._W)(n,t)}};var o};r=(0,a.A)(r,(0,m.NI)({theme:t},i,l))}return r=(0,m.iZ)(t.breakpoints,r),r};function w(e={}){const{createStyledComponent:t=b,useThemeProps:r=v,componentName:a="MuiStack"}=e,c=t(k);return s.forwardRef((function(e,t){const s=r(e),p=(0,d.A)(s),{component:f="div",direction:m="column",spacing:y=0,divider:A,children:b,className:v,useFlexGap:k=!1}=p,w=(0,n.A)(p,g),S={direction:m,spacing:y,useFlexGap:k},j=(0,u.A)({root:["root"]},(e=>(0,l.Ay)(a,e)),{});return(0,h.jsx)(c,(0,o.A)({as:f,ownerState:S,ref:t,className:(0,i.A)(j.root,v)},w,{children:A?x(b,A):b}))}))}},4572:(e,t,r)=>{r.d(t,{A:()=>h});var n=r(8168),o=r(6540);const s=o.createContext(null);function i(){return o.useContext(s)}const a="function"==typeof Symbol&&Symbol.for?Symbol.for("mui.nested"):"__THEME_NESTED__";var l=r(4848);const u=function(e){const{children:t,theme:r}=e,u=i(),c=o.useMemo((()=>{const e=null===u?r:function(e,t){return"function"==typeof t?t(e):(0,n.A)({},e,t)}(u,r);return null!=e&&(e[a]=null!==u),e}),[r,u]);return(0,l.jsx)(s.Provider,{value:c,children:t})};var c=r(9214),p=r(3951),d=r(3788),f=r(2221);const m={};function y(e,t,r,s=!1){return o.useMemo((()=>{const o=e&&t[e]||t;if("function"==typeof r){const i=r(o),a=e?(0,n.A)({},t,{[e]:i}):i;return s?()=>a:a}return e?(0,n.A)({},t,{[e]:r}):(0,n.A)({},t,r)}),[e,t,r,s])}const h=function(e){const{children:t,theme:r,themeId:n}=e,o=(0,p.A)(m),s=i()||m,a=y(n,o,r),h=y(n,s,r,!0),g="rtl"===a.direction;return(0,l.jsx)(u,{theme:h,children:(0,l.jsx)(c.T.Provider,{value:a,children:(0,l.jsx)(d.A,{value:g,children:(0,l.jsx)(f.A,{value:null==a?void 0:a.components,children:t})})})})}},9452:(e,t,r)=>{r.d(t,{EU:()=>a,NI:()=>i,iZ:()=>u,kW:()=>c,vf:()=>l,zu:()=>o});var n=r(1317);const o={xs:0,sm:600,md:900,lg:1200,xl:1536},s={keys:["xs","sm","md","lg","xl"],up:e=>`@media (min-width:${o[e]}px)`};function i(e,t,r){const n=e.theme||{};if(Array.isArray(t)){const e=n.breakpoints||s;return t.reduce(((n,o,s)=>(n[e.up(e.keys[s])]=r(t[s]),n)),{})}if("object"==typeof t){const e=n.breakpoints||s;return Object.keys(t).reduce(((n,s)=>{if(-1!==Object.keys(e.values||o).indexOf(s))n[e.up(s)]=r(t[s],s);else{const e=s;n[e]=t[e]}return n}),{})}return r(t)}function a(e={}){var t;return(null==(t=e.keys)?void 0:t.reduce(((t,r)=>(t[e.up(r)]={},t)),{}))||{}}function l(e,t){return e.reduce(((e,t)=>{const r=e[t];return(!r||0===Object.keys(r).length)&&delete e[t],e}),t)}function u(e,...t){const r=a(e),o=[r,...t].reduce(((e,t)=>(0,n.A)(e,t)),{});return l(Object.keys(r),o)}function c({values:e,breakpoints:t,base:r}){const n=r||function(e,t){if("object"!=typeof e)return{};const r={},n=Object.keys(t);return Array.isArray(e)?n.forEach(((t,n)=>{n{null!=e[t]&&(r[t]=!0)})),r}(e,t),o=Object.keys(n);if(0===o.length)return e;let s;return o.reduce(((t,r,n)=>(Array.isArray(e)?(t[r]=null!=e[n]?e[n]:e[s],s=n):"object"==typeof e?(t[r]=null!=e[r]?e[r]:e[s],s=r):t[r]=e,t)),{})}},7413:(e,t,r)=>{r.d(t,{A:()=>f});var n=r(8168),o=r(8587),s=r(6540),i=r(4164),a=r(9495),l=r(3571),u=r(9599),c=r(2858),p=r(4848);const d=["className","component"];function f(e={}){const{themeId:t,defaultTheme:r,defaultClassName:f="MuiBox-root",generateClassName:m}=e,y=(0,a.default)("div",{shouldForwardProp:e=>"theme"!==e&&"sx"!==e&&"as"!==e})(l.A);return s.forwardRef((function(e,s){const a=(0,c.A)(r),l=(0,u.A)(e),{className:h,component:g="div"}=l,A=(0,o.A)(l,d);return(0,p.jsx)(y,(0,n.A)({as:g,ref:s,className:(0,i.A)(h,m?m(f):f),theme:t&&a[t]||a},A))}))}},8336:(e,t,r)=>{function n(e,t){const r=this;if(r.vars&&"function"==typeof r.getColorSchemeSelector){const n=r.getColorSchemeSelector(e).replace(/(\[[^\]]+\])/,"*:where($1)");return{[n]:t}}return r.palette.mode===e?t:{}}r.d(t,{A:()=>n})},8094:(e,t,r)=>{r.d(t,{A:()=>a});var n=r(8587),o=r(8168);const s=["values","unit","step"],i=e=>{const t=Object.keys(e).map((t=>({key:t,val:e[t]})))||[];return t.sort(((e,t)=>e.val-t.val)),t.reduce(((e,t)=>(0,o.A)({},e,{[t.key]:t.val})),{})};function a(e){const{values:t={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:r="px",step:a=5}=e,l=(0,n.A)(e,s),u=i(t),c=Object.keys(u);function p(e){return`@media (min-width:${"number"==typeof t[e]?t[e]:e}${r})`}function d(e){return`@media (max-width:${("number"==typeof t[e]?t[e]:e)-a/100}${r})`}function f(e,n){const o=c.indexOf(n);return`@media (min-width:${"number"==typeof t[e]?t[e]:e}${r}) and (max-width:${(-1!==o&&"number"==typeof t[c[o]]?t[c[o]]:n)-a/100}${r})`}return(0,o.A)({keys:c,values:u,up:p,down:d,between:f,only:function(e){return c.indexOf(e)+1{r.d(t,{A:()=>f});var n=r(8168),o=r(8587),s=r(1317),i=r(8094);const a={borderRadius:4};var l=r(8248),u=r(3571),c=r(4188),p=r(8336);const d=["breakpoints","palette","spacing","shape"],f=function(e={},...t){const{breakpoints:r={},palette:f={},spacing:m,shape:y={}}=e,h=(0,o.A)(e,d),g=(0,i.A)(r),A=function(e=8){if(e.mui)return e;const t=(0,l.LX)({spacing:e}),r=(...e)=>(0===e.length?[1]:e).map((e=>{const r=t(e);return"number"==typeof r?`${r}px`:r})).join(" ");return r.mui=!0,r}(m);let b=(0,s.A)({breakpoints:g,direction:"ltr",components:{},palette:(0,n.A)({mode:"light"},f),spacing:A,shape:(0,n.A)({},a,y)},h);return b.applyStyles=p.A,b=t.reduce(((e,t)=>(0,s.A)(e,t)),b),b.unstable_sxConfig=(0,n.A)({},c.A,null==h?void 0:h.unstable_sxConfig),b.unstable_sx=function(e){return(0,u.A)({sx:e,theme:this})},b}},3142:(e,t,r)=>{r.r(t),r.d(t,{default:()=>n.A,private_createBreakpoints:()=>o.A,unstable_applyStyles:()=>s.A});var n=r(8749),o=r(8094),s=r(8336)},4620:(e,t,r)=>{r.d(t,{A:()=>o});var n=r(1317);const o=function(e,t){return t?(0,n.A)(e,t,{clone:!1}):e}},8248:(e,t,r)=>{r.d(t,{LX:()=>m,MA:()=>f,_W:()=>y,Lc:()=>g,Ms:()=>A});var n=r(9452),o=r(6481),s=r(4620);const i={m:"margin",p:"padding"},a={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},l={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},u=function(){const e={};return t=>(void 0===e[t]&&(e[t]=(e=>{if(e.length>2){if(!l[e])return[e];e=l[e]}const[t,r]=e.split(""),n=i[t],o=a[r]||"";return Array.isArray(o)?o.map((e=>n+e)):[n+o]})(t)),e[t])}(),c=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],p=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"],d=[...c,...p];function f(e,t,r,n){var s;const i=null!=(s=(0,o.Yn)(e,t,!1))?s:r;return"number"==typeof i?e=>"string"==typeof e?e:i*e:Array.isArray(i)?e=>"string"==typeof e?e:i[e]:"function"==typeof i?i:()=>{}}function m(e){return f(e,"spacing",8)}function y(e,t){if("string"==typeof t||null==t)return t;const r=e(Math.abs(t));return t>=0?r:"number"==typeof r?-r:`-${r}`}function h(e,t){const r=m(e.theme);return Object.keys(e).map((o=>function(e,t,r,o){if(-1===t.indexOf(r))return null;const s=function(e,t){return r=>e.reduce(((e,n)=>(e[n]=y(t,r),e)),{})}(u(r),o),i=e[r];return(0,n.NI)(e,i,s)}(e,t,o,r))).reduce(s.A,{})}function g(e){return h(e,c)}function A(e){return h(e,p)}function b(e){return h(e,d)}g.propTypes={},g.filterProps=c,A.propTypes={},A.filterProps=p,b.propTypes={},b.filterProps=d},6481:(e,t,r)=>{r.d(t,{Ay:()=>a,BO:()=>i,Yn:()=>s});var n=r(3967),o=r(9452);function s(e,t,r=!0){if(!t||"string"!=typeof t)return null;if(e&&e.vars&&r){const r=`vars.${t}`.split(".").reduce(((e,t)=>e&&e[t]?e[t]:null),e);if(null!=r)return r}return t.split(".").reduce(((e,t)=>e&&null!=e[t]?e[t]:null),e)}function i(e,t,r,n=r){let o;return o="function"==typeof e?e(r):Array.isArray(e)?e[r]||n:s(e,r)||n,t&&(o=t(o,n,e)),o}const a=function(e){const{prop:t,cssProperty:r=e.prop,themeKey:a,transform:l}=e,u=e=>{if(null==e[t])return null;const u=e[t],c=s(e.theme,a)||{};return(0,o.NI)(e,u,(e=>{let o=i(c,l,e);return e===o&&"string"==typeof e&&(o=i(c,l,`${t}${"default"===e?"":(0,n.A)(e)}`,e)),!1===r?o:{[r]:o}}))};return u.propTypes={},u.filterProps=[t],u}},4188:(e,t,r)=>{r.d(t,{A:()=>L});var n=r(8248),o=r(6481),s=r(4620);const i=function(...e){const t=e.reduce(((e,t)=>(t.filterProps.forEach((r=>{e[r]=t})),e)),{}),r=e=>Object.keys(e).reduce(((r,n)=>t[n]?(0,s.A)(r,t[n](e)):r),{});return r.propTypes={},r.filterProps=e.reduce(((e,t)=>e.concat(t.filterProps)),[]),r};var a=r(9452);function l(e){return"number"!=typeof e?e:`${e}px solid`}function u(e,t){return(0,o.Ay)({prop:e,themeKey:"borders",transform:t})}const c=u("border",l),p=u("borderTop",l),d=u("borderRight",l),f=u("borderBottom",l),m=u("borderLeft",l),y=u("borderColor"),h=u("borderTopColor"),g=u("borderRightColor"),A=u("borderBottomColor"),b=u("borderLeftColor"),v=u("outline",l),x=u("outlineColor"),k=e=>{if(void 0!==e.borderRadius&&null!==e.borderRadius){const t=(0,n.MA)(e.theme,"shape.borderRadius",4,"borderRadius"),r=e=>({borderRadius:(0,n._W)(t,e)});return(0,a.NI)(e,e.borderRadius,r)}return null};k.propTypes={},k.filterProps=["borderRadius"],i(c,p,d,f,m,y,h,g,A,b,k,v,x);const w=e=>{if(void 0!==e.gap&&null!==e.gap){const t=(0,n.MA)(e.theme,"spacing",8,"gap"),r=e=>({gap:(0,n._W)(t,e)});return(0,a.NI)(e,e.gap,r)}return null};w.propTypes={},w.filterProps=["gap"];const S=e=>{if(void 0!==e.columnGap&&null!==e.columnGap){const t=(0,n.MA)(e.theme,"spacing",8,"columnGap"),r=e=>({columnGap:(0,n._W)(t,e)});return(0,a.NI)(e,e.columnGap,r)}return null};S.propTypes={},S.filterProps=["columnGap"];const j=e=>{if(void 0!==e.rowGap&&null!==e.rowGap){const t=(0,n.MA)(e.theme,"spacing",8,"rowGap"),r=e=>({rowGap:(0,n._W)(t,e)});return(0,a.NI)(e,e.rowGap,r)}return null};function O(e,t){return"grey"===t?t:e}function C(e){return e<=1&&0!==e?100*e+"%":e}j.propTypes={},j.filterProps=["rowGap"],i(w,S,j,(0,o.Ay)({prop:"gridColumn"}),(0,o.Ay)({prop:"gridRow"}),(0,o.Ay)({prop:"gridAutoFlow"}),(0,o.Ay)({prop:"gridAutoColumns"}),(0,o.Ay)({prop:"gridAutoRows"}),(0,o.Ay)({prop:"gridTemplateColumns"}),(0,o.Ay)({prop:"gridTemplateRows"}),(0,o.Ay)({prop:"gridTemplateAreas"}),(0,o.Ay)({prop:"gridArea"})),i((0,o.Ay)({prop:"color",themeKey:"palette",transform:O}),(0,o.Ay)({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette",transform:O}),(0,o.Ay)({prop:"backgroundColor",themeKey:"palette",transform:O}));const _=(0,o.Ay)({prop:"width",transform:C}),M=e=>{if(void 0!==e.maxWidth&&null!==e.maxWidth){const t=t=>{var r,n;const o=(null==(r=e.theme)||null==(r=r.breakpoints)||null==(r=r.values)?void 0:r[t])||a.zu[t];return o?"px"!==(null==(n=e.theme)||null==(n=n.breakpoints)?void 0:n.unit)?{maxWidth:`${o}${e.theme.breakpoints.unit}`}:{maxWidth:o}:{maxWidth:C(t)}};return(0,a.NI)(e,e.maxWidth,t)}return null};M.filterProps=["maxWidth"];const P=(0,o.Ay)({prop:"minWidth",transform:C}),T=(0,o.Ay)({prop:"height",transform:C}),R=(0,o.Ay)({prop:"maxHeight",transform:C}),I=(0,o.Ay)({prop:"minHeight",transform:C}),L=((0,o.Ay)({prop:"size",cssProperty:"width",transform:C}),(0,o.Ay)({prop:"size",cssProperty:"height",transform:C}),i(_,M,P,T,R,I,(0,o.Ay)({prop:"boxSizing"})),{border:{themeKey:"borders",transform:l},borderTop:{themeKey:"borders",transform:l},borderRight:{themeKey:"borders",transform:l},borderBottom:{themeKey:"borders",transform:l},borderLeft:{themeKey:"borders",transform:l},borderColor:{themeKey:"palette"},borderTopColor:{themeKey:"palette"},borderRightColor:{themeKey:"palette"},borderBottomColor:{themeKey:"palette"},borderLeftColor:{themeKey:"palette"},outline:{themeKey:"borders",transform:l},outlineColor:{themeKey:"palette"},borderRadius:{themeKey:"shape.borderRadius",style:k},color:{themeKey:"palette",transform:O},bgcolor:{themeKey:"palette",cssProperty:"backgroundColor",transform:O},backgroundColor:{themeKey:"palette",transform:O},p:{style:n.Ms},pt:{style:n.Ms},pr:{style:n.Ms},pb:{style:n.Ms},pl:{style:n.Ms},px:{style:n.Ms},py:{style:n.Ms},padding:{style:n.Ms},paddingTop:{style:n.Ms},paddingRight:{style:n.Ms},paddingBottom:{style:n.Ms},paddingLeft:{style:n.Ms},paddingX:{style:n.Ms},paddingY:{style:n.Ms},paddingInline:{style:n.Ms},paddingInlineStart:{style:n.Ms},paddingInlineEnd:{style:n.Ms},paddingBlock:{style:n.Ms},paddingBlockStart:{style:n.Ms},paddingBlockEnd:{style:n.Ms},m:{style:n.Lc},mt:{style:n.Lc},mr:{style:n.Lc},mb:{style:n.Lc},ml:{style:n.Lc},mx:{style:n.Lc},my:{style:n.Lc},margin:{style:n.Lc},marginTop:{style:n.Lc},marginRight:{style:n.Lc},marginBottom:{style:n.Lc},marginLeft:{style:n.Lc},marginX:{style:n.Lc},marginY:{style:n.Lc},marginInline:{style:n.Lc},marginInlineStart:{style:n.Lc},marginInlineEnd:{style:n.Lc},marginBlock:{style:n.Lc},marginBlockStart:{style:n.Lc},marginBlockEnd:{style:n.Lc},displayPrint:{cssProperty:!1,transform:e=>({"@media print":{display:e}})},display:{},overflow:{},textOverflow:{},visibility:{},whiteSpace:{},flexBasis:{},flexDirection:{},flexWrap:{},justifyContent:{},alignItems:{},alignContent:{},order:{},flex:{},flexGrow:{},flexShrink:{},alignSelf:{},justifyItems:{},justifySelf:{},gap:{style:w},rowGap:{style:j},columnGap:{style:S},gridColumn:{},gridRow:{},gridAutoFlow:{},gridAutoColumns:{},gridAutoRows:{},gridTemplateColumns:{},gridTemplateRows:{},gridTemplateAreas:{},gridArea:{},position:{},zIndex:{themeKey:"zIndex"},top:{},right:{},bottom:{},left:{},boxShadow:{themeKey:"shadows"},width:{transform:C},maxWidth:{style:M},minWidth:{transform:C},height:{transform:C},maxHeight:{transform:C},minHeight:{transform:C},boxSizing:{},fontFamily:{themeKey:"typography"},fontSize:{themeKey:"typography"},fontStyle:{themeKey:"typography"},fontWeight:{themeKey:"typography"},letterSpacing:{},textTransform:{},lineHeight:{},textAlign:{},typography:{cssProperty:!1,themeKey:"typography"}})},9599:(e,t,r)=>{r.d(t,{A:()=>u});var n=r(8168),o=r(8587),s=r(1317),i=r(4188);const a=["sx"],l=e=>{var t,r;const n={systemProps:{},otherProps:{}},o=null!=(t=null==e||null==(r=e.theme)?void 0:r.unstable_sxConfig)?t:i.A;return Object.keys(e).forEach((t=>{o[t]?n.systemProps[t]=e[t]:n.otherProps[t]=e[t]})),n};function u(e){const{sx:t}=e,r=(0,o.A)(e,a),{systemProps:i,otherProps:u}=l(r);let c;return c=Array.isArray(t)?[i,...t]:"function"==typeof t?(...e)=>{const r=t(...e);return(0,s.Q)(r)?(0,n.A)({},i,r):i}:(0,n.A)({},i,t),(0,n.A)({},u,{sx:c})}},3857:(e,t,r)=>{r.r(t),r.d(t,{default:()=>n.A,extendSxProp:()=>o.A,unstable_createStyleFunctionSx:()=>n.k,unstable_defaultSxConfig:()=>s.A});var n=r(3571),o=r(9599),s=r(4188)},3571:(e,t,r)=>{r.d(t,{A:()=>c,k:()=>l});var n=r(3967),o=r(4620),s=r(6481),i=r(9452),a=r(4188);function l(){function e(e,t,r,o){const a={[e]:t,theme:r},l=o[e];if(!l)return{[e]:t};const{cssProperty:u=e,themeKey:c,transform:p,style:d}=l;if(null==t)return null;if("typography"===c&&"inherit"===t)return{[e]:t};const f=(0,s.Yn)(r,c)||{};return d?d(a):(0,i.NI)(a,t,(t=>{let r=(0,s.BO)(f,p,t);return t===r&&"string"==typeof t&&(r=(0,s.BO)(f,p,`${e}${"default"===t?"":(0,n.A)(t)}`,t)),!1===u?r:{[u]:r}}))}return function t(r){var n;const{sx:s,theme:l={}}=r||{};if(!s)return null;const u=null!=(n=l.unstable_sxConfig)?n:a.A;function c(r){let n=r;if("function"==typeof r)n=r(l);else if("object"!=typeof r)return r;if(!n)return null;const s=(0,i.EU)(l.breakpoints),a=Object.keys(s);let c=s;return Object.keys(n).forEach((r=>{const s="function"==typeof(a=n[r])?a(l):a;var a;if(null!=s)if("object"==typeof s)if(u[r])c=(0,o.A)(c,e(r,s,l,u));else{const e=(0,i.NI)({theme:l},s,(e=>({[r]:e})));!function(...e){const t=e.reduce(((e,t)=>e.concat(Object.keys(t))),[]),r=new Set(t);return e.every((e=>r.size===Object.keys(e).length))}(e,s)?c=(0,o.A)(c,e):c[r]=t({sx:s,theme:l})}else c=(0,o.A)(c,e(r,s,l,u))})),(0,i.vf)(a,c)}return Array.isArray(s)?s.map(c):c(s)}}const u=l();u.filterProps=["sx"];const c=u},8676:(e,t,r)=>{r.d(t,{A:()=>A});var n=r(8168),o=r(8587),s=r(9495),i=r(1317),a=r(8749),l=r(3571);const u=["ownerState"],c=["variants"],p=["name","slot","skipVariantsResolver","skipSx","overridesResolver"];function d(e){return"ownerState"!==e&&"theme"!==e&&"sx"!==e&&"as"!==e}const f=(0,a.A)(),m=e=>e?e.charAt(0).toLowerCase()+e.slice(1):e;function y({defaultTheme:e,theme:t,themeId:r}){return n=t,0===Object.keys(n).length?e:t[r]||t;var n}function h(e){return e?(t,r)=>r[e]:null}function g(e,t){let{ownerState:r}=t,s=(0,o.A)(t,u);const i="function"==typeof e?e((0,n.A)({ownerState:r},s)):e;if(Array.isArray(i))return i.flatMap((e=>g(e,(0,n.A)({ownerState:r},s))));if(i&&"object"==typeof i&&Array.isArray(i.variants)){const{variants:e=[]}=i;let t=(0,o.A)(i,c);return e.forEach((e=>{let o=!0;"function"==typeof e.props?o=e.props((0,n.A)({ownerState:r},s,r)):Object.keys(e.props).forEach((t=>{(null==r?void 0:r[t])!==e.props[t]&&s[t]!==e.props[t]&&(o=!1)})),o&&(Array.isArray(t)||(t=[t]),t.push("function"==typeof e.style?e.style((0,n.A)({ownerState:r},s,r)):e.style))})),t}return i}const A=function(e={}){const{themeId:t,defaultTheme:r=f,rootShouldForwardProp:a=d,slotShouldForwardProp:u=d}=e,c=e=>(0,l.A)((0,n.A)({},e,{theme:y((0,n.A)({},e,{defaultTheme:r,themeId:t}))}));return c.__mui_systemSx=!0,(e,l={})=>{(0,s.internal_processStyles)(e,(e=>e.filter((e=>!(null!=e&&e.__mui_systemSx)))));const{name:f,slot:A,skipVariantsResolver:b,skipSx:v,overridesResolver:x=h(m(A))}=l,k=(0,o.A)(l,p),w=void 0!==b?b:A&&"Root"!==A&&"root"!==A||!1,S=v||!1;let j=d;"Root"===A||"root"===A?j=a:A?j=u:function(e){return"string"==typeof e&&e.charCodeAt(0)>96}(e)&&(j=void 0);const O=(0,s.default)(e,(0,n.A)({shouldForwardProp:j,label:void 0},k)),C=e=>"function"==typeof e&&e.__emotion_real!==e||(0,i.Q)(e)?o=>g(e,(0,n.A)({},o,{theme:y({theme:o.theme,defaultTheme:r,themeId:t})})):e,_=(o,...s)=>{let i=C(o);const a=s?s.map(C):[];f&&x&&a.push((e=>{const o=y((0,n.A)({},e,{defaultTheme:r,themeId:t}));if(!o.components||!o.components[f]||!o.components[f].styleOverrides)return null;const s=o.components[f].styleOverrides,i={};return Object.entries(s).forEach((([t,r])=>{i[t]=g(r,(0,n.A)({},e,{theme:o}))})),x(e,i)})),f&&!w&&a.push((e=>{var o;const s=y((0,n.A)({},e,{defaultTheme:r,themeId:t}));return g({variants:null==s||null==(o=s.components)||null==(o=o[f])?void 0:o.variants},(0,n.A)({},e,{theme:s}))})),S||a.push(c);const l=a.length-s.length;if(Array.isArray(o)&&l>0){const e=new Array(l).fill("");i=[...o,...e],i.raw=[...o.raw,...e]}const u=O(i,...a);return e.muiName&&(u.muiName=e.muiName),u};return O.withConfig&&(_.withConfig=O.withConfig),_}}()},2858:(e,t,r)=>{r.d(t,{A:()=>i});var n=r(8749),o=r(3951);const s=(0,n.A)(),i=function(e=s){return(0,o.A)(e)}},6606:(e,t,r)=>{r.d(t,{A:()=>s});var n=r(7379),o=r(2858);function s({props:e,name:t,defaultTheme:r,themeId:s}){let i=(0,o.A)(r);s&&(i=i[s]||i);const a=function(e){const{theme:t,name:r,props:o}=e;return t&&t.components&&t.components[r]&&t.components[r].defaultProps?(0,n.A)(t.components[r].defaultProps,o):o}({theme:i,name:t,props:e});return a}},3951:(e,t,r)=>{r.d(t,{A:()=>s});var n=r(6540),o=r(9214);const s=function(e=null){const t=n.useContext(o.T);return t&&(r=t,0!==Object.keys(r).length)?t:e;var r}}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0xPLEVBQUksTUFDSmxHLEdBQ0VzTixFQUNKLE9BQUszSCxHQUFVQSxFQUFNcUMsWUFBZXJDLEVBQU1xQyxXQUFXOUIsSUFBVVAsRUFBTXFDLFdBQVc5QixHQUFNc0gsY0FHL0UsRUFBQXdTLEVBQUEsR0FBYXJhLEVBQU1xQyxXQUFXOUIsR0FBTXNILGFBQWN4TixHQUZoREEsQ0FHWCxDREdzQnlOLENBQWMsQ0FDaEM5SCxRQUNBTyxPQUNBbEcsVUFFRixPQUFPK2YsQ0FDVCxDLDBERVRBLFFBSkEsU0FBa0I3ZixFQUFlLE1BQy9CLE1BQU0rZixFQUFlLGFBQWlCLEVBQUFDLEdBQ3RDLE9BQVFELElBTGE1ZixFQUtpQjRmLEVBSkgsSUFBNUIzZixPQUFPQyxLQUFLRixHQUFLRyxRQUk2Q3lmLEVBQWYvZixFQUx4RCxJQUF1QkcsQ0FNdkIsQyIsInNvdXJjZXMiOlsid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N0eWxlZC1lbmdpbmUvR2xvYmFsU3R5bGVzL0dsb2JhbFN0eWxlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zdHlsZWQtZW5naW5lL1N0eWxlZEVuZ2luZVByb3ZpZGVyL1N0eWxlZEVuZ2luZVByb3ZpZGVyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N0eWxlZC1lbmdpbmUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2NvbG9yTWFuaXB1bGF0b3IuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2NyZWF0ZVN0eWxlZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL0NvbnRhaW5lci9jcmVhdGVDb250YWluZXIuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9EZWZhdWx0UHJvcHNQcm92aWRlci9EZWZhdWx0UHJvcHNQcm92aWRlci5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL0dsb2JhbFN0eWxlcy9HbG9iYWxTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9SdGxQcm92aWRlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL1N0YWNrL2NyZWF0ZVN0YWNrLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3ByaXZhdGUtdGhlbWluZy91c2VUaGVtZS9UaGVtZUNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvcHJpdmF0ZS10aGVtaW5nL3VzZVRoZW1lL3VzZVRoZW1lLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3ByaXZhdGUtdGhlbWluZy9UaGVtZVByb3ZpZGVyL25lc3RlZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9wcml2YXRlLXRoZW1pbmcvVGhlbWVQcm92aWRlci9UaGVtZVByb3ZpZGVyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vVGhlbWVQcm92aWRlci9UaGVtZVByb3ZpZGVyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vYnJlYWtwb2ludHMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVCb3guanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVUaGVtZS9hcHBseVN0eWxlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZVRoZW1lL2NyZWF0ZUJyZWFrcG9pbnRzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvc2hhcGUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVUaGVtZS9jcmVhdGVUaGVtZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZVRoZW1lL2NyZWF0ZVNwYWNpbmcuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9tZXJnZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3NwYWNpbmcuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9tZW1vaXplLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jb21wb3NlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vYm9yZGVycy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2Nzc0dyaWQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9wYWxldHRlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc2l6aW5nLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGVGdW5jdGlvblN4L2RlZmF1bHRTeENvbmZpZy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3N0eWxlRnVuY3Rpb25TeC9leHRlbmRTeFByb3AuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zdHlsZUZ1bmN0aW9uU3gvc3R5bGVGdW5jdGlvblN4LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlU3R5bGVkLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGVkLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vdXNlVGhlbWUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS91c2VUaGVtZVByb3BzL3VzZVRoZW1lUHJvcHMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS91c2VUaGVtZVByb3BzL2dldFRoZW1lUHJvcHMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS91c2VUaGVtZVdpdGhvdXREZWZhdWx0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBpc0VtcHR5KG9iaikge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsIHx8IE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gR2xvYmFsU3R5bGVzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBzdHlsZXMsXG4gICAgZGVmYXVsdFRoZW1lID0ge31cbiAgfSA9IHByb3BzO1xuICBjb25zdCBnbG9iYWxTdHlsZXMgPSB0eXBlb2Ygc3R5bGVzID09PSAnZnVuY3Rpb24nID8gdGhlbWVJbnB1dCA9PiBzdHlsZXMoaXNFbXB0eSh0aGVtZUlucHV0KSA/IGRlZmF1bHRUaGVtZSA6IHRoZW1lSW5wdXQpIDogc3R5bGVzO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goR2xvYmFsLCB7XG4gICAgc3R5bGVzOiBnbG9iYWxTdHlsZXNcbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBHbG9iYWxTdHlsZXMucHJvcFR5cGVzID0ge1xuICBkZWZhdWx0VGhlbWU6IFByb3BUeXBlcy5vYmplY3QsXG4gIHN0eWxlczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5LCBQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pXG59IDogdm9pZCAwOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IENhY2hlUHJvdmlkZXIgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgY3JlYXRlQ2FjaGUgZnJvbSAnQGVtb3Rpb24vY2FjaGUnO1xuXG4vLyBwcmVwZW5kOiB0cnVlIG1vdmVzIE1VSSBzdHlsZXMgdG8gdGhlIHRvcCBvZiB0aGUgPGhlYWQ+IHNvIHRoZXkncmUgbG9hZGVkIGZpcnN0LlxuLy8gSXQgYWxsb3dzIGRldmVsb3BlcnMgdG8gZWFzaWx5IG92ZXJyaWRlIE1VSSBzdHlsZXMgd2l0aCBvdGhlciBzdHlsaW5nIHNvbHV0aW9ucywgbGlrZSBDU1MgbW9kdWxlcy5cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5sZXQgY2FjaGU7XG5pZiAodHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0Jykge1xuICBjYWNoZSA9IGNyZWF0ZUNhY2hlKHtcbiAgICBrZXk6ICdjc3MnLFxuICAgIHByZXBlbmQ6IHRydWVcbiAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTdHlsZWRFbmdpbmVQcm92aWRlcihwcm9wcykge1xuICBjb25zdCB7XG4gICAgaW5qZWN0Rmlyc3QsXG4gICAgY2hpbGRyZW5cbiAgfSA9IHByb3BzO1xuICByZXR1cm4gaW5qZWN0Rmlyc3QgJiYgY2FjaGUgPyAvKiNfX1BVUkVfXyovX2pzeChDYWNoZVByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNhY2hlLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICB9KSA6IGNoaWxkcmVuO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3R5bGVkRW5naW5lUHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogWW91ciBjb21wb25lbnQgdHJlZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBzdHlsZXMgYXJlIGluamVjdGVkIGxhc3QgaW4gdGhlIDxoZWFkPiBlbGVtZW50IG9mIHRoZSBwYWdlLlxuICAgKiBBcyBhIHJlc3VsdCwgdGhleSBnYWluIG1vcmUgc3BlY2lmaWNpdHkgdGhhbiBhbnkgb3RoZXIgc3R5bGUgc2hlZXQuXG4gICAqIElmIHlvdSB3YW50IHRvIG92ZXJyaWRlIE1VSSdzIHN0eWxlcywgc2V0IHRoaXMgcHJvcC5cbiAgICovXG4gIGluamVjdEZpcnN0OiBQcm9wVHlwZXMuYm9vbFxufSA6IHZvaWQgMDsiLCIvKipcbiAqIEBtdWkvc3R5bGVkLWVuZ2luZSB2NS4xNi42XG4gKlxuICogQGxpY2Vuc2UgTUlUXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBjbGllbnQnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuaW1wb3J0IGVtU3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdHlsZWQodGFnLCBvcHRpb25zKSB7XG4gIGNvbnN0IHN0eWxlc0ZhY3RvcnkgPSBlbVN0eWxlZCh0YWcsIG9wdGlvbnMpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHJldHVybiAoLi4uc3R5bGVzKSA9PiB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0eXBlb2YgdGFnID09PSAnc3RyaW5nJyA/IGBcIiR7dGFnfVwiYCA6ICdjb21wb25lbnQnO1xuICAgICAgaWYgKHN0eWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogU2VlbXMgbGlrZSB5b3UgY2FsbGVkIFxcYHN0eWxlZCgke2NvbXBvbmVudH0pKClcXGAgd2l0aG91dCBhIFxcYHN0eWxlXFxgIGFyZ3VtZW50LmAsICdZb3UgbXVzdCBwcm92aWRlIGEgYHN0eWxlc2AgYXJndW1lbnQ6IGBzdHlsZWQoXCJkaXZcIikoc3R5bGVZb3VGb3Jnb3RUb1Bhc3MpYC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlcy5zb21lKHN0eWxlID0+IHN0eWxlID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogdGhlIHN0eWxlZCgke2NvbXBvbmVudH0pKC4uLmFyZ3MpIEFQSSByZXF1aXJlcyBhbGwgaXRzIGFyZ3MgdG8gYmUgZGVmaW5lZC5gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHlsZXNGYWN0b3J5KC4uLnN0eWxlcyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gc3R5bGVzRmFjdG9yeTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IGludGVybmFsX3Byb2Nlc3NTdHlsZXMgPSAodGFnLCBwcm9jZXNzb3IpID0+IHtcbiAgLy8gRW1vdGlvbiBhdHRhY2hlcyBhbGwgdGhlIHN0eWxlcyBhcyBgX19lbW90aW9uX3N0eWxlc2AuXG4gIC8vIFJlZjogaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9ibG9iLzE2ZDk3MWQwZGEyMjk1OTZkNmJjYzM5ZDI4MmJhOTc1M2M5ZWU3Y2YvcGFja2FnZXMvc3R5bGVkL3NyYy9iYXNlLmpzI0wxODZcbiAgaWYgKEFycmF5LmlzQXJyYXkodGFnLl9fZW1vdGlvbl9zdHlsZXMpKSB7XG4gICAgdGFnLl9fZW1vdGlvbl9zdHlsZXMgPSBwcm9jZXNzb3IodGFnLl9fZW1vdGlvbl9zdHlsZXMpO1xuICB9XG59O1xuZXhwb3J0IHsgVGhlbWVDb250ZXh0LCBrZXlmcmFtZXMsIGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3R5bGVkRW5naW5lUHJvdmlkZXIgfSBmcm9tICcuL1N0eWxlZEVuZ2luZVByb3ZpZGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgR2xvYmFsU3R5bGVzIH0gZnJvbSAnLi9HbG9iYWxTdHlsZXMnOyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFscGhhID0gYWxwaGE7XG5leHBvcnRzLmJsZW5kID0gYmxlbmQ7XG5leHBvcnRzLmNvbG9yQ2hhbm5lbCA9IHZvaWQgMDtcbmV4cG9ydHMuZGFya2VuID0gZGFya2VuO1xuZXhwb3J0cy5kZWNvbXBvc2VDb2xvciA9IGRlY29tcG9zZUNvbG9yO1xuZXhwb3J0cy5lbXBoYXNpemUgPSBlbXBoYXNpemU7XG5leHBvcnRzLmdldENvbnRyYXN0UmF0aW8gPSBnZXRDb250cmFzdFJhdGlvO1xuZXhwb3J0cy5nZXRMdW1pbmFuY2UgPSBnZXRMdW1pbmFuY2U7XG5leHBvcnRzLmhleFRvUmdiID0gaGV4VG9SZ2I7XG5leHBvcnRzLmhzbFRvUmdiID0gaHNsVG9SZ2I7XG5leHBvcnRzLmxpZ2h0ZW4gPSBsaWdodGVuO1xuZXhwb3J0cy5wcml2YXRlX3NhZmVBbHBoYSA9IHByaXZhdGVfc2FmZUFscGhhO1xuZXhwb3J0cy5wcml2YXRlX3NhZmVDb2xvckNoYW5uZWwgPSB2b2lkIDA7XG5leHBvcnRzLnByaXZhdGVfc2FmZURhcmtlbiA9IHByaXZhdGVfc2FmZURhcmtlbjtcbmV4cG9ydHMucHJpdmF0ZV9zYWZlRW1waGFzaXplID0gcHJpdmF0ZV9zYWZlRW1waGFzaXplO1xuZXhwb3J0cy5wcml2YXRlX3NhZmVMaWdodGVuID0gcHJpdmF0ZV9zYWZlTGlnaHRlbjtcbmV4cG9ydHMucmVjb21wb3NlQ29sb3IgPSByZWNvbXBvc2VDb2xvcjtcbmV4cG9ydHMucmdiVG9IZXggPSByZ2JUb0hleDtcbnZhciBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCIpKTtcbnZhciBfY2xhbXAgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAbXVpL3V0aWxzL2NsYW1wXCIpKTtcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuXG4vKipcbiAqIFJldHVybnMgYSBudW1iZXIgd2hvc2UgdmFsdWUgaXMgbGltaXRlZCB0byB0aGUgZ2l2ZW4gcmFuZ2UuXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVGhlIHZhbHVlIHRvIGJlIGNsYW1wZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gVGhlIGxvd2VyIGJvdW5kYXJ5IG9mIHRoZSBvdXRwdXQgcmFuZ2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXggVGhlIHVwcGVyIGJvdW5kYXJ5IG9mIHRoZSBvdXRwdXQgcmFuZ2VcbiAqIEByZXR1cm5zIHtudW1iZXJ9IEEgbnVtYmVyIGluIHRoZSByYW5nZSBbbWluLCBtYXhdXG4gKi9cbmZ1bmN0aW9uIGNsYW1wV3JhcHBlcih2YWx1ZSwgbWluID0gMCwgbWF4ID0gMSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh2YWx1ZSA8IG1pbiB8fCB2YWx1ZSA+IG1heCkge1xuICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBUaGUgdmFsdWUgcHJvdmlkZWQgJHt2YWx1ZX0gaXMgb3V0IG9mIHJhbmdlIFske21pbn0sICR7bWF4fV0uYCk7XG4gICAgfVxuICB9XG4gIHJldHVybiAoMCwgX2NsYW1wLmRlZmF1bHQpKHZhbHVlLCBtaW4sIG1heCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBjb2xvciBmcm9tIENTUyBoZXggZm9ybWF0IHRvIENTUyByZ2IgZm9ybWF0LlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gSGV4IGNvbG9yLCBpLmUuICNubm4gb3IgI25ubm5ublxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgcmdiIGNvbG9yIHN0cmluZ1xuICovXG5mdW5jdGlvbiBoZXhUb1JnYihjb2xvcikge1xuICBjb2xvciA9IGNvbG9yLnNsaWNlKDEpO1xuICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYC57MSwke2NvbG9yLmxlbmd0aCA+PSA2ID8gMiA6IDF9fWAsICdnJyk7XG4gIGxldCBjb2xvcnMgPSBjb2xvci5tYXRjaChyZSk7XG4gIGlmIChjb2xvcnMgJiYgY29sb3JzWzBdLmxlbmd0aCA9PT0gMSkge1xuICAgIGNvbG9ycyA9IGNvbG9ycy5tYXAobiA9PiBuICsgbik7XG4gIH1cbiAgcmV0dXJuIGNvbG9ycyA/IGByZ2Ike2NvbG9ycy5sZW5ndGggPT09IDQgPyAnYScgOiAnJ30oJHtjb2xvcnMubWFwKChuLCBpbmRleCkgPT4ge1xuICAgIHJldHVybiBpbmRleCA8IDMgPyBwYXJzZUludChuLCAxNikgOiBNYXRoLnJvdW5kKHBhcnNlSW50KG4sIDE2KSAvIDI1NSAqIDEwMDApIC8gMTAwMDtcbiAgfSkuam9pbignLCAnKX0pYCA6ICcnO1xufVxuZnVuY3Rpb24gaW50VG9IZXgoaW50KSB7XG4gIGNvbnN0IGhleCA9IGludC50b1N0cmluZygxNik7XG4gIHJldHVybiBoZXgubGVuZ3RoID09PSAxID8gYDAke2hleH1gIDogaGV4O1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggdGhlIHR5cGUgYW5kIHZhbHVlcyBvZiBhIGNvbG9yLlxuICpcbiAqIE5vdGU6IERvZXMgbm90IHN1cHBvcnQgcmdiICUgdmFsdWVzLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHJldHVybnMge29iamVjdH0gLSBBIE1VSSBjb2xvciBvYmplY3Q6IHt0eXBlOiBzdHJpbmcsIHZhbHVlczogbnVtYmVyW119XG4gKi9cbmZ1bmN0aW9uIGRlY29tcG9zZUNvbG9yKGNvbG9yKSB7XG4gIC8vIElkZW1wb3RlbnRcbiAgaWYgKGNvbG9yLnR5cGUpIHtcbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbiAgaWYgKGNvbG9yLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgcmV0dXJuIGRlY29tcG9zZUNvbG9yKGhleFRvUmdiKGNvbG9yKSk7XG4gIH1cbiAgY29uc3QgbWFya2VyID0gY29sb3IuaW5kZXhPZignKCcpO1xuICBjb25zdCB0eXBlID0gY29sb3Iuc3Vic3RyaW5nKDAsIG1hcmtlcik7XG4gIGlmIChbJ3JnYicsICdyZ2JhJywgJ2hzbCcsICdoc2xhJywgJ2NvbG9yJ10uaW5kZXhPZih0eXBlKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogVW5zdXBwb3J0ZWQgXFxgJHtjb2xvcn1cXGAgY29sb3IuXG5UaGUgZm9sbG93aW5nIGZvcm1hdHMgYXJlIHN1cHBvcnRlZDogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKS5gIDogKDAsIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UyLmRlZmF1bHQpKDksIGNvbG9yKSk7XG4gIH1cbiAgbGV0IHZhbHVlcyA9IGNvbG9yLnN1YnN0cmluZyhtYXJrZXIgKyAxLCBjb2xvci5sZW5ndGggLSAxKTtcbiAgbGV0IGNvbG9yU3BhY2U7XG4gIGlmICh0eXBlID09PSAnY29sb3InKSB7XG4gICAgdmFsdWVzID0gdmFsdWVzLnNwbGl0KCcgJyk7XG4gICAgY29sb3JTcGFjZSA9IHZhbHVlcy5zaGlmdCgpO1xuICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSA0ICYmIHZhbHVlc1szXS5jaGFyQXQoMCkgPT09ICcvJykge1xuICAgICAgdmFsdWVzWzNdID0gdmFsdWVzWzNdLnNsaWNlKDEpO1xuICAgIH1cbiAgICBpZiAoWydzcmdiJywgJ2Rpc3BsYXktcDMnLCAnYTk4LXJnYicsICdwcm9waG90by1yZ2InLCAncmVjLTIwMjAnXS5pbmRleE9mKGNvbG9yU3BhY2UpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IHVuc3VwcG9ydGVkIFxcYCR7Y29sb3JTcGFjZX1cXGAgY29sb3Igc3BhY2UuXG5UaGUgZm9sbG93aW5nIGNvbG9yIHNwYWNlcyBhcmUgc3VwcG9ydGVkOiBzcmdiLCBkaXNwbGF5LXAzLCBhOTgtcmdiLCBwcm9waG90by1yZ2IsIHJlYy0yMDIwLmAgOiAoMCwgX2Zvcm1hdE11aUVycm9yTWVzc2FnZTIuZGVmYXVsdCkoMTAsIGNvbG9yU3BhY2UpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFsdWVzID0gdmFsdWVzLnNwbGl0KCcsJyk7XG4gIH1cbiAgdmFsdWVzID0gdmFsdWVzLm1hcCh2YWx1ZSA9PiBwYXJzZUZsb2F0KHZhbHVlKSk7XG4gIHJldHVybiB7XG4gICAgdHlwZSxcbiAgICB2YWx1ZXMsXG4gICAgY29sb3JTcGFjZVxuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBjaGFubmVsIGNyZWF0ZWQgZnJvbSB0aGUgaW5wdXQgY29sb3IuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgY2hhbm5lbCBmb3IgdGhlIGNvbG9yLCB0aGF0IGNhbiBiZSB1c2VkIGluIHJnYmEgb3IgaHNsYSBjb2xvcnNcbiAqL1xuY29uc3QgY29sb3JDaGFubmVsID0gY29sb3IgPT4ge1xuICBjb25zdCBkZWNvbXBvc2VkQ29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIHJldHVybiBkZWNvbXBvc2VkQ29sb3IudmFsdWVzLnNsaWNlKDAsIDMpLm1hcCgodmFsLCBpZHgpID0+IGRlY29tcG9zZWRDb2xvci50eXBlLmluZGV4T2YoJ2hzbCcpICE9PSAtMSAmJiBpZHggIT09IDAgPyBgJHt2YWx9JWAgOiB2YWwpLmpvaW4oJyAnKTtcbn07XG5leHBvcnRzLmNvbG9yQ2hhbm5lbCA9IGNvbG9yQ2hhbm5lbDtcbmNvbnN0IHByaXZhdGVfc2FmZUNvbG9yQ2hhbm5lbCA9IChjb2xvciwgd2FybmluZykgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBjb2xvckNoYW5uZWwoY29sb3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICh3YXJuaW5nICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgY29sb3Igb2JqZWN0IHdpdGggdHlwZSBhbmQgdmFsdWVzIHRvIGEgc3RyaW5nLlxuICogQHBhcmFtIHtvYmplY3R9IGNvbG9yIC0gRGVjb21wb3NlZCBjb2xvclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yLnR5cGUgLSBPbmUgb2Y6ICdyZ2InLCAncmdiYScsICdoc2wnLCAnaHNsYScsICdjb2xvcidcbiAqIEBwYXJhbSB7YXJyYXl9IGNvbG9yLnZhbHVlcyAtIFtuLG4sbl0gb3IgW24sbixuLG5dXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyBjb2xvciBzdHJpbmdcbiAqL1xuZXhwb3J0cy5wcml2YXRlX3NhZmVDb2xvckNoYW5uZWwgPSBwcml2YXRlX3NhZmVDb2xvckNoYW5uZWw7XG5mdW5jdGlvbiByZWNvbXBvc2VDb2xvcihjb2xvcikge1xuICBjb25zdCB7XG4gICAgdHlwZSxcbiAgICBjb2xvclNwYWNlXG4gIH0gPSBjb2xvcjtcbiAgbGV0IHtcbiAgICB2YWx1ZXNcbiAgfSA9IGNvbG9yO1xuICBpZiAodHlwZS5pbmRleE9mKCdyZ2InKSAhPT0gLTEpIHtcbiAgICAvLyBPbmx5IGNvbnZlcnQgdGhlIGZpcnN0IDMgdmFsdWVzIHRvIGludCAoaS5lLiBub3QgYWxwaGEpXG4gICAgdmFsdWVzID0gdmFsdWVzLm1hcCgobiwgaSkgPT4gaSA8IDMgPyBwYXJzZUludChuLCAxMCkgOiBuKTtcbiAgfSBlbHNlIGlmICh0eXBlLmluZGV4T2YoJ2hzbCcpICE9PSAtMSkge1xuICAgIHZhbHVlc1sxXSA9IGAke3ZhbHVlc1sxXX0lYDtcbiAgICB2YWx1ZXNbMl0gPSBgJHt2YWx1ZXNbMl19JWA7XG4gIH1cbiAgaWYgKHR5cGUuaW5kZXhPZignY29sb3InKSAhPT0gLTEpIHtcbiAgICB2YWx1ZXMgPSBgJHtjb2xvclNwYWNlfSAke3ZhbHVlcy5qb2luKCcgJyl9YDtcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZXMgPSBgJHt2YWx1ZXMuam9pbignLCAnKX1gO1xuICB9XG4gIHJldHVybiBgJHt0eXBlfSgke3ZhbHVlc30pYDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGNvbG9yIGZyb20gQ1NTIHJnYiBmb3JtYXQgdG8gQ1NTIGhleCBmb3JtYXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBSR0IgY29sb3IsIGkuZS4gcmdiKG4sIG4sIG4pXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyByZ2IgY29sb3Igc3RyaW5nLCBpLmUuICNubm5ubm5cbiAqL1xuZnVuY3Rpb24gcmdiVG9IZXgoY29sb3IpIHtcbiAgLy8gSWRlbXBvdGVudFxuICBpZiAoY29sb3IuaW5kZXhPZignIycpID09PSAwKSB7XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9XG4gIGNvbnN0IHtcbiAgICB2YWx1ZXNcbiAgfSA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgcmV0dXJuIGAjJHt2YWx1ZXMubWFwKChuLCBpKSA9PiBpbnRUb0hleChpID09PSAzID8gTWF0aC5yb3VuZCgyNTUgKiBuKSA6IG4pKS5qb2luKCcnKX1gO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgY29sb3IgZnJvbSBoc2wgZm9ybWF0IHRvIHJnYiBmb3JtYXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBIU0wgY29sb3IgdmFsdWVzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSByZ2IgY29sb3IgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIGhzbFRvUmdiKGNvbG9yKSB7XG4gIGNvbG9yID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICBjb25zdCB7XG4gICAgdmFsdWVzXG4gIH0gPSBjb2xvcjtcbiAgY29uc3QgaCA9IHZhbHVlc1swXTtcbiAgY29uc3QgcyA9IHZhbHVlc1sxXSAvIDEwMDtcbiAgY29uc3QgbCA9IHZhbHVlc1syXSAvIDEwMDtcbiAgY29uc3QgYSA9IHMgKiBNYXRoLm1pbihsLCAxIC0gbCk7XG4gIGNvbnN0IGYgPSAobiwgayA9IChuICsgaCAvIDMwKSAlIDEyKSA9PiBsIC0gYSAqIE1hdGgubWF4KE1hdGgubWluKGsgLSAzLCA5IC0gaywgMSksIC0xKTtcbiAgbGV0IHR5cGUgPSAncmdiJztcbiAgY29uc3QgcmdiID0gW01hdGgucm91bmQoZigwKSAqIDI1NSksIE1hdGgucm91bmQoZig4KSAqIDI1NSksIE1hdGgucm91bmQoZig0KSAqIDI1NSldO1xuICBpZiAoY29sb3IudHlwZSA9PT0gJ2hzbGEnKSB7XG4gICAgdHlwZSArPSAnYSc7XG4gICAgcmdiLnB1c2godmFsdWVzWzNdKTtcbiAgfVxuICByZXR1cm4gcmVjb21wb3NlQ29sb3Ioe1xuICAgIHR5cGUsXG4gICAgdmFsdWVzOiByZ2JcbiAgfSk7XG59XG4vKipcbiAqIFRoZSByZWxhdGl2ZSBicmlnaHRuZXNzIG9mIGFueSBwb2ludCBpbiBhIGNvbG9yIHNwYWNlLFxuICogbm9ybWFsaXplZCB0byAwIGZvciBkYXJrZXN0IGJsYWNrIGFuZCAxIGZvciBsaWdodGVzdCB3aGl0ZS5cbiAqXG4gKiBGb3JtdWxhOiBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIwLVRFQ0hTL0cxNy5odG1sI0cxNy10ZXN0c1xuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHJldHVybnMge251bWJlcn0gVGhlIHJlbGF0aXZlIGJyaWdodG5lc3Mgb2YgdGhlIGNvbG9yIGluIHRoZSByYW5nZSAwIC0gMVxuICovXG5mdW5jdGlvbiBnZXRMdW1pbmFuY2UoY29sb3IpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIGxldCByZ2IgPSBjb2xvci50eXBlID09PSAnaHNsJyB8fCBjb2xvci50eXBlID09PSAnaHNsYScgPyBkZWNvbXBvc2VDb2xvcihoc2xUb1JnYihjb2xvcikpLnZhbHVlcyA6IGNvbG9yLnZhbHVlcztcbiAgcmdiID0gcmdiLm1hcCh2YWwgPT4ge1xuICAgIGlmIChjb2xvci50eXBlICE9PSAnY29sb3InKSB7XG4gICAgICB2YWwgLz0gMjU1OyAvLyBub3JtYWxpemVkXG4gICAgfVxuICAgIHJldHVybiB2YWwgPD0gMC4wMzkyOCA/IHZhbCAvIDEyLjkyIDogKCh2YWwgKyAwLjA1NSkgLyAxLjA1NSkgKiogMi40O1xuICB9KTtcblxuICAvLyBUcnVuY2F0ZSBhdCAzIGRpZ2l0c1xuICByZXR1cm4gTnVtYmVyKCgwLjIxMjYgKiByZ2JbMF0gKyAwLjcxNTIgKiByZ2JbMV0gKyAwLjA3MjIgKiByZ2JbMl0pLnRvRml4ZWQoMykpO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGNvbnRyYXN0IHJhdGlvIGJldHdlZW4gdHdvIGNvbG9ycy5cbiAqXG4gKiBGb3JtdWxhOiBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIwLVRFQ0hTL0cxNy5odG1sI0cxNy10ZXN0c1xuICogQHBhcmFtIHtzdHJpbmd9IGZvcmVncm91bmQgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFja2dyb3VuZCAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKClcbiAqIEByZXR1cm5zIHtudW1iZXJ9IEEgY29udHJhc3QgcmF0aW8gdmFsdWUgaW4gdGhlIHJhbmdlIDAgLSAyMS5cbiAqL1xuZnVuY3Rpb24gZ2V0Q29udHJhc3RSYXRpbyhmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kKSB7XG4gIGNvbnN0IGx1bUEgPSBnZXRMdW1pbmFuY2UoZm9yZWdyb3VuZCk7XG4gIGNvbnN0IGx1bUIgPSBnZXRMdW1pbmFuY2UoYmFja2dyb3VuZCk7XG4gIHJldHVybiAoTWF0aC5tYXgobHVtQSwgbHVtQikgKyAwLjA1KSAvIChNYXRoLm1pbihsdW1BLCBsdW1CKSArIDAuMDUpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGFic29sdXRlIHRyYW5zcGFyZW5jeSBvZiBhIGNvbG9yLlxuICogQW55IGV4aXN0aW5nIGFscGhhIHZhbHVlcyBhcmUgb3ZlcndyaXR0ZW4uXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSB2YWx1ZSB0byBzZXQgdGhlIGFscGhhIGNoYW5uZWwgdG8gaW4gdGhlIHJhbmdlIDAgLSAxXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyBjb2xvciBzdHJpbmcuIEhleCBpbnB1dCB2YWx1ZXMgYXJlIHJldHVybmVkIGFzIHJnYlxuICovXG5mdW5jdGlvbiBhbHBoYShjb2xvciwgdmFsdWUpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIHZhbHVlID0gY2xhbXBXcmFwcGVyKHZhbHVlKTtcbiAgaWYgKGNvbG9yLnR5cGUgPT09ICdyZ2InIHx8IGNvbG9yLnR5cGUgPT09ICdoc2wnKSB7XG4gICAgY29sb3IudHlwZSArPSAnYSc7XG4gIH1cbiAgaWYgKGNvbG9yLnR5cGUgPT09ICdjb2xvcicpIHtcbiAgICBjb2xvci52YWx1ZXNbM10gPSBgLyR7dmFsdWV9YDtcbiAgfSBlbHNlIHtcbiAgICBjb2xvci52YWx1ZXNbM10gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gcmVjb21wb3NlQ29sb3IoY29sb3IpO1xufVxuZnVuY3Rpb24gcHJpdmF0ZV9zYWZlQWxwaGEoY29sb3IsIHZhbHVlLCB3YXJuaW5nKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGFscGhhKGNvbG9yLCB2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHdhcm5pbmcgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXJrZW5zIGEgY29sb3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcGFyYW0ge251bWJlcn0gY29lZmZpY2llbnQgLSBtdWx0aXBsaWVyIGluIHRoZSByYW5nZSAwIC0gMVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgY29sb3Igc3RyaW5nLiBIZXggaW5wdXQgdmFsdWVzIGFyZSByZXR1cm5lZCBhcyByZ2JcbiAqL1xuZnVuY3Rpb24gZGFya2VuKGNvbG9yLCBjb2VmZmljaWVudCkge1xuICBjb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgY29lZmZpY2llbnQgPSBjbGFtcFdyYXBwZXIoY29lZmZpY2llbnQpO1xuICBpZiAoY29sb3IudHlwZS5pbmRleE9mKCdoc2wnKSAhPT0gLTEpIHtcbiAgICBjb2xvci52YWx1ZXNbMl0gKj0gMSAtIGNvZWZmaWNpZW50O1xuICB9IGVsc2UgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZigncmdiJykgIT09IC0xIHx8IGNvbG9yLnR5cGUuaW5kZXhPZignY29sb3InKSAhPT0gLTEpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkgKz0gMSkge1xuICAgICAgY29sb3IudmFsdWVzW2ldICo9IDEgLSBjb2VmZmljaWVudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY29tcG9zZUNvbG9yKGNvbG9yKTtcbn1cbmZ1bmN0aW9uIHByaXZhdGVfc2FmZURhcmtlbihjb2xvciwgY29lZmZpY2llbnQsIHdhcm5pbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGFya2VuKGNvbG9yLCBjb2VmZmljaWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHdhcm5pbmcgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBMaWdodGVucyBhIGNvbG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHBhcmFtIHtudW1iZXJ9IGNvZWZmaWNpZW50IC0gbXVsdGlwbGllciBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZy4gSGV4IGlucHV0IHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgcmdiXG4gKi9cbmZ1bmN0aW9uIGxpZ2h0ZW4oY29sb3IsIGNvZWZmaWNpZW50KSB7XG4gIGNvbG9yID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICBjb2VmZmljaWVudCA9IGNsYW1wV3JhcHBlcihjb2VmZmljaWVudCk7XG4gIGlmIChjb2xvci50eXBlLmluZGV4T2YoJ2hzbCcpICE9PSAtMSkge1xuICAgIGNvbG9yLnZhbHVlc1syXSArPSAoMTAwIC0gY29sb3IudmFsdWVzWzJdKSAqIGNvZWZmaWNpZW50O1xuICB9IGVsc2UgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZigncmdiJykgIT09IC0xKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpICs9IDEpIHtcbiAgICAgIGNvbG9yLnZhbHVlc1tpXSArPSAoMjU1IC0gY29sb3IudmFsdWVzW2ldKSAqIGNvZWZmaWNpZW50O1xuICAgIH1cbiAgfSBlbHNlIGlmIChjb2xvci50eXBlLmluZGV4T2YoJ2NvbG9yJykgIT09IC0xKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpICs9IDEpIHtcbiAgICAgIGNvbG9yLnZhbHVlc1tpXSArPSAoMSAtIGNvbG9yLnZhbHVlc1tpXSkgKiBjb2VmZmljaWVudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY29tcG9zZUNvbG9yKGNvbG9yKTtcbn1cbmZ1bmN0aW9uIHByaXZhdGVfc2FmZUxpZ2h0ZW4oY29sb3IsIGNvZWZmaWNpZW50LCB3YXJuaW5nKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGxpZ2h0ZW4oY29sb3IsIGNvZWZmaWNpZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAod2FybmluZyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfVxufVxuXG4vKipcbiAqIERhcmtlbiBvciBsaWdodGVuIGEgY29sb3IsIGRlcGVuZGluZyBvbiBpdHMgbHVtaW5hbmNlLlxuICogTGlnaHQgY29sb3JzIGFyZSBkYXJrZW5lZCwgZGFyayBjb2xvcnMgYXJlIGxpZ2h0ZW5lZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2VmZmljaWVudD0wLjE1IC0gbXVsdGlwbGllciBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZy4gSGV4IGlucHV0IHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgcmdiXG4gKi9cbmZ1bmN0aW9uIGVtcGhhc2l6ZShjb2xvciwgY29lZmZpY2llbnQgPSAwLjE1KSB7XG4gIHJldHVybiBnZXRMdW1pbmFuY2UoY29sb3IpID4gMC41ID8gZGFya2VuKGNvbG9yLCBjb2VmZmljaWVudCkgOiBsaWdodGVuKGNvbG9yLCBjb2VmZmljaWVudCk7XG59XG5mdW5jdGlvbiBwcml2YXRlX3NhZmVFbXBoYXNpemUoY29sb3IsIGNvZWZmaWNpZW50LCB3YXJuaW5nKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVtcGhhc2l6ZShjb2xvciwgY29lZmZpY2llbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICh3YXJuaW5nICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9XG59XG5cbi8qKlxuICogQmxlbmQgYSB0cmFuc3BhcmVudCBvdmVybGF5IGNvbG9yIHdpdGggYSBiYWNrZ3JvdW5kIGNvbG9yLCByZXN1bHRpbmcgaW4gYSBzaW5nbGVcbiAqIFJHQiBjb2xvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBiYWNrZ3JvdW5kIC0gQ1NTIGNvbG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gb3ZlcmxheSAtIENTUyBjb2xvclxuICogQHBhcmFtIHtudW1iZXJ9IG9wYWNpdHkgLSBPcGFjaXR5IG11bHRpcGxpZXIgaW4gdGhlIHJhbmdlIDAgLSAxXG4gKiBAcGFyYW0ge251bWJlcn0gW2dhbW1hPTEuMF0gLSBHYW1tYSBjb3JyZWN0aW9uIGZhY3Rvci4gRm9yIGdhbW1hLWNvcnJlY3QgYmxlbmRpbmcsIDIuMiBpcyB1c3VhbC5cbiAqL1xuZnVuY3Rpb24gYmxlbmQoYmFja2dyb3VuZCwgb3ZlcmxheSwgb3BhY2l0eSwgZ2FtbWEgPSAxLjApIHtcbiAgY29uc3QgYmxlbmRDaGFubmVsID0gKGIsIG8pID0+IE1hdGgucm91bmQoKGIgKiogKDEgLyBnYW1tYSkgKiAoMSAtIG9wYWNpdHkpICsgbyAqKiAoMSAvIGdhbW1hKSAqIG9wYWNpdHkpICoqIGdhbW1hKTtcbiAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gZGVjb21wb3NlQ29sb3IoYmFja2dyb3VuZCk7XG4gIGNvbnN0IG92ZXJsYXlDb2xvciA9IGRlY29tcG9zZUNvbG9yKG92ZXJsYXkpO1xuICBjb25zdCByZ2IgPSBbYmxlbmRDaGFubmVsKGJhY2tncm91bmRDb2xvci52YWx1ZXNbMF0sIG92ZXJsYXlDb2xvci52YWx1ZXNbMF0pLCBibGVuZENoYW5uZWwoYmFja2dyb3VuZENvbG9yLnZhbHVlc1sxXSwgb3ZlcmxheUNvbG9yLnZhbHVlc1sxXSksIGJsZW5kQ2hhbm5lbChiYWNrZ3JvdW5kQ29sb3IudmFsdWVzWzJdLCBvdmVybGF5Q29sb3IudmFsdWVzWzJdKV07XG4gIHJldHVybiByZWNvbXBvc2VDb2xvcih7XG4gICAgdHlwZTogJ3JnYicsXG4gICAgdmFsdWVzOiByZ2JcbiAgfSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGNyZWF0ZVN0eWxlZDtcbmV4cG9ydHMuc2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcDtcbmV4cG9ydHMuc3lzdGVtRGVmYXVsdFRoZW1lID0gdm9pZCAwO1xudmFyIF9leHRlbmRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kc1wiKSk7XG52YXIgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCIpKTtcbnZhciBfc3R5bGVkRW5naW5lID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIkBtdWkvc3R5bGVkLWVuZ2luZVwiKSk7XG52YXIgX2RlZXBtZXJnZSA9IHJlcXVpcmUoXCJAbXVpL3V0aWxzL2RlZXBtZXJnZVwiKTtcbnZhciBfY2FwaXRhbGl6ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvY2FwaXRhbGl6ZVwiKSk7XG52YXIgX2dldERpc3BsYXlOYW1lID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9nZXREaXNwbGF5TmFtZVwiKSk7XG52YXIgX2NyZWF0ZVRoZW1lID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jcmVhdGVUaGVtZVwiKSk7XG52YXIgX3N0eWxlRnVuY3Rpb25TeCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3R5bGVGdW5jdGlvblN4XCIpKTtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm93bmVyU3RhdGVcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJ2YXJpYW50c1wiXSxcbiAgX2V4Y2x1ZGVkMyA9IFtcIm5hbWVcIiwgXCJzbG90XCIsIFwic2tpcFZhcmlhbnRzUmVzb2x2ZXJcIiwgXCJza2lwU3hcIiwgXCJvdmVycmlkZXNSZXNvbHZlclwiXTtcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9ibG9iLzI2ZGVkNjEwOWZjZDhjYTk4NzVjYzJjZTQ1NjRmZWU2NzhhM2YzYzUvcGFja2FnZXMvc3R5bGVkL3NyYy91dGlscy5qcyNMNDBcbmZ1bmN0aW9uIGlzU3RyaW5nVGFnKHRhZykge1xuICByZXR1cm4gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgJiZcbiAgLy8gOTYgaXMgb25lIGxlc3MgdGhhbiB0aGUgY2hhciBjb2RlXG4gIC8vIGZvciBcImFcIiBzbyB0aGlzIGlzIGNoZWNraW5nIHRoYXRcbiAgLy8gaXQncyBhIGxvd2VyY2FzZSBjaGFyYWN0ZXJcbiAgdGFnLmNoYXJDb2RlQXQoMCkgPiA5Njtcbn1cblxuLy8gVXBkYXRlIC9zeXN0ZW0vc3R5bGVkLyNhcGkgaW4gY2FzZSBpZiB0aGlzIGNoYW5nZXNcbmZ1bmN0aW9uIHNob3VsZEZvcndhcmRQcm9wKHByb3ApIHtcbiAgcmV0dXJuIHByb3AgIT09ICdvd25lclN0YXRlJyAmJiBwcm9wICE9PSAndGhlbWUnICYmIHByb3AgIT09ICdzeCcgJiYgcHJvcCAhPT0gJ2FzJztcbn1cbmNvbnN0IHN5c3RlbURlZmF1bHRUaGVtZSA9IGV4cG9ydHMuc3lzdGVtRGVmYXVsdFRoZW1lID0gKDAsIF9jcmVhdGVUaGVtZS5kZWZhdWx0KSgpO1xuY29uc3QgbG93ZXJjYXNlRmlyc3RMZXR0ZXIgPSBzdHJpbmcgPT4ge1xuICBpZiAoIXN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcbn07XG5mdW5jdGlvbiByZXNvbHZlVGhlbWUoe1xuICBkZWZhdWx0VGhlbWUsXG4gIHRoZW1lLFxuICB0aGVtZUlkXG59KSB7XG4gIHJldHVybiBpc0VtcHR5KHRoZW1lKSA/IGRlZmF1bHRUaGVtZSA6IHRoZW1lW3RoZW1lSWRdIHx8IHRoZW1lO1xufVxuZnVuY3Rpb24gZGVmYXVsdE92ZXJyaWRlc1Jlc29sdmVyKHNsb3QpIHtcbiAgaWYgKCFzbG90KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXNbc2xvdF07XG59XG5mdW5jdGlvbiBwcm9jZXNzU3R5bGVBcmcoY2FsbGFibGVTdHlsZSwgX3JlZikge1xuICBsZXQge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBfcmVmLFxuICAgIHByb3BzID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShfcmVmLCBfZXhjbHVkZWQpO1xuICBjb25zdCByZXNvbHZlZFN0eWxlc0FyZyA9IHR5cGVvZiBjYWxsYWJsZVN0eWxlID09PSAnZnVuY3Rpb24nID8gY2FsbGFibGVTdHlsZSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICBvd25lclN0YXRlXG4gIH0sIHByb3BzKSkgOiBjYWxsYWJsZVN0eWxlO1xuICBpZiAoQXJyYXkuaXNBcnJheShyZXNvbHZlZFN0eWxlc0FyZykpIHtcbiAgICByZXR1cm4gcmVzb2x2ZWRTdHlsZXNBcmcuZmxhdE1hcChyZXNvbHZlZFN0eWxlID0+IHByb2Nlc3NTdHlsZUFyZyhyZXNvbHZlZFN0eWxlLCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9LCBwcm9wcykpKTtcbiAgfVxuICBpZiAoISFyZXNvbHZlZFN0eWxlc0FyZyAmJiB0eXBlb2YgcmVzb2x2ZWRTdHlsZXNBcmcgPT09ICdvYmplY3QnICYmIEFycmF5LmlzQXJyYXkocmVzb2x2ZWRTdHlsZXNBcmcudmFyaWFudHMpKSB7XG4gICAgY29uc3Qge1xuICAgICAgICB2YXJpYW50cyA9IFtdXG4gICAgICB9ID0gcmVzb2x2ZWRTdHlsZXNBcmcsXG4gICAgICBvdGhlclN0eWxlcyA9ICgwLCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIuZGVmYXVsdCkocmVzb2x2ZWRTdHlsZXNBcmcsIF9leGNsdWRlZDIpO1xuICAgIGxldCByZXN1bHQgPSBvdGhlclN0eWxlcztcbiAgICB2YXJpYW50cy5mb3JFYWNoKHZhcmlhbnQgPT4ge1xuICAgICAgbGV0IGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgaWYgKHR5cGVvZiB2YXJpYW50LnByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlzTWF0Y2ggPSB2YXJpYW50LnByb3BzKCgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgICAgICAgIG93bmVyU3RhdGVcbiAgICAgICAgfSwgcHJvcHMsIG93bmVyU3RhdGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHZhcmlhbnQucHJvcHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBpZiAoKG93bmVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG93bmVyU3RhdGVba2V5XSkgIT09IHZhcmlhbnQucHJvcHNba2V5XSAmJiBwcm9wc1trZXldICE9PSB2YXJpYW50LnByb3BzW2tleV0pIHtcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgICByZXN1bHQgPSBbcmVzdWx0XTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaCh0eXBlb2YgdmFyaWFudC5zdHlsZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhcmlhbnQuc3R5bGUoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7XG4gICAgICAgICAgb3duZXJTdGF0ZVxuICAgICAgICB9LCBwcm9wcywgb3duZXJTdGF0ZSkpIDogdmFyaWFudC5zdHlsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICByZXR1cm4gcmVzb2x2ZWRTdHlsZXNBcmc7XG59XG5mdW5jdGlvbiBjcmVhdGVTdHlsZWQoaW5wdXQgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGhlbWVJZCxcbiAgICBkZWZhdWx0VGhlbWUgPSBzeXN0ZW1EZWZhdWx0VGhlbWUsXG4gICAgcm9vdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3AsXG4gICAgc2xvdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3BcbiAgfSA9IGlucHV0O1xuICBjb25zdCBzeXN0ZW1TeCA9IHByb3BzID0+IHtcbiAgICByZXR1cm4gKDAsIF9zdHlsZUZ1bmN0aW9uU3guZGVmYXVsdCkoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgIHRoZW1lOiByZXNvbHZlVGhlbWUoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgICAgZGVmYXVsdFRoZW1lLFxuICAgICAgICB0aGVtZUlkXG4gICAgICB9KSlcbiAgICB9KSk7XG4gIH07XG4gIHN5c3RlbVN4Ll9fbXVpX3N5c3RlbVN4ID0gdHJ1ZTtcbiAgcmV0dXJuICh0YWcsIGlucHV0T3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgLy8gRmlsdGVyIG91dCB0aGUgYHN4YCBzdHlsZSBmdW5jdGlvbiBmcm9tIHRoZSBwcmV2aW91cyBzdHlsZWQgY29tcG9uZW50IHRvIHByZXZlbnQgdW5uZWNlc3Nhcnkgc3R5bGVzIGdlbmVyYXRlZCBieSB0aGUgY29tcG9zaXRlIGNvbXBvbmVudHMuXG4gICAgKDAsIF9zdHlsZWRFbmdpbmUuaW50ZXJuYWxfcHJvY2Vzc1N0eWxlcykodGFnLCBzdHlsZXMgPT4gc3R5bGVzLmZpbHRlcihzdHlsZSA9PiAhKHN0eWxlICE9IG51bGwgJiYgc3R5bGUuX19tdWlfc3lzdGVtU3gpKSk7XG4gICAgY29uc3Qge1xuICAgICAgICBuYW1lOiBjb21wb25lbnROYW1lLFxuICAgICAgICBzbG90OiBjb21wb25lbnRTbG90LFxuICAgICAgICBza2lwVmFyaWFudHNSZXNvbHZlcjogaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlcixcbiAgICAgICAgc2tpcFN4OiBpbnB1dFNraXBTeCxcbiAgICAgICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBsb3dlcmNhc2VGaXJzdExldHRlcigpYCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgICAgICBvdmVycmlkZXNSZXNvbHZlciA9IGRlZmF1bHRPdmVycmlkZXNSZXNvbHZlcihsb3dlcmNhc2VGaXJzdExldHRlcihjb21wb25lbnRTbG90KSlcbiAgICAgIH0gPSBpbnB1dE9wdGlvbnMsXG4gICAgICBvcHRpb25zID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShpbnB1dE9wdGlvbnMsIF9leGNsdWRlZDMpO1xuXG4gICAgLy8gaWYgc2tpcFZhcmlhbnRzUmVzb2x2ZXIgb3B0aW9uIGlzIGRlZmluZWQsIHRha2UgdGhlIHZhbHVlLCBvdGhlcndpc2UsIHRydWUgZm9yIHJvb3QgYW5kIGZhbHNlIGZvciBvdGhlciBzbG90cy5cbiAgICBjb25zdCBza2lwVmFyaWFudHNSZXNvbHZlciA9IGlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIgIT09IHVuZGVmaW5lZCA/IGlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIgOlxuICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgUm9vdGAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgIGNvbXBvbmVudFNsb3QgJiYgY29tcG9uZW50U2xvdCAhPT0gJ1Jvb3QnICYmIGNvbXBvbmVudFNsb3QgIT09ICdyb290JyB8fCBmYWxzZTtcbiAgICBjb25zdCBza2lwU3ggPSBpbnB1dFNraXBTeCB8fCBmYWxzZTtcbiAgICBsZXQgbGFiZWw7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgbG93ZXJjYXNlRmlyc3RMZXR0ZXIoKWAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgICAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICAgICAgbGFiZWwgPSBgJHtjb21wb25lbnROYW1lfS0ke2xvd2VyY2FzZUZpcnN0TGV0dGVyKGNvbXBvbmVudFNsb3QgfHwgJ1Jvb3QnKX1gO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSBzaG91bGRGb3J3YXJkUHJvcDtcblxuICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgUm9vdGAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgIGlmIChjb21wb25lbnRTbG90ID09PSAnUm9vdCcgfHwgY29tcG9uZW50U2xvdCA9PT0gJ3Jvb3QnKSB7XG4gICAgICBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHJvb3RTaG91bGRGb3J3YXJkUHJvcDtcbiAgICB9IGVsc2UgaWYgKGNvbXBvbmVudFNsb3QpIHtcbiAgICAgIC8vIGFueSBvdGhlciBzbG90IHNwZWNpZmllZFxuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSBzbG90U2hvdWxkRm9yd2FyZFByb3A7XG4gICAgfSBlbHNlIGlmIChpc1N0cmluZ1RhZyh0YWcpKSB7XG4gICAgICAvLyBmb3Igc3RyaW5nIChodG1sKSB0YWcsIHByZXNlcnZlIHRoZSBiZWhhdmlvciBpbiBlbW90aW9uICYgc3R5bGVkLWNvbXBvbmVudHMuXG4gICAgICBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZGVmYXVsdFN0eWxlZFJlc29sdmVyID0gKDAsIF9zdHlsZWRFbmdpbmUuZGVmYXVsdCkodGFnLCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wOiBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbixcbiAgICAgIGxhYmVsXG4gICAgfSwgb3B0aW9ucykpO1xuICAgIGNvbnN0IHRyYW5zZm9ybVN0eWxlQXJnID0gc3R5bGVzQXJnID0+IHtcbiAgICAgIC8vIE9uIHRoZSBzZXJ2ZXIgRW1vdGlvbiBkb2Vzbid0IHVzZSBSZWFjdC5mb3J3YXJkUmVmIGZvciBjcmVhdGluZyBjb21wb25lbnRzLCBzbyB0aGUgY3JlYXRlZFxuICAgICAgLy8gY29tcG9uZW50IHN0YXlzIGFzIGEgZnVuY3Rpb24uIFRoaXMgY29uZGl0aW9uIG1ha2VzIHN1cmUgdGhhdCB3ZSBkbyBub3QgaW50ZXJwb2xhdGUgZnVuY3Rpb25zXG4gICAgICAvLyB3aGljaCBhcmUgYmFzaWNhbGx5IGNvbXBvbmVudHMgdXNlZCBhcyBhIHNlbGVjdG9ycy5cbiAgICAgIGlmICh0eXBlb2Ygc3R5bGVzQXJnID09PSAnZnVuY3Rpb24nICYmIHN0eWxlc0FyZy5fX2Vtb3Rpb25fcmVhbCAhPT0gc3R5bGVzQXJnIHx8ICgwLCBfZGVlcG1lcmdlLmlzUGxhaW5PYmplY3QpKHN0eWxlc0FyZykpIHtcbiAgICAgICAgcmV0dXJuIHByb3BzID0+IHByb2Nlc3NTdHlsZUFyZyhzdHlsZXNBcmcsICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHByb3BzLCB7XG4gICAgICAgICAgdGhlbWU6IHJlc29sdmVUaGVtZSh7XG4gICAgICAgICAgICB0aGVtZTogcHJvcHMudGhlbWUsXG4gICAgICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgICAgICB0aGVtZUlkXG4gICAgICAgICAgfSlcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlc0FyZztcbiAgICB9O1xuICAgIGNvbnN0IG11aVN0eWxlZFJlc29sdmVyID0gKHN0eWxlQXJnLCAuLi5leHByZXNzaW9ucykgPT4ge1xuICAgICAgbGV0IHRyYW5zZm9ybWVkU3R5bGVBcmcgPSB0cmFuc2Zvcm1TdHlsZUFyZyhzdHlsZUFyZyk7XG4gICAgICBjb25zdCBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUgPSBleHByZXNzaW9ucyA/IGV4cHJlc3Npb25zLm1hcCh0cmFuc2Zvcm1TdHlsZUFyZykgOiBbXTtcbiAgICAgIGlmIChjb21wb25lbnROYW1lICYmIG92ZXJyaWRlc1Jlc29sdmVyKSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHByb3BzID0+IHtcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IHJlc29sdmVUaGVtZSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgZGVmYXVsdFRoZW1lLFxuICAgICAgICAgICAgdGhlbWVJZFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBpZiAoIXRoZW1lLmNvbXBvbmVudHMgfHwgIXRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0gfHwgIXRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0uc3R5bGVPdmVycmlkZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzdHlsZU92ZXJyaWRlcyA9IHRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0uc3R5bGVPdmVycmlkZXM7XG4gICAgICAgICAgY29uc3QgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyA9IHt9O1xuICAgICAgICAgIC8vIFRPRE86IHY3IHJlbW92ZSBpdGVyYXRpb24gYW5kIHVzZSBgcmVzb2x2ZVN0eWxlQXJnKHN0eWxlT3ZlcnJpZGVzW3Nsb3RdKWAgZGlyZWN0bHlcbiAgICAgICAgICBPYmplY3QuZW50cmllcyhzdHlsZU92ZXJyaWRlcykuZm9yRWFjaCgoW3Nsb3RLZXksIHNsb3RTdHlsZV0pID0+IHtcbiAgICAgICAgICAgIHJlc29sdmVkU3R5bGVPdmVycmlkZXNbc2xvdEtleV0gPSBwcm9jZXNzU3R5bGVBcmcoc2xvdFN0eWxlLCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBvdmVycmlkZXNSZXNvbHZlcihwcm9wcywgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGNvbXBvbmVudE5hbWUgJiYgIXNraXBWYXJpYW50c1Jlc29sdmVyKSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHByb3BzID0+IHtcbiAgICAgICAgICB2YXIgX3RoZW1lJGNvbXBvbmVudHM7XG4gICAgICAgICAgY29uc3QgdGhlbWUgPSByZXNvbHZlVGhlbWUoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgY29uc3QgdGhlbWVWYXJpYW50cyA9IHRoZW1lID09IG51bGwgfHwgKF90aGVtZSRjb21wb25lbnRzID0gdGhlbWUuY29tcG9uZW50cykgPT0gbnVsbCB8fCAoX3RoZW1lJGNvbXBvbmVudHMgPSBfdGhlbWUkY29tcG9uZW50c1tjb21wb25lbnROYW1lXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSRjb21wb25lbnRzLnZhcmlhbnRzO1xuICAgICAgICAgIHJldHVybiBwcm9jZXNzU3R5bGVBcmcoe1xuICAgICAgICAgICAgdmFyaWFudHM6IHRoZW1lVmFyaWFudHNcbiAgICAgICAgICB9LCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFza2lwU3gpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2goc3lzdGVtU3gpO1xuICAgICAgfVxuICAgICAgY29uc3QgbnVtT2ZDdXN0b21GbnNBcHBsaWVkID0gZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLmxlbmd0aCAtIGV4cHJlc3Npb25zLmxlbmd0aDtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHN0eWxlQXJnKSAmJiBudW1PZkN1c3RvbUZuc0FwcGxpZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVycyA9IG5ldyBBcnJheShudW1PZkN1c3RvbUZuc0FwcGxpZWQpLmZpbGwoJycpO1xuICAgICAgICAvLyBJZiB0aGUgdHlwZSBpcyBhcnJheSwgdGhhbiB3ZSBuZWVkIHRvIGFkZCBwbGFjZWhvbGRlcnMgaW4gdGhlIHRlbXBsYXRlIGZvciB0aGUgb3ZlcnJpZGVzLCB2YXJpYW50cyBhbmQgdGhlIHN4IHN0eWxlcy5cbiAgICAgICAgdHJhbnNmb3JtZWRTdHlsZUFyZyA9IFsuLi5zdHlsZUFyZywgLi4ucGxhY2Vob2xkZXJzXTtcbiAgICAgICAgdHJhbnNmb3JtZWRTdHlsZUFyZy5yYXcgPSBbLi4uc3R5bGVBcmcucmF3LCAuLi5wbGFjZWhvbGRlcnNdO1xuICAgICAgfVxuICAgICAgY29uc3QgQ29tcG9uZW50ID0gZGVmYXVsdFN0eWxlZFJlc29sdmVyKHRyYW5zZm9ybWVkU3R5bGVBcmcsIC4uLmV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZSk7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBsZXQgZGlzcGxheU5hbWU7XG4gICAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgICAgZGlzcGxheU5hbWUgPSBgJHtjb21wb25lbnROYW1lfSR7KDAsIF9jYXBpdGFsaXplLmRlZmF1bHQpKGNvbXBvbmVudFNsb3QgfHwgJycpfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpc3BsYXlOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IGBTdHlsZWQoJHsoMCwgX2dldERpc3BsYXlOYW1lLmRlZmF1bHQpKHRhZyl9KWA7XG4gICAgICAgIH1cbiAgICAgICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICB9XG4gICAgICBpZiAodGFnLm11aU5hbWUpIHtcbiAgICAgICAgQ29tcG9uZW50Lm11aU5hbWUgPSB0YWcubXVpTmFtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBDb21wb25lbnQ7XG4gICAgfTtcbiAgICBpZiAoZGVmYXVsdFN0eWxlZFJlc29sdmVyLndpdGhDb25maWcpIHtcbiAgICAgIG11aVN0eWxlZFJlc29sdmVyLndpdGhDb25maWcgPSBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZztcbiAgICB9XG4gICAgcmV0dXJuIG11aVN0eWxlZFJlc29sdmVyO1xuICB9O1xufSIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJkaXNhYmxlR3V0dGVyc1wiLCBcImZpeGVkXCIsIFwibWF4V2lkdGhcIiwgXCJjbGFzc2VzXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnQG11aS91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB1c2VUaGVtZVByb3BzU3lzdGVtIGZyb20gJy4uL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHN5c3RlbVN0eWxlZCBmcm9tICcuLi9zdHlsZWQnO1xuaW1wb3J0IGNyZWF0ZVRoZW1lIGZyb20gJy4uL2NyZWF0ZVRoZW1lJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBkZWZhdWx0VGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuY29uc3QgZGVmYXVsdENyZWF0ZVN0eWxlZENvbXBvbmVudCA9IHN5c3RlbVN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpQ29udGFpbmVyJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIHN0eWxlc1tgbWF4V2lkdGgke2NhcGl0YWxpemUoU3RyaW5nKG93bmVyU3RhdGUubWF4V2lkdGgpKX1gXSwgb3duZXJTdGF0ZS5maXhlZCAmJiBzdHlsZXMuZml4ZWQsIG93bmVyU3RhdGUuZGlzYWJsZUd1dHRlcnMgJiYgc3R5bGVzLmRpc2FibGVHdXR0ZXJzXTtcbiAgfVxufSk7XG5jb25zdCB1c2VUaGVtZVByb3BzRGVmYXVsdCA9IGluUHJvcHMgPT4gdXNlVGhlbWVQcm9wc1N5c3RlbSh7XG4gIHByb3BzOiBpblByb3BzLFxuICBuYW1lOiAnTXVpQ29udGFpbmVyJyxcbiAgZGVmYXVsdFRoZW1lXG59KTtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gKG93bmVyU3RhdGUsIGNvbXBvbmVudE5hbWUpID0+IHtcbiAgY29uc3QgZ2V0Q29udGFpbmVyVXRpbGl0eUNsYXNzID0gc2xvdCA9PiB7XG4gICAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKGNvbXBvbmVudE5hbWUsIHNsb3QpO1xuICB9O1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBmaXhlZCxcbiAgICBkaXNhYmxlR3V0dGVycyxcbiAgICBtYXhXaWR0aFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgbWF4V2lkdGggJiYgYG1heFdpZHRoJHtjYXBpdGFsaXplKFN0cmluZyhtYXhXaWR0aCkpfWAsIGZpeGVkICYmICdmaXhlZCcsIGRpc2FibGVHdXR0ZXJzICYmICdkaXNhYmxlR3V0dGVycyddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Q29udGFpbmVyVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVDb250YWluZXIob3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgYWRkaW5nIGN1c3RvbSBzdHlsZWQgZm4gKGZvciBleGFtcGxlIGZvciBjdXN0b20gc3ggc3R5bGUgZnVuY3Rpb24pXG4gICAgY3JlYXRlU3R5bGVkQ29tcG9uZW50ID0gZGVmYXVsdENyZWF0ZVN0eWxlZENvbXBvbmVudCxcbiAgICB1c2VUaGVtZVByb3BzID0gdXNlVGhlbWVQcm9wc0RlZmF1bHQsXG4gICAgY29tcG9uZW50TmFtZSA9ICdNdWlDb250YWluZXInXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBDb250YWluZXJSb290ID0gY3JlYXRlU3R5bGVkQ29tcG9uZW50KCh7XG4gICAgdGhlbWUsXG4gICAgb3duZXJTdGF0ZVxuICB9KSA9PiBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBtYXJnaW5MZWZ0OiAnYXV0bycsXG4gICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgbWFyZ2luUmlnaHQ6ICdhdXRvJyxcbiAgICBkaXNwbGF5OiAnYmxvY2snXG4gIH0sICFvd25lclN0YXRlLmRpc2FibGVHdXR0ZXJzICYmIHtcbiAgICBwYWRkaW5nTGVmdDogdGhlbWUuc3BhY2luZygyKSxcbiAgICBwYWRkaW5nUmlnaHQ6IHRoZW1lLnNwYWNpbmcoMiksXG4gICAgLy8gQHRzLWlnbm9yZSBtb2R1bGUgYXVnbWVudGF0aW9uIGZhaWxzIGlmIGN1c3RvbSBicmVha3BvaW50cyBhcmUgdXNlZFxuICAgIFt0aGVtZS5icmVha3BvaW50cy51cCgnc20nKV06IHtcbiAgICAgIHBhZGRpbmdMZWZ0OiB0aGVtZS5zcGFjaW5nKDMpLFxuICAgICAgcGFkZGluZ1JpZ2h0OiB0aGVtZS5zcGFjaW5nKDMpXG4gICAgfVxuICB9KSwgKHtcbiAgICB0aGVtZSxcbiAgICBvd25lclN0YXRlXG4gIH0pID0+IG93bmVyU3RhdGUuZml4ZWQgJiYgT2JqZWN0LmtleXModGhlbWUuYnJlYWtwb2ludHMudmFsdWVzKS5yZWR1Y2UoKGFjYywgYnJlYWtwb2ludFZhbHVlS2V5KSA9PiB7XG4gICAgY29uc3QgYnJlYWtwb2ludCA9IGJyZWFrcG9pbnRWYWx1ZUtleTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlc1ticmVha3BvaW50XTtcbiAgICBpZiAodmFsdWUgIT09IDApIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGFjY1t0aGVtZS5icmVha3BvaW50cy51cChicmVha3BvaW50KV0gPSB7XG4gICAgICAgIG1heFdpZHRoOiBgJHt2YWx1ZX0ke3RoZW1lLmJyZWFrcG9pbnRzLnVuaXR9YFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pLCAoe1xuICAgIHRoZW1lLFxuICAgIG93bmVyU3RhdGVcbiAgfSkgPT4gX2V4dGVuZHMoe30sIG93bmVyU3RhdGUubWF4V2lkdGggPT09ICd4cycgJiYge1xuICAgIC8vIEB0cy1pZ25vcmUgbW9kdWxlIGF1Z21lbnRhdGlvbiBmYWlscyBpZiBjdXN0b20gYnJlYWtwb2ludHMgYXJlIHVzZWRcbiAgICBbdGhlbWUuYnJlYWtwb2ludHMudXAoJ3hzJyldOiB7XG4gICAgICAvLyBAdHMtaWdub3JlIG1vZHVsZSBhdWdtZW50YXRpb24gZmFpbHMgaWYgY3VzdG9tIGJyZWFrcG9pbnRzIGFyZSB1c2VkXG4gICAgICBtYXhXaWR0aDogTWF0aC5tYXgodGhlbWUuYnJlYWtwb2ludHMudmFsdWVzLnhzLCA0NDQpXG4gICAgfVxuICB9LCBvd25lclN0YXRlLm1heFdpZHRoICYmXG4gIC8vIEB0cy1pZ25vcmUgbW9kdWxlIGF1Z21lbnRhdGlvbiBmYWlscyBpZiBjdXN0b20gYnJlYWtwb2ludHMgYXJlIHVzZWRcbiAgb3duZXJTdGF0ZS5tYXhXaWR0aCAhPT0gJ3hzJyAmJiB7XG4gICAgLy8gQHRzLWlnbm9yZSBtb2R1bGUgYXVnbWVudGF0aW9uIGZhaWxzIGlmIGN1c3RvbSBicmVha3BvaW50cyBhcmUgdXNlZFxuICAgIFt0aGVtZS5icmVha3BvaW50cy51cChvd25lclN0YXRlLm1heFdpZHRoKV06IHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgbW9kdWxlIGF1Z21lbnRhdGlvbiBmYWlscyBpZiBjdXN0b20gYnJlYWtwb2ludHMgYXJlIHVzZWRcbiAgICAgIG1heFdpZHRoOiBgJHt0aGVtZS5icmVha3BvaW50cy52YWx1ZXNbb3duZXJTdGF0ZS5tYXhXaWR0aF19JHt0aGVtZS5icmVha3BvaW50cy51bml0fWBcbiAgICB9XG4gIH0pKTtcbiAgY29uc3QgQ29udGFpbmVyID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQ29udGFpbmVyKGluUHJvcHMsIHJlZikge1xuICAgIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyhpblByb3BzKTtcbiAgICBjb25zdCB7XG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgY29tcG9uZW50ID0gJ2RpdicsXG4gICAgICAgIGRpc2FibGVHdXR0ZXJzID0gZmFsc2UsXG4gICAgICAgIGZpeGVkID0gZmFsc2UsXG4gICAgICAgIG1heFdpZHRoID0gJ2xnJ1xuICAgICAgfSA9IHByb3BzLFxuICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICBjb21wb25lbnQsXG4gICAgICBkaXNhYmxlR3V0dGVycyxcbiAgICAgIGZpeGVkLFxuICAgICAgbWF4V2lkdGhcbiAgICB9KTtcblxuICAgIC8vIEB0cy1pZ25vcmUgbW9kdWxlIGF1Z21lbnRhdGlvbiBmYWlscyBpZiBjdXN0b20gYnJlYWtwb2ludHMgYXJlIHVzZWRcbiAgICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSwgY29tcG9uZW50TmFtZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgIC8vIEB0cy1pZ25vcmUgdGhlbWUgaXMgaW5qZWN0ZWQgYnkgdGhlIHN0eWxlZCB1dGlsXG4gICAgICBfanN4KENvbnRhaW5lclJvb3QsIF9leHRlbmRzKHtcbiAgICAgICAgYXM6IGNvbXBvbmVudFxuICAgICAgICAvLyBAdHMtaWdub3JlIG1vZHVsZSBhdWdtZW50YXRpb24gZmFpbHMgaWYgY3VzdG9tIGJyZWFrcG9pbnRzIGFyZSB1c2VkXG4gICAgICAgICxcbiAgICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICAgICAgcmVmOiByZWZcbiAgICAgIH0sIG90aGVyKSlcbiAgICApO1xuICB9KTtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQ29udGFpbmVyLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICBkaXNhYmxlR3V0dGVyczogUHJvcFR5cGVzLmJvb2wsXG4gICAgZml4ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIG1heFdpZHRoOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJywgZmFsc2VdKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAgIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSA6IHZvaWQgMDtcbiAgcmV0dXJuIENvbnRhaW5lcjtcbn0iLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgcmVzb2x2ZVByb3BzIGZyb20gJ0BtdWkvdXRpbHMvcmVzb2x2ZVByb3BzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBQcm9wc0NvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xuZnVuY3Rpb24gRGVmYXVsdFByb3BzUHJvdmlkZXIoe1xuICB2YWx1ZSxcbiAgY2hpbGRyZW5cbn0pIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFByb3BzQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBEZWZhdWx0UHJvcHNQcm92aWRlci5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIFR5cGVTY3JpcHQgdHlwZXMgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLm9iamVjdFxufSA6IHZvaWQgMDtcbmZ1bmN0aW9uIGdldFRoZW1lUHJvcHMocGFyYW1zKSB7XG4gIGNvbnN0IHtcbiAgICB0aGVtZSxcbiAgICBuYW1lLFxuICAgIHByb3BzXG4gIH0gPSBwYXJhbXM7XG4gIGlmICghdGhlbWUgfHwgIXRoZW1lLmNvbXBvbmVudHMgfHwgIXRoZW1lLmNvbXBvbmVudHNbbmFtZV0pIHtcbiAgICByZXR1cm4gcHJvcHM7XG4gIH1cbiAgY29uc3QgY29uZmlnID0gdGhlbWUuY29tcG9uZW50c1tuYW1lXTtcbiAgaWYgKGNvbmZpZy5kZWZhdWx0UHJvcHMpIHtcbiAgICAvLyBjb21wYXRpYmxlIHdpdGggdjUgc2lnbmF0dXJlXG4gICAgcmV0dXJuIHJlc29sdmVQcm9wcyhjb25maWcuZGVmYXVsdFByb3BzLCBwcm9wcyk7XG4gIH1cbiAgaWYgKCFjb25maWcuc3R5bGVPdmVycmlkZXMgJiYgIWNvbmZpZy52YXJpYW50cykge1xuICAgIC8vIHY2IHNpZ25hdHVyZSwgbm8gcHJvcGVydHkgJ2RlZmF1bHRQcm9wcydcbiAgICByZXR1cm4gcmVzb2x2ZVByb3BzKGNvbmZpZywgcHJvcHMpO1xuICB9XG4gIHJldHVybiBwcm9wcztcbn1cbmV4cG9ydCBmdW5jdGlvbiB1c2VEZWZhdWx0UHJvcHMoe1xuICBwcm9wcyxcbiAgbmFtZVxufSkge1xuICBjb25zdCBjdHggPSBSZWFjdC51c2VDb250ZXh0KFByb3BzQ29udGV4dCk7XG4gIHJldHVybiBnZXRUaGVtZVByb3BzKHtcbiAgICBwcm9wcyxcbiAgICBuYW1lLFxuICAgIHRoZW1lOiB7XG4gICAgICBjb21wb25lbnRzOiBjdHhcbiAgICB9XG4gIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgRGVmYXVsdFByb3BzUHJvdmlkZXI7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgR2xvYmFsU3R5bGVzIGFzIE11aUdsb2JhbFN0eWxlcyB9IGZyb20gJ0BtdWkvc3R5bGVkLWVuZ2luZSc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vdXNlVGhlbWUnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIEdsb2JhbFN0eWxlcyh7XG4gIHN0eWxlcyxcbiAgdGhlbWVJZCxcbiAgZGVmYXVsdFRoZW1lID0ge31cbn0pIHtcbiAgY29uc3QgdXBwZXJUaGVtZSA9IHVzZVRoZW1lKGRlZmF1bHRUaGVtZSk7XG4gIGNvbnN0IGdsb2JhbFN0eWxlcyA9IHR5cGVvZiBzdHlsZXMgPT09ICdmdW5jdGlvbicgPyBzdHlsZXModGhlbWVJZCA/IHVwcGVyVGhlbWVbdGhlbWVJZF0gfHwgdXBwZXJUaGVtZSA6IHVwcGVyVGhlbWUpIDogc3R5bGVzO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTXVpR2xvYmFsU3R5bGVzLCB7XG4gICAgc3R5bGVzOiBnbG9iYWxTdHlsZXNcbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBHbG9iYWxTdHlsZXMucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBUeXBlU2NyaXB0IHR5cGVzIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4g4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZGVmYXVsdFRoZW1lOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGVzOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5ib29sXSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0aGVtZUlkOiBQcm9wVHlwZXMuc3RyaW5nXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgR2xvYmFsU3R5bGVzOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJ2YWx1ZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgUnRsQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KCk7XG5mdW5jdGlvbiBSdGxQcm92aWRlcihfcmVmKSB7XG4gIGxldCB7XG4gICAgICB2YWx1ZVxuICAgIH0gPSBfcmVmLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFJ0bENvbnRleHQuUHJvdmlkZXIsIF9leHRlbmRzKHtcbiAgICB2YWx1ZTogdmFsdWUgIT0gbnVsbCA/IHZhbHVlIDogdHJ1ZVxuICB9LCBwcm9wcykpO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUnRsUHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIHZhbHVlOiBQcm9wVHlwZXMuYm9vbFxufSA6IHZvaWQgMDtcbmV4cG9ydCBjb25zdCB1c2VSdGwgPSAoKSA9PiB7XG4gIGNvbnN0IHZhbHVlID0gUmVhY3QudXNlQ29udGV4dChSdGxDb250ZXh0KTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgPyB2YWx1ZSA6IGZhbHNlO1xufTtcbmV4cG9ydCBkZWZhdWx0IFJ0bFByb3ZpZGVyOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjb21wb25lbnRcIiwgXCJkaXJlY3Rpb25cIiwgXCJzcGFjaW5nXCIsIFwiZGl2aWRlclwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwidXNlRmxleEdhcFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN5c3RlbVN0eWxlZCBmcm9tICcuLi9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHNTeXN0ZW0gZnJvbSAnLi4vdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgeyBleHRlbmRTeFByb3AgfSBmcm9tICcuLi9zdHlsZUZ1bmN0aW9uU3gnO1xuaW1wb3J0IGNyZWF0ZVRoZW1lIGZyb20gJy4uL2NyZWF0ZVRoZW1lJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzLCBtZXJnZUJyZWFrcG9pbnRzSW5PcmRlciwgcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMgfSBmcm9tICcuLi9icmVha3BvaW50cyc7XG5pbXBvcnQgeyBjcmVhdGVVbmFyeVNwYWNpbmcsIGdldFZhbHVlIH0gZnJvbSAnLi4vc3BhY2luZyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgZGVmYXVsdFRoZW1lID0gY3JlYXRlVGhlbWUoKTtcbi8vIHdpZGVuaW5nIFRoZW1lIHRvIGFueSBzbyB0aGF0IHRoZSBjb25zdW1lciBjYW4gb3duIHRoZSB0aGVtZSBzdHJ1Y3R1cmUuXG5jb25zdCBkZWZhdWx0Q3JlYXRlU3R5bGVkQ29tcG9uZW50ID0gc3lzdGVtU3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlTdGFjaycsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSk7XG5mdW5jdGlvbiB1c2VUaGVtZVByb3BzRGVmYXVsdChwcm9wcykge1xuICByZXR1cm4gdXNlVGhlbWVQcm9wc1N5c3RlbSh7XG4gICAgcHJvcHMsXG4gICAgbmFtZTogJ011aVN0YWNrJyxcbiAgICBkZWZhdWx0VGhlbWVcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJuIGFuIGFycmF5IHdpdGggdGhlIHNlcGFyYXRvciBSZWFjdCBlbGVtZW50IGludGVyc3BlcnNlZCBiZXR3ZWVuXG4gKiBlYWNoIFJlYWN0IG5vZGUgb2YgdGhlIGlucHV0IGNoaWxkcmVuLlxuICpcbiAqID4gam9pbkNoaWxkcmVuKFsxLDIsM10sIDApXG4gKiBbMSwwLDIsMCwzXVxuICovXG5mdW5jdGlvbiBqb2luQ2hpbGRyZW4oY2hpbGRyZW4sIHNlcGFyYXRvcikge1xuICBjb25zdCBjaGlsZHJlbkFycmF5ID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbikuZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gY2hpbGRyZW5BcnJheS5yZWR1Y2UoKG91dHB1dCwgY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgb3V0cHV0LnB1c2goY2hpbGQpO1xuICAgIGlmIChpbmRleCA8IGNoaWxkcmVuQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgb3V0cHV0LnB1c2goIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoc2VwYXJhdG9yLCB7XG4gICAgICAgIGtleTogYHNlcGFyYXRvci0ke2luZGV4fWBcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfSwgW10pO1xufVxuY29uc3QgZ2V0U2lkZUZyb21EaXJlY3Rpb24gPSBkaXJlY3Rpb24gPT4ge1xuICByZXR1cm4ge1xuICAgIHJvdzogJ0xlZnQnLFxuICAgICdyb3ctcmV2ZXJzZSc6ICdSaWdodCcsXG4gICAgY29sdW1uOiAnVG9wJyxcbiAgICAnY29sdW1uLXJldmVyc2UnOiAnQm90dG9tJ1xuICB9W2RpcmVjdGlvbl07XG59O1xuZXhwb3J0IGNvbnN0IHN0eWxlID0gKHtcbiAgb3duZXJTdGF0ZSxcbiAgdGhlbWVcbn0pID0+IHtcbiAgbGV0IHN0eWxlcyA9IF9leHRlbmRzKHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbidcbiAgfSwgaGFuZGxlQnJlYWtwb2ludHMoe1xuICAgIHRoZW1lXG4gIH0sIHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgICB2YWx1ZXM6IG93bmVyU3RhdGUuZGlyZWN0aW9uLFxuICAgIGJyZWFrcG9pbnRzOiB0aGVtZS5icmVha3BvaW50cy52YWx1ZXNcbiAgfSksIHByb3BWYWx1ZSA9PiAoe1xuICAgIGZsZXhEaXJlY3Rpb246IHByb3BWYWx1ZVxuICB9KSkpO1xuICBpZiAob3duZXJTdGF0ZS5zcGFjaW5nKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVNwYWNpbmcodGhlbWUpO1xuICAgIGNvbnN0IGJhc2UgPSBPYmplY3Qua2V5cyh0aGVtZS5icmVha3BvaW50cy52YWx1ZXMpLnJlZHVjZSgoYWNjLCBicmVha3BvaW50KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG93bmVyU3RhdGUuc3BhY2luZyA9PT0gJ29iamVjdCcgJiYgb3duZXJTdGF0ZS5zcGFjaW5nW2JyZWFrcG9pbnRdICE9IG51bGwgfHwgdHlwZW9mIG93bmVyU3RhdGUuZGlyZWN0aW9uID09PSAnb2JqZWN0JyAmJiBvd25lclN0YXRlLmRpcmVjdGlvblticmVha3BvaW50XSAhPSBudWxsKSB7XG4gICAgICAgIGFjY1ticmVha3BvaW50XSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgICBjb25zdCBkaXJlY3Rpb25WYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgICB2YWx1ZXM6IG93bmVyU3RhdGUuZGlyZWN0aW9uLFxuICAgICAgYmFzZVxuICAgIH0pO1xuICAgIGNvbnN0IHNwYWNpbmdWYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgICB2YWx1ZXM6IG93bmVyU3RhdGUuc3BhY2luZyxcbiAgICAgIGJhc2VcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIGRpcmVjdGlvblZhbHVlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIE9iamVjdC5rZXlzKGRpcmVjdGlvblZhbHVlcykuZm9yRWFjaCgoYnJlYWtwb2ludCwgaW5kZXgsIGJyZWFrcG9pbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvblZhbHVlID0gZGlyZWN0aW9uVmFsdWVzW2JyZWFrcG9pbnRdO1xuICAgICAgICBpZiAoIWRpcmVjdGlvblZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgcHJldmlvdXNEaXJlY3Rpb25WYWx1ZSA9IGluZGV4ID4gMCA/IGRpcmVjdGlvblZhbHVlc1ticmVha3BvaW50c1tpbmRleCAtIDFdXSA6ICdjb2x1bW4nO1xuICAgICAgICAgIGRpcmVjdGlvblZhbHVlc1ticmVha3BvaW50XSA9IHByZXZpb3VzRGlyZWN0aW9uVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSAocHJvcFZhbHVlLCBicmVha3BvaW50KSA9PiB7XG4gICAgICBpZiAob3duZXJTdGF0ZS51c2VGbGV4R2FwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZ2FwOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLy8gVGhlIHVzZUZsZXhHYXA9e2ZhbHNlfSBpbXBsZW1lbnQgcmVsaWVzIG9uIGVhY2ggY2hpbGQgdG8gZ2l2ZSB1cCBjb250cm9sIG9mIHRoZSBtYXJnaW4uXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gcmVzZXQgdGhlIG1hcmdpbiB0byBhdm9pZCBkb3VibGUgc3BhY2luZy5cbiAgICAgICAgJyYgPiA6bm90KHN0eWxlKTpub3Qoc3R5bGUpJzoge1xuICAgICAgICAgIG1hcmdpbjogMFxuICAgICAgICB9LFxuICAgICAgICAnJiA+IDpub3Qoc3R5bGUpIH4gOm5vdChzdHlsZSknOiB7XG4gICAgICAgICAgW2BtYXJnaW4ke2dldFNpZGVGcm9tRGlyZWN0aW9uKGJyZWFrcG9pbnQgPyBkaXJlY3Rpb25WYWx1ZXNbYnJlYWtwb2ludF0gOiBvd25lclN0YXRlLmRpcmVjdGlvbil9YF06IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBzdHlsZXMgPSBkZWVwbWVyZ2Uoc3R5bGVzLCBoYW5kbGVCcmVha3BvaW50cyh7XG4gICAgICB0aGVtZVxuICAgIH0sIHNwYWNpbmdWYWx1ZXMsIHN0eWxlRnJvbVByb3BWYWx1ZSkpO1xuICB9XG4gIHN0eWxlcyA9IG1lcmdlQnJlYWtwb2ludHNJbk9yZGVyKHRoZW1lLmJyZWFrcG9pbnRzLCBzdHlsZXMpO1xuICByZXR1cm4gc3R5bGVzO1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVN0YWNrKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgLy8gVGhpcyB3aWxsIGFsbG93IGFkZGluZyBjdXN0b20gc3R5bGVkIGZuIChmb3IgZXhhbXBsZSBmb3IgY3VzdG9tIHN4IHN0eWxlIGZ1bmN0aW9uKVxuICAgIGNyZWF0ZVN0eWxlZENvbXBvbmVudCA9IGRlZmF1bHRDcmVhdGVTdHlsZWRDb21wb25lbnQsXG4gICAgdXNlVGhlbWVQcm9wcyA9IHVzZVRoZW1lUHJvcHNEZWZhdWx0LFxuICAgIGNvbXBvbmVudE5hbWUgPSAnTXVpU3RhY2snXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9ICgpID0+IHtcbiAgICBjb25zdCBzbG90cyA9IHtcbiAgICAgIHJvb3Q6IFsncm9vdCddXG4gICAgfTtcbiAgICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIHNsb3QgPT4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoY29tcG9uZW50TmFtZSwgc2xvdCksIHt9KTtcbiAgfTtcbiAgY29uc3QgU3RhY2tSb290ID0gY3JlYXRlU3R5bGVkQ29tcG9uZW50KHN0eWxlKTtcbiAgY29uc3QgU3RhY2sgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBHcmlkKGluUHJvcHMsIHJlZikge1xuICAgIGNvbnN0IHRoZW1lUHJvcHMgPSB1c2VUaGVtZVByb3BzKGluUHJvcHMpO1xuICAgIGNvbnN0IHByb3BzID0gZXh0ZW5kU3hQcm9wKHRoZW1lUHJvcHMpOyAvLyBgY29sb3JgIHR5cGUgY29uZmxpY3RzIHdpdGggaHRtbCBjb2xvciBhdHRyaWJ1dGUuXG4gICAgY29uc3Qge1xuICAgICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgICAgZGlyZWN0aW9uID0gJ2NvbHVtbicsXG4gICAgICAgIHNwYWNpbmcgPSAwLFxuICAgICAgICBkaXZpZGVyLFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICB1c2VGbGV4R2FwID0gZmFsc2VcbiAgICAgIH0gPSBwcm9wcyxcbiAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gICAgY29uc3Qgb3duZXJTdGF0ZSA9IHtcbiAgICAgIGRpcmVjdGlvbixcbiAgICAgIHNwYWNpbmcsXG4gICAgICB1c2VGbGV4R2FwXG4gICAgfTtcbiAgICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMoKTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3RhY2tSb290LCBfZXh0ZW5kcyh7XG4gICAgICBhczogY29tcG9uZW50LFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIHJlZjogcmVmLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICAgIH0sIG90aGVyLCB7XG4gICAgICBjaGlsZHJlbjogZGl2aWRlciA/IGpvaW5DaGlsZHJlbihjaGlsZHJlbiwgZGl2aWRlcikgOiBjaGlsZHJlblxuICAgIH0pKTtcbiAgfSk7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFN0YWNrLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgICBkaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSksIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSkpLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgZGl2aWRlcjogUHJvcFR5cGVzLm5vZGUsXG4gICAgc3BhY2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAgIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSA6IHZvaWQgMDtcbiAgcmV0dXJuIFN0YWNrO1xufSIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmNvbnN0IFRoZW1lQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgVGhlbWVDb250ZXh0LmRpc3BsYXlOYW1lID0gJ1RoZW1lQ29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBUaGVtZUNvbnRleHQ7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRoZW1lQ29udGV4dCBmcm9tICcuL1RoZW1lQ29udGV4dCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUaGVtZSgpIHtcbiAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRGVidWdWYWx1ZSh0aGVtZSk7XG4gIH1cbiAgcmV0dXJuIHRoZW1lO1xufSIsImNvbnN0IGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcbmV4cG9ydCBkZWZhdWx0IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ211aS5uZXN0ZWQnKSA6ICdfX1RIRU1FX05FU1RFRF9fJzsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBleGFjdFByb3AgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBUaGVtZUNvbnRleHQgZnJvbSAnLi4vdXNlVGhlbWUvVGhlbWVDb250ZXh0JztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi91c2VUaGVtZSc7XG5pbXBvcnQgbmVzdGVkIGZyb20gJy4vbmVzdGVkJztcblxuLy8gVG8gc3VwcG9ydCBjb21wb3NpdGlvbiBvZiB0aGVtZS5cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBtZXJnZU91dGVyTG9jYWxUaGVtZShvdXRlclRoZW1lLCBsb2NhbFRoZW1lKSB7XG4gIGlmICh0eXBlb2YgbG9jYWxUaGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IG1lcmdlZFRoZW1lID0gbG9jYWxUaGVtZShvdXRlclRoZW1lKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCFtZXJnZWRUaGVtZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBZb3Ugc2hvdWxkIHJldHVybiBhbiBvYmplY3QgZnJvbSB5b3VyIHRoZW1lIGZ1bmN0aW9uLCBpLmUuJywgJzxUaGVtZVByb3ZpZGVyIHRoZW1lPXsoKSA9PiAoe30pfSAvPiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlZFRoZW1lO1xuICB9XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3V0ZXJUaGVtZSwgbG9jYWxUaGVtZSk7XG59XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgdGFrZXMgYSBgdGhlbWVgIHByb3AuXG4gKiBJdCBtYWtlcyB0aGUgYHRoZW1lYCBhdmFpbGFibGUgZG93biB0aGUgUmVhY3QgdHJlZSB0aGFua3MgdG8gUmVhY3QgY29udGV4dC5cbiAqIFRoaXMgY29tcG9uZW50IHNob3VsZCBwcmVmZXJhYmx5IGJlIHVzZWQgYXQgKip0aGUgcm9vdCBvZiB5b3VyIGNvbXBvbmVudCB0cmVlKiouXG4gKi9cbmZ1bmN0aW9uIFRoZW1lUHJvdmlkZXIocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIHRoZW1lOiBsb2NhbFRoZW1lXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb3V0ZXJUaGVtZSA9IHVzZVRoZW1lKCk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKG91dGVyVGhlbWUgPT09IG51bGwgJiYgdHlwZW9mIGxvY2FsVGhlbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFlvdSBhcmUgcHJvdmlkaW5nIGEgdGhlbWUgZnVuY3Rpb24gcHJvcCB0byB0aGUgVGhlbWVQcm92aWRlciBjb21wb25lbnQ6JywgJzxUaGVtZVByb3ZpZGVyIHRoZW1lPXtvdXRlclRoZW1lID0+IG91dGVyVGhlbWV9IC8+JywgJycsICdIb3dldmVyLCBubyBvdXRlciB0aGVtZSBpcyBwcmVzZW50LicsICdNYWtlIHN1cmUgYSB0aGVtZSBpcyBhbHJlYWR5IGluamVjdGVkIGhpZ2hlciBpbiB0aGUgUmVhY3QgdHJlZSAnICsgJ29yIHByb3ZpZGUgYSB0aGVtZSBvYmplY3QuJ10uam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuICBjb25zdCB0aGVtZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IG91dGVyVGhlbWUgPT09IG51bGwgPyBsb2NhbFRoZW1lIDogbWVyZ2VPdXRlckxvY2FsVGhlbWUob3V0ZXJUaGVtZSwgbG9jYWxUaGVtZSk7XG4gICAgaWYgKG91dHB1dCAhPSBudWxsKSB7XG4gICAgICBvdXRwdXRbbmVzdGVkXSA9IG91dGVyVGhlbWUgIT09IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH0sIFtsb2NhbFRoZW1lLCBvdXRlclRoZW1lXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUaGVtZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdGhlbWUsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVGhlbWVQcm92aWRlci5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBZb3VyIGNvbXBvbmVudCB0cmVlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogQSB0aGVtZSBvYmplY3QuIFlvdSBjYW4gcHJvdmlkZSBhIGZ1bmN0aW9uIHRvIGV4dGVuZCB0aGUgb3V0ZXIgdGhlbWUuXG4gICAqL1xuICB0aGVtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmZ1bmNdKS5pc1JlcXVpcmVkXG59IDogdm9pZCAwO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVGhlbWVQcm92aWRlci5wcm9wVHlwZXMgPSBleGFjdFByb3AoVGhlbWVQcm92aWRlci5wcm9wVHlwZXMpIDogdm9pZCAwO1xufVxuZXhwb3J0IGRlZmF1bHQgVGhlbWVQcm92aWRlcjsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IFRoZW1lUHJvdmlkZXIgYXMgTXVpVGhlbWVQcm92aWRlciwgdXNlVGhlbWUgYXMgdXNlUHJpdmF0ZVRoZW1lIH0gZnJvbSAnQG11aS9wcml2YXRlLXRoZW1pbmcnO1xuaW1wb3J0IGV4YWN0UHJvcCBmcm9tICdAbXVpL3V0aWxzL2V4YWN0UHJvcCc7XG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgYXMgU3R5bGVkRW5naW5lVGhlbWVDb250ZXh0IH0gZnJvbSAnQG11aS9zdHlsZWQtZW5naW5lJztcbmltcG9ydCB1c2VUaGVtZVdpdGhvdXREZWZhdWx0IGZyb20gJy4uL3VzZVRoZW1lV2l0aG91dERlZmF1bHQnO1xuaW1wb3J0IFJ0bFByb3ZpZGVyIGZyb20gJy4uL1J0bFByb3ZpZGVyJztcbmltcG9ydCBEZWZhdWx0UHJvcHNQcm92aWRlciBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgRU1QVFlfVEhFTUUgPSB7fTtcbmZ1bmN0aW9uIHVzZVRoZW1lU2NvcGluZyh0aGVtZUlkLCB1cHBlclRoZW1lLCBsb2NhbFRoZW1lLCBpc1ByaXZhdGUgPSBmYWxzZSkge1xuICByZXR1cm4gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgcmVzb2x2ZWRUaGVtZSA9IHRoZW1lSWQgPyB1cHBlclRoZW1lW3RoZW1lSWRdIHx8IHVwcGVyVGhlbWUgOiB1cHBlclRoZW1lO1xuICAgIGlmICh0eXBlb2YgbG9jYWxUaGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgbWVyZ2VkVGhlbWUgPSBsb2NhbFRoZW1lKHJlc29sdmVkVGhlbWUpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGhlbWVJZCA/IF9leHRlbmRzKHt9LCB1cHBlclRoZW1lLCB7XG4gICAgICAgIFt0aGVtZUlkXTogbWVyZ2VkVGhlbWVcbiAgICAgIH0pIDogbWVyZ2VkVGhlbWU7XG4gICAgICAvLyBtdXN0IHJldHVybiBhIGZ1bmN0aW9uIGZvciB0aGUgcHJpdmF0ZSB0aGVtZSB0byBOT1QgbWVyZ2Ugd2l0aCB0aGUgdXBwZXIgdGhlbWUuXG4gICAgICAvLyBzZWUgdGhlIHRlc3QgY2FzZSBcInVzZSBwcm92aWRlZCB0aGVtZSBmcm9tIGEgY2FsbGJhY2tcIiBpbiBUaGVtZVByb3ZpZGVyLnRlc3QuanNcbiAgICAgIGlmIChpc1ByaXZhdGUpIHtcbiAgICAgICAgcmV0dXJuICgpID0+IHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiB0aGVtZUlkID8gX2V4dGVuZHMoe30sIHVwcGVyVGhlbWUsIHtcbiAgICAgIFt0aGVtZUlkXTogbG9jYWxUaGVtZVxuICAgIH0pIDogX2V4dGVuZHMoe30sIHVwcGVyVGhlbWUsIGxvY2FsVGhlbWUpO1xuICB9LCBbdGhlbWVJZCwgdXBwZXJUaGVtZSwgbG9jYWxUaGVtZSwgaXNQcml2YXRlXSk7XG59XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgbWFrZXMgdGhlIGB0aGVtZWAgYXZhaWxhYmxlIGRvd24gdGhlIFJlYWN0IHRyZWUuXG4gKiBJdCBzaG91bGQgcHJlZmVyYWJseSBiZSB1c2VkIGF0ICoqdGhlIHJvb3Qgb2YgeW91ciBjb21wb25lbnQgdHJlZSoqLlxuICpcbiAqIDxUaGVtZVByb3ZpZGVyIHRoZW1lPXt0aGVtZX0+IC8vIGV4aXN0aW5nIHVzZSBjYXNlXG4gKiA8VGhlbWVQcm92aWRlciB0aGVtZT17eyBpZDogdGhlbWUgfX0+IC8vIHRoZW1lIHNjb3BpbmdcbiAqL1xuZnVuY3Rpb24gVGhlbWVQcm92aWRlcihwcm9wcykge1xuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgdGhlbWU6IGxvY2FsVGhlbWUsXG4gICAgdGhlbWVJZFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHVwcGVyVGhlbWUgPSB1c2VUaGVtZVdpdGhvdXREZWZhdWx0KEVNUFRZX1RIRU1FKTtcbiAgY29uc3QgdXBwZXJQcml2YXRlVGhlbWUgPSB1c2VQcml2YXRlVGhlbWUoKSB8fCBFTVBUWV9USEVNRTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodXBwZXJUaGVtZSA9PT0gbnVsbCAmJiB0eXBlb2YgbG9jYWxUaGVtZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0aGVtZUlkICYmIHVwcGVyVGhlbWUgJiYgIXVwcGVyVGhlbWVbdGhlbWVJZF0gJiYgdHlwZW9mIGxvY2FsVGhlbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFlvdSBhcmUgcHJvdmlkaW5nIGEgdGhlbWUgZnVuY3Rpb24gcHJvcCB0byB0aGUgVGhlbWVQcm92aWRlciBjb21wb25lbnQ6JywgJzxUaGVtZVByb3ZpZGVyIHRoZW1lPXtvdXRlclRoZW1lID0+IG91dGVyVGhlbWV9IC8+JywgJycsICdIb3dldmVyLCBubyBvdXRlciB0aGVtZSBpcyBwcmVzZW50LicsICdNYWtlIHN1cmUgYSB0aGVtZSBpcyBhbHJlYWR5IGluamVjdGVkIGhpZ2hlciBpbiB0aGUgUmVhY3QgdHJlZSAnICsgJ29yIHByb3ZpZGUgYSB0aGVtZSBvYmplY3QuJ10uam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuICBjb25zdCBlbmdpbmVUaGVtZSA9IHVzZVRoZW1lU2NvcGluZyh0aGVtZUlkLCB1cHBlclRoZW1lLCBsb2NhbFRoZW1lKTtcbiAgY29uc3QgcHJpdmF0ZVRoZW1lID0gdXNlVGhlbWVTY29waW5nKHRoZW1lSWQsIHVwcGVyUHJpdmF0ZVRoZW1lLCBsb2NhbFRoZW1lLCB0cnVlKTtcbiAgY29uc3QgcnRsVmFsdWUgPSBlbmdpbmVUaGVtZS5kaXJlY3Rpb24gPT09ICdydGwnO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTXVpVGhlbWVQcm92aWRlciwge1xuICAgIHRoZW1lOiBwcml2YXRlVGhlbWUsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFN0eWxlZEVuZ2luZVRoZW1lQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IGVuZ2luZVRoZW1lLFxuICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFJ0bFByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBydGxWYWx1ZSxcbiAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KERlZmF1bHRQcm9wc1Byb3ZpZGVyLCB7XG4gICAgICAgICAgdmFsdWU6IGVuZ2luZVRoZW1lID09IG51bGwgPyB2b2lkIDAgOiBlbmdpbmVUaGVtZS5jb21wb25lbnRzLFxuICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KVxuICB9KTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRoZW1lUHJvdmlkZXIucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogWW91ciBjb21wb25lbnQgdHJlZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEEgdGhlbWUgb2JqZWN0LiBZb3UgY2FuIHByb3ZpZGUgYSBmdW5jdGlvbiB0byBleHRlbmQgdGhlIG91dGVyIHRoZW1lLlxuICAgKi9cbiAgdGhlbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSkuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFRoZSBkZXNpZ24gc3lzdGVtJ3MgdW5pcXVlIGlkIGZvciBnZXR0aW5nIHRoZSBjb3JyZXNwb25kZWQgdGhlbWUgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgZGVzaWduIHN5c3RlbXMuXG4gICAqL1xuICB0aGVtZUlkOiBQcm9wVHlwZXMuc3RyaW5nXG59IDogdm9pZCAwO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVGhlbWVQcm92aWRlci5wcm9wVHlwZXMgPSBleGFjdFByb3AoVGhlbWVQcm92aWRlci5wcm9wVHlwZXMpIDogdm9pZCAwO1xufVxuZXhwb3J0IGRlZmF1bHQgVGhlbWVQcm92aWRlcjsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBtZXJnZSBmcm9tICcuL21lcmdlJztcblxuLy8gVGhlIGJyZWFrcG9pbnQgKipzdGFydCoqIGF0IHRoaXMgdmFsdWUuXG4vLyBGb3IgaW5zdGFuY2Ugd2l0aCB0aGUgZmlyc3QgYnJlYWtwb2ludCB4czogW3hzLCBzbVsuXG5leHBvcnQgY29uc3QgdmFsdWVzID0ge1xuICB4czogMCxcbiAgLy8gcGhvbmVcbiAgc206IDYwMCxcbiAgLy8gdGFibGV0XG4gIG1kOiA5MDAsXG4gIC8vIHNtYWxsIGxhcHRvcFxuICBsZzogMTIwMCxcbiAgLy8gZGVza3RvcFxuICB4bDogMTUzNiAvLyBsYXJnZSBzY3JlZW5cbn07XG5jb25zdCBkZWZhdWx0QnJlYWtwb2ludHMgPSB7XG4gIC8vIFNvcnRlZCBBU0MgYnkgc2l6ZS4gVGhhdCdzIGltcG9ydGFudC5cbiAgLy8gSXQgY2FuJ3QgYmUgY29uZmlndXJlZCBhcyBpdCdzIHVzZWQgc3RhdGljYWxseSBmb3IgcHJvcFR5cGVzLlxuICBrZXlzOiBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJ10sXG4gIHVwOiBrZXkgPT4gYEBtZWRpYSAobWluLXdpZHRoOiR7dmFsdWVzW2tleV19cHgpYFxufTtcbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcFZhbHVlLCBzdHlsZUZyb21Qcm9wVmFsdWUpIHtcbiAgY29uc3QgdGhlbWUgPSBwcm9wcy50aGVtZSB8fCB7fTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgIGNvbnN0IHRoZW1lQnJlYWtwb2ludHMgPSB0aGVtZS5icmVha3BvaW50cyB8fCBkZWZhdWx0QnJlYWtwb2ludHM7XG4gICAgcmV0dXJuIHByb3BWYWx1ZS5yZWR1Y2UoKGFjYywgaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGFjY1t0aGVtZUJyZWFrcG9pbnRzLnVwKHRoZW1lQnJlYWtwb2ludHMua2V5c1tpbmRleF0pXSA9IHN0eWxlRnJvbVByb3BWYWx1ZShwcm9wVmFsdWVbaW5kZXhdKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICB9XG4gIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IHRoZW1lQnJlYWtwb2ludHMgPSB0aGVtZS5icmVha3BvaW50cyB8fCBkZWZhdWx0QnJlYWtwb2ludHM7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHByb3BWYWx1ZSkucmVkdWNlKChhY2MsIGJyZWFrcG9pbnQpID0+IHtcbiAgICAgIC8vIGtleSBpcyBicmVha3BvaW50XG4gICAgICBpZiAoT2JqZWN0LmtleXModGhlbWVCcmVha3BvaW50cy52YWx1ZXMgfHwgdmFsdWVzKS5pbmRleE9mKGJyZWFrcG9pbnQpICE9PSAtMSkge1xuICAgICAgICBjb25zdCBtZWRpYUtleSA9IHRoZW1lQnJlYWtwb2ludHMudXAoYnJlYWtwb2ludCk7XG4gICAgICAgIGFjY1ttZWRpYUtleV0gPSBzdHlsZUZyb21Qcm9wVmFsdWUocHJvcFZhbHVlW2JyZWFrcG9pbnRdLCBicmVha3BvaW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNzc0tleSA9IGJyZWFrcG9pbnQ7XG4gICAgICAgIGFjY1tjc3NLZXldID0gcHJvcFZhbHVlW2Nzc0tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfVxuICBjb25zdCBvdXRwdXQgPSBzdHlsZUZyb21Qcm9wVmFsdWUocHJvcFZhbHVlKTtcbiAgcmV0dXJuIG91dHB1dDtcbn1cbmZ1bmN0aW9uIGJyZWFrcG9pbnRzKHN0eWxlRnVuY3Rpb24pIHtcbiAgLy8gZmFsc2UgcG9zaXRpdmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG4gIGNvbnN0IG5ld1N0eWxlRnVuY3Rpb24gPSBwcm9wcyA9PiB7XG4gICAgY29uc3QgdGhlbWUgPSBwcm9wcy50aGVtZSB8fCB7fTtcbiAgICBjb25zdCBiYXNlID0gc3R5bGVGdW5jdGlvbihwcm9wcyk7XG4gICAgY29uc3QgdGhlbWVCcmVha3BvaW50cyA9IHRoZW1lLmJyZWFrcG9pbnRzIHx8IGRlZmF1bHRCcmVha3BvaW50cztcbiAgICBjb25zdCBleHRlbmRlZCA9IHRoZW1lQnJlYWtwb2ludHMua2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBpZiAocHJvcHNba2V5XSkge1xuICAgICAgICBhY2MgPSBhY2MgfHwge307XG4gICAgICAgIGFjY1t0aGVtZUJyZWFrcG9pbnRzLnVwKGtleSldID0gc3R5bGVGdW5jdGlvbihfZXh0ZW5kcyh7XG4gICAgICAgICAgdGhlbWVcbiAgICAgICAgfSwgcHJvcHNba2V5XSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBudWxsKTtcbiAgICByZXR1cm4gbWVyZ2UoYmFzZSwgZXh0ZW5kZWQpO1xuICB9O1xuICBuZXdTdHlsZUZ1bmN0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBfZXh0ZW5kcyh7fSwgc3R5bGVGdW5jdGlvbi5wcm9wVHlwZXMsIHtcbiAgICB4czogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBzbTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBtZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBsZzogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB4bDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSA6IHt9O1xuICBuZXdTdHlsZUZ1bmN0aW9uLmZpbHRlclByb3BzID0gWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCcsIC4uLnN0eWxlRnVuY3Rpb24uZmlsdGVyUHJvcHNdO1xuICByZXR1cm4gbmV3U3R5bGVGdW5jdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QoYnJlYWtwb2ludHNJbnB1dCA9IHt9KSB7XG4gIHZhciBfYnJlYWtwb2ludHNJbnB1dCRrZXk7XG4gIGNvbnN0IGJyZWFrcG9pbnRzSW5PcmRlciA9IChfYnJlYWtwb2ludHNJbnB1dCRrZXkgPSBicmVha3BvaW50c0lucHV0LmtleXMpID09IG51bGwgPyB2b2lkIDAgOiBfYnJlYWtwb2ludHNJbnB1dCRrZXkucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgIGNvbnN0IGJyZWFrcG9pbnRTdHlsZUtleSA9IGJyZWFrcG9pbnRzSW5wdXQudXAoa2V5KTtcbiAgICBhY2NbYnJlYWtwb2ludFN0eWxlS2V5XSA9IHt9O1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGJyZWFrcG9pbnRzSW5PcmRlciB8fCB7fTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVVbnVzZWRCcmVha3BvaW50cyhicmVha3BvaW50S2V5cywgc3R5bGUpIHtcbiAgcmV0dXJuIGJyZWFrcG9pbnRLZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBjb25zdCBicmVha3BvaW50T3V0cHV0ID0gYWNjW2tleV07XG4gICAgY29uc3QgaXNCcmVha3BvaW50VW51c2VkID0gIWJyZWFrcG9pbnRPdXRwdXQgfHwgT2JqZWN0LmtleXMoYnJlYWtwb2ludE91dHB1dCkubGVuZ3RoID09PSAwO1xuICAgIGlmIChpc0JyZWFrcG9pbnRVbnVzZWQpIHtcbiAgICAgIGRlbGV0ZSBhY2Nba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgc3R5bGUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQnJlYWtwb2ludHNJbk9yZGVyKGJyZWFrcG9pbnRzSW5wdXQsIC4uLnN0eWxlcykge1xuICBjb25zdCBlbXB0eUJyZWFrcG9pbnRzID0gY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0KGJyZWFrcG9pbnRzSW5wdXQpO1xuICBjb25zdCBtZXJnZWRPdXRwdXQgPSBbZW1wdHlCcmVha3BvaW50cywgLi4uc3R5bGVzXS5yZWR1Y2UoKHByZXYsIG5leHQpID0+IGRlZXBtZXJnZShwcmV2LCBuZXh0KSwge30pO1xuICByZXR1cm4gcmVtb3ZlVW51c2VkQnJlYWtwb2ludHMoT2JqZWN0LmtleXMoZW1wdHlCcmVha3BvaW50cyksIG1lcmdlZE91dHB1dCk7XG59XG5cbi8vIGNvbXB1dGUgYmFzZSBmb3IgcmVzcG9uc2l2ZSB2YWx1ZXM7IGUuZy4sXG4vLyBbMSwyLDNdID0+IHt4czogdHJ1ZSwgc206IHRydWUsIG1kOiB0cnVlfVxuLy8ge3hzOiAxLCBzbTogMiwgbWQ6IDN9ID0+IHt4czogdHJ1ZSwgc206IHRydWUsIG1kOiB0cnVlfVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVCcmVha3BvaW50c0Jhc2UoYnJlYWtwb2ludFZhbHVlcywgdGhlbWVCcmVha3BvaW50cykge1xuICAvLyBmaXhlZCB2YWx1ZVxuICBpZiAodHlwZW9mIGJyZWFrcG9pbnRWYWx1ZXMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGNvbnN0IGJhc2UgPSB7fTtcbiAgY29uc3QgYnJlYWtwb2ludHNLZXlzID0gT2JqZWN0LmtleXModGhlbWVCcmVha3BvaW50cyk7XG4gIGlmIChBcnJheS5pc0FycmF5KGJyZWFrcG9pbnRWYWx1ZXMpKSB7XG4gICAgYnJlYWtwb2ludHNLZXlzLmZvckVhY2goKGJyZWFrcG9pbnQsIGkpID0+IHtcbiAgICAgIGlmIChpIDwgYnJlYWtwb2ludFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgYmFzZVticmVha3BvaW50XSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYnJlYWtwb2ludHNLZXlzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgICBpZiAoYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSAhPSBudWxsKSB7XG4gICAgICAgIGJhc2VbYnJlYWtwb2ludF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBiYXNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgdmFsdWVzOiBicmVha3BvaW50VmFsdWVzLFxuICBicmVha3BvaW50czogdGhlbWVCcmVha3BvaW50cyxcbiAgYmFzZTogY3VzdG9tQmFzZVxufSkge1xuICBjb25zdCBiYXNlID0gY3VzdG9tQmFzZSB8fCBjb21wdXRlQnJlYWtwb2ludHNCYXNlKGJyZWFrcG9pbnRWYWx1ZXMsIHRoZW1lQnJlYWtwb2ludHMpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYmFzZSk7XG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBicmVha3BvaW50VmFsdWVzO1xuICB9XG4gIGxldCBwcmV2aW91cztcbiAgcmV0dXJuIGtleXMucmVkdWNlKChhY2MsIGJyZWFrcG9pbnQsIGkpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShicmVha3BvaW50VmFsdWVzKSkge1xuICAgICAgYWNjW2JyZWFrcG9pbnRdID0gYnJlYWtwb2ludFZhbHVlc1tpXSAhPSBudWxsID8gYnJlYWtwb2ludFZhbHVlc1tpXSA6IGJyZWFrcG9pbnRWYWx1ZXNbcHJldmlvdXNdO1xuICAgICAgcHJldmlvdXMgPSBpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJyZWFrcG9pbnRWYWx1ZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICBhY2NbYnJlYWtwb2ludF0gPSBicmVha3BvaW50VmFsdWVzW2JyZWFrcG9pbnRdICE9IG51bGwgPyBicmVha3BvaW50VmFsdWVzW2JyZWFrcG9pbnRdIDogYnJlYWtwb2ludFZhbHVlc1twcmV2aW91c107XG4gICAgICBwcmV2aW91cyA9IGJyZWFrcG9pbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjY1ticmVha3BvaW50XSA9IGJyZWFrcG9pbnRWYWx1ZXM7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGJyZWFrcG9pbnRzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAbXVpL3N0eWxlZC1lbmdpbmUnO1xuaW1wb3J0IHN0eWxlRnVuY3Rpb25TeCwgeyBleHRlbmRTeFByb3AgfSBmcm9tICcuL3N0eWxlRnVuY3Rpb25TeCc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi91c2VUaGVtZSc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQm94KG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGhlbWVJZCxcbiAgICBkZWZhdWx0VGhlbWUsXG4gICAgZGVmYXVsdENsYXNzTmFtZSA9ICdNdWlCb3gtcm9vdCcsXG4gICAgZ2VuZXJhdGVDbGFzc05hbWVcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IEJveFJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiBwcm9wICE9PSAndGhlbWUnICYmIHByb3AgIT09ICdzeCcgJiYgcHJvcCAhPT0gJ2FzJ1xuICB9KShzdHlsZUZ1bmN0aW9uU3gpO1xuICBjb25zdCBCb3ggPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBCb3goaW5Qcm9wcywgcmVmKSB7XG4gICAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZShkZWZhdWx0VGhlbWUpO1xuICAgIGNvbnN0IF9leHRlbmRTeFByb3AgPSBleHRlbmRTeFByb3AoaW5Qcm9wcyksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgY29tcG9uZW50ID0gJ2RpdidcbiAgICAgIH0gPSBfZXh0ZW5kU3hQcm9wLFxuICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfZXh0ZW5kU3hQcm9wLCBfZXhjbHVkZWQpO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChCb3hSb290LCBfZXh0ZW5kcyh7XG4gICAgICBhczogY29tcG9uZW50LFxuICAgICAgcmVmOiByZWYsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3NOYW1lLCBnZW5lcmF0ZUNsYXNzTmFtZSA/IGdlbmVyYXRlQ2xhc3NOYW1lKGRlZmF1bHRDbGFzc05hbWUpIDogZGVmYXVsdENsYXNzTmFtZSksXG4gICAgICB0aGVtZTogdGhlbWVJZCA/IHRoZW1lW3RoZW1lSWRdIHx8IHRoZW1lIDogdGhlbWVcbiAgICB9LCBvdGhlcikpO1xuICB9KTtcbiAgcmV0dXJuIEJveDtcbn0iLCIvKipcbiAqIEEgdW5pdmVyc2FsIHV0aWxpdHkgdG8gc3R5bGUgY29tcG9uZW50cyB3aXRoIG11bHRpcGxlIGNvbG9yIG1vZGVzLiBBbHdheXMgdXNlIGl0IGZyb20gdGhlIHRoZW1lIG9iamVjdC5cbiAqIEl0IHdvcmtzIHdpdGg6XG4gKiAgLSBbQmFzaWMgdGhlbWVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL2RhcmstbW9kZS8pXG4gKiAgLSBbQ1NTIHRoZW1lIHZhcmlhYmxlc10oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2V4cGVyaW1lbnRhbC1hcGkvY3NzLXRoZW1lLXZhcmlhYmxlcy9vdmVydmlldy8pXG4gKiAgLSBaZXJvLXJ1bnRpbWUgZW5naW5lXG4gKlxuICogVGlwczogVXNlIGFuIGFycmF5IG92ZXIgb2JqZWN0IHNwcmVhZCBhbmQgcGxhY2UgYHRoZW1lLmFwcGx5U3R5bGVzKClgIGxhc3QuXG4gKlxuICog4pyFIFt7IGJhY2tncm91bmQ6ICcjZTVlNWU1JyB9LCB0aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHsgYmFja2dyb3VuZDogJyMxYzFjMWMnIH0pXVxuICpcbiAqIPCfmqsgeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScsIC4uLnRoZW1lLmFwcGx5U3R5bGVzKCdkYXJrJywgeyBiYWNrZ3JvdW5kOiAnIzFjMWMxYycgfSl9XG4gKlxuICogQGV4YW1wbGVcbiAqIDEuIHVzaW5nIHdpdGggYHN0eWxlZGA6XG4gKiBgYGBqc3hcbiAqICAgY29uc3QgQ29tcG9uZW50ID0gc3R5bGVkKCdkaXYnKSgoeyB0aGVtZSB9KSA9PiBbXG4gKiAgICAgeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScgfSxcbiAqICAgICB0aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHtcbiAqICAgICAgIGJhY2tncm91bmQ6ICcjMWMxYzFjJyxcbiAqICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gKiAgICAgfSksXG4gKiAgIF0pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIDIuIHVzaW5nIHdpdGggYHN4YCBwcm9wOlxuICogYGBganN4XG4gKiAgIDxCb3ggc3g9e3RoZW1lID0+IFtcbiAqICAgICB7IGJhY2tncm91bmQ6ICcjZTVlNWU1JyB9LFxuICogICAgIHRoZW1lLmFwcGx5U3R5bGVzKCdkYXJrJywge1xuICogICAgICAgIGJhY2tncm91bmQ6ICcjMWMxYzFjJyxcbiAqICAgICAgICBjb2xvcjogJyNmZmYnLFxuICogICAgICB9KSxcbiAqICAgICBdfVxuICogICAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIDMuIHRoZW1pbmcgYSBjb21wb25lbnQ6XG4gKiBgYGBqc3hcbiAqICAgZXh0ZW5kVGhlbWUoe1xuICogICAgIGNvbXBvbmVudHM6IHtcbiAqICAgICAgIE11aUJ1dHRvbjoge1xuICogICAgICAgICBzdHlsZU92ZXJyaWRlczoge1xuICogICAgICAgICAgIHJvb3Q6ICh7IHRoZW1lIH0pID0+IFtcbiAqICAgICAgICAgICAgIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnIH0sXG4gKiAgICAgICAgICAgICB0aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHtcbiAqICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyMxYzFjMWMnLFxuICogICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICogICAgICAgICAgICAgfSksXG4gKiAgICAgICAgICAgXSxcbiAqICAgICAgICAgfSxcbiAqICAgICAgIH1cbiAqICAgICB9XG4gKiAgIH0pXG4gKmBgYFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhcHBseVN0eWxlcyhrZXksIHN0eWxlcykge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHRoaXMgaXMgJ2FueScgdHlwZVxuICBjb25zdCB0aGVtZSA9IHRoaXM7XG4gIGlmICh0aGVtZS52YXJzICYmIHR5cGVvZiB0aGVtZS5nZXRDb2xvclNjaGVtZVNlbGVjdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gSWYgQ3NzVmFyc1Byb3ZpZGVyIGlzIHVzZWQgYXMgYSBwcm92aWRlcixcbiAgICAvLyByZXR1cm5zICcqIDp3aGVyZShbZGF0YS1tdWktY29sb3Itc2NoZW1lPVwibGlnaHR8ZGFya1wiXSkgJidcbiAgICBjb25zdCBzZWxlY3RvciA9IHRoZW1lLmdldENvbG9yU2NoZW1lU2VsZWN0b3Ioa2V5KS5yZXBsYWNlKC8oXFxbW15cXF1dK1xcXSkvLCAnKjp3aGVyZSgkMSknKTtcbiAgICByZXR1cm4ge1xuICAgICAgW3NlbGVjdG9yXTogc3R5bGVzXG4gICAgfTtcbiAgfVxuICBpZiAodGhlbWUucGFsZXR0ZS5tb2RlID09PSBrZXkpIHtcbiAgICByZXR1cm4gc3R5bGVzO1xuICB9XG4gIHJldHVybiB7fTtcbn0iLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1widmFsdWVzXCIsIFwidW5pdFwiLCBcInN0ZXBcIl07XG4vLyBTb3J0ZWQgQVNDIGJ5IHNpemUuIFRoYXQncyBpbXBvcnRhbnQuXG4vLyBJdCBjYW4ndCBiZSBjb25maWd1cmVkIGFzIGl0J3MgdXNlZCBzdGF0aWNhbGx5IGZvciBwcm9wVHlwZXMuXG5leHBvcnQgY29uc3QgYnJlYWtwb2ludEtleXMgPSBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJ107XG5jb25zdCBzb3J0QnJlYWtwb2ludHNWYWx1ZXMgPSB2YWx1ZXMgPT4ge1xuICBjb25zdCBicmVha3BvaW50c0FzQXJyYXkgPSBPYmplY3Qua2V5cyh2YWx1ZXMpLm1hcChrZXkgPT4gKHtcbiAgICBrZXksXG4gICAgdmFsOiB2YWx1ZXNba2V5XVxuICB9KSkgfHwgW107XG4gIC8vIFNvcnQgaW4gYXNjZW5kaW5nIG9yZGVyXG4gIGJyZWFrcG9pbnRzQXNBcnJheS5zb3J0KChicmVha3BvaW50MSwgYnJlYWtwb2ludDIpID0+IGJyZWFrcG9pbnQxLnZhbCAtIGJyZWFrcG9pbnQyLnZhbCk7XG4gIHJldHVybiBicmVha3BvaW50c0FzQXJyYXkucmVkdWNlKChhY2MsIG9iaikgPT4ge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgYWNjLCB7XG4gICAgICBbb2JqLmtleV06IG9iai52YWxcbiAgICB9KTtcbiAgfSwge30pO1xufTtcblxuLy8gS2VlcCBpbiBtaW5kIHRoYXQgQG1lZGlhIGlzIGluY2x1c2l2ZSBieSB0aGUgQ1NTIHNwZWNpZmljYXRpb24uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVCcmVha3BvaW50cyhicmVha3BvaW50cykge1xuICBjb25zdCB7XG4gICAgICAvLyBUaGUgYnJlYWtwb2ludCAqKnN0YXJ0KiogYXQgdGhpcyB2YWx1ZS5cbiAgICAgIC8vIEZvciBpbnN0YW5jZSB3aXRoIHRoZSBmaXJzdCBicmVha3BvaW50IHhzOiBbeHMsIHNtKS5cbiAgICAgIHZhbHVlcyA9IHtcbiAgICAgICAgeHM6IDAsXG4gICAgICAgIC8vIHBob25lXG4gICAgICAgIHNtOiA2MDAsXG4gICAgICAgIC8vIHRhYmxldFxuICAgICAgICBtZDogOTAwLFxuICAgICAgICAvLyBzbWFsbCBsYXB0b3BcbiAgICAgICAgbGc6IDEyMDAsXG4gICAgICAgIC8vIGRlc2t0b3BcbiAgICAgICAgeGw6IDE1MzYgLy8gbGFyZ2Ugc2NyZWVuXG4gICAgICB9LFxuICAgICAgdW5pdCA9ICdweCcsXG4gICAgICBzdGVwID0gNVxuICAgIH0gPSBicmVha3BvaW50cyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGJyZWFrcG9pbnRzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBzb3J0ZWRWYWx1ZXMgPSBzb3J0QnJlYWtwb2ludHNWYWx1ZXModmFsdWVzKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNvcnRlZFZhbHVlcyk7XG4gIGZ1bmN0aW9uIHVwKGtleSkge1xuICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIHZhbHVlc1trZXldID09PSAnbnVtYmVyJyA/IHZhbHVlc1trZXldIDoga2V5O1xuICAgIHJldHVybiBgQG1lZGlhIChtaW4td2lkdGg6JHt2YWx1ZX0ke3VuaXR9KWA7XG4gIH1cbiAgZnVuY3Rpb24gZG93bihrZXkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiB2YWx1ZXNba2V5XSA9PT0gJ251bWJlcicgPyB2YWx1ZXNba2V5XSA6IGtleTtcbiAgICByZXR1cm4gYEBtZWRpYSAobWF4LXdpZHRoOiR7dmFsdWUgLSBzdGVwIC8gMTAwfSR7dW5pdH0pYDtcbiAgfVxuICBmdW5jdGlvbiBiZXR3ZWVuKHN0YXJ0LCBlbmQpIHtcbiAgICBjb25zdCBlbmRJbmRleCA9IGtleXMuaW5kZXhPZihlbmQpO1xuICAgIHJldHVybiBgQG1lZGlhIChtaW4td2lkdGg6JHt0eXBlb2YgdmFsdWVzW3N0YXJ0XSA9PT0gJ251bWJlcicgPyB2YWx1ZXNbc3RhcnRdIDogc3RhcnR9JHt1bml0fSkgYW5kIGAgKyBgKG1heC13aWR0aDokeyhlbmRJbmRleCAhPT0gLTEgJiYgdHlwZW9mIHZhbHVlc1trZXlzW2VuZEluZGV4XV0gPT09ICdudW1iZXInID8gdmFsdWVzW2tleXNbZW5kSW5kZXhdXSA6IGVuZCkgLSBzdGVwIC8gMTAwfSR7dW5pdH0pYDtcbiAgfVxuICBmdW5jdGlvbiBvbmx5KGtleSkge1xuICAgIGlmIChrZXlzLmluZGV4T2Yoa2V5KSArIDEgPCBrZXlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGJldHdlZW4oa2V5LCBrZXlzW2tleXMuaW5kZXhPZihrZXkpICsgMV0pO1xuICAgIH1cbiAgICByZXR1cm4gdXAoa2V5KTtcbiAgfVxuICBmdW5jdGlvbiBub3Qoa2V5KSB7XG4gICAgLy8gaGFuZGxlIGZpcnN0IGFuZCBsYXN0IGtleSBzZXBhcmF0ZWx5LCBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5XG4gICAgY29uc3Qga2V5SW5kZXggPSBrZXlzLmluZGV4T2Yoa2V5KTtcbiAgICBpZiAoa2V5SW5kZXggPT09IDApIHtcbiAgICAgIHJldHVybiB1cChrZXlzWzFdKTtcbiAgICB9XG4gICAgaWYgKGtleUluZGV4ID09PSBrZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHJldHVybiBkb3duKGtleXNba2V5SW5kZXhdKTtcbiAgICB9XG4gICAgcmV0dXJuIGJldHdlZW4oa2V5LCBrZXlzW2tleXMuaW5kZXhPZihrZXkpICsgMV0pLnJlcGxhY2UoJ0BtZWRpYScsICdAbWVkaWEgbm90IGFsbCBhbmQnKTtcbiAgfVxuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIGtleXMsXG4gICAgdmFsdWVzOiBzb3J0ZWRWYWx1ZXMsXG4gICAgdXAsXG4gICAgZG93bixcbiAgICBiZXR3ZWVuLFxuICAgIG9ubHksXG4gICAgbm90LFxuICAgIHVuaXRcbiAgfSwgb3RoZXIpO1xufSIsImNvbnN0IHNoYXBlID0ge1xuICBib3JkZXJSYWRpdXM6IDRcbn07XG5leHBvcnQgZGVmYXVsdCBzaGFwZTsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYnJlYWtwb2ludHNcIiwgXCJwYWxldHRlXCIsIFwic3BhY2luZ1wiLCBcInNoYXBlXCJdO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5pbXBvcnQgY3JlYXRlQnJlYWtwb2ludHMgZnJvbSAnLi9jcmVhdGVCcmVha3BvaW50cyc7XG5pbXBvcnQgc2hhcGUgZnJvbSAnLi9zaGFwZSc7XG5pbXBvcnQgY3JlYXRlU3BhY2luZyBmcm9tICcuL2NyZWF0ZVNwYWNpbmcnO1xuaW1wb3J0IHN0eWxlRnVuY3Rpb25TeCBmcm9tICcuLi9zdHlsZUZ1bmN0aW9uU3gvc3R5bGVGdW5jdGlvblN4JztcbmltcG9ydCBkZWZhdWx0U3hDb25maWcgZnJvbSAnLi4vc3R5bGVGdW5jdGlvblN4L2RlZmF1bHRTeENvbmZpZyc7XG5pbXBvcnQgYXBwbHlTdHlsZXMgZnJvbSAnLi9hcHBseVN0eWxlcyc7XG5mdW5jdGlvbiBjcmVhdGVUaGVtZShvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgY29uc3Qge1xuICAgICAgYnJlYWtwb2ludHM6IGJyZWFrcG9pbnRzSW5wdXQgPSB7fSxcbiAgICAgIHBhbGV0dGU6IHBhbGV0dGVJbnB1dCA9IHt9LFxuICAgICAgc3BhY2luZzogc3BhY2luZ0lucHV0LFxuICAgICAgc2hhcGU6IHNoYXBlSW5wdXQgPSB7fVxuICAgIH0gPSBvcHRpb25zLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uob3B0aW9ucywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgYnJlYWtwb2ludHMgPSBjcmVhdGVCcmVha3BvaW50cyhicmVha3BvaW50c0lucHV0KTtcbiAgY29uc3Qgc3BhY2luZyA9IGNyZWF0ZVNwYWNpbmcoc3BhY2luZ0lucHV0KTtcbiAgbGV0IG11aVRoZW1lID0gZGVlcG1lcmdlKHtcbiAgICBicmVha3BvaW50cyxcbiAgICBkaXJlY3Rpb246ICdsdHInLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIC8vIEluamVjdCBjb21wb25lbnQgZGVmaW5pdGlvbnMuXG4gICAgcGFsZXR0ZTogX2V4dGVuZHMoe1xuICAgICAgbW9kZTogJ2xpZ2h0J1xuICAgIH0sIHBhbGV0dGVJbnB1dCksXG4gICAgc3BhY2luZyxcbiAgICBzaGFwZTogX2V4dGVuZHMoe30sIHNoYXBlLCBzaGFwZUlucHV0KVxuICB9LCBvdGhlcik7XG4gIG11aVRoZW1lLmFwcGx5U3R5bGVzID0gYXBwbHlTdHlsZXM7XG4gIG11aVRoZW1lID0gYXJncy5yZWR1Y2UoKGFjYywgYXJndW1lbnQpID0+IGRlZXBtZXJnZShhY2MsIGFyZ3VtZW50KSwgbXVpVGhlbWUpO1xuICBtdWlUaGVtZS51bnN0YWJsZV9zeENvbmZpZyA9IF9leHRlbmRzKHt9LCBkZWZhdWx0U3hDb25maWcsIG90aGVyID09IG51bGwgPyB2b2lkIDAgOiBvdGhlci51bnN0YWJsZV9zeENvbmZpZyk7XG4gIG11aVRoZW1lLnVuc3RhYmxlX3N4ID0gZnVuY3Rpb24gc3gocHJvcHMpIHtcbiAgICByZXR1cm4gc3R5bGVGdW5jdGlvblN4KHtcbiAgICAgIHN4OiBwcm9wcyxcbiAgICAgIHRoZW1lOiB0aGlzXG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBtdWlUaGVtZTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVRoZW1lOyIsImltcG9ydCB7IGNyZWF0ZVVuYXJ5U3BhY2luZyB9IGZyb20gJy4uL3NwYWNpbmcnO1xuXG4vLyBUaGUgZGlmZmVyZW50IHNpZ25hdHVyZXMgaW1wbHkgZGlmZmVyZW50IG1lYW5pbmcgZm9yIHRoZWlyIGFyZ3VtZW50cyB0aGF0IGNhbid0IGJlIGV4cHJlc3NlZCBzdHJ1Y3R1cmFsbHkuXG4vLyBXZSBleHByZXNzIHRoZSBkaWZmZXJlbmNlIHdpdGggdmFyaWFibGUgbmFtZXMuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVNwYWNpbmcoc3BhY2luZ0lucHV0ID0gOCkge1xuICAvLyBBbHJlYWR5IHRyYW5zZm9ybWVkLlxuICBpZiAoc3BhY2luZ0lucHV0Lm11aSkge1xuICAgIHJldHVybiBzcGFjaW5nSW5wdXQ7XG4gIH1cblxuICAvLyBNYXRlcmlhbCBEZXNpZ24gbGF5b3V0cyBhcmUgdmlzdWFsbHkgYmFsYW5jZWQuIE1vc3QgbWVhc3VyZW1lbnRzIGFsaWduIHRvIGFuIDhkcCBncmlkLCB3aGljaCBhbGlnbnMgYm90aCBzcGFjaW5nIGFuZCB0aGUgb3ZlcmFsbCBsYXlvdXQuXG4gIC8vIFNtYWxsZXIgY29tcG9uZW50cywgc3VjaCBhcyBpY29ucywgY2FuIGFsaWduIHRvIGEgNGRwIGdyaWQuXG4gIC8vIGh0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZGVzaWduL2xheW91dC91bmRlcnN0YW5kaW5nLWxheW91dC5odG1sXG4gIGNvbnN0IHRyYW5zZm9ybSA9IGNyZWF0ZVVuYXJ5U3BhY2luZyh7XG4gICAgc3BhY2luZzogc3BhY2luZ0lucHV0XG4gIH0pO1xuICBjb25zdCBzcGFjaW5nID0gKC4uLmFyZ3NJbnB1dCkgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIShhcmdzSW5wdXQubGVuZ3RoIDw9IDQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVG9vIG1hbnkgYXJndW1lbnRzIHByb3ZpZGVkLCBleHBlY3RlZCBiZXR3ZWVuIDAgYW5kIDQsIGdvdCAke2FyZ3NJbnB1dC5sZW5ndGh9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGFyZ3MgPSBhcmdzSW5wdXQubGVuZ3RoID09PSAwID8gWzFdIDogYXJnc0lucHV0O1xuICAgIHJldHVybiBhcmdzLm1hcChhcmd1bWVudCA9PiB7XG4gICAgICBjb25zdCBvdXRwdXQgPSB0cmFuc2Zvcm0oYXJndW1lbnQpO1xuICAgICAgcmV0dXJuIHR5cGVvZiBvdXRwdXQgPT09ICdudW1iZXInID8gYCR7b3V0cHV0fXB4YCA6IG91dHB1dDtcbiAgICB9KS5qb2luKCcgJyk7XG4gIH07XG4gIHNwYWNpbmcubXVpID0gdHJ1ZTtcbiAgcmV0dXJuIHNwYWNpbmc7XG59IiwiaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5mdW5jdGlvbiBtZXJnZShhY2MsIGl0ZW0pIHtcbiAgaWYgKCFpdGVtKSB7XG4gICAgcmV0dXJuIGFjYztcbiAgfVxuICByZXR1cm4gZGVlcG1lcmdlKGFjYywgaXRlbSwge1xuICAgIGNsb25lOiBmYWxzZSAvLyBObyBuZWVkIHRvIGNsb25lIGRlZXAsIGl0J3Mgd2F5IGZhc3Rlci5cbiAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBtZXJnZTsiLCJpbXBvcnQgcmVzcG9uc2l2ZVByb3BUeXBlIGZyb20gJy4vcmVzcG9uc2l2ZVByb3BUeXBlJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5pbXBvcnQgeyBnZXRQYXRoIH0gZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAnLi9tZXJnZSc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICcuL21lbW9pemUnO1xuY29uc3QgcHJvcGVydGllcyA9IHtcbiAgbTogJ21hcmdpbicsXG4gIHA6ICdwYWRkaW5nJ1xufTtcbmNvbnN0IGRpcmVjdGlvbnMgPSB7XG4gIHQ6ICdUb3AnLFxuICByOiAnUmlnaHQnLFxuICBiOiAnQm90dG9tJyxcbiAgbDogJ0xlZnQnLFxuICB4OiBbJ0xlZnQnLCAnUmlnaHQnXSxcbiAgeTogWydUb3AnLCAnQm90dG9tJ11cbn07XG5jb25zdCBhbGlhc2VzID0ge1xuICBtYXJnaW5YOiAnbXgnLFxuICBtYXJnaW5ZOiAnbXknLFxuICBwYWRkaW5nWDogJ3B4JyxcbiAgcGFkZGluZ1k6ICdweSdcbn07XG5cbi8vIG1lbW9pemUoKSBpbXBhY3Q6XG4vLyBGcm9tIDMwMCwwMDAgb3BzL3NlY1xuLy8gVG8gMzUwLDAwMCBvcHMvc2VjXG5jb25zdCBnZXRDc3NQcm9wZXJ0aWVzID0gbWVtb2l6ZShwcm9wID0+IHtcbiAgLy8gSXQncyBub3QgYSBzaG9ydGhhbmQgbm90YXRpb24uXG4gIGlmIChwcm9wLmxlbmd0aCA+IDIpIHtcbiAgICBpZiAoYWxpYXNlc1twcm9wXSkge1xuICAgICAgcHJvcCA9IGFsaWFzZXNbcHJvcF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbcHJvcF07XG4gICAgfVxuICB9XG4gIGNvbnN0IFthLCBiXSA9IHByb3Auc3BsaXQoJycpO1xuICBjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbYV07XG4gIGNvbnN0IGRpcmVjdGlvbiA9IGRpcmVjdGlvbnNbYl0gfHwgJyc7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGRpcmVjdGlvbikgPyBkaXJlY3Rpb24ubWFwKGRpciA9PiBwcm9wZXJ0eSArIGRpcikgOiBbcHJvcGVydHkgKyBkaXJlY3Rpb25dO1xufSk7XG5leHBvcnQgY29uc3QgbWFyZ2luS2V5cyA9IFsnbScsICdtdCcsICdtcicsICdtYicsICdtbCcsICdteCcsICdteScsICdtYXJnaW4nLCAnbWFyZ2luVG9wJywgJ21hcmdpblJpZ2h0JywgJ21hcmdpbkJvdHRvbScsICdtYXJnaW5MZWZ0JywgJ21hcmdpblgnLCAnbWFyZ2luWScsICdtYXJnaW5JbmxpbmUnLCAnbWFyZ2luSW5saW5lU3RhcnQnLCAnbWFyZ2luSW5saW5lRW5kJywgJ21hcmdpbkJsb2NrJywgJ21hcmdpbkJsb2NrU3RhcnQnLCAnbWFyZ2luQmxvY2tFbmQnXTtcbmV4cG9ydCBjb25zdCBwYWRkaW5nS2V5cyA9IFsncCcsICdwdCcsICdwcicsICdwYicsICdwbCcsICdweCcsICdweScsICdwYWRkaW5nJywgJ3BhZGRpbmdUb3AnLCAncGFkZGluZ1JpZ2h0JywgJ3BhZGRpbmdCb3R0b20nLCAncGFkZGluZ0xlZnQnLCAncGFkZGluZ1gnLCAncGFkZGluZ1knLCAncGFkZGluZ0lubGluZScsICdwYWRkaW5nSW5saW5lU3RhcnQnLCAncGFkZGluZ0lubGluZUVuZCcsICdwYWRkaW5nQmxvY2snLCAncGFkZGluZ0Jsb2NrU3RhcnQnLCAncGFkZGluZ0Jsb2NrRW5kJ107XG5jb25zdCBzcGFjaW5nS2V5cyA9IFsuLi5tYXJnaW5LZXlzLCAuLi5wYWRkaW5nS2V5c107XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVW5hcnlVbml0KHRoZW1lLCB0aGVtZUtleSwgZGVmYXVsdFZhbHVlLCBwcm9wTmFtZSkge1xuICB2YXIgX2dldFBhdGg7XG4gIGNvbnN0IHRoZW1lU3BhY2luZyA9IChfZ2V0UGF0aCA9IGdldFBhdGgodGhlbWUsIHRoZW1lS2V5LCBmYWxzZSkpICE9IG51bGwgPyBfZ2V0UGF0aCA6IGRlZmF1bHRWYWx1ZTtcbiAgaWYgKHR5cGVvZiB0aGVtZVNwYWNpbmcgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGFicyA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFicyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGFicztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYWJzICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogRXhwZWN0ZWQgJHtwcm9wTmFtZX0gYXJndW1lbnQgdG8gYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcsIGdvdCAke2Fic30uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGVtZVNwYWNpbmcgKiBhYnM7XG4gICAgfTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh0aGVtZVNwYWNpbmcpKSB7XG4gICAgcmV0dXJuIGFicyA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFicyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGFicztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihhYnMpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIGFycmF5IHR5cGUgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggbm9uIGludGVnZXIgdmFsdWVzLmAgKyBgWW91IHNob3VsZCBlaXRoZXIgdXNlIGFuIGludGVnZXIgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbmRleCwgb3IgZGVmaW5lIHRoZSBcXGB0aGVtZS4ke3RoZW1lS2V5fVxcYCBhcyBhIG51bWJlci5gXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYWJzID4gdGhlbWVTcGFjaW5nLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgdmFsdWUgcHJvdmlkZWQgKCR7YWJzfSkgb3ZlcmZsb3dzLmAsIGBUaGUgc3VwcG9ydGVkIHZhbHVlcyBhcmU6ICR7SlNPTi5zdHJpbmdpZnkodGhlbWVTcGFjaW5nKX0uYCwgYCR7YWJzfSA+ICR7dGhlbWVTcGFjaW5nLmxlbmd0aCAtIDF9LCB5b3UgbmVlZCB0byBhZGQgdGhlIG1pc3NpbmcgdmFsdWVzLmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoZW1lU3BhY2luZ1thYnNdO1xuICAgIH07XG4gIH1cbiAgaWYgKHR5cGVvZiB0aGVtZVNwYWNpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdGhlbWVTcGFjaW5nO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIHZhbHVlICgke3RoZW1lU3BhY2luZ30pIGlzIGludmFsaWQuYCwgJ0l0IHNob3VsZCBiZSBhIG51bWJlciwgYW4gYXJyYXkgb3IgYSBmdW5jdGlvbi4nXS5qb2luKCdcXG4nKSk7XG4gIH1cbiAgcmV0dXJuICgpID0+IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVbmFyeVNwYWNpbmcodGhlbWUpIHtcbiAgcmV0dXJuIGNyZWF0ZVVuYXJ5VW5pdCh0aGVtZSwgJ3NwYWNpbmcnLCA4LCAnc3BhY2luZycpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICdzdHJpbmcnIHx8IHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHByb3BWYWx1ZTtcbiAgfVxuICBjb25zdCBhYnMgPSBNYXRoLmFicyhwcm9wVmFsdWUpO1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHRyYW5zZm9ybWVyKGFicyk7XG4gIGlmIChwcm9wVmFsdWUgPj0gMCkge1xuICAgIHJldHVybiB0cmFuc2Zvcm1lZDtcbiAgfVxuICBpZiAodHlwZW9mIHRyYW5zZm9ybWVkID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiAtdHJhbnNmb3JtZWQ7XG4gIH1cbiAgcmV0dXJuIGAtJHt0cmFuc2Zvcm1lZH1gO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0eWxlRnJvbVByb3BWYWx1ZShjc3NQcm9wZXJ0aWVzLCB0cmFuc2Zvcm1lcikge1xuICByZXR1cm4gcHJvcFZhbHVlID0+IGNzc1Byb3BlcnRpZXMucmVkdWNlKChhY2MsIGNzc1Byb3BlcnR5KSA9PiB7XG4gICAgYWNjW2Nzc1Byb3BlcnR5XSA9IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVDc3NQcm9wZXJ0eShwcm9wcywga2V5cywgcHJvcCwgdHJhbnNmb3JtZXIpIHtcbiAgLy8gVXNpbmcgYSBoYXNoIGNvbXB1dGF0aW9uIG92ZXIgYW4gYXJyYXkgaXRlcmF0aW9uIGNvdWxkIGJlIGZhc3RlciwgYnV0IHdpdGggb25seSAyOCBpdGVtcyxcbiAgLy8gaXQncyBkb2Vzbid0IHdvcnRoIHRoZSBidW5kbGUgc2l6ZS5cbiAgaWYgKGtleXMuaW5kZXhPZihwcm9wKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBjc3NQcm9wZXJ0aWVzID0gZ2V0Q3NzUHJvcGVydGllcyhwcm9wKTtcbiAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gZ2V0U3R5bGVGcm9tUHJvcFZhbHVlKGNzc1Byb3BlcnRpZXMsIHRyYW5zZm9ybWVyKTtcbiAgY29uc3QgcHJvcFZhbHVlID0gcHJvcHNbcHJvcF07XG4gIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcFZhbHVlLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xufVxuZnVuY3Rpb24gc3R5bGUocHJvcHMsIGtleXMpIHtcbiAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVNwYWNpbmcocHJvcHMudGhlbWUpO1xuICByZXR1cm4gT2JqZWN0LmtleXMocHJvcHMpLm1hcChwcm9wID0+IHJlc29sdmVDc3NQcm9wZXJ0eShwcm9wcywga2V5cywgcHJvcCwgdHJhbnNmb3JtZXIpKS5yZWR1Y2UobWVyZ2UsIHt9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXJnaW4ocHJvcHMpIHtcbiAgcmV0dXJuIHN0eWxlKHByb3BzLCBtYXJnaW5LZXlzKTtcbn1cbm1hcmdpbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gbWFyZ2luS2V5cy5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gIG9ialtrZXldID0gcmVzcG9uc2l2ZVByb3BUeXBlO1xuICByZXR1cm4gb2JqO1xufSwge30pIDoge307XG5tYXJnaW4uZmlsdGVyUHJvcHMgPSBtYXJnaW5LZXlzO1xuZXhwb3J0IGZ1bmN0aW9uIHBhZGRpbmcocHJvcHMpIHtcbiAgcmV0dXJuIHN0eWxlKHByb3BzLCBwYWRkaW5nS2V5cyk7XG59XG5wYWRkaW5nLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBwYWRkaW5nS2V5cy5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gIG9ialtrZXldID0gcmVzcG9uc2l2ZVByb3BUeXBlO1xuICByZXR1cm4gb2JqO1xufSwge30pIDoge307XG5wYWRkaW5nLmZpbHRlclByb3BzID0gcGFkZGluZ0tleXM7XG5mdW5jdGlvbiBzcGFjaW5nKHByb3BzKSB7XG4gIHJldHVybiBzdHlsZShwcm9wcywgc3BhY2luZ0tleXMpO1xufVxuc3BhY2luZy5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gc3BhY2luZ0tleXMucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICBvYmpba2V5XSA9IHJlc3BvbnNpdmVQcm9wVHlwZTtcbiAgcmV0dXJuIG9iajtcbn0sIHt9KSA6IHt9O1xuc3BhY2luZy5maWx0ZXJQcm9wcyA9IHNwYWNpbmdLZXlzO1xuZXhwb3J0IGRlZmF1bHQgc3BhY2luZzsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZW1vaXplKGZuKSB7XG4gIGNvbnN0IGNhY2hlID0ge307XG4gIHJldHVybiBhcmcgPT4ge1xuICAgIGlmIChjYWNoZVthcmddID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNhY2hlW2FyZ10gPSBmbihhcmcpO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn0iLCJpbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICdAbXVpL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHJlc3BvbnNpdmVQcm9wVHlwZSBmcm9tICcuL3Jlc3BvbnNpdmVQcm9wVHlwZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhdGgob2JqLCBwYXRoLCBjaGVja1ZhcnMgPSB0cnVlKSB7XG4gIGlmICghcGF0aCB8fCB0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIENTUyB2YXJpYWJsZXMgYXJlIHVzZWRcbiAgaWYgKG9iaiAmJiBvYmoudmFycyAmJiBjaGVja1ZhcnMpIHtcbiAgICBjb25zdCB2YWwgPSBgdmFycy4ke3BhdGh9YC5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiBhY2MgJiYgYWNjW2l0ZW1dID8gYWNjW2l0ZW1dIDogbnVsbCwgb2JqKTtcbiAgICBpZiAodmFsICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICB9XG4gIHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICBpZiAoYWNjICYmIGFjY1tpdGVtXSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gYWNjW2l0ZW1dO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSwgb2JqKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdHlsZVZhbHVlKHRoZW1lTWFwcGluZywgdHJhbnNmb3JtLCBwcm9wVmFsdWVGaW5hbCwgdXNlclZhbHVlID0gcHJvcFZhbHVlRmluYWwpIHtcbiAgbGV0IHZhbHVlO1xuICBpZiAodHlwZW9mIHRoZW1lTWFwcGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhbHVlID0gdGhlbWVNYXBwaW5nKHByb3BWYWx1ZUZpbmFsKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoZW1lTWFwcGluZykpIHtcbiAgICB2YWx1ZSA9IHRoZW1lTWFwcGluZ1twcm9wVmFsdWVGaW5hbF0gfHwgdXNlclZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlID0gZ2V0UGF0aCh0aGVtZU1hcHBpbmcsIHByb3BWYWx1ZUZpbmFsKSB8fCB1c2VyVmFsdWU7XG4gIH1cbiAgaWYgKHRyYW5zZm9ybSkge1xuICAgIHZhbHVlID0gdHJhbnNmb3JtKHZhbHVlLCB1c2VyVmFsdWUsIHRoZW1lTWFwcGluZyk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gc3R5bGUob3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgcHJvcCxcbiAgICBjc3NQcm9wZXJ0eSA9IG9wdGlvbnMucHJvcCxcbiAgICB0aGVtZUtleSxcbiAgICB0cmFuc2Zvcm1cbiAgfSA9IG9wdGlvbnM7XG5cbiAgLy8gZmFsc2UgcG9zaXRpdmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG4gIGNvbnN0IGZuID0gcHJvcHMgPT4ge1xuICAgIGlmIChwcm9wc1twcm9wXSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcHJvcFZhbHVlID0gcHJvcHNbcHJvcF07XG4gICAgY29uc3QgdGhlbWUgPSBwcm9wcy50aGVtZTtcbiAgICBjb25zdCB0aGVtZU1hcHBpbmcgPSBnZXRQYXRoKHRoZW1lLCB0aGVtZUtleSkgfHwge307XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlRmluYWwgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gZ2V0U3R5bGVWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgcHJvcFZhbHVlRmluYWwpO1xuICAgICAgaWYgKHByb3BWYWx1ZUZpbmFsID09PSB2YWx1ZSAmJiB0eXBlb2YgcHJvcFZhbHVlRmluYWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEhhdmVuJ3QgZm91bmQgdmFsdWVcbiAgICAgICAgdmFsdWUgPSBnZXRTdHlsZVZhbHVlKHRoZW1lTWFwcGluZywgdHJhbnNmb3JtLCBgJHtwcm9wfSR7cHJvcFZhbHVlRmluYWwgPT09ICdkZWZhdWx0JyA/ICcnIDogY2FwaXRhbGl6ZShwcm9wVmFsdWVGaW5hbCl9YCwgcHJvcFZhbHVlRmluYWwpO1xuICAgICAgfVxuICAgICAgaWYgKGNzc1Byb3BlcnR5ID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbY3NzUHJvcGVydHldOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcFZhbHVlLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9O1xuICBmbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICAgIFtwcm9wXTogcmVzcG9uc2l2ZVByb3BUeXBlXG4gIH0gOiB7fTtcbiAgZm4uZmlsdGVyUHJvcHMgPSBbcHJvcF07XG4gIHJldHVybiBmbjtcbn1cbmV4cG9ydCBkZWZhdWx0IHN0eWxlOyIsImltcG9ydCBtZXJnZSBmcm9tICcuL21lcmdlJztcbmZ1bmN0aW9uIGNvbXBvc2UoLi4uc3R5bGVzKSB7XG4gIGNvbnN0IGhhbmRsZXJzID0gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4ge1xuICAgIHN0eWxlLmZpbHRlclByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICBhY2NbcHJvcF0gPSBzdHlsZTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG5cbiAgLy8gZmFsc2UgcG9zaXRpdmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG4gIGNvbnN0IGZuID0gcHJvcHMgPT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcykucmVkdWNlKChhY2MsIHByb3ApID0+IHtcbiAgICAgIGlmIChoYW5kbGVyc1twcm9wXSkge1xuICAgICAgICByZXR1cm4gbWVyZ2UoYWNjLCBoYW5kbGVyc1twcm9wXShwcm9wcykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH07XG4gIGZuLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBzdHlsZXMucmVkdWNlKChhY2MsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGFjYywgc3R5bGUucHJvcFR5cGVzKSwge30pIDoge307XG4gIGZuLmZpbHRlclByb3BzID0gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4gYWNjLmNvbmNhdChzdHlsZS5maWx0ZXJQcm9wcyksIFtdKTtcbiAgcmV0dXJuIGZuO1xufVxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZTsiLCJpbXBvcnQgcmVzcG9uc2l2ZVByb3BUeXBlIGZyb20gJy4vcmVzcG9uc2l2ZVByb3BUeXBlJztcbmltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5pbXBvcnQgeyBjcmVhdGVVbmFyeVVuaXQsIGdldFZhbHVlIH0gZnJvbSAnLi9zcGFjaW5nJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5leHBvcnQgZnVuY3Rpb24gYm9yZGVyVHJhbnNmb3JtKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBgJHt2YWx1ZX1weCBzb2xpZGA7XG59XG5mdW5jdGlvbiBjcmVhdGVCb3JkZXJTdHlsZShwcm9wLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIHN0eWxlKHtcbiAgICBwcm9wLFxuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtXG4gIH0pO1xufVxuZXhwb3J0IGNvbnN0IGJvcmRlciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXInLCBib3JkZXJUcmFuc2Zvcm0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlclRvcCA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJUb3AnLCBib3JkZXJUcmFuc2Zvcm0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlclJpZ2h0ID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlclJpZ2h0JywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJCb3R0b20gPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyQm90dG9tJywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJMZWZ0ID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckxlZnQnLCBib3JkZXJUcmFuc2Zvcm0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlckNvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckNvbG9yJyk7XG5leHBvcnQgY29uc3QgYm9yZGVyVG9wQ29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyVG9wQ29sb3InKTtcbmV4cG9ydCBjb25zdCBib3JkZXJSaWdodENvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlclJpZ2h0Q29sb3InKTtcbmV4cG9ydCBjb25zdCBib3JkZXJCb3R0b21Db2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJCb3R0b21Db2xvcicpO1xuZXhwb3J0IGNvbnN0IGJvcmRlckxlZnRDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJMZWZ0Q29sb3InKTtcbmV4cG9ydCBjb25zdCBvdXRsaW5lID0gY3JlYXRlQm9yZGVyU3R5bGUoJ291dGxpbmUnLCBib3JkZXJUcmFuc2Zvcm0pO1xuZXhwb3J0IGNvbnN0IG91dGxpbmVDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdvdXRsaW5lQ29sb3InKTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuZXhwb3J0IGNvbnN0IGJvcmRlclJhZGl1cyA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLmJvcmRlclJhZGl1cyAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmJvcmRlclJhZGl1cyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlVbml0KHByb3BzLnRoZW1lLCAnc2hhcGUuYm9yZGVyUmFkaXVzJywgNCwgJ2JvcmRlclJhZGl1cycpO1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiAoe1xuICAgICAgYm9yZGVyUmFkaXVzOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMuYm9yZGVyUmFkaXVzLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmJvcmRlclJhZGl1cy5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBib3JkZXJSYWRpdXM6IHJlc3BvbnNpdmVQcm9wVHlwZVxufSA6IHt9O1xuYm9yZGVyUmFkaXVzLmZpbHRlclByb3BzID0gWydib3JkZXJSYWRpdXMnXTtcbmNvbnN0IGJvcmRlcnMgPSBjb21wb3NlKGJvcmRlciwgYm9yZGVyVG9wLCBib3JkZXJSaWdodCwgYm9yZGVyQm90dG9tLCBib3JkZXJMZWZ0LCBib3JkZXJDb2xvciwgYm9yZGVyVG9wQ29sb3IsIGJvcmRlclJpZ2h0Q29sb3IsIGJvcmRlckJvdHRvbUNvbG9yLCBib3JkZXJMZWZ0Q29sb3IsIGJvcmRlclJhZGl1cywgb3V0bGluZSwgb3V0bGluZUNvbG9yKTtcbmV4cG9ydCBkZWZhdWx0IGJvcmRlcnM7IiwiaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IGNvbXBvc2UgZnJvbSAnLi9jb21wb3NlJztcbmltcG9ydCB7IGNyZWF0ZVVuYXJ5VW5pdCwgZ2V0VmFsdWUgfSBmcm9tICcuL3NwYWNpbmcnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmltcG9ydCByZXNwb25zaXZlUHJvcFR5cGUgZnJvbSAnLi9yZXNwb25zaXZlUHJvcFR5cGUnO1xuXG4vLyBmYWxzZSBwb3NpdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG5leHBvcnQgY29uc3QgZ2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuZ2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZ2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVVuaXQocHJvcHMudGhlbWUsICdzcGFjaW5nJywgOCwgJ2dhcCcpO1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiAoe1xuICAgICAgZ2FwOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMuZ2FwLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmdhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBnYXA6IHJlc3BvbnNpdmVQcm9wVHlwZVxufSA6IHt9O1xuZ2FwLmZpbHRlclByb3BzID0gWydnYXAnXTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuZXhwb3J0IGNvbnN0IGNvbHVtbkdhcCA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLmNvbHVtbkdhcCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmNvbHVtbkdhcCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlVbml0KHByb3BzLnRoZW1lLCAnc3BhY2luZycsIDgsICdjb2x1bW5HYXAnKTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIGNvbHVtbkdhcDogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BzLmNvbHVtbkdhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5jb2x1bW5HYXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgY29sdW1uR2FwOiByZXNwb25zaXZlUHJvcFR5cGVcbn0gOiB7fTtcbmNvbHVtbkdhcC5maWx0ZXJQcm9wcyA9IFsnY29sdW1uR2FwJ107XG5cbi8vIGZhbHNlIHBvc2l0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbmV4cG9ydCBjb25zdCByb3dHYXAgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5yb3dHYXAgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5yb3dHYXAgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5VW5pdChwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAncm93R2FwJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICByb3dHYXA6IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgfSk7XG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wcy5yb3dHYXAsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xucm93R2FwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gIHJvd0dhcDogcmVzcG9uc2l2ZVByb3BUeXBlXG59IDoge307XG5yb3dHYXAuZmlsdGVyUHJvcHMgPSBbJ3Jvd0dhcCddO1xuZXhwb3J0IGNvbnN0IGdyaWRDb2x1bW4gPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQ29sdW1uJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZFJvdyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRSb3cnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkQXV0b0Zsb3cgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQXV0b0Zsb3cnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkQXV0b0NvbHVtbnMgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQXV0b0NvbHVtbnMnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkQXV0b1Jvd3MgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQXV0b1Jvd3MnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkVGVtcGxhdGVDb2x1bW5zID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZFRlbXBsYXRlQ29sdW1ucydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRUZW1wbGF0ZVJvd3MgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkVGVtcGxhdGVSb3dzJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZFRlbXBsYXRlQXJlYXMgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkVGVtcGxhdGVBcmVhcydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRBcmVhID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZEFyZWEnXG59KTtcbmNvbnN0IGdyaWQgPSBjb21wb3NlKGdhcCwgY29sdW1uR2FwLCByb3dHYXAsIGdyaWRDb2x1bW4sIGdyaWRSb3csIGdyaWRBdXRvRmxvdywgZ3JpZEF1dG9Db2x1bW5zLCBncmlkQXV0b1Jvd3MsIGdyaWRUZW1wbGF0ZUNvbHVtbnMsIGdyaWRUZW1wbGF0ZVJvd3MsIGdyaWRUZW1wbGF0ZUFyZWFzLCBncmlkQXJlYSk7XG5leHBvcnQgZGVmYXVsdCBncmlkOyIsImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5leHBvcnQgZnVuY3Rpb24gcGFsZXR0ZVRyYW5zZm9ybSh2YWx1ZSwgdXNlclZhbHVlKSB7XG4gIGlmICh1c2VyVmFsdWUgPT09ICdncmV5Jykge1xuICAgIHJldHVybiB1c2VyVmFsdWU7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuZXhwb3J0IGNvbnN0IGNvbG9yID0gc3R5bGUoe1xuICBwcm9wOiAnY29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGJnY29sb3IgPSBzdHlsZSh7XG4gIHByb3A6ICdiZ2NvbG9yJyxcbiAgY3NzUHJvcGVydHk6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRDb2xvciA9IHN0eWxlKHtcbiAgcHJvcDogJ2JhY2tncm91bmRDb2xvcicsXG4gIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxufSk7XG5jb25zdCBwYWxldHRlID0gY29tcG9zZShjb2xvciwgYmdjb2xvciwgYmFja2dyb3VuZENvbG9yKTtcbmV4cG9ydCBkZWZhdWx0IHBhbGV0dGU7IiwiaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IGNvbXBvc2UgZnJvbSAnLi9jb21wb3NlJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzLCB2YWx1ZXMgYXMgYnJlYWtwb2ludHNWYWx1ZXMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmV4cG9ydCBmdW5jdGlvbiBzaXppbmdUcmFuc2Zvcm0odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIDw9IDEgJiYgdmFsdWUgIT09IDAgPyBgJHt2YWx1ZSAqIDEwMH0lYCA6IHZhbHVlO1xufVxuZXhwb3J0IGNvbnN0IHdpZHRoID0gc3R5bGUoe1xuICBwcm9wOiAnd2lkdGgnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgbWF4V2lkdGggPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5tYXhXaWR0aCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLm1heFdpZHRoICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+IHtcbiAgICAgIHZhciBfcHJvcHMkdGhlbWUsIF9wcm9wcyR0aGVtZTI7XG4gICAgICBjb25zdCBicmVha3BvaW50ID0gKChfcHJvcHMkdGhlbWUgPSBwcm9wcy50aGVtZSkgPT0gbnVsbCB8fCAoX3Byb3BzJHRoZW1lID0gX3Byb3BzJHRoZW1lLmJyZWFrcG9pbnRzKSA9PSBudWxsIHx8IChfcHJvcHMkdGhlbWUgPSBfcHJvcHMkdGhlbWUudmFsdWVzKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lW3Byb3BWYWx1ZV0pIHx8IGJyZWFrcG9pbnRzVmFsdWVzW3Byb3BWYWx1ZV07XG4gICAgICBpZiAoIWJyZWFrcG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtYXhXaWR0aDogc2l6aW5nVHJhbnNmb3JtKHByb3BWYWx1ZSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmICgoKF9wcm9wcyR0aGVtZTIgPSBwcm9wcy50aGVtZSkgPT0gbnVsbCB8fCAoX3Byb3BzJHRoZW1lMiA9IF9wcm9wcyR0aGVtZTIuYnJlYWtwb2ludHMpID09IG51bGwgPyB2b2lkIDAgOiBfcHJvcHMkdGhlbWUyLnVuaXQpICE9PSAncHgnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF4V2lkdGg6IGAke2JyZWFrcG9pbnR9JHtwcm9wcy50aGVtZS5icmVha3BvaW50cy51bml0fWBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1heFdpZHRoOiBicmVha3BvaW50XG4gICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wcy5tYXhXaWR0aCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5tYXhXaWR0aC5maWx0ZXJQcm9wcyA9IFsnbWF4V2lkdGgnXTtcbmV4cG9ydCBjb25zdCBtaW5XaWR0aCA9IHN0eWxlKHtcbiAgcHJvcDogJ21pbldpZHRoJyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGhlaWdodCA9IHN0eWxlKHtcbiAgcHJvcDogJ2hlaWdodCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBtYXhIZWlnaHQgPSBzdHlsZSh7XG4gIHByb3A6ICdtYXhIZWlnaHQnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgbWluSGVpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAnbWluSGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IHNpemVXaWR0aCA9IHN0eWxlKHtcbiAgcHJvcDogJ3NpemUnLFxuICBjc3NQcm9wZXJ0eTogJ3dpZHRoJyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IHNpemVIZWlnaHQgPSBzdHlsZSh7XG4gIHByb3A6ICdzaXplJyxcbiAgY3NzUHJvcGVydHk6ICdoZWlnaHQnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgYm94U2l6aW5nID0gc3R5bGUoe1xuICBwcm9wOiAnYm94U2l6aW5nJ1xufSk7XG5jb25zdCBzaXppbmcgPSBjb21wb3NlKHdpZHRoLCBtYXhXaWR0aCwgbWluV2lkdGgsIGhlaWdodCwgbWF4SGVpZ2h0LCBtaW5IZWlnaHQsIGJveFNpemluZyk7XG5leHBvcnQgZGVmYXVsdCBzaXppbmc7IiwiaW1wb3J0IHsgcGFkZGluZywgbWFyZ2luIH0gZnJvbSAnLi4vc3BhY2luZyc7XG5pbXBvcnQgeyBib3JkZXJSYWRpdXMsIGJvcmRlclRyYW5zZm9ybSB9IGZyb20gJy4uL2JvcmRlcnMnO1xuaW1wb3J0IHsgZ2FwLCByb3dHYXAsIGNvbHVtbkdhcCB9IGZyb20gJy4uL2Nzc0dyaWQnO1xuaW1wb3J0IHsgcGFsZXR0ZVRyYW5zZm9ybSB9IGZyb20gJy4uL3BhbGV0dGUnO1xuaW1wb3J0IHsgbWF4V2lkdGgsIHNpemluZ1RyYW5zZm9ybSB9IGZyb20gJy4uL3NpemluZyc7XG5jb25zdCBkZWZhdWx0U3hDb25maWcgPSB7XG4gIC8vIGJvcmRlcnNcbiAgYm9yZGVyOiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IGJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJUb3A6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlclJpZ2h0OiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IGJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJCb3R0b206IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlckxlZnQ6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlckNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJUb3BDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyUmlnaHRDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyQm90dG9tQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlckxlZnRDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgb3V0bGluZToge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgb3V0bGluZUNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJSYWRpdXM6IHtcbiAgICB0aGVtZUtleTogJ3NoYXBlLmJvcmRlclJhZGl1cycsXG4gICAgc3R5bGU6IGJvcmRlclJhZGl1c1xuICB9LFxuICAvLyBwYWxldHRlXG4gIGNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbiAgfSxcbiAgYmdjb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gICAgY3NzUHJvcGVydHk6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICAgIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxuICB9LFxuICBiYWNrZ3JvdW5kQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICAgIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxuICB9LFxuICAvLyBzcGFjaW5nXG4gIHA6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwdDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHByOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGI6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwbDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHB4OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcHk6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1RvcDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdSaWdodDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCb3R0b206IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nTGVmdDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdYOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1k6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nSW5saW5lOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0lubGluZVN0YXJ0OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0lubGluZUVuZDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCbG9jazoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCbG9ja1N0YXJ0OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0Jsb2NrRW5kOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgbToge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbXQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1yOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYjoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWw6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG14OiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBteToge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5Ub3A6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpblJpZ2h0OiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5Cb3R0b206IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbkxlZnQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpblg6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpblk6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbklubGluZToge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luSW5saW5lU3RhcnQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbklubGluZUVuZDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luQmxvY2s6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJsb2NrU3RhcnQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJsb2NrRW5kOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICAvLyBkaXNwbGF5XG4gIGRpc3BsYXlQcmludDoge1xuICAgIGNzc1Byb3BlcnR5OiBmYWxzZSxcbiAgICB0cmFuc2Zvcm06IHZhbHVlID0+ICh7XG4gICAgICAnQG1lZGlhIHByaW50Jzoge1xuICAgICAgICBkaXNwbGF5OiB2YWx1ZVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG4gIGRpc3BsYXk6IHt9LFxuICBvdmVyZmxvdzoge30sXG4gIHRleHRPdmVyZmxvdzoge30sXG4gIHZpc2liaWxpdHk6IHt9LFxuICB3aGl0ZVNwYWNlOiB7fSxcbiAgLy8gZmxleGJveFxuICBmbGV4QmFzaXM6IHt9LFxuICBmbGV4RGlyZWN0aW9uOiB7fSxcbiAgZmxleFdyYXA6IHt9LFxuICBqdXN0aWZ5Q29udGVudDoge30sXG4gIGFsaWduSXRlbXM6IHt9LFxuICBhbGlnbkNvbnRlbnQ6IHt9LFxuICBvcmRlcjoge30sXG4gIGZsZXg6IHt9LFxuICBmbGV4R3Jvdzoge30sXG4gIGZsZXhTaHJpbms6IHt9LFxuICBhbGlnblNlbGY6IHt9LFxuICBqdXN0aWZ5SXRlbXM6IHt9LFxuICBqdXN0aWZ5U2VsZjoge30sXG4gIC8vIGdyaWRcbiAgZ2FwOiB7XG4gICAgc3R5bGU6IGdhcFxuICB9LFxuICByb3dHYXA6IHtcbiAgICBzdHlsZTogcm93R2FwXG4gIH0sXG4gIGNvbHVtbkdhcDoge1xuICAgIHN0eWxlOiBjb2x1bW5HYXBcbiAgfSxcbiAgZ3JpZENvbHVtbjoge30sXG4gIGdyaWRSb3c6IHt9LFxuICBncmlkQXV0b0Zsb3c6IHt9LFxuICBncmlkQXV0b0NvbHVtbnM6IHt9LFxuICBncmlkQXV0b1Jvd3M6IHt9LFxuICBncmlkVGVtcGxhdGVDb2x1bW5zOiB7fSxcbiAgZ3JpZFRlbXBsYXRlUm93czoge30sXG4gIGdyaWRUZW1wbGF0ZUFyZWFzOiB7fSxcbiAgZ3JpZEFyZWE6IHt9LFxuICAvLyBwb3NpdGlvbnNcbiAgcG9zaXRpb246IHt9LFxuICB6SW5kZXg6IHtcbiAgICB0aGVtZUtleTogJ3pJbmRleCdcbiAgfSxcbiAgdG9wOiB7fSxcbiAgcmlnaHQ6IHt9LFxuICBib3R0b206IHt9LFxuICBsZWZ0OiB7fSxcbiAgLy8gc2hhZG93c1xuICBib3hTaGFkb3c6IHtcbiAgICB0aGVtZUtleTogJ3NoYWRvd3MnXG4gIH0sXG4gIC8vIHNpemluZ1xuICB3aWR0aDoge1xuICAgIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG4gIH0sXG4gIG1heFdpZHRoOiB7XG4gICAgc3R5bGU6IG1heFdpZHRoXG4gIH0sXG4gIG1pbldpZHRoOiB7XG4gICAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgaGVpZ2h0OiB7XG4gICAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgbWF4SGVpZ2h0OiB7XG4gICAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgbWluSGVpZ2h0OiB7XG4gICAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgYm94U2l6aW5nOiB7fSxcbiAgLy8gdHlwb2dyYXBoeVxuICBmb250RmFtaWx5OiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBmb250U2l6ZToge1xuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfSxcbiAgZm9udFN0eWxlOiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBmb250V2VpZ2h0OiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBsZXR0ZXJTcGFjaW5nOiB7fSxcbiAgdGV4dFRyYW5zZm9ybToge30sXG4gIGxpbmVIZWlnaHQ6IHt9LFxuICB0ZXh0QWxpZ246IHt9LFxuICB0eXBvZ3JhcGh5OiB7XG4gICAgY3NzUHJvcGVydHk6IGZhbHNlLFxuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRTeENvbmZpZzsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wic3hcIl07XG5pbXBvcnQgeyBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuaW1wb3J0IGRlZmF1bHRTeENvbmZpZyBmcm9tICcuL2RlZmF1bHRTeENvbmZpZyc7XG5jb25zdCBzcGxpdFByb3BzID0gcHJvcHMgPT4ge1xuICB2YXIgX3Byb3BzJHRoZW1lJHVuc3RhYmxlLCBfcHJvcHMkdGhlbWU7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBzeXN0ZW1Qcm9wczoge30sXG4gICAgb3RoZXJQcm9wczoge31cbiAgfTtcbiAgY29uc3QgY29uZmlnID0gKF9wcm9wcyR0aGVtZSR1bnN0YWJsZSA9IHByb3BzID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZSA9IHByb3BzLnRoZW1lKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnKSAhPSBudWxsID8gX3Byb3BzJHRoZW1lJHVuc3RhYmxlIDogZGVmYXVsdFN4Q29uZmlnO1xuICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChwcm9wID0+IHtcbiAgICBpZiAoY29uZmlnW3Byb3BdKSB7XG4gICAgICByZXN1bHQuc3lzdGVtUHJvcHNbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0Lm90aGVyUHJvcHNbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4dGVuZFN4UHJvcChwcm9wcykge1xuICBjb25zdCB7XG4gICAgICBzeDogaW5TeFxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCB7XG4gICAgc3lzdGVtUHJvcHMsXG4gICAgb3RoZXJQcm9wc1xuICB9ID0gc3BsaXRQcm9wcyhvdGhlcik7XG4gIGxldCBmaW5hbFN4O1xuICBpZiAoQXJyYXkuaXNBcnJheShpblN4KSkge1xuICAgIGZpbmFsU3ggPSBbc3lzdGVtUHJvcHMsIC4uLmluU3hdO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBpblN4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZmluYWxTeCA9ICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpblN4KC4uLmFyZ3MpO1xuICAgICAgaWYgKCFpc1BsYWluT2JqZWN0KHJlc3VsdCkpIHtcbiAgICAgICAgcmV0dXJuIHN5c3RlbVByb3BzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzeXN0ZW1Qcm9wcywgcmVzdWx0KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGZpbmFsU3ggPSBfZXh0ZW5kcyh7fSwgc3lzdGVtUHJvcHMsIGluU3gpO1xuICB9XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3RoZXJQcm9wcywge1xuICAgIHN4OiBmaW5hbFN4XG4gIH0pO1xufSIsImltcG9ydCBjYXBpdGFsaXplIGZyb20gJ0BtdWkvdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAnLi4vbWVyZ2UnO1xuaW1wb3J0IHsgZ2V0UGF0aCwgZ2V0U3R5bGVWYWx1ZSBhcyBnZXRWYWx1ZSB9IGZyb20gJy4uL3N0eWxlJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzLCBjcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QsIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzIH0gZnJvbSAnLi4vYnJlYWtwb2ludHMnO1xuaW1wb3J0IGRlZmF1bHRTeENvbmZpZyBmcm9tICcuL2RlZmF1bHRTeENvbmZpZyc7XG5mdW5jdGlvbiBvYmplY3RzSGF2ZVNhbWVLZXlzKC4uLm9iamVjdHMpIHtcbiAgY29uc3QgYWxsS2V5cyA9IG9iamVjdHMucmVkdWNlKChrZXlzLCBvYmplY3QpID0+IGtleXMuY29uY2F0KE9iamVjdC5rZXlzKG9iamVjdCkpLCBbXSk7XG4gIGNvbnN0IHVuaW9uID0gbmV3IFNldChhbGxLZXlzKTtcbiAgcmV0dXJuIG9iamVjdHMuZXZlcnkob2JqZWN0ID0+IHVuaW9uLnNpemUgPT09IE9iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoKTtcbn1cbmZ1bmN0aW9uIGNhbGxJZkZuKG1heWJlRm4sIGFyZykge1xuICByZXR1cm4gdHlwZW9mIG1heWJlRm4gPT09ICdmdW5jdGlvbicgPyBtYXliZUZuKGFyZykgOiBtYXliZUZuO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgZnVuY3Rpb24gdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4KCkge1xuICBmdW5jdGlvbiBnZXRUaGVtZVZhbHVlKHByb3AsIHZhbCwgdGhlbWUsIGNvbmZpZykge1xuICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgW3Byb3BdOiB2YWwsXG4gICAgICB0aGVtZVxuICAgIH07XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbmZpZ1twcm9wXTtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtwcm9wXTogdmFsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB7XG4gICAgICBjc3NQcm9wZXJ0eSA9IHByb3AsXG4gICAgICB0aGVtZUtleSxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHN0eWxlXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgaWYgKHZhbCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBUT0RPIHY2OiByZW1vdmUsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzgxMjNcbiAgICBpZiAodGhlbWVLZXkgPT09ICd0eXBvZ3JhcGh5JyAmJiB2YWwgPT09ICdpbmhlcml0Jykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW3Byb3BdOiB2YWxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHRoZW1lTWFwcGluZyA9IGdldFBhdGgodGhlbWUsIHRoZW1lS2V5KSB8fCB7fTtcbiAgICBpZiAoc3R5bGUpIHtcbiAgICAgIHJldHVybiBzdHlsZShwcm9wcyk7XG4gICAgfVxuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGdldFZhbHVlKHRoZW1lTWFwcGluZywgdHJhbnNmb3JtLCBwcm9wVmFsdWVGaW5hbCk7XG4gICAgICBpZiAocHJvcFZhbHVlRmluYWwgPT09IHZhbHVlICYmIHR5cGVvZiBwcm9wVmFsdWVGaW5hbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gSGF2ZW4ndCBmb3VuZCB2YWx1ZVxuICAgICAgICB2YWx1ZSA9IGdldFZhbHVlKHRoZW1lTWFwcGluZywgdHJhbnNmb3JtLCBgJHtwcm9wfSR7cHJvcFZhbHVlRmluYWwgPT09ICdkZWZhdWx0JyA/ICcnIDogY2FwaXRhbGl6ZShwcm9wVmFsdWVGaW5hbCl9YCwgcHJvcFZhbHVlRmluYWwpO1xuICAgICAgfVxuICAgICAgaWYgKGNzc1Byb3BlcnR5ID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbY3NzUHJvcGVydHldOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgdmFsLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIGZ1bmN0aW9uIHN0eWxlRnVuY3Rpb25TeChwcm9wcykge1xuICAgIHZhciBfdGhlbWUkdW5zdGFibGVfc3hDb247XG4gICAgY29uc3Qge1xuICAgICAgc3gsXG4gICAgICB0aGVtZSA9IHt9XG4gICAgfSA9IHByb3BzIHx8IHt9O1xuICAgIGlmICghc3gpIHtcbiAgICAgIHJldHVybiBudWxsOyAvLyBFbW90aW9uICYgc3R5bGVkLWNvbXBvbmVudHMgd2lsbCBuZWdsZWN0IG51bGxcbiAgICB9XG4gICAgY29uc3QgY29uZmlnID0gKF90aGVtZSR1bnN0YWJsZV9zeENvbiA9IHRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnKSAhPSBudWxsID8gX3RoZW1lJHVuc3RhYmxlX3N4Q29uIDogZGVmYXVsdFN4Q29uZmlnO1xuXG4gICAgLypcbiAgICAgKiBSZWNlaXZlIGBzeElucHV0YCBhcyBvYmplY3Qgb3IgY2FsbGJhY2tcbiAgICAgKiBhbmQgdGhlbiByZWN1cnNpdmVseSBjaGVjayBrZXlzICYgdmFsdWVzIHRvIGNyZWF0ZSBtZWRpYSBxdWVyeSBvYmplY3Qgc3R5bGVzLlxuICAgICAqICh0aGUgcmVzdWx0IHdpbGwgYmUgdXNlZCBpbiBgc3R5bGVkYClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmF2ZXJzZShzeElucHV0KSB7XG4gICAgICBsZXQgc3hPYmplY3QgPSBzeElucHV0O1xuICAgICAgaWYgKHR5cGVvZiBzeElucHV0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHN4T2JqZWN0ID0gc3hJbnB1dCh0aGVtZSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzeElucHV0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyB2YWx1ZVxuICAgICAgICByZXR1cm4gc3hJbnB1dDtcbiAgICAgIH1cbiAgICAgIGlmICghc3hPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBlbXB0eUJyZWFrcG9pbnRzID0gY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0KHRoZW1lLmJyZWFrcG9pbnRzKTtcbiAgICAgIGNvbnN0IGJyZWFrcG9pbnRzS2V5cyA9IE9iamVjdC5rZXlzKGVtcHR5QnJlYWtwb2ludHMpO1xuICAgICAgbGV0IGNzcyA9IGVtcHR5QnJlYWtwb2ludHM7XG4gICAgICBPYmplY3Qua2V5cyhzeE9iamVjdCkuZm9yRWFjaChzdHlsZUtleSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY2FsbElmRm4oc3hPYmplY3Rbc3R5bGVLZXldLCB0aGVtZSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmIChjb25maWdbc3R5bGVLZXldKSB7XG4gICAgICAgICAgICAgIGNzcyA9IG1lcmdlKGNzcywgZ2V0VGhlbWVWYWx1ZShzdHlsZUtleSwgdmFsdWUsIHRoZW1lLCBjb25maWcpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGJyZWFrcG9pbnRzVmFsdWVzID0gaGFuZGxlQnJlYWtwb2ludHMoe1xuICAgICAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgICAgIH0sIHZhbHVlLCB4ID0+ICh7XG4gICAgICAgICAgICAgICAgW3N0eWxlS2V5XTogeFxuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIGlmIChvYmplY3RzSGF2ZVNhbWVLZXlzKGJyZWFrcG9pbnRzVmFsdWVzLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjc3Nbc3R5bGVLZXldID0gc3R5bGVGdW5jdGlvblN4KHtcbiAgICAgICAgICAgICAgICAgIHN4OiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3NzID0gbWVyZ2UoY3NzLCBicmVha3BvaW50c1ZhbHVlcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3NzID0gbWVyZ2UoY3NzLCBnZXRUaGVtZVZhbHVlKHN0eWxlS2V5LCB2YWx1ZSwgdGhlbWUsIGNvbmZpZykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVtb3ZlVW51c2VkQnJlYWtwb2ludHMoYnJlYWtwb2ludHNLZXlzLCBjc3MpO1xuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShzeCkgPyBzeC5tYXAodHJhdmVyc2UpIDogdHJhdmVyc2Uoc3gpO1xuICB9XG4gIHJldHVybiBzdHlsZUZ1bmN0aW9uU3g7XG59XG5jb25zdCBzdHlsZUZ1bmN0aW9uU3ggPSB1bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3goKTtcbnN0eWxlRnVuY3Rpb25TeC5maWx0ZXJQcm9wcyA9IFsnc3gnXTtcbmV4cG9ydCBkZWZhdWx0IHN0eWxlRnVuY3Rpb25TeDsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wib3duZXJTdGF0ZVwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcInZhcmlhbnRzXCJdLFxuICBfZXhjbHVkZWQzID0gW1wibmFtZVwiLCBcInNsb3RcIiwgXCJza2lwVmFyaWFudHNSZXNvbHZlclwiLCBcInNraXBTeFwiLCBcIm92ZXJyaWRlc1Jlc29sdmVyXCJdO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmltcG9ydCBzdHlsZWRFbmdpbmVTdHlsZWQsIHsgaW50ZXJuYWxfcHJvY2Vzc1N0eWxlcyBhcyBwcm9jZXNzU3R5bGVzIH0gZnJvbSAnQG11aS9zdHlsZWQtZW5naW5lJztcbmltcG9ydCB7IGlzUGxhaW5PYmplY3QgfSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICdAbXVpL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IGdldERpc3BsYXlOYW1lIGZyb20gJ0BtdWkvdXRpbHMvZ2V0RGlzcGxheU5hbWUnO1xuaW1wb3J0IGNyZWF0ZVRoZW1lIGZyb20gJy4vY3JlYXRlVGhlbWUnO1xuaW1wb3J0IHN0eWxlRnVuY3Rpb25TeCBmcm9tICcuL3N0eWxlRnVuY3Rpb25TeCc7XG5mdW5jdGlvbiBpc0VtcHR5KG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lbW90aW9uLWpzL2Vtb3Rpb24vYmxvYi8yNmRlZDYxMDlmY2Q4Y2E5ODc1Y2MyY2U0NTY0ZmVlNjc4YTNmM2M1L3BhY2thZ2VzL3N0eWxlZC9zcmMvdXRpbHMuanMjTDQwXG5mdW5jdGlvbiBpc1N0cmluZ1RhZyh0YWcpIHtcbiAgcmV0dXJuIHR5cGVvZiB0YWcgPT09ICdzdHJpbmcnICYmXG4gIC8vIDk2IGlzIG9uZSBsZXNzIHRoYW4gdGhlIGNoYXIgY29kZVxuICAvLyBmb3IgXCJhXCIgc28gdGhpcyBpcyBjaGVja2luZyB0aGF0XG4gIC8vIGl0J3MgYSBsb3dlcmNhc2UgY2hhcmFjdGVyXG4gIHRhZy5jaGFyQ29kZUF0KDApID4gOTY7XG59XG5cbi8vIFVwZGF0ZSAvc3lzdGVtL3N0eWxlZC8jYXBpIGluIGNhc2UgaWYgdGhpcyBjaGFuZ2VzXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkRm9yd2FyZFByb3AocHJvcCkge1xuICByZXR1cm4gcHJvcCAhPT0gJ293bmVyU3RhdGUnICYmIHByb3AgIT09ICd0aGVtZScgJiYgcHJvcCAhPT0gJ3N4JyAmJiBwcm9wICE9PSAnYXMnO1xufVxuZXhwb3J0IGNvbnN0IHN5c3RlbURlZmF1bHRUaGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5jb25zdCBsb3dlcmNhc2VGaXJzdExldHRlciA9IHN0cmluZyA9PiB7XG4gIGlmICghc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xufTtcbmZ1bmN0aW9uIHJlc29sdmVUaGVtZSh7XG4gIGRlZmF1bHRUaGVtZSxcbiAgdGhlbWUsXG4gIHRoZW1lSWRcbn0pIHtcbiAgcmV0dXJuIGlzRW1wdHkodGhlbWUpID8gZGVmYXVsdFRoZW1lIDogdGhlbWVbdGhlbWVJZF0gfHwgdGhlbWU7XG59XG5mdW5jdGlvbiBkZWZhdWx0T3ZlcnJpZGVzUmVzb2x2ZXIoc2xvdCkge1xuICBpZiAoIXNsb3QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlc1tzbG90XTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3NTdHlsZUFyZyhjYWxsYWJsZVN0eWxlLCBfcmVmKSB7XG4gIGxldCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IF9yZWYsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfcmVmLCBfZXhjbHVkZWQpO1xuICBjb25zdCByZXNvbHZlZFN0eWxlc0FyZyA9IHR5cGVvZiBjYWxsYWJsZVN0eWxlID09PSAnZnVuY3Rpb24nID8gY2FsbGFibGVTdHlsZShfZXh0ZW5kcyh7XG4gICAgb3duZXJTdGF0ZVxuICB9LCBwcm9wcykpIDogY2FsbGFibGVTdHlsZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocmVzb2x2ZWRTdHlsZXNBcmcpKSB7XG4gICAgcmV0dXJuIHJlc29sdmVkU3R5bGVzQXJnLmZsYXRNYXAocmVzb2x2ZWRTdHlsZSA9PiBwcm9jZXNzU3R5bGVBcmcocmVzb2x2ZWRTdHlsZSwgX2V4dGVuZHMoe1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0sIHByb3BzKSkpO1xuICB9XG4gIGlmICghIXJlc29sdmVkU3R5bGVzQXJnICYmIHR5cGVvZiByZXNvbHZlZFN0eWxlc0FyZyA9PT0gJ29iamVjdCcgJiYgQXJyYXkuaXNBcnJheShyZXNvbHZlZFN0eWxlc0FyZy52YXJpYW50cykpIHtcbiAgICBjb25zdCB7XG4gICAgICAgIHZhcmlhbnRzID0gW11cbiAgICAgIH0gPSByZXNvbHZlZFN0eWxlc0FyZyxcbiAgICAgIG90aGVyU3R5bGVzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocmVzb2x2ZWRTdHlsZXNBcmcsIF9leGNsdWRlZDIpO1xuICAgIGxldCByZXN1bHQgPSBvdGhlclN0eWxlcztcbiAgICB2YXJpYW50cy5mb3JFYWNoKHZhcmlhbnQgPT4ge1xuICAgICAgbGV0IGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgaWYgKHR5cGVvZiB2YXJpYW50LnByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlzTWF0Y2ggPSB2YXJpYW50LnByb3BzKF9leHRlbmRzKHtcbiAgICAgICAgICBvd25lclN0YXRlXG4gICAgICAgIH0sIHByb3BzLCBvd25lclN0YXRlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3Qua2V5cyh2YXJpYW50LnByb3BzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgaWYgKChvd25lclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvd25lclN0YXRlW2tleV0pICE9PSB2YXJpYW50LnByb3BzW2tleV0gJiYgcHJvcHNba2V5XSAhPT0gdmFyaWFudC5wcm9wc1trZXldKSB7XG4gICAgICAgICAgICBpc01hdGNoID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChpc01hdGNoKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gW3Jlc3VsdF07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnB1c2godHlwZW9mIHZhcmlhbnQuc3R5bGUgPT09ICdmdW5jdGlvbicgPyB2YXJpYW50LnN0eWxlKF9leHRlbmRzKHtcbiAgICAgICAgICBvd25lclN0YXRlXG4gICAgICAgIH0sIHByb3BzLCBvd25lclN0YXRlKSkgOiB2YXJpYW50LnN0eWxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJldHVybiByZXNvbHZlZFN0eWxlc0FyZztcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVN0eWxlZChpbnB1dCA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0aGVtZUlkLFxuICAgIGRlZmF1bHRUaGVtZSA9IHN5c3RlbURlZmF1bHRUaGVtZSxcbiAgICByb290U2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcCxcbiAgICBzbG90U2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcFxuICB9ID0gaW5wdXQ7XG4gIGNvbnN0IHN5c3RlbVN4ID0gcHJvcHMgPT4ge1xuICAgIHJldHVybiBzdHlsZUZ1bmN0aW9uU3goX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICB0aGVtZTogcmVzb2x2ZVRoZW1lKF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgIHRoZW1lSWRcbiAgICAgIH0pKVxuICAgIH0pKTtcbiAgfTtcbiAgc3lzdGVtU3guX19tdWlfc3lzdGVtU3ggPSB0cnVlO1xuICByZXR1cm4gKHRhZywgaW5wdXRPcHRpb25zID0ge30pID0+IHtcbiAgICAvLyBGaWx0ZXIgb3V0IHRoZSBgc3hgIHN0eWxlIGZ1bmN0aW9uIGZyb20gdGhlIHByZXZpb3VzIHN0eWxlZCBjb21wb25lbnQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBzdHlsZXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb21wb3NpdGUgY29tcG9uZW50cy5cbiAgICBwcm9jZXNzU3R5bGVzKHRhZywgc3R5bGVzID0+IHN0eWxlcy5maWx0ZXIoc3R5bGUgPT4gIShzdHlsZSAhPSBudWxsICYmIHN0eWxlLl9fbXVpX3N5c3RlbVN4KSkpO1xuICAgIGNvbnN0IHtcbiAgICAgICAgbmFtZTogY29tcG9uZW50TmFtZSxcbiAgICAgICAgc2xvdDogY29tcG9uZW50U2xvdCxcbiAgICAgICAgc2tpcFZhcmlhbnRzUmVzb2x2ZXI6IGlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIsXG4gICAgICAgIHNraXBTeDogaW5wdXRTa2lwU3gsXG4gICAgICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgbG93ZXJjYXNlRmlyc3RMZXR0ZXIoKWAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgICAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICAgICAgb3ZlcnJpZGVzUmVzb2x2ZXIgPSBkZWZhdWx0T3ZlcnJpZGVzUmVzb2x2ZXIobG93ZXJjYXNlRmlyc3RMZXR0ZXIoY29tcG9uZW50U2xvdCkpXG4gICAgICB9ID0gaW5wdXRPcHRpb25zLFxuICAgICAgb3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGlucHV0T3B0aW9ucywgX2V4Y2x1ZGVkMyk7XG5cbiAgICAvLyBpZiBza2lwVmFyaWFudHNSZXNvbHZlciBvcHRpb24gaXMgZGVmaW5lZCwgdGFrZSB0aGUgdmFsdWUsIG90aGVyd2lzZSwgdHJ1ZSBmb3Igcm9vdCBhbmQgZmFsc2UgZm9yIG90aGVyIHNsb3RzLlxuICAgIGNvbnN0IHNraXBWYXJpYW50c1Jlc29sdmVyID0gaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlciAhPT0gdW5kZWZpbmVkID8gaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlciA6XG4gICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBSb290YCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgLy8gRm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM3OTA4XG4gICAgY29tcG9uZW50U2xvdCAmJiBjb21wb25lbnRTbG90ICE9PSAnUm9vdCcgJiYgY29tcG9uZW50U2xvdCAhPT0gJ3Jvb3QnIHx8IGZhbHNlO1xuICAgIGNvbnN0IHNraXBTeCA9IGlucHV0U2tpcFN4IHx8IGZhbHNlO1xuICAgIGxldCBsYWJlbDtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBsb3dlcmNhc2VGaXJzdExldHRlcigpYCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgICAgICBsYWJlbCA9IGAke2NvbXBvbmVudE5hbWV9LSR7bG93ZXJjYXNlRmlyc3RMZXR0ZXIoY29tcG9uZW50U2xvdCB8fCAnUm9vdCcpfWA7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHNob3VsZEZvcndhcmRQcm9wO1xuXG4gICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBSb290YCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgLy8gRm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM3OTA4XG4gICAgaWYgKGNvbXBvbmVudFNsb3QgPT09ICdSb290JyB8fCBjb21wb25lbnRTbG90ID09PSAncm9vdCcpIHtcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gcm9vdFNob3VsZEZvcndhcmRQcm9wO1xuICAgIH0gZWxzZSBpZiAoY29tcG9uZW50U2xvdCkge1xuICAgICAgLy8gYW55IG90aGVyIHNsb3Qgc3BlY2lmaWVkXG4gICAgICBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHNsb3RTaG91bGRGb3J3YXJkUHJvcDtcbiAgICB9IGVsc2UgaWYgKGlzU3RyaW5nVGFnKHRhZykpIHtcbiAgICAgIC8vIGZvciBzdHJpbmcgKGh0bWwpIHRhZywgcHJlc2VydmUgdGhlIGJlaGF2aW9yIGluIGVtb3Rpb24gJiBzdHlsZWQtY29tcG9uZW50cy5cbiAgICAgIHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIgPSBzdHlsZWRFbmdpbmVTdHlsZWQodGFnLCBfZXh0ZW5kcyh7XG4gICAgICBzaG91bGRGb3J3YXJkUHJvcDogc2hvdWxkRm9yd2FyZFByb3BPcHRpb24sXG4gICAgICBsYWJlbFxuICAgIH0sIG9wdGlvbnMpKTtcbiAgICBjb25zdCB0cmFuc2Zvcm1TdHlsZUFyZyA9IHN0eWxlc0FyZyA9PiB7XG4gICAgICAvLyBPbiB0aGUgc2VydmVyIEVtb3Rpb24gZG9lc24ndCB1c2UgUmVhY3QuZm9yd2FyZFJlZiBmb3IgY3JlYXRpbmcgY29tcG9uZW50cywgc28gdGhlIGNyZWF0ZWRcbiAgICAgIC8vIGNvbXBvbmVudCBzdGF5cyBhcyBhIGZ1bmN0aW9uLiBUaGlzIGNvbmRpdGlvbiBtYWtlcyBzdXJlIHRoYXQgd2UgZG8gbm90IGludGVycG9sYXRlIGZ1bmN0aW9uc1xuICAgICAgLy8gd2hpY2ggYXJlIGJhc2ljYWxseSBjb21wb25lbnRzIHVzZWQgYXMgYSBzZWxlY3RvcnMuXG4gICAgICBpZiAodHlwZW9mIHN0eWxlc0FyZyA9PT0gJ2Z1bmN0aW9uJyAmJiBzdHlsZXNBcmcuX19lbW90aW9uX3JlYWwgIT09IHN0eWxlc0FyZyB8fCBpc1BsYWluT2JqZWN0KHN0eWxlc0FyZykpIHtcbiAgICAgICAgcmV0dXJuIHByb3BzID0+IHByb2Nlc3NTdHlsZUFyZyhzdHlsZXNBcmcsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgICAgIHRoZW1lOiByZXNvbHZlVGhlbWUoe1xuICAgICAgICAgICAgdGhlbWU6IHByb3BzLnRoZW1lLFxuICAgICAgICAgICAgZGVmYXVsdFRoZW1lLFxuICAgICAgICAgICAgdGhlbWVJZFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHlsZXNBcmc7XG4gICAgfTtcbiAgICBjb25zdCBtdWlTdHlsZWRSZXNvbHZlciA9IChzdHlsZUFyZywgLi4uZXhwcmVzc2lvbnMpID0+IHtcbiAgICAgIGxldCB0cmFuc2Zvcm1lZFN0eWxlQXJnID0gdHJhbnNmb3JtU3R5bGVBcmcoc3R5bGVBcmcpO1xuICAgICAgY29uc3QgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lID0gZXhwcmVzc2lvbnMgPyBleHByZXNzaW9ucy5tYXAodHJhbnNmb3JtU3R5bGVBcmcpIDogW107XG4gICAgICBpZiAoY29tcG9uZW50TmFtZSAmJiBvdmVycmlkZXNSZXNvbHZlcikge1xuICAgICAgICBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUucHVzaChwcm9wcyA9PiB7XG4gICAgICAgICAgY29uc3QgdGhlbWUgPSByZXNvbHZlVGhlbWUoX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgICAgICB0aGVtZUlkXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIGlmICghdGhlbWUuY29tcG9uZW50cyB8fCAhdGhlbWUuY29tcG9uZW50c1tjb21wb25lbnROYW1lXSB8fCAhdGhlbWUuY29tcG9uZW50c1tjb21wb25lbnROYW1lXS5zdHlsZU92ZXJyaWRlcykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHN0eWxlT3ZlcnJpZGVzID0gdGhlbWUuY29tcG9uZW50c1tjb21wb25lbnROYW1lXS5zdHlsZU92ZXJyaWRlcztcbiAgICAgICAgICBjb25zdCByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzID0ge307XG4gICAgICAgICAgLy8gVE9ETzogdjcgcmVtb3ZlIGl0ZXJhdGlvbiBhbmQgdXNlIGByZXNvbHZlU3R5bGVBcmcoc3R5bGVPdmVycmlkZXNbc2xvdF0pYCBkaXJlY3RseVxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHN0eWxlT3ZlcnJpZGVzKS5mb3JFYWNoKChbc2xvdEtleSwgc2xvdFN0eWxlXSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlc1tzbG90S2V5XSA9IHByb2Nlc3NTdHlsZUFyZyhzbG90U3R5bGUsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBvdmVycmlkZXNSZXNvbHZlcihwcm9wcywgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGNvbXBvbmVudE5hbWUgJiYgIXNraXBWYXJpYW50c1Jlc29sdmVyKSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHByb3BzID0+IHtcbiAgICAgICAgICB2YXIgX3RoZW1lJGNvbXBvbmVudHM7XG4gICAgICAgICAgY29uc3QgdGhlbWUgPSByZXNvbHZlVGhlbWUoX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgICAgICB0aGVtZUlkXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIGNvbnN0IHRoZW1lVmFyaWFudHMgPSB0aGVtZSA9PSBudWxsIHx8IChfdGhlbWUkY29tcG9uZW50cyA9IHRoZW1lLmNvbXBvbmVudHMpID09IG51bGwgfHwgKF90aGVtZSRjb21wb25lbnRzID0gX3RoZW1lJGNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkY29tcG9uZW50cy52YXJpYW50cztcbiAgICAgICAgICByZXR1cm4gcHJvY2Vzc1N0eWxlQXJnKHtcbiAgICAgICAgICAgIHZhcmlhbnRzOiB0aGVtZVZhcmlhbnRzXG4gICAgICAgICAgfSwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgICB0aGVtZVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIXNraXBTeCkge1xuICAgICAgICBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUucHVzaChzeXN0ZW1TeCk7XG4gICAgICB9XG4gICAgICBjb25zdCBudW1PZkN1c3RvbUZuc0FwcGxpZWQgPSBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUubGVuZ3RoIC0gZXhwcmVzc2lvbnMubGVuZ3RoO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3R5bGVBcmcpICYmIG51bU9mQ3VzdG9tRm5zQXBwbGllZCA+IDApIHtcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJzID0gbmV3IEFycmF5KG51bU9mQ3VzdG9tRm5zQXBwbGllZCkuZmlsbCgnJyk7XG4gICAgICAgIC8vIElmIHRoZSB0eXBlIGlzIGFycmF5LCB0aGFuIHdlIG5lZWQgdG8gYWRkIHBsYWNlaG9sZGVycyBpbiB0aGUgdGVtcGxhdGUgZm9yIHRoZSBvdmVycmlkZXMsIHZhcmlhbnRzIGFuZCB0aGUgc3ggc3R5bGVzLlxuICAgICAgICB0cmFuc2Zvcm1lZFN0eWxlQXJnID0gWy4uLnN0eWxlQXJnLCAuLi5wbGFjZWhvbGRlcnNdO1xuICAgICAgICB0cmFuc2Zvcm1lZFN0eWxlQXJnLnJhdyA9IFsuLi5zdHlsZUFyZy5yYXcsIC4uLnBsYWNlaG9sZGVyc107XG4gICAgICB9XG4gICAgICBjb25zdCBDb21wb25lbnQgPSBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIodHJhbnNmb3JtZWRTdHlsZUFyZywgLi4uZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lKTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGxldCBkaXNwbGF5TmFtZTtcbiAgICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IGAke2NvbXBvbmVudE5hbWV9JHtjYXBpdGFsaXplKGNvbXBvbmVudFNsb3QgfHwgJycpfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpc3BsYXlOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IGBTdHlsZWQoJHtnZXREaXNwbGF5TmFtZSh0YWcpfSlgO1xuICAgICAgICB9XG4gICAgICAgIENvbXBvbmVudC5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xuICAgICAgfVxuICAgICAgaWYgKHRhZy5tdWlOYW1lKSB7XG4gICAgICAgIENvbXBvbmVudC5tdWlOYW1lID0gdGFnLm11aU5hbWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gQ29tcG9uZW50O1xuICAgIH07XG4gICAgaWYgKGRlZmF1bHRTdHlsZWRSZXNvbHZlci53aXRoQ29uZmlnKSB7XG4gICAgICBtdWlTdHlsZWRSZXNvbHZlci53aXRoQ29uZmlnID0gZGVmYXVsdFN0eWxlZFJlc29sdmVyLndpdGhDb25maWc7XG4gICAgfVxuICAgIHJldHVybiBtdWlTdHlsZWRSZXNvbHZlcjtcbiAgfTtcbn0iLCJpbXBvcnQgY3JlYXRlU3R5bGVkIGZyb20gJy4vY3JlYXRlU3R5bGVkJztcbmNvbnN0IHN0eWxlZCA9IGNyZWF0ZVN0eWxlZCgpO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IGNyZWF0ZVRoZW1lIGZyb20gJy4vY3JlYXRlVGhlbWUnO1xuaW1wb3J0IHVzZVRoZW1lV2l0aG91dERlZmF1bHQgZnJvbSAnLi91c2VUaGVtZVdpdGhvdXREZWZhdWx0JztcbmV4cG9ydCBjb25zdCBzeXN0ZW1EZWZhdWx0VGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuZnVuY3Rpb24gdXNlVGhlbWUoZGVmYXVsdFRoZW1lID0gc3lzdGVtRGVmYXVsdFRoZW1lKSB7XG4gIHJldHVybiB1c2VUaGVtZVdpdGhvdXREZWZhdWx0KGRlZmF1bHRUaGVtZSk7XG59XG5leHBvcnQgZGVmYXVsdCB1c2VUaGVtZTsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBnZXRUaGVtZVByb3BzIGZyb20gJy4vZ2V0VGhlbWVQcm9wcyc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vdXNlVGhlbWUnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVGhlbWVQcm9wcyh7XG4gIHByb3BzLFxuICBuYW1lLFxuICBkZWZhdWx0VGhlbWUsXG4gIHRoZW1lSWRcbn0pIHtcbiAgbGV0IHRoZW1lID0gdXNlVGhlbWUoZGVmYXVsdFRoZW1lKTtcbiAgaWYgKHRoZW1lSWQpIHtcbiAgICB0aGVtZSA9IHRoZW1lW3RoZW1lSWRdIHx8IHRoZW1lO1xuICB9XG4gIGNvbnN0IG1lcmdlZFByb3BzID0gZ2V0VGhlbWVQcm9wcyh7XG4gICAgdGhlbWUsXG4gICAgbmFtZSxcbiAgICBwcm9wc1xuICB9KTtcbiAgcmV0dXJuIG1lcmdlZFByb3BzO1xufSIsImltcG9ydCByZXNvbHZlUHJvcHMgZnJvbSAnQG11aS91dGlscy9yZXNvbHZlUHJvcHMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VGhlbWVQcm9wcyhwYXJhbXMpIHtcbiAgY29uc3Qge1xuICAgIHRoZW1lLFxuICAgIG5hbWUsXG4gICAgcHJvcHNcbiAgfSA9IHBhcmFtcztcbiAgaWYgKCF0aGVtZSB8fCAhdGhlbWUuY29tcG9uZW50cyB8fCAhdGhlbWUuY29tcG9uZW50c1tuYW1lXSB8fCAhdGhlbWUuY29tcG9uZW50c1tuYW1lXS5kZWZhdWx0UHJvcHMpIHtcbiAgICByZXR1cm4gcHJvcHM7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVQcm9wcyh0aGVtZS5jb21wb25lbnRzW25hbWVdLmRlZmF1bHRQcm9wcywgcHJvcHMpO1xufSIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVGhlbWVDb250ZXh0IH0gZnJvbSAnQG11aS9zdHlsZWQtZW5naW5lJztcbmZ1bmN0aW9uIGlzT2JqZWN0RW1wdHkob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cbmZ1bmN0aW9uIHVzZVRoZW1lKGRlZmF1bHRUaGVtZSA9IG51bGwpIHtcbiAgY29uc3QgY29udGV4dFRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuICByZXR1cm4gIWNvbnRleHRUaGVtZSB8fCBpc09iamVjdEVtcHR5KGNvbnRleHRUaGVtZSkgPyBkZWZhdWx0VGhlbWUgOiBjb250ZXh0VGhlbWU7XG59XG5leHBvcnQgZGVmYXVsdCB1c2VUaGVtZTsiXSwibmFtZXMiOlsiR2xvYmFsU3R5bGVzIiwicHJvcHMiLCJzdHlsZXMiLCJkZWZhdWx0VGhlbWUiLCJnbG9iYWxTdHlsZXMiLCJ0aGVtZUlucHV0Iiwib2JqIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImNhY2hlIiwiU3R5bGVkRW5naW5lUHJvdmlkZXIiLCJpbmplY3RGaXJzdCIsImNoaWxkcmVuIiwiQyIsInZhbHVlIiwiZG9jdW1lbnQiLCJrZXkiLCJwcmVwZW5kIiwic3R5bGVkIiwidGFnIiwib3B0aW9ucyIsImludGVybmFsX3Byb2Nlc3NTdHlsZXMiLCJwcm9jZXNzb3IiLCJBcnJheSIsImlzQXJyYXkiLCJfX2Vtb3Rpb25fc3R5bGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImV4cG9ydHMiLCJjb2xvciIsImRlY29tcG9zZUNvbG9yIiwiY2xhbXBXcmFwcGVyIiwidHlwZSIsInZhbHVlcyIsInJlY29tcG9zZUNvbG9yIiwiZGFya2VuIiwiZm9yZWdyb3VuZCIsImJhY2tncm91bmQiLCJsdW1BIiwiZ2V0THVtaW5hbmNlIiwibHVtQiIsIk1hdGgiLCJtYXgiLCJtaW4iLCJsaWdodGVuIiwiX2Zvcm1hdE11aUVycm9yTWVzc2FnZTIiLCJfY2xhbXAiLCJkZWZhdWx0IiwiY2hhckF0Iiwic2xpY2UiLCJyZSIsIlJlZ0V4cCIsImNvbG9ycyIsIm1hdGNoIiwibWFwIiwibiIsImluZGV4IiwicGFyc2VJbnQiLCJyb3VuZCIsImpvaW4iLCJoZXhUb1JnYiIsIm1hcmtlciIsImluZGV4T2YiLCJzdWJzdHJpbmciLCJFcnJvciIsImNvbG9yU3BhY2UiLCJzcGxpdCIsInNoaWZ0IiwicGFyc2VGbG9hdCIsImkiLCJyZ2IiLCJoIiwicyIsImwiLCJhIiwiZiIsImsiLCJwdXNoIiwiaHNsVG9SZ2IiLCJ2YWwiLCJOdW1iZXIiLCJ0b0ZpeGVkIiwiY29lZmZpY2llbnQiLCJpbnB1dCIsInRoZW1lSWQiLCJzeXN0ZW1EZWZhdWx0VGhlbWUiLCJyb290U2hvdWxkRm9yd2FyZFByb3AiLCJzaG91bGRGb3J3YXJkUHJvcCIsInNsb3RTaG91bGRGb3J3YXJkUHJvcCIsInN5c3RlbVN4IiwiX3N0eWxlRnVuY3Rpb25TeCIsIl9leHRlbmRzMiIsInRoZW1lIiwicmVzb2x2ZVRoZW1lIiwiX19tdWlfc3lzdGVtU3giLCJpbnB1dE9wdGlvbnMiLCJfc3R5bGVkRW5naW5lIiwiZmlsdGVyIiwic3R5bGUiLCJuYW1lIiwiY29tcG9uZW50TmFtZSIsInNsb3QiLCJjb21wb25lbnRTbG90Iiwic2tpcFZhcmlhbnRzUmVzb2x2ZXIiLCJpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyIiwic2tpcFN4IiwiaW5wdXRTa2lwU3giLCJvdmVycmlkZXNSZXNvbHZlciIsImRlZmF1bHRPdmVycmlkZXNSZXNvbHZlciIsImxvd2VyY2FzZUZpcnN0TGV0dGVyIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyIiwiX2V4Y2x1ZGVkMyIsInVuZGVmaW5lZCIsInNob3VsZEZvcndhcmRQcm9wT3B0aW9uIiwiY2hhckNvZGVBdCIsImlzU3RyaW5nVGFnIiwiZGVmYXVsdFN0eWxlZFJlc29sdmVyIiwibGFiZWwiLCJ0cmFuc2Zvcm1TdHlsZUFyZyIsInN0eWxlc0FyZyIsIl9fZW1vdGlvbl9yZWFsIiwiX2RlZXBtZXJnZSIsImlzUGxhaW5PYmplY3QiLCJwcm9jZXNzU3R5bGVBcmciLCJtdWlTdHlsZWRSZXNvbHZlciIsInN0eWxlQXJnIiwiZXhwcmVzc2lvbnMiLCJ0cmFuc2Zvcm1lZFN0eWxlQXJnIiwiZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lIiwiY29tcG9uZW50cyIsInN0eWxlT3ZlcnJpZGVzIiwicmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyIsImVudHJpZXMiLCJmb3JFYWNoIiwic2xvdEtleSIsInNsb3RTdHlsZSIsIl90aGVtZSRjb21wb25lbnRzIiwidmFyaWFudHMiLCJudW1PZkN1c3RvbUZuc0FwcGxpZWQiLCJwbGFjZWhvbGRlcnMiLCJmaWxsIiwicmF3IiwiQ29tcG9uZW50IiwibXVpTmFtZSIsIndpdGhDb25maWciLCJlIiwiciIsIl9fZXNNb2R1bGUiLCJ0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiaGFzIiwiZ2V0IiwiX19wcm90b19fIiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwic2V0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfY3JlYXRlVGhlbWUiLCJfZXhjbHVkZWQiLCJfZXhjbHVkZWQyIiwiV2Vha01hcCIsInByb3AiLCJzdHJpbmciLCJ0b0xvd2VyQ2FzZSIsImNhbGxhYmxlU3R5bGUiLCJfcmVmIiwib3duZXJTdGF0ZSIsInJlc29sdmVkU3R5bGVzQXJnIiwiZmxhdE1hcCIsInJlc29sdmVkU3R5bGUiLCJyZXN1bHQiLCJ2YXJpYW50IiwiaXNNYXRjaCIsImRlZmF1bHRDcmVhdGVTdHlsZWRDb21wb25lbnQiLCJyb290IiwiU3RyaW5nIiwibWF4V2lkdGgiLCJmaXhlZCIsImRpc2FibGVHdXR0ZXJzIiwidXNlVGhlbWVQcm9wc0RlZmF1bHQiLCJpblByb3BzIiwidXNlVXRpbGl0eUNsYXNzZXMiLCJjbGFzc2VzIiwic2xvdHMiLCJjcmVhdGVDb250YWluZXIiLCJjcmVhdGVTdHlsZWRDb21wb25lbnQiLCJ1c2VUaGVtZVByb3BzIiwiQ29udGFpbmVyUm9vdCIsIndpZHRoIiwibWFyZ2luTGVmdCIsImJveFNpemluZyIsIm1hcmdpblJpZ2h0IiwiZGlzcGxheSIsInBhZGRpbmdMZWZ0Iiwic3BhY2luZyIsInBhZGRpbmdSaWdodCIsImJyZWFrcG9pbnRzIiwidXAiLCJyZWR1Y2UiLCJhY2MiLCJicmVha3BvaW50VmFsdWVLZXkiLCJicmVha3BvaW50IiwidW5pdCIsInhzIiwicmVmIiwiY2xhc3NOYW1lIiwiY29tcG9uZW50Iiwib3RoZXIiLCJhcyIsIlByb3BzQ29udGV4dCIsInVzZURlZmF1bHRQcm9wcyIsInBhcmFtcyIsImNvbmZpZyIsImRlZmF1bHRQcm9wcyIsImdldFRoZW1lUHJvcHMiLCJQcm92aWRlciIsInVwcGVyVGhlbWUiLCJSdGxDb250ZXh0IiwidXNlUnRsIiwiam9pbkNoaWxkcmVuIiwic2VwYXJhdG9yIiwiY2hpbGRyZW5BcnJheSIsInRvQXJyYXkiLCJCb29sZWFuIiwib3V0cHV0IiwiY2hpbGQiLCJmbGV4RGlyZWN0aW9uIiwiZGlyZWN0aW9uIiwicHJvcFZhbHVlIiwidHJhbnNmb3JtZXIiLCJiYXNlIiwiZGlyZWN0aW9uVmFsdWVzIiwic3BhY2luZ1ZhbHVlcyIsInByZXZpb3VzRGlyZWN0aW9uVmFsdWUiLCJzdHlsZUZyb21Qcm9wVmFsdWUiLCJ1c2VGbGV4R2FwIiwiZ2FwIiwibWFyZ2luIiwicm93IiwiY29sdW1uIiwiY3JlYXRlU3RhY2siLCJTdGFja1Jvb3QiLCJ0aGVtZVByb3BzIiwiZGl2aWRlciIsInVzZVRoZW1lIiwiU3ltYm9sIiwiZm9yIiwibG9jYWxUaGVtZSIsIm91dGVyVGhlbWUiLCJtZXJnZU91dGVyTG9jYWxUaGVtZSIsIm5lc3RlZCIsIkVNUFRZX1RIRU1FIiwidXNlVGhlbWVTY29waW5nIiwiaXNQcml2YXRlIiwicmVzb2x2ZWRUaGVtZSIsIm1lcmdlZFRoZW1lIiwidXNlVGhlbWVXaXRob3V0RGVmYXVsdCIsInVwcGVyUHJpdmF0ZVRoZW1lIiwiZW5naW5lVGhlbWUiLCJwcml2YXRlVGhlbWUiLCJydGxWYWx1ZSIsIlJ0bFByb3ZpZGVyIiwiRGVmYXVsdFByb3BzUHJvdmlkZXIiLCJzbSIsIm1kIiwibGciLCJ4bCIsImRlZmF1bHRCcmVha3BvaW50cyIsImhhbmRsZUJyZWFrcG9pbnRzIiwidGhlbWVCcmVha3BvaW50cyIsIml0ZW0iLCJjc3NLZXkiLCJjcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QiLCJicmVha3BvaW50c0lucHV0IiwiX2JyZWFrcG9pbnRzSW5wdXQka2V5IiwicmVtb3ZlVW51c2VkQnJlYWtwb2ludHMiLCJicmVha3BvaW50S2V5cyIsImJyZWFrcG9pbnRPdXRwdXQiLCJtZXJnZUJyZWFrcG9pbnRzSW5PcmRlciIsImVtcHR5QnJlYWtwb2ludHMiLCJtZXJnZWRPdXRwdXQiLCJwcmV2IiwibmV4dCIsInJlc29sdmVCcmVha3BvaW50VmFsdWVzIiwiYnJlYWtwb2ludFZhbHVlcyIsImN1c3RvbUJhc2UiLCJicmVha3BvaW50c0tleXMiLCJjb21wdXRlQnJlYWtwb2ludHNCYXNlIiwicHJldmlvdXMiLCJjcmVhdGVCb3giLCJkZWZhdWx0Q2xhc3NOYW1lIiwiZ2VuZXJhdGVDbGFzc05hbWUiLCJCb3hSb290IiwiX2V4dGVuZFN4UHJvcCIsImFwcGx5U3R5bGVzIiwidGhpcyIsInZhcnMiLCJnZXRDb2xvclNjaGVtZVNlbGVjdG9yIiwic2VsZWN0b3IiLCJyZXBsYWNlIiwicGFsZXR0ZSIsIm1vZGUiLCJzb3J0QnJlYWtwb2ludHNWYWx1ZXMiLCJicmVha3BvaW50c0FzQXJyYXkiLCJzb3J0IiwiYnJlYWtwb2ludDEiLCJicmVha3BvaW50MiIsImNyZWF0ZUJyZWFrcG9pbnRzIiwic3RlcCIsInNvcnRlZFZhbHVlcyIsImRvd24iLCJiZXR3ZWVuIiwic3RhcnQiLCJlbmQiLCJlbmRJbmRleCIsIm9ubHkiLCJub3QiLCJrZXlJbmRleCIsImJvcmRlclJhZGl1cyIsImFyZ3MiLCJwYWxldHRlSW5wdXQiLCJzcGFjaW5nSW5wdXQiLCJzaGFwZSIsInNoYXBlSW5wdXQiLCJtdWkiLCJ0cmFuc2Zvcm0iLCJhcmdzSW5wdXQiLCJhcmd1bWVudCIsImNyZWF0ZVNwYWNpbmciLCJtdWlUaGVtZSIsImRlZXBtZXJnZSIsInVuc3RhYmxlX3N4Q29uZmlnIiwiZGVmYXVsdFN4Q29uZmlnIiwidW5zdGFibGVfc3giLCJzdHlsZUZ1bmN0aW9uU3giLCJzeCIsImNsb25lIiwicHJvcGVydGllcyIsIm0iLCJwIiwiZGlyZWN0aW9ucyIsImIiLCJ4IiwieSIsImFsaWFzZXMiLCJtYXJnaW5YIiwibWFyZ2luWSIsInBhZGRpbmdYIiwicGFkZGluZ1kiLCJnZXRDc3NQcm9wZXJ0aWVzIiwiYXJnIiwicHJvcGVydHkiLCJkaXIiLCJmbiIsIm1lbW9pemUiLCJtYXJnaW5LZXlzIiwicGFkZGluZ0tleXMiLCJzcGFjaW5nS2V5cyIsImNyZWF0ZVVuYXJ5VW5pdCIsInRoZW1lS2V5IiwiZGVmYXVsdFZhbHVlIiwicHJvcE5hbWUiLCJfZ2V0UGF0aCIsInRoZW1lU3BhY2luZyIsImFicyIsImNyZWF0ZVVuYXJ5U3BhY2luZyIsImdldFZhbHVlIiwidHJhbnNmb3JtZWQiLCJjc3NQcm9wZXJ0aWVzIiwiY3NzUHJvcGVydHkiLCJnZXRTdHlsZUZyb21Qcm9wVmFsdWUiLCJyZXNvbHZlQ3NzUHJvcGVydHkiLCJtZXJnZSIsInBhZGRpbmciLCJwcm9wVHlwZXMiLCJmaWx0ZXJQcm9wcyIsImdldFBhdGgiLCJwYXRoIiwiY2hlY2tWYXJzIiwiZ2V0U3R5bGVWYWx1ZSIsInRoZW1lTWFwcGluZyIsInByb3BWYWx1ZUZpbmFsIiwidXNlclZhbHVlIiwiaGFuZGxlcnMiLCJjb25jYXQiLCJib3JkZXJUcmFuc2Zvcm0iLCJjcmVhdGVCb3JkZXJTdHlsZSIsImJvcmRlciIsImJvcmRlclRvcCIsImJvcmRlclJpZ2h0IiwiYm9yZGVyQm90dG9tIiwiYm9yZGVyTGVmdCIsImJvcmRlckNvbG9yIiwiYm9yZGVyVG9wQ29sb3IiLCJib3JkZXJSaWdodENvbG9yIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJib3JkZXJMZWZ0Q29sb3IiLCJvdXRsaW5lIiwib3V0bGluZUNvbG9yIiwiY29sdW1uR2FwIiwicm93R2FwIiwicGFsZXR0ZVRyYW5zZm9ybSIsInNpemluZ1RyYW5zZm9ybSIsIl9wcm9wcyR0aGVtZSIsIl9wcm9wcyR0aGVtZTIiLCJtaW5XaWR0aCIsImhlaWdodCIsIm1heEhlaWdodCIsIm1pbkhlaWdodCIsImJnY29sb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLCJwdCIsInByIiwicGIiLCJwbCIsInB4IiwicHkiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSIsInBhZGRpbmdJbmxpbmUiLCJwYWRkaW5nSW5saW5lU3RhcnQiLCJwYWRkaW5nSW5saW5lRW5kIiwicGFkZGluZ0Jsb2NrIiwicGFkZGluZ0Jsb2NrU3RhcnQiLCJwYWRkaW5nQmxvY2tFbmQiLCJtdCIsIm1yIiwibWIiLCJtbCIsIm14IiwibXkiLCJtYXJnaW5Ub3AiLCJtYXJnaW5Cb3R0b20iLCJtYXJnaW5JbmxpbmUiLCJtYXJnaW5JbmxpbmVTdGFydCIsIm1hcmdpbklubGluZUVuZCIsIm1hcmdpbkJsb2NrIiwibWFyZ2luQmxvY2tTdGFydCIsIm1hcmdpbkJsb2NrRW5kIiwiZGlzcGxheVByaW50Iiwib3ZlcmZsb3ciLCJ0ZXh0T3ZlcmZsb3ciLCJ2aXNpYmlsaXR5Iiwid2hpdGVTcGFjZSIsImZsZXhCYXNpcyIsImZsZXhXcmFwIiwianVzdGlmeUNvbnRlbnQiLCJhbGlnbkl0ZW1zIiwiYWxpZ25Db250ZW50Iiwib3JkZXIiLCJmbGV4IiwiZmxleEdyb3ciLCJmbGV4U2hyaW5rIiwiYWxpZ25TZWxmIiwianVzdGlmeUl0ZW1zIiwianVzdGlmeVNlbGYiLCJncmlkQ29sdW1uIiwiZ3JpZFJvdyIsImdyaWRBdXRvRmxvdyIsImdyaWRBdXRvQ29sdW1ucyIsImdyaWRBdXRvUm93cyIsImdyaWRUZW1wbGF0ZUNvbHVtbnMiLCJncmlkVGVtcGxhdGVSb3dzIiwiZ3JpZFRlbXBsYXRlQXJlYXMiLCJncmlkQXJlYSIsInBvc2l0aW9uIiwiekluZGV4IiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwiYm94U2hhZG93IiwiZm9udEZhbWlseSIsImZvbnRTaXplIiwiZm9udFN0eWxlIiwiZm9udFdlaWdodCIsImxldHRlclNwYWNpbmciLCJ0ZXh0VHJhbnNmb3JtIiwibGluZUhlaWdodCIsInRleHRBbGlnbiIsInR5cG9ncmFwaHkiLCJzcGxpdFByb3BzIiwiX3Byb3BzJHRoZW1lJHVuc3RhYmxlIiwic3lzdGVtUHJvcHMiLCJvdGhlclByb3BzIiwiZXh0ZW5kU3hQcm9wIiwiaW5TeCIsImZpbmFsU3giLCJ1bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3giLCJnZXRUaGVtZVZhbHVlIiwiX3RoZW1lJHVuc3RhYmxlX3N4Q29uIiwidHJhdmVyc2UiLCJzeElucHV0Iiwic3hPYmplY3QiLCJjc3MiLCJzdHlsZUtleSIsIm1heWJlRm4iLCJicmVha3BvaW50c1ZhbHVlcyIsIm9iamVjdHMiLCJhbGxLZXlzIiwib2JqZWN0IiwidW5pb24iLCJTZXQiLCJldmVyeSIsInNpemUiLCJvYmplY3RzSGF2ZVNhbWVLZXlzIiwiY3JlYXRlVGhlbWUiLCJjcmVhdGVTdHlsZWQiLCJtZXJnZWRQcm9wcyIsInJlc29sdmVQcm9wcyIsImNvbnRleHRUaGVtZSIsIlQiXSwic291cmNlUm9vdCI6IiJ9