dmencu 2.2.11 → 2.2.12
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.
|
@@ -93,8 +93,8 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
93
93
|
});
|
|
94
94
|
var LibreDespliegue;
|
|
95
95
|
const Button = (_a) => {
|
|
96
|
-
var { variant, onClick, disabled, children, className, color, size, disableElevation, disableFocusRipple, disableRipple } = _a, other = __rest(_a, ["variant", "onClick", "disabled", "children", "className", "color", "size", "disableElevation", "disableFocusRipple", "disableRipple"]);
|
|
97
|
-
return React.createElement("button", Object.assign({}, other, { className: `btn btn${variant == 'contained' ? '' : '-' + (variant == 'outlined' ? 'outline' : variant)}-${(color == 'default' || color == 'inherit' ? 'secondary' : color == 'secondary' ? 'danger' : color) || 'secondary'} ${className || ''} ${size == 'small' ? 'btn-sm' : ''}`, disabled: disabled, onClick: onClick }), children);
|
|
96
|
+
var { variant, onClick, disabled, children, className, color, size, disableElevation, disableFocusRipple, disableRipple, type } = _a, other = __rest(_a, ["variant", "onClick", "disabled", "children", "className", "color", "size", "disableElevation", "disableFocusRipple", "disableRipple", "type"]);
|
|
97
|
+
return React.createElement("button", Object.assign({}, other, { className: `btn btn${variant == 'contained' ? '' : '-' + (variant == 'outlined' ? 'outline' : variant)}-${(color == 'default' || color == 'inherit' ? 'secondary' : color == 'secondary' ? 'danger' : color) || 'secondary'} ${className || ''} ${size == 'small' ? 'btn-sm' : ''}`, disabled: disabled, type: type, onClick: onClick }), children);
|
|
98
98
|
};
|
|
99
99
|
exports.Button = Button;
|
|
100
100
|
const styleToCss = (style) => {
|
|
@@ -106,7 +106,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
106
106
|
var { variant, onClick, disabled, children, className, color, size, style } = _a, other = __rest(_a, ["variant", "onClick", "disabled", "children", "className", "color", "size", "style"]);
|
|
107
107
|
return js_to_html_1.html.button(Object.assign(Object.assign({}, other), { style: styleToCss(style), 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);
|
|
108
108
|
};
|
|
109
|
-
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 });
|
|
109
|
+
const TextField = (props) => React.createElement("input", Object.assign({}, props.inputProps, { 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 }));
|
|
110
110
|
const Typography = (_a) => {
|
|
111
111
|
var { children } = _a, others = __rest(_a, ["children"]);
|
|
112
112
|
return React.createElement(others.variant || others.component || 'div', others, children);
|
|
@@ -413,6 +413,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
413
413
|
// }, [props.valor]);
|
|
414
414
|
const inputProps = {
|
|
415
415
|
maxLength: longitud,
|
|
416
|
+
enterKeyHint: "next",
|
|
416
417
|
};
|
|
417
418
|
const onChange = (nuevoValor) => {
|
|
418
419
|
var _a, _b, _c;
|
|
@@ -421,36 +422,46 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
421
422
|
(((_a = pregunta.especial) === null || _a === void 0 ? void 0 : _a.noScroll) == true) ? null : enfocarElementoDeVariable((_c = (_b = pregunta.especial) === null || _b === void 0 ? void 0 : _b.scrollTo) !== null && _c !== void 0 ? _c : siguienteVariable);
|
|
422
423
|
}
|
|
423
424
|
};
|
|
425
|
+
const handleSubmit = ({ esBotonConfirmar }) => {
|
|
426
|
+
debeSaltar = esBotonConfirmar ? true : (saltoAutomatico || conCampoOpciones);
|
|
427
|
+
var isInputFocused = document.activeElement && (document.activeElement.tagName === 'INPUT' || document.activeElement.tagName === 'TEXTAREA');
|
|
428
|
+
if (isInputFocused) {
|
|
429
|
+
if (document.activeElement instanceof HTMLElement) {
|
|
430
|
+
document.activeElement.blur();
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
else {
|
|
434
|
+
var elementoInputVariable = document.getElementById(`var-${pregunta.var_name || ''}`);
|
|
435
|
+
onChange(elementoInputVariable ? elementoInputVariable.value : bypass_formulario_2.NO_CAMBIAR__VERIFICAR_SI_ES_NECESARIO);
|
|
436
|
+
}
|
|
437
|
+
};
|
|
424
438
|
var nuestraLongitud = calcularNuestraLongitud(pregunta.longitud || longitud);
|
|
425
439
|
return React.createElement("div", { className: "campo", "nuestra-longitud": nuestraLongitud, style: props.hidden == 'quitar' ? { display: 'none' } : props.hidden ? { visibility: 'hidden' } : undefined },
|
|
426
440
|
mini ? null : React.createElement(BotonBorrar, { id: `borrar-abierta-${pregunta.var_name}`, variable: pregunta.var_name, forPk: props.forPk }),
|
|
427
|
-
React.createElement("
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
}
|
|
437
|
-
event.preventDefault();
|
|
438
|
-
}
|
|
439
|
-
}, onFocus: (_event) => setEditando(true), onBlur: (event, valor) => {
|
|
440
|
-
var _a;
|
|
441
|
-
if ((_a = event === null || event === void 0 ? void 0 : event.relatedTarget) === null || _a === void 0 ? void 0 : _a.getAttribute('boton-confirmar')) {
|
|
442
|
-
debeSaltar = true;
|
|
443
|
-
}
|
|
444
|
-
onChange(valor);
|
|
445
|
-
setEditando(false);
|
|
446
|
-
} })),
|
|
447
|
-
disabled || ((_c = pregunta.especial) === null || _c === void 0 ? void 0 : _c.gps) || mini ? null :
|
|
448
|
-
React.createElement("div", { className: "boton-confirmar-campo" },
|
|
449
|
-
React.createElement(exports.Button, { variant: editando ? "contained" : 'outlined', size: "small", color: editando ? 'primary' : 'default', "boton-confirmar": pregunta.var_name, tabIndex: -1, onClick: () => {
|
|
450
|
-
onChange(bypass_formulario_2.NO_CAMBIAR__VERIFICAR_SI_ES_NECESARIO);
|
|
441
|
+
React.createElement("form", { className: "form-campo-wrapper", style: { display: 'contents' }, onSubmit: (e) => {
|
|
442
|
+
e.preventDefault();
|
|
443
|
+
handleSubmit({ esBotonConfirmar: false });
|
|
444
|
+
} },
|
|
445
|
+
React.createElement("div", { className: "input-campo" },
|
|
446
|
+
React.createElement(TextField, { id: `var-${pregunta.var_name || ''}`, disabled: disabled || ((_a = pregunta.especial) === null || _a === void 0 ? void 0 : _a.gps), className: "variable",
|
|
447
|
+
//var-length={pregunta.longitud}
|
|
448
|
+
fullWidth: true, inputProps: inputProps, type: (_b = pregunta.despliegueTipoInput) !== null && _b !== void 0 ? _b : (0, render_general_1.adaptarTipoVarCasillero)(pregunta.tipovar), onFocus: (_event) => setEditando(true), onBlur: (_event, valor) => {
|
|
449
|
+
onChange(valor);
|
|
451
450
|
setEditando(false);
|
|
452
|
-
}
|
|
453
|
-
|
|
451
|
+
}, onKeyDown: (event) => {
|
|
452
|
+
var esEnter = (event.key == 'Enter' || event.keyCode == 13);
|
|
453
|
+
if (esEnter) {
|
|
454
|
+
event.preventDefault();
|
|
455
|
+
handleSubmit({ esBotonConfirmar: false });
|
|
456
|
+
}
|
|
457
|
+
} })),
|
|
458
|
+
disabled || ((_c = pregunta.especial) === null || _c === void 0 ? void 0 : _c.gps) || mini ? null :
|
|
459
|
+
React.createElement("div", { className: "boton-confirmar-campo" },
|
|
460
|
+
React.createElement(exports.Button, { variant: editando ? "contained" : 'outlined', size: "small", color: editando ? 'primary' : 'default', "boton-confirmar": pregunta.var_name, tabIndex: -1, type: "button", onClick: (e) => {
|
|
461
|
+
e.preventDefault();
|
|
462
|
+
handleSubmit({ esBotonConfirmar: true });
|
|
463
|
+
} },
|
|
464
|
+
React.createElement(render_general_1.ICON.Check, null)))));
|
|
454
465
|
}
|
|
455
466
|
function OpcionesDespliegue({ casilleroConOpciones, forPk, leer, despliegueContenido }) {
|
|
456
467
|
const desplegarOtros = (opcion, soloParaDespliegue) => opcion.casilleros.map((subPregunta) => (soloParaDespliegue == null || soloParaDespliegue == subPregunta.despliegueContenido ?
|
|
@@ -1836,4 +1847,4 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1836
1847
|
}
|
|
1837
1848
|
const BOOTSTRAP_5_1_3_SRC = 'css/bootstrap.min.css';
|
|
1838
1849
|
});
|
|
1839
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvcmVuZGVyLWZvcm11bGFyaW8udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBK0ZBLHNDQU9DO0lBazFERCw0QkFLQztJQWtNRCxvREFTQztJQUVELG9HQU9DO0lBRUQsb0NBZUM7SUFzRUQsa0NBSUM7SUFFRCxvREFpQ0M7SUFVRCxnQ0FjQztJQUVELDhCQVNDO0lBOENELDBDQVNDO0lBRUQsOERBVUM7SUFFRCw4REFpQkM7SUF4NEVELCtCQUErQjtJQUMvQixzQ0FBc0M7SUFDdEMscURBUTBCO0lBQzFCLG1DQWdCaUI7SUFDakIsMkRBYzRCO0lBQzVCLHlEQUk0QjtJQUM1QixpQ0FBNEM7SUFDNUMsNkNBQXVEO0lBQ3ZELHFDQUEyQztJQUMzQywrQ0FBeUQ7SUFDekQsMkNBQXdDO0lBRXhDLDRDQU11QjtJQUd2QiwyREFlNEI7SUFFNUIsMkNBQTJDO0lBRTNDLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUcxQixTQUFTLGNBQWMsQ0FBQyxJQUFtQixFQUFFLFdBQWtEO1FBQzNGLElBQUksT0FBTyxJQUFJLElBQUksUUFBUTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3pDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEUsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQy9GLElBQUksQ0FBQyxXQUFX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QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XHJcbmltcG9ydCB7XHJcbiAgICBSZW5kZXJQcmluY2lwYWwsXHJcbiAgICBhZGFwdGFyVGlwb1ZhckNhc2lsbGVybyxcclxuICAgIElDT04sXHJcbiAgICBzY3JvbGxUb1RvcCxcclxuICAgIG1hdGVyaWFsSW9JY29uc1N2Z1BhdGgsXHJcbiAgICB1c2VPbmxpbmVTdGF0dXMsXHJcbiAgICBSZW5kZXJpemFkb3JKU09OXHJcbn0gZnJvbSBcIi4vcmVuZGVyLWdlbmVyYWxcIjtcclxuaW1wb3J0IHtcclxuICAgIEJsb3F1ZSwgQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgQ2FzaWxsZXJvQmFzZSwgQ2Fzb1N0YXRlLCBDb25qdW50b1ByZWd1bnRhcywgQ29uc2lzdGVuY2lhLFxyXG4gICAgRXN0YWRvQ2FyZ2EsIEZpbHRybywgRm9yUGssIEZvclBrUmFpeiwgRm9ybXVsYXJpbyxcclxuICAgIElkRm9ybXVsYXJpbywgSWRQcmVndW50YSwgSWRUYXJlYSwgSWRWYXJpYWJsZSwgSW5mb0Zvcm11bGFyaW8sXHJcbiAgICBNb2RvRGVzcGxpZWd1ZSxcclxuICAgIE9wY2lvbiwgT3BjaW9uTXVsdGlwbGUsIFBsYWluRm9yUGssXHJcbiAgICBQcmVndW50YSwgUHJlZ3VudGFDb25PcGNpb25lcywgUHJlZ3VudGFTaW1wbGUsXHJcbiAgICBSZXNwdWVzdGFzLCBSZXNwdWVzdGFMYXNVQSwgUmVzcHVlc3Rhc1JhaXosIFZhbG9yLCBURU0sIElkQ2FyZ2EsIENhcmdhLCBJZEZpbiwgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgIHRvUGxhaW5Gb3JQayxcclxuICAgIElkQ2FzaWxsZXJvLFxyXG4gICAgUHJlZ3VudGFDb25TaU5vLFxyXG4gICAgVGV4dG8sIEVzdHJ1Y3R1cmEsIEluZm9ybWFjaW9uSGRyLCBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbywgUmVzdW1lbkVzdGFkbywgSWRPcGVyYXRpdm8sIElkRW5jLCBMaWJyZSxcclxuICAgIGl0ZXJhdG9yLCBlbXB0eSwgQ29uZmlndXJhY2lvbkhhYmlsaXRhckJvdG9uRm9ybXVsYXJpbyxcclxuICAgIFBNYXRyaXosXHJcbiAgICBNb2RvRE1cclxufSBmcm9tIFwiLi90aXBvc1wiO1xyXG5pbXBvcnQge1xyXG4gICAgYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8sXHJcbiAgICBhY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8sXHJcbiAgICBjYWxjdWxhckFjdHVhbEJGLFxyXG4gICAgY2FsY3VsYXJEaXNhYmxlZEJGLFxyXG4gICAgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYsXHJcbiAgICBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYSxcclxuICAgIGNyZWFyRW5jdWVzdGEsXHJcbiAgICBnZXREYXRvc0J5UGFzcyxcclxuICAgIGdldEZvcm11bGFyaW9zRm9yVmFsdWVQa1JhaXosXHJcbiAgICBnZXRNYWluRm9ybUZvclZpdmllbmRhLFxyXG4gICAgaW50ZW50YXJCYWNrdXAsXHJcbiAgICByZXNwdWVzdGFzRm9yUGssXHJcbiAgICBzZXRDYWxjdWxhclZhcmlhYmxlc1xyXG59IGZyb20gXCIuL2J5cGFzcy1mb3JtdWxhcmlvXCJcclxuaW1wb3J0IHtcclxuICAgIGRtVHJhZXJEYXRvc0Zvcm11bGFyaW8sIGRpc3BhdGNoZXJzLFxyXG4gICAgZ290b1NpbmNyb25pemFyLFxyXG4gICAgZ290b0NvbnNpc3RpcixcclxufSBmcm9tIFwiLi9yZWR1eC1mb3JtdWxhcmlvXCI7XHJcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgdXNlU2VsZWN0b3IsIHVzZURpc3BhdGNoIH0gZnJvbSBcInJlYWN0LXJlZHV4XCI7XHJcbmltcG9ydCB7IHN0cmljdCBhcyBsaWtlQXIgfSBmcm9tIFwibGlrZS1hclwiO1xyXG5pbXBvcnQgeyBzbGVlcCwgY29hbGVzY2UsIGRhdGV0aW1lIH0gZnJvbSBcImJlc3QtZ2xvYmFsc1wiO1xyXG5pbXBvcnQgeyB1bmV4cGVjdGVkIH0gZnJvbSBcImNhc3QtZXJyb3JcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgICBBcHBCYXIsIEJ1dHRvbkdyb3VwLCBDaGVja2JveCxcclxuICAgIERpYWxvZywgRGlhbG9nQWN0aW9ucywgRGlhbG9nQ29udGVudCwgRGlhbG9nQ29udGVudFRleHQsXHJcbiAgICBEaWFsb2dUaXRsZSwgRGl2aWRlciwgRmFiLFxyXG4gICAgTWVudSwgTWVudUl0ZW0sIFBhcGVyLCBQb3BvdmVyLFxyXG4gICAgVGFibGUsIFRhYmxlQm9keSwgVGFibGVDZWxsLCBUYWJsZUhlYWQsIFRhYmxlUm93LCBUb29sYmFyXHJcbn0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcclxuaW1wb3J0IHsgRXN0YWRvVmFyaWFibGUsIEZvcm1TdHJ1Y3R1cmVTdGF0ZSB9IGZyb20gXCJyb3ctdmFsaWRhdG9yXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8sIHNldEF0dHJEaXN0aW50bywgc2V0VmFsb3JEaXN0aW50bywgZGlzcGF0Y2hCeVBhc3MsXHJcbiAgICBnZXREaXJ0eSwgZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IsXHJcbiAgICBnZXRGdW5jaW9uSGFiaWxpdGFyLFxyXG4gICAgZ2V0RXN0cnVjdHVyYSxcclxuICAgIGRlZk9wZXJhdGl2byxcclxuICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MsXHJcbiAgICBudW1iZXJPclN0cmluZ0luY0lmQXJyYXksXHJcbiAgICBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8sXHJcbiAgICBhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSxcclxuICAgIGFjY2lvbl9pZF9wcmVndW50YSxcclxuICAgIGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8sXHJcbiAgICBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPLFxyXG4gICAgTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMsXHJcbiAgICBNT0RPX0RNX0xPQ0FMU1RPUkFHRV9LRVlcclxufSBmcm9tIFwiLi9ieXBhc3MtZm9ybXVsYXJpb1wiXHJcblxyXG5pbXBvcnQgeyBodG1sLCBIdG1sVGFnIH0gZnJvbSBcImpzLXRvLWh0bWxcIjtcclxuXHJcbmNvbnN0IERFTEFZX1NDUk9MTF8zID0gNTA7XHJcblxyXG5mdW5jdGlvbiBicmVha2VhYmxlVGV4dCh0ZXh0OiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHwgbnVsbDtcclxuZnVuY3Rpb24gYnJlYWtlYWJsZVRleHQodGV4dDogc3RyaW5nIHwgbnVsbCwgZGljY2lvbmFyaW8/OiB7IFtjbGF2ZTogc3RyaW5nXTogUmVhY3QuUmVhY3ROb2RlIH0pIHtcclxuICAgIGlmICh0eXBlb2YgdGV4dCAhPSBcInN0cmluZ1wiKSByZXR1cm4gbnVsbDtcclxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcLy9nLCBcIi9cXHUyMDYzXCIpLnJlcGxhY2UoL1xcL1xcdTIwNjMoXFx3KVxcYi9nLCAnLyQxJyk7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9fX18qL2csICh0b2RvKSA9PiBgWyR7dG9kb31dYCkucmVwbGFjZSgvXFxAXFx3K1xcQC9nLCAodG9kbykgPT4gYFske3RvZG99XWApO1xyXG4gICAgaWYgKCFkaWNjaW9uYXJpbyB8fCB0cnVlKSByZXR1cm4gdGV4dDtcclxuICAgIC8qXHJcbiAgICByZXR1cm4gPHNwYW4+e3BhcnRlcy5tYXAoKHBhcnRlOnN0cmluZywgaTpudW1iZXIpID0+IDxzcGFuIHN0eWxlPXtpJTI9PTE/e3RleHREZWNvcmF0aW9uOlwidW5kZXJsaW5lXCJ9Ont9fT4ge3BhcnRlK1wiIFwifSA8L3NwYW4+KX08L3NwYW4+XHJcbiAgICAqL1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0QkZWYXJOYW1lcyhzYWx0bzogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgY29uc3QgYXJtb05vbVNhbHRvID0gc2FsdG8/LnN1YnN0cmluZygwLCAyKSA9PSAnRjonID8gc2FsdG8uc2xpY2UoMikgOiBzYWx0bztcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbGlzdG86ICckQi5GOicgKyBhcm1vTm9tU2FsdG8gYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICBhZ3JlZ2FyOiAnJEIuRjonICsgYXJtb05vbVNhbHRvICsgJ19hZ3JlZ2FyJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIGlkRm9ybXVsYXJpbzogJ0Y6JyArIGFybW9Ob21TYWx0byBhcyBJZEZvcm11bGFyaW9cclxuICAgIH07XHJcbn1cclxuXHJcbmNvbnN0IFZFUl9ET01JTklPID0gZmFsc2U7IC8vIGVsIGVuY3Vlc3RhZG9yIG5vIG5lY2VzaXRhIHZlciBlbCBkb21pbmlvIGVuIGNhZGEgZW5jdWVzdGEgcG9ycXVlIGVsIGRvbWluaW8gZGVwZW5kZSBkZWwgw6FyZWEgeSBzZSBkZWR1Y2UgZGVsIHByaW1lciBkw61naXRvIGRlbCBuw7ptZXJvIGRlIGVuY3Vlc3RhXHJcbi8vIG5vIHBvbmVyIFZFUl9ET01JTklPIGVuIHRydWUsIGNhbWJpYXIgcG9yIHVuYSB2YXJpYWJsZSBxdWUgc2UgZmlqZSBzaSBlbCBETSBlc3TDoSBlbiBtb2RvIHBydWViYSBvIGVuIG1vZG8gXCJkaXNlw7FvIGNvbmNlcHR1YWxcIlxyXG5cclxuY29uc3QgSURfQk9UT05fVk9MVkVSX0hEUiA9ICdib3Rvbi12b2x2ZXItaGRyJztcclxuY29uc3QgSURfQk9UT05fQ0VSUkFSID0gJ2JvdG9uLWNlcnJhci1lbmN1ZXN0YSc7XHJcblxyXG52YXIgZGViZVNhbHRhcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKSA9PiB7XHJcbiAgICAvKlxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXY6S2V5Ym9hcmRFdmVudCk9PntcclxuICAgICAgICBkZWJlU2FsdGFyID0gZXYua2V5ID09ICdFbnRlcicgfHwgZXYua2V5Q29kZSA9PSAxMztcclxuICAgIH0pXHJcbiAgICAqL1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgIGRlYmVTYWx0YXIgPSBmYWxzZTtcclxuICAgIH0pXHJcbn0pXHJcblxyXG4vLyAvKlxyXG5cclxudHlwZSBDb21tb25BdHRyaWJ1dGVzID0geyBjbGFzc05hbWU/OiBzdHJpbmcsIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcywgaWQ/OiBzdHJpbmcsIHRhYkluZGV4PzogbnVtYmVyIH0gLy8gQ1NTUHJvcGVydGllc1xyXG50eXBlIENvbG9yVmFsdWVzID0gJ3ByaW1hcnknIHwgJ3NlY29uZGFyeScgfCAnZGVmYXVsdCcgfCAnaW5oZXJpdCcgfCAnc3VjY2VzcydcclxuXHJcbmV4cG9ydCB0eXBlIExpYnJlRGVzcGxpZWd1ZVR5cGUgPSAocHJvcHM6IHtcclxuICAgIGtleTogc3RyaW5nXHJcbiAgICBjYXNpbGxlcm86IExpYnJlXHJcbiAgICBmb3JtdWxhcmlvOiBGb3JtdWxhcmlvXHJcbiAgICBmb3JQazogRm9yUGtcclxufSkgPT4gSlNYLkVsZW1lbnQ7XHJcblxyXG52YXIgTGlicmVEZXNwbGllZ3VlOiBMaWJyZURlc3BsaWVndWVUeXBlXHJcblxyXG5leHBvcnQgY29uc3QgQnV0dG9uID0gKHsgdmFyaWFudCwgb25DbGljaywgZGlzYWJsZWQsIGNoaWxkcmVuLCBjbGFzc05hbWUsIGNvbG9yLCBzaXplLFxyXG4gICAgZGlzYWJsZUVsZXZhdGlvbiwgZGlzYWJsZUZvY3VzUmlwcGxlLCBkaXNhYmxlUmlwcGxlLFxyXG4gICAgLi4ub3RoZXJcclxufToge1xyXG4gICAgdmFyaWFudD86IHN0cmluZyxcclxuICAgIGNvbG9yPzogQ29sb3JWYWx1ZXMsXHJcbiAgICBvbkNsaWNrPzogUmVhY3QuTW91c2VFdmVudEhhbmRsZXI8SFRNTEJ1dHRvbkVsZW1lbnQ+LCAvLyAgKGV2ZW50Ok1vdXNlRXZlbnQvKiA8SFRNTEJ1dHRvbkVsZW1lbnQsIE1vdXNlRXZlbnQ+Ki8pPT52b2lkLFxyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuXHJcbiAgICBjaGlsZHJlbjogYW55LFxyXG4gICAgY2xhc3NOYW1lPzogc3RyaW5nLFxyXG4gICAgc2l6ZT86ICdzbWFsbCcsXHJcbiAgICBkaXNhYmxlRWxldmF0aW9uPzogYW55LCBkaXNhYmxlRm9jdXNSaXBwbGU/OiBhbnksIGRpc2FibGVSaXBwbGU/OiBhbnksXHJcbn0gJiBDb21tb25BdHRyaWJ1dGVzKSA9PiA8YnV0dG9uXHJcbiAgICB7Li4ub3RoZXJ9XHJcbiAgICBjbGFzc05hbWU9e2BidG4gYnRuJHt2YXJpYW50ID09ICdjb250YWluZWQnID8gJycgOiAnLScgKyAodmFyaWFudCA9PSAnb3V0bGluZWQnID8gJ291dGxpbmUnIDogdmFyaWFudCl9LSR7KGNvbG9yID09ICdkZWZhdWx0JyB8fCBjb2xvciA9PSAnaW5oZXJpdCcgPyAnc2Vjb25kYXJ5JyA6IGNvbG9yID09ICdzZWNvbmRhcnknID8gJ2RhbmdlcicgOiBjb2xvcikgfHwgJ3NlY29uZGFyeSd9ICR7Y2xhc3NOYW1lIHx8ICcnfSAke3NpemUgPT0gJ3NtYWxsJyA/ICdidG4tc20nIDogJyd9YH1cclxuICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgIG9uQ2xpY2s9e29uQ2xpY2t9XHJcbj57Y2hpbGRyZW59PC9idXR0b24+O1xyXG5cclxuY29uc3Qgc3R5bGVUb0NzcyA9IChzdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgICBpZiAodHlwZW9mIHN0eWxlID09PSAnc3RyaW5nJyB8fCBzdHlsZSA9PSBudWxsKSByZXR1cm4gc3R5bGU7XHJcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoc3R5bGUpLm1hcCgoW2ssIHZdKSA9PlxyXG4gICAgICAgIGAke2sucmVwbGFjZSgvW0EtWl0vZywgbSA9PiBcIi1cIiArIG0udG9Mb3dlckNhc2UoKSl9OiR7dn1gXHJcbiAgICApLmpvaW4oJzsnKTtcclxufVxyXG5cclxuY29uc3QgQnV0dG9uMiA9ICh7IHZhcmlhbnQsIG9uQ2xpY2ssIGRpc2FibGVkLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCBjb2xvciwgc2l6ZSwgc3R5bGUsIC4uLm90aGVyIH06IHtcclxuICAgIHZhcmlhbnQ/OiBzdHJpbmcsXHJcbiAgICBjb2xvcj86IENvbG9yVmFsdWVzLFxyXG4gICAgb25DbGljaz86ICgpID0+IHZvaWQsXHJcbiAgICBkaXNhYmxlZD86IGJvb2xlYW5cclxuICAgIGNoaWxkcmVuOiBhbnksXHJcbiAgICBjbGFzc05hbWU/OiBzdHJpbmcsXHJcbiAgICBzaXplPzogJ3NtYWxsJyxcclxuICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHN0cmluZyxcclxuICAgICRhdHRycz86IHt9XHJcbn0gJiBDb21tb25BdHRyaWJ1dGVzKSA9PiBodG1sLmJ1dHRvbih7XHJcbiAgICAuLi5vdGhlcixcclxuICAgIHN0eWxlOiBzdHlsZVRvQ3NzKHN0eWxlKSxcclxuICAgIGNsYXNzOiBgYnRuIGJ0biR7dmFyaWFudCA9PSAnY29udGFpbmVkJyA/ICcnIDogJy0nICsgKHZhcmlhbnQgPT0gJ291dGxpbmVkJyA/ICdvdXRsaW5lJyA6IHZhcmlhbnQpfS0keyhjb2xvciA9PSAnZGVmYXVsdCcgfHwgY29sb3IgPT0gJ2luaGVyaXQnID8gJ3NlY29uZGFyeScgOiBjb2xvciA9PSAnc2Vjb25kYXJ5JyA/ICdkYW5nZXInIDogY29sb3IpIHx8ICdzZWNvbmRhcnknfSAke2NsYXNzTmFtZSB8fCAnJ30gJHtzaXplID09ICdzbWFsbCcgPyAnYnRuLXNtJyA6ICcnfWAsXHJcbiAgICBkaXNhYmxlZCxcclxuICAgICRvbjogeyBjbGljazogb25DbGljayB9XHJcbn0sIGNoaWxkcmVuKTtcclxuXHJcblxyXG5jb25zdCBUZXh0RmllbGQgPSAocHJvcHM6IHtcclxuICAgIGlkOiBzdHJpbmcsXHJcbiAgICBkaXNhYmxlZD86IGJvb2xlYW4sXHJcbiAgICBjbGFzc05hbWU/OiBzdHJpbmcsXHJcbiAgICBhdXRvRm9jdXM/OiBib29sZWFuLFxyXG4gICAgZnVsbFdpZHRoOiBib29sZWFuXHJcbiAgICBpbnB1dFByb3BzPzogYW55LFxyXG4gICAgdmFsdWU/OiBhbnksXHJcbiAgICB0eXBlOiBhbnksXHJcbiAgICBsYWJlbD86IHN0cmluZyxcclxuICAgIGVycm9yPzogYm9vbGVhbixcclxuICAgIGhlbHBlclRleHQ/OiBzdHJpbmcsXHJcbiAgICBtdWx0aWxpbmU/OiBib29sZWFuLFxyXG4gICAgb25DaGFuZ2U/OiAoZXZlbnQ6IGFueSkgPT4gdm9pZCxcclxuICAgIG9uRm9jdXM/OiAoZXZlbnQ6IGFueSkgPT4gdm9pZCxcclxuICAgIG9uQmx1cj86IChldmVudDogYW55LCB2YWxvcjogYW55KSA9PiB2b2lkLFxyXG4gICAgLy8gb25LZXlEb3duPzooZXZlbnQ6S2V5Ym9hcmRFdmVudCk9PnZvaWQgLy8gS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD5cclxuICAgIG9uS2V5RG93bj86IFJlYWN0LktleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+XHJcbn0pID0+IDxpbnB1dFxyXG4gICAgICAgIGlkPXtwcm9wcy5pZH1cclxuICAgICAgICBkaXNhYmxlZD17cHJvcHMuZGlzYWJsZWR9XHJcbiAgICAgICAgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9XHJcbiAgICAgICAgYXV0b0ZvY3VzPXtwcm9wcy5hdXRvRm9jdXN9XHJcbiAgICAgICAgdmFsdWU9e3Byb3BzLnZhbHVlfVxyXG4gICAgICAgIHR5cGU9e3Byb3BzLnR5cGV9XHJcbiAgICAgICAgb25DaGFuZ2U9e3Byb3BzLm9uQ2hhbmdlfVxyXG4gICAgICAgIG9uRm9jdXM9e3Byb3BzLm9uRm9jdXN9XHJcbiAgICAgICAgb25CbHVyPXsoZXZ0KSA9PiBwcm9wcy5vbkJsdXI/LihldnQsIGV2dC50YXJnZXQudmFsdWUpfVxyXG4gICAgICAgIG9uS2V5RG93bj17cHJvcHMub25LZXlEb3dufVxyXG4gICAgICAgIHBsYWNlaG9sZGVyPXtwcm9wcy5sYWJlbH1cclxuICAgIC8+O1xyXG5cclxuY29uc3QgVHlwb2dyYXBoeSA9ICh7IGNoaWxkcmVuLCAuLi5vdGhlcnMgfToge1xyXG4gICAgY2hpbGRyZW46IGFueSxcclxuICAgIGNvbXBvbmVudD86IHN0cmluZ1xyXG4gICAgdmFyaWFudD86ICdoNidcclxufSAmIENvbW1vbkF0dHJpYnV0ZXMpID0+IFJlYWN0LmNyZWF0ZUVsZW1lbnQob3RoZXJzLnZhcmlhbnQgfHwgb3RoZXJzLmNvbXBvbmVudCB8fCAnZGl2Jywgb3RoZXJzLCBjaGlsZHJlbik7XHJcblxyXG5mdW5jdGlvbiBHcmlkKHByb3BzOiB7XHJcbiAgICBjb250YWluZXI/OiBib29sZWFuLFxyXG4gICAgc3BhY2luZz86IG51bWJlcixcclxuICAgIGl0ZW0/OiBib29sZWFuLFxyXG4gICAgd3JhcD86ICd3cmFwJyB8ICdub3dyYXAnLFxyXG4gICAgZGlyZWN0aW9uPzogJ3JvdycgfCAnY29sdW1uJ1xyXG4gICAgYWxpZ25JdGVtcz86ICdzdHJldGNoJyB8ICdmbGV4LXN0YXJ0JyB8ICdmbGV4LWVuZCcgfCAnY2VudGVyJyB8ICdiYXNlbGluZScsXHJcbiAgICBjaGlsZHJlbjogYW55LFxyXG4gICAgeHM/OiBudW1iZXIsXHJcbiAgICBzbT86IG51bWJlcixcclxufSAmIENvbW1vbkF0dHJpYnV0ZXMpIHtcclxuICAgIHZhciB7IGNvbnRhaW5lciwgaXRlbSwgd3JhcCwgZGlyZWN0aW9uLCBhbGlnbkl0ZW1zLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCB4cywgc20sIHNwYWNpbmcsIC4uLm90aGVyIH0gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2XHJcbiAgICAgICAgey4uLm90aGVyfVxyXG4gICAgICAgIGNsYXNzTmFtZT17YCR7Y2xhc3NOYW1lIHx8ICcnfSAke3hzICE9IG51bGwgPyAnZ3JpZC14cy0nICsgeHMgOiAnJ30gJHtzbSAhPSBudWxsID8gJ2dyaWQtc20tJyArIHNtIDogJyd9YH1cclxuICAgICAgICBzdHlsZT17Y29udGFpbmVyID8ge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgIGZsZXhXcmFwOiB3cmFwLFxyXG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiBkaXJlY3Rpb24sXHJcbiAgICAgICAgICAgIGFsaWduSXRlbXM6IGFsaWduSXRlbXMsXHJcbiAgICAgICAgICAgIG1hcmdpbjogc3BhY2luZyAhPSBudWxsID8gc3BhY2luZyAqIDggKyAncHgnIDogdW5kZWZpbmVkXHJcbiAgICAgICAgfSA6IHtcclxuICAgICAgICB9fVxyXG4gICAgPntjaGlsZHJlbn08L2Rpdj5cclxufVxyXG5cclxudmFyIHAxMiA9ICdwMTInIGFzIElkVmFyaWFibGU7XHJcbnZhciBzcDIgPSAnc3AyJyBhcyBJZFZhcmlhYmxlO1xyXG52YXIgc3AzID0gJ3NwMycgYXMgSWRWYXJpYWJsZTtcclxudmFyIHNwNCA9ICdzcDQnIGFzIElkVmFyaWFibGU7XHJcbnZhciBzcDUgPSAnc3A1JyBhcyBJZFZhcmlhYmxlO1xyXG5cclxuLypcclxuLy8gY29uc3QgdGFrZUVsZW1lbnRPckRlZmF1bHQ8SywgVCBleHRlbmRzIFtLIGluXSwgRD4oKVxyXG5mdW5jdGlvbiBpc0luPFYsIFQ+KGs6a2V5b2YgVCwgb2JqZWN0OlQpOiBvYmplY3Rba10gaXMgVntcclxuICAgIHJldHVybiB0cnVlXHJcbn1cclxuKi9cclxuZnVuY3Rpb24gdGFrZUVsZW1lbnRPckRlZmF1bHQ8ViwgSyBleHRlbmRzIHN0cmluZywgS08gZXh0ZW5kcyBzdHJpbmc+KGs6IEssIG9iamVjdDogeyBbayBpbiBLT106IFYgfSwgZGVmYXVsdFZhbHVlOiBWKTogViB7XHJcbiAgICByZXR1cm4gayBpbiBvYmplY3QgP1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgcG9yIGFsZ3VuYSByYXrDs24gVFMgbm8gcXVpZXJlIGVudGVuZGVyIHF1ZSBzaSBrIGVzdMOhIGVuIG9iamVjdCwgb2JqZWN0W2tdIGV4aXN0ZVxyXG4gICAgICAgIG9iamVjdFtrXVxyXG4gICAgICAgIDogZGVmYXVsdFZhbHVlXHJcbn1cclxuXHJcbmZ1bmN0aW9uIERlc3BsaWVndWVFbmNhYmV6YWRvKHByb3BzOiB7IGNhc2lsbGVybzogQ2FzaWxsZXJvRW5jYWJlemFibGUsIGxlZXI/OiBib29sZWFuIH0pIHtcclxuICAgIGNvbnN0IGZvclBrTnVsbCA9IHt9IGFzIEZvclBrO1xyXG4gICAgcmV0dXJuIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e3Byb3BzLmNhc2lsbGVyb30gbGVlcj17cHJvcHMubGVlcn0gZm9yUGs9e2ZvclBrTnVsbH0gLz47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHN1YmlySGFzdGEoZWxlbWVudG86IEhUTUxFbGVtZW50IHwgbnVsbCwgZnVuOiAoZWxlbWVudG86IEhUTUxFbGVtZW50KSA9PiBib29sZWFuKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcclxuICAgIGlmIChlbGVtZW50byA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChmdW4oZWxlbWVudG8pKSByZXR1cm4gZWxlbWVudG87XHJcbiAgICByZXR1cm4gc3ViaXJIYXN0YShlbGVtZW50by5wYXJlbnRFbGVtZW50LCBmdW4pO1xyXG59XHJcblxyXG52YXIgZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG5cclxuZnVuY3Rpb24gQm90b25Cb3JyYXIoeyBpZCwgdmFyaWFibGUsIGZvclBrLCB2YWxvck9wY2lvbiB9OiB7IGlkOiBzdHJpbmcsIHZhcmlhYmxlOiBJZFZhcmlhYmxlLCBmb3JQazogRm9yUGssIHZhbG9yT3BjaW9uPzogYW55IH0pIHtcclxuICAgIHZhciBoYW5kbGVDbGlja0JvcnJhciA9ICgpID0+IHtcclxuICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyByZXNwdWVzdGE6IG51bGwsIHZhcmlhYmxlOiB2YXJpYWJsZSwgZm9yUGs6IGZvclBrIH0pXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYm90b24tYm9ycmFyXCI+XHJcbiAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICBpZD17aWR9XHJcbiAgICAgICAgICAgIG1pLXZhcmlhYmxlPXt2YXJpYWJsZX1cclxuICAgICAgICAgICAgdmFsb3Itb3BjaW9uPXt2YWxvck9wY2lvbn1cclxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm90b24tb3BjaW9uIGJvdG9uLW9wY2lvbi1ib3JyYXJcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja0JvcnJhcn1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxJQ09OLkRlbGV0ZUZvcmV2ZXIgLz5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBTYWx0b0Rlc3BsaWVndWUoeyBjYXNpbGxlcm8sIHByZWZpam8gfTogeyBjYXNpbGxlcm86IFByZWd1bnRhIHwgT3BjaW9uIHwgRmlsdHJvLCBwcmVmaWpvPzogc3RyaW5nIH0pIHtcclxuICAgIHJldHVybiBjYXNpbGxlcm8uc2FsdG8gP1xyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFzZVwiPlxyXG4gICAgICAgICAgICB7cHJlZmlqbyA/IDxzcGFuIGNsYXNzTmFtZT1cInByZWZpam9cIj57cHJlZmlqb30gPC9zcGFuPiA6IG51bGx9XHJcbiAgICAgICAgICAgIDxJQ09OLlRyZW5kaW5nRmxhdCAvPjxzcGFuPntjYXNpbGxlcm8uc2FsdG99PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDogbnVsbFxyXG59XHJcblxyXG5mdW5jdGlvbiBPcGNpb25EZXNwbGllZ3VlKHByb3BzOiB7IGNhc2lsbGVybzogT3BjaW9uLCB2YWxvck9wY2lvbjogbnVtYmVyLCB2YXJpYWJsZTogSWRWYXJpYWJsZSwgZm9yUGs6IEZvclBrLCBsZWVyOiBib29sZWFuLCBjb25Cb3RvbkJvcnJhcjogYm9vbGVhbiB9KSB7XHJcbiAgICBjb25zdCB7IGNhc2lsbGVybyB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgc2FsdG9BdXRvbWF0aWNvID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+IHN0YXRlLm9wY2lvbmVzLnNhbHRvQXV0b21hdGljbyk7XHJcbiAgICB2YXIgaGFuZGxlQ2xpY2s6IFJlYWN0Lk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxCdXR0b25FbGVtZW50PiA9IGFzeW5jIChldmVudCkgPT4ge1xyXG4gICAgICAgIHZhciBjb250YWluZXIgPSBzdWJpckhhc3RhKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCwgZWxlbWVudG8gPT4gZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdwcmVndW50YScpIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnbXVsdGlwbGUnKSkgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JykhO1xyXG4gICAgICAgIHZhciB0aWVuZSA9IGNvbnRhaW5lci5nZXRBdHRyaWJ1dGUoJ2VzdG95LWJvcnJhbmRvJyk7XHJcbiAgICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnZXN0b3ktYm9ycmFuZG8nLCAnTk8nKTtcclxuICAgICAgICBpZiAoZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhci5zZXRBdHRyaWJ1dGUoJ2VzdG95LWJvcnJhbmRvJywgJ05PJyk7XHJcbiAgICAgICAgICAgIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB7IHJlY2VudE1vZGlmaWVkLCBzaWd1aWVudGVWYXJpYWJsZSB9ID0gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgcmVzcHVlc3RhOiBwcm9wcy52YWxvck9wY2lvbiwgdmFyaWFibGU6IHByb3BzLnZhcmlhYmxlLCBmb3JQazogcHJvcHMuZm9yUGsgfSk7XHJcbiAgICAgICAgaWYgKCFyZWNlbnRNb2RpZmllZCkge1xyXG4gICAgICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycsIHRpZW5lID09ICdTSScgPyAnTk8nIDogJ1NJJyk7XHJcbiAgICAgICAgICAgIGlmICh0aWVuZSAhPSAnU0knKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIgPSBjb250YWluZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoc2lndWllbnRlVmFyaWFibGUgJiYgc2FsdG9BdXRvbWF0aWNvKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYm90b25TdHlsZSA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5zdHlsZTtcclxuICAgICAgICAgICAgICAgIGlmIChib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJ2dyZWVuJztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKERFTEFZX1NDUk9MTF8zKTtcclxuICAgICAgICAgICAgICAgIGlmIChib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJ2JsdWUnO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgc2xlZXAoREVMQVlfU0NST0xMXzMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJvdG9uU3R5bGUpIGJvdG9uU3R5bGUuY29sb3IgPSAnZ3JlZW4nO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgc2xlZXAoREVMQVlfU0NST0xMXzMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJvdG9uU3R5bGUpIGJvdG9uU3R5bGUuY29sb3IgPSAnJztcclxuICAgICAgICAgICAgICAgIChjYXNpbGxlcm8uZXNwZWNpYWw/Lm5vU2Nyb2xsID09IHRydWUpID8gbnVsbCA6IGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUoY2FzaWxsZXJvLmVzcGVjaWFsPy5zY3JvbGxUbyA/PyBzaWd1aWVudGVWYXJpYWJsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIDxHcmlkIGNsYXNzTmFtZT1cIm9wY2lvblwiPlxyXG4gICAgICAgIHtwcm9wcy5jb25Cb3RvbkJvcnJhciA/IDxCb3RvbkJvcnJhclxyXG4gICAgICAgICAgICBpZD17YG9wY2lvbi12YXItJHtwcm9wcy52YXJpYWJsZX0tJHtwcm9wcy52YWxvck9wY2lvbn0tYm9ycmFyYH1cclxuICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICB2YXJpYWJsZT17cHJvcHMudmFyaWFibGV9XHJcbiAgICAgICAgICAgIHZhbG9yT3BjaW9uPXtwcm9wcy52YWxvck9wY2lvbn1cclxuICAgICAgICAvPiA6IG51bGx9XHJcbiAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICBpZD17YG9wY2lvbi12YXItJHtwcm9wcy52YXJpYWJsZX0tJHtwcm9wcy52YWxvck9wY2lvbn1gfVxyXG4gICAgICAgICAgICBtaS12YXJpYWJsZT17cHJvcHMudmFyaWFibGV9XHJcbiAgICAgICAgICAgIHZhbG9yLW9wY2lvbj17cHJvcHMudmFsb3JPcGNpb259XHJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvdG9uLW9wY2lvbiBib3Rvbi1vcGNpb24tc2VsZWNjaW9uXCJcclxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XHJcbiAgICAgICAgICAgIHRhYkluZGV4PXstMX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxHcmlkIGNvbnRhaW5lciB3cmFwPVwibm93cmFwXCI+XHJcbiAgICAgICAgICAgICAgICA8R3JpZCBjbGFzc05hbWU9XCJpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8udmVyX2lkIHx8IGNhc2lsbGVyby5jYXNpbGxlcm99XHJcbiAgICAgICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgICAgICAgICA8R3JpZCBjbGFzc05hbWU9XCJvcGNpb24tdGV4dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBkZWJlLWxlZXI9e2Nhc2lsbGVyby5sZWVyID8gJ1NJJyA6IGNhc2lsbGVyby5sZWVyID09PSBmYWxzZSA/ICdOTycgOiBwcm9wcy5sZWVyID8gJ1NJJyA6ICdOTyd9PnticmVha2VhYmxlVGV4dChjYXNpbGxlcm8ubm9tYnJlKX08L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAge2Nhc2lsbGVyby5hY2xhcmFjaW9uID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgY2xhc3NOYW1lPSdhY2xhcmFjaW9uJz57YnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLmFjbGFyYWNpb24pfTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsfVxyXG4gICAgICAgICAgICAgICAgPC9HcmlkPlxyXG4gICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgPFNhbHRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gLz5cclxuICAgIDwvR3JpZD5cclxufVxyXG5pbnRlcmZhY2UgSWNhc2lsbGVyb0Nvbk9wY2lvbmVzIHtcclxuICAgIHZhcl9uYW1lOiBJZFZhcmlhYmxlLFxyXG4gICAgZGVzcGxpZWd1ZUNvbnRlbmlkbzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB8IG51bGwsXHJcbiAgICBjYXNpbGxlcm9zOiBPcGNpb25bXVxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gU2lOb0Rlc3BsaWVndWUocHJvcHM6IHsgY2FzaWxsZXJvQ29uT3BjaW9uZXM6IEljYXNpbGxlcm9Db25PcGNpb25lcywgZm9yUGs6IEZvclBrLCBkZXNwbGllZ3VlQ29udGVuaWRvOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIH0pIHtcclxuICAgIHJldHVybiA8T3BjaW9uZXNEZXNwbGllZ3VlXHJcbiAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e3Byb3BzLmNhc2lsbGVyb0Nvbk9wY2lvbmVzfVxyXG4gICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICBsZWVyPXtmYWxzZX1cclxuICAgICAgICBkZXNwbGllZ3VlQ29udGVuaWRvPXtwcm9wcy5kZXNwbGllZ3VlQ29udGVuaWRvfVxyXG4gICAgLz5cclxufVxyXG5cclxuZnVuY3Rpb24gcmVnaXN0cmFkb3JEZVZhcmlhYmxlKHByZWd1bnRhOiBQcmVndW50YSB8IE9wY2lvbk11bHRpcGxlIHwgQ29uanVudG9QcmVndW50YXMpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcywgZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgZWxlbWVudG86IEhUTUxEaXZFbGVtZW50XHJcbiAgICApID0+IHtcclxuICAgICAgICB2YXIgdmFsb3JBY3R1YWwgPSBwcmVndW50YS52YXJfbmFtZSA9PSBudWxsID8gbnVsbCA6IHJlc3B1ZXN0YXNbcHJlZ3VudGEudmFyX25hbWVdO1xyXG4gICAgICAgIHZhciBmZWVkYmFja1JvdyA9IGZlZWRiYWNrRm9ybS5mZWVkYmFjaztcclxuICAgICAgICB2YXIgZmVlZGJhY2tWYXIgPSBwcmVndW50YS52YXJfbmFtZSA9PSBudWxsID8gbnVsbCA6IGZlZWRiYWNrUm93W3ByZWd1bnRhLnZhcl9uYW1lXTtcclxuICAgICAgICB2YXIgdGllbmVWYWxvciA9IHZhbG9yQWN0dWFsICE9IG51bGwgJiYgZmVlZGJhY2tWYXIgIT0gbnVsbCA/IChmZWVkYmFja1Zhci5jb25Qcm9ibGVtYSA/ICdpbnZhbGlkbycgOiAndmFsaWRvJykgOiAnTk8nO1xyXG4gICAgICAgIHZhciBlc3RhZG86IEVzdGFkb1ZhcmlhYmxlO1xyXG4gICAgICAgIGlmIChwcmVndW50YS50aXBvdmFyKSB7XHJcbiAgICAgICAgICAgIGVzdGFkbyA9IGZlZWRiYWNrVmFyPy5lc3RhZG8hO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBmZWVkYmFja011bHRpID0gcHJlZ3VudGEuY2FzaWxsZXJvcy5maWx0ZXIoYyA9PiBjLnZhcl9uYW1lICE9IG51bGwpLnJlZHVjZSgocHYsIG9tKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmIgPSBmZWVkYmFja1Jvdz8uW29tLnZhcl9uYW1lIV0hXHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpZW5lQWN0dWFsOiBwdi50aWVuZUFjdHVhbCB8fCBmYi5lc3RhZG8gPT0gJ2FjdHVhbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZXN0YVNhbHRlYWRhOiBwdi5lc3RhU2FsdGVhZGEgJiYgKGZiLmVzdGFkbyA9PSAnc2FsdGVhZGEnIHx8IGZiLmVzdGFkbyA9PSAnZnVlcmFfZGVfZmx1am9fcG9yX3NhbHRvJylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgeyB0aWVuZUFjdHVhbDogZmFsc2UsIGVzdGFTYWx0ZWFkYTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgZXN0YWRvID0gZmVlZGJhY2tNdWx0aS50aWVuZUFjdHVhbCA/ICdhY3R1YWwnIDogZmVlZGJhY2tNdWx0aS5lc3RhU2FsdGVhZGEgPyAnc2FsdGVhZGEnIDogJ3RvZGF2aWFfbm8nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldEF0dHJEaXN0aW50byhlbGVtZW50bywgJ251ZXN0cm8tdmFsaWRhdG9yJywgZXN0YWRvKTtcclxuICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG8sICd0aWVuZS12YWxvcicsIHRpZW5lVmFsb3IpO1xyXG4gICAgICAgIHNldEF0dHJEaXN0aW50byhlbGVtZW50bywgJ2VzdGEtaW5oYWJpbGl0YWRhJywgZmVlZGJhY2tWYXI/LmluaGFiaWxpdGFkYSA/ICdTSScgOiAnTk8nKTtcclxuICAgICAgICBpZiAocHJlZ3VudGEudmFyX25hbWUpIHtcclxuICAgICAgICAgICAgdmFyIG9wY2lvbmVzOiBIVE1MQnV0dG9uRWxlbWVudFtdID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWxlbWVudG8ucXVlcnlTZWxlY3RvckFsbChgLmJvdG9uLW9wY2lvblttaS12YXJpYWJsZT1cIiR7cHJlZ3VudGEudmFyX25hbWV9XCJdYCksIDApO1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9PcGNpb246IEhUTUxCdXR0b25FbGVtZW50O1xyXG4gICAgICAgICAgICBmb3IgKGVsZW1lbnRvT3BjaW9uIG9mIG9wY2lvbmVzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsb3JPcGNpb24gPSBlbGVtZW50b09wY2lvbi5nZXRBdHRyaWJ1dGUoJ3ZhbG9yLW9wY2lvbicpO1xyXG4gICAgICAgICAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGVsZW1lbnRvT3BjaW9uLCAnb3BjaW9uLXNlbGVjY2lvbmFkYScsIHZhbG9yT3BjaW9uID09IHZhbG9yQWN0dWFsID8gXCJTSVwiIDogXCJOT1wiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50b3NJbnB1dDogSFRNTElucHV0RWxlbWVudFtdID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWxlbWVudG8ucXVlcnlTZWxlY3RvckFsbCgnLnZhcmlhYmxlJykpO1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9JbnB1dDogSFRNTElucHV0RWxlbWVudDtcclxuICAgICAgICAgICAgZm9yIChlbGVtZW50b0lucHV0IG9mIGVsZW1lbnRvc0lucHV0KSB7XHJcbiAgICAgICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGVsZW1lbnRvSW5wdXQsICd2YWx1ZScsIHZhbG9yQWN0dWFsID09IG51bGwgPyAnJyA6IHZhbG9yQWN0dWFsLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBib3Rvbk5zTmMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5zbmMtcHJlZ3VudGEtXCIgKyBwcmVndW50YS52YXJfbmFtZSkhO1xyXG4gICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oYm90b25Oc05jLCAnb3BjaW9uLXNlbGVjY2lvbmFkYScsIHZhbG9yQWN0dWFsID09IChwcmVndW50YS52YWxvcl9uc19uYyA/PyAtOSkgPyBcIlNJXCIgOiBcIk5PXCIpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBPcGNpb25NdWx0aXBsZURlc3BsaWVndWUocHJvcHM6IHsgb3BjaW9uTTogT3BjaW9uTXVsdGlwbGUsIGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICBjb25zdCB7IG9wY2lvbk0gfSA9IHByb3BzO1xyXG4gICAgdmFyIGlkID0gYG9wY2lvbk0tJHtvcGNpb25NLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgdmFyIHN0eWxlczogUmVhY3QuQ1NTUHJvcGVydGllcyA9IG9wY2lvbk0uZXNwZWNpYWw/LmZsZXhEaXJlY3Rpb24gPyB7IGZsZXhEaXJlY3Rpb246IG9wY2lvbk0uZXNwZWNpYWwuZmxleERpcmVjdGlvbiB9IDogeyBmbGV4V3JhcDogJ3dyYXAnIH07XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsXHJcbiAgICAgICAgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgIGZ1bjogcmVnaXN0cmFkb3JEZVZhcmlhYmxlKG9wY2lvbk0pXHJcbiAgICB9KVxyXG4gICAgY29uc3QgdXBkYXRlV2luZG93V2lkdGggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgc2V0V2luZG93V2lkdGgod2luZG93LmlubmVyV2lkdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IFt3aW5kb3dXaWR0aCwgc2V0V2luZG93V2lkdGhdID0gdXNlU3RhdGUod2luZG93LmlubmVyV2lkdGgpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZVdpbmRvd1dpZHRoKTtcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvXHJcbiAgICAgICAgaWQ9e2lkfVxyXG4gICAgICAgIGNhc2lsbGVybz17b3BjaW9uTX1cclxuICAgICAgICBkZXNwbGllZ3VlRW5jYWJlemFkbz0nbGF0ZXJhbCdcclxuICAgICAgICBzdHlsZT17c3R5bGVzfVxyXG4gICAgPlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICBjYXNpbGxlcm89e29wY2lvbk19XHJcbiAgICAgICAgICAgIHZlcklkR3Vpb249e3RydWV9XHJcbiAgICAgICAgICAgIGxlZXI9e29wY2lvbk0ubGVlciAhPT0gZmFsc2V9XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgc3R5bGU9e3sgbWF4V2lkdGg6IHdpbmRvd1dpZHRoIC0gNDAwIH19IC8vVE9ETyBNRUpPUkFSXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8U2lOb0Rlc3BsaWVndWVcclxuICAgICAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e29wY2lvbk19XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgZGVzcGxpZWd1ZUNvbnRlbmlkbz17cHJvcHMub3BjaW9uTS5kZXNwbGllZ3VlQ29udGVuaWRvID8/ICdob3Jpem9udGFsJ31cclxuICAgICAgICAvPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbnR5cGUgQ2FzaWxsZXJvRW5jYWJlemFibGUgPSBGb3JtdWxhcmlvIHwgQmxvcXVlIHwgRmlsdHJvIHwgQ29uanVudG9QcmVndW50YXMgfCBQcmVndW50YSB8IE9wY2lvbk11bHRpcGxlIHwgUHJlZ3VudGFTaW1wbGUgfCBDb25zaXN0ZW5jaWEgfCBUZXh0byB8IFBNYXRyaXpcclxuXHJcbmNvbnN0IGdldExvc01ldGFkYXRvcyA9IChjYXNpbGxlcm86IENhc2lsbGVyb0VuY2FiZXphYmxlKTogUmVhY3QuSlNYLkVsZW1lbnQgPT5cclxuICAgIDxkaXYgbG9zLW1ldGFkYXRvcz1cInNpXCI+XHJcbiAgICAgICAgPHNwYW4gZWwtbWV0YWRhdG89XCJ2YXJpYWJsZVwiPntjYXNpbGxlcm8udmFyX25hbWV9PC9zcGFuPlxyXG4gICAgICAgIHtjYXNpbGxlcm8udGlwb3ZhciAmJiBjYXNpbGxlcm8udGlwb3ZhciAhPSAnb3BjaW9uZXMnICYmIGNhc2lsbGVyby50aXBvdmFyICE9ICdzaV9ubycgP1xyXG4gICAgICAgICAgICA8c3BhbiBlbC1tZXRhZGF0bz1cInRpcG92YXJcIj57Y2FzaWxsZXJvLnRpcG92YXJ9PC9zcGFuPlxyXG4gICAgICAgICAgICA6IG51bGx9XHJcbiAgICAgICAge2Nhc2lsbGVyby52YXJfbmFtZSAmJiBjYXNpbGxlcm8ub3B0YXRpdm8gPyA8c3BhbiBlbC1tZXRhZGF0bz1cIm9wdGF0aXZhXCI+b3B0YXRpdmE8L3NwYW4+IDogbnVsbH1cclxuICAgICAgICB7Y2FzaWxsZXJvLmNhbGN1bGFkYSA/IDxzcGFuIGVsLW1ldGFkYXRvPVwiY2FsY3VsYWRhXCI+Y2FsY3VsYWRhPC9zcGFuPiA6IG51bGx9XHJcbiAgICAgICAge2Nhc2lsbGVyby5kZXNwbGllZ3VlT2N1bHRhID8gPHNwYW4gZWwtbWV0YWRhdG89XCJvY3VsdGFcIj5vY3VsdGE8L3NwYW4+IDogbnVsbH1cclxuICAgICAgICB7Y2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgPyA8c3BhbiBlbC1tZXRhZGF0bz1cImV4cHJlc2lvbl9oYWJpbGl0YXJcIj5oYWJpbGl0YToge2Nhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyfTwvc3Bhbj4gOiBudWxsfVxyXG4gICAgICAgIHtjYXNpbGxlcm8uZXNwZWNpYWw/LmF1dG9pbmcgPyA8c3BhbiBlbC1tZXRhZGF0bz1cImV4cHJlc2lvbl9hdXRvaW5nXCI+YXV0b2luZzoge2Nhc2lsbGVyby5lc3BlY2lhbD8uYXV0b2luZ308L3NwYW4+IDogbnVsbH1cclxuICAgIDwvZGl2PlxyXG5cclxuZnVuY3Rpb24gRW5jYWJlemFkb0Rlc3BsaWVndWUocHJvcHM6IHtcclxuICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyxcclxuICAgIGNhc2lsbGVybzogQ2FzaWxsZXJvRW5jYWJlemFibGUsXHJcbiAgICB2ZXJJZEd1aW9uPzogYm9vbGVhbixcclxuICAgIGxlZXI/OiBib29sZWFuLFxyXG4gICAgZm9yUGs6IEZvclBrXHJcbn0pIHtcclxuICAgIHZhciB7IGNhc2lsbGVybywgZm9yUGsgfSA9IHByb3BzO1xyXG4gICAgdmFyIGNvbkNhbXBvT3BjaW9uZXMgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gc3RhdGUub3BjaW9uZXMuY29uQ2FtcG9PcGNpb25lcylcclxuICAgIHZhciBoYW5kbGVDbGlja0JvcnJhciA9ICgpID0+IHtcclxuICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyByZXNwdWVzdGE6IG51bGwsIHZhcmlhYmxlOiBjYXNpbGxlcm8udmFyX25hbWUgYXMgSWRWYXJpYWJsZSwgZm9yUGs6IGZvclBrIH0pXHJcbiAgICB9O1xyXG4gICAgdmFyIHZlcl9pZCA9IGNhc2lsbGVyby52ZXJfaWQgPz8gY2FzaWxsZXJvLmNhc2lsbGVybztcclxuICAgIHZhciBjYWxjdWxhZGEgPSBjYXNpbGxlcm8uY2FsY3VsYWRhO1xyXG4gICAgdmFyIGlkID0gYGlkLWRpdi0ke2Nhc2lsbGVyby52YXJfbmFtZSB8fCBjYXNpbGxlcm8uY2FzaWxsZXJvfWA7XHJcbiAgICB2YXIgaWRBY2Npb25lcyA9IFwiYWNjaW9uZXMtXCIgKyBpZDtcclxuICAgIHJldHVybiA8ZGl2XHJcbiAgICAgICAgY2xhc3NOYW1lPVwiZW5jYWJlemFkb1wiXHJcbiAgICAgICAgZGViZS1sZWVyPXtwcm9wcy5sZWVyID8gJ1NJJyA6ICdOTyd9XHJcbiAgICAgICAgc3R5bGU9e3Byb3BzLnN0eWxlfVxyXG4gICAgPlxyXG4gICAgICAgIDxkaXYgaWQ9e2lkfSBjbGFzc05hbWU9XCJpZC1kaXZcIiB0aXRsZT17YCR7Y2FzaWxsZXJvLmNhc2lsbGVyb30gLSAke2Nhc2lsbGVyby52YXJfbmFtZX1gfVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRBY2Npb25lcyk7XHJcbiAgICAgICAgICAgICAgICBkaXYhLnNldEF0dHJpYnV0ZShcImFjY2lvbi12aXNpYmxlXCIsICgxIC0gTnVtYmVyKGRpdiEuZ2V0QXR0cmlidXRlKFwiYWNjaW9uLXZpc2libGVcIikpKS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8uIFZlciBxdcOpIGhhY2Vtb3MgY3VhbmRvIHNlIHRvY2EgZWwgSUQgZGUgbGEgcHJlZ3V0bmFcclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9pZF9wcmVndW50YSwgeyBwcmVndW50YTogY2FzaWxsZXJvLmNhc2lsbGVybyBhcyBJZFByZWd1bnRhLCBmb3JQayB9KTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaWRcIj5cclxuICAgICAgICAgICAgICAgIHt2ZXJfaWR9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB7KGNhc2lsbGVyby50aXBvdmFyID09IFwic2lfbm9cIiB8fCBjYXNpbGxlcm8udGlwb3ZhciA9PSBcIm9wY2lvbmVzXCIpID8gPENhbXBvIGRpc2FibGVkPXtmYWxzZX0gcHJlZ3VudGE9e2Nhc2lsbGVybyBhcyB1bmtub3duIGFzIFByZWd1bnRhU2ltcGxlfSBmb3JQaz17Zm9yUGt9IG1pbmk9e3RydWV9IGhpZGRlbj17IWNvbkNhbXBvT3BjaW9uZXMgJiYgJ3F1aXRhcid9IC8+IDogbnVsbH1cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhY2Npb25lcy1wcmVndW50YVwiIGlkPXtpZEFjY2lvbmVzfSBhY2Npb24tdmlzaWJsZT1cIjBcIj5cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8udmFyX25hbWUgPyA8ZGl2PjxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICBpZD17XCJib3JyYXItcHJlZ3VudGEtXCIgKyBjYXNpbGxlcm8udmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgbWktdmFyaWFibGU9e2Nhc2lsbGVyby52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvdG9uLXByZWd1bnRhLWJvcnJhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2tCb3JyYXJ9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uRGVsZXRlRm9yZXZlciAvPlxyXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+PC9kaXY+IDogbnVsbH1cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8udmFyX25hbWUgPyAobnNfbmMgPT4gPGRpdj48QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9e1wibnNuYy1wcmVndW50YS1cIiArIGNhc2lsbGVyby52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICBtaS12YXJpYWJsZT17Y2FzaWxsZXJvLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm90b24tcHJlZ3VudGEtbnNuY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyByZXNwdWVzdGE6IG5zX25jLCB2YXJpYWJsZTogY2FzaWxsZXJvLnZhcl9uYW1lIGFzIElkVmFyaWFibGUsIGZvclBrOiBmb3JQayB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgTlMvTkNcclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPjwvZGl2PikoY2FzaWxsZXJvLnZhbG9yX25zX25jID8/IC05KSA6IG51bGx9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibm9tYnJlLWRpdlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm5vbWJyZVwiPnticmVha2VhYmxlVGV4dChjYXNpbGxlcm8ubm9tYnJlKX1cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8uZXNwZWNpYWw/LmdwcyA/XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdmFyaWFudD1cIm91dGxpbmVkXCIgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzEwcHgnIH19IG9uQ2xpY2s9eyhfZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhck5hbWUgPSBjYXNpbGxlcm8udmFyX25hbWUhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWdyZWdhckluZm9HUFMgPSAoaW5mbzogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyByZXNwdWVzdGFzOiByQWN0dWFsZXMgfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQayk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsb3JBY3R1YWwgPSByQWN0dWFsZXNbdmFyTmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGF1eCA9IEpTT04ucGFyc2UodmFsb3JBY3R1YWw/LnRvU3RyaW5nKCkgfHwgXCJbXVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXgudW5zaGlmdChpbmZvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IHByb3BzLmZvclBrLCB2YXJpYWJsZTogdmFyTmFtZSwgcmVzcHVlc3RhOiBKU09OLnN0cmluZ2lmeShhdXgpIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHsgc2lndWllbnRlVmFyaWFibGUgfSA9IGFncmVnYXJJbmZvR1BTKGAke2RhdGV0aW1lLm5vdygpLnRvWW1kSG1zKCl9IC0gZXNwZXJhbmRvIHB1bnRvIGdwc2ApIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ3VpZW50ZVZhcmlhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShzaWd1aWVudGVWYXJpYWJsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxhdGl0dWRlLCBsb25naXR1ZGUsIGFsdGl0dWRlLCBhY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgaGVhZGluZywgc3BlZWQgfSA9IHBvc2l0aW9uLmNvb3JkcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhVG9TYXZlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHM6IHsgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWx0aXR1ZGUsIGFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBoZWFkaW5nLCBzcGVlZCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IHBvc2l0aW9uLnRpbWVzdGFtcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdyZWdhckluZm9HUFMoSlNPTi5zdHJpbmdpZnkoZGF0YVRvU2F2ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdyZWdhckluZm9HUFMoZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsgZW5hYmxlSGlnaEFjY3VyYWN5OiB0cnVlLCB0aW1lb3V0OiAxMDAwMCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9PjxJQ09OLkxvY2F0aW9uIC8+PC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIHtjYXNpbGxlcm8uYWNsYXJhY2lvbiA/XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFjbGFyYWNpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLnNhbHRvICYmIGNhc2lsbGVyby50aXBvYyA9PSAnRklMVFJPJyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTYWx0b0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IHByZWZpam89e2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKSF9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLmFjbGFyYWNpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA6IG51bGx9XHJcbiAgICAgICAgICAgIHtnZXRMb3NNZXRhZGF0b3MoY2FzaWxsZXJvKX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBEZXNwbGVnYXJDb25maXJtYXJCb3JyYXJSZXNwdWVzdGEocHJvcHM6IHsgZm9yUGs6IEZvclBrLCB2YXJpYWJsZUJvcnJhcjogSWRWYXJpYWJsZSB9KSB7XHJcbiAgICB2YXIgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoISFwcm9wcy52YXJpYWJsZUJvcnJhcilcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IGhhbmRsZUNsb3NlID0gKCkgPT4ge1xyXG4gICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNPTkZJUk1BUl9CT1JSQVJfUkVTUFVFU1RBKHsgZm9yUGs6IHByb3BzLmZvclBrLCB2YXJpYWJsZTogbnVsbCB9KSk7XHJcbiAgICAgICAgc2V0T3BlbihmYWxzZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPFBvcG92ZXJcclxuICAgICAgICBpZD17XCJwb3BvdmVyLWNvbmZpcm1hclwifVxyXG4gICAgICAgIG9wZW49e29wZW59XHJcbiAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2V9XHJcbiAgICAgICAgYW5jaG9yT3JpZ2luPXt7XHJcbiAgICAgICAgICAgIHZlcnRpY2FsOiAnYm90dG9tJyxcclxuICAgICAgICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcicsXHJcbiAgICAgICAgfX1cclxuICAgICAgICB0cmFuc2Zvcm1PcmlnaW49e3tcclxuICAgICAgICAgICAgdmVydGljYWw6ICd0b3AnLFxyXG4gICAgICAgICAgICBob3Jpem9udGFsOiAnbGVmdCcsXHJcbiAgICAgICAgfX1cclxuICAgID5cclxuICAgICAgICA8VHlwb2dyYXBoeT5MYSBwcmVndW50YSB0aWVuZSByZWdpc3RyYWRhIHVuYSByZXNwdWVzdGEgcXVlIG5vIGZ1ZSBkZXRlY3RhZGEgY29tbyBlcnLDs25lYTwvVHlwb2dyYXBoeT5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbmZpcm1hLWJvdG9uZXNcIj5cclxuICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInNlY29uZGFyeVwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9wcy52YXJpYWJsZUJvcnJhcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBwcm9wcy5mb3JQaywgdmFyaWFibGU6IHByb3BzLnZhcmlhYmxlQm9ycmFyLCByZXNwdWVzdGE6IG51bGwgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGhhbmRsZUNsb3NlKCk7XHJcbiAgICAgICAgICAgIH19PmJvcnJhciByZXNwdWVzdGE8L0J1dHRvbj5cclxuICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB2YXJpYW50PVwib3V0bGluZWRcIiBvbkNsaWNrPXtoYW5kbGVDbG9zZX0+dm9sdmVyIHNpbiBib3JyYXI8L0J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvUG9wb3Zlcj47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGFyTnVlc3RyYUxvbmdpdHVkKGxvbmdpdHVkOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICByZXR1cm4gbG9uZ2l0dWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUoc2lndWllbnRlVmFyaWFibGU6IElkVmFyaWFibGUgfCBJZEZpbikge1xyXG4gICAgZGViZVNhbHRhciA9IGZhbHNlO1xyXG4gICAgdmFyIHsgdG9wLCBlbmZvY2FkbywgZWxlbWVudG9JbnB1dFZhcmlhYmxlIH0gPSBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8oc2lndWllbnRlVmFyaWFibGUpO1xyXG4gICAgaWYgKHRvcCAhPSBudWxsICYmIHRvcCA+IDAgJiYgKCFlbmZvY2FkbyB8fCBcInNhbHRhIHNpZW1wcmVcIikpIHtcclxuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3AsIGxlZnQ6IDAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcclxuICAgIH1cclxuICAgIGVsZW1lbnRvSW5wdXRWYXJpYWJsZT8uZm9jdXMoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gQ2FtcG8ocHJvcHM6IHsgZGlzYWJsZWQ6IGJvb2xlYW4sIHByZWd1bnRhOiBQcmVndW50YVNpbXBsZSB8IFByZWd1bnRhQ29uT3BjaW9uZXMgfCBQcmVndW50YUNvblNpTm8gfCBPcGNpb25NdWx0aXBsZSwgZm9yUGs6IEZvclBrLCBtaW5pPzogYm9vbGVhbiwgaGlkZGVuPzogYm9vbGVhbiB8ICdxdWl0YXInIH0pIHtcclxuICAgIHZhciB7IHByZWd1bnRhLCBkaXNhYmxlZCwgbWluaSB9ID0gcHJvcHM7XHJcbiAgICB2YXIgeyBzYWx0b0F1dG9tYXRpY28sIGNvbkNhbXBvT3BjaW9uZXMgfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiBzdGF0ZS5vcGNpb25lcyk7XHJcbiAgICBjb25zdCBsb25naXR1ZCA9IG1pbmkgPyBwcmVndW50YS5jYXNpbGxlcm9zLnJlZHVjZSgoYWN1bSwgbykgPT4gTWF0aC5tYXgoby5jYXNpbGxlcm8udG9TdHJpbmcoKS5sZW5ndGgsIGFjdW0pLCAwKSA6XHJcbiAgICAgICAgcHJlZ3VudGEubG9uZ2l0dWQ7XHJcbiAgICAvLyB2YXIgW3ZhbG9yLCBzZXRWYWxvcl0gPSB1c2VTdGF0ZShwcm9wcy52YWxvcik7XHJcbiAgICB2YXIgW2VkaXRhbmRvLCBzZXRFZGl0YW5kb10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICAvLyB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgLy8gICAgIHNldFZhbG9yKHByb3BzLnZhbG9yKVxyXG4gICAgLy8gfSwgW3Byb3BzLnZhbG9yXSk7XHJcbiAgICBjb25zdCBpbnB1dFByb3BzID0ge1xyXG4gICAgICAgIG1heExlbmd0aDogbG9uZ2l0dWQsXHJcbiAgICB9O1xyXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAobnVldm9WYWxvcjogVmFsb3IgfCB0eXBlb2YgTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTykgPT4ge1xyXG4gICAgICAgIHZhciB7IHNpZ3VpZW50ZVZhcmlhYmxlIH0gPSBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiBwcmVndW50YS52YXJfbmFtZSBhcyBJZFZhcmlhYmxlLCByZXNwdWVzdGE6IG51ZXZvVmFsb3IgfSk7XHJcbiAgICAgICAgaWYgKHNpZ3VpZW50ZVZhcmlhYmxlICYmIGRlYmVTYWx0YXIpIHtcclxuICAgICAgICAgICAgKHByZWd1bnRhLmVzcGVjaWFsPy5ub1Njcm9sbCA9PSB0cnVlKSA/IG51bGwgOiBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKHByZWd1bnRhLmVzcGVjaWFsPy5zY3JvbGxUbyA/PyBzaWd1aWVudGVWYXJpYWJsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHZhciBudWVzdHJhTG9uZ2l0dWQgPSBjYWxjdWxhck51ZXN0cmFMb25naXR1ZChwcmVndW50YS5sb25naXR1ZCB8fCBsb25naXR1ZClcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNhbXBvXCIgbnVlc3RyYS1sb25naXR1ZD17bnVlc3RyYUxvbmdpdHVkfSBzdHlsZT17cHJvcHMuaGlkZGVuID09ICdxdWl0YXInID8geyBkaXNwbGF5OiAnbm9uZScgfSA6IHByb3BzLmhpZGRlbiA/IHsgdmlzaWJpbGl0eTogJ2hpZGRlbicgfSA6IHVuZGVmaW5lZH0+XHJcbiAgICAgICAge21pbmkgPyBudWxsIDogPEJvdG9uQm9ycmFyXHJcbiAgICAgICAgICAgIGlkPXtgYm9ycmFyLWFiaWVydGEtJHtwcmVndW50YS52YXJfbmFtZX1gfVxyXG4gICAgICAgICAgICB2YXJpYWJsZT17cHJlZ3VudGEudmFyX25hbWV9XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAvPn1cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImlucHV0LWNhbXBvXCI+XHJcbiAgICAgICAgICAgIDxUZXh0RmllbGRcclxuICAgICAgICAgICAgICAgIGlkPXtgdmFyLSR7cHJlZ3VudGEudmFyX25hbWUgfHwgJyd9YH1cclxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZCB8fCBwcmVndW50YS5lc3BlY2lhbD8uZ3BzfVxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidmFyaWFibGVcIlxyXG4gICAgICAgICAgICAgICAgLy92YXItbGVuZ3RoPXtwcmVndW50YS5sb25naXR1ZH0gXHJcbiAgICAgICAgICAgICAgICBmdWxsV2lkdGg9e3RydWV9XHJcbiAgICAgICAgICAgICAgICBpbnB1dFByb3BzPXtpbnB1dFByb3BzfVxyXG4gICAgICAgICAgICAgICAgdHlwZT17cHJlZ3VudGEuZGVzcGxpZWd1ZVRpcG9JbnB1dCA/PyBhZGFwdGFyVGlwb1ZhckNhc2lsbGVybyhwcmVndW50YS50aXBvdmFyKX1cclxuICAgICAgICAgICAgICAgIG9uS2V5RG93bj17KGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVzRW50ZXIgPSAoZXZlbnQua2V5ID09ICdFbnRlcicgfHwgZXZlbnQua2V5Q29kZSA9PSAxMylcclxuICAgICAgICAgICAgICAgICAgICBkZWJlU2FsdGFyID0gZXNFbnRlciAmJiAoc2FsdG9BdXRvbWF0aWNvIHx8IGNvbkNhbXBvT3BjaW9uZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlc0VudGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0LmJsdXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICBvbkZvY3VzPXsoX2V2ZW50KSA9PiBzZXRFZGl0YW5kbyh0cnVlKX1cclxuICAgICAgICAgICAgICAgIG9uQmx1cj17KGV2ZW50LCB2YWxvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudD8ucmVsYXRlZFRhcmdldD8uZ2V0QXR0cmlidXRlKCdib3Rvbi1jb25maXJtYXInKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWJlU2FsdGFyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2UodmFsb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEVkaXRhbmRvKGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB7ZGlzYWJsZWQgfHwgcHJlZ3VudGEuZXNwZWNpYWw/LmdwcyB8fCBtaW5pID8gbnVsbCA6XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm90b24tY29uZmlybWFyLWNhbXBvXCI+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9e2VkaXRhbmRvID8gXCJjb250YWluZWRcIiA6ICdvdXRsaW5lZCd9IHNpemU9XCJzbWFsbFwiIGNvbG9yPXtlZGl0YW5kbyA/ICdwcmltYXJ5JyA6ICdkZWZhdWx0J31cclxuICAgICAgICAgICAgICAgICAgICBib3Rvbi1jb25maXJtYXI9e3ByZWd1bnRhLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIHRhYkluZGV4PXstMX1cclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlKE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFZGl0YW5kbyhmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPjxJQ09OLkNoZWNrIC8+PC9CdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5pbnRlcmZhY2UgSWNhc2lsbGVyb0Nvbk9wY2lvbmVzIHtcclxuICAgIHZhcl9uYW1lOiBJZFZhcmlhYmxlLFxyXG4gICAgY2FzaWxsZXJvczogT3BjaW9uW11cclxufVxyXG5cclxuZnVuY3Rpb24gT3BjaW9uZXNEZXNwbGllZ3VlKFxyXG4gICAgeyBjYXNpbGxlcm9Db25PcGNpb25lcywgZm9yUGssIGxlZXIsIGRlc3BsaWVndWVDb250ZW5pZG8gfTpcclxuICAgICAgICB7IGNhc2lsbGVyb0Nvbk9wY2lvbmVzOiBJY2FzaWxsZXJvQ29uT3BjaW9uZXMsIGZvclBrOiBGb3JQaywgbGVlcjogYm9vbGVhbiwgZGVzcGxpZWd1ZUNvbnRlbmlkbzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB9XHJcbikge1xyXG4gICAgY29uc3QgZGVzcGxlZ2FyT3Ryb3MgPSAob3BjaW9uOiBPcGNpb24sIHNvbG9QYXJhRGVzcGxpZWd1ZTogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB8IG51bGwpID0+IG9wY2lvbi5jYXNpbGxlcm9zLm1hcCgoc3ViUHJlZ3VudGE6IFByZWd1bnRhKSA9PiAoXHJcbiAgICAgICAgc29sb1BhcmFEZXNwbGllZ3VlID09IG51bGwgfHwgc29sb1BhcmFEZXNwbGllZ3VlID09IHN1YlByZWd1bnRhLmRlc3BsaWVndWVDb250ZW5pZG8gP1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm90cm9zLWVzcGVjaWZpY2FyXCIgc3R5bGU9e3sgd2lkdGg6ICcxMDAlJyB9fSBrZXk9e3N1YlByZWd1bnRhLmlkX2Nhc2lsbGVyb30+XHJcbiAgICAgICAgICAgICAgICA8UHJlZ3VudGFEZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZ3VudGE9e3N1YlByZWd1bnRhfVxyXG4gICAgICAgICAgICAgICAgICAgIGZvclBrPXtmb3JQa31cclxuICAgICAgICAgICAgICAgICAgICBkZXNwbGllZ3VlRW5jYWJlemFkbz0nc3VwZXJpb3InXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj4gOiBudWxsXHJcbiAgICApKVxyXG4gICAgcmV0dXJuIDw+PGRpdiBjbGFzc05hbWU9XCJjb250ZW5pZG9cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm9wY2lvbmVzXCIgZGVzcGxpZWd1ZS1jb250ZW5pZG89e2Rlc3BsaWVndWVDb250ZW5pZG8gPz8gJ3ZlcnRpY2FsJ30+XHJcbiAgICAgICAgICAgIHtjYXNpbGxlcm9Db25PcGNpb25lcy5jYXNpbGxlcm9zLm1hcCgob3BjaW9uOiBPcGNpb24sIGk6IG51bWJlcikgPT5cclxuICAgICAgICAgICAgICAgIDxHcmlkIGtleT17b3BjaW9uLmlkX2Nhc2lsbGVyb30gaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIG9jdWx0YXItc2FsdGVhZGE9e29wY2lvbi5kZXNwbGllZ3VlT2N1bHRhID8gKG9wY2lvbi5leHByZXNpb25faGFiaWxpdGFyX2pzID8gJ0lOSEFCSUxJVEFSJyA6ICdTSScpIDogJ05PJ31cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8T3BjaW9uRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm89e29wY2lvbn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU9e2Nhc2lsbGVyb0Nvbk9wY2lvbmVzLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxvck9wY2lvbj17b3BjaW9uLmNhc2lsbGVyb31cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e2ZvclBrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWVyPXtsZWVyfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25Cb3RvbkJvcnJhcj17aSA9PSAwIHx8IGRlc3BsaWVndWVDb250ZW5pZG8gIT0gJ2hvcml6b250YWwnfVxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAge2Rlc3BsaWVndWVDb250ZW5pZG8gPT0gJ2hvcml6b250YWwnID8gbnVsbCA6IGRlc3BsZWdhck90cm9zKG9wY2lvbiwgbnVsbCl9XHJcbiAgICAgICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgICAgICB7ZGVzcGxpZWd1ZUNvbnRlbmlkbyA9PSAnaG9yaXpvbnRhbCcgPyBjYXNpbGxlcm9Db25PcGNpb25lcy5jYXNpbGxlcm9zLm1hcCgob3BjaW9uOiBPcGNpb24pID0+XHJcbiAgICAgICAgICAgIGRlc3BsZWdhck90cm9zKG9wY2lvbiwgbnVsbClcclxuICAgICAgICApIDogbnVsbH08Lz5cclxufVxyXG5cclxuY29uc3Qgbm9tYnJlQ2FzaWxsZXJvID0ge1xyXG4gICAgRjogJ2Zvcm11bGFyaW8nLFxyXG4gICAgQjogJ2Jsb3F1ZScsXHJcbiAgICBQOiAncHJlZ3VudGEnLFxyXG4gICAgQ1A6ICdjb25qdW50b3ByZWd1bnRhcycsXHJcbiAgICBPOiAnb3BjaW9uJyxcclxuICAgIE9NOiAnbXVsdGlwbGUnLFxyXG4gICAgRklMVFJPOiAnZmlsdHJvJyxcclxuICAgIENPTlM6ICdjb25zaXN0ZW5jaWEnLFxyXG4gICAgQkY6ICdib3RvbmZvcm11bGFyaW8nLFxyXG4gICAgVEVYVE86ICdhY2xhcmFjaW9uc3VwZXJpb3InLFxyXG4gICAgUE1BVFJJWjogJ3ByZWd1bnRhZW5mb3JtYWRlbWF0cml6JyxcclxufVxyXG5cclxuZnVuY3Rpb24gRGVzcGxlZ2FyQ2FzaWxsZXJvKHByb3BzOiB7XHJcbiAgICBjYXNpbGxlcm86IFByZWd1bnRhIHwgQmxvcXVlIHwgRmlsdHJvIHwgQ29uanVudG9QcmVndW50YXMgfCBCb3RvbkZvcm11bGFyaW8gfCBDb25zaXN0ZW5jaWEgfCBPcGNpb25NdWx0aXBsZSB8IFRleHRvIHwgUE1hdHJpeixcclxuICAgIGlkPzogc3RyaW5nLFxyXG4gICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzLFxyXG4gICAgZGVzcGxpZWd1ZUVuY2FiZXphZG8/OiAnbGF0ZXJhbCcgfCAnc3VwZXJpb3InXHJcbiAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIHwgUmVhY3QuUmVhY3ROb2RlW10sXHJcbiAgICBcIm9jdWx0YXItc2FsdGVhZGFcIj86ICdTSScgfCAnTk8nIHwgJ0lOSEFCSUxJVEFSJyB8IHVuZGVmaW5lZFxyXG59KSB7XHJcbiAgICByZXR1cm4gPGRpdlxyXG4gICAgICAgIGtleT17YCR7cHJvcHMuY2FzaWxsZXJvLnRpcG9jfS0ke3Byb3BzLmlkIHx8IHByb3BzLmNhc2lsbGVyby5pZF9jYXNpbGxlcm99YH1cclxuICAgICAgICBjbGFzc05hbWU9e2BjYXNpbGxlcm8gJHtub21icmVDYXNpbGxlcm9bcHJvcHMuY2FzaWxsZXJvLnRpcG9jXX1gfVxyXG4gICAgICAgIGlkPXtwcm9wcy5pZH1cclxuICAgICAgICBzdHlsZT17cHJvcHMuc3R5bGV9XHJcbiAgICAgICAgZGVzcGxpZWd1ZS1lbmNhYmV6YWRvPXtwcm9wcy5jYXNpbGxlcm8uZGVzcGxpZWd1ZUVuY2FiZXphZG8gPz8gcHJvcHMuZGVzcGxpZWd1ZUVuY2FiZXphZG8gPz8gJ3N1cGVyaW9yJ31cclxuICAgICAgICBvY3VsdGFyLXNhbHRlYWRhPXtwcm9wc1tcIm9jdWx0YXItc2FsdGVhZGFcIl19XHJcbiAgICA+e3Byb3BzLmNoaWxkcmVufTwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBQcmVndW50YURlc3BsaWVndWUocHJvcHM6IHtcclxuICAgIHByZWd1bnRhOiBQcmVndW50YSxcclxuICAgIGZvclBrOiBGb3JQayxcclxuICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvOiAnbGF0ZXJhbCcgfCAnc3VwZXJpb3InLFxyXG4gICAgcGFyYVBNYXRyaXo/OiB0cnVlXHJcbn0pIHtcclxuICAgIHZhciB7IHByZWd1bnRhIH0gPSBwcm9wcztcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBlc3RhZG86IEVzdGFkb1ZhcmlhYmxlO1xyXG4gICAgdmFyIGlkID0gYHByZWd1bnRhLSR7cHJlZ3VudGEuaWRfY2FzaWxsZXJvfWBcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZCxcclxuICAgICAgICBkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgZnVuOiByZWdpc3RyYWRvckRlVmFyaWFibGUocHJlZ3VudGEpXHJcbiAgICB9KVxyXG4gICAgdmFyIGlkID0gYHByZWd1bnRhLSR7cHJlZ3VudGEuaWRfY2FzaWxsZXJvfWBcclxuICAgIHZhciBzdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHt9XHJcbiAgICBpZiAocHJlZ3VudGEuZGVzcGxpZWd1ZSA9PSAnZ3JpZCcpIHtcclxuICAgICAgICBzdHlsZS5kaXNwbGF5ID0gJ2dyaWQnO1xyXG4gICAgICAgIHN0eWxlLmdyaWRUZW1wbGF0ZUNvbHVtbnMgPSAncmVwZWF0KDMsMWZyKSc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHByb3BzLnBhcmFQTWF0cml6ID9cclxuICAgICAgICA8PlxyXG4gICAgICAgICAgICB7Z2V0TG9zTWV0YWRhdG9zKHByZWd1bnRhKX1cclxuICAgICAgICAgICAgPENhbXBvXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17cHJlZ3VudGEuY2FsY3VsYWRhID8gdHJ1ZSA6IGZhbHNlfVxyXG4gICAgICAgICAgICAgICAgcHJlZ3VudGE9e3ByZWd1bnRhIGFzIHVua25vd24gYXMgUHJlZ3VudGFTaW1wbGV9XHJcbiAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgICAgICBtaW5pPXt0cnVlfVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgIDwvPlxyXG4gICAgICAgIDogPERlc3BsZWdhckNhc2lsbGVyb1xyXG4gICAgICAgICAgICBpZD17aWR9XHJcbiAgICAgICAgICAgIGNhc2lsbGVybz17cHJlZ3VudGF9XHJcbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZX1cclxuICAgICAgICAgICAgbnVlc3Ryby10aXBvdmFyPXtwcmVndW50YS50aXBvdmFyIHx8IFwibXVsdGlwbGVcIn1cclxuICAgICAgICAgICAgb2N1bHRhci1zYWx0ZWFkYT17cHJlZ3VudGEuZGVzcGxpZWd1ZU9jdWx0YSA/IChwcmVndW50YS5leHByZXNpb25faGFiaWxpdGFyX2pzID8gJ0lOSEFCSUxJVEFSJyA6ICdTSScpIDogJ05PJ31cclxuICAgICAgICAgICAgZGVzcGxpZWd1ZUVuY2FiZXphZG89e3Byb3BzLmRlc3BsaWVndWVFbmNhYmV6YWRvfVxyXG5cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgY2FzaWxsZXJvPXtwcmVndW50YX1cclxuICAgICAgICAgICAgICAgIGxlZXI9e3ByZWd1bnRhLmxlZXIgIT09IGZhbHNlfVxyXG4gICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRlbmlkb1wiPntcclxuICAgICAgICAgICAgICAgIHByZWd1bnRhLnRpcG92YXIgPT0gXCJzaV9ub1wiID8gPEdyaWQgY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxTaU5vRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm9Db25PcGNpb25lcz17cHJlZ3VudGF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzcGxpZWd1ZUNvbnRlbmlkbz17cHJvcHMucHJlZ3VudGEuZGVzcGxpZWd1ZUNvbnRlbmlkbyA/PyAndmVydGljYWwnfVxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L0dyaWQ+IDpcclxuICAgICAgICAgICAgICAgICAgICBwcmVndW50YS50aXBvdmFyID09IFwib3BjaW9uZXNcIiA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxPcGNpb25lc0Rlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyb0Nvbk9wY2lvbmVzPXtwcmVndW50YX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZXI9eyEhcHJlZ3VudGEubGVlcn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3ByZWd1bnRhLmRlc3BsaWVndWVDb250ZW5pZG8gPz8gJ3ZlcnRpY2FsJ31cclxuICAgICAgICAgICAgICAgICAgICAgICAgLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVndW50YS50aXBvdmFyID09IG51bGwgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByZWd1bnRhLmNhc2lsbGVyb3MgYXMgKE9wY2lvbk11bHRpcGxlIHwgQ29uc2lzdGVuY2lhKVtdKS5tYXAoKG9wY2lvbk11bHRpcGxlKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbk11bHRpcGxlLnRpcG9jID09ICdPTScgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8T3BjaW9uTXVsdGlwbGVEZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e29wY2lvbk11bHRpcGxlLmlkX2Nhc2lsbGVyb31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbk09e29wY2lvbk11bHRpcGxlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8vbGFzIGNvbnNpc3RlbmNpYXMgcHVlZGVuIHNlciBoZXJtYW5hcyBkZSBPTVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uc2lzdGVuY2lhRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtvcGNpb25NdWx0aXBsZS5pZF9jYXNpbGxlcm99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm89e29wY2lvbk11bHRpcGxlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwcmVndW50YVNpbXBsZTogUHJlZ3VudGFTaW1wbGUpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENhbXBvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtwcmVndW50YVNpbXBsZS5jYWxjdWxhZGEgPyB0cnVlIDogZmFsc2V9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWd1bnRhPXtwcmVndW50YVNpbXBsZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApKHByZWd1bnRhKVxyXG4gICAgICAgICAgICB9PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGllLXByZWd1bnRhXCI+XHJcbiAgICAgICAgICAgICAgICA8U2FsdG9EZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvPXtwcmVndW50YX1cclxuICAgICAgICAgICAgICAgICAgICBwcmVmaWpvPXtwcmVndW50YS50aXBvdmFyID09IFwib3BjaW9uZXNcIiA/IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZ3VudGEuY2FzaWxsZXJvcy5zb21lKG9wY2lvbiA9PiBvcGNpb24uc2FsdG8pID8gXCJyZXN0byBkZSBsYXMgb3BjaW9uZXNcIiA6IFwidG9kYXMgbGFzIG9wY2lvbmVzXCJcclxuICAgICAgICAgICAgICAgICAgICApIDogXCJcIn1cclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBQTWF0cml6RGVzcGxpZWd1ZShwcm9wczoge1xyXG4gICAgY2FzaWxsZXJvOiBQTWF0cml6LFxyXG4gICAgZm9yUGs6IEZvclBrLFxyXG59KSB7XHJcbiAgICB2YXIgeyBjYXNpbGxlcm8gfSA9IHByb3BzO1xyXG4gICAgdmFyIGlkID0gYHByZWd1bnRhLSR7Y2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gXHJcbiAgICBjb25zdCBjb2xzID0gKGNhc2lsbGVyby5jYXNpbGxlcm9zIGFzIChPcGNpb25NdWx0aXBsZSB8IENvbnNpc3RlbmNpYSlbXSlcclxuICAgICAgICAuZmluZCgob3BjaW9uTXVsdGlwbGUpID0+IG9wY2lvbk11bHRpcGxlLnRpcG9jID09ICdPTScpPy5jYXNpbGxlcm9zXHJcbiAgICAgICAgLm1hcCgocHJlZ3VudGEpID0+IHByZWd1bnRhLm5vbWJyZSk7XHJcbiAgICBjb25zdCB0ZFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0geyB0ZXh0QWxpZ246ICdjZW50ZXInLCB3aWR0aDogY29scyA/ICg1NTAgLyAoY29scy5sZW5ndGgpKS50b1N0cmluZygpICsgJ3B4JyA6ICcnIH07XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVyb1xyXG4gICAgICAgIGlkPXtpZH1cclxuICAgICAgICBjYXNpbGxlcm89e2Nhc2lsbGVyb31cclxuICAgICAgICBvY3VsdGFyLXNhbHRlYWRhPXtjYXNpbGxlcm8uZGVzcGxpZWd1ZU9jdWx0YSA/IChjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA/ICdJTkhBQklMSVRBUicgOiAnU0knKSA6ICdOTyd9XHJcbiAgICA+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlXHJcbiAgICAgICAgICAgIGNhc2lsbGVybz17Y2FzaWxsZXJvfVxyXG4gICAgICAgICAgICBsZWVyPXtjYXNpbGxlcm8ubGVlciAhPT0gZmFsc2V9XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAvPlxyXG4gICAgICAgIDx0YWJsZSBjbGFzc05hbWU9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGg+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICB7Y29scz8ubWFwKChjb2wsIGkpID0+IDx0aCBrZXk9e2l9IHNjb3BlPVwiY29sXCIgc3R5bGU9e3RkU3R5bGV9Pntjb2x9PC90aD4pfVxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgeyhjYXNpbGxlcm8uY2FzaWxsZXJvcyBhcyAoT3BjaW9uTXVsdGlwbGUgfCBDb25zaXN0ZW5jaWEpW10pLm1hcCgob3BjaW9uTXVsdGlwbGUsIGkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgb3BjaW9uTXVsdGlwbGUudGlwb2MgPT0gJ09NJyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBrZXk9e2l9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPntvcGNpb25NdWx0aXBsZS5ub21icmV9PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtvcGNpb25NdWx0aXBsZS5jYXNpbGxlcm9zLm1hcCgocHJlZ3VudGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBgcHJlZ3VudGEtJHtwcmVndW50YS5pZF9jYXNpbGxlcm99YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuOiByZWdpc3RyYWRvckRlVmFyaWFibGUocHJlZ3VudGEgYXMgdW5rbm93biBhcyBQcmVndW50YSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8dGQga2V5PXtpZH0gaWQ9e2lkfT48UHJlZ3VudGFEZXNwbGllZ3VlIGZvclBrPXtwcm9wcy5mb3JQa30gcHJlZ3VudGE9e3ByZWd1bnRhIGFzIHVua25vd24gYXMgUHJlZ3VudGF9IGRlc3BsaWVndWVFbmNhYmV6YWRvPVwic3VwZXJpb3JcIiBwYXJhUE1hdHJpej17dHJ1ZX0gLz48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IC8vbGFzIGNvbnNpc3RlbmNpYXMgcHVlZGVuIHNlciBoZXJtYW5hcyBkZSBPTVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Q29uc2lzdGVuY2lhRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtvcGNpb25NdWx0aXBsZS5pZF9jYXNpbGxlcm99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm89e29wY2lvbk11bHRpcGxlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBpZS1wcmVndW50YVwiPjwvZGl2PlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbnZhciBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8gPSAoXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOiBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyB8IG51bGwsXHJcbiAgICBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW86IENvbmZpZ3VyYWNpb25IYWJpbGl0YXJCb3RvbkZvcm11bGFyaW8gfCBudWxsLFxyXG4gICAgZm9ybXVsYXJpbzogSWRGb3JtdWxhcmlvXHJcbikgPT4ge1xyXG4gICAgaWYgKGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyAmJiBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bZm9ybXVsYXJpb10pIHtcclxuICAgICAgICByZXR1cm4gIWhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tmb3JtdWxhcmlvXS5oYWJpbGl0YXJfYWdyZWdhcl9saXN0b1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gISEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJiBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvKVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBib3RvbmVzRGVsRm9ybXVsYXJpbyhyOiBSZXNwdWVzdGFzLCB1bmlkYWRfYW5hbGlzaXM6IElkVW5pZGFkQW5hbGlzaXMsIGVzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmEsIGZvclBrUGFkcmU6IEZvclBrLCBmZWVkYmFja0FsbDogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSk6IEh0bWxUYWc8SFRNTERpdkVsZW1lbnQ+IHtcclxuICAgIHZhciBmb3Jtc1ZpdmllbmRhID0gZ2V0Rm9ybXVsYXJpb3NGb3JWYWx1ZVBrUmFpeihmb3JQa1BhZHJlW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pO1xyXG4gICAgdmFyIHVhRGVmID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgdmFyIGFycmF5RXN0cnVjdHVyYUZvcm11bGFyaW9zID0gKGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKSkuYXJyYXkoKTtcclxuICAgIHZhciB4ID0gbGlrZUFyKHVhRGVmLmhpamFzKS5maWx0ZXIodWFIaWphID0+XHJcbiAgICAgICAgLy9kZXNjYXJ0byB1YXMgcXVlIG5vIGVzdMOpbiBlbiBuaW5ndW4gZm9ybVxyXG4gICAgICAgIGFycmF5RXN0cnVjdHVyYUZvcm11bGFyaW9zLmZpbHRlcigoaW5mb0Zvcm11bGFyaW8pID0+XHJcbiAgICAgICAgICAgIGluZm9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhSGlqYT8udW5pZGFkX2FuYWxpc2lzICYmIGZvcm1zVml2aWVuZGEuaW5jbHVkZXMoaW5mb0Zvcm11bGFyaW8uY2FzaWxsZXJvcy5pZF9jYXNpbGxlcm8gYXMgSWRGb3JtdWxhcmlvKVxyXG4gICAgICAgICkubGVuZ3RoID4gMFxyXG4gICAgKS5tYXAodWFIaWphID0+IChcclxuICAgICAgICB1YUhpamEgPT0gbnVsbCA/IG51bGwgOlxyXG4gICAgICAgICAgICBodG1sLmRpdih7IGNsYXNzOiAndWEtaGlqYXMnIH0sIFtcclxuICAgICAgICAgICAgICAgIGh0bWwuZGl2KHVhSGlqYS51bmlkYWRfYW5hbGlzaXMpLFxyXG4gICAgICAgICAgICAgICAgaHRtbC5kaXYoXHJcbiAgICAgICAgICAgICAgICAgICAgbGlrZUFyKHJbdWFIaWphLnVuaWRhZF9hbmFsaXNpc10gfHwgW10pLm1hcCgocmVzcHVlc3Rhc0hpamEsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bSA9IE51bWJlcihpKSArIDFcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvclBrSGlqYVBhcmNpYWwgPSB7IC4uLmZvclBrUGFkcmUsIFt1YUhpamEucGtfYWdyZWdhZGFdOiBudW0gfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyA/IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtQYWRyZVtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKV0gOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gPSBlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWwuZGl2KHsgY2xhc3M6ICdudW1lcmFkb3ItdWEnIH0sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KHsgY2xhc3M6ICdib3RvbmVzLXVhJyB9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoeyBjbGFzczogJ251bWVyby11YScgfSwgbnVtLnRvU3RyaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZvcm1EZWYgPT4gZm9ybURlZi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YUhpamEudW5pZGFkX2FuYWxpc2lzICYmIGZvcm1zVml2aWVuZGEuaW5jbHVkZXMoZm9ybURlZi5jYXNpbGxlcm9zLmlkX2Nhc2lsbGVybyBhcyBJZEZvcm11bGFyaW8pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChfZm9ybURlZiwgZm9ybXVsYXJpbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvclBrID0geyAuLi5mb3JQa0hpamFQYXJjaWFsLCBmb3JtdWxhcmlvIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmVlZGJhY2tGb3JtID0gZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKGZvclBrKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmVlZGJhY2tGb3JtID8gaHRtbC5kaXYoe30sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodG1sLmJ1dHRvbigodWFIaWphISkucGtfYWdyZWdhZGErXCIgb2s6IFwiKyhOdW1iZXIoaSkrMSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uRm9ybXVsYXJpb0NvblJlc3VtZW4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiB0cnVlIHx8IGNhbGN1bGFyQWN0dWFsQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgbnVtLCBudWxsLCBmb3JtdWxhcmlvLCByKSwgLy9SRVZJU0FSIHRydWUgcGFyYSBxdWUgbm8gc2UgZ3Jpc2VuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sIG51bSwgZm9ybXVsYXJpbywgcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZGJhY2tGb3JtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGRlc3BsaWVndWVPY3VsdGE6IGZhbHNlLCBleHByZXNpb25faGFiaWxpdGFyX2pzOiAnJywgbm9tYnJlOiBmb3JtdWxhcmlvLCBhY2xhcmFjaW9uOiBudWxsLCBzYWx0bzogZm9ybXVsYXJpbyB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQa1BhZHJlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJvdG9uLWlyLXJlc3VtZW4tZm9ybXVsYXJpb1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2Zvcm11bGFyaW9dLmNhc2lsbGVyb3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuYXJyYXkoKS5tYXAoeCA9PiB4ID09IG51bGwgPyBudWxsIDogeCkucmV2ZXJzZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgYm90b25lc0RlbEZvcm11bGFyaW8ocmVzcHVlc3Rhc0hpamEsIHVhSGlqYS51bmlkYWRfYW5hbGlzaXMsIGVzdHJ1Y3R1cmEsIGZvclBrSGlqYVBhcmNpYWwsIGZlZWRiYWNrQWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pLmFycmF5KCkubWFwKHggPT4geCA9PSBudWxsID8gbnVsbCA6IHgpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICApKS5hcnJheSgpLm1hcCh4ID0+IHggPT0gbnVsbCA/IG51bGwgOiB4KTtcclxuICAgIHJldHVybiBodG1sLmRpdigvKntzdHlsZTonZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpyb3cnfSwqL3gpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBUZXh0b0Rlc3BsaWVndWUocHJvcHM6IHsgY2FzaWxsZXJvOiBUZXh0bywgZm9yUGs6IEZvclBrIH0pIHtcclxuICAgIHZhciB7IGNhc2lsbGVybywgZm9yUGsgfSA9IHByb3BzO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPyBnZXRGdW5jaW9uSGFiaWxpdGFyKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzKSA6ICgpID0+IHRydWU7XHJcbiAgICB2YXIgeyBtb2RvRGVzcGxpZWd1ZSB9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICB2YXIgaWQgPSBgdGV4dG8tJHtjYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7IGlkLCBzdHlsZTogJ2Rpc3BsYXknLCBmdW46IChyOiBSZXNwdWVzdGFzKSA9PiBoYWJpbGl0YWRvcihyKSB8fCBtb2RvRGVzcGxpZWd1ZSA9PSAnbWV0YWRhdG9zJyA/ICdibG9jaycgOiAnbm9uZScgfSlcclxuICAgIHZhciBlc1Jlc3VtZW5Gb3JtdWxhcmlvID0gY2FzaWxsZXJvLmNhc2lsbGVybyA9PSAnUmVzRm9yJyBhcyBJZENhc2lsbGVybzsgLy8gVE9ETzogQ2FtYmlhIGVzdG8gcXVlIGVzdMOhIGphcmNvZGVhZG8uXHJcbiAgICBpZiAoZXNSZXN1bWVuRm9ybXVsYXJpbykge1xyXG4gICAgICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICAgICAgaWQsIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICAgICAgZnVuOiAoXHJcbiAgICAgICAgICAgICAgICByOiBSZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAgICAgX2ZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50bzogSFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja0FsbDogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmFcclxuICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50by5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHJlc3B1ZXN0YXMgc29uIHJlc3B1ZXN0YXNSYWl6IHBvcnF1ZSBSZXNGb3IgZXN0w6EgZW4gZWwgZm9ybSBwcGFsXHJcbiAgICAgICAgICAgICAgICBpZiAoclsncmVzdW1lbkVzdGFkbyddIGFzIFJlc3VtZW5Fc3RhZG8gPT0gJ3ZhY2lvJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLnRleHRDb250ZW50ID0gXCJyZWxldmFtaWVudG8gc2luIGVtcGV6YXJcIjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8udGV4dENvbnRlbnQgPSBcInJlbGV2YW1pZW50byBlbXBlemFkb1wiO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcyB9ID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8uYXBwZW5kQ2hpbGQoYm90b25lc0RlbEZvcm11bGFyaW8ociwgdW5pZGFkX2FuYWxpc2lzLCBlc3RydWN0dXJhLCBmb3JQaywgZmVlZGJhY2tBbGwpLmNyZWF0ZSgpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB2YXIgaXIgPSAoZGVmQm90b246IERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIpID0+IHtcclxuICAgICAgICAvLyB2YXIgbnVldmFGb3JQaz17Li4uZm9yUGssIGZvcm11bGFyaW86aWRGb3JtdWxhcmlvRGVzdGlub307XHJcbiAgICAgICAgLy8gbnVldmFGb3JQa1tudWV2b0NhbXBvUGtdID0gZGVmQm90b24ubnVtXHJcbiAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8sIHsgZm9yUGs6IGRlZkJvdG9uLmZvclBrIH0pO1xyXG4gICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNBTUJJQVJfRk9STVVMQVJJTyh7IGZvclBrOiBkZWZCb3Rvbi5mb3JQaywgYXBpbGFyVnVlbHRhOiB0cnVlIH0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvXHJcbiAgICAgICAgaWQ9e2Ake2lkfS1leHRlcm5vYH1cclxuICAgICAgICBjYXNpbGxlcm89e2Nhc2lsbGVyb31cclxuICAgID5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IGxlZXI9e2ZhbHNlfSBmb3JQaz17Zm9yUGt9IC8+XHJcbiAgICAgICAgPGRpdiBpZD17aWR9IHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fT48L2Rpdj5cclxuICAgICAgICB7ZXNSZXN1bWVuRm9ybXVsYXJpbyA/XHJcbiAgICAgICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwic3BlY2lhbC1idXR0b25cIiBpZD1cImJvdG9uLWlyLXJlc3VtZW4tZm9ybXVsYXJpb1wiIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXIoSlNPTi5wYXJzZSgoZXZlbnQudGFyZ2V0ISBhcyB1bmtub3duIGFzIEhUTUxCdXR0b25FbGVtZW50KS5nZXRBdHRyaWJ1dGUoJ2RlZi1idXR0b24nKSEpKVxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPmlyIChpbnRlcm5vKTwvQnV0dG9uPlxyXG4gICAgICAgICAgICA6IG51bGx9XHJcblxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEZpbHRyb0Rlc3BsaWVndWUocHJvcHM6IHsgZmlsdHJvOiBGaWx0cm8sIGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICB2YXIgeyBmaWx0cm8gfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gY2FzaWxsZXJvPXtmaWx0cm99PlxyXG4gICAgICAgIDxEZXNwbGllZ3VlRW5jYWJlemFkbyBjYXNpbGxlcm89e2ZpbHRyb30gLz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBDb25zaXN0ZW5jaWFEZXNwbGllZ3VlKHByb3BzOiB7IGNhc2lsbGVybzogQ29uc2lzdGVuY2lhLCBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgdmFyIHsgY2FzaWxsZXJvLCBmb3JQayB9ID0gcHJvcHM7XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA/IGdldEZ1bmNpb25IYWJpbGl0YXIoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMpIDogKCkgPT4gdHJ1ZTtcclxuICAgIHZhciB7IG1vZG9EZXNwbGllZ3VlIH0gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIHZhciBpZCA9IGBjb25zaXN0ZW5jaWEtJHtjYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7IGlkLCBzdHlsZTogJ2Rpc3BsYXknLCBmdW46IChyOiBSZXNwdWVzdGFzKSA9PiBoYWJpbGl0YWRvcihyKSB8fCBtb2RvRGVzcGxpZWd1ZSA9PSAnbWV0YWRhdG9zJyA/ICdibG9jaycgOiAnbm9uZScgfSlcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvXHJcbiAgICAgICAgaWQ9e2lkfVxyXG4gICAgICAgIGNhc2lsbGVybz17Y2FzaWxsZXJvfVxyXG4gICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxyXG4gICAgPlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gbGVlcj17ZmFsc2V9IGZvclBrPXtmb3JQa30gLz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG50eXBlIERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIgPVxyXG4gICAgKHsgZm9yUGs6IEZvclBrLCBudW06IG51bWJlciwgYWN0dWFsOiBib29sZWFuLCBwcmV2aW86IGJvb2xlYW4gfSB8XHJcbiAgICB7IGZvclBrOiBGb3JQaywgbnVtOiBudW1iZXIsIGFjdHVhbDogYm9vbGVhbiwgcHJldmlvOiBmYWxzZSwgZXNBZ3JlZ2FyOiB0cnVlIH0gfFxyXG4gICAgeyBmb3JQazogRm9yUGssIG51bTogbnVtYmVyLCBhY3R1YWw6IGJvb2xlYW4sIHByZXZpbzogZmFsc2UsIGVzQ29uZmlybWFyOiB0cnVlIH0gfFxyXG4gICAgeyBmb3JQazogRm9yUGssIG51bTogbnVtYmVyLCBhY3R1YWw6IGJvb2xlYW4sIHByZXZpbzogZmFsc2UsIHBlcm1pdGVCb3JyYXI6IGJvb2xlYW4gfSB8XHJcbiAgICB7IGZvclBrOiBGb3JQaywgbnVtOiBmYWxzZSwgYWN0dWFsOiBib29sZWFuLCBwcmV2aW86IHRydWUsIHVuaWNvOiB0cnVlIH0pXHJcbiAgICAmIHsgZXNDb25maXJtYXI/OiB0cnVlLCBlc0FncmVnYXI/OiB0cnVlLCBwZXJtaXRlQm9ycmFyPzogYm9vbGVhbiwgcGVybWl0ZUJvcnJhckdhYmluZXRlPzogYm9vbGVhbiwgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkIH07XHJcblxyXG5cclxudmFyIGJvdG9uRm9ybXVsYXJpb0NvblJlc3VtZW4gPSAoXHJcbiAgICBkZWZCb3RvbjogRGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpcixcclxuICAgIGZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sXHJcbiAgICByZXNwdWVzdGFzQXVtZW50YWRhczogUmVzcHVlc3RhcyxcclxuICAgIGNhc2lsbGVybzogeyBkZXNwbGllZ3VlT2N1bHRhPzogYm9vbGVhbiB8IG51bGwsIGV4cHJlc2lvbl9oYWJpbGl0YXJfanM/OiBzdHJpbmcsIGFjbGFyYWNpb246IHN0cmluZyB8IG51bGwsIGV4cHJlc2lvbl9oYWJpbGl0YXI/OiBzdHJpbmcsIG5vbWJyZT86IHN0cmluZywgc2FsdG86IHN0cmluZyB8IG51bGwsIGVzcGVjaWFsPzogYW55IH0sXHJcbiAgICBmb3JQa1BhZHJlOiBGb3JQayxcclxuICAgIGlkQnV0dG9uOiBzdHJpbmcsXHJcbiAgICBmb3JtdWxhcmlvQUFicmlyOiBGb3JtdWxhcmlvLFxyXG4gICAgcGVkaXJDb25maXJtYWNpb25Cb3JyYWRvPzogKGRlZkJvdG9uOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyLCBmb3JQa1BhZHJlOiBGb3JQaykgPT4gdm9pZFxyXG4pID0+IHtcclxuICAgIHZhciBmb3JQazogRm9yUGsgPSBkZWZCb3Rvbi5mb3JQaztcclxuICAgIHZhciBzdWZpam9JZEVsZW1lbnRvID0gdG9QbGFpbkZvclBrKGZvclBrKSArIChkZWZCb3Rvbi5lc0NvbmZpcm1hciA/ICctbGlzdG8nIDogJycpO1xyXG4gICAgdmFyIGlkID0gYGRpdi1ib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gO1xyXG4gICAgdmFyIGVzdGFkbyA9IGZlZWRiYWNrRm9ybS5yZXN1bWVuO1xyXG4gICAgcmV0dXJuIGh0bWwudHIoe1xyXG4gICAgICAgIGlkLFxyXG4gICAgICAgIGNsYXNzOiBcInNlY2Npb24tYm90b24tZm9ybXVsYXJpb1wiLFxyXG4gICAgICAgICRhdHRyczoge1xyXG4gICAgICAgICAgICBcIm51ZXN0cm8tdmFsaWRhdG9yXCI6IGRlZkJvdG9uLmFjdHVhbCA/ICdhY3R1YWwnIDogZGVmQm90b24ucHJldmlvID8gJ3ZhbGlkYScgOiAndG9kYXZpYV9ubycsXHJcbiAgICAgICAgICAgIFwib2N1bHRhci1zYWx0ZWFkYVwiOiBjYXNpbGxlcm8uZGVzcGxpZWd1ZU9jdWx0YSA/IChjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA/ICdJTkhBQklMSVRBUicgOiAnU0knKSA6ICdOTycsXHJcbiAgICAgICAgICAgIFwidGllbmUtdmFsb3JcIjogXCJOT1wiLFxyXG4gICAgICAgICAgICBcImRlZi1idXR0b25cIjogSlNPTi5zdHJpbmdpZnkoZGVmQm90b24pXHJcbiAgICAgICAgfVxyXG4gICAgfSwgW1xyXG4gICAgICAgIGNhc2lsbGVyby5hY2xhcmFjaW9uID9cclxuICAgICAgICAgICAgaHRtbC50ZCh7IGNsYXNzOiBcImFjbGFyYWNpb25cIiB9LCBbYnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLmFjbGFyYWNpb24pXSlcclxuICAgICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgIGh0bWwudGQoe1xyXG4gICAgICAgICAgICBjb2xzcGFuOiAoZGVmQm90b24uZXNBZ3JlZ2FyIHx8IGRlZkJvdG9uLmVzQ29uZmlybWFyKSA/XHJcbiAgICAgICAgICAgICAgICAoY2FzaWxsZXJvLmVzcGVjaWFsPy5jYW1wb3NSZXN1bWVuLmxlbmd0aCA/PyAxKSArIChjYXNpbGxlcm8uYWNsYXJhY2lvbiA/IDAgOiAxKVxyXG4gICAgICAgICAgICAgICAgOiBudWxsXHJcbiAgICAgICAgfSwgW1xyXG4gICAgICAgICAgICBCdXR0b24yKHtcclxuICAgICAgICAgICAgICAgIC8vIGlkOmB2YXItJHtpZFZhcmlhYmxlfWAsXHJcbiAgICAgICAgICAgICAgICBpZDogYGJvdG9uLWZvcm11bGFyaW8tJHtzdWZpam9JZEVsZW1lbnRvfWAsXHJcbiAgICAgICAgICAgICAgICB2YXJpYW50OiBkZWZCb3Rvbi5hY3R1YWwgPyBcImNvbnRhaW5lZFwiIDogXCJvdXRsaW5lZFwiLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRlZkJvdG9uLmRpc2FibGVkLFxyXG4gICAgICAgICAgICAgICAgY29sb3I6IGRlZkJvdG9uLmFjdHVhbCA/IFwicHJpbWFyeVwiIDogXCJpbmhlcml0XCIsXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlZkJvdG9uLmVzQ29uZmlybWFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWZCb3Rvbi5udW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2lsbGVyby5zYWx0bykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGlzdG8sIGFncmVnYXIgfSA9IGdldEJGVmFyTmFtZXMoY2FzaWxsZXJvLnNhbHRvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogZm9yUGtQYWRyZSwgdmFyaWFibGU6IGxpc3RvLCByZXNwdWVzdGE6IGRlZkJvdG9uLm51bSBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogZm9yUGtQYWRyZSwgdmFyaWFibGU6IGFncmVnYXIsIHJlc3B1ZXN0YTogMSBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBmb3JQa1BhZHJlLCB2YXJpYWJsZTogY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgYXMgSWRWYXJpYWJsZSwgcmVzcHVlc3RhOiBkZWZCb3Rvbi5udW0gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRCdXR0b24pISBhcyBIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLnNldEF0dHJpYnV0ZSgnZGVmLWJ1dHRvbicsIEpTT04uc3RyaW5naWZ5KGRlZkJvdG9uKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAkYXR0cnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBcInJlc3VtZW4tZXN0YWRvXCI6IGVzdGFkbyAhPSAndmFjaW8nID8gZXN0YWRvIDogZGVmQm90b24uYWN0dWFsID8gJ2FjdHVhbCcgOiBkZWZCb3Rvbi5wcmV2aW8gPyBlc3RhZG8gOiAndG9kYXZpYV9ubycsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAsIGNoaWxkcmVuOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgKGRlZkJvdG9uLmVzQWdyZWdhciA/ICdhZ3JlZ2FyJyA6IGRlZkJvdG9uLmVzQ29uZmlybWFyID8gJ0xpc3RvJyA6IGNhc2lsbGVyby5ub21icmUgKyAnICcgKyAoZGVmQm90b24ubnVtIHx8ICcnKSksXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5zdmcoeyBmb2N1c2FibGU6IGZhbHNlLCB2aWV3Ym94OiBcIjAgMCAyNCAyNFwiLCBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLCBzdHlsZTogc3R5bGVUb0Nzcyh7IGZpbGw6IFwiY3VycmVudENvbG9yXCIgfSkgfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLnBhdGgoeyBkOiAoZGVmQm90b24uZXNBZ3JlZ2FyID8gbWF0ZXJpYWxJb0ljb25zU3ZnUGF0aC5BZGQgOiBkZWZCb3Rvbi5lc0NvbmZpcm1hciA/IG1hdGVyaWFsSW9JY29uc1N2Z1BhdGguQ2hlY2sgOiBjYXNpbGxlcm8uc2FsdG8gPyBtYXRlcmlhbElvSWNvbnNTdmdQYXRoLkZvcndhcmQgOiBtYXRlcmlhbElvSWNvbnNTdmdQYXRoLkV4aXRUb0FwcCksIHN0eWxlOiBzdHlsZVRvQ3NzKHsgZmlsbDogJ2N1cnJlbnRDb2xvcicgfSkgfSlcclxuICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKGRlZkJvdG9uLnBlcm1pdGVCb3JyYXIgfHwgZGVmQm90b24ucGVybWl0ZUJvcnJhckdhYmluZXRlID9cclxuICAgICAgICAgICAgICAgIEJ1dHRvbjIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJib3Rvbi1ib3JyYXItdWEtdmFjaWFcIixcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJkZWZhdWx0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudDogXCJvdXRsaW5lZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IG1hcmdpbkxlZnQ6ICc4cHgnIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuc3ZnKHsgZm9jdXNhYmxlOiBmYWxzZSwgdmlld2JveDogXCIwIDAgMjQgMjRcIiwgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIiwgc3R5bGU6IHN0eWxlVG9Dc3MoeyBmaWxsOiBcImN1cnJlbnRDb2xvclwiIH0pIH0sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwucGF0aCh7IGQ6IG1hdGVyaWFsSW9JY29uc1N2Z1BhdGguRGVsZXRlRm9yZXZlciwgc3R5bGU6IHN0eWxlVG9Dc3MoeyBmaWxsOiAnY3VycmVudENvbG9yJyB9KSB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWZCb3Rvbi5wZXJtaXRlQm9ycmFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8oeyBmb3JQaywgZm9yUGtQYWRyZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGlzdG8sIGFncmVnYXIgfSA9IGdldEJGVmFyTmFtZXMoY2FzaWxsZXJvLnNhbHRvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWZCb3Rvbi5udW0gPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogZm9yUGtQYWRyZSwgdmFyaWFibGU6IGFncmVnYXIsIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBsaXN0bywgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogZm9yUGtQYWRyZSwgdmFyaWFibGU6IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyIGFzIElkVmFyaWFibGUsIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlZkJvdG9uLnBlcm1pdGVCb3JyYXJHYWJpbmV0ZSAmJiBwZWRpckNvbmZpcm1hY2lvbkJvcnJhZG8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZGlyQ29uZmlybWFjaW9uQm9ycmFkbyhkZWZCb3RvbiwgZm9yUGtQYWRyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgOiBudWxsKSxcclxuICAgICAgICAgICAgKGRlZkJvdG9uLmVzQ29uZmlybWFyICYmIGNhc2lsbGVyby5zYWx0byAmJiByZXNwdWVzdGFzQXVtZW50YWRhc1snJEIuRjonICsgKGNhc2lsbGVyby5zYWx0by5zdWJzdHJpbmcoMCwgMikgPT0gJ0Y6JyA/IGNhc2lsbGVyby5zYWx0by5zbGljZSgyKSA6IGNhc2lsbGVyby5zYWx0bykgYXMgSWRWYXJpYWJsZV0gIT0gbnVsbCA/XHJcbiAgICAgICAgICAgICAgICBCdXR0b24yKHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiYm90b24tZGVzaGFjZXItbGlzdG9cIixcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJkZWZhdWx0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudDogXCJvdXRsaW5lZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IG1hcmdpbkxlZnQ6ICc4cHgnIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJEZXNoYWNlciBMaXN0b1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLnN2Zyh7IGZvY3VzYWJsZTogZmFsc2UsIHZpZXdib3g6IFwiMCAwIDI0IDI0XCIsIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsIHN0eWxlOiBzdHlsZVRvQ3NzKHsgbWFyZ2luTGVmdDogJzRweCcsIGhlaWdodDogJzIwcHgnLCB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyB9KSB9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLnBhdGgoeyBkOiBtYXRlcmlhbElvSWNvbnNTdmdQYXRoLkRlbGV0ZUZvcmV2ZXIsIHN0eWxlOiBzdHlsZVRvQ3NzKHsgZmlsbDogJ2N1cnJlbnRDb2xvcicgfSkgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGlzdG8sIGFncmVnYXIgfSA9IGdldEJGVmFyTmFtZXMoY2FzaWxsZXJvLnNhbHRvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBhZ3JlZ2FyLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBsaXN0bywgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhciBhcyBJZFZhcmlhYmxlLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IG51bGwpXHJcbiAgICAgICAgXSksXHJcbiAgICAgICAgKGRlZkJvdG9uLm51bSAhPT0gZmFsc2UgJiYgIWRlZkJvdG9uLmVzQWdyZWdhciAmJiAhZGVmQm90b24uZXNDb25maXJtYXIgP1xyXG4gICAgICAgICAgICAoY2FzaWxsZXJvLmVzcGVjaWFsPy5jYW1wb3NSZXN1bWVuID8/IFsvKmRlZkJvdG9uLm51bS50b1N0cmluZygpKi9dKS5tYXAoXHJcbiAgICAgICAgICAgICAgICAoY2FtcG86IHN0cmluZykgPT4gaHRtbC50ZCgocmVzcHVlc3Rhc0F1bWVudGFkYXNbZm9ybXVsYXJpb0FBYnJpci51bmlkYWRfYW5hbGlzaXNdW2RlZkJvdG9uLm51bSAtIDFdW2NhbXBvIGFzIElkVmFyaWFibGVdID8/ICcnKS50b1N0cmluZygpKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIDogbnVsbClcclxuICAgICAgICAvLyBodG1sLmRpdih7Y2xhc3M6J2lubGluZS1kaWFsb2cnLCAkYXR0cnM6e1wiaW5saW5lLWRpYWxvZy1vcGVuXCI6IGNvbmZpcm1hckZvcnphcklyID09IGRlZkJvdG9uLm51bT8ndmlzaWJsZSc6J2hpZGRlbid9fSxbICAgICAgICAgICAgICAgIF0pXHJcblxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICAgIHtkZWZCb3Rvbi5lc0FncmVnYXI/PD4gPHNwYW4+ICA8L3NwYW4+IDxCdXR0b25cclxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID48SUNPTi5DaGVjay8+PC9CdXR0b24+PC8+Om51bGx9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKi9cclxuICAgIF0pLmNyZWF0ZSgpXHJcbn1cclxuXHJcbnZhciBidXNjYXJIbm9zRm9ybXVsYXJpbyA9IChpZEZvcm11bGFyaW9EZXN0aW5vOiBJZEZvcm11bGFyaW8pID0+IHtcclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgdmFyIHVhID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tpZEZvcm11bGFyaW9EZXN0aW5vXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcztcclxuICAgIHJldHVybiBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcylcclxuICAgICAgICAuZmlsdGVyKChpbmZvRm9ybXVsYXJpbzogSW5mb0Zvcm11bGFyaW8sIF9pZEZvcm06IElkRm9ybXVsYXJpbykgPT5cclxuICAgICAgICAgICAgaW5mb0Zvcm11bGFyaW8uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWFcclxuICAgICAgICApLm1hcCgoX2luZm9Gb3JtdWxhcmlvOiBJbmZvRm9ybXVsYXJpbywgaWRGb3JtOiBJZEZvcm11bGFyaW8pID0+XHJcbiAgICAgICAgICAgIGlkRm9ybVxyXG4gICAgICAgICkuYXJyYXkoKVxyXG59XHJcblxyXG52YXIgY2hlY2tGb3Jtc1ZhY2lvcyA9IChmb3JtczogSWRGb3JtdWxhcmlvW10sIGZlZWRiYWNrQWxsOiB7XHJcbiAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxufSwgZm9yUGs6IEZvclBrKSA9PiB7XHJcbiAgICByZXR1cm4gZm9ybXMuZmlsdGVyKChmb3JtOiBJZEZvcm11bGFyaW8pID0+IHtcclxuICAgICAgICBsZXQgbXlmb3JQayA9IHsgLi4uZm9yUGssIGZvcm11bGFyaW86IGZvcm0gfTtcclxuICAgICAgICB2YXIgZmVlZGJhY2sgPSBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsobXlmb3JQayldO1xyXG4gICAgICAgIHJldHVybiBmZWVkYmFjay5yZXN1bWVuICE9ICd2YWNpbydcclxuICAgIH0pLmxlbmd0aCA9PSAwXHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUocHJvcHM6IHsgY2FzaWxsZXJvOiBCb3RvbkZvcm11bGFyaW8sIGZvcm11bGFyaW86IEZvcm11bGFyaW8sIGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICB2YXIgeyBjYXNpbGxlcm8sIGZvclBrIH0gPSBwcm9wcztcclxuICAgIHZhciBoYWJpbGl0YWRvciA9IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzID8gZ2V0RnVuY2lvbkhhYmlsaXRhcihjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcykgOiAoKSA9PiB0cnVlO1xyXG4gICAgdmFyIHsgb3BjaW9uZXMgfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgdmFyIHsgbGlzdG86IEJGX2xpc3RvLCBhZ3JlZ2FyOiBCRl9hZ3JlZ2FyLCBpZEZvcm11bGFyaW86IGlkRm9ybXVsYXJpb0Rlc3Rpbm8gfSA9IGdldEJGVmFyTmFtZXMoY2FzaWxsZXJvLnNhbHRvKTtcclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgdmFyIHsgZm9ybXVsYXJpb0FBYnJpciB9ID0gdXNlU2VsZWN0b3IoKF9zdGF0ZTogQ2Fzb1N0YXRlKSA9PiAoe1xyXG4gICAgICAgIGZvcm11bGFyaW9BQWJyaXI6IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbaWRGb3JtdWxhcmlvRGVzdGlub10uY2FzaWxsZXJvcyxcclxuICAgIH0pKTtcclxuICAgIHZhciBzdWZpam9JZEVsZW1lbnRvID0gdG9QbGFpbkZvclBrKGZvclBrKTtcclxuICAgIC8qXHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQ6YGRpdi1ib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gLCBcclxuICAgICAgICBhdHRyOidlc3RhLWluaGFiaWxpdGFkYScsIFxyXG4gICAgICAgIC8vIGZ1bjogKHI6UmVzcHVlc3Rhcyk9PmhhYmlsaXRhZG9yKHIpPydTSSc6J05PJ1xyXG4gICAgICAgIGZ1bjogKF9yOlJlc3B1ZXN0YXMpPT4nTk8nXHJcbiAgICB9KTtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvPEhUTUxCdXR0b25FbGVtZW50Pih7XHJcbiAgICAgICAgaWQ6YGJvdG9uLWZvcm11bGFyaW8tJHtzdWZpam9JZEVsZW1lbnRvfWAsIFxyXG4gICAgICAgIHByb3A6J2Rpc2FibGVkJywgXHJcbiAgICAgICAgLy8gZnVuOiAocjpSZXNwdWVzdGFzKT0+IWhhYmlsaXRhZG9yKHIpXHJcbiAgICAgICAgZnVuOiAoX3I6UmVzcHVlc3Rhcyk9PmZhbHNlXHJcbiAgICB9KTtcclxuICAgICovXHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgW2NvbmZpcm1hckZvcnphcklyLCBzZXRDb25maXJtYXJGb3J6YXJJcl0gPSB1c2VTdGF0ZTxEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyIHwgZmFsc2UgfCBudWxsPihudWxsKTtcclxuICAgIHZhciBbY29uZmlybWFjaW9uQm9ycmFkbywgc2V0Q29uZmlybWFjaW9uQm9ycmFkb10gPSB1c2VTdGF0ZTx7ZGVmQm90b246IERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIsIGZvclBrUGFkcmU6IEZvclBrLCBkYXRvczogYW55fSB8IG51bGw+KG51bGwpO1xyXG4gICAgdmFyIFtmcmFzZUJvcnJhZG8sIHNldEZyYXNlQm9ycmFkb10gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICB2YXIgW2Vycm9yRnJhc2VCb3JyYWRvLCBzZXRFcnJvckZyYXNlQm9ycmFkb10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICB2YXIgcGVybWl0ZUJvcnJhckdhYmluZXRlID0gZ2V0RGF0b3NCeVBhc3MoKS5wZXJtaXRlQm9ycmFyRWxlbWVudG9zVUEgPz8gZmFsc2U7XHJcbiAgICB2YXIgcGVkaXJDb25maXJtYWNpb25Cb3JyYWRvID0gKGRlZkJvdG9uOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyLCBmb3JQa1BhZHJlOiBGb3JQaykgPT4ge1xyXG4gICAgICAgIGNvbnN0IHtyZXNwdWVzdGFzfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQa1BhZHJlKVxyXG4gICAgICAgIHZhciBkYXRvc0hpam9zID0gcmVzcHVlc3Rhc1tmb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpc11bKGRlZkJvdG9uLm51bSB8fCAxKSAtIDFdO1xyXG4gICAgICAgIHNldENvbmZpcm1hY2lvbkJvcnJhZG8oeyBkZWZCb3RvbiwgZm9yUGtQYWRyZSwgZGF0b3M6IGRhdG9zSGlqb3MgfSk7XHJcbiAgICAgICAgc2V0RnJhc2VCb3JyYWRvKCcnKTtcclxuICAgICAgICBzZXRFcnJvckZyYXNlQm9ycmFkbyhmYWxzZSk7XHJcbiAgICB9O1xyXG4gICAgdmFyIG11bHRpcGxlRm9ybXVsYXJpb3MgPSBmb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpcyAhPSBwcm9wcy5mb3JtdWxhcmlvLnVuaWRhZF9hbmFsaXNpcztcclxuICAgIHZhciBudWV2b0NhbXBvUGsgPSBkZWZPcGVyYXRpdm8uZGVmVUFbZm9ybXVsYXJpb0FBYnJpci51bmlkYWRfYW5hbGlzaXNdLnBrO1xyXG4gICAgLy8gdmFyIHZhcl9uYW1lPSckQi4nK2Nhc2lsbGVyby5zYWx0bzsgLy9vcmlnaW5hbFxyXG4gICAgdmFyIGlkU2VjY2lvbiA9IGBzZWNjaW9uLWJvdG9uLWZvcm11bGFyaW8tJHtCRl9saXN0b31gO1xyXG4gICAgdmFyIGlkQnV0dG9uID0gYHNwZWNpYWwtYnV0dG9uLSR7aWRTZWNjaW9ufWA7XHJcbiAgICB2YXIgdmFyX25hbWVfcmVnaXN0cm8gPSBtdWx0aXBsZUZvcm11bGFyaW9zID8gQkZfYWdyZWdhciA6IEJGX2xpc3RvO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG88SFRNTERpdkVsZW1lbnQ+KHtcclxuICAgICAgICBpZDogaWRTZWNjaW9uLFxyXG4gICAgICAgIHZhcmlhYmxlOiB2YXJfbmFtZV9yZWdpc3RybyxcclxuICAgICAgICBmb3JQazogZm9yUGssXHJcbiAgICAgICAgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgIGZ1bjogKHJlc3B1ZXN0YXNBdW1lbnRhZGFzOiBSZXNwdWVzdGFzLCBmZWVkYmFja1JvdzogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIGRpdjogSFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgICAgIGZlZWRiYWNrQWxsOiB7XHJcbiAgICAgICAgICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVzdGFkb19saXN0byA9IGZlZWRiYWNrUm93LmZlZWRiYWNrW0JGX2xpc3RvXT8uZXN0YWRvIHx8ICd2YWxpZGEnO1xyXG4gICAgICAgICAgICAgICAgdmFyIGVzdGFkb19hZ3JlZ2FyID0gbXVsdGlwbGVGb3JtdWxhcmlvcyA/IChmZWVkYmFja1Jvdy5mZWVkYmFja1tCRl9hZ3JlZ2FyXT8uZXN0YWRvIHx8ICd2YWxpZGEnKSA6ICd2YWxpZGEnO1xyXG4gICAgICAgICAgICAgICAgdmFyIGVzdGFkb19nZW5lcmFsID0gZXN0YWRvX2FncmVnYXIgIT09ICd2YWxpZGEnID8gZXN0YWRvX2FncmVnYXIgOiBlc3RhZG9fbGlzdG87XHJcbiAgICAgICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZGl2LCAnbnVlc3Ryby12YWxpZGF0b3InLCBlc3RhZG9fZ2VuZXJhbCk7XHJcbiAgICAgICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZGl2LCAndGllbmUtdmFsb3InLCBlc3RhZG9fZ2VuZXJhbCA9PT0gJ3ZhbGlkYScgPyAndmFsaWRvJyA6ICdOTycpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBsaXN0YURlQm90b25lc0FicmlyOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyW10gPSBbXTtcclxuICAgICAgICAgICAgICAgIC8vIHZhciBlc1ZhckFjdHVhbCA9IGZlZWRiYWNrUm93LmFjdHVhbCA9PSAnJEIuRjonK2Nhc2lsbGVyby5zYWx0bzsgIC8vb3JpZ2luYWxcclxuICAgICAgICAgICAgICAgIHZhciBlc1ZhckFjdHVhbCA9ICEhZmVlZGJhY2tSb3cuYWN0dWFsPy5zdGFydHNXaXRoKEJGX2xpc3RvKTtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlIGVzVmFyQWN0dWFsICcgK2VzVmFyQWN0dWFsICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKG11bHRpcGxlRm9ybXVsYXJpb3MgJiYgY2FzaWxsZXJvLnNhbHRvICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgbGV0IGRlZkZvcm11bGFyaW86SW5mb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zWydGOicrY2FzaWxsZXJvLnNhbHRvIGFzIElkRm9ybXVsYXJpb107ICAgICAgLy9vcmlnaW5hbFxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZWZGb3JtdWxhcmlvOiBJbmZvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbaWRGb3JtdWxhcmlvRGVzdGlub107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlZlVBID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1tkZWZGb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzIV07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmp1bnRvID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbZGVmRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYW50aWRhZEVzcGVyYWRhID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgYXMgSWRWYXJpYWJsZV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG51bUFjdHVhbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gIHZhciBlc3RhZG9EZWxCb3RvbiA9IGZlZWRiYWNrUm93LmZlZWRiYWNrWyckQi5GOicrY2FzaWxsZXJvLnNhbHRvIGFzIElkVmFyaWFibGVdLmVzdGFkbyAgIC8vb3JpZ2luYWxcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXN0YWRvRGVsQm90b24gPSBmZWVkYmFja1Jvdy5mZWVkYmFja1tCRl9saXN0b10uZXN0YWRvXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0JvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUgZXN0YWRvRGVsQm90b24gJyArZXN0YWRvRGVsQm90b24gICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyA/IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSldIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gPSBlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyID0gbGlrZUFyKGNvbmp1bnRvKS5tYXAoKF8sIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG51bTogbnVtYmVyID0gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KGksIGNvbmp1bnRvKSBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JQayA9IHsgLi4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86IGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIFtudWV2b0NhbXBvUGtdOiBudW0gfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1Ibm9zID0gYnVzY2FySG5vc0Zvcm11bGFyaW8oaWRGb3JtdWxhcmlvRGVzdGlubylcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZlZWRiYWNrID0gZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKGZvclBrKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1BY3R1YWwgPT0gbnVsbCAmJiBmZWVkYmFjay5yZXN1bWVuID09IFwidmFjaW9cIiAmJiBlc3RhZG9EZWxCb3RvbiA9PSAndmFsaWRhJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQWN0dWFsID0gbnVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZW46IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGNhbGN1bGFyQWN0dWFsQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgbnVtLCBudW1BY3R1YWwsIGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzogbnVtQWN0dWFsID09IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXRlQm9ycmFyOiBsaWtlQXIoY29uanVudG8pLmFycmF5KCkubGVuZ3RoID09IE51bWJlcihpKSArIDEgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0Zvcm1zVmFjaW9zKGZvcm1Ibm9zLCBmZWVkYmFja0FsbCwgZm9yUGspICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaWRGb3JtdWxhcmlvRGVzdGlubyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXRlQm9ycmFyR2FiaW5ldGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogY2FsY3VsYXJEaXNhYmxlZEJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbywgbnVtLCBpZEZvcm11bGFyaW9EZXN0aW5vLCByZXNwdWVzdGFzQXVtZW50YWRhcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pLmFycmF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRydWUgLypcInB1ZWRlIGFncmVnYXIgLy9UT0RPIFZFUiBFU1RPXCIqLyAmJiAoY29uanVudG8gaW5zdGFuY2VvZiBBcnJheSB8fCBjb25qdW50byA9PSBudWxsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbnVldm9WYWxvclBrID0gKGNvbmp1bnRvID09IG51bGwgPyAwIDogY29uanVudG8ubGVuZ3RoKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JQayA9IHsgLi4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86IGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIFtudWV2b0NhbXBvUGtdOiBudWV2b1ZhbG9yUGsgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpc3RvUHJlc2lvbmFkbyA9IHJlc3B1ZXN0YXNBdW1lbnRhZGFzW0JGX2xpc3RvXSAhPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGViZUFncmVnYXJPbGlzdG8gPSBudW1BY3R1YWwgPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FudGlkYWRFc3BlcmFkYSA9PSBudWxsIHx8IGNhbnRpZGFkRXNwZXJhZGEgIT0gKGNvbmp1bnRvICE9IG51bGwgJiYgY29uanVudG8ubGVuZ3RoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICFsaXN0b1ByZXNpb25hZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgJiYgKGVzdGFkb0RlbEJvdG9uID09ICd2YWxpZGEnIHx8IGVzVmFyQWN0dWFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtOiBudWV2b1ZhbG9yUGssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc0FncmVnYXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGRlYmVBZ3JlZ2FyT2xpc3RvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8oY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBpZEZvcm11bGFyaW9EZXN0aW5vKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtOiBudWV2b1ZhbG9yUGsgLSAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNDb25maXJtYXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGRlYmVBZ3JlZ2FyT2xpc3RvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8oY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBpZEZvcm11bGFyaW9EZXN0aW5vKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmb3JQayA9IHsgLi4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86IGlkRm9ybXVsYXJpb0Rlc3Rpbm8gfTtcclxuICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyID0gW3sgZm9yUGssIG51bTogZmFsc2UsIHVuaWNvOiB0cnVlLCBhY3R1YWw6IGVzVmFyQWN0dWFsLCBwcmV2aW86IHRydWUgfV1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciB0b2Rvc0xvc0JvdG9uZXMgPSBsaXN0YURlQm90b25lc0FicmlyLm1hcChkZWZCb3RvbiA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGJvdG9uRm9ybXVsYXJpb0NvblJlc3VtZW4oZGVmQm90b24sIGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhkZWZCb3Rvbi5mb3JQayldID8/IHsgcmVzdW1lbjogJ3ZhY2lvJyB9LCByZXNwdWVzdGFzQXVtZW50YWRhcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLCBwcm9wcy5mb3JQaywgaWRCdXR0b24sIGZvcm11bGFyaW9BQWJyaXIsIHBlZGlyQ29uZmlybWFjaW9uQm9ycmFkb1xyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIGxldCBub21icmVzQ2FtcG9zUmVzdW1lbiA9IGxpa2VBcigoY2FzaWxsZXJvLmVzcGVjaWFsPy5jYW1wb3NSZXN1bWVuIHx8IFtdKSkuYXJyYXkoKS5tYXAoYyA9PiBjKTtcclxuICAgICAgICAgICAgICAgIHZhciBodG1sU2VjY2lvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkU2VjY2lvbikhO1xyXG4gICAgICAgICAgICAgICAgaHRtbFNlY2Npb24uaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIGh0bWxTZWNjaW9uLmFwcGVuZENoaWxkKGh0bWwudGFibGUoeyBjbGFzczogYHRhYmxlIHRhYmxlLXN0cmlwZWQgJHtub21icmVzQ2FtcG9zUmVzdW1lbi5sZW5ndGggPyAndy1hdXRvJyA6ICcnfWAgfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwudGhlYWQoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLnRyKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby5hY2xhcmFjaW9uID8gaHRtbC50aCgpIDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwudGgoY2FzaWxsZXJvLm5vbWJyZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ub21icmVzQ2FtcG9zUmVzdW1lbi5tYXAoKG5vbWJyZUNhbXBvKSA9PiBodG1sLnRoKG5vbWJyZUNhbXBvIGFzIHN0cmluZykpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwudGJvZHkoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50b2Rvc0xvc0JvdG9uZXNcclxuICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgXSkuY3JlYXRlKCkpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IHVuZXhwZWN0ZWQoZXJyKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZW50cmEgYWwgY2F0Y2hcIilcclxuICAgICAgICAgICAgICAgIGRpdi50ZXh0Q29udGVudCA9ICdlc3RvLCBGQUxMw4kgJyArIGVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGlyID0gKGRlZkJvdG9uOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyKSA9PiB7XHJcbiAgICAgICAgaWYgKCFjYXNpbGxlcm8uc2FsdG8pIHtcclxuICAgICAgICAgICAgb3BjaW9uZXMubW9kb0RpcmVjdG8gP1xyXG4gICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuVk9MVkVSX0hEUih7fSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBudWV2YUZvclBrID0geyAuLi5mb3JQaywgZm9ybXVsYXJpbzogaWRGb3JtdWxhcmlvRGVzdGlubyB9O1xyXG4gICAgICAgICAgICB2YXIgeyBsaXN0bzogQkZfbGlzdG8sIGFncmVnYXI6IEJGX2FncmVnYXIgfSA9IGdldEJGVmFyTmFtZXMoY2FzaWxsZXJvLnNhbHRvKTtcclxuICAgICAgICAgICAgaWYgKG11bHRpcGxlRm9ybXVsYXJpb3MpIHtcclxuICAgICAgICAgICAgICAgIChudWV2YUZvclBrIGFzIGFueSlbbnVldm9DYW1wb1BrXSA9IGRlZkJvdG9uLm51bVxyXG4gICAgICAgICAgICAgICAgaWYgKGRlZkJvdG9uLmVzQWdyZWdhcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8sIHsgZm9yUGs6IG51ZXZhRm9yUGsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IHByb3BzLmZvclBrLCB2YXJpYWJsZTogQkZfYWdyZWdhciwgcmVzcHVlc3RhOiAxIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBwcm9wcy5mb3JQaywgdmFyaWFibGU6IEJGX2xpc3RvLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IHByb3BzLmZvclBrLCB2YXJpYWJsZTogY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgYXMgSWRWYXJpYWJsZSwgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWJyaXJfZm9ybXVsYXJpbywgeyBmb3JQazogbnVldmFGb3JQayB9KTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBTaSBhYnJvIHVubyBleGlzdGVudGUsIHRhbWJpw6luIHJlc2V0ZW8gZWwgbGlzdG8gcGFyYSBmb3J6YXIgcXVlIHZ1ZWx2YW4gYSBhcHJldGFybG8gc2kgY2FtYmlhbiBhbGdvXHJcbiAgICAgICAgICAgICAgICAgICAgLy9kaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiBCRl9saXN0bywgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiBCRl9saXN0bywgcmVzcHVlc3RhOiAxIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNBTUJJQVJfRk9STVVMQVJJTyh7IGZvclBrOiBudWV2YUZvclBrLCBhcGlsYXJWdWVsdGE6IHRydWUgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29uZmlybWFyRm9yemFySXIpIHsgc2V0Q29uZmlybWFyRm9yemFySXIoZmFsc2UpIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBjYXNpbGxlcm89e2Nhc2lsbGVyb30+XHJcbiAgICAgICAge211bHRpcGxlRm9ybXVsYXJpb3MgJiYgPHNwYW4gaWQ9eyd2YXItJyArIEJGX2FncmVnYXJ9IHN0eWxlPXt7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBtYXJnaW5Ub3A6ICctNjBweCcgfX0+PC9zcGFuPn1cclxuICAgICAgICA8c3BhbiBpZD17J3Zhci0nICsgQkZfbGlzdG99IHN0eWxlPXt7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBtYXJnaW5Ub3A6ICctNjBweCcgfX0+PC9zcGFuPlxyXG4gICAgICAgIDxkaXYgaWQ9e2lkU2VjY2lvbn0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJzcGVjaWFsLWJ1dHRvblwiIGlkPXtpZEJ1dHRvbn1cclxuICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpcihKU09OLnBhcnNlKChldmVudC50YXJnZXQhIGFzIHVua25vd24gYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLmdldEF0dHJpYnV0ZSgnZGVmLWJ1dHRvbicpISkpXHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPmlyIChpbnRlcm5vKTwvQnV0dG9uPlxyXG4gICAgICAgIDxEaWFsb2dcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibnVlc3Ryby1kaWFsb2dvXCJcclxuICAgICAgICAgICAgb3Blbj17ISFjb25maXJtYXJGb3J6YXJJcn1cclxuICAgICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0Q29uZmlybWFyRm9yemFySXIobnVsbCl9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm51ZXN0cm8tZGlhbG9nb1wiPlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+Tm8gc2UgcHVlZGUgYXZhbnphciBhbCBzaWd1aWVudGUgZm9ybXVsYXJpby48L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5RdWl6w6FzIG5vIHRlcm1pbsOzIGRlIGNvbnRlc3RhciBsYXMgcHJlZ3VudGFzIGNvcnJlc3BvbmRpZW50ZXM8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5RdWl6w6FzIG5vIGNvcnJlc3BvbmRlIGVuIGJhc2UgYSBsYXMgcmVzcHVlc3RhcyBvYnRlbmlkYXM8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwic2Vjb25kYXJ5XCIgb25DbGljaz17KCkgPT4gY29uZmlybWFyRm9yemFySXIgJiYgaXIoY29uZmlybWFyRm9yemFySXIpfT5mb3J6YXI8L0J1dHRvbj5cclxuICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB2YXJpYW50PVwiY29udGFpbmVkXCIgb25DbGljaz17KCkgPT4gc2V0Q29uZmlybWFyRm9yemFySXIobnVsbCl9PkVudGVuZGlkbzwvQnV0dG9uPlxyXG4gICAgICAgIDwvRGlhbG9nPlxyXG4gICAgICAgIHtjb25maXJtYWNpb25Cb3JyYWRvICYmIChcclxuICAgICAgICAgICAgPERpYWxvZyBvcGVuPXt0cnVlfSBvbkNsb3NlPXsoKSA9PiB7IFxyXG4gICAgICAgICAgICAgICAgc2V0Q29uZmlybWFjaW9uQm9ycmFkbyhudWxsKTsgXHJcbiAgICAgICAgICAgICAgICBzZXRGcmFzZUJvcnJhZG8oJycpOyBcclxuICAgICAgICAgICAgICAgIHNldEVycm9yRnJhc2VCb3JyYWRvKGZhbHNlKTsgXHJcbiAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgPERpYWxvZ1RpdGxlPkFkdmVydGVuY2lhOiBTZSBwZXJkZXLDoW4gZGF0b3M8L0RpYWxvZ1RpdGxlPlxyXG4gICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7YEVzdMOhIHBvciBib3JyYXIgZWwgZm9ybXVsYXJpbyAke2NvbmZpcm1hY2lvbkJvcnJhZG8uZGVmQm90b24uZm9yUGsuZm9ybXVsYXJpb30gKCR7ZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1tlc3RydWN0dXJhLmZvcm11bGFyaW9zW2NvbmZpcm1hY2lvbkJvcnJhZG8uZGVmQm90b24uZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXNdLnBrX2FncmVnYWRhfTogJHtjb25maXJtYWNpb25Cb3JyYWRvLmRlZkJvdG9uLm51bX0pLiBMb3MgZGF0b3MgZGVsIG1pc21vIHkgdG9kb3Mgc3VzIHJlZ2lzdHJvcyBhc29jaWFkb3Mgc2UgcGVyZGVyw6FuLiDCv0Rlc2VhIGNvbnRpbnVhcj9gfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudFRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcyMHB4JywgbWFyZ2luQm90dG9tOiAnMjBweCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50VGV4dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmEgY29uZmlybWFyIGVsIGJvcnJhZG8sIGVzY3JpYmEgbGEgZnJhc2UgPHN0cm9uZz5cImZvcnphciBib3JyYWRvXCI8L3N0cm9uZz4gYSBjb250aW51YWNpw7NuOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImlucHV0LWZvcnphci1ib3JyYWRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZnJhc2VCb3JyYWRvfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRGcmFzZUJvcnJhZG8oZS50YXJnZXQudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yRnJhc2VCb3JyYWRvKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3t3aWR0aDogJzEwMCUnLCBwYWRkaW5nOiAnOHB4JywgYm9yZGVyOiBlcnJvckZyYXNlQm9ycmFkbyA/ICcxcHggc29saWQgcmVkJyA6ICcxcHggc29saWQgI2NjYycsIGJvcmRlclJhZGl1czogJzRweCd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmb3J6YXIgYm9ycmFkb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7ZXJyb3JGcmFzZUJvcnJhZG8gJiYgPGRpdiBzdHlsZT17e2NvbG9yOiAncmVkJywgbWFyZ2luVG9wOiAnNXB4JywgZm9udFNpemU6ICcwLjg1ZW0nfX0+TGEgZnJhc2UgaW5ncmVzYWRhIGVzIGluY29ycmVjdGEuPC9kaXY+fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwiaDZcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxMHB4JywgZm9udFdlaWdodDogJ2JvbGQnIH19PkRhdG9zIHF1ZSBzZSBwZXJkZXLDoW46PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWF4V2lkdGg6ICc2MDBweCcsIG1hcmdpbjogJzAgYXV0bycsIGZvbnRGYW1pbHk6ICdzYW5zLXNlcmlmJyB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFJlbmRlcml6YWRvckpTT04gZGF0b3M9e2NvbmZpcm1hY2lvbkJvcnJhZG8uZGF0b3N9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8RGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25maXJtYWNpb25Cb3JyYWRvKG51bGwpOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEZyYXNlQm9ycmFkbygnJyk7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3JGcmFzZUJvcnJhZG8oZmFsc2UpOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbGFyXHJcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInNlY29uZGFyeVwiIHZhcmlhbnQ9XCJjb250YWluZWRcIiBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZmlybWFjaW9uQm9ycmFkbykgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyYXNlQm9ycmFkby50cmltKCkudG9Mb3dlckNhc2UoKSAhPT0gXCJmb3J6YXIgYm9ycmFkb1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvckZyYXNlQm9ycmFkbyh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0LWZvcnphci1ib3JyYWRvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7ZGVmQm90b24sIGZvclBrUGFkcmV9ID0gY29uZmlybWFjaW9uQm9ycmFkbztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9yUGsgPSBkZWZCb3Rvbi5mb3JQaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjaW9uX2JvcnJhcl9mb3JtdWxhcmlvKHsgZm9yUGssIGZvclBrUGFkcmUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGlzdG8sIGFncmVnYXIgfSA9IGdldEJGVmFyTmFtZXMoY2FzaWxsZXJvLnNhbHRvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlZkJvdG9uLm51bSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBhZ3JlZ2FyLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogZm9yUGtQYWRyZSwgdmFyaWFibGU6IGxpc3RvLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogZm9yUGtQYWRyZSwgdmFyaWFibGU6IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyIGFzIElkVmFyaWFibGUsIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmZpcm1hY2lvbkJvcnJhZG8obnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZyYXNlQm9ycmFkbygnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yRnJhc2VCb3JyYWRvKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9fT5Cb3JyYXIgZGUgdG9kYXMgZm9ybWFzPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L0RpYWxvZ0FjdGlvbnM+XHJcbiAgICAgICAgICAgIDwvRGlhbG9nPlxyXG4gICAgICAgICl9XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxuZnVuY3Rpb24gQ2FzaWxsZXJvRGVzY29ub2NpZG8ocHJvcHM6IHsgY2FzaWxsZXJvOiBDYXNpbGxlcm9CYXNlLCBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm9cclxuICAgICAgICBpZD17YGNhc2lsbGVyb2Rlc2Nvbm9jaWRvLSR7cHJvcHMuY2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gfVxyXG4gICAgICAgIGNhc2lsbGVybz17cHJvcHMuY2FzaWxsZXJvIGFzIEJsb3F1ZX1cclxuICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cclxuICAgID5cclxuICAgICAgICA8VHlwb2dyYXBoeT5UaXBvIGRlIGNhc2lsbGVybyBubyBpbXBsZW1lbnRhZG86IFwie3Byb3BzLmNhc2lsbGVyby50aXBvY31cIiBwYXJhIFwie3Byb3BzLmNhc2lsbGVyby5jYXNpbGxlcm99XCI8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17cHJvcHMuY2FzaWxsZXJvIGFzIENhc2lsbGVyb0VuY2FiZXphYmxlfSBsZWVyPXtmYWxzZX0gZm9yUGs9e3Byb3BzLmZvclBrfSAvPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGs6IEZvclBrKSB7XHJcbiAgICByZXR1cm4gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+IHtcclxuICAgICAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmb3JtdWxhcmlvOiBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MsXHJcbiAgICAgICAgICAgIG1vZG9EZXNwbGllZ3VlOiB0cnVlIHx8IHN0YXRlLm1vZG8uZGVtbyA/IHN0YXRlLm9wY2lvbmVzLm1vZG9EZXNwbGllZ3VlIDogJ3JlbGV2YW1pZW50bycsXHJcbiAgICAgICAgICAgIG1vZG86IHN0YXRlLm1vZG8sXHJcbiAgICAgICAgICAgIG9wY2lvbmVzOiBzdGF0ZS5vcGNpb25lcyxcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG59XHJcblxyXG5mdW5jdGlvbiBDb25qdW50b1ByZWd1bnRhc0Rlc3BsaWVndWUocHJvcHM6IHsgY2FzaWxsZXJvOiBDb25qdW50b1ByZWd1bnRhcywgZm9ybXVsYXJpbzogRm9ybXVsYXJpbywgZm9yUGs6IEZvclBrIH0pIHtcclxuICAgIGxldCB7IGNhc2lsbGVybywgZm9yUGsgfSA9IHByb3BzO1xyXG4gICAgdmFyIGlkID0gYGNvbmp1bnRvLXByZWd1bnRhcy0ke2Nhc2lsbGVyby5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZCxcclxuICAgICAgICBkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgZnVuOiByZWdpc3RyYWRvckRlVmFyaWFibGUoY2FzaWxsZXJvKVxyXG4gICAgfSlcclxuICAgIGxldCBtb2RvRGVzcGxpZWd1ZSA9IFwibm9ybWFsXCI7XHJcbiAgICBsZXQgaGFiaWxpdGFkbyA9IHRydWU7XHJcbiAgICByZXR1cm4gaGFiaWxpdGFkbyB8fCBtb2RvRGVzcGxpZWd1ZSA9PSAnbWV0YWRhdG9zJyA/IDxEZXNwbGVnYXJDYXNpbGxlcm8gaWQ9e2lkfSBjYXNpbGxlcm89e2Nhc2lsbGVyb30+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17Zm9yUGt9IGxlZXI9e2Nhc2lsbGVyby5sZWVyICE9PSBmYWxzZX0gLz5cclxuICAgICAgICA8RGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvIGJsb3F1ZU9Gb3JtdWxhcmlvPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtmb3JQa30gbXVsdGlwbGU9e2ZhbHNlfSAvPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+IDogbnVsbDtcclxufVxyXG5cclxuZnVuY3Rpb24gRGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvKHByb3BzOiB7IGJsb3F1ZU9Gb3JtdWxhcmlvOiBCbG9xdWUgfCBGb3JtdWxhcmlvIHwgQ29uanVudG9QcmVndW50YXMsIGZvcm11bGFyaW86IEZvcm11bGFyaW8sIGZvclBrOiBGb3JQaywgbXVsdGlwbGU6IGJvb2xlYW4gfSkge1xyXG4gICAgdmFyIHBhcmNpYWxpemFibGUgPSBwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby50aXBvYyA9PSAnRic7XHJcbiAgICBjb25zdCBbdmVyVG9kbywgc2V0VmVyVG9kb10gPSB1c2VTdGF0ZSghcGFyY2lhbGl6YWJsZSk7XHJcbiAgICBjb25zdCBbZm9yUGtBY3R1YWwsIHNldEZvclBrQWN0dWFsXSA9IHVzZVN0YXRlPElkQ2FzaWxsZXJvIHwgbnVsbD4obnVsbCk7XHJcbiAgICBpZiAocGFyY2lhbGl6YWJsZSkge1xyXG4gICAgICAgIGlmIChmb3JQa0FjdHVhbCAhPSBwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby5jYXNpbGxlcm8pIHtcclxuICAgICAgICAgICAgc2V0VmVyVG9kbyhmYWxzZSlcclxuICAgICAgICAgICAgc2V0Rm9yUGtBY3R1YWwocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8uY2FzaWxsZXJvKVxyXG4gICAgICAgIH1cclxuICAgICAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHNldFZlclRvZG8odHJ1ZSk7XHJcbiAgICAgICAgICAgIH0sIDI1MClcclxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgY29uc3QgbGltaXRlTm9WZXJUb2RvID0gMztcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jID09ICdGJykge1xyXG4gICAgICAgICAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKHByb3BzLmZvclBrKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbdG9QbGFpbkZvclBrKHByb3BzLmZvclBrKSwgdmVyVG9kb10pXHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmIChwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby50aXBvYyA9PSAnRicgJiYgdmVyVG9kbykge1xyXG4gICAgICAgICAgICB2YXIgeyBzaWd1aWVudGVWYXJpYWJsZSwgdmFyaWFibGVBY3R1YWwgfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IHJlc3B1ZXN0YTogbnVsbCwgdmFyaWFibGU6IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTLCBmb3JQazogcHJvcHMuZm9yUGsgfSk7XHJcbiAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjdHVhbCB8fCBzaWd1aWVudGVWYXJpYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShjb2FsZXNjZSh2YXJpYWJsZUFjdHVhbCBhcyBzdHJpbmcgfCBudWxsLCBzaWd1aWVudGVWYXJpYWJsZSBhcyBzdHJpbmcgfCBudWxsKSBhcyBJZFZhcmlhYmxlKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZlZWRiYWNrUm93VmFsaWRhdG9yID0gZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IoKVxyXG4gICAgICAgICAgICAgICAgaWYgKGZlZWRiYWNrUm93VmFsaWRhdG9yW3RvUGxhaW5Gb3JQayhwcm9wcy5mb3JQayldLnJlc3VtZW4gPT0gJ29rJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvVG9wKClcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9Ub3AoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJjb250ZW5pZG9cIj5cclxuICAgICAgICB7dmVyVG9kbyA/IG51bGwgOiA8ZGl2IHN0eWxlPXt7IGhlaWdodDogXCI1MDBweFwiLCB0ZXh0QWxpZ246ICdjZW50ZXInLCB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJywgd2lkdGg6ICcxMDAlJywgcG9zaXRpb246IFwiZml4ZWRcIiwgYmFja2dyb3VuZENvbG9yOiAncmdiYSgxMDAsMTAwLDEwMCwwLjMpJywgZm9udFNpemU6ICcyMDAlJyB9fSA+Y2FyZ2FuZG8uLi48L2Rpdj59XHJcbiAgICAgICAge3Byb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MubWFwKChjYXNpbGxlcm8sIGkpID0+IHtcclxuICAgICAgICAgICAgdmFyIGtleSA9IGNhc2lsbGVyby50aXBvYyArICctJyArIGNhc2lsbGVyby5pZF9jYXNpbGxlcm8gKyAnLScgKyBpO1xyXG4gICAgICAgICAgICByZXR1cm4gKHZlclRvZG8gfHwgaSA8IGxpbWl0ZU5vVmVyVG9kbyA/XHJcbiAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiUFwiID8gPFByZWd1bnRhRGVzcGxpZWd1ZSBrZXk9e2tleX0gcHJlZ3VudGE9e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfSBkZXNwbGllZ3VlRW5jYWJlemFkbz17Y2FzaWxsZXJvLmRlc3BsaWVndWVFbmNhYmV6YWRvID8/IChwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby50aXBvYyA9PSAnQ1AnID8gJ2xhdGVyYWwnIDogJ3N1cGVyaW9yJyl9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiQlwiID8gPEJsb3F1ZURlc3BsaWVndWUga2V5PXtrZXl9IGJsb3F1ZT17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkZJTFRST1wiID8gPEZpbHRyb0Rlc3BsaWVndWUga2V5PXtrZXl9IGZpbHRybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJCRlwiID8gPEJvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiQ09OU1wiID8gPENvbnNpc3RlbmNpYURlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkNQXCIgPyA8Q29uanVudG9QcmVndW50YXNEZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e3Byb3BzLmZvclBrfSAvPiA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiVEVYVE9cIiA/IDxUZXh0b0Rlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiUE1BVFJJWlwiID8gPFBNYXRyaXpEZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfSAvPiA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJMSUJSRVwiID8gPExpYnJlRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDYXNpbGxlcm9EZXNjb25vY2lkbyBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30gLz5cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIDogaSA9PSBsaW1pdGVOb1ZlclRvZG8gP1xyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PSckc3Bpbm5lcicgY2xhc3NOYW1lPVwic3Bpbm5lci1ib3JkZXJcIiByb2xlPVwic3RhdHVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPmNhcmdhbmRvIGJsb3F1ZS4uLjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA6IG51bGxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgfTwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBCbG9xdWVEZXNwbGllZ3VlKHByb3BzOiB7IGJsb3F1ZTogQmxvcXVlLCBmb3JtdWxhcmlvOiBGb3JtdWxhcmlvLCBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgdmFyIHsgYmxvcXVlLCBmb3JQayB9ID0gcHJvcHM7XHJcbiAgICB2YXIga2V5ID0gYmxvcXVlLnZlcl9pZCAhPSAnLScgJiYgYmxvcXVlLnZlcl9pZCB8fCBibG9xdWUuY2FzaWxsZXJvO1xyXG4gICAgdmFyIGFjdGl2ZVN0ZXAgPSAwO1xyXG4gICAgdmFyIG11bHRpcGxlID0gISFibG9xdWUudW5pZGFkX2FuYWxpc2lzO1xyXG4gICAgdmFyIGxpc3RhID0gW3sgZm9yUGssIGtleTogMCwgbXVsdGlwbGU6IGZhbHNlIH1dO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gYmxvcXVlLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPyBnZXRGdW5jaW9uSGFiaWxpdGFyKGJsb3F1ZS5leHByZXNpb25faGFiaWxpdGFyX2pzKSA6ICgpID0+IHRydWU7XHJcbiAgICB2YXIgeyBtb2RvRGVzcGxpZWd1ZSB9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICBpZiAobXVsdGlwbGUpIHtcclxuICAgICAgICAvLyBUT0RPOiBHRU5FUkFMSVpBUlxyXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgXHJcbiAgICAgICAgLy8gbGlzdGE9cmVzcHVlc3Rhcy5wZXJzb25hcy5tYXAoKF9wZXJzb25hLCBpKT0+KFxyXG4gICAgICAgIC8vICAgICB7Zm9yUGs6ey4uLmZvclBrLCBwZXJzb25hOmkrMX0sIGtleTppKzEsIG11bHRpcGxlOnRydWV9XHJcbiAgICAgICAgLy8gKSlcclxuICAgIH1cclxuICAgIHZhciBpZCA9IGBibG9xdWUtJHtibG9xdWUuaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsXHJcbiAgICAgICAgc3R5bGU6ICdkaXNwbGF5JyxcclxuICAgICAgICBmdW46IChyZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiBoYWJpbGl0YWRvcihyZXNwdWVzdGFzKSB8fCBtb2RvRGVzcGxpZWd1ZSA9PSAnbWV0YWRhdG9zJyA/ICd1bnNldCcgOiAnbm9uZSdcclxuICAgIH0pXHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBjYXNpbGxlcm89e2Jsb3F1ZX0gbnVlc3Ryby1ibG9xdWU9e2Jsb3F1ZS5pZF9jYXNpbGxlcm99IGVzLW11bHRpcGxlPXttdWx0aXBsZSA/ICdTSScgOiAnTk8nfSBpZD17aWR9PlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Jsb3F1ZX0gZm9yUGs9e2ZvclBrfSAvPlxyXG4gICAgICAgIHtsaXN0YS5tYXAoKHsga2V5LCBmb3JQaywgbXVsdGlwbGUgfSkgPT5cclxuICAgICAgICAgICAgPERlc3BsZWdhckNvbnRlbmlkb0ludGVybm9CbG9xdWVPRm9ybXVsYXJpbyBrZXk9e2tleX0gYmxvcXVlT0Zvcm11bGFyaW89e2Jsb3F1ZX0gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e2ZvclBrfSBtdWx0aXBsZT17bXVsdGlwbGV9IC8+XHJcbiAgICAgICAgKX1cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPjtcclxufVxyXG5cclxuY29uc3QgRm9ybXVsYXJpb0VuY2FiZXphZG8gPSBEZXNwbGllZ3VlRW5jYWJlemFkbztcclxuXHJcbmZ1bmN0aW9uIE1lbnVMZXRyYShwcm9wczogeyB0YW1hbm5pbzogbnVtYmVyLCBkZW5vbWluYWNpb246IHN0cmluZyB9KSB7XHJcbiAgICBjb25zdCBjYW1iaWFyTGV0cmEgPSAodGFtYW5uaW86IG51bWJlcikgPT4ge1xyXG4gICAgICAgIHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xyXG4gICAgICAgIHJvb3Quc3R5bGUuZm9udFNpemUgPSB0YW1hbm5pbyArIFwicHhcIjtcclxuICAgIH1cclxuICAgIHJldHVybiA8TWVudUl0ZW1cclxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBjYW1iaWFyTGV0cmEocHJvcHMudGFtYW5uaW8pfSBzdHlsZT17eyBmb250U2l6ZTogcHJvcHMudGFtYW5uaW8gKyAncHgnIH19XHJcbiAgICA+bGV0cmEge3Byb3BzLmRlbm9taW5hY2lvbn08L01lbnVJdGVtPlxyXG59XHJcblxyXG5mdW5jdGlvbiBGYXN0U2V0dHVwKCkge1xyXG4gICAgY29uc3QgW2FuY2hvckVsLCBzZXRBbmNob3JFbF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IGhhbmRsZUNsaWNrID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICBzZXRBbmNob3JFbChldmVudC5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBzZXRPcGVuKChwcmV2KSA9PiAhcHJldik7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgY2FtYmlhciA9IChtb2RvRGVzcGxpZWd1ZTogTW9kb0Rlc3BsaWVndWUpID0+IHtcclxuICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5NT0RPX0RFU1BMSUVHVUUoeyBtb2RvRGVzcGxpZWd1ZSB9KSk7XHJcbiAgICAgICAgc2V0T3BlbihmYWxzZSlcclxuICAgIH1cclxuICAgIGNvbnN0IG9wY2lvbmVzID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+IHN0YXRlLm9wY2lvbmVzKVxyXG4gICAgcmV0dXJuIDw+XHJcbiAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVDbGlja30+XHJcbiAgICAgICAgICAgIDxJQ09OLlNldHRpbmdzIC8+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgPE1lbnUgb3Blbj17b3Blbn0gYW5jaG9yRWw9e2FuY2hvckVsfSBvbkNsb3NlPXsoKSA9PiBzZXRPcGVuKGZhbHNlKX0+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbSBvbkNsaWNrPXsoKSA9PiBjYW1iaWFyKFwicmVsZXZhbWllbnRvXCIpfT5ub3JtYWw8L01lbnVJdGVtPlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0gb25DbGljaz17KCkgPT4gY2FtYmlhcihcIlBERlwiKX0+UERGIHBhcmEgcmVsZXZhbWllbnRvPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtIG9uQ2xpY2s9eygpID0+IGNhbWJpYXIoXCJtZXRhZGF0b3NcIil9PnJldmlzYXIgbWV0YWRhdG9zPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPERpdmlkZXIgLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTJ9IGRlbm9taW5hY2lvbj1cIm11eSBjaGljYVwiIC8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezE0fSBkZW5vbWluYWNpb249XCJjaGljYVwiIC8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezE2fSBkZW5vbWluYWNpb249XCJub3JtYWxcIiAvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsxOX0gZGVub21pbmFjaW9uPVwiZ3JhbmRlXCIgLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MjJ9IGRlbm9taW5hY2lvbj1cImVub3JtZVwiIC8+XHJcbiAgICAgICAgICAgIDxEaXZpZGVyIC8+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbT48bGFiZWw+PENoZWNrYm94IGNoZWNrZWQ9e29wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXN9IG9uQ2hhbmdlPXtcclxuICAgICAgICAgICAgICAgICgpID0+IGRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oeyBvcGNpb246ICdjb25DYW1wb09wY2lvbmVzJywgdmFsb3I6ICFvcGNpb25lcy5jb25DYW1wb09wY2lvbmVzIH0pKVxyXG4gICAgICAgICAgICB9IGlucHV0UHJvcHM9e3sgJ2FyaWEtbGFiZWwnOiAncHJpbWFyeSBjaGVja2JveCcgfX0gLz5jYW1wbyBvcGNpb25lczwvbGFiZWw+PC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtPjxsYWJlbD48Q2hlY2tib3ggY2hlY2tlZD17b3BjaW9uZXMuc2FsdG9BdXRvbWF0aWNvfSBvbkNoYW5nZT17XHJcbiAgICAgICAgICAgICAgICAoKSA9PiBkaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHsgb3BjaW9uOiAnc2FsdG9BdXRvbWF0aWNvJywgdmFsb3I6ICFvcGNpb25lcy5zYWx0b0F1dG9tYXRpY28gfSkpXHJcbiAgICAgICAgICAgIH0gaW5wdXRQcm9wcz17eyAnYXJpYS1sYWJlbCc6ICdwcmltYXJ5IGNoZWNrYm94JyB9fSAvPnNhbHRvIGF1dG9tw6F0aWNvPC9sYWJlbD48L01lbnVJdGVtPlxyXG4gICAgICAgIDwvTWVudT5cclxuICAgIDwvPjtcclxufVxyXG5cclxuZnVuY3Rpb24gQmFycmFEZU5hdmVnYWNpb24ocHJvcHM6IHsgZm9yUGs6IEZvclBrLCBzb2xvTGVjdHVyYTogYm9vbGVhbiwgbW9kb0RpcmVjdG86IGJvb2xlYW4gfSkge1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgZm9yUGsgPSBwcm9wcy5mb3JQaztcclxuICAgIGNvbnN0IHsgb3BjaW9uZXMgfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgY29uc3QgW2NvbmZpcm1hQ2VycmFyLCBzZXRDb25maXJtYUNlcnJhcl0gPSB1c2VTdGF0ZTxib29sZWFuIHwgbnVsbD4oZmFsc2UpO1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICB2YXIgZG9taW5pbyA9IGdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXV0udGVtLmRvbWluaW87XHJcbiAgICB2YXIgY2VycmFyRGlyZWN0byA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZW1vdmVDU1NCeUlkKEJPT1RTVFJBUF81XzFfM19TUkMpO1xyXG4gICAgICAgIGdvdG9Db25zaXN0aXIoXHJcbiAgICAgICAgICAgIGVzdHJ1Y3R1cmEub3BlcmF0aXZvIGFzIElkT3BlcmF0aXZvLFxyXG4gICAgICAgICAgICBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW2ZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF1dLnRhcmVhLnRhcmVhLFxyXG4gICAgICAgICAgICBmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvL3ZhciBoYXNoPW5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uaGFzaD8ucmVwbGFjZSgvXlxcIy8sJycpLnNwbGl0KCcmYXV0b3Byb2NlZCcpWzBdKTtcclxuICAgICAgICAvLy8vaGFzaC5kZWxldGUoJ2F1dG9wcm9jZWQnKVxyXG4gICAgICAgIC8vY2xvc2UoKTtcclxuICAgICAgICAvL2xvY2F0aW9uLmhhc2g9aGFzaC50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgdmFyIGJvdG9uZXNGb3JtdWxhcmlvID0gW107XHJcbiAgICBpZiAoIW9wY2lvbmVzLm1vZG9EaXJlY3RvKSB7XHJcbiAgICAgICAgYm90b25lc0Zvcm11bGFyaW8ucHVzaCh7IHF1ZTogJ2hkcicsIGFicjogJ0hkUicsIGlkOiBJRF9CT1RPTl9WT0xWRVJfSERSLCBsYWJlbDogJ2hvamEgZGUgcnV0YScsIHJldHJvY2VzbzogMCB9KVxyXG4gICAgfVxyXG4gICAgb3BjaW9uZXMucGlsYUZvclBrLmZvckVhY2goKGZvclBrLCBpKSA9PlxyXG4gICAgICAgIGJvdG9uZXNGb3JtdWxhcmlvLnB1c2goeyBxdWU6ICd2b2x2ZXInLCBhYnI6IGZvclBrLmZvcm11bGFyaW8ucmVwbGFjZSgvXkY6LywgJycpLCBsYWJlbDogZm9yUGsuZm9ybXVsYXJpbywgcmV0cm9jZXNvOiBvcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoIC0gaSB9KVxyXG4gICAgKVxyXG4gICAgYm90b25lc0Zvcm11bGFyaW8ucHVzaCh7IHF1ZTogJycsIGFicjogZm9yUGsuZm9ybXVsYXJpby5yZXBsYWNlKC9eRjovLCAnJyksIGxhYmVsOiBmb3JQay5mb3JtdWxhcmlvLCByZXRyb2Nlc286IDAgfSk7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQ6IHByb3BzLm1vZG9EaXJlY3RvID8gSURfQk9UT05fQ0VSUkFSIDogSURfQk9UT05fVk9MVkVSX0hEUiwgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgIGZ1bjogKFxyXG4gICAgICAgICAgICByOiBSZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICBfZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPixcclxuICAgICAgICAgICAgZWxlbWVudG86IEhUTUxEaXZFbGVtZW50LFxyXG4gICAgICAgICAgICBmZWVkYmFja0FsbDogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgICAgICAgICAgX2VzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmFcclxuICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudG8uc2V0QXR0cmlidXRlKCdyZXN1bWVuLWVzdGFkbycsIGNhbGN1bGFyUmVzdW1lblZpdmllbmRhKGZvclBrLCBmZWVkYmFja0FsbCwgcikucmVzdW1lbkVzdGFkbyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxuICAgIHJldHVybiA8PlxyXG4gICAgICAgIDxCdXR0b25Hcm91cCBrZXk9XCJmb3JtdWxhcmlvc1wiIGNsYXNzTmFtZT1cImJhcnJhLW5hdmVnYWNpb25cIiBzb2xvLWxlY3R1cmE9e3Byb3BzLnNvbG9MZWN0dXJhID8gJ3NpJyA6ICdubyd9ID5cclxuICAgICAgICAgICAge2JvdG9uZXNGb3JtdWxhcmlvLm1hcCgoYiwgaSkgPT5cclxuICAgICAgICAgICAgICAgIDxCdXR0b24gY29sb3I9e2IucXVlID09IGZvclBrLmZvcm11bGFyaW8gPyBcInByaW1hcnlcIiA6IFwiaW5oZXJpdFwifSB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkPXtiLmlkfVxyXG4gICAgICAgICAgICAgICAgICAgIGtleT17YCR7aX0tJHtiLnF1ZX0tJHtiLnJldHJvY2Vzb31gfVxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshYi5xdWV9XHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIucXVlID09ICdoZHInID8gZGlzcGF0Y2hlcnMuVk9MVkVSX0hEUih7fSkgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJzLlZPTFZFUl9ERV9GT1JNVUxBUklPKHsgbWFnbml0dWRSZXRyb2Nlc286IGIucmV0cm9jZXNvIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGIucXVlID09ICdoZHInID8gbnVsbCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWJyaXJfZm9ybXVsYXJpbywgeyBmb3JQazogb3BjaW9uZXMucGlsYUZvclBrW29wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGggLSBiLnJldHJvY2Vzb10gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJhYnJcIj57Yi5hYnJ9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImxhYmVsXCI+e2IubGFiZWx9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9CdXR0b25Hcm91cD5cclxuICAgICAgICB7cHJvcHMuc29sb0xlY3R1cmEgPyA8VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJzcGFuXCIgc3R5bGU9e3sgbWFyZ2luOiAnMCAxMHB4JyB9fT4gKFNvbG8gTGVjdHVyYSkgPC9UeXBvZ3JhcGh5PiA6IG51bGx9XHJcbiAgICAgICAge3Byb3BzLm1vZG9EaXJlY3RvID9cclxuICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgIDxCdXR0b25Hcm91cCBrZXk9XCJ2b2x2ZXJfeV9ncmFiYXJcIiBzdHlsZT17eyBtYXJnaW46ICcwIDAgMCAzMHB4JyB9fT5cclxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtJRF9CT1RPTl9DRVJSQVJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2FzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wcy5zb2xvTGVjdHVyYSB8fCAhZ2V0RGlydHkoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnJhckRpcmVjdG8oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlybWFDZXJyYXIodHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLkV4aXRUb0FwcCAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxEaWFsb2dcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3Blbj17ISFjb25maXJtYUNlcnJhcn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9oYWNlIHF1ZSBubyBzZSBjaWVycmUgZWwgbWVuc2FqZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRDb25maXJtYUNlcnJhcihmYWxzZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cImFsZXJ0LWRpYWxvZy10aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJhbGVydC1kaWFsb2ctZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ1RpdGxlIGlkPVwiYWxlcnQtZGlhbG9nLXRpdGxlXCI+Q29uZmlybWUgY2llcnJlIGRlIGVuY3Vlc3RhPC9EaWFsb2dUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudFRleHQgaWQ9XCJhbGVydC1kaWFsb2ctZGVzY3JpcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFc3TDoSBwb3Igc2FsaXIgZGUgbGEgZW5jdWVzdGEsIHNlIHBlcmRlcsOhbiBsb3MgY2FtYmlvcyBubyBndWFyZGFkb3MuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VycmFyRGlyZWN0bygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjYXJ0YXIgY2FtYmlvcyB5IGNlcnJhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25maXJtYUNlcnJhcihmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWFyIGVkaXRhbmRvIGVuY3Vlc3RhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZz5cclxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMuc29sb0xlY3R1cmEgPyBudWxsIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e1wic2F2ZS1idXR0b25cIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RydWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXthc3luYyAoKSA9PiB0cnVlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SUNPTi5TYXZlIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICA6IG51bGx9XHJcbiAgICAgICAgPFR5cG9ncmFwaHkgY2xhc3NOYW1lPVwibW9zdHJhci1mb3JQa1wiIGNvbXBvbmVudD1cInNwYW5cIiBzdHlsZT17eyBtYXJnaW46ICcwIDEwcHgnIH19PlxyXG4gICAgICAgICAgICB7VkVSX0RPTUlOSU8gPyA8ZGl2IGtleT17ZG9taW5pb30+PHNwYW4+ZG9taW5pbzwvc3Bhbj48c3Bhbj57ZG9taW5pb308L3NwYW4+PC9kaXY+IDogJyd9XHJcbiAgICAgICAgICAgIHtsaWtlQXIocHJvcHMuZm9yUGspLmZpbHRlcigoXywgaykgPT4gayAhPSAnZm9ybXVsYXJpbycpLm1hcCgodiwgaykgPT5cclxuICAgICAgICAgICAgICAgIDxkaXYga2V5PXtrfT48c3Bhbj57a308L3NwYW4+PHNwYW4+e3Z9PC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICApLmFycmF5KCl9XHJcbiAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgIDxGYXN0U2V0dHVwIC8+XHJcbiAgICA8Lz5cclxufVxyXG5cclxuZnVuY3Rpb24gQm90b25Wb2x2ZXJFbkRpdih7IGlkIH06IHsgaWQ6IHN0cmluZyB9KSB7XHJcbiAgICB2YXIgeyBvcGNpb25lcyB9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+ICh7IG9wY2lvbmVzOiBzdGF0ZS5vcGNpb25lcyB9KSk7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgZXNWb2x2ZXIgPSBvcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoID4gMDtcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImRpdi1ib3Rvbi12b2x2ZXJcIj5cclxuICAgICAgICA8QnV0dG9uIGlkPXtpZH0gY2xhc3NOYW1lPVwiYm90b24tdm9sdmVyXCJcclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVzVm9sdmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8sIHsgZm9yUGs6IG9wY2lvbmVzLnBpbGFGb3JQa1tvcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoIC0gMV0gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuVk9MVkVSX0RFX0ZPUk1VTEFSSU8oeyBtYWduaXR1ZFJldHJvY2VzbzogMSB9KSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJvdG9uQ2VycmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURfQk9UT05fQ0VSUkFSKSB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChJRF9CT1RPTl9WT0xWRVJfSERSKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChib3RvbkNlcnJhcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3RvbkNlcnJhci5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+IDxJQ09OLkNoZXZyb25MZWZ0IC8+e2VzVm9sdmVyID8gXCIgVm9sdmVyXCIgOiBcIiBDZXJyYXJcIn08L0J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBGb3JtdWxhcmlvRGVzcGxpZWd1ZShwcm9wczogeyBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgdmFyIGZvclBrID0gcHJvcHMuZm9yUGs7XHJcbiAgICB2YXIgeyBmb3JtdWxhcmlvLCBtb2RvRGVzcGxpZWd1ZSwgbW9kbywgb3BjaW9uZXMgfVxyXG4gICAgICAgID0gdXNlU2VsZWN0b3JWaXZpZW5kYShwcm9wcy5mb3JQayk7XHJcbiAgICB2YXIgc29sb0xlY3R1cmEgPSBnZXREYXRvc0J5UGFzcygpLnNvbG9MZWN0dXJhO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIGVzVm9sdmVyID0gb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aCA+IDA7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHZhciBjb250cm9sU2Nyb2xsID0gKCkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgYXJyaWJhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYXJyaWJhJyk7XHJcbiAgICAgICAgICAgIGlmIChhcnJpYmEpIHtcclxuICAgICAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oYXJyaWJhLnN0eWxlLCAndmlzaWJpbGl0eScsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIGFycmliYS5lbFRvcFZpc2liaWxpemFyICE9IG51bGwgJiYgYXJyaWJhLmVsVG9wVmlzaWJpbGl6YXIgKyAxMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgYWJham8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hYmFqbycpO1xyXG4gICAgICAgICAgICBpZiAoYWJham8pIHtcclxuICAgICAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oYWJham8uc3R5bGUsICd2aXNpYmlsaXR5JyxcclxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgYWJham8uZWxCb3R0b21WaXNpYmlsaXphciAhPSBudWxsICYmIGFiYWpvLmVsQm90dG9tVmlzaWJpbGl6YXIgLSAyMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgKyB3aW5kb3cuaW5uZXJIZWlnaHQgKiAwLjcgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpZENhc28gPSBsaWtlQXIocHJvcHMuZm9yUGspLmZpbmQoKF8sIGspID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGsgIT0gJ2Zvcm11bGFyaW8nXHJcbiAgICAgICAgfSk/LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgd2luZG93LmRvY3VtZW50LnRpdGxlID0gZ2V0RXN0cnVjdHVyYSgpLm9wZXJhdGl2byArICctICcgKyBpZENhc287XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGNvbnRyb2xTY3JvbGwpO1xyXG4gICAgICAgIGNvbnRyb2xTY3JvbGwoKTtcclxuICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY29udHJvbFNjcm9sbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxuICAgIC8vIFRPRE8gVm9sdmVyIGEgcG9uZXIgZWwgbW92aW1pZW50byBhIGxhIGFjdHVhbFxyXG4gICAgdmFyIGFjdHVhbDogYW55XHJcbiAgICB2YXIgY29tcGxldG86IGFueVxyXG4gICAgdmFyIG9uQ2xpY2tTYWx0YXJBY3R1YWwgPSAoKSA9PiB7XHJcbiAgICAgICAgdmFyIHsgdmFyaWFibGVBY3R1YWwgfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IHJlc3B1ZXN0YTogbnVsbCwgdmFyaWFibGU6IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTLCBmb3JQazogcHJvcHMuZm9yUGsgfSk7XHJcbiAgICAgICAgaWYgKHZhcmlhYmxlQWN0dWFsKSB7XHJcbiAgICAgICAgICAgIGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUodmFyaWFibGVBY3R1YWwpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIGxpc3RhTW9kb3M6IE1vZG9EZXNwbGllZ3VlW10gPSBbJ21ldGFkYXRvcycsICdyZWxldmFtaWVudG8nLCAnUERGJ107XHJcbiAgICBbJ2JvdG9uLXZvbHZlci0xJywgJ2JvdG9uLXZvbHZlci0yJ10uZm9yRWFjaChpZCA9PiB7XHJcbiAgICAgICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgICAgICBpZCwgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgICAgICBmdW46IChcclxuICAgICAgICAgICAgICAgIHI6IFJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudG86IEhUTUxEaXZFbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tBbGw6IHsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICAgICAgICAgICAgICBfZXN0cnVjdHVyYTogRXN0cnVjdHVyYVxyXG4gICAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvLnNldEF0dHJpYnV0ZSgncmVzdW1lbi1lc3RhZG8nLCBlc1ZvbHZlciA/IGZlZWRiYWNrRm9ybS5yZXN1bWVuIDogY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoZm9yUGssIGZlZWRiYWNrQWxsLCByKS5yZXN1bWVuRXN0YWRvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9KVxyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBlc3BlY2lhbCBoYXkgcXVlIGxlZXJsbyBlbiBlbCBwYXJzZXIgZGUgY2FzaWxsZXJvcyBzaSBlc3RvIHRlcm1pbmEgcXVlZGFuZG8gYXPDrVxyXG4gICAgdmFyIHBhbnRhbGxhQ29tcGxldGEgPSBmb3JtdWxhcmlvLmVzcGVjaWFsPy5wYW50YWxsYUNvbXBsZXRhO1xyXG4gICAgY29uc3QgbW9kb0RNOiBNb2RvRE0gPSBteS5nZXRMb2NhbFZhcihNT0RPX0RNX0xPQ0FMU1RPUkFHRV9LRVkpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8PlxyXG4gICAgICAgICAgICA8QXBwQmFyIHBvc2l0aW9uPVwiZml4ZWRcIiBjb2xvcj17c29sb0xlY3R1cmEgPyAnc2Vjb25kYXJ5JyA6IChtb2RvRE0gPT0gJ2NhcGEnID8gJ3N1Y2Nlc3MnIDogJ3ByaW1hcnknKX0+XHJcbiAgICAgICAgICAgICAgICA8VG9vbGJhcj5cclxuICAgICAgICAgICAgICAgICAgICA8QmFycmFEZU5hdmVnYWNpb24gZm9yUGs9e2ZvclBrfSBzb2xvTGVjdHVyYT17c29sb0xlY3R1cmEgfHwgZmFsc2V9IG1vZG9EaXJlY3RvPXtvcGNpb25lcy5tb2RvRGlyZWN0b30gLz5cclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT48c3BhbiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnNXB4JyB9fT57bW9kb0RNID09ICdjYXBhJyA/ICcgTU9ETyBDQVBBQ0lUQUNJw5NOJyA6ICcnfTwvc3Bhbj48L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8L1Rvb2xiYXI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwibWluaS1jb25zb2xlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvQXBwQmFyPlxyXG4gICAgICAgICAgICA8bWFpbj5cclxuICAgICAgICAgICAgICAgIDxQYXBlciBjbGFzc05hbWU9XCJmb3JtdWxhcmlvXCIgbW9kby1kZXNwbGllZ3VlPXttb2RvRGVzcGxpZWd1ZX0gdmVyLW51bS1vcGNpb25lcz17b3BjaW9uZXMuY29uQ2FtcG9PcGNpb25lcyA/ICdTSScgOiAnTk8nfT5cclxuICAgICAgICAgICAgICAgICAgICB7bW9kby5kZW1vID8gPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgY29tcG9uZW50PVwic3BhblwiPk1vZG8gZGUgZGVzcGxpZWd1ZTo8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25Hcm91cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsaXN0YU1vZG9zLm1hcChtb2RvID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBrZXk9e21vZG99IHZhcmlhbnQ9e21vZG8gPT0gbW9kb0Rlc3BsaWVndWUgPyBcImNvbnRhaW5lZFwiIDogXCJvdXRsaW5lZFwifSBvbkNsaWNrPXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4gZGlzcGF0Y2goZGlzcGF0Y2hlcnMuTU9ET19ERVNQTElFR1VFKHsgbW9kb0Rlc3BsaWVndWU6IG1vZG8gfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfT57bW9kb308L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IDogbnVsbH1cclxuICAgICAgICAgICAgICAgICAgICB7cGFudGFsbGFDb21wbGV0YSA/IG51bGwgOiA8Qm90b25Wb2x2ZXJFbkRpdiBpZD1cImJvdG9uLXZvbHZlci0xXCIgLz59XHJcbiAgICAgICAgICAgICAgICAgICAge3BhbnRhbGxhQ29tcGxldGEgPyBudWxsIDogPEZvcm11bGFyaW9FbmNhYmV6YWRvIGNhc2lsbGVybz17Zm9ybXVsYXJpb30gLz59XHJcbiAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNvbnRlbmlkb0ludGVybm9CbG9xdWVPRm9ybXVsYXJpbyBibG9xdWVPRm9ybXVsYXJpbz17Zm9ybXVsYXJpb30gZm9ybXVsYXJpbz17Zm9ybXVsYXJpb30gZm9yUGs9e2ZvclBrfSBtdWx0aXBsZT17ZmFsc2V9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAge3BhbnRhbGxhQ29tcGxldGEgPyBudWxsIDogPEJvdG9uVm9sdmVyRW5EaXYgaWQ9XCJib3Rvbi12b2x2ZXItMlwiIC8+fVxyXG4gICAgICAgICAgICAgICAgPC9QYXBlcj5cclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1hY3Rpdm8tYXJyaWJhJyBjb2xvcj1cInByaW1hcnlcIiBhcmlhLWxhYmVsPVwiYWRkXCIgb25DbGljaz17b25DbGlja1NhbHRhckFjdHVhbH0+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uS2V5Ym9hcmRBcnJvd1VwIC8+XHJcbiAgICAgICAgICAgICAgICA8L0ZhYj5cclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1hY3Rpdm8tYWJham8nIGNvbG9yPVwicHJpbWFyeVwiIGFyaWEtbGFiZWw9XCJhZGRcIiBvbkNsaWNrPXtvbkNsaWNrU2FsdGFyQWN0dWFsfT5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5LZXlib2FyZEFycm93RG93biAvPlxyXG4gICAgICAgICAgICAgICAgPC9GYWI+XHJcbiAgICAgICAgICAgICAgICA8RmFiIGlkPSdmYWItZXJyb3ItYXJyaWJhJyB2YXJpYW50PVwiZXh0ZW5kZWRcIiBjb2xvcj1cInNlY29uZGFyeVwiIGFyaWEtbGFiZWw9XCJlZGl0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uTmF2aWdhdGlvbiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIEVycm9yXHJcbiAgICAgICAgICAgICAgICA8L0ZhYj5cclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1lcnJvci1hYmFqbycgdmFyaWFudD1cImV4dGVuZGVkXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBhcmlhLWxhYmVsPVwiZWRpdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLk5hdmlnYXRpb25Eb3duIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgRXJyb3JcclxuICAgICAgICAgICAgICAgIDwvRmFiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2VzcGFjaW8tZmluYWwtZm9ybXVsYXJpbyc+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICB7b3BjaW9uZXMubW9kb0JvcnJhclJlc3B1ZXN0YSAmJiBvcGNpb25lcy5mb3JQayA/IDxEZXNwbGVnYXJDb25maXJtYXJCb3JyYXJSZXNwdWVzdGEgZm9yUGs9e29wY2lvbmVzLmZvclBrfSB2YXJpYWJsZUJvcnJhcj17b3BjaW9uZXMubW9kb0JvcnJhclJlc3B1ZXN0YX0gLz4gOiBudWxsfVxyXG4gICAgICAgICAgICA8L21haW4+XHJcbiAgICAgICAgPC8+XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQXRyaWJ1dG8ocHJvcHM6IHsgbm9tYnJlOiBzdHJpbmcsIHZhbG9yOiBhbnkgfSkge1xyXG4gICAgcmV0dXJuIHByb3BzLnZhbG9yICE9IG51bGwgJiYgcHJvcHMudmFsb3IgIT0gJycgPyA8c3BhbiBjbGFzc05hbWU9XCJhdHJpYnV0by1wYXJcIj5cclxuICAgICAgICB7cHJvcHMubm9tYnJlID8gPHNwYW4gY2xhc3NOYW1lPVwiYXRyaWJ1dG8tbm9tYnJlXCI+e3Byb3BzLm5vbWJyZX08L3NwYW4+IDogbnVsbH1cclxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJhdHJpYnV0by12YWxvclwiPntwcm9wcy52YWxvci50b1N0cmluZygpfTwvc3Bhbj5cclxuICAgIDwvc3Bhbj4gOiBudWxsXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBsaXN0YUVzdGFkb3NDYXJnYTogRXN0YWRvQ2FyZ2FbXSA9IFsncmVzdW1lbicsICdyZWxldmFtaWVudG8nLCAncmVjaWJvJ107XHJcbmV4cG9ydCB2YXIgcmVzdW1pZG9yZXMgPSBbXHJcbiAgICB7IG5vbWJyZTogJ1JFQScsIGY6IChycjogUmVzcHVlc3Rhc1JhaXopID0+IHJyLnJlc3VtZW5Fc3RhZG8gPT0gXCJva1wiIH0sXHJcbiAgICB7IG5vbWJyZTogJ0NpdGEgcGFjdGFkYScsIGY6IChycjogUmVzcHVlc3Rhc1JhaXopID0+IHJyLnJlc3VtZW5Fc3RhZG8gPT0gXCJjaXRhIHBhY3RhZGFcIiB9LFxyXG4gICAgeyBub21icmU6ICdQZW5kaWVudGVzJywgZjogKHJyOiBSZXNwdWVzdGFzUmFpeikgPT4gcnIucmVzdW1lbkVzdGFkbyA9PSBcInZhY2lvXCIgfSxcclxuXTtcclxuXHJcbnJlc3VtaWRvcmVzLnB1c2goXHJcbiAgICB7IG5vbWJyZTogJ090cm9zJywgZjogcmVzdW1pZG9yZXMucmVkdWNlKChnLCByKSA9PiAocnIgPT4gIXIuZihycikgJiYgZyhycikpLCAoXzogUmVzcHVlc3Rhc1JhaXopID0+IHRydWUpIH1cclxuKVxyXG5cclxuZXhwb3J0IHR5cGUgRGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWxUeXBlID0gKHByb3BzOiB7XHJcbiAgICBudW1WaXZpZW5kYTogSWRFbmMsXHJcbiAgICBmb3JtUHJpbmNpcGFsOiBJZEZvcm11bGFyaW8sXHJcbiAgICB0YXJlYTogc3RyaW5nLFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3Rhc1JhaXosXHJcbn0pID0+IEpTWC5FbGVtZW50O1xyXG5cclxuZXhwb3J0IHZhciBEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbDogRGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWxUeXBlXHJcblxyXG5leHBvcnQgY29uc3Qgc2V0RGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWwgPSAobGluZWFSZXN1bWVuVUFQcmluY2lwYWw6IERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsVHlwZSkgPT4gRGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWwgPSBsaW5lYVJlc3VtZW5VQVByaW5jaXBhbDtcclxuXHJcbnNldERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsKChwcm9wczoge1xyXG4gICAgbnVtVml2aWVuZGE6IElkRW5jLFxyXG4gICAgZm9ybVByaW5jaXBhbDogSWRGb3JtdWxhcmlvLFxyXG4gICAgdGFyZWE6IHN0cmluZyxcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXNSYWl6LFxyXG59KSA9PiB7XHJcbiAgICBjb25zdCB7IG51bVZpdmllbmRhLCByZXNwdWVzdGFzLCBmb3JtUHJpbmNpcGFsLCB0YXJlYSB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBpZCA9ICd2aXYtJyArIG51bVZpdmllbmRhO1xyXG4gICAgY29uc3QgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIGNvbnN0IGZvclBrOiBGb3JQayA9IHsgZm9ybXVsYXJpbzogZm9ybVByaW5jaXBhbCwgW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF06IE51bWJlcihudW1WaXZpZW5kYSkgYXMgSWRFbmMgfSBhcyBGb3JQazsgLy9ubyBxdWl0YXIgZWwgY2FzdGVvIHBvcnF1ZSB2aWVuZSBjb21vIHRleHRvIHkgbmVjZXNpdG8gcXVlIHNlYSBuw7ptZXJvXHJcbiAgICB2YXIgdGVtID0gZ2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltudW1WaXZpZW5kYV0udGVtO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrKTtcclxuICAgICAgICBpbnRlbnRhckJhY2t1cChmb3JQaylcclxuICAgIH0pXHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICBmdW46IChcclxuICAgICAgICAgICAgcjogUmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgX2ZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sXHJcbiAgICAgICAgICAgIGVsZW1lbnRvOiBIVE1MRGl2RWxlbWVudCxcclxuICAgICAgICAgICAgZmVlZGJhY2tBbGw6IHsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICAgICAgICAgIF9lc3RydWN0dXJhOiBFc3RydWN0dXJhXHJcbiAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIC8vcHJlZ3VudG8gc2kgZXMgbGEgbWlzbWEgdml2aWVuZGEgcG9ycXVlIGxhIGZ1bmNpb24gc2UgZGlzcGFyYSBcclxuICAgICAgICAgICAgLy9jb24gdG9kYXMgbGFzIGNvbWJpbmFjaW9uZXMgZGUgcmVzcHVlc3RhcyBwYXJhIGNhZGEgZm9yUGtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIHZpdmllbmRhIGV4aXN0ZVxyXG4gICAgICAgICAgICBpZiAocltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdID09IGZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvLnNldEF0dHJpYnV0ZSgncmVzdW1lbi1lc3RhZG8nLCBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYShmb3JQaywgZmVlZGJhY2tBbGwsIHIpLnJlc3VtZW5Fc3RhZG8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0pXHJcbiAgICByZXR1cm4gPFRhYmxlUm93IGtleT17bnVtVml2aWVuZGF9PlxyXG4gICAgICAgIDxUYWJsZUNlbGw+XHJcbiAgICAgICAgICAgIHt0ZW0gP1xyXG4gICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyVGVtIHRlbT17dGVtfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgIHtyZXNwdWVzdGFzWydyZXN1bWVuRXN0YWRvJyBhcyBJZFZhcmlhYmxlXSA9PSBcImNpdGEgcGFjdGFkYVwiID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNpdGFQYWN0YWRhIHJlc3B1ZXN0YXM9e3Jlc3B1ZXN0YXN9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNpdGFQYWN0YWRhWVNlbGVjY2lvbmFkb0FudGVyaW9yVGVtIHRlbT17dGVtfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgOiBudWxsfVxyXG4gICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgICAgIDxUYWJsZUNlbGw+XHJcbiAgICAgICAgICAgIHt0YXJlYX1cclxuICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICA8VGFibGVDZWxsPlxyXG4gICAgICAgICAgICA8QnV0dG9uIGlkPXtpZH0gb25DbGljaz17KCkgPT5cclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNBTUJJQVJfRk9STVVMQVJJTyh7IGZvclBrLCBhcGlsYXJWdWVsdGE6IGZhbHNlIH0pKVxyXG4gICAgICAgICAgICB9PlxyXG4gICAgICAgICAgICAgICAge251bVZpdmllbmRhLnRvU3RyaW5nKCl9XHJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgPC9UYWJsZVJvdz5cclxufSk7XHJcblxyXG5leHBvcnQgdHlwZSBEZXNwbGVnYXJDYXJnYVR5cGUgPSAocHJvcHM6IHtcclxuICAgIGNhcmdhOiBDYXJnYSxcclxuICAgIGlkQ2FyZ2E6IElkQ2FyZ2EsXHJcbiAgICBwb3NpY2lvbjogbnVtYmVyLFxyXG4gICAgaW5mb3JtYWNpb25IZHI6IEluZm9ybWFjaW9uSGRyLFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhTGFzVUEsXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjoge1xyXG4gICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPlxyXG4gICAgfVxyXG59KSA9PiBKU1guRWxlbWVudDtcclxuXHJcbmV4cG9ydCB2YXIgRGVzcGxlZ2FyQ2FyZ2E6IERlc3BsZWdhckNhcmdhVHlwZVxyXG5cclxuZXhwb3J0IGNvbnN0IHNldERlc3BsZWdhckNhcmdhID0gKGRlc3BsaWVndWVDYXJnYTogRGVzcGxlZ2FyQ2FyZ2FUeXBlKSA9PiBEZXNwbGVnYXJDYXJnYSA9IGRlc3BsaWVndWVDYXJnYTtcclxuXHJcbnNldERlc3BsZWdhckNhcmdhKChwcm9wczoge1xyXG4gICAgY2FyZ2E6IENhcmdhLFxyXG4gICAgaWRDYXJnYTogSWRDYXJnYSxcclxuICAgIHBvc2ljaW9uOiBudW1iZXIsXHJcbiAgICBpbmZvcm1hY2lvbkhkcjogSW5mb3JtYWNpb25IZHIsXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFMYXNVQSxcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOiB7XHJcbiAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+XHJcbiAgICB9XHJcbn0pID0+IHtcclxuICAgIGNvbnN0IFtuZXdTdXJ2ZXksIHNldE5ld1N1cnZleV0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IHsgY2FyZ2EsIGlkQ2FyZ2EsIGluZm9ybWFjaW9uSGRyLCByZXNwdWVzdGFzIH0gPSBwcm9wcztcclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgbGV0IGNhbnRMaW5lYXNSZXN1bWVuID0gbGlrZUFyKGluZm9ybWFjaW9uSGRyKS5maWx0ZXIoKGluZm9ybWFjaW9uKSA9PiBpbmZvcm1hY2lvbi50ZW0uY2FyZ2EgPT0gaWRDYXJnYSkuYXJyYXkoKS5sZW5ndGg7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCBtb2RvRE06IE1vZG9ETSA9IG15LmdldExvY2FsVmFyKE1PRE9fRE1fTE9DQUxTVE9SQUdFX0tFWSk7XHJcbiAgICByZXR1cm4gPFBhcGVyIGNsYXNzTmFtZT1cImNhcmdhXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMTBweCcsIHBhZGRpbmc6ICcxMHB4JyB9fT5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImluZm9ybWFjaW9uLWNhcmdhXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZ2FcIj7DgXJlYToge2lkQ2FyZ2F9PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwib2JzZXJ2YWNpb25lc1wiPntjYXJnYS5vYnNlcnZhY2lvbmVzfTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW5mb3JtYWNpb24tY2FyZ2FcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmZWNoYVwiPntjYXJnYS5mZWNoYX08L2Rpdj5cclxuICAgICAgICAgICAgey8qXHJcbiAgICAgICAgICAgIDxCdXR0b25Hcm91cD5cclxuICAgICAgICAgICAge2xpc3RhRXN0YWRvc0NhcmdhLm1hcChlc3RhZG9fY2FyZ2E9PlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBrZXk9e2VzdGFkb19jYXJnYX0gdmFyaWFudD17ZXN0YWRvX2NhcmdhPT1jYXJnYS5lc3RhZG9fY2FyZ2E/XCJjb250YWluZWRcIjpcIm91dGxpbmVkXCJ9IG9uQ2xpY2s9e1xyXG4gICAgICAgICAgICAgICAgICAgICgpPT5kaXNwYXRjaChkaXNwYXRjaGVycy5FU1RBRE9fQ0FSR0Eoe2lkQ2FyZ2EsIGVzdGFkb19jYXJnYX0pKVxyXG4gICAgICAgICAgICAgICAgfT57ZXN0YWRvX2NhcmdhfTwvQnV0dG9uPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8L0J1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICAqL31cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB7Y2FyZ2EuZXN0YWRvX2NhcmdhID09IG51bGwgJiYgIXByb3BzLnBvc2ljaW9uIHx8IGNhcmdhLmVzdGFkb19jYXJnYSA9PSAncmVsZXZhbWllbnRvJyA/XHJcbiAgICAgICAgICAgIDxUYWJsZSBjbGFzc05hbWU9XCJ0YWJsYS1jYXJnYS1ob2phLWRlLXJ1dGFcIj5cclxuICAgICAgICAgICAgICAgIDxjb2xncm91cD5cclxuICAgICAgICAgICAgICAgICAgICA8Y29sIHN0eWxlPXt7IHdpZHRoOiBcIjc1JVwiIH19IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNvbCBzdHlsZT17eyB3aWR0aDogXCIxMCVcIiB9fSAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjb2wgc3R5bGU9e3sgd2lkdGg6IFwiMTUlXCIgfX0gLz5cclxuICAgICAgICAgICAgICAgIDwvY29sZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICB7Y2FudExpbmVhc1Jlc3VtZW4gP1xyXG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZUhlYWQgc3R5bGU9e3sgZm9udFNpemU6IFwiMS4ycmVtXCIgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZVJvdyBjbGFzc05hbWU9XCJ0ci1jYXJnYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbD5kb21pY2lsaW88L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGw+dGFyZWE8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGw+ZW5jPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVSb3c+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9UYWJsZUhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsfVxyXG4gICAgICAgICAgICAgICAgPFRhYmxlQm9keT5cclxuICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7bGlrZUFyKGluZm9ybWFjaW9uSGRyKS5maWx0ZXIoKGluZm9ybWFjaW9uKSA9PiBpbmZvcm1hY2lvbi50ZW0uY2FyZ2EgPT0gaWRDYXJnYSkubWFwKChpbmZvcm1hY2lvbiwgbnVtVml2aWVuZGEpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e251bVZpdmllbmRhfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVZpdmllbmRhPXtudW1WaXZpZW5kYX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJlYT17aW5mb3JtYWNpb24udGFyZWEudGFyZWF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVByaW5jaXBhbD17aW5mb3JtYWNpb24udGFyZWEubWFpbl9mb3JtfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXM9e3Jlc3B1ZXN0YXNbZXN0cnVjdHVyYS51YVBwYWxdW251bVZpdmllbmRhXSBhcyBSZXNwdWVzdGFzUmFpen1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkuYXJyYXkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAge2VzdHJ1Y3R1cmEucGVybWl0ZUdlbmVyYXJNdWVzdHJhID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZVJvdyBjbGFzc05hbWU9XCJ0ci1jYXJnYS1udWV2b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGwgY29sU3Bhbj17M30+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e21vZG9ETSA9PSBcImNhcGFcIiA/IFwic3VjY2Vzc1wiIDogXCJwcmltYXJ5XCJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWFyRW5jdWVzdGEoaWRDYXJnYSwgKGZvclBrUmFpejogRm9yUGtSYWl6KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNBTUJJQVJfRk9STVVMQVJJTyh7IGZvclBrOiBmb3JQa1JhaXosIGFwaWxhclZ1ZWx0YTogZmFsc2UgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLkFkZCAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVSb3c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGx9XHJcbiAgICAgICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICA8L1RhYmxlQm9keT5cclxuICAgICAgICAgICAgPC9UYWJsZT4gOlxyXG4gICAgICAgICAgICA8VGFibGU+XHJcbiAgICAgICAgICAgICAgICA8VGFibGVIZWFkIHN0eWxlPXt7IGZvbnRTaXplOiBcIjEuMnJlbVwiIH19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZVJvdyBjbGFzc05hbWU9XCJ0ci1jYXJnYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7cmVzdW1pZG9yZXMubWFwKChyZXN1bWlkb3I6IHR5cGVvZiByZXN1bWlkb3Jlc1swXSwgaTogbnVtYmVyKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbCBrZXk9e2l9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZXN1bWlkb3Iubm9tYnJlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9UYWJsZVJvdz5cclxuICAgICAgICAgICAgICAgIDwvVGFibGVIZWFkPlxyXG4gICAgICAgICAgICA8L1RhYmxlPlxyXG4gICAgICAgIH1cclxuICAgIDwvUGFwZXI+XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhckNpdGFQYWN0YWRhKHByb3BzOiB7IHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMgfSkge1xyXG4gICAgY29uc3QgeyByZXNwdWVzdGFzIH0gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNpdGEtcGFjdGFkYVwiPlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIkNpdGEgcGFjdGFkYSBjb24gXCIgdmFsb3I9e3Jlc3B1ZXN0YXNbcDEyXX0gLz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJDZWwuOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwMl19IC8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiVGVsLjpcIiB2YWxvcj17cmVzcHVlc3Rhc1tzcDNdfSAvPjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIkZlY2hhOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwNF19IC8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiSG9yYTpcIiB2YWxvcj17cmVzcHVlc3Rhc1tzcDVdfSAvPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJDaXRhUGFjdGFkYVlTZWxlY2Npb25hZG9BbnRlcmlvclRlbShwcm9wczogeyB0ZW06IFRFTSB9KSB7XHJcbiAgICBjb25zdCB7IHRlbSB9ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPGRpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRlbS1jaXRhXCI+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJDaXRhOlwiIHZhbG9yPXt0ZW0uY2l0YX0gLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRGVzcGxlZ2FyVGVtKHByb3BzOiB7IHRlbTogVEVNIH0pIHtcclxuICAgIGNvbnN0IHsgdGVtIH0gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGVtLWRvbWljaWxpb1wiPnt0ZW0ubm9tY2FsbGV9IHt0ZW0ubnJvY2F0YXN0cmFsfSA8QXRyaWJ1dG8gbm9tYnJlPVwicGlzb1wiIHZhbG9yPXt0ZW0ucGlzb30gLz4gPEF0cmlidXRvIG5vbWJyZT1cImRwdG9cIiB2YWxvcj17dGVtLmRlcGFydGFtZW50b30gLz4gPC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cInNlY3RvclwiIHZhbG9yPXt0ZW0uc2VjdG9yfSAvPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiZWRpZmljaW9cIiB2YWxvcj17dGVtLmVkaWZpY2lvfSAvPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiY2FzYVwiIHZhbG9yPXt0ZW0uY2FzYX0gLz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImVudHJhZGFcIiB2YWxvcj17dGVtLmVudHJhZGF9IC8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJoYWJpdGFjaW9uXCIgdmFsb3I9e3RlbS5oYWJpdGFjaW9ufSAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGVtLW9ic2VydmFjaW9uZXNcIj5cclxuICAgICAgICAgICAge3RlbS5vYnNlcnZhY2lvbmVzfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEhvamFEZVJ1dGFEZXNwbGllZ3VlVHlwZSA9IChwcm9wczoge30pID0+IEpTWC5FbGVtZW50O1xyXG5cclxuZXhwb3J0IHZhciBIb2phRGVSdXRhRGVzcGxpZWd1ZTogSG9qYURlUnV0YURlc3BsaWVndWVUeXBlXHJcblxyXG5leHBvcnQgY29uc3Qgc2V0SG9qYURlUnV0YURlc3BsaWVndWUgPSAoaG9qYURlUnV0YTogSG9qYURlUnV0YURlc3BsaWVndWVUeXBlKSA9PiBIb2phRGVSdXRhRGVzcGxpZWd1ZSA9IGhvamFEZVJ1dGFcclxuXHJcbnNldEhvamFEZVJ1dGFEZXNwbGllZ3VlKChfcHJvcHM6IHt9KSA9PiB7XHJcbiAgICB2YXIgeyBjYXJnYXMsIG51bV9zaW5jcm8sIGluZm9ybWFjaW9uSGRyLCByZXNwdWVzdGFzIH0gPSBnZXREYXRvc0J5UGFzcygpO1xyXG4gICAgdmFyIHsgbW9kbyB9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+ICh7IG1vZG86IHN0YXRlLm1vZG8gfSkpO1xyXG4gICAgdmFyIGZlZWRiYWNrUm93VmFsaWRhdG9yID0gZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IoKVxyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3Qgb25saW5lID0gdXNlT25saW5lU3RhdHVzKCk7XHJcbiAgICBjb25zdCBtb2RvRE06IE1vZG9ETSA9IG15LmdldExvY2FsVmFyKE1PRE9fRE1fTE9DQUxTVE9SQUdFX0tFWSk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxBcHBCYXIgcG9zaXRpb249XCJmaXhlZFwiIGNvbG9yPXttb2RvRE0gPT0gJ2NhcGEnID8gJ3N1Y2Nlc3MnIDogJ3ByaW1hcnknfT5cclxuICAgICAgICAgICAgICAgIDxUb29sYmFyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBIT0pBIERFIFJVVEFcclxuICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLzxJY29uQnV0dG9uIHN0eWxlPXt7bWFyZ2luVG9wOiczcHgnfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgLy9vbkNsaWNrPXsvKmRpc3BhdGNoIHF1ZSBsbGV2YSBhIHBhbnRhbGxhIG9wY2lvbmVzKi99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICA8SUNPTi5TZXR0aW5ncy8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vPC9JY29uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB7b25saW5lID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luOiAnMCA4cHgnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvU2luY3Jvbml6YXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uU3luY0FsdCAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGx9XHJcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+PHNwYW4gc3R5bGU9e3sgbWFyZ2luTGVmdDogJzVweCcgfX0+e21vZG9ETSA9PSAnY2FwYScgPyAnIE1PRE8gQ0FQQUNJVEFDScOTTicgOiAnJ308L3NwYW4+PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPC9Ub29sYmFyPlxyXG4gICAgICAgICAgICA8L0FwcEJhcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJob2phLWRlLXJ1dGFcIj5cclxuICAgICAgICAgICAgICAgIDxQYXBlciBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxMHB4JywgcGFkZGluZzogJzEwcHgnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgIHttb2RvLmRlbW8gPyA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5Nb2RvIGRlbW8gPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGNvbG9yPVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGRpc3BhdGNoKGRpc3BhdGNoZXJzLlJFSU5JQ0lBUl9ERU1PKHt9KSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW5pY2lhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gOiBudWxsfVxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibm9tYnJlLXZlcnNpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5JbnN0aXR1dG8gZGUgRXN0YWTDrXN0aWNhIHkgQ2Vuc29zIGRlIGxhIENpdWRhZCBBdXTDs25vbWEgZGUgQnVlbm9zIEFpcmVzIC0gSURFQ0JBPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+dmVyc2nDs24ge215LmdldExvY2FsVmFyKCdhcHAtY2FjaGUtdmVyc2lvbicpfSAtIHNpbmNybyB7bnVtX3NpbmNyb308L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvUGFwZXI+XHJcbiAgICAgICAgICAgICAgICB7bGlrZUFyKGNhcmdhcykubWFwKChjYXJnYSwgaWRDYXJnYSwgXywgcG9zaWNpb24pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNhcmdhIGtleT17aWRDYXJnYX0gY2FyZ2E9e2NhcmdhfSBpZENhcmdhPXtpZENhcmdhfSBwb3NpY2lvbj17cG9zaWNpb259IGluZm9ybWFjaW9uSGRyPXtpbmZvcm1hY2lvbkhkcn0gZmVlZGJhY2tSb3dWYWxpZGF0b3I9e2ZlZWRiYWNrUm93VmFsaWRhdG9yfSByZXNwdWVzdGFzPXtyZXNwdWVzdGFzfSAvPlxyXG4gICAgICAgICAgICAgICAgKS5hcnJheSgpfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8Lz5cclxuICAgICk7XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIExpc3RhVGV4dG9zKHByb3BzOiB7IHRleHRvczogc3RyaW5nW10gfSkge1xyXG4gICAgcmV0dXJuIDx1bD5cclxuICAgICAgICB7cHJvcHMudGV4dG9zLm1hcCh0ID0+IDxsaT48VHlwb2dyYXBoeT57dH08L1R5cG9ncmFwaHk+PC9saT4pfVxyXG4gICAgPC91bD47XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBCaWVudmVuaWRhRGVzcGxpZWd1ZShwcm9wczogeyBtb2RvOiBDYXNvU3RhdGVbXCJtb2RvXCJdIH0pIHtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHJldHVybiA8UGFwZXIgY2xhc3NOYW1lPVwiYmllbnZlbmlkYVwiPlxyXG4gICAgICAgIHtwcm9wcy5tb2RvLmRlbW8gP1xyXG4gICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+REVNTyBkZWwgc2lzdGVtYSBkZSByZWxldmFtaWVudG8gZGUgRE1FTkNVPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+RW4gZXN0YSBkZW1vOjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgIDxMaXN0YVRleHRvcyB0ZXh0b3M9e1tcclxuICAgICAgICAgICAgICAgICAgICBcIkFsZ3VuYXMgdml2aWVuZGFzIGFwYXJlY2VuIHJlbGV2YWRhcyAoZWwgYm90w7NuIGVzdMOhIGRlIGNvbG9yKSBzaXJ2ZW4gZGUgZWplbXBsb1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiTG8gcXVlIHNlIGNhcmd1ZW4gc2UgZ3VhcmRhbiBsb2NhbG1lbnRlIHBlcm8gbm8gc2UgdHJhc21pdGVuIGEgbGEgYmFzZSBkZSBkYXRvc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiU2UgcHVlZGUgdm9sdmVyIGEgbGEgdmVyc2nDs24gaW5pY2lhbCAobyBzZWEgYm9ycmFyIGxvIHF1ZSBzZSBndWFyZMOzIGxvY2FsbWVudGUpIGRlc2RlIGxhIGhvamEgZGUgcnV0YSBib3RvbiBbcmVpbmljaWFyIGRlbW9dXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJUb2RhdsOtYSBoYXkgY29zYXMgcXVlIGZhbHRhbiBvIHB1ZWRlbiBjYW1iaWFyXCIsXHJcbiAgICAgICAgICAgICAgICBdfSAvPlxyXG4gICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgOiA8PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+RW5jdWVzdGEgZGUgU2Vyb3ByZXZhbGVuY2lhIGRlIENPVklELTE5PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICA8Lz5cclxuICAgICAgICB9XHJcbiAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcclxuICAgICAgICAgICAgY29sb3I9XCJzZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7IGdvdG9TaW5jcm9uaXphcigpOyB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4+U2luY3Jvbml6YXIgPC9zcGFuPiA8SUNPTi5TeW5jQWx0IC8+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcclxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7IG9wY2lvbjogJ2JpZW52ZW5pZG8nLCB2YWxvcjogdHJ1ZSB9KSl9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3Bhbj5Db250aW51YXIgPC9zcGFuPiA8SUNPTi5TZW5kIC8+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICA8L1BhcGVyPlxyXG59XHJcblxyXG4vL0NPTlRST0wgREUgUEVTVEHDkUFTXHJcbnZhciBhbGxPcGVuZWRUYWJzOiB7IFt4OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xyXG52YXIgaW5mb09wZW5lZFRhYnMgPSB7XHJcbiAgICBhbGxPcGVuZWRUYWJzLFxyXG4gICAgbXlJZDogJ2NhbGN1bGFuZG8uLi4nLFxyXG4gICAgb3RoZXJUYWJzTmFtZXM6ICcnXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBPcGVuZWRUYWJzKCkge1xyXG4gICAgY29uc3QgW3RhYnMsIHNldFRhYnNdID0gdXNlU3RhdGUoaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXMpO1xyXG4gICAgdmFyIHsgbW9kb0RpcmVjdG8gfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiAoeyBtb2RvRGlyZWN0bzogc3RhdGUub3BjaW9uZXMubW9kb0RpcmVjdG8gfSkpO1xyXG4gICAgY29uc3QgdXBkYXRlVGFic1N0YXR1cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBzZXRUYWJzKGluZm9PcGVuZWRUYWJzLm90aGVyVGFic05hbWVzKTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ215LXRhYnMnLCB1cGRhdGVUYWJzU3RhdHVzKTtcclxuICAgICAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ215LXRhYnMnLCB1cGRhdGVUYWJzU3RhdHVzKTtcclxuICAgIH0sIFtdKVxyXG4gICAgcmV0dXJuIG1vZG9EaXJlY3RvID8gbnVsbCA6ICh0YWJzKSA/XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0YWItY291bnRlciB0YWItZXJyb3JcIj7CoUFURU5DScOTTiEgSGF5IG3DoXMgZGUgdW5hIHZlbnRhbmEgYWJpZXJ0YS4gU2UgcHVlZGVuIHBlcmRlciBkYXRvczoge3RhYnN9PC9kaXY+XHJcbiAgICAgICAgOlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGFiLWNvdW50ZXJcIj7inJQ8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEFwcERtRW5jdSgpIHtcclxuICAgIHZhciB7IGZvclBrLCBiaWVudmVuaWRvLCBtb2RvIH0gPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gKHsgLi4uc3RhdGUub3BjaW9uZXMsIC4uLnN0YXRlLm1vZG8sIC4uLnN0YXRlIH0pKTtcclxuICAgIGlmICghYmllbnZlbmlkbykge1xyXG4gICAgICAgIHJldHVybiA8QmllbnZlbmlkYURlc3BsaWVndWUgbW9kbz17bW9kb30gLz5cclxuICAgIH0gZWxzZSBpZiAoZm9yUGsgPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiA8SG9qYURlUnV0YURlc3BsaWVndWUgLz5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIDxGb3JtdWxhcmlvRGVzcGxpZWd1ZSBmb3JQaz17Zm9yUGt9IC8+XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFBhbnRhbGxhSW5pY2lhbFNpbkNhcmdhKF9wcm9wczoge30pIHtcclxuICAgIGNvbnN0IG9ubGluZSA9IHVzZU9ubGluZVN0YXR1cygpO1xyXG5cclxuICAgIGNvbnN0IHBhcmFncmFwaFN0eWxlcyA9IHsgZm9udFNpemU6IFwiMS4ycmVtXCIsIGZvbnRXZWlnaHQ6IDYwMCwgcGFkZGluZzogXCI1cHggMTBweFwiIH07XHJcbiAgICBjb25zdCBtb2RvRE06IE1vZG9ETSA9IG15LmdldExvY2FsVmFyKE1PRE9fRE1fTE9DQUxTVE9SQUdFX0tFWSk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxBcHBCYXIgcG9zaXRpb249XCJmaXhlZFwiIGNvbG9yPXttb2RvRE0gPT0gJ2NhcGEnID8gJ3N1Y2Nlc3MnIDogJ3ByaW1hcnknfT5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJoNlwiIHN0eWxlPXt7IG1hcmdpbjogMjUgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgRGlzcG9zaXRpdm8gc2luIGNhcmdhIC0ge21vZG9ETSA9PSAnY2FwYScgPyAnTU9ETyBDQVBBQ0lUQUNJw5NOJyA6ICcnfVxyXG4gICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICA8L0FwcEJhcj5cclxuICAgICAgICAgICAgPG1haW4+XHJcbiAgICAgICAgICAgICAgICA8UGFwZXIgc3R5bGU9e3sgaGVpZ2h0OiAnNjAwcHgnLCBwYWRkaW5nOiBcIjE1cHhcIiwgbWFyZ2luVG9wOiA3NSB9fT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7b25saW5lID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgY29tcG9uZW50PVwicFwiIHN0eWxlPXtwYXJhZ3JhcGhTdHlsZXN9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaW5jcm9uaXphciBkaXNwb3NpdGl2b1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBwYWRkaW5nOiAnNXB4JyB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17bW9kb0RNID09ICdjYXBhJyA/ICdzdWNjZXNzJyA6IFwicHJpbWFyeVwifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290b1NpbmNyb25pemFyKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLlN5bmNBbHQgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJwXCIgc3R5bGU9e3BhcmFncmFwaFN0eWxlc30+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gaGF5IGNvbmV4acOzbiBhIGludGVybmV0LCBwb3IgZmF2b3IgY29uw6ljdGUgZWwgZGlzcG9zaXRpdm8gYSB1bmEgcmVkIHBhcmEgc2luY3Jvbml6YXIgdW5hIGhvamEgZGUgcnV0YS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9QYXBlcj5cclxuICAgICAgICAgICAgPC9tYWluPlxyXG4gICAgICAgIDwvPlxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFBhbnRhbGxhSW5pY2lhbCgpIHtcclxuICAgIHZhciB7IGZvclBrLCBiaWVudmVuaWRvLCBtb2RvIH0gPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gKHsgLi4uc3RhdGUub3BjaW9uZXMsIC4uLnN0YXRlLm1vZG8sIC4uLnN0YXRlIH0pKTtcclxuICAgIGlmICghYmllbnZlbmlkbykge1xyXG4gICAgICAgIHJldHVybiA8QmllbnZlbmlkYURlc3BsaWVndWUgbW9kbz17bW9kb30gLz5cclxuICAgIH0gZWxzZSBpZiAoZm9yUGsgPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiA8SG9qYURlUnV0YURlc3BsaWVndWUgLz5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIDxGb3JtdWxhcmlvRGVzcGxpZWd1ZSBmb3JQaz17Zm9yUGt9IC8+XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkbVBhbnRhbGxhSW5pY2lhbFNpbkNhcmdhKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCBsb2FkQ1NTKEJPT1RTVFJBUF81XzFfM19TUkMpO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgdGhyb3cgKGVycilcclxuICAgIH1cclxuICAgIFJlYWN0RE9NLnJlbmRlcihcclxuICAgICAgICA8UGFudGFsbGFJbmljaWFsU2luQ2FyZ2EgLz4sXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JylcclxuICAgIClcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwob3B0czogeyBtb2RvRGVtbzogYm9vbGVhbiwgZm9yUGtSYWl6PzogRm9yUGtSYWl6LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvIH0pIHtcclxuICAgIC8vIHRyYWVyIGxvcyBtZXRhZGF0b3MgZW4gdW5hIFwiZXN0cnVjdHVyYVwiXHJcbiAgICAvLyB0cmFlciBsb3MgZGF0b3MgZGUgbG9jYWxTdG9yYWdlXHJcbiAgICAvLyB2ZXJpZmljYXIgZWwgbWFpbiBMYXlvdXRcclxuICAgIGNvbnN0IHN0b3JlID0gYXdhaXQgZG1UcmFlckRhdG9zRm9ybXVsYXJpbyhvcHRzKVxyXG4gICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCBsb2FkQ1NTKEJPT1RTVFJBUF81XzFfM19TUkMpO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgdGhyb3cgKGVycilcclxuICAgIH1cclxuICAgIFJlYWN0RE9NLnJlbmRlcihcclxuICAgICAgICA8UmVuZGVyUHJpbmNpcGFsIHN0b3JlPXtzdG9yZX0gZGlzcGF0Y2hlcnM9e2Rpc3BhdGNoZXJzfSBtZW5zYWplUmV0b3Jubz17b3B0cy5mb3JQa1JhaXogPyBcIlZvbHZlciBhbCBmb3JtdWxhcmlvXCIgOiBcIlZvbHZlciBhIGxhIGhvamEgZGUgcnV0YVwifT5cclxuICAgICAgICAgICAgPE9wZW5lZFRhYnMgLz5cclxuICAgICAgICAgICAgPEFwcERtRW5jdSAvPlxyXG4gICAgICAgIDwvUmVuZGVyUHJpbmNpcGFsPixcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKVxyXG4gICAgKVxyXG59XHJcblxyXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIC8vIEB0cy1pZ25vcmUgcGFyYSBoYWNlcmxvXHJcbiAgICB3aW5kb3cuZGVzcGxlZ2FyRm9ybXVsYXJpb0FjdHVhbCA9IGRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWw7XHJcbiAgICAvLyBAdHMtaWdub3JlIHBhcmEgaGFjZXJsb1xyXG4gICAgd2luZG93LmRtUGFudGFsbGFJbmljaWFsU2luQ2FyZ2EgPSBkbVBhbnRhbGxhSW5pY2lhbFNpbkNhcmdhO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gbG9hZEluc3RhbmNlKCkge1xyXG4gICAgaWYgKHR5cGVvZiBCcm9hZGNhc3RDaGFubmVsID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBiYyA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKCdjb250YWRvcicpO1xyXG4gICAgdmFyIG15SWQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludCgxMDAgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwKSkgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDApLy8rJy0nK25ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgYWxsT3BlbmVkVGFic1tteUlkXSA9IDE7XHJcbiAgICBpbmZvT3BlbmVkVGFicy5teUlkID0gbXlJZDtcclxuICAgIHZhciBldmVudCA9IG5ldyBFdmVudCgnbXktdGFicycpO1xyXG4gICAgYmMub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2KSB7XHJcbiAgICAgICAgaWYgKGV2LmRhdGEucXVlID09ICdzb3knKSB7XHJcbiAgICAgICAgICAgIGlmICghYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSkge1xyXG4gICAgICAgICAgICAgICAgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXYuZGF0YS5xdWUgPT0gJ3VubG9hZCcpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChldi5kYXRhLnF1ZSA9PSAnbG9hZCcpIHtcclxuICAgICAgICAgICAgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSA9IDE7XHJcbiAgICAgICAgICAgIGJjLnBvc3RNZXNzYWdlKHsgcXVlOiAnc295JywgaWQ6IG15SWQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGluZm9PcGVuZWRUYWJzLm90aGVyVGFic05hbWVzID0gbGlrZUFyKGFsbE9wZW5lZFRhYnMpLmZpbHRlcigoXywgaWQpID0+IGlkICE9IG15SWQpLmpvaW4oJywnKTtcclxuICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICB9O1xyXG4gICAgYmMucG9zdE1lc3NhZ2UoeyBxdWU6ICdsb2FkJywgaWQ6IG15SWQgfSk7XHJcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5sb2FkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGJjLnBvc3RNZXNzYWdlKHsgcXVlOiAndW5sb2FkJywgaWQ6IG15SWQgfSk7XHJcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgfSlcclxuICAgIC8vbW9zdHJhclF1aWVuZXNTb21vcygpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0TGlicmVEZXNwbGllZ3VlID0gKGxpYnJlOiBMaWJyZURlc3BsaWVndWVUeXBlKSA9PiBMaWJyZURlc3BsaWVndWUgPSBsaWJyZVxyXG5cclxuc2V0TGlicmVEZXNwbGllZ3VlKChwcm9wczoge1xyXG4gICAga2V5OiBzdHJpbmdcclxuICAgIGNhc2lsbGVybzogTGlicmVcclxuICAgIGZvcm11bGFyaW86IEZvcm11bGFyaW9cclxuICAgIGZvclBrOiBGb3JQa1xyXG59KSA9PiA8ZGl2IGtleT17cHJvcHMua2V5fSBpZD17cHJvcHMuY2FzaWxsZXJvLmlkX2Nhc2lsbGVyb30+ZXN0ZSBjYXNpbGxlcm8gZGViZSByZWRlZmluaXJzZSBlbiBsYSBBUFAgZmluYWwgeSBzdSB1c28gZXMgZXhjbHVzaXZvIGRlbCDDoXJlYSBpbmZvcm3DoXRpY2E8L2Rpdj4pXHJcblxyXG5zZXRDYWxjdWxhclZhcmlhYmxlcygocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQazogRm9yUGspID0+IHtcclxuICAgIHR5cGUgQ29uZmlnUGFkcmUgPSB7XHJcbiAgICAgICAgdWFQZXJzb25hczogSWRVbmlkYWRBbmFsaXNpc1xyXG4gICAgICAgIHZhclNleG9QZXJzb25hOiBJZFZhcmlhYmxlXHJcbiAgICAgICAgdmFyTm9tYnJlUGVyc29uYTogSWRWYXJpYWJsZVxyXG4gICAgICAgIHZhckxvc05vbWJyZXM6IElkVmFyaWFibGVcclxuICAgIH1cclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgdmFyIGF1dG9DYXJnYXJQZXJzb25hcyA9IChjb25maWdQYWRyZTogQ29uZmlnUGFkcmUsIHVhUGFkcmVQZXJzb25hczogSWRVbmlkYWRBbmFsaXNpcywgZXN0cnVjdHVyYTogRXN0cnVjdHVyYSkgPT4ge1xyXG4gICAgICAgIHZhciBsZWVyTm9tYnJlcyA9IChyZXNwdWVzdGFzVUFQYWRyZTogUmVzcHVlc3RhcywgY29uZmlnUGFkcmU6IENvbmZpZ1BhZHJlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc10gfHwgZW1wdHkocmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc10pIHx8IHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdWzBdW2NvbmZpZ1BhZHJlLnZhclNleG9QZXJzb25hXSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG9zTm9tYnJlcyA9IHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnZhckxvc05vbWJyZXNdIGFzIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvc05vbWJyZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc10pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbG9zTm9tYnJlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJywnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChub21icmU6IHN0cmluZykgPT4gbm9tYnJlLnRyaW0oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgobm9tYnJlOiBzdHJpbmcsIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc11baV0gPSByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXVtpXSB8fCB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdW2ldW2NvbmZpZ1BhZHJlLnZhck5vbWJyZVBlcnNvbmFdID0gbm9tYnJlLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1YVBhZHJlUGVyc29uYXNdKSB7XHJcbiAgICAgICAgICAgIGlmICh1YVBhZHJlUGVyc29uYXMgPT0gJ3ZpdmllbmRhcycpIHtcclxuICAgICAgICAgICAgICAgIGxlZXJOb21icmVzKHJlc3B1ZXN0YXNSYWl6LCBjb25maWdQYWRyZSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHJlc3B1ZXN0YXNVQVBhZHJlIG9mIGl0ZXJhdG9yKHJlc3B1ZXN0YXNSYWl6W3VhUGFkcmVQZXJzb25hc10gPz8gW10pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVlck5vbWJyZXMocmVzcHVlc3Rhc1VBUGFkcmUsIGNvbmZpZ1BhZHJlKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIHVhc0l0ZXJhcjogUGFydGlhbDx7XHJcbiAgICAgICAgW2tleSBpbiBJZFVuaWRhZEFuYWxpc2lzXTogQ29uZmlnUGFkcmVcclxuICAgIH0+O1xyXG4gICAgdmFyIGNvbmZpZ0VuY3U6IENvbmZpZ1BhZHJlID0ge1xyXG4gICAgICAgIHVhUGVyc29uYXM6ICdwZXJzb25hcycsXHJcbiAgICAgICAgdmFyU2V4b1BlcnNvbmE6ICdzZXhvJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhck5vbWJyZVBlcnNvbmE6ICdub21icmUnIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgdmFyTG9zTm9tYnJlczogXCJsb3Nfbm9tYnJlc1wiIGFzIElkVmFyaWFibGVcclxuICAgIH07XHJcbiAgICB2YXIgY29uZmlnU3VwZTogQ29uZmlnUGFkcmUgPSB7XHJcbiAgICAgICAgdWFQZXJzb25hczogJ3BlcnNvbmFzX3N1cCcgYXMgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgICAgICB2YXJTZXhvUGVyc29uYTogJ3NleG9fc3VwJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhck5vbWJyZVBlcnNvbmE6ICdub21icmVfc3VwJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhckxvc05vbWJyZXM6IFwibm9tYnJlc19jb21wb25lbnRlc19zdXBcIiBhcyBJZFZhcmlhYmxlXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChlc3RydWN0dXJhLmNvblJlYUhvZ2FyKSB7XHJcbiAgICAgICAgdWFzSXRlcmFyID0ge1xyXG4gICAgICAgICAgICBob2dhcmVzOiBjb25maWdFbmN1LFxyXG4gICAgICAgICAgICBbXCJob2dhcmVzX3N1cFwiIGFzIElkVW5pZGFkQW5hbGlzaXNdOiBjb25maWdTdXBlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpa2VBcih1YXNJdGVyYXIpLmZvckVhY2goKGNvbmZpZ1BhZHJlLCB1YVBhZHJlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb25maWdQYWRyZSkge1xyXG4gICAgICAgICAgICAgICAgYXV0b0NhcmdhclBlcnNvbmFzKGNvbmZpZ1BhZHJlLCB1YVBhZHJlIGFzIElkVW5pZGFkQW5hbGlzaXMsIGVzdHJ1Y3R1cmEpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgY29uZmlnUGFkcmVzOiBDb25maWdQYWRyZVtdID0gW2NvbmZpZ0VuY3UsIGNvbmZpZ1N1cGVdO1xyXG4gICAgICAgIGNvbmZpZ1BhZHJlcy5mb3JFYWNoKChjb25maWdQYWRyZSkgPT4ge1xyXG4gICAgICAgICAgICBhdXRvQ2FyZ2FyUGVyc29uYXMoY29uZmlnUGFkcmUsICd2aXZpZW5kYXMnLCBlc3RydWN0dXJhKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICByZXNwdWVzdGFzUmFpei52ZG9taW5pbyA9IGdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXV0udGVtLmRvbWluaW87XHJcbiAgICAvL1RPRE86IE1FSk9SQVIgRU4gQUxHVU4gTU9NRU5UTyBFTCBCT1RPTiBMSVNUT1xyXG4gICAgLy9sZXQgdG90YWxIID0gcmVzcHVlc3Rhc1JhaXpbJ3RvdGFsX2gnIGFzIElkVmFyaWFibGVdO1xyXG4gICAgLy9yZXNwdWVzdGFzUmFpelsnJEIuRjpTMScgYXMgSWRWYXJpYWJsZV0gPSAocmVzcHVlc3Rhc1JhaXpbJ2hvZ2FyZXMnXSB8fCBbXSkubGVuZ3RoID09IHRvdGFsSCA/ICdvaycgOiBudWxsO1xyXG4gICAgLy9sZXQgdG90YWxIc3VwID0gcmVzcHVlc3Rhc1JhaXpbJ3RvdGFsX2hfc3VwJyBhcyBJZFZhcmlhYmxlXTtcclxuICAgIC8vcmVzcHVlc3Rhc1JhaXpbJyRCLkY6UzFfU1VQJyBhcyBJZFZhcmlhYmxlXSA9IChyZXNwdWVzdGFzUmFpelsnaG9nYXJlc19zdXAnIGFzIElkVW5pZGFkQW5hbGlzaXNdIHx8IFtdKS5sZW5ndGggPT0gdG90YWxIc3VwID8gJ29rJyA6IG51bGw7XHJcbn0pXHJcblxyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgIGxvYWRJbnN0YW5jZSgpXHJcbn0pXHJcbi8vRklOIENPTlRST0wgUEVTVEHDkUFTXHJcblxyXG5mdW5jdGlvbiBsb2FkQ1NTKGNzc1VSTDogc3RyaW5nLCBpZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcclxuICAgICAgICBsaW5rLnJlbCA9ICdzdHlsZXNoZWV0JztcclxuICAgICAgICBsaW5rLmhyZWYgPSBjc3NVUkw7XHJcbiAgICAgICAgbGluay5pZCA9IGlkIHx8IGNzc1VSTDtcclxuICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgICAgIGxpbmsub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGB0cmFlICR7Y3NzVVJMfWApO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGluay5vbmVycm9yID0gKGVycikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgY2FyZ2FuZG8gZWwgZXN0aWxvJywgZXJyKVxyXG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBwcm9ibGVtYSBjYXJnYW5kbyBlc3RpbG8gJHtjc3NVUkx9YCkpXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZUNTU0J5SWQoaWQ6IHN0cmluZykge1xyXG4gICAgdmFyIGxpbmtOb2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG4gICAgbGlua05vZGU/LnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKGxpbmtOb2RlKTtcclxufVxyXG5cclxuY29uc3QgQk9PVFNUUkFQXzVfMV8zX1NSQyA9ICdjc3MvYm9vdHN0cmFwLm1pbi5jc3MnOyJdfQ==
|
|
1850
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvcmVuZGVyLWZvcm11bGFyaW8udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBK0ZBLHNDQU9DO0lBdzJERCw0QkFLQztJQWtNRCxvREFTQztJQUVELG9HQU9DO0lBRUQsb0NBZUM7SUFzRUQsa0NBSUM7SUFFRCxvREFpQ0M7SUFVRCxnQ0FjQztJQUVELDhCQVNDO0lBOENELDBDQVNDO0lBRUQsOERBVUM7SUFFRCw4REFpQkM7SUE5NUVELCtCQUErQjtJQUMvQixzQ0FBc0M7SUFDdEMscURBUTBCO0lBQzFCLG1DQWdCaUI7SUFDakIsMkRBYzRCO0lBQzVCLHlEQUk0QjtJQUM1QixpQ0FBNEM7SUFDNUMsNkNBQXVEO0lBQ3ZELHFDQUEyQztJQUMzQywrQ0FBeUQ7SUFDekQsMkNBQXdDO0lBRXhDLDRDQU11QjtJQUd2QiwyREFlNEI7SUFFNUIsMkNBQTJDO0lBRTNDLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUcxQixTQUFTLGNBQWMsQ0FBQyxJQUFtQixFQUFFLFdBQWtEO1FBQzNGLElBQUksT0FBTyxJQUFJLElBQUksUUFBUTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3pDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEUsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQy9GLElBQUksQ0FBQyxXQUFX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QyxNQUFNLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQztZQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztZQUNuQixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxNQUFNLENBQUM7WUFDdkIsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7Z0JBQ2YsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDO1lBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixFQUFFLEdBQUcsQ0FBQyxDQUFBO2dCQUM1QyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsNEJBQTRCLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQTtZQUMzRCxDQUFDLENBQUE7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxTQUFTLGFBQWEsQ0FBQyxFQUFVOztRQUM3QixJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLFVBQVUsMENBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxNQUFNLG1CQUFtQixHQUFHLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCAqIGFzIFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcclxuaW1wb3J0IHtcclxuICAgIFJlbmRlclByaW5jaXBhbCxcclxuICAgIGFkYXB0YXJUaXBvVmFyQ2FzaWxsZXJvLFxyXG4gICAgSUNPTixcclxuICAgIHNjcm9sbFRvVG9wLFxyXG4gICAgbWF0ZXJpYWxJb0ljb25zU3ZnUGF0aCxcclxuICAgIHVzZU9ubGluZVN0YXR1cyxcclxuICAgIFJlbmRlcml6YWRvckpTT05cclxufSBmcm9tIFwiLi9yZW5kZXItZ2VuZXJhbFwiO1xyXG5pbXBvcnQge1xyXG4gICAgQmxvcXVlLCBCb3RvbkZvcm11bGFyaW8sXHJcbiAgICBDYXNpbGxlcm9CYXNlLCBDYXNvU3RhdGUsIENvbmp1bnRvUHJlZ3VudGFzLCBDb25zaXN0ZW5jaWEsXHJcbiAgICBFc3RhZG9DYXJnYSwgRmlsdHJvLCBGb3JQaywgRm9yUGtSYWl6LCBGb3JtdWxhcmlvLFxyXG4gICAgSWRGb3JtdWxhcmlvLCBJZFByZWd1bnRhLCBJZFRhcmVhLCBJZFZhcmlhYmxlLCBJbmZvRm9ybXVsYXJpbyxcclxuICAgIE1vZG9EZXNwbGllZ3VlLFxyXG4gICAgT3BjaW9uLCBPcGNpb25NdWx0aXBsZSwgUGxhaW5Gb3JQayxcclxuICAgIFByZWd1bnRhLCBQcmVndW50YUNvbk9wY2lvbmVzLCBQcmVndW50YVNpbXBsZSxcclxuICAgIFJlc3B1ZXN0YXMsIFJlc3B1ZXN0YUxhc1VBLCBSZXNwdWVzdGFzUmFpeiwgVmFsb3IsIFRFTSwgSWRDYXJnYSwgQ2FyZ2EsIElkRmluLCBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgdG9QbGFpbkZvclBrLFxyXG4gICAgSWRDYXNpbGxlcm8sXHJcbiAgICBQcmVndW50YUNvblNpTm8sXHJcbiAgICBUZXh0bywgRXN0cnVjdHVyYSwgSW5mb3JtYWNpb25IZHIsIENvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLCBSZXN1bWVuRXN0YWRvLCBJZE9wZXJhdGl2bywgSWRFbmMsIExpYnJlLFxyXG4gICAgaXRlcmF0b3IsIGVtcHR5LCBDb25maWd1cmFjaW9uSGFiaWxpdGFyQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgUE1hdHJpeixcclxuICAgIE1vZG9ETVxyXG59IGZyb20gXCIuL3RpcG9zXCI7XHJcbmltcG9ydCB7XHJcbiAgICBhY2Npb25fYWJyaXJfZm9ybXVsYXJpbyxcclxuICAgIGFjY2lvbl9ib3JyYXJfZm9ybXVsYXJpbyxcclxuICAgIGNhbGN1bGFyQWN0dWFsQkYsXHJcbiAgICBjYWxjdWxhckRpc2FibGVkQkYsXHJcbiAgICBjYWxjdWxhclBlcm1pdGVCb3JyYXJCRixcclxuICAgIGNhbGN1bGFyUmVzdW1lblZpdmllbmRhLFxyXG4gICAgY3JlYXJFbmN1ZXN0YSxcclxuICAgIGdldERhdG9zQnlQYXNzLFxyXG4gICAgZ2V0Rm9ybXVsYXJpb3NGb3JWYWx1ZVBrUmFpeixcclxuICAgIGdldE1haW5Gb3JtRm9yVml2aWVuZGEsXHJcbiAgICBpbnRlbnRhckJhY2t1cCxcclxuICAgIHJlc3B1ZXN0YXNGb3JQayxcclxuICAgIHNldENhbGN1bGFyVmFyaWFibGVzXHJcbn0gZnJvbSBcIi4vYnlwYXNzLWZvcm11bGFyaW9cIlxyXG5pbXBvcnQge1xyXG4gICAgZG1UcmFlckRhdG9zRm9ybXVsYXJpbywgZGlzcGF0Y2hlcnMsXHJcbiAgICBnb3RvU2luY3Jvbml6YXIsXHJcbiAgICBnb3RvQ29uc2lzdGlyLFxyXG59IGZyb20gXCIuL3JlZHV4LWZvcm11bGFyaW9cIjtcclxuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyB1c2VTZWxlY3RvciwgdXNlRGlzcGF0Y2ggfSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcclxuaW1wb3J0IHsgc3RyaWN0IGFzIGxpa2VBciB9IGZyb20gXCJsaWtlLWFyXCI7XHJcbmltcG9ydCB7IHNsZWVwLCBjb2FsZXNjZSwgZGF0ZXRpbWUgfSBmcm9tIFwiYmVzdC1nbG9iYWxzXCI7XHJcbmltcG9ydCB7IHVuZXhwZWN0ZWQgfSBmcm9tIFwiY2FzdC1lcnJvclwiO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIEFwcEJhciwgQnV0dG9uR3JvdXAsIENoZWNrYm94LFxyXG4gICAgRGlhbG9nLCBEaWFsb2dBY3Rpb25zLCBEaWFsb2dDb250ZW50LCBEaWFsb2dDb250ZW50VGV4dCxcclxuICAgIERpYWxvZ1RpdGxlLCBEaXZpZGVyLCBGYWIsXHJcbiAgICBNZW51LCBNZW51SXRlbSwgUGFwZXIsIFBvcG92ZXIsXHJcbiAgICBUYWJsZSwgVGFibGVCb2R5LCBUYWJsZUNlbGwsIFRhYmxlSGVhZCwgVGFibGVSb3csIFRvb2xiYXJcclxufSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xyXG5pbXBvcnQgeyBFc3RhZG9WYXJpYWJsZSwgRm9ybVN0cnVjdHVyZVN0YXRlIH0gZnJvbSBcInJvdy12YWxpZGF0b3JcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50bywgc2V0QXR0ckRpc3RpbnRvLCBzZXRWYWxvckRpc3RpbnRvLCBkaXNwYXRjaEJ5UGFzcyxcclxuICAgIGdldERpcnR5LCBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcixcclxuICAgIGdldEZ1bmNpb25IYWJpbGl0YXIsXHJcbiAgICBnZXRFc3RydWN0dXJhLFxyXG4gICAgZGVmT3BlcmF0aXZvLFxyXG4gICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyxcclxuICAgIG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSxcclxuICAgIGNhbGN1bGFyRWxlbWVudG9FbmZvY2FkbyxcclxuICAgIGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLFxyXG4gICAgYWNjaW9uX2lkX3ByZWd1bnRhLFxyXG4gICAgYWNjaW9uX2FncmVnYXJfZm9ybXVsYXJpbyxcclxuICAgIE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8sXHJcbiAgICBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyxcclxuICAgIE1PRE9fRE1fTE9DQUxTVE9SQUdFX0tFWVxyXG59IGZyb20gXCIuL2J5cGFzcy1mb3JtdWxhcmlvXCJcclxuXHJcbmltcG9ydCB7IGh0bWwsIEh0bWxUYWcgfSBmcm9tIFwianMtdG8taHRtbFwiO1xyXG5cclxuY29uc3QgREVMQVlfU0NST0xMXzMgPSA1MDtcclxuXHJcbmZ1bmN0aW9uIGJyZWFrZWFibGVUZXh0KHRleHQ6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcgfCBudWxsO1xyXG5mdW5jdGlvbiBicmVha2VhYmxlVGV4dCh0ZXh0OiBzdHJpbmcgfCBudWxsLCBkaWNjaW9uYXJpbz86IHsgW2NsYXZlOiBzdHJpbmddOiBSZWFjdC5SZWFjdE5vZGUgfSkge1xyXG4gICAgaWYgKHR5cGVvZiB0ZXh0ICE9IFwic3RyaW5nXCIpIHJldHVybiBudWxsO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFwvL2csIFwiL1xcdTIwNjNcIikucmVwbGFjZSgvXFwvXFx1MjA2MyhcXHcpXFxiL2csICcvJDEnKTtcclxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL19fXyovZywgKHRvZG8pID0+IGBbJHt0b2RvfV1gKS5yZXBsYWNlKC9cXEBcXHcrXFxAL2csICh0b2RvKSA9PiBgWyR7dG9kb31dYCk7XHJcbiAgICBpZiAoIWRpY2Npb25hcmlvIHx8IHRydWUpIHJldHVybiB0ZXh0O1xyXG4gICAgLypcclxuICAgIHJldHVybiA8c3Bhbj57cGFydGVzLm1hcCgocGFydGU6c3RyaW5nLCBpOm51bWJlcikgPT4gPHNwYW4gc3R5bGU9e2klMj09MT97dGV4dERlY29yYXRpb246XCJ1bmRlcmxpbmVcIn06e319PiB7cGFydGUrXCIgXCJ9IDwvc3Bhbj4pfTwvc3Bhbj5cclxuICAgICovXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRCRlZhck5hbWVzKHNhbHRvOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICBjb25zdCBhcm1vTm9tU2FsdG8gPSBzYWx0bz8uc3Vic3RyaW5nKDAsIDIpID09ICdGOicgPyBzYWx0by5zbGljZSgyKSA6IHNhbHRvO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBsaXN0bzogJyRCLkY6JyArIGFybW9Ob21TYWx0byBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIGFncmVnYXI6ICckQi5GOicgKyBhcm1vTm9tU2FsdG8gKyAnX2FncmVnYXInIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgaWRGb3JtdWxhcmlvOiAnRjonICsgYXJtb05vbVNhbHRvIGFzIElkRm9ybXVsYXJpb1xyXG4gICAgfTtcclxufVxyXG5cclxuY29uc3QgVkVSX0RPTUlOSU8gPSBmYWxzZTsgLy8gZWwgZW5jdWVzdGFkb3Igbm8gbmVjZXNpdGEgdmVyIGVsIGRvbWluaW8gZW4gY2FkYSBlbmN1ZXN0YSBwb3JxdWUgZWwgZG9taW5pbyBkZXBlbmRlIGRlbCDDoXJlYSB5IHNlIGRlZHVjZSBkZWwgcHJpbWVyIGTDrWdpdG8gZGVsIG7Dum1lcm8gZGUgZW5jdWVzdGFcclxuLy8gbm8gcG9uZXIgVkVSX0RPTUlOSU8gZW4gdHJ1ZSwgY2FtYmlhciBwb3IgdW5hIHZhcmlhYmxlIHF1ZSBzZSBmaWplIHNpIGVsIERNIGVzdMOhIGVuIG1vZG8gcHJ1ZWJhIG8gZW4gbW9kbyBcImRpc2XDsW8gY29uY2VwdHVhbFwiXHJcblxyXG5jb25zdCBJRF9CT1RPTl9WT0xWRVJfSERSID0gJ2JvdG9uLXZvbHZlci1oZHInO1xyXG5jb25zdCBJRF9CT1RPTl9DRVJSQVIgPSAnYm90b24tY2VycmFyLWVuY3Vlc3RhJztcclxuXHJcbnZhciBkZWJlU2FsdGFyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IHtcclxuICAgIC8qXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldjpLZXlib2FyZEV2ZW50KT0+e1xyXG4gICAgICAgIGRlYmVTYWx0YXIgPSBldi5rZXkgPT0gJ0VudGVyJyB8fCBldi5rZXlDb2RlID09IDEzO1xyXG4gICAgfSlcclxuICAgICovXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgZGViZVNhbHRhciA9IGZhbHNlO1xyXG4gICAgfSlcclxufSlcclxuXHJcbi8vIC8qXHJcblxyXG50eXBlIENvbW1vbkF0dHJpYnV0ZXMgPSB7IGNsYXNzTmFtZT86IHN0cmluZywgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzLCBpZD86IHN0cmluZywgdGFiSW5kZXg/OiBudW1iZXIgfSAvLyBDU1NQcm9wZXJ0aWVzXHJcbnR5cGUgQ29sb3JWYWx1ZXMgPSAncHJpbWFyeScgfCAnc2Vjb25kYXJ5JyB8ICdkZWZhdWx0JyB8ICdpbmhlcml0JyB8ICdzdWNjZXNzJ1xyXG5cclxuZXhwb3J0IHR5cGUgTGlicmVEZXNwbGllZ3VlVHlwZSA9IChwcm9wczoge1xyXG4gICAga2V5OiBzdHJpbmdcclxuICAgIGNhc2lsbGVybzogTGlicmVcclxuICAgIGZvcm11bGFyaW86IEZvcm11bGFyaW9cclxuICAgIGZvclBrOiBGb3JQa1xyXG59KSA9PiBKU1guRWxlbWVudDtcclxuXHJcbnZhciBMaWJyZURlc3BsaWVndWU6IExpYnJlRGVzcGxpZWd1ZVR5cGVcclxuXHJcbmV4cG9ydCBjb25zdCBCdXR0b24gPSAoeyB2YXJpYW50LCBvbkNsaWNrLCBkaXNhYmxlZCwgY2hpbGRyZW4sIGNsYXNzTmFtZSwgY29sb3IsIHNpemUsXHJcbiAgICBkaXNhYmxlRWxldmF0aW9uLCBkaXNhYmxlRm9jdXNSaXBwbGUsIGRpc2FibGVSaXBwbGUsIHR5cGUsXHJcbiAgICAuLi5vdGhlclxyXG59OiB7XHJcbiAgICB2YXJpYW50Pzogc3RyaW5nLFxyXG4gICAgY29sb3I/OiBDb2xvclZhbHVlcyxcclxuICAgIG9uQ2xpY2s/OiBSZWFjdC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MQnV0dG9uRWxlbWVudD4sIC8vICAoZXZlbnQ6TW91c2VFdmVudC8qIDxIVE1MQnV0dG9uRWxlbWVudCwgTW91c2VFdmVudD4qLyk9PnZvaWQsXHJcbiAgICBkaXNhYmxlZD86IGJvb2xlYW5cclxuICAgIGNoaWxkcmVuOiBhbnksXHJcbiAgICBjbGFzc05hbWU/OiBzdHJpbmcsXHJcbiAgICBzaXplPzogJ3NtYWxsJyxcclxuICAgIHR5cGU/OiAnYnV0dG9uJyB8ICdzdWJtaXQnIHwgJ3Jlc2V0JyxcclxuICAgIGRpc2FibGVFbGV2YXRpb24/OiBhbnksIGRpc2FibGVGb2N1c1JpcHBsZT86IGFueSwgZGlzYWJsZVJpcHBsZT86IGFueSxcclxufSAmIENvbW1vbkF0dHJpYnV0ZXMpID0+IDxidXR0b25cclxuICAgIHsuLi5vdGhlcn1cclxuICAgIGNsYXNzTmFtZT17YGJ0biBidG4ke3ZhcmlhbnQgPT0gJ2NvbnRhaW5lZCcgPyAnJyA6ICctJyArICh2YXJpYW50ID09ICdvdXRsaW5lZCcgPyAnb3V0bGluZScgOiB2YXJpYW50KX0tJHsoY29sb3IgPT0gJ2RlZmF1bHQnIHx8IGNvbG9yID09ICdpbmhlcml0JyA/ICdzZWNvbmRhcnknIDogY29sb3IgPT0gJ3NlY29uZGFyeScgPyAnZGFuZ2VyJyA6IGNvbG9yKSB8fCAnc2Vjb25kYXJ5J30gJHtjbGFzc05hbWUgfHwgJyd9ICR7c2l6ZSA9PSAnc21hbGwnID8gJ2J0bi1zbScgOiAnJ31gfVxyXG4gICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxyXG4gICAgdHlwZT17dHlwZX1cclxuICAgIG9uQ2xpY2s9e29uQ2xpY2t9XHJcbj57Y2hpbGRyZW59PC9idXR0b24+O1xyXG5cclxuY29uc3Qgc3R5bGVUb0NzcyA9IChzdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgICBpZiAodHlwZW9mIHN0eWxlID09PSAnc3RyaW5nJyB8fCBzdHlsZSA9PSBudWxsKSByZXR1cm4gc3R5bGU7XHJcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoc3R5bGUpLm1hcCgoW2ssIHZdKSA9PlxyXG4gICAgICAgIGAke2sucmVwbGFjZSgvW0EtWl0vZywgbSA9PiBcIi1cIiArIG0udG9Mb3dlckNhc2UoKSl9OiR7dn1gXHJcbiAgICApLmpvaW4oJzsnKTtcclxufVxyXG5cclxuY29uc3QgQnV0dG9uMiA9ICh7IHZhcmlhbnQsIG9uQ2xpY2ssIGRpc2FibGVkLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCBjb2xvciwgc2l6ZSwgc3R5bGUsIC4uLm90aGVyIH06IHtcclxuICAgIHZhcmlhbnQ/OiBzdHJpbmcsXHJcbiAgICBjb2xvcj86IENvbG9yVmFsdWVzLFxyXG4gICAgb25DbGljaz86ICgpID0+IHZvaWQsXHJcbiAgICBkaXNhYmxlZD86IGJvb2xlYW5cclxuICAgIGNoaWxkcmVuOiBhbnksXHJcbiAgICBjbGFzc05hbWU/OiBzdHJpbmcsXHJcbiAgICBzaXplPzogJ3NtYWxsJyxcclxuICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHN0cmluZyxcclxuICAgICRhdHRycz86IHt9XHJcbn0gJiBDb21tb25BdHRyaWJ1dGVzKSA9PiBodG1sLmJ1dHRvbih7XHJcbiAgICAuLi5vdGhlcixcclxuICAgIHN0eWxlOiBzdHlsZVRvQ3NzKHN0eWxlKSxcclxuICAgIGNsYXNzOiBgYnRuIGJ0biR7dmFyaWFudCA9PSAnY29udGFpbmVkJyA/ICcnIDogJy0nICsgKHZhcmlhbnQgPT0gJ291dGxpbmVkJyA/ICdvdXRsaW5lJyA6IHZhcmlhbnQpfS0keyhjb2xvciA9PSAnZGVmYXVsdCcgfHwgY29sb3IgPT0gJ2luaGVyaXQnID8gJ3NlY29uZGFyeScgOiBjb2xvciA9PSAnc2Vjb25kYXJ5JyA/ICdkYW5nZXInIDogY29sb3IpIHx8ICdzZWNvbmRhcnknfSAke2NsYXNzTmFtZSB8fCAnJ30gJHtzaXplID09ICdzbWFsbCcgPyAnYnRuLXNtJyA6ICcnfWAsXHJcbiAgICBkaXNhYmxlZCxcclxuICAgICRvbjogeyBjbGljazogb25DbGljayB9XHJcbn0sIGNoaWxkcmVuKTtcclxuXHJcblxyXG5jb25zdCBUZXh0RmllbGQgPSAocHJvcHM6IHtcclxuICAgIGlkOiBzdHJpbmcsXHJcbiAgICBkaXNhYmxlZD86IGJvb2xlYW4sXHJcbiAgICBjbGFzc05hbWU/OiBzdHJpbmcsXHJcbiAgICBhdXRvRm9jdXM/OiBib29sZWFuLFxyXG4gICAgZnVsbFdpZHRoOiBib29sZWFuXHJcbiAgICBpbnB1dFByb3BzPzogYW55LFxyXG4gICAgdmFsdWU/OiBhbnksXHJcbiAgICB0eXBlOiBhbnksXHJcbiAgICBsYWJlbD86IHN0cmluZyxcclxuICAgIGVycm9yPzogYm9vbGVhbixcclxuICAgIGhlbHBlclRleHQ/OiBzdHJpbmcsXHJcbiAgICBtdWx0aWxpbmU/OiBib29sZWFuLFxyXG4gICAgb25DaGFuZ2U/OiAoZXZlbnQ6IGFueSkgPT4gdm9pZCxcclxuICAgIG9uRm9jdXM/OiAoZXZlbnQ6IGFueSkgPT4gdm9pZCxcclxuICAgIG9uQmx1cj86IChldmVudDogYW55LCB2YWxvcjogYW55KSA9PiB2b2lkLFxyXG4gICAgLy8gb25LZXlEb3duPzooZXZlbnQ6S2V5Ym9hcmRFdmVudCk9PnZvaWQgLy8gS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD5cclxuICAgIG9uS2V5RG93bj86IFJlYWN0LktleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+XHJcbn0pID0+IDxpbnB1dFxyXG4gICAgICAgIHsuLi5wcm9wcy5pbnB1dFByb3BzfVxyXG4gICAgICAgIGlkPXtwcm9wcy5pZH1cclxuICAgICAgICBkaXNhYmxlZD17cHJvcHMuZGlzYWJsZWR9XHJcbiAgICAgICAgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9XHJcbiAgICAgICAgYXV0b0ZvY3VzPXtwcm9wcy5hdXRvRm9jdXN9XHJcbiAgICAgICAgdmFsdWU9e3Byb3BzLnZhbHVlfVxyXG4gICAgICAgIHR5cGU9e3Byb3BzLnR5cGV9XHJcbiAgICAgICAgb25DaGFuZ2U9e3Byb3BzLm9uQ2hhbmdlfVxyXG4gICAgICAgIG9uRm9jdXM9e3Byb3BzLm9uRm9jdXN9XHJcbiAgICAgICAgb25CbHVyPXsoZXZ0KSA9PiBwcm9wcy5vbkJsdXI/LihldnQsIGV2dC50YXJnZXQudmFsdWUpfVxyXG4gICAgICAgIG9uS2V5RG93bj17cHJvcHMub25LZXlEb3dufVxyXG4gICAgICAgIHBsYWNlaG9sZGVyPXtwcm9wcy5sYWJlbH1cclxuICAgIC8+O1xyXG5cclxuY29uc3QgVHlwb2dyYXBoeSA9ICh7IGNoaWxkcmVuLCAuLi5vdGhlcnMgfToge1xyXG4gICAgY2hpbGRyZW46IGFueSxcclxuICAgIGNvbXBvbmVudD86IHN0cmluZ1xyXG4gICAgdmFyaWFudD86ICdoNidcclxufSAmIENvbW1vbkF0dHJpYnV0ZXMpID0+IFJlYWN0LmNyZWF0ZUVsZW1lbnQob3RoZXJzLnZhcmlhbnQgfHwgb3RoZXJzLmNvbXBvbmVudCB8fCAnZGl2Jywgb3RoZXJzLCBjaGlsZHJlbik7XHJcblxyXG5mdW5jdGlvbiBHcmlkKHByb3BzOiB7XHJcbiAgICBjb250YWluZXI/OiBib29sZWFuLFxyXG4gICAgc3BhY2luZz86IG51bWJlcixcclxuICAgIGl0ZW0/OiBib29sZWFuLFxyXG4gICAgd3JhcD86ICd3cmFwJyB8ICdub3dyYXAnLFxyXG4gICAgZGlyZWN0aW9uPzogJ3JvdycgfCAnY29sdW1uJ1xyXG4gICAgYWxpZ25JdGVtcz86ICdzdHJldGNoJyB8ICdmbGV4LXN0YXJ0JyB8ICdmbGV4LWVuZCcgfCAnY2VudGVyJyB8ICdiYXNlbGluZScsXHJcbiAgICBjaGlsZHJlbjogYW55LFxyXG4gICAgeHM/OiBudW1iZXIsXHJcbiAgICBzbT86IG51bWJlcixcclxufSAmIENvbW1vbkF0dHJpYnV0ZXMpIHtcclxuICAgIHZhciB7IGNvbnRhaW5lciwgaXRlbSwgd3JhcCwgZGlyZWN0aW9uLCBhbGlnbkl0ZW1zLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCB4cywgc20sIHNwYWNpbmcsIC4uLm90aGVyIH0gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2XHJcbiAgICAgICAgey4uLm90aGVyfVxyXG4gICAgICAgIGNsYXNzTmFtZT17YCR7Y2xhc3NOYW1lIHx8ICcnfSAke3hzICE9IG51bGwgPyAnZ3JpZC14cy0nICsgeHMgOiAnJ30gJHtzbSAhPSBudWxsID8gJ2dyaWQtc20tJyArIHNtIDogJyd9YH1cclxuICAgICAgICBzdHlsZT17Y29udGFpbmVyID8ge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgIGZsZXhXcmFwOiB3cmFwLFxyXG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiBkaXJlY3Rpb24sXHJcbiAgICAgICAgICAgIGFsaWduSXRlbXM6IGFsaWduSXRlbXMsXHJcbiAgICAgICAgICAgIG1hcmdpbjogc3BhY2luZyAhPSBudWxsID8gc3BhY2luZyAqIDggKyAncHgnIDogdW5kZWZpbmVkXHJcbiAgICAgICAgfSA6IHtcclxuICAgICAgICB9fVxyXG4gICAgPntjaGlsZHJlbn08L2Rpdj5cclxufVxyXG5cclxudmFyIHAxMiA9ICdwMTInIGFzIElkVmFyaWFibGU7XHJcbnZhciBzcDIgPSAnc3AyJyBhcyBJZFZhcmlhYmxlO1xyXG52YXIgc3AzID0gJ3NwMycgYXMgSWRWYXJpYWJsZTtcclxudmFyIHNwNCA9ICdzcDQnIGFzIElkVmFyaWFibGU7XHJcbnZhciBzcDUgPSAnc3A1JyBhcyBJZFZhcmlhYmxlO1xyXG5cclxuLypcclxuLy8gY29uc3QgdGFrZUVsZW1lbnRPckRlZmF1bHQ8SywgVCBleHRlbmRzIFtLIGluXSwgRD4oKVxyXG5mdW5jdGlvbiBpc0luPFYsIFQ+KGs6a2V5b2YgVCwgb2JqZWN0OlQpOiBvYmplY3Rba10gaXMgVntcclxuICAgIHJldHVybiB0cnVlXHJcbn1cclxuKi9cclxuZnVuY3Rpb24gdGFrZUVsZW1lbnRPckRlZmF1bHQ8ViwgSyBleHRlbmRzIHN0cmluZywgS08gZXh0ZW5kcyBzdHJpbmc+KGs6IEssIG9iamVjdDogeyBbayBpbiBLT106IFYgfSwgZGVmYXVsdFZhbHVlOiBWKTogViB7XHJcbiAgICByZXR1cm4gayBpbiBvYmplY3QgP1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgcG9yIGFsZ3VuYSByYXrDs24gVFMgbm8gcXVpZXJlIGVudGVuZGVyIHF1ZSBzaSBrIGVzdMOhIGVuIG9iamVjdCwgb2JqZWN0W2tdIGV4aXN0ZVxyXG4gICAgICAgIG9iamVjdFtrXVxyXG4gICAgICAgIDogZGVmYXVsdFZhbHVlXHJcbn1cclxuXHJcbmZ1bmN0aW9uIERlc3BsaWVndWVFbmNhYmV6YWRvKHByb3BzOiB7IGNhc2lsbGVybzogQ2FzaWxsZXJvRW5jYWJlemFibGUsIGxlZXI/OiBib29sZWFuIH0pIHtcclxuICAgIGNvbnN0IGZvclBrTnVsbCA9IHt9IGFzIEZvclBrO1xyXG4gICAgcmV0dXJuIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e3Byb3BzLmNhc2lsbGVyb30gbGVlcj17cHJvcHMubGVlcn0gZm9yUGs9e2ZvclBrTnVsbH0gLz47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHN1YmlySGFzdGEoZWxlbWVudG86IEhUTUxFbGVtZW50IHwgbnVsbCwgZnVuOiAoZWxlbWVudG86IEhUTUxFbGVtZW50KSA9PiBib29sZWFuKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcclxuICAgIGlmIChlbGVtZW50byA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChmdW4oZWxlbWVudG8pKSByZXR1cm4gZWxlbWVudG87XHJcbiAgICByZXR1cm4gc3ViaXJIYXN0YShlbGVtZW50by5wYXJlbnRFbGVtZW50LCBmdW4pO1xyXG59XHJcblxyXG52YXIgZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG5cclxuZnVuY3Rpb24gQm90b25Cb3JyYXIoeyBpZCwgdmFyaWFibGUsIGZvclBrLCB2YWxvck9wY2lvbiB9OiB7IGlkOiBzdHJpbmcsIHZhcmlhYmxlOiBJZFZhcmlhYmxlLCBmb3JQazogRm9yUGssIHZhbG9yT3BjaW9uPzogYW55IH0pIHtcclxuICAgIHZhciBoYW5kbGVDbGlja0JvcnJhciA9ICgpID0+IHtcclxuICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyByZXNwdWVzdGE6IG51bGwsIHZhcmlhYmxlOiB2YXJpYWJsZSwgZm9yUGs6IGZvclBrIH0pXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYm90b24tYm9ycmFyXCI+XHJcbiAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICBpZD17aWR9XHJcbiAgICAgICAgICAgIG1pLXZhcmlhYmxlPXt2YXJpYWJsZX1cclxuICAgICAgICAgICAgdmFsb3Itb3BjaW9uPXt2YWxvck9wY2lvbn1cclxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm90b24tb3BjaW9uIGJvdG9uLW9wY2lvbi1ib3JyYXJcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja0JvcnJhcn1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxJQ09OLkRlbGV0ZUZvcmV2ZXIgLz5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBTYWx0b0Rlc3BsaWVndWUoeyBjYXNpbGxlcm8sIHByZWZpam8gfTogeyBjYXNpbGxlcm86IFByZWd1bnRhIHwgT3BjaW9uIHwgRmlsdHJvLCBwcmVmaWpvPzogc3RyaW5nIH0pIHtcclxuICAgIHJldHVybiBjYXNpbGxlcm8uc2FsdG8gP1xyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFzZVwiPlxyXG4gICAgICAgICAgICB7cHJlZmlqbyA/IDxzcGFuIGNsYXNzTmFtZT1cInByZWZpam9cIj57cHJlZmlqb30gPC9zcGFuPiA6IG51bGx9XHJcbiAgICAgICAgICAgIDxJQ09OLlRyZW5kaW5nRmxhdCAvPjxzcGFuPntjYXNpbGxlcm8uc2FsdG99PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDogbnVsbFxyXG59XHJcblxyXG5mdW5jdGlvbiBPcGNpb25EZXNwbGllZ3VlKHByb3BzOiB7IGNhc2lsbGVybzogT3BjaW9uLCB2YWxvck9wY2lvbjogbnVtYmVyLCB2YXJpYWJsZTogSWRWYXJpYWJsZSwgZm9yUGs6IEZvclBrLCBsZWVyOiBib29sZWFuLCBjb25Cb3RvbkJvcnJhcjogYm9vbGVhbiB9KSB7XHJcbiAgICBjb25zdCB7IGNhc2lsbGVybyB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgc2FsdG9BdXRvbWF0aWNvID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+IHN0YXRlLm9wY2lvbmVzLnNhbHRvQXV0b21hdGljbyk7XHJcbiAgICB2YXIgaGFuZGxlQ2xpY2s6IFJlYWN0Lk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxCdXR0b25FbGVtZW50PiA9IGFzeW5jIChldmVudCkgPT4ge1xyXG4gICAgICAgIHZhciBjb250YWluZXIgPSBzdWJpckhhc3RhKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCwgZWxlbWVudG8gPT4gZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdwcmVndW50YScpIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnbXVsdGlwbGUnKSkgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JykhO1xyXG4gICAgICAgIHZhciB0aWVuZSA9IGNvbnRhaW5lci5nZXRBdHRyaWJ1dGUoJ2VzdG95LWJvcnJhbmRvJyk7XHJcbiAgICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnZXN0b3ktYm9ycmFuZG8nLCAnTk8nKTtcclxuICAgICAgICBpZiAoZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhci5zZXRBdHRyaWJ1dGUoJ2VzdG95LWJvcnJhbmRvJywgJ05PJyk7XHJcbiAgICAgICAgICAgIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB7IHJlY2VudE1vZGlmaWVkLCBzaWd1aWVudGVWYXJpYWJsZSB9ID0gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgcmVzcHVlc3RhOiBwcm9wcy52YWxvck9wY2lvbiwgdmFyaWFibGU6IHByb3BzLnZhcmlhYmxlLCBmb3JQazogcHJvcHMuZm9yUGsgfSk7XHJcbiAgICAgICAgaWYgKCFyZWNlbnRNb2RpZmllZCkge1xyXG4gICAgICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycsIHRpZW5lID09ICdTSScgPyAnTk8nIDogJ1NJJyk7XHJcbiAgICAgICAgICAgIGlmICh0aWVuZSAhPSAnU0knKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIgPSBjb250YWluZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoc2lndWllbnRlVmFyaWFibGUgJiYgc2FsdG9BdXRvbWF0aWNvKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYm90b25TdHlsZSA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5zdHlsZTtcclxuICAgICAgICAgICAgICAgIGlmIChib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJ2dyZWVuJztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKERFTEFZX1NDUk9MTF8zKTtcclxuICAgICAgICAgICAgICAgIGlmIChib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJ2JsdWUnO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgc2xlZXAoREVMQVlfU0NST0xMXzMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJvdG9uU3R5bGUpIGJvdG9uU3R5bGUuY29sb3IgPSAnZ3JlZW4nO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgc2xlZXAoREVMQVlfU0NST0xMXzMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJvdG9uU3R5bGUpIGJvdG9uU3R5bGUuY29sb3IgPSAnJztcclxuICAgICAgICAgICAgICAgIChjYXNpbGxlcm8uZXNwZWNpYWw/Lm5vU2Nyb2xsID09IHRydWUpID8gbnVsbCA6IGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUoY2FzaWxsZXJvLmVzcGVjaWFsPy5zY3JvbGxUbyA/PyBzaWd1aWVudGVWYXJpYWJsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIDxHcmlkIGNsYXNzTmFtZT1cIm9wY2lvblwiPlxyXG4gICAgICAgIHtwcm9wcy5jb25Cb3RvbkJvcnJhciA/IDxCb3RvbkJvcnJhclxyXG4gICAgICAgICAgICBpZD17YG9wY2lvbi12YXItJHtwcm9wcy52YXJpYWJsZX0tJHtwcm9wcy52YWxvck9wY2lvbn0tYm9ycmFyYH1cclxuICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICB2YXJpYWJsZT17cHJvcHMudmFyaWFibGV9XHJcbiAgICAgICAgICAgIHZhbG9yT3BjaW9uPXtwcm9wcy52YWxvck9wY2lvbn1cclxuICAgICAgICAvPiA6IG51bGx9XHJcbiAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICBpZD17YG9wY2lvbi12YXItJHtwcm9wcy52YXJpYWJsZX0tJHtwcm9wcy52YWxvck9wY2lvbn1gfVxyXG4gICAgICAgICAgICBtaS12YXJpYWJsZT17cHJvcHMudmFyaWFibGV9XHJcbiAgICAgICAgICAgIHZhbG9yLW9wY2lvbj17cHJvcHMudmFsb3JPcGNpb259XHJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvdG9uLW9wY2lvbiBib3Rvbi1vcGNpb24tc2VsZWNjaW9uXCJcclxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XHJcbiAgICAgICAgICAgIHRhYkluZGV4PXstMX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxHcmlkIGNvbnRhaW5lciB3cmFwPVwibm93cmFwXCI+XHJcbiAgICAgICAgICAgICAgICA8R3JpZCBjbGFzc05hbWU9XCJpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8udmVyX2lkIHx8IGNhc2lsbGVyby5jYXNpbGxlcm99XHJcbiAgICAgICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgICAgICAgICA8R3JpZCBjbGFzc05hbWU9XCJvcGNpb24tdGV4dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBkZWJlLWxlZXI9e2Nhc2lsbGVyby5sZWVyID8gJ1NJJyA6IGNhc2lsbGVyby5sZWVyID09PSBmYWxzZSA/ICdOTycgOiBwcm9wcy5sZWVyID8gJ1NJJyA6ICdOTyd9PnticmVha2VhYmxlVGV4dChjYXNpbGxlcm8ubm9tYnJlKX08L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAge2Nhc2lsbGVyby5hY2xhcmFjaW9uID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgY2xhc3NOYW1lPSdhY2xhcmFjaW9uJz57YnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLmFjbGFyYWNpb24pfTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsfVxyXG4gICAgICAgICAgICAgICAgPC9HcmlkPlxyXG4gICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgPFNhbHRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gLz5cclxuICAgIDwvR3JpZD5cclxufVxyXG5pbnRlcmZhY2UgSWNhc2lsbGVyb0Nvbk9wY2lvbmVzIHtcclxuICAgIHZhcl9uYW1lOiBJZFZhcmlhYmxlLFxyXG4gICAgZGVzcGxpZWd1ZUNvbnRlbmlkbzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB8IG51bGwsXHJcbiAgICBjYXNpbGxlcm9zOiBPcGNpb25bXVxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gU2lOb0Rlc3BsaWVndWUocHJvcHM6IHsgY2FzaWxsZXJvQ29uT3BjaW9uZXM6IEljYXNpbGxlcm9Db25PcGNpb25lcywgZm9yUGs6IEZvclBrLCBkZXNwbGllZ3VlQ29udGVuaWRvOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIH0pIHtcclxuICAgIHJldHVybiA8T3BjaW9uZXNEZXNwbGllZ3VlXHJcbiAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e3Byb3BzLmNhc2lsbGVyb0Nvbk9wY2lvbmVzfVxyXG4gICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICBsZWVyPXtmYWxzZX1cclxuICAgICAgICBkZXNwbGllZ3VlQ29udGVuaWRvPXtwcm9wcy5kZXNwbGllZ3VlQ29udGVuaWRvfVxyXG4gICAgLz5cclxufVxyXG5cclxuZnVuY3Rpb24gcmVnaXN0cmFkb3JEZVZhcmlhYmxlKHByZWd1bnRhOiBQcmVndW50YSB8IE9wY2lvbk11bHRpcGxlIHwgQ29uanVudG9QcmVndW50YXMpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcywgZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgZWxlbWVudG86IEhUTUxEaXZFbGVtZW50XHJcbiAgICApID0+IHtcclxuICAgICAgICB2YXIgdmFsb3JBY3R1YWwgPSBwcmVndW50YS52YXJfbmFtZSA9PSBudWxsID8gbnVsbCA6IHJlc3B1ZXN0YXNbcHJlZ3VudGEudmFyX25hbWVdO1xyXG4gICAgICAgIHZhciBmZWVkYmFja1JvdyA9IGZlZWRiYWNrRm9ybS5mZWVkYmFjaztcclxuICAgICAgICB2YXIgZmVlZGJhY2tWYXIgPSBwcmVndW50YS52YXJfbmFtZSA9PSBudWxsID8gbnVsbCA6IGZlZWRiYWNrUm93W3ByZWd1bnRhLnZhcl9uYW1lXTtcclxuICAgICAgICB2YXIgdGllbmVWYWxvciA9IHZhbG9yQWN0dWFsICE9IG51bGwgJiYgZmVlZGJhY2tWYXIgIT0gbnVsbCA/IChmZWVkYmFja1Zhci5jb25Qcm9ibGVtYSA/ICdpbnZhbGlkbycgOiAndmFsaWRvJykgOiAnTk8nO1xyXG4gICAgICAgIHZhciBlc3RhZG86IEVzdGFkb1ZhcmlhYmxlO1xyXG4gICAgICAgIGlmIChwcmVndW50YS50aXBvdmFyKSB7XHJcbiAgICAgICAgICAgIGVzdGFkbyA9IGZlZWRiYWNrVmFyPy5lc3RhZG8hO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBmZWVkYmFja011bHRpID0gcHJlZ3VudGEuY2FzaWxsZXJvcy5maWx0ZXIoYyA9PiBjLnZhcl9uYW1lICE9IG51bGwpLnJlZHVjZSgocHYsIG9tKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmIgPSBmZWVkYmFja1Jvdz8uW29tLnZhcl9uYW1lIV0hXHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpZW5lQWN0dWFsOiBwdi50aWVuZUFjdHVhbCB8fCBmYi5lc3RhZG8gPT0gJ2FjdHVhbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZXN0YVNhbHRlYWRhOiBwdi5lc3RhU2FsdGVhZGEgJiYgKGZiLmVzdGFkbyA9PSAnc2FsdGVhZGEnIHx8IGZiLmVzdGFkbyA9PSAnZnVlcmFfZGVfZmx1am9fcG9yX3NhbHRvJylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgeyB0aWVuZUFjdHVhbDogZmFsc2UsIGVzdGFTYWx0ZWFkYTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgZXN0YWRvID0gZmVlZGJhY2tNdWx0aS50aWVuZUFjdHVhbCA/ICdhY3R1YWwnIDogZmVlZGJhY2tNdWx0aS5lc3RhU2FsdGVhZGEgPyAnc2FsdGVhZGEnIDogJ3RvZGF2aWFfbm8nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldEF0dHJEaXN0aW50byhlbGVtZW50bywgJ251ZXN0cm8tdmFsaWRhdG9yJywgZXN0YWRvKTtcclxuICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG8sICd0aWVuZS12YWxvcicsIHRpZW5lVmFsb3IpO1xyXG4gICAgICAgIHNldEF0dHJEaXN0aW50byhlbGVtZW50bywgJ2VzdGEtaW5oYWJpbGl0YWRhJywgZmVlZGJhY2tWYXI/LmluaGFiaWxpdGFkYSA/ICdTSScgOiAnTk8nKTtcclxuICAgICAgICBpZiAocHJlZ3VudGEudmFyX25hbWUpIHtcclxuICAgICAgICAgICAgdmFyIG9wY2lvbmVzOiBIVE1MQnV0dG9uRWxlbWVudFtdID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWxlbWVudG8ucXVlcnlTZWxlY3RvckFsbChgLmJvdG9uLW9wY2lvblttaS12YXJpYWJsZT1cIiR7cHJlZ3VudGEudmFyX25hbWV9XCJdYCksIDApO1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9PcGNpb246IEhUTUxCdXR0b25FbGVtZW50O1xyXG4gICAgICAgICAgICBmb3IgKGVsZW1lbnRvT3BjaW9uIG9mIG9wY2lvbmVzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsb3JPcGNpb24gPSBlbGVtZW50b09wY2lvbi5nZXRBdHRyaWJ1dGUoJ3ZhbG9yLW9wY2lvbicpO1xyXG4gICAgICAgICAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGVsZW1lbnRvT3BjaW9uLCAnb3BjaW9uLXNlbGVjY2lvbmFkYScsIHZhbG9yT3BjaW9uID09IHZhbG9yQWN0dWFsID8gXCJTSVwiIDogXCJOT1wiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50b3NJbnB1dDogSFRNTElucHV0RWxlbWVudFtdID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWxlbWVudG8ucXVlcnlTZWxlY3RvckFsbCgnLnZhcmlhYmxlJykpO1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9JbnB1dDogSFRNTElucHV0RWxlbWVudDtcclxuICAgICAgICAgICAgZm9yIChlbGVtZW50b0lucHV0IG9mIGVsZW1lbnRvc0lucHV0KSB7XHJcbiAgICAgICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGVsZW1lbnRvSW5wdXQsICd2YWx1ZScsIHZhbG9yQWN0dWFsID09IG51bGwgPyAnJyA6IHZhbG9yQWN0dWFsLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBib3Rvbk5zTmMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5zbmMtcHJlZ3VudGEtXCIgKyBwcmVndW50YS52YXJfbmFtZSkhO1xyXG4gICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oYm90b25Oc05jLCAnb3BjaW9uLXNlbGVjY2lvbmFkYScsIHZhbG9yQWN0dWFsID09IChwcmVndW50YS52YWxvcl9uc19uYyA/PyAtOSkgPyBcIlNJXCIgOiBcIk5PXCIpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBPcGNpb25NdWx0aXBsZURlc3BsaWVndWUocHJvcHM6IHsgb3BjaW9uTTogT3BjaW9uTXVsdGlwbGUsIGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICBjb25zdCB7IG9wY2lvbk0gfSA9IHByb3BzO1xyXG4gICAgdmFyIGlkID0gYG9wY2lvbk0tJHtvcGNpb25NLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgdmFyIHN0eWxlczogUmVhY3QuQ1NTUHJvcGVydGllcyA9IG9wY2lvbk0uZXNwZWNpYWw/LmZsZXhEaXJlY3Rpb24gPyB7IGZsZXhEaXJlY3Rpb246IG9wY2lvbk0uZXNwZWNpYWwuZmxleERpcmVjdGlvbiB9IDogeyBmbGV4V3JhcDogJ3dyYXAnIH07XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsXHJcbiAgICAgICAgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgIGZ1bjogcmVnaXN0cmFkb3JEZVZhcmlhYmxlKG9wY2lvbk0pXHJcbiAgICB9KVxyXG4gICAgY29uc3QgdXBkYXRlV2luZG93V2lkdGggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgc2V0V2luZG93V2lkdGgod2luZG93LmlubmVyV2lkdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IFt3aW5kb3dXaWR0aCwgc2V0V2luZG93V2lkdGhdID0gdXNlU3RhdGUod2luZG93LmlubmVyV2lkdGgpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZVdpbmRvd1dpZHRoKTtcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvXHJcbiAgICAgICAgaWQ9e2lkfVxyXG4gICAgICAgIGNhc2lsbGVybz17b3BjaW9uTX1cclxuICAgICAgICBkZXNwbGllZ3VlRW5jYWJlemFkbz0nbGF0ZXJhbCdcclxuICAgICAgICBzdHlsZT17c3R5bGVzfVxyXG4gICAgPlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICBjYXNpbGxlcm89e29wY2lvbk19XHJcbiAgICAgICAgICAgIHZlcklkR3Vpb249e3RydWV9XHJcbiAgICAgICAgICAgIGxlZXI9e29wY2lvbk0ubGVlciAhPT0gZmFsc2V9XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgc3R5bGU9e3sgbWF4V2lkdGg6IHdpbmRvd1dpZHRoIC0gNDAwIH19IC8vVE9ETyBNRUpPUkFSXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8U2lOb0Rlc3BsaWVndWVcclxuICAgICAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e29wY2lvbk19XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgZGVzcGxpZWd1ZUNvbnRlbmlkbz17cHJvcHMub3BjaW9uTS5kZXNwbGllZ3VlQ29udGVuaWRvID8/ICdob3Jpem9udGFsJ31cclxuICAgICAgICAvPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbnR5cGUgQ2FzaWxsZXJvRW5jYWJlemFibGUgPSBGb3JtdWxhcmlvIHwgQmxvcXVlIHwgRmlsdHJvIHwgQ29uanVudG9QcmVndW50YXMgfCBQcmVndW50YSB8IE9wY2lvbk11bHRpcGxlIHwgUHJlZ3VudGFTaW1wbGUgfCBDb25zaXN0ZW5jaWEgfCBUZXh0byB8IFBNYXRyaXpcclxuXHJcbmNvbnN0IGdldExvc01ldGFkYXRvcyA9IChjYXNpbGxlcm86IENhc2lsbGVyb0VuY2FiZXphYmxlKTogUmVhY3QuSlNYLkVsZW1lbnQgPT5cclxuICAgIDxkaXYgbG9zLW1ldGFkYXRvcz1cInNpXCI+XHJcbiAgICAgICAgPHNwYW4gZWwtbWV0YWRhdG89XCJ2YXJpYWJsZVwiPntjYXNpbGxlcm8udmFyX25hbWV9PC9zcGFuPlxyXG4gICAgICAgIHtjYXNpbGxlcm8udGlwb3ZhciAmJiBjYXNpbGxlcm8udGlwb3ZhciAhPSAnb3BjaW9uZXMnICYmIGNhc2lsbGVyby50aXBvdmFyICE9ICdzaV9ubycgP1xyXG4gICAgICAgICAgICA8c3BhbiBlbC1tZXRhZGF0bz1cInRpcG92YXJcIj57Y2FzaWxsZXJvLnRpcG92YXJ9PC9zcGFuPlxyXG4gICAgICAgICAgICA6IG51bGx9XHJcbiAgICAgICAge2Nhc2lsbGVyby52YXJfbmFtZSAmJiBjYXNpbGxlcm8ub3B0YXRpdm8gPyA8c3BhbiBlbC1tZXRhZGF0bz1cIm9wdGF0aXZhXCI+b3B0YXRpdmE8L3NwYW4+IDogbnVsbH1cclxuICAgICAgICB7Y2FzaWxsZXJvLmNhbGN1bGFkYSA/IDxzcGFuIGVsLW1ldGFkYXRvPVwiY2FsY3VsYWRhXCI+Y2FsY3VsYWRhPC9zcGFuPiA6IG51bGx9XHJcbiAgICAgICAge2Nhc2lsbGVyby5kZXNwbGllZ3VlT2N1bHRhID8gPHNwYW4gZWwtbWV0YWRhdG89XCJvY3VsdGFcIj5vY3VsdGE8L3NwYW4+IDogbnVsbH1cclxuICAgICAgICB7Y2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgPyA8c3BhbiBlbC1tZXRhZGF0bz1cImV4cHJlc2lvbl9oYWJpbGl0YXJcIj5oYWJpbGl0YToge2Nhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyfTwvc3Bhbj4gOiBudWxsfVxyXG4gICAgICAgIHtjYXNpbGxlcm8uZXNwZWNpYWw/LmF1dG9pbmcgPyA8c3BhbiBlbC1tZXRhZGF0bz1cImV4cHJlc2lvbl9hdXRvaW5nXCI+YXV0b2luZzoge2Nhc2lsbGVyby5lc3BlY2lhbD8uYXV0b2luZ308L3NwYW4+IDogbnVsbH1cclxuICAgIDwvZGl2PlxyXG5cclxuZnVuY3Rpb24gRW5jYWJlemFkb0Rlc3BsaWVndWUocHJvcHM6IHtcclxuICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyxcclxuICAgIGNhc2lsbGVybzogQ2FzaWxsZXJvRW5jYWJlemFibGUsXHJcbiAgICB2ZXJJZEd1aW9uPzogYm9vbGVhbixcclxuICAgIGxlZXI/OiBib29sZWFuLFxyXG4gICAgZm9yUGs6IEZvclBrXHJcbn0pIHtcclxuICAgIHZhciB7IGNhc2lsbGVybywgZm9yUGsgfSA9IHByb3BzO1xyXG4gICAgdmFyIGNvbkNhbXBvT3BjaW9uZXMgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gc3RhdGUub3BjaW9uZXMuY29uQ2FtcG9PcGNpb25lcylcclxuICAgIHZhciBoYW5kbGVDbGlja0JvcnJhciA9ICgpID0+IHtcclxuICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyByZXNwdWVzdGE6IG51bGwsIHZhcmlhYmxlOiBjYXNpbGxlcm8udmFyX25hbWUgYXMgSWRWYXJpYWJsZSwgZm9yUGs6IGZvclBrIH0pXHJcbiAgICB9O1xyXG4gICAgdmFyIHZlcl9pZCA9IGNhc2lsbGVyby52ZXJfaWQgPz8gY2FzaWxsZXJvLmNhc2lsbGVybztcclxuICAgIHZhciBjYWxjdWxhZGEgPSBjYXNpbGxlcm8uY2FsY3VsYWRhO1xyXG4gICAgdmFyIGlkID0gYGlkLWRpdi0ke2Nhc2lsbGVyby52YXJfbmFtZSB8fCBjYXNpbGxlcm8uY2FzaWxsZXJvfWA7XHJcbiAgICB2YXIgaWRBY2Npb25lcyA9IFwiYWNjaW9uZXMtXCIgKyBpZDtcclxuICAgIHJldHVybiA8ZGl2XHJcbiAgICAgICAgY2xhc3NOYW1lPVwiZW5jYWJlemFkb1wiXHJcbiAgICAgICAgZGViZS1sZWVyPXtwcm9wcy5sZWVyID8gJ1NJJyA6ICdOTyd9XHJcbiAgICAgICAgc3R5bGU9e3Byb3BzLnN0eWxlfVxyXG4gICAgPlxyXG4gICAgICAgIDxkaXYgaWQ9e2lkfSBjbGFzc05hbWU9XCJpZC1kaXZcIiB0aXRsZT17YCR7Y2FzaWxsZXJvLmNhc2lsbGVyb30gLSAke2Nhc2lsbGVyby52YXJfbmFtZX1gfVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRBY2Npb25lcyk7XHJcbiAgICAgICAgICAgICAgICBkaXYhLnNldEF0dHJpYnV0ZShcImFjY2lvbi12aXNpYmxlXCIsICgxIC0gTnVtYmVyKGRpdiEuZ2V0QXR0cmlidXRlKFwiYWNjaW9uLXZpc2libGVcIikpKS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8uIFZlciBxdcOpIGhhY2Vtb3MgY3VhbmRvIHNlIHRvY2EgZWwgSUQgZGUgbGEgcHJlZ3V0bmFcclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9pZF9wcmVndW50YSwgeyBwcmVndW50YTogY2FzaWxsZXJvLmNhc2lsbGVybyBhcyBJZFByZWd1bnRhLCBmb3JQayB9KTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaWRcIj5cclxuICAgICAgICAgICAgICAgIHt2ZXJfaWR9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB7KGNhc2lsbGVyby50aXBvdmFyID09IFwic2lfbm9cIiB8fCBjYXNpbGxlcm8udGlwb3ZhciA9PSBcIm9wY2lvbmVzXCIpID8gPENhbXBvIGRpc2FibGVkPXtmYWxzZX0gcHJlZ3VudGE9e2Nhc2lsbGVybyBhcyB1bmtub3duIGFzIFByZWd1bnRhU2ltcGxlfSBmb3JQaz17Zm9yUGt9IG1pbmk9e3RydWV9IGhpZGRlbj17IWNvbkNhbXBvT3BjaW9uZXMgJiYgJ3F1aXRhcid9IC8+IDogbnVsbH1cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhY2Npb25lcy1wcmVndW50YVwiIGlkPXtpZEFjY2lvbmVzfSBhY2Npb24tdmlzaWJsZT1cIjBcIj5cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8udmFyX25hbWUgPyA8ZGl2PjxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICBpZD17XCJib3JyYXItcHJlZ3VudGEtXCIgKyBjYXNpbGxlcm8udmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgbWktdmFyaWFibGU9e2Nhc2lsbGVyby52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvdG9uLXByZWd1bnRhLWJvcnJhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2tCb3JyYXJ9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uRGVsZXRlRm9yZXZlciAvPlxyXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+PC9kaXY+IDogbnVsbH1cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8udmFyX25hbWUgPyAobnNfbmMgPT4gPGRpdj48QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9e1wibnNuYy1wcmVndW50YS1cIiArIGNhc2lsbGVyby52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICBtaS12YXJpYWJsZT17Y2FzaWxsZXJvLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm90b24tcHJlZ3VudGEtbnNuY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyByZXNwdWVzdGE6IG5zX25jLCB2YXJpYWJsZTogY2FzaWxsZXJvLnZhcl9uYW1lIGFzIElkVmFyaWFibGUsIGZvclBrOiBmb3JQayB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgTlMvTkNcclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPjwvZGl2PikoY2FzaWxsZXJvLnZhbG9yX25zX25jID8/IC05KSA6IG51bGx9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibm9tYnJlLWRpdlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm5vbWJyZVwiPnticmVha2VhYmxlVGV4dChjYXNpbGxlcm8ubm9tYnJlKX1cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8uZXNwZWNpYWw/LmdwcyA/XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdmFyaWFudD1cIm91dGxpbmVkXCIgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzEwcHgnIH19IG9uQ2xpY2s9eyhfZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhck5hbWUgPSBjYXNpbGxlcm8udmFyX25hbWUhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWdyZWdhckluZm9HUFMgPSAoaW5mbzogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyByZXNwdWVzdGFzOiByQWN0dWFsZXMgfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQayk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsb3JBY3R1YWwgPSByQWN0dWFsZXNbdmFyTmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGF1eCA9IEpTT04ucGFyc2UodmFsb3JBY3R1YWw/LnRvU3RyaW5nKCkgfHwgXCJbXVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXgudW5zaGlmdChpbmZvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IHByb3BzLmZvclBrLCB2YXJpYWJsZTogdmFyTmFtZSwgcmVzcHVlc3RhOiBKU09OLnN0cmluZ2lmeShhdXgpIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHsgc2lndWllbnRlVmFyaWFibGUgfSA9IGFncmVnYXJJbmZvR1BTKGAke2RhdGV0aW1lLm5vdygpLnRvWW1kSG1zKCl9IC0gZXNwZXJhbmRvIHB1bnRvIGdwc2ApIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ3VpZW50ZVZhcmlhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShzaWd1aWVudGVWYXJpYWJsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHBvc2l0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxhdGl0dWRlLCBsb25naXR1ZGUsIGFsdGl0dWRlLCBhY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgaGVhZGluZywgc3BlZWQgfSA9IHBvc2l0aW9uLmNvb3JkcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhVG9TYXZlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHM6IHsgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWx0aXR1ZGUsIGFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBoZWFkaW5nLCBzcGVlZCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IHBvc2l0aW9uLnRpbWVzdGFtcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdyZWdhckluZm9HUFMoSlNPTi5zdHJpbmdpZnkoZGF0YVRvU2F2ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdyZWdhckluZm9HUFMoZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsgZW5hYmxlSGlnaEFjY3VyYWN5OiB0cnVlLCB0aW1lb3V0OiAxMDAwMCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9PjxJQ09OLkxvY2F0aW9uIC8+PC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIHtjYXNpbGxlcm8uYWNsYXJhY2lvbiA/XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFjbGFyYWNpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLnNhbHRvICYmIGNhc2lsbGVyby50aXBvYyA9PSAnRklMVFJPJyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTYWx0b0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IHByZWZpam89e2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKSF9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLmFjbGFyYWNpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA6IG51bGx9XHJcbiAgICAgICAgICAgIHtnZXRMb3NNZXRhZGF0b3MoY2FzaWxsZXJvKX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBEZXNwbGVnYXJDb25maXJtYXJCb3JyYXJSZXNwdWVzdGEocHJvcHM6IHsgZm9yUGs6IEZvclBrLCB2YXJpYWJsZUJvcnJhcjogSWRWYXJpYWJsZSB9KSB7XHJcbiAgICB2YXIgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoISFwcm9wcy52YXJpYWJsZUJvcnJhcilcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IGhhbmRsZUNsb3NlID0gKCkgPT4ge1xyXG4gICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNPTkZJUk1BUl9CT1JSQVJfUkVTUFVFU1RBKHsgZm9yUGs6IHByb3BzLmZvclBrLCB2YXJpYWJsZTogbnVsbCB9KSk7XHJcbiAgICAgICAgc2V0T3BlbihmYWxzZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPFBvcG92ZXJcclxuICAgICAgICBpZD17XCJwb3BvdmVyLWNvbmZpcm1hclwifVxyXG4gICAgICAgIG9wZW49e29wZW59XHJcbiAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2V9XHJcbiAgICAgICAgYW5jaG9yT3JpZ2luPXt7XHJcbiAgICAgICAgICAgIHZlcnRpY2FsOiAnYm90dG9tJyxcclxuICAgICAgICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcicsXHJcbiAgICAgICAgfX1cclxuICAgICAgICB0cmFuc2Zvcm1PcmlnaW49e3tcclxuICAgICAgICAgICAgdmVydGljYWw6ICd0b3AnLFxyXG4gICAgICAgICAgICBob3Jpem9udGFsOiAnbGVmdCcsXHJcbiAgICAgICAgfX1cclxuICAgID5cclxuICAgICAgICA8VHlwb2dyYXBoeT5MYSBwcmVndW50YSB0aWVuZSByZWdpc3RyYWRhIHVuYSByZXNwdWVzdGEgcXVlIG5vIGZ1ZSBkZXRlY3RhZGEgY29tbyBlcnLDs25lYTwvVHlwb2dyYXBoeT5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbmZpcm1hLWJvdG9uZXNcIj5cclxuICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInNlY29uZGFyeVwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9wcy52YXJpYWJsZUJvcnJhcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBwcm9wcy5mb3JQaywgdmFyaWFibGU6IHByb3BzLnZhcmlhYmxlQm9ycmFyLCByZXNwdWVzdGE6IG51bGwgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGhhbmRsZUNsb3NlKCk7XHJcbiAgICAgICAgICAgIH19PmJvcnJhciByZXNwdWVzdGE8L0J1dHRvbj5cclxuICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB2YXJpYW50PVwib3V0bGluZWRcIiBvbkNsaWNrPXtoYW5kbGVDbG9zZX0+dm9sdmVyIHNpbiBib3JyYXI8L0J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvUG9wb3Zlcj47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGFyTnVlc3RyYUxvbmdpdHVkKGxvbmdpdHVkOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICByZXR1cm4gbG9uZ2l0dWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUoc2lndWllbnRlVmFyaWFibGU6IElkVmFyaWFibGUgfCBJZEZpbikge1xyXG4gICAgZGViZVNhbHRhciA9IGZhbHNlO1xyXG4gICAgdmFyIHsgdG9wLCBlbmZvY2FkbywgZWxlbWVudG9JbnB1dFZhcmlhYmxlIH0gPSBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8oc2lndWllbnRlVmFyaWFibGUpO1xyXG4gICAgaWYgKHRvcCAhPSBudWxsICYmIHRvcCA+IDAgJiYgKCFlbmZvY2FkbyB8fCBcInNhbHRhIHNpZW1wcmVcIikpIHtcclxuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3AsIGxlZnQ6IDAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcclxuICAgIH1cclxuICAgIGVsZW1lbnRvSW5wdXRWYXJpYWJsZT8uZm9jdXMoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gQ2FtcG8ocHJvcHM6IHsgZGlzYWJsZWQ6IGJvb2xlYW4sIHByZWd1bnRhOiBQcmVndW50YVNpbXBsZSB8IFByZWd1bnRhQ29uT3BjaW9uZXMgfCBQcmVndW50YUNvblNpTm8gfCBPcGNpb25NdWx0aXBsZSwgZm9yUGs6IEZvclBrLCBtaW5pPzogYm9vbGVhbiwgaGlkZGVuPzogYm9vbGVhbiB8ICdxdWl0YXInIH0pIHtcclxuICAgIHZhciB7IHByZWd1bnRhLCBkaXNhYmxlZCwgbWluaSB9ID0gcHJvcHM7XHJcbiAgICB2YXIgeyBzYWx0b0F1dG9tYXRpY28sIGNvbkNhbXBvT3BjaW9uZXMgfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiBzdGF0ZS5vcGNpb25lcyk7XHJcbiAgICBjb25zdCBsb25naXR1ZCA9IG1pbmkgPyBwcmVndW50YS5jYXNpbGxlcm9zLnJlZHVjZSgoYWN1bSwgbykgPT4gTWF0aC5tYXgoby5jYXNpbGxlcm8udG9TdHJpbmcoKS5sZW5ndGgsIGFjdW0pLCAwKSA6XHJcbiAgICAgICAgcHJlZ3VudGEubG9uZ2l0dWQ7XHJcbiAgICAvLyB2YXIgW3ZhbG9yLCBzZXRWYWxvcl0gPSB1c2VTdGF0ZShwcm9wcy52YWxvcik7XHJcbiAgICB2YXIgW2VkaXRhbmRvLCBzZXRFZGl0YW5kb10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICAvLyB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgLy8gICAgIHNldFZhbG9yKHByb3BzLnZhbG9yKVxyXG4gICAgLy8gfSwgW3Byb3BzLnZhbG9yXSk7XHJcbiAgICBjb25zdCBpbnB1dFByb3BzID0ge1xyXG4gICAgICAgIG1heExlbmd0aDogbG9uZ2l0dWQsXHJcbiAgICAgICAgZW50ZXJLZXlIaW50OiBcIm5leHRcIiBhcyBjb25zdCxcclxuICAgIH07XHJcbiAgICBjb25zdCBvbkNoYW5nZSA9IChudWV2b1ZhbG9yOiBWYWxvciB8IHR5cGVvZiBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPKSA9PiB7XHJcbiAgICAgICAgdmFyIHsgc2lndWllbnRlVmFyaWFibGUgfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBwcm9wcy5mb3JQaywgdmFyaWFibGU6IHByZWd1bnRhLnZhcl9uYW1lIGFzIElkVmFyaWFibGUsIHJlc3B1ZXN0YTogbnVldm9WYWxvciB9KTtcclxuICAgICAgICBpZiAoc2lndWllbnRlVmFyaWFibGUgJiYgZGViZVNhbHRhcikge1xyXG4gICAgICAgICAgICAocHJlZ3VudGEuZXNwZWNpYWw/Lm5vU2Nyb2xsID09IHRydWUpID8gbnVsbCA6IGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUocHJlZ3VudGEuZXNwZWNpYWw/LnNjcm9sbFRvID8/IHNpZ3VpZW50ZVZhcmlhYmxlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaGFuZGxlU3VibWl0ID0gKHsgZXNCb3RvbkNvbmZpcm1hciB9OiB7IGVzQm90b25Db25maXJtYXI6IGJvb2xlYW4gfSkgPT4ge1xyXG4gICAgICAgIGRlYmVTYWx0YXIgPSBlc0JvdG9uQ29uZmlybWFyID8gdHJ1ZSA6IChzYWx0b0F1dG9tYXRpY28gfHwgY29uQ2FtcG9PcGNpb25lcyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIGlzSW5wdXRGb2N1c2VkID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1lID09PSAnSU5QVVQnIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyk7XHJcbiAgICAgICAgaWYgKGlzSW5wdXRGb2N1c2VkKSB7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGVsZW1lbnRvSW5wdXRWYXJpYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGB2YXItJHtwcmVndW50YS52YXJfbmFtZSB8fCAnJ31gKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgICAgICAgICBvbkNoYW5nZShlbGVtZW50b0lucHV0VmFyaWFibGUgPyBlbGVtZW50b0lucHV0VmFyaWFibGUudmFsdWUgOiBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBudWVzdHJhTG9uZ2l0dWQgPSBjYWxjdWxhck51ZXN0cmFMb25naXR1ZChwcmVndW50YS5sb25naXR1ZCB8fCBsb25naXR1ZClcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNhbXBvXCIgbnVlc3RyYS1sb25naXR1ZD17bnVlc3RyYUxvbmdpdHVkfSBzdHlsZT17cHJvcHMuaGlkZGVuID09ICdxdWl0YXInID8geyBkaXNwbGF5OiAnbm9uZScgfSA6IHByb3BzLmhpZGRlbiA/IHsgdmlzaWJpbGl0eTogJ2hpZGRlbicgfSA6IHVuZGVmaW5lZH0+XHJcbiAgICAgICAge21pbmkgPyBudWxsIDogPEJvdG9uQm9ycmFyXHJcbiAgICAgICAgICAgIGlkPXtgYm9ycmFyLWFiaWVydGEtJHtwcmVndW50YS52YXJfbmFtZX1gfVxyXG4gICAgICAgICAgICB2YXJpYWJsZT17cHJlZ3VudGEudmFyX25hbWV9XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAvPn1cclxuICAgICAgICA8Zm9ybSBcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jYW1wby13cmFwcGVyXCIgXHJcbiAgICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdjb250ZW50cycgfX0gXHJcbiAgICAgICAgICAgIG9uU3VibWl0PXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlU3VibWl0KHsgZXNCb3RvbkNvbmZpcm1hcjogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImlucHV0LWNhbXBvXCI+XHJcbiAgICAgICAgICAgICAgICA8VGV4dEZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9e2B2YXItJHtwcmVndW50YS52YXJfbmFtZSB8fCAnJ31gfVxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZCB8fCBwcmVndW50YS5lc3BlY2lhbD8uZ3BzfVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInZhcmlhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAvL3Zhci1sZW5ndGg9e3ByZWd1bnRhLmxvbmdpdHVkfSBcclxuICAgICAgICAgICAgICAgICAgICBmdWxsV2lkdGg9e3RydWV9XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRQcm9wcz17aW5wdXRQcm9wc31cclxuICAgICAgICAgICAgICAgICAgICB0eXBlPXtwcmVndW50YS5kZXNwbGllZ3VlVGlwb0lucHV0ID8/IGFkYXB0YXJUaXBvVmFyQ2FzaWxsZXJvKHByZWd1bnRhLnRpcG92YXIpfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uRm9jdXM9eyhfZXZlbnQpID0+IHNldEVkaXRhbmRvKHRydWUpfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQmx1cj17KF9ldmVudCwgdmFsb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2UodmFsb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFZGl0YW5kbyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICBvbktleURvd249eyhldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXNFbnRlciA9IChldmVudC5rZXkgPT0gJ0VudGVyJyB8fCBldmVudC5rZXlDb2RlID09IDEzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXNFbnRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVN1Ym1pdCh7IGVzQm90b25Db25maXJtYXI6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB7ZGlzYWJsZWQgfHwgcHJlZ3VudGEuZXNwZWNpYWw/LmdwcyB8fCBtaW5pID8gbnVsbCA6XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJvdG9uLWNvbmZpcm1hci1jYW1wb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD17ZWRpdGFuZG8gPyBcImNvbnRhaW5lZFwiIDogJ291dGxpbmVkJ30gc2l6ZT1cInNtYWxsXCIgY29sb3I9e2VkaXRhbmRvID8gJ3ByaW1hcnknIDogJ2RlZmF1bHQnfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3Rvbi1jb25maXJtYXI9e3ByZWd1bnRhLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJJbmRleD17LTF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZTogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU3VibWl0KHsgZXNCb3RvbkNvbmZpcm1hcjogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICA+PElDT04uQ2hlY2sgLz48L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9mb3JtPlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmludGVyZmFjZSBJY2FzaWxsZXJvQ29uT3BjaW9uZXMge1xyXG4gICAgdmFyX25hbWU6IElkVmFyaWFibGUsXHJcbiAgICBjYXNpbGxlcm9zOiBPcGNpb25bXVxyXG59XHJcblxyXG5mdW5jdGlvbiBPcGNpb25lc0Rlc3BsaWVndWUoXHJcbiAgICB7IGNhc2lsbGVyb0Nvbk9wY2lvbmVzLCBmb3JQaywgbGVlciwgZGVzcGxpZWd1ZUNvbnRlbmlkbyB9OlxyXG4gICAgICAgIHsgY2FzaWxsZXJvQ29uT3BjaW9uZXM6IEljYXNpbGxlcm9Db25PcGNpb25lcywgZm9yUGs6IEZvclBrLCBsZWVyOiBib29sZWFuLCBkZXNwbGllZ3VlQ29udGVuaWRvOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIH1cclxuKSB7XHJcbiAgICBjb25zdCBkZXNwbGVnYXJPdHJvcyA9IChvcGNpb246IE9wY2lvbiwgc29sb1BhcmFEZXNwbGllZ3VlOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIHwgbnVsbCkgPT4gb3BjaW9uLmNhc2lsbGVyb3MubWFwKChzdWJQcmVndW50YTogUHJlZ3VudGEpID0+IChcclxuICAgICAgICBzb2xvUGFyYURlc3BsaWVndWUgPT0gbnVsbCB8fCBzb2xvUGFyYURlc3BsaWVndWUgPT0gc3ViUHJlZ3VudGEuZGVzcGxpZWd1ZUNvbnRlbmlkbyA/XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwib3Ryb3MtZXNwZWNpZmljYXJcIiBzdHlsZT17eyB3aWR0aDogJzEwMCUnIH19IGtleT17c3ViUHJlZ3VudGEuaWRfY2FzaWxsZXJvfT5cclxuICAgICAgICAgICAgICAgIDxQcmVndW50YURlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgICAgICBwcmVndW50YT17c3ViUHJlZ3VudGF9XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yUGs9e2ZvclBrfVxyXG4gICAgICAgICAgICAgICAgICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvPSdzdXBlcmlvcidcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PiA6IG51bGxcclxuICAgICkpXHJcbiAgICByZXR1cm4gPD48ZGl2IGNsYXNzTmFtZT1cImNvbnRlbmlkb1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwib3BjaW9uZXNcIiBkZXNwbGllZ3VlLWNvbnRlbmlkbz17ZGVzcGxpZWd1ZUNvbnRlbmlkbyA/PyAndmVydGljYWwnfT5cclxuICAgICAgICAgICAge2Nhc2lsbGVyb0Nvbk9wY2lvbmVzLmNhc2lsbGVyb3MubWFwKChvcGNpb246IE9wY2lvbiwgaTogbnVtYmVyKSA9PlxyXG4gICAgICAgICAgICAgICAgPEdyaWQga2V5PXtvcGNpb24uaWRfY2FzaWxsZXJvfSBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgb2N1bHRhci1zYWx0ZWFkYT17b3BjaW9uLmRlc3BsaWVndWVPY3VsdGEgPyAob3BjaW9uLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPyAnSU5IQUJJTElUQVInIDogJ1NJJykgOiAnTk8nfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxPcGNpb25EZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVybz17b3BjaW9ufVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZT17Y2FzaWxsZXJvQ29uT3BjaW9uZXMudmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbG9yT3BjaW9uPXtvcGNpb24uY2FzaWxsZXJvfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JQaz17Zm9yUGt9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZXI9e2xlZXJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbkJvdG9uQm9ycmFyPXtpID09IDAgfHwgZGVzcGxpZWd1ZUNvbnRlbmlkbyAhPSAnaG9yaXpvbnRhbCd9XHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICB7ZGVzcGxpZWd1ZUNvbnRlbmlkbyA9PSAnaG9yaXpvbnRhbCcgPyBudWxsIDogZGVzcGxlZ2FyT3Ryb3Mob3BjaW9uLCBudWxsKX1cclxuICAgICAgICAgICAgICAgIDwvR3JpZD5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgICAgIHtkZXNwbGllZ3VlQ29udGVuaWRvID09ICdob3Jpem9udGFsJyA/IGNhc2lsbGVyb0Nvbk9wY2lvbmVzLmNhc2lsbGVyb3MubWFwKChvcGNpb246IE9wY2lvbikgPT5cclxuICAgICAgICAgICAgZGVzcGxlZ2FyT3Ryb3Mob3BjaW9uLCBudWxsKVxyXG4gICAgICAgICkgOiBudWxsfTwvPlxyXG59XHJcblxyXG5jb25zdCBub21icmVDYXNpbGxlcm8gPSB7XHJcbiAgICBGOiAnZm9ybXVsYXJpbycsXHJcbiAgICBCOiAnYmxvcXVlJyxcclxuICAgIFA6ICdwcmVndW50YScsXHJcbiAgICBDUDogJ2Nvbmp1bnRvcHJlZ3VudGFzJyxcclxuICAgIE86ICdvcGNpb24nLFxyXG4gICAgT006ICdtdWx0aXBsZScsXHJcbiAgICBGSUxUUk86ICdmaWx0cm8nLFxyXG4gICAgQ09OUzogJ2NvbnNpc3RlbmNpYScsXHJcbiAgICBCRjogJ2JvdG9uZm9ybXVsYXJpbycsXHJcbiAgICBURVhUTzogJ2FjbGFyYWNpb25zdXBlcmlvcicsXHJcbiAgICBQTUFUUklaOiAncHJlZ3VudGFlbmZvcm1hZGVtYXRyaXonLFxyXG59XHJcblxyXG5mdW5jdGlvbiBEZXNwbGVnYXJDYXNpbGxlcm8ocHJvcHM6IHtcclxuICAgIGNhc2lsbGVybzogUHJlZ3VudGEgfCBCbG9xdWUgfCBGaWx0cm8gfCBDb25qdW50b1ByZWd1bnRhcyB8IEJvdG9uRm9ybXVsYXJpbyB8IENvbnNpc3RlbmNpYSB8IE9wY2lvbk11bHRpcGxlIHwgVGV4dG8gfCBQTWF0cml6LFxyXG4gICAgaWQ/OiBzdHJpbmcsXHJcbiAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMsXHJcbiAgICBkZXNwbGllZ3VlRW5jYWJlemFkbz86ICdsYXRlcmFsJyB8ICdzdXBlcmlvcidcclxuICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfCBSZWFjdC5SZWFjdE5vZGVbXSxcclxuICAgIFwib2N1bHRhci1zYWx0ZWFkYVwiPzogJ1NJJyB8ICdOTycgfCAnSU5IQUJJTElUQVInIHwgdW5kZWZpbmVkXHJcbn0pIHtcclxuICAgIHJldHVybiA8ZGl2XHJcbiAgICAgICAga2V5PXtgJHtwcm9wcy5jYXNpbGxlcm8udGlwb2N9LSR7cHJvcHMuaWQgfHwgcHJvcHMuY2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gfVxyXG4gICAgICAgIGNsYXNzTmFtZT17YGNhc2lsbGVybyAke25vbWJyZUNhc2lsbGVyb1twcm9wcy5jYXNpbGxlcm8udGlwb2NdfWB9XHJcbiAgICAgICAgaWQ9e3Byb3BzLmlkfVxyXG4gICAgICAgIHN0eWxlPXtwcm9wcy5zdHlsZX1cclxuICAgICAgICBkZXNwbGllZ3VlLWVuY2FiZXphZG89e3Byb3BzLmNhc2lsbGVyby5kZXNwbGllZ3VlRW5jYWJlemFkbyA/PyBwcm9wcy5kZXNwbGllZ3VlRW5jYWJlemFkbyA/PyAnc3VwZXJpb3InfVxyXG4gICAgICAgIG9jdWx0YXItc2FsdGVhZGE9e3Byb3BzW1wib2N1bHRhci1zYWx0ZWFkYVwiXX1cclxuICAgID57cHJvcHMuY2hpbGRyZW59PC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFByZWd1bnRhRGVzcGxpZWd1ZShwcm9wczoge1xyXG4gICAgcHJlZ3VudGE6IFByZWd1bnRhLFxyXG4gICAgZm9yUGs6IEZvclBrLFxyXG4gICAgZGVzcGxpZWd1ZUVuY2FiZXphZG86ICdsYXRlcmFsJyB8ICdzdXBlcmlvcicsXHJcbiAgICBwYXJhUE1hdHJpej86IHRydWVcclxufSkge1xyXG4gICAgdmFyIHsgcHJlZ3VudGEgfSA9IHByb3BzO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIGVzdGFkbzogRXN0YWRvVmFyaWFibGU7XHJcbiAgICB2YXIgaWQgPSBgcHJlZ3VudGEtJHtwcmVndW50YS5pZF9jYXNpbGxlcm99YFxyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkLFxyXG4gICAgICAgIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICBmdW46IHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShwcmVndW50YSlcclxuICAgIH0pXHJcbiAgICB2YXIgaWQgPSBgcHJlZ3VudGEtJHtwcmVndW50YS5pZF9jYXNpbGxlcm99YFxyXG4gICAgdmFyIHN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge31cclxuICAgIGlmIChwcmVndW50YS5kZXNwbGllZ3VlID09ICdncmlkJykge1xyXG4gICAgICAgIHN0eWxlLmRpc3BsYXkgPSAnZ3JpZCc7XHJcbiAgICAgICAgc3R5bGUuZ3JpZFRlbXBsYXRlQ29sdW1ucyA9ICdyZXBlYXQoMywxZnIpJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcHJvcHMucGFyYVBNYXRyaXogP1xyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIHtnZXRMb3NNZXRhZGF0b3MocHJlZ3VudGEpfVxyXG4gICAgICAgICAgICA8Q2FtcG9cclxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtwcmVndW50YS5jYWxjdWxhZGEgPyB0cnVlIDogZmFsc2V9XHJcbiAgICAgICAgICAgICAgICBwcmVndW50YT17cHJlZ3VudGEgYXMgdW5rbm93biBhcyBQcmVndW50YVNpbXBsZX1cclxuICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgIG1pbmk9e3RydWV9XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgPC8+XHJcbiAgICAgICAgOiA8RGVzcGxlZ2FyQ2FzaWxsZXJvXHJcbiAgICAgICAgICAgIGlkPXtpZH1cclxuICAgICAgICAgICAgY2FzaWxsZXJvPXtwcmVndW50YX1cclxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlfVxyXG4gICAgICAgICAgICBudWVzdHJvLXRpcG92YXI9e3ByZWd1bnRhLnRpcG92YXIgfHwgXCJtdWx0aXBsZVwifVxyXG4gICAgICAgICAgICBvY3VsdGFyLXNhbHRlYWRhPXtwcmVndW50YS5kZXNwbGllZ3VlT2N1bHRhID8gKHByZWd1bnRhLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPyAnSU5IQUJJTElUQVInIDogJ1NJJykgOiAnTk8nfVxyXG4gICAgICAgICAgICBkZXNwbGllZ3VlRW5jYWJlemFkbz17cHJvcHMuZGVzcGxpZWd1ZUVuY2FiZXphZG99XHJcblxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICBjYXNpbGxlcm89e3ByZWd1bnRhfVxyXG4gICAgICAgICAgICAgICAgbGVlcj17cHJlZ3VudGEubGVlciAhPT0gZmFsc2V9XHJcbiAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGVuaWRvXCI+e1xyXG4gICAgICAgICAgICAgICAgcHJlZ3VudGEudGlwb3ZhciA9PSBcInNpX25vXCIgPyA8R3JpZCBjb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFNpTm9EZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyb0Nvbk9wY2lvbmVzPXtwcmVndW50YX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNwbGllZ3VlQ29udGVuaWRvPXtwcm9wcy5wcmVndW50YS5kZXNwbGllZ3VlQ29udGVuaWRvID8/ICd2ZXJ0aWNhbCd9XHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDwvR3JpZD4gOlxyXG4gICAgICAgICAgICAgICAgICAgIHByZWd1bnRhLnRpcG92YXIgPT0gXCJvcGNpb25lc1wiID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPE9wY2lvbmVzRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e3ByZWd1bnRhfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVlcj17ISFwcmVndW50YS5sZWVyfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzcGxpZWd1ZUNvbnRlbmlkbz17cHJlZ3VudGEuZGVzcGxpZWd1ZUNvbnRlbmlkbyA/PyAndmVydGljYWwnfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPiA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWd1bnRhLnRpcG92YXIgPT0gbnVsbCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJlZ3VudGEuY2FzaWxsZXJvcyBhcyAoT3BjaW9uTXVsdGlwbGUgfCBDb25zaXN0ZW5jaWEpW10pLm1hcCgob3BjaW9uTXVsdGlwbGUpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BjaW9uTXVsdGlwbGUudGlwb2MgPT0gJ09NJyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxPcGNpb25NdWx0aXBsZURlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17b3BjaW9uTXVsdGlwbGUuaWRfY2FzaWxsZXJvfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BjaW9uTT17b3BjaW9uTXVsdGlwbGV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLy9sYXMgY29uc2lzdGVuY2lhcyBwdWVkZW4gc2VyIGhlcm1hbmFzIGRlIE9NXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb25zaXN0ZW5jaWFEZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e29wY2lvbk11bHRpcGxlLmlkX2Nhc2lsbGVyb31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVybz17b3BjaW9uTXVsdGlwbGV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHByZWd1bnRhU2ltcGxlOiBQcmVndW50YVNpbXBsZSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2FtcG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3ByZWd1bnRhU2ltcGxlLmNhbGN1bGFkYSA/IHRydWUgOiBmYWxzZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZ3VudGE9e3ByZWd1bnRhU2ltcGxlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkocHJlZ3VudGEpXHJcbiAgICAgICAgICAgIH08L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwaWUtcHJlZ3VudGFcIj5cclxuICAgICAgICAgICAgICAgIDxTYWx0b0Rlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm89e3ByZWd1bnRhfVxyXG4gICAgICAgICAgICAgICAgICAgIHByZWZpam89e3ByZWd1bnRhLnRpcG92YXIgPT0gXCJvcGNpb25lc1wiID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVndW50YS5jYXNpbGxlcm9zLnNvbWUob3BjaW9uID0+IG9wY2lvbi5zYWx0bykgPyBcInJlc3RvIGRlIGxhcyBvcGNpb25lc1wiIDogXCJ0b2RhcyBsYXMgb3BjaW9uZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICkgOiBcIlwifVxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFBNYXRyaXpEZXNwbGllZ3VlKHByb3BzOiB7XHJcbiAgICBjYXNpbGxlcm86IFBNYXRyaXosXHJcbiAgICBmb3JQazogRm9yUGssXHJcbn0pIHtcclxuICAgIHZhciB7IGNhc2lsbGVybyB9ID0gcHJvcHM7XHJcbiAgICB2YXIgaWQgPSBgcHJlZ3VudGEtJHtjYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWBcclxuICAgIGNvbnN0IGNvbHMgPSAoY2FzaWxsZXJvLmNhc2lsbGVyb3MgYXMgKE9wY2lvbk11bHRpcGxlIHwgQ29uc2lzdGVuY2lhKVtdKVxyXG4gICAgICAgIC5maW5kKChvcGNpb25NdWx0aXBsZSkgPT4gb3BjaW9uTXVsdGlwbGUudGlwb2MgPT0gJ09NJyk/LmNhc2lsbGVyb3NcclxuICAgICAgICAubWFwKChwcmVndW50YSkgPT4gcHJlZ3VudGEubm9tYnJlKTtcclxuICAgIGNvbnN0IHRkU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7IHRleHRBbGlnbjogJ2NlbnRlcicsIHdpZHRoOiBjb2xzID8gKDU1MCAvIChjb2xzLmxlbmd0aCkpLnRvU3RyaW5nKCkgKyAncHgnIDogJycgfTtcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvXHJcbiAgICAgICAgaWQ9e2lkfVxyXG4gICAgICAgIGNhc2lsbGVybz17Y2FzaWxsZXJvfVxyXG4gICAgICAgIG9jdWx0YXItc2FsdGVhZGE9e2Nhc2lsbGVyby5kZXNwbGllZ3VlT2N1bHRhID8gKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzID8gJ0lOSEFCSUxJVEFSJyA6ICdTSScpIDogJ05PJ31cclxuICAgID5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWVcclxuICAgICAgICAgICAgY2FzaWxsZXJvPXtjYXNpbGxlcm99XHJcbiAgICAgICAgICAgIGxlZXI9e2Nhc2lsbGVyby5sZWVyICE9PSBmYWxzZX1cclxuICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT1cInRhYmxlIHRhYmxlLXN0cmlwZWRcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aD48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIHtjb2xzPy5tYXAoKGNvbCwgaSkgPT4gPHRoIGtleT17aX0gc2NvcGU9XCJjb2xcIiBzdHlsZT17dGRTdHlsZX0+e2NvbH08L3RoPil9XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICB7KGNhc2lsbGVyby5jYXNpbGxlcm9zIGFzIChPcGNpb25NdWx0aXBsZSB8IENvbnNpc3RlbmNpYSlbXSkubWFwKChvcGNpb25NdWx0aXBsZSwgaSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBvcGNpb25NdWx0aXBsZS50aXBvYyA9PSAnT00nID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGtleT17aX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e29wY2lvbk11bHRpcGxlLm5vbWJyZX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge29wY2lvbk11bHRpcGxlLmNhc2lsbGVyb3MubWFwKChwcmVndW50YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZCA9IGBwcmVndW50YS0ke3ByZWd1bnRhLmlkX2Nhc2lsbGVyb31gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW46IHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShwcmVndW50YSBhcyB1bmtub3duIGFzIFByZWd1bnRhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDx0ZCBrZXk9e2lkfSBpZD17aWR9PjxQcmVndW50YURlc3BsaWVndWUgZm9yUGs9e3Byb3BzLmZvclBrfSBwcmVndW50YT17cHJlZ3VudGEgYXMgdW5rbm93biBhcyBQcmVndW50YX0gZGVzcGxpZWd1ZUVuY2FiZXphZG89XCJzdXBlcmlvclwiIHBhcmFQTWF0cml6PXt0cnVlfSAvPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogLy9sYXMgY29uc2lzdGVuY2lhcyBwdWVkZW4gc2VyIGhlcm1hbmFzIGRlIE9NXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxDb25zaXN0ZW5jaWFEZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e29wY2lvbk11bHRpcGxlLmlkX2Nhc2lsbGVyb31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVybz17b3BjaW9uTXVsdGlwbGV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGllLXByZWd1bnRhXCI+PC9kaXY+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxudmFyIGNhbGN1bGFyRGlzYWJsZWRCRkFncmVnYXJMaXN0byA9IChcclxuICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86IENvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvIHwgbnVsbCxcclxuICAgIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbzogQ29uZmlndXJhY2lvbkhhYmlsaXRhckJvdG9uRm9ybXVsYXJpbyB8IG51bGwsXHJcbiAgICBmb3JtdWxhcmlvOiBJZEZvcm11bGFyaW9cclxuKSA9PiB7XHJcbiAgICBpZiAoaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvICYmIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tmb3JtdWxhcmlvXSkge1xyXG4gICAgICAgIHJldHVybiAhaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dLmhhYmlsaXRhcl9hZ3JlZ2FyX2xpc3RvXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAhIShjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW8pXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJvdG9uZXNEZWxGb3JtdWxhcmlvKHI6IFJlc3B1ZXN0YXMsIHVuaWRhZF9hbmFsaXNpczogSWRVbmlkYWRBbmFsaXNpcywgZXN0cnVjdHVyYTogRXN0cnVjdHVyYSwgZm9yUGtQYWRyZTogRm9yUGssIGZlZWRiYWNrQWxsOiB7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9KTogSHRtbFRhZzxIVE1MRGl2RWxlbWVudD4ge1xyXG4gICAgdmFyIGZvcm1zVml2aWVuZGEgPSBnZXRGb3JtdWxhcmlvc0ZvclZhbHVlUGtSYWl6KGZvclBrUGFkcmVbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSk7XHJcbiAgICB2YXIgdWFEZWYgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VuaWRhZF9hbmFsaXNpc107XHJcbiAgICB2YXIgYXJyYXlFc3RydWN0dXJhRm9ybXVsYXJpb3MgPSAobGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpKS5hcnJheSgpO1xyXG4gICAgdmFyIHggPSBsaWtlQXIodWFEZWYuaGlqYXMpLmZpbHRlcih1YUhpamEgPT5cclxuICAgICAgICAvL2Rlc2NhcnRvIHVhcyBxdWUgbm8gZXN0w6luIGVuIG5pbmd1biBmb3JtXHJcbiAgICAgICAgYXJyYXlFc3RydWN0dXJhRm9ybXVsYXJpb3MuZmlsdGVyKChpbmZvRm9ybXVsYXJpbykgPT5cclxuICAgICAgICAgICAgaW5mb0Zvcm11bGFyaW8uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWFIaWphPy51bmlkYWRfYW5hbGlzaXMgJiYgZm9ybXNWaXZpZW5kYS5pbmNsdWRlcyhpbmZvRm9ybXVsYXJpby5jYXNpbGxlcm9zLmlkX2Nhc2lsbGVybyBhcyBJZEZvcm11bGFyaW8pXHJcbiAgICAgICAgKS5sZW5ndGggPiAwXHJcbiAgICApLm1hcCh1YUhpamEgPT4gKFxyXG4gICAgICAgIHVhSGlqYSA9PSBudWxsID8gbnVsbCA6XHJcbiAgICAgICAgICAgIGh0bWwuZGl2KHsgY2xhc3M6ICd1YS1oaWphcycgfSwgW1xyXG4gICAgICAgICAgICAgICAgaHRtbC5kaXYodWFIaWphLnVuaWRhZF9hbmFsaXNpcyksXHJcbiAgICAgICAgICAgICAgICBodG1sLmRpdihcclxuICAgICAgICAgICAgICAgICAgICBsaWtlQXIoclt1YUhpamEudW5pZGFkX2FuYWxpc2lzXSB8fCBbXSkubWFwKChyZXNwdWVzdGFzSGlqYSwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0gTnVtYmVyKGkpICsgMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9yUGtIaWphUGFyY2lhbCA9IHsgLi4uZm9yUGtQYWRyZSwgW3VhSGlqYS5wa19hZ3JlZ2FkYV06IG51bSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29uZmlnU29ydGVvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvID8gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQa1BhZHJlW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pXSA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbC5kaXYoeyBjbGFzczogJ251bWVyYWRvci11YScgfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoeyBjbGFzczogJ2JvdG9uZXMtdWEnIH0sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7IGNsYXNzOiAnbnVtZXJvLXVhJyB9LCBudW0udG9TdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZm9ybURlZiA9PiBmb3JtRGVmLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhSGlqYS51bmlkYWRfYW5hbGlzaXMgJiYgZm9ybXNWaXZpZW5kYS5pbmNsdWRlcyhmb3JtRGVmLmNhc2lsbGVyb3MuaWRfY2FzaWxsZXJvIGFzIElkRm9ybXVsYXJpbykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKF9mb3JtRGVmLCBmb3JtdWxhcmlvKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9yUGsgPSB7IC4uLmZvclBrSGlqYVBhcmNpYWwsIGZvcm11bGFyaW8gfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmZWVkYmFja0Zvcm0gPSBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmZWVkYmFja0Zvcm0gPyBodG1sLmRpdih7fSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0bWwuYnV0dG9uKCh1YUhpamEhKS5wa19hZ3JlZ2FkYStcIiBvazogXCIrKE51bWJlcihpKSsxKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90b25Gb3JtdWxhcmlvQ29uUmVzdW1lbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IHRydWUgfHwgY2FsY3VsYXJBY3R1YWxCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBudW0sIG51bGwsIGZvcm11bGFyaW8sIHIpLCAvL1JFVklTQVIgdHJ1ZSBwYXJhIHF1ZSBubyBzZSBncmlzZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogY2FsY3VsYXJEaXNhYmxlZEJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbywgbnVtLCBmb3JtdWxhcmlvLCByKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkYmFja0Zvcm0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZGVzcGxpZWd1ZU9jdWx0YTogZmFsc2UsIGV4cHJlc2lvbl9oYWJpbGl0YXJfanM6ICcnLCBub21icmU6IGZvcm11bGFyaW8sIGFjbGFyYWNpb246IG51bGwsIHNhbHRvOiBmb3JtdWxhcmlvIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrUGFkcmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYm90b24taXItcmVzdW1lbi1mb3JtdWxhcmlvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9ybXVsYXJpb10uY2FzaWxsZXJvc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5hcnJheSgpLm1hcCh4ID0+IHggPT0gbnVsbCA/IG51bGwgOiB4KS5yZXZlcnNlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBib3RvbmVzRGVsRm9ybXVsYXJpbyhyZXNwdWVzdGFzSGlqYSwgdWFIaWphLnVuaWRhZF9hbmFsaXNpcywgZXN0cnVjdHVyYSwgZm9yUGtIaWphUGFyY2lhbCwgZmVlZGJhY2tBbGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAgICAgfSkuYXJyYXkoKS5tYXAoeCA9PiB4ID09IG51bGwgPyBudWxsIDogeClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgXSlcclxuICAgICkpLmFycmF5KCkubWFwKHggPT4geCA9PSBudWxsID8gbnVsbCA6IHgpO1xyXG4gICAgcmV0dXJuIGh0bWwuZGl2KC8qe3N0eWxlOidkaXNwbGF5OmZsZXg7IGZsZXgtZGlyZWN0aW9uOnJvdyd9LCoveCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFRleHRvRGVzcGxpZWd1ZShwcm9wczogeyBjYXNpbGxlcm86IFRleHRvLCBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgdmFyIHsgY2FzaWxsZXJvLCBmb3JQayB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA/IGdldEZ1bmNpb25IYWJpbGl0YXIoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMpIDogKCkgPT4gdHJ1ZTtcclxuICAgIHZhciB7IG1vZG9EZXNwbGllZ3VlIH0gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIHZhciBpZCA9IGB0ZXh0by0ke2Nhc2lsbGVyby5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHsgaWQsIHN0eWxlOiAnZGlzcGxheScsIGZ1bjogKHI6IFJlc3B1ZXN0YXMpID0+IGhhYmlsaXRhZG9yKHIpIHx8IG1vZG9EZXNwbGllZ3VlID09ICdtZXRhZGF0b3MnID8gJ2Jsb2NrJyA6ICdub25lJyB9KVxyXG4gICAgdmFyIGVzUmVzdW1lbkZvcm11bGFyaW8gPSBjYXNpbGxlcm8uY2FzaWxsZXJvID09ICdSZXNGb3InIGFzIElkQ2FzaWxsZXJvOyAvLyBUT0RPOiBDYW1iaWEgZXN0byBxdWUgZXN0w6EgamFyY29kZWFkby5cclxuICAgIGlmIChlc1Jlc3VtZW5Gb3JtdWxhcmlvKSB7XHJcbiAgICAgICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgICAgICBpZCwgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgICAgICBmdW46IChcclxuICAgICAgICAgICAgICAgIHI6IFJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgICAgICBfZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPixcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvOiBIVE1MRGl2RWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrQWxsOiB7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgICAgICAgICAgICAgZXN0cnVjdHVyYTogRXN0cnVjdHVyYVxyXG4gICAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvLnN0eWxlLmRpc3BsYXkgPSAnJztcclxuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBsYXMgcmVzcHVlc3RhcyBzb24gcmVzcHVlc3Rhc1JhaXogcG9ycXVlIFJlc0ZvciBlc3TDoSBlbiBlbCBmb3JtIHBwYWxcclxuICAgICAgICAgICAgICAgIGlmIChyWydyZXN1bWVuRXN0YWRvJ10gYXMgUmVzdW1lbkVzdGFkbyA9PSAndmFjaW8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8udGV4dENvbnRlbnQgPSBcInJlbGV2YW1pZW50byBzaW4gZW1wZXphclwiO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50by50ZXh0Q29udGVudCA9IFwicmVsZXZhbWllbnRvIGVtcGV6YWRvXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzIH0gPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3M7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8uaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50by5hcHBlbmRDaGlsZChib3RvbmVzRGVsRm9ybXVsYXJpbyhyLCB1bmlkYWRfYW5hbGlzaXMsIGVzdHJ1Y3R1cmEsIGZvclBrLCBmZWVkYmFja0FsbCkuY3JlYXRlKCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHZhciBpciA9IChkZWZCb3RvbjogRGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpcikgPT4ge1xyXG4gICAgICAgIC8vIHZhciBudWV2YUZvclBrPXsuLi5mb3JQaywgZm9ybXVsYXJpbzppZEZvcm11bGFyaW9EZXN0aW5vfTtcclxuICAgICAgICAvLyBudWV2YUZvclBrW251ZXZvQ2FtcG9Qa10gPSBkZWZCb3Rvbi5udW1cclxuICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWJyaXJfZm9ybXVsYXJpbywgeyBmb3JQazogZGVmQm90b24uZm9yUGsgfSk7XHJcbiAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ0FNQklBUl9GT1JNVUxBUklPKHsgZm9yUGs6IGRlZkJvdG9uLmZvclBrLCBhcGlsYXJWdWVsdGE6IHRydWUgfSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm9cclxuICAgICAgICBpZD17YCR7aWR9LWV4dGVybm9gfVxyXG4gICAgICAgIGNhc2lsbGVybz17Y2FzaWxsZXJvfVxyXG4gICAgPlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gbGVlcj17ZmFsc2V9IGZvclBrPXtmb3JQa30gLz5cclxuICAgICAgICA8ZGl2IGlkPXtpZH0gc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19PjwvZGl2PlxyXG4gICAgICAgIHtlc1Jlc3VtZW5Gb3JtdWxhcmlvID9cclxuICAgICAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJzcGVjaWFsLWJ1dHRvblwiIGlkPVwiYm90b24taXItcmVzdW1lbi1mb3JtdWxhcmlvXCIgc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19XHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpcihKU09OLnBhcnNlKChldmVudC50YXJnZXQhIGFzIHVua25vd24gYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLmdldEF0dHJpYnV0ZSgnZGVmLWJ1dHRvbicpISkpXHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICA+aXIgKGludGVybm8pPC9CdXR0b24+XHJcbiAgICAgICAgICAgIDogbnVsbH1cclxuXHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxuZnVuY3Rpb24gRmlsdHJvRGVzcGxpZWd1ZShwcm9wczogeyBmaWx0cm86IEZpbHRybywgZm9yUGs6IEZvclBrIH0pIHtcclxuICAgIHZhciB7IGZpbHRybyB9ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBjYXNpbGxlcm89e2ZpbHRyb30+XHJcbiAgICAgICAgPERlc3BsaWVndWVFbmNhYmV6YWRvIGNhc2lsbGVybz17ZmlsdHJvfSAvPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENvbnNpc3RlbmNpYURlc3BsaWVndWUocHJvcHM6IHsgY2FzaWxsZXJvOiBDb25zaXN0ZW5jaWEsIGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICB2YXIgeyBjYXNpbGxlcm8sIGZvclBrIH0gPSBwcm9wcztcclxuICAgIHZhciBoYWJpbGl0YWRvciA9IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzID8gZ2V0RnVuY2lvbkhhYmlsaXRhcihjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcykgOiAoKSA9PiB0cnVlO1xyXG4gICAgdmFyIHsgbW9kb0Rlc3BsaWVndWUgfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgdmFyIGlkID0gYGNvbnNpc3RlbmNpYS0ke2Nhc2lsbGVyby5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHsgaWQsIHN0eWxlOiAnZGlzcGxheScsIGZ1bjogKHI6IFJlc3B1ZXN0YXMpID0+IGhhYmlsaXRhZG9yKHIpIHx8IG1vZG9EZXNwbGllZ3VlID09ICdtZXRhZGF0b3MnID8gJ2Jsb2NrJyA6ICdub25lJyB9KVxyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm9cclxuICAgICAgICBpZD17aWR9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtjYXNpbGxlcm99XHJcbiAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19XHJcbiAgICA+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfSBsZWVyPXtmYWxzZX0gZm9yUGs9e2ZvclBrfSAvPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbnR5cGUgRGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpciA9XHJcbiAgICAoeyBmb3JQazogRm9yUGssIG51bTogbnVtYmVyLCBhY3R1YWw6IGJvb2xlYW4sIHByZXZpbzogYm9vbGVhbiB9IHxcclxuICAgIHsgZm9yUGs6IEZvclBrLCBudW06IG51bWJlciwgYWN0dWFsOiBib29sZWFuLCBwcmV2aW86IGZhbHNlLCBlc0FncmVnYXI6IHRydWUgfSB8XHJcbiAgICB7IGZvclBrOiBGb3JQaywgbnVtOiBudW1iZXIsIGFjdHVhbDogYm9vbGVhbiwgcHJldmlvOiBmYWxzZSwgZXNDb25maXJtYXI6IHRydWUgfSB8XHJcbiAgICB7IGZvclBrOiBGb3JQaywgbnVtOiBudW1iZXIsIGFjdHVhbDogYm9vbGVhbiwgcHJldmlvOiBmYWxzZSwgcGVybWl0ZUJvcnJhcjogYm9vbGVhbiB9IHxcclxuICAgIHsgZm9yUGs6IEZvclBrLCBudW06IGZhbHNlLCBhY3R1YWw6IGJvb2xlYW4sIHByZXZpbzogdHJ1ZSwgdW5pY286IHRydWUgfSlcclxuICAgICYgeyBlc0NvbmZpcm1hcj86IHRydWUsIGVzQWdyZWdhcj86IHRydWUsIHBlcm1pdGVCb3JyYXI/OiBib29sZWFuLCBwZXJtaXRlQm9ycmFyR2FiaW5ldGU/OiBib29sZWFuLCBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQgfTtcclxuXHJcblxyXG52YXIgYm90b25Gb3JtdWxhcmlvQ29uUmVzdW1lbiA9IChcclxuICAgIGRlZkJvdG9uOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyLFxyXG4gICAgZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPixcclxuICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzOiBSZXNwdWVzdGFzLFxyXG4gICAgY2FzaWxsZXJvOiB7IGRlc3BsaWVndWVPY3VsdGE/OiBib29sZWFuIHwgbnVsbCwgZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz86IHN0cmluZywgYWNsYXJhY2lvbjogc3RyaW5nIHwgbnVsbCwgZXhwcmVzaW9uX2hhYmlsaXRhcj86IHN0cmluZywgbm9tYnJlPzogc3RyaW5nLCBzYWx0bzogc3RyaW5nIHwgbnVsbCwgZXNwZWNpYWw/OiBhbnkgfSxcclxuICAgIGZvclBrUGFkcmU6IEZvclBrLFxyXG4gICAgaWRCdXR0b246IHN0cmluZyxcclxuICAgIGZvcm11bGFyaW9BQWJyaXI6IEZvcm11bGFyaW8sXHJcbiAgICBwZWRpckNvbmZpcm1hY2lvbkJvcnJhZG8/OiAoZGVmQm90b246IERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIsIGZvclBrUGFkcmU6IEZvclBrKSA9PiB2b2lkXHJcbikgPT4ge1xyXG4gICAgdmFyIGZvclBrOiBGb3JQayA9IGRlZkJvdG9uLmZvclBrO1xyXG4gICAgdmFyIHN1Zmlqb0lkRWxlbWVudG8gPSB0b1BsYWluRm9yUGsoZm9yUGspICsgKGRlZkJvdG9uLmVzQ29uZmlybWFyID8gJy1saXN0bycgOiAnJyk7XHJcbiAgICB2YXIgaWQgPSBgZGl2LWJvdG9uLWZvcm11bGFyaW8tJHtzdWZpam9JZEVsZW1lbnRvfWA7XHJcbiAgICB2YXIgZXN0YWRvID0gZmVlZGJhY2tGb3JtLnJlc3VtZW47XHJcbiAgICByZXR1cm4gaHRtbC50cih7XHJcbiAgICAgICAgaWQsXHJcbiAgICAgICAgY2xhc3M6IFwic2VjY2lvbi1ib3Rvbi1mb3JtdWxhcmlvXCIsXHJcbiAgICAgICAgJGF0dHJzOiB7XHJcbiAgICAgICAgICAgIFwibnVlc3Ryby12YWxpZGF0b3JcIjogZGVmQm90b24uYWN0dWFsID8gJ2FjdHVhbCcgOiBkZWZCb3Rvbi5wcmV2aW8gPyAndmFsaWRhJyA6ICd0b2RhdmlhX25vJyxcclxuICAgICAgICAgICAgXCJvY3VsdGFyLXNhbHRlYWRhXCI6IGNhc2lsbGVyby5kZXNwbGllZ3VlT2N1bHRhID8gKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzID8gJ0lOSEFCSUxJVEFSJyA6ICdTSScpIDogJ05PJyxcclxuICAgICAgICAgICAgXCJ0aWVuZS12YWxvclwiOiBcIk5PXCIsXHJcbiAgICAgICAgICAgIFwiZGVmLWJ1dHRvblwiOiBKU09OLnN0cmluZ2lmeShkZWZCb3RvbilcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgY2FzaWxsZXJvLmFjbGFyYWNpb24gP1xyXG4gICAgICAgICAgICBodG1sLnRkKHsgY2xhc3M6IFwiYWNsYXJhY2lvblwiIH0sIFticmVha2VhYmxlVGV4dChjYXNpbGxlcm8uYWNsYXJhY2lvbildKVxyXG4gICAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgaHRtbC50ZCh7XHJcbiAgICAgICAgICAgIGNvbHNwYW46IChkZWZCb3Rvbi5lc0FncmVnYXIgfHwgZGVmQm90b24uZXNDb25maXJtYXIpID9cclxuICAgICAgICAgICAgICAgIChjYXNpbGxlcm8uZXNwZWNpYWw/LmNhbXBvc1Jlc3VtZW4ubGVuZ3RoID8/IDEpICsgKGNhc2lsbGVyby5hY2xhcmFjaW9uID8gMCA6IDEpXHJcbiAgICAgICAgICAgICAgICA6IG51bGxcclxuICAgICAgICB9LCBbXHJcbiAgICAgICAgICAgIEJ1dHRvbjIoe1xyXG4gICAgICAgICAgICAgICAgLy8gaWQ6YHZhci0ke2lkVmFyaWFibGV9YCxcclxuICAgICAgICAgICAgICAgIGlkOiBgYm90b24tZm9ybXVsYXJpby0ke3N1Zmlqb0lkRWxlbWVudG99YCxcclxuICAgICAgICAgICAgICAgIHZhcmlhbnQ6IGRlZkJvdG9uLmFjdHVhbCA/IFwiY29udGFpbmVkXCIgOiBcIm91dGxpbmVkXCIsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGVmQm90b24uZGlzYWJsZWQsXHJcbiAgICAgICAgICAgICAgICBjb2xvcjogZGVmQm90b24uYWN0dWFsID8gXCJwcmltYXJ5XCIgOiBcImluaGVyaXRcIixcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVmQm90b24uZXNDb25maXJtYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlZkJvdG9uLm51bSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FzaWxsZXJvLnNhbHRvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBsaXN0bywgYWdyZWdhciB9ID0gZ2V0QkZWYXJOYW1lcyhjYXNpbGxlcm8uc2FsdG8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBmb3JQa1BhZHJlLCB2YXJpYWJsZTogbGlzdG8sIHJlc3B1ZXN0YTogZGVmQm90b24ubnVtIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBmb3JQa1BhZHJlLCB2YXJpYWJsZTogYWdyZWdhciwgcmVzcHVlc3RhOiAxIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhciBhcyBJZFZhcmlhYmxlLCByZXNwdWVzdGE6IGRlZkJvdG9uLm51bSBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZEJ1dHRvbikhIGFzIEhUTUxCdXR0b25FbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uc2V0QXR0cmlidXRlKCdkZWYtYnV0dG9uJywgSlNPTi5zdHJpbmdpZnkoZGVmQm90b24pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICRhdHRyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIFwicmVzdW1lbi1lc3RhZG9cIjogZXN0YWRvICE9ICd2YWNpbycgPyBlc3RhZG8gOiBkZWZCb3Rvbi5hY3R1YWwgPyAnYWN0dWFsJyA6IGRlZkJvdG9uLnByZXZpbyA/IGVzdGFkbyA6ICd0b2RhdmlhX25vJyxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICwgY2hpbGRyZW46IFtcclxuICAgICAgICAgICAgICAgICAgICAoZGVmQm90b24uZXNBZ3JlZ2FyID8gJ2FncmVnYXInIDogZGVmQm90b24uZXNDb25maXJtYXIgPyAnTGlzdG8nIDogY2FzaWxsZXJvLm5vbWJyZSArICcgJyArIChkZWZCb3Rvbi5udW0gfHwgJycpKSxcclxuICAgICAgICAgICAgICAgICAgICBodG1sLnN2Zyh7IGZvY3VzYWJsZTogZmFsc2UsIHZpZXdib3g6IFwiMCAwIDI0IDI0XCIsIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsIHN0eWxlOiBzdHlsZVRvQ3NzKHsgZmlsbDogXCJjdXJyZW50Q29sb3JcIiB9KSB9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwucGF0aCh7IGQ6IChkZWZCb3Rvbi5lc0FncmVnYXIgPyBtYXRlcmlhbElvSWNvbnNTdmdQYXRoLkFkZCA6IGRlZkJvdG9uLmVzQ29uZmlybWFyID8gbWF0ZXJpYWxJb0ljb25zU3ZnUGF0aC5DaGVjayA6IGNhc2lsbGVyby5zYWx0byA/IG1hdGVyaWFsSW9JY29uc1N2Z1BhdGguRm9yd2FyZCA6IG1hdGVyaWFsSW9JY29uc1N2Z1BhdGguRXhpdFRvQXBwKSwgc3R5bGU6IHN0eWxlVG9Dc3MoeyBmaWxsOiAnY3VycmVudENvbG9yJyB9KSB9KVxyXG4gICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAoZGVmQm90b24ucGVybWl0ZUJvcnJhciB8fCBkZWZCb3Rvbi5wZXJtaXRlQm9ycmFyR2FiaW5ldGUgP1xyXG4gICAgICAgICAgICAgICAgQnV0dG9uMih7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImJvdG9uLWJvcnJhci11YS12YWNpYVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcImRlZmF1bHRcIixcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50OiBcIm91dGxpbmVkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgbWFyZ2luTGVmdDogJzhweCcgfSxcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5zdmcoeyBmb2N1c2FibGU6IGZhbHNlLCB2aWV3Ym94OiBcIjAgMCAyNCAyNFwiLCBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLCBzdHlsZTogc3R5bGVUb0Nzcyh7IGZpbGw6IFwiY3VycmVudENvbG9yXCIgfSkgfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5wYXRoKHsgZDogbWF0ZXJpYWxJb0ljb25zU3ZnUGF0aC5EZWxldGVGb3JldmVyLCBzdHlsZTogc3R5bGVUb0Nzcyh7IGZpbGw6ICdjdXJyZW50Q29sb3InIH0pIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlZkJvdG9uLnBlcm1pdGVCb3JyYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2lvbl9ib3JyYXJfZm9ybXVsYXJpbyh7IGZvclBrLCBmb3JQa1BhZHJlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBsaXN0bywgYWdyZWdhciB9ID0gZ2V0QkZWYXJOYW1lcyhjYXNpbGxlcm8uc2FsdG8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlZkJvdG9uLm51bSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBmb3JQa1BhZHJlLCB2YXJpYWJsZTogYWdyZWdhciwgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogZm9yUGtQYWRyZSwgdmFyaWFibGU6IGxpc3RvLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBmb3JQa1BhZHJlLCB2YXJpYWJsZTogY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgYXMgSWRWYXJpYWJsZSwgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVmQm90b24ucGVybWl0ZUJvcnJhckdhYmluZXRlICYmIHBlZGlyQ29uZmlybWFjaW9uQm9ycmFkbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVkaXJDb25maXJtYWNpb25Cb3JyYWRvKGRlZkJvdG9uLCBmb3JQa1BhZHJlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IG51bGwpLFxyXG4gICAgICAgICAgICAoZGVmQm90b24uZXNDb25maXJtYXIgJiYgY2FzaWxsZXJvLnNhbHRvICYmIHJlc3B1ZXN0YXNBdW1lbnRhZGFzWyckQi5GOicgKyAoY2FzaWxsZXJvLnNhbHRvLnN1YnN0cmluZygwLCAyKSA9PSAnRjonID8gY2FzaWxsZXJvLnNhbHRvLnNsaWNlKDIpIDogY2FzaWxsZXJvLnNhbHRvKSBhcyBJZFZhcmlhYmxlXSAhPSBudWxsID9cclxuICAgICAgICAgICAgICAgIEJ1dHRvbjIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJib3Rvbi1kZXNoYWNlci1saXN0b1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcImRlZmF1bHRcIixcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50OiBcIm91dGxpbmVkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgbWFyZ2luTGVmdDogJzhweCcgfSxcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkRlc2hhY2VyIExpc3RvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuc3ZnKHsgZm9jdXNhYmxlOiBmYWxzZSwgdmlld2JveDogXCIwIDAgMjQgMjRcIiwgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIiwgc3R5bGU6IHN0eWxlVG9Dc3MoeyBtYXJnaW5MZWZ0OiAnNHB4JywgaGVpZ2h0OiAnMjBweCcsIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnIH0pIH0sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwucGF0aCh7IGQ6IG1hdGVyaWFsSW9JY29uc1N2Z1BhdGguRGVsZXRlRm9yZXZlciwgc3R5bGU6IHN0eWxlVG9Dc3MoeyBmaWxsOiAnY3VycmVudENvbG9yJyB9KSB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBsaXN0bywgYWdyZWdhciB9ID0gZ2V0QkZWYXJOYW1lcyhjYXNpbGxlcm8uc2FsdG8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogZm9yUGtQYWRyZSwgdmFyaWFibGU6IGFncmVnYXIsIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogZm9yUGtQYWRyZSwgdmFyaWFibGU6IGxpc3RvLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogZm9yUGtQYWRyZSwgdmFyaWFibGU6IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyIGFzIElkVmFyaWFibGUsIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogbnVsbClcclxuICAgICAgICBdKSxcclxuICAgICAgICAoZGVmQm90b24ubnVtICE9PSBmYWxzZSAmJiAhZGVmQm90b24uZXNBZ3JlZ2FyICYmICFkZWZCb3Rvbi5lc0NvbmZpcm1hciA/XHJcbiAgICAgICAgICAgIChjYXNpbGxlcm8uZXNwZWNpYWw/LmNhbXBvc1Jlc3VtZW4gPz8gWy8qZGVmQm90b24ubnVtLnRvU3RyaW5nKCkqL10pLm1hcChcclxuICAgICAgICAgICAgICAgIChjYW1wbzogc3RyaW5nKSA9PiBodG1sLnRkKChyZXNwdWVzdGFzQXVtZW50YWRhc1tmb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpc11bZGVmQm90b24ubnVtIC0gMV1bY2FtcG8gYXMgSWRWYXJpYWJsZV0gPz8gJycpLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgOiBudWxsKVxyXG4gICAgICAgIC8vIGh0bWwuZGl2KHtjbGFzczonaW5saW5lLWRpYWxvZycsICRhdHRyczp7XCJpbmxpbmUtZGlhbG9nLW9wZW5cIjogY29uZmlybWFyRm9yemFySXIgPT0gZGVmQm90b24ubnVtPyd2aXNpYmxlJzonaGlkZGVuJ319LFsgICAgICAgICAgICAgICAgXSlcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICAgICAge2RlZkJvdG9uLmVzQWdyZWdhcj88PiA8c3Bhbj4gIDwvc3Bhbj4gPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPjxJQ09OLkNoZWNrLz48L0J1dHRvbj48Lz46bnVsbH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICAqL1xyXG4gICAgXSkuY3JlYXRlKClcclxufVxyXG5cclxudmFyIGJ1c2Nhckhub3NGb3JtdWxhcmlvID0gKGlkRm9ybXVsYXJpb0Rlc3Rpbm86IElkRm9ybXVsYXJpbykgPT4ge1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICB2YXIgdWEgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2lkRm9ybXVsYXJpb0Rlc3Rpbm9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzO1xyXG4gICAgcmV0dXJuIGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKVxyXG4gICAgICAgIC5maWx0ZXIoKGluZm9Gb3JtdWxhcmlvOiBJbmZvRm9ybXVsYXJpbywgX2lkRm9ybTogSWRGb3JtdWxhcmlvKSA9PlxyXG4gICAgICAgICAgICBpbmZvRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YVxyXG4gICAgICAgICkubWFwKChfaW5mb0Zvcm11bGFyaW86IEluZm9Gb3JtdWxhcmlvLCBpZEZvcm06IElkRm9ybXVsYXJpbykgPT5cclxuICAgICAgICAgICAgaWRGb3JtXHJcbiAgICAgICAgKS5hcnJheSgpXHJcbn1cclxuXHJcbnZhciBjaGVja0Zvcm1zVmFjaW9zID0gKGZvcm1zOiBJZEZvcm11bGFyaW9bXSwgZmVlZGJhY2tBbGw6IHtcclxuICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiAvLyByZXN1bHRhZG8gZGVsIHJvd1ZhbGlkYXRvciBwYXJhIGVzdGFkby5mb3JQa1xyXG59LCBmb3JQazogRm9yUGspID0+IHtcclxuICAgIHJldHVybiBmb3Jtcy5maWx0ZXIoKGZvcm06IElkRm9ybXVsYXJpbykgPT4ge1xyXG4gICAgICAgIGxldCBteWZvclBrID0geyAuLi5mb3JQaywgZm9ybXVsYXJpbzogZm9ybSB9O1xyXG4gICAgICAgIHZhciBmZWVkYmFjayA9IGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhteWZvclBrKV07XHJcbiAgICAgICAgcmV0dXJuIGZlZWRiYWNrLnJlc3VtZW4gIT0gJ3ZhY2lvJ1xyXG4gICAgfSkubGVuZ3RoID09IDBcclxufVxyXG5cclxuZnVuY3Rpb24gQm90b25Gb3JtdWxhcmlvRGVzcGxpZWd1ZShwcm9wczogeyBjYXNpbGxlcm86IEJvdG9uRm9ybXVsYXJpbywgZm9ybXVsYXJpbzogRm9ybXVsYXJpbywgZm9yUGs6IEZvclBrIH0pIHtcclxuICAgIHZhciB7IGNhc2lsbGVybywgZm9yUGsgfSA9IHByb3BzO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPyBnZXRGdW5jaW9uSGFiaWxpdGFyKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzKSA6ICgpID0+IHRydWU7XHJcbiAgICB2YXIgeyBvcGNpb25lcyB9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICB2YXIgeyBsaXN0bzogQkZfbGlzdG8sIGFncmVnYXI6IEJGX2FncmVnYXIsIGlkRm9ybXVsYXJpbzogaWRGb3JtdWxhcmlvRGVzdGlubyB9ID0gZ2V0QkZWYXJOYW1lcyhjYXNpbGxlcm8uc2FsdG8pO1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICB2YXIgeyBmb3JtdWxhcmlvQUFicmlyIH0gPSB1c2VTZWxlY3RvcigoX3N0YXRlOiBDYXNvU3RhdGUpID0+ICh7XHJcbiAgICAgICAgZm9ybXVsYXJpb0FBYnJpcjogZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tpZEZvcm11bGFyaW9EZXN0aW5vXS5jYXNpbGxlcm9zLFxyXG4gICAgfSkpO1xyXG4gICAgdmFyIHN1Zmlqb0lkRWxlbWVudG8gPSB0b1BsYWluRm9yUGsoZm9yUGspO1xyXG4gICAgLypcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZDpgZGl2LWJvdG9uLWZvcm11bGFyaW8tJHtzdWZpam9JZEVsZW1lbnRvfWAsIFxyXG4gICAgICAgIGF0dHI6J2VzdGEtaW5oYWJpbGl0YWRhJywgXHJcbiAgICAgICAgLy8gZnVuOiAocjpSZXNwdWVzdGFzKT0+aGFiaWxpdGFkb3Iocik/J1NJJzonTk8nXHJcbiAgICAgICAgZnVuOiAoX3I6UmVzcHVlc3Rhcyk9PidOTydcclxuICAgIH0pO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG88SFRNTEJ1dHRvbkVsZW1lbnQ+KHtcclxuICAgICAgICBpZDpgYm90b24tZm9ybXVsYXJpby0ke3N1Zmlqb0lkRWxlbWVudG99YCwgXHJcbiAgICAgICAgcHJvcDonZGlzYWJsZWQnLCBcclxuICAgICAgICAvLyBmdW46IChyOlJlc3B1ZXN0YXMpPT4haGFiaWxpdGFkb3IocilcclxuICAgICAgICBmdW46IChfcjpSZXNwdWVzdGFzKT0+ZmFsc2VcclxuICAgIH0pO1xyXG4gICAgKi9cclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBbY29uZmlybWFyRm9yemFySXIsIHNldENvbmZpcm1hckZvcnphcklyXSA9IHVzZVN0YXRlPERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIgfCBmYWxzZSB8IG51bGw+KG51bGwpO1xyXG4gICAgdmFyIFtjb25maXJtYWNpb25Cb3JyYWRvLCBzZXRDb25maXJtYWNpb25Cb3JyYWRvXSA9IHVzZVN0YXRlPHtkZWZCb3RvbjogRGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpciwgZm9yUGtQYWRyZTogRm9yUGssIGRhdG9zOiBhbnl9IHwgbnVsbD4obnVsbCk7XHJcbiAgICB2YXIgW2ZyYXNlQm9ycmFkbywgc2V0RnJhc2VCb3JyYWRvXSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIHZhciBbZXJyb3JGcmFzZUJvcnJhZG8sIHNldEVycm9yRnJhc2VCb3JyYWRvXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIHZhciBwZXJtaXRlQm9ycmFyR2FiaW5ldGUgPSBnZXREYXRvc0J5UGFzcygpLnBlcm1pdGVCb3JyYXJFbGVtZW50b3NVQSA/PyBmYWxzZTtcclxuICAgIHZhciBwZWRpckNvbmZpcm1hY2lvbkJvcnJhZG8gPSAoZGVmQm90b246IERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIsIGZvclBrUGFkcmU6IEZvclBrKSA9PiB7XHJcbiAgICAgICAgY29uc3Qge3Jlc3B1ZXN0YXN9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrUGFkcmUpXHJcbiAgICAgICAgdmFyIGRhdG9zSGlqb3MgPSByZXNwdWVzdGFzW2Zvcm11bGFyaW9BQWJyaXIudW5pZGFkX2FuYWxpc2lzXVsoZGVmQm90b24ubnVtIHx8IDEpIC0gMV07XHJcbiAgICAgICAgc2V0Q29uZmlybWFjaW9uQm9ycmFkbyh7IGRlZkJvdG9uLCBmb3JQa1BhZHJlLCBkYXRvczogZGF0b3NIaWpvcyB9KTtcclxuICAgICAgICBzZXRGcmFzZUJvcnJhZG8oJycpO1xyXG4gICAgICAgIHNldEVycm9yRnJhc2VCb3JyYWRvKGZhbHNlKTtcclxuICAgIH07XHJcbiAgICB2YXIgbXVsdGlwbGVGb3JtdWxhcmlvcyA9IGZvcm11bGFyaW9BQWJyaXIudW5pZGFkX2FuYWxpc2lzICE9IHByb3BzLmZvcm11bGFyaW8udW5pZGFkX2FuYWxpc2lzO1xyXG4gICAgdmFyIG51ZXZvQ2FtcG9QayA9IGRlZk9wZXJhdGl2by5kZWZVQVtmb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpc10ucGs7XHJcbiAgICAvLyB2YXIgdmFyX25hbWU9JyRCLicrY2FzaWxsZXJvLnNhbHRvOyAvL29yaWdpbmFsXHJcbiAgICB2YXIgaWRTZWNjaW9uID0gYHNlY2Npb24tYm90b24tZm9ybXVsYXJpby0ke0JGX2xpc3RvfWA7XHJcbiAgICB2YXIgaWRCdXR0b24gPSBgc3BlY2lhbC1idXR0b24tJHtpZFNlY2Npb259YDtcclxuICAgIHZhciB2YXJfbmFtZV9yZWdpc3RybyA9IG11bHRpcGxlRm9ybXVsYXJpb3MgPyBCRl9hZ3JlZ2FyIDogQkZfbGlzdG87XHJcbiAgICByZWdpc3RyYXJFbGVtZW50bzxIVE1MRGl2RWxlbWVudD4oe1xyXG4gICAgICAgIGlkOiBpZFNlY2Npb24sXHJcbiAgICAgICAgdmFyaWFibGU6IHZhcl9uYW1lX3JlZ2lzdHJvLFxyXG4gICAgICAgIGZvclBrOiBmb3JQayxcclxuICAgICAgICBkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgZnVuOiAocmVzcHVlc3Rhc0F1bWVudGFkYXM6IFJlc3B1ZXN0YXMsIGZlZWRiYWNrUm93OiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgZGl2OiBIVE1MRGl2RWxlbWVudCxcclxuICAgICAgICAgICAgZmVlZGJhY2tBbGw6IHtcclxuICAgICAgICAgICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiAvLyByZXN1bHRhZG8gZGVsIHJvd1ZhbGlkYXRvciBwYXJhIGVzdGFkby5mb3JQa1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXN0YWRvX2xpc3RvID0gZmVlZGJhY2tSb3cuZmVlZGJhY2tbQkZfbGlzdG9dPy5lc3RhZG8gfHwgJ3ZhbGlkYSc7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXN0YWRvX2FncmVnYXIgPSBtdWx0aXBsZUZvcm11bGFyaW9zID8gKGZlZWRiYWNrUm93LmZlZWRiYWNrW0JGX2FncmVnYXJdPy5lc3RhZG8gfHwgJ3ZhbGlkYScpIDogJ3ZhbGlkYSc7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXN0YWRvX2dlbmVyYWwgPSBlc3RhZG9fYWdyZWdhciAhPT0gJ3ZhbGlkYScgPyBlc3RhZG9fYWdyZWdhciA6IGVzdGFkb19saXN0bztcclxuICAgICAgICAgICAgICAgIHNldEF0dHJEaXN0aW50byhkaXYsICdudWVzdHJvLXZhbGlkYXRvcicsIGVzdGFkb19nZW5lcmFsKTtcclxuICAgICAgICAgICAgICAgIHNldEF0dHJEaXN0aW50byhkaXYsICd0aWVuZS12YWxvcicsIGVzdGFkb19nZW5lcmFsID09PSAndmFsaWRhJyA/ICd2YWxpZG8nIDogJ05PJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGxpc3RhRGVCb3RvbmVzQWJyaXI6IERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXJbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgLy8gdmFyIGVzVmFyQWN0dWFsID0gZmVlZGJhY2tSb3cuYWN0dWFsID09ICckQi5GOicrY2FzaWxsZXJvLnNhbHRvOyAgLy9vcmlnaW5hbFxyXG4gICAgICAgICAgICAgICAgdmFyIGVzVmFyQWN0dWFsID0gISFmZWVkYmFja1Jvdy5hY3R1YWw/LnN0YXJ0c1dpdGgoQkZfbGlzdG8pO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0JvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUgZXNWYXJBY3R1YWwgJyArZXNWYXJBY3R1YWwgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAobXVsdGlwbGVGb3JtdWxhcmlvcyAmJiBjYXNpbGxlcm8uc2FsdG8gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICBsZXQgZGVmRm9ybXVsYXJpbzpJbmZvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbJ0Y6JytjYXNpbGxlcm8uc2FsdG8gYXMgSWRGb3JtdWxhcmlvXTsgICAgICAvL29yaWdpbmFsXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlZkZvcm11bGFyaW86IEluZm9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tpZEZvcm11bGFyaW9EZXN0aW5vXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGVmVUEgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW2RlZkZvcm11bGFyaW8uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMhXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29uanVudG8gPSByZXNwdWVzdGFzQXVtZW50YWRhc1tkZWZGb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzIV07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhbnRpZGFkRXNwZXJhZGEgPSByZXNwdWVzdGFzQXVtZW50YWRhc1tjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhciBhcyBJZFZhcmlhYmxlXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtQWN0dWFsOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgdmFyIGVzdGFkb0RlbEJvdG9uID0gZmVlZGJhY2tSb3cuZmVlZGJhY2tbJyRCLkY6JytjYXNpbGxlcm8uc2FsdG8gYXMgSWRWYXJpYWJsZV0uZXN0YWRvICAgLy9vcmlnaW5hbFxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBlc3RhZG9EZWxCb3RvbiA9IGZlZWRiYWNrUm93LmZlZWRiYWNrW0JGX2xpc3RvXS5lc3RhZG9cclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQm90b25Gb3JtdWxhcmlvRGVzcGxpZWd1ZSBlc3RhZG9EZWxCb3RvbiAnICtlc3RhZG9EZWxCb3RvbiAgKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29uZmlnU29ydGVvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvID8gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKV0gOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvO1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RhRGVCb3RvbmVzQWJyaXIgPSBsaWtlQXIoY29uanVudG8pLm1hcCgoXywgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbnVtOiBudW1iZXIgPSBudW1iZXJPclN0cmluZ0luY0lmQXJyYXkoaSwgY29uanVudG8pIGFzIG51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZvclBrID0geyAuLi5wcm9wcy5mb3JQaywgZm9ybXVsYXJpbzogaWRGb3JtdWxhcmlvRGVzdGlubywgW251ZXZvQ2FtcG9Qa106IG51bSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9ybUhub3MgPSBidXNjYXJIbm9zRm9ybXVsYXJpbyhpZEZvcm11bGFyaW9EZXN0aW5vKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmVlZGJhY2sgPSBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bUFjdHVhbCA9PSBudWxsICYmIGZlZWRiYWNrLnJlc3VtZW4gPT0gXCJ2YWNpb1wiICYmIGVzdGFkb0RlbEJvdG9uID09ICd2YWxpZGEnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BY3R1YWwgPSBudW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdW1lbjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogY2FsY3VsYXJBY3R1YWxCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBudW0sIG51bUFjdHVhbCwgaWRGb3JtdWxhcmlvRGVzdGlubywgcmVzcHVlc3Rhc0F1bWVudGFkYXMpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOiBudW1BY3R1YWwgPT0gbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pdGVCb3JyYXI6IGxpa2VBcihjb25qdW50bykuYXJyYXkoKS5sZW5ndGggPT0gTnVtYmVyKGkpICsgMSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9ybXNWYWNpb3MoZm9ybUhub3MsIGZlZWRiYWNrQWxsLCBmb3JQaykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhclBlcm1pdGVCb3JyYXJCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBpZEZvcm11bGFyaW9EZXN0aW5vKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pdGVCb3JyYXJHYWJpbmV0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBudW0sIGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSkuYXJyYXkoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHJ1ZSAvKlwicHVlZGUgYWdyZWdhciAvL1RPRE8gVkVSIEVTVE9cIiovICYmIChjb25qdW50byBpbnN0YW5jZW9mIEFycmF5IHx8IGNvbmp1bnRvID09IG51bGwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBudWV2b1ZhbG9yUGsgPSAoY29uanVudG8gPT0gbnVsbCA/IDAgOiBjb25qdW50by5sZW5ndGgpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZvclBrID0geyAuLi5wcm9wcy5mb3JQaywgZm9ybXVsYXJpbzogaWRGb3JtdWxhcmlvRGVzdGlubywgW251ZXZvQ2FtcG9Qa106IG51ZXZvVmFsb3JQayB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGlzdG9QcmVzaW9uYWRvID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbQkZfbGlzdG9dICE9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkZWJlQWdyZWdhck9saXN0byA9IG51bUFjdHVhbCA9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYW50aWRhZEVzcGVyYWRhID09IG51bGwgfHwgY2FudGlkYWRFc3BlcmFkYSAhPSAoY29uanVudG8gIT0gbnVsbCAmJiBjb25qdW50by5sZW5ndGgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIWxpc3RvUHJlc2lvbmFkb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAmJiAoZXN0YWRvRGVsQm90b24gPT0gJ3ZhbGlkYScgfHwgZXNWYXJBY3R1YWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW06IG51ZXZvVmFsb3JQayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzQWdyZWdhcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogZGViZUFncmVnYXJPbGlzdG8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRkFncmVnYXJMaXN0byhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sIGlkRm9ybXVsYXJpb0Rlc3Rpbm8pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW06IG51ZXZvVmFsb3JQayAtIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc0NvbmZpcm1hcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogZGViZUFncmVnYXJPbGlzdG8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRkFncmVnYXJMaXN0byhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sIGlkRm9ybXVsYXJpb0Rlc3Rpbm8pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvclBrID0geyAuLi5wcm9wcy5mb3JQaywgZm9ybXVsYXJpbzogaWRGb3JtdWxhcmlvRGVzdGlubyB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RhRGVCb3RvbmVzQWJyaXIgPSBbeyBmb3JQaywgbnVtOiBmYWxzZSwgdW5pY286IHRydWUsIGFjdHVhbDogZXNWYXJBY3R1YWwsIHByZXZpbzogdHJ1ZSB9XVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHRvZG9zTG9zQm90b25lcyA9IGxpc3RhRGVCb3RvbmVzQWJyaXIubWFwKGRlZkJvdG9uID0+XHJcbiAgICAgICAgICAgICAgICAgICAgYm90b25Gb3JtdWxhcmlvQ29uUmVzdW1lbihkZWZCb3RvbiwgZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKGRlZkJvdG9uLmZvclBrKV0gPz8geyByZXN1bWVuOiAndmFjaW8nIH0sIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8sIHByb3BzLmZvclBrLCBpZEJ1dHRvbiwgZm9ybXVsYXJpb0FBYnJpciwgcGVkaXJDb25maXJtYWNpb25Cb3JyYWRvXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgbGV0IG5vbWJyZXNDYW1wb3NSZXN1bWVuID0gbGlrZUFyKChjYXNpbGxlcm8uZXNwZWNpYWw/LmNhbXBvc1Jlc3VtZW4gfHwgW10pKS5hcnJheSgpLm1hcChjID0+IGMpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGh0bWxTZWNjaW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRTZWNjaW9uKSE7XHJcbiAgICAgICAgICAgICAgICBodG1sU2VjY2lvbi5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgaHRtbFNlY2Npb24uYXBwZW5kQ2hpbGQoaHRtbC50YWJsZSh7IGNsYXNzOiBgdGFibGUgdGFibGUtc3RyaXBlZCAke25vbWJyZXNDYW1wb3NSZXN1bWVuLmxlbmd0aCA/ICd3LWF1dG8nIDogJyd9YCB9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC50aGVhZChbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwudHIoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLmFjbGFyYWNpb24gPyBodG1sLnRoKCkgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC50aChjYXNpbGxlcm8ubm9tYnJlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm5vbWJyZXNDYW1wb3NSZXN1bWVuLm1hcCgobm9tYnJlQ2FtcG8pID0+IGh0bWwudGgobm9tYnJlQ2FtcG8gYXMgc3RyaW5nKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC50Ym9keShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRvZG9zTG9zQm90b25lc1xyXG4gICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICBdKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVycm9yID0gdW5leHBlY3RlZChlcnIpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJlbnRyYSBhbCBjYXRjaFwiKVxyXG4gICAgICAgICAgICAgICAgZGl2LnRleHRDb250ZW50ID0gJ2VzdG8sIEZBTEzDiSAnICsgZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgY29uc3QgaXIgPSAoZGVmQm90b246IERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIpID0+IHtcclxuICAgICAgICBpZiAoIWNhc2lsbGVyby5zYWx0bykge1xyXG4gICAgICAgICAgICBvcGNpb25lcy5tb2RvRGlyZWN0byA/XHJcbiAgICAgICAgICAgICAgICBudWxsXHJcbiAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5WT0xWRVJfSERSKHt9KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIG51ZXZhRm9yUGsgPSB7IC4uLmZvclBrLCBmb3JtdWxhcmlvOiBpZEZvcm11bGFyaW9EZXN0aW5vIH07XHJcbiAgICAgICAgICAgIHZhciB7IGxpc3RvOiBCRl9saXN0bywgYWdyZWdhcjogQkZfYWdyZWdhciB9ID0gZ2V0QkZWYXJOYW1lcyhjYXNpbGxlcm8uc2FsdG8pO1xyXG4gICAgICAgICAgICBpZiAobXVsdGlwbGVGb3JtdWxhcmlvcykge1xyXG4gICAgICAgICAgICAgICAgKG51ZXZhRm9yUGsgYXMgYW55KVtudWV2b0NhbXBvUGtdID0gZGVmQm90b24ubnVtXHJcbiAgICAgICAgICAgICAgICBpZiAoZGVmQm90b24uZXNBZ3JlZ2FyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FncmVnYXJfZm9ybXVsYXJpbywgeyBmb3JQazogbnVldmFGb3JQayB9KTtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiBCRl9hZ3JlZ2FyLCByZXNwdWVzdGE6IDEgYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IHByb3BzLmZvclBrLCB2YXJpYWJsZTogQkZfbGlzdG8sIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhciBhcyBJZFZhcmlhYmxlLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLCB7IGZvclBrOiBudWV2YUZvclBrIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNpIGFicm8gdW5vIGV4aXN0ZW50ZSwgdGFtYmnDqW4gcmVzZXRlbyBlbCBsaXN0byBwYXJhIGZvcnphciBxdWUgdnVlbHZhbiBhIGFwcmV0YXJsbyBzaSBjYW1iaWFuIGFsZ29cclxuICAgICAgICAgICAgICAgICAgICAvL2Rpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBwcm9wcy5mb3JQaywgdmFyaWFibGU6IEJGX2xpc3RvLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBwcm9wcy5mb3JQaywgdmFyaWFibGU6IEJGX2xpc3RvLCByZXNwdWVzdGE6IDEgYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ0FNQklBUl9GT1JNVUxBUklPKHsgZm9yUGs6IG51ZXZhRm9yUGssIGFwaWxhclZ1ZWx0YTogdHJ1ZSB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb25maXJtYXJGb3J6YXJJcikgeyBzZXRDb25maXJtYXJGb3J6YXJJcihmYWxzZSkgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIGNhc2lsbGVybz17Y2FzaWxsZXJvfT5cclxuICAgICAgICB7bXVsdGlwbGVGb3JtdWxhcmlvcyAmJiA8c3BhbiBpZD17J3Zhci0nICsgQkZfYWdyZWdhcn0gc3R5bGU9e3sgcG9zaXRpb246ICdhYnNvbHV0ZScsIG1hcmdpblRvcDogJy02MHB4JyB9fT48L3NwYW4+fVxyXG4gICAgICAgIDxzcGFuIGlkPXsndmFyLScgKyBCRl9saXN0b30gc3R5bGU9e3sgcG9zaXRpb246ICdhYnNvbHV0ZScsIG1hcmdpblRvcDogJy02MHB4JyB9fT48L3NwYW4+XHJcbiAgICAgICAgPGRpdiBpZD17aWRTZWNjaW9ufT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cInNwZWNpYWwtYnV0dG9uXCIgaWQ9e2lkQnV0dG9ufVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlyKEpTT04ucGFyc2UoKGV2ZW50LnRhcmdldCEgYXMgdW5rbm93biBhcyBIVE1MQnV0dG9uRWxlbWVudCkuZ2V0QXR0cmlidXRlKCdkZWYtYnV0dG9uJykhKSlcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+aXIgKGludGVybm8pPC9CdXR0b24+XHJcbiAgICAgICAgPERpYWxvZ1xyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJudWVzdHJvLWRpYWxvZ29cIlxyXG4gICAgICAgICAgICBvcGVuPXshIWNvbmZpcm1hckZvcnphcklyfVxyXG4gICAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRDb25maXJtYXJGb3J6YXJJcihudWxsKX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibnVlc3Ryby1kaWFsb2dvXCI+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5ObyBzZSBwdWVkZSBhdmFuemFyIGFsIHNpZ3VpZW50ZSBmb3JtdWxhcmlvLjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PlF1aXrDoXMgbm8gdGVybWluw7MgZGUgY29udGVzdGFyIGxhcyBwcmVndW50YXMgY29ycmVzcG9uZGllbnRlczwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PlF1aXrDoXMgbm8gY29ycmVzcG9uZGUgZW4gYmFzZSBhIGxhcyByZXNwdWVzdGFzIG9idGVuaWRhczwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJzZWNvbmRhcnlcIiBvbkNsaWNrPXsoKSA9PiBjb25maXJtYXJGb3J6YXJJciAmJiBpcihjb25maXJtYXJGb3J6YXJJcil9PmZvcnphcjwvQnV0dG9uPlxyXG4gICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHZhcmlhbnQ9XCJjb250YWluZWRcIiBvbkNsaWNrPXsoKSA9PiBzZXRDb25maXJtYXJGb3J6YXJJcihudWxsKX0+RW50ZW5kaWRvPC9CdXR0b24+XHJcbiAgICAgICAgPC9EaWFsb2c+XHJcbiAgICAgICAge2NvbmZpcm1hY2lvbkJvcnJhZG8gJiYgKFxyXG4gICAgICAgICAgICA8RGlhbG9nIG9wZW49e3RydWV9IG9uQ2xvc2U9eygpID0+IHsgXHJcbiAgICAgICAgICAgICAgICBzZXRDb25maXJtYWNpb25Cb3JyYWRvKG51bGwpOyBcclxuICAgICAgICAgICAgICAgIHNldEZyYXNlQm9ycmFkbygnJyk7IFxyXG4gICAgICAgICAgICAgICAgc2V0RXJyb3JGcmFzZUJvcnJhZG8oZmFsc2UpOyBcclxuICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICA8RGlhbG9nVGl0bGU+QWR2ZXJ0ZW5jaWE6IFNlIHBlcmRlcsOhbiBkYXRvczwvRGlhbG9nVGl0bGU+XHJcbiAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudFRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtgRXN0w6EgcG9yIGJvcnJhciBlbCBmb3JtdWxhcmlvICR7Y29uZmlybWFjaW9uQm9ycmFkby5kZWZCb3Rvbi5mb3JQay5mb3JtdWxhcmlvfSAoJHtlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW2VzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbY29uZmlybWFjaW9uQm9ycmFkby5kZWZCb3Rvbi5mb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpc10ucGtfYWdyZWdhZGF9OiAke2NvbmZpcm1hY2lvbkJvcnJhZG8uZGVmQm90b24ubnVtfSkuIExvcyBkYXRvcyBkZWwgbWlzbW8geSB0b2RvcyBzdXMgcmVnaXN0cm9zIGFzb2NpYWRvcyBzZSBwZXJkZXLDoW4uIMK/RGVzZWEgY29udGludWFyP2B9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dDb250ZW50VGV4dD5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzIwcHgnLCBtYXJnaW5Cb3R0b206ICcyMHB4JyB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYSBjb25maXJtYXIgZWwgYm9ycmFkbywgZXNjcmliYSBsYSBmcmFzZSA8c3Ryb25nPlwiZm9yemFyIGJvcnJhZG9cIjwvc3Ryb25nPiBhIGNvbnRpbnVhY2nDs246XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudFRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiaW5wdXQtZm9yemFyLWJvcnJhZG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtmcmFzZUJvcnJhZG99IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEZyYXNlQm9ycmFkbyhlLnRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3JGcmFzZUJvcnJhZG8oZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e3dpZHRoOiAnMTAwJScsIHBhZGRpbmc6ICc4cHgnLCBib3JkZXI6IGVycm9yRnJhc2VCb3JyYWRvID8gJzFweCBzb2xpZCByZWQnIDogJzFweCBzb2xpZCAjY2NjJywgYm9yZGVyUmFkaXVzOiAnNHB4J319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZvcnphciBib3JyYWRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtlcnJvckZyYXNlQm9ycmFkbyAmJiA8ZGl2IHN0eWxlPXt7Y29sb3I6ICdyZWQnLCBtYXJnaW5Ub3A6ICc1cHgnLCBmb250U2l6ZTogJzAuODVlbSd9fT5MYSBmcmFzZSBpbmdyZXNhZGEgZXMgaW5jb3JyZWN0YS48L2Rpdj59XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJoNlwiIHN0eWxlPXt7IG1hcmdpblRvcDogJzEwcHgnLCBmb250V2VpZ2h0OiAnYm9sZCcgfX0+RGF0b3MgcXVlIHNlIHBlcmRlcsOhbjo8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXhXaWR0aDogJzYwMHB4JywgbWFyZ2luOiAnMCBhdXRvJywgZm9udEZhbWlseTogJ3NhbnMtc2VyaWYnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8UmVuZGVyaXphZG9ySlNPTiBkYXRvcz17Y29uZmlybWFjaW9uQm9ycmFkby5kYXRvc30gLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgIDxEaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4geyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmZpcm1hY2lvbkJvcnJhZG8obnVsbCk7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RnJhc2VCb3JyYWRvKCcnKTsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvckZyYXNlQm9ycmFkbyhmYWxzZSk7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsYXJcclxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwic2Vjb25kYXJ5XCIgdmFyaWFudD1cImNvbnRhaW5lZFwiIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maXJtYWNpb25Cb3JyYWRvKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJhc2VCb3JyYWRvLnRyaW0oKS50b0xvd2VyQ2FzZSgpICE9PSBcImZvcnphciBib3JyYWRvXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yRnJhc2VCb3JyYWRvKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5wdXQtZm9yemFyLWJvcnJhZG8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHtkZWZCb3RvbiwgZm9yUGtQYWRyZX0gPSBjb25maXJtYWNpb25Cb3JyYWRvO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JQayA9IGRlZkJvdG9uLmZvclBrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8oeyBmb3JQaywgZm9yUGtQYWRyZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBsaXN0bywgYWdyZWdhciB9ID0gZ2V0QkZWYXJOYW1lcyhjYXNpbGxlcm8uc2FsdG8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmQm90b24ubnVtID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogZm9yUGtQYWRyZSwgdmFyaWFibGU6IGFncmVnYXIsIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBmb3JQa1BhZHJlLCB2YXJpYWJsZTogbGlzdG8sIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBmb3JQa1BhZHJlLCB2YXJpYWJsZTogY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgYXMgSWRWYXJpYWJsZSwgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlybWFjaW9uQm9ycmFkbyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RnJhc2VCb3JyYWRvKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3JGcmFzZUJvcnJhZG8oZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH19PkJvcnJhciBkZSB0b2RhcyBmb3JtYXM8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvRGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgPC9EaWFsb2c+XHJcbiAgICAgICAgKX1cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBDYXNpbGxlcm9EZXNjb25vY2lkbyhwcm9wczogeyBjYXNpbGxlcm86IENhc2lsbGVyb0Jhc2UsIGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVyb1xyXG4gICAgICAgIGlkPXtgY2FzaWxsZXJvZGVzY29ub2NpZG8tJHtwcm9wcy5jYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWB9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtwcm9wcy5jYXNpbGxlcm8gYXMgQmxvcXVlfVxyXG4gICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxyXG4gICAgPlxyXG4gICAgICAgIDxUeXBvZ3JhcGh5PlRpcG8gZGUgY2FzaWxsZXJvIG5vIGltcGxlbWVudGFkbzogXCJ7cHJvcHMuY2FzaWxsZXJvLnRpcG9jfVwiIHBhcmEgXCJ7cHJvcHMuY2FzaWxsZXJvLmNhc2lsbGVyb31cIjwvVHlwb2dyYXBoeT5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtwcm9wcy5jYXNpbGxlcm8gYXMgQ2FzaWxsZXJvRW5jYWJlemFibGV9IGxlZXI9e2ZhbHNlfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxuZnVuY3Rpb24gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQazogRm9yUGspIHtcclxuICAgIHJldHVybiB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4ge1xyXG4gICAgICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZvcm11bGFyaW86IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcyxcclxuICAgICAgICAgICAgbW9kb0Rlc3BsaWVndWU6IHRydWUgfHwgc3RhdGUubW9kby5kZW1vID8gc3RhdGUub3BjaW9uZXMubW9kb0Rlc3BsaWVndWUgOiAncmVsZXZhbWllbnRvJyxcclxuICAgICAgICAgICAgbW9kbzogc3RhdGUubW9kbyxcclxuICAgICAgICAgICAgb3BjaW9uZXM6IHN0YXRlLm9wY2lvbmVzLFxyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbn1cclxuXHJcbmZ1bmN0aW9uIENvbmp1bnRvUHJlZ3VudGFzRGVzcGxpZWd1ZShwcm9wczogeyBjYXNpbGxlcm86IENvbmp1bnRvUHJlZ3VudGFzLCBmb3JtdWxhcmlvOiBGb3JtdWxhcmlvLCBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgbGV0IHsgY2FzaWxsZXJvLCBmb3JQayB9ID0gcHJvcHM7XHJcbiAgICB2YXIgaWQgPSBgY29uanVudG8tcHJlZ3VudGFzLSR7Y2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkLFxyXG4gICAgICAgIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICBmdW46IHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShjYXNpbGxlcm8pXHJcbiAgICB9KVxyXG4gICAgbGV0IG1vZG9EZXNwbGllZ3VlID0gXCJub3JtYWxcIjtcclxuICAgIGxldCBoYWJpbGl0YWRvID0gdHJ1ZTtcclxuICAgIHJldHVybiBoYWJpbGl0YWRvIHx8IG1vZG9EZXNwbGllZ3VlID09ICdtZXRhZGF0b3MnID8gPERlc3BsZWdhckNhc2lsbGVybyBpZD17aWR9IGNhc2lsbGVybz17Y2FzaWxsZXJvfT5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtmb3JQa30gbGVlcj17Y2FzaWxsZXJvLmxlZXIgIT09IGZhbHNlfSAvPlxyXG4gICAgICAgIDxEZXNwbGVnYXJDb250ZW5pZG9JbnRlcm5vQmxvcXVlT0Zvcm11bGFyaW8gYmxvcXVlT0Zvcm11bGFyaW89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e2ZvclBrfSBtdWx0aXBsZT17ZmFsc2V9IC8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz4gOiBudWxsO1xyXG59XHJcblxyXG5mdW5jdGlvbiBEZXNwbGVnYXJDb250ZW5pZG9JbnRlcm5vQmxvcXVlT0Zvcm11bGFyaW8ocHJvcHM6IHsgYmxvcXVlT0Zvcm11bGFyaW86IEJsb3F1ZSB8IEZvcm11bGFyaW8gfCBDb25qdW50b1ByZWd1bnRhcywgZm9ybXVsYXJpbzogRm9ybXVsYXJpbywgZm9yUGs6IEZvclBrLCBtdWx0aXBsZTogYm9vbGVhbiB9KSB7XHJcbiAgICB2YXIgcGFyY2lhbGl6YWJsZSA9IHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jID09ICdGJztcclxuICAgIGNvbnN0IFt2ZXJUb2RvLCBzZXRWZXJUb2RvXSA9IHVzZVN0YXRlKCFwYXJjaWFsaXphYmxlKTtcclxuICAgIGNvbnN0IFtmb3JQa0FjdHVhbCwgc2V0Rm9yUGtBY3R1YWxdID0gdXNlU3RhdGU8SWRDYXNpbGxlcm8gfCBudWxsPihudWxsKTtcclxuICAgIGlmIChwYXJjaWFsaXphYmxlKSB7XHJcbiAgICAgICAgaWYgKGZvclBrQWN0dWFsICE9IHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLmNhc2lsbGVybykge1xyXG4gICAgICAgICAgICBzZXRWZXJUb2RvKGZhbHNlKVxyXG4gICAgICAgICAgICBzZXRGb3JQa0FjdHVhbChwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby5jYXNpbGxlcm8pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2V0VmVyVG9kbyh0cnVlKTtcclxuICAgICAgICAgICAgfSwgMjUwKVxyXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRpbWVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBjb25zdCBsaW1pdGVOb1ZlclRvZG8gPSAzO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2MgPT0gJ0YnKSB7XHJcbiAgICAgICAgICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MocHJvcHMuZm9yUGspO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFt0b1BsYWluRm9yUGsocHJvcHMuZm9yUGspLCB2ZXJUb2RvXSlcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jID09ICdGJyAmJiB2ZXJUb2RvKSB7XHJcbiAgICAgICAgICAgIHZhciB7IHNpZ3VpZW50ZVZhcmlhYmxlLCB2YXJpYWJsZUFjdHVhbCB9ID0gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgcmVzcHVlc3RhOiBudWxsLCB2YXJpYWJsZTogTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMsIGZvclBrOiBwcm9wcy5mb3JQayB9KTtcclxuICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWN0dWFsIHx8IHNpZ3VpZW50ZVZhcmlhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKGNvYWxlc2NlKHZhcmlhYmxlQWN0dWFsIGFzIHN0cmluZyB8IG51bGwsIHNpZ3VpZW50ZVZhcmlhYmxlIGFzIHN0cmluZyB8IG51bGwpIGFzIElkVmFyaWFibGUpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcigpXHJcbiAgICAgICAgICAgICAgICBpZiAoZmVlZGJhY2tSb3dWYWxpZGF0b3JbdG9QbGFpbkZvclBrKHByb3BzLmZvclBrKV0ucmVzdW1lbiA9PSAnb2snKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9Ub3AoKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb1RvcCgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNvbnRlbmlkb1wiPlxyXG4gICAgICAgIHt2ZXJUb2RvID8gbnVsbCA6IDxkaXYgc3R5bGU9e3sgaGVpZ2h0OiBcIjUwMHB4XCIsIHRleHRBbGlnbjogJ2NlbnRlcicsIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLCB3aWR0aDogJzEwMCUnLCBwb3NpdGlvbjogXCJmaXhlZFwiLCBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuMyknLCBmb250U2l6ZTogJzIwMCUnIH19ID5jYXJnYW5kby4uLjwvZGl2Pn1cclxuICAgICAgICB7cHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8uY2FzaWxsZXJvcy5tYXAoKGNhc2lsbGVybywgaSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gY2FzaWxsZXJvLnRpcG9jICsgJy0nICsgY2FzaWxsZXJvLmlkX2Nhc2lsbGVybyArICctJyArIGk7XHJcbiAgICAgICAgICAgIHJldHVybiAodmVyVG9kbyB8fCBpIDwgbGltaXRlTm9WZXJUb2RvID9cclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJQXCIgPyA8UHJlZ3VudGFEZXNwbGllZ3VlIGtleT17a2V5fSBwcmVndW50YT17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9IGRlc3BsaWVndWVFbmNhYmV6YWRvPXtjYXNpbGxlcm8uZGVzcGxpZWd1ZUVuY2FiZXphZG8gPz8gKHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jID09ICdDUCcgPyAnbGF0ZXJhbCcgOiAnc3VwZXJpb3InKX0gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJCXCIgPyA8QmxvcXVlRGVzcGxpZWd1ZSBrZXk9e2tleX0gYmxvcXVlPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiRklMVFJPXCIgPyA8RmlsdHJvRGVzcGxpZWd1ZSBrZXk9e2tleX0gZmlsdHJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkJGXCIgPyA8Qm90b25Gb3JtdWxhcmlvRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJDT05TXCIgPyA8Q29uc2lzdGVuY2lhRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiQ1BcIiA/IDxDb25qdW50b1ByZWd1bnRhc0Rlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJURVhUT1wiID8gPFRleHRvRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJQTUFUUklaXCIgPyA8UE1hdHJpekRlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkxJQlJFXCIgPyA8TGlicmVEZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e3Byb3BzLmZvclBrfSAvPiA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENhc2lsbGVyb0Rlc2Nvbm9jaWRvIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfSAvPlxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgOiBpID09IGxpbWl0ZU5vVmVyVG9kbyA/XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9JyRzcGlubmVyJyBjbGFzc05hbWU9XCJzcGlubmVyLWJvcmRlclwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Y2FyZ2FuZG8gYmxvcXVlLi4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSlcclxuICAgICAgICB9PC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJsb3F1ZURlc3BsaWVndWUocHJvcHM6IHsgYmxvcXVlOiBCbG9xdWUsIGZvcm11bGFyaW86IEZvcm11bGFyaW8sIGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICB2YXIgeyBibG9xdWUsIGZvclBrIH0gPSBwcm9wcztcclxuICAgIHZhciBrZXkgPSBibG9xdWUudmVyX2lkICE9ICctJyAmJiBibG9xdWUudmVyX2lkIHx8IGJsb3F1ZS5jYXNpbGxlcm87XHJcbiAgICB2YXIgYWN0aXZlU3RlcCA9IDA7XHJcbiAgICB2YXIgbXVsdGlwbGUgPSAhIWJsb3F1ZS51bmlkYWRfYW5hbGlzaXM7XHJcbiAgICB2YXIgbGlzdGEgPSBbeyBmb3JQaywga2V5OiAwLCBtdWx0aXBsZTogZmFsc2UgfV07XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBibG9xdWUuZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA/IGdldEZ1bmNpb25IYWJpbGl0YXIoYmxvcXVlLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMpIDogKCkgPT4gdHJ1ZTtcclxuICAgIHZhciB7IG1vZG9EZXNwbGllZ3VlIH0gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIGlmIChtdWx0aXBsZSkge1xyXG4gICAgICAgIC8vIFRPRE86IEdFTkVSQUxJWkFSXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBcclxuICAgICAgICAvLyBsaXN0YT1yZXNwdWVzdGFzLnBlcnNvbmFzLm1hcCgoX3BlcnNvbmEsIGkpPT4oXHJcbiAgICAgICAgLy8gICAgIHtmb3JQazp7Li4uZm9yUGssIHBlcnNvbmE6aSsxfSwga2V5OmkrMSwgbXVsdGlwbGU6dHJ1ZX1cclxuICAgICAgICAvLyApKVxyXG4gICAgfVxyXG4gICAgdmFyIGlkID0gYGJsb3F1ZS0ke2Jsb3F1ZS5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZCxcclxuICAgICAgICBzdHlsZTogJ2Rpc3BsYXknLFxyXG4gICAgICAgIGZ1bjogKHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMpID0+IGhhYmlsaXRhZG9yKHJlc3B1ZXN0YXMpIHx8IG1vZG9EZXNwbGllZ3VlID09ICdtZXRhZGF0b3MnID8gJ3Vuc2V0JyA6ICdub25lJ1xyXG4gICAgfSlcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIGNhc2lsbGVybz17YmxvcXVlfSBudWVzdHJvLWJsb3F1ZT17YmxvcXVlLmlkX2Nhc2lsbGVyb30gZXMtbXVsdGlwbGU9e211bHRpcGxlID8gJ1NJJyA6ICdOTyd9IGlkPXtpZH0+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17YmxvcXVlfSBmb3JQaz17Zm9yUGt9IC8+XHJcbiAgICAgICAge2xpc3RhLm1hcCgoeyBrZXksIGZvclBrLCBtdWx0aXBsZSB9KSA9PlxyXG4gICAgICAgICAgICA8RGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvIGtleT17a2V5fSBibG9xdWVPRm9ybXVsYXJpbz17YmxvcXVlfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17Zm9yUGt9IG11bHRpcGxlPXttdWx0aXBsZX0gLz5cclxuICAgICAgICApfVxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+O1xyXG59XHJcblxyXG5jb25zdCBGb3JtdWxhcmlvRW5jYWJlemFkbyA9IERlc3BsaWVndWVFbmNhYmV6YWRvO1xyXG5cclxuZnVuY3Rpb24gTWVudUxldHJhKHByb3BzOiB7IHRhbWFubmlvOiBudW1iZXIsIGRlbm9taW5hY2lvbjogc3RyaW5nIH0pIHtcclxuICAgIGNvbnN0IGNhbWJpYXJMZXRyYSA9ICh0YW1hbm5pbzogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcbiAgICAgICAgcm9vdC5zdHlsZS5mb250U2l6ZSA9IHRhbWFubmlvICsgXCJweFwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDxNZW51SXRlbVxyXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IGNhbWJpYXJMZXRyYShwcm9wcy50YW1hbm5pbyl9IHN0eWxlPXt7IGZvbnRTaXplOiBwcm9wcy50YW1hbm5pbyArICdweCcgfX1cclxuICAgID5sZXRyYSB7cHJvcHMuZGVub21pbmFjaW9ufTwvTWVudUl0ZW0+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEZhc3RTZXR0dXAoKSB7XHJcbiAgICBjb25zdCBbYW5jaG9yRWwsIHNldEFuY2hvckVsXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIHNldEFuY2hvckVsKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xyXG4gICAgICAgIHNldE9wZW4oKHByZXYpID0+ICFwcmV2KTtcclxuICAgIH07XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCBjYW1iaWFyID0gKG1vZG9EZXNwbGllZ3VlOiBNb2RvRGVzcGxpZWd1ZSkgPT4ge1xyXG4gICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLk1PRE9fREVTUExJRUdVRSh7IG1vZG9EZXNwbGllZ3VlIH0pKTtcclxuICAgICAgICBzZXRPcGVuKGZhbHNlKVxyXG4gICAgfVxyXG4gICAgY29uc3Qgb3BjaW9uZXMgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gc3RhdGUub3BjaW9uZXMpXHJcbiAgICByZXR1cm4gPD5cclxuICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfT5cclxuICAgICAgICAgICAgPElDT04uU2V0dGluZ3MgLz5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8TWVudSBvcGVuPXtvcGVufSBhbmNob3JFbD17YW5jaG9yRWx9IG9uQ2xvc2U9eygpID0+IHNldE9wZW4oZmFsc2UpfT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtIG9uQ2xpY2s9eygpID0+IGNhbWJpYXIoXCJyZWxldmFtaWVudG9cIil9Pm5vcm1hbDwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbSBvbkNsaWNrPXsoKSA9PiBjYW1iaWFyKFwiUERGXCIpfT5QREYgcGFyYSByZWxldmFtaWVudG88L01lbnVJdGVtPlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0gb25DbGljaz17KCkgPT4gY2FtYmlhcihcIm1ldGFkYXRvc1wiKX0+cmV2aXNhciBtZXRhZGF0b3M8L01lbnVJdGVtPlxyXG4gICAgICAgICAgICA8RGl2aWRlciAvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsxMn0gZGVub21pbmFjaW9uPVwibXV5IGNoaWNhXCIgLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTR9IGRlbm9taW5hY2lvbj1cImNoaWNhXCIgLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTZ9IGRlbm9taW5hY2lvbj1cIm5vcm1hbFwiIC8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezE5fSBkZW5vbWluYWNpb249XCJncmFuZGVcIiAvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsyMn0gZGVub21pbmFjaW9uPVwiZW5vcm1lXCIgLz5cclxuICAgICAgICAgICAgPERpdmlkZXIgLz5cclxuICAgICAgICAgICAgPE1lbnVJdGVtPjxsYWJlbD48Q2hlY2tib3ggY2hlY2tlZD17b3BjaW9uZXMuY29uQ2FtcG9PcGNpb25lc30gb25DaGFuZ2U9e1xyXG4gICAgICAgICAgICAgICAgKCkgPT4gZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7IG9wY2lvbjogJ2NvbkNhbXBvT3BjaW9uZXMnLCB2YWxvcjogIW9wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXMgfSkpXHJcbiAgICAgICAgICAgIH0gaW5wdXRQcm9wcz17eyAnYXJpYS1sYWJlbCc6ICdwcmltYXJ5IGNoZWNrYm94JyB9fSAvPmNhbXBvIG9wY2lvbmVzPC9sYWJlbD48L01lbnVJdGVtPlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0+PGxhYmVsPjxDaGVja2JveCBjaGVja2VkPXtvcGNpb25lcy5zYWx0b0F1dG9tYXRpY299IG9uQ2hhbmdlPXtcclxuICAgICAgICAgICAgICAgICgpID0+IGRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oeyBvcGNpb246ICdzYWx0b0F1dG9tYXRpY28nLCB2YWxvcjogIW9wY2lvbmVzLnNhbHRvQXV0b21hdGljbyB9KSlcclxuICAgICAgICAgICAgfSBpbnB1dFByb3BzPXt7ICdhcmlhLWxhYmVsJzogJ3ByaW1hcnkgY2hlY2tib3gnIH19IC8+c2FsdG8gYXV0b23DoXRpY288L2xhYmVsPjwvTWVudUl0ZW0+XHJcbiAgICAgICAgPC9NZW51PlxyXG4gICAgPC8+O1xyXG59XHJcblxyXG5mdW5jdGlvbiBCYXJyYURlTmF2ZWdhY2lvbihwcm9wczogeyBmb3JQazogRm9yUGssIHNvbG9MZWN0dXJhOiBib29sZWFuLCBtb2RvRGlyZWN0bzogYm9vbGVhbiB9KSB7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCBmb3JQayA9IHByb3BzLmZvclBrO1xyXG4gICAgY29uc3QgeyBvcGNpb25lcyB9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICBjb25zdCBbY29uZmlybWFDZXJyYXIsIHNldENvbmZpcm1hQ2VycmFyXSA9IHVzZVN0YXRlPGJvb2xlYW4gfCBudWxsPihmYWxzZSk7XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciBkb21pbmlvID0gZ2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXS50ZW0uZG9taW5pbztcclxuICAgIHZhciBjZXJyYXJEaXJlY3RvID0gYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJlbW92ZUNTU0J5SWQoQk9PVFNUUkFQXzVfMV8zX1NSQyk7XHJcbiAgICAgICAgZ290b0NvbnNpc3RpcihcclxuICAgICAgICAgICAgZXN0cnVjdHVyYS5vcGVyYXRpdm8gYXMgSWRPcGVyYXRpdm8sXHJcbiAgICAgICAgICAgIGdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXV0udGFyZWEudGFyZWEsXHJcbiAgICAgICAgICAgIGZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF1cclxuICAgICAgICApO1xyXG4gICAgICAgIC8vdmFyIGhhc2g9bmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5oYXNoPy5yZXBsYWNlKC9eXFwjLywnJykuc3BsaXQoJyZhdXRvcHJvY2VkJylbMF0pO1xyXG4gICAgICAgIC8vLy9oYXNoLmRlbGV0ZSgnYXV0b3Byb2NlZCcpXHJcbiAgICAgICAgLy9jbG9zZSgpO1xyXG4gICAgICAgIC8vbG9jYXRpb24uaGFzaD1oYXNoLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICB2YXIgYm90b25lc0Zvcm11bGFyaW8gPSBbXTtcclxuICAgIGlmICghb3BjaW9uZXMubW9kb0RpcmVjdG8pIHtcclxuICAgICAgICBib3RvbmVzRm9ybXVsYXJpby5wdXNoKHsgcXVlOiAnaGRyJywgYWJyOiAnSGRSJywgaWQ6IElEX0JPVE9OX1ZPTFZFUl9IRFIsIGxhYmVsOiAnaG9qYSBkZSBydXRhJywgcmV0cm9jZXNvOiAwIH0pXHJcbiAgICB9XHJcbiAgICBvcGNpb25lcy5waWxhRm9yUGsuZm9yRWFjaCgoZm9yUGssIGkpID0+XHJcbiAgICAgICAgYm90b25lc0Zvcm11bGFyaW8ucHVzaCh7IHF1ZTogJ3ZvbHZlcicsIGFicjogZm9yUGsuZm9ybXVsYXJpby5yZXBsYWNlKC9eRjovLCAnJyksIGxhYmVsOiBmb3JQay5mb3JtdWxhcmlvLCByZXRyb2Nlc286IG9wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGggLSBpIH0pXHJcbiAgICApXHJcbiAgICBib3RvbmVzRm9ybXVsYXJpby5wdXNoKHsgcXVlOiAnJywgYWJyOiBmb3JQay5mb3JtdWxhcmlvLnJlcGxhY2UoL15GOi8sICcnKSwgbGFiZWw6IGZvclBrLmZvcm11bGFyaW8sIHJldHJvY2VzbzogMCB9KTtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZDogcHJvcHMubW9kb0RpcmVjdG8gPyBJRF9CT1RPTl9DRVJSQVIgOiBJRF9CT1RPTl9WT0xWRVJfSERSLCBkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgZnVuOiAoXHJcbiAgICAgICAgICAgIHI6IFJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgIF9mZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LFxyXG4gICAgICAgICAgICBlbGVtZW50bzogSFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgICAgIGZlZWRiYWNrQWxsOiB7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgICAgICAgICBfZXN0cnVjdHVyYTogRXN0cnVjdHVyYVxyXG4gICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50by5zZXRBdHRyaWJ1dGUoJ3Jlc3VtZW4tZXN0YWRvJywgY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoZm9yUGssIGZlZWRiYWNrQWxsLCByKS5yZXN1bWVuRXN0YWRvKTtcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIDw+XHJcbiAgICAgICAgPEJ1dHRvbkdyb3VwIGtleT1cImZvcm11bGFyaW9zXCIgY2xhc3NOYW1lPVwiYmFycmEtbmF2ZWdhY2lvblwiIHNvbG8tbGVjdHVyYT17cHJvcHMuc29sb0xlY3R1cmEgPyAnc2knIDogJ25vJ30gPlxyXG4gICAgICAgICAgICB7Ym90b25lc0Zvcm11bGFyaW8ubWFwKChiLCBpKSA9PlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj17Yi5xdWUgPT0gZm9yUGsuZm9ybXVsYXJpbyA/IFwicHJpbWFyeVwiIDogXCJpbmhlcml0XCJ9IHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9e2IuaWR9XHJcbiAgICAgICAgICAgICAgICAgICAga2V5PXtgJHtpfS0ke2IucXVlfS0ke2IucmV0cm9jZXNvfWB9XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFiLnF1ZX1cclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYi5xdWUgPT0gJ2hkcicgPyBkaXNwYXRjaGVycy5WT0xWRVJfSERSKHt9KSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hlcnMuVk9MVkVSX0RFX0ZPUk1VTEFSSU8oeyBtYWduaXR1ZFJldHJvY2VzbzogYi5yZXRyb2Nlc28gfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYi5xdWUgPT0gJ2hkcicgPyBudWxsIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLCB7IGZvclBrOiBvcGNpb25lcy5waWxhRm9yUGtbb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aCAtIGIucmV0cm9jZXNvXSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImFiclwiPntiLmFicn08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibGFiZWxcIj57Yi5sYWJlbH08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICA8L0J1dHRvbkdyb3VwPlxyXG4gICAgICAgIHtwcm9wcy5zb2xvTGVjdHVyYSA/IDxUeXBvZ3JhcGh5IGNvbXBvbmVudD1cInNwYW5cIiBzdHlsZT17eyBtYXJnaW46ICcwIDEwcHgnIH19PiAoU29sbyBMZWN0dXJhKSA8L1R5cG9ncmFwaHk+IDogbnVsbH1cclxuICAgICAgICB7cHJvcHMubW9kb0RpcmVjdG8gP1xyXG4gICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbkdyb3VwIGtleT1cInZvbHZlcl95X2dyYWJhclwiIHN0eWxlPXt7IG1hcmdpbjogJzAgMCAwIDMwcHgnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e0lEX0JPVE9OX0NFUlJBUn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17YXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BzLnNvbG9MZWN0dXJhIHx8ICFnZXREaXJ0eSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VycmFyRGlyZWN0bygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25maXJtYUNlcnJhcih0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uRXhpdFRvQXBwIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPERpYWxvZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVuPXshIWNvbmZpcm1hQ2VycmFyfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2hhY2UgcXVlIG5vIHNlIGNpZXJyZSBlbCBtZW5zYWplXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldENvbmZpcm1hQ2VycmFyKGZhbHNlKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwiYWxlcnQtZGlhbG9nLXRpdGxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT1cImFsZXJ0LWRpYWxvZy1kZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nVGl0bGUgaWQ9XCJhbGVydC1kaWFsb2ctdGl0bGVcIj5Db25maXJtZSBjaWVycmUgZGUgZW5jdWVzdGE8L0RpYWxvZ1RpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50VGV4dCBpZD1cImFsZXJ0LWRpYWxvZy1kZXNjcmlwdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVzdMOhIHBvciBzYWxpciBkZSBsYSBlbmN1ZXN0YSwgc2UgcGVyZGVyw6FuIGxvcyBjYW1iaW9zIG5vIGd1YXJkYWRvcy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudFRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0FjdGlvbnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJyYXJEaXJlY3RvKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NhcnRhciBjYW1iaW9zIHkgY2VycmFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmZpcm1hQ2VycmFyKGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51YXIgZWRpdGFuZG8gZW5jdWVzdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nPlxyXG4gICAgICAgICAgICAgICAgICAgIHtwcm9wcy5zb2xvTGVjdHVyYSA/IG51bGwgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17XCJzYXZlLWJ1dHRvblwifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dHJ1ZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2FzeW5jICgpID0+IHRydWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLlNhdmUgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9CdXR0b25Hcm91cD5cclxuICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgIDogbnVsbH1cclxuICAgICAgICA8VHlwb2dyYXBoeSBjbGFzc05hbWU9XCJtb3N0cmFyLWZvclBrXCIgY29tcG9uZW50PVwic3BhblwiIHN0eWxlPXt7IG1hcmdpbjogJzAgMTBweCcgfX0+XHJcbiAgICAgICAgICAgIHtWRVJfRE9NSU5JTyA/IDxkaXYga2V5PXtkb21pbmlvfT48c3Bhbj5kb21pbmlvPC9zcGFuPjxzcGFuPntkb21pbmlvfTwvc3Bhbj48L2Rpdj4gOiAnJ31cclxuICAgICAgICAgICAge2xpa2VBcihwcm9wcy5mb3JQaykuZmlsdGVyKChfLCBrKSA9PiBrICE9ICdmb3JtdWxhcmlvJykubWFwKCh2LCBrKSA9PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBrZXk9e2t9PjxzcGFuPntrfTwvc3Bhbj48c3Bhbj57dn08L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICkuYXJyYXkoKX1cclxuICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgPEZhc3RTZXR0dXAgLz5cclxuICAgIDwvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBCb3RvblZvbHZlckVuRGl2KHsgaWQgfTogeyBpZDogc3RyaW5nIH0pIHtcclxuICAgIHZhciB7IG9wY2lvbmVzIH0gPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gKHsgb3BjaW9uZXM6IHN0YXRlLm9wY2lvbmVzIH0pKTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBlc1ZvbHZlciA9IG9wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGggPiAwO1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiZGl2LWJvdG9uLXZvbHZlclwiPlxyXG4gICAgICAgIDxCdXR0b24gaWQ9e2lkfSBjbGFzc05hbWU9XCJib3Rvbi12b2x2ZXJcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXNWb2x2ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWJyaXJfZm9ybXVsYXJpbywgeyBmb3JQazogb3BjaW9uZXMucGlsYUZvclBrW29wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGggLSAxXSB9KTtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5WT0xWRVJfREVfRk9STVVMQVJJTyh7IG1hZ25pdHVkUmV0cm9jZXNvOiAxIH0pKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYm90b25DZXJyYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChJRF9CT1RPTl9DRVJSQVIpIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElEX0JPVE9OX1ZPTFZFUl9IRFIpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvdG9uQ2VycmFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uQ2VycmFyLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgID4gPElDT04uQ2hldnJvbkxlZnQgLz57ZXNWb2x2ZXIgPyBcIiBWb2x2ZXJcIiA6IFwiIENlcnJhclwifTwvQnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEZvcm11bGFyaW9EZXNwbGllZ3VlKHByb3BzOiB7IGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICB2YXIgZm9yUGsgPSBwcm9wcy5mb3JQaztcclxuICAgIHZhciB7IGZvcm11bGFyaW8sIG1vZG9EZXNwbGllZ3VlLCBtb2RvLCBvcGNpb25lcyB9XHJcbiAgICAgICAgPSB1c2VTZWxlY3RvclZpdmllbmRhKHByb3BzLmZvclBrKTtcclxuICAgIHZhciBzb2xvTGVjdHVyYSA9IGdldERhdG9zQnlQYXNzKCkuc29sb0xlY3R1cmE7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgZXNWb2x2ZXIgPSBvcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoID4gMDtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgdmFyIGNvbnRyb2xTY3JvbGwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBhcnJpYmEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hcnJpYmEnKTtcclxuICAgICAgICAgICAgaWYgKGFycmliYSkge1xyXG4gICAgICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhhcnJpYmEuc3R5bGUsICd2aXNpYmlsaXR5JyxcclxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgYXJyaWJhLmVsVG9wVmlzaWJpbGl6YXIgIT0gbnVsbCAmJiBhcnJpYmEuZWxUb3BWaXNpYmlsaXphciArIDEwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBhYmFqbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFiYWpvJyk7XHJcbiAgICAgICAgICAgIGlmIChhYmFqbykge1xyXG4gICAgICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhhYmFqby5zdHlsZSwgJ3Zpc2liaWxpdHknLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICBhYmFqby5lbEJvdHRvbVZpc2liaWxpemFyICE9IG51bGwgJiYgYWJham8uZWxCb3R0b21WaXNpYmlsaXphciAtIDIwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCArIHdpbmRvdy5pbm5lckhlaWdodCAqIDAuNyA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlkQ2FzbyA9IGxpa2VBcihwcm9wcy5mb3JQaykuZmluZCgoXywgaykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gayAhPSAnZm9ybXVsYXJpbydcclxuICAgICAgICB9KT8udG9TdHJpbmcoKTtcclxuICAgICAgICB3aW5kb3cuZG9jdW1lbnQudGl0bGUgPSBnZXRFc3RydWN0dXJhKCkub3BlcmF0aXZvICsgJy0gJyArIGlkQ2FzbztcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY29udHJvbFNjcm9sbCk7XHJcbiAgICAgICAgY29udHJvbFNjcm9sbCgpO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjb250cm9sU2Nyb2xsKTtcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG4gICAgLy8gVE9ETyBWb2x2ZXIgYSBwb25lciBlbCBtb3ZpbWllbnRvIGEgbGEgYWN0dWFsXHJcbiAgICB2YXIgYWN0dWFsOiBhbnlcclxuICAgIHZhciBjb21wbGV0bzogYW55XHJcbiAgICB2YXIgb25DbGlja1NhbHRhckFjdHVhbCA9ICgpID0+IHtcclxuICAgICAgICB2YXIgeyB2YXJpYWJsZUFjdHVhbCB9ID0gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgcmVzcHVlc3RhOiBudWxsLCB2YXJpYWJsZTogTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMsIGZvclBrOiBwcm9wcy5mb3JQayB9KTtcclxuICAgICAgICBpZiAodmFyaWFibGVBY3R1YWwpIHtcclxuICAgICAgICAgICAgZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZSh2YXJpYWJsZUFjdHVhbClcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgbGlzdGFNb2RvczogTW9kb0Rlc3BsaWVndWVbXSA9IFsnbWV0YWRhdG9zJywgJ3JlbGV2YW1pZW50bycsICdQREYnXTtcclxuICAgIFsnYm90b24tdm9sdmVyLTEnLCAnYm90b24tdm9sdmVyLTInXS5mb3JFYWNoKGlkID0+IHtcclxuICAgICAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgICAgIGlkLCBkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgICAgIGZ1bjogKFxyXG4gICAgICAgICAgICAgICAgcjogUmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50bzogSFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja0FsbDogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgICAgICAgICAgICAgIF9lc3RydWN0dXJhOiBFc3RydWN0dXJhXHJcbiAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG8uc2V0QXR0cmlidXRlKCdyZXN1bWVuLWVzdGFkbycsIGVzVm9sdmVyID8gZmVlZGJhY2tGb3JtLnJlc3VtZW4gOiBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYShmb3JQaywgZmVlZGJhY2tBbGwsIHIpLnJlc3VtZW5Fc3RhZG8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH0pXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGVzcGVjaWFsIGhheSBxdWUgbGVlcmxvIGVuIGVsIHBhcnNlciBkZSBjYXNpbGxlcm9zIHNpIGVzdG8gdGVybWluYSBxdWVkYW5kbyBhc8OtXHJcbiAgICB2YXIgcGFudGFsbGFDb21wbGV0YSA9IGZvcm11bGFyaW8uZXNwZWNpYWw/LnBhbnRhbGxhQ29tcGxldGE7XHJcbiAgICBjb25zdCBtb2RvRE06IE1vZG9ETSA9IG15LmdldExvY2FsVmFyKE1PRE9fRE1fTE9DQUxTVE9SQUdFX0tFWSk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxBcHBCYXIgcG9zaXRpb249XCJmaXhlZFwiIGNvbG9yPXtzb2xvTGVjdHVyYSA/ICdzZWNvbmRhcnknIDogKG1vZG9ETSA9PSAnY2FwYScgPyAnc3VjY2VzcycgOiAncHJpbWFyeScpfT5cclxuICAgICAgICAgICAgICAgIDxUb29sYmFyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCYXJyYURlTmF2ZWdhY2lvbiBmb3JQaz17Zm9yUGt9IHNvbG9MZWN0dXJhPXtzb2xvTGVjdHVyYSB8fCBmYWxzZX0gbW9kb0RpcmVjdG89e29wY2lvbmVzLm1vZG9EaXJlY3RvfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PjxzcGFuIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICc1cHgnIH19Pnttb2RvRE0gPT0gJ2NhcGEnID8gJyBNT0RPIENBUEFDSVRBQ0nDk04nIDogJyd9PC9zcGFuPjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgIDwvVG9vbGJhcj5cclxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJtaW5pLWNvbnNvbGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9BcHBCYXI+XHJcbiAgICAgICAgICAgIDxtYWluPlxyXG4gICAgICAgICAgICAgICAgPFBhcGVyIGNsYXNzTmFtZT1cImZvcm11bGFyaW9cIiBtb2RvLWRlc3BsaWVndWU9e21vZG9EZXNwbGllZ3VlfSB2ZXItbnVtLW9wY2lvbmVzPXtvcGNpb25lcy5jb25DYW1wb09wY2lvbmVzID8gJ1NJJyA6ICdOTyd9PlxyXG4gICAgICAgICAgICAgICAgICAgIHttb2RvLmRlbW8gPyA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJzcGFuXCI+TW9kbyBkZSBkZXNwbGllZ3VlOjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2xpc3RhTW9kb3MubWFwKG1vZG8gPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIGtleT17bW9kb30gdmFyaWFudD17bW9kbyA9PSBtb2RvRGVzcGxpZWd1ZSA/IFwiY29udGFpbmVkXCIgOiBcIm91dGxpbmVkXCJ9IG9uQ2xpY2s9e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiBkaXNwYXRjaChkaXNwYXRjaGVycy5NT0RPX0RFU1BMSUVHVUUoeyBtb2RvRGVzcGxpZWd1ZTogbW9kbyB9KSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Pnttb2RvfTwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b25Hcm91cD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gOiBudWxsfVxyXG4gICAgICAgICAgICAgICAgICAgIHtwYW50YWxsYUNvbXBsZXRhID8gbnVsbCA6IDxCb3RvblZvbHZlckVuRGl2IGlkPVwiYm90b24tdm9sdmVyLTFcIiAvPn1cclxuICAgICAgICAgICAgICAgICAgICB7cGFudGFsbGFDb21wbGV0YSA/IG51bGwgOiA8Rm9ybXVsYXJpb0VuY2FiZXphZG8gY2FzaWxsZXJvPXtmb3JtdWxhcmlvfSAvPn1cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvIGJsb3F1ZU9Gb3JtdWxhcmlvPXtmb3JtdWxhcmlvfSBmb3JtdWxhcmlvPXtmb3JtdWxhcmlvfSBmb3JQaz17Zm9yUGt9IG11bHRpcGxlPXtmYWxzZX0gLz5cclxuICAgICAgICAgICAgICAgICAgICB7cGFudGFsbGFDb21wbGV0YSA/IG51bGwgOiA8Qm90b25Wb2x2ZXJFbkRpdiBpZD1cImJvdG9uLXZvbHZlci0yXCIgLz59XHJcbiAgICAgICAgICAgICAgICA8L1BhcGVyPlxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWFjdGl2by1hcnJpYmEnIGNvbG9yPVwicHJpbWFyeVwiIGFyaWEtbGFiZWw9XCJhZGRcIiBvbkNsaWNrPXtvbkNsaWNrU2FsdGFyQWN0dWFsfT5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5LZXlib2FyZEFycm93VXAgLz5cclxuICAgICAgICAgICAgICAgIDwvRmFiPlxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWFjdGl2by1hYmFqbycgY29sb3I9XCJwcmltYXJ5XCIgYXJpYS1sYWJlbD1cImFkZFwiIG9uQ2xpY2s9e29uQ2xpY2tTYWx0YXJBY3R1YWx9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLktleWJvYXJkQXJyb3dEb3duIC8+XHJcbiAgICAgICAgICAgICAgICA8L0ZhYj5cclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1lcnJvci1hcnJpYmEnIHZhcmlhbnQ9XCJleHRlbmRlZFwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgYXJpYS1sYWJlbD1cImVkaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5OYXZpZ2F0aW9uIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgRXJyb3JcclxuICAgICAgICAgICAgICAgIDwvRmFiPlxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWVycm9yLWFiYWpvJyB2YXJpYW50PVwiZXh0ZW5kZWRcIiBjb2xvcj1cInNlY29uZGFyeVwiIGFyaWEtbGFiZWw9XCJlZGl0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uTmF2aWdhdGlvbkRvd24gLz5cclxuICAgICAgICAgICAgICAgICAgICBFcnJvclxyXG4gICAgICAgICAgICAgICAgPC9GYWI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nZXNwYWNpby1maW5hbC1mb3JtdWxhcmlvJz48L2Rpdj5cclxuICAgICAgICAgICAgICAgIHtvcGNpb25lcy5tb2RvQm9ycmFyUmVzcHVlc3RhICYmIG9wY2lvbmVzLmZvclBrID8gPERlc3BsZWdhckNvbmZpcm1hckJvcnJhclJlc3B1ZXN0YSBmb3JQaz17b3BjaW9uZXMuZm9yUGt9IHZhcmlhYmxlQm9ycmFyPXtvcGNpb25lcy5tb2RvQm9ycmFyUmVzcHVlc3RhfSAvPiA6IG51bGx9XHJcbiAgICAgICAgICAgIDwvbWFpbj5cclxuICAgICAgICA8Lz5cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBBdHJpYnV0byhwcm9wczogeyBub21icmU6IHN0cmluZywgdmFsb3I6IGFueSB9KSB7XHJcbiAgICByZXR1cm4gcHJvcHMudmFsb3IgIT0gbnVsbCAmJiBwcm9wcy52YWxvciAhPSAnJyA/IDxzcGFuIGNsYXNzTmFtZT1cImF0cmlidXRvLXBhclwiPlxyXG4gICAgICAgIHtwcm9wcy5ub21icmUgPyA8c3BhbiBjbGFzc05hbWU9XCJhdHJpYnV0by1ub21icmVcIj57cHJvcHMubm9tYnJlfTwvc3Bhbj4gOiBudWxsfVxyXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImF0cmlidXRvLXZhbG9yXCI+e3Byb3BzLnZhbG9yLnRvU3RyaW5nKCl9PC9zcGFuPlxyXG4gICAgPC9zcGFuPiA6IG51bGxcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGxpc3RhRXN0YWRvc0NhcmdhOiBFc3RhZG9DYXJnYVtdID0gWydyZXN1bWVuJywgJ3JlbGV2YW1pZW50bycsICdyZWNpYm8nXTtcclxuZXhwb3J0IHZhciByZXN1bWlkb3JlcyA9IFtcclxuICAgIHsgbm9tYnJlOiAnUkVBJywgZjogKHJyOiBSZXNwdWVzdGFzUmFpeikgPT4gcnIucmVzdW1lbkVzdGFkbyA9PSBcIm9rXCIgfSxcclxuICAgIHsgbm9tYnJlOiAnQ2l0YSBwYWN0YWRhJywgZjogKHJyOiBSZXNwdWVzdGFzUmFpeikgPT4gcnIucmVzdW1lbkVzdGFkbyA9PSBcImNpdGEgcGFjdGFkYVwiIH0sXHJcbiAgICB7IG5vbWJyZTogJ1BlbmRpZW50ZXMnLCBmOiAocnI6IFJlc3B1ZXN0YXNSYWl6KSA9PiByci5yZXN1bWVuRXN0YWRvID09IFwidmFjaW9cIiB9LFxyXG5dO1xyXG5cclxucmVzdW1pZG9yZXMucHVzaChcclxuICAgIHsgbm9tYnJlOiAnT3Ryb3MnLCBmOiByZXN1bWlkb3Jlcy5yZWR1Y2UoKGcsIHIpID0+IChyciA9PiAhci5mKHJyKSAmJiBnKHJyKSksIChfOiBSZXNwdWVzdGFzUmFpeikgPT4gdHJ1ZSkgfVxyXG4pXHJcblxyXG5leHBvcnQgdHlwZSBEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbFR5cGUgPSAocHJvcHM6IHtcclxuICAgIG51bVZpdmllbmRhOiBJZEVuYyxcclxuICAgIGZvcm1QcmluY2lwYWw6IElkRm9ybXVsYXJpbyxcclxuICAgIHRhcmVhOiBzdHJpbmcsXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFzUmFpeixcclxufSkgPT4gSlNYLkVsZW1lbnQ7XHJcblxyXG5leHBvcnQgdmFyIERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsOiBEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbFR5cGVcclxuXHJcbmV4cG9ydCBjb25zdCBzZXREZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbCA9IChsaW5lYVJlc3VtZW5VQVByaW5jaXBhbDogRGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWxUeXBlKSA9PiBEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbCA9IGxpbmVhUmVzdW1lblVBUHJpbmNpcGFsO1xyXG5cclxuc2V0RGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWwoKHByb3BzOiB7XHJcbiAgICBudW1WaXZpZW5kYTogSWRFbmMsXHJcbiAgICBmb3JtUHJpbmNpcGFsOiBJZEZvcm11bGFyaW8sXHJcbiAgICB0YXJlYTogc3RyaW5nLFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3Rhc1JhaXosXHJcbn0pID0+IHtcclxuICAgIGNvbnN0IHsgbnVtVml2aWVuZGEsIHJlc3B1ZXN0YXMsIGZvcm1QcmluY2lwYWwsIHRhcmVhIH0gPSBwcm9wcztcclxuICAgIGNvbnN0IGlkID0gJ3Zpdi0nICsgbnVtVml2aWVuZGE7XHJcbiAgICBjb25zdCBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgY29uc3QgZm9yUGs6IEZvclBrID0geyBmb3JtdWxhcmlvOiBmb3JtUHJpbmNpcGFsLCBbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXTogTnVtYmVyKG51bVZpdmllbmRhKSBhcyBJZEVuYyB9IGFzIEZvclBrOyAvL25vIHF1aXRhciBlbCBjYXN0ZW8gcG9ycXVlIHZpZW5lIGNvbW8gdGV4dG8geSBuZWNlc2l0byBxdWUgc2VhIG7Dum1lcm9cclxuICAgIHZhciB0ZW0gPSBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW251bVZpdmllbmRhXS50ZW07XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGspO1xyXG4gICAgICAgIGludGVudGFyQmFja3VwKGZvclBrKVxyXG4gICAgfSlcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZCwgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgIGZ1bjogKFxyXG4gICAgICAgICAgICByOiBSZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICBfZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPixcclxuICAgICAgICAgICAgZWxlbWVudG86IEhUTUxEaXZFbGVtZW50LFxyXG4gICAgICAgICAgICBmZWVkYmFja0FsbDogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgICAgICAgICAgX2VzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmFcclxuICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgLy9wcmVndW50byBzaSBlcyBsYSBtaXNtYSB2aXZpZW5kYSBwb3JxdWUgbGEgZnVuY2lvbiBzZSBkaXNwYXJhIFxyXG4gICAgICAgICAgICAvL2NvbiB0b2RhcyBsYXMgY29tYmluYWNpb25lcyBkZSByZXNwdWVzdGFzIHBhcmEgY2FkYSBmb3JQa1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgdml2aWVuZGEgZXhpc3RlXHJcbiAgICAgICAgICAgIGlmIChyW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0gPT0gZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG8uc2V0QXR0cmlidXRlKCdyZXN1bWVuLWVzdGFkbycsIGNhbGN1bGFyUmVzdW1lblZpdmllbmRhKGZvclBrLCBmZWVkYmFja0FsbCwgcikucmVzdW1lbkVzdGFkbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSlcclxuICAgIHJldHVybiA8VGFibGVSb3cga2V5PXtudW1WaXZpZW5kYX0+XHJcbiAgICAgICAgPFRhYmxlQ2VsbD5cclxuICAgICAgICAgICAge3RlbSA/XHJcbiAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJUZW0gdGVtPXt0ZW19IC8+XHJcbiAgICAgICAgICAgICAgICAgICAge3Jlc3B1ZXN0YXNbJ3Jlc3VtZW5Fc3RhZG8nIGFzIElkVmFyaWFibGVdID09IFwiY2l0YSBwYWN0YWRhXCIgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ2l0YVBhY3RhZGEgcmVzcHVlc3Rhcz17cmVzcHVlc3Rhc30gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ2l0YVBhY3RhZGFZU2VsZWNjaW9uYWRvQW50ZXJpb3JUZW0gdGVtPXt0ZW19IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICA6IG51bGx9XHJcbiAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgPFRhYmxlQ2VsbD5cclxuICAgICAgICAgICAge3RhcmVhfVxyXG4gICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgICAgIDxUYWJsZUNlbGw+XHJcbiAgICAgICAgICAgIDxCdXR0b24gaWQ9e2lkfSBvbkNsaWNrPXsoKSA9PlxyXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ0FNQklBUl9GT1JNVUxBUklPKHsgZm9yUGssIGFwaWxhclZ1ZWx0YTogZmFsc2UgfSkpXHJcbiAgICAgICAgICAgIH0+XHJcbiAgICAgICAgICAgICAgICB7bnVtVml2aWVuZGEudG9TdHJpbmcoKX1cclxuICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICA8L1RhYmxlUm93PlxyXG59KTtcclxuXHJcbmV4cG9ydCB0eXBlIERlc3BsZWdhckNhcmdhVHlwZSA9IChwcm9wczoge1xyXG4gICAgY2FyZ2E6IENhcmdhLFxyXG4gICAgaWRDYXJnYTogSWRDYXJnYSxcclxuICAgIHBvc2ljaW9uOiBudW1iZXIsXHJcbiAgICBpbmZvcm1hY2lvbkhkcjogSW5mb3JtYWNpb25IZHIsXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFMYXNVQSxcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOiB7XHJcbiAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+XHJcbiAgICB9XHJcbn0pID0+IEpTWC5FbGVtZW50O1xyXG5cclxuZXhwb3J0IHZhciBEZXNwbGVnYXJDYXJnYTogRGVzcGxlZ2FyQ2FyZ2FUeXBlXHJcblxyXG5leHBvcnQgY29uc3Qgc2V0RGVzcGxlZ2FyQ2FyZ2EgPSAoZGVzcGxpZWd1ZUNhcmdhOiBEZXNwbGVnYXJDYXJnYVR5cGUpID0+IERlc3BsZWdhckNhcmdhID0gZGVzcGxpZWd1ZUNhcmdhO1xyXG5cclxuc2V0RGVzcGxlZ2FyQ2FyZ2EoKHByb3BzOiB7XHJcbiAgICBjYXJnYTogQ2FyZ2EsXHJcbiAgICBpZENhcmdhOiBJZENhcmdhLFxyXG4gICAgcG9zaWNpb246IG51bWJlcixcclxuICAgIGluZm9ybWFjaW9uSGRyOiBJbmZvcm1hY2lvbkhkcixcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YUxhc1VBLFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6IHtcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj5cclxuICAgIH1cclxufSkgPT4ge1xyXG4gICAgY29uc3QgW25ld1N1cnZleSwgc2V0TmV3U3VydmV5XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgeyBjYXJnYSwgaWRDYXJnYSwgaW5mb3JtYWNpb25IZHIsIHJlc3B1ZXN0YXMgfSA9IHByb3BzO1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICBsZXQgY2FudExpbmVhc1Jlc3VtZW4gPSBsaWtlQXIoaW5mb3JtYWNpb25IZHIpLmZpbHRlcigoaW5mb3JtYWNpb24pID0+IGluZm9ybWFjaW9uLnRlbS5jYXJnYSA9PSBpZENhcmdhKS5hcnJheSgpLmxlbmd0aDtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IG1vZG9ETTogTW9kb0RNID0gbXkuZ2V0TG9jYWxWYXIoTU9ET19ETV9MT0NBTFNUT1JBR0VfS0VZKTtcclxuICAgIHJldHVybiA8UGFwZXIgY2xhc3NOYW1lPVwiY2FyZ2FcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxMHB4JywgcGFkZGluZzogJzEwcHgnIH19PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW5mb3JtYWNpb24tY2FyZ2FcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJnYVwiPsOBcmVhOiB7aWRDYXJnYX08L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvYnNlcnZhY2lvbmVzXCI+e2NhcmdhLm9ic2VydmFjaW9uZXN9PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbmZvcm1hY2lvbi1jYXJnYVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZlY2hhXCI+e2NhcmdhLmZlY2hhfTwvZGl2PlxyXG4gICAgICAgICAgICB7LypcclxuICAgICAgICAgICAgPEJ1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICB7bGlzdGFFc3RhZG9zQ2FyZ2EubWFwKGVzdGFkb19jYXJnYT0+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIGtleT17ZXN0YWRvX2NhcmdhfSB2YXJpYW50PXtlc3RhZG9fY2FyZ2E9PWNhcmdhLmVzdGFkb19jYXJnYT9cImNvbnRhaW5lZFwiOlwib3V0bGluZWRcIn0gb25DbGljaz17XHJcbiAgICAgICAgICAgICAgICAgICAgKCk9PmRpc3BhdGNoKGRpc3BhdGNoZXJzLkVTVEFET19DQVJHQSh7aWRDYXJnYSwgZXN0YWRvX2NhcmdhfSkpXHJcbiAgICAgICAgICAgICAgICB9Pntlc3RhZG9fY2FyZ2F9PC9CdXR0b24+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgICovfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtjYXJnYS5lc3RhZG9fY2FyZ2EgPT0gbnVsbCAmJiAhcHJvcHMucG9zaWNpb24gfHwgY2FyZ2EuZXN0YWRvX2NhcmdhID09ICdyZWxldmFtaWVudG8nID9cclxuICAgICAgICAgICAgPFRhYmxlIGNsYXNzTmFtZT1cInRhYmxhLWNhcmdhLWhvamEtZGUtcnV0YVwiPlxyXG4gICAgICAgICAgICAgICAgPGNvbGdyb3VwPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjb2wgc3R5bGU9e3sgd2lkdGg6IFwiNzUlXCIgfX0gLz5cclxuICAgICAgICAgICAgICAgICAgICA8Y29sIHN0eWxlPXt7IHdpZHRoOiBcIjEwJVwiIH19IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNvbCBzdHlsZT17eyB3aWR0aDogXCIxNSVcIiB9fSAvPlxyXG4gICAgICAgICAgICAgICAgPC9jb2xncm91cD5cclxuICAgICAgICAgICAgICAgIHtjYW50TGluZWFzUmVzdW1lbiA/XHJcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlSGVhZCBzdHlsZT17eyBmb250U2l6ZTogXCIxLjJyZW1cIiB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlUm93IGNsYXNzTmFtZT1cInRyLWNhcmdhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsPmRvbWljaWxpbzwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbD50YXJlYTwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbD5lbmM8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZVJvdz5cclxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlSGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA6IG51bGx9XHJcbiAgICAgICAgICAgICAgICA8VGFibGVCb2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtsaWtlQXIoaW5mb3JtYWNpb25IZHIpLmZpbHRlcigoaW5mb3JtYWNpb24pID0+IGluZm9ybWFjaW9uLnRlbS5jYXJnYSA9PSBpZENhcmdhKS5tYXAoKGluZm9ybWFjaW9uLCBudW1WaXZpZW5kYSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17bnVtVml2aWVuZGF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtVml2aWVuZGE9e251bVZpdmllbmRhfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhPXtpbmZvcm1hY2lvbi50YXJlYS50YXJlYX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUHJpbmNpcGFsPXtpbmZvcm1hY2lvbi50YXJlYS5tYWluX2Zvcm19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhcz17cmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF1bbnVtVml2aWVuZGFdIGFzIFJlc3B1ZXN0YXNSYWl6fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKS5hcnJheSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7ZXN0cnVjdHVyYS5wZXJtaXRlR2VuZXJhck11ZXN0cmEgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlUm93IGNsYXNzTmFtZT1cInRyLWNhcmdhLW51ZXZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbCBjb2xTcGFuPXszfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17bW9kb0RNID09IFwiY2FwYVwiID8gXCJzdWNjZXNzXCIgOiBcInByaW1hcnlcIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXJFbmN1ZXN0YShpZENhcmdhLCAoZm9yUGtSYWl6OiBGb3JQa1JhaXopID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ0FNQklBUl9GT1JNVUxBUklPKHsgZm9yUGs6IGZvclBrUmFpeiwgYXBpbGFyVnVlbHRhOiBmYWxzZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uQWRkIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZVJvdz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbH1cclxuICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgIDwvVGFibGVCb2R5PlxyXG4gICAgICAgICAgICA8L1RhYmxlPiA6XHJcbiAgICAgICAgICAgIDxUYWJsZT5cclxuICAgICAgICAgICAgICAgIDxUYWJsZUhlYWQgc3R5bGU9e3sgZm9udFNpemU6IFwiMS4ycmVtXCIgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlUm93IGNsYXNzTmFtZT1cInRyLWNhcmdhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtyZXN1bWlkb3Jlcy5tYXAoKHJlc3VtaWRvcjogdHlwZW9mIHJlc3VtaWRvcmVzWzBdLCBpOiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsIGtleT17aX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3Jlc3VtaWRvci5ub21icmV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlUm93PlxyXG4gICAgICAgICAgICAgICAgPC9UYWJsZUhlYWQ+XHJcbiAgICAgICAgICAgIDwvVGFibGU+XHJcbiAgICAgICAgfVxyXG4gICAgPC9QYXBlcj5cclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRGVzcGxlZ2FyQ2l0YVBhY3RhZGEocHJvcHM6IHsgcmVzcHVlc3RhczogUmVzcHVlc3RhcyB9KSB7XHJcbiAgICBjb25zdCB7IHJlc3B1ZXN0YXMgfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiY2l0YS1wYWN0YWRhXCI+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiQ2l0YSBwYWN0YWRhIGNvbiBcIiB2YWxvcj17cmVzcHVlc3Rhc1twMTJdfSAvPjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIkNlbC46XCIgdmFsb3I9e3Jlc3B1ZXN0YXNbc3AyXX0gLz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJUZWwuOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwM119IC8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiRmVjaGE6XCIgdmFsb3I9e3Jlc3B1ZXN0YXNbc3A0XX0gLz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJIb3JhOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwNV19IC8+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhckNpdGFQYWN0YWRhWVNlbGVjY2lvbmFkb0FudGVyaW9yVGVtKHByb3BzOiB7IHRlbTogVEVNIH0pIHtcclxuICAgIGNvbnN0IHsgdGVtIH0gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGVtLWNpdGFcIj5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cIkNpdGE6XCIgdmFsb3I9e3RlbS5jaXRhfSAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJUZW0ocHJvcHM6IHsgdGVtOiBURU0gfSkge1xyXG4gICAgY29uc3QgeyB0ZW0gfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxkaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZW0tZG9taWNpbGlvXCI+e3RlbS5ub21jYWxsZX0ge3RlbS5ucm9jYXRhc3RyYWx9IDxBdHJpYnV0byBub21icmU9XCJwaXNvXCIgdmFsb3I9e3RlbS5waXNvfSAvPiA8QXRyaWJ1dG8gbm9tYnJlPVwiZHB0b1wiIHZhbG9yPXt0ZW0uZGVwYXJ0YW1lbnRvfSAvPiA8L2Rpdj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwic2VjdG9yXCIgdmFsb3I9e3RlbS5zZWN0b3J9IC8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJlZGlmaWNpb1wiIHZhbG9yPXt0ZW0uZWRpZmljaW99IC8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJjYXNhXCIgdmFsb3I9e3RlbS5jYXNhfSAvPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiZW50cmFkYVwiIHZhbG9yPXt0ZW0uZW50cmFkYX0gLz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImhhYml0YWNpb25cIiB2YWxvcj17dGVtLmhhYml0YWNpb259IC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZW0tb2JzZXJ2YWNpb25lc1wiPlxyXG4gICAgICAgICAgICB7dGVtLm9ic2VydmFjaW9uZXN9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgSG9qYURlUnV0YURlc3BsaWVndWVUeXBlID0gKHByb3BzOiB7fSkgPT4gSlNYLkVsZW1lbnQ7XHJcblxyXG5leHBvcnQgdmFyIEhvamFEZVJ1dGFEZXNwbGllZ3VlOiBIb2phRGVSdXRhRGVzcGxpZWd1ZVR5cGVcclxuXHJcbmV4cG9ydCBjb25zdCBzZXRIb2phRGVSdXRhRGVzcGxpZWd1ZSA9IChob2phRGVSdXRhOiBIb2phRGVSdXRhRGVzcGxpZWd1ZVR5cGUpID0+IEhvamFEZVJ1dGFEZXNwbGllZ3VlID0gaG9qYURlUnV0YVxyXG5cclxuc2V0SG9qYURlUnV0YURlc3BsaWVndWUoKF9wcm9wczoge30pID0+IHtcclxuICAgIHZhciB7IGNhcmdhcywgbnVtX3NpbmNybywgaW5mb3JtYWNpb25IZHIsIHJlc3B1ZXN0YXMgfSA9IGdldERhdG9zQnlQYXNzKCk7XHJcbiAgICB2YXIgeyBtb2RvIH0gPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gKHsgbW9kbzogc3RhdGUubW9kbyB9KSk7XHJcbiAgICB2YXIgZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcigpXHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCBvbmxpbmUgPSB1c2VPbmxpbmVTdGF0dXMoKTtcclxuICAgIGNvbnN0IG1vZG9ETTogTW9kb0RNID0gbXkuZ2V0TG9jYWxWYXIoTU9ET19ETV9MT0NBTFNUT1JBR0VfS0VZKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAgPEFwcEJhciBwb3NpdGlvbj1cImZpeGVkXCIgY29sb3I9e21vZG9ETSA9PSAnY2FwYScgPyAnc3VjY2VzcycgOiAncHJpbWFyeSd9PlxyXG4gICAgICAgICAgICAgICAgPFRvb2xiYXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEhPSkEgREUgUlVUQVxyXG4gICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vPEljb25CdXR0b24gc3R5bGU9e3ttYXJnaW5Ub3A6JzNweCd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAvL29uQ2xpY2s9ey8qZGlzcGF0Y2ggcXVlIGxsZXZhIGEgcGFudGFsbGEgb3BjaW9uZXMqL31cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIDxJQ09OLlNldHRpbmdzLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy88L0ljb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHtvbmxpbmUgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW46ICcwIDhweCcgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG9TaW5jcm9uaXphcigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SUNPTi5TeW5jQWx0IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbH1cclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT48c3BhbiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnNXB4JyB9fT57bW9kb0RNID09ICdjYXBhJyA/ICcgTU9ETyBDQVBBQ0lUQUNJw5NOJyA6ICcnfTwvc3Bhbj48L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8L1Rvb2xiYXI+XHJcbiAgICAgICAgICAgIDwvQXBwQmFyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhvamEtZGUtcnV0YVwiPlxyXG4gICAgICAgICAgICAgICAgPFBhcGVyIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzEwcHgnLCBwYWRkaW5nOiAnMTBweCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAge21vZG8uZGVtbyA/IDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5Pk1vZG8gZGVtbyA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cIm91dGxpbmVkXCIgY29sb3I9XCJzZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZGlzcGF0Y2goZGlzcGF0Y2hlcnMuUkVJTklDSUFSX0RFTU8oe30pKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbmljaWFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiA6IG51bGx9XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJub21icmUtdmVyc2lvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pkluc3RpdHV0byBkZSBFc3RhZMOtc3RpY2EgeSBDZW5zb3MgZGUgbGEgQ2l1ZGFkIEF1dMOzbm9tYSBkZSBCdWVub3MgQWlyZXMgLSBJREVDQkE8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj52ZXJzacOzbiB7bXkuZ2V0TG9jYWxWYXIoJ2FwcC1jYWNoZS12ZXJzaW9uJyl9IC0gc2luY3JvIHtudW1fc2luY3JvfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9QYXBlcj5cclxuICAgICAgICAgICAgICAgIHtsaWtlQXIoY2FyZ2FzKS5tYXAoKGNhcmdhLCBpZENhcmdhLCBfLCBwb3NpY2lvbikgPT5cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ2FyZ2Ega2V5PXtpZENhcmdhfSBjYXJnYT17Y2FyZ2F9IGlkQ2FyZ2E9e2lkQ2FyZ2F9IHBvc2ljaW9uPXtwb3NpY2lvbn0gaW5mb3JtYWNpb25IZHI9e2luZm9ybWFjaW9uSGRyfSBmZWVkYmFja1Jvd1ZhbGlkYXRvcj17ZmVlZGJhY2tSb3dWYWxpZGF0b3J9IHJlc3B1ZXN0YXM9e3Jlc3B1ZXN0YXN9IC8+XHJcbiAgICAgICAgICAgICAgICApLmFycmF5KCl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvPlxyXG4gICAgKTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gTGlzdGFUZXh0b3MocHJvcHM6IHsgdGV4dG9zOiBzdHJpbmdbXSB9KSB7XHJcbiAgICByZXR1cm4gPHVsPlxyXG4gICAgICAgIHtwcm9wcy50ZXh0b3MubWFwKHQgPT4gPGxpPjxUeXBvZ3JhcGh5Pnt0fTwvVHlwb2dyYXBoeT48L2xpPil9XHJcbiAgICA8L3VsPjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEJpZW52ZW5pZGFEZXNwbGllZ3VlKHByb3BzOiB7IG1vZG86IENhc29TdGF0ZVtcIm1vZG9cIl0gfSkge1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgcmV0dXJuIDxQYXBlciBjbGFzc05hbWU9XCJiaWVudmVuaWRhXCI+XHJcbiAgICAgICAge3Byb3BzLm1vZG8uZGVtbyA/XHJcbiAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5ERU1PIGRlbCBzaXN0ZW1hIGRlIHJlbGV2YW1pZW50byBkZSBETUVOQ1U8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5FbiBlc3RhIGRlbW86PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPExpc3RhVGV4dG9zIHRleHRvcz17W1xyXG4gICAgICAgICAgICAgICAgICAgIFwiQWxndW5hcyB2aXZpZW5kYXMgYXBhcmVjZW4gcmVsZXZhZGFzIChlbCBib3TDs24gZXN0w6EgZGUgY29sb3IpIHNpcnZlbiBkZSBlamVtcGxvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJMbyBxdWUgc2UgY2FyZ3VlbiBzZSBndWFyZGFuIGxvY2FsbWVudGUgcGVybyBubyBzZSB0cmFzbWl0ZW4gYSBsYSBiYXNlIGRlIGRhdG9zXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJTZSBwdWVkZSB2b2x2ZXIgYSBsYSB2ZXJzacOzbiBpbmljaWFsIChvIHNlYSBib3JyYXIgbG8gcXVlIHNlIGd1YXJkw7MgbG9jYWxtZW50ZSkgZGVzZGUgbGEgaG9qYSBkZSBydXRhIGJvdG9uIFtyZWluaWNpYXIgZGVtb11cIixcclxuICAgICAgICAgICAgICAgICAgICBcIlRvZGF2w61hIGhheSBjb3NhcyBxdWUgZmFsdGFuIG8gcHVlZGVuIGNhbWJpYXJcIixcclxuICAgICAgICAgICAgICAgIF19IC8+XHJcbiAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICA6IDw+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5FbmN1ZXN0YSBkZSBTZXJvcHJldmFsZW5jaWEgZGUgQ09WSUQtMTk8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgIDwvPlxyXG4gICAgICAgIH1cclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxyXG4gICAgICAgICAgICBjb2xvcj1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHsgZ290b1NpbmNyb25pemFyKCk7IH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3Bhbj5TaW5jcm9uaXphciA8L3NwYW4+IDxJQ09OLlN5bmNBbHQgLz5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBkaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHsgb3BjaW9uOiAnYmllbnZlbmlkbycsIHZhbG9yOiB0cnVlIH0pKX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuPkNvbnRpbnVhciA8L3NwYW4+IDxJQ09OLlNlbmQgLz5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgIDwvUGFwZXI+XHJcbn1cclxuXHJcbi8vQ09OVFJPTCBERSBQRVNUQcORQVNcclxudmFyIGFsbE9wZW5lZFRhYnM6IHsgW3g6IHN0cmluZ106IG51bWJlciB9ID0ge307XHJcbnZhciBpbmZvT3BlbmVkVGFicyA9IHtcclxuICAgIGFsbE9wZW5lZFRhYnMsXHJcbiAgICBteUlkOiAnY2FsY3VsYW5kby4uLicsXHJcbiAgICBvdGhlclRhYnNOYW1lczogJydcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE9wZW5lZFRhYnMoKSB7XHJcbiAgICBjb25zdCBbdGFicywgc2V0VGFic10gPSB1c2VTdGF0ZShpbmZvT3BlbmVkVGFicy5vdGhlclRhYnNOYW1lcyk7XHJcbiAgICB2YXIgeyBtb2RvRGlyZWN0byB9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+ICh7IG1vZG9EaXJlY3RvOiBzdGF0ZS5vcGNpb25lcy5tb2RvRGlyZWN0byB9KSk7XHJcbiAgICBjb25zdCB1cGRhdGVUYWJzU3RhdHVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHNldFRhYnMoaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXMpO1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbXktdGFicycsIHVwZGF0ZVRhYnNTdGF0dXMpO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbXktdGFicycsIHVwZGF0ZVRhYnNTdGF0dXMpO1xyXG4gICAgfSwgW10pXHJcbiAgICByZXR1cm4gbW9kb0RpcmVjdG8gPyBudWxsIDogKHRhYnMpID9cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRhYi1jb3VudGVyIHRhYi1lcnJvclwiPsKhQVRFTkNJw5NOISBIYXkgbcOhcyBkZSB1bmEgdmVudGFuYSBhYmllcnRhLiBTZSBwdWVkZW4gcGVyZGVyIGRhdG9zOiB7dGFic308L2Rpdj5cclxuICAgICAgICA6XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0YWItY291bnRlclwiPuKclDwvZGl2PlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQXBwRG1FbmN1KCkge1xyXG4gICAgdmFyIHsgZm9yUGssIGJpZW52ZW5pZG8sIG1vZG8gfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiAoeyAuLi5zdGF0ZS5vcGNpb25lcywgLi4uc3RhdGUubW9kbywgLi4uc3RhdGUgfSkpO1xyXG4gICAgaWYgKCFiaWVudmVuaWRvKSB7XHJcbiAgICAgICAgcmV0dXJuIDxCaWVudmVuaWRhRGVzcGxpZWd1ZSBtb2RvPXttb2RvfSAvPlxyXG4gICAgfSBlbHNlIGlmIChmb3JQayA9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIDxIb2phRGVSdXRhRGVzcGxpZWd1ZSAvPlxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gPEZvcm11bGFyaW9EZXNwbGllZ3VlIGZvclBrPXtmb3JQa30gLz5cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gUGFudGFsbGFJbmljaWFsU2luQ2FyZ2EoX3Byb3BzOiB7fSkge1xyXG4gICAgY29uc3Qgb25saW5lID0gdXNlT25saW5lU3RhdHVzKCk7XHJcblxyXG4gICAgY29uc3QgcGFyYWdyYXBoU3R5bGVzID0geyBmb250U2l6ZTogXCIxLjJyZW1cIiwgZm9udFdlaWdodDogNjAwLCBwYWRkaW5nOiBcIjVweCAxMHB4XCIgfTtcclxuICAgIGNvbnN0IG1vZG9ETTogTW9kb0RNID0gbXkuZ2V0TG9jYWxWYXIoTU9ET19ETV9MT0NBTFNUT1JBR0VfS0VZKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAgPEFwcEJhciBwb3NpdGlvbj1cImZpeGVkXCIgY29sb3I9e21vZG9ETSA9PSAnY2FwYScgPyAnc3VjY2VzcycgOiAncHJpbWFyeSd9PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImg2XCIgc3R5bGU9e3sgbWFyZ2luOiAyNSB9fT5cclxuICAgICAgICAgICAgICAgICAgICBEaXNwb3NpdGl2byBzaW4gY2FyZ2EgLSB7bW9kb0RNID09ICdjYXBhJyA/ICdNT0RPIENBUEFDSVRBQ0nDk04nIDogJyd9XHJcbiAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgIDwvQXBwQmFyPlxyXG4gICAgICAgICAgICA8bWFpbj5cclxuICAgICAgICAgICAgICAgIDxQYXBlciBzdHlsZT17eyBoZWlnaHQ6ICc2MDBweCcsIHBhZGRpbmc6IFwiMTVweFwiLCBtYXJnaW5Ub3A6IDc1IH19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtvbmxpbmUgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJwXCIgc3R5bGU9e3BhcmFncmFwaFN0eWxlc30+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbmNyb25pemFyIGRpc3Bvc2l0aXZvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IHBhZGRpbmc6ICc1cHgnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXttb2RvRE0gPT0gJ2NhcGEnID8gJ3N1Y2Nlc3MnIDogXCJwcmltYXJ5XCJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvU2luY3Jvbml6YXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uU3luY0FsdCAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGNvbXBvbmVudD1cInBcIiBzdHlsZT17cGFyYWdyYXBoU3R5bGVzfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBoYXkgY29uZXhpw7NuIGEgaW50ZXJuZXQsIHBvciBmYXZvciBjb27DqWN0ZSBlbCBkaXNwb3NpdGl2byBhIHVuYSByZWQgcGFyYSBzaW5jcm9uaXphciB1bmEgaG9qYSBkZSBydXRhLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L1BhcGVyPlxyXG4gICAgICAgICAgICA8L21haW4+XHJcbiAgICAgICAgPC8+XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUGFudGFsbGFJbmljaWFsKCkge1xyXG4gICAgdmFyIHsgZm9yUGssIGJpZW52ZW5pZG8sIG1vZG8gfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiAoeyAuLi5zdGF0ZS5vcGNpb25lcywgLi4uc3RhdGUubW9kbywgLi4uc3RhdGUgfSkpO1xyXG4gICAgaWYgKCFiaWVudmVuaWRvKSB7XHJcbiAgICAgICAgcmV0dXJuIDxCaWVudmVuaWRhRGVzcGxpZWd1ZSBtb2RvPXttb2RvfSAvPlxyXG4gICAgfSBlbHNlIGlmIChmb3JQayA9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIDxIb2phRGVSdXRhRGVzcGxpZWd1ZSAvPlxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gPEZvcm11bGFyaW9EZXNwbGllZ3VlIGZvclBrPXtmb3JQa30gLz5cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRtUGFudGFsbGFJbmljaWFsU2luQ2FyZ2EoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IGxvYWRDU1MoQk9PVFNUUkFQXzVfMV8zX1NSQyk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICB0aHJvdyAoZXJyKVxyXG4gICAgfVxyXG4gICAgUmVhY3RET00ucmVuZGVyKFxyXG4gICAgICAgIDxQYW50YWxsYUluaWNpYWxTaW5DYXJnYSAvPixcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKVxyXG4gICAgKVxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVzcGxlZ2FyRm9ybXVsYXJpb0FjdHVhbChvcHRzOiB7IG1vZG9EZW1vOiBib29sZWFuLCBmb3JQa1JhaXo/OiBGb3JQa1JhaXosIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8gfSkge1xyXG4gICAgLy8gdHJhZXIgbG9zIG1ldGFkYXRvcyBlbiB1bmEgXCJlc3RydWN0dXJhXCJcclxuICAgIC8vIHRyYWVyIGxvcyBkYXRvcyBkZSBsb2NhbFN0b3JhZ2VcclxuICAgIC8vIHZlcmlmaWNhciBlbCBtYWluIExheW91dFxyXG4gICAgY29uc3Qgc3RvcmUgPSBhd2FpdCBkbVRyYWVyRGF0b3NGb3JtdWxhcmlvKG9wdHMpXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IGxvYWRDU1MoQk9PVFNUUkFQXzVfMV8zX1NSQyk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICB0aHJvdyAoZXJyKVxyXG4gICAgfVxyXG4gICAgUmVhY3RET00ucmVuZGVyKFxyXG4gICAgICAgIDxSZW5kZXJQcmluY2lwYWwgc3RvcmU9e3N0b3JlfSBkaXNwYXRjaGVycz17ZGlzcGF0Y2hlcnN9IG1lbnNhamVSZXRvcm5vPXtvcHRzLmZvclBrUmFpeiA/IFwiVm9sdmVyIGFsIGZvcm11bGFyaW9cIiA6IFwiVm9sdmVyIGEgbGEgaG9qYSBkZSBydXRhXCJ9PlxyXG4gICAgICAgICAgICA8T3BlbmVkVGFicyAvPlxyXG4gICAgICAgICAgICA8QXBwRG1FbmN1IC8+XHJcbiAgICAgICAgPC9SZW5kZXJQcmluY2lwYWw+LFxyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpXHJcbiAgICApXHJcbn1cclxuXHJcbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgLy8gQHRzLWlnbm9yZSBwYXJhIGhhY2VybG9cclxuICAgIHdpbmRvdy5kZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsID0gZGVzcGxlZ2FyRm9ybXVsYXJpb0FjdHVhbDtcclxuICAgIC8vIEB0cy1pZ25vcmUgcGFyYSBoYWNlcmxvXHJcbiAgICB3aW5kb3cuZG1QYW50YWxsYUluaWNpYWxTaW5DYXJnYSA9IGRtUGFudGFsbGFJbmljaWFsU2luQ2FyZ2E7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBsb2FkSW5zdGFuY2UoKSB7XHJcbiAgICBpZiAodHlwZW9mIEJyb2FkY2FzdENoYW5uZWwgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGJjID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoJ2NvbnRhZG9yJyk7XHJcbiAgICB2YXIgbXlJZCA9IFN0cmluZy5mcm9tQ29kZVBvaW50KDEwMCArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDApKSArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMCkvLysnLScrbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICBhbGxPcGVuZWRUYWJzW215SWRdID0gMTtcclxuICAgIGluZm9PcGVuZWRUYWJzLm15SWQgPSBteUlkO1xyXG4gICAgdmFyIGV2ZW50ID0gbmV3IEV2ZW50KCdteS10YWJzJyk7XHJcbiAgICBiYy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXYpIHtcclxuICAgICAgICBpZiAoZXYuZGF0YS5xdWUgPT0gJ3NveScpIHtcclxuICAgICAgICAgICAgaWYgKCFhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdKSB7XHJcbiAgICAgICAgICAgICAgICBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChldi5kYXRhLnF1ZSA9PSAndW5sb2FkJykge1xyXG4gICAgICAgICAgICBkZWxldGUgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV2LmRhdGEucXVlID09ICdsb2FkJykge1xyXG4gICAgICAgICAgICBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdID0gMTtcclxuICAgICAgICAgICAgYmMucG9zdE1lc3NhZ2UoeyBxdWU6ICdzb3knLCBpZDogbXlJZCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXMgPSBsaWtlQXIoYWxsT3BlbmVkVGFicykuZmlsdGVyKChfLCBpZCkgPT4gaWQgIT0gbXlJZCkuam9pbignLCcpO1xyXG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIH07XHJcbiAgICBiYy5wb3N0TWVzc2FnZSh7IHF1ZTogJ2xvYWQnLCBpZDogbXlJZCB9KTtcclxuICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgYmMucG9zdE1lc3NhZ2UoeyBxdWU6ICd1bmxvYWQnLCBpZDogbXlJZCB9KTtcclxuICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICB9KVxyXG4gICAgLy9tb3N0cmFyUXVpZW5lc1NvbW9zKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBzZXRMaWJyZURlc3BsaWVndWUgPSAobGlicmU6IExpYnJlRGVzcGxpZWd1ZVR5cGUpID0+IExpYnJlRGVzcGxpZWd1ZSA9IGxpYnJlXHJcblxyXG5zZXRMaWJyZURlc3BsaWVndWUoKHByb3BzOiB7XHJcbiAgICBrZXk6IHN0cmluZ1xyXG4gICAgY2FzaWxsZXJvOiBMaWJyZVxyXG4gICAgZm9ybXVsYXJpbzogRm9ybXVsYXJpb1xyXG4gICAgZm9yUGs6IEZvclBrXHJcbn0pID0+IDxkaXYga2V5PXtwcm9wcy5rZXl9IGlkPXtwcm9wcy5jYXNpbGxlcm8uaWRfY2FzaWxsZXJvfT5lc3RlIGNhc2lsbGVybyBkZWJlIHJlZGVmaW5pcnNlIGVuIGxhIEFQUCBmaW5hbCB5IHN1IHVzbyBlcyBleGNsdXNpdm8gZGVsIMOhcmVhIGluZm9ybcOhdGljYTwvZGl2PilcclxuXHJcbnNldENhbGN1bGFyVmFyaWFibGVzKChyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrOiBGb3JQaykgPT4ge1xyXG4gICAgdHlwZSBDb25maWdQYWRyZSA9IHtcclxuICAgICAgICB1YVBlcnNvbmFzOiBJZFVuaWRhZEFuYWxpc2lzXHJcbiAgICAgICAgdmFyU2V4b1BlcnNvbmE6IElkVmFyaWFibGVcclxuICAgICAgICB2YXJOb21icmVQZXJzb25hOiBJZFZhcmlhYmxlXHJcbiAgICAgICAgdmFyTG9zTm9tYnJlczogSWRWYXJpYWJsZVxyXG4gICAgfVxyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICB2YXIgYXV0b0NhcmdhclBlcnNvbmFzID0gKGNvbmZpZ1BhZHJlOiBDb25maWdQYWRyZSwgdWFQYWRyZVBlcnNvbmFzOiBJZFVuaWRhZEFuYWxpc2lzLCBlc3RydWN0dXJhOiBFc3RydWN0dXJhKSA9PiB7XHJcbiAgICAgICAgdmFyIGxlZXJOb21icmVzID0gKHJlc3B1ZXN0YXNVQVBhZHJlOiBSZXNwdWVzdGFzLCBjb25maWdQYWRyZTogQ29uZmlnUGFkcmUpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFyZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXSB8fCBlbXB0eShyZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXSkgfHwgcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc11bMF1bY29uZmlnUGFkcmUudmFyU2V4b1BlcnNvbmFdID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsb3NOb21icmVzID0gcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudmFyTG9zTm9tYnJlc10gYXMgc3RyaW5nXHJcbiAgICAgICAgICAgICAgICBpZiAobG9zTm9tYnJlcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBsb3NOb21icmVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnLCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKG5vbWJyZTogc3RyaW5nKSA9PiBub21icmUudHJpbSgpLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKChub21icmU6IHN0cmluZywgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXVtpXSA9IHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdW2ldIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc11baV1bY29uZmlnUGFkcmUudmFyTm9tYnJlUGVyc29uYV0gPSBub21icmUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VhUGFkcmVQZXJzb25hc10pIHtcclxuICAgICAgICAgICAgaWYgKHVhUGFkcmVQZXJzb25hcyA9PSAndml2aWVuZGFzJykge1xyXG4gICAgICAgICAgICAgICAgbGVlck5vbWJyZXMocmVzcHVlc3Rhc1JhaXosIGNvbmZpZ1BhZHJlKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgcmVzcHVlc3Rhc1VBUGFkcmUgb2YgaXRlcmF0b3IocmVzcHVlc3Rhc1JhaXpbdWFQYWRyZVBlcnNvbmFzXSA/PyBbXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZWVyTm9tYnJlcyhyZXNwdWVzdGFzVUFQYWRyZSwgY29uZmlnUGFkcmUpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgdWFzSXRlcmFyOiBQYXJ0aWFsPHtcclxuICAgICAgICBba2V5IGluIElkVW5pZGFkQW5hbGlzaXNdOiBDb25maWdQYWRyZVxyXG4gICAgfT47XHJcbiAgICB2YXIgY29uZmlnRW5jdTogQ29uZmlnUGFkcmUgPSB7XHJcbiAgICAgICAgdWFQZXJzb25hczogJ3BlcnNvbmFzJyxcclxuICAgICAgICB2YXJTZXhvUGVyc29uYTogJ3NleG8nIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgdmFyTm9tYnJlUGVyc29uYTogJ25vbWJyZScgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICB2YXJMb3NOb21icmVzOiBcImxvc19ub21icmVzXCIgYXMgSWRWYXJpYWJsZVxyXG4gICAgfTtcclxuICAgIHZhciBjb25maWdTdXBlOiBDb25maWdQYWRyZSA9IHtcclxuICAgICAgICB1YVBlcnNvbmFzOiAncGVyc29uYXNfc3VwJyBhcyBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgICAgIHZhclNleG9QZXJzb25hOiAnc2V4b19zdXAnIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgdmFyTm9tYnJlUGVyc29uYTogJ25vbWJyZV9zdXAnIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgdmFyTG9zTm9tYnJlczogXCJub21icmVzX2NvbXBvbmVudGVzX3N1cFwiIGFzIElkVmFyaWFibGVcclxuICAgIH07XHJcblxyXG4gICAgaWYgKGVzdHJ1Y3R1cmEuY29uUmVhSG9nYXIpIHtcclxuICAgICAgICB1YXNJdGVyYXIgPSB7XHJcbiAgICAgICAgICAgIGhvZ2FyZXM6IGNvbmZpZ0VuY3UsXHJcbiAgICAgICAgICAgIFtcImhvZ2FyZXNfc3VwXCIgYXMgSWRVbmlkYWRBbmFsaXNpc106IGNvbmZpZ1N1cGVcclxuICAgICAgICB9XHJcbiAgICAgICAgbGlrZUFyKHVhc0l0ZXJhcikuZm9yRWFjaCgoY29uZmlnUGFkcmUsIHVhUGFkcmUpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbmZpZ1BhZHJlKSB7XHJcbiAgICAgICAgICAgICAgICBhdXRvQ2FyZ2FyUGVyc29uYXMoY29uZmlnUGFkcmUsIHVhUGFkcmUgYXMgSWRVbmlkYWRBbmFsaXNpcywgZXN0cnVjdHVyYSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciBjb25maWdQYWRyZXM6IENvbmZpZ1BhZHJlW10gPSBbY29uZmlnRW5jdSwgY29uZmlnU3VwZV07XHJcbiAgICAgICAgY29uZmlnUGFkcmVzLmZvckVhY2goKGNvbmZpZ1BhZHJlKSA9PiB7XHJcbiAgICAgICAgICAgIGF1dG9DYXJnYXJQZXJzb25hcyhjb25maWdQYWRyZSwgJ3ZpdmllbmRhcycsIGVzdHJ1Y3R1cmEpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHJlc3B1ZXN0YXNSYWl6LnZkb21pbmlvID0gZ2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXS50ZW0uZG9taW5pbztcclxuICAgIC8vVE9ETzogTUVKT1JBUiBFTiBBTEdVTiBNT01FTlRPIEVMIEJPVE9OIExJU1RPXHJcbiAgICAvL2xldCB0b3RhbEggPSByZXNwdWVzdGFzUmFpelsndG90YWxfaCcgYXMgSWRWYXJpYWJsZV07XHJcbiAgICAvL3Jlc3B1ZXN0YXNSYWl6WyckQi5GOlMxJyBhcyBJZFZhcmlhYmxlXSA9IChyZXNwdWVzdGFzUmFpelsnaG9nYXJlcyddIHx8IFtdKS5sZW5ndGggPT0gdG90YWxIID8gJ29rJyA6IG51bGw7XHJcbiAgICAvL2xldCB0b3RhbEhzdXAgPSByZXNwdWVzdGFzUmFpelsndG90YWxfaF9zdXAnIGFzIElkVmFyaWFibGVdO1xyXG4gICAgLy9yZXNwdWVzdGFzUmFpelsnJEIuRjpTMV9TVVAnIGFzIElkVmFyaWFibGVdID0gKHJlc3B1ZXN0YXNSYWl6Wydob2dhcmVzX3N1cCcgYXMgSWRVbmlkYWRBbmFsaXNpc10gfHwgW10pLmxlbmd0aCA9PSB0b3RhbEhzdXAgPyAnb2snIDogbnVsbDtcclxufSlcclxuXHJcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgbG9hZEluc3RhbmNlKClcclxufSlcclxuLy9GSU4gQ09OVFJPTCBQRVNUQcORQVNcclxuXHJcbmZ1bmN0aW9uIGxvYWRDU1MoY3NzVVJMOiBzdHJpbmcsIGlkPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xyXG4gICAgICAgIGxpbmsucmVsID0gJ3N0eWxlc2hlZXQnO1xyXG4gICAgICAgIGxpbmsuaHJlZiA9IGNzc1VSTDtcclxuICAgICAgICBsaW5rLmlkID0gaWQgfHwgY3NzVVJMO1xyXG4gICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICAgICAgbGluay5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYHRyYWUgJHtjc3NVUkx9YCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBsaW5rLm9uZXJyb3IgPSAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciBjYXJnYW5kbyBlbCBlc3RpbG8nLCBlcnIpXHJcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHByb2JsZW1hIGNhcmdhbmRvIGVzdGlsbyAke2Nzc1VSTH1gKSlcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVtb3ZlQ1NTQnlJZChpZDogc3RyaW5nKSB7XHJcbiAgICB2YXIgbGlua05vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcbiAgICBsaW5rTm9kZT8ucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQobGlua05vZGUpO1xyXG59XHJcblxyXG5jb25zdCBCT09UU1RSQVBfNV8xXzNfU1JDID0gJ2Nzcy9ib290c3RyYXAubWluLmNzcyc7Il19
|