"use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[877],{2335:(e,t,o)=>{o.d(t,{A:()=>w});var n=o(8587),r=o(8168),i=o(6540),a=o(1317),s=o(5659),l=o(627),d=o(1848),u=o(9770),c=o(5669),p=o(8413),m=o(1609),f=o(1175);function h(e){return(0,m.Ay)("MuiFilledInput",e)}const b=(0,r.A)({},f.A,(0,p.A)("MuiFilledInput",["root","underline","input"]));var g=o(4848);const A=["disableUnderline","components","componentsProps","fullWidth","hiddenLabel","inputComponent","multiline","slotProps","slots","type"],v=(0,d.Ay)(l.Sh,{shouldForwardProp:e=>(0,u.A)(e)||"classes"===e,name:"MuiFilledInput",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[...(0,l.WC)(e,t),!o.disableUnderline&&t.underline]}})((({theme:e,ownerState:t})=>{var o;const n="light"===e.palette.mode,i=n?"rgba(0, 0, 0, 0.42)":"rgba(255, 255, 255, 0.7)",a=n?"rgba(0, 0, 0, 0.06)":"rgba(255, 255, 255, 0.09)",s=n?"rgba(0, 0, 0, 0.09)":"rgba(255, 255, 255, 0.13)",l=n?"rgba(0, 0, 0, 0.12)":"rgba(255, 255, 255, 0.12)";return(0,r.A)({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}},[`&.${b.focused}`]:{backgroundColor:e.vars?e.vars.palette.FilledInput.bg:a},[`&.${b.disabled}`]:{backgroundColor:e.vars?e.vars.palette.FilledInput.disabledBg:l}},!t.disableUnderline&&{"&::after":{borderBottom:`2px solid ${null==(o=(e.vars||e).palette[t.color||"primary"])?void 0:o.main}`,left:0,bottom:0,content:'""',position:"absolute",right:0,transform:"scaleX(0)",transition:e.transitions.create("transform",{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),pointerEvents:"none"},[`&.${b.focused}:after`]:{transform:"scaleX(1) translateX(0)"},[`&.${b.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(.${b.disabled}, .${b.error}):before`]:{borderBottom:`1px solid ${(e.vars||e).palette.text.primary}`},[`&.${b.disabled}:before`]:{borderBottomStyle:"dotted"}},t.startAdornment&&{paddingLeft:12},t.endAdornment&&{paddingRight:12},t.multiline&&(0,r.A)({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}))})),y=(0,d.Ay)(l.f3,{name:"MuiFilledInput",slot:"Input",overridesResolver:l.Oj})((({theme:e,ownerState:t})=>(0,r.A)({paddingTop:25,paddingRight:12,paddingBottom:8,paddingLeft:12},!e.vars&&{"&:-webkit-autofill":{WebkitBoxShadow:"light"===e.palette.mode?null:"0 0 0 100px #266798 inset",WebkitTextFillColor:"light"===e.palette.mode?null:"#fff",caretColor:"light"===e.palette.mode?null:"#fff",borderTopLeftRadius:"inherit",borderTopRightRadius:"inherit"}},e.vars&&{"&:-webkit-autofill":{borderTopLeftRadius:"inherit",borderTopRightRadius:"inherit"},[e.getColorSchemeSelector("dark")]:{"&:-webkit-autofill":{WebkitBoxShadow:"0 0 0 100px #266798 inset",WebkitTextFillColor:"#fff",caretColor:"#fff"}}},"small"===t.size&&{paddingTop:21,paddingBottom:4},t.hiddenLabel&&{paddingTop:16,paddingBottom:17},t.startAdornment&&{paddingLeft:0},t.endAdornment&&{paddingRight:0},t.hiddenLabel&&"small"===t.size&&{paddingTop:8,paddingBottom:9},t.multiline&&{paddingTop:0,paddingBottom:0,paddingLeft:0,paddingRight:0}))),x=i.forwardRef((function(e,t){var o,i,d,u;const p=(0,c.b)({props:e,name:"MuiFilledInput"}),{components:m={},componentsProps:f,fullWidth:b=!1,inputComponent:x="input",multiline:w=!1,slotProps:S,slots:k={},type:C="text"}=p,R=(0,n.A)(p,A),M=(0,r.A)({},p,{fullWidth:b,inputComponent:x,multiline:w,type:C}),E=(e=>{const{classes:t,disableUnderline:o}=e,n={root:["root",!o&&"underline"],input:["input"]},i=(0,s.A)(n,h,t);return(0,r.A)({},t,i)})(p),P={root:{ownerState:M},input:{ownerState:M}},T=(null!=S?S:f)?(0,a.A)(P,null!=S?S:f):P,$=null!=(o=null!=(i=k.root)?i:m.Root)?o:v,F=null!=(d=null!=(u=k.input)?u:m.Input)?d:y;return(0,g.jsx)(l.Ay,(0,r.A)({slots:{root:$,input:F},componentsProps:T,fullWidth:b,inputComponent:x,multiline:w,ref:t,type:C},R,{classes:E}))}));x.muiName="Input";const w=x},779:(e,t,o)=>{o.d(t,{A:()=>y});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(5659),l=o(5669),d=o(1848),u=o(2891),c=o(8466),p=o(6767),m=o(3800),f=o(8413),h=o(1609);function b(e){return(0,h.Ay)("MuiFormControl",e)}(0,f.A)("MuiFormControl",["root","marginNone","marginNormal","marginDense","fullWidth","disabled"]);var g=o(4848);const A=["children","className","color","component","disabled","error","focused","fullWidth","hiddenLabel","margin","required","size","variant"],v=(0,d.Ay)("div",{name:"MuiFormControl",slot:"Root",overridesResolver:({ownerState:e},t)=>(0,r.A)({},t.root,t[`margin${(0,c.A)(e.margin)}`],e.fullWidth&&t.fullWidth)})((({ownerState:e})=>(0,r.A)({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%"}))),y=i.forwardRef((function(e,t){const o=(0,l.b)({props:e,name:"MuiFormControl"}),{children:d,className:f,color:h="primary",component:y="div",disabled:x=!1,error:w=!1,focused:S,fullWidth:k=!1,hiddenLabel:C=!1,margin:R="none",required:M=!1,size:E="medium",variant:P="outlined"}=o,T=(0,n.A)(o,A),$=(0,r.A)({},o,{color:h,component:y,disabled:x,error:w,fullWidth:k,hiddenLabel:C,margin:R,required:M,size:E,variant:P}),F=(e=>{const{classes:t,margin:o,fullWidth:n}=e,r={root:["root","none"!==o&&`margin${(0,c.A)(o)}`,n&&"fullWidth"]};return(0,s.A)(r,b,t)})($),[L,z]=i.useState((()=>{let e=!1;return d&&i.Children.forEach(d,(t=>{if(!(0,p.A)(t,["Input","Select"]))return;const o=(0,p.A)(t,["Select"])?t.props.input:t;o&&(0,u.gr)(o.props)&&(e=!0)})),e})),[I,W]=i.useState((()=>{let e=!1;return d&&i.Children.forEach(d,(t=>{(0,p.A)(t,["Input","Select"])&&((0,u.lq)(t.props,!0)||(0,u.lq)(t.props.inputProps,!0))&&(e=!0)})),e})),[N,B]=i.useState(!1);x&&N&&B(!1);const j=void 0===S||x?N:S;let O;const D=i.useMemo((()=>({adornedStart:L,setAdornedStart:z,color:h,disabled:x,error:w,filled:I,focused:j,fullWidth:k,hiddenLabel:C,size:E,onBlur:()=>{B(!1)},onEmpty:()=>{W(!1)},onFilled:()=>{W(!0)},onFocus:()=>{B(!0)},registerEffect:O,required:M,variant:P})),[L,h,x,w,I,j,k,C,O,M,E,P]);return(0,g.jsx)(m.A.Provider,{value:D,children:(0,g.jsx)(v,(0,r.A)({as:y,ownerState:$,className:(0,a.A)(F.root,f),ref:t},T,{children:d}))})}))},3800:(e,t,o)=>{o.d(t,{A:()=>n});const n=o(6540).createContext(void 0)},8086:(e,t,o)=>{function n({props:e,states:t,muiFormControl:o}){return t.reduce(((t,n)=>(t[n]=e[n],o&&void 0===e[n]&&(t[n]=o[n]),t)),{})}o.d(t,{A:()=>n})},9716:(e,t,o)=>{o.d(t,{A:()=>i});var n=o(6540),r=o(3800);function i(){return n.useContext(r.A)}},6347:(e,t,o)=>{o.d(t,{A:()=>x});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(5659),l=o(8086),d=o(9716),u=o(1848),c=o(8466),p=o(8413),m=o(1609);function f(e){return(0,m.Ay)("MuiFormHelperText",e)}const h=(0,p.A)("MuiFormHelperText",["root","error","disabled","sizeSmall","sizeMedium","contained","focused","filled","required"]);var b,g=o(5669),A=o(4848);const v=["children","className","component","disabled","error","filled","focused","margin","required","variant"],y=(0,u.Ay)("p",{name:"MuiFormHelperText",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,o.size&&t[`size${(0,c.A)(o.size)}`],o.contained&&t.contained,o.filled&&t.filled]}})((({theme:e,ownerState:t})=>(0,r.A)({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}))),x=i.forwardRef((function(e,t){const o=(0,g.b)({props:e,name:"MuiFormHelperText"}),{children:i,className:u,component:p="p"}=o,m=(0,n.A)(o,v),h=(0,d.A)(),x=(0,l.A)({props:o,muiFormControl:h,states:["variant","size","disabled","error","filled","focused","required"]}),w=(0,r.A)({},o,{component:p,contained:"filled"===x.variant||"outlined"===x.variant,variant:x.variant,size:x.size,disabled:x.disabled,error:x.error,filled:x.filled,focused:x.focused,required:x.required}),S=(e=>{const{classes:t,contained:o,size:n,disabled:r,error:i,filled:a,focused:l,required:d}=e,u={root:["root",r&&"disabled",i&&"error",n&&`size${(0,c.A)(n)}`,o&&"contained",l&&"focused",a&&"filled",d&&"required"]};return(0,s.A)(u,f,t)})(w);return(0,A.jsx)(y,(0,r.A)({as:p,ownerState:w,className:(0,a.A)(S.root,u),ref:t},m,{children:" "===i?b||(b=(0,A.jsx)("span",{className:"notranslate",children:"​"})):i}))}))},5327:(e,t,o)=>{o.d(t,{A:()=>l});var n=o(8168),r=(o(6540),o(2967)),i=o(2765),a=o(8312),s=o(4848);const l=function(e){return(0,s.jsx)(r.A,(0,n.A)({},e,{defaultTheme:i.A,themeId:a.A}))}},8239:(e,t,o)=>{o.d(t,{Ay:()=>C});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(9452),l=o(9599),d=o(5659),u=o(1848),c=o(5669),p=o(4675);const m=i.createContext();var f=o(8413),h=o(1609);function b(e){return(0,h.Ay)("MuiGrid",e)}const g=["auto",!0,1,2,3,4,5,6,7,8,9,10,11,12],A=(0,f.A)("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 v=o(4848);const y=["className","columns","columnSpacing","component","container","direction","item","rowSpacing","spacing","wrap","zeroMinWidth"];function x(e){const t=parseFloat(e);return`${t}${String(e).replace(String(t),"")||"px"}`}function w({breakpoints:e,values:t}){let o="";Object.keys(t).forEach((e=>{""===o&&0!==t[e]&&(o=e)}));const n=Object.keys(e).sort(((t,o)=>e[t]-e[o]));return n.slice(0,n.indexOf(o))}const S=(0,u.Ay)("div",{name:"MuiGrid",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e,{container:n,direction:r,item:i,spacing:a,wrap:s,zeroMinWidth:l,breakpoints:d}=o;let u=[];n&&(u=function(e,t,o={}){if(!e||e<=0)return[];if("string"==typeof e&&!Number.isNaN(Number(e))||"number"==typeof e)return[o[`spacing-xs-${String(e)}`]];const n=[];return t.forEach((t=>{const r=e[t];Number(r)>0&&n.push(o[`spacing-${t}-${String(r)}`])})),n}(a,d,t));const c=[];return d.forEach((e=>{const n=o[e];n&&c.push(t[`grid-${e}-${String(n)}`])})),[t.root,n&&t.container,i&&t.item,l&&t.zeroMinWidth,...u,"row"!==r&&t[`direction-xs-${String(r)}`],"wrap"!==s&&t[`wrap-xs-${String(s)}`],...c]}})((({ownerState:e})=>(0,r.A)({boxSizing:"border-box"},e.container&&{display:"flex",flexWrap:"wrap",width:"100%"},e.item&&{margin:0},e.zeroMinWidth&&{minWidth:0},"wrap"!==e.wrap&&{flexWrap:e.wrap})),(function({theme:e,ownerState:t}){const o=(0,s.kW)({values:t.direction,breakpoints:e.breakpoints.values});return(0,s.NI)({theme:e},o,(e=>{const t={flexDirection:e};return 0===e.indexOf("column")&&(t[`& > .${A.item}`]={maxWidth:"none"}),t}))}),(function({theme:e,ownerState:t}){const{container:o,rowSpacing:n}=t;let r={};if(o&&0!==n){const t=(0,s.kW)({values:n,breakpoints:e.breakpoints.values});let o;"object"==typeof t&&(o=w({breakpoints:e.breakpoints.values,values:t})),r=(0,s.NI)({theme:e},t,((t,n)=>{var r;const i=e.spacing(t);return"0px"!==i?{marginTop:`-${x(i)}`,[`& > .${A.item}`]:{paddingTop:x(i)}}:null!=(r=o)&&r.includes(n)?{}:{marginTop:0,[`& > .${A.item}`]:{paddingTop:0}}}))}return r}),(function({theme:e,ownerState:t}){const{container:o,columnSpacing:n}=t;let r={};if(o&&0!==n){const t=(0,s.kW)({values:n,breakpoints:e.breakpoints.values});let o;"object"==typeof t&&(o=w({breakpoints:e.breakpoints.values,values:t})),r=(0,s.NI)({theme:e},t,((t,n)=>{var r;const i=e.spacing(t);return"0px"!==i?{width:`calc(100% + ${x(i)})`,marginLeft:`-${x(i)}`,[`& > .${A.item}`]:{paddingLeft:x(i)}}:null!=(r=o)&&r.includes(n)?{}:{width:"100%",marginLeft:0,[`& > .${A.item}`]:{paddingLeft:0}}}))}return r}),(function({theme:e,ownerState:t}){let o;return e.breakpoints.keys.reduce(((n,i)=>{let a={};if(t[i]&&(o=t[i]),!o)return n;if(!0===o)a={flexBasis:0,flexGrow:1,maxWidth:"100%"};else if("auto"===o)a={flexBasis:"auto",flexGrow:0,flexShrink:0,maxWidth:"none",width:"auto"};else{const l=(0,s.kW)({values:t.columns,breakpoints:e.breakpoints.values}),d="object"==typeof l?l[i]:l;if(null==d)return n;const u=Math.round(o/d*1e8)/1e6+"%";let c={};if(t.container&&t.item&&0!==t.columnSpacing){const o=e.spacing(t.columnSpacing);if("0px"!==o){const e=`calc(${u} + ${x(o)})`;c={flexBasis:e,maxWidth:e}}}a=(0,r.A)({flexBasis:u,flexGrow:0,maxWidth:u},c)}return 0===e.breakpoints.values[i]?Object.assign(n,a):n[e.breakpoints.up(i)]=a,n}),{})})),k=i.forwardRef((function(e,t){const o=(0,c.b)({props:e,name:"MuiGrid"}),{breakpoints:s}=(0,p.A)(),u=(0,l.A)(o),{className:f,columns:h,columnSpacing:g,component:A="div",container:x=!1,direction:w="row",item:k=!1,rowSpacing:C,spacing:R=0,wrap:M="wrap",zeroMinWidth:E=!1}=u,P=(0,n.A)(u,y),T=C||R,$=g||R,F=i.useContext(m),L=x?h||12:F,z={},I=(0,r.A)({},P);s.keys.forEach((e=>{null!=P[e]&&(z[e]=P[e],delete I[e])}));const W=(0,r.A)({},u,{columns:L,container:x,direction:w,item:k,rowSpacing:T,columnSpacing:$,wrap:M,zeroMinWidth:E,spacing:R},z,{breakpoints:s.keys}),N=(e=>{const{classes:t,container:o,direction:n,item:r,spacing:i,wrap:a,zeroMinWidth:s,breakpoints:l}=e;let u=[];o&&(u=function(e,t){if(!e||e<=0)return[];if("string"==typeof e&&!Number.isNaN(Number(e))||"number"==typeof e)return[`spacing-xs-${String(e)}`];const o=[];return t.forEach((t=>{const n=e[t];if(Number(n)>0){const e=`spacing-${t}-${String(n)}`;o.push(e)}})),o}(i,l));const c=[];l.forEach((t=>{const o=e[t];o&&c.push(`grid-${t}-${String(o)}`)}));const p={root:["root",o&&"container",r&&"item",s&&"zeroMinWidth",...u,"row"!==n&&`direction-xs-${String(n)}`,"wrap"!==a&&`wrap-xs-${String(a)}`,...c]};return(0,d.A)(p,b,t)})(W);return(0,v.jsx)(m.Provider,{value:L,children:(0,v.jsx)(S,(0,r.A)({ownerState:W,className:(0,a.A)(N.root,f),as:A,ref:t},I))})})),C=k},7467:(e,t,o)=>{o.d(t,{A:()=>g});var n=o(8168),r=o(8587),i=o(6540),a=o(3068),s=o(7353),l=o(4675),d=o(5186),u=o(6852),c=o(4848);const p=["addEndListener","appear","children","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"];function m(e){return`scale(${e}, ${e**2})`}const f={entering:{opacity:1,transform:m(1)},entered:{opacity:1,transform:"none"}},h="undefined"!=typeof navigator&&/^((?!chrome|android).)*(safari|mobile)/i.test(navigator.userAgent)&&/(os |version\/)15(.|_)4/i.test(navigator.userAgent),b=i.forwardRef((function(e,t){const{addEndListener:o,appear:b=!0,children:g,easing:A,in:v,onEnter:y,onEntered:x,onEntering:w,onExit:S,onExited:k,onExiting:C,style:R,timeout:M="auto",TransitionComponent:E=s.Ay}=e,P=(0,r.A)(e,p),T=(0,a.A)(),$=i.useRef(),F=(0,l.A)(),L=i.useRef(null),z=(0,u.A)(L,g.ref,t),I=e=>t=>{if(e){const o=L.current;void 0===t?e(o):e(o,t)}},W=I(w),N=I(((e,t)=>{(0,d.q)(e);const{duration:o,delay:n,easing:r}=(0,d.c)({style:R,timeout:M,easing:A},{mode:"enter"});let i;"auto"===M?(i=F.transitions.getAutoHeightDuration(e.clientHeight),$.current=i):i=o,e.style.transition=[F.transitions.create("opacity",{duration:i,delay:n}),F.transitions.create("transform",{duration:h?i:.666*i,delay:n,easing:r})].join(","),y&&y(e,t)})),B=I(x),j=I(C),O=I((e=>{const{duration:t,delay:o,easing:n}=(0,d.c)({style:R,timeout:M,easing:A},{mode:"exit"});let r;"auto"===M?(r=F.transitions.getAutoHeightDuration(e.clientHeight),$.current=r):r=t,e.style.transition=[F.transitions.create("opacity",{duration:r,delay:o}),F.transitions.create("transform",{duration:h?r:.666*r,delay:h?o:o||.333*r,easing:n})].join(","),e.style.opacity=0,e.style.transform=m(.75),S&&S(e)})),D=I(k);return(0,c.jsx)(E,(0,n.A)({appear:b,in:v,nodeRef:L,onEnter:N,onEntered:B,onEntering:W,onExit:O,onExited:D,onExiting:j,addEndListener:e=>{"auto"===M&&T.start($.current||0,e),o&&o(L.current,e)},timeout:"auto"===M?null:M},P,{children:(e,t)=>i.cloneElement(g,(0,n.A)({style:(0,n.A)({opacity:0,transform:m(.75),visibility:"exited"!==e||v?void 0:"hidden"},f[e],R,g.props.style),ref:z},t))}))}));b.muiSupportAuto=!0;const g=b},1881:(e,t,o)=>{o.d(t,{A:()=>w});var n=o(8587),r=o(8168),i=o(6540),a=o(5659),s=o(1317),l=o(627),d=o(1848),u=o(9770),c=o(5669),p=o(8413),m=o(1609),f=o(1175);function h(e){return(0,m.Ay)("MuiInput",e)}const b=(0,r.A)({},f.A,(0,p.A)("MuiInput",["root","underline","input"]));var g=o(4848);const A=["disableUnderline","components","componentsProps","fullWidth","inputComponent","multiline","slotProps","slots","type"],v=(0,d.Ay)(l.Sh,{shouldForwardProp:e=>(0,u.A)(e)||"classes"===e,name:"MuiInput",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[...(0,l.WC)(e,t),!o.disableUnderline&&t.underline]}})((({theme:e,ownerState:t})=>{let o="light"===e.palette.mode?"rgba(0, 0, 0, 0.42)":"rgba(255, 255, 255, 0.7)";return e.vars&&(o=`rgba(${e.vars.palette.common.onBackgroundChannel} / ${e.vars.opacity.inputUnderline})`),(0,r.A)({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"},[`&.${b.focused}:after`]:{transform:"scaleX(1) translateX(0)"},[`&.${b.error}`]:{"&::before, &::after":{borderBottomColor:(e.vars||e).palette.error.main}},"&::before":{borderBottom:`1px solid ${o}`,left:0,bottom:0,content:'"\\00a0"',position:"absolute",right:0,transition:e.transitions.create("border-bottom-color",{duration:e.transitions.duration.shorter}),pointerEvents:"none"},[`&:hover:not(.${b.disabled}, .${b.error}):before`]:{borderBottom:`2px solid ${(e.vars||e).palette.text.primary}`,"@media (hover: none)":{borderBottom:`1px solid ${o}`}},[`&.${b.disabled}:before`]:{borderBottomStyle:"dotted"}})})),y=(0,d.Ay)(l.f3,{name:"MuiInput",slot:"Input",overridesResolver:l.Oj})({}),x=i.forwardRef((function(e,t){var o,i,d,u;const p=(0,c.b)({props:e,name:"MuiInput"}),{disableUnderline:m,components:f={},componentsProps:b,fullWidth:x=!1,inputComponent:w="input",multiline:S=!1,slotProps:k,slots:C={},type:R="text"}=p,M=(0,n.A)(p,A),E=(e=>{const{classes:t,disableUnderline:o}=e,n={root:["root",!o&&"underline"],input:["input"]},i=(0,a.A)(n,h,t);return(0,r.A)({},t,i)})(p),P={root:{ownerState:{disableUnderline:m}}},T=(null!=k?k:b)?(0,s.A)(null!=k?k:b,P):P,$=null!=(o=null!=(i=C.root)?i:f.Root)?o:v,F=null!=(d=null!=(u=C.input)?u:f.Input)?d:y;return(0,g.jsx)(l.Ay,(0,r.A)({slots:{root:$,input:F},slotProps:T,fullWidth:x,inputComponent:w,multiline:S,ref:t,type:R},M,{classes:E}))}));x.muiName="Input";const w=x},627:(e,t,o)=>{o.d(t,{Ay:()=>P,Oj:()=>C,Sh:()=>R,WC:()=>k,f3:()=>M});var n=o(8587),r=o(8168),i=o(9453),a=o(6540),s=o(4164),l=o(5659),d=o(2197),u=o(3561),c=o(8086),p=o(3800),m=o(9716),f=o(1848),h=o(5669),b=o(8466),g=o(6852),A=o(2778),v=o(5327),y=o(2891),x=o(1175),w=o(4848);const S=["aria-describedby","autoComplete","autoFocus","className","color","components","componentsProps","defaultValue","disabled","disableInjectingGlobalStyles","endAdornment","error","fullWidth","id","inputComponent","inputProps","inputRef","margin","maxRows","minRows","multiline","name","onBlur","onChange","onClick","onFocus","onKeyDown","onKeyUp","placeholder","readOnly","renderSuffix","rows","size","slotProps","slots","startAdornment","type","value"],k=(e,t)=>{const{ownerState:o}=e;return[t.root,o.formControl&&t.formControl,o.startAdornment&&t.adornedStart,o.endAdornment&&t.adornedEnd,o.error&&t.error,"small"===o.size&&t.sizeSmall,o.multiline&&t.multiline,o.color&&t[`color${(0,b.A)(o.color)}`],o.fullWidth&&t.fullWidth,o.hiddenLabel&&t.hiddenLabel]},C=(e,t)=>{const{ownerState:o}=e;return[t.input,"small"===o.size&&t.inputSizeSmall,o.multiline&&t.inputMultiline,"search"===o.type&&t.inputTypeSearch,o.startAdornment&&t.inputAdornedStart,o.endAdornment&&t.inputAdornedEnd,o.hiddenLabel&&t.inputHiddenLabel]},R=(0,f.Ay)("div",{name:"MuiInputBase",slot:"Root",overridesResolver:k})((({theme:e,ownerState:t})=>(0,r.A)({},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",[`&.${x.A.disabled}`]:{color:(e.vars||e).palette.text.disabled,cursor:"default"}},t.multiline&&(0,r.A)({padding:"4px 0 5px"},"small"===t.size&&{paddingTop:1}),t.fullWidth&&{width:"100%"}))),M=(0,f.Ay)("input",{name:"MuiInputBase",slot:"Input",overridesResolver:C})((({theme:e,ownerState:t})=>{const o="light"===e.palette.mode,n=(0,r.A)({color:"currentColor"},e.vars?{opacity:e.vars.opacity.inputPlaceholder}:{opacity:o?.42:.5},{transition:e.transitions.create("opacity",{duration:e.transitions.duration.shorter})}),i={opacity:"0 !important"},a=e.vars?{opacity:e.vars.opacity.inputPlaceholder}:{opacity:o?.42:.5};return(0,r.A)({font:"inherit",letterSpacing:"inherit",color:"currentColor",padding:"4px 0 5px",border:0,boxSizing:"content-box",background:"none",height:"1.4375em",margin:0,WebkitTapHighlightColor:"transparent",display:"block",minWidth:0,width:"100%",animationName:"mui-auto-fill-cancel",animationDuration:"10ms","&::-webkit-input-placeholder":n,"&::-moz-placeholder":n,"&:-ms-input-placeholder":n,"&::-ms-input-placeholder":n,"&:focus":{outline:0},"&:invalid":{boxShadow:"none"},"&::-webkit-search-decoration":{WebkitAppearance:"none"},[`label[data-shrink=false] + .${x.A.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},[`&.${x.A.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"})})),E=(0,w.jsx)(v.A,{styles:{"@keyframes mui-auto-fill":{from:{display:"block"}},"@keyframes mui-auto-fill-cancel":{from:{display:"block"}}}}),P=a.forwardRef((function(e,t){var o;const f=(0,h.b)({props:e,name:"MuiInputBase"}),{"aria-describedby":v,autoComplete:k,autoFocus:C,className:P,components:T={},componentsProps:$={},defaultValue:F,disabled:L,disableInjectingGlobalStyles:z,endAdornment:I,fullWidth:W=!1,id:N,inputComponent:B="input",inputProps:j={},inputRef:O,maxRows:D,minRows:q,multiline:H=!1,name:K,onBlur:U,onChange:G,onClick:V,onFocus:X,onKeyDown:Y,onKeyUp:_,placeholder:J,readOnly:Q,renderSuffix:Z,rows:ee,slotProps:te={},slots:oe={},startAdornment:ne,type:re="text",value:ie}=f,ae=(0,n.A)(f,S),se=null!=j.value?j.value:ie,{current:le}=a.useRef(null!=se),de=a.useRef(),ue=a.useCallback((e=>{}),[]),ce=(0,g.A)(de,O,j.ref,ue),[pe,me]=a.useState(!1),fe=(0,m.A)(),he=(0,c.A)({props:f,muiFormControl:fe,states:["color","disabled","error","hiddenLabel","size","required","filled"]});he.focused=fe?fe.focused:pe,a.useEffect((()=>{!fe&&L&&pe&&(me(!1),U&&U())}),[fe,L,pe,U]);const be=fe&&fe.onFilled,ge=fe&&fe.onEmpty,Ae=a.useCallback((e=>{(0,y.lq)(e)?be&&be():ge&&ge()}),[be,ge]);(0,A.A)((()=>{le&&Ae({value:se})}),[se,Ae,le]),a.useEffect((()=>{Ae(de.current)}),[]);let ve=B,ye=j;H&&"input"===ve&&(ye=ee?(0,r.A)({type:void 0,minRows:ee,maxRows:ee},ye):(0,r.A)({type:void 0,maxRows:D,minRows:q},ye),ve=u.A),a.useEffect((()=>{fe&&fe.setAdornedStart(Boolean(ne))}),[fe,ne]);const xe=(0,r.A)({},f,{color:he.color||"primary",disabled:he.disabled,endAdornment:I,error:he.error,focused:he.focused,formControl:fe,fullWidth:W,hiddenLabel:he.hiddenLabel,multiline:H,size:he.size,startAdornment:ne,type:re}),we=(e=>{const{classes:t,color:o,disabled:n,error:r,endAdornment:i,focused:a,formControl:s,fullWidth:d,hiddenLabel:u,multiline:c,readOnly:p,size:m,startAdornment:f,type:h}=e,g={root:["root",`color${(0,b.A)(o)}`,n&&"disabled",r&&"error",d&&"fullWidth",a&&"focused",s&&"formControl",m&&"medium"!==m&&`size${(0,b.A)(m)}`,c&&"multiline",f&&"adornedStart",i&&"adornedEnd",u&&"hiddenLabel",p&&"readOnly"],input:["input",n&&"disabled","search"===h&&"inputTypeSearch",c&&"inputMultiline","small"===m&&"inputSizeSmall",u&&"inputHiddenLabel",f&&"inputAdornedStart",i&&"inputAdornedEnd",p&&"readOnly"]};return(0,l.A)(g,x.g,t)})(xe),Se=oe.root||T.Root||R,ke=te.root||$.root||{},Ce=oe.input||T.Input||M;return ye=(0,r.A)({},ye,null!=(o=te.input)?o:$.input),(0,w.jsxs)(a.Fragment,{children:[!z&&E,(0,w.jsxs)(Se,(0,r.A)({},ke,!(0,d.A)(Se)&&{ownerState:(0,r.A)({},xe,ke.ownerState)},{ref:t,onClick:e=>{de.current&&e.currentTarget===e.target&&de.current.focus(),V&&V(e)}},ae,{className:(0,s.A)(we.root,ke.className,P,Q&&"MuiInputBase-readOnly"),children:[ne,(0,w.jsx)(p.A.Provider,{value:null,children:(0,w.jsx)(Ce,(0,r.A)({ownerState:xe,"aria-invalid":he.error,"aria-describedby":v,autoComplete:k,autoFocus:C,defaultValue:F,disabled:he.disabled,id:N,onAnimationStart:e=>{Ae("mui-auto-fill-cancel"===e.animationName?de.current:{value:"x"})},name:K,placeholder:J,readOnly:Q,required:he.required,rows:ee,value:se,onKeyDown:Y,onKeyUp:_,type:re},ye,!(0,d.A)(Ce)&&{as:ve,ownerState:(0,r.A)({},xe,ye.ownerState)},{ref:ce,className:(0,s.A)(we.input,ye.className,Q&&"MuiInputBase-readOnly"),onBlur:e=>{U&&U(e),j.onBlur&&j.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.A)(1));Ae({value:t.value})}j.onChange&&j.onChange(e,...t),G&&G(e,...t)},onFocus:e=>{he.disabled?e.stopPropagation():(X&&X(e),j.onFocus&&j.onFocus(e),fe&&fe.onFocus?fe.onFocus(e):me(!0))}}))}),I,Z?Z((0,r.A)({},he,{startAdornment:ne})):null]}))]})}))},1175:(e,t,o)=>{o.d(t,{A:()=>a,g:()=>i});var n=o(8413),r=o(1609);function i(e){return(0,r.Ay)("MuiInputBase",e)}const a=(0,n.A)("MuiInputBase",["root","formControl","focused","disabled","adornedStart","adornedEnd","error","sizeSmall","multiline","colorSecondary","fullWidth","hiddenLabel","readOnly","input","inputSizeSmall","inputMultiline","inputTypeSearch","inputAdornedStart","inputAdornedEnd","inputHiddenLabel"])},2891:(e,t,o)=>{function n(e){return null!=e&&!(Array.isArray(e)&&0===e.length)}function r(e,t=!1){return e&&(n(e.value)&&""!==e.value||t&&n(e.defaultValue)&&""!==e.defaultValue)}function i(e){return e.startAdornment}o.d(t,{gr:()=>i,lq:()=>r})},4433:(e,t,o)=>{o.d(t,{A:()=>R});var n=o(8587),r=o(8168),i=o(6540),a=o(5659),s=o(4164),l=o(8086),d=o(9716),u=o(8466),c=o(5669),p=o(1848),m=o(8413),f=o(1609);function h(e){return(0,f.Ay)("MuiFormLabel",e)}const b=(0,m.A)("MuiFormLabel",["root","colorSecondary","focused","disabled","error","filled","required","asterisk"]);var g=o(4848);const A=["children","className","color","component","disabled","error","filled","focused","required"],v=(0,p.Ay)("label",{name:"MuiFormLabel",slot:"Root",overridesResolver:({ownerState:e},t)=>(0,r.A)({},t.root,"secondary"===e.color&&t.colorSecondary,e.filled&&t.filled)})((({theme:e,ownerState:t})=>(0,r.A)({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}}))),y=(0,p.Ay)("span",{name:"MuiFormLabel",slot:"Asterisk",overridesResolver:(e,t)=>t.asterisk})((({theme:e})=>({[`&.${b.error}`]:{color:(e.vars||e).palette.error.main}}))),x=i.forwardRef((function(e,t){const o=(0,c.b)({props:e,name:"MuiFormLabel"}),{children:i,className:p,component:m="label"}=o,f=(0,n.A)(o,A),b=(0,d.A)(),x=(0,l.A)({props:o,muiFormControl:b,states:["color","required","focused","disabled","error","filled"]}),w=(0,r.A)({},o,{color:x.color||"primary",component:m,disabled:x.disabled,error:x.error,filled:x.filled,focused:x.focused,required:x.required}),S=(e=>{const{classes:t,color:o,focused:n,disabled:r,error:i,filled:s,required:l}=e,d={root:["root",`color${(0,u.A)(o)}`,r&&"disabled",i&&"error",s&&"filled",n&&"focused",l&&"required"],asterisk:["asterisk",i&&"error"]};return(0,a.A)(d,h,t)})(w);return(0,g.jsxs)(v,(0,r.A)({as:m,ownerState:w,className:(0,s.A)(S.root,p),ref:t},f,{children:[i,x.required&&(0,g.jsxs)(y,{ownerState:w,"aria-hidden":!0,className:S.asterisk,children:[" ","*"]})]}))}));var w=o(9770);function S(e){return(0,f.Ay)("MuiInputLabel",e)}(0,m.A)("MuiInputLabel",["root","focused","disabled","error","required","asterisk","formControl","sizeSmall","shrink","animated","standard","filled","outlined"]);const k=["disableAnimation","margin","shrink","variant","className"],C=(0,p.Ay)(x,{shouldForwardProp:e=>(0,w.A)(e)||"classes"===e,name:"MuiInputLabel",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[{[`& .${b.asterisk}`]:t.asterisk},t.root,o.formControl&&t.formControl,"small"===o.size&&t.sizeSmall,o.shrink&&t.shrink,!o.disableAnimation&&t.animated,o.focused&&t.focused,t[o.variant]]}})((({theme:e,ownerState:t})=>(0,r.A)({display:"block",transformOrigin:"top left",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%"},t.formControl&&{position:"absolute",left:0,top:0,transform:"translate(0, 20px) scale(1)"},"small"===t.size&&{transform:"translate(0, 17px) scale(1)"},t.shrink&&{transform:"translate(0, -1.5px) scale(0.75)",transformOrigin:"top left",maxWidth:"133%"},!t.disableAnimation&&{transition:e.transitions.create(["color","transform","max-width"],{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut})},"filled"===t.variant&&(0,r.A)({zIndex:1,pointerEvents:"none",transform:"translate(12px, 16px) scale(1)",maxWidth:"calc(100% - 24px)"},"small"===t.size&&{transform:"translate(12px, 13px) scale(1)"},t.shrink&&(0,r.A)({userSelect:"none",pointerEvents:"auto",transform:"translate(12px, 7px) scale(0.75)",maxWidth:"calc(133% - 24px)"},"small"===t.size&&{transform:"translate(12px, 4px) scale(0.75)"})),"outlined"===t.variant&&(0,r.A)({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)"})))),R=i.forwardRef((function(e,t){const o=(0,c.b)({name:"MuiInputLabel",props:e}),{disableAnimation:i=!1,shrink:p,className:m}=o,f=(0,n.A)(o,k),h=(0,d.A)();let b=p;void 0===b&&h&&(b=h.filled||h.focused||h.adornedStart);const A=(0,l.A)({props:o,muiFormControl:h,states:["size","variant","required","focused"]}),v=(0,r.A)({},o,{disableAnimation:i,formControl:h,shrink:b,size:A.size,variant:A.variant,required:A.required,focused:A.focused}),y=(e=>{const{classes:t,formControl:o,size:n,shrink:i,disableAnimation:s,variant:l,required:d}=e,c={root:["root",o&&"formControl",!s&&"animated",i&&"shrink",n&&"normal"!==n&&`size${(0,u.A)(n)}`,l],asterisk:[d&&"asterisk"]},p=(0,a.A)(c,S,t);return(0,r.A)({},t,p)})(v);return(0,g.jsx)(C,(0,r.A)({"data-shrink":b,ownerState:v,ref:t,className:(0,s.A)(y.root,m)},f,{classes:y}))}))},5734:(e,t,o)=>{o.d(t,{A:()=>O});var n=o(8168),r=o(8587),i=o(6540),a=(o(4363),o(4164)),s=o(5659),l=o(3788),d=o(7231),u=o(6248),c=o(1848),p=o(5669);const m=i.createContext({});var f=o(8413),h=o(1609);function b(e){return(0,h.Ay)("MuiList",e)}(0,f.A)("MuiList",["root","padding","dense","subheader"]);var g=o(4848);const A=["children","className","component","dense","disablePadding","subheader"],v=(0,c.Ay)("ul",{name:"MuiList",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,!o.disablePadding&&t.padding,o.dense&&t.dense,o.subheader&&t.subheader]}})((({ownerState:e})=>(0,n.A)({listStyle:"none",margin:0,padding:0,position:"relative"},!e.disablePadding&&{paddingTop:8,paddingBottom:8},e.subheader&&{paddingTop:0}))),y=i.forwardRef((function(e,t){const o=(0,p.b)({props:e,name:"MuiList"}),{children:l,className:d,component:u="ul",dense:c=!1,disablePadding:f=!1,subheader:h}=o,y=(0,r.A)(o,A),x=i.useMemo((()=>({dense:c})),[c]),w=(0,n.A)({},o,{component:u,dense:c,disablePadding:f}),S=(e=>{const{classes:t,disablePadding:o,dense:n,subheader:r}=e,i={root:["root",!o&&"padding",n&&"dense",r&&"subheader"]};return(0,s.A)(i,b,t)})(w);return(0,g.jsx)(m.Provider,{value:x,children:(0,g.jsxs)(v,(0,n.A)({as:u,className:(0,a.A)(S.root,d),ref:t,ownerState:w},y,{children:[h,l]}))})}));var x=o(7167),w=o(6852),S=o(2778);const k=["actions","autoFocus","autoFocusItem","children","className","disabledItemsFocusable","disableListWrap","onKeyDown","variant"];function C(e,t,o){return e===t?e.firstChild:t&&t.nextElementSibling?t.nextElementSibling:o?null:e.firstChild}function R(e,t,o){return e===t?o?e.firstChild:e.lastChild:t&&t.previousElementSibling?t.previousElementSibling:o?null:e.lastChild}function M(e,t){if(void 0===t)return!0;let o=e.innerText;return void 0===o&&(o=e.textContent),o=o.trim().toLowerCase(),0!==o.length&&(t.repeating?o[0]===t.keys[0]:0===o.indexOf(t.keys.join("")))}function E(e,t,o,n,r,i){let a=!1,s=r(e,t,!!t&&o);for(;s;){if(s===e.firstChild){if(a)return!1;a=!0}const t=!n&&(s.disabled||"true"===s.getAttribute("aria-disabled"));if(s.hasAttribute("tabindex")&&M(s,i)&&!t)return s.focus(),!0;s=r(e,s,o)}return!1}const P=i.forwardRef((function(e,t){const{actions:o,autoFocus:a=!1,autoFocusItem:s=!1,children:l,className:d,disabledItemsFocusable:c=!1,disableListWrap:p=!1,onKeyDown:m,variant:f="selectedMenu"}=e,h=(0,r.A)(e,k),b=i.useRef(null),A=i.useRef({keys:[],repeating:!0,previousKeyMatched:!0,lastTime:null});(0,S.A)((()=>{a&&b.current.focus()}),[a]),i.useImperativeHandle(o,(()=>({adjustStyleForScrollbar:(e,{direction:t})=>{const o=!b.current.style.width;if(e.clientHeight{i.isValidElement(e)?(e.props.disabled||("selectedMenu"===f&&e.props.selected||-1===P)&&(P=t),P===t&&(e.props.disabled||e.props.muiSkipListHighlight||e.type.muiSkipListHighlight)&&(P+=1,P>=l.length&&(P=-1))):P===t&&(P+=1,P>=l.length&&(P=-1))}));const T=i.Children.map(l,((e,t)=>{if(t===P){const t={};return s&&(t.autoFocus=!0),void 0===e.props.tabIndex&&"selectedMenu"===f&&(t.tabIndex=0),i.cloneElement(e,t)}return e}));return(0,g.jsx)(y,(0,n.A)({role:"menu",ref:v,className:d,onKeyDown:e=>{const t=b.current,o=e.key,n=(0,u.A)(t).activeElement;if("ArrowDown"===o)e.preventDefault(),E(t,n,p,c,C);else if("ArrowUp"===o)e.preventDefault(),E(t,n,p,c,R);else if("Home"===o)e.preventDefault(),E(t,null,p,c,C);else if("End"===o)e.preventDefault(),E(t,null,p,c,R);else if(1===o.length){const r=A.current,i=o.toLowerCase(),a=performance.now();r.keys.length>0&&(a-r.lastTime>500?(r.keys=[],r.repeating=!0,r.previousKeyMatched=!0):r.repeating&&i!==r.keys[0]&&(r.repeating=!1)),r.lastTime=a,r.keys.push(i);const s=n&&!r.repeating&&M(n,r);r.previousKeyMatched&&(s||E(t,n,!1,c,C,r))?e.preventDefault():r.previousKeyMatched=!1}m&&m(e)},tabIndex:a?0:-1},h,{children:T}))}));var T=o(5406),$=o(9770);function F(e){return(0,h.Ay)("MuiMenu",e)}(0,f.A)("MuiMenu",["root","paper","list"]);const L=["onEntering"],z=["autoFocus","children","className","disableAutoFocusItem","MenuListProps","onClose","open","PaperProps","PopoverClasses","transitionDuration","TransitionProps","variant","slots","slotProps"],I={vertical:"top",horizontal:"right"},W={vertical:"top",horizontal:"left"},N=(0,c.Ay)(T.Ay,{shouldForwardProp:e=>(0,$.A)(e)||"classes"===e,name:"MuiMenu",slot:"Root",overridesResolver:(e,t)=>t.root})({}),B=(0,c.Ay)(T.IJ,{name:"MuiMenu",slot:"Paper",overridesResolver:(e,t)=>t.paper})({maxHeight:"calc(100% - 96px)",WebkitOverflowScrolling:"touch"}),j=(0,c.Ay)(P,{name:"MuiMenu",slot:"List",overridesResolver:(e,t)=>t.list})({outline:0}),O=i.forwardRef((function(e,t){var o,u;const c=(0,p.b)({props:e,name:"MuiMenu"}),{autoFocus:m=!0,children:f,className:h,disableAutoFocusItem:b=!1,MenuListProps:A={},onClose:v,open:y,PaperProps:x={},PopoverClasses:w,transitionDuration:S="auto",TransitionProps:{onEntering:k}={},variant:C="selectedMenu",slots:R={},slotProps:M={}}=c,E=(0,r.A)(c.TransitionProps,L),P=(0,r.A)(c,z),T=(0,l.I)(),$=(0,n.A)({},c,{autoFocus:m,disableAutoFocusItem:b,MenuListProps:A,onEntering:k,PaperProps:x,transitionDuration:S,TransitionProps:E,variant:C}),O=(e=>{const{classes:t}=e;return(0,s.A)({root:["root"],paper:["paper"],list:["list"]},F,t)})($),D=m&&!b&&y,q=i.useRef(null);let H=-1;i.Children.map(f,((e,t)=>{i.isValidElement(e)&&(e.props.disabled||("selectedMenu"===C&&e.props.selected||-1===H)&&(H=t))}));const K=null!=(o=R.paper)?o:B,U=null!=(u=M.paper)?u:x,G=(0,d.A)({elementType:R.root,externalSlotProps:M.root,ownerState:$,className:[O.root,h]}),V=(0,d.A)({elementType:K,externalSlotProps:U,ownerState:$,className:O.paper});return(0,g.jsx)(N,(0,n.A)({onClose:v,anchorOrigin:{vertical:"bottom",horizontal:T?"right":"left"},transformOrigin:T?I:W,slots:{paper:K,root:R.root},slotProps:{root:G,paper:V},open:y,ref:t,transitionDuration:S,TransitionProps:(0,n.A)({onEntering:(e,t)=>{q.current&&q.current.adjustStyleForScrollbar(e,{direction:T?"rtl":"ltr"}),k&&k(e,t)}},E),ownerState:$},P,{classes:w,children:(0,g.jsx)(j,(0,n.A)({onKeyDown:e=>{"Tab"===e.key&&(e.preventDefault(),v&&v(e,"tabKeyDown"))},actions:q,autoFocus:m&&(-1===H||b),autoFocusItem:D,variant:C},A,{className:(0,a.A)(O.list,A.className),children:f}))}))}))},3025:(e,t,o)=>{o.d(t,{A:()=>L});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(5659),l=o(7231),d=o(3524),u=o(5061),c=o(1848),p=o(5669),m=o(7419),f=o(1523),h=o(2325),b=o(1547),g=o(6673),A=o(4959),v=o(4877),y=o(3205);function x(e,t){t?e.setAttribute("aria-hidden","true"):e.removeAttribute("aria-hidden")}function w(e){return parseInt((0,v.A)(e).getComputedStyle(e).paddingRight,10)||0}function S(e,t,o,n,r){const i=[t,o,...n];[].forEach.call(e.children,(e=>{const t=-1===i.indexOf(e),o=!function(e){const t=-1!==["TEMPLATE","SCRIPT","STYLE","LINK","MAP","META","NOSCRIPT","PICTURE","COL","COLGROUP","PARAM","SLOT","SOURCE","TRACK"].indexOf(e.tagName),o="INPUT"===e.tagName&&"hidden"===e.getAttribute("type");return t||o}(e);t&&o&&x(e,r)}))}function k(e,t){let o=-1;return e.some(((e,n)=>!!t(e)&&(o=n,!0))),o}const C=new class{constructor(){this.containers=void 0,this.modals=void 0,this.modals=[],this.containers=[]}add(e,t){let o=this.modals.indexOf(e);if(-1!==o)return o;o=this.modals.length,this.modals.push(e),e.modalRef&&x(e.modalRef,!1);const n=function(e){const t=[];return[].forEach.call(e.children,(e=>{"true"===e.getAttribute("aria-hidden")&&t.push(e)})),t}(t);S(t,e.mount,e.modalRef,n,!0);const r=k(this.containers,(e=>e.container===t));return-1!==r?(this.containers[r].modals.push(e),o):(this.containers.push({modals:[e],container:t,restore:null,hiddenSiblings:n}),o)}mount(e,t){const o=k(this.containers,(t=>-1!==t.modals.indexOf(e))),n=this.containers[o];n.restore||(n.restore=function(e,t){const o=[],n=e.container;if(!t.disableScrollLock){if(function(e){const t=(0,h.A)(e);return t.body===e?(0,v.A)(e).innerWidth>t.documentElement.clientWidth:e.scrollHeight>e.clientHeight}(n)){const e=(0,y.A)((0,h.A)(n));o.push({value:n.style.paddingRight,property:"padding-right",el:n}),n.style.paddingRight=`${w(n)+e}px`;const t=(0,h.A)(n).querySelectorAll(".mui-fixed");[].forEach.call(t,(t=>{o.push({value:t.style.paddingRight,property:"padding-right",el:t}),t.style.paddingRight=`${w(t)+e}px`}))}let e;if(n.parentNode instanceof DocumentFragment)e=(0,h.A)(n).body;else{const t=n.parentElement,o=(0,v.A)(n);e="HTML"===(null==t?void 0:t.nodeName)&&"scroll"===o.getComputedStyle(t).overflowY?t:n}o.push({value:e.style.overflow,property:"overflow",el:e},{value:e.style.overflowX,property:"overflow-x",el:e},{value:e.style.overflowY,property:"overflow-y",el:e}),e.style.overflow="hidden"}return()=>{o.forEach((({value:e,el:t,property:o})=>{e?t.style.setProperty(o,e):t.style.removeProperty(o)}))}}(n,t))}remove(e,t=!0){const o=this.modals.indexOf(e);if(-1===o)return o;const n=k(this.containers,(t=>-1!==t.modals.indexOf(e))),r=this.containers[n];if(r.modals.splice(r.modals.indexOf(e),1),this.modals.splice(o,1),0===r.modals.length)r.restore&&r.restore(),e.modalRef&&x(e.modalRef,t),S(r.container,e.mount,e.modalRef,r.hiddenSiblings,!1),this.containers.splice(n,1);else{const e=r.modals[r.modals.length-1];e.modalRef&&x(e.modalRef,!1)}return o}isTopModal(e){return this.modals.length>0&&this.modals[this.modals.length-1]===e}};var R=o(8413),M=o(1609);function E(e){return(0,M.Ay)("MuiModal",e)}(0,R.A)("MuiModal",["root","hidden","backdrop"]);var P=o(4848);const T=["BackdropComponent","BackdropProps","classes","className","closeAfterTransition","children","container","component","components","componentsProps","disableAutoFocus","disableEnforceFocus","disableEscapeKeyDown","disablePortal","disableRestoreFocus","disableScrollLock","hideBackdrop","keepMounted","onBackdropClick","onClose","onTransitionEnter","onTransitionExited","open","slotProps","slots","theme"],$=(0,c.Ay)("div",{name:"MuiModal",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,!o.open&&o.exited&&t.hidden]}})((({theme:e,ownerState:t})=>(0,r.A)({position:"fixed",zIndex:(e.vars||e).zIndex.modal,right:0,bottom:0,top:0,left:0},!t.open&&t.exited&&{visibility:"hidden"}))),F=(0,c.Ay)(m.A,{name:"MuiModal",slot:"Backdrop",overridesResolver:(e,t)=>t.backdrop})({zIndex:-1}),L=i.forwardRef((function(e,t){var o,c,m,v,y,w;const S=(0,p.b)({name:"MuiModal",props:e}),{BackdropComponent:k=F,BackdropProps:R,className:M,closeAfterTransition:L=!1,children:z,container:I,component:W,components:N={},componentsProps:B={},disableAutoFocus:j=!1,disableEnforceFocus:O=!1,disableEscapeKeyDown:D=!1,disablePortal:q=!1,disableRestoreFocus:H=!1,disableScrollLock:K=!1,hideBackdrop:U=!1,keepMounted:G=!1,onBackdropClick:V,open:X,slotProps:Y,slots:_}=S,J=(0,n.A)(S,T),Q=(0,r.A)({},S,{closeAfterTransition:L,disableAutoFocus:j,disableEnforceFocus:O,disableEscapeKeyDown:D,disablePortal:q,disableRestoreFocus:H,disableScrollLock:K,hideBackdrop:U,keepMounted:G}),{getRootProps:Z,getBackdropProps:ee,getTransitionProps:te,portalRef:oe,isTopModal:ne,exited:re,hasTransition:ie}=function(e){const{container:t,disableEscapeKeyDown:o=!1,disableScrollLock:n=!1,manager:a=C,closeAfterTransition:s=!1,onTransitionEnter:l,onTransitionExited:d,children:u,onClose:c,open:p,rootRef:m}=e,v=i.useRef({}),y=i.useRef(null),w=i.useRef(null),S=(0,f.A)(w,m),[k,R]=i.useState(!p),M=function(e){return!!e&&e.props.hasOwnProperty("in")}(u);let E=!0;"false"!==e["aria-hidden"]&&!1!==e["aria-hidden"]||(E=!1);const P=()=>(v.current.modalRef=w.current,v.current.mount=y.current,v.current),T=()=>{a.mount(P(),{disableScrollLock:n}),w.current&&(w.current.scrollTop=0)},$=(0,b.A)((()=>{const e=function(e){return"function"==typeof e?e():e}(t)||(0,h.A)(y.current).body;a.add(P(),e),w.current&&T()})),F=i.useCallback((()=>a.isTopModal(P())),[a]),L=(0,b.A)((e=>{y.current=e,e&&(p&&F()?T():w.current&&x(w.current,E))})),z=i.useCallback((()=>{a.remove(P(),E)}),[E,a]);i.useEffect((()=>()=>{z()}),[z]),i.useEffect((()=>{p?$():M&&s||z()}),[p,z,M,s,$]);const I=e=>t=>{var n;null==(n=e.onKeyDown)||n.call(e,t),"Escape"===t.key&&229!==t.which&&F()&&(o||(t.stopPropagation(),c&&c(t,"escapeKeyDown")))},W=e=>t=>{var o;null==(o=e.onClick)||o.call(e,t),t.target===t.currentTarget&&c&&c(t,"backdropClick")};return{getRootProps:(t={})=>{const o=(0,A.A)(e);delete o.onTransitionEnter,delete o.onTransitionExited;const n=(0,r.A)({},o,t);return(0,r.A)({role:"presentation"},n,{onKeyDown:I(n),ref:S})},getBackdropProps:(e={})=>{const t=e;return(0,r.A)({"aria-hidden":!0},t,{onClick:W(t),open:p})},getTransitionProps:()=>({onEnter:(0,g.A)((()=>{R(!1),l&&l()}),null==u?void 0:u.props.onEnter),onExited:(0,g.A)((()=>{R(!0),d&&d(),s&&z()}),null==u?void 0:u.props.onExited)}),rootRef:S,portalRef:L,isTopModal:F,exited:k,hasTransition:M}}((0,r.A)({},Q,{rootRef:t})),ae=(0,r.A)({},Q,{exited:re}),se=(e=>{const{open:t,exited:o,classes:n}=e,r={root:["root",!t&&o&&"hidden"],backdrop:["backdrop"]};return(0,s.A)(r,E,n)})(ae),le={};if(void 0===z.props.tabIndex&&(le.tabIndex="-1"),ie){const{onEnter:e,onExited:t}=te();le.onEnter=e,le.onExited=t}const de=null!=(o=null!=(c=null==_?void 0:_.root)?c:N.Root)?o:$,ue=null!=(m=null!=(v=null==_?void 0:_.backdrop)?v:N.Backdrop)?m:k,ce=null!=(y=null==Y?void 0:Y.root)?y:B.root,pe=null!=(w=null==Y?void 0:Y.backdrop)?w:B.backdrop,me=(0,l.A)({elementType:de,externalSlotProps:ce,externalForwardedProps:J,getSlotProps:Z,additionalProps:{ref:t,as:W},ownerState:ae,className:(0,a.A)(M,null==ce?void 0:ce.className,null==se?void 0:se.root,!ae.open&&ae.exited&&(null==se?void 0:se.hidden))}),fe=(0,l.A)({elementType:ue,externalSlotProps:pe,additionalProps:R,getSlotProps:e=>ee((0,r.A)({},e,{onClick:t=>{V&&V(t),null!=e&&e.onClick&&e.onClick(t)}})),className:(0,a.A)(null==pe?void 0:pe.className,null==R?void 0:R.className,null==se?void 0:se.backdrop),ownerState:ae});return G||X||ie&&!re?(0,P.jsx)(u.A,{ref:oe,container:I,disablePortal:q,children:(0,P.jsxs)(de,(0,r.A)({},me,{children:[!U&&k?(0,P.jsx)(ue,(0,r.A)({},fe)):null,(0,P.jsx)(d.A,{disableEnforceFocus:O,disableAutoFocus:j,disableRestoreFocus:H,isEnabled:ne,open:X,children:i.cloneElement(z,le)})]}))}):null}))}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODc3LjRkMDEwM2U5LmpzIiwibWFwcGluZ3MiOiJ1UEFJTyxTQUFTQSxFQUEyQkMsR0FDekMsT0FBTyxFQUFBQyxFQUFBLElBQXFCLGlCQUFrQkQsRUFDaEQsQ0FDQSxNQUNBLEdBRDJCLE9BQVMsQ0FBQyxFQUFHRSxFQUFBLEdBQWtCLEVBQUFDLEVBQUEsR0FBdUIsaUJBQWtCLENBQUMsT0FBUSxZQUFhLFcsY0NIekgsTUFBTUMsRUFBWSxDQUFDLG1CQUFvQixhQUFjLGtCQUFtQixZQUFhLGNBQWUsaUJBQWtCLFlBQWEsWUFBYSxRQUFTLFFBd0JuSkMsR0FBa0IsRUFBQUMsRUFBQSxJQUFPQyxFQUFBLEdBQWUsQ0FDNUNDLGtCQUFtQkMsSUFBUSxFQUFBQyxFQUFBLEdBQXNCRCxJQUFrQixZQUFUQSxFQUMxREUsS0FBTSxpQkFDTlgsS0FBTSxPQUNOWSxrQkFBbUIsQ0FBQ0MsRUFBT0MsS0FDekIsTUFBTSxXQUNKQyxHQUNFRixFQUNKLE1BQU8sS0FBSSxRQUErQkEsRUFBT0MsSUFBVUMsRUFBV0Msa0JBQW9CRixFQUFPRyxVQUFVLEdBUnZGLEVBVXJCLEVBQ0RDLFFBQ0FILGlCQUVBLElBQUlJLEVBQ0osTUFBTUMsRUFBK0IsVUFBdkJGLEVBQU1HLFFBQVFDLEtBQ3RCQyxFQUFrQkgsRUFBUSxzQkFBd0IsMkJBQ2xESSxFQUFrQkosRUFBUSxzQkFBd0IsNEJBQ2xESyxFQUFrQkwsRUFBUSxzQkFBd0IsNEJBQ2xETSxFQUFxQk4sRUFBUSxzQkFBd0IsNEJBQzNELE9BQU8sT0FBUyxDQUNkTyxTQUFVLFdBQ1ZILGdCQUFpQk4sRUFBTVUsS0FBT1YsRUFBTVUsS0FBS1AsUUFBUVEsWUFBWUMsR0FBS04sRUFDbEVPLHFCQUFzQmIsRUFBTVUsTUFBUVYsR0FBT2MsTUFBTUMsYUFDakRDLHNCQUF1QmhCLEVBQU1VLE1BQVFWLEdBQU9jLE1BQU1DLGFBQ2xERSxXQUFZakIsRUFBTWtCLFlBQVlDLE9BQU8sbUJBQW9CLENBQ3ZEQyxTQUFVcEIsRUFBTWtCLFlBQVlFLFNBQVNDLFFBQ3JDQyxPQUFRdEIsRUFBTWtCLFlBQVlJLE9BQU9DLFVBRW5DLFVBQVcsQ0FDVGpCLGdCQUFpQk4sRUFBTVUsS0FBT1YsRUFBTVUsS0FBS1AsUUFBUVEsWUFBWWEsUUFBVWpCLEVBRXZFLHVCQUF3QixDQUN0QkQsZ0JBQWlCTixFQUFNVSxLQUFPVixFQUFNVSxLQUFLUCxRQUFRUSxZQUFZQyxHQUFLTixJQUd0RSxDQUFDLEtBQUssRUFBbUJtQixXQUFZLENBQ25DbkIsZ0JBQWlCTixFQUFNVSxLQUFPVixFQUFNVSxLQUFLUCxRQUFRUSxZQUFZQyxHQUFLTixHQUVwRSxDQUFDLEtBQUssRUFBbUJvQixZQUFhLENBQ3BDcEIsZ0JBQWlCTixFQUFNVSxLQUFPVixFQUFNVSxLQUFLUCxRQUFRUSxZQUFZZ0IsV0FBYW5CLEtBRTFFWCxFQUFXQyxrQkFBb0IsQ0FDakMsV0FBWSxDQUNWOEIsYUFBYyxhQUEwRixPQUE1RTNCLEdBQVlELEVBQU1VLE1BQVFWLEdBQU9HLFFBQVFOLEVBQVdnQyxPQUFTLGlCQUFzQixFQUFTNUIsRUFBUzZCLE9BQ2pJQyxLQUFNLEVBQ05DLE9BQVEsRUFFUkMsUUFBUyxLQUNUeEIsU0FBVSxXQUNWeUIsTUFBTyxFQUNQQyxVQUFXLFlBQ1hsQixXQUFZakIsRUFBTWtCLFlBQVlDLE9BQU8sWUFBYSxDQUNoREMsU0FBVXBCLEVBQU1rQixZQUFZRSxTQUFTQyxRQUNyQ0MsT0FBUXRCLEVBQU1rQixZQUFZSSxPQUFPQyxVQUVuQ2EsY0FBZSxRQUVqQixDQUFDLEtBQUssRUFBbUJYLGlCQUFrQixDQUd6Q1UsVUFBVywyQkFFYixDQUFDLEtBQUssRUFBbUJFLFNBQVUsQ0FDakMsc0JBQXVCLENBQ3JCQyxtQkFBb0J0QyxFQUFNVSxNQUFRVixHQUFPRyxRQUFRa0MsTUFBTVAsT0FHM0QsWUFBYSxDQUNYRixhQUFjLGFBQWE1QixFQUFNVSxLQUFPLFFBQVFWLEVBQU1VLEtBQUtQLFFBQVFvQyxPQUFPQyx5QkFBeUJ4QyxFQUFNVSxLQUFLK0IsUUFBUUMsa0JBQW9CckMsSUFDMUkwQixLQUFNLEVBQ05DLE9BQVEsRUFFUkMsUUFBUyxXQUNUeEIsU0FBVSxXQUNWeUIsTUFBTyxFQUNQakIsV0FBWWpCLEVBQU1rQixZQUFZQyxPQUFPLHNCQUF1QixDQUMxREMsU0FBVXBCLEVBQU1rQixZQUFZRSxTQUFTQyxVQUV2Q2UsY0FBZSxRQUVqQixDQUFDLGdCQUFnQixFQUFtQlYsY0FBYyxFQUFtQlcsaUJBQWtCLENBQ3JGVCxhQUFjLGNBQWM1QixFQUFNVSxNQUFRVixHQUFPRyxRQUFRd0MsS0FBS0MsV0FFaEUsQ0FBQyxLQUFLLEVBQW1CbEIsbUJBQW9CLENBQzNDbUIsa0JBQW1CLFdBRXBCaEQsRUFBV2lELGdCQUFrQixDQUM5QkMsWUFBYSxJQUNabEQsRUFBV21ELGNBQWdCLENBQzVCQyxhQUFjLElBQ2JwRCxFQUFXcUQsWUFBYSxPQUFTLENBQ2xDQyxRQUFTLGlCQUNZLFVBQXBCdEQsRUFBV3VELE1BQW9CLENBQ2hDQyxXQUFZLEdBQ1pDLGNBQWUsR0FDZHpELEVBQVcwRCxhQUFlLENBQzNCRixXQUFZLEdBQ1pDLGNBQWUsSUFDZHpELEVBQVcwRCxhQUFtQyxVQUFwQjFELEVBQVd1RCxNQUFvQixDQUMxREMsV0FBWSxFQUNaQyxjQUFlLElBQ2QsSUFFQ0UsR0FBbUIsRUFBQXBFLEVBQUEsSUFBT0MsRUFBQSxHQUFnQixDQUM5Q0ksS0FBTSxpQkFDTlgsS0FBTSxRQUNOWSxrQkFBbUIsTUFISSxFQUl0QixFQUNETSxRQUNBSCxpQkFDSSxPQUFTLENBQ2J3RCxXQUFZLEdBQ1pKLGFBQWMsR0FDZEssY0FBZSxFQUNmUCxZQUFhLEtBQ1gvQyxFQUFNVSxNQUFRLENBQ2hCLHFCQUFzQixDQUNwQitDLGdCQUF3QyxVQUF2QnpELEVBQU1HLFFBQVFDLEtBQW1CLEtBQU8sNEJBQ3pEc0Qsb0JBQTRDLFVBQXZCMUQsRUFBTUcsUUFBUUMsS0FBbUIsS0FBTyxPQUM3RHVELFdBQW1DLFVBQXZCM0QsRUFBTUcsUUFBUUMsS0FBbUIsS0FBTyxPQUNwRFMsb0JBQXFCLFVBQ3JCRyxxQkFBc0IsWUFFdkJoQixFQUFNVSxNQUFRLENBQ2YscUJBQXNCLENBQ3BCRyxvQkFBcUIsVUFDckJHLHFCQUFzQixXQUV4QixDQUFDaEIsRUFBTTRELHVCQUF1QixTQUFVLENBQ3RDLHFCQUFzQixDQUNwQkgsZ0JBQWlCLDRCQUNqQkMsb0JBQXFCLE9BQ3JCQyxXQUFZLFVBR0ssVUFBcEI5RCxFQUFXdUQsTUFBb0IsQ0FDaENDLFdBQVksR0FDWkMsY0FBZSxHQUNkekQsRUFBVzBELGFBQWUsQ0FDM0JGLFdBQVksR0FDWkMsY0FBZSxJQUNkekQsRUFBV2lELGdCQUFrQixDQUM5QkMsWUFBYSxHQUNabEQsRUFBV21ELGNBQWdCLENBQzVCQyxhQUFjLEdBQ2JwRCxFQUFXMEQsYUFBbUMsVUFBcEIxRCxFQUFXdUQsTUFBb0IsQ0FDMURDLFdBQVksRUFDWkMsY0FBZSxHQUNkekQsRUFBV3FELFdBQWEsQ0FDekJHLFdBQVksRUFDWkMsY0FBZSxFQUNmUCxZQUFhLEVBQ2JFLGFBQWMsTUFFVnRDLEVBQTJCLGNBQWlCLFNBQXFCa0QsRUFBU0MsR0FDOUUsSUFBSUMsRUFBTUMsRUFBYUMsRUFBT0MsRUFDOUIsTUFBTXZFLEdBQVEsT0FBZ0IsQ0FDNUJBLE1BQU9rRSxFQUNQcEUsS0FBTSxvQkFFRixXQUNGMEUsRUFBYSxDQUFDLEVBQ2RDLGdCQUFpQkMsRUFBbUIsVUFDcENDLEdBQVksRUFBSyxlQUVqQkMsRUFBaUIsUUFBTyxVQUN4QnJCLEdBQVksRUFBSyxVQUNqQnNCLEVBQVMsTUFDVEMsRUFBUSxDQUFDLEVBQUMsS0FDVkMsRUFBTyxRQUNML0UsRUFDSmdGLEdBQVEsT0FBOEJoRixFQUFPVCxHQUN6Q1csR0FBYSxPQUFTLENBQUMsRUFBR0YsRUFBTyxDQUNyQzJFLFlBQ0FDLGlCQUNBckIsWUFDQXdCLFNBRUlFLEVBL0xrQi9FLEtBQ3hCLE1BQU0sUUFDSitFLEVBQU8saUJBQ1A5RSxHQUNFRCxFQUNFNEUsRUFBUSxDQUNaSSxLQUFNLENBQUMsUUFBUy9FLEdBQW9CLGFBQ3BDZ0YsTUFBTyxDQUFDLFVBRUpDLEdBQWtCLEVBQUFDLEVBQUEsR0FBZVAsRUFBTzVGLEVBQTRCK0YsR0FDMUUsT0FBTyxPQUFTLENBQUMsRUFBR0EsRUFBU0csRUFBZ0IsRUFxTDdCRSxDQUFrQnRGLEdBQzVCdUYsRUFBNkIsQ0FDakNMLEtBQU0sQ0FDSmhGLGNBRUZpRixNQUFPLENBQ0xqRixlQUdFdUUsR0FBZ0MsTUFBYkksRUFBb0JBLEVBQVlILElBQXVCLEVBQUFjLEVBQUEsR0FBVUQsRUFBeUMsTUFBYlYsRUFBb0JBLEVBQVlILEdBQXVCYSxFQUN2S0UsRUFBMEYsT0FBOUVyQixFQUFxQyxPQUE3QkMsRUFBY1MsRUFBTUksTUFBZ0JiLEVBQWNHLEVBQVdrQixNQUFnQnRCLEVBQU81RSxFQUN4R21HLEVBQWdHLE9BQW5GckIsRUFBd0MsT0FBL0JDLEVBQWVPLEVBQU1LLE9BQWlCWixFQUFlQyxFQUFXb0IsT0FBaUJ0QixFQUFRVCxFQUNySCxPQUFvQixTQUFLbkUsRUFBQSxJQUFXLE9BQVMsQ0FDM0NvRixNQUFPLENBQ0xJLEtBQU1PLEVBQ05OLE1BQU9RLEdBRVRsQixnQkFBaUJBLEVBQ2pCRSxVQUFXQSxFQUNYQyxlQUFnQkEsRUFDaEJyQixVQUFXQSxFQUNYWSxJQUFLQSxFQUNMWSxLQUFNQSxHQUNMQyxFQUFPLENBQ1JDLFFBQVNBLElBRWIsSUFrTUFqRSxFQUFZNkUsUUFBVSxRQUN0QixTLHVLQzFhTyxTQUFTQyxFQUE2QjNHLEdBQzNDLE9BQU8sRUFBQUMsRUFBQSxJQUFxQixpQkFBa0JELEVBQ2hELEVBQzJCLEVBQUFHLEVBQUEsR0FBdUIsaUJBQWtCLENBQUMsT0FBUSxhQUFjLGVBQWdCLGNBQWUsWUFBYSxhLGNDRHZJLE1BQU1DLEVBQVksQ0FBQyxXQUFZLFlBQWEsUUFBUyxZQUFhLFdBQVksUUFBUyxVQUFXLFlBQWEsY0FBZSxTQUFVLFdBQVksT0FBUSxXQXdCdEp3RyxHQUFrQixFQUFBdEcsRUFBQSxJQUFPLE1BQU8sQ0FDcENLLEtBQU0saUJBQ05YLEtBQU0sT0FDTlksa0JBQW1CLEVBQ2pCRyxjQUNDRCxLQUNNLE9BQVMsQ0FBQyxFQUFHQSxFQUFPaUYsS0FBTWpGLEVBQU8sVUFBUyxFQUFBK0YsRUFBQSxHQUFXOUYsRUFBVytGLFdBQVkvRixFQUFXeUUsV0FBYTFFLEVBQU8wRSxZQU45RixFQVFyQixFQUNEekUsaUJBQ0ksT0FBUyxDQUNiZ0csUUFBUyxjQUNUQyxjQUFlLFNBQ2ZyRixTQUFVLFdBRVZzRixTQUFVLEVBQ1Y1QyxRQUFTLEVBQ1R5QyxPQUFRLEVBQ1JJLE9BQVEsRUFDUkMsY0FBZSxPQUNRLFdBQXRCcEcsRUFBVytGLFFBQXVCLENBQ25DTSxVQUFXLEdBQ1hDLGFBQWMsR0FDUyxVQUF0QnRHLEVBQVcrRixRQUFzQixDQUNsQ00sVUFBVyxFQUNYQyxhQUFjLEdBQ2J0RyxFQUFXeUUsV0FBYSxDQUN6QjhCLE1BQU8sV0EwT1QsRUEvTWlDLGNBQWlCLFNBQXFCdkMsRUFBU0MsR0FDOUUsTUFBTW5FLEdBQVEsT0FBZ0IsQ0FDNUJBLE1BQU9rRSxFQUNQcEUsS0FBTSxvQkFFRixTQUNGNEcsRUFBUSxVQUNSQyxFQUFTLE1BQ1R6RSxFQUFRLFVBQVMsVUFDakIwRSxFQUFZLE1BQUssU0FDakI3RSxHQUFXLEVBQUssTUFDaEJXLEdBQVEsRUFDUlosUUFBUytFLEVBQWUsVUFDeEJsQyxHQUFZLEVBQUssWUFDakJmLEdBQWMsRUFBSyxPQUNuQnFDLEVBQVMsT0FBTSxTQUNmYSxHQUFXLEVBQUssS0FDaEJyRCxFQUFPLFNBQVEsUUFDZnNELEVBQVUsWUFDUi9HLEVBQ0pnRixHQUFRLE9BQThCaEYsRUFBT1QsR0FDekNXLEdBQWEsT0FBUyxDQUFDLEVBQUdGLEVBQU8sQ0FDckNrQyxRQUNBMEUsWUFDQTdFLFdBQ0FXLFFBQ0FpQyxZQUNBZixjQUNBcUMsU0FDQWEsV0FDQXJELE9BQ0FzRCxZQUVJOUIsRUFsR2tCL0UsS0FDeEIsTUFBTSxRQUNKK0UsRUFBTyxPQUNQZ0IsRUFBTSxVQUNOdEIsR0FDRXpFLEVBQ0U0RSxFQUFRLENBQ1pJLEtBQU0sQ0FBQyxPQUFtQixTQUFYZSxHQUFxQixVQUFTLEVBQUFELEVBQUEsR0FBV0MsS0FBV3RCLEdBQWEsY0FFbEYsT0FBTyxFQUFBVSxFQUFBLEdBQWVQLEVBQU9nQixFQUE4QmIsRUFBUSxFQXlGbkRLLENBQWtCcEYsSUFDM0I4RyxFQUFjQyxHQUFtQixZQUFlLEtBR3JELElBQUlDLEdBQXNCLEVBWTFCLE9BWElSLEdBQ0YsV0FBZVMsUUFBUVQsR0FBVVUsSUFDL0IsS0FBSyxFQUFBQyxFQUFBLEdBQWFELEVBQU8sQ0FBQyxRQUFTLFdBQ2pDLE9BRUYsTUFBTWpDLEdBQVEsRUFBQWtDLEVBQUEsR0FBYUQsRUFBTyxDQUFDLFdBQWFBLEVBQU1wSCxNQUFNbUYsTUFBUWlDLEVBQ2hFakMsSUFBUyxRQUFlQSxFQUFNbkYsU0FDaENrSCxHQUFzQixFQUN4QixJQUdHQSxDQUFtQixLQUVyQkksRUFBUUMsR0FBYSxZQUFlLEtBR3pDLElBQUlDLEdBQWdCLEVBV3BCLE9BVklkLEdBQ0YsV0FBZVMsUUFBUVQsR0FBVVUsS0FDMUIsRUFBQUMsRUFBQSxHQUFhRCxFQUFPLENBQUMsUUFBUyxjQUcvQixRQUFTQSxFQUFNcEgsT0FBTyxLQUFTLFFBQVNvSCxFQUFNcEgsTUFBTXlILFlBQVksTUFDbEVELEdBQWdCLEVBQ2xCLElBR0dBLENBQWEsS0FFZkUsRUFBY0MsR0FBYyxZQUFlLEdBQzlDNUYsR0FBWTJGLEdBQ2RDLEdBQVcsR0FFYixNQUFNN0YsT0FBOEI4RixJQUFwQmYsR0FBa0M5RSxFQUE2QjJGLEVBQWxCYixFQUM3RCxJQUFJZ0IsRUFjSixNQUFNQyxFQUFlLFdBQWMsS0FDMUIsQ0FDTGQsZUFDQUMsa0JBQ0EvRSxRQUNBSCxXQUNBVyxRQUNBNEUsU0FDQXhGLFVBQ0E2QyxZQUNBZixjQUNBSCxPQUNBc0UsT0FBUSxLQUNOSixHQUFXLEVBQU0sRUFFbkJLLFFBQVMsS0FDUFQsR0FBVSxFQUFNLEVBRWxCVSxTQUFVLEtBQ1JWLEdBQVUsRUFBSyxFQUVqQlcsUUFBUyxLQUNQUCxHQUFXLEVBQUssRUFFbEJFLGlCQUNBZixXQUNBQyxhQUVELENBQUNDLEVBQWM5RSxFQUFPSCxFQUFVVyxFQUFPNEUsRUFBUXhGLEVBQVM2QyxFQUFXZixFQUFhaUUsRUFBZ0JmLEVBQVVyRCxFQUFNc0QsSUFDbkgsT0FBb0IsU0FBS29CLEVBQUEsRUFBbUJDLFNBQVUsQ0FDcERDLE1BQU9QLEVBQ1BwQixVQUF1QixTQUFLWCxHQUFpQixPQUFTLENBQ3BEdUMsR0FBSTFCLEVBQ0oxRyxXQUFZQSxFQUNaeUcsV0FBVyxFQUFBNEIsRUFBQSxHQUFLdEQsRUFBUUMsS0FBTXlCLEdBQzlCeEMsSUFBS0EsR0FDSmEsRUFBTyxDQUNSMEIsU0FBVUEsTUFHaEIsRyxrQ0N4TUEsUSxRQUp3QyxtQkFBb0JrQixFLGlCQ0o3QyxTQUFTWSxHQUFpQixNQUN2Q3hJLEVBQUssT0FDTHlJLEVBQU0sZUFDTkMsSUFFQSxPQUFPRCxFQUFPRSxRQUFPLENBQUNDLEVBQUtDLEtBQ3pCRCxFQUFJQyxHQUFTN0ksRUFBTTZJLEdBQ2ZILFFBQzBCLElBQWpCMUksRUFBTTZJLEtBQ2ZELEVBQUlDLEdBQVNILEVBQWVHLElBR3pCRCxJQUNOLENBQUMsRUFDTixDLDBFQ1ZlLFNBQVNFLElBQ3RCLE9BQU8sYUFBaUIsSUFDMUIsQyxvSkNKTyxTQUFTQyxFQUFnQzVKLEdBQzlDLE9BQU8sRUFBQUMsRUFBQSxJQUFxQixvQkFBcUJELEVBQ25ELENBQ0EsTUFDQSxHQUQ4QixFQUFBRyxFQUFBLEdBQXVCLG9CQUFxQixDQUFDLE9BQVEsUUFBUyxXQUFZLFlBQWEsYUFBYyxZQUFhLFVBQVcsU0FBVSxhLElDRGpLMEosRSxvQkFDSixNQUFNekosRUFBWSxDQUFDLFdBQVksWUFBYSxZQUFhLFdBQVksUUFBUyxTQUFVLFVBQVcsU0FBVSxXQUFZLFdBNEJuSDBKLEdBQXFCLEVBQUF4SixFQUFBLElBQU8sSUFBSyxDQUNyQ0ssS0FBTSxvQkFDTlgsS0FBTSxPQUNOWSxrQkFBbUIsQ0FBQ0MsRUFBT0MsS0FDekIsTUFBTSxXQUNKQyxHQUNFRixFQUNKLE1BQU8sQ0FBQ0MsRUFBT2lGLEtBQU1oRixFQUFXdUQsTUFBUXhELEVBQU8sUUFBTyxFQUFBK0YsRUFBQSxHQUFXOUYsRUFBV3VELFNBQVV2RCxFQUFXZ0osV0FBYWpKLEVBQU9pSixVQUFXaEosRUFBV29ILFFBQVVySCxFQUFPcUgsT0FBTyxHQVA1SSxFQVN4QixFQUNEakgsUUFDQUgsaUJBQ0ksT0FBUyxDQUNiZ0MsT0FBUTdCLEVBQU1VLE1BQVFWLEdBQU9HLFFBQVF3QyxLQUFLbUcsV0FDekM5SSxFQUFNK0ksV0FBV0MsUUFBUyxDQUMzQkMsVUFBVyxPQUNYL0MsVUFBVyxFQUNYZ0QsWUFBYSxFQUNiL0MsYUFBYyxFQUNkZ0QsV0FBWSxFQUNaLENBQUMsS0FBSyxFQUFzQnpILFlBQWEsQ0FDdkNHLE9BQVE3QixFQUFNVSxNQUFRVixHQUFPRyxRQUFRd0MsS0FBS2pCLFVBRTVDLENBQUMsS0FBSyxFQUFzQlcsU0FBVSxDQUNwQ1IsT0FBUTdCLEVBQU1VLE1BQVFWLEdBQU9HLFFBQVFrQyxNQUFNUCxPQUV4QixVQUFwQmpDLEVBQVd1RCxNQUFvQixDQUNoQzhDLFVBQVcsR0FDVnJHLEVBQVdnSixXQUFhLENBQ3pCTSxXQUFZLEdBQ1pELFlBQWEsT0FzR2YsRUFwR29DLGNBQWlCLFNBQXdCckYsRUFBU0MsR0FDcEYsTUFBTW5FLEdBQVEsT0FBZ0IsQ0FDNUJBLE1BQU9rRSxFQUNQcEUsS0FBTSx1QkFFRixTQUNGNEcsRUFBUSxVQUNSQyxFQUFTLFVBQ1RDLEVBQVksS0FDVjVHLEVBQ0pnRixHQUFRLE9BQThCaEYsRUFBT1QsR0FDekNtSixHQUFpQixFQUFBSSxFQUFBLEtBQ2pCVyxHQUFNLEVBQUFqQixFQUFBLEdBQWlCLENBQzNCeEksUUFDQTBJLGlCQUNBRCxPQUFRLENBQUMsVUFBVyxPQUFRLFdBQVksUUFBUyxTQUFVLFVBQVcsY0FFbEV2SSxHQUFhLE9BQVMsQ0FBQyxFQUFHRixFQUFPLENBQ3JDNEcsWUFDQXNDLFVBQTJCLFdBQWhCTyxFQUFJMUMsU0FBd0MsYUFBaEIwQyxFQUFJMUMsUUFDM0NBLFFBQVMwQyxFQUFJMUMsUUFDYnRELEtBQU1nRyxFQUFJaEcsS0FDVjFCLFNBQVUwSCxFQUFJMUgsU0FDZFcsTUFBTytHLEVBQUkvRyxNQUNYNEUsT0FBUW1DLEVBQUluQyxPQUNaeEYsUUFBUzJILEVBQUkzSCxRQUNiZ0YsU0FBVTJDLEVBQUkzQyxXQUVWN0IsRUE1RWtCL0UsS0FDeEIsTUFBTSxRQUNKK0UsRUFBTyxVQUNQaUUsRUFBUyxLQUNUekYsRUFBSSxTQUNKMUIsRUFBUSxNQUNSVyxFQUFLLE9BQ0w0RSxFQUFNLFFBQ054RixFQUFPLFNBQ1BnRixHQUNFNUcsRUFDRTRFLEVBQVEsQ0FDWkksS0FBTSxDQUFDLE9BQVFuRCxHQUFZLFdBQVlXLEdBQVMsUUFBU2UsR0FBUSxRQUFPLEVBQUF1QyxFQUFBLEdBQVd2QyxLQUFTeUYsR0FBYSxZQUFhcEgsR0FBVyxVQUFXd0YsR0FBVSxTQUFVUixHQUFZLGFBRTlLLE9BQU8sRUFBQXpCLEVBQUEsR0FBZVAsRUFBT2lFLEVBQWlDOUQsRUFBUSxFQThEdERLLENBQWtCcEYsR0FDbEMsT0FBb0IsU0FBSytJLEdBQW9CLE9BQVMsQ0FDcERYLEdBQUkxQixFQUNKMUcsV0FBWUEsRUFDWnlHLFdBQVcsRUFBQTRCLEVBQUEsR0FBS3RELEVBQVFDLEtBQU15QixHQUM5QnhDLElBQUtBLEdBQ0phLEVBQU8sQ0FDUjBCLFNBQXVCLE1BQWJBLEVBQ1ZzQyxJQUFVQSxHQUFxQixTQUFLLE9BQVEsQ0FDMUNyQyxVQUFXLGNBQ1hELFNBQVUsT0FDTkEsSUFFVixHLGtHQ2pGQSxRQWhCQSxTQUFzQjFHLEdBQ3BCLE9BQW9CLFNBQUssS0FBb0IsT0FBUyxDQUFDLEVBQUdBLEVBQU8sQ0FDL0QwSixhQUFjLElBQ2RDLFFBQVMsTUFFYixDLDJJQ0hBLFFBSmlDLGtCLHdCQ0wxQixTQUFTQyxFQUFvQnpLLEdBQ2xDLE9BQU8sRUFBQUMsRUFBQSxJQUFxQixVQUFXRCxFQUN6QyxDQUNBLE1BR00wSyxFQUFhLENBQUMsUUFBUSxFQUFNLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxJQVVyRSxHQVRvQixFQUFBdkssRUFBQSxHQUF1QixVQUFXLENBQUMsT0FBUSxZQUFhLE9BQVEsa0JBSm5FLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxJQU1wQ3dLLEtBQUlDLEdBQVcsY0FBY0EsU0FMdEIsQ0FBQyxpQkFBa0IsU0FBVSxjQUFlLE9BT2pERCxLQUFJRSxHQUFhLGdCQUFnQkEsU0FOakMsQ0FBQyxTQUFVLGVBQWdCLFFBUWhDRixLQUFJRyxHQUFRLFdBQVdBLFNBRTdCSixFQUFXQyxLQUFJckcsR0FBUSxXQUFXQSxTQUFZb0csRUFBV0MsS0FBSXJHLEdBQVEsV0FBV0EsU0FBWW9HLEVBQVdDLEtBQUlyRyxHQUFRLFdBQVdBLFNBQVlvRyxFQUFXQyxLQUFJckcsR0FBUSxXQUFXQSxTQUFZb0csRUFBV0MsS0FBSXJHLEdBQVEsV0FBV0EsUSxjQ0g3TixNQUFNbEUsRUFBWSxDQUFDLFlBQWEsVUFBVyxnQkFBaUIsWUFBYSxZQUFhLFlBQWEsT0FBUSxhQUFjLFVBQVcsT0FBUSxnQkFjNUksU0FBUzJLLEVBQVVDLEdBQ2pCLE1BQU1DLEVBQVFDLFdBQVdGLEdBQ3pCLE1BQU8sR0FBR0MsSUFBUUUsT0FBT0gsR0FBS0ksUUFBUUQsT0FBT0YsR0FBUSxLQUFPLE1BQzlELENBbUdBLFNBQVNJLEdBQStCLFlBQ3RDQyxFQUFXLE9BQ1hDLElBRUEsSUFBSUMsRUFBYSxHQUNqQkMsT0FBT0MsS0FBS0gsR0FBUXZELFNBQVEyRCxJQUNQLEtBQWZILEdBR2dCLElBQWhCRCxFQUFPSSxLQUNUSCxFQUFhRyxFQUNmLElBRUYsTUFBTUMsRUFBOEJILE9BQU9DLEtBQUtKLEdBQWFPLE1BQUssQ0FBQ0MsRUFBR0MsSUFDN0RULEVBQVlRLEdBQUtSLEVBQVlTLEtBRXRDLE9BQU9ILEVBQTRCSSxNQUFNLEVBQUdKLEVBQTRCSyxRQUFRVCxHQUNsRixDQTJIQSxNQUFNVSxHQUFXLEVBQUE1TCxFQUFBLElBQU8sTUFBTyxDQUM3QkssS0FBTSxVQUNOWCxLQUFNLE9BQ05ZLGtCQUFtQixDQUFDQyxFQUFPQyxLQUN6QixNQUFNLFdBQ0pDLEdBQ0VGLEdBQ0UsVUFDSnNMLEVBQVMsVUFDVHRCLEVBQVMsS0FDVHVCLEVBQUksUUFDSnhCLEVBQU8sS0FDUEUsRUFBSSxhQUNKdUIsRUFBWSxZQUNaZixHQUNFdkssRUFDSixJQUFJdUwsRUFBZ0IsR0FHaEJILElBQ0ZHLEVBOUNDLFNBQThCMUIsRUFBU1UsRUFBYXhLLEVBQVMsQ0FBQyxHQUVuRSxJQUFLOEosR0FBV0EsR0FBVyxFQUN6QixNQUFPLEdBR1QsR0FBdUIsaUJBQVpBLElBQXlCMkIsT0FBT0MsTUFBTUQsT0FBTzNCLEtBQWdDLGlCQUFaQSxFQUMxRSxNQUFPLENBQUM5SixFQUFPLGNBQWNxSyxPQUFPUCxPQUd0QyxNQUFNMEIsRUFBZ0IsR0FPdEIsT0FOQWhCLEVBQVl0RCxTQUFReUUsSUFDbEIsTUFBTXZELEVBQVEwQixFQUFRNkIsR0FDbEJGLE9BQU9yRCxHQUFTLEdBQ2xCb0QsRUFBY0ksS0FBSzVMLEVBQU8sV0FBVzJMLEtBQWN0QixPQUFPakMsTUFDNUQsSUFFS29ELENBQ1QsQ0E0QnNCSyxDQUFxQi9CLEVBQVNVLEVBQWF4SyxJQUU3RCxNQUFNOEwsRUFBb0IsR0FPMUIsT0FOQXRCLEVBQVl0RCxTQUFReUUsSUFDbEIsTUFBTXZELEVBQVFuSSxFQUFXMEwsR0FDckJ2RCxHQUNGMEQsRUFBa0JGLEtBQUs1TCxFQUFPLFFBQVEyTCxLQUFjdEIsT0FBT2pDLE1BQzdELElBRUssQ0FBQ3BJLEVBQU9pRixLQUFNb0csR0FBYXJMLEVBQU9xTCxVQUFXQyxHQUFRdEwsRUFBT3NMLEtBQU1DLEdBQWdCdkwsRUFBT3VMLGdCQUFpQkMsRUFBNkIsUUFBZHpCLEdBQXVCL0osRUFBTyxnQkFBZ0JxSyxPQUFPTixNQUF3QixTQUFUQyxHQUFtQmhLLEVBQU8sV0FBV3FLLE9BQU9MLFNBQWE4QixFQUFrQixHQTdCbFEsRUErQmQsRUFDRDdMLGlCQUNJLE9BQVMsQ0FDYjhMLFVBQVcsY0FDVjlMLEVBQVdvTCxXQUFhLENBQ3pCcEYsUUFBUyxPQUNUK0YsU0FBVSxPQUNWeEYsTUFBTyxRQUNOdkcsRUFBV3FMLE1BQVEsQ0FDcEJ0RixPQUFRLEdBQ1AvRixFQUFXc0wsY0FBZ0IsQ0FDNUJwRixTQUFVLEdBQ1csU0FBcEJsRyxFQUFXK0osTUFBbUIsQ0FDL0JnQyxTQUFVL0wsRUFBVytKLFNBcE5oQixVQUEyQixNQUNoQzVKLEVBQUssV0FDTEgsSUFFQSxNQUFNZ00sR0FBa0IsUUFBd0IsQ0FDOUN4QixPQUFReEssRUFBVzhKLFVBQ25CUyxZQUFhcEssRUFBTW9LLFlBQVlDLFNBRWpDLE9BQU8sUUFBa0IsQ0FDdkJySyxTQUNDNkwsR0FBaUJDLElBQ2xCLE1BQU1DLEVBQVMsQ0FDYmpHLGNBQWVnRyxHQU9qQixPQUxvQyxJQUFoQ0EsRUFBVWYsUUFBUSxZQUNwQmdCLEVBQU8sUUFBUSxFQUFZYixRQUFVLENBQ25DYyxTQUFVLFNBR1BELENBQU0sR0FFakIsSUF5Qk8sVUFBd0IsTUFDN0IvTCxFQUFLLFdBQ0xILElBRUEsTUFBTSxVQUNKb0wsRUFBUyxXQUNUZ0IsR0FDRXBNLEVBQ0osSUFBSUQsRUFBUyxDQUFDLEVBQ2QsR0FBSXFMLEdBQTRCLElBQWZnQixFQUFrQixDQUNqQyxNQUFNQyxHQUFtQixRQUF3QixDQUMvQzdCLE9BQVE0QixFQUNSN0IsWUFBYXBLLEVBQU1vSyxZQUFZQyxTQUVqQyxJQUFJOEIsRUFDNEIsaUJBQXJCRCxJQUNUQyxFQUEwQmhDLEVBQStCLENBQ3ZEQyxZQUFhcEssRUFBTW9LLFlBQVlDLE9BQy9CQSxPQUFRNkIsS0FHWnRNLEdBQVMsUUFBa0IsQ0FDekJJLFNBQ0NrTSxHQUFrQixDQUFDSixFQUFXUCxLQUMvQixJQUFJYSxFQUNKLE1BQU1DLEVBQWVyTSxFQUFNMEosUUFBUW9DLEdBQ25DLE1BQXFCLFFBQWpCTyxFQUNLLENBQ0xuRyxVQUFXLElBQUkyRCxFQUFVd0MsS0FDekIsQ0FBQyxRQUFRLEVBQVluQixRQUFTLENBQzVCN0gsV0FBWXdHLEVBQVV3QyxLQUk2QixPQUFwREQsRUFBd0JELElBQW9DQyxFQUFzQkUsU0FBU2YsR0FDdkYsQ0FBQyxFQUVILENBQ0xyRixVQUFXLEVBQ1gsQ0FBQyxRQUFRLEVBQVlnRixRQUFTLENBQzVCN0gsV0FBWSxHQUVmLEdBRUwsQ0FDQSxPQUFPekQsQ0FDVCxJQUNPLFVBQTJCLE1BQ2hDSSxFQUFLLFdBQ0xILElBRUEsTUFBTSxVQUNKb0wsRUFBUyxjQUNUc0IsR0FDRTFNLEVBQ0osSUFBSUQsRUFBUyxDQUFDLEVBQ2QsR0FBSXFMLEdBQStCLElBQWxCc0IsRUFBcUIsQ0FDcEMsTUFBTUMsR0FBc0IsUUFBd0IsQ0FDbERuQyxPQUFRa0MsRUFDUm5DLFlBQWFwSyxFQUFNb0ssWUFBWUMsU0FFakMsSUFBSThCLEVBQytCLGlCQUF4QkssSUFDVEwsRUFBMEJoQyxFQUErQixDQUN2REMsWUFBYXBLLEVBQU1vSyxZQUFZQyxPQUMvQkEsT0FBUW1DLEtBR1o1TSxHQUFTLFFBQWtCLENBQ3pCSSxTQUNDd00sR0FBcUIsQ0FBQ1YsRUFBV1AsS0FDbEMsSUFBSWtCLEVBQ0osTUFBTUosRUFBZXJNLEVBQU0wSixRQUFRb0MsR0FDbkMsTUFBcUIsUUFBakJPLEVBQ0ssQ0FDTGpHLE1BQU8sZUFBZXlELEVBQVV3QyxNQUNoQ2xELFdBQVksSUFBSVUsRUFBVXdDLEtBQzFCLENBQUMsUUFBUSxFQUFZbkIsUUFBUyxDQUM1Qm5JLFlBQWE4RyxFQUFVd0MsS0FJNkIsT0FBckRJLEVBQXlCTixJQUFvQ00sRUFBdUJILFNBQVNmLEdBQ3pGLENBQUMsRUFFSCxDQUNMbkYsTUFBTyxPQUNQK0MsV0FBWSxFQUNaLENBQUMsUUFBUSxFQUFZK0IsUUFBUyxDQUM1Qm5JLFlBQWEsR0FFaEIsR0FFTCxDQUNBLE9BQU9uRCxDQUNULElBbk5PLFVBQXNCLE1BQzNCSSxFQUFLLFdBQ0xILElBRUEsSUFBSXVELEVBQ0osT0FBT3BELEVBQU1vSyxZQUFZSSxLQUFLbEMsUUFBTyxDQUFDb0UsRUFBY25CLEtBRWxELElBQUkzTCxFQUFTLENBQUMsRUFJZCxHQUhJQyxFQUFXMEwsS0FDYm5JLEVBQU92RCxFQUFXMEwsS0FFZm5JLEVBQ0gsT0FBT3NKLEVBRVQsSUFBYSxJQUFUdEosRUFFRnhELEVBQVMsQ0FDUCtNLFVBQVcsRUFDWEMsU0FBVSxFQUNWWixTQUFVLGFBRVAsR0FBYSxTQUFUNUksRUFDVHhELEVBQVMsQ0FDUCtNLFVBQVcsT0FDWEMsU0FBVSxFQUNWQyxXQUFZLEVBQ1piLFNBQVUsT0FDVjVGLE1BQU8sWUFFSixDQUNMLE1BQU0wRyxHQUEwQixRQUF3QixDQUN0RHpDLE9BQVF4SyxFQUFXa04sUUFDbkIzQyxZQUFhcEssRUFBTW9LLFlBQVlDLFNBRTNCMkMsRUFBaUQsaUJBQTVCRixFQUF1Q0EsRUFBd0J2QixHQUFjdUIsRUFDeEcsR0FBSUUsUUFDRixPQUFPTixFQUdULE1BQU10RyxFQUFXNkcsS0FBS0MsTUFBTTlKLEVBQU80SixFQUFjLEtBQVEsSUFBM0MsSUFDZCxJQUFJRyxFQUFPLENBQUMsRUFDWixHQUFJdE4sRUFBV29MLFdBQWFwTCxFQUFXcUwsTUFBcUMsSUFBN0JyTCxFQUFXME0sY0FBcUIsQ0FDN0UsTUFBTUYsRUFBZXJNLEVBQU0wSixRQUFRN0osRUFBVzBNLGVBQzlDLEdBQXFCLFFBQWpCRixFQUF3QixDQUMxQixNQUFNL0gsRUFBWSxRQUFROEIsT0FBV3lELEVBQVV3QyxNQUMvQ2MsRUFBTyxDQUNMUixVQUFXckksRUFDWDBILFNBQVUxSCxFQUVkLENBQ0YsQ0FJQTFFLEdBQVMsT0FBUyxDQUNoQitNLFVBQVd2RyxFQUNYd0csU0FBVSxFQUNWWixTQUFVNUYsR0FDVCtHLEVBQ0wsQ0FRQSxPQUw2QyxJQUF6Q25OLEVBQU1vSyxZQUFZQyxPQUFPa0IsR0FDM0JoQixPQUFPNkMsT0FBT1YsRUFBYzlNLEdBRTVCOE0sRUFBYTFNLEVBQU1vSyxZQUFZaUQsR0FBRzlCLElBQWUzTCxFQUU1QzhNLENBQVksR0FDbEIsQ0FBQyxFQUNOLElBd1FNWSxFQUFvQixjQUFpQixTQUFjekosRUFBU0MsR0FDaEUsTUFBTXlKLEdBQWEsT0FBZ0IsQ0FDakM1TixNQUFPa0UsRUFDUHBFLEtBQU0sYUFFRixZQUNKMkssSUFDRSxFQUFBb0QsRUFBQSxLQUNFN04sR0FBUSxFQUFBOE4sRUFBQSxHQUFhRixJQUNyQixVQUNGakgsRUFDQXlHLFFBQVNXLEVBQ1RuQixjQUFlb0IsRUFBaUIsVUFDaENwSCxFQUFZLE1BQUssVUFDakIwRSxHQUFZLEVBQUssVUFDakJ0QixFQUFZLE1BQUssS0FDakJ1QixHQUFPLEVBQ1BlLFdBQVkyQixFQUFjLFFBQzFCbEUsRUFBVSxFQUFDLEtBQ1hFLEVBQU8sT0FBTSxhQUNidUIsR0FBZSxHQUNieEwsRUFDSmdGLEdBQVEsT0FBOEJoRixFQUFPVCxHQUN6QytNLEVBQWEyQixHQUFrQmxFLEVBQy9CNkMsRUFBZ0JvQixHQUFxQmpFLEVBQ3JDbUUsRUFBaUIsYUFBaUIsR0FHbENkLEVBQVU5QixFQUFZeUMsR0FBZSxHQUFLRyxFQUMxQ0MsRUFBb0IsQ0FBQyxFQUNyQkMsR0FBZ0IsT0FBUyxDQUFDLEVBQUdwSixHQUNuQ3lGLEVBQVlJLEtBQUsxRCxTQUFReUUsSUFDRSxNQUFyQjVHLEVBQU00RyxLQUNSdUMsRUFBa0J2QyxHQUFjNUcsRUFBTTRHLFVBQy9Cd0MsRUFBY3hDLEdBQ3ZCLElBRUYsTUFBTTFMLEdBQWEsT0FBUyxDQUFDLEVBQUdGLEVBQU8sQ0FDckNvTixVQUNBOUIsWUFDQXRCLFlBQ0F1QixPQUNBZSxhQUNBTSxnQkFDQTNDLE9BQ0F1QixlQUNBekIsV0FDQ29FLEVBQW1CLENBQ3BCMUQsWUFBYUEsRUFBWUksT0FFckI1RixFQS9Fa0IvRSxLQUN4QixNQUFNLFFBQ0orRSxFQUFPLFVBQ1BxRyxFQUFTLFVBQ1R0QixFQUFTLEtBQ1R1QixFQUFJLFFBQ0p4QixFQUFPLEtBQ1BFLEVBQUksYUFDSnVCLEVBQVksWUFDWmYsR0FDRXZLLEVBQ0osSUFBSW1PLEVBQWlCLEdBR2pCL0MsSUFDRitDLEVBbkNHLFNBQStCdEUsRUFBU1UsR0FFN0MsSUFBS1YsR0FBV0EsR0FBVyxFQUN6QixNQUFPLEdBR1QsR0FBdUIsaUJBQVpBLElBQXlCMkIsT0FBT0MsTUFBTUQsT0FBTzNCLEtBQWdDLGlCQUFaQSxFQUMxRSxNQUFPLENBQUMsY0FBY08sT0FBT1AsTUFHL0IsTUFBTTlFLEVBQVUsR0FRaEIsT0FQQXdGLEVBQVl0RCxTQUFReUUsSUFDbEIsTUFBTXZELEVBQVEwQixFQUFRNkIsR0FDdEIsR0FBSUYsT0FBT3JELEdBQVMsRUFBRyxDQUNyQixNQUFNMUIsRUFBWSxXQUFXaUYsS0FBY3RCLE9BQU9qQyxLQUNsRHBELEVBQVE0RyxLQUFLbEYsRUFDZixLQUVLMUIsQ0FDVCxDQWdCcUJxSixDQUFzQnZFLEVBQVNVLElBRWxELE1BQU04RCxFQUFxQixHQUMzQjlELEVBQVl0RCxTQUFReUUsSUFDbEIsTUFBTXZELEVBQVFuSSxFQUFXMEwsR0FDckJ2RCxHQUNGa0csRUFBbUIxQyxLQUFLLFFBQVFELEtBQWN0QixPQUFPakMsS0FDdkQsSUFFRixNQUFNdkQsRUFBUSxDQUNaSSxLQUFNLENBQUMsT0FBUW9HLEdBQWEsWUFBYUMsR0FBUSxPQUFRQyxHQUFnQixrQkFBbUI2QyxFQUE4QixRQUFkckUsR0FBdUIsZ0JBQWdCTSxPQUFPTixLQUF1QixTQUFUQyxHQUFtQixXQUFXSyxPQUFPTCxRQUFZc0UsSUFFM04sT0FBTyxFQUFBbEosRUFBQSxHQUFlUCxFQUFPOEUsRUFBcUIzRSxFQUFRLEVBb0QxQ0ssQ0FBa0JwRixHQUNsQyxPQUFvQixTQUFLLEVBQVlrSSxTQUFVLENBQzdDQyxNQUFPK0UsRUFDUDFHLFVBQXVCLFNBQUsyRSxHQUFVLE9BQVMsQ0FDN0NuTCxXQUFZQSxFQUNaeUcsV0FBVyxFQUFBNEIsRUFBQSxHQUFLdEQsRUFBUUMsS0FBTXlCLEdBQzlCMkIsR0FBSTFCLEVBQ0p6QyxJQUFLQSxHQUNKaUssS0FFUCxJQStJQSxHLGdJQ3BqQkEsTUFBTTdPLEVBQVksQ0FBQyxpQkFBa0IsU0FBVSxXQUFZLFNBQVUsS0FBTSxVQUFXLFlBQWEsYUFBYyxTQUFVLFdBQVksWUFBYSxRQUFTLFVBQVcsdUJBVXhLLFNBQVNpUCxFQUFTbkcsR0FDaEIsTUFBTyxTQUFTQSxNQUFVQSxHQUFTLElBQ3JDLENBQ0EsTUFBTXBJLEVBQVMsQ0FDYndPLFNBQVUsQ0FDUjNMLFFBQVMsRUFDVE4sVUFBV2dNLEVBQVMsSUFFdEJFLFFBQVMsQ0FDUDVMLFFBQVMsRUFDVE4sVUFBVyxTQVFUbU0sRUFBbUMsb0JBQWRDLFdBQTZCLDBDQUEwQ0MsS0FBS0QsVUFBVUUsWUFBYywyQkFBMkJELEtBQUtELFVBQVVFLFdBT25LQyxFQUFvQixjQUFpQixTQUFjL08sRUFBT21FLEdBQzlELE1BQU0sZUFDRjZLLEVBQWMsT0FDZEMsR0FBUyxFQUFJLFNBQ2J2SSxFQUFRLE9BQ1IvRSxFQUNBdU4sR0FBSUMsRUFBTSxRQUNWQyxFQUFPLFVBQ1BDLEVBQVMsV0FDVEMsRUFBVSxPQUNWQyxFQUFNLFNBQ05DLEVBQVEsVUFDUkMsRUFBUyxNQUNUQyxFQUFLLFFBQ0xDLEVBQVUsT0FBTSxvQkFFaEJDLEVBQXNCLE1BQ3BCNVAsRUFDSmdGLEdBQVEsT0FBOEJoRixFQUFPVCxHQUN6Q3NRLEdBQVEsU0FDUkMsRUFBYyxXQUNkelAsR0FBUSxTQUNSMFAsRUFBVSxTQUFhLE1BQ3ZCQyxHQUFZLE9BQVdELEVBQVNySixFQUFTdkMsSUFBS0EsR0FDOUM4TCxFQUErQkMsR0FBWUMsSUFDL0MsR0FBSUQsRUFBVSxDQUNaLE1BQU1FLEVBQU9MLEVBQVFNLGFBR0l6SSxJQUFyQnVJLEVBQ0ZELEVBQVNFLEdBRVRGLEVBQVNFLEVBQU1ELEVBRW5CLEdBRUlHLEVBQWlCTCxFQUE2QlgsR0FDOUNpQixFQUFjTixHQUE2QixDQUFDRyxFQUFNSSxNQUN0RCxPQUFPSixHQUVQLE1BQ0UzTyxTQUFVZ1AsRUFBa0IsTUFDNUJDLEVBQ0EvTyxPQUFRZ1AsSUFDTixPQUFtQixDQUNyQmpCLFFBQ0FDLFVBQ0FoTyxVQUNDLENBQ0RsQixLQUFNLFVBRVIsSUFBSWdCLEVBQ1ksU0FBWmtPLEdBQ0ZsTyxFQUFXcEIsRUFBTWtCLFlBQVlxUCxzQkFBc0JSLEVBQUtTLGNBQ3hEZixFQUFZTyxRQUFVNU8sR0FFdEJBLEVBQVdnUCxFQUViTCxFQUFLVixNQUFNcE8sV0FBYSxDQUFDakIsRUFBTWtCLFlBQVlDLE9BQU8sVUFBVyxDQUMzREMsV0FDQWlQLFVBQ0VyUSxFQUFNa0IsWUFBWUMsT0FBTyxZQUFhLENBQ3hDQyxTQUFVa04sRUFBY2xOLEVBQXNCLEtBQVhBLEVBQ25DaVAsUUFDQS9PLE9BQVFnUCxLQUNORyxLQUFLLEtBQ0wxQixHQUNGQSxFQUFRZ0IsRUFBTUksRUFDaEIsSUFFSU8sRUFBZ0JkLEVBQTZCWixHQUM3QzJCLEVBQWdCZixFQUE2QlIsR0FDN0N3QixFQUFhaEIsR0FBNkJHLElBQzlDLE1BQ0UzTyxTQUFVZ1AsRUFBa0IsTUFDNUJDLEVBQ0EvTyxPQUFRZ1AsSUFDTixPQUFtQixDQUNyQmpCLFFBQ0FDLFVBQ0FoTyxVQUNDLENBQ0RsQixLQUFNLFNBRVIsSUFBSWdCLEVBQ1ksU0FBWmtPLEdBQ0ZsTyxFQUFXcEIsRUFBTWtCLFlBQVlxUCxzQkFBc0JSLEVBQUtTLGNBQ3hEZixFQUFZTyxRQUFVNU8sR0FFdEJBLEVBQVdnUCxFQUViTCxFQUFLVixNQUFNcE8sV0FBYSxDQUFDakIsRUFBTWtCLFlBQVlDLE9BQU8sVUFBVyxDQUMzREMsV0FDQWlQLFVBQ0VyUSxFQUFNa0IsWUFBWUMsT0FBTyxZQUFhLENBQ3hDQyxTQUFVa04sRUFBY2xOLEVBQXNCLEtBQVhBLEVBQ25DaVAsTUFBTy9CLEVBQWMrQixFQUFRQSxHQUFvQixLQUFYalAsRUFDdENFLE9BQVFnUCxLQUNORyxLQUFLLEtBQ1RWLEVBQUtWLE1BQU01TSxRQUFVLEVBQ3JCc04sRUFBS1YsTUFBTWxOLFVBQVlnTSxFQUFTLEtBQzVCZSxHQUNGQSxFQUFPYSxFQUNULElBRUljLEVBQWVqQixFQUE2QlQsR0FVbEQsT0FBb0IsU0FBS0ksR0FBcUIsT0FBUyxDQUNyRFgsT0FBUUEsRUFDUkMsR0FBSUMsRUFDSlksUUFBU0EsRUFDVFgsUUFBU21CLEVBQ1RsQixVQUFXMEIsRUFDWHpCLFdBQVlnQixFQUNaZixPQUFRMEIsRUFDUnpCLFNBQVUwQixFQUNWekIsVUFBV3VCLEVBQ1hoQyxlQW5CMkJtQyxJQUNYLFNBQVp4QixHQUNGRSxFQUFNdUIsTUFBTXRCLEVBQVlPLFNBQVcsRUFBR2MsR0FFcENuQyxHQUVGQSxFQUFlZSxFQUFRTSxRQUFTYyxFQUNsQyxFQWFBeEIsUUFBcUIsU0FBWkEsRUFBcUIsS0FBT0EsR0FDcEMzSyxFQUFPLENBQ1IwQixTQUFVLENBQUNtQyxFQUFPd0ksSUFDSSxlQUFtQjNLLEdBQVUsT0FBUyxDQUN4RGdKLE9BQU8sT0FBUyxDQUNkNU0sUUFBUyxFQUNUTixVQUFXZ00sRUFBUyxLQUNwQjhDLFdBQXNCLFdBQVZ6SSxHQUF1QnNHLE9BQW9CdkgsRUFBWCxVQUMzQzNILEVBQU80SSxHQUFRNkcsRUFBT2hKLEVBQVMxRyxNQUFNMFAsT0FDeEN2TCxJQUFLNkwsR0FDSnFCLE1BR1QsSUEyRUF0QyxFQUFLd0MsZ0JBQWlCLEVBQ3RCLFMsNkpDMVBPLFNBQVNDLEVBQXFCclMsR0FDbkMsT0FBTyxFQUFBQyxFQUFBLElBQXFCLFdBQVlELEVBQzFDLENBQ0EsTUFDQSxHQURxQixPQUFTLENBQUMsRUFBR0UsRUFBQSxHQUFrQixFQUFBQyxFQUFBLEdBQXVCLFdBQVksQ0FBQyxPQUFRLFlBQWEsVyxjQ0g3RyxNQUFNQyxFQUFZLENBQUMsbUJBQW9CLGFBQWMsa0JBQW1CLFlBQWEsaUJBQWtCLFlBQWEsWUFBYSxRQUFTLFFBd0JwSWtTLEdBQVksRUFBQWhTLEVBQUEsSUFBT0MsRUFBQSxHQUFlLENBQ3RDQyxrQkFBbUJDLElBQVEsRUFBQUMsRUFBQSxHQUFzQkQsSUFBa0IsWUFBVEEsRUFDMURFLEtBQU0sV0FDTlgsS0FBTSxPQUNOWSxrQkFBbUIsQ0FBQ0MsRUFBT0MsS0FDekIsTUFBTSxXQUNKQyxHQUNFRixFQUNKLE1BQU8sS0FBSSxRQUErQkEsRUFBT0MsSUFBVUMsRUFBV0Msa0JBQW9CRixFQUFPRyxVQUFVLEdBUjdGLEVBVWYsRUFDREMsUUFDQUgsaUJBR0EsSUFBSVEsRUFEaUMsVUFBdkJMLEVBQU1HLFFBQVFDLEtBQ0Usc0JBQXdCLDJCQUl0RCxPQUhJSixFQUFNVSxPQUNSTCxFQUFrQixRQUFRTCxFQUFNVSxLQUFLUCxRQUFRb0MsT0FBT0MseUJBQXlCeEMsRUFBTVUsS0FBSytCLFFBQVFDLG9CQUUzRixPQUFTLENBQ2RqQyxTQUFVLFlBQ1RaLEVBQVd3UixhQUFlLENBQzNCLFlBQWEsQ0FDWG5MLFVBQVcsTUFFWHJHLEVBQVdDLGtCQUFvQixDQUNqQyxXQUFZLENBQ1Y4QixhQUFjLGNBQWM1QixFQUFNVSxNQUFRVixHQUFPRyxRQUFRTixFQUFXZ0MsT0FBT0MsT0FDM0VDLEtBQU0sRUFDTkMsT0FBUSxFQUVSQyxRQUFTLEtBQ1R4QixTQUFVLFdBQ1Z5QixNQUFPLEVBQ1BDLFVBQVcsWUFDWGxCLFdBQVlqQixFQUFNa0IsWUFBWUMsT0FBTyxZQUFhLENBQ2hEQyxTQUFVcEIsRUFBTWtCLFlBQVlFLFNBQVNDLFFBQ3JDQyxPQUFRdEIsRUFBTWtCLFlBQVlJLE9BQU9DLFVBRW5DYSxjQUFlLFFBRWpCLENBQUMsS0FBSyxFQUFhWCxpQkFBa0IsQ0FHbkNVLFVBQVcsMkJBRWIsQ0FBQyxLQUFLLEVBQWFFLFNBQVUsQ0FDM0Isc0JBQXVCLENBQ3JCQyxtQkFBb0J0QyxFQUFNVSxNQUFRVixHQUFPRyxRQUFRa0MsTUFBTVAsT0FHM0QsWUFBYSxDQUNYRixhQUFjLGFBQWF2QixJQUMzQjBCLEtBQU0sRUFDTkMsT0FBUSxFQUVSQyxRQUFTLFdBQ1R4QixTQUFVLFdBQ1Z5QixNQUFPLEVBQ1BqQixXQUFZakIsRUFBTWtCLFlBQVlDLE9BQU8sc0JBQXVCLENBQzFEQyxTQUFVcEIsRUFBTWtCLFlBQVlFLFNBQVNDLFVBRXZDZSxjQUFlLFFBRWpCLENBQUMsZ0JBQWdCLEVBQWFWLGNBQWMsRUFBYVcsaUJBQWtCLENBQ3pFVCxhQUFjLGNBQWM1QixFQUFNVSxNQUFRVixHQUFPRyxRQUFRd0MsS0FBS0MsVUFFOUQsdUJBQXdCLENBQ3RCaEIsYUFBYyxhQUFhdkIsTUFHL0IsQ0FBQyxLQUFLLEVBQWFxQixtQkFBb0IsQ0FDckNtQixrQkFBbUIsV0FFckIsSUFFRXlPLEdBQWEsRUFBQWxTLEVBQUEsSUFBT0MsRUFBQSxHQUFnQixDQUN4Q0ksS0FBTSxXQUNOWCxLQUFNLFFBQ05ZLGtCQUFtQixNQUhGLENBSWhCLENBQUMsR0FDRTZGLEVBQXFCLGNBQWlCLFNBQWUxQixFQUFTQyxHQUNsRSxJQUFJQyxFQUFNQyxFQUFhQyxFQUFPQyxFQUM5QixNQUFNdkUsR0FBUSxPQUFnQixDQUM1QkEsTUFBT2tFLEVBQ1BwRSxLQUFNLGNBRUYsaUJBQ0ZLLEVBQWdCLFdBQ2hCcUUsRUFBYSxDQUFDLEVBQ2RDLGdCQUFpQkMsRUFBbUIsVUFDcENDLEdBQVksRUFBSyxlQUNqQkMsRUFBaUIsUUFBTyxVQUN4QnJCLEdBQVksRUFBSyxVQUNqQnNCLEVBQVMsTUFDVEMsRUFBUSxDQUFDLEVBQUMsS0FDVkMsRUFBTyxRQUNML0UsRUFDSmdGLEdBQVEsT0FBOEJoRixFQUFPVCxHQUN6QzBGLEVBL0drQi9FLEtBQ3hCLE1BQU0sUUFDSitFLEVBQU8saUJBQ1A5RSxHQUNFRCxFQUNFNEUsRUFBUSxDQUNaSSxLQUFNLENBQUMsUUFBUy9FLEdBQW9CLGFBQ3BDZ0YsTUFBTyxDQUFDLFVBRUpDLEdBQWtCLEVBQUFDLEVBQUEsR0FBZVAsRUFBTzBNLEVBQXNCdk0sR0FDcEUsT0FBTyxPQUFTLENBQUMsRUFBR0EsRUFBU0csRUFBZ0IsRUFxRzdCRSxDQUFrQnRGLEdBSTVCNFIsRUFBdUIsQ0FDM0IxTSxLQUFNLENBQ0poRixXQUxlLENBQ2pCQyxzQkFPSXNFLEdBQWdDLE1BQWJJLEVBQW9CQSxFQUFZSCxJQUF1QixFQUFBYyxFQUFBLEdBQXVCLE1BQWJYLEVBQW9CQSxFQUFZSCxFQUFxQmtOLEdBQXdCQSxFQUNqS25NLEVBQTBGLE9BQTlFckIsRUFBcUMsT0FBN0JDLEVBQWNTLEVBQU1JLE1BQWdCYixFQUFjRyxFQUFXa0IsTUFBZ0J0QixFQUFPcU4sRUFDeEc5TCxFQUFnRyxPQUFuRnJCLEVBQXdDLE9BQS9CQyxFQUFlTyxFQUFNSyxPQUFpQlosRUFBZUMsRUFBV29CLE9BQWlCdEIsRUFBUXFOLEVBQ3JILE9BQW9CLFNBQUtqUyxFQUFBLElBQVcsT0FBUyxDQUMzQ29GLE1BQU8sQ0FDTEksS0FBTU8sRUFDTk4sTUFBT1EsR0FFVGQsVUFBV0osRUFDWEUsVUFBV0EsRUFDWEMsZUFBZ0JBLEVBQ2hCckIsVUFBV0EsRUFDWFksSUFBS0EsRUFDTFksS0FBTUEsR0FDTEMsRUFBTyxDQUNSQyxRQUFTQSxJQUViLElBMkxBVyxFQUFNQyxRQUFVLFFBQ2hCLFMsa1JDaFZBLE1BQU10RyxFQUFZLENBQUMsbUJBQW9CLGVBQWdCLFlBQWEsWUFBYSxRQUFTLGFBQWMsa0JBQW1CLGVBQWdCLFdBQVksK0JBQWdDLGVBQWdCLFFBQVMsWUFBYSxLQUFNLGlCQUFrQixhQUFjLFdBQVksU0FBVSxVQUFXLFVBQVcsWUFBYSxPQUFRLFNBQVUsV0FBWSxVQUFXLFVBQVcsWUFBYSxVQUFXLGNBQWUsV0FBWSxlQUFnQixPQUFRLE9BQVEsWUFBYSxRQUFTLGlCQUFrQixPQUFRLFNBc0J0ZXNTLEVBQXdCLENBQUM3UixFQUFPQyxLQUMzQyxNQUFNLFdBQ0pDLEdBQ0VGLEVBQ0osTUFBTyxDQUFDQyxFQUFPaUYsS0FBTWhGLEVBQVd3UixhQUFlelIsRUFBT3lSLFlBQWF4UixFQUFXaUQsZ0JBQWtCbEQsRUFBTytHLGFBQWM5RyxFQUFXbUQsY0FBZ0JwRCxFQUFPNlIsV0FBWTVSLEVBQVd3QyxPQUFTekMsRUFBT3lDLE1BQTJCLFVBQXBCeEMsRUFBV3VELE1BQW9CeEQsRUFBTzhSLFVBQVc3UixFQUFXcUQsV0FBYXRELEVBQU9zRCxVQUFXckQsRUFBV2dDLE9BQVNqQyxFQUFPLFNBQVEsT0FBV0MsRUFBV2dDLFVBQVdoQyxFQUFXeUUsV0FBYTFFLEVBQU8wRSxVQUFXekUsRUFBVzBELGFBQWUzRCxFQUFPMkQsWUFBWSxFQUVoYm9PLEVBQXlCLENBQUNoUyxFQUFPQyxLQUM1QyxNQUFNLFdBQ0pDLEdBQ0VGLEVBQ0osTUFBTyxDQUFDQyxFQUFPa0YsTUFBMkIsVUFBcEJqRixFQUFXdUQsTUFBb0J4RCxFQUFPZ1MsZUFBZ0IvUixFQUFXcUQsV0FBYXRELEVBQU9pUyxlQUFvQyxXQUFwQmhTLEVBQVc2RSxNQUFxQjlFLEVBQU9rUyxnQkFBaUJqUyxFQUFXaUQsZ0JBQWtCbEQsRUFBT21TLGtCQUFtQmxTLEVBQVdtRCxjQUFnQnBELEVBQU9vUyxnQkFBaUJuUyxFQUFXMEQsYUFBZTNELEVBQU9xUyxpQkFBaUIsRUF5QnBVQyxHQUFnQixRQUFPLE1BQU8sQ0FDekN6UyxLQUFNLGVBQ05YLEtBQU0sT0FDTlksa0JBQW1COFIsR0FIUSxFQUkxQixFQUNEeFIsUUFDQUgsaUJBQ0ksT0FBUyxDQUFDLEVBQUdHLEVBQU0rSSxXQUFXb0osTUFBTyxDQUN6Q3RRLE9BQVE3QixFQUFNVSxNQUFRVixHQUFPRyxRQUFRd0MsS0FBS0MsUUFDMUN3UCxXQUFZLFdBRVp6RyxVQUFXLGFBRVhsTCxTQUFVLFdBQ1Y0UixPQUFRLE9BQ1J4TSxRQUFTLGNBQ1R5TSxXQUFZLFNBQ1osQ0FBQyxLQUFLLElBQWlCNVEsWUFBYSxDQUNsQ0csT0FBUTdCLEVBQU1VLE1BQVFWLEdBQU9HLFFBQVF3QyxLQUFLakIsU0FDMUMyUSxPQUFRLFlBRVR4UyxFQUFXcUQsWUFBYSxPQUFTLENBQ2xDQyxRQUFTLGFBQ1ksVUFBcEJ0RCxFQUFXdUQsTUFBb0IsQ0FDaENDLFdBQVksSUFDVnhELEVBQVd5RSxXQUFhLENBQzFCOEIsTUFBTyxXQUVJbU0sR0FBcUIsUUFBTyxRQUFTLENBQ2hEOVMsS0FBTSxlQUNOWCxLQUFNLFFBQ05ZLGtCQUFtQmlTLEdBSGEsRUFJL0IsRUFDRDNSLFFBQ0FILGlCQUVBLE1BQU1LLEVBQStCLFVBQXZCRixFQUFNRyxRQUFRQyxLQUN0Qm9TLEdBQWMsT0FBUyxDQUMzQjNRLE1BQU8sZ0JBQ043QixFQUFNVSxLQUFPLENBQ2QrQixRQUFTekMsRUFBTVUsS0FBSytCLFFBQVFnUSxrQkFDMUIsQ0FDRmhRLFFBQVN2QyxFQUFRLElBQU8sSUFDdkIsQ0FDRGUsV0FBWWpCLEVBQU1rQixZQUFZQyxPQUFPLFVBQVcsQ0FDOUNDLFNBQVVwQixFQUFNa0IsWUFBWUUsU0FBU0MsWUFHbkNxUixFQUFvQixDQUN4QmpRLFFBQVMsZ0JBRUxrUSxFQUFxQjNTLEVBQU1VLEtBQU8sQ0FDdEMrQixRQUFTekMsRUFBTVUsS0FBSytCLFFBQVFnUSxrQkFDMUIsQ0FDRmhRLFFBQVN2QyxFQUFRLElBQU8sSUFFMUIsT0FBTyxPQUFTLENBQ2QwUyxLQUFNLFVBQ05DLGNBQWUsVUFDZmhSLE1BQU8sZUFDUHNCLFFBQVMsWUFDVDZDLE9BQVEsRUFDUjJGLFVBQVcsY0FDWG1ILFdBQVksT0FDWkMsT0FBUSxXQUVSbk4sT0FBUSxFQUVSb04sd0JBQXlCLGNBQ3pCbk4sUUFBUyxRQUVURSxTQUFVLEVBQ1ZLLE1BQU8sT0FFUDZNLGNBQWUsdUJBQ2ZDLGtCQUFtQixPQUNuQiwrQkFBZ0NWLEVBQ2hDLHNCQUF1QkEsRUFFdkIsMEJBQTJCQSxFQUUzQiwyQkFBNEJBLEVBRTVCLFVBQVcsQ0FDVFcsUUFBUyxHQUdYLFlBQWEsQ0FDWEMsVUFBVyxRQUViLCtCQUFnQyxDQUU5QkMsaUJBQWtCLFFBR3BCLENBQUMsK0JBQStCLElBQWlCaEMsaUJBQWtCLENBQ2pFLCtCQUFnQ3FCLEVBQ2hDLHNCQUF1QkEsRUFFdkIsMEJBQTJCQSxFQUUzQiwyQkFBNEJBLEVBRTVCLHFDQUFzQ0MsRUFDdEMsNEJBQTZCQSxFQUU3QixnQ0FBaUNBLEVBRWpDLGlDQUFrQ0EsR0FFcEMsQ0FBQyxLQUFLLElBQWlCalIsWUFBYSxDQUNsQ2UsUUFBUyxFQUVUaUIscUJBQXNCMUQsRUFBTVUsTUFBUVYsR0FBT0csUUFBUXdDLEtBQUtqQixVQUUxRCxxQkFBc0IsQ0FDcEJ3UixrQkFBbUIsUUFDbkJELGNBQWUsa0JBRUksVUFBcEJwVCxFQUFXdUQsTUFBb0IsQ0FDaENDLFdBQVksR0FDWHhELEVBQVdxRCxXQUFhLENBQ3pCNlAsT0FBUSxPQUNSTyxPQUFRLE9BQ1JuUSxRQUFTLEVBQ1RFLFdBQVksR0FDUyxXQUFwQnhELEVBQVc2RSxNQUFxQixDQUVqQzZPLGNBQWUsYUFDZixJQUVFQyxHQUFpQyxTQUFLLElBQWMsQ0FDeEQ1VCxPQUFRLENBQ04sMkJBQTRCLENBQzFCNlQsS0FBTSxDQUNKNU4sUUFBUyxVQUdiLGtDQUFtQyxDQUNqQzROLEtBQU0sQ0FDSjVOLFFBQVMsYUEyZmpCLEVBaGYrQixjQUFpQixTQUFtQmhDLEVBQVNDLEdBQzFFLElBQUk0UCxFQUNKLE1BQU0vVCxHQUFRLE9BQWdCLENBQzVCQSxNQUFPa0UsRUFDUHBFLEtBQU0sa0JBR0osbUJBQW9Ca1UsRUFBZSxhQUNuQ0MsRUFBWSxVQUNaQyxFQUFTLFVBQ1R2TixFQUFTLFdBQ1RuQyxFQUFhLENBQUMsRUFBQyxnQkFDZkMsRUFBa0IsQ0FBQyxFQUFDLGFBQ3BCMFAsRUFBWSxTQUNacFMsRUFBUSw2QkFDUnFTLEVBQTRCLGFBQzVCL1EsRUFBWSxVQUNac0IsR0FBWSxFQUFLLEdBQ2pCMFAsRUFBRSxlQUNGelAsRUFBaUIsUUFDakI2QyxXQUFZNk0sRUFBaUIsQ0FBQyxFQUM5QkMsU0FBVUMsRUFBWSxRQUN0QkMsRUFBTyxRQUNQQyxFQUFPLFVBQ1BuUixHQUFZLEVBQUssS0FDakJ6RCxFQUFJLE9BQ0ppSSxFQUFNLFNBQ040TSxFQUFRLFFBQ1JDLEVBQU8sUUFDUDFNLEVBQU8sVUFDUDJNLEVBQVMsUUFDVEMsRUFBTyxZQUNQakMsRUFBVyxTQUNYa0MsRUFBUSxhQUNSQyxFQUFZLEtBQ1pDLEdBQUksVUFDSnBRLEdBQVksQ0FBQyxFQUFDLE1BQ2RDLEdBQVEsQ0FBQyxFQUFDLGVBQ1YzQixHQUFjLEtBQ2Q0QixHQUFPLE9BQ1BzRCxNQUFPNk0sSUFDTGxWLEVBQ0pnRixJQUFRLE9BQThCaEYsRUFBT1QsR0FDekM4SSxHQUFnQyxNQUF4QmlNLEVBQWVqTSxNQUFnQmlNLEVBQWVqTSxNQUFRNk0sSUFFbEU3RSxRQUFTOEUsSUFDUCxTQUFzQixNQUFUOU0sSUFDWGtNLEdBQVcsV0FDWGEsR0FBd0IsZUFBa0JDLElBQ0YsR0FLM0MsSUFDR0MsSUFBaUIsT0FBV2YsR0FBVUMsRUFBY0YsRUFBZW5RLElBQUtpUixLQUN2RXRULEdBQVM2RixJQUFjLFlBQWUsR0FDdkNlLElBQWlCLFNBVWpCZSxJQUFNLE9BQWlCLENBQzNCekosUUFDQTBJLGtCQUNBRCxPQUFRLENBQUMsUUFBUyxXQUFZLFFBQVMsY0FBZSxPQUFRLFdBQVksWUFFNUVnQixHQUFJM0gsUUFBVTRHLEdBQWlCQSxHQUFlNUcsUUFBVUEsR0FJeEQsYUFBZ0IsTUFDVDRHLElBQWtCM0csR0FBWUQsS0FDakM2RixJQUFXLEdBQ1BJLEdBQ0ZBLElBRUosR0FDQyxDQUFDVyxHQUFnQjNHLEVBQVVELEdBQVNpRyxJQUN2QyxNQUFNRSxHQUFXUyxJQUFrQkEsR0FBZVQsU0FDNUNELEdBQVVVLElBQWtCQSxHQUFlVixRQUMzQ3VOLEdBQWEsZUFBa0JDLEtBQy9CLFFBQVNBLEdBQ1B2TixJQUNGQSxLQUVPRCxJQUNUQSxJQUNGLEdBQ0MsQ0FBQ0MsR0FBVUQsTUFDZCxRQUFrQixLQUNabU4sSUFDRkksR0FBVyxDQUNUbE4sVUFFSixHQUNDLENBQUNBLEdBQU9rTixHQUFZSixLQXVEdkIsYUFBZ0IsS0FDZEksR0FBV2hCLEdBQVNsRSxRQUFRLEdBRTNCLElBU0gsSUFBSW9GLEdBQWlCN1EsRUFDakI2QyxHQUFhNk0sRUFDYi9RLEdBQWdDLFVBQW5Ca1MsS0FPYmhPLEdBTkV3TixJQU1XLE9BQVMsQ0FDcEJsUSxVQUFNNkMsRUFDTjhNLFFBQVNPLEdBQ1RSLFFBQVNRLElBQ1J4TixLQUVVLE9BQVMsQ0FDcEIxQyxVQUFNNkMsRUFDTjZNLFVBQ0FDLFdBQ0NqTixJQUVMZ08sR0FBaUIsS0FRbkIsYUFBZ0IsS0FDVi9NLElBQ0ZBLEdBQWV6QixnQkFBZ0J5TyxRQUFRdlMsSUFDekMsR0FDQyxDQUFDdUYsR0FBZ0J2RixLQUNwQixNQUFNakQsSUFBYSxPQUFTLENBQUMsRUFBR0YsRUFBTyxDQUNyQ2tDLE1BQU91SCxHQUFJdkgsT0FBUyxVQUNwQkgsU0FBVTBILEdBQUkxSCxTQUNkc0IsZUFDQVgsTUFBTytHLEdBQUkvRyxNQUNYWixRQUFTMkgsR0FBSTNILFFBQ2I0UCxZQUFhaEosR0FDYi9ELFlBQ0FmLFlBQWE2RixHQUFJN0YsWUFDakJMLFlBQ0FFLEtBQU1nRyxHQUFJaEcsS0FDVk4sa0JBQ0E0QixVQUVJRSxHQXRZa0IvRSxLQUN4QixNQUFNLFFBQ0orRSxFQUFPLE1BQ1AvQyxFQUFLLFNBQ0xILEVBQVEsTUFDUlcsRUFBSyxhQUNMVyxFQUFZLFFBQ1p2QixFQUFPLFlBQ1A0UCxFQUFXLFVBQ1gvTSxFQUFTLFlBQ1RmLEVBQVcsVUFDWEwsRUFBUyxTQUNUd1IsRUFBUSxLQUNSdFIsRUFBSSxlQUNKTixFQUFjLEtBQ2Q0QixHQUNFN0UsRUFDRTRFLEVBQVEsQ0FDWkksS0FBTSxDQUFDLE9BQVEsU0FBUSxPQUFXaEQsS0FBVUgsR0FBWSxXQUFZVyxHQUFTLFFBQVNpQyxHQUFhLFlBQWE3QyxHQUFXLFVBQVc0UCxHQUFlLGNBQWVqTyxHQUFpQixXQUFUQSxHQUFxQixRQUFPLE9BQVdBLEtBQVNGLEdBQWEsWUFBYUosR0FBa0IsZUFBZ0JFLEdBQWdCLGFBQWNPLEdBQWUsY0FBZW1SLEdBQVksWUFDaFc1UCxNQUFPLENBQUMsUUFBU3BELEdBQVksV0FBcUIsV0FBVGdELEdBQXFCLGtCQUFtQnhCLEdBQWEsaUJBQTJCLFVBQVRFLEdBQW9CLGlCQUFrQkcsR0FBZSxtQkFBb0JULEdBQWtCLG9CQUFxQkUsR0FBZ0Isa0JBQW1CMFIsR0FBWSxhQUVqUixPQUFPLE9BQWVqUSxFQUFPLEVBQUE2USxFQUEwQjFRLEVBQVEsRUFpWC9DSyxDQUFrQnBGLElBQzVCd0YsR0FBT1osR0FBTUksTUFBUVYsRUFBV2tCLE1BQVE2TSxFQUN4Q3FELEdBQVkvUSxHQUFVSyxNQUFRVCxFQUFnQlMsTUFBUSxDQUFDLEVBQ3ZEVSxHQUFRZCxHQUFNSyxPQUFTWCxFQUFXb0IsT0FBU2dOLEVBRWpELE9BREFuTCxJQUFhLE9BQVMsQ0FBQyxFQUFHQSxHQUFvRCxPQUF2Q3NNLEVBQW1CbFAsR0FBVU0sT0FBaUI0TyxFQUFtQnRQLEVBQWdCVSxRQUNwRyxVQUFNLFdBQWdCLENBQ3hDdUIsU0FBVSxFQUFFME4sR0FBZ0NQLEdBQWdDLFVBQU1uTyxJQUFNLE9BQVMsQ0FBQyxFQUFHa1EsS0FBWSxPQUFnQmxRLEtBQVMsQ0FDeEl4RixZQUFZLE9BQVMsQ0FBQyxFQUFHQSxHQUFZMFYsR0FBVTFWLGFBQzlDLENBQ0RpRSxJQUFLQSxFQUNMeVEsUUFsRWdCaUIsSUFDZHRCLEdBQVNsRSxTQUFXd0YsRUFBTUMsZ0JBQWtCRCxFQUFNRSxRQUNwRHhCLEdBQVNsRSxRQUFRMkYsUUFFZnBCLEdBQ0ZBLEVBQVFpQixFQUNWLEdBNkRHN1EsR0FBTyxDQUNSMkIsV0FBVyxPQUFLMUIsR0FBUUMsS0FBTTBRLEdBQVVqUCxVQUFXQSxFQUFXb08sR0FBWSx5QkFDMUVyTyxTQUFVLENBQUN2RCxJQUE2QixTQUFLLElBQW1CaUYsU0FBVSxDQUN4RUMsTUFBTyxLQUNQM0IsVUFBdUIsU0FBS2QsSUFBTyxPQUFTLENBQzFDMUYsV0FBWUEsR0FDWixlQUFnQnVKLEdBQUkvRyxNQUNwQixtQkFBb0JzUixFQUNwQkMsYUFBY0EsRUFDZEMsVUFBV0EsRUFDWEMsYUFBY0EsRUFDZHBTLFNBQVUwSCxHQUFJMUgsU0FDZHNTLEdBQUlBLEVBQ0o0QixpQkFqRGVKLElBRXJCTixHQUFtQyx5QkFBeEJNLEVBQU12QyxjQUEyQ2lCLEdBQVNsRSxRQUFVLENBQzdFaEksTUFBTyxLQUNQLEVBOENJdkksS0FBTUEsRUFDTitTLFlBQWFBLEVBQ2JrQyxTQUFVQSxFQUNWak8sU0FBVTJDLEdBQUkzQyxTQUNkbU8sS0FBTUEsR0FDTjVNLE1BQU9BLEdBQ1B3TSxVQUFXQSxFQUNYQyxRQUFTQSxFQUNUL1AsS0FBTUEsSUFDTDBDLEtBQWEsT0FBZ0I3QixLQUFVLENBQ3hDMEMsR0FBSW1OLEdBQ0p2VixZQUFZLE9BQVMsQ0FBQyxFQUFHQSxHQUFZdUgsR0FBV3ZILGFBQy9DLENBQ0RpRSxJQUFLbVIsR0FDTDNPLFdBQVcsT0FBSzFCLEdBQVFFLE1BQU9zQyxHQUFXZCxVQUFXb08sR0FBWSx5QkFDakVoTixPQXZJVzhOLElBQ2I5TixHQUNGQSxFQUFPOE4sR0FFTHZCLEVBQWV2TSxRQUNqQnVNLEVBQWV2TSxPQUFPOE4sR0FFcEJuTixJQUFrQkEsR0FBZVgsT0FDbkNXLEdBQWVYLE9BQU84TixHQUV0QmxPLElBQVcsRUFDYixFQTZITWdOLFNBM0hhLENBQUNrQixLQUFVSyxLQUM5QixJQUFLZixHQUFjLENBQ2pCLE1BQU1nQixFQUFVTixFQUFNRSxRQUFVeEIsR0FBU2xFLFFBQ3pDLEdBQWUsTUFBWDhGLEVBQ0YsTUFBTSxJQUFJQyxPQUEyTixPQUF1QixJQUU5UGIsR0FBVyxDQUNUbE4sTUFBTzhOLEVBQVE5TixPQUVuQixDQUNJaU0sRUFBZUssVUFDakJMLEVBQWVLLFNBQVNrQixLQUFVSyxHQUloQ3ZCLEdBQ0ZBLEVBQVNrQixLQUFVSyxFQUNyQixFQTJHTWhPLFFBNUpZMk4sSUFHZHBNLEdBQUkxSCxTQUNOOFQsRUFBTVEsbUJBR0puTyxHQUNGQSxFQUFRMk4sR0FFTnZCLEVBQWVwTSxTQUNqQm9NLEVBQWVwTSxRQUFRMk4sR0FFckJuTixJQUFrQkEsR0FBZVIsUUFDbkNRLEdBQWVSLFFBQVEyTixHQUV2QmxPLElBQVcsR0FDYixPQTZJTXRFLEVBQWMyUixFQUFlQSxHQUFhLE9BQVMsQ0FBQyxFQUFHdkwsR0FBSyxDQUM5RHRHLHFCQUNJLFdBR1osRyxrRUM1ZE8sU0FBU21ULEVBQXlCblgsR0FDdkMsT0FBTyxRQUFxQixlQUFnQkEsRUFDOUMsQ0FDQSxNQUNBLEdBRHlCLE9BQXVCLGVBQWdCLENBQUMsT0FBUSxjQUFlLFVBQVcsV0FBWSxlQUFnQixhQUFjLFFBQVMsWUFBYSxZQUFhLGlCQUFrQixZQUFhLGNBQWUsV0FBWSxRQUFTLGlCQUFrQixpQkFBa0Isa0JBQW1CLG9CQUFxQixrQkFBbUIsb0IsaUJDQzNVLFNBQVNvWCxFQUFTbE8sR0FDdkIsT0FBZ0IsTUFBVEEsS0FBbUJtTyxNQUFNQyxRQUFRcE8sSUFBMkIsSUFBakJBLEVBQU1xTyxPQUMxRCxDQVNPLFNBQVNDLEVBQVNuQixFQUFLb0IsR0FBTSxHQUNsQyxPQUFPcEIsSUFBUWUsRUFBU2YsRUFBSW5OLFFBQXdCLEtBQWRtTixFQUFJbk4sT0FBZ0J1TyxHQUFPTCxFQUFTZixFQUFJckIsZUFBc0MsS0FBckJxQixFQUFJckIsYUFDckcsQ0FRTyxTQUFTMEMsRUFBZXJCLEdBQzdCLE9BQU9BLEVBQUlyUyxjQUNiLEMsd0xDM0JPLFNBQVMyVCxFQUEyQjNYLEdBQ3pDLE9BQU8sRUFBQUMsRUFBQSxJQUFxQixlQUFnQkQsRUFDOUMsQ0FDQSxNQUNBLEdBRHlCLEVBQUFHLEVBQUEsR0FBdUIsZUFBZ0IsQ0FBQyxPQUFRLGlCQUFrQixVQUFXLFdBQVksUUFBUyxTQUFVLFdBQVksYSxjQ0RqSixNQUFNQyxFQUFZLENBQUMsV0FBWSxZQUFhLFFBQVMsWUFBYSxXQUFZLFFBQVMsU0FBVSxVQUFXLFlBNEIvRndYLEdBQWdCLEVBQUF0WCxFQUFBLElBQU8sUUFBUyxDQUMzQ0ssS0FBTSxlQUNOWCxLQUFNLE9BQ05ZLGtCQUFtQixFQUNqQkcsY0FDQ0QsS0FDTSxPQUFTLENBQUMsRUFBR0EsRUFBT2lGLEtBQTJCLGNBQXJCaEYsRUFBV2dDLE9BQXlCakMsRUFBTytXLGVBQWdCOVcsRUFBV29ILFFBQVVySCxFQUFPcUgsU0FOL0YsRUFRMUIsRUFDRGpILFFBQ0FILGlCQUNJLE9BQVMsQ0FDYmdDLE9BQVE3QixFQUFNVSxNQUFRVixHQUFPRyxRQUFRd0MsS0FBS21HLFdBQ3pDOUksRUFBTStJLFdBQVdvSixNQUFPLENBQ3pCQyxXQUFZLFdBQ1pqUCxRQUFTLEVBQ1QxQyxTQUFVLFdBQ1YsQ0FBQyxLQUFLLEVBQWlCZ0IsV0FBWSxDQUNqQ0ksT0FBUTdCLEVBQU1VLE1BQVFWLEdBQU9HLFFBQVFOLEVBQVdnQyxPQUFPQyxNQUV6RCxDQUFDLEtBQUssRUFBaUJKLFlBQWEsQ0FDbENHLE9BQVE3QixFQUFNVSxNQUFRVixHQUFPRyxRQUFRd0MsS0FBS2pCLFVBRTVDLENBQUMsS0FBSyxFQUFpQlcsU0FBVSxDQUMvQlIsT0FBUTdCLEVBQU1VLE1BQVFWLEdBQU9HLFFBQVFrQyxNQUFNUCxVQUd6QzhVLEdBQW9CLEVBQUF4WCxFQUFBLElBQU8sT0FBUSxDQUN2Q0ssS0FBTSxlQUNOWCxLQUFNLFdBQ05ZLGtCQUFtQixDQUFDQyxFQUFPQyxJQUFXQSxFQUFPaVgsVUFIckIsRUFJdkIsRUFDRDdXLFlBQ0ksQ0FDSixDQUFDLEtBQUssRUFBaUJxQyxTQUFVLENBQy9CUixPQUFRN0IsRUFBTVUsTUFBUVYsR0FBT0csUUFBUWtDLE1BQU1QLFVBaUcvQyxFQTlGK0IsY0FBaUIsU0FBbUIrQixFQUFTQyxHQUMxRSxNQUFNbkUsR0FBUSxPQUFnQixDQUM1QkEsTUFBT2tFLEVBQ1BwRSxLQUFNLGtCQUVGLFNBQ0Y0RyxFQUFRLFVBQ1JDLEVBQVMsVUFDVEMsRUFBWSxTQUNWNUcsRUFDSmdGLEdBQVEsT0FBOEJoRixFQUFPVCxHQUN6Q21KLEdBQWlCLEVBQUFJLEVBQUEsS0FDakJXLEdBQU0sRUFBQWpCLEVBQUEsR0FBaUIsQ0FDM0J4SSxRQUNBMEksaUJBQ0FELE9BQVEsQ0FBQyxRQUFTLFdBQVksVUFBVyxXQUFZLFFBQVMsWUFFMUR2SSxHQUFhLE9BQVMsQ0FBQyxFQUFHRixFQUFPLENBQ3JDa0MsTUFBT3VILEVBQUl2SCxPQUFTLFVBQ3BCMEUsWUFDQTdFLFNBQVUwSCxFQUFJMUgsU0FDZFcsTUFBTytHLEVBQUkvRyxNQUNYNEUsT0FBUW1DLEVBQUluQyxPQUNaeEYsUUFBUzJILEVBQUkzSCxRQUNiZ0YsU0FBVTJDLEVBQUkzQyxXQUVWN0IsRUFoRmtCL0UsS0FDeEIsTUFBTSxRQUNKK0UsRUFBTyxNQUNQL0MsRUFBSyxRQUNMSixFQUFPLFNBQ1BDLEVBQVEsTUFDUlcsRUFBSyxPQUNMNEUsRUFBTSxTQUNOUixHQUNFNUcsRUFDRTRFLEVBQVEsQ0FDWkksS0FBTSxDQUFDLE9BQVEsU0FBUSxFQUFBYyxFQUFBLEdBQVc5RCxLQUFVSCxHQUFZLFdBQVlXLEdBQVMsUUFBUzRFLEdBQVUsU0FBVXhGLEdBQVcsVUFBV2dGLEdBQVksWUFDNUlvUSxTQUFVLENBQUMsV0FBWXhVLEdBQVMsVUFFbEMsT0FBTyxFQUFBMkMsRUFBQSxHQUFlUCxFQUFPZ1MsRUFBNEI3UixFQUFRLEVBa0VqREssQ0FBa0JwRixHQUNsQyxPQUFvQixVQUFNNlcsR0FBZSxPQUFTLENBQ2hEek8sR0FBSTFCLEVBQ0oxRyxXQUFZQSxFQUNaeUcsV0FBVyxFQUFBNEIsRUFBQSxHQUFLdEQsRUFBUUMsS0FBTXlCLEdBQzlCeEMsSUFBS0EsR0FDSmEsRUFBTyxDQUNSMEIsU0FBVSxDQUFDQSxFQUFVK0MsRUFBSTNDLFdBQXlCLFVBQU1tUSxFQUFtQixDQUN6RS9XLFdBQVlBLEVBQ1osZUFBZSxFQUNmeUcsVUFBVzFCLEVBQVFpUyxTQUNuQnhRLFNBQVUsQ0FBQyxJQUFVLFVBRzNCLEksY0M1R08sU0FBU3lRLEVBQTRCaFksR0FDMUMsT0FBTyxFQUFBQyxFQUFBLElBQXFCLGdCQUFpQkQsRUFDL0MsRUFDMEIsRUFBQUcsRUFBQSxHQUF1QixnQkFBaUIsQ0FBQyxPQUFRLFVBQVcsV0FBWSxRQUFTLFdBQVksV0FBWSxjQUFlLFlBQWEsU0FBVSxXQUFZLFdBQVksU0FBVSxhQUEzTSxNQ0RNLEVBQVksQ0FBQyxtQkFBb0IsU0FBVSxTQUFVLFVBQVcsYUE4QmhFOFgsR0FBaUIsRUFBQTNYLEVBQUEsSUFBTyxFQUFXLENBQ3ZDRSxrQkFBbUJDLElBQVEsRUFBQUMsRUFBQSxHQUFzQkQsSUFBa0IsWUFBVEEsRUFDMURFLEtBQU0sZ0JBQ05YLEtBQU0sT0FDTlksa0JBQW1CLENBQUNDLEVBQU9DLEtBQ3pCLE1BQU0sV0FDSkMsR0FDRUYsRUFDSixNQUFPLENBQUMsQ0FDTixDQUFDLE1BQU0sRUFBaUJrWCxZQUFhalgsRUFBT2lYLFVBQzNDalgsRUFBT2lGLEtBQU1oRixFQUFXd1IsYUFBZXpSLEVBQU95UixZQUFpQyxVQUFwQnhSLEVBQVd1RCxNQUFvQnhELEVBQU84UixVQUFXN1IsRUFBV21YLFFBQVVwWCxFQUFPb1gsUUFBU25YLEVBQVdvWCxrQkFBb0JyWCxFQUFPc1gsU0FBVXJYLEVBQVc0QixTQUFXN0IsRUFBTzZCLFFBQVM3QixFQUFPQyxFQUFXNkcsU0FBUyxHQVZsUCxFQVlwQixFQUNEMUcsUUFDQUgsaUJBQ0ksT0FBUyxDQUNiZ0csUUFBUyxRQUNUc1IsZ0JBQWlCLFdBQ2pCQyxXQUFZLFNBQ1pDLFNBQVUsU0FDVkMsYUFBYyxXQUNkdEwsU0FBVSxRQUNUbk0sRUFBV3dSLGFBQWUsQ0FDM0I1USxTQUFVLFdBQ1ZzQixLQUFNLEVBQ053VixJQUFLLEVBRUxwVixVQUFXLCtCQUNVLFVBQXBCdEMsRUFBV3VELE1BQW9CLENBRWhDakIsVUFBVywrQkFDVnRDLEVBQVdtWCxRQUFVLENBQ3RCN1UsVUFBVyxtQ0FDWGdWLGdCQUFpQixXQUNqQm5MLFNBQVUsU0FDUm5NLEVBQVdvWCxrQkFBb0IsQ0FDakNoVyxXQUFZakIsRUFBTWtCLFlBQVlDLE9BQU8sQ0FBQyxRQUFTLFlBQWEsYUFBYyxDQUN4RUMsU0FBVXBCLEVBQU1rQixZQUFZRSxTQUFTQyxRQUNyQ0MsT0FBUXRCLEVBQU1rQixZQUFZSSxPQUFPQyxXQUVYLFdBQXZCMUIsRUFBVzZHLFVBQXdCLE9BQVMsQ0FLN0M4USxPQUFRLEVBQ1JwVixjQUFlLE9BQ2ZELFVBQVcsaUNBQ1g2SixTQUFVLHFCQUNXLFVBQXBCbk0sRUFBV3VELE1BQW9CLENBQ2hDakIsVUFBVyxrQ0FDVnRDLEVBQVdtWCxTQUFVLE9BQVMsQ0FDL0JTLFdBQVksT0FDWnJWLGNBQWUsT0FDZkQsVUFBVyxtQ0FDWDZKLFNBQVUscUJBQ1csVUFBcEJuTSxFQUFXdUQsTUFBb0IsQ0FDaENqQixVQUFXLHNDQUNlLGFBQXZCdEMsRUFBVzZHLFVBQTBCLE9BQVMsQ0FFakQ4USxPQUFRLEVBQ1JwVixjQUFlLE9BQ2ZELFVBQVcsaUNBQ1g2SixTQUFVLHFCQUNXLFVBQXBCbk0sRUFBV3VELE1BQW9CLENBQ2hDakIsVUFBVyxpQ0FDVnRDLEVBQVdtWCxRQUFVLENBQ3RCUyxXQUFZLE9BQ1pyVixjQUFlLE9BR2Y0SixTQUFVLG9CQUNWN0osVUFBVyx5Q0E2R2IsRUEzR2dDLGNBQWlCLFNBQW9CMEIsRUFBU0MsR0FDNUUsTUFBTW5FLEdBQVEsT0FBZ0IsQ0FDNUJGLEtBQU0sZ0JBQ05FLE1BQU9rRSxLQUVILGlCQUNGb1QsR0FBbUIsRUFDbkJELE9BQVFVLEVBQVUsVUFDbEJwUixHQUNFM0csRUFDSmdGLEdBQVEsT0FBOEJoRixFQUFPLEdBQ3pDMEksR0FBaUIsRUFBQUksRUFBQSxLQUN2QixJQUFJdU8sRUFBU1UsT0FDUyxJQUFYVixHQUEwQjNPLElBQ25DMk8sRUFBUzNPLEVBQWVwQixRQUFVb0IsRUFBZTVHLFNBQVc0RyxFQUFlMUIsY0FFN0UsTUFBTXlDLEdBQU0sRUFBQWpCLEVBQUEsR0FBaUIsQ0FDM0J4SSxRQUNBMEksaUJBQ0FELE9BQVEsQ0FBQyxPQUFRLFVBQVcsV0FBWSxhQUVwQ3ZJLEdBQWEsT0FBUyxDQUFDLEVBQUdGLEVBQU8sQ0FDckNzWCxtQkFDQTVGLFlBQWFoSixFQUNiMk8sU0FDQTVULEtBQU1nRyxFQUFJaEcsS0FDVnNELFFBQVMwQyxFQUFJMUMsUUFDYkQsU0FBVTJDLEVBQUkzQyxTQUNkaEYsUUFBUzJILEVBQUkzSCxVQUVUbUQsRUF6SGtCL0UsS0FDeEIsTUFBTSxRQUNKK0UsRUFBTyxZQUNQeU0sRUFBVyxLQUNYak8sRUFBSSxPQUNKNFQsRUFBTSxpQkFDTkMsRUFBZ0IsUUFDaEJ2USxFQUFPLFNBQ1BELEdBQ0U1RyxFQUNFNEUsRUFBUSxDQUNaSSxLQUFNLENBQUMsT0FBUXdNLEdBQWUsZUFBZ0I0RixHQUFvQixXQUFZRCxHQUFVLFNBQVU1VCxHQUFpQixXQUFUQSxHQUFxQixRQUFPLEVBQUF1QyxFQUFBLEdBQVd2QyxLQUFTc0QsR0FDMUptUSxTQUFVLENBQUNwUSxHQUFZLGFBRW5CMUIsR0FBa0IsRUFBQUMsRUFBQSxHQUFlUCxFQUFPcVMsRUFBNkJsUyxHQUMzRSxPQUFPLE9BQVMsQ0FBQyxFQUFHQSxFQUFTRyxFQUFnQixFQTBHN0IsQ0FBa0JsRixHQUNsQyxPQUFvQixTQUFLa1gsR0FBZ0IsT0FBUyxDQUNoRCxjQUFlQyxFQUNmblgsV0FBWUEsRUFDWmlFLElBQUtBLEVBQ0x3QyxXQUFXLEVBQUE0QixFQUFBLEdBQUt0RCxFQUFRQyxLQUFNeUIsSUFDN0IzQixFQUFPLENBQ1JDLFFBQVNBLElBRWIsRyxvSkN4SUEsUUFKaUMsZ0JBQW9CLENBQUMsRyx3QkNML0MsU0FBUytTLEVBQW9CN1ksR0FDbEMsT0FBTyxFQUFBQyxFQUFBLElBQXFCLFVBQVdELEVBQ3pDLEVBQ29CLEVBQUFHLEVBQUEsR0FBdUIsVUFBVyxDQUFDLE9BQVEsVUFBVyxRQUFTLGMsY0NEbkYsTUFBTUMsRUFBWSxDQUFDLFdBQVksWUFBYSxZQUFhLFFBQVMsaUJBQWtCLGFBdUI5RTBZLEdBQVcsRUFBQXhZLEVBQUEsSUFBTyxLQUFNLENBQzVCSyxLQUFNLFVBQ05YLEtBQU0sT0FDTlksa0JBQW1CLENBQUNDLEVBQU9DLEtBQ3pCLE1BQU0sV0FDSkMsR0FDRUYsRUFDSixNQUFPLENBQUNDLEVBQU9pRixNQUFPaEYsRUFBV2dZLGdCQUFrQmpZLEVBQU91RCxRQUFTdEQsRUFBV2lZLE9BQVNsWSxFQUFPa1ksTUFBT2pZLEVBQVdrWSxXQUFhblksRUFBT21ZLFVBQVUsR0FQakksRUFTZCxFQUNEbFksaUJBQ0ksT0FBUyxDQUNibVksVUFBVyxPQUNYcFMsT0FBUSxFQUNSekMsUUFBUyxFQUNUMUMsU0FBVSxhQUNSWixFQUFXZ1ksZ0JBQWtCLENBQy9CeFUsV0FBWSxFQUNaQyxjQUFlLEdBQ2R6RCxFQUFXa1ksV0FBYSxDQUN6QjFVLFdBQVksTUFnRmQsRUE5RTBCLGNBQWlCLFNBQWNRLEVBQVNDLEdBQ2hFLE1BQU1uRSxHQUFRLE9BQWdCLENBQzVCQSxNQUFPa0UsRUFDUHBFLEtBQU0sYUFFRixTQUNGNEcsRUFBUSxVQUNSQyxFQUFTLFVBQ1RDLEVBQVksS0FBSSxNQUNoQnVSLEdBQVEsRUFBSyxlQUNiRCxHQUFpQixFQUFLLFVBQ3RCRSxHQUNFcFksRUFDSmdGLEdBQVEsT0FBOEJoRixFQUFPVCxHQUN6QytZLEVBQVUsV0FBYyxLQUFNLENBQ2xDSCxXQUNFLENBQUNBLElBQ0NqWSxHQUFhLE9BQVMsQ0FBQyxFQUFHRixFQUFPLENBQ3JDNEcsWUFDQXVSLFFBQ0FELG1CQUVJalQsRUF4RGtCL0UsS0FDeEIsTUFBTSxRQUNKK0UsRUFBTyxlQUNQaVQsRUFBYyxNQUNkQyxFQUFLLFVBQ0xDLEdBQ0VsWSxFQUNFNEUsRUFBUSxDQUNaSSxLQUFNLENBQUMsUUFBU2dULEdBQWtCLFVBQVdDLEdBQVMsUUFBU0MsR0FBYSxjQUU5RSxPQUFPLEVBQUEvUyxFQUFBLEdBQWVQLEVBQU9rVCxFQUFxQi9TLEVBQVEsRUE4QzFDSyxDQUFrQnBGLEdBQ2xDLE9BQW9CLFNBQUssRUFBWWtJLFNBQVUsQ0FDN0NDLE1BQU9pUSxFQUNQNVIsVUFBdUIsVUFBTXVSLEdBQVUsT0FBUyxDQUM5QzNQLEdBQUkxQixFQUNKRCxXQUFXLEVBQUE0QixFQUFBLEdBQUt0RCxFQUFRQyxLQUFNeUIsR0FDOUJ4QyxJQUFLQSxFQUNMakUsV0FBWUEsR0FDWDhFLEVBQU8sQ0FDUjBCLFNBQVUsQ0FBQzBSLEVBQVcxUixPQUc1QixJLGtDQy9FQSxNQUFNLEVBQVksQ0FBQyxVQUFXLFlBQWEsZ0JBQWlCLFdBQVksWUFBYSx5QkFBMEIsa0JBQW1CLFlBQWEsV0FVL0ksU0FBUzZSLEVBQVNDLEVBQU1qTixFQUFNa04sR0FDNUIsT0FBSUQsSUFBU2pOLEVBQ0ppTixFQUFLRSxXQUVWbk4sR0FBUUEsRUFBS29OLG1CQUNScE4sRUFBS29OLG1CQUVQRixFQUFrQixLQUFPRCxFQUFLRSxVQUN2QyxDQUNBLFNBQVNFLEVBQWFKLEVBQU1qTixFQUFNa04sR0FDaEMsT0FBSUQsSUFBU2pOLEVBQ0prTixFQUFrQkQsRUFBS0UsV0FBYUYsRUFBS0ssVUFFOUN0TixHQUFRQSxFQUFLdU4sdUJBQ1J2TixFQUFLdU4sdUJBRVBMLEVBQWtCLEtBQU9ELEVBQUtLLFNBQ3ZDLENBQ0EsU0FBU0UsRUFBb0JDLEVBQVdDLEdBQ3RDLFFBQXFCclIsSUFBakJxUixFQUNGLE9BQU8sRUFFVCxJQUFJalcsRUFBT2dXLEVBQVVFLFVBTXJCLFlBTGF0UixJQUFUNUUsSUFFRkEsRUFBT2dXLEVBQVVHLGFBRW5CblcsRUFBT0EsRUFBS29XLE9BQU9DLGNBQ0MsSUFBaEJyVyxFQUFLMFQsU0FHTHVDLEVBQWFLLFVBQ1J0VyxFQUFLLEtBQU9pVyxFQUFhcE8sS0FBSyxHQUVhLElBQTdDN0gsRUFBS29JLFFBQVE2TixFQUFhcE8sS0FBS2lHLEtBQUssS0FDN0MsQ0FDQSxTQUFTeUksRUFBVWYsRUFBTWdCLEVBQWNmLEVBQWlCZ0IsRUFBd0JDLEVBQW1CVCxHQUNqRyxJQUFJVSxHQUFjLEVBQ2RYLEVBQVlVLEVBQWtCbEIsRUFBTWdCLElBQWNBLEdBQWVmLEdBQ3JFLEtBQU9PLEdBQVcsQ0FFaEIsR0FBSUEsSUFBY1IsRUFBS0UsV0FBWSxDQUNqQyxHQUFJaUIsRUFDRixPQUFPLEVBRVRBLEdBQWMsQ0FDaEIsQ0FHQSxNQUFNQyxHQUFvQkgsSUFBaUNULEVBQVVqWCxVQUF3RCxTQUE1Q2lYLEVBQVVhLGFBQWEsa0JBQ3hHLEdBQUtiLEVBQVVjLGFBQWEsYUFBZ0JmLEVBQW9CQyxFQUFXQyxLQUFpQlcsRUFLMUYsT0FEQVosRUFBVWhELFNBQ0gsRUFIUGdELEVBQVlVLEVBQWtCbEIsRUFBTVEsRUFBV1AsRUFLbkQsQ0FDQSxPQUFPLENBQ1QsQ0FRQSxNQTBNQSxFQTFNOEIsY0FBaUIsU0FBa0J6WSxFQUFPbUUsR0FDdEUsTUFBTSxRQUdGNFYsRUFBTyxVQUNQN0YsR0FBWSxFQUFLLGNBQ2pCOEYsR0FBZ0IsRUFBSyxTQUNyQnRULEVBQVEsVUFDUkMsRUFBUyx1QkFDVDhTLEdBQXlCLEVBQUssZ0JBQzlCaEIsR0FBa0IsRUFBSyxVQUN2QjVELEVBQVMsUUFDVDlOLEVBQVUsZ0JBQ1IvRyxFQUNKZ0YsR0FBUSxPQUE4QmhGLEVBQU8sR0FDekNpYSxFQUFVLFNBQWEsTUFDdkJDLEVBQWtCLFNBQWEsQ0FDbkNyUCxLQUFNLEdBQ055TyxXQUFXLEVBQ1hhLG9CQUFvQixFQUNwQkMsU0FBVSxRQUVaLEVBQUFDLEVBQUEsSUFBa0IsS0FDWm5HLEdBQ0YrRixFQUFRNUosUUFBUTJGLE9BQ2xCLEdBQ0MsQ0FBQzlCLElBQ0osc0JBQTBCNkYsR0FBUyxLQUFNLENBQ3ZDTyx3QkFBeUIsQ0FBQ0MsR0FDeEJ2USxnQkFJQSxNQUFNd1EsR0FBbUJQLEVBQVE1SixRQUFRWCxNQUFNakosTUFDL0MsR0FBSThULEVBQWlCMUosYUFBZW9KLEVBQVE1SixRQUFRUSxjQUFnQjJKLEVBQWlCLENBQ25GLE1BQU1DLEVBQWdCLElBQUcsRUFBQUMsRUFBQSxJQUFpQixFQUFBQyxFQUFBLEdBQWNKLFFBQ3hETixFQUFRNUosUUFBUVgsTUFBb0IsUUFBZDFGLEVBQXNCLGNBQWdCLGdCQUFrQnlRLEVBQzlFUixFQUFRNUosUUFBUVgsTUFBTWpKLE1BQVEsZUFBZWdVLElBQy9DLENBQ0EsT0FBT1IsRUFBUTVKLE9BQU8sS0FFdEIsSUFDSixNQWtETUwsR0FBWSxFQUFBNEssRUFBQSxHQUFXWCxFQUFTOVYsR0FPdEMsSUFBSTBXLEdBQW1CLEVBSXZCLFdBQWUxVCxRQUFRVCxHQUFVLENBQUNVLEVBQU8wVCxLQUNwQixpQkFBcUIxVCxJQWVuQ0EsRUFBTXBILE1BQU0rQixXQUNDLGlCQUFaZ0YsR0FBOEJLLEVBQU1wSCxNQUFNK2EsV0FFZCxJQUFyQkYsS0FEVEEsRUFBa0JDLEdBS2xCRCxJQUFvQkMsSUFBVTFULEVBQU1wSCxNQUFNK0IsVUFBWXFGLEVBQU1wSCxNQUFNZ2Isc0JBQXdCNVQsRUFBTXJDLEtBQUtpVyx3QkFDdkdILEdBQW1CLEVBQ2ZBLEdBQW1CblUsRUFBU2dRLFNBRTlCbUUsR0FBbUIsS0F6QmpCQSxJQUFvQkMsSUFDdEJELEdBQW1CLEVBQ2ZBLEdBQW1CblUsRUFBU2dRLFNBRTlCbUUsR0FBbUIsR0F1QnpCLElBRUYsTUFBTUksRUFBUSxXQUFlblIsSUFBSXBELEdBQVUsQ0FBQ1UsRUFBTzBULEtBQ2pELEdBQUlBLElBQVVELEVBQWlCLENBQzdCLE1BQU1LLEVBQWdCLENBQUMsRUFPdkIsT0FOSWxCLElBQ0ZrQixFQUFjaEgsV0FBWSxRQUVDdE0sSUFBekJSLEVBQU1wSCxNQUFNbWIsVUFBc0MsaUJBQVpwVSxJQUN4Q21VLEVBQWNDLFNBQVcsR0FFUCxlQUFtQi9ULEVBQU84VCxFQUNoRCxDQUNBLE9BQU85VCxDQUFLLElBRWQsT0FBb0IsU0FBSyxHQUFNLE9BQVMsQ0FDdENnVSxLQUFNLE9BQ05qWCxJQUFLNkwsRUFDTHJKLFVBQVdBLEVBQ1hrTyxVQTdHb0JnQixJQUNwQixNQUFNMkMsRUFBT3lCLEVBQVE1SixRQUNmdkYsRUFBTStLLEVBQU0vSyxJQU9aME8sR0FBZSxFQUFBbUIsRUFBQSxHQUFjbkMsR0FBTTZDLGNBQ3pDLEdBQVksY0FBUnZRLEVBRUYrSyxFQUFNeUYsaUJBQ04vQixFQUFVZixFQUFNZ0IsRUFBY2YsRUFBaUJnQixFQUF3QmxCLFFBQ2xFLEdBQVksWUFBUnpOLEVBQ1QrSyxFQUFNeUYsaUJBQ04vQixFQUFVZixFQUFNZ0IsRUFBY2YsRUFBaUJnQixFQUF3QmIsUUFDbEUsR0FBWSxTQUFSOU4sRUFDVCtLLEVBQU15RixpQkFDTi9CLEVBQVVmLEVBQU0sS0FBTUMsRUFBaUJnQixFQUF3QmxCLFFBQzFELEdBQVksUUFBUnpOLEVBQ1QrSyxFQUFNeUYsaUJBQ04vQixFQUFVZixFQUFNLEtBQU1DLEVBQWlCZ0IsRUFBd0JiLFFBQzFELEdBQW1CLElBQWY5TixFQUFJNEwsT0FBYyxDQUMzQixNQUFNNkUsRUFBV3JCLEVBQWdCN0osUUFDM0JtTCxFQUFXMVEsRUFBSXVPLGNBQ2ZvQyxFQUFXQyxZQUFZQyxNQUN6QkosRUFBUzFRLEtBQUs2TCxPQUFTLElBRXJCK0UsRUFBV0YsRUFBU25CLFNBQVcsS0FDakNtQixFQUFTMVEsS0FBTyxHQUNoQjBRLEVBQVNqQyxXQUFZLEVBQ3JCaUMsRUFBU3BCLG9CQUFxQixHQUNyQm9CLEVBQVNqQyxXQUFha0MsSUFBYUQsRUFBUzFRLEtBQUssS0FDMUQwUSxFQUFTakMsV0FBWSxJQUd6QmlDLEVBQVNuQixTQUFXcUIsRUFDcEJGLEVBQVMxUSxLQUFLZ0IsS0FBSzJQLEdBQ25CLE1BQU1JLEVBQXFCcEMsSUFBaUIrQixFQUFTakMsV0FBYVAsRUFBb0JTLEVBQWMrQixHQUNoR0EsRUFBU3BCLHFCQUF1QnlCLEdBQXNCckMsRUFBVWYsRUFBTWdCLEdBQWMsRUFBT0MsRUFBd0JsQixFQUFVZ0QsSUFDL0gxRixFQUFNeUYsaUJBRU5DLEVBQVNwQixvQkFBcUIsQ0FFbEMsQ0FDSXRGLEdBQ0ZBLEVBQVVnQixFQUNaLEVBOERBc0YsU0FBVWpILEVBQVksR0FBSyxHQUMxQmxQLEVBQU8sQ0FDUjBCLFNBQVV1VSxJQUVkLEksd0JDM09PLFNBQVNZLEVBQW9CMWMsR0FDbEMsT0FBTyxFQUFBQyxFQUFBLElBQXFCLFVBQVdELEVBQ3pDLEVBQ29CLEVBQUFHLEVBQUEsR0FBdUIsVUFBVyxDQUFDLE9BQVEsUUFBUyxTQUF4RSxNQ0RNLEVBQVksQ0FBQyxjQUNqQndjLEVBQWEsQ0FBQyxZQUFhLFdBQVksWUFBYSx1QkFBd0IsZ0JBQWlCLFVBQVcsT0FBUSxhQUFjLGlCQUFrQixxQkFBc0Isa0JBQW1CLFVBQVcsUUFBUyxhQWV6TUMsRUFBYSxDQUNqQkMsU0FBVSxNQUNWQyxXQUFZLFNBRVJDLEVBQWEsQ0FDakJGLFNBQVUsTUFDVkMsV0FBWSxRQWFSRSxHQUFXLEVBQUExYyxFQUFBLElBQU8yYyxFQUFBLEdBQVMsQ0FDL0J6YyxrQkFBbUJDLElBQVEsRUFBQUMsRUFBQSxHQUFzQkQsSUFBa0IsWUFBVEEsRUFDMURFLEtBQU0sVUFDTlgsS0FBTSxPQUNOWSxrQkFBbUIsQ0FBQ0MsRUFBT0MsSUFBV0EsRUFBT2lGLE1BSjlCLENBS2QsQ0FBQyxHQUNTbVgsR0FBWSxFQUFBNWMsRUFBQSxJQUFPMmMsRUFBQSxHQUFjLENBQzVDdGMsS0FBTSxVQUNOWCxLQUFNLFFBQ05ZLGtCQUFtQixDQUFDQyxFQUFPQyxJQUFXQSxFQUFPcWMsT0FIdEIsQ0FJdEIsQ0FJREMsVUFBVyxvQkFFWEMsd0JBQXlCLFVBRXJCQyxHQUFlLEVBQUFoZCxFQUFBLElBQU8sRUFBVSxDQUNwQ0ssS0FBTSxVQUNOWCxLQUFNLE9BQ05ZLGtCQUFtQixDQUFDQyxFQUFPQyxJQUFXQSxFQUFPdVksTUFIMUIsQ0FJbEIsQ0FFRGhGLFFBQVMsSUFtUFgsRUFqUDBCLGNBQWlCLFNBQWN0UCxFQUFTQyxHQUNoRSxJQUFJdVksRUFBY0MsRUFDbEIsTUFBTTNjLEdBQVEsT0FBZ0IsQ0FDNUJBLE1BQU9rRSxFQUNQcEUsS0FBTSxhQUVGLFVBQ0ZvVSxHQUFZLEVBQUksU0FDaEJ4TixFQUFRLFVBQ1JDLEVBQVMscUJBQ1RpVyxHQUF1QixFQUFLLGNBQzVCQyxFQUFnQixDQUFDLEVBQUMsUUFDbEJDLEVBQU8sS0FDUEMsRUFBSSxXQUNKQyxFQUFhLENBQUMsRUFBQyxlQUNmQyxFQUFjLG1CQUNkeE0sRUFBcUIsT0FDckJ5TSxpQkFBaUIsV0FDZjVOLEdBQ0UsQ0FBQyxFQUFDLFFBQ052SSxFQUFVLGVBQWMsTUFDeEJqQyxFQUFRLENBQUMsRUFBQyxVQUNWRCxFQUFZLENBQUMsR0FDWDdFLEVBQ0prZCxHQUFrQixPQUE4QmxkLEVBQU1rZCxnQkFBaUIsR0FDdkVsWSxHQUFRLE9BQThCaEYsRUFBTzhiLEdBQ3pDcUIsR0FBUSxTQUNSamQsR0FBYSxPQUFTLENBQUMsRUFBR0YsRUFBTyxDQUNyQ2tVLFlBQ0EwSSx1QkFDQUMsZ0JBQ0F2TixhQUNBME4sYUFDQXZNLHFCQUNBeU0sa0JBQ0FuVyxZQUVJOUIsRUExRWtCL0UsS0FDeEIsTUFBTSxRQUNKK0UsR0FDRS9FLEVBTUosT0FBTyxFQUFBbUYsRUFBQSxHQUxPLENBQ1pILEtBQU0sQ0FBQyxRQUNQb1gsTUFBTyxDQUFDLFNBQ1I5RCxLQUFNLENBQUMsU0FFb0JxRCxFQUFxQjVXLEVBQVEsRUFpRTFDLENBQWtCL0UsR0FDNUI4WixFQUFnQjlGLElBQWMwSSxHQUF3QkcsRUFDdERLLEVBQXFCLFNBQWEsTUF5QnhDLElBQUl2QyxHQUFtQixFQUl2QixXQUFlL1EsSUFBSXBELEdBQVUsQ0FBQ1UsRUFBTzBULEtBQ2hCLGlCQUFxQjFULEtBUW5DQSxFQUFNcEgsTUFBTStCLFdBQ0MsaUJBQVpnRixHQUE4QkssRUFBTXBILE1BQU0rYSxXQUVkLElBQXJCRixLQURUQSxFQUFrQkMsR0FJdEIsSUFFRixNQUFNdUMsRUFBNEMsT0FBL0JYLEVBQWU1WCxFQUFNd1gsT0FBaUJJLEVBQWVMLEVBQ2xFaUIsRUFBaUUsT0FBdkNYLEVBQW1COVgsRUFBVXlYLE9BQWlCSyxFQUFtQkssRUFDM0ZPLEdBQWdCLEVBQUFDLEVBQUEsR0FBYSxDQUNqQ0MsWUFBYTNZLEVBQU1JLEtBQ25Cd1ksa0JBQW1CN1ksRUFBVUssS0FDN0JoRixhQUNBeUcsVUFBVyxDQUFDMUIsRUFBUUMsS0FBTXlCLEtBRXRCZ1gsR0FBaUIsRUFBQUgsRUFBQSxHQUFhLENBQ2xDQyxZQUFhSixFQUNiSyxrQkFBbUJKLEVBQ25CcGQsYUFDQXlHLFVBQVcxQixFQUFRcVgsUUFFckIsT0FBb0IsU0FBS0gsR0FBVSxPQUFTLENBQzFDVyxRQUFTQSxFQUNUYyxhQUFjLENBQ1o1QixTQUFVLFNBQ1ZDLFdBQVlrQixFQUFRLFFBQVUsUUFFaEMzRixnQkFBaUIyRixFQUFRcEIsRUFBYUcsRUFDdENwWCxNQUFPLENBQ0x3WCxNQUFPZSxFQUNQblksS0FBTUosRUFBTUksTUFFZEwsVUFBVyxDQUNUSyxLQUFNcVksRUFDTmpCLE1BQU9xQixHQUVUWixLQUFNQSxFQUNONVksSUFBS0EsRUFDTHNNLG1CQUFvQkEsRUFDcEJ5TSxpQkFBaUIsT0FBUyxDQUN4QjVOLFdBOUVtQixDQUFDNkcsRUFBUzNGLEtBQzNCNE0sRUFBbUIvTSxTQUNyQitNLEVBQW1CL00sUUFBUWlLLHdCQUF3Qm5FLEVBQVMsQ0FDMURuTSxVQUFXbVQsRUFBUSxNQUFRLFFBRzNCN04sR0FDRkEsRUFBVzZHLEVBQVMzRixFQUN0QixHQXVFRzBNLEdBQ0hoZCxXQUFZQSxHQUNYOEUsRUFBTyxDQUNSQyxRQUFTZ1ksRUFDVHZXLFVBQXVCLFNBQUsrVixHQUFjLE9BQVMsQ0FDakQ1SCxVQTFFc0JnQixJQUNOLFFBQWRBLEVBQU0vSyxNQUNSK0ssRUFBTXlGLGlCQUNGd0IsR0FDRkEsRUFBUWpILEVBQU8sY0FFbkIsRUFxRUVrRSxRQUFTcUQsRUFDVGxKLFVBQVdBLEtBQW1DLElBQXJCMkcsR0FBMEIrQixHQUNuRDVDLGNBQWVBLEVBQ2ZqVCxRQUFTQSxHQUNSOFYsRUFBZSxDQUNoQmxXLFdBQVcsRUFBQTRCLEVBQUEsR0FBS3RELEVBQVF1VCxLQUFNcUUsRUFBY2xXLFdBQzVDRCxTQUFVQSxPQUdoQixHLDBOQzlMTyxTQUFTbVgsRUFBVzFILEVBQVMySCxHQUM5QkEsRUFDRjNILEVBQVE0SCxhQUFhLGNBQWUsUUFFcEM1SCxFQUFRNkgsZ0JBQWdCLGNBRTVCLENBQ0EsU0FBU0MsRUFBZ0I5SCxHQUN2QixPQUFPK0gsVUFBUyxFQUFBQyxFQUFBLEdBQVloSSxHQUFTaUksaUJBQWlCakksR0FBUzdTLGFBQWMsS0FBTyxDQUN0RixDQVVBLFNBQVMrYSxFQUFtQi9TLEVBQVdnVCxFQUFjQyxFQUFnQkMsRUFBbUJWLEdBQ3RGLE1BQU1XLEVBQVksQ0FBQ0gsRUFBY0MsS0FBbUJDLEdBQ3BELEdBQUdyWCxRQUFRdVgsS0FBS3BULEVBQVU1RSxVQUFVeVAsSUFDbEMsTUFBTXdJLEdBQXVELElBQWhDRixFQUFVclQsUUFBUStLLEdBQ3pDeUksR0FiVixTQUF3Q3pJLEdBSXRDLE1BQ00wSSxHQUFxRSxJQURqRCxDQUFDLFdBQVksU0FBVSxRQUFTLE9BQVEsTUFBTyxPQUFRLFdBQVksVUFBVyxNQUFPLFdBQVksUUFBUyxPQUFRLFNBQVUsU0FDekd6VCxRQUFRK0ssRUFBUTJJLFNBQ3ZEQyxFQUFvQyxVQUFwQjVJLEVBQVEySSxTQUF3RCxXQUFqQzNJLEVBQVEwRCxhQUFhLFFBQzFFLE9BQU9nRixHQUFzQkUsQ0FDL0IsQ0FLbUNDLENBQStCN0ksR0FDMUR3SSxHQUF3QkMsR0FDMUJmLEVBQVcxSCxFQUFTMkgsRUFDdEIsR0FFSixDQUNBLFNBQVNtQixFQUFZaEUsRUFBTy9LLEdBQzFCLElBQUlnUCxHQUFPLEVBUVgsT0FQQWpFLEVBQU1rRSxNQUFLLENBQUM1VCxFQUFNdVAsTUFDWjVLLEVBQVMzRSxLQUNYMlQsRUFBTXBFLEdBQ0MsS0FJSm9FLENBQ1QsQ0NoQ0EsTUFBTUUsRUFBaUIsSURzSGhCLE1BQ0wsV0FBQUMsR0FDRUMsS0FBS0MsZ0JBQWEsRUFDbEJELEtBQUtFLFlBQVMsRUFDZEYsS0FBS0UsT0FBUyxHQUNkRixLQUFLQyxXQUFhLEVBQ3BCLENBQ0EsR0FBQUUsQ0FBSUMsRUFBT3BVLEdBQ1QsSUFBSXFVLEVBQWFMLEtBQUtFLE9BQU9wVSxRQUFRc1UsR0FDckMsSUFBb0IsSUFBaEJDLEVBQ0YsT0FBT0EsRUFFVEEsRUFBYUwsS0FBS0UsT0FBTzlJLE9BQ3pCNEksS0FBS0UsT0FBTzNULEtBQUs2VCxHQUdiQSxFQUFNRSxVQUNSL0IsRUFBVzZCLEVBQU1FLFVBQVUsR0FFN0IsTUFBTUMsRUFuQ1YsU0FBMkJ2VSxHQUN6QixNQUFNdVUsRUFBaUIsR0FNdkIsTUFMQSxHQUFHMVksUUFBUXVYLEtBQUtwVCxFQUFVNUUsVUFBVXlQLElBQ1UsU0FBeENBLEVBQVEwRCxhQUFhLGdCQUN2QmdHLEVBQWVoVSxLQUFLc0ssRUFDdEIsSUFFSzBKLENBQ1QsQ0EyQjJCQyxDQUFrQnhVLEdBQ3pDK1MsRUFBbUIvUyxFQUFXb1UsRUFBTUssTUFBT0wsRUFBTUUsU0FBVUMsR0FBZ0IsR0FDM0UsTUFBTUcsRUFBaUJmLEVBQVlLLEtBQUtDLFlBQVloVSxHQUFRQSxFQUFLRCxZQUFjQSxJQUMvRSxPQUF3QixJQUFwQjBVLEdBQ0ZWLEtBQUtDLFdBQVdTLEdBQWdCUixPQUFPM1QsS0FBSzZULEdBQ3JDQyxJQUVUTCxLQUFLQyxXQUFXMVQsS0FBSyxDQUNuQjJULE9BQVEsQ0FBQ0UsR0FDVHBVLFlBQ0EyVSxRQUFTLEtBQ1RKLG1CQUVLRixFQUNULENBQ0EsS0FBQUksQ0FBTUwsRUFBTzFmLEdBQ1gsTUFBTWdnQixFQUFpQmYsRUFBWUssS0FBS0MsWUFBWWhVLElBQXdDLElBQWhDQSxFQUFLaVUsT0FBT3BVLFFBQVFzVSxLQUMxRVEsRUFBZ0JaLEtBQUtDLFdBQVdTLEdBQ2pDRSxFQUFjRCxVQUNqQkMsRUFBY0QsUUEzSHBCLFNBQXlCQyxFQUFlbGdCLEdBQ3RDLE1BQU1tZ0IsRUFBZSxHQUNmN1UsRUFBWTRVLEVBQWM1VSxVQUNoQyxJQUFLdEwsRUFBTW9nQixrQkFBbUIsQ0FDNUIsR0FuREosU0FBdUI5VSxHQUNyQixNQUFNK1UsR0FBTSxFQUFBMUYsRUFBQSxHQUFjclAsR0FDMUIsT0FBSStVLEVBQUlDLE9BQVNoVixHQUNSLEVBQUE2UyxFQUFBLEdBQVk3UyxHQUFXaVYsV0FBYUYsRUFBSUcsZ0JBQWdCQyxZQUUxRG5WLEVBQVVvVixhQUFlcFYsRUFBVXVGLFlBQzVDLENBNkNROFAsQ0FBY3JWLEdBQVksQ0FFNUIsTUFBTW1QLEdBQWdCLEVBQUFDLEVBQUEsSUFBaUIsRUFBQUMsRUFBQSxHQUFjclAsSUFDckQ2VSxFQUFhdFUsS0FBSyxDQUNoQnhELE1BQU9pRCxFQUFVb0UsTUFBTXBNLGFBQ3ZCc2QsU0FBVSxnQkFDVkMsR0FBSXZWLElBR05BLEVBQVVvRSxNQUFNcE0sYUFBZSxHQUFHMmEsRUFBZ0IzUyxHQUFhbVAsTUFHL0QsTUFBTXFHLEdBQWdCLEVBQUFuRyxFQUFBLEdBQWNyUCxHQUFXeVYsaUJBQWlCLGNBQ2hFLEdBQUc1WixRQUFRdVgsS0FBS29DLEdBQWUzSyxJQUM3QmdLLEVBQWF0VSxLQUFLLENBQ2hCeEQsTUFBTzhOLEVBQVF6RyxNQUFNcE0sYUFDckJzZCxTQUFVLGdCQUNWQyxHQUFJMUssSUFFTkEsRUFBUXpHLE1BQU1wTSxhQUFlLEdBQUcyYSxFQUFnQjlILEdBQVdzRSxLQUFpQixHQUVoRixDQUNBLElBQUl1RyxFQUNKLEdBQUkxVixFQUFVMlYsc0JBQXNCQyxpQkFDbENGLEdBQWtCLEVBQUFyRyxFQUFBLEdBQWNyUCxHQUFXZ1YsU0FDdEMsQ0FHTCxNQUFNYSxFQUFTN1YsRUFBVThWLGNBQ25CQyxHQUFrQixFQUFBbEQsRUFBQSxHQUFZN1MsR0FDcEMwVixFQUFrRSxVQUFyQyxNQUFWRyxPQUFpQixFQUFTQSxFQUFPRyxXQUErRSxXQUF2REQsRUFBZ0JqRCxpQkFBaUIrQyxHQUFRSSxVQUF5QkosRUFBUzdWLENBQ3pKLENBSUE2VSxFQUFhdFUsS0FBSyxDQUNoQnhELE1BQU8yWSxFQUFnQnRSLE1BQU1nSSxTQUM3QmtKLFNBQVUsV0FDVkMsR0FBSUcsR0FDSCxDQUNEM1ksTUFBTzJZLEVBQWdCdFIsTUFBTThSLFVBQzdCWixTQUFVLGFBQ1ZDLEdBQUlHLEdBQ0gsQ0FDRDNZLE1BQU8yWSxFQUFnQnRSLE1BQU02UixVQUM3QlgsU0FBVSxhQUNWQyxHQUFJRyxJQUVOQSxFQUFnQnRSLE1BQU1nSSxTQUFXLFFBQ25DLENBY0EsTUFiZ0IsS0FDZHlJLEVBQWFoWixTQUFRLEVBQ25Ca0IsUUFDQXdZLEtBQ0FELGVBRUl2WSxFQUNGd1ksRUFBR25SLE1BQU0rUixZQUFZYixFQUFVdlksR0FFL0J3WSxFQUFHblIsTUFBTWdTLGVBQWVkLEVBQzFCLEdBQ0EsQ0FHTixDQXVEOEJlLENBQWdCekIsRUFBZWxnQixHQUUzRCxDQUNBLE1BQUE0aEIsQ0FBT2xDLEVBQU9tQyxHQUFrQixHQUM5QixNQUFNbEMsRUFBYUwsS0FBS0UsT0FBT3BVLFFBQVFzVSxHQUN2QyxJQUFvQixJQUFoQkMsRUFDRixPQUFPQSxFQUVULE1BQU1LLEVBQWlCZixFQUFZSyxLQUFLQyxZQUFZaFUsSUFBd0MsSUFBaENBLEVBQUtpVSxPQUFPcFUsUUFBUXNVLEtBQzFFUSxFQUFnQlosS0FBS0MsV0FBV1MsR0FLdEMsR0FKQUUsRUFBY1YsT0FBT3NDLE9BQU81QixFQUFjVixPQUFPcFUsUUFBUXNVLEdBQVEsR0FDakVKLEtBQUtFLE9BQU9zQyxPQUFPbkMsRUFBWSxHQUdLLElBQWhDTyxFQUFjVixPQUFPOUksT0FFbkJ3SixFQUFjRCxTQUNoQkMsRUFBY0QsVUFFWlAsRUFBTUUsVUFFUi9CLEVBQVc2QixFQUFNRSxTQUFVaUMsR0FFN0J4RCxFQUFtQjZCLEVBQWM1VSxVQUFXb1UsRUFBTUssTUFBT0wsRUFBTUUsU0FBVU0sRUFBY0wsZ0JBQWdCLEdBQ3ZHUCxLQUFLQyxXQUFXdUMsT0FBTzlCLEVBQWdCLE9BQ2xDLENBRUwsTUFBTStCLEVBQVU3QixFQUFjVixPQUFPVSxFQUFjVixPQUFPOUksT0FBUyxHQUkvRHFMLEVBQVFuQyxVQUNWL0IsRUFBV2tFLEVBQVFuQyxVQUFVLEVBRWpDLENBQ0EsT0FBT0QsQ0FDVCxDQUNBLFVBQUFxQyxDQUFXdEMsR0FDVCxPQUFPSixLQUFLRSxPQUFPOUksT0FBUyxHQUFLNEksS0FBS0UsT0FBT0YsS0FBS0UsT0FBTzlJLE9BQVMsS0FBT2dKLENBQzNFLEcsd0JFak5LLFNBQVN1QyxFQUFxQjlpQixHQUNuQyxPQUFPLEVBQUFDLEVBQUEsSUFBcUIsV0FBWUQsRUFDMUMsRUFDcUIsRUFBQUcsRUFBQSxHQUF1QixXQUFZLENBQUMsT0FBUSxTQUFVLGEsY0NEM0UsTUFBTUMsRUFBWSxDQUFDLG9CQUFxQixnQkFBaUIsVUFBVyxZQUFhLHVCQUF3QixXQUFZLFlBQWEsWUFBYSxhQUFjLGtCQUFtQixtQkFBb0Isc0JBQXVCLHVCQUF3QixnQkFBaUIsc0JBQXVCLG9CQUFxQixlQUFnQixjQUFlLGtCQUFtQixVQUFXLG9CQUFxQixxQkFBc0IsT0FBUSxZQUFhLFFBQVMsU0E2QmhiMmlCLEdBQVksRUFBQXppQixFQUFBLElBQU8sTUFBTyxDQUM5QkssS0FBTSxXQUNOWCxLQUFNLE9BQ05ZLGtCQUFtQixDQUFDQyxFQUFPQyxLQUN6QixNQUFNLFdBQ0pDLEdBQ0VGLEVBQ0osTUFBTyxDQUFDQyxFQUFPaUYsTUFBT2hGLEVBQVc2YyxNQUFRN2MsRUFBV2lpQixRQUFVbGlCLEVBQU9taUIsT0FBTyxHQVA5RCxFQVNmLEVBQ0QvaEIsUUFDQUgsaUJBQ0ksT0FBUyxDQUNiWSxTQUFVLFFBQ1YrVyxRQUFTeFgsRUFBTVUsTUFBUVYsR0FBT3dYLE9BQU82SCxNQUNyQ25kLE1BQU8sRUFDUEYsT0FBUSxFQUNSdVYsSUFBSyxFQUNMeFYsS0FBTSxJQUNKbEMsRUFBVzZjLE1BQVE3YyxFQUFXaWlCLFFBQVUsQ0FDMUM3USxXQUFZLGFBRVIrUSxHQUFnQixFQUFBNWlCLEVBQUEsSUFBTzZpQixFQUFBLEVBQVUsQ0FDckN4aUIsS0FBTSxXQUNOWCxLQUFNLFdBQ05ZLGtCQUFtQixDQUFDQyxFQUFPQyxJQUNsQkEsRUFBT3NpQixVQUpJLENBTW5CLENBQ0QxSyxRQUFTLElBa1VYLEVBbFQyQixjQUFpQixTQUFlM1QsRUFBU0MsR0FDbEUsSUFBSUMsRUFBTUMsRUFBYUMsRUFBT2tlLEVBQWlCQyxFQUFpQkMsRUFDaEUsTUFBTTFpQixHQUFRLE9BQWdCLENBQzVCRixLQUFNLFdBQ05FLE1BQU9rRSxLQUVILGtCQUNGeWUsRUFBb0JOLEVBQWEsY0FDakNPLEVBQWEsVUFDYmpjLEVBQVMscUJBQ1RrYyxHQUF1QixFQUFLLFNBQzVCbmMsRUFBUSxVQUNSNEUsRUFBUyxVQUNUMUUsRUFBUyxXQUNUcEMsRUFBYSxDQUFDLEVBQUMsZ0JBQ2ZDLEVBQWtCLENBQUMsRUFBQyxpQkFDcEJxZSxHQUFtQixFQUFLLG9CQUN4QkMsR0FBc0IsRUFBSyxxQkFDM0JDLEdBQXVCLEVBQUssY0FDNUJDLEdBQWdCLEVBQUssb0JBQ3JCQyxHQUFzQixFQUFLLGtCQUMzQjlDLEdBQW9CLEVBQUssYUFDekIrQyxHQUFlLEVBQUssWUFDcEJDLEdBQWMsRUFBSyxnQkFDbkJDLEVBQWUsS0FDZnRHLEVBQUksVUFDSmxZLEVBQVMsTUFDVEMsR0FFRTlFLEVBQ0pnRixHQUFRLE9BQThCaEYsRUFBT1QsR0FDekMrakIsR0FBb0IsT0FBUyxDQUFDLEVBQUd0akIsRUFBTyxDQUM1QzZpQix1QkFDQUMsbUJBQ0FDLHNCQUNBQyx1QkFDQUMsZ0JBQ0FDLHNCQUNBOUMsb0JBQ0ErQyxlQUNBQyxpQkFFSSxhQUNKRyxFQUFZLGlCQUNaQyxHQUFnQixtQkFDaEJDLEdBQWtCLFVBQ2xCQyxHQUFTLFdBQ1QxQixHQUFVLE9BQ1ZHLEdBQU0sY0FDTndCLElGcEdKLFNBQWtCQyxHQUNoQixNQUFNLFVBQ0p0WSxFQUFTLHFCQUNUMFgsR0FBdUIsRUFBSyxrQkFDNUI1QyxHQUFvQixFQUFLLFFBRXpCeUQsRUFBVXpFLEVBQWMscUJBQ3hCeUQsR0FBdUIsRUFBSyxrQkFDNUJpQixFQUFpQixtQkFDakJDLEVBQWtCLFNBQ2xCcmQsRUFBUSxRQUNSb1csRUFBTyxLQUNQQyxFQUFJLFFBQ0ppSCxHQUNFSixFQUdFbEUsRUFBUSxTQUFhLENBQUMsR0FDdEJ1RSxFQUFlLFNBQWEsTUFDNUJyRSxFQUFXLFNBQWEsTUFDeEI1UCxHQUFZLEVBQUE0SyxFQUFBLEdBQVdnRixFQUFVb0UsSUFDaEM3QixFQUFRK0IsR0FBYSxZQUFnQm5ILEdBQ3RDNEcsRUF2Q1IsU0FBMEJqZCxHQUN4QixRQUFPQSxHQUFXQSxFQUFTMUcsTUFBTW1rQixlQUFlLEtBQ2xELENBcUN3QkMsQ0FBaUIxZCxHQUN2QyxJQUFJMmQsR0FBaUIsRUFDYSxVQUE5QlQsRUFBVyxpQkFBNEQsSUFBOUJBLEVBQVcsaUJBQ3REUyxHQUFpQixHQUVuQixNQUNNQyxFQUFXLEtBQ2Y1RSxFQUFNclAsUUFBUXVQLFNBQVdBLEVBQVN2UCxRQUNsQ3FQLEVBQU1yUCxRQUFRMFAsTUFBUWtFLEVBQWE1VCxRQUM1QnFQLEVBQU1yUCxTQUVUa1UsRUFBZ0IsS0FDcEJWLEVBQVE5RCxNQUFNdUUsSUFBWSxDQUN4QmxFLHNCQUlFUixFQUFTdlAsVUFDWHVQLEVBQVN2UCxRQUFRbVUsVUFBWSxFQUMvQixFQUVJQyxHQUFhLEVBQUFDLEVBQUEsSUFBaUIsS0FDbEMsTUFBTUMsRUFoRVYsU0FBc0JyWixHQUNwQixNQUE0QixtQkFBZEEsRUFBMkJBLElBQWNBLENBQ3pELENBOEQ4QnNaLENBQWF0WixLQWpCcEIsRUFBQXFQLEVBQUEsR0FBY3NKLEVBQWE1VCxTQWlCZ0JpUSxLQUM5RHVELEVBQVFwRSxJQUFJNkUsSUFBWUssR0FHcEIvRSxFQUFTdlAsU0FDWGtVLEdBQ0YsSUFFSXZDLEVBQWEsZUFBa0IsSUFBTTZCLEVBQVE3QixXQUFXc0MsTUFBYSxDQUFDVCxJQUN0RWdCLEdBQWtCLEVBQUFILEVBQUEsSUFBaUJ0VSxJQUN2QzZULEVBQWE1VCxRQUFVRCxFQUNsQkEsSUFHRDJNLEdBQVFpRixJQUNWdUMsSUFDUzNFLEVBQVN2UCxTQUNsQndOLEVBQVcrQixFQUFTdlAsUUFBU2dVLEdBQy9CLElBRUlTLEVBQWMsZUFBa0IsS0FDcENqQixFQUFRakMsT0FBTzBDLElBQVlELEVBQWUsR0FDekMsQ0FBQ0EsRUFBZ0JSLElBQ3BCLGFBQWdCLElBQ1AsS0FDTGlCLEdBQWEsR0FFZCxDQUFDQSxJQUNKLGFBQWdCLEtBQ1YvSCxFQUNGMEgsSUFDVWQsR0FBa0JkLEdBQzVCaUMsR0FDRixHQUNDLENBQUMvSCxFQUFNK0gsRUFBYW5CLEVBQWVkLEVBQXNCNEIsSUFDNUQsTUFBTU0sRUFBc0JDLEdBQWlCblAsSUFDM0MsSUFBSW9QLEVBQ2lELE9BQXBEQSxFQUF3QkQsRUFBY25RLFlBQXNCb1EsRUFBc0J2RyxLQUFLc0csRUFBZW5QLEdBUXJGLFdBQWRBLEVBQU0vSyxLQUFvQyxNQUFoQitLLEVBQU1xUCxPQUVuQ2xELE1BR0lnQixJQUVIbk4sRUFBTVEsa0JBQ0Z5RyxHQUNGQSxFQUFRakgsRUFBTyxrQkFFbkIsRUFFSXNQLEVBQTRCSCxHQUFpQm5QLElBQ2pELElBQUl1UCxFQUMrQyxPQUFsREEsRUFBd0JKLEVBQWNwUSxVQUFvQndRLEVBQXNCMUcsS0FBS3NHLEVBQWVuUCxHQUNqR0EsRUFBTUUsU0FBV0YsRUFBTUMsZUFHdkJnSCxHQUNGQSxFQUFRakgsRUFBTyxnQkFDakIsRUE4Q0YsTUFBTyxDQUNMME4sYUE3Q21CLENBQUN5QixFQUFnQixDQUFDLEtBQ3JDLE1BQU1LLEdBQXFCLEVBQUFDLEVBQUEsR0FBcUIxQixVQUd6Q3lCLEVBQW1CdkIseUJBQ25CdUIsRUFBbUJ0QixtQkFDMUIsTUFBTXdCLEdBQXdCLE9BQVMsQ0FBQyxFQUFHRixFQUFvQkwsR0FDL0QsT0FBTyxPQUFTLENBQ2Q1SixLQUFNLGdCQUNMbUssRUFBdUIsQ0FDeEIxUSxVQUFXa1EsRUFBb0JRLEdBQy9CcGhCLElBQUs2TCxHQUNMLEVBa0NGd1QsaUJBaEN1QixDQUFDd0IsRUFBZ0IsQ0FBQyxLQUN6QyxNQUFNTyxFQUF3QlAsRUFDOUIsT0FBTyxPQUFTLENBQ2QsZUFBZSxHQUNkTyxFQUF1QixDQUN4QjNRLFFBQVN1USxFQUEwQkksR0FDbkN4SSxRQUNBLEVBMEJGMEcsbUJBeEJ5QixLQWdCbEIsQ0FDTHJVLFNBQVMsRUFBQW9XLEVBQUEsSUFoQlMsS0FDbEJ0QixHQUFVLEdBQ05KLEdBQ0ZBLEdBQ0YsR0FZd0QsTUFBWnBkLE9BQW1CLEVBQVNBLEVBQVMxRyxNQUFNb1AsU0FDdkZJLFVBQVUsRUFBQWdXLEVBQUEsSUFYUyxLQUNuQnRCLEdBQVUsR0FDTkgsR0FDRkEsSUFFRWxCLEdBQ0ZpQyxHQUNGLEdBSTBELE1BQVpwZSxPQUFtQixFQUFTQSxFQUFTMUcsTUFBTXdQLFlBTzNGd1UsUUFBU2hVLEVBQ1QwVCxVQUFXbUIsRUFDWDdDLGFBQ0FHLFNBQ0F3QixnQkFFSixDRWpFTSxFQUFTLE9BQVMsQ0FBQyxFQUFHTCxFQUFtQixDQUMzQ1UsUUFBUzdmLEtBRUxqRSxJQUFhLE9BQVMsQ0FBQyxFQUFHb2pCLEVBQW1CLENBQ2pEbkIsWUFFSWxkLEdBakhrQi9FLEtBQ3hCLE1BQU0sS0FDSjZjLEVBQUksT0FDSm9GLEVBQU0sUUFDTmxkLEdBQ0UvRSxFQUNFNEUsRUFBUSxDQUNaSSxLQUFNLENBQUMsUUFBUzZYLEdBQVFvRixHQUFVLFVBQ2xDSSxTQUFVLENBQUMsYUFFYixPQUFPLEVBQUFsZCxFQUFBLEdBQWVQLEVBQU9tZCxFQUFzQmhkLEVBQVEsRUF1RzNDSyxDQUFrQnBGLElBQzVCbVIsR0FBYSxDQUFDLEVBTXBCLFFBTGdDekosSUFBNUJsQixFQUFTMUcsTUFBTW1iLFdBQ2pCOUosR0FBVzhKLFNBQVcsTUFJcEJ3SSxHQUFlLENBQ2pCLE1BQU0sUUFDSnZVLEVBQU8sU0FDUEksR0FDRWlVLEtBQ0pwUyxHQUFXakMsUUFBVUEsRUFDckJpQyxHQUFXN0IsU0FBV0EsQ0FDeEIsQ0FDQSxNQUFNL0osR0FBbUgsT0FBdkdyQixFQUE4RCxPQUF0REMsRUFBdUIsTUFBVFMsT0FBZ0IsRUFBU0EsRUFBTUksTUFBZ0JiLEVBQWNHLEVBQVdrQixNQUFnQnRCLEVBQU84ZCxFQUNqSXVELEdBQXdJLE9BQXhIbmhCLEVBQXVFLE9BQTlEa2UsRUFBMkIsTUFBVDFkLE9BQWdCLEVBQVNBLEVBQU15ZCxVQUFvQkMsRUFBa0JoZSxFQUFXOGQsVUFBb0JoZSxFQUFRcWUsRUFDdkpwRixHQUFtRixPQUFsRWtGLEVBQStCLE1BQWI1ZCxPQUFvQixFQUFTQSxFQUFVSyxNQUFnQnVkLEVBQWtCaGUsRUFBZ0JTLEtBQzVId2dCLEdBQStGLE9BQTFFaEQsRUFBbUMsTUFBYjdkLE9BQW9CLEVBQVNBLEVBQVUwZCxVQUFvQkcsRUFBc0JqZSxFQUFnQjhkLFNBQzVJM00sSUFBWSxFQUFBNEgsRUFBQSxHQUFhLENBQzdCQyxZQUFhaFksR0FDYmlZLGtCQUFtQkgsR0FDbkJvSSx1QkFBd0IzZ0IsRUFDeEI0Z0IsYUFBY3JDLEVBQ2RzQyxnQkFBaUIsQ0FDZjFoQixNQUNBbUUsR0FBSTFCLEdBRU4xRyxjQUNBeUcsV0FBVyxFQUFBNEIsRUFBQSxHQUFLNUIsRUFBNEIsTUFBakI0VyxRQUF3QixFQUFTQSxHQUFjNVcsVUFBc0IsTUFBWDFCLFFBQWtCLEVBQVNBLEdBQVFDLE1BQU9oRixHQUFXNmMsTUFBUTdjLEdBQVdpaUIsU0FBc0IsTUFBWGxkLFFBQWtCLEVBQVNBLEdBQVFtZCxXQUV2TTBELElBQWdCLEVBQUF0SSxFQUFBLEdBQWEsQ0FDakNDLFlBQWFnSSxHQUNiL0gsa0JBQW1CZ0ksR0FDbkJHLGdCQUFpQmpELEVBQ2pCZ0QsYUFBY1osR0FDTHhCLElBQWlCLE9BQVMsQ0FBQyxFQUFHd0IsRUFBZSxDQUNsRHBRLFFBQVNtUixJQUNIMUMsR0FDRkEsRUFBZ0IwQyxHQUVHLE1BQWpCZixHQUF5QkEsRUFBY3BRLFNBQ3pDb1EsRUFBY3BRLFFBQVFtUixFQUN4QixLQUlOcGYsV0FBVyxFQUFBNEIsRUFBQSxHQUEwQixNQUFyQm1kLFFBQTRCLEVBQVNBLEdBQWtCL2UsVUFBNEIsTUFBakJpYyxPQUF3QixFQUFTQSxFQUFjamMsVUFBc0IsTUFBWDFCLFFBQWtCLEVBQVNBLEdBQVFzZCxVQUMvS3JpQixnQkFFRixPQUFLa2pCLEdBQWdCckcsR0FBVTRHLEtBQWlCeEIsSUFHNUIsU0FBSzZELEVBQUEsRUFBUSxDQUMvQjdoQixJQUFLdWYsR0FDTHBZLFVBQVdBLEVBQ1gyWCxjQUFlQSxFQUNmdmMsVUFBdUIsVUFBTWpCLElBQVUsT0FBUyxDQUFDLEVBQUdtUSxHQUFXLENBQzdEbFAsU0FBVSxFQUFFeWMsR0FBZ0JSLEdBQWlDLFNBQUs4QyxJQUFjLE9BQVMsQ0FBQyxFQUFHSyxLQUFrQixNQUFtQixTQUFLRyxFQUFBLEVBQVcsQ0FDaEpsRCxvQkFBcUJBLEVBQ3JCRCxpQkFBa0JBLEVBQ2xCSSxvQkFBcUJBLEVBQ3JCZ0QsVUFBV2xFLEdBQ1hqRixLQUFNQSxFQUNOclcsU0FBdUIsZUFBbUJBLEVBQVUySyxZQWJqRCxJQWlCWCxHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRmlsbGVkSW5wdXQvZmlsbGVkSW5wdXRDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0ZpbGxlZElucHV0L0ZpbGxlZElucHV0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC9Gb3JtQ29udHJvbC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC9Gb3JtQ29udHJvbENvbnRleHQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtSGVscGVyVGV4dC9mb3JtSGVscGVyVGV4dENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUhlbHBlclRleHQvRm9ybUhlbHBlclRleHQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvR2xvYmFsU3R5bGVzL0dsb2JhbFN0eWxlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9HcmlkL0dyaWRDb250ZXh0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0dyaWQvZ3JpZENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvR3JpZC9HcmlkLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0dyb3cvR3Jvdy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dC9pbnB1dENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXQvSW5wdXQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXRCYXNlL0lucHV0QmFzZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dEJhc2UvaW5wdXRCYXNlQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dEJhc2UvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUxhYmVsL2Zvcm1MYWJlbENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUxhYmVsL0Zvcm1MYWJlbC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dExhYmVsL2lucHV0TGFiZWxDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0lucHV0TGFiZWwvSW5wdXRMYWJlbC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9MaXN0L0xpc3RDb250ZXh0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3QvbGlzdENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGlzdC9MaXN0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL01lbnVMaXN0L01lbnVMaXN0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL01lbnUvbWVudUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTWVudS9NZW51LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL01vZGFsL01vZGFsTWFuYWdlci5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Nb2RhbC91c2VNb2RhbC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Nb2RhbC9tb2RhbENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTW9kYWwvTW9kYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IHsgaW5wdXRCYXNlQ2xhc3NlcyB9IGZyb20gJy4uL0lucHV0QmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsbGVkSW5wdXRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZpbGxlZElucHV0Jywgc2xvdCk7XG59XG5jb25zdCBmaWxsZWRJbnB1dENsYXNzZXMgPSBfZXh0ZW5kcyh7fSwgaW5wdXRCYXNlQ2xhc3NlcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRmlsbGVkSW5wdXQnLCBbJ3Jvb3QnLCAndW5kZXJsaW5lJywgJ2lucHV0J10pKTtcbmV4cG9ydCBkZWZhdWx0IGZpbGxlZElucHV0Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJkaXNhYmxlVW5kZXJsaW5lXCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImZ1bGxXaWR0aFwiLCBcImhpZGRlbkxhYmVsXCIsIFwiaW5wdXRDb21wb25lbnRcIiwgXCJtdWx0aWxpbmVcIiwgXCJzbG90UHJvcHNcIiwgXCJzbG90c1wiLCBcInR5cGVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IElucHV0QmFzZSBmcm9tICcuLi9JbnB1dEJhc2UnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBmaWxsZWRJbnB1dENsYXNzZXMsIHsgZ2V0RmlsbGVkSW5wdXRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2ZpbGxlZElucHV0Q2xhc3Nlcyc7XG5pbXBvcnQgeyByb290T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyLCBpbnB1dE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIsIElucHV0QmFzZVJvb3QsIElucHV0QmFzZUNvbXBvbmVudCBhcyBJbnB1dEJhc2VJbnB1dCB9IGZyb20gJy4uL0lucHV0QmFzZS9JbnB1dEJhc2UnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGRpc2FibGVVbmRlcmxpbmVcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsICFkaXNhYmxlVW5kZXJsaW5lICYmICd1bmRlcmxpbmUnXSxcbiAgICBpbnB1dDogWydpbnB1dCddXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRGaWxsZWRJbnB1dFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgY2xhc3NlcywgY29tcG9zZWRDbGFzc2VzKTtcbn07XG5jb25zdCBGaWxsZWRJbnB1dFJvb3QgPSBzdHlsZWQoSW5wdXRCYXNlUm9vdCwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpRmlsbGVkSW5wdXQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFsuLi5pbnB1dEJhc2VSb290T3ZlcnJpZGVzUmVzb2x2ZXIocHJvcHMsIHN0eWxlcyksICFvd25lclN0YXRlLmRpc2FibGVVbmRlcmxpbmUgJiYgc3R5bGVzLnVuZGVybGluZV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIHZhciBfcGFsZXR0ZTtcbiAgY29uc3QgbGlnaHQgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCc7XG4gIGNvbnN0IGJvdHRvbUxpbmVDb2xvciA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC40MiknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSc7XG4gIGNvbnN0IGJhY2tncm91bmRDb2xvciA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC4wNiknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOSknO1xuICBjb25zdCBob3ZlckJhY2tncm91bmQgPSBsaWdodCA/ICdyZ2JhKDAsIDAsIDAsIDAuMDkpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTMpJztcbiAgY29uc3QgZGlzYWJsZWRCYWNrZ3JvdW5kID0gbGlnaHQgPyAncmdiYSgwLCAwLCAwLCAwLjEyKScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSc7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkZpbGxlZElucHV0LmJnIDogYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclRvcExlZnRSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdiYWNrZ3JvdW5kLWNvbG9yJywge1xuICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsXG4gICAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gICAgfSksXG4gICAgJyY6aG92ZXInOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuRmlsbGVkSW5wdXQuaG92ZXJCZyA6IGhvdmVyQmFja2dyb3VuZCxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5GaWxsZWRJbnB1dC5iZyA6IGJhY2tncm91bmRDb2xvclxuICAgICAgfVxuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmZvY3VzZWR9YF06IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5GaWxsZWRJbnB1dC5iZyA6IGJhY2tncm91bmRDb2xvclxuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuRmlsbGVkSW5wdXQuZGlzYWJsZWRCZyA6IGRpc2FibGVkQmFja2dyb3VuZFxuICAgIH1cbiAgfSwgIW93bmVyU3RhdGUuZGlzYWJsZVVuZGVybGluZSAmJiB7XG4gICAgJyY6OmFmdGVyJzoge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMnB4IHNvbGlkICR7KF9wYWxldHRlID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvciB8fCAncHJpbWFyeSddKSA9PSBudWxsID8gdm9pZCAwIDogX3BhbGV0dGUubWFpbn1gLFxuICAgICAgbGVmdDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIC8vIERvaW5nIHRoZSBvdGhlciB3YXkgYXJvdW5kIGNyYXNoIG9uIElFMTEgXCInJ1wiIGh0dHBzOi8vZ2l0aHViLmNvbS9jc3NpbmpzL2pzcy9pc3N1ZXMvMjQyXG4gICAgICBjb250ZW50OiAnXCJcIicsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdHJhbnNmb3JtOiAnc2NhbGVYKDApJyxcbiAgICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlcixcbiAgICAgICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICAgICAgfSksXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScgLy8gVHJhbnNwYXJlbnQgdG8gdGhlIGhvdmVyIHN0eWxlLlxuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmZvY3VzZWR9OmFmdGVyYF06IHtcbiAgICAgIC8vIHRyYW5zbGF0ZVgoMCkgaXMgYSB3b3JrYXJvdW5kIGZvciBTYWZhcmkgdHJhbnNmb3JtIHNjYWxlIGJ1Z1xuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzMxNzY2XG4gICAgICB0cmFuc2Zvcm06ICdzY2FsZVgoMSkgdHJhbnNsYXRlWCgwKSdcbiAgICB9LFxuICAgIFtgJi4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5lcnJvcn1gXToge1xuICAgICAgJyY6OmJlZm9yZSwgJjo6YWZ0ZXInOiB7XG4gICAgICAgIGJvcmRlckJvdHRvbUNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gICAgICB9XG4gICAgfSxcbiAgICAnJjo6YmVmb3JlJzoge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7dGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLmNvbW1vbi5vbkJhY2tncm91bmRDaGFubmVsfSAvICR7dGhlbWUudmFycy5vcGFjaXR5LmlucHV0VW5kZXJsaW5lfSlgIDogYm90dG9tTGluZUNvbG9yfWAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgYm90dG9tOiAwLFxuICAgICAgLy8gRG9pbmcgdGhlIG90aGVyIHdheSBhcm91bmQgY3Jhc2ggb24gSUUxMSBcIicnXCIgaHR0cHM6Ly9naXRodWIuY29tL2Nzc2luanMvanNzL2lzc3Vlcy8yNDJcbiAgICAgIGNvbnRlbnQ6ICdcIlxcXFwwMGEwXCInLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICByaWdodDogMCxcbiAgICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnYm9yZGVyLWJvdHRvbS1jb2xvcicsIHtcbiAgICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXJcbiAgICAgIH0pLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnIC8vIFRyYW5zcGFyZW50IHRvIHRoZSBob3ZlciBzdHlsZS5cbiAgICB9LFxuICAgIFtgJjpob3Zlcjpub3QoLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmRpc2FibGVkfSwgLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmVycm9yfSk6YmVmb3JlYF06IHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQucHJpbWFyeX1gXG4gICAgfSxcbiAgICBbYCYuJHtmaWxsZWRJbnB1dENsYXNzZXMuZGlzYWJsZWR9OmJlZm9yZWBdOiB7XG4gICAgICBib3JkZXJCb3R0b21TdHlsZTogJ2RvdHRlZCdcbiAgICB9XG4gIH0sIG93bmVyU3RhdGUuc3RhcnRBZG9ybm1lbnQgJiYge1xuICAgIHBhZGRpbmdMZWZ0OiAxMlxuICB9LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiB7XG4gICAgcGFkZGluZ1JpZ2h0OiAxMlxuICB9LCBvd25lclN0YXRlLm11bHRpbGluZSAmJiBfZXh0ZW5kcyh7XG4gICAgcGFkZGluZzogJzI1cHggMTJweCA4cHgnXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICAgcGFkZGluZ1RvcDogMjEsXG4gICAgcGFkZGluZ0JvdHRvbTogNFxuICB9LCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIHtcbiAgICBwYWRkaW5nVG9wOiAxNixcbiAgICBwYWRkaW5nQm90dG9tOiAxN1xuICB9LCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICAgcGFkZGluZ1RvcDogOCxcbiAgICBwYWRkaW5nQm90dG9tOiA5XG4gIH0pKTtcbn0pO1xuY29uc3QgRmlsbGVkSW5wdXRJbnB1dCA9IHN0eWxlZChJbnB1dEJhc2VJbnB1dCwge1xuICBuYW1lOiAnTXVpRmlsbGVkSW5wdXQnLFxuICBzbG90OiAnSW5wdXQnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgcGFkZGluZ1RvcDogMjUsXG4gIHBhZGRpbmdSaWdodDogMTIsXG4gIHBhZGRpbmdCb3R0b206IDgsXG4gIHBhZGRpbmdMZWZ0OiAxMlxufSwgIXRoZW1lLnZhcnMgJiYge1xuICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgIFdlYmtpdEJveFNoYWRvdzogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcwIDAgMCAxMDBweCAjMjY2Nzk4IGluc2V0JyxcbiAgICBXZWJraXRUZXh0RmlsbENvbG9yOiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJyNmZmYnLFxuICAgIGNhcmV0Q29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnI2ZmZicsXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogJ2luaGVyaXQnLFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAnaW5oZXJpdCdcbiAgfVxufSwgdGhlbWUudmFycyAmJiB7XG4gICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogJ2luaGVyaXQnLFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAnaW5oZXJpdCdcbiAgfSxcbiAgW3RoZW1lLmdldENvbG9yU2NoZW1lU2VsZWN0b3IoJ2RhcmsnKV06IHtcbiAgICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgICAgV2Via2l0Qm94U2hhZG93OiAnMCAwIDAgMTAwcHggIzI2Njc5OCBpbnNldCcsXG4gICAgICBXZWJraXRUZXh0RmlsbENvbG9yOiAnI2ZmZicsXG4gICAgICBjYXJldENvbG9yOiAnI2ZmZidcbiAgICB9XG4gIH1cbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHBhZGRpbmdUb3A6IDIxLFxuICBwYWRkaW5nQm90dG9tOiA0XG59LCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIHtcbiAgcGFkZGluZ1RvcDogMTYsXG4gIHBhZGRpbmdCb3R0b206IDE3XG59LCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHtcbiAgcGFkZGluZ0xlZnQ6IDBcbn0sIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHtcbiAgcGFkZGluZ1JpZ2h0OiAwXG59LCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHBhZGRpbmdUb3A6IDgsXG4gIHBhZGRpbmdCb3R0b206IDlcbn0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIHtcbiAgcGFkZGluZ1RvcDogMCxcbiAgcGFkZGluZ0JvdHRvbTogMCxcbiAgcGFkZGluZ0xlZnQ6IDAsXG4gIHBhZGRpbmdSaWdodDogMFxufSkpO1xuY29uc3QgRmlsbGVkSW5wdXQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGaWxsZWRJbnB1dChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9yZWYsIF9zbG90cyRyb290LCBfcmVmMiwgX3Nsb3RzJGlucHV0O1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUZpbGxlZElucHV0J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY29tcG9uZW50cyA9IHt9LFxuICAgICAgY29tcG9uZW50c1Byb3BzOiBjb21wb25lbnRzUHJvcHNQcm9wLFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICAvLyBkZWNsYXJlIGhlcmUgdG8gcHJldmVudCBzcHJlYWRpbmcgdG8gRE9NXG4gICAgICBpbnB1dENvbXBvbmVudCA9ICdpbnB1dCcsXG4gICAgICBtdWx0aWxpbmUgPSBmYWxzZSxcbiAgICAgIHNsb3RQcm9wcyxcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICB0eXBlID0gJ3RleHQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBmdWxsV2lkdGgsXG4gICAgaW5wdXRDb21wb25lbnQsXG4gICAgbXVsdGlsaW5lLFxuICAgIHR5cGVcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhwcm9wcyk7XG4gIGNvbnN0IGZpbGxlZElucHV0Q29tcG9uZW50c1Byb3BzID0ge1xuICAgIHJvb3Q6IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9LFxuICAgIGlucHV0OiB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfVxuICB9O1xuICBjb25zdCBjb21wb25lbnRzUHJvcHMgPSAoc2xvdFByb3BzICE9IG51bGwgPyBzbG90UHJvcHMgOiBjb21wb25lbnRzUHJvcHNQcm9wKSA/IGRlZXBtZXJnZShmaWxsZWRJbnB1dENvbXBvbmVudHNQcm9wcywgc2xvdFByb3BzICE9IG51bGwgPyBzbG90UHJvcHMgOiBjb21wb25lbnRzUHJvcHNQcm9wKSA6IGZpbGxlZElucHV0Q29tcG9uZW50c1Byb3BzO1xuICBjb25zdCBSb290U2xvdCA9IChfcmVmID0gKF9zbG90cyRyb290ID0gc2xvdHMucm9vdCkgIT0gbnVsbCA/IF9zbG90cyRyb290IDogY29tcG9uZW50cy5Sb290KSAhPSBudWxsID8gX3JlZiA6IEZpbGxlZElucHV0Um9vdDtcbiAgY29uc3QgSW5wdXRTbG90ID0gKF9yZWYyID0gKF9zbG90cyRpbnB1dCA9IHNsb3RzLmlucHV0KSAhPSBudWxsID8gX3Nsb3RzJGlucHV0IDogY29tcG9uZW50cy5JbnB1dCkgIT0gbnVsbCA/IF9yZWYyIDogRmlsbGVkSW5wdXRJbnB1dDtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KElucHV0QmFzZSwgX2V4dGVuZHMoe1xuICAgIHNsb3RzOiB7XG4gICAgICByb290OiBSb290U2xvdCxcbiAgICAgIGlucHV0OiBJbnB1dFNsb3RcbiAgICB9LFxuICAgIGNvbXBvbmVudHNQcm9wczogY29tcG9uZW50c1Byb3BzLFxuICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgIGlucHV0Q29tcG9uZW50OiBpbnB1dENvbXBvbmVudCxcbiAgICBtdWx0aWxpbmU6IG11bHRpbGluZSxcbiAgICByZWY6IHJlZixcbiAgICB0eXBlOiB0eXBlXG4gIH0sIG90aGVyLCB7XG4gICAgY2xhc3NlczogY2xhc3Nlc1xuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZpbGxlZElucHV0LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBoZWxwcyB1c2VycyB0byBmaWxsIGZvcm1zIGZhc3RlciwgZXNwZWNpYWxseSBvbiBtb2JpbGUgZGV2aWNlcy5cbiAgICogVGhlIG5hbWUgY2FuIGJlIGNvbmZ1c2luZywgYXMgaXQncyBtb3JlIGxpa2UgYW4gYXV0b2ZpbGwuXG4gICAqIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCBpdCBbZm9sbG93aW5nIHRoZSBzcGVjaWZpY2F0aW9uXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNhdXRvZmlsbCkuXG4gICAqL1xuICBhdXRvQ29tcGxldGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAncHJpbWFyeSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3ByaW1hcnknLCAnc2Vjb25kYXJ5J10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdHNgIHByb3AgaW5zdGVhZC5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgSW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RQcm9wc2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90UHJvcHNgIHByb3AgaW5zdGVhZCwgYXMgYGNvbXBvbmVudHNQcm9wc2Agd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcm9vdDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaW5wdXQgd2lsbCBub3QgaGF2ZSBhbiB1bmRlcmxpbmUuXG4gICAqL1xuICBkaXNhYmxlVW5kZXJsaW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEVuZCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIGVuZEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgaW5kaWNhdGUgYW4gZXJyb3IuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGhpZGRlbi5cbiAgICogVGhpcyBpcyB1c2VkIHRvIGluY3JlYXNlIGRlbnNpdHkgZm9yIGEgYEZpbGxlZElucHV0YC5cbiAgICogQmUgc3VyZSB0byBhZGQgYGFyaWEtbGFiZWxgIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBoaWRkZW5MYWJlbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5wdXQnXG4gICAqL1xuICBpbnB1dENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdub25lJ2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJ10pLFxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1heFJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtaW5Sb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgW1RleHRhcmVhQXV0b3NpemVdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0YXJlYS1hdXRvc2l6ZS8pIGVsZW1lbnQgaXMgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aWxpbmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBIVE1MSW5wdXRFbGVtZW50Pn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgc2hvcnQgaGludCBkaXNwbGF5ZWQgaW4gdGhlIGBpbnB1dGAgYmVmb3JlIHRoZSB1c2VyIGVudGVycyBhIHZhbHVlLlxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJdCBwcmV2ZW50cyB0aGUgdXNlciBmcm9tIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGRcbiAgICogKG5vdCBmcm9tIGludGVyYWN0aW5nIHdpdGggdGhlIGZpZWxkKS5cbiAgICovXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzUHJvcHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFN0YXJ0IGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgc3RhcnRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LiBJdCBzaG91bGQgYmUgW2EgdmFsaWQgSFRNTDUgaW5wdXQgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0Zvcm1fJTNDaW5wdXQlM0VfdHlwZXMpLlxuICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudCwgcmVxdWlyZWQgZm9yIGEgY29udHJvbGxlZCBjb21wb25lbnQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufSA6IHZvaWQgMDtcbkZpbGxlZElucHV0Lm11aU5hbWUgPSAnSW5wdXQnO1xuZXhwb3J0IGRlZmF1bHQgRmlsbGVkSW5wdXQ7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlGb3JtQ29udHJvbCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUNvbnRyb2xDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRm9ybUNvbnRyb2wnLCBbJ3Jvb3QnLCAnbWFyZ2luTm9uZScsICdtYXJnaW5Ob3JtYWwnLCAnbWFyZ2luRGVuc2UnLCAnZnVsbFdpZHRoJywgJ2Rpc2FibGVkJ10pO1xuZXhwb3J0IGRlZmF1bHQgZm9ybUNvbnRyb2xDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRcIiwgXCJkaXNhYmxlZFwiLCBcImVycm9yXCIsIFwiZm9jdXNlZFwiLCBcImZ1bGxXaWR0aFwiLCBcImhpZGRlbkxhYmVsXCIsIFwibWFyZ2luXCIsIFwicmVxdWlyZWRcIiwgXCJzaXplXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBpc0ZpbGxlZCwgaXNBZG9ybmVkU3RhcnQgfSBmcm9tICcuLi9JbnB1dEJhc2UvdXRpbHMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgaXNNdWlFbGVtZW50IGZyb20gJy4uL3V0aWxzL2lzTXVpRWxlbWVudCc7XG5pbXBvcnQgRm9ybUNvbnRyb2xDb250ZXh0IGZyb20gJy4vRm9ybUNvbnRyb2xDb250ZXh0JztcbmltcG9ydCB7IGdldEZvcm1Db250cm9sVXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuL2Zvcm1Db250cm9sQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgbWFyZ2luLFxuICAgIGZ1bGxXaWR0aFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgbWFyZ2luICE9PSAnbm9uZScgJiYgYG1hcmdpbiR7Y2FwaXRhbGl6ZShtYXJnaW4pfWAsIGZ1bGxXaWR0aCAmJiAnZnVsbFdpZHRoJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBGb3JtQ29udHJvbFJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aUZvcm1Db250cm9sJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHtcbiAgICBvd25lclN0YXRlXG4gIH0sIHN0eWxlcykgPT4ge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3R5bGVzLnJvb3QsIHN0eWxlc1tgbWFyZ2luJHtjYXBpdGFsaXplKG93bmVyU3RhdGUubWFyZ2luKX1gXSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYgc3R5bGVzLmZ1bGxXaWR0aCk7XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAvLyBSZXNldCBmaWVsZHNldCBkZWZhdWx0IHN0eWxlLlxuICBtaW5XaWR0aDogMCxcbiAgcGFkZGluZzogMCxcbiAgbWFyZ2luOiAwLFxuICBib3JkZXI6IDAsXG4gIHZlcnRpY2FsQWxpZ246ICd0b3AnXG59LCBvd25lclN0YXRlLm1hcmdpbiA9PT0gJ25vcm1hbCcgJiYge1xuICBtYXJnaW5Ub3A6IDE2LFxuICBtYXJnaW5Cb3R0b206IDhcbn0sIG93bmVyU3RhdGUubWFyZ2luID09PSAnZGVuc2UnICYmIHtcbiAgbWFyZ2luVG9wOiA4LFxuICBtYXJnaW5Cb3R0b206IDRcbn0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHtcbiAgd2lkdGg6ICcxMDAlJ1xufSkpO1xuXG4vKipcbiAqIFByb3ZpZGVzIGNvbnRleHQgc3VjaCBhcyBmaWxsZWQvZm9jdXNlZC9lcnJvci9yZXF1aXJlZCBmb3IgZm9ybSBpbnB1dHMuXG4gKiBSZWx5aW5nIG9uIHRoZSBjb250ZXh0IHByb3ZpZGVzIGhpZ2ggZmxleGliaWxpdHkgYW5kIGVuc3VyZXMgdGhhdCB0aGUgc3RhdGUgYWx3YXlzIHN0YXlzXG4gKiBjb25zaXN0ZW50IGFjcm9zcyB0aGUgY2hpbGRyZW4gb2YgdGhlIGBGb3JtQ29udHJvbGAuXG4gKiBUaGlzIGNvbnRleHQgaXMgdXNlZCBieSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6XG4gKlxuICogIC0gRm9ybUxhYmVsXG4gKiAgLSBGb3JtSGVscGVyVGV4dFxuICogIC0gSW5wdXRcbiAqICAtIElucHV0TGFiZWxcbiAqXG4gKiBZb3UgY2FuIGZpbmQgb25lIGNvbXBvc2l0aW9uIGV4YW1wbGUgYmVsb3cgYW5kIG1vcmUgZ29pbmcgdG8gW3RoZSBkZW1vc10oL21hdGVyaWFsLXVpL3JlYWN0LXRleHQtZmllbGQvI2NvbXBvbmVudHMpLlxuICpcbiAqIGBgYGpzeFxuICogPEZvcm1Db250cm9sPlxuICogICA8SW5wdXRMYWJlbCBodG1sRm9yPVwibXktaW5wdXRcIj5FbWFpbCBhZGRyZXNzPC9JbnB1dExhYmVsPlxuICogICA8SW5wdXQgaWQ9XCJteS1pbnB1dFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJteS1oZWxwZXItdGV4dFwiIC8+XG4gKiAgIDxGb3JtSGVscGVyVGV4dCBpZD1cIm15LWhlbHBlci10ZXh0XCI+V2UnbGwgbmV2ZXIgc2hhcmUgeW91ciBlbWFpbC48L0Zvcm1IZWxwZXJUZXh0PlxuICogPC9Gb3JtQ29udHJvbD5cbiAqIGBgYFxuICpcbiAqIOKaoO+4jyBPbmx5IG9uZSBgSW5wdXRCYXNlYCBjYW4gYmUgdXNlZCB3aXRoaW4gYSBGb3JtQ29udHJvbCBiZWNhdXNlIGl0IGNyZWF0ZXMgdmlzdWFsIGluY29uc2lzdGVuY2llcy5cbiAqIEZvciBpbnN0YW5jZSwgb25seSBvbmUgaW5wdXQgY2FuIGJlIGZvY3VzZWQgYXQgdGhlIHNhbWUgdGltZSwgdGhlIHN0YXRlIHNob3VsZG4ndCBiZSBzaGFyZWQuXG4gKi9cbmNvbnN0IEZvcm1Db250cm9sID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9ybUNvbnRyb2woaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpRm9ybUNvbnRyb2wnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgY29tcG9uZW50ID0gJ2RpdicsXG4gICAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgICAgZXJyb3IgPSBmYWxzZSxcbiAgICAgIGZvY3VzZWQ6IHZpc3VhbGx5Rm9jdXNlZCxcbiAgICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgICAgaGlkZGVuTGFiZWwgPSBmYWxzZSxcbiAgICAgIG1hcmdpbiA9ICdub25lJyxcbiAgICAgIHJlcXVpcmVkID0gZmFsc2UsXG4gICAgICBzaXplID0gJ21lZGl1bScsXG4gICAgICB2YXJpYW50ID0gJ291dGxpbmVkJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3IsXG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBoaWRkZW5MYWJlbCxcbiAgICBtYXJnaW4sXG4gICAgcmVxdWlyZWQsXG4gICAgc2l6ZSxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IFthZG9ybmVkU3RhcnQsIHNldEFkb3JuZWRTdGFydF0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiB7XG4gICAgLy8gV2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGNoaWxkcmVuIGFuZCBmaW5kIHRoZSBJbnB1dCBpbiBvcmRlclxuICAgIC8vIHRvIGZ1bGx5IHN1cHBvcnQgc2VydmVyLXNpZGUgcmVuZGVyaW5nLlxuICAgIGxldCBpbml0aWFsQWRvcm5lZFN0YXJ0ID0gZmFsc2U7XG4gICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKGNoaWxkcmVuLCBjaGlsZCA9PiB7XG4gICAgICAgIGlmICghaXNNdWlFbGVtZW50KGNoaWxkLCBbJ0lucHV0JywgJ1NlbGVjdCddKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnB1dCA9IGlzTXVpRWxlbWVudChjaGlsZCwgWydTZWxlY3QnXSkgPyBjaGlsZC5wcm9wcy5pbnB1dCA6IGNoaWxkO1xuICAgICAgICBpZiAoaW5wdXQgJiYgaXNBZG9ybmVkU3RhcnQoaW5wdXQucHJvcHMpKSB7XG4gICAgICAgICAgaW5pdGlhbEFkb3JuZWRTdGFydCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaW5pdGlhbEFkb3JuZWRTdGFydDtcbiAgfSk7XG4gIGNvbnN0IFtmaWxsZWQsIHNldEZpbGxlZF0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiB7XG4gICAgLy8gV2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGNoaWxkcmVuIGFuZCBmaW5kIHRoZSBJbnB1dCBpbiBvcmRlclxuICAgIC8vIHRvIGZ1bGx5IHN1cHBvcnQgc2VydmVyLXNpZGUgcmVuZGVyaW5nLlxuICAgIGxldCBpbml0aWFsRmlsbGVkID0gZmFsc2U7XG4gICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKGNoaWxkcmVuLCBjaGlsZCA9PiB7XG4gICAgICAgIGlmICghaXNNdWlFbGVtZW50KGNoaWxkLCBbJ0lucHV0JywgJ1NlbGVjdCddKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGaWxsZWQoY2hpbGQucHJvcHMsIHRydWUpIHx8IGlzRmlsbGVkKGNoaWxkLnByb3BzLmlucHV0UHJvcHMsIHRydWUpKSB7XG4gICAgICAgICAgaW5pdGlhbEZpbGxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaW5pdGlhbEZpbGxlZDtcbiAgfSk7XG4gIGNvbnN0IFtmb2N1c2VkU3RhdGUsIHNldEZvY3VzZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBpZiAoZGlzYWJsZWQgJiYgZm9jdXNlZFN0YXRlKSB7XG4gICAgc2V0Rm9jdXNlZChmYWxzZSk7XG4gIH1cbiAgY29uc3QgZm9jdXNlZCA9IHZpc3VhbGx5Rm9jdXNlZCAhPT0gdW5kZWZpbmVkICYmICFkaXNhYmxlZCA/IHZpc3VhbGx5Rm9jdXNlZCA6IGZvY3VzZWRTdGF0ZTtcbiAgbGV0IHJlZ2lzdGVyRWZmZWN0O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIGNvbnN0IHJlZ2lzdGVyZWRJbnB1dCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgcmVnaXN0ZXJFZmZlY3QgPSAoKSA9PiB7XG4gICAgICBpZiAocmVnaXN0ZXJlZElucHV0LmN1cnJlbnQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogVGhlcmUgYXJlIG11bHRpcGxlIGBJbnB1dEJhc2VgIGNvbXBvbmVudHMgaW5zaWRlIGEgRm9ybUNvbnRyb2wuJywgJ1RoaXMgY3JlYXRlcyB2aXN1YWwgaW5jb25zaXN0ZW5jaWVzLCBvbmx5IHVzZSBvbmUgYElucHV0QmFzZWAuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgICAgcmVnaXN0ZXJlZElucHV0LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgcmVnaXN0ZXJlZElucHV0LmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH07XG4gICAgfTtcbiAgfVxuICBjb25zdCBjaGlsZENvbnRleHQgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYWRvcm5lZFN0YXJ0LFxuICAgICAgc2V0QWRvcm5lZFN0YXJ0LFxuICAgICAgY29sb3IsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGVycm9yLFxuICAgICAgZmlsbGVkLFxuICAgICAgZm9jdXNlZCxcbiAgICAgIGZ1bGxXaWR0aCxcbiAgICAgIGhpZGRlbkxhYmVsLFxuICAgICAgc2l6ZSxcbiAgICAgIG9uQmx1cjogKCkgPT4ge1xuICAgICAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgICAgIH0sXG4gICAgICBvbkVtcHR5OiAoKSA9PiB7XG4gICAgICAgIHNldEZpbGxlZChmYWxzZSk7XG4gICAgICB9LFxuICAgICAgb25GaWxsZWQ6ICgpID0+IHtcbiAgICAgICAgc2V0RmlsbGVkKHRydWUpO1xuICAgICAgfSxcbiAgICAgIG9uRm9jdXM6ICgpID0+IHtcbiAgICAgICAgc2V0Rm9jdXNlZCh0cnVlKTtcbiAgICAgIH0sXG4gICAgICByZWdpc3RlckVmZmVjdCxcbiAgICAgIHJlcXVpcmVkLFxuICAgICAgdmFyaWFudFxuICAgIH07XG4gIH0sIFthZG9ybmVkU3RhcnQsIGNvbG9yLCBkaXNhYmxlZCwgZXJyb3IsIGZpbGxlZCwgZm9jdXNlZCwgZnVsbFdpZHRoLCBoaWRkZW5MYWJlbCwgcmVnaXN0ZXJFZmZlY3QsIHJlcXVpcmVkLCBzaXplLCB2YXJpYW50XSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChGb3JtQ29udHJvbENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY2hpbGRDb250ZXh0LFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChGb3JtQ29udHJvbFJvb3QsIF9leHRlbmRzKHtcbiAgICAgIGFzOiBjb21wb25lbnQsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRm9ybUNvbnRyb2wucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBAZGVmYXVsdCAncHJpbWFyeSdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsLCBpbnB1dCBhbmQgaGVscGVyIHRleHQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhIGRpc2FibGVkIHN0YXRlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgZGlzcGxheWVkIGluIGFuIGVycm9yIHN0YXRlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc3BsYXllZCBpbiBmb2N1c2VkIHN0YXRlLlxuICAgKi9cbiAgZm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgaGlkZGVuLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8gaW5jcmVhc2UgZGVuc2l0eSBmb3IgYSBgRmlsbGVkSW5wdXRgLlxuICAgKiBCZSBzdXJlIHRvIGFkZCBgYXJpYS1sYWJlbGAgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGhpZGRlbkxhYmVsOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAgb3IgYG5vcm1hbGAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcgb2YgdGhpcyBhbmQgY29udGFpbmVkIGNvbXBvbmVudHMuXG4gICAqIEBkZWZhdWx0ICdub25lJ1xuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJywgJ25vcm1hbCddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHdpbGwgaW5kaWNhdGUgdGhhdCB0aGUgYGlucHV0YCBpcyByZXF1aXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdtZWRpdW0nXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ21lZGl1bScsICdzbWFsbCddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCAnb3V0bGluZWQnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBGb3JtQ29udHJvbDsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IEZvcm1Db250cm9sQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBGb3JtQ29udHJvbENvbnRleHQuZGlzcGxheU5hbWUgPSAnRm9ybUNvbnRyb2xDb250ZXh0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IEZvcm1Db250cm9sQ29udGV4dDsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtQ29udHJvbFN0YXRlKHtcbiAgcHJvcHMsXG4gIHN0YXRlcyxcbiAgbXVpRm9ybUNvbnRyb2xcbn0pIHtcbiAgcmV0dXJuIHN0YXRlcy5yZWR1Y2UoKGFjYywgc3RhdGUpID0+IHtcbiAgICBhY2Nbc3RhdGVdID0gcHJvcHNbc3RhdGVdO1xuICAgIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wc1tzdGF0ZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGFjY1tzdGF0ZV0gPSBtdWlGb3JtQ29udHJvbFtzdGF0ZV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn0iLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBGb3JtQ29udHJvbENvbnRleHQgZnJvbSAnLi9Gb3JtQ29udHJvbENvbnRleHQnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlRm9ybUNvbnRyb2woKSB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KEZvcm1Db250cm9sQ29udGV4dCk7XG59IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtSGVscGVyVGV4dFV0aWxpdHlDbGFzc2VzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlGb3JtSGVscGVyVGV4dCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUhlbHBlclRleHRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRm9ybUhlbHBlclRleHQnLCBbJ3Jvb3QnLCAnZXJyb3InLCAnZGlzYWJsZWQnLCAnc2l6ZVNtYWxsJywgJ3NpemVNZWRpdW0nLCAnY29udGFpbmVkJywgJ2ZvY3VzZWQnLCAnZmlsbGVkJywgJ3JlcXVpcmVkJ10pO1xuZXhwb3J0IGRlZmF1bHQgZm9ybUhlbHBlclRleHRDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbnZhciBfc3BhbjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcImZpbGxlZFwiLCBcImZvY3VzZWRcIiwgXCJtYXJnaW5cIiwgXCJyZXF1aXJlZFwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgZm9ybUhlbHBlclRleHRDbGFzc2VzLCB7IGdldEZvcm1IZWxwZXJUZXh0VXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuL2Zvcm1IZWxwZXJUZXh0Q2xhc3Nlcyc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgY29udGFpbmVkLFxuICAgIHNpemUsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZmlsbGVkLFxuICAgIGZvY3VzZWQsXG4gICAgcmVxdWlyZWRcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGVycm9yICYmICdlcnJvcicsIHNpemUgJiYgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YCwgY29udGFpbmVkICYmICdjb250YWluZWQnLCBmb2N1c2VkICYmICdmb2N1c2VkJywgZmlsbGVkICYmICdmaWxsZWQnLCByZXF1aXJlZCAmJiAncmVxdWlyZWQnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEZvcm1IZWxwZXJUZXh0VXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcbmNvbnN0IEZvcm1IZWxwZXJUZXh0Um9vdCA9IHN0eWxlZCgncCcsIHtcbiAgbmFtZTogJ011aUZvcm1IZWxwZXJUZXh0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuc2l6ZSAmJiBzdHlsZXNbYHNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5zaXplKX1gXSwgb3duZXJTdGF0ZS5jb250YWluZWQgJiYgc3R5bGVzLmNvbnRhaW5lZCwgb3duZXJTdGF0ZS5maWxsZWQgJiYgc3R5bGVzLmZpbGxlZF07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnNlY29uZGFyeVxufSwgdGhlbWUudHlwb2dyYXBoeS5jYXB0aW9uLCB7XG4gIHRleHRBbGlnbjogJ2xlZnQnLFxuICBtYXJnaW5Ub3A6IDMsXG4gIG1hcmdpblJpZ2h0OiAwLFxuICBtYXJnaW5Cb3R0b206IDAsXG4gIG1hcmdpbkxlZnQ6IDAsXG4gIFtgJi4ke2Zvcm1IZWxwZXJUZXh0Q2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LmRpc2FibGVkXG4gIH0sXG4gIFtgJi4ke2Zvcm1IZWxwZXJUZXh0Q2xhc3Nlcy5lcnJvcn1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gIH1cbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIG1hcmdpblRvcDogNFxufSwgb3duZXJTdGF0ZS5jb250YWluZWQgJiYge1xuICBtYXJnaW5MZWZ0OiAxNCxcbiAgbWFyZ2luUmlnaHQ6IDE0XG59KSk7XG5jb25zdCBGb3JtSGVscGVyVGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvcm1IZWxwZXJUZXh0KGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUZvcm1IZWxwZXJUZXh0J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQgPSAncCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsndmFyaWFudCcsICdzaXplJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2ZpbGxlZCcsICdmb2N1c2VkJywgJ3JlcXVpcmVkJ11cbiAgfSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb21wb25lbnQsXG4gICAgY29udGFpbmVkOiBmY3MudmFyaWFudCA9PT0gJ2ZpbGxlZCcgfHwgZmNzLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcsXG4gICAgdmFyaWFudDogZmNzLnZhcmlhbnQsXG4gICAgc2l6ZTogZmNzLnNpemUsXG4gICAgZGlzYWJsZWQ6IGZjcy5kaXNhYmxlZCxcbiAgICBlcnJvcjogZmNzLmVycm9yLFxuICAgIGZpbGxlZDogZmNzLmZpbGxlZCxcbiAgICBmb2N1c2VkOiBmY3MuZm9jdXNlZCxcbiAgICByZXF1aXJlZDogZmNzLnJlcXVpcmVkXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChGb3JtSGVscGVyVGV4dFJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBjaGlsZHJlbiA9PT0gJyAnID8gLy8gbm90cmFuc2xhdGUgbmVlZGVkIHdoaWxlIEdvb2dsZSBUcmFuc2xhdGUgd2lsbCBub3QgZml4IHplcm8td2lkdGggc3BhY2UgaXNzdWVcbiAgICBfc3BhbiB8fCAoX3NwYW4gPSAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcIm5vdHJhbnNsYXRlXCIsXG4gICAgICBjaGlsZHJlbjogXCJcXHUyMDBCXCJcbiAgICB9KSkgOiBjaGlsZHJlblxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZvcm1IZWxwZXJUZXh0LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIElmIGAnICdgIGlzIHByb3ZpZGVkLCB0aGUgY29tcG9uZW50IHJlc2VydmVzIG9uZSBsaW5lIGhlaWdodCBmb3IgZGlzcGxheWluZyBhIGZ1dHVyZSBtZXNzYWdlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaGVscGVyIHRleHQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhIGRpc2FibGVkIHN0YXRlLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBoZWxwZXIgdGV4dCBzaG91bGQgYmUgZGlzcGxheWVkIGluIGFuIGVycm9yIHN0YXRlLlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaGVscGVyIHRleHQgc2hvdWxkIHVzZSBmaWxsZWQgY2xhc3NlcyBrZXkuXG4gICAqL1xuICBmaWxsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaGVscGVyIHRleHQgc2hvdWxkIHVzZSBmb2N1c2VkIGNsYXNzZXMga2V5LlxuICAgKi9cbiAgZm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaGVscGVyIHRleHQgc2hvdWxkIHVzZSByZXF1aXJlZCBjbGFzc2VzIGtleS5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBGb3JtSGVscGVyVGV4dDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEdsb2JhbFN0eWxlcyBhcyBTeXN0ZW1HbG9iYWxTdHlsZXMgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgZGVmYXVsdFRoZW1lIGZyb20gJy4uL3N0eWxlcy9kZWZhdWx0VGhlbWUnO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4uL3N0eWxlcy9pZGVudGlmaWVyJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBHbG9iYWxTdHlsZXMocHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFN5c3RlbUdsb2JhbFN0eWxlcywgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGVmYXVsdFRoZW1lOiBkZWZhdWx0VGhlbWUsXG4gICAgdGhlbWVJZDogVEhFTUVfSURcbiAgfSkpO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gR2xvYmFsU3R5bGVzLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoZSBzdHlsZXMgeW91IHdhbnQgdG8gYXBwbHkgZ2xvYmFsbHkuXG4gICAqL1xuICBzdHlsZXM6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5LCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmJvb2xdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEdsb2JhbFN0eWxlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBHcmlkQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KCk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBHcmlkQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdHcmlkQ29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBHcmlkQ29udGV4dDsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdyaWRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUdyaWQnLCBzbG90KTtcbn1cbmNvbnN0IFNQQUNJTkdTID0gWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXTtcbmNvbnN0IERJUkVDVElPTlMgPSBbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXTtcbmNvbnN0IFdSQVBTID0gWydub3dyYXAnLCAnd3JhcC1yZXZlcnNlJywgJ3dyYXAnXTtcbmNvbnN0IEdSSURfU0laRVMgPSBbJ2F1dG8nLCB0cnVlLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyXTtcbmNvbnN0IGdyaWRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpR3JpZCcsIFsncm9vdCcsICdjb250YWluZXInLCAnaXRlbScsICd6ZXJvTWluV2lkdGgnLFxuLy8gc3BhY2luZ3Ncbi4uLlNQQUNJTkdTLm1hcChzcGFjaW5nID0+IGBzcGFjaW5nLXhzLSR7c3BhY2luZ31gKSxcbi8vIGRpcmVjdGlvbiB2YWx1ZXNcbi4uLkRJUkVDVElPTlMubWFwKGRpcmVjdGlvbiA9PiBgZGlyZWN0aW9uLXhzLSR7ZGlyZWN0aW9ufWApLFxuLy8gd3JhcCB2YWx1ZXNcbi4uLldSQVBTLm1hcCh3cmFwID0+IGB3cmFwLXhzLSR7d3JhcH1gKSxcbi8vIGdyaWQgc2l6ZXMgZm9yIGFsbCBicmVha3BvaW50c1xuLi4uR1JJRF9TSVpFUy5tYXAoc2l6ZSA9PiBgZ3JpZC14cy0ke3NpemV9YCksIC4uLkdSSURfU0laRVMubWFwKHNpemUgPT4gYGdyaWQtc20tJHtzaXplfWApLCAuLi5HUklEX1NJWkVTLm1hcChzaXplID0+IGBncmlkLW1kLSR7c2l6ZX1gKSwgLi4uR1JJRF9TSVpFUy5tYXAoc2l6ZSA9PiBgZ3JpZC1sZy0ke3NpemV9YCksIC4uLkdSSURfU0laRVMubWFwKHNpemUgPT4gYGdyaWQteGwtJHtzaXplfWApXSk7XG5leHBvcnQgZGVmYXVsdCBncmlkQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbi8vIEEgZ3JpZCBjb21wb25lbnQgdXNpbmcgdGhlIGZvbGxvd2luZyBsaWJzIGFzIGluc3BpcmF0aW9uLlxuLy9cbi8vIEZvciB0aGUgaW1wbGVtZW50YXRpb246XG4vLyAtIGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS9kb2NzLzQuMy9sYXlvdXQvZ3JpZC9cbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2tyaXN0b2Zlcmpvc2VwaC9mbGV4Ym94Z3JpZC9ibG9iL21hc3Rlci9zcmMvY3NzL2ZsZXhib3hncmlkLmNzc1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vcm95bGVlMDcwNC9yZWFjdC1mbGV4Ym94LWdyaWRcbi8vIC0gaHR0cHM6Ly9tYXRlcmlhbC5hbmd1bGFyanMub3JnL2xhdGVzdC9sYXlvdXQvaW50cm9kdWN0aW9uXG4vL1xuLy8gRm9sbG93IHRoaXMgZmxleGJveCBHdWlkZSB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBtb2RlbDpcbi8vIC0gaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9zbmlwcGV0cy9jc3MvYS1ndWlkZS10by1mbGV4Ym94L1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNvbHVtbnNcIiwgXCJjb2x1bW5TcGFjaW5nXCIsIFwiY29tcG9uZW50XCIsIFwiY29udGFpbmVyXCIsIFwiZGlyZWN0aW9uXCIsIFwiaXRlbVwiLCBcInJvd1NwYWNpbmdcIiwgXCJzcGFjaW5nXCIsIFwid3JhcFwiLCBcInplcm9NaW5XaWR0aFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzLCB1bnN0YWJsZV9yZXNvbHZlQnJlYWtwb2ludFZhbHVlcyBhcyByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCB7IGV4dGVuZFN4UHJvcCB9IGZyb20gJ0BtdWkvc3lzdGVtL3N0eWxlRnVuY3Rpb25TeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgcmVxdWlyZVByb3BGYWN0b3J5IGZyb20gJy4uL3V0aWxzL3JlcXVpcmVQcm9wRmFjdG9yeSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZSc7XG5pbXBvcnQgR3JpZENvbnRleHQgZnJvbSAnLi9HcmlkQ29udGV4dCc7XG5pbXBvcnQgZ3JpZENsYXNzZXMsIHsgZ2V0R3JpZFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vZ3JpZENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIGdldE9mZnNldCh2YWwpIHtcbiAgY29uc3QgcGFyc2UgPSBwYXJzZUZsb2F0KHZhbCk7XG4gIHJldHVybiBgJHtwYXJzZX0ke1N0cmluZyh2YWwpLnJlcGxhY2UoU3RyaW5nKHBhcnNlKSwgJycpIHx8ICdweCd9YDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUdyaWQoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkge1xuICBsZXQgc2l6ZTtcbiAgcmV0dXJuIHRoZW1lLmJyZWFrcG9pbnRzLmtleXMucmVkdWNlKChnbG9iYWxTdHlsZXMsIGJyZWFrcG9pbnQpID0+IHtcbiAgICAvLyBVc2Ugc2lkZSBlZmZlY3Qgb3ZlciBpbW11dGFiaWxpdHkgZm9yIGJldHRlciBwZXJmb3JtYW5jZS5cbiAgICBsZXQgc3R5bGVzID0ge307XG4gICAgaWYgKG93bmVyU3RhdGVbYnJlYWtwb2ludF0pIHtcbiAgICAgIHNpemUgPSBvd25lclN0YXRlW2JyZWFrcG9pbnRdO1xuICAgIH1cbiAgICBpZiAoIXNpemUpIHtcbiAgICAgIHJldHVybiBnbG9iYWxTdHlsZXM7XG4gICAgfVxuICAgIGlmIChzaXplID09PSB0cnVlKSB7XG4gICAgICAvLyBGb3IgdGhlIGF1dG8gbGF5b3V0aW5nXG4gICAgICBzdHlsZXMgPSB7XG4gICAgICAgIGZsZXhCYXNpczogMCxcbiAgICAgICAgZmxleEdyb3c6IDEsXG4gICAgICAgIG1heFdpZHRoOiAnMTAwJSdcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChzaXplID09PSAnYXV0bycpIHtcbiAgICAgIHN0eWxlcyA9IHtcbiAgICAgICAgZmxleEJhc2lzOiAnYXV0bycsXG4gICAgICAgIGZsZXhHcm93OiAwLFxuICAgICAgICBmbGV4U2hyaW5rOiAwLFxuICAgICAgICBtYXhXaWR0aDogJ25vbmUnLFxuICAgICAgICB3aWR0aDogJ2F1dG8nXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb2x1bW5zQnJlYWtwb2ludFZhbHVlcyA9IHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgICAgICAgdmFsdWVzOiBvd25lclN0YXRlLmNvbHVtbnMsXG4gICAgICAgIGJyZWFrcG9pbnRzOiB0aGVtZS5icmVha3BvaW50cy52YWx1ZXNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY29sdW1uVmFsdWUgPSB0eXBlb2YgY29sdW1uc0JyZWFrcG9pbnRWYWx1ZXMgPT09ICdvYmplY3QnID8gY29sdW1uc0JyZWFrcG9pbnRWYWx1ZXNbYnJlYWtwb2ludF0gOiBjb2x1bW5zQnJlYWtwb2ludFZhbHVlcztcbiAgICAgIGlmIChjb2x1bW5WYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGNvbHVtblZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWxTdHlsZXM7XG4gICAgICB9XG4gICAgICAvLyBLZWVwIDcgc2lnbmlmaWNhbnQgbnVtYmVycy5cbiAgICAgIGNvbnN0IHdpZHRoID0gYCR7TWF0aC5yb3VuZChzaXplIC8gY29sdW1uVmFsdWUgKiAxMGU3KSAvIDEwZTV9JWA7XG4gICAgICBsZXQgbW9yZSA9IHt9O1xuICAgICAgaWYgKG93bmVyU3RhdGUuY29udGFpbmVyICYmIG93bmVyU3RhdGUuaXRlbSAmJiBvd25lclN0YXRlLmNvbHVtblNwYWNpbmcgIT09IDApIHtcbiAgICAgICAgY29uc3QgdGhlbWVTcGFjaW5nID0gdGhlbWUuc3BhY2luZyhvd25lclN0YXRlLmNvbHVtblNwYWNpbmcpO1xuICAgICAgICBpZiAodGhlbWVTcGFjaW5nICE9PSAnMHB4Jykge1xuICAgICAgICAgIGNvbnN0IGZ1bGxXaWR0aCA9IGBjYWxjKCR7d2lkdGh9ICsgJHtnZXRPZmZzZXQodGhlbWVTcGFjaW5nKX0pYDtcbiAgICAgICAgICBtb3JlID0ge1xuICAgICAgICAgICAgZmxleEJhc2lzOiBmdWxsV2lkdGgsXG4gICAgICAgICAgICBtYXhXaWR0aDogZnVsbFdpZHRoXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDbG9zZSB0byB0aGUgYm9vdHN0cmFwIGltcGxlbWVudGF0aW9uOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvOGZjY2FhMjQzOWU5N2VjNzJhNGI3ZGM0MmNjYzFmNjQ5NzkwYWRiMC9zY3NzL21peGlucy9fZ3JpZC5zY3NzI0w0MVxuICAgICAgc3R5bGVzID0gX2V4dGVuZHMoe1xuICAgICAgICBmbGV4QmFzaXM6IHdpZHRoLFxuICAgICAgICBmbGV4R3JvdzogMCxcbiAgICAgICAgbWF4V2lkdGg6IHdpZHRoXG4gICAgICB9LCBtb3JlKTtcbiAgICB9XG5cbiAgICAvLyBObyBuZWVkIGZvciBhIG1lZGlhIHF1ZXJ5IGZvciB0aGUgZmlyc3Qgc2l6ZS5cbiAgICBpZiAodGhlbWUuYnJlYWtwb2ludHMudmFsdWVzW2JyZWFrcG9pbnRdID09PSAwKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGdsb2JhbFN0eWxlcywgc3R5bGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2xvYmFsU3R5bGVzW3RoZW1lLmJyZWFrcG9pbnRzLnVwKGJyZWFrcG9pbnQpXSA9IHN0eWxlcztcbiAgICB9XG4gICAgcmV0dXJuIGdsb2JhbFN0eWxlcztcbiAgfSwge30pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlRGlyZWN0aW9uKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pIHtcbiAgY29uc3QgZGlyZWN0aW9uVmFsdWVzID0gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICAgIHZhbHVlczogb3duZXJTdGF0ZS5kaXJlY3Rpb24sXG4gICAgYnJlYWtwb2ludHM6IHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlc1xuICB9KTtcbiAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHtcbiAgICB0aGVtZVxuICB9LCBkaXJlY3Rpb25WYWx1ZXMsIHByb3BWYWx1ZSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0ge1xuICAgICAgZmxleERpcmVjdGlvbjogcHJvcFZhbHVlXG4gICAgfTtcbiAgICBpZiAocHJvcFZhbHVlLmluZGV4T2YoJ2NvbHVtbicpID09PSAwKSB7XG4gICAgICBvdXRwdXRbYCYgPiAuJHtncmlkQ2xhc3Nlcy5pdGVtfWBdID0ge1xuICAgICAgICBtYXhXaWR0aDogJ25vbmUnXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9KTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB6ZXJvIHZhbHVlIGJyZWFrcG9pbnQga2V5cyBiZWZvcmUgYSBub24temVybyB2YWx1ZSBicmVha3BvaW50IGtleS5cbiAqIEBleGFtcGxlIHsgeHM6IDAsIHNtOiAwLCBtZDogMiwgbGc6IDAsIHhsOiAwIH0gb3IgWzAsIDAsIDIsIDAsIDBdXG4gKiBAcmV0dXJucyBbeHMsIHNtXVxuICovXG5mdW5jdGlvbiBleHRyYWN0WmVyb1ZhbHVlQnJlYWtwb2ludEtleXMoe1xuICBicmVha3BvaW50cyxcbiAgdmFsdWVzXG59KSB7XG4gIGxldCBub25aZXJvS2V5ID0gJyc7XG4gIE9iamVjdC5rZXlzKHZhbHVlcykuZm9yRWFjaChrZXkgPT4ge1xuICAgIGlmIChub25aZXJvS2V5ICE9PSAnJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodmFsdWVzW2tleV0gIT09IDApIHtcbiAgICAgIG5vblplcm9LZXkgPSBrZXk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc29ydGVkQnJlYWtwb2ludEtleXNCeVZhbHVlID0gT2JqZWN0LmtleXMoYnJlYWtwb2ludHMpLnNvcnQoKGEsIGIpID0+IHtcbiAgICByZXR1cm4gYnJlYWtwb2ludHNbYV0gLSBicmVha3BvaW50c1tiXTtcbiAgfSk7XG4gIHJldHVybiBzb3J0ZWRCcmVha3BvaW50S2V5c0J5VmFsdWUuc2xpY2UoMCwgc29ydGVkQnJlYWtwb2ludEtleXNCeVZhbHVlLmluZGV4T2Yobm9uWmVyb0tleSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUm93R2FwKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pIHtcbiAgY29uc3Qge1xuICAgIGNvbnRhaW5lcixcbiAgICByb3dTcGFjaW5nXG4gIH0gPSBvd25lclN0YXRlO1xuICBsZXQgc3R5bGVzID0ge307XG4gIGlmIChjb250YWluZXIgJiYgcm93U3BhY2luZyAhPT0gMCkge1xuICAgIGNvbnN0IHJvd1NwYWNpbmdWYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgICB2YWx1ZXM6IHJvd1NwYWNpbmcsXG4gICAgICBicmVha3BvaW50czogdGhlbWUuYnJlYWtwb2ludHMudmFsdWVzXG4gICAgfSk7XG4gICAgbGV0IHplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzO1xuICAgIGlmICh0eXBlb2Ygcm93U3BhY2luZ1ZhbHVlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzID0gZXh0cmFjdFplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzKHtcbiAgICAgICAgYnJlYWtwb2ludHM6IHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlcyxcbiAgICAgICAgdmFsdWVzOiByb3dTcGFjaW5nVmFsdWVzXG4gICAgICB9KTtcbiAgICB9XG4gICAgc3R5bGVzID0gaGFuZGxlQnJlYWtwb2ludHMoe1xuICAgICAgdGhlbWVcbiAgICB9LCByb3dTcGFjaW5nVmFsdWVzLCAocHJvcFZhbHVlLCBicmVha3BvaW50KSA9PiB7XG4gICAgICB2YXIgX3plcm9WYWx1ZUJyZWFrcG9pbnRLO1xuICAgICAgY29uc3QgdGhlbWVTcGFjaW5nID0gdGhlbWUuc3BhY2luZyhwcm9wVmFsdWUpO1xuICAgICAgaWYgKHRoZW1lU3BhY2luZyAhPT0gJzBweCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtYXJnaW5Ub3A6IGAtJHtnZXRPZmZzZXQodGhlbWVTcGFjaW5nKX1gLFxuICAgICAgICAgIFtgJiA+IC4ke2dyaWRDbGFzc2VzLml0ZW19YF06IHtcbiAgICAgICAgICAgIHBhZGRpbmdUb3A6IGdldE9mZnNldCh0aGVtZVNwYWNpbmcpXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKChfemVyb1ZhbHVlQnJlYWtwb2ludEsgPSB6ZXJvVmFsdWVCcmVha3BvaW50S2V5cykgIT0gbnVsbCAmJiBfemVyb1ZhbHVlQnJlYWtwb2ludEsuaW5jbHVkZXMoYnJlYWtwb2ludCkpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWFyZ2luVG9wOiAwLFxuICAgICAgICBbYCYgPiAuJHtncmlkQ2xhc3Nlcy5pdGVtfWBdOiB7XG4gICAgICAgICAgcGFkZGluZ1RvcDogMFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBzdHlsZXM7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVDb2x1bW5HYXAoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkge1xuICBjb25zdCB7XG4gICAgY29udGFpbmVyLFxuICAgIGNvbHVtblNwYWNpbmdcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGxldCBzdHlsZXMgPSB7fTtcbiAgaWYgKGNvbnRhaW5lciAmJiBjb2x1bW5TcGFjaW5nICE9PSAwKSB7XG4gICAgY29uc3QgY29sdW1uU3BhY2luZ1ZhbHVlcyA9IHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgICAgIHZhbHVlczogY29sdW1uU3BhY2luZyxcbiAgICAgIGJyZWFrcG9pbnRzOiB0aGVtZS5icmVha3BvaW50cy52YWx1ZXNcbiAgICB9KTtcbiAgICBsZXQgemVyb1ZhbHVlQnJlYWtwb2ludEtleXM7XG4gICAgaWYgKHR5cGVvZiBjb2x1bW5TcGFjaW5nVmFsdWVzID09PSAnb2JqZWN0Jykge1xuICAgICAgemVyb1ZhbHVlQnJlYWtwb2ludEtleXMgPSBleHRyYWN0WmVyb1ZhbHVlQnJlYWtwb2ludEtleXMoe1xuICAgICAgICBicmVha3BvaW50czogdGhlbWUuYnJlYWtwb2ludHMudmFsdWVzLFxuICAgICAgICB2YWx1ZXM6IGNvbHVtblNwYWNpbmdWYWx1ZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzdHlsZXMgPSBoYW5kbGVCcmVha3BvaW50cyh7XG4gICAgICB0aGVtZVxuICAgIH0sIGNvbHVtblNwYWNpbmdWYWx1ZXMsIChwcm9wVmFsdWUsIGJyZWFrcG9pbnQpID0+IHtcbiAgICAgIHZhciBfemVyb1ZhbHVlQnJlYWtwb2ludEsyO1xuICAgICAgY29uc3QgdGhlbWVTcGFjaW5nID0gdGhlbWUuc3BhY2luZyhwcm9wVmFsdWUpO1xuICAgICAgaWYgKHRoZW1lU3BhY2luZyAhPT0gJzBweCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB3aWR0aDogYGNhbGMoMTAwJSArICR7Z2V0T2Zmc2V0KHRoZW1lU3BhY2luZyl9KWAsXG4gICAgICAgICAgbWFyZ2luTGVmdDogYC0ke2dldE9mZnNldCh0aGVtZVNwYWNpbmcpfWAsXG4gICAgICAgICAgW2AmID4gLiR7Z3JpZENsYXNzZXMuaXRlbX1gXToge1xuICAgICAgICAgICAgcGFkZGluZ0xlZnQ6IGdldE9mZnNldCh0aGVtZVNwYWNpbmcpXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKChfemVyb1ZhbHVlQnJlYWtwb2ludEsyID0gemVyb1ZhbHVlQnJlYWtwb2ludEtleXMpICE9IG51bGwgJiYgX3plcm9WYWx1ZUJyZWFrcG9pbnRLMi5pbmNsdWRlcyhicmVha3BvaW50KSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBtYXJnaW5MZWZ0OiAwLFxuICAgICAgICBbYCYgPiAuJHtncmlkQ2xhc3Nlcy5pdGVtfWBdOiB7XG4gICAgICAgICAgcGFkZGluZ0xlZnQ6IDBcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gc3R5bGVzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTcGFjaW5nU3R5bGVzKHNwYWNpbmcsIGJyZWFrcG9pbnRzLCBzdHlsZXMgPSB7fSkge1xuICAvLyB1bmRlZmluZWQvbnVsbCBvciBgc3BhY2luZ2AgPD0gMFxuICBpZiAoIXNwYWNpbmcgfHwgc3BhY2luZyA8PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIC8vIGluIGNhc2Ugb2Ygc3RyaW5nL251bWJlciBgc3BhY2luZ2BcbiAgaWYgKHR5cGVvZiBzcGFjaW5nID09PSAnc3RyaW5nJyAmJiAhTnVtYmVyLmlzTmFOKE51bWJlcihzcGFjaW5nKSkgfHwgdHlwZW9mIHNwYWNpbmcgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIFtzdHlsZXNbYHNwYWNpbmcteHMtJHtTdHJpbmcoc3BhY2luZyl9YF1dO1xuICB9XG4gIC8vIGluIGNhc2Ugb2Ygb2JqZWN0IGBzcGFjaW5nYFxuICBjb25zdCBzcGFjaW5nU3R5bGVzID0gW107XG4gIGJyZWFrcG9pbnRzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBzcGFjaW5nW2JyZWFrcG9pbnRdO1xuICAgIGlmIChOdW1iZXIodmFsdWUpID4gMCkge1xuICAgICAgc3BhY2luZ1N0eWxlcy5wdXNoKHN0eWxlc1tgc3BhY2luZy0ke2JyZWFrcG9pbnR9LSR7U3RyaW5nKHZhbHVlKX1gXSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHNwYWNpbmdTdHlsZXM7XG59XG5cbi8vIERlZmF1bHQgQ1NTIHZhbHVlc1xuLy8gZmxleDogJzAgMSBhdXRvJyxcbi8vIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuLy8gYWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnLFxuLy8gZmxleFdyYXA6ICdub3dyYXAnLFxuLy8ganVzdGlmeUNvbnRlbnQ6ICdmbGV4LXN0YXJ0JyxcbmNvbnN0IEdyaWRSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlHcmlkJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGRpcmVjdGlvbixcbiAgICAgIGl0ZW0sXG4gICAgICBzcGFjaW5nLFxuICAgICAgd3JhcCxcbiAgICAgIHplcm9NaW5XaWR0aCxcbiAgICAgIGJyZWFrcG9pbnRzXG4gICAgfSA9IG93bmVyU3RhdGU7XG4gICAgbGV0IHNwYWNpbmdTdHlsZXMgPSBbXTtcblxuICAgIC8vIGluIGNhc2Ugb2YgZ3JpZCBpdGVtXG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgc3BhY2luZ1N0eWxlcyA9IHJlc29sdmVTcGFjaW5nU3R5bGVzKHNwYWNpbmcsIGJyZWFrcG9pbnRzLCBzdHlsZXMpO1xuICAgIH1cbiAgICBjb25zdCBicmVha3BvaW50c1N0eWxlcyA9IFtdO1xuICAgIGJyZWFrcG9pbnRzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG93bmVyU3RhdGVbYnJlYWtwb2ludF07XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgYnJlYWtwb2ludHNTdHlsZXMucHVzaChzdHlsZXNbYGdyaWQtJHticmVha3BvaW50fS0ke1N0cmluZyh2YWx1ZSl9YF0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIGNvbnRhaW5lciAmJiBzdHlsZXMuY29udGFpbmVyLCBpdGVtICYmIHN0eWxlcy5pdGVtLCB6ZXJvTWluV2lkdGggJiYgc3R5bGVzLnplcm9NaW5XaWR0aCwgLi4uc3BhY2luZ1N0eWxlcywgZGlyZWN0aW9uICE9PSAncm93JyAmJiBzdHlsZXNbYGRpcmVjdGlvbi14cy0ke1N0cmluZyhkaXJlY3Rpb24pfWBdLCB3cmFwICE9PSAnd3JhcCcgJiYgc3R5bGVzW2B3cmFwLXhzLSR7U3RyaW5nKHdyYXApfWBdLCAuLi5icmVha3BvaW50c1N0eWxlc107XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCdcbn0sIG93bmVyU3RhdGUuY29udGFpbmVyICYmIHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBmbGV4V3JhcDogJ3dyYXAnLFxuICB3aWR0aDogJzEwMCUnXG59LCBvd25lclN0YXRlLml0ZW0gJiYge1xuICBtYXJnaW46IDAgLy8gRm9yIGluc3RhbmNlLCBpdCdzIHVzZWZ1bCB3aGVuIHVzZWQgd2l0aCBhIGBmaWd1cmVgIGVsZW1lbnQuXG59LCBvd25lclN0YXRlLnplcm9NaW5XaWR0aCAmJiB7XG4gIG1pbldpZHRoOiAwXG59LCBvd25lclN0YXRlLndyYXAgIT09ICd3cmFwJyAmJiB7XG4gIGZsZXhXcmFwOiBvd25lclN0YXRlLndyYXBcbn0pLCBnZW5lcmF0ZURpcmVjdGlvbiwgZ2VuZXJhdGVSb3dHYXAsIGdlbmVyYXRlQ29sdW1uR2FwLCBnZW5lcmF0ZUdyaWQpO1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTcGFjaW5nQ2xhc3NlcyhzcGFjaW5nLCBicmVha3BvaW50cykge1xuICAvLyB1bmRlZmluZWQvbnVsbCBvciBgc3BhY2luZ2AgPD0gMFxuICBpZiAoIXNwYWNpbmcgfHwgc3BhY2luZyA8PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIC8vIGluIGNhc2Ugb2Ygc3RyaW5nL251bWJlciBgc3BhY2luZ2BcbiAgaWYgKHR5cGVvZiBzcGFjaW5nID09PSAnc3RyaW5nJyAmJiAhTnVtYmVyLmlzTmFOKE51bWJlcihzcGFjaW5nKSkgfHwgdHlwZW9mIHNwYWNpbmcgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIFtgc3BhY2luZy14cy0ke1N0cmluZyhzcGFjaW5nKX1gXTtcbiAgfVxuICAvLyBpbiBjYXNlIG9mIG9iamVjdCBgc3BhY2luZ2BcbiAgY29uc3QgY2xhc3NlcyA9IFtdO1xuICBicmVha3BvaW50cy5mb3JFYWNoKGJyZWFrcG9pbnQgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gc3BhY2luZ1ticmVha3BvaW50XTtcbiAgICBpZiAoTnVtYmVyKHZhbHVlKSA+IDApIHtcbiAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IGBzcGFjaW5nLSR7YnJlYWtwb2ludH0tJHtTdHJpbmcodmFsdWUpfWA7XG4gICAgICBjbGFzc2VzLnB1c2goY2xhc3NOYW1lKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2xhc3Nlcztcbn1cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGNvbnRhaW5lcixcbiAgICBkaXJlY3Rpb24sXG4gICAgaXRlbSxcbiAgICBzcGFjaW5nLFxuICAgIHdyYXAsXG4gICAgemVyb01pbldpZHRoLFxuICAgIGJyZWFrcG9pbnRzXG4gIH0gPSBvd25lclN0YXRlO1xuICBsZXQgc3BhY2luZ0NsYXNzZXMgPSBbXTtcblxuICAvLyBpbiBjYXNlIG9mIGdyaWQgaXRlbVxuICBpZiAoY29udGFpbmVyKSB7XG4gICAgc3BhY2luZ0NsYXNzZXMgPSByZXNvbHZlU3BhY2luZ0NsYXNzZXMoc3BhY2luZywgYnJlYWtwb2ludHMpO1xuICB9XG4gIGNvbnN0IGJyZWFrcG9pbnRzQ2xhc3NlcyA9IFtdO1xuICBicmVha3BvaW50cy5mb3JFYWNoKGJyZWFrcG9pbnQgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gb3duZXJTdGF0ZVticmVha3BvaW50XTtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGJyZWFrcG9pbnRzQ2xhc3Nlcy5wdXNoKGBncmlkLSR7YnJlYWtwb2ludH0tJHtTdHJpbmcodmFsdWUpfWApO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGNvbnRhaW5lciAmJiAnY29udGFpbmVyJywgaXRlbSAmJiAnaXRlbScsIHplcm9NaW5XaWR0aCAmJiAnemVyb01pbldpZHRoJywgLi4uc3BhY2luZ0NsYXNzZXMsIGRpcmVjdGlvbiAhPT0gJ3JvdycgJiYgYGRpcmVjdGlvbi14cy0ke1N0cmluZyhkaXJlY3Rpb24pfWAsIHdyYXAgIT09ICd3cmFwJyAmJiBgd3JhcC14cy0ke1N0cmluZyh3cmFwKX1gLCAuLi5icmVha3BvaW50c0NsYXNzZXNdXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0R3JpZFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgR3JpZCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEdyaWQoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHRoZW1lUHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlHcmlkJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgIGJyZWFrcG9pbnRzXG4gIH0gPSB1c2VUaGVtZSgpO1xuICBjb25zdCBwcm9wcyA9IGV4dGVuZFN4UHJvcCh0aGVtZVByb3BzKTtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sdW1uczogY29sdW1uc1Byb3AsXG4gICAgICBjb2x1bW5TcGFjaW5nOiBjb2x1bW5TcGFjaW5nUHJvcCxcbiAgICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgICAgY29udGFpbmVyID0gZmFsc2UsXG4gICAgICBkaXJlY3Rpb24gPSAncm93JyxcbiAgICAgIGl0ZW0gPSBmYWxzZSxcbiAgICAgIHJvd1NwYWNpbmc6IHJvd1NwYWNpbmdQcm9wLFxuICAgICAgc3BhY2luZyA9IDAsXG4gICAgICB3cmFwID0gJ3dyYXAnLFxuICAgICAgemVyb01pbldpZHRoID0gZmFsc2VcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgcm93U3BhY2luZyA9IHJvd1NwYWNpbmdQcm9wIHx8IHNwYWNpbmc7XG4gIGNvbnN0IGNvbHVtblNwYWNpbmcgPSBjb2x1bW5TcGFjaW5nUHJvcCB8fCBzcGFjaW5nO1xuICBjb25zdCBjb2x1bW5zQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoR3JpZENvbnRleHQpO1xuXG4gIC8vIGNvbHVtbnMgc2V0IHdpdGggZGVmYXVsdCBicmVha3BvaW50IHVuaXQgb2YgMTJcbiAgY29uc3QgY29sdW1ucyA9IGNvbnRhaW5lciA/IGNvbHVtbnNQcm9wIHx8IDEyIDogY29sdW1uc0NvbnRleHQ7XG4gIGNvbnN0IGJyZWFrcG9pbnRzVmFsdWVzID0ge307XG4gIGNvbnN0IG90aGVyRmlsdGVyZWQgPSBfZXh0ZW5kcyh7fSwgb3RoZXIpO1xuICBicmVha3BvaW50cy5rZXlzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgaWYgKG90aGVyW2JyZWFrcG9pbnRdICE9IG51bGwpIHtcbiAgICAgIGJyZWFrcG9pbnRzVmFsdWVzW2JyZWFrcG9pbnRdID0gb3RoZXJbYnJlYWtwb2ludF07XG4gICAgICBkZWxldGUgb3RoZXJGaWx0ZXJlZFticmVha3BvaW50XTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sdW1ucyxcbiAgICBjb250YWluZXIsXG4gICAgZGlyZWN0aW9uLFxuICAgIGl0ZW0sXG4gICAgcm93U3BhY2luZyxcbiAgICBjb2x1bW5TcGFjaW5nLFxuICAgIHdyYXAsXG4gICAgemVyb01pbldpZHRoLFxuICAgIHNwYWNpbmdcbiAgfSwgYnJlYWtwb2ludHNWYWx1ZXMsIHtcbiAgICBicmVha3BvaW50czogYnJlYWtwb2ludHMua2V5c1xuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goR3JpZENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29sdW1ucyxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goR3JpZFJvb3QsIF9leHRlbmRzKHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgb3RoZXJGaWx0ZXJlZCkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBHcmlkLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBjb2x1bW5zLlxuICAgKiBAZGVmYXVsdCAxMlxuICAgKi9cbiAgY29sdW1uczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm51bWJlciksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIGhvcml6b250YWwgc3BhY2UgYmV0d2VlbiB0aGUgdHlwZSBgaXRlbWAgY29tcG9uZW50cy5cbiAgICogSXQgb3ZlcnJpZGVzIHRoZSB2YWx1ZSBvZiB0aGUgYHNwYWNpbmdgIHByb3AuXG4gICAqL1xuICBjb2x1bW5TcGFjaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkpLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIGhhdmUgdGhlIGZsZXggKmNvbnRhaW5lciogYmVoYXZpb3IuXG4gICAqIFlvdSBzaG91bGQgYmUgd3JhcHBpbmcgKml0ZW1zKiB3aXRoIGEgKmNvbnRhaW5lciouXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgYGZsZXgtZGlyZWN0aW9uYCBzdHlsZSBwcm9wZXJ0eS5cbiAgICogSXQgaXMgYXBwbGllZCBmb3IgYWxsIHNjcmVlbiBzaXplcy5cbiAgICogQGRlZmF1bHQgJ3JvdydcbiAgICovXG4gIGRpcmVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnY29sdW1uLXJldmVyc2UnLCAnY29sdW1uJywgJ3Jvdy1yZXZlcnNlJywgJ3JvdyddKSwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mKFsnY29sdW1uLXJldmVyc2UnLCAnY29sdW1uJywgJ3Jvdy1yZXZlcnNlJywgJ3JvdyddKSksIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIGhhdmUgdGhlIGZsZXggKml0ZW0qIGJlaGF2aW9yLlxuICAgKiBZb3Ugc2hvdWxkIGJlIHdyYXBwaW5nICppdGVtcyogd2l0aCBhICpjb250YWluZXIqLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaXRlbTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBhIG51bWJlciwgaXQgc2V0cyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdGhlIGdyaWQgaXRlbSB1c2VzLlxuICAgKiBJdCBjYW4ndCBiZSBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBjb250YWluZXIgKDEyIGJ5IGRlZmF1bHQpLlxuICAgKiBJZiAnYXV0bycsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBtYXRjaGVzIGl0cyBjb250ZW50LlxuICAgKiBJZiBmYWxzZSwgdGhlIHByb3AgaXMgaWdub3JlZC5cbiAgICogSWYgdHJ1ZSwgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIGdyb3dzIHRvIHVzZSB0aGUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBncmlkIGNvbnRhaW5lci5cbiAgICogVGhlIHZhbHVlIGlzIGFwcGxpZWQgZm9yIHRoZSBgbGdgIGJyZWFrcG9pbnQgYW5kIHdpZGVyIHNjcmVlbnMgaWYgbm90IG92ZXJyaWRkZW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBsZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLmJvb2xdKSxcbiAgLyoqXG4gICAqIElmIGEgbnVtYmVyLCBpdCBzZXRzIHRoZSBudW1iZXIgb2YgY29sdW1ucyB0aGUgZ3JpZCBpdGVtIHVzZXMuXG4gICAqIEl0IGNhbid0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIGNvbnRhaW5lciAoMTIgYnkgZGVmYXVsdCkuXG4gICAqIElmICdhdXRvJywgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIG1hdGNoZXMgaXRzIGNvbnRlbnQuXG4gICAqIElmIGZhbHNlLCB0aGUgcHJvcCBpcyBpZ25vcmVkLlxuICAgKiBJZiB0cnVlLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggZ3Jvd3MgdG8gdXNlIHRoZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGdyaWQgY29udGFpbmVyLlxuICAgKiBUaGUgdmFsdWUgaXMgYXBwbGllZCBmb3IgdGhlIGBtZGAgYnJlYWtwb2ludCBhbmQgd2lkZXIgc2NyZWVucyBpZiBub3Qgb3ZlcnJpZGRlbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG1kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuYm9vbF0pLFxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgdmVydGljYWwgc3BhY2UgYmV0d2VlbiB0aGUgdHlwZSBgaXRlbWAgY29tcG9uZW50cy5cbiAgICogSXQgb3ZlcnJpZGVzIHRoZSB2YWx1ZSBvZiB0aGUgYHNwYWNpbmdgIHByb3AuXG4gICAqL1xuICByb3dTcGFjaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkpLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBhIG51bWJlciwgaXQgc2V0cyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdGhlIGdyaWQgaXRlbSB1c2VzLlxuICAgKiBJdCBjYW4ndCBiZSBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBjb250YWluZXIgKDEyIGJ5IGRlZmF1bHQpLlxuICAgKiBJZiAnYXV0bycsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBtYXRjaGVzIGl0cyBjb250ZW50LlxuICAgKiBJZiBmYWxzZSwgdGhlIHByb3AgaXMgaWdub3JlZC5cbiAgICogSWYgdHJ1ZSwgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIGdyb3dzIHRvIHVzZSB0aGUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBncmlkIGNvbnRhaW5lci5cbiAgICogVGhlIHZhbHVlIGlzIGFwcGxpZWQgZm9yIHRoZSBgc21gIGJyZWFrcG9pbnQgYW5kIHdpZGVyIHNjcmVlbnMgaWYgbm90IG92ZXJyaWRkZW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzbTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLmJvb2xdKSxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIHNwYWNlIGJldHdlZW4gdGhlIHR5cGUgYGl0ZW1gIGNvbXBvbmVudHMuXG4gICAqIEl0IGNhbiBvbmx5IGJlIHVzZWQgb24gYSB0eXBlIGBjb250YWluZXJgIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgc3BhY2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgYGZsZXgtd3JhcGAgc3R5bGUgcHJvcGVydHkuXG4gICAqIEl0J3MgYXBwbGllZCBmb3IgYWxsIHNjcmVlbiBzaXplcy5cbiAgICogQGRlZmF1bHQgJ3dyYXAnXG4gICAqL1xuICB3cmFwOiBQcm9wVHlwZXMub25lT2YoWydub3dyYXAnLCAnd3JhcC1yZXZlcnNlJywgJ3dyYXAnXSksXG4gIC8qKlxuICAgKiBJZiBhIG51bWJlciwgaXQgc2V0cyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdGhlIGdyaWQgaXRlbSB1c2VzLlxuICAgKiBJdCBjYW4ndCBiZSBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBjb250YWluZXIgKDEyIGJ5IGRlZmF1bHQpLlxuICAgKiBJZiAnYXV0bycsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBtYXRjaGVzIGl0cyBjb250ZW50LlxuICAgKiBJZiBmYWxzZSwgdGhlIHByb3AgaXMgaWdub3JlZC5cbiAgICogSWYgdHJ1ZSwgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIGdyb3dzIHRvIHVzZSB0aGUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBncmlkIGNvbnRhaW5lci5cbiAgICogVGhlIHZhbHVlIGlzIGFwcGxpZWQgZm9yIHRoZSBgeGxgIGJyZWFrcG9pbnQgYW5kIHdpZGVyIHNjcmVlbnMgaWYgbm90IG92ZXJyaWRkZW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB4bDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLmJvb2xdKSxcbiAgLyoqXG4gICAqIElmIGEgbnVtYmVyLCBpdCBzZXRzIHRoZSBudW1iZXIgb2YgY29sdW1ucyB0aGUgZ3JpZCBpdGVtIHVzZXMuXG4gICAqIEl0IGNhbid0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIGNvbnRhaW5lciAoMTIgYnkgZGVmYXVsdCkuXG4gICAqIElmICdhdXRvJywgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIG1hdGNoZXMgaXRzIGNvbnRlbnQuXG4gICAqIElmIGZhbHNlLCB0aGUgcHJvcCBpcyBpZ25vcmVkLlxuICAgKiBJZiB0cnVlLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggZ3Jvd3MgdG8gdXNlIHRoZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGdyaWQgY29udGFpbmVyLlxuICAgKiBUaGUgdmFsdWUgaXMgYXBwbGllZCBmb3IgYWxsIHRoZSBzY3JlZW4gc2l6ZXMgd2l0aCB0aGUgbG93ZXN0IHByaW9yaXR5LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgeHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5ib29sXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGl0IHNldHMgYG1pbi13aWR0aDogMGAgb24gdGhlIGl0ZW0uXG4gICAqIFJlZmVyIHRvIHRoZSBsaW1pdGF0aW9ucyBzZWN0aW9uIG9mIHRoZSBkb2N1bWVudGF0aW9uIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSB1c2UgY2FzZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHplcm9NaW5XaWR0aDogUHJvcFR5cGVzLmJvb2xcbn0gOiB2b2lkIDA7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBjb25zdCByZXF1aXJlUHJvcCA9IHJlcXVpcmVQcm9wRmFjdG9yeSgnR3JpZCcsIEdyaWQpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25jYXRcbiAgR3JpZFsncHJvcFR5cGVzJyArICcnXSA9IF9leHRlbmRzKHt9LCBHcmlkLnByb3BUeXBlcywge1xuICAgIGRpcmVjdGlvbjogcmVxdWlyZVByb3AoJ2NvbnRhaW5lcicpLFxuICAgIGxnOiByZXF1aXJlUHJvcCgnaXRlbScpLFxuICAgIG1kOiByZXF1aXJlUHJvcCgnaXRlbScpLFxuICAgIHNtOiByZXF1aXJlUHJvcCgnaXRlbScpLFxuICAgIHNwYWNpbmc6IHJlcXVpcmVQcm9wKCdjb250YWluZXInKSxcbiAgICB3cmFwOiByZXF1aXJlUHJvcCgnY29udGFpbmVyJyksXG4gICAgeHM6IHJlcXVpcmVQcm9wKCdpdGVtJyksXG4gICAgemVyb01pbldpZHRoOiByZXF1aXJlUHJvcCgnaXRlbScpXG4gIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgR3JpZDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhZGRFbmRMaXN0ZW5lclwiLCBcImFwcGVhclwiLCBcImNoaWxkcmVuXCIsIFwiZWFzaW5nXCIsIFwiaW5cIiwgXCJvbkVudGVyXCIsIFwib25FbnRlcmVkXCIsIFwib25FbnRlcmluZ1wiLCBcIm9uRXhpdFwiLCBcIm9uRXhpdGVkXCIsIFwib25FeGl0aW5nXCIsIFwic3R5bGVcIiwgXCJ0aW1lb3V0XCIsIFwiVHJhbnNpdGlvbkNvbXBvbmVudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgdXNlVGltZW91dCBmcm9tICdAbXVpL3V0aWxzL3VzZVRpbWVvdXQnO1xuaW1wb3J0IGVsZW1lbnRBY2NlcHRpbmdSZWYgZnJvbSAnQG11aS91dGlscy9lbGVtZW50QWNjZXB0aW5nUmVmJztcbmltcG9ydCB7IFRyYW5zaXRpb24gfSBmcm9tICdyZWFjdC10cmFuc2l0aW9uLWdyb3VwJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWUnO1xuaW1wb3J0IHsgZ2V0VHJhbnNpdGlvblByb3BzLCByZWZsb3cgfSBmcm9tICcuLi90cmFuc2l0aW9ucy91dGlscyc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBnZXRTY2FsZSh2YWx1ZSkge1xuICByZXR1cm4gYHNjYWxlKCR7dmFsdWV9LCAke3ZhbHVlICoqIDJ9KWA7XG59XG5jb25zdCBzdHlsZXMgPSB7XG4gIGVudGVyaW5nOiB7XG4gICAgb3BhY2l0eTogMSxcbiAgICB0cmFuc2Zvcm06IGdldFNjYWxlKDEpXG4gIH0sXG4gIGVudGVyZWQ6IHtcbiAgICBvcGFjaXR5OiAxLFxuICAgIHRyYW5zZm9ybTogJ25vbmUnXG4gIH1cbn07XG5cbi8qXG4gVE9ETyB2NjogcmVtb3ZlXG4gQ29uZGl0aW9uYWxseSBhcHBseSBhIHdvcmthcm91bmQgZm9yIHRoZSBDU1MgdHJhbnNpdGlvbiBidWcgaW4gU2FmYXJpIDE1LjQgLyBXZWJLaXQgYnJvd3NlcnMuXG4gKi9cbmNvbnN0IGlzV2ViS2l0MTU0ID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgL14oKD8hY2hyb21lfGFuZHJvaWQpLikqKHNhZmFyaXxtb2JpbGUpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAvKG9zIHx2ZXJzaW9uXFwvKTE1KC58Xyk0L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcblxuLyoqXG4gKiBUaGUgR3JvdyB0cmFuc2l0aW9uIGlzIHVzZWQgYnkgdGhlIFtUb29sdGlwXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdG9vbHRpcC8pIGFuZFxuICogW1BvcG92ZXJdKC9tYXRlcmlhbC11aS9yZWFjdC1wb3BvdmVyLykgY29tcG9uZW50cy5cbiAqIEl0IHVzZXMgW3JlYWN0LXRyYW5zaXRpb24tZ3JvdXBdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXApIGludGVybmFsbHkuXG4gKi9cbmNvbnN0IEdyb3cgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBHcm93KHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgICAgYWRkRW5kTGlzdGVuZXIsXG4gICAgICBhcHBlYXIgPSB0cnVlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBlYXNpbmcsXG4gICAgICBpbjogaW5Qcm9wLFxuICAgICAgb25FbnRlcixcbiAgICAgIG9uRW50ZXJlZCxcbiAgICAgIG9uRW50ZXJpbmcsXG4gICAgICBvbkV4aXQsXG4gICAgICBvbkV4aXRlZCxcbiAgICAgIG9uRXhpdGluZyxcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCA9ICdhdXRvJyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcm9wLXR5cGVzXG4gICAgICBUcmFuc2l0aW9uQ29tcG9uZW50ID0gVHJhbnNpdGlvblxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCB0aW1lciA9IHVzZVRpbWVvdXQoKTtcbiAgY29uc3QgYXV0b1RpbWVvdXQgPSBSZWFjdC51c2VSZWYoKTtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICBjb25zdCBub2RlUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKG5vZGVSZWYsIGNoaWxkcmVuLnJlZiwgcmVmKTtcbiAgY29uc3Qgbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayA9IGNhbGxiYWNrID0+IG1heWJlSXNBcHBlYXJpbmcgPT4ge1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVSZWYuY3VycmVudDtcblxuICAgICAgLy8gb25FbnRlclh4eCBhbmQgb25FeGl0WHh4IGNhbGxiYWNrcyBoYXZlIGEgZGlmZmVyZW50IGFyZ3VtZW50cy5sZW5ndGggdmFsdWUuXG4gICAgICBpZiAobWF5YmVJc0FwcGVhcmluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNhbGxiYWNrKG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sobm9kZSwgbWF5YmVJc0FwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVFbnRlcmluZyA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FbnRlcmluZyk7XG4gIGNvbnN0IGhhbmRsZUVudGVyID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjaygobm9kZSwgaXNBcHBlYXJpbmcpID0+IHtcbiAgICByZWZsb3cobm9kZSk7IC8vIFNvIHRoZSBhbmltYXRpb24gYWx3YXlzIHN0YXJ0IGZyb20gdGhlIHN0YXJ0LlxuXG4gICAgY29uc3Qge1xuICAgICAgZHVyYXRpb246IHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICAgIGRlbGF5LFxuICAgICAgZWFzaW5nOiB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb25cbiAgICB9ID0gZ2V0VHJhbnNpdGlvblByb3BzKHtcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVhc2luZ1xuICAgIH0sIHtcbiAgICAgIG1vZGU6ICdlbnRlcidcbiAgICB9KTtcbiAgICBsZXQgZHVyYXRpb247XG4gICAgaWYgKHRpbWVvdXQgPT09ICdhdXRvJykge1xuICAgICAgZHVyYXRpb24gPSB0aGVtZS50cmFuc2l0aW9ucy5nZXRBdXRvSGVpZ2h0RHVyYXRpb24obm9kZS5jbGllbnRIZWlnaHQpO1xuICAgICAgYXV0b1RpbWVvdXQuY3VycmVudCA9IGR1cmF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICBkdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvbjtcbiAgICB9XG4gICAgbm9kZS5zdHlsZS50cmFuc2l0aW9uID0gW3RoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHtcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgZGVsYXlcbiAgICB9KSwgdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nLCB7XG4gICAgICBkdXJhdGlvbjogaXNXZWJLaXQxNTQgPyBkdXJhdGlvbiA6IGR1cmF0aW9uICogMC42NjYsXG4gICAgICBkZWxheSxcbiAgICAgIGVhc2luZzogdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uXG4gICAgfSldLmpvaW4oJywnKTtcbiAgICBpZiAob25FbnRlcikge1xuICAgICAgb25FbnRlcihub2RlLCBpc0FwcGVhcmluZyk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlRW50ZXJlZCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FbnRlcmVkKTtcbiAgY29uc3QgaGFuZGxlRXhpdGluZyA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FeGl0aW5nKTtcbiAgY29uc3QgaGFuZGxlRXhpdCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sobm9kZSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZHVyYXRpb246IHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICAgIGRlbGF5LFxuICAgICAgZWFzaW5nOiB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb25cbiAgICB9ID0gZ2V0VHJhbnNpdGlvblByb3BzKHtcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVhc2luZ1xuICAgIH0sIHtcbiAgICAgIG1vZGU6ICdleGl0J1xuICAgIH0pO1xuICAgIGxldCBkdXJhdGlvbjtcbiAgICBpZiAodGltZW91dCA9PT0gJ2F1dG8nKSB7XG4gICAgICBkdXJhdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmdldEF1dG9IZWlnaHREdXJhdGlvbihub2RlLmNsaWVudEhlaWdodCk7XG4gICAgICBhdXRvVGltZW91dC5jdXJyZW50ID0gZHVyYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uO1xuICAgIH1cbiAgICBub2RlLnN0eWxlLnRyYW5zaXRpb24gPSBbdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5Jywge1xuICAgICAgZHVyYXRpb24sXG4gICAgICBkZWxheVxuICAgIH0pLCB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScsIHtcbiAgICAgIGR1cmF0aW9uOiBpc1dlYktpdDE1NCA/IGR1cmF0aW9uIDogZHVyYXRpb24gKiAwLjY2NixcbiAgICAgIGRlbGF5OiBpc1dlYktpdDE1NCA/IGRlbGF5IDogZGVsYXkgfHwgZHVyYXRpb24gKiAwLjMzMyxcbiAgICAgIGVhc2luZzogdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uXG4gICAgfSldLmpvaW4oJywnKTtcbiAgICBub2RlLnN0eWxlLm9wYWNpdHkgPSAwO1xuICAgIG5vZGUuc3R5bGUudHJhbnNmb3JtID0gZ2V0U2NhbGUoMC43NSk7XG4gICAgaWYgKG9uRXhpdCkge1xuICAgICAgb25FeGl0KG5vZGUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUV4aXRlZCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FeGl0ZWQpO1xuICBjb25zdCBoYW5kbGVBZGRFbmRMaXN0ZW5lciA9IG5leHQgPT4ge1xuICAgIGlmICh0aW1lb3V0ID09PSAnYXV0bycpIHtcbiAgICAgIHRpbWVyLnN0YXJ0KGF1dG9UaW1lb3V0LmN1cnJlbnQgfHwgMCwgbmV4dCk7XG4gICAgfVxuICAgIGlmIChhZGRFbmRMaXN0ZW5lcikge1xuICAgICAgLy8gT2xkIGNhbGwgc2lnbmF0dXJlIGJlZm9yZSBgcmVhY3QtdHJhbnNpdGlvbi1ncm91cGAgaW1wbGVtZW50ZWQgYG5vZGVSZWZgXG4gICAgICBhZGRFbmRMaXN0ZW5lcihub2RlUmVmLmN1cnJlbnQsIG5leHQpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFRyYW5zaXRpb25Db21wb25lbnQsIF9leHRlbmRzKHtcbiAgICBhcHBlYXI6IGFwcGVhcixcbiAgICBpbjogaW5Qcm9wLFxuICAgIG5vZGVSZWY6IG5vZGVSZWYsXG4gICAgb25FbnRlcjogaGFuZGxlRW50ZXIsXG4gICAgb25FbnRlcmVkOiBoYW5kbGVFbnRlcmVkLFxuICAgIG9uRW50ZXJpbmc6IGhhbmRsZUVudGVyaW5nLFxuICAgIG9uRXhpdDogaGFuZGxlRXhpdCxcbiAgICBvbkV4aXRlZDogaGFuZGxlRXhpdGVkLFxuICAgIG9uRXhpdGluZzogaGFuZGxlRXhpdGluZyxcbiAgICBhZGRFbmRMaXN0ZW5lcjogaGFuZGxlQWRkRW5kTGlzdGVuZXIsXG4gICAgdGltZW91dDogdGltZW91dCA9PT0gJ2F1dG8nID8gbnVsbCA6IHRpbWVvdXRcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogKHN0YXRlLCBjaGlsZFByb3BzKSA9PiB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwgX2V4dGVuZHMoe1xuICAgICAgICBzdHlsZTogX2V4dGVuZHMoe1xuICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgdHJhbnNmb3JtOiBnZXRTY2FsZSgwLjc1KSxcbiAgICAgICAgICB2aXNpYmlsaXR5OiBzdGF0ZSA9PT0gJ2V4aXRlZCcgJiYgIWluUHJvcCA/ICdoaWRkZW4nIDogdW5kZWZpbmVkXG4gICAgICAgIH0sIHN0eWxlc1tzdGF0ZV0sIHN0eWxlLCBjaGlsZHJlbi5wcm9wcy5zdHlsZSksXG4gICAgICAgIHJlZjogaGFuZGxlUmVmXG4gICAgICB9LCBjaGlsZFByb3BzKSk7XG4gICAgfVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEdyb3cucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQWRkIGEgY3VzdG9tIHRyYW5zaXRpb24gZW5kIHRyaWdnZXIuIENhbGxlZCB3aXRoIHRoZSB0cmFuc2l0aW9uaW5nIERPTVxuICAgKiBub2RlIGFuZCBhIGRvbmUgY2FsbGJhY2suIEFsbG93cyBmb3IgbW9yZSBmaW5lIGdyYWluZWQgdHJhbnNpdGlvbiBlbmRcbiAgICogbG9naWMuIE5vdGU6IFRpbWVvdXRzIGFyZSBzdGlsbCB1c2VkIGFzIGEgZmFsbGJhY2sgaWYgcHJvdmlkZWQuXG4gICAqL1xuICBhZGRFbmRMaXN0ZW5lcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBQZXJmb3JtIHRoZSBlbnRlciB0cmFuc2l0aW9uIHdoZW4gaXQgZmlyc3QgbW91bnRzIGlmIGBpbmAgaXMgYWxzbyBgdHJ1ZWAuXG4gICAqIFNldCB0aGlzIHRvIGBmYWxzZWAgdG8gZGlzYWJsZSB0aGlzIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQSBzaW5nbGUgY2hpbGQgY29udGVudCBlbGVtZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IGVsZW1lbnRBY2NlcHRpbmdSZWYuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFRoZSB0cmFuc2l0aW9uIHRpbWluZyBmdW5jdGlvbi5cbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIGVhc2luZyBvciBhIG9iamVjdCBjb250YWluaW5nIGVudGVyIGFuZCBleGl0IHZhbHVlcy5cbiAgICovXG4gIGVhc2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBlbnRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBleGl0OiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgd2lsbCB0cmFuc2l0aW9uIGluLlxuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkV4aXQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0aW5nOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGR1cmF0aW9uIGZvciB0aGUgdHJhbnNpdGlvbiwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBZb3UgbWF5IHNwZWNpZnkgYSBzaW5nbGUgdGltZW91dCBmb3IgYWxsIHRyYW5zaXRpb25zLCBvciBpbmRpdmlkdWFsbHkgd2l0aCBhbiBvYmplY3QuXG4gICAqXG4gICAqIFNldCB0byAnYXV0bycgdG8gYXV0b21hdGljYWxseSBjYWxjdWxhdGUgdHJhbnNpdGlvbiB0aW1lIGJhc2VkIG9uIGhlaWdodC5cbiAgICogQGRlZmF1bHQgJ2F1dG8nXG4gICAqL1xuICB0aW1lb3V0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFwcGVhcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBlbnRlcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBleGl0OiBQcm9wVHlwZXMubnVtYmVyXG4gIH0pXSlcbn0gOiB2b2lkIDA7XG5Hcm93Lm11aVN1cHBvcnRBdXRvID0gdHJ1ZTtcbmV4cG9ydCBkZWZhdWx0IEdyb3c7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IHsgaW5wdXRCYXNlQ2xhc3NlcyB9IGZyb20gJy4uL0lucHV0QmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUlucHV0Jywgc2xvdCk7XG59XG5jb25zdCBpbnB1dENsYXNzZXMgPSBfZXh0ZW5kcyh7fSwgaW5wdXRCYXNlQ2xhc3NlcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpSW5wdXQnLCBbJ3Jvb3QnLCAndW5kZXJsaW5lJywgJ2lucHV0J10pKTtcbmV4cG9ydCBkZWZhdWx0IGlucHV0Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJkaXNhYmxlVW5kZXJsaW5lXCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImZ1bGxXaWR0aFwiLCBcImlucHV0Q29tcG9uZW50XCIsIFwibXVsdGlsaW5lXCIsIFwic2xvdFByb3BzXCIsIFwic2xvdHNcIiwgXCJ0eXBlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuaW1wb3J0IHJlZlR5cGUgZnJvbSAnQG11aS91dGlscy9yZWZUeXBlJztcbmltcG9ydCBJbnB1dEJhc2UgZnJvbSAnLi4vSW5wdXRCYXNlJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgaW5wdXRDbGFzc2VzLCB7IGdldElucHV0VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9pbnB1dENsYXNzZXMnO1xuaW1wb3J0IHsgcm9vdE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlciwgaW5wdXRPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyLCBJbnB1dEJhc2VSb290LCBJbnB1dEJhc2VDb21wb25lbnQgYXMgSW5wdXRCYXNlSW5wdXQgfSBmcm9tICcuLi9JbnB1dEJhc2UvSW5wdXRCYXNlJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlVW5kZXJsaW5lXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhZGlzYWJsZVVuZGVybGluZSAmJiAndW5kZXJsaW5lJ10sXG4gICAgaW5wdXQ6IFsnaW5wdXQnXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0SW5wdXRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuY29uc3QgSW5wdXRSb290ID0gc3R5bGVkKElucHV0QmFzZVJvb3QsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aUlucHV0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbLi4uaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyKHByb3BzLCBzdHlsZXMpLCAhb3duZXJTdGF0ZS5kaXNhYmxlVW5kZXJsaW5lICYmIHN0eWxlcy51bmRlcmxpbmVdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICBjb25zdCBsaWdodCA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JztcbiAgbGV0IGJvdHRvbUxpbmVDb2xvciA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC40MiknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSc7XG4gIGlmICh0aGVtZS52YXJzKSB7XG4gICAgYm90dG9tTGluZUNvbG9yID0gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUuY29tbW9uLm9uQmFja2dyb3VuZENoYW5uZWx9IC8gJHt0aGVtZS52YXJzLm9wYWNpdHkuaW5wdXRVbmRlcmxpbmV9KWA7XG4gIH1cbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuICB9LCBvd25lclN0YXRlLmZvcm1Db250cm9sICYmIHtcbiAgICAnbGFiZWwgKyAmJzoge1xuICAgICAgbWFyZ2luVG9wOiAxNlxuICAgIH1cbiAgfSwgIW93bmVyU3RhdGUuZGlzYWJsZVVuZGVybGluZSAmJiB7XG4gICAgJyY6OmFmdGVyJzoge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMnB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbn1gLFxuICAgICAgbGVmdDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIC8vIERvaW5nIHRoZSBvdGhlciB3YXkgYXJvdW5kIGNyYXNoIG9uIElFMTEgXCInJ1wiIGh0dHBzOi8vZ2l0aHViLmNvbS9jc3NpbmpzL2pzcy9pc3N1ZXMvMjQyXG4gICAgICBjb250ZW50OiAnXCJcIicsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdHJhbnNmb3JtOiAnc2NhbGVYKDApJyxcbiAgICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlcixcbiAgICAgICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICAgICAgfSksXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScgLy8gVHJhbnNwYXJlbnQgdG8gdGhlIGhvdmVyIHN0eWxlLlxuICAgIH0sXG4gICAgW2AmLiR7aW5wdXRDbGFzc2VzLmZvY3VzZWR9OmFmdGVyYF06IHtcbiAgICAgIC8vIHRyYW5zbGF0ZVgoMCkgaXMgYSB3b3JrYXJvdW5kIGZvciBTYWZhcmkgdHJhbnNmb3JtIHNjYWxlIGJ1Z1xuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzMxNzY2XG4gICAgICB0cmFuc2Zvcm06ICdzY2FsZVgoMSkgdHJhbnNsYXRlWCgwKSdcbiAgICB9LFxuICAgIFtgJi4ke2lucHV0Q2xhc3Nlcy5lcnJvcn1gXToge1xuICAgICAgJyY6OmJlZm9yZSwgJjo6YWZ0ZXInOiB7XG4gICAgICAgIGJvcmRlckJvdHRvbUNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gICAgICB9XG4gICAgfSxcbiAgICAnJjo6YmVmb3JlJzoge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7Ym90dG9tTGluZUNvbG9yfWAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgYm90dG9tOiAwLFxuICAgICAgLy8gRG9pbmcgdGhlIG90aGVyIHdheSBhcm91bmQgY3Jhc2ggb24gSUUxMSBcIicnXCIgaHR0cHM6Ly9naXRodWIuY29tL2Nzc2luanMvanNzL2lzc3Vlcy8yNDJcbiAgICAgIGNvbnRlbnQ6ICdcIlxcXFwwMGEwXCInLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICByaWdodDogMCxcbiAgICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnYm9yZGVyLWJvdHRvbS1jb2xvcicsIHtcbiAgICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXJcbiAgICAgIH0pLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnIC8vIFRyYW5zcGFyZW50IHRvIHRoZSBob3ZlciBzdHlsZS5cbiAgICB9LFxuICAgIFtgJjpob3Zlcjpub3QoLiR7aW5wdXRDbGFzc2VzLmRpc2FibGVkfSwgLiR7aW5wdXRDbGFzc2VzLmVycm9yfSk6YmVmb3JlYF06IHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDJweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQucHJpbWFyeX1gLFxuICAgICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgICAgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7Ym90dG9tTGluZUNvbG9yfWBcbiAgICAgIH1cbiAgICB9LFxuICAgIFtgJi4ke2lucHV0Q2xhc3Nlcy5kaXNhYmxlZH06YmVmb3JlYF06IHtcbiAgICAgIGJvcmRlckJvdHRvbVN0eWxlOiAnZG90dGVkJ1xuICAgIH1cbiAgfSk7XG59KTtcbmNvbnN0IElucHV0SW5wdXQgPSBzdHlsZWQoSW5wdXRCYXNlSW5wdXQsIHtcbiAgbmFtZTogJ011aUlucHV0JyxcbiAgc2xvdDogJ0lucHV0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKHt9KTtcbmNvbnN0IElucHV0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gSW5wdXQoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfcmVmLCBfc2xvdHMkcm9vdCwgX3JlZjIsIF9zbG90cyRpbnB1dDtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlJbnB1dCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGRpc2FibGVVbmRlcmxpbmUsXG4gICAgICBjb21wb25lbnRzID0ge30sXG4gICAgICBjb21wb25lbnRzUHJvcHM6IGNvbXBvbmVudHNQcm9wc1Byb3AsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIGlucHV0Q29tcG9uZW50ID0gJ2lucHV0JyxcbiAgICAgIG11bHRpbGluZSA9IGZhbHNlLFxuICAgICAgc2xvdFByb3BzLFxuICAgICAgc2xvdHMgPSB7fSxcbiAgICAgIHR5cGUgPSAndGV4dCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKHByb3BzKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IHtcbiAgICBkaXNhYmxlVW5kZXJsaW5lXG4gIH07XG4gIGNvbnN0IGlucHV0Q29tcG9uZW50c1Byb3BzID0ge1xuICAgIHJvb3Q6IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9XG4gIH07XG4gIGNvbnN0IGNvbXBvbmVudHNQcm9wcyA9IChzbG90UHJvcHMgIT0gbnVsbCA/IHNsb3RQcm9wcyA6IGNvbXBvbmVudHNQcm9wc1Byb3ApID8gZGVlcG1lcmdlKHNsb3RQcm9wcyAhPSBudWxsID8gc2xvdFByb3BzIDogY29tcG9uZW50c1Byb3BzUHJvcCwgaW5wdXRDb21wb25lbnRzUHJvcHMpIDogaW5wdXRDb21wb25lbnRzUHJvcHM7XG4gIGNvbnN0IFJvb3RTbG90ID0gKF9yZWYgPSAoX3Nsb3RzJHJvb3QgPSBzbG90cy5yb290KSAhPSBudWxsID8gX3Nsb3RzJHJvb3QgOiBjb21wb25lbnRzLlJvb3QpICE9IG51bGwgPyBfcmVmIDogSW5wdXRSb290O1xuICBjb25zdCBJbnB1dFNsb3QgPSAoX3JlZjIgPSAoX3Nsb3RzJGlucHV0ID0gc2xvdHMuaW5wdXQpICE9IG51bGwgPyBfc2xvdHMkaW5wdXQgOiBjb21wb25lbnRzLklucHV0KSAhPSBudWxsID8gX3JlZjIgOiBJbnB1dElucHV0O1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goSW5wdXRCYXNlLCBfZXh0ZW5kcyh7XG4gICAgc2xvdHM6IHtcbiAgICAgIHJvb3Q6IFJvb3RTbG90LFxuICAgICAgaW5wdXQ6IElucHV0U2xvdFxuICAgIH0sXG4gICAgc2xvdFByb3BzOiBjb21wb25lbnRzUHJvcHMsXG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgaW5wdXRDb21wb25lbnQ6IGlucHV0Q29tcG9uZW50LFxuICAgIG11bHRpbGluZTogbXVsdGlsaW5lLFxuICAgIHJlZjogcmVmLFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBjbGFzc2VzXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gSW5wdXQucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhpcyBwcm9wIGhlbHBzIHVzZXJzIHRvIGZpbGwgZm9ybXMgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIG1vYmlsZSBkZXZpY2VzLlxuICAgKiBUaGUgbmFtZSBjYW4gYmUgY29uZnVzaW5nLCBhcyBpdCdzIG1vcmUgbGlrZSBhbiBhdXRvZmlsbC5cbiAgICogWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IGl0IFtmb2xsb3dpbmcgdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2F1dG9maWxsKS5cbiAgICovXG4gIGF1dG9Db21wbGV0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdwcmltYXJ5J2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90c2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90c2AgcHJvcCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBJbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdFByb3BzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RQcm9wc2AgcHJvcCBpbnN0ZWFkLCBhcyBgY29tcG9uZW50c1Byb3BzYCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgbm90IGhhdmUgYW4gdW5kZXJsaW5lLlxuICAgKi9cbiAgZGlzYWJsZVVuZGVybGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbmQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBlbmRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5wdXQnXG4gICAqL1xuICBpbnB1dENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdub25lJ2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJ10pLFxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1heFJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtaW5Sb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgW1RleHRhcmVhQXV0b3NpemVdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0YXJlYS1hdXRvc2l6ZS8pIGVsZW1lbnQgaXMgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aWxpbmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBIVE1MSW5wdXRFbGVtZW50Pn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgc2hvcnQgaGludCBkaXNwbGF5ZWQgaW4gdGhlIGBpbnB1dGAgYmVmb3JlIHRoZSB1c2VyIGVudGVycyBhIHZhbHVlLlxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJdCBwcmV2ZW50cyB0aGUgdXNlciBmcm9tIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGRcbiAgICogKG5vdCBmcm9tIGludGVyYWN0aW5nIHdpdGggdGhlIGZpZWxkKS5cbiAgICovXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzUHJvcHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFN0YXJ0IGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgc3RhcnRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LiBJdCBzaG91bGQgYmUgW2EgdmFsaWQgSFRNTDUgaW5wdXQgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0Zvcm1fJTNDaW5wdXQlM0VfdHlwZXMpLlxuICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudCwgcmVxdWlyZWQgZm9yIGEgY29udHJvbGxlZCBjb21wb25lbnQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufSA6IHZvaWQgMDtcbklucHV0Lm11aU5hbWUgPSAnSW5wdXQnO1xuZXhwb3J0IGRlZmF1bHQgSW5wdXQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgZnJvbSBcIkBtdWkvdXRpbHMvZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIFwiYXV0b0NvbXBsZXRlXCIsIFwiYXV0b0ZvY3VzXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlSW5qZWN0aW5nR2xvYmFsU3R5bGVzXCIsIFwiZW5kQWRvcm5tZW50XCIsIFwiZXJyb3JcIiwgXCJmdWxsV2lkdGhcIiwgXCJpZFwiLCBcImlucHV0Q29tcG9uZW50XCIsIFwiaW5wdXRQcm9wc1wiLCBcImlucHV0UmVmXCIsIFwibWFyZ2luXCIsIFwibWF4Um93c1wiLCBcIm1pblJvd3NcIiwgXCJtdWx0aWxpbmVcIiwgXCJuYW1lXCIsIFwib25CbHVyXCIsIFwib25DaGFuZ2VcIiwgXCJvbkNsaWNrXCIsIFwib25Gb2N1c1wiLCBcIm9uS2V5RG93blwiLCBcIm9uS2V5VXBcIiwgXCJwbGFjZWhvbGRlclwiLCBcInJlYWRPbmx5XCIsIFwicmVuZGVyU3VmZml4XCIsIFwicm93c1wiLCBcInNpemVcIiwgXCJzbG90UHJvcHNcIiwgXCJzbG90c1wiLCBcInN0YXJ0QWRvcm5tZW50XCIsIFwidHlwZVwiLCBcInZhbHVlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmIGZyb20gJ0BtdWkvdXRpbHMvZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYnO1xuaW1wb3J0IHJlZlR5cGUgZnJvbSAnQG11aS91dGlscy9yZWZUeXBlJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBpc0hvc3RDb21wb25lbnQgZnJvbSAnQG11aS91dGlscy9pc0hvc3RDb21wb25lbnQnO1xuaW1wb3J0IFRleHRhcmVhQXV0b3NpemUgZnJvbSAnLi4vVGV4dGFyZWFBdXRvc2l6ZSc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCBGb3JtQ29udHJvbENvbnRleHQgZnJvbSAnLi4vRm9ybUNvbnRyb2wvRm9ybUNvbnRyb2xDb250ZXh0JztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB1c2VFbmhhbmNlZEVmZmVjdCBmcm9tICcuLi91dGlscy91c2VFbmhhbmNlZEVmZmVjdCc7XG5pbXBvcnQgR2xvYmFsU3R5bGVzIGZyb20gJy4uL0dsb2JhbFN0eWxlcyc7XG5pbXBvcnQgeyBpc0ZpbGxlZCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IGlucHV0QmFzZUNsYXNzZXMsIHsgZ2V0SW5wdXRCYXNlVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9pbnB1dEJhc2VDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgY29uc3Qgcm9vdE92ZXJyaWRlc1Jlc29sdmVyID0gKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgY29uc3Qge1xuICAgIG93bmVyU3RhdGVcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmZvcm1Db250cm9sICYmIHN0eWxlcy5mb3JtQ29udHJvbCwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiBzdHlsZXMuYWRvcm5lZFN0YXJ0LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiBzdHlsZXMuYWRvcm5lZEVuZCwgb3duZXJTdGF0ZS5lcnJvciAmJiBzdHlsZXMuZXJyb3IsIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiBzdHlsZXMuc2l6ZVNtYWxsLCBvd25lclN0YXRlLm11bHRpbGluZSAmJiBzdHlsZXMubXVsdGlsaW5lLCBvd25lclN0YXRlLmNvbG9yICYmIHN0eWxlc1tgY29sb3Ike2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHN0eWxlcy5mdWxsV2lkdGgsIG93bmVyU3RhdGUuaGlkZGVuTGFiZWwgJiYgc3R5bGVzLmhpZGRlbkxhYmVsXTtcbn07XG5leHBvcnQgY29uc3QgaW5wdXRPdmVycmlkZXNSZXNvbHZlciA9IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBvd25lclN0YXRlXG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIFtzdHlsZXMuaW5wdXQsIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiBzdHlsZXMuaW5wdXRTaXplU21hbGwsIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIHN0eWxlcy5pbnB1dE11bHRpbGluZSwgb3duZXJTdGF0ZS50eXBlID09PSAnc2VhcmNoJyAmJiBzdHlsZXMuaW5wdXRUeXBlU2VhcmNoLCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHN0eWxlcy5pbnB1dEFkb3JuZWRTdGFydCwgb3duZXJTdGF0ZS5lbmRBZG9ybm1lbnQgJiYgc3R5bGVzLmlucHV0QWRvcm5lZEVuZCwgb3duZXJTdGF0ZS5oaWRkZW5MYWJlbCAmJiBzdHlsZXMuaW5wdXRIaWRkZW5MYWJlbF07XG59O1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgY29sb3IsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZW5kQWRvcm5tZW50LFxuICAgIGZvY3VzZWQsXG4gICAgZm9ybUNvbnRyb2wsXG4gICAgZnVsbFdpZHRoLFxuICAgIGhpZGRlbkxhYmVsLFxuICAgIG11bHRpbGluZSxcbiAgICByZWFkT25seSxcbiAgICBzaXplLFxuICAgIHN0YXJ0QWRvcm5tZW50LFxuICAgIHR5cGVcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgZXJyb3IgJiYgJ2Vycm9yJywgZnVsbFdpZHRoICYmICdmdWxsV2lkdGgnLCBmb2N1c2VkICYmICdmb2N1c2VkJywgZm9ybUNvbnRyb2wgJiYgJ2Zvcm1Db250cm9sJywgc2l6ZSAmJiBzaXplICE9PSAnbWVkaXVtJyAmJiBgc2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gLCBtdWx0aWxpbmUgJiYgJ211bHRpbGluZScsIHN0YXJ0QWRvcm5tZW50ICYmICdhZG9ybmVkU3RhcnQnLCBlbmRBZG9ybm1lbnQgJiYgJ2Fkb3JuZWRFbmQnLCBoaWRkZW5MYWJlbCAmJiAnaGlkZGVuTGFiZWwnLCByZWFkT25seSAmJiAncmVhZE9ubHknXSxcbiAgICBpbnB1dDogWydpbnB1dCcsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIHR5cGUgPT09ICdzZWFyY2gnICYmICdpbnB1dFR5cGVTZWFyY2gnLCBtdWx0aWxpbmUgJiYgJ2lucHV0TXVsdGlsaW5lJywgc2l6ZSA9PT0gJ3NtYWxsJyAmJiAnaW5wdXRTaXplU21hbGwnLCBoaWRkZW5MYWJlbCAmJiAnaW5wdXRIaWRkZW5MYWJlbCcsIHN0YXJ0QWRvcm5tZW50ICYmICdpbnB1dEFkb3JuZWRTdGFydCcsIGVuZEFkb3JubWVudCAmJiAnaW5wdXRBZG9ybmVkRW5kJywgcmVhZE9ubHkgJiYgJ3JlYWRPbmx5J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRJbnB1dEJhc2VVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBJbnB1dEJhc2VSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlJbnB1dEJhc2UnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiByb290T3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7fSwgdGhlbWUudHlwb2dyYXBoeS5ib2R5MSwge1xuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5wcmltYXJ5LFxuICBsaW5lSGVpZ2h0OiAnMS40Mzc1ZW0nLFxuICAvLyAyM3B4XG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAvLyBQcmV2ZW50IHBhZGRpbmcgaXNzdWUgd2l0aCBmdWxsV2lkdGguXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBjdXJzb3I6ICd0ZXh0JyxcbiAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIFtgJi4ke2lucHV0QmFzZUNsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5kaXNhYmxlZCxcbiAgICBjdXJzb3I6ICdkZWZhdWx0J1xuICB9XG59LCBvd25lclN0YXRlLm11bHRpbGluZSAmJiBfZXh0ZW5kcyh7XG4gIHBhZGRpbmc6ICc0cHggMCA1cHgnXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBwYWRkaW5nVG9wOiAxXG59KSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYge1xuICB3aWR0aDogJzEwMCUnXG59KSk7XG5leHBvcnQgY29uc3QgSW5wdXRCYXNlQ29tcG9uZW50ID0gc3R5bGVkKCdpbnB1dCcsIHtcbiAgbmFtZTogJ011aUlucHV0QmFzZScsXG4gIHNsb3Q6ICdJbnB1dCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiBpbnB1dE92ZXJyaWRlc1Jlc29sdmVyXG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICBjb25zdCBsaWdodCA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JztcbiAgY29uc3QgcGxhY2Vob2xkZXIgPSBfZXh0ZW5kcyh7XG4gICAgY29sb3I6ICdjdXJyZW50Q29sb3InXG4gIH0sIHRoZW1lLnZhcnMgPyB7XG4gICAgb3BhY2l0eTogdGhlbWUudmFycy5vcGFjaXR5LmlucHV0UGxhY2Vob2xkZXJcbiAgfSA6IHtcbiAgICBvcGFjaXR5OiBsaWdodCA/IDAuNDIgOiAwLjVcbiAgfSwge1xuICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHtcbiAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyXG4gICAgfSlcbiAgfSk7XG4gIGNvbnN0IHBsYWNlaG9sZGVySGlkZGVuID0ge1xuICAgIG9wYWNpdHk6ICcwICFpbXBvcnRhbnQnXG4gIH07XG4gIGNvbnN0IHBsYWNlaG9sZGVyVmlzaWJsZSA9IHRoZW1lLnZhcnMgPyB7XG4gICAgb3BhY2l0eTogdGhlbWUudmFycy5vcGFjaXR5LmlucHV0UGxhY2Vob2xkZXJcbiAgfSA6IHtcbiAgICBvcGFjaXR5OiBsaWdodCA/IDAuNDIgOiAwLjVcbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBmb250OiAnaW5oZXJpdCcsXG4gICAgbGV0dGVyU3BhY2luZzogJ2luaGVyaXQnLFxuICAgIGNvbG9yOiAnY3VycmVudENvbG9yJyxcbiAgICBwYWRkaW5nOiAnNHB4IDAgNXB4JyxcbiAgICBib3JkZXI6IDAsXG4gICAgYm94U2l6aW5nOiAnY29udGVudC1ib3gnLFxuICAgIGJhY2tncm91bmQ6ICdub25lJyxcbiAgICBoZWlnaHQ6ICcxLjQzNzVlbScsXG4gICAgLy8gUmVzZXQgMjNweHRoZSBuYXRpdmUgaW5wdXQgbGluZS1oZWlnaHRcbiAgICBtYXJnaW46IDAsXG4gICAgLy8gUmVzZXQgZm9yIFNhZmFyaVxuICAgIFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgLy8gTWFrZSB0aGUgZmxleCBpdGVtIHNocmluayB3aXRoIEZpcmVmb3hcbiAgICBtaW5XaWR0aDogMCxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIC8vIEZpeCBJRTExIHdpZHRoIGlzc3VlXG4gICAgYW5pbWF0aW9uTmFtZTogJ211aS1hdXRvLWZpbGwtY2FuY2VsJyxcbiAgICBhbmltYXRpb25EdXJhdGlvbjogJzEwbXMnLFxuICAgICcmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXIsXG4gICAgJyY6Oi1tb3otcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlcixcbiAgICAvLyBGaXJlZm94IDE5K1xuICAgICcmOi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyLFxuICAgIC8vIElFMTFcbiAgICAnJjo6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXIsXG4gICAgLy8gRWRnZVxuICAgICcmOmZvY3VzJzoge1xuICAgICAgb3V0bGluZTogMFxuICAgIH0sXG4gICAgLy8gUmVzZXQgRmlyZWZveCBpbnZhbGlkIHJlcXVpcmVkIGlucHV0IHN0eWxlXG4gICAgJyY6aW52YWxpZCc6IHtcbiAgICAgIGJveFNoYWRvdzogJ25vbmUnXG4gICAgfSxcbiAgICAnJjo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbic6IHtcbiAgICAgIC8vIFJlbW92ZSB0aGUgcGFkZGluZyB3aGVuIHR5cGU9c2VhcmNoLlxuICAgICAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnXG4gICAgfSxcbiAgICAvLyBTaG93IGFuZCBoaWRlIHRoZSBwbGFjZWhvbGRlciBsb2dpY1xuICAgIFtgbGFiZWxbZGF0YS1zaHJpbms9ZmFsc2VdICsgLiR7aW5wdXRCYXNlQ2xhc3Nlcy5mb3JtQ29udHJvbH0gJmBdOiB7XG4gICAgICAnJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVySGlkZGVuLFxuICAgICAgJyY6Oi1tb3otcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlckhpZGRlbixcbiAgICAgIC8vIEZpcmVmb3ggMTkrXG4gICAgICAnJjotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlckhpZGRlbixcbiAgICAgIC8vIElFMTFcbiAgICAgICcmOjotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlckhpZGRlbixcbiAgICAgIC8vIEVkZ2VcbiAgICAgICcmOmZvY3VzOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJWaXNpYmxlLFxuICAgICAgJyY6Zm9jdXM6Oi1tb3otcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlclZpc2libGUsXG4gICAgICAvLyBGaXJlZm94IDE5K1xuICAgICAgJyY6Zm9jdXM6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJWaXNpYmxlLFxuICAgICAgLy8gSUUxMVxuICAgICAgJyY6Zm9jdXM6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyVmlzaWJsZSAvLyBFZGdlXG4gICAgfSxcbiAgICBbYCYuJHtpbnB1dEJhc2VDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgICBvcGFjaXR5OiAxLFxuICAgICAgLy8gUmVzZXQgaU9TIG9wYWNpdHlcbiAgICAgIFdlYmtpdFRleHRGaWxsQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuZGlzYWJsZWQgLy8gRml4IG9wYWNpdHkgU2FmYXJpIGJ1Z1xuICAgIH0sXG4gICAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICAgIGFuaW1hdGlvbkR1cmF0aW9uOiAnNTAwMHMnLFxuICAgICAgYW5pbWF0aW9uTmFtZTogJ211aS1hdXRvLWZpbGwnXG4gICAgfVxuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAgIHBhZGRpbmdUb3A6IDFcbiAgfSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYge1xuICAgIGhlaWdodDogJ2F1dG8nLFxuICAgIHJlc2l6ZTogJ25vbmUnLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgcGFkZGluZ1RvcDogMFxuICB9LCBvd25lclN0YXRlLnR5cGUgPT09ICdzZWFyY2gnICYmIHtcbiAgICAvLyBJbXByb3ZlIHR5cGUgc2VhcmNoIHN0eWxlLlxuICAgIE1vekFwcGVhcmFuY2U6ICd0ZXh0ZmllbGQnXG4gIH0pO1xufSk7XG5jb25zdCBpbnB1dEdsb2JhbFN0eWxlcyA9IC8qI19fUFVSRV9fKi9fanN4KEdsb2JhbFN0eWxlcywge1xuICBzdHlsZXM6IHtcbiAgICAnQGtleWZyYW1lcyBtdWktYXV0by1maWxsJzoge1xuICAgICAgZnJvbToge1xuICAgICAgICBkaXNwbGF5OiAnYmxvY2snXG4gICAgICB9XG4gICAgfSxcbiAgICAnQGtleWZyYW1lcyBtdWktYXV0by1maWxsLWNhbmNlbCc6IHtcbiAgICAgIGZyb206IHtcbiAgICAgICAgZGlzcGxheTogJ2Jsb2NrJ1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogYElucHV0QmFzZWAgY29udGFpbnMgYXMgZmV3IHN0eWxlcyBhcyBwb3NzaWJsZS5cbiAqIEl0IGFpbXMgdG8gYmUgYSBzaW1wbGUgYnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGFuIGlucHV0LlxuICogSXQgY29udGFpbnMgYSBsb2FkIG9mIHN0eWxlIHJlc2V0IGFuZCBzb21lIHN0YXRlIGxvZ2ljLlxuICovXG5jb25zdCBJbnB1dEJhc2UgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBJbnB1dEJhc2UoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfc2xvdFByb3BzJGlucHV0O1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUlucHV0QmFzZSdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogYXJpYURlc2NyaWJlZGJ5LFxuICAgICAgYXV0b0NvbXBsZXRlLFxuICAgICAgYXV0b0ZvY3VzLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50cyA9IHt9LFxuICAgICAgY29tcG9uZW50c1Byb3BzID0ge30sXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGRpc2FibGVJbmplY3RpbmdHbG9iYWxTdHlsZXMsXG4gICAgICBlbmRBZG9ybm1lbnQsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIGlkLFxuICAgICAgaW5wdXRDb21wb25lbnQgPSAnaW5wdXQnLFxuICAgICAgaW5wdXRQcm9wczogaW5wdXRQcm9wc1Byb3AgPSB7fSxcbiAgICAgIGlucHV0UmVmOiBpbnB1dFJlZlByb3AsXG4gICAgICBtYXhSb3dzLFxuICAgICAgbWluUm93cyxcbiAgICAgIG11bHRpbGluZSA9IGZhbHNlLFxuICAgICAgbmFtZSxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25DbGljayxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbktleURvd24sXG4gICAgICBvbktleVVwLFxuICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICByZWFkT25seSxcbiAgICAgIHJlbmRlclN1ZmZpeCxcbiAgICAgIHJvd3MsXG4gICAgICBzbG90UHJvcHMgPSB7fSxcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICBzdGFydEFkb3JubWVudCxcbiAgICAgIHR5cGUgPSAndGV4dCcsXG4gICAgICB2YWx1ZTogdmFsdWVQcm9wXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHZhbHVlID0gaW5wdXRQcm9wc1Byb3AudmFsdWUgIT0gbnVsbCA/IGlucHV0UHJvcHNQcm9wLnZhbHVlIDogdmFsdWVQcm9wO1xuICBjb25zdCB7XG4gICAgY3VycmVudDogaXNDb250cm9sbGVkXG4gIH0gPSBSZWFjdC51c2VSZWYodmFsdWUgIT0gbnVsbCk7XG4gIGNvbnN0IGlucHV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIGNvbnN0IGhhbmRsZUlucHV0UmVmV2FybmluZyA9IFJlYWN0LnVzZUNhbGxiYWNrKGluc3RhbmNlID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLm5vZGVOYW1lICE9PSAnSU5QVVQnICYmICFpbnN0YW5jZS5mb2N1cykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCBhIGBpbnB1dENvbXBvbmVudGAgdG8gdGhlIGlucHV0IGNvbXBvbmVudCcsICd0aGF0IGRvZXMgbm90IGNvcnJlY3RseSBoYW5kbGUgdGhlIGByZWZgIHByb3AuJywgJ01ha2Ugc3VyZSB0aGUgYHJlZmAgcHJvcCBpcyBjYWxsZWQgd2l0aCBhIEhUTUxJbnB1dEVsZW1lbnQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW10pO1xuICBjb25zdCBoYW5kbGVJbnB1dFJlZiA9IHVzZUZvcmtSZWYoaW5wdXRSZWYsIGlucHV0UmVmUHJvcCwgaW5wdXRQcm9wc1Byb3AucmVmLCBoYW5kbGVJbnB1dFJlZldhcm5pbmcpO1xuICBjb25zdCBbZm9jdXNlZCwgc2V0Rm9jdXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKG11aUZvcm1Db250cm9sKSB7XG4gICAgICAgIHJldHVybiBtdWlGb3JtQ29udHJvbC5yZWdpc3RlckVmZmVjdCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LCBbbXVpRm9ybUNvbnRyb2xdKTtcbiAgfVxuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsnY29sb3InLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnaGlkZGVuTGFiZWwnLCAnc2l6ZScsICdyZXF1aXJlZCcsICdmaWxsZWQnXVxuICB9KTtcbiAgZmNzLmZvY3VzZWQgPSBtdWlGb3JtQ29udHJvbCA/IG11aUZvcm1Db250cm9sLmZvY3VzZWQgOiBmb2N1c2VkO1xuXG4gIC8vIFRoZSBibHVyIHdvbid0IGZpcmUgd2hlbiB0aGUgZGlzYWJsZWQgc3RhdGUgaXMgc2V0IG9uIGEgZm9jdXNlZCBpbnB1dC5cbiAgLy8gV2UgbmVlZCB0byBib29rIGtlZXAgdGhlIGZvY3VzZWQgc3RhdGUgbWFudWFsbHkuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtdWlGb3JtQ29udHJvbCAmJiBkaXNhYmxlZCAmJiBmb2N1c2VkKSB7XG4gICAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgICAgIGlmIChvbkJsdXIpIHtcbiAgICAgICAgb25CbHVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbbXVpRm9ybUNvbnRyb2wsIGRpc2FibGVkLCBmb2N1c2VkLCBvbkJsdXJdKTtcbiAgY29uc3Qgb25GaWxsZWQgPSBtdWlGb3JtQ29udHJvbCAmJiBtdWlGb3JtQ29udHJvbC5vbkZpbGxlZDtcbiAgY29uc3Qgb25FbXB0eSA9IG11aUZvcm1Db250cm9sICYmIG11aUZvcm1Db250cm9sLm9uRW1wdHk7XG4gIGNvbnN0IGNoZWNrRGlydHkgPSBSZWFjdC51c2VDYWxsYmFjayhvYmogPT4ge1xuICAgIGlmIChpc0ZpbGxlZChvYmopKSB7XG4gICAgICBpZiAob25GaWxsZWQpIHtcbiAgICAgICAgb25GaWxsZWQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9uRW1wdHkpIHtcbiAgICAgIG9uRW1wdHkoKTtcbiAgICB9XG4gIH0sIFtvbkZpbGxlZCwgb25FbXB0eV0pO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzQ29udHJvbGxlZCkge1xuICAgICAgY2hlY2tEaXJ0eSh7XG4gICAgICAgIHZhbHVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFt2YWx1ZSwgY2hlY2tEaXJ0eSwgaXNDb250cm9sbGVkXSk7XG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gZXZlbnQgPT4ge1xuICAgIC8vIEZpeCBhIGJ1ZyB3aXRoIElFMTEgd2hlcmUgdGhlIGZvY3VzL2JsdXIgZXZlbnRzIGFyZSB0cmlnZ2VyZWRcbiAgICAvLyB3aGlsZSB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgIGlmIChmY3MuZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob25Gb2N1cykge1xuICAgICAgb25Gb2N1cyhldmVudCk7XG4gICAgfVxuICAgIGlmIChpbnB1dFByb3BzUHJvcC5vbkZvY3VzKSB7XG4gICAgICBpbnB1dFByb3BzUHJvcC5vbkZvY3VzKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKG11aUZvcm1Db250cm9sICYmIG11aUZvcm1Db250cm9sLm9uRm9jdXMpIHtcbiAgICAgIG11aUZvcm1Db250cm9sLm9uRm9jdXMoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRGb2N1c2VkKHRydWUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlQmx1ciA9IGV2ZW50ID0+IHtcbiAgICBpZiAob25CbHVyKSB7XG4gICAgICBvbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAoaW5wdXRQcm9wc1Byb3Aub25CbHVyKSB7XG4gICAgICBpbnB1dFByb3BzUHJvcC5vbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAobXVpRm9ybUNvbnRyb2wgJiYgbXVpRm9ybUNvbnRyb2wub25CbHVyKSB7XG4gICAgICBtdWlGb3JtQ29udHJvbC5vbkJsdXIoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChldmVudCwgLi4uYXJncykgPT4ge1xuICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0IHx8IGlucHV0UmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBFeHBlY3RlZCB2YWxpZCBpbnB1dCB0YXJnZXQuIERpZCB5b3UgdXNlIGEgY3VzdG9tIFxcYGlucHV0Q29tcG9uZW50XFxgIGFuZCBmb3JnZXQgdG8gZm9yd2FyZCByZWZzPyBTZWUgaHR0cHM6Ly9tdWkuY29tL3IvaW5wdXQtY29tcG9uZW50LXJlZi1pbnRlcmZhY2UgZm9yIG1vcmUgaW5mby5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxKSk7XG4gICAgICB9XG4gICAgICBjaGVja0RpcnR5KHtcbiAgICAgICAgdmFsdWU6IGVsZW1lbnQudmFsdWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaW5wdXRQcm9wc1Byb3Aub25DaGFuZ2UpIHtcbiAgICAgIGlucHV0UHJvcHNQcm9wLm9uQ2hhbmdlKGV2ZW50LCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICAvLyBQZXJmb3JtIGluIHRoZSB3aWxsVXBkYXRlXG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICBvbkNoYW5nZShldmVudCwgLi4uYXJncyk7XG4gICAgfVxuICB9O1xuXG4gIC8vIENoZWNrIHRoZSBpbnB1dCBzdGF0ZSBvbiBtb3VudCwgaW4gY2FzZSBpdCB3YXMgZmlsbGVkIGJ5IHRoZSB1c2VyXG4gIC8vIG9yIGF1dG8gZmlsbGVkIGJ5IHRoZSBicm93c2VyIGJlZm9yZSB0aGUgaHlkcmF0aW9uIChmb3IgU1NSKS5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjaGVja0RpcnR5KGlucHV0UmVmLmN1cnJlbnQpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pO1xuICBjb25zdCBoYW5kbGVDbGljayA9IGV2ZW50ID0+IHtcbiAgICBpZiAoaW5wdXRSZWYuY3VycmVudCAmJiBldmVudC5jdXJyZW50VGFyZ2V0ID09PSBldmVudC50YXJnZXQpIHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgbGV0IElucHV0Q29tcG9uZW50ID0gaW5wdXRDb21wb25lbnQ7XG4gIGxldCBpbnB1dFByb3BzID0gaW5wdXRQcm9wc1Byb3A7XG4gIGlmIChtdWx0aWxpbmUgJiYgSW5wdXRDb21wb25lbnQgPT09ICdpbnB1dCcpIHtcbiAgICBpZiAocm93cykge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKG1pblJvd3MgfHwgbWF4Um93cykge1xuICAgICAgICAgIGNvbnNvbGUud2FybignTVVJOiBZb3UgY2FuIG5vdCB1c2UgdGhlIGBtaW5Sb3dzYCBvciBgbWF4Um93c2AgcHJvcHMgd2hlbiB0aGUgaW5wdXQgYHJvd3NgIHByb3AgaXMgc2V0LicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpbnB1dFByb3BzID0gX2V4dGVuZHMoe1xuICAgICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAgIG1pblJvd3M6IHJvd3MsXG4gICAgICAgIG1heFJvd3M6IHJvd3NcbiAgICAgIH0sIGlucHV0UHJvcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dFByb3BzID0gX2V4dGVuZHMoe1xuICAgICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAgIG1heFJvd3MsXG4gICAgICAgIG1pblJvd3NcbiAgICAgIH0sIGlucHV0UHJvcHMpO1xuICAgIH1cbiAgICBJbnB1dENvbXBvbmVudCA9IFRleHRhcmVhQXV0b3NpemU7XG4gIH1cbiAgY29uc3QgaGFuZGxlQXV0b0ZpbGwgPSBldmVudCA9PiB7XG4gICAgLy8gUHJvdmlkZSBhIGZha2UgdmFsdWUgYXMgQ2hyb21lIG1pZ2h0IG5vdCBsZXQgeW91IGFjY2VzcyBpdCBmb3Igc2VjdXJpdHkgcmVhc29ucy5cbiAgICBjaGVja0RpcnR5KGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdtdWktYXV0by1maWxsLWNhbmNlbCcgPyBpbnB1dFJlZi5jdXJyZW50IDoge1xuICAgICAgdmFsdWU6ICd4J1xuICAgIH0pO1xuICB9O1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgICAgbXVpRm9ybUNvbnRyb2wuc2V0QWRvcm5lZFN0YXJ0KEJvb2xlYW4oc3RhcnRBZG9ybm1lbnQpKTtcbiAgICB9XG4gIH0sIFttdWlGb3JtQ29udHJvbCwgc3RhcnRBZG9ybm1lbnRdKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yOiBmY3MuY29sb3IgfHwgJ3ByaW1hcnknLFxuICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgZW5kQWRvcm5tZW50LFxuICAgIGVycm9yOiBmY3MuZXJyb3IsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgZm9ybUNvbnRyb2w6IG11aUZvcm1Db250cm9sLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBoaWRkZW5MYWJlbDogZmNzLmhpZGRlbkxhYmVsLFxuICAgIG11bHRpbGluZSxcbiAgICBzaXplOiBmY3Muc2l6ZSxcbiAgICBzdGFydEFkb3JubWVudCxcbiAgICB0eXBlXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IFJvb3QgPSBzbG90cy5yb290IHx8IGNvbXBvbmVudHMuUm9vdCB8fCBJbnB1dEJhc2VSb290O1xuICBjb25zdCByb290UHJvcHMgPSBzbG90UHJvcHMucm9vdCB8fCBjb21wb25lbnRzUHJvcHMucm9vdCB8fCB7fTtcbiAgY29uc3QgSW5wdXQgPSBzbG90cy5pbnB1dCB8fCBjb21wb25lbnRzLklucHV0IHx8IElucHV0QmFzZUNvbXBvbmVudDtcbiAgaW5wdXRQcm9wcyA9IF9leHRlbmRzKHt9LCBpbnB1dFByb3BzLCAoX3Nsb3RQcm9wcyRpbnB1dCA9IHNsb3RQcm9wcy5pbnB1dCkgIT0gbnVsbCA/IF9zbG90UHJvcHMkaW5wdXQgOiBjb21wb25lbnRzUHJvcHMuaW5wdXQpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFshZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlcyAmJiBpbnB1dEdsb2JhbFN0eWxlcywgLyojX19QVVJFX18qL19qc3hzKFJvb3QsIF9leHRlbmRzKHt9LCByb290UHJvcHMsICFpc0hvc3RDb21wb25lbnQoUm9vdCkgJiYge1xuICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIHJvb3RQcm9wcy5vd25lclN0YXRlKVxuICAgIH0sIHtcbiAgICAgIHJlZjogcmVmLFxuICAgICAgb25DbGljazogaGFuZGxlQ2xpY2tcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgcm9vdFByb3BzLmNsYXNzTmFtZSwgY2xhc3NOYW1lLCByZWFkT25seSAmJiAnTXVpSW5wdXRCYXNlLXJlYWRPbmx5JyksXG4gICAgICBjaGlsZHJlbjogW3N0YXJ0QWRvcm5tZW50LCAvKiNfX1BVUkVfXyovX2pzeChGb3JtQ29udHJvbENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dCwgX2V4dGVuZHMoe1xuICAgICAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogZmNzLmVycm9yLFxuICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgICAgICAgYXV0b0NvbXBsZXRlOiBhdXRvQ29tcGxldGUsXG4gICAgICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgZGlzYWJsZWQ6IGZjcy5kaXNhYmxlZCxcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgb25BbmltYXRpb25TdGFydDogaGFuZGxlQXV0b0ZpbGwsXG4gICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICAgICAgcmVhZE9ubHk6IHJlYWRPbmx5LFxuICAgICAgICAgIHJlcXVpcmVkOiBmY3MucmVxdWlyZWQsXG4gICAgICAgICAgcm93czogcm93cyxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgb25LZXlEb3duOiBvbktleURvd24sXG4gICAgICAgICAgb25LZXlVcDogb25LZXlVcCxcbiAgICAgICAgICB0eXBlOiB0eXBlXG4gICAgICAgIH0sIGlucHV0UHJvcHMsICFpc0hvc3RDb21wb25lbnQoSW5wdXQpICYmIHtcbiAgICAgICAgICBhczogSW5wdXRDb21wb25lbnQsXG4gICAgICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIGlucHV0UHJvcHMub3duZXJTdGF0ZSlcbiAgICAgICAgfSwge1xuICAgICAgICAgIHJlZjogaGFuZGxlSW5wdXRSZWYsXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMuaW5wdXQsIGlucHV0UHJvcHMuY2xhc3NOYW1lLCByZWFkT25seSAmJiAnTXVpSW5wdXRCYXNlLXJlYWRPbmx5JyksXG4gICAgICAgICAgb25CbHVyOiBoYW5kbGVCbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgICAgICAgb25Gb2N1czogaGFuZGxlRm9jdXNcbiAgICAgICAgfSkpXG4gICAgICB9KSwgZW5kQWRvcm5tZW50LCByZW5kZXJTdWZmaXggPyByZW5kZXJTdWZmaXgoX2V4dGVuZHMoe30sIGZjcywge1xuICAgICAgICBzdGFydEFkb3JubWVudFxuICAgICAgfSkpIDogbnVsbF1cbiAgICB9KSldXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBJbnB1dEJhc2UucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgJ2FyaWEtZGVzY3JpYmVkYnknOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhpcyBwcm9wIGhlbHBzIHVzZXJzIHRvIGZpbGwgZm9ybXMgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIG1vYmlsZSBkZXZpY2VzLlxuICAgKiBUaGUgbmFtZSBjYW4gYmUgY29uZnVzaW5nLCBhcyBpdCdzIG1vcmUgbGlrZSBhbiBhdXRvZmlsbC5cbiAgICogWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IGl0IFtmb2xsb3dpbmcgdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2F1dG9maWxsKS5cbiAgICovXG4gIGF1dG9Db21wbGV0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdwcmltYXJ5J2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90c2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90c2AgcHJvcCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBJbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdFByb3BzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RQcm9wc2AgcHJvcCBpbnN0ZWFkLCBhcyBgY29tcG9uZW50c1Byb3BzYCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIEdsb2JhbFN0eWxlcyBmb3IgdGhlIGF1dG8tZmlsbCBrZXlmcmFtZXMgd2lsbCBub3QgYmUgaW5qZWN0ZWQvcmVtb3ZlZCBvbiBtb3VudC91bm1vdW50LiBNYWtlIHN1cmUgdG8gaW5qZWN0IHRoZW0gYXQgdGhlIHRvcCBvZiB5b3VyIGFwcGxpY2F0aW9uLlxuICAgKiBUaGlzIG9wdGlvbiBpcyBpbnRlbmRlZCB0byBoZWxwIHdpdGggYm9vc3RpbmcgdGhlIGluaXRpYWwgcmVuZGVyaW5nIHBlcmZvcm1hbmNlIGlmIHlvdSBhcmUgbG9hZGluZyBhIGJpZyBhbW91bnQgb2YgSW5wdXQgY29tcG9uZW50cyBhdCBvbmNlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbmQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBlbmRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5wdXQnXG4gICAqL1xuICBpbnB1dENvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ25vbmUnYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnXSksXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSBbVGV4dGFyZWFBdXRvc2l6ZV0oL21hdGVyaWFsLXVpL3JlYWN0LXRleHRhcmVhLWF1dG9zaXplLykgZWxlbWVudCBpcyByZW5kZXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpbGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGBpbnB1dGAgaXMgYmx1cnJlZC5cbiAgICpcbiAgICogTm90aWNlIHRoYXQgdGhlIGZpcnN0IGFyZ3VtZW50IChldmVudCkgbWlnaHQgYmUgdW5kZWZpbmVkLlxuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBgaW5wdXRgIGRvZXNuJ3Qgc2F0aXNmeSBpdHMgY29uc3RyYWludHMuXG4gICAqL1xuICBvbkludmFsaWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5VXA6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHNob3J0IGhpbnQgZGlzcGxheWVkIGluIHRoZSBgaW5wdXRgIGJlZm9yZSB0aGUgdXNlciBlbnRlcnMgYSB2YWx1ZS5cbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSXQgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAqIChub3QgZnJvbSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmaWVsZCkuXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICByZW5kZXJTdWZmaXg6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c1Byb3BzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBTdGFydCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIHN0YXJ0QWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC4gSXQgc2hvdWxkIGJlIFthIHZhbGlkIEhUTUw1IGlucHV0IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNGb3JtXyUzQ2lucHV0JTNFX3R5cGVzKS5cbiAgICogQGRlZmF1bHQgJ3RleHQnXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHJlcXVpcmVkIGZvciBhIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBJbnB1dEJhc2U7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dEJhc2VVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUlucHV0QmFzZScsIHNsb3QpO1xufVxuY29uc3QgaW5wdXRCYXNlQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUlucHV0QmFzZScsIFsncm9vdCcsICdmb3JtQ29udHJvbCcsICdmb2N1c2VkJywgJ2Rpc2FibGVkJywgJ2Fkb3JuZWRTdGFydCcsICdhZG9ybmVkRW5kJywgJ2Vycm9yJywgJ3NpemVTbWFsbCcsICdtdWx0aWxpbmUnLCAnY29sb3JTZWNvbmRhcnknLCAnZnVsbFdpZHRoJywgJ2hpZGRlbkxhYmVsJywgJ3JlYWRPbmx5JywgJ2lucHV0JywgJ2lucHV0U2l6ZVNtYWxsJywgJ2lucHV0TXVsdGlsaW5lJywgJ2lucHV0VHlwZVNlYXJjaCcsICdpbnB1dEFkb3JuZWRTdGFydCcsICdpbnB1dEFkb3JuZWRFbmQnLCAnaW5wdXRIaWRkZW5MYWJlbCddKTtcbmV4cG9ydCBkZWZhdWx0IGlucHV0QmFzZUNsYXNzZXM7IiwiLy8gU3VwcG9ydHMgZGV0ZXJtaW5hdGlvbiBvZiBpc0NvbnRyb2xsZWQoKS5cbi8vIENvbnRyb2xsZWQgaW5wdXQgYWNjZXB0cyBpdHMgY3VycmVudCB2YWx1ZSBhcyBhIHByb3AuXG4vL1xuLy8gQHNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL2Zvcm1zLmh0bWwjY29udHJvbGxlZC1jb21wb25lbnRzXG4vLyBAcGFyYW0gdmFsdWVcbi8vIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHN0cmluZyAoaW5jbHVkaW5nICcnKSBvciBudW1iZXIgKGluY2x1ZGluZyB6ZXJvKVxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICEoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKTtcbn1cblxuLy8gRGV0ZXJtaW5lIGlmIGZpZWxkIGlzIGVtcHR5IG9yIGZpbGxlZC5cbi8vIFJlc3BvbnNlIGRldGVybWluZXMgaWYgbGFiZWwgaXMgcHJlc2VudGVkIGFib3ZlIGZpZWxkIG9yIGFzIHBsYWNlaG9sZGVyLlxuLy9cbi8vIEBwYXJhbSBvYmpcbi8vIEBwYXJhbSBTU1Jcbi8vIEByZXR1cm5zIHtib29sZWFufSBGYWxzZSB3aGVuIG5vdCBwcmVzZW50IG9yIGVtcHR5IHN0cmluZy5cbi8vICAgICAgICAgICAgICAgICAgICBUcnVlIHdoZW4gYW55IG51bWJlciBvciBzdHJpbmcgd2l0aCBsZW5ndGguXG5leHBvcnQgZnVuY3Rpb24gaXNGaWxsZWQob2JqLCBTU1IgPSBmYWxzZSkge1xuICByZXR1cm4gb2JqICYmIChoYXNWYWx1ZShvYmoudmFsdWUpICYmIG9iai52YWx1ZSAhPT0gJycgfHwgU1NSICYmIGhhc1ZhbHVlKG9iai5kZWZhdWx0VmFsdWUpICYmIG9iai5kZWZhdWx0VmFsdWUgIT09ICcnKTtcbn1cblxuLy8gRGV0ZXJtaW5lIGlmIGFuIElucHV0IGlzIGFkb3JuZWQgb24gc3RhcnQuXG4vLyBJdCdzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxlZnQgd2l0aCBMVFIuXG4vL1xuLy8gQHBhcmFtIG9ialxuLy8gQHJldHVybnMge2Jvb2xlYW59IEZhbHNlIHdoZW4gbm8gYWRvcm5tZW50cy5cbi8vICAgICAgICAgICAgICAgICAgICBUcnVlIHdoZW4gYWRvcm5lZCBhdCB0aGUgc3RhcnQuXG5leHBvcnQgZnVuY3Rpb24gaXNBZG9ybmVkU3RhcnQob2JqKSB7XG4gIHJldHVybiBvYmouc3RhcnRBZG9ybm1lbnQ7XG59IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtTGFiZWxVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRm9ybUxhYmVsJywgc2xvdCk7XG59XG5jb25zdCBmb3JtTGFiZWxDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRm9ybUxhYmVsJywgWydyb290JywgJ2NvbG9yU2Vjb25kYXJ5JywgJ2ZvY3VzZWQnLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnZmlsbGVkJywgJ3JlcXVpcmVkJywgJ2FzdGVyaXNrJ10pO1xuZXhwb3J0IGRlZmF1bHQgZm9ybUxhYmVsQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcImZpbGxlZFwiLCBcImZvY3VzZWRcIiwgXCJyZXF1aXJlZFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBmb3JtQ29udHJvbFN0YXRlIGZyb20gJy4uL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCBmb3JtTGFiZWxDbGFzc2VzLCB7IGdldEZvcm1MYWJlbFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9mb3JtTGFiZWxDbGFzc2VzJztcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGNvbG9yLFxuICAgIGZvY3VzZWQsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZmlsbGVkLFxuICAgIHJlcXVpcmVkXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBgY29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWAsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGVycm9yICYmICdlcnJvcicsIGZpbGxlZCAmJiAnZmlsbGVkJywgZm9jdXNlZCAmJiAnZm9jdXNlZCcsIHJlcXVpcmVkICYmICdyZXF1aXJlZCddLFxuICAgIGFzdGVyaXNrOiBbJ2FzdGVyaXNrJywgZXJyb3IgJiYgJ2Vycm9yJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRGb3JtTGFiZWxVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuZXhwb3J0IGNvbnN0IEZvcm1MYWJlbFJvb3QgPSBzdHlsZWQoJ2xhYmVsJywge1xuICBuYW1lOiAnTXVpRm9ybUxhYmVsJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHtcbiAgICBvd25lclN0YXRlXG4gIH0sIHN0eWxlcykgPT4ge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuY29sb3IgPT09ICdzZWNvbmRhcnknICYmIHN0eWxlcy5jb2xvclNlY29uZGFyeSwgb3duZXJTdGF0ZS5maWxsZWQgJiYgc3R5bGVzLmZpbGxlZCk7XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnNlY29uZGFyeVxufSwgdGhlbWUudHlwb2dyYXBoeS5ib2R5MSwge1xuICBsaW5lSGVpZ2h0OiAnMS40Mzc1ZW0nLFxuICBwYWRkaW5nOiAwLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgW2AmLiR7Zm9ybUxhYmVsQ2xhc3Nlcy5mb2N1c2VkfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgfSxcbiAgW2AmLiR7Zm9ybUxhYmVsQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LmRpc2FibGVkXG4gIH0sXG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZXJyb3J9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICB9XG59KSk7XG5jb25zdCBBc3Rlcmlza0NvbXBvbmVudCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aUZvcm1MYWJlbCcsXG4gIHNsb3Q6ICdBc3RlcmlzaycsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLmFzdGVyaXNrXG59KSgoe1xuICB0aGVtZVxufSkgPT4gKHtcbiAgW2AmLiR7Zm9ybUxhYmVsQ2xhc3Nlcy5lcnJvcn1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gIH1cbn0pKTtcbmNvbnN0IEZvcm1MYWJlbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvcm1MYWJlbChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGb3JtTGFiZWwnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCA9ICdsYWJlbCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsnY29sb3InLCAncmVxdWlyZWQnLCAnZm9jdXNlZCcsICdkaXNhYmxlZCcsICdlcnJvcicsICdmaWxsZWQnXVxuICB9KTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yOiBmY3MuY29sb3IgfHwgJ3ByaW1hcnknLFxuICAgIGNvbXBvbmVudCxcbiAgICBkaXNhYmxlZDogZmNzLmRpc2FibGVkLFxuICAgIGVycm9yOiBmY3MuZXJyb3IsXG4gICAgZmlsbGVkOiBmY3MuZmlsbGVkLFxuICAgIGZvY3VzZWQ6IGZjcy5mb2N1c2VkLFxuICAgIHJlcXVpcmVkOiBmY3MucmVxdWlyZWRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhGb3JtTGFiZWxSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IGNvbXBvbmVudCxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogW2NoaWxkcmVuLCBmY3MucmVxdWlyZWQgJiYgLyojX19QVVJFX18qL19qc3hzKEFzdGVyaXNrQ29tcG9uZW50LCB7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmFzdGVyaXNrLFxuICAgICAgY2hpbGRyZW46IFtcIlxcdTIwMDlcIiwgJyonXVxuICAgIH0pXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZvcm1MYWJlbC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydlcnJvcicsICdpbmZvJywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBzaG91bGQgYmUgZGlzcGxheWVkIGluIGEgZGlzYWJsZWQgc3RhdGUuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBkaXNwbGF5ZWQgaW4gYW4gZXJyb3Igc3RhdGUuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBzaG91bGQgdXNlIGZpbGxlZCBjbGFzc2VzIGtleS5cbiAgICovXG4gIGZpbGxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBpbnB1dCBvZiB0aGlzIGxhYmVsIGlzIGZvY3VzZWQgKHVzZWQgYnkgYEZvcm1Hcm91cGAgY29tcG9uZW50cykuXG4gICAqL1xuICBmb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHdpbGwgaW5kaWNhdGUgdGhhdCB0aGUgYGlucHV0YCBpcyByZXF1aXJlZC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZvcm1MYWJlbDsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0TGFiZWxVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpSW5wdXRMYWJlbCcsIHNsb3QpO1xufVxuY29uc3QgaW5wdXRMYWJlbENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlJbnB1dExhYmVsJywgWydyb290JywgJ2ZvY3VzZWQnLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAncmVxdWlyZWQnLCAnYXN0ZXJpc2snLCAnZm9ybUNvbnRyb2wnLCAnc2l6ZVNtYWxsJywgJ3NocmluaycsICdhbmltYXRlZCcsICdzdGFuZGFyZCcsICdmaWxsZWQnLCAnb3V0bGluZWQnXSk7XG5leHBvcnQgZGVmYXVsdCBpbnB1dExhYmVsQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJkaXNhYmxlQW5pbWF0aW9uXCIsIFwibWFyZ2luXCIsIFwic2hyaW5rXCIsIFwidmFyaWFudFwiLCBcImNsYXNzTmFtZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBmb3JtQ29udHJvbFN0YXRlIGZyb20gJy4uL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBGb3JtTGFiZWwsIHsgZm9ybUxhYmVsQ2xhc3NlcyB9IGZyb20gJy4uL0Zvcm1MYWJlbCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBnZXRJbnB1dExhYmVsVXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuL2lucHV0TGFiZWxDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBmb3JtQ29udHJvbCxcbiAgICBzaXplLFxuICAgIHNocmluayxcbiAgICBkaXNhYmxlQW5pbWF0aW9uLFxuICAgIHZhcmlhbnQsXG4gICAgcmVxdWlyZWRcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGZvcm1Db250cm9sICYmICdmb3JtQ29udHJvbCcsICFkaXNhYmxlQW5pbWF0aW9uICYmICdhbmltYXRlZCcsIHNocmluayAmJiAnc2hyaW5rJywgc2l6ZSAmJiBzaXplICE9PSAnbm9ybWFsJyAmJiBgc2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gLCB2YXJpYW50XSxcbiAgICBhc3RlcmlzazogW3JlcXVpcmVkICYmICdhc3RlcmlzayddXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRJbnB1dExhYmVsVXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuY29uc3QgSW5wdXRMYWJlbFJvb3QgPSBzdHlsZWQoRm9ybUxhYmVsLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlJbnB1dExhYmVsJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbe1xuICAgICAgW2AmIC4ke2Zvcm1MYWJlbENsYXNzZXMuYXN0ZXJpc2t9YF06IHN0eWxlcy5hc3Rlcmlza1xuICAgIH0sIHN0eWxlcy5yb290LCBvd25lclN0YXRlLmZvcm1Db250cm9sICYmIHN0eWxlcy5mb3JtQ29udHJvbCwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHN0eWxlcy5zaXplU21hbGwsIG93bmVyU3RhdGUuc2hyaW5rICYmIHN0eWxlcy5zaHJpbmssICFvd25lclN0YXRlLmRpc2FibGVBbmltYXRpb24gJiYgc3R5bGVzLmFuaW1hdGVkLCBvd25lclN0YXRlLmZvY3VzZWQgJiYgc3R5bGVzLmZvY3VzZWQsIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgdHJhbnNmb3JtT3JpZ2luOiAndG9wIGxlZnQnLFxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gIG1heFdpZHRoOiAnMTAwJSdcbn0sIG93bmVyU3RhdGUuZm9ybUNvbnRyb2wgJiYge1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgbGVmdDogMCxcbiAgdG9wOiAwLFxuICAvLyBzbGlnaHQgYWx0ZXJhdGlvbiB0byBzcGVjIHNwYWNpbmcgdG8gbWF0Y2ggdmlzdWFsIHNwZWMgcmVzdWx0XG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgwLCAyMHB4KSBzY2FsZSgxKSdcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIC8vIENvbXBlbnNhdGlvbiBmb3IgdGhlIGBJbnB1dC5pbnB1dFNpemVTbWFsbGAgc3R5bGUuXG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgwLCAxN3B4KSBzY2FsZSgxKSdcbn0sIG93bmVyU3RhdGUuc2hyaW5rICYmIHtcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDAsIC0xLjVweCkgc2NhbGUoMC43NSknLFxuICB0cmFuc2Zvcm1PcmlnaW46ICd0b3AgbGVmdCcsXG4gIG1heFdpZHRoOiAnMTMzJSdcbn0sICFvd25lclN0YXRlLmRpc2FibGVBbmltYXRpb24gJiYge1xuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoWydjb2xvcicsICd0cmFuc2Zvcm0nLCAnbWF4LXdpZHRoJ10sIHtcbiAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlcixcbiAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gIH0pXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdmaWxsZWQnICYmIF9leHRlbmRzKHtcbiAgLy8gQ2hyb21lJ3MgYXV0b2ZpbGwgZmVhdHVyZSBnaXZlcyB0aGUgaW5wdXQgZmllbGQgYSB5ZWxsb3cgYmFja2dyb3VuZC5cbiAgLy8gU2luY2UgdGhlIGlucHV0IGZpZWxkIGlzIGJlaGluZCB0aGUgbGFiZWwgaW4gdGhlIEhUTUwgdHJlZSxcbiAgLy8gdGhlIGlucHV0IGZpZWxkIGlzIGRyYXduIGxhc3QgYW5kIGhpZGVzIHRoZSBsYWJlbCB3aXRoIGFuIG9wYXF1ZSBiYWNrZ3JvdW5kIGNvbG9yLlxuICAvLyB6SW5kZXg6IDEgd2lsbCByYWlzZSB0aGUgbGFiZWwgYWJvdmUgb3BhcXVlIGJhY2tncm91bmQtY29sb3JzIG9mIGlucHV0LlxuICB6SW5kZXg6IDEsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDEycHgsIDE2cHgpIHNjYWxlKDEpJyxcbiAgbWF4V2lkdGg6ICdjYWxjKDEwMCUgLSAyNHB4KSdcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxMnB4LCAxM3B4KSBzY2FsZSgxKSdcbn0sIG93bmVyU3RhdGUuc2hyaW5rICYmIF9leHRlbmRzKHtcbiAgdXNlclNlbGVjdDogJ25vbmUnLFxuICBwb2ludGVyRXZlbnRzOiAnYXV0bycsXG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxMnB4LCA3cHgpIHNjYWxlKDAuNzUpJyxcbiAgbWF4V2lkdGg6ICdjYWxjKDEzMyUgLSAyNHB4KSdcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxMnB4LCA0cHgpIHNjYWxlKDAuNzUpJ1xufSkpLCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYgX2V4dGVuZHMoe1xuICAvLyBzZWUgY29tbWVudCBhYm92ZSBvbiBmaWxsZWQuekluZGV4XG4gIHpJbmRleDogMSxcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTRweCwgMTZweCkgc2NhbGUoMSknLFxuICBtYXhXaWR0aDogJ2NhbGMoMTAwJSAtIDI0cHgpJ1xufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDE0cHgsIDlweCkgc2NhbGUoMSknXG59LCBvd25lclN0YXRlLnNocmluayAmJiB7XG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgcG9pbnRlckV2ZW50czogJ2F1dG8nLFxuICAvLyBUaGVvcmV0aWNhbGx5LCB3ZSBzaG91bGQgaGF2ZSAoOCs1KSoyLzAuNzUgPSAzNHB4XG4gIC8vIGJ1dCBpdCBmZWVscyBhIGJldHRlciB3aGVuIGl0IGJsZWVkcyBhIGJpdCBvbiB0aGUgbGVmdCwgc28gMzJweC5cbiAgbWF4V2lkdGg6ICdjYWxjKDEzMyUgLSAzMnB4KScsXG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxNHB4LCAtOXB4KSBzY2FsZSgwLjc1KSdcbn0pKSk7XG5jb25zdCBJbnB1dExhYmVsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gSW5wdXRMYWJlbChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIG5hbWU6ICdNdWlJbnB1dExhYmVsJyxcbiAgICBwcm9wczogaW5Qcm9wc1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgZGlzYWJsZUFuaW1hdGlvbiA9IGZhbHNlLFxuICAgICAgc2hyaW5rOiBzaHJpbmtQcm9wLFxuICAgICAgY2xhc3NOYW1lXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgbGV0IHNocmluayA9IHNocmlua1Byb3A7XG4gIGlmICh0eXBlb2Ygc2hyaW5rID09PSAndW5kZWZpbmVkJyAmJiBtdWlGb3JtQ29udHJvbCkge1xuICAgIHNocmluayA9IG11aUZvcm1Db250cm9sLmZpbGxlZCB8fCBtdWlGb3JtQ29udHJvbC5mb2N1c2VkIHx8IG11aUZvcm1Db250cm9sLmFkb3JuZWRTdGFydDtcbiAgfVxuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsnc2l6ZScsICd2YXJpYW50JywgJ3JlcXVpcmVkJywgJ2ZvY3VzZWQnXVxuICB9KTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRpc2FibGVBbmltYXRpb24sXG4gICAgZm9ybUNvbnRyb2w6IG11aUZvcm1Db250cm9sLFxuICAgIHNocmluayxcbiAgICBzaXplOiBmY3Muc2l6ZSxcbiAgICB2YXJpYW50OiBmY3MudmFyaWFudCxcbiAgICByZXF1aXJlZDogZmNzLnJlcXVpcmVkLFxuICAgIGZvY3VzZWQ6IGZjcy5mb2N1c2VkXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dExhYmVsUm9vdCwgX2V4dGVuZHMoe1xuICAgIFwiZGF0YS1zaHJpbmtcIjogc2hyaW5rLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWYsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXNcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBJbnB1dExhYmVsLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2Vycm9yJywgJ2luZm8nLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0cmFuc2l0aW9uIGFuaW1hdGlvbiBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVBbmltYXRpb246IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgZGlzcGxheWVkIGluIGFuIGVycm9yIHN0YXRlLlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBvZiB0aGlzIGxhYmVsIGlzIGZvY3VzZWQuXG4gICAqL1xuICBmb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnXSksXG4gIC8qKlxuICAgKiBpZiBgdHJ1ZWAsIHRoZSBsYWJlbCB3aWxsIGluZGljYXRlIHRoYXQgdGhlIGBpbnB1dGAgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBzaHJ1bmsuXG4gICAqL1xuICBzaHJpbms6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ25vcm1hbCdcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbm9ybWFsJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBJbnB1dExhYmVsOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IExpc3RDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgTGlzdENvbnRleHQuZGlzcGxheU5hbWUgPSAnTGlzdENvbnRleHQnO1xufVxuZXhwb3J0IGRlZmF1bHQgTGlzdENvbnRleHQ7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlMaXN0Jywgc2xvdCk7XG59XG5jb25zdCBsaXN0Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUxpc3QnLCBbJ3Jvb3QnLCAncGFkZGluZycsICdkZW5zZScsICdzdWJoZWFkZXInXSk7XG5leHBvcnQgZGVmYXVsdCBsaXN0Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImRlbnNlXCIsIFwiZGlzYWJsZVBhZGRpbmdcIiwgXCJzdWJoZWFkZXJcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IExpc3RDb250ZXh0IGZyb20gJy4vTGlzdENvbnRleHQnO1xuaW1wb3J0IHsgZ2V0TGlzdFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vbGlzdENsYXNzZXMnO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGRpc2FibGVQYWRkaW5nLFxuICAgIGRlbnNlLFxuICAgIHN1YmhlYWRlclxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgIWRpc2FibGVQYWRkaW5nICYmICdwYWRkaW5nJywgZGVuc2UgJiYgJ2RlbnNlJywgc3ViaGVhZGVyICYmICdzdWJoZWFkZXInXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldExpc3RVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IExpc3RSb290ID0gc3R5bGVkKCd1bCcsIHtcbiAgbmFtZTogJ011aUxpc3QnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgIW93bmVyU3RhdGUuZGlzYWJsZVBhZGRpbmcgJiYgc3R5bGVzLnBhZGRpbmcsIG93bmVyU3RhdGUuZGVuc2UgJiYgc3R5bGVzLmRlbnNlLCBvd25lclN0YXRlLnN1YmhlYWRlciAmJiBzdHlsZXMuc3ViaGVhZGVyXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBsaXN0U3R5bGU6ICdub25lJyxcbiAgbWFyZ2luOiAwLFxuICBwYWRkaW5nOiAwLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xufSwgIW93bmVyU3RhdGUuZGlzYWJsZVBhZGRpbmcgJiYge1xuICBwYWRkaW5nVG9wOiA4LFxuICBwYWRkaW5nQm90dG9tOiA4XG59LCBvd25lclN0YXRlLnN1YmhlYWRlciAmJiB7XG4gIHBhZGRpbmdUb3A6IDBcbn0pKTtcbmNvbnN0IExpc3QgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBMaXN0KGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUxpc3QnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCA9ICd1bCcsXG4gICAgICBkZW5zZSA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVBhZGRpbmcgPSBmYWxzZSxcbiAgICAgIHN1YmhlYWRlclxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xuICAgIGRlbnNlXG4gIH0pLCBbZGVuc2VdKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBkZW5zZSxcbiAgICBkaXNhYmxlUGFkZGluZ1xuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTGlzdENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29udGV4dCxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3hzKExpc3RSb290LCBfZXh0ZW5kcyh7XG4gICAgICBhczogY29tcG9uZW50LFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICAgIHJlZjogcmVmLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0sIG90aGVyLCB7XG4gICAgICBjaGlsZHJlbjogW3N1YmhlYWRlciwgY2hpbGRyZW5dXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBMaXN0LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGNvbXBhY3QgdmVydGljYWwgcGFkZGluZyBkZXNpZ25lZCBmb3Iga2V5Ym9hcmQgYW5kIG1vdXNlIGlucHV0IGlzIHVzZWQgZm9yXG4gICAqIHRoZSBsaXN0IGFuZCBsaXN0IGl0ZW1zLlxuICAgKiBUaGUgcHJvcCBpcyBhdmFpbGFibGUgdG8gZGVzY2VuZGFudCBjb21wb25lbnRzIGFzIHRoZSBgZGVuc2VgIGNvbnRleHQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZW5zZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHZlcnRpY2FsIHBhZGRpbmcgaXMgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVBhZGRpbmc6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIHN1YmhlYWRlciwgbm9ybWFsbHkgYExpc3RTdWJoZWFkZXJgLlxuICAgKi9cbiAgc3ViaGVhZGVyOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IExpc3Q7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWN0aW9uc1wiLCBcImF1dG9Gb2N1c1wiLCBcImF1dG9Gb2N1c0l0ZW1cIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVkSXRlbXNGb2N1c2FibGVcIiwgXCJkaXNhYmxlTGlzdFdyYXBcIiwgXCJvbktleURvd25cIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNGcmFnbWVudCB9IGZyb20gJ3JlYWN0LWlzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgb3duZXJEb2N1bWVudCBmcm9tICcuLi91dGlscy9vd25lckRvY3VtZW50JztcbmltcG9ydCBMaXN0IGZyb20gJy4uL0xpc3QnO1xuaW1wb3J0IGdldFNjcm9sbGJhclNpemUgZnJvbSAnLi4vdXRpbHMvZ2V0U2Nyb2xsYmFyU2l6ZSc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB1c2VFbmhhbmNlZEVmZmVjdCBmcm9tICcuLi91dGlscy91c2VFbmhhbmNlZEVmZmVjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gbmV4dEl0ZW0obGlzdCwgaXRlbSwgZGlzYWJsZUxpc3RXcmFwKSB7XG4gIGlmIChsaXN0ID09PSBpdGVtKSB7XG4gICAgcmV0dXJuIGxpc3QuZmlyc3RDaGlsZDtcbiAgfVxuICBpZiAoaXRlbSAmJiBpdGVtLm5leHRFbGVtZW50U2libGluZykge1xuICAgIHJldHVybiBpdGVtLm5leHRFbGVtZW50U2libGluZztcbiAgfVxuICByZXR1cm4gZGlzYWJsZUxpc3RXcmFwID8gbnVsbCA6IGxpc3QuZmlyc3RDaGlsZDtcbn1cbmZ1bmN0aW9uIHByZXZpb3VzSXRlbShsaXN0LCBpdGVtLCBkaXNhYmxlTGlzdFdyYXApIHtcbiAgaWYgKGxpc3QgPT09IGl0ZW0pIHtcbiAgICByZXR1cm4gZGlzYWJsZUxpc3RXcmFwID8gbGlzdC5maXJzdENoaWxkIDogbGlzdC5sYXN0Q2hpbGQ7XG4gIH1cbiAgaWYgKGl0ZW0gJiYgaXRlbS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB7XG4gICAgcmV0dXJuIGl0ZW0ucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgfVxuICByZXR1cm4gZGlzYWJsZUxpc3RXcmFwID8gbnVsbCA6IGxpc3QubGFzdENoaWxkO1xufVxuZnVuY3Rpb24gdGV4dENyaXRlcmlhTWF0Y2hlcyhuZXh0Rm9jdXMsIHRleHRDcml0ZXJpYSkge1xuICBpZiAodGV4dENyaXRlcmlhID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBsZXQgdGV4dCA9IG5leHRGb2N1cy5pbm5lclRleHQ7XG4gIGlmICh0ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBqc2RvbSBkb2Vzbid0IHN1cHBvcnQgaW5uZXJUZXh0XG4gICAgdGV4dCA9IG5leHRGb2N1cy50ZXh0Q29udGVudDtcbiAgfVxuICB0ZXh0ID0gdGV4dC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKHRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0ZXh0Q3JpdGVyaWEucmVwZWF0aW5nKSB7XG4gICAgcmV0dXJuIHRleHRbMF0gPT09IHRleHRDcml0ZXJpYS5rZXlzWzBdO1xuICB9XG4gIHJldHVybiB0ZXh0LmluZGV4T2YodGV4dENyaXRlcmlhLmtleXMuam9pbignJykpID09PSAwO1xufVxuZnVuY3Rpb24gbW92ZUZvY3VzKGxpc3QsIGN1cnJlbnRGb2N1cywgZGlzYWJsZUxpc3RXcmFwLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCB0cmF2ZXJzYWxGdW5jdGlvbiwgdGV4dENyaXRlcmlhKSB7XG4gIGxldCB3cmFwcGVkT25jZSA9IGZhbHNlO1xuICBsZXQgbmV4dEZvY3VzID0gdHJhdmVyc2FsRnVuY3Rpb24obGlzdCwgY3VycmVudEZvY3VzLCBjdXJyZW50Rm9jdXMgPyBkaXNhYmxlTGlzdFdyYXAgOiBmYWxzZSk7XG4gIHdoaWxlIChuZXh0Rm9jdXMpIHtcbiAgICAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3AuXG4gICAgaWYgKG5leHRGb2N1cyA9PT0gbGlzdC5maXJzdENoaWxkKSB7XG4gICAgICBpZiAod3JhcHBlZE9uY2UpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgd3JhcHBlZE9uY2UgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIFNhbWUgbG9naWMgYXMgdXNlQXV0b2NvbXBsZXRlLmpzXG4gICAgY29uc3QgbmV4dEZvY3VzRGlzYWJsZWQgPSBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlID8gZmFsc2UgOiBuZXh0Rm9jdXMuZGlzYWJsZWQgfHwgbmV4dEZvY3VzLmdldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcpID09PSAndHJ1ZSc7XG4gICAgaWYgKCFuZXh0Rm9jdXMuaGFzQXR0cmlidXRlKCd0YWJpbmRleCcpIHx8ICF0ZXh0Q3JpdGVyaWFNYXRjaGVzKG5leHRGb2N1cywgdGV4dENyaXRlcmlhKSB8fCBuZXh0Rm9jdXNEaXNhYmxlZCkge1xuICAgICAgLy8gTW92ZSB0byB0aGUgbmV4dCBlbGVtZW50LlxuICAgICAgbmV4dEZvY3VzID0gdHJhdmVyc2FsRnVuY3Rpb24obGlzdCwgbmV4dEZvY3VzLCBkaXNhYmxlTGlzdFdyYXApO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0Rm9jdXMuZm9jdXMoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQSBwZXJtYW5lbnRseSBkaXNwbGF5ZWQgbWVudSBmb2xsb3dpbmcgaHR0cHM6Ly93d3cudzMub3JnL1dBSS9BUklBL2FwZy9wYXR0ZXJucy9tZW51LWJ1dHRvbi8uXG4gKiBJdCdzIGV4cG9zZWQgdG8gaGVscCBjdXN0b21pemF0aW9uIG9mIHRoZSBbYE1lbnVgXSgvbWF0ZXJpYWwtdWkvYXBpL21lbnUvKSBjb21wb25lbnQgaWYgeW91XG4gKiB1c2UgaXQgc2VwYXJhdGVseSB5b3UgbmVlZCB0byBtb3ZlIGZvY3VzIGludG8gdGhlIGNvbXBvbmVudCBtYW51YWxseS4gT25jZVxuICogdGhlIGZvY3VzIGlzIHBsYWNlZCBpbnNpZGUgdGhlIGNvbXBvbmVudCBpdCBpcyBmdWxseSBrZXlib2FyZCBhY2Nlc3NpYmxlLlxuICovXG5jb25zdCBNZW51TGlzdCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE1lbnVMaXN0KHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgICAgLy8gcHJpdmF0ZVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICAgIGFjdGlvbnMsXG4gICAgICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgICAgIGF1dG9Gb2N1c0l0ZW0gPSBmYWxzZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSA9IGZhbHNlLFxuICAgICAgZGlzYWJsZUxpc3RXcmFwID0gZmFsc2UsXG4gICAgICBvbktleURvd24sXG4gICAgICB2YXJpYW50ID0gJ3NlbGVjdGVkTWVudSdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgbGlzdFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgdGV4dENyaXRlcmlhUmVmID0gUmVhY3QudXNlUmVmKHtcbiAgICBrZXlzOiBbXSxcbiAgICByZXBlYXRpbmc6IHRydWUsXG4gICAgcHJldmlvdXNLZXlNYXRjaGVkOiB0cnVlLFxuICAgIGxhc3RUaW1lOiBudWxsXG4gIH0pO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGF1dG9Gb2N1cykge1xuICAgICAgbGlzdFJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICB9LCBbYXV0b0ZvY3VzXSk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUoYWN0aW9ucywgKCkgPT4gKHtcbiAgICBhZGp1c3RTdHlsZUZvclNjcm9sbGJhcjogKGNvbnRhaW5lckVsZW1lbnQsIHtcbiAgICAgIGRpcmVjdGlvblxuICAgIH0pID0+IHtcbiAgICAgIC8vIExldCdzIGlnbm9yZSB0aGF0IHBpZWNlIG9mIGxvZ2ljIGlmIHVzZXJzIGFyZSBhbHJlYWR5IG92ZXJyaWRpbmcgdGhlIHdpZHRoXG4gICAgICAvLyBvZiB0aGUgbWVudS5cbiAgICAgIGNvbnN0IG5vRXhwbGljaXRXaWR0aCA9ICFsaXN0UmVmLmN1cnJlbnQuc3R5bGUud2lkdGg7XG4gICAgICBpZiAoY29udGFpbmVyRWxlbWVudC5jbGllbnRIZWlnaHQgPCBsaXN0UmVmLmN1cnJlbnQuY2xpZW50SGVpZ2h0ICYmIG5vRXhwbGljaXRXaWR0aCkge1xuICAgICAgICBjb25zdCBzY3JvbGxiYXJTaXplID0gYCR7Z2V0U2Nyb2xsYmFyU2l6ZShvd25lckRvY3VtZW50KGNvbnRhaW5lckVsZW1lbnQpKX1weGA7XG4gICAgICAgIGxpc3RSZWYuY3VycmVudC5zdHlsZVtkaXJlY3Rpb24gPT09ICdydGwnID8gJ3BhZGRpbmdMZWZ0JyA6ICdwYWRkaW5nUmlnaHQnXSA9IHNjcm9sbGJhclNpemU7XG4gICAgICAgIGxpc3RSZWYuY3VycmVudC5zdHlsZS53aWR0aCA9IGBjYWxjKDEwMCUgKyAke3Njcm9sbGJhclNpemV9KWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFJlZi5jdXJyZW50O1xuICAgIH1cbiAgfSksIFtdKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBjb25zdCBsaXN0ID0gbGlzdFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7RWxlbWVudH0gLSB3aWxsIGFsd2F5cyBiZSBkZWZpbmVkIHNpbmNlIHdlIGFyZSBpbiBhIGtleWRvd24gaGFuZGxlclxuICAgICAqIGF0dGFjaGVkIHRvIGFuIGVsZW1lbnQuIEEga2V5ZG93biBldmVudCBpcyBlaXRoZXIgZGlzcGF0Y2hlZCB0byB0aGUgYWN0aXZlRWxlbWVudFxuICAgICAqIG9yIGRvY3VtZW50LmJvZHkgb3IgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LiBPbmx5IHRoZSBmaXJzdCBjYXNlIHdpbGxcbiAgICAgKiB0cmlnZ2VyIHRoaXMgc3BlY2lmaWMgaGFuZGxlci5cbiAgICAgKi9cbiAgICBjb25zdCBjdXJyZW50Rm9jdXMgPSBvd25lckRvY3VtZW50KGxpc3QpLmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIC8vIFByZXZlbnQgc2Nyb2xsIG9mIHRoZSBwYWdlXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUZvY3VzKGxpc3QsIGN1cnJlbnRGb2N1cywgZGlzYWJsZUxpc3RXcmFwLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCBuZXh0SXRlbSk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVGb2N1cyhsaXN0LCBjdXJyZW50Rm9jdXMsIGRpc2FibGVMaXN0V3JhcCwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgcHJldmlvdXNJdGVtKTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ0hvbWUnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUZvY3VzKGxpc3QsIG51bGwsIGRpc2FibGVMaXN0V3JhcCwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgbmV4dEl0ZW0pO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnRW5kJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVGb2N1cyhsaXN0LCBudWxsLCBkaXNhYmxlTGlzdFdyYXAsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIHByZXZpb3VzSXRlbSk7XG4gICAgfSBlbHNlIGlmIChrZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBjcml0ZXJpYSA9IHRleHRDcml0ZXJpYVJlZi5jdXJyZW50O1xuICAgICAgY29uc3QgbG93ZXJLZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGN1cnJUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICBpZiAoY3JpdGVyaWEua2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIFJlc2V0XG4gICAgICAgIGlmIChjdXJyVGltZSAtIGNyaXRlcmlhLmxhc3RUaW1lID4gNTAwKSB7XG4gICAgICAgICAgY3JpdGVyaWEua2V5cyA9IFtdO1xuICAgICAgICAgIGNyaXRlcmlhLnJlcGVhdGluZyA9IHRydWU7XG4gICAgICAgICAgY3JpdGVyaWEucHJldmlvdXNLZXlNYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjcml0ZXJpYS5yZXBlYXRpbmcgJiYgbG93ZXJLZXkgIT09IGNyaXRlcmlhLmtleXNbMF0pIHtcbiAgICAgICAgICBjcml0ZXJpYS5yZXBlYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY3JpdGVyaWEubGFzdFRpbWUgPSBjdXJyVGltZTtcbiAgICAgIGNyaXRlcmlhLmtleXMucHVzaChsb3dlcktleSk7XG4gICAgICBjb25zdCBrZWVwRm9jdXNPbkN1cnJlbnQgPSBjdXJyZW50Rm9jdXMgJiYgIWNyaXRlcmlhLnJlcGVhdGluZyAmJiB0ZXh0Q3JpdGVyaWFNYXRjaGVzKGN1cnJlbnRGb2N1cywgY3JpdGVyaWEpO1xuICAgICAgaWYgKGNyaXRlcmlhLnByZXZpb3VzS2V5TWF0Y2hlZCAmJiAoa2VlcEZvY3VzT25DdXJyZW50IHx8IG1vdmVGb2N1cyhsaXN0LCBjdXJyZW50Rm9jdXMsIGZhbHNlLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCBuZXh0SXRlbSwgY3JpdGVyaWEpKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3JpdGVyaWEucHJldmlvdXNLZXlNYXRjaGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvbktleURvd24pIHtcbiAgICAgIG9uS2V5RG93bihldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKGxpc3RSZWYsIHJlZik7XG5cbiAgLyoqXG4gICAqIHRoZSBpbmRleCBvZiB0aGUgaXRlbSBzaG91bGQgcmVjZWl2ZSBmb2N1c1xuICAgKiBpbiBhIGB2YXJpYW50PVwic2VsZWN0ZWRNZW51XCJgIGl0J3MgdGhlIGZpcnN0IGBzZWxlY3RlZGAgaXRlbVxuICAgKiBvdGhlcndpc2UgaXQncyB0aGUgdmVyeSBmaXJzdCBpdGVtLlxuICAgKi9cbiAgbGV0IGFjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAvLyBzaW5jZSB3ZSBpbmplY3QgZm9jdXMgcmVsYXRlZCBwcm9wcyBpbnRvIGNoaWxkcmVuIHdlIGhhdmUgdG8gZG8gYSBsb29rYWhlYWRcbiAgLy8gdG8gY2hlY2sgaWYgdGhlcmUgaXMgYSBgc2VsZWN0ZWRgIGl0ZW0uIFdlJ3JlIGxvb2tpbmcgZm9yIHRoZSBsYXN0IGBzZWxlY3RlZGBcbiAgLy8gaXRlbSBhbmQgdXNlIHRoZSBmaXJzdCB2YWxpZCBpdGVtIGFzIGEgZmFsbGJhY2tcbiAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgIGlmICghIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgIGlmIChhY3RpdmVJdGVtSW5kZXggPT09IGluZGV4KSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCArPSAxO1xuICAgICAgICBpZiAoYWN0aXZlSXRlbUluZGV4ID49IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgIC8vIHRoZXJlIGFyZSBubyBmb2N1c2FibGUgaXRlbXMgd2l0aGluIHRoZSBsaXN0LlxuICAgICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaXNGcmFnbWVudChjaGlsZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbXCJNVUk6IFRoZSBNZW51IGNvbXBvbmVudCBkb2Vzbid0IGFjY2VwdCBhIEZyYWdtZW50IGFzIGEgY2hpbGQuXCIsICdDb25zaWRlciBwcm92aWRpbmcgYW4gYXJyYXkgaW5zdGVhZC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghY2hpbGQucHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgIGlmICh2YXJpYW50ID09PSAnc2VsZWN0ZWRNZW51JyAmJiBjaGlsZC5wcm9wcy5zZWxlY3RlZCkge1xuICAgICAgICBhY3RpdmVJdGVtSW5kZXggPSBpbmRleDtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aXZlSXRlbUluZGV4ID09PSAtMSkge1xuICAgICAgICBhY3RpdmVJdGVtSW5kZXggPSBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFjdGl2ZUl0ZW1JbmRleCA9PT0gaW5kZXggJiYgKGNoaWxkLnByb3BzLmRpc2FibGVkIHx8IGNoaWxkLnByb3BzLm11aVNraXBMaXN0SGlnaGxpZ2h0IHx8IGNoaWxkLnR5cGUubXVpU2tpcExpc3RIaWdobGlnaHQpKSB7XG4gICAgICBhY3RpdmVJdGVtSW5kZXggKz0gMTtcbiAgICAgIGlmIChhY3RpdmVJdGVtSW5kZXggPj0gY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIC8vIHRoZXJlIGFyZSBubyBmb2N1c2FibGUgaXRlbXMgd2l0aGluIHRoZSBsaXN0LlxuICAgICAgICBhY3RpdmVJdGVtSW5kZXggPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBjb25zdCBpdGVtcyA9IFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCA9PT0gYWN0aXZlSXRlbUluZGV4KSB7XG4gICAgICBjb25zdCBuZXdDaGlsZFByb3BzID0ge307XG4gICAgICBpZiAoYXV0b0ZvY3VzSXRlbSkge1xuICAgICAgICBuZXdDaGlsZFByb3BzLmF1dG9Gb2N1cyA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoY2hpbGQucHJvcHMudGFiSW5kZXggPT09IHVuZGVmaW5lZCAmJiB2YXJpYW50ID09PSAnc2VsZWN0ZWRNZW51Jykge1xuICAgICAgICBuZXdDaGlsZFByb3BzLnRhYkluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCBuZXdDaGlsZFByb3BzKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KExpc3QsIF9leHRlbmRzKHtcbiAgICByb2xlOiBcIm1lbnVcIixcbiAgICByZWY6IGhhbmRsZVJlZixcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICBvbktleURvd246IGhhbmRsZUtleURvd24sXG4gICAgdGFiSW5kZXg6IGF1dG9Gb2N1cyA/IDAgOiAtMVxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBpdGVtc1xuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE1lbnVMaXN0LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2lsbCBmb2N1cyB0aGUgYFtyb2xlPVwibWVudVwiXWAgY29udGFpbmVyIGFuZCBtb3ZlIGludG8gdGFiIG9yZGVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2lsbCBmb2N1cyB0aGUgZmlyc3QgbWVudWl0ZW0gaWYgYHZhcmlhbnQ9XCJtZW51XCJgIG9yIHNlbGVjdGVkIGl0ZW1cbiAgICogaWYgYHZhcmlhbnQ9XCJzZWxlY3RlZE1lbnVcImAuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvRm9jdXNJdGVtOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE1lbnVMaXN0IGNvbnRlbnRzLCBub3JtYWxseSBgTWVudUl0ZW1gcy5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2lsbCBhbGxvdyBmb2N1cyBvbiBkaXNhYmxlZCBpdGVtcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkSXRlbXNGb2N1c2FibGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbWVudSBpdGVtcyB3aWxsIG5vdCB3cmFwIGZvY3VzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUxpc3RXcmFwOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuIFVzZSBgbWVudWAgdG8gcHJldmVudCBzZWxlY3RlZCBpdGVtcyBmcm9tIGltcGFjdGluZyB0aGUgaW5pdGlhbCBmb2N1c1xuICAgKiBhbmQgdGhlIHZlcnRpY2FsIGFsaWdubWVudCByZWxhdGl2ZSB0byB0aGUgYW5jaG9yIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0ICdzZWxlY3RlZE1lbnUnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydtZW51JywgJ3NlbGVjdGVkTWVudSddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IE1lbnVMaXN0OyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVudVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTWVudScsIHNsb3QpO1xufVxuY29uc3QgbWVudUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlNZW51JywgWydyb290JywgJ3BhcGVyJywgJ2xpc3QnXSk7XG5leHBvcnQgZGVmYXVsdCBtZW51Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJvbkVudGVyaW5nXCJdLFxuICBfZXhjbHVkZWQyID0gW1wiYXV0b0ZvY3VzXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlQXV0b0ZvY3VzSXRlbVwiLCBcIk1lbnVMaXN0UHJvcHNcIiwgXCJvbkNsb3NlXCIsIFwib3BlblwiLCBcIlBhcGVyUHJvcHNcIiwgXCJQb3BvdmVyQ2xhc3Nlc1wiLCBcInRyYW5zaXRpb25EdXJhdGlvblwiLCBcIlRyYW5zaXRpb25Qcm9wc1wiLCBcInZhcmlhbnRcIiwgXCJzbG90c1wiLCBcInNsb3RQcm9wc1wiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzRnJhZ21lbnQgfSBmcm9tICdyZWFjdC1pcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgSFRNTEVsZW1lbnRUeXBlIGZyb20gJ0BtdWkvdXRpbHMvSFRNTEVsZW1lbnRUeXBlJztcbmltcG9ydCB7IHVzZVJ0bCB9IGZyb20gJ0BtdWkvc3lzdGVtL1J0bFByb3ZpZGVyJztcbmltcG9ydCB1c2VTbG90UHJvcHMgZnJvbSAnQG11aS91dGlscy91c2VTbG90UHJvcHMnO1xuaW1wb3J0IE1lbnVMaXN0IGZyb20gJy4uL01lbnVMaXN0JztcbmltcG9ydCBQb3BvdmVyLCB7IFBvcG92ZXJQYXBlciB9IGZyb20gJy4uL1BvcG92ZXInO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCB7IGdldE1lbnVVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL21lbnVDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBSVExfT1JJR0lOID0ge1xuICB2ZXJ0aWNhbDogJ3RvcCcsXG4gIGhvcml6b250YWw6ICdyaWdodCdcbn07XG5jb25zdCBMVFJfT1JJR0lOID0ge1xuICB2ZXJ0aWNhbDogJ3RvcCcsXG4gIGhvcml6b250YWw6ICdsZWZ0J1xufTtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnXSxcbiAgICBwYXBlcjogWydwYXBlciddLFxuICAgIGxpc3Q6IFsnbGlzdCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TWVudVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgTWVudVJvb3QgPSBzdHlsZWQoUG9wb3Zlciwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpTWVudScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe30pO1xuZXhwb3J0IGNvbnN0IE1lbnVQYXBlciA9IHN0eWxlZChQb3BvdmVyUGFwZXIsIHtcbiAgbmFtZTogJ011aU1lbnUnLFxuICBzbG90OiAnUGFwZXInLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5wYXBlclxufSkoe1xuICAvLyBzcGVjWjogVGhlIG1heGltdW0gaGVpZ2h0IG9mIGEgc2ltcGxlIG1lbnUgc2hvdWxkIGJlIG9uZSBvciBtb3JlIHJvd3MgbGVzcyB0aGFuIHRoZSB2aWV3XG4gIC8vIGhlaWdodC4gVGhpcyBlbnN1cmVzIGEgdGFwcGFibGUgYXJlYSBvdXRzaWRlIG9mIHRoZSBzaW1wbGUgbWVudSB3aXRoIHdoaWNoIHRvIGRpc21pc3NcbiAgLy8gdGhlIG1lbnUuXG4gIG1heEhlaWdodDogJ2NhbGMoMTAwJSAtIDk2cHgpJyxcbiAgLy8gQWRkIGlPUyBtb21lbnR1bSBzY3JvbGxpbmcgZm9yIGlPUyA8IDEzLjBcbiAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCdcbn0pO1xuY29uc3QgTWVudU1lbnVMaXN0ID0gc3R5bGVkKE1lbnVMaXN0LCB7XG4gIG5hbWU6ICdNdWlNZW51JyxcbiAgc2xvdDogJ0xpc3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5saXN0XG59KSh7XG4gIC8vIFdlIGRpc2FibGUgdGhlIGZvY3VzIHJpbmcgZm9yIG1vdXNlLCB0b3VjaCBhbmQga2V5Ym9hcmQgdXNlcnMuXG4gIG91dGxpbmU6IDBcbn0pO1xuY29uc3QgTWVudSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE1lbnUoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfc2xvdHMkcGFwZXIsIF9zbG90UHJvcHMkcGFwZXI7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpTWVudSdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGF1dG9Gb2N1cyA9IHRydWUsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRpc2FibGVBdXRvRm9jdXNJdGVtID0gZmFsc2UsXG4gICAgICBNZW51TGlzdFByb3BzID0ge30sXG4gICAgICBvbkNsb3NlLFxuICAgICAgb3BlbixcbiAgICAgIFBhcGVyUHJvcHMgPSB7fSxcbiAgICAgIFBvcG92ZXJDbGFzc2VzLFxuICAgICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gJ2F1dG8nLFxuICAgICAgVHJhbnNpdGlvblByb3BzOiB7XG4gICAgICAgIG9uRW50ZXJpbmdcbiAgICAgIH0gPSB7fSxcbiAgICAgIHZhcmlhbnQgPSAnc2VsZWN0ZWRNZW51JyxcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICBzbG90UHJvcHMgPSB7fVxuICAgIH0gPSBwcm9wcyxcbiAgICBUcmFuc2l0aW9uUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcy5UcmFuc2l0aW9uUHJvcHMsIF9leGNsdWRlZCksXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkMik7XG4gIGNvbnN0IGlzUnRsID0gdXNlUnRsKCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBhdXRvRm9jdXMsXG4gICAgZGlzYWJsZUF1dG9Gb2N1c0l0ZW0sXG4gICAgTWVudUxpc3RQcm9wcyxcbiAgICBvbkVudGVyaW5nLFxuICAgIFBhcGVyUHJvcHMsXG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgIFRyYW5zaXRpb25Qcm9wcyxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IGF1dG9Gb2N1c0l0ZW0gPSBhdXRvRm9jdXMgJiYgIWRpc2FibGVBdXRvRm9jdXNJdGVtICYmIG9wZW47XG4gIGNvbnN0IG1lbnVMaXN0QWN0aW9uc1JlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaGFuZGxlRW50ZXJpbmcgPSAoZWxlbWVudCwgaXNBcHBlYXJpbmcpID0+IHtcbiAgICBpZiAobWVudUxpc3RBY3Rpb25zUmVmLmN1cnJlbnQpIHtcbiAgICAgIG1lbnVMaXN0QWN0aW9uc1JlZi5jdXJyZW50LmFkanVzdFN0eWxlRm9yU2Nyb2xsYmFyKGVsZW1lbnQsIHtcbiAgICAgICAgZGlyZWN0aW9uOiBpc1J0bCA/ICdydGwnIDogJ2x0cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAob25FbnRlcmluZykge1xuICAgICAgb25FbnRlcmluZyhlbGVtZW50LCBpc0FwcGVhcmluZyk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVMaXN0S2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICAgIG9uQ2xvc2UoZXZlbnQsICd0YWJLZXlEb3duJyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gc2hvdWxkIHJlY2VpdmUgZm9jdXNcbiAgICogaW4gYSBgdmFyaWFudD1cInNlbGVjdGVkTWVudVwiYCBpdCdzIHRoZSBmaXJzdCBgc2VsZWN0ZWRgIGl0ZW1cbiAgICogb3RoZXJ3aXNlIGl0J3MgdGhlIHZlcnkgZmlyc3QgaXRlbS5cbiAgICovXG4gIGxldCBhY3RpdmVJdGVtSW5kZXggPSAtMTtcbiAgLy8gc2luY2Ugd2UgaW5qZWN0IGZvY3VzIHJlbGF0ZWQgcHJvcHMgaW50byBjaGlsZHJlbiB3ZSBoYXZlIHRvIGRvIGEgbG9va2FoZWFkXG4gIC8vIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGEgYHNlbGVjdGVkYCBpdGVtLiBXZSdyZSBsb29raW5nIGZvciB0aGUgbGFzdCBgc2VsZWN0ZWRgXG4gIC8vIGl0ZW0gYW5kIHVzZSB0aGUgZmlyc3QgdmFsaWQgaXRlbSBhcyBhIGZhbGxiYWNrXG4gIFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgIGlmICghIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpc0ZyYWdtZW50KGNoaWxkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtcIk1VSTogVGhlIE1lbnUgY29tcG9uZW50IGRvZXNuJ3QgYWNjZXB0IGEgRnJhZ21lbnQgYXMgYSBjaGlsZC5cIiwgJ0NvbnNpZGVyIHByb3ZpZGluZyBhbiBhcnJheSBpbnN0ZWFkLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFjaGlsZC5wcm9wcy5kaXNhYmxlZCkge1xuICAgICAgaWYgKHZhcmlhbnQgPT09ICdzZWxlY3RlZE1lbnUnICYmIGNoaWxkLnByb3BzLnNlbGVjdGVkKSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IGluZGV4O1xuICAgICAgfSBlbHNlIGlmIChhY3RpdmVJdGVtSW5kZXggPT09IC0xKSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIGNvbnN0IFBhcGVyU2xvdCA9IChfc2xvdHMkcGFwZXIgPSBzbG90cy5wYXBlcikgIT0gbnVsbCA/IF9zbG90cyRwYXBlciA6IE1lbnVQYXBlcjtcbiAgY29uc3QgcGFwZXJFeHRlcm5hbFNsb3RQcm9wcyA9IChfc2xvdFByb3BzJHBhcGVyID0gc2xvdFByb3BzLnBhcGVyKSAhPSBudWxsID8gX3Nsb3RQcm9wcyRwYXBlciA6IFBhcGVyUHJvcHM7XG4gIGNvbnN0IHJvb3RTbG90UHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgIGVsZW1lbnRUeXBlOiBzbG90cy5yb290LFxuICAgIGV4dGVybmFsU2xvdFByb3BzOiBzbG90UHJvcHMucm9vdCxcbiAgICBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogW2NsYXNzZXMucm9vdCwgY2xhc3NOYW1lXVxuICB9KTtcbiAgY29uc3QgcGFwZXJTbG90UHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgIGVsZW1lbnRUeXBlOiBQYXBlclNsb3QsXG4gICAgZXh0ZXJuYWxTbG90UHJvcHM6IHBhcGVyRXh0ZXJuYWxTbG90UHJvcHMsXG4gICAgb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMucGFwZXJcbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChNZW51Um9vdCwgX2V4dGVuZHMoe1xuICAgIG9uQ2xvc2U6IG9uQ2xvc2UsXG4gICAgYW5jaG9yT3JpZ2luOiB7XG4gICAgICB2ZXJ0aWNhbDogJ2JvdHRvbScsXG4gICAgICBob3Jpem9udGFsOiBpc1J0bCA/ICdyaWdodCcgOiAnbGVmdCdcbiAgICB9LFxuICAgIHRyYW5zZm9ybU9yaWdpbjogaXNSdGwgPyBSVExfT1JJR0lOIDogTFRSX09SSUdJTixcbiAgICBzbG90czoge1xuICAgICAgcGFwZXI6IFBhcGVyU2xvdCxcbiAgICAgIHJvb3Q6IHNsb3RzLnJvb3RcbiAgICB9LFxuICAgIHNsb3RQcm9wczoge1xuICAgICAgcm9vdDogcm9vdFNsb3RQcm9wcyxcbiAgICAgIHBhcGVyOiBwYXBlclNsb3RQcm9wc1xuICAgIH0sXG4gICAgb3Blbjogb3BlbixcbiAgICByZWY6IHJlZixcbiAgICB0cmFuc2l0aW9uRHVyYXRpb246IHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICBUcmFuc2l0aW9uUHJvcHM6IF9leHRlbmRzKHtcbiAgICAgIG9uRW50ZXJpbmc6IGhhbmRsZUVudGVyaW5nXG4gICAgfSwgVHJhbnNpdGlvblByb3BzKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gIH0sIG90aGVyLCB7XG4gICAgY2xhc3NlczogUG9wb3ZlckNsYXNzZXMsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KE1lbnVNZW51TGlzdCwgX2V4dGVuZHMoe1xuICAgICAgb25LZXlEb3duOiBoYW5kbGVMaXN0S2V5RG93bixcbiAgICAgIGFjdGlvbnM6IG1lbnVMaXN0QWN0aW9uc1JlZixcbiAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzICYmIChhY3RpdmVJdGVtSW5kZXggPT09IC0xIHx8IGRpc2FibGVBdXRvRm9jdXNJdGVtKSxcbiAgICAgIGF1dG9Gb2N1c0l0ZW06IGF1dG9Gb2N1c0l0ZW0sXG4gICAgICB2YXJpYW50OiB2YXJpYW50XG4gICAgfSwgTWVudUxpc3RQcm9wcywge1xuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMubGlzdCwgTWVudUxpc3RQcm9wcy5jbGFzc05hbWUpLFxuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTWVudS5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBBbiBIVE1MIGVsZW1lbnQsIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9uZS5cbiAgICogSXQncyB1c2VkIHRvIHNldCB0aGUgcG9zaXRpb24gb2YgdGhlIG1lbnUuXG4gICAqL1xuICBhbmNob3JFbDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtIVE1MRWxlbWVudFR5cGUsIFByb3BUeXBlcy5mdW5jXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAgKERlZmF1bHQpIHdpbGwgZm9jdXMgdGhlIGBbcm9sZT1cIm1lbnVcIl1gIGlmIG5vIGZvY3VzYWJsZSBjaGlsZCBpcyBmb3VuZC4gRGlzYWJsZWRcbiAgICogY2hpbGRyZW4gYXJlIG5vdCBmb2N1c2FibGUuIElmIHlvdSBzZXQgdGhpcyBwcm9wIHRvIGBmYWxzZWAgZm9jdXMgd2lsbCBiZSBwbGFjZWRcbiAgICogb24gdGhlIHBhcmVudCBtb2RhbCBjb250YWluZXIuIFRoaXMgaGFzIHNldmVyZSBhY2Nlc3NpYmlsaXR5IGltcGxpY2F0aW9uc1xuICAgKiBhbmQgc2hvdWxkIG9ubHkgYmUgY29uc2lkZXJlZCBpZiB5b3UgbWFuYWdlIGZvY3VzIG90aGVyd2lzZS5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE1lbnUgY29udGVudHMsIG5vcm1hbGx5IGBNZW51SXRlbWBzLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFdoZW4gb3BlbmluZyB0aGUgbWVudSB3aWxsIG5vdCBmb2N1cyB0aGUgYWN0aXZlIGl0ZW0gYnV0IHRoZSBgW3JvbGU9XCJtZW51XCJdYFxuICAgKiB1bmxlc3MgYGF1dG9Gb2N1c2AgaXMgYWxzbyBzZXQgdG8gYGZhbHNlYC4gTm90IHVzaW5nIHRoZSBkZWZhdWx0IG1lYW5zIG5vdFxuICAgKiBmb2xsb3dpbmcgV0FJLUFSSUEgYXV0aG9yaW5nIHByYWN0aWNlcy4gUGxlYXNlIGJlIGNvbnNpZGVyYXRlIGFib3V0IHBvc3NpYmxlXG4gICAqIGFjY2Vzc2liaWxpdHkgaW1wbGljYXRpb25zLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUF1dG9Gb2N1c0l0ZW06IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BNZW51TGlzdGBdKC9tYXRlcmlhbC11aS9hcGkvbWVudS1saXN0LykgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIE1lbnVMaXN0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgY2xvc2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gQ2FuIGJlOiBgXCJlc2NhcGVLZXlEb3duXCJgLCBgXCJiYWNrZHJvcENsaWNrXCJgLCBgXCJ0YWJLZXlEb3duXCJgLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgUGFwZXJQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIGBjbGFzc2VzYCBwcm9wIGFwcGxpZWQgdG8gdGhlIFtgUG9wb3ZlcmBdKC9tYXRlcmlhbC11aS9hcGkvcG9wb3Zlci8pIGVsZW1lbnQuXG4gICAqL1xuICBQb3BvdmVyQ2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHBhcGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcGFwZXI6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgbGVuZ3RoIG9mIHRoZSB0cmFuc2l0aW9uIGluIGBtc2AsIG9yICdhdXRvJ1xuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIHRyYW5zaXRpb25EdXJhdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcHBlYXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW50ZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZXhpdDogUHJvcFR5cGVzLm51bWJlclxuICB9KV0pLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgdHJhbnNpdGlvbiBlbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgZWxlbWVudCBpcyBiYXNlZCBvbiB0aGlzIFtgVHJhbnNpdGlvbmBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbi8pIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIFRyYW5zaXRpb25Qcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS4gVXNlIGBtZW51YCB0byBwcmV2ZW50IHNlbGVjdGVkIGl0ZW1zIGZyb20gaW1wYWN0aW5nIHRoZSBpbml0aWFsIGZvY3VzLlxuICAgKiBAZGVmYXVsdCAnc2VsZWN0ZWRNZW51J1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnbWVudScsICdzZWxlY3RlZE1lbnUnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBNZW51OyIsImltcG9ydCB7IHVuc3RhYmxlX293bmVyV2luZG93IGFzIG93bmVyV2luZG93LCB1bnN0YWJsZV9vd25lckRvY3VtZW50IGFzIG93bmVyRG9jdW1lbnQsIHVuc3RhYmxlX2dldFNjcm9sbGJhclNpemUgYXMgZ2V0U2Nyb2xsYmFyU2l6ZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuLy8gSXMgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIgZGlzcGxheWVkP1xuZnVuY3Rpb24gaXNPdmVyZmxvd2luZyhjb250YWluZXIpIHtcbiAgY29uc3QgZG9jID0gb3duZXJEb2N1bWVudChjb250YWluZXIpO1xuICBpZiAoZG9jLmJvZHkgPT09IGNvbnRhaW5lcikge1xuICAgIHJldHVybiBvd25lcldpbmRvdyhjb250YWluZXIpLmlubmVyV2lkdGggPiBkb2MuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICB9XG4gIHJldHVybiBjb250YWluZXIuc2Nyb2xsSGVpZ2h0ID4gY29udGFpbmVyLmNsaWVudEhlaWdodDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhcmlhSGlkZGVuKGVsZW1lbnQsIHNob3cpIHtcbiAgaWYgKHNob3cpIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICB9IGVsc2Uge1xuICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xuICB9XG59XG5mdW5jdGlvbiBnZXRQYWRkaW5nUmlnaHQoZWxlbWVudCkge1xuICByZXR1cm4gcGFyc2VJbnQob3duZXJXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wYWRkaW5nUmlnaHQsIDEwKSB8fCAwO1xufVxuZnVuY3Rpb24gaXNBcmlhSGlkZGVuRm9yYmlkZGVuT25FbGVtZW50KGVsZW1lbnQpIHtcbiAgLy8gVGhlIGZvcmJpZGRlbiBIVE1MIHRhZ3MgYXJlIHRoZSBvbmVzIGZyb20gQVJJQSBzcGVjaWZpY2F0aW9uIHRoYXRcbiAgLy8gY2FuIGJlIGNoaWxkcmVuIG9mIGJvZHkgYW5kIGNhbid0IGhhdmUgYXJpYS1oaWRkZW4gYXR0cmlidXRlLlxuICAvLyBjZi4gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWwtYXJpYS8jZG9jY29uZm9ybWFuY2VcbiAgY29uc3QgZm9yYmlkZGVuVGFnTmFtZXMgPSBbJ1RFTVBMQVRFJywgJ1NDUklQVCcsICdTVFlMRScsICdMSU5LJywgJ01BUCcsICdNRVRBJywgJ05PU0NSSVBUJywgJ1BJQ1RVUkUnLCAnQ09MJywgJ0NPTEdST1VQJywgJ1BBUkFNJywgJ1NMT1QnLCAnU09VUkNFJywgJ1RSQUNLJ107XG4gIGNvbnN0IGlzRm9yYmlkZGVuVGFnTmFtZSA9IGZvcmJpZGRlblRhZ05hbWVzLmluZGV4T2YoZWxlbWVudC50YWdOYW1lKSAhPT0gLTE7XG4gIGNvbnN0IGlzSW5wdXRIaWRkZW4gPSBlbGVtZW50LnRhZ05hbWUgPT09ICdJTlBVVCcgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSA9PT0gJ2hpZGRlbic7XG4gIHJldHVybiBpc0ZvcmJpZGRlblRhZ05hbWUgfHwgaXNJbnB1dEhpZGRlbjtcbn1cbmZ1bmN0aW9uIGFyaWFIaWRkZW5TaWJsaW5ncyhjb250YWluZXIsIG1vdW50RWxlbWVudCwgY3VycmVudEVsZW1lbnQsIGVsZW1lbnRzVG9FeGNsdWRlLCBzaG93KSB7XG4gIGNvbnN0IGJsYWNrbGlzdCA9IFttb3VudEVsZW1lbnQsIGN1cnJlbnRFbGVtZW50LCAuLi5lbGVtZW50c1RvRXhjbHVkZV07XG4gIFtdLmZvckVhY2guY2FsbChjb250YWluZXIuY2hpbGRyZW4sIGVsZW1lbnQgPT4ge1xuICAgIGNvbnN0IGlzTm90RXhjbHVkZWRFbGVtZW50ID0gYmxhY2tsaXN0LmluZGV4T2YoZWxlbWVudCkgPT09IC0xO1xuICAgIGNvbnN0IGlzTm90Rm9yYmlkZGVuRWxlbWVudCA9ICFpc0FyaWFIaWRkZW5Gb3JiaWRkZW5PbkVsZW1lbnQoZWxlbWVudCk7XG4gICAgaWYgKGlzTm90RXhjbHVkZWRFbGVtZW50ICYmIGlzTm90Rm9yYmlkZGVuRWxlbWVudCkge1xuICAgICAgYXJpYUhpZGRlbihlbGVtZW50LCBzaG93KTtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gZmluZEluZGV4T2YoaXRlbXMsIGNhbGxiYWNrKSB7XG4gIGxldCBpZHggPSAtMTtcbiAgaXRlbXMuc29tZSgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBpZiAoY2FsbGJhY2soaXRlbSkpIHtcbiAgICAgIGlkeCA9IGluZGV4O1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG4gIHJldHVybiBpZHg7XG59XG5mdW5jdGlvbiBoYW5kbGVDb250YWluZXIoY29udGFpbmVySW5mbywgcHJvcHMpIHtcbiAgY29uc3QgcmVzdG9yZVN0eWxlID0gW107XG4gIGNvbnN0IGNvbnRhaW5lciA9IGNvbnRhaW5lckluZm8uY29udGFpbmVyO1xuICBpZiAoIXByb3BzLmRpc2FibGVTY3JvbGxMb2NrKSB7XG4gICAgaWYgKGlzT3ZlcmZsb3dpbmcoY29udGFpbmVyKSkge1xuICAgICAgLy8gQ29tcHV0ZSB0aGUgc2l6ZSBiZWZvcmUgYXBwbHlpbmcgb3ZlcmZsb3cgaGlkZGVuIHRvIGF2b2lkIGFueSBzY3JvbGwganVtcHMuXG4gICAgICBjb25zdCBzY3JvbGxiYXJTaXplID0gZ2V0U2Nyb2xsYmFyU2l6ZShvd25lckRvY3VtZW50KGNvbnRhaW5lcikpO1xuICAgICAgcmVzdG9yZVN0eWxlLnB1c2goe1xuICAgICAgICB2YWx1ZTogY29udGFpbmVyLnN0eWxlLnBhZGRpbmdSaWdodCxcbiAgICAgICAgcHJvcGVydHk6ICdwYWRkaW5nLXJpZ2h0JyxcbiAgICAgICAgZWw6IGNvbnRhaW5lclxuICAgICAgfSk7XG4gICAgICAvLyBVc2UgY29tcHV0ZWQgc3R5bGUsIGhlcmUgdG8gZ2V0IHRoZSByZWFsIHBhZGRpbmcgdG8gYWRkIG91ciBzY3JvbGxiYXIgd2lkdGguXG4gICAgICBjb250YWluZXIuc3R5bGUucGFkZGluZ1JpZ2h0ID0gYCR7Z2V0UGFkZGluZ1JpZ2h0KGNvbnRhaW5lcikgKyBzY3JvbGxiYXJTaXplfXB4YDtcblxuICAgICAgLy8gLm11aS1maXhlZCBpcyBhIGdsb2JhbCBoZWxwZXIuXG4gICAgICBjb25zdCBmaXhlZEVsZW1lbnRzID0gb3duZXJEb2N1bWVudChjb250YWluZXIpLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tdWktZml4ZWQnKTtcbiAgICAgIFtdLmZvckVhY2guY2FsbChmaXhlZEVsZW1lbnRzLCBlbGVtZW50ID0+IHtcbiAgICAgICAgcmVzdG9yZVN0eWxlLnB1c2goe1xuICAgICAgICAgIHZhbHVlOiBlbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCxcbiAgICAgICAgICBwcm9wZXJ0eTogJ3BhZGRpbmctcmlnaHQnLFxuICAgICAgICAgIGVsOiBlbGVtZW50XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9IGAke2dldFBhZGRpbmdSaWdodChlbGVtZW50KSArIHNjcm9sbGJhclNpemV9cHhgO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGxldCBzY3JvbGxDb250YWluZXI7XG4gICAgaWYgKGNvbnRhaW5lci5wYXJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgc2Nyb2xsQ29udGFpbmVyID0gb3duZXJEb2N1bWVudChjb250YWluZXIpLmJvZHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN1cHBvcnQgaHRtbCBvdmVyZmxvdy15OiBhdXRvIGZvciBzY3JvbGwgc3RhYmlsaXR5IGJldHdlZW4gcGFnZXNcbiAgICAgIC8vIGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvY3NzL2ZvcmNlLXZlcnRpY2FsLXNjcm9sbGJhci9cbiAgICAgIGNvbnN0IHBhcmVudCA9IGNvbnRhaW5lci5wYXJlbnRFbGVtZW50O1xuICAgICAgY29uc3QgY29udGFpbmVyV2luZG93ID0gb3duZXJXaW5kb3coY29udGFpbmVyKTtcbiAgICAgIHNjcm9sbENvbnRhaW5lciA9IChwYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBhcmVudC5ub2RlTmFtZSkgPT09ICdIVE1MJyAmJiBjb250YWluZXJXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnQpLm92ZXJmbG93WSA9PT0gJ3Njcm9sbCcgPyBwYXJlbnQgOiBjb250YWluZXI7XG4gICAgfVxuXG4gICAgLy8gQmxvY2sgdGhlIHNjcm9sbCBldmVuIGlmIG5vIHNjcm9sbGJhciBpcyB2aXNpYmxlIHRvIGFjY291bnQgZm9yIG1vYmlsZSBrZXlib2FyZFxuICAgIC8vIHNjcmVlbnNpemUgc2hyaW5rLlxuICAgIHJlc3RvcmVTdHlsZS5wdXNoKHtcbiAgICAgIHZhbHVlOiBzY3JvbGxDb250YWluZXIuc3R5bGUub3ZlcmZsb3csXG4gICAgICBwcm9wZXJ0eTogJ292ZXJmbG93JyxcbiAgICAgIGVsOiBzY3JvbGxDb250YWluZXJcbiAgICB9LCB7XG4gICAgICB2YWx1ZTogc2Nyb2xsQ29udGFpbmVyLnN0eWxlLm92ZXJmbG93WCxcbiAgICAgIHByb3BlcnR5OiAnb3ZlcmZsb3cteCcsXG4gICAgICBlbDogc2Nyb2xsQ29udGFpbmVyXG4gICAgfSwge1xuICAgICAgdmFsdWU6IHNjcm9sbENvbnRhaW5lci5zdHlsZS5vdmVyZmxvd1ksXG4gICAgICBwcm9wZXJ0eTogJ292ZXJmbG93LXknLFxuICAgICAgZWw6IHNjcm9sbENvbnRhaW5lclxuICAgIH0pO1xuICAgIHNjcm9sbENvbnRhaW5lci5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICB9XG4gIGNvbnN0IHJlc3RvcmUgPSAoKSA9PiB7XG4gICAgcmVzdG9yZVN0eWxlLmZvckVhY2goKHtcbiAgICAgIHZhbHVlLFxuICAgICAgZWwsXG4gICAgICBwcm9wZXJ0eVxuICAgIH0pID0+IHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWwuc3R5bGUucmVtb3ZlUHJvcGVydHkocHJvcGVydHkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gcmVzdG9yZTtcbn1cbmZ1bmN0aW9uIGdldEhpZGRlblNpYmxpbmdzKGNvbnRhaW5lcikge1xuICBjb25zdCBoaWRkZW5TaWJsaW5ncyA9IFtdO1xuICBbXS5mb3JFYWNoLmNhbGwoY29udGFpbmVyLmNoaWxkcmVuLCBlbGVtZW50ID0+IHtcbiAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJykgPT09ICd0cnVlJykge1xuICAgICAgaGlkZGVuU2libGluZ3MucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaGlkZGVuU2libGluZ3M7XG59XG4vKipcbiAqIEBpZ25vcmUgLSBkbyBub3QgZG9jdW1lbnQuXG4gKlxuICogUHJvcGVyIHN0YXRlIG1hbmFnZW1lbnQgZm9yIGNvbnRhaW5lcnMgYW5kIHRoZSBtb2RhbHMgaW4gdGhvc2UgY29udGFpbmVycy5cbiAqIFNpbXBsaWZpZWQsIGJ1dCBpbnNwaXJlZCBieSByZWFjdC1vdmVybGF5J3MgTW9kYWxNYW5hZ2VyIGNsYXNzLlxuICogVXNlZCBieSB0aGUgTW9kYWwgdG8gZW5zdXJlIHByb3BlciBzdHlsaW5nIG9mIGNvbnRhaW5lcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBNb2RhbE1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbnRhaW5lcnMgPSB2b2lkIDA7XG4gICAgdGhpcy5tb2RhbHMgPSB2b2lkIDA7XG4gICAgdGhpcy5tb2RhbHMgPSBbXTtcbiAgICB0aGlzLmNvbnRhaW5lcnMgPSBbXTtcbiAgfVxuICBhZGQobW9kYWwsIGNvbnRhaW5lcikge1xuICAgIGxldCBtb2RhbEluZGV4ID0gdGhpcy5tb2RhbHMuaW5kZXhPZihtb2RhbCk7XG4gICAgaWYgKG1vZGFsSW5kZXggIT09IC0xKSB7XG4gICAgICByZXR1cm4gbW9kYWxJbmRleDtcbiAgICB9XG4gICAgbW9kYWxJbmRleCA9IHRoaXMubW9kYWxzLmxlbmd0aDtcbiAgICB0aGlzLm1vZGFscy5wdXNoKG1vZGFsKTtcblxuICAgIC8vIElmIHRoZSBtb2RhbCB3ZSBhcmUgYWRkaW5nIGlzIGFscmVhZHkgaW4gdGhlIERPTS5cbiAgICBpZiAobW9kYWwubW9kYWxSZWYpIHtcbiAgICAgIGFyaWFIaWRkZW4obW9kYWwubW9kYWxSZWYsIGZhbHNlKTtcbiAgICB9XG4gICAgY29uc3QgaGlkZGVuU2libGluZ3MgPSBnZXRIaWRkZW5TaWJsaW5ncyhjb250YWluZXIpO1xuICAgIGFyaWFIaWRkZW5TaWJsaW5ncyhjb250YWluZXIsIG1vZGFsLm1vdW50LCBtb2RhbC5tb2RhbFJlZiwgaGlkZGVuU2libGluZ3MsIHRydWUpO1xuICAgIGNvbnN0IGNvbnRhaW5lckluZGV4ID0gZmluZEluZGV4T2YodGhpcy5jb250YWluZXJzLCBpdGVtID0+IGl0ZW0uY29udGFpbmVyID09PSBjb250YWluZXIpO1xuICAgIGlmIChjb250YWluZXJJbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyc1tjb250YWluZXJJbmRleF0ubW9kYWxzLnB1c2gobW9kYWwpO1xuICAgICAgcmV0dXJuIG1vZGFsSW5kZXg7XG4gICAgfVxuICAgIHRoaXMuY29udGFpbmVycy5wdXNoKHtcbiAgICAgIG1vZGFsczogW21vZGFsXSxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIHJlc3RvcmU6IG51bGwsXG4gICAgICBoaWRkZW5TaWJsaW5nc1xuICAgIH0pO1xuICAgIHJldHVybiBtb2RhbEluZGV4O1xuICB9XG4gIG1vdW50KG1vZGFsLCBwcm9wcykge1xuICAgIGNvbnN0IGNvbnRhaW5lckluZGV4ID0gZmluZEluZGV4T2YodGhpcy5jb250YWluZXJzLCBpdGVtID0+IGl0ZW0ubW9kYWxzLmluZGV4T2YobW9kYWwpICE9PSAtMSk7XG4gICAgY29uc3QgY29udGFpbmVySW5mbyA9IHRoaXMuY29udGFpbmVyc1tjb250YWluZXJJbmRleF07XG4gICAgaWYgKCFjb250YWluZXJJbmZvLnJlc3RvcmUpIHtcbiAgICAgIGNvbnRhaW5lckluZm8ucmVzdG9yZSA9IGhhbmRsZUNvbnRhaW5lcihjb250YWluZXJJbmZvLCBwcm9wcyk7XG4gICAgfVxuICB9XG4gIHJlbW92ZShtb2RhbCwgYXJpYUhpZGRlblN0YXRlID0gdHJ1ZSkge1xuICAgIGNvbnN0IG1vZGFsSW5kZXggPSB0aGlzLm1vZGFscy5pbmRleE9mKG1vZGFsKTtcbiAgICBpZiAobW9kYWxJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBtb2RhbEluZGV4O1xuICAgIH1cbiAgICBjb25zdCBjb250YWluZXJJbmRleCA9IGZpbmRJbmRleE9mKHRoaXMuY29udGFpbmVycywgaXRlbSA9PiBpdGVtLm1vZGFscy5pbmRleE9mKG1vZGFsKSAhPT0gLTEpO1xuICAgIGNvbnN0IGNvbnRhaW5lckluZm8gPSB0aGlzLmNvbnRhaW5lcnNbY29udGFpbmVySW5kZXhdO1xuICAgIGNvbnRhaW5lckluZm8ubW9kYWxzLnNwbGljZShjb250YWluZXJJbmZvLm1vZGFscy5pbmRleE9mKG1vZGFsKSwgMSk7XG4gICAgdGhpcy5tb2RhbHMuc3BsaWNlKG1vZGFsSW5kZXgsIDEpO1xuXG4gICAgLy8gSWYgdGhhdCB3YXMgdGhlIGxhc3QgbW9kYWwgaW4gYSBjb250YWluZXIsIGNsZWFuIHVwIHRoZSBjb250YWluZXIuXG4gICAgaWYgKGNvbnRhaW5lckluZm8ubW9kYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gVGhlIG1vZGFsIG1pZ2h0IGJlIGNsb3NlZCBiZWZvcmUgaXQgaGFkIHRoZSBjaGFuY2UgdG8gYmUgbW91bnRlZCBpbiB0aGUgRE9NLlxuICAgICAgaWYgKGNvbnRhaW5lckluZm8ucmVzdG9yZSkge1xuICAgICAgICBjb250YWluZXJJbmZvLnJlc3RvcmUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChtb2RhbC5tb2RhbFJlZikge1xuICAgICAgICAvLyBJbiBjYXNlIHRoZSBtb2RhbCB3YXNuJ3QgaW4gdGhlIERPTSB5ZXQuXG4gICAgICAgIGFyaWFIaWRkZW4obW9kYWwubW9kYWxSZWYsIGFyaWFIaWRkZW5TdGF0ZSk7XG4gICAgICB9XG4gICAgICBhcmlhSGlkZGVuU2libGluZ3MoY29udGFpbmVySW5mby5jb250YWluZXIsIG1vZGFsLm1vdW50LCBtb2RhbC5tb2RhbFJlZiwgY29udGFpbmVySW5mby5oaWRkZW5TaWJsaW5ncywgZmFsc2UpO1xuICAgICAgdGhpcy5jb250YWluZXJzLnNwbGljZShjb250YWluZXJJbmRleCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZSBtYWtlIHN1cmUgdGhlIG5leHQgdG9wIG1vZGFsIGlzIHZpc2libGUgdG8gYSBzY3JlZW4gcmVhZGVyLlxuICAgICAgY29uc3QgbmV4dFRvcCA9IGNvbnRhaW5lckluZm8ubW9kYWxzW2NvbnRhaW5lckluZm8ubW9kYWxzLmxlbmd0aCAtIDFdO1xuICAgICAgLy8gYXMgc29vbiBhcyBhIG1vZGFsIGlzIGFkZGluZyBpdHMgbW9kYWxSZWYgaXMgdW5kZWZpbmVkLiBpdCBjYW4ndCBzZXRcbiAgICAgIC8vIGFyaWEtaGlkZGVuIGJlY2F1c2UgdGhlIGRvbSBlbGVtZW50IGRvZXNuJ3QgZXhpc3QgZWl0aGVyXG4gICAgICAvLyB3aGVuIG1vZGFsIHdhcyB1bm1vdW50ZWQgYmVmb3JlIG1vZGFsUmVmIGdldHMgbnVsbFxuICAgICAgaWYgKG5leHRUb3AubW9kYWxSZWYpIHtcbiAgICAgICAgYXJpYUhpZGRlbihuZXh0VG9wLm1vZGFsUmVmLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtb2RhbEluZGV4O1xuICB9XG4gIGlzVG9wTW9kYWwobW9kYWwpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RhbHMubGVuZ3RoID4gMCAmJiB0aGlzLm1vZGFsc1t0aGlzLm1vZGFscy5sZW5ndGggLSAxXSA9PT0gbW9kYWw7XG4gIH1cbn0iLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdW5zdGFibGVfb3duZXJEb2N1bWVudCBhcyBvd25lckRvY3VtZW50LCB1bnN0YWJsZV91c2VGb3JrUmVmIGFzIHVzZUZvcmtSZWYsIHVuc3RhYmxlX3VzZUV2ZW50Q2FsbGJhY2sgYXMgdXNlRXZlbnRDYWxsYmFjaywgdW5zdGFibGVfY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uIGFzIGNyZWF0ZUNoYWluZWRGdW5jdGlvbiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGV4dHJhY3RFdmVudEhhbmRsZXJzIGZyb20gJ0BtdWkvdXRpbHMvZXh0cmFjdEV2ZW50SGFuZGxlcnMnO1xuaW1wb3J0IHsgTW9kYWxNYW5hZ2VyLCBhcmlhSGlkZGVuIH0gZnJvbSAnLi9Nb2RhbE1hbmFnZXInO1xuZnVuY3Rpb24gZ2V0Q29udGFpbmVyKGNvbnRhaW5lcikge1xuICByZXR1cm4gdHlwZW9mIGNvbnRhaW5lciA9PT0gJ2Z1bmN0aW9uJyA/IGNvbnRhaW5lcigpIDogY29udGFpbmVyO1xufVxuZnVuY3Rpb24gZ2V0SGFzVHJhbnNpdGlvbihjaGlsZHJlbikge1xuICByZXR1cm4gY2hpbGRyZW4gPyBjaGlsZHJlbi5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaW4nKSA6IGZhbHNlO1xufVxuXG4vLyBBIG1vZGFsIG1hbmFnZXIgdXNlZCB0byB0cmFjayBhbmQgbWFuYWdlIHRoZSBzdGF0ZSBvZiBvcGVuIE1vZGFscy5cbi8vIE1vZGFscyBkb24ndCBvcGVuIG9uIHRoZSBzZXJ2ZXIgc28gdGhpcyB3b24ndCBjb25mbGljdCB3aXRoIGNvbmN1cnJlbnQgcmVxdWVzdHMuXG5jb25zdCBkZWZhdWx0TWFuYWdlciA9IG5ldyBNb2RhbE1hbmFnZXIoKTtcbi8qKlxuICpcbiAqIERlbW9zOlxuICpcbiAqIC0gW01vZGFsXShodHRwczovL211aS5jb20vYmFzZS11aS9yZWFjdC1tb2RhbC8jaG9vaylcbiAqXG4gKiBBUEk6XG4gKlxuICogLSBbdXNlTW9kYWwgQVBJXShodHRwczovL211aS5jb20vYmFzZS11aS9yZWFjdC1tb2RhbC9ob29rcy1hcGkvI3VzZS1tb2RhbClcbiAqL1xuZnVuY3Rpb24gdXNlTW9kYWwocGFyYW1ldGVycykge1xuICBjb25zdCB7XG4gICAgY29udGFpbmVyLFxuICAgIGRpc2FibGVFc2NhcGVLZXlEb3duID0gZmFsc2UsXG4gICAgZGlzYWJsZVNjcm9sbExvY2sgPSBmYWxzZSxcbiAgICAvLyBAdHMtaWdub3JlIGludGVybmFsIGxvZ2ljIC0gQmFzZSBVSSBzdXBwb3J0cyB0aGUgbWFuYWdlciBhcyBhIHByb3AgdG9vXG4gICAgbWFuYWdlciA9IGRlZmF1bHRNYW5hZ2VyLFxuICAgIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uID0gZmFsc2UsXG4gICAgb25UcmFuc2l0aW9uRW50ZXIsXG4gICAgb25UcmFuc2l0aW9uRXhpdGVkLFxuICAgIGNoaWxkcmVuLFxuICAgIG9uQ2xvc2UsXG4gICAgb3BlbixcbiAgICByb290UmVmXG4gIH0gPSBwYXJhbWV0ZXJzO1xuXG4gIC8vIEB0cy1pZ25vcmUgaW50ZXJuYWwgbG9naWNcbiAgY29uc3QgbW9kYWwgPSBSZWFjdC51c2VSZWYoe30pO1xuICBjb25zdCBtb3VudE5vZGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IG1vZGFsUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKG1vZGFsUmVmLCByb290UmVmKTtcbiAgY29uc3QgW2V4aXRlZCwgc2V0RXhpdGVkXSA9IFJlYWN0LnVzZVN0YXRlKCFvcGVuKTtcbiAgY29uc3QgaGFzVHJhbnNpdGlvbiA9IGdldEhhc1RyYW5zaXRpb24oY2hpbGRyZW4pO1xuICBsZXQgYXJpYUhpZGRlblByb3AgPSB0cnVlO1xuICBpZiAocGFyYW1ldGVyc1snYXJpYS1oaWRkZW4nXSA9PT0gJ2ZhbHNlJyB8fCBwYXJhbWV0ZXJzWydhcmlhLWhpZGRlbiddID09PSBmYWxzZSkge1xuICAgIGFyaWFIaWRkZW5Qcm9wID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgZ2V0RG9jID0gKCkgPT4gb3duZXJEb2N1bWVudChtb3VudE5vZGVSZWYuY3VycmVudCk7XG4gIGNvbnN0IGdldE1vZGFsID0gKCkgPT4ge1xuICAgIG1vZGFsLmN1cnJlbnQubW9kYWxSZWYgPSBtb2RhbFJlZi5jdXJyZW50O1xuICAgIG1vZGFsLmN1cnJlbnQubW91bnQgPSBtb3VudE5vZGVSZWYuY3VycmVudDtcbiAgICByZXR1cm4gbW9kYWwuY3VycmVudDtcbiAgfTtcbiAgY29uc3QgaGFuZGxlTW91bnRlZCA9ICgpID0+IHtcbiAgICBtYW5hZ2VyLm1vdW50KGdldE1vZGFsKCksIHtcbiAgICAgIGRpc2FibGVTY3JvbGxMb2NrXG4gICAgfSk7XG5cbiAgICAvLyBGaXggYSBidWcgb24gQ2hyb21lIHdoZXJlIHRoZSBzY3JvbGwgaXNuJ3QgaW5pdGlhbGx5IDAuXG4gICAgaWYgKG1vZGFsUmVmLmN1cnJlbnQpIHtcbiAgICAgIG1vZGFsUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZU9wZW4gPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCByZXNvbHZlZENvbnRhaW5lciA9IGdldENvbnRhaW5lcihjb250YWluZXIpIHx8IGdldERvYygpLmJvZHk7XG4gICAgbWFuYWdlci5hZGQoZ2V0TW9kYWwoKSwgcmVzb2x2ZWRDb250YWluZXIpO1xuXG4gICAgLy8gVGhlIGVsZW1lbnQgd2FzIGFscmVhZHkgbW91bnRlZC5cbiAgICBpZiAobW9kYWxSZWYuY3VycmVudCkge1xuICAgICAgaGFuZGxlTW91bnRlZCgpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGlzVG9wTW9kYWwgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiBtYW5hZ2VyLmlzVG9wTW9kYWwoZ2V0TW9kYWwoKSksIFttYW5hZ2VyXSk7XG4gIGNvbnN0IGhhbmRsZVBvcnRhbFJlZiA9IHVzZUV2ZW50Q2FsbGJhY2sobm9kZSA9PiB7XG4gICAgbW91bnROb2RlUmVmLmN1cnJlbnQgPSBub2RlO1xuICAgIGlmICghbm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob3BlbiAmJiBpc1RvcE1vZGFsKCkpIHtcbiAgICAgIGhhbmRsZU1vdW50ZWQoKTtcbiAgICB9IGVsc2UgaWYgKG1vZGFsUmVmLmN1cnJlbnQpIHtcbiAgICAgIGFyaWFIaWRkZW4obW9kYWxSZWYuY3VycmVudCwgYXJpYUhpZGRlblByb3ApO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG1hbmFnZXIucmVtb3ZlKGdldE1vZGFsKCksIGFyaWFIaWRkZW5Qcm9wKTtcbiAgfSwgW2FyaWFIaWRkZW5Qcm9wLCBtYW5hZ2VyXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGhhbmRsZUNsb3NlKCk7XG4gICAgfTtcbiAgfSwgW2hhbmRsZUNsb3NlXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIGhhbmRsZU9wZW4oKTtcbiAgICB9IGVsc2UgaWYgKCFoYXNUcmFuc2l0aW9uIHx8ICFjbG9zZUFmdGVyVHJhbnNpdGlvbikge1xuICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICB9XG4gIH0sIFtvcGVuLCBoYW5kbGVDbG9zZSwgaGFzVHJhbnNpdGlvbiwgY2xvc2VBZnRlclRyYW5zaXRpb24sIGhhbmRsZU9wZW5dKTtcbiAgY29uc3QgY3JlYXRlSGFuZGxlS2V5RG93biA9IG90aGVySGFuZGxlcnMgPT4gZXZlbnQgPT4ge1xuICAgIHZhciBfb3RoZXJIYW5kbGVycyRvbktleUQ7XG4gICAgKF9vdGhlckhhbmRsZXJzJG9uS2V5RCA9IG90aGVySGFuZGxlcnMub25LZXlEb3duKSA9PSBudWxsIHx8IF9vdGhlckhhbmRsZXJzJG9uS2V5RC5jYWxsKG90aGVySGFuZGxlcnMsIGV2ZW50KTtcblxuICAgIC8vIFRoZSBoYW5kbGVyIGRvZXNuJ3QgdGFrZSBldmVudC5kZWZhdWx0UHJldmVudGVkIGludG8gYWNjb3VudDpcbiAgICAvL1xuICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCkgaXMgbWVhbnQgdG8gc3RvcCBkZWZhdWx0IGJlaGF2aW9ycyBsaWtlXG4gICAgLy8gY2xpY2tpbmcgYSBjaGVja2JveCB0byBjaGVjayBpdCwgaGl0dGluZyBhIGJ1dHRvbiB0byBzdWJtaXQgYSBmb3JtLFxuICAgIC8vIGFuZCBoaXR0aW5nIGxlZnQgYXJyb3cgdG8gbW92ZSB0aGUgY3Vyc29yIGluIGEgdGV4dCBpbnB1dCBldGMuXG4gICAgLy8gT25seSBzcGVjaWFsIEhUTUwgZWxlbWVudHMgaGF2ZSB0aGVzZSBkZWZhdWx0IGJlaGF2aW9ycy5cbiAgICBpZiAoZXZlbnQua2V5ICE9PSAnRXNjYXBlJyB8fCBldmVudC53aGljaCA9PT0gMjI5IHx8XG4gICAgLy8gV2FpdCB1bnRpbCBJTUUgaXMgc2V0dGxlZC5cbiAgICAhaXNUb3BNb2RhbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghZGlzYWJsZUVzY2FwZUtleURvd24pIHtcbiAgICAgIC8vIFN3YWxsb3cgdGhlIGV2ZW50LCBpbiBjYXNlIHNvbWVvbmUgaXMgbGlzdGVuaW5nIGZvciB0aGUgZXNjYXBlIGtleSBvbiB0aGUgYm9keS5cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgICAgb25DbG9zZShldmVudCwgJ2VzY2FwZUtleURvd24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IGNyZWF0ZUhhbmRsZUJhY2tkcm9wQ2xpY2sgPSBvdGhlckhhbmRsZXJzID0+IGV2ZW50ID0+IHtcbiAgICB2YXIgX290aGVySGFuZGxlcnMkb25DbGljO1xuICAgIChfb3RoZXJIYW5kbGVycyRvbkNsaWMgPSBvdGhlckhhbmRsZXJzLm9uQ2xpY2spID09IG51bGwgfHwgX290aGVySGFuZGxlcnMkb25DbGljLmNhbGwob3RoZXJIYW5kbGVycywgZXZlbnQpO1xuICAgIGlmIChldmVudC50YXJnZXQgIT09IGV2ZW50LmN1cnJlbnRUYXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgIG9uQ2xvc2UoZXZlbnQsICdiYWNrZHJvcENsaWNrJyk7XG4gICAgfVxuICB9O1xuICBjb25zdCBnZXRSb290UHJvcHMgPSAob3RoZXJIYW5kbGVycyA9IHt9KSA9PiB7XG4gICAgY29uc3QgcHJvcHNFdmVudEhhbmRsZXJzID0gZXh0cmFjdEV2ZW50SGFuZGxlcnMocGFyYW1ldGVycyk7XG5cbiAgICAvLyBUaGUgY3VzdG9tIGV2ZW50IGhhbmRsZXJzIHNob3VsZG4ndCBiZSBzcHJlYWQgb24gdGhlIHJvb3QgZWxlbWVudFxuICAgIGRlbGV0ZSBwcm9wc0V2ZW50SGFuZGxlcnMub25UcmFuc2l0aW9uRW50ZXI7XG4gICAgZGVsZXRlIHByb3BzRXZlbnRIYW5kbGVycy5vblRyYW5zaXRpb25FeGl0ZWQ7XG4gICAgY29uc3QgZXh0ZXJuYWxFdmVudEhhbmRsZXJzID0gX2V4dGVuZHMoe30sIHByb3BzRXZlbnRIYW5kbGVycywgb3RoZXJIYW5kbGVycyk7XG4gICAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICAgIHJvbGU6ICdwcmVzZW50YXRpb24nXG4gICAgfSwgZXh0ZXJuYWxFdmVudEhhbmRsZXJzLCB7XG4gICAgICBvbktleURvd246IGNyZWF0ZUhhbmRsZUtleURvd24oZXh0ZXJuYWxFdmVudEhhbmRsZXJzKSxcbiAgICAgIHJlZjogaGFuZGxlUmVmXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldEJhY2tkcm9wUHJvcHMgPSAob3RoZXJIYW5kbGVycyA9IHt9KSA9PiB7XG4gICAgY29uc3QgZXh0ZXJuYWxFdmVudEhhbmRsZXJzID0gb3RoZXJIYW5kbGVycztcbiAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgJ2FyaWEtaGlkZGVuJzogdHJ1ZVxuICAgIH0sIGV4dGVybmFsRXZlbnRIYW5kbGVycywge1xuICAgICAgb25DbGljazogY3JlYXRlSGFuZGxlQmFja2Ryb3BDbGljayhleHRlcm5hbEV2ZW50SGFuZGxlcnMpLFxuICAgICAgb3BlblxuICAgIH0pO1xuICB9O1xuICBjb25zdCBnZXRUcmFuc2l0aW9uUHJvcHMgPSAoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlRW50ZXIgPSAoKSA9PiB7XG4gICAgICBzZXRFeGl0ZWQoZmFsc2UpO1xuICAgICAgaWYgKG9uVHJhbnNpdGlvbkVudGVyKSB7XG4gICAgICAgIG9uVHJhbnNpdGlvbkVudGVyKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVFeGl0ZWQgPSAoKSA9PiB7XG4gICAgICBzZXRFeGl0ZWQodHJ1ZSk7XG4gICAgICBpZiAob25UcmFuc2l0aW9uRXhpdGVkKSB7XG4gICAgICAgIG9uVHJhbnNpdGlvbkV4aXRlZCgpO1xuICAgICAgfVxuICAgICAgaWYgKGNsb3NlQWZ0ZXJUcmFuc2l0aW9uKSB7XG4gICAgICAgIGhhbmRsZUNsb3NlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgb25FbnRlcjogY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKGhhbmRsZUVudGVyLCBjaGlsZHJlbiA9PSBudWxsID8gdm9pZCAwIDogY2hpbGRyZW4ucHJvcHMub25FbnRlciksXG4gICAgICBvbkV4aXRlZDogY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKGhhbmRsZUV4aXRlZCwgY2hpbGRyZW4gPT0gbnVsbCA/IHZvaWQgMCA6IGNoaWxkcmVuLnByb3BzLm9uRXhpdGVkKVxuICAgIH07XG4gIH07XG4gIHJldHVybiB7XG4gICAgZ2V0Um9vdFByb3BzLFxuICAgIGdldEJhY2tkcm9wUHJvcHMsXG4gICAgZ2V0VHJhbnNpdGlvblByb3BzLFxuICAgIHJvb3RSZWY6IGhhbmRsZVJlZixcbiAgICBwb3J0YWxSZWY6IGhhbmRsZVBvcnRhbFJlZixcbiAgICBpc1RvcE1vZGFsLFxuICAgIGV4aXRlZCxcbiAgICBoYXNUcmFuc2l0aW9uXG4gIH07XG59XG5leHBvcnQgZGVmYXVsdCB1c2VNb2RhbDsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZGFsVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlNb2RhbCcsIHNsb3QpO1xufVxuY29uc3QgbW9kYWxDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpTW9kYWwnLCBbJ3Jvb3QnLCAnaGlkZGVuJywgJ2JhY2tkcm9wJ10pO1xuZXhwb3J0IGRlZmF1bHQgbW9kYWxDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIkJhY2tkcm9wQ29tcG9uZW50XCIsIFwiQmFja2Ryb3BQcm9wc1wiLCBcImNsYXNzZXNcIiwgXCJjbGFzc05hbWVcIiwgXCJjbG9zZUFmdGVyVHJhbnNpdGlvblwiLCBcImNoaWxkcmVuXCIsIFwiY29udGFpbmVyXCIsIFwiY29tcG9uZW50XCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImRpc2FibGVBdXRvRm9jdXNcIiwgXCJkaXNhYmxlRW5mb3JjZUZvY3VzXCIsIFwiZGlzYWJsZUVzY2FwZUtleURvd25cIiwgXCJkaXNhYmxlUG9ydGFsXCIsIFwiZGlzYWJsZVJlc3RvcmVGb2N1c1wiLCBcImRpc2FibGVTY3JvbGxMb2NrXCIsIFwiaGlkZUJhY2tkcm9wXCIsIFwia2VlcE1vdW50ZWRcIiwgXCJvbkJhY2tkcm9wQ2xpY2tcIiwgXCJvbkNsb3NlXCIsIFwib25UcmFuc2l0aW9uRW50ZXJcIiwgXCJvblRyYW5zaXRpb25FeGl0ZWRcIiwgXCJvcGVuXCIsIFwic2xvdFByb3BzXCIsIFwic2xvdHNcIiwgXCJ0aGVtZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBIVE1MRWxlbWVudFR5cGUgZnJvbSAnQG11aS91dGlscy9IVE1MRWxlbWVudFR5cGUnO1xuaW1wb3J0IGVsZW1lbnRBY2NlcHRpbmdSZWYgZnJvbSAnQG11aS91dGlscy9lbGVtZW50QWNjZXB0aW5nUmVmJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB1c2VTbG90UHJvcHMgZnJvbSAnQG11aS91dGlscy91c2VTbG90UHJvcHMnO1xuaW1wb3J0IEZvY3VzVHJhcCBmcm9tICcuLi9VbnN0YWJsZV9UcmFwRm9jdXMnO1xuaW1wb3J0IFBvcnRhbCBmcm9tICcuLi9Qb3J0YWwnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBCYWNrZHJvcCBmcm9tICcuLi9CYWNrZHJvcCc7XG5pbXBvcnQgdXNlTW9kYWwgZnJvbSAnLi91c2VNb2RhbCc7XG5pbXBvcnQgeyBnZXRNb2RhbFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vbW9kYWxDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgb3BlbixcbiAgICBleGl0ZWQsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgIW9wZW4gJiYgZXhpdGVkICYmICdoaWRkZW4nXSxcbiAgICBiYWNrZHJvcDogWydiYWNrZHJvcCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TW9kYWxVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IE1vZGFsUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpTW9kYWwnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgIW93bmVyU3RhdGUub3BlbiAmJiBvd25lclN0YXRlLmV4aXRlZCAmJiBzdHlsZXMuaGlkZGVuXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgcG9zaXRpb246ICdmaXhlZCcsXG4gIHpJbmRleDogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnpJbmRleC5tb2RhbCxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgdG9wOiAwLFxuICBsZWZ0OiAwXG59LCAhb3duZXJTdGF0ZS5vcGVuICYmIG93bmVyU3RhdGUuZXhpdGVkICYmIHtcbiAgdmlzaWJpbGl0eTogJ2hpZGRlbidcbn0pKTtcbmNvbnN0IE1vZGFsQmFja2Ryb3AgPSBzdHlsZWQoQmFja2Ryb3AsIHtcbiAgbmFtZTogJ011aU1vZGFsJyxcbiAgc2xvdDogJ0JhY2tkcm9wJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgcmV0dXJuIHN0eWxlcy5iYWNrZHJvcDtcbiAgfVxufSkoe1xuICB6SW5kZXg6IC0xXG59KTtcblxuLyoqXG4gKiBNb2RhbCBpcyBhIGxvd2VyLWxldmVsIGNvbnN0cnVjdCB0aGF0IGlzIGxldmVyYWdlZCBieSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6XG4gKlxuICogLSBbRGlhbG9nXSgvbWF0ZXJpYWwtdWkvYXBpL2RpYWxvZy8pXG4gKiAtIFtEcmF3ZXJdKC9tYXRlcmlhbC11aS9hcGkvZHJhd2VyLylcbiAqIC0gW01lbnVdKC9tYXRlcmlhbC11aS9hcGkvbWVudS8pXG4gKiAtIFtQb3BvdmVyXSgvbWF0ZXJpYWwtdWkvYXBpL3BvcG92ZXIvKVxuICpcbiAqIElmIHlvdSBhcmUgY3JlYXRpbmcgYSBtb2RhbCBkaWFsb2csIHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGUgW0RpYWxvZ10oL21hdGVyaWFsLXVpL2FwaS9kaWFsb2cvKSBjb21wb25lbnRcbiAqIHJhdGhlciB0aGFuIGRpcmVjdGx5IHVzaW5nIE1vZGFsLlxuICpcbiAqIFRoaXMgY29tcG9uZW50IHNoYXJlcyBtYW55IGNvbmNlcHRzIHdpdGggW3JlYWN0LW92ZXJsYXlzXShodHRwczovL3JlYWN0LWJvb3RzdHJhcC5naXRodWIuaW8vcmVhY3Qtb3ZlcmxheXMvI21vZGFscykuXG4gKi9cbmNvbnN0IE1vZGFsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTW9kYWwoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfcmVmLCBfc2xvdHMkcm9vdCwgX3JlZjIsIF9zbG90cyRiYWNrZHJvcCwgX3Nsb3RQcm9wcyRyb290LCBfc2xvdFByb3BzJGJhY2tkcm9wO1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgbmFtZTogJ011aU1vZGFsJyxcbiAgICBwcm9wczogaW5Qcm9wc1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgQmFja2Ryb3BDb21wb25lbnQgPSBNb2RhbEJhY2tkcm9wLFxuICAgICAgQmFja2Ryb3BQcm9wcyxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uID0gZmFsc2UsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGNvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICAgIGNvbXBvbmVudHNQcm9wcyA9IHt9LFxuICAgICAgZGlzYWJsZUF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgICAgZGlzYWJsZUVuZm9yY2VGb2N1cyA9IGZhbHNlLFxuICAgICAgZGlzYWJsZUVzY2FwZUtleURvd24gPSBmYWxzZSxcbiAgICAgIGRpc2FibGVQb3J0YWwgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVSZXN0b3JlRm9jdXMgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVTY3JvbGxMb2NrID0gZmFsc2UsXG4gICAgICBoaWRlQmFja2Ryb3AgPSBmYWxzZSxcbiAgICAgIGtlZXBNb3VudGVkID0gZmFsc2UsXG4gICAgICBvbkJhY2tkcm9wQ2xpY2ssXG4gICAgICBvcGVuLFxuICAgICAgc2xvdFByb3BzLFxuICAgICAgc2xvdHNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcm9wLXR5cGVzXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHByb3BzV2l0aERlZmF1bHRzID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY2xvc2VBZnRlclRyYW5zaXRpb24sXG4gICAgZGlzYWJsZUF1dG9Gb2N1cyxcbiAgICBkaXNhYmxlRW5mb3JjZUZvY3VzLFxuICAgIGRpc2FibGVFc2NhcGVLZXlEb3duLFxuICAgIGRpc2FibGVQb3J0YWwsXG4gICAgZGlzYWJsZVJlc3RvcmVGb2N1cyxcbiAgICBkaXNhYmxlU2Nyb2xsTG9jayxcbiAgICBoaWRlQmFja2Ryb3AsXG4gICAga2VlcE1vdW50ZWRcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICBnZXRSb290UHJvcHMsXG4gICAgZ2V0QmFja2Ryb3BQcm9wcyxcbiAgICBnZXRUcmFuc2l0aW9uUHJvcHMsXG4gICAgcG9ydGFsUmVmLFxuICAgIGlzVG9wTW9kYWwsXG4gICAgZXhpdGVkLFxuICAgIGhhc1RyYW5zaXRpb25cbiAgfSA9IHVzZU1vZGFsKF9leHRlbmRzKHt9LCBwcm9wc1dpdGhEZWZhdWx0cywge1xuICAgIHJvb3RSZWY6IHJlZlxuICB9KSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHNXaXRoRGVmYXVsdHMsIHtcbiAgICBleGl0ZWRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgY2hpbGRQcm9wcyA9IHt9O1xuICBpZiAoY2hpbGRyZW4ucHJvcHMudGFiSW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgIGNoaWxkUHJvcHMudGFiSW5kZXggPSAnLTEnO1xuICB9XG5cbiAgLy8gSXQncyBhIFRyYW5zaXRpb24gbGlrZSBjb21wb25lbnRcbiAgaWYgKGhhc1RyYW5zaXRpb24pIHtcbiAgICBjb25zdCB7XG4gICAgICBvbkVudGVyLFxuICAgICAgb25FeGl0ZWRcbiAgICB9ID0gZ2V0VHJhbnNpdGlvblByb3BzKCk7XG4gICAgY2hpbGRQcm9wcy5vbkVudGVyID0gb25FbnRlcjtcbiAgICBjaGlsZFByb3BzLm9uRXhpdGVkID0gb25FeGl0ZWQ7XG4gIH1cbiAgY29uc3QgUm9vdFNsb3QgPSAoX3JlZiA9IChfc2xvdHMkcm9vdCA9IHNsb3RzID09IG51bGwgPyB2b2lkIDAgOiBzbG90cy5yb290KSAhPSBudWxsID8gX3Nsb3RzJHJvb3QgOiBjb21wb25lbnRzLlJvb3QpICE9IG51bGwgPyBfcmVmIDogTW9kYWxSb290O1xuICBjb25zdCBCYWNrZHJvcFNsb3QgPSAoX3JlZjIgPSAoX3Nsb3RzJGJhY2tkcm9wID0gc2xvdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RzLmJhY2tkcm9wKSAhPSBudWxsID8gX3Nsb3RzJGJhY2tkcm9wIDogY29tcG9uZW50cy5CYWNrZHJvcCkgIT0gbnVsbCA/IF9yZWYyIDogQmFja2Ryb3BDb21wb25lbnQ7XG4gIGNvbnN0IHJvb3RTbG90UHJvcHMgPSAoX3Nsb3RQcm9wcyRyb290ID0gc2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBzbG90UHJvcHMucm9vdCkgIT0gbnVsbCA/IF9zbG90UHJvcHMkcm9vdCA6IGNvbXBvbmVudHNQcm9wcy5yb290O1xuICBjb25zdCBiYWNrZHJvcFNsb3RQcm9wcyA9IChfc2xvdFByb3BzJGJhY2tkcm9wID0gc2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBzbG90UHJvcHMuYmFja2Ryb3ApICE9IG51bGwgPyBfc2xvdFByb3BzJGJhY2tkcm9wIDogY29tcG9uZW50c1Byb3BzLmJhY2tkcm9wO1xuICBjb25zdCByb290UHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgIGVsZW1lbnRUeXBlOiBSb290U2xvdCxcbiAgICBleHRlcm5hbFNsb3RQcm9wczogcm9vdFNsb3RQcm9wcyxcbiAgICBleHRlcm5hbEZvcndhcmRlZFByb3BzOiBvdGhlcixcbiAgICBnZXRTbG90UHJvcHM6IGdldFJvb3RQcm9wcyxcbiAgICBhZGRpdGlvbmFsUHJvcHM6IHtcbiAgICAgIHJlZixcbiAgICAgIGFzOiBjb21wb25lbnRcbiAgICB9LFxuICAgIG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzTmFtZSwgcm9vdFNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogcm9vdFNsb3RQcm9wcy5jbGFzc05hbWUsIGNsYXNzZXMgPT0gbnVsbCA/IHZvaWQgMCA6IGNsYXNzZXMucm9vdCwgIW93bmVyU3RhdGUub3BlbiAmJiBvd25lclN0YXRlLmV4aXRlZCAmJiAoY2xhc3NlcyA9PSBudWxsID8gdm9pZCAwIDogY2xhc3Nlcy5oaWRkZW4pKVxuICB9KTtcbiAgY29uc3QgYmFja2Ryb3BQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IEJhY2tkcm9wU2xvdCxcbiAgICBleHRlcm5hbFNsb3RQcm9wczogYmFja2Ryb3BTbG90UHJvcHMsXG4gICAgYWRkaXRpb25hbFByb3BzOiBCYWNrZHJvcFByb3BzLFxuICAgIGdldFNsb3RQcm9wczogb3RoZXJIYW5kbGVycyA9PiB7XG4gICAgICByZXR1cm4gZ2V0QmFja2Ryb3BQcm9wcyhfZXh0ZW5kcyh7fSwgb3RoZXJIYW5kbGVycywge1xuICAgICAgICBvbkNsaWNrOiBlID0+IHtcbiAgICAgICAgICBpZiAob25CYWNrZHJvcENsaWNrKSB7XG4gICAgICAgICAgICBvbkJhY2tkcm9wQ2xpY2soZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvdGhlckhhbmRsZXJzICE9IG51bGwgJiYgb3RoZXJIYW5kbGVycy5vbkNsaWNrKSB7XG4gICAgICAgICAgICBvdGhlckhhbmRsZXJzLm9uQ2xpY2soZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSxcbiAgICBjbGFzc05hbWU6IGNsc3goYmFja2Ryb3BTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGJhY2tkcm9wU2xvdFByb3BzLmNsYXNzTmFtZSwgQmFja2Ryb3BQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogQmFja2Ryb3BQcm9wcy5jbGFzc05hbWUsIGNsYXNzZXMgPT0gbnVsbCA/IHZvaWQgMCA6IGNsYXNzZXMuYmFja2Ryb3ApLFxuICAgIG93bmVyU3RhdGVcbiAgfSk7XG4gIGlmICgha2VlcE1vdW50ZWQgJiYgIW9wZW4gJiYgKCFoYXNUcmFuc2l0aW9uIHx8IGV4aXRlZCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUG9ydGFsLCB7XG4gICAgcmVmOiBwb3J0YWxSZWYsXG4gICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgZGlzYWJsZVBvcnRhbDogZGlzYWJsZVBvcnRhbCxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3hzKFJvb3RTbG90LCBfZXh0ZW5kcyh7fSwgcm9vdFByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogWyFoaWRlQmFja2Ryb3AgJiYgQmFja2Ryb3BDb21wb25lbnQgPyAvKiNfX1BVUkVfXyovX2pzeChCYWNrZHJvcFNsb3QsIF9leHRlbmRzKHt9LCBiYWNrZHJvcFByb3BzKSkgOiBudWxsLCAvKiNfX1BVUkVfXyovX2pzeChGb2N1c1RyYXAsIHtcbiAgICAgICAgZGlzYWJsZUVuZm9yY2VGb2N1czogZGlzYWJsZUVuZm9yY2VGb2N1cyxcbiAgICAgICAgZGlzYWJsZUF1dG9Gb2N1czogZGlzYWJsZUF1dG9Gb2N1cyxcbiAgICAgICAgZGlzYWJsZVJlc3RvcmVGb2N1czogZGlzYWJsZVJlc3RvcmVGb2N1cyxcbiAgICAgICAgaXNFbmFibGVkOiBpc1RvcE1vZGFsLFxuICAgICAgICBvcGVuOiBvcGVuLFxuICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwgY2hpbGRQcm9wcylcbiAgICAgIH0pXVxuICAgIH0pKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTW9kYWwucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQSBiYWNrZHJvcCBjb21wb25lbnQuIFRoaXMgcHJvcCBlbmFibGVzIGN1c3RvbSBiYWNrZHJvcCByZW5kZXJpbmcuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc2xvdHMuYmFja2Ryb3BgIGluc3RlYWQuIFdoaWxlIHRoaXMgcHJvcCBjdXJyZW50bHkgd29ya3MsIGl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uLlxuICAgKiBVc2UgdGhlIGBzbG90cy5iYWNrZHJvcGAgcHJvcCB0byBtYWtlIHlvdXIgYXBwbGljYXRpb24gcmVhZHkgZm9yIHRoZSBuZXh0IHZlcnNpb24gb2YgTWF0ZXJpYWwgVUkuXG4gICAqIEBkZWZhdWx0IHN0eWxlZChCYWNrZHJvcCwge1xuICAgKiAgIG5hbWU6ICdNdWlNb2RhbCcsXG4gICAqICAgc2xvdDogJ0JhY2tkcm9wJyxcbiAgICogICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICogICAgIHJldHVybiBzdHlsZXMuYmFja2Ryb3A7XG4gICAqICAgfSxcbiAgICogfSkoe1xuICAgKiAgIHpJbmRleDogLTEsXG4gICAqIH0pXG4gICAqL1xuICBCYWNrZHJvcENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BCYWNrZHJvcGBdKC9tYXRlcmlhbC11aS9hcGkvYmFja2Ryb3AvKSBlbGVtZW50LlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHNsb3RQcm9wcy5iYWNrZHJvcGAgaW5zdGVhZC5cbiAgICovXG4gIEJhY2tkcm9wUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBBIHNpbmdsZSBjaGlsZCBjb250ZW50IGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogZWxlbWVudEFjY2VwdGluZ1JlZi5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIHRydWUgdGhlIE1vZGFsIHdhaXRzIHVudGlsIGEgbmVzdGVkIFRyYW5zaXRpb24gaXMgY29tcGxldGVkIGJlZm9yZSBjbG9zaW5nLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY2xvc2VBZnRlclRyYW5zaXRpb246IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdHNgIHByb3AgaW5zdGVhZC5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgQmFja2Ryb3A6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RQcm9wc2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90UHJvcHNgIHByb3AgaW5zdGVhZCwgYXMgYGNvbXBvbmVudHNQcm9wc2Agd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYmFja2Ryb3A6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCBvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgb25lLlxuICAgKiBUaGUgYGNvbnRhaW5lcmAgd2lsbCBoYXZlIHRoZSBwb3J0YWwgY2hpbGRyZW4gYXBwZW5kZWQgdG8gaXQuXG4gICAqXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgY2FsbGJhY2ssIHdoaWNoIGlzIGNhbGxlZCBpbiBhIFJlYWN0IGxheW91dCBlZmZlY3QuXG4gICAqIFRoaXMgbGV0cyB5b3Ugc2V0IHRoZSBjb250YWluZXIgZnJvbSBhIHJlZiwgYW5kIGFsc28gbWFrZXMgc2VydmVyLXNpZGUgcmVuZGVyaW5nIHBvc3NpYmxlLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBpdCB1c2VzIHRoZSBib2R5IG9mIHRoZSB0b3AtbGV2ZWwgZG9jdW1lbnQgb2JqZWN0LFxuICAgKiBzbyBpdCdzIHNpbXBseSBgZG9jdW1lbnQuYm9keWAgbW9zdCBvZiB0aGUgdGltZS5cbiAgICovXG4gIGNvbnRhaW5lcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtIVE1MRWxlbWVudFR5cGUsIFByb3BUeXBlcy5mdW5jXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtb2RhbCB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IHNoaWZ0IGZvY3VzIHRvIGl0c2VsZiB3aGVuIGl0IG9wZW5zLCBhbmRcbiAgICogcmVwbGFjZSBpdCB0byB0aGUgbGFzdCBmb2N1c2VkIGVsZW1lbnQgd2hlbiBpdCBjbG9zZXMuXG4gICAqIFRoaXMgYWxzbyB3b3JrcyBjb3JyZWN0bHkgd2l0aCBhbnkgbW9kYWwgY2hpbGRyZW4gdGhhdCBoYXZlIHRoZSBgZGlzYWJsZUF1dG9Gb2N1c2AgcHJvcC5cbiAgICpcbiAgICogR2VuZXJhbGx5IHRoaXMgc2hvdWxkIG5ldmVyIGJlIHNldCB0byBgdHJ1ZWAgYXMgaXQgbWFrZXMgdGhlIG1vZGFsIGxlc3NcbiAgICogYWNjZXNzaWJsZSB0byBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBsaWtlIHNjcmVlbiByZWFkZXJzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtb2RhbCB3aWxsIG5vdCBwcmV2ZW50IGZvY3VzIGZyb20gbGVhdmluZyB0aGUgbW9kYWwgd2hpbGUgb3Blbi5cbiAgICpcbiAgICogR2VuZXJhbGx5IHRoaXMgc2hvdWxkIG5ldmVyIGJlIHNldCB0byBgdHJ1ZWAgYXMgaXQgbWFrZXMgdGhlIG1vZGFsIGxlc3NcbiAgICogYWNjZXNzaWJsZSB0byBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBsaWtlIHNjcmVlbiByZWFkZXJzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVuZm9yY2VGb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGhpdHRpbmcgZXNjYXBlIHdpbGwgbm90IGZpcmUgdGhlIGBvbkNsb3NlYCBjYWxsYmFjay5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVFc2NhcGVLZXlEb3duOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBgY2hpbGRyZW5gIHdpbGwgYmUgdW5kZXIgdGhlIERPTSBoaWVyYXJjaHkgb2YgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUG9ydGFsOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG1vZGFsIHdpbGwgbm90IHJlc3RvcmUgZm9jdXMgdG8gcHJldmlvdXNseSBmb2N1c2VkIGVsZW1lbnQgb25jZVxuICAgKiBtb2RhbCBpcyBoaWRkZW4gb3IgdW5tb3VudGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJlc3RvcmVGb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBEaXNhYmxlIHRoZSBzY3JvbGwgbG9jayBiZWhhdmlvci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVTY3JvbGxMb2NrOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGJhY2tkcm9wIGlzIG5vdCByZW5kZXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGhpZGVCYWNrZHJvcDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBBbHdheXMga2VlcCB0aGUgY2hpbGRyZW4gaW4gdGhlIERPTS5cbiAgICogVGhpcyBwcm9wIGNhbiBiZSB1c2VmdWwgaW4gU0VPIHNpdHVhdGlvbiBvclxuICAgKiB3aGVuIHlvdSB3YW50IHRvIG1heGltaXplIHRoZSByZXNwb25zaXZlbmVzcyBvZiB0aGUgTW9kYWwuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBrZWVwTW91bnRlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBiYWNrZHJvcCBpcyBjbGlja2VkLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGBvbkNsb3NlYCBwcm9wIHdpdGggdGhlIGByZWFzb25gIGFyZ3VtZW50IHRvIGhhbmRsZSB0aGUgYGJhY2tkcm9wQ2xpY2tgIGV2ZW50cy5cbiAgICovXG4gIG9uQmFja2Ryb3BDbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgY2xvc2VkLlxuICAgKiBUaGUgYHJlYXNvbmAgcGFyYW1ldGVyIGNhbiBvcHRpb25hbGx5IGJlIHVzZWQgdG8gY29udHJvbCB0aGUgcmVzcG9uc2UgdG8gYG9uQ2xvc2VgLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gQ2FuIGJlOiBgXCJlc2NhcGVLZXlEb3duXCJgLCBgXCJiYWNrZHJvcENsaWNrXCJgLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIGEgdHJhbnNpdGlvbiBlbnRlcnMuXG4gICAqL1xuICBvblRyYW5zaXRpb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIGEgdHJhbnNpdGlvbiBoYXMgZXhpdGVkLlxuICAgKi9cbiAgb25UcmFuc2l0aW9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBUaGUgcHJvcHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgTW9kYWwuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYmFja2Ryb3A6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIE1vZGFsLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYmFja2Ryb3A6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBNb2RhbDsiXSwibmFtZXMiOlsiZ2V0RmlsbGVkSW5wdXRVdGlsaXR5Q2xhc3MiLCJzbG90IiwiZ2VuZXJhdGVVdGlsaXR5Q2xhc3MiLCJpbnB1dEJhc2VDbGFzc2VzIiwiZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyIsIl9leGNsdWRlZCIsIkZpbGxlZElucHV0Um9vdCIsInN0eWxlZCIsIklucHV0QmFzZSIsInNob3VsZEZvcndhcmRQcm9wIiwicHJvcCIsInJvb3RTaG91bGRGb3J3YXJkUHJvcCIsIm5hbWUiLCJvdmVycmlkZXNSZXNvbHZlciIsInByb3BzIiwic3R5bGVzIiwib3duZXJTdGF0ZSIsImRpc2FibGVVbmRlcmxpbmUiLCJ1bmRlcmxpbmUiLCJ0aGVtZSIsIl9wYWxldHRlIiwibGlnaHQiLCJwYWxldHRlIiwibW9kZSIsImJvdHRvbUxpbmVDb2xvciIsImJhY2tncm91bmRDb2xvciIsImhvdmVyQmFja2dyb3VuZCIsImRpc2FibGVkQmFja2dyb3VuZCIsInBvc2l0aW9uIiwidmFycyIsIkZpbGxlZElucHV0IiwiYmciLCJib3JkZXJUb3BMZWZ0UmFkaXVzIiwic2hhcGUiLCJib3JkZXJSYWRpdXMiLCJib3JkZXJUb3BSaWdodFJhZGl1cyIsInRyYW5zaXRpb24iLCJ0cmFuc2l0aW9ucyIsImNyZWF0ZSIsImR1cmF0aW9uIiwic2hvcnRlciIsImVhc2luZyIsImVhc2VPdXQiLCJob3ZlckJnIiwiZm9jdXNlZCIsImRpc2FibGVkIiwiZGlzYWJsZWRCZyIsImJvcmRlckJvdHRvbSIsImNvbG9yIiwibWFpbiIsImxlZnQiLCJib3R0b20iLCJjb250ZW50IiwicmlnaHQiLCJ0cmFuc2Zvcm0iLCJwb2ludGVyRXZlbnRzIiwiZXJyb3IiLCJib3JkZXJCb3R0b21Db2xvciIsImNvbW1vbiIsIm9uQmFja2dyb3VuZENoYW5uZWwiLCJvcGFjaXR5IiwiaW5wdXRVbmRlcmxpbmUiLCJ0ZXh0IiwicHJpbWFyeSIsImJvcmRlckJvdHRvbVN0eWxlIiwic3RhcnRBZG9ybm1lbnQiLCJwYWRkaW5nTGVmdCIsImVuZEFkb3JubWVudCIsInBhZGRpbmdSaWdodCIsIm11bHRpbGluZSIsInBhZGRpbmciLCJzaXplIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iLCJoaWRkZW5MYWJlbCIsIkZpbGxlZElucHV0SW5wdXQiLCJXZWJraXRCb3hTaGFkb3ciLCJXZWJraXRUZXh0RmlsbENvbG9yIiwiY2FyZXRDb2xvciIsImdldENvbG9yU2NoZW1lU2VsZWN0b3IiLCJpblByb3BzIiwicmVmIiwiX3JlZiIsIl9zbG90cyRyb290IiwiX3JlZjIiLCJfc2xvdHMkaW5wdXQiLCJjb21wb25lbnRzIiwiY29tcG9uZW50c1Byb3BzIiwiY29tcG9uZW50c1Byb3BzUHJvcCIsImZ1bGxXaWR0aCIsImlucHV0Q29tcG9uZW50Iiwic2xvdFByb3BzIiwic2xvdHMiLCJ0eXBlIiwib3RoZXIiLCJjbGFzc2VzIiwicm9vdCIsImlucHV0IiwiY29tcG9zZWRDbGFzc2VzIiwiY29tcG9zZUNsYXNzZXMiLCJ1c2VVdGlsaXR5Q2xhc3NlcyIsImZpbGxlZElucHV0Q29tcG9uZW50c1Byb3BzIiwiZGVlcG1lcmdlIiwiUm9vdFNsb3QiLCJSb290IiwiSW5wdXRTbG90IiwiSW5wdXQiLCJtdWlOYW1lIiwiZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcyIsIkZvcm1Db250cm9sUm9vdCIsImNhcGl0YWxpemUiLCJtYXJnaW4iLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsIm1pbldpZHRoIiwiYm9yZGVyIiwidmVydGljYWxBbGlnbiIsIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSIsIndpZHRoIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJjb21wb25lbnQiLCJ2aXN1YWxseUZvY3VzZWQiLCJyZXF1aXJlZCIsInZhcmlhbnQiLCJhZG9ybmVkU3RhcnQiLCJzZXRBZG9ybmVkU3RhcnQiLCJpbml0aWFsQWRvcm5lZFN0YXJ0IiwiZm9yRWFjaCIsImNoaWxkIiwiaXNNdWlFbGVtZW50IiwiZmlsbGVkIiwic2V0RmlsbGVkIiwiaW5pdGlhbEZpbGxlZCIsImlucHV0UHJvcHMiLCJmb2N1c2VkU3RhdGUiLCJzZXRGb2N1c2VkIiwidW5kZWZpbmVkIiwicmVnaXN0ZXJFZmZlY3QiLCJjaGlsZENvbnRleHQiLCJvbkJsdXIiLCJvbkVtcHR5Iiwib25GaWxsZWQiLCJvbkZvY3VzIiwiRm9ybUNvbnRyb2xDb250ZXh0IiwiUHJvdmlkZXIiLCJ2YWx1ZSIsImFzIiwiY2xzeCIsImZvcm1Db250cm9sU3RhdGUiLCJzdGF0ZXMiLCJtdWlGb3JtQ29udHJvbCIsInJlZHVjZSIsImFjYyIsInN0YXRlIiwidXNlRm9ybUNvbnRyb2wiLCJnZXRGb3JtSGVscGVyVGV4dFV0aWxpdHlDbGFzc2VzIiwiX3NwYW4iLCJGb3JtSGVscGVyVGV4dFJvb3QiLCJjb250YWluZWQiLCJzZWNvbmRhcnkiLCJ0eXBvZ3JhcGh5IiwiY2FwdGlvbiIsInRleHRBbGlnbiIsIm1hcmdpblJpZ2h0IiwibWFyZ2luTGVmdCIsImZjcyIsImRlZmF1bHRUaGVtZSIsInRoZW1lSWQiLCJnZXRHcmlkVXRpbGl0eUNsYXNzIiwiR1JJRF9TSVpFUyIsIm1hcCIsInNwYWNpbmciLCJkaXJlY3Rpb24iLCJ3cmFwIiwiZ2V0T2Zmc2V0IiwidmFsIiwicGFyc2UiLCJwYXJzZUZsb2F0IiwiU3RyaW5nIiwicmVwbGFjZSIsImV4dHJhY3RaZXJvVmFsdWVCcmVha3BvaW50S2V5cyIsImJyZWFrcG9pbnRzIiwidmFsdWVzIiwibm9uWmVyb0tleSIsIk9iamVjdCIsImtleXMiLCJrZXkiLCJzb3J0ZWRCcmVha3BvaW50S2V5c0J5VmFsdWUiLCJzb3J0IiwiYSIsImIiLCJzbGljZSIsImluZGV4T2YiLCJHcmlkUm9vdCIsImNvbnRhaW5lciIsIml0ZW0iLCJ6ZXJvTWluV2lkdGgiLCJzcGFjaW5nU3R5bGVzIiwiTnVtYmVyIiwiaXNOYU4iLCJicmVha3BvaW50IiwicHVzaCIsInJlc29sdmVTcGFjaW5nU3R5bGVzIiwiYnJlYWtwb2ludHNTdHlsZXMiLCJib3hTaXppbmciLCJmbGV4V3JhcCIsImRpcmVjdGlvblZhbHVlcyIsInByb3BWYWx1ZSIsIm91dHB1dCIsIm1heFdpZHRoIiwicm93U3BhY2luZyIsInJvd1NwYWNpbmdWYWx1ZXMiLCJ6ZXJvVmFsdWVCcmVha3BvaW50S2V5cyIsIl96ZXJvVmFsdWVCcmVha3BvaW50SyIsInRoZW1lU3BhY2luZyIsImluY2x1ZGVzIiwiY29sdW1uU3BhY2luZyIsImNvbHVtblNwYWNpbmdWYWx1ZXMiLCJfemVyb1ZhbHVlQnJlYWtwb2ludEsyIiwiZ2xvYmFsU3R5bGVzIiwiZmxleEJhc2lzIiwiZmxleEdyb3ciLCJmbGV4U2hyaW5rIiwiY29sdW1uc0JyZWFrcG9pbnRWYWx1ZXMiLCJjb2x1bW5zIiwiY29sdW1uVmFsdWUiLCJNYXRoIiwicm91bmQiLCJtb3JlIiwiYXNzaWduIiwidXAiLCJHcmlkIiwidGhlbWVQcm9wcyIsInVzZVRoZW1lIiwiZXh0ZW5kU3hQcm9wIiwiY29sdW1uc1Byb3AiLCJjb2x1bW5TcGFjaW5nUHJvcCIsInJvd1NwYWNpbmdQcm9wIiwiY29sdW1uc0NvbnRleHQiLCJicmVha3BvaW50c1ZhbHVlcyIsIm90aGVyRmlsdGVyZWQiLCJzcGFjaW5nQ2xhc3NlcyIsInJlc29sdmVTcGFjaW5nQ2xhc3NlcyIsImJyZWFrcG9pbnRzQ2xhc3NlcyIsImdldFNjYWxlIiwiZW50ZXJpbmciLCJlbnRlcmVkIiwiaXNXZWJLaXQxNTQiLCJuYXZpZ2F0b3IiLCJ0ZXN0IiwidXNlckFnZW50IiwiR3JvdyIsImFkZEVuZExpc3RlbmVyIiwiYXBwZWFyIiwiaW4iLCJpblByb3AiLCJvbkVudGVyIiwib25FbnRlcmVkIiwib25FbnRlcmluZyIsIm9uRXhpdCIsIm9uRXhpdGVkIiwib25FeGl0aW5nIiwic3R5bGUiLCJ0aW1lb3V0IiwiVHJhbnNpdGlvbkNvbXBvbmVudCIsInRpbWVyIiwiYXV0b1RpbWVvdXQiLCJub2RlUmVmIiwiaGFuZGxlUmVmIiwibm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayIsImNhbGxiYWNrIiwibWF5YmVJc0FwcGVhcmluZyIsIm5vZGUiLCJjdXJyZW50IiwiaGFuZGxlRW50ZXJpbmciLCJoYW5kbGVFbnRlciIsImlzQXBwZWFyaW5nIiwidHJhbnNpdGlvbkR1cmF0aW9uIiwiZGVsYXkiLCJ0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24iLCJnZXRBdXRvSGVpZ2h0RHVyYXRpb24iLCJjbGllbnRIZWlnaHQiLCJqb2luIiwiaGFuZGxlRW50ZXJlZCIsImhhbmRsZUV4aXRpbmciLCJoYW5kbGVFeGl0IiwiaGFuZGxlRXhpdGVkIiwibmV4dCIsInN0YXJ0IiwiY2hpbGRQcm9wcyIsInZpc2liaWxpdHkiLCJtdWlTdXBwb3J0QXV0byIsImdldElucHV0VXRpbGl0eUNsYXNzIiwiSW5wdXRSb290IiwiZm9ybUNvbnRyb2wiLCJJbnB1dElucHV0IiwiaW5wdXRDb21wb25lbnRzUHJvcHMiLCJyb290T3ZlcnJpZGVzUmVzb2x2ZXIiLCJhZG9ybmVkRW5kIiwic2l6ZVNtYWxsIiwiaW5wdXRPdmVycmlkZXNSZXNvbHZlciIsImlucHV0U2l6ZVNtYWxsIiwiaW5wdXRNdWx0aWxpbmUiLCJpbnB1dFR5cGVTZWFyY2giLCJpbnB1dEFkb3JuZWRTdGFydCIsImlucHV0QWRvcm5lZEVuZCIsImlucHV0SGlkZGVuTGFiZWwiLCJJbnB1dEJhc2VSb290IiwiYm9keTEiLCJsaW5lSGVpZ2h0IiwiY3Vyc29yIiwiYWxpZ25JdGVtcyIsIklucHV0QmFzZUNvbXBvbmVudCIsInBsYWNlaG9sZGVyIiwiaW5wdXRQbGFjZWhvbGRlciIsInBsYWNlaG9sZGVySGlkZGVuIiwicGxhY2Vob2xkZXJWaXNpYmxlIiwiZm9udCIsImxldHRlclNwYWNpbmciLCJiYWNrZ3JvdW5kIiwiaGVpZ2h0IiwiV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3IiLCJhbmltYXRpb25OYW1lIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJvdXRsaW5lIiwiYm94U2hhZG93IiwiV2Via2l0QXBwZWFyYW5jZSIsInJlc2l6ZSIsIk1vekFwcGVhcmFuY2UiLCJpbnB1dEdsb2JhbFN0eWxlcyIsImZyb20iLCJfc2xvdFByb3BzJGlucHV0IiwiYXJpYURlc2NyaWJlZGJ5IiwiYXV0b0NvbXBsZXRlIiwiYXV0b0ZvY3VzIiwiZGVmYXVsdFZhbHVlIiwiZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlcyIsImlkIiwiaW5wdXRQcm9wc1Byb3AiLCJpbnB1dFJlZiIsImlucHV0UmVmUHJvcCIsIm1heFJvd3MiLCJtaW5Sb3dzIiwib25DaGFuZ2UiLCJvbkNsaWNrIiwib25LZXlEb3duIiwib25LZXlVcCIsInJlYWRPbmx5IiwicmVuZGVyU3VmZml4Iiwicm93cyIsInZhbHVlUHJvcCIsImlzQ29udHJvbGxlZCIsImhhbmRsZUlucHV0UmVmV2FybmluZyIsImluc3RhbmNlIiwiaGFuZGxlSW5wdXRSZWYiLCJjaGVja0RpcnR5Iiwib2JqIiwiSW5wdXRDb21wb25lbnQiLCJCb29sZWFuIiwiZyIsInJvb3RQcm9wcyIsImV2ZW50IiwiY3VycmVudFRhcmdldCIsInRhcmdldCIsImZvY3VzIiwib25BbmltYXRpb25TdGFydCIsImFyZ3MiLCJlbGVtZW50IiwiRXJyb3IiLCJzdG9wUHJvcGFnYXRpb24iLCJnZXRJbnB1dEJhc2VVdGlsaXR5Q2xhc3MiLCJoYXNWYWx1ZSIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImlzRmlsbGVkIiwiU1NSIiwiaXNBZG9ybmVkU3RhcnQiLCJnZXRGb3JtTGFiZWxVdGlsaXR5Q2xhc3NlcyIsIkZvcm1MYWJlbFJvb3QiLCJjb2xvclNlY29uZGFyeSIsIkFzdGVyaXNrQ29tcG9uZW50IiwiYXN0ZXJpc2siLCJnZXRJbnB1dExhYmVsVXRpbGl0eUNsYXNzZXMiLCJJbnB1dExhYmVsUm9vdCIsInNocmluayIsImRpc2FibGVBbmltYXRpb24iLCJhbmltYXRlZCIsInRyYW5zZm9ybU9yaWdpbiIsIndoaXRlU3BhY2UiLCJvdmVyZmxvdyIsInRleHRPdmVyZmxvdyIsInRvcCIsInpJbmRleCIsInVzZXJTZWxlY3QiLCJzaHJpbmtQcm9wIiwiZ2V0TGlzdFV0aWxpdHlDbGFzcyIsIkxpc3RSb290IiwiZGlzYWJsZVBhZGRpbmciLCJkZW5zZSIsInN1YmhlYWRlciIsImxpc3RTdHlsZSIsImNvbnRleHQiLCJuZXh0SXRlbSIsImxpc3QiLCJkaXNhYmxlTGlzdFdyYXAiLCJmaXJzdENoaWxkIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwicHJldmlvdXNJdGVtIiwibGFzdENoaWxkIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsInRleHRDcml0ZXJpYU1hdGNoZXMiLCJuZXh0Rm9jdXMiLCJ0ZXh0Q3JpdGVyaWEiLCJpbm5lclRleHQiLCJ0ZXh0Q29udGVudCIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsInJlcGVhdGluZyIsIm1vdmVGb2N1cyIsImN1cnJlbnRGb2N1cyIsImRpc2FibGVkSXRlbXNGb2N1c2FibGUiLCJ0cmF2ZXJzYWxGdW5jdGlvbiIsIndyYXBwZWRPbmNlIiwibmV4dEZvY3VzRGlzYWJsZWQiLCJnZXRBdHRyaWJ1dGUiLCJoYXNBdHRyaWJ1dGUiLCJhY3Rpb25zIiwiYXV0b0ZvY3VzSXRlbSIsImxpc3RSZWYiLCJ0ZXh0Q3JpdGVyaWFSZWYiLCJwcmV2aW91c0tleU1hdGNoZWQiLCJsYXN0VGltZSIsInVzZUVuaGFuY2VkRWZmZWN0IiwiYWRqdXN0U3R5bGVGb3JTY3JvbGxiYXIiLCJjb250YWluZXJFbGVtZW50Iiwibm9FeHBsaWNpdFdpZHRoIiwic2Nyb2xsYmFyU2l6ZSIsImdldFNjcm9sbGJhclNpemUiLCJvd25lckRvY3VtZW50IiwidXNlRm9ya1JlZiIsImFjdGl2ZUl0ZW1JbmRleCIsImluZGV4Iiwic2VsZWN0ZWQiLCJtdWlTa2lwTGlzdEhpZ2hsaWdodCIsIml0ZW1zIiwibmV3Q2hpbGRQcm9wcyIsInRhYkluZGV4Iiwicm9sZSIsImFjdGl2ZUVsZW1lbnQiLCJwcmV2ZW50RGVmYXVsdCIsImNyaXRlcmlhIiwibG93ZXJLZXkiLCJjdXJyVGltZSIsInBlcmZvcm1hbmNlIiwibm93Iiwia2VlcEZvY3VzT25DdXJyZW50IiwiZ2V0TWVudVV0aWxpdHlDbGFzcyIsIl9leGNsdWRlZDIiLCJSVExfT1JJR0lOIiwidmVydGljYWwiLCJob3Jpem9udGFsIiwiTFRSX09SSUdJTiIsIk1lbnVSb290IiwiUG9wb3ZlciIsIk1lbnVQYXBlciIsInBhcGVyIiwibWF4SGVpZ2h0IiwiV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmciLCJNZW51TWVudUxpc3QiLCJfc2xvdHMkcGFwZXIiLCJfc2xvdFByb3BzJHBhcGVyIiwiZGlzYWJsZUF1dG9Gb2N1c0l0ZW0iLCJNZW51TGlzdFByb3BzIiwib25DbG9zZSIsIm9wZW4iLCJQYXBlclByb3BzIiwiUG9wb3ZlckNsYXNzZXMiLCJUcmFuc2l0aW9uUHJvcHMiLCJpc1J0bCIsIm1lbnVMaXN0QWN0aW9uc1JlZiIsIlBhcGVyU2xvdCIsInBhcGVyRXh0ZXJuYWxTbG90UHJvcHMiLCJyb290U2xvdFByb3BzIiwidXNlU2xvdFByb3BzIiwiZWxlbWVudFR5cGUiLCJleHRlcm5hbFNsb3RQcm9wcyIsInBhcGVyU2xvdFByb3BzIiwiYW5jaG9yT3JpZ2luIiwiYXJpYUhpZGRlbiIsInNob3ciLCJzZXRBdHRyaWJ1dGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJnZXRQYWRkaW5nUmlnaHQiLCJwYXJzZUludCIsIm93bmVyV2luZG93IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImFyaWFIaWRkZW5TaWJsaW5ncyIsIm1vdW50RWxlbWVudCIsImN1cnJlbnRFbGVtZW50IiwiZWxlbWVudHNUb0V4Y2x1ZGUiLCJibGFja2xpc3QiLCJjYWxsIiwiaXNOb3RFeGNsdWRlZEVsZW1lbnQiLCJpc05vdEZvcmJpZGRlbkVsZW1lbnQiLCJpc0ZvcmJpZGRlblRhZ05hbWUiLCJ0YWdOYW1lIiwiaXNJbnB1dEhpZGRlbiIsImlzQXJpYUhpZGRlbkZvcmJpZGRlbk9uRWxlbWVudCIsImZpbmRJbmRleE9mIiwiaWR4Iiwic29tZSIsImRlZmF1bHRNYW5hZ2VyIiwiY29uc3RydWN0b3IiLCJ0aGlzIiwiY29udGFpbmVycyIsIm1vZGFscyIsImFkZCIsIm1vZGFsIiwibW9kYWxJbmRleCIsIm1vZGFsUmVmIiwiaGlkZGVuU2libGluZ3MiLCJnZXRIaWRkZW5TaWJsaW5ncyIsIm1vdW50IiwiY29udGFpbmVySW5kZXgiLCJyZXN0b3JlIiwiY29udGFpbmVySW5mbyIsInJlc3RvcmVTdHlsZSIsImRpc2FibGVTY3JvbGxMb2NrIiwiZG9jIiwiYm9keSIsImlubmVyV2lkdGgiLCJkb2N1bWVudEVsZW1lbnQiLCJjbGllbnRXaWR0aCIsInNjcm9sbEhlaWdodCIsImlzT3ZlcmZsb3dpbmciLCJwcm9wZXJ0eSIsImVsIiwiZml4ZWRFbGVtZW50cyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJzY3JvbGxDb250YWluZXIiLCJwYXJlbnROb2RlIiwiRG9jdW1lbnRGcmFnbWVudCIsInBhcmVudCIsInBhcmVudEVsZW1lbnQiLCJjb250YWluZXJXaW5kb3ciLCJub2RlTmFtZSIsIm92ZXJmbG93WSIsIm92ZXJmbG93WCIsInNldFByb3BlcnR5IiwicmVtb3ZlUHJvcGVydHkiLCJoYW5kbGVDb250YWluZXIiLCJyZW1vdmUiLCJhcmlhSGlkZGVuU3RhdGUiLCJzcGxpY2UiLCJuZXh0VG9wIiwiaXNUb3BNb2RhbCIsImdldE1vZGFsVXRpbGl0eUNsYXNzIiwiTW9kYWxSb290IiwiZXhpdGVkIiwiaGlkZGVuIiwiTW9kYWxCYWNrZHJvcCIsIkJhY2tkcm9wIiwiYmFja2Ryb3AiLCJfc2xvdHMkYmFja2Ryb3AiLCJfc2xvdFByb3BzJHJvb3QiLCJfc2xvdFByb3BzJGJhY2tkcm9wIiwiQmFja2Ryb3BDb21wb25lbnQiLCJCYWNrZHJvcFByb3BzIiwiY2xvc2VBZnRlclRyYW5zaXRpb24iLCJkaXNhYmxlQXV0b0ZvY3VzIiwiZGlzYWJsZUVuZm9yY2VGb2N1cyIsImRpc2FibGVFc2NhcGVLZXlEb3duIiwiZGlzYWJsZVBvcnRhbCIsImRpc2FibGVSZXN0b3JlRm9jdXMiLCJoaWRlQmFja2Ryb3AiLCJrZWVwTW91bnRlZCIsIm9uQmFja2Ryb3BDbGljayIsInByb3BzV2l0aERlZmF1bHRzIiwiZ2V0Um9vdFByb3BzIiwiZ2V0QmFja2Ryb3BQcm9wcyIsImdldFRyYW5zaXRpb25Qcm9wcyIsInBvcnRhbFJlZiIsImhhc1RyYW5zaXRpb24iLCJwYXJhbWV0ZXJzIiwibWFuYWdlciIsIm9uVHJhbnNpdGlvbkVudGVyIiwib25UcmFuc2l0aW9uRXhpdGVkIiwicm9vdFJlZiIsIm1vdW50Tm9kZVJlZiIsInNldEV4aXRlZCIsImhhc093blByb3BlcnR5IiwiZ2V0SGFzVHJhbnNpdGlvbiIsImFyaWFIaWRkZW5Qcm9wIiwiZ2V0TW9kYWwiLCJoYW5kbGVNb3VudGVkIiwic2Nyb2xsVG9wIiwiaGFuZGxlT3BlbiIsInVzZUV2ZW50Q2FsbGJhY2siLCJyZXNvbHZlZENvbnRhaW5lciIsImdldENvbnRhaW5lciIsImhhbmRsZVBvcnRhbFJlZiIsImhhbmRsZUNsb3NlIiwiY3JlYXRlSGFuZGxlS2V5RG93biIsIm90aGVySGFuZGxlcnMiLCJfb3RoZXJIYW5kbGVycyRvbktleUQiLCJ3aGljaCIsImNyZWF0ZUhhbmRsZUJhY2tkcm9wQ2xpY2siLCJfb3RoZXJIYW5kbGVycyRvbkNsaWMiLCJwcm9wc0V2ZW50SGFuZGxlcnMiLCJleHRyYWN0RXZlbnRIYW5kbGVycyIsImV4dGVybmFsRXZlbnRIYW5kbGVycyIsImNyZWF0ZUNoYWluZWRGdW5jdGlvbiIsIkJhY2tkcm9wU2xvdCIsImJhY2tkcm9wU2xvdFByb3BzIiwiZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcyIsImdldFNsb3RQcm9wcyIsImFkZGl0aW9uYWxQcm9wcyIsImJhY2tkcm9wUHJvcHMiLCJlIiwiUG9ydGFsIiwiRm9jdXNUcmFwIiwiaXNFbmFibGVkIl0sInNvdXJjZVJvb3QiOiIifQ==