dmencu 0.3.50 → 0.3.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -145,17 +145,12 @@ const Button2 = ({variant, onClick, disabled, children, className, color, size,
145
145
  className?:string,
146
146
  size?:'small',
147
147
  $attrs?:{}
148
- } & CommonAttributes)=>{
149
- let button = html.button({
150
- ...other,
151
- class: `btn btn${variant=='contained'?'':'-'+(variant=='outlined'?'outline':variant)}-${(color=='default' || color=='inherit'?'secondary':color=='secondary'?'danger':color)||'secondary'} ${className||''} ${size=='small'?'btn-sm':''}`,
152
- disabled,
153
- }, children).create();
154
- button.onmouseup = (_event)=>{
155
- onClick?.();
156
- }
157
- return button
158
- }
148
+ } & CommonAttributes)=>html.button({
149
+ ...other,
150
+ class: `btn btn${variant=='contained'?'':'-'+(variant=='outlined'?'outline':variant)}-${(color=='default' || color=='inherit'?'secondary':color=='secondary'?'danger':color)||'secondary'} ${className||''} ${size=='small'?'btn-sm':''}`,
151
+ disabled,
152
+ $on:{click:onClick}
153
+ }, children);
159
154
 
160
155
 
161
156
  const TextField = (props:{
@@ -872,6 +867,7 @@ function TextoDespliegue(props:{casillero:Texto, forPk:ForPk}){
872
867
  var ir = (defBoton:DefinicionFormularioAbrir)=>{
873
868
  // var nuevaForPk={...forPk, formulario:idFormularioDestino};
874
869
  // nuevaForPk[nuevoCampoPk] = defBoton.num
870
+ dispatchByPass(accion_abrir_formulario,{forPk:defBoton.forPk});
875
871
  dispatch(dispatchers.CAMBIAR_FORMULARIO({forPk:defBoton.forPk, apilarVuelta:true}));
876
872
  }
877
873
  return <DesplegarCasillero
@@ -1481,7 +1477,10 @@ function BotonVolverEnDiv({id}:{id:string}){
1481
1477
  return <div className="div-boton-volver">
1482
1478
  {opciones.pilaForPk.length>0?
1483
1479
  <Button id={id} className="boton-volver"
1484
- onClick={()=>dispatch(dispatchers.VOLVER_DE_FORMULARIO({magnitudRetroceso:1}))}
1480
+ onClick={()=>{
1481
+ dispatchByPass(accion_abrir_formulario,{forPk:opciones.pilaForPk[opciones.pilaForPk.length-1]});
1482
+ dispatch(dispatchers.VOLVER_DE_FORMULARIO({magnitudRetroceso:1}))
1483
+ }}
1485
1484
  > <ICON.ChevronLeft/> Volver</Button>
1486
1485
  :null}
1487
1486
  </div>
@@ -75,11 +75,7 @@ var __rest = (this && this.__rest) || function (s, e) {
75
75
  };
76
76
  const Button2 = (_a) => {
77
77
  var { variant, onClick, disabled, children, className, color, size } = _a, other = __rest(_a, ["variant", "onClick", "disabled", "children", "className", "color", "size"]);
78
- let button = js_to_html_1.html.button(Object.assign(Object.assign({}, other), { class: `btn btn${variant == 'contained' ? '' : '-' + (variant == 'outlined' ? 'outline' : variant)}-${(color == 'default' || color == 'inherit' ? 'secondary' : color == 'secondary' ? 'danger' : color) || 'secondary'} ${className || ''} ${size == 'small' ? 'btn-sm' : ''}`, disabled }), children).create();
79
- button.onmouseup = (_event) => {
80
- onClick === null || onClick === void 0 ? void 0 : onClick();
81
- };
82
- return button;
78
+ return js_to_html_1.html.button(Object.assign(Object.assign({}, other), { class: `btn btn${variant == 'contained' ? '' : '-' + (variant == 'outlined' ? 'outline' : variant)}-${(color == 'default' || color == 'inherit' ? 'secondary' : color == 'secondary' ? 'danger' : color) || 'secondary'} ${className || ''} ${size == 'small' ? 'btn-sm' : ''}`, disabled, $on: { click: onClick } }), children);
83
79
  };
84
80
  const TextField = (props) => React.createElement("input", { id: props.id, disabled: props.disabled, className: props.className, autoFocus: props.autoFocus, value: props.value, type: props.type, onChange: props.onChange, onFocus: props.onFocus, onBlur: (evt) => { var _a; return (_a = props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props, evt, evt.target.value); }, onKeyDown: props.onKeyDown, placeholder: props.label });
85
81
  const Typography = (_a) => {
@@ -512,6 +508,7 @@ var __rest = (this && this.__rest) || function (s, e) {
512
508
  var ir = (defBoton) => {
513
509
  // var nuevaForPk={...forPk, formulario:idFormularioDestino};
514
510
  // nuevaForPk[nuevoCampoPk] = defBoton.num
511
+ (0, bypass_formulario_2.dispatchByPass)(bypass_formulario_1.accion_abrir_formulario, { forPk: defBoton.forPk });
515
512
  dispatch(redux_formulario_1.dispatchers.CAMBIAR_FORMULARIO({ forPk: defBoton.forPk, apilarVuelta: true }));
516
513
  };
517
514
  return React.createElement(DesplegarCasillero, { id: `${id}-externo`, casillero: casillero },
@@ -1006,7 +1003,10 @@ var __rest = (this && this.__rest) || function (s, e) {
1006
1003
  var { opciones } = (0, react_redux_1.useSelector)((state) => ({ opciones: state.opciones }));
1007
1004
  const dispatch = (0, react_redux_1.useDispatch)();
1008
1005
  return React.createElement("div", { className: "div-boton-volver" }, opciones.pilaForPk.length > 0 ?
1009
- React.createElement(Button, { id: id, className: "boton-volver", onClick: () => dispatch(redux_formulario_1.dispatchers.VOLVER_DE_FORMULARIO({ magnitudRetroceso: 1 })) },
1006
+ React.createElement(Button, { id: id, className: "boton-volver", onClick: () => {
1007
+ (0, bypass_formulario_2.dispatchByPass)(bypass_formulario_1.accion_abrir_formulario, { forPk: opciones.pilaForPk[opciones.pilaForPk.length - 1] });
1008
+ dispatch(redux_formulario_1.dispatchers.VOLVER_DE_FORMULARIO({ magnitudRetroceso: 1 }));
1009
+ } },
1010
1010
  " ",
1011
1011
  React.createElement(render_general_1.ICON.ChevronLeft, null),
1012
1012
  " Volver")
@@ -1486,4 +1486,4 @@ var __rest = (this && this.__rest) || function (s, e) {
1486
1486
  }
1487
1487
  const BOOTSTRAP_5_1_3_SRC = 'css/bootstrap.min.css';
1488
1488
  });
1489
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvcmVuZGVyLWZvcm11bGFyaW8udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsK0JBQStCO0lBQy9CLHNDQUFzQztJQUN0QyxxREFRMEI7SUFDMUIsbUNBY2lCO0lBQ2pCLDJEQVk0QjtJQUM1Qix5REFJNEI7SUFDNUIsaUNBQTZEO0lBQzdELDZDQUF1RDtJQUN2RCxxQ0FBdUQ7SUFDdkQsK0NBQTZDO0lBQzdDLDJDQUF3QztJQUV4Qyw0Q0FNMkI7SUFJM0IsMkRBYzRCO0lBRTVCLDJDQUF5QztJQUd6QyxTQUFTLGNBQWMsQ0FBQyxJQUFnQixFQUFFLFdBQTZDO1FBQ25GLElBQUcsT0FBTyxJQUFJLElBQUksUUFBUTtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQzdDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEUsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFDLENBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBQyxDQUFDLElBQUksRUFBQyxFQUFFLENBQUEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ3pGLElBQUcsQ0FBQyxXQUFXLElBQUksSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3JDOztVQUVFO0lBQ04sQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLHFKQUFxSjtJQUNoTCxnSUFBZ0k7SUFFaEksSUFBSSxVQUFVLEdBQVcsS0FBSyxDQUFDO0lBRS9CLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVB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Q0FBRSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELE1BQU0sbUJBQW1CLEdBQUcsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xyXG5pbXBvcnQgeyAgXHJcbiAgICBSZW5kZXJQcmluY2lwYWwsIFxyXG4gICAgYWRhcHRhclRpcG9WYXJDYXNpbGxlcm8sXHJcbiAgICBJQ09OLFxyXG4gICAgZm9jdXNUb0lkLFxyXG4gICAgc2Nyb2xsVG9Ub3AsXHJcbiAgICBzY3JvbGxUb0JvdHRvbSxcclxuICAgIG1hdGVyaWFsSW9JY29uc1N2Z1BhdGhcclxufSBmcm9tIFwiLi9yZW5kZXItZ2VuZXJhbFwiO1xyXG5pbXBvcnQge0Jsb3F1ZSwgQm90b25Gb3JtdWxhcmlvLCBcclxuICAgIENhc2lsbGVyb0Jhc2UsIENhc29TdGF0ZSwgQ29uanVudG9QcmVndW50YXMsIENvbnNpc3RlbmNpYSwgXHJcbiAgICBFc3RhZG9DYXJnYSwgRmlsdHJvLCBGb3JQaywgRm9yUGtSYWl6LCBGb3JtdWxhcmlvLCBcclxuICAgIElkRm9ybXVsYXJpbywgSWRQcmVndW50YSwgSWRUYXJlYSwgSWRWYXJpYWJsZSwgSW5mb0Zvcm11bGFyaW8sXHJcbiAgICBNb2RvRGVzcGxpZWd1ZSxcclxuICAgIE9wY2lvbiwgT3BjaW9uTXVsdGlwbGUsIFBsYWluRm9yUGssIFxyXG4gICAgUHJlZ3VudGEsIFByZWd1bnRhQ29uT3BjaW9uZXMsIFByZWd1bnRhU2ltcGxlLCBcclxuICAgIFJlc3B1ZXN0YXMsIFJlc3B1ZXN0YUxhc1VBLCBSZXNwdWVzdGFzUmFpeiwgVmFsb3IsIFRFTSwgSWRDYXJnYSwgQ2FyZ2EsIElkRmluLCBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgTW9kb0FsbWFjZW5hbWllbnRvLFxyXG4gICAgdG9QbGFpbkZvclBrLFxyXG4gICAgSWRDYXNpbGxlcm8sXHJcbiAgICBQcmVndW50YUNvblNpTm8sXHJcbiAgICBUZXh0bywgRXN0cnVjdHVyYSwgSW5mb3JtYWNpb25IZHIsIERhdG9zSGRyVWFQcGFsLCBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbywgUmVzdW1lbkVzdGFkbywgRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMsIElkT3BlcmF0aXZvLCBJZEVuYywgTGlicmUsIFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgaXRlcmF0b3IsIGVtcHR5XHJcbn0gZnJvbSBcIi4vdGlwb3NcIjtcclxuaW1wb3J0eyBcclxuICAgIGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLFxyXG4gICAgYWNjaW9uX2JvcnJhcl9mb3JtdWxhcmlvLFxyXG4gICAgY2FsY3VsYXJBY3R1YWxCRixcclxuICAgIGNhbGN1bGFyRGlzYWJsZWRCRixcclxuICAgIGNhbGN1bGFyUGVybWl0ZUJvcnJhckJGLFxyXG4gICAgY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEsXHJcbiAgICBnZXREYXRvc0J5UGFzcyxcclxuICAgIGdldEZvcm11bGFyaW9zRm9ySWRWaXZpZW5kYSxcclxuICAgIGdldE1haW5Gb3JtRm9yVml2aWVuZGEsXHJcbiAgICBpbnRlbnRhckJhY2t1cCxcclxuICAgIHNldENhbGN1bGFyVmFyaWFibGVzXHJcbn0gZnJvbSBcIi4vYnlwYXNzLWZvcm11bGFyaW9cIlxyXG5pbXBvcnQgeyBkbVRyYWVyRGF0b3NGb3JtdWxhcmlvLCBkaXNwYXRjaGVycywgXHJcbiAgICBnb3RvU2luY3Jvbml6YXIsXHJcbiAgICBnZXRDYWNoZVZlcnNpb24sXHJcbiAgICBnb3RvQ29uc2lzdGlyLFxyXG59IGZyb20gXCIuL3JlZHV4LWZvcm11bGFyaW9cIjtcclxuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IHVzZVNlbGVjdG9yLCB1c2VEaXNwYXRjaCB9IGZyb20gXCJyZWFjdC1yZWR1eFwiOyBcclxuaW1wb3J0IHsgc3RyaWN0IGFzIGxpa2VBciwgYmVpbmdBcnJheSB9IGZyb20gXCJsaWtlLWFyXCI7XHJcbmltcG9ydCB7c2xlZXAsIGNvYWxlc2NlfSBmcm9tIFwiYmVzdC1nbG9iYWxzXCI7XHJcbmltcG9ydCB7IHVuZXhwZWN0ZWQgfSBmcm9tIFwiY2FzdC1lcnJvclwiO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIEFwcEJhciwgQnV0dG9uR3JvdXAsIENpcmN1bGFyUHJvZ3Jlc3MsIENoZWNrYm94LCBcclxuICAgIERpYWxvZywgRGlhbG9nQWN0aW9ucywgRGlhbG9nQ29udGVudCwgRGlhbG9nQ29udGVudFRleHQsIFxyXG4gICAgRGlhbG9nVGl0bGUsIERpdmlkZXIsIEZhYiwgSWNvbkJ1dHRvbixcclxuICAgIE1lbnUsIE1lbnVJdGVtLCBQYXBlciwgUG9wb3ZlcixcclxuICAgIFRhYmxlLCBUYWJsZUJvZHksIFRhYmxlQ2VsbCwgVGFibGVIZWFkLCBUYWJsZVJvdywgVG9vbGJhclxyXG59IGZyb20gXCJAbWF0ZXJpYWwtdWkvY29yZVwiO1xyXG5pbXBvcnQgeyBFc3RhZG9WYXJpYWJsZSwgRm9ybVN0cnVjdHVyZVN0YXRlIH0gZnJvbSBcInJvdy12YWxpZGF0b3JcIjtcclxuaW1wb3J0IHsgQ1NTUHJvcGVydGllcyB9IGZyb20gXCJAbWF0ZXJpYWwtdWkvY29yZS9zdHlsZXMvd2l0aFN0eWxlc1wiO1xyXG5cclxuaW1wb3J0IHsgXHJcbiAgICByZWdpc3RyYXJFbGVtZW50bywgc2V0QXR0ckRpc3RpbnRvLCBzZXRWYWxvckRpc3RpbnRvLCBkaXNwYXRjaEJ5UGFzcywgXHJcbiAgICBnZXREaXJ0eSwgZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IsXHJcbiAgICBnZXRGdW5jaW9uSGFiaWxpdGFyLCBcclxuICAgIGdldEVzdHJ1Y3R1cmEsIFxyXG4gICAgZGVmT3BlcmF0aXZvLFxyXG4gICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyxcclxuICAgIG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSwgXHJcbiAgICBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8sXHJcbiAgICBhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSxcclxuICAgIGFjY2lvbl9pZF9wcmVndW50YSxcclxuICAgIGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8sXHJcbiAgICBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPLFxyXG4gICAgTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVNcclxufSBmcm9tIFwiLi9ieXBhc3MtZm9ybXVsYXJpb1wiXHJcblxyXG5pbXBvcnQge2h0bWwsIEh0bWxUYWd9IGZyb20gXCJqcy10by1odG1sXCI7XHJcblxyXG5mdW5jdGlvbiBicmVha2VhYmxlVGV4dCh0ZXh0OnN0cmluZ3xudWxsKTpzdHJpbmd8dW5kZWZpbmVkO1xyXG5mdW5jdGlvbiBicmVha2VhYmxlVGV4dCh0ZXh0OnN0cmluZ3xudWxsLCBkaWNjaW9uYXJpbz86e1tjbGF2ZTpzdHJpbmddOlJlYWN0LlJlYWN0Tm9kZX0pe1xyXG4gICAgaWYodHlwZW9mIHRleHQgIT0gXCJzdHJpbmdcIikgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcLy9nLFwiL1xcdTIwNjNcIikucmVwbGFjZSgvXFwvXFx1MjA2MyhcXHcpXFxiL2csJy8kMScpO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvX19fKi9nLCh0b2RvKT0+YFske3RvZG99XWApLnJlcGxhY2UoL1xcQFxcdytcXEAvZywodG9kbyk9PmBbJHt0b2RvfV1gKTtcclxuICAgIGlmKCFkaWNjaW9uYXJpbyB8fCB0cnVlKSByZXR1cm4gdGV4dDtcclxuICAgIC8qXHJcbiAgICByZXR1cm4gPHNwYW4+e3BhcnRlcy5tYXAoKHBhcnRlOnN0cmluZywgaTpudW1iZXIpID0+IDxzcGFuIHN0eWxlPXtpJTI9PTE/e3RleHREZWNvcmF0aW9uOlwidW5kZXJsaW5lXCJ9Ont9fT4ge3BhcnRlK1wiIFwifSA8L3NwYW4+KX08L3NwYW4+XHJcbiAgICAqL1xyXG59XHJcblxyXG5jb25zdCBWRVJfRE9NSU5JTyA9IGZhbHNlOyAvLyBlbCBlbmN1ZXN0YWRvciBubyBuZWNlc2l0YSB2ZXIgZWwgZG9taW5pbyBlbiBjYWRhIGVuY3Vlc3RhIHBvcnF1ZSBlbCBkb21pbmlvIGRlcGVuZGUgZGVsIMOhcmVhIHkgc2UgZGVkdWNlIGRlbCBwcmltZXIgZMOtZ2l0byBkZWwgbsO6bWVybyBkZSBlbmN1ZXN0YVxyXG4vLyBubyBwb25lciBWRVJfRE9NSU5JTyBlbiB0cnVlLCBjYW1iaWFyIHBvciB1bmEgdmFyaWFibGUgcXVlIHNlIGZpamUgc2kgZWwgRE0gZXN0w6EgZW4gbW9kbyBwcnVlYmEgbyBlbiBtb2RvIFwiZGlzZcOxbyBjb25jZXB0dWFsXCJcclxuXHJcbnZhciBkZWJlU2FsdGFyOmJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCk9PntcclxuICAgIC8qXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldjpLZXlib2FyZEV2ZW50KT0+e1xyXG4gICAgICAgIGRlYmVTYWx0YXIgPSBldi5rZXkgPT0gJ0VudGVyJyB8fCBldi5rZXlDb2RlID09IDEzO1xyXG4gICAgfSlcclxuICAgICovXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKT0+e1xyXG4gICAgICAgIGRlYmVTYWx0YXIgPSBmYWxzZTtcclxuICAgIH0pXHJcbn0pXHJcblxyXG4vLyAvKlxyXG5cclxudHlwZSBDb21tb25BdHRyaWJ1dGVzID0ge2NsYXNzTmFtZT86c3RyaW5nLHN0eWxlPzpDU1NQcm9wZXJ0aWVzLGlkPzpzdHJpbmcsIHRhYkluZGV4PzpudW1iZXJ9IC8vIENTU1Byb3BlcnRpZXNcclxudHlwZSBDb2xvclZhbHVlcyA9ICdwcmltYXJ5J3wnc2Vjb25kYXJ5J3wnZGVmYXVsdCd8J2luaGVyaXQnXHJcblxyXG5leHBvcnQgdHlwZSBMaWJyZURlc3BsaWVndWVUeXBlID0gKHByb3BzOntcclxuICAgIGtleTpzdHJpbmdcclxuICAgIGNhc2lsbGVybzpMaWJyZVxyXG4gICAgZm9ybXVsYXJpbzpGb3JtdWxhcmlvXHJcbiAgICBmb3JQazpGb3JQa1xyXG59KT0+SlNYLkVsZW1lbnQ7XHJcblxyXG52YXIgTGlicmVEZXNwbGllZ3VlOiBMaWJyZURlc3BsaWVndWVUeXBlXHJcblxyXG5jb25zdCBCdXR0b24gPSAoe3ZhcmlhbnQsIG9uQ2xpY2ssIGRpc2FibGVkLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCBjb2xvciwgc2l6ZSwgXHJcbiAgICAgICAgZGlzYWJsZUVsZXZhdGlvbiwgZGlzYWJsZUZvY3VzUmlwcGxlLCBkaXNhYmxlUmlwcGxlLCBcclxuICAgICAgICAuLi5vdGhlclxyXG4gICAgfTp7XHJcbiAgICB2YXJpYW50PzpzdHJpbmcsXHJcbiAgICBjb2xvcj86Q29sb3JWYWx1ZXMsXHJcbiAgICBvbkNsaWNrPzpSZWFjdC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MQnV0dG9uRWxlbWVudD4sIC8vICAoZXZlbnQ6TW91c2VFdmVudC8qIDxIVE1MQnV0dG9uRWxlbWVudCwgTW91c2VFdmVudD4qLyk9PnZvaWQsXHJcbiAgICBkaXNhYmxlZD86Ym9vbGVhblxyXG4gICAgY2hpbGRyZW46YW55LFxyXG4gICAgY2xhc3NOYW1lPzpzdHJpbmcsXHJcbiAgICBzaXplPzonc21hbGwnLFxyXG4gICAgZGlzYWJsZUVsZXZhdGlvbj86YW55LCBkaXNhYmxlRm9jdXNSaXBwbGU/OmFueSwgZGlzYWJsZVJpcHBsZT86YW55LFxyXG59ICYgQ29tbW9uQXR0cmlidXRlcyk9PjxidXR0b24gXHJcbiAgICB7Li4ub3RoZXJ9XHJcbiAgICBjbGFzc05hbWU9e2BidG4gYnRuJHt2YXJpYW50PT0nY29udGFpbmVkJz8nJzonLScrKHZhcmlhbnQ9PSdvdXRsaW5lZCc/J291dGxpbmUnOnZhcmlhbnQpfS0keyhjb2xvcj09J2RlZmF1bHQnIHx8IGNvbG9yPT0naW5oZXJpdCc/J3NlY29uZGFyeSc6Y29sb3I9PSdzZWNvbmRhcnknPydkYW5nZXInOmNvbG9yKXx8J3NlY29uZGFyeSd9ICR7Y2xhc3NOYW1lfHwnJ30gJHtzaXplPT0nc21hbGwnPydidG4tc20nOicnfWB9XHJcbiAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICBvbkNsaWNrPXtvbkNsaWNrfVxyXG4+e2NoaWxkcmVufTwvYnV0dG9uPjtcclxuXHJcbmNvbnN0IEJ1dHRvbjIgPSAoe3ZhcmlhbnQsIG9uQ2xpY2ssIGRpc2FibGVkLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCBjb2xvciwgc2l6ZSwgLi4ub3RoZXJ9OntcclxuICAgIHZhcmlhbnQ/OnN0cmluZyxcclxuICAgIGNvbG9yPzpDb2xvclZhbHVlcyxcclxuICAgIG9uQ2xpY2s/OigpPT52b2lkLFxyXG4gICAgZGlzYWJsZWQ/OmJvb2xlYW5cclxuICAgIGNoaWxkcmVuOmFueSxcclxuICAgIGNsYXNzTmFtZT86c3RyaW5nLFxyXG4gICAgc2l6ZT86J3NtYWxsJyxcclxuICAgICRhdHRycz86e31cclxufSAmIENvbW1vbkF0dHJpYnV0ZXMpPT57XHJcbiAgICBsZXQgYnV0dG9uID0gaHRtbC5idXR0b24oe1xyXG4gICAgICAgIC4uLm90aGVyLFxyXG4gICAgICAgIGNsYXNzOiBgYnRuIGJ0biR7dmFyaWFudD09J2NvbnRhaW5lZCc/Jyc6Jy0nKyh2YXJpYW50PT0nb3V0bGluZWQnPydvdXRsaW5lJzp2YXJpYW50KX0tJHsoY29sb3I9PSdkZWZhdWx0JyB8fCBjb2xvcj09J2luaGVyaXQnPydzZWNvbmRhcnknOmNvbG9yPT0nc2Vjb25kYXJ5Jz8nZGFuZ2VyJzpjb2xvcil8fCdzZWNvbmRhcnknfSAke2NsYXNzTmFtZXx8Jyd9ICR7c2l6ZT09J3NtYWxsJz8nYnRuLXNtJzonJ31gLFxyXG4gICAgICAgIGRpc2FibGVkLFxyXG4gICAgfSwgY2hpbGRyZW4pLmNyZWF0ZSgpO1xyXG4gICAgYnV0dG9uLm9ubW91c2V1cCA9IChfZXZlbnQpPT57XHJcbiAgICAgICAgb25DbGljaz8uKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYnV0dG9uXHJcbn1cclxuXHJcblxyXG5jb25zdCBUZXh0RmllbGQgPSAocHJvcHM6e1xyXG4gICAgaWQ6c3RyaW5nLFxyXG4gICAgZGlzYWJsZWQ/OmJvb2xlYW4sXHJcbiAgICBjbGFzc05hbWU/OnN0cmluZyxcclxuICAgIGF1dG9Gb2N1cz86Ym9vbGVhbixcclxuICAgIGZ1bGxXaWR0aDpib29sZWFuXHJcbiAgICBpbnB1dFByb3BzPzphbnksXHJcbiAgICB2YWx1ZT86YW55LFxyXG4gICAgdHlwZTphbnksXHJcbiAgICBsYWJlbD86c3RyaW5nLFxyXG4gICAgZXJyb3I/OmJvb2xlYW4sXHJcbiAgICBoZWxwZXJUZXh0PzpzdHJpbmcsXHJcbiAgICBtdWx0aWxpbmU/OmJvb2xlYW4sXHJcbiAgICBvbkNoYW5nZT86KGV2ZW50OmFueSk9PnZvaWQsXHJcbiAgICBvbkZvY3VzPzooZXZlbnQ6YW55KT0+dm9pZCxcclxuICAgIG9uQmx1cj86KGV2ZW50OmFueSwgdmFsb3I6YW55KT0+dm9pZCxcclxuICAgIC8vIG9uS2V5RG93bj86KGV2ZW50OktleWJvYXJkRXZlbnQpPT52b2lkIC8vIEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+XHJcbiAgICBvbktleURvd24/OlJlYWN0LktleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+XHJcbn0pPT48aW5wdXRcclxuICAgIGlkPXtwcm9wcy5pZH1cclxuICAgIGRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZH1cclxuICAgIGNsYXNzTmFtZT17cHJvcHMuY2xhc3NOYW1lfVxyXG4gICAgYXV0b0ZvY3VzPXtwcm9wcy5hdXRvRm9jdXN9XHJcbiAgICB2YWx1ZT17cHJvcHMudmFsdWV9IFxyXG4gICAgdHlwZT17cHJvcHMudHlwZX1cclxuICAgIG9uQ2hhbmdlPXtwcm9wcy5vbkNoYW5nZX1cclxuICAgIG9uRm9jdXM9e3Byb3BzLm9uRm9jdXN9XHJcbiAgICBvbkJsdXI9eyhldnQpPT5wcm9wcy5vbkJsdXI/LihldnQsIGV2dC50YXJnZXQudmFsdWUpfVxyXG4gICAgb25LZXlEb3duPXtwcm9wcy5vbktleURvd259XHJcbiAgICBwbGFjZWhvbGRlcj17cHJvcHMubGFiZWx9XHJcbi8+O1xyXG5cclxuY29uc3QgVHlwb2dyYXBoeSA9ICh7Y2hpbGRyZW4sIC4uLm90aGVyc306e1xyXG4gICAgY2hpbGRyZW46YW55LFxyXG4gICAgY29tcG9uZW50PzpzdHJpbmdcclxuICAgIHZhcmlhbnQ/OidoNidcclxufSZDb21tb25BdHRyaWJ1dGVzKT0+UmVhY3QuY3JlYXRlRWxlbWVudChvdGhlcnMudmFyaWFudHx8b3RoZXJzLmNvbXBvbmVudHx8J2Rpdicsb3RoZXJzLGNoaWxkcmVuKTtcclxuXHJcbmZ1bmN0aW9uIEdyaWQocHJvcHM6e1xyXG4gICAgY29udGFpbmVyPzpib29sZWFuLFxyXG4gICAgc3BhY2luZz86bnVtYmVyLFxyXG4gICAgaXRlbT86Ym9vbGVhbixcclxuICAgIHdyYXA/Oid3cmFwJ3wnbm93cmFwJyxcclxuICAgIGRpcmVjdGlvbj86J3Jvdyd8J2NvbHVtbidcclxuICAgIGFsaWduSXRlbXM/OidzdHJldGNoJyB8ICdmbGV4LXN0YXJ0JyB8ICdmbGV4LWVuZCcgfCAnY2VudGVyJyB8ICdiYXNlbGluZScsXHJcbiAgICBjaGlsZHJlbjphbnksXHJcbiAgICB4cz86bnVtYmVyLFxyXG4gICAgc20/Om51bWJlcixcclxufSZDb21tb25BdHRyaWJ1dGVzKXtcclxuICAgIHZhciB7Y29udGFpbmVyLCBpdGVtLCB3cmFwLCBkaXJlY3Rpb24sIGFsaWduSXRlbXMsIGNoaWxkcmVuLCBjbGFzc05hbWUsIHhzLCBzbSwgc3BhY2luZywgLi4ub3RoZXJ9ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPGRpdlxyXG4gICAgey4uLm90aGVyfVxyXG4gICAgY2xhc3NOYW1lPXtgJHtjbGFzc05hbWV8fCcnfSAke3hzIT1udWxsPydncmlkLXhzLScreHM6Jyd9ICR7c20hPW51bGw/J2dyaWQtc20tJytzbTonJ31gfVxyXG4gICAgc3R5bGU9e2NvbnRhaW5lcj97XHJcbiAgICAgICAgZGlzcGxheTonZmxleCcsXHJcbiAgICAgICAgZmxleFdyYXA6d3JhcCxcclxuICAgICAgICBmbGV4RGlyZWN0aW9uOmRpcmVjdGlvbixcclxuICAgICAgICBhbGlnbkl0ZW1zOmFsaWduSXRlbXMsXHJcbiAgICAgICAgbWFyZ2luOnNwYWNpbmchPW51bGw/c3BhY2luZyo4KydweCc6dW5kZWZpbmVkXHJcbiAgICB9OntcclxuICAgIH19XHJcbj57Y2hpbGRyZW59PC9kaXY+XHJcbn1cclxuXHJcbnZhciBwMTIgPSAncDEyJyBhcyBJZFZhcmlhYmxlO1xyXG52YXIgc3AyID0gJ3NwMicgYXMgSWRWYXJpYWJsZTtcclxudmFyIHNwMyA9ICdzcDMnIGFzIElkVmFyaWFibGU7XHJcbnZhciBzcDQgPSAnc3A0JyBhcyBJZFZhcmlhYmxlO1xyXG52YXIgc3A1ID0gJ3NwNScgYXMgSWRWYXJpYWJsZTtcclxuXHJcbnZhciBkaWNjaW9uYXJpbyA9IHt9XHJcblxyXG4vKlxyXG4vLyBjb25zdCB0YWtlRWxlbWVudE9yRGVmYXVsdDxLLCBUIGV4dGVuZHMgW0sgaW5dLCBEPigpXHJcbmZ1bmN0aW9uIGlzSW48ViwgVD4oazprZXlvZiBULCBvYmplY3Q6VCk6IG9iamVjdFtrXSBpcyBWe1xyXG4gICAgcmV0dXJuIHRydWVcclxufVxyXG4qL1xyXG5mdW5jdGlvbiB0YWtlRWxlbWVudE9yRGVmYXVsdDxWLEsgZXh0ZW5kcyBzdHJpbmcsS08gZXh0ZW5kcyBzdHJpbmc+KGs6Sywgb2JqZWN0OntbayBpbiBLT106Vn0sIGRlZmF1bHRWYWx1ZTpWKTpWe1xyXG4gICAgcmV0dXJuIGsgaW4gb2JqZWN0ID8gXHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBwb3IgYWxndW5hIHJhesOzbiBUUyBubyBxdWllcmUgZW50ZW5kZXIgcXVlIHNpIGsgZXN0w6EgZW4gb2JqZWN0LCBvYmplY3Rba10gZXhpc3RlXHJcbiAgICAgICAgb2JqZWN0W2tdIFxyXG4gICAgOiBkZWZhdWx0VmFsdWVcclxufVxyXG5cclxuZnVuY3Rpb24gRGVzcGxpZWd1ZUVuY2FiZXphZG8ocHJvcHM6e2Nhc2lsbGVybzpDYXNpbGxlcm9FbmNhYmV6YWJsZSwgbGVlcj86Ym9vbGVhbn0pe1xyXG4gICAgY29uc3QgZm9yUGtOdWxsPXt9IGFzIEZvclBrO1xyXG4gICAgcmV0dXJuIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e3Byb3BzLmNhc2lsbGVyb30gbGVlcj17cHJvcHMubGVlcn0gZm9yUGs9e2ZvclBrTnVsbH0vPjtcclxufVxyXG5cclxuZnVuY3Rpb24gc3ViaXJIYXN0YShlbGVtZW50bzpIVE1MRWxlbWVudHxudWxsLCBmdW46KGVsZW1lbnRvOkhUTUxFbGVtZW50KT0+Ym9vbGVhbik6SFRNTEVsZW1lbnR8bnVsbHtcclxuICAgIGlmKGVsZW1lbnRvID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgaWYoZnVuKGVsZW1lbnRvKSkgcmV0dXJuIGVsZW1lbnRvO1xyXG4gICAgcmV0dXJuIHN1YmlySGFzdGEoZWxlbWVudG8ucGFyZW50RWxlbWVudCwgZnVuKTtcclxufVxyXG5cclxudmFyIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhcjpIVE1MRWxlbWVudHxudWxsID0gbnVsbDtcclxuXHJcbmZ1bmN0aW9uIEJvdG9uQm9ycmFyKHtpZCwgdmFyaWFibGUsIGZvclBrLCB2YWxvck9wY2lvbn06e2lkOnN0cmluZywgdmFyaWFibGU6SWRWYXJpYWJsZSwgZm9yUGs6Rm9yUGssIHZhbG9yT3BjaW9uPzphbnl9KXtcclxuICAgIHZhciBoYW5kbGVDbGlja0JvcnJhcj0oKT0+e1xyXG4gICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7cmVzcHVlc3RhOm51bGwsIHZhcmlhYmxlOnZhcmlhYmxlLCBmb3JQazpmb3JQa30pXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYm90b24tYm9ycmFyXCI+XHJcbiAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICBpZD17aWR9XHJcbiAgICAgICAgICAgIG1pLXZhcmlhYmxlPXt2YXJpYWJsZX1cclxuICAgICAgICAgICAgdmFsb3Itb3BjaW9uPXt2YWxvck9wY2lvbn1cclxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm90b24tb3BjaW9uIGJvdG9uLW9wY2lvbi1ib3JyYXJcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja0JvcnJhcn1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxJQ09OLkRlbGV0ZUZvcmV2ZXIvPlxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFNhbHRvRGVzcGxpZWd1ZSh7Y2FzaWxsZXJvLHByZWZpam99OntjYXNpbGxlcm86UHJlZ3VudGF8T3BjaW9ufEZpbHRybywgcHJlZmlqbz86c3RyaW5nfSl7XHJcbiAgICByZXR1cm4gY2FzaWxsZXJvLnNhbHRvP1xyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFzZVwiPlxyXG4gICAgICAgICAgICB7cHJlZmlqbz88c3BhbiBjbGFzc05hbWU9XCJwcmVmaWpvXCI+e3ByZWZpam99IDwvc3Bhbj46bnVsbH1cclxuICAgICAgICAgICAgPElDT04uVHJlbmRpbmdGbGF0IC8+PHNwYW4+e2Nhc2lsbGVyby5zYWx0b308L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA6bnVsbFxyXG59XHJcblxyXG5mdW5jdGlvbiBPcGNpb25EZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86T3BjaW9uLCB2YWxvck9wY2lvbjpudW1iZXIsIHZhcmlhYmxlOklkVmFyaWFibGUsIGZvclBrOkZvclBrLCBsZWVyOmJvb2xlYW4sIGNvbkJvdG9uQm9ycmFyOmJvb2xlYW59KXtcclxuICAgIGNvbnN0IHtjYXNpbGxlcm99ID0gcHJvcHM7XHJcbiAgICB2YXIgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIHNhbHRvQXV0b21hdGljbyA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT5zdGF0ZS5vcGNpb25lcy5zYWx0b0F1dG9tYXRpY28pO1xyXG4gICAgdmFyIGhhbmRsZUNsaWNrOlJlYWN0Lk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxCdXR0b25FbGVtZW50PiA9IGFzeW5jIChldmVudCk9PntcclxuICAgICAgICB2YXIgY29udGFpbmVyID0gc3ViaXJIYXN0YShldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQsIGVsZW1lbnRvPT5lbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3ByZWd1bnRhJykgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdtdWx0aXBsZScpKSB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKSE7XHJcbiAgICAgICAgdmFyIHRpZW5lID0gY29udGFpbmVyLmdldEF0dHJpYnV0ZSgnZXN0b3ktYm9ycmFuZG8nKTtcclxuICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycsJ05PJyk7XHJcbiAgICAgICAgaWYoZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyKXtcclxuICAgICAgICAgICAgZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyLnNldEF0dHJpYnV0ZSgnZXN0b3ktYm9ycmFuZG8nLCdOTycpO1xyXG4gICAgICAgICAgICBlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIge3JlY2VudE1vZGlmaWVkLCBzaWd1aWVudGVWYXJpYWJsZX0gPSBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwge3Jlc3B1ZXN0YTpwcm9wcy52YWxvck9wY2lvbiwgdmFyaWFibGU6cHJvcHMudmFyaWFibGUsIGZvclBrOnByb3BzLmZvclBrfSk7XHJcbiAgICAgICAgaWYoIXJlY2VudE1vZGlmaWVkKXtcclxuICAgICAgICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnZXN0b3ktYm9ycmFuZG8nLHRpZW5lPT0nU0knPydOTyc6J1NJJyk7XHJcbiAgICAgICAgICAgIGlmKHRpZW5lIT0nU0knKXtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhcj1jb250YWluZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgaWYoc2lndWllbnRlVmFyaWFibGUgJiYgc2FsdG9BdXRvbWF0aWNvKXtcclxuICAgICAgICAgICAgICAgIHZhciBib3RvblN0eWxlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/LnN0eWxlO1xyXG4gICAgICAgICAgICAgICAgaWYoYm90b25TdHlsZSkgYm90b25TdHlsZS5jb2xvciA9ICdncmVlbic7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBzbGVlcCgxMDApO1xyXG4gICAgICAgICAgICAgICAgaWYoYm90b25TdHlsZSkgYm90b25TdHlsZS5jb2xvciA9ICdibHVlJztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKDEwMCk7XHJcbiAgICAgICAgICAgICAgICBpZihib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJ2dyZWVuJztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKDEwMCk7XHJcbiAgICAgICAgICAgICAgICBpZihib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJyc7XHJcbiAgICAgICAgICAgICAgICBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKHNpZ3VpZW50ZVZhcmlhYmxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gPEdyaWQgY2xhc3NOYW1lPVwib3BjaW9uXCI+IFxyXG4gICAgICAgIHtwcm9wcy5jb25Cb3RvbkJvcnJhcj88Qm90b25Cb3JyYXJcclxuICAgICAgICAgICAgaWQ9e2BvcGNpb24tdmFyLSR7cHJvcHMudmFyaWFibGV9LSR7cHJvcHMudmFsb3JPcGNpb259LWJvcnJhcmB9XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgdmFyaWFibGU9e3Byb3BzLnZhcmlhYmxlfVxyXG4gICAgICAgICAgICB2YWxvck9wY2lvbj17cHJvcHMudmFsb3JPcGNpb259XHJcbiAgICAgICAgICAgIC8+Om51bGx9XHJcbiAgICAgICAgPEJ1dHRvbiBcclxuICAgICAgICAgICAgaWQ9e2BvcGNpb24tdmFyLSR7cHJvcHMudmFyaWFibGV9LSR7cHJvcHMudmFsb3JPcGNpb259YH1cclxuICAgICAgICAgICAgbWktdmFyaWFibGU9e3Byb3BzLnZhcmlhYmxlfVxyXG4gICAgICAgICAgICB2YWxvci1vcGNpb249e3Byb3BzLnZhbG9yT3BjaW9ufVxyXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJib3Rvbi1vcGNpb24gYm90b24tb3BjaW9uLXNlbGVjY2lvblwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxyXG4gICAgICAgICAgICB0YWJJbmRleD17LTF9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8R3JpZCBjb250YWluZXIgd3JhcD1cIm5vd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgPEdyaWQgY2xhc3NOYW1lPVwiaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLnZlcl9pZCB8fCBjYXNpbGxlcm8uY2FzaWxsZXJvfVxyXG4gICAgICAgICAgICAgICAgPC9HcmlkPlxyXG4gICAgICAgICAgICAgICAgPEdyaWQgY2xhc3NOYW1lPVwib3BjaW9uLXRleHRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgZGViZS1sZWVyPXtjYXNpbGxlcm8ubGVlcj8nU0knOmNhc2lsbGVyby5sZWVyPT09ZmFsc2U/J05PJzpwcm9wcy5sZWVyPydTSSc6J05PJ30+e2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5ub21icmUpfTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLmFjbGFyYWNpb24/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGNsYXNzTmFtZT0nYWNsYXJhY2lvbic+e2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKX08L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgOm51bGx9XHJcbiAgICAgICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgICAgIDwvR3JpZD5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8U2FsdG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfS8+XHJcbiAgICA8L0dyaWQ+XHJcbn1cclxuaW50ZXJmYWNlIEljYXNpbGxlcm9Db25PcGNpb25lc3tcclxuICAgIHZhcl9uYW1lOklkVmFyaWFibGUsXHJcbiAgICBkZXNwbGllZ3VlQ29udGVuaWRvOid2ZXJ0aWNhbCd8J2hvcml6b250YWwnfG51bGwsXHJcbiAgICBjYXNpbGxlcm9zOk9wY2lvbltdXHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBTaU5vRGVzcGxpZWd1ZShwcm9wczp7Y2FzaWxsZXJvQ29uT3BjaW9uZXM6SWNhc2lsbGVyb0Nvbk9wY2lvbmVzLCBmb3JQazpGb3JQaywgZGVzcGxpZWd1ZUNvbnRlbmlkbzondmVydGljYWwnfCdob3Jpem9udGFsJ30pe1xyXG4gICAgcmV0dXJuIDxPcGNpb25lc0Rlc3BsaWVndWUgXHJcbiAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e3Byb3BzLmNhc2lsbGVyb0Nvbk9wY2lvbmVzfSBcclxuICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9IFxyXG4gICAgICAgIGxlZXI9e2ZhbHNlfVxyXG4gICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3Byb3BzLmRlc3BsaWVndWVDb250ZW5pZG99XHJcbiAgICAvPlxyXG59XHJcblxyXG5mdW5jdGlvbiByZWdpc3RyYWRvckRlVmFyaWFibGUocHJlZ3VudGE6UHJlZ3VudGF8T3BjaW9uTXVsdGlwbGV8Q29uanVudG9QcmVndW50YXMpe1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsIGZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIGVsZW1lbnRvOkhUTUxEaXZFbGVtZW50XHJcbiAgICApPT57XHJcbiAgICAgICAgdmFyIHZhbG9yQWN0dWFsID0gcHJlZ3VudGEudmFyX25hbWUgPT0gbnVsbCA/IG51bGwgOiByZXNwdWVzdGFzW3ByZWd1bnRhLnZhcl9uYW1lXTtcclxuICAgICAgICB2YXIgZmVlZGJhY2tSb3cgPSBmZWVkYmFja0Zvcm0uZmVlZGJhY2s7XHJcbiAgICAgICAgdmFyIGZlZWRiYWNrVmFyID0gcHJlZ3VudGEudmFyX25hbWUgPT0gbnVsbCA/IG51bGwgOiBmZWVkYmFja1Jvd1twcmVndW50YS52YXJfbmFtZV07XHJcbiAgICAgICAgdmFyIHRpZW5lVmFsb3I9dmFsb3JBY3R1YWwhPW51bGwgJiYgZmVlZGJhY2tWYXIhPW51bGw/KGZlZWRiYWNrVmFyLmNvblByb2JsZW1hPydpbnZhbGlkbyc6J3ZhbGlkbycpOidOTyc7XHJcbiAgICAgICAgdmFyIGVzdGFkbzpFc3RhZG9WYXJpYWJsZTsgXHJcbiAgICAgICAgaWYocHJlZ3VudGEudGlwb3Zhcil7XHJcbiAgICAgICAgICAgIGVzdGFkbz1mZWVkYmFja1Zhcj8uZXN0YWRvITtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdmFyIGZlZWRiYWNrTXVsdGkgPSBwcmVndW50YS5jYXNpbGxlcm9zLmZpbHRlcihjPT5jLnZhcl9uYW1lIT1udWxsKS5yZWR1Y2UoKHB2LCBvbSk9PntcclxuICAgICAgICAgICAgICAgIHZhciBmYj1mZWVkYmFja1Jvdz8uW29tLnZhcl9uYW1lIV0hXHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpZW5lQWN0dWFsOiBwdi50aWVuZUFjdHVhbCB8fCBmYi5lc3RhZG89PSdhY3R1YWwnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVzdGFTYWx0ZWFkYTogcHYuZXN0YVNhbHRlYWRhICYmIChmYi5lc3RhZG89PSdzYWx0ZWFkYScgfHwgZmIuZXN0YWRvPT0nZnVlcmFfZGVfZmx1am9fcG9yX3NhbHRvJylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwge3RpZW5lQWN0dWFsOmZhbHNlLCBlc3RhU2FsdGVhZGE6dHJ1ZX0pO1xyXG4gICAgICAgICAgICBlc3RhZG89ZmVlZGJhY2tNdWx0aS50aWVuZUFjdHVhbD8nYWN0dWFsJzpmZWVkYmFja011bHRpLmVzdGFTYWx0ZWFkYT8nc2FsdGVhZGEnOid0b2RhdmlhX25vJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG8sICdudWVzdHJvLXZhbGlkYXRvcicsIGVzdGFkbyk7XHJcbiAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGVsZW1lbnRvLCAndGllbmUtdmFsb3InLCB0aWVuZVZhbG9yKTtcclxuICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG8sICdlc3RhLWluaGFiaWxpdGFkYScsIGZlZWRiYWNrVmFyPy5pbmhhYmlsaXRhZGE/J1NJJzonTk8nKTtcclxuICAgICAgICBpZihwcmVndW50YS52YXJfbmFtZSl7XHJcbiAgICAgICAgICAgIHZhciBvcGNpb25lczpIVE1MQnV0dG9uRWxlbWVudFtdID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWxlbWVudG8ucXVlcnlTZWxlY3RvckFsbChgLmJvdG9uLW9wY2lvblttaS12YXJpYWJsZT1cIiR7cHJlZ3VudGEudmFyX25hbWV9XCJdYCksMCk7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50b09wY2lvbjpIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgICAgICAgICAgZm9yKGVsZW1lbnRvT3BjaW9uIG9mIG9wY2lvbmVzKXtcclxuICAgICAgICAgICAgICAgIHZhciB2YWxvck9wY2lvbiA9IGVsZW1lbnRvT3BjaW9uLmdldEF0dHJpYnV0ZSgndmFsb3Itb3BjaW9uJyk7XHJcbiAgICAgICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG9PcGNpb24sICdvcGNpb24tc2VsZWNjaW9uYWRhJywgdmFsb3JPcGNpb24gPT0gdmFsb3JBY3R1YWwgPyBcIlNJXCI6IFwiTk9cIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9zSW5wdXQ6SFRNTElucHV0RWxlbWVudFtdID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWxlbWVudG8ucXVlcnlTZWxlY3RvckFsbCgnLnZhcmlhYmxlJykpO1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9JbnB1dDpIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgICAgICAgICBmb3IoZWxlbWVudG9JbnB1dCBvZiBlbGVtZW50b3NJbnB1dCl7XHJcbiAgICAgICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGVsZW1lbnRvSW5wdXQsICd2YWx1ZScsIHZhbG9yQWN0dWFsID09IG51bGwgPyAnJyA6IHZhbG9yQWN0dWFsLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBib3Rvbk5zTmMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5zbmMtcHJlZ3VudGEtXCIrcHJlZ3VudGEudmFyX25hbWUpITtcclxuICAgICAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGJvdG9uTnNOYywgJ29wY2lvbi1zZWxlY2Npb25hZGEnLCB2YWxvckFjdHVhbCA9PSAocHJlZ3VudGEudmFsb3JfbnNfbmMgPz8gLTkpID8gXCJTSVwiIDogXCJOT1wiKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gT3BjaW9uTXVsdGlwbGVEZXNwbGllZ3VlKHByb3BzOntvcGNpb25NOk9wY2lvbk11bHRpcGxlLCBmb3JQazpGb3JQa30pe1xyXG4gICAgY29uc3Qge29wY2lvbk19ID0gcHJvcHM7XHJcbiAgICB2YXIgaWQgPSBgb3BjaW9uTS0ke29wY2lvbk0uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsIFxyXG4gICAgICAgIGRpcmVjdDp0cnVlLCBcclxuICAgICAgICBmdW46IHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShvcGNpb25NKVxyXG4gICAgfSlcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIFxyXG4gICAgICAgIGlkPXtpZH1cclxuICAgICAgICBjYXNpbGxlcm89e29wY2lvbk19XHJcbiAgICAgICAgZGVzcGxpZWd1ZUVuY2FiZXphZG89J2xhdGVyYWwnXHJcbiAgICA+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIFxyXG4gICAgICAgICAgICBjYXNpbGxlcm89e29wY2lvbk19IFxyXG4gICAgICAgICAgICB2ZXJJZEd1aW9uPXt0cnVlfSBcclxuICAgICAgICAgICAgbGVlcj17b3BjaW9uTS5sZWVyIT09ZmFsc2V9IFxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgLz5cclxuICAgICAgICA8U2lOb0Rlc3BsaWVndWUgXHJcbiAgICAgICAgICAgIGNhc2lsbGVyb0Nvbk9wY2lvbmVzPXtvcGNpb25NfSBcclxuICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICBkZXNwbGllZ3VlQ29udGVuaWRvPXtwcm9wcy5vcGNpb25NLmRlc3BsaWVndWVDb250ZW5pZG8/Pydob3Jpem9udGFsJ31cclxuICAgICAgICAvPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbnR5cGUgQ2FzaWxsZXJvRW5jYWJlemFibGUgPSBGb3JtdWxhcmlvfEJsb3F1ZXxGaWx0cm98Q29uanVudG9QcmVndW50YXN8UHJlZ3VudGF8T3BjaW9uTXVsdGlwbGV8UHJlZ3VudGFTaW1wbGV8Q29uc2lzdGVuY2lhfFRleHRvXHJcblxyXG5mdW5jdGlvbiBFbmNhYmV6YWRvRGVzcGxpZWd1ZShwcm9wczp7Y2FzaWxsZXJvOkNhc2lsbGVyb0VuY2FiZXphYmxlLCB2ZXJJZEd1aW9uPzpib29sZWFuLCBsZWVyPzpib29sZWFuLCBmb3JQazpGb3JQa30pe1xyXG4gICAgdmFyIHtjYXNpbGxlcm8sIGZvclBrfSA9IHByb3BzO1xyXG4gICAgdmFyIGNvbkNhbXBvT3BjaW9uZXMgPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+c3RhdGUub3BjaW9uZXMuY29uQ2FtcG9PcGNpb25lcylcclxuICAgIHZhciBoYW5kbGVDbGlja0JvcnJhcj0oKT0+e1xyXG4gICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7cmVzcHVlc3RhOm51bGwsIHZhcmlhYmxlOmNhc2lsbGVyby52YXJfbmFtZSBhcyBJZFZhcmlhYmxlLCBmb3JQazpmb3JQa30pXHJcbiAgICB9O1xyXG4gICAgdmFyIHZlcl9pZCA9IGNhc2lsbGVyby52ZXJfaWQgPz8gY2FzaWxsZXJvLmNhc2lsbGVybztcclxuICAgIC8vIEB0cy1pZ25vcmUgbm8gZXN0w6EgZW4gdG9kb3MgbG9zIGNhc2lsbGVyb3MgcGVybyBhY8OhIHBhcmEgZWwgZGVzcGxpZWd1ZSBkZSBtZXRhZGF0b3Mgbm8gaW1wb3J0YVxyXG4gICAgdmFyIGNhbGN1bGFkYSA9IGNhc2lsbGVyby5jYWxjdWxhZGE7XHJcbiAgICB2YXIgaWQgPSBgaWQtZGl2LSR7Y2FzaWxsZXJvLnZhcl9uYW1lfHxjYXNpbGxlcm8uY2FzaWxsZXJvfWA7XHJcbiAgICB2YXIgaWRBY2Npb25lcyA9IFwiYWNjaW9uZXMtXCIraWQ7XHJcbiAgICByZXR1cm4gPGRpdiBcclxuICAgICAgICBjbGFzc05hbWU9XCJlbmNhYmV6YWRvXCIgXHJcbiAgICAgICAgZGViZS1sZWVyPXtwcm9wcy5sZWVyPydTSSc6J05PJ30gXHJcbiAgICA+XHJcbiAgICAgICAgPGRpdiBpZD17aWR9IGNsYXNzTmFtZT1cImlkLWRpdlwiIHRpdGxlPXtgJHtjYXNpbGxlcm8uY2FzaWxsZXJvfSAtICR7Y2FzaWxsZXJvLnZhcl9uYW1lfWB9XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRBY2Npb25lcyk7XHJcbiAgICAgICAgICAgICAgICBkaXYhLnNldEF0dHJpYnV0ZShcImFjY2lvbi12aXNpYmxlXCIsICgxLU51bWJlcihkaXYhLmdldEF0dHJpYnV0ZShcImFjY2lvbi12aXNpYmxlXCIpKSkudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPLiBWZXIgcXXDqSBoYWNlbW9zIGN1YW5kbyBzZSB0b2NhIGVsIElEIGRlIGxhIHByZWd1dG5hXHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25faWRfcHJlZ3VudGEsIHtwcmVndW50YTogY2FzaWxsZXJvLmNhc2lsbGVybyBhcyBJZFByZWd1bnRhLCBmb3JQa30pO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpZFwiPlxyXG4gICAgICAgICAgICAgICAge3Zlcl9pZH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIHsoY2FzaWxsZXJvLnRpcG92YXI9PVwic2lfbm9cInx8Y2FzaWxsZXJvLnRpcG92YXI9PVwib3BjaW9uZXNcIik/PENhbXBvIGRpc2FibGVkPXtmYWxzZX0gcHJlZ3VudGE9e2Nhc2lsbGVyb30gZm9yUGs9e2ZvclBrfSBtaW5pPXt0cnVlfSBoaWRkZW49eyFjb25DYW1wb09wY2lvbmVzICYmICdxdWl0YXInfS8+Om51bGx9XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWNjaW9uZXMtcHJlZ3VudGFcIiBpZD17aWRBY2Npb25lc30gYWNjaW9uLXZpc2libGU9XCIwXCI+XHJcbiAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLnZhcl9uYW1lPzxkaXY+PEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIGlkPXtcImJvcnJhci1wcmVndW50YS1cIitjYXNpbGxlcm8udmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgbWktdmFyaWFibGU9e2Nhc2lsbGVyby52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvdG9uLXByZWd1bnRhLWJvcnJhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2tCb3JyYXJ9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uRGVsZXRlRm9yZXZlci8+XHJcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj48L2Rpdj46bnVsbH1cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8udmFyX25hbWU/KG5zX25jPT48ZGl2PjxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICBpZD17XCJuc25jLXByZWd1bnRhLVwiK2Nhc2lsbGVyby52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICBtaS12YXJpYWJsZT17Y2FzaWxsZXJvLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm90b24tcHJlZ3VudGEtbnNuY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHtyZXNwdWVzdGE6bnNfbmMsIHZhcmlhYmxlOmNhc2lsbGVyby52YXJfbmFtZSBhcyBJZFZhcmlhYmxlLCBmb3JQazpmb3JQa30pXHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICBOUy9OQ1xyXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+PC9kaXY+KShjYXNpbGxlcm8udmFsb3JfbnNfbmM/Py05KTpudWxsfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm5vbWJyZS1kaXZcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJub21icmVcIj57YnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLm5vbWJyZSl9PC9kaXY+XHJcbiAgICAgICAgICAgIHtjYXNpbGxlcm8uYWNsYXJhY2lvbj9cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWNsYXJhY2lvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8uc2FsdG8gJiYgY2FzaWxsZXJvLnRpcG9jPT0nRklMVFJPJz9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFNhbHRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gcHJlZmlqbz17YnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLmFjbGFyYWNpb24pfS8+XHJcbiAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha2VhYmxlVGV4dChjYXNpbGxlcm8uYWNsYXJhY2lvbilcclxuICAgICAgICAgICAgICAgICAgICB9ICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA6bnVsbH1cclxuICAgICAgICAgICAgPGRpdiBsb3MtbWV0YWRhdG9zPVwic2lcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGVsLW1ldGFkYXRvPVwidmFyaWFibGVcIj57Y2FzaWxsZXJvLnZhcl9uYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8udGlwb3ZhciAmJiBjYXNpbGxlcm8udGlwb3ZhciE9J29wY2lvbmVzJyAmJiBjYXNpbGxlcm8udGlwb3ZhciE9J3NpX25vJz9cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBlbC1tZXRhZGF0bz1cInRpcG92YXJcIj57Y2FzaWxsZXJvLnRpcG92YXJ9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgOm51bGx9XHJcbiAgICAgICAgICAgICAgICB7ICAgLy9AdHMtaWdub3JlIHVuYSBvcGNpw7NuIG3Dumx0aXBsZSBudW5jYSBsbyBhIGEgc2VyLCBubyB0aWVuZSBlbCBjYW1wbywgbm8gaW1wb3J0YVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby5vcHRhdGl2bz88c3BhbiBlbC1tZXRhZGF0bz1cIm9wdGF0aXZhXCI+b3B0YXRpdmE8L3NwYW4+Om51bGxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHtjYWxjdWxhZGE/PHNwYW4gZWwtbWV0YWRhdG89XCJjYWxjdWxhZGFcIj5jYWxjdWxhZGE8L3NwYW4+Om51bGx9XHJcbiAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLmRlc3BsaWVndWVPY3VsdGE/PHNwYW4gZWwtbWV0YWRhdG89XCJvY3VsdGFcIj5vY3VsdGE8L3NwYW4+Om51bGx9XHJcbiAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXI/PHNwYW4gZWwtbWV0YWRhdG89XCJleHByZXNpb25faGFiaWxpdGFyXCI+aGFiaWxpdGE6IHtjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcn08L3NwYW4+Om51bGx9XHJcbiAgICAgICAgICAgICAgICB7ICAgLy9AdHMtaWdub3JlIGFsdHVub3MgY2FzaWxsZXJvcyBubyB0aWVuZW4gZXNwZWNpYWwsIG5vIGltcG9ydGEsIGVzIHNvbG8gcGFyYSBwb25lciBsb3MgbWV0YWRhdG9zXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLmVzcGVjaWFsPy5hdXRvaW5nPzxzcGFuIGVsLW1ldGFkYXRvPVwiZXhwcmVzaW9uX2F1dG9pbmdcIj5hdXRvaW5nOiB7Y2FzaWxsZXJvLmVzcGVjaWFsPy5hdXRvaW5nfTwvc3Bhbj46bnVsbFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBEZXNwbGVnYXJDb25maXJtYXJCb3JyYXJSZXNwdWVzdGEocHJvcHM6e2ZvclBrOkZvclBrLCB2YXJpYWJsZUJvcnJhcjpJZFZhcmlhYmxlfSl7XHJcbiAgICB2YXIgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoISFwcm9wcy52YXJpYWJsZUJvcnJhcilcclxuICAgIHZhciBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCBoYW5kbGVDbG9zZSA9ICgpID0+IHtcclxuICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DT05GSVJNQVJfQk9SUkFSX1JFU1BVRVNUQSh7Zm9yUGs6cHJvcHMuZm9yUGssIHZhcmlhYmxlOm51bGx9KSk7XHJcbiAgICAgICAgc2V0T3BlbihmYWxzZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPFBvcG92ZXJcclxuICAgICAgICAgICAgaWQ9e1wicG9wb3Zlci1jb25maXJtYXJcIn1cclxuICAgICAgICAgICAgb3Blbj17b3Blbn1cclxuICAgICAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2V9XHJcbiAgICAgICAgICAgIGFuY2hvck9yaWdpbj17e1xyXG4gICAgICAgICAgICAgICAgdmVydGljYWw6ICdib3R0b20nLFxyXG4gICAgICAgICAgICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcicsXHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbj17e1xyXG4gICAgICAgICAgICAgICAgdmVydGljYWw6ICd0b3AnLFxyXG4gICAgICAgICAgICAgICAgaG9yaXpvbnRhbDogJ2xlZnQnLFxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgID4gICBcclxuICAgICAgICAgICAgPFR5cG9ncmFwaHk+TGEgcHJlZ3VudGEgdGllbmUgcmVnaXN0cmFkYSB1bmEgcmVzcHVlc3RhIHF1ZSBubyBmdWUgZGV0ZWN0YWRhIGNvbW8gZXJyw7NuZWE8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29uZmlybWEtYm90b25lc1wiPlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInNlY29uZGFyeVwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgaWYocHJvcHMudmFyaWFibGVCb3JyYXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwge2ZvclBrOnByb3BzLmZvclBrLCB2YXJpYWJsZTpwcm9wcy52YXJpYWJsZUJvcnJhciwgcmVzcHVlc3RhOm51bGx9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVDbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfX0+Ym9ycmFyIHJlc3B1ZXN0YTwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB2YXJpYW50PVwib3V0bGluZWRcIiBvbkNsaWNrPXtoYW5kbGVDbG9zZX0+dm9sdmVyIHNpbiBib3JyYXI8L0J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9Qb3BvdmVyPjtcclxufVxyXG5cclxuZnVuY3Rpb24gY2FsY3VsYXJOdWVzdHJhTG9uZ2l0dWQobG9uZ2l0dWQ6c3RyaW5nIHxudWxsKXtcclxuICAgIHJldHVybiBsb25naXR1ZDtcclxufVxyXG5cclxuZnVuY3Rpb24gZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShzaWd1aWVudGVWYXJpYWJsZTpJZFZhcmlhYmxlfElkRmluKXtcclxuICAgIGRlYmVTYWx0YXIgPSBmYWxzZTtcclxuICAgIHZhciB7dG9wLCBlbmZvY2FkbywgZWxlbWVudG9JbnB1dFZhcmlhYmxlfSA9IGNhbGN1bGFyRWxlbWVudG9FbmZvY2FkbyhzaWd1aWVudGVWYXJpYWJsZSk7XHJcbiAgICBpZih0b3AgIT0gbnVsbCAmJiB0b3A+MCAmJiAhZW5mb2NhZG8pe1xyXG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7dG9wLCBsZWZ0OjAsIGJlaGF2aW9yOidzbW9vdGgnfSk7XHJcbiAgICB9XHJcbiAgICBlbGVtZW50b0lucHV0VmFyaWFibGU/LmZvY3VzKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENhbXBvKHByb3BzOntkaXNhYmxlZDpib29sZWFuLCBwcmVndW50YTpQcmVndW50YVNpbXBsZXxQcmVndW50YUNvbk9wY2lvbmVzfFByZWd1bnRhQ29uU2lOb3xPcGNpb25NdWx0aXBsZSwgZm9yUGs6Rm9yUGssIG1pbmk/OmJvb2xlYW4sIGhpZGRlbj86Ym9vbGVhbnwncXVpdGFyJ30pe1xyXG4gICAgdmFyIHtwcmVndW50YSwgZGlzYWJsZWQsIG1pbmkgfSA9IHByb3BzO1xyXG4gICAgdmFyIHtzYWx0b0F1dG9tYXRpY28sIGNvbkNhbXBvT3BjaW9uZXN9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9PnN0YXRlLm9wY2lvbmVzKTtcclxuICAgIGNvbnN0IGxvbmdpdHVkID0gbWluaSA/IHByZWd1bnRhLmNhc2lsbGVyb3MucmVkdWNlKChhY3VtLCBvKT0+TWF0aC5tYXgoby5jYXNpbGxlcm8udG9TdHJpbmcoKS5sZW5ndGgsIGFjdW0pLCAwKSA6IFxyXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgbWluaSBlcyBwYXJhIGxvcyBvdHJvc1xyXG4gICAgICAgIHByZWd1bnRhLmxvbmdpdHVkO1xyXG4gICAgLy8gdmFyIFt2YWxvciwgc2V0VmFsb3JdID0gdXNlU3RhdGUocHJvcHMudmFsb3IpO1xyXG4gICAgdmFyIFtlZGl0YW5kbywgc2V0RWRpdGFuZG9dID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgLy8gdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIC8vICAgICBzZXRWYWxvcihwcm9wcy52YWxvcilcclxuICAgIC8vIH0sIFtwcm9wcy52YWxvcl0pO1xyXG4gICAgY29uc3QgaW5wdXRQcm9wcyA9IHtcclxuICAgICAgICBtYXhMZW5ndGg6IGxvbmdpdHVkLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IG9uQ2hhbmdlPShudWV2b1ZhbG9yOlZhbG9yfHR5cGVvZiBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPKT0+e1xyXG4gICAgICAgIHZhciB7c2lndWllbnRlVmFyaWFibGV9ID0gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHtmb3JQazpwcm9wcy5mb3JQaywgdmFyaWFibGU6cHJlZ3VudGEudmFyX25hbWUsIHJlc3B1ZXN0YTpudWV2b1ZhbG9yfSk7XHJcbiAgICAgICAgaWYoc2lndWllbnRlVmFyaWFibGUgJiYgZGViZVNhbHRhcil7XHJcbiAgICAgICAgICAgIGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUoc2lndWllbnRlVmFyaWFibGUpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB2YXIgbnVlc3RyYUxvbmdpdHVkID0gY2FsY3VsYXJOdWVzdHJhTG9uZ2l0dWQobG9uZ2l0dWQpXHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJjYW1wb1wiIG51ZXN0cmEtbG9uZ2l0dWQ9e251ZXN0cmFMb25naXR1ZH0gc3R5bGU9e3Byb3BzLmhpZGRlbj09J3F1aXRhcic/e2Rpc3BsYXk6J25vbmUnfTpwcm9wcy5oaWRkZW4/e3Zpc2liaWxpdHk6J2hpZGRlbid9OnVuZGVmaW5lZH0+XHJcbiAgICAgICAge21pbmk/bnVsbDo8Qm90b25Cb3JyYXJcclxuICAgICAgICAgICAgaWQ9e2Bib3JyYXItYWJpZXJ0YS0ke3ByZWd1bnRhLnZhcl9uYW1lfWB9XHJcbiAgICAgICAgICAgIHZhcmlhYmxlPXtwcmVndW50YS52YXJfbmFtZX1cclxuICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgIC8+fVxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW5wdXQtY2FtcG9cIj5cclxuICAgICAgICAgICAgPFRleHRGaWVsZCBcclxuICAgICAgICAgICAgICAgIGlkPXtgdmFyLSR7cHJlZ3VudGEudmFyX25hbWV9YH1cclxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInZhcmlhYmxlXCIgXHJcbiAgICAgICAgICAgICAgICAvL3Zhci1sZW5ndGg9e3ByZWd1bnRhLmxvbmdpdHVkfSBcclxuICAgICAgICAgICAgICAgIGZ1bGxXaWR0aD17dHJ1ZX1cclxuICAgICAgICAgICAgICAgIGlucHV0UHJvcHM9e2lucHV0UHJvcHN9XHJcbiAgICAgICAgICAgICAgICB0eXBlPXtwcmVndW50YS5kZXNwbGllZ3VlVGlwb0lucHV0Pz9hZGFwdGFyVGlwb1ZhckNhc2lsbGVybyhwcmVndW50YS50aXBvdmFyKX1cclxuICAgICAgICAgICAgICAgIG9uS2V5RG93bj17KGV2ZW50OlJlYWN0LktleWJvYXJkRXZlbnQpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVzRW50ZXIgPSAoZXZlbnQua2V5ID09ICdFbnRlcicgfHwgZXZlbnQua2V5Q29kZSA9PSAxMylcclxuICAgICAgICAgICAgICAgICAgICBkZWJlU2FsdGFyID0gZXNFbnRlciAmJiAoc2FsdG9BdXRvbWF0aWNvIHx8IGNvbkNhbXBvT3BjaW9uZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGVzRW50ZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC50YXJnZXQuYmx1cigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgIG9uRm9jdXM9eyhfZXZlbnQpPT5zZXRFZGl0YW5kbyh0cnVlKX1cclxuICAgICAgICAgICAgICAgIG9uQmx1cj17KGV2ZW50LCB2YWxvcik9PntcclxuICAgICAgICAgICAgICAgICAgICBpZihldmVudD8ucmVsYXRlZFRhcmdldD8uZ2V0QXR0cmlidXRlKCdib3Rvbi1jb25maXJtYXInKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlYmVTYWx0YXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZSh2YWxvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0RWRpdGFuZG8oZmFsc2UpXHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtkaXNhYmxlZCB8fCBtaW5pP251bGw6XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm90b24tY29uZmlybWFyLWNhbXBvXCI+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9e2VkaXRhbmRvP1wiY29udGFpbmVkXCI6J291dGxpbmVkJ30gc2l6ZT1cInNtYWxsXCIgY29sb3I9e2VkaXRhbmRvPydwcmltYXJ5JzonZGVmYXVsdCd9XHJcbiAgICAgICAgICAgICAgICAgICAgYm90b24tY29uZmlybWFyPXtwcmVndW50YS52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICB0YWJJbmRleD17LTF9XHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2UoTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRhbmRvKGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA+PElDT04uQ2hlY2svPjwvQnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuaW50ZXJmYWNlIEljYXNpbGxlcm9Db25PcGNpb25lc3tcclxuICAgIHZhcl9uYW1lOklkVmFyaWFibGUsXHJcbiAgICBjYXNpbGxlcm9zOk9wY2lvbltdXHJcbn1cclxuXHJcbmZ1bmN0aW9uIE9wY2lvbmVzRGVzcGxpZWd1ZShcclxuICAgIHtjYXNpbGxlcm9Db25PcGNpb25lcywgZm9yUGssICBsZWVyLCBkZXNwbGllZ3VlQ29udGVuaWRvfTpcclxuICAgIHtjYXNpbGxlcm9Db25PcGNpb25lczpJY2FzaWxsZXJvQ29uT3BjaW9uZXMsIGZvclBrOkZvclBrLCBsZWVyOmJvb2xlYW4sIGRlc3BsaWVndWVDb250ZW5pZG86J3ZlcnRpY2FsJ3wnaG9yaXpvbnRhbCd9XHJcbil7XHJcbiAgICBjb25zdCBkZXNwbGVnYXJPdHJvcyA9IChvcGNpb246T3BjaW9uLCBzb2xvUGFyYURlc3BsaWVndWU6J3ZlcnRpY2FsJ3wnaG9yaXpvbnRhbCd8bnVsbCkgPT4gb3BjaW9uLmNhc2lsbGVyb3MubWFwKChzdWJQcmVndW50YTpQcmVndW50YSk9PihcclxuICAgICAgICBzb2xvUGFyYURlc3BsaWVndWUgPT0gbnVsbCB8fCBzb2xvUGFyYURlc3BsaWVndWUgPT0gc3ViUHJlZ3VudGEuZGVzcGxpZWd1ZUNvbnRlbmlkbyA/XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvdHJvcy1lc3BlY2lmaWNhclwiIGtleT17c3ViUHJlZ3VudGEuaWRfY2FzaWxsZXJvfT5cclxuICAgICAgICAgICAgPFByZWd1bnRhRGVzcGxpZWd1ZSBcclxuICAgICAgICAgICAgICAgIHByZWd1bnRhPXtzdWJQcmVndW50YX0gXHJcbiAgICAgICAgICAgICAgICBmb3JQaz17Zm9yUGt9IFxyXG4gICAgICAgICAgICAgICAgZGVzcGxpZWd1ZUVuY2FiZXphZG89J3N1cGVyaW9yJ1xyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PjpudWxsXHJcbiAgICApKVxyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiY29udGVuaWRvXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwib3BjaW9uZXNcIiBkZXNwbGllZ3VlLWNvbnRlbmlkbz17ZGVzcGxpZWd1ZUNvbnRlbmlkbz8/J3ZlcnRpY2FsJ30+XHJcbiAgICAgICAgICAgIHtjYXNpbGxlcm9Db25PcGNpb25lcy5jYXNpbGxlcm9zLm1hcCgob3BjaW9uOk9wY2lvbiwgaTpudW1iZXIpPT5cclxuICAgICAgICAgICAgICAgIDxHcmlkIGtleT17b3BjaW9uLmlkX2Nhc2lsbGVyb30gaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIG9jdWx0YXItc2FsdGVhZGE9e29wY2lvbi5kZXNwbGllZ3VlT2N1bHRhPyhvcGNpb24uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz8nSU5IQUJJTElUQVInOidTSScpOidOTyd9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPE9wY2lvbkRlc3BsaWVndWUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVybz17b3BjaW9ufSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU9e2Nhc2lsbGVyb0Nvbk9wY2lvbmVzLnZhcl9uYW1lfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsb3JPcGNpb249e29wY2lvbi5jYXNpbGxlcm99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtmb3JQa30gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZXI9e2xlZXJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbkJvdG9uQm9ycmFyPXtpPT0wIHx8IGRlc3BsaWVndWVDb250ZW5pZG8hPSdob3Jpem9udGFsJ31cclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIHtkZXNwbGllZ3VlQ29udGVuaWRvPT0naG9yaXpvbnRhbCc/bnVsbDpkZXNwbGVnYXJPdHJvcyhvcGNpb24sbnVsbCl9XHJcbiAgICAgICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAge2Rlc3BsaWVndWVDb250ZW5pZG89PSdob3Jpem9udGFsJz9jYXNpbGxlcm9Db25PcGNpb25lcy5jYXNpbGxlcm9zLm1hcCgob3BjaW9uOk9wY2lvbik9PlxyXG4gICAgICAgICAgICBkZXNwbGVnYXJPdHJvcyhvcGNpb24sbnVsbClcclxuICAgICAgICApOm51bGx9XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuY29uc3Qgbm9tYnJlQ2FzaWxsZXJvPXtcclxuICAgIEY6ICdmb3JtdWxhcmlvJyxcclxuICAgIEI6ICdibG9xdWUnLFxyXG4gICAgUDogJ3ByZWd1bnRhJyxcclxuICAgIENQOiAnY29uanVudG9wcmVndW50YXMnLFxyXG4gICAgTzogJ29wY2lvbicsXHJcbiAgICBPTTogJ211bHRpcGxlJyxcclxuICAgIEZJTFRSTzogJ2ZpbHRybycsXHJcbiAgICBDT05TOiAnY29uc2lzdGVuY2lhJyxcclxuICAgIEJGOiAnYm90b25mb3JtdWxhcmlvJyxcclxuICAgIFRFWFRPOiAnYWNsYXJhY2lvbnN1cGVyaW9yJyxcclxufVxyXG5cclxuZnVuY3Rpb24gRGVzcGxlZ2FyQ2FzaWxsZXJvKHByb3BzOntcclxuICAgIGNhc2lsbGVybzpQcmVndW50YXxCbG9xdWV8RmlsdHJvfENvbmp1bnRvUHJlZ3VudGFzfEJvdG9uRm9ybXVsYXJpb3xDb25zaXN0ZW5jaWF8T3BjaW9uTXVsdGlwbGV8VGV4dG8sXHJcbiAgICBpZD86c3RyaW5nLFxyXG4gICAgc3R5bGU/OlJlYWN0LkNTU1Byb3BlcnRpZXMsXHJcbiAgICBkZXNwbGllZ3VlRW5jYWJlemFkbz86J2xhdGVyYWwnfCdzdXBlcmlvcidcclxuICAgIGNoaWxkcmVuOlJlYWN0LlJlYWN0Tm9kZXxSZWFjdC5SZWFjdE5vZGVbXSxcclxuICAgIFwib2N1bHRhci1zYWx0ZWFkYVwiPzonU0knfCdOTyd8J0lOSEFCSUxJVEFSJ3x1bmRlZmluZWRcclxufSl7XHJcbiAgICByZXR1cm4gPGRpdiBcclxuICAgICAgICBrZXk9e2Ake3Byb3BzLmNhc2lsbGVyby50aXBvY30tJHtwcm9wcy5pZHx8cHJvcHMuY2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gfVxyXG4gICAgICAgIGNsYXNzTmFtZT17YGNhc2lsbGVybyAke25vbWJyZUNhc2lsbGVyb1twcm9wcy5jYXNpbGxlcm8udGlwb2NdfWB9XHJcbiAgICAgICAgaWQ9e3Byb3BzLmlkfVxyXG4gICAgICAgIHN0eWxlPXtwcm9wcy5zdHlsZX1cclxuICAgICAgICBkZXNwbGllZ3VlLWVuY2FiZXphZG89e3Byb3BzLmNhc2lsbGVyby5kZXNwbGllZ3VlRW5jYWJlemFkbz8/cHJvcHMuZGVzcGxpZWd1ZUVuY2FiZXphZG8/PydzdXBlcmlvcid9XHJcbiAgICAgICAgb2N1bHRhci1zYWx0ZWFkYT17cHJvcHNbXCJvY3VsdGFyLXNhbHRlYWRhXCJdfVxyXG4gICAgPntwcm9wcy5jaGlsZHJlbn08L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gUHJlZ3VudGFEZXNwbGllZ3VlKHByb3BzOntcclxuICAgIHByZWd1bnRhOlByZWd1bnRhLCBcclxuICAgIGZvclBrOkZvclBrLCBcclxuICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvOidsYXRlcmFsJ3wnc3VwZXJpb3InXHJcbn0pe1xyXG4gICAgdmFyIHtwcmVndW50YX0gPSBwcm9wcztcclxuICAgIHZhciBkaXNwYXRjaD11c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIGVzdGFkbzpFc3RhZG9WYXJpYWJsZTtcclxuICAgIHZhciBpZCA9IGBwcmVndW50YS0ke3ByZWd1bnRhLmlkX2Nhc2lsbGVyb31gXHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsIFxyXG4gICAgICAgIGRpcmVjdDp0cnVlLCBcclxuICAgICAgICBmdW46IHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShwcmVndW50YSlcclxuICAgIH0pXHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVyb1xyXG4gICAgICAgIGlkPXtpZH1cclxuICAgICAgICBjYXNpbGxlcm89e3ByZWd1bnRhfVxyXG4gICAgICAgIG51ZXN0cm8tdGlwb3Zhcj17cHJlZ3VudGEudGlwb3Zhcnx8XCJtdWx0aXBsZVwifSBcclxuICAgICAgICBvY3VsdGFyLXNhbHRlYWRhPXtwcmVndW50YS5kZXNwbGllZ3VlT2N1bHRhPyhwcmVndW50YS5leHByZXNpb25faGFiaWxpdGFyX2pzPydJTkhBQklMSVRBUic6J1NJJyk6J05PJ31cclxuICAgICAgICBkZXNwbGllZ3VlRW5jYWJlemFkbz17cHJvcHMuZGVzcGxpZWd1ZUVuY2FiZXphZG99XHJcbiAgICA+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIFxyXG4gICAgICAgICAgICBjYXNpbGxlcm89e3ByZWd1bnRhfSBcclxuICAgICAgICAgICAgbGVlcj17cHJlZ3VudGEubGVlciE9PWZhbHNlfSAgXHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAvPlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGVuaWRvXCI+e1xyXG4gICAgICAgICAgICBwcmVndW50YS50aXBvdmFyPT1cInNpX25vXCI/PEdyaWQgY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPFNpTm9EZXNwbGllZ3VlIFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyb0Nvbk9wY2lvbmVzPXtwcmVndW50YX0gXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfSBcclxuICAgICAgICAgICAgICAgICAgICBkZXNwbGllZ3VlQ29udGVuaWRvPXtwcm9wcy5wcmVndW50YS5kZXNwbGllZ3VlQ29udGVuaWRvPz8ndmVydGljYWwnfVxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9HcmlkPjpcclxuICAgICAgICAgICAgcHJlZ3VudGEudGlwb3Zhcj09XCJvcGNpb25lc1wiID9cclxuICAgICAgICAgICAgICAgIDxPcGNpb25lc0Rlc3BsaWVndWUgXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e3ByZWd1bnRhfSBcclxuICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9IFxyXG4gICAgICAgICAgICAgICAgICAgIGxlZXI9eyEhcHJlZ3VudGEubGVlcn1cclxuICAgICAgICAgICAgICAgICAgICBkZXNwbGllZ3VlQ29udGVuaWRvPXtwcmVndW50YS5kZXNwbGllZ3VlQ29udGVuaWRvPz8ndmVydGljYWwnfVxyXG4gICAgICAgICAgICAgICAgLz46XHJcbiAgICAgICAgICAgIHByZWd1bnRhLnRpcG92YXI9PW51bGw/XHJcbiAgICAgICAgICAgICAgICAocHJlZ3VudGEuY2FzaWxsZXJvcyBhcyAoT3BjaW9uTXVsdGlwbGV8Q29uc2lzdGVuY2lhKVtdKS5tYXAoKG9wY2lvbk11bHRpcGxlKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgb3BjaW9uTXVsdGlwbGUudGlwb2M9PSdPTSc/ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8T3BjaW9uTXVsdGlwbGVEZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e29wY2lvbk11bHRpcGxlLmlkX2Nhc2lsbGVyb30gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNpb25NPXtvcGNpb25NdWx0aXBsZX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDogLy9sYXMgY29uc2lzdGVuY2lhcyBwdWVkZW4gc2VyIGhlcm1hbmFzIGRlIE9NXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxDb25zaXN0ZW5jaWFEZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e29wY2lvbk11bHRpcGxlLmlkX2Nhc2lsbGVyb31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVybz17b3BjaW9uTXVsdGlwbGV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+ICAgIFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICgocHJlZ3VudGFTaW1wbGU6UHJlZ3VudGFTaW1wbGUpPT5cclxuICAgICAgICAgICAgICAgIDxDYW1wb1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtwcmVndW50YVNpbXBsZS5jYWxjdWxhZGE/dHJ1ZTpmYWxzZX1cclxuICAgICAgICAgICAgICAgICAgICBwcmVndW50YT17cHJlZ3VudGFTaW1wbGV9XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgKShwcmVndW50YSlcclxuICAgICAgICB9PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwaWUtcHJlZ3VudGFcIj5cclxuICAgICAgICAgICAgPFNhbHRvRGVzcGxpZWd1ZSBcclxuICAgICAgICAgICAgICAgIGNhc2lsbGVybz17cHJlZ3VudGF9XHJcbiAgICAgICAgICAgICAgICBwcmVmaWpvPXtwcmVndW50YS50aXBvdmFyPT1cIm9wY2lvbmVzXCI/KFxyXG4gICAgICAgICAgICAgICAgICAgIHByZWd1bnRhLmNhc2lsbGVyb3Muc29tZShvcGNpb249Pm9wY2lvbi5zYWx0byk/XCJyZXN0byBkZSBsYXMgb3BjaW9uZXNcIjpcInRvZGFzIGxhcyBvcGNpb25lc1wiXHJcbiAgICAgICAgICAgICAgICApOlwiXCJ9XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxudmFyIGNhbGN1bGFyRGlzYWJsZWRCRkFncmVnYXJMaXN0byA9IChjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOkNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvfG51bGwsIGZvcm11bGFyaW86SWRGb3JtdWxhcmlvKT0+XHJcbiAgICAhIShjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW8pXHJcblxyXG5mdW5jdGlvbiBib3RvbmVzRGVsRm9ybXVsYXJpbyhyOlJlc3B1ZXN0YXMsIHVuaWRhZF9hbmFsaXNpczpJZFVuaWRhZEFuYWxpc2lzLCBlc3RydWN0dXJhOkVzdHJ1Y3R1cmEsIGZvclBrUGFkcmU6Rm9yUGssIGZlZWRiYWNrQWxsOntbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPn0pOkh0bWxUYWc8SFRNTERpdkVsZW1lbnQ+e1xyXG4gICAgdmFyIGZvcm1zVml2aWVuZGEgPSBnZXRGb3JtdWxhcmlvc0ZvcklkVml2aWVuZGEoZm9yUGtQYWRyZS52aXZpZW5kYSk7XHJcbiAgICB2YXIgdWFEZWYgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VuaWRhZF9hbmFsaXNpc107XHJcbiAgICB2YXIgYXJyYXlFc3RydWN0dXJhRm9ybXVsYXJpb3MgPSAobGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpKS5hcnJheSgpO1xyXG4gICAgdmFyIHggPSBsaWtlQXIodWFEZWYuaGlqYXMpLmZpbHRlcih1YUhpamE9PlxyXG4gICAgICAgICAgICBmb3Jtc1ZpdmllbmRhLmluY2x1ZGVzKFxyXG4gICAgICAgICAgICAgICAgYXJyYXlFc3RydWN0dXJhRm9ybXVsYXJpb3MuZmluZCgoaW5mb0Zvcm11bGFyaW8pPT5cclxuICAgICAgICAgICAgICAgICAgICBpbmZvRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YUhpamE/LnVuaWRhZF9hbmFsaXNpcylcclxuICAgICAgICAgICAgICAgID8uY2FzaWxsZXJvcy5pZF9jYXNpbGxlcm8gYXMgSWRGb3JtdWxhcmlvXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApLm1hcCh1YUhpamE9PihcclxuICAgICAgICB1YUhpamEgPT0gbnVsbCA/IG51bGwgOlxyXG4gICAgICAgIGh0bWwuZGl2KHtjbGFzczondWEtaGlqYXMnfSxbXHJcbiAgICAgICAgICAgIGh0bWwuZGl2KHVhSGlqYS51bmlkYWRfYW5hbGlzaXMpLFxyXG4gICAgICAgICAgICBodG1sLmRpdihcclxuICAgICAgICAgICAgICAgIGxpa2VBcihyW3VhSGlqYS51bmlkYWRfYW5hbGlzaXNdfHxbXSkubWFwKChyZXNwdWVzdGFzSGlqYSwgaSk9PntcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0gTnVtYmVyKGkpKzFcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZm9yUGtIaWphUGFyY2lhbCA9IHsuLi5mb3JQa1BhZHJlLCBbdWFIaWphLnBrX2FncmVnYWRhXTogbnVtfTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29uZmlnU29ydGVvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvP2VzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtQYWRyZS52aXZpZW5kYSEpXTpudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWwuZGl2KHtjbGFzczonbnVtZXJhZG9yLXVhJ30sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoe2NsYXNzOidib3RvbmVzLXVhJ30sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoe2NsYXNzOidudW1lcm8tdWEnfSxudW0udG9TdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5saWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZm9ybURlZj0+Zm9ybURlZi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YUhpamEudW5pZGFkX2FuYWxpc2lzIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKF9mb3JtRGVmLCBmb3JtdWxhcmlvKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JQayA9IHsuLi5mb3JQa0hpamFQYXJjaWFsLCBmb3JtdWxhcmlvfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmVlZGJhY2tGb3JtID0gZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKGZvclBrKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZlZWRiYWNrRm9ybSA/IGh0bWwuZGl2KHt9LFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHRtbC5idXR0b24oKHVhSGlqYSEpLnBrX2FncmVnYWRhK1wiIG9rOiBcIisoTnVtYmVyKGkpKzEpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90b25Gb3JtdWxhcmlvQ29uUmVzdW1lbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IHRydWUgfHwgY2FsY3VsYXJBY3R1YWxCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBudW0sIG51bGwsIGZvcm11bGFyaW8sIHIpLCAvL1JFVklTQVIgdHJ1ZSBwYXJhIHF1ZSBubyBzZSBncmlzZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86ZmFsc2UsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgbnVtLCBmb3JtdWxhcmlvLCByKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWRiYWNrRm9ybSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Rlc3BsaWVndWVPY3VsdGE6ZmFsc2UsIGV4cHJlc2lvbl9oYWJpbGl0YXJfanM6JycsIG5vbWJyZTpmb3JtdWxhcmlvLCBhY2xhcmFjaW9uOm51bGwsIHNhbHRvOmZvcm11bGFyaW99LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGtQYWRyZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYm90b24taXItcmVzdW1lbi1mb3JtdWxhcmlvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2Zvcm11bGFyaW9dLmNhc2lsbGVyb3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuYXJyYXkoKS5tYXAoeD0+eCA9PSBudWxsID8gbnVsbCA6IHgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAsYm90b25lc0RlbEZvcm11bGFyaW8ocmVzcHVlc3Rhc0hpamEsIHVhSGlqYS51bmlkYWRfYW5hbGlzaXMsIGVzdHJ1Y3R1cmEsIGZvclBrSGlqYVBhcmNpYWwsIGZlZWRiYWNrQWxsKVxyXG4gICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICB9KS5hcnJheSgpLm1hcCh4PT54ID09IG51bGwgPyBudWxsIDogeClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIF0pXHJcbiAgICApKS5hcnJheSgpLm1hcCh4PT54ID09IG51bGwgPyBudWxsIDogeCk7XHJcbiAgICByZXR1cm4gaHRtbC5kaXYoLyp7c3R5bGU6J2Rpc3BsYXk6ZmxleDsgZmxleC1kaXJlY3Rpb246cm93J30sKi94KTtcclxufVxyXG5cclxuZnVuY3Rpb24gVGV4dG9EZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86VGV4dG8sIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2Nhc2lsbGVybywgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanM/Z2V0RnVuY2lvbkhhYmlsaXRhcihjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyk6KCk9PnRydWU7XHJcbiAgICB2YXIge21vZG9EZXNwbGllZ3VlfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgdmFyIGlkID0gYHRleHRvLSR7Y2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe2lkLCBzdHlsZTonZGlzcGxheScsIGZ1bjoocjpSZXNwdWVzdGFzKT0+aGFiaWxpdGFkb3IocikgfHwgbW9kb0Rlc3BsaWVndWU9PSdtZXRhZGF0b3MnPydibG9jayc6J25vbmUnfSlcclxuICAgIHZhciBlc1Jlc3VtZW5Gb3JtdWxhcmlvID0gY2FzaWxsZXJvLmNhc2lsbGVybz09J1Jlc0ZvcicgYXMgSWRDYXNpbGxlcm87IC8vIFRPRE86IENhbWJpYSBlc3RvIHF1ZSBlc3TDoSBqYXJjb2RlYWRvLlxyXG4gICAgaWYoZXNSZXN1bWVuRm9ybXVsYXJpbyl7XHJcbiAgICAgICAgcmVnaXN0cmFyRWxlbWVudG8oe2lkLCBkaXJlY3Q6dHJ1ZSwgXHJcbiAgICAgICAgICAgIGZ1bjooXHJcbiAgICAgICAgICAgICAgICByOlJlc3B1ZXN0YXMsIFxyXG4gICAgICAgICAgICAgICAgX2ZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudG86SFRNTERpdkVsZW1lbnQsIFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tBbGw6e1tmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLFZhbG9yLCBJZEZpbj59LCBcclxuICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmE6RXN0cnVjdHVyYVxyXG4gICAgICAgICAgICApPT57XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50by5zdHlsZS5kaXNwbGF5PScnO1xyXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIGxhcyByZXNwdWVzdGFzIHNvbiByZXNwdWVzdGFzUmFpeiBwb3JxdWUgUmVzRm9yIGVzdMOhIGVuIGVsIGZvcm0gcHBhbFxyXG4gICAgICAgICAgICAgICAgaWYoclsncmVzdW1lbkVzdGFkbyddIGFzIFJlc3VtZW5Fc3RhZG8gPT0gJ3ZhY2lvJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8udGV4dENvbnRlbnQgPSBcInJlbGV2YW1pZW50byBzaW4gZW1wZXphclwiO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8udGV4dENvbnRlbnQgPSBcInJlbGV2YW1pZW50byBlbXBlemFkb1wiO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB7dW5pZGFkX2FuYWxpc2lzfSA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcztcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50by5pbm5lckhUTUw9XCJcIjtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50by5hcHBlbmRDaGlsZChib3RvbmVzRGVsRm9ybXVsYXJpbyhyLCB1bmlkYWRfYW5hbGlzaXMsIGVzdHJ1Y3R1cmEsIGZvclBrLCBmZWVkYmFja0FsbCkuY3JlYXRlKCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHZhciBpciA9IChkZWZCb3RvbjpEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyKT0+e1xyXG4gICAgICAgIC8vIHZhciBudWV2YUZvclBrPXsuLi5mb3JQaywgZm9ybXVsYXJpbzppZEZvcm11bGFyaW9EZXN0aW5vfTtcclxuICAgICAgICAvLyBudWV2YUZvclBrW251ZXZvQ2FtcG9Qa10gPSBkZWZCb3Rvbi5udW1cclxuICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oe2ZvclBrOmRlZkJvdG9uLmZvclBrLCBhcGlsYXJWdWVsdGE6dHJ1ZX0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIFxyXG4gICAgICAgIGlkPXtgJHtpZH0tZXh0ZXJub2B9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtjYXNpbGxlcm99XHJcbiAgICA+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfSBsZWVyPXtmYWxzZX0gZm9yUGs9e2ZvclBrfS8+XHJcbiAgICAgICAgPGRpdiBpZD17aWR9IHN0eWxlPXt7ZGlzcGxheTonbm9uZSd9fT48L2Rpdj5cclxuICAgICAgICB7ZXNSZXN1bWVuRm9ybXVsYXJpbz9cclxuICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cInNwZWNpYWwtYnV0dG9uXCIgaWQ9XCJib3Rvbi1pci1yZXN1bWVuLWZvcm11bGFyaW9cIiBzdHlsZT17e2Rpc3BsYXk6J25vbmUnfX1cclxuICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KT0+e1xyXG4gICAgICAgICAgICAgICAgaXIoSlNPTi5wYXJzZSgoZXZlbnQudGFyZ2V0ISBhcyB1bmtub3duIGFzIEhUTUxCdXR0b25FbGVtZW50KS5nZXRBdHRyaWJ1dGUoJ2RlZi1idXR0b24nKSEpKVxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgID5pciAoaW50ZXJubyk8L0J1dHRvbj5cclxuICAgICAgICA6bnVsbH1cclxuXHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxuZnVuY3Rpb24gRmlsdHJvRGVzcGxpZWd1ZShwcm9wczp7ZmlsdHJvOkZpbHRybywgZm9yUGs6Rm9yUGt9KXtcclxuICAgIHZhciB7ZmlsdHJvfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gY2FzaWxsZXJvPXtmaWx0cm99PlxyXG4gICAgICAgIDxEZXNwbGllZ3VlRW5jYWJlemFkbyBjYXNpbGxlcm89e2ZpbHRyb30vPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENvbnNpc3RlbmNpYURlc3BsaWVndWUocHJvcHM6e2Nhc2lsbGVybzpDb25zaXN0ZW5jaWEsIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2Nhc2lsbGVybywgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz9nZXRGdW5jaW9uSGFiaWxpdGFyKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzKTooKT0+dHJ1ZTtcclxuICAgIHZhciB7bW9kb0Rlc3BsaWVndWV9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICB2YXIgaWQgPSBgY29uc2lzdGVuY2lhLSR7Y2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe2lkLCBzdHlsZTonZGlzcGxheScsIGZ1bjoocjpSZXNwdWVzdGFzKT0+aGFiaWxpdGFkb3IocikgfHwgbW9kb0Rlc3BsaWVndWU9PSdtZXRhZGF0b3MnPydibG9jayc6J25vbmUnfSlcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIFxyXG4gICAgICAgIGlkPXtpZH1cclxuICAgICAgICBjYXNpbGxlcm89e2Nhc2lsbGVyb31cclxuICAgICAgICBzdHlsZT17e2Rpc3BsYXk6J25vbmUnfX1cclxuICAgID5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IGxlZXI9e2ZhbHNlfSBmb3JQaz17Zm9yUGt9Lz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG50eXBlIERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXI9XHJcbih7Zm9yUGs6Rm9yUGssIG51bTpudW1iZXIsIGFjdHVhbDpib29sZWFuLCBwcmV2aW86Ym9vbGVhbn0gfCBcclxue2ZvclBrOkZvclBrLCBudW06bnVtYmVyLCBhY3R1YWw6Ym9vbGVhbiwgcHJldmlvOmZhbHNlLCBlc0FncmVnYXI6dHJ1ZX0gfCBcclxue2ZvclBrOkZvclBrLCBudW06bnVtYmVyLCBhY3R1YWw6Ym9vbGVhbiwgcHJldmlvOmZhbHNlLCBlc0NvbmZpcm1hcjp0cnVlfSB8XHJcbntmb3JQazpGb3JQaywgbnVtOm51bWJlciwgYWN0dWFsOmJvb2xlYW4sIHByZXZpbzpmYWxzZSwgcGVybWl0ZUJvcnJhcjpib29sZWFufSB8XHJcbntmb3JQazpGb3JQaywgbnVtOmZhbHNlLCBhY3R1YWw6Ym9vbGVhbiwgcHJldmlvOnRydWUsIHVuaWNvOnRydWV9KVxyXG4mIHtlc0NvbmZpcm1hcj86dHJ1ZSwgZXNBZ3JlZ2FyPzp0cnVlLCBwZXJtaXRlQm9ycmFyPzpib29sZWFuLCBkaXNhYmxlZD86Ym9vbGVhbnx1bmRlZmluZWR9O1xyXG5cclxuXHJcbnZhciBib3RvbkZvcm11bGFyaW9Db25SZXN1bWVuID0gKFxyXG4gICAgZGVmQm90b246RGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpciwgXHJcbiAgICBmZWVkYmFja0Zvcm06Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIFxyXG4gICAgcmVzcHVlc3Rhc0F1bWVudGFkYXM6UmVzcHVlc3RhcyxcclxuICAgIGNhc2lsbGVybzp7ZGVzcGxpZWd1ZU9jdWx0YT86Ym9vbGVhbnxudWxsLCBleHByZXNpb25faGFiaWxpdGFyX2pzPzpzdHJpbmcsIGFjbGFyYWNpb246c3RyaW5nfG51bGwsIGV4cHJlc2lvbl9oYWJpbGl0YXI/OnN0cmluZywgbm9tYnJlPzpzdHJpbmcsIHNhbHRvOnN0cmluZ3xudWxsLCBlc3BlY2lhbD86YW55fSxcclxuICAgIGZvclBrUGFkcmU6IEZvclBrLFxyXG4gICAgaWRCdXR0b246c3RyaW5nLFxyXG4gICAgZm9ybXVsYXJpb0FBYnJpcjpGb3JtdWxhcmlvXHJcbik9PntcclxuICAgIHZhciBmb3JQazpGb3JQayA9IGRlZkJvdG9uLmZvclBrO1xyXG4gICAgdmFyIHN1Zmlqb0lkRWxlbWVudG8gPSB0b1BsYWluRm9yUGsoZm9yUGspKyhkZWZCb3Rvbi5lc0NvbmZpcm1hcj8nLWxpc3RvJzonJyk7XHJcbiAgICB2YXIgaWQgPSBgZGl2LWJvdG9uLWZvcm11bGFyaW8tJHtzdWZpam9JZEVsZW1lbnRvfWA7XHJcbiAgICB2YXIgZXN0YWRvID0gZmVlZGJhY2tGb3JtLnJlc3VtZW47XHJcbiAgICByZXR1cm4gaHRtbC5kaXYoe1xyXG4gICAgICAgIGlkLCBcclxuICAgICAgICBjbGFzczpcInNlY2Npb24tYm90b24tZm9ybXVsYXJpb1wiICwgXHJcbiAgICAgICAgJGF0dHJzOntcclxuICAgICAgICAgICAgXCJudWVzdHJvLXZhbGlkYXRvclwiOmRlZkJvdG9uLmFjdHVhbD8nYWN0dWFsJzpkZWZCb3Rvbi5wcmV2aW8/J3ZhbGlkYSc6J3RvZGF2aWFfbm8nLFxyXG4gICAgICAgICAgICBcIm9jdWx0YXItc2FsdGVhZGFcIjpjYXNpbGxlcm8uZGVzcGxpZWd1ZU9jdWx0YT8oY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanM/J0lOSEFCSUxJVEFSJzonU0knKTonTk8nLFxyXG4gICAgICAgICAgICBcInRpZW5lLXZhbG9yXCI6XCJOT1wiLFxyXG4gICAgICAgICAgICBcImRlZi1idXR0b25cIjpKU09OLnN0cmluZ2lmeShkZWZCb3RvbilcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgY2FzaWxsZXJvLmFjbGFyYWNpb24gfHwgaHRtbC5kaXYoe2NsYXNzOlwiYWNsYXJhY2lvblwifSwgW2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKT8/bnVsbF0pLFxyXG4gICAgICAgIGh0bWwuZGl2KFtcclxuICAgICAgICAgICAgQnV0dG9uMih7XHJcbiAgICAgICAgICAgICAgICAvLyBpZDpgdmFyLSR7aWRWYXJpYWJsZX1gLFxyXG4gICAgICAgICAgICAgICAgaWQ6YGJvdG9uLWZvcm11bGFyaW8tJHtzdWZpam9JZEVsZW1lbnRvfWAsIFxyXG4gICAgICAgICAgICAgICAgdmFyaWFudDpcIm91dGxpbmVkXCIsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGVmQm90b24uZGlzYWJsZWQsXHJcbiAgICAgICAgICAgICAgICBjb2xvcjpcImluaGVyaXRcIixcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6KCk9PntcclxuICAgICAgICAgICAgICAgICAgICBpZihkZWZCb3Rvbi5lc0NvbmZpcm1hcil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRlZkJvdG9uLm51bSAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLHtmb3JQazpmb3JQa1BhZHJlLCB2YXJpYWJsZTpjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhciBhcyBJZFZhcmlhYmxlLCByZXNwdWVzdGE6ZGVmQm90b24ubnVtIGFzIFZhbG9yfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkQnV0dG9uKSEgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2RlZi1idXR0b24nLCBKU09OLnN0cmluZ2lmeShkZWZCb3RvbikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgJGF0dHJzOntcclxuICAgICAgICAgICAgICAgICAgICBcInJlc3VtZW4tZXN0YWRvXCI6ZXN0YWRvIT0ndmFjaW8nP2VzdGFkbzogZGVmQm90b24uYWN0dWFsPydhY3R1YWwnOmRlZkJvdG9uLnByZXZpbz9lc3RhZG86J3RvZGF2aWFfbm8nLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLCBjaGlsZHJlbjpbXHJcbiAgICAgICAgICAgICAgICAgICAgKGRlZkJvdG9uLmVzQWdyZWdhcj8nYWdyZWdhcic6ZGVmQm90b24uZXNDb25maXJtYXI/J0xpc3RvJzpjYXNpbGxlcm8ubm9tYnJlICsgJyAnICsgKGRlZkJvdG9uLm51bXx8JycpKSxcclxuICAgICAgICAgICAgICAgICAgICBodG1sLnN2Zyh7Y2xhc3M6XCJNdWlTdmdJY29uLXJvb3RcIiwgZm9jdXNhYmxlOmZhbHNlLCB2aWV3Ym94OlwiMCAwIDI0IDI0XCIsIFwiYXJpYS1oaWRkZW5cIjpcInRydWVcIn0sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLnBhdGgoe2Q6KGRlZkJvdG9uLmVzQWdyZWdhcj9tYXRlcmlhbElvSWNvbnNTdmdQYXRoLkFkZDpkZWZCb3Rvbi5lc0NvbmZpcm1hcj9tYXRlcmlhbElvSWNvbnNTdmdQYXRoLkNoZWNrOmNhc2lsbGVyby5zYWx0bz9tYXRlcmlhbElvSWNvbnNTdmdQYXRoLkZvcndhcmQ6bWF0ZXJpYWxJb0ljb25zU3ZnUGF0aC5FeGl0VG9BcHApfSlcclxuICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKGRlZkJvdG9uLnBlcm1pdGVCb3JyYXI/XHJcbiAgICAgICAgICAgICAgICBCdXR0b24yKHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6XCJib3Rvbi1ib3JyYXItdWEtdmFjaWFcIixcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjpcImRlZmF1bHRcIixcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50Olwib3V0bGluZWRcIixcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5zdmcoe2NsYXNzOlwiTXVpU3ZnSWNvbi1yb290XCIsIGZvY3VzYWJsZTpmYWxzZSwgdmlld2JveDpcIjAgMCAyNCAyNFwiLCBcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCJ9LFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwucGF0aCh7ZDptYXRlcmlhbElvSWNvbnNTdmdQYXRoLkRlbGV0ZUZvcmV2ZXJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSwgXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljazooKT0+YWNjaW9uX2JvcnJhcl9mb3JtdWxhcmlvKHtmb3JQaywgZm9yUGtQYWRyZX0pfSlcclxuICAgICAgICAgICAgOm51bGwpLFxyXG4gICAgICAgICAgICAoZGVmQm90b24ubnVtICE9PSBmYWxzZSAmJiAhZGVmQm90b24uZXNBZ3JlZ2FyICYmICFkZWZCb3Rvbi5lc0NvbmZpcm1hcj9cclxuICAgICAgICAgICAgICAgIGh0bWwuc3BhbigoY2FzaWxsZXJvLmVzcGVjaWFsPy5jYW1wb3NSZXN1bWVuPz9bZGVmQm90b24ubnVtLnRvU3RyaW5nKCldKS5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgKGNhbXBvOnN0cmluZyk9PnJlc3B1ZXN0YXNBdW1lbnRhZGFzW2Zvcm11bGFyaW9BQWJyaXIudW5pZGFkX2FuYWxpc2lzXVtkZWZCb3Rvbi5udW0tMV1bY2FtcG8gYXMgSWRWYXJpYWJsZV1cclxuICAgICAgICAgICAgICAgICkuam9pbignLCAnKSApXHJcbiAgICAgICAgICAgIDpudWxsKVxyXG4gICAgICAgICAgICAvLyBodG1sLmRpdih7Y2xhc3M6J2lubGluZS1kaWFsb2cnLCAkYXR0cnM6e1wiaW5saW5lLWRpYWxvZy1vcGVuXCI6IGNvbmZpcm1hckZvcnphcklyID09IGRlZkJvdG9uLm51bT8ndmlzaWJsZSc6J2hpZGRlbid9fSxbICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgXSlcclxuICAgICAgICAvKlxyXG4gICAgICAgICAgICB7ZGVmQm90b24uZXNBZ3JlZ2FyPzw+IDxzcGFuPiAgPC9zcGFuPiA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICA+PElDT04uQ2hlY2svPjwvQnV0dG9uPjwvPjpudWxsfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgICovXHJcbiAgICBdKS5jcmVhdGUoKVxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gQm90b25Gb3JtdWxhcmlvRGVzcGxpZWd1ZShwcm9wczp7Y2FzaWxsZXJvOkJvdG9uRm9ybXVsYXJpbywgZm9ybXVsYXJpbzpGb3JtdWxhcmlvLCBmb3JQazpGb3JQa30pe1xyXG4gICAgdmFyIHtjYXNpbGxlcm8sIGZvclBrfSA9IHByb3BzO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanM/Z2V0RnVuY2lvbkhhYmlsaXRhcihjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyk6KCk9PnRydWU7XHJcbiAgICB2YXIge29wY2lvbmVzfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgLy92YXIgaWRGb3JtdWxhcmlvRGVzdGlubyA9ICdGOicrY2FzaWxsZXJvLnNhbHRvISBhcyBJZEZvcm11bGFyaW87ICAgLy9vcmlnaW5hbFxyXG4gICAgdmFyIGFybW9Ob21TYWx0bz1jYXNpbGxlcm8uc2FsdG8/LnN1YnN0cmluZygwLDIpPT0nRjonP2Nhc2lsbGVyby5zYWx0by5zbGljZSgyKTpjYXNpbGxlcm8uc2FsdG87XHJcbiAgICAvL2NvbnNvbGUubG9nKCdCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlIGFybW9Ob21TYWx0byAnICthcm1vTm9tU2FsdG8pO1xyXG4gICAgdmFyIGlkRm9ybXVsYXJpb0Rlc3Rpbm8gPSAnRjonK2FybW9Ob21TYWx0byEgYXMgSWRGb3JtdWxhcmlvO1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICB2YXIge2Zvcm11bGFyaW9BQWJyaXJ9ID0gdXNlU2VsZWN0b3IoKF9zdGF0ZTpDYXNvU3RhdGUpPT4oe1xyXG4gICAgICAgIGZvcm11bGFyaW9BQWJyaXI6ZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tpZEZvcm11bGFyaW9EZXN0aW5vXS5jYXNpbGxlcm9zLFxyXG4gICAgfSkpO1xyXG4gICAgdmFyIHN1Zmlqb0lkRWxlbWVudG8gPSB0b1BsYWluRm9yUGsoZm9yUGspO1xyXG4gICAgLypcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZDpgZGl2LWJvdG9uLWZvcm11bGFyaW8tJHtzdWZpam9JZEVsZW1lbnRvfWAsIFxyXG4gICAgICAgIGF0dHI6J2VzdGEtaW5oYWJpbGl0YWRhJywgXHJcbiAgICAgICAgLy8gZnVuOiAocjpSZXNwdWVzdGFzKT0+aGFiaWxpdGFkb3Iocik/J1NJJzonTk8nXHJcbiAgICAgICAgZnVuOiAoX3I6UmVzcHVlc3Rhcyk9PidOTydcclxuICAgIH0pO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG88SFRNTEJ1dHRvbkVsZW1lbnQ+KHtcclxuICAgICAgICBpZDpgYm90b24tZm9ybXVsYXJpby0ke3N1Zmlqb0lkRWxlbWVudG99YCwgXHJcbiAgICAgICAgcHJvcDonZGlzYWJsZWQnLCBcclxuICAgICAgICAvLyBmdW46IChyOlJlc3B1ZXN0YXMpPT4haGFiaWxpdGFkb3IocilcclxuICAgICAgICBmdW46IChfcjpSZXNwdWVzdGFzKT0+ZmFsc2VcclxuICAgIH0pO1xyXG4gICAgKi9cclxuICAgIHZhciBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgW2NvbmZpcm1hckZvcnphcklyLCBzZXRDb25maXJtYXJGb3J6YXJJcl0gPSB1c2VTdGF0ZTxEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyfGZhbHNlfG51bGw+KG51bGwpO1xyXG4gICAgdmFyIG11bHRpcGxlRm9ybXVsYXJpb3M9Zm9ybXVsYXJpb0FBYnJpci51bmlkYWRfYW5hbGlzaXMgIT0gcHJvcHMuZm9ybXVsYXJpby51bmlkYWRfYW5hbGlzaXM7XHJcbiAgICB2YXIgbnVldm9DYW1wb1BrID0gZGVmT3BlcmF0aXZvLmRlZlVBW2Zvcm11bGFyaW9BQWJyaXIudW5pZGFkX2FuYWxpc2lzXS5waztcclxuICAgLy8gdmFyIHZhcl9uYW1lPSckQi4nK2Nhc2lsbGVyby5zYWx0bzsgLy9vcmlnaW5hbFxyXG4gICAgdmFyIHZhcl9uYW1lPSckQi5GOicrYXJtb05vbVNhbHRvO1xyXG4gICAgdmFyIGlkU2VjY2lvbj1gc2VjY2lvbi1ib3Rvbi1mb3JtdWxhcmlvLSR7dmFyX25hbWV9YDtcclxuICAgIHZhciBpZEJ1dHRvbj1gc3BlY2lhbC1idXR0b24tJHtpZFNlY2Npb259YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvPEhUTUxEaXZFbGVtZW50Pih7XHJcbiAgICAgICAgaWQ6aWRTZWNjaW9uLCBcclxuICAgICAgICBkaXJlY3Q6dHJ1ZSxcclxuICAgICAgICBmdW46IChyZXNwdWVzdGFzQXVtZW50YWRhczpSZXNwdWVzdGFzLCBmZWVkYmFja1JvdzogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIGRpdjpIVE1MRGl2RWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrQWxsOntcclxuICAgICAgICAgICAgICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiAvLyByZXN1bHRhZG8gZGVsIHJvd1ZhbGlkYXRvciBwYXJhIGVzdGFkby5mb3JQa1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApPT57XHJcbiAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgIHZhciBsaXN0YURlQm90b25lc0FicmlyOkRlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXJbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAvLyB2YXIgZXNWYXJBY3R1YWwgPSBmZWVkYmFja1Jvdy5hY3R1YWwgPT0gJyRCLkY6JytjYXNpbGxlcm8uc2FsdG87ICAvL29yaWdpbmFsXHJcbiAgICAgICAgICAgICAgICB2YXIgZXNWYXJBY3R1YWwgPSBmZWVkYmFja1Jvdy5hY3R1YWwgID09ICckQi5GOicrYXJtb05vbVNhbHRvO1xyXG4gICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQm90b25Gb3JtdWxhcmlvRGVzcGxpZWd1ZSBlc1ZhckFjdHVhbCAnICtlc1ZhckFjdHVhbCAgKTtcclxuICAgICAgICAgICAgICAgIGlmKG11bHRpcGxlRm9ybXVsYXJpb3MgJiYgY2FzaWxsZXJvLnNhbHRvIT1udWxsKXtcclxuICAgICAgICAgICAgICAgICAgLy8gIGxldCBkZWZGb3JtdWxhcmlvOkluZm9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1snRjonK2Nhc2lsbGVyby5zYWx0byBhcyBJZEZvcm11bGFyaW9dOyAgICAgIC8vb3JpZ2luYWxcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGVmRm9ybXVsYXJpbzpJbmZvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbJ0Y6Jythcm1vTm9tU2FsdG8gYXMgSWRGb3JtdWxhcmlvXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGVmVUEgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW2RlZkZvcm11bGFyaW8uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMhXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29uanVudG8gPSByZXNwdWVzdGFzQXVtZW50YWRhc1tkZWZGb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzIV07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhbnRpZGFkRXNwZXJhZGEgPSByZXNwdWVzdGFzQXVtZW50YWRhc1tjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhciBhcyBJZFZhcmlhYmxlXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtQWN0dWFsOm51bWJlcnxudWxsID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgLy8gIHZhciBlc3RhZG9EZWxCb3RvbiA9IGZlZWRiYWNrUm93LmZlZWRiYWNrWyckQi5GOicrY2FzaWxsZXJvLnNhbHRvIGFzIElkVmFyaWFibGVdLmVzdGFkbyAgIC8vb3JpZ2luYWxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhciBlc3RhZG9EZWxCb3RvbiA9IGZlZWRiYWNrUm93LmZlZWRiYWNrWyckQi5GOicrYXJtb05vbVNhbHRvIGFzIElkVmFyaWFibGVdLmVzdGFkb1xyXG4gICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0JvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUgZXN0YWRvRGVsQm90b24gJyArZXN0YWRvRGVsQm90b24gICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbz9lc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrLnZpdmllbmRhKV06bnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RhRGVCb3RvbmVzQWJyaXIgPSBsaWtlQXIoY29uanVudG8pLm1hcCgoXywgaSk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG51bTpudW1iZXIgPSBudW1iZXJPclN0cmluZ0luY0lmQXJyYXkoaSwgY29uanVudG8pIGFzIG51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZvclBrPXsuLi5wcm9wcy5mb3JQaywgZm9ybXVsYXJpbzppZEZvcm11bGFyaW9EZXN0aW5vLCBbbnVldm9DYW1wb1BrXTpudW19O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmVlZGJhY2sgPSBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYobnVtQWN0dWFsID09IG51bGwgJiYgZmVlZGJhY2sucmVzdW1lbiA9PSBcInZhY2lvXCIgJiYgZXN0YWRvRGVsQm90b24gPT0ndmFsaWRhJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BY3R1YWwgPSBudW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZW46bnVsbCwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiBjYWxjdWxhckFjdHVhbEJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIG51bSwgbnVtQWN0dWFsLCBpZEZvcm11bGFyaW9EZXN0aW5vLCByZXNwdWVzdGFzQXVtZW50YWRhcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86IG51bUFjdHVhbCA9PSBudWxsLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pdGVCb3JyYXI6IGxpa2VBcihjb25qdW50bykuYXJyYXkoKS5sZW5ndGggPT0gTnVtYmVyKGkpICsgMSAmJiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkYmFjay5yZXN1bWVuID09ICd2YWNpbycgJiYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbyxpZEZvcm11bGFyaW9EZXN0aW5vKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgbnVtLCBpZEZvcm11bGFyaW9EZXN0aW5vLCByZXNwdWVzdGFzQXVtZW50YWRhcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pLmFycmF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoXCJwdWVkZSBhZ3JlZ2FyIC8vVE9ETyBWRVIgRVNUT1wiICYmIChjb25qdW50byBpbnN0YW5jZW9mIEFycmF5IHx8IGNvbmp1bnRvID09IG51bGwpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG51ZXZvVmFsb3JQaz0oY29uanVudG89PW51bGwgPyAwIDogY29uanVudG8ubGVuZ3RoKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JQaz17Li4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86aWRGb3JtdWxhcmlvRGVzdGlubywgW251ZXZvQ2FtcG9Qa106bnVldm9WYWxvclBrfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRlYmVBZ3JlZ2FyT2xpc3RvID0gbnVtQWN0dWFsID09IG51bGwgJiYgKGNhbnRpZGFkRXNwZXJhZGEgPT0gbnVsbCB8fCBjYW50aWRhZEVzcGVyYWRhICE9IChjb25qdW50byAhPW51bGwgJiYgY29uanVudG8ubGVuZ3RoKSkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoZXN0YWRvRGVsQm90b24gPT0ndmFsaWRhJyB8fCBlc1ZhckFjdHVhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RhRGVCb3RvbmVzQWJyaXIucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW06bnVldm9WYWxvclBrLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzQWdyZWdhcjp0cnVlLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDpkZWJlQWdyZWdhck9saXN0bywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86IGZhbHNlLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8oY29uZmlnU29ydGVvRm9ybXVsYXJpbyxpZEZvcm11bGFyaW9EZXN0aW5vKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bTpudWV2b1ZhbG9yUGsgLSAxLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzQ29uZmlybWFyOnRydWUsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOmRlYmVBZ3JlZ2FyT2xpc3RvICYmICghY2FzaWxsZXJvLmxvbmdpdHVkIHx8IG51ZXZvVmFsb3JQayA+IE51bWJlcihjYXNpbGxlcm8ubG9uZ2l0dWQpKSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86IGZhbHNlLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8oY29uZmlnU29ydGVvRm9ybXVsYXJpbyxpZEZvcm11bGFyaW9EZXN0aW5vKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZm9yUGs9ey4uLnByb3BzLmZvclBrLCBmb3JtdWxhcmlvOmlkRm9ybXVsYXJpb0Rlc3Rpbm99O1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RhRGVCb3RvbmVzQWJyaXIgPSBbe2ZvclBrLCBudW06ZmFsc2UsIHVuaWNvOnRydWUsIGFjdHVhbDplc1ZhckFjdHVhbCwgcHJldmlvOnRydWV9XVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHRvZG9zTG9zQm90b25lcyA9IGxpc3RhRGVCb3RvbmVzQWJyaXIubWFwKGRlZkJvdG9uPT5cclxuICAgICAgICAgICAgICAgICAgICBib3RvbkZvcm11bGFyaW9Db25SZXN1bWVuKGRlZkJvdG9uLCBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsoZGVmQm90b24uZm9yUGspXT8/e3Jlc3VtZW46J3ZhY2lvJ30sIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8sIHByb3BzLmZvclBrLCBpZEJ1dHRvbiwgZm9ybXVsYXJpb0FBYnJpclxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIHZhciBodG1sU2VjY2lvbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFNlY2Npb24pITtcclxuICAgICAgICAgICAgICAgIGh0bWxTZWNjaW9uLmlubmVySFRNTD1cIlwiO1xyXG4gICAgICAgICAgICAgICAgaHRtbFNlY2Npb24uYXBwZW5kQ2hpbGQoaHRtbC5kaXYodG9kb3NMb3NCb3RvbmVzKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIGVycm9yID0gdW5leHBlY3RlZChlcnIpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJlbnRyYSBhbCBjYXRjaFwiKVxyXG4gICAgICAgICAgICAgICAgZGl2LnRleHRDb250ZW50PSdlc3RvLCBGQUxMw4kgJytlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBpciA9IChkZWZCb3RvbjpEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyKT0+e1xyXG4gICAgICAgIGlmKCFjYXNpbGxlcm8uc2FsdG8pe1xyXG4gICAgICAgICAgICBvcGNpb25lcy5tb2RvRGlyZWN0bz9cclxuICAgICAgICAgICAgICAgIG51bGxcclxuICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuVk9MVkVSX0hEUih7fSkpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB2YXIgbnVldmFGb3JQaz17Li4uZm9yUGssIGZvcm11bGFyaW86aWRGb3JtdWxhcmlvRGVzdGlub307XHJcbiAgICAgICAgICAgIGlmKG11bHRpcGxlRm9ybXVsYXJpb3Mpe1xyXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBmb3JQayB5IHN1cyBjb21wb25lbnRlc1xyXG4gICAgICAgICAgICAgICAgbnVldmFGb3JQa1tudWV2b0NhbXBvUGtdID0gZGVmQm90b24ubnVtXHJcbiAgICAgICAgICAgICAgICBpZihkZWZCb3Rvbi5lc0FncmVnYXIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8se2ZvclBrOm51ZXZhRm9yUGt9KTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLHtmb3JQazpudWV2YUZvclBrfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ0FNQklBUl9GT1JNVUxBUklPKHtmb3JQazpudWV2YUZvclBrLCBhcGlsYXJWdWVsdGE6dHJ1ZX0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoY29uZmlybWFyRm9yemFySXIpe3NldENvbmZpcm1hckZvcnphcklyKGZhbHNlKX1cclxuICAgIH07XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBjYXNpbGxlcm89e2Nhc2lsbGVyb30+XHJcbiAgICAgICAgPGRpdiBpZD17aWRTZWNjaW9ufT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cInNwZWNpYWwtYnV0dG9uXCIgaWQ9e2lkQnV0dG9ufVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpPT57XHJcbiAgICAgICAgICAgICAgICBpcihKU09OLnBhcnNlKChldmVudC50YXJnZXQhIGFzIHVua25vd24gYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLmdldEF0dHJpYnV0ZSgnZGVmLWJ1dHRvbicpISkpXHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPmlyIChpbnRlcm5vKTwvQnV0dG9uPlxyXG4gICAgICAgIDxEaWFsb2cgXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIm51ZXN0cm8tZGlhbG9nb1wiXHJcbiAgICAgICAgICAgIG9wZW49eyEhY29uZmlybWFyRm9yemFySXJ9XHJcbiAgICAgICAgICAgIG9uQ2xvc2U9eygpPT5zZXRDb25maXJtYXJGb3J6YXJJcihudWxsKX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibnVlc3Ryby1kaWFsb2dvXCI+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5ObyBzZSBwdWVkZSBhdmFuemFyIGFsIHNpZ3VpZW50ZSBmb3JtdWxhcmlvLjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PlF1aXrDoXMgbm8gdGVybWluw7MgZGUgY29udGVzdGFyIGxhcyBwcmVndW50YXMgY29ycmVzcG9uZGllbnRlczwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PlF1aXrDoXMgbm8gY29ycmVzcG9uZGUgZW4gYmFzZSBhIGxhcyByZXNwdWVzdGFzIG9idGVuaWRhczwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJzZWNvbmRhcnlcIiBvbkNsaWNrPXsoKT0+Y29uZmlybWFyRm9yemFySXIgJiYgaXIoY29uZmlybWFyRm9yemFySXIpfT5mb3J6YXI8L0J1dHRvbj5cclxuICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB2YXJpYW50PVwiY29udGFpbmVkXCIgb25DbGljaz17KCk9PnNldENvbmZpcm1hckZvcnphcklyKG51bGwpfT5FbnRlbmRpZG88L0J1dHRvbj5cclxuICAgICAgICA8L0RpYWxvZz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBDYXNpbGxlcm9EZXNjb25vY2lkbyhwcm9wczp7Y2FzaWxsZXJvOkNhc2lsbGVyb0Jhc2UsIGZvclBrOkZvclBrfSl7XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBcclxuICAgICAgICBpZD17YGNhc2lsbGVyb2Rlc2Nvbm9jaWRvLSR7cHJvcHMuY2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gfVxyXG4gICAgICAgIGNhc2lsbGVybz17cHJvcHMuY2FzaWxsZXJvIGFzIEJsb3F1ZX1cclxuICAgICAgICBzdHlsZT17e2Rpc3BsYXk6J25vbmUnfX1cclxuICAgID5cclxuICAgICAgICA8VHlwb2dyYXBoeT5UaXBvIGRlIGNhc2lsbGVybyBubyBpbXBsZW1lbnRhZG86IFwie3Byb3BzLmNhc2lsbGVyby50aXBvY31cIiBwYXJhIFwie3Byb3BzLmNhc2lsbGVyby5jYXNpbGxlcm99XCI8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17cHJvcHMuY2FzaWxsZXJvIGFzIENhc2lsbGVyb0VuY2FiZXphYmxlfSBsZWVyPXtmYWxzZX0gZm9yUGs9e3Byb3BzLmZvclBrfS8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxuZnVuY3Rpb24gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQazpGb3JQayl7XHJcbiAgICByZXR1cm4gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9PntcclxuICAgICAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmb3JtdWxhcmlvOiBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MsXHJcbiAgICAgICAgICAgIG1vZG9EZXNwbGllZ3VlOiB0cnVlIHx8IHN0YXRlLm1vZG8uZGVtbz9zdGF0ZS5vcGNpb25lcy5tb2RvRGVzcGxpZWd1ZToncmVsZXZhbWllbnRvJyxcclxuICAgICAgICAgICAgbW9kbzogc3RhdGUubW9kbyxcclxuICAgICAgICAgICAgb3BjaW9uZXM6IHN0YXRlLm9wY2lvbmVzLFxyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbn1cclxuXHJcbmZ1bmN0aW9uIENvbmp1bnRvUHJlZ3VudGFzRGVzcGxpZWd1ZShwcm9wczp7Y2FzaWxsZXJvOkNvbmp1bnRvUHJlZ3VudGFzLCBmb3JtdWxhcmlvOkZvcm11bGFyaW8sIGZvclBrOkZvclBrfSl7XHJcbiAgICBsZXQge2Nhc2lsbGVybywgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIgaWQgPSBgY29uanVudG8tcHJlZ3VudGFzLSR7Y2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkLCBcclxuICAgICAgICBkaXJlY3Q6dHJ1ZSwgXHJcbiAgICAgICAgZnVuOiByZWdpc3RyYWRvckRlVmFyaWFibGUoY2FzaWxsZXJvKVxyXG4gICAgfSlcclxuICAgIGxldCBtb2RvRGVzcGxpZWd1ZSA9IFwibm9ybWFsXCI7XHJcbiAgICBsZXQgaGFiaWxpdGFkbyA9IHRydWU7XHJcbiAgICByZXR1cm4gaGFiaWxpdGFkbyB8fCBtb2RvRGVzcGxpZWd1ZT09J21ldGFkYXRvcyc/PERlc3BsZWdhckNhc2lsbGVybyBpZD17aWR9IGNhc2lsbGVybz17Y2FzaWxsZXJvfT5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtmb3JQa30gbGVlcj17Y2FzaWxsZXJvLmxlZXIhPT1mYWxzZX0vPlxyXG4gICAgICAgIDxEZXNwbGVnYXJDb250ZW5pZG9JbnRlcm5vQmxvcXVlT0Zvcm11bGFyaW8gYmxvcXVlT0Zvcm11bGFyaW89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e2ZvclBrfSBtdWx0aXBsZT17ZmFsc2V9Lz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPjpudWxsO1xyXG59XHJcblxyXG5mdW5jdGlvbiBEZXNwbGVnYXJDb250ZW5pZG9JbnRlcm5vQmxvcXVlT0Zvcm11bGFyaW8ocHJvcHM6e2Jsb3F1ZU9Gb3JtdWxhcmlvOkJsb3F1ZXxGb3JtdWxhcmlvfENvbmp1bnRvUHJlZ3VudGFzLCBmb3JtdWxhcmlvOkZvcm11bGFyaW8sIGZvclBrOkZvclBrLCBtdWx0aXBsZTpib29sZWFufSl7XHJcbiAgICB2YXIgcGFyY2lhbGl6YWJsZSA9IHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jPT0nRic7XHJcbiAgICBjb25zdCBbdmVyVG9kbywgc2V0VmVyVG9kb10gPSB1c2VTdGF0ZSghcGFyY2lhbGl6YWJsZSk7XHJcbiAgICBjb25zdCBbZm9yUGtBY3R1YWwsIHNldEZvclBrQWN0dWFsXSA9IHVzZVN0YXRlPElkQ2FzaWxsZXJvfG51bGw+KG51bGwpO1xyXG4gICAgaWYocGFyY2lhbGl6YWJsZSl7XHJcbiAgICAgICAgaWYoZm9yUGtBY3R1YWwgIT0gcHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8uY2FzaWxsZXJvKXtcclxuICAgICAgICAgICAgc2V0VmVyVG9kbyhmYWxzZSlcclxuICAgICAgICAgICAgc2V0Rm9yUGtBY3R1YWwocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8uY2FzaWxsZXJvKVxyXG4gICAgICAgIH1cclxuICAgICAgICB1c2VFZmZlY3QoKCk9PntcclxuICAgICAgICAgICAgdmFyIHRpbWVyID0gc2V0VGltZW91dCgoKT0+e1xyXG4gICAgICAgICAgICAgICAgc2V0VmVyVG9kbyh0cnVlKTtcclxuICAgICAgICAgICAgfSwyNTApXHJcbiAgICAgICAgICAgIHJldHVybiAoKT0+e1xyXG4gICAgICAgICAgICAgICAgaWYodGltZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgY29uc3QgbGltaXRlTm9WZXJUb2RvID0gMztcclxuICAgIHVzZUVmZmVjdCgoKT0+e1xyXG4gICAgICAgIGlmKHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jPT0nRicpe1xyXG4gICAgICAgICAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKHByb3BzLmZvclBrKTtcclxuICAgICAgICB9XHJcbiAgICB9LFt0b1BsYWluRm9yUGsocHJvcHMuZm9yUGspLHZlclRvZG9dKVxyXG4gICAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZihwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby50aXBvYz09J0YnICYmIHZlclRvZG8pe1xyXG4gICAgICAgICAgICB2YXIge3NpZ3VpZW50ZVZhcmlhYmxlLCB2YXJpYWJsZUFjdHVhbH0gPSBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwge3Jlc3B1ZXN0YTpudWxsLCB2YXJpYWJsZTpOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUywgZm9yUGs6cHJvcHMuZm9yUGt9KTtcclxuICAgICAgICAgICAgaWYodmFyaWFibGVBY3R1YWwgfHwgc2lndWllbnRlVmFyaWFibGUpe1xyXG4gICAgICAgICAgICAgICAgZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShjb2FsZXNjZSh2YXJpYWJsZUFjdHVhbCBhcyBzdHJpbmd8bnVsbCxzaWd1aWVudGVWYXJpYWJsZSBhcyBzdHJpbmd8bnVsbCkgYXMgSWRWYXJpYWJsZSlcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcigpXHJcbiAgICAgICAgICAgICAgICBpZihmZWVkYmFja1Jvd1ZhbGlkYXRvclt0b1BsYWluRm9yUGsocHJvcHMuZm9yUGspXS5yZXN1bWVuPT0nb2snKXtcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb1RvcCgpXHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb1RvcCgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNvbnRlbmlkb1wiPlxyXG4gICAgICAgIHt2ZXJUb2RvP251bGw6PGRpdiBzdHlsZT17e2hlaWdodDpcIjUwMHB4XCIsIHRleHRBbGlnbjonY2VudGVyJywgdmVydGljYWxBbGlnbjonbWlkZGxlJywgd2lkdGg6JzEwMCUnLCBwb3NpdGlvbjpcImZpeGVkXCIsIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMTAwLDEwMCwxMDAsMC4zKScsIGZvbnRTaXplOicyMDAlJ319ID5jYXJnYW5kby4uLjwvZGl2Pn1cclxuICAgICAgICB7cHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8uY2FzaWxsZXJvcy5tYXAoKGNhc2lsbGVybywgaSk9PntcclxuICAgICAgICAgICAgdmFyIGtleSA9IGNhc2lsbGVyby50aXBvYysnLScrY2FzaWxsZXJvLmlkX2Nhc2lsbGVybysnLScraTtcclxuICAgICAgICAgICAgcmV0dXJuICh2ZXJUb2RvIHx8IGkgPCBsaW1pdGVOb1ZlclRvZG8/XHJcbiAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiUFwiPzxQcmVndW50YURlc3BsaWVndWUga2V5PXtrZXl9IHByZWd1bnRhPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30gZGVzcGxpZWd1ZUVuY2FiZXphZG89e2Nhc2lsbGVyby5kZXNwbGllZ3VlRW5jYWJlemFkbz8/KHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jPT0nQ1AnPydsYXRlcmFsJzonc3VwZXJpb3InKX0vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJCXCI/PEJsb3F1ZURlc3BsaWVndWUga2V5PXtrZXl9IGJsb3F1ZT17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiRklMVFJPXCI/PEZpbHRyb0Rlc3BsaWVndWUga2V5PXtrZXl9IGZpbHRybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiQkZcIj88Qm90b25Gb3JtdWxhcmlvRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJDT05TXCI/PENvbnNpc3RlbmNpYURlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiQ1BcIj88Q29uanVudG9QcmVndW50YXNEZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIlRFWFRPXCI/PFRleHRvRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJMSUJSRVwiPzxMaWJyZURlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgPENhc2lsbGVyb0Rlc2Nvbm9jaWRvIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIDppPT1saW1pdGVOb1ZlclRvZG8/XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGtleT0nJHNwaW5uZXInIGNsYXNzTmFtZT1cInNwaW5uZXItYm9yZGVyXCIgcm9sZT1cInN0YXR1c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPmNhcmdhbmRvIGJsb3F1ZS4uLjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA6bnVsbFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSlcclxuICAgIH08L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gQmxvcXVlRGVzcGxpZWd1ZShwcm9wczp7YmxvcXVlOkJsb3F1ZSwgZm9ybXVsYXJpbzpGb3JtdWxhcmlvLCBmb3JQazpGb3JQa30pe1xyXG4gICAgdmFyIHtibG9xdWUsIGZvclBrfSA9IHByb3BzO1xyXG4gICAgdmFyIGtleT1ibG9xdWUudmVyX2lkIT0nLScgJiYgYmxvcXVlLnZlcl9pZCB8fCBibG9xdWUuY2FzaWxsZXJvO1xyXG4gICAgdmFyIGFjdGl2ZVN0ZXA9MDtcclxuICAgIHZhciBtdWx0aXBsZSA9ICEhYmxvcXVlLnVuaWRhZF9hbmFsaXNpcztcclxuICAgIHZhciBsaXN0YSA9IFt7Zm9yUGssIGtleTowLCBtdWx0aXBsZTpmYWxzZX1dO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gYmxvcXVlLmV4cHJlc2lvbl9oYWJpbGl0YXJfanM/Z2V0RnVuY2lvbkhhYmlsaXRhcihibG9xdWUuZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyk6KCk9PnRydWU7XHJcbiAgICB2YXIge21vZG9EZXNwbGllZ3VlfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgaWYobXVsdGlwbGUpe1xyXG4gICAgICAgIC8vIFRPRE86IEdFTkVSQUxJWkFSXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBcclxuICAgICAgICAvLyBsaXN0YT1yZXNwdWVzdGFzLnBlcnNvbmFzLm1hcCgoX3BlcnNvbmEsIGkpPT4oXHJcbiAgICAgICAgLy8gICAgIHtmb3JQazp7Li4uZm9yUGssIHBlcnNvbmE6aSsxfSwga2V5OmkrMSwgbXVsdGlwbGU6dHJ1ZX1cclxuICAgICAgICAvLyApKVxyXG4gICAgfVxyXG4gICAgdmFyIGlkID0gYGJsb3F1ZS0ke2Jsb3F1ZS5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZCxcclxuICAgICAgICBzdHlsZTonZGlzcGxheScsXHJcbiAgICAgICAgZnVuOiAocmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+IGhhYmlsaXRhZG9yKHJlc3B1ZXN0YXMpIHx8IG1vZG9EZXNwbGllZ3VlPT0nbWV0YWRhdG9zJz8ndW5zZXQnOidub25lJ1xyXG4gICAgfSlcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIGNhc2lsbGVybz17YmxvcXVlfSBudWVzdHJvLWJsb3F1ZT17YmxvcXVlLmlkX2Nhc2lsbGVyb30gZXMtbXVsdGlwbGU9e211bHRpcGxlPydTSSc6J05PJ30gaWQ9e2lkfT5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtibG9xdWV9IGZvclBrPXtmb3JQa30vPlxyXG4gICAgICAgIHtsaXN0YS5tYXAoKHtrZXksIGZvclBrLCBtdWx0aXBsZX0pPT5cclxuICAgICAgICAgICAgPERlc3BsZWdhckNvbnRlbmlkb0ludGVybm9CbG9xdWVPRm9ybXVsYXJpbyBrZXk9e2tleX0gYmxvcXVlT0Zvcm11bGFyaW89e2Jsb3F1ZX0gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e2ZvclBrfSBtdWx0aXBsZT17bXVsdGlwbGV9Lz5cclxuICAgICAgICApfVxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+O1xyXG59XHJcblxyXG5jb25zdCBGb3JtdWxhcmlvRW5jYWJlemFkbyA9IERlc3BsaWVndWVFbmNhYmV6YWRvO1xyXG5cclxuZnVuY3Rpb24gTWVudUxldHJhKHByb3BzOnt0YW1hbm5pbzpudW1iZXIsIGRlbm9taW5hY2lvbjpzdHJpbmd9KXtcclxuICAgIGNvbnN0IGNhbWJpYXJMZXRyYSA9ICh0YW1hbm5pbzpudW1iZXIpPT57XHJcbiAgICAgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcbiAgICAgICAgcm9vdC5zdHlsZS5mb250U2l6ZT10YW1hbm5pbytcInB4XCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPE1lbnVJdGVtXHJcbiAgICAgICAgb25DbGljaz17KCk9PmNhbWJpYXJMZXRyYShwcm9wcy50YW1hbm5pbyl9IHN0eWxlPXt7Zm9udFNpemU6cHJvcHMudGFtYW5uaW8rJ3B4J319XHJcbiAgICA+bGV0cmEge3Byb3BzLmRlbm9taW5hY2lvbn08L01lbnVJdGVtPlxyXG59XHJcblxyXG5mdW5jdGlvbiBGYXN0U2V0dHVwKCl7XHJcbiAgICBjb25zdCBbYW5jaG9yRWwsIHNldEFuY2hvckVsXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoZXZlbnQ6YW55KSA9PiB7XHJcbiAgICAgICAgc2V0QW5jaG9yRWwoZXZlbnQuY3VycmVudFRhcmdldCk7XHJcbiAgICAgICAgc2V0T3BlbigocHJldikgPT4gIXByZXYpO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IGNhbWJpYXIgPSAobW9kb0Rlc3BsaWVndWU6TW9kb0Rlc3BsaWVndWUpPT57XHJcbiAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuTU9ET19ERVNQTElFR1VFKHttb2RvRGVzcGxpZWd1ZX0pKTtcclxuICAgICAgICBzZXRPcGVuKGZhbHNlKVxyXG4gICAgfVxyXG4gICAgY29uc3Qgb3BjaW9uZXMgPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+c3RhdGUub3BjaW9uZXMpXHJcbiAgICByZXR1cm4gPD5cclxuICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfT5cclxuICAgICAgICAgICAgPElDT04uU2V0dGluZ3MvPlxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgIDxNZW51IG9wZW49e29wZW59IGFuY2hvckVsPXthbmNob3JFbH0gb25DbG9zZT17KCk9PnNldE9wZW4oZmFsc2UpfT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtIG9uQ2xpY2s9eygpPT5jYW1iaWFyKFwicmVsZXZhbWllbnRvXCIpfT5ub3JtYWw8L01lbnVJdGVtPlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0gb25DbGljaz17KCk9PmNhbWJpYXIoXCJQREZcIiAgICAgICAgICl9PlBERiBwYXJhIHJlbGV2YW1pZW50bzwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbSBvbkNsaWNrPXsoKT0+Y2FtYmlhcihcIm1ldGFkYXRvc1wiICAgKX0+cmV2aXNhciBtZXRhZGF0b3M8L01lbnVJdGVtPlxyXG4gICAgICAgICAgICA8RGl2aWRlci8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezEyfSBkZW5vbWluYWNpb24gPSBcIm11eSBjaGljYVwiLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTR9IGRlbm9taW5hY2lvbiA9IFwiY2hpY2FcIi8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezE2fSBkZW5vbWluYWNpb24gPSBcIm5vcm1hbFwiLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTl9IGRlbm9taW5hY2lvbiA9IFwiZ3JhbmRlXCIvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsyMn0gZGVub21pbmFjaW9uID0gXCJlbm9ybWVcIi8+XHJcbiAgICAgICAgICAgIDxEaXZpZGVyLz5cclxuICAgICAgICAgICAgPE1lbnVJdGVtPjxsYWJlbD48Q2hlY2tib3ggY2hlY2tlZD17b3BjaW9uZXMuY29uQ2FtcG9PcGNpb25lc30gb25DaGFuZ2U9e1xyXG4gICAgICAgICAgICAgICAgKCk9PmRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oe29wY2lvbjonY29uQ2FtcG9PcGNpb25lcycsIHZhbG9yOiFvcGNpb25lcy5jb25DYW1wb09wY2lvbmVzfSkpXHJcbiAgICAgICAgICAgIH0gaW5wdXRQcm9wcz17eyAnYXJpYS1sYWJlbCc6ICdwcmltYXJ5IGNoZWNrYm94JyB9fS8+Y2FtcG8gb3BjaW9uZXM8L2xhYmVsPjwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbT48bGFiZWw+PENoZWNrYm94IGNoZWNrZWQ9e29wY2lvbmVzLnNhbHRvQXV0b21hdGljb30gb25DaGFuZ2U9e1xyXG4gICAgICAgICAgICAgICAgKCk9PmRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oe29wY2lvbjonc2FsdG9BdXRvbWF0aWNvJywgdmFsb3I6IW9wY2lvbmVzLnNhbHRvQXV0b21hdGljb30pKVxyXG4gICAgICAgICAgICB9IGlucHV0UHJvcHM9e3sgJ2FyaWEtbGFiZWwnOiAncHJpbWFyeSBjaGVja2JveCcgfX0vPnNhbHRvIGF1dG9tw6F0aWNvPC9sYWJlbD48L01lbnVJdGVtPlxyXG4gICAgICAgIDwvTWVudT5cclxuICAgIDwvPjtcclxufVxyXG5cclxuZnVuY3Rpb24gQmFycmFEZU5hdmVnYWNpb24ocHJvcHM6e2ZvclBrOkZvclBrLCBzb2xvTGVjdHVyYTpib29sZWFuLCBtb2RvRGlyZWN0bzpib29sZWFufSl7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCBmb3JQayA9IHByb3BzLmZvclBrO1xyXG4gICAgY29uc3Qge29wY2lvbmVzfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgY29uc3QgW2NvbmZpcm1hQ2VycmFyLCBzZXRDb25maXJtYUNlcnJhcl0gPSB1c2VTdGF0ZTxib29sZWFufG51bGw+KGZhbHNlKTtcclxuICAgIHZhciBkb21pbmlvID0gZ2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltmb3JQay52aXZpZW5kYV0udGVtLmRvbWluaW87XHJcbiAgICB2YXIgY2VycmFyRGlyZWN0byA9IGFzeW5jIGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgcmVtb3ZlQ1NTQnlJZChCT09UU1RSQVBfNV8xXzNfU1JDKTtcclxuICAgICAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgICAgICBnb3RvQ29uc2lzdGlyKFxyXG4gICAgICAgICAgICBlc3RydWN0dXJhLm9wZXJhdGl2byBhcyBJZE9wZXJhdGl2byxcclxuICAgICAgICAgICAgZ2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltmb3JQay52aXZpZW5kYV0udGFyZWEudGFyZWEsXHJcbiAgICAgICAgICAgIGZvclBrLnZpdmllbmRhXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvL3ZhciBoYXNoPW5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uaGFzaD8ucmVwbGFjZSgvXlxcIy8sJycpLnNwbGl0KCcmYXV0b3Byb2NlZCcpWzBdKTtcclxuICAgICAgICAvLy8vaGFzaC5kZWxldGUoJ2F1dG9wcm9jZWQnKVxyXG4gICAgICAgIC8vY2xvc2UoKTtcclxuICAgICAgICAvL2xvY2F0aW9uLmhhc2g9aGFzaC50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgdmFyIGJvdG9uZXNGb3JtdWxhcmlvPVtdO1xyXG4gICAgaWYoIW9wY2lvbmVzLm1vZG9EaXJlY3RvKXtcclxuICAgICAgICBib3RvbmVzRm9ybXVsYXJpby5wdXNoKHtxdWU6ICdoZHInICAgICwgYWJyOidIZFInLCBsYWJlbDonaG9qYSBkZSBydXRhJywgcmV0cm9jZXNvOjB9KVxyXG4gICAgfVxyXG4gICAgb3BjaW9uZXMucGlsYUZvclBrLmZvckVhY2goKGZvclBrLGkpPT5cclxuICAgICAgICBib3RvbmVzRm9ybXVsYXJpby5wdXNoKHtxdWU6J3ZvbHZlcicsIGFicjpmb3JQay5mb3JtdWxhcmlvLnJlcGxhY2UoL15GOi8sJycpLCBsYWJlbDpmb3JQay5mb3JtdWxhcmlvLCByZXRyb2Nlc286b3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aC1pfSlcclxuICAgIClcclxuICAgIGJvdG9uZXNGb3JtdWxhcmlvLnB1c2goe3F1ZTonJywgYWJyOmZvclBrLmZvcm11bGFyaW8ucmVwbGFjZSgvXkY6LywnJyksIGxhYmVsOmZvclBrLmZvcm11bGFyaW8sIHJldHJvY2VzbzowfSk7XHJcbiAgICByZXR1cm4gPD5cclxuICAgICAgICA8QnV0dG9uR3JvdXAga2V5PVwiZm9ybXVsYXJpb3NcIiBjbGFzc05hbWU9XCJiYXJyYS1uYXZlZ2FjaW9uXCIgc29sby1sZWN0dXJhPXtwcm9wcy5zb2xvTGVjdHVyYT8nc2knOidubyd9ID5cclxuICAgICAgICAgICAge2JvdG9uZXNGb3JtdWxhcmlvLm1hcCgoYixpKT0+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIGNvbG9yPXtiLnF1ZT09Zm9yUGsuZm9ybXVsYXJpbz9cInByaW1hcnlcIjpcImluaGVyaXRcIn0gdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICBrZXk9e2Ake2l9LSR7Yi5xdWV9LSR7Yi5yZXRyb2Nlc299YH1cclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWIucXVlfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLnF1ZT09J2hkcic/ZGlzcGF0Y2hlcnMuVk9MVkVSX0hEUih7fSk6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVycy5WT0xWRVJfREVfRk9STVVMQVJJTyh7bWFnbml0dWRSZXRyb2Nlc286Yi5yZXRyb2Nlc299KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImFiclwiPntiLmFicn08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibGFiZWxcIj57Yi5sYWJlbH08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICA8L0J1dHRvbkdyb3VwPlxyXG4gICAgICAgIHtwcm9wcy5zb2xvTGVjdHVyYT88VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJzcGFuXCIgc3R5bGU9e3ttYXJnaW46JzAgMTBweCd9fT4gKFNvbG8gTGVjdHVyYSkgPC9UeXBvZ3JhcGh5PjpudWxsfVxyXG4gICAgICAgIHtwcm9wcy5tb2RvRGlyZWN0bz9cclxuICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgIDxCdXR0b25Hcm91cCBrZXk9XCJ2b2x2ZXJfeV9ncmFiYXJcIiBzdHlsZT17e21hcmdpbjonMCAwIDAgMzBweCd9fT5cclxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2FzeW5jICgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwcm9wcy5zb2xvTGVjdHVyYSB8fCAhZ2V0RGlydHkoKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VycmFyRGlyZWN0bygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlybWFDZXJyYXIodHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLkV4aXRUb0FwcC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPERpYWxvZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVuPXshIWNvbmZpcm1hQ2VycmFyfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2hhY2UgcXVlIG5vIHNlIGNpZXJyZSBlbCBtZW5zYWplXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xvc2U9eygpPT5zZXRDb25maXJtYUNlcnJhcihmYWxzZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cImFsZXJ0LWRpYWxvZy10aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJhbGVydC1kaWFsb2ctZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ1RpdGxlIGlkPVwiYWxlcnQtZGlhbG9nLXRpdGxlXCI+Q29uZmlybWUgY2llcnJlIGRlIGVuY3Vlc3RhPC9EaWFsb2dUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudFRleHQgaWQ9XCJhbGVydC1kaWFsb2ctZGVzY3JpcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFc3TDoSBwb3Igc2FsaXIgZGUgbGEgZW5jdWVzdGEsIHNlIHBlcmRlcsOhbiBsb3MgY2FtYmlvcyBubyBndWFyZGFkb3MuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJyYXJEaXJlY3RvKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInNlY29uZGFyeVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY2FydGFyIGNhbWJpb3MgeSBjZXJyYXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25maXJtYUNlcnJhcihmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51YXIgZWRpdGFuZG8gZW5jdWVzdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZz5cclxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMuc29sb0xlY3R1cmE/bnVsbDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e1wic2F2ZS1idXR0b25cIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RydWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXthc3luYyAoKT0+dHJ1ZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uU2F2ZS8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgIDwvPlxyXG4gICAgICAgIDpudWxsfVxyXG4gICAgICAgIDxUeXBvZ3JhcGh5IGNsYXNzTmFtZT1cIm1vc3RyYXItZm9yUGtcIiBjb21wb25lbnQ9XCJzcGFuXCIgc3R5bGU9e3ttYXJnaW46JzAgMTBweCd9fT4gXHJcbiAgICAgICAgICAgIHtWRVJfRE9NSU5JTz88ZGl2IGtleT17ZG9taW5pb30+PHNwYW4+ZG9taW5pbzwvc3Bhbj48c3Bhbj57ZG9taW5pb308L3NwYW4+PC9kaXY+OicnfVxyXG4gICAgICAgICAgICB7bGlrZUFyKHByb3BzLmZvclBrKS5maWx0ZXIoKF8sayk9PmshPSdmb3JtdWxhcmlvJykubWFwKCh2LGspPT5cclxuICAgICAgICAgICAgICAgIDxkaXYga2V5PXtrfT48c3Bhbj57a308L3NwYW4+PHNwYW4+e3Z9PC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICApLmFycmF5KCl9IFxyXG4gICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICA8RmFzdFNldHR1cC8+XHJcbiAgICA8Lz5cclxufVxyXG5cclxuZnVuY3Rpb24gQm90b25Wb2x2ZXJFbkRpdih7aWR9OntpZDpzdHJpbmd9KXtcclxuICAgIHZhciB7b3BjaW9uZXN9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9Pih7b3BjaW9uZXM6c3RhdGUub3BjaW9uZXN9KSk7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJkaXYtYm90b24tdm9sdmVyXCI+XHJcbiAgICAgICAge29wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGg+MD9cclxuICAgICAgICA8QnV0dG9uIGlkPXtpZH0gY2xhc3NOYW1lPVwiYm90b24tdm9sdmVyXCJcclxuICAgICAgICAgICAgb25DbGljaz17KCk9PmRpc3BhdGNoKGRpc3BhdGNoZXJzLlZPTFZFUl9ERV9GT1JNVUxBUklPKHttYWduaXR1ZFJldHJvY2VzbzoxfSkpfVxyXG4gICAgICAgID4gPElDT04uQ2hldnJvbkxlZnQvPiBWb2x2ZXI8L0J1dHRvbj5cclxuICAgICAgICA6bnVsbH1cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBGb3JtdWxhcmlvRGVzcGxpZWd1ZShwcm9wczp7Zm9yUGs6Rm9yUGt9KXtcclxuICAgIHZhciBmb3JQayA9IHByb3BzLmZvclBrO1xyXG4gICAgdmFyIHtmb3JtdWxhcmlvLCBtb2RvRGVzcGxpZWd1ZSwgbW9kbywgb3BjaW9uZXN9IFxyXG4gICAgICAgID0gdXNlU2VsZWN0b3JWaXZpZW5kYShwcm9wcy5mb3JQayk7XHJcbiAgICB2YXIgc29sb0xlY3R1cmEgPSBnZXREYXRvc0J5UGFzcygpLnNvbG9MZWN0dXJhO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdXNlRWZmZWN0KCgpPT57XHJcbiAgICAgICAgdmFyIGNvbnRyb2xTY3JvbGw9KCk9PntcclxuICAgICAgICAgICAgdmFyIGFycmliYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFycmliYScpO1xyXG4gICAgICAgICAgICBpZihhcnJpYmEpe1xyXG4gICAgICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhhcnJpYmEuc3R5bGUsICd2aXNpYmlsaXR5JyxcclxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgYXJyaWJhLmVsVG9wVmlzaWJpbGl6YXIgIT1udWxsICYmIGFycmliYS5lbFRvcFZpc2liaWxpemFyICsgMTAgXHJcbiAgICAgICAgICAgICAgICAgICAgPCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGFiYWpvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYWJham8nKTtcclxuICAgICAgICAgICAgaWYoYWJham8pe1xyXG4gICAgICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhhYmFqby5zdHlsZSwgJ3Zpc2liaWxpdHknLCBcclxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgYWJham8uZWxCb3R0b21WaXNpYmlsaXphciAhPSBudWxsICYmIGFiYWpvLmVsQm90dG9tVmlzaWJpbGl6YXIgLSAyMFxyXG4gICAgICAgICAgICAgICAgICAgID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCArIHdpbmRvdy5pbm5lckhlaWdodCAqIDAuNyA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjb250cm9sU2Nyb2xsKTtcclxuICAgICAgICBjb250cm9sU2Nyb2xsKCk7XHJcbiAgICAgICAgcmV0dXJuICgpPT57XHJcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjb250cm9sU2Nyb2xsKTtcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG4gICAgLy8gVE9ETyBWb2x2ZXIgYSBwb25lciBlbCBtb3ZpbWllbnRvIGEgbGEgYWN0dWFsXHJcbiAgICB2YXIgYWN0dWFsOmFueVxyXG4gICAgdmFyIGNvbXBsZXRvOmFueVxyXG4gICAgdmFyIG9uQ2xpY2tTYWx0YXJBY3R1YWwgPSAoKT0+e1xyXG4gICAgICAgIHZhciB7dmFyaWFibGVBY3R1YWx9ID0gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHtyZXNwdWVzdGE6bnVsbCwgdmFyaWFibGU6Tk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMsIGZvclBrOnByb3BzLmZvclBrfSk7XHJcbiAgICAgICAgaWYodmFyaWFibGVBY3R1YWwpe1xyXG4gICAgICAgICAgICBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKHZhcmlhYmxlQWN0dWFsKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBsaXN0YU1vZG9zOk1vZG9EZXNwbGllZ3VlW109WydtZXRhZGF0b3MnLCdyZWxldmFtaWVudG8nLCdQREYnXTtcclxuICAgIFsnYm90b24tdm9sdmVyLTEnLCAnYm90b24tdm9sdmVyLTInXS5mb3JFYWNoKGlkPT57XHJcbiAgICAgICAgcmVnaXN0cmFyRWxlbWVudG8oe2lkLCBhdHRyOidyZXN1bWVuLWVzdGFkbycsIGZ1bjooXzpSZXNwdWVzdGFzLCBmZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+KT0+KFxyXG4gICAgICAgICAgICBmZWVkYmFja0Zvcm0ucmVzdW1lblxyXG4gICAgICAgICl9KVxyXG4gICAgfSlcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZXNwZWNpYWwgaGF5IHF1ZSBsZWVybG8gZW4gZWwgcGFyc2VyIGRlIGNhc2lsbGVyb3Mgc2kgZXN0byB0ZXJtaW5hIHF1ZWRhbmRvIGFzw61cclxuICAgIHZhciBwYW50YWxsYUNvbXBsZXRhID0gZm9ybXVsYXJpby5lc3BlY2lhbD8ucGFudGFsbGFDb21wbGV0YTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAgPEFwcEJhciBwb3NpdGlvbj1cImZpeGVkXCIgY29sb3I9e3NvbG9MZWN0dXJhPydzZWNvbmRhcnknOidwcmltYXJ5J30+XHJcbiAgICAgICAgICAgICAgICA8VG9vbGJhcj5cclxuICAgICAgICAgICAgICAgICAgICA8QmFycmFEZU5hdmVnYWNpb24gZm9yUGs9e2ZvclBrfSBzb2xvTGVjdHVyYT17c29sb0xlY3R1cmEgfHwgZmFsc2V9IG1vZG9EaXJlY3RvPXtvcGNpb25lcy5tb2RvRGlyZWN0b30vPlxyXG4gICAgICAgICAgICAgICAgPC9Ub29sYmFyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cIm1pbmktY29uc29sZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L0FwcEJhcj5cclxuICAgICAgICAgICAgPG1haW4+XHJcbiAgICAgICAgICAgICAgICA8UGFwZXIgY2xhc3NOYW1lPVwiZm9ybXVsYXJpb1wiIG1vZG8tZGVzcGxpZWd1ZT17bW9kb0Rlc3BsaWVndWV9IHZlci1udW0tb3BjaW9uZXM9e29wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXM/J1NJJzonTk8nfT5cclxuICAgICAgICAgICAgICAgICAgICB7bW9kby5kZW1vPzxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGNvbXBvbmVudD1cInNwYW5cIj5Nb2RvIGRlIGRlc3BsaWVndWU6PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtsaXN0YU1vZG9zLm1hcChtb2RvPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24ga2V5PXttb2RvfSB2YXJpYW50PXttb2RvPT1tb2RvRGVzcGxpZWd1ZT9cImNvbnRhaW5lZFwiOlwib3V0bGluZWRcIn0gb25DbGljaz17XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCk9PmRpc3BhdGNoKGRpc3BhdGNoZXJzLk1PRE9fREVTUExJRUdVRSh7bW9kb0Rlc3BsaWVndWU6bW9kb30pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfT57bW9kb308L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b25Hcm91cD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj46bnVsbH1cclxuICAgICAgICAgICAgICAgICAgICB7cGFudGFsbGFDb21wbGV0YT9udWxsOjxCb3RvblZvbHZlckVuRGl2IGlkPVwiYm90b24tdm9sdmVyLTFcIi8+fVxyXG4gICAgICAgICAgICAgICAgICAgIHtwYW50YWxsYUNvbXBsZXRhP251bGw6PEZvcm11bGFyaW9FbmNhYmV6YWRvIGNhc2lsbGVybz17Zm9ybXVsYXJpb30vPn1cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvIGJsb3F1ZU9Gb3JtdWxhcmlvPXtmb3JtdWxhcmlvfSBmb3JtdWxhcmlvPXtmb3JtdWxhcmlvfSBmb3JQaz17Zm9yUGt9IG11bHRpcGxlPXtmYWxzZX0vPlxyXG4gICAgICAgICAgICAgICAgICAgIHtwYW50YWxsYUNvbXBsZXRhP251bGw6PEJvdG9uVm9sdmVyRW5EaXYgaWQ9XCJib3Rvbi12b2x2ZXItMlwiLz59XHJcbiAgICAgICAgICAgICAgICA8L1BhcGVyPlxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWFjdGl2by1hcnJpYmEnIGNvbG9yPVwicHJpbWFyeVwiIGFyaWEtbGFiZWw9XCJhZGRcIiBvbkNsaWNrPXtvbkNsaWNrU2FsdGFyQWN0dWFsfT5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5LZXlib2FyZEFycm93VXAgLz5cclxuICAgICAgICAgICAgICAgIDwvRmFiPlxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWFjdGl2by1hYmFqbycgY29sb3I9XCJwcmltYXJ5XCIgYXJpYS1sYWJlbD1cImFkZFwiIG9uQ2xpY2s9e29uQ2xpY2tTYWx0YXJBY3R1YWx9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLktleWJvYXJkQXJyb3dEb3duIC8+XHJcbiAgICAgICAgICAgICAgICA8L0ZhYj5cclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1lcnJvci1hcnJpYmEnIHZhcmlhbnQ9XCJleHRlbmRlZFwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgYXJpYS1sYWJlbD1cImVkaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5OYXZpZ2F0aW9uIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgRXJyb3JcclxuICAgICAgICAgICAgICAgIDwvRmFiPiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1lcnJvci1hYmFqbycgdmFyaWFudD1cImV4dGVuZGVkXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBhcmlhLWxhYmVsPVwiZWRpdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLk5hdmlnYXRpb25Eb3duIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgRXJyb3JcclxuICAgICAgICAgICAgICAgIDwvRmFiPiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdlc3BhY2lvLWZpbmFsLWZvcm11bGFyaW8nPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAge29wY2lvbmVzLm1vZG9Cb3JyYXJSZXNwdWVzdGEgJiYgb3BjaW9uZXMuZm9yUGs/PERlc3BsZWdhckNvbmZpcm1hckJvcnJhclJlc3B1ZXN0YSBmb3JQaz17b3BjaW9uZXMuZm9yUGt9IHZhcmlhYmxlQm9ycmFyPXtvcGNpb25lcy5tb2RvQm9ycmFyUmVzcHVlc3RhfS8+Om51bGx9XHJcbiAgICAgICAgICAgIDwvbWFpbj5cclxuICAgICAgICA8Lz5cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBBdHJpYnV0byhwcm9wczp7bm9tYnJlOnN0cmluZywgdmFsb3I6YW55fSl7XHJcbiAgICByZXR1cm4gcHJvcHMudmFsb3IhPW51bGwgJiYgcHJvcHMudmFsb3IhPScnPzxzcGFuIGNsYXNzTmFtZT1cImF0cmlidXRvLXBhclwiPlxyXG4gICAgICAgIHtwcm9wcy5ub21icmU/PHNwYW4gY2xhc3NOYW1lPVwiYXRyaWJ1dG8tbm9tYnJlXCI+e3Byb3BzLm5vbWJyZX08L3NwYW4+Om51bGx9XHJcbiAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImF0cmlidXRvLXZhbG9yXCI+e3Byb3BzLnZhbG9yLnRvU3RyaW5nKCl9PC9zcGFuPlxyXG4gICAgPC9zcGFuPjpudWxsXHJcbn1cclxuXHJcbmNvbnN0IGxpc3RhRXN0YWRvc0NhcmdhOkVzdGFkb0NhcmdhW109WydyZXN1bWVuJywncmVsZXZhbWllbnRvJywncmVjaWJvJ107XHJcbnZhciByZXN1bWlkb3JlcyA9IFtcclxuICAgIHtub21icmU6J1JFQScgICAgICAgICAsIGY6KHJyOlJlc3B1ZXN0YXNSYWl6KT0+cnIucmVzdW1lbkVzdGFkbz09XCJva1wiICAgICAgICAgIH0sXHJcbiAgICB7bm9tYnJlOidDaXRhIHBhY3RhZGEnLCBmOihycjpSZXNwdWVzdGFzUmFpeik9PnJyLnJlc3VtZW5Fc3RhZG89PVwiY2l0YSBwYWN0YWRhXCJ9LFxyXG4gICAge25vbWJyZTonUGVuZGllbnRlcycgICwgZjoocnI6UmVzcHVlc3Rhc1JhaXopPT5yci5yZXN1bWVuRXN0YWRvPT1cInZhY2lvXCIgICAgICAgfSxcclxuXTtcclxuXHJcbnJlc3VtaWRvcmVzLnB1c2goXHJcbiAgICB7bm9tYnJlOidPdHJvcycsIGY6cmVzdW1pZG9yZXMucmVkdWNlKChnLHIpPT4ocnI9PiFyLmYocnIpICYmIGcocnIpICksKF86UmVzcHVlc3Rhc1JhaXopPT50cnVlKSB9XHJcbilcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbChwcm9wczp7XHJcbiAgICBudW1WaXZpZW5kYTpJZEVuYyxcclxuICAgIGZvcm1QcmluY2lwYWw6SWRGb3JtdWxhcmlvLFxyXG4gICAgdGFyZWE6IHN0cmluZyxcclxuICAgIHJlc3B1ZXN0YXM6UmVzcHVlc3Rhc1JhaXosXHJcbn0pe1xyXG4gICAgY29uc3Qge251bVZpdmllbmRhLCByZXNwdWVzdGFzLCBmb3JtUHJpbmNpcGFsLCB0YXJlYX0gPSBwcm9wcztcclxuICAgIGNvbnN0IGlkPSd2aXYtJytudW1WaXZpZW5kYTtcclxuICAgIGNvbnN0IGZvclBrOkZvclBrPXtmb3JtdWxhcmlvOmZvcm1QcmluY2lwYWwsIHZpdmllbmRhOk51bWJlcihudW1WaXZpZW5kYSkgYXMgSWRFbmN9OyAvL25vIHF1aXRhciBlbCBjYXN0ZW8gcG9ycXVlIHZpZW5lIGNvbW8gdGV4dG8geSBuZWNlc2l0byBxdWUgc2VhIG7Dum1lcm9cclxuICAgIHZhciB0ZW0gPSBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW251bVZpdmllbmRhXS50ZW07XHJcbiAgICB2YXIgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdXNlRWZmZWN0KCgpPT57XHJcbiAgICAgICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQayk7XHJcbiAgICAgICAgaW50ZW50YXJCYWNrdXAoZm9yUGspXHJcbiAgICB9KVxyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe2lkLCBkaXJlY3Q6dHJ1ZSxcclxuICAgICAgICBmdW46KFxyXG4gICAgICAgICAgICByOlJlc3B1ZXN0YXMsIFxyXG4gICAgICAgICAgICBfZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgXHJcbiAgICAgICAgICAgIGVsZW1lbnRvOkhUTUxEaXZFbGVtZW50LCBcclxuICAgICAgICAgICAgZmVlZGJhY2tBbGw6e1tmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+fSwgXHJcbiAgICAgICAgICAgIF9lc3RydWN0dXJhOkVzdHJ1Y3R1cmFcclxuICAgICAgICApPT57XHJcbiAgICAgICAgICAgIC8vcHJlZ3VudG8gc2kgZXMgbGEgbWlzbWEgdml2aWVuZGEgcG9ycXVlIGxhIGZ1bmNpb24gc2UgZGlzcGFyYSBcclxuICAgICAgICAgICAgLy9jb24gdG9kYXMgbGFzIGNvbWJpbmFjaW9uZXMgZGUgcmVzcHVlc3RhcyBwYXJhIGNhZGEgZm9yUGtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIHZpdmllbmRhIGV4aXN0ZVxyXG4gICAgICAgICAgICBpZihyLnZpdmllbmRhID09IGZvclBrLnZpdmllbmRhKXtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvLnNldEF0dHJpYnV0ZSgncmVzdW1lbi1lc3RhZG8nLGNhbGN1bGFyUmVzdW1lblZpdmllbmRhKGZvclBrLCBmZWVkYmFja0FsbCwgcikucmVzdW1lbkVzdGFkbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgfSlcclxuICAgIHJldHVybiA8VGFibGVSb3cga2V5PXtudW1WaXZpZW5kYX0+XHJcbiAgICAgICAgPFRhYmxlQ2VsbD5cclxuICAgICAgICAgICAge3RlbT9cclxuICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhclRlbSB0ZW09e3RlbX0vPlxyXG4gICAgICAgICAgICAgICAgICAgIHtyZXNwdWVzdGFzWydyZXN1bWVuRXN0YWRvJyBhcyBJZFZhcmlhYmxlXT09XCJjaXRhIHBhY3RhZGFcIj9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNpdGFQYWN0YWRhIHJlc3B1ZXN0YXM9e3Jlc3B1ZXN0YXN9Lz5cclxuICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJDaXRhUGFjdGFkYVlTZWxlY2Npb25hZG9BbnRlcmlvclRlbSB0ZW09e3RlbX0vPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICA6bnVsbH1cclxuICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICA8VGFibGVDZWxsPlxyXG4gICAgICAgICAgICB7dGFyZWF9XHJcbiAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgPFRhYmxlQ2VsbD5cclxuICAgICAgICAgICAgPEJ1dHRvbiBpZD17aWR9IG9uQ2xpY2s9eygpPT4gXHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oe2ZvclBrLCBhcGlsYXJWdWVsdGE6ZmFsc2V9KSlcclxuICAgICAgICAgICAgfT5cclxuICAgICAgICAgICAgICAgIHtudW1WaXZpZW5kYS50b1N0cmluZygpfVxyXG4gICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgIDwvVGFibGVSb3c+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJDYXJnYShwcm9wczp7XHJcbiAgICBjYXJnYTpDYXJnYSwgXHJcbiAgICBpZENhcmdhOklkQ2FyZ2EsIFxyXG4gICAgcG9zaWNpb246bnVtYmVyLFxyXG4gICAgaW5mb3JtYWNpb25IZHI6SW5mb3JtYWNpb25IZHIsIFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhTGFzVUEsXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7XHJcbiAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gXHJcbiAgICB9XHJcbn0pe1xyXG4gICAgY29uc3Qge2NhcmdhLCBpZENhcmdhLCBpbmZvcm1hY2lvbkhkciwgcmVzcHVlc3Rhc30gPSBwcm9wcztcclxuICAgIHJldHVybiA8UGFwZXIgY2xhc3NOYW1lPVwiY2FyZ2FcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImluZm9ybWFjaW9uLWNhcmdhXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZ2FcIj7DgXJlYToge2lkQ2FyZ2F9PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwib2JzZXJ2YWNpb25lc1wiPntjYXJnYS5vYnNlcnZhY2lvbmVzfTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW5mb3JtYWNpb24tY2FyZ2FcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmZWNoYVwiPntjYXJnYS5mZWNoYX08L2Rpdj5cclxuICAgICAgICAgICAgey8qXHJcbiAgICAgICAgICAgIDxCdXR0b25Hcm91cD5cclxuICAgICAgICAgICAge2xpc3RhRXN0YWRvc0NhcmdhLm1hcChlc3RhZG9fY2FyZ2E9PlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBrZXk9e2VzdGFkb19jYXJnYX0gdmFyaWFudD17ZXN0YWRvX2NhcmdhPT1jYXJnYS5lc3RhZG9fY2FyZ2E/XCJjb250YWluZWRcIjpcIm91dGxpbmVkXCJ9IG9uQ2xpY2s9e1xyXG4gICAgICAgICAgICAgICAgICAgICgpPT5kaXNwYXRjaChkaXNwYXRjaGVycy5FU1RBRE9fQ0FSR0Eoe2lkQ2FyZ2EsIGVzdGFkb19jYXJnYX0pKVxyXG4gICAgICAgICAgICAgICAgfT57ZXN0YWRvX2NhcmdhfTwvQnV0dG9uPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8L0J1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICAqL31cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB7Y2FyZ2EuZXN0YWRvX2NhcmdhPT1udWxsICYmICFwcm9wcy5wb3NpY2lvbiB8fCBjYXJnYS5lc3RhZG9fY2FyZ2E9PSdyZWxldmFtaWVudG8nP1xyXG4gICAgICAgIDxUYWJsZSBjbGFzc05hbWU9XCJ0YWJsYS1jYXJnYS1ob2phLWRlLXJ1dGFcIj5cclxuICAgICAgICAgICAgPGNvbGdyb3VwPlxyXG4gICAgICAgICAgICAgICAgPGNvbCBzdHlsZT17e3dpZHRoOlwiNzUlXCJ9fS8+XHJcbiAgICAgICAgICAgICAgICA8Y29sIHN0eWxlPXt7d2lkdGg6XCIxMCVcIn19Lz4gICAgXHJcbiAgICAgICAgICAgICAgICA8Y29sIHN0eWxlPXt7d2lkdGg6XCIxNSVcIn19Lz4gICAgXHJcbiAgICAgICAgICAgIDwvY29sZ3JvdXA+XHJcbiAgICAgICAgICAgIDxUYWJsZUhlYWQgc3R5bGU9e3tmb250U2l6ZTogXCIxLjJyZW1cIn19PlxyXG4gICAgICAgICAgICAgICAgPFRhYmxlUm93IGNsYXNzTmFtZT1cInRyLWNhcmdhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbD5kb21pY2lsaW88L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsPnRhcmVhPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbD5lbmM8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgIDwvVGFibGVSb3c+XHJcbiAgICAgICAgICAgIDwvVGFibGVIZWFkPlxyXG4gICAgICAgICAgICA8VGFibGVCb2R5PlxyXG4gICAgICAgICAgICAgICAge2xpa2VBcihpbmZvcm1hY2lvbkhkcikuZmlsdGVyKChpbmZvcm1hY2lvbik9PmluZm9ybWFjaW9uLnRlbS5jYXJnYT09aWRDYXJnYSkubWFwKChpbmZvcm1hY2lvbiwgbnVtVml2aWVuZGEpPT5cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17bnVtVml2aWVuZGF9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBudW1WaXZpZW5kYT17bnVtVml2aWVuZGF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhPXtpbmZvcm1hY2lvbi50YXJlYS50YXJlYX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVByaW5jaXBhbD17aW5mb3JtYWNpb24udGFyZWEubWFpbl9mb3JtfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzPXtyZXNwdWVzdGFzLnZpdmllbmRhc1tudW1WaXZpZW5kYV0gYXMgUmVzcHVlc3Rhc1JhaXp9XHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICkuYXJyYXkoKX1cclxuICAgICAgICAgICAgPC9UYWJsZUJvZHk+XHJcbiAgICAgICAgPC9UYWJsZT46XHJcbiAgICAgICAgPFRhYmxlPlxyXG4gICAgICAgICAgICA8VGFibGVIZWFkIHN0eWxlPXt7Zm9udFNpemU6IFwiMS4ycmVtXCJ9fT5cclxuICAgICAgICAgICAgICAgIDxUYWJsZVJvdyBjbGFzc05hbWU9XCJ0ci1jYXJnYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtyZXN1bWlkb3Jlcy5tYXAoKHJlc3VtaWRvcjogdHlwZW9mIHJlc3VtaWRvcmVzWzBdLCBpOm51bWJlcik9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsIGtleT17aX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVzdW1pZG9yLm5vbWJyZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgIDwvVGFibGVSb3c+XHJcbiAgICAgICAgICAgIDwvVGFibGVIZWFkPlxyXG4gICAgICAgIDwvVGFibGU+XHJcbiAgICAgICAgfVxyXG4gICAgPC9QYXBlcj5cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gRGVzcGxlZ2FyQ2l0YVBhY3RhZGEocHJvcHM6e3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhc30pe1xyXG4gICAgY29uc3Qge3Jlc3B1ZXN0YXN9ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJjaXRhLXBhY3RhZGFcIj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJDaXRhIHBhY3RhZGEgY29uIFwiIHZhbG9yPXtyZXNwdWVzdGFzW3AxMl19Lz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJDZWwuOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwMl19Lz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJUZWwuOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwM119Lz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJGZWNoYTpcIiB2YWxvcj17cmVzcHVlc3Rhc1tzcDRdfS8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiSG9yYTpcIiB2YWxvcj17cmVzcHVlc3Rhc1tzcDVdfS8+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhckNpdGFQYWN0YWRhWVNlbGVjY2lvbmFkb0FudGVyaW9yVGVtKHByb3BzOnt0ZW06VEVNfSl7XHJcbiAgICBjb25zdCB7dGVtfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxkaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZW0tY2l0YVwiPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiQ2l0YTpcIiB2YWxvcj17dGVtLmNpdGF9Lz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRGVzcGxlZ2FyVGVtKHByb3BzOnt0ZW06VEVNfSl7XHJcbiAgICBjb25zdCB7dGVtfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxkaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZW0tZG9taWNpbGlvXCI+e3RlbS5ub21jYWxsZX0ge3RlbS5ucm9jYXRhc3RyYWx9IDxBdHJpYnV0byBub21icmU9XCJwaXNvXCIgdmFsb3I9e3RlbS5waXNvfS8+IDxBdHJpYnV0byBub21icmU9XCJkcHRvXCIgdmFsb3I9e3RlbS5kZXBhcnRhbWVudG99Lz4gPC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cInNlY3RvclwiIHZhbG9yPXt0ZW0uc2VjdG9yfS8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJlZGlmaWNpb1wiIHZhbG9yPXt0ZW0uZWRpZmljaW99Lz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImNhc2FcIiB2YWxvcj17dGVtLmNhc2F9Lz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImVudHJhZGFcIiB2YWxvcj17dGVtLmVudHJhZGF9Lz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImhhYml0YWNpb25cIiB2YWxvcj17dGVtLmhhYml0YWNpb259Lz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRlbS1vYnNlcnZhY2lvbmVzXCI+XHJcbiAgICAgICAgICAgIHt0ZW0ub2JzZXJ2YWNpb25lc30gXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEhvamFEZVJ1dGFEZXNwbGllZ3VlKCl7XHJcbiAgICB2YXIge2NhcmdhcywgbnVtX3NpbmNybywgaW5mb3JtYWNpb25IZHIsIHJlc3B1ZXN0YXN9ID0gZ2V0RGF0b3NCeVBhc3MoKTtcclxuICAgIHZhciB7bW9kb30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+KHttb2RvOnN0YXRlLm1vZG99KSk7XHJcbiAgICB2YXIgZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcigpXHJcbiAgICB2YXIgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgdXBkYXRlT25saW5lU3RhdHVzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICBzZXRPbmxpbmUod2luZG93Lm5hdmlnYXRvci5vbkxpbmUpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXBwVmVyc2lvbiA9IGdldENhY2hlVmVyc2lvbigpO1xyXG4gICAgY29uc3QgW29ubGluZSwgc2V0T25saW5lXSA9IHVzZVN0YXRlKHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCAgdXBkYXRlT25saW5lU3RhdHVzKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgdXBkYXRlT25saW5lU3RhdHVzKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAgPEFwcEJhciBwb3NpdGlvbj1cImZpeGVkXCI+XHJcbiAgICAgICAgICAgICAgICA8VG9vbGJhcj5cclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwiaDZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSG9qYSBkZSBydXRhXHJcbiAgICAgICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAvLzxJY29uQnV0dG9uIHN0eWxlPXt7bWFyZ2luVG9wOiczcHgnfX1cclxuICAgICAgICAgICAgICAgICAgICAvLyAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgIC8vb25DbGljaz17LypkaXNwYXRjaCBxdWUgbGxldmEgYSBwYW50YWxsYSBvcGNpb25lcyovfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vPlxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgIDxJQ09OLlNldHRpbmdzLz5cclxuICAgICAgICAgICAgICAgICAgICAvLzwvSWNvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAge29ubGluZT9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvU2luY3Jvbml6YXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uU3luY0FsdC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgICAgIDpudWxsfVxyXG4gICAgICAgICAgICAgICAgPC9Ub29sYmFyPlxyXG4gICAgICAgICAgICA8L0FwcEJhcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJob2phLWRlLXJ1dGFcIj5cclxuICAgICAgICAgICAgICAgIHttb2RvLmRlbW8/PGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5Nb2RvIGRlbW8gPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cIm91dGxpbmVkXCIgY29sb3I9XCJzZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuUkVJTklDSUFSX0RFTU8oe30pKX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlaW5pY2lhclxyXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+Om51bGx9XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm5vbWJyZS12ZXJzaW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5EaXJlY2Npw7NuIEdlbmVyYWwgZGUgRXN0YWTDrXN0aWNhIHkgQ2Vuc29zIC0gQy5BLkIuQS48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PntteS5nZXRMb2NhbFZhcignYXBwLXZlcnNpb24nKX0gc2luY3JvIHtudW1fc2luY3JvfSAtIHZlcnNpw7NuIHthcHBWZXJzaW9ufTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB7bGlrZUFyKGNhcmdhcykubWFwKChjYXJnYSwgaWRDYXJnYSwgXywgcG9zaWNpb24pPT5cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ2FyZ2Ega2V5PXtpZENhcmdhfSBjYXJnYT17Y2FyZ2F9IGlkQ2FyZ2E9e2lkQ2FyZ2F9IHBvc2ljaW9uPXtwb3NpY2lvbn0gaW5mb3JtYWNpb25IZHI9e2luZm9ybWFjaW9uSGRyfSBmZWVkYmFja1Jvd1ZhbGlkYXRvcj17ZmVlZGJhY2tSb3dWYWxpZGF0b3J9IHJlc3B1ZXN0YXM9e3Jlc3B1ZXN0YXN9Lz5cclxuICAgICAgICAgICAgICAgICkuYXJyYXkoKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC8+XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gTGlzdGFUZXh0b3MocHJvcHM6e3RleHRvczpzdHJpbmdbXX0pe1xyXG4gICAgcmV0dXJuIDx1bD5cclxuICAgICAgICB7cHJvcHMudGV4dG9zLm1hcCh0PT48bGk+PFR5cG9ncmFwaHk+e3R9PC9UeXBvZ3JhcGh5PjwvbGk+KX1cclxuICAgIDwvdWw+O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQmllbnZlbmlkYURlc3BsaWVndWUocHJvcHM6e21vZG86Q2Fzb1N0YXRlW1wibW9kb1wiXX0pe1xyXG4gICAgdmFyIGRpc3BhdGNoPXVzZURpc3BhdGNoKCk7XHJcbiAgICByZXR1cm4gPFBhcGVyIGNsYXNzTmFtZT1cImJpZW52ZW5pZGFcIj5cclxuICAgICAgICB7cHJvcHMubW9kby5kZW1vP1xyXG4gICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+REVNTyBkZWwgc2lzdGVtYSBkZSByZWxldmFtaWVudG8gZGUgRE1FTkNVPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+RW4gZXN0YSBkZW1vOjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgIDxMaXN0YVRleHRvcyB0ZXh0b3M9e1tcclxuICAgICAgICAgICAgICAgICAgICBcIkFsZ3VuYXMgdml2aWVuZGFzIGFwYXJlY2VuIHJlbGV2YWRhcyAoZWwgYm90w7NuIGVzdMOhIGRlIGNvbG9yKSBzaXJ2ZW4gZGUgZWplbXBsb1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiTG8gcXVlIHNlIGNhcmd1ZW4gc2UgZ3VhcmRhbiBsb2NhbG1lbnRlIHBlcm8gbm8gc2UgdHJhc21pdGVuIGEgbGEgYmFzZSBkZSBkYXRvc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiU2UgcHVlZGUgdm9sdmVyIGEgbGEgdmVyc2nDs24gaW5pY2lhbCAobyBzZWEgYm9ycmFyIGxvIHF1ZSBzZSBndWFyZMOzIGxvY2FsbWVudGUpIGRlc2RlIGxhIGhvamEgZGUgcnV0YSBib3RvbiBbcmVpbmljaWFyIGRlbW9dXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJUb2RhdsOtYSBoYXkgY29zYXMgcXVlIGZhbHRhbiBvIHB1ZWRlbiBjYW1iaWFyXCIsXHJcbiAgICAgICAgICAgICAgICBdfSAvPlxyXG4gICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgOjw+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5FbmN1ZXN0YSBkZSBTZXJvcHJldmFsZW5jaWEgZGUgQ09WSUQtMTk8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgIDwvPlxyXG4gICAgICAgIH1cclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxyXG4gICAgICAgICAgICBjb2xvcj1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57IGdvdG9TaW5jcm9uaXphcigpOyB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4+U2luY3Jvbml6YXIgPC9zcGFuPiA8SUNPTi5TeW5jQWx0Lz5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7b3BjaW9uOidiaWVudmVuaWRvJywgdmFsb3I6dHJ1ZX0pKX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuPkNvbnRpbnVhciA8L3NwYW4+IDxJQ09OLlNlbmQvPlxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgPC9QYXBlcj5cclxufVxyXG5cclxuLy9DT05UUk9MIERFIFBFU1RBw5FBU1xyXG52YXIgYWxsT3BlbmVkVGFiczp7W3g6c3RyaW5nXTpudW1iZXJ9PXt9O1xyXG52YXIgaW5mb09wZW5lZFRhYnM9e1xyXG4gICAgYWxsT3BlbmVkVGFicyxcclxuICAgIG15SWQ6J2NhbGN1bGFuZG8uLi4nLFxyXG4gICAgb3RoZXJUYWJzTmFtZXM6JydcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE9wZW5lZFRhYnMoKXtcclxuICAgIGNvbnN0IFt0YWJzLCBzZXRUYWJzXSA9IHVzZVN0YXRlKGluZm9PcGVuZWRUYWJzLm90aGVyVGFic05hbWVzKTtcclxuICAgIHZhciB7bW9kb0RpcmVjdG99ID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9Pih7bW9kb0RpcmVjdG86c3RhdGUub3BjaW9uZXMubW9kb0RpcmVjdG99KSk7XHJcbiAgICBjb25zdCB1cGRhdGVUYWJzU3RhdHVzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICBzZXRUYWJzKGluZm9PcGVuZWRUYWJzLm90aGVyVGFic05hbWVzKTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKT0+e1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdteS10YWJzJyx1cGRhdGVUYWJzU3RhdHVzKTtcclxuICAgICAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ215LXRhYnMnLHVwZGF0ZVRhYnNTdGF0dXMpO1xyXG4gICAgfSxbXSlcclxuICAgIHJldHVybiBtb2RvRGlyZWN0bz9udWxsOih0YWJzKT9cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRhYi1jb3VudGVyIHRhYi1lcnJvclwiPsKhQVRFTkNJw5NOISBIYXkgbcOhcyBkZSB1bmEgdmVudGFuYSBhYmllcnRhLiBTZSBwdWVkZW4gcGVyZGVyIGRhdG9zOiB7dGFic308L2Rpdj5cclxuICAgIDpcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRhYi1jb3VudGVyXCI+4pyUPC9kaXY+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBBcHBEbUVuY3UoKXtcclxuICAgIHZhciB7Zm9yUGssIGJpZW52ZW5pZG8sIG1vZG99ID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9Pih7Li4uc3RhdGUub3BjaW9uZXMsIC4uLnN0YXRlLm1vZG8sIC4uLnN0YXRlfSkpO1xyXG4gICAgaWYoIWJpZW52ZW5pZG8pe1xyXG4gICAgICAgIHJldHVybiA8QmllbnZlbmlkYURlc3BsaWVndWUgbW9kbz17bW9kb30vPiBcclxuICAgIH1lbHNlIGlmKGZvclBrPT1udWxsKXtcclxuICAgICAgICByZXR1cm4gPEhvamFEZVJ1dGFEZXNwbGllZ3VlIC8+IFxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgcmV0dXJuIDxGb3JtdWxhcmlvRGVzcGxpZWd1ZSBmb3JQaz17Zm9yUGt9Lz5cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gUGFudGFsbGFJbmljaWFsU2luQ2FyZ2EoX3Byb3BzOnt9KXtcclxuICAgIGNvbnN0IHVwZGF0ZU9ubGluZVN0YXR1cyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgc2V0T25saW5lKHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lKTtcclxuICAgIH1cclxuICAgIGNvbnN0IFtvbmxpbmUsIHNldE9ubGluZV0gPSB1c2VTdGF0ZSh3aW5kb3cubmF2aWdhdG9yLm9uTGluZSk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgIHVwZGF0ZU9ubGluZVN0YXR1cyk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIHVwZGF0ZU9ubGluZVN0YXR1cyk7XHJcbiAgICBjb25zdCBwYXJhZ3JhcGhTdHlsZXM9e2ZvbnRTaXplOlwiMS4ycmVtXCIsIGZvbnRXZWlnaHQ6NjAwLCBwYWRkaW5nOiBcIjVweCAxMHB4XCJ9O1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8PlxyXG4gICAgICAgICAgICA8QXBwQmFyIHBvc2l0aW9uPVwiZml4ZWRcIj5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJoNlwiIHN0eWxlPXt7bWFyZ2luOjI1fX0+XHJcbiAgICAgICAgICAgICAgICAgICAgRGlzcG9zaXRpdm8gc2luIGNhcmdhXHJcbiAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgIDwvQXBwQmFyPlxyXG4gICAgICAgICAgICA8bWFpbj5cclxuICAgICAgICAgICAgICAgIDxQYXBlciBzdHlsZT17e2hlaWdodDonNjAwcHgnLCBwYWRkaW5nOlwiMTVweFwiLCBtYXJnaW5Ub3A6NzV9fT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7b25saW5lP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJwXCIgc3R5bGU9e3BhcmFncmFwaFN0eWxlc30+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbmNyb25pemFyIGRpc3Bvc2l0aXZvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7cGFkZGluZzonNXB4J319PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290b1NpbmNyb25pemFyKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLlN5bmNBbHQvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgY29tcG9uZW50PVwicFwiIHN0eWxlPXtwYXJhZ3JhcGhTdHlsZXN9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIGhheSBjb25leGnDs24gYSBpbnRlcm5ldCwgcG9yIGZhdm9yIGNvbsOpY3RlIGVsIGRpc3Bvc2l0aXZvIGEgdW5hIHJlZCBwYXJhIHNpbmNyb25pemFyIHVuYSBob2phIGRlIHJ1dGEuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvUGFwZXI+XHJcbiAgICAgICAgICAgIDwvbWFpbj5cclxuICAgICAgICA8Lz5cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBQYW50YWxsYUluaWNpYWwoKXtcclxuICAgIHZhciB7Zm9yUGssIGJpZW52ZW5pZG8sIG1vZG99ID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9Pih7Li4uc3RhdGUub3BjaW9uZXMsIC4uLnN0YXRlLm1vZG8sIC4uLnN0YXRlfSkpO1xyXG4gICAgaWYoIWJpZW52ZW5pZG8pe1xyXG4gICAgICAgIHJldHVybiA8QmllbnZlbmlkYURlc3BsaWVndWUgbW9kbz17bW9kb30vPiBcclxuICAgIH1lbHNlIGlmKGZvclBrPT1udWxsKXtcclxuICAgICAgICByZXR1cm4gPEhvamFEZVJ1dGFEZXNwbGllZ3VlIC8+IFxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgcmV0dXJuIDxGb3JtdWxhcmlvRGVzcGxpZWd1ZSBmb3JQaz17Zm9yUGt9Lz5cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRtUGFudGFsbGFJbmljaWFsU2luQ2FyZ2EoKXtcclxuICAgIHRyeXtcclxuICAgICAgICBhd2FpdCBsb2FkQ1NTKEJPT1RTVFJBUF81XzFfM19TUkMpO1xyXG4gICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgdGhyb3coZXJyKVxyXG4gICAgfVxyXG4gICAgUmVhY3RET00ucmVuZGVyKFxyXG4gICAgICAgIDxQYW50YWxsYUluaWNpYWxTaW5DYXJnYS8+LFxyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpXHJcbiAgICApXHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsKG9wdHM6e21vZG9EZW1vOmJvb2xlYW4sIGZvclBrUmFpej86Rm9yUGtSYWl6LCBvcGVyYXRpdm86SWRPcGVyYXRpdm99KXtcclxuICAgIC8vIHRyYWVyIGxvcyBtZXRhZGF0b3MgZW4gdW5hIFwiZXN0cnVjdHVyYVwiXHJcbiAgICAvLyB0cmFlciBsb3MgZGF0b3MgZGUgbG9jYWxTdG9yYWdlXHJcbiAgICAvLyB2ZXJpZmljYXIgZWwgbWFpbiBMYXlvdXRcclxuICAgIGNvbnN0IHN0b3JlID0gYXdhaXQgZG1UcmFlckRhdG9zRm9ybXVsYXJpbyhvcHRzKVxyXG4gICAgdHJ5e1xyXG4gICAgICAgIGF3YWl0IGxvYWRDU1MoQk9PVFNUUkFQXzVfMV8zX1NSQyk7XHJcbiAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICB0aHJvdyhlcnIpXHJcbiAgICB9XHJcbiAgICBSZWFjdERPTS5yZW5kZXIoXHJcbiAgICAgICAgPFJlbmRlclByaW5jaXBhbCBzdG9yZT17c3RvcmV9IGRpc3BhdGNoZXJzPXtkaXNwYXRjaGVyc30gbWVuc2FqZVJldG9ybm89e29wdHMuZm9yUGtSYWl6P1wiVm9sdmVyIGFsIGZvcm11bGFyaW9cIjpcIlZvbHZlciBhIGxhIGhvamEgZGUgcnV0YVwifT5cclxuICAgICAgICAgICAgPE9wZW5lZFRhYnMvPlxyXG4gICAgICAgICAgICA8QXBwRG1FbmN1Lz5cclxuICAgICAgICA8L1JlbmRlclByaW5jaXBhbD4sXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JylcclxuICAgIClcclxufVxyXG5cclxuaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpe1xyXG4gICAgLy8gQHRzLWlnbm9yZSBwYXJhIGhhY2VybG9cclxuICAgIHdpbmRvdy5kZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsID0gZGVzcGxlZ2FyRm9ybXVsYXJpb0FjdHVhbDtcclxuICAgIC8vIEB0cy1pZ25vcmUgcGFyYSBoYWNlcmxvXHJcbiAgICB3aW5kb3cuZG1QYW50YWxsYUluaWNpYWxTaW5DYXJnYSA9IGRtUGFudGFsbGFJbmljaWFsU2luQ2FyZ2E7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBsb2FkSW5zdGFuY2UoKXtcclxuICAgIGlmKHR5cGVvZiBCcm9hZGNhc3RDaGFubmVsID09PSAndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGJjID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoJ2NvbnRhZG9yJyk7XHJcbiAgICB2YXIgbXlJZD1TdHJpbmcuZnJvbUNvZGVQb2ludCgxMDArTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjEwMDApKStNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMTAwKS8vKyctJytuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgIGFsbE9wZW5lZFRhYnNbbXlJZF09MTtcclxuICAgIGluZm9PcGVuZWRUYWJzLm15SWQ9bXlJZDtcclxuICAgIHZhciBldmVudCA9IG5ldyBFdmVudCgnbXktdGFicycpO1xyXG4gICAgYmMub25tZXNzYWdlPWZ1bmN0aW9uKGV2KXtcclxuICAgICAgICBpZihldi5kYXRhLnF1ZT09J3NveScpe1xyXG4gICAgICAgICAgICBpZighYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSl7XHJcbiAgICAgICAgICAgICAgICBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdPTA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihldi5kYXRhLnF1ZT09J3VubG9hZCcpe1xyXG4gICAgICAgICAgICBkZWxldGUgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoZXYuZGF0YS5xdWU9PSdsb2FkJyl7XHJcbiAgICAgICAgICAgIGFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF09MTtcclxuICAgICAgICAgICAgYmMucG9zdE1lc3NhZ2Uoe3F1ZTonc295JyxpZDpteUlkfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGluZm9PcGVuZWRUYWJzLm90aGVyVGFic05hbWVzPWxpa2VBcihhbGxPcGVuZWRUYWJzKS5maWx0ZXIoKF8saWQpPT5pZCE9bXlJZCkuam9pbignLCcpO1xyXG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIH07XHJcbiAgICBiYy5wb3N0TWVzc2FnZSh7cXVlOidsb2FkJyxpZDpteUlkfSk7XHJcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5sb2FkJyxmdW5jdGlvbigpe1xyXG4gICAgICAgIGJjLnBvc3RNZXNzYWdlKHtxdWU6J3VubG9hZCcsaWQ6bXlJZH0pO1xyXG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIH0pXHJcbiAgICAvL21vc3RyYXJRdWllbmVzU29tb3MoKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHNldExpYnJlRGVzcGxpZWd1ZSA9IChsaWJyZTpMaWJyZURlc3BsaWVndWVUeXBlKT0+TGlicmVEZXNwbGllZ3VlID0gbGlicmVcclxuXHJcbnNldExpYnJlRGVzcGxpZWd1ZSgocHJvcHM6e1xyXG4gICAga2V5OnN0cmluZ1xyXG4gICAgY2FzaWxsZXJvOkxpYnJlXHJcbiAgICBmb3JtdWxhcmlvOkZvcm11bGFyaW9cclxuICAgIGZvclBrOkZvclBrXHJcbn0pPT48ZGl2IGtleT17cHJvcHMua2V5fSBpZD17cHJvcHMuY2FzaWxsZXJvLmlkX2Nhc2lsbGVyb30+ZXN0ZSBjYXNpbGxlcm8gZGViZSByZWRlZmluaXJzZSBlbiBsYSBBUFAgZmluYWwgeSBzdSB1c28gZXMgZXhjbHVzaXZvIGRlbCDDoXJlYSBpbmZvcm3DoXRpY2E8L2Rpdj4pXHJcblxyXG5zZXRDYWxjdWxhclZhcmlhYmxlcygocmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosIGZvclBrOkZvclBrKT0+e1xyXG4gICAgLy9UT0RPIEdFTkVSQUxJWkFSXHJcbiAgICB2YXIgdWFzSXRlcmFyOntcclxuICAgICAgICBba2V5IGluIElkVW5pZGFkQW5hbGlzaXNdOntcclxuICAgICAgICAgICAgdWFQZXJzb25hczogSWRVbmlkYWRBbmFsaXNpc1xyXG4gICAgICAgICAgICB2YXJTZXhvUGVyc29uYTogSWRWYXJpYWJsZVxyXG4gICAgICAgICAgICB2YXJOb21icmVQZXJzb25hOiBJZFZhcmlhYmxlXHJcbiAgICAgICAgICAgIHZhckxvc05vbWJyZXM6IElkVmFyaWFibGVcclxuICAgICAgICB9XHJcbiAgICB9ID0ge1xyXG4gICAgICAgIGhvZ2FyZXM6IHtcclxuICAgICAgICAgICAgdWFQZXJzb25hczogJ3BlcnNvbmFzJyxcclxuICAgICAgICAgICAgdmFyU2V4b1BlcnNvbmE6ICdzZXhvJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgICAgICB2YXJOb21icmVQZXJzb25hOiAnbm9tYnJlJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgICAgICB2YXJMb3NOb21icmVzOiBcImxvc19ub21icmVzXCIgYXMgSWRWYXJpYWJsZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgW1wiaG9nYXJlc19zdXBcIiBhcyBJZFVuaWRhZEFuYWxpc2lzXSA6IHtcclxuICAgICAgICAgICAgdWFQZXJzb25hczogJ3BlcnNvbmFzX3N1cCcgYXMgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgICAgICAgICAgdmFyU2V4b1BlcnNvbmE6ICdzZXhvX3N1cCcgIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgICAgIHZhck5vbWJyZVBlcnNvbmE6ICdub21icmVfc3VwJyAgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICAgICAgdmFyTG9zTm9tYnJlczogXCJub21icmVzX2NvbXBvbmVudGVzX3N1cFwiICBhcyBJZFZhcmlhYmxlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGlrZUFyKHVhc0l0ZXJhcikuZm9yRWFjaCgoY29uZmlnSG9nYXJlcyx1YUhvZ2FyZXMpPT57XHJcbiAgICAgICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICAgICAgaWYoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1YUhvZ2FyZXNdKXtcclxuICAgICAgICAgICAgZm9yKHZhciByZXNwdWVzdGFzSG9nYXIgb2YgaXRlcmF0b3IocmVzcHVlc3Rhc1JhaXpbdWFIb2dhcmVzXT8/W10pKXtcclxuICAgICAgICAgICAgICAgIGlmKCFyZXNwdWVzdGFzSG9nYXJbY29uZmlnSG9nYXJlcy51YVBlcnNvbmFzXSB8fCBlbXB0eShyZXNwdWVzdGFzSG9nYXJbY29uZmlnSG9nYXJlcy51YVBlcnNvbmFzXSkgfHwgcmVzcHVlc3Rhc0hvZ2FyW2NvbmZpZ0hvZ2FyZXMudWFQZXJzb25hc11bMF1bY29uZmlnSG9nYXJlcy52YXJTZXhvUGVyc29uYV0gPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvc05vbWJyZXMgPSByZXNwdWVzdGFzSG9nYXJbY29uZmlnSG9nYXJlcy52YXJMb3NOb21icmVzXSBhcyBzdHJpbmdcclxuICAgICAgICAgICAgICAgICAgICBpZihsb3NOb21icmVzICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZighcmVzcHVlc3Rhc0hvZ2FyW2NvbmZpZ0hvZ2FyZXMudWFQZXJzb25hc10pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0hvZ2FyW2NvbmZpZ0hvZ2FyZXMudWFQZXJzb25hc109W107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9zTm9tYnJlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKG5vbWJyZTpzdHJpbmcpPT5ub21icmUudHJpbSgpLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgobm9tYnJlOnN0cmluZywgaTpudW1iZXIpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0hvZ2FyW2NvbmZpZ0hvZ2FyZXMudWFQZXJzb25hc11baV0gPSByZXNwdWVzdGFzSG9nYXJbY29uZmlnSG9nYXJlcy51YVBlcnNvbmFzXVtpXSB8fCB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzSG9nYXJbY29uZmlnSG9nYXJlcy51YVBlcnNvbmFzXVtpXVtjb25maWdIb2dhcmVzLnZhck5vbWJyZVBlcnNvbmFdID0gbm9tYnJlLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxuICAgIHJlc3B1ZXN0YXNSYWl6LnZkb21pbmlvPWdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbZm9yUGsudml2aWVuZGFdLnRlbS5kb21pbmlvO1xyXG59KVxyXG5cclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpe1xyXG4gICAgbG9hZEluc3RhbmNlKClcclxufSlcclxuLy9GSU4gQ09OVFJPTCBQRVNUQcORQVNcclxuXHJcbmZ1bmN0aW9uIGxvYWRDU1MoY3NzVVJMOnN0cmluZywgaWQ/OnN0cmluZyk6UHJvbWlzZTx2b2lkPntcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoIHJlc29sdmUsIHJlamVjdCApPT57XHJcbiAgICAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnbGluaycgKTtcclxuICAgICAgICBsaW5rLnJlbCAgPSAnc3R5bGVzaGVldCc7XHJcbiAgICAgICAgbGluay5ocmVmID0gY3NzVVJMO1xyXG4gICAgICAgIGxpbmsuaWQgPSBpZCB8fCBjc3NVUkw7XHJcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggbGluayApO1xyXG4gICAgICAgIGxpbmsub25sb2FkID0gKCk9PnsgXHJcbiAgICAgICAgICAgIHJlc29sdmUoKTsgXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGB0cmFlICR7Y3NzVVJMfWApO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGluay5vbmVycm9yPShlcnIpPT57XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciBjYXJnYW5kbyBlbCBlc3RpbG8nLCBlcnIpXHJcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHByb2JsZW1hIGNhcmdhbmRvIGVzdGlsbyAke2Nzc1VSTH1gKSlcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVtb3ZlQ1NTQnlJZChpZDpzdHJpbmcpe1xyXG4gICAgdmFyIGxpbmtOb2RlID0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuICAgIGxpbmtOb2RlPy5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChsaW5rTm9kZSk7XHJcbn1cclxuXHJcbmNvbnN0IEJPT1RTVFJBUF81XzFfM19TUkMgPSAnY3NzL2Jvb3RzdHJhcC5taW4uY3NzJzsiXX0=
1489
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvcmVuZGVyLWZvcm11bGFyaW8udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsK0JBQStCO0lBQy9CLHNDQUFzQztJQUN0QyxxREFRMEI7SUFDMUIsbUNBY2lCO0lBQ2pCLDJEQVk0QjtJQUM1Qix5REFJNEI7SUFDNUIsaUNBQTZEO0lBQzdELDZDQUF1RDtJQUN2RCxxQ0FBdUQ7SUFDdkQsK0NBQTZDO0lBQzdDLDJDQUF3QztJQUV4Qyw0Q0FNMkI7SUFJM0IsMkRBYzRCO0lBRTVCLDJDQUF5QztJQUd6QyxTQUFTLGNBQWMsQ0FBQyxJQUFnQixFQUFFLFdBQTZDO1FBQ25GLElBQUcsT0FBTyxJQUFJLElBQUksUUFBUTtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQzdDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEUsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFDLENBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBQyxDQUFDLElBQUksRUFBQyxFQUFFLENBQUEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ3pGLElBQUcsQ0FBQyxXQUFXLElBQUksSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3JDOztVQUVFO0lBQ04sQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLHFKQUFxSjtJQUNoTCxnSUFBZ0k7SUFFaEksSUFBSSxVQUFVLEdBQVcsS0FBSyxDQUFDO0lBRS9CLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVB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Uzs7UUFDNUIsSUFBSSxRQUFRLEdBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QyxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxVQUFVLDBDQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsTUFBTSxtQkFBbUIsR0FBRyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XHJcbmltcG9ydCB7ICBcclxuICAgIFJlbmRlclByaW5jaXBhbCwgXHJcbiAgICBhZGFwdGFyVGlwb1ZhckNhc2lsbGVybyxcclxuICAgIElDT04sXHJcbiAgICBmb2N1c1RvSWQsXHJcbiAgICBzY3JvbGxUb1RvcCxcclxuICAgIHNjcm9sbFRvQm90dG9tLFxyXG4gICAgbWF0ZXJpYWxJb0ljb25zU3ZnUGF0aFxyXG59IGZyb20gXCIuL3JlbmRlci1nZW5lcmFsXCI7XHJcbmltcG9ydCB7QmxvcXVlLCBCb3RvbkZvcm11bGFyaW8sIFxyXG4gICAgQ2FzaWxsZXJvQmFzZSwgQ2Fzb1N0YXRlLCBDb25qdW50b1ByZWd1bnRhcywgQ29uc2lzdGVuY2lhLCBcclxuICAgIEVzdGFkb0NhcmdhLCBGaWx0cm8sIEZvclBrLCBGb3JQa1JhaXosIEZvcm11bGFyaW8sIFxyXG4gICAgSWRGb3JtdWxhcmlvLCBJZFByZWd1bnRhLCBJZFRhcmVhLCBJZFZhcmlhYmxlLCBJbmZvRm9ybXVsYXJpbyxcclxuICAgIE1vZG9EZXNwbGllZ3VlLFxyXG4gICAgT3BjaW9uLCBPcGNpb25NdWx0aXBsZSwgUGxhaW5Gb3JQaywgXHJcbiAgICBQcmVndW50YSwgUHJlZ3VudGFDb25PcGNpb25lcywgUHJlZ3VudGFTaW1wbGUsIFxyXG4gICAgUmVzcHVlc3RhcywgUmVzcHVlc3RhTGFzVUEsIFJlc3B1ZXN0YXNSYWl6LCBWYWxvciwgVEVNLCBJZENhcmdhLCBDYXJnYSwgSWRGaW4sIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBNb2RvQWxtYWNlbmFtaWVudG8sXHJcbiAgICB0b1BsYWluRm9yUGssXHJcbiAgICBJZENhc2lsbGVybyxcclxuICAgIFByZWd1bnRhQ29uU2lObyxcclxuICAgIFRleHRvLCBFc3RydWN0dXJhLCBJbmZvcm1hY2lvbkhkciwgRGF0b3NIZHJVYVBwYWwsIENvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLCBSZXN1bWVuRXN0YWRvLCBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcywgSWRPcGVyYXRpdm8sIElkRW5jLCBMaWJyZSwgVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBpdGVyYXRvciwgZW1wdHlcclxufSBmcm9tIFwiLi90aXBvc1wiO1xyXG5pbXBvcnR7IFxyXG4gICAgYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8sXHJcbiAgICBhY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8sXHJcbiAgICBjYWxjdWxhckFjdHVhbEJGLFxyXG4gICAgY2FsY3VsYXJEaXNhYmxlZEJGLFxyXG4gICAgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYsXHJcbiAgICBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYSxcclxuICAgIGdldERhdG9zQnlQYXNzLFxyXG4gICAgZ2V0Rm9ybXVsYXJpb3NGb3JJZFZpdmllbmRhLFxyXG4gICAgZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYSxcclxuICAgIGludGVudGFyQmFja3VwLFxyXG4gICAgc2V0Q2FsY3VsYXJWYXJpYWJsZXNcclxufSBmcm9tIFwiLi9ieXBhc3MtZm9ybXVsYXJpb1wiXHJcbmltcG9ydCB7IGRtVHJhZXJEYXRvc0Zvcm11bGFyaW8sIGRpc3BhdGNoZXJzLCBcclxuICAgIGdvdG9TaW5jcm9uaXphcixcclxuICAgIGdldENhY2hlVmVyc2lvbixcclxuICAgIGdvdG9Db25zaXN0aXIsXHJcbn0gZnJvbSBcIi4vcmVkdXgtZm9ybXVsYXJpb1wiO1xyXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgdXNlU2VsZWN0b3IsIHVzZURpc3BhdGNoIH0gZnJvbSBcInJlYWN0LXJlZHV4XCI7IFxyXG5pbXBvcnQgeyBzdHJpY3QgYXMgbGlrZUFyLCBiZWluZ0FycmF5IH0gZnJvbSBcImxpa2UtYXJcIjtcclxuaW1wb3J0IHtzbGVlcCwgY29hbGVzY2V9IGZyb20gXCJiZXN0LWdsb2JhbHNcIjtcclxuaW1wb3J0IHsgdW5leHBlY3RlZCB9IGZyb20gXCJjYXN0LWVycm9yXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgQXBwQmFyLCBCdXR0b25Hcm91cCwgQ2lyY3VsYXJQcm9ncmVzcywgQ2hlY2tib3gsIFxyXG4gICAgRGlhbG9nLCBEaWFsb2dBY3Rpb25zLCBEaWFsb2dDb250ZW50LCBEaWFsb2dDb250ZW50VGV4dCwgXHJcbiAgICBEaWFsb2dUaXRsZSwgRGl2aWRlciwgRmFiLCBJY29uQnV0dG9uLFxyXG4gICAgTWVudSwgTWVudUl0ZW0sIFBhcGVyLCBQb3BvdmVyLFxyXG4gICAgVGFibGUsIFRhYmxlQm9keSwgVGFibGVDZWxsLCBUYWJsZUhlYWQsIFRhYmxlUm93LCBUb29sYmFyXHJcbn0gZnJvbSBcIkBtYXRlcmlhbC11aS9jb3JlXCI7XHJcbmltcG9ydCB7IEVzdGFkb1ZhcmlhYmxlLCBGb3JtU3RydWN0dXJlU3RhdGUgfSBmcm9tIFwicm93LXZhbGlkYXRvclwiO1xyXG5pbXBvcnQgeyBDU1NQcm9wZXJ0aWVzIH0gZnJvbSBcIkBtYXRlcmlhbC11aS9jb3JlL3N0eWxlcy93aXRoU3R5bGVzXCI7XHJcblxyXG5pbXBvcnQgeyBcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvLCBzZXRBdHRyRGlzdGludG8sIHNldFZhbG9yRGlzdGludG8sIGRpc3BhdGNoQnlQYXNzLCBcclxuICAgIGdldERpcnR5LCBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcixcclxuICAgIGdldEZ1bmNpb25IYWJpbGl0YXIsIFxyXG4gICAgZ2V0RXN0cnVjdHVyYSwgXHJcbiAgICBkZWZPcGVyYXRpdm8sXHJcbiAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zLFxyXG4gICAgbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5LCBcclxuICAgIGNhbGN1bGFyRWxlbWVudG9FbmZvY2FkbyxcclxuICAgIGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLFxyXG4gICAgYWNjaW9uX2lkX3ByZWd1bnRhLFxyXG4gICAgYWNjaW9uX2FncmVnYXJfZm9ybXVsYXJpbyxcclxuICAgIE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8sXHJcbiAgICBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVU1xyXG59IGZyb20gXCIuL2J5cGFzcy1mb3JtdWxhcmlvXCJcclxuXHJcbmltcG9ydCB7aHRtbCwgSHRtbFRhZ30gZnJvbSBcImpzLXRvLWh0bWxcIjtcclxuXHJcbmZ1bmN0aW9uIGJyZWFrZWFibGVUZXh0KHRleHQ6c3RyaW5nfG51bGwpOnN0cmluZ3x1bmRlZmluZWQ7XHJcbmZ1bmN0aW9uIGJyZWFrZWFibGVUZXh0KHRleHQ6c3RyaW5nfG51bGwsIGRpY2Npb25hcmlvPzp7W2NsYXZlOnN0cmluZ106UmVhY3QuUmVhY3ROb2RlfSl7XHJcbiAgICBpZih0eXBlb2YgdGV4dCAhPSBcInN0cmluZ1wiKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFwvL2csXCIvXFx1MjA2M1wiKS5yZXBsYWNlKC9cXC9cXHUyMDYzKFxcdylcXGIvZywnLyQxJyk7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9fX18qL2csKHRvZG8pPT5gWyR7dG9kb31dYCkucmVwbGFjZSgvXFxAXFx3K1xcQC9nLCh0b2RvKT0+YFske3RvZG99XWApO1xyXG4gICAgaWYoIWRpY2Npb25hcmlvIHx8IHRydWUpIHJldHVybiB0ZXh0O1xyXG4gICAgLypcclxuICAgIHJldHVybiA8c3Bhbj57cGFydGVzLm1hcCgocGFydGU6c3RyaW5nLCBpOm51bWJlcikgPT4gPHNwYW4gc3R5bGU9e2klMj09MT97dGV4dERlY29yYXRpb246XCJ1bmRlcmxpbmVcIn06e319PiB7cGFydGUrXCIgXCJ9IDwvc3Bhbj4pfTwvc3Bhbj5cclxuICAgICovXHJcbn1cclxuXHJcbmNvbnN0IFZFUl9ET01JTklPID0gZmFsc2U7IC8vIGVsIGVuY3Vlc3RhZG9yIG5vIG5lY2VzaXRhIHZlciBlbCBkb21pbmlvIGVuIGNhZGEgZW5jdWVzdGEgcG9ycXVlIGVsIGRvbWluaW8gZGVwZW5kZSBkZWwgw6FyZWEgeSBzZSBkZWR1Y2UgZGVsIHByaW1lciBkw61naXRvIGRlbCBuw7ptZXJvIGRlIGVuY3Vlc3RhXHJcbi8vIG5vIHBvbmVyIFZFUl9ET01JTklPIGVuIHRydWUsIGNhbWJpYXIgcG9yIHVuYSB2YXJpYWJsZSBxdWUgc2UgZmlqZSBzaSBlbCBETSBlc3TDoSBlbiBtb2RvIHBydWViYSBvIGVuIG1vZG8gXCJkaXNlw7FvIGNvbmNlcHR1YWxcIlxyXG5cclxudmFyIGRlYmVTYWx0YXI6Ym9vbGVhbiA9IGZhbHNlO1xyXG5cclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKT0+e1xyXG4gICAgLypcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2OktleWJvYXJkRXZlbnQpPT57XHJcbiAgICAgICAgZGViZVNhbHRhciA9IGV2LmtleSA9PSAnRW50ZXInIHx8IGV2LmtleUNvZGUgPT0gMTM7XHJcbiAgICB9KVxyXG4gICAgKi9cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpPT57XHJcbiAgICAgICAgZGViZVNhbHRhciA9IGZhbHNlO1xyXG4gICAgfSlcclxufSlcclxuXHJcbi8vIC8qXHJcblxyXG50eXBlIENvbW1vbkF0dHJpYnV0ZXMgPSB7Y2xhc3NOYW1lPzpzdHJpbmcsc3R5bGU/OkNTU1Byb3BlcnRpZXMsaWQ/OnN0cmluZywgdGFiSW5kZXg/Om51bWJlcn0gLy8gQ1NTUHJvcGVydGllc1xyXG50eXBlIENvbG9yVmFsdWVzID0gJ3ByaW1hcnknfCdzZWNvbmRhcnknfCdkZWZhdWx0J3wnaW5oZXJpdCdcclxuXHJcbmV4cG9ydCB0eXBlIExpYnJlRGVzcGxpZWd1ZVR5cGUgPSAocHJvcHM6e1xyXG4gICAga2V5OnN0cmluZ1xyXG4gICAgY2FzaWxsZXJvOkxpYnJlXHJcbiAgICBmb3JtdWxhcmlvOkZvcm11bGFyaW9cclxuICAgIGZvclBrOkZvclBrXHJcbn0pPT5KU1guRWxlbWVudDtcclxuXHJcbnZhciBMaWJyZURlc3BsaWVndWU6IExpYnJlRGVzcGxpZWd1ZVR5cGVcclxuXHJcbmNvbnN0IEJ1dHRvbiA9ICh7dmFyaWFudCwgb25DbGljaywgZGlzYWJsZWQsIGNoaWxkcmVuLCBjbGFzc05hbWUsIGNvbG9yLCBzaXplLCBcclxuICAgICAgICBkaXNhYmxlRWxldmF0aW9uLCBkaXNhYmxlRm9jdXNSaXBwbGUsIGRpc2FibGVSaXBwbGUsIFxyXG4gICAgICAgIC4uLm90aGVyXHJcbiAgICB9OntcclxuICAgIHZhcmlhbnQ/OnN0cmluZyxcclxuICAgIGNvbG9yPzpDb2xvclZhbHVlcyxcclxuICAgIG9uQ2xpY2s/OlJlYWN0Lk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxCdXR0b25FbGVtZW50PiwgLy8gIChldmVudDpNb3VzZUV2ZW50LyogPEhUTUxCdXR0b25FbGVtZW50LCBNb3VzZUV2ZW50PiovKT0+dm9pZCxcclxuICAgIGRpc2FibGVkPzpib29sZWFuXHJcbiAgICBjaGlsZHJlbjphbnksXHJcbiAgICBjbGFzc05hbWU/OnN0cmluZyxcclxuICAgIHNpemU/OidzbWFsbCcsXHJcbiAgICBkaXNhYmxlRWxldmF0aW9uPzphbnksIGRpc2FibGVGb2N1c1JpcHBsZT86YW55LCBkaXNhYmxlUmlwcGxlPzphbnksXHJcbn0gJiBDb21tb25BdHRyaWJ1dGVzKT0+PGJ1dHRvbiBcclxuICAgIHsuLi5vdGhlcn1cclxuICAgIGNsYXNzTmFtZT17YGJ0biBidG4ke3ZhcmlhbnQ9PSdjb250YWluZWQnPycnOictJysodmFyaWFudD09J291dGxpbmVkJz8nb3V0bGluZSc6dmFyaWFudCl9LSR7KGNvbG9yPT0nZGVmYXVsdCcgfHwgY29sb3I9PSdpbmhlcml0Jz8nc2Vjb25kYXJ5Jzpjb2xvcj09J3NlY29uZGFyeSc/J2Rhbmdlcic6Y29sb3IpfHwnc2Vjb25kYXJ5J30gJHtjbGFzc05hbWV8fCcnfSAke3NpemU9PSdzbWFsbCc/J2J0bi1zbSc6Jyd9YH1cclxuICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgIG9uQ2xpY2s9e29uQ2xpY2t9XHJcbj57Y2hpbGRyZW59PC9idXR0b24+O1xyXG5cclxuY29uc3QgQnV0dG9uMiA9ICh7dmFyaWFudCwgb25DbGljaywgZGlzYWJsZWQsIGNoaWxkcmVuLCBjbGFzc05hbWUsIGNvbG9yLCBzaXplLCAuLi5vdGhlcn06e1xyXG4gICAgdmFyaWFudD86c3RyaW5nLFxyXG4gICAgY29sb3I/OkNvbG9yVmFsdWVzLFxyXG4gICAgb25DbGljaz86KCk9PnZvaWQsXHJcbiAgICBkaXNhYmxlZD86Ym9vbGVhblxyXG4gICAgY2hpbGRyZW46YW55LFxyXG4gICAgY2xhc3NOYW1lPzpzdHJpbmcsXHJcbiAgICBzaXplPzonc21hbGwnLFxyXG4gICAgJGF0dHJzPzp7fVxyXG59ICYgQ29tbW9uQXR0cmlidXRlcyk9Pmh0bWwuYnV0dG9uKHtcclxuICAgIC4uLm90aGVyLFxyXG4gICAgY2xhc3M6IGBidG4gYnRuJHt2YXJpYW50PT0nY29udGFpbmVkJz8nJzonLScrKHZhcmlhbnQ9PSdvdXRsaW5lZCc/J291dGxpbmUnOnZhcmlhbnQpfS0keyhjb2xvcj09J2RlZmF1bHQnIHx8IGNvbG9yPT0naW5oZXJpdCc/J3NlY29uZGFyeSc6Y29sb3I9PSdzZWNvbmRhcnknPydkYW5nZXInOmNvbG9yKXx8J3NlY29uZGFyeSd9ICR7Y2xhc3NOYW1lfHwnJ30gJHtzaXplPT0nc21hbGwnPydidG4tc20nOicnfWAsXHJcbiAgICBkaXNhYmxlZCxcclxuICAgICRvbjp7Y2xpY2s6b25DbGlja31cclxufSwgY2hpbGRyZW4pO1xyXG5cclxuXHJcbmNvbnN0IFRleHRGaWVsZCA9IChwcm9wczp7XHJcbiAgICBpZDpzdHJpbmcsXHJcbiAgICBkaXNhYmxlZD86Ym9vbGVhbixcclxuICAgIGNsYXNzTmFtZT86c3RyaW5nLFxyXG4gICAgYXV0b0ZvY3VzPzpib29sZWFuLFxyXG4gICAgZnVsbFdpZHRoOmJvb2xlYW5cclxuICAgIGlucHV0UHJvcHM/OmFueSxcclxuICAgIHZhbHVlPzphbnksXHJcbiAgICB0eXBlOmFueSxcclxuICAgIGxhYmVsPzpzdHJpbmcsXHJcbiAgICBlcnJvcj86Ym9vbGVhbixcclxuICAgIGhlbHBlclRleHQ/OnN0cmluZyxcclxuICAgIG11bHRpbGluZT86Ym9vbGVhbixcclxuICAgIG9uQ2hhbmdlPzooZXZlbnQ6YW55KT0+dm9pZCxcclxuICAgIG9uRm9jdXM/OihldmVudDphbnkpPT52b2lkLFxyXG4gICAgb25CbHVyPzooZXZlbnQ6YW55LCB2YWxvcjphbnkpPT52b2lkLFxyXG4gICAgLy8gb25LZXlEb3duPzooZXZlbnQ6S2V5Ym9hcmRFdmVudCk9PnZvaWQgLy8gS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD5cclxuICAgIG9uS2V5RG93bj86UmVhY3QuS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD5cclxufSk9PjxpbnB1dFxyXG4gICAgaWQ9e3Byb3BzLmlkfVxyXG4gICAgZGlzYWJsZWQ9e3Byb3BzLmRpc2FibGVkfVxyXG4gICAgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9XHJcbiAgICBhdXRvRm9jdXM9e3Byb3BzLmF1dG9Gb2N1c31cclxuICAgIHZhbHVlPXtwcm9wcy52YWx1ZX0gXHJcbiAgICB0eXBlPXtwcm9wcy50eXBlfVxyXG4gICAgb25DaGFuZ2U9e3Byb3BzLm9uQ2hhbmdlfVxyXG4gICAgb25Gb2N1cz17cHJvcHMub25Gb2N1c31cclxuICAgIG9uQmx1cj17KGV2dCk9PnByb3BzLm9uQmx1cj8uKGV2dCwgZXZ0LnRhcmdldC52YWx1ZSl9XHJcbiAgICBvbktleURvd249e3Byb3BzLm9uS2V5RG93bn1cclxuICAgIHBsYWNlaG9sZGVyPXtwcm9wcy5sYWJlbH1cclxuLz47XHJcblxyXG5jb25zdCBUeXBvZ3JhcGh5ID0gKHtjaGlsZHJlbiwgLi4ub3RoZXJzfTp7XHJcbiAgICBjaGlsZHJlbjphbnksXHJcbiAgICBjb21wb25lbnQ/OnN0cmluZ1xyXG4gICAgdmFyaWFudD86J2g2J1xyXG59JkNvbW1vbkF0dHJpYnV0ZXMpPT5SZWFjdC5jcmVhdGVFbGVtZW50KG90aGVycy52YXJpYW50fHxvdGhlcnMuY29tcG9uZW50fHwnZGl2JyxvdGhlcnMsY2hpbGRyZW4pO1xyXG5cclxuZnVuY3Rpb24gR3JpZChwcm9wczp7XHJcbiAgICBjb250YWluZXI/OmJvb2xlYW4sXHJcbiAgICBzcGFjaW5nPzpudW1iZXIsXHJcbiAgICBpdGVtPzpib29sZWFuLFxyXG4gICAgd3JhcD86J3dyYXAnfCdub3dyYXAnLFxyXG4gICAgZGlyZWN0aW9uPzoncm93J3wnY29sdW1uJ1xyXG4gICAgYWxpZ25JdGVtcz86J3N0cmV0Y2gnIHwgJ2ZsZXgtc3RhcnQnIHwgJ2ZsZXgtZW5kJyB8ICdjZW50ZXInIHwgJ2Jhc2VsaW5lJyxcclxuICAgIGNoaWxkcmVuOmFueSxcclxuICAgIHhzPzpudW1iZXIsXHJcbiAgICBzbT86bnVtYmVyLFxyXG59JkNvbW1vbkF0dHJpYnV0ZXMpe1xyXG4gICAgdmFyIHtjb250YWluZXIsIGl0ZW0sIHdyYXAsIGRpcmVjdGlvbiwgYWxpZ25JdGVtcywgY2hpbGRyZW4sIGNsYXNzTmFtZSwgeHMsIHNtLCBzcGFjaW5nLCAuLi5vdGhlcn0gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2XHJcbiAgICB7Li4ub3RoZXJ9XHJcbiAgICBjbGFzc05hbWU9e2Ake2NsYXNzTmFtZXx8Jyd9ICR7eHMhPW51bGw/J2dyaWQteHMtJyt4czonJ30gJHtzbSE9bnVsbD8nZ3JpZC1zbS0nK3NtOicnfWB9XHJcbiAgICBzdHlsZT17Y29udGFpbmVyP3tcclxuICAgICAgICBkaXNwbGF5OidmbGV4JyxcclxuICAgICAgICBmbGV4V3JhcDp3cmFwLFxyXG4gICAgICAgIGZsZXhEaXJlY3Rpb246ZGlyZWN0aW9uLFxyXG4gICAgICAgIGFsaWduSXRlbXM6YWxpZ25JdGVtcyxcclxuICAgICAgICBtYXJnaW46c3BhY2luZyE9bnVsbD9zcGFjaW5nKjgrJ3B4Jzp1bmRlZmluZWRcclxuICAgIH06e1xyXG4gICAgfX1cclxuPntjaGlsZHJlbn08L2Rpdj5cclxufVxyXG5cclxudmFyIHAxMiA9ICdwMTInIGFzIElkVmFyaWFibGU7XHJcbnZhciBzcDIgPSAnc3AyJyBhcyBJZFZhcmlhYmxlO1xyXG52YXIgc3AzID0gJ3NwMycgYXMgSWRWYXJpYWJsZTtcclxudmFyIHNwNCA9ICdzcDQnIGFzIElkVmFyaWFibGU7XHJcbnZhciBzcDUgPSAnc3A1JyBhcyBJZFZhcmlhYmxlO1xyXG5cclxudmFyIGRpY2Npb25hcmlvID0ge31cclxuXHJcbi8qXHJcbi8vIGNvbnN0IHRha2VFbGVtZW50T3JEZWZhdWx0PEssIFQgZXh0ZW5kcyBbSyBpbl0sIEQ+KClcclxuZnVuY3Rpb24gaXNJbjxWLCBUPihrOmtleW9mIFQsIG9iamVjdDpUKTogb2JqZWN0W2tdIGlzIFZ7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG59XHJcbiovXHJcbmZ1bmN0aW9uIHRha2VFbGVtZW50T3JEZWZhdWx0PFYsSyBleHRlbmRzIHN0cmluZyxLTyBleHRlbmRzIHN0cmluZz4oazpLLCBvYmplY3Q6e1trIGluIEtPXTpWfSwgZGVmYXVsdFZhbHVlOlYpOlZ7XHJcbiAgICByZXR1cm4gayBpbiBvYmplY3QgPyBcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHBvciBhbGd1bmEgcmF6w7NuIFRTIG5vIHF1aWVyZSBlbnRlbmRlciBxdWUgc2kgayBlc3TDoSBlbiBvYmplY3QsIG9iamVjdFtrXSBleGlzdGVcclxuICAgICAgICBvYmplY3Rba10gXHJcbiAgICA6IGRlZmF1bHRWYWx1ZVxyXG59XHJcblxyXG5mdW5jdGlvbiBEZXNwbGllZ3VlRW5jYWJlemFkbyhwcm9wczp7Y2FzaWxsZXJvOkNhc2lsbGVyb0VuY2FiZXphYmxlLCBsZWVyPzpib29sZWFufSl7XHJcbiAgICBjb25zdCBmb3JQa051bGw9e30gYXMgRm9yUGs7XHJcbiAgICByZXR1cm4gPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17cHJvcHMuY2FzaWxsZXJvfSBsZWVyPXtwcm9wcy5sZWVyfSBmb3JQaz17Zm9yUGtOdWxsfS8+O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzdWJpckhhc3RhKGVsZW1lbnRvOkhUTUxFbGVtZW50fG51bGwsIGZ1bjooZWxlbWVudG86SFRNTEVsZW1lbnQpPT5ib29sZWFuKTpIVE1MRWxlbWVudHxudWxse1xyXG4gICAgaWYoZWxlbWVudG8gPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICBpZihmdW4oZWxlbWVudG8pKSByZXR1cm4gZWxlbWVudG87XHJcbiAgICByZXR1cm4gc3ViaXJIYXN0YShlbGVtZW50by5wYXJlbnRFbGVtZW50LCBmdW4pO1xyXG59XHJcblxyXG52YXIgZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyOkhUTUxFbGVtZW50fG51bGwgPSBudWxsO1xyXG5cclxuZnVuY3Rpb24gQm90b25Cb3JyYXIoe2lkLCB2YXJpYWJsZSwgZm9yUGssIHZhbG9yT3BjaW9ufTp7aWQ6c3RyaW5nLCB2YXJpYWJsZTpJZFZhcmlhYmxlLCBmb3JQazpGb3JQaywgdmFsb3JPcGNpb24/OmFueX0pe1xyXG4gICAgdmFyIGhhbmRsZUNsaWNrQm9ycmFyPSgpPT57XHJcbiAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHtyZXNwdWVzdGE6bnVsbCwgdmFyaWFibGU6dmFyaWFibGUsIGZvclBrOmZvclBrfSlcclxuICAgIH07XHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJib3Rvbi1ib3JyYXJcIj5cclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIGlkPXtpZH1cclxuICAgICAgICAgICAgbWktdmFyaWFibGU9e3ZhcmlhYmxlfVxyXG4gICAgICAgICAgICB2YWxvci1vcGNpb249e3ZhbG9yT3BjaW9ufVxyXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJib3Rvbi1vcGNpb24gYm90b24tb3BjaW9uLWJvcnJhclwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrQm9ycmFyfVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPElDT04uRGVsZXRlRm9yZXZlci8+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gU2FsdG9EZXNwbGllZ3VlKHtjYXNpbGxlcm8scHJlZmlqb306e2Nhc2lsbGVybzpQcmVndW50YXxPcGNpb258RmlsdHJvLCBwcmVmaWpvPzpzdHJpbmd9KXtcclxuICAgIHJldHVybiBjYXNpbGxlcm8uc2FsdG8/XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYXNlXCI+XHJcbiAgICAgICAgICAgIHtwcmVmaWpvPzxzcGFuIGNsYXNzTmFtZT1cInByZWZpam9cIj57cHJlZmlqb30gPC9zcGFuPjpudWxsfVxyXG4gICAgICAgICAgICA8SUNPTi5UcmVuZGluZ0ZsYXQgLz48c3Bhbj57Y2FzaWxsZXJvLnNhbHRvfTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDpudWxsXHJcbn1cclxuXHJcbmZ1bmN0aW9uIE9wY2lvbkRlc3BsaWVndWUocHJvcHM6e2Nhc2lsbGVybzpPcGNpb24sIHZhbG9yT3BjaW9uOm51bWJlciwgdmFyaWFibGU6SWRWYXJpYWJsZSwgZm9yUGs6Rm9yUGssIGxlZXI6Ym9vbGVhbiwgY29uQm90b25Cb3JyYXI6Ym9vbGVhbn0pe1xyXG4gICAgY29uc3Qge2Nhc2lsbGVyb30gPSBwcm9wcztcclxuICAgIHZhciBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgc2FsdG9BdXRvbWF0aWNvID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9PnN0YXRlLm9wY2lvbmVzLnNhbHRvQXV0b21hdGljbyk7XHJcbiAgICB2YXIgaGFuZGxlQ2xpY2s6UmVhY3QuTW91c2VFdmVudEhhbmRsZXI8SFRNTEJ1dHRvbkVsZW1lbnQ+ID0gYXN5bmMgKGV2ZW50KT0+e1xyXG4gICAgICAgIHZhciBjb250YWluZXIgPSBzdWJpckhhc3RhKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCwgZWxlbWVudG89PmVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygncHJlZ3VudGEnKSB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ211bHRpcGxlJykpIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgICAgICB2YXIgdGllbmUgPSBjb250YWluZXIuZ2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycpO1xyXG4gICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2VzdG95LWJvcnJhbmRvJywnTk8nKTtcclxuICAgICAgICBpZihlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIpe1xyXG4gICAgICAgICAgICBlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIuc2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycsJ05PJyk7XHJcbiAgICAgICAgICAgIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB7cmVjZW50TW9kaWZpZWQsIHNpZ3VpZW50ZVZhcmlhYmxlfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7cmVzcHVlc3RhOnByb3BzLnZhbG9yT3BjaW9uLCB2YXJpYWJsZTpwcm9wcy52YXJpYWJsZSwgZm9yUGs6cHJvcHMuZm9yUGt9KTtcclxuICAgICAgICBpZighcmVjZW50TW9kaWZpZWQpe1xyXG4gICAgICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycsdGllbmU9PSdTSSc/J05PJzonU0knKTtcclxuICAgICAgICAgICAgaWYodGllbmUhPSdTSScpe1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyPWNvbnRhaW5lcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBpZihzaWd1aWVudGVWYXJpYWJsZSAmJiBzYWx0b0F1dG9tYXRpY28pe1xyXG4gICAgICAgICAgICAgICAgdmFyIGJvdG9uU3R5bGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8uc3R5bGU7XHJcbiAgICAgICAgICAgICAgICBpZihib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJ2dyZWVuJztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKDEwMCk7XHJcbiAgICAgICAgICAgICAgICBpZihib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJ2JsdWUnO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgc2xlZXAoMTAwKTtcclxuICAgICAgICAgICAgICAgIGlmKGJvdG9uU3R5bGUpIGJvdG9uU3R5bGUuY29sb3IgPSAnZ3JlZW4nO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgc2xlZXAoMTAwKTtcclxuICAgICAgICAgICAgICAgIGlmKGJvdG9uU3R5bGUpIGJvdG9uU3R5bGUuY29sb3IgPSAnJztcclxuICAgICAgICAgICAgICAgIGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUoc2lndWllbnRlVmFyaWFibGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiA8R3JpZCBjbGFzc05hbWU9XCJvcGNpb25cIj4gXHJcbiAgICAgICAge3Byb3BzLmNvbkJvdG9uQm9ycmFyPzxCb3RvbkJvcnJhclxyXG4gICAgICAgICAgICBpZD17YG9wY2lvbi12YXItJHtwcm9wcy52YXJpYWJsZX0tJHtwcm9wcy52YWxvck9wY2lvbn0tYm9ycmFyYH1cclxuICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICB2YXJpYWJsZT17cHJvcHMudmFyaWFibGV9XHJcbiAgICAgICAgICAgIHZhbG9yT3BjaW9uPXtwcm9wcy52YWxvck9wY2lvbn1cclxuICAgICAgICAgICAgLz46bnVsbH1cclxuICAgICAgICA8QnV0dG9uIFxyXG4gICAgICAgICAgICBpZD17YG9wY2lvbi12YXItJHtwcm9wcy52YXJpYWJsZX0tJHtwcm9wcy52YWxvck9wY2lvbn1gfVxyXG4gICAgICAgICAgICBtaS12YXJpYWJsZT17cHJvcHMudmFyaWFibGV9XHJcbiAgICAgICAgICAgIHZhbG9yLW9wY2lvbj17cHJvcHMudmFsb3JPcGNpb259XHJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvdG9uLW9wY2lvbiBib3Rvbi1vcGNpb24tc2VsZWNjaW9uXCJcclxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XHJcbiAgICAgICAgICAgIHRhYkluZGV4PXstMX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxHcmlkIGNvbnRhaW5lciB3cmFwPVwibm93cmFwXCI+XHJcbiAgICAgICAgICAgICAgICA8R3JpZCBjbGFzc05hbWU9XCJpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8udmVyX2lkIHx8IGNhc2lsbGVyby5jYXNpbGxlcm99XHJcbiAgICAgICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgICAgICAgICA8R3JpZCBjbGFzc05hbWU9XCJvcGNpb24tdGV4dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBkZWJlLWxlZXI9e2Nhc2lsbGVyby5sZWVyPydTSSc6Y2FzaWxsZXJvLmxlZXI9PT1mYWxzZT8nTk8nOnByb3BzLmxlZXI/J1NJJzonTk8nfT57YnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLm5vbWJyZSl9PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8uYWNsYXJhY2lvbj9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgY2xhc3NOYW1lPSdhY2xhcmFjaW9uJz57YnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLmFjbGFyYWNpb24pfTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICA6bnVsbH1cclxuICAgICAgICAgICAgICAgIDwvR3JpZD5cclxuICAgICAgICAgICAgPC9HcmlkPlxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgIDxTYWx0b0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99Lz5cclxuICAgIDwvR3JpZD5cclxufVxyXG5pbnRlcmZhY2UgSWNhc2lsbGVyb0Nvbk9wY2lvbmVze1xyXG4gICAgdmFyX25hbWU6SWRWYXJpYWJsZSxcclxuICAgIGRlc3BsaWVndWVDb250ZW5pZG86J3ZlcnRpY2FsJ3wnaG9yaXpvbnRhbCd8bnVsbCxcclxuICAgIGNhc2lsbGVyb3M6T3BjaW9uW11cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIFNpTm9EZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm9Db25PcGNpb25lczpJY2FzaWxsZXJvQ29uT3BjaW9uZXMsIGZvclBrOkZvclBrLCBkZXNwbGllZ3VlQ29udGVuaWRvOid2ZXJ0aWNhbCd8J2hvcml6b250YWwnfSl7XHJcbiAgICByZXR1cm4gPE9wY2lvbmVzRGVzcGxpZWd1ZSBcclxuICAgICAgICBjYXNpbGxlcm9Db25PcGNpb25lcz17cHJvcHMuY2FzaWxsZXJvQ29uT3BjaW9uZXN9IFxyXG4gICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa30gXHJcbiAgICAgICAgbGVlcj17ZmFsc2V9XHJcbiAgICAgICAgZGVzcGxpZWd1ZUNvbnRlbmlkbz17cHJvcHMuZGVzcGxpZWd1ZUNvbnRlbmlkb31cclxuICAgIC8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShwcmVndW50YTpQcmVndW50YXxPcGNpb25NdWx0aXBsZXxDb25qdW50b1ByZWd1bnRhcyl7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIHJlc3B1ZXN0YXM6UmVzcHVlc3RhcywgZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgZWxlbWVudG86SFRNTERpdkVsZW1lbnRcclxuICAgICk9PntcclxuICAgICAgICB2YXIgdmFsb3JBY3R1YWwgPSBwcmVndW50YS52YXJfbmFtZSA9PSBudWxsID8gbnVsbCA6IHJlc3B1ZXN0YXNbcHJlZ3VudGEudmFyX25hbWVdO1xyXG4gICAgICAgIHZhciBmZWVkYmFja1JvdyA9IGZlZWRiYWNrRm9ybS5mZWVkYmFjaztcclxuICAgICAgICB2YXIgZmVlZGJhY2tWYXIgPSBwcmVndW50YS52YXJfbmFtZSA9PSBudWxsID8gbnVsbCA6IGZlZWRiYWNrUm93W3ByZWd1bnRhLnZhcl9uYW1lXTtcclxuICAgICAgICB2YXIgdGllbmVWYWxvcj12YWxvckFjdHVhbCE9bnVsbCAmJiBmZWVkYmFja1ZhciE9bnVsbD8oZmVlZGJhY2tWYXIuY29uUHJvYmxlbWE/J2ludmFsaWRvJzondmFsaWRvJyk6J05PJztcclxuICAgICAgICB2YXIgZXN0YWRvOkVzdGFkb1ZhcmlhYmxlOyBcclxuICAgICAgICBpZihwcmVndW50YS50aXBvdmFyKXtcclxuICAgICAgICAgICAgZXN0YWRvPWZlZWRiYWNrVmFyPy5lc3RhZG8hO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB2YXIgZmVlZGJhY2tNdWx0aSA9IHByZWd1bnRhLmNhc2lsbGVyb3MuZmlsdGVyKGM9PmMudmFyX25hbWUhPW51bGwpLnJlZHVjZSgocHYsIG9tKT0+e1xyXG4gICAgICAgICAgICAgICAgdmFyIGZiPWZlZWRiYWNrUm93Py5bb20udmFyX25hbWUhXSFcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGllbmVBY3R1YWw6IHB2LnRpZW5lQWN0dWFsIHx8IGZiLmVzdGFkbz09J2FjdHVhbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZXN0YVNhbHRlYWRhOiBwdi5lc3RhU2FsdGVhZGEgJiYgKGZiLmVzdGFkbz09J3NhbHRlYWRhJyB8fCBmYi5lc3RhZG89PSdmdWVyYV9kZV9mbHVqb19wb3Jfc2FsdG8nKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCB7dGllbmVBY3R1YWw6ZmFsc2UsIGVzdGFTYWx0ZWFkYTp0cnVlfSk7XHJcbiAgICAgICAgICAgIGVzdGFkbz1mZWVkYmFja011bHRpLnRpZW5lQWN0dWFsPydhY3R1YWwnOmZlZWRiYWNrTXVsdGkuZXN0YVNhbHRlYWRhPydzYWx0ZWFkYSc6J3RvZGF2aWFfbm8nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldEF0dHJEaXN0aW50byhlbGVtZW50bywgJ251ZXN0cm8tdmFsaWRhdG9yJywgZXN0YWRvKTtcclxuICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG8sICd0aWVuZS12YWxvcicsIHRpZW5lVmFsb3IpO1xyXG4gICAgICAgIHNldEF0dHJEaXN0aW50byhlbGVtZW50bywgJ2VzdGEtaW5oYWJpbGl0YWRhJywgZmVlZGJhY2tWYXI/LmluaGFiaWxpdGFkYT8nU0knOidOTycpO1xyXG4gICAgICAgIGlmKHByZWd1bnRhLnZhcl9uYW1lKXtcclxuICAgICAgICAgICAgdmFyIG9wY2lvbmVzOkhUTUxCdXR0b25FbGVtZW50W10gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlbGVtZW50by5xdWVyeVNlbGVjdG9yQWxsKGAuYm90b24tb3BjaW9uW21pLXZhcmlhYmxlPVwiJHtwcmVndW50YS52YXJfbmFtZX1cIl1gKSwwKTtcclxuICAgICAgICAgICAgdmFyIGVsZW1lbnRvT3BjaW9uOkhUTUxCdXR0b25FbGVtZW50O1xyXG4gICAgICAgICAgICBmb3IoZWxlbWVudG9PcGNpb24gb2Ygb3BjaW9uZXMpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbG9yT3BjaW9uID0gZWxlbWVudG9PcGNpb24uZ2V0QXR0cmlidXRlKCd2YWxvci1vcGNpb24nKTtcclxuICAgICAgICAgICAgICAgIHNldEF0dHJEaXN0aW50byhlbGVtZW50b09wY2lvbiwgJ29wY2lvbi1zZWxlY2Npb25hZGEnLCB2YWxvck9wY2lvbiA9PSB2YWxvckFjdHVhbCA/IFwiU0lcIjogXCJOT1wiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50b3NJbnB1dDpIVE1MSW5wdXRFbGVtZW50W10gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlbGVtZW50by5xdWVyeVNlbGVjdG9yQWxsKCcudmFyaWFibGUnKSk7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50b0lucHV0OkhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGZvcihlbGVtZW50b0lucHV0IG9mIGVsZW1lbnRvc0lucHV0KXtcclxuICAgICAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oZWxlbWVudG9JbnB1dCwgJ3ZhbHVlJywgdmFsb3JBY3R1YWwgPT0gbnVsbCA/ICcnIDogdmFsb3JBY3R1YWwudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGJvdG9uTnNOYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibnNuYy1wcmVndW50YS1cIitwcmVndW50YS52YXJfbmFtZSkhO1xyXG4gICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oYm90b25Oc05jLCAnb3BjaW9uLXNlbGVjY2lvbmFkYScsIHZhbG9yQWN0dWFsID09IChwcmVndW50YS52YWxvcl9uc19uYyA/PyAtOSkgPyBcIlNJXCIgOiBcIk5PXCIpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBPcGNpb25NdWx0aXBsZURlc3BsaWVndWUocHJvcHM6e29wY2lvbk06T3BjaW9uTXVsdGlwbGUsIGZvclBrOkZvclBrfSl7XHJcbiAgICBjb25zdCB7b3BjaW9uTX0gPSBwcm9wcztcclxuICAgIHZhciBpZCA9IGBvcGNpb25NLSR7b3BjaW9uTS5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZCwgXHJcbiAgICAgICAgZGlyZWN0OnRydWUsIFxyXG4gICAgICAgIGZ1bjogcmVnaXN0cmFkb3JEZVZhcmlhYmxlKG9wY2lvbk0pXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gXHJcbiAgICAgICAgaWQ9e2lkfVxyXG4gICAgICAgIGNhc2lsbGVybz17b3BjaW9uTX1cclxuICAgICAgICBkZXNwbGllZ3VlRW5jYWJlemFkbz0nbGF0ZXJhbCdcclxuICAgID5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgXHJcbiAgICAgICAgICAgIGNhc2lsbGVybz17b3BjaW9uTX0gXHJcbiAgICAgICAgICAgIHZlcklkR3Vpb249e3RydWV9IFxyXG4gICAgICAgICAgICBsZWVyPXtvcGNpb25NLmxlZXIhPT1mYWxzZX0gXHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAvPlxyXG4gICAgICAgIDxTaU5vRGVzcGxpZWd1ZSBcclxuICAgICAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e29wY2lvbk19IFxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3Byb3BzLm9wY2lvbk0uZGVzcGxpZWd1ZUNvbnRlbmlkbz8/J2hvcml6b250YWwnfVxyXG4gICAgICAgIC8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxudHlwZSBDYXNpbGxlcm9FbmNhYmV6YWJsZSA9IEZvcm11bGFyaW98QmxvcXVlfEZpbHRyb3xDb25qdW50b1ByZWd1bnRhc3xQcmVndW50YXxPcGNpb25NdWx0aXBsZXxQcmVndW50YVNpbXBsZXxDb25zaXN0ZW5jaWF8VGV4dG9cclxuXHJcbmZ1bmN0aW9uIEVuY2FiZXphZG9EZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86Q2FzaWxsZXJvRW5jYWJlemFibGUsIHZlcklkR3Vpb24/OmJvb2xlYW4sIGxlZXI/OmJvb2xlYW4sIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2Nhc2lsbGVybywgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIgY29uQ2FtcG9PcGNpb25lcyA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT5zdGF0ZS5vcGNpb25lcy5jb25DYW1wb09wY2lvbmVzKVxyXG4gICAgdmFyIGhhbmRsZUNsaWNrQm9ycmFyPSgpPT57XHJcbiAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHtyZXNwdWVzdGE6bnVsbCwgdmFyaWFibGU6Y2FzaWxsZXJvLnZhcl9uYW1lIGFzIElkVmFyaWFibGUsIGZvclBrOmZvclBrfSlcclxuICAgIH07XHJcbiAgICB2YXIgdmVyX2lkID0gY2FzaWxsZXJvLnZlcl9pZCA/PyBjYXNpbGxlcm8uY2FzaWxsZXJvO1xyXG4gICAgLy8gQHRzLWlnbm9yZSBubyBlc3TDoSBlbiB0b2RvcyBsb3MgY2FzaWxsZXJvcyBwZXJvIGFjw6EgcGFyYSBlbCBkZXNwbGllZ3VlIGRlIG1ldGFkYXRvcyBubyBpbXBvcnRhXHJcbiAgICB2YXIgY2FsY3VsYWRhID0gY2FzaWxsZXJvLmNhbGN1bGFkYTtcclxuICAgIHZhciBpZCA9IGBpZC1kaXYtJHtjYXNpbGxlcm8udmFyX25hbWV8fGNhc2lsbGVyby5jYXNpbGxlcm99YDtcclxuICAgIHZhciBpZEFjY2lvbmVzID0gXCJhY2Npb25lcy1cIitpZDtcclxuICAgIHJldHVybiA8ZGl2IFxyXG4gICAgICAgIGNsYXNzTmFtZT1cImVuY2FiZXphZG9cIiBcclxuICAgICAgICBkZWJlLWxlZXI9e3Byb3BzLmxlZXI/J1NJJzonTk8nfSBcclxuICAgID5cclxuICAgICAgICA8ZGl2IGlkPXtpZH0gY2xhc3NOYW1lPVwiaWQtZGl2XCIgdGl0bGU9e2Ake2Nhc2lsbGVyby5jYXNpbGxlcm99IC0gJHtjYXNpbGxlcm8udmFyX25hbWV9YH1cclxuICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZEFjY2lvbmVzKTtcclxuICAgICAgICAgICAgICAgIGRpdiEuc2V0QXR0cmlidXRlKFwiYWNjaW9uLXZpc2libGVcIiwgKDEtTnVtYmVyKGRpdiEuZ2V0QXR0cmlidXRlKFwiYWNjaW9uLXZpc2libGVcIikpKS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8uIFZlciBxdcOpIGhhY2Vtb3MgY3VhbmRvIHNlIHRvY2EgZWwgSUQgZGUgbGEgcHJlZ3V0bmFcclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9pZF9wcmVndW50YSwge3ByZWd1bnRhOiBjYXNpbGxlcm8uY2FzaWxsZXJvIGFzIElkUHJlZ3VudGEsIGZvclBrfSk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImlkXCI+XHJcbiAgICAgICAgICAgICAgICB7dmVyX2lkfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgeyhjYXNpbGxlcm8udGlwb3Zhcj09XCJzaV9ub1wifHxjYXNpbGxlcm8udGlwb3Zhcj09XCJvcGNpb25lc1wiKT88Q2FtcG8gZGlzYWJsZWQ9e2ZhbHNlfSBwcmVndW50YT17Y2FzaWxsZXJvfSBmb3JQaz17Zm9yUGt9IG1pbmk9e3RydWV9IGhpZGRlbj17IWNvbkNhbXBvT3BjaW9uZXMgJiYgJ3F1aXRhcid9Lz46bnVsbH1cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhY2Npb25lcy1wcmVndW50YVwiIGlkPXtpZEFjY2lvbmVzfSBhY2Npb24tdmlzaWJsZT1cIjBcIj5cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8udmFyX25hbWU/PGRpdj48QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9e1wiYm9ycmFyLXByZWd1bnRhLVwiK2Nhc2lsbGVyby52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICBtaS12YXJpYWJsZT17Y2FzaWxsZXJvLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm90b24tcHJlZ3VudGEtYm9ycmFyXCJcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja0JvcnJhcn1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5EZWxldGVGb3JldmVyLz5cclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPjwvZGl2PjpudWxsfVxyXG4gICAgICAgICAgICAgICAge2Nhc2lsbGVyby52YXJfbmFtZT8obnNfbmM9PjxkaXY+PEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIGlkPXtcIm5zbmMtcHJlZ3VudGEtXCIrY2FzaWxsZXJvLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIG1pLXZhcmlhYmxlPXtjYXNpbGxlcm8udmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3Rvbi1wcmVndW50YS1uc25jXCJcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwge3Jlc3B1ZXN0YTpuc19uYywgdmFyaWFibGU6Y2FzaWxsZXJvLnZhcl9uYW1lIGFzIElkVmFyaWFibGUsIGZvclBrOmZvclBrfSlcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIE5TL05DXHJcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj48L2Rpdj4pKGNhc2lsbGVyby52YWxvcl9uc19uYz8/LTkpOm51bGx9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibm9tYnJlLWRpdlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm5vbWJyZVwiPnticmVha2VhYmxlVGV4dChjYXNpbGxlcm8ubm9tYnJlKX08L2Rpdj5cclxuICAgICAgICAgICAge2Nhc2lsbGVyby5hY2xhcmFjaW9uP1xyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhY2xhcmFjaW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge2Nhc2lsbGVyby5zYWx0byAmJiBjYXNpbGxlcm8udGlwb2M9PSdGSUxUUk8nP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8U2FsdG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfSBwcmVmaWpvPXticmVha2VhYmxlVGV4dChjYXNpbGxlcm8uYWNsYXJhY2lvbil9Lz5cclxuICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKVxyXG4gICAgICAgICAgICAgICAgICAgIH0gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDpudWxsfVxyXG4gICAgICAgICAgICA8ZGl2IGxvcy1tZXRhZGF0b3M9XCJzaVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gZWwtbWV0YWRhdG89XCJ2YXJpYWJsZVwiPntjYXNpbGxlcm8udmFyX25hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAge2Nhc2lsbGVyby50aXBvdmFyICYmIGNhc2lsbGVyby50aXBvdmFyIT0nb3BjaW9uZXMnICYmIGNhc2lsbGVyby50aXBvdmFyIT0nc2lfbm8nP1xyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGVsLW1ldGFkYXRvPVwidGlwb3ZhclwiPntjYXNpbGxlcm8udGlwb3Zhcn08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA6bnVsbH1cclxuICAgICAgICAgICAgICAgIHsgICAvL0B0cy1pZ25vcmUgdW5hIG9wY2nDs24gbcO6bHRpcGxlIG51bmNhIGxvIGEgYSBzZXIsIG5vIHRpZW5lIGVsIGNhbXBvLCBubyBpbXBvcnRhXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLm9wdGF0aXZvPzxzcGFuIGVsLW1ldGFkYXRvPVwib3B0YXRpdmFcIj5vcHRhdGl2YTwvc3Bhbj46bnVsbFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAge2NhbGN1bGFkYT88c3BhbiBlbC1tZXRhZGF0bz1cImNhbGN1bGFkYVwiPmNhbGN1bGFkYTwvc3Bhbj46bnVsbH1cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8uZGVzcGxpZWd1ZU9jdWx0YT88c3BhbiBlbC1tZXRhZGF0bz1cIm9jdWx0YVwiPm9jdWx0YTwvc3Bhbj46bnVsbH1cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcj88c3BhbiBlbC1tZXRhZGF0bz1cImV4cHJlc2lvbl9oYWJpbGl0YXJcIj5oYWJpbGl0YToge2Nhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyfTwvc3Bhbj46bnVsbH1cclxuICAgICAgICAgICAgICAgIHsgICAvL0B0cy1pZ25vcmUgYWx0dW5vcyBjYXNpbGxlcm9zIG5vIHRpZW5lbiBlc3BlY2lhbCwgbm8gaW1wb3J0YSwgZXMgc29sbyBwYXJhIHBvbmVyIGxvcyBtZXRhZGF0b3NcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8uZXNwZWNpYWw/LmF1dG9pbmc/PHNwYW4gZWwtbWV0YWRhdG89XCJleHByZXNpb25fYXV0b2luZ1wiPmF1dG9pbmc6IHtjYXNpbGxlcm8uZXNwZWNpYWw/LmF1dG9pbmd9PC9zcGFuPjpudWxsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIERlc3BsZWdhckNvbmZpcm1hckJvcnJhclJlc3B1ZXN0YShwcm9wczp7Zm9yUGs6Rm9yUGssIHZhcmlhYmxlQm9ycmFyOklkVmFyaWFibGV9KXtcclxuICAgIHZhciBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZSghIXByb3BzLnZhcmlhYmxlQm9ycmFyKVxyXG4gICAgdmFyIGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IGhhbmRsZUNsb3NlID0gKCkgPT4ge1xyXG4gICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNPTkZJUk1BUl9CT1JSQVJfUkVTUFVFU1RBKHtmb3JQazpwcm9wcy5mb3JQaywgdmFyaWFibGU6bnVsbH0pKTtcclxuICAgICAgICBzZXRPcGVuKGZhbHNlKTtcclxuICAgIH1cclxuICAgIHJldHVybiA8UG9wb3ZlclxyXG4gICAgICAgICAgICBpZD17XCJwb3BvdmVyLWNvbmZpcm1hclwifVxyXG4gICAgICAgICAgICBvcGVuPXtvcGVufVxyXG4gICAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZX1cclxuICAgICAgICAgICAgYW5jaG9yT3JpZ2luPXt7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbDogJ2JvdHRvbScsXHJcbiAgICAgICAgICAgICAgICBob3Jpem9udGFsOiAnY2VudGVyJyxcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luPXt7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbDogJ3RvcCcsXHJcbiAgICAgICAgICAgICAgICBob3Jpem9udGFsOiAnbGVmdCcsXHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPiAgIFxyXG4gICAgICAgICAgICA8VHlwb2dyYXBoeT5MYSBwcmVndW50YSB0aWVuZSByZWdpc3RyYWRhIHVuYSByZXNwdWVzdGEgcXVlIG5vIGZ1ZSBkZXRlY3RhZGEgY29tbyBlcnLDs25lYTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb25maXJtYS1ib3RvbmVzXCI+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwic2Vjb25kYXJ5XCIgdmFyaWFudD1cIm91dGxpbmVkXCIgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICBpZihwcm9wcy52YXJpYWJsZUJvcnJhcil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7Zm9yUGs6cHJvcHMuZm9yUGssIHZhcmlhYmxlOnByb3BzLnZhcmlhYmxlQm9ycmFyLCByZXNwdWVzdGE6bnVsbH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB9fT5ib3JyYXIgcmVzcHVlc3RhPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIG9uQ2xpY2s9e2hhbmRsZUNsb3NlfT52b2x2ZXIgc2luIGJvcnJhcjwvQnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L1BvcG92ZXI+O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhck51ZXN0cmFMb25naXR1ZChsb25naXR1ZDpzdHJpbmcgfG51bGwpe1xyXG4gICAgcmV0dXJuIGxvbmdpdHVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKHNpZ3VpZW50ZVZhcmlhYmxlOklkVmFyaWFibGV8SWRGaW4pe1xyXG4gICAgZGViZVNhbHRhciA9IGZhbHNlO1xyXG4gICAgdmFyIHt0b3AsIGVuZm9jYWRvLCBlbGVtZW50b0lucHV0VmFyaWFibGV9ID0gY2FsY3VsYXJFbGVtZW50b0VuZm9jYWRvKHNpZ3VpZW50ZVZhcmlhYmxlKTtcclxuICAgIGlmKHRvcCAhPSBudWxsICYmIHRvcD4wICYmICFlbmZvY2Fkbyl7XHJcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKHt0b3AsIGxlZnQ6MCwgYmVoYXZpb3I6J3Ntb290aCd9KTtcclxuICAgIH1cclxuICAgIGVsZW1lbnRvSW5wdXRWYXJpYWJsZT8uZm9jdXMoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gQ2FtcG8ocHJvcHM6e2Rpc2FibGVkOmJvb2xlYW4sIHByZWd1bnRhOlByZWd1bnRhU2ltcGxlfFByZWd1bnRhQ29uT3BjaW9uZXN8UHJlZ3VudGFDb25TaU5vfE9wY2lvbk11bHRpcGxlLCBmb3JQazpGb3JQaywgbWluaT86Ym9vbGVhbiwgaGlkZGVuPzpib29sZWFufCdxdWl0YXInfSl7XHJcbiAgICB2YXIge3ByZWd1bnRhLCBkaXNhYmxlZCwgbWluaSB9ID0gcHJvcHM7XHJcbiAgICB2YXIge3NhbHRvQXV0b21hdGljbywgY29uQ2FtcG9PcGNpb25lc30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+c3RhdGUub3BjaW9uZXMpO1xyXG4gICAgY29uc3QgbG9uZ2l0dWQgPSBtaW5pID8gcHJlZ3VudGEuY2FzaWxsZXJvcy5yZWR1Y2UoKGFjdW0sIG8pPT5NYXRoLm1heChvLmNhc2lsbGVyby50b1N0cmluZygpLmxlbmd0aCwgYWN1bSksIDApIDogXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBtaW5pIGVzIHBhcmEgbG9zIG90cm9zXHJcbiAgICAgICAgcHJlZ3VudGEubG9uZ2l0dWQ7XHJcbiAgICAvLyB2YXIgW3ZhbG9yLCBzZXRWYWxvcl0gPSB1c2VTdGF0ZShwcm9wcy52YWxvcik7XHJcbiAgICB2YXIgW2VkaXRhbmRvLCBzZXRFZGl0YW5kb10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICAvLyB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgLy8gICAgIHNldFZhbG9yKHByb3BzLnZhbG9yKVxyXG4gICAgLy8gfSwgW3Byb3BzLnZhbG9yXSk7XHJcbiAgICBjb25zdCBpbnB1dFByb3BzID0ge1xyXG4gICAgICAgIG1heExlbmd0aDogbG9uZ2l0dWQsXHJcbiAgICB9O1xyXG4gICAgY29uc3Qgb25DaGFuZ2U9KG51ZXZvVmFsb3I6VmFsb3J8dHlwZW9mIE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8pPT57XHJcbiAgICAgICAgdmFyIHtzaWd1aWVudGVWYXJpYWJsZX0gPSBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwge2ZvclBrOnByb3BzLmZvclBrLCB2YXJpYWJsZTpwcmVndW50YS52YXJfbmFtZSwgcmVzcHVlc3RhOm51ZXZvVmFsb3J9KTtcclxuICAgICAgICBpZihzaWd1aWVudGVWYXJpYWJsZSAmJiBkZWJlU2FsdGFyKXtcclxuICAgICAgICAgICAgZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShzaWd1aWVudGVWYXJpYWJsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHZhciBudWVzdHJhTG9uZ2l0dWQgPSBjYWxjdWxhck51ZXN0cmFMb25naXR1ZChsb25naXR1ZClcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNhbXBvXCIgbnVlc3RyYS1sb25naXR1ZD17bnVlc3RyYUxvbmdpdHVkfSBzdHlsZT17cHJvcHMuaGlkZGVuPT0ncXVpdGFyJz97ZGlzcGxheTonbm9uZSd9OnByb3BzLmhpZGRlbj97dmlzaWJpbGl0eTonaGlkZGVuJ306dW5kZWZpbmVkfT5cclxuICAgICAgICB7bWluaT9udWxsOjxCb3RvbkJvcnJhclxyXG4gICAgICAgICAgICBpZD17YGJvcnJhci1hYmllcnRhLSR7cHJlZ3VudGEudmFyX25hbWV9YH1cclxuICAgICAgICAgICAgdmFyaWFibGU9e3ByZWd1bnRhLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgLz59XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbnB1dC1jYW1wb1wiPlxyXG4gICAgICAgICAgICA8VGV4dEZpZWxkIFxyXG4gICAgICAgICAgICAgICAgaWQ9e2B2YXItJHtwcmVndW50YS52YXJfbmFtZX1gfVxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidmFyaWFibGVcIiBcclxuICAgICAgICAgICAgICAgIC8vdmFyLWxlbmd0aD17cHJlZ3VudGEubG9uZ2l0dWR9IFxyXG4gICAgICAgICAgICAgICAgZnVsbFdpZHRoPXt0cnVlfVxyXG4gICAgICAgICAgICAgICAgaW5wdXRQcm9wcz17aW5wdXRQcm9wc31cclxuICAgICAgICAgICAgICAgIHR5cGU9e3ByZWd1bnRhLmRlc3BsaWVndWVUaXBvSW5wdXQ/P2FkYXB0YXJUaXBvVmFyQ2FzaWxsZXJvKHByZWd1bnRhLnRpcG92YXIpfVxyXG4gICAgICAgICAgICAgICAgb25LZXlEb3duPXsoZXZlbnQ6UmVhY3QuS2V5Ym9hcmRFdmVudCk9PntcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXNFbnRlciA9IChldmVudC5rZXkgPT0gJ0VudGVyJyB8fCBldmVudC5rZXlDb2RlID09IDEzKVxyXG4gICAgICAgICAgICAgICAgICAgIGRlYmVTYWx0YXIgPSBlc0VudGVyICYmIChzYWx0b0F1dG9tYXRpY28gfHwgY29uQ2FtcG9PcGNpb25lcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZXNFbnRlcil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldC5ibHVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgb25Gb2N1cz17KF9ldmVudCk9PnNldEVkaXRhbmRvKHRydWUpfVxyXG4gICAgICAgICAgICAgICAgb25CbHVyPXsoZXZlbnQsIHZhbG9yKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGV2ZW50Py5yZWxhdGVkVGFyZ2V0Py5nZXRBdHRyaWJ1dGUoJ2JvdG9uLWNvbmZpcm1hcicpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGViZVNhbHRhciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlKHZhbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRFZGl0YW5kbyhmYWxzZSlcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAge2Rpc2FibGVkIHx8IG1pbmk/bnVsbDpcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJib3Rvbi1jb25maXJtYXItY2FtcG9cIj5cclxuICAgICAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD17ZWRpdGFuZG8/XCJjb250YWluZWRcIjonb3V0bGluZWQnfSBzaXplPVwic21hbGxcIiBjb2xvcj17ZWRpdGFuZG8/J3ByaW1hcnknOidkZWZhdWx0J31cclxuICAgICAgICAgICAgICAgICAgICBib3Rvbi1jb25maXJtYXI9e3ByZWd1bnRhLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIHRhYkluZGV4PXstMX1cclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZShOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdGFuZG8oZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgID48SUNPTi5DaGVjay8+PC9CdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5pbnRlcmZhY2UgSWNhc2lsbGVyb0Nvbk9wY2lvbmVze1xyXG4gICAgdmFyX25hbWU6SWRWYXJpYWJsZSxcclxuICAgIGNhc2lsbGVyb3M6T3BjaW9uW11cclxufVxyXG5cclxuZnVuY3Rpb24gT3BjaW9uZXNEZXNwbGllZ3VlKFxyXG4gICAge2Nhc2lsbGVyb0Nvbk9wY2lvbmVzLCBmb3JQaywgIGxlZXIsIGRlc3BsaWVndWVDb250ZW5pZG99OlxyXG4gICAge2Nhc2lsbGVyb0Nvbk9wY2lvbmVzOkljYXNpbGxlcm9Db25PcGNpb25lcywgZm9yUGs6Rm9yUGssIGxlZXI6Ym9vbGVhbiwgZGVzcGxpZWd1ZUNvbnRlbmlkbzondmVydGljYWwnfCdob3Jpem9udGFsJ31cclxuKXtcclxuICAgIGNvbnN0IGRlc3BsZWdhck90cm9zID0gKG9wY2lvbjpPcGNpb24sIHNvbG9QYXJhRGVzcGxpZWd1ZTondmVydGljYWwnfCdob3Jpem9udGFsJ3xudWxsKSA9PiBvcGNpb24uY2FzaWxsZXJvcy5tYXAoKHN1YlByZWd1bnRhOlByZWd1bnRhKT0+KFxyXG4gICAgICAgIHNvbG9QYXJhRGVzcGxpZWd1ZSA9PSBudWxsIHx8IHNvbG9QYXJhRGVzcGxpZWd1ZSA9PSBzdWJQcmVndW50YS5kZXNwbGllZ3VlQ29udGVuaWRvID9cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm90cm9zLWVzcGVjaWZpY2FyXCIga2V5PXtzdWJQcmVndW50YS5pZF9jYXNpbGxlcm99PlxyXG4gICAgICAgICAgICA8UHJlZ3VudGFEZXNwbGllZ3VlIFxyXG4gICAgICAgICAgICAgICAgcHJlZ3VudGE9e3N1YlByZWd1bnRhfSBcclxuICAgICAgICAgICAgICAgIGZvclBrPXtmb3JQa30gXHJcbiAgICAgICAgICAgICAgICBkZXNwbGllZ3VlRW5jYWJlemFkbz0nc3VwZXJpb3InXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+Om51bGxcclxuICAgICkpXHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJjb250ZW5pZG9cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvcGNpb25lc1wiIGRlc3BsaWVndWUtY29udGVuaWRvPXtkZXNwbGllZ3VlQ29udGVuaWRvPz8ndmVydGljYWwnfT5cclxuICAgICAgICAgICAge2Nhc2lsbGVyb0Nvbk9wY2lvbmVzLmNhc2lsbGVyb3MubWFwKChvcGNpb246T3BjaW9uLCBpOm51bWJlcik9PlxyXG4gICAgICAgICAgICAgICAgPEdyaWQga2V5PXtvcGNpb24uaWRfY2FzaWxsZXJvfSBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgb2N1bHRhci1zYWx0ZWFkYT17b3BjaW9uLmRlc3BsaWVndWVPY3VsdGE/KG9wY2lvbi5leHByZXNpb25faGFiaWxpdGFyX2pzPydJTkhBQklMSVRBUic6J1NJJyk6J05PJ31cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8T3BjaW9uRGVzcGxpZWd1ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvPXtvcGNpb259IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZT17Y2FzaWxsZXJvQ29uT3BjaW9uZXMudmFyX25hbWV9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxvck9wY2lvbj17b3BjaW9uLmNhc2lsbGVyb31cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e2ZvclBrfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVlcj17bGVlcn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uQm90b25Cb3JyYXI9e2k9PTAgfHwgZGVzcGxpZWd1ZUNvbnRlbmlkbyE9J2hvcml6b250YWwnfVxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAge2Rlc3BsaWVndWVDb250ZW5pZG89PSdob3Jpem9udGFsJz9udWxsOmRlc3BsZWdhck90cm9zKG9wY2lvbixudWxsKX1cclxuICAgICAgICAgICAgICAgIDwvR3JpZD5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB7ZGVzcGxpZWd1ZUNvbnRlbmlkbz09J2hvcml6b250YWwnP2Nhc2lsbGVyb0Nvbk9wY2lvbmVzLmNhc2lsbGVyb3MubWFwKChvcGNpb246T3BjaW9uKT0+XHJcbiAgICAgICAgICAgIGRlc3BsZWdhck90cm9zKG9wY2lvbixudWxsKVxyXG4gICAgICAgICk6bnVsbH1cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5jb25zdCBub21icmVDYXNpbGxlcm89e1xyXG4gICAgRjogJ2Zvcm11bGFyaW8nLFxyXG4gICAgQjogJ2Jsb3F1ZScsXHJcbiAgICBQOiAncHJlZ3VudGEnLFxyXG4gICAgQ1A6ICdjb25qdW50b3ByZWd1bnRhcycsXHJcbiAgICBPOiAnb3BjaW9uJyxcclxuICAgIE9NOiAnbXVsdGlwbGUnLFxyXG4gICAgRklMVFJPOiAnZmlsdHJvJyxcclxuICAgIENPTlM6ICdjb25zaXN0ZW5jaWEnLFxyXG4gICAgQkY6ICdib3RvbmZvcm11bGFyaW8nLFxyXG4gICAgVEVYVE86ICdhY2xhcmFjaW9uc3VwZXJpb3InLFxyXG59XHJcblxyXG5mdW5jdGlvbiBEZXNwbGVnYXJDYXNpbGxlcm8ocHJvcHM6e1xyXG4gICAgY2FzaWxsZXJvOlByZWd1bnRhfEJsb3F1ZXxGaWx0cm98Q29uanVudG9QcmVndW50YXN8Qm90b25Gb3JtdWxhcmlvfENvbnNpc3RlbmNpYXxPcGNpb25NdWx0aXBsZXxUZXh0byxcclxuICAgIGlkPzpzdHJpbmcsXHJcbiAgICBzdHlsZT86UmVhY3QuQ1NTUHJvcGVydGllcyxcclxuICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvPzonbGF0ZXJhbCd8J3N1cGVyaW9yJ1xyXG4gICAgY2hpbGRyZW46UmVhY3QuUmVhY3ROb2RlfFJlYWN0LlJlYWN0Tm9kZVtdLFxyXG4gICAgXCJvY3VsdGFyLXNhbHRlYWRhXCI/OidTSSd8J05PJ3wnSU5IQUJJTElUQVInfHVuZGVmaW5lZFxyXG59KXtcclxuICAgIHJldHVybiA8ZGl2IFxyXG4gICAgICAgIGtleT17YCR7cHJvcHMuY2FzaWxsZXJvLnRpcG9jfS0ke3Byb3BzLmlkfHxwcm9wcy5jYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWB9XHJcbiAgICAgICAgY2xhc3NOYW1lPXtgY2FzaWxsZXJvICR7bm9tYnJlQ2FzaWxsZXJvW3Byb3BzLmNhc2lsbGVyby50aXBvY119YH1cclxuICAgICAgICBpZD17cHJvcHMuaWR9XHJcbiAgICAgICAgc3R5bGU9e3Byb3BzLnN0eWxlfVxyXG4gICAgICAgIGRlc3BsaWVndWUtZW5jYWJlemFkbz17cHJvcHMuY2FzaWxsZXJvLmRlc3BsaWVndWVFbmNhYmV6YWRvPz9wcm9wcy5kZXNwbGllZ3VlRW5jYWJlemFkbz8/J3N1cGVyaW9yJ31cclxuICAgICAgICBvY3VsdGFyLXNhbHRlYWRhPXtwcm9wc1tcIm9jdWx0YXItc2FsdGVhZGFcIl19XHJcbiAgICA+e3Byb3BzLmNoaWxkcmVufTwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBQcmVndW50YURlc3BsaWVndWUocHJvcHM6e1xyXG4gICAgcHJlZ3VudGE6UHJlZ3VudGEsIFxyXG4gICAgZm9yUGs6Rm9yUGssIFxyXG4gICAgZGVzcGxpZWd1ZUVuY2FiZXphZG86J2xhdGVyYWwnfCdzdXBlcmlvcidcclxufSl7XHJcbiAgICB2YXIge3ByZWd1bnRhfSA9IHByb3BzO1xyXG4gICAgdmFyIGRpc3BhdGNoPXVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgZXN0YWRvOkVzdGFkb1ZhcmlhYmxlO1xyXG4gICAgdmFyIGlkID0gYHByZWd1bnRhLSR7cHJlZ3VudGEuaWRfY2FzaWxsZXJvfWBcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZCwgXHJcbiAgICAgICAgZGlyZWN0OnRydWUsIFxyXG4gICAgICAgIGZ1bjogcmVnaXN0cmFkb3JEZVZhcmlhYmxlKHByZWd1bnRhKVxyXG4gICAgfSlcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvXHJcbiAgICAgICAgaWQ9e2lkfVxyXG4gICAgICAgIGNhc2lsbGVybz17cHJlZ3VudGF9XHJcbiAgICAgICAgbnVlc3Ryby10aXBvdmFyPXtwcmVndW50YS50aXBvdmFyfHxcIm11bHRpcGxlXCJ9IFxyXG4gICAgICAgIG9jdWx0YXItc2FsdGVhZGE9e3ByZWd1bnRhLmRlc3BsaWVndWVPY3VsdGE/KHByZWd1bnRhLmV4cHJlc2lvbl9oYWJpbGl0YXJfanM/J0lOSEFCSUxJVEFSJzonU0knKTonTk8nfVxyXG4gICAgICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvPXtwcm9wcy5kZXNwbGllZ3VlRW5jYWJlemFkb31cclxuICAgID5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgXHJcbiAgICAgICAgICAgIGNhc2lsbGVybz17cHJlZ3VudGF9IFxyXG4gICAgICAgICAgICBsZWVyPXtwcmVndW50YS5sZWVyIT09ZmFsc2V9ICBcclxuICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250ZW5pZG9cIj57XHJcbiAgICAgICAgICAgIHByZWd1bnRhLnRpcG92YXI9PVwic2lfbm9cIj88R3JpZCBjb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8U2lOb0Rlc3BsaWVndWUgXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e3ByZWd1bnRhfSBcclxuICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9IFxyXG4gICAgICAgICAgICAgICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3Byb3BzLnByZWd1bnRhLmRlc3BsaWVndWVDb250ZW5pZG8/Pyd2ZXJ0aWNhbCd9XHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L0dyaWQ+OlxyXG4gICAgICAgICAgICBwcmVndW50YS50aXBvdmFyPT1cIm9wY2lvbmVzXCIgP1xyXG4gICAgICAgICAgICAgICAgPE9wY2lvbmVzRGVzcGxpZWd1ZSBcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm9Db25PcGNpb25lcz17cHJlZ3VudGF9IFxyXG4gICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa30gXHJcbiAgICAgICAgICAgICAgICAgICAgbGVlcj17ISFwcmVndW50YS5sZWVyfVxyXG4gICAgICAgICAgICAgICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3ByZWd1bnRhLmRlc3BsaWVndWVDb250ZW5pZG8/Pyd2ZXJ0aWNhbCd9XHJcbiAgICAgICAgICAgICAgICAvPjpcclxuICAgICAgICAgICAgcHJlZ3VudGEudGlwb3Zhcj09bnVsbD9cclxuICAgICAgICAgICAgICAgIChwcmVndW50YS5jYXNpbGxlcm9zIGFzIChPcGNpb25NdWx0aXBsZXxDb25zaXN0ZW5jaWEpW10pLm1hcCgob3BjaW9uTXVsdGlwbGUpPT5cclxuICAgICAgICAgICAgICAgICAgICBvcGNpb25NdWx0aXBsZS50aXBvYz09J09NJz8gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxPcGNpb25NdWx0aXBsZURlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17b3BjaW9uTXVsdGlwbGUuaWRfY2FzaWxsZXJvfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbk09e29wY2lvbk11bHRpcGxlfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa30gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgOiAvL2xhcyBjb25zaXN0ZW5jaWFzIHB1ZWRlbiBzZXIgaGVybWFuYXMgZGUgT01cclxuICAgICAgICAgICAgICAgICAgICAgICAgPENvbnNpc3RlbmNpYURlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17b3BjaW9uTXVsdGlwbGUuaWRfY2FzaWxsZXJvfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvPXtvcGNpb25NdWx0aXBsZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgICAgICAgICAgLz4gICAgXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgKChwcmVndW50YVNpbXBsZTpQcmVndW50YVNpbXBsZSk9PlxyXG4gICAgICAgICAgICAgICAgPENhbXBvXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3ByZWd1bnRhU2ltcGxlLmNhbGN1bGFkYT90cnVlOmZhbHNlfVxyXG4gICAgICAgICAgICAgICAgICAgIHByZWd1bnRhPXtwcmVndW50YVNpbXBsZX1cclxuICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICApKHByZWd1bnRhKVxyXG4gICAgICAgIH08L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBpZS1wcmVndW50YVwiPlxyXG4gICAgICAgICAgICA8U2FsdG9EZXNwbGllZ3VlIFxyXG4gICAgICAgICAgICAgICAgY2FzaWxsZXJvPXtwcmVndW50YX1cclxuICAgICAgICAgICAgICAgIHByZWZpam89e3ByZWd1bnRhLnRpcG92YXI9PVwib3BjaW9uZXNcIj8oXHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZ3VudGEuY2FzaWxsZXJvcy5zb21lKG9wY2lvbj0+b3BjaW9uLnNhbHRvKT9cInJlc3RvIGRlIGxhcyBvcGNpb25lc1wiOlwidG9kYXMgbGFzIG9wY2lvbmVzXCJcclxuICAgICAgICAgICAgICAgICk6XCJcIn1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG52YXIgY2FsY3VsYXJEaXNhYmxlZEJGQWdyZWdhckxpc3RvID0gKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86Q29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW98bnVsbCwgZm9ybXVsYXJpbzpJZEZvcm11bGFyaW8pPT5cclxuICAgICEhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiYgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpbylcclxuXHJcbmZ1bmN0aW9uIGJvdG9uZXNEZWxGb3JtdWxhcmlvKHI6UmVzcHVlc3RhcywgdW5pZGFkX2FuYWxpc2lzOklkVW5pZGFkQW5hbGlzaXMsIGVzdHJ1Y3R1cmE6RXN0cnVjdHVyYSwgZm9yUGtQYWRyZTpGb3JQaywgZmVlZGJhY2tBbGw6e1tmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+fSk6SHRtbFRhZzxIVE1MRGl2RWxlbWVudD57XHJcbiAgICB2YXIgZm9ybXNWaXZpZW5kYSA9IGdldEZvcm11bGFyaW9zRm9ySWRWaXZpZW5kYShmb3JQa1BhZHJlLnZpdmllbmRhKTtcclxuICAgIHZhciB1YURlZiA9IGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdW5pZGFkX2FuYWxpc2lzXTtcclxuICAgIHZhciBhcnJheUVzdHJ1Y3R1cmFGb3JtdWxhcmlvcyA9IChsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykpLmFycmF5KCk7XHJcbiAgICB2YXIgeCA9IGxpa2VBcih1YURlZi5oaWphcykuZmlsdGVyKHVhSGlqYT0+XHJcbiAgICAgICAgICAgIGZvcm1zVml2aWVuZGEuaW5jbHVkZXMoXHJcbiAgICAgICAgICAgICAgICBhcnJheUVzdHJ1Y3R1cmFGb3JtdWxhcmlvcy5maW5kKChpbmZvRm9ybXVsYXJpbyk9PlxyXG4gICAgICAgICAgICAgICAgICAgIGluZm9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhSGlqYT8udW5pZGFkX2FuYWxpc2lzKVxyXG4gICAgICAgICAgICAgICAgPy5jYXNpbGxlcm9zLmlkX2Nhc2lsbGVybyBhcyBJZEZvcm11bGFyaW9cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICkubWFwKHVhSGlqYT0+KFxyXG4gICAgICAgIHVhSGlqYSA9PSBudWxsID8gbnVsbCA6XHJcbiAgICAgICAgaHRtbC5kaXYoe2NsYXNzOid1YS1oaWphcyd9LFtcclxuICAgICAgICAgICAgaHRtbC5kaXYodWFIaWphLnVuaWRhZF9hbmFsaXNpcyksXHJcbiAgICAgICAgICAgIGh0bWwuZGl2KFxyXG4gICAgICAgICAgICAgICAgbGlrZUFyKHJbdWFIaWphLnVuaWRhZF9hbmFsaXNpc118fFtdKS5tYXAoKHJlc3B1ZXN0YXNIaWphLCBpKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBudW0gPSBOdW1iZXIoaSkrMVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBmb3JQa0hpamFQYXJjaWFsID0gey4uLmZvclBrUGFkcmUsIFt1YUhpamEucGtfYWdyZWdhZGFdOiBudW19O1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8/ZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQa1BhZHJlLnZpdmllbmRhISldOm51bGxcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbC5kaXYoe2NsYXNzOidudW1lcmFkb3ItdWEnfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7Y2xhc3M6J2JvdG9uZXMtdWEnfSxbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7Y2xhc3M6J251bWVyby11YSd9LG51bS50b1N0cmluZygpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmb3JtRGVmPT5mb3JtRGVmLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhSGlqYS51bmlkYWRfYW5hbGlzaXMgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoX2Zvcm1EZWYsIGZvcm11bGFyaW8pPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvclBrID0gey4uLmZvclBrSGlqYVBhcmNpYWwsIGZvcm11bGFyaW99O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmZWVkYmFja0Zvcm0gPSBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmVlZGJhY2tGb3JtID8gaHRtbC5kaXYoe30sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodG1sLmJ1dHRvbigodWFIaWphISkucGtfYWdyZWdhZGErXCIgb2s6IFwiKyhOdW1iZXIoaSkrMSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3RvbkZvcm11bGFyaW9Db25SZXN1bWVuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogdHJ1ZSB8fCBjYWxjdWxhckFjdHVhbEJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIG51bSwgbnVsbCwgZm9ybXVsYXJpbywgciksIC8vUkVWSVNBUiB0cnVlIHBhcmEgcXVlIG5vIHNlIGdyaXNlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzpmYWxzZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBudW0sIGZvcm11bGFyaW8sIHIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZGJhY2tGb3JtLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZGVzcGxpZWd1ZU9jdWx0YTpmYWxzZSwgZXhwcmVzaW9uX2hhYmlsaXRhcl9qczonJywgbm9tYnJlOmZvcm11bGFyaW8sIGFjbGFyYWNpb246bnVsbCwgc2FsdG86Zm9ybXVsYXJpb30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQa1BhZHJlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJib3Rvbi1pci1yZXN1bWVuLWZvcm11bGFyaW9cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9ybXVsYXJpb10uY2FzaWxsZXJvc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkgOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5hcnJheSgpLm1hcCh4PT54ID09IG51bGwgPyBudWxsIDogeCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICxib3RvbmVzRGVsRm9ybXVsYXJpbyhyZXNwdWVzdGFzSGlqYSwgdWFIaWphLnVuaWRhZF9hbmFsaXNpcywgZXN0cnVjdHVyYSwgZm9yUGtIaWphUGFyY2lhbCwgZmVlZGJhY2tBbGwpXHJcbiAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgIH0pLmFycmF5KCkubWFwKHg9PnggPT0gbnVsbCA/IG51bGwgOiB4KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgXSlcclxuICAgICkpLmFycmF5KCkubWFwKHg9PnggPT0gbnVsbCA/IG51bGwgOiB4KTtcclxuICAgIHJldHVybiBodG1sLmRpdigvKntzdHlsZTonZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpyb3cnfSwqL3gpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBUZXh0b0Rlc3BsaWVndWUocHJvcHM6e2Nhc2lsbGVybzpUZXh0bywgZm9yUGs6Rm9yUGt9KXtcclxuICAgIHZhciB7Y2FzaWxsZXJvLCBmb3JQa30gPSBwcm9wcztcclxuICAgIHZhciBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz9nZXRGdW5jaW9uSGFiaWxpdGFyKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzKTooKT0+dHJ1ZTtcclxuICAgIHZhciB7bW9kb0Rlc3BsaWVndWV9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICB2YXIgaWQgPSBgdGV4dG8tJHtjYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7aWQsIHN0eWxlOidkaXNwbGF5JywgZnVuOihyOlJlc3B1ZXN0YXMpPT5oYWJpbGl0YWRvcihyKSB8fCBtb2RvRGVzcGxpZWd1ZT09J21ldGFkYXRvcyc/J2Jsb2NrJzonbm9uZSd9KVxyXG4gICAgdmFyIGVzUmVzdW1lbkZvcm11bGFyaW8gPSBjYXNpbGxlcm8uY2FzaWxsZXJvPT0nUmVzRm9yJyBhcyBJZENhc2lsbGVybzsgLy8gVE9ETzogQ2FtYmlhIGVzdG8gcXVlIGVzdMOhIGphcmNvZGVhZG8uXHJcbiAgICBpZihlc1Jlc3VtZW5Gb3JtdWxhcmlvKXtcclxuICAgICAgICByZWdpc3RyYXJFbGVtZW50byh7aWQsIGRpcmVjdDp0cnVlLCBcclxuICAgICAgICAgICAgZnVuOihcclxuICAgICAgICAgICAgICAgIHI6UmVzcHVlc3RhcywgXHJcbiAgICAgICAgICAgICAgICBfZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50bzpIVE1MRGl2RWxlbWVudCwgXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja0FsbDp7W2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsVmFsb3IsIElkRmluPn0sIFxyXG4gICAgICAgICAgICAgICAgZXN0cnVjdHVyYTpFc3RydWN0dXJhXHJcbiAgICAgICAgICAgICk9PntcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvLnN0eWxlLmRpc3BsYXk9Jyc7XHJcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHJlc3B1ZXN0YXMgc29uIHJlc3B1ZXN0YXNSYWl6IHBvcnF1ZSBSZXNGb3IgZXN0w6EgZW4gZWwgZm9ybSBwcGFsXHJcbiAgICAgICAgICAgICAgICBpZihyWydyZXN1bWVuRXN0YWRvJ10gYXMgUmVzdW1lbkVzdGFkbyA9PSAndmFjaW8nKXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50by50ZXh0Q29udGVudCA9IFwicmVsZXZhbWllbnRvIHNpbiBlbXBlemFyXCI7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50by50ZXh0Q29udGVudCA9IFwicmVsZXZhbWllbnRvIGVtcGV6YWRvXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHt1bmlkYWRfYW5hbGlzaXN9ID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLmlubmVySFRNTD1cIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLmFwcGVuZENoaWxkKGJvdG9uZXNEZWxGb3JtdWxhcmlvKHIsIHVuaWRhZF9hbmFsaXNpcywgZXN0cnVjdHVyYSwgZm9yUGssIGZlZWRiYWNrQWxsKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgdmFyIGlyID0gKGRlZkJvdG9uOkRlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIpPT57XHJcbiAgICAgICAgLy8gdmFyIG51ZXZhRm9yUGs9ey4uLmZvclBrLCBmb3JtdWxhcmlvOmlkRm9ybXVsYXJpb0Rlc3Rpbm99O1xyXG4gICAgICAgIC8vIG51ZXZhRm9yUGtbbnVldm9DYW1wb1BrXSA9IGRlZkJvdG9uLm51bVxyXG4gICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLHtmb3JQazpkZWZCb3Rvbi5mb3JQa30pO1xyXG4gICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNBTUJJQVJfRk9STVVMQVJJTyh7Zm9yUGs6ZGVmQm90b24uZm9yUGssIGFwaWxhclZ1ZWx0YTp0cnVlfSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gXHJcbiAgICAgICAgaWQ9e2Ake2lkfS1leHRlcm5vYH1cclxuICAgICAgICBjYXNpbGxlcm89e2Nhc2lsbGVyb31cclxuICAgID5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IGxlZXI9e2ZhbHNlfSBmb3JQaz17Zm9yUGt9Lz5cclxuICAgICAgICA8ZGl2IGlkPXtpZH0gc3R5bGU9e3tkaXNwbGF5Oidub25lJ319PjwvZGl2PlxyXG4gICAgICAgIHtlc1Jlc3VtZW5Gb3JtdWxhcmlvP1xyXG4gICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwic3BlY2lhbC1idXR0b25cIiBpZD1cImJvdG9uLWlyLXJlc3VtZW4tZm9ybXVsYXJpb1wiIHN0eWxlPXt7ZGlzcGxheTonbm9uZSd9fVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpPT57XHJcbiAgICAgICAgICAgICAgICBpcihKU09OLnBhcnNlKChldmVudC50YXJnZXQhIGFzIHVua25vd24gYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLmdldEF0dHJpYnV0ZSgnZGVmLWJ1dHRvbicpISkpXHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPmlyIChpbnRlcm5vKTwvQnV0dG9uPlxyXG4gICAgICAgIDpudWxsfVxyXG5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBGaWx0cm9EZXNwbGllZ3VlKHByb3BzOntmaWx0cm86RmlsdHJvLCBmb3JQazpGb3JQa30pe1xyXG4gICAgdmFyIHtmaWx0cm99ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBjYXNpbGxlcm89e2ZpbHRyb30+XHJcbiAgICAgICAgPERlc3BsaWVndWVFbmNhYmV6YWRvIGNhc2lsbGVybz17ZmlsdHJvfS8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxuZnVuY3Rpb24gQ29uc2lzdGVuY2lhRGVzcGxpZWd1ZShwcm9wczp7Y2FzaWxsZXJvOkNvbnNpc3RlbmNpYSwgZm9yUGs6Rm9yUGt9KXtcclxuICAgIHZhciB7Y2FzaWxsZXJvLCBmb3JQa30gPSBwcm9wcztcclxuICAgIHZhciBoYWJpbGl0YWRvciA9IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzP2dldEZ1bmNpb25IYWJpbGl0YXIoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMpOigpPT50cnVlO1xyXG4gICAgdmFyIHttb2RvRGVzcGxpZWd1ZX0gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIHZhciBpZCA9IGBjb25zaXN0ZW5jaWEtJHtjYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7aWQsIHN0eWxlOidkaXNwbGF5JywgZnVuOihyOlJlc3B1ZXN0YXMpPT5oYWJpbGl0YWRvcihyKSB8fCBtb2RvRGVzcGxpZWd1ZT09J21ldGFkYXRvcyc/J2Jsb2NrJzonbm9uZSd9KVxyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gXHJcbiAgICAgICAgaWQ9e2lkfVxyXG4gICAgICAgIGNhc2lsbGVybz17Y2FzaWxsZXJvfVxyXG4gICAgICAgIHN0eWxlPXt7ZGlzcGxheTonbm9uZSd9fVxyXG4gICAgPlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gbGVlcj17ZmFsc2V9IGZvclBrPXtmb3JQa30vPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbnR5cGUgRGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpcj1cclxuKHtmb3JQazpGb3JQaywgbnVtOm51bWJlciwgYWN0dWFsOmJvb2xlYW4sIHByZXZpbzpib29sZWFufSB8IFxyXG57Zm9yUGs6Rm9yUGssIG51bTpudW1iZXIsIGFjdHVhbDpib29sZWFuLCBwcmV2aW86ZmFsc2UsIGVzQWdyZWdhcjp0cnVlfSB8IFxyXG57Zm9yUGs6Rm9yUGssIG51bTpudW1iZXIsIGFjdHVhbDpib29sZWFuLCBwcmV2aW86ZmFsc2UsIGVzQ29uZmlybWFyOnRydWV9IHxcclxue2ZvclBrOkZvclBrLCBudW06bnVtYmVyLCBhY3R1YWw6Ym9vbGVhbiwgcHJldmlvOmZhbHNlLCBwZXJtaXRlQm9ycmFyOmJvb2xlYW59IHxcclxue2ZvclBrOkZvclBrLCBudW06ZmFsc2UsIGFjdHVhbDpib29sZWFuLCBwcmV2aW86dHJ1ZSwgdW5pY286dHJ1ZX0pXHJcbiYge2VzQ29uZmlybWFyPzp0cnVlLCBlc0FncmVnYXI/OnRydWUsIHBlcm1pdGVCb3JyYXI/OmJvb2xlYW4sIGRpc2FibGVkPzpib29sZWFufHVuZGVmaW5lZH07XHJcblxyXG5cclxudmFyIGJvdG9uRm9ybXVsYXJpb0NvblJlc3VtZW4gPSAoXHJcbiAgICBkZWZCb3RvbjpEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyLCBcclxuICAgIGZlZWRiYWNrRm9ybTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgXHJcbiAgICByZXNwdWVzdGFzQXVtZW50YWRhczpSZXNwdWVzdGFzLFxyXG4gICAgY2FzaWxsZXJvOntkZXNwbGllZ3VlT2N1bHRhPzpib29sZWFufG51bGwsIGV4cHJlc2lvbl9oYWJpbGl0YXJfanM/OnN0cmluZywgYWNsYXJhY2lvbjpzdHJpbmd8bnVsbCwgZXhwcmVzaW9uX2hhYmlsaXRhcj86c3RyaW5nLCBub21icmU/OnN0cmluZywgc2FsdG86c3RyaW5nfG51bGwsIGVzcGVjaWFsPzphbnl9LFxyXG4gICAgZm9yUGtQYWRyZTogRm9yUGssXHJcbiAgICBpZEJ1dHRvbjpzdHJpbmcsXHJcbiAgICBmb3JtdWxhcmlvQUFicmlyOkZvcm11bGFyaW9cclxuKT0+e1xyXG4gICAgdmFyIGZvclBrOkZvclBrID0gZGVmQm90b24uZm9yUGs7XHJcbiAgICB2YXIgc3VmaWpvSWRFbGVtZW50byA9IHRvUGxhaW5Gb3JQayhmb3JQaykrKGRlZkJvdG9uLmVzQ29uZmlybWFyPyctbGlzdG8nOicnKTtcclxuICAgIHZhciBpZCA9IGBkaXYtYm90b24tZm9ybXVsYXJpby0ke3N1Zmlqb0lkRWxlbWVudG99YDtcclxuICAgIHZhciBlc3RhZG8gPSBmZWVkYmFja0Zvcm0ucmVzdW1lbjtcclxuICAgIHJldHVybiBodG1sLmRpdih7XHJcbiAgICAgICAgaWQsIFxyXG4gICAgICAgIGNsYXNzOlwic2VjY2lvbi1ib3Rvbi1mb3JtdWxhcmlvXCIgLCBcclxuICAgICAgICAkYXR0cnM6e1xyXG4gICAgICAgICAgICBcIm51ZXN0cm8tdmFsaWRhdG9yXCI6ZGVmQm90b24uYWN0dWFsPydhY3R1YWwnOmRlZkJvdG9uLnByZXZpbz8ndmFsaWRhJzondG9kYXZpYV9ubycsXHJcbiAgICAgICAgICAgIFwib2N1bHRhci1zYWx0ZWFkYVwiOmNhc2lsbGVyby5kZXNwbGllZ3VlT2N1bHRhPyhjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz8nSU5IQUJJTElUQVInOidTSScpOidOTycsXHJcbiAgICAgICAgICAgIFwidGllbmUtdmFsb3JcIjpcIk5PXCIsXHJcbiAgICAgICAgICAgIFwiZGVmLWJ1dHRvblwiOkpTT04uc3RyaW5naWZ5KGRlZkJvdG9uKVxyXG4gICAgICAgIH1cclxuICAgIH0sIFtcclxuICAgICAgICBjYXNpbGxlcm8uYWNsYXJhY2lvbiB8fCBodG1sLmRpdih7Y2xhc3M6XCJhY2xhcmFjaW9uXCJ9LCBbYnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLmFjbGFyYWNpb24pPz9udWxsXSksXHJcbiAgICAgICAgaHRtbC5kaXYoW1xyXG4gICAgICAgICAgICBCdXR0b24yKHtcclxuICAgICAgICAgICAgICAgIC8vIGlkOmB2YXItJHtpZFZhcmlhYmxlfWAsXHJcbiAgICAgICAgICAgICAgICBpZDpgYm90b24tZm9ybXVsYXJpby0ke3N1Zmlqb0lkRWxlbWVudG99YCwgXHJcbiAgICAgICAgICAgICAgICB2YXJpYW50Olwib3V0bGluZWRcIixcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkZWZCb3Rvbi5kaXNhYmxlZCxcclxuICAgICAgICAgICAgICAgIGNvbG9yOlwiaW5oZXJpdFwiLFxyXG4gICAgICAgICAgICAgICAgb25DbGljazooKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGRlZkJvdG9uLmVzQ29uZmlybWFyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGVmQm90b24ubnVtICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEse2ZvclBrOmZvclBrUGFkcmUsIHZhcmlhYmxlOmNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyIGFzIElkVmFyaWFibGUsIHJlc3B1ZXN0YTpkZWZCb3Rvbi5udW0gYXMgVmFsb3J9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRCdXR0b24pISBhcyBIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLnNldEF0dHJpYnV0ZSgnZGVmLWJ1dHRvbicsIEpTT04uc3RyaW5naWZ5KGRlZkJvdG9uKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAkYXR0cnM6e1xyXG4gICAgICAgICAgICAgICAgICAgIFwicmVzdW1lbi1lc3RhZG9cIjplc3RhZG8hPSd2YWNpbyc/ZXN0YWRvOiBkZWZCb3Rvbi5hY3R1YWw/J2FjdHVhbCc6ZGVmQm90b24ucHJldmlvP2VzdGFkbzondG9kYXZpYV9ubycsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAsIGNoaWxkcmVuOltcclxuICAgICAgICAgICAgICAgICAgICAoZGVmQm90b24uZXNBZ3JlZ2FyPydhZ3JlZ2FyJzpkZWZCb3Rvbi5lc0NvbmZpcm1hcj8nTGlzdG8nOmNhc2lsbGVyby5ub21icmUgKyAnICcgKyAoZGVmQm90b24ubnVtfHwnJykpLFxyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwuc3ZnKHtjbGFzczpcIk11aVN2Z0ljb24tcm9vdFwiLCBmb2N1c2FibGU6ZmFsc2UsIHZpZXdib3g6XCIwIDAgMjQgMjRcIiwgXCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwifSxbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwucGF0aCh7ZDooZGVmQm90b24uZXNBZ3JlZ2FyP21hdGVyaWFsSW9JY29uc1N2Z1BhdGguQWRkOmRlZkJvdG9uLmVzQ29uZmlybWFyP21hdGVyaWFsSW9JY29uc1N2Z1BhdGguQ2hlY2s6Y2FzaWxsZXJvLnNhbHRvP21hdGVyaWFsSW9JY29uc1N2Z1BhdGguRm9yd2FyZDptYXRlcmlhbElvSWNvbnNTdmdQYXRoLkV4aXRUb0FwcCl9KVxyXG4gICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAoZGVmQm90b24ucGVybWl0ZUJvcnJhcj9cclxuICAgICAgICAgICAgICAgIEJ1dHRvbjIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTpcImJvdG9uLWJvcnJhci11YS12YWNpYVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOlwiZGVmYXVsdFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ6XCJvdXRsaW5lZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLnN2Zyh7Y2xhc3M6XCJNdWlTdmdJY29uLXJvb3RcIiwgZm9jdXNhYmxlOmZhbHNlLCB2aWV3Ym94OlwiMCAwIDI0IDI0XCIsIFwiYXJpYS1oaWRkZW5cIjpcInRydWVcIn0sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5wYXRoKHtkOm1hdGVyaWFsSW9JY29uc1N2Z1BhdGguRGVsZXRlRm9yZXZlcn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLCBcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOigpPT5hY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8oe2ZvclBrLCBmb3JQa1BhZHJlfSl9KVxyXG4gICAgICAgICAgICA6bnVsbCksXHJcbiAgICAgICAgICAgIChkZWZCb3Rvbi5udW0gIT09IGZhbHNlICYmICFkZWZCb3Rvbi5lc0FncmVnYXIgJiYgIWRlZkJvdG9uLmVzQ29uZmlybWFyP1xyXG4gICAgICAgICAgICAgICAgaHRtbC5zcGFuKChjYXNpbGxlcm8uZXNwZWNpYWw/LmNhbXBvc1Jlc3VtZW4/P1tkZWZCb3Rvbi5udW0udG9TdHJpbmcoKV0pLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAoY2FtcG86c3RyaW5nKT0+cmVzcHVlc3Rhc0F1bWVudGFkYXNbZm9ybXVsYXJpb0FBYnJpci51bmlkYWRfYW5hbGlzaXNdW2RlZkJvdG9uLm51bS0xXVtjYW1wbyBhcyBJZFZhcmlhYmxlXVxyXG4gICAgICAgICAgICAgICAgKS5qb2luKCcsICcpIClcclxuICAgICAgICAgICAgOm51bGwpXHJcbiAgICAgICAgICAgIC8vIGh0bWwuZGl2KHtjbGFzczonaW5saW5lLWRpYWxvZycsICRhdHRyczp7XCJpbmxpbmUtZGlhbG9nLW9wZW5cIjogY29uZmlybWFyRm9yemFySXIgPT0gZGVmQm90b24ubnVtPyd2aXNpYmxlJzonaGlkZGVuJ319LFsgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICBdKVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICAgIHtkZWZCb3Rvbi5lc0FncmVnYXI/PD4gPHNwYW4+ICA8L3NwYW4+IDxCdXR0b25cclxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID48SUNPTi5DaGVjay8+PC9CdXR0b24+PC8+Om51bGx9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKi9cclxuICAgIF0pLmNyZWF0ZSgpXHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86Qm90b25Gb3JtdWxhcmlvLCBmb3JtdWxhcmlvOkZvcm11bGFyaW8sIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2Nhc2lsbGVybywgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz9nZXRGdW5jaW9uSGFiaWxpdGFyKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzKTooKT0+dHJ1ZTtcclxuICAgIHZhciB7b3BjaW9uZXN9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICAvL3ZhciBpZEZvcm11bGFyaW9EZXN0aW5vID0gJ0Y6JytjYXNpbGxlcm8uc2FsdG8hIGFzIElkRm9ybXVsYXJpbzsgICAvL29yaWdpbmFsXHJcbiAgICB2YXIgYXJtb05vbVNhbHRvPWNhc2lsbGVyby5zYWx0bz8uc3Vic3RyaW5nKDAsMik9PSdGOic/Y2FzaWxsZXJvLnNhbHRvLnNsaWNlKDIpOmNhc2lsbGVyby5zYWx0bztcclxuICAgIC8vY29uc29sZS5sb2coJ0JvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUgYXJtb05vbVNhbHRvICcgK2FybW9Ob21TYWx0byk7XHJcbiAgICB2YXIgaWRGb3JtdWxhcmlvRGVzdGlubyA9ICdGOicrYXJtb05vbVNhbHRvISBhcyBJZEZvcm11bGFyaW87XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciB7Zm9ybXVsYXJpb0FBYnJpcn0gPSB1c2VTZWxlY3RvcigoX3N0YXRlOkNhc29TdGF0ZSk9Pih7XHJcbiAgICAgICAgZm9ybXVsYXJpb0FBYnJpcjplc3RydWN0dXJhLmZvcm11bGFyaW9zW2lkRm9ybXVsYXJpb0Rlc3Rpbm9dLmNhc2lsbGVyb3MsXHJcbiAgICB9KSk7XHJcbiAgICB2YXIgc3VmaWpvSWRFbGVtZW50byA9IHRvUGxhaW5Gb3JQayhmb3JQayk7XHJcbiAgICAvKlxyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkOmBkaXYtYm90b24tZm9ybXVsYXJpby0ke3N1Zmlqb0lkRWxlbWVudG99YCwgXHJcbiAgICAgICAgYXR0cjonZXN0YS1pbmhhYmlsaXRhZGEnLCBcclxuICAgICAgICAvLyBmdW46IChyOlJlc3B1ZXN0YXMpPT5oYWJpbGl0YWRvcihyKT8nU0knOidOTydcclxuICAgICAgICBmdW46IChfcjpSZXNwdWVzdGFzKT0+J05PJ1xyXG4gICAgfSk7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50bzxIVE1MQnV0dG9uRWxlbWVudD4oe1xyXG4gICAgICAgIGlkOmBib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gLCBcclxuICAgICAgICBwcm9wOidkaXNhYmxlZCcsIFxyXG4gICAgICAgIC8vIGZ1bjogKHI6UmVzcHVlc3Rhcyk9PiFoYWJpbGl0YWRvcihyKVxyXG4gICAgICAgIGZ1bjogKF9yOlJlc3B1ZXN0YXMpPT5mYWxzZVxyXG4gICAgfSk7XHJcbiAgICAqL1xyXG4gICAgdmFyIGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBbY29uZmlybWFyRm9yemFySXIsIHNldENvbmZpcm1hckZvcnphcklyXSA9IHVzZVN0YXRlPERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXJ8ZmFsc2V8bnVsbD4obnVsbCk7XHJcbiAgICB2YXIgbXVsdGlwbGVGb3JtdWxhcmlvcz1mb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpcyAhPSBwcm9wcy5mb3JtdWxhcmlvLnVuaWRhZF9hbmFsaXNpcztcclxuICAgIHZhciBudWV2b0NhbXBvUGsgPSBkZWZPcGVyYXRpdm8uZGVmVUFbZm9ybXVsYXJpb0FBYnJpci51bmlkYWRfYW5hbGlzaXNdLnBrO1xyXG4gICAvLyB2YXIgdmFyX25hbWU9JyRCLicrY2FzaWxsZXJvLnNhbHRvOyAvL29yaWdpbmFsXHJcbiAgICB2YXIgdmFyX25hbWU9JyRCLkY6Jythcm1vTm9tU2FsdG87XHJcbiAgICB2YXIgaWRTZWNjaW9uPWBzZWNjaW9uLWJvdG9uLWZvcm11bGFyaW8tJHt2YXJfbmFtZX1gO1xyXG4gICAgdmFyIGlkQnV0dG9uPWBzcGVjaWFsLWJ1dHRvbi0ke2lkU2VjY2lvbn1gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG88SFRNTERpdkVsZW1lbnQ+KHtcclxuICAgICAgICBpZDppZFNlY2Npb24sIFxyXG4gICAgICAgIGRpcmVjdDp0cnVlLFxyXG4gICAgICAgIGZ1bjogKHJlc3B1ZXN0YXNBdW1lbnRhZGFzOlJlc3B1ZXN0YXMsIGZlZWRiYWNrUm93OiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgZGl2OkhUTUxEaXZFbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tBbGw6e1xyXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IC8vIHJlc3VsdGFkbyBkZWwgcm93VmFsaWRhdG9yIHBhcmEgZXN0YWRvLmZvclBrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk9PntcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpc3RhRGVCb3RvbmVzQWJyaXI6RGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpcltdID0gW107XHJcbiAgICAgICAgICAgICAgIC8vIHZhciBlc1ZhckFjdHVhbCA9IGZlZWRiYWNrUm93LmFjdHVhbCA9PSAnJEIuRjonK2Nhc2lsbGVyby5zYWx0bzsgIC8vb3JpZ2luYWxcclxuICAgICAgICAgICAgICAgIHZhciBlc1ZhckFjdHVhbCA9IGZlZWRiYWNrUm93LmFjdHVhbCAgPT0gJyRCLkY6Jythcm1vTm9tU2FsdG87XHJcbiAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlIGVzVmFyQWN0dWFsICcgK2VzVmFyQWN0dWFsICApO1xyXG4gICAgICAgICAgICAgICAgaWYobXVsdGlwbGVGb3JtdWxhcmlvcyAmJiBjYXNpbGxlcm8uc2FsdG8hPW51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAvLyAgbGV0IGRlZkZvcm11bGFyaW86SW5mb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zWydGOicrY2FzaWxsZXJvLnNhbHRvIGFzIElkRm9ybXVsYXJpb107ICAgICAgLy9vcmlnaW5hbFxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZWZGb3JtdWxhcmlvOkluZm9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1snRjonK2FybW9Ob21TYWx0byBhcyBJZEZvcm11bGFyaW9dO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZWZVQSA9IGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbZGVmRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb25qdW50byA9IHJlc3B1ZXN0YXNBdW1lbnRhZGFzW2RlZkZvcm11bGFyaW8uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMhXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2FudGlkYWRFc3BlcmFkYSA9IHJlc3B1ZXN0YXNBdW1lbnRhZGFzW2Nhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyIGFzIElkVmFyaWFibGVdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBudW1BY3R1YWw6bnVtYmVyfG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAvLyAgdmFyIGVzdGFkb0RlbEJvdG9uID0gZmVlZGJhY2tSb3cuZmVlZGJhY2tbJyRCLkY6JytjYXNpbGxlcm8uc2FsdG8gYXMgSWRWYXJpYWJsZV0uZXN0YWRvICAgLy9vcmlnaW5hbFxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFyIGVzdGFkb0RlbEJvdG9uID0gZmVlZGJhY2tSb3cuZmVlZGJhY2tbJyRCLkY6Jythcm1vTm9tU2FsdG8gYXMgSWRWYXJpYWJsZV0uZXN0YWRvXHJcbiAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQm90b25Gb3JtdWxhcmlvRGVzcGxpZWd1ZSBlc3RhZG9EZWxCb3RvbiAnICtlc3RhZG9EZWxCb3RvbiAgKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29uZmlnU29ydGVvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvP2VzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGsudml2aWVuZGEpXTpudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpciA9IGxpa2VBcihjb25qdW50bykubWFwKChfLCBpKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbnVtOm51bWJlciA9IG51bWJlck9yU3RyaW5nSW5jSWZBcnJheShpLCBjb25qdW50bykgYXMgbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9yUGs9ey4uLnByb3BzLmZvclBrLCBmb3JtdWxhcmlvOmlkRm9ybXVsYXJpb0Rlc3Rpbm8sIFtudWV2b0NhbXBvUGtdOm51bX07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmZWVkYmFjayA9IGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhmb3JQayldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihudW1BY3R1YWwgPT0gbnVsbCAmJiBmZWVkYmFjay5yZXN1bWVuID09IFwidmFjaW9cIiAmJiBlc3RhZG9EZWxCb3RvbiA9PSd2YWxpZGEnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFjdHVhbCA9IG51bTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGssIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdW1lbjpudWxsLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGNhbGN1bGFyQWN0dWFsQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgbnVtLCBudW1BY3R1YWwsIGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzogbnVtQWN0dWFsID09IG51bGwsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWl0ZUJvcnJhcjogbGlrZUFyKGNvbmp1bnRvKS5hcnJheSgpLmxlbmd0aCA9PSBOdW1iZXIoaSkgKyAxICYmIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWRiYWNrLnJlc3VtZW4gPT0gJ3ZhY2lvJyAmJiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhclBlcm1pdGVCb3JyYXJCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLGlkRm9ybXVsYXJpb0Rlc3Rpbm8pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBudW0sIGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSkuYXJyYXkoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZihcInB1ZWRlIGFncmVnYXIgLy9UT0RPIFZFUiBFU1RPXCIgJiYgKGNvbmp1bnRvIGluc3RhbmNlb2YgQXJyYXkgfHwgY29uanVudG8gPT0gbnVsbCkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbnVldm9WYWxvclBrPShjb25qdW50bz09bnVsbCA/IDAgOiBjb25qdW50by5sZW5ndGgpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZvclBrPXsuLi5wcm9wcy5mb3JQaywgZm9ybXVsYXJpbzppZEZvcm11bGFyaW9EZXN0aW5vLCBbbnVldm9DYW1wb1BrXTpudWV2b1ZhbG9yUGt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGViZUFncmVnYXJPbGlzdG8gPSBudW1BY3R1YWwgPT0gbnVsbCAmJiAoY2FudGlkYWRFc3BlcmFkYSA9PSBudWxsIHx8IGNhbnRpZGFkRXNwZXJhZGEgIT0gKGNvbmp1bnRvICE9bnVsbCAmJiBjb25qdW50by5sZW5ndGgpKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChlc3RhZG9EZWxCb3RvbiA9PSd2YWxpZGEnIHx8IGVzVmFyQWN0dWFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bTpudWV2b1ZhbG9yUGssIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNBZ3JlZ2FyOnRydWUsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOmRlYmVBZ3JlZ2FyT2xpc3RvLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzogZmFsc2UsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRkFncmVnYXJMaXN0byhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLGlkRm9ybXVsYXJpb0Rlc3Rpbm8pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGssIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtOm51ZXZvVmFsb3JQayAtIDEsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNDb25maXJtYXI6dHJ1ZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6ZGViZUFncmVnYXJPbGlzdG8gJiYgKCFjYXNpbGxlcm8ubG9uZ2l0dWQgfHwgbnVldm9WYWxvclBrID4gTnVtYmVyKGNhc2lsbGVyby5sb25naXR1ZCkpLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzogZmFsc2UsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRkFncmVnYXJMaXN0byhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLGlkRm9ybXVsYXJpb0Rlc3Rpbm8pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmb3JQaz17Li4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86aWRGb3JtdWxhcmlvRGVzdGlub307XHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpciA9IFt7Zm9yUGssIG51bTpmYWxzZSwgdW5pY286dHJ1ZSwgYWN0dWFsOmVzVmFyQWN0dWFsLCBwcmV2aW86dHJ1ZX1dXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgdG9kb3NMb3NCb3RvbmVzID0gbGlzdGFEZUJvdG9uZXNBYnJpci5tYXAoZGVmQm90b249PlxyXG4gICAgICAgICAgICAgICAgICAgIGJvdG9uRm9ybXVsYXJpb0NvblJlc3VtZW4oZGVmQm90b24sIGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhkZWZCb3Rvbi5mb3JQayldPz97cmVzdW1lbjondmFjaW8nfSwgcmVzcHVlc3Rhc0F1bWVudGFkYXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVybywgcHJvcHMuZm9yUGssIGlkQnV0dG9uLCBmb3JtdWxhcmlvQUFicmlyXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgdmFyIGh0bWxTZWNjaW9uPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkU2VjY2lvbikhO1xyXG4gICAgICAgICAgICAgICAgaHRtbFNlY2Npb24uaW5uZXJIVE1MPVwiXCI7XHJcbiAgICAgICAgICAgICAgICBodG1sU2VjY2lvbi5hcHBlbmRDaGlsZChodG1sLmRpdih0b2Rvc0xvc0JvdG9uZXMpLmNyZWF0ZSgpKTtcclxuICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSB1bmV4cGVjdGVkKGVycik7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImVudHJhIGFsIGNhdGNoXCIpXHJcbiAgICAgICAgICAgICAgICBkaXYudGV4dENvbnRlbnQ9J2VzdG8sIEZBTEzDiSAnK2Vycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGlyID0gKGRlZkJvdG9uOkRlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIpPT57XHJcbiAgICAgICAgaWYoIWNhc2lsbGVyby5zYWx0byl7XHJcbiAgICAgICAgICAgIG9wY2lvbmVzLm1vZG9EaXJlY3RvP1xyXG4gICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5WT0xWRVJfSERSKHt9KSk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHZhciBudWV2YUZvclBrPXsuLi5mb3JQaywgZm9ybXVsYXJpbzppZEZvcm11bGFyaW9EZXN0aW5vfTtcclxuICAgICAgICAgICAgaWYobXVsdGlwbGVGb3JtdWxhcmlvcyl7XHJcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIGZvclBrIHkgc3VzIGNvbXBvbmVudGVzXHJcbiAgICAgICAgICAgICAgICBudWV2YUZvclBrW251ZXZvQ2FtcG9Qa10gPSBkZWZCb3Rvbi5udW1cclxuICAgICAgICAgICAgICAgIGlmKGRlZkJvdG9uLmVzQWdyZWdhcil7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FncmVnYXJfZm9ybXVsYXJpbyx7Zm9yUGs6bnVldmFGb3JQa30pO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8se2ZvclBrOm51ZXZhRm9yUGt9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oe2ZvclBrOm51ZXZhRm9yUGssIGFwaWxhclZ1ZWx0YTp0cnVlfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihjb25maXJtYXJGb3J6YXJJcil7c2V0Q29uZmlybWFyRm9yemFySXIoZmFsc2UpfVxyXG4gICAgfTtcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIGNhc2lsbGVybz17Y2FzaWxsZXJvfT5cclxuICAgICAgICA8ZGl2IGlkPXtpZFNlY2Npb259PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwic3BlY2lhbC1idXR0b25cIiBpZD17aWRCdXR0b259XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCk9PntcclxuICAgICAgICAgICAgICAgIGlyKEpTT04ucGFyc2UoKGV2ZW50LnRhcmdldCEgYXMgdW5rbm93biBhcyBIVE1MQnV0dG9uRWxlbWVudCkuZ2V0QXR0cmlidXRlKCdkZWYtYnV0dG9uJykhKSlcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+aXIgKGludGVybm8pPC9CdXR0b24+XHJcbiAgICAgICAgPERpYWxvZyBcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibnVlc3Ryby1kaWFsb2dvXCJcclxuICAgICAgICAgICAgb3Blbj17ISFjb25maXJtYXJGb3J6YXJJcn1cclxuICAgICAgICAgICAgb25DbG9zZT17KCk9PnNldENvbmZpcm1hckZvcnphcklyKG51bGwpfVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJudWVzdHJvLWRpYWxvZ29cIj5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5Pk5vIHNlIHB1ZWRlIGF2YW56YXIgYWwgc2lndWllbnRlIGZvcm11bGFyaW8uPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+UXVpesOhcyBubyB0ZXJtaW7DsyBkZSBjb250ZXN0YXIgbGFzIHByZWd1bnRhcyBjb3JyZXNwb25kaWVudGVzPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+UXVpesOhcyBubyBjb3JyZXNwb25kZSBlbiBiYXNlIGEgbGFzIHJlc3B1ZXN0YXMgb2J0ZW5pZGFzPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInNlY29uZGFyeVwiIG9uQ2xpY2s9eygpPT5jb25maXJtYXJGb3J6YXJJciAmJiBpcihjb25maXJtYXJGb3J6YXJJcil9PmZvcnphcjwvQnV0dG9uPlxyXG4gICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHZhcmlhbnQ9XCJjb250YWluZWRcIiBvbkNsaWNrPXsoKT0+c2V0Q29uZmlybWFyRm9yemFySXIobnVsbCl9PkVudGVuZGlkbzwvQnV0dG9uPlxyXG4gICAgICAgIDwvRGlhbG9nPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENhc2lsbGVyb0Rlc2Nvbm9jaWRvKHByb3BzOntjYXNpbGxlcm86Q2FzaWxsZXJvQmFzZSwgZm9yUGs6Rm9yUGt9KXtcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIFxyXG4gICAgICAgIGlkPXtgY2FzaWxsZXJvZGVzY29ub2NpZG8tJHtwcm9wcy5jYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWB9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtwcm9wcy5jYXNpbGxlcm8gYXMgQmxvcXVlfVxyXG4gICAgICAgIHN0eWxlPXt7ZGlzcGxheTonbm9uZSd9fVxyXG4gICAgPlxyXG4gICAgICAgIDxUeXBvZ3JhcGh5PlRpcG8gZGUgY2FzaWxsZXJvIG5vIGltcGxlbWVudGFkbzogXCJ7cHJvcHMuY2FzaWxsZXJvLnRpcG9jfVwiIHBhcmEgXCJ7cHJvcHMuY2FzaWxsZXJvLmNhc2lsbGVyb31cIjwvVHlwb2dyYXBoeT5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtwcm9wcy5jYXNpbGxlcm8gYXMgQ2FzaWxsZXJvRW5jYWJlemFibGV9IGxlZXI9e2ZhbHNlfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrOkZvclBrKXtcclxuICAgIHJldHVybiB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+e1xyXG4gICAgICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZvcm11bGFyaW86IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcyxcclxuICAgICAgICAgICAgbW9kb0Rlc3BsaWVndWU6IHRydWUgfHwgc3RhdGUubW9kby5kZW1vP3N0YXRlLm9wY2lvbmVzLm1vZG9EZXNwbGllZ3VlOidyZWxldmFtaWVudG8nLFxyXG4gICAgICAgICAgICBtb2RvOiBzdGF0ZS5tb2RvLFxyXG4gICAgICAgICAgICBvcGNpb25lczogc3RhdGUub3BjaW9uZXMsXHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxufVxyXG5cclxuZnVuY3Rpb24gQ29uanVudG9QcmVndW50YXNEZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86Q29uanVudG9QcmVndW50YXMsIGZvcm11bGFyaW86Rm9ybXVsYXJpbywgZm9yUGs6Rm9yUGt9KXtcclxuICAgIGxldCB7Y2FzaWxsZXJvLCBmb3JQa30gPSBwcm9wcztcclxuICAgIHZhciBpZCA9IGBjb25qdW50by1wcmVndW50YXMtJHtjYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsIFxyXG4gICAgICAgIGRpcmVjdDp0cnVlLCBcclxuICAgICAgICBmdW46IHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShjYXNpbGxlcm8pXHJcbiAgICB9KVxyXG4gICAgbGV0IG1vZG9EZXNwbGllZ3VlID0gXCJub3JtYWxcIjtcclxuICAgIGxldCBoYWJpbGl0YWRvID0gdHJ1ZTtcclxuICAgIHJldHVybiBoYWJpbGl0YWRvIHx8IG1vZG9EZXNwbGllZ3VlPT0nbWV0YWRhdG9zJz88RGVzcGxlZ2FyQ2FzaWxsZXJvIGlkPXtpZH0gY2FzaWxsZXJvPXtjYXNpbGxlcm99PlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e2ZvclBrfSBsZWVyPXtjYXNpbGxlcm8ubGVlciE9PWZhbHNlfS8+XHJcbiAgICAgICAgPERlc3BsZWdhckNvbnRlbmlkb0ludGVybm9CbG9xdWVPRm9ybXVsYXJpbyBibG9xdWVPRm9ybXVsYXJpbz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17Zm9yUGt9IG11bHRpcGxlPXtmYWxzZX0vPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+Om51bGw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIERlc3BsZWdhckNvbnRlbmlkb0ludGVybm9CbG9xdWVPRm9ybXVsYXJpbyhwcm9wczp7YmxvcXVlT0Zvcm11bGFyaW86QmxvcXVlfEZvcm11bGFyaW98Q29uanVudG9QcmVndW50YXMsIGZvcm11bGFyaW86Rm9ybXVsYXJpbywgZm9yUGs6Rm9yUGssIG11bHRpcGxlOmJvb2xlYW59KXtcclxuICAgIHZhciBwYXJjaWFsaXphYmxlID0gcHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2M9PSdGJztcclxuICAgIGNvbnN0IFt2ZXJUb2RvLCBzZXRWZXJUb2RvXSA9IHVzZVN0YXRlKCFwYXJjaWFsaXphYmxlKTtcclxuICAgIGNvbnN0IFtmb3JQa0FjdHVhbCwgc2V0Rm9yUGtBY3R1YWxdID0gdXNlU3RhdGU8SWRDYXNpbGxlcm98bnVsbD4obnVsbCk7XHJcbiAgICBpZihwYXJjaWFsaXphYmxlKXtcclxuICAgICAgICBpZihmb3JQa0FjdHVhbCAhPSBwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby5jYXNpbGxlcm8pe1xyXG4gICAgICAgICAgICBzZXRWZXJUb2RvKGZhbHNlKVxyXG4gICAgICAgICAgICBzZXRGb3JQa0FjdHVhbChwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby5jYXNpbGxlcm8pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHVzZUVmZmVjdCgoKT0+e1xyXG4gICAgICAgICAgICB2YXIgdGltZXIgPSBzZXRUaW1lb3V0KCgpPT57XHJcbiAgICAgICAgICAgICAgICBzZXRWZXJUb2RvKHRydWUpO1xyXG4gICAgICAgICAgICB9LDI1MClcclxuICAgICAgICAgICAgcmV0dXJuICgpPT57XHJcbiAgICAgICAgICAgICAgICBpZih0aW1lcil7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBjb25zdCBsaW1pdGVOb1ZlclRvZG8gPSAzO1xyXG4gICAgdXNlRWZmZWN0KCgpPT57XHJcbiAgICAgICAgaWYocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2M9PSdGJyl7XHJcbiAgICAgICAgICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MocHJvcHMuZm9yUGspO1xyXG4gICAgICAgIH1cclxuICAgIH0sW3RvUGxhaW5Gb3JQayhwcm9wcy5mb3JQayksdmVyVG9kb10pXHJcbiAgICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmKHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jPT0nRicgJiYgdmVyVG9kbyl7XHJcbiAgICAgICAgICAgIHZhciB7c2lndWllbnRlVmFyaWFibGUsIHZhcmlhYmxlQWN0dWFsfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7cmVzcHVlc3RhOm51bGwsIHZhcmlhYmxlOk5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTLCBmb3JQazpwcm9wcy5mb3JQa30pO1xyXG4gICAgICAgICAgICBpZih2YXJpYWJsZUFjdHVhbCB8fCBzaWd1aWVudGVWYXJpYWJsZSl7XHJcbiAgICAgICAgICAgICAgICBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKGNvYWxlc2NlKHZhcmlhYmxlQWN0dWFsIGFzIHN0cmluZ3xudWxsLHNpZ3VpZW50ZVZhcmlhYmxlIGFzIHN0cmluZ3xudWxsKSBhcyBJZFZhcmlhYmxlKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHZhciBmZWVkYmFja1Jvd1ZhbGlkYXRvciA9IGdldEZlZWRiYWNrUm93VmFsaWRhdG9yKClcclxuICAgICAgICAgICAgICAgIGlmKGZlZWRiYWNrUm93VmFsaWRhdG9yW3RvUGxhaW5Gb3JQayhwcm9wcy5mb3JQayldLnJlc3VtZW49PSdvaycpe1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvVG9wKClcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvVG9wKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiY29udGVuaWRvXCI+XHJcbiAgICAgICAge3ZlclRvZG8/bnVsbDo8ZGl2IHN0eWxlPXt7aGVpZ2h0OlwiNTAwcHhcIiwgdGV4dEFsaWduOidjZW50ZXInLCB2ZXJ0aWNhbEFsaWduOidtaWRkbGUnLCB3aWR0aDonMTAwJScsIHBvc2l0aW9uOlwiZml4ZWRcIiwgYmFja2dyb3VuZENvbG9yOiAncmdiYSgxMDAsMTAwLDEwMCwwLjMpJywgZm9udFNpemU6JzIwMCUnfX0gPmNhcmdhbmRvLi4uPC9kaXY+fVxyXG4gICAgICAgIHtwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby5jYXNpbGxlcm9zLm1hcCgoY2FzaWxsZXJvLCBpKT0+e1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gY2FzaWxsZXJvLnRpcG9jKyctJytjYXNpbGxlcm8uaWRfY2FzaWxsZXJvKyctJytpO1xyXG4gICAgICAgICAgICByZXR1cm4gKHZlclRvZG8gfHwgaSA8IGxpbWl0ZU5vVmVyVG9kbz9cclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJQXCI/PFByZWd1bnRhRGVzcGxpZWd1ZSBrZXk9e2tleX0gcHJlZ3VudGE9e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfSBkZXNwbGllZ3VlRW5jYWJlemFkbz17Y2FzaWxsZXJvLmRlc3BsaWVndWVFbmNhYmV6YWRvPz8ocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2M9PSdDUCc/J2xhdGVyYWwnOidzdXBlcmlvcicpfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkJcIj88QmxvcXVlRGVzcGxpZWd1ZSBrZXk9e2tleX0gYmxvcXVlPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJGSUxUUk9cIj88RmlsdHJvRGVzcGxpZWd1ZSBrZXk9e2tleX0gZmlsdHJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJCRlwiPzxCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkNPTlNcIj88Q29uc2lzdGVuY2lhRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJDUFwiPzxDb25qdW50b1ByZWd1bnRhc0Rlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiVEVYVE9cIj88VGV4dG9EZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkxJQlJFXCI/PExpYnJlRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICA8Q2FzaWxsZXJvRGVzY29ub2NpZG8ga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz5cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgOmk9PWxpbWl0ZU5vVmVyVG9kbz9cclxuICAgICAgICAgICAgICAgIDxkaXYga2V5PSckc3Bpbm5lcicgY2xhc3NOYW1lPVwic3Bpbm5lci1ib3JkZXJcIiByb2xlPVwic3RhdHVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Y2FyZ2FuZG8gYmxvcXVlLi4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDpudWxsXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9KVxyXG4gICAgfTwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBCbG9xdWVEZXNwbGllZ3VlKHByb3BzOntibG9xdWU6QmxvcXVlLCBmb3JtdWxhcmlvOkZvcm11bGFyaW8sIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2Jsb3F1ZSwgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIga2V5PWJsb3F1ZS52ZXJfaWQhPSctJyAmJiBibG9xdWUudmVyX2lkIHx8IGJsb3F1ZS5jYXNpbGxlcm87XHJcbiAgICB2YXIgYWN0aXZlU3RlcD0wO1xyXG4gICAgdmFyIG11bHRpcGxlID0gISFibG9xdWUudW5pZGFkX2FuYWxpc2lzO1xyXG4gICAgdmFyIGxpc3RhID0gW3tmb3JQaywga2V5OjAsIG11bHRpcGxlOmZhbHNlfV07XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBibG9xdWUuZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz9nZXRGdW5jaW9uSGFiaWxpdGFyKGJsb3F1ZS5leHByZXNpb25faGFiaWxpdGFyX2pzKTooKT0+dHJ1ZTtcclxuICAgIHZhciB7bW9kb0Rlc3BsaWVndWV9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICBpZihtdWx0aXBsZSl7XHJcbiAgICAgICAgLy8gVE9ETzogR0VORVJBTElaQVJcclxuICAgICAgICAvLyBAdHMtaWdub3JlIFxyXG4gICAgICAgIC8vIGxpc3RhPXJlc3B1ZXN0YXMucGVyc29uYXMubWFwKChfcGVyc29uYSwgaSk9PihcclxuICAgICAgICAvLyAgICAge2ZvclBrOnsuLi5mb3JQaywgcGVyc29uYTppKzF9LCBrZXk6aSsxLCBtdWx0aXBsZTp0cnVlfVxyXG4gICAgICAgIC8vICkpXHJcbiAgICB9XHJcbiAgICB2YXIgaWQgPSBgYmxvcXVlLSR7YmxvcXVlLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkLFxyXG4gICAgICAgIHN0eWxlOidkaXNwbGF5JyxcclxuICAgICAgICBmdW46IChyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4gaGFiaWxpdGFkb3IocmVzcHVlc3RhcykgfHwgbW9kb0Rlc3BsaWVndWU9PSdtZXRhZGF0b3MnPyd1bnNldCc6J25vbmUnXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gY2FzaWxsZXJvPXtibG9xdWV9IG51ZXN0cm8tYmxvcXVlPXtibG9xdWUuaWRfY2FzaWxsZXJvfSBlcy1tdWx0aXBsZT17bXVsdGlwbGU/J1NJJzonTk8nfSBpZD17aWR9PlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Jsb3F1ZX0gZm9yUGs9e2ZvclBrfS8+XHJcbiAgICAgICAge2xpc3RhLm1hcCgoe2tleSwgZm9yUGssIG11bHRpcGxlfSk9PlxyXG4gICAgICAgICAgICA8RGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvIGtleT17a2V5fSBibG9xdWVPRm9ybXVsYXJpbz17YmxvcXVlfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17Zm9yUGt9IG11bHRpcGxlPXttdWx0aXBsZX0vPlxyXG4gICAgICAgICl9XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz47XHJcbn1cclxuXHJcbmNvbnN0IEZvcm11bGFyaW9FbmNhYmV6YWRvID0gRGVzcGxpZWd1ZUVuY2FiZXphZG87XHJcblxyXG5mdW5jdGlvbiBNZW51TGV0cmEocHJvcHM6e3RhbWFubmlvOm51bWJlciwgZGVub21pbmFjaW9uOnN0cmluZ30pe1xyXG4gICAgY29uc3QgY2FtYmlhckxldHJhID0gKHRhbWFubmlvOm51bWJlcik9PntcclxuICAgICAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuICAgICAgICByb290LnN0eWxlLmZvbnRTaXplPXRhbWFubmlvK1wicHhcIjtcclxuICAgIH1cclxuICAgIHJldHVybiA8TWVudUl0ZW1cclxuICAgICAgICBvbkNsaWNrPXsoKT0+Y2FtYmlhckxldHJhKHByb3BzLnRhbWFubmlvKX0gc3R5bGU9e3tmb250U2l6ZTpwcm9wcy50YW1hbm5pbysncHgnfX1cclxuICAgID5sZXRyYSB7cHJvcHMuZGVub21pbmFjaW9ufTwvTWVudUl0ZW0+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEZhc3RTZXR0dXAoKXtcclxuICAgIGNvbnN0IFthbmNob3JFbCwgc2V0QW5jaG9yRWxdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBoYW5kbGVDbGljayA9IChldmVudDphbnkpID0+IHtcclxuICAgICAgICBzZXRBbmNob3JFbChldmVudC5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBzZXRPcGVuKChwcmV2KSA9PiAhcHJldik7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgY2FtYmlhciA9IChtb2RvRGVzcGxpZWd1ZTpNb2RvRGVzcGxpZWd1ZSk9PntcclxuICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5NT0RPX0RFU1BMSUVHVUUoe21vZG9EZXNwbGllZ3VlfSkpO1xyXG4gICAgICAgIHNldE9wZW4oZmFsc2UpXHJcbiAgICB9XHJcbiAgICBjb25zdCBvcGNpb25lcyA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT5zdGF0ZS5vcGNpb25lcylcclxuICAgIHJldHVybiA8PlxyXG4gICAgICAgIDxCdXR0b24gb25DbGljaz17aGFuZGxlQ2xpY2t9PlxyXG4gICAgICAgICAgICA8SUNPTi5TZXR0aW5ncy8+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgPE1lbnUgb3Blbj17b3Blbn0gYW5jaG9yRWw9e2FuY2hvckVsfSBvbkNsb3NlPXsoKT0+c2V0T3BlbihmYWxzZSl9PlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0gb25DbGljaz17KCk9PmNhbWJpYXIoXCJyZWxldmFtaWVudG9cIil9Pm5vcm1hbDwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbSBvbkNsaWNrPXsoKT0+Y2FtYmlhcihcIlBERlwiICAgICAgICAgKX0+UERGIHBhcmEgcmVsZXZhbWllbnRvPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtIG9uQ2xpY2s9eygpPT5jYW1iaWFyKFwibWV0YWRhdG9zXCIgICApfT5yZXZpc2FyIG1ldGFkYXRvczwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgIDxEaXZpZGVyLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTJ9IGRlbm9taW5hY2lvbiA9IFwibXV5IGNoaWNhXCIvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsxNH0gZGVub21pbmFjaW9uID0gXCJjaGljYVwiLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTZ9IGRlbm9taW5hY2lvbiA9IFwibm9ybWFsXCIvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsxOX0gZGVub21pbmFjaW9uID0gXCJncmFuZGVcIi8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezIyfSBkZW5vbWluYWNpb24gPSBcImVub3JtZVwiLz5cclxuICAgICAgICAgICAgPERpdmlkZXIvPlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0+PGxhYmVsPjxDaGVja2JveCBjaGVja2VkPXtvcGNpb25lcy5jb25DYW1wb09wY2lvbmVzfSBvbkNoYW5nZT17XHJcbiAgICAgICAgICAgICAgICAoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7b3BjaW9uOidjb25DYW1wb09wY2lvbmVzJywgdmFsb3I6IW9wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXN9KSlcclxuICAgICAgICAgICAgfSBpbnB1dFByb3BzPXt7ICdhcmlhLWxhYmVsJzogJ3ByaW1hcnkgY2hlY2tib3gnIH19Lz5jYW1wbyBvcGNpb25lczwvbGFiZWw+PC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtPjxsYWJlbD48Q2hlY2tib3ggY2hlY2tlZD17b3BjaW9uZXMuc2FsdG9BdXRvbWF0aWNvfSBvbkNoYW5nZT17XHJcbiAgICAgICAgICAgICAgICAoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7b3BjaW9uOidzYWx0b0F1dG9tYXRpY28nLCB2YWxvcjohb3BjaW9uZXMuc2FsdG9BdXRvbWF0aWNvfSkpXHJcbiAgICAgICAgICAgIH0gaW5wdXRQcm9wcz17eyAnYXJpYS1sYWJlbCc6ICdwcmltYXJ5IGNoZWNrYm94JyB9fS8+c2FsdG8gYXV0b23DoXRpY288L2xhYmVsPjwvTWVudUl0ZW0+XHJcbiAgICAgICAgPC9NZW51PlxyXG4gICAgPC8+O1xyXG59XHJcblxyXG5mdW5jdGlvbiBCYXJyYURlTmF2ZWdhY2lvbihwcm9wczp7Zm9yUGs6Rm9yUGssIHNvbG9MZWN0dXJhOmJvb2xlYW4sIG1vZG9EaXJlY3RvOmJvb2xlYW59KXtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IGZvclBrID0gcHJvcHMuZm9yUGs7XHJcbiAgICBjb25zdCB7b3BjaW9uZXN9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICBjb25zdCBbY29uZmlybWFDZXJyYXIsIHNldENvbmZpcm1hQ2VycmFyXSA9IHVzZVN0YXRlPGJvb2xlYW58bnVsbD4oZmFsc2UpO1xyXG4gICAgdmFyIGRvbWluaW8gPSBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW2ZvclBrLnZpdmllbmRhXS50ZW0uZG9taW5pbztcclxuICAgIHZhciBjZXJyYXJEaXJlY3RvID0gYXN5bmMgZnVuY3Rpb24oKXtcclxuICAgICAgICByZW1vdmVDU1NCeUlkKEJPT1RTVFJBUF81XzFfM19TUkMpO1xyXG4gICAgICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgICAgIGdvdG9Db25zaXN0aXIoXHJcbiAgICAgICAgICAgIGVzdHJ1Y3R1cmEub3BlcmF0aXZvIGFzIElkT3BlcmF0aXZvLFxyXG4gICAgICAgICAgICBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW2ZvclBrLnZpdmllbmRhXS50YXJlYS50YXJlYSxcclxuICAgICAgICAgICAgZm9yUGsudml2aWVuZGFcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vdmFyIGhhc2g9bmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5oYXNoPy5yZXBsYWNlKC9eXFwjLywnJykuc3BsaXQoJyZhdXRvcHJvY2VkJylbMF0pO1xyXG4gICAgICAgIC8vLy9oYXNoLmRlbGV0ZSgnYXV0b3Byb2NlZCcpXHJcbiAgICAgICAgLy9jbG9zZSgpO1xyXG4gICAgICAgIC8vbG9jYXRpb24uaGFzaD1oYXNoLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICB2YXIgYm90b25lc0Zvcm11bGFyaW89W107XHJcbiAgICBpZighb3BjaW9uZXMubW9kb0RpcmVjdG8pe1xyXG4gICAgICAgIGJvdG9uZXNGb3JtdWxhcmlvLnB1c2goe3F1ZTogJ2hkcicgICAgLCBhYnI6J0hkUicsIGxhYmVsOidob2phIGRlIHJ1dGEnLCByZXRyb2Nlc286MH0pXHJcbiAgICB9XHJcbiAgICBvcGNpb25lcy5waWxhRm9yUGsuZm9yRWFjaCgoZm9yUGssaSk9PlxyXG4gICAgICAgIGJvdG9uZXNGb3JtdWxhcmlvLnB1c2goe3F1ZTondm9sdmVyJywgYWJyOmZvclBrLmZvcm11bGFyaW8ucmVwbGFjZSgvXkY6LywnJyksIGxhYmVsOmZvclBrLmZvcm11bGFyaW8sIHJldHJvY2VzbzpvcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoLWl9KVxyXG4gICAgKVxyXG4gICAgYm90b25lc0Zvcm11bGFyaW8ucHVzaCh7cXVlOicnLCBhYnI6Zm9yUGsuZm9ybXVsYXJpby5yZXBsYWNlKC9eRjovLCcnKSwgbGFiZWw6Zm9yUGsuZm9ybXVsYXJpbywgcmV0cm9jZXNvOjB9KTtcclxuICAgIHJldHVybiA8PlxyXG4gICAgICAgIDxCdXR0b25Hcm91cCBrZXk9XCJmb3JtdWxhcmlvc1wiIGNsYXNzTmFtZT1cImJhcnJhLW5hdmVnYWNpb25cIiBzb2xvLWxlY3R1cmE9e3Byb3BzLnNvbG9MZWN0dXJhPydzaSc6J25vJ30gPlxyXG4gICAgICAgICAgICB7Ym90b25lc0Zvcm11bGFyaW8ubWFwKChiLGkpPT5cclxuICAgICAgICAgICAgICAgIDxCdXR0b24gY29sb3I9e2IucXVlPT1mb3JQay5mb3JtdWxhcmlvP1wicHJpbWFyeVwiOlwiaW5oZXJpdFwifSB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGtleT17YCR7aX0tJHtiLnF1ZX0tJHtiLnJldHJvY2Vzb31gfVxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshYi5xdWV9XHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIucXVlPT0naGRyJz9kaXNwYXRjaGVycy5WT0xWRVJfSERSKHt9KTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJzLlZPTFZFUl9ERV9GT1JNVUxBUklPKHttYWduaXR1ZFJldHJvY2VzbzpiLnJldHJvY2Vzb30pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYWJyXCI+e2IuYWJyfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJsYWJlbFwiPntiLmxhYmVsfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICAgICAge3Byb3BzLnNvbG9MZWN0dXJhPzxUeXBvZ3JhcGh5IGNvbXBvbmVudD1cInNwYW5cIiBzdHlsZT17e21hcmdpbjonMCAxMHB4J319PiAoU29sbyBMZWN0dXJhKSA8L1R5cG9ncmFwaHk+Om51bGx9XHJcbiAgICAgICAge3Byb3BzLm1vZG9EaXJlY3RvP1xyXG4gICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbkdyb3VwIGtleT1cInZvbHZlcl95X2dyYWJhclwiIHN0eWxlPXt7bWFyZ2luOicwIDAgMCAzMHB4J319PlxyXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17YXN5bmMgKCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHByb3BzLnNvbG9MZWN0dXJhIHx8ICFnZXREaXJ0eSgpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJyYXJEaXJlY3RvKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25maXJtYUNlcnJhcih0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uRXhpdFRvQXBwLz5cclxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8RGlhbG9nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW49eyEhY29uZmlybWFDZXJyYXJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vaGFjZSBxdWUgbm8gc2UgY2llcnJlIGVsIG1lbnNhamVcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbG9zZT17KCk9PnNldENvbmZpcm1hQ2VycmFyKGZhbHNlKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwiYWxlcnQtZGlhbG9nLXRpdGxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT1cImFsZXJ0LWRpYWxvZy1kZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nVGl0bGUgaWQ9XCJhbGVydC1kaWFsb2ctdGl0bGVcIj5Db25maXJtZSBjaWVycmUgZGUgZW5jdWVzdGE8L0RpYWxvZ1RpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50VGV4dCBpZD1cImFsZXJ0LWRpYWxvZy1kZXNjcmlwdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVzdMOhIHBvciBzYWxpciBkZSBsYSBlbmN1ZXN0YSwgc2UgcGVyZGVyw6FuIGxvcyBjYW1iaW9zIG5vIGd1YXJkYWRvcy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudFRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0FjdGlvbnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnJhckRpcmVjdG8oKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwic2Vjb25kYXJ5XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjYXJ0YXIgY2FtYmlvcyB5IGNlcnJhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmZpcm1hQ2VycmFyKGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVhciBlZGl0YW5kbyBlbmN1ZXN0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nPlxyXG4gICAgICAgICAgICAgICAgICAgIHtwcm9wcy5zb2xvTGVjdHVyYT9udWxsOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17XCJzYXZlLWJ1dHRvblwifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dHJ1ZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2FzeW5jICgpPT50cnVlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SUNPTi5TYXZlLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9CdXR0b25Hcm91cD5cclxuICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgOm51bGx9XHJcbiAgICAgICAgPFR5cG9ncmFwaHkgY2xhc3NOYW1lPVwibW9zdHJhci1mb3JQa1wiIGNvbXBvbmVudD1cInNwYW5cIiBzdHlsZT17e21hcmdpbjonMCAxMHB4J319PiBcclxuICAgICAgICAgICAge1ZFUl9ET01JTklPPzxkaXYga2V5PXtkb21pbmlvfT48c3Bhbj5kb21pbmlvPC9zcGFuPjxzcGFuPntkb21pbmlvfTwvc3Bhbj48L2Rpdj46Jyd9XHJcbiAgICAgICAgICAgIHtsaWtlQXIocHJvcHMuZm9yUGspLmZpbHRlcigoXyxrKT0+ayE9J2Zvcm11bGFyaW8nKS5tYXAoKHYsayk9PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBrZXk9e2t9PjxzcGFuPntrfTwvc3Bhbj48c3Bhbj57dn08L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICkuYXJyYXkoKX0gXHJcbiAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgIDxGYXN0U2V0dHVwLz5cclxuICAgIDwvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBCb3RvblZvbHZlckVuRGl2KHtpZH06e2lkOnN0cmluZ30pe1xyXG4gICAgdmFyIHtvcGNpb25lc30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+KHtvcGNpb25lczpzdGF0ZS5vcGNpb25lc30pKTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImRpdi1ib3Rvbi12b2x2ZXJcIj5cclxuICAgICAgICB7b3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aD4wP1xyXG4gICAgICAgIDxCdXR0b24gaWQ9e2lkfSBjbGFzc05hbWU9XCJib3Rvbi12b2x2ZXJcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8se2ZvclBrOm9wY2lvbmVzLnBpbGFGb3JQa1tvcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoLTFdfSk7XHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5WT0xWRVJfREVfRk9STVVMQVJJTyh7bWFnbml0dWRSZXRyb2Nlc286MX0pKVxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgID4gPElDT04uQ2hldnJvbkxlZnQvPiBWb2x2ZXI8L0J1dHRvbj5cclxuICAgICAgICA6bnVsbH1cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBGb3JtdWxhcmlvRGVzcGxpZWd1ZShwcm9wczp7Zm9yUGs6Rm9yUGt9KXtcclxuICAgIHZhciBmb3JQayA9IHByb3BzLmZvclBrO1xyXG4gICAgdmFyIHtmb3JtdWxhcmlvLCBtb2RvRGVzcGxpZWd1ZSwgbW9kbywgb3BjaW9uZXN9IFxyXG4gICAgICAgID0gdXNlU2VsZWN0b3JWaXZpZW5kYShwcm9wcy5mb3JQayk7XHJcbiAgICB2YXIgc29sb0xlY3R1cmEgPSBnZXREYXRvc0J5UGFzcygpLnNvbG9MZWN0dXJhO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdXNlRWZmZWN0KCgpPT57XHJcbiAgICAgICAgdmFyIGNvbnRyb2xTY3JvbGw9KCk9PntcclxuICAgICAgICAgICAgdmFyIGFycmliYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFycmliYScpO1xyXG4gICAgICAgICAgICBpZihhcnJpYmEpe1xyXG4gICAgICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhhcnJpYmEuc3R5bGUsICd2aXNpYmlsaXR5JyxcclxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgYXJyaWJhLmVsVG9wVmlzaWJpbGl6YXIgIT1udWxsICYmIGFycmliYS5lbFRvcFZpc2liaWxpemFyICsgMTAgXHJcbiAgICAgICAgICAgICAgICAgICAgPCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGFiYWpvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYWJham8nKTtcclxuICAgICAgICAgICAgaWYoYWJham8pe1xyXG4gICAgICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhhYmFqby5zdHlsZSwgJ3Zpc2liaWxpdHknLCBcclxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgYWJham8uZWxCb3R0b21WaXNpYmlsaXphciAhPSBudWxsICYmIGFiYWpvLmVsQm90dG9tVmlzaWJpbGl6YXIgLSAyMFxyXG4gICAgICAgICAgICAgICAgICAgID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCArIHdpbmRvdy5pbm5lckhlaWdodCAqIDAuNyA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjb250cm9sU2Nyb2xsKTtcclxuICAgICAgICBjb250cm9sU2Nyb2xsKCk7XHJcbiAgICAgICAgcmV0dXJuICgpPT57XHJcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjb250cm9sU2Nyb2xsKTtcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG4gICAgLy8gVE9ETyBWb2x2ZXIgYSBwb25lciBlbCBtb3ZpbWllbnRvIGEgbGEgYWN0dWFsXHJcbiAgICB2YXIgYWN0dWFsOmFueVxyXG4gICAgdmFyIGNvbXBsZXRvOmFueVxyXG4gICAgdmFyIG9uQ2xpY2tTYWx0YXJBY3R1YWwgPSAoKT0+e1xyXG4gICAgICAgIHZhciB7dmFyaWFibGVBY3R1YWx9ID0gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHtyZXNwdWVzdGE6bnVsbCwgdmFyaWFibGU6Tk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMsIGZvclBrOnByb3BzLmZvclBrfSk7XHJcbiAgICAgICAgaWYodmFyaWFibGVBY3R1YWwpe1xyXG4gICAgICAgICAgICBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKHZhcmlhYmxlQWN0dWFsKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBsaXN0YU1vZG9zOk1vZG9EZXNwbGllZ3VlW109WydtZXRhZGF0b3MnLCdyZWxldmFtaWVudG8nLCdQREYnXTtcclxuICAgIFsnYm90b24tdm9sdmVyLTEnLCAnYm90b24tdm9sdmVyLTInXS5mb3JFYWNoKGlkPT57XHJcbiAgICAgICAgcmVnaXN0cmFyRWxlbWVudG8oe2lkLCBhdHRyOidyZXN1bWVuLWVzdGFkbycsIGZ1bjooXzpSZXNwdWVzdGFzLCBmZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+KT0+KFxyXG4gICAgICAgICAgICBmZWVkYmFja0Zvcm0ucmVzdW1lblxyXG4gICAgICAgICl9KVxyXG4gICAgfSlcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZXNwZWNpYWwgaGF5IHF1ZSBsZWVybG8gZW4gZWwgcGFyc2VyIGRlIGNhc2lsbGVyb3Mgc2kgZXN0byB0ZXJtaW5hIHF1ZWRhbmRvIGFzw61cclxuICAgIHZhciBwYW50YWxsYUNvbXBsZXRhID0gZm9ybXVsYXJpby5lc3BlY2lhbD8ucGFudGFsbGFDb21wbGV0YTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAgPEFwcEJhciBwb3NpdGlvbj1cImZpeGVkXCIgY29sb3I9e3NvbG9MZWN0dXJhPydzZWNvbmRhcnknOidwcmltYXJ5J30+XHJcbiAgICAgICAgICAgICAgICA8VG9vbGJhcj5cclxuICAgICAgICAgICAgICAgICAgICA8QmFycmFEZU5hdmVnYWNpb24gZm9yUGs9e2ZvclBrfSBzb2xvTGVjdHVyYT17c29sb0xlY3R1cmEgfHwgZmFsc2V9IG1vZG9EaXJlY3RvPXtvcGNpb25lcy5tb2RvRGlyZWN0b30vPlxyXG4gICAgICAgICAgICAgICAgPC9Ub29sYmFyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cIm1pbmktY29uc29sZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L0FwcEJhcj5cclxuICAgICAgICAgICAgPG1haW4+XHJcbiAgICAgICAgICAgICAgICA8UGFwZXIgY2xhc3NOYW1lPVwiZm9ybXVsYXJpb1wiIG1vZG8tZGVzcGxpZWd1ZT17bW9kb0Rlc3BsaWVndWV9IHZlci1udW0tb3BjaW9uZXM9e29wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXM/J1NJJzonTk8nfT5cclxuICAgICAgICAgICAgICAgICAgICB7bW9kby5kZW1vPzxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGNvbXBvbmVudD1cInNwYW5cIj5Nb2RvIGRlIGRlc3BsaWVndWU6PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtsaXN0YU1vZG9zLm1hcChtb2RvPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24ga2V5PXttb2RvfSB2YXJpYW50PXttb2RvPT1tb2RvRGVzcGxpZWd1ZT9cImNvbnRhaW5lZFwiOlwib3V0bGluZWRcIn0gb25DbGljaz17XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCk9PmRpc3BhdGNoKGRpc3BhdGNoZXJzLk1PRE9fREVTUExJRUdVRSh7bW9kb0Rlc3BsaWVndWU6bW9kb30pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfT57bW9kb308L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b25Hcm91cD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj46bnVsbH1cclxuICAgICAgICAgICAgICAgICAgICB7cGFudGFsbGFDb21wbGV0YT9udWxsOjxCb3RvblZvbHZlckVuRGl2IGlkPVwiYm90b24tdm9sdmVyLTFcIi8+fVxyXG4gICAgICAgICAgICAgICAgICAgIHtwYW50YWxsYUNvbXBsZXRhP251bGw6PEZvcm11bGFyaW9FbmNhYmV6YWRvIGNhc2lsbGVybz17Zm9ybXVsYXJpb30vPn1cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvIGJsb3F1ZU9Gb3JtdWxhcmlvPXtmb3JtdWxhcmlvfSBmb3JtdWxhcmlvPXtmb3JtdWxhcmlvfSBmb3JQaz17Zm9yUGt9IG11bHRpcGxlPXtmYWxzZX0vPlxyXG4gICAgICAgICAgICAgICAgICAgIHtwYW50YWxsYUNvbXBsZXRhP251bGw6PEJvdG9uVm9sdmVyRW5EaXYgaWQ9XCJib3Rvbi12b2x2ZXItMlwiLz59XHJcbiAgICAgICAgICAgICAgICA8L1BhcGVyPlxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWFjdGl2by1hcnJpYmEnIGNvbG9yPVwicHJpbWFyeVwiIGFyaWEtbGFiZWw9XCJhZGRcIiBvbkNsaWNrPXtvbkNsaWNrU2FsdGFyQWN0dWFsfT5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5LZXlib2FyZEFycm93VXAgLz5cclxuICAgICAgICAgICAgICAgIDwvRmFiPlxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWFjdGl2by1hYmFqbycgY29sb3I9XCJwcmltYXJ5XCIgYXJpYS1sYWJlbD1cImFkZFwiIG9uQ2xpY2s9e29uQ2xpY2tTYWx0YXJBY3R1YWx9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLktleWJvYXJkQXJyb3dEb3duIC8+XHJcbiAgICAgICAgICAgICAgICA8L0ZhYj5cclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1lcnJvci1hcnJpYmEnIHZhcmlhbnQ9XCJleHRlbmRlZFwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgYXJpYS1sYWJlbD1cImVkaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5OYXZpZ2F0aW9uIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgRXJyb3JcclxuICAgICAgICAgICAgICAgIDwvRmFiPiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1lcnJvci1hYmFqbycgdmFyaWFudD1cImV4dGVuZGVkXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBhcmlhLWxhYmVsPVwiZWRpdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLk5hdmlnYXRpb25Eb3duIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgRXJyb3JcclxuICAgICAgICAgICAgICAgIDwvRmFiPiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdlc3BhY2lvLWZpbmFsLWZvcm11bGFyaW8nPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAge29wY2lvbmVzLm1vZG9Cb3JyYXJSZXNwdWVzdGEgJiYgb3BjaW9uZXMuZm9yUGs/PERlc3BsZWdhckNvbmZpcm1hckJvcnJhclJlc3B1ZXN0YSBmb3JQaz17b3BjaW9uZXMuZm9yUGt9IHZhcmlhYmxlQm9ycmFyPXtvcGNpb25lcy5tb2RvQm9ycmFyUmVzcHVlc3RhfS8+Om51bGx9XHJcbiAgICAgICAgICAgIDwvbWFpbj5cclxuICAgICAgICA8Lz5cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBBdHJpYnV0byhwcm9wczp7bm9tYnJlOnN0cmluZywgdmFsb3I6YW55fSl7XHJcbiAgICByZXR1cm4gcHJvcHMudmFsb3IhPW51bGwgJiYgcHJvcHMudmFsb3IhPScnPzxzcGFuIGNsYXNzTmFtZT1cImF0cmlidXRvLXBhclwiPlxyXG4gICAgICAgIHtwcm9wcy5ub21icmU/PHNwYW4gY2xhc3NOYW1lPVwiYXRyaWJ1dG8tbm9tYnJlXCI+e3Byb3BzLm5vbWJyZX08L3NwYW4+Om51bGx9XHJcbiAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImF0cmlidXRvLXZhbG9yXCI+e3Byb3BzLnZhbG9yLnRvU3RyaW5nKCl9PC9zcGFuPlxyXG4gICAgPC9zcGFuPjpudWxsXHJcbn1cclxuXHJcbmNvbnN0IGxpc3RhRXN0YWRvc0NhcmdhOkVzdGFkb0NhcmdhW109WydyZXN1bWVuJywncmVsZXZhbWllbnRvJywncmVjaWJvJ107XHJcbnZhciByZXN1bWlkb3JlcyA9IFtcclxuICAgIHtub21icmU6J1JFQScgICAgICAgICAsIGY6KHJyOlJlc3B1ZXN0YXNSYWl6KT0+cnIucmVzdW1lbkVzdGFkbz09XCJva1wiICAgICAgICAgIH0sXHJcbiAgICB7bm9tYnJlOidDaXRhIHBhY3RhZGEnLCBmOihycjpSZXNwdWVzdGFzUmFpeik9PnJyLnJlc3VtZW5Fc3RhZG89PVwiY2l0YSBwYWN0YWRhXCJ9LFxyXG4gICAge25vbWJyZTonUGVuZGllbnRlcycgICwgZjoocnI6UmVzcHVlc3Rhc1JhaXopPT5yci5yZXN1bWVuRXN0YWRvPT1cInZhY2lvXCIgICAgICAgfSxcclxuXTtcclxuXHJcbnJlc3VtaWRvcmVzLnB1c2goXHJcbiAgICB7bm9tYnJlOidPdHJvcycsIGY6cmVzdW1pZG9yZXMucmVkdWNlKChnLHIpPT4ocnI9PiFyLmYocnIpICYmIGcocnIpICksKF86UmVzcHVlc3Rhc1JhaXopPT50cnVlKSB9XHJcbilcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbChwcm9wczp7XHJcbiAgICBudW1WaXZpZW5kYTpJZEVuYyxcclxuICAgIGZvcm1QcmluY2lwYWw6SWRGb3JtdWxhcmlvLFxyXG4gICAgdGFyZWE6IHN0cmluZyxcclxuICAgIHJlc3B1ZXN0YXM6UmVzcHVlc3Rhc1JhaXosXHJcbn0pe1xyXG4gICAgY29uc3Qge251bVZpdmllbmRhLCByZXNwdWVzdGFzLCBmb3JtUHJpbmNpcGFsLCB0YXJlYX0gPSBwcm9wcztcclxuICAgIGNvbnN0IGlkPSd2aXYtJytudW1WaXZpZW5kYTtcclxuICAgIGNvbnN0IGZvclBrOkZvclBrPXtmb3JtdWxhcmlvOmZvcm1QcmluY2lwYWwsIHZpdmllbmRhOk51bWJlcihudW1WaXZpZW5kYSkgYXMgSWRFbmN9OyAvL25vIHF1aXRhciBlbCBjYXN0ZW8gcG9ycXVlIHZpZW5lIGNvbW8gdGV4dG8geSBuZWNlc2l0byBxdWUgc2VhIG7Dum1lcm9cclxuICAgIHZhciB0ZW0gPSBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW251bVZpdmllbmRhXS50ZW07XHJcbiAgICB2YXIgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdXNlRWZmZWN0KCgpPT57XHJcbiAgICAgICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQayk7XHJcbiAgICAgICAgaW50ZW50YXJCYWNrdXAoZm9yUGspXHJcbiAgICB9KVxyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe2lkLCBkaXJlY3Q6dHJ1ZSxcclxuICAgICAgICBmdW46KFxyXG4gICAgICAgICAgICByOlJlc3B1ZXN0YXMsIFxyXG4gICAgICAgICAgICBfZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgXHJcbiAgICAgICAgICAgIGVsZW1lbnRvOkhUTUxEaXZFbGVtZW50LCBcclxuICAgICAgICAgICAgZmVlZGJhY2tBbGw6e1tmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+fSwgXHJcbiAgICAgICAgICAgIF9lc3RydWN0dXJhOkVzdHJ1Y3R1cmFcclxuICAgICAgICApPT57XHJcbiAgICAgICAgICAgIC8vcHJlZ3VudG8gc2kgZXMgbGEgbWlzbWEgdml2aWVuZGEgcG9ycXVlIGxhIGZ1bmNpb24gc2UgZGlzcGFyYSBcclxuICAgICAgICAgICAgLy9jb24gdG9kYXMgbGFzIGNvbWJpbmFjaW9uZXMgZGUgcmVzcHVlc3RhcyBwYXJhIGNhZGEgZm9yUGtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIHZpdmllbmRhIGV4aXN0ZVxyXG4gICAgICAgICAgICBpZihyLnZpdmllbmRhID09IGZvclBrLnZpdmllbmRhKXtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvLnNldEF0dHJpYnV0ZSgncmVzdW1lbi1lc3RhZG8nLGNhbGN1bGFyUmVzdW1lblZpdmllbmRhKGZvclBrLCBmZWVkYmFja0FsbCwgcikucmVzdW1lbkVzdGFkbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgfSlcclxuICAgIHJldHVybiA8VGFibGVSb3cga2V5PXtudW1WaXZpZW5kYX0+XHJcbiAgICAgICAgPFRhYmxlQ2VsbD5cclxuICAgICAgICAgICAge3RlbT9cclxuICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhclRlbSB0ZW09e3RlbX0vPlxyXG4gICAgICAgICAgICAgICAgICAgIHtyZXNwdWVzdGFzWydyZXN1bWVuRXN0YWRvJyBhcyBJZFZhcmlhYmxlXT09XCJjaXRhIHBhY3RhZGFcIj9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNpdGFQYWN0YWRhIHJlc3B1ZXN0YXM9e3Jlc3B1ZXN0YXN9Lz5cclxuICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJDaXRhUGFjdGFkYVlTZWxlY2Npb25hZG9BbnRlcmlvclRlbSB0ZW09e3RlbX0vPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICA6bnVsbH1cclxuICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICA8VGFibGVDZWxsPlxyXG4gICAgICAgICAgICB7dGFyZWF9XHJcbiAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgPFRhYmxlQ2VsbD5cclxuICAgICAgICAgICAgPEJ1dHRvbiBpZD17aWR9IG9uQ2xpY2s9eygpPT4gXHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oe2ZvclBrLCBhcGlsYXJWdWVsdGE6ZmFsc2V9KSlcclxuICAgICAgICAgICAgfT5cclxuICAgICAgICAgICAgICAgIHtudW1WaXZpZW5kYS50b1N0cmluZygpfVxyXG4gICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgIDwvVGFibGVSb3c+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJDYXJnYShwcm9wczp7XHJcbiAgICBjYXJnYTpDYXJnYSwgXHJcbiAgICBpZENhcmdhOklkQ2FyZ2EsIFxyXG4gICAgcG9zaWNpb246bnVtYmVyLFxyXG4gICAgaW5mb3JtYWNpb25IZHI6SW5mb3JtYWNpb25IZHIsIFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhTGFzVUEsXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7XHJcbiAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gXHJcbiAgICB9XHJcbn0pe1xyXG4gICAgY29uc3Qge2NhcmdhLCBpZENhcmdhLCBpbmZvcm1hY2lvbkhkciwgcmVzcHVlc3Rhc30gPSBwcm9wcztcclxuICAgIHJldHVybiA8UGFwZXIgY2xhc3NOYW1lPVwiY2FyZ2FcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImluZm9ybWFjaW9uLWNhcmdhXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZ2FcIj7DgXJlYToge2lkQ2FyZ2F9PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwib2JzZXJ2YWNpb25lc1wiPntjYXJnYS5vYnNlcnZhY2lvbmVzfTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW5mb3JtYWNpb24tY2FyZ2FcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmZWNoYVwiPntjYXJnYS5mZWNoYX08L2Rpdj5cclxuICAgICAgICAgICAgey8qXHJcbiAgICAgICAgICAgIDxCdXR0b25Hcm91cD5cclxuICAgICAgICAgICAge2xpc3RhRXN0YWRvc0NhcmdhLm1hcChlc3RhZG9fY2FyZ2E9PlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBrZXk9e2VzdGFkb19jYXJnYX0gdmFyaWFudD17ZXN0YWRvX2NhcmdhPT1jYXJnYS5lc3RhZG9fY2FyZ2E/XCJjb250YWluZWRcIjpcIm91dGxpbmVkXCJ9IG9uQ2xpY2s9e1xyXG4gICAgICAgICAgICAgICAgICAgICgpPT5kaXNwYXRjaChkaXNwYXRjaGVycy5FU1RBRE9fQ0FSR0Eoe2lkQ2FyZ2EsIGVzdGFkb19jYXJnYX0pKVxyXG4gICAgICAgICAgICAgICAgfT57ZXN0YWRvX2NhcmdhfTwvQnV0dG9uPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8L0J1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICAqL31cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB7Y2FyZ2EuZXN0YWRvX2NhcmdhPT1udWxsICYmICFwcm9wcy5wb3NpY2lvbiB8fCBjYXJnYS5lc3RhZG9fY2FyZ2E9PSdyZWxldmFtaWVudG8nP1xyXG4gICAgICAgIDxUYWJsZSBjbGFzc05hbWU9XCJ0YWJsYS1jYXJnYS1ob2phLWRlLXJ1dGFcIj5cclxuICAgICAgICAgICAgPGNvbGdyb3VwPlxyXG4gICAgICAgICAgICAgICAgPGNvbCBzdHlsZT17e3dpZHRoOlwiNzUlXCJ9fS8+XHJcbiAgICAgICAgICAgICAgICA8Y29sIHN0eWxlPXt7d2lkdGg6XCIxMCVcIn19Lz4gICAgXHJcbiAgICAgICAgICAgICAgICA8Y29sIHN0eWxlPXt7d2lkdGg6XCIxNSVcIn19Lz4gICAgXHJcbiAgICAgICAgICAgIDwvY29sZ3JvdXA+XHJcbiAgICAgICAgICAgIDxUYWJsZUhlYWQgc3R5bGU9e3tmb250U2l6ZTogXCIxLjJyZW1cIn19PlxyXG4gICAgICAgICAgICAgICAgPFRhYmxlUm93IGNsYXNzTmFtZT1cInRyLWNhcmdhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbD5kb21pY2lsaW88L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsPnRhcmVhPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbD5lbmM8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgIDwvVGFibGVSb3c+XHJcbiAgICAgICAgICAgIDwvVGFibGVIZWFkPlxyXG4gICAgICAgICAgICA8VGFibGVCb2R5PlxyXG4gICAgICAgICAgICAgICAge2xpa2VBcihpbmZvcm1hY2lvbkhkcikuZmlsdGVyKChpbmZvcm1hY2lvbik9PmluZm9ybWFjaW9uLnRlbS5jYXJnYT09aWRDYXJnYSkubWFwKChpbmZvcm1hY2lvbiwgbnVtVml2aWVuZGEpPT5cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17bnVtVml2aWVuZGF9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBudW1WaXZpZW5kYT17bnVtVml2aWVuZGF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhPXtpbmZvcm1hY2lvbi50YXJlYS50YXJlYX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVByaW5jaXBhbD17aW5mb3JtYWNpb24udGFyZWEubWFpbl9mb3JtfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzPXtyZXNwdWVzdGFzLnZpdmllbmRhc1tudW1WaXZpZW5kYV0gYXMgUmVzcHVlc3Rhc1JhaXp9XHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICkuYXJyYXkoKX1cclxuICAgICAgICAgICAgPC9UYWJsZUJvZHk+XHJcbiAgICAgICAgPC9UYWJsZT46XHJcbiAgICAgICAgPFRhYmxlPlxyXG4gICAgICAgICAgICA8VGFibGVIZWFkIHN0eWxlPXt7Zm9udFNpemU6IFwiMS4ycmVtXCJ9fT5cclxuICAgICAgICAgICAgICAgIDxUYWJsZVJvdyBjbGFzc05hbWU9XCJ0ci1jYXJnYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtyZXN1bWlkb3Jlcy5tYXAoKHJlc3VtaWRvcjogdHlwZW9mIHJlc3VtaWRvcmVzWzBdLCBpOm51bWJlcik9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsIGtleT17aX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVzdW1pZG9yLm5vbWJyZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgIDwvVGFibGVSb3c+XHJcbiAgICAgICAgICAgIDwvVGFibGVIZWFkPlxyXG4gICAgICAgIDwvVGFibGU+XHJcbiAgICAgICAgfVxyXG4gICAgPC9QYXBlcj5cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gRGVzcGxlZ2FyQ2l0YVBhY3RhZGEocHJvcHM6e3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhc30pe1xyXG4gICAgY29uc3Qge3Jlc3B1ZXN0YXN9ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJjaXRhLXBhY3RhZGFcIj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJDaXRhIHBhY3RhZGEgY29uIFwiIHZhbG9yPXtyZXNwdWVzdGFzW3AxMl19Lz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJDZWwuOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwMl19Lz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJUZWwuOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwM119Lz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJGZWNoYTpcIiB2YWxvcj17cmVzcHVlc3Rhc1tzcDRdfS8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiSG9yYTpcIiB2YWxvcj17cmVzcHVlc3Rhc1tzcDVdfS8+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhckNpdGFQYWN0YWRhWVNlbGVjY2lvbmFkb0FudGVyaW9yVGVtKHByb3BzOnt0ZW06VEVNfSl7XHJcbiAgICBjb25zdCB7dGVtfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxkaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZW0tY2l0YVwiPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiQ2l0YTpcIiB2YWxvcj17dGVtLmNpdGF9Lz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRGVzcGxlZ2FyVGVtKHByb3BzOnt0ZW06VEVNfSl7XHJcbiAgICBjb25zdCB7dGVtfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxkaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZW0tZG9taWNpbGlvXCI+e3RlbS5ub21jYWxsZX0ge3RlbS5ucm9jYXRhc3RyYWx9IDxBdHJpYnV0byBub21icmU9XCJwaXNvXCIgdmFsb3I9e3RlbS5waXNvfS8+IDxBdHJpYnV0byBub21icmU9XCJkcHRvXCIgdmFsb3I9e3RlbS5kZXBhcnRhbWVudG99Lz4gPC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cInNlY3RvclwiIHZhbG9yPXt0ZW0uc2VjdG9yfS8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJlZGlmaWNpb1wiIHZhbG9yPXt0ZW0uZWRpZmljaW99Lz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImNhc2FcIiB2YWxvcj17dGVtLmNhc2F9Lz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImVudHJhZGFcIiB2YWxvcj17dGVtLmVudHJhZGF9Lz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImhhYml0YWNpb25cIiB2YWxvcj17dGVtLmhhYml0YWNpb259Lz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRlbS1vYnNlcnZhY2lvbmVzXCI+XHJcbiAgICAgICAgICAgIHt0ZW0ub2JzZXJ2YWNpb25lc30gXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEhvamFEZVJ1dGFEZXNwbGllZ3VlKCl7XHJcbiAgICB2YXIge2NhcmdhcywgbnVtX3NpbmNybywgaW5mb3JtYWNpb25IZHIsIHJlc3B1ZXN0YXN9ID0gZ2V0RGF0b3NCeVBhc3MoKTtcclxuICAgIHZhciB7bW9kb30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+KHttb2RvOnN0YXRlLm1vZG99KSk7XHJcbiAgICB2YXIgZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcigpXHJcbiAgICB2YXIgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgdXBkYXRlT25saW5lU3RhdHVzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICBzZXRPbmxpbmUod2luZG93Lm5hdmlnYXRvci5vbkxpbmUpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXBwVmVyc2lvbiA9IGdldENhY2hlVmVyc2lvbigpO1xyXG4gICAgY29uc3QgW29ubGluZSwgc2V0T25saW5lXSA9IHVzZVN0YXRlKHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCAgdXBkYXRlT25saW5lU3RhdHVzKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgdXBkYXRlT25saW5lU3RhdHVzKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAgPEFwcEJhciBwb3NpdGlvbj1cImZpeGVkXCI+XHJcbiAgICAgICAgICAgICAgICA8VG9vbGJhcj5cclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwiaDZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSG9qYSBkZSBydXRhXHJcbiAgICAgICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAvLzxJY29uQnV0dG9uIHN0eWxlPXt7bWFyZ2luVG9wOiczcHgnfX1cclxuICAgICAgICAgICAgICAgICAgICAvLyAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgIC8vb25DbGljaz17LypkaXNwYXRjaCBxdWUgbGxldmEgYSBwYW50YWxsYSBvcGNpb25lcyovfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vPlxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgIDxJQ09OLlNldHRpbmdzLz5cclxuICAgICAgICAgICAgICAgICAgICAvLzwvSWNvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAge29ubGluZT9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvU2luY3Jvbml6YXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uU3luY0FsdC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgICAgIDpudWxsfVxyXG4gICAgICAgICAgICAgICAgPC9Ub29sYmFyPlxyXG4gICAgICAgICAgICA8L0FwcEJhcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJob2phLWRlLXJ1dGFcIj5cclxuICAgICAgICAgICAgICAgIHttb2RvLmRlbW8/PGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5Nb2RvIGRlbW8gPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cIm91dGxpbmVkXCIgY29sb3I9XCJzZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuUkVJTklDSUFSX0RFTU8oe30pKX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlaW5pY2lhclxyXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+Om51bGx9XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm5vbWJyZS12ZXJzaW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5EaXJlY2Npw7NuIEdlbmVyYWwgZGUgRXN0YWTDrXN0aWNhIHkgQ2Vuc29zIC0gQy5BLkIuQS48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PntteS5nZXRMb2NhbFZhcignYXBwLXZlcnNpb24nKX0gc2luY3JvIHtudW1fc2luY3JvfSAtIHZlcnNpw7NuIHthcHBWZXJzaW9ufTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB7bGlrZUFyKGNhcmdhcykubWFwKChjYXJnYSwgaWRDYXJnYSwgXywgcG9zaWNpb24pPT5cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ2FyZ2Ega2V5PXtpZENhcmdhfSBjYXJnYT17Y2FyZ2F9IGlkQ2FyZ2E9e2lkQ2FyZ2F9IHBvc2ljaW9uPXtwb3NpY2lvbn0gaW5mb3JtYWNpb25IZHI9e2luZm9ybWFjaW9uSGRyfSBmZWVkYmFja1Jvd1ZhbGlkYXRvcj17ZmVlZGJhY2tSb3dWYWxpZGF0b3J9IHJlc3B1ZXN0YXM9e3Jlc3B1ZXN0YXN9Lz5cclxuICAgICAgICAgICAgICAgICkuYXJyYXkoKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC8+XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gTGlzdGFUZXh0b3MocHJvcHM6e3RleHRvczpzdHJpbmdbXX0pe1xyXG4gICAgcmV0dXJuIDx1bD5cclxuICAgICAgICB7cHJvcHMudGV4dG9zLm1hcCh0PT48bGk+PFR5cG9ncmFwaHk+e3R9PC9UeXBvZ3JhcGh5PjwvbGk+KX1cclxuICAgIDwvdWw+O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQmllbnZlbmlkYURlc3BsaWVndWUocHJvcHM6e21vZG86Q2Fzb1N0YXRlW1wibW9kb1wiXX0pe1xyXG4gICAgdmFyIGRpc3BhdGNoPXVzZURpc3BhdGNoKCk7XHJcbiAgICByZXR1cm4gPFBhcGVyIGNsYXNzTmFtZT1cImJpZW52ZW5pZGFcIj5cclxuICAgICAgICB7cHJvcHMubW9kby5kZW1vP1xyXG4gICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+REVNTyBkZWwgc2lzdGVtYSBkZSByZWxldmFtaWVudG8gZGUgRE1FTkNVPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+RW4gZXN0YSBkZW1vOjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgIDxMaXN0YVRleHRvcyB0ZXh0b3M9e1tcclxuICAgICAgICAgICAgICAgICAgICBcIkFsZ3VuYXMgdml2aWVuZGFzIGFwYXJlY2VuIHJlbGV2YWRhcyAoZWwgYm90w7NuIGVzdMOhIGRlIGNvbG9yKSBzaXJ2ZW4gZGUgZWplbXBsb1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiTG8gcXVlIHNlIGNhcmd1ZW4gc2UgZ3VhcmRhbiBsb2NhbG1lbnRlIHBlcm8gbm8gc2UgdHJhc21pdGVuIGEgbGEgYmFzZSBkZSBkYXRvc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiU2UgcHVlZGUgdm9sdmVyIGEgbGEgdmVyc2nDs24gaW5pY2lhbCAobyBzZWEgYm9ycmFyIGxvIHF1ZSBzZSBndWFyZMOzIGxvY2FsbWVudGUpIGRlc2RlIGxhIGhvamEgZGUgcnV0YSBib3RvbiBbcmVpbmljaWFyIGRlbW9dXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJUb2RhdsOtYSBoYXkgY29zYXMgcXVlIGZhbHRhbiBvIHB1ZWRlbiBjYW1iaWFyXCIsXHJcbiAgICAgICAgICAgICAgICBdfSAvPlxyXG4gICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgOjw+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5FbmN1ZXN0YSBkZSBTZXJvcHJldmFsZW5jaWEgZGUgQ09WSUQtMTk8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgIDwvPlxyXG4gICAgICAgIH1cclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxyXG4gICAgICAgICAgICBjb2xvcj1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57IGdvdG9TaW5jcm9uaXphcigpOyB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4+U2luY3Jvbml6YXIgPC9zcGFuPiA8SUNPTi5TeW5jQWx0Lz5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7b3BjaW9uOidiaWVudmVuaWRvJywgdmFsb3I6dHJ1ZX0pKX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuPkNvbnRpbnVhciA8L3NwYW4+IDxJQ09OLlNlbmQvPlxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgPC9QYXBlcj5cclxufVxyXG5cclxuLy9DT05UUk9MIERFIFBFU1RBw5FBU1xyXG52YXIgYWxsT3BlbmVkVGFiczp7W3g6c3RyaW5nXTpudW1iZXJ9PXt9O1xyXG52YXIgaW5mb09wZW5lZFRhYnM9e1xyXG4gICAgYWxsT3BlbmVkVGFicyxcclxuICAgIG15SWQ6J2NhbGN1bGFuZG8uLi4nLFxyXG4gICAgb3RoZXJUYWJzTmFtZXM6JydcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE9wZW5lZFRhYnMoKXtcclxuICAgIGNvbnN0IFt0YWJzLCBzZXRUYWJzXSA9IHVzZVN0YXRlKGluZm9PcGVuZWRUYWJzLm90aGVyVGFic05hbWVzKTtcclxuICAgIHZhciB7bW9kb0RpcmVjdG99ID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9Pih7bW9kb0RpcmVjdG86c3RhdGUub3BjaW9uZXMubW9kb0RpcmVjdG99KSk7XHJcbiAgICBjb25zdCB1cGRhdGVUYWJzU3RhdHVzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICBzZXRUYWJzKGluZm9PcGVuZWRUYWJzLm90aGVyVGFic05hbWVzKTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKT0+e1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdteS10YWJzJyx1cGRhdGVUYWJzU3RhdHVzKTtcclxuICAgICAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ215LXRhYnMnLHVwZGF0ZVRhYnNTdGF0dXMpO1xyXG4gICAgfSxbXSlcclxuICAgIHJldHVybiBtb2RvRGlyZWN0bz9udWxsOih0YWJzKT9cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRhYi1jb3VudGVyIHRhYi1lcnJvclwiPsKhQVRFTkNJw5NOISBIYXkgbcOhcyBkZSB1bmEgdmVudGFuYSBhYmllcnRhLiBTZSBwdWVkZW4gcGVyZGVyIGRhdG9zOiB7dGFic308L2Rpdj5cclxuICAgIDpcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRhYi1jb3VudGVyXCI+4pyUPC9kaXY+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBBcHBEbUVuY3UoKXtcclxuICAgIHZhciB7Zm9yUGssIGJpZW52ZW5pZG8sIG1vZG99ID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9Pih7Li4uc3RhdGUub3BjaW9uZXMsIC4uLnN0YXRlLm1vZG8sIC4uLnN0YXRlfSkpO1xyXG4gICAgaWYoIWJpZW52ZW5pZG8pe1xyXG4gICAgICAgIHJldHVybiA8QmllbnZlbmlkYURlc3BsaWVndWUgbW9kbz17bW9kb30vPiBcclxuICAgIH1lbHNlIGlmKGZvclBrPT1udWxsKXtcclxuICAgICAgICByZXR1cm4gPEhvamFEZVJ1dGFEZXNwbGllZ3VlIC8+IFxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgcmV0dXJuIDxGb3JtdWxhcmlvRGVzcGxpZWd1ZSBmb3JQaz17Zm9yUGt9Lz5cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gUGFudGFsbGFJbmljaWFsU2luQ2FyZ2EoX3Byb3BzOnt9KXtcclxuICAgIGNvbnN0IHVwZGF0ZU9ubGluZVN0YXR1cyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgc2V0T25saW5lKHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lKTtcclxuICAgIH1cclxuICAgIGNvbnN0IFtvbmxpbmUsIHNldE9ubGluZV0gPSB1c2VTdGF0ZSh3aW5kb3cubmF2aWdhdG9yLm9uTGluZSk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgIHVwZGF0ZU9ubGluZVN0YXR1cyk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIHVwZGF0ZU9ubGluZVN0YXR1cyk7XHJcbiAgICBjb25zdCBwYXJhZ3JhcGhTdHlsZXM9e2ZvbnRTaXplOlwiMS4ycmVtXCIsIGZvbnRXZWlnaHQ6NjAwLCBwYWRkaW5nOiBcIjVweCAxMHB4XCJ9O1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8PlxyXG4gICAgICAgICAgICA8QXBwQmFyIHBvc2l0aW9uPVwiZml4ZWRcIj5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJoNlwiIHN0eWxlPXt7bWFyZ2luOjI1fX0+XHJcbiAgICAgICAgICAgICAgICAgICAgRGlzcG9zaXRpdm8gc2luIGNhcmdhXHJcbiAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgIDwvQXBwQmFyPlxyXG4gICAgICAgICAgICA8bWFpbj5cclxuICAgICAgICAgICAgICAgIDxQYXBlciBzdHlsZT17e2hlaWdodDonNjAwcHgnLCBwYWRkaW5nOlwiMTVweFwiLCBtYXJnaW5Ub3A6NzV9fT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7b25saW5lP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJwXCIgc3R5bGU9e3BhcmFncmFwaFN0eWxlc30+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbmNyb25pemFyIGRpc3Bvc2l0aXZvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7cGFkZGluZzonNXB4J319PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290b1NpbmNyb25pemFyKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLlN5bmNBbHQvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgY29tcG9uZW50PVwicFwiIHN0eWxlPXtwYXJhZ3JhcGhTdHlsZXN9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIGhheSBjb25leGnDs24gYSBpbnRlcm5ldCwgcG9yIGZhdm9yIGNvbsOpY3RlIGVsIGRpc3Bvc2l0aXZvIGEgdW5hIHJlZCBwYXJhIHNpbmNyb25pemFyIHVuYSBob2phIGRlIHJ1dGEuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvUGFwZXI+XHJcbiAgICAgICAgICAgIDwvbWFpbj5cclxuICAgICAgICA8Lz5cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBQYW50YWxsYUluaWNpYWwoKXtcclxuICAgIHZhciB7Zm9yUGssIGJpZW52ZW5pZG8sIG1vZG99ID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9Pih7Li4uc3RhdGUub3BjaW9uZXMsIC4uLnN0YXRlLm1vZG8sIC4uLnN0YXRlfSkpO1xyXG4gICAgaWYoIWJpZW52ZW5pZG8pe1xyXG4gICAgICAgIHJldHVybiA8QmllbnZlbmlkYURlc3BsaWVndWUgbW9kbz17bW9kb30vPiBcclxuICAgIH1lbHNlIGlmKGZvclBrPT1udWxsKXtcclxuICAgICAgICByZXR1cm4gPEhvamFEZVJ1dGFEZXNwbGllZ3VlIC8+IFxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgcmV0dXJuIDxGb3JtdWxhcmlvRGVzcGxpZWd1ZSBmb3JQaz17Zm9yUGt9Lz5cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRtUGFudGFsbGFJbmljaWFsU2luQ2FyZ2EoKXtcclxuICAgIHRyeXtcclxuICAgICAgICBhd2FpdCBsb2FkQ1NTKEJPT1RTVFJBUF81XzFfM19TUkMpO1xyXG4gICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgdGhyb3coZXJyKVxyXG4gICAgfVxyXG4gICAgUmVhY3RET00ucmVuZGVyKFxyXG4gICAgICAgIDxQYW50YWxsYUluaWNpYWxTaW5DYXJnYS8+LFxyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpXHJcbiAgICApXHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsKG9wdHM6e21vZG9EZW1vOmJvb2xlYW4sIGZvclBrUmFpej86Rm9yUGtSYWl6LCBvcGVyYXRpdm86SWRPcGVyYXRpdm99KXtcclxuICAgIC8vIHRyYWVyIGxvcyBtZXRhZGF0b3MgZW4gdW5hIFwiZXN0cnVjdHVyYVwiXHJcbiAgICAvLyB0cmFlciBsb3MgZGF0b3MgZGUgbG9jYWxTdG9yYWdlXHJcbiAgICAvLyB2ZXJpZmljYXIgZWwgbWFpbiBMYXlvdXRcclxuICAgIGNvbnN0IHN0b3JlID0gYXdhaXQgZG1UcmFlckRhdG9zRm9ybXVsYXJpbyhvcHRzKVxyXG4gICAgdHJ5e1xyXG4gICAgICAgIGF3YWl0IGxvYWRDU1MoQk9PVFNUUkFQXzVfMV8zX1NSQyk7XHJcbiAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICB0aHJvdyhlcnIpXHJcbiAgICB9XHJcbiAgICBSZWFjdERPTS5yZW5kZXIoXHJcbiAgICAgICAgPFJlbmRlclByaW5jaXBhbCBzdG9yZT17c3RvcmV9IGRpc3BhdGNoZXJzPXtkaXNwYXRjaGVyc30gbWVuc2FqZVJldG9ybm89e29wdHMuZm9yUGtSYWl6P1wiVm9sdmVyIGFsIGZvcm11bGFyaW9cIjpcIlZvbHZlciBhIGxhIGhvamEgZGUgcnV0YVwifT5cclxuICAgICAgICAgICAgPE9wZW5lZFRhYnMvPlxyXG4gICAgICAgICAgICA8QXBwRG1FbmN1Lz5cclxuICAgICAgICA8L1JlbmRlclByaW5jaXBhbD4sXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JylcclxuICAgIClcclxufVxyXG5cclxuaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpe1xyXG4gICAgLy8gQHRzLWlnbm9yZSBwYXJhIGhhY2VybG9cclxuICAgIHdpbmRvdy5kZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsID0gZGVzcGxlZ2FyRm9ybXVsYXJpb0FjdHVhbDtcclxuICAgIC8vIEB0cy1pZ25vcmUgcGFyYSBoYWNlcmxvXHJcbiAgICB3aW5kb3cuZG1QYW50YWxsYUluaWNpYWxTaW5DYXJnYSA9IGRtUGFudGFsbGFJbmljaWFsU2luQ2FyZ2E7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBsb2FkSW5zdGFuY2UoKXtcclxuICAgIGlmKHR5cGVvZiBCcm9hZGNhc3RDaGFubmVsID09PSAndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGJjID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoJ2NvbnRhZG9yJyk7XHJcbiAgICB2YXIgbXlJZD1TdHJpbmcuZnJvbUNvZGVQb2ludCgxMDArTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjEwMDApKStNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMTAwKS8vKyctJytuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgIGFsbE9wZW5lZFRhYnNbbXlJZF09MTtcclxuICAgIGluZm9PcGVuZWRUYWJzLm15SWQ9bXlJZDtcclxuICAgIHZhciBldmVudCA9IG5ldyBFdmVudCgnbXktdGFicycpO1xyXG4gICAgYmMub25tZXNzYWdlPWZ1bmN0aW9uKGV2KXtcclxuICAgICAgICBpZihldi5kYXRhLnF1ZT09J3NveScpe1xyXG4gICAgICAgICAgICBpZighYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSl7XHJcbiAgICAgICAgICAgICAgICBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdPTA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihldi5kYXRhLnF1ZT09J3VubG9hZCcpe1xyXG4gICAgICAgICAgICBkZWxldGUgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoZXYuZGF0YS5xdWU9PSdsb2FkJyl7XHJcbiAgICAgICAgICAgIGFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF09MTtcclxuICAgICAgICAgICAgYmMucG9zdE1lc3NhZ2Uoe3F1ZTonc295JyxpZDpteUlkfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGluZm9PcGVuZWRUYWJzLm90aGVyVGFic05hbWVzPWxpa2VBcihhbGxPcGVuZWRUYWJzKS5maWx0ZXIoKF8saWQpPT5pZCE9bXlJZCkuam9pbignLCcpO1xyXG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIH07XHJcbiAgICBiYy5wb3N0TWVzc2FnZSh7cXVlOidsb2FkJyxpZDpteUlkfSk7XHJcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5sb2FkJyxmdW5jdGlvbigpe1xyXG4gICAgICAgIGJjLnBvc3RNZXNzYWdlKHtxdWU6J3VubG9hZCcsaWQ6bXlJZH0pO1xyXG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIH0pXHJcbiAgICAvL21vc3RyYXJRdWllbmVzU29tb3MoKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHNldExpYnJlRGVzcGxpZWd1ZSA9IChsaWJyZTpMaWJyZURlc3BsaWVndWVUeXBlKT0+TGlicmVEZXNwbGllZ3VlID0gbGlicmVcclxuXHJcbnNldExpYnJlRGVzcGxpZWd1ZSgocHJvcHM6e1xyXG4gICAga2V5OnN0cmluZ1xyXG4gICAgY2FzaWxsZXJvOkxpYnJlXHJcbiAgICBmb3JtdWxhcmlvOkZvcm11bGFyaW9cclxuICAgIGZvclBrOkZvclBrXHJcbn0pPT48ZGl2IGtleT17cHJvcHMua2V5fSBpZD17cHJvcHMuY2FzaWxsZXJvLmlkX2Nhc2lsbGVyb30+ZXN0ZSBjYXNpbGxlcm8gZGViZSByZWRlZmluaXJzZSBlbiBsYSBBUFAgZmluYWwgeSBzdSB1c28gZXMgZXhjbHVzaXZvIGRlbCDDoXJlYSBpbmZvcm3DoXRpY2E8L2Rpdj4pXHJcblxyXG5zZXRDYWxjdWxhclZhcmlhYmxlcygocmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosIGZvclBrOkZvclBrKT0+e1xyXG4gICAgLy9UT0RPIEdFTkVSQUxJWkFSXHJcbiAgICB2YXIgdWFzSXRlcmFyOntcclxuICAgICAgICBba2V5IGluIElkVW5pZGFkQW5hbGlzaXNdOntcclxuICAgICAgICAgICAgdWFQZXJzb25hczogSWRVbmlkYWRBbmFsaXNpc1xyXG4gICAgICAgICAgICB2YXJTZXhvUGVyc29uYTogSWRWYXJpYWJsZVxyXG4gICAgICAgICAgICB2YXJOb21icmVQZXJzb25hOiBJZFZhcmlhYmxlXHJcbiAgICAgICAgICAgIHZhckxvc05vbWJyZXM6IElkVmFyaWFibGVcclxuICAgICAgICB9XHJcbiAgICB9ID0ge1xyXG4gICAgICAgIGhvZ2FyZXM6IHtcclxuICAgICAgICAgICAgdWFQZXJzb25hczogJ3BlcnNvbmFzJyxcclxuICAgICAgICAgICAgdmFyU2V4b1BlcnNvbmE6ICdzZXhvJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgICAgICB2YXJOb21icmVQZXJzb25hOiAnbm9tYnJlJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgICAgICB2YXJMb3NOb21icmVzOiBcImxvc19ub21icmVzXCIgYXMgSWRWYXJpYWJsZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgW1wiaG9nYXJlc19zdXBcIiBhcyBJZFVuaWRhZEFuYWxpc2lzXSA6IHtcclxuICAgICAgICAgICAgdWFQZXJzb25hczogJ3BlcnNvbmFzX3N1cCcgYXMgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgICAgICAgICAgdmFyU2V4b1BlcnNvbmE6ICdzZXhvX3N1cCcgIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgICAgIHZhck5vbWJyZVBlcnNvbmE6ICdub21icmVfc3VwJyAgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICAgICAgdmFyTG9zTm9tYnJlczogXCJub21icmVzX2NvbXBvbmVudGVzX3N1cFwiICBhcyBJZFZhcmlhYmxlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGlrZUFyKHVhc0l0ZXJhcikuZm9yRWFjaCgoY29uZmlnSG9nYXJlcyx1YUhvZ2FyZXMpPT57XHJcbiAgICAgICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICAgICAgaWYoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1YUhvZ2FyZXNdKXtcclxuICAgICAgICAgICAgZm9yKHZhciByZXNwdWVzdGFzSG9nYXIgb2YgaXRlcmF0b3IocmVzcHVlc3Rhc1JhaXpbdWFIb2dhcmVzXT8/W10pKXtcclxuICAgICAgICAgICAgICAgIGlmKCFyZXNwdWVzdGFzSG9nYXJbY29uZmlnSG9nYXJlcy51YVBlcnNvbmFzXSB8fCBlbXB0eShyZXNwdWVzdGFzSG9nYXJbY29uZmlnSG9nYXJlcy51YVBlcnNvbmFzXSkgfHwgcmVzcHVlc3Rhc0hvZ2FyW2NvbmZpZ0hvZ2FyZXMudWFQZXJzb25hc11bMF1bY29uZmlnSG9nYXJlcy52YXJTZXhvUGVyc29uYV0gPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvc05vbWJyZXMgPSByZXNwdWVzdGFzSG9nYXJbY29uZmlnSG9nYXJlcy52YXJMb3NOb21icmVzXSBhcyBzdHJpbmdcclxuICAgICAgICAgICAgICAgICAgICBpZihsb3NOb21icmVzICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZighcmVzcHVlc3Rhc0hvZ2FyW2NvbmZpZ0hvZ2FyZXMudWFQZXJzb25hc10pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0hvZ2FyW2NvbmZpZ0hvZ2FyZXMudWFQZXJzb25hc109W107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9zTm9tYnJlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKG5vbWJyZTpzdHJpbmcpPT5ub21icmUudHJpbSgpLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgobm9tYnJlOnN0cmluZywgaTpudW1iZXIpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0hvZ2FyW2NvbmZpZ0hvZ2FyZXMudWFQZXJzb25hc11baV0gPSByZXNwdWVzdGFzSG9nYXJbY29uZmlnSG9nYXJlcy51YVBlcnNvbmFzXVtpXSB8fCB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzSG9nYXJbY29uZmlnSG9nYXJlcy51YVBlcnNvbmFzXVtpXVtjb25maWdIb2dhcmVzLnZhck5vbWJyZVBlcnNvbmFdID0gbm9tYnJlLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxuICAgIHJlc3B1ZXN0YXNSYWl6LnZkb21pbmlvPWdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbZm9yUGsudml2aWVuZGFdLnRlbS5kb21pbmlvO1xyXG59KVxyXG5cclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpe1xyXG4gICAgbG9hZEluc3RhbmNlKClcclxufSlcclxuLy9GSU4gQ09OVFJPTCBQRVNUQcORQVNcclxuXHJcbmZ1bmN0aW9uIGxvYWRDU1MoY3NzVVJMOnN0cmluZywgaWQ/OnN0cmluZyk6UHJvbWlzZTx2b2lkPntcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoIHJlc29sdmUsIHJlamVjdCApPT57XHJcbiAgICAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnbGluaycgKTtcclxuICAgICAgICBsaW5rLnJlbCAgPSAnc3R5bGVzaGVldCc7XHJcbiAgICAgICAgbGluay5ocmVmID0gY3NzVVJMO1xyXG4gICAgICAgIGxpbmsuaWQgPSBpZCB8fCBjc3NVUkw7XHJcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggbGluayApO1xyXG4gICAgICAgIGxpbmsub25sb2FkID0gKCk9PnsgXHJcbiAgICAgICAgICAgIHJlc29sdmUoKTsgXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGB0cmFlICR7Y3NzVVJMfWApO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGluay5vbmVycm9yPShlcnIpPT57XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciBjYXJnYW5kbyBlbCBlc3RpbG8nLCBlcnIpXHJcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHByb2JsZW1hIGNhcmdhbmRvIGVzdGlsbyAke2Nzc1VSTH1gKSlcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVtb3ZlQ1NTQnlJZChpZDpzdHJpbmcpe1xyXG4gICAgdmFyIGxpbmtOb2RlID0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuICAgIGxpbmtOb2RlPy5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChsaW5rTm9kZSk7XHJcbn1cclxuXHJcbmNvbnN0IEJPT1RTVFJBUF81XzFfM19TUkMgPSAnY3NzL2Jvb3RzdHJhcC5taW4uY3NzJzsiXX0=
@@ -145,17 +145,12 @@ const Button2 = ({variant, onClick, disabled, children, className, color, size,
145
145
  className?:string,
146
146
  size?:'small',
147
147
  $attrs?:{}
148
- } & CommonAttributes)=>{
149
- let button = html.button({
150
- ...other,
151
- class: `btn btn${variant=='contained'?'':'-'+(variant=='outlined'?'outline':variant)}-${(color=='default' || color=='inherit'?'secondary':color=='secondary'?'danger':color)||'secondary'} ${className||''} ${size=='small'?'btn-sm':''}`,
152
- disabled,
153
- }, children).create();
154
- button.onmouseup = (_event)=>{
155
- onClick?.();
156
- }
157
- return button
158
- }
148
+ } & CommonAttributes)=>html.button({
149
+ ...other,
150
+ class: `btn btn${variant=='contained'?'':'-'+(variant=='outlined'?'outline':variant)}-${(color=='default' || color=='inherit'?'secondary':color=='secondary'?'danger':color)||'secondary'} ${className||''} ${size=='small'?'btn-sm':''}`,
151
+ disabled,
152
+ $on:{click:onClick}
153
+ }, children);
159
154
 
160
155
 
161
156
  const TextField = (props:{
@@ -872,6 +867,7 @@ function TextoDespliegue(props:{casillero:Texto, forPk:ForPk}){
872
867
  var ir = (defBoton:DefinicionFormularioAbrir)=>{
873
868
  // var nuevaForPk={...forPk, formulario:idFormularioDestino};
874
869
  // nuevaForPk[nuevoCampoPk] = defBoton.num
870
+ dispatchByPass(accion_abrir_formulario,{forPk:defBoton.forPk});
875
871
  dispatch(dispatchers.CAMBIAR_FORMULARIO({forPk:defBoton.forPk, apilarVuelta:true}));
876
872
  }
877
873
  return <DesplegarCasillero
@@ -1481,7 +1477,10 @@ function BotonVolverEnDiv({id}:{id:string}){
1481
1477
  return <div className="div-boton-volver">
1482
1478
  {opciones.pilaForPk.length>0?
1483
1479
  <Button id={id} className="boton-volver"
1484
- onClick={()=>dispatch(dispatchers.VOLVER_DE_FORMULARIO({magnitudRetroceso:1}))}
1480
+ onClick={()=>{
1481
+ dispatchByPass(accion_abrir_formulario,{forPk:opciones.pilaForPk[opciones.pilaForPk.length-1]});
1482
+ dispatch(dispatchers.VOLVER_DE_FORMULARIO({magnitudRetroceso:1}))
1483
+ }}
1485
1484
  > <ICON.ChevronLeft/> Volver</Button>
1486
1485
  :null}
1487
1486
  </div>
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dmencu",
3
3
  "description": "DM Encu - Encuestas en dispositivo móvil",
4
- "version": "0.3.50",
4
+ "version": "0.3.52",
5
5
  "author": "Codenautas <codenautas@googlegroups.com>",
6
6
  "license": "MIT",
7
7
  "main": "dist/server/server/app-dmencu.js",