"use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[273],{6723:(e,t,r)=>{r.d(t,{Z:()=>y});var o=r(3366),n=r(7462),i=r(7294),a=r(9766),s=r(4780),l=r(8543),d=r(948),u=r(1657),p=r(1588),c=r(4867),m=r(5827);function f(e){return(0,c.Z)("MuiFilledInput",e)}const h=(0,n.Z)({},m.Z,(0,p.Z)("MuiFilledInput",["root","underline","input"]));var b=r(5893);const g=["disableUnderline","components","componentsProps","fullWidth","hiddenLabel","inputComponent","multiline","slotProps","slots","type"],v=(0,d.ZP)(l.Ej,{shouldForwardProp:e=>(0,d.FO)(e)||"classes"===e,name:"MuiFilledInput",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[...(0,l.Gx)(e,t),!r.disableUnderline&&t.underline]}})((({theme:e,ownerState:t})=>{var r;const o="light"===e.palette.mode,i=o?"rgba(0, 0, 0, 0.42)":"rgba(255, 255, 255, 0.7)",a=o?"rgba(0, 0, 0, 0.06)":"rgba(255, 255, 255, 0.09)",s=o?"rgba(0, 0, 0, 0.09)":"rgba(255, 255, 255, 0.13)",l=o?"rgba(0, 0, 0, 0.12)":"rgba(255, 255, 255, 0.12)";return(0,n.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==(r=(e.vars||e).palette[t.color||"primary"])?void 0:r.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,n.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,n.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 r,i,d,p;const c=(0,u.Z)({props:e,name:"MuiFilledInput"}),{components:m={},componentsProps:h,fullWidth:x=!1,inputComponent:y="input",multiline:w=!1,slotProps:S,slots:k={},type:$="text"}=c,C=(0,o.Z)(c,g),z=(0,n.Z)({},c,{fullWidth:x,inputComponent:y,multiline:w,type:$}),R=(e=>{const{classes:t,disableUnderline:r}=e,o={root:["root",!r&&"underline"],input:["input"]},i=(0,s.Z)(o,f,t);return(0,n.Z)({},t,i)})(c),W={root:{ownerState:z},input:{ownerState:z}},E=(null!=S?S:h)?(0,a.Z)(W,null!=S?S:h):W,M=null!=(r=null!=(i=k.root)?i:m.Root)?r:v,F=null!=(d=null!=(p=k.input)?p:m.Input)?d:Z;return(0,b.jsx)(l.ZP,(0,n.Z)({slots:{root:M,input:F},componentsProps:E,fullWidth:x,inputComponent:y,multiline:w,ref:t,type:$},C,{classes:R}))}));x.muiName="Input";const y=x},6446:(e,t,r)=>{r.d(t,{Z:()=>x});var o=r(3366),n=r(7462),i=r(7294),a=r(512),s=r(4780),l=r(1657),d=r(948),u=r(5108),p=r(8216),c=r(6798),m=r(7167),f=r(1588),h=r(4867);function b(e){return(0,h.Z)("MuiFormControl",e)}(0,f.Z)("MuiFormControl",["root","marginNone","marginNormal","marginDense","fullWidth","disabled"]);var g=r(5893);const v=["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,n.Z)({},t.root,t[`margin${(0,p.Z)(e.margin)}`],e.fullWidth&&t.fullWidth)})((({ownerState:e})=>(0,n.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 r=(0,l.Z)({props:e,name:"MuiFormControl"}),{children:d,className:f,color:h="primary",component:x="div",disabled:y=!1,error:w=!1,focused:S,fullWidth:k=!1,hiddenLabel:$=!1,margin:C="none",required:z=!1,size:R="medium",variant:W="outlined"}=r,E=(0,o.Z)(r,v),M=(0,n.Z)({},r,{color:h,component:x,disabled:y,error:w,fullWidth:k,hiddenLabel:$,margin:C,required:z,size:R,variant:W}),F=(e=>{const{classes:t,margin:r,fullWidth:o}=e,n={root:["root","none"!==r&&`margin${(0,p.Z)(r)}`,o&&"fullWidth"]};return(0,s.Z)(n,b,t)})(M),[B,A]=i.useState((()=>{let e=!1;return d&&i.Children.forEach(d,(t=>{if(!(0,c.Z)(t,["Input","Select"]))return;const r=(0,c.Z)(t,["Select"])?t.props.input:t;r&&(0,u.B7)(r.props)&&(e=!0)})),e})),[P,L]=i.useState((()=>{let e=!1;return d&&i.Children.forEach(d,(t=>{(0,c.Z)(t,["Input","Select"])&&((0,u.vd)(t.props,!0)||(0,u.vd)(t.props.inputProps,!0))&&(e=!0)})),e})),[T,I]=i.useState(!1);y&&T&&I(!1);const N=void 0===S||y?T:S;let j;const q=i.useMemo((()=>({adornedStart:B,setAdornedStart:A,color:h,disabled:y,error:w,filled:P,focused:N,fullWidth:k,hiddenLabel:$,size:R,onBlur:()=>{I(!1)},onEmpty:()=>{L(!1)},onFilled:()=>{L(!0)},onFocus:()=>{I(!0)},registerEffect:j,required:z,variant:W})),[B,h,y,w,P,N,k,$,j,z,R,W]);return(0,g.jsx)(m.Z.Provider,{value:q,children:(0,g.jsx)(Z,(0,n.Z)({as:x,ownerState:M,className:(0,a.Z)(F.root,f),ref:t},E,{children:d}))})}))},7167:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r(7294).createContext(void 0)},5704:(e,t,r)=>{function o({props:e,states:t,muiFormControl:r}){return t.reduce(((t,o)=>(t[o]=e[o],r&&void 0===e[o]&&(t[o]=r[o]),t)),{})}r.d(t,{Z:()=>o})},4423:(e,t,r)=>{r.d(t,{Z:()=>i});var o=r(7294),n=r(7167);function i(){return o.useContext(n.Z)}},3460:(e,t,r)=>{r.d(t,{Z:()=>y});var o=r(3366),n=r(7462),i=r(7294),a=r(512),s=r(4780),l=r(5704),d=r(4423),u=r(948),p=r(8216),c=r(1588),m=r(4867);function f(e){return(0,m.Z)("MuiFormHelperText",e)}const h=(0,c.Z)("MuiFormHelperText",["root","error","disabled","sizeSmall","sizeMedium","contained","focused","filled","required"]);var b,g=r(1657),v=r(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:r}=e;return[t.root,r.size&&t[`size${(0,p.Z)(r.size)}`],r.contained&&t.contained,r.filled&&t.filled]}})((({theme:e,ownerState:t})=>(0,n.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}))),y=i.forwardRef((function(e,t){const r=(0,g.Z)({props:e,name:"MuiFormHelperText"}),{children:i,className:u,component:c="p"}=r,m=(0,o.Z)(r,Z),h=(0,d.Z)(),y=(0,l.Z)({props:r,muiFormControl:h,states:["variant","size","disabled","error","filled","focused","required"]}),w=(0,n.Z)({},r,{component:c,contained:"filled"===y.variant||"outlined"===y.variant,variant:y.variant,size:y.size,disabled:y.disabled,error:y.error,filled:y.filled,focused:y.focused,required:y.required}),S=(e=>{const{classes:t,contained:r,size:o,disabled:n,error:i,filled:a,focused:l,required:d}=e,u={root:["root",n&&"disabled",i&&"error",o&&`size${(0,p.Z)(o)}`,r&&"contained",l&&"focused",a&&"filled",d&&"required"]};return(0,s.Z)(u,f,t)})(w);return(0,v.jsx)(x,(0,n.Z)({as:c,ownerState:w,className:(0,a.Z)(S.root,u),ref:t},m,{children:" "===i?b||(b=(0,v.jsx)("span",{className:"notranslate",children:"​"})):i}))}))},6294:(e,t,r)=>{r.d(t,{Z:()=>l});var o=r(7462),n=(r(7294),r(5723)),i=r(247),a=r(606),s=r(5893);const l=function(e){return(0,s.jsx)(n.Z,(0,o.Z)({},e,{defaultTheme:i.Z,themeId:a.Z}))}},5725:(e,t,r)=>{r.d(t,{ZP:()=>$});var o=r(3366),n=r(7462),i=r(7294),a=r(512),s=r(5408),l=r(9707),d=r(4780),u=r(948),p=r(1657),c=r(2734);const m=i.createContext();var f=r(1588),h=r(4867);function b(e){return(0,h.Z)("MuiGrid",e)}const g=["auto",!0,1,2,3,4,5,6,7,8,9,10,11,12],v=(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}`)),...g.map((e=>`grid-xs-${e}`)),...g.map((e=>`grid-sm-${e}`)),...g.map((e=>`grid-md-${e}`)),...g.map((e=>`grid-lg-${e}`)),...g.map((e=>`grid-xl-${e}`))]);var Z=r(5893);const x=["className","columns","columnSpacing","component","container","direction","item","rowSpacing","spacing","wrap","zeroMinWidth"];function y(e){const t=parseFloat(e);return`${t}${String(e).replace(String(t),"")||"px"}`}function w({breakpoints:e,values:t}){let r="";Object.keys(t).forEach((e=>{""===r&&0!==t[e]&&(r=e)}));const o=Object.keys(e).sort(((t,r)=>e[t]-e[r]));return o.slice(0,o.indexOf(r))}const S=(0,u.ZP)("div",{name:"MuiGrid",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e,{container:o,direction:n,item:i,spacing:a,wrap:s,zeroMinWidth:l,breakpoints:d}=r;let u=[];o&&(u=function(e,t,r={}){if(!e||e<=0)return[];if("string"==typeof e&&!Number.isNaN(Number(e))||"number"==typeof e)return[r[`spacing-xs-${String(e)}`]];const o=[];return t.forEach((t=>{const n=e[t];Number(n)>0&&o.push(r[`spacing-${t}-${String(n)}`])})),o}(a,d,t));const p=[];return d.forEach((e=>{const o=r[e];o&&p.push(t[`grid-${e}-${String(o)}`])})),[t.root,o&&t.container,i&&t.item,l&&t.zeroMinWidth,...u,"row"!==n&&t[`direction-xs-${String(n)}`],"wrap"!==s&&t[`wrap-xs-${String(s)}`],...p]}})((({ownerState:e})=>(0,n.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 r=(0,s.P$)({values:t.direction,breakpoints:e.breakpoints.values});return(0,s.k9)({theme:e},r,(e=>{const t={flexDirection:e};return 0===e.indexOf("column")&&(t[`& > .${v.item}`]={maxWidth:"none"}),t}))}),(function({theme:e,ownerState:t}){const{container:r,rowSpacing:o}=t;let n={};if(r&&0!==o){const t=(0,s.P$)({values:o,breakpoints:e.breakpoints.values});let r;"object"==typeof t&&(r=w({breakpoints:e.breakpoints.values,values:t})),n=(0,s.k9)({theme:e},t,((t,o)=>{var n;const i=e.spacing(t);return"0px"!==i?{marginTop:`-${y(i)}`,[`& > .${v.item}`]:{paddingTop:y(i)}}:null!=(n=r)&&n.includes(o)?{}:{marginTop:0,[`& > .${v.item}`]:{paddingTop:0}}}))}return n}),(function({theme:e,ownerState:t}){const{container:r,columnSpacing:o}=t;let n={};if(r&&0!==o){const t=(0,s.P$)({values:o,breakpoints:e.breakpoints.values});let r;"object"==typeof t&&(r=w({breakpoints:e.breakpoints.values,values:t})),n=(0,s.k9)({theme:e},t,((t,o)=>{var n;const i=e.spacing(t);return"0px"!==i?{width:`calc(100% + ${y(i)})`,marginLeft:`-${y(i)}`,[`& > .${v.item}`]:{paddingLeft:y(i)}}:null!=(n=r)&&n.includes(o)?{}:{width:"100%",marginLeft:0,[`& > .${v.item}`]:{paddingLeft:0}}}))}return n}),(function({theme:e,ownerState:t}){let r;return e.breakpoints.keys.reduce(((o,i)=>{let a={};if(t[i]&&(r=t[i]),!r)return o;if(!0===r)a={flexBasis:0,flexGrow:1,maxWidth:"100%"};else if("auto"===r)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 o;const u=Math.round(r/d*1e8)/1e6+"%";let p={};if(t.container&&t.item&&0!==t.columnSpacing){const r=e.spacing(t.columnSpacing);if("0px"!==r){const e=`calc(${u} + ${y(r)})`;p={flexBasis:e,maxWidth:e}}}a=(0,n.Z)({flexBasis:u,flexGrow:0,maxWidth:u},p)}return 0===e.breakpoints.values[i]?Object.assign(o,a):o[e.breakpoints.up(i)]=a,o}),{})})),k=i.forwardRef((function(e,t){const r=(0,p.Z)({props:e,name:"MuiGrid"}),{breakpoints:s}=(0,c.Z)(),u=(0,l.Z)(r),{className:f,columns:h,columnSpacing:g,component:v="div",container:y=!1,direction:w="row",item:k=!1,rowSpacing:$,spacing:C=0,wrap:z="wrap",zeroMinWidth:R=!1}=u,W=(0,o.Z)(u,x),E=$||C,M=g||C,F=i.useContext(m),B=y?h||12:F,A={},P=(0,n.Z)({},W);s.keys.forEach((e=>{null!=W[e]&&(A[e]=W[e],delete P[e])}));const L=(0,n.Z)({},u,{columns:B,container:y,direction:w,item:k,rowSpacing:E,columnSpacing:M,wrap:z,zeroMinWidth:R,spacing:C},A,{breakpoints:s.keys}),T=(e=>{const{classes:t,container:r,direction:o,item:n,spacing:i,wrap:a,zeroMinWidth:s,breakpoints:l}=e;let u=[];r&&(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 r=[];return t.forEach((t=>{const o=e[t];if(Number(o)>0){const e=`spacing-${t}-${String(o)}`;r.push(e)}})),r}(i,l));const p=[];l.forEach((t=>{const r=e[t];r&&p.push(`grid-${t}-${String(r)}`)}));const c={root:["root",r&&"container",n&&"item",s&&"zeroMinWidth",...u,"row"!==o&&`direction-xs-${String(o)}`,"wrap"!==a&&`wrap-xs-${String(a)}`,...p]};return(0,d.Z)(c,b,t)})(L);return(0,Z.jsx)(m.Provider,{value:B,children:(0,Z.jsx)(S,(0,n.Z)({ownerState:L,className:(0,a.Z)(T.root,f),as:v,ref:t},P))})})),$=k},6514:(e,t,r)=>{r.d(t,{Z:()=>b});var o=r(7462),n=r(3366),i=r(7294),a=r(8052),s=r(2734),l=r(577),d=r(1705),u=r(5893);const p=["addEndListener","appear","children","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"];function c(e){return`scale(${e}, ${e**2})`}const m={entering:{opacity:1,transform:c(1)},entered:{opacity:1,transform:"none"}},f="undefined"!=typeof navigator&&/^((?!chrome|android).)*(safari|mobile)/i.test(navigator.userAgent)&&/(os |version\/)15(.|_)4/i.test(navigator.userAgent),h=i.forwardRef((function(e,t){const{addEndListener:r,appear:h=!0,children:b,easing:g,in:v,onEnter:Z,onEntered:x,onEntering:y,onExit:w,onExited:S,onExiting:k,style:$,timeout:C="auto",TransitionComponent:z=a.ZP}=e,R=(0,n.Z)(e,p),W=i.useRef(),E=i.useRef(),M=(0,s.Z)(),F=i.useRef(null),B=(0,d.Z)(F,b.ref,t),A=e=>t=>{if(e){const r=F.current;void 0===t?e(r):e(r,t)}},P=A(y),L=A(((e,t)=>{(0,l.n)(e);const{duration:r,delay:o,easing:n}=(0,l.C)({style:$,timeout:C,easing:g},{mode:"enter"});let i;"auto"===C?(i=M.transitions.getAutoHeightDuration(e.clientHeight),E.current=i):i=r,e.style.transition=[M.transitions.create("opacity",{duration:i,delay:o}),M.transitions.create("transform",{duration:f?i:.666*i,delay:o,easing:n})].join(","),Z&&Z(e,t)})),T=A(x),I=A(k),N=A((e=>{const{duration:t,delay:r,easing:o}=(0,l.C)({style:$,timeout:C,easing:g},{mode:"exit"});let n;"auto"===C?(n=M.transitions.getAutoHeightDuration(e.clientHeight),E.current=n):n=t,e.style.transition=[M.transitions.create("opacity",{duration:n,delay:r}),M.transitions.create("transform",{duration:f?n:.666*n,delay:f?r:r||.333*n,easing:o})].join(","),e.style.opacity=0,e.style.transform=c(.75),w&&w(e)})),j=A(S);return i.useEffect((()=>()=>{clearTimeout(W.current)}),[]),(0,u.jsx)(z,(0,o.Z)({appear:h,in:v,nodeRef:F,onEnter:L,onEntered:T,onEntering:P,onExit:N,onExited:j,onExiting:I,addEndListener:e=>{"auto"===C&&(W.current=setTimeout(e,E.current||0)),r&&r(F.current,e)},timeout:"auto"===C?null:C},R,{children:(e,t)=>i.cloneElement(b,(0,o.Z)({style:(0,o.Z)({opacity:0,transform:c(.75),visibility:"exited"!==e||v?void 0:"hidden"},m[e],$,b.props.style),ref:B},t))}))}));h.muiSupportAuto=!0;const b=h},3981:(e,t,r)=>{r.d(t,{Z:()=>y});var o=r(3366),n=r(7462),i=r(7294),a=r(4780),s=r(9766),l=r(8543),d=r(948),u=r(1657),p=r(1588),c=r(4867),m=r(5827);function f(e){return(0,c.Z)("MuiInput",e)}const h=(0,n.Z)({},m.Z,(0,p.Z)("MuiInput",["root","underline","input"]));var b=r(5893);const g=["disableUnderline","components","componentsProps","fullWidth","inputComponent","multiline","slotProps","slots","type"],v=(0,d.ZP)(l.Ej,{shouldForwardProp:e=>(0,d.FO)(e)||"classes"===e,name:"MuiInput",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[...(0,l.Gx)(e,t),!r.disableUnderline&&t.underline]}})((({theme:e,ownerState:t})=>{let r="light"===e.palette.mode?"rgba(0, 0, 0, 0.42)":"rgba(255, 255, 255, 0.7)";return e.vars&&(r=`rgba(${e.vars.palette.common.onBackgroundChannel} / ${e.vars.opacity.inputUnderline})`),(0,n.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 ${r}`,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 ${r}`}},[`&.${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 r,i,d,p;const c=(0,u.Z)({props:e,name:"MuiInput"}),{disableUnderline:m,components:h={},componentsProps:x,fullWidth:y=!1,inputComponent:w="input",multiline:S=!1,slotProps:k,slots:$={},type:C="text"}=c,z=(0,o.Z)(c,g),R=(e=>{const{classes:t,disableUnderline:r}=e,o={root:["root",!r&&"underline"],input:["input"]},i=(0,a.Z)(o,f,t);return(0,n.Z)({},t,i)})(c),W={root:{ownerState:{disableUnderline:m}}},E=(null!=k?k:x)?(0,s.Z)(null!=k?k:x,W):W,M=null!=(r=null!=(i=$.root)?i:h.Root)?r:v,F=null!=(d=null!=(p=$.input)?p:h.Input)?d:Z;return(0,b.jsx)(l.ZP,(0,n.Z)({slots:{root:M,input:F},slotProps:E,fullWidth:y,inputComponent:w,multiline:S,ref:t,type:C},z,{classes:R}))}));x.muiName="Input";const y=x},8543:(e,t,r)=>{r.d(t,{Ej:()=>C,Gx:()=>k,ZP:()=>W,_o:()=>$,rA:()=>z});var o=r(3366),n=r(7462),i=r(1387),a=r(7294),s=r(512),l=r(4780),d=r(7598),u=r(8442),p=r(5704),c=r(7167),m=r(4423),f=r(948),h=r(1657),b=r(8216),g=r(1705),v=r(8974),Z=r(6294),x=r(5108),y=r(5827),w=r(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:r}=e;return[t.root,r.formControl&&t.formControl,r.startAdornment&&t.adornedStart,r.endAdornment&&t.adornedEnd,r.error&&t.error,"small"===r.size&&t.sizeSmall,r.multiline&&t.multiline,r.color&&t[`color${(0,b.Z)(r.color)}`],r.fullWidth&&t.fullWidth,r.hiddenLabel&&t.hiddenLabel]},$=(e,t)=>{const{ownerState:r}=e;return[t.input,"small"===r.size&&t.inputSizeSmall,r.multiline&&t.inputMultiline,"search"===r.type&&t.inputTypeSearch,r.startAdornment&&t.inputAdornedStart,r.endAdornment&&t.inputAdornedEnd,r.hiddenLabel&&t.inputHiddenLabel]},C=(0,f.ZP)("div",{name:"MuiInputBase",slot:"Root",overridesResolver:k})((({theme:e,ownerState:t})=>(0,n.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",[`&.${y.Z.disabled}`]:{color:(e.vars||e).palette.text.disabled,cursor:"default"}},t.multiline&&(0,n.Z)({padding:"4px 0 5px"},"small"===t.size&&{paddingTop:1}),t.fullWidth&&{width:"100%"}))),z=(0,f.ZP)("input",{name:"MuiInputBase",slot:"Input",overridesResolver:$})((({theme:e,ownerState:t})=>{const r="light"===e.palette.mode,o=(0,n.Z)({color:"currentColor"},e.vars?{opacity:e.vars.opacity.inputPlaceholder}:{opacity:r?.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:r?.42:.5};return(0,n.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":o,"&::-moz-placeholder":o,"&:-ms-input-placeholder":o,"&::-ms-input-placeholder":o,"&:focus":{outline:0},"&:invalid":{boxShadow:"none"},"&::-webkit-search-decoration":{WebkitAppearance:"none"},[`label[data-shrink=false] + .${y.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},[`&.${y.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"})})),R=(0,w.jsx)(Z.Z,{styles:{"@keyframes mui-auto-fill":{from:{display:"block"}},"@keyframes mui-auto-fill-cancel":{from:{display:"block"}}}}),W=a.forwardRef((function(e,t){var r;const f=(0,h.Z)({props:e,name:"MuiInputBase"}),{"aria-describedby":Z,autoComplete:k,autoFocus:$,className:W,components:E={},componentsProps:M={},defaultValue:F,disabled:B,disableInjectingGlobalStyles:A,endAdornment:P,fullWidth:L=!1,id:T,inputComponent:I="input",inputProps:N={},inputRef:j,maxRows:q,minRows:O,multiline:U=!1,name:H,onBlur:G,onChange:D,onClick:X,onFocus:K,onKeyDown:_,onKeyUp:V,placeholder:J,readOnly:Q,renderSuffix:Y,rows:ee,slotProps:te={},slots:re={},startAdornment:oe,type:ne="text",value:ie}=f,ae=(0,o.Z)(f,S),se=null!=N.value?N.value:ie,{current:le}=a.useRef(null!=se),de=a.useRef(),ue=a.useCallback((e=>{}),[]),pe=(0,g.Z)(de,j,N.ref,ue),[ce,me]=a.useState(!1),fe=(0,m.Z)(),he=(0,p.Z)({props:f,muiFormControl:fe,states:["color","disabled","error","hiddenLabel","size","required","filled"]});he.focused=fe?fe.focused:ce,a.useEffect((()=>{!fe&&B&&ce&&(me(!1),G&&G())}),[fe,B,ce,G]);const be=fe&&fe.onFilled,ge=fe&&fe.onEmpty,ve=a.useCallback((e=>{(0,x.vd)(e)?be&&be():ge&&ge()}),[be,ge]);(0,v.Z)((()=>{le&&ve({value:se})}),[se,ve,le]),a.useEffect((()=>{ve(de.current)}),[]);let Ze=I,xe=N;U&&"input"===Ze&&(xe=ee?(0,n.Z)({type:void 0,minRows:ee,maxRows:ee},xe):(0,n.Z)({type:void 0,maxRows:q,minRows:O},xe),Ze=d.u),a.useEffect((()=>{fe&&fe.setAdornedStart(Boolean(oe))}),[fe,oe]);const ye=(0,n.Z)({},f,{color:he.color||"primary",disabled:he.disabled,endAdornment:P,error:he.error,focused:he.focused,formControl:fe,fullWidth:L,hiddenLabel:he.hiddenLabel,multiline:U,size:he.size,startAdornment:oe,type:ne}),we=(e=>{const{classes:t,color:r,disabled:o,error:n,endAdornment:i,focused:a,formControl:s,fullWidth:d,hiddenLabel:u,multiline:p,readOnly:c,size:m,startAdornment:f,type:h}=e,g={root:["root",`color${(0,b.Z)(r)}`,o&&"disabled",n&&"error",d&&"fullWidth",a&&"focused",s&&"formControl",m&&"medium"!==m&&`size${(0,b.Z)(m)}`,p&&"multiline",f&&"adornedStart",i&&"adornedEnd",u&&"hiddenLabel",c&&"readOnly"],input:["input",o&&"disabled","search"===h&&"inputTypeSearch",p&&"inputMultiline","small"===m&&"inputSizeSmall",u&&"inputHiddenLabel",f&&"inputAdornedStart",i&&"inputAdornedEnd",c&&"readOnly"]};return(0,l.Z)(g,y.u,t)})(ye),Se=re.root||E.Root||C,ke=te.root||M.root||{},$e=re.input||E.Input||z;return xe=(0,n.Z)({},xe,null!=(r=te.input)?r:M.input),(0,w.jsxs)(a.Fragment,{children:[!A&&R,(0,w.jsxs)(Se,(0,n.Z)({},ke,!(0,u.X)(Se)&&{ownerState:(0,n.Z)({},ye,ke.ownerState)},{ref:t,onClick:e=>{de.current&&e.currentTarget===e.target&&de.current.focus(),X&&X(e)}},ae,{className:(0,s.Z)(we.root,ke.className,W,Q&&"MuiInputBase-readOnly"),children:[oe,(0,w.jsx)(c.Z.Provider,{value:null,children:(0,w.jsx)($e,(0,n.Z)({ownerState:ye,"aria-invalid":he.error,"aria-describedby":Z,autoComplete:k,autoFocus:$,defaultValue:F,disabled:he.disabled,id:T,onAnimationStart:e=>{ve("mui-auto-fill-cancel"===e.animationName?de.current:{value:"x"})},name:H,placeholder:J,readOnly:Q,required:he.required,rows:ee,value:se,onKeyDown:_,onKeyUp:V,type:ne},xe,!(0,u.X)($e)&&{as:Ze,ownerState:(0,n.Z)({},ye,xe.ownerState)},{ref:pe,className:(0,s.Z)(we.input,xe.className,Q&&"MuiInputBase-readOnly"),onBlur:e=>{G&&G(e),N.onBlur&&N.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));ve({value:t.value})}N.onChange&&N.onChange(e,...t),D&&D(e,...t)},onFocus:e=>{he.disabled?e.stopPropagation():(K&&K(e),N.onFocus&&N.onFocus(e),fe&&fe.onFocus?fe.onFocus(e):me(!0))}}))}),P,Y?Y((0,n.Z)({},he,{startAdornment:oe})):null]}))]})}))},5827:(e,t,r)=>{r.d(t,{Z:()=>a,u:()=>i});var o=r(1588),n=r(4867);function i(e){return(0,n.Z)("MuiInputBase",e)}const a=(0,o.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,r)=>{function o(e){return null!=e&&!(Array.isArray(e)&&0===e.length)}function n(e,t=!1){return e&&(o(e.value)&&""!==e.value||t&&o(e.defaultValue)&&""!==e.defaultValue)}function i(e){return e.startAdornment}r.d(t,{B7:()=>i,vd:()=>n})},7666:(e,t,r)=>{r.d(t,{Z:()=>$});var o=r(3366),n=r(7462),i=r(7294),a=r(4780),s=r(512),l=r(5704),d=r(4423),u=r(8216),p=r(1657),c=r(948),m=r(1588),f=r(4867);function h(e){return(0,f.Z)("MuiFormLabel",e)}const b=(0,m.Z)("MuiFormLabel",["root","colorSecondary","focused","disabled","error","filled","required","asterisk"]);var g=r(5893);const v=["children","className","color","component","disabled","error","filled","focused","required"],Z=(0,c.ZP)("label",{name:"MuiFormLabel",slot:"Root",overridesResolver:({ownerState:e},t)=>(0,n.Z)({},t.root,"secondary"===e.color&&t.colorSecondary,e.filled&&t.filled)})((({theme:e,ownerState:t})=>(0,n.Z)({color:(e.vars||e).palette.text.secondary},e.typography.body1,{lineHeight:"1.4375em",padding:0,position:"relative",[`&.${b.focused}`]:{color:(e.vars||e).palette[t.color].main},[`&.${b.disabled}`]:{color:(e.vars||e).palette.text.disabled},[`&.${b.error}`]:{color:(e.vars||e).palette.error.main}}))),x=(0,c.ZP)("span",{name:"MuiFormLabel",slot:"Asterisk",overridesResolver:(e,t)=>t.asterisk})((({theme:e})=>({[`&.${b.error}`]:{color:(e.vars||e).palette.error.main}}))),y=i.forwardRef((function(e,t){const r=(0,p.Z)({props:e,name:"MuiFormLabel"}),{children:i,className:c,component:m="label"}=r,f=(0,o.Z)(r,v),b=(0,d.Z)(),y=(0,l.Z)({props:r,muiFormControl:b,states:["color","required","focused","disabled","error","filled"]}),w=(0,n.Z)({},r,{color:y.color||"primary",component:m,disabled:y.disabled,error:y.error,filled:y.filled,focused:y.focused,required:y.required}),S=(e=>{const{classes:t,color:r,focused:o,disabled:n,error:i,filled:s,required:l}=e,d={root:["root",`color${(0,u.Z)(r)}`,n&&"disabled",i&&"error",s&&"filled",o&&"focused",l&&"required"],asterisk:["asterisk",i&&"error"]};return(0,a.Z)(d,h,t)})(w);return(0,g.jsxs)(Z,(0,n.Z)({as:m,ownerState:w,className:(0,s.Z)(S.root,c),ref:t},f,{children:[i,y.required&&(0,g.jsxs)(x,{ownerState:w,"aria-hidden":!0,className:S.asterisk,children:[" ","*"]})]}))}));function w(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,c.ZP)(y,{shouldForwardProp:e=>(0,c.FO)(e)||"classes"===e,name:"MuiInputLabel",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[{[`& .${b.asterisk}`]:t.asterisk},t.root,r.formControl&&t.formControl,"small"===r.size&&t.sizeSmall,r.shrink&&t.shrink,!r.disableAnimation&&t.animated,r.focused&&t.focused,t[r.variant]]}})((({theme:e,ownerState:t})=>(0,n.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,n.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,n.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,n.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)"}),"standard"===t.variant&&{"&:not(label) + div":{marginTop:16}}))),$=i.forwardRef((function(e,t){const r=(0,p.Z)({name:"MuiInputLabel",props:e}),{disableAnimation:i=!1,shrink:c,className:m}=r,f=(0,o.Z)(r,S),h=(0,d.Z)();let b=c;void 0===b&&h&&(b=h.filled||h.focused||h.adornedStart);const v=(0,l.Z)({props:r,muiFormControl:h,states:["size","variant","required","focused"]}),Z=(0,n.Z)({},r,{disableAnimation:i,formControl:h,shrink:b,size:v.size,variant:v.variant,required:v.required,focused:v.focused}),x=(e=>{const{classes:t,formControl:r,size:o,shrink:i,disableAnimation:s,variant:l,required:d}=e,p={root:["root",r&&"formControl",!s&&"animated",i&&"shrink",o&&"normal"!==o&&`size${(0,u.Z)(o)}`,l],asterisk:[d&&"asterisk"]},c=(0,a.Z)(p,w,t);return(0,n.Z)({},t,c)})(Z);return(0,g.jsx)(k,(0,n.Z)({"data-shrink":b,ownerState:Z,ref:t,className:(0,s.Z)(x.root,m)},f,{classes:x}))}))}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFTLENBQ2hELGNBQWVDLEVBQ2ZwWCxXQUFZQSxFQUNaaUUsSUFBS0EsRUFDTHlDLFdBQVcsRUFBQTRCLEVBQUEsR0FBS3RELEVBQVFDLEtBQU15QixJQUM3QjNCLEVBQU8sQ0FDUkMsUUFBU0EsSUFFYixHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRmlsbGVkSW5wdXQvZmlsbGVkSW5wdXRDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0ZpbGxlZElucHV0L0ZpbGxlZElucHV0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC9Gb3JtQ29udHJvbC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC9Gb3JtQ29udHJvbENvbnRleHQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtSGVscGVyVGV4dC9mb3JtSGVscGVyVGV4dENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUhlbHBlclRleHQvRm9ybUhlbHBlclRleHQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvR2xvYmFsU3R5bGVzL0dsb2JhbFN0eWxlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9HcmlkL0dyaWRDb250ZXh0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0dyaWQvZ3JpZENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvR3JpZC9HcmlkLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0dyb3cvR3Jvdy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dC9pbnB1dENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXQvSW5wdXQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXRCYXNlL0lucHV0QmFzZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dEJhc2UvaW5wdXRCYXNlQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dEJhc2UvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUxhYmVsL2Zvcm1MYWJlbENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUxhYmVsL0Zvcm1MYWJlbC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dExhYmVsL2lucHV0TGFiZWxDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0lucHV0TGFiZWwvSW5wdXRMYWJlbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmltcG9ydCB7IGlucHV0QmFzZUNsYXNzZXMgfSBmcm9tICcuLi9JbnB1dEJhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGxlZElucHV0VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlGaWxsZWRJbnB1dCcsIHNsb3QpO1xufVxuY29uc3QgZmlsbGVkSW5wdXRDbGFzc2VzID0gX2V4dGVuZHMoe30sIGlucHV0QmFzZUNsYXNzZXMsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZpbGxlZElucHV0JywgWydyb290JywgJ3VuZGVybGluZScsICdpbnB1dCddKSk7XG5leHBvcnQgZGVmYXVsdCBmaWxsZWRJbnB1dENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZGlzYWJsZVVuZGVybGluZVwiLCBcImNvbXBvbmVudHNcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJmdWxsV2lkdGhcIiwgXCJoaWRkZW5MYWJlbFwiLCBcImlucHV0Q29tcG9uZW50XCIsIFwibXVsdGlsaW5lXCIsIFwic2xvdFByb3BzXCIsIFwic2xvdHNcIiwgXCJ0eXBlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcmVmVHlwZSwgZGVlcG1lcmdlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IElucHV0QmFzZSBmcm9tICcuLi9JbnB1dEJhc2UnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBmaWxsZWRJbnB1dENsYXNzZXMsIHsgZ2V0RmlsbGVkSW5wdXRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2ZpbGxlZElucHV0Q2xhc3Nlcyc7XG5pbXBvcnQgeyByb290T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyLCBpbnB1dE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIsIElucHV0QmFzZVJvb3QsIElucHV0QmFzZUNvbXBvbmVudCBhcyBJbnB1dEJhc2VJbnB1dCB9IGZyb20gJy4uL0lucHV0QmFzZS9JbnB1dEJhc2UnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGRpc2FibGVVbmRlcmxpbmVcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsICFkaXNhYmxlVW5kZXJsaW5lICYmICd1bmRlcmxpbmUnXSxcbiAgICBpbnB1dDogWydpbnB1dCddXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRGaWxsZWRJbnB1dFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgY2xhc3NlcywgY29tcG9zZWRDbGFzc2VzKTtcbn07XG5jb25zdCBGaWxsZWRJbnB1dFJvb3QgPSBzdHlsZWQoSW5wdXRCYXNlUm9vdCwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpRmlsbGVkSW5wdXQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFsuLi5pbnB1dEJhc2VSb290T3ZlcnJpZGVzUmVzb2x2ZXIocHJvcHMsIHN0eWxlcyksICFvd25lclN0YXRlLmRpc2FibGVVbmRlcmxpbmUgJiYgc3R5bGVzLnVuZGVybGluZV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIHZhciBfcGFsZXR0ZTtcbiAgY29uc3QgbGlnaHQgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCc7XG4gIGNvbnN0IGJvdHRvbUxpbmVDb2xvciA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC40MiknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSc7XG4gIGNvbnN0IGJhY2tncm91bmRDb2xvciA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC4wNiknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOSknO1xuICBjb25zdCBob3ZlckJhY2tncm91bmQgPSBsaWdodCA/ICdyZ2JhKDAsIDAsIDAsIDAuMDkpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTMpJztcbiAgY29uc3QgZGlzYWJsZWRCYWNrZ3JvdW5kID0gbGlnaHQgPyAncmdiYSgwLCAwLCAwLCAwLjEyKScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSc7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkZpbGxlZElucHV0LmJnIDogYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclRvcExlZnRSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdiYWNrZ3JvdW5kLWNvbG9yJywge1xuICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsXG4gICAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gICAgfSksXG4gICAgJyY6aG92ZXInOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuRmlsbGVkSW5wdXQuaG92ZXJCZyA6IGhvdmVyQmFja2dyb3VuZCxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5GaWxsZWRJbnB1dC5iZyA6IGJhY2tncm91bmRDb2xvclxuICAgICAgfVxuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmZvY3VzZWR9YF06IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5GaWxsZWRJbnB1dC5iZyA6IGJhY2tncm91bmRDb2xvclxuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuRmlsbGVkSW5wdXQuZGlzYWJsZWRCZyA6IGRpc2FibGVkQmFja2dyb3VuZFxuICAgIH1cbiAgfSwgIW93bmVyU3RhdGUuZGlzYWJsZVVuZGVybGluZSAmJiB7XG4gICAgJyY6YWZ0ZXInOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAycHggc29saWQgJHsoX3BhbGV0dGUgPSAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yIHx8ICdwcmltYXJ5J10pID09IG51bGwgPyB2b2lkIDAgOiBfcGFsZXR0ZS5tYWlufWAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgYm90dG9tOiAwLFxuICAgICAgLy8gRG9pbmcgdGhlIG90aGVyIHdheSBhcm91bmQgY3Jhc2ggb24gSUUxMSBcIicnXCIgaHR0cHM6Ly9naXRodWIuY29tL2Nzc2luanMvanNzL2lzc3Vlcy8yNDJcbiAgICAgIGNvbnRlbnQ6ICdcIlwiJyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgcmlnaHQ6IDAsXG4gICAgICB0cmFuc2Zvcm06ICdzY2FsZVgoMCknLFxuICAgICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nLCB7XG4gICAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyLFxuICAgICAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gICAgICB9KSxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyAvLyBUcmFuc3BhcmVudCB0byB0aGUgaG92ZXIgc3R5bGUuXG4gICAgfSxcblxuICAgIFtgJi4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5mb2N1c2VkfTphZnRlcmBdOiB7XG4gICAgICAvLyB0cmFuc2xhdGVYKDApIGlzIGEgd29ya2Fyb3VuZCBmb3IgU2FmYXJpIHRyYW5zZm9ybSBzY2FsZSBidWdcbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL2lzc3Vlcy8zMTc2NlxuICAgICAgdHJhbnNmb3JtOiAnc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCknXG4gICAgfSxcbiAgICBbYCYuJHtmaWxsZWRJbnB1dENsYXNzZXMuZXJyb3J9YF06IHtcbiAgICAgICcmOmJlZm9yZSwgJjphZnRlcic6IHtcbiAgICAgICAgYm9yZGVyQm90dG9tQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgICAgIH1cbiAgICB9LFxuICAgICcmOmJlZm9yZSc6IHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAke3RoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5jb21tb24ub25CYWNrZ3JvdW5kQ2hhbm5lbH0gLyAke3RoZW1lLnZhcnMub3BhY2l0eS5pbnB1dFVuZGVybGluZX0pYCA6IGJvdHRvbUxpbmVDb2xvcn1gLFxuICAgICAgbGVmdDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIC8vIERvaW5nIHRoZSBvdGhlciB3YXkgYXJvdW5kIGNyYXNoIG9uIElFMTEgXCInJ1wiIGh0dHBzOi8vZ2l0aHViLmNvbS9jc3NpbmpzL2pzcy9pc3N1ZXMvMjQyXG4gICAgICBjb250ZW50OiAnXCJcXFxcMDBhMFwiJyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgcmlnaHQ6IDAsXG4gICAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ2JvcmRlci1ib3R0b20tY29sb3InLCB7XG4gICAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyXG4gICAgICB9KSxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyAvLyBUcmFuc3BhcmVudCB0byB0aGUgaG92ZXIgc3R5bGUuXG4gICAgfSxcblxuICAgIFtgJjpob3Zlcjpub3QoLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmRpc2FibGVkfSwgLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmVycm9yfSk6YmVmb3JlYF06IHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQucHJpbWFyeX1gXG4gICAgfSxcbiAgICBbYCYuJHtmaWxsZWRJbnB1dENsYXNzZXMuZGlzYWJsZWR9OmJlZm9yZWBdOiB7XG4gICAgICBib3JkZXJCb3R0b21TdHlsZTogJ2RvdHRlZCdcbiAgICB9XG4gIH0sIG93bmVyU3RhdGUuc3RhcnRBZG9ybm1lbnQgJiYge1xuICAgIHBhZGRpbmdMZWZ0OiAxMlxuICB9LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiB7XG4gICAgcGFkZGluZ1JpZ2h0OiAxMlxuICB9LCBvd25lclN0YXRlLm11bHRpbGluZSAmJiBfZXh0ZW5kcyh7XG4gICAgcGFkZGluZzogJzI1cHggMTJweCA4cHgnXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICAgcGFkZGluZ1RvcDogMjEsXG4gICAgcGFkZGluZ0JvdHRvbTogNFxuICB9LCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIHtcbiAgICBwYWRkaW5nVG9wOiAxNixcbiAgICBwYWRkaW5nQm90dG9tOiAxN1xuICB9LCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICAgcGFkZGluZ1RvcDogOCxcbiAgICBwYWRkaW5nQm90dG9tOiA5XG4gIH0pKTtcbn0pO1xuY29uc3QgRmlsbGVkSW5wdXRJbnB1dCA9IHN0eWxlZChJbnB1dEJhc2VJbnB1dCwge1xuICBuYW1lOiAnTXVpRmlsbGVkSW5wdXQnLFxuICBzbG90OiAnSW5wdXQnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgcGFkZGluZ1RvcDogMjUsXG4gIHBhZGRpbmdSaWdodDogMTIsXG4gIHBhZGRpbmdCb3R0b206IDgsXG4gIHBhZGRpbmdMZWZ0OiAxMlxufSwgIXRoZW1lLnZhcnMgJiYge1xuICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgIFdlYmtpdEJveFNoYWRvdzogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcwIDAgMCAxMDBweCAjMjY2Nzk4IGluc2V0JyxcbiAgICBXZWJraXRUZXh0RmlsbENvbG9yOiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJyNmZmYnLFxuICAgIGNhcmV0Q29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnI2ZmZicsXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogJ2luaGVyaXQnLFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAnaW5oZXJpdCdcbiAgfVxufSwgdGhlbWUudmFycyAmJiB7XG4gICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogJ2luaGVyaXQnLFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAnaW5oZXJpdCdcbiAgfSxcbiAgW3RoZW1lLmdldENvbG9yU2NoZW1lU2VsZWN0b3IoJ2RhcmsnKV06IHtcbiAgICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgICAgV2Via2l0Qm94U2hhZG93OiAnMCAwIDAgMTAwcHggIzI2Njc5OCBpbnNldCcsXG4gICAgICBXZWJraXRUZXh0RmlsbENvbG9yOiAnI2ZmZicsXG4gICAgICBjYXJldENvbG9yOiAnI2ZmZidcbiAgICB9XG4gIH1cbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHBhZGRpbmdUb3A6IDIxLFxuICBwYWRkaW5nQm90dG9tOiA0XG59LCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIHtcbiAgcGFkZGluZ1RvcDogMTYsXG4gIHBhZGRpbmdCb3R0b206IDE3XG59LCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHtcbiAgcGFkZGluZ0xlZnQ6IDBcbn0sIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHtcbiAgcGFkZGluZ1JpZ2h0OiAwXG59LCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHBhZGRpbmdUb3A6IDgsXG4gIHBhZGRpbmdCb3R0b206IDlcbn0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIHtcbiAgcGFkZGluZ1RvcDogMCxcbiAgcGFkZGluZ0JvdHRvbTogMCxcbiAgcGFkZGluZ0xlZnQ6IDAsXG4gIHBhZGRpbmdSaWdodDogMFxufSkpO1xuY29uc3QgRmlsbGVkSW5wdXQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGaWxsZWRJbnB1dChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9yZWYsIF9zbG90cyRyb290LCBfcmVmMiwgX3Nsb3RzJGlucHV0O1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGaWxsZWRJbnB1dCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICAgIGNvbXBvbmVudHNQcm9wczogY29tcG9uZW50c1Byb3BzUHJvcCxcbiAgICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgICAgLy8gZGVjbGFyZSBoZXJlIHRvIHByZXZlbnQgc3ByZWFkaW5nIHRvIERPTVxuICAgICAgaW5wdXRDb21wb25lbnQgPSAnaW5wdXQnLFxuICAgICAgbXVsdGlsaW5lID0gZmFsc2UsXG4gICAgICBzbG90UHJvcHMsXG4gICAgICBzbG90cyA9IHt9LFxuICAgICAgdHlwZSA9ICd0ZXh0J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZnVsbFdpZHRoLFxuICAgIGlucHV0Q29tcG9uZW50LFxuICAgIG11bHRpbGluZSxcbiAgICB0eXBlXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMocHJvcHMpO1xuICBjb25zdCBmaWxsZWRJbnB1dENvbXBvbmVudHNQcm9wcyA9IHtcbiAgICByb290OiB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSxcbiAgICBpbnB1dDoge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH1cbiAgfTtcbiAgY29uc3QgY29tcG9uZW50c1Byb3BzID0gKHNsb3RQcm9wcyAhPSBudWxsID8gc2xvdFByb3BzIDogY29tcG9uZW50c1Byb3BzUHJvcCkgPyBkZWVwbWVyZ2UoZmlsbGVkSW5wdXRDb21wb25lbnRzUHJvcHMsIHNsb3RQcm9wcyAhPSBudWxsID8gc2xvdFByb3BzIDogY29tcG9uZW50c1Byb3BzUHJvcCkgOiBmaWxsZWRJbnB1dENvbXBvbmVudHNQcm9wcztcbiAgY29uc3QgUm9vdFNsb3QgPSAoX3JlZiA9IChfc2xvdHMkcm9vdCA9IHNsb3RzLnJvb3QpICE9IG51bGwgPyBfc2xvdHMkcm9vdCA6IGNvbXBvbmVudHMuUm9vdCkgIT0gbnVsbCA/IF9yZWYgOiBGaWxsZWRJbnB1dFJvb3Q7XG4gIGNvbnN0IElucHV0U2xvdCA9IChfcmVmMiA9IChfc2xvdHMkaW5wdXQgPSBzbG90cy5pbnB1dCkgIT0gbnVsbCA/IF9zbG90cyRpbnB1dCA6IGNvbXBvbmVudHMuSW5wdXQpICE9IG51bGwgPyBfcmVmMiA6IEZpbGxlZElucHV0SW5wdXQ7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dEJhc2UsIF9leHRlbmRzKHtcbiAgICBzbG90czoge1xuICAgICAgcm9vdDogUm9vdFNsb3QsXG4gICAgICBpbnB1dDogSW5wdXRTbG90XG4gICAgfSxcbiAgICBjb21wb25lbnRzUHJvcHM6IGNvbXBvbmVudHNQcm9wcyxcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICBpbnB1dENvbXBvbmVudDogaW5wdXRDb21wb25lbnQsXG4gICAgbXVsdGlsaW5lOiBtdWx0aWxpbmUsXG4gICAgcmVmOiByZWYsXG4gICAgdHlwZTogdHlwZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXNcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGaWxsZWRJbnB1dC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaGVscHMgdXNlcnMgdG8gZmlsbCBmb3JtcyBmYXN0ZXIsIGVzcGVjaWFsbHkgb24gbW9iaWxlIGRldmljZXMuXG4gICAqIFRoZSBuYW1lIGNhbiBiZSBjb25mdXNpbmcsIGFzIGl0J3MgbW9yZSBsaWtlIGFuIGF1dG9maWxsLlxuICAgKiBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgaXQgW2ZvbGxvd2luZyB0aGUgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybS1jb250cm9sLWluZnJhc3RydWN0dXJlLmh0bWwjYXV0b2ZpbGwpLlxuICAgKi9cbiAgYXV0b0NvbXBsZXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ3ByaW1hcnknYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeSddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RzYCBwcm9wIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIElucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90UHJvcHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdFByb3BzYCBwcm9wIGluc3RlYWQsIGFzIGBjb21wb25lbnRzUHJvcHNgIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGlucHV0IHdpbGwgbm90IGhhdmUgYW4gdW5kZXJsaW5lLlxuICAgKi9cbiAgZGlzYWJsZVVuZGVybGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbmQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBlbmRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBoaWRkZW4uXG4gICAqIFRoaXMgaXMgdXNlZCB0byBpbmNyZWFzZSBkZW5zaXR5IGZvciBhIGBGaWxsZWRJbnB1dGAuXG4gICAqIEJlIHN1cmUgdG8gYWRkIGBhcmlhLWxhYmVsYCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGlkZGVuTGFiZWw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2lucHV0J1xuICAgKi9cbiAgaW5wdXRDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAnbm9uZSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZSddKSxcbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtYXhSb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWluUm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIFtUZXh0YXJlYUF1dG9zaXplXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdGV4dGFyZWEtYXV0b3NpemUvKSBlbGVtZW50IGlzIHJlbmRlcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlsaW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgdmFsdWUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5DaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50IHwgSFRNTElucHV0RWxlbWVudD59IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChzdHJpbmcpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHNob3J0IGhpbnQgZGlzcGxheWVkIGluIHRoZSBgaW5wdXRgIGJlZm9yZSB0aGUgdXNlciBlbnRlcnMgYSB2YWx1ZS5cbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSXQgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAqIChub3QgZnJvbSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmaWVsZCkuXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIHJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c1Byb3BzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBTdGFydCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIHN0YXJ0QWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC4gSXQgc2hvdWxkIGJlIFthIHZhbGlkIEhUTUw1IGlucHV0IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNGb3JtXyUzQ2lucHV0JTNFX3R5cGVzKS5cbiAgICogQGRlZmF1bHQgJ3RleHQnXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHJlcXVpcmVkIGZvciBhIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5GaWxsZWRJbnB1dC5tdWlOYW1lID0gJ0lucHV0JztcbmV4cG9ydCBkZWZhdWx0IEZpbGxlZElucHV0OyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlGb3JtQ29udHJvbCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUNvbnRyb2xDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRm9ybUNvbnRyb2wnLCBbJ3Jvb3QnLCAnbWFyZ2luTm9uZScsICdtYXJnaW5Ob3JtYWwnLCAnbWFyZ2luRGVuc2UnLCAnZnVsbFdpZHRoJywgJ2Rpc2FibGVkJ10pO1xuZXhwb3J0IGRlZmF1bHQgZm9ybUNvbnRyb2xDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRcIiwgXCJkaXNhYmxlZFwiLCBcImVycm9yXCIsIFwiZm9jdXNlZFwiLCBcImZ1bGxXaWR0aFwiLCBcImhpZGRlbkxhYmVsXCIsIFwibWFyZ2luXCIsIFwicmVxdWlyZWRcIiwgXCJzaXplXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBpc0ZpbGxlZCwgaXNBZG9ybmVkU3RhcnQgfSBmcm9tICcuLi9JbnB1dEJhc2UvdXRpbHMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgaXNNdWlFbGVtZW50IGZyb20gJy4uL3V0aWxzL2lzTXVpRWxlbWVudCc7XG5pbXBvcnQgRm9ybUNvbnRyb2xDb250ZXh0IGZyb20gJy4vRm9ybUNvbnRyb2xDb250ZXh0JztcbmltcG9ydCB7IGdldEZvcm1Db250cm9sVXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuL2Zvcm1Db250cm9sQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgbWFyZ2luLFxuICAgIGZ1bGxXaWR0aFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgbWFyZ2luICE9PSAnbm9uZScgJiYgYG1hcmdpbiR7Y2FwaXRhbGl6ZShtYXJnaW4pfWAsIGZ1bGxXaWR0aCAmJiAnZnVsbFdpZHRoJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBGb3JtQ29udHJvbFJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aUZvcm1Db250cm9sJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHtcbiAgICBvd25lclN0YXRlXG4gIH0sIHN0eWxlcykgPT4ge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3R5bGVzLnJvb3QsIHN0eWxlc1tgbWFyZ2luJHtjYXBpdGFsaXplKG93bmVyU3RhdGUubWFyZ2luKX1gXSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYgc3R5bGVzLmZ1bGxXaWR0aCk7XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAvLyBSZXNldCBmaWVsZHNldCBkZWZhdWx0IHN0eWxlLlxuICBtaW5XaWR0aDogMCxcbiAgcGFkZGluZzogMCxcbiAgbWFyZ2luOiAwLFxuICBib3JkZXI6IDAsXG4gIHZlcnRpY2FsQWxpZ246ICd0b3AnXG59LCBvd25lclN0YXRlLm1hcmdpbiA9PT0gJ25vcm1hbCcgJiYge1xuICBtYXJnaW5Ub3A6IDE2LFxuICBtYXJnaW5Cb3R0b206IDhcbn0sIG93bmVyU3RhdGUubWFyZ2luID09PSAnZGVuc2UnICYmIHtcbiAgbWFyZ2luVG9wOiA4LFxuICBtYXJnaW5Cb3R0b206IDRcbn0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHtcbiAgd2lkdGg6ICcxMDAlJ1xufSkpO1xuXG4vKipcbiAqIFByb3ZpZGVzIGNvbnRleHQgc3VjaCBhcyBmaWxsZWQvZm9jdXNlZC9lcnJvci9yZXF1aXJlZCBmb3IgZm9ybSBpbnB1dHMuXG4gKiBSZWx5aW5nIG9uIHRoZSBjb250ZXh0IHByb3ZpZGVzIGhpZ2ggZmxleGliaWxpdHkgYW5kIGVuc3VyZXMgdGhhdCB0aGUgc3RhdGUgYWx3YXlzIHN0YXlzXG4gKiBjb25zaXN0ZW50IGFjcm9zcyB0aGUgY2hpbGRyZW4gb2YgdGhlIGBGb3JtQ29udHJvbGAuXG4gKiBUaGlzIGNvbnRleHQgaXMgdXNlZCBieSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6XG4gKlxuICogIC0gRm9ybUxhYmVsXG4gKiAgLSBGb3JtSGVscGVyVGV4dFxuICogIC0gSW5wdXRcbiAqICAtIElucHV0TGFiZWxcbiAqXG4gKiBZb3UgY2FuIGZpbmQgb25lIGNvbXBvc2l0aW9uIGV4YW1wbGUgYmVsb3cgYW5kIG1vcmUgZ29pbmcgdG8gW3RoZSBkZW1vc10oL21hdGVyaWFsLXVpL3JlYWN0LXRleHQtZmllbGQvI2NvbXBvbmVudHMpLlxuICpcbiAqIGBgYGpzeFxuICogPEZvcm1Db250cm9sPlxuICogICA8SW5wdXRMYWJlbCBodG1sRm9yPVwibXktaW5wdXRcIj5FbWFpbCBhZGRyZXNzPC9JbnB1dExhYmVsPlxuICogICA8SW5wdXQgaWQ9XCJteS1pbnB1dFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJteS1oZWxwZXItdGV4dFwiIC8+XG4gKiAgIDxGb3JtSGVscGVyVGV4dCBpZD1cIm15LWhlbHBlci10ZXh0XCI+V2UnbGwgbmV2ZXIgc2hhcmUgeW91ciBlbWFpbC48L0Zvcm1IZWxwZXJUZXh0PlxuICogPC9Gb3JtQ29udHJvbD5cbiAqIGBgYFxuICpcbiAqIOKaoO+4jyBPbmx5IG9uZSBgSW5wdXRCYXNlYCBjYW4gYmUgdXNlZCB3aXRoaW4gYSBGb3JtQ29udHJvbCBiZWNhdXNlIGl0IGNyZWF0ZXMgdmlzdWFsIGluY29uc2lzdGVuY2llcy5cbiAqIEZvciBpbnN0YW5jZSwgb25seSBvbmUgaW5wdXQgY2FuIGJlIGZvY3VzZWQgYXQgdGhlIHNhbWUgdGltZSwgdGhlIHN0YXRlIHNob3VsZG4ndCBiZSBzaGFyZWQuXG4gKi9cbmNvbnN0IEZvcm1Db250cm9sID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9ybUNvbnRyb2woaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUZvcm1Db250cm9sJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2xvciA9ICdwcmltYXJ5JyxcbiAgICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgIGVycm9yID0gZmFsc2UsXG4gICAgICBmb2N1c2VkOiB2aXN1YWxseUZvY3VzZWQsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIGhpZGRlbkxhYmVsID0gZmFsc2UsXG4gICAgICBtYXJnaW4gPSAnbm9uZScsXG4gICAgICByZXF1aXJlZCA9IGZhbHNlLFxuICAgICAgc2l6ZSA9ICdtZWRpdW0nLFxuICAgICAgdmFyaWFudCA9ICdvdXRsaW5lZCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGNvbXBvbmVudCxcbiAgICBkaXNhYmxlZCxcbiAgICBlcnJvcixcbiAgICBmdWxsV2lkdGgsXG4gICAgaGlkZGVuTGFiZWwsXG4gICAgbWFyZ2luLFxuICAgIHJlcXVpcmVkLFxuICAgIHNpemUsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBbYWRvcm5lZFN0YXJ0LCBzZXRBZG9ybmVkU3RhcnRdID0gUmVhY3QudXNlU3RhdGUoKCkgPT4ge1xuICAgIC8vIFdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgZmluZCB0aGUgSW5wdXQgaW4gb3JkZXJcbiAgICAvLyB0byBmdWxseSBzdXBwb3J0IHNlcnZlci1zaWRlIHJlbmRlcmluZy5cbiAgICBsZXQgaW5pdGlhbEFkb3JuZWRTdGFydCA9IGZhbHNlO1xuICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgICBpZiAoIWlzTXVpRWxlbWVudChjaGlsZCwgWydJbnB1dCcsICdTZWxlY3QnXSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5wdXQgPSBpc011aUVsZW1lbnQoY2hpbGQsIFsnU2VsZWN0J10pID8gY2hpbGQucHJvcHMuaW5wdXQgOiBjaGlsZDtcbiAgICAgICAgaWYgKGlucHV0ICYmIGlzQWRvcm5lZFN0YXJ0KGlucHV0LnByb3BzKSkge1xuICAgICAgICAgIGluaXRpYWxBZG9ybmVkU3RhcnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGluaXRpYWxBZG9ybmVkU3RhcnQ7XG4gIH0pO1xuICBjb25zdCBbZmlsbGVkLCBzZXRGaWxsZWRdID0gUmVhY3QudXNlU3RhdGUoKCkgPT4ge1xuICAgIC8vIFdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgZmluZCB0aGUgSW5wdXQgaW4gb3JkZXJcbiAgICAvLyB0byBmdWxseSBzdXBwb3J0IHNlcnZlci1zaWRlIHJlbmRlcmluZy5cbiAgICBsZXQgaW5pdGlhbEZpbGxlZCA9IGZhbHNlO1xuICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgICBpZiAoIWlzTXVpRWxlbWVudChjaGlsZCwgWydJbnB1dCcsICdTZWxlY3QnXSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRmlsbGVkKGNoaWxkLnByb3BzLCB0cnVlKSB8fCBpc0ZpbGxlZChjaGlsZC5wcm9wcy5pbnB1dFByb3BzLCB0cnVlKSkge1xuICAgICAgICAgIGluaXRpYWxGaWxsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGluaXRpYWxGaWxsZWQ7XG4gIH0pO1xuICBjb25zdCBbZm9jdXNlZFN0YXRlLCBzZXRGb2N1c2VkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgaWYgKGRpc2FibGVkICYmIGZvY3VzZWRTdGF0ZSkge1xuICAgIHNldEZvY3VzZWQoZmFsc2UpO1xuICB9XG4gIGNvbnN0IGZvY3VzZWQgPSB2aXN1YWxseUZvY3VzZWQgIT09IHVuZGVmaW5lZCAmJiAhZGlzYWJsZWQgPyB2aXN1YWxseUZvY3VzZWQgOiBmb2N1c2VkU3RhdGU7XG4gIGxldCByZWdpc3RlckVmZmVjdDtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBjb25zdCByZWdpc3RlcmVkSW5wdXQgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAgIHJlZ2lzdGVyRWZmZWN0ID0gKCkgPT4ge1xuICAgICAgaWYgKHJlZ2lzdGVyZWRJbnB1dC5jdXJyZW50KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRoZXJlIGFyZSBtdWx0aXBsZSBgSW5wdXRCYXNlYCBjb21wb25lbnRzIGluc2lkZSBhIEZvcm1Db250cm9sLicsICdUaGlzIGNyZWF0ZXMgdmlzdWFsIGluY29uc2lzdGVuY2llcywgb25seSB1c2Ugb25lIGBJbnB1dEJhc2VgLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICAgIHJlZ2lzdGVyZWRJbnB1dC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHJlZ2lzdGVyZWRJbnB1dC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9O1xuICAgIH07XG4gIH1cbiAgY29uc3QgY2hpbGRDb250ZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkb3JuZWRTdGFydCxcbiAgICAgIHNldEFkb3JuZWRTdGFydCxcbiAgICAgIGNvbG9yLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBlcnJvcixcbiAgICAgIGZpbGxlZCxcbiAgICAgIGZvY3VzZWQsXG4gICAgICBmdWxsV2lkdGgsXG4gICAgICBoaWRkZW5MYWJlbCxcbiAgICAgIHNpemUsXG4gICAgICBvbkJsdXI6ICgpID0+IHtcbiAgICAgICAgc2V0Rm9jdXNlZChmYWxzZSk7XG4gICAgICB9LFxuICAgICAgb25FbXB0eTogKCkgPT4ge1xuICAgICAgICBzZXRGaWxsZWQoZmFsc2UpO1xuICAgICAgfSxcbiAgICAgIG9uRmlsbGVkOiAoKSA9PiB7XG4gICAgICAgIHNldEZpbGxlZCh0cnVlKTtcbiAgICAgIH0sXG4gICAgICBvbkZvY3VzOiAoKSA9PiB7XG4gICAgICAgIHNldEZvY3VzZWQodHJ1ZSk7XG4gICAgICB9LFxuICAgICAgcmVnaXN0ZXJFZmZlY3QsXG4gICAgICByZXF1aXJlZCxcbiAgICAgIHZhcmlhbnRcbiAgICB9O1xuICB9LCBbYWRvcm5lZFN0YXJ0LCBjb2xvciwgZGlzYWJsZWQsIGVycm9yLCBmaWxsZWQsIGZvY3VzZWQsIGZ1bGxXaWR0aCwgaGlkZGVuTGFiZWwsIHJlZ2lzdGVyRWZmZWN0LCByZXF1aXJlZCwgc2l6ZSwgdmFyaWFudF0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goRm9ybUNvbnRyb2xDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNoaWxkQ29udGV4dCxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goRm9ybUNvbnRyb2xSb290LCBfZXh0ZW5kcyh7XG4gICAgICBhczogY29tcG9uZW50LFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgICByZWY6IHJlZlxuICAgIH0sIG90aGVyLCB7XG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZvcm1Db250cm9sLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCwgaW5wdXQgYW5kIGhlbHBlciB0ZXh0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBkaXNhYmxlZCBzdGF0ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNwbGF5ZWQgaW4gZm9jdXNlZCBzdGF0ZS5cbiAgICovXG4gIGZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGhpZGRlbi5cbiAgICogVGhpcyBpcyB1c2VkIHRvIGluY3JlYXNlIGRlbnNpdHkgZm9yIGEgYEZpbGxlZElucHV0YC5cbiAgICogQmUgc3VyZSB0byBhZGQgYGFyaWEtbGFiZWxgIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBoaWRkZW5MYWJlbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgIG9yIGBub3JtYWxgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nIG9mIHRoaXMgYW5kIGNvbnRhaW5lZCBjb21wb25lbnRzLlxuICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZScsICdub3JtYWwnXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCB3aWxsIGluZGljYXRlIHRoYXQgdGhlIGBpbnB1dGAgaXMgcmVxdWlyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ291dGxpbmVkJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUNvbnRyb2w7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBGb3JtQ29udHJvbENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRm9ybUNvbnRyb2xDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0Zvcm1Db250cm9sQ29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBGb3JtQ29udHJvbENvbnRleHQ7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gIHByb3BzLFxuICBzdGF0ZXMsXG4gIG11aUZvcm1Db250cm9sXG59KSB7XG4gIHJldHVybiBzdGF0ZXMucmVkdWNlKChhY2MsIHN0YXRlKSA9PiB7XG4gICAgYWNjW3N0YXRlXSA9IHByb3BzW3N0YXRlXTtcbiAgICBpZiAobXVpRm9ybUNvbnRyb2wpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcHNbc3RhdGVdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBhY2Nbc3RhdGVdID0gbXVpRm9ybUNvbnRyb2xbc3RhdGVdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRm9ybUNvbnRyb2xDb250ZXh0IGZyb20gJy4vRm9ybUNvbnRyb2xDb250ZXh0JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUZvcm1Db250cm9sKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChGb3JtQ29udHJvbENvbnRleHQpO1xufSIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtSGVscGVyVGV4dFV0aWxpdHlDbGFzc2VzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlGb3JtSGVscGVyVGV4dCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUhlbHBlclRleHRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRm9ybUhlbHBlclRleHQnLCBbJ3Jvb3QnLCAnZXJyb3InLCAnZGlzYWJsZWQnLCAnc2l6ZVNtYWxsJywgJ3NpemVNZWRpdW0nLCAnY29udGFpbmVkJywgJ2ZvY3VzZWQnLCAnZmlsbGVkJywgJ3JlcXVpcmVkJ10pO1xuZXhwb3J0IGRlZmF1bHQgZm9ybUhlbHBlclRleHRDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbnZhciBfc3BhbjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcImZpbGxlZFwiLCBcImZvY3VzZWRcIiwgXCJtYXJnaW5cIiwgXCJyZXF1aXJlZFwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgZm9ybUhlbHBlclRleHRDbGFzc2VzLCB7IGdldEZvcm1IZWxwZXJUZXh0VXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuL2Zvcm1IZWxwZXJUZXh0Q2xhc3Nlcyc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgY29udGFpbmVkLFxuICAgIHNpemUsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZmlsbGVkLFxuICAgIGZvY3VzZWQsXG4gICAgcmVxdWlyZWRcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGVycm9yICYmICdlcnJvcicsIHNpemUgJiYgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YCwgY29udGFpbmVkICYmICdjb250YWluZWQnLCBmb2N1c2VkICYmICdmb2N1c2VkJywgZmlsbGVkICYmICdmaWxsZWQnLCByZXF1aXJlZCAmJiAncmVxdWlyZWQnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEZvcm1IZWxwZXJUZXh0VXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcbmNvbnN0IEZvcm1IZWxwZXJUZXh0Um9vdCA9IHN0eWxlZCgncCcsIHtcbiAgbmFtZTogJ011aUZvcm1IZWxwZXJUZXh0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuc2l6ZSAmJiBzdHlsZXNbYHNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5zaXplKX1gXSwgb3duZXJTdGF0ZS5jb250YWluZWQgJiYgc3R5bGVzLmNvbnRhaW5lZCwgb3duZXJTdGF0ZS5maWxsZWQgJiYgc3R5bGVzLmZpbGxlZF07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnNlY29uZGFyeVxufSwgdGhlbWUudHlwb2dyYXBoeS5jYXB0aW9uLCB7XG4gIHRleHRBbGlnbjogJ2xlZnQnLFxuICBtYXJnaW5Ub3A6IDMsXG4gIG1hcmdpblJpZ2h0OiAwLFxuICBtYXJnaW5Cb3R0b206IDAsXG4gIG1hcmdpbkxlZnQ6IDAsXG4gIFtgJi4ke2Zvcm1IZWxwZXJUZXh0Q2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LmRpc2FibGVkXG4gIH0sXG4gIFtgJi4ke2Zvcm1IZWxwZXJUZXh0Q2xhc3Nlcy5lcnJvcn1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gIH1cbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIG1hcmdpblRvcDogNFxufSwgb3duZXJTdGF0ZS5jb250YWluZWQgJiYge1xuICBtYXJnaW5MZWZ0OiAxNCxcbiAgbWFyZ2luUmlnaHQ6IDE0XG59KSk7XG5jb25zdCBGb3JtSGVscGVyVGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvcm1IZWxwZXJUZXh0KGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGb3JtSGVscGVyVGV4dCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ3AnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ3ZhcmlhbnQnLCAnc2l6ZScsICdkaXNhYmxlZCcsICdlcnJvcicsICdmaWxsZWQnLCAnZm9jdXNlZCcsICdyZXF1aXJlZCddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29tcG9uZW50LFxuICAgIGNvbnRhaW5lZDogZmNzLnZhcmlhbnQgPT09ICdmaWxsZWQnIHx8IGZjcy52YXJpYW50ID09PSAnb3V0bGluZWQnLFxuICAgIHZhcmlhbnQ6IGZjcy52YXJpYW50LFxuICAgIHNpemU6IGZjcy5zaXplLFxuICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgZXJyb3I6IGZjcy5lcnJvcixcbiAgICBmaWxsZWQ6IGZjcy5maWxsZWQsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgcmVxdWlyZWQ6IGZjcy5yZXF1aXJlZFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goRm9ybUhlbHBlclRleHRSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IGNvbXBvbmVudCxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4gPT09ICcgJyA/IC8vIG5vdHJhbnNsYXRlIG5lZWRlZCB3aGlsZSBHb29nbGUgVHJhbnNsYXRlIHdpbGwgbm90IGZpeCB6ZXJvLXdpZHRoIHNwYWNlIGlzc3VlXG4gICAgX3NwYW4gfHwgKF9zcGFuID0gLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJub3RyYW5zbGF0ZVwiLFxuICAgICAgY2hpbGRyZW46IFwiXFx1MjAwQlwiXG4gICAgfSkpIDogY2hpbGRyZW5cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtSGVscGVyVGV4dC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBJZiBgJyAnYCBpcyBwcm92aWRlZCwgdGhlIGNvbXBvbmVudCByZXNlcnZlcyBvbmUgbGluZSBoZWlnaHQgZm9yIGRpc3BsYXlpbmcgYSBmdXR1cmUgbWVzc2FnZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGhlbHBlciB0ZXh0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBkaXNhYmxlZCBzdGF0ZS5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgaGVscGVyIHRleHQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGhlbHBlciB0ZXh0IHNob3VsZCB1c2UgZmlsbGVkIGNsYXNzZXMga2V5LlxuICAgKi9cbiAgZmlsbGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGhlbHBlciB0ZXh0IHNob3VsZCB1c2UgZm9jdXNlZCBjbGFzc2VzIGtleS5cbiAgICovXG4gIGZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZSddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGhlbHBlciB0ZXh0IHNob3VsZCB1c2UgcmVxdWlyZWQgY2xhc3NlcyBrZXkuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUhlbHBlclRleHQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBHbG9iYWxTdHlsZXMgYXMgU3lzdGVtR2xvYmFsU3R5bGVzIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGRlZmF1bHRUaGVtZSBmcm9tICcuLi9zdHlsZXMvZGVmYXVsdFRoZW1lJztcbmltcG9ydCBUSEVNRV9JRCBmcm9tICcuLi9zdHlsZXMvaWRlbnRpZmllcic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gR2xvYmFsU3R5bGVzKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChTeXN0ZW1HbG9iYWxTdHlsZXMsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRlZmF1bHRUaGVtZTogZGVmYXVsdFRoZW1lLFxuICAgIHRoZW1lSWQ6IFRIRU1FX0lEXG4gIH0pKTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEdsb2JhbFN0eWxlcy5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGUgc3R5bGVzIHlvdSB3YW50IHRvIGFwcGx5IGdsb2JhbGx5LlxuICAgKi9cbiAgc3R5bGVzOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5ib29sXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBHbG9iYWxTdHlsZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgR3JpZENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCgpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgR3JpZENvbnRleHQuZGlzcGxheU5hbWUgPSAnR3JpZENvbnRleHQnO1xufVxuZXhwb3J0IGRlZmF1bHQgR3JpZENvbnRleHQ7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdyaWRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUdyaWQnLCBzbG90KTtcbn1cbmNvbnN0IFNQQUNJTkdTID0gWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXTtcbmNvbnN0IERJUkVDVElPTlMgPSBbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXTtcbmNvbnN0IFdSQVBTID0gWydub3dyYXAnLCAnd3JhcC1yZXZlcnNlJywgJ3dyYXAnXTtcbmNvbnN0IEdSSURfU0laRVMgPSBbJ2F1dG8nLCB0cnVlLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyXTtcbmNvbnN0IGdyaWRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpR3JpZCcsIFsncm9vdCcsICdjb250YWluZXInLCAnaXRlbScsICd6ZXJvTWluV2lkdGgnLFxuLy8gc3BhY2luZ3Ncbi4uLlNQQUNJTkdTLm1hcChzcGFjaW5nID0+IGBzcGFjaW5nLXhzLSR7c3BhY2luZ31gKSxcbi8vIGRpcmVjdGlvbiB2YWx1ZXNcbi4uLkRJUkVDVElPTlMubWFwKGRpcmVjdGlvbiA9PiBgZGlyZWN0aW9uLXhzLSR7ZGlyZWN0aW9ufWApLFxuLy8gd3JhcCB2YWx1ZXNcbi4uLldSQVBTLm1hcCh3cmFwID0+IGB3cmFwLXhzLSR7d3JhcH1gKSxcbi8vIGdyaWQgc2l6ZXMgZm9yIGFsbCBicmVha3BvaW50c1xuLi4uR1JJRF9TSVpFUy5tYXAoc2l6ZSA9PiBgZ3JpZC14cy0ke3NpemV9YCksIC4uLkdSSURfU0laRVMubWFwKHNpemUgPT4gYGdyaWQtc20tJHtzaXplfWApLCAuLi5HUklEX1NJWkVTLm1hcChzaXplID0+IGBncmlkLW1kLSR7c2l6ZX1gKSwgLi4uR1JJRF9TSVpFUy5tYXAoc2l6ZSA9PiBgZ3JpZC1sZy0ke3NpemV9YCksIC4uLkdSSURfU0laRVMubWFwKHNpemUgPT4gYGdyaWQteGwtJHtzaXplfWApXSk7XG5leHBvcnQgZGVmYXVsdCBncmlkQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbi8vIEEgZ3JpZCBjb21wb25lbnQgdXNpbmcgdGhlIGZvbGxvd2luZyBsaWJzIGFzIGluc3BpcmF0aW9uLlxuLy9cbi8vIEZvciB0aGUgaW1wbGVtZW50YXRpb246XG4vLyAtIGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS9kb2NzLzQuMy9sYXlvdXQvZ3JpZC9cbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2tyaXN0b2Zlcmpvc2VwaC9mbGV4Ym94Z3JpZC9ibG9iL21hc3Rlci9zcmMvY3NzL2ZsZXhib3hncmlkLmNzc1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vcm95bGVlMDcwNC9yZWFjdC1mbGV4Ym94LWdyaWRcbi8vIC0gaHR0cHM6Ly9tYXRlcmlhbC5hbmd1bGFyanMub3JnL2xhdGVzdC9sYXlvdXQvaW50cm9kdWN0aW9uXG4vL1xuLy8gRm9sbG93IHRoaXMgZmxleGJveCBHdWlkZSB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBtb2RlbDpcbi8vIC0gaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9zbmlwcGV0cy9jc3MvYS1ndWlkZS10by1mbGV4Ym94L1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNvbHVtbnNcIiwgXCJjb2x1bW5TcGFjaW5nXCIsIFwiY29tcG9uZW50XCIsIFwiY29udGFpbmVyXCIsIFwiZGlyZWN0aW9uXCIsIFwiaXRlbVwiLCBcInJvd1NwYWNpbmdcIiwgXCJzcGFjaW5nXCIsIFwid3JhcFwiLCBcInplcm9NaW5XaWR0aFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2V4dGVuZFN4UHJvcCBhcyBleHRlbmRTeFByb3AsIGhhbmRsZUJyZWFrcG9pbnRzLCB1bnN0YWJsZV9yZXNvbHZlQnJlYWtwb2ludFZhbHVlcyBhcyByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCByZXF1aXJlUHJvcEZhY3RvcnkgZnJvbSAnLi4vdXRpbHMvcmVxdWlyZVByb3BGYWN0b3J5JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lJztcbmltcG9ydCBHcmlkQ29udGV4dCBmcm9tICcuL0dyaWRDb250ZXh0JztcbmltcG9ydCBncmlkQ2xhc3NlcywgeyBnZXRHcmlkVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9ncmlkQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gZ2V0T2Zmc2V0KHZhbCkge1xuICBjb25zdCBwYXJzZSA9IHBhcnNlRmxvYXQodmFsKTtcbiAgcmV0dXJuIGAke3BhcnNlfSR7U3RyaW5nKHZhbCkucmVwbGFjZShTdHJpbmcocGFyc2UpLCAnJykgfHwgJ3B4J31gO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlR3JpZCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSB7XG4gIGxldCBzaXplO1xuICByZXR1cm4gdGhlbWUuYnJlYWtwb2ludHMua2V5cy5yZWR1Y2UoKGdsb2JhbFN0eWxlcywgYnJlYWtwb2ludCkgPT4ge1xuICAgIC8vIFVzZSBzaWRlIGVmZmVjdCBvdmVyIGltbXV0YWJpbGl0eSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLlxuICAgIGxldCBzdHlsZXMgPSB7fTtcbiAgICBpZiAob3duZXJTdGF0ZVticmVha3BvaW50XSkge1xuICAgICAgc2l6ZSA9IG93bmVyU3RhdGVbYnJlYWtwb2ludF07XG4gICAgfVxuICAgIGlmICghc2l6ZSkge1xuICAgICAgcmV0dXJuIGdsb2JhbFN0eWxlcztcbiAgICB9XG4gICAgaWYgKHNpemUgPT09IHRydWUpIHtcbiAgICAgIC8vIEZvciB0aGUgYXV0byBsYXlvdXRpbmdcbiAgICAgIHN0eWxlcyA9IHtcbiAgICAgICAgZmxleEJhc2lzOiAwLFxuICAgICAgICBmbGV4R3JvdzogMSxcbiAgICAgICAgbWF4V2lkdGg6ICcxMDAlJ1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHNpemUgPT09ICdhdXRvJykge1xuICAgICAgc3R5bGVzID0ge1xuICAgICAgICBmbGV4QmFzaXM6ICdhdXRvJyxcbiAgICAgICAgZmxleEdyb3c6IDAsXG4gICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgIG1heFdpZHRoOiAnbm9uZScsXG4gICAgICAgIHdpZHRoOiAnYXV0bydcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbHVtbnNCcmVha3BvaW50VmFsdWVzID0gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICAgICAgICB2YWx1ZXM6IG93bmVyU3RhdGUuY29sdW1ucyxcbiAgICAgICAgYnJlYWtwb2ludHM6IHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlc1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjb2x1bW5WYWx1ZSA9IHR5cGVvZiBjb2x1bW5zQnJlYWtwb2ludFZhbHVlcyA9PT0gJ29iamVjdCcgPyBjb2x1bW5zQnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSA6IGNvbHVtbnNCcmVha3BvaW50VmFsdWVzO1xuICAgICAgaWYgKGNvbHVtblZhbHVlID09PSB1bmRlZmluZWQgfHwgY29sdW1uVmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbFN0eWxlcztcbiAgICAgIH1cbiAgICAgIC8vIEtlZXAgNyBzaWduaWZpY2FudCBudW1iZXJzLlxuICAgICAgY29uc3Qgd2lkdGggPSBgJHtNYXRoLnJvdW5kKHNpemUgLyBjb2x1bW5WYWx1ZSAqIDEwZTcpIC8gMTBlNX0lYDtcbiAgICAgIGxldCBtb3JlID0ge307XG4gICAgICBpZiAob3duZXJTdGF0ZS5jb250YWluZXIgJiYgb3duZXJTdGF0ZS5pdGVtICYmIG93bmVyU3RhdGUuY29sdW1uU3BhY2luZyAhPT0gMCkge1xuICAgICAgICBjb25zdCB0aGVtZVNwYWNpbmcgPSB0aGVtZS5zcGFjaW5nKG93bmVyU3RhdGUuY29sdW1uU3BhY2luZyk7XG4gICAgICAgIGlmICh0aGVtZVNwYWNpbmcgIT09ICcwcHgnKSB7XG4gICAgICAgICAgY29uc3QgZnVsbFdpZHRoID0gYGNhbGMoJHt3aWR0aH0gKyAke2dldE9mZnNldCh0aGVtZVNwYWNpbmcpfSlgO1xuICAgICAgICAgIG1vcmUgPSB7XG4gICAgICAgICAgICBmbGV4QmFzaXM6IGZ1bGxXaWR0aCxcbiAgICAgICAgICAgIG1heFdpZHRoOiBmdWxsV2lkdGhcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENsb3NlIHRvIHRoZSBib290c3RyYXAgaW1wbGVtZW50YXRpb246XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi84ZmNjYWEyNDM5ZTk3ZWM3MmE0YjdkYzQyY2NjMWY2NDk3OTBhZGIwL3Njc3MvbWl4aW5zL19ncmlkLnNjc3MjTDQxXG4gICAgICBzdHlsZXMgPSBfZXh0ZW5kcyh7XG4gICAgICAgIGZsZXhCYXNpczogd2lkdGgsXG4gICAgICAgIGZsZXhHcm93OiAwLFxuICAgICAgICBtYXhXaWR0aDogd2lkdGhcbiAgICAgIH0sIG1vcmUpO1xuICAgIH1cblxuICAgIC8vIE5vIG5lZWQgZm9yIGEgbWVkaWEgcXVlcnkgZm9yIHRoZSBmaXJzdCBzaXplLlxuICAgIGlmICh0aGVtZS5icmVha3BvaW50cy52YWx1ZXNbYnJlYWtwb2ludF0gPT09IDApIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oZ2xvYmFsU3R5bGVzLCBzdHlsZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnbG9iYWxTdHlsZXNbdGhlbWUuYnJlYWtwb2ludHMudXAoYnJlYWtwb2ludCldID0gc3R5bGVzO1xuICAgIH1cbiAgICByZXR1cm4gZ2xvYmFsU3R5bGVzO1xuICB9LCB7fSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVEaXJlY3Rpb24oe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkge1xuICBjb25zdCBkaXJlY3Rpb25WYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgdmFsdWVzOiBvd25lclN0YXRlLmRpcmVjdGlvbixcbiAgICBicmVha3BvaW50czogdGhlbWUuYnJlYWtwb2ludHMudmFsdWVzXG4gIH0pO1xuICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMoe1xuICAgIHRoZW1lXG4gIH0sIGRpcmVjdGlvblZhbHVlcywgcHJvcFZhbHVlID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSB7XG4gICAgICBmbGV4RGlyZWN0aW9uOiBwcm9wVmFsdWVcbiAgICB9O1xuICAgIGlmIChwcm9wVmFsdWUuaW5kZXhPZignY29sdW1uJykgPT09IDApIHtcbiAgICAgIG91dHB1dFtgJiA+IC4ke2dyaWRDbGFzc2VzLml0ZW19YF0gPSB7XG4gICAgICAgIG1heFdpZHRoOiAnbm9uZSdcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH0pO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIHplcm8gdmFsdWUgYnJlYWtwb2ludCBrZXlzIGJlZm9yZSBhIG5vbi16ZXJvIHZhbHVlIGJyZWFrcG9pbnQga2V5LlxuICogQGV4YW1wbGUgeyB4czogMCwgc206IDAsIG1kOiAyLCBsZzogMCwgeGw6IDAgfSBvciBbMCwgMCwgMiwgMCwgMF1cbiAqIEByZXR1cm5zIFt4cywgc21dXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RaZXJvVmFsdWVCcmVha3BvaW50S2V5cyh7XG4gIGJyZWFrcG9pbnRzLFxuICB2YWx1ZXNcbn0pIHtcbiAgbGV0IG5vblplcm9LZXkgPSAnJztcbiAgT2JqZWN0LmtleXModmFsdWVzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKG5vblplcm9LZXkgIT09ICcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh2YWx1ZXNba2V5XSAhPT0gMCkge1xuICAgICAgbm9uWmVyb0tleSA9IGtleTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzb3J0ZWRCcmVha3BvaW50S2V5c0J5VmFsdWUgPSBPYmplY3Qua2V5cyhicmVha3BvaW50cykuc29ydCgoYSwgYikgPT4ge1xuICAgIHJldHVybiBicmVha3BvaW50c1thXSAtIGJyZWFrcG9pbnRzW2JdO1xuICB9KTtcbiAgcmV0dXJuIHNvcnRlZEJyZWFrcG9pbnRLZXlzQnlWYWx1ZS5zbGljZSgwLCBzb3J0ZWRCcmVha3BvaW50S2V5c0J5VmFsdWUuaW5kZXhPZihub25aZXJvS2V5KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVSb3dHYXAoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkge1xuICBjb25zdCB7XG4gICAgY29udGFpbmVyLFxuICAgIHJvd1NwYWNpbmdcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGxldCBzdHlsZXMgPSB7fTtcbiAgaWYgKGNvbnRhaW5lciAmJiByb3dTcGFjaW5nICE9PSAwKSB7XG4gICAgY29uc3Qgcm93U3BhY2luZ1ZhbHVlcyA9IHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgICAgIHZhbHVlczogcm93U3BhY2luZyxcbiAgICAgIGJyZWFrcG9pbnRzOiB0aGVtZS5icmVha3BvaW50cy52YWx1ZXNcbiAgICB9KTtcbiAgICBsZXQgemVyb1ZhbHVlQnJlYWtwb2ludEtleXM7XG4gICAgaWYgKHR5cGVvZiByb3dTcGFjaW5nVmFsdWVzID09PSAnb2JqZWN0Jykge1xuICAgICAgemVyb1ZhbHVlQnJlYWtwb2ludEtleXMgPSBleHRyYWN0WmVyb1ZhbHVlQnJlYWtwb2ludEtleXMoe1xuICAgICAgICBicmVha3BvaW50czogdGhlbWUuYnJlYWtwb2ludHMudmFsdWVzLFxuICAgICAgICB2YWx1ZXM6IHJvd1NwYWNpbmdWYWx1ZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzdHlsZXMgPSBoYW5kbGVCcmVha3BvaW50cyh7XG4gICAgICB0aGVtZVxuICAgIH0sIHJvd1NwYWNpbmdWYWx1ZXMsIChwcm9wVmFsdWUsIGJyZWFrcG9pbnQpID0+IHtcbiAgICAgIHZhciBfemVyb1ZhbHVlQnJlYWtwb2ludEs7XG4gICAgICBjb25zdCB0aGVtZVNwYWNpbmcgPSB0aGVtZS5zcGFjaW5nKHByb3BWYWx1ZSk7XG4gICAgICBpZiAodGhlbWVTcGFjaW5nICE9PSAnMHB4Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1hcmdpblRvcDogYC0ke2dldE9mZnNldCh0aGVtZVNwYWNpbmcpfWAsXG4gICAgICAgICAgW2AmID4gLiR7Z3JpZENsYXNzZXMuaXRlbX1gXToge1xuICAgICAgICAgICAgcGFkZGluZ1RvcDogZ2V0T2Zmc2V0KHRoZW1lU3BhY2luZylcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoKF96ZXJvVmFsdWVCcmVha3BvaW50SyA9IHplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzKSAhPSBudWxsICYmIF96ZXJvVmFsdWVCcmVha3BvaW50Sy5pbmNsdWRlcyhicmVha3BvaW50KSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXJnaW5Ub3A6IDAsXG4gICAgICAgIFtgJiA+IC4ke2dyaWRDbGFzc2VzLml0ZW19YF06IHtcbiAgICAgICAgICBwYWRkaW5nVG9wOiAwXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHN0eWxlcztcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNvbHVtbkdhcCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSB7XG4gIGNvbnN0IHtcbiAgICBjb250YWluZXIsXG4gICAgY29sdW1uU3BhY2luZ1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgbGV0IHN0eWxlcyA9IHt9O1xuICBpZiAoY29udGFpbmVyICYmIGNvbHVtblNwYWNpbmcgIT09IDApIHtcbiAgICBjb25zdCBjb2x1bW5TcGFjaW5nVmFsdWVzID0gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICAgICAgdmFsdWVzOiBjb2x1bW5TcGFjaW5nLFxuICAgICAgYnJlYWtwb2ludHM6IHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlc1xuICAgIH0pO1xuICAgIGxldCB6ZXJvVmFsdWVCcmVha3BvaW50S2V5cztcbiAgICBpZiAodHlwZW9mIGNvbHVtblNwYWNpbmdWYWx1ZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICB6ZXJvVmFsdWVCcmVha3BvaW50S2V5cyA9IGV4dHJhY3RaZXJvVmFsdWVCcmVha3BvaW50S2V5cyh7XG4gICAgICAgIGJyZWFrcG9pbnRzOiB0aGVtZS5icmVha3BvaW50cy52YWx1ZXMsXG4gICAgICAgIHZhbHVlczogY29sdW1uU3BhY2luZ1ZhbHVlc1xuICAgICAgfSk7XG4gICAgfVxuICAgIHN0eWxlcyA9IGhhbmRsZUJyZWFrcG9pbnRzKHtcbiAgICAgIHRoZW1lXG4gICAgfSwgY29sdW1uU3BhY2luZ1ZhbHVlcywgKHByb3BWYWx1ZSwgYnJlYWtwb2ludCkgPT4ge1xuICAgICAgdmFyIF96ZXJvVmFsdWVCcmVha3BvaW50SzI7XG4gICAgICBjb25zdCB0aGVtZVNwYWNpbmcgPSB0aGVtZS5zcGFjaW5nKHByb3BWYWx1ZSk7XG4gICAgICBpZiAodGhlbWVTcGFjaW5nICE9PSAnMHB4Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHdpZHRoOiBgY2FsYygxMDAlICsgJHtnZXRPZmZzZXQodGhlbWVTcGFjaW5nKX0pYCxcbiAgICAgICAgICBtYXJnaW5MZWZ0OiBgLSR7Z2V0T2Zmc2V0KHRoZW1lU3BhY2luZyl9YCxcbiAgICAgICAgICBbYCYgPiAuJHtncmlkQ2xhc3Nlcy5pdGVtfWBdOiB7XG4gICAgICAgICAgICBwYWRkaW5nTGVmdDogZ2V0T2Zmc2V0KHRoZW1lU3BhY2luZylcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoKF96ZXJvVmFsdWVCcmVha3BvaW50SzIgPSB6ZXJvVmFsdWVCcmVha3BvaW50S2V5cykgIT0gbnVsbCAmJiBfemVyb1ZhbHVlQnJlYWtwb2ludEsyLmluY2x1ZGVzKGJyZWFrcG9pbnQpKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIG1hcmdpbkxlZnQ6IDAsXG4gICAgICAgIFtgJiA+IC4ke2dyaWRDbGFzc2VzLml0ZW19YF06IHtcbiAgICAgICAgICBwYWRkaW5nTGVmdDogMFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBzdHlsZXM7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNwYWNpbmdTdHlsZXMoc3BhY2luZywgYnJlYWtwb2ludHMsIHN0eWxlcyA9IHt9KSB7XG4gIC8vIHVuZGVmaW5lZC9udWxsIG9yIGBzcGFjaW5nYCA8PSAwXG4gIGlmICghc3BhY2luZyB8fCBzcGFjaW5nIDw9IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgLy8gaW4gY2FzZSBvZiBzdHJpbmcvbnVtYmVyIGBzcGFjaW5nYFxuICBpZiAodHlwZW9mIHNwYWNpbmcgPT09ICdzdHJpbmcnICYmICFOdW1iZXIuaXNOYU4oTnVtYmVyKHNwYWNpbmcpKSB8fCB0eXBlb2Ygc3BhY2luZyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gW3N0eWxlc1tgc3BhY2luZy14cy0ke1N0cmluZyhzcGFjaW5nKX1gXV07XG4gIH1cbiAgLy8gaW4gY2FzZSBvZiBvYmplY3QgYHNwYWNpbmdgXG4gIGNvbnN0IHNwYWNpbmdTdHlsZXMgPSBbXTtcbiAgYnJlYWtwb2ludHMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHNwYWNpbmdbYnJlYWtwb2ludF07XG4gICAgaWYgKE51bWJlcih2YWx1ZSkgPiAwKSB7XG4gICAgICBzcGFjaW5nU3R5bGVzLnB1c2goc3R5bGVzW2BzcGFjaW5nLSR7YnJlYWtwb2ludH0tJHtTdHJpbmcodmFsdWUpfWBdKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3BhY2luZ1N0eWxlcztcbn1cblxuLy8gRGVmYXVsdCBDU1MgdmFsdWVzXG4vLyBmbGV4OiAnMCAxIGF1dG8nLFxuLy8gZmxleERpcmVjdGlvbjogJ3JvdycsXG4vLyBhbGlnbkl0ZW1zOiAnZmxleC1zdGFydCcsXG4vLyBmbGV4V3JhcDogJ25vd3JhcCcsXG4vLyBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtc3RhcnQnLFxuY29uc3QgR3JpZFJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aUdyaWQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3Qge1xuICAgICAgY29udGFpbmVyLFxuICAgICAgZGlyZWN0aW9uLFxuICAgICAgaXRlbSxcbiAgICAgIHNwYWNpbmcsXG4gICAgICB3cmFwLFxuICAgICAgemVyb01pbldpZHRoLFxuICAgICAgYnJlYWtwb2ludHNcbiAgICB9ID0gb3duZXJTdGF0ZTtcbiAgICBsZXQgc3BhY2luZ1N0eWxlcyA9IFtdO1xuXG4gICAgLy8gaW4gY2FzZSBvZiBncmlkIGl0ZW1cbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBzcGFjaW5nU3R5bGVzID0gcmVzb2x2ZVNwYWNpbmdTdHlsZXMoc3BhY2luZywgYnJlYWtwb2ludHMsIHN0eWxlcyk7XG4gICAgfVxuICAgIGNvbnN0IGJyZWFrcG9pbnRzU3R5bGVzID0gW107XG4gICAgYnJlYWtwb2ludHMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3duZXJTdGF0ZVticmVha3BvaW50XTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBicmVha3BvaW50c1N0eWxlcy5wdXNoKHN0eWxlc1tgZ3JpZC0ke2JyZWFrcG9pbnR9LSR7U3RyaW5nKHZhbHVlKX1gXSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgY29udGFpbmVyICYmIHN0eWxlcy5jb250YWluZXIsIGl0ZW0gJiYgc3R5bGVzLml0ZW0sIHplcm9NaW5XaWR0aCAmJiBzdHlsZXMuemVyb01pbldpZHRoLCAuLi5zcGFjaW5nU3R5bGVzLCBkaXJlY3Rpb24gIT09ICdyb3cnICYmIHN0eWxlc1tgZGlyZWN0aW9uLXhzLSR7U3RyaW5nKGRpcmVjdGlvbil9YF0sIHdyYXAgIT09ICd3cmFwJyAmJiBzdHlsZXNbYHdyYXAteHMtJHtTdHJpbmcod3JhcCl9YF0sIC4uLmJyZWFrcG9pbnRzU3R5bGVzXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBib3hTaXppbmc6ICdib3JkZXItYm94J1xufSwgb3duZXJTdGF0ZS5jb250YWluZXIgJiYge1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGZsZXhXcmFwOiAnd3JhcCcsXG4gIHdpZHRoOiAnMTAwJSdcbn0sIG93bmVyU3RhdGUuaXRlbSAmJiB7XG4gIG1hcmdpbjogMCAvLyBGb3IgaW5zdGFuY2UsIGl0J3MgdXNlZnVsIHdoZW4gdXNlZCB3aXRoIGEgYGZpZ3VyZWAgZWxlbWVudC5cbn0sIG93bmVyU3RhdGUuemVyb01pbldpZHRoICYmIHtcbiAgbWluV2lkdGg6IDBcbn0sIG93bmVyU3RhdGUud3JhcCAhPT0gJ3dyYXAnICYmIHtcbiAgZmxleFdyYXA6IG93bmVyU3RhdGUud3JhcFxufSksIGdlbmVyYXRlRGlyZWN0aW9uLCBnZW5lcmF0ZVJvd0dhcCwgZ2VuZXJhdGVDb2x1bW5HYXAsIGdlbmVyYXRlR3JpZCk7XG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNwYWNpbmdDbGFzc2VzKHNwYWNpbmcsIGJyZWFrcG9pbnRzKSB7XG4gIC8vIHVuZGVmaW5lZC9udWxsIG9yIGBzcGFjaW5nYCA8PSAwXG4gIGlmICghc3BhY2luZyB8fCBzcGFjaW5nIDw9IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgLy8gaW4gY2FzZSBvZiBzdHJpbmcvbnVtYmVyIGBzcGFjaW5nYFxuICBpZiAodHlwZW9mIHNwYWNpbmcgPT09ICdzdHJpbmcnICYmICFOdW1iZXIuaXNOYU4oTnVtYmVyKHNwYWNpbmcpKSB8fCB0eXBlb2Ygc3BhY2luZyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gW2BzcGFjaW5nLXhzLSR7U3RyaW5nKHNwYWNpbmcpfWBdO1xuICB9XG4gIC8vIGluIGNhc2Ugb2Ygb2JqZWN0IGBzcGFjaW5nYFxuICBjb25zdCBjbGFzc2VzID0gW107XG4gIGJyZWFrcG9pbnRzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBzcGFjaW5nW2JyZWFrcG9pbnRdO1xuICAgIGlmIChOdW1iZXIodmFsdWUpID4gMCkge1xuICAgICAgY29uc3QgY2xhc3NOYW1lID0gYHNwYWNpbmctJHticmVha3BvaW50fS0ke1N0cmluZyh2YWx1ZSl9YDtcbiAgICAgIGNsYXNzZXMucHVzaChjbGFzc05hbWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjbGFzc2VzO1xufVxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgY29udGFpbmVyLFxuICAgIGRpcmVjdGlvbixcbiAgICBpdGVtLFxuICAgIHNwYWNpbmcsXG4gICAgd3JhcCxcbiAgICB6ZXJvTWluV2lkdGgsXG4gICAgYnJlYWtwb2ludHNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGxldCBzcGFjaW5nQ2xhc3NlcyA9IFtdO1xuXG4gIC8vIGluIGNhc2Ugb2YgZ3JpZCBpdGVtXG4gIGlmIChjb250YWluZXIpIHtcbiAgICBzcGFjaW5nQ2xhc3NlcyA9IHJlc29sdmVTcGFjaW5nQ2xhc3NlcyhzcGFjaW5nLCBicmVha3BvaW50cyk7XG4gIH1cbiAgY29uc3QgYnJlYWtwb2ludHNDbGFzc2VzID0gW107XG4gIGJyZWFrcG9pbnRzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBvd25lclN0YXRlW2JyZWFrcG9pbnRdO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgYnJlYWtwb2ludHNDbGFzc2VzLnB1c2goYGdyaWQtJHticmVha3BvaW50fS0ke1N0cmluZyh2YWx1ZSl9YCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgY29udGFpbmVyICYmICdjb250YWluZXInLCBpdGVtICYmICdpdGVtJywgemVyb01pbldpZHRoICYmICd6ZXJvTWluV2lkdGgnLCAuLi5zcGFjaW5nQ2xhc3NlcywgZGlyZWN0aW9uICE9PSAncm93JyAmJiBgZGlyZWN0aW9uLXhzLSR7U3RyaW5nKGRpcmVjdGlvbil9YCwgd3JhcCAhPT0gJ3dyYXAnICYmIGB3cmFwLXhzLSR7U3RyaW5nKHdyYXApfWAsIC4uLmJyZWFrcG9pbnRzQ2xhc3Nlc11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRHcmlkVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBHcmlkID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gR3JpZChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgdGhlbWVQcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlHcmlkJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgIGJyZWFrcG9pbnRzXG4gIH0gPSB1c2VUaGVtZSgpO1xuICBjb25zdCBwcm9wcyA9IGV4dGVuZFN4UHJvcCh0aGVtZVByb3BzKTtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sdW1uczogY29sdW1uc1Byb3AsXG4gICAgICBjb2x1bW5TcGFjaW5nOiBjb2x1bW5TcGFjaW5nUHJvcCxcbiAgICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgICAgY29udGFpbmVyID0gZmFsc2UsXG4gICAgICBkaXJlY3Rpb24gPSAncm93JyxcbiAgICAgIGl0ZW0gPSBmYWxzZSxcbiAgICAgIHJvd1NwYWNpbmc6IHJvd1NwYWNpbmdQcm9wLFxuICAgICAgc3BhY2luZyA9IDAsXG4gICAgICB3cmFwID0gJ3dyYXAnLFxuICAgICAgemVyb01pbldpZHRoID0gZmFsc2VcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgcm93U3BhY2luZyA9IHJvd1NwYWNpbmdQcm9wIHx8IHNwYWNpbmc7XG4gIGNvbnN0IGNvbHVtblNwYWNpbmcgPSBjb2x1bW5TcGFjaW5nUHJvcCB8fCBzcGFjaW5nO1xuICBjb25zdCBjb2x1bW5zQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoR3JpZENvbnRleHQpO1xuXG4gIC8vIGNvbHVtbnMgc2V0IHdpdGggZGVmYXVsdCBicmVha3BvaW50IHVuaXQgb2YgMTJcbiAgY29uc3QgY29sdW1ucyA9IGNvbnRhaW5lciA/IGNvbHVtbnNQcm9wIHx8IDEyIDogY29sdW1uc0NvbnRleHQ7XG4gIGNvbnN0IGJyZWFrcG9pbnRzVmFsdWVzID0ge307XG4gIGNvbnN0IG90aGVyRmlsdGVyZWQgPSBfZXh0ZW5kcyh7fSwgb3RoZXIpO1xuICBicmVha3BvaW50cy5rZXlzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgaWYgKG90aGVyW2JyZWFrcG9pbnRdICE9IG51bGwpIHtcbiAgICAgIGJyZWFrcG9pbnRzVmFsdWVzW2JyZWFrcG9pbnRdID0gb3RoZXJbYnJlYWtwb2ludF07XG4gICAgICBkZWxldGUgb3RoZXJGaWx0ZXJlZFticmVha3BvaW50XTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sdW1ucyxcbiAgICBjb250YWluZXIsXG4gICAgZGlyZWN0aW9uLFxuICAgIGl0ZW0sXG4gICAgcm93U3BhY2luZyxcbiAgICBjb2x1bW5TcGFjaW5nLFxuICAgIHdyYXAsXG4gICAgemVyb01pbldpZHRoLFxuICAgIHNwYWNpbmdcbiAgfSwgYnJlYWtwb2ludHNWYWx1ZXMsIHtcbiAgICBicmVha3BvaW50czogYnJlYWtwb2ludHMua2V5c1xuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goR3JpZENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29sdW1ucyxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goR3JpZFJvb3QsIF9leHRlbmRzKHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgb3RoZXJGaWx0ZXJlZCkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBHcmlkLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBjb2x1bW5zLlxuICAgKiBAZGVmYXVsdCAxMlxuICAgKi9cbiAgY29sdW1uczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm51bWJlciksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIGhvcml6b250YWwgc3BhY2UgYmV0d2VlbiB0aGUgdHlwZSBgaXRlbWAgY29tcG9uZW50cy5cbiAgICogSXQgb3ZlcnJpZGVzIHRoZSB2YWx1ZSBvZiB0aGUgYHNwYWNpbmdgIHByb3AuXG4gICAqL1xuICBjb2x1bW5TcGFjaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkpLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIGhhdmUgdGhlIGZsZXggKmNvbnRhaW5lciogYmVoYXZpb3IuXG4gICAqIFlvdSBzaG91bGQgYmUgd3JhcHBpbmcgKml0ZW1zKiB3aXRoIGEgKmNvbnRhaW5lciouXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgYGZsZXgtZGlyZWN0aW9uYCBzdHlsZSBwcm9wZXJ0eS5cbiAgICogSXQgaXMgYXBwbGllZCBmb3IgYWxsIHNjcmVlbiBzaXplcy5cbiAgICogQGRlZmF1bHQgJ3JvdydcbiAgICovXG4gIGRpcmVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnY29sdW1uLXJldmVyc2UnLCAnY29sdW1uJywgJ3Jvdy1yZXZlcnNlJywgJ3JvdyddKSwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mKFsnY29sdW1uLXJldmVyc2UnLCAnY29sdW1uJywgJ3Jvdy1yZXZlcnNlJywgJ3JvdyddKSksIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIGhhdmUgdGhlIGZsZXggKml0ZW0qIGJlaGF2aW9yLlxuICAgKiBZb3Ugc2hvdWxkIGJlIHdyYXBwaW5nICppdGVtcyogd2l0aCBhICpjb250YWluZXIqLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaXRlbTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBhIG51bWJlciwgaXQgc2V0cyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdGhlIGdyaWQgaXRlbSB1c2VzLlxuICAgKiBJdCBjYW4ndCBiZSBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBjb250YWluZXIgKDEyIGJ5IGRlZmF1bHQpLlxuICAgKiBJZiAnYXV0bycsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBtYXRjaGVzIGl0cyBjb250ZW50LlxuICAgKiBJZiBmYWxzZSwgdGhlIHByb3AgaXMgaWdub3JlZC5cbiAgICogSWYgdHJ1ZSwgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIGdyb3dzIHRvIHVzZSB0aGUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBncmlkIGNvbnRhaW5lci5cbiAgICogVGhlIHZhbHVlIGlzIGFwcGxpZWQgZm9yIHRoZSBgbGdgIGJyZWFrcG9pbnQgYW5kIHdpZGVyIHNjcmVlbnMgaWYgbm90IG92ZXJyaWRkZW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBsZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLmJvb2xdKSxcbiAgLyoqXG4gICAqIElmIGEgbnVtYmVyLCBpdCBzZXRzIHRoZSBudW1iZXIgb2YgY29sdW1ucyB0aGUgZ3JpZCBpdGVtIHVzZXMuXG4gICAqIEl0IGNhbid0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIGNvbnRhaW5lciAoMTIgYnkgZGVmYXVsdCkuXG4gICAqIElmICdhdXRvJywgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIG1hdGNoZXMgaXRzIGNvbnRlbnQuXG4gICAqIElmIGZhbHNlLCB0aGUgcHJvcCBpcyBpZ25vcmVkLlxuICAgKiBJZiB0cnVlLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggZ3Jvd3MgdG8gdXNlIHRoZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGdyaWQgY29udGFpbmVyLlxuICAgKiBUaGUgdmFsdWUgaXMgYXBwbGllZCBmb3IgdGhlIGBtZGAgYnJlYWtwb2ludCBhbmQgd2lkZXIgc2NyZWVucyBpZiBub3Qgb3ZlcnJpZGRlbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG1kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuYm9vbF0pLFxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgdmVydGljYWwgc3BhY2UgYmV0d2VlbiB0aGUgdHlwZSBgaXRlbWAgY29tcG9uZW50cy5cbiAgICogSXQgb3ZlcnJpZGVzIHRoZSB2YWx1ZSBvZiB0aGUgYHNwYWNpbmdgIHByb3AuXG4gICAqL1xuICByb3dTcGFjaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkpLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBhIG51bWJlciwgaXQgc2V0cyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdGhlIGdyaWQgaXRlbSB1c2VzLlxuICAgKiBJdCBjYW4ndCBiZSBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBjb250YWluZXIgKDEyIGJ5IGRlZmF1bHQpLlxuICAgKiBJZiAnYXV0bycsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBtYXRjaGVzIGl0cyBjb250ZW50LlxuICAgKiBJZiBmYWxzZSwgdGhlIHByb3AgaXMgaWdub3JlZC5cbiAgICogSWYgdHJ1ZSwgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIGdyb3dzIHRvIHVzZSB0aGUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBncmlkIGNvbnRhaW5lci5cbiAgICogVGhlIHZhbHVlIGlzIGFwcGxpZWQgZm9yIHRoZSBgc21gIGJyZWFrcG9pbnQgYW5kIHdpZGVyIHNjcmVlbnMgaWYgbm90IG92ZXJyaWRkZW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzbTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLmJvb2xdKSxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIHNwYWNlIGJldHdlZW4gdGhlIHR5cGUgYGl0ZW1gIGNvbXBvbmVudHMuXG4gICAqIEl0IGNhbiBvbmx5IGJlIHVzZWQgb24gYSB0eXBlIGBjb250YWluZXJgIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgc3BhY2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgYGZsZXgtd3JhcGAgc3R5bGUgcHJvcGVydHkuXG4gICAqIEl0J3MgYXBwbGllZCBmb3IgYWxsIHNjcmVlbiBzaXplcy5cbiAgICogQGRlZmF1bHQgJ3dyYXAnXG4gICAqL1xuICB3cmFwOiBQcm9wVHlwZXMub25lT2YoWydub3dyYXAnLCAnd3JhcC1yZXZlcnNlJywgJ3dyYXAnXSksXG4gIC8qKlxuICAgKiBJZiBhIG51bWJlciwgaXQgc2V0cyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdGhlIGdyaWQgaXRlbSB1c2VzLlxuICAgKiBJdCBjYW4ndCBiZSBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBjb250YWluZXIgKDEyIGJ5IGRlZmF1bHQpLlxuICAgKiBJZiAnYXV0bycsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBtYXRjaGVzIGl0cyBjb250ZW50LlxuICAgKiBJZiBmYWxzZSwgdGhlIHByb3AgaXMgaWdub3JlZC5cbiAgICogSWYgdHJ1ZSwgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIGdyb3dzIHRvIHVzZSB0aGUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBncmlkIGNvbnRhaW5lci5cbiAgICogVGhlIHZhbHVlIGlzIGFwcGxpZWQgZm9yIHRoZSBgeGxgIGJyZWFrcG9pbnQgYW5kIHdpZGVyIHNjcmVlbnMgaWYgbm90IG92ZXJyaWRkZW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB4bDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLmJvb2xdKSxcbiAgLyoqXG4gICAqIElmIGEgbnVtYmVyLCBpdCBzZXRzIHRoZSBudW1iZXIgb2YgY29sdW1ucyB0aGUgZ3JpZCBpdGVtIHVzZXMuXG4gICAqIEl0IGNhbid0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIGNvbnRhaW5lciAoMTIgYnkgZGVmYXVsdCkuXG4gICAqIElmICdhdXRvJywgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIG1hdGNoZXMgaXRzIGNvbnRlbnQuXG4gICAqIElmIGZhbHNlLCB0aGUgcHJvcCBpcyBpZ25vcmVkLlxuICAgKiBJZiB0cnVlLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggZ3Jvd3MgdG8gdXNlIHRoZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGdyaWQgY29udGFpbmVyLlxuICAgKiBUaGUgdmFsdWUgaXMgYXBwbGllZCBmb3IgYWxsIHRoZSBzY3JlZW4gc2l6ZXMgd2l0aCB0aGUgbG93ZXN0IHByaW9yaXR5LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgeHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5ib29sXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGl0IHNldHMgYG1pbi13aWR0aDogMGAgb24gdGhlIGl0ZW0uXG4gICAqIFJlZmVyIHRvIHRoZSBsaW1pdGF0aW9ucyBzZWN0aW9uIG9mIHRoZSBkb2N1bWVudGF0aW9uIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSB1c2UgY2FzZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHplcm9NaW5XaWR0aDogUHJvcFR5cGVzLmJvb2xcbn0gOiB2b2lkIDA7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBjb25zdCByZXF1aXJlUHJvcCA9IHJlcXVpcmVQcm9wRmFjdG9yeSgnR3JpZCcsIEdyaWQpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25jYXRcbiAgR3JpZFsncHJvcFR5cGVzJyArICcnXSA9IF9leHRlbmRzKHt9LCBHcmlkLnByb3BUeXBlcywge1xuICAgIGRpcmVjdGlvbjogcmVxdWlyZVByb3AoJ2NvbnRhaW5lcicpLFxuICAgIGxnOiByZXF1aXJlUHJvcCgnaXRlbScpLFxuICAgIG1kOiByZXF1aXJlUHJvcCgnaXRlbScpLFxuICAgIHNtOiByZXF1aXJlUHJvcCgnaXRlbScpLFxuICAgIHNwYWNpbmc6IHJlcXVpcmVQcm9wKCdjb250YWluZXInKSxcbiAgICB3cmFwOiByZXF1aXJlUHJvcCgnY29udGFpbmVyJyksXG4gICAgeHM6IHJlcXVpcmVQcm9wKCdpdGVtJyksXG4gICAgemVyb01pbldpZHRoOiByZXF1aXJlUHJvcCgnaXRlbScpXG4gIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgR3JpZDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhZGRFbmRMaXN0ZW5lclwiLCBcImFwcGVhclwiLCBcImNoaWxkcmVuXCIsIFwiZWFzaW5nXCIsIFwiaW5cIiwgXCJvbkVudGVyXCIsIFwib25FbnRlcmVkXCIsIFwib25FbnRlcmluZ1wiLCBcIm9uRXhpdFwiLCBcIm9uRXhpdGVkXCIsIFwib25FeGl0aW5nXCIsIFwic3R5bGVcIiwgXCJ0aW1lb3V0XCIsIFwiVHJhbnNpdGlvbkNvbXBvbmVudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBlbGVtZW50QWNjZXB0aW5nUmVmIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2l0aW9uIH0gZnJvbSAncmVhY3QtdHJhbnNpdGlvbi1ncm91cCc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lJztcbmltcG9ydCB7IGdldFRyYW5zaXRpb25Qcm9wcywgcmVmbG93IH0gZnJvbSAnLi4vdHJhbnNpdGlvbnMvdXRpbHMnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gZ2V0U2NhbGUodmFsdWUpIHtcbiAgcmV0dXJuIGBzY2FsZSgke3ZhbHVlfSwgJHt2YWx1ZSAqKiAyfSlgO1xufVxuY29uc3Qgc3R5bGVzID0ge1xuICBlbnRlcmluZzoge1xuICAgIG9wYWNpdHk6IDEsXG4gICAgdHJhbnNmb3JtOiBnZXRTY2FsZSgxKVxuICB9LFxuICBlbnRlcmVkOiB7XG4gICAgb3BhY2l0eTogMSxcbiAgICB0cmFuc2Zvcm06ICdub25lJ1xuICB9XG59O1xuXG4vKlxuIFRPRE8gdjY6IHJlbW92ZVxuIENvbmRpdGlvbmFsbHkgYXBwbHkgYSB3b3JrYXJvdW5kIGZvciB0aGUgQ1NTIHRyYW5zaXRpb24gYnVnIGluIFNhZmFyaSAxNS40IC8gV2ViS2l0IGJyb3dzZXJzLlxuICovXG5jb25zdCBpc1dlYktpdDE1NCA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIC9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKihzYWZhcml8bW9iaWxlKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgLyhvcyB8dmVyc2lvblxcLykxNSgufF8pNC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5cbi8qKlxuICogVGhlIEdyb3cgdHJhbnNpdGlvbiBpcyB1c2VkIGJ5IHRoZSBbVG9vbHRpcF0oL21hdGVyaWFsLXVpL3JlYWN0LXRvb2x0aXAvKSBhbmRcbiAqIFtQb3BvdmVyXSgvbWF0ZXJpYWwtdWkvcmVhY3QtcG9wb3Zlci8pIGNvbXBvbmVudHMuXG4gKiBJdCB1c2VzIFtyZWFjdC10cmFuc2l0aW9uLWdyb3VwXShodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwKSBpbnRlcm5hbGx5LlxuICovXG5jb25zdCBHcm93ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gR3Jvdyhwcm9wcywgcmVmKSB7XG4gIGNvbnN0IHtcbiAgICAgIGFkZEVuZExpc3RlbmVyLFxuICAgICAgYXBwZWFyID0gdHJ1ZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgZWFzaW5nLFxuICAgICAgaW46IGluUHJvcCxcbiAgICAgIG9uRW50ZXIsXG4gICAgICBvbkVudGVyZWQsXG4gICAgICBvbkVudGVyaW5nLFxuICAgICAgb25FeGl0LFxuICAgICAgb25FeGl0ZWQsXG4gICAgICBvbkV4aXRpbmcsXG4gICAgICBzdHlsZSxcbiAgICAgIHRpbWVvdXQgPSAnYXV0bycsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJvcC10eXBlc1xuICAgICAgVHJhbnNpdGlvbkNvbXBvbmVudCA9IFRyYW5zaXRpb25cbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgdGltZXIgPSBSZWFjdC51c2VSZWYoKTtcbiAgY29uc3QgYXV0b1RpbWVvdXQgPSBSZWFjdC51c2VSZWYoKTtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICBjb25zdCBub2RlUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKG5vZGVSZWYsIGNoaWxkcmVuLnJlZiwgcmVmKTtcbiAgY29uc3Qgbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayA9IGNhbGxiYWNrID0+IG1heWJlSXNBcHBlYXJpbmcgPT4ge1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVSZWYuY3VycmVudDtcblxuICAgICAgLy8gb25FbnRlclh4eCBhbmQgb25FeGl0WHh4IGNhbGxiYWNrcyBoYXZlIGEgZGlmZmVyZW50IGFyZ3VtZW50cy5sZW5ndGggdmFsdWUuXG4gICAgICBpZiAobWF5YmVJc0FwcGVhcmluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNhbGxiYWNrKG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sobm9kZSwgbWF5YmVJc0FwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVFbnRlcmluZyA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FbnRlcmluZyk7XG4gIGNvbnN0IGhhbmRsZUVudGVyID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjaygobm9kZSwgaXNBcHBlYXJpbmcpID0+IHtcbiAgICByZWZsb3cobm9kZSk7IC8vIFNvIHRoZSBhbmltYXRpb24gYWx3YXlzIHN0YXJ0IGZyb20gdGhlIHN0YXJ0LlxuXG4gICAgY29uc3Qge1xuICAgICAgZHVyYXRpb246IHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICAgIGRlbGF5LFxuICAgICAgZWFzaW5nOiB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb25cbiAgICB9ID0gZ2V0VHJhbnNpdGlvblByb3BzKHtcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVhc2luZ1xuICAgIH0sIHtcbiAgICAgIG1vZGU6ICdlbnRlcidcbiAgICB9KTtcbiAgICBsZXQgZHVyYXRpb247XG4gICAgaWYgKHRpbWVvdXQgPT09ICdhdXRvJykge1xuICAgICAgZHVyYXRpb24gPSB0aGVtZS50cmFuc2l0aW9ucy5nZXRBdXRvSGVpZ2h0RHVyYXRpb24obm9kZS5jbGllbnRIZWlnaHQpO1xuICAgICAgYXV0b1RpbWVvdXQuY3VycmVudCA9IGR1cmF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICBkdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvbjtcbiAgICB9XG4gICAgbm9kZS5zdHlsZS50cmFuc2l0aW9uID0gW3RoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHtcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgZGVsYXlcbiAgICB9KSwgdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nLCB7XG4gICAgICBkdXJhdGlvbjogaXNXZWJLaXQxNTQgPyBkdXJhdGlvbiA6IGR1cmF0aW9uICogMC42NjYsXG4gICAgICBkZWxheSxcbiAgICAgIGVhc2luZzogdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uXG4gICAgfSldLmpvaW4oJywnKTtcbiAgICBpZiAob25FbnRlcikge1xuICAgICAgb25FbnRlcihub2RlLCBpc0FwcGVhcmluZyk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlRW50ZXJlZCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FbnRlcmVkKTtcbiAgY29uc3QgaGFuZGxlRXhpdGluZyA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FeGl0aW5nKTtcbiAgY29uc3QgaGFuZGxlRXhpdCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sobm9kZSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZHVyYXRpb246IHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICAgIGRlbGF5LFxuICAgICAgZWFzaW5nOiB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb25cbiAgICB9ID0gZ2V0VHJhbnNpdGlvblByb3BzKHtcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVhc2luZ1xuICAgIH0sIHtcbiAgICAgIG1vZGU6ICdleGl0J1xuICAgIH0pO1xuICAgIGxldCBkdXJhdGlvbjtcbiAgICBpZiAodGltZW91dCA9PT0gJ2F1dG8nKSB7XG4gICAgICBkdXJhdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmdldEF1dG9IZWlnaHREdXJhdGlvbihub2RlLmNsaWVudEhlaWdodCk7XG4gICAgICBhdXRvVGltZW91dC5jdXJyZW50ID0gZHVyYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uO1xuICAgIH1cbiAgICBub2RlLnN0eWxlLnRyYW5zaXRpb24gPSBbdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5Jywge1xuICAgICAgZHVyYXRpb24sXG4gICAgICBkZWxheVxuICAgIH0pLCB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScsIHtcbiAgICAgIGR1cmF0aW9uOiBpc1dlYktpdDE1NCA/IGR1cmF0aW9uIDogZHVyYXRpb24gKiAwLjY2NixcbiAgICAgIGRlbGF5OiBpc1dlYktpdDE1NCA/IGRlbGF5IDogZGVsYXkgfHwgZHVyYXRpb24gKiAwLjMzMyxcbiAgICAgIGVhc2luZzogdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uXG4gICAgfSldLmpvaW4oJywnKTtcbiAgICBub2RlLnN0eWxlLm9wYWNpdHkgPSAwO1xuICAgIG5vZGUuc3R5bGUudHJhbnNmb3JtID0gZ2V0U2NhbGUoMC43NSk7XG4gICAgaWYgKG9uRXhpdCkge1xuICAgICAgb25FeGl0KG5vZGUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUV4aXRlZCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FeGl0ZWQpO1xuICBjb25zdCBoYW5kbGVBZGRFbmRMaXN0ZW5lciA9IG5leHQgPT4ge1xuICAgIGlmICh0aW1lb3V0ID09PSAnYXV0bycpIHtcbiAgICAgIHRpbWVyLmN1cnJlbnQgPSBzZXRUaW1lb3V0KG5leHQsIGF1dG9UaW1lb3V0LmN1cnJlbnQgfHwgMCk7XG4gICAgfVxuICAgIGlmIChhZGRFbmRMaXN0ZW5lcikge1xuICAgICAgLy8gT2xkIGNhbGwgc2lnbmF0dXJlIGJlZm9yZSBgcmVhY3QtdHJhbnNpdGlvbi1ncm91cGAgaW1wbGVtZW50ZWQgYG5vZGVSZWZgXG4gICAgICBhZGRFbmRMaXN0ZW5lcihub2RlUmVmLmN1cnJlbnQsIG5leHQpO1xuICAgIH1cbiAgfTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyLmN1cnJlbnQpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFRyYW5zaXRpb25Db21wb25lbnQsIF9leHRlbmRzKHtcbiAgICBhcHBlYXI6IGFwcGVhcixcbiAgICBpbjogaW5Qcm9wLFxuICAgIG5vZGVSZWY6IG5vZGVSZWYsXG4gICAgb25FbnRlcjogaGFuZGxlRW50ZXIsXG4gICAgb25FbnRlcmVkOiBoYW5kbGVFbnRlcmVkLFxuICAgIG9uRW50ZXJpbmc6IGhhbmRsZUVudGVyaW5nLFxuICAgIG9uRXhpdDogaGFuZGxlRXhpdCxcbiAgICBvbkV4aXRlZDogaGFuZGxlRXhpdGVkLFxuICAgIG9uRXhpdGluZzogaGFuZGxlRXhpdGluZyxcbiAgICBhZGRFbmRMaXN0ZW5lcjogaGFuZGxlQWRkRW5kTGlzdGVuZXIsXG4gICAgdGltZW91dDogdGltZW91dCA9PT0gJ2F1dG8nID8gbnVsbCA6IHRpbWVvdXRcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogKHN0YXRlLCBjaGlsZFByb3BzKSA9PiB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwgX2V4dGVuZHMoe1xuICAgICAgICBzdHlsZTogX2V4dGVuZHMoe1xuICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgdHJhbnNmb3JtOiBnZXRTY2FsZSgwLjc1KSxcbiAgICAgICAgICB2aXNpYmlsaXR5OiBzdGF0ZSA9PT0gJ2V4aXRlZCcgJiYgIWluUHJvcCA/ICdoaWRkZW4nIDogdW5kZWZpbmVkXG4gICAgICAgIH0sIHN0eWxlc1tzdGF0ZV0sIHN0eWxlLCBjaGlsZHJlbi5wcm9wcy5zdHlsZSksXG4gICAgICAgIHJlZjogaGFuZGxlUmVmXG4gICAgICB9LCBjaGlsZFByb3BzKSk7XG4gICAgfVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEdyb3cucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogQWRkIGEgY3VzdG9tIHRyYW5zaXRpb24gZW5kIHRyaWdnZXIuIENhbGxlZCB3aXRoIHRoZSB0cmFuc2l0aW9uaW5nIERPTVxuICAgKiBub2RlIGFuZCBhIGRvbmUgY2FsbGJhY2suIEFsbG93cyBmb3IgbW9yZSBmaW5lIGdyYWluZWQgdHJhbnNpdGlvbiBlbmRcbiAgICogbG9naWMuIE5vdGU6IFRpbWVvdXRzIGFyZSBzdGlsbCB1c2VkIGFzIGEgZmFsbGJhY2sgaWYgcHJvdmlkZWQuXG4gICAqL1xuICBhZGRFbmRMaXN0ZW5lcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBQZXJmb3JtIHRoZSBlbnRlciB0cmFuc2l0aW9uIHdoZW4gaXQgZmlyc3QgbW91bnRzIGlmIGBpbmAgaXMgYWxzbyBgdHJ1ZWAuXG4gICAqIFNldCB0aGlzIHRvIGBmYWxzZWAgdG8gZGlzYWJsZSB0aGlzIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQSBzaW5nbGUgY2hpbGQgY29udGVudCBlbGVtZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IGVsZW1lbnRBY2NlcHRpbmdSZWYuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFRoZSB0cmFuc2l0aW9uIHRpbWluZyBmdW5jdGlvbi5cbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIGVhc2luZyBvciBhIG9iamVjdCBjb250YWluaW5nIGVudGVyIGFuZCBleGl0IHZhbHVlcy5cbiAgICovXG4gIGVhc2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBlbnRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBleGl0OiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgd2lsbCB0cmFuc2l0aW9uIGluLlxuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkV4aXQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0aW5nOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGR1cmF0aW9uIGZvciB0aGUgdHJhbnNpdGlvbiwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBZb3UgbWF5IHNwZWNpZnkgYSBzaW5nbGUgdGltZW91dCBmb3IgYWxsIHRyYW5zaXRpb25zLCBvciBpbmRpdmlkdWFsbHkgd2l0aCBhbiBvYmplY3QuXG4gICAqXG4gICAqIFNldCB0byAnYXV0bycgdG8gYXV0b21hdGljYWxseSBjYWxjdWxhdGUgdHJhbnNpdGlvbiB0aW1lIGJhc2VkIG9uIGhlaWdodC5cbiAgICogQGRlZmF1bHQgJ2F1dG8nXG4gICAqL1xuICB0aW1lb3V0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFwcGVhcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBlbnRlcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBleGl0OiBQcm9wVHlwZXMubnVtYmVyXG4gIH0pXSlcbn0gOiB2b2lkIDA7XG5Hcm93Lm11aVN1cHBvcnRBdXRvID0gdHJ1ZTtcbmV4cG9ydCBkZWZhdWx0IEdyb3c7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5pbXBvcnQgeyBpbnB1dEJhc2VDbGFzc2VzIH0gZnJvbSAnLi4vSW5wdXRCYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpSW5wdXQnLCBzbG90KTtcbn1cbmNvbnN0IGlucHV0Q2xhc3NlcyA9IF9leHRlbmRzKHt9LCBpbnB1dEJhc2VDbGFzc2VzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlJbnB1dCcsIFsncm9vdCcsICd1bmRlcmxpbmUnLCAnaW5wdXQnXSkpO1xuZXhwb3J0IGRlZmF1bHQgaW5wdXRDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImRpc2FibGVVbmRlcmxpbmVcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZnVsbFdpZHRoXCIsIFwiaW5wdXRDb21wb25lbnRcIiwgXCJtdWx0aWxpbmVcIiwgXCJzbG90UHJvcHNcIiwgXCJzbG90c1wiLCBcInR5cGVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgcmVmVHlwZSwgZGVlcG1lcmdlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgSW5wdXRCYXNlIGZyb20gJy4uL0lucHV0QmFzZSc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IGlucHV0Q2xhc3NlcywgeyBnZXRJbnB1dFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vaW5wdXRDbGFzc2VzJztcbmltcG9ydCB7IHJvb3RPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VSb290T3ZlcnJpZGVzUmVzb2x2ZXIsIGlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlciwgSW5wdXRCYXNlUm9vdCwgSW5wdXRCYXNlQ29tcG9uZW50IGFzIElucHV0QmFzZUlucHV0IH0gZnJvbSAnLi4vSW5wdXRCYXNlL0lucHV0QmFzZSc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZGlzYWJsZVVuZGVybGluZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgIWRpc2FibGVVbmRlcmxpbmUgJiYgJ3VuZGVybGluZSddLFxuICAgIGlucHV0OiBbJ2lucHV0J11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldElucHV0VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IElucHV0Um9vdCA9IHN0eWxlZChJbnB1dEJhc2VSb290LCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlJbnB1dCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gWy4uLmlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlcihwcm9wcywgc3R5bGVzKSwgIW93bmVyU3RhdGUuZGlzYWJsZVVuZGVybGluZSAmJiBzdHlsZXMudW5kZXJsaW5lXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgY29uc3QgbGlnaHQgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCc7XG4gIGxldCBib3R0b21MaW5lQ29sb3IgPSBsaWdodCA/ICdyZ2JhKDAsIDAsIDAsIDAuNDIpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknO1xuICBpZiAodGhlbWUudmFycykge1xuICAgIGJvdHRvbUxpbmVDb2xvciA9IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLmNvbW1vbi5vbkJhY2tncm91bmRDaGFubmVsfSAvICR7dGhlbWUudmFycy5vcGFjaXR5LmlucHV0VW5kZXJsaW5lfSlgO1xuICB9XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZSdcbiAgfSwgb3duZXJTdGF0ZS5mb3JtQ29udHJvbCAmJiB7XG4gICAgJ2xhYmVsICsgJic6IHtcbiAgICAgIG1hcmdpblRvcDogMTZcbiAgICB9XG4gIH0sICFvd25lclN0YXRlLmRpc2FibGVVbmRlcmxpbmUgJiYge1xuICAgICcmOmFmdGVyJzoge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMnB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbn1gLFxuICAgICAgbGVmdDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIC8vIERvaW5nIHRoZSBvdGhlciB3YXkgYXJvdW5kIGNyYXNoIG9uIElFMTEgXCInJ1wiIGh0dHBzOi8vZ2l0aHViLmNvbS9jc3NpbmpzL2pzcy9pc3N1ZXMvMjQyXG4gICAgICBjb250ZW50OiAnXCJcIicsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdHJhbnNmb3JtOiAnc2NhbGVYKDApJyxcbiAgICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlcixcbiAgICAgICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICAgICAgfSksXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScgLy8gVHJhbnNwYXJlbnQgdG8gdGhlIGhvdmVyIHN0eWxlLlxuICAgIH0sXG5cbiAgICBbYCYuJHtpbnB1dENsYXNzZXMuZm9jdXNlZH06YWZ0ZXJgXToge1xuICAgICAgLy8gdHJhbnNsYXRlWCgwKSBpcyBhIHdvcmthcm91bmQgZm9yIFNhZmFyaSB0cmFuc2Zvcm0gc2NhbGUgYnVnXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9pc3N1ZXMvMzE3NjZcbiAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWCgxKSB0cmFuc2xhdGVYKDApJ1xuICAgIH0sXG4gICAgW2AmLiR7aW5wdXRDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgICAnJjpiZWZvcmUsICY6YWZ0ZXInOiB7XG4gICAgICAgIGJvcmRlckJvdHRvbUNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gICAgICB9XG4gICAgfSxcbiAgICAnJjpiZWZvcmUnOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHtib3R0b21MaW5lQ29sb3J9YCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICBib3R0b206IDAsXG4gICAgICAvLyBEb2luZyB0aGUgb3RoZXIgd2F5IGFyb3VuZCBjcmFzaCBvbiBJRTExIFwiJydcIiBodHRwczovL2dpdGh1Yi5jb20vY3NzaW5qcy9qc3MvaXNzdWVzLzI0MlxuICAgICAgY29udGVudDogJ1wiXFxcXDAwYTBcIicsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdib3JkZXItYm90dG9tLWNvbG9yJywge1xuICAgICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlclxuICAgICAgfSksXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScgLy8gVHJhbnNwYXJlbnQgdG8gdGhlIGhvdmVyIHN0eWxlLlxuICAgIH0sXG5cbiAgICBbYCY6aG92ZXI6bm90KC4ke2lucHV0Q2xhc3Nlcy5kaXNhYmxlZH0sIC4ke2lucHV0Q2xhc3Nlcy5lcnJvcn0pOmJlZm9yZWBdOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAycHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnByaW1hcnl9YCxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAke2JvdHRvbUxpbmVDb2xvcn1gXG4gICAgICB9XG4gICAgfSxcbiAgICBbYCYuJHtpbnB1dENsYXNzZXMuZGlzYWJsZWR9OmJlZm9yZWBdOiB7XG4gICAgICBib3JkZXJCb3R0b21TdHlsZTogJ2RvdHRlZCdcbiAgICB9XG4gIH0pO1xufSk7XG5jb25zdCBJbnB1dElucHV0ID0gc3R5bGVkKElucHV0QmFzZUlucHV0LCB7XG4gIG5hbWU6ICdNdWlJbnB1dCcsXG4gIHNsb3Q6ICdJbnB1dCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyXG59KSh7fSk7XG5jb25zdCBJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIElucHV0KGluUHJvcHMsIHJlZikge1xuICB2YXIgX3JlZiwgX3Nsb3RzJHJvb3QsIF9yZWYyLCBfc2xvdHMkaW5wdXQ7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUlucHV0J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgZGlzYWJsZVVuZGVybGluZSxcbiAgICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICAgIGNvbXBvbmVudHNQcm9wczogY29tcG9uZW50c1Byb3BzUHJvcCxcbiAgICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgICAgaW5wdXRDb21wb25lbnQgPSAnaW5wdXQnLFxuICAgICAgbXVsdGlsaW5lID0gZmFsc2UsXG4gICAgICBzbG90UHJvcHMsXG4gICAgICBzbG90cyA9IHt9LFxuICAgICAgdHlwZSA9ICd0ZXh0J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMocHJvcHMpO1xuICBjb25zdCBvd25lclN0YXRlID0ge1xuICAgIGRpc2FibGVVbmRlcmxpbmVcbiAgfTtcbiAgY29uc3QgaW5wdXRDb21wb25lbnRzUHJvcHMgPSB7XG4gICAgcm9vdDoge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH1cbiAgfTtcbiAgY29uc3QgY29tcG9uZW50c1Byb3BzID0gKHNsb3RQcm9wcyAhPSBudWxsID8gc2xvdFByb3BzIDogY29tcG9uZW50c1Byb3BzUHJvcCkgPyBkZWVwbWVyZ2Uoc2xvdFByb3BzICE9IG51bGwgPyBzbG90UHJvcHMgOiBjb21wb25lbnRzUHJvcHNQcm9wLCBpbnB1dENvbXBvbmVudHNQcm9wcykgOiBpbnB1dENvbXBvbmVudHNQcm9wcztcbiAgY29uc3QgUm9vdFNsb3QgPSAoX3JlZiA9IChfc2xvdHMkcm9vdCA9IHNsb3RzLnJvb3QpICE9IG51bGwgPyBfc2xvdHMkcm9vdCA6IGNvbXBvbmVudHMuUm9vdCkgIT0gbnVsbCA/IF9yZWYgOiBJbnB1dFJvb3Q7XG4gIGNvbnN0IElucHV0U2xvdCA9IChfcmVmMiA9IChfc2xvdHMkaW5wdXQgPSBzbG90cy5pbnB1dCkgIT0gbnVsbCA/IF9zbG90cyRpbnB1dCA6IGNvbXBvbmVudHMuSW5wdXQpICE9IG51bGwgPyBfcmVmMiA6IElucHV0SW5wdXQ7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dEJhc2UsIF9leHRlbmRzKHtcbiAgICBzbG90czoge1xuICAgICAgcm9vdDogUm9vdFNsb3QsXG4gICAgICBpbnB1dDogSW5wdXRTbG90XG4gICAgfSxcbiAgICBzbG90UHJvcHM6IGNvbXBvbmVudHNQcm9wcyxcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICBpbnB1dENvbXBvbmVudDogaW5wdXRDb21wb25lbnQsXG4gICAgbXVsdGlsaW5lOiBtdWx0aWxpbmUsXG4gICAgcmVmOiByZWYsXG4gICAgdHlwZTogdHlwZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXNcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBJbnB1dC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaGVscHMgdXNlcnMgdG8gZmlsbCBmb3JtcyBmYXN0ZXIsIGVzcGVjaWFsbHkgb24gbW9iaWxlIGRldmljZXMuXG4gICAqIFRoZSBuYW1lIGNhbiBiZSBjb25mdXNpbmcsIGFzIGl0J3MgbW9yZSBsaWtlIGFuIGF1dG9maWxsLlxuICAgKiBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgaXQgW2ZvbGxvd2luZyB0aGUgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybS1jb250cm9sLWluZnJhc3RydWN0dXJlLmh0bWwjYXV0b2ZpbGwpLlxuICAgKi9cbiAgYXV0b0NvbXBsZXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ3ByaW1hcnknYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeSddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RzYCBwcm9wIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIElucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90UHJvcHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdFByb3BzYCBwcm9wIGluc3RlYWQsIGFzIGBjb21wb25lbnRzUHJvcHNgIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCBub3QgaGF2ZSBhbiB1bmRlcmxpbmUuXG4gICAqL1xuICBkaXNhYmxlVW5kZXJsaW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEVuZCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIGVuZEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgaW5kaWNhdGUgYW4gZXJyb3IuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdpbnB1dCdcbiAgICovXG4gIGlucHV0Q29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ25vbmUnYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnXSksXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSBbVGV4dGFyZWFBdXRvc2l6ZV0oL21hdGVyaWFsLXVpL3JlYWN0LXRleHRhcmVhLWF1dG9zaXplLykgZWxlbWVudCBpcyByZW5kZXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpbGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBzaG9ydCBoaW50IGRpc3BsYXllZCBpbiB0aGUgYGlucHV0YCBiZWZvcmUgdGhlIHVzZXIgZW50ZXJzIGEgdmFsdWUuXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEl0IHByZXZlbnRzIHRoZSB1c2VyIGZyb20gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgKiAobm90IGZyb20gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZmllbGQpLlxuICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNQcm9wc2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcm9vdDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogU3RhcnQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBzdGFydEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuIEl0IHNob3VsZCBiZSBbYSB2YWxpZCBIVE1MNSBpbnB1dCB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjRm9ybV8lM0NpbnB1dCUzRV90eXBlcykuXG4gICAqIEBkZWZhdWx0ICd0ZXh0J1xuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LCByZXF1aXJlZCBmb3IgYSBjb250cm9sbGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuSW5wdXQubXVpTmFtZSA9ICdJbnB1dCc7XG5leHBvcnQgZGVmYXVsdCBJbnB1dDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgeyBmb3JtYXRNdWlFcnJvck1lc3NhZ2UgYXMgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSB9IGZyb20gXCJAbXVpL3V0aWxzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIFwiYXV0b0NvbXBsZXRlXCIsIFwiYXV0b0ZvY3VzXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlSW5qZWN0aW5nR2xvYmFsU3R5bGVzXCIsIFwiZW5kQWRvcm5tZW50XCIsIFwiZXJyb3JcIiwgXCJmdWxsV2lkdGhcIiwgXCJpZFwiLCBcImlucHV0Q29tcG9uZW50XCIsIFwiaW5wdXRQcm9wc1wiLCBcImlucHV0UmVmXCIsIFwibWFyZ2luXCIsIFwibWF4Um93c1wiLCBcIm1pblJvd3NcIiwgXCJtdWx0aWxpbmVcIiwgXCJuYW1lXCIsIFwib25CbHVyXCIsIFwib25DaGFuZ2VcIiwgXCJvbkNsaWNrXCIsIFwib25Gb2N1c1wiLCBcIm9uS2V5RG93blwiLCBcIm9uS2V5VXBcIiwgXCJwbGFjZWhvbGRlclwiLCBcInJlYWRPbmx5XCIsIFwicmVuZGVyU3VmZml4XCIsIFwicm93c1wiLCBcInNpemVcIiwgXCJzbG90UHJvcHNcIiwgXCJzbG90c1wiLCBcInN0YXJ0QWRvcm5tZW50XCIsIFwidHlwZVwiLCBcInZhbHVlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgcmVmVHlwZSwgZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzLCBpc0hvc3RDb21wb25lbnQsIFRleHRhcmVhQXV0b3NpemUgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgRm9ybUNvbnRyb2xDb250ZXh0IGZyb20gJy4uL0Zvcm1Db250cm9sL0Zvcm1Db250cm9sQ29udGV4dCc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgdXNlRW5oYW5jZWRFZmZlY3QgZnJvbSAnLi4vdXRpbHMvdXNlRW5oYW5jZWRFZmZlY3QnO1xuaW1wb3J0IEdsb2JhbFN0eWxlcyBmcm9tICcuLi9HbG9iYWxTdHlsZXMnO1xuaW1wb3J0IHsgaXNGaWxsZWQgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBpbnB1dEJhc2VDbGFzc2VzLCB7IGdldElucHV0QmFzZVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vaW5wdXRCYXNlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGNvbnN0IHJvb3RPdmVycmlkZXNSZXNvbHZlciA9IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBvd25lclN0YXRlXG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5mb3JtQ29udHJvbCAmJiBzdHlsZXMuZm9ybUNvbnRyb2wsIG93bmVyU3RhdGUuc3RhcnRBZG9ybm1lbnQgJiYgc3R5bGVzLmFkb3JuZWRTdGFydCwgb3duZXJTdGF0ZS5lbmRBZG9ybm1lbnQgJiYgc3R5bGVzLmFkb3JuZWRFbmQsIG93bmVyU3RhdGUuZXJyb3IgJiYgc3R5bGVzLmVycm9yLCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYgc3R5bGVzLnNpemVTbWFsbCwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYgc3R5bGVzLm11bHRpbGluZSwgb3duZXJTdGF0ZS5jb2xvciAmJiBzdHlsZXNbYGNvbG9yJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdLCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiBzdHlsZXMuZnVsbFdpZHRoLCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIHN0eWxlcy5oaWRkZW5MYWJlbF07XG59O1xuZXhwb3J0IGNvbnN0IGlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIgPSAocHJvcHMsIHN0eWxlcykgPT4ge1xuICBjb25zdCB7XG4gICAgb3duZXJTdGF0ZVxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBbc3R5bGVzLmlucHV0LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYgc3R5bGVzLmlucHV0U2l6ZVNtYWxsLCBvd25lclN0YXRlLm11bHRpbGluZSAmJiBzdHlsZXMuaW5wdXRNdWx0aWxpbmUsIG93bmVyU3RhdGUudHlwZSA9PT0gJ3NlYXJjaCcgJiYgc3R5bGVzLmlucHV0VHlwZVNlYXJjaCwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiBzdHlsZXMuaW5wdXRBZG9ybmVkU3RhcnQsIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHN0eWxlcy5pbnB1dEFkb3JuZWRFbmQsIG93bmVyU3RhdGUuaGlkZGVuTGFiZWwgJiYgc3R5bGVzLmlucHV0SGlkZGVuTGFiZWxdO1xufTtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGNvbG9yLFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGVuZEFkb3JubWVudCxcbiAgICBmb2N1c2VkLFxuICAgIGZvcm1Db250cm9sLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBoaWRkZW5MYWJlbCxcbiAgICBtdWx0aWxpbmUsXG4gICAgcmVhZE9ubHksXG4gICAgc2l6ZSxcbiAgICBzdGFydEFkb3JubWVudCxcbiAgICB0eXBlXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBgY29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWAsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGVycm9yICYmICdlcnJvcicsIGZ1bGxXaWR0aCAmJiAnZnVsbFdpZHRoJywgZm9jdXNlZCAmJiAnZm9jdXNlZCcsIGZvcm1Db250cm9sICYmICdmb3JtQ29udHJvbCcsIHNpemUgJiYgc2l6ZSAhPT0gJ21lZGl1bScgJiYgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YCwgbXVsdGlsaW5lICYmICdtdWx0aWxpbmUnLCBzdGFydEFkb3JubWVudCAmJiAnYWRvcm5lZFN0YXJ0JywgZW5kQWRvcm5tZW50ICYmICdhZG9ybmVkRW5kJywgaGlkZGVuTGFiZWwgJiYgJ2hpZGRlbkxhYmVsJywgcmVhZE9ubHkgJiYgJ3JlYWRPbmx5J10sXG4gICAgaW5wdXQ6IFsnaW5wdXQnLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCB0eXBlID09PSAnc2VhcmNoJyAmJiAnaW5wdXRUeXBlU2VhcmNoJywgbXVsdGlsaW5lICYmICdpbnB1dE11bHRpbGluZScsIHNpemUgPT09ICdzbWFsbCcgJiYgJ2lucHV0U2l6ZVNtYWxsJywgaGlkZGVuTGFiZWwgJiYgJ2lucHV0SGlkZGVuTGFiZWwnLCBzdGFydEFkb3JubWVudCAmJiAnaW5wdXRBZG9ybmVkU3RhcnQnLCBlbmRBZG9ybm1lbnQgJiYgJ2lucHV0QWRvcm5lZEVuZCcsIHJlYWRPbmx5ICYmICdyZWFkT25seSddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0SW5wdXRCYXNlVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5leHBvcnQgY29uc3QgSW5wdXRCYXNlUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpSW5wdXRCYXNlJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogcm9vdE92ZXJyaWRlc1Jlc29sdmVyXG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe30sIHRoZW1lLnR5cG9ncmFwaHkuYm9keTEsIHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQucHJpbWFyeSxcbiAgbGluZUhlaWdodDogJzEuNDM3NWVtJyxcbiAgLy8gMjNweFxuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgLy8gUHJldmVudCBwYWRkaW5nIGlzc3VlIHdpdGggZnVsbFdpZHRoLlxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgY3Vyc29yOiAndGV4dCcsXG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBbYCYuJHtpbnB1dEJhc2VDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuZGlzYWJsZWQsXG4gICAgY3Vyc29yOiAnZGVmYXVsdCdcbiAgfVxufSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYgX2V4dGVuZHMoe1xuICBwYWRkaW5nOiAnNHB4IDAgNXB4J1xufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgcGFkZGluZ1RvcDogMVxufSksIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHtcbiAgd2lkdGg6ICcxMDAlJ1xufSkpO1xuZXhwb3J0IGNvbnN0IElucHV0QmFzZUNvbXBvbmVudCA9IHN0eWxlZCgnaW5wdXQnLCB7XG4gIG5hbWU6ICdNdWlJbnB1dEJhc2UnLFxuICBzbG90OiAnSW5wdXQnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogaW5wdXRPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgY29uc3QgbGlnaHQgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCc7XG4gIGNvbnN0IHBsYWNlaG9sZGVyID0gX2V4dGVuZHMoe1xuICAgIGNvbG9yOiAnY3VycmVudENvbG9yJ1xuICB9LCB0aGVtZS52YXJzID8ge1xuICAgIG9wYWNpdHk6IHRoZW1lLnZhcnMub3BhY2l0eS5pbnB1dFBsYWNlaG9sZGVyXG4gIH0gOiB7XG4gICAgb3BhY2l0eTogbGlnaHQgPyAwLjQyIDogMC41XG4gIH0sIHtcbiAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB7XG4gICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlclxuICAgIH0pXG4gIH0pO1xuICBjb25zdCBwbGFjZWhvbGRlckhpZGRlbiA9IHtcbiAgICBvcGFjaXR5OiAnMCAhaW1wb3J0YW50J1xuICB9O1xuICBjb25zdCBwbGFjZWhvbGRlclZpc2libGUgPSB0aGVtZS52YXJzID8ge1xuICAgIG9wYWNpdHk6IHRoZW1lLnZhcnMub3BhY2l0eS5pbnB1dFBsYWNlaG9sZGVyXG4gIH0gOiB7XG4gICAgb3BhY2l0eTogbGlnaHQgPyAwLjQyIDogMC41XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgZm9udDogJ2luaGVyaXQnLFxuICAgIGxldHRlclNwYWNpbmc6ICdpbmhlcml0JyxcbiAgICBjb2xvcjogJ2N1cnJlbnRDb2xvcicsXG4gICAgcGFkZGluZzogJzRweCAwIDVweCcsXG4gICAgYm9yZGVyOiAwLFxuICAgIGJveFNpemluZzogJ2NvbnRlbnQtYm94JyxcbiAgICBiYWNrZ3JvdW5kOiAnbm9uZScsXG4gICAgaGVpZ2h0OiAnMS40Mzc1ZW0nLFxuICAgIC8vIFJlc2V0IDIzcHh0aGUgbmF0aXZlIGlucHV0IGxpbmUtaGVpZ2h0XG4gICAgbWFyZ2luOiAwLFxuICAgIC8vIFJlc2V0IGZvciBTYWZhcmlcbiAgICBXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgIC8vIE1ha2UgdGhlIGZsZXggaXRlbSBzaHJpbmsgd2l0aCBGaXJlZm94XG4gICAgbWluV2lkdGg6IDAsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICAvLyBGaXggSUUxMSB3aWR0aCBpc3N1ZVxuICAgIGFuaW1hdGlvbk5hbWU6ICdtdWktYXV0by1maWxsLWNhbmNlbCcsXG4gICAgYW5pbWF0aW9uRHVyYXRpb246ICcxMG1zJyxcbiAgICAnJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyLFxuICAgICcmOjotbW96LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXIsXG4gICAgLy8gRmlyZWZveCAxOStcbiAgICAnJjotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlcixcbiAgICAvLyBJRTExXG4gICAgJyY6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyLFxuICAgIC8vIEVkZ2VcbiAgICAnJjpmb2N1cyc6IHtcbiAgICAgIG91dGxpbmU6IDBcbiAgICB9LFxuICAgIC8vIFJlc2V0IEZpcmVmb3ggaW52YWxpZCByZXF1aXJlZCBpbnB1dCBzdHlsZVxuICAgICcmOmludmFsaWQnOiB7XG4gICAgICBib3hTaGFkb3c6ICdub25lJ1xuICAgIH0sXG4gICAgJyY6Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24nOiB7XG4gICAgICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgd2hlbiB0eXBlPXNlYXJjaC5cbiAgICAgIFdlYmtpdEFwcGVhcmFuY2U6ICdub25lJ1xuICAgIH0sXG4gICAgLy8gU2hvdyBhbmQgaGlkZSB0aGUgcGxhY2Vob2xkZXIgbG9naWNcbiAgICBbYGxhYmVsW2RhdGEtc2hyaW5rPWZhbHNlXSArIC4ke2lucHV0QmFzZUNsYXNzZXMuZm9ybUNvbnRyb2x9ICZgXToge1xuICAgICAgJyY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlckhpZGRlbixcbiAgICAgICcmOjotbW96LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJIaWRkZW4sXG4gICAgICAvLyBGaXJlZm94IDE5K1xuICAgICAgJyY6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJIaWRkZW4sXG4gICAgICAvLyBJRTExXG4gICAgICAnJjo6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJIaWRkZW4sXG4gICAgICAvLyBFZGdlXG4gICAgICAnJjpmb2N1czo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyVmlzaWJsZSxcbiAgICAgICcmOmZvY3VzOjotbW96LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJWaXNpYmxlLFxuICAgICAgLy8gRmlyZWZveCAxOStcbiAgICAgICcmOmZvY3VzOi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyVmlzaWJsZSxcbiAgICAgIC8vIElFMTFcbiAgICAgICcmOmZvY3VzOjotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlclZpc2libGUgLy8gRWRnZVxuICAgIH0sXG5cbiAgICBbYCYuJHtpbnB1dEJhc2VDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgICBvcGFjaXR5OiAxLFxuICAgICAgLy8gUmVzZXQgaU9TIG9wYWNpdHlcbiAgICAgIFdlYmtpdFRleHRGaWxsQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuZGlzYWJsZWQgLy8gRml4IG9wYWNpdHkgU2FmYXJpIGJ1Z1xuICAgIH0sXG5cbiAgICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgICAgYW5pbWF0aW9uRHVyYXRpb246ICc1MDAwcycsXG4gICAgICBhbmltYXRpb25OYW1lOiAnbXVpLWF1dG8tZmlsbCdcbiAgICB9XG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICAgcGFkZGluZ1RvcDogMVxuICB9LCBvd25lclN0YXRlLm11bHRpbGluZSAmJiB7XG4gICAgaGVpZ2h0OiAnYXV0bycsXG4gICAgcmVzaXplOiAnbm9uZScsXG4gICAgcGFkZGluZzogMCxcbiAgICBwYWRkaW5nVG9wOiAwXG4gIH0sIG93bmVyU3RhdGUudHlwZSA9PT0gJ3NlYXJjaCcgJiYge1xuICAgIC8vIEltcHJvdmUgdHlwZSBzZWFyY2ggc3R5bGUuXG4gICAgTW96QXBwZWFyYW5jZTogJ3RleHRmaWVsZCdcbiAgfSk7XG59KTtcbmNvbnN0IGlucHV0R2xvYmFsU3R5bGVzID0gLyojX19QVVJFX18qL19qc3goR2xvYmFsU3R5bGVzLCB7XG4gIHN0eWxlczoge1xuICAgICdAa2V5ZnJhbWVzIG11aS1hdXRvLWZpbGwnOiB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIGRpc3BsYXk6ICdibG9jaydcbiAgICAgIH1cbiAgICB9LFxuICAgICdAa2V5ZnJhbWVzIG11aS1hdXRvLWZpbGwtY2FuY2VsJzoge1xuICAgICAgZnJvbToge1xuICAgICAgICBkaXNwbGF5OiAnYmxvY2snXG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBgSW5wdXRCYXNlYCBjb250YWlucyBhcyBmZXcgc3R5bGVzIGFzIHBvc3NpYmxlLlxuICogSXQgYWltcyB0byBiZSBhIHNpbXBsZSBidWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgYW4gaW5wdXQuXG4gKiBJdCBjb250YWlucyBhIGxvYWQgb2Ygc3R5bGUgcmVzZXQgYW5kIHNvbWUgc3RhdGUgbG9naWMuXG4gKi9cbmNvbnN0IElucHV0QmFzZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIElucHV0QmFzZShpblByb3BzLCByZWYpIHtcbiAgdmFyIF9zbG90UHJvcHMkaW5wdXQ7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUlucHV0QmFzZSdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogYXJpYURlc2NyaWJlZGJ5LFxuICAgICAgYXV0b0NvbXBsZXRlLFxuICAgICAgYXV0b0ZvY3VzLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50cyA9IHt9LFxuICAgICAgY29tcG9uZW50c1Byb3BzID0ge30sXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGRpc2FibGVJbmplY3RpbmdHbG9iYWxTdHlsZXMsXG4gICAgICBlbmRBZG9ybm1lbnQsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIGlkLFxuICAgICAgaW5wdXRDb21wb25lbnQgPSAnaW5wdXQnLFxuICAgICAgaW5wdXRQcm9wczogaW5wdXRQcm9wc1Byb3AgPSB7fSxcbiAgICAgIGlucHV0UmVmOiBpbnB1dFJlZlByb3AsXG4gICAgICBtYXhSb3dzLFxuICAgICAgbWluUm93cyxcbiAgICAgIG11bHRpbGluZSA9IGZhbHNlLFxuICAgICAgbmFtZSxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25DbGljayxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbktleURvd24sXG4gICAgICBvbktleVVwLFxuICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICByZWFkT25seSxcbiAgICAgIHJlbmRlclN1ZmZpeCxcbiAgICAgIHJvd3MsXG4gICAgICBzbG90UHJvcHMgPSB7fSxcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICBzdGFydEFkb3JubWVudCxcbiAgICAgIHR5cGUgPSAndGV4dCcsXG4gICAgICB2YWx1ZTogdmFsdWVQcm9wXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHZhbHVlID0gaW5wdXRQcm9wc1Byb3AudmFsdWUgIT0gbnVsbCA/IGlucHV0UHJvcHNQcm9wLnZhbHVlIDogdmFsdWVQcm9wO1xuICBjb25zdCB7XG4gICAgY3VycmVudDogaXNDb250cm9sbGVkXG4gIH0gPSBSZWFjdC51c2VSZWYodmFsdWUgIT0gbnVsbCk7XG4gIGNvbnN0IGlucHV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIGNvbnN0IGhhbmRsZUlucHV0UmVmV2FybmluZyA9IFJlYWN0LnVzZUNhbGxiYWNrKGluc3RhbmNlID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLm5vZGVOYW1lICE9PSAnSU5QVVQnICYmICFpbnN0YW5jZS5mb2N1cykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCBhIGBpbnB1dENvbXBvbmVudGAgdG8gdGhlIGlucHV0IGNvbXBvbmVudCcsICd0aGF0IGRvZXMgbm90IGNvcnJlY3RseSBoYW5kbGUgdGhlIGByZWZgIHByb3AuJywgJ01ha2Ugc3VyZSB0aGUgYHJlZmAgcHJvcCBpcyBjYWxsZWQgd2l0aCBhIEhUTUxJbnB1dEVsZW1lbnQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW10pO1xuICBjb25zdCBoYW5kbGVJbnB1dFJlZiA9IHVzZUZvcmtSZWYoaW5wdXRSZWYsIGlucHV0UmVmUHJvcCwgaW5wdXRQcm9wc1Byb3AucmVmLCBoYW5kbGVJbnB1dFJlZldhcm5pbmcpO1xuICBjb25zdCBbZm9jdXNlZCwgc2V0Rm9jdXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKG11aUZvcm1Db250cm9sKSB7XG4gICAgICAgIHJldHVybiBtdWlGb3JtQ29udHJvbC5yZWdpc3RlckVmZmVjdCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LCBbbXVpRm9ybUNvbnRyb2xdKTtcbiAgfVxuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsnY29sb3InLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnaGlkZGVuTGFiZWwnLCAnc2l6ZScsICdyZXF1aXJlZCcsICdmaWxsZWQnXVxuICB9KTtcbiAgZmNzLmZvY3VzZWQgPSBtdWlGb3JtQ29udHJvbCA/IG11aUZvcm1Db250cm9sLmZvY3VzZWQgOiBmb2N1c2VkO1xuXG4gIC8vIFRoZSBibHVyIHdvbid0IGZpcmUgd2hlbiB0aGUgZGlzYWJsZWQgc3RhdGUgaXMgc2V0IG9uIGEgZm9jdXNlZCBpbnB1dC5cbiAgLy8gV2UgbmVlZCB0byBib29rIGtlZXAgdGhlIGZvY3VzZWQgc3RhdGUgbWFudWFsbHkuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtdWlGb3JtQ29udHJvbCAmJiBkaXNhYmxlZCAmJiBmb2N1c2VkKSB7XG4gICAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgICAgIGlmIChvbkJsdXIpIHtcbiAgICAgICAgb25CbHVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbbXVpRm9ybUNvbnRyb2wsIGRpc2FibGVkLCBmb2N1c2VkLCBvbkJsdXJdKTtcbiAgY29uc3Qgb25GaWxsZWQgPSBtdWlGb3JtQ29udHJvbCAmJiBtdWlGb3JtQ29udHJvbC5vbkZpbGxlZDtcbiAgY29uc3Qgb25FbXB0eSA9IG11aUZvcm1Db250cm9sICYmIG11aUZvcm1Db250cm9sLm9uRW1wdHk7XG4gIGNvbnN0IGNoZWNrRGlydHkgPSBSZWFjdC51c2VDYWxsYmFjayhvYmogPT4ge1xuICAgIGlmIChpc0ZpbGxlZChvYmopKSB7XG4gICAgICBpZiAob25GaWxsZWQpIHtcbiAgICAgICAgb25GaWxsZWQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9uRW1wdHkpIHtcbiAgICAgIG9uRW1wdHkoKTtcbiAgICB9XG4gIH0sIFtvbkZpbGxlZCwgb25FbXB0eV0pO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzQ29udHJvbGxlZCkge1xuICAgICAgY2hlY2tEaXJ0eSh7XG4gICAgICAgIHZhbHVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFt2YWx1ZSwgY2hlY2tEaXJ0eSwgaXNDb250cm9sbGVkXSk7XG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gZXZlbnQgPT4ge1xuICAgIC8vIEZpeCBhIGJ1ZyB3aXRoIElFMTEgd2hlcmUgdGhlIGZvY3VzL2JsdXIgZXZlbnRzIGFyZSB0cmlnZ2VyZWRcbiAgICAvLyB3aGlsZSB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgIGlmIChmY3MuZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob25Gb2N1cykge1xuICAgICAgb25Gb2N1cyhldmVudCk7XG4gICAgfVxuICAgIGlmIChpbnB1dFByb3BzUHJvcC5vbkZvY3VzKSB7XG4gICAgICBpbnB1dFByb3BzUHJvcC5vbkZvY3VzKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKG11aUZvcm1Db250cm9sICYmIG11aUZvcm1Db250cm9sLm9uRm9jdXMpIHtcbiAgICAgIG11aUZvcm1Db250cm9sLm9uRm9jdXMoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRGb2N1c2VkKHRydWUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlQmx1ciA9IGV2ZW50ID0+IHtcbiAgICBpZiAob25CbHVyKSB7XG4gICAgICBvbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAoaW5wdXRQcm9wc1Byb3Aub25CbHVyKSB7XG4gICAgICBpbnB1dFByb3BzUHJvcC5vbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAobXVpRm9ybUNvbnRyb2wgJiYgbXVpRm9ybUNvbnRyb2wub25CbHVyKSB7XG4gICAgICBtdWlGb3JtQ29udHJvbC5vbkJsdXIoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChldmVudCwgLi4uYXJncykgPT4ge1xuICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0IHx8IGlucHV0UmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBFeHBlY3RlZCB2YWxpZCBpbnB1dCB0YXJnZXQuIERpZCB5b3UgdXNlIGEgY3VzdG9tIFxcYGlucHV0Q29tcG9uZW50XFxgIGFuZCBmb3JnZXQgdG8gZm9yd2FyZCByZWZzPyBTZWUgaHR0cHM6Ly9tdWkuY29tL3IvaW5wdXQtY29tcG9uZW50LXJlZi1pbnRlcmZhY2UgZm9yIG1vcmUgaW5mby5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxKSk7XG4gICAgICB9XG4gICAgICBjaGVja0RpcnR5KHtcbiAgICAgICAgdmFsdWU6IGVsZW1lbnQudmFsdWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaW5wdXRQcm9wc1Byb3Aub25DaGFuZ2UpIHtcbiAgICAgIGlucHV0UHJvcHNQcm9wLm9uQ2hhbmdlKGV2ZW50LCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICAvLyBQZXJmb3JtIGluIHRoZSB3aWxsVXBkYXRlXG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICBvbkNoYW5nZShldmVudCwgLi4uYXJncyk7XG4gICAgfVxuICB9O1xuXG4gIC8vIENoZWNrIHRoZSBpbnB1dCBzdGF0ZSBvbiBtb3VudCwgaW4gY2FzZSBpdCB3YXMgZmlsbGVkIGJ5IHRoZSB1c2VyXG4gIC8vIG9yIGF1dG8gZmlsbGVkIGJ5IHRoZSBicm93c2VyIGJlZm9yZSB0aGUgaHlkcmF0aW9uIChmb3IgU1NSKS5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjaGVja0RpcnR5KGlucHV0UmVmLmN1cnJlbnQpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pO1xuICBjb25zdCBoYW5kbGVDbGljayA9IGV2ZW50ID0+IHtcbiAgICBpZiAoaW5wdXRSZWYuY3VycmVudCAmJiBldmVudC5jdXJyZW50VGFyZ2V0ID09PSBldmVudC50YXJnZXQpIHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgbGV0IElucHV0Q29tcG9uZW50ID0gaW5wdXRDb21wb25lbnQ7XG4gIGxldCBpbnB1dFByb3BzID0gaW5wdXRQcm9wc1Byb3A7XG4gIGlmIChtdWx0aWxpbmUgJiYgSW5wdXRDb21wb25lbnQgPT09ICdpbnB1dCcpIHtcbiAgICBpZiAocm93cykge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKG1pblJvd3MgfHwgbWF4Um93cykge1xuICAgICAgICAgIGNvbnNvbGUud2FybignTVVJOiBZb3UgY2FuIG5vdCB1c2UgdGhlIGBtaW5Sb3dzYCBvciBgbWF4Um93c2AgcHJvcHMgd2hlbiB0aGUgaW5wdXQgYHJvd3NgIHByb3AgaXMgc2V0LicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpbnB1dFByb3BzID0gX2V4dGVuZHMoe1xuICAgICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAgIG1pblJvd3M6IHJvd3MsXG4gICAgICAgIG1heFJvd3M6IHJvd3NcbiAgICAgIH0sIGlucHV0UHJvcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dFByb3BzID0gX2V4dGVuZHMoe1xuICAgICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAgIG1heFJvd3MsXG4gICAgICAgIG1pblJvd3NcbiAgICAgIH0sIGlucHV0UHJvcHMpO1xuICAgIH1cbiAgICBJbnB1dENvbXBvbmVudCA9IFRleHRhcmVhQXV0b3NpemU7XG4gIH1cbiAgY29uc3QgaGFuZGxlQXV0b0ZpbGwgPSBldmVudCA9PiB7XG4gICAgLy8gUHJvdmlkZSBhIGZha2UgdmFsdWUgYXMgQ2hyb21lIG1pZ2h0IG5vdCBsZXQgeW91IGFjY2VzcyBpdCBmb3Igc2VjdXJpdHkgcmVhc29ucy5cbiAgICBjaGVja0RpcnR5KGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdtdWktYXV0by1maWxsLWNhbmNlbCcgPyBpbnB1dFJlZi5jdXJyZW50IDoge1xuICAgICAgdmFsdWU6ICd4J1xuICAgIH0pO1xuICB9O1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgICAgbXVpRm9ybUNvbnRyb2wuc2V0QWRvcm5lZFN0YXJ0KEJvb2xlYW4oc3RhcnRBZG9ybm1lbnQpKTtcbiAgICB9XG4gIH0sIFttdWlGb3JtQ29udHJvbCwgc3RhcnRBZG9ybm1lbnRdKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yOiBmY3MuY29sb3IgfHwgJ3ByaW1hcnknLFxuICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgZW5kQWRvcm5tZW50LFxuICAgIGVycm9yOiBmY3MuZXJyb3IsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgZm9ybUNvbnRyb2w6IG11aUZvcm1Db250cm9sLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBoaWRkZW5MYWJlbDogZmNzLmhpZGRlbkxhYmVsLFxuICAgIG11bHRpbGluZSxcbiAgICBzaXplOiBmY3Muc2l6ZSxcbiAgICBzdGFydEFkb3JubWVudCxcbiAgICB0eXBlXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IFJvb3QgPSBzbG90cy5yb290IHx8IGNvbXBvbmVudHMuUm9vdCB8fCBJbnB1dEJhc2VSb290O1xuICBjb25zdCByb290UHJvcHMgPSBzbG90UHJvcHMucm9vdCB8fCBjb21wb25lbnRzUHJvcHMucm9vdCB8fCB7fTtcbiAgY29uc3QgSW5wdXQgPSBzbG90cy5pbnB1dCB8fCBjb21wb25lbnRzLklucHV0IHx8IElucHV0QmFzZUNvbXBvbmVudDtcbiAgaW5wdXRQcm9wcyA9IF9leHRlbmRzKHt9LCBpbnB1dFByb3BzLCAoX3Nsb3RQcm9wcyRpbnB1dCA9IHNsb3RQcm9wcy5pbnB1dCkgIT0gbnVsbCA/IF9zbG90UHJvcHMkaW5wdXQgOiBjb21wb25lbnRzUHJvcHMuaW5wdXQpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFshZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlcyAmJiBpbnB1dEdsb2JhbFN0eWxlcywgLyojX19QVVJFX18qL19qc3hzKFJvb3QsIF9leHRlbmRzKHt9LCByb290UHJvcHMsICFpc0hvc3RDb21wb25lbnQoUm9vdCkgJiYge1xuICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIHJvb3RQcm9wcy5vd25lclN0YXRlKVxuICAgIH0sIHtcbiAgICAgIHJlZjogcmVmLFxuICAgICAgb25DbGljazogaGFuZGxlQ2xpY2tcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgcm9vdFByb3BzLmNsYXNzTmFtZSwgY2xhc3NOYW1lLCByZWFkT25seSAmJiAnTXVpSW5wdXRCYXNlLXJlYWRPbmx5JyksXG4gICAgICBjaGlsZHJlbjogW3N0YXJ0QWRvcm5tZW50LCAvKiNfX1BVUkVfXyovX2pzeChGb3JtQ29udHJvbENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dCwgX2V4dGVuZHMoe1xuICAgICAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogZmNzLmVycm9yLFxuICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgICAgICAgYXV0b0NvbXBsZXRlOiBhdXRvQ29tcGxldGUsXG4gICAgICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgZGlzYWJsZWQ6IGZjcy5kaXNhYmxlZCxcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgb25BbmltYXRpb25TdGFydDogaGFuZGxlQXV0b0ZpbGwsXG4gICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICAgICAgcmVhZE9ubHk6IHJlYWRPbmx5LFxuICAgICAgICAgIHJlcXVpcmVkOiBmY3MucmVxdWlyZWQsXG4gICAgICAgICAgcm93czogcm93cyxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgb25LZXlEb3duOiBvbktleURvd24sXG4gICAgICAgICAgb25LZXlVcDogb25LZXlVcCxcbiAgICAgICAgICB0eXBlOiB0eXBlXG4gICAgICAgIH0sIGlucHV0UHJvcHMsICFpc0hvc3RDb21wb25lbnQoSW5wdXQpICYmIHtcbiAgICAgICAgICBhczogSW5wdXRDb21wb25lbnQsXG4gICAgICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIGlucHV0UHJvcHMub3duZXJTdGF0ZSlcbiAgICAgICAgfSwge1xuICAgICAgICAgIHJlZjogaGFuZGxlSW5wdXRSZWYsXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMuaW5wdXQsIGlucHV0UHJvcHMuY2xhc3NOYW1lLCByZWFkT25seSAmJiAnTXVpSW5wdXRCYXNlLXJlYWRPbmx5JyksXG4gICAgICAgICAgb25CbHVyOiBoYW5kbGVCbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgICAgICAgb25Gb2N1czogaGFuZGxlRm9jdXNcbiAgICAgICAgfSkpXG4gICAgICB9KSwgZW5kQWRvcm5tZW50LCByZW5kZXJTdWZmaXggPyByZW5kZXJTdWZmaXgoX2V4dGVuZHMoe30sIGZjcywge1xuICAgICAgICBzdGFydEFkb3JubWVudFxuICAgICAgfSkpIDogbnVsbF1cbiAgICB9KSldXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBJbnB1dEJhc2UucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgJ2FyaWEtZGVzY3JpYmVkYnknOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhpcyBwcm9wIGhlbHBzIHVzZXJzIHRvIGZpbGwgZm9ybXMgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIG1vYmlsZSBkZXZpY2VzLlxuICAgKiBUaGUgbmFtZSBjYW4gYmUgY29uZnVzaW5nLCBhcyBpdCdzIG1vcmUgbGlrZSBhbiBhdXRvZmlsbC5cbiAgICogWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IGl0IFtmb2xsb3dpbmcgdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2F1dG9maWxsKS5cbiAgICovXG4gIGF1dG9Db21wbGV0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdwcmltYXJ5J2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90c2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90c2AgcHJvcCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBJbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdFByb3BzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RQcm9wc2AgcHJvcCBpbnN0ZWFkLCBhcyBgY29tcG9uZW50c1Byb3BzYCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIEdsb2JhbFN0eWxlcyBmb3IgdGhlIGF1dG8tZmlsbCBrZXlmcmFtZXMgd2lsbCBub3QgYmUgaW5qZWN0ZWQvcmVtb3ZlZCBvbiBtb3VudC91bm1vdW50LiBNYWtlIHN1cmUgdG8gaW5qZWN0IHRoZW0gYXQgdGhlIHRvcCBvZiB5b3VyIGFwcGxpY2F0aW9uLlxuICAgKiBUaGlzIG9wdGlvbiBpcyBpbnRlbmRlZCB0byBoZWxwIHdpdGggYm9vc3RpbmcgdGhlIGluaXRpYWwgcmVuZGVyaW5nIHBlcmZvcm1hbmNlIGlmIHlvdSBhcmUgbG9hZGluZyBhIGJpZyBhbW91bnQgb2YgSW5wdXQgY29tcG9uZW50cyBhdCBvbmNlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbmQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBlbmRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5wdXQnXG4gICAqL1xuICBpbnB1dENvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ25vbmUnYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnXSksXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSBbVGV4dGFyZWFBdXRvc2l6ZV0oL21hdGVyaWFsLXVpL3JlYWN0LXRleHRhcmVhLWF1dG9zaXplLykgZWxlbWVudCBpcyByZW5kZXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpbGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGBpbnB1dGAgaXMgYmx1cnJlZC5cbiAgICpcbiAgICogTm90aWNlIHRoYXQgdGhlIGZpcnN0IGFyZ3VtZW50IChldmVudCkgbWlnaHQgYmUgdW5kZWZpbmVkLlxuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBgaW5wdXRgIGRvZXNuJ3Qgc2F0aXNmeSBpdHMgY29uc3RyYWludHMuXG4gICAqL1xuICBvbkludmFsaWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5VXA6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHNob3J0IGhpbnQgZGlzcGxheWVkIGluIHRoZSBgaW5wdXRgIGJlZm9yZSB0aGUgdXNlciBlbnRlcnMgYSB2YWx1ZS5cbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSXQgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAqIChub3QgZnJvbSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmaWVsZCkuXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICByZW5kZXJTdWZmaXg6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c1Byb3BzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBTdGFydCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIHN0YXJ0QWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC4gSXQgc2hvdWxkIGJlIFthIHZhbGlkIEhUTUw1IGlucHV0IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNGb3JtXyUzQ2lucHV0JTNFX3R5cGVzKS5cbiAgICogQGRlZmF1bHQgJ3RleHQnXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHJlcXVpcmVkIGZvciBhIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBJbnB1dEJhc2U7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0QmFzZVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpSW5wdXRCYXNlJywgc2xvdCk7XG59XG5jb25zdCBpbnB1dEJhc2VDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpSW5wdXRCYXNlJywgWydyb290JywgJ2Zvcm1Db250cm9sJywgJ2ZvY3VzZWQnLCAnZGlzYWJsZWQnLCAnYWRvcm5lZFN0YXJ0JywgJ2Fkb3JuZWRFbmQnLCAnZXJyb3InLCAnc2l6ZVNtYWxsJywgJ211bHRpbGluZScsICdjb2xvclNlY29uZGFyeScsICdmdWxsV2lkdGgnLCAnaGlkZGVuTGFiZWwnLCAncmVhZE9ubHknLCAnaW5wdXQnLCAnaW5wdXRTaXplU21hbGwnLCAnaW5wdXRNdWx0aWxpbmUnLCAnaW5wdXRUeXBlU2VhcmNoJywgJ2lucHV0QWRvcm5lZFN0YXJ0JywgJ2lucHV0QWRvcm5lZEVuZCcsICdpbnB1dEhpZGRlbkxhYmVsJ10pO1xuZXhwb3J0IGRlZmF1bHQgaW5wdXRCYXNlQ2xhc3NlczsiLCIvLyBTdXBwb3J0cyBkZXRlcm1pbmF0aW9uIG9mIGlzQ29udHJvbGxlZCgpLlxuLy8gQ29udHJvbGxlZCBpbnB1dCBhY2NlcHRzIGl0cyBjdXJyZW50IHZhbHVlIGFzIGEgcHJvcC5cbi8vXG4vLyBAc2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvZm9ybXMuaHRtbCNjb250cm9sbGVkLWNvbXBvbmVudHNcbi8vIEBwYXJhbSB2YWx1ZVxuLy8gQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgc3RyaW5nIChpbmNsdWRpbmcgJycpIG9yIG51bWJlciAoaW5jbHVkaW5nIHplcm8pXG5leHBvcnQgZnVuY3Rpb24gaGFzVmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgIShBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApO1xufVxuXG4vLyBEZXRlcm1pbmUgaWYgZmllbGQgaXMgZW1wdHkgb3IgZmlsbGVkLlxuLy8gUmVzcG9uc2UgZGV0ZXJtaW5lcyBpZiBsYWJlbCBpcyBwcmVzZW50ZWQgYWJvdmUgZmllbGQgb3IgYXMgcGxhY2Vob2xkZXIuXG4vL1xuLy8gQHBhcmFtIG9ialxuLy8gQHBhcmFtIFNTUlxuLy8gQHJldHVybnMge2Jvb2xlYW59IEZhbHNlIHdoZW4gbm90IHByZXNlbnQgb3IgZW1wdHkgc3RyaW5nLlxuLy8gICAgICAgICAgICAgICAgICAgIFRydWUgd2hlbiBhbnkgbnVtYmVyIG9yIHN0cmluZyB3aXRoIGxlbmd0aC5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbGxlZChvYmosIFNTUiA9IGZhbHNlKSB7XG4gIHJldHVybiBvYmogJiYgKGhhc1ZhbHVlKG9iai52YWx1ZSkgJiYgb2JqLnZhbHVlICE9PSAnJyB8fCBTU1IgJiYgaGFzVmFsdWUob2JqLmRlZmF1bHRWYWx1ZSkgJiYgb2JqLmRlZmF1bHRWYWx1ZSAhPT0gJycpO1xufVxuXG4vLyBEZXRlcm1pbmUgaWYgYW4gSW5wdXQgaXMgYWRvcm5lZCBvbiBzdGFydC5cbi8vIEl0J3MgY29ycmVzcG9uZGluZyB0byB0aGUgbGVmdCB3aXRoIExUUi5cbi8vXG4vLyBAcGFyYW0gb2JqXG4vLyBAcmV0dXJucyB7Ym9vbGVhbn0gRmFsc2Ugd2hlbiBubyBhZG9ybm1lbnRzLlxuLy8gICAgICAgICAgICAgICAgICAgIFRydWUgd2hlbiBhZG9ybmVkIGF0IHRoZSBzdGFydC5cbmV4cG9ydCBmdW5jdGlvbiBpc0Fkb3JuZWRTdGFydChvYmopIHtcbiAgcmV0dXJuIG9iai5zdGFydEFkb3JubWVudDtcbn0iLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUxhYmVsVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1MYWJlbCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUxhYmVsQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1MYWJlbCcsIFsncm9vdCcsICdjb2xvclNlY29uZGFyeScsICdmb2N1c2VkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2ZpbGxlZCcsICdyZXF1aXJlZCcsICdhc3RlcmlzayddKTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1MYWJlbENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJmaWxsZWRcIiwgXCJmb2N1c2VkXCIsIFwicmVxdWlyZWRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgZm9ybUxhYmVsQ2xhc3NlcywgeyBnZXRGb3JtTGFiZWxVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vZm9ybUxhYmVsQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjb2xvcixcbiAgICBmb2N1c2VkLFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGZpbGxlZCxcbiAgICByZXF1aXJlZFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBlcnJvciAmJiAnZXJyb3InLCBmaWxsZWQgJiYgJ2ZpbGxlZCcsIGZvY3VzZWQgJiYgJ2ZvY3VzZWQnLCByZXF1aXJlZCAmJiAncmVxdWlyZWQnXSxcbiAgICBhc3RlcmlzazogWydhc3RlcmlzaycsIGVycm9yICYmICdlcnJvciddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUxhYmVsVXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBGb3JtTGFiZWxSb290ID0gc3R5bGVkKCdsYWJlbCcsIHtcbiAgbmFtZTogJ011aUZvcm1MYWJlbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6ICh7XG4gICAgb3duZXJTdGF0ZVxuICB9LCBzdHlsZXMpID0+IHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0eWxlcy5yb290LCBvd25lclN0YXRlLmNvbG9yID09PSAnc2Vjb25kYXJ5JyAmJiBzdHlsZXMuY29sb3JTZWNvbmRhcnksIG93bmVyU3RhdGUuZmlsbGVkICYmIHN0eWxlcy5maWxsZWQpO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5zZWNvbmRhcnlcbn0sIHRoZW1lLnR5cG9ncmFwaHkuYm9keTEsIHtcbiAgbGluZUhlaWdodDogJzEuNDM3NWVtJyxcbiAgcGFkZGluZzogMCxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZm9jdXNlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluXG4gIH0sXG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5kaXNhYmxlZFxuICB9LFxuICBbYCYuJHtmb3JtTGFiZWxDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgfVxufSkpO1xuY29uc3QgQXN0ZXJpc2tDb21wb25lbnQgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlGb3JtTGFiZWwnLFxuICBzbG90OiAnQXN0ZXJpc2snLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5hc3Rlcmlza1xufSkoKHtcbiAgdGhlbWVcbn0pID0+ICh7XG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZXJyb3J9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICB9XG59KSk7XG5jb25zdCBGb3JtTGFiZWwgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGb3JtTGFiZWwoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUZvcm1MYWJlbCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ2xhYmVsJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydjb2xvcicsICdyZXF1aXJlZCcsICdmb2N1c2VkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2ZpbGxlZCddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3I6IGZjcy5jb2xvciB8fCAncHJpbWFyeScsXG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgZXJyb3I6IGZjcy5lcnJvcixcbiAgICBmaWxsZWQ6IGZjcy5maWxsZWQsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgcmVxdWlyZWQ6IGZjcy5yZXF1aXJlZFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKEZvcm1MYWJlbFJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBbY2hpbGRyZW4sIGZjcy5yZXF1aXJlZCAmJiAvKiNfX1BVUkVfXyovX2pzeHMoQXN0ZXJpc2tDb21wb25lbnQsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMuYXN0ZXJpc2ssXG4gICAgICBjaGlsZHJlbjogW1wiXFx1MjAwOVwiLCAnKiddXG4gICAgfSldXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRm9ybUxhYmVsLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2Vycm9yJywgJ2luZm8nLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBkaXNhYmxlZCBzdGF0ZS5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHNob3VsZCB1c2UgZmlsbGVkIGNsYXNzZXMga2V5LlxuICAgKi9cbiAgZmlsbGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGlucHV0IG9mIHRoaXMgbGFiZWwgaXMgZm9jdXNlZCAodXNlZCBieSBgRm9ybUdyb3VwYCBjb21wb25lbnRzKS5cbiAgICovXG4gIGZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgd2lsbCBpbmRpY2F0ZSB0aGF0IHRoZSBgaW5wdXRgIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUxhYmVsOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dExhYmVsVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUlucHV0TGFiZWwnLCBzbG90KTtcbn1cbmNvbnN0IGlucHV0TGFiZWxDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpSW5wdXRMYWJlbCcsIFsncm9vdCcsICdmb2N1c2VkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ3JlcXVpcmVkJywgJ2FzdGVyaXNrJywgJ2Zvcm1Db250cm9sJywgJ3NpemVTbWFsbCcsICdzaHJpbmsnLCAnYW5pbWF0ZWQnLCAnc3RhbmRhcmQnLCAnZmlsbGVkJywgJ291dGxpbmVkJ10pO1xuZXhwb3J0IGRlZmF1bHQgaW5wdXRMYWJlbENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZGlzYWJsZUFuaW1hdGlvblwiLCBcIm1hcmdpblwiLCBcInNocmlua1wiLCBcInZhcmlhbnRcIiwgXCJjbGFzc05hbWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgRm9ybUxhYmVsLCB7IGZvcm1MYWJlbENsYXNzZXMgfSBmcm9tICcuLi9Gb3JtTGFiZWwnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgZ2V0SW5wdXRMYWJlbFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9pbnB1dExhYmVsQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZm9ybUNvbnRyb2wsXG4gICAgc2l6ZSxcbiAgICBzaHJpbmssXG4gICAgZGlzYWJsZUFuaW1hdGlvbixcbiAgICB2YXJpYW50LFxuICAgIHJlcXVpcmVkXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBmb3JtQ29udHJvbCAmJiAnZm9ybUNvbnRyb2wnLCAhZGlzYWJsZUFuaW1hdGlvbiAmJiAnYW5pbWF0ZWQnLCBzaHJpbmsgJiYgJ3NocmluaycsIHNpemUgJiYgc2l6ZSAhPT0gJ25vcm1hbCcgJiYgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YCwgdmFyaWFudF0sXG4gICAgYXN0ZXJpc2s6IFtyZXF1aXJlZCAmJiAnYXN0ZXJpc2snXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0SW5wdXRMYWJlbFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IElucHV0TGFiZWxSb290ID0gc3R5bGVkKEZvcm1MYWJlbCwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpSW5wdXRMYWJlbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3tcbiAgICAgIFtgJiAuJHtmb3JtTGFiZWxDbGFzc2VzLmFzdGVyaXNrfWBdOiBzdHlsZXMuYXN0ZXJpc2tcbiAgICB9LCBzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5mb3JtQ29udHJvbCAmJiBzdHlsZXMuZm9ybUNvbnRyb2wsIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiBzdHlsZXMuc2l6ZVNtYWxsLCBvd25lclN0YXRlLnNocmluayAmJiBzdHlsZXMuc2hyaW5rLCAhb3duZXJTdGF0ZS5kaXNhYmxlQW5pbWF0aW9uICYmIHN0eWxlcy5hbmltYXRlZCwgb3duZXJTdGF0ZS5mb2N1c2VkICYmIHN0eWxlcy5mb2N1c2VkLCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdibG9jaycsXG4gIHRyYW5zZm9ybU9yaWdpbjogJ3RvcCBsZWZ0JyxcbiAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICBtYXhXaWR0aDogJzEwMCUnXG59LCBvd25lclN0YXRlLmZvcm1Db250cm9sICYmIHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIGxlZnQ6IDAsXG4gIHRvcDogMCxcbiAgLy8gc2xpZ2h0IGFsdGVyYXRpb24gdG8gc3BlYyBzcGFjaW5nIHRvIG1hdGNoIHZpc3VhbCBzcGVjIHJlc3VsdFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMCwgMjBweCkgc2NhbGUoMSknXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAvLyBDb21wZW5zYXRpb24gZm9yIHRoZSBgSW5wdXQuaW5wdXRTaXplU21hbGxgIHN0eWxlLlxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMCwgMTdweCkgc2NhbGUoMSknXG59LCBvd25lclN0YXRlLnNocmluayAmJiB7XG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgwLCAtMS41cHgpIHNjYWxlKDAuNzUpJyxcbiAgdHJhbnNmb3JtT3JpZ2luOiAndG9wIGxlZnQnLFxuICBtYXhXaWR0aDogJzEzMyUnXG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlQW5pbWF0aW9uICYmIHtcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKFsnY29sb3InLCAndHJhbnNmb3JtJywgJ21heC13aWR0aCddLCB7XG4gICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsXG4gICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICB9KVxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZmlsbGVkJyAmJiBfZXh0ZW5kcyh7XG4gIC8vIENocm9tZSdzIGF1dG9maWxsIGZlYXR1cmUgZ2l2ZXMgdGhlIGlucHV0IGZpZWxkIGEgeWVsbG93IGJhY2tncm91bmQuXG4gIC8vIFNpbmNlIHRoZSBpbnB1dCBmaWVsZCBpcyBiZWhpbmQgdGhlIGxhYmVsIGluIHRoZSBIVE1MIHRyZWUsXG4gIC8vIHRoZSBpbnB1dCBmaWVsZCBpcyBkcmF3biBsYXN0IGFuZCBoaWRlcyB0aGUgbGFiZWwgd2l0aCBhbiBvcGFxdWUgYmFja2dyb3VuZCBjb2xvci5cbiAgLy8gekluZGV4OiAxIHdpbGwgcmFpc2UgdGhlIGxhYmVsIGFib3ZlIG9wYXF1ZSBiYWNrZ3JvdW5kLWNvbG9ycyBvZiBpbnB1dC5cbiAgekluZGV4OiAxLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxMnB4LCAxNnB4KSBzY2FsZSgxKScsXG4gIG1heFdpZHRoOiAnY2FsYygxMDAlIC0gMjRweCknXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTJweCwgMTNweCkgc2NhbGUoMSknXG59LCBvd25lclN0YXRlLnNocmluayAmJiBfZXh0ZW5kcyh7XG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgcG9pbnRlckV2ZW50czogJ2F1dG8nLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTJweCwgN3B4KSBzY2FsZSgwLjc1KScsXG4gIG1heFdpZHRoOiAnY2FsYygxMzMlIC0gMjRweCknXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTJweCwgNHB4KSBzY2FsZSgwLjc1KSdcbn0pKSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIF9leHRlbmRzKHtcbiAgLy8gc2VlIGNvbW1lbnQgYWJvdmUgb24gZmlsbGVkLnpJbmRleFxuICB6SW5kZXg6IDEsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDE0cHgsIDE2cHgpIHNjYWxlKDEpJyxcbiAgbWF4V2lkdGg6ICdjYWxjKDEwMCUgLSAyNHB4KSdcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxNHB4LCA5cHgpIHNjYWxlKDEpJ1xufSwgb3duZXJTdGF0ZS5zaHJpbmsgJiYge1xuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIHBvaW50ZXJFdmVudHM6ICdhdXRvJyxcbiAgLy8gVGhlb3JldGljYWxseSwgd2Ugc2hvdWxkIGhhdmUgKDgrNSkqMi8wLjc1ID0gMzRweFxuICAvLyBidXQgaXQgZmVlbHMgYSBiZXR0ZXIgd2hlbiBpdCBibGVlZHMgYSBiaXQgb24gdGhlIGxlZnQsIHNvIDMycHguXG4gIG1heFdpZHRoOiAnY2FsYygxMzMlIC0gMzJweCknLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTRweCwgLTlweCkgc2NhbGUoMC43NSknXG59KSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnc3RhbmRhcmQnICYmIHtcbiAgJyY6bm90KGxhYmVsKSArIGRpdic6IHtcbiAgICBtYXJnaW5Ub3A6IDE2XG4gIH1cbn0pKTtcbmNvbnN0IElucHV0TGFiZWwgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBJbnB1dExhYmVsKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIG5hbWU6ICdNdWlJbnB1dExhYmVsJyxcbiAgICBwcm9wczogaW5Qcm9wc1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgZGlzYWJsZUFuaW1hdGlvbiA9IGZhbHNlLFxuICAgICAgc2hyaW5rOiBzaHJpbmtQcm9wLFxuICAgICAgY2xhc3NOYW1lXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgbGV0IHNocmluayA9IHNocmlua1Byb3A7XG4gIGlmICh0eXBlb2Ygc2hyaW5rID09PSAndW5kZWZpbmVkJyAmJiBtdWlGb3JtQ29udHJvbCkge1xuICAgIHNocmluayA9IG11aUZvcm1Db250cm9sLmZpbGxlZCB8fCBtdWlGb3JtQ29udHJvbC5mb2N1c2VkIHx8IG11aUZvcm1Db250cm9sLmFkb3JuZWRTdGFydDtcbiAgfVxuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsnc2l6ZScsICd2YXJpYW50JywgJ3JlcXVpcmVkJywgJ2ZvY3VzZWQnXVxuICB9KTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRpc2FibGVBbmltYXRpb24sXG4gICAgZm9ybUNvbnRyb2w6IG11aUZvcm1Db250cm9sLFxuICAgIHNocmluayxcbiAgICBzaXplOiBmY3Muc2l6ZSxcbiAgICB2YXJpYW50OiBmY3MudmFyaWFudCxcbiAgICByZXF1aXJlZDogZmNzLnJlcXVpcmVkLFxuICAgIGZvY3VzZWQ6IGZjcy5mb2N1c2VkXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dExhYmVsUm9vdCwgX2V4dGVuZHMoe1xuICAgIFwiZGF0YS1zaHJpbmtcIjogc2hyaW5rLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWYsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXNcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBJbnB1dExhYmVsLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2Vycm9yJywgJ2luZm8nLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0cmFuc2l0aW9uIGFuaW1hdGlvbiBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVBbmltYXRpb246IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgZGlzcGxheWVkIGluIGFuIGVycm9yIHN0YXRlLlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBvZiB0aGlzIGxhYmVsIGlzIGZvY3VzZWQuXG4gICAqL1xuICBmb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnXSksXG4gIC8qKlxuICAgKiBpZiBgdHJ1ZWAsIHRoZSBsYWJlbCB3aWxsIGluZGljYXRlIHRoYXQgdGhlIGBpbnB1dGAgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBzaHJ1bmsuXG4gICAqL1xuICBzaHJpbms6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ25vcm1hbCdcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbm9ybWFsJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBJbnB1dExhYmVsOyJdLCJuYW1lcyI6WyJnZXRGaWxsZWRJbnB1dFV0aWxpdHlDbGFzcyIsInNsb3QiLCJnZW5lcmF0ZVV0aWxpdHlDbGFzcyIsImlucHV0QmFzZUNsYXNzZXMiLCJnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIiwiX2V4Y2x1ZGVkIiwiRmlsbGVkSW5wdXRSb290Iiwic3R5bGVkIiwiSW5wdXRCYXNlIiwic2hvdWxkRm9yd2FyZFByb3AiLCJwcm9wIiwibmFtZSIsIm92ZXJyaWRlc1Jlc29sdmVyIiwicHJvcHMiLCJzdHlsZXMiLCJvd25lclN0YXRlIiwiZGlzYWJsZVVuZGVybGluZSIsInVuZGVybGluZSIsInRoZW1lIiwiX3BhbGV0dGUiLCJsaWdodCIsInBhbGV0dGUiLCJtb2RlIiwiYm90dG9tTGluZUNvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwiaG92ZXJCYWNrZ3JvdW5kIiwiZGlzYWJsZWRCYWNrZ3JvdW5kIiwicG9zaXRpb24iLCJ2YXJzIiwiRmlsbGVkSW5wdXQiLCJiZyIsImJvcmRlclRvcExlZnRSYWRpdXMiLCJzaGFwZSIsImJvcmRlclJhZGl1cyIsImJvcmRlclRvcFJpZ2h0UmFkaXVzIiwidHJhbnNpdGlvbiIsInRyYW5zaXRpb25zIiwiY3JlYXRlIiwiZHVyYXRpb24iLCJzaG9ydGVyIiwiZWFzaW5nIiwiZWFzZU91dCIsImhvdmVyQmciLCJmb2N1c2VkIiwiZGlzYWJsZWQiLCJkaXNhYmxlZEJnIiwiYm9yZGVyQm90dG9tIiwiY29sb3IiLCJtYWluIiwibGVmdCIsImJvdHRvbSIsImNvbnRlbnQiLCJyaWdodCIsInRyYW5zZm9ybSIsInBvaW50ZXJFdmVudHMiLCJlcnJvciIsImJvcmRlckJvdHRvbUNvbG9yIiwiY29tbW9uIiwib25CYWNrZ3JvdW5kQ2hhbm5lbCIsIm9wYWNpdHkiLCJpbnB1dFVuZGVybGluZSIsInRleHQiLCJwcmltYXJ5IiwiYm9yZGVyQm90dG9tU3R5bGUiLCJzdGFydEFkb3JubWVudCIsInBhZGRpbmdMZWZ0IiwiZW5kQWRvcm5tZW50IiwicGFkZGluZ1JpZ2h0IiwibXVsdGlsaW5lIiwicGFkZGluZyIsInNpemUiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSIsImhpZGRlbkxhYmVsIiwiRmlsbGVkSW5wdXRJbnB1dCIsIldlYmtpdEJveFNoYWRvdyIsIldlYmtpdFRleHRGaWxsQ29sb3IiLCJjYXJldENvbG9yIiwiZ2V0Q29sb3JTY2hlbWVTZWxlY3RvciIsImluUHJvcHMiLCJyZWYiLCJfcmVmIiwiX3Nsb3RzJHJvb3QiLCJfcmVmMiIsIl9zbG90cyRpbnB1dCIsInVzZVRoZW1lUHJvcHMiLCJjb21wb25lbnRzIiwiY29tcG9uZW50c1Byb3BzIiwiY29tcG9uZW50c1Byb3BzUHJvcCIsImZ1bGxXaWR0aCIsImlucHV0Q29tcG9uZW50Iiwic2xvdFByb3BzIiwic2xvdHMiLCJ0eXBlIiwib3RoZXIiLCJjbGFzc2VzIiwicm9vdCIsImlucHV0IiwiY29tcG9zZWRDbGFzc2VzIiwiY29tcG9zZUNsYXNzZXMiLCJ1c2VVdGlsaXR5Q2xhc3NlcyIsImZpbGxlZElucHV0Q29tcG9uZW50c1Byb3BzIiwiZGVlcG1lcmdlIiwiUm9vdFNsb3QiLCJSb290IiwiSW5wdXRTbG90IiwiSW5wdXQiLCJtdWlOYW1lIiwiZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcyIsIkZvcm1Db250cm9sUm9vdCIsImNhcGl0YWxpemUiLCJtYXJnaW4iLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsIm1pbldpZHRoIiwiYm9yZGVyIiwidmVydGljYWxBbGlnbiIsIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSIsIndpZHRoIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJjb21wb25lbnQiLCJ2aXN1YWxseUZvY3VzZWQiLCJyZXF1aXJlZCIsInZhcmlhbnQiLCJhZG9ybmVkU3RhcnQiLCJzZXRBZG9ybmVkU3RhcnQiLCJpbml0aWFsQWRvcm5lZFN0YXJ0IiwiZm9yRWFjaCIsImNoaWxkIiwiaXNNdWlFbGVtZW50IiwiZmlsbGVkIiwic2V0RmlsbGVkIiwiaW5pdGlhbEZpbGxlZCIsImlucHV0UHJvcHMiLCJmb2N1c2VkU3RhdGUiLCJzZXRGb2N1c2VkIiwidW5kZWZpbmVkIiwicmVnaXN0ZXJFZmZlY3QiLCJjaGlsZENvbnRleHQiLCJvbkJsdXIiLCJvbkVtcHR5Iiwib25GaWxsZWQiLCJvbkZvY3VzIiwiRm9ybUNvbnRyb2xDb250ZXh0IiwiUHJvdmlkZXIiLCJ2YWx1ZSIsImFzIiwiY2xzeCIsImZvcm1Db250cm9sU3RhdGUiLCJzdGF0ZXMiLCJtdWlGb3JtQ29udHJvbCIsInJlZHVjZSIsImFjYyIsInN0YXRlIiwidXNlRm9ybUNvbnRyb2wiLCJnZXRGb3JtSGVscGVyVGV4dFV0aWxpdHlDbGFzc2VzIiwiX3NwYW4iLCJGb3JtSGVscGVyVGV4dFJvb3QiLCJjb250YWluZWQiLCJzZWNvbmRhcnkiLCJ0eXBvZ3JhcGh5IiwiY2FwdGlvbiIsInRleHRBbGlnbiIsIm1hcmdpblJpZ2h0IiwibWFyZ2luTGVmdCIsImZjcyIsImRlZmF1bHRUaGVtZSIsInRoZW1lSWQiLCJnZXRHcmlkVXRpbGl0eUNsYXNzIiwiR1JJRF9TSVpFUyIsIm1hcCIsInNwYWNpbmciLCJkaXJlY3Rpb24iLCJ3cmFwIiwiZ2V0T2Zmc2V0IiwidmFsIiwicGFyc2UiLCJwYXJzZUZsb2F0IiwiU3RyaW5nIiwicmVwbGFjZSIsImV4dHJhY3RaZXJvVmFsdWVCcmVha3BvaW50S2V5cyIsImJyZWFrcG9pbnRzIiwidmFsdWVzIiwibm9uWmVyb0tleSIsIk9iamVjdCIsImtleXMiLCJrZXkiLCJzb3J0ZWRCcmVha3BvaW50S2V5c0J5VmFsdWUiLCJzb3J0IiwiYSIsImIiLCJzbGljZSIsImluZGV4T2YiLCJHcmlkUm9vdCIsImNvbnRhaW5lciIsIml0ZW0iLCJ6ZXJvTWluV2lkdGgiLCJzcGFjaW5nU3R5bGVzIiwiTnVtYmVyIiwiaXNOYU4iLCJicmVha3BvaW50IiwicHVzaCIsInJlc29sdmVTcGFjaW5nU3R5bGVzIiwiYnJlYWtwb2ludHNTdHlsZXMiLCJib3hTaXppbmciLCJmbGV4V3JhcCIsImRpcmVjdGlvblZhbHVlcyIsInByb3BWYWx1ZSIsIm91dHB1dCIsIm1heFdpZHRoIiwicm93U3BhY2luZyIsInJvd1NwYWNpbmdWYWx1ZXMiLCJ6ZXJvVmFsdWVCcmVha3BvaW50S2V5cyIsIl96ZXJvVmFsdWVCcmVha3BvaW50SyIsInRoZW1lU3BhY2luZyIsImluY2x1ZGVzIiwiY29sdW1uU3BhY2luZyIsImNvbHVtblNwYWNpbmdWYWx1ZXMiLCJfemVyb1ZhbHVlQnJlYWtwb2ludEsyIiwiZ2xvYmFsU3R5bGVzIiwiZmxleEJhc2lzIiwiZmxleEdyb3ciLCJmbGV4U2hyaW5rIiwiY29sdW1uc0JyZWFrcG9pbnRWYWx1ZXMiLCJjb2x1bW5zIiwiY29sdW1uVmFsdWUiLCJNYXRoIiwicm91bmQiLCJtb3JlIiwiYXNzaWduIiwidXAiLCJHcmlkIiwidGhlbWVQcm9wcyIsInVzZVRoZW1lIiwiZXh0ZW5kU3hQcm9wIiwiY29sdW1uc1Byb3AiLCJjb2x1bW5TcGFjaW5nUHJvcCIsInJvd1NwYWNpbmdQcm9wIiwiY29sdW1uc0NvbnRleHQiLCJicmVha3BvaW50c1ZhbHVlcyIsIm90aGVyRmlsdGVyZWQiLCJzcGFjaW5nQ2xhc3NlcyIsInJlc29sdmVTcGFjaW5nQ2xhc3NlcyIsImJyZWFrcG9pbnRzQ2xhc3NlcyIsImdldFNjYWxlIiwiZW50ZXJpbmciLCJlbnRlcmVkIiwiaXNXZWJLaXQxNTQiLCJuYXZpZ2F0b3IiLCJ0ZXN0IiwidXNlckFnZW50IiwiR3JvdyIsImFkZEVuZExpc3RlbmVyIiwiYXBwZWFyIiwiaW4iLCJpblByb3AiLCJvbkVudGVyIiwib25FbnRlcmVkIiwib25FbnRlcmluZyIsIm9uRXhpdCIsIm9uRXhpdGVkIiwib25FeGl0aW5nIiwic3R5bGUiLCJ0aW1lb3V0IiwiVHJhbnNpdGlvbkNvbXBvbmVudCIsInRpbWVyIiwiYXV0b1RpbWVvdXQiLCJub2RlUmVmIiwiaGFuZGxlUmVmIiwibm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayIsImNhbGxiYWNrIiwibWF5YmVJc0FwcGVhcmluZyIsIm5vZGUiLCJjdXJyZW50IiwiaGFuZGxlRW50ZXJpbmciLCJoYW5kbGVFbnRlciIsImlzQXBwZWFyaW5nIiwidHJhbnNpdGlvbkR1cmF0aW9uIiwiZGVsYXkiLCJ0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24iLCJnZXRBdXRvSGVpZ2h0RHVyYXRpb24iLCJjbGllbnRIZWlnaHQiLCJqb2luIiwiaGFuZGxlRW50ZXJlZCIsImhhbmRsZUV4aXRpbmciLCJoYW5kbGVFeGl0IiwiaGFuZGxlRXhpdGVkIiwiY2xlYXJUaW1lb3V0IiwibmV4dCIsInNldFRpbWVvdXQiLCJjaGlsZFByb3BzIiwidmlzaWJpbGl0eSIsIm11aVN1cHBvcnRBdXRvIiwiZ2V0SW5wdXRVdGlsaXR5Q2xhc3MiLCJJbnB1dFJvb3QiLCJmb3JtQ29udHJvbCIsIklucHV0SW5wdXQiLCJpbnB1dENvbXBvbmVudHNQcm9wcyIsInJvb3RPdmVycmlkZXNSZXNvbHZlciIsImFkb3JuZWRFbmQiLCJzaXplU21hbGwiLCJpbnB1dE92ZXJyaWRlc1Jlc29sdmVyIiwiaW5wdXRTaXplU21hbGwiLCJpbnB1dE11bHRpbGluZSIsImlucHV0VHlwZVNlYXJjaCIsImlucHV0QWRvcm5lZFN0YXJ0IiwiaW5wdXRBZG9ybmVkRW5kIiwiaW5wdXRIaWRkZW5MYWJlbCIsIklucHV0QmFzZVJvb3QiLCJib2R5MSIsImxpbmVIZWlnaHQiLCJjdXJzb3IiLCJhbGlnbkl0ZW1zIiwiSW5wdXRCYXNlQ29tcG9uZW50IiwicGxhY2Vob2xkZXIiLCJpbnB1dFBsYWNlaG9sZGVyIiwicGxhY2Vob2xkZXJIaWRkZW4iLCJwbGFjZWhvbGRlclZpc2libGUiLCJmb250IiwibGV0dGVyU3BhY2luZyIsImJhY2tncm91bmQiLCJoZWlnaHQiLCJXZWJraXRUYXBIaWdobGlnaHRDb2xvciIsImFuaW1hdGlvbk5hbWUiLCJhbmltYXRpb25EdXJhdGlvbiIsIm91dGxpbmUiLCJib3hTaGFkb3ciLCJXZWJraXRBcHBlYXJhbmNlIiwicmVzaXplIiwiTW96QXBwZWFyYW5jZSIsImlucHV0R2xvYmFsU3R5bGVzIiwiZnJvbSIsIl9zbG90UHJvcHMkaW5wdXQiLCJhcmlhRGVzY3JpYmVkYnkiLCJhdXRvQ29tcGxldGUiLCJhdXRvRm9jdXMiLCJkZWZhdWx0VmFsdWUiLCJkaXNhYmxlSW5qZWN0aW5nR2xvYmFsU3R5bGVzIiwiaWQiLCJpbnB1dFByb3BzUHJvcCIsImlucHV0UmVmIiwiaW5wdXRSZWZQcm9wIiwibWF4Um93cyIsIm1pblJvd3MiLCJvbkNoYW5nZSIsIm9uQ2xpY2siLCJvbktleURvd24iLCJvbktleVVwIiwicmVhZE9ubHkiLCJyZW5kZXJTdWZmaXgiLCJyb3dzIiwidmFsdWVQcm9wIiwiaXNDb250cm9sbGVkIiwiaGFuZGxlSW5wdXRSZWZXYXJuaW5nIiwiaW5zdGFuY2UiLCJoYW5kbGVJbnB1dFJlZiIsImNoZWNrRGlydHkiLCJvYmoiLCJJbnB1dENvbXBvbmVudCIsIkJvb2xlYW4iLCJyb290UHJvcHMiLCJldmVudCIsImN1cnJlbnRUYXJnZXQiLCJ0YXJnZXQiLCJmb2N1cyIsIm9uQW5pbWF0aW9uU3RhcnQiLCJhcmdzIiwiZWxlbWVudCIsIkVycm9yIiwic3RvcFByb3BhZ2F0aW9uIiwiZ2V0SW5wdXRCYXNlVXRpbGl0eUNsYXNzIiwiaGFzVmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJpc0ZpbGxlZCIsIlNTUiIsImlzQWRvcm5lZFN0YXJ0IiwiZ2V0Rm9ybUxhYmVsVXRpbGl0eUNsYXNzZXMiLCJGb3JtTGFiZWxSb290IiwiY29sb3JTZWNvbmRhcnkiLCJBc3Rlcmlza0NvbXBvbmVudCIsImFzdGVyaXNrIiwiZ2V0SW5wdXRMYWJlbFV0aWxpdHlDbGFzc2VzIiwiSW5wdXRMYWJlbFJvb3QiLCJzaHJpbmsiLCJkaXNhYmxlQW5pbWF0aW9uIiwiYW5pbWF0ZWQiLCJ0cmFuc2Zvcm1PcmlnaW4iLCJ3aGl0ZVNwYWNlIiwib3ZlcmZsb3ciLCJ0ZXh0T3ZlcmZsb3ciLCJ0b3AiLCJ6SW5kZXgiLCJ1c2VyU2VsZWN0Iiwic2hyaW5rUHJvcCJdLCJzb3VyY2VSb290IjoiIn0=