/*! For license information please see 208.8cc5cabf.js.LICENSE.txt */ "use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[208],{1568:(e,t,r)=>{r.d(t,{A:()=>Q});var n=r(8168),o=r(8587),a=r(6540),i=r(4164),l=r(3272),s=r(9453),c=(r(4363),r(5659)),u=r(4661),d=r(6248),p=r(8466),f=r(3179),m=r(4911),h=r(2891),A=r(1848),g=r(6852);const v=r(2501).A;var b=r(8413),y=r(1609);function x(e){return(0,y.A)("MuiSelect",e)}const S=(0,b.A)("MuiSelect",["root","select","multiple","filled","outlined","standard","disabled","focused","icon","iconOpen","iconFilled","iconOutlined","iconStandard","nativeInput","error"]);var w,k=r(4848);const M=["aria-describedby","aria-label","autoFocus","autoWidth","children","className","defaultOpen","defaultValue","disabled","displayEmpty","error","IconComponent","inputRef","labelId","MenuProps","multiple","name","onBlur","onChange","onClose","onFocus","onOpen","open","readOnly","renderValue","SelectDisplayProps","tabIndex","type","value","variant"],R=(0,A.Ay)("div",{name:"MuiSelect",slot:"Select",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[{[`&.${S.select}`]:t.select},{[`&.${S.select}`]:t[r.variant]},{[`&.${S.error}`]:t.error},{[`&.${S.multiple}`]:t.multiple}]}})(m.Ku,{[`&.${S.select}`]:{height:"auto",minHeight:"1.4375em",textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden"}}),C=(0,A.Ay)("svg",{name:"MuiSelect",slot:"Icon",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[t.icon,r.variant&&t[`icon${(0,p.A)(r.variant)}`],r.open&&t.iconOpen]}})(m.XV),O=(0,A.Ay)("input",{shouldForwardProp:e=>(0,A._n)(e)&&"classes"!==e,name:"MuiSelect",slot:"NativeInput",overridesResolver:(e,t)=>t.nativeInput})({bottom:0,left:0,position:"absolute",opacity:0,pointerEvents:"none",width:"100%",boxSizing:"border-box"});function I(e,t){return"object"==typeof t&&null!==t?e===t:String(e)===String(t)}function P(e){return null==e||"string"==typeof e&&!e.trim()}const $=a.forwardRef((function(e,t){var r;const{"aria-describedby":l,"aria-label":m,autoFocus:A,autoWidth:b,children:y,className:S,defaultOpen:$,defaultValue:F,disabled:W,displayEmpty:T,error:j=!1,IconComponent:z,inputRef:B,labelId:N,MenuProps:E={},multiple:_,name:D,onBlur:V,onChange:L,onClose:H,onFocus:q,onOpen:G,open:K,readOnly:U,renderValue:J,SelectDisplayProps:X={},tabIndex:Q,value:Y,variant:Z="standard"}=e,ee=(0,o.A)(e,M),[te,re]=v({controlled:Y,default:F,name:"Select"}),[ne,oe]=v({controlled:K,default:$,name:"Select"}),ae=a.useRef(null),ie=a.useRef(null),[le,se]=a.useState(null),{current:ce}=a.useRef(null!=K),[ue,de]=a.useState(),pe=(0,g.A)(t,B),fe=a.useCallback((e=>{ie.current=e,e&&se(e)}),[]),me=null==le?void 0:le.parentNode;a.useImperativeHandle(pe,(()=>({focus:()=>{ie.current.focus()},node:ae.current,value:te})),[te]),a.useEffect((()=>{$&&ne&&le&&!ce&&(de(b?null:me.clientWidth),ie.current.focus())}),[le,b]),a.useEffect((()=>{A&&ie.current.focus()}),[A]),a.useEffect((()=>{if(!N)return;const e=(0,d.A)(ie.current).getElementById(N);if(e){const t=()=>{getSelection().isCollapsed&&ie.current.focus()};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}}),[N]);const he=(e,t)=>{e?G&&G(t):H&&H(t),ce||(de(b?null:me.clientWidth),oe(e))},Ae=a.Children.toArray(y),ge=e=>t=>{let r;if(t.currentTarget.hasAttribute("tabindex")){if(_){r=Array.isArray(te)?te.slice():[];const t=te.indexOf(e.props.value);-1===t?r.push(e.props.value):r.splice(t,1)}else r=e.props.value;if(e.props.onClick&&e.props.onClick(t),te!==r&&(re(r),L)){const n=t.nativeEvent||t,o=new n.constructor(n.type,n);Object.defineProperty(o,"target",{writable:!0,value:{value:r,name:D}}),L(o,e)}_||he(!1,t)}},ve=null!==le&≠let be,ye;delete ee["aria-invalid"];const xe=[];let Se=!1,we=!1;((0,h.lq)({value:te})||T)&&(J?be=J(te):Se=!0);const ke=Ae.map((e=>{if(!a.isValidElement(e))return null;let t;if(_){if(!Array.isArray(te))throw new Error((0,s.A)(2));t=te.some((t=>I(t,e.props.value))),t&&Se&&xe.push(e.props.children)}else t=I(te,e.props.value),t&&Se&&(ye=e.props.children);return t&&(we=!0),a.cloneElement(e,{"aria-selected":t?"true":"false",onClick:ge(e),onKeyUp:t=>{" "===t.key&&t.preventDefault(),e.props.onKeyUp&&e.props.onKeyUp(t)},role:"option",selected:t,value:void 0,"data-value":e.props.value})}));Se&&(be=_?0===xe.length?null:xe.reduce(((e,t,r)=>(e.push(t),r{const{classes:t,variant:r,disabled:n,multiple:o,open:a,error:i}=e,l={select:["select",r,n&&"disabled",o&&"multiple",i&&"error"],icon:["icon",`icon${(0,p.A)(r)}`,a&&"iconOpen",n&&"disabled"],nativeInput:["nativeInput"]};return(0,c.A)(l,x,t)})(Oe),Pe=(0,n.A)({},E.PaperProps,null==(r=E.slotProps)?void 0:r.paper),$e=(0,u.A)();return(0,k.jsxs)(a.Fragment,{children:[(0,k.jsx)(R,(0,n.A)({ref:fe,tabIndex:Me,role:"combobox","aria-controls":$e,"aria-disabled":W?"true":void 0,"aria-expanded":ve?"true":"false","aria-haspopup":"listbox","aria-label":m,"aria-labelledby":[N,Ce].filter(Boolean).join(" ")||void 0,"aria-describedby":l,onKeyDown:e=>{U||-1!==[" ","ArrowUp","ArrowDown","Enter"].indexOf(e.key)&&(e.preventDefault(),he(!0,e))},onMouseDown:W||U?null:e=>{0===e.button&&(e.preventDefault(),ie.current.focus(),he(!0,e))},onBlur:e=>{!ve&&V&&(Object.defineProperty(e,"target",{writable:!0,value:{value:te,name:D}}),V(e))},onFocus:q},X,{ownerState:Oe,className:(0,i.A)(X.className,Ie.select,S),id:Ce,children:P(be)?w||(w=(0,k.jsx)("span",{className:"notranslate",children:"​"})):be})),(0,k.jsx)(O,(0,n.A)({"aria-invalid":j,value:Array.isArray(te)?te.join(","):te,name:D,ref:ae,"aria-hidden":!0,onChange:e=>{const t=Ae.find((t=>t.props.value===e.target.value));void 0!==t&&(re(t.props.value),L&&L(e,t))},tabIndex:-1,disabled:W,className:Ie.nativeInput,autoFocus:A,ownerState:Oe},ee)),(0,k.jsx)(C,{as:z,className:Ie.icon,ownerState:Oe}),(0,k.jsx)(f.A,(0,n.A)({id:`menu-${D||""}`,anchorEl:me,open:ve,onClose:e=>{he(!1,e)},anchorOrigin:{vertical:"bottom",horizontal:"center"},transformOrigin:{vertical:"top",horizontal:"center"}},E,{MenuListProps:(0,n.A)({"aria-labelledby":N,role:"listbox","aria-multiselectable":_?"true":void 0,disableListWrap:!0,id:$e},E.MenuListProps),slotProps:(0,n.A)({},E.slotProps,{paper:(0,n.A)({},Pe,{style:(0,n.A)({minWidth:Re},null!=Pe?Pe.style:null)})}),children:ke}))]})}));var F=r(8086),W=r(9716),T=r(3541);function j(e){return(0,y.A)("MuiSvgIcon",e)}(0,b.A)("MuiSvgIcon",["root","colorPrimary","colorSecondary","colorAction","colorError","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeMedium","fontSizeLarge"]);const z=["children","className","color","component","fontSize","htmlColor","inheritViewBox","titleAccess","viewBox"],B=(0,A.Ay)("svg",{name:"MuiSvgIcon",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[t.root,"inherit"!==r.color&&t[`color${(0,p.A)(r.color)}`],t[`fontSize${(0,p.A)(r.fontSize)}`]]}})((({theme:e,ownerState:t})=>{var r,n,o,a,i,l,s,c,u,d,p,f,m;return{userSelect:"none",width:"1em",height:"1em",display:"inline-block",fill:t.hasSvgAsChild?void 0:"currentColor",flexShrink:0,transition:null==(r=e.transitions)||null==(n=r.create)?void 0:n.call(r,"fill",{duration:null==(o=e.transitions)||null==(o=o.duration)?void 0:o.shorter}),fontSize:{inherit:"inherit",small:(null==(a=e.typography)||null==(i=a.pxToRem)?void 0:i.call(a,20))||"1.25rem",medium:(null==(l=e.typography)||null==(s=l.pxToRem)?void 0:s.call(l,24))||"1.5rem",large:(null==(c=e.typography)||null==(u=c.pxToRem)?void 0:u.call(c,35))||"2.1875rem"}[t.fontSize],color:null!=(d=null==(p=(e.vars||e).palette)||null==(p=p[t.color])?void 0:p.main)?d:{action:null==(f=(e.vars||e).palette)||null==(f=f.action)?void 0:f.active,disabled:null==(m=(e.vars||e).palette)||null==(m=m.action)?void 0:m.disabled,inherit:void 0}[t.color]}})),N=a.forwardRef((function(e,t){const r=(0,T.A)({props:e,name:"MuiSvgIcon"}),{children:l,className:s,color:u="inherit",component:d="svg",fontSize:f="medium",htmlColor:m,inheritViewBox:h=!1,titleAccess:A,viewBox:g="0 0 24 24"}=r,v=(0,o.A)(r,z),b=a.isValidElement(l)&&"svg"===l.type,y=(0,n.A)({},r,{color:u,component:d,fontSize:f,instanceFontSize:e.fontSize,inheritViewBox:h,viewBox:g,hasSvgAsChild:b}),x={};h||(x.viewBox=g);const S=(e=>{const{color:t,fontSize:r,classes:n}=e,o={root:["root","inherit"!==t&&`color${(0,p.A)(t)}`,`fontSize${(0,p.A)(r)}`]};return(0,c.A)(o,j,n)})(y);return(0,k.jsxs)(B,(0,n.A)({as:d,className:(0,i.A)(S.root,s),focusable:"false",color:m,"aria-hidden":!A||void 0,role:A?"img":void 0,ref:t},x,v,b&&l.props,{ownerState:y,children:[b?l.props.children:l,A?(0,k.jsx)("title",{children:A}):null]}))}));N.muiName="SvgIcon";const E=N,_=function(e,t){function r(t,r){return(0,k.jsx)(E,(0,n.A)({"data-testid":"ArrowDropDownIcon",ref:r},t,{children:e}))}return r.muiName=E.muiName,a.memo(a.forwardRef(r))}((0,k.jsx)("path",{d:"M7 10l5 5 5-5z"}));var D=r(1881),V=r(2335),L=r(6757);const H=["autoWidth","children","classes","className","defaultOpen","displayEmpty","IconComponent","id","input","inputProps","label","labelId","MenuProps","multiple","native","onClose","onOpen","open","renderValue","SelectDisplayProps","variant"],q=["root"],G={name:"MuiSelect",overridesResolver:(e,t)=>t.root,shouldForwardProp:e=>(0,A.ep)(e)&&"variant"!==e,slot:"Root"},K=(0,A.Ay)(D.A,G)(""),U=(0,A.Ay)(L.A,G)(""),J=(0,A.Ay)(V.A,G)(""),X=a.forwardRef((function(e,t){const r=(0,T.A)({name:"MuiSelect",props:e}),{autoWidth:s=!1,children:c,classes:u={},className:d,defaultOpen:p=!1,displayEmpty:f=!1,IconComponent:h=_,id:A,input:v,inputProps:b,label:y,labelId:x,MenuProps:S,multiple:w=!1,native:M=!1,onClose:R,onOpen:C,open:O,renderValue:I,SelectDisplayProps:P,variant:j="outlined"}=r,z=(0,o.A)(r,H),B=M?m.Ay:$,N=(0,W.A)(),E=(0,F.A)({props:r,muiFormControl:N,states:["variant","error"]}),D=E.variant||j,V=(0,n.A)({},r,{variant:D,classes:u}),L=(e=>{const{classes:t}=e;return t})(V),G=(0,o.A)(L,q),X=v||{standard:(0,k.jsx)(K,{ownerState:V}),outlined:(0,k.jsx)(U,{label:y,ownerState:V}),filled:(0,k.jsx)(J,{ownerState:V})}[D],Q=(0,g.A)(t,X.ref);return(0,k.jsx)(a.Fragment,{children:a.cloneElement(X,(0,n.A)({inputComponent:B,inputProps:(0,n.A)({children:c,error:E.error,IconComponent:h,variant:D,type:void 0,multiple:w},M?{id:A}:{autoWidth:s,defaultOpen:p,displayEmpty:f,labelId:x,MenuProps:S,onClose:R,onOpen:C,open:O,renderValue:I,SelectDisplayProps:(0,n.A)({id:A},P)},b,{classes:b?(0,l.A)(G,b.classes):G},v?v.props.inputProps:{})},w&&M&&"outlined"===D?{notched:!0}:{},{ref:Q,className:(0,i.A)(X.props.className,d,L.root)},!v&&{variant:D},z))})}));X.muiName="Select";const Q=X},9890:(e,t,r)=>{r.d(t,{A:()=>M});var n=r(8168),o=r(8587),a=r(6540),i=r(4164),l=r(5659),s=r(4661),c=r(1848),u=r(3541),d=r(1881),p=r(2335),f=r(6757),m=r(4433),h=r(779),A=r(6347),g=r(1568),v=r(8413),b=r(1609);function y(e){return(0,b.A)("MuiTextField",e)}(0,v.A)("MuiTextField",["root"]);var x=r(4848);const S=["autoComplete","autoFocus","children","className","color","defaultValue","disabled","error","FormHelperTextProps","fullWidth","helperText","id","InputLabelProps","inputProps","InputProps","inputRef","label","maxRows","minRows","multiline","name","onBlur","onChange","onFocus","placeholder","required","rows","select","SelectProps","type","value","variant"],w={standard:d.A,filled:p.A,outlined:f.A},k=(0,c.Ay)(h.A,{name:"MuiTextField",slot:"Root",overridesResolver:(e,t)=>t.root})({}),M=a.forwardRef((function(e,t){const r=(0,u.A)({props:e,name:"MuiTextField"}),{autoComplete:a,autoFocus:c=!1,children:d,className:p,color:f="primary",defaultValue:h,disabled:v=!1,error:b=!1,FormHelperTextProps:M,fullWidth:R=!1,helperText:C,id:O,InputLabelProps:I,inputProps:P,InputProps:$,inputRef:F,label:W,maxRows:T,minRows:j,multiline:z=!1,name:B,onBlur:N,onChange:E,onFocus:_,placeholder:D,required:V=!1,rows:L,select:H=!1,SelectProps:q,type:G,value:K,variant:U="outlined"}=r,J=(0,o.A)(r,S),X=(0,n.A)({},r,{autoFocus:c,color:f,disabled:v,error:b,fullWidth:R,multiline:z,required:V,select:H,variant:U}),Q=(e=>{const{classes:t}=e;return(0,l.A)({root:["root"]},y,t)})(X),Y={};"outlined"===U&&(I&&void 0!==I.shrink&&(Y.notched=I.shrink),Y.label=W),H&&(q&&q.native||(Y.id=void 0),Y["aria-describedby"]=void 0);const Z=(0,s.A)(O),ee=C&&Z?`${Z}-helper-text`:void 0,te=W&&Z?`${Z}-label`:void 0,re=w[U],ne=(0,x.jsx)(re,(0,n.A)({"aria-describedby":ee,autoComplete:a,autoFocus:c,defaultValue:h,fullWidth:R,multiline:z,name:B,rows:L,maxRows:T,minRows:j,type:G,value:K,id:Z,inputRef:F,onBlur:N,onChange:E,onFocus:_,placeholder:D,inputProps:P},Y,$));return(0,x.jsxs)(k,(0,n.A)({className:(0,i.A)(Q.root,p),disabled:v,error:b,fullWidth:R,ref:t,required:V,color:f,variant:U,ownerState:X},J,{children:[null!=W&&""!==W&&(0,x.jsx)(m.A,(0,n.A)({htmlFor:Z,id:te},I,{children:W})),H?(0,x.jsx)(g.A,(0,n.A)({"aria-describedby":ee,id:Z,labelId:te,value:K,input:ne},q,{children:d})):ne,C&&(0,x.jsx)(A.A,(0,n.A)({id:ee},M,{children:C}))]}))}))},8532:(e,t,r)=>{r.d(t,{A:()=>A});var n=r(8587),o=r(8168),a=r(6540),i=r(4164),l=r(5659),s=r(3541),c=r(1848),u=r(8413),d=r(1609);function p(e){return(0,d.A)("MuiToolbar",e)}(0,u.A)("MuiToolbar",["root","gutters","regular","dense"]);var f=r(4848);const m=["className","component","disableGutters","variant"],h=(0,c.Ay)("div",{name:"MuiToolbar",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[t.root,!r.disableGutters&&t.gutters,t[r.variant]]}})((({theme:e,ownerState:t})=>(0,o.A)({position:"relative",display:"flex",alignItems:"center"},!t.disableGutters&&{paddingLeft:e.spacing(2),paddingRight:e.spacing(2),[e.breakpoints.up("sm")]:{paddingLeft:e.spacing(3),paddingRight:e.spacing(3)}},"dense"===t.variant&&{minHeight:48})),(({theme:e,ownerState:t})=>"regular"===t.variant&&e.mixins.toolbar)),A=a.forwardRef((function(e,t){const r=(0,s.A)({props:e,name:"MuiToolbar"}),{className:a,component:c="div",disableGutters:u=!1,variant:d="regular"}=r,A=(0,n.A)(r,m),g=(0,o.A)({},r,{component:c,disableGutters:u,variant:d}),v=(e=>{const{classes:t,disableGutters:r,variant:n}=e,o={root:["root",!r&&"gutters",n]};return(0,l.A)(o,p,t)})(g);return(0,f.jsx)(h,(0,o.A)({as:c,className:(0,i.A)(v.root,a),ref:t,ownerState:g},A))}))},4073:(e,t,r)=>{r.d(t,{A:()=>y});var n=r(8587),o=r(8168),a=r(6540),i=r(4164),l=r(9599),s=r(5659),c=r(1848),u=r(3541),d=r(8466),p=r(8413),f=r(1609);function m(e){return(0,f.A)("MuiTypography",e)}(0,p.A)("MuiTypography",["root","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","inherit","button","caption","overline","alignLeft","alignRight","alignCenter","alignJustify","noWrap","gutterBottom","paragraph"]);var h=r(4848);const A=["align","className","component","gutterBottom","noWrap","paragraph","variant","variantMapping"],g=(0,c.Ay)("span",{name:"MuiTypography",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[t.root,r.variant&&t[r.variant],"inherit"!==r.align&&t[`align${(0,d.A)(r.align)}`],r.noWrap&&t.noWrap,r.gutterBottom&&t.gutterBottom,r.paragraph&&t.paragraph]}})((({theme:e,ownerState:t})=>(0,o.A)({margin:0},"inherit"===t.variant&&{font:"inherit"},"inherit"!==t.variant&&e.typography[t.variant],"inherit"!==t.align&&{textAlign:t.align},t.noWrap&&{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},t.gutterBottom&&{marginBottom:"0.35em"},t.paragraph&&{marginBottom:16}))),v={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",subtitle1:"h6",subtitle2:"h6",body1:"p",body2:"p",inherit:"p"},b={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},y=a.forwardRef((function(e,t){const r=(0,u.A)({props:e,name:"MuiTypography"}),a=(e=>b[e]||e)(r.color),c=(0,l.A)((0,o.A)({},r,{color:a})),{align:p="inherit",className:f,component:y,gutterBottom:x=!1,noWrap:S=!1,paragraph:w=!1,variant:k="body1",variantMapping:M=v}=c,R=(0,n.A)(c,A),C=(0,o.A)({},c,{align:p,color:a,className:f,component:y,gutterBottom:x,noWrap:S,paragraph:w,variant:k,variantMapping:M}),O=y||(w?"p":M[k]||v[k])||"span",I=(e=>{const{align:t,gutterBottom:r,noWrap:n,paragraph:o,variant:a,classes:i}=e,l={root:["root",a,"inherit"!==e.align&&`align${(0,d.A)(t)}`,r&&"gutterBottom",n&&"noWrap",o&&"paragraph"]};return(0,s.A)(l,m,i)})(C);return(0,h.jsx)(g,(0,o.A)({as:O,ref:t,ownerState:C,className:(0,i.A)(I.root,f)},R))}))},2363:(e,t,r)=>{r.d(t,{A:()=>c});var n=r(8168),o=r(8587),a=(r(6540),r(835)),i=r(8312),l=r(4848);const s=["theme"];function c(e){let{theme:t}=e,r=(0,o.A)(e,s);const c=t[i.A];return(0,l.jsx)(a.A,(0,n.A)({},r,{themeId:c?i.A:void 0,theme:c||t}))}},3478:(e,t,r)=>{r.d(t,{A:()=>B});var n=r(8168),o=r(8587),a=r(9453),i=r(3272),l=r(3221),s=r(4188),c=r(3571),u=r(4279);const d={black:"#000",white:"#fff"},p={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"},f={50:"#f3e5f5",100:"#e1bee7",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",600:"#8e24aa",700:"#7b1fa2",800:"#6a1b9a",900:"#4a148c",A100:"#ea80fc",A200:"#e040fb",A400:"#d500f9",A700:"#aa00ff"},m={50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"},h={50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"},A={50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff"},g={50:"#e1f5fe",100:"#b3e5fc",200:"#81d4fa",300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",600:"#039be5",700:"#0288d1",800:"#0277bd",900:"#01579b",A100:"#80d8ff",A200:"#40c4ff",A400:"#00b0ff",A700:"#0091ea"},v={50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"},b=["mode","contrastThreshold","tonalOffset"],y={text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.38)"},divider:"rgba(0, 0, 0, 0.12)",background:{paper:d.white,default:d.white},action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}},x={text:{primary:d.white,secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.5)",icon:"rgba(255, 255, 255, 0.5)"},divider:"rgba(255, 255, 255, 0.12)",background:{paper:"#121212",default:"#121212"},action:{active:d.white,hover:"rgba(255, 255, 255, 0.08)",hoverOpacity:.08,selected:"rgba(255, 255, 255, 0.16)",selectedOpacity:.16,disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)",disabledOpacity:.38,focus:"rgba(255, 255, 255, 0.12)",focusOpacity:.12,activatedOpacity:.24}};function S(e,t,r,n){const o=n.light||n,a=n.dark||1.5*n;e[t]||(e.hasOwnProperty(r)?e[t]=e[r]:"light"===t?e.light=(0,u.a)(e.main,o):"dark"===t&&(e.dark=(0,u.e$)(e.main,a)))}const w=["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"],k={textTransform:"uppercase"},M='"Roboto", "Helvetica", "Arial", sans-serif';function R(e,t){const r="function"==typeof t?t(e):t,{fontFamily:a=M,fontSize:l=14,fontWeightLight:s=300,fontWeightRegular:c=400,fontWeightMedium:u=500,fontWeightBold:d=700,htmlFontSize:p=16,allVariants:f,pxToRem:m}=r,h=(0,o.A)(r,w),A=l/14,g=m||(e=>e/p*A+"rem"),v=(e,t,r,o,i)=>{return(0,n.A)({fontFamily:a,fontWeight:e,fontSize:g(t),lineHeight:r},a===M?{letterSpacing:(l=o/t,Math.round(1e5*l)/1e5+"em")}:{},i,f);var l},b={h1:v(s,96,1.167,-1.5),h2:v(s,60,1.2,-.5),h3:v(c,48,1.167,0),h4:v(c,34,1.235,.25),h5:v(c,24,1.334,0),h6:v(u,20,1.6,.15),subtitle1:v(c,16,1.75,.15),subtitle2:v(u,14,1.57,.1),body1:v(c,16,1.5,.15),body2:v(c,14,1.43,.15),button:v(u,14,1.75,.4,k),caption:v(c,12,1.66,.4),overline:v(c,12,2.66,1,k),inherit:{fontFamily:"inherit",fontWeight:"inherit",fontSize:"inherit",lineHeight:"inherit",letterSpacing:"inherit"}};return(0,i.A)((0,n.A)({htmlFontSize:p,pxToRem:g,fontFamily:a,fontSize:l,fontWeightLight:s,fontWeightRegular:c,fontWeightMedium:u,fontWeightBold:d},b),h,{clone:!1})}function C(...e){return[`${e[0]}px ${e[1]}px ${e[2]}px ${e[3]}px rgba(0,0,0,0.2)`,`${e[4]}px ${e[5]}px ${e[6]}px ${e[7]}px rgba(0,0,0,0.14)`,`${e[8]}px ${e[9]}px ${e[10]}px ${e[11]}px rgba(0,0,0,0.12)`].join(",")}const O=["none",C(0,2,1,-1,0,1,1,0,0,1,3,0),C(0,3,1,-2,0,2,2,0,0,1,5,0),C(0,3,3,-2,0,3,4,0,0,1,8,0),C(0,2,4,-1,0,4,5,0,0,1,10,0),C(0,3,5,-1,0,5,8,0,0,1,14,0),C(0,3,5,-1,0,6,10,0,0,1,18,0),C(0,4,5,-2,0,7,10,1,0,2,16,1),C(0,5,5,-3,0,8,10,1,0,3,14,2),C(0,5,6,-3,0,9,12,1,0,3,16,2),C(0,6,6,-3,0,10,14,1,0,4,18,3),C(0,6,7,-4,0,11,15,1,0,4,20,3),C(0,7,8,-4,0,12,17,2,0,5,22,4),C(0,7,8,-4,0,13,19,2,0,5,24,4),C(0,7,9,-4,0,14,21,2,0,5,26,4),C(0,8,9,-5,0,15,22,2,0,6,28,5),C(0,8,10,-5,0,16,24,2,0,6,30,5),C(0,8,11,-5,0,17,26,2,0,6,32,5),C(0,9,11,-5,0,18,28,2,0,7,34,6),C(0,9,12,-6,0,19,29,2,0,7,36,6),C(0,10,13,-6,0,20,31,3,0,8,38,7),C(0,10,13,-6,0,21,33,3,0,8,40,7),C(0,10,14,-6,0,22,35,3,0,8,42,7),C(0,11,14,-7,0,23,36,3,0,9,44,8),C(0,11,15,-7,0,24,38,3,0,9,46,8)],I=["duration","easing","delay"],P={easeInOut:"cubic-bezier(0.4, 0, 0.2, 1)",easeOut:"cubic-bezier(0.0, 0, 0.2, 1)",easeIn:"cubic-bezier(0.4, 0, 1, 1)",sharp:"cubic-bezier(0.4, 0, 0.6, 1)"},$={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function F(e){return`${Math.round(e)}ms`}function W(e){if(!e)return 0;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}function T(e){const t=(0,n.A)({},P,e.easing),r=(0,n.A)({},$,e.duration);return(0,n.A)({getAutoHeightDuration:W,create:(e=["all"],n={})=>{const{duration:a=r.standard,easing:i=t.easeInOut,delay:l=0}=n;return(0,o.A)(n,I),(Array.isArray(e)?e:[e]).map((e=>`${e} ${"string"==typeof a?a:F(a)} ${i} ${"string"==typeof l?l:F(l)}`)).join(",")}},e,{easing:t,duration:r})}const j={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},z=["breakpoints","mixins","spacing","palette","transitions","typography","shape"];const B=function(e={},...t){const{mixins:r={},palette:w={},transitions:k={},typography:M={}}=e,C=(0,o.A)(e,z);if(e.vars)throw new Error((0,a.A)(18));const I=function(e){const{mode:t="light",contrastThreshold:r=3,tonalOffset:l=.2}=e,s=(0,o.A)(e,b),c=e.primary||function(e="light"){return"dark"===e?{main:A[200],light:A[50],dark:A[400]}:{main:A[700],light:A[400],dark:A[800]}}(t),w=e.secondary||function(e="light"){return"dark"===e?{main:f[200],light:f[50],dark:f[400]}:{main:f[500],light:f[300],dark:f[700]}}(t),k=e.error||function(e="light"){return"dark"===e?{main:m[500],light:m[300],dark:m[700]}:{main:m[700],light:m[400],dark:m[800]}}(t),M=e.info||function(e="light"){return"dark"===e?{main:g[400],light:g[300],dark:g[700]}:{main:g[700],light:g[500],dark:g[900]}}(t),R=e.success||function(e="light"){return"dark"===e?{main:v[400],light:v[300],dark:v[700]}:{main:v[800],light:v[500],dark:v[900]}}(t),C=e.warning||function(e="light"){return"dark"===e?{main:h[400],light:h[300],dark:h[700]}:{main:"#ed6c02",light:h[500],dark:h[900]}}(t);function O(e){return(0,u.eM)(e,x.text.primary)>=r?x.text.primary:y.text.primary}const I=({color:e,name:t,mainShade:r=500,lightShade:o=300,darkShade:i=700})=>{if(!(e=(0,n.A)({},e)).main&&e[r]&&(e.main=e[r]),!e.hasOwnProperty("main"))throw new Error((0,a.A)(11,t?` (${t})`:"",r));if("string"!=typeof e.main)throw new Error((0,a.A)(12,t?` (${t})`:"",JSON.stringify(e.main)));return S(e,"light",o,l),S(e,"dark",i,l),e.contrastText||(e.contrastText=O(e.main)),e},P={dark:x,light:y};return(0,i.A)((0,n.A)({common:(0,n.A)({},d),mode:t,primary:I({color:c,name:"primary"}),secondary:I({color:w,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:I({color:k,name:"error"}),warning:I({color:C,name:"warning"}),info:I({color:M,name:"info"}),success:I({color:R,name:"success"}),grey:p,contrastThreshold:r,getContrastText:O,augmentColor:I,tonalOffset:l},P[t]),s)}(w),P=(0,l.A)(e);let $=(0,i.A)(P,{mixins:(F=P.breakpoints,W=r,(0,n.A)({toolbar:{minHeight:56,[F.up("xs")]:{"@media (orientation: landscape)":{minHeight:48}},[F.up("sm")]:{minHeight:64}}},W)),palette:I,shadows:O.slice(),typography:R(I,M),transitions:T(k),zIndex:(0,n.A)({},j)});var F,W;return $=(0,i.A)($,C),$=t.reduce(((e,t)=>(0,i.A)(e,t)),$),$.unstable_sxConfig=(0,n.A)({},s.A,null==C?void 0:C.unstable_sxConfig),$.unstable_sx=function(e){return(0,c.A)({sx:e,theme:this})},$}},2765:(e,t,r)=>{r.d(t,{A:()=>n});const n=(0,r(3478).A)()},8783:(e,t,r)=>{r.d(t,{A:()=>n});const n=e=>{let t;return t=e<1?5.11916*e**2:4.5*Math.log(e+1)+2,(t/100).toFixed(2)}},8312:(e,t,r)=>{r.d(t,{A:()=>n});const n="$$material"},1848:(e,t,r)=>{r.d(t,{Ay:()=>s,_n:()=>l,ep:()=>i});var n=r(1770),o=r(2765),a=r(8312);const i=e=>(0,n.MC)(e)&&"classes"!==e,l=n.MC,s=(0,n.Ay)({themeId:a.A,defaultTheme:o.A,rootShouldForwardProp:i})},4675:(e,t,r)=>{r.d(t,{A:()=>i}),r(6540);var n=r(2858),o=r(2765),a=r(8312);function i(){const e=(0,n.A)(o.A);return e[a.A]||e}},3541:(e,t,r)=>{r.d(t,{A:()=>i});var n=r(6606),o=r(2765),a=r(8312);function i({props:e,name:t}){return(0,n.A)({props:e,name:t,defaultTheme:o.A,themeId:a.A})}},5186:(e,t,r)=>{r.d(t,{c:()=>o,q:()=>n});const n=e=>e.scrollTop;function o(e,t){var r,n;const{timeout:o,easing:a,style:i={}}=e;return{duration:null!=(r=i.transitionDuration)?r:"number"==typeof o?o:o[t.mode]||0,easing:null!=(n=i.transitionTimingFunction)?n:"object"==typeof a?a[t.mode]:a,delay:i.transitionDelay}}},8466:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(3967).A},1935:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(4705).A},7167:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(2539).A},6767:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(5755).A},6248:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(2325).A},3749:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(4877).A},2778:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(1529).A},3034:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(1547).A},6852:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(1523).A},8851:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(7151).A},7766:(e,t,r)=>{r.d(t,{A:()=>c});var n=r(8168),o=r(6540),a=r(3738),i=r(4022);const l="function"==typeof Symbol&&Symbol.for?Symbol.for("mui.nested"):"__THEME_NESTED__";var s=r(4848);const c=function(e){const{children:t,theme:r}=e,c=(0,i.A)(),u=o.useMemo((()=>{const e=null===c?r:function(e,t){return"function"==typeof t?t(e):(0,n.A)({},e,t)}(c,r);return null!=e&&(e[l]=null!==c),e}),[r,c]);return(0,s.jsx)(a.A.Provider,{value:u,children:t})}},3738:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(6540).createContext(null)},4022:(e,t,r)=>{r.d(t,{A:()=>a});var n=r(6540),o=r(3738);function a(){return n.useContext(o.A)}},9940:(e,t,r)=>{r.d(t,{A:()=>a}),r(6540);var n=r(7437),o=r(4848);function a(e){const{styles:t,defaultTheme:r={}}=e,a="function"==typeof t?e=>{return t(null==(n=e)||0===Object.keys(n).length?r:e);var n}:t;return(0,o.jsx)(n.mL,{styles:a})}},4763:(e,t,r)=>{r.d(t,{Ay:()=>o,q_:()=>a});var n=r(1479);function o(e,t){return(0,n.A)(e,t)}const a=(e,t)=>{Array.isArray(e.__emotion_styles)&&(e.__emotion_styles=t(e.__emotion_styles))}}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QkFDQ2EsR0FBV3hULEVBQU8sQ0FDbkIyVCxPQUFPLEdBRVgsQ0N0RkEsU0FBU0MsS0FBZ0JDLEdBQ3ZCLE1BQU8sQ0FBQyxHQUFHQSxFQUFHLFFBQVFBLEVBQUcsUUFBUUEsRUFBRyxRQUFRQSxFQUFHLHVCQUE2QyxHQUFHQSxFQUFHLFFBQVFBLEVBQUcsUUFBUUEsRUFBRyxRQUFRQSxFQUFHLHdCQUFnRCxHQUFHQSxFQUFHLFFBQVFBLEVBQUcsUUFBUUEsRUFBRyxTQUFTQSxFQUFHLDBCQUFtRHRPLEtBQUssSUFDclIsQ0FHQSxNQUNBLEVBRGdCLENBQUMsT0FBUXFPLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxFQUFHLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElBQUssRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUlBLEVBQWEsRUFBRyxHQUFJLElB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Q3hDLE1BQTBCLG1CQUFmQSxFQUNXQSxFQUFXQyxJQVExQixPQUFTLENBQUMsRUFBR0EsRUFBWUQsRUFDbEMsQ0FtQnNERSxDQUFxQkQsRUFBWUQsR0FJbkYsT0FIYyxNQUFWbFYsSUFDRkEsRUFBT3FWLEdBQXlCLE9BQWZGLEdBRVpuVixDQUFNLEdBQ1osQ0FBQ2tWLEVBQVlDLElBQ2hCLE9BQW9CLFNBQUtHLEVBQUEsRUFBYUMsU0FBVSxDQUM5Qy9aLE1BQU9pSCxFQUNQdkksU0FBVUEsR0FFZCxtQ0M3Q0EsZ0JBSmtDLGNBQW9CLCtEQ0N2QyxTQUFTb2EsSUFNdEIsT0FMYyxhQUFpQixJQU1qQyxtRUNBZSxTQUFTa0IsRUFBYS9kLEdBQ25DLE1BQU0sT0FDSkMsRUFBTSxhQUNOMmMsRUFBZSxDQUFDLEdBQ2Q1YyxFQUNFZ2UsRUFBaUMsbUJBQVgvZCxFQUF3QnNVLElBQWN0VSxTQVAzRGdlLE9BRFFBLEVBUWtFMUosSUFQVCxJQUE1QnBOLE9BQU8rVyxLQUFLRCxHQUFLNVYsT0FPa0N1VSxFQUFlckksR0FSaEgsSUFBaUIwSixDQVEyRyxFQUFFaGUsRUFDNUgsT0FBb0IsU0FBSyxLQUFRLENBQy9CQSxPQUFRK2QsR0FFWiwyRENQZSxTQUFTbmUsRUFBT3NlLEVBQUtsRixHQWFsQyxPQVpzQixPQUFTa0YsRUFBS2xGLEVBYXRDLENBR08sTUFBTW1GLEVBQXlCLENBQUNELEVBQUtFLEtBR3RDOVgsTUFBTUMsUUFBUTJYLEVBQUlHLG9CQUNwQkgsRUFBSUcsaUJBQW1CRCxFQUFVRixFQUFJRyxrQkFDdkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VDb250cm9sbGVkLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1NlbGVjdC9zZWxlY3RDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1NlbGVjdC9TZWxlY3RJbnB1dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9TdmdJY29uL3N2Z0ljb25DbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1N2Z0ljb24vU3ZnSWNvbi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zdmctaWNvbnMvQXJyb3dEcm9wRG93bi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9jcmVhdGVTdmdJY29uLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1NlbGVjdC9TZWxlY3QuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVGV4dEZpZWxkL3RleHRGaWVsZENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVGV4dEZpZWxkL1RleHRGaWVsZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Ub29sYmFyL3Rvb2xiYXJDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1Rvb2xiYXIvVG9vbGJhci5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9UeXBvZ3JhcGh5L3R5cG9ncmFwaHlDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1R5cG9ncmFwaHkvVHlwb2dyYXBoeS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvVGhlbWVQcm92aWRlci5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvY29tbW9uLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9ncmV5LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9wdXJwbGUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL3JlZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvb3JhbmdlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9ibHVlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9saWdodEJsdWUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2dyZWVuLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVQYWxldHRlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVUeXBvZ3JhcGh5LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9zaGFkb3dzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVUcmFuc2l0aW9ucy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvekluZGV4LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVUaGVtZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlTWl4aW5zLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9kZWZhdWx0VGhlbWUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2dldE92ZXJsYXlBbHBoYS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvaWRlbnRpZmllci5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvc3R5bGVkLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy91c2VUaGVtZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvdXNlVGhlbWVQcm9wcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC90cmFuc2l0aW9ucy91dGlscy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9jYXBpdGFsaXplLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2RlYm91bmNlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2dldFNjcm9sbGJhclNpemUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvaXNNdWlFbGVtZW50LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL293bmVyRG9jdW1lbnQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvb3duZXJXaW5kb3cuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlRW5oYW5jZWRFZmZlY3QuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlRXZlbnRDYWxsYmFjay5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VGb3JrUmVmLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3VzZUlzRm9jdXNWaXNpYmxlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3ByaXZhdGUtdGhlbWluZy9UaGVtZVByb3ZpZGVyL25lc3RlZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9wcml2YXRlLXRoZW1pbmcvVGhlbWVQcm92aWRlci9UaGVtZVByb3ZpZGVyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3ByaXZhdGUtdGhlbWluZy91c2VUaGVtZS9UaGVtZUNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvcHJpdmF0ZS10aGVtaW5nL3VzZVRoZW1lL3VzZVRoZW1lLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N0eWxlZC1lbmdpbmUvR2xvYmFsU3R5bGVzL0dsb2JhbFN0eWxlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zdHlsZWQtZW5naW5lL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgdW5zdGFibGVfdXNlQ29udHJvbGxlZCBhcyB1c2VDb250cm9sbGVkIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCB1c2VDb250cm9sbGVkOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0VXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVNlbGVjdCcsIHNsb3QpO1xufVxuY29uc3Qgc2VsZWN0Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVNlbGVjdCcsIFsncm9vdCcsICdzZWxlY3QnLCAnbXVsdGlwbGUnLCAnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJywgJ2Rpc2FibGVkJywgJ2ZvY3VzZWQnLCAnaWNvbicsICdpY29uT3BlbicsICdpY29uRmlsbGVkJywgJ2ljb25PdXRsaW5lZCcsICdpY29uU3RhbmRhcmQnLCAnbmF0aXZlSW5wdXQnLCAnZXJyb3InXSk7XG5leHBvcnQgZGVmYXVsdCBzZWxlY3RDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGZyb20gXCJAbXVpL3V0aWxzL2Zvcm1hdE11aUVycm9yTWVzc2FnZVwiO1xudmFyIF9zcGFuO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYXJpYS1kZXNjcmliZWRieVwiLCBcImFyaWEtbGFiZWxcIiwgXCJhdXRvRm9jdXNcIiwgXCJhdXRvV2lkdGhcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRlZmF1bHRPcGVuXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNwbGF5RW1wdHlcIiwgXCJlcnJvclwiLCBcIkljb25Db21wb25lbnRcIiwgXCJpbnB1dFJlZlwiLCBcImxhYmVsSWRcIiwgXCJNZW51UHJvcHNcIiwgXCJtdWx0aXBsZVwiLCBcIm5hbWVcIiwgXCJvbkJsdXJcIiwgXCJvbkNoYW5nZVwiLCBcIm9uQ2xvc2VcIiwgXCJvbkZvY3VzXCIsIFwib25PcGVuXCIsIFwib3BlblwiLCBcInJlYWRPbmx5XCIsIFwicmVuZGVyVmFsdWVcIiwgXCJTZWxlY3REaXNwbGF5UHJvcHNcIiwgXCJ0YWJJbmRleFwiLCBcInR5cGVcIiwgXCJ2YWx1ZVwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0ZyYWdtZW50IH0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgcmVmVHlwZSwgdW5zdGFibGVfdXNlSWQgYXMgdXNlSWQgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBvd25lckRvY3VtZW50IGZyb20gJy4uL3V0aWxzL293bmVyRG9jdW1lbnQnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgTWVudSBmcm9tICcuLi9NZW51L01lbnUnO1xuaW1wb3J0IHsgbmF0aXZlU2VsZWN0U2VsZWN0U3R5bGVzLCBuYXRpdmVTZWxlY3RJY29uU3R5bGVzIH0gZnJvbSAnLi4vTmF0aXZlU2VsZWN0L05hdGl2ZVNlbGVjdElucHV0JztcbmltcG9ydCB7IGlzRmlsbGVkIH0gZnJvbSAnLi4vSW5wdXRCYXNlL3V0aWxzJztcbmltcG9ydCBzdHlsZWQsIHsgc2xvdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB1c2VDb250cm9sbGVkIGZyb20gJy4uL3V0aWxzL3VzZUNvbnRyb2xsZWQnO1xuaW1wb3J0IHNlbGVjdENsYXNzZXMsIHsgZ2V0U2VsZWN0VXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuL3NlbGVjdENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IFNlbGVjdFNlbGVjdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpU2VsZWN0JyxcbiAgc2xvdDogJ1NlbGVjdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtcbiAgICAvLyBXaW4gc3BlY2lmaWNpdHkgb3ZlciB0aGUgaW5wdXQgYmFzZVxuICAgIHtcbiAgICAgIFtgJi4ke3NlbGVjdENsYXNzZXMuc2VsZWN0fWBdOiBzdHlsZXMuc2VsZWN0XG4gICAgfSwge1xuICAgICAgW2AmLiR7c2VsZWN0Q2xhc3Nlcy5zZWxlY3R9YF06IHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdXG4gICAgfSwge1xuICAgICAgW2AmLiR7c2VsZWN0Q2xhc3Nlcy5lcnJvcn1gXTogc3R5bGVzLmVycm9yXG4gICAgfSwge1xuICAgICAgW2AmLiR7c2VsZWN0Q2xhc3Nlcy5tdWx0aXBsZX1gXTogc3R5bGVzLm11bHRpcGxlXG4gICAgfV07XG4gIH1cbn0pKG5hdGl2ZVNlbGVjdFNlbGVjdFN0eWxlcywge1xuICAvLyBXaW4gc3BlY2lmaWNpdHkgb3ZlciB0aGUgaW5wdXQgYmFzZVxuICBbYCYuJHtzZWxlY3RDbGFzc2VzLnNlbGVjdH1gXToge1xuICAgIGhlaWdodDogJ2F1dG8nLFxuICAgIC8vIFJlc2V0cyBmb3IgbXVsdGlwbGUgc2VsZWN0IHdpdGggY2hpcHNcbiAgICBtaW5IZWlnaHQ6ICcxLjQzNzVlbScsXG4gICAgLy8gUmVxdWlyZWQgZm9yIHNlbGVjdFxcdGV4dC1maWVsZCBoZWlnaHQgY29uc2lzdGVuY3lcbiAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nXG4gIH1cbn0pO1xuY29uc3QgU2VsZWN0SWNvbiA9IHN0eWxlZCgnc3ZnJywge1xuICBuYW1lOiAnTXVpU2VsZWN0JyxcbiAgc2xvdDogJ0ljb24nLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLmljb24sIG93bmVyU3RhdGUudmFyaWFudCAmJiBzdHlsZXNbYGljb24ke2NhcGl0YWxpemUob3duZXJTdGF0ZS52YXJpYW50KX1gXSwgb3duZXJTdGF0ZS5vcGVuICYmIHN0eWxlcy5pY29uT3Blbl07XG4gIH1cbn0pKG5hdGl2ZVNlbGVjdEljb25TdHlsZXMpO1xuY29uc3QgU2VsZWN0TmF0aXZlSW5wdXQgPSBzdHlsZWQoJ2lucHV0Jywge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiBzbG90U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgJiYgcHJvcCAhPT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpU2VsZWN0JyxcbiAgc2xvdDogJ05hdGl2ZUlucHV0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMubmF0aXZlSW5wdXRcbn0pKHtcbiAgYm90dG9tOiAwLFxuICBsZWZ0OiAwLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgb3BhY2l0eTogMCxcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICB3aWR0aDogJzEwMCUnLFxuICBib3hTaXppbmc6ICdib3JkZXItYm94J1xufSk7XG5mdW5jdGlvbiBhcmVFcXVhbFZhbHVlcyhhLCBiKSB7XG4gIGlmICh0eXBlb2YgYiA9PT0gJ29iamVjdCcgJiYgYiAhPT0gbnVsbCkge1xuICAgIHJldHVybiBhID09PSBiO1xuICB9XG5cbiAgLy8gVGhlIHZhbHVlIGNvdWxkIGJlIGEgbnVtYmVyLCB0aGUgRE9NIHdpbGwgc3RyaW5naWZ5IGl0IGFueXdheS5cbiAgcmV0dXJuIFN0cmluZyhhKSA9PT0gU3RyaW5nKGIpO1xufVxuZnVuY3Rpb24gaXNFbXB0eShkaXNwbGF5KSB7XG4gIHJldHVybiBkaXNwbGF5ID09IG51bGwgfHwgdHlwZW9mIGRpc3BsYXkgPT09ICdzdHJpbmcnICYmICFkaXNwbGF5LnRyaW0oKTtcbn1cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIHZhcmlhbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgbXVsdGlwbGUsXG4gICAgb3BlbixcbiAgICBlcnJvclxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgc2VsZWN0OiBbJ3NlbGVjdCcsIHZhcmlhbnQsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIG11bHRpcGxlICYmICdtdWx0aXBsZScsIGVycm9yICYmICdlcnJvciddLFxuICAgIGljb246IFsnaWNvbicsIGBpY29uJHtjYXBpdGFsaXplKHZhcmlhbnQpfWAsIG9wZW4gJiYgJ2ljb25PcGVuJywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJ10sXG4gICAgbmF0aXZlSW5wdXQ6IFsnbmF0aXZlSW5wdXQnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFNlbGVjdFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbn07XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgU2VsZWN0SW5wdXQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBTZWxlY3RJbnB1dChwcm9wcywgcmVmKSB7XG4gIHZhciBfTWVudVByb3BzJHNsb3RQcm9wcztcbiAgY29uc3Qge1xuICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgICAnYXJpYS1sYWJlbCc6IGFyaWFMYWJlbCxcbiAgICAgIGF1dG9Gb2N1cyxcbiAgICAgIGF1dG9XaWR0aCxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGVmYXVsdE9wZW4sXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGRpc3BsYXlFbXB0eSxcbiAgICAgIGVycm9yID0gZmFsc2UsXG4gICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgaW5wdXRSZWY6IGlucHV0UmVmUHJvcCxcbiAgICAgIGxhYmVsSWQsXG4gICAgICBNZW51UHJvcHMgPSB7fSxcbiAgICAgIG11bHRpcGxlLFxuICAgICAgbmFtZSxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25DbG9zZSxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbk9wZW4sXG4gICAgICBvcGVuOiBvcGVuUHJvcCxcbiAgICAgIHJlYWRPbmx5LFxuICAgICAgcmVuZGVyVmFsdWUsXG4gICAgICBTZWxlY3REaXNwbGF5UHJvcHMgPSB7fSxcbiAgICAgIHRhYkluZGV4OiB0YWJJbmRleFByb3BcbiAgICAgIC8vIGNhdGNoaW5nIGB0eXBlYCBmcm9tIElucHV0IHdoaWNoIG1ha2VzIG5vIHNlbnNlIGZvciBTZWxlY3RJbnB1dFxuICAgICAgLFxuXG4gICAgICB2YWx1ZTogdmFsdWVQcm9wLFxuICAgICAgdmFyaWFudCA9ICdzdGFuZGFyZCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZVN0YXRlXSA9IHVzZUNvbnRyb2xsZWQoe1xuICAgIGNvbnRyb2xsZWQ6IHZhbHVlUHJvcCxcbiAgICBkZWZhdWx0OiBkZWZhdWx0VmFsdWUsXG4gICAgbmFtZTogJ1NlbGVjdCdcbiAgfSk7XG4gIGNvbnN0IFtvcGVuU3RhdGUsIHNldE9wZW5TdGF0ZV0gPSB1c2VDb250cm9sbGVkKHtcbiAgICBjb250cm9sbGVkOiBvcGVuUHJvcCxcbiAgICBkZWZhdWx0OiBkZWZhdWx0T3BlbixcbiAgICBuYW1lOiAnU2VsZWN0J1xuICB9KTtcbiAgY29uc3QgaW5wdXRSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGRpc3BsYXlSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IFtkaXNwbGF5Tm9kZSwgc2V0RGlzcGxheU5vZGVdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IHtcbiAgICBjdXJyZW50OiBpc09wZW5Db250cm9sbGVkXG4gIH0gPSBSZWFjdC51c2VSZWYob3BlblByb3AgIT0gbnVsbCk7XG4gIGNvbnN0IFttZW51TWluV2lkdGhTdGF0ZSwgc2V0TWVudU1pbldpZHRoU3RhdGVdID0gUmVhY3QudXNlU3RhdGUoKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihyZWYsIGlucHV0UmVmUHJvcCk7XG4gIGNvbnN0IGhhbmRsZURpc3BsYXlSZWYgPSBSZWFjdC51c2VDYWxsYmFjayhub2RlID0+IHtcbiAgICBkaXNwbGF5UmVmLmN1cnJlbnQgPSBub2RlO1xuICAgIGlmIChub2RlKSB7XG4gICAgICBzZXREaXNwbGF5Tm9kZShub2RlKTtcbiAgICB9XG4gIH0sIFtdKTtcbiAgY29uc3QgYW5jaG9yRWxlbWVudCA9IGRpc3BsYXlOb2RlID09IG51bGwgPyB2b2lkIDAgOiBkaXNwbGF5Tm9kZS5wYXJlbnROb2RlO1xuICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKGhhbmRsZVJlZiwgKCkgPT4gKHtcbiAgICBmb2N1czogKCkgPT4ge1xuICAgICAgZGlzcGxheVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfSxcbiAgICBub2RlOiBpbnB1dFJlZi5jdXJyZW50LFxuICAgIHZhbHVlXG4gIH0pLCBbdmFsdWVdKTtcblxuICAvLyBSZXNpemUgbWVudSBvbiBgZGVmYXVsdE9wZW5gIGF1dG9tYXRpYyB0b2dnbGUuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRlZmF1bHRPcGVuICYmIG9wZW5TdGF0ZSAmJiBkaXNwbGF5Tm9kZSAmJiAhaXNPcGVuQ29udHJvbGxlZCkge1xuICAgICAgc2V0TWVudU1pbldpZHRoU3RhdGUoYXV0b1dpZHRoID8gbnVsbCA6IGFuY2hvckVsZW1lbnQuY2xpZW50V2lkdGgpO1xuICAgICAgZGlzcGxheVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW2Rpc3BsYXlOb2RlLCBhdXRvV2lkdGhdKTtcbiAgLy8gYGlzT3BlbkNvbnRyb2xsZWRgIGlzIGlnbm9yZWQgYmVjYXVzZSB0aGUgY29tcG9uZW50IHNob3VsZCBuZXZlciBzd2l0Y2ggYmV0d2VlbiBjb250cm9sbGVkIGFuZCB1bmNvbnRyb2xsZWQgbW9kZXMuXG4gIC8vIGBkZWZhdWx0T3BlbmAgYW5kIGBvcGVuU3RhdGVgIGFyZSBpZ25vcmVkIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNhbGxiYWNrcy5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXV0b0ZvY3VzKSB7XG4gICAgICBkaXNwbGF5UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH0sIFthdXRvRm9jdXNdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWxhYmVsSWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGxhYmVsID0gb3duZXJEb2N1bWVudChkaXNwbGF5UmVmLmN1cnJlbnQpLmdldEVsZW1lbnRCeUlkKGxhYmVsSWQpO1xuICAgIGlmIChsYWJlbCkge1xuICAgICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgaWYgKGdldFNlbGVjdGlvbigpLmlzQ29sbGFwc2VkKSB7XG4gICAgICAgICAgZGlzcGxheVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBsYWJlbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZXIpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgbGFiZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVyKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtsYWJlbElkXSk7XG4gIGNvbnN0IHVwZGF0ZSA9IChvcGVuLCBldmVudCkgPT4ge1xuICAgIGlmIChvcGVuKSB7XG4gICAgICBpZiAob25PcGVuKSB7XG4gICAgICAgIG9uT3BlbihldmVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvbkNsb3NlKSB7XG4gICAgICBvbkNsb3NlKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKCFpc09wZW5Db250cm9sbGVkKSB7XG4gICAgICBzZXRNZW51TWluV2lkdGhTdGF0ZShhdXRvV2lkdGggPyBudWxsIDogYW5jaG9yRWxlbWVudC5jbGllbnRXaWR0aCk7XG4gICAgICBzZXRPcGVuU3RhdGUob3Blbik7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVNb3VzZURvd24gPSBldmVudCA9PiB7XG4gICAgLy8gSWdub3JlIGV2ZXJ5dGhpbmcgYnV0IGxlZnQtY2xpY2tcbiAgICBpZiAoZXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEhpamFjayB0aGUgZGVmYXVsdCBmb2N1cyBiZWhhdmlvci5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGRpc3BsYXlSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIHVwZGF0ZSh0cnVlLCBldmVudCk7XG4gIH07XG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gZXZlbnQgPT4ge1xuICAgIHVwZGF0ZShmYWxzZSwgZXZlbnQpO1xuICB9O1xuICBjb25zdCBjaGlsZHJlbkFycmF5ID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbik7XG5cbiAgLy8gU3VwcG9ydCBhdXRvZmlsbC5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gZXZlbnQgPT4ge1xuICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5BcnJheS5maW5kKGNoaWxkSXRlbSA9PiBjaGlsZEl0ZW0ucHJvcHMudmFsdWUgPT09IGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgaWYgKGNoaWxkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0VmFsdWVTdGF0ZShjaGlsZC5wcm9wcy52YWx1ZSk7XG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICBvbkNoYW5nZShldmVudCwgY2hpbGQpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlSXRlbUNsaWNrID0gY2hpbGQgPT4gZXZlbnQgPT4ge1xuICAgIGxldCBuZXdWYWx1ZTtcblxuICAgIC8vIFdlIHVzZSB0aGUgdGFiaW5kZXggYXR0cmlidXRlIHRvIHNpZ25hbCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuXG4gICAgaWYgKCFldmVudC5jdXJyZW50VGFyZ2V0Lmhhc0F0dHJpYnV0ZSgndGFiaW5kZXgnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgIG5ld1ZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5zbGljZSgpIDogW107XG4gICAgICBjb25zdCBpdGVtSW5kZXggPSB2YWx1ZS5pbmRleE9mKGNoaWxkLnByb3BzLnZhbHVlKTtcbiAgICAgIGlmIChpdGVtSW5kZXggPT09IC0xKSB7XG4gICAgICAgIG5ld1ZhbHVlLnB1c2goY2hpbGQucHJvcHMudmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3VmFsdWUuc3BsaWNlKGl0ZW1JbmRleCwgMSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1ZhbHVlID0gY2hpbGQucHJvcHMudmFsdWU7XG4gICAgfVxuICAgIGlmIChjaGlsZC5wcm9wcy5vbkNsaWNrKSB7XG4gICAgICBjaGlsZC5wcm9wcy5vbkNsaWNrKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgc2V0VmFsdWVTdGF0ZShuZXdWYWx1ZSk7XG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgLy8gUmVkZWZpbmUgdGFyZ2V0IHRvIGFsbG93IG5hbWUgYW5kIHZhbHVlIHRvIGJlIHJlYWQuXG4gICAgICAgIC8vIFRoaXMgYWxsb3dzIHNlYW1sZXNzIGludGVncmF0aW9uIHdpdGggdGhlIG1vc3QgcG9wdWxhciBmb3JtIGxpYnJhcmllcy5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9pc3N1ZXMvMTM0ODUjaXNzdWVjb21tZW50LTY3NjA0ODQ5MlxuICAgICAgICAvLyBDbG9uZSB0aGUgZXZlbnQgdG8gbm90IG92ZXJyaWRlIGB0YXJnZXRgIG9mIHRoZSBvcmlnaW5hbCBldmVudC5cbiAgICAgICAgY29uc3QgbmF0aXZlRXZlbnQgPSBldmVudC5uYXRpdmVFdmVudCB8fCBldmVudDtcbiAgICAgICAgY29uc3QgY2xvbmVkRXZlbnQgPSBuZXcgbmF0aXZlRXZlbnQuY29uc3RydWN0b3IobmF0aXZlRXZlbnQudHlwZSwgbmF0aXZlRXZlbnQpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2xvbmVkRXZlbnQsICd0YXJnZXQnLCB7XG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBvbkNoYW5nZShjbG9uZWRFdmVudCwgY2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW11bHRpcGxlKSB7XG4gICAgICB1cGRhdGUoZmFsc2UsIGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSBldmVudCA9PiB7XG4gICAgaWYgKCFyZWFkT25seSkge1xuICAgICAgY29uc3QgdmFsaWRLZXlzID0gWycgJywgJ0Fycm93VXAnLCAnQXJyb3dEb3duJyxcbiAgICAgIC8vIFRoZSBuYXRpdmUgc2VsZWN0IGRvZXNuJ3QgcmVzcG9uZCB0byBlbnRlciBvbiBtYWNPUywgYnV0IGl0J3MgcmVjb21tZW5kZWQgYnlcbiAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvQVJJQS9hcGcvcGF0dGVybnMvY29tYm9ib3gvZXhhbXBsZXMvY29tYm9ib3gtc2VsZWN0LW9ubHkvXG4gICAgICAnRW50ZXInXTtcbiAgICAgIGlmICh2YWxpZEtleXMuaW5kZXhPZihldmVudC5rZXkpICE9PSAtMSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB1cGRhdGUodHJ1ZSwgZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3Qgb3BlbiA9IGRpc3BsYXlOb2RlICE9PSBudWxsICYmIG9wZW5TdGF0ZTtcbiAgY29uc3QgaGFuZGxlQmx1ciA9IGV2ZW50ID0+IHtcbiAgICAvLyBpZiBvcGVuIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvblxuICAgIGlmICghb3BlbiAmJiBvbkJsdXIpIHtcbiAgICAgIC8vIFByZWFjdCBzdXBwb3J0LCB0YXJnZXQgaXMgcmVhZCBvbmx5IHByb3BlcnR5IG9uIGEgbmF0aXZlIGV2ZW50LlxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV2ZW50LCAndGFyZ2V0Jywge1xuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBuYW1lXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgb25CbHVyKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGRlbGV0ZSBvdGhlclsnYXJpYS1pbnZhbGlkJ107XG4gIGxldCBkaXNwbGF5O1xuICBsZXQgZGlzcGxheVNpbmdsZTtcbiAgY29uc3QgZGlzcGxheU11bHRpcGxlID0gW107XG4gIGxldCBjb21wdXRlRGlzcGxheSA9IGZhbHNlO1xuICBsZXQgZm91bmRNYXRjaCA9IGZhbHNlO1xuXG4gIC8vIE5vIG5lZWQgdG8gZGlzcGxheSBhbnkgdmFsdWUgaWYgdGhlIGZpZWxkIGlzIGVtcHR5LlxuICBpZiAoaXNGaWxsZWQoe1xuICAgIHZhbHVlXG4gIH0pIHx8IGRpc3BsYXlFbXB0eSkge1xuICAgIGlmIChyZW5kZXJWYWx1ZSkge1xuICAgICAgZGlzcGxheSA9IHJlbmRlclZhbHVlKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tcHV0ZURpc3BsYXkgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBjb25zdCBpdGVtcyA9IGNoaWxkcmVuQXJyYXkubWFwKGNoaWxkID0+IHtcbiAgICBpZiAoISAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpc0ZyYWdtZW50KGNoaWxkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtcIk1VSTogVGhlIFNlbGVjdCBjb21wb25lbnQgZG9lc24ndCBhY2NlcHQgYSBGcmFnbWVudCBhcyBhIGNoaWxkLlwiLCAnQ29uc2lkZXIgcHJvdmlkaW5nIGFuIGFycmF5IGluc3RlYWQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgc2VsZWN0ZWQ7XG4gICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBUaGUgXFxgdmFsdWVcXGAgcHJvcCBtdXN0IGJlIGFuIGFycmF5IHdoZW4gdXNpbmcgdGhlIFxcYFNlbGVjdFxcYCBjb21wb25lbnQgd2l0aCBcXGBtdWx0aXBsZVxcYC5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgyKSk7XG4gICAgICB9XG4gICAgICBzZWxlY3RlZCA9IHZhbHVlLnNvbWUodiA9PiBhcmVFcXVhbFZhbHVlcyh2LCBjaGlsZC5wcm9wcy52YWx1ZSkpO1xuICAgICAgaWYgKHNlbGVjdGVkICYmIGNvbXB1dGVEaXNwbGF5KSB7XG4gICAgICAgIGRpc3BsYXlNdWx0aXBsZS5wdXNoKGNoaWxkLnByb3BzLmNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0ZWQgPSBhcmVFcXVhbFZhbHVlcyh2YWx1ZSwgY2hpbGQucHJvcHMudmFsdWUpO1xuICAgICAgaWYgKHNlbGVjdGVkICYmIGNvbXB1dGVEaXNwbGF5KSB7XG4gICAgICAgIGRpc3BsYXlTaW5nbGUgPSBjaGlsZC5wcm9wcy5jaGlsZHJlbjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICBmb3VuZE1hdGNoID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICdhcmlhLXNlbGVjdGVkJzogc2VsZWN0ZWQgPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICAgb25DbGljazogaGFuZGxlSXRlbUNsaWNrKGNoaWxkKSxcbiAgICAgIG9uS2V5VXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIG91ciBNZW51SXRlbXMgZGlzcGF0Y2hlcyBhIGNsaWNrIGV2ZW50XG4gICAgICAgICAgLy8gaXQncyBub3QgYmVoYXZpb3Igb2YgdGhlIG5hdGl2ZSA8b3B0aW9uPiBhbmQgY2F1c2VzXG4gICAgICAgICAgLy8gdGhlIHNlbGVjdCB0byBjbG9zZSBpbW1lZGlhdGVseSBzaW5jZSB3ZSBvcGVuIG9uIHNwYWNlIGtleWRvd25cbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGlsZC5wcm9wcy5vbktleVVwKSB7XG4gICAgICAgICAgY2hpbGQucHJvcHMub25LZXlVcChldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByb2xlOiAnb3B0aW9uJyxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFRoZSB2YWx1ZSBpcyBtb3N0IGxpa2VseSBub3QgYSB2YWxpZCBIVE1MIGF0dHJpYnV0ZS5cbiAgICAgICdkYXRhLXZhbHVlJzogY2hpbGQucHJvcHMudmFsdWUgLy8gSW5zdGVhZCwgd2UgcHJvdmlkZSBpdCBhcyBhIGRhdGEgYXR0cmlidXRlLlxuICAgIH0pO1xuICB9KTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKCFmb3VuZE1hdGNoICYmICFtdWx0aXBsZSAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gY2hpbGRyZW5BcnJheS5tYXAoY2hpbGQgPT4gY2hpbGQucHJvcHMudmFsdWUpO1xuICAgICAgICBjb25zb2xlLndhcm4oW2BNVUk6IFlvdSBoYXZlIHByb3ZpZGVkIGFuIG91dC1vZi1yYW5nZSB2YWx1ZSBcXGAke3ZhbHVlfVxcYCBmb3IgdGhlIHNlbGVjdCAke25hbWUgPyBgKG5hbWU9XCIke25hbWV9XCIpIGAgOiAnJ31jb21wb25lbnQuYCwgXCJDb25zaWRlciBwcm92aWRpbmcgYSB2YWx1ZSB0aGF0IG1hdGNoZXMgb25lIG9mIHRoZSBhdmFpbGFibGUgb3B0aW9ucyBvciAnJy5cIiwgYFRoZSBhdmFpbGFibGUgdmFsdWVzIGFyZSAke3ZhbHVlcy5maWx0ZXIoeCA9PiB4ICE9IG51bGwpLm1hcCh4ID0+IGBcXGAke3h9XFxgYCkuam9pbignLCAnKSB8fCAnXCJcIid9LmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9LCBbZm91bmRNYXRjaCwgY2hpbGRyZW5BcnJheSwgbXVsdGlwbGUsIG5hbWUsIHZhbHVlXSk7XG4gIH1cbiAgaWYgKGNvbXB1dGVEaXNwbGF5KSB7XG4gICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICBpZiAoZGlzcGxheU11bHRpcGxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkaXNwbGF5ID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3BsYXkgPSBkaXNwbGF5TXVsdGlwbGUucmVkdWNlKChvdXRwdXQsIGNoaWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgIG91dHB1dC5wdXNoKGNoaWxkKTtcbiAgICAgICAgICBpZiAoaW5kZXggPCBkaXNwbGF5TXVsdGlwbGUubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgb3V0cHV0LnB1c2goJywgJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH0sIFtdKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGlzcGxheSA9IGRpc3BsYXlTaW5nbGU7XG4gICAgfVxuICB9XG5cbiAgLy8gQXZvaWQgcGVyZm9ybWluZyBhIGxheW91dCBjb21wdXRhdGlvbiBpbiB0aGUgcmVuZGVyIG1ldGhvZC5cbiAgbGV0IG1lbnVNaW5XaWR0aCA9IG1lbnVNaW5XaWR0aFN0YXRlO1xuICBpZiAoIWF1dG9XaWR0aCAmJiBpc09wZW5Db250cm9sbGVkICYmIGRpc3BsYXlOb2RlKSB7XG4gICAgbWVudU1pbldpZHRoID0gYW5jaG9yRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgfVxuICBsZXQgdGFiSW5kZXg7XG4gIGlmICh0eXBlb2YgdGFiSW5kZXhQcm9wICE9PSAndW5kZWZpbmVkJykge1xuICAgIHRhYkluZGV4ID0gdGFiSW5kZXhQcm9wO1xuICB9IGVsc2Uge1xuICAgIHRhYkluZGV4ID0gZGlzYWJsZWQgPyBudWxsIDogMDtcbiAgfVxuICBjb25zdCBidXR0b25JZCA9IFNlbGVjdERpc3BsYXlQcm9wcy5pZCB8fCAobmFtZSA/IGBtdWktY29tcG9uZW50LXNlbGVjdC0ke25hbWV9YCA6IHVuZGVmaW5lZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICB2YXJpYW50LFxuICAgIHZhbHVlLFxuICAgIG9wZW4sXG4gICAgZXJyb3JcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgcGFwZXJQcm9wcyA9IF9leHRlbmRzKHt9LCBNZW51UHJvcHMuUGFwZXJQcm9wcywgKF9NZW51UHJvcHMkc2xvdFByb3BzID0gTWVudVByb3BzLnNsb3RQcm9wcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9NZW51UHJvcHMkc2xvdFByb3BzLnBhcGVyKTtcbiAgY29uc3QgbGlzdGJveElkID0gdXNlSWQoKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhSZWFjdC5GcmFnbWVudCwge1xuICAgIGNoaWxkcmVuOiBbLyojX19QVVJFX18qL19qc3goU2VsZWN0U2VsZWN0LCBfZXh0ZW5kcyh7XG4gICAgICByZWY6IGhhbmRsZURpc3BsYXlSZWYsXG4gICAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgICByb2xlOiBcImNvbWJvYm94XCIsXG4gICAgICBcImFyaWEtY29udHJvbHNcIjogbGlzdGJveElkLFxuICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IGRpc2FibGVkID8gJ3RydWUnIDogdW5kZWZpbmVkLFxuICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IG9wZW4gPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICAgXCJhcmlhLWhhc3BvcHVwXCI6IFwibGlzdGJveFwiLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCxcbiAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFtsYWJlbElkLCBidXR0b25JZF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKSB8fCB1bmRlZmluZWQsXG4gICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogYXJpYURlc2NyaWJlZGJ5LFxuICAgICAgb25LZXlEb3duOiBoYW5kbGVLZXlEb3duLFxuICAgICAgb25Nb3VzZURvd246IGRpc2FibGVkIHx8IHJlYWRPbmx5ID8gbnVsbCA6IGhhbmRsZU1vdXNlRG93bixcbiAgICAgIG9uQmx1cjogaGFuZGxlQmx1cixcbiAgICAgIG9uRm9jdXM6IG9uRm9jdXNcbiAgICB9LCBTZWxlY3REaXNwbGF5UHJvcHMsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goU2VsZWN0RGlzcGxheVByb3BzLmNsYXNzTmFtZSwgY2xhc3Nlcy5zZWxlY3QsIGNsYXNzTmFtZSlcbiAgICAgIC8vIFRoZSBpZCBpcyByZXF1aXJlZCBmb3IgcHJvcGVyIGExMXlcbiAgICAgICxcbiAgICAgIGlkOiBidXR0b25JZCxcbiAgICAgIGNoaWxkcmVuOiBpc0VtcHR5KGRpc3BsYXkpID8gLy8gbm90cmFuc2xhdGUgbmVlZGVkIHdoaWxlIEdvb2dsZSBUcmFuc2xhdGUgd2lsbCBub3QgZml4IHplcm8td2lkdGggc3BhY2UgaXNzdWVcbiAgICAgIF9zcGFuIHx8IChfc3BhbiA9IC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJub3RyYW5zbGF0ZVwiLFxuICAgICAgICBjaGlsZHJlbjogXCJcXHUyMDBCXCJcbiAgICAgIH0pKSA6IGRpc3BsYXlcbiAgICB9KSksIC8qI19fUFVSRV9fKi9fanN4KFNlbGVjdE5hdGl2ZUlucHV0LCBfZXh0ZW5kcyh7XG4gICAgICBcImFyaWEtaW52YWxpZFwiOiBlcnJvcixcbiAgICAgIHZhbHVlOiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywnKSA6IHZhbHVlLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHJlZjogaW5wdXRSZWYsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLm5hdGl2ZUlucHV0LFxuICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSwgb3RoZXIpKSwgLyojX19QVVJFX18qL19qc3goU2VsZWN0SWNvbiwge1xuICAgICAgYXM6IEljb25Db21wb25lbnQsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMuaWNvbixcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgICB9KSwgLyojX19QVVJFX18qL19qc3goTWVudSwgX2V4dGVuZHMoe1xuICAgICAgaWQ6IGBtZW51LSR7bmFtZSB8fCAnJ31gLFxuICAgICAgYW5jaG9yRWw6IGFuY2hvckVsZW1lbnQsXG4gICAgICBvcGVuOiBvcGVuLFxuICAgICAgb25DbG9zZTogaGFuZGxlQ2xvc2UsXG4gICAgICBhbmNob3JPcmlnaW46IHtcbiAgICAgICAgdmVydGljYWw6ICdib3R0b20nLFxuICAgICAgICBob3Jpem9udGFsOiAnY2VudGVyJ1xuICAgICAgfSxcbiAgICAgIHRyYW5zZm9ybU9yaWdpbjoge1xuICAgICAgICB2ZXJ0aWNhbDogJ3RvcCcsXG4gICAgICAgIGhvcml6b250YWw6ICdjZW50ZXInXG4gICAgICB9XG4gICAgfSwgTWVudVByb3BzLCB7XG4gICAgICBNZW51TGlzdFByb3BzOiBfZXh0ZW5kcyh7XG4gICAgICAgICdhcmlhLWxhYmVsbGVkYnknOiBsYWJlbElkLFxuICAgICAgICByb2xlOiAnbGlzdGJveCcsXG4gICAgICAgICdhcmlhLW11bHRpc2VsZWN0YWJsZSc6IG11bHRpcGxlID8gJ3RydWUnIDogdW5kZWZpbmVkLFxuICAgICAgICBkaXNhYmxlTGlzdFdyYXA6IHRydWUsXG4gICAgICAgIGlkOiBsaXN0Ym94SWRcbiAgICAgIH0sIE1lbnVQcm9wcy5NZW51TGlzdFByb3BzKSxcbiAgICAgIHNsb3RQcm9wczogX2V4dGVuZHMoe30sIE1lbnVQcm9wcy5zbG90UHJvcHMsIHtcbiAgICAgICAgcGFwZXI6IF9leHRlbmRzKHt9LCBwYXBlclByb3BzLCB7XG4gICAgICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgICAgIG1pbldpZHRoOiBtZW51TWluV2lkdGhcbiAgICAgICAgICB9LCBwYXBlclByb3BzICE9IG51bGwgPyBwYXBlclByb3BzLnN0eWxlIDogbnVsbClcbiAgICAgICAgfSlcbiAgICAgIH0pLFxuICAgICAgY2hpbGRyZW46IGl0ZW1zXG4gICAgfSkpXVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU2VsZWN0SW5wdXQucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgJ2FyaWEtZGVzY3JpYmVkYnknOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgJ2FyaWEtbGFiZWwnOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHdpZHRoIG9mIHRoZSBwb3BvdmVyIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSBpdGVtcyBpbnNpZGUgdGhlXG4gICAqIG1lbnUsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGF0IGxlYXN0IHRoZSB3aWR0aCBvZiB0aGUgc2VsZWN0IGlucHV0LlxuICAgKi9cbiAgYXV0b1dpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBvcHRpb24gZWxlbWVudHMgdG8gcG9wdWxhdGUgdGhlIHNlbGVjdCB3aXRoLlxuICAgKiBDYW4gYmUgc29tZSBgPE1lbnVJdGVtPmAgZWxlbWVudHMuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIFNlZSBbQ1NTIEFQSV0oI2NzcykgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgQ1NTIGNsYXNzIG5hbWUgb2YgdGhlIHNlbGVjdCBlbGVtZW50LlxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHRvZ2dsZWQgb24gbW91bnQuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgb3BlbiBzdGF0ZSBpcyBub3QgY29udHJvbGxlZC5cbiAgICogWW91IGNhbiBvbmx5IHVzZSBpdCB3aGVuIHRoZSBgbmF0aXZlYCBwcm9wIGlzIGBmYWxzZWAgKGRlZmF1bHQpLlxuICAgKi9cbiAgZGVmYXVsdE9wZW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzZWxlY3QgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzZWxlY3RlZCBpdGVtIGlzIGRpc3BsYXllZCBldmVuIGlmIGl0cyB2YWx1ZSBpcyBlbXB0eS5cbiAgICovXG4gIGRpc3BsYXlFbXB0eTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgc2VsZWN0IGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGljb24gdGhhdCBkaXNwbGF5cyB0aGUgYXJyb3cuXG4gICAqL1xuICBJY29uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIEltcGVyYXRpdmUgaGFuZGxlIGltcGxlbWVudGluZyBgeyB2YWx1ZTogVCwgbm9kZTogSFRNTEVsZW1lbnQsIGZvY3VzKCk6IHZvaWQgfWBcbiAgICogRXF1aXZhbGVudCB0byBgcmVmYFxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgYW4gZWxlbWVudCB0aGF0IGFjdHMgYXMgYW4gYWRkaXRpb25hbCBsYWJlbC4gVGhlIFNlbGVjdCB3aWxsXG4gICAqIGJlIGxhYmVsbGVkIGJ5IHRoZSBhZGRpdGlvbmFsIGxhYmVsIGFuZCB0aGUgc2VsZWN0ZWQgdmFsdWUuXG4gICAqL1xuICBsYWJlbElkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BNZW51YF0oL21hdGVyaWFsLXVpL2FwaS9tZW51LykgZWxlbWVudC5cbiAgICovXG4gIE1lbnVQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYHZhbHVlYCBtdXN0IGJlIGFuIGFycmF5IGFuZCB0aGUgbWVudSB3aWxsIHN1cHBvcnQgbXVsdGlwbGUgc2VsZWN0aW9ucy5cbiAgICovXG4gIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgc2VsZWN0YCBvciBoaWRkZW4gYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIGEgbWVudSBpdGVtIGlzIHNlbGVjdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKGFueSkuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbY2hpbGRdIFRoZSByZWFjdCBlbGVtZW50IHRoYXQgd2FzIHNlbGVjdGVkLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIGNsb3NlZC5cbiAgICogVXNlIGluIGNvbnRyb2xsZWQgbW9kZSAoc2VlIG9wZW4pLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIG9wZW5lZC5cbiAgICogVXNlIGluIGNvbnRyb2xsZWQgbW9kZSAoc2VlIG9wZW4pLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBvbk9wZW46IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIHNlbGVjdGVkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgVGhlIGB2YWx1ZWAgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMge1JlYWN0Tm9kZX1cbiAgICovXG4gIHJlbmRlclZhbHVlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIGNsaWNrYWJsZSBkaXYgZWxlbWVudC5cbiAgICovXG4gIFNlbGVjdERpc3BsYXlQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHRhYkluZGV4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogVGhlIGlucHV0IHZhbHVlLlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydzdGFuZGFyZCcsICdvdXRsaW5lZCcsICdmaWxsZWQnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBTZWxlY3RJbnB1dDsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN2Z0ljb25VdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVN2Z0ljb24nLCBzbG90KTtcbn1cbmNvbnN0IHN2Z0ljb25DbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpU3ZnSWNvbicsIFsncm9vdCcsICdjb2xvclByaW1hcnknLCAnY29sb3JTZWNvbmRhcnknLCAnY29sb3JBY3Rpb24nLCAnY29sb3JFcnJvcicsICdjb2xvckRpc2FibGVkJywgJ2ZvbnRTaXplSW5oZXJpdCcsICdmb250U2l6ZVNtYWxsJywgJ2ZvbnRTaXplTWVkaXVtJywgJ2ZvbnRTaXplTGFyZ2UnXSk7XG5leHBvcnQgZGVmYXVsdCBzdmdJY29uQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiZm9udFNpemVcIiwgXCJodG1sQ29sb3JcIiwgXCJpbmhlcml0Vmlld0JveFwiLCBcInRpdGxlQWNjZXNzXCIsIFwidmlld0JveFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGdldFN2Z0ljb25VdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3N2Z0ljb25DbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY29sb3IsXG4gICAgZm9udFNpemUsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgY29sb3IgIT09ICdpbmhlcml0JyAmJiBgY29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWAsIGBmb250U2l6ZSR7Y2FwaXRhbGl6ZShmb250U2l6ZSl9YF1cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRTdmdJY29uVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBTdmdJY29uUm9vdCA9IHN0eWxlZCgnc3ZnJywge1xuICBuYW1lOiAnTXVpU3ZnSWNvbicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYgc3R5bGVzW2Bjb2xvciR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmNvbG9yKX1gXSwgc3R5bGVzW2Bmb250U2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmZvbnRTaXplKX1gXV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIHZhciBfdGhlbWUkdHJhbnNpdGlvbnMsIF90aGVtZSR0cmFuc2l0aW9ucyRjciwgX3RoZW1lJHRyYW5zaXRpb25zMiwgX3RoZW1lJHR5cG9ncmFwaHksIF90aGVtZSR0eXBvZ3JhcGh5JHB4VCwgX3RoZW1lJHR5cG9ncmFwaHkyLCBfdGhlbWUkdHlwb2dyYXBoeTIkcHgsIF90aGVtZSR0eXBvZ3JhcGh5MywgX3RoZW1lJHR5cG9ncmFwaHkzJHB4LCBfcGFsZXR0ZSRvd25lclN0YXRlJGMsIF9wYWxldHRlLCBfcGFsZXR0ZTIsIF9wYWxldHRlMztcbiAgcmV0dXJuIHtcbiAgICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gICAgd2lkdGg6ICcxZW0nLFxuICAgIGhlaWdodDogJzFlbScsXG4gICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgLy8gdGhlIDxzdmc+IHdpbGwgZGVmaW5lIHRoZSBwcm9wZXJ0eSB0aGF0IGhhcyBgY3VycmVudENvbG9yYFxuICAgIC8vIGUuZy4gaGVyb2ljb25zIHVzZXMgZmlsbD1cIm5vbmVcIiBhbmQgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICBmaWxsOiBvd25lclN0YXRlLmhhc1N2Z0FzQ2hpbGQgPyB1bmRlZmluZWQgOiAnY3VycmVudENvbG9yJyxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICAgIHRyYW5zaXRpb246IChfdGhlbWUkdHJhbnNpdGlvbnMgPSB0aGVtZS50cmFuc2l0aW9ucykgPT0gbnVsbCB8fCAoX3RoZW1lJHRyYW5zaXRpb25zJGNyID0gX3RoZW1lJHRyYW5zaXRpb25zLmNyZWF0ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0cmFuc2l0aW9ucyRjci5jYWxsKF90aGVtZSR0cmFuc2l0aW9ucywgJ2ZpbGwnLCB7XG4gICAgICBkdXJhdGlvbjogKF90aGVtZSR0cmFuc2l0aW9uczIgPSB0aGVtZS50cmFuc2l0aW9ucykgPT0gbnVsbCB8fCAoX3RoZW1lJHRyYW5zaXRpb25zMiA9IF90aGVtZSR0cmFuc2l0aW9uczIuZHVyYXRpb24pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHJhbnNpdGlvbnMyLnNob3J0ZXJcbiAgICB9KSxcbiAgICBmb250U2l6ZToge1xuICAgICAgaW5oZXJpdDogJ2luaGVyaXQnLFxuICAgICAgc21hbGw6ICgoX3RoZW1lJHR5cG9ncmFwaHkgPSB0aGVtZS50eXBvZ3JhcGh5KSA9PSBudWxsIHx8IChfdGhlbWUkdHlwb2dyYXBoeSRweFQgPSBfdGhlbWUkdHlwb2dyYXBoeS5weFRvUmVtKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHR5cG9ncmFwaHkkcHhULmNhbGwoX3RoZW1lJHR5cG9ncmFwaHksIDIwKSkgfHwgJzEuMjVyZW0nLFxuICAgICAgbWVkaXVtOiAoKF90aGVtZSR0eXBvZ3JhcGh5MiA9IHRoZW1lLnR5cG9ncmFwaHkpID09IG51bGwgfHwgKF90aGVtZSR0eXBvZ3JhcGh5MiRweCA9IF90aGVtZSR0eXBvZ3JhcGh5Mi5weFRvUmVtKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHR5cG9ncmFwaHkyJHB4LmNhbGwoX3RoZW1lJHR5cG9ncmFwaHkyLCAyNCkpIHx8ICcxLjVyZW0nLFxuICAgICAgbGFyZ2U6ICgoX3RoZW1lJHR5cG9ncmFwaHkzID0gdGhlbWUudHlwb2dyYXBoeSkgPT0gbnVsbCB8fCAoX3RoZW1lJHR5cG9ncmFwaHkzJHB4ID0gX3RoZW1lJHR5cG9ncmFwaHkzLnB4VG9SZW0pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHlwb2dyYXBoeTMkcHguY2FsbChfdGhlbWUkdHlwb2dyYXBoeTMsIDM1KSkgfHwgJzIuMTg3NXJlbSdcbiAgICB9W293bmVyU3RhdGUuZm9udFNpemVdLFxuICAgIC8vIFRPRE8gdjUgZGVwcmVjYXRlLCB2NiByZW1vdmUgZm9yIHN4XG4gICAgY29sb3I6IChfcGFsZXR0ZSRvd25lclN0YXRlJGMgPSAoX3BhbGV0dGUgPSAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZSkgPT0gbnVsbCB8fCAoX3BhbGV0dGUgPSBfcGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYWxldHRlLm1haW4pICE9IG51bGwgPyBfcGFsZXR0ZSRvd25lclN0YXRlJGMgOiB7XG4gICAgICBhY3Rpb246IChfcGFsZXR0ZTIgPSAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZSkgPT0gbnVsbCB8fCAoX3BhbGV0dGUyID0gX3BhbGV0dGUyLmFjdGlvbikgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYWxldHRlMi5hY3RpdmUsXG4gICAgICBkaXNhYmxlZDogKF9wYWxldHRlMyA9ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlKSA9PSBudWxsIHx8IChfcGFsZXR0ZTMgPSBfcGFsZXR0ZTMuYWN0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX3BhbGV0dGUzLmRpc2FibGVkLFxuICAgICAgaW5oZXJpdDogdW5kZWZpbmVkXG4gICAgfVtvd25lclN0YXRlLmNvbG9yXVxuICB9O1xufSk7XG5jb25zdCBTdmdJY29uID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gU3ZnSWNvbihpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpU3ZnSWNvbidcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sb3IgPSAnaW5oZXJpdCcsXG4gICAgICBjb21wb25lbnQgPSAnc3ZnJyxcbiAgICAgIGZvbnRTaXplID0gJ21lZGl1bScsXG4gICAgICBodG1sQ29sb3IsXG4gICAgICBpbmhlcml0Vmlld0JveCA9IGZhbHNlLFxuICAgICAgdGl0bGVBY2Nlc3MsXG4gICAgICB2aWV3Qm94ID0gJzAgMCAyNCAyNCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgaGFzU3ZnQXNDaGlsZCA9IC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiYgY2hpbGRyZW4udHlwZSA9PT0gJ3N2Zyc7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBjb21wb25lbnQsXG4gICAgZm9udFNpemUsXG4gICAgaW5zdGFuY2VGb250U2l6ZTogaW5Qcm9wcy5mb250U2l6ZSxcbiAgICBpbmhlcml0Vmlld0JveCxcbiAgICB2aWV3Qm94LFxuICAgIGhhc1N2Z0FzQ2hpbGRcbiAgfSk7XG4gIGNvbnN0IG1vcmUgPSB7fTtcbiAgaWYgKCFpbmhlcml0Vmlld0JveCkge1xuICAgIG1vcmUudmlld0JveCA9IHZpZXdCb3g7XG4gIH1cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFN2Z0ljb25Sb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IGNvbXBvbmVudCxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIGZvY3VzYWJsZTogXCJmYWxzZVwiLFxuICAgIGNvbG9yOiBodG1sQ29sb3IsXG4gICAgXCJhcmlhLWhpZGRlblwiOiB0aXRsZUFjY2VzcyA/IHVuZGVmaW5lZCA6IHRydWUsXG4gICAgcm9sZTogdGl0bGVBY2Nlc3MgPyAnaW1nJyA6IHVuZGVmaW5lZCxcbiAgICByZWY6IHJlZlxuICB9LCBtb3JlLCBvdGhlciwgaGFzU3ZnQXNDaGlsZCAmJiBjaGlsZHJlbi5wcm9wcywge1xuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2hpbGRyZW46IFtoYXNTdmdBc0NoaWxkID8gY2hpbGRyZW4ucHJvcHMuY2hpbGRyZW4gOiBjaGlsZHJlbiwgdGl0bGVBY2Nlc3MgPyAvKiNfX1BVUkVfXyovX2pzeChcInRpdGxlXCIsIHtcbiAgICAgIGNoaWxkcmVuOiB0aXRsZUFjY2Vzc1xuICAgIH0pIDogbnVsbF1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBTdmdJY29uLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIE5vZGUgcGFzc2VkIGludG8gdGhlIFNWRyBlbGVtZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIFlvdSBjYW4gdXNlIHRoZSBgaHRtbENvbG9yYCBwcm9wIHRvIGFwcGx5IGEgY29sb3IgYXR0cmlidXRlIHRvIHRoZSBTVkcgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgJ2luaGVyaXQnXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydpbmhlcml0JywgJ2FjdGlvbicsICdkaXNhYmxlZCcsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBUaGUgZm9udFNpemUgYXBwbGllZCB0byB0aGUgaWNvbi4gRGVmYXVsdHMgdG8gMjRweCwgYnV0IGNhbiBiZSBjb25maWd1cmUgdG8gaW5oZXJpdCBmb250IHNpemUuXG4gICAqIEBkZWZhdWx0ICdtZWRpdW0nXG4gICAqL1xuICBmb250U2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydpbmhlcml0JywgJ2xhcmdlJywgJ21lZGl1bScsICdzbWFsbCddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogQXBwbGllcyBhIGNvbG9yIGF0dHJpYnV0ZSB0byB0aGUgU1ZHIGVsZW1lbnQuXG4gICAqL1xuICBodG1sQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByb290IG5vZGUgd2lsbCBpbmhlcml0IHRoZSBjdXN0b20gYGNvbXBvbmVudGAncyB2aWV3Qm94IGFuZCB0aGUgYHZpZXdCb3hgXG4gICAqIHByb3Agd2lsbCBiZSBpZ25vcmVkLlxuICAgKiBVc2VmdWwgd2hlbiB5b3Ugd2FudCB0byByZWZlcmVuY2UgYSBjdXN0b20gYGNvbXBvbmVudGAgYW5kIGhhdmUgYFN2Z0ljb25gIHBhc3MgdGhhdFxuICAgKiBgY29tcG9uZW50YCdzIHZpZXdCb3ggdG8gdGhlIHJvb3Qgbm9kZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGluaGVyaXRWaWV3Qm94OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzaGFwZS1yZW5kZXJpbmcgYXR0cmlidXRlLiBUaGUgYmVoYXZpb3Igb2YgdGhlIGRpZmZlcmVudCBvcHRpb25zIGlzIGRlc2NyaWJlZCBvbiB0aGVcbiAgICogW01ETiBXZWIgRG9jc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU1ZHL0F0dHJpYnV0ZS9zaGFwZS1yZW5kZXJpbmcpLlxuICAgKiBJZiB5b3UgYXJlIGhhdmluZyBpc3N1ZXMgd2l0aCBibHVycnkgaWNvbnMgeW91IHNob3VsZCBpbnZlc3RpZ2F0ZSB0aGlzIHByb3AuXG4gICAqL1xuICBzaGFwZVJlbmRlcmluZzogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFByb3ZpZGVzIGEgaHVtYW4tcmVhZGFibGUgdGl0bGUgZm9yIHRoZSBlbGVtZW50IHRoYXQgY29udGFpbnMgaXQuXG4gICAqIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkctYWNjZXNzLyNFcXVpdmFsZW50XG4gICAqL1xuICB0aXRsZUFjY2VzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEFsbG93cyB5b3UgdG8gcmVkZWZpbmUgd2hhdCB0aGUgY29vcmRpbmF0ZXMgd2l0aG91dCB1bml0cyBtZWFuIGluc2lkZSBhbiBTVkcgZWxlbWVudC5cbiAgICogRm9yIGV4YW1wbGUsIGlmIHRoZSBTVkcgZWxlbWVudCBpcyA1MDAgKHdpZHRoKSBieSAyMDAgKGhlaWdodCksXG4gICAqIGFuZCB5b3UgcGFzcyB2aWV3Qm94PVwiMCAwIDUwIDIwXCIsXG4gICAqIHRoaXMgbWVhbnMgdGhhdCB0aGUgY29vcmRpbmF0ZXMgaW5zaWRlIHRoZSBTVkcgd2lsbCBnbyBmcm9tIHRoZSB0b3AgbGVmdCBjb3JuZXIgKDAsMClcbiAgICogdG8gYm90dG9tIHJpZ2h0ICg1MCwyMCkgYW5kIGVhY2ggdW5pdCB3aWxsIGJlIHdvcnRoIDEwcHguXG4gICAqIEBkZWZhdWx0ICcwIDAgMjQgMjQnXG4gICAqL1xuICB2aWV3Qm94OiBQcm9wVHlwZXMuc3RyaW5nXG59IDogdm9pZCAwO1xuU3ZnSWNvbi5tdWlOYW1lID0gJ1N2Z0ljb24nO1xuZXhwb3J0IGRlZmF1bHQgU3ZnSWNvbjsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjcmVhdGVTdmdJY29uIGZyb20gJy4uLy4uL3V0aWxzL2NyZWF0ZVN2Z0ljb24nO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVTdmdJY29uKCAvKiNfX1BVUkVfXyovX2pzeChcInBhdGhcIiwge1xuICBkOiBcIk03IDEwbDUgNSA1LTV6XCJcbn0pLCAnQXJyb3dEcm9wRG93bicpOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU3ZnSWNvbiBmcm9tICcuLi9TdmdJY29uJztcblxuLyoqXG4gKiBQcml2YXRlIG1vZHVsZSByZXNlcnZlZCBmb3IgQG11aSBwYWNrYWdlcy5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVN2Z0ljb24ocGF0aCwgZGlzcGxheU5hbWUpIHtcbiAgZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCByZWYpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3ZnSWNvbiwgX2V4dGVuZHMoe1xuICAgICAgXCJkYXRhLXRlc3RpZFwiOiBgJHtkaXNwbGF5TmFtZX1JY29uYCxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgcHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBwYXRoXG4gICAgfSkpO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gTmVlZCB0byBzZXQgYGRpc3BsYXlOYW1lYCBvbiB0aGUgaW5uZXIgY29tcG9uZW50IGZvciBSZWFjdC5tZW1vLlxuICAgIC8vIFJlYWN0IHByaW9yIHRvIDE2LjE0IGlnbm9yZXMgYGRpc3BsYXlOYW1lYCBvbiB0aGUgd3JhcHBlci5cbiAgICBDb21wb25lbnQuZGlzcGxheU5hbWUgPSBgJHtkaXNwbGF5TmFtZX1JY29uYDtcbiAgfVxuICBDb21wb25lbnQubXVpTmFtZSA9IFN2Z0ljb24ubXVpTmFtZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5tZW1vKCAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihDb21wb25lbnQpKTtcbn0iLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhdXRvV2lkdGhcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzZXNcIiwgXCJjbGFzc05hbWVcIiwgXCJkZWZhdWx0T3BlblwiLCBcImRpc3BsYXlFbXB0eVwiLCBcIkljb25Db21wb25lbnRcIiwgXCJpZFwiLCBcImlucHV0XCIsIFwiaW5wdXRQcm9wc1wiLCBcImxhYmVsXCIsIFwibGFiZWxJZFwiLCBcIk1lbnVQcm9wc1wiLCBcIm11bHRpcGxlXCIsIFwibmF0aXZlXCIsIFwib25DbG9zZVwiLCBcIm9uT3BlblwiLCBcIm9wZW5cIiwgXCJyZW5kZXJWYWx1ZVwiLCBcIlNlbGVjdERpc3BsYXlQcm9wc1wiLCBcInZhcmlhbnRcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJyb290XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgZGVlcG1lcmdlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgU2VsZWN0SW5wdXQgZnJvbSAnLi9TZWxlY3RJbnB1dCc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgQXJyb3dEcm9wRG93bkljb24gZnJvbSAnLi4vaW50ZXJuYWwvc3ZnLWljb25zL0Fycm93RHJvcERvd24nO1xuaW1wb3J0IElucHV0IGZyb20gJy4uL0lucHV0JztcbmltcG9ydCBOYXRpdmVTZWxlY3RJbnB1dCBmcm9tICcuLi9OYXRpdmVTZWxlY3QvTmF0aXZlU2VsZWN0SW5wdXQnO1xuaW1wb3J0IEZpbGxlZElucHV0IGZyb20gJy4uL0ZpbGxlZElucHV0JztcbmltcG9ydCBPdXRsaW5lZElucHV0IGZyb20gJy4uL091dGxpbmVkSW5wdXQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICByZXR1cm4gY2xhc3Nlcztcbn07XG5jb25zdCBzdHlsZWRSb290Q29uZmlnID0ge1xuICBuYW1lOiAnTXVpU2VsZWN0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdCxcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApICYmIHByb3AgIT09ICd2YXJpYW50JyxcbiAgc2xvdDogJ1Jvb3QnXG59O1xuY29uc3QgU3R5bGVkSW5wdXQgPSBzdHlsZWQoSW5wdXQsIHN0eWxlZFJvb3RDb25maWcpKCcnKTtcbmNvbnN0IFN0eWxlZE91dGxpbmVkSW5wdXQgPSBzdHlsZWQoT3V0bGluZWRJbnB1dCwgc3R5bGVkUm9vdENvbmZpZykoJycpO1xuY29uc3QgU3R5bGVkRmlsbGVkSW5wdXQgPSBzdHlsZWQoRmlsbGVkSW5wdXQsIHN0eWxlZFJvb3RDb25maWcpKCcnKTtcbmNvbnN0IFNlbGVjdCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFNlbGVjdChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBuYW1lOiAnTXVpU2VsZWN0JyxcbiAgICBwcm9wczogaW5Qcm9wc1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgYXV0b1dpZHRoID0gZmFsc2UsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzZXM6IGNsYXNzZXNQcm9wID0ge30sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkZWZhdWx0T3BlbiA9IGZhbHNlLFxuICAgICAgZGlzcGxheUVtcHR5ID0gZmFsc2UsXG4gICAgICBJY29uQ29tcG9uZW50ID0gQXJyb3dEcm9wRG93bkljb24sXG4gICAgICBpZCxcbiAgICAgIGlucHV0LFxuICAgICAgaW5wdXRQcm9wcyxcbiAgICAgIGxhYmVsLFxuICAgICAgbGFiZWxJZCxcbiAgICAgIE1lbnVQcm9wcyxcbiAgICAgIG11bHRpcGxlID0gZmFsc2UsXG4gICAgICBuYXRpdmUgPSBmYWxzZSxcbiAgICAgIG9uQ2xvc2UsXG4gICAgICBvbk9wZW4sXG4gICAgICBvcGVuLFxuICAgICAgcmVuZGVyVmFsdWUsXG4gICAgICBTZWxlY3REaXNwbGF5UHJvcHMsXG4gICAgICB2YXJpYW50OiB2YXJpYW50UHJvcCA9ICdvdXRsaW5lZCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgaW5wdXRDb21wb25lbnQgPSBuYXRpdmUgPyBOYXRpdmVTZWxlY3RJbnB1dCA6IFNlbGVjdElucHV0O1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWyd2YXJpYW50JywgJ2Vycm9yJ11cbiAgfSk7XG4gIGNvbnN0IHZhcmlhbnQgPSBmY3MudmFyaWFudCB8fCB2YXJpYW50UHJvcDtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIHZhcmlhbnQsXG4gICAgY2xhc3NlczogY2xhc3Nlc1Byb3BcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgcmVzdE9mQ2xhc3NlcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGNsYXNzZXMsIF9leGNsdWRlZDIpO1xuICBjb25zdCBJbnB1dENvbXBvbmVudCA9IGlucHV0IHx8IHtcbiAgICBzdGFuZGFyZDogLyojX19QVVJFX18qL19qc3goU3R5bGVkSW5wdXQsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgICB9KSxcbiAgICBvdXRsaW5lZDogLyojX19QVVJFX18qL19qc3goU3R5bGVkT3V0bGluZWRJbnB1dCwge1xuICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0pLFxuICAgIGZpbGxlZDogLyojX19QVVJFX18qL19qc3goU3R5bGVkRmlsbGVkSW5wdXQsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgICB9KVxuICB9W3ZhcmlhbnRdO1xuICBjb25zdCBpbnB1dENvbXBvbmVudFJlZiA9IHVzZUZvcmtSZWYocmVmLCBJbnB1dENvbXBvbmVudC5yZWYpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChJbnB1dENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgLy8gTW9zdCBvZiB0aGUgbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gYFNlbGVjdElucHV0YC5cbiAgICAgIC8vIFRoZSBgU2VsZWN0YCBjb21wb25lbnQgaXMgYSBzaW1wbGUgQVBJIHdyYXBwZXIgdG8gZXhwb3NlIHNvbWV0aGluZyBiZXR0ZXIgdG8gcGxheSB3aXRoLlxuICAgICAgaW5wdXRDb21wb25lbnQsXG4gICAgICBpbnB1dFByb3BzOiBfZXh0ZW5kcyh7XG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBlcnJvcjogZmNzLmVycm9yLFxuICAgICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgICB2YXJpYW50LFxuICAgICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAgIC8vIFdlIHJlbmRlciBhIHNlbGVjdC4gV2UgY2FuIGlnbm9yZSB0aGUgdHlwZSBwcm92aWRlZCBieSB0aGUgYElucHV0YC5cbiAgICAgICAgbXVsdGlwbGVcbiAgICAgIH0sIG5hdGl2ZSA/IHtcbiAgICAgICAgaWRcbiAgICAgIH0gOiB7XG4gICAgICAgIGF1dG9XaWR0aCxcbiAgICAgICAgZGVmYXVsdE9wZW4sXG4gICAgICAgIGRpc3BsYXlFbXB0eSxcbiAgICAgICAgbGFiZWxJZCxcbiAgICAgICAgTWVudVByb3BzLFxuICAgICAgICBvbkNsb3NlLFxuICAgICAgICBvbk9wZW4sXG4gICAgICAgIG9wZW4sXG4gICAgICAgIHJlbmRlclZhbHVlLFxuICAgICAgICBTZWxlY3REaXNwbGF5UHJvcHM6IF9leHRlbmRzKHtcbiAgICAgICAgICBpZFxuICAgICAgICB9LCBTZWxlY3REaXNwbGF5UHJvcHMpXG4gICAgICB9LCBpbnB1dFByb3BzLCB7XG4gICAgICAgIGNsYXNzZXM6IGlucHV0UHJvcHMgPyBkZWVwbWVyZ2UocmVzdE9mQ2xhc3NlcywgaW5wdXRQcm9wcy5jbGFzc2VzKSA6IHJlc3RPZkNsYXNzZXNcbiAgICAgIH0sIGlucHV0ID8gaW5wdXQucHJvcHMuaW5wdXRQcm9wcyA6IHt9KVxuICAgIH0sIG11bHRpcGxlICYmIG5hdGl2ZSAmJiB2YXJpYW50ID09PSAnb3V0bGluZWQnID8ge1xuICAgICAgbm90Y2hlZDogdHJ1ZVxuICAgIH0gOiB7fSwge1xuICAgICAgcmVmOiBpbnB1dENvbXBvbmVudFJlZixcbiAgICAgIGNsYXNzTmFtZTogY2xzeChJbnB1dENvbXBvbmVudC5wcm9wcy5jbGFzc05hbWUsIGNsYXNzTmFtZSwgY2xhc3Nlcy5yb290KVxuICAgIH0sICFpbnB1dCAmJiB7XG4gICAgICB2YXJpYW50XG4gICAgfSwgb3RoZXIpKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU2VsZWN0LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHdpZHRoIG9mIHRoZSBwb3BvdmVyIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSBpdGVtcyBpbnNpZGUgdGhlXG4gICAqIG1lbnUsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGF0IGxlYXN0IHRoZSB3aWR0aCBvZiB0aGUgc2VsZWN0IGlucHV0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b1dpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBvcHRpb24gZWxlbWVudHMgdG8gcG9wdWxhdGUgdGhlIHNlbGVjdCB3aXRoLlxuICAgKiBDYW4gYmUgc29tZSBgTWVudUl0ZW1gIHdoZW4gYG5hdGl2ZWAgaXMgZmFsc2UgYW5kIGBvcHRpb25gIHdoZW4gYG5hdGl2ZWAgaXMgdHJ1ZS5cbiAgICpcbiAgICog4pqg77iPVGhlIGBNZW51SXRlbWAgZWxlbWVudHMgKiptdXN0KiogYmUgZGlyZWN0IGRlc2NlbmRhbnRzIHdoZW4gYG5hdGl2ZWAgaXMgZmFsc2UuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxseSBvcGVuLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IG9wZW4gc3RhdGUgaXMgbm90IGNvbnRyb2xsZWQgKGkuZS4gdGhlIGBvcGVuYCBwcm9wIGlzIG5vdCBkZWZpbmVkKS5cbiAgICogWW91IGNhbiBvbmx5IHVzZSBpdCB3aGVuIHRoZSBgbmF0aXZlYCBwcm9wIGlzIGBmYWxzZWAgKGRlZmF1bHQpLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVmYXVsdE9wZW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgdmFsdWUgaXMgZGlzcGxheWVkIGV2ZW4gaWYgbm8gaXRlbXMgYXJlIHNlbGVjdGVkLlxuICAgKlxuICAgKiBJbiBvcmRlciB0byBkaXNwbGF5IGEgbWVhbmluZ2Z1bCB2YWx1ZSwgYSBmdW5jdGlvbiBjYW4gYmUgcGFzc2VkIHRvIHRoZSBgcmVuZGVyVmFsdWVgIHByb3Agd2hpY2hcbiAgICogcmV0dXJucyB0aGUgdmFsdWUgdG8gYmUgZGlzcGxheWVkIHdoZW4gbm8gaXRlbXMgYXJlIHNlbGVjdGVkLlxuICAgKlxuICAgKiDimqDvuI8gV2hlbiB1c2luZyB0aGlzIHByb3AsIG1ha2Ugc3VyZSB0aGUgbGFiZWwgZG9lc24ndCBvdmVybGFwIHdpdGggdGhlIGVtcHR5IGRpc3BsYXllZCB2YWx1ZS5cbiAgICogVGhlIGxhYmVsIHNob3VsZCBlaXRoZXIgYmUgaGlkZGVuIG9yIGZvcmNlZCB0byBhIHNocnVuayBzdGF0ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc3BsYXlFbXB0eTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0aGF0IGRpc3BsYXlzIHRoZSBhcnJvdy5cbiAgICogQGRlZmF1bHQgQXJyb3dEcm9wRG93bkljb25cbiAgICovXG4gIEljb25Db21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFRoZSBgaWRgIG9mIHRoZSB3cmFwcGVyIGVsZW1lbnQgb3IgdGhlIGBzZWxlY3RgIGVsZW1lbnQgd2hlbiBgbmF0aXZlYC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQW4gYElucHV0YCBlbGVtZW50OyBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgbWF0ZXJpYWwtdWkgc3BlY2lmaWMgYElucHV0YC5cbiAgICovXG4gIGlucHV0OiBQcm9wVHlwZXMuZWxlbWVudCxcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBXaGVuIGBuYXRpdmVgIGlzIGB0cnVlYCwgdGhlIGF0dHJpYnV0ZXMgYXJlIGFwcGxpZWQgb24gdGhlIGBzZWxlY3RgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogU2VlIFtPdXRsaW5lZElucHV0I2xhYmVsXSgvbWF0ZXJpYWwtdWkvYXBpL291dGxpbmVkLWlucHV0LyNwcm9wcylcbiAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiBhbiBlbGVtZW50IHRoYXQgYWN0cyBhcyBhbiBhZGRpdGlvbmFsIGxhYmVsLiBUaGUgU2VsZWN0IHdpbGxcbiAgICogYmUgbGFiZWxsZWQgYnkgdGhlIGFkZGl0aW9uYWwgbGFiZWwgYW5kIHRoZSBzZWxlY3RlZCB2YWx1ZS5cbiAgICovXG4gIGxhYmVsSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYE1lbnVgXSgvbWF0ZXJpYWwtdWkvYXBpL21lbnUvKSBlbGVtZW50LlxuICAgKi9cbiAgTWVudVByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogSWYgYHRydWVgLCBgdmFsdWVgIG11c3QgYmUgYW4gYXJyYXkgYW5kIHRoZSBtZW51IHdpbGwgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb25zLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IHVzZXMgYSBuYXRpdmUgYHNlbGVjdGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG5hdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIGEgbWVudSBpdGVtIGlzIHNlbGVjdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1NlbGVjdENoYW5nZUV2ZW50PFZhbHVlPn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKGFueSkuXG4gICAqICoqV2FybmluZyoqOiBUaGlzIGlzIGEgZ2VuZXJpYyBldmVudCwgbm90IGEgY2hhbmdlIGV2ZW50LCB1bmxlc3MgdGhlIGNoYW5nZSBldmVudCBpcyBjYXVzZWQgYnkgYnJvd3NlciBhdXRvZmlsbC5cbiAgICogQHBhcmFtIHtvYmplY3R9IFtjaGlsZF0gVGhlIHJlYWN0IGVsZW1lbnQgdGhhdCB3YXMgc2VsZWN0ZWQgd2hlbiBgbmF0aXZlYCBpcyBgZmFsc2VgIChkZWZhdWx0KS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqIFVzZSBpdCBpbiBlaXRoZXIgY29udHJvbGxlZCAoc2VlIHRoZSBgb3BlbmAgcHJvcCksIG9yIHVuY29udHJvbGxlZCBtb2RlICh0byBkZXRlY3Qgd2hlbiB0aGUgU2VsZWN0IGNvbGxhcHNlcykuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIG9wZW5lZC5cbiAgICogVXNlIGl0IGluIGVpdGhlciBjb250cm9sbGVkIChzZWUgdGhlIGBvcGVuYCBwcm9wKSwgb3IgdW5jb250cm9sbGVkIG1vZGUgKHRvIGRldGVjdCB3aGVuIHRoZSBTZWxlY3QgZXhwYW5kcykuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIG9uT3BlbjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqIFlvdSBjYW4gb25seSB1c2UgaXQgd2hlbiB0aGUgYG5hdGl2ZWAgcHJvcCBpcyBgZmFsc2VgIChkZWZhdWx0KS5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogUmVuZGVyIHRoZSBzZWxlY3RlZCB2YWx1ZS5cbiAgICogWW91IGNhbiBvbmx5IHVzZSBpdCB3aGVuIHRoZSBgbmF0aXZlYCBwcm9wIGlzIGBmYWxzZWAgKGRlZmF1bHQpLlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgVGhlIGB2YWx1ZWAgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMge1JlYWN0Tm9kZX1cbiAgICovXG4gIHJlbmRlclZhbHVlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIGNsaWNrYWJsZSBkaXYgZWxlbWVudC5cbiAgICovXG4gIFNlbGVjdERpc3BsYXlQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSBgaW5wdXRgIHZhbHVlLiBQcm92aWRpbmcgYW4gZW1wdHkgc3RyaW5nIHdpbGwgc2VsZWN0IG5vIG9wdGlvbnMuXG4gICAqIFNldCB0byBhbiBlbXB0eSBzdHJpbmcgYCcnYCBpZiB5b3UgZG9uJ3Qgd2FudCBhbnkgb2YgdGhlIGF2YWlsYWJsZSBvcHRpb25zIHRvIGJlIHNlbGVjdGVkLlxuICAgKlxuICAgKiBJZiB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0IGl0IG11c3QgaGF2ZSByZWZlcmVuY2UgZXF1YWxpdHkgd2l0aCB0aGUgb3B0aW9uIGluIG9yZGVyIHRvIGJlIHNlbGVjdGVkLlxuICAgKiBJZiB0aGUgdmFsdWUgaXMgbm90IGFuIG9iamVjdCwgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBtdXN0IG1hdGNoIHdpdGggdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb3B0aW9uIGluIG9yZGVyIHRvIGJlIHNlbGVjdGVkLlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJyddKSwgUHJvcFR5cGVzLmFueV0pLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCAnb3V0bGluZWQnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnXSlcbn0gOiB2b2lkIDA7XG5TZWxlY3QubXVpTmFtZSA9ICdTZWxlY3QnO1xuZXhwb3J0IGRlZmF1bHQgU2VsZWN0OyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VGV4dEZpZWxkVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUZXh0RmllbGQnLCBzbG90KTtcbn1cbmNvbnN0IHRleHRGaWVsZENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlUZXh0RmllbGQnLCBbJ3Jvb3QnXSk7XG5leHBvcnQgZGVmYXVsdCB0ZXh0RmllbGRDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImF1dG9Db21wbGV0ZVwiLCBcImF1dG9Gb2N1c1wiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJkaXNhYmxlZFwiLCBcImVycm9yXCIsIFwiRm9ybUhlbHBlclRleHRQcm9wc1wiLCBcImZ1bGxXaWR0aFwiLCBcImhlbHBlclRleHRcIiwgXCJpZFwiLCBcIklucHV0TGFiZWxQcm9wc1wiLCBcImlucHV0UHJvcHNcIiwgXCJJbnB1dFByb3BzXCIsIFwiaW5wdXRSZWZcIiwgXCJsYWJlbFwiLCBcIm1heFJvd3NcIiwgXCJtaW5Sb3dzXCIsIFwibXVsdGlsaW5lXCIsIFwibmFtZVwiLCBcIm9uQmx1clwiLCBcIm9uQ2hhbmdlXCIsIFwib25Gb2N1c1wiLCBcInBsYWNlaG9sZGVyXCIsIFwicmVxdWlyZWRcIiwgXCJyb3dzXCIsIFwic2VsZWN0XCIsIFwiU2VsZWN0UHJvcHNcIiwgXCJ0eXBlXCIsIFwidmFsdWVcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgcmVmVHlwZSwgdW5zdGFibGVfdXNlSWQgYXMgdXNlSWQgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgSW5wdXQgZnJvbSAnLi4vSW5wdXQnO1xuaW1wb3J0IEZpbGxlZElucHV0IGZyb20gJy4uL0ZpbGxlZElucHV0JztcbmltcG9ydCBPdXRsaW5lZElucHV0IGZyb20gJy4uL091dGxpbmVkSW5wdXQnO1xuaW1wb3J0IElucHV0TGFiZWwgZnJvbSAnLi4vSW5wdXRMYWJlbCc7XG5pbXBvcnQgRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wnO1xuaW1wb3J0IEZvcm1IZWxwZXJUZXh0IGZyb20gJy4uL0Zvcm1IZWxwZXJUZXh0JztcbmltcG9ydCBTZWxlY3QgZnJvbSAnLi4vU2VsZWN0JztcbmltcG9ydCB7IGdldFRleHRGaWVsZFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vdGV4dEZpZWxkQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdmFyaWFudENvbXBvbmVudCA9IHtcbiAgc3RhbmRhcmQ6IElucHV0LFxuICBmaWxsZWQ6IEZpbGxlZElucHV0LFxuICBvdXRsaW5lZDogT3V0bGluZWRJbnB1dFxufTtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFRleHRGaWVsZFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgVGV4dEZpZWxkUm9vdCA9IHN0eWxlZChGb3JtQ29udHJvbCwge1xuICBuYW1lOiAnTXVpVGV4dEZpZWxkJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSh7fSk7XG5cbi8qKlxuICogVGhlIGBUZXh0RmllbGRgIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBmb3IgdGhlIG1vc3QgY29tbW9uIGNhc2VzICg4MCUpLlxuICogSXQgY2Fubm90IGJlIGFsbCB0aGluZ3MgdG8gYWxsIHBlb3BsZSwgb3RoZXJ3aXNlIHRoZSBBUEkgd291bGQgZ3JvdyBvdXQgb2YgY29udHJvbC5cbiAqXG4gKiAjIyBBZHZhbmNlZCBDb25maWd1cmF0aW9uXG4gKlxuICogSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGF0IHRoZSB0ZXh0IGZpZWxkIGlzIGEgc2ltcGxlIGFic3RyYWN0aW9uXG4gKiBvbiB0b3Agb2YgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOlxuICpcbiAqIC0gW0Zvcm1Db250cm9sXSgvbWF0ZXJpYWwtdWkvYXBpL2Zvcm0tY29udHJvbC8pXG4gKiAtIFtJbnB1dExhYmVsXSgvbWF0ZXJpYWwtdWkvYXBpL2lucHV0LWxhYmVsLylcbiAqIC0gW0ZpbGxlZElucHV0XSgvbWF0ZXJpYWwtdWkvYXBpL2ZpbGxlZC1pbnB1dC8pXG4gKiAtIFtPdXRsaW5lZElucHV0XSgvbWF0ZXJpYWwtdWkvYXBpL291dGxpbmVkLWlucHV0LylcbiAqIC0gW0lucHV0XSgvbWF0ZXJpYWwtdWkvYXBpL2lucHV0LylcbiAqIC0gW0Zvcm1IZWxwZXJUZXh0XSgvbWF0ZXJpYWwtdWkvYXBpL2Zvcm0taGVscGVyLXRleHQvKVxuICpcbiAqIElmIHlvdSB3aXNoIHRvIGFsdGVyIHRoZSBwcm9wcyBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHlvdSBjYW4gZG8gc28gYXMgZm9sbG93czpcbiAqXG4gKiBgYGBqc3hcbiAqIGNvbnN0IGlucHV0UHJvcHMgPSB7XG4gKiAgIHN0ZXA6IDMwMCxcbiAqIH07XG4gKlxuICogcmV0dXJuIDxUZXh0RmllbGQgaWQ9XCJ0aW1lXCIgdHlwZT1cInRpbWVcIiBpbnB1dFByb3BzPXtpbnB1dFByb3BzfSAvPjtcbiAqIGBgYFxuICpcbiAqIEZvciBhZHZhbmNlZCBjYXNlcywgcGxlYXNlIGxvb2sgYXQgdGhlIHNvdXJjZSBvZiBUZXh0RmllbGQgYnkgY2xpY2tpbmcgb24gdGhlXG4gKiBcIkVkaXQgdGhpcyBwYWdlXCIgYnV0dG9uIGFib3ZlLiBDb25zaWRlciBlaXRoZXI6XG4gKlxuICogLSB1c2luZyB0aGUgdXBwZXIgY2FzZSBwcm9wcyBmb3IgcGFzc2luZyB2YWx1ZXMgZGlyZWN0bHkgdG8gdGhlIGNvbXBvbmVudHNcbiAqIC0gdXNpbmcgdGhlIHVuZGVybHlpbmcgY29tcG9uZW50cyBkaXJlY3RseSBhcyBzaG93biBpbiB0aGUgZGVtb3NcbiAqL1xuY29uc3QgVGV4dEZpZWxkID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gVGV4dEZpZWxkKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlUZXh0RmllbGQnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhdXRvQ29tcGxldGUsXG4gICAgICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgICAgZXJyb3IgPSBmYWxzZSxcbiAgICAgIEZvcm1IZWxwZXJUZXh0UHJvcHMsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIGhlbHBlclRleHQsXG4gICAgICBpZDogaWRPdmVycmlkZSxcbiAgICAgIElucHV0TGFiZWxQcm9wcyxcbiAgICAgIGlucHV0UHJvcHMsXG4gICAgICBJbnB1dFByb3BzLFxuICAgICAgaW5wdXRSZWYsXG4gICAgICBsYWJlbCxcbiAgICAgIG1heFJvd3MsXG4gICAgICBtaW5Sb3dzLFxuICAgICAgbXVsdGlsaW5lID0gZmFsc2UsXG4gICAgICBuYW1lLFxuICAgICAgb25CbHVyLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBvbkZvY3VzLFxuICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICByZXF1aXJlZCA9IGZhbHNlLFxuICAgICAgcm93cyxcbiAgICAgIHNlbGVjdCA9IGZhbHNlLFxuICAgICAgU2VsZWN0UHJvcHMsXG4gICAgICB0eXBlLFxuICAgICAgdmFsdWUsXG4gICAgICB2YXJpYW50ID0gJ291dGxpbmVkJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgYXV0b0ZvY3VzLFxuICAgIGNvbG9yLFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBtdWx0aWxpbmUsXG4gICAgcmVxdWlyZWQsXG4gICAgc2VsZWN0LFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoc2VsZWN0ICYmICFjaGlsZHJlbikge1xuICAgICAgY29uc29sZS5lcnJvcignTVVJOiBgY2hpbGRyZW5gIG11c3QgYmUgcGFzc2VkIHdoZW4gdXNpbmcgdGhlIGBUZXh0RmllbGRgIGNvbXBvbmVudCB3aXRoIGBzZWxlY3RgLicpO1xuICAgIH1cbiAgfVxuICBjb25zdCBJbnB1dE1vcmUgPSB7fTtcbiAgaWYgKHZhcmlhbnQgPT09ICdvdXRsaW5lZCcpIHtcbiAgICBpZiAoSW5wdXRMYWJlbFByb3BzICYmIHR5cGVvZiBJbnB1dExhYmVsUHJvcHMuc2hyaW5rICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgSW5wdXRNb3JlLm5vdGNoZWQgPSBJbnB1dExhYmVsUHJvcHMuc2hyaW5rO1xuICAgIH1cbiAgICBJbnB1dE1vcmUubGFiZWwgPSBsYWJlbDtcbiAgfVxuICBpZiAoc2VsZWN0KSB7XG4gICAgLy8gdW5zZXQgZGVmYXVsdHMgZnJvbSB0ZXh0Ym94IGlucHV0c1xuICAgIGlmICghU2VsZWN0UHJvcHMgfHwgIVNlbGVjdFByb3BzLm5hdGl2ZSkge1xuICAgICAgSW5wdXRNb3JlLmlkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBJbnB1dE1vcmVbJ2FyaWEtZGVzY3JpYmVkYnknXSA9IHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBpZCA9IHVzZUlkKGlkT3ZlcnJpZGUpO1xuICBjb25zdCBoZWxwZXJUZXh0SWQgPSBoZWxwZXJUZXh0ICYmIGlkID8gYCR7aWR9LWhlbHBlci10ZXh0YCA6IHVuZGVmaW5lZDtcbiAgY29uc3QgaW5wdXRMYWJlbElkID0gbGFiZWwgJiYgaWQgPyBgJHtpZH0tbGFiZWxgIDogdW5kZWZpbmVkO1xuICBjb25zdCBJbnB1dENvbXBvbmVudCA9IHZhcmlhbnRDb21wb25lbnRbdmFyaWFudF07XG4gIGNvbnN0IElucHV0RWxlbWVudCA9IC8qI19fUFVSRV9fKi9fanN4KElucHV0Q29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGhlbHBlclRleHRJZCxcbiAgICBhdXRvQ29tcGxldGU6IGF1dG9Db21wbGV0ZSxcbiAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSxcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICBtdWx0aWxpbmU6IG11bHRpbGluZSxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHJvd3M6IHJvd3MsXG4gICAgbWF4Um93czogbWF4Um93cyxcbiAgICBtaW5Sb3dzOiBtaW5Sb3dzLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIGlkOiBpZCxcbiAgICBpbnB1dFJlZjogaW5wdXRSZWYsXG4gICAgb25CbHVyOiBvbkJsdXIsXG4gICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgIG9uRm9jdXM6IG9uRm9jdXMsXG4gICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxuICAgIGlucHV0UHJvcHM6IGlucHV0UHJvcHNcbiAgfSwgSW5wdXRNb3JlLCBJbnB1dFByb3BzKSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoVGV4dEZpZWxkUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIGVycm9yOiBlcnJvcixcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICByZWY6IHJlZixcbiAgICByZXF1aXJlZDogcmVxdWlyZWQsXG4gICAgY29sb3I6IGNvbG9yLFxuICAgIHZhcmlhbnQ6IHZhcmlhbnQsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBbbGFiZWwgIT0gbnVsbCAmJiBsYWJlbCAhPT0gJycgJiYgLyojX19QVVJFX18qL19qc3goSW5wdXRMYWJlbCwgX2V4dGVuZHMoe1xuICAgICAgaHRtbEZvcjogaWQsXG4gICAgICBpZDogaW5wdXRMYWJlbElkXG4gICAgfSwgSW5wdXRMYWJlbFByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogbGFiZWxcbiAgICB9KSksIHNlbGVjdCA/IC8qI19fUFVSRV9fKi9fanN4KFNlbGVjdCwgX2V4dGVuZHMoe1xuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGhlbHBlclRleHRJZCxcbiAgICAgIGlkOiBpZCxcbiAgICAgIGxhYmVsSWQ6IGlucHV0TGFiZWxJZCxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGlucHV0OiBJbnB1dEVsZW1lbnRcbiAgICB9LCBTZWxlY3RQcm9wcywge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpIDogSW5wdXRFbGVtZW50LCBoZWxwZXJUZXh0ICYmIC8qI19fUFVSRV9fKi9fanN4KEZvcm1IZWxwZXJUZXh0LCBfZXh0ZW5kcyh7XG4gICAgICBpZDogaGVscGVyVGV4dElkXG4gICAgfSwgRm9ybUhlbHBlclRleHRQcm9wcywge1xuICAgICAgY2hpbGRyZW46IGhlbHBlclRleHRcbiAgICB9KSldXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVGV4dEZpZWxkLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBoZWxwcyB1c2VycyB0byBmaWxsIGZvcm1zIGZhc3RlciwgZXNwZWNpYWxseSBvbiBtb2JpbGUgZGV2aWNlcy5cbiAgICogVGhlIG5hbWUgY2FuIGJlIGNvbmZ1c2luZywgYXMgaXQncyBtb3JlIGxpa2UgYW4gYXV0b2ZpbGwuXG4gICAqIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCBpdCBbZm9sbG93aW5nIHRoZSBzcGVjaWZpY2F0aW9uXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNhdXRvZmlsbCkuXG4gICAqL1xuICBhdXRvQ29tcGxldGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBAZGVmYXVsdCAncHJpbWFyeSdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgRm9ybUhlbHBlclRleHRgXSgvbWF0ZXJpYWwtdWkvYXBpL2Zvcm0taGVscGVyLXRleHQvKSBlbGVtZW50LlxuICAgKi9cbiAgRm9ybUhlbHBlclRleHRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGlucHV0IHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBoZWxwZXIgdGV4dCBjb250ZW50LlxuICAgKi9cbiAgaGVscGVyVGV4dDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogVXNlIHRoaXMgcHJvcCB0byBtYWtlIGBsYWJlbGAgYW5kIGBoZWxwZXJUZXh0YCBhY2Nlc3NpYmxlIGZvciBzY3JlZW4gcmVhZGVycy5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BJbnB1dExhYmVsYF0oL21hdGVyaWFsLXVpL2FwaS9pbnB1dC1sYWJlbC8pIGVsZW1lbnQuXG4gICAqIFBvaW50ZXIgZXZlbnRzIGxpa2UgYG9uQ2xpY2tgIGFyZSBlbmFibGVkIGlmIGFuZCBvbmx5IGlmIGBzaHJpbmtgIGlzIGB0cnVlYC5cbiAgICovXG4gIElucHV0TGFiZWxQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIElucHV0IGVsZW1lbnQuXG4gICAqIEl0IHdpbGwgYmUgYSBbYEZpbGxlZElucHV0YF0oL21hdGVyaWFsLXVpL2FwaS9maWxsZWQtaW5wdXQvKSxcbiAgICogW2BPdXRsaW5lZElucHV0YF0oL21hdGVyaWFsLXVpL2FwaS9vdXRsaW5lZC1pbnB1dC8pIG9yIFtgSW5wdXRgXSgvbWF0ZXJpYWwtdWkvYXBpL2lucHV0LylcbiAgICogY29tcG9uZW50IGRlcGVuZGluZyBvbiB0aGUgYHZhcmlhbnRgIHByb3AgdmFsdWUuXG4gICAqL1xuICBJbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwgY29udGVudC5cbiAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAgb3IgYG5vcm1hbGAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcgb2YgdGhpcyBhbmQgY29udGFpbmVkIGNvbXBvbmVudHMuXG4gICAqIEBkZWZhdWx0ICdub25lJ1xuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJywgJ25vcm1hbCddKSxcbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtYXhSb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWluUm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIGB0ZXh0YXJlYWAgZWxlbWVudCBpcyByZW5kZXJlZCBpbnN0ZWFkIG9mIGFuIGlucHV0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlsaW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHNob3J0IGhpbnQgZGlzcGxheWVkIGluIHRoZSBgaW5wdXRgIGJlZm9yZSB0aGUgdXNlciBlbnRlcnMgYSB2YWx1ZS5cbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgZGlzcGxheWVkIGFzIHJlcXVpcmVkIGFuZCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBSZW5kZXIgYSBbYFNlbGVjdGBdKC9tYXRlcmlhbC11aS9hcGkvc2VsZWN0LykgZWxlbWVudCB3aGlsZSBwYXNzaW5nIHRoZSBJbnB1dCBlbGVtZW50IHRvIGBTZWxlY3RgIGFzIGBpbnB1dGAgcGFyYW1ldGVyLlxuICAgKiBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgeW91IG11c3QgcGFzcyB0aGUgb3B0aW9ucyBvZiB0aGUgc2VsZWN0IGFzIGNoaWxkcmVuLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2VsZWN0OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgU2VsZWN0YF0oL21hdGVyaWFsLXVpL2FwaS9zZWxlY3QvKSBlbGVtZW50LlxuICAgKi9cbiAgU2VsZWN0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC4gSXQgc2hvdWxkIGJlIFthIHZhbGlkIEhUTUw1IGlucHV0IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNGb3JtXyUzQ2lucHV0JTNFX3R5cGVzKS5cbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LCByZXF1aXJlZCBmb3IgYSBjb250cm9sbGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCAnb3V0bGluZWQnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBUZXh0RmllbGQ7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUb29sYmFyVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUb29sYmFyJywgc2xvdCk7XG59XG5jb25zdCB0b29sYmFyQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVRvb2xiYXInLCBbJ3Jvb3QnLCAnZ3V0dGVycycsICdyZWd1bGFyJywgJ2RlbnNlJ10pO1xuZXhwb3J0IGRlZmF1bHQgdG9vbGJhckNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZUd1dHRlcnNcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGdldFRvb2xiYXJVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3Rvb2xiYXJDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlR3V0dGVycyxcbiAgICB2YXJpYW50XG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhZGlzYWJsZUd1dHRlcnMgJiYgJ2d1dHRlcnMnLCB2YXJpYW50XVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFRvb2xiYXJVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IFRvb2xiYXJSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlUb29sYmFyJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsICFvd25lclN0YXRlLmRpc2FibGVHdXR0ZXJzICYmIHN0eWxlcy5ndXR0ZXJzLCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInXG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiB7XG4gIHBhZGRpbmdMZWZ0OiB0aGVtZS5zcGFjaW5nKDIpLFxuICBwYWRkaW5nUmlnaHQ6IHRoZW1lLnNwYWNpbmcoMiksXG4gIFt0aGVtZS5icmVha3BvaW50cy51cCgnc20nKV06IHtcbiAgICBwYWRkaW5nTGVmdDogdGhlbWUuc3BhY2luZygzKSxcbiAgICBwYWRkaW5nUmlnaHQ6IHRoZW1lLnNwYWNpbmcoMylcbiAgfVxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZGVuc2UnICYmIHtcbiAgbWluSGVpZ2h0OiA0OFxufSksICh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdyZWd1bGFyJyAmJiB0aGVtZS5taXhpbnMudG9vbGJhcik7XG5jb25zdCBUb29sYmFyID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gVG9vbGJhcihpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVG9vbGJhcidcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgICAgZGlzYWJsZUd1dHRlcnMgPSBmYWxzZSxcbiAgICAgIHZhcmlhbnQgPSAncmVndWxhcidcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBkaXNhYmxlR3V0dGVycyxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUb29sYmFyUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gIH0sIG90aGVyKSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRvb2xiYXIucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhlIFRvb2xiYXIgY2hpbGRyZW4sIHVzdWFsbHkgYSBtaXh0dXJlIG9mIGBJY29uQnV0dG9uYCwgYEJ1dHRvbmAgYW5kIGBUeXBvZ3JhcGh5YC5cbiAgICogVGhlIFRvb2xiYXIgaXMgYSBmbGV4IGNvbnRhaW5lciwgYWxsb3dpbmcgZmxleCBpdGVtIHByb3BlcnRpZXMgdG8gYmUgdXNlZCB0byBsYXkgb3V0IHRoZSBjaGlsZHJlbi5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgZGlzYWJsZXMgZ3V0dGVyIHBhZGRpbmcuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlR3V0dGVyczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdyZWd1bGFyJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdyZWd1bGFyJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBUb29sYmFyOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpVHlwb2dyYXBoeScsIHNsb3QpO1xufVxuY29uc3QgdHlwb2dyYXBoeUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlUeXBvZ3JhcGh5JywgWydyb290JywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ3N1YnRpdGxlMScsICdzdWJ0aXRsZTInLCAnYm9keTEnLCAnYm9keTInLCAnaW5oZXJpdCcsICdidXR0b24nLCAnY2FwdGlvbicsICdvdmVybGluZScsICdhbGlnbkxlZnQnLCAnYWxpZ25SaWdodCcsICdhbGlnbkNlbnRlcicsICdhbGlnbkp1c3RpZnknLCAnbm9XcmFwJywgJ2d1dHRlckJvdHRvbScsICdwYXJhZ3JhcGgnXSk7XG5leHBvcnQgZGVmYXVsdCB0eXBvZ3JhcGh5Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhbGlnblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImd1dHRlckJvdHRvbVwiLCBcIm5vV3JhcFwiLCBcInBhcmFncmFwaFwiLCBcInZhcmlhbnRcIiwgXCJ2YXJpYW50TWFwcGluZ1wiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2V4dGVuZFN4UHJvcCBhcyBleHRlbmRTeFByb3AgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgeyBnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi90eXBvZ3JhcGh5Q2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGFsaWduLFxuICAgIGd1dHRlckJvdHRvbSxcbiAgICBub1dyYXAsXG4gICAgcGFyYWdyYXBoLFxuICAgIHZhcmlhbnQsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgdmFyaWFudCwgb3duZXJTdGF0ZS5hbGlnbiAhPT0gJ2luaGVyaXQnICYmIGBhbGlnbiR7Y2FwaXRhbGl6ZShhbGlnbil9YCwgZ3V0dGVyQm90dG9tICYmICdndXR0ZXJCb3R0b20nLCBub1dyYXAgJiYgJ25vV3JhcCcsIHBhcmFncmFwaCAmJiAncGFyYWdyYXBoJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5leHBvcnQgY29uc3QgVHlwb2dyYXBoeVJvb3QgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlUeXBvZ3JhcGh5JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUudmFyaWFudCAmJiBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwgb3duZXJTdGF0ZS5hbGlnbiAhPT0gJ2luaGVyaXQnICYmIHN0eWxlc1tgYWxpZ24ke2NhcGl0YWxpemUob3duZXJTdGF0ZS5hbGlnbil9YF0sIG93bmVyU3RhdGUubm9XcmFwICYmIHN0eWxlcy5ub1dyYXAsIG93bmVyU3RhdGUuZ3V0dGVyQm90dG9tICYmIHN0eWxlcy5ndXR0ZXJCb3R0b20sIG93bmVyU3RhdGUucGFyYWdyYXBoICYmIHN0eWxlcy5wYXJhZ3JhcGhdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBtYXJnaW46IDBcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2luaGVyaXQnICYmIHtcbiAgLy8gU29tZSBlbGVtZW50cywgbGlrZSA8YnV0dG9uPiBvbiBDaHJvbWUgaGF2ZSBkZWZhdWx0IGZvbnQgdGhhdCBkb2Vzbid0IGluaGVyaXQsIHJlc2V0IHRoaXMuXG4gIGZvbnQ6ICdpbmhlcml0J1xufSwgb3duZXJTdGF0ZS52YXJpYW50ICE9PSAnaW5oZXJpdCcgJiYgdGhlbWUudHlwb2dyYXBoeVtvd25lclN0YXRlLnZhcmlhbnRdLCBvd25lclN0YXRlLmFsaWduICE9PSAnaW5oZXJpdCcgJiYge1xuICB0ZXh0QWxpZ246IG93bmVyU3RhdGUuYWxpZ25cbn0sIG93bmVyU3RhdGUubm9XcmFwICYmIHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnXG59LCBvd25lclN0YXRlLmd1dHRlckJvdHRvbSAmJiB7XG4gIG1hcmdpbkJvdHRvbTogJzAuMzVlbSdcbn0sIG93bmVyU3RhdGUucGFyYWdyYXBoICYmIHtcbiAgbWFyZ2luQm90dG9tOiAxNlxufSkpO1xuY29uc3QgZGVmYXVsdFZhcmlhbnRNYXBwaW5nID0ge1xuICBoMTogJ2gxJyxcbiAgaDI6ICdoMicsXG4gIGgzOiAnaDMnLFxuICBoNDogJ2g0JyxcbiAgaDU6ICdoNScsXG4gIGg2OiAnaDYnLFxuICBzdWJ0aXRsZTE6ICdoNicsXG4gIHN1YnRpdGxlMjogJ2g2JyxcbiAgYm9keTE6ICdwJyxcbiAgYm9keTI6ICdwJyxcbiAgaW5oZXJpdDogJ3AnXG59O1xuXG4vLyBUT0RPIHY2OiBkZXByZWNhdGUgdGhlc2UgY29sb3IgdmFsdWVzIGluIHY1LnggYW5kIHJlbW92ZSB0aGUgdHJhbnNmb3JtYXRpb24gaW4gdjZcbmNvbnN0IGNvbG9yVHJhbnNmb3JtYXRpb25zID0ge1xuICBwcmltYXJ5OiAncHJpbWFyeS5tYWluJyxcbiAgdGV4dFByaW1hcnk6ICd0ZXh0LnByaW1hcnknLFxuICBzZWNvbmRhcnk6ICdzZWNvbmRhcnkubWFpbicsXG4gIHRleHRTZWNvbmRhcnk6ICd0ZXh0LnNlY29uZGFyeScsXG4gIGVycm9yOiAnZXJyb3IubWFpbidcbn07XG5jb25zdCB0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzID0gY29sb3IgPT4ge1xuICByZXR1cm4gY29sb3JUcmFuc2Zvcm1hdGlvbnNbY29sb3JdIHx8IGNvbG9yO1xufTtcbmNvbnN0IFR5cG9ncmFwaHkgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUeXBvZ3JhcGh5KGluUHJvcHMsIHJlZikge1xuICBjb25zdCB0aGVtZVByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVR5cG9ncmFwaHknXG4gIH0pO1xuICBjb25zdCBjb2xvciA9IHRyYW5zZm9ybURlcHJlY2F0ZWRDb2xvcnModGhlbWVQcm9wcy5jb2xvcik7XG4gIGNvbnN0IHByb3BzID0gZXh0ZW5kU3hQcm9wKF9leHRlbmRzKHt9LCB0aGVtZVByb3BzLCB7XG4gICAgY29sb3JcbiAgfSkpO1xuICBjb25zdCB7XG4gICAgICBhbGlnbiA9ICdpbmhlcml0JyxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCxcbiAgICAgIGd1dHRlckJvdHRvbSA9IGZhbHNlLFxuICAgICAgbm9XcmFwID0gZmFsc2UsXG4gICAgICBwYXJhZ3JhcGggPSBmYWxzZSxcbiAgICAgIHZhcmlhbnQgPSAnYm9keTEnLFxuICAgICAgdmFyaWFudE1hcHBpbmcgPSBkZWZhdWx0VmFyaWFudE1hcHBpbmdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGFsaWduLFxuICAgIGNvbG9yLFxuICAgIGNsYXNzTmFtZSxcbiAgICBjb21wb25lbnQsXG4gICAgZ3V0dGVyQm90dG9tLFxuICAgIG5vV3JhcCxcbiAgICBwYXJhZ3JhcGgsXG4gICAgdmFyaWFudCxcbiAgICB2YXJpYW50TWFwcGluZ1xuICB9KTtcbiAgY29uc3QgQ29tcG9uZW50ID0gY29tcG9uZW50IHx8IChwYXJhZ3JhcGggPyAncCcgOiB2YXJpYW50TWFwcGluZ1t2YXJpYW50XSB8fCBkZWZhdWx0VmFyaWFudE1hcHBpbmdbdmFyaWFudF0pIHx8ICdzcGFuJztcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVHlwb2dyYXBoeVJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogQ29tcG9uZW50LFxuICAgIHJlZjogcmVmLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUeXBvZ3JhcGh5LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFNldCB0aGUgdGV4dC1hbGlnbiBvbiB0aGUgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5oZXJpdCdcbiAgICovXG4gIGFsaWduOiBQcm9wVHlwZXMub25lT2YoWydjZW50ZXInLCAnaW5oZXJpdCcsICdqdXN0aWZ5JywgJ2xlZnQnLCAncmlnaHQnXSksXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdGV4dCB3aWxsIGhhdmUgYSBib3R0b20gbWFyZ2luLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZ3V0dGVyQm90dG9tOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRleHQgd2lsbCBub3Qgd3JhcCwgYnV0IGluc3RlYWQgd2lsbCB0cnVuY2F0ZSB3aXRoIGEgdGV4dCBvdmVyZmxvdyBlbGxpcHNpcy5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRleHQgb3ZlcmZsb3cgY2FuIG9ubHkgaGFwcGVuIHdpdGggYmxvY2sgb3IgaW5saW5lLWJsb2NrIGxldmVsIGVsZW1lbnRzXG4gICAqICh0aGUgZWxlbWVudCBuZWVkcyB0byBoYXZlIGEgd2lkdGggaW4gb3JkZXIgdG8gb3ZlcmZsb3cpLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbm9XcmFwOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGVsZW1lbnQgd2lsbCBiZSBhIHBhcmFncmFwaCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcGFyYWdyYXBoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIHRoZW1lIHR5cG9ncmFwaHkgc3R5bGVzLlxuICAgKiBAZGVmYXVsdCAnYm9keTEnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2JvZHkxJywgJ2JvZHkyJywgJ2J1dHRvbicsICdjYXB0aW9uJywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2luaGVyaXQnLCAnb3ZlcmxpbmUnLCAnc3VidGl0bGUxJywgJ3N1YnRpdGxlMiddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCBtYXBzIHRoZSB2YXJpYW50IHByb3AgdG8gYSByYW5nZSBvZiBkaWZmZXJlbnQgSFRNTCBlbGVtZW50IHR5cGVzLlxuICAgKiBGb3IgaW5zdGFuY2UsIHN1YnRpdGxlMSB0byBgPGg2PmAuXG4gICAqIElmIHlvdSB3aXNoIHRvIGNoYW5nZSB0aGF0IG1hcHBpbmcsIHlvdSBjYW4gcHJvdmlkZSB5b3VyIG93bi5cbiAgICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgdGhlIGBjb21wb25lbnRgIHByb3AuXG4gICAqIEBkZWZhdWx0IHtcbiAgICogICBoMTogJ2gxJyxcbiAgICogICBoMjogJ2gyJyxcbiAgICogICBoMzogJ2gzJyxcbiAgICogICBoNDogJ2g0JyxcbiAgICogICBoNTogJ2g1JyxcbiAgICogICBoNjogJ2g2JyxcbiAgICogICBzdWJ0aXRsZTE6ICdoNicsXG4gICAqICAgc3VidGl0bGUyOiAnaDYnLFxuICAgKiAgIGJvZHkxOiAncCcsXG4gICAqICAgYm9keTI6ICdwJyxcbiAgICogICBpbmhlcml0OiAncCcsXG4gICAqIH1cbiAgICovXG4gIHZhcmlhbnRNYXBwaW5nOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vYmplY3Rcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBUeXBvZ3JhcGh5OyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcInRoZW1lXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IFRoZW1lUHJvdmlkZXIgYXMgU3lzdGVtVGhlbWVQcm92aWRlciB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBUSEVNRV9JRCBmcm9tICcuL2lkZW50aWZpZXInO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFRoZW1lUHJvdmlkZXIoX3JlZikge1xuICBsZXQge1xuICAgICAgdGhlbWU6IHRoZW1lSW5wdXRcbiAgICB9ID0gX3JlZixcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHNjb3BlZFRoZW1lID0gdGhlbWVJbnB1dFtUSEVNRV9JRF07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChTeXN0ZW1UaGVtZVByb3ZpZGVyLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICB0aGVtZUlkOiBzY29wZWRUaGVtZSA/IFRIRU1FX0lEIDogdW5kZWZpbmVkLFxuICAgIHRoZW1lOiBzY29wZWRUaGVtZSB8fCB0aGVtZUlucHV0XG4gIH0pKTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRoZW1lUHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogWW91ciBjb21wb25lbnQgdHJlZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEEgdGhlbWUgb2JqZWN0LiBZb3UgY2FuIHByb3ZpZGUgYSBmdW5jdGlvbiB0byBleHRlbmQgdGhlIG91dGVyIHRoZW1lLlxuICAgKi9cbiAgdGhlbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5mdW5jXSkuaXNSZXF1aXJlZFxufSA6IHZvaWQgMDsiLCJjb25zdCBjb21tb24gPSB7XG4gIGJsYWNrOiAnIzAwMCcsXG4gIHdoaXRlOiAnI2ZmZidcbn07XG5leHBvcnQgZGVmYXVsdCBjb21tb247IiwiY29uc3QgZ3JleSA9IHtcbiAgNTA6ICcjZmFmYWZhJyxcbiAgMTAwOiAnI2Y1ZjVmNScsXG4gIDIwMDogJyNlZWVlZWUnLFxuICAzMDA6ICcjZTBlMGUwJyxcbiAgNDAwOiAnI2JkYmRiZCcsXG4gIDUwMDogJyM5ZTllOWUnLFxuICA2MDA6ICcjNzU3NTc1JyxcbiAgNzAwOiAnIzYxNjE2MScsXG4gIDgwMDogJyM0MjQyNDInLFxuICA5MDA6ICcjMjEyMTIxJyxcbiAgQTEwMDogJyNmNWY1ZjUnLFxuICBBMjAwOiAnI2VlZWVlZScsXG4gIEE0MDA6ICcjYmRiZGJkJyxcbiAgQTcwMDogJyM2MTYxNjEnXG59O1xuZXhwb3J0IGRlZmF1bHQgZ3JleTsiLCJjb25zdCBwdXJwbGUgPSB7XG4gIDUwOiAnI2YzZTVmNScsXG4gIDEwMDogJyNlMWJlZTcnLFxuICAyMDA6ICcjY2U5M2Q4JyxcbiAgMzAwOiAnI2JhNjhjOCcsXG4gIDQwMDogJyNhYjQ3YmMnLFxuICA1MDA6ICcjOWMyN2IwJyxcbiAgNjAwOiAnIzhlMjRhYScsXG4gIDcwMDogJyM3YjFmYTInLFxuICA4MDA6ICcjNmExYjlhJyxcbiAgOTAwOiAnIzRhMTQ4YycsXG4gIEExMDA6ICcjZWE4MGZjJyxcbiAgQTIwMDogJyNlMDQwZmInLFxuICBBNDAwOiAnI2Q1MDBmOScsXG4gIEE3MDA6ICcjYWEwMGZmJ1xufTtcbmV4cG9ydCBkZWZhdWx0IHB1cnBsZTsiLCJjb25zdCByZWQgPSB7XG4gIDUwOiAnI2ZmZWJlZScsXG4gIDEwMDogJyNmZmNkZDInLFxuICAyMDA6ICcjZWY5YTlhJyxcbiAgMzAwOiAnI2U1NzM3MycsXG4gIDQwMDogJyNlZjUzNTAnLFxuICA1MDA6ICcjZjQ0MzM2JyxcbiAgNjAwOiAnI2U1MzkzNScsXG4gIDcwMDogJyNkMzJmMmYnLFxuICA4MDA6ICcjYzYyODI4JyxcbiAgOTAwOiAnI2I3MWMxYycsXG4gIEExMDA6ICcjZmY4YTgwJyxcbiAgQTIwMDogJyNmZjUyNTInLFxuICBBNDAwOiAnI2ZmMTc0NCcsXG4gIEE3MDA6ICcjZDUwMDAwJ1xufTtcbmV4cG9ydCBkZWZhdWx0IHJlZDsiLCJjb25zdCBvcmFuZ2UgPSB7XG4gIDUwOiAnI2ZmZjNlMCcsXG4gIDEwMDogJyNmZmUwYjInLFxuICAyMDA6ICcjZmZjYzgwJyxcbiAgMzAwOiAnI2ZmYjc0ZCcsXG4gIDQwMDogJyNmZmE3MjYnLFxuICA1MDA6ICcjZmY5ODAwJyxcbiAgNjAwOiAnI2ZiOGMwMCcsXG4gIDcwMDogJyNmNTdjMDAnLFxuICA4MDA6ICcjZWY2YzAwJyxcbiAgOTAwOiAnI2U2NTEwMCcsXG4gIEExMDA6ICcjZmZkMTgwJyxcbiAgQTIwMDogJyNmZmFiNDAnLFxuICBBNDAwOiAnI2ZmOTEwMCcsXG4gIEE3MDA6ICcjZmY2ZDAwJ1xufTtcbmV4cG9ydCBkZWZhdWx0IG9yYW5nZTsiLCJjb25zdCBibHVlID0ge1xuICA1MDogJyNlM2YyZmQnLFxuICAxMDA6ICcjYmJkZWZiJyxcbiAgMjAwOiAnIzkwY2FmOScsXG4gIDMwMDogJyM2NGI1ZjYnLFxuICA0MDA6ICcjNDJhNWY1JyxcbiAgNTAwOiAnIzIxOTZmMycsXG4gIDYwMDogJyMxZTg4ZTUnLFxuICA3MDA6ICcjMTk3NmQyJyxcbiAgODAwOiAnIzE1NjVjMCcsXG4gIDkwMDogJyMwZDQ3YTEnLFxuICBBMTAwOiAnIzgyYjFmZicsXG4gIEEyMDA6ICcjNDQ4YWZmJyxcbiAgQTQwMDogJyMyOTc5ZmYnLFxuICBBNzAwOiAnIzI5NjJmZidcbn07XG5leHBvcnQgZGVmYXVsdCBibHVlOyIsImNvbnN0IGxpZ2h0Qmx1ZSA9IHtcbiAgNTA6ICcjZTFmNWZlJyxcbiAgMTAwOiAnI2IzZTVmYycsXG4gIDIwMDogJyM4MWQ0ZmEnLFxuICAzMDA6ICcjNGZjM2Y3JyxcbiAgNDAwOiAnIzI5YjZmNicsXG4gIDUwMDogJyMwM2E5ZjQnLFxuICA2MDA6ICcjMDM5YmU1JyxcbiAgNzAwOiAnIzAyODhkMScsXG4gIDgwMDogJyMwMjc3YmQnLFxuICA5MDA6ICcjMDE1NzliJyxcbiAgQTEwMDogJyM4MGQ4ZmYnLFxuICBBMjAwOiAnIzQwYzRmZicsXG4gIEE0MDA6ICcjMDBiMGZmJyxcbiAgQTcwMDogJyMwMDkxZWEnXG59O1xuZXhwb3J0IGRlZmF1bHQgbGlnaHRCbHVlOyIsImNvbnN0IGdyZWVuID0ge1xuICA1MDogJyNlOGY1ZTknLFxuICAxMDA6ICcjYzhlNmM5JyxcbiAgMjAwOiAnI2E1ZDZhNycsXG4gIDMwMDogJyM4MWM3ODQnLFxuICA0MDA6ICcjNjZiYjZhJyxcbiAgNTAwOiAnIzRjYWY1MCcsXG4gIDYwMDogJyM0M2EwNDcnLFxuICA3MDA6ICcjMzg4ZTNjJyxcbiAgODAwOiAnIzJlN2QzMicsXG4gIDkwMDogJyMxYjVlMjAnLFxuICBBMTAwOiAnI2I5ZjZjYScsXG4gIEEyMDA6ICcjNjlmMGFlJyxcbiAgQTQwMDogJyMwMGU2NzYnLFxuICBBNzAwOiAnIzAwYzg1Mydcbn07XG5leHBvcnQgZGVmYXVsdCBncmVlbjsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgZnJvbSBcIkBtdWkvdXRpbHMvZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJtb2RlXCIsIFwiY29udHJhc3RUaHJlc2hvbGRcIiwgXCJ0b25hbE9mZnNldFwiXTtcbmltcG9ydCB7IGRlZXBtZXJnZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgZGFya2VuLCBnZXRDb250cmFzdFJhdGlvLCBsaWdodGVuIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGNvbW1vbiBmcm9tICcuLi9jb2xvcnMvY29tbW9uJztcbmltcG9ydCBncmV5IGZyb20gJy4uL2NvbG9ycy9ncmV5JztcbmltcG9ydCBwdXJwbGUgZnJvbSAnLi4vY29sb3JzL3B1cnBsZSc7XG5pbXBvcnQgcmVkIGZyb20gJy4uL2NvbG9ycy9yZWQnO1xuaW1wb3J0IG9yYW5nZSBmcm9tICcuLi9jb2xvcnMvb3JhbmdlJztcbmltcG9ydCBibHVlIGZyb20gJy4uL2NvbG9ycy9ibHVlJztcbmltcG9ydCBsaWdodEJsdWUgZnJvbSAnLi4vY29sb3JzL2xpZ2h0Qmx1ZSc7XG5pbXBvcnQgZ3JlZW4gZnJvbSAnLi4vY29sb3JzL2dyZWVuJztcbmV4cG9ydCBjb25zdCBsaWdodCA9IHtcbiAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSB0ZXh0LlxuICB0ZXh0OiB7XG4gICAgLy8gVGhlIG1vc3QgaW1wb3J0YW50IHRleHQuXG4gICAgcHJpbWFyeTogJ3JnYmEoMCwgMCwgMCwgMC44NyknLFxuICAgIC8vIFNlY29uZGFyeSB0ZXh0LlxuICAgIHNlY29uZGFyeTogJ3JnYmEoMCwgMCwgMCwgMC42KScsXG4gICAgLy8gRGlzYWJsZWQgdGV4dCBoYXZlIGV2ZW4gbG93ZXIgdmlzdWFsIHByb21pbmVuY2UuXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMzgpJ1xuICB9LFxuICAvLyBUaGUgY29sb3IgdXNlZCB0byBkaXZpZGUgZGlmZmVyZW50IGVsZW1lbnRzLlxuICBkaXZpZGVyOiAncmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gIC8vIFRoZSBiYWNrZ3JvdW5kIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSBzdXJmYWNlcy5cbiAgLy8gQ29uc2lzdGVuY3kgYmV0d2VlbiB0aGVzZSB2YWx1ZXMgaXMgaW1wb3J0YW50LlxuICBiYWNrZ3JvdW5kOiB7XG4gICAgcGFwZXI6IGNvbW1vbi53aGl0ZSxcbiAgICBkZWZhdWx0OiBjb21tb24ud2hpdGVcbiAgfSxcbiAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSBhY3Rpb24gZWxlbWVudHMuXG4gIGFjdGlvbjoge1xuICAgIC8vIFRoZSBjb2xvciBvZiBhbiBhY3RpdmUgYWN0aW9uIGxpa2UgYW4gaWNvbiBidXR0b24uXG4gICAgYWN0aXZlOiAncmdiYSgwLCAwLCAwLCAwLjU0KScsXG4gICAgLy8gVGhlIGNvbG9yIG9mIGFuIGhvdmVyZWQgYWN0aW9uLlxuICAgIGhvdmVyOiAncmdiYSgwLCAwLCAwLCAwLjA0KScsXG4gICAgaG92ZXJPcGFjaXR5OiAwLjA0LFxuICAgIC8vIFRoZSBjb2xvciBvZiBhIHNlbGVjdGVkIGFjdGlvbi5cbiAgICBzZWxlY3RlZDogJ3JnYmEoMCwgMCwgMCwgMC4wOCknLFxuICAgIHNlbGVjdGVkT3BhY2l0eTogMC4wOCxcbiAgICAvLyBUaGUgY29sb3Igb2YgYSBkaXNhYmxlZCBhY3Rpb24uXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMjYpJyxcbiAgICAvLyBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiBhIGRpc2FibGVkIGFjdGlvbi5cbiAgICBkaXNhYmxlZEJhY2tncm91bmQ6ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJyxcbiAgICBkaXNhYmxlZE9wYWNpdHk6IDAuMzgsXG4gICAgZm9jdXM6ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJyxcbiAgICBmb2N1c09wYWNpdHk6IDAuMTIsXG4gICAgYWN0aXZhdGVkT3BhY2l0eTogMC4xMlxuICB9XG59O1xuZXhwb3J0IGNvbnN0IGRhcmsgPSB7XG4gIHRleHQ6IHtcbiAgICBwcmltYXJ5OiBjb21tb24ud2hpdGUsXG4gICAgc2Vjb25kYXJ5OiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpJyxcbiAgICBkaXNhYmxlZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC41KScsXG4gICAgaWNvbjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSdcbiAgfSxcbiAgZGl2aWRlcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICBiYWNrZ3JvdW5kOiB7XG4gICAgcGFwZXI6ICcjMTIxMjEyJyxcbiAgICBkZWZhdWx0OiAnIzEyMTIxMidcbiAgfSxcbiAgYWN0aW9uOiB7XG4gICAgYWN0aXZlOiBjb21tb24ud2hpdGUsXG4gICAgaG92ZXI6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpJyxcbiAgICBob3Zlck9wYWNpdHk6IDAuMDgsXG4gICAgc2VsZWN0ZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpJyxcbiAgICBzZWxlY3RlZE9wYWNpdHk6IDAuMTYsXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyknLFxuICAgIGRpc2FibGVkQmFja2dyb3VuZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICAgIGRpc2FibGVkT3BhY2l0eTogMC4zOCxcbiAgICBmb2N1czogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICAgIGZvY3VzT3BhY2l0eTogMC4xMixcbiAgICBhY3RpdmF0ZWRPcGFjaXR5OiAwLjI0XG4gIH1cbn07XG5mdW5jdGlvbiBhZGRMaWdodE9yRGFyayhpbnRlbnQsIGRpcmVjdGlvbiwgc2hhZGUsIHRvbmFsT2Zmc2V0KSB7XG4gIGNvbnN0IHRvbmFsT2Zmc2V0TGlnaHQgPSB0b25hbE9mZnNldC5saWdodCB8fCB0b25hbE9mZnNldDtcbiAgY29uc3QgdG9uYWxPZmZzZXREYXJrID0gdG9uYWxPZmZzZXQuZGFyayB8fCB0b25hbE9mZnNldCAqIDEuNTtcbiAgaWYgKCFpbnRlbnRbZGlyZWN0aW9uXSkge1xuICAgIGlmIChpbnRlbnQuaGFzT3duUHJvcGVydHkoc2hhZGUpKSB7XG4gICAgICBpbnRlbnRbZGlyZWN0aW9uXSA9IGludGVudFtzaGFkZV07XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdsaWdodCcpIHtcbiAgICAgIGludGVudC5saWdodCA9IGxpZ2h0ZW4oaW50ZW50Lm1haW4sIHRvbmFsT2Zmc2V0TGlnaHQpO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnZGFyaycpIHtcbiAgICAgIGludGVudC5kYXJrID0gZGFya2VuKGludGVudC5tYWluLCB0b25hbE9mZnNldERhcmspO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFByaW1hcnkobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBibHVlWzIwMF0sXG4gICAgICBsaWdodDogYmx1ZVs1MF0sXG4gICAgICBkYXJrOiBibHVlWzQwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogYmx1ZVs3MDBdLFxuICAgIGxpZ2h0OiBibHVlWzQwMF0sXG4gICAgZGFyazogYmx1ZVs4MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0U2Vjb25kYXJ5KG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogcHVycGxlWzIwMF0sXG4gICAgICBsaWdodDogcHVycGxlWzUwXSxcbiAgICAgIGRhcms6IHB1cnBsZVs0MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46IHB1cnBsZVs1MDBdLFxuICAgIGxpZ2h0OiBwdXJwbGVbMzAwXSxcbiAgICBkYXJrOiBwdXJwbGVbNzAwXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdEVycm9yKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogcmVkWzUwMF0sXG4gICAgICBsaWdodDogcmVkWzMwMF0sXG4gICAgICBkYXJrOiByZWRbNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiByZWRbNzAwXSxcbiAgICBsaWdodDogcmVkWzQwMF0sXG4gICAgZGFyazogcmVkWzgwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRJbmZvKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogbGlnaHRCbHVlWzQwMF0sXG4gICAgICBsaWdodDogbGlnaHRCbHVlWzMwMF0sXG4gICAgICBkYXJrOiBsaWdodEJsdWVbNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBsaWdodEJsdWVbNzAwXSxcbiAgICBsaWdodDogbGlnaHRCbHVlWzUwMF0sXG4gICAgZGFyazogbGlnaHRCbHVlWzkwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRTdWNjZXNzKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogZ3JlZW5bNDAwXSxcbiAgICAgIGxpZ2h0OiBncmVlblszMDBdLFxuICAgICAgZGFyazogZ3JlZW5bNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBncmVlbls4MDBdLFxuICAgIGxpZ2h0OiBncmVlbls1MDBdLFxuICAgIGRhcms6IGdyZWVuWzkwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRXYXJuaW5nKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogb3JhbmdlWzQwMF0sXG4gICAgICBsaWdodDogb3JhbmdlWzMwMF0sXG4gICAgICBkYXJrOiBvcmFuZ2VbNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiAnI2VkNmMwMicsXG4gICAgLy8gY2xvc2VzdCB0byBvcmFuZ2VbODAwXSB0aGF0IHBhc3MgMzoxLlxuICAgIGxpZ2h0OiBvcmFuZ2VbNTAwXSxcbiAgICBkYXJrOiBvcmFuZ2VbOTAwXVxuICB9O1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUGFsZXR0ZShwYWxldHRlKSB7XG4gIGNvbnN0IHtcbiAgICAgIG1vZGUgPSAnbGlnaHQnLFxuICAgICAgY29udHJhc3RUaHJlc2hvbGQgPSAzLFxuICAgICAgdG9uYWxPZmZzZXQgPSAwLjJcbiAgICB9ID0gcGFsZXR0ZSxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHBhbGV0dGUsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHByaW1hcnkgPSBwYWxldHRlLnByaW1hcnkgfHwgZ2V0RGVmYXVsdFByaW1hcnkobW9kZSk7XG4gIGNvbnN0IHNlY29uZGFyeSA9IHBhbGV0dGUuc2Vjb25kYXJ5IHx8IGdldERlZmF1bHRTZWNvbmRhcnkobW9kZSk7XG4gIGNvbnN0IGVycm9yID0gcGFsZXR0ZS5lcnJvciB8fCBnZXREZWZhdWx0RXJyb3IobW9kZSk7XG4gIGNvbnN0IGluZm8gPSBwYWxldHRlLmluZm8gfHwgZ2V0RGVmYXVsdEluZm8obW9kZSk7XG4gIGNvbnN0IHN1Y2Nlc3MgPSBwYWxldHRlLnN1Y2Nlc3MgfHwgZ2V0RGVmYXVsdFN1Y2Nlc3MobW9kZSk7XG4gIGNvbnN0IHdhcm5pbmcgPSBwYWxldHRlLndhcm5pbmcgfHwgZ2V0RGVmYXVsdFdhcm5pbmcobW9kZSk7XG5cbiAgLy8gVXNlIHRoZSBzYW1lIGxvZ2ljIGFzXG4gIC8vIEJvb3RzdHJhcDogaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvMWQ2ZTM3MTBkZDQ0N2RlMWEyMDBmMjllOGZhNTIxZjhhMDkwOGY3MC9zY3NzL19mdW5jdGlvbnMuc2NzcyNMNTlcbiAgLy8gYW5kIG1hdGVyaWFsLWNvbXBvbmVudHMtd2ViIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtd2ViL2Jsb2IvYWM0NmI4ODYzYzRkYWI5ZmMyMmM0YzY2MmRjNmJkMWI2NWRkNjUyZi9wYWNrYWdlcy9tZGMtdGhlbWUvX2Z1bmN0aW9ucy5zY3NzI0w1NFxuICBmdW5jdGlvbiBnZXRDb250cmFzdFRleHQoYmFja2dyb3VuZCkge1xuICAgIGNvbnN0IGNvbnRyYXN0VGV4dCA9IGdldENvbnRyYXN0UmF0aW8oYmFja2dyb3VuZCwgZGFyay50ZXh0LnByaW1hcnkpID49IGNvbnRyYXN0VGhyZXNob2xkID8gZGFyay50ZXh0LnByaW1hcnkgOiBsaWdodC50ZXh0LnByaW1hcnk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGNvbnRyYXN0ID0gZ2V0Q29udHJhc3RSYXRpbyhiYWNrZ3JvdW5kLCBjb250cmFzdFRleHQpO1xuICAgICAgaWYgKGNvbnRyYXN0IDwgMykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgY29udHJhc3QgcmF0aW8gb2YgJHtjb250cmFzdH06MSBmb3IgJHtjb250cmFzdFRleHR9IG9uICR7YmFja2dyb3VuZH1gLCAnZmFsbHMgYmVsb3cgdGhlIFdDQUcgcmVjb21tZW5kZWQgYWJzb2x1dGUgbWluaW11bSBjb250cmFzdCByYXRpbyBvZiAzOjEuJywgJ2h0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3Zpc3VhbC1hdWRpby1jb250cmFzdC1jb250cmFzdCddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbnRyYXN0VGV4dDtcbiAgfVxuICBjb25zdCBhdWdtZW50Q29sb3IgPSAoe1xuICAgIGNvbG9yLFxuICAgIG5hbWUsXG4gICAgbWFpblNoYWRlID0gNTAwLFxuICAgIGxpZ2h0U2hhZGUgPSAzMDAsXG4gICAgZGFya1NoYWRlID0gNzAwXG4gIH0pID0+IHtcbiAgICBjb2xvciA9IF9leHRlbmRzKHt9LCBjb2xvcik7XG4gICAgaWYgKCFjb2xvci5tYWluICYmIGNvbG9yW21haW5TaGFkZV0pIHtcbiAgICAgIGNvbG9yLm1haW4gPSBjb2xvclttYWluU2hhZGVdO1xuICAgIH1cbiAgICBpZiAoIWNvbG9yLmhhc093blByb3BlcnR5KCdtYWluJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBUaGUgY29sb3Ike25hbWUgPyBgICgke25hbWV9KWAgOiAnJ30gcHJvdmlkZWQgdG8gYXVnbWVudENvbG9yKGNvbG9yKSBpcyBpbnZhbGlkLlxuVGhlIGNvbG9yIG9iamVjdCBuZWVkcyB0byBoYXZlIGEgXFxgbWFpblxcYCBwcm9wZXJ0eSBvciBhIFxcYCR7bWFpblNoYWRlfVxcYCBwcm9wZXJ0eS5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxMSwgbmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnLCBtYWluU2hhZGUpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb2xvci5tYWluICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFRoZSBjb2xvciR7bmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnfSBwcm92aWRlZCB0byBhdWdtZW50Q29sb3IoY29sb3IpIGlzIGludmFsaWQuXG5cXGBjb2xvci5tYWluXFxgIHNob3VsZCBiZSBhIHN0cmluZywgYnV0IFxcYCR7SlNPTi5zdHJpbmdpZnkoY29sb3IubWFpbil9XFxgIHdhcyBwcm92aWRlZCBpbnN0ZWFkLlxuXG5EaWQgeW91IGludGVuZCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgYXBwcm9hY2hlcz9cblxuaW1wb3J0IHsgZ3JlZW4gfSBmcm9tIFwiQG11aS9tYXRlcmlhbC9jb2xvcnNcIjtcblxuY29uc3QgdGhlbWUxID0gY3JlYXRlVGhlbWUoeyBwYWxldHRlOiB7XG4gIHByaW1hcnk6IGdyZWVuLFxufSB9KTtcblxuY29uc3QgdGhlbWUyID0gY3JlYXRlVGhlbWUoeyBwYWxldHRlOiB7XG4gIHByaW1hcnk6IHsgbWFpbjogZ3JlZW5bNTAwXSB9LFxufSB9KTtgIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxMiwgbmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnLCBKU09OLnN0cmluZ2lmeShjb2xvci5tYWluKSkpO1xuICAgIH1cbiAgICBhZGRMaWdodE9yRGFyayhjb2xvciwgJ2xpZ2h0JywgbGlnaHRTaGFkZSwgdG9uYWxPZmZzZXQpO1xuICAgIGFkZExpZ2h0T3JEYXJrKGNvbG9yLCAnZGFyaycsIGRhcmtTaGFkZSwgdG9uYWxPZmZzZXQpO1xuICAgIGlmICghY29sb3IuY29udHJhc3RUZXh0KSB7XG4gICAgICBjb2xvci5jb250cmFzdFRleHQgPSBnZXRDb250cmFzdFRleHQoY29sb3IubWFpbik7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfTtcbiAgY29uc3QgbW9kZXMgPSB7XG4gICAgZGFyayxcbiAgICBsaWdodFxuICB9O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICghbW9kZXNbbW9kZV0pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVGhlIHBhbGV0dGUgbW9kZSBcXGAke21vZGV9XFxgIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHBhbGV0dGVPdXRwdXQgPSBkZWVwbWVyZ2UoX2V4dGVuZHMoe1xuICAgIC8vIEEgY29sbGVjdGlvbiBvZiBjb21tb24gY29sb3JzLlxuICAgIGNvbW1vbjogX2V4dGVuZHMoe30sIGNvbW1vbiksXG4gICAgLy8gcHJldmVudCBtdXRhYmxlIG9iamVjdC5cbiAgICAvLyBUaGUgcGFsZXR0ZSBtb2RlLCBjYW4gYmUgbGlnaHQgb3IgZGFyay5cbiAgICBtb2RlLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byByZXByZXNlbnQgcHJpbWFyeSBpbnRlcmZhY2UgZWxlbWVudHMgZm9yIGEgdXNlci5cbiAgICBwcmltYXJ5OiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHByaW1hcnksXG4gICAgICBuYW1lOiAncHJpbWFyeSdcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHNlY29uZGFyeSBpbnRlcmZhY2UgZWxlbWVudHMgZm9yIGEgdXNlci5cbiAgICBzZWNvbmRhcnk6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogc2Vjb25kYXJ5LFxuICAgICAgbmFtZTogJ3NlY29uZGFyeScsXG4gICAgICBtYWluU2hhZGU6ICdBNDAwJyxcbiAgICAgIGxpZ2h0U2hhZGU6ICdBMjAwJyxcbiAgICAgIGRhcmtTaGFkZTogJ0E3MDAnXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBpbnRlcmZhY2UgZWxlbWVudHMgdGhhdCB0aGUgdXNlciBzaG91bGQgYmUgbWFkZSBhd2FyZSBvZi5cbiAgICBlcnJvcjogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBlcnJvcixcbiAgICAgIG5hbWU6ICdlcnJvcidcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHBvdGVudGlhbGx5IGRhbmdlcm91cyBhY3Rpb25zIG9yIGltcG9ydGFudCBtZXNzYWdlcy5cbiAgICB3YXJuaW5nOiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHdhcm5pbmcsXG4gICAgICBuYW1lOiAnd2FybmluZydcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcHJlc2VudCBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciB0aGF0IGlzIG5ldXRyYWwgYW5kIG5vdCBuZWNlc3NhcmlseSBpbXBvcnRhbnQuXG4gICAgaW5mbzogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBpbmZvLFxuICAgICAgbmFtZTogJ2luZm8nXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIGluZGljYXRlIHRoZSBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgYW4gYWN0aW9uIHRoYXQgdXNlciB0cmlnZ2VyZWQuXG4gICAgc3VjY2VzczogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBzdWNjZXNzLFxuICAgICAgbmFtZTogJ3N1Y2Nlc3MnXG4gICAgfSksXG4gICAgLy8gVGhlIGdyZXkgY29sb3JzLlxuICAgIGdyZXksXG4gICAgLy8gVXNlZCBieSBgZ2V0Q29udHJhc3RUZXh0KClgIHRvIG1heGltaXplIHRoZSBjb250cmFzdCBiZXR3ZWVuXG4gICAgLy8gdGhlIGJhY2tncm91bmQgYW5kIHRoZSB0ZXh0LlxuICAgIGNvbnRyYXN0VGhyZXNob2xkLFxuICAgIC8vIFRha2VzIGEgYmFja2dyb3VuZCBjb2xvciBhbmQgcmV0dXJucyB0aGUgdGV4dCBjb2xvciB0aGF0IG1heGltaXplcyB0aGUgY29udHJhc3QuXG4gICAgZ2V0Q29udHJhc3RUZXh0LFxuICAgIC8vIEdlbmVyYXRlIGEgcmljaCBjb2xvciBvYmplY3QuXG4gICAgYXVnbWVudENvbG9yLFxuICAgIC8vIFVzZWQgYnkgdGhlIGZ1bmN0aW9ucyBiZWxvdyB0byBzaGlmdCBhIGNvbG9yJ3MgbHVtaW5hbmNlIGJ5IGFwcHJveGltYXRlbHlcbiAgICAvLyB0d28gaW5kZXhlcyB3aXRoaW4gaXRzIHRvbmFsIHBhbGV0dGUuXG4gICAgLy8gRS5nLiwgc2hpZnQgZnJvbSBSZWQgNTAwIHRvIFJlZCAzMDAgb3IgUmVkIDcwMC5cbiAgICB0b25hbE9mZnNldFxuICB9LCBtb2Rlc1ttb2RlXSksIG90aGVyKTtcbiAgcmV0dXJuIHBhbGV0dGVPdXRwdXQ7XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImZvbnRGYW1pbHlcIiwgXCJmb250U2l6ZVwiLCBcImZvbnRXZWlnaHRMaWdodFwiLCBcImZvbnRXZWlnaHRSZWd1bGFyXCIsIFwiZm9udFdlaWdodE1lZGl1bVwiLCBcImZvbnRXZWlnaHRCb2xkXCIsIFwiaHRtbEZvbnRTaXplXCIsIFwiYWxsVmFyaWFudHNcIiwgXCJweFRvUmVtXCJdO1xuaW1wb3J0IHsgZGVlcG1lcmdlIH0gZnJvbSAnQG11aS91dGlscyc7XG5mdW5jdGlvbiByb3VuZCh2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIDFlNSkgLyAxZTU7XG59XG5jb25zdCBjYXNlQWxsQ2FwcyA9IHtcbiAgdGV4dFRyYW5zZm9ybTogJ3VwcGVyY2FzZSdcbn07XG5jb25zdCBkZWZhdWx0Rm9udEZhbWlseSA9ICdcIlJvYm90b1wiLCBcIkhlbHZldGljYVwiLCBcIkFyaWFsXCIsIHNhbnMtc2VyaWYnO1xuXG4vKipcbiAqIEBzZWUgQGxpbmt7aHR0cHM6Ly9tMi5tYXRlcmlhbC5pby9kZXNpZ24vdHlwb2dyYXBoeS90aGUtdHlwZS1zeXN0ZW0uaHRtbH1cbiAqIEBzZWUgQGxpbmt7aHR0cHM6Ly9tMi5tYXRlcmlhbC5pby9kZXNpZ24vdHlwb2dyYXBoeS91bmRlcnN0YW5kaW5nLXR5cG9ncmFwaHkuaHRtbH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlVHlwb2dyYXBoeShwYWxldHRlLCB0eXBvZ3JhcGh5KSB7XG4gIGNvbnN0IF9yZWYgPSB0eXBlb2YgdHlwb2dyYXBoeSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cG9ncmFwaHkocGFsZXR0ZSkgOiB0eXBvZ3JhcGh5LFxuICAgIHtcbiAgICAgIGZvbnRGYW1pbHkgPSBkZWZhdWx0Rm9udEZhbWlseSxcbiAgICAgIC8vIFRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBvZiB0aGUgTWF0ZXJpYWwgU3BlY2lmaWNhdGlvbi5cbiAgICAgIGZvbnRTaXplID0gMTQsXG4gICAgICAvLyBweFxuICAgICAgZm9udFdlaWdodExpZ2h0ID0gMzAwLFxuICAgICAgZm9udFdlaWdodFJlZ3VsYXIgPSA0MDAsXG4gICAgICBmb250V2VpZ2h0TWVkaXVtID0gNTAwLFxuICAgICAgZm9udFdlaWdodEJvbGQgPSA3MDAsXG4gICAgICAvLyBUZWxsIE1VSSB3aGF0J3MgdGhlIGZvbnQtc2l6ZSBvbiB0aGUgaHRtbCBlbGVtZW50LlxuICAgICAgLy8gMTZweCBpcyB0aGUgZGVmYXVsdCBmb250LXNpemUgdXNlZCBieSBicm93c2Vycy5cbiAgICAgIGh0bWxGb250U2l6ZSA9IDE2LFxuICAgICAgLy8gQXBwbHkgdGhlIENTUyBwcm9wZXJ0aWVzIHRvIGFsbCB0aGUgdmFyaWFudHMuXG4gICAgICBhbGxWYXJpYW50cyxcbiAgICAgIHB4VG9SZW06IHB4VG9SZW0yXG4gICAgfSA9IF9yZWYsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfcmVmLCBfZXhjbHVkZWQpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2YgZm9udFNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNVUk6IGBmb250U2l6ZWAgaXMgcmVxdWlyZWQgdG8gYmUgYSBudW1iZXIuJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgaHRtbEZvbnRTaXplICE9PSAnbnVtYmVyJykge1xuICAgICAgY29uc29sZS5lcnJvcignTVVJOiBgaHRtbEZvbnRTaXplYCBpcyByZXF1aXJlZCB0byBiZSBhIG51bWJlci4nKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY29lZiA9IGZvbnRTaXplIC8gMTQ7XG4gIGNvbnN0IHB4VG9SZW0gPSBweFRvUmVtMiB8fCAoc2l6ZSA9PiBgJHtzaXplIC8gaHRtbEZvbnRTaXplICogY29lZn1yZW1gKTtcbiAgY29uc3QgYnVpbGRWYXJpYW50ID0gKGZvbnRXZWlnaHQsIHNpemUsIGxpbmVIZWlnaHQsIGxldHRlclNwYWNpbmcsIGNhc2luZykgPT4gX2V4dGVuZHMoe1xuICAgIGZvbnRGYW1pbHksXG4gICAgZm9udFdlaWdodCxcbiAgICBmb250U2l6ZTogcHhUb1JlbShzaXplKSxcbiAgICAvLyBVbml0bGVzcyBmb2xsb3dpbmcgaHR0cHM6Ly9tZXllcndlYi5jb20vZXJpYy90aG91Z2h0cy8yMDA2LzAyLzA4L3VuaXRsZXNzLWxpbmUtaGVpZ2h0cy9cbiAgICBsaW5lSGVpZ2h0XG4gIH0sIGZvbnRGYW1pbHkgPT09IGRlZmF1bHRGb250RmFtaWx5ID8ge1xuICAgIGxldHRlclNwYWNpbmc6IGAke3JvdW5kKGxldHRlclNwYWNpbmcgLyBzaXplKX1lbWBcbiAgfSA6IHt9LCBjYXNpbmcsIGFsbFZhcmlhbnRzKTtcbiAgY29uc3QgdmFyaWFudHMgPSB7XG4gICAgaDE6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0TGlnaHQsIDk2LCAxLjE2NywgLTEuNSksXG4gICAgaDI6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0TGlnaHQsIDYwLCAxLjIsIC0wLjUpLFxuICAgIGgzOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDQ4LCAxLjE2NywgMCksXG4gICAgaDQ6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMzQsIDEuMjM1LCAwLjI1KSxcbiAgICBoNTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAyNCwgMS4zMzQsIDApLFxuICAgIGg2OiBidWlsZFZhcmlhbnQoZm9udFdlaWdodE1lZGl1bSwgMjAsIDEuNiwgMC4xNSksXG4gICAgc3VidGl0bGUxOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDE2LCAxLjc1LCAwLjE1KSxcbiAgICBzdWJ0aXRsZTI6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0TWVkaXVtLCAxNCwgMS41NywgMC4xKSxcbiAgICBib2R5MTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxNiwgMS41LCAwLjE1KSxcbiAgICBib2R5MjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxNCwgMS40MywgMC4xNSksXG4gICAgYnV0dG9uOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodE1lZGl1bSwgMTQsIDEuNzUsIDAuNCwgY2FzZUFsbENhcHMpLFxuICAgIGNhcHRpb246IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTIsIDEuNjYsIDAuNCksXG4gICAgb3ZlcmxpbmU6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTIsIDIuNjYsIDEsIGNhc2VBbGxDYXBzKSxcbiAgICAvLyBUT0RPIHY2OiBSZW1vdmUgaGFuZGxpbmcgb2YgJ2luaGVyaXQnIHZhcmlhbnQgZnJvbSB0aGUgdGhlbWUgYXMgaXQgaXMgYWxyZWFkeSBoYW5kbGVkIGluIE1hdGVyaWFsIFVJJ3MgVHlwb2dyYXBoeSBjb21wb25lbnQuIEFsc28sIHJlbWVtYmVyIHRvIHJlbW92ZSB0aGUgYXNzb2NpYXRlZCB0eXBlcy5cbiAgICBpbmhlcml0OiB7XG4gICAgICBmb250RmFtaWx5OiAnaW5oZXJpdCcsXG4gICAgICBmb250V2VpZ2h0OiAnaW5oZXJpdCcsXG4gICAgICBmb250U2l6ZTogJ2luaGVyaXQnLFxuICAgICAgbGluZUhlaWdodDogJ2luaGVyaXQnLFxuICAgICAgbGV0dGVyU3BhY2luZzogJ2luaGVyaXQnXG4gICAgfVxuICB9O1xuICByZXR1cm4gZGVlcG1lcmdlKF9leHRlbmRzKHtcbiAgICBodG1sRm9udFNpemUsXG4gICAgcHhUb1JlbSxcbiAgICBmb250RmFtaWx5LFxuICAgIGZvbnRTaXplLFxuICAgIGZvbnRXZWlnaHRMaWdodCxcbiAgICBmb250V2VpZ2h0UmVndWxhcixcbiAgICBmb250V2VpZ2h0TWVkaXVtLFxuICAgIGZvbnRXZWlnaHRCb2xkXG4gIH0sIHZhcmlhbnRzKSwgb3RoZXIsIHtcbiAgICBjbG9uZTogZmFsc2UgLy8gTm8gbmVlZCB0byBjbG9uZSBkZWVwXG4gIH0pO1xufSIsImNvbnN0IHNoYWRvd0tleVVtYnJhT3BhY2l0eSA9IDAuMjtcbmNvbnN0IHNoYWRvd0tleVBlbnVtYnJhT3BhY2l0eSA9IDAuMTQ7XG5jb25zdCBzaGFkb3dBbWJpZW50U2hhZG93T3BhY2l0eSA9IDAuMTI7XG5mdW5jdGlvbiBjcmVhdGVTaGFkb3coLi4ucHgpIHtcbiAgcmV0dXJuIFtgJHtweFswXX1weCAke3B4WzFdfXB4ICR7cHhbMl19cHggJHtweFszXX1weCByZ2JhKDAsMCwwLCR7c2hhZG93S2V5VW1icmFPcGFjaXR5fSlgLCBgJHtweFs0XX1weCAke3B4WzVdfXB4ICR7cHhbNl19cHggJHtweFs3XX1weCByZ2JhKDAsMCwwLCR7c2hhZG93S2V5UGVudW1icmFPcGFjaXR5fSlgLCBgJHtweFs4XX1weCAke3B4WzldfXB4ICR7cHhbMTBdfXB4ICR7cHhbMTFdfXB4IHJnYmEoMCwwLDAsJHtzaGFkb3dBbWJpZW50U2hhZG93T3BhY2l0eX0pYF0uam9pbignLCcpO1xufVxuXG4vLyBWYWx1ZXMgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF0ZXJpYWwtY29tcG9uZW50cy9tYXRlcmlhbC1jb21wb25lbnRzLXdlYi9ibG9iL2JlODc0N2Y5NDU3NDY2OWNiNWU3YWRkMWE3YzU0ZmE0MWE4OWNlYzcvcGFja2FnZXMvbWRjLWVsZXZhdGlvbi9fdmFyaWFibGVzLnNjc3NcbmNvbnN0IHNoYWRvd3MgPSBbJ25vbmUnLCBjcmVhdGVTaGFkb3coMCwgMiwgMSwgLTEsIDAsIDEsIDEsIDAsIDAsIDEsIDMsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgMSwgLTIsIDAsIDIsIDIsIDAsIDAsIDEsIDUsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgMywgLTIsIDAsIDMsIDQsIDAsIDAsIDEsIDgsIDApLCBjcmVhdGVTaGFkb3coMCwgMiwgNCwgLTEsIDAsIDQsIDUsIDAsIDAsIDEsIDEwLCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDUsIC0xLCAwLCA1LCA4LCAwLCAwLCAxLCAxNCwgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCA1LCAtMSwgMCwgNiwgMTAsIDAsIDAsIDEsIDE4LCAwKSwgY3JlYXRlU2hhZG93KDAsIDQsIDUsIC0yLCAwLCA3LCAxMCwgMSwgMCwgMiwgMTYsIDEpLCBjcmVhdGVTaGFkb3coMCwgNSwgNSwgLTMsIDAsIDgsIDEwLCAxLCAwLCAzLCAxNCwgMiksIGNyZWF0ZVNoYWRvdygwLCA1LCA2LCAtMywgMCwgOSwgMTIsIDEsIDAsIDMsIDE2LCAyKSwgY3JlYXRlU2hhZG93KDAsIDYsIDYsIC0zLCAwLCAxMCwgMTQsIDEsIDAsIDQsIDE4LCAzKSwgY3JlYXRlU2hhZG93KDAsIDYsIDcsIC00LCAwLCAxMSwgMTUsIDEsIDAsIDQsIDIwLCAzKSwgY3JlYXRlU2hhZG93KDAsIDcsIDgsIC00LCAwLCAxMiwgMTcsIDIsIDAsIDUsIDIyLCA0KSwgY3JlYXRlU2hhZG93KDAsIDcsIDgsIC00LCAwLCAxMywgMTksIDIsIDAsIDUsIDI0LCA0KSwgY3JlYXRlU2hhZG93KDAsIDcsIDksIC00LCAwLCAxNCwgMjEsIDIsIDAsIDUsIDI2LCA0KSwgY3JlYXRlU2hhZG93KDAsIDgsIDksIC01LCAwLCAxNSwgMjIsIDIsIDAsIDYsIDI4LCA1KSwgY3JlYXRlU2hhZG93KDAsIDgsIDEwLCAtNSwgMCwgMTYsIDI0LCAyLCAwLCA2LCAzMCwgNSksIGNyZWF0ZVNoYWRvdygwLCA4LCAxMSwgLTUsIDAsIDE3LCAyNiwgMiwgMCwgNiwgMzIsIDUpLCBjcmVhdGVTaGFkb3coMCwgOSwgMTEsIC01LCAwLCAxOCwgMjgsIDIsIDAsIDcsIDM0LCA2KSwgY3JlYXRlU2hhZG93KDAsIDksIDEyLCAtNiwgMCwgMTksIDI5LCAyLCAwLCA3LCAzNiwgNiksIGNyZWF0ZVNoYWRvdygwLCAxMCwgMTMsIC02LCAwLCAyMCwgMzEsIDMsIDAsIDgsIDM4LCA3KSwgY3JlYXRlU2hhZG93KDAsIDEwLCAxMywgLTYsIDAsIDIxLCAzMywgMywgMCwgOCwgNDAsIDcpLCBjcmVhdGVTaGFkb3coMCwgMTAsIDE0LCAtNiwgMCwgMjIsIDM1LCAzLCAwLCA4LCA0MiwgNyksIGNyZWF0ZVNoYWRvdygwLCAxMSwgMTQsIC03LCAwLCAyMywgMzYsIDMsIDAsIDksIDQ0LCA4KSwgY3JlYXRlU2hhZG93KDAsIDExLCAxNSwgLTcsIDAsIDI0LCAzOCwgMywgMCwgOSwgNDYsIDgpXTtcbmV4cG9ydCBkZWZhdWx0IHNoYWRvd3M7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImR1cmF0aW9uXCIsIFwiZWFzaW5nXCIsIFwiZGVsYXlcIl07XG4vLyBGb2xsb3cgaHR0cHM6Ly9tYXRlcmlhbC5nb29nbGUuY29tL21vdGlvbi9kdXJhdGlvbi1lYXNpbmcuaHRtbCNkdXJhdGlvbi1lYXNpbmctbmF0dXJhbC1lYXNpbmctY3VydmVzXG4vLyB0byBsZWFybiB0aGUgY29udGV4dCBpbiB3aGljaCBlYWNoIGVhc2luZyBzaG91bGQgYmUgdXNlZC5cbmV4cG9ydCBjb25zdCBlYXNpbmcgPSB7XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIGVhc2luZyBjdXJ2ZS5cbiAgZWFzZUluT3V0OiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKScsXG4gIC8vIE9iamVjdHMgZW50ZXIgdGhlIHNjcmVlbiBhdCBmdWxsIHZlbG9jaXR5IGZyb20gb2ZmLXNjcmVlbiBhbmRcbiAgLy8gc2xvd2x5IGRlY2VsZXJhdGUgdG8gYSByZXN0aW5nIHBvaW50LlxuICBlYXNlT3V0OiAnY3ViaWMtYmV6aWVyKDAuMCwgMCwgMC4yLCAxKScsXG4gIC8vIE9iamVjdHMgbGVhdmUgdGhlIHNjcmVlbiBhdCBmdWxsIHZlbG9jaXR5LiBUaGV5IGRvIG5vdCBkZWNlbGVyYXRlIHdoZW4gb2ZmLXNjcmVlbi5cbiAgZWFzZUluOiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSknLFxuICAvLyBUaGUgc2hhcnAgY3VydmUgaXMgdXNlZCBieSBvYmplY3RzIHRoYXQgbWF5IHJldHVybiB0byB0aGUgc2NyZWVuIGF0IGFueSB0aW1lLlxuICBzaGFycDogJ2N1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSknXG59O1xuXG4vLyBGb2xsb3cgaHR0cHM6Ly9tMi5tYXRlcmlhbC5pby9ndWlkZWxpbmVzL21vdGlvbi9kdXJhdGlvbi1lYXNpbmcuaHRtbCNkdXJhdGlvbi1lYXNpbmctY29tbW9uLWR1cmF0aW9uc1xuLy8gdG8gbGVhcm4gd2hlbiB1c2Ugd2hhdCB0aW1pbmdcbmV4cG9ydCBjb25zdCBkdXJhdGlvbiA9IHtcbiAgc2hvcnRlc3Q6IDE1MCxcbiAgc2hvcnRlcjogMjAwLFxuICBzaG9ydDogMjUwLFxuICAvLyBtb3N0IGJhc2ljIHJlY29tbWVuZGVkIHRpbWluZ1xuICBzdGFuZGFyZDogMzAwLFxuICAvLyB0aGlzIGlzIHRvIGJlIHVzZWQgaW4gY29tcGxleCBhbmltYXRpb25zXG4gIGNvbXBsZXg6IDM3NSxcbiAgLy8gcmVjb21tZW5kZWQgd2hlbiBzb21ldGhpbmcgaXMgZW50ZXJpbmcgc2NyZWVuXG4gIGVudGVyaW5nU2NyZWVuOiAyMjUsXG4gIC8vIHJlY29tbWVuZGVkIHdoZW4gc29tZXRoaW5nIGlzIGxlYXZpbmcgc2NyZWVuXG4gIGxlYXZpbmdTY3JlZW46IDE5NVxufTtcbmZ1bmN0aW9uIGZvcm1hdE1zKG1pbGxpc2Vjb25kcykge1xuICByZXR1cm4gYCR7TWF0aC5yb3VuZChtaWxsaXNlY29uZHMpfW1zYDtcbn1cbmZ1bmN0aW9uIGdldEF1dG9IZWlnaHREdXJhdGlvbihoZWlnaHQpIHtcbiAgaWYgKCFoZWlnaHQpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBjb25zdCBjb25zdGFudCA9IGhlaWdodCAvIDM2O1xuXG4gIC8vIGh0dHBzOi8vd3d3LndvbGZyYW1hbHBoYS5jb20vaW5wdXQvP2k9KDQrJTJCKzE1KyorKHgrJTJGKzM2KykrKiorMC4yNSslMkIrKHgrJTJGKzM2KSslMkYrNSkrKisxMFxuICByZXR1cm4gTWF0aC5yb3VuZCgoNCArIDE1ICogY29uc3RhbnQgKiogMC4yNSArIGNvbnN0YW50IC8gNSkgKiAxMCk7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVUcmFuc2l0aW9ucyhpbnB1dFRyYW5zaXRpb25zKSB7XG4gIGNvbnN0IG1lcmdlZEVhc2luZyA9IF9leHRlbmRzKHt9LCBlYXNpbmcsIGlucHV0VHJhbnNpdGlvbnMuZWFzaW5nKTtcbiAgY29uc3QgbWVyZ2VkRHVyYXRpb24gPSBfZXh0ZW5kcyh7fSwgZHVyYXRpb24sIGlucHV0VHJhbnNpdGlvbnMuZHVyYXRpb24pO1xuICBjb25zdCBjcmVhdGUgPSAocHJvcHMgPSBbJ2FsbCddLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbk9wdGlvbiA9IG1lcmdlZER1cmF0aW9uLnN0YW5kYXJkLFxuICAgICAgICBlYXNpbmc6IGVhc2luZ09wdGlvbiA9IG1lcmdlZEVhc2luZy5lYXNlSW5PdXQsXG4gICAgICAgIGRlbGF5ID0gMFxuICAgICAgfSA9IG9wdGlvbnMsXG4gICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKG9wdGlvbnMsIF9leGNsdWRlZCk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGlzU3RyaW5nID0gdmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbiAgICAgIC8vIElFMTEgc3VwcG9ydCwgcmVwbGFjZSB3aXRoIE51bWJlci5pc05hTlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICAgICAgY29uc3QgaXNOdW1iZXIgPSB2YWx1ZSA9PiAhaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpO1xuICAgICAgaWYgKCFpc1N0cmluZyhwcm9wcykgJiYgIUFycmF5LmlzQXJyYXkocHJvcHMpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJwcm9wc1wiIG11c3QgYmUgYSBzdHJpbmcgb3IgQXJyYXkuJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzTnVtYmVyKGR1cmF0aW9uT3B0aW9uKSAmJiAhaXNTdHJpbmcoZHVyYXRpb25PcHRpb24pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogQXJndW1lbnQgXCJkdXJhdGlvblwiIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcgYnV0IGZvdW5kICR7ZHVyYXRpb25PcHRpb259LmApO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1N0cmluZyhlYXNpbmdPcHRpb24pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJlYXNpbmdcIiBtdXN0IGJlIGEgc3RyaW5nLicpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc051bWJlcihkZWxheSkgJiYgIWlzU3RyaW5nKGRlbGF5KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IEFyZ3VtZW50IFwiZGVsYXlcIiBtdXN0IGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nLicpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBTZWNvbmcgYXJndW1lbnQgb2YgdHJhbnNpdGlvbi5jcmVhdGUgbXVzdCBiZSBhbiBvYmplY3QuJywgXCJBcmd1bWVudHMgc2hvdWxkIGJlIGVpdGhlciBgY3JlYXRlKCdwcm9wMScsIG9wdGlvbnMpYCBvciBgY3JlYXRlKFsncHJvcDEnLCAncHJvcDInXSwgb3B0aW9ucylgXCJdLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3Qua2V5cyhvdGhlcikubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVW5yZWNvZ25pemVkIGFyZ3VtZW50KHMpIFske09iamVjdC5rZXlzKG90aGVyKS5qb2luKCcsJyl9XS5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KHByb3BzKSA/IHByb3BzIDogW3Byb3BzXSkubWFwKGFuaW1hdGVkUHJvcCA9PiBgJHthbmltYXRlZFByb3B9ICR7dHlwZW9mIGR1cmF0aW9uT3B0aW9uID09PSAnc3RyaW5nJyA/IGR1cmF0aW9uT3B0aW9uIDogZm9ybWF0TXMoZHVyYXRpb25PcHRpb24pfSAke2Vhc2luZ09wdGlvbn0gJHt0eXBlb2YgZGVsYXkgPT09ICdzdHJpbmcnID8gZGVsYXkgOiBmb3JtYXRNcyhkZWxheSl9YCkuam9pbignLCcpO1xuICB9O1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIGdldEF1dG9IZWlnaHREdXJhdGlvbixcbiAgICBjcmVhdGVcbiAgfSwgaW5wdXRUcmFuc2l0aW9ucywge1xuICAgIGVhc2luZzogbWVyZ2VkRWFzaW5nLFxuICAgIGR1cmF0aW9uOiBtZXJnZWREdXJhdGlvblxuICB9KTtcbn0iLCIvLyBXZSBuZWVkIHRvIGNlbnRyYWxpemUgdGhlIHpJbmRleCBkZWZpbml0aW9ucyBhcyB0aGV5IHdvcmtcbi8vIGxpa2UgZ2xvYmFsIHZhbHVlcyBpbiB0aGUgYnJvd3Nlci5cbmNvbnN0IHpJbmRleCA9IHtcbiAgbW9iaWxlU3RlcHBlcjogMTAwMCxcbiAgZmFiOiAxMDUwLFxuICBzcGVlZERpYWw6IDEwNTAsXG4gIGFwcEJhcjogMTEwMCxcbiAgZHJhd2VyOiAxMjAwLFxuICBtb2RhbDogMTMwMCxcbiAgc25hY2tiYXI6IDE0MDAsXG4gIHRvb2x0aXA6IDE1MDBcbn07XG5leHBvcnQgZGVmYXVsdCB6SW5kZXg7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGZyb20gXCJAbXVpL3V0aWxzL2Zvcm1hdE11aUVycm9yTWVzc2FnZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYnJlYWtwb2ludHNcIiwgXCJtaXhpbnNcIiwgXCJzcGFjaW5nXCIsIFwicGFsZXR0ZVwiLCBcInRyYW5zaXRpb25zXCIsIFwidHlwb2dyYXBoeVwiLCBcInNoYXBlXCJdO1xuaW1wb3J0IHsgZGVlcG1lcmdlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyBjcmVhdGVUaGVtZSBhcyBzeXN0ZW1DcmVhdGVUaGVtZSwgdW5zdGFibGVfZGVmYXVsdFN4Q29uZmlnIGFzIGRlZmF1bHRTeENvbmZpZywgdW5zdGFibGVfc3R5bGVGdW5jdGlvblN4IGFzIHN0eWxlRnVuY3Rpb25TeCB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmltcG9ydCBjcmVhdGVNaXhpbnMgZnJvbSAnLi9jcmVhdGVNaXhpbnMnO1xuaW1wb3J0IGNyZWF0ZVBhbGV0dGUgZnJvbSAnLi9jcmVhdGVQYWxldHRlJztcbmltcG9ydCBjcmVhdGVUeXBvZ3JhcGh5IGZyb20gJy4vY3JlYXRlVHlwb2dyYXBoeSc7XG5pbXBvcnQgc2hhZG93cyBmcm9tICcuL3NoYWRvd3MnO1xuaW1wb3J0IGNyZWF0ZVRyYW5zaXRpb25zIGZyb20gJy4vY3JlYXRlVHJhbnNpdGlvbnMnO1xuaW1wb3J0IHpJbmRleCBmcm9tICcuL3pJbmRleCc7XG5mdW5jdGlvbiBjcmVhdGVUaGVtZShvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgY29uc3Qge1xuICAgICAgbWl4aW5zOiBtaXhpbnNJbnB1dCA9IHt9LFxuICAgICAgcGFsZXR0ZTogcGFsZXR0ZUlucHV0ID0ge30sXG4gICAgICB0cmFuc2l0aW9uczogdHJhbnNpdGlvbnNJbnB1dCA9IHt9LFxuICAgICAgdHlwb2dyYXBoeTogdHlwb2dyYXBoeUlucHV0ID0ge31cbiAgICB9ID0gb3B0aW9ucyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKG9wdGlvbnMsIF9leGNsdWRlZCk7XG4gIGlmIChvcHRpb25zLnZhcnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogXFxgdmFyc1xcYCBpcyBhIHByaXZhdGUgZmllbGQgdXNlZCBmb3IgQ1NTIHZhcmlhYmxlcyBzdXBwb3J0LlxuUGxlYXNlIHVzZSBhbm90aGVyIG5hbWUuYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMTgpKTtcbiAgfVxuICBjb25zdCBwYWxldHRlID0gY3JlYXRlUGFsZXR0ZShwYWxldHRlSW5wdXQpO1xuICBjb25zdCBzeXN0ZW1UaGVtZSA9IHN5c3RlbUNyZWF0ZVRoZW1lKG9wdGlvbnMpO1xuICBsZXQgbXVpVGhlbWUgPSBkZWVwbWVyZ2Uoc3lzdGVtVGhlbWUsIHtcbiAgICBtaXhpbnM6IGNyZWF0ZU1peGlucyhzeXN0ZW1UaGVtZS5icmVha3BvaW50cywgbWl4aW5zSW5wdXQpLFxuICAgIHBhbGV0dGUsXG4gICAgLy8gRG9uJ3QgdXNlIFsuLi5zaGFkb3dzXSB1bnRpbCB5b3UndmUgdmVyaWZpZWQgaXRzIHRyYW5zcGlsZWQgY29kZSBpcyBub3QgaW52b2tpbmcgdGhlIGl0ZXJhdG9yIHByb3RvY29sLlxuICAgIHNoYWRvd3M6IHNoYWRvd3Muc2xpY2UoKSxcbiAgICB0eXBvZ3JhcGh5OiBjcmVhdGVUeXBvZ3JhcGh5KHBhbGV0dGUsIHR5cG9ncmFwaHlJbnB1dCksXG4gICAgdHJhbnNpdGlvbnM6IGNyZWF0ZVRyYW5zaXRpb25zKHRyYW5zaXRpb25zSW5wdXQpLFxuICAgIHpJbmRleDogX2V4dGVuZHMoe30sIHpJbmRleClcbiAgfSk7XG4gIG11aVRoZW1lID0gZGVlcG1lcmdlKG11aVRoZW1lLCBvdGhlcik7XG4gIG11aVRoZW1lID0gYXJncy5yZWR1Y2UoKGFjYywgYXJndW1lbnQpID0+IGRlZXBtZXJnZShhY2MsIGFyZ3VtZW50KSwgbXVpVGhlbWUpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIFRPRE8gdjY6IFJlZmFjdG9yIHRvIHVzZSBnbG9iYWxTdGF0ZUNsYXNzZXNNYXBwaW5nIGZyb20gQG11aS91dGlscyBvbmNlIGByZWFkT25seWAgc3RhdGUgY2xhc3MgaXMgdXNlZCBpbiBSYXRpbmcgY29tcG9uZW50LlxuICAgIGNvbnN0IHN0YXRlQ2xhc3NlcyA9IFsnYWN0aXZlJywgJ2NoZWNrZWQnLCAnY29tcGxldGVkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2V4cGFuZGVkJywgJ2ZvY3VzZWQnLCAnZm9jdXNWaXNpYmxlJywgJ3JlcXVpcmVkJywgJ3NlbGVjdGVkJ107XG4gICAgY29uc3QgdHJhdmVyc2UgPSAobm9kZSwgY29tcG9uZW50KSA9PiB7XG4gICAgICBsZXQga2V5O1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ3VhcmQtZm9yLWluLCBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgZm9yIChrZXkgaW4gbm9kZSkge1xuICAgICAgICBjb25zdCBjaGlsZCA9IG5vZGVba2V5XTtcbiAgICAgICAgaWYgKHN0YXRlQ2xhc3Nlcy5pbmRleE9mKGtleSkgIT09IC0xICYmIE9iamVjdC5rZXlzKGNoaWxkKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlQ2xhc3MgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnJywga2V5KTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSBcXGAke2NvbXBvbmVudH1cXGAgY29tcG9uZW50IGluY3JlYXNlcyBgICsgYHRoZSBDU1Mgc3BlY2lmaWNpdHkgb2YgdGhlIFxcYCR7a2V5fVxcYCBpbnRlcm5hbCBzdGF0ZS5gLCAnWW91IGNhbiBub3Qgb3ZlcnJpZGUgaXQgbGlrZSB0aGlzOiAnLCBKU09OLnN0cmluZ2lmeShub2RlLCBudWxsLCAyKSwgJycsIGBJbnN0ZWFkLCB5b3UgbmVlZCB0byB1c2UgdGhlICcmLiR7c3RhdGVDbGFzc30nIHN5bnRheDpgLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgIHJvb3Q6IHtcbiAgICAgICAgICAgICAgICBbYCYuJHtzdGF0ZUNsYXNzfWBdOiBjaGlsZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBudWxsLCAyKSwgJycsICdodHRwczovL211aS5jb20vci9zdGF0ZS1jbGFzc2VzLWd1aWRlJ10uam9pbignXFxuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBSZW1vdmUgdGhlIHN0eWxlIHRvIHByZXZlbnQgZ2xvYmFsIGNvbmZsaWN0cy5cbiAgICAgICAgICBub2RlW2tleV0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgT2JqZWN0LmtleXMobXVpVGhlbWUuY29tcG9uZW50cykuZm9yRWFjaChjb21wb25lbnQgPT4ge1xuICAgICAgY29uc3Qgc3R5bGVPdmVycmlkZXMgPSBtdWlUaGVtZS5jb21wb25lbnRzW2NvbXBvbmVudF0uc3R5bGVPdmVycmlkZXM7XG4gICAgICBpZiAoc3R5bGVPdmVycmlkZXMgJiYgY29tcG9uZW50LmluZGV4T2YoJ011aScpID09PSAwKSB7XG4gICAgICAgIHRyYXZlcnNlKHN0eWxlT3ZlcnJpZGVzLCBjb21wb25lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIG11aVRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnID0gX2V4dGVuZHMoe30sIGRlZmF1bHRTeENvbmZpZywgb3RoZXIgPT0gbnVsbCA/IHZvaWQgMCA6IG90aGVyLnVuc3RhYmxlX3N4Q29uZmlnKTtcbiAgbXVpVGhlbWUudW5zdGFibGVfc3ggPSBmdW5jdGlvbiBzeChwcm9wcykge1xuICAgIHJldHVybiBzdHlsZUZ1bmN0aW9uU3goe1xuICAgICAgc3g6IHByb3BzLFxuICAgICAgdGhlbWU6IHRoaXNcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIG11aVRoZW1lO1xufVxubGV0IHdhcm5lZE9uY2UgPSBmYWxzZTtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNdWlUaGVtZSguLi5hcmdzKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKCF3YXJuZWRPbmNlKSB7XG4gICAgICB3YXJuZWRPbmNlID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IHRoZSBjcmVhdGVNdWlUaGVtZSBmdW5jdGlvbiB3YXMgcmVuYW1lZCB0byBjcmVhdGVUaGVtZS4nLCAnJywgXCJZb3Ugc2hvdWxkIHVzZSBgaW1wb3J0IHsgY3JlYXRlVGhlbWUgfSBmcm9tICdAbXVpL21hdGVyaWFsL3N0eWxlcydgXCJdLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZVRoZW1lKC4uLmFyZ3MpO1xufVxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlVGhlbWU7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVNaXhpbnMoYnJlYWtwb2ludHMsIG1peGlucykge1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIHRvb2xiYXI6IHtcbiAgICAgIG1pbkhlaWdodDogNTYsXG4gICAgICBbYnJlYWtwb2ludHMudXAoJ3hzJyldOiB7XG4gICAgICAgICdAbWVkaWEgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpJzoge1xuICAgICAgICAgIG1pbkhlaWdodDogNDhcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFticmVha3BvaW50cy51cCgnc20nKV06IHtcbiAgICAgICAgbWluSGVpZ2h0OiA2NFxuICAgICAgfVxuICAgIH1cbiAgfSwgbWl4aW5zKTtcbn0iLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBjcmVhdGVUaGVtZSBmcm9tICcuL2NyZWF0ZVRoZW1lJztcbmNvbnN0IGRlZmF1bHRUaGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0VGhlbWU7IiwiLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL21hdGVyaWFsLWNvbXBvbmVudHMvbWF0ZXJpYWwtY29tcG9uZW50cy1pb3MvYmxvYi9iY2EzNjEwNzQwNTU5NGQ1YjdiMTYyNjVhNWIwZWQ2OThmODVhNWVlL2NvbXBvbmVudHMvRWxldmF0aW9uL3NyYy9VSUNvbG9yJTJCTWF0ZXJpYWxFbGV2YXRpb24ubSNMNjFcbmNvbnN0IGdldE92ZXJsYXlBbHBoYSA9IGVsZXZhdGlvbiA9PiB7XG4gIGxldCBhbHBoYVZhbHVlO1xuICBpZiAoZWxldmF0aW9uIDwgMSkge1xuICAgIGFscGhhVmFsdWUgPSA1LjExOTE2ICogZWxldmF0aW9uICoqIDI7XG4gIH0gZWxzZSB7XG4gICAgYWxwaGFWYWx1ZSA9IDQuNSAqIE1hdGgubG9nKGVsZXZhdGlvbiArIDEpICsgMjtcbiAgfVxuICByZXR1cm4gKGFscGhhVmFsdWUgLyAxMDApLnRvRml4ZWQoMik7XG59O1xuZXhwb3J0IGRlZmF1bHQgZ2V0T3ZlcmxheUFscGhhOyIsImV4cG9ydCBkZWZhdWx0ICckJG1hdGVyaWFsJzsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IGNyZWF0ZVN0eWxlZCwgc2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgZGVmYXVsdFRoZW1lIGZyb20gJy4vZGVmYXVsdFRoZW1lJztcbmltcG9ydCBUSEVNRV9JRCBmcm9tICcuL2lkZW50aWZpZXInO1xuZXhwb3J0IGNvbnN0IHJvb3RTaG91bGRGb3J3YXJkUHJvcCA9IHByb3AgPT4gc2hvdWxkRm9yd2FyZFByb3AocHJvcCkgJiYgcHJvcCAhPT0gJ2NsYXNzZXMnO1xuZXhwb3J0IGNvbnN0IHNsb3RTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wO1xuY29uc3Qgc3R5bGVkID0gY3JlYXRlU3R5bGVkKHtcbiAgdGhlbWVJZDogVEhFTUVfSUQsXG4gIGRlZmF1bHRUaGVtZSxcbiAgcm9vdFNob3VsZEZvcndhcmRQcm9wXG59KTtcbmV4cG9ydCBkZWZhdWx0IHN0eWxlZDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRoZW1lIGFzIHVzZVRoZW1lU3lzdGVtIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGRlZmF1bHRUaGVtZSBmcm9tICcuL2RlZmF1bHRUaGVtZSc7XG5pbXBvcnQgVEhFTUVfSUQgZnJvbSAnLi9pZGVudGlmaWVyJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lU3lzdGVtKGRlZmF1bHRUaGVtZSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRGVidWdWYWx1ZSh0aGVtZSk7XG4gIH1cbiAgcmV0dXJuIHRoZW1lW1RIRU1FX0lEXSB8fCB0aGVtZTtcbn0iLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHVzZVRoZW1lUHJvcHMgYXMgc3lzdGVtVXNlVGhlbWVQcm9wcyB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBkZWZhdWx0VGhlbWUgZnJvbSAnLi9kZWZhdWx0VGhlbWUnO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4vaWRlbnRpZmllcic7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUaGVtZVByb3BzKHtcbiAgcHJvcHMsXG4gIG5hbWVcbn0pIHtcbiAgcmV0dXJuIHN5c3RlbVVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzLFxuICAgIG5hbWUsXG4gICAgZGVmYXVsdFRoZW1lLFxuICAgIHRoZW1lSWQ6IFRIRU1FX0lEXG4gIH0pO1xufSIsImV4cG9ydCBjb25zdCByZWZsb3cgPSBub2RlID0+IG5vZGUuc2Nyb2xsVG9wO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRyYW5zaXRpb25Qcm9wcyhwcm9wcywgb3B0aW9ucykge1xuICB2YXIgX3N0eWxlJHRyYW5zaXRpb25EdXJhLCBfc3R5bGUkdHJhbnNpdGlvblRpbWk7XG4gIGNvbnN0IHtcbiAgICB0aW1lb3V0LFxuICAgIGVhc2luZyxcbiAgICBzdHlsZSA9IHt9XG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIHtcbiAgICBkdXJhdGlvbjogKF9zdHlsZSR0cmFuc2l0aW9uRHVyYSA9IHN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbikgIT0gbnVsbCA/IF9zdHlsZSR0cmFuc2l0aW9uRHVyYSA6IHR5cGVvZiB0aW1lb3V0ID09PSAnbnVtYmVyJyA/IHRpbWVvdXQgOiB0aW1lb3V0W29wdGlvbnMubW9kZV0gfHwgMCxcbiAgICBlYXNpbmc6IChfc3R5bGUkdHJhbnNpdGlvblRpbWkgPSBzdHlsZS50cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24pICE9IG51bGwgPyBfc3R5bGUkdHJhbnNpdGlvblRpbWkgOiB0eXBlb2YgZWFzaW5nID09PSAnb2JqZWN0JyA/IGVhc2luZ1tvcHRpb25zLm1vZGVdIDogZWFzaW5nLFxuICAgIGRlbGF5OiBzdHlsZS50cmFuc2l0aW9uRGVsYXlcbiAgfTtcbn0iLCJpbXBvcnQgeyB1bnN0YWJsZV9jYXBpdGFsaXplIGFzIGNhcGl0YWxpemUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IGNhcGl0YWxpemU7IiwiaW1wb3J0IHsgdW5zdGFibGVfZGVib3VuY2UgYXMgZGVib3VuY2UgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IGRlYm91bmNlOyIsImltcG9ydCB7IHVuc3RhYmxlX2dldFNjcm9sbGJhclNpemUgYXMgZ2V0U2Nyb2xsYmFyU2l6ZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgZ2V0U2Nyb2xsYmFyU2l6ZTsiLCJpbXBvcnQgeyB1bnN0YWJsZV9pc011aUVsZW1lbnQgYXMgaXNNdWlFbGVtZW50IH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCBpc011aUVsZW1lbnQ7IiwiaW1wb3J0IHsgdW5zdGFibGVfb3duZXJEb2N1bWVudCBhcyBvd25lckRvY3VtZW50IH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCBvd25lckRvY3VtZW50OyIsImltcG9ydCB7IHVuc3RhYmxlX293bmVyV2luZG93IGFzIG93bmVyV2luZG93IH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCBvd25lcldpbmRvdzsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHVuc3RhYmxlX3VzZUVuaGFuY2VkRWZmZWN0IGFzIHVzZUVuaGFuY2VkRWZmZWN0IH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCB1c2VFbmhhbmNlZEVmZmVjdDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHVuc3RhYmxlX3VzZUV2ZW50Q2FsbGJhY2sgYXMgdXNlRXZlbnRDYWxsYmFjayB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgdXNlRXZlbnRDYWxsYmFjazsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHVuc3RhYmxlX3VzZUZvcmtSZWYgYXMgdXNlRm9ya1JlZiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgdXNlRm9ya1JlZjsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHVuc3RhYmxlX3VzZUlzRm9jdXNWaXNpYmxlIGFzIHVzZUlzRm9jdXNWaXNpYmxlIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCB1c2VJc0ZvY3VzVmlzaWJsZTsiLCJjb25zdCBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG5leHBvcnQgZGVmYXVsdCBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdtdWkubmVzdGVkJykgOiAnX19USEVNRV9ORVNURURfXyc7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgZXhhY3RQcm9wIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgVGhlbWVDb250ZXh0IGZyb20gJy4uL3VzZVRoZW1lL1RoZW1lQ29udGV4dCc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vdXNlVGhlbWUnO1xuaW1wb3J0IG5lc3RlZCBmcm9tICcuL25lc3RlZCc7XG5cbi8vIFRvIHN1cHBvcnQgY29tcG9zaXRpb24gb2YgdGhlbWUuXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gbWVyZ2VPdXRlckxvY2FsVGhlbWUob3V0ZXJUaGVtZSwgbG9jYWxUaGVtZSkge1xuICBpZiAodHlwZW9mIGxvY2FsVGhlbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCBtZXJnZWRUaGVtZSA9IGxvY2FsVGhlbWUob3V0ZXJUaGVtZSk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICghbWVyZ2VkVGhlbWUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogWW91IHNob3VsZCByZXR1cm4gYW4gb2JqZWN0IGZyb20geW91ciB0aGVtZSBmdW5jdGlvbiwgaS5lLicsICc8VGhlbWVQcm92aWRlciB0aGVtZT17KCkgPT4gKHt9KX0gLz4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXJnZWRUaGVtZTtcbiAgfVxuICByZXR1cm4gX2V4dGVuZHMoe30sIG91dGVyVGhlbWUsIGxvY2FsVGhlbWUpO1xufVxuXG4vKipcbiAqIFRoaXMgY29tcG9uZW50IHRha2VzIGEgYHRoZW1lYCBwcm9wLlxuICogSXQgbWFrZXMgdGhlIGB0aGVtZWAgYXZhaWxhYmxlIGRvd24gdGhlIFJlYWN0IHRyZWUgdGhhbmtzIHRvIFJlYWN0IGNvbnRleHQuXG4gKiBUaGlzIGNvbXBvbmVudCBzaG91bGQgcHJlZmVyYWJseSBiZSB1c2VkIGF0ICoqdGhlIHJvb3Qgb2YgeW91ciBjb21wb25lbnQgdHJlZSoqLlxuICovXG5mdW5jdGlvbiBUaGVtZVByb3ZpZGVyKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICB0aGVtZTogbG9jYWxUaGVtZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG91dGVyVGhlbWUgPSB1c2VUaGVtZSgpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChvdXRlclRoZW1lID09PSBudWxsICYmIHR5cGVvZiBsb2NhbFRoZW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBZb3UgYXJlIHByb3ZpZGluZyBhIHRoZW1lIGZ1bmN0aW9uIHByb3AgdG8gdGhlIFRoZW1lUHJvdmlkZXIgY29tcG9uZW50OicsICc8VGhlbWVQcm92aWRlciB0aGVtZT17b3V0ZXJUaGVtZSA9PiBvdXRlclRoZW1lfSAvPicsICcnLCAnSG93ZXZlciwgbm8gb3V0ZXIgdGhlbWUgaXMgcHJlc2VudC4nLCAnTWFrZSBzdXJlIGEgdGhlbWUgaXMgYWxyZWFkeSBpbmplY3RlZCBoaWdoZXIgaW4gdGhlIFJlYWN0IHRyZWUgJyArICdvciBwcm92aWRlIGEgdGhlbWUgb2JqZWN0LiddLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBvdXRlclRoZW1lID09PSBudWxsID8gbG9jYWxUaGVtZSA6IG1lcmdlT3V0ZXJMb2NhbFRoZW1lKG91dGVyVGhlbWUsIGxvY2FsVGhlbWUpO1xuICAgIGlmIChvdXRwdXQgIT0gbnVsbCkge1xuICAgICAgb3V0cHV0W25lc3RlZF0gPSBvdXRlclRoZW1lICE9PSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9LCBbbG9jYWxUaGVtZSwgb3V0ZXJUaGVtZV0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRoZW1lLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICB9KTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRoZW1lUHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogWW91ciBjb21wb25lbnQgdHJlZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEEgdGhlbWUgb2JqZWN0LiBZb3UgY2FuIHByb3ZpZGUgYSBmdW5jdGlvbiB0byBleHRlbmQgdGhlIG91dGVyIHRoZW1lLlxuICAgKi9cbiAgdGhlbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5mdW5jXSkuaXNSZXF1aXJlZFxufSA6IHZvaWQgMDtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRoZW1lUHJvdmlkZXIucHJvcFR5cGVzID0gZXhhY3RQcm9wKFRoZW1lUHJvdmlkZXIucHJvcFR5cGVzKSA6IHZvaWQgMDtcbn1cbmV4cG9ydCBkZWZhdWx0IFRoZW1lUHJvdmlkZXI7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuY29uc3QgVGhlbWVDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBUaGVtZUNvbnRleHQuZGlzcGxheU5hbWUgPSAnVGhlbWVDb250ZXh0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IFRoZW1lQ29udGV4dDsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVGhlbWVDb250ZXh0IGZyb20gJy4vVGhlbWVDb250ZXh0JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICBjb25zdCB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VEZWJ1Z1ZhbHVlKHRoZW1lKTtcbiAgfVxuICByZXR1cm4gdGhlbWU7XG59IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgfHwgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHbG9iYWxTdHlsZXMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIHN0eWxlcyxcbiAgICBkZWZhdWx0VGhlbWUgPSB7fVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGdsb2JhbFN0eWxlcyA9IHR5cGVvZiBzdHlsZXMgPT09ICdmdW5jdGlvbicgPyB0aGVtZUlucHV0ID0+IHN0eWxlcyhpc0VtcHR5KHRoZW1lSW5wdXQpID8gZGVmYXVsdFRoZW1lIDogdGhlbWVJbnB1dCkgOiBzdHlsZXM7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChHbG9iYWwsIHtcbiAgICBzdHlsZXM6IGdsb2JhbFN0eWxlc1xuICB9KTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEdsb2JhbFN0eWxlcy5wcm9wVHlwZXMgPSB7XG4gIGRlZmF1bHRUaGVtZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgc3R5bGVzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXksIFByb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5mdW5jXSlcbn0gOiB2b2lkIDA7IiwiLyoqXG4gKiBAbXVpL3N0eWxlZC1lbmdpbmUgdjUuMTUuMlxuICpcbiAqIEBsaWNlbnNlIE1JVFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2UgY2xpZW50JztcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmltcG9ydCBlbVN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3R5bGVkKHRhZywgb3B0aW9ucykge1xuICBjb25zdCBzdHlsZXNGYWN0b3J5ID0gZW1TdHlsZWQodGFnLCBvcHRpb25zKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICByZXR1cm4gKC4uLnN0eWxlcykgPT4ge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgPyBgXCIke3RhZ31cImAgOiAnY29tcG9uZW50JztcbiAgICAgIGlmIChzdHlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFNlZW1zIGxpa2UgeW91IGNhbGxlZCBcXGBzdHlsZWQoJHtjb21wb25lbnR9KSgpXFxgIHdpdGhvdXQgYSBcXGBzdHlsZVxcYCBhcmd1bWVudC5gLCAnWW91IG11c3QgcHJvdmlkZSBhIGBzdHlsZXNgIGFyZ3VtZW50OiBgc3R5bGVkKFwiZGl2XCIpKHN0eWxlWW91Rm9yZ290VG9QYXNzKWAuJ10uam9pbignXFxuJykpO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZXMuc29tZShzdHlsZSA9PiBzdHlsZSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IHRoZSBzdHlsZWQoJHtjb21wb25lbnR9KSguLi5hcmdzKSBBUEkgcmVxdWlyZXMgYWxsIGl0cyBhcmdzIHRvIGJlIGRlZmluZWQuYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGVzRmFjdG9yeSguLi5zdHlsZXMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIHN0eWxlc0ZhY3Rvcnk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBpbnRlcm5hbF9wcm9jZXNzU3R5bGVzID0gKHRhZywgcHJvY2Vzc29yKSA9PiB7XG4gIC8vIEVtb3Rpb24gYXR0YWNoZXMgYWxsIHRoZSBzdHlsZXMgYXMgYF9fZW1vdGlvbl9zdHlsZXNgLlxuICAvLyBSZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9lbW90aW9uLWpzL2Vtb3Rpb24vYmxvYi8xNmQ5NzFkMGRhMjI5NTk2ZDZiY2MzOWQyODJiYTk3NTNjOWVlN2NmL3BhY2thZ2VzL3N0eWxlZC9zcmMvYmFzZS5qcyNMMTg2XG4gIGlmIChBcnJheS5pc0FycmF5KHRhZy5fX2Vtb3Rpb25fc3R5bGVzKSkge1xuICAgIHRhZy5fX2Vtb3Rpb25fc3R5bGVzID0gcHJvY2Vzc29yKHRhZy5fX2Vtb3Rpb25fc3R5bGVzKTtcbiAgfVxufTtcbmV4cG9ydCB7IFRoZW1lQ29udGV4dCwga2V5ZnJhbWVzLCBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFN0eWxlZEVuZ2luZVByb3ZpZGVyIH0gZnJvbSAnLi9TdHlsZWRFbmdpbmVQcm92aWRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdsb2JhbFN0eWxlcyB9IGZyb20gJy4vR2xvYmFsU3R5bGVzJzsiXSwibmFtZXMiOlsiZ2V0U2VsZWN0VXRpbGl0eUNsYXNzZXMiLCJzbG90IiwiZ2VuZXJhdGVVdGlsaXR5Q2xhc3MiLCJnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIiwiX3NwYW4iLCJfZXhjbHVkZWQiLCJTZWxlY3RTZWxlY3QiLCJzdHlsZWQiLCJuYW1lIiwib3ZlcnJpZGVzUmVzb2x2ZXIiLCJwcm9wcyIsInN0eWxlcyIsIm93bmVyU3RhdGUiLCJzZWxlY3QiLCJ2YXJpYW50IiwiZXJyb3IiLCJtdWx0aXBsZSIsImhlaWdodCIsIm1pbkhlaWdodCIsInRleHRPdmVyZmxvdyIsIndoaXRlU3BhY2UiLCJvdmVyZmxvdyIsIlNlbGVjdEljb24iLCJpY29uIiwiY2FwaXRhbGl6ZSIsIm9wZW4iLCJpY29uT3BlbiIsIlNlbGVjdE5hdGl2ZUlucHV0Iiwic2hvdWxkRm9yd2FyZFByb3AiLCJwcm9wIiwibmF0aXZlSW5wdXQiLCJib3R0b20iLCJsZWZ0IiwicG9zaXRpb24iLCJvcGFjaXR5IiwicG9pbnRlckV2ZW50cyIsIndpZHRoIiwiYm94U2l6aW5nIiwiYXJlRXF1YWxWYWx1ZXMiLCJhIiwiYiIsIlN0cmluZyIsImlzRW1wdHkiLCJkaXNwbGF5IiwidHJpbSIsInJlZiIsIl9NZW51UHJvcHMkc2xvdFByb3BzIiwiYXJpYURlc2NyaWJlZGJ5IiwiYXJpYUxhYmVsIiwiYXV0b0ZvY3VzIiwiYXV0b1dpZHRoIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJkZWZhdWx0T3BlbiIsImRlZmF1bHRWYWx1ZSIsImRpc2FibGVkIiwiZGlzcGxheUVtcHR5IiwiSWNvbkNvbXBvbmVudCIsImlucHV0UmVmIiwiaW5wdXRSZWZQcm9wIiwibGFiZWxJZCIsIk1lbnVQcm9wcyIsIm9uQmx1ciIsIm9uQ2hhbmdlIiwib25DbG9zZSIsIm9uRm9jdXMiLCJvbk9wZW4iLCJvcGVuUHJvcCIsInJlYWRPbmx5IiwicmVuZGVyVmFsdWUiLCJTZWxlY3REaXNwbGF5UHJvcHMiLCJ0YWJJbmRleCIsInRhYkluZGV4UHJvcCIsInZhbHVlIiwidmFsdWVQcm9wIiwib3RoZXIiLCJzZXRWYWx1ZVN0YXRlIiwiY29udHJvbGxlZCIsImRlZmF1bHQiLCJvcGVuU3RhdGUiLCJzZXRPcGVuU3RhdGUiLCJkaXNwbGF5UmVmIiwiZGlzcGxheU5vZGUiLCJzZXREaXNwbGF5Tm9kZSIsImN1cnJlbnQiLCJpc09wZW5Db250cm9sbGVkIiwibWVudU1pbldpZHRoU3RhdGUiLCJzZXRNZW51TWluV2lkdGhTdGF0ZSIsImhhbmRsZVJlZiIsInVzZUZvcmtSZWYiLCJoYW5kbGVEaXNwbGF5UmVmIiwibm9kZSIsImFuY2hvckVsZW1lbnQiLCJwYXJlbnROb2RlIiwiZm9jdXMiLCJjbGllbnRXaWR0aCIsImxhYmVsIiwib3duZXJEb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiaGFuZGxlciIsImdldFNlbGVjdGlvbiIsImlzQ29sbGFwc2VkIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ1cGRhdGUiLCJldmVudCIsImNoaWxkcmVuQXJyYXkiLCJ0b0FycmF5IiwiaGFuZGxlSXRlbUNsaWNrIiwiY2hpbGQiLCJuZXdWYWx1ZSIsImN1cnJlbnRUYXJnZXQiLCJoYXNBdHRyaWJ1dGUiLCJBcnJheSIsImlzQXJyYXkiLCJzbGljZSIsIml0ZW1JbmRleCIsImluZGV4T2YiLCJwdXNoIiwic3BsaWNlIiwib25DbGljayIsIm5hdGl2ZUV2ZW50IiwiY2xvbmVkRXZlbnQiLCJjb25zdHJ1Y3RvciIsInR5cGUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsIndyaXRhYmxlIiwiZGlzcGxheVNpbmdsZSIsImRpc3BsYXlNdWx0aXBsZSIsImNvbXB1dGVEaXNwbGF5IiwiZm91bmRNYXRjaCIsIml0ZW1zIiwibWFwIiwic2VsZWN0ZWQiLCJFcnJvciIsInNvbWUiLCJ2Iiwib25LZXlVcCIsImtleSIsInByZXZlbnREZWZhdWx0Iiwicm9sZSIsInVuZGVmaW5lZCIsImxlbmd0aCIsInJlZHVjZSIsIm91dHB1dCIsImluZGV4IiwibWVudU1pbldpZHRoIiwiYnV0dG9uSWQiLCJpZCIsImNsYXNzZXMiLCJzbG90cyIsImNvbXBvc2VDbGFzc2VzIiwidXNlVXRpbGl0eUNsYXNzZXMiLCJwYXBlclByb3BzIiwiUGFwZXJQcm9wcyIsInNsb3RQcm9wcyIsInBhcGVyIiwibGlzdGJveElkIiwidXNlSWQiLCJmaWx0ZXIiLCJCb29sZWFuIiwiam9pbiIsIm9uS2V5RG93biIsIm9uTW91c2VEb3duIiwiYnV0dG9uIiwiY2xzeCIsImZpbmQiLCJjaGlsZEl0ZW0iLCJ0YXJnZXQiLCJhcyIsIk1lbnUiLCJhbmNob3JFbCIsImFuY2hvck9yaWdpbiIsInZlcnRpY2FsIiwiaG9yaXpvbnRhbCIsInRyYW5zZm9ybU9yaWdpbiIsIk1lbnVMaXN0UHJvcHMiLCJkaXNhYmxlTGlzdFdyYXAiLCJzdHlsZSIsIm1pbldpZHRoIiwiZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyIsIlN2Z0ljb25Sb290Iiwicm9vdCIsImNvbG9yIiwiZm9udFNpemUiLCJ0aGVtZSIsIl90aGVtZSR0cmFuc2l0aW9ucyIsIl90aGVtZSR0cmFuc2l0aW9ucyRjciIsIl90aGVtZSR0cmFuc2l0aW9uczIiLCJfdGhlbWUkdHlwb2dyYXBoeSIsIl90aGVtZSR0eXBvZ3JhcGh5JHB4VCIsIl90aGVtZSR0eXBvZ3JhcGh5MiIsIl90aGVtZSR0eXBvZ3JhcGh5MiRweCIsIl90aGVtZSR0eXBvZ3JhcGh5MyIsIl90aGVtZSR0eXBvZ3JhcGh5MyRweCIsIl9wYWxldHRlJG93bmVyU3RhdGUkYyIsIl9wYWxldHRlIiwiX3BhbGV0dGUyIiwiX3BhbGV0dGUzIiwidXNlclNlbGVjdCIsImZpbGwiLCJoYXNTdmdBc0NoaWxkIiwiZmxleFNocmluayIsInRyYW5zaXRpb24iLCJ0cmFuc2l0aW9ucyIsImNyZWF0ZSIsImNhbGwiLCJkdXJhdGlvbiIsInNob3J0ZXIiLCJpbmhlcml0Iiwic21hbGwiLCJ0eXBvZ3JhcGh5IiwicHhUb1JlbSIsIm1lZGl1bSIsImxhcmdlIiwidmFycyIsInBhbGV0dGUiLCJtYWluIiwiYWN0aW9uIiwiYWN0aXZlIiwiU3ZnSWNvbiIsImluUHJvcHMiLCJ1c2VUaGVtZVByb3BzIiwiY29tcG9uZW50IiwiaHRtbENvbG9yIiwiaW5oZXJpdFZpZXdCb3giLCJ0aXRsZUFjY2VzcyIsInZpZXdCb3giLCJpbnN0YW5jZUZvbnRTaXplIiwibW9yZSIsImZvY3VzYWJsZSIsIm11aU5hbWUiLCJwYXRoIiwiZGlzcGxheU5hbWUiLCJDb21wb25lbnQiLCJkIiwiX2V4Y2x1ZGVkMiIsInN0eWxlZFJvb3RDb25maWciLCJTdHlsZWRJbnB1dCIsIklucHV0IiwiU3R5bGVkT3V0bGluZWRJbnB1dCIsIk91dGxpbmVkSW5wdXQiLCJTdHlsZWRGaWxsZWRJbnB1dCIsIkZpbGxlZElucHV0IiwiU2VsZWN0IiwiY2xhc3Nlc1Byb3AiLCJBcnJvd0Ryb3BEb3duIiwiaW5wdXQiLCJpbnB1dFByb3BzIiwibmF0aXZlIiwidmFyaWFudFByb3AiLCJpbnB1dENvbXBvbmVudCIsIk5hdGl2ZVNlbGVjdElucHV0IiwibXVpRm9ybUNvbnRyb2wiLCJ1c2VGb3JtQ29udHJvbCIsImZjcyIsImZvcm1Db250cm9sU3RhdGUiLCJzdGF0ZXMiLCJyZXN0T2ZDbGFzc2VzIiwiSW5wdXRDb21wb25lbnQiLCJzdGFuZGFyZCIsIm91dGxpbmVkIiwiZmlsbGVkIiwiaW5wdXRDb21wb25lbnRSZWYiLCJkZWVwbWVyZ2UiLCJub3RjaGVkIiwiZ2V0VGV4dEZpZWxkVXRpbGl0eUNsYXNzIiwidmFyaWFudENvbXBvbmVudCIsIlRleHRGaWVsZFJvb3QiLCJGb3JtQ29udHJvbCIsImF1dG9Db21wbGV0ZSIsIkZvcm1IZWxwZXJUZXh0UHJvcHMiLCJmdWxsV2lkdGgiLCJoZWxwZXJUZXh0IiwiaWRPdmVycmlkZSIsIklucHV0TGFiZWxQcm9wcyIsIklucHV0UHJvcHMiLCJtYXhSb3dzIiwibWluUm93cyIsIm11bHRpbGluZSIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJyb3dzIiwiU2VsZWN0UHJvcHMiLCJJbnB1dE1vcmUiLCJzaHJpbmsiLCJoZWxwZXJUZXh0SWQiLCJpbnB1dExhYmVsSWQiLCJJbnB1dEVsZW1lbnQiLCJJbnB1dExhYmVsIiwiaHRtbEZvciIsIkZvcm1IZWxwZXJUZXh0IiwiZ2V0VG9vbGJhclV0aWxpdHlDbGFzcyIsIlRvb2xiYXJSb290IiwiZGlzYWJsZUd1dHRlcnMiLCJndXR0ZXJzIiwiYWxpZ25JdGVtcyIsInBhZGRpbmdMZWZ0Iiwic3BhY2luZyIsInBhZGRpbmdSaWdodCIsImJyZWFrcG9pbnRzIiwidXAiLCJtaXhpbnMiLCJ0b29sYmFyIiwiZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcyIsIlR5cG9ncmFwaHlSb290IiwiYWxpZ24iLCJub1dyYXAiLCJndXR0ZXJCb3R0b20iLCJwYXJhZ3JhcGgiLCJtYXJnaW4iLCJmb250IiwidGV4dEFsaWduIiwibWFyZ2luQm90dG9tIiwiZGVmYXVsdFZhcmlhbnRNYXBwaW5nIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2Iiwic3VidGl0bGUxIiwic3VidGl0bGUyIiwiYm9keTEiLCJib2R5MiIsImNvbG9yVHJhbnNmb3JtYXRpb25zIiwicHJpbWFyeSIsInRleHRQcmltYXJ5Iiwic2Vjb25kYXJ5IiwidGV4dFNlY29uZGFyeSIsInRoZW1lUHJvcHMiLCJ0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzIiwiZXh0ZW5kU3hQcm9wIiwidmFyaWFudE1hcHBpbmciLCJUaGVtZVByb3ZpZGVyIiwiX3JlZiIsInRoZW1lSW5wdXQiLCJzY29wZWRUaGVtZSIsInRoZW1lSWQiLCJibGFjayIsIndoaXRlIiwiQTEwMCIsIkEyMDAiLCJBNDAwIiwiQTcwMCIsImxpZ2h0IiwidGV4dCIsImRpdmlkZXIiLCJiYWNrZ3JvdW5kIiwiaG92ZXIiLCJob3Zlck9wYWNpdHkiLCJzZWxlY3RlZE9wYWNpdHkiLCJkaXNhYmxlZEJhY2tncm91bmQiLCJkaXNhYmxlZE9wYWNpdHkiLCJmb2N1c09wYWNpdHkiLCJhY3RpdmF0ZWRPcGFjaXR5IiwiZGFyayIsImFkZExpZ2h0T3JEYXJrIiwiaW50ZW50IiwiZGlyZWN0aW9uIiwic2hhZGUiLCJ0b25hbE9mZnNldCIsInRvbmFsT2Zmc2V0TGlnaHQiLCJ0b25hbE9mZnNldERhcmsiLCJoYXNPd25Qcm9wZXJ0eSIsImNhc2VBbGxDYXBzIiwidGV4dFRyYW5zZm9ybSIsImRlZmF1bHRGb250RmFtaWx5IiwiY3JlYXRlVHlwb2dyYXBoeSIsImZvbnRGYW1pbHkiLCJmb250V2VpZ2h0TGlnaHQiLCJmb250V2VpZ2h0UmVndWxhciIsImZvbnRXZWlnaHRNZWRpdW0iLCJmb250V2VpZ2h0Qm9sZCIsImh0bWxGb250U2l6ZSIsImFsbFZhcmlhbnRzIiwicHhUb1JlbTIiLCJjb2VmIiwic2l6ZSIsImJ1aWxkVmFyaWFudCIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0IiwibGV0dGVyU3BhY2luZyIsImNhc2luZyIsIk1hdGgiLCJyb3VuZCIsInZhcmlhbnRzIiwiY2FwdGlvbiIsIm92ZXJsaW5lIiwiY2xvbmUiLCJjcmVhdGVTaGFkb3ciLCJweCIsImVhc2luZyIsImVhc2VJbk91dCIsImVhc2VPdXQiLCJlYXNlSW4iLCJzaGFycCIsInNob3J0ZXN0Iiwic2hvcnQiLCJjb21wbGV4IiwiZW50ZXJpbmdTY3JlZW4iLCJsZWF2aW5nU2NyZWVuIiwiZm9ybWF0TXMiLCJtaWxsaXNlY29uZHMiLCJnZXRBdXRvSGVpZ2h0RHVyYXRpb24iLCJjb25zdGFudCIsImNyZWF0ZVRyYW5zaXRpb25zIiwiaW5wdXRUcmFuc2l0aW9ucyIsIm1lcmdlZEVhc2luZyIsIm1lcmdlZER1cmF0aW9uIiwib3B0aW9ucyIsImR1cmF0aW9uT3B0aW9uIiwiZWFzaW5nT3B0aW9uIiwiZGVsYXkiLCJhbmltYXRlZFByb3AiLCJtb2JpbGVTdGVwcGVyIiwiZmFiIiwic3BlZWREaWFsIiwiYXBwQmFyIiwiZHJhd2VyIiwibW9kYWwiLCJzbmFja2JhciIsInRvb2x0aXAiLCJhcmdzIiwibWl4aW5zSW5wdXQiLCJwYWxldHRlSW5wdXQiLCJ0cmFuc2l0aW9uc0lucHV0IiwidHlwb2dyYXBoeUlucHV0IiwibW9kZSIsImNvbnRyYXN0VGhyZXNob2xkIiwiZ2V0RGVmYXVsdFByaW1hcnkiLCJnZXREZWZhdWx0U2Vjb25kYXJ5IiwiZ2V0RGVmYXVsdEVycm9yIiwiaW5mbyIsImdldERlZmF1bHRJbmZvIiwic3VjY2VzcyIsImdldERlZmF1bHRTdWNjZXNzIiwid2FybmluZyIsImdldERlZmF1bHRXYXJuaW5nIiwiZ2V0Q29udHJhc3RUZXh0IiwiYXVnbWVudENvbG9yIiwibWFpblNoYWRlIiwibGlnaHRTaGFkZSIsImRhcmtTaGFkZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJjb250cmFzdFRleHQiLCJtb2RlcyIsImNvbW1vbiIsImdyZXkiLCJjcmVhdGVQYWxldHRlIiwic3lzdGVtVGhlbWUiLCJtdWlUaGVtZSIsInNoYWRvd3MiLCJ6SW5kZXgiLCJhY2MiLCJhcmd1bWVudCIsInVuc3RhYmxlX3N4Q29uZmlnIiwiZGVmYXVsdFN4Q29uZmlnIiwidW5zdGFibGVfc3giLCJzdHlsZUZ1bmN0aW9uU3giLCJzeCIsInRoaXMiLCJlbGV2YXRpb24iLCJhbHBoYVZhbHVlIiwibG9nIiwidG9GaXhlZCIsInJvb3RTaG91bGRGb3J3YXJkUHJvcCIsInNsb3RTaG91bGRGb3J3YXJkUHJvcCIsImRlZmF1bHRUaGVtZSIsInVzZVRoZW1lIiwicmVmbG93Iiwic2Nyb2xsVG9wIiwiZ2V0VHJhbnNpdGlvblByb3BzIiwiX3N0eWxlJHRyYW5zaXRpb25EdXJhIiwiX3N0eWxlJHRyYW5zaXRpb25UaW1pIiwidGltZW91dCIsInRyYW5zaXRpb25EdXJhdGlvbiIsInRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiIsInRyYW5zaXRpb25EZWxheSIsIlN5bWJvbCIsImZvciIsImxvY2FsVGhlbWUiLCJvdXRlclRoZW1lIiwibWVyZ2VPdXRlckxvY2FsVGhlbWUiLCJuZXN0ZWQiLCJUaGVtZUNvbnRleHQiLCJQcm92aWRlciIsIkdsb2JhbFN0eWxlcyIsImdsb2JhbFN0eWxlcyIsIm9iaiIsImtleXMiLCJ0YWciLCJpbnRlcm5hbF9wcm9jZXNzU3R5bGVzIiwicHJvY2Vzc29yIiwiX19lbW90aW9uX3N0eWxlcyJdLCJzb3VyY2VSb290IjoiIn0=