"use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[907],{6723:(e,t,o)=>{o.d(t,{Z:()=>w});var n=o(3366),r=o(7462),i=o(7294),a=o(9766),s=o(4780),l=o(8543),d=o(948),u=o(1657),c=o(1588),p=o(4867),m=o(5827);function f(e){return(0,p.Z)("MuiFilledInput",e)}const h=(0,r.Z)({},m.Z,(0,c.Z)("MuiFilledInput",["root","underline","input"]));var v=o(5893);const b=["disableUnderline","components","componentsProps","fullWidth","hiddenLabel","inputComponent","multiline","slotProps","slots","type"],g=(0,d.ZP)(l.Ej,{shouldForwardProp:e=>(0,d.FO)(e)||"classes"===e,name:"MuiFilledInput",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[...(0,l.Gx)(e,t),!o.disableUnderline&&t.underline]}})((({theme:e,ownerState:t})=>{var o;const n="light"===e.palette.mode,i=n?"rgba(0, 0, 0, 0.42)":"rgba(255, 255, 255, 0.7)",a=n?"rgba(0, 0, 0, 0.06)":"rgba(255, 255, 255, 0.09)",s=n?"rgba(0, 0, 0, 0.09)":"rgba(255, 255, 255, 0.13)",l=n?"rgba(0, 0, 0, 0.12)":"rgba(255, 255, 255, 0.12)";return(0,r.Z)({position:"relative",backgroundColor:e.vars?e.vars.palette.FilledInput.bg:a,borderTopLeftRadius:(e.vars||e).shape.borderRadius,borderTopRightRadius:(e.vars||e).shape.borderRadius,transition:e.transitions.create("background-color",{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),"&:hover":{backgroundColor:e.vars?e.vars.palette.FilledInput.hoverBg:s,"@media (hover: none)":{backgroundColor:e.vars?e.vars.palette.FilledInput.bg:a}},[`&.${h.focused}`]:{backgroundColor:e.vars?e.vars.palette.FilledInput.bg:a},[`&.${h.disabled}`]:{backgroundColor:e.vars?e.vars.palette.FilledInput.disabledBg:l}},!t.disableUnderline&&{"&::after":{borderBottom:`2px solid ${null==(o=(e.vars||e).palette[t.color||"primary"])?void 0:o.main}`,left:0,bottom:0,content:'""',position:"absolute",right:0,transform:"scaleX(0)",transition:e.transitions.create("transform",{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),pointerEvents:"none"},[`&.${h.focused}:after`]:{transform:"scaleX(1) translateX(0)"},[`&.${h.error}`]:{"&::before, &::after":{borderBottomColor:(e.vars||e).palette.error.main}},"&::before":{borderBottom:`1px solid ${e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / ${e.vars.opacity.inputUnderline})`:i}`,left:0,bottom:0,content:'"\\00a0"',position:"absolute",right:0,transition:e.transitions.create("border-bottom-color",{duration:e.transitions.duration.shorter}),pointerEvents:"none"},[`&:hover:not(.${h.disabled}, .${h.error}):before`]:{borderBottom:`1px solid ${(e.vars||e).palette.text.primary}`},[`&.${h.disabled}:before`]:{borderBottomStyle:"dotted"}},t.startAdornment&&{paddingLeft:12},t.endAdornment&&{paddingRight:12},t.multiline&&(0,r.Z)({padding:"25px 12px 8px"},"small"===t.size&&{paddingTop:21,paddingBottom:4},t.hiddenLabel&&{paddingTop:16,paddingBottom:17},t.hiddenLabel&&"small"===t.size&&{paddingTop:8,paddingBottom:9}))})),Z=(0,d.ZP)(l.rA,{name:"MuiFilledInput",slot:"Input",overridesResolver:l._o})((({theme:e,ownerState:t})=>(0,r.Z)({paddingTop:25,paddingRight:12,paddingBottom:8,paddingLeft:12},!e.vars&&{"&:-webkit-autofill":{WebkitBoxShadow:"light"===e.palette.mode?null:"0 0 0 100px #266798 inset",WebkitTextFillColor:"light"===e.palette.mode?null:"#fff",caretColor:"light"===e.palette.mode?null:"#fff",borderTopLeftRadius:"inherit",borderTopRightRadius:"inherit"}},e.vars&&{"&:-webkit-autofill":{borderTopLeftRadius:"inherit",borderTopRightRadius:"inherit"},[e.getColorSchemeSelector("dark")]:{"&:-webkit-autofill":{WebkitBoxShadow:"0 0 0 100px #266798 inset",WebkitTextFillColor:"#fff",caretColor:"#fff"}}},"small"===t.size&&{paddingTop:21,paddingBottom:4},t.hiddenLabel&&{paddingTop:16,paddingBottom:17},t.startAdornment&&{paddingLeft:0},t.endAdornment&&{paddingRight:0},t.hiddenLabel&&"small"===t.size&&{paddingTop:8,paddingBottom:9},t.multiline&&{paddingTop:0,paddingBottom:0,paddingLeft:0,paddingRight:0}))),x=i.forwardRef((function(e,t){var o,i,d,c;const p=(0,u.Z)({props:e,name:"MuiFilledInput"}),{components:m={},componentsProps:h,fullWidth:x=!1,inputComponent:w="input",multiline:y=!1,slotProps:S,slots:k={},type:P="text"}=p,C=(0,n.Z)(p,b),R=(0,r.Z)({},p,{fullWidth:x,inputComponent:w,multiline:y,type:P}),M=(e=>{const{classes:t,disableUnderline:o}=e,n={root:["root",!o&&"underline"],input:["input"]},i=(0,s.Z)(n,f,t);return(0,r.Z)({},t,i)})(p),$={root:{ownerState:R},input:{ownerState:R}},E=(null!=S?S:h)?(0,a.Z)($,null!=S?S:h):$,F=null!=(o=null!=(i=k.root)?i:m.Root)?o:g,z=null!=(d=null!=(c=k.input)?c:m.Input)?d:Z;return(0,v.jsx)(l.ZP,(0,r.Z)({slots:{root:F,input:z},componentsProps:E,fullWidth:x,inputComponent:w,multiline:y,ref:t,type:P},C,{classes:M}))}));x.muiName="Input";const w=x},6446:(e,t,o)=>{o.d(t,{Z:()=>x});var n=o(3366),r=o(7462),i=o(7294),a=o(512),s=o(4780),l=o(1657),d=o(948),u=o(5108),c=o(8216),p=o(6798),m=o(7167),f=o(1588),h=o(4867);function v(e){return(0,h.Z)("MuiFormControl",e)}(0,f.Z)("MuiFormControl",["root","marginNone","marginNormal","marginDense","fullWidth","disabled"]);var b=o(5893);const g=["children","className","color","component","disabled","error","focused","fullWidth","hiddenLabel","margin","required","size","variant"],Z=(0,d.ZP)("div",{name:"MuiFormControl",slot:"Root",overridesResolver:({ownerState:e},t)=>(0,r.Z)({},t.root,t[`margin${(0,c.Z)(e.margin)}`],e.fullWidth&&t.fullWidth)})((({ownerState:e})=>(0,r.Z)({display:"inline-flex",flexDirection:"column",position:"relative",minWidth:0,padding:0,margin:0,border:0,verticalAlign:"top"},"normal"===e.margin&&{marginTop:16,marginBottom:8},"dense"===e.margin&&{marginTop:8,marginBottom:4},e.fullWidth&&{width:"100%"}))),x=i.forwardRef((function(e,t){const o=(0,l.Z)({props:e,name:"MuiFormControl"}),{children:d,className:f,color:h="primary",component:x="div",disabled:w=!1,error:y=!1,focused:S,fullWidth:k=!1,hiddenLabel:P=!1,margin:C="none",required:R=!1,size:M="medium",variant:$="outlined"}=o,E=(0,n.Z)(o,g),F=(0,r.Z)({},o,{color:h,component:x,disabled:w,error:y,fullWidth:k,hiddenLabel:P,margin:C,required:R,size:M,variant:$}),z=(e=>{const{classes:t,margin:o,fullWidth:n}=e,r={root:["root","none"!==o&&`margin${(0,c.Z)(o)}`,n&&"fullWidth"]};return(0,s.Z)(r,v,t)})(F),[N,T]=i.useState((()=>{let e=!1;return d&&i.Children.forEach(d,(t=>{if(!(0,p.Z)(t,["Input","Select"]))return;const o=(0,p.Z)(t,["Select"])?t.props.input:t;o&&(0,u.B7)(o.props)&&(e=!0)})),e})),[L,W]=i.useState((()=>{let e=!1;return d&&i.Children.forEach(d,(t=>{(0,p.Z)(t,["Input","Select"])&&((0,u.vd)(t.props,!0)||(0,u.vd)(t.props.inputProps,!0))&&(e=!0)})),e})),[I,A]=i.useState(!1);w&&I&&A(!1);const B=void 0===S||w?I:S;let O;const j=i.useMemo((()=>({adornedStart:N,setAdornedStart:T,color:h,disabled:w,error:y,filled:L,focused:B,fullWidth:k,hiddenLabel:P,size:M,onBlur:()=>{A(!1)},onEmpty:()=>{W(!1)},onFilled:()=>{W(!0)},onFocus:()=>{A(!0)},registerEffect:O,required:R,variant:$})),[N,h,w,y,L,B,k,P,O,R,M,$]);return(0,b.jsx)(m.Z.Provider,{value:j,children:(0,b.jsx)(Z,(0,r.Z)({as:x,ownerState:F,className:(0,a.Z)(z.root,f),ref:t},E,{children:d}))})}))},7167:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o(7294).createContext(void 0)},5704:(e,t,o)=>{function n({props:e,states:t,muiFormControl:o}){return t.reduce(((t,n)=>(t[n]=e[n],o&&void 0===e[n]&&(t[n]=o[n]),t)),{})}o.d(t,{Z:()=>n})},4423:(e,t,o)=>{o.d(t,{Z:()=>i});var n=o(7294),r=o(7167);function i(){return n.useContext(r.Z)}},3460:(e,t,o)=>{o.d(t,{Z:()=>w});var n=o(3366),r=o(7462),i=o(7294),a=o(512),s=o(4780),l=o(5704),d=o(4423),u=o(948),c=o(8216),p=o(1588),m=o(4867);function f(e){return(0,m.Z)("MuiFormHelperText",e)}const h=(0,p.Z)("MuiFormHelperText",["root","error","disabled","sizeSmall","sizeMedium","contained","focused","filled","required"]);var v,b=o(1657),g=o(5893);const Z=["children","className","component","disabled","error","filled","focused","margin","required","variant"],x=(0,u.ZP)("p",{name:"MuiFormHelperText",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,o.size&&t[`size${(0,c.Z)(o.size)}`],o.contained&&t.contained,o.filled&&t.filled]}})((({theme:e,ownerState:t})=>(0,r.Z)({color:(e.vars||e).palette.text.secondary},e.typography.caption,{textAlign:"left",marginTop:3,marginRight:0,marginBottom:0,marginLeft:0,[`&.${h.disabled}`]:{color:(e.vars||e).palette.text.disabled},[`&.${h.error}`]:{color:(e.vars||e).palette.error.main}},"small"===t.size&&{marginTop:4},t.contained&&{marginLeft:14,marginRight:14}))),w=i.forwardRef((function(e,t){const o=(0,b.Z)({props:e,name:"MuiFormHelperText"}),{children:i,className:u,component:p="p"}=o,m=(0,n.Z)(o,Z),h=(0,d.Z)(),w=(0,l.Z)({props:o,muiFormControl:h,states:["variant","size","disabled","error","filled","focused","required"]}),y=(0,r.Z)({},o,{component:p,contained:"filled"===w.variant||"outlined"===w.variant,variant:w.variant,size:w.size,disabled:w.disabled,error:w.error,filled:w.filled,focused:w.focused,required:w.required}),S=(e=>{const{classes:t,contained:o,size:n,disabled:r,error:i,filled:a,focused:l,required:d}=e,u={root:["root",r&&"disabled",i&&"error",n&&`size${(0,c.Z)(n)}`,o&&"contained",l&&"focused",a&&"filled",d&&"required"]};return(0,s.Z)(u,f,t)})(y);return(0,g.jsx)(x,(0,r.Z)({as:p,ownerState:y,className:(0,a.Z)(S.root,u),ref:t},m,{children:" "===i?v||(v=(0,g.jsx)("span",{className:"notranslate",children:"​"})):i}))}))},6294:(e,t,o)=>{o.d(t,{Z:()=>l});var n=o(7462),r=(o(7294),o(5723)),i=o(247),a=o(606),s=o(5893);const l=function(e){return(0,s.jsx)(r.Z,(0,n.Z)({},e,{defaultTheme:i.Z,themeId:a.Z}))}},5725:(e,t,o)=>{o.d(t,{ZP:()=>P});var n=o(3366),r=o(7462),i=o(7294),a=o(512),s=o(5408),l=o(9707),d=o(4780),u=o(948),c=o(1657),p=o(2734);const m=i.createContext();var f=o(1588),h=o(4867);function v(e){return(0,h.Z)("MuiGrid",e)}const b=["auto",!0,1,2,3,4,5,6,7,8,9,10,11,12],g=(0,f.Z)("MuiGrid",["root","container","item","zeroMinWidth",...[0,1,2,3,4,5,6,7,8,9,10].map((e=>`spacing-xs-${e}`)),...["column-reverse","column","row-reverse","row"].map((e=>`direction-xs-${e}`)),...["nowrap","wrap-reverse","wrap"].map((e=>`wrap-xs-${e}`)),...b.map((e=>`grid-xs-${e}`)),...b.map((e=>`grid-sm-${e}`)),...b.map((e=>`grid-md-${e}`)),...b.map((e=>`grid-lg-${e}`)),...b.map((e=>`grid-xl-${e}`))]);var Z=o(5893);const x=["className","columns","columnSpacing","component","container","direction","item","rowSpacing","spacing","wrap","zeroMinWidth"];function w(e){const t=parseFloat(e);return`${t}${String(e).replace(String(t),"")||"px"}`}function y({breakpoints:e,values:t}){let o="";Object.keys(t).forEach((e=>{""===o&&0!==t[e]&&(o=e)}));const n=Object.keys(e).sort(((t,o)=>e[t]-e[o]));return n.slice(0,n.indexOf(o))}const S=(0,u.ZP)("div",{name:"MuiGrid",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e,{container:n,direction:r,item:i,spacing:a,wrap:s,zeroMinWidth:l,breakpoints:d}=o;let u=[];n&&(u=function(e,t,o={}){if(!e||e<=0)return[];if("string"==typeof e&&!Number.isNaN(Number(e))||"number"==typeof e)return[o[`spacing-xs-${String(e)}`]];const n=[];return t.forEach((t=>{const r=e[t];Number(r)>0&&n.push(o[`spacing-${t}-${String(r)}`])})),n}(a,d,t));const c=[];return d.forEach((e=>{const n=o[e];n&&c.push(t[`grid-${e}-${String(n)}`])})),[t.root,n&&t.container,i&&t.item,l&&t.zeroMinWidth,...u,"row"!==r&&t[`direction-xs-${String(r)}`],"wrap"!==s&&t[`wrap-xs-${String(s)}`],...c]}})((({ownerState:e})=>(0,r.Z)({boxSizing:"border-box"},e.container&&{display:"flex",flexWrap:"wrap",width:"100%"},e.item&&{margin:0},e.zeroMinWidth&&{minWidth:0},"wrap"!==e.wrap&&{flexWrap:e.wrap})),(function({theme:e,ownerState:t}){const o=(0,s.P$)({values:t.direction,breakpoints:e.breakpoints.values});return(0,s.k9)({theme:e},o,(e=>{const t={flexDirection:e};return 0===e.indexOf("column")&&(t[`& > .${g.item}`]={maxWidth:"none"}),t}))}),(function({theme:e,ownerState:t}){const{container:o,rowSpacing:n}=t;let r={};if(o&&0!==n){const t=(0,s.P$)({values:n,breakpoints:e.breakpoints.values});let o;"object"==typeof t&&(o=y({breakpoints:e.breakpoints.values,values:t})),r=(0,s.k9)({theme:e},t,((t,n)=>{var r;const i=e.spacing(t);return"0px"!==i?{marginTop:`-${w(i)}`,[`& > .${g.item}`]:{paddingTop:w(i)}}:null!=(r=o)&&r.includes(n)?{}:{marginTop:0,[`& > .${g.item}`]:{paddingTop:0}}}))}return r}),(function({theme:e,ownerState:t}){const{container:o,columnSpacing:n}=t;let r={};if(o&&0!==n){const t=(0,s.P$)({values:n,breakpoints:e.breakpoints.values});let o;"object"==typeof t&&(o=y({breakpoints:e.breakpoints.values,values:t})),r=(0,s.k9)({theme:e},t,((t,n)=>{var r;const i=e.spacing(t);return"0px"!==i?{width:`calc(100% + ${w(i)})`,marginLeft:`-${w(i)}`,[`& > .${g.item}`]:{paddingLeft:w(i)}}:null!=(r=o)&&r.includes(n)?{}:{width:"100%",marginLeft:0,[`& > .${g.item}`]:{paddingLeft:0}}}))}return r}),(function({theme:e,ownerState:t}){let o;return e.breakpoints.keys.reduce(((n,i)=>{let a={};if(t[i]&&(o=t[i]),!o)return n;if(!0===o)a={flexBasis:0,flexGrow:1,maxWidth:"100%"};else if("auto"===o)a={flexBasis:"auto",flexGrow:0,flexShrink:0,maxWidth:"none",width:"auto"};else{const l=(0,s.P$)({values:t.columns,breakpoints:e.breakpoints.values}),d="object"==typeof l?l[i]:l;if(null==d)return n;const u=Math.round(o/d*1e8)/1e6+"%";let c={};if(t.container&&t.item&&0!==t.columnSpacing){const o=e.spacing(t.columnSpacing);if("0px"!==o){const e=`calc(${u} + ${w(o)})`;c={flexBasis:e,maxWidth:e}}}a=(0,r.Z)({flexBasis:u,flexGrow:0,maxWidth:u},c)}return 0===e.breakpoints.values[i]?Object.assign(n,a):n[e.breakpoints.up(i)]=a,n}),{})})),k=i.forwardRef((function(e,t){const o=(0,c.Z)({props:e,name:"MuiGrid"}),{breakpoints:s}=(0,p.Z)(),u=(0,l.Z)(o),{className:f,columns:h,columnSpacing:b,component:g="div",container:w=!1,direction:y="row",item:k=!1,rowSpacing:P,spacing:C=0,wrap:R="wrap",zeroMinWidth:M=!1}=u,$=(0,n.Z)(u,x),E=P||C,F=b||C,z=i.useContext(m),N=w?h||12:z,T={},L=(0,r.Z)({},$);s.keys.forEach((e=>{null!=$[e]&&(T[e]=$[e],delete L[e])}));const W=(0,r.Z)({},u,{columns:N,container:w,direction:y,item:k,rowSpacing:E,columnSpacing:F,wrap:R,zeroMinWidth:M,spacing:C},T,{breakpoints:s.keys}),I=(e=>{const{classes:t,container:o,direction:n,item:r,spacing:i,wrap:a,zeroMinWidth:s,breakpoints:l}=e;let u=[];o&&(u=function(e,t){if(!e||e<=0)return[];if("string"==typeof e&&!Number.isNaN(Number(e))||"number"==typeof e)return[`spacing-xs-${String(e)}`];const o=[];return t.forEach((t=>{const n=e[t];if(Number(n)>0){const e=`spacing-${t}-${String(n)}`;o.push(e)}})),o}(i,l));const c=[];l.forEach((t=>{const o=e[t];o&&c.push(`grid-${t}-${String(o)}`)}));const p={root:["root",o&&"container",r&&"item",s&&"zeroMinWidth",...u,"row"!==n&&`direction-xs-${String(n)}`,"wrap"!==a&&`wrap-xs-${String(a)}`,...c]};return(0,d.Z)(p,v,t)})(W);return(0,Z.jsx)(m.Provider,{value:N,children:(0,Z.jsx)(S,(0,r.Z)({ownerState:W,className:(0,a.Z)(I.root,f),as:g,ref:t},L))})})),P=k},3981:(e,t,o)=>{o.d(t,{Z:()=>w});var n=o(3366),r=o(7462),i=o(7294),a=o(4780),s=o(9766),l=o(8543),d=o(948),u=o(1657),c=o(1588),p=o(4867),m=o(5827);function f(e){return(0,p.Z)("MuiInput",e)}const h=(0,r.Z)({},m.Z,(0,c.Z)("MuiInput",["root","underline","input"]));var v=o(5893);const b=["disableUnderline","components","componentsProps","fullWidth","inputComponent","multiline","slotProps","slots","type"],g=(0,d.ZP)(l.Ej,{shouldForwardProp:e=>(0,d.FO)(e)||"classes"===e,name:"MuiInput",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[...(0,l.Gx)(e,t),!o.disableUnderline&&t.underline]}})((({theme:e,ownerState:t})=>{let o="light"===e.palette.mode?"rgba(0, 0, 0, 0.42)":"rgba(255, 255, 255, 0.7)";return e.vars&&(o=`rgba(${e.vars.palette.common.onBackgroundChannel} / ${e.vars.opacity.inputUnderline})`),(0,r.Z)({position:"relative"},t.formControl&&{"label + &":{marginTop:16}},!t.disableUnderline&&{"&::after":{borderBottom:`2px solid ${(e.vars||e).palette[t.color].main}`,left:0,bottom:0,content:'""',position:"absolute",right:0,transform:"scaleX(0)",transition:e.transitions.create("transform",{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),pointerEvents:"none"},[`&.${h.focused}:after`]:{transform:"scaleX(1) translateX(0)"},[`&.${h.error}`]:{"&::before, &::after":{borderBottomColor:(e.vars||e).palette.error.main}},"&::before":{borderBottom:`1px solid ${o}`,left:0,bottom:0,content:'"\\00a0"',position:"absolute",right:0,transition:e.transitions.create("border-bottom-color",{duration:e.transitions.duration.shorter}),pointerEvents:"none"},[`&:hover:not(.${h.disabled}, .${h.error}):before`]:{borderBottom:`2px solid ${(e.vars||e).palette.text.primary}`,"@media (hover: none)":{borderBottom:`1px solid ${o}`}},[`&.${h.disabled}:before`]:{borderBottomStyle:"dotted"}})})),Z=(0,d.ZP)(l.rA,{name:"MuiInput",slot:"Input",overridesResolver:l._o})({}),x=i.forwardRef((function(e,t){var o,i,d,c;const p=(0,u.Z)({props:e,name:"MuiInput"}),{disableUnderline:m,components:h={},componentsProps:x,fullWidth:w=!1,inputComponent:y="input",multiline:S=!1,slotProps:k,slots:P={},type:C="text"}=p,R=(0,n.Z)(p,b),M=(e=>{const{classes:t,disableUnderline:o}=e,n={root:["root",!o&&"underline"],input:["input"]},i=(0,a.Z)(n,f,t);return(0,r.Z)({},t,i)})(p),$={root:{ownerState:{disableUnderline:m}}},E=(null!=k?k:x)?(0,s.Z)(null!=k?k:x,$):$,F=null!=(o=null!=(i=P.root)?i:h.Root)?o:g,z=null!=(d=null!=(c=P.input)?c:h.Input)?d:Z;return(0,v.jsx)(l.ZP,(0,r.Z)({slots:{root:F,input:z},slotProps:E,fullWidth:w,inputComponent:y,multiline:S,ref:t,type:C},R,{classes:M}))}));x.muiName="Input";const w=x},8543:(e,t,o)=>{o.d(t,{Ej:()=>C,Gx:()=>k,ZP:()=>$,_o:()=>P,rA:()=>R});var n=o(3366),r=o(7462),i=o(6535),a=o(7294),s=o(512),l=o(4780),d=o(7598),u=o(8442),c=o(5704),p=o(7167),m=o(4423),f=o(948),h=o(1657),v=o(8216),b=o(1705),g=o(8974),Z=o(6294),x=o(5108),w=o(5827),y=o(5893);const S=["aria-describedby","autoComplete","autoFocus","className","color","components","componentsProps","defaultValue","disabled","disableInjectingGlobalStyles","endAdornment","error","fullWidth","id","inputComponent","inputProps","inputRef","margin","maxRows","minRows","multiline","name","onBlur","onChange","onClick","onFocus","onKeyDown","onKeyUp","placeholder","readOnly","renderSuffix","rows","size","slotProps","slots","startAdornment","type","value"],k=(e,t)=>{const{ownerState:o}=e;return[t.root,o.formControl&&t.formControl,o.startAdornment&&t.adornedStart,o.endAdornment&&t.adornedEnd,o.error&&t.error,"small"===o.size&&t.sizeSmall,o.multiline&&t.multiline,o.color&&t[`color${(0,v.Z)(o.color)}`],o.fullWidth&&t.fullWidth,o.hiddenLabel&&t.hiddenLabel]},P=(e,t)=>{const{ownerState:o}=e;return[t.input,"small"===o.size&&t.inputSizeSmall,o.multiline&&t.inputMultiline,"search"===o.type&&t.inputTypeSearch,o.startAdornment&&t.inputAdornedStart,o.endAdornment&&t.inputAdornedEnd,o.hiddenLabel&&t.inputHiddenLabel]},C=(0,f.ZP)("div",{name:"MuiInputBase",slot:"Root",overridesResolver:k})((({theme:e,ownerState:t})=>(0,r.Z)({},e.typography.body1,{color:(e.vars||e).palette.text.primary,lineHeight:"1.4375em",boxSizing:"border-box",position:"relative",cursor:"text",display:"inline-flex",alignItems:"center",[`&.${w.Z.disabled}`]:{color:(e.vars||e).palette.text.disabled,cursor:"default"}},t.multiline&&(0,r.Z)({padding:"4px 0 5px"},"small"===t.size&&{paddingTop:1}),t.fullWidth&&{width:"100%"}))),R=(0,f.ZP)("input",{name:"MuiInputBase",slot:"Input",overridesResolver:P})((({theme:e,ownerState:t})=>{const o="light"===e.palette.mode,n=(0,r.Z)({color:"currentColor"},e.vars?{opacity:e.vars.opacity.inputPlaceholder}:{opacity:o?.42:.5},{transition:e.transitions.create("opacity",{duration:e.transitions.duration.shorter})}),i={opacity:"0 !important"},a=e.vars?{opacity:e.vars.opacity.inputPlaceholder}:{opacity:o?.42:.5};return(0,r.Z)({font:"inherit",letterSpacing:"inherit",color:"currentColor",padding:"4px 0 5px",border:0,boxSizing:"content-box",background:"none",height:"1.4375em",margin:0,WebkitTapHighlightColor:"transparent",display:"block",minWidth:0,width:"100%",animationName:"mui-auto-fill-cancel",animationDuration:"10ms","&::-webkit-input-placeholder":n,"&::-moz-placeholder":n,"&:-ms-input-placeholder":n,"&::-ms-input-placeholder":n,"&:focus":{outline:0},"&:invalid":{boxShadow:"none"},"&::-webkit-search-decoration":{WebkitAppearance:"none"},[`label[data-shrink=false] + .${w.Z.formControl} &`]:{"&::-webkit-input-placeholder":i,"&::-moz-placeholder":i,"&:-ms-input-placeholder":i,"&::-ms-input-placeholder":i,"&:focus::-webkit-input-placeholder":a,"&:focus::-moz-placeholder":a,"&:focus:-ms-input-placeholder":a,"&:focus::-ms-input-placeholder":a},[`&.${w.Z.disabled}`]:{opacity:1,WebkitTextFillColor:(e.vars||e).palette.text.disabled},"&:-webkit-autofill":{animationDuration:"5000s",animationName:"mui-auto-fill"}},"small"===t.size&&{paddingTop:1},t.multiline&&{height:"auto",resize:"none",padding:0,paddingTop:0},"search"===t.type&&{MozAppearance:"textfield"})})),M=(0,y.jsx)(Z.Z,{styles:{"@keyframes mui-auto-fill":{from:{display:"block"}},"@keyframes mui-auto-fill-cancel":{from:{display:"block"}}}}),$=a.forwardRef((function(e,t){var o;const f=(0,h.Z)({props:e,name:"MuiInputBase"}),{"aria-describedby":Z,autoComplete:k,autoFocus:P,className:$,components:E={},componentsProps:F={},defaultValue:z,disabled:N,disableInjectingGlobalStyles:T,endAdornment:L,fullWidth:W=!1,id:I,inputComponent:A="input",inputProps:B={},inputRef:O,maxRows:j,minRows:q,multiline:D=!1,name:H,onBlur:K,onChange:U,onClick:G,onFocus:X,onKeyDown:V,onKeyUp:_,placeholder:J,readOnly:Y,renderSuffix:Q,rows:ee,slotProps:te={},slots:oe={},startAdornment:ne,type:re="text",value:ie}=f,ae=(0,n.Z)(f,S),se=null!=B.value?B.value:ie,{current:le}=a.useRef(null!=se),de=a.useRef(),ue=a.useCallback((e=>{}),[]),ce=(0,b.Z)(de,O,B.ref,ue),[pe,me]=a.useState(!1),fe=(0,m.Z)(),he=(0,c.Z)({props:f,muiFormControl:fe,states:["color","disabled","error","hiddenLabel","size","required","filled"]});he.focused=fe?fe.focused:pe,a.useEffect((()=>{!fe&&N&&pe&&(me(!1),K&&K())}),[fe,N,pe,K]);const ve=fe&&fe.onFilled,be=fe&&fe.onEmpty,ge=a.useCallback((e=>{(0,x.vd)(e)?ve&&ve():be&&be()}),[ve,be]);(0,g.Z)((()=>{le&&ge({value:se})}),[se,ge,le]),a.useEffect((()=>{ge(de.current)}),[]);let Ze=A,xe=B;D&&"input"===Ze&&(xe=ee?(0,r.Z)({type:void 0,minRows:ee,maxRows:ee},xe):(0,r.Z)({type:void 0,maxRows:j,minRows:q},xe),Ze=d.u),a.useEffect((()=>{fe&&fe.setAdornedStart(Boolean(ne))}),[fe,ne]);const we=(0,r.Z)({},f,{color:he.color||"primary",disabled:he.disabled,endAdornment:L,error:he.error,focused:he.focused,formControl:fe,fullWidth:W,hiddenLabel:he.hiddenLabel,multiline:D,size:he.size,startAdornment:ne,type:re}),ye=(e=>{const{classes:t,color:o,disabled:n,error:r,endAdornment:i,focused:a,formControl:s,fullWidth:d,hiddenLabel:u,multiline:c,readOnly:p,size:m,startAdornment:f,type:h}=e,b={root:["root",`color${(0,v.Z)(o)}`,n&&"disabled",r&&"error",d&&"fullWidth",a&&"focused",s&&"formControl",m&&"medium"!==m&&`size${(0,v.Z)(m)}`,c&&"multiline",f&&"adornedStart",i&&"adornedEnd",u&&"hiddenLabel",p&&"readOnly"],input:["input",n&&"disabled","search"===h&&"inputTypeSearch",c&&"inputMultiline","small"===m&&"inputSizeSmall",u&&"inputHiddenLabel",f&&"inputAdornedStart",i&&"inputAdornedEnd",p&&"readOnly"]};return(0,l.Z)(b,w.u,t)})(we),Se=oe.root||E.Root||C,ke=te.root||F.root||{},Pe=oe.input||E.Input||R;return xe=(0,r.Z)({},xe,null!=(o=te.input)?o:F.input),(0,y.jsxs)(a.Fragment,{children:[!T&&M,(0,y.jsxs)(Se,(0,r.Z)({},ke,!(0,u.X)(Se)&&{ownerState:(0,r.Z)({},we,ke.ownerState)},{ref:t,onClick:e=>{de.current&&e.currentTarget===e.target&&de.current.focus(),G&&G(e)}},ae,{className:(0,s.Z)(ye.root,ke.className,$,Y&&"MuiInputBase-readOnly"),children:[ne,(0,y.jsx)(p.Z.Provider,{value:null,children:(0,y.jsx)(Pe,(0,r.Z)({ownerState:we,"aria-invalid":he.error,"aria-describedby":Z,autoComplete:k,autoFocus:P,defaultValue:z,disabled:he.disabled,id:I,onAnimationStart:e=>{ge("mui-auto-fill-cancel"===e.animationName?de.current:{value:"x"})},name:H,placeholder:J,readOnly:Y,required:he.required,rows:ee,value:se,onKeyDown:V,onKeyUp:_,type:re},xe,!(0,u.X)(Pe)&&{as:Ze,ownerState:(0,r.Z)({},we,xe.ownerState)},{ref:ce,className:(0,s.Z)(ye.input,xe.className,Y&&"MuiInputBase-readOnly"),onBlur:e=>{K&&K(e),B.onBlur&&B.onBlur(e),fe&&fe.onBlur?fe.onBlur(e):me(!1)},onChange:(e,...t)=>{if(!le){const t=e.target||de.current;if(null==t)throw new Error((0,i.Z)(1));ge({value:t.value})}B.onChange&&B.onChange(e,...t),U&&U(e,...t)},onFocus:e=>{he.disabled?e.stopPropagation():(X&&X(e),B.onFocus&&B.onFocus(e),fe&&fe.onFocus?fe.onFocus(e):me(!0))}}))}),L,Q?Q((0,r.Z)({},he,{startAdornment:ne})):null]}))]})}))},5827:(e,t,o)=>{o.d(t,{Z:()=>a,u:()=>i});var n=o(1588),r=o(4867);function i(e){return(0,r.Z)("MuiInputBase",e)}const a=(0,n.Z)("MuiInputBase",["root","formControl","focused","disabled","adornedStart","adornedEnd","error","sizeSmall","multiline","colorSecondary","fullWidth","hiddenLabel","readOnly","input","inputSizeSmall","inputMultiline","inputTypeSearch","inputAdornedStart","inputAdornedEnd","inputHiddenLabel"])},5108:(e,t,o)=>{function n(e){return null!=e&&!(Array.isArray(e)&&0===e.length)}function r(e,t=!1){return e&&(n(e.value)&&""!==e.value||t&&n(e.defaultValue)&&""!==e.defaultValue)}function i(e){return e.startAdornment}o.d(t,{B7:()=>i,vd:()=>r})},7666:(e,t,o)=>{o.d(t,{Z:()=>P});var n=o(3366),r=o(7462),i=o(7294),a=o(4780),s=o(512),l=o(5704),d=o(4423),u=o(8216),c=o(1657),p=o(948),m=o(1588),f=o(4867);function h(e){return(0,f.Z)("MuiFormLabel",e)}const v=(0,m.Z)("MuiFormLabel",["root","colorSecondary","focused","disabled","error","filled","required","asterisk"]);var b=o(5893);const g=["children","className","color","component","disabled","error","filled","focused","required"],Z=(0,p.ZP)("label",{name:"MuiFormLabel",slot:"Root",overridesResolver:({ownerState:e},t)=>(0,r.Z)({},t.root,"secondary"===e.color&&t.colorSecondary,e.filled&&t.filled)})((({theme:e,ownerState:t})=>(0,r.Z)({color:(e.vars||e).palette.text.secondary},e.typography.body1,{lineHeight:"1.4375em",padding:0,position:"relative",[`&.${v.focused}`]:{color:(e.vars||e).palette[t.color].main},[`&.${v.disabled}`]:{color:(e.vars||e).palette.text.disabled},[`&.${v.error}`]:{color:(e.vars||e).palette.error.main}}))),x=(0,p.ZP)("span",{name:"MuiFormLabel",slot:"Asterisk",overridesResolver:(e,t)=>t.asterisk})((({theme:e})=>({[`&.${v.error}`]:{color:(e.vars||e).palette.error.main}}))),w=i.forwardRef((function(e,t){const o=(0,c.Z)({props:e,name:"MuiFormLabel"}),{children:i,className:p,component:m="label"}=o,f=(0,n.Z)(o,g),v=(0,d.Z)(),w=(0,l.Z)({props:o,muiFormControl:v,states:["color","required","focused","disabled","error","filled"]}),y=(0,r.Z)({},o,{color:w.color||"primary",component:m,disabled:w.disabled,error:w.error,filled:w.filled,focused:w.focused,required:w.required}),S=(e=>{const{classes:t,color:o,focused:n,disabled:r,error:i,filled:s,required:l}=e,d={root:["root",`color${(0,u.Z)(o)}`,r&&"disabled",i&&"error",s&&"filled",n&&"focused",l&&"required"],asterisk:["asterisk",i&&"error"]};return(0,a.Z)(d,h,t)})(y);return(0,b.jsxs)(Z,(0,r.Z)({as:m,ownerState:y,className:(0,s.Z)(S.root,p),ref:t},f,{children:[i,w.required&&(0,b.jsxs)(x,{ownerState:y,"aria-hidden":!0,className:S.asterisk,children:[" ","*"]})]}))}));function y(e){return(0,f.Z)("MuiInputLabel",e)}(0,m.Z)("MuiInputLabel",["root","focused","disabled","error","required","asterisk","formControl","sizeSmall","shrink","animated","standard","filled","outlined"]);const S=["disableAnimation","margin","shrink","variant","className"],k=(0,p.ZP)(w,{shouldForwardProp:e=>(0,p.FO)(e)||"classes"===e,name:"MuiInputLabel",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[{[`& .${v.asterisk}`]:t.asterisk},t.root,o.formControl&&t.formControl,"small"===o.size&&t.sizeSmall,o.shrink&&t.shrink,!o.disableAnimation&&t.animated,o.focused&&t.focused,t[o.variant]]}})((({theme:e,ownerState:t})=>(0,r.Z)({display:"block",transformOrigin:"top left",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%"},t.formControl&&{position:"absolute",left:0,top:0,transform:"translate(0, 20px) scale(1)"},"small"===t.size&&{transform:"translate(0, 17px) scale(1)"},t.shrink&&{transform:"translate(0, -1.5px) scale(0.75)",transformOrigin:"top left",maxWidth:"133%"},!t.disableAnimation&&{transition:e.transitions.create(["color","transform","max-width"],{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut})},"filled"===t.variant&&(0,r.Z)({zIndex:1,pointerEvents:"none",transform:"translate(12px, 16px) scale(1)",maxWidth:"calc(100% - 24px)"},"small"===t.size&&{transform:"translate(12px, 13px) scale(1)"},t.shrink&&(0,r.Z)({userSelect:"none",pointerEvents:"auto",transform:"translate(12px, 7px) scale(0.75)",maxWidth:"calc(133% - 24px)"},"small"===t.size&&{transform:"translate(12px, 4px) scale(0.75)"})),"outlined"===t.variant&&(0,r.Z)({zIndex:1,pointerEvents:"none",transform:"translate(14px, 16px) scale(1)",maxWidth:"calc(100% - 24px)"},"small"===t.size&&{transform:"translate(14px, 9px) scale(1)"},t.shrink&&{userSelect:"none",pointerEvents:"auto",maxWidth:"calc(133% - 32px)",transform:"translate(14px, -9px) scale(0.75)"})))),P=i.forwardRef((function(e,t){const o=(0,c.Z)({name:"MuiInputLabel",props:e}),{disableAnimation:i=!1,shrink:p,className:m}=o,f=(0,n.Z)(o,S),h=(0,d.Z)();let v=p;void 0===v&&h&&(v=h.filled||h.focused||h.adornedStart);const g=(0,l.Z)({props:o,muiFormControl:h,states:["size","variant","required","focused"]}),Z=(0,r.Z)({},o,{disableAnimation:i,formControl:h,shrink:v,size:g.size,variant:g.variant,required:g.required,focused:g.focused}),x=(e=>{const{classes:t,formControl:o,size:n,shrink:i,disableAnimation:s,variant:l,required:d}=e,c={root:["root",o&&"formControl",!s&&"animated",i&&"shrink",n&&"normal"!==n&&`size${(0,u.Z)(n)}`,l],asterisk:[d&&"asterisk"]},p=(0,a.Z)(c,y,t);return(0,r.Z)({},t,p)})(Z);return(0,b.jsx)(k,(0,r.Z)({"data-shrink":v,ownerState:Z,ref:t,className:(0,s.Z)(x.root,m)},f,{classes:x}))}))},1217:(e,t,o)=>{o.d(t,{Z:()=>ve});var n=o(7462),r=o(3366),i=o(7294),a=(o(9864),o(512)),s=o(4780),l=o(4391),d=o(8038),u=o(948),c=o(1657);const p=i.createContext({});var m=o(1588),f=o(4867);function h(e){return(0,f.Z)("MuiList",e)}(0,m.Z)("MuiList",["root","padding","dense","subheader"]);var v=o(5893);const b=["children","className","component","dense","disablePadding","subheader"],g=(0,u.ZP)("ul",{name:"MuiList",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,!o.disablePadding&&t.padding,o.dense&&t.dense,o.subheader&&t.subheader]}})((({ownerState:e})=>(0,n.Z)({listStyle:"none",margin:0,padding:0,position:"relative"},!e.disablePadding&&{paddingTop:8,paddingBottom:8},e.subheader&&{paddingTop:0}))),Z=i.forwardRef((function(e,t){const o=(0,c.Z)({props:e,name:"MuiList"}),{children:l,className:d,component:u="ul",dense:m=!1,disablePadding:f=!1,subheader:Z}=o,x=(0,r.Z)(o,b),w=i.useMemo((()=>({dense:m})),[m]),y=(0,n.Z)({},o,{component:u,dense:m,disablePadding:f}),S=(e=>{const{classes:t,disablePadding:o,dense:n,subheader:r}=e,i={root:["root",!o&&"padding",n&&"dense",r&&"subheader"]};return(0,s.Z)(i,h,t)})(y);return(0,v.jsx)(p.Provider,{value:w,children:(0,v.jsxs)(g,(0,n.Z)({as:u,className:(0,a.Z)(S.root,d),ref:t,ownerState:y},x,{children:[Z,l]}))})}));var x=o(256),w=o(1705),y=o(8974);const S=["actions","autoFocus","autoFocusItem","children","className","disabledItemsFocusable","disableListWrap","onKeyDown","variant"];function k(e,t,o){return e===t?e.firstChild:t&&t.nextElementSibling?t.nextElementSibling:o?null:e.firstChild}function P(e,t,o){return e===t?o?e.firstChild:e.lastChild:t&&t.previousElementSibling?t.previousElementSibling:o?null:e.lastChild}function C(e,t){if(void 0===t)return!0;let o=e.innerText;return void 0===o&&(o=e.textContent),o=o.trim().toLowerCase(),0!==o.length&&(t.repeating?o[0]===t.keys[0]:0===o.indexOf(t.keys.join("")))}function R(e,t,o,n,r,i){let a=!1,s=r(e,t,!!t&&o);for(;s;){if(s===e.firstChild){if(a)return!1;a=!0}const t=!n&&(s.disabled||"true"===s.getAttribute("aria-disabled"));if(s.hasAttribute("tabindex")&&C(s,i)&&!t)return s.focus(),!0;s=r(e,s,o)}return!1}const M=i.forwardRef((function(e,t){const{actions:o,autoFocus:a=!1,autoFocusItem:s=!1,children:l,className:u,disabledItemsFocusable:c=!1,disableListWrap:p=!1,onKeyDown:m,variant:f="selectedMenu"}=e,h=(0,r.Z)(e,S),b=i.useRef(null),g=i.useRef({keys:[],repeating:!0,previousKeyMatched:!0,lastTime:null});(0,y.Z)((()=>{a&&b.current.focus()}),[a]),i.useImperativeHandle(o,(()=>({adjustStyleForScrollbar:(e,t)=>{const o=!b.current.style.width;if(e.clientHeight{i.isValidElement(e)?(e.props.disabled||("selectedMenu"===f&&e.props.selected||-1===$)&&($=t),$===t&&(e.props.disabled||e.props.muiSkipListHighlight||e.type.muiSkipListHighlight)&&($+=1,$>=l.length&&($=-1))):$===t&&($+=1,$>=l.length&&($=-1))}));const E=i.Children.map(l,((e,t)=>{if(t===$){const t={};return s&&(t.autoFocus=!0),void 0===e.props.tabIndex&&"selectedMenu"===f&&(t.tabIndex=0),i.cloneElement(e,t)}return e}));return(0,v.jsx)(Z,(0,n.Z)({role:"menu",ref:M,className:u,onKeyDown:e=>{const t=b.current,o=e.key,n=(0,d.Z)(t).activeElement;if("ArrowDown"===o)e.preventDefault(),R(t,n,p,c,k);else if("ArrowUp"===o)e.preventDefault(),R(t,n,p,c,P);else if("Home"===o)e.preventDefault(),R(t,null,p,c,k);else if("End"===o)e.preventDefault(),R(t,null,p,c,P);else if(1===o.length){const r=g.current,i=o.toLowerCase(),a=performance.now();r.keys.length>0&&(a-r.lastTime>500?(r.keys=[],r.repeating=!0,r.previousKeyMatched=!0):r.repeating&&i!==r.keys[0]&&(r.repeating=!1)),r.lastTime=a,r.keys.push(i);const s=n&&!r.repeating&&C(n,r);r.previousKeyMatched&&(s||R(t,n,!1,c,k,r))?e.preventDefault():r.previousKeyMatched=!1}m&&m(e)},tabIndex:a?0:-1},h,{children:E}))}));var $=o(8442),E=o(7144),F=o(5340),z=o(8052),N=o(2734),T=o(577);const L=["addEndListener","appear","children","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"];function W(e){return`scale(${e}, ${e**2})`}const I={entering:{opacity:1,transform:W(1)},entered:{opacity:1,transform:"none"}},A="undefined"!=typeof navigator&&/^((?!chrome|android).)*(safari|mobile)/i.test(navigator.userAgent)&&/(os |version\/)15(.|_)4/i.test(navigator.userAgent),B=i.forwardRef((function(e,t){const{addEndListener:o,appear:a=!0,children:s,easing:l,in:d,onEnter:u,onEntered:c,onEntering:p,onExit:m,onExited:f,onExiting:h,style:b,timeout:g="auto",TransitionComponent:Z=z.ZP}=e,x=(0,r.Z)(e,L),y=i.useRef(),S=i.useRef(),k=(0,N.Z)(),P=i.useRef(null),C=(0,w.Z)(P,s.ref,t),R=e=>t=>{if(e){const o=P.current;void 0===t?e(o):e(o,t)}},M=R(p),$=R(((e,t)=>{(0,T.n)(e);const{duration:o,delay:n,easing:r}=(0,T.C)({style:b,timeout:g,easing:l},{mode:"enter"});let i;"auto"===g?(i=k.transitions.getAutoHeightDuration(e.clientHeight),S.current=i):i=o,e.style.transition=[k.transitions.create("opacity",{duration:i,delay:n}),k.transitions.create("transform",{duration:A?i:.666*i,delay:n,easing:r})].join(","),u&&u(e,t)})),E=R(c),F=R(h),B=R((e=>{const{duration:t,delay:o,easing:n}=(0,T.C)({style:b,timeout:g,easing:l},{mode:"exit"});let r;"auto"===g?(r=k.transitions.getAutoHeightDuration(e.clientHeight),S.current=r):r=t,e.style.transition=[k.transitions.create("opacity",{duration:r,delay:o}),k.transitions.create("transform",{duration:A?r:.666*r,delay:A?o:o||.333*r,easing:n})].join(","),e.style.opacity=0,e.style.transform=W(.75),m&&m(e)})),O=R(f);return i.useEffect((()=>()=>{clearTimeout(y.current)}),[]),(0,v.jsx)(Z,(0,n.Z)({appear:a,in:d,nodeRef:P,onEnter:$,onEntered:E,onEntering:M,onExit:B,onExited:O,onExiting:F,addEndListener:e=>{"auto"===g&&(y.current=setTimeout(e,S.current||0)),o&&o(P.current,e)},timeout:"auto"===g?null:g},x,{children:(e,t)=>i.cloneElement(s,(0,n.Z)({style:(0,n.Z)({opacity:0,transform:W(.75),visibility:"exited"!==e||d?void 0:"hidden"},I[e],b,s.props.style),ref:C},t))}))}));B.muiSupportAuto=!0;const O=B;var j=o(6556),q=o(3470),D=o(8385),H=o(4567);function K(e){return(0,f.Z)("MuiModal",e)}(0,m.Z)("MuiModal",["root","hidden","backdrop"]);const U=["BackdropComponent","BackdropProps","classes","className","closeAfterTransition","children","container","component","components","componentsProps","disableAutoFocus","disableEnforceFocus","disableEscapeKeyDown","disablePortal","disableRestoreFocus","disableScrollLock","hideBackdrop","keepMounted","onBackdropClick","onClose","onTransitionEnter","onTransitionExited","open","slotProps","slots","theme"],G=(0,u.ZP)("div",{name:"MuiModal",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,!o.open&&o.exited&&t.hidden]}})((({theme:e,ownerState:t})=>(0,n.Z)({position:"fixed",zIndex:(e.vars||e).zIndex.modal,right:0,bottom:0,top:0,left:0},!t.open&&t.exited&&{visibility:"hidden"}))),X=(0,u.ZP)(H.Z,{name:"MuiModal",slot:"Backdrop",overridesResolver:(e,t)=>t.backdrop})({zIndex:-1}),V=i.forwardRef((function(e,t){var o,d,u,p,m,f;const h=(0,c.Z)({name:"MuiModal",props:e}),{BackdropComponent:b=X,BackdropProps:g,className:Z,closeAfterTransition:x=!1,children:w,container:y,component:S,components:k={},componentsProps:P={},disableAutoFocus:C=!1,disableEnforceFocus:R=!1,disableEscapeKeyDown:M=!1,disablePortal:$=!1,disableRestoreFocus:E=!1,disableScrollLock:F=!1,hideBackdrop:z=!1,keepMounted:N=!1,onBackdropClick:T,open:L,slotProps:W,slots:I}=h,A=(0,r.Z)(h,U),B=(0,n.Z)({},h,{closeAfterTransition:x,disableAutoFocus:C,disableEnforceFocus:R,disableEscapeKeyDown:M,disablePortal:$,disableRestoreFocus:E,disableScrollLock:F,hideBackdrop:z,keepMounted:N}),{getRootProps:O,getBackdropProps:H,getTransitionProps:V,portalRef:_,isTopModal:J,exited:Y,hasTransition:Q}=(0,j.d)((0,n.Z)({},B,{rootRef:t})),ee=(0,n.Z)({},B,{exited:Y}),te=(e=>{const{open:t,exited:o,classes:n}=e,r={root:["root",!t&&o&&"hidden"],backdrop:["backdrop"]};return(0,s.Z)(r,K,n)})(ee),oe={};if(void 0===w.props.tabIndex&&(oe.tabIndex="-1"),Q){const{onEnter:e,onExited:t}=V();oe.onEnter=e,oe.onExited=t}const ne=null!=(o=null!=(d=null==I?void 0:I.root)?d:k.Root)?o:G,re=null!=(u=null!=(p=null==I?void 0:I.backdrop)?p:k.Backdrop)?u:b,ie=null!=(m=null==W?void 0:W.root)?m:P.root,ae=null!=(f=null==W?void 0:W.backdrop)?f:P.backdrop,se=(0,l.y)({elementType:ne,externalSlotProps:ie,externalForwardedProps:A,getSlotProps:O,additionalProps:{ref:t,as:S},ownerState:ee,className:(0,a.Z)(Z,null==ie?void 0:ie.className,null==te?void 0:te.root,!ee.open&&ee.exited&&(null==te?void 0:te.hidden))}),le=(0,l.y)({elementType:re,externalSlotProps:ae,additionalProps:g,getSlotProps:e=>H((0,n.Z)({},e,{onClick:t=>{T&&T(t),null!=e&&e.onClick&&e.onClick(t)}})),className:(0,a.Z)(null==ae?void 0:ae.className,null==g?void 0:g.className,null==te?void 0:te.backdrop),ownerState:ee});return N||L||Q&&!Y?(0,v.jsx)(D.h,{ref:_,container:y,disablePortal:$,children:(0,v.jsxs)(ne,(0,n.Z)({},se,{children:[!z&&b?(0,v.jsx)(re,(0,n.Z)({},le)):null,(0,v.jsx)(q.i,{disableEnforceFocus:R,disableAutoFocus:C,disableRestoreFocus:E,isEnabled:J,open:L,children:i.cloneElement(w,oe)})]}))}):null}));var _=o(6501);function J(e){return(0,f.Z)("MuiPopover",e)}(0,m.Z)("MuiPopover",["root","paper"]);const Y=["onEntering"],Q=["action","anchorEl","anchorOrigin","anchorPosition","anchorReference","children","className","container","elevation","marginThreshold","open","PaperProps","slots","slotProps","transformOrigin","TransitionComponent","transitionDuration","TransitionProps","disableScrollLock"],ee=["slotProps"];function te(e,t){let o=0;return"number"==typeof t?o=t:"center"===t?o=e.height/2:"bottom"===t&&(o=e.height),o}function oe(e,t){let o=0;return"number"==typeof t?o=t:"center"===t?o=e.width/2:"right"===t&&(o=e.width),o}function ne(e){return[e.horizontal,e.vertical].map((e=>"number"==typeof e?`${e}px`:e)).join(" ")}function re(e){return"function"==typeof e?e():e}const ie=(0,u.ZP)(V,{name:"MuiPopover",slot:"Root",overridesResolver:(e,t)=>t.root})({}),ae=(0,u.ZP)(_.Z,{name:"MuiPopover",slot:"Paper",overridesResolver:(e,t)=>t.paper})({position:"absolute",overflowY:"auto",overflowX:"hidden",minWidth:16,minHeight:16,maxWidth:"calc(100% - 32px)",maxHeight:"calc(100% - 32px)",outline:0}),se=i.forwardRef((function(e,t){var o,u,p;const m=(0,c.Z)({props:e,name:"MuiPopover"}),{action:f,anchorEl:h,anchorOrigin:b={vertical:"top",horizontal:"left"},anchorPosition:g,anchorReference:Z="anchorEl",children:x,className:y,container:S,elevation:k=8,marginThreshold:P=16,open:C,PaperProps:R={},slots:M,slotProps:z,transformOrigin:N={vertical:"top",horizontal:"left"},TransitionComponent:T=O,transitionDuration:L="auto",TransitionProps:{onEntering:W}={},disableScrollLock:I=!1}=m,A=(0,r.Z)(m.TransitionProps,Y),B=(0,r.Z)(m,Q),j=null!=(o=null==z?void 0:z.paper)?o:R,q=i.useRef(),D=(0,w.Z)(q,j.ref),H=(0,n.Z)({},m,{anchorOrigin:b,anchorReference:Z,elevation:k,marginThreshold:P,externalPaperSlotProps:j,transformOrigin:N,TransitionComponent:T,transitionDuration:L,TransitionProps:A}),K=(e=>{const{classes:t}=e;return(0,s.Z)({root:["root"],paper:["paper"]},J,t)})(H),U=i.useCallback((()=>{if("anchorPosition"===Z)return g;const e=re(h),t=(e&&1===e.nodeType?e:(0,d.Z)(q.current).body).getBoundingClientRect();return{top:t.top+te(t,b.vertical),left:t.left+oe(t,b.horizontal)}}),[h,b.horizontal,b.vertical,g,Z]),G=i.useCallback((e=>({vertical:te(e,N.vertical),horizontal:oe(e,N.horizontal)})),[N.horizontal,N.vertical]),X=i.useCallback((e=>{const t={width:e.offsetWidth,height:e.offsetHeight},o=G(t);if("none"===Z)return{top:null,left:null,transformOrigin:ne(o)};const n=U();let r=n.top-o.vertical,i=n.left-o.horizontal;const a=r+t.height,s=i+t.width,l=(0,F.Z)(re(h)),d=l.innerHeight-P,u=l.innerWidth-P;if(null!==P&&rd){const e=a-d;r-=e,o.vertical+=e}if(null!==P&&iu){const e=s-u;i-=e,o.horizontal+=e}return{top:`${Math.round(r)}px`,left:`${Math.round(i)}px`,transformOrigin:ne(o)}}),[h,Z,U,G,P]),[V,_]=i.useState(C),se=i.useCallback((()=>{const e=q.current;if(!e)return;const t=X(e);null!==t.top&&(e.style.top=t.top),null!==t.left&&(e.style.left=t.left),e.style.transformOrigin=t.transformOrigin,_(!0)}),[X]);i.useEffect((()=>(I&&window.addEventListener("scroll",se),()=>window.removeEventListener("scroll",se))),[h,I,se]),i.useEffect((()=>{C&&se()})),i.useImperativeHandle(f,(()=>C?{updatePosition:()=>{se()}}:null),[C,se]),i.useEffect((()=>{if(!C)return;const e=(0,E.Z)((()=>{se()})),t=(0,F.Z)(h);return t.addEventListener("resize",e),()=>{e.clear(),t.removeEventListener("resize",e)}}),[h,C,se]);let le=L;"auto"!==L||T.muiSupportAuto||(le=void 0);const de=S||(h?(0,d.Z)(re(h)).body:void 0),ue=null!=(u=null==M?void 0:M.root)?u:ie,ce=null!=(p=null==M?void 0:M.paper)?p:ae,pe=(0,l.y)({elementType:ce,externalSlotProps:(0,n.Z)({},j,{style:V?j.style:(0,n.Z)({},j.style,{opacity:0})}),additionalProps:{elevation:k,ref:D},ownerState:H,className:(0,a.Z)(K.paper,null==j?void 0:j.className)}),me=(0,l.y)({elementType:ue,externalSlotProps:(null==z?void 0:z.root)||{},externalForwardedProps:B,additionalProps:{ref:t,slotProps:{backdrop:{invisible:!0}},container:de,open:C},ownerState:H,className:(0,a.Z)(K.root,y)}),{slotProps:fe}=me,he=(0,r.Z)(me,ee);return(0,v.jsx)(ue,(0,n.Z)({},he,!(0,$.X)(ue)&&{slotProps:fe,disableScrollLock:I},{children:(0,v.jsx)(T,(0,n.Z)({appear:!0,in:C,onEntering:(e,t)=>{W&&W(e,t),se()},onExited:()=>{_(!1)},timeout:le},A,{children:(0,v.jsx)(ce,(0,n.Z)({},pe,{children:x}))}))}))}));function le(e){return(0,f.Z)("MuiMenu",e)}(0,m.Z)("MuiMenu",["root","paper","list"]);const de=["onEntering"],ue=["autoFocus","children","className","disableAutoFocusItem","MenuListProps","onClose","open","PaperProps","PopoverClasses","transitionDuration","TransitionProps","variant","slots","slotProps"],ce={vertical:"top",horizontal:"right"},pe={vertical:"top",horizontal:"left"},me=(0,u.ZP)(se,{shouldForwardProp:e=>(0,u.FO)(e)||"classes"===e,name:"MuiMenu",slot:"Root",overridesResolver:(e,t)=>t.root})({}),fe=(0,u.ZP)(ae,{name:"MuiMenu",slot:"Paper",overridesResolver:(e,t)=>t.paper})({maxHeight:"calc(100% - 96px)",WebkitOverflowScrolling:"touch"}),he=(0,u.ZP)(M,{name:"MuiMenu",slot:"List",overridesResolver:(e,t)=>t.list})({outline:0}),ve=i.forwardRef((function(e,t){var o,d;const u=(0,c.Z)({props:e,name:"MuiMenu"}),{autoFocus:p=!0,children:m,className:f,disableAutoFocusItem:h=!1,MenuListProps:b={},onClose:g,open:Z,PaperProps:x={},PopoverClasses:w,transitionDuration:y="auto",TransitionProps:{onEntering:S}={},variant:k="selectedMenu",slots:P={},slotProps:C={}}=u,R=(0,r.Z)(u.TransitionProps,de),M=(0,r.Z)(u,ue),$=(0,N.Z)(),E="rtl"===$.direction,F=(0,n.Z)({},u,{autoFocus:p,disableAutoFocusItem:h,MenuListProps:b,onEntering:S,PaperProps:x,transitionDuration:y,TransitionProps:R,variant:k}),z=(e=>{const{classes:t}=e;return(0,s.Z)({root:["root"],paper:["paper"],list:["list"]},le,t)})(F),T=p&&!h&&Z,L=i.useRef(null);let W=-1;i.Children.map(m,((e,t)=>{i.isValidElement(e)&&(e.props.disabled||("selectedMenu"===k&&e.props.selected||-1===W)&&(W=t))}));const I=null!=(o=P.paper)?o:fe,A=null!=(d=C.paper)?d:x,B=(0,l.y)({elementType:P.root,externalSlotProps:C.root,ownerState:F,className:[z.root,f]}),O=(0,l.y)({elementType:I,externalSlotProps:A,ownerState:F,className:z.paper});return(0,v.jsx)(me,(0,n.Z)({onClose:g,anchorOrigin:{vertical:"bottom",horizontal:E?"right":"left"},transformOrigin:E?ce:pe,slots:{paper:I,root:P.root},slotProps:{root:B,paper:O},open:Z,ref:t,transitionDuration:y,TransitionProps:(0,n.Z)({onEntering:(e,t)=>{L.current&&L.current.adjustStyleForScrollbar(e,$),S&&S(e,t)}},R),ownerState:F},M,{classes:w,children:(0,v.jsx)(he,(0,n.Z)({onKeyDown:e=>{"Tab"===e.key&&(e.preventDefault(),g&&g(e,"tabKeyDown"))},actions:L,autoFocus:p&&(-1===W||h),autoFocusItem:T,variant:k},b,{className:(0,a.Z)(z.list,b.className),children:m}))}))}))},5961:(e,t,o)=>{o.d(t,{ZP:()=>x,SJ:()=>g,wU:()=>v});var n=o(3366),r=o(7462),i=o(7294),a=o(512),s=o(4780),l=o(8216),d=o(1588),u=o(4867);function c(e){return(0,u.Z)("MuiNativeSelect",e)}const p=(0,d.Z)("MuiNativeSelect",["root","select","multiple","filled","outlined","standard","disabled","icon","iconOpen","iconFilled","iconOutlined","iconStandard","nativeInput","error"]);var m=o(948),f=o(5893);const h=["className","disabled","error","IconComponent","inputRef","variant"],v=({ownerState:e,theme:t})=>(0,r.Z)({MozAppearance:"none",WebkitAppearance:"none",userSelect:"none",borderRadius:0,cursor:"pointer","&:focus":(0,r.Z)({},t.vars?{backgroundColor:`rgba(${t.vars.palette.common.onBackgroundChannel} / 0.05)`}:{backgroundColor:"light"===t.palette.mode?"rgba(0, 0, 0, 0.05)":"rgba(255, 255, 255, 0.05)"},{borderRadius:0}),"&::-ms-expand":{display:"none"},[`&.${p.disabled}`]:{cursor:"default"},"&[multiple]":{height:"auto"},"&:not([multiple]) option, &:not([multiple]) optgroup":{backgroundColor:(t.vars||t).palette.background.paper},"&&&":{paddingRight:24,minWidth:16}},"filled"===e.variant&&{"&&&":{paddingRight:32}},"outlined"===e.variant&&{borderRadius:(t.vars||t).shape.borderRadius,"&:focus":{borderRadius:(t.vars||t).shape.borderRadius},"&&&":{paddingRight:32}}),b=(0,m.ZP)("select",{name:"MuiNativeSelect",slot:"Select",shouldForwardProp:m.FO,overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.select,t[o.variant],o.error&&t.error,{[`&.${p.multiple}`]:t.multiple}]}})(v),g=({ownerState:e,theme:t})=>(0,r.Z)({position:"absolute",right:0,top:"calc(50% - .5em)",pointerEvents:"none",color:(t.vars||t).palette.action.active,[`&.${p.disabled}`]:{color:(t.vars||t).palette.action.disabled}},e.open&&{transform:"rotate(180deg)"},"filled"===e.variant&&{right:7},"outlined"===e.variant&&{right:7}),Z=(0,m.ZP)("svg",{name:"MuiNativeSelect",slot:"Icon",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.icon,o.variant&&t[`icon${(0,l.Z)(o.variant)}`],o.open&&t.iconOpen]}})(g),x=i.forwardRef((function(e,t){const{className:o,disabled:d,error:u,IconComponent:p,inputRef:m,variant:v="standard"}=e,g=(0,n.Z)(e,h),x=(0,r.Z)({},e,{disabled:d,variant:v,error:u}),w=(e=>{const{classes:t,variant:o,disabled:n,multiple:r,open:i,error:a}=e,d={select:["select",o,n&&"disabled",r&&"multiple",a&&"error"],icon:["icon",`icon${(0,l.Z)(o)}`,i&&"iconOpen",n&&"disabled"]};return(0,s.Z)(d,c,t)})(x);return(0,f.jsxs)(i.Fragment,{children:[(0,f.jsx)(b,(0,r.Z)({ownerState:x,className:(0,a.Z)(w.select,o),disabled:d,ref:m||t},g)),e.multiple?null:(0,f.jsx)(Z,{as:p,ownerState:x,className:w.icon})]})}))},3031:(e,t,o)=>{o.d(t,{Z:()=>R});var n,r=o(3366),i=o(7462),a=o(7294),s=o(4780),l=o(948),d=o(5893);const u=["children","classes","className","label","notched"],c=(0,l.ZP)("fieldset",{shouldForwardProp:l.FO})({textAlign:"left",position:"absolute",bottom:0,right:0,top:-5,left:0,margin:0,padding:"0 8px",pointerEvents:"none",borderRadius:"inherit",borderStyle:"solid",borderWidth:1,overflow:"hidden",minWidth:"0%"}),p=(0,l.ZP)("legend",{shouldForwardProp:l.FO})((({ownerState:e,theme:t})=>(0,i.Z)({float:"unset",width:"auto",overflow:"hidden"},!e.withLabel&&{padding:0,lineHeight:"11px",transition:t.transitions.create("width",{duration:150,easing:t.transitions.easing.easeOut})},e.withLabel&&(0,i.Z)({display:"block",padding:0,height:11,fontSize:"0.75em",visibility:"hidden",maxWidth:.01,transition:t.transitions.create("max-width",{duration:50,easing:t.transitions.easing.easeOut}),whiteSpace:"nowrap","& > span":{paddingLeft:5,paddingRight:5,display:"inline-block",opacity:0,visibility:"visible"}},e.notched&&{maxWidth:"100%",transition:t.transitions.create("max-width",{duration:100,easing:t.transitions.easing.easeOut,delay:50})}))));var m=o(4423),f=o(5704),h=o(1588),v=o(4867),b=o(5827);function g(e){return(0,v.Z)("MuiOutlinedInput",e)}const Z=(0,i.Z)({},b.Z,(0,h.Z)("MuiOutlinedInput",["root","notchedOutline","input"]));var x=o(8543),w=o(1657);const y=["components","fullWidth","inputComponent","label","multiline","notched","slots","type"],S=(0,l.ZP)(x.Ej,{shouldForwardProp:e=>(0,l.FO)(e)||"classes"===e,name:"MuiOutlinedInput",slot:"Root",overridesResolver:x.Gx})((({theme:e,ownerState:t})=>{const o="light"===e.palette.mode?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)";return(0,i.Z)({position:"relative",borderRadius:(e.vars||e).shape.borderRadius,[`&:hover .${Z.notchedOutline}`]:{borderColor:(e.vars||e).palette.text.primary},"@media (hover: none)":{[`&:hover .${Z.notchedOutline}`]:{borderColor:e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:o}},[`&.${Z.focused} .${Z.notchedOutline}`]:{borderColor:(e.vars||e).palette[t.color].main,borderWidth:2},[`&.${Z.error} .${Z.notchedOutline}`]:{borderColor:(e.vars||e).palette.error.main},[`&.${Z.disabled} .${Z.notchedOutline}`]:{borderColor:(e.vars||e).palette.action.disabled}},t.startAdornment&&{paddingLeft:14},t.endAdornment&&{paddingRight:14},t.multiline&&(0,i.Z)({padding:"16.5px 14px"},"small"===t.size&&{padding:"8.5px 14px"}))})),k=(0,l.ZP)((function(e){const{className:t,label:o,notched:a}=e,s=(0,r.Z)(e,u),l=null!=o&&""!==o,m=(0,i.Z)({},e,{notched:a,withLabel:l});return(0,d.jsx)(c,(0,i.Z)({"aria-hidden":!0,className:t,ownerState:m},s,{children:(0,d.jsx)(p,{ownerState:m,children:l?(0,d.jsx)("span",{children:o}):n||(n=(0,d.jsx)("span",{className:"notranslate",children:"​"}))})}))}),{name:"MuiOutlinedInput",slot:"NotchedOutline",overridesResolver:(e,t)=>t.notchedOutline})((({theme:e})=>{const t="light"===e.palette.mode?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)";return{borderColor:e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:t}})),P=(0,l.ZP)(x.rA,{name:"MuiOutlinedInput",slot:"Input",overridesResolver:x._o})((({theme:e,ownerState:t})=>(0,i.Z)({padding:"16.5px 14px"},!e.vars&&{"&:-webkit-autofill":{WebkitBoxShadow:"light"===e.palette.mode?null:"0 0 0 100px #266798 inset",WebkitTextFillColor:"light"===e.palette.mode?null:"#fff",caretColor:"light"===e.palette.mode?null:"#fff",borderRadius:"inherit"}},e.vars&&{"&:-webkit-autofill":{borderRadius:"inherit"},[e.getColorSchemeSelector("dark")]:{"&:-webkit-autofill":{WebkitBoxShadow:"0 0 0 100px #266798 inset",WebkitTextFillColor:"#fff",caretColor:"#fff"}}},"small"===t.size&&{padding:"8.5px 14px"},t.multiline&&{padding:0},t.startAdornment&&{paddingLeft:0},t.endAdornment&&{paddingRight:0}))),C=a.forwardRef((function(e,t){var o,n,l,u,c;const p=(0,w.Z)({props:e,name:"MuiOutlinedInput"}),{components:h={},fullWidth:v=!1,inputComponent:b="input",label:Z,multiline:C=!1,notched:R,slots:M={},type:$="text"}=p,E=(0,r.Z)(p,y),F=(e=>{const{classes:t}=e,o=(0,s.Z)({root:["root"],notchedOutline:["notchedOutline"],input:["input"]},g,t);return(0,i.Z)({},t,o)})(p),z=(0,m.Z)(),N=(0,f.Z)({props:p,muiFormControl:z,states:["color","disabled","error","focused","hiddenLabel","size","required"]}),T=(0,i.Z)({},p,{color:N.color||"primary",disabled:N.disabled,error:N.error,focused:N.focused,formControl:z,fullWidth:v,hiddenLabel:N.hiddenLabel,multiline:C,size:N.size,type:$}),L=null!=(o=null!=(n=M.root)?n:h.Root)?o:S,W=null!=(l=null!=(u=M.input)?u:h.Input)?l:P;return(0,d.jsx)(x.ZP,(0,i.Z)({slots:{root:L,input:W},renderSuffix:e=>(0,d.jsx)(k,{ownerState:T,className:F.notchedOutline,label:null!=Z&&""!==Z&&N.required?c||(c=(0,d.jsxs)(a.Fragment,{children:[Z," ","*"]})):Z,notched:void 0!==R?R:Boolean(e.startAdornment||e.filled||e.focused)}),fullWidth:v,inputComponent:b,multiline:C,ref:t,type:$},E,{classes:(0,i.Z)({},F,{notchedOutline:null})}))}));C.muiName="Input";const R=C},6501:(e,t,o)=>{o.d(t,{Z:()=>g});var n=o(3366),r=o(7462),i=o(7294),a=o(512),s=o(4780),l=o(1796),d=o(948),u=o(2029),c=o(1657),p=o(1588),m=o(4867);function f(e){return(0,m.Z)("MuiPaper",e)}(0,p.Z)("MuiPaper",["root","rounded","outlined","elevation","elevation0","elevation1","elevation2","elevation3","elevation4","elevation5","elevation6","elevation7","elevation8","elevation9","elevation10","elevation11","elevation12","elevation13","elevation14","elevation15","elevation16","elevation17","elevation18","elevation19","elevation20","elevation21","elevation22","elevation23","elevation24"]);var h=o(5893);const v=["className","component","elevation","square","variant"],b=(0,d.ZP)("div",{name:"MuiPaper",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,t[o.variant],!o.square&&t.rounded,"elevation"===o.variant&&t[`elevation${o.elevation}`]]}})((({theme:e,ownerState:t})=>{var o;return(0,r.Z)({backgroundColor:(e.vars||e).palette.background.paper,color:(e.vars||e).palette.text.primary,transition:e.transitions.create("box-shadow")},!t.square&&{borderRadius:e.shape.borderRadius},"outlined"===t.variant&&{border:`1px solid ${(e.vars||e).palette.divider}`},"elevation"===t.variant&&(0,r.Z)({boxShadow:(e.vars||e).shadows[t.elevation]},!e.vars&&"dark"===e.palette.mode&&{backgroundImage:`linear-gradient(${(0,l.Fq)("#fff",(0,u.Z)(t.elevation))}, ${(0,l.Fq)("#fff",(0,u.Z)(t.elevation))})`},e.vars&&{backgroundImage:null==(o=e.vars.overlays)?void 0:o[t.elevation]}))})),g=i.forwardRef((function(e,t){const o=(0,c.Z)({props:e,name:"MuiPaper"}),{className:i,component:l="div",elevation:d=1,square:u=!1,variant:p="elevation"}=o,m=(0,n.Z)(o,v),g=(0,r.Z)({},o,{component:l,elevation:d,square:u,variant:p}),Z=(e=>{const{square:t,elevation:o,variant:n,classes:r}=e,i={root:["root",n,!t&&"rounded","elevation"===n&&`elevation${o}`]};return(0,s.Z)(i,f,r)})(g);return(0,h.jsx)(b,(0,r.Z)({as:l,ownerState:g,className:(0,a.Z)(Z.root,i),ref:t},m))}))}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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LGdCQUFpRSxPQUEvQ0gsRUFBdUJsbUIsRUFBTVUsS0FBSzZsQixlQUFvQixFQUFTTCxFQUFxQnJtQixFQUFXeWdCLGFBQ2hILElBd0ZMLEVBdEYyQixjQUFpQixTQUFlemMsRUFBU0MsR0FDbEUsTUFBTW5FLEdBQVEsRUFBQXdFLEVBQUEsR0FBYyxDQUMxQnhFLE1BQU9rRSxFQUNQcEUsS0FBTSxjQUVGLFVBQ0Y4RyxFQUFTLFVBQ1RDLEVBQVksTUFBSyxVQUNqQjhaLEVBQVksRUFBQyxPQUNiMEYsR0FBUyxFQUFLLFFBQ2RyZixFQUFVLGFBQ1JoSCxFQUNKaUYsR0FBUSxPQUE4QmpGLEVBQU9SLEdBQ3pDVSxHQUFhLE9BQVMsQ0FBQyxFQUFHRixFQUFPLENBQ3JDNkcsWUFDQThaLFlBQ0EwRixTQUNBcmYsWUFFSTlCLEVBN0RrQmhGLEtBQ3hCLE1BQU0sT0FDSm1tQixFQUFNLFVBQ04xRixFQUFTLFFBQ1QzWixFQUFPLFFBQ1A5QixHQUNFaEYsRUFDRTZFLEVBQVEsQ0FDWkksS0FBTSxDQUFDLE9BQVE2QixHQUFVcWYsR0FBVSxVQUF1QixjQUFacmYsR0FBMkIsWUFBWTJaLE1BRXZGLE9BQU8sRUFBQXJiLEVBQUEsR0FBZVAsRUFBT29oQixFQUFzQmpoQixFQUFRLEVBbUQzQ0ssQ0FBa0JyRixHQVFsQyxPQUFvQixTQUFLa21CLEdBQVcsT0FBUyxDQUMzQzdkLEdBQUkxQixFQUNKM0csV0FBWUEsRUFDWjBHLFdBQVcsRUFBQTRCLEVBQUEsR0FBS3RELEVBQVFDLEtBQU15QixHQUM5QnpDLElBQUtBLEdBQ0pjLEdBQ0wsRyIsInNvdXJjZXMiOlsid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0ZpbGxlZElucHV0L2ZpbGxlZElucHV0Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9GaWxsZWRJbnB1dC9GaWxsZWRJbnB1dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvRm9ybUNvbnRyb2wuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvRm9ybUNvbnRyb2xDb250ZXh0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUhlbHBlclRleHQvZm9ybUhlbHBlclRleHRDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1IZWxwZXJUZXh0L0Zvcm1IZWxwZXJUZXh0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0dsb2JhbFN0eWxlcy9HbG9iYWxTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvR3JpZC9HcmlkQ29udGV4dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9HcmlkL2dyaWRDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0dyaWQvR3JpZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dC9pbnB1dENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXQvSW5wdXQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXRCYXNlL0lucHV0QmFzZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dEJhc2UvaW5wdXRCYXNlQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dEJhc2UvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUxhYmVsL2Zvcm1MYWJlbENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUxhYmVsL0Zvcm1MYWJlbC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dExhYmVsL2lucHV0TGFiZWxDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0lucHV0TGFiZWwvSW5wdXRMYWJlbC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9MaXN0L0xpc3RDb250ZXh0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3QvbGlzdENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGlzdC9MaXN0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL01lbnVMaXN0L01lbnVMaXN0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0dyb3cvR3Jvdy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Nb2RhbC9tb2RhbENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTW9kYWwvTW9kYWwuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUG9wb3Zlci9wb3BvdmVyQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Qb3BvdmVyL1BvcG92ZXIuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTWVudS9tZW51Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9NZW51L01lbnUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTmF0aXZlU2VsZWN0L25hdGl2ZVNlbGVjdENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTmF0aXZlU2VsZWN0L05hdGl2ZVNlbGVjdElucHV0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL091dGxpbmVkSW5wdXQvTm90Y2hlZE91dGxpbmUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvT3V0bGluZWRJbnB1dC9vdXRsaW5lZElucHV0Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9PdXRsaW5lZElucHV0L091dGxpbmVkSW5wdXQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUGFwZXIvcGFwZXJDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1BhcGVyL1BhcGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmltcG9ydCB7IGlucHV0QmFzZUNsYXNzZXMgfSBmcm9tICcuLi9JbnB1dEJhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGxlZElucHV0VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlGaWxsZWRJbnB1dCcsIHNsb3QpO1xufVxuY29uc3QgZmlsbGVkSW5wdXRDbGFzc2VzID0gX2V4dGVuZHMoe30sIGlucHV0QmFzZUNsYXNzZXMsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZpbGxlZElucHV0JywgWydyb290JywgJ3VuZGVybGluZScsICdpbnB1dCddKSk7XG5leHBvcnQgZGVmYXVsdCBmaWxsZWRJbnB1dENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZGlzYWJsZVVuZGVybGluZVwiLCBcImNvbXBvbmVudHNcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJmdWxsV2lkdGhcIiwgXCJoaWRkZW5MYWJlbFwiLCBcImlucHV0Q29tcG9uZW50XCIsIFwibXVsdGlsaW5lXCIsIFwic2xvdFByb3BzXCIsIFwic2xvdHNcIiwgXCJ0eXBlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcmVmVHlwZSwgZGVlcG1lcmdlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IElucHV0QmFzZSBmcm9tICcuLi9JbnB1dEJhc2UnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBmaWxsZWRJbnB1dENsYXNzZXMsIHsgZ2V0RmlsbGVkSW5wdXRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2ZpbGxlZElucHV0Q2xhc3Nlcyc7XG5pbXBvcnQgeyByb290T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyLCBpbnB1dE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIsIElucHV0QmFzZVJvb3QsIElucHV0QmFzZUNvbXBvbmVudCBhcyBJbnB1dEJhc2VJbnB1dCB9IGZyb20gJy4uL0lucHV0QmFzZS9JbnB1dEJhc2UnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGRpc2FibGVVbmRlcmxpbmVcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsICFkaXNhYmxlVW5kZXJsaW5lICYmICd1bmRlcmxpbmUnXSxcbiAgICBpbnB1dDogWydpbnB1dCddXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRGaWxsZWRJbnB1dFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgY2xhc3NlcywgY29tcG9zZWRDbGFzc2VzKTtcbn07XG5jb25zdCBGaWxsZWRJbnB1dFJvb3QgPSBzdHlsZWQoSW5wdXRCYXNlUm9vdCwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpRmlsbGVkSW5wdXQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFsuLi5pbnB1dEJhc2VSb290T3ZlcnJpZGVzUmVzb2x2ZXIocHJvcHMsIHN0eWxlcyksICFvd25lclN0YXRlLmRpc2FibGVVbmRlcmxpbmUgJiYgc3R5bGVzLnVuZGVybGluZV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIHZhciBfcGFsZXR0ZTtcbiAgY29uc3QgbGlnaHQgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCc7XG4gIGNvbnN0IGJvdHRvbUxpbmVDb2xvciA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC40MiknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSc7XG4gIGNvbnN0IGJhY2tncm91bmRDb2xvciA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC4wNiknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOSknO1xuICBjb25zdCBob3ZlckJhY2tncm91bmQgPSBsaWdodCA/ICdyZ2JhKDAsIDAsIDAsIDAuMDkpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTMpJztcbiAgY29uc3QgZGlzYWJsZWRCYWNrZ3JvdW5kID0gbGlnaHQgPyAncmdiYSgwLCAwLCAwLCAwLjEyKScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSc7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkZpbGxlZElucHV0LmJnIDogYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclRvcExlZnRSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdiYWNrZ3JvdW5kLWNvbG9yJywge1xuICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsXG4gICAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gICAgfSksXG4gICAgJyY6aG92ZXInOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuRmlsbGVkSW5wdXQuaG92ZXJCZyA6IGhvdmVyQmFja2dyb3VuZCxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5GaWxsZWRJbnB1dC5iZyA6IGJhY2tncm91bmRDb2xvclxuICAgICAgfVxuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmZvY3VzZWR9YF06IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5GaWxsZWRJbnB1dC5iZyA6IGJhY2tncm91bmRDb2xvclxuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuRmlsbGVkSW5wdXQuZGlzYWJsZWRCZyA6IGRpc2FibGVkQmFja2dyb3VuZFxuICAgIH1cbiAgfSwgIW93bmVyU3RhdGUuZGlzYWJsZVVuZGVybGluZSAmJiB7XG4gICAgJyY6OmFmdGVyJzoge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMnB4IHNvbGlkICR7KF9wYWxldHRlID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvciB8fCAncHJpbWFyeSddKSA9PSBudWxsID8gdm9pZCAwIDogX3BhbGV0dGUubWFpbn1gLFxuICAgICAgbGVmdDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIC8vIERvaW5nIHRoZSBvdGhlciB3YXkgYXJvdW5kIGNyYXNoIG9uIElFMTEgXCInJ1wiIGh0dHBzOi8vZ2l0aHViLmNvbS9jc3NpbmpzL2pzcy9pc3N1ZXMvMjQyXG4gICAgICBjb250ZW50OiAnXCJcIicsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdHJhbnNmb3JtOiAnc2NhbGVYKDApJyxcbiAgICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlcixcbiAgICAgICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICAgICAgfSksXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScgLy8gVHJhbnNwYXJlbnQgdG8gdGhlIGhvdmVyIHN0eWxlLlxuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmZvY3VzZWR9OmFmdGVyYF06IHtcbiAgICAgIC8vIHRyYW5zbGF0ZVgoMCkgaXMgYSB3b3JrYXJvdW5kIGZvciBTYWZhcmkgdHJhbnNmb3JtIHNjYWxlIGJ1Z1xuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzMxNzY2XG4gICAgICB0cmFuc2Zvcm06ICdzY2FsZVgoMSkgdHJhbnNsYXRlWCgwKSdcbiAgICB9LFxuICAgIFtgJi4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5lcnJvcn1gXToge1xuICAgICAgJyY6OmJlZm9yZSwgJjo6YWZ0ZXInOiB7XG4gICAgICAgIGJvcmRlckJvdHRvbUNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gICAgICB9XG4gICAgfSxcbiAgICAnJjo6YmVmb3JlJzoge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7dGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLmNvbW1vbi5vbkJhY2tncm91bmRDaGFubmVsfSAvICR7dGhlbWUudmFycy5vcGFjaXR5LmlucHV0VW5kZXJsaW5lfSlgIDogYm90dG9tTGluZUNvbG9yfWAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgYm90dG9tOiAwLFxuICAgICAgLy8gRG9pbmcgdGhlIG90aGVyIHdheSBhcm91bmQgY3Jhc2ggb24gSUUxMSBcIicnXCIgaHR0cHM6Ly9naXRodWIuY29tL2Nzc2luanMvanNzL2lzc3Vlcy8yNDJcbiAgICAgIGNvbnRlbnQ6ICdcIlxcXFwwMGEwXCInLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICByaWdodDogMCxcbiAgICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnYm9yZGVyLWJvdHRvbS1jb2xvcicsIHtcbiAgICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXJcbiAgICAgIH0pLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnIC8vIFRyYW5zcGFyZW50IHRvIHRoZSBob3ZlciBzdHlsZS5cbiAgICB9LFxuICAgIFtgJjpob3Zlcjpub3QoLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmRpc2FibGVkfSwgLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmVycm9yfSk6YmVmb3JlYF06IHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQucHJpbWFyeX1gXG4gICAgfSxcbiAgICBbYCYuJHtmaWxsZWRJbnB1dENsYXNzZXMuZGlzYWJsZWR9OmJlZm9yZWBdOiB7XG4gICAgICBib3JkZXJCb3R0b21TdHlsZTogJ2RvdHRlZCdcbiAgICB9XG4gIH0sIG93bmVyU3RhdGUuc3RhcnRBZG9ybm1lbnQgJiYge1xuICAgIHBhZGRpbmdMZWZ0OiAxMlxuICB9LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiB7XG4gICAgcGFkZGluZ1JpZ2h0OiAxMlxuICB9LCBvd25lclN0YXRlLm11bHRpbGluZSAmJiBfZXh0ZW5kcyh7XG4gICAgcGFkZGluZzogJzI1cHggMTJweCA4cHgnXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICAgcGFkZGluZ1RvcDogMjEsXG4gICAgcGFkZGluZ0JvdHRvbTogNFxuICB9LCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIHtcbiAgICBwYWRkaW5nVG9wOiAxNixcbiAgICBwYWRkaW5nQm90dG9tOiAxN1xuICB9LCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICAgcGFkZGluZ1RvcDogOCxcbiAgICBwYWRkaW5nQm90dG9tOiA5XG4gIH0pKTtcbn0pO1xuY29uc3QgRmlsbGVkSW5wdXRJbnB1dCA9IHN0eWxlZChJbnB1dEJhc2VJbnB1dCwge1xuICBuYW1lOiAnTXVpRmlsbGVkSW5wdXQnLFxuICBzbG90OiAnSW5wdXQnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgcGFkZGluZ1RvcDogMjUsXG4gIHBhZGRpbmdSaWdodDogMTIsXG4gIHBhZGRpbmdCb3R0b206IDgsXG4gIHBhZGRpbmdMZWZ0OiAxMlxufSwgIXRoZW1lLnZhcnMgJiYge1xuICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgIFdlYmtpdEJveFNoYWRvdzogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcwIDAgMCAxMDBweCAjMjY2Nzk4IGluc2V0JyxcbiAgICBXZWJraXRUZXh0RmlsbENvbG9yOiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJyNmZmYnLFxuICAgIGNhcmV0Q29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnI2ZmZicsXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogJ2luaGVyaXQnLFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAnaW5oZXJpdCdcbiAgfVxufSwgdGhlbWUudmFycyAmJiB7XG4gICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogJ2luaGVyaXQnLFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAnaW5oZXJpdCdcbiAgfSxcbiAgW3RoZW1lLmdldENvbG9yU2NoZW1lU2VsZWN0b3IoJ2RhcmsnKV06IHtcbiAgICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgICAgV2Via2l0Qm94U2hhZG93OiAnMCAwIDAgMTAwcHggIzI2Njc5OCBpbnNldCcsXG4gICAgICBXZWJraXRUZXh0RmlsbENvbG9yOiAnI2ZmZicsXG4gICAgICBjYXJldENvbG9yOiAnI2ZmZidcbiAgICB9XG4gIH1cbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHBhZGRpbmdUb3A6IDIxLFxuICBwYWRkaW5nQm90dG9tOiA0XG59LCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIHtcbiAgcGFkZGluZ1RvcDogMTYsXG4gIHBhZGRpbmdCb3R0b206IDE3XG59LCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHtcbiAgcGFkZGluZ0xlZnQ6IDBcbn0sIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHtcbiAgcGFkZGluZ1JpZ2h0OiAwXG59LCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHBhZGRpbmdUb3A6IDgsXG4gIHBhZGRpbmdCb3R0b206IDlcbn0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIHtcbiAgcGFkZGluZ1RvcDogMCxcbiAgcGFkZGluZ0JvdHRvbTogMCxcbiAgcGFkZGluZ0xlZnQ6IDAsXG4gIHBhZGRpbmdSaWdodDogMFxufSkpO1xuY29uc3QgRmlsbGVkSW5wdXQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGaWxsZWRJbnB1dChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9yZWYsIF9zbG90cyRyb290LCBfcmVmMiwgX3Nsb3RzJGlucHV0O1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGaWxsZWRJbnB1dCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICAgIGNvbXBvbmVudHNQcm9wczogY29tcG9uZW50c1Byb3BzUHJvcCxcbiAgICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgICAgLy8gZGVjbGFyZSBoZXJlIHRvIHByZXZlbnQgc3ByZWFkaW5nIHRvIERPTVxuICAgICAgaW5wdXRDb21wb25lbnQgPSAnaW5wdXQnLFxuICAgICAgbXVsdGlsaW5lID0gZmFsc2UsXG4gICAgICBzbG90UHJvcHMsXG4gICAgICBzbG90cyA9IHt9LFxuICAgICAgdHlwZSA9ICd0ZXh0J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZnVsbFdpZHRoLFxuICAgIGlucHV0Q29tcG9uZW50LFxuICAgIG11bHRpbGluZSxcbiAgICB0eXBlXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMocHJvcHMpO1xuICBjb25zdCBmaWxsZWRJbnB1dENvbXBvbmVudHNQcm9wcyA9IHtcbiAgICByb290OiB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSxcbiAgICBpbnB1dDoge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH1cbiAgfTtcbiAgY29uc3QgY29tcG9uZW50c1Byb3BzID0gKHNsb3RQcm9wcyAhPSBudWxsID8gc2xvdFByb3BzIDogY29tcG9uZW50c1Byb3BzUHJvcCkgPyBkZWVwbWVyZ2UoZmlsbGVkSW5wdXRDb21wb25lbnRzUHJvcHMsIHNsb3RQcm9wcyAhPSBudWxsID8gc2xvdFByb3BzIDogY29tcG9uZW50c1Byb3BzUHJvcCkgOiBmaWxsZWRJbnB1dENvbXBvbmVudHNQcm9wcztcbiAgY29uc3QgUm9vdFNsb3QgPSAoX3JlZiA9IChfc2xvdHMkcm9vdCA9IHNsb3RzLnJvb3QpICE9IG51bGwgPyBfc2xvdHMkcm9vdCA6IGNvbXBvbmVudHMuUm9vdCkgIT0gbnVsbCA/IF9yZWYgOiBGaWxsZWRJbnB1dFJvb3Q7XG4gIGNvbnN0IElucHV0U2xvdCA9IChfcmVmMiA9IChfc2xvdHMkaW5wdXQgPSBzbG90cy5pbnB1dCkgIT0gbnVsbCA/IF9zbG90cyRpbnB1dCA6IGNvbXBvbmVudHMuSW5wdXQpICE9IG51bGwgPyBfcmVmMiA6IEZpbGxlZElucHV0SW5wdXQ7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dEJhc2UsIF9leHRlbmRzKHtcbiAgICBzbG90czoge1xuICAgICAgcm9vdDogUm9vdFNsb3QsXG4gICAgICBpbnB1dDogSW5wdXRTbG90XG4gICAgfSxcbiAgICBjb21wb25lbnRzUHJvcHM6IGNvbXBvbmVudHNQcm9wcyxcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICBpbnB1dENvbXBvbmVudDogaW5wdXRDb21wb25lbnQsXG4gICAgbXVsdGlsaW5lOiBtdWx0aWxpbmUsXG4gICAgcmVmOiByZWYsXG4gICAgdHlwZTogdHlwZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXNcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGaWxsZWRJbnB1dC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaGVscHMgdXNlcnMgdG8gZmlsbCBmb3JtcyBmYXN0ZXIsIGVzcGVjaWFsbHkgb24gbW9iaWxlIGRldmljZXMuXG4gICAqIFRoZSBuYW1lIGNhbiBiZSBjb25mdXNpbmcsIGFzIGl0J3MgbW9yZSBsaWtlIGFuIGF1dG9maWxsLlxuICAgKiBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgaXQgW2ZvbGxvd2luZyB0aGUgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybS1jb250cm9sLWluZnJhc3RydWN0dXJlLmh0bWwjYXV0b2ZpbGwpLlxuICAgKi9cbiAgYXV0b0NvbXBsZXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ3ByaW1hcnknYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeSddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RzYCBwcm9wIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIElucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90UHJvcHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdFByb3BzYCBwcm9wIGluc3RlYWQsIGFzIGBjb21wb25lbnRzUHJvcHNgIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGlucHV0IHdpbGwgbm90IGhhdmUgYW4gdW5kZXJsaW5lLlxuICAgKi9cbiAgZGlzYWJsZVVuZGVybGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbmQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBlbmRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBoaWRkZW4uXG4gICAqIFRoaXMgaXMgdXNlZCB0byBpbmNyZWFzZSBkZW5zaXR5IGZvciBhIGBGaWxsZWRJbnB1dGAuXG4gICAqIEJlIHN1cmUgdG8gYWRkIGBhcmlhLWxhYmVsYCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGlkZGVuTGFiZWw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2lucHV0J1xuICAgKi9cbiAgaW5wdXRDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAnbm9uZSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZSddKSxcbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtYXhSb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWluUm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIFtUZXh0YXJlYUF1dG9zaXplXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdGV4dGFyZWEtYXV0b3NpemUvKSBlbGVtZW50IGlzIHJlbmRlcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlsaW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgdmFsdWUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5DaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50IHwgSFRNTElucHV0RWxlbWVudD59IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChzdHJpbmcpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHNob3J0IGhpbnQgZGlzcGxheWVkIGluIHRoZSBgaW5wdXRgIGJlZm9yZSB0aGUgdXNlciBlbnRlcnMgYSB2YWx1ZS5cbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSXQgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAqIChub3QgZnJvbSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmaWVsZCkuXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIHJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c1Byb3BzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBTdGFydCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIHN0YXJ0QWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC4gSXQgc2hvdWxkIGJlIFthIHZhbGlkIEhUTUw1IGlucHV0IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNGb3JtXyUzQ2lucHV0JTNFX3R5cGVzKS5cbiAgICogQGRlZmF1bHQgJ3RleHQnXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHJlcXVpcmVkIGZvciBhIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5GaWxsZWRJbnB1dC5tdWlOYW1lID0gJ0lucHV0JztcbmV4cG9ydCBkZWZhdWx0IEZpbGxlZElucHV0OyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRm9ybUNvbnRyb2wnLCBzbG90KTtcbn1cbmNvbnN0IGZvcm1Db250cm9sQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1Db250cm9sJywgWydyb290JywgJ21hcmdpbk5vbmUnLCAnbWFyZ2luTm9ybWFsJywgJ21hcmdpbkRlbnNlJywgJ2Z1bGxXaWR0aCcsICdkaXNhYmxlZCddKTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1Db250cm9sQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcImZvY3VzZWRcIiwgXCJmdWxsV2lkdGhcIiwgXCJoaWRkZW5MYWJlbFwiLCBcIm1hcmdpblwiLCBcInJlcXVpcmVkXCIsIFwic2l6ZVwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgaXNGaWxsZWQsIGlzQWRvcm5lZFN0YXJ0IH0gZnJvbSAnLi4vSW5wdXRCYXNlL3V0aWxzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IGlzTXVpRWxlbWVudCBmcm9tICcuLi91dGlscy9pc011aUVsZW1lbnQnO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuL0Zvcm1Db250cm9sQ29udGV4dCc7XG5pbXBvcnQgeyBnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9mb3JtQ29udHJvbENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIG1hcmdpbixcbiAgICBmdWxsV2lkdGhcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIG1hcmdpbiAhPT0gJ25vbmUnICYmIGBtYXJnaW4ke2NhcGl0YWxpemUobWFyZ2luKX1gLCBmdWxsV2lkdGggJiYgJ2Z1bGxXaWR0aCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgRm9ybUNvbnRyb2xSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlGb3JtQ29udHJvbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6ICh7XG4gICAgb3duZXJTdGF0ZVxuICB9LCBzdHlsZXMpID0+IHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0eWxlcy5yb290LCBzdHlsZXNbYG1hcmdpbiR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLm1hcmdpbil9YF0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHN0eWxlcy5mdWxsV2lkdGgpO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgLy8gUmVzZXQgZmllbGRzZXQgZGVmYXVsdCBzdHlsZS5cbiAgbWluV2lkdGg6IDAsXG4gIHBhZGRpbmc6IDAsXG4gIG1hcmdpbjogMCxcbiAgYm9yZGVyOiAwLFxuICB2ZXJ0aWNhbEFsaWduOiAndG9wJ1xufSwgb3duZXJTdGF0ZS5tYXJnaW4gPT09ICdub3JtYWwnICYmIHtcbiAgbWFyZ2luVG9wOiAxNixcbiAgbWFyZ2luQm90dG9tOiA4XG59LCBvd25lclN0YXRlLm1hcmdpbiA9PT0gJ2RlbnNlJyAmJiB7XG4gIG1hcmdpblRvcDogOCxcbiAgbWFyZ2luQm90dG9tOiA0XG59LCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiB7XG4gIHdpZHRoOiAnMTAwJSdcbn0pKTtcblxuLyoqXG4gKiBQcm92aWRlcyBjb250ZXh0IHN1Y2ggYXMgZmlsbGVkL2ZvY3VzZWQvZXJyb3IvcmVxdWlyZWQgZm9yIGZvcm0gaW5wdXRzLlxuICogUmVseWluZyBvbiB0aGUgY29udGV4dCBwcm92aWRlcyBoaWdoIGZsZXhpYmlsaXR5IGFuZCBlbnN1cmVzIHRoYXQgdGhlIHN0YXRlIGFsd2F5cyBzdGF5c1xuICogY29uc2lzdGVudCBhY3Jvc3MgdGhlIGNoaWxkcmVuIG9mIHRoZSBgRm9ybUNvbnRyb2xgLlxuICogVGhpcyBjb250ZXh0IGlzIHVzZWQgYnkgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOlxuICpcbiAqICAtIEZvcm1MYWJlbFxuICogIC0gRm9ybUhlbHBlclRleHRcbiAqICAtIElucHV0XG4gKiAgLSBJbnB1dExhYmVsXG4gKlxuICogWW91IGNhbiBmaW5kIG9uZSBjb21wb3NpdGlvbiBleGFtcGxlIGJlbG93IGFuZCBtb3JlIGdvaW5nIHRvIFt0aGUgZGVtb3NdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0LWZpZWxkLyNjb21wb25lbnRzKS5cbiAqXG4gKiBgYGBqc3hcbiAqIDxGb3JtQ29udHJvbD5cbiAqICAgPElucHV0TGFiZWwgaHRtbEZvcj1cIm15LWlucHV0XCI+RW1haWwgYWRkcmVzczwvSW5wdXRMYWJlbD5cbiAqICAgPElucHV0IGlkPVwibXktaW5wdXRcIiBhcmlhLWRlc2NyaWJlZGJ5PVwibXktaGVscGVyLXRleHRcIiAvPlxuICogICA8Rm9ybUhlbHBlclRleHQgaWQ9XCJteS1oZWxwZXItdGV4dFwiPldlJ2xsIG5ldmVyIHNoYXJlIHlvdXIgZW1haWwuPC9Gb3JtSGVscGVyVGV4dD5cbiAqIDwvRm9ybUNvbnRyb2w+XG4gKiBgYGBcbiAqXG4gKiDimqDvuI8gT25seSBvbmUgYElucHV0QmFzZWAgY2FuIGJlIHVzZWQgd2l0aGluIGEgRm9ybUNvbnRyb2wgYmVjYXVzZSBpdCBjcmVhdGVzIHZpc3VhbCBpbmNvbnNpc3RlbmNpZXMuXG4gKiBGb3IgaW5zdGFuY2UsIG9ubHkgb25lIGlucHV0IGNhbiBiZSBmb2N1c2VkIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBzdGF0ZSBzaG91bGRuJ3QgYmUgc2hhcmVkLlxuICovXG5jb25zdCBGb3JtQ29udHJvbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvcm1Db250cm9sKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGb3JtQ29udHJvbCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICBlcnJvciA9IGZhbHNlLFxuICAgICAgZm9jdXNlZDogdmlzdWFsbHlGb2N1c2VkLFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBoaWRkZW5MYWJlbCA9IGZhbHNlLFxuICAgICAgbWFyZ2luID0gJ25vbmUnLFxuICAgICAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgICAgIHNpemUgPSAnbWVkaXVtJyxcbiAgICAgIHZhcmlhbnQgPSAnb3V0bGluZWQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBjb21wb25lbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZnVsbFdpZHRoLFxuICAgIGhpZGRlbkxhYmVsLFxuICAgIG1hcmdpbixcbiAgICByZXF1aXJlZCxcbiAgICBzaXplLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgW2Fkb3JuZWRTdGFydCwgc2V0QWRvcm5lZFN0YXJ0XSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IHtcbiAgICAvLyBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIGZpbmQgdGhlIElucHV0IGluIG9yZGVyXG4gICAgLy8gdG8gZnVsbHkgc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgbGV0IGluaXRpYWxBZG9ybmVkU3RhcnQgPSBmYWxzZTtcbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgaWYgKCFpc011aUVsZW1lbnQoY2hpbGQsIFsnSW5wdXQnLCAnU2VsZWN0J10pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gaXNNdWlFbGVtZW50KGNoaWxkLCBbJ1NlbGVjdCddKSA/IGNoaWxkLnByb3BzLmlucHV0IDogY2hpbGQ7XG4gICAgICAgIGlmIChpbnB1dCAmJiBpc0Fkb3JuZWRTdGFydChpbnB1dC5wcm9wcykpIHtcbiAgICAgICAgICBpbml0aWFsQWRvcm5lZFN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpbml0aWFsQWRvcm5lZFN0YXJ0O1xuICB9KTtcbiAgY29uc3QgW2ZpbGxlZCwgc2V0RmlsbGVkXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IHtcbiAgICAvLyBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIGZpbmQgdGhlIElucHV0IGluIG9yZGVyXG4gICAgLy8gdG8gZnVsbHkgc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgbGV0IGluaXRpYWxGaWxsZWQgPSBmYWxzZTtcbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgaWYgKCFpc011aUVsZW1lbnQoY2hpbGQsIFsnSW5wdXQnLCAnU2VsZWN0J10pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0ZpbGxlZChjaGlsZC5wcm9wcywgdHJ1ZSkgfHwgaXNGaWxsZWQoY2hpbGQucHJvcHMuaW5wdXRQcm9wcywgdHJ1ZSkpIHtcbiAgICAgICAgICBpbml0aWFsRmlsbGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpbml0aWFsRmlsbGVkO1xuICB9KTtcbiAgY29uc3QgW2ZvY3VzZWRTdGF0ZSwgc2V0Rm9jdXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGlmIChkaXNhYmxlZCAmJiBmb2N1c2VkU3RhdGUpIHtcbiAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgfVxuICBjb25zdCBmb2N1c2VkID0gdmlzdWFsbHlGb2N1c2VkICE9PSB1bmRlZmluZWQgJiYgIWRpc2FibGVkID8gdmlzdWFsbHlGb2N1c2VkIDogZm9jdXNlZFN0YXRlO1xuICBsZXQgcmVnaXN0ZXJFZmZlY3Q7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgY29uc3QgcmVnaXN0ZXJlZElucHV0ID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgICByZWdpc3RlckVmZmVjdCA9ICgpID0+IHtcbiAgICAgIGlmIChyZWdpc3RlcmVkSW5wdXQuY3VycmVudCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGVyZSBhcmUgbXVsdGlwbGUgYElucHV0QmFzZWAgY29tcG9uZW50cyBpbnNpZGUgYSBGb3JtQ29udHJvbC4nLCAnVGhpcyBjcmVhdGVzIHZpc3VhbCBpbmNvbnNpc3RlbmNpZXMsIG9ubHkgdXNlIG9uZSBgSW5wdXRCYXNlYC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgICByZWdpc3RlcmVkSW5wdXQuY3VycmVudCA9IHRydWU7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICByZWdpc3RlcmVkSW5wdXQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfTtcbiAgICB9O1xuICB9XG4gIGNvbnN0IGNoaWxkQ29udGV4dCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBhZG9ybmVkU3RhcnQsXG4gICAgICBzZXRBZG9ybmVkU3RhcnQsXG4gICAgICBjb2xvcixcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZXJyb3IsXG4gICAgICBmaWxsZWQsXG4gICAgICBmb2N1c2VkLFxuICAgICAgZnVsbFdpZHRoLFxuICAgICAgaGlkZGVuTGFiZWwsXG4gICAgICBzaXplLFxuICAgICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICAgIHNldEZvY3VzZWQoZmFsc2UpO1xuICAgICAgfSxcbiAgICAgIG9uRW1wdHk6ICgpID0+IHtcbiAgICAgICAgc2V0RmlsbGVkKGZhbHNlKTtcbiAgICAgIH0sXG4gICAgICBvbkZpbGxlZDogKCkgPT4ge1xuICAgICAgICBzZXRGaWxsZWQodHJ1ZSk7XG4gICAgICB9LFxuICAgICAgb25Gb2N1czogKCkgPT4ge1xuICAgICAgICBzZXRGb2N1c2VkKHRydWUpO1xuICAgICAgfSxcbiAgICAgIHJlZ2lzdGVyRWZmZWN0LFxuICAgICAgcmVxdWlyZWQsXG4gICAgICB2YXJpYW50XG4gICAgfTtcbiAgfSwgW2Fkb3JuZWRTdGFydCwgY29sb3IsIGRpc2FibGVkLCBlcnJvciwgZmlsbGVkLCBmb2N1c2VkLCBmdWxsV2lkdGgsIGhpZGRlbkxhYmVsLCByZWdpc3RlckVmZmVjdCwgcmVxdWlyZWQsIHNpemUsIHZhcmlhbnRdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEZvcm1Db250cm9sQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjaGlsZENvbnRleHQsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KEZvcm1Db250cm9sUm9vdCwgX2V4dGVuZHMoe1xuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtQ29udHJvbC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwsIGlucHV0IGFuZCBoZWxwZXIgdGV4dCBzaG91bGQgYmUgZGlzcGxheWVkIGluIGEgZGlzYWJsZWQgc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBkaXNwbGF5ZWQgaW4gYW4gZXJyb3Igc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzcGxheWVkIGluIGZvY3VzZWQgc3RhdGUuXG4gICAqL1xuICBmb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBoaWRkZW4uXG4gICAqIFRoaXMgaXMgdXNlZCB0byBpbmNyZWFzZSBkZW5zaXR5IGZvciBhIGBGaWxsZWRJbnB1dGAuXG4gICAqIEJlIHN1cmUgdG8gYWRkIGBhcmlhLWxhYmVsYCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGlkZGVuTGFiZWw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCBvciBgbm9ybWFsYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZyBvZiB0aGlzIGFuZCBjb250YWluZWQgY29tcG9uZW50cy5cbiAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnLCAnbm9ybWFsJ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgd2lsbCBpbmRpY2F0ZSB0aGF0IHRoZSBgaW5wdXRgIGlzIHJlcXVpcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdvdXRsaW5lZCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZvcm1Db250cm9sOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgRm9ybUNvbnRyb2xDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQodW5kZWZpbmVkKTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEZvcm1Db250cm9sQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdGb3JtQ29udHJvbENvbnRleHQnO1xufVxuZXhwb3J0IGRlZmF1bHQgRm9ybUNvbnRyb2xDb250ZXh0OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1Db250cm9sU3RhdGUoe1xuICBwcm9wcyxcbiAgc3RhdGVzLFxuICBtdWlGb3JtQ29udHJvbFxufSkge1xuICByZXR1cm4gc3RhdGVzLnJlZHVjZSgoYWNjLCBzdGF0ZSkgPT4ge1xuICAgIGFjY1tzdGF0ZV0gPSBwcm9wc1tzdGF0ZV07XG4gICAgaWYgKG11aUZvcm1Db250cm9sKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BzW3N0YXRlXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgYWNjW3N0YXRlXSA9IG11aUZvcm1Db250cm9sW3N0YXRlXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufSIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuL0Zvcm1Db250cm9sQ29udGV4dCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VGb3JtQ29udHJvbCgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoRm9ybUNvbnRyb2xDb250ZXh0KTtcbn0iLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1IZWxwZXJUZXh0VXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1IZWxwZXJUZXh0Jywgc2xvdCk7XG59XG5jb25zdCBmb3JtSGVscGVyVGV4dENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlGb3JtSGVscGVyVGV4dCcsIFsncm9vdCcsICdlcnJvcicsICdkaXNhYmxlZCcsICdzaXplU21hbGwnLCAnc2l6ZU1lZGl1bScsICdjb250YWluZWQnLCAnZm9jdXNlZCcsICdmaWxsZWQnLCAncmVxdWlyZWQnXSk7XG5leHBvcnQgZGVmYXVsdCBmb3JtSGVscGVyVGV4dENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xudmFyIF9zcGFuO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJkaXNhYmxlZFwiLCBcImVycm9yXCIsIFwiZmlsbGVkXCIsIFwiZm9jdXNlZFwiLCBcIm1hcmdpblwiLCBcInJlcXVpcmVkXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBmb3JtQ29udHJvbFN0YXRlIGZyb20gJy4uL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBmb3JtSGVscGVyVGV4dENsYXNzZXMsIHsgZ2V0Rm9ybUhlbHBlclRleHRVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vZm9ybUhlbHBlclRleHRDbGFzc2VzJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjb250YWluZWQsXG4gICAgc2l6ZSxcbiAgICBkaXNhYmxlZCxcbiAgICBlcnJvcixcbiAgICBmaWxsZWQsXG4gICAgZm9jdXNlZCxcbiAgICByZXF1aXJlZFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgZXJyb3IgJiYgJ2Vycm9yJywgc2l6ZSAmJiBgc2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gLCBjb250YWluZWQgJiYgJ2NvbnRhaW5lZCcsIGZvY3VzZWQgJiYgJ2ZvY3VzZWQnLCBmaWxsZWQgJiYgJ2ZpbGxlZCcsIHJlcXVpcmVkICYmICdyZXF1aXJlZCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUhlbHBlclRleHRVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgRm9ybUhlbHBlclRleHRSb290ID0gc3R5bGVkKCdwJywge1xuICBuYW1lOiAnTXVpRm9ybUhlbHBlclRleHQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5zaXplICYmIHN0eWxlc1tgc2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdLCBvd25lclN0YXRlLmNvbnRhaW5lZCAmJiBzdHlsZXMuY29udGFpbmVkLCBvd25lclN0YXRlLmZpbGxlZCAmJiBzdHlsZXMuZmlsbGVkXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuc2Vjb25kYXJ5XG59LCB0aGVtZS50eXBvZ3JhcGh5LmNhcHRpb24sIHtcbiAgdGV4dEFsaWduOiAnbGVmdCcsXG4gIG1hcmdpblRvcDogMyxcbiAgbWFyZ2luUmlnaHQ6IDAsXG4gIG1hcmdpbkJvdHRvbTogMCxcbiAgbWFyZ2luTGVmdDogMCxcbiAgW2AmLiR7Zm9ybUhlbHBlclRleHRDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuZGlzYWJsZWRcbiAgfSxcbiAgW2AmLiR7Zm9ybUhlbHBlclRleHRDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgfVxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgbWFyZ2luVG9wOiA0XG59LCBvd25lclN0YXRlLmNvbnRhaW5lZCAmJiB7XG4gIG1hcmdpbkxlZnQ6IDE0LFxuICBtYXJnaW5SaWdodDogMTRcbn0pKTtcbmNvbnN0IEZvcm1IZWxwZXJUZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9ybUhlbHBlclRleHQoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUZvcm1IZWxwZXJUZXh0J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQgPSAncCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsndmFyaWFudCcsICdzaXplJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2ZpbGxlZCcsICdmb2N1c2VkJywgJ3JlcXVpcmVkJ11cbiAgfSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb21wb25lbnQsXG4gICAgY29udGFpbmVkOiBmY3MudmFyaWFudCA9PT0gJ2ZpbGxlZCcgfHwgZmNzLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcsXG4gICAgdmFyaWFudDogZmNzLnZhcmlhbnQsXG4gICAgc2l6ZTogZmNzLnNpemUsXG4gICAgZGlzYWJsZWQ6IGZjcy5kaXNhYmxlZCxcbiAgICBlcnJvcjogZmNzLmVycm9yLFxuICAgIGZpbGxlZDogZmNzLmZpbGxlZCxcbiAgICBmb2N1c2VkOiBmY3MuZm9jdXNlZCxcbiAgICByZXF1aXJlZDogZmNzLnJlcXVpcmVkXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChGb3JtSGVscGVyVGV4dFJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBjaGlsZHJlbiA9PT0gJyAnID8gLy8gbm90cmFuc2xhdGUgbmVlZGVkIHdoaWxlIEdvb2dsZSBUcmFuc2xhdGUgd2lsbCBub3QgZml4IHplcm8td2lkdGggc3BhY2UgaXNzdWVcbiAgICBfc3BhbiB8fCAoX3NwYW4gPSAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcIm5vdHJhbnNsYXRlXCIsXG4gICAgICBjaGlsZHJlbjogXCJcXHUyMDBCXCJcbiAgICB9KSkgOiBjaGlsZHJlblxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZvcm1IZWxwZXJUZXh0LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIElmIGAnICdgIGlzIHByb3ZpZGVkLCB0aGUgY29tcG9uZW50IHJlc2VydmVzIG9uZSBsaW5lIGhlaWdodCBmb3IgZGlzcGxheWluZyBhIGZ1dHVyZSBtZXNzYWdlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaGVscGVyIHRleHQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhIGRpc2FibGVkIHN0YXRlLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBoZWxwZXIgdGV4dCBzaG91bGQgYmUgZGlzcGxheWVkIGluIGFuIGVycm9yIHN0YXRlLlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaGVscGVyIHRleHQgc2hvdWxkIHVzZSBmaWxsZWQgY2xhc3NlcyBrZXkuXG4gICAqL1xuICBmaWxsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaGVscGVyIHRleHQgc2hvdWxkIHVzZSBmb2N1c2VkIGNsYXNzZXMga2V5LlxuICAgKi9cbiAgZm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaGVscGVyIHRleHQgc2hvdWxkIHVzZSByZXF1aXJlZCBjbGFzc2VzIGtleS5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBGb3JtSGVscGVyVGV4dDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEdsb2JhbFN0eWxlcyBhcyBTeXN0ZW1HbG9iYWxTdHlsZXMgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgZGVmYXVsdFRoZW1lIGZyb20gJy4uL3N0eWxlcy9kZWZhdWx0VGhlbWUnO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4uL3N0eWxlcy9pZGVudGlmaWVyJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBHbG9iYWxTdHlsZXMocHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFN5c3RlbUdsb2JhbFN0eWxlcywgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGVmYXVsdFRoZW1lOiBkZWZhdWx0VGhlbWUsXG4gICAgdGhlbWVJZDogVEhFTUVfSURcbiAgfSkpO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gR2xvYmFsU3R5bGVzLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBzdHlsZXMgeW91IHdhbnQgdG8gYXBwbHkgZ2xvYmFsbHkuXG4gICAqL1xuICBzdHlsZXM6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5LCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmJvb2xdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEdsb2JhbFN0eWxlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBHcmlkQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KCk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBHcmlkQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdHcmlkQ29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBHcmlkQ29udGV4dDsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdyaWRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUdyaWQnLCBzbG90KTtcbn1cbmNvbnN0IFNQQUNJTkdTID0gWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXTtcbmNvbnN0IERJUkVDVElPTlMgPSBbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXTtcbmNvbnN0IFdSQVBTID0gWydub3dyYXAnLCAnd3JhcC1yZXZlcnNlJywgJ3dyYXAnXTtcbmNvbnN0IEdSSURfU0laRVMgPSBbJ2F1dG8nLCB0cnVlLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyXTtcbmNvbnN0IGdyaWRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpR3JpZCcsIFsncm9vdCcsICdjb250YWluZXInLCAnaXRlbScsICd6ZXJvTWluV2lkdGgnLFxuLy8gc3BhY2luZ3Ncbi4uLlNQQUNJTkdTLm1hcChzcGFjaW5nID0+IGBzcGFjaW5nLXhzLSR7c3BhY2luZ31gKSxcbi8vIGRpcmVjdGlvbiB2YWx1ZXNcbi4uLkRJUkVDVElPTlMubWFwKGRpcmVjdGlvbiA9PiBgZGlyZWN0aW9uLXhzLSR7ZGlyZWN0aW9ufWApLFxuLy8gd3JhcCB2YWx1ZXNcbi4uLldSQVBTLm1hcCh3cmFwID0+IGB3cmFwLXhzLSR7d3JhcH1gKSxcbi8vIGdyaWQgc2l6ZXMgZm9yIGFsbCBicmVha3BvaW50c1xuLi4uR1JJRF9TSVpFUy5tYXAoc2l6ZSA9PiBgZ3JpZC14cy0ke3NpemV9YCksIC4uLkdSSURfU0laRVMubWFwKHNpemUgPT4gYGdyaWQtc20tJHtzaXplfWApLCAuLi5HUklEX1NJWkVTLm1hcChzaXplID0+IGBncmlkLW1kLSR7c2l6ZX1gKSwgLi4uR1JJRF9TSVpFUy5tYXAoc2l6ZSA9PiBgZ3JpZC1sZy0ke3NpemV9YCksIC4uLkdSSURfU0laRVMubWFwKHNpemUgPT4gYGdyaWQteGwtJHtzaXplfWApXSk7XG5leHBvcnQgZGVmYXVsdCBncmlkQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbi8vIEEgZ3JpZCBjb21wb25lbnQgdXNpbmcgdGhlIGZvbGxvd2luZyBsaWJzIGFzIGluc3BpcmF0aW9uLlxuLy9cbi8vIEZvciB0aGUgaW1wbGVtZW50YXRpb246XG4vLyAtIGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS9kb2NzLzQuMy9sYXlvdXQvZ3JpZC9cbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2tyaXN0b2Zlcmpvc2VwaC9mbGV4Ym94Z3JpZC9ibG9iL21hc3Rlci9zcmMvY3NzL2ZsZXhib3hncmlkLmNzc1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vcm95bGVlMDcwNC9yZWFjdC1mbGV4Ym94LWdyaWRcbi8vIC0gaHR0cHM6Ly9tYXRlcmlhbC5hbmd1bGFyanMub3JnL2xhdGVzdC9sYXlvdXQvaW50cm9kdWN0aW9uXG4vL1xuLy8gRm9sbG93IHRoaXMgZmxleGJveCBHdWlkZSB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBtb2RlbDpcbi8vIC0gaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9zbmlwcGV0cy9jc3MvYS1ndWlkZS10by1mbGV4Ym94L1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNvbHVtbnNcIiwgXCJjb2x1bW5TcGFjaW5nXCIsIFwiY29tcG9uZW50XCIsIFwiY29udGFpbmVyXCIsIFwiZGlyZWN0aW9uXCIsIFwiaXRlbVwiLCBcInJvd1NwYWNpbmdcIiwgXCJzcGFjaW5nXCIsIFwid3JhcFwiLCBcInplcm9NaW5XaWR0aFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2V4dGVuZFN4UHJvcCBhcyBleHRlbmRTeFByb3AsIGhhbmRsZUJyZWFrcG9pbnRzLCB1bnN0YWJsZV9yZXNvbHZlQnJlYWtwb2ludFZhbHVlcyBhcyByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCByZXF1aXJlUHJvcEZhY3RvcnkgZnJvbSAnLi4vdXRpbHMvcmVxdWlyZVByb3BGYWN0b3J5JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lJztcbmltcG9ydCBHcmlkQ29udGV4dCBmcm9tICcuL0dyaWRDb250ZXh0JztcbmltcG9ydCBncmlkQ2xhc3NlcywgeyBnZXRHcmlkVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9ncmlkQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gZ2V0T2Zmc2V0KHZhbCkge1xuICBjb25zdCBwYXJzZSA9IHBhcnNlRmxvYXQodmFsKTtcbiAgcmV0dXJuIGAke3BhcnNlfSR7U3RyaW5nKHZhbCkucmVwbGFjZShTdHJpbmcocGFyc2UpLCAnJykgfHwgJ3B4J31gO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlR3JpZCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSB7XG4gIGxldCBzaXplO1xuICByZXR1cm4gdGhlbWUuYnJlYWtwb2ludHMua2V5cy5yZWR1Y2UoKGdsb2JhbFN0eWxlcywgYnJlYWtwb2ludCkgPT4ge1xuICAgIC8vIFVzZSBzaWRlIGVmZmVjdCBvdmVyIGltbXV0YWJpbGl0eSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLlxuICAgIGxldCBzdHlsZXMgPSB7fTtcbiAgICBpZiAob3duZXJTdGF0ZVticmVha3BvaW50XSkge1xuICAgICAgc2l6ZSA9IG93bmVyU3RhdGVbYnJlYWtwb2ludF07XG4gICAgfVxuICAgIGlmICghc2l6ZSkge1xuICAgICAgcmV0dXJuIGdsb2JhbFN0eWxlcztcbiAgICB9XG4gICAgaWYgKHNpemUgPT09IHRydWUpIHtcbiAgICAgIC8vIEZvciB0aGUgYXV0byBsYXlvdXRpbmdcbiAgICAgIHN0eWxlcyA9IHtcbiAgICAgICAgZmxleEJhc2lzOiAwLFxuICAgICAgICBmbGV4R3JvdzogMSxcbiAgICAgICAgbWF4V2lkdGg6ICcxMDAlJ1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHNpemUgPT09ICdhdXRvJykge1xuICAgICAgc3R5bGVzID0ge1xuICAgICAgICBmbGV4QmFzaXM6ICdhdXRvJyxcbiAgICAgICAgZmxleEdyb3c6IDAsXG4gICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgIG1heFdpZHRoOiAnbm9uZScsXG4gICAgICAgIHdpZHRoOiAnYXV0bydcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbHVtbnNCcmVha3BvaW50VmFsdWVzID0gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICAgICAgICB2YWx1ZXM6IG93bmVyU3RhdGUuY29sdW1ucyxcbiAgICAgICAgYnJlYWtwb2ludHM6IHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlc1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjb2x1bW5WYWx1ZSA9IHR5cGVvZiBjb2x1bW5zQnJlYWtwb2ludFZhbHVlcyA9PT0gJ29iamVjdCcgPyBjb2x1bW5zQnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSA6IGNvbHVtbnNCcmVha3BvaW50VmFsdWVzO1xuICAgICAgaWYgKGNvbHVtblZhbHVlID09PSB1bmRlZmluZWQgfHwgY29sdW1uVmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbFN0eWxlcztcbiAgICAgIH1cbiAgICAgIC8vIEtlZXAgNyBzaWduaWZpY2FudCBudW1iZXJzLlxuICAgICAgY29uc3Qgd2lkdGggPSBgJHtNYXRoLnJvdW5kKHNpemUgLyBjb2x1bW5WYWx1ZSAqIDEwZTcpIC8gMTBlNX0lYDtcbiAgICAgIGxldCBtb3JlID0ge307XG4gICAgICBpZiAob3duZXJTdGF0ZS5jb250YWluZXIgJiYgb3duZXJTdGF0ZS5pdGVtICYmIG93bmVyU3RhdGUuY29sdW1uU3BhY2luZyAhPT0gMCkge1xuICAgICAgICBjb25zdCB0aGVtZVNwYWNpbmcgPSB0aGVtZS5zcGFjaW5nKG93bmVyU3RhdGUuY29sdW1uU3BhY2luZyk7XG4gICAgICAgIGlmICh0aGVtZVNwYWNpbmcgIT09ICcwcHgnKSB7XG4gICAgICAgICAgY29uc3QgZnVsbFdpZHRoID0gYGNhbGMoJHt3aWR0aH0gKyAke2dldE9mZnNldCh0aGVtZVNwYWNpbmcpfSlgO1xuICAgICAgICAgIG1vcmUgPSB7XG4gICAgICAgICAgICBmbGV4QmFzaXM6IGZ1bGxXaWR0aCxcbiAgICAgICAgICAgIG1heFdpZHRoOiBmdWxsV2lkdGhcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENsb3NlIHRvIHRoZSBib290c3RyYXAgaW1wbGVtZW50YXRpb246XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi84ZmNjYWEyNDM5ZTk3ZWM3MmE0YjdkYzQyY2NjMWY2NDk3OTBhZGIwL3Njc3MvbWl4aW5zL19ncmlkLnNjc3MjTDQxXG4gICAgICBzdHlsZXMgPSBfZXh0ZW5kcyh7XG4gICAgICAgIGZsZXhCYXNpczogd2lkdGgsXG4gICAgICAgIGZsZXhHcm93OiAwLFxuICAgICAgICBtYXhXaWR0aDogd2lkdGhcbiAgICAgIH0sIG1vcmUpO1xuICAgIH1cblxuICAgIC8vIE5vIG5lZWQgZm9yIGEgbWVkaWEgcXVlcnkgZm9yIHRoZSBmaXJzdCBzaXplLlxuICAgIGlmICh0aGVtZS5icmVha3BvaW50cy52YWx1ZXNbYnJlYWtwb2ludF0gPT09IDApIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oZ2xvYmFsU3R5bGVzLCBzdHlsZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnbG9iYWxTdHlsZXNbdGhlbWUuYnJlYWtwb2ludHMudXAoYnJlYWtwb2ludCldID0gc3R5bGVzO1xuICAgIH1cbiAgICByZXR1cm4gZ2xvYmFsU3R5bGVzO1xuICB9LCB7fSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVEaXJlY3Rpb24oe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkge1xuICBjb25zdCBkaXJlY3Rpb25WYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgdmFsdWVzOiBvd25lclN0YXRlLmRpcmVjdGlvbixcbiAgICBicmVha3BvaW50czogdGhlbWUuYnJlYWtwb2ludHMudmFsdWVzXG4gIH0pO1xuICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMoe1xuICAgIHRoZW1lXG4gIH0sIGRpcmVjdGlvblZhbHVlcywgcHJvcFZhbHVlID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSB7XG4gICAgICBmbGV4RGlyZWN0aW9uOiBwcm9wVmFsdWVcbiAgICB9O1xuICAgIGlmIChwcm9wVmFsdWUuaW5kZXhPZignY29sdW1uJykgPT09IDApIHtcbiAgICAgIG91dHB1dFtgJiA+IC4ke2dyaWRDbGFzc2VzLml0ZW19YF0gPSB7XG4gICAgICAgIG1heFdpZHRoOiAnbm9uZSdcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH0pO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIHplcm8gdmFsdWUgYnJlYWtwb2ludCBrZXlzIGJlZm9yZSBhIG5vbi16ZXJvIHZhbHVlIGJyZWFrcG9pbnQga2V5LlxuICogQGV4YW1wbGUgeyB4czogMCwgc206IDAsIG1kOiAyLCBsZzogMCwgeGw6IDAgfSBvciBbMCwgMCwgMiwgMCwgMF1cbiAqIEByZXR1cm5zIFt4cywgc21dXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RaZXJvVmFsdWVCcmVha3BvaW50S2V5cyh7XG4gIGJyZWFrcG9pbnRzLFxuICB2YWx1ZXNcbn0pIHtcbiAgbGV0IG5vblplcm9LZXkgPSAnJztcbiAgT2JqZWN0LmtleXModmFsdWVzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKG5vblplcm9LZXkgIT09ICcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh2YWx1ZXNba2V5XSAhPT0gMCkge1xuICAgICAgbm9uWmVyb0tleSA9IGtleTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzb3J0ZWRCcmVha3BvaW50S2V5c0J5VmFsdWUgPSBPYmplY3Qua2V5cyhicmVha3BvaW50cykuc29ydCgoYSwgYikgPT4ge1xuICAgIHJldHVybiBicmVha3BvaW50c1thXSAtIGJyZWFrcG9pbnRzW2JdO1xuICB9KTtcbiAgcmV0dXJuIHNvcnRlZEJyZWFrcG9pbnRLZXlzQnlWYWx1ZS5zbGljZSgwLCBzb3J0ZWRCcmVha3BvaW50S2V5c0J5VmFsdWUuaW5kZXhPZihub25aZXJvS2V5KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVSb3dHYXAoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkge1xuICBjb25zdCB7XG4gICAgY29udGFpbmVyLFxuICAgIHJvd1NwYWNpbmdcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGxldCBzdHlsZXMgPSB7fTtcbiAgaWYgKGNvbnRhaW5lciAmJiByb3dTcGFjaW5nICE9PSAwKSB7XG4gICAgY29uc3Qgcm93U3BhY2luZ1ZhbHVlcyA9IHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgICAgIHZhbHVlczogcm93U3BhY2luZyxcbiAgICAgIGJyZWFrcG9pbnRzOiB0aGVtZS5icmVha3BvaW50cy52YWx1ZXNcbiAgICB9KTtcbiAgICBsZXQgemVyb1ZhbHVlQnJlYWtwb2ludEtleXM7XG4gICAgaWYgKHR5cGVvZiByb3dTcGFjaW5nVmFsdWVzID09PSAnb2JqZWN0Jykge1xuICAgICAgemVyb1ZhbHVlQnJlYWtwb2ludEtleXMgPSBleHRyYWN0WmVyb1ZhbHVlQnJlYWtwb2ludEtleXMoe1xuICAgICAgICBicmVha3BvaW50czogdGhlbWUuYnJlYWtwb2ludHMudmFsdWVzLFxuICAgICAgICB2YWx1ZXM6IHJvd1NwYWNpbmdWYWx1ZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzdHlsZXMgPSBoYW5kbGVCcmVha3BvaW50cyh7XG4gICAgICB0aGVtZVxuICAgIH0sIHJvd1NwYWNpbmdWYWx1ZXMsIChwcm9wVmFsdWUsIGJyZWFrcG9pbnQpID0+IHtcbiAgICAgIHZhciBfemVyb1ZhbHVlQnJlYWtwb2ludEs7XG4gICAgICBjb25zdCB0aGVtZVNwYWNpbmcgPSB0aGVtZS5zcGFjaW5nKHByb3BWYWx1ZSk7XG4gICAgICBpZiAodGhlbWVTcGFjaW5nICE9PSAnMHB4Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1hcmdpblRvcDogYC0ke2dldE9mZnNldCh0aGVtZVNwYWNpbmcpfWAsXG4gICAgICAgICAgW2AmID4gLiR7Z3JpZENsYXNzZXMuaXRlbX1gXToge1xuICAgICAgICAgICAgcGFkZGluZ1RvcDogZ2V0T2Zmc2V0KHRoZW1lU3BhY2luZylcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoKF96ZXJvVmFsdWVCcmVha3BvaW50SyA9IHplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzKSAhPSBudWxsICYmIF96ZXJvVmFsdWVCcmVha3BvaW50Sy5pbmNsdWRlcyhicmVha3BvaW50KSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXJnaW5Ub3A6IDAsXG4gICAgICAgIFtgJiA+IC4ke2dyaWRDbGFzc2VzLml0ZW19YF06IHtcbiAgICAgICAgICBwYWRkaW5nVG9wOiAwXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHN0eWxlcztcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNvbHVtbkdhcCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSB7XG4gIGNvbnN0IHtcbiAgICBjb250YWluZXIsXG4gICAgY29sdW1uU3BhY2luZ1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgbGV0IHN0eWxlcyA9IHt9O1xuICBpZiAoY29udGFpbmVyICYmIGNvbHVtblNwYWNpbmcgIT09IDApIHtcbiAgICBjb25zdCBjb2x1bW5TcGFjaW5nVmFsdWVzID0gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICAgICAgdmFsdWVzOiBjb2x1bW5TcGFjaW5nLFxuICAgICAgYnJlYWtwb2ludHM6IHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlc1xuICAgIH0pO1xuICAgIGxldCB6ZXJvVmFsdWVCcmVha3BvaW50S2V5cztcbiAgICBpZiAodHlwZW9mIGNvbHVtblNwYWNpbmdWYWx1ZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICB6ZXJvVmFsdWVCcmVha3BvaW50S2V5cyA9IGV4dHJhY3RaZXJvVmFsdWVCcmVha3BvaW50S2V5cyh7XG4gICAgICAgIGJyZWFrcG9pbnRzOiB0aGVtZS5icmVha3BvaW50cy52YWx1ZXMsXG4gICAgICAgIHZhbHVlczogY29sdW1uU3BhY2luZ1ZhbHVlc1xuICAgICAgfSk7XG4gICAgfVxuICAgIHN0eWxlcyA9IGhhbmRsZUJyZWFrcG9pbnRzKHtcbiAgICAgIHRoZW1lXG4gICAgfSwgY29sdW1uU3BhY2luZ1ZhbHVlcywgKHByb3BWYWx1ZSwgYnJlYWtwb2ludCkgPT4ge1xuICAgICAgdmFyIF96ZXJvVmFsdWVCcmVha3BvaW50SzI7XG4gICAgICBjb25zdCB0aGVtZVNwYWNpbmcgPSB0aGVtZS5zcGFjaW5nKHByb3BWYWx1ZSk7XG4gICAgICBpZiAodGhlbWVTcGFjaW5nICE9PSAnMHB4Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHdpZHRoOiBgY2FsYygxMDAlICsgJHtnZXRPZmZzZXQodGhlbWVTcGFjaW5nKX0pYCxcbiAgICAgICAgICBtYXJnaW5MZWZ0OiBgLSR7Z2V0T2Zmc2V0KHRoZW1lU3BhY2luZyl9YCxcbiAgICAgICAgICBbYCYgPiAuJHtncmlkQ2xhc3Nlcy5pdGVtfWBdOiB7XG4gICAgICAgICAgICBwYWRkaW5nTGVmdDogZ2V0T2Zmc2V0KHRoZW1lU3BhY2luZylcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoKF96ZXJvVmFsdWVCcmVha3BvaW50SzIgPSB6ZXJvVmFsdWVCcmVha3BvaW50S2V5cykgIT0gbnVsbCAmJiBfemVyb1ZhbHVlQnJlYWtwb2ludEsyLmluY2x1ZGVzKGJyZWFrcG9pbnQpKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIG1hcmdpbkxlZnQ6IDAsXG4gICAgICAgIFtgJiA+IC4ke2dyaWRDbGFzc2VzLml0ZW19YF06IHtcbiAgICAgICAgICBwYWRkaW5nTGVmdDogMFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBzdHlsZXM7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNwYWNpbmdTdHlsZXMoc3BhY2luZywgYnJlYWtwb2ludHMsIHN0eWxlcyA9IHt9KSB7XG4gIC8vIHVuZGVmaW5lZC9udWxsIG9yIGBzcGFjaW5nYCA8PSAwXG4gIGlmICghc3BhY2luZyB8fCBzcGFjaW5nIDw9IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgLy8gaW4gY2FzZSBvZiBzdHJpbmcvbnVtYmVyIGBzcGFjaW5nYFxuICBpZiAodHlwZW9mIHNwYWNpbmcgPT09ICdzdHJpbmcnICYmICFOdW1iZXIuaXNOYU4oTnVtYmVyKHNwYWNpbmcpKSB8fCB0eXBlb2Ygc3BhY2luZyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gW3N0eWxlc1tgc3BhY2luZy14cy0ke1N0cmluZyhzcGFjaW5nKX1gXV07XG4gIH1cbiAgLy8gaW4gY2FzZSBvZiBvYmplY3QgYHNwYWNpbmdgXG4gIGNvbnN0IHNwYWNpbmdTdHlsZXMgPSBbXTtcbiAgYnJlYWtwb2ludHMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHNwYWNpbmdbYnJlYWtwb2ludF07XG4gICAgaWYgKE51bWJlcih2YWx1ZSkgPiAwKSB7XG4gICAgICBzcGFjaW5nU3R5bGVzLnB1c2goc3R5bGVzW2BzcGFjaW5nLSR7YnJlYWtwb2ludH0tJHtTdHJpbmcodmFsdWUpfWBdKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3BhY2luZ1N0eWxlcztcbn1cblxuLy8gRGVmYXVsdCBDU1MgdmFsdWVzXG4vLyBmbGV4OiAnMCAxIGF1dG8nLFxuLy8gZmxleERpcmVjdGlvbjogJ3JvdycsXG4vLyBhbGlnbkl0ZW1zOiAnZmxleC1zdGFydCcsXG4vLyBmbGV4V3JhcDogJ25vd3JhcCcsXG4vLyBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtc3RhcnQnLFxuY29uc3QgR3JpZFJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aUdyaWQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3Qge1xuICAgICAgY29udGFpbmVyLFxuICAgICAgZGlyZWN0aW9uLFxuICAgICAgaXRlbSxcbiAgICAgIHNwYWNpbmcsXG4gICAgICB3cmFwLFxuICAgICAgemVyb01pbldpZHRoLFxuICAgICAgYnJlYWtwb2ludHNcbiAgICB9ID0gb3duZXJTdGF0ZTtcbiAgICBsZXQgc3BhY2luZ1N0eWxlcyA9IFtdO1xuXG4gICAgLy8gaW4gY2FzZSBvZiBncmlkIGl0ZW1cbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBzcGFjaW5nU3R5bGVzID0gcmVzb2x2ZVNwYWNpbmdTdHlsZXMoc3BhY2luZywgYnJlYWtwb2ludHMsIHN0eWxlcyk7XG4gICAgfVxuICAgIGNvbnN0IGJyZWFrcG9pbnRzU3R5bGVzID0gW107XG4gICAgYnJlYWtwb2ludHMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3duZXJTdGF0ZVticmVha3BvaW50XTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBicmVha3BvaW50c1N0eWxlcy5wdXNoKHN0eWxlc1tgZ3JpZC0ke2JyZWFrcG9pbnR9LSR7U3RyaW5nKHZhbHVlKX1gXSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgY29udGFpbmVyICYmIHN0eWxlcy5jb250YWluZXIsIGl0ZW0gJiYgc3R5bGVzLml0ZW0sIHplcm9NaW5XaWR0aCAmJiBzdHlsZXMuemVyb01pbldpZHRoLCAuLi5zcGFjaW5nU3R5bGVzLCBkaXJlY3Rpb24gIT09ICdyb3cnICYmIHN0eWxlc1tgZGlyZWN0aW9uLXhzLSR7U3RyaW5nKGRpcmVjdGlvbil9YF0sIHdyYXAgIT09ICd3cmFwJyAmJiBzdHlsZXNbYHdyYXAteHMtJHtTdHJpbmcod3JhcCl9YF0sIC4uLmJyZWFrcG9pbnRzU3R5bGVzXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBib3hTaXppbmc6ICdib3JkZXItYm94J1xufSwgb3duZXJTdGF0ZS5jb250YWluZXIgJiYge1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGZsZXhXcmFwOiAnd3JhcCcsXG4gIHdpZHRoOiAnMTAwJSdcbn0sIG93bmVyU3RhdGUuaXRlbSAmJiB7XG4gIG1hcmdpbjogMCAvLyBGb3IgaW5zdGFuY2UsIGl0J3MgdXNlZnVsIHdoZW4gdXNlZCB3aXRoIGEgYGZpZ3VyZWAgZWxlbWVudC5cbn0sIG93bmVyU3RhdGUuemVyb01pbldpZHRoICYmIHtcbiAgbWluV2lkdGg6IDBcbn0sIG93bmVyU3RhdGUud3JhcCAhPT0gJ3dyYXAnICYmIHtcbiAgZmxleFdyYXA6IG93bmVyU3RhdGUud3JhcFxufSksIGdlbmVyYXRlRGlyZWN0aW9uLCBnZW5lcmF0ZVJvd0dhcCwgZ2VuZXJhdGVDb2x1bW5HYXAsIGdlbmVyYXRlR3JpZCk7XG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNwYWNpbmdDbGFzc2VzKHNwYWNpbmcsIGJyZWFrcG9pbnRzKSB7XG4gIC8vIHVuZGVmaW5lZC9udWxsIG9yIGBzcGFjaW5nYCA8PSAwXG4gIGlmICghc3BhY2luZyB8fCBzcGFjaW5nIDw9IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgLy8gaW4gY2FzZSBvZiBzdHJpbmcvbnVtYmVyIGBzcGFjaW5nYFxuICBpZiAodHlwZW9mIHNwYWNpbmcgPT09ICdzdHJpbmcnICYmICFOdW1iZXIuaXNOYU4oTnVtYmVyKHNwYWNpbmcpKSB8fCB0eXBlb2Ygc3BhY2luZyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gW2BzcGFjaW5nLXhzLSR7U3RyaW5nKHNwYWNpbmcpfWBdO1xuICB9XG4gIC8vIGluIGNhc2Ugb2Ygb2JqZWN0IGBzcGFjaW5nYFxuICBjb25zdCBjbGFzc2VzID0gW107XG4gIGJyZWFrcG9pbnRzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBzcGFjaW5nW2JyZWFrcG9pbnRdO1xuICAgIGlmIChOdW1iZXIodmFsdWUpID4gMCkge1xuICAgICAgY29uc3QgY2xhc3NOYW1lID0gYHNwYWNpbmctJHticmVha3BvaW50fS0ke1N0cmluZyh2YWx1ZSl9YDtcbiAgICAgIGNsYXNzZXMucHVzaChjbGFzc05hbWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjbGFzc2VzO1xufVxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgY29udGFpbmVyLFxuICAgIGRpcmVjdGlvbixcbiAgICBpdGVtLFxuICAgIHNwYWNpbmcsXG4gICAgd3JhcCxcbiAgICB6ZXJvTWluV2lkdGgsXG4gICAgYnJlYWtwb2ludHNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGxldCBzcGFjaW5nQ2xhc3NlcyA9IFtdO1xuXG4gIC8vIGluIGNhc2Ugb2YgZ3JpZCBpdGVtXG4gIGlmIChjb250YWluZXIpIHtcbiAgICBzcGFjaW5nQ2xhc3NlcyA9IHJlc29sdmVTcGFjaW5nQ2xhc3NlcyhzcGFjaW5nLCBicmVha3BvaW50cyk7XG4gIH1cbiAgY29uc3QgYnJlYWtwb2ludHNDbGFzc2VzID0gW107XG4gIGJyZWFrcG9pbnRzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBvd25lclN0YXRlW2JyZWFrcG9pbnRdO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgYnJlYWtwb2ludHNDbGFzc2VzLnB1c2goYGdyaWQtJHticmVha3BvaW50fS0ke1N0cmluZyh2YWx1ZSl9YCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgY29udGFpbmVyICYmICdjb250YWluZXInLCBpdGVtICYmICdpdGVtJywgemVyb01pbldpZHRoICYmICd6ZXJvTWluV2lkdGgnLCAuLi5zcGFjaW5nQ2xhc3NlcywgZGlyZWN0aW9uICE9PSAncm93JyAmJiBgZGlyZWN0aW9uLXhzLSR7U3RyaW5nKGRpcmVjdGlvbil9YCwgd3JhcCAhPT0gJ3dyYXAnICYmIGB3cmFwLXhzLSR7U3RyaW5nKHdyYXApfWAsIC4uLmJyZWFrcG9pbnRzQ2xhc3Nlc11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRHcmlkVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBHcmlkID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gR3JpZChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgdGhlbWVQcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlHcmlkJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgIGJyZWFrcG9pbnRzXG4gIH0gPSB1c2VUaGVtZSgpO1xuICBjb25zdCBwcm9wcyA9IGV4dGVuZFN4UHJvcCh0aGVtZVByb3BzKTtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sdW1uczogY29sdW1uc1Byb3AsXG4gICAgICBjb2x1bW5TcGFjaW5nOiBjb2x1bW5TcGFjaW5nUHJvcCxcbiAgICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgICAgY29udGFpbmVyID0gZmFsc2UsXG4gICAgICBkaXJlY3Rpb24gPSAncm93JyxcbiAgICAgIGl0ZW0gPSBmYWxzZSxcbiAgICAgIHJvd1NwYWNpbmc6IHJvd1NwYWNpbmdQcm9wLFxuICAgICAgc3BhY2luZyA9IDAsXG4gICAgICB3cmFwID0gJ3dyYXAnLFxuICAgICAgemVyb01pbldpZHRoID0gZmFsc2VcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgcm93U3BhY2luZyA9IHJvd1NwYWNpbmdQcm9wIHx8IHNwYWNpbmc7XG4gIGNvbnN0IGNvbHVtblNwYWNpbmcgPSBjb2x1bW5TcGFjaW5nUHJvcCB8fCBzcGFjaW5nO1xuICBjb25zdCBjb2x1bW5zQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoR3JpZENvbnRleHQpO1xuXG4gIC8vIGNvbHVtbnMgc2V0IHdpdGggZGVmYXVsdCBicmVha3BvaW50IHVuaXQgb2YgMTJcbiAgY29uc3QgY29sdW1ucyA9IGNvbnRhaW5lciA/IGNvbHVtbnNQcm9wIHx8IDEyIDogY29sdW1uc0NvbnRleHQ7XG4gIGNvbnN0IGJyZWFrcG9pbnRzVmFsdWVzID0ge307XG4gIGNvbnN0IG90aGVyRmlsdGVyZWQgPSBfZXh0ZW5kcyh7fSwgb3RoZXIpO1xuICBicmVha3BvaW50cy5rZXlzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgaWYgKG90aGVyW2JyZWFrcG9pbnRdICE9IG51bGwpIHtcbiAgICAgIGJyZWFrcG9pbnRzVmFsdWVzW2JyZWFrcG9pbnRdID0gb3RoZXJbYnJlYWtwb2ludF07XG4gICAgICBkZWxldGUgb3RoZXJGaWx0ZXJlZFticmVha3BvaW50XTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sdW1ucyxcbiAgICBjb250YWluZXIsXG4gICAgZGlyZWN0aW9uLFxuICAgIGl0ZW0sXG4gICAgcm93U3BhY2luZyxcbiAgICBjb2x1bW5TcGFjaW5nLFxuICAgIHdyYXAsXG4gICAgemVyb01pbldpZHRoLFxuICAgIHNwYWNpbmdcbiAgfSwgYnJlYWtwb2ludHNWYWx1ZXMsIHtcbiAgICBicmVha3BvaW50czogYnJlYWtwb2ludHMua2V5c1xuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goR3JpZENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29sdW1ucyxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goR3JpZFJvb3QsIF9leHRlbmRzKHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgb3RoZXJGaWx0ZXJlZCkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBHcmlkLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBjb2x1bW5zLlxuICAgKiBAZGVmYXVsdCAxMlxuICAgKi9cbiAgY29sdW1uczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm51bWJlciksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIGhvcml6b250YWwgc3BhY2UgYmV0d2VlbiB0aGUgdHlwZSBgaXRlbWAgY29tcG9uZW50cy5cbiAgICogSXQgb3ZlcnJpZGVzIHRoZSB2YWx1ZSBvZiB0aGUgYHNwYWNpbmdgIHByb3AuXG4gICAqL1xuICBjb2x1bW5TcGFjaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkpLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIGhhdmUgdGhlIGZsZXggKmNvbnRhaW5lciogYmVoYXZpb3IuXG4gICAqIFlvdSBzaG91bGQgYmUgd3JhcHBpbmcgKml0ZW1zKiB3aXRoIGEgKmNvbnRhaW5lciouXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgYGZsZXgtZGlyZWN0aW9uYCBzdHlsZSBwcm9wZXJ0eS5cbiAgICogSXQgaXMgYXBwbGllZCBmb3IgYWxsIHNjcmVlbiBzaXplcy5cbiAgICogQGRlZmF1bHQgJ3JvdydcbiAgICovXG4gIGRpcmVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnY29sdW1uLXJldmVyc2UnLCAnY29sdW1uJywgJ3Jvdy1yZXZlcnNlJywgJ3JvdyddKSwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mKFsnY29sdW1uLXJldmVyc2UnLCAnY29sdW1uJywgJ3Jvdy1yZXZlcnNlJywgJ3JvdyddKSksIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIGhhdmUgdGhlIGZsZXggKml0ZW0qIGJlaGF2aW9yLlxuICAgKiBZb3Ugc2hvdWxkIGJlIHdyYXBwaW5nICppdGVtcyogd2l0aCBhICpjb250YWluZXIqLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaXRlbTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBhIG51bWJlciwgaXQgc2V0cyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdGhlIGdyaWQgaXRlbSB1c2VzLlxuICAgKiBJdCBjYW4ndCBiZSBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBjb250YWluZXIgKDEyIGJ5IGRlZmF1bHQpLlxuICAgKiBJZiAnYXV0bycsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBtYXRjaGVzIGl0cyBjb250ZW50LlxuICAgKiBJZiBmYWxzZSwgdGhlIHByb3AgaXMgaWdub3JlZC5cbiAgICogSWYgdHJ1ZSwgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIGdyb3dzIHRvIHVzZSB0aGUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBncmlkIGNvbnRhaW5lci5cbiAgICogVGhlIHZhbHVlIGlzIGFwcGxpZWQgZm9yIHRoZSBgbGdgIGJyZWFrcG9pbnQgYW5kIHdpZGVyIHNjcmVlbnMgaWYgbm90IG92ZXJyaWRkZW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBsZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLmJvb2xdKSxcbiAgLyoqXG4gICAqIElmIGEgbnVtYmVyLCBpdCBzZXRzIHRoZSBudW1iZXIgb2YgY29sdW1ucyB0aGUgZ3JpZCBpdGVtIHVzZXMuXG4gICAqIEl0IGNhbid0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIGNvbnRhaW5lciAoMTIgYnkgZGVmYXVsdCkuXG4gICAqIElmICdhdXRvJywgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIG1hdGNoZXMgaXRzIGNvbnRlbnQuXG4gICAqIElmIGZhbHNlLCB0aGUgcHJvcCBpcyBpZ25vcmVkLlxuICAgKiBJZiB0cnVlLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggZ3Jvd3MgdG8gdXNlIHRoZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGdyaWQgY29udGFpbmVyLlxuICAgKiBUaGUgdmFsdWUgaXMgYXBwbGllZCBmb3IgdGhlIGBtZGAgYnJlYWtwb2ludCBhbmQgd2lkZXIgc2NyZWVucyBpZiBub3Qgb3ZlcnJpZGRlbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG1kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuYm9vbF0pLFxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgdmVydGljYWwgc3BhY2UgYmV0d2VlbiB0aGUgdHlwZSBgaXRlbWAgY29tcG9uZW50cy5cbiAgICogSXQgb3ZlcnJpZGVzIHRoZSB2YWx1ZSBvZiB0aGUgYHNwYWNpbmdgIHByb3AuXG4gICAqL1xuICByb3dTcGFjaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkpLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBhIG51bWJlciwgaXQgc2V0cyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdGhlIGdyaWQgaXRlbSB1c2VzLlxuICAgKiBJdCBjYW4ndCBiZSBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBjb250YWluZXIgKDEyIGJ5IGRlZmF1bHQpLlxuICAgKiBJZiAnYXV0bycsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBtYXRjaGVzIGl0cyBjb250ZW50LlxuICAgKiBJZiBmYWxzZSwgdGhlIHByb3AgaXMgaWdub3JlZC5cbiAgICogSWYgdHJ1ZSwgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIGdyb3dzIHRvIHVzZSB0aGUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBncmlkIGNvbnRhaW5lci5cbiAgICogVGhlIHZhbHVlIGlzIGFwcGxpZWQgZm9yIHRoZSBgc21gIGJyZWFrcG9pbnQgYW5kIHdpZGVyIHNjcmVlbnMgaWYgbm90IG92ZXJyaWRkZW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzbTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLmJvb2xdKSxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIHNwYWNlIGJldHdlZW4gdGhlIHR5cGUgYGl0ZW1gIGNvbXBvbmVudHMuXG4gICAqIEl0IGNhbiBvbmx5IGJlIHVzZWQgb24gYSB0eXBlIGBjb250YWluZXJgIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgc3BhY2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgYGZsZXgtd3JhcGAgc3R5bGUgcHJvcGVydHkuXG4gICAqIEl0J3MgYXBwbGllZCBmb3IgYWxsIHNjcmVlbiBzaXplcy5cbiAgICogQGRlZmF1bHQgJ3dyYXAnXG4gICAqL1xuICB3cmFwOiBQcm9wVHlwZXMub25lT2YoWydub3dyYXAnLCAnd3JhcC1yZXZlcnNlJywgJ3dyYXAnXSksXG4gIC8qKlxuICAgKiBJZiBhIG51bWJlciwgaXQgc2V0cyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdGhlIGdyaWQgaXRlbSB1c2VzLlxuICAgKiBJdCBjYW4ndCBiZSBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBjb250YWluZXIgKDEyIGJ5IGRlZmF1bHQpLlxuICAgKiBJZiAnYXV0bycsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBtYXRjaGVzIGl0cyBjb250ZW50LlxuICAgKiBJZiBmYWxzZSwgdGhlIHByb3AgaXMgaWdub3JlZC5cbiAgICogSWYgdHJ1ZSwgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIGdyb3dzIHRvIHVzZSB0aGUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBncmlkIGNvbnRhaW5lci5cbiAgICogVGhlIHZhbHVlIGlzIGFwcGxpZWQgZm9yIHRoZSBgeGxgIGJyZWFrcG9pbnQgYW5kIHdpZGVyIHNjcmVlbnMgaWYgbm90IG92ZXJyaWRkZW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB4bDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLmJvb2xdKSxcbiAgLyoqXG4gICAqIElmIGEgbnVtYmVyLCBpdCBzZXRzIHRoZSBudW1iZXIgb2YgY29sdW1ucyB0aGUgZ3JpZCBpdGVtIHVzZXMuXG4gICAqIEl0IGNhbid0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIGNvbnRhaW5lciAoMTIgYnkgZGVmYXVsdCkuXG4gICAqIElmICdhdXRvJywgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIG1hdGNoZXMgaXRzIGNvbnRlbnQuXG4gICAqIElmIGZhbHNlLCB0aGUgcHJvcCBpcyBpZ25vcmVkLlxuICAgKiBJZiB0cnVlLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggZ3Jvd3MgdG8gdXNlIHRoZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGdyaWQgY29udGFpbmVyLlxuICAgKiBUaGUgdmFsdWUgaXMgYXBwbGllZCBmb3IgYWxsIHRoZSBzY3JlZW4gc2l6ZXMgd2l0aCB0aGUgbG93ZXN0IHByaW9yaXR5LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgeHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5ib29sXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGl0IHNldHMgYG1pbi13aWR0aDogMGAgb24gdGhlIGl0ZW0uXG4gICAqIFJlZmVyIHRvIHRoZSBsaW1pdGF0aW9ucyBzZWN0aW9uIG9mIHRoZSBkb2N1bWVudGF0aW9uIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSB1c2UgY2FzZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHplcm9NaW5XaWR0aDogUHJvcFR5cGVzLmJvb2xcbn0gOiB2b2lkIDA7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBjb25zdCByZXF1aXJlUHJvcCA9IHJlcXVpcmVQcm9wRmFjdG9yeSgnR3JpZCcsIEdyaWQpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25jYXRcbiAgR3JpZFsncHJvcFR5cGVzJyArICcnXSA9IF9leHRlbmRzKHt9LCBHcmlkLnByb3BUeXBlcywge1xuICAgIGRpcmVjdGlvbjogcmVxdWlyZVByb3AoJ2NvbnRhaW5lcicpLFxuICAgIGxnOiByZXF1aXJlUHJvcCgnaXRlbScpLFxuICAgIG1kOiByZXF1aXJlUHJvcCgnaXRlbScpLFxuICAgIHNtOiByZXF1aXJlUHJvcCgnaXRlbScpLFxuICAgIHNwYWNpbmc6IHJlcXVpcmVQcm9wKCdjb250YWluZXInKSxcbiAgICB3cmFwOiByZXF1aXJlUHJvcCgnY29udGFpbmVyJyksXG4gICAgeHM6IHJlcXVpcmVQcm9wKCdpdGVtJyksXG4gICAgemVyb01pbldpZHRoOiByZXF1aXJlUHJvcCgnaXRlbScpXG4gIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgR3JpZDsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5pbXBvcnQgeyBpbnB1dEJhc2VDbGFzc2VzIH0gZnJvbSAnLi4vSW5wdXRCYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpSW5wdXQnLCBzbG90KTtcbn1cbmNvbnN0IGlucHV0Q2xhc3NlcyA9IF9leHRlbmRzKHt9LCBpbnB1dEJhc2VDbGFzc2VzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlJbnB1dCcsIFsncm9vdCcsICd1bmRlcmxpbmUnLCAnaW5wdXQnXSkpO1xuZXhwb3J0IGRlZmF1bHQgaW5wdXRDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImRpc2FibGVVbmRlcmxpbmVcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZnVsbFdpZHRoXCIsIFwiaW5wdXRDb21wb25lbnRcIiwgXCJtdWx0aWxpbmVcIiwgXCJzbG90UHJvcHNcIiwgXCJzbG90c1wiLCBcInR5cGVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgcmVmVHlwZSwgZGVlcG1lcmdlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgSW5wdXRCYXNlIGZyb20gJy4uL0lucHV0QmFzZSc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IGlucHV0Q2xhc3NlcywgeyBnZXRJbnB1dFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vaW5wdXRDbGFzc2VzJztcbmltcG9ydCB7IHJvb3RPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VSb290T3ZlcnJpZGVzUmVzb2x2ZXIsIGlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlciwgSW5wdXRCYXNlUm9vdCwgSW5wdXRCYXNlQ29tcG9uZW50IGFzIElucHV0QmFzZUlucHV0IH0gZnJvbSAnLi4vSW5wdXRCYXNlL0lucHV0QmFzZSc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZGlzYWJsZVVuZGVybGluZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgIWRpc2FibGVVbmRlcmxpbmUgJiYgJ3VuZGVybGluZSddLFxuICAgIGlucHV0OiBbJ2lucHV0J11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldElucHV0VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IElucHV0Um9vdCA9IHN0eWxlZChJbnB1dEJhc2VSb290LCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlJbnB1dCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gWy4uLmlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlcihwcm9wcywgc3R5bGVzKSwgIW93bmVyU3RhdGUuZGlzYWJsZVVuZGVybGluZSAmJiBzdHlsZXMudW5kZXJsaW5lXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgY29uc3QgbGlnaHQgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCc7XG4gIGxldCBib3R0b21MaW5lQ29sb3IgPSBsaWdodCA/ICdyZ2JhKDAsIDAsIDAsIDAuNDIpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknO1xuICBpZiAodGhlbWUudmFycykge1xuICAgIGJvdHRvbUxpbmVDb2xvciA9IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLmNvbW1vbi5vbkJhY2tncm91bmRDaGFubmVsfSAvICR7dGhlbWUudmFycy5vcGFjaXR5LmlucHV0VW5kZXJsaW5lfSlgO1xuICB9XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZSdcbiAgfSwgb3duZXJTdGF0ZS5mb3JtQ29udHJvbCAmJiB7XG4gICAgJ2xhYmVsICsgJic6IHtcbiAgICAgIG1hcmdpblRvcDogMTZcbiAgICB9XG4gIH0sICFvd25lclN0YXRlLmRpc2FibGVVbmRlcmxpbmUgJiYge1xuICAgICcmOjphZnRlcic6IHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDJweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW59YCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICBib3R0b206IDAsXG4gICAgICAvLyBEb2luZyB0aGUgb3RoZXIgd2F5IGFyb3VuZCBjcmFzaCBvbiBJRTExIFwiJydcIiBodHRwczovL2dpdGh1Yi5jb20vY3NzaW5qcy9qc3MvaXNzdWVzLzI0MlxuICAgICAgY29udGVudDogJ1wiXCInLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICByaWdodDogMCxcbiAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWCgwKScsXG4gICAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScsIHtcbiAgICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsXG4gICAgICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXRcbiAgICAgIH0pLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnIC8vIFRyYW5zcGFyZW50IHRvIHRoZSBob3ZlciBzdHlsZS5cbiAgICB9LFxuICAgIFtgJi4ke2lucHV0Q2xhc3Nlcy5mb2N1c2VkfTphZnRlcmBdOiB7XG4gICAgICAvLyB0cmFuc2xhdGVYKDApIGlzIGEgd29ya2Fyb3VuZCBmb3IgU2FmYXJpIHRyYW5zZm9ybSBzY2FsZSBidWdcbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL2lzc3Vlcy8zMTc2NlxuICAgICAgdHJhbnNmb3JtOiAnc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCknXG4gICAgfSxcbiAgICBbYCYuJHtpbnB1dENsYXNzZXMuZXJyb3J9YF06IHtcbiAgICAgICcmOjpiZWZvcmUsICY6OmFmdGVyJzoge1xuICAgICAgICBib3JkZXJCb3R0b21Db2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICAgICAgfVxuICAgIH0sXG4gICAgJyY6OmJlZm9yZSc6IHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAke2JvdHRvbUxpbmVDb2xvcn1gLFxuICAgICAgbGVmdDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIC8vIERvaW5nIHRoZSBvdGhlciB3YXkgYXJvdW5kIGNyYXNoIG9uIElFMTEgXCInJ1wiIGh0dHBzOi8vZ2l0aHViLmNvbS9jc3NpbmpzL2pzcy9pc3N1ZXMvMjQyXG4gICAgICBjb250ZW50OiAnXCJcXFxcMDBhMFwiJyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgcmlnaHQ6IDAsXG4gICAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ2JvcmRlci1ib3R0b20tY29sb3InLCB7XG4gICAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyXG4gICAgICB9KSxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyAvLyBUcmFuc3BhcmVudCB0byB0aGUgaG92ZXIgc3R5bGUuXG4gICAgfSxcbiAgICBbYCY6aG92ZXI6bm90KC4ke2lucHV0Q2xhc3Nlcy5kaXNhYmxlZH0sIC4ke2lucHV0Q2xhc3Nlcy5lcnJvcn0pOmJlZm9yZWBdOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAycHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnByaW1hcnl9YCxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAke2JvdHRvbUxpbmVDb2xvcn1gXG4gICAgICB9XG4gICAgfSxcbiAgICBbYCYuJHtpbnB1dENsYXNzZXMuZGlzYWJsZWR9OmJlZm9yZWBdOiB7XG4gICAgICBib3JkZXJCb3R0b21TdHlsZTogJ2RvdHRlZCdcbiAgICB9XG4gIH0pO1xufSk7XG5jb25zdCBJbnB1dElucHV0ID0gc3R5bGVkKElucHV0QmFzZUlucHV0LCB7XG4gIG5hbWU6ICdNdWlJbnB1dCcsXG4gIHNsb3Q6ICdJbnB1dCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyXG59KSh7fSk7XG5jb25zdCBJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIElucHV0KGluUHJvcHMsIHJlZikge1xuICB2YXIgX3JlZiwgX3Nsb3RzJHJvb3QsIF9yZWYyLCBfc2xvdHMkaW5wdXQ7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUlucHV0J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgZGlzYWJsZVVuZGVybGluZSxcbiAgICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICAgIGNvbXBvbmVudHNQcm9wczogY29tcG9uZW50c1Byb3BzUHJvcCxcbiAgICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgICAgaW5wdXRDb21wb25lbnQgPSAnaW5wdXQnLFxuICAgICAgbXVsdGlsaW5lID0gZmFsc2UsXG4gICAgICBzbG90UHJvcHMsXG4gICAgICBzbG90cyA9IHt9LFxuICAgICAgdHlwZSA9ICd0ZXh0J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMocHJvcHMpO1xuICBjb25zdCBvd25lclN0YXRlID0ge1xuICAgIGRpc2FibGVVbmRlcmxpbmVcbiAgfTtcbiAgY29uc3QgaW5wdXRDb21wb25lbnRzUHJvcHMgPSB7XG4gICAgcm9vdDoge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH1cbiAgfTtcbiAgY29uc3QgY29tcG9uZW50c1Byb3BzID0gKHNsb3RQcm9wcyAhPSBudWxsID8gc2xvdFByb3BzIDogY29tcG9uZW50c1Byb3BzUHJvcCkgPyBkZWVwbWVyZ2Uoc2xvdFByb3BzICE9IG51bGwgPyBzbG90UHJvcHMgOiBjb21wb25lbnRzUHJvcHNQcm9wLCBpbnB1dENvbXBvbmVudHNQcm9wcykgOiBpbnB1dENvbXBvbmVudHNQcm9wcztcbiAgY29uc3QgUm9vdFNsb3QgPSAoX3JlZiA9IChfc2xvdHMkcm9vdCA9IHNsb3RzLnJvb3QpICE9IG51bGwgPyBfc2xvdHMkcm9vdCA6IGNvbXBvbmVudHMuUm9vdCkgIT0gbnVsbCA/IF9yZWYgOiBJbnB1dFJvb3Q7XG4gIGNvbnN0IElucHV0U2xvdCA9IChfcmVmMiA9IChfc2xvdHMkaW5wdXQgPSBzbG90cy5pbnB1dCkgIT0gbnVsbCA/IF9zbG90cyRpbnB1dCA6IGNvbXBvbmVudHMuSW5wdXQpICE9IG51bGwgPyBfcmVmMiA6IElucHV0SW5wdXQ7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dEJhc2UsIF9leHRlbmRzKHtcbiAgICBzbG90czoge1xuICAgICAgcm9vdDogUm9vdFNsb3QsXG4gICAgICBpbnB1dDogSW5wdXRTbG90XG4gICAgfSxcbiAgICBzbG90UHJvcHM6IGNvbXBvbmVudHNQcm9wcyxcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICBpbnB1dENvbXBvbmVudDogaW5wdXRDb21wb25lbnQsXG4gICAgbXVsdGlsaW5lOiBtdWx0aWxpbmUsXG4gICAgcmVmOiByZWYsXG4gICAgdHlwZTogdHlwZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXNcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBJbnB1dC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaGVscHMgdXNlcnMgdG8gZmlsbCBmb3JtcyBmYXN0ZXIsIGVzcGVjaWFsbHkgb24gbW9iaWxlIGRldmljZXMuXG4gICAqIFRoZSBuYW1lIGNhbiBiZSBjb25mdXNpbmcsIGFzIGl0J3MgbW9yZSBsaWtlIGFuIGF1dG9maWxsLlxuICAgKiBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgaXQgW2ZvbGxvd2luZyB0aGUgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybS1jb250cm9sLWluZnJhc3RydWN0dXJlLmh0bWwjYXV0b2ZpbGwpLlxuICAgKi9cbiAgYXV0b0NvbXBsZXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ3ByaW1hcnknYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeSddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RzYCBwcm9wIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIElucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90UHJvcHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdFByb3BzYCBwcm9wIGluc3RlYWQsIGFzIGBjb21wb25lbnRzUHJvcHNgIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCBub3QgaGF2ZSBhbiB1bmRlcmxpbmUuXG4gICAqL1xuICBkaXNhYmxlVW5kZXJsaW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEVuZCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIGVuZEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgaW5kaWNhdGUgYW4gZXJyb3IuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdpbnB1dCdcbiAgICovXG4gIGlucHV0Q29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ25vbmUnYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnXSksXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSBbVGV4dGFyZWFBdXRvc2l6ZV0oL21hdGVyaWFsLXVpL3JlYWN0LXRleHRhcmVhLWF1dG9zaXplLykgZWxlbWVudCBpcyByZW5kZXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpbGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBzaG9ydCBoaW50IGRpc3BsYXllZCBpbiB0aGUgYGlucHV0YCBiZWZvcmUgdGhlIHVzZXIgZW50ZXJzIGEgdmFsdWUuXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEl0IHByZXZlbnRzIHRoZSB1c2VyIGZyb20gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgKiAobm90IGZyb20gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZmllbGQpLlxuICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNQcm9wc2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcm9vdDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogU3RhcnQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBzdGFydEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuIEl0IHNob3VsZCBiZSBbYSB2YWxpZCBIVE1MNSBpbnB1dCB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjRm9ybV8lM0NpbnB1dCUzRV90eXBlcykuXG4gICAqIEBkZWZhdWx0ICd0ZXh0J1xuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LCByZXF1aXJlZCBmb3IgYSBjb250cm9sbGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuSW5wdXQubXVpTmFtZSA9ICdJbnB1dCc7XG5leHBvcnQgZGVmYXVsdCBJbnB1dDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSBmcm9tIFwiQG11aS91dGlscy9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFyaWEtZGVzY3JpYmVkYnlcIiwgXCJhdXRvQ29tcGxldGVcIiwgXCJhdXRvRm9jdXNcIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudHNcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJkaXNhYmxlZFwiLCBcImRpc2FibGVJbmplY3RpbmdHbG9iYWxTdHlsZXNcIiwgXCJlbmRBZG9ybm1lbnRcIiwgXCJlcnJvclwiLCBcImZ1bGxXaWR0aFwiLCBcImlkXCIsIFwiaW5wdXRDb21wb25lbnRcIiwgXCJpbnB1dFByb3BzXCIsIFwiaW5wdXRSZWZcIiwgXCJtYXJnaW5cIiwgXCJtYXhSb3dzXCIsIFwibWluUm93c1wiLCBcIm11bHRpbGluZVwiLCBcIm5hbWVcIiwgXCJvbkJsdXJcIiwgXCJvbkNoYW5nZVwiLCBcIm9uQ2xpY2tcIiwgXCJvbkZvY3VzXCIsIFwib25LZXlEb3duXCIsIFwib25LZXlVcFwiLCBcInBsYWNlaG9sZGVyXCIsIFwicmVhZE9ubHlcIiwgXCJyZW5kZXJTdWZmaXhcIiwgXCJyb3dzXCIsIFwic2l6ZVwiLCBcInNsb3RQcm9wc1wiLCBcInNsb3RzXCIsIFwic3RhcnRBZG9ybm1lbnRcIiwgXCJ0eXBlXCIsIFwidmFsdWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyByZWZUeXBlLCBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMsIGlzSG9zdENvbXBvbmVudCwgVGV4dGFyZWFBdXRvc2l6ZSB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCBGb3JtQ29udHJvbENvbnRleHQgZnJvbSAnLi4vRm9ybUNvbnRyb2wvRm9ybUNvbnRyb2xDb250ZXh0JztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB1c2VFbmhhbmNlZEVmZmVjdCBmcm9tICcuLi91dGlscy91c2VFbmhhbmNlZEVmZmVjdCc7XG5pbXBvcnQgR2xvYmFsU3R5bGVzIGZyb20gJy4uL0dsb2JhbFN0eWxlcyc7XG5pbXBvcnQgeyBpc0ZpbGxlZCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IGlucHV0QmFzZUNsYXNzZXMsIHsgZ2V0SW5wdXRCYXNlVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9pbnB1dEJhc2VDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgY29uc3Qgcm9vdE92ZXJyaWRlc1Jlc29sdmVyID0gKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgY29uc3Qge1xuICAgIG93bmVyU3RhdGVcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmZvcm1Db250cm9sICYmIHN0eWxlcy5mb3JtQ29udHJvbCwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiBzdHlsZXMuYWRvcm5lZFN0YXJ0LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiBzdHlsZXMuYWRvcm5lZEVuZCwgb3duZXJTdGF0ZS5lcnJvciAmJiBzdHlsZXMuZXJyb3IsIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiBzdHlsZXMuc2l6ZVNtYWxsLCBvd25lclN0YXRlLm11bHRpbGluZSAmJiBzdHlsZXMubXVsdGlsaW5lLCBvd25lclN0YXRlLmNvbG9yICYmIHN0eWxlc1tgY29sb3Ike2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHN0eWxlcy5mdWxsV2lkdGgsIG93bmVyU3RhdGUuaGlkZGVuTGFiZWwgJiYgc3R5bGVzLmhpZGRlbkxhYmVsXTtcbn07XG5leHBvcnQgY29uc3QgaW5wdXRPdmVycmlkZXNSZXNvbHZlciA9IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBvd25lclN0YXRlXG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIFtzdHlsZXMuaW5wdXQsIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiBzdHlsZXMuaW5wdXRTaXplU21hbGwsIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIHN0eWxlcy5pbnB1dE11bHRpbGluZSwgb3duZXJTdGF0ZS50eXBlID09PSAnc2VhcmNoJyAmJiBzdHlsZXMuaW5wdXRUeXBlU2VhcmNoLCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHN0eWxlcy5pbnB1dEFkb3JuZWRTdGFydCwgb3duZXJTdGF0ZS5lbmRBZG9ybm1lbnQgJiYgc3R5bGVzLmlucHV0QWRvcm5lZEVuZCwgb3duZXJTdGF0ZS5oaWRkZW5MYWJlbCAmJiBzdHlsZXMuaW5wdXRIaWRkZW5MYWJlbF07XG59O1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgY29sb3IsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZW5kQWRvcm5tZW50LFxuICAgIGZvY3VzZWQsXG4gICAgZm9ybUNvbnRyb2wsXG4gICAgZnVsbFdpZHRoLFxuICAgIGhpZGRlbkxhYmVsLFxuICAgIG11bHRpbGluZSxcbiAgICByZWFkT25seSxcbiAgICBzaXplLFxuICAgIHN0YXJ0QWRvcm5tZW50LFxuICAgIHR5cGVcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgZXJyb3IgJiYgJ2Vycm9yJywgZnVsbFdpZHRoICYmICdmdWxsV2lkdGgnLCBmb2N1c2VkICYmICdmb2N1c2VkJywgZm9ybUNvbnRyb2wgJiYgJ2Zvcm1Db250cm9sJywgc2l6ZSAmJiBzaXplICE9PSAnbWVkaXVtJyAmJiBgc2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gLCBtdWx0aWxpbmUgJiYgJ211bHRpbGluZScsIHN0YXJ0QWRvcm5tZW50ICYmICdhZG9ybmVkU3RhcnQnLCBlbmRBZG9ybm1lbnQgJiYgJ2Fkb3JuZWRFbmQnLCBoaWRkZW5MYWJlbCAmJiAnaGlkZGVuTGFiZWwnLCByZWFkT25seSAmJiAncmVhZE9ubHknXSxcbiAgICBpbnB1dDogWydpbnB1dCcsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIHR5cGUgPT09ICdzZWFyY2gnICYmICdpbnB1dFR5cGVTZWFyY2gnLCBtdWx0aWxpbmUgJiYgJ2lucHV0TXVsdGlsaW5lJywgc2l6ZSA9PT0gJ3NtYWxsJyAmJiAnaW5wdXRTaXplU21hbGwnLCBoaWRkZW5MYWJlbCAmJiAnaW5wdXRIaWRkZW5MYWJlbCcsIHN0YXJ0QWRvcm5tZW50ICYmICdpbnB1dEFkb3JuZWRTdGFydCcsIGVuZEFkb3JubWVudCAmJiAnaW5wdXRBZG9ybmVkRW5kJywgcmVhZE9ubHkgJiYgJ3JlYWRPbmx5J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRJbnB1dEJhc2VVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBJbnB1dEJhc2VSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlJbnB1dEJhc2UnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiByb290T3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7fSwgdGhlbWUudHlwb2dyYXBoeS5ib2R5MSwge1xuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5wcmltYXJ5LFxuICBsaW5lSGVpZ2h0OiAnMS40Mzc1ZW0nLFxuICAvLyAyM3B4XG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAvLyBQcmV2ZW50IHBhZGRpbmcgaXNzdWUgd2l0aCBmdWxsV2lkdGguXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBjdXJzb3I6ICd0ZXh0JyxcbiAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIFtgJi4ke2lucHV0QmFzZUNsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5kaXNhYmxlZCxcbiAgICBjdXJzb3I6ICdkZWZhdWx0J1xuICB9XG59LCBvd25lclN0YXRlLm11bHRpbGluZSAmJiBfZXh0ZW5kcyh7XG4gIHBhZGRpbmc6ICc0cHggMCA1cHgnXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBwYWRkaW5nVG9wOiAxXG59KSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYge1xuICB3aWR0aDogJzEwMCUnXG59KSk7XG5leHBvcnQgY29uc3QgSW5wdXRCYXNlQ29tcG9uZW50ID0gc3R5bGVkKCdpbnB1dCcsIHtcbiAgbmFtZTogJ011aUlucHV0QmFzZScsXG4gIHNsb3Q6ICdJbnB1dCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiBpbnB1dE92ZXJyaWRlc1Jlc29sdmVyXG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICBjb25zdCBsaWdodCA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JztcbiAgY29uc3QgcGxhY2Vob2xkZXIgPSBfZXh0ZW5kcyh7XG4gICAgY29sb3I6ICdjdXJyZW50Q29sb3InXG4gIH0sIHRoZW1lLnZhcnMgPyB7XG4gICAgb3BhY2l0eTogdGhlbWUudmFycy5vcGFjaXR5LmlucHV0UGxhY2Vob2xkZXJcbiAgfSA6IHtcbiAgICBvcGFjaXR5OiBsaWdodCA/IDAuNDIgOiAwLjVcbiAgfSwge1xuICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHtcbiAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyXG4gICAgfSlcbiAgfSk7XG4gIGNvbnN0IHBsYWNlaG9sZGVySGlkZGVuID0ge1xuICAgIG9wYWNpdHk6ICcwICFpbXBvcnRhbnQnXG4gIH07XG4gIGNvbnN0IHBsYWNlaG9sZGVyVmlzaWJsZSA9IHRoZW1lLnZhcnMgPyB7XG4gICAgb3BhY2l0eTogdGhlbWUudmFycy5vcGFjaXR5LmlucHV0UGxhY2Vob2xkZXJcbiAgfSA6IHtcbiAgICBvcGFjaXR5OiBsaWdodCA/IDAuNDIgOiAwLjVcbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBmb250OiAnaW5oZXJpdCcsXG4gICAgbGV0dGVyU3BhY2luZzogJ2luaGVyaXQnLFxuICAgIGNvbG9yOiAnY3VycmVudENvbG9yJyxcbiAgICBwYWRkaW5nOiAnNHB4IDAgNXB4JyxcbiAgICBib3JkZXI6IDAsXG4gICAgYm94U2l6aW5nOiAnY29udGVudC1ib3gnLFxuICAgIGJhY2tncm91bmQ6ICdub25lJyxcbiAgICBoZWlnaHQ6ICcxLjQzNzVlbScsXG4gICAgLy8gUmVzZXQgMjNweHRoZSBuYXRpdmUgaW5wdXQgbGluZS1oZWlnaHRcbiAgICBtYXJnaW46IDAsXG4gICAgLy8gUmVzZXQgZm9yIFNhZmFyaVxuICAgIFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgLy8gTWFrZSB0aGUgZmxleCBpdGVtIHNocmluayB3aXRoIEZpcmVmb3hcbiAgICBtaW5XaWR0aDogMCxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIC8vIEZpeCBJRTExIHdpZHRoIGlzc3VlXG4gICAgYW5pbWF0aW9uTmFtZTogJ211aS1hdXRvLWZpbGwtY2FuY2VsJyxcbiAgICBhbmltYXRpb25EdXJhdGlvbjogJzEwbXMnLFxuICAgICcmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXIsXG4gICAgJyY6Oi1tb3otcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlcixcbiAgICAvLyBGaXJlZm94IDE5K1xuICAgICcmOi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyLFxuICAgIC8vIElFMTFcbiAgICAnJjo6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXIsXG4gICAgLy8gRWRnZVxuICAgICcmOmZvY3VzJzoge1xuICAgICAgb3V0bGluZTogMFxuICAgIH0sXG4gICAgLy8gUmVzZXQgRmlyZWZveCBpbnZhbGlkIHJlcXVpcmVkIGlucHV0IHN0eWxlXG4gICAgJyY6aW52YWxpZCc6IHtcbiAgICAgIGJveFNoYWRvdzogJ25vbmUnXG4gICAgfSxcbiAgICAnJjo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbic6IHtcbiAgICAgIC8vIFJlbW92ZSB0aGUgcGFkZGluZyB3aGVuIHR5cGU9c2VhcmNoLlxuICAgICAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnXG4gICAgfSxcbiAgICAvLyBTaG93IGFuZCBoaWRlIHRoZSBwbGFjZWhvbGRlciBsb2dpY1xuICAgIFtgbGFiZWxbZGF0YS1zaHJpbms9ZmFsc2VdICsgLiR7aW5wdXRCYXNlQ2xhc3Nlcy5mb3JtQ29udHJvbH0gJmBdOiB7XG4gICAgICAnJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVySGlkZGVuLFxuICAgICAgJyY6Oi1tb3otcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlckhpZGRlbixcbiAgICAgIC8vIEZpcmVmb3ggMTkrXG4gICAgICAnJjotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlckhpZGRlbixcbiAgICAgIC8vIElFMTFcbiAgICAgICcmOjotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlckhpZGRlbixcbiAgICAgIC8vIEVkZ2VcbiAgICAgICcmOmZvY3VzOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJWaXNpYmxlLFxuICAgICAgJyY6Zm9jdXM6Oi1tb3otcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlclZpc2libGUsXG4gICAgICAvLyBGaXJlZm94IDE5K1xuICAgICAgJyY6Zm9jdXM6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJWaXNpYmxlLFxuICAgICAgLy8gSUUxMVxuICAgICAgJyY6Zm9jdXM6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyVmlzaWJsZSAvLyBFZGdlXG4gICAgfSxcbiAgICBbYCYuJHtpbnB1dEJhc2VDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgICBvcGFjaXR5OiAxLFxuICAgICAgLy8gUmVzZXQgaU9TIG9wYWNpdHlcbiAgICAgIFdlYmtpdFRleHRGaWxsQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuZGlzYWJsZWQgLy8gRml4IG9wYWNpdHkgU2FmYXJpIGJ1Z1xuICAgIH0sXG4gICAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICAgIGFuaW1hdGlvbkR1cmF0aW9uOiAnNTAwMHMnLFxuICAgICAgYW5pbWF0aW9uTmFtZTogJ211aS1hdXRvLWZpbGwnXG4gICAgfVxuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAgIHBhZGRpbmdUb3A6IDFcbiAgfSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYge1xuICAgIGhlaWdodDogJ2F1dG8nLFxuICAgIHJlc2l6ZTogJ25vbmUnLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgcGFkZGluZ1RvcDogMFxuICB9LCBvd25lclN0YXRlLnR5cGUgPT09ICdzZWFyY2gnICYmIHtcbiAgICAvLyBJbXByb3ZlIHR5cGUgc2VhcmNoIHN0eWxlLlxuICAgIE1vekFwcGVhcmFuY2U6ICd0ZXh0ZmllbGQnXG4gIH0pO1xufSk7XG5jb25zdCBpbnB1dEdsb2JhbFN0eWxlcyA9IC8qI19fUFVSRV9fKi9fanN4KEdsb2JhbFN0eWxlcywge1xuICBzdHlsZXM6IHtcbiAgICAnQGtleWZyYW1lcyBtdWktYXV0by1maWxsJzoge1xuICAgICAgZnJvbToge1xuICAgICAgICBkaXNwbGF5OiAnYmxvY2snXG4gICAgICB9XG4gICAgfSxcbiAgICAnQGtleWZyYW1lcyBtdWktYXV0by1maWxsLWNhbmNlbCc6IHtcbiAgICAgIGZyb206IHtcbiAgICAgICAgZGlzcGxheTogJ2Jsb2NrJ1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogYElucHV0QmFzZWAgY29udGFpbnMgYXMgZmV3IHN0eWxlcyBhcyBwb3NzaWJsZS5cbiAqIEl0IGFpbXMgdG8gYmUgYSBzaW1wbGUgYnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGFuIGlucHV0LlxuICogSXQgY29udGFpbnMgYSBsb2FkIG9mIHN0eWxlIHJlc2V0IGFuZCBzb21lIHN0YXRlIGxvZ2ljLlxuICovXG5jb25zdCBJbnB1dEJhc2UgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBJbnB1dEJhc2UoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfc2xvdFByb3BzJGlucHV0O1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlJbnB1dEJhc2UnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICAnYXJpYS1kZXNjcmliZWRieSc6IGFyaWFEZXNjcmliZWRieSxcbiAgICAgIGF1dG9Db21wbGV0ZSxcbiAgICAgIGF1dG9Gb2N1cyxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICAgIGNvbXBvbmVudHNQcm9wcyA9IHt9LFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBkaXNhYmxlSW5qZWN0aW5nR2xvYmFsU3R5bGVzLFxuICAgICAgZW5kQWRvcm5tZW50LFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBpZCxcbiAgICAgIGlucHV0Q29tcG9uZW50ID0gJ2lucHV0JyxcbiAgICAgIGlucHV0UHJvcHM6IGlucHV0UHJvcHNQcm9wID0ge30sXG4gICAgICBpbnB1dFJlZjogaW5wdXRSZWZQcm9wLFxuICAgICAgbWF4Um93cyxcbiAgICAgIG1pblJvd3MsXG4gICAgICBtdWx0aWxpbmUgPSBmYWxzZSxcbiAgICAgIG5hbWUsXG4gICAgICBvbkJsdXIsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgb25LZXlVcCxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgcmVhZE9ubHksXG4gICAgICByZW5kZXJTdWZmaXgsXG4gICAgICByb3dzLFxuICAgICAgc2xvdFByb3BzID0ge30sXG4gICAgICBzbG90cyA9IHt9LFxuICAgICAgc3RhcnRBZG9ybm1lbnQsXG4gICAgICB0eXBlID0gJ3RleHQnLFxuICAgICAgdmFsdWU6IHZhbHVlUHJvcFxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCB2YWx1ZSA9IGlucHV0UHJvcHNQcm9wLnZhbHVlICE9IG51bGwgPyBpbnB1dFByb3BzUHJvcC52YWx1ZSA6IHZhbHVlUHJvcDtcbiAgY29uc3Qge1xuICAgIGN1cnJlbnQ6IGlzQ29udHJvbGxlZFxuICB9ID0gUmVhY3QudXNlUmVmKHZhbHVlICE9IG51bGwpO1xuICBjb25zdCBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCBoYW5kbGVJbnB1dFJlZldhcm5pbmcgPSBSZWFjdC51c2VDYWxsYmFjayhpbnN0YW5jZSA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS5ub2RlTmFtZSAhPT0gJ0lOUFVUJyAmJiAhaW5zdGFuY2UuZm9jdXMpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogWW91IGhhdmUgcHJvdmlkZWQgYSBgaW5wdXRDb21wb25lbnRgIHRvIHRoZSBpbnB1dCBjb21wb25lbnQnLCAndGhhdCBkb2VzIG5vdCBjb3JyZWN0bHkgaGFuZGxlIHRoZSBgcmVmYCBwcm9wLicsICdNYWtlIHN1cmUgdGhlIGByZWZgIHByb3AgaXMgY2FsbGVkIHdpdGggYSBIVE1MSW5wdXRFbGVtZW50LiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKTtcbiAgY29uc3QgaGFuZGxlSW5wdXRSZWYgPSB1c2VGb3JrUmVmKGlucHV0UmVmLCBpbnB1dFJlZlByb3AsIGlucHV0UHJvcHNQcm9wLnJlZiwgaGFuZGxlSW5wdXRSZWZXYXJuaW5nKTtcbiAgY29uc3QgW2ZvY3VzZWQsIHNldEZvY3VzZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgICAgICByZXR1cm4gbXVpRm9ybUNvbnRyb2wucmVnaXN0ZXJFZmZlY3QoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSwgW211aUZvcm1Db250cm9sXSk7XG4gIH1cbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ2NvbG9yJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2hpZGRlbkxhYmVsJywgJ3NpemUnLCAncmVxdWlyZWQnLCAnZmlsbGVkJ11cbiAgfSk7XG4gIGZjcy5mb2N1c2VkID0gbXVpRm9ybUNvbnRyb2wgPyBtdWlGb3JtQ29udHJvbC5mb2N1c2VkIDogZm9jdXNlZDtcblxuICAvLyBUaGUgYmx1ciB3b24ndCBmaXJlIHdoZW4gdGhlIGRpc2FibGVkIHN0YXRlIGlzIHNldCBvbiBhIGZvY3VzZWQgaW5wdXQuXG4gIC8vIFdlIG5lZWQgdG8gYm9vayBrZWVwIHRoZSBmb2N1c2VkIHN0YXRlIG1hbnVhbGx5LlxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbXVpRm9ybUNvbnRyb2wgJiYgZGlzYWJsZWQgJiYgZm9jdXNlZCkge1xuICAgICAgc2V0Rm9jdXNlZChmYWxzZSk7XG4gICAgICBpZiAob25CbHVyKSB7XG4gICAgICAgIG9uQmx1cigpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW211aUZvcm1Db250cm9sLCBkaXNhYmxlZCwgZm9jdXNlZCwgb25CbHVyXSk7XG4gIGNvbnN0IG9uRmlsbGVkID0gbXVpRm9ybUNvbnRyb2wgJiYgbXVpRm9ybUNvbnRyb2wub25GaWxsZWQ7XG4gIGNvbnN0IG9uRW1wdHkgPSBtdWlGb3JtQ29udHJvbCAmJiBtdWlGb3JtQ29udHJvbC5vbkVtcHR5O1xuICBjb25zdCBjaGVja0RpcnR5ID0gUmVhY3QudXNlQ2FsbGJhY2sob2JqID0+IHtcbiAgICBpZiAoaXNGaWxsZWQob2JqKSkge1xuICAgICAgaWYgKG9uRmlsbGVkKSB7XG4gICAgICAgIG9uRmlsbGVkKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvbkVtcHR5KSB7XG4gICAgICBvbkVtcHR5KCk7XG4gICAgfVxuICB9LCBbb25GaWxsZWQsIG9uRW1wdHldKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc0NvbnRyb2xsZWQpIHtcbiAgICAgIGNoZWNrRGlydHkoe1xuICAgICAgICB2YWx1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbdmFsdWUsIGNoZWNrRGlydHksIGlzQ29udHJvbGxlZF0pO1xuICBjb25zdCBoYW5kbGVGb2N1cyA9IGV2ZW50ID0+IHtcbiAgICAvLyBGaXggYSBidWcgd2l0aCBJRTExIHdoZXJlIHRoZSBmb2N1cy9ibHVyIGV2ZW50cyBhcmUgdHJpZ2dlcmVkXG4gICAgLy8gd2hpbGUgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICBpZiAoZmNzLmRpc2FibGVkKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG9uRm9jdXMpIHtcbiAgICAgIG9uRm9jdXMoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAoaW5wdXRQcm9wc1Byb3Aub25Gb2N1cykge1xuICAgICAgaW5wdXRQcm9wc1Byb3Aub25Gb2N1cyhldmVudCk7XG4gICAgfVxuICAgIGlmIChtdWlGb3JtQ29udHJvbCAmJiBtdWlGb3JtQ29udHJvbC5vbkZvY3VzKSB7XG4gICAgICBtdWlGb3JtQ29udHJvbC5vbkZvY3VzKGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0Rm9jdXNlZCh0cnVlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUJsdXIgPSBldmVudCA9PiB7XG4gICAgaWYgKG9uQmx1cikge1xuICAgICAgb25CbHVyKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKGlucHV0UHJvcHNQcm9wLm9uQmx1cikge1xuICAgICAgaW5wdXRQcm9wc1Byb3Aub25CbHVyKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKG11aUZvcm1Db250cm9sICYmIG11aUZvcm1Db250cm9sLm9uQmx1cikge1xuICAgICAgbXVpRm9ybUNvbnRyb2wub25CbHVyKGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0Rm9jdXNlZChmYWxzZSk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZXZlbnQsIC4uLmFyZ3MpID0+IHtcbiAgICBpZiAoIWlzQ29udHJvbGxlZCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldCB8fCBpbnB1dFJlZi5jdXJyZW50O1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogRXhwZWN0ZWQgdmFsaWQgaW5wdXQgdGFyZ2V0LiBEaWQgeW91IHVzZSBhIGN1c3RvbSBcXGBpbnB1dENvbXBvbmVudFxcYCBhbmQgZm9yZ2V0IHRvIGZvcndhcmQgcmVmcz8gU2VlIGh0dHBzOi8vbXVpLmNvbS9yL2lucHV0LWNvbXBvbmVudC1yZWYtaW50ZXJmYWNlIGZvciBtb3JlIGluZm8uYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMSkpO1xuICAgICAgfVxuICAgICAgY2hlY2tEaXJ0eSh7XG4gICAgICAgIHZhbHVlOiBlbGVtZW50LnZhbHVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGlucHV0UHJvcHNQcm9wLm9uQ2hhbmdlKSB7XG4gICAgICBpbnB1dFByb3BzUHJvcC5vbkNoYW5nZShldmVudCwgLi4uYXJncyk7XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybSBpbiB0aGUgd2lsbFVwZGF0ZVxuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgb25DaGFuZ2UoZXZlbnQsIC4uLmFyZ3MpO1xuICAgIH1cbiAgfTtcblxuICAvLyBDaGVjayB0aGUgaW5wdXQgc3RhdGUgb24gbW91bnQsIGluIGNhc2UgaXQgd2FzIGZpbGxlZCBieSB0aGUgdXNlclxuICAvLyBvciBhdXRvIGZpbGxlZCBieSB0aGUgYnJvd3NlciBiZWZvcmUgdGhlIGh5ZHJhdGlvbiAoZm9yIFNTUikuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY2hlY2tEaXJ0eShpbnB1dFJlZi5jdXJyZW50KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtdKTtcbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSBldmVudCA9PiB7XG4gICAgaWYgKGlucHV0UmVmLmN1cnJlbnQgJiYgZXZlbnQuY3VycmVudFRhcmdldCA9PT0gZXZlbnQudGFyZ2V0KSB7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICBvbkNsaWNrKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGxldCBJbnB1dENvbXBvbmVudCA9IGlucHV0Q29tcG9uZW50O1xuICBsZXQgaW5wdXRQcm9wcyA9IGlucHV0UHJvcHNQcm9wO1xuICBpZiAobXVsdGlsaW5lICYmIElucHV0Q29tcG9uZW50ID09PSAnaW5wdXQnKSB7XG4gICAgaWYgKHJvd3MpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChtaW5Sb3dzIHx8IG1heFJvd3MpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ01VSTogWW91IGNhbiBub3QgdXNlIHRoZSBgbWluUm93c2Agb3IgYG1heFJvd3NgIHByb3BzIHdoZW4gdGhlIGlucHV0IGByb3dzYCBwcm9wIGlzIHNldC4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaW5wdXRQcm9wcyA9IF9leHRlbmRzKHtcbiAgICAgICAgdHlwZTogdW5kZWZpbmVkLFxuICAgICAgICBtaW5Sb3dzOiByb3dzLFxuICAgICAgICBtYXhSb3dzOiByb3dzXG4gICAgICB9LCBpbnB1dFByb3BzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXRQcm9wcyA9IF9leHRlbmRzKHtcbiAgICAgICAgdHlwZTogdW5kZWZpbmVkLFxuICAgICAgICBtYXhSb3dzLFxuICAgICAgICBtaW5Sb3dzXG4gICAgICB9LCBpbnB1dFByb3BzKTtcbiAgICB9XG4gICAgSW5wdXRDb21wb25lbnQgPSBUZXh0YXJlYUF1dG9zaXplO1xuICB9XG4gIGNvbnN0IGhhbmRsZUF1dG9GaWxsID0gZXZlbnQgPT4ge1xuICAgIC8vIFByb3ZpZGUgYSBmYWtlIHZhbHVlIGFzIENocm9tZSBtaWdodCBub3QgbGV0IHlvdSBhY2Nlc3MgaXQgZm9yIHNlY3VyaXR5IHJlYXNvbnMuXG4gICAgY2hlY2tEaXJ0eShldmVudC5hbmltYXRpb25OYW1lID09PSAnbXVpLWF1dG8tZmlsbC1jYW5jZWwnID8gaW5wdXRSZWYuY3VycmVudCA6IHtcbiAgICAgIHZhbHVlOiAneCdcbiAgICB9KTtcbiAgfTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobXVpRm9ybUNvbnRyb2wpIHtcbiAgICAgIG11aUZvcm1Db250cm9sLnNldEFkb3JuZWRTdGFydChCb29sZWFuKHN0YXJ0QWRvcm5tZW50KSk7XG4gICAgfVxuICB9LCBbbXVpRm9ybUNvbnRyb2wsIHN0YXJ0QWRvcm5tZW50XSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcjogZmNzLmNvbG9yIHx8ICdwcmltYXJ5JyxcbiAgICBkaXNhYmxlZDogZmNzLmRpc2FibGVkLFxuICAgIGVuZEFkb3JubWVudCxcbiAgICBlcnJvcjogZmNzLmVycm9yLFxuICAgIGZvY3VzZWQ6IGZjcy5mb2N1c2VkLFxuICAgIGZvcm1Db250cm9sOiBtdWlGb3JtQ29udHJvbCxcbiAgICBmdWxsV2lkdGgsXG4gICAgaGlkZGVuTGFiZWw6IGZjcy5oaWRkZW5MYWJlbCxcbiAgICBtdWx0aWxpbmUsXG4gICAgc2l6ZTogZmNzLnNpemUsXG4gICAgc3RhcnRBZG9ybm1lbnQsXG4gICAgdHlwZVxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBSb290ID0gc2xvdHMucm9vdCB8fCBjb21wb25lbnRzLlJvb3QgfHwgSW5wdXRCYXNlUm9vdDtcbiAgY29uc3Qgcm9vdFByb3BzID0gc2xvdFByb3BzLnJvb3QgfHwgY29tcG9uZW50c1Byb3BzLnJvb3QgfHwge307XG4gIGNvbnN0IElucHV0ID0gc2xvdHMuaW5wdXQgfHwgY29tcG9uZW50cy5JbnB1dCB8fCBJbnB1dEJhc2VDb21wb25lbnQ7XG4gIGlucHV0UHJvcHMgPSBfZXh0ZW5kcyh7fSwgaW5wdXRQcm9wcywgKF9zbG90UHJvcHMkaW5wdXQgPSBzbG90UHJvcHMuaW5wdXQpICE9IG51bGwgPyBfc2xvdFByb3BzJGlucHV0IDogY29tcG9uZW50c1Byb3BzLmlucHV0KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhSZWFjdC5GcmFnbWVudCwge1xuICAgIGNoaWxkcmVuOiBbIWRpc2FibGVJbmplY3RpbmdHbG9iYWxTdHlsZXMgJiYgaW5wdXRHbG9iYWxTdHlsZXMsIC8qI19fUFVSRV9fKi9fanN4cyhSb290LCBfZXh0ZW5kcyh7fSwgcm9vdFByb3BzLCAhaXNIb3N0Q29tcG9uZW50KFJvb3QpICYmIHtcbiAgICAgIG93bmVyU3RhdGU6IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLCByb290UHJvcHMub3duZXJTdGF0ZSlcbiAgICB9LCB7XG4gICAgICByZWY6IHJlZixcbiAgICAgIG9uQ2xpY2s6IGhhbmRsZUNsaWNrXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIHJvb3RQcm9wcy5jbGFzc05hbWUsIGNsYXNzTmFtZSwgcmVhZE9ubHkgJiYgJ011aUlucHV0QmFzZS1yZWFkT25seScpLFxuICAgICAgY2hpbGRyZW46IFtzdGFydEFkb3JubWVudCwgLyojX19QVVJFX18qL19qc3goRm9ybUNvbnRyb2xDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goSW5wdXQsIF9leHRlbmRzKHtcbiAgICAgICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IGZjcy5lcnJvcixcbiAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogYXJpYURlc2NyaWJlZGJ5LFxuICAgICAgICAgIGF1dG9Db21wbGV0ZTogYXV0b0NvbXBsZXRlLFxuICAgICAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgICAgICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIG9uQW5pbWF0aW9uU3RhcnQ6IGhhbmRsZUF1dG9GaWxsLFxuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxuICAgICAgICAgIHJlYWRPbmx5OiByZWFkT25seSxcbiAgICAgICAgICByZXF1aXJlZDogZmNzLnJlcXVpcmVkLFxuICAgICAgICAgIHJvd3M6IHJvd3MsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIG9uS2V5RG93bjogb25LZXlEb3duLFxuICAgICAgICAgIG9uS2V5VXA6IG9uS2V5VXAsXG4gICAgICAgICAgdHlwZTogdHlwZVxuICAgICAgICB9LCBpbnB1dFByb3BzLCAhaXNIb3N0Q29tcG9uZW50KElucHV0KSAmJiB7XG4gICAgICAgICAgYXM6IElucHV0Q29tcG9uZW50LFxuICAgICAgICAgIG93bmVyU3RhdGU6IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLCBpbnB1dFByb3BzLm93bmVyU3RhdGUpXG4gICAgICAgIH0sIHtcbiAgICAgICAgICByZWY6IGhhbmRsZUlucHV0UmVmLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLmlucHV0LCBpbnB1dFByb3BzLmNsYXNzTmFtZSwgcmVhZE9ubHkgJiYgJ011aUlucHV0QmFzZS1yZWFkT25seScpLFxuICAgICAgICAgIG9uQmx1cjogaGFuZGxlQmx1cixcbiAgICAgICAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgICAgICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzXG4gICAgICAgIH0pKVxuICAgICAgfSksIGVuZEFkb3JubWVudCwgcmVuZGVyU3VmZml4ID8gcmVuZGVyU3VmZml4KF9leHRlbmRzKHt9LCBmY3MsIHtcbiAgICAgICAgc3RhcnRBZG9ybm1lbnRcbiAgICAgIH0pKSA6IG51bGxdXG4gICAgfSkpXVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gSW5wdXRCYXNlLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gICdhcmlhLWRlc2NyaWJlZGJ5JzogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBoZWxwcyB1c2VycyB0byBmaWxsIGZvcm1zIGZhc3RlciwgZXNwZWNpYWxseSBvbiBtb2JpbGUgZGV2aWNlcy5cbiAgICogVGhlIG5hbWUgY2FuIGJlIGNvbmZ1c2luZywgYXMgaXQncyBtb3JlIGxpa2UgYW4gYXV0b2ZpbGwuXG4gICAqIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCBpdCBbZm9sbG93aW5nIHRoZSBzcGVjaWZpY2F0aW9uXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNhdXRvZmlsbCkuXG4gICAqL1xuICBhdXRvQ29tcGxldGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAncHJpbWFyeSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdHNgIHByb3AgaW5zdGVhZC5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgSW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RQcm9wc2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90UHJvcHNgIHByb3AgaW5zdGVhZCwgYXMgYGNvbXBvbmVudHNQcm9wc2Agd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcm9vdDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBHbG9iYWxTdHlsZXMgZm9yIHRoZSBhdXRvLWZpbGwga2V5ZnJhbWVzIHdpbGwgbm90IGJlIGluamVjdGVkL3JlbW92ZWQgb24gbW91bnQvdW5tb3VudC4gTWFrZSBzdXJlIHRvIGluamVjdCB0aGVtIGF0IHRoZSB0b3Agb2YgeW91ciBhcHBsaWNhdGlvbi5cbiAgICogVGhpcyBvcHRpb24gaXMgaW50ZW5kZWQgdG8gaGVscCB3aXRoIGJvb3N0aW5nIHRoZSBpbml0aWFsIHJlbmRlcmluZyBwZXJmb3JtYW5jZSBpZiB5b3UgYXJlIGxvYWRpbmcgYSBiaWcgYW1vdW50IG9mIElucHV0IGNvbXBvbmVudHMgYXQgb25jZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVJbmplY3RpbmdHbG9iYWxTdHlsZXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRW5kIGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgZW5kQWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCBpbmRpY2F0ZSBhbiBlcnJvci5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2lucHV0J1xuICAgKi9cbiAgaW5wdXRDb21wb25lbnQ6IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmLFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdub25lJ2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJ10pLFxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1heFJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtaW5Sb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgW1RleHRhcmVhQXV0b3NpemVdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0YXJlYS1hdXRvc2l6ZS8pIGVsZW1lbnQgaXMgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aWxpbmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBgaW5wdXRgIGlzIGJsdXJyZWQuXG4gICAqXG4gICAqIE5vdGljZSB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCAoZXZlbnQpIG1pZ2h0IGJlIHVuZGVmaW5lZC5cbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBIVE1MSW5wdXRFbGVtZW50Pn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgYGlucHV0YCBkb2Vzbid0IHNhdGlzZnkgaXRzIGNvbnN0cmFpbnRzLlxuICAgKi9cbiAgb25JbnZhbGlkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbktleVVwOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBzaG9ydCBoaW50IGRpc3BsYXllZCBpbiB0aGUgYGlucHV0YCBiZWZvcmUgdGhlIHVzZXIgZW50ZXJzIGEgdmFsdWUuXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEl0IHByZXZlbnRzIHRoZSB1c2VyIGZyb20gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgKiAobm90IGZyb20gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZmllbGQpLlxuICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcmVuZGVyU3VmZml4OiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNQcm9wc2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcm9vdDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogU3RhcnQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBzdGFydEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuIEl0IHNob3VsZCBiZSBbYSB2YWxpZCBIVE1MNSBpbnB1dCB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjRm9ybV8lM0NpbnB1dCUzRV90eXBlcykuXG4gICAqIEBkZWZhdWx0ICd0ZXh0J1xuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LCByZXF1aXJlZCBmb3IgYSBjb250cm9sbGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgSW5wdXRCYXNlOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRCYXNlVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlJbnB1dEJhc2UnLCBzbG90KTtcbn1cbmNvbnN0IGlucHV0QmFzZUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlJbnB1dEJhc2UnLCBbJ3Jvb3QnLCAnZm9ybUNvbnRyb2wnLCAnZm9jdXNlZCcsICdkaXNhYmxlZCcsICdhZG9ybmVkU3RhcnQnLCAnYWRvcm5lZEVuZCcsICdlcnJvcicsICdzaXplU21hbGwnLCAnbXVsdGlsaW5lJywgJ2NvbG9yU2Vjb25kYXJ5JywgJ2Z1bGxXaWR0aCcsICdoaWRkZW5MYWJlbCcsICdyZWFkT25seScsICdpbnB1dCcsICdpbnB1dFNpemVTbWFsbCcsICdpbnB1dE11bHRpbGluZScsICdpbnB1dFR5cGVTZWFyY2gnLCAnaW5wdXRBZG9ybmVkU3RhcnQnLCAnaW5wdXRBZG9ybmVkRW5kJywgJ2lucHV0SGlkZGVuTGFiZWwnXSk7XG5leHBvcnQgZGVmYXVsdCBpbnB1dEJhc2VDbGFzc2VzOyIsIi8vIFN1cHBvcnRzIGRldGVybWluYXRpb24gb2YgaXNDb250cm9sbGVkKCkuXG4vLyBDb250cm9sbGVkIGlucHV0IGFjY2VwdHMgaXRzIGN1cnJlbnQgdmFsdWUgYXMgYSBwcm9wLlxuLy9cbi8vIEBzZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9mb3Jtcy5odG1sI2NvbnRyb2xsZWQtY29tcG9uZW50c1xuLy8gQHBhcmFtIHZhbHVlXG4vLyBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBzdHJpbmcgKGluY2x1ZGluZyAnJykgb3IgbnVtYmVyIChpbmNsdWRpbmcgemVybylcbmV4cG9ydCBmdW5jdGlvbiBoYXNWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAhKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCk7XG59XG5cbi8vIERldGVybWluZSBpZiBmaWVsZCBpcyBlbXB0eSBvciBmaWxsZWQuXG4vLyBSZXNwb25zZSBkZXRlcm1pbmVzIGlmIGxhYmVsIGlzIHByZXNlbnRlZCBhYm92ZSBmaWVsZCBvciBhcyBwbGFjZWhvbGRlci5cbi8vXG4vLyBAcGFyYW0gb2JqXG4vLyBAcGFyYW0gU1NSXG4vLyBAcmV0dXJucyB7Ym9vbGVhbn0gRmFsc2Ugd2hlbiBub3QgcHJlc2VudCBvciBlbXB0eSBzdHJpbmcuXG4vLyAgICAgICAgICAgICAgICAgICAgVHJ1ZSB3aGVuIGFueSBudW1iZXIgb3Igc3RyaW5nIHdpdGggbGVuZ3RoLlxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsbGVkKG9iaiwgU1NSID0gZmFsc2UpIHtcbiAgcmV0dXJuIG9iaiAmJiAoaGFzVmFsdWUob2JqLnZhbHVlKSAmJiBvYmoudmFsdWUgIT09ICcnIHx8IFNTUiAmJiBoYXNWYWx1ZShvYmouZGVmYXVsdFZhbHVlKSAmJiBvYmouZGVmYXVsdFZhbHVlICE9PSAnJyk7XG59XG5cbi8vIERldGVybWluZSBpZiBhbiBJbnB1dCBpcyBhZG9ybmVkIG9uIHN0YXJ0LlxuLy8gSXQncyBjb3JyZXNwb25kaW5nIHRvIHRoZSBsZWZ0IHdpdGggTFRSLlxuLy9cbi8vIEBwYXJhbSBvYmpcbi8vIEByZXR1cm5zIHtib29sZWFufSBGYWxzZSB3aGVuIG5vIGFkb3JubWVudHMuXG4vLyAgICAgICAgICAgICAgICAgICAgVHJ1ZSB3aGVuIGFkb3JuZWQgYXQgdGhlIHN0YXJ0LlxuZXhwb3J0IGZ1bmN0aW9uIGlzQWRvcm5lZFN0YXJ0KG9iaikge1xuICByZXR1cm4gb2JqLnN0YXJ0QWRvcm5tZW50O1xufSIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUxhYmVsVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1MYWJlbCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUxhYmVsQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1MYWJlbCcsIFsncm9vdCcsICdjb2xvclNlY29uZGFyeScsICdmb2N1c2VkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2ZpbGxlZCcsICdyZXF1aXJlZCcsICdhc3RlcmlzayddKTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1MYWJlbENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJmaWxsZWRcIiwgXCJmb2N1c2VkXCIsIFwicmVxdWlyZWRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgZm9ybUxhYmVsQ2xhc3NlcywgeyBnZXRGb3JtTGFiZWxVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vZm9ybUxhYmVsQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjb2xvcixcbiAgICBmb2N1c2VkLFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGZpbGxlZCxcbiAgICByZXF1aXJlZFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBlcnJvciAmJiAnZXJyb3InLCBmaWxsZWQgJiYgJ2ZpbGxlZCcsIGZvY3VzZWQgJiYgJ2ZvY3VzZWQnLCByZXF1aXJlZCAmJiAncmVxdWlyZWQnXSxcbiAgICBhc3RlcmlzazogWydhc3RlcmlzaycsIGVycm9yICYmICdlcnJvciddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUxhYmVsVXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBGb3JtTGFiZWxSb290ID0gc3R5bGVkKCdsYWJlbCcsIHtcbiAgbmFtZTogJ011aUZvcm1MYWJlbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6ICh7XG4gICAgb3duZXJTdGF0ZVxuICB9LCBzdHlsZXMpID0+IHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0eWxlcy5yb290LCBvd25lclN0YXRlLmNvbG9yID09PSAnc2Vjb25kYXJ5JyAmJiBzdHlsZXMuY29sb3JTZWNvbmRhcnksIG93bmVyU3RhdGUuZmlsbGVkICYmIHN0eWxlcy5maWxsZWQpO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5zZWNvbmRhcnlcbn0sIHRoZW1lLnR5cG9ncmFwaHkuYm9keTEsIHtcbiAgbGluZUhlaWdodDogJzEuNDM3NWVtJyxcbiAgcGFkZGluZzogMCxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZm9jdXNlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluXG4gIH0sXG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5kaXNhYmxlZFxuICB9LFxuICBbYCYuJHtmb3JtTGFiZWxDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgfVxufSkpO1xuY29uc3QgQXN0ZXJpc2tDb21wb25lbnQgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlGb3JtTGFiZWwnLFxuICBzbG90OiAnQXN0ZXJpc2snLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5hc3Rlcmlza1xufSkoKHtcbiAgdGhlbWVcbn0pID0+ICh7XG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZXJyb3J9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICB9XG59KSk7XG5jb25zdCBGb3JtTGFiZWwgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGb3JtTGFiZWwoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUZvcm1MYWJlbCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ2xhYmVsJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydjb2xvcicsICdyZXF1aXJlZCcsICdmb2N1c2VkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2ZpbGxlZCddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3I6IGZjcy5jb2xvciB8fCAncHJpbWFyeScsXG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgZXJyb3I6IGZjcy5lcnJvcixcbiAgICBmaWxsZWQ6IGZjcy5maWxsZWQsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgcmVxdWlyZWQ6IGZjcy5yZXF1aXJlZFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKEZvcm1MYWJlbFJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBbY2hpbGRyZW4sIGZjcy5yZXF1aXJlZCAmJiAvKiNfX1BVUkVfXyovX2pzeHMoQXN0ZXJpc2tDb21wb25lbnQsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMuYXN0ZXJpc2ssXG4gICAgICBjaGlsZHJlbjogW1wiXFx1MjAwOVwiLCAnKiddXG4gICAgfSldXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRm9ybUxhYmVsLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2Vycm9yJywgJ2luZm8nLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBkaXNhYmxlZCBzdGF0ZS5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHNob3VsZCB1c2UgZmlsbGVkIGNsYXNzZXMga2V5LlxuICAgKi9cbiAgZmlsbGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGlucHV0IG9mIHRoaXMgbGFiZWwgaXMgZm9jdXNlZCAodXNlZCBieSBgRm9ybUdyb3VwYCBjb21wb25lbnRzKS5cbiAgICovXG4gIGZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgd2lsbCBpbmRpY2F0ZSB0aGF0IHRoZSBgaW5wdXRgIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUxhYmVsOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRMYWJlbFV0aWxpdHlDbGFzc2VzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlJbnB1dExhYmVsJywgc2xvdCk7XG59XG5jb25zdCBpbnB1dExhYmVsQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUlucHV0TGFiZWwnLCBbJ3Jvb3QnLCAnZm9jdXNlZCcsICdkaXNhYmxlZCcsICdlcnJvcicsICdyZXF1aXJlZCcsICdhc3RlcmlzaycsICdmb3JtQ29udHJvbCcsICdzaXplU21hbGwnLCAnc2hyaW5rJywgJ2FuaW1hdGVkJywgJ3N0YW5kYXJkJywgJ2ZpbGxlZCcsICdvdXRsaW5lZCddKTtcbmV4cG9ydCBkZWZhdWx0IGlucHV0TGFiZWxDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImRpc2FibGVBbmltYXRpb25cIiwgXCJtYXJnaW5cIiwgXCJzaHJpbmtcIiwgXCJ2YXJpYW50XCIsIFwiY2xhc3NOYW1lXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IEZvcm1MYWJlbCwgeyBmb3JtTGFiZWxDbGFzc2VzIH0gZnJvbSAnLi4vRm9ybUxhYmVsJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGdldElucHV0TGFiZWxVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vaW5wdXRMYWJlbENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGZvcm1Db250cm9sLFxuICAgIHNpemUsXG4gICAgc2hyaW5rLFxuICAgIGRpc2FibGVBbmltYXRpb24sXG4gICAgdmFyaWFudCxcbiAgICByZXF1aXJlZFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZm9ybUNvbnRyb2wgJiYgJ2Zvcm1Db250cm9sJywgIWRpc2FibGVBbmltYXRpb24gJiYgJ2FuaW1hdGVkJywgc2hyaW5rICYmICdzaHJpbmsnLCBzaXplICYmIHNpemUgIT09ICdub3JtYWwnICYmIGBzaXplJHtjYXBpdGFsaXplKHNpemUpfWAsIHZhcmlhbnRdLFxuICAgIGFzdGVyaXNrOiBbcmVxdWlyZWQgJiYgJ2FzdGVyaXNrJ11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldElucHV0TGFiZWxVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgY2xhc3NlcywgY29tcG9zZWRDbGFzc2VzKTtcbn07XG5jb25zdCBJbnB1dExhYmVsUm9vdCA9IHN0eWxlZChGb3JtTGFiZWwsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aUlucHV0TGFiZWwnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFt7XG4gICAgICBbYCYgLiR7Zm9ybUxhYmVsQ2xhc3Nlcy5hc3Rlcmlza31gXTogc3R5bGVzLmFzdGVyaXNrXG4gICAgfSwgc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuZm9ybUNvbnRyb2wgJiYgc3R5bGVzLmZvcm1Db250cm9sLCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYgc3R5bGVzLnNpemVTbWFsbCwgb3duZXJTdGF0ZS5zaHJpbmsgJiYgc3R5bGVzLnNocmluaywgIW93bmVyU3RhdGUuZGlzYWJsZUFuaW1hdGlvbiAmJiBzdHlsZXMuYW5pbWF0ZWQsIG93bmVyU3RhdGUuZm9jdXNlZCAmJiBzdHlsZXMuZm9jdXNlZCwgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnYmxvY2snLFxuICB0cmFuc2Zvcm1PcmlnaW46ICd0b3AgbGVmdCcsXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgbWF4V2lkdGg6ICcxMDAlJ1xufSwgb3duZXJTdGF0ZS5mb3JtQ29udHJvbCAmJiB7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICBsZWZ0OiAwLFxuICB0b3A6IDAsXG4gIC8vIHNsaWdodCBhbHRlcmF0aW9uIHRvIHNwZWMgc3BhY2luZyB0byBtYXRjaCB2aXN1YWwgc3BlYyByZXN1bHRcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDAsIDIwcHgpIHNjYWxlKDEpJ1xufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgLy8gQ29tcGVuc2F0aW9uIGZvciB0aGUgYElucHV0LmlucHV0U2l6ZVNtYWxsYCBzdHlsZS5cbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDAsIDE3cHgpIHNjYWxlKDEpJ1xufSwgb3duZXJTdGF0ZS5zaHJpbmsgJiYge1xuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMCwgLTEuNXB4KSBzY2FsZSgwLjc1KScsXG4gIHRyYW5zZm9ybU9yaWdpbjogJ3RvcCBsZWZ0JyxcbiAgbWF4V2lkdGg6ICcxMzMlJ1xufSwgIW93bmVyU3RhdGUuZGlzYWJsZUFuaW1hdGlvbiAmJiB7XG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZShbJ2NvbG9yJywgJ3RyYW5zZm9ybScsICdtYXgtd2lkdGgnXSwge1xuICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyLFxuICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXRcbiAgfSlcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2ZpbGxlZCcgJiYgX2V4dGVuZHMoe1xuICAvLyBDaHJvbWUncyBhdXRvZmlsbCBmZWF0dXJlIGdpdmVzIHRoZSBpbnB1dCBmaWVsZCBhIHllbGxvdyBiYWNrZ3JvdW5kLlxuICAvLyBTaW5jZSB0aGUgaW5wdXQgZmllbGQgaXMgYmVoaW5kIHRoZSBsYWJlbCBpbiB0aGUgSFRNTCB0cmVlLFxuICAvLyB0aGUgaW5wdXQgZmllbGQgaXMgZHJhd24gbGFzdCBhbmQgaGlkZXMgdGhlIGxhYmVsIHdpdGggYW4gb3BhcXVlIGJhY2tncm91bmQgY29sb3IuXG4gIC8vIHpJbmRleDogMSB3aWxsIHJhaXNlIHRoZSBsYWJlbCBhYm92ZSBvcGFxdWUgYmFja2dyb3VuZC1jb2xvcnMgb2YgaW5wdXQuXG4gIHpJbmRleDogMSxcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTJweCwgMTZweCkgc2NhbGUoMSknLFxuICBtYXhXaWR0aDogJ2NhbGMoMTAwJSAtIDI0cHgpJ1xufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDEycHgsIDEzcHgpIHNjYWxlKDEpJ1xufSwgb3duZXJTdGF0ZS5zaHJpbmsgJiYgX2V4dGVuZHMoe1xuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIHBvaW50ZXJFdmVudHM6ICdhdXRvJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDEycHgsIDdweCkgc2NhbGUoMC43NSknLFxuICBtYXhXaWR0aDogJ2NhbGMoMTMzJSAtIDI0cHgpJ1xufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDEycHgsIDRweCkgc2NhbGUoMC43NSknXG59KSksIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiBfZXh0ZW5kcyh7XG4gIC8vIHNlZSBjb21tZW50IGFib3ZlIG9uIGZpbGxlZC56SW5kZXhcbiAgekluZGV4OiAxLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxNHB4LCAxNnB4KSBzY2FsZSgxKScsXG4gIG1heFdpZHRoOiAnY2FsYygxMDAlIC0gMjRweCknXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTRweCwgOXB4KSBzY2FsZSgxKSdcbn0sIG93bmVyU3RhdGUuc2hyaW5rICYmIHtcbiAgdXNlclNlbGVjdDogJ25vbmUnLFxuICBwb2ludGVyRXZlbnRzOiAnYXV0bycsXG4gIC8vIFRoZW9yZXRpY2FsbHksIHdlIHNob3VsZCBoYXZlICg4KzUpKjIvMC43NSA9IDM0cHhcbiAgLy8gYnV0IGl0IGZlZWxzIGEgYmV0dGVyIHdoZW4gaXQgYmxlZWRzIGEgYml0IG9uIHRoZSBsZWZ0LCBzbyAzMnB4LlxuICBtYXhXaWR0aDogJ2NhbGMoMTMzJSAtIDMycHgpJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDE0cHgsIC05cHgpIHNjYWxlKDAuNzUpJ1xufSkpKTtcbmNvbnN0IElucHV0TGFiZWwgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBJbnB1dExhYmVsKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIG5hbWU6ICdNdWlJbnB1dExhYmVsJyxcbiAgICBwcm9wczogaW5Qcm9wc1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgZGlzYWJsZUFuaW1hdGlvbiA9IGZhbHNlLFxuICAgICAgc2hyaW5rOiBzaHJpbmtQcm9wLFxuICAgICAgY2xhc3NOYW1lXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgbGV0IHNocmluayA9IHNocmlua1Byb3A7XG4gIGlmICh0eXBlb2Ygc2hyaW5rID09PSAndW5kZWZpbmVkJyAmJiBtdWlGb3JtQ29udHJvbCkge1xuICAgIHNocmluayA9IG11aUZvcm1Db250cm9sLmZpbGxlZCB8fCBtdWlGb3JtQ29udHJvbC5mb2N1c2VkIHx8IG11aUZvcm1Db250cm9sLmFkb3JuZWRTdGFydDtcbiAgfVxuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsnc2l6ZScsICd2YXJpYW50JywgJ3JlcXVpcmVkJywgJ2ZvY3VzZWQnXVxuICB9KTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRpc2FibGVBbmltYXRpb24sXG4gICAgZm9ybUNvbnRyb2w6IG11aUZvcm1Db250cm9sLFxuICAgIHNocmluayxcbiAgICBzaXplOiBmY3Muc2l6ZSxcbiAgICB2YXJpYW50OiBmY3MudmFyaWFudCxcbiAgICByZXF1aXJlZDogZmNzLnJlcXVpcmVkLFxuICAgIGZvY3VzZWQ6IGZjcy5mb2N1c2VkXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dExhYmVsUm9vdCwgX2V4dGVuZHMoe1xuICAgIFwiZGF0YS1zaHJpbmtcIjogc2hyaW5rLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWYsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXNcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBJbnB1dExhYmVsLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2Vycm9yJywgJ2luZm8nLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0cmFuc2l0aW9uIGFuaW1hdGlvbiBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVBbmltYXRpb246IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgZGlzcGxheWVkIGluIGFuIGVycm9yIHN0YXRlLlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBvZiB0aGlzIGxhYmVsIGlzIGZvY3VzZWQuXG4gICAqL1xuICBmb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnXSksXG4gIC8qKlxuICAgKiBpZiBgdHJ1ZWAsIHRoZSBsYWJlbCB3aWxsIGluZGljYXRlIHRoYXQgdGhlIGBpbnB1dGAgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBzaHJ1bmsuXG4gICAqL1xuICBzaHJpbms6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ25vcm1hbCdcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbm9ybWFsJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBJbnB1dExhYmVsOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IExpc3RDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgTGlzdENvbnRleHQuZGlzcGxheU5hbWUgPSAnTGlzdENvbnRleHQnO1xufVxuZXhwb3J0IGRlZmF1bHQgTGlzdENvbnRleHQ7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlMaXN0Jywgc2xvdCk7XG59XG5jb25zdCBsaXN0Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUxpc3QnLCBbJ3Jvb3QnLCAncGFkZGluZycsICdkZW5zZScsICdzdWJoZWFkZXInXSk7XG5leHBvcnQgZGVmYXVsdCBsaXN0Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImRlbnNlXCIsIFwiZGlzYWJsZVBhZGRpbmdcIiwgXCJzdWJoZWFkZXJcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IExpc3RDb250ZXh0IGZyb20gJy4vTGlzdENvbnRleHQnO1xuaW1wb3J0IHsgZ2V0TGlzdFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vbGlzdENsYXNzZXMnO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGRpc2FibGVQYWRkaW5nLFxuICAgIGRlbnNlLFxuICAgIHN1YmhlYWRlclxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgIWRpc2FibGVQYWRkaW5nICYmICdwYWRkaW5nJywgZGVuc2UgJiYgJ2RlbnNlJywgc3ViaGVhZGVyICYmICdzdWJoZWFkZXInXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldExpc3RVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IExpc3RSb290ID0gc3R5bGVkKCd1bCcsIHtcbiAgbmFtZTogJ011aUxpc3QnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgIW93bmVyU3RhdGUuZGlzYWJsZVBhZGRpbmcgJiYgc3R5bGVzLnBhZGRpbmcsIG93bmVyU3RhdGUuZGVuc2UgJiYgc3R5bGVzLmRlbnNlLCBvd25lclN0YXRlLnN1YmhlYWRlciAmJiBzdHlsZXMuc3ViaGVhZGVyXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBsaXN0U3R5bGU6ICdub25lJyxcbiAgbWFyZ2luOiAwLFxuICBwYWRkaW5nOiAwLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xufSwgIW93bmVyU3RhdGUuZGlzYWJsZVBhZGRpbmcgJiYge1xuICBwYWRkaW5nVG9wOiA4LFxuICBwYWRkaW5nQm90dG9tOiA4XG59LCBvd25lclN0YXRlLnN1YmhlYWRlciAmJiB7XG4gIHBhZGRpbmdUb3A6IDBcbn0pKTtcbmNvbnN0IExpc3QgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBMaXN0KGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlMaXN0J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQgPSAndWwnLFxuICAgICAgZGVuc2UgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVQYWRkaW5nID0gZmFsc2UsXG4gICAgICBzdWJoZWFkZXJcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBkZW5zZVxuICB9KSwgW2RlbnNlXSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb21wb25lbnQsXG4gICAgZGVuc2UsXG4gICAgZGlzYWJsZVBhZGRpbmdcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KExpc3RDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbnRleHQsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4cyhMaXN0Um9vdCwgX2V4dGVuZHMoe1xuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgICByZWY6IHJlZixcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2hpbGRyZW46IFtzdWJoZWFkZXIsIGNoaWxkcmVuXVxuICAgIH0pKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTGlzdC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBjb21wYWN0IHZlcnRpY2FsIHBhZGRpbmcgZGVzaWduZWQgZm9yIGtleWJvYXJkIGFuZCBtb3VzZSBpbnB1dCBpcyB1c2VkIGZvclxuICAgKiB0aGUgbGlzdCBhbmQgbGlzdCBpdGVtcy5cbiAgICogVGhlIHByb3AgaXMgYXZhaWxhYmxlIHRvIGRlc2NlbmRhbnQgY29tcG9uZW50cyBhcyB0aGUgYGRlbnNlYCBjb250ZXh0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVuc2U6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB2ZXJ0aWNhbCBwYWRkaW5nIGlzIHJlbW92ZWQgZnJvbSB0aGUgbGlzdC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVQYWRkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBzdWJoZWFkZXIsIG5vcm1hbGx5IGBMaXN0U3ViaGVhZGVyYC5cbiAgICovXG4gIHN1YmhlYWRlcjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBMaXN0OyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFjdGlvbnNcIiwgXCJhdXRvRm9jdXNcIiwgXCJhdXRvRm9jdXNJdGVtXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlXCIsIFwiZGlzYWJsZUxpc3RXcmFwXCIsIFwib25LZXlEb3duXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzRnJhZ21lbnQgfSBmcm9tICdyZWFjdC1pcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IG93bmVyRG9jdW1lbnQgZnJvbSAnLi4vdXRpbHMvb3duZXJEb2N1bWVudCc7XG5pbXBvcnQgTGlzdCBmcm9tICcuLi9MaXN0JztcbmltcG9ydCBnZXRTY3JvbGxiYXJTaXplIGZyb20gJy4uL3V0aWxzL2dldFNjcm9sbGJhclNpemUnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgdXNlRW5oYW5jZWRFZmZlY3QgZnJvbSAnLi4vdXRpbHMvdXNlRW5oYW5jZWRFZmZlY3QnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIG5leHRJdGVtKGxpc3QsIGl0ZW0sIGRpc2FibGVMaXN0V3JhcCkge1xuICBpZiAobGlzdCA9PT0gaXRlbSkge1xuICAgIHJldHVybiBsaXN0LmZpcnN0Q2hpbGQ7XG4gIH1cbiAgaWYgKGl0ZW0gJiYgaXRlbS5uZXh0RWxlbWVudFNpYmxpbmcpIHtcbiAgICByZXR1cm4gaXRlbS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gIH1cbiAgcmV0dXJuIGRpc2FibGVMaXN0V3JhcCA/IG51bGwgOiBsaXN0LmZpcnN0Q2hpbGQ7XG59XG5mdW5jdGlvbiBwcmV2aW91c0l0ZW0obGlzdCwgaXRlbSwgZGlzYWJsZUxpc3RXcmFwKSB7XG4gIGlmIChsaXN0ID09PSBpdGVtKSB7XG4gICAgcmV0dXJuIGRpc2FibGVMaXN0V3JhcCA/IGxpc3QuZmlyc3RDaGlsZCA6IGxpc3QubGFzdENoaWxkO1xuICB9XG4gIGlmIChpdGVtICYmIGl0ZW0ucHJldmlvdXNFbGVtZW50U2libGluZykge1xuICAgIHJldHVybiBpdGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gIH1cbiAgcmV0dXJuIGRpc2FibGVMaXN0V3JhcCA/IG51bGwgOiBsaXN0Lmxhc3RDaGlsZDtcbn1cbmZ1bmN0aW9uIHRleHRDcml0ZXJpYU1hdGNoZXMobmV4dEZvY3VzLCB0ZXh0Q3JpdGVyaWEpIHtcbiAgaWYgKHRleHRDcml0ZXJpYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgbGV0IHRleHQgPSBuZXh0Rm9jdXMuaW5uZXJUZXh0O1xuICBpZiAodGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8ganNkb20gZG9lc24ndCBzdXBwb3J0IGlubmVyVGV4dFxuICAgIHRleHQgPSBuZXh0Rm9jdXMudGV4dENvbnRlbnQ7XG4gIH1cbiAgdGV4dCA9IHRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmICh0ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodGV4dENyaXRlcmlhLnJlcGVhdGluZykge1xuICAgIHJldHVybiB0ZXh0WzBdID09PSB0ZXh0Q3JpdGVyaWEua2V5c1swXTtcbiAgfVxuICByZXR1cm4gdGV4dC5pbmRleE9mKHRleHRDcml0ZXJpYS5rZXlzLmpvaW4oJycpKSA9PT0gMDtcbn1cbmZ1bmN0aW9uIG1vdmVGb2N1cyhsaXN0LCBjdXJyZW50Rm9jdXMsIGRpc2FibGVMaXN0V3JhcCwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgdHJhdmVyc2FsRnVuY3Rpb24sIHRleHRDcml0ZXJpYSkge1xuICBsZXQgd3JhcHBlZE9uY2UgPSBmYWxzZTtcbiAgbGV0IG5leHRGb2N1cyA9IHRyYXZlcnNhbEZ1bmN0aW9uKGxpc3QsIGN1cnJlbnRGb2N1cywgY3VycmVudEZvY3VzID8gZGlzYWJsZUxpc3RXcmFwIDogZmFsc2UpO1xuICB3aGlsZSAobmV4dEZvY3VzKSB7XG4gICAgLy8gUHJldmVudCBpbmZpbml0ZSBsb29wLlxuICAgIGlmIChuZXh0Rm9jdXMgPT09IGxpc3QuZmlyc3RDaGlsZCkge1xuICAgICAgaWYgKHdyYXBwZWRPbmNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHdyYXBwZWRPbmNlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBTYW1lIGxvZ2ljIGFzIHVzZUF1dG9jb21wbGV0ZS5qc1xuICAgIGNvbnN0IG5leHRGb2N1c0Rpc2FibGVkID0gZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSA/IGZhbHNlIDogbmV4dEZvY3VzLmRpc2FibGVkIHx8IG5leHRGb2N1cy5nZXRBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnKSA9PT0gJ3RydWUnO1xuICAgIGlmICghbmV4dEZvY3VzLmhhc0F0dHJpYnV0ZSgndGFiaW5kZXgnKSB8fCAhdGV4dENyaXRlcmlhTWF0Y2hlcyhuZXh0Rm9jdXMsIHRleHRDcml0ZXJpYSkgfHwgbmV4dEZvY3VzRGlzYWJsZWQpIHtcbiAgICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgZWxlbWVudC5cbiAgICAgIG5leHRGb2N1cyA9IHRyYXZlcnNhbEZ1bmN0aW9uKGxpc3QsIG5leHRGb2N1cywgZGlzYWJsZUxpc3RXcmFwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dEZvY3VzLmZvY3VzKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEEgcGVybWFuZW50bHkgZGlzcGxheWVkIG1lbnUgZm9sbG93aW5nIGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvQVJJQS9hcGcvcGF0dGVybnMvbWVudS1idXR0b24vLlxuICogSXQncyBleHBvc2VkIHRvIGhlbHAgY3VzdG9taXphdGlvbiBvZiB0aGUgW2BNZW51YF0oL21hdGVyaWFsLXVpL2FwaS9tZW51LykgY29tcG9uZW50IGlmIHlvdVxuICogdXNlIGl0IHNlcGFyYXRlbHkgeW91IG5lZWQgdG8gbW92ZSBmb2N1cyBpbnRvIHRoZSBjb21wb25lbnQgbWFudWFsbHkuIE9uY2VcbiAqIHRoZSBmb2N1cyBpcyBwbGFjZWQgaW5zaWRlIHRoZSBjb21wb25lbnQgaXQgaXMgZnVsbHkga2V5Ym9hcmQgYWNjZXNzaWJsZS5cbiAqL1xuY29uc3QgTWVudUxpc3QgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBNZW51TGlzdChwcm9wcywgcmVmKSB7XG4gIGNvbnN0IHtcbiAgICAgIC8vIHByaXZhdGVcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcm9wLXR5cGVzXG4gICAgICBhY3Rpb25zLFxuICAgICAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgICBhdXRvRm9jdXNJdGVtID0gZmFsc2UsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRpc2FibGVkSXRlbXNGb2N1c2FibGUgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVMaXN0V3JhcCA9IGZhbHNlLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgdmFyaWFudCA9ICdzZWxlY3RlZE1lbnUnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGxpc3RSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IHRleHRDcml0ZXJpYVJlZiA9IFJlYWN0LnVzZVJlZih7XG4gICAga2V5czogW10sXG4gICAgcmVwZWF0aW5nOiB0cnVlLFxuICAgIHByZXZpb3VzS2V5TWF0Y2hlZDogdHJ1ZSxcbiAgICBsYXN0VGltZTogbnVsbFxuICB9KTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChhdXRvRm9jdXMpIHtcbiAgICAgIGxpc3RSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgfSwgW2F1dG9Gb2N1c10pO1xuICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKGFjdGlvbnMsICgpID0+ICh7XG4gICAgYWRqdXN0U3R5bGVGb3JTY3JvbGxiYXI6IChjb250YWluZXJFbGVtZW50LCB0aGVtZSkgPT4ge1xuICAgICAgLy8gTGV0J3MgaWdub3JlIHRoYXQgcGllY2Ugb2YgbG9naWMgaWYgdXNlcnMgYXJlIGFscmVhZHkgb3ZlcnJpZGluZyB0aGUgd2lkdGhcbiAgICAgIC8vIG9mIHRoZSBtZW51LlxuICAgICAgY29uc3Qgbm9FeHBsaWNpdFdpZHRoID0gIWxpc3RSZWYuY3VycmVudC5zdHlsZS53aWR0aDtcbiAgICAgIGlmIChjb250YWluZXJFbGVtZW50LmNsaWVudEhlaWdodCA8IGxpc3RSZWYuY3VycmVudC5jbGllbnRIZWlnaHQgJiYgbm9FeHBsaWNpdFdpZHRoKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbGJhclNpemUgPSBgJHtnZXRTY3JvbGxiYXJTaXplKG93bmVyRG9jdW1lbnQoY29udGFpbmVyRWxlbWVudCkpfXB4YDtcbiAgICAgICAgbGlzdFJlZi5jdXJyZW50LnN0eWxlW3RoZW1lLmRpcmVjdGlvbiA9PT0gJ3J0bCcgPyAncGFkZGluZ0xlZnQnIDogJ3BhZGRpbmdSaWdodCddID0gc2Nyb2xsYmFyU2l6ZTtcbiAgICAgICAgbGlzdFJlZi5jdXJyZW50LnN0eWxlLndpZHRoID0gYGNhbGMoMTAwJSArICR7c2Nyb2xsYmFyU2l6ZX0pYDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0UmVmLmN1cnJlbnQ7XG4gICAgfVxuICB9KSwgW10pO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gZXZlbnQgPT4ge1xuICAgIGNvbnN0IGxpc3QgPSBsaXN0UmVmLmN1cnJlbnQ7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtFbGVtZW50fSAtIHdpbGwgYWx3YXlzIGJlIGRlZmluZWQgc2luY2Ugd2UgYXJlIGluIGEga2V5ZG93biBoYW5kbGVyXG4gICAgICogYXR0YWNoZWQgdG8gYW4gZWxlbWVudC4gQSBrZXlkb3duIGV2ZW50IGlzIGVpdGhlciBkaXNwYXRjaGVkIHRvIHRoZSBhY3RpdmVFbGVtZW50XG4gICAgICogb3IgZG9jdW1lbnQuYm9keSBvciBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuIE9ubHkgdGhlIGZpcnN0IGNhc2Ugd2lsbFxuICAgICAqIHRyaWdnZXIgdGhpcyBzcGVjaWZpYyBoYW5kbGVyLlxuICAgICAqL1xuICAgIGNvbnN0IGN1cnJlbnRGb2N1cyA9IG93bmVyRG9jdW1lbnQobGlzdCkuYWN0aXZlRWxlbWVudDtcbiAgICBpZiAoa2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgLy8gUHJldmVudCBzY3JvbGwgb2YgdGhlIHBhZ2VcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBtb3ZlRm9jdXMobGlzdCwgY3VycmVudEZvY3VzLCBkaXNhYmxlTGlzdFdyYXAsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIG5leHRJdGVtKTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUZvY3VzKGxpc3QsIGN1cnJlbnRGb2N1cywgZGlzYWJsZUxpc3RXcmFwLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCBwcmV2aW91c0l0ZW0pO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnSG9tZScpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBtb3ZlRm9jdXMobGlzdCwgbnVsbCwgZGlzYWJsZUxpc3RXcmFwLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCBuZXh0SXRlbSk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdFbmQnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUZvY3VzKGxpc3QsIG51bGwsIGRpc2FibGVMaXN0V3JhcCwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgcHJldmlvdXNJdGVtKTtcbiAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGNyaXRlcmlhID0gdGV4dENyaXRlcmlhUmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBsb3dlcktleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgY3VyclRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgIGlmIChjcml0ZXJpYS5rZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gUmVzZXRcbiAgICAgICAgaWYgKGN1cnJUaW1lIC0gY3JpdGVyaWEubGFzdFRpbWUgPiA1MDApIHtcbiAgICAgICAgICBjcml0ZXJpYS5rZXlzID0gW107XG4gICAgICAgICAgY3JpdGVyaWEucmVwZWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICBjcml0ZXJpYS5wcmV2aW91c0tleU1hdGNoZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGNyaXRlcmlhLnJlcGVhdGluZyAmJiBsb3dlcktleSAhPT0gY3JpdGVyaWEua2V5c1swXSkge1xuICAgICAgICAgIGNyaXRlcmlhLnJlcGVhdGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjcml0ZXJpYS5sYXN0VGltZSA9IGN1cnJUaW1lO1xuICAgICAgY3JpdGVyaWEua2V5cy5wdXNoKGxvd2VyS2V5KTtcbiAgICAgIGNvbnN0IGtlZXBGb2N1c09uQ3VycmVudCA9IGN1cnJlbnRGb2N1cyAmJiAhY3JpdGVyaWEucmVwZWF0aW5nICYmIHRleHRDcml0ZXJpYU1hdGNoZXMoY3VycmVudEZvY3VzLCBjcml0ZXJpYSk7XG4gICAgICBpZiAoY3JpdGVyaWEucHJldmlvdXNLZXlNYXRjaGVkICYmIChrZWVwRm9jdXNPbkN1cnJlbnQgfHwgbW92ZUZvY3VzKGxpc3QsIGN1cnJlbnRGb2N1cywgZmFsc2UsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIG5leHRJdGVtLCBjcml0ZXJpYSkpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjcml0ZXJpYS5wcmV2aW91c0tleU1hdGNoZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9uS2V5RG93bikge1xuICAgICAgb25LZXlEb3duKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYobGlzdFJlZiwgcmVmKTtcblxuICAvKipcbiAgICogdGhlIGluZGV4IG9mIHRoZSBpdGVtIHNob3VsZCByZWNlaXZlIGZvY3VzXG4gICAqIGluIGEgYHZhcmlhbnQ9XCJzZWxlY3RlZE1lbnVcImAgaXQncyB0aGUgZmlyc3QgYHNlbGVjdGVkYCBpdGVtXG4gICAqIG90aGVyd2lzZSBpdCdzIHRoZSB2ZXJ5IGZpcnN0IGl0ZW0uXG4gICAqL1xuICBsZXQgYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gIC8vIHNpbmNlIHdlIGluamVjdCBmb2N1cyByZWxhdGVkIHByb3BzIGludG8gY2hpbGRyZW4gd2UgaGF2ZSB0byBkbyBhIGxvb2thaGVhZFxuICAvLyB0byBjaGVjayBpZiB0aGVyZSBpcyBhIGBzZWxlY3RlZGAgaXRlbS4gV2UncmUgbG9va2luZyBmb3IgdGhlIGxhc3QgYHNlbGVjdGVkYFxuICAvLyBpdGVtIGFuZCB1c2UgdGhlIGZpcnN0IHZhbGlkIGl0ZW0gYXMgYSBmYWxsYmFja1xuICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKGNoaWxkcmVuLCAoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgaWYgKCEgLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgaWYgKGFjdGl2ZUl0ZW1JbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4ICs9IDE7XG4gICAgICAgIGlmIChhY3RpdmVJdGVtSW5kZXggPj0gY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdGhlcmUgYXJlIG5vIGZvY3VzYWJsZSBpdGVtcyB3aXRoaW4gdGhlIGxpc3QuXG4gICAgICAgICAgYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpc0ZyYWdtZW50KGNoaWxkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtcIk1VSTogVGhlIE1lbnUgY29tcG9uZW50IGRvZXNuJ3QgYWNjZXB0IGEgRnJhZ21lbnQgYXMgYSBjaGlsZC5cIiwgJ0NvbnNpZGVyIHByb3ZpZGluZyBhbiBhcnJheSBpbnN0ZWFkLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFjaGlsZC5wcm9wcy5kaXNhYmxlZCkge1xuICAgICAgaWYgKHZhcmlhbnQgPT09ICdzZWxlY3RlZE1lbnUnICYmIGNoaWxkLnByb3BzLnNlbGVjdGVkKSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IGluZGV4O1xuICAgICAgfSBlbHNlIGlmIChhY3RpdmVJdGVtSW5kZXggPT09IC0xKSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWN0aXZlSXRlbUluZGV4ID09PSBpbmRleCAmJiAoY2hpbGQucHJvcHMuZGlzYWJsZWQgfHwgY2hpbGQucHJvcHMubXVpU2tpcExpc3RIaWdobGlnaHQgfHwgY2hpbGQudHlwZS5tdWlTa2lwTGlzdEhpZ2hsaWdodCkpIHtcbiAgICAgIGFjdGl2ZUl0ZW1JbmRleCArPSAxO1xuICAgICAgaWYgKGFjdGl2ZUl0ZW1JbmRleCA+PSBjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgLy8gdGhlcmUgYXJlIG5vIGZvY3VzYWJsZSBpdGVtcyB3aXRoaW4gdGhlIGxpc3QuXG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGl0ZW1zID0gUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4ID09PSBhY3RpdmVJdGVtSW5kZXgpIHtcbiAgICAgIGNvbnN0IG5ld0NoaWxkUHJvcHMgPSB7fTtcbiAgICAgIGlmIChhdXRvRm9jdXNJdGVtKSB7XG4gICAgICAgIG5ld0NoaWxkUHJvcHMuYXV0b0ZvY3VzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGlsZC5wcm9wcy50YWJJbmRleCA9PT0gdW5kZWZpbmVkICYmIHZhcmlhbnQgPT09ICdzZWxlY3RlZE1lbnUnKSB7XG4gICAgICAgIG5ld0NoaWxkUHJvcHMudGFiSW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIG5ld0NoaWxkUHJvcHMpO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTGlzdCwgX2V4dGVuZHMoe1xuICAgIHJvbGU6IFwibWVudVwiLFxuICAgIHJlZjogaGFuZGxlUmVmLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICB0YWJJbmRleDogYXV0b0ZvY3VzID8gMCA6IC0xXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IGl0ZW1zXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTWVudUxpc3QucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogSWYgYHRydWVgLCB3aWxsIGZvY3VzIHRoZSBgW3JvbGU9XCJtZW51XCJdYCBjb250YWluZXIgYW5kIG1vdmUgaW50byB0YWIgb3JkZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB3aWxsIGZvY3VzIHRoZSBmaXJzdCBtZW51aXRlbSBpZiBgdmFyaWFudD1cIm1lbnVcImAgb3Igc2VsZWN0ZWQgaXRlbVxuICAgKiBpZiBgdmFyaWFudD1cInNlbGVjdGVkTWVudVwiYC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9Gb2N1c0l0ZW06IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTWVudUxpc3QgY29udGVudHMsIG5vcm1hbGx5IGBNZW51SXRlbWBzLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB3aWxsIGFsbG93IGZvY3VzIG9uIGRpc2FibGVkIGl0ZW1zLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtZW51IGl0ZW1zIHdpbGwgbm90IHdyYXAgZm9jdXMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlTGlzdFdyYXA6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS4gVXNlIGBtZW51YCB0byBwcmV2ZW50IHNlbGVjdGVkIGl0ZW1zIGZyb20gaW1wYWN0aW5nIHRoZSBpbml0aWFsIGZvY3VzXG4gICAqIGFuZCB0aGUgdmVydGljYWwgYWxpZ25tZW50IHJlbGF0aXZlIHRvIHRoZSBhbmNob3IgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgJ3NlbGVjdGVkTWVudSdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ21lbnUnLCAnc2VsZWN0ZWRNZW51J10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTWVudUxpc3Q7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWRkRW5kTGlzdGVuZXJcIiwgXCJhcHBlYXJcIiwgXCJjaGlsZHJlblwiLCBcImVhc2luZ1wiLCBcImluXCIsIFwib25FbnRlclwiLCBcIm9uRW50ZXJlZFwiLCBcIm9uRW50ZXJpbmdcIiwgXCJvbkV4aXRcIiwgXCJvbkV4aXRlZFwiLCBcIm9uRXhpdGluZ1wiLCBcInN0eWxlXCIsIFwidGltZW91dFwiLCBcIlRyYW5zaXRpb25Db21wb25lbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgZWxlbWVudEFjY2VwdGluZ1JlZiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZSc7XG5pbXBvcnQgeyBnZXRUcmFuc2l0aW9uUHJvcHMsIHJlZmxvdyB9IGZyb20gJy4uL3RyYW5zaXRpb25zL3V0aWxzJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIGdldFNjYWxlKHZhbHVlKSB7XG4gIHJldHVybiBgc2NhbGUoJHt2YWx1ZX0sICR7dmFsdWUgKiogMn0pYDtcbn1cbmNvbnN0IHN0eWxlcyA9IHtcbiAgZW50ZXJpbmc6IHtcbiAgICBvcGFjaXR5OiAxLFxuICAgIHRyYW5zZm9ybTogZ2V0U2NhbGUoMSlcbiAgfSxcbiAgZW50ZXJlZDoge1xuICAgIG9wYWNpdHk6IDEsXG4gICAgdHJhbnNmb3JtOiAnbm9uZSdcbiAgfVxufTtcblxuLypcbiBUT0RPIHY2OiByZW1vdmVcbiBDb25kaXRpb25hbGx5IGFwcGx5IGEgd29ya2Fyb3VuZCBmb3IgdGhlIENTUyB0cmFuc2l0aW9uIGJ1ZyBpbiBTYWZhcmkgMTUuNCAvIFdlYktpdCBicm93c2Vycy5cbiAqL1xuY29uc3QgaXNXZWJLaXQxNTQgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSooc2FmYXJpfG1vYmlsZSkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmIC8ob3MgfHZlcnNpb25cXC8pMTUoLnxfKTQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG4vKipcbiAqIFRoZSBHcm93IHRyYW5zaXRpb24gaXMgdXNlZCBieSB0aGUgW1Rvb2x0aXBdKC9tYXRlcmlhbC11aS9yZWFjdC10b29sdGlwLykgYW5kXG4gKiBbUG9wb3Zlcl0oL21hdGVyaWFsLXVpL3JlYWN0LXBvcG92ZXIvKSBjb21wb25lbnRzLlxuICogSXQgdXNlcyBbcmVhY3QtdHJhbnNpdGlvbi1ncm91cF0oaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cCkgaW50ZXJuYWxseS5cbiAqL1xuY29uc3QgR3JvdyA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEdyb3cocHJvcHMsIHJlZikge1xuICBjb25zdCB7XG4gICAgICBhZGRFbmRMaXN0ZW5lcixcbiAgICAgIGFwcGVhciA9IHRydWUsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGVhc2luZyxcbiAgICAgIGluOiBpblByb3AsXG4gICAgICBvbkVudGVyLFxuICAgICAgb25FbnRlcmVkLFxuICAgICAgb25FbnRlcmluZyxcbiAgICAgIG9uRXhpdCxcbiAgICAgIG9uRXhpdGVkLFxuICAgICAgb25FeGl0aW5nLFxuICAgICAgc3R5bGUsXG4gICAgICB0aW1lb3V0ID0gJ2F1dG8nLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICAgIFRyYW5zaXRpb25Db21wb25lbnQgPSBUcmFuc2l0aW9uXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHRpbWVyID0gUmVhY3QudXNlUmVmKCk7XG4gIGNvbnN0IGF1dG9UaW1lb3V0ID0gUmVhY3QudXNlUmVmKCk7XG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcbiAgY29uc3Qgbm9kZVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihub2RlUmVmLCBjaGlsZHJlbi5yZWYsIHJlZik7XG4gIGNvbnN0IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sgPSBjYWxsYmFjayA9PiBtYXliZUlzQXBwZWFyaW5nID0+IHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBub2RlUmVmLmN1cnJlbnQ7XG5cbiAgICAgIC8vIG9uRW50ZXJYeHggYW5kIG9uRXhpdFh4eCBjYWxsYmFja3MgaGF2ZSBhIGRpZmZlcmVudCBhcmd1bWVudHMubGVuZ3RoIHZhbHVlLlxuICAgICAgaWYgKG1heWJlSXNBcHBlYXJpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYWxsYmFjayhub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKG5vZGUsIG1heWJlSXNBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlRW50ZXJpbmcgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRW50ZXJpbmcpO1xuICBjb25zdCBoYW5kbGVFbnRlciA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2soKG5vZGUsIGlzQXBwZWFyaW5nKSA9PiB7XG4gICAgcmVmbG93KG5vZGUpOyAvLyBTbyB0aGUgYW5pbWF0aW9uIGFsd2F5cyBzdGFydCBmcm9tIHRoZSBzdGFydC5cblxuICAgIGNvbnN0IHtcbiAgICAgIGR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgICBkZWxheSxcbiAgICAgIGVhc2luZzogdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uXG4gICAgfSA9IGdldFRyYW5zaXRpb25Qcm9wcyh7XG4gICAgICBzdHlsZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBlYXNpbmdcbiAgICB9LCB7XG4gICAgICBtb2RlOiAnZW50ZXInXG4gICAgfSk7XG4gICAgbGV0IGR1cmF0aW9uO1xuICAgIGlmICh0aW1lb3V0ID09PSAnYXV0bycpIHtcbiAgICAgIGR1cmF0aW9uID0gdGhlbWUudHJhbnNpdGlvbnMuZ2V0QXV0b0hlaWdodER1cmF0aW9uKG5vZGUuY2xpZW50SGVpZ2h0KTtcbiAgICAgIGF1dG9UaW1lb3V0LmN1cnJlbnQgPSBkdXJhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZHVyYXRpb24gPSB0cmFuc2l0aW9uRHVyYXRpb247XG4gICAgfVxuICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbiA9IFt0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICAgIGRlbGF5XG4gICAgfSksIHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgICAgZHVyYXRpb246IGlzV2ViS2l0MTU0ID8gZHVyYXRpb24gOiBkdXJhdGlvbiAqIDAuNjY2LFxuICAgICAgZGVsYXksXG4gICAgICBlYXNpbmc6IHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvblxuICAgIH0pXS5qb2luKCcsJyk7XG4gICAgaWYgKG9uRW50ZXIpIHtcbiAgICAgIG9uRW50ZXIobm9kZSwgaXNBcHBlYXJpbmcpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUVudGVyZWQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRW50ZXJlZCk7XG4gIGNvbnN0IGhhbmRsZUV4aXRpbmcgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRXhpdGluZyk7XG4gIGNvbnN0IGhhbmRsZUV4aXQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG5vZGUgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgICBkZWxheSxcbiAgICAgIGVhc2luZzogdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uXG4gICAgfSA9IGdldFRyYW5zaXRpb25Qcm9wcyh7XG4gICAgICBzdHlsZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBlYXNpbmdcbiAgICB9LCB7XG4gICAgICBtb2RlOiAnZXhpdCdcbiAgICB9KTtcbiAgICBsZXQgZHVyYXRpb247XG4gICAgaWYgKHRpbWVvdXQgPT09ICdhdXRvJykge1xuICAgICAgZHVyYXRpb24gPSB0aGVtZS50cmFuc2l0aW9ucy5nZXRBdXRvSGVpZ2h0RHVyYXRpb24obm9kZS5jbGllbnRIZWlnaHQpO1xuICAgICAgYXV0b1RpbWVvdXQuY3VycmVudCA9IGR1cmF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICBkdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvbjtcbiAgICB9XG4gICAgbm9kZS5zdHlsZS50cmFuc2l0aW9uID0gW3RoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHtcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgZGVsYXlcbiAgICB9KSwgdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nLCB7XG4gICAgICBkdXJhdGlvbjogaXNXZWJLaXQxNTQgPyBkdXJhdGlvbiA6IGR1cmF0aW9uICogMC42NjYsXG4gICAgICBkZWxheTogaXNXZWJLaXQxNTQgPyBkZWxheSA6IGRlbGF5IHx8IGR1cmF0aW9uICogMC4zMzMsXG4gICAgICBlYXNpbmc6IHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvblxuICAgIH0pXS5qb2luKCcsJyk7XG4gICAgbm9kZS5zdHlsZS5vcGFjaXR5ID0gMDtcbiAgICBub2RlLnN0eWxlLnRyYW5zZm9ybSA9IGdldFNjYWxlKDAuNzUpO1xuICAgIGlmIChvbkV4aXQpIHtcbiAgICAgIG9uRXhpdChub2RlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVFeGl0ZWQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRXhpdGVkKTtcbiAgY29uc3QgaGFuZGxlQWRkRW5kTGlzdGVuZXIgPSBuZXh0ID0+IHtcbiAgICBpZiAodGltZW91dCA9PT0gJ2F1dG8nKSB7XG4gICAgICB0aW1lci5jdXJyZW50ID0gc2V0VGltZW91dChuZXh0LCBhdXRvVGltZW91dC5jdXJyZW50IHx8IDApO1xuICAgIH1cbiAgICBpZiAoYWRkRW5kTGlzdGVuZXIpIHtcbiAgICAgIC8vIE9sZCBjYWxsIHNpZ25hdHVyZSBiZWZvcmUgYHJlYWN0LXRyYW5zaXRpb24tZ3JvdXBgIGltcGxlbWVudGVkIGBub2RlUmVmYFxuICAgICAgYWRkRW5kTGlzdGVuZXIobm9kZVJlZi5jdXJyZW50LCBuZXh0KTtcbiAgICB9XG4gIH07XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lci5jdXJyZW50KTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUcmFuc2l0aW9uQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgYXBwZWFyOiBhcHBlYXIsXG4gICAgaW46IGluUHJvcCxcbiAgICBub2RlUmVmOiBub2RlUmVmLFxuICAgIG9uRW50ZXI6IGhhbmRsZUVudGVyLFxuICAgIG9uRW50ZXJlZDogaGFuZGxlRW50ZXJlZCxcbiAgICBvbkVudGVyaW5nOiBoYW5kbGVFbnRlcmluZyxcbiAgICBvbkV4aXQ6IGhhbmRsZUV4aXQsXG4gICAgb25FeGl0ZWQ6IGhhbmRsZUV4aXRlZCxcbiAgICBvbkV4aXRpbmc6IGhhbmRsZUV4aXRpbmcsXG4gICAgYWRkRW5kTGlzdGVuZXI6IGhhbmRsZUFkZEVuZExpc3RlbmVyLFxuICAgIHRpbWVvdXQ6IHRpbWVvdXQgPT09ICdhdXRvJyA/IG51bGwgOiB0aW1lb3V0XG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IChzdGF0ZSwgY2hpbGRQcm9wcykgPT4ge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIF9leHRlbmRzKHtcbiAgICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgIHRyYW5zZm9ybTogZ2V0U2NhbGUoMC43NSksXG4gICAgICAgICAgdmlzaWJpbGl0eTogc3RhdGUgPT09ICdleGl0ZWQnICYmICFpblByb3AgPyAnaGlkZGVuJyA6IHVuZGVmaW5lZFxuICAgICAgICB9LCBzdHlsZXNbc3RhdGVdLCBzdHlsZSwgY2hpbGRyZW4ucHJvcHMuc3R5bGUpLFxuICAgICAgICByZWY6IGhhbmRsZVJlZlxuICAgICAgfSwgY2hpbGRQcm9wcykpO1xuICAgIH1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBHcm93LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIEFkZCBhIGN1c3RvbSB0cmFuc2l0aW9uIGVuZCB0cmlnZ2VyLiBDYWxsZWQgd2l0aCB0aGUgdHJhbnNpdGlvbmluZyBET01cbiAgICogbm9kZSBhbmQgYSBkb25lIGNhbGxiYWNrLiBBbGxvd3MgZm9yIG1vcmUgZmluZSBncmFpbmVkIHRyYW5zaXRpb24gZW5kXG4gICAqIGxvZ2ljLiBOb3RlOiBUaW1lb3V0cyBhcmUgc3RpbGwgdXNlZCBhcyBhIGZhbGxiYWNrIGlmIHByb3ZpZGVkLlxuICAgKi9cbiAgYWRkRW5kTGlzdGVuZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogUGVyZm9ybSB0aGUgZW50ZXIgdHJhbnNpdGlvbiB3aGVuIGl0IGZpcnN0IG1vdW50cyBpZiBgaW5gIGlzIGFsc28gYHRydWVgLlxuICAgKiBTZXQgdGhpcyB0byBgZmFsc2VgIHRvIGRpc2FibGUgdGhpcyBiZWhhdmlvci5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEEgc2luZ2xlIGNoaWxkIGNvbnRlbnQgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBlbGVtZW50QWNjZXB0aW5nUmVmLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBUaGUgdHJhbnNpdGlvbiB0aW1pbmcgZnVuY3Rpb24uXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSBlYXNpbmcgb3IgYSBvYmplY3QgY29udGFpbmluZyBlbnRlciBhbmQgZXhpdCB2YWx1ZXMuXG4gICAqL1xuICBlYXNpbmc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgZW50ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZXhpdDogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IHdpbGwgdHJhbnNpdGlvbiBpbi5cbiAgICovXG4gIGluOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXJpbmc6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0OiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdGluZzogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBmb3IgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIHRpbWVvdXQgZm9yIGFsbCB0cmFuc2l0aW9ucywgb3IgaW5kaXZpZHVhbGx5IHdpdGggYW4gb2JqZWN0LlxuICAgKlxuICAgKiBTZXQgdG8gJ2F1dG8nIHRvIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlIHRyYW5zaXRpb24gdGltZSBiYXNlZCBvbiBoZWlnaHQuXG4gICAqIEBkZWZhdWx0ICdhdXRvJ1xuICAgKi9cbiAgdGltZW91dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcHBlYXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW50ZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZXhpdDogUHJvcFR5cGVzLm51bWJlclxuICB9KV0pXG59IDogdm9pZCAwO1xuR3Jvdy5tdWlTdXBwb3J0QXV0byA9IHRydWU7XG5leHBvcnQgZGVmYXVsdCBHcm93OyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kYWxVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aU1vZGFsJywgc2xvdCk7XG59XG5jb25zdCBtb2RhbENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlNb2RhbCcsIFsncm9vdCcsICdoaWRkZW4nLCAnYmFja2Ryb3AnXSk7XG5leHBvcnQgZGVmYXVsdCBtb2RhbENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiQmFja2Ryb3BDb21wb25lbnRcIiwgXCJCYWNrZHJvcFByb3BzXCIsIFwiY2xhc3Nlc1wiLCBcImNsYXNzTmFtZVwiLCBcImNsb3NlQWZ0ZXJUcmFuc2l0aW9uXCIsIFwiY2hpbGRyZW5cIiwgXCJjb250YWluZXJcIiwgXCJjb21wb25lbnRcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZGlzYWJsZUF1dG9Gb2N1c1wiLCBcImRpc2FibGVFbmZvcmNlRm9jdXNcIiwgXCJkaXNhYmxlRXNjYXBlS2V5RG93blwiLCBcImRpc2FibGVQb3J0YWxcIiwgXCJkaXNhYmxlUmVzdG9yZUZvY3VzXCIsIFwiZGlzYWJsZVNjcm9sbExvY2tcIiwgXCJoaWRlQmFja2Ryb3BcIiwgXCJrZWVwTW91bnRlZFwiLCBcIm9uQmFja2Ryb3BDbGlja1wiLCBcIm9uQ2xvc2VcIiwgXCJvblRyYW5zaXRpb25FbnRlclwiLCBcIm9uVHJhbnNpdGlvbkV4aXRlZFwiLCBcIm9wZW5cIiwgXCJzbG90UHJvcHNcIiwgXCJzbG90c1wiLCBcInRoZW1lXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgZWxlbWVudEFjY2VwdGluZ1JlZiwgSFRNTEVsZW1lbnRUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyB1c2VTbG90UHJvcHMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHsgdW5zdGFibGVfdXNlTW9kYWwgYXMgdXNlTW9kYWwgfSBmcm9tICdAbXVpL2Jhc2UvdW5zdGFibGVfdXNlTW9kYWwnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IEZvY3VzVHJhcCBmcm9tICcuLi9VbnN0YWJsZV9UcmFwRm9jdXMnO1xuaW1wb3J0IFBvcnRhbCBmcm9tICcuLi9Qb3J0YWwnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBCYWNrZHJvcCBmcm9tICcuLi9CYWNrZHJvcCc7XG5pbXBvcnQgeyBnZXRNb2RhbFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vbW9kYWxDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgb3BlbixcbiAgICBleGl0ZWQsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgIW9wZW4gJiYgZXhpdGVkICYmICdoaWRkZW4nXSxcbiAgICBiYWNrZHJvcDogWydiYWNrZHJvcCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TW9kYWxVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IE1vZGFsUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpTW9kYWwnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgIW93bmVyU3RhdGUub3BlbiAmJiBvd25lclN0YXRlLmV4aXRlZCAmJiBzdHlsZXMuaGlkZGVuXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgcG9zaXRpb246ICdmaXhlZCcsXG4gIHpJbmRleDogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnpJbmRleC5tb2RhbCxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgdG9wOiAwLFxuICBsZWZ0OiAwXG59LCAhb3duZXJTdGF0ZS5vcGVuICYmIG93bmVyU3RhdGUuZXhpdGVkICYmIHtcbiAgdmlzaWJpbGl0eTogJ2hpZGRlbidcbn0pKTtcbmNvbnN0IE1vZGFsQmFja2Ryb3AgPSBzdHlsZWQoQmFja2Ryb3AsIHtcbiAgbmFtZTogJ011aU1vZGFsJyxcbiAgc2xvdDogJ0JhY2tkcm9wJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgcmV0dXJuIHN0eWxlcy5iYWNrZHJvcDtcbiAgfVxufSkoe1xuICB6SW5kZXg6IC0xXG59KTtcblxuLyoqXG4gKiBNb2RhbCBpcyBhIGxvd2VyLWxldmVsIGNvbnN0cnVjdCB0aGF0IGlzIGxldmVyYWdlZCBieSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6XG4gKlxuICogLSBbRGlhbG9nXSgvbWF0ZXJpYWwtdWkvYXBpL2RpYWxvZy8pXG4gKiAtIFtEcmF3ZXJdKC9tYXRlcmlhbC11aS9hcGkvZHJhd2VyLylcbiAqIC0gW01lbnVdKC9tYXRlcmlhbC11aS9hcGkvbWVudS8pXG4gKiAtIFtQb3BvdmVyXSgvbWF0ZXJpYWwtdWkvYXBpL3BvcG92ZXIvKVxuICpcbiAqIElmIHlvdSBhcmUgY3JlYXRpbmcgYSBtb2RhbCBkaWFsb2csIHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGUgW0RpYWxvZ10oL21hdGVyaWFsLXVpL2FwaS9kaWFsb2cvKSBjb21wb25lbnRcbiAqIHJhdGhlciB0aGFuIGRpcmVjdGx5IHVzaW5nIE1vZGFsLlxuICpcbiAqIFRoaXMgY29tcG9uZW50IHNoYXJlcyBtYW55IGNvbmNlcHRzIHdpdGggW3JlYWN0LW92ZXJsYXlzXShodHRwczovL3JlYWN0LWJvb3RzdHJhcC5naXRodWIuaW8vcmVhY3Qtb3ZlcmxheXMvI21vZGFscykuXG4gKi9cbmNvbnN0IE1vZGFsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTW9kYWwoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfcmVmLCBfc2xvdHMkcm9vdCwgX3JlZjIsIF9zbG90cyRiYWNrZHJvcCwgX3Nsb3RQcm9wcyRyb290LCBfc2xvdFByb3BzJGJhY2tkcm9wO1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIG5hbWU6ICdNdWlNb2RhbCcsXG4gICAgcHJvcHM6IGluUHJvcHNcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIEJhY2tkcm9wQ29tcG9uZW50ID0gTW9kYWxCYWNrZHJvcCxcbiAgICAgIEJhY2tkcm9wUHJvcHMsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjbG9zZUFmdGVyVHJhbnNpdGlvbiA9IGZhbHNlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjb250YWluZXIsXG4gICAgICBjb21wb25lbnQsXG4gICAgICBjb21wb25lbnRzID0ge30sXG4gICAgICBjb21wb25lbnRzUHJvcHMgPSB7fSxcbiAgICAgIGRpc2FibGVBdXRvRm9jdXMgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVFbmZvcmNlRm9jdXMgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVFc2NhcGVLZXlEb3duID0gZmFsc2UsXG4gICAgICBkaXNhYmxlUG9ydGFsID0gZmFsc2UsXG4gICAgICBkaXNhYmxlUmVzdG9yZUZvY3VzID0gZmFsc2UsXG4gICAgICBkaXNhYmxlU2Nyb2xsTG9jayA9IGZhbHNlLFxuICAgICAgaGlkZUJhY2tkcm9wID0gZmFsc2UsXG4gICAgICBrZWVwTW91bnRlZCA9IGZhbHNlLFxuICAgICAgb25CYWNrZHJvcENsaWNrLFxuICAgICAgb3BlbixcbiAgICAgIHNsb3RQcm9wcyxcbiAgICAgIHNsb3RzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJvcC10eXBlc1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBwcm9wc1dpdGhEZWZhdWx0cyA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uLFxuICAgIGRpc2FibGVBdXRvRm9jdXMsXG4gICAgZGlzYWJsZUVuZm9yY2VGb2N1cyxcbiAgICBkaXNhYmxlRXNjYXBlS2V5RG93bixcbiAgICBkaXNhYmxlUG9ydGFsLFxuICAgIGRpc2FibGVSZXN0b3JlRm9jdXMsXG4gICAgZGlzYWJsZVNjcm9sbExvY2ssXG4gICAgaGlkZUJhY2tkcm9wLFxuICAgIGtlZXBNb3VudGVkXG4gIH0pO1xuICBjb25zdCB7XG4gICAgZ2V0Um9vdFByb3BzLFxuICAgIGdldEJhY2tkcm9wUHJvcHMsXG4gICAgZ2V0VHJhbnNpdGlvblByb3BzLFxuICAgIHBvcnRhbFJlZixcbiAgICBpc1RvcE1vZGFsLFxuICAgIGV4aXRlZCxcbiAgICBoYXNUcmFuc2l0aW9uXG4gIH0gPSB1c2VNb2RhbChfZXh0ZW5kcyh7fSwgcHJvcHNXaXRoRGVmYXVsdHMsIHtcbiAgICByb290UmVmOiByZWZcbiAgfSkpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzV2l0aERlZmF1bHRzLCB7XG4gICAgZXhpdGVkXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IGNoaWxkUHJvcHMgPSB7fTtcbiAgaWYgKGNoaWxkcmVuLnByb3BzLnRhYkluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICBjaGlsZFByb3BzLnRhYkluZGV4ID0gJy0xJztcbiAgfVxuXG4gIC8vIEl0J3MgYSBUcmFuc2l0aW9uIGxpa2UgY29tcG9uZW50XG4gIGlmIChoYXNUcmFuc2l0aW9uKSB7XG4gICAgY29uc3Qge1xuICAgICAgb25FbnRlcixcbiAgICAgIG9uRXhpdGVkXG4gICAgfSA9IGdldFRyYW5zaXRpb25Qcm9wcygpO1xuICAgIGNoaWxkUHJvcHMub25FbnRlciA9IG9uRW50ZXI7XG4gICAgY2hpbGRQcm9wcy5vbkV4aXRlZCA9IG9uRXhpdGVkO1xuICB9XG4gIGNvbnN0IFJvb3RTbG90ID0gKF9yZWYgPSAoX3Nsb3RzJHJvb3QgPSBzbG90cyA9PSBudWxsID8gdm9pZCAwIDogc2xvdHMucm9vdCkgIT0gbnVsbCA/IF9zbG90cyRyb290IDogY29tcG9uZW50cy5Sb290KSAhPSBudWxsID8gX3JlZiA6IE1vZGFsUm9vdDtcbiAgY29uc3QgQmFja2Ryb3BTbG90ID0gKF9yZWYyID0gKF9zbG90cyRiYWNrZHJvcCA9IHNsb3RzID09IG51bGwgPyB2b2lkIDAgOiBzbG90cy5iYWNrZHJvcCkgIT0gbnVsbCA/IF9zbG90cyRiYWNrZHJvcCA6IGNvbXBvbmVudHMuQmFja2Ryb3ApICE9IG51bGwgPyBfcmVmMiA6IEJhY2tkcm9wQ29tcG9uZW50O1xuICBjb25zdCByb290U2xvdFByb3BzID0gKF9zbG90UHJvcHMkcm9vdCA9IHNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogc2xvdFByb3BzLnJvb3QpICE9IG51bGwgPyBfc2xvdFByb3BzJHJvb3QgOiBjb21wb25lbnRzUHJvcHMucm9vdDtcbiAgY29uc3QgYmFja2Ryb3BTbG90UHJvcHMgPSAoX3Nsb3RQcm9wcyRiYWNrZHJvcCA9IHNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogc2xvdFByb3BzLmJhY2tkcm9wKSAhPSBudWxsID8gX3Nsb3RQcm9wcyRiYWNrZHJvcCA6IGNvbXBvbmVudHNQcm9wcy5iYWNrZHJvcDtcbiAgY29uc3Qgcm9vdFByb3BzID0gdXNlU2xvdFByb3BzKHtcbiAgICBlbGVtZW50VHlwZTogUm9vdFNsb3QsXG4gICAgZXh0ZXJuYWxTbG90UHJvcHM6IHJvb3RTbG90UHJvcHMsXG4gICAgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wczogb3RoZXIsXG4gICAgZ2V0U2xvdFByb3BzOiBnZXRSb290UHJvcHMsXG4gICAgYWRkaXRpb25hbFByb3BzOiB7XG4gICAgICByZWYsXG4gICAgICBhczogY29tcG9uZW50XG4gICAgfSxcbiAgICBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc05hbWUsIHJvb3RTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IHJvb3RTbG90UHJvcHMuY2xhc3NOYW1lLCBjbGFzc2VzID09IG51bGwgPyB2b2lkIDAgOiBjbGFzc2VzLnJvb3QsICFvd25lclN0YXRlLm9wZW4gJiYgb3duZXJTdGF0ZS5leGl0ZWQgJiYgKGNsYXNzZXMgPT0gbnVsbCA/IHZvaWQgMCA6IGNsYXNzZXMuaGlkZGVuKSlcbiAgfSk7XG4gIGNvbnN0IGJhY2tkcm9wUHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgIGVsZW1lbnRUeXBlOiBCYWNrZHJvcFNsb3QsXG4gICAgZXh0ZXJuYWxTbG90UHJvcHM6IGJhY2tkcm9wU2xvdFByb3BzLFxuICAgIGFkZGl0aW9uYWxQcm9wczogQmFja2Ryb3BQcm9wcyxcbiAgICBnZXRTbG90UHJvcHM6IG90aGVySGFuZGxlcnMgPT4ge1xuICAgICAgcmV0dXJuIGdldEJhY2tkcm9wUHJvcHMoX2V4dGVuZHMoe30sIG90aGVySGFuZGxlcnMsIHtcbiAgICAgICAgb25DbGljazogZSA9PiB7XG4gICAgICAgICAgaWYgKG9uQmFja2Ryb3BDbGljaykge1xuICAgICAgICAgICAgb25CYWNrZHJvcENsaWNrKGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3RoZXJIYW5kbGVycyAhPSBudWxsICYmIG90aGVySGFuZGxlcnMub25DbGljaykge1xuICAgICAgICAgICAgb3RoZXJIYW5kbGVycy5vbkNsaWNrKGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0sXG4gICAgY2xhc3NOYW1lOiBjbHN4KGJhY2tkcm9wU2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBiYWNrZHJvcFNsb3RQcm9wcy5jbGFzc05hbWUsIEJhY2tkcm9wUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IEJhY2tkcm9wUHJvcHMuY2xhc3NOYW1lLCBjbGFzc2VzID09IG51bGwgPyB2b2lkIDAgOiBjbGFzc2VzLmJhY2tkcm9wKSxcbiAgICBvd25lclN0YXRlXG4gIH0pO1xuICBpZiAoIWtlZXBNb3VudGVkICYmICFvcGVuICYmICghaGFzVHJhbnNpdGlvbiB8fCBleGl0ZWQpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFBvcnRhbCwge1xuICAgIHJlZjogcG9ydGFsUmVmLFxuICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgIGRpc2FibGVQb3J0YWw6IGRpc2FibGVQb3J0YWwsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4cyhSb290U2xvdCwgX2V4dGVuZHMoe30sIHJvb3RQcm9wcywge1xuICAgICAgY2hpbGRyZW46IFshaGlkZUJhY2tkcm9wICYmIEJhY2tkcm9wQ29tcG9uZW50ID8gLyojX19QVVJFX18qL19qc3goQmFja2Ryb3BTbG90LCBfZXh0ZW5kcyh7fSwgYmFja2Ryb3BQcm9wcykpIDogbnVsbCwgLyojX19QVVJFX18qL19qc3goRm9jdXNUcmFwLCB7XG4gICAgICAgIGRpc2FibGVFbmZvcmNlRm9jdXM6IGRpc2FibGVFbmZvcmNlRm9jdXMsXG4gICAgICAgIGRpc2FibGVBdXRvRm9jdXM6IGRpc2FibGVBdXRvRm9jdXMsXG4gICAgICAgIGRpc2FibGVSZXN0b3JlRm9jdXM6IGRpc2FibGVSZXN0b3JlRm9jdXMsXG4gICAgICAgIGlzRW5hYmxlZDogaXNUb3BNb2RhbCxcbiAgICAgICAgb3Blbjogb3BlbixcbiAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIGNoaWxkUHJvcHMpXG4gICAgICB9KV1cbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE1vZGFsLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIEEgYmFja2Ryb3AgY29tcG9uZW50LiBUaGlzIHByb3AgZW5hYmxlcyBjdXN0b20gYmFja2Ryb3AgcmVuZGVyaW5nLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHNsb3RzLmJhY2tkcm9wYCBpbnN0ZWFkLiBXaGlsZSB0aGlzIHByb3AgY3VycmVudGx5IHdvcmtzLCBpdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbi5cbiAgICogVXNlIHRoZSBgc2xvdHMuYmFja2Ryb3BgIHByb3AgdG8gbWFrZSB5b3VyIGFwcGxpY2F0aW9uIHJlYWR5IGZvciB0aGUgbmV4dCB2ZXJzaW9uIG9mIE1hdGVyaWFsIFVJLlxuICAgKiBAZGVmYXVsdCBzdHlsZWQoQmFja2Ryb3AsIHtcbiAgICogICBuYW1lOiAnTXVpTW9kYWwnLFxuICAgKiAgIHNsb3Q6ICdCYWNrZHJvcCcsXG4gICAqICAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAqICAgICByZXR1cm4gc3R5bGVzLmJhY2tkcm9wO1xuICAgKiAgIH0sXG4gICAqIH0pKHtcbiAgICogICB6SW5kZXg6IC0xLFxuICAgKiB9KVxuICAgKi9cbiAgQmFja2Ryb3BDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgQmFja2Ryb3BgXSgvbWF0ZXJpYWwtdWkvYXBpL2JhY2tkcm9wLykgZWxlbWVudC5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzbG90UHJvcHMuYmFja2Ryb3BgIGluc3RlYWQuXG4gICAqL1xuICBCYWNrZHJvcFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQSBzaW5nbGUgY2hpbGQgY29udGVudCBlbGVtZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IGVsZW1lbnRBY2NlcHRpbmdSZWYuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBXaGVuIHNldCB0byB0cnVlIHRoZSBNb2RhbCB3YWl0cyB1bnRpbCBhIG5lc3RlZCBUcmFuc2l0aW9uIGlzIGNvbXBsZXRlZCBiZWZvcmUgY2xvc2luZy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RzYCBwcm9wIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIEJhY2tkcm9wOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90UHJvcHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdFByb3BzYCBwcm9wIGluc3RlYWQsIGFzIGBjb21wb25lbnRzUHJvcHNgIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGJhY2tkcm9wOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSksXG4gIC8qKlxuICAgKiBBbiBIVE1MIGVsZW1lbnQgb3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9uZS5cbiAgICogVGhlIGBjb250YWluZXJgIHdpbGwgaGF2ZSB0aGUgcG9ydGFsIGNoaWxkcmVuIGFwcGVuZGVkIHRvIGl0LlxuICAgKlxuICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhIGNhbGxiYWNrLCB3aGljaCBpcyBjYWxsZWQgaW4gYSBSZWFjdCBsYXlvdXQgZWZmZWN0LlxuICAgKiBUaGlzIGxldHMgeW91IHNldCB0aGUgY29udGFpbmVyIGZyb20gYSByZWYsIGFuZCBhbHNvIG1ha2VzIHNlcnZlci1zaWRlIHJlbmRlcmluZyBwb3NzaWJsZS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgdG9wLWxldmVsIGRvY3VtZW50IG9iamVjdCxcbiAgICogc28gaXQncyBzaW1wbHkgYGRvY3VtZW50LmJvZHlgIG1vc3Qgb2YgdGhlIHRpbWUuXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMuZnVuY10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbW9kYWwgd2lsbCBub3QgYXV0b21hdGljYWxseSBzaGlmdCBmb2N1cyB0byBpdHNlbGYgd2hlbiBpdCBvcGVucywgYW5kXG4gICAqIHJlcGxhY2UgaXQgdG8gdGhlIGxhc3QgZm9jdXNlZCBlbGVtZW50IHdoZW4gaXQgY2xvc2VzLlxuICAgKiBUaGlzIGFsc28gd29ya3MgY29ycmVjdGx5IHdpdGggYW55IG1vZGFsIGNoaWxkcmVuIHRoYXQgaGF2ZSB0aGUgYGRpc2FibGVBdXRvRm9jdXNgIHByb3AuXG4gICAqXG4gICAqIEdlbmVyYWxseSB0aGlzIHNob3VsZCBuZXZlciBiZSBzZXQgdG8gYHRydWVgIGFzIGl0IG1ha2VzIHRoZSBtb2RhbCBsZXNzXG4gICAqIGFjY2Vzc2libGUgdG8gYXNzaXN0aXZlIHRlY2hub2xvZ2llcywgbGlrZSBzY3JlZW4gcmVhZGVycy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVBdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbW9kYWwgd2lsbCBub3QgcHJldmVudCBmb2N1cyBmcm9tIGxlYXZpbmcgdGhlIG1vZGFsIHdoaWxlIG9wZW4uXG4gICAqXG4gICAqIEdlbmVyYWxseSB0aGlzIHNob3VsZCBuZXZlciBiZSBzZXQgdG8gYHRydWVgIGFzIGl0IG1ha2VzIHRoZSBtb2RhbCBsZXNzXG4gICAqIGFjY2Vzc2libGUgdG8gYXNzaXN0aXZlIHRlY2hub2xvZ2llcywgbGlrZSBzY3JlZW4gcmVhZGVycy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVFbmZvcmNlRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBoaXR0aW5nIGVzY2FwZSB3aWxsIG5vdCBmaXJlIHRoZSBgb25DbG9zZWAgY2FsbGJhY2suXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlRXNjYXBlS2V5RG93bjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgYGNoaWxkcmVuYCB3aWxsIGJlIHVuZGVyIHRoZSBET00gaGllcmFyY2h5IG9mIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVBvcnRhbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtb2RhbCB3aWxsIG5vdCByZXN0b3JlIGZvY3VzIHRvIHByZXZpb3VzbHkgZm9jdXNlZCBlbGVtZW50IG9uY2VcbiAgICogbW9kYWwgaXMgaGlkZGVuIG9yIHVubW91bnRlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSZXN0b3JlRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRGlzYWJsZSB0aGUgc2Nyb2xsIGxvY2sgYmVoYXZpb3IuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlU2Nyb2xsTG9jazogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBiYWNrZHJvcCBpcyBub3QgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBoaWRlQmFja2Ryb3A6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQWx3YXlzIGtlZXAgdGhlIGNoaWxkcmVuIGluIHRoZSBET00uXG4gICAqIFRoaXMgcHJvcCBjYW4gYmUgdXNlZnVsIGluIFNFTyBzaXR1YXRpb24gb3JcbiAgICogd2hlbiB5b3Ugd2FudCB0byBtYXhpbWl6ZSB0aGUgcmVzcG9uc2l2ZW5lc3Mgb2YgdGhlIE1vZGFsLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAga2VlcE1vdW50ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgYmFja2Ryb3AgaXMgY2xpY2tlZC5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBgb25DbG9zZWAgcHJvcCB3aXRoIHRoZSBgcmVhc29uYCBhcmd1bWVudCB0byBoYW5kbGUgdGhlIGBiYWNrZHJvcENsaWNrYCBldmVudHMuXG4gICAqL1xuICBvbkJhY2tkcm9wQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIGNsb3NlZC5cbiAgICogVGhlIGByZWFzb25gIHBhcmFtZXRlciBjYW4gb3B0aW9uYWxseSBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHJlc3BvbnNlIHRvIGBvbkNsb3NlYC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIENhbiBiZTogYFwiZXNjYXBlS2V5RG93blwiYCwgYFwiYmFja2Ryb3BDbGlja1wiYC5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQSBmdW5jdGlvbiBjYWxsZWQgd2hlbiBhIHRyYW5zaXRpb24gZW50ZXJzLlxuICAgKi9cbiAgb25UcmFuc2l0aW9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQSBmdW5jdGlvbiBjYWxsZWQgd2hlbiBhIHRyYW5zaXRpb24gaGFzIGV4aXRlZC5cbiAgICovXG4gIG9uVHJhbnNpdGlvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogVGhlIHByb3BzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIE1vZGFsLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGJhY2tkcm9wOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBNb2RhbC5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGJhY2tkcm9wOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTW9kYWw7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3BvdmVyVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlQb3BvdmVyJywgc2xvdCk7XG59XG5jb25zdCBwb3BvdmVyQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVBvcG92ZXInLCBbJ3Jvb3QnLCAncGFwZXInXSk7XG5leHBvcnQgZGVmYXVsdCBwb3BvdmVyQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJvbkVudGVyaW5nXCJdLFxuICBfZXhjbHVkZWQyID0gW1wiYWN0aW9uXCIsIFwiYW5jaG9yRWxcIiwgXCJhbmNob3JPcmlnaW5cIiwgXCJhbmNob3JQb3NpdGlvblwiLCBcImFuY2hvclJlZmVyZW5jZVwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29udGFpbmVyXCIsIFwiZWxldmF0aW9uXCIsIFwibWFyZ2luVGhyZXNob2xkXCIsIFwib3BlblwiLCBcIlBhcGVyUHJvcHNcIiwgXCJzbG90c1wiLCBcInNsb3RQcm9wc1wiLCBcInRyYW5zZm9ybU9yaWdpblwiLCBcIlRyYW5zaXRpb25Db21wb25lbnRcIiwgXCJ0cmFuc2l0aW9uRHVyYXRpb25cIiwgXCJUcmFuc2l0aW9uUHJvcHNcIiwgXCJkaXNhYmxlU2Nyb2xsTG9ja1wiXSxcbiAgX2V4Y2x1ZGVkMyA9IFtcInNsb3RQcm9wc1wiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzLCB1c2VTbG90UHJvcHMsIGlzSG9zdENvbXBvbmVudCB9IGZyb20gJ0BtdWkvYmFzZSc7XG5pbXBvcnQgeyBjaGFpblByb3BUeXBlcywgaW50ZWdlclByb3BUeXBlLCBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZiwgcmVmVHlwZSwgSFRNTEVsZW1lbnRUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gJy4uL3V0aWxzL2RlYm91bmNlJztcbmltcG9ydCBvd25lckRvY3VtZW50IGZyb20gJy4uL3V0aWxzL293bmVyRG9jdW1lbnQnO1xuaW1wb3J0IG93bmVyV2luZG93IGZyb20gJy4uL3V0aWxzL293bmVyV2luZG93JztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IEdyb3cgZnJvbSAnLi4vR3Jvdyc7XG5pbXBvcnQgTW9kYWwgZnJvbSAnLi4vTW9kYWwnO1xuaW1wb3J0IFBhcGVyQmFzZSBmcm9tICcuLi9QYXBlcic7XG5pbXBvcnQgeyBnZXRQb3BvdmVyVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9wb3BvdmVyQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9mZnNldFRvcChyZWN0LCB2ZXJ0aWNhbCkge1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgaWYgKHR5cGVvZiB2ZXJ0aWNhbCA9PT0gJ251bWJlcicpIHtcbiAgICBvZmZzZXQgPSB2ZXJ0aWNhbDtcbiAgfSBlbHNlIGlmICh2ZXJ0aWNhbCA9PT0gJ2NlbnRlcicpIHtcbiAgICBvZmZzZXQgPSByZWN0LmhlaWdodCAvIDI7XG4gIH0gZWxzZSBpZiAodmVydGljYWwgPT09ICdib3R0b20nKSB7XG4gICAgb2Zmc2V0ID0gcmVjdC5oZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIG9mZnNldDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRPZmZzZXRMZWZ0KHJlY3QsIGhvcml6b250YWwpIHtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIGlmICh0eXBlb2YgaG9yaXpvbnRhbCA9PT0gJ251bWJlcicpIHtcbiAgICBvZmZzZXQgPSBob3Jpem9udGFsO1xuICB9IGVsc2UgaWYgKGhvcml6b250YWwgPT09ICdjZW50ZXInKSB7XG4gICAgb2Zmc2V0ID0gcmVjdC53aWR0aCAvIDI7XG4gIH0gZWxzZSBpZiAoaG9yaXpvbnRhbCA9PT0gJ3JpZ2h0Jykge1xuICAgIG9mZnNldCA9IHJlY3Qud2lkdGg7XG4gIH1cbiAgcmV0dXJuIG9mZnNldDtcbn1cbmZ1bmN0aW9uIGdldFRyYW5zZm9ybU9yaWdpblZhbHVlKHRyYW5zZm9ybU9yaWdpbikge1xuICByZXR1cm4gW3RyYW5zZm9ybU9yaWdpbi5ob3Jpem9udGFsLCB0cmFuc2Zvcm1PcmlnaW4udmVydGljYWxdLm1hcChuID0+IHR5cGVvZiBuID09PSAnbnVtYmVyJyA/IGAke259cHhgIDogbikuam9pbignICcpO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKSB7XG4gIHJldHVybiB0eXBlb2YgYW5jaG9yRWwgPT09ICdmdW5jdGlvbicgPyBhbmNob3JFbCgpIDogYW5jaG9yRWw7XG59XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290J10sXG4gICAgcGFwZXI6IFsncGFwZXInXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFBvcG92ZXJVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBQb3BvdmVyUm9vdCA9IHN0eWxlZChNb2RhbCwge1xuICBuYW1lOiAnTXVpUG9wb3ZlcicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe30pO1xuZXhwb3J0IGNvbnN0IFBvcG92ZXJQYXBlciA9IHN0eWxlZChQYXBlckJhc2UsIHtcbiAgbmFtZTogJ011aVBvcG92ZXInLFxuICBzbG90OiAnUGFwZXInLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5wYXBlclxufSkoe1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gIG92ZXJmbG93WDogJ2hpZGRlbicsXG4gIC8vIFNvIHdlIHNlZSB0aGUgcG9wb3ZlciB3aGVuIGl0J3MgZW1wdHkuXG4gIC8vIEl0J3MgbW9zdCBsaWtlbHkgb24gaXNzdWUgb24gdXNlcmxhbmQuXG4gIG1pbldpZHRoOiAxNixcbiAgbWluSGVpZ2h0OiAxNixcbiAgbWF4V2lkdGg6ICdjYWxjKDEwMCUgLSAzMnB4KScsXG4gIG1heEhlaWdodDogJ2NhbGMoMTAwJSAtIDMycHgpJyxcbiAgLy8gV2UgZGlzYWJsZSB0aGUgZm9jdXMgcmluZyBmb3IgbW91c2UsIHRvdWNoIGFuZCBrZXlib2FyZCB1c2Vycy5cbiAgb3V0bGluZTogMFxufSk7XG5jb25zdCBQb3BvdmVyID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gUG9wb3ZlcihpblByb3BzLCByZWYpIHtcbiAgdmFyIF9zbG90UHJvcHMkcGFwZXIsIF9zbG90cyRyb290LCBfc2xvdHMkcGFwZXI7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVBvcG92ZXInXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhY3Rpb24sXG4gICAgICBhbmNob3JFbCxcbiAgICAgIGFuY2hvck9yaWdpbiA9IHtcbiAgICAgICAgdmVydGljYWw6ICd0b3AnLFxuICAgICAgICBob3Jpem9udGFsOiAnbGVmdCdcbiAgICAgIH0sXG4gICAgICBhbmNob3JQb3NpdGlvbixcbiAgICAgIGFuY2hvclJlZmVyZW5jZSA9ICdhbmNob3JFbCcsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyUHJvcCxcbiAgICAgIGVsZXZhdGlvbiA9IDgsXG4gICAgICBtYXJnaW5UaHJlc2hvbGQgPSAxNixcbiAgICAgIG9wZW4sXG4gICAgICBQYXBlclByb3BzOiBQYXBlclByb3BzUHJvcCA9IHt9LFxuICAgICAgc2xvdHMsXG4gICAgICBzbG90UHJvcHMsXG4gICAgICB0cmFuc2Zvcm1PcmlnaW4gPSB7XG4gICAgICAgIHZlcnRpY2FsOiAndG9wJyxcbiAgICAgICAgaG9yaXpvbnRhbDogJ2xlZnQnXG4gICAgICB9LFxuICAgICAgVHJhbnNpdGlvbkNvbXBvbmVudCA9IEdyb3csXG4gICAgICB0cmFuc2l0aW9uRHVyYXRpb246IHRyYW5zaXRpb25EdXJhdGlvblByb3AgPSAnYXV0bycsXG4gICAgICBUcmFuc2l0aW9uUHJvcHM6IHtcbiAgICAgICAgb25FbnRlcmluZ1xuICAgICAgfSA9IHt9LFxuICAgICAgZGlzYWJsZVNjcm9sbExvY2sgPSBmYWxzZVxuICAgIH0gPSBwcm9wcyxcbiAgICBUcmFuc2l0aW9uUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcy5UcmFuc2l0aW9uUHJvcHMsIF9leGNsdWRlZCksXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkMik7XG4gIGNvbnN0IGV4dGVybmFsUGFwZXJTbG90UHJvcHMgPSAoX3Nsb3RQcm9wcyRwYXBlciA9IHNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogc2xvdFByb3BzLnBhcGVyKSAhPSBudWxsID8gX3Nsb3RQcm9wcyRwYXBlciA6IFBhcGVyUHJvcHNQcm9wO1xuICBjb25zdCBwYXBlclJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCBoYW5kbGVQYXBlclJlZiA9IHVzZUZvcmtSZWYocGFwZXJSZWYsIGV4dGVybmFsUGFwZXJTbG90UHJvcHMucmVmKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGFuY2hvck9yaWdpbixcbiAgICBhbmNob3JSZWZlcmVuY2UsXG4gICAgZWxldmF0aW9uLFxuICAgIG1hcmdpblRocmVzaG9sZCxcbiAgICBleHRlcm5hbFBhcGVyU2xvdFByb3BzLFxuICAgIHRyYW5zZm9ybU9yaWdpbixcbiAgICBUcmFuc2l0aW9uQ29tcG9uZW50LFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uUHJvcCxcbiAgICBUcmFuc2l0aW9uUHJvcHNcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcblxuICAvLyBSZXR1cm5zIHRoZSB0b3AvbGVmdCBvZmZzZXQgb2YgdGhlIHBvc2l0aW9uXG4gIC8vIHRvIGF0dGFjaCB0byBvbiB0aGUgYW5jaG9yIGVsZW1lbnQgKG9yIGJvZHkgaWYgbm9uZSBpcyBwcm92aWRlZClcbiAgY29uc3QgZ2V0QW5jaG9yT2Zmc2V0ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChhbmNob3JSZWZlcmVuY2UgPT09ICdhbmNob3JQb3NpdGlvbicpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICghYW5jaG9yUG9zaXRpb24pIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IFlvdSBuZWVkIHRvIHByb3ZpZGUgYSBgYW5jaG9yUG9zaXRpb25gIHByb3Agd2hlbiB1c2luZyAnICsgJzxQb3BvdmVyIGFuY2hvclJlZmVyZW5jZT1cImFuY2hvclBvc2l0aW9uXCIgLz4uJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhbmNob3JQb3NpdGlvbjtcbiAgICB9XG4gICAgY29uc3QgcmVzb2x2ZWRBbmNob3JFbCA9IHJlc29sdmVBbmNob3JFbChhbmNob3JFbCk7XG5cbiAgICAvLyBJZiBhbiBhbmNob3IgZWxlbWVudCB3YXNuJ3QgcHJvdmlkZWQsIGp1c3QgdXNlIHRoZSBwYXJlbnQgYm9keSBlbGVtZW50IG9mIHRoaXMgUG9wb3ZlclxuICAgIGNvbnN0IGFuY2hvckVsZW1lbnQgPSByZXNvbHZlZEFuY2hvckVsICYmIHJlc29sdmVkQW5jaG9yRWwubm9kZVR5cGUgPT09IDEgPyByZXNvbHZlZEFuY2hvckVsIDogb3duZXJEb2N1bWVudChwYXBlclJlZi5jdXJyZW50KS5ib2R5O1xuICAgIGNvbnN0IGFuY2hvclJlY3QgPSBhbmNob3JFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zdCBib3ggPSBhbmNob3JFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCcgJiYgYm94LnRvcCA9PT0gMCAmJiBib3gubGVmdCA9PT0gMCAmJiBib3gucmlnaHQgPT09IDAgJiYgYm94LmJvdHRvbSA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLndhcm4oWydNVUk6IFRoZSBgYW5jaG9yRWxgIHByb3AgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudCBpcyBpbnZhbGlkLicsICdUaGUgYW5jaG9yIGVsZW1lbnQgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGRvY3VtZW50IGxheW91dC4nLCBcIk1ha2Ugc3VyZSB0aGUgZWxlbWVudCBpcyBwcmVzZW50IGluIHRoZSBkb2N1bWVudCBvciB0aGF0IGl0J3Mgbm90IGRpc3BsYXkgbm9uZS5cIl0uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdG9wOiBhbmNob3JSZWN0LnRvcCArIGdldE9mZnNldFRvcChhbmNob3JSZWN0LCBhbmNob3JPcmlnaW4udmVydGljYWwpLFxuICAgICAgbGVmdDogYW5jaG9yUmVjdC5sZWZ0ICsgZ2V0T2Zmc2V0TGVmdChhbmNob3JSZWN0LCBhbmNob3JPcmlnaW4uaG9yaXpvbnRhbClcbiAgICB9O1xuICB9LCBbYW5jaG9yRWwsIGFuY2hvck9yaWdpbi5ob3Jpem9udGFsLCBhbmNob3JPcmlnaW4udmVydGljYWwsIGFuY2hvclBvc2l0aW9uLCBhbmNob3JSZWZlcmVuY2VdKTtcblxuICAvLyBSZXR1cm5zIHRoZSBiYXNlIHRyYW5zZm9ybSBvcmlnaW4gdXNpbmcgdGhlIGVsZW1lbnRcbiAgY29uc3QgZ2V0VHJhbnNmb3JtT3JpZ2luID0gUmVhY3QudXNlQ2FsbGJhY2soZWxlbVJlY3QgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICB2ZXJ0aWNhbDogZ2V0T2Zmc2V0VG9wKGVsZW1SZWN0LCB0cmFuc2Zvcm1PcmlnaW4udmVydGljYWwpLFxuICAgICAgaG9yaXpvbnRhbDogZ2V0T2Zmc2V0TGVmdChlbGVtUmVjdCwgdHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWwpXG4gICAgfTtcbiAgfSwgW3RyYW5zZm9ybU9yaWdpbi5ob3Jpem9udGFsLCB0cmFuc2Zvcm1PcmlnaW4udmVydGljYWxdKTtcbiAgY29uc3QgZ2V0UG9zaXRpb25pbmdTdHlsZSA9IFJlYWN0LnVzZUNhbGxiYWNrKGVsZW1lbnQgPT4ge1xuICAgIGNvbnN0IGVsZW1SZWN0ID0ge1xuICAgICAgd2lkdGg6IGVsZW1lbnQub2Zmc2V0V2lkdGgsXG4gICAgICBoZWlnaHQ6IGVsZW1lbnQub2Zmc2V0SGVpZ2h0XG4gICAgfTtcblxuICAgIC8vIEdldCB0aGUgdHJhbnNmb3JtIG9yaWdpbiBwb2ludCBvbiB0aGUgZWxlbWVudCBpdHNlbGZcbiAgICBjb25zdCBlbGVtVHJhbnNmb3JtT3JpZ2luID0gZ2V0VHJhbnNmb3JtT3JpZ2luKGVsZW1SZWN0KTtcbiAgICBpZiAoYW5jaG9yUmVmZXJlbmNlID09PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvcDogbnVsbCxcbiAgICAgICAgbGVmdDogbnVsbCxcbiAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiBnZXRUcmFuc2Zvcm1PcmlnaW5WYWx1ZShlbGVtVHJhbnNmb3JtT3JpZ2luKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIG9mZnNldCBvZiB0aGUgYW5jaG9yaW5nIGVsZW1lbnRcbiAgICBjb25zdCBhbmNob3JPZmZzZXQgPSBnZXRBbmNob3JPZmZzZXQoKTtcblxuICAgIC8vIENhbGN1bGF0ZSBlbGVtZW50IHBvc2l0aW9uaW5nXG4gICAgbGV0IHRvcCA9IGFuY2hvck9mZnNldC50b3AgLSBlbGVtVHJhbnNmb3JtT3JpZ2luLnZlcnRpY2FsO1xuICAgIGxldCBsZWZ0ID0gYW5jaG9yT2Zmc2V0LmxlZnQgLSBlbGVtVHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWw7XG4gICAgY29uc3QgYm90dG9tID0gdG9wICsgZWxlbVJlY3QuaGVpZ2h0O1xuICAgIGNvbnN0IHJpZ2h0ID0gbGVmdCArIGVsZW1SZWN0LndpZHRoO1xuXG4gICAgLy8gVXNlIHRoZSBwYXJlbnQgd2luZG93IG9mIHRoZSBhbmNob3JFbCBpZiBwcm92aWRlZFxuICAgIGNvbnN0IGNvbnRhaW5lcldpbmRvdyA9IG93bmVyV2luZG93KHJlc29sdmVBbmNob3JFbChhbmNob3JFbCkpO1xuXG4gICAgLy8gV2luZG93IHRocmVzaG9sZHMgdGFraW5nIHJlcXVpcmVkIG1hcmdpbiBpbnRvIGFjY291bnRcbiAgICBjb25zdCBoZWlnaHRUaHJlc2hvbGQgPSBjb250YWluZXJXaW5kb3cuaW5uZXJIZWlnaHQgLSBtYXJnaW5UaHJlc2hvbGQ7XG4gICAgY29uc3Qgd2lkdGhUaHJlc2hvbGQgPSBjb250YWluZXJXaW5kb3cuaW5uZXJXaWR0aCAtIG1hcmdpblRocmVzaG9sZDtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB2ZXJ0aWNhbCBheGlzIG5lZWRzIHNoaWZ0aW5nXG4gICAgaWYgKG1hcmdpblRocmVzaG9sZCAhPT0gbnVsbCAmJiB0b3AgPCBtYXJnaW5UaHJlc2hvbGQpIHtcbiAgICAgIGNvbnN0IGRpZmYgPSB0b3AgLSBtYXJnaW5UaHJlc2hvbGQ7XG4gICAgICB0b3AgLT0gZGlmZjtcbiAgICAgIGVsZW1UcmFuc2Zvcm1PcmlnaW4udmVydGljYWwgKz0gZGlmZjtcbiAgICB9IGVsc2UgaWYgKG1hcmdpblRocmVzaG9sZCAhPT0gbnVsbCAmJiBib3R0b20gPiBoZWlnaHRUaHJlc2hvbGQpIHtcbiAgICAgIGNvbnN0IGRpZmYgPSBib3R0b20gLSBoZWlnaHRUaHJlc2hvbGQ7XG4gICAgICB0b3AgLT0gZGlmZjtcbiAgICAgIGVsZW1UcmFuc2Zvcm1PcmlnaW4udmVydGljYWwgKz0gZGlmZjtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChlbGVtUmVjdC5oZWlnaHQgPiBoZWlnaHRUaHJlc2hvbGQgJiYgZWxlbVJlY3QuaGVpZ2h0ICYmIGhlaWdodFRocmVzaG9sZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGUgcG9wb3ZlciBjb21wb25lbnQgaXMgdG9vIHRhbGwuJywgYFNvbWUgcGFydCBvZiBpdCBjYW4gbm90IGJlIHNlZW4gb24gdGhlIHNjcmVlbiAoJHtlbGVtUmVjdC5oZWlnaHQgLSBoZWlnaHRUaHJlc2hvbGR9cHgpLmAsICdQbGVhc2UgY29uc2lkZXIgYWRkaW5nIGEgYG1heC1oZWlnaHRgIHRvIGltcHJvdmUgdGhlIHVzZXItZXhwZXJpZW5jZS4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGhvcml6b250YWwgYXhpcyBuZWVkcyBzaGlmdGluZ1xuICAgIGlmIChtYXJnaW5UaHJlc2hvbGQgIT09IG51bGwgJiYgbGVmdCA8IG1hcmdpblRocmVzaG9sZCkge1xuICAgICAgY29uc3QgZGlmZiA9IGxlZnQgLSBtYXJnaW5UaHJlc2hvbGQ7XG4gICAgICBsZWZ0IC09IGRpZmY7XG4gICAgICBlbGVtVHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWwgKz0gZGlmZjtcbiAgICB9IGVsc2UgaWYgKHJpZ2h0ID4gd2lkdGhUaHJlc2hvbGQpIHtcbiAgICAgIGNvbnN0IGRpZmYgPSByaWdodCAtIHdpZHRoVGhyZXNob2xkO1xuICAgICAgbGVmdCAtPSBkaWZmO1xuICAgICAgZWxlbVRyYW5zZm9ybU9yaWdpbi5ob3Jpem9udGFsICs9IGRpZmY7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0b3A6IGAke01hdGgucm91bmQodG9wKX1weGAsXG4gICAgICBsZWZ0OiBgJHtNYXRoLnJvdW5kKGxlZnQpfXB4YCxcbiAgICAgIHRyYW5zZm9ybU9yaWdpbjogZ2V0VHJhbnNmb3JtT3JpZ2luVmFsdWUoZWxlbVRyYW5zZm9ybU9yaWdpbilcbiAgICB9O1xuICB9LCBbYW5jaG9yRWwsIGFuY2hvclJlZmVyZW5jZSwgZ2V0QW5jaG9yT2Zmc2V0LCBnZXRUcmFuc2Zvcm1PcmlnaW4sIG1hcmdpblRocmVzaG9sZF0pO1xuICBjb25zdCBbaXNQb3NpdGlvbmVkLCBzZXRJc1Bvc2l0aW9uZWRdID0gUmVhY3QudXNlU3RhdGUob3Blbik7XG4gIGNvbnN0IHNldFBvc2l0aW9uaW5nU3R5bGVzID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBwYXBlclJlZi5jdXJyZW50O1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwb3NpdGlvbmluZyA9IGdldFBvc2l0aW9uaW5nU3R5bGUoZWxlbWVudCk7XG4gICAgaWYgKHBvc2l0aW9uaW5nLnRvcCAhPT0gbnVsbCkge1xuICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBwb3NpdGlvbmluZy50b3A7XG4gICAgfVxuICAgIGlmIChwb3NpdGlvbmluZy5sZWZ0ICE9PSBudWxsKSB7XG4gICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBwb3NpdGlvbmluZy5sZWZ0O1xuICAgIH1cbiAgICBlbGVtZW50LnN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IHBvc2l0aW9uaW5nLnRyYW5zZm9ybU9yaWdpbjtcbiAgICBzZXRJc1Bvc2l0aW9uZWQodHJ1ZSk7XG4gIH0sIFtnZXRQb3NpdGlvbmluZ1N0eWxlXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRpc2FibGVTY3JvbGxMb2NrKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc2V0UG9zaXRpb25pbmdTdHlsZXMpO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHNldFBvc2l0aW9uaW5nU3R5bGVzKTtcbiAgfSwgW2FuY2hvckVsLCBkaXNhYmxlU2Nyb2xsTG9jaywgc2V0UG9zaXRpb25pbmdTdHlsZXNdKTtcbiAgY29uc3QgaGFuZGxlRW50ZXJpbmcgPSAoZWxlbWVudCwgaXNBcHBlYXJpbmcpID0+IHtcbiAgICBpZiAob25FbnRlcmluZykge1xuICAgICAgb25FbnRlcmluZyhlbGVtZW50LCBpc0FwcGVhcmluZyk7XG4gICAgfVxuICAgIHNldFBvc2l0aW9uaW5nU3R5bGVzKCk7XG4gIH07XG4gIGNvbnN0IGhhbmRsZUV4aXRlZCA9ICgpID0+IHtcbiAgICBzZXRJc1Bvc2l0aW9uZWQoZmFsc2UpO1xuICB9O1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcGVuKSB7XG4gICAgICBzZXRQb3NpdGlvbmluZ1N0eWxlcygpO1xuICAgIH1cbiAgfSk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUoYWN0aW9uLCAoKSA9PiBvcGVuID8ge1xuICAgIHVwZGF0ZVBvc2l0aW9uOiAoKSA9PiB7XG4gICAgICBzZXRQb3NpdGlvbmluZ1N0eWxlcygpO1xuICAgIH1cbiAgfSA6IG51bGwsIFtvcGVuLCBzZXRQb3NpdGlvbmluZ1N0eWxlc10pO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghb3Blbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgaGFuZGxlUmVzaXplID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgc2V0UG9zaXRpb25pbmdTdHlsZXMoKTtcbiAgICB9KTtcbiAgICBjb25zdCBjb250YWluZXJXaW5kb3cgPSBvd25lcldpbmRvdyhhbmNob3JFbCk7XG4gICAgY29udGFpbmVyV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGhhbmRsZVJlc2l6ZS5jbGVhcigpO1xuICAgICAgY29udGFpbmVyV2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG4gICAgfTtcbiAgfSwgW2FuY2hvckVsLCBvcGVuLCBzZXRQb3NpdGlvbmluZ1N0eWxlc10pO1xuICBsZXQgdHJhbnNpdGlvbkR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uUHJvcDtcbiAgaWYgKHRyYW5zaXRpb25EdXJhdGlvblByb3AgPT09ICdhdXRvJyAmJiAhVHJhbnNpdGlvbkNvbXBvbmVudC5tdWlTdXBwb3J0QXV0bykge1xuICAgIHRyYW5zaXRpb25EdXJhdGlvbiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIElmIHRoZSBjb250YWluZXIgcHJvcCBpcyBwcm92aWRlZCwgdXNlIHRoYXRcbiAgLy8gSWYgdGhlIGFuY2hvckVsIHByb3AgaXMgcHJvdmlkZWQsIHVzZSBpdHMgcGFyZW50IGJvZHkgZWxlbWVudCBhcyB0aGUgY29udGFpbmVyXG4gIC8vIElmIG5laXRoZXIgYXJlIHByb3ZpZGVkIGxldCB0aGUgTW9kYWwgdGFrZSBjYXJlIG9mIGNob29zaW5nIHRoZSBjb250YWluZXJcbiAgY29uc3QgY29udGFpbmVyID0gY29udGFpbmVyUHJvcCB8fCAoYW5jaG9yRWwgPyBvd25lckRvY3VtZW50KHJlc29sdmVBbmNob3JFbChhbmNob3JFbCkpLmJvZHkgOiB1bmRlZmluZWQpO1xuICBjb25zdCBSb290U2xvdCA9IChfc2xvdHMkcm9vdCA9IHNsb3RzID09IG51bGwgPyB2b2lkIDAgOiBzbG90cy5yb290KSAhPSBudWxsID8gX3Nsb3RzJHJvb3QgOiBQb3BvdmVyUm9vdDtcbiAgY29uc3QgUGFwZXJTbG90ID0gKF9zbG90cyRwYXBlciA9IHNsb3RzID09IG51bGwgPyB2b2lkIDAgOiBzbG90cy5wYXBlcikgIT0gbnVsbCA/IF9zbG90cyRwYXBlciA6IFBvcG92ZXJQYXBlcjtcbiAgY29uc3QgcGFwZXJQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IFBhcGVyU2xvdCxcbiAgICBleHRlcm5hbFNsb3RQcm9wczogX2V4dGVuZHMoe30sIGV4dGVybmFsUGFwZXJTbG90UHJvcHMsIHtcbiAgICAgIHN0eWxlOiBpc1Bvc2l0aW9uZWQgPyBleHRlcm5hbFBhcGVyU2xvdFByb3BzLnN0eWxlIDogX2V4dGVuZHMoe30sIGV4dGVybmFsUGFwZXJTbG90UHJvcHMuc3R5bGUsIHtcbiAgICAgICAgb3BhY2l0eTogMFxuICAgICAgfSlcbiAgICB9KSxcbiAgICBhZGRpdGlvbmFsUHJvcHM6IHtcbiAgICAgIGVsZXZhdGlvbixcbiAgICAgIHJlZjogaGFuZGxlUGFwZXJSZWZcbiAgICB9LFxuICAgIG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucGFwZXIsIGV4dGVybmFsUGFwZXJTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGV4dGVybmFsUGFwZXJTbG90UHJvcHMuY2xhc3NOYW1lKVxuICB9KTtcbiAgY29uc3QgX3VzZVNsb3RQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgICBlbGVtZW50VHlwZTogUm9vdFNsb3QsXG4gICAgICBleHRlcm5hbFNsb3RQcm9wczogKHNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogc2xvdFByb3BzLnJvb3QpIHx8IHt9LFxuICAgICAgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wczogb3RoZXIsXG4gICAgICBhZGRpdGlvbmFsUHJvcHM6IHtcbiAgICAgICAgcmVmLFxuICAgICAgICBzbG90UHJvcHM6IHtcbiAgICAgICAgICBiYWNrZHJvcDoge1xuICAgICAgICAgICAgaW52aXNpYmxlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb250YWluZXIsXG4gICAgICAgIG9wZW5cbiAgICAgIH0sXG4gICAgICBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICAgIH0pLFxuICAgIHtcbiAgICAgIHNsb3RQcm9wczogcm9vdFNsb3RQcm9wc1Byb3BcbiAgICB9ID0gX3VzZVNsb3RQcm9wcyxcbiAgICByb290UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdXNlU2xvdFByb3BzLCBfZXhjbHVkZWQzKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFJvb3RTbG90LCBfZXh0ZW5kcyh7fSwgcm9vdFByb3BzLCAhaXNIb3N0Q29tcG9uZW50KFJvb3RTbG90KSAmJiB7XG4gICAgc2xvdFByb3BzOiByb290U2xvdFByb3BzUHJvcCxcbiAgICBkaXNhYmxlU2Nyb2xsTG9ja1xuICB9LCB7XG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFRyYW5zaXRpb25Db21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIGFwcGVhcjogdHJ1ZSxcbiAgICAgIGluOiBvcGVuLFxuICAgICAgb25FbnRlcmluZzogaGFuZGxlRW50ZXJpbmcsXG4gICAgICBvbkV4aXRlZDogaGFuZGxlRXhpdGVkLFxuICAgICAgdGltZW91dDogdHJhbnNpdGlvbkR1cmF0aW9uXG4gICAgfSwgVHJhbnNpdGlvblByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goUGFwZXJTbG90LCBfZXh0ZW5kcyh7fSwgcGFwZXJQcm9wcywge1xuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgIH0pKVxuICAgIH0pKVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFBvcG92ZXIucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogQSByZWYgZm9yIGltcGVyYXRpdmUgYWN0aW9ucy5cbiAgICogSXQgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgdXBkYXRlUG9zaXRpb24oKSBhY3Rpb24uXG4gICAqL1xuICBhY3Rpb246IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBBbiBIVE1MIGVsZW1lbnQsIFtQb3BvdmVyVmlydHVhbEVsZW1lbnRdKC9tYXRlcmlhbC11aS9yZWFjdC1wb3BvdmVyLyN2aXJ0dWFsLWVsZW1lbnQpLFxuICAgKiBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBlaXRoZXIuXG4gICAqIEl0J3MgdXNlZCB0byBzZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3BvdmVyLlxuICAgKi9cbiAgYW5jaG9yRWw6IGNoYWluUHJvcFR5cGVzKFByb3BUeXBlcy5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSwgcHJvcHMgPT4ge1xuICAgIGlmIChwcm9wcy5vcGVuICYmICghcHJvcHMuYW5jaG9yUmVmZXJlbmNlIHx8IHByb3BzLmFuY2hvclJlZmVyZW5jZSA9PT0gJ2FuY2hvckVsJykpIHtcbiAgICAgIGNvbnN0IHJlc29sdmVkQW5jaG9yRWwgPSByZXNvbHZlQW5jaG9yRWwocHJvcHMuYW5jaG9yRWwpO1xuICAgICAgaWYgKHJlc29sdmVkQW5jaG9yRWwgJiYgcmVzb2x2ZWRBbmNob3JFbC5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICBjb25zdCBib3ggPSByZXNvbHZlZEFuY2hvckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJiBib3gudG9wID09PSAwICYmIGJveC5sZWZ0ID09PSAwICYmIGJveC5yaWdodCA9PT0gMCAmJiBib3guYm90dG9tID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihbJ01VSTogVGhlIGBhbmNob3JFbGAgcHJvcCBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50IGlzIGludmFsaWQuJywgJ1RoZSBhbmNob3IgZWxlbWVudCBzaG91bGQgYmUgcGFydCBvZiB0aGUgZG9jdW1lbnQgbGF5b3V0LicsIFwiTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHByZXNlbnQgaW4gdGhlIGRvY3VtZW50IG9yIHRoYXQgaXQncyBub3QgZGlzcGxheSBub25lLlwiXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoWydNVUk6IFRoZSBgYW5jaG9yRWxgIHByb3AgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudCBpcyBpbnZhbGlkLicsIGBJdCBzaG91bGQgYmUgYW4gRWxlbWVudCBvciBQb3BvdmVyVmlydHVhbEVsZW1lbnQgaW5zdGFuY2UgYnV0IGl0J3MgXFxgJHtyZXNvbHZlZEFuY2hvckVsfVxcYCBpbnN0ZWFkLmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pLFxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgcG9pbnQgb24gdGhlIGFuY2hvciB3aGVyZSB0aGUgcG9wb3ZlcidzXG4gICAqIGBhbmNob3JFbGAgd2lsbCBhdHRhY2ggdG8uIFRoaXMgaXMgbm90IHVzZWQgd2hlbiB0aGVcbiAgICogYW5jaG9yUmVmZXJlbmNlIGlzICdhbmNob3JQb3NpdGlvbicuXG4gICAqXG4gICAqIE9wdGlvbnM6XG4gICAqIHZlcnRpY2FsOiBbdG9wLCBjZW50ZXIsIGJvdHRvbV07XG4gICAqIGhvcml6b250YWw6IFtsZWZ0LCBjZW50ZXIsIHJpZ2h0XS5cbiAgICogQGRlZmF1bHQge1xuICAgKiAgIHZlcnRpY2FsOiAndG9wJyxcbiAgICogICBob3Jpem9udGFsOiAnbGVmdCcsXG4gICAqIH1cbiAgICovXG4gIGFuY2hvck9yaWdpbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBob3Jpem9udGFsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydjZW50ZXInLCAnbGVmdCcsICdyaWdodCddKSwgUHJvcFR5cGVzLm51bWJlcl0pLmlzUmVxdWlyZWQsXG4gICAgdmVydGljYWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2JvdHRvbScsICdjZW50ZXInLCAndG9wJ10pLCBQcm9wVHlwZXMubnVtYmVyXSkuaXNSZXF1aXJlZFxuICB9KSxcbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIHBvc2l0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9wb3Zlci5cbiAgICogVGhlIGNvb3JkaW5hdGVzIGFyZSByZWxhdGl2ZSB0byB0aGUgYXBwbGljYXRpb24ncyBjbGllbnQgYXJlYS5cbiAgICovXG4gIGFuY2hvclBvc2l0aW9uOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGxlZnQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICB0b3A6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZFxuICB9KSxcbiAgLyoqXG4gICAqIFRoaXMgZGV0ZXJtaW5lcyB3aGljaCBhbmNob3IgcHJvcCB0byByZWZlciB0byB3aGVuIHNldHRpbmdcbiAgICogdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3BvdmVyLlxuICAgKiBAZGVmYXVsdCAnYW5jaG9yRWwnXG4gICAqL1xuICBhbmNob3JSZWZlcmVuY2U6IFByb3BUeXBlcy5vbmVPZihbJ2FuY2hvckVsJywgJ2FuY2hvclBvc2l0aW9uJywgJ25vbmUnXSksXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCwgY29tcG9uZW50IGluc3RhbmNlLCBvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgZWl0aGVyLlxuICAgKiBUaGUgYGNvbnRhaW5lcmAgd2lsbCBwYXNzZWQgdG8gdGhlIE1vZGFsIGNvbXBvbmVudC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgYW5jaG9yRWwncyB0b3AtbGV2ZWwgZG9jdW1lbnQgb2JqZWN0LFxuICAgKiBzbyBpdCdzIHNpbXBseSBgZG9jdW1lbnQuYm9keWAgbW9zdCBvZiB0aGUgdGltZS5cbiAgICovXG4gIGNvbnRhaW5lcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtIVE1MRWxlbWVudFR5cGUsIFByb3BUeXBlcy5mdW5jXSksXG4gIC8qKlxuICAgKiBEaXNhYmxlIHRoZSBzY3JvbGwgbG9jayBiZWhhdmlvci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVTY3JvbGxMb2NrOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBlbGV2YXRpb24gb2YgdGhlIHBvcG92ZXIuXG4gICAqIEBkZWZhdWx0IDhcbiAgICovXG4gIGVsZXZhdGlvbjogaW50ZWdlclByb3BUeXBlLFxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyBjbG9zZSB0byB0aGUgZWRnZSBvZiB0aGUgd2luZG93IHRoZSBwb3BvdmVyIGNhbiBhcHBlYXIuXG4gICAqIElmIG51bGwsIHRoZSBwb3BvdmVyIHdpbGwgbm90IGJlIGNvbnN0cmFpbmVkIGJ5IHRoZSB3aW5kb3cuXG4gICAqIEBkZWZhdWx0IDE2XG4gICAqL1xuICBtYXJnaW5UaHJlc2hvbGQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgY2xvc2VkLlxuICAgKiBUaGUgYHJlYXNvbmAgcGFyYW1ldGVyIGNhbiBvcHRpb25hbGx5IGJlIHVzZWQgdG8gY29udHJvbCB0aGUgcmVzcG9uc2UgdG8gYG9uQ2xvc2VgLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BQYXBlcmBdKC9tYXRlcmlhbC11aS9hcGkvcGFwZXIvKSBlbGVtZW50LlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIGBzbG90UHJvcHMucGFwZXJgIGFuZCB3aWxsIGJlIG92ZXJyaWRlbiBieSBpdCBpZiBib3RoIGFyZSB1c2VkLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHNsb3RQcm9wcy5wYXBlcmAgaW5zdGVhZC5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIFBhcGVyUHJvcHM6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLnNoYXBlKHtcbiAgICBjb21wb25lbnQ6IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcGFwZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBwYXBlcjogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIHBvaW50IG9uIHRoZSBwb3BvdmVyIHdoaWNoXG4gICAqIHdpbGwgYXR0YWNoIHRvIHRoZSBhbmNob3IncyBvcmlnaW4uXG4gICAqXG4gICAqIE9wdGlvbnM6XG4gICAqIHZlcnRpY2FsOiBbdG9wLCBjZW50ZXIsIGJvdHRvbSwgeChweCldO1xuICAgKiBob3Jpem9udGFsOiBbbGVmdCwgY2VudGVyLCByaWdodCwgeChweCldLlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgdmVydGljYWw6ICd0b3AnLFxuICAgKiAgIGhvcml6b250YWw6ICdsZWZ0JyxcbiAgICogfVxuICAgKi9cbiAgdHJhbnNmb3JtT3JpZ2luOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGhvcml6b250YWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NlbnRlcicsICdsZWZ0JywgJ3JpZ2h0J10pLCBQcm9wVHlwZXMubnVtYmVyXSkuaXNSZXF1aXJlZCxcbiAgICB2ZXJ0aWNhbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYm90dG9tJywgJ2NlbnRlcicsICd0b3AnXSksIFByb3BUeXBlcy5udW1iZXJdKS5pc1JlcXVpcmVkXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgdHJhbnNpdGlvbi5cbiAgICogW0ZvbGxvdyB0aGlzIGd1aWRlXSgvbWF0ZXJpYWwtdWkvdHJhbnNpdGlvbnMvI3RyYW5zaXRpb25jb21wb25lbnQtcHJvcCkgdG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgcmVxdWlyZW1lbnRzIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgR3Jvd1xuICAgKi9cbiAgVHJhbnNpdGlvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogU2V0IHRvICdhdXRvJyB0byBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZSB0cmFuc2l0aW9uIHRpbWUgYmFzZWQgb24gaGVpZ2h0LlxuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIHRyYW5zaXRpb25EdXJhdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcHBlYXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW50ZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZXhpdDogUHJvcFR5cGVzLm51bWJlclxuICB9KV0pLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgdHJhbnNpdGlvbiBlbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgZWxlbWVudCBpcyBiYXNlZCBvbiB0aGlzIFtgVHJhbnNpdGlvbmBdKGh0dHA6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uLykgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgVHJhbnNpdGlvblByb3BzOiBQcm9wVHlwZXMub2JqZWN0XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUG9wb3ZlcjsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbnVVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aU1lbnUnLCBzbG90KTtcbn1cbmNvbnN0IG1lbnVDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpTWVudScsIFsncm9vdCcsICdwYXBlcicsICdsaXN0J10pO1xuZXhwb3J0IGRlZmF1bHQgbWVudUNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wib25FbnRlcmluZ1wiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcImF1dG9Gb2N1c1wiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZUF1dG9Gb2N1c0l0ZW1cIiwgXCJNZW51TGlzdFByb3BzXCIsIFwib25DbG9zZVwiLCBcIm9wZW5cIiwgXCJQYXBlclByb3BzXCIsIFwiUG9wb3ZlckNsYXNzZXNcIiwgXCJ0cmFuc2l0aW9uRHVyYXRpb25cIiwgXCJUcmFuc2l0aW9uUHJvcHNcIiwgXCJ2YXJpYW50XCIsIFwic2xvdHNcIiwgXCJzbG90UHJvcHNcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0ZyYWdtZW50IH0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgdXNlU2xvdFByb3BzIH0gZnJvbSAnQG11aS9iYXNlL3V0aWxzJztcbmltcG9ydCB7IEhUTUxFbGVtZW50VHlwZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IE1lbnVMaXN0IGZyb20gJy4uL01lbnVMaXN0JztcbmltcG9ydCBQb3BvdmVyLCB7IFBvcG92ZXJQYXBlciB9IGZyb20gJy4uL1BvcG92ZXInO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWUnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHsgZ2V0TWVudVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vbWVudUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IFJUTF9PUklHSU4gPSB7XG4gIHZlcnRpY2FsOiAndG9wJyxcbiAgaG9yaXpvbnRhbDogJ3JpZ2h0J1xufTtcbmNvbnN0IExUUl9PUklHSU4gPSB7XG4gIHZlcnRpY2FsOiAndG9wJyxcbiAgaG9yaXpvbnRhbDogJ2xlZnQnXG59O1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddLFxuICAgIHBhcGVyOiBbJ3BhcGVyJ10sXG4gICAgbGlzdDogWydsaXN0J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRNZW51VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBNZW51Um9vdCA9IHN0eWxlZChQb3BvdmVyLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlNZW51JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSh7fSk7XG5leHBvcnQgY29uc3QgTWVudVBhcGVyID0gc3R5bGVkKFBvcG92ZXJQYXBlciwge1xuICBuYW1lOiAnTXVpTWVudScsXG4gIHNsb3Q6ICdQYXBlcicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnBhcGVyXG59KSh7XG4gIC8vIHNwZWNaOiBUaGUgbWF4aW11bSBoZWlnaHQgb2YgYSBzaW1wbGUgbWVudSBzaG91bGQgYmUgb25lIG9yIG1vcmUgcm93cyBsZXNzIHRoYW4gdGhlIHZpZXdcbiAgLy8gaGVpZ2h0LiBUaGlzIGVuc3VyZXMgYSB0YXBwYWJsZSBhcmVhIG91dHNpZGUgb2YgdGhlIHNpbXBsZSBtZW51IHdpdGggd2hpY2ggdG8gZGlzbWlzc1xuICAvLyB0aGUgbWVudS5cbiAgbWF4SGVpZ2h0OiAnY2FsYygxMDAlIC0gOTZweCknLFxuICAvLyBBZGQgaU9TIG1vbWVudHVtIHNjcm9sbGluZyBmb3IgaU9TIDwgMTMuMFxuICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJ1xufSk7XG5jb25zdCBNZW51TWVudUxpc3QgPSBzdHlsZWQoTWVudUxpc3QsIHtcbiAgbmFtZTogJ011aU1lbnUnLFxuICBzbG90OiAnTGlzdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLmxpc3Rcbn0pKHtcbiAgLy8gV2UgZGlzYWJsZSB0aGUgZm9jdXMgcmluZyBmb3IgbW91c2UsIHRvdWNoIGFuZCBrZXlib2FyZCB1c2Vycy5cbiAgb3V0bGluZTogMFxufSk7XG5jb25zdCBNZW51ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTWVudShpblByb3BzLCByZWYpIHtcbiAgdmFyIF9zbG90cyRwYXBlciwgX3Nsb3RQcm9wcyRwYXBlcjtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpTWVudSdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGF1dG9Gb2N1cyA9IHRydWUsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRpc2FibGVBdXRvRm9jdXNJdGVtID0gZmFsc2UsXG4gICAgICBNZW51TGlzdFByb3BzID0ge30sXG4gICAgICBvbkNsb3NlLFxuICAgICAgb3BlbixcbiAgICAgIFBhcGVyUHJvcHMgPSB7fSxcbiAgICAgIFBvcG92ZXJDbGFzc2VzLFxuICAgICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gJ2F1dG8nLFxuICAgICAgVHJhbnNpdGlvblByb3BzOiB7XG4gICAgICAgIG9uRW50ZXJpbmdcbiAgICAgIH0gPSB7fSxcbiAgICAgIHZhcmlhbnQgPSAnc2VsZWN0ZWRNZW51JyxcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICBzbG90UHJvcHMgPSB7fVxuICAgIH0gPSBwcm9wcyxcbiAgICBUcmFuc2l0aW9uUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcy5UcmFuc2l0aW9uUHJvcHMsIF9leGNsdWRlZCksXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkMik7XG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcbiAgY29uc3QgaXNSdGwgPSB0aGVtZS5kaXJlY3Rpb24gPT09ICdydGwnO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgYXV0b0ZvY3VzLFxuICAgIGRpc2FibGVBdXRvRm9jdXNJdGVtLFxuICAgIE1lbnVMaXN0UHJvcHMsXG4gICAgb25FbnRlcmluZyxcbiAgICBQYXBlclByb3BzLFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICBUcmFuc2l0aW9uUHJvcHMsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBhdXRvRm9jdXNJdGVtID0gYXV0b0ZvY3VzICYmICFkaXNhYmxlQXV0b0ZvY3VzSXRlbSAmJiBvcGVuO1xuICBjb25zdCBtZW51TGlzdEFjdGlvbnNSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZUVudGVyaW5nID0gKGVsZW1lbnQsIGlzQXBwZWFyaW5nKSA9PiB7XG4gICAgaWYgKG1lbnVMaXN0QWN0aW9uc1JlZi5jdXJyZW50KSB7XG4gICAgICBtZW51TGlzdEFjdGlvbnNSZWYuY3VycmVudC5hZGp1c3RTdHlsZUZvclNjcm9sbGJhcihlbGVtZW50LCB0aGVtZSk7XG4gICAgfVxuICAgIGlmIChvbkVudGVyaW5nKSB7XG4gICAgICBvbkVudGVyaW5nKGVsZW1lbnQsIGlzQXBwZWFyaW5nKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUxpc3RLZXlEb3duID0gZXZlbnQgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgICAgb25DbG9zZShldmVudCwgJ3RhYktleURvd24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIHRoZSBpbmRleCBvZiB0aGUgaXRlbSBzaG91bGQgcmVjZWl2ZSBmb2N1c1xuICAgKiBpbiBhIGB2YXJpYW50PVwic2VsZWN0ZWRNZW51XCJgIGl0J3MgdGhlIGZpcnN0IGBzZWxlY3RlZGAgaXRlbVxuICAgKiBvdGhlcndpc2UgaXQncyB0aGUgdmVyeSBmaXJzdCBpdGVtLlxuICAgKi9cbiAgbGV0IGFjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAvLyBzaW5jZSB3ZSBpbmplY3QgZm9jdXMgcmVsYXRlZCBwcm9wcyBpbnRvIGNoaWxkcmVuIHdlIGhhdmUgdG8gZG8gYSBsb29rYWhlYWRcbiAgLy8gdG8gY2hlY2sgaWYgdGhlcmUgaXMgYSBgc2VsZWN0ZWRgIGl0ZW0uIFdlJ3JlIGxvb2tpbmcgZm9yIHRoZSBsYXN0IGBzZWxlY3RlZGBcbiAgLy8gaXRlbSBhbmQgdXNlIHRoZSBmaXJzdCB2YWxpZCBpdGVtIGFzIGEgZmFsbGJhY2tcbiAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgaWYgKCEgLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGlzRnJhZ21lbnQoY2hpbGQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW1wiTVVJOiBUaGUgTWVudSBjb21wb25lbnQgZG9lc24ndCBhY2NlcHQgYSBGcmFnbWVudCBhcyBhIGNoaWxkLlwiLCAnQ29uc2lkZXIgcHJvdmlkaW5nIGFuIGFycmF5IGluc3RlYWQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWNoaWxkLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICBpZiAodmFyaWFudCA9PT0gJ3NlbGVjdGVkTWVudScgJiYgY2hpbGQucHJvcHMuc2VsZWN0ZWQpIHtcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4ID0gaW5kZXg7XG4gICAgICB9IGVsc2UgaWYgKGFjdGl2ZUl0ZW1JbmRleCA9PT0gLTEpIHtcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgY29uc3QgUGFwZXJTbG90ID0gKF9zbG90cyRwYXBlciA9IHNsb3RzLnBhcGVyKSAhPSBudWxsID8gX3Nsb3RzJHBhcGVyIDogTWVudVBhcGVyO1xuICBjb25zdCBwYXBlckV4dGVybmFsU2xvdFByb3BzID0gKF9zbG90UHJvcHMkcGFwZXIgPSBzbG90UHJvcHMucGFwZXIpICE9IG51bGwgPyBfc2xvdFByb3BzJHBhcGVyIDogUGFwZXJQcm9wcztcbiAgY29uc3Qgcm9vdFNsb3RQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IHNsb3RzLnJvb3QsXG4gICAgZXh0ZXJuYWxTbG90UHJvcHM6IHNsb3RQcm9wcy5yb290LFxuICAgIG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBbY2xhc3Nlcy5yb290LCBjbGFzc05hbWVdXG4gIH0pO1xuICBjb25zdCBwYXBlclNsb3RQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IFBhcGVyU2xvdCxcbiAgICBleHRlcm5hbFNsb3RQcm9wczogcGFwZXJFeHRlcm5hbFNsb3RQcm9wcyxcbiAgICBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5wYXBlclxuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KE1lbnVSb290LCBfZXh0ZW5kcyh7XG4gICAgb25DbG9zZTogb25DbG9zZSxcbiAgICBhbmNob3JPcmlnaW46IHtcbiAgICAgIHZlcnRpY2FsOiAnYm90dG9tJyxcbiAgICAgIGhvcml6b250YWw6IGlzUnRsID8gJ3JpZ2h0JyA6ICdsZWZ0J1xuICAgIH0sXG4gICAgdHJhbnNmb3JtT3JpZ2luOiBpc1J0bCA/IFJUTF9PUklHSU4gOiBMVFJfT1JJR0lOLFxuICAgIHNsb3RzOiB7XG4gICAgICBwYXBlcjogUGFwZXJTbG90LFxuICAgICAgcm9vdDogc2xvdHMucm9vdFxuICAgIH0sXG4gICAgc2xvdFByb3BzOiB7XG4gICAgICByb290OiByb290U2xvdFByb3BzLFxuICAgICAgcGFwZXI6IHBhcGVyU2xvdFByb3BzXG4gICAgfSxcbiAgICBvcGVuOiBvcGVuLFxuICAgIHJlZjogcmVmLFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgIFRyYW5zaXRpb25Qcm9wczogX2V4dGVuZHMoe1xuICAgICAgb25FbnRlcmluZzogaGFuZGxlRW50ZXJpbmdcbiAgICB9LCBUcmFuc2l0aW9uUHJvcHMpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBQb3BvdmVyQ2xhc3NlcyxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goTWVudU1lbnVMaXN0LCBfZXh0ZW5kcyh7XG4gICAgICBvbktleURvd246IGhhbmRsZUxpc3RLZXlEb3duLFxuICAgICAgYWN0aW9uczogbWVudUxpc3RBY3Rpb25zUmVmLFxuICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMgJiYgKGFjdGl2ZUl0ZW1JbmRleCA9PT0gLTEgfHwgZGlzYWJsZUF1dG9Gb2N1c0l0ZW0pLFxuICAgICAgYXV0b0ZvY3VzSXRlbTogYXV0b0ZvY3VzSXRlbSxcbiAgICAgIHZhcmlhbnQ6IHZhcmlhbnRcbiAgICB9LCBNZW51TGlzdFByb3BzLCB7XG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5saXN0LCBNZW51TGlzdFByb3BzLmNsYXNzTmFtZSksXG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KSlcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBNZW51LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgb25lLlxuICAgKiBJdCdzIHVzZWQgdG8gc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgbWVudS5cbiAgICovXG4gIGFuY2hvckVsOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCAoRGVmYXVsdCkgd2lsbCBmb2N1cyB0aGUgYFtyb2xlPVwibWVudVwiXWAgaWYgbm8gZm9jdXNhYmxlIGNoaWxkIGlzIGZvdW5kLiBEaXNhYmxlZFxuICAgKiBjaGlsZHJlbiBhcmUgbm90IGZvY3VzYWJsZS4gSWYgeW91IHNldCB0aGlzIHByb3AgdG8gYGZhbHNlYCBmb2N1cyB3aWxsIGJlIHBsYWNlZFxuICAgKiBvbiB0aGUgcGFyZW50IG1vZGFsIGNvbnRhaW5lci4gVGhpcyBoYXMgc2V2ZXJlIGFjY2Vzc2liaWxpdHkgaW1wbGljYXRpb25zXG4gICAqIGFuZCBzaG91bGQgb25seSBiZSBjb25zaWRlcmVkIGlmIHlvdSBtYW5hZ2UgZm9jdXMgb3RoZXJ3aXNlLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTWVudSBjb250ZW50cywgbm9ybWFsbHkgYE1lbnVJdGVtYHMuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogV2hlbiBvcGVuaW5nIHRoZSBtZW51IHdpbGwgbm90IGZvY3VzIHRoZSBhY3RpdmUgaXRlbSBidXQgdGhlIGBbcm9sZT1cIm1lbnVcIl1gXG4gICAqIHVubGVzcyBgYXV0b0ZvY3VzYCBpcyBhbHNvIHNldCB0byBgZmFsc2VgLiBOb3QgdXNpbmcgdGhlIGRlZmF1bHQgbWVhbnMgbm90XG4gICAqIGZvbGxvd2luZyBXQUktQVJJQSBhdXRob3JpbmcgcHJhY3RpY2VzLiBQbGVhc2UgYmUgY29uc2lkZXJhdGUgYWJvdXQgcG9zc2libGVcbiAgICogYWNjZXNzaWJpbGl0eSBpbXBsaWNhdGlvbnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlQXV0b0ZvY3VzSXRlbTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYE1lbnVMaXN0YF0oL21hdGVyaWFsLXVpL2FwaS9tZW51LWxpc3QvKSBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgTWVudUxpc3RQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiBDYW4gYmU6IGBcImVzY2FwZUtleURvd25cImAsIGBcImJhY2tkcm9wQ2xpY2tcImAsIGBcInRhYktleURvd25cImAuXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBQYXBlclByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogYGNsYXNzZXNgIHByb3AgYXBwbGllZCB0byB0aGUgW2BQb3BvdmVyYF0oL21hdGVyaWFsLXVpL2FwaS9wb3BvdmVyLykgZWxlbWVudC5cbiAgICovXG4gIFBvcG92ZXJDbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcGFwZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBwYXBlcjogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSBsZW5ndGggb2YgdGhlIHRyYW5zaXRpb24gaW4gYG1zYCwgb3IgJ2F1dG8nXG4gICAqIEBkZWZhdWx0ICdhdXRvJ1xuICAgKi9cbiAgdHJhbnNpdGlvbkR1cmF0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFwcGVhcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBlbnRlcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBleGl0OiBQcm9wVHlwZXMubnVtYmVyXG4gIH0pXSksXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSB0cmFuc2l0aW9uIGVsZW1lbnQuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBlbGVtZW50IGlzIGJhc2VkIG9uIHRoaXMgW2BUcmFuc2l0aW9uYF0oaHR0cDovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24vKSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBUcmFuc2l0aW9uUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuIFVzZSBgbWVudWAgdG8gcHJldmVudCBzZWxlY3RlZCBpdGVtcyBmcm9tIGltcGFjdGluZyB0aGUgaW5pdGlhbCBmb2N1cy5cbiAgICogQGRlZmF1bHQgJ3NlbGVjdGVkTWVudSdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ21lbnUnLCAnc2VsZWN0ZWRNZW51J10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTWVudTsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5hdGl2ZVNlbGVjdFV0aWxpdHlDbGFzc2VzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlOYXRpdmVTZWxlY3QnLCBzbG90KTtcbn1cbmNvbnN0IG5hdGl2ZVNlbGVjdENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlOYXRpdmVTZWxlY3QnLCBbJ3Jvb3QnLCAnc2VsZWN0JywgJ211bHRpcGxlJywgJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCcsICdkaXNhYmxlZCcsICdpY29uJywgJ2ljb25PcGVuJywgJ2ljb25GaWxsZWQnLCAnaWNvbk91dGxpbmVkJywgJ2ljb25TdGFuZGFyZCcsICduYXRpdmVJbnB1dCcsICdlcnJvciddKTtcbmV4cG9ydCBkZWZhdWx0IG5hdGl2ZVNlbGVjdENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcIkljb25Db21wb25lbnRcIiwgXCJpbnB1dFJlZlwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyByZWZUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBuYXRpdmVTZWxlY3RDbGFzc2VzLCB7IGdldE5hdGl2ZVNlbGVjdFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9uYXRpdmVTZWxlY3RDbGFzc2VzJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgdmFyaWFudCxcbiAgICBkaXNhYmxlZCxcbiAgICBtdWx0aXBsZSxcbiAgICBvcGVuLFxuICAgIGVycm9yXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICBzZWxlY3Q6IFsnc2VsZWN0JywgdmFyaWFudCwgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgbXVsdGlwbGUgJiYgJ211bHRpcGxlJywgZXJyb3IgJiYgJ2Vycm9yJ10sXG4gICAgaWNvbjogWydpY29uJywgYGljb24ke2NhcGl0YWxpemUodmFyaWFudCl9YCwgb3BlbiAmJiAnaWNvbk9wZW4nLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldE5hdGl2ZVNlbGVjdFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbn07XG5leHBvcnQgY29uc3QgbmF0aXZlU2VsZWN0U2VsZWN0U3R5bGVzID0gKHtcbiAgb3duZXJTdGF0ZSxcbiAgdGhlbWVcbn0pID0+IF9leHRlbmRzKHtcbiAgTW96QXBwZWFyYW5jZTogJ25vbmUnLFxuICAvLyBSZXNldFxuICBXZWJraXRBcHBlYXJhbmNlOiAnbm9uZScsXG4gIC8vIFJlc2V0XG4gIC8vIFdoZW4gaW50ZXJhY3RpbmcgcXVpY2tseSwgdGhlIHRleHQgY2FuIGVuZCB1cCBzZWxlY3RlZC5cbiAgLy8gTmF0aXZlIHNlbGVjdCBjYW4ndCBiZSBzZWxlY3RlZCBlaXRoZXIuXG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgYm9yZGVyUmFkaXVzOiAwLFxuICAvLyBSZXNldFxuICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgJyY6Zm9jdXMnOiBfZXh0ZW5kcyh7fSwgdGhlbWUudmFycyA/IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLmNvbW1vbi5vbkJhY2tncm91bmRDaGFubmVsfSAvIDAuMDUpYFxuICB9IDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gJ3JnYmEoMCwgMCwgMCwgMC4wNSknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSknXG4gIH0sIHtcbiAgICBib3JkZXJSYWRpdXM6IDAgLy8gUmVzZXQgQ2hyb21lIHN0eWxlXG4gIH0pLFxuICAvLyBSZW1vdmUgSUUxMSBhcnJvd1xuICAnJjo6LW1zLWV4cGFuZCc6IHtcbiAgICBkaXNwbGF5OiAnbm9uZSdcbiAgfSxcbiAgW2AmLiR7bmF0aXZlU2VsZWN0Q2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGN1cnNvcjogJ2RlZmF1bHQnXG4gIH0sXG4gICcmW211bHRpcGxlXSc6IHtcbiAgICBoZWlnaHQ6ICdhdXRvJ1xuICB9LFxuICAnJjpub3QoW211bHRpcGxlXSkgb3B0aW9uLCAmOm5vdChbbXVsdGlwbGVdKSBvcHRncm91cCc6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmJhY2tncm91bmQucGFwZXJcbiAgfSxcbiAgLy8gQnVtcCBzcGVjaWZpY2l0eSB0byBhbGxvdyBleHRlbmRpbmcgY3VzdG9tIGlucHV0c1xuICAnJiYmJzoge1xuICAgIHBhZGRpbmdSaWdodDogMjQsXG4gICAgbWluV2lkdGg6IDE2IC8vIFNvIGl0IGRvZXNuJ3QgY29sbGFwc2UuXG4gIH1cbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2ZpbGxlZCcgJiYge1xuICAnJiYmJzoge1xuICAgIHBhZGRpbmdSaWdodDogMzJcbiAgfVxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgYm9yZGVyUmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICAnJjpmb2N1cyc6IHtcbiAgICBib3JkZXJSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMgLy8gUmVzZXQgdGhlIHJlc2V0IGZvciBDaHJvbWUgc3R5bGVcbiAgfSxcbiAgJyYmJic6IHtcbiAgICBwYWRkaW5nUmlnaHQ6IDMyXG4gIH1cbn0pO1xuY29uc3QgTmF0aXZlU2VsZWN0U2VsZWN0ID0gc3R5bGVkKCdzZWxlY3QnLCB7XG4gIG5hbWU6ICdNdWlOYXRpdmVTZWxlY3QnLFxuICBzbG90OiAnU2VsZWN0JyxcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHJvb3RTaG91bGRGb3J3YXJkUHJvcCxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5zZWxlY3QsIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdLCBvd25lclN0YXRlLmVycm9yICYmIHN0eWxlcy5lcnJvciwge1xuICAgICAgW2AmLiR7bmF0aXZlU2VsZWN0Q2xhc3Nlcy5tdWx0aXBsZX1gXTogc3R5bGVzLm11bHRpcGxlXG4gICAgfV07XG4gIH1cbn0pKG5hdGl2ZVNlbGVjdFNlbGVjdFN0eWxlcyk7XG5leHBvcnQgY29uc3QgbmF0aXZlU2VsZWN0SWNvblN0eWxlcyA9ICh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIC8vIFdlIHVzZSBhIHBvc2l0aW9uIGFic29sdXRlIG92ZXIgYSBmbGV4Ym94IGluIG9yZGVyIHRvIGZvcndhcmQgdGhlIHBvaW50ZXIgZXZlbnRzXG4gIC8vIHRvIHRoZSBpbnB1dCBhbmQgdG8gc3VwcG9ydCB3cmFwcGluZyB0YWdzLi5cbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHJpZ2h0OiAwLFxuICB0b3A6ICdjYWxjKDUwJSAtIC41ZW0pJyxcbiAgLy8gQ2VudGVyIHZlcnRpY2FsbHksIGhlaWdodCBpcyAxZW1cbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAvLyBEb24ndCBibG9jayBwb2ludGVyIGV2ZW50cyBvbiB0aGUgc2VsZWN0IHVuZGVyIHRoZSBpY29uLlxuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmFjdGl2ZSxcbiAgW2AmLiR7bmF0aXZlU2VsZWN0Q2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRcbiAgfVxufSwgb3duZXJTdGF0ZS5vcGVuICYmIHtcbiAgdHJhbnNmb3JtOiAncm90YXRlKDE4MGRlZyknXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdmaWxsZWQnICYmIHtcbiAgcmlnaHQ6IDdcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gIHJpZ2h0OiA3XG59KTtcbmNvbnN0IE5hdGl2ZVNlbGVjdEljb24gPSBzdHlsZWQoJ3N2ZycsIHtcbiAgbmFtZTogJ011aU5hdGl2ZVNlbGVjdCcsXG4gIHNsb3Q6ICdJY29uJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5pY29uLCBvd25lclN0YXRlLnZhcmlhbnQgJiYgc3R5bGVzW2BpY29uJHtjYXBpdGFsaXplKG93bmVyU3RhdGUudmFyaWFudCl9YF0sIG93bmVyU3RhdGUub3BlbiAmJiBzdHlsZXMuaWNvbk9wZW5dO1xuICB9XG59KShuYXRpdmVTZWxlY3RJY29uU3R5bGVzKTtcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBOYXRpdmVTZWxlY3RJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE5hdGl2ZVNlbGVjdElucHV0KHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBlcnJvcixcbiAgICAgIEljb25Db21wb25lbnQsXG4gICAgICBpbnB1dFJlZixcbiAgICAgIHZhcmlhbnQgPSAnc3RhbmRhcmQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBkaXNhYmxlZCxcbiAgICB2YXJpYW50LFxuICAgIGVycm9yXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KE5hdGl2ZVNlbGVjdFNlbGVjdCwgX2V4dGVuZHMoe1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnNlbGVjdCwgY2xhc3NOYW1lKSxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgIHJlZjogaW5wdXRSZWYgfHwgcmVmXG4gICAgfSwgb3RoZXIpKSwgcHJvcHMubXVsdGlwbGUgPyBudWxsIDogLyojX19QVVJFX18qL19qc3goTmF0aXZlU2VsZWN0SWNvbiwge1xuICAgICAgYXM6IEljb25Db21wb25lbnQsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmljb25cbiAgICB9KV1cbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE5hdGl2ZVNlbGVjdElucHV0LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFRoZSBvcHRpb24gZWxlbWVudHMgdG8gcG9wdWxhdGUgdGhlIHNlbGVjdCB3aXRoLlxuICAgKiBDYW4gYmUgc29tZSBgPG9wdGlvbj5gIGVsZW1lbnRzLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBTZWUgW0NTUyBBUEldKCNjc3MpIGJlbG93IGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIENTUyBjbGFzcyBuYW1lIG9mIHRoZSBzZWxlY3QgZWxlbWVudC5cbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHNlbGVjdCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBzZWxlY3QgaW5wdXRgIHdpbGwgaW5kaWNhdGUgYW4gZXJyb3IuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0aGF0IGRpc3BsYXlzIHRoZSBhcnJvdy5cbiAgICovXG4gIEljb25Db21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogVXNlIHRoYXQgcHJvcCB0byBwYXNzIGEgcmVmIHRvIHRoZSBuYXRpdmUgc2VsZWN0IGVsZW1lbnQuXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgc2VsZWN0YCBvciBoaWRkZW4gYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gYSBtZW51IGl0ZW0gaXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBpbnB1dCB2YWx1ZS5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnc3RhbmRhcmQnLCAnb3V0bGluZWQnLCAnZmlsbGVkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTmF0aXZlU2VsZWN0SW5wdXQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xudmFyIF9zcGFuO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc2VzXCIsIFwiY2xhc3NOYW1lXCIsIFwibGFiZWxcIiwgXCJub3RjaGVkXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgTm90Y2hlZE91dGxpbmVSb290ID0gc3R5bGVkKCdmaWVsZHNldCcsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHJvb3RTaG91bGRGb3J3YXJkUHJvcFxufSkoe1xuICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIGJvdHRvbTogMCxcbiAgcmlnaHQ6IDAsXG4gIHRvcDogLTUsXG4gIGxlZnQ6IDAsXG4gIG1hcmdpbjogMCxcbiAgcGFkZGluZzogJzAgOHB4JyxcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICBib3JkZXJSYWRpdXM6ICdpbmhlcml0JyxcbiAgYm9yZGVyU3R5bGU6ICdzb2xpZCcsXG4gIGJvcmRlcldpZHRoOiAxLFxuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIG1pbldpZHRoOiAnMCUnXG59KTtcbmNvbnN0IE5vdGNoZWRPdXRsaW5lTGVnZW5kID0gc3R5bGVkKCdsZWdlbmQnLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiByb290U2hvdWxkRm9yd2FyZFByb3Bcbn0pKCh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGZsb2F0OiAndW5zZXQnLFxuICAvLyBGaXggY29uZmxpY3Qgd2l0aCBib290c3RyYXBcbiAgd2lkdGg6ICdhdXRvJyxcbiAgLy8gRml4IGNvbmZsaWN0IHdpdGggYm9vdHN0cmFwXG4gIG92ZXJmbG93OiAnaGlkZGVuJ1xufSwgIW93bmVyU3RhdGUud2l0aExhYmVsICYmIHtcbiAgcGFkZGluZzogMCxcbiAgbGluZUhlaWdodDogJzExcHgnLFxuICAvLyBzeW5jIHdpdGggYGhlaWdodGAgaW4gYGxlZ2VuZGAgc3R5bGVzXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnd2lkdGgnLCB7XG4gICAgZHVyYXRpb246IDE1MCxcbiAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gIH0pXG59LCBvd25lclN0YXRlLndpdGhMYWJlbCAmJiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdibG9jaycsXG4gIC8vIEZpeCBjb25mbGljdCB3aXRoIG5vcm1hbGl6ZS5jc3MgYW5kIHNhbml0aXplLmNzc1xuICBwYWRkaW5nOiAwLFxuICBoZWlnaHQ6IDExLFxuICAvLyBzeW5jIHdpdGggYGxpbmVIZWlnaHRgIGluIGBsZWdlbmRgIHN0eWxlc1xuICBmb250U2l6ZTogJzAuNzVlbScsXG4gIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICBtYXhXaWR0aDogMC4wMSxcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdtYXgtd2lkdGgnLCB7XG4gICAgZHVyYXRpb246IDUwLFxuICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXRcbiAgfSksXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAnJiA+IHNwYW4nOiB7XG4gICAgcGFkZGluZ0xlZnQ6IDUsXG4gICAgcGFkZGluZ1JpZ2h0OiA1LFxuICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgIG9wYWNpdHk6IDAsXG4gICAgdmlzaWJpbGl0eTogJ3Zpc2libGUnXG4gIH1cbn0sIG93bmVyU3RhdGUubm90Y2hlZCAmJiB7XG4gIG1heFdpZHRoOiAnMTAwJScsXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnbWF4LXdpZHRoJywge1xuICAgIGR1cmF0aW9uOiAxMDAsXG4gICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dCxcbiAgICBkZWxheTogNTBcbiAgfSlcbn0pKSk7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTm90Y2hlZE91dGxpbmUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgbGFiZWwsXG4gICAgICBub3RjaGVkXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHdpdGhMYWJlbCA9IGxhYmVsICE9IG51bGwgJiYgbGFiZWwgIT09ICcnO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgbm90Y2hlZCxcbiAgICB3aXRoTGFiZWxcbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChOb3RjaGVkT3V0bGluZVJvb3QsIF9leHRlbmRzKHtcbiAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChOb3RjaGVkT3V0bGluZUxlZ2VuZCwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNoaWxkcmVuOiB3aXRoTGFiZWwgPyAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgICAgICBjaGlsZHJlbjogbGFiZWxcbiAgICAgIH0pIDogLy8gbm90cmFuc2xhdGUgbmVlZGVkIHdoaWxlIEdvb2dsZSBUcmFuc2xhdGUgd2lsbCBub3QgZml4IHplcm8td2lkdGggc3BhY2UgaXNzdWVcbiAgICAgIF9zcGFuIHx8IChfc3BhbiA9IC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJub3RyYW5zbGF0ZVwiLFxuICAgICAgICBjaGlsZHJlbjogXCJcXHUyMDBCXCJcbiAgICAgIH0pKVxuICAgIH0pXG4gIH0pKTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE5vdGNoZWRPdXRsaW5lLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIFNlZSBbQ1NTIEFQSV0oI2NzcykgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwuXG4gICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBvdXRsaW5lIGlzIG5vdGNoZWQgdG8gYWNjb21tb2RhdGUgdGhlIGxhYmVsLlxuICAgKi9cbiAgbm90Y2hlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0XG59IDogdm9pZCAwOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmltcG9ydCB7IGlucHV0QmFzZUNsYXNzZXMgfSBmcm9tICcuLi9JbnB1dEJhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE91dGxpbmVkSW5wdXRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aU91dGxpbmVkSW5wdXQnLCBzbG90KTtcbn1cbmNvbnN0IG91dGxpbmVkSW5wdXRDbGFzc2VzID0gX2V4dGVuZHMoe30sIGlucHV0QmFzZUNsYXNzZXMsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aU91dGxpbmVkSW5wdXQnLCBbJ3Jvb3QnLCAnbm90Y2hlZE91dGxpbmUnLCAnaW5wdXQnXSkpO1xuZXhwb3J0IGRlZmF1bHQgb3V0bGluZWRJbnB1dENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY29tcG9uZW50c1wiLCBcImZ1bGxXaWR0aFwiLCBcImlucHV0Q29tcG9uZW50XCIsIFwibGFiZWxcIiwgXCJtdWx0aWxpbmVcIiwgXCJub3RjaGVkXCIsIFwic2xvdHNcIiwgXCJ0eXBlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHJlZlR5cGUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBOb3RjaGVkT3V0bGluZSBmcm9tICcuL05vdGNoZWRPdXRsaW5lJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgb3V0bGluZWRJbnB1dENsYXNzZXMsIHsgZ2V0T3V0bGluZWRJbnB1dFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vb3V0bGluZWRJbnB1dENsYXNzZXMnO1xuaW1wb3J0IElucHV0QmFzZSwgeyByb290T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyLCBpbnB1dE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIsIElucHV0QmFzZVJvb3QsIElucHV0QmFzZUNvbXBvbmVudCBhcyBJbnB1dEJhc2VJbnB1dCB9IGZyb20gJy4uL0lucHV0QmFzZS9JbnB1dEJhc2UnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnXSxcbiAgICBub3RjaGVkT3V0bGluZTogWydub3RjaGVkT3V0bGluZSddLFxuICAgIGlucHV0OiBbJ2lucHV0J11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldE91dGxpbmVkSW5wdXRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuY29uc3QgT3V0bGluZWRJbnB1dFJvb3QgPSBzdHlsZWQoSW5wdXRCYXNlUm9vdCwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpT3V0bGluZWRJbnB1dCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IGlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgY29uc3QgYm9yZGVyQ29sb3IgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyAncmdiYSgwLCAwLCAwLCAwLjIzKScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIzKSc7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgYm9yZGVyUmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICAgIFtgJjpob3ZlciAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgYm9yZGVyQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQucHJpbWFyeVxuICAgIH0sXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBbYCY6aG92ZXIgLiR7b3V0bGluZWRJbnB1dENsYXNzZXMubm90Y2hlZE91dGxpbmV9YF06IHtcbiAgICAgICAgYm9yZGVyQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5jb21tb24ub25CYWNrZ3JvdW5kQ2hhbm5lbH0gLyAwLjIzKWAgOiBib3JkZXJDb2xvclxuICAgICAgfVxuICAgIH0sXG4gICAgW2AmLiR7b3V0bGluZWRJbnB1dENsYXNzZXMuZm9jdXNlZH0gLiR7b3V0bGluZWRJbnB1dENsYXNzZXMubm90Y2hlZE91dGxpbmV9YF06IHtcbiAgICAgIGJvcmRlckNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLFxuICAgICAgYm9yZGVyV2lkdGg6IDJcbiAgICB9LFxuICAgIFtgJi4ke291dGxpbmVkSW5wdXRDbGFzc2VzLmVycm9yfSAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgYm9yZGVyQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgICB9LFxuICAgIFtgJi4ke291dGxpbmVkSW5wdXRDbGFzc2VzLmRpc2FibGVkfSAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgYm9yZGVyQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZFxuICAgIH1cbiAgfSwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiB7XG4gICAgcGFkZGluZ0xlZnQ6IDE0XG4gIH0sIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHtcbiAgICBwYWRkaW5nUmlnaHQ6IDE0XG4gIH0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIF9leHRlbmRzKHtcbiAgICBwYWRkaW5nOiAnMTYuNXB4IDE0cHgnXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICAgcGFkZGluZzogJzguNXB4IDE0cHgnXG4gIH0pKTtcbn0pO1xuY29uc3QgTm90Y2hlZE91dGxpbmVSb290ID0gc3R5bGVkKE5vdGNoZWRPdXRsaW5lLCB7XG4gIG5hbWU6ICdNdWlPdXRsaW5lZElucHV0JyxcbiAgc2xvdDogJ05vdGNoZWRPdXRsaW5lJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMubm90Y2hlZE91dGxpbmVcbn0pKCh7XG4gIHRoZW1lXG59KSA9PiB7XG4gIGNvbnN0IGJvcmRlckNvbG9yID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gJ3JnYmEoMCwgMCwgMCwgMC4yMyknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMyknO1xuICByZXR1cm4ge1xuICAgIGJvcmRlckNvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUuY29tbW9uLm9uQmFja2dyb3VuZENoYW5uZWx9IC8gMC4yMylgIDogYm9yZGVyQ29sb3JcbiAgfTtcbn0pO1xuY29uc3QgT3V0bGluZWRJbnB1dElucHV0ID0gc3R5bGVkKElucHV0QmFzZUlucHV0LCB7XG4gIG5hbWU6ICdNdWlPdXRsaW5lZElucHV0JyxcbiAgc2xvdDogJ0lucHV0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBhZGRpbmc6ICcxNi41cHggMTRweCdcbn0sICF0aGVtZS52YXJzICYmIHtcbiAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICBXZWJraXRCb3hTaGFkb3c6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnMCAwIDAgMTAwcHggIzI2Njc5OCBpbnNldCcsXG4gICAgV2Via2l0VGV4dEZpbGxDb2xvcjogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcjZmZmJyxcbiAgICBjYXJldENvbG9yOiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJyNmZmYnLFxuICAgIGJvcmRlclJhZGl1czogJ2luaGVyaXQnXG4gIH1cbn0sIHRoZW1lLnZhcnMgJiYge1xuICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgIGJvcmRlclJhZGl1czogJ2luaGVyaXQnXG4gIH0sXG4gIFt0aGVtZS5nZXRDb2xvclNjaGVtZVNlbGVjdG9yKCdkYXJrJyldOiB7XG4gICAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICAgIFdlYmtpdEJveFNoYWRvdzogJzAgMCAwIDEwMHB4ICMyNjY3OTggaW5zZXQnLFxuICAgICAgV2Via2l0VGV4dEZpbGxDb2xvcjogJyNmZmYnLFxuICAgICAgY2FyZXRDb2xvcjogJyNmZmYnXG4gICAgfVxuICB9XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBwYWRkaW5nOiAnOC41cHggMTRweCdcbn0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIHtcbiAgcGFkZGluZzogMFxufSwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiB7XG4gIHBhZGRpbmdMZWZ0OiAwXG59LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiB7XG4gIHBhZGRpbmdSaWdodDogMFxufSkpO1xuY29uc3QgT3V0bGluZWRJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE91dGxpbmVkSW5wdXQoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfcmVmLCBfc2xvdHMkcm9vdCwgX3JlZjIsIF9zbG90cyRpbnB1dCwgX1JlYWN0JEZyYWdtZW50O1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlPdXRsaW5lZElucHV0J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY29tcG9uZW50cyA9IHt9LFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBpbnB1dENvbXBvbmVudCA9ICdpbnB1dCcsXG4gICAgICBsYWJlbCxcbiAgICAgIG11bHRpbGluZSA9IGZhbHNlLFxuICAgICAgbm90Y2hlZCxcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICB0eXBlID0gJ3RleHQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhwcm9wcyk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ2NvbG9yJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2ZvY3VzZWQnLCAnaGlkZGVuTGFiZWwnLCAnc2l6ZScsICdyZXF1aXJlZCddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3I6IGZjcy5jb2xvciB8fCAncHJpbWFyeScsXG4gICAgZGlzYWJsZWQ6IGZjcy5kaXNhYmxlZCxcbiAgICBlcnJvcjogZmNzLmVycm9yLFxuICAgIGZvY3VzZWQ6IGZjcy5mb2N1c2VkLFxuICAgIGZvcm1Db250cm9sOiBtdWlGb3JtQ29udHJvbCxcbiAgICBmdWxsV2lkdGgsXG4gICAgaGlkZGVuTGFiZWw6IGZjcy5oaWRkZW5MYWJlbCxcbiAgICBtdWx0aWxpbmUsXG4gICAgc2l6ZTogZmNzLnNpemUsXG4gICAgdHlwZVxuICB9KTtcbiAgY29uc3QgUm9vdFNsb3QgPSAoX3JlZiA9IChfc2xvdHMkcm9vdCA9IHNsb3RzLnJvb3QpICE9IG51bGwgPyBfc2xvdHMkcm9vdCA6IGNvbXBvbmVudHMuUm9vdCkgIT0gbnVsbCA/IF9yZWYgOiBPdXRsaW5lZElucHV0Um9vdDtcbiAgY29uc3QgSW5wdXRTbG90ID0gKF9yZWYyID0gKF9zbG90cyRpbnB1dCA9IHNsb3RzLmlucHV0KSAhPSBudWxsID8gX3Nsb3RzJGlucHV0IDogY29tcG9uZW50cy5JbnB1dCkgIT0gbnVsbCA/IF9yZWYyIDogT3V0bGluZWRJbnB1dElucHV0O1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goSW5wdXRCYXNlLCBfZXh0ZW5kcyh7XG4gICAgc2xvdHM6IHtcbiAgICAgIHJvb3Q6IFJvb3RTbG90LFxuICAgICAgaW5wdXQ6IElucHV0U2xvdFxuICAgIH0sXG4gICAgcmVuZGVyU3VmZml4OiBzdGF0ZSA9PiAvKiNfX1BVUkVfXyovX2pzeChOb3RjaGVkT3V0bGluZVJvb3QsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMubm90Y2hlZE91dGxpbmUsXG4gICAgICBsYWJlbDogbGFiZWwgIT0gbnVsbCAmJiBsYWJlbCAhPT0gJycgJiYgZmNzLnJlcXVpcmVkID8gX1JlYWN0JEZyYWdtZW50IHx8IChfUmVhY3QkRnJhZ21lbnQgPSAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICAgICAgY2hpbGRyZW46IFtsYWJlbCwgXCJcXHUyMDA5XCIsICcqJ11cbiAgICAgIH0pKSA6IGxhYmVsLFxuICAgICAgbm90Y2hlZDogdHlwZW9mIG5vdGNoZWQgIT09ICd1bmRlZmluZWQnID8gbm90Y2hlZCA6IEJvb2xlYW4oc3RhdGUuc3RhcnRBZG9ybm1lbnQgfHwgc3RhdGUuZmlsbGVkIHx8IHN0YXRlLmZvY3VzZWQpXG4gICAgfSksXG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgaW5wdXRDb21wb25lbnQ6IGlucHV0Q29tcG9uZW50LFxuICAgIG11bHRpbGluZTogbXVsdGlsaW5lLFxuICAgIHJlZjogcmVmLFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBfZXh0ZW5kcyh7fSwgY2xhc3Nlcywge1xuICAgICAgbm90Y2hlZE91dGxpbmU6IG51bGxcbiAgICB9KVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE91dGxpbmVkSW5wdXQucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhpcyBwcm9wIGhlbHBzIHVzZXJzIHRvIGZpbGwgZm9ybXMgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIG1vYmlsZSBkZXZpY2VzLlxuICAgKiBUaGUgbmFtZSBjYW4gYmUgY29uZnVzaW5nLCBhcyBpdCdzIG1vcmUgbGlrZSBhbiBhdXRvZmlsbC5cbiAgICogWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IGl0IFtmb2xsb3dpbmcgdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2F1dG9maWxsKS5cbiAgICovXG4gIGF1dG9Db21wbGV0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdwcmltYXJ5J2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90c2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90c2AgcHJvcCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBJbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRW5kIGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgZW5kQWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCBpbmRpY2F0ZSBhbiBlcnJvci5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2lucHV0J1xuICAgKi9cbiAgaW5wdXRDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogVGhlIGxhYmVsIG9mIHRoZSBgaW5wdXRgLiBJdCBpcyBvbmx5IHVzZWQgZm9yIGxheW91dC4gVGhlIGFjdHVhbCBsYWJlbGxpbmdcbiAgICogaXMgaGFuZGxlZCBieSBgSW5wdXRMYWJlbGAuXG4gICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdub25lJ2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJ10pLFxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1heFJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtaW5Sb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgW1RleHRhcmVhQXV0b3NpemVdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0YXJlYS1hdXRvc2l6ZS8pIGVsZW1lbnQgaXMgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aWxpbmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBvdXRsaW5lIGlzIG5vdGNoZWQgdG8gYWNjb21tb2RhdGUgdGhlIGxhYmVsLlxuICAgKi9cbiAgbm90Y2hlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBIVE1MSW5wdXRFbGVtZW50Pn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgc2hvcnQgaGludCBkaXNwbGF5ZWQgaW4gdGhlIGBpbnB1dGAgYmVmb3JlIHRoZSB1c2VyIGVudGVycyBhIHZhbHVlLlxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJdCBwcmV2ZW50cyB0aGUgdXNlciBmcm9tIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGRcbiAgICogKG5vdCBmcm9tIGludGVyYWN0aW5nIHdpdGggdGhlIGZpZWxkKS5cbiAgICovXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBTdGFydCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIHN0YXJ0QWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC4gSXQgc2hvdWxkIGJlIFthIHZhbGlkIEhUTUw1IGlucHV0IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNGb3JtXyUzQ2lucHV0JTNFX3R5cGVzKS5cbiAgICogQGRlZmF1bHQgJ3RleHQnXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHJlcXVpcmVkIGZvciBhIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5PdXRsaW5lZElucHV0Lm11aU5hbWUgPSAnSW5wdXQnO1xuZXhwb3J0IGRlZmF1bHQgT3V0bGluZWRJbnB1dDsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcGVyVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlQYXBlcicsIHNsb3QpO1xufVxuY29uc3QgcGFwZXJDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpUGFwZXInLCBbJ3Jvb3QnLCAncm91bmRlZCcsICdvdXRsaW5lZCcsICdlbGV2YXRpb24nLCAnZWxldmF0aW9uMCcsICdlbGV2YXRpb24xJywgJ2VsZXZhdGlvbjInLCAnZWxldmF0aW9uMycsICdlbGV2YXRpb240JywgJ2VsZXZhdGlvbjUnLCAnZWxldmF0aW9uNicsICdlbGV2YXRpb243JywgJ2VsZXZhdGlvbjgnLCAnZWxldmF0aW9uOScsICdlbGV2YXRpb24xMCcsICdlbGV2YXRpb24xMScsICdlbGV2YXRpb24xMicsICdlbGV2YXRpb24xMycsICdlbGV2YXRpb24xNCcsICdlbGV2YXRpb24xNScsICdlbGV2YXRpb24xNicsICdlbGV2YXRpb24xNycsICdlbGV2YXRpb24xOCcsICdlbGV2YXRpb24xOScsICdlbGV2YXRpb24yMCcsICdlbGV2YXRpb24yMScsICdlbGV2YXRpb24yMicsICdlbGV2YXRpb24yMycsICdlbGV2YXRpb24yNCddKTtcbmV4cG9ydCBkZWZhdWx0IHBhcGVyQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJlbGV2YXRpb25cIiwgXCJzcXVhcmVcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgY2hhaW5Qcm9wVHlwZXMsIGludGVnZXJQcm9wVHlwZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgYWxwaGEgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IGdldE92ZXJsYXlBbHBoYSBmcm9tICcuLi9zdHlsZXMvZ2V0T3ZlcmxheUFscGhhJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWUnO1xuaW1wb3J0IHsgZ2V0UGFwZXJVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3BhcGVyQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIHNxdWFyZSxcbiAgICBlbGV2YXRpb24sXG4gICAgdmFyaWFudCxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCB2YXJpYW50LCAhc3F1YXJlICYmICdyb3VuZGVkJywgdmFyaWFudCA9PT0gJ2VsZXZhdGlvbicgJiYgYGVsZXZhdGlvbiR7ZWxldmF0aW9ufWBdXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0UGFwZXJVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IFBhcGVyUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpUGFwZXInLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sICFvd25lclN0YXRlLnNxdWFyZSAmJiBzdHlsZXMucm91bmRlZCwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZWxldmF0aW9uJyAmJiBzdHlsZXNbYGVsZXZhdGlvbiR7b3duZXJTdGF0ZS5lbGV2YXRpb259YF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICB2YXIgX3RoZW1lJHZhcnMkb3ZlcmxheXM7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5iYWNrZ3JvdW5kLnBhcGVyLFxuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnByaW1hcnksXG4gICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdib3gtc2hhZG93JylcbiAgfSwgIW93bmVyU3RhdGUuc3F1YXJlICYmIHtcbiAgICBib3JkZXJSYWRpdXM6IHRoZW1lLnNoYXBlLmJvcmRlclJhZGl1c1xuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICAgIGJvcmRlcjogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmRpdmlkZXJ9YFxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdlbGV2YXRpb24nICYmIF9leHRlbmRzKHtcbiAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzW293bmVyU3RhdGUuZWxldmF0aW9uXVxuICB9LCAhdGhlbWUudmFycyAmJiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdkYXJrJyAmJiB7XG4gICAgYmFja2dyb3VuZEltYWdlOiBgbGluZWFyLWdyYWRpZW50KCR7YWxwaGEoJyNmZmYnLCBnZXRPdmVybGF5QWxwaGEob3duZXJTdGF0ZS5lbGV2YXRpb24pKX0sICR7YWxwaGEoJyNmZmYnLCBnZXRPdmVybGF5QWxwaGEob3duZXJTdGF0ZS5lbGV2YXRpb24pKX0pYFxuICB9LCB0aGVtZS52YXJzICYmIHtcbiAgICBiYWNrZ3JvdW5kSW1hZ2U6IChfdGhlbWUkdmFycyRvdmVybGF5cyA9IHRoZW1lLnZhcnMub3ZlcmxheXMpID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdmFycyRvdmVybGF5c1tvd25lclN0YXRlLmVsZXZhdGlvbl1cbiAgfSkpO1xufSk7XG5jb25zdCBQYXBlciA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFBhcGVyKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlQYXBlcidcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgICAgZWxldmF0aW9uID0gMSxcbiAgICAgIHNxdWFyZSA9IGZhbHNlLFxuICAgICAgdmFyaWFudCA9ICdlbGV2YXRpb24nXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb21wb25lbnQsXG4gICAgZWxldmF0aW9uLFxuICAgIHNxdWFyZSxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICAgIGlmICh0aGVtZS5zaGFkb3dzW2VsZXZhdGlvbl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIGVsZXZhdGlvbiBwcm92aWRlZCA8UGFwZXIgZWxldmF0aW9uPXske2VsZXZhdGlvbn19PiBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSB0aGVtZS5gLCBgUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IFxcYHRoZW1lLnNoYWRvd3NbJHtlbGV2YXRpb259XVxcYCBpcyBkZWZpbmVkLmBdLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFBhcGVyUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyKSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFBhcGVyLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBTaGFkb3cgZGVwdGgsIGNvcnJlc3BvbmRzIHRvIGBkcGAgaW4gdGhlIHNwZWMuXG4gICAqIEl0IGFjY2VwdHMgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjQgaW5jbHVzaXZlLlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICBlbGV2YXRpb246IGNoYWluUHJvcFR5cGVzKGludGVnZXJQcm9wVHlwZSwgcHJvcHMgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGVsZXZhdGlvbixcbiAgICAgIHZhcmlhbnRcbiAgICB9ID0gcHJvcHM7XG4gICAgaWYgKGVsZXZhdGlvbiA+IDAgJiYgdmFyaWFudCA9PT0gJ291dGxpbmVkJykge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihgTVVJOiBDb21iaW5pbmcgXFxgZWxldmF0aW9uPXske2VsZXZhdGlvbn19XFxgIHdpdGggXFxgdmFyaWFudD1cIiR7dmFyaWFudH1cIlxcYCBoYXMgbm8gZWZmZWN0LiBFaXRoZXIgdXNlIFxcYGVsZXZhdGlvbj17MH1cXGAgb3IgdXNlIGEgZGlmZmVyZW50IFxcYHZhcmlhbnRcXGAuYCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9KSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgcm91bmRlZCBjb3JuZXJzIGFyZSBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNxdWFyZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdlbGV2YXRpb24nXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2VsZXZhdGlvbicsICdvdXRsaW5lZCddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUGFwZXI7Il0sIm5hbWVzIjpbImdldEZpbGxlZElucHV0VXRpbGl0eUNsYXNzIiwic2xvdCIsImdlbmVyYXRlVXRpbGl0eUNsYXNzIiwiaW5wdXRCYXNlQ2xhc3NlcyIsImdlbmVyYXRlVXRpbGl0eUNsYXNzZXMiLCJfZXhjbHVkZWQiLCJGaWxsZWRJbnB1dFJvb3QiLCJzdHlsZWQiLCJJbnB1dEJhc2UiLCJzaG91bGRGb3J3YXJkUHJvcCIsInByb3AiLCJuYW1lIiwib3ZlcnJpZGVzUmVzb2x2ZXIiLCJwcm9wcyIsInN0eWxlcyIsIm93bmVyU3RhdGUiLCJkaXNhYmxlVW5kZXJsaW5lIiwidW5kZXJsaW5lIiwidGhlbWUiLCJfcGFsZXR0ZSIsImxpZ2h0IiwicGFsZXR0ZSIsIm1vZGUiLCJib3R0b21MaW5lQ29sb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLCJob3ZlckJhY2tncm91bmQiLCJkaXNhYmxlZEJhY2tncm91bmQiLCJwb3NpdGlvbiIsInZhcnMiLCJGaWxsZWRJbnB1dCIsImJnIiwiYm9yZGVyVG9wTGVmdFJhZGl1cyIsInNoYXBlIiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyVG9wUmlnaHRSYWRpdXMiLCJ0cmFuc2l0aW9uIiwidHJhbnNpdGlvbnMiLCJjcmVhdGUiLCJkdXJhdGlvbiIsInNob3J0ZXIiLCJlYXNpbmciLCJlYXNlT3V0IiwiaG92ZXJCZyIsImZvY3VzZWQiLCJkaXNhYmxlZCIsImRpc2FibGVkQmciLCJib3JkZXJCb3R0b20iLCJjb2xvciIsIm1haW4iLCJsZWZ0IiwiYm90dG9tIiwiY29udGVudCIsInJpZ2h0IiwidHJhbnNmb3JtIiwicG9pbnRlckV2ZW50cyIsImVycm9yIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJjb21tb24iLCJvbkJhY2tncm91bmRDaGFubmVsIiwib3BhY2l0eSIsImlucHV0VW5kZXJsaW5lIiwidGV4dCIsInByaW1hcnkiLCJib3JkZXJCb3R0b21TdHlsZSIsInN0YXJ0QWRvcm5tZW50IiwicGFkZGluZ0xlZnQiLCJlbmRBZG9ybm1lbnQiLCJwYWRkaW5nUmlnaHQiLCJtdWx0aWxpbmUiLCJwYWRkaW5nIiwic2l6ZSIsInBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIiwiaGlkZGVuTGFiZWwiLCJGaWxsZWRJbnB1dElucHV0IiwiV2Via2l0Qm94U2hhZG93IiwiV2Via2l0VGV4dEZpbGxDb2xvciIsImNhcmV0Q29sb3IiLCJnZXRDb2xvclNjaGVtZVNlbGVjdG9yIiwiaW5Qcm9wcyIsInJlZiIsIl9yZWYiLCJfc2xvdHMkcm9vdCIsIl9yZWYyIiwiX3Nsb3RzJGlucHV0IiwidXNlVGhlbWVQcm9wcyIsImNvbXBvbmVudHMiLCJjb21wb25lbnRzUHJvcHMiLCJjb21wb25lbnRzUHJvcHNQcm9wIiwiZnVsbFdpZHRoIiwiaW5wdXRDb21wb25lbnQiLCJzbG90UHJvcHMiLCJzbG90cyIsInR5cGUiLCJvdGhlciIsImNsYXNzZXMiLCJyb290IiwiaW5wdXQiLCJjb21wb3NlZENsYXNzZXMiLCJjb21wb3NlQ2xhc3NlcyIsInVzZVV0aWxpdHlDbGFzc2VzIiwiZmlsbGVkSW5wdXRDb21wb25lbnRzUHJvcHMiLCJkZWVwbWVyZ2UiLCJSb290U2xvdCIsIlJvb3QiLCJJbnB1dFNsb3QiLCJJbnB1dCIsIm11aU5hbWUiLCJnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzIiwiRm9ybUNvbnRyb2xSb290IiwiY2FwaXRhbGl6ZSIsIm1hcmdpbiIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwibWluV2lkdGgiLCJib3JkZXIiLCJ2ZXJ0aWNhbEFsaWduIiwibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIiwid2lkdGgiLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsImNvbXBvbmVudCIsInZpc3VhbGx5Rm9jdXNlZCIsInJlcXVpcmVkIiwidmFyaWFudCIsImFkb3JuZWRTdGFydCIsInNldEFkb3JuZWRTdGFydCIsImluaXRpYWxBZG9ybmVkU3RhcnQiLCJmb3JFYWNoIiwiY2hpbGQiLCJpc011aUVsZW1lbnQiLCJmaWxsZWQiLCJzZXRGaWxsZWQiLCJpbml0aWFsRmlsbGVkIiwiaW5wdXRQcm9wcyIsImZvY3VzZWRTdGF0ZSIsInNldEZvY3VzZWQiLCJ1bmRlZmluZWQiLCJyZWdpc3RlckVmZmVjdCIsImNoaWxkQ29udGV4dCIsIm9uQmx1ciIsIm9uRW1wdHkiLCJvbkZpbGxlZCIsIm9uRm9jdXMiLCJGb3JtQ29udHJvbENvbnRleHQiLCJQcm92aWRlciIsInZhbHVlIiwiYXMiLCJjbHN4IiwiZm9ybUNvbnRyb2xTdGF0ZSIsInN0YXRlcyIsIm11aUZvcm1Db250cm9sIiwicmVkdWNlIiwiYWNjIiwic3RhdGUiLCJ1c2VGb3JtQ29udHJvbCIsImdldEZvcm1IZWxwZXJUZXh0VXRpbGl0eUNsYXNzZXMiLCJfc3BhbiIsIkZvcm1IZWxwZXJUZXh0Um9vdCIsImNvbnRhaW5lZCIsInNlY29uZGFyeSIsInR5cG9ncmFwaHkiLCJjYXB0aW9uIiwidGV4dEFsaWduIiwibWFyZ2luUmlnaHQiLCJtYXJnaW5MZWZ0IiwiZmNzIiwiZGVmYXVsdFRoZW1lIiwidGhlbWVJZCIsImdldEdyaWRVdGlsaXR5Q2xhc3MiLCJHUklEX1NJWkVTIiwibWFwIiwic3BhY2luZyIsImRpcmVjdGlvbiIsIndyYXAiLCJnZXRPZmZzZXQiLCJ2YWwiLCJwYXJzZSIsInBhcnNlRmxvYXQiLCJTdHJpbmciLCJyZXBsYWNlIiwiZXh0cmFjdFplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzIiwiYnJlYWtwb2ludHMiLCJ2YWx1ZXMiLCJub25aZXJvS2V5IiwiT2JqZWN0Iiwia2V5cyIsImtleSIsInNvcnRlZEJyZWFrcG9pbnRLZXlzQnlWYWx1ZSIsInNvcnQiLCJhIiwiYiIsInNsaWNlIiwiaW5kZXhPZiIsIkdyaWRSb290IiwiY29udGFpbmVyIiwiaXRlbSIsInplcm9NaW5XaWR0aCIsInNwYWNpbmdTdHlsZXMiLCJOdW1iZXIiLCJpc05hTiIsImJyZWFrcG9pbnQiLCJwdXNoIiwicmVzb2x2ZVNwYWNpbmdTdHlsZXMiLCJicmVha3BvaW50c1N0eWxlcyIsImJveFNpemluZyIsImZsZXhXcmFwIiwiZGlyZWN0aW9uVmFsdWVzIiwicHJvcFZhbHVlIiwib3V0cHV0IiwibWF4V2lkdGgiLCJyb3dTcGFjaW5nIiwicm93U3BhY2luZ1ZhbHVlcyIsInplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzIiwiX3plcm9WYWx1ZUJyZWFrcG9pbnRLIiwidGhlbWVTcGFjaW5nIiwiaW5jbHVkZXMiLCJjb2x1bW5TcGFjaW5nIiwiY29sdW1uU3BhY2luZ1ZhbHVlcyIsIl96ZXJvVmFsdWVCcmVha3BvaW50SzIiLCJnbG9iYWxTdHlsZXMiLCJmbGV4QmFzaXMiLCJmbGV4R3JvdyIsImZsZXhTaHJpbmsiLCJjb2x1bW5zQnJlYWtwb2ludFZhbHVlcyIsImNvbHVtbnMiLCJjb2x1bW5WYWx1ZSIsIk1hdGgiLCJyb3VuZCIsIm1vcmUiLCJhc3NpZ24iLCJ1cCIsIkdyaWQiLCJ0aGVtZVByb3BzIiwidXNlVGhlbWUiLCJleHRlbmRTeFByb3AiLCJjb2x1bW5zUHJvcCIsImNvbHVtblNwYWNpbmdQcm9wIiwicm93U3BhY2luZ1Byb3AiLCJjb2x1bW5zQ29udGV4dCIsImJyZWFrcG9pbnRzVmFsdWVzIiwib3RoZXJGaWx0ZXJlZCIsInNwYWNpbmdDbGFzc2VzIiwicmVzb2x2ZVNwYWNpbmdDbGFzc2VzIiwiYnJlYWtwb2ludHNDbGFzc2VzIiwiZ2V0SW5wdXRVdGlsaXR5Q2xhc3MiLCJJbnB1dFJvb3QiLCJmb3JtQ29udHJvbCIsIklucHV0SW5wdXQiLCJpbnB1dENvbXBvbmVudHNQcm9wcyIsInJvb3RPdmVycmlkZXNSZXNvbHZlciIsImFkb3JuZWRFbmQiLCJzaXplU21hbGwiLCJpbnB1dE92ZXJyaWRlc1Jlc29sdmVyIiwiaW5wdXRTaXplU21hbGwiLCJpbnB1dE11bHRpbGluZSIsImlucHV0VHlwZVNlYXJjaCIsImlucHV0QWRvcm5lZFN0YXJ0IiwiaW5wdXRBZG9ybmVkRW5kIiwiaW5wdXRIaWRkZW5MYWJlbCIsIklucHV0QmFzZVJvb3QiLCJib2R5MSIsImxpbmVIZWlnaHQiLCJjdXJzb3IiLCJhbGlnbkl0ZW1zIiwiSW5wdXRCYXNlQ29tcG9uZW50IiwicGxhY2Vob2xkZXIiLCJpbnB1dFBsYWNlaG9sZGVyIiwicGxhY2Vob2xkZXJIaWRkZW4iLCJwbGFjZWhvbGRlclZpc2libGUiLCJmb250IiwibGV0dGVyU3BhY2luZyIsImJhY2tncm91bmQiLCJoZWlnaHQiLCJXZWJraXRUYXBIaWdobGlnaHRDb2xvciIsImFuaW1hdGlvbk5hbWUiLCJhbmltYXRpb25EdXJhdGlvbiIsIm91dGxpbmUiLCJib3hTaGFkb3ciLCJXZWJraXRBcHBlYXJhbmNlIiwicmVzaXplIiwiTW96QXBwZWFyYW5jZSIsImlucHV0R2xvYmFsU3R5bGVzIiwiZnJvbSIsIl9zbG90UHJvcHMkaW5wdXQiLCJhcmlhRGVzY3JpYmVkYnkiLCJhdXRvQ29tcGxldGUiLCJhdXRvRm9jdXMiLCJkZWZhdWx0VmFsdWUiLCJkaXNhYmxlSW5qZWN0aW5nR2xvYmFsU3R5bGVzIiwiaWQiLCJpbnB1dFByb3BzUHJvcCIsImlucHV0UmVmIiwiaW5wdXRSZWZQcm9wIiwibWF4Um93cyIsIm1pblJvd3MiLCJvbkNoYW5nZSIsIm9uQ2xpY2siLCJvbktleURvd24iLCJvbktleVVwIiwicmVhZE9ubHkiLCJyZW5kZXJTdWZmaXgiLCJyb3dzIiwidmFsdWVQcm9wIiwiY3VycmVudCIsImlzQ29udHJvbGxlZCIsImhhbmRsZUlucHV0UmVmV2FybmluZyIsImluc3RhbmNlIiwiaGFuZGxlSW5wdXRSZWYiLCJjaGVja0RpcnR5Iiwib2JqIiwiSW5wdXRDb21wb25lbnQiLCJCb29sZWFuIiwicm9vdFByb3BzIiwiZXZlbnQiLCJjdXJyZW50VGFyZ2V0IiwidGFyZ2V0IiwiZm9jdXMiLCJvbkFuaW1hdGlvblN0YXJ0IiwiYXJncyIsImVsZW1lbnQiLCJFcnJvciIsInN0b3BQcm9wYWdhdGlvbiIsImdldElucHV0QmFzZVV0aWxpdHlDbGFzcyIsImhhc1ZhbHVlIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiaXNGaWxsZWQiLCJTU1IiLCJpc0Fkb3JuZWRTdGFydCIsImdldEZvcm1MYWJlbFV0aWxpdHlDbGFzc2VzIiwiRm9ybUxhYmVsUm9vdCIsImNvbG9yU2Vjb25kYXJ5IiwiQXN0ZXJpc2tDb21wb25lbnQiLCJhc3RlcmlzayIsImdldElucHV0TGFiZWxVdGlsaXR5Q2xhc3NlcyIsIklucHV0TGFiZWxSb290Iiwic2hyaW5rIiwiZGlzYWJsZUFuaW1hdGlvbiIsImFuaW1hdGVkIiwidHJhbnNmb3JtT3JpZ2luIiwid2hpdGVTcGFjZSIsIm92ZXJmbG93IiwidGV4dE92ZXJmbG93IiwidG9wIiwiekluZGV4IiwidXNlclNlbGVjdCIsInNocmlua1Byb3AiLCJnZXRMaXN0VXRpbGl0eUNsYXNzIiwiTGlzdFJvb3QiLCJkaXNhYmxlUGFkZGluZyIsImRlbnNlIiwic3ViaGVhZGVyIiwibGlzdFN0eWxlIiwiY29udGV4dCIsIm5leHRJdGVtIiwibGlzdCIsImRpc2FibGVMaXN0V3JhcCIsImZpcnN0Q2hpbGQiLCJuZXh0RWxlbWVudFNpYmxpbmciLCJwcmV2aW91c0l0ZW0iLCJsYXN0Q2hpbGQiLCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwidGV4dENyaXRlcmlhTWF0Y2hlcyIsIm5leHRGb2N1cyIsInRleHRDcml0ZXJpYSIsImlubmVyVGV4dCIsInRleHRDb250ZW50IiwidHJpbSIsInRvTG93ZXJDYXNlIiwicmVwZWF0aW5nIiwiam9pbiIsIm1vdmVGb2N1cyIsImN1cnJlbnRGb2N1cyIsImRpc2FibGVkSXRlbXNGb2N1c2FibGUiLCJ0cmF2ZXJzYWxGdW5jdGlvbiIsIndyYXBwZWRPbmNlIiwibmV4dEZvY3VzRGlzYWJsZWQiLCJnZXRBdHRyaWJ1dGUiLCJoYXNBdHRyaWJ1dGUiLCJhY3Rpb25zIiwiYXV0b0ZvY3VzSXRlbSIsImxpc3RSZWYiLCJ0ZXh0Q3JpdGVyaWFSZWYiLCJwcmV2aW91c0tleU1hdGNoZWQiLCJsYXN0VGltZSIsInVzZUVuaGFuY2VkRWZmZWN0IiwiYWRqdXN0U3R5bGVGb3JTY3JvbGxiYXIiLCJjb250YWluZXJFbGVtZW50Iiwibm9FeHBsaWNpdFdpZHRoIiwic3R5bGUiLCJjbGllbnRIZWlnaHQiLCJzY3JvbGxiYXJTaXplIiwiZ2V0U2Nyb2xsYmFyU2l6ZSIsIm93bmVyRG9jdW1lbnQiLCJoYW5kbGVSZWYiLCJ1c2VGb3JrUmVmIiwiYWN0aXZlSXRlbUluZGV4IiwiaW5kZXgiLCJzZWxlY3RlZCIsIm11aVNraXBMaXN0SGlnaGxpZ2h0IiwiaXRlbXMiLCJuZXdDaGlsZFByb3BzIiwidGFiSW5kZXgiLCJyb2xlIiwiYWN0aXZlRWxlbWVudCIsInByZXZlbnREZWZhdWx0IiwiY3JpdGVyaWEiLCJsb3dlcktleSIsImN1cnJUaW1lIiwicGVyZm9ybWFuY2UiLCJub3ciLCJrZWVwRm9jdXNPbkN1cnJlbnQiLCJnZXRTY2FsZSIsImVudGVyaW5nIiwiZW50ZXJlZCIsImlzV2ViS2l0MTU0IiwibmF2aWdhdG9yIiwidGVzdCIsInVzZXJBZ2VudCIsIkdyb3ciLCJhZGRFbmRMaXN0ZW5lciIsImFwcGVhciIsImluIiwiaW5Qcm9wIiwib25FbnRlciIsIm9uRW50ZXJlZCIsIm9uRW50ZXJpbmciLCJvbkV4aXQiLCJvbkV4aXRlZCIsIm9uRXhpdGluZyIsInRpbWVvdXQiLCJUcmFuc2l0aW9uQ29tcG9uZW50IiwiVHJhbnNpdGlvbiIsInRpbWVyIiwiYXV0b1RpbWVvdXQiLCJub2RlUmVmIiwibm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayIsImNhbGxiYWNrIiwibWF5YmVJc0FwcGVhcmluZyIsIm5vZGUiLCJoYW5kbGVFbnRlcmluZyIsImhhbmRsZUVudGVyIiwiaXNBcHBlYXJpbmciLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJkZWxheSIsInRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiIsImdldEF1dG9IZWlnaHREdXJhdGlvbiIsImhhbmRsZUVudGVyZWQiLCJoYW5kbGVFeGl0aW5nIiwiaGFuZGxlRXhpdCIsImhhbmRsZUV4aXRlZCIsImNsZWFyVGltZW91dCIsIm5leHQiLCJzZXRUaW1lb3V0IiwiY2hpbGRQcm9wcyIsInZpc2liaWxpdHkiLCJtdWlTdXBwb3J0QXV0byIsImdldE1vZGFsVXRpbGl0eUNsYXNzIiwiTW9kYWxSb290Iiwib3BlbiIsImV4aXRlZCIsImhpZGRlbiIsIm1vZGFsIiwiTW9kYWxCYWNrZHJvcCIsIkJhY2tkcm9wIiwiYmFja2Ryb3AiLCJfc2xvdHMkYmFja2Ryb3AiLCJfc2xvdFByb3BzJHJvb3QiLCJfc2xvdFByb3BzJGJhY2tkcm9wIiwiQmFja2Ryb3BDb21wb25lbnQiLCJCYWNrZHJvcFByb3BzIiwiY2xvc2VBZnRlclRyYW5zaXRpb24iLCJkaXNhYmxlQXV0b0ZvY3VzIiwiZGlzYWJsZUVuZm9yY2VGb2N1cyIsImRpc2FibGVFc2NhcGVLZXlEb3duIiwiZGlzYWJsZVBvcnRhbCIsImRpc2FibGVSZXN0b3JlRm9jdXMiLCJkaXNhYmxlU2Nyb2xsTG9jayIsImhpZGVCYWNrZHJvcCIsImtlZXBNb3VudGVkIiwib25CYWNrZHJvcENsaWNrIiwicHJvcHNXaXRoRGVmYXVsdHMiLCJnZXRSb290UHJvcHMiLCJnZXRCYWNrZHJvcFByb3BzIiwiZ2V0VHJhbnNpdGlvblByb3BzIiwicG9ydGFsUmVmIiwiaXNUb3BNb2RhbCIsImhhc1RyYW5zaXRpb24iLCJ1c2VNb2RhbCIsInJvb3RSZWYiLCJCYWNrZHJvcFNsb3QiLCJyb290U2xvdFByb3BzIiwiYmFja2Ryb3BTbG90UHJvcHMiLCJ1c2VTbG90UHJvcHMiLCJlbGVtZW50VHlwZSIsImV4dGVybmFsU2xvdFByb3BzIiwiZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcyIsImdldFNsb3RQcm9wcyIsImFkZGl0aW9uYWxQcm9wcyIsImJhY2tkcm9wUHJvcHMiLCJvdGhlckhhbmRsZXJzIiwiZSIsIlBvcnRhbCIsIkZvY3VzVHJhcCIsImlzRW5hYmxlZCIsImdldFBvcG92ZXJVdGlsaXR5Q2xhc3MiLCJfZXhjbHVkZWQyIiwiX2V4Y2x1ZGVkMyIsImdldE9mZnNldFRvcCIsInJlY3QiLCJ2ZXJ0aWNhbCIsIm9mZnNldCIsImdldE9mZnNldExlZnQiLCJob3Jpem9udGFsIiwiZ2V0VHJhbnNmb3JtT3JpZ2luVmFsdWUiLCJuIiwicmVzb2x2ZUFuY2hvckVsIiwiYW5jaG9yRWwiLCJQb3BvdmVyUm9vdCIsIlBvcG92ZXJQYXBlciIsIlBhcGVyIiwicGFwZXIiLCJvdmVyZmxvd1kiLCJvdmVyZmxvd1giLCJtaW5IZWlnaHQiLCJtYXhIZWlnaHQiLCJfc2xvdFByb3BzJHBhcGVyIiwiX3Nsb3RzJHBhcGVyIiwiYWN0aW9uIiwiYW5jaG9yT3JpZ2luIiwiYW5jaG9yUG9zaXRpb24iLCJhbmNob3JSZWZlcmVuY2UiLCJjb250YWluZXJQcm9wIiwiZWxldmF0aW9uIiwibWFyZ2luVGhyZXNob2xkIiwiUGFwZXJQcm9wcyIsIlBhcGVyUHJvcHNQcm9wIiwidHJhbnNpdGlvbkR1cmF0aW9uUHJvcCIsIlRyYW5zaXRpb25Qcm9wcyIsImV4dGVybmFsUGFwZXJTbG90UHJvcHMiLCJwYXBlclJlZiIsImhhbmRsZVBhcGVyUmVmIiwiZ2V0QW5jaG9yT2Zmc2V0IiwicmVzb2x2ZWRBbmNob3JFbCIsImFuY2hvclJlY3QiLCJub2RlVHlwZSIsImJvZHkiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJnZXRUcmFuc2Zvcm1PcmlnaW4iLCJlbGVtUmVjdCIsImdldFBvc2l0aW9uaW5nU3R5bGUiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsImVsZW1UcmFuc2Zvcm1PcmlnaW4iLCJhbmNob3JPZmZzZXQiLCJjb250YWluZXJXaW5kb3ciLCJvd25lcldpbmRvdyIsImhlaWdodFRocmVzaG9sZCIsImlubmVySGVpZ2h0Iiwid2lkdGhUaHJlc2hvbGQiLCJpbm5lcldpZHRoIiwiZGlmZiIsImlzUG9zaXRpb25lZCIsInNldElzUG9zaXRpb25lZCIsInNldFBvc2l0aW9uaW5nU3R5bGVzIiwicG9zaXRpb25pbmciLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInVwZGF0ZVBvc2l0aW9uIiwiaGFuZGxlUmVzaXplIiwiZGVib3VuY2UiLCJjbGVhciIsIlBhcGVyU2xvdCIsInBhcGVyUHJvcHMiLCJfdXNlU2xvdFByb3BzIiwiaW52aXNpYmxlIiwicm9vdFNsb3RQcm9wc1Byb3AiLCJpc0hvc3RDb21wb25lbnQiLCJnZXRNZW51VXRpbGl0eUNsYXNzIiwiUlRMX09SSUdJTiIsIkxUUl9PUklHSU4iLCJNZW51Um9vdCIsIk1lbnVQYXBlciIsIldlYmtpdE92ZXJmbG93U2Nyb2xsaW5nIiwiTWVudU1lbnVMaXN0IiwiZGlzYWJsZUF1dG9Gb2N1c0l0ZW0iLCJNZW51TGlzdFByb3BzIiwib25DbG9zZSIsIlBvcG92ZXJDbGFzc2VzIiwiaXNSdGwiLCJtZW51TGlzdEFjdGlvbnNSZWYiLCJwYXBlckV4dGVybmFsU2xvdFByb3BzIiwicGFwZXJTbG90UHJvcHMiLCJnZXROYXRpdmVTZWxlY3RVdGlsaXR5Q2xhc3NlcyIsIm5hdGl2ZVNlbGVjdFNlbGVjdFN0eWxlcyIsIk5hdGl2ZVNlbGVjdFNlbGVjdCIsInNlbGVjdCIsIm11bHRpcGxlIiwibmF0aXZlU2VsZWN0SWNvblN0eWxlcyIsImFjdGl2ZSIsIk5hdGl2ZVNlbGVjdEljb24iLCJpY29uIiwiaWNvbk9wZW4iLCJJY29uQ29tcG9uZW50IiwiTm90Y2hlZE91dGxpbmVSb290IiwiYm9yZGVyU3R5bGUiLCJib3JkZXJXaWR0aCIsIk5vdGNoZWRPdXRsaW5lTGVnZW5kIiwiZmxvYXQiLCJ3aXRoTGFiZWwiLCJmb250U2l6ZSIsIm5vdGNoZWQiLCJnZXRPdXRsaW5lZElucHV0VXRpbGl0eUNsYXNzIiwiT3V0bGluZWRJbnB1dFJvb3QiLCJib3JkZXJDb2xvciIsIm5vdGNoZWRPdXRsaW5lIiwibGFiZWwiLCJPdXRsaW5lZElucHV0SW5wdXQiLCJPdXRsaW5lZElucHV0IiwiX1JlYWN0JEZyYWdtZW50IiwiZ2V0UGFwZXJVdGlsaXR5Q2xhc3MiLCJQYXBlclJvb3QiLCJzcXVhcmUiLCJyb3VuZGVkIiwiX3RoZW1lJHZhcnMkb3ZlcmxheXMiLCJkaXZpZGVyIiwic2hhZG93cyIsImJhY2tncm91bmRJbWFnZSIsImdldE92ZXJsYXlBbHBoYSIsIm92ZXJsYXlzIl0sInNvdXJjZVJvb3QiOiIifQ==