dmencu 1.0.6 → 1.0.8
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.
- package/dist/client/unlogged/render-formulario.tsx +109 -14
- package/dist/client/unlogged/render-general.tsx +1 -0
- package/dist/server/server/procedures-dmencu.js +2 -2
- package/dist/unlogged/unlogged/render-formulario.d.ts +38 -6
- package/dist/unlogged/unlogged/render-formulario.js +108 -53
- package/dist/unlogged/unlogged/render-formulario.tsx +109 -14
- package/dist/unlogged/unlogged/render-general.d.ts +2 -0
- package/dist/unlogged/unlogged/render-general.js +2 -1
- package/dist/unlogged/unlogged/render-general.tsx +1 -0
- package/package.json +1 -1
|
@@ -29,7 +29,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
29
29
|
})(function (require, exports) {
|
|
30
30
|
"use strict";
|
|
31
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
-
exports.setLibreDespliegue = exports.desplegarFormularioActual = exports.dmPantallaInicialSinCarga = exports.PantallaInicial = exports.AppDmEncu = exports.OpenedTabs = exports.BienvenidaDespliegue = exports.ListaTextos = exports.HojaDeRutaDespliegue = exports.DesplegarTem = exports.DesplegarCitaPactadaYSeleccionadoAnteriorTem = exports.DesplegarCitaPactada = exports.DesplegarCarga = exports.DesplegarLineaResumenUAPrincipal = exports.Atributo = void 0;
|
|
32
|
+
exports.setLibreDespliegue = exports.desplegarFormularioActual = exports.dmPantallaInicialSinCarga = exports.PantallaInicial = exports.AppDmEncu = exports.OpenedTabs = exports.BienvenidaDespliegue = exports.ListaTextos = exports.setHojaDeRutaDespliegue = exports.HojaDeRutaDespliegue = exports.DesplegarTem = exports.DesplegarCitaPactadaYSeleccionadoAnteriorTem = exports.DesplegarCitaPactada = exports.setDesplegarCarga = exports.DesplegarCarga = exports.setDesplegarLineaResumenUAPrincipal = exports.DesplegarLineaResumenUAPrincipal = exports.resumidores = exports.listaEstadosCarga = exports.Atributo = exports.Button = void 0;
|
|
33
33
|
const React = require("react");
|
|
34
34
|
const ReactDOM = require("react-dom");
|
|
35
35
|
const render_general_1 = require("./render-general");
|
|
@@ -76,6 +76,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
76
76
|
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"]);
|
|
77
77
|
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);
|
|
78
78
|
};
|
|
79
|
+
exports.Button = Button;
|
|
79
80
|
const Button2 = (_a) => {
|
|
80
81
|
var { variant, onClick, disabled, children, className, color, size } = _a, other = __rest(_a, ["variant", "onClick", "disabled", "children", "className", "color", "size"]);
|
|
81
82
|
return js_to_html_1.html.button(Object.assign(Object.assign({}, other), { class: `btn btn${variant == 'contained' ? '' : '-' + (variant == 'outlined' ? 'outline' : variant)}-${(color == 'default' || color == 'inherit' ? 'secondary' : color == 'secondary' ? 'danger' : color) || 'secondary'} ${className || ''} ${size == 'small' ? 'btn-sm' : ''}`, disabled, $on: { click: onClick } }), children);
|
|
@@ -130,7 +131,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
130
131
|
(0, bypass_formulario_2.dispatchByPass)(bypass_formulario_2.accion_registrar_respuesta, { respuesta: null, variable: variable, forPk: forPk });
|
|
131
132
|
};
|
|
132
133
|
return React.createElement("div", { className: "boton-borrar" },
|
|
133
|
-
React.createElement(Button, { id: id, "mi-variable": variable, "valor-opcion": valorOpcion, variant: "outlined", className: "boton-opcion boton-opcion-borrar", onClick: handleClickBorrar },
|
|
134
|
+
React.createElement(exports.Button, { id: id, "mi-variable": variable, "valor-opcion": valorOpcion, variant: "outlined", className: "boton-opcion boton-opcion-borrar", onClick: handleClickBorrar },
|
|
134
135
|
React.createElement(render_general_1.ICON.DeleteForever, null)));
|
|
135
136
|
}
|
|
136
137
|
function SaltoDespliegue({ casillero, prefijo }) {
|
|
@@ -184,7 +185,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
184
185
|
});
|
|
185
186
|
return React.createElement(Grid, { className: "opcion" },
|
|
186
187
|
props.conBotonBorrar ? React.createElement(BotonBorrar, { id: `opcion-var-${props.variable}-${props.valorOpcion}-borrar`, forPk: props.forPk, variable: props.variable, valorOpcion: props.valorOpcion }) : null,
|
|
187
|
-
React.createElement(Button, { id: `opcion-var-${props.variable}-${props.valorOpcion}`, "mi-variable": props.variable, "valor-opcion": props.valorOpcion, variant: "outlined", className: "boton-opcion boton-opcion-seleccion", onClick: handleClick, tabIndex: -1 },
|
|
188
|
+
React.createElement(exports.Button, { id: `opcion-var-${props.variable}-${props.valorOpcion}`, "mi-variable": props.variable, "valor-opcion": props.valorOpcion, variant: "outlined", className: "boton-opcion boton-opcion-seleccion", onClick: handleClick, tabIndex: -1 },
|
|
188
189
|
React.createElement(Grid, { container: true, wrap: "nowrap" },
|
|
189
190
|
React.createElement(Grid, { className: "id" }, casillero.ver_id || casillero.casillero),
|
|
190
191
|
React.createElement(Grid, { className: "opcion-texto" },
|
|
@@ -254,8 +255,10 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
254
255
|
React.createElement(SiNoDespliegue, { casilleroConOpciones: opcionM, forPk: props.forPk, despliegueContenido: (_b = props.opcionM.despliegueContenido) !== null && _b !== void 0 ? _b : 'horizontal' }));
|
|
255
256
|
}
|
|
256
257
|
function EncabezadoDespliegue(props) {
|
|
257
|
-
var _a, _b, _c, _d;
|
|
258
|
+
var _a, _b, _c, _d, _e;
|
|
258
259
|
var { casillero, forPk } = props;
|
|
260
|
+
var [openConfirm, setOpenConfirm] = (0, react_1.useState)(false);
|
|
261
|
+
var [posGPS, setPosGPS] = (0, react_1.useState)(null);
|
|
259
262
|
var conCampoOpciones = (0, react_redux_1.useSelector)((state) => state.opciones.conCampoOpciones);
|
|
260
263
|
var handleClickBorrar = () => {
|
|
261
264
|
(0, bypass_formulario_2.dispatchByPass)(bypass_formulario_2.accion_registrar_respuesta, { respuesta: null, variable: casillero.var_name, forPk: forPk });
|
|
@@ -265,6 +268,9 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
265
268
|
var calculada = casillero.calculada;
|
|
266
269
|
var id = `id-div-${casillero.var_name || casillero.casillero}`;
|
|
267
270
|
var idAcciones = "acciones-" + id;
|
|
271
|
+
const handleClose = () => {
|
|
272
|
+
setOpenConfirm(false);
|
|
273
|
+
};
|
|
268
274
|
return React.createElement("div", { className: "encabezado", "debe-leer": props.leer ? 'SI' : 'NO' },
|
|
269
275
|
React.createElement("div", { id: id, className: "id-div", title: `${casillero.casillero} - ${casillero.var_name}`, onClick: () => {
|
|
270
276
|
var div = document.getElementById(idAcciones);
|
|
@@ -276,14 +282,58 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
276
282
|
(casillero.tipovar == "si_no" || casillero.tipovar == "opciones") ? React.createElement(Campo, { disabled: false, pregunta: casillero, forPk: forPk, mini: true, hidden: !conCampoOpciones && 'quitar' }) : null,
|
|
277
283
|
React.createElement("div", { className: "acciones-pregunta", id: idAcciones, "accion-visible": "0" },
|
|
278
284
|
casillero.var_name ? React.createElement("div", null,
|
|
279
|
-
React.createElement(Button, { id: "borrar-pregunta-" + casillero.var_name, "mi-variable": casillero.var_name, variant: "outlined", className: "boton-pregunta-borrar", onClick: handleClickBorrar },
|
|
285
|
+
React.createElement(exports.Button, { id: "borrar-pregunta-" + casillero.var_name, "mi-variable": casillero.var_name, variant: "outlined", className: "boton-pregunta-borrar", onClick: handleClickBorrar },
|
|
280
286
|
React.createElement(render_general_1.ICON.DeleteForever, null))) : null,
|
|
281
287
|
casillero.var_name ? (ns_nc => React.createElement("div", null,
|
|
282
|
-
React.createElement(Button, { id: "nsnc-pregunta-" + casillero.var_name, "mi-variable": casillero.var_name, variant: "outlined", className: "boton-pregunta-nsnc", onClick: () => {
|
|
288
|
+
React.createElement(exports.Button, { id: "nsnc-pregunta-" + casillero.var_name, "mi-variable": casillero.var_name, variant: "outlined", className: "boton-pregunta-nsnc", onClick: () => {
|
|
283
289
|
(0, bypass_formulario_2.dispatchByPass)(bypass_formulario_2.accion_registrar_respuesta, { respuesta: ns_nc, variable: casillero.var_name, forPk: forPk });
|
|
284
290
|
} }, "NS/NC")))((_b = casillero.valor_ns_nc) !== null && _b !== void 0 ? _b : -9) : null)),
|
|
285
291
|
React.createElement("div", { className: "nombre-div" },
|
|
286
|
-
React.createElement("div", { className: "nombre" },
|
|
292
|
+
React.createElement("div", { className: "nombre" },
|
|
293
|
+
breakeableText(casillero.nombre),
|
|
294
|
+
((_c = casillero.especial) === null || _c === void 0 ? void 0 : _c.gps) ?
|
|
295
|
+
React.createElement("span", null,
|
|
296
|
+
openConfirm ?
|
|
297
|
+
React.createElement(core_1.Dialog, { open: openConfirm, onClose: handleClose, "aria-labelledby": "responsive-dialog-title" },
|
|
298
|
+
React.createElement(core_1.DialogTitle, { id: "responsive-dialog-title" }, "Registro punto GPS"),
|
|
299
|
+
React.createElement(core_1.DialogContent, null,
|
|
300
|
+
React.createElement(core_1.DialogContentText, null,
|
|
301
|
+
"Ya existe un punto registrado, si contin\u00FAa se va a sobrescribir, ",
|
|
302
|
+
React.createElement("b", null, "si no est\u00E1 un DM DESCARTE el punto"))),
|
|
303
|
+
React.createElement(core_1.DialogActions, null,
|
|
304
|
+
React.createElement(exports.Button, { onClick: () => {
|
|
305
|
+
let { siguienteVariable } = (0, bypass_formulario_2.dispatchByPass)(bypass_formulario_2.accion_registrar_respuesta, { forPk: props.forPk, variable: casillero.var_name, respuesta: posGPS });
|
|
306
|
+
if (siguienteVariable) {
|
|
307
|
+
enfocarElementoDeVariable(siguienteVariable);
|
|
308
|
+
}
|
|
309
|
+
handleClose();
|
|
310
|
+
}, color: "secondary", variant: "outlined" }, "Guardar"),
|
|
311
|
+
React.createElement(exports.Button, { onClick: handleClose, color: "primary", variant: "outlined" }, "Descartar")))
|
|
312
|
+
: null,
|
|
313
|
+
React.createElement(exports.Button, { color: "primary", variant: "outlined", style: { marginLeft: '10px' }, onClick: (_event) => {
|
|
314
|
+
const { respuestas } = (0, bypass_formulario_1.respuestasForPk)(forPk);
|
|
315
|
+
const checkGPS = () => {
|
|
316
|
+
if (!respuestas[casillero.var_name]) {
|
|
317
|
+
let { siguienteVariable } = (0, bypass_formulario_2.dispatchByPass)(bypass_formulario_2.accion_registrar_respuesta, { forPk: props.forPk, variable: casillero.var_name, respuesta: posGPS });
|
|
318
|
+
if (siguienteVariable) {
|
|
319
|
+
enfocarElementoDeVariable(siguienteVariable);
|
|
320
|
+
}
|
|
321
|
+
setOpenConfirm(false);
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
setOpenConfirm(true);
|
|
325
|
+
}
|
|
326
|
+
};
|
|
327
|
+
navigator.geolocation.getCurrentPosition(position => {
|
|
328
|
+
setPosGPS(JSON.stringify(position));
|
|
329
|
+
checkGPS();
|
|
330
|
+
}, e => {
|
|
331
|
+
setPosGPS(e.message);
|
|
332
|
+
checkGPS();
|
|
333
|
+
});
|
|
334
|
+
} },
|
|
335
|
+
React.createElement(render_general_1.ICON.Location, null)))
|
|
336
|
+
: null),
|
|
287
337
|
casillero.aclaracion ?
|
|
288
338
|
React.createElement("div", { className: "aclaracion" }, casillero.salto && casillero.tipoc == 'FILTRO' ?
|
|
289
339
|
React.createElement(SaltoDespliegue, { casillero: casillero, prefijo: breakeableText(casillero.aclaracion) })
|
|
@@ -301,9 +351,9 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
301
351
|
casillero.expresion_habilitar ? React.createElement("span", { "el-metadato": "expresion_habilitar" },
|
|
302
352
|
"habilita: ",
|
|
303
353
|
casillero.expresion_habilitar) : null,
|
|
304
|
-
((
|
|
305
|
-
"autoing: ", (
|
|
306
|
-
|
|
354
|
+
((_d = casillero.especial) === null || _d === void 0 ? void 0 : _d.autoing) ? React.createElement("span", { "el-metadato": "expresion_autoing" },
|
|
355
|
+
"autoing: ", (_e = casillero.especial) === null || _e === void 0 ? void 0 :
|
|
356
|
+
_e.autoing) : null)));
|
|
307
357
|
}
|
|
308
358
|
function DesplegarConfirmarBorrarRespuesta(props) {
|
|
309
359
|
var [open, setOpen] = (0, react_1.useState)(!!props.variableBorrar);
|
|
@@ -321,13 +371,13 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
321
371
|
} },
|
|
322
372
|
React.createElement(Typography, null, "La pregunta tiene registrada una respuesta que no fue detectada como err\u00F3nea"),
|
|
323
373
|
React.createElement("div", { className: "confirma-botones" },
|
|
324
|
-
React.createElement(Button, { color: "secondary", variant: "outlined", onClick: () => {
|
|
374
|
+
React.createElement(exports.Button, { color: "secondary", variant: "outlined", onClick: () => {
|
|
325
375
|
if (props.variableBorrar) {
|
|
326
376
|
(0, bypass_formulario_2.dispatchByPass)(bypass_formulario_2.accion_registrar_respuesta, { forPk: props.forPk, variable: props.variableBorrar, respuesta: null });
|
|
327
377
|
}
|
|
328
378
|
handleClose();
|
|
329
379
|
} }, "borrar respuesta"),
|
|
330
|
-
React.createElement(Button, { color: "primary", variant: "outlined", onClick: handleClose }, "volver sin borrar")));
|
|
380
|
+
React.createElement(exports.Button, { color: "primary", variant: "outlined", onClick: handleClose }, "volver sin borrar")));
|
|
331
381
|
}
|
|
332
382
|
function calcularNuestraLongitud(longitud) {
|
|
333
383
|
return longitud;
|
|
@@ -341,7 +391,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
341
391
|
elementoInputVariable === null || elementoInputVariable === void 0 ? void 0 : elementoInputVariable.focus();
|
|
342
392
|
}
|
|
343
393
|
function Campo(props) {
|
|
344
|
-
var _a;
|
|
394
|
+
var _a, _b, _c;
|
|
345
395
|
var { pregunta, disabled, mini } = props;
|
|
346
396
|
var { saltoAutomatico, conCampoOpciones } = (0, react_redux_1.useSelector)((state) => state.opciones);
|
|
347
397
|
const longitud = mini ? pregunta.casilleros.reduce((acum, o) => Math.max(o.casillero.toString().length, acum), 0) :
|
|
@@ -367,9 +417,11 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
367
417
|
return React.createElement("div", { className: "campo", "nuestra-longitud": nuestraLongitud, style: props.hidden == 'quitar' ? { display: 'none' } : props.hidden ? { visibility: 'hidden' } : undefined },
|
|
368
418
|
mini ? null : React.createElement(BotonBorrar, { id: `borrar-abierta-${pregunta.var_name}`, variable: pregunta.var_name, forPk: props.forPk }),
|
|
369
419
|
React.createElement("div", { className: "input-campo" },
|
|
370
|
-
React.createElement(TextField, { id: `var-${pregunta.var_name}`,
|
|
420
|
+
React.createElement(TextField, { id: `var-${pregunta.var_name}`,
|
|
421
|
+
//@ts-ignore algunos casilleros tienen especial y otros no
|
|
422
|
+
disabled: disabled || ((_a = pregunta.especial) === null || _a === void 0 ? void 0 : _a.gps), className: "variable",
|
|
371
423
|
//var-length={pregunta.longitud}
|
|
372
|
-
fullWidth: true, inputProps: inputProps, type: (
|
|
424
|
+
fullWidth: true, inputProps: inputProps, type: (_b = pregunta.despliegueTipoInput) !== null && _b !== void 0 ? _b : (0, render_general_1.adaptarTipoVarCasillero)(pregunta.tipovar), onKeyDown: (event) => {
|
|
373
425
|
var esEnter = (event.key == 'Enter' || event.keyCode == 13);
|
|
374
426
|
debeSaltar = esEnter && (saltoAutomatico || conCampoOpciones);
|
|
375
427
|
if (esEnter) {
|
|
@@ -386,9 +438,9 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
386
438
|
onChange(valor);
|
|
387
439
|
setEditando(false);
|
|
388
440
|
} })),
|
|
389
|
-
disabled || mini ? null :
|
|
441
|
+
disabled || ((_c = pregunta.especial) === null || _c === void 0 ? void 0 : _c.gps) || mini ? null :
|
|
390
442
|
React.createElement("div", { className: "boton-confirmar-campo" },
|
|
391
|
-
React.createElement(Button, { variant: editando ? "contained" : 'outlined', size: "small", color: editando ? 'primary' : 'default', "boton-confirmar": pregunta.var_name, tabIndex: -1, onClick: () => {
|
|
443
|
+
React.createElement(exports.Button, { variant: editando ? "contained" : 'outlined', size: "small", color: editando ? 'primary' : 'default', "boton-confirmar": pregunta.var_name, tabIndex: -1, onClick: () => {
|
|
392
444
|
onChange(bypass_formulario_2.NO_CAMBIAR__VERIFICAR_SI_ES_NECESARIO);
|
|
393
445
|
setEditando(false);
|
|
394
446
|
} },
|
|
@@ -535,7 +587,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
535
587
|
React.createElement(EncabezadoDespliegue, { casillero: casillero, leer: false, forPk: forPk }),
|
|
536
588
|
React.createElement("div", { id: id, style: { display: 'none' } }),
|
|
537
589
|
esResumenFormulario ?
|
|
538
|
-
React.createElement(Button, { className: "special-button", id: "boton-ir-resumen-formulario", style: { display: 'none' }, onClick: (event) => {
|
|
590
|
+
React.createElement(exports.Button, { className: "special-button", id: "boton-ir-resumen-formulario", style: { display: 'none' }, onClick: (event) => {
|
|
539
591
|
ir(JSON.parse(event.target.getAttribute('def-button')));
|
|
540
592
|
} }, "ir (interno)")
|
|
541
593
|
: null);
|
|
@@ -807,7 +859,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
807
859
|
};
|
|
808
860
|
return React.createElement(DesplegarCasillero, { casillero: casillero },
|
|
809
861
|
React.createElement("div", { id: idSeccion }),
|
|
810
|
-
React.createElement(Button, { className: "special-button", id: idButton, onClick: (event) => {
|
|
862
|
+
React.createElement(exports.Button, { className: "special-button", id: idButton, onClick: (event) => {
|
|
811
863
|
ir(JSON.parse(event.target.getAttribute('def-button')));
|
|
812
864
|
} }, "ir (interno)"),
|
|
813
865
|
React.createElement(core_1.Dialog, { className: "nuestro-dialogo", open: !!confirmarForzarIr, onClose: () => setConfirmarForzarIr(null) },
|
|
@@ -815,8 +867,8 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
815
867
|
React.createElement(Typography, null, "No se puede avanzar al siguiente formulario."),
|
|
816
868
|
React.createElement(Typography, null, "Quiz\u00E1s no termin\u00F3 de contestar las preguntas correspondientes"),
|
|
817
869
|
React.createElement(Typography, null, "Quiz\u00E1s no corresponde en base a las respuestas obtenidas")),
|
|
818
|
-
React.createElement(Button, { color: "secondary", onClick: () => confirmarForzarIr && ir(confirmarForzarIr) }, "forzar"),
|
|
819
|
-
React.createElement(Button, { color: "primary", variant: "contained", onClick: () => setConfirmarForzarIr(null) }, "Entendido")));
|
|
870
|
+
React.createElement(exports.Button, { color: "secondary", onClick: () => confirmarForzarIr && ir(confirmarForzarIr) }, "forzar"),
|
|
871
|
+
React.createElement(exports.Button, { color: "primary", variant: "contained", onClick: () => setConfirmarForzarIr(null) }, "Entendido")));
|
|
820
872
|
}
|
|
821
873
|
function CasilleroDesconocido(props) {
|
|
822
874
|
return React.createElement(DesplegarCasillero, { id: `casillerodesconocido-${props.casillero.id_casillero}`, casillero: props.casillero, style: { display: 'none' } },
|
|
@@ -966,7 +1018,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
966
1018
|
};
|
|
967
1019
|
const opciones = (0, react_redux_1.useSelector)((state) => state.opciones);
|
|
968
1020
|
return React.createElement(React.Fragment, null,
|
|
969
|
-
React.createElement(Button, { onClick: handleClick },
|
|
1021
|
+
React.createElement(exports.Button, { onClick: handleClick },
|
|
970
1022
|
React.createElement(render_general_1.ICON.Settings, null)),
|
|
971
1023
|
React.createElement(core_1.Menu, { open: open, anchorEl: anchorEl, onClose: () => setOpen(false) },
|
|
972
1024
|
React.createElement(core_1.MenuItem, { onClick: () => cambiar("relevamiento") }, "normal"),
|
|
@@ -1017,7 +1069,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1017
1069
|
}
|
|
1018
1070
|
});
|
|
1019
1071
|
return React.createElement(React.Fragment, null,
|
|
1020
|
-
React.createElement(core_1.ButtonGroup, { key: "formularios", className: "barra-navegacion", "solo-lectura": props.soloLectura ? 'si' : 'no' }, botonesFormulario.map((b, i) => React.createElement(Button, { color: b.que == forPk.formulario ? "primary" : "inherit", variant: "outlined", id: b.id, key: `${i}-${b.que}-${b.retroceso}`, disabled: !b.que, onClick: () => {
|
|
1072
|
+
React.createElement(core_1.ButtonGroup, { key: "formularios", className: "barra-navegacion", "solo-lectura": props.soloLectura ? 'si' : 'no' }, botonesFormulario.map((b, i) => React.createElement(exports.Button, { color: b.que == forPk.formulario ? "primary" : "inherit", variant: "outlined", id: b.id, key: `${i}-${b.que}-${b.retroceso}`, disabled: !b.que, onClick: () => {
|
|
1021
1073
|
dispatch(b.que == 'hdr' ? redux_formulario_1.dispatchers.VOLVER_HDR({}) :
|
|
1022
1074
|
redux_formulario_1.dispatchers.VOLVER_DE_FORMULARIO({ magnitudRetroceso: b.retroceso }));
|
|
1023
1075
|
b.que == 'hdr' ? null :
|
|
@@ -1029,7 +1081,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1029
1081
|
props.modoDirecto ?
|
|
1030
1082
|
React.createElement(React.Fragment, null,
|
|
1031
1083
|
React.createElement(core_1.ButtonGroup, { key: "volver_y_grabar", style: { margin: '0 0 0 30px' } },
|
|
1032
|
-
React.createElement(Button, { id: ID_BOTON_CERRAR, color: "inherit", variant: "outlined", onClick: () => __awaiter(this, void 0, void 0, function* () {
|
|
1084
|
+
React.createElement(exports.Button, { id: ID_BOTON_CERRAR, color: "inherit", variant: "outlined", onClick: () => __awaiter(this, void 0, void 0, function* () {
|
|
1033
1085
|
if (props.soloLectura || !(0, bypass_formulario_2.getDirty)()) {
|
|
1034
1086
|
cerrarDirecto();
|
|
1035
1087
|
}
|
|
@@ -1045,14 +1097,14 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1045
1097
|
React.createElement(core_1.DialogContent, null,
|
|
1046
1098
|
React.createElement(core_1.DialogContentText, { id: "alert-dialog-description" }, "Est\u00E1 por salir de la encuesta, se perder\u00E1n los cambios no guardados.")),
|
|
1047
1099
|
React.createElement(core_1.DialogActions, null,
|
|
1048
|
-
React.createElement(Button, { onClick: () => {
|
|
1100
|
+
React.createElement(exports.Button, { onClick: () => {
|
|
1049
1101
|
cerrarDirecto();
|
|
1050
1102
|
}, color: "secondary", variant: "outlined" }, "descartar cambios y cerrar"),
|
|
1051
|
-
React.createElement(Button, { onClick: () => {
|
|
1103
|
+
React.createElement(exports.Button, { onClick: () => {
|
|
1052
1104
|
setConfirmaCerrar(false);
|
|
1053
1105
|
}, color: "primary", variant: "contained" }, "continuar editando encuesta"))),
|
|
1054
1106
|
props.soloLectura ? null :
|
|
1055
|
-
React.createElement(Button, { id: "save-button", color: "inherit", variant: "outlined", disabled: true, onClick: () => __awaiter(this, void 0, void 0, function* () { return true; }) },
|
|
1107
|
+
React.createElement(exports.Button, { id: "save-button", color: "inherit", variant: "outlined", disabled: true, onClick: () => __awaiter(this, void 0, void 0, function* () { return true; }) },
|
|
1056
1108
|
React.createElement(render_general_1.ICON.Save, null))))
|
|
1057
1109
|
: null,
|
|
1058
1110
|
React.createElement(Typography, { className: "mostrar-forPk", component: "span", style: { margin: '0 10px' } },
|
|
@@ -1069,7 +1121,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1069
1121
|
const dispatch = (0, react_redux_1.useDispatch)();
|
|
1070
1122
|
var esVolver = opciones.pilaForPk.length > 0;
|
|
1071
1123
|
return React.createElement("div", { className: "div-boton-volver" },
|
|
1072
|
-
React.createElement(Button, { id: id, className: "boton-volver", onClick: () => {
|
|
1124
|
+
React.createElement(exports.Button, { id: id, className: "boton-volver", onClick: () => {
|
|
1073
1125
|
if (esVolver) {
|
|
1074
1126
|
(0, bypass_formulario_2.dispatchByPass)(bypass_formulario_1.accion_abrir_formulario, { forPk: opciones.pilaForPk[opciones.pilaForPk.length - 1] });
|
|
1075
1127
|
dispatch(redux_formulario_1.dispatchers.VOLVER_DE_FORMULARIO({ magnitudRetroceso: 1 }));
|
|
@@ -1143,7 +1195,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1143
1195
|
React.createElement(core_1.Paper, { className: "formulario", "modo-despliegue": modoDespliegue, "ver-num-opciones": opciones.conCampoOpciones ? 'SI' : 'NO' },
|
|
1144
1196
|
modo.demo ? React.createElement("div", null,
|
|
1145
1197
|
React.createElement(Typography, { component: "span" }, "Modo de despliegue:"),
|
|
1146
|
-
React.createElement(core_1.ButtonGroup, null, listaModos.map(modo => React.createElement(Button, { key: modo, variant: modo == modoDespliegue ? "contained" : "outlined", onClick: () => dispatch(redux_formulario_1.dispatchers.MODO_DESPLIEGUE({ modoDespliegue: modo })) }, modo)))) : null,
|
|
1198
|
+
React.createElement(core_1.ButtonGroup, null, listaModos.map(modo => React.createElement(exports.Button, { key: modo, variant: modo == modoDespliegue ? "contained" : "outlined", onClick: () => dispatch(redux_formulario_1.dispatchers.MODO_DESPLIEGUE({ modoDespliegue: modo })) }, modo)))) : null,
|
|
1147
1199
|
pantallaCompleta ? null : React.createElement(BotonVolverEnDiv, { id: "boton-volver-1" }),
|
|
1148
1200
|
pantallaCompleta ? null : React.createElement(FormularioEncabezado, { casillero: formulario }),
|
|
1149
1201
|
React.createElement(DesplegarContenidoInternoBloqueOFormulario, { bloqueOFormulario: formulario, formulario: formulario, forPk: forPk, multiple: false }),
|
|
@@ -1167,14 +1219,16 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1167
1219
|
React.createElement("span", { className: "atributo-valor" }, props.valor.toString())) : null;
|
|
1168
1220
|
}
|
|
1169
1221
|
exports.Atributo = Atributo;
|
|
1170
|
-
|
|
1171
|
-
|
|
1222
|
+
exports.listaEstadosCarga = ['resumen', 'relevamiento', 'recibo'];
|
|
1223
|
+
exports.resumidores = [
|
|
1172
1224
|
{ nombre: 'REA', f: (rr) => rr.resumenEstado == "ok" },
|
|
1173
1225
|
{ nombre: 'Cita pactada', f: (rr) => rr.resumenEstado == "cita pactada" },
|
|
1174
1226
|
{ nombre: 'Pendientes', f: (rr) => rr.resumenEstado == "vacio" },
|
|
1175
1227
|
];
|
|
1176
|
-
resumidores.push({ nombre: 'Otros', f: resumidores.reduce((g, r) => (rr => !r.f(rr) && g(rr)), (_) => true) });
|
|
1177
|
-
|
|
1228
|
+
exports.resumidores.push({ nombre: 'Otros', f: exports.resumidores.reduce((g, r) => (rr => !r.f(rr) && g(rr)), (_) => true) });
|
|
1229
|
+
const setDesplegarLineaResumenUAPrincipal = (lineaResumenUAPrincipal) => exports.DesplegarLineaResumenUAPrincipal = lineaResumenUAPrincipal;
|
|
1230
|
+
exports.setDesplegarLineaResumenUAPrincipal = setDesplegarLineaResumenUAPrincipal;
|
|
1231
|
+
(0, exports.setDesplegarLineaResumenUAPrincipal)((props) => {
|
|
1178
1232
|
const { numVivienda, respuestas, formPrincipal, tarea } = props;
|
|
1179
1233
|
const id = 'viv-' + numVivienda;
|
|
1180
1234
|
const estructura = (0, bypass_formulario_2.getEstructura)();
|
|
@@ -1206,10 +1260,11 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1206
1260
|
: null),
|
|
1207
1261
|
React.createElement(core_1.TableCell, null, tarea),
|
|
1208
1262
|
React.createElement(core_1.TableCell, null,
|
|
1209
|
-
React.createElement(Button, { id: id, onClick: () => dispatch(redux_formulario_1.dispatchers.CAMBIAR_FORMULARIO({ forPk, apilarVuelta: false })) }, numVivienda.toString())));
|
|
1210
|
-
}
|
|
1211
|
-
exports.
|
|
1212
|
-
|
|
1263
|
+
React.createElement(exports.Button, { id: id, onClick: () => dispatch(redux_formulario_1.dispatchers.CAMBIAR_FORMULARIO({ forPk, apilarVuelta: false })) }, numVivienda.toString())));
|
|
1264
|
+
});
|
|
1265
|
+
const setDesplegarCarga = (despliegueCarga) => exports.DesplegarCarga = despliegueCarga;
|
|
1266
|
+
exports.setDesplegarCarga = setDesplegarCarga;
|
|
1267
|
+
(0, exports.setDesplegarCarga)((props) => {
|
|
1213
1268
|
const [newSurvey, setNewSurvey] = (0, react_1.useState)(0);
|
|
1214
1269
|
const { carga, idCarga, informacionHdr, respuestas } = props;
|
|
1215
1270
|
var estructura = (0, bypass_formulario_2.getEstructura)();
|
|
@@ -1238,20 +1293,19 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1238
1293
|
: null,
|
|
1239
1294
|
React.createElement(core_1.TableBody, null,
|
|
1240
1295
|
React.createElement(React.Fragment, null,
|
|
1241
|
-
(0, like_ar_1.strict)(informacionHdr).filter((informacion) => informacion.tem.carga == idCarga).map((informacion, numVivienda) => React.createElement(DesplegarLineaResumenUAPrincipal, { key: numVivienda, numVivienda: numVivienda, tarea: informacion.tarea.tarea, formPrincipal: informacion.tarea.main_form, respuestas: respuestas[estructura.uaPpal][numVivienda] })).array(),
|
|
1296
|
+
(0, like_ar_1.strict)(informacionHdr).filter((informacion) => informacion.tem.carga == idCarga).map((informacion, numVivienda) => React.createElement(exports.DesplegarLineaResumenUAPrincipal, { key: numVivienda, numVivienda: numVivienda, tarea: informacion.tarea.tarea, formPrincipal: informacion.tarea.main_form, respuestas: respuestas[estructura.uaPpal][numVivienda] })).array(),
|
|
1242
1297
|
estructura.permiteGenerarMuestra ?
|
|
1243
1298
|
React.createElement(core_1.TableRow, { className: "tr-carga-nuevo" },
|
|
1244
1299
|
React.createElement(core_1.TableCell, { colSpan: 3 },
|
|
1245
|
-
React.createElement(Button, { variant: "contained", color: "primary", onClick: () => (0, bypass_formulario_1.crearEncuesta)(idCarga, (forPkRaiz) => {
|
|
1300
|
+
React.createElement(exports.Button, { variant: "contained", color: "primary", onClick: () => (0, bypass_formulario_1.crearEncuesta)(idCarga, (forPkRaiz) => {
|
|
1246
1301
|
dispatch(redux_formulario_1.dispatchers.CAMBIAR_FORMULARIO({ forPk: forPkRaiz, apilarVuelta: false }));
|
|
1247
1302
|
}) },
|
|
1248
1303
|
React.createElement(render_general_1.ICON.Add, null))))
|
|
1249
1304
|
: null))) :
|
|
1250
1305
|
React.createElement(core_1.Table, null,
|
|
1251
1306
|
React.createElement(core_1.TableHead, { style: { fontSize: "1.2rem" } },
|
|
1252
|
-
React.createElement(core_1.TableRow, { className: "tr-carga" }, resumidores.map((resumidor, i) => React.createElement(core_1.TableCell, { key: i }, resumidor.nombre))))));
|
|
1253
|
-
}
|
|
1254
|
-
exports.DesplegarCarga = DesplegarCarga;
|
|
1307
|
+
React.createElement(core_1.TableRow, { className: "tr-carga" }, exports.resumidores.map((resumidor, i) => React.createElement(core_1.TableCell, { key: i }, resumidor.nombre))))));
|
|
1308
|
+
});
|
|
1255
1309
|
function DesplegarCitaPactada(props) {
|
|
1256
1310
|
const { respuestas } = props;
|
|
1257
1311
|
return React.createElement("div", { className: "cita-pactada" },
|
|
@@ -1295,7 +1349,9 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1295
1349
|
React.createElement("div", { className: "tem-observaciones" }, tem.observaciones));
|
|
1296
1350
|
}
|
|
1297
1351
|
exports.DesplegarTem = DesplegarTem;
|
|
1298
|
-
|
|
1352
|
+
const setHojaDeRutaDespliegue = (hojaDeRuta) => exports.HojaDeRutaDespliegue = hojaDeRuta;
|
|
1353
|
+
exports.setHojaDeRutaDespliegue = setHojaDeRutaDespliegue;
|
|
1354
|
+
(0, exports.setHojaDeRutaDespliegue)((_props) => {
|
|
1299
1355
|
var { cargas, num_sincro, informacionHdr, respuestas } = (0, bypass_formulario_1.getDatosByPass)();
|
|
1300
1356
|
var { modo } = (0, react_redux_1.useSelector)((state) => ({ modo: state.modo }));
|
|
1301
1357
|
var feedbackRowValidator = (0, bypass_formulario_2.getFeedbackRowValidator)();
|
|
@@ -1321,7 +1377,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1321
1377
|
React.createElement("div", { className: "hoja-de-ruta" },
|
|
1322
1378
|
modo.demo ? React.createElement("div", null,
|
|
1323
1379
|
React.createElement(Typography, null, "Modo demo "),
|
|
1324
|
-
React.createElement(Button, { variant: "outlined", color: "secondary", onClick: () => dispatch(redux_formulario_1.dispatchers.REINICIAR_DEMO({})) }, "reiniciar")) : null,
|
|
1380
|
+
React.createElement(exports.Button, { variant: "outlined", color: "secondary", onClick: () => dispatch(redux_formulario_1.dispatchers.REINICIAR_DEMO({})) }, "reiniciar")) : null,
|
|
1325
1381
|
React.createElement("div", { className: "nombre-version" },
|
|
1326
1382
|
React.createElement("div", null, "Direcci\u00F3n General de Estad\u00EDstica y Censos - C.A.B.A."),
|
|
1327
1383
|
React.createElement("div", null,
|
|
@@ -1330,9 +1386,8 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1330
1386
|
num_sincro,
|
|
1331
1387
|
" - versi\u00F3n ",
|
|
1332
1388
|
appVersion)),
|
|
1333
|
-
(0, like_ar_1.strict)(cargas).map((carga, idCarga, _, posicion) => React.createElement(DesplegarCarga, { key: idCarga, carga: carga, idCarga: idCarga, posicion: posicion, informacionHdr: informacionHdr, feedbackRowValidator: feedbackRowValidator, respuestas: respuestas })).array())));
|
|
1334
|
-
}
|
|
1335
|
-
exports.HojaDeRutaDespliegue = HojaDeRutaDespliegue;
|
|
1389
|
+
(0, like_ar_1.strict)(cargas).map((carga, idCarga, _, posicion) => React.createElement(exports.DesplegarCarga, { key: idCarga, carga: carga, idCarga: idCarga, posicion: posicion, informacionHdr: informacionHdr, feedbackRowValidator: feedbackRowValidator, respuestas: respuestas })).array())));
|
|
1390
|
+
});
|
|
1336
1391
|
function ListaTextos(props) {
|
|
1337
1392
|
return React.createElement("ul", null, props.textos.map(t => React.createElement("li", null,
|
|
1338
1393
|
React.createElement(Typography, null, t))));
|
|
@@ -1353,11 +1408,11 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1353
1408
|
] }))
|
|
1354
1409
|
: React.createElement(React.Fragment, null,
|
|
1355
1410
|
React.createElement(Typography, null, "Encuesta de Seroprevalencia de COVID-19")),
|
|
1356
|
-
React.createElement(Button, { variant: "contained", color: "secondary", onClick: () => { (0, redux_formulario_1.gotoSincronizar)(); } },
|
|
1411
|
+
React.createElement(exports.Button, { variant: "contained", color: "secondary", onClick: () => { (0, redux_formulario_1.gotoSincronizar)(); } },
|
|
1357
1412
|
React.createElement("span", null, "Sincronizar "),
|
|
1358
1413
|
" ",
|
|
1359
1414
|
React.createElement(render_general_1.ICON.SyncAlt, null)),
|
|
1360
|
-
React.createElement(Button, { variant: "contained", color: "primary", onClick: () => dispatch(redux_formulario_1.dispatchers.SET_OPCION({ opcion: 'bienvenido', valor: true })) },
|
|
1415
|
+
React.createElement(exports.Button, { variant: "contained", color: "primary", onClick: () => dispatch(redux_formulario_1.dispatchers.SET_OPCION({ opcion: 'bienvenido', valor: true })) },
|
|
1361
1416
|
React.createElement("span", null, "Continuar "),
|
|
1362
1417
|
" ",
|
|
1363
1418
|
React.createElement(render_general_1.ICON.Send, null)));
|
|
@@ -1394,7 +1449,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1394
1449
|
return React.createElement(BienvenidaDespliegue, { modo: modo });
|
|
1395
1450
|
}
|
|
1396
1451
|
else if (forPk == null) {
|
|
1397
|
-
return React.createElement(HojaDeRutaDespliegue, null);
|
|
1452
|
+
return React.createElement(exports.HojaDeRutaDespliegue, null);
|
|
1398
1453
|
}
|
|
1399
1454
|
else {
|
|
1400
1455
|
return React.createElement(FormularioDespliegue, { forPk: forPk });
|
|
@@ -1419,7 +1474,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1419
1474
|
React.createElement(Typography, { component: "p", style: paragraphStyles },
|
|
1420
1475
|
"Sincronizar dispositivo",
|
|
1421
1476
|
React.createElement("span", { style: { padding: '5px' } },
|
|
1422
|
-
React.createElement(Button, { color: "primary", variant: "contained", onClick: () => {
|
|
1477
|
+
React.createElement(exports.Button, { color: "primary", variant: "contained", onClick: () => {
|
|
1423
1478
|
(0, redux_formulario_1.gotoSincronizar)();
|
|
1424
1479
|
} },
|
|
1425
1480
|
React.createElement(render_general_1.ICON.SyncAlt, null)))))
|
|
@@ -1432,7 +1487,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1432
1487
|
return React.createElement(BienvenidaDespliegue, { modo: modo });
|
|
1433
1488
|
}
|
|
1434
1489
|
else if (forPk == null) {
|
|
1435
|
-
return React.createElement(HojaDeRutaDespliegue, null);
|
|
1490
|
+
return React.createElement(exports.HojaDeRutaDespliegue, null);
|
|
1436
1491
|
}
|
|
1437
1492
|
else {
|
|
1438
1493
|
return React.createElement(FormularioDespliegue, { forPk: forPk });
|
|
@@ -1607,4 +1662,4 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1607
1662
|
}
|
|
1608
1663
|
const BOOTSTRAP_5_1_3_SRC = 'css/bootstrap.min.css';
|
|
1609
1664
|
});
|
|
1610
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvcmVuZGVyLWZvcm11bGFyaW8udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsK0JBQStCO0lBQy9CLHNDQUFzQztJQUN0QyxxREFRMEI7SUFDMUIsbUNBZ0JpQjtJQUNqQiwyREFhNEI7SUFDNUIseURBSTRCO0lBQzVCLGlDQUE2RDtJQUM3RCw2Q0FBdUQ7SUFDdkQscUNBQXVEO0lBQ3ZELCtDQUE2QztJQUM3QywyQ0FBd0M7SUFFeEMsNENBTTJCO0lBSTNCLDJEQWM0QjtJQUU1QiwyQ0FBeUM7SUFFekMsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0lBRzFCLFNBQVMsY0FBYyxDQUFDLElBQWdCLEVBQUUsV0FBNkM7UUFDbkYsSUFBRyxPQUFPLElBQUksSUFBSSxRQUFRO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDN0MsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUN0RSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUMsQ0FBQyxJQUFJLEVBQUMsRUFBRSxDQUFBLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFDLENBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7UUFDekYsSUFBRyxDQUFDLFdBQVcsSUFBSSxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDckM7O1VBRUU7SUFDTixDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMscUpBQXFKO0lBQ2hMLGdJQUFnSTtJQUVoSSxNQUFNLG1CQUFtQixHQUFHLGtCQUFrQixDQUFDO0lBQy9DLE1BQU0sZUFBZSxHQUFHLHVCQUF1QixDQUFDO0lBRWhELElBQUksVUFBVSxHQUFXLEtBQUssQ0FBQztJQUUvQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUUsRUFBRTtRQUNoQzs7OztVQUlFO1FBQ0YsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFFLEVBQUU7WUFDakMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUMsQ0FBQyxDQUFBO0lBY0YsSUFBSSxlQUFvQyxDQUFBO0lBRXhDLE1BQU0sTUFBTSxHQUFHLENBQUMsRUFZSSxFQUFDLEVBQUU7WUFaUCxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFDckUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxPQVd2QyxFQVZULEtBQUssY0FGQSx1SUFHWCxDQURXO1FBVU8sT0FBQSxnREFDZixLQUFLLElBQ1QsU0FBUyxFQUFFLFVBQVUsT0FBTyxJQUFFLFdBQVcsQ0FBQSxDQUFDLENBQUEsRUFBRSxDQUFBLENBQUMsQ0FBQSxHQUFHLEdBQUMsQ0FBQyxPQUFPLElBQUUsVUFBVSxDQUFBLENBQUMsQ0FBQSxTQUFTLENBQUEsQ0FBQyxDQUFBLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFFLFNBQVMsSUFBSSxLQUFLLElBQUUsU0FBUyxDQUFBLENBQUMsQ0FBQSxXQUFXLENBQUEsQ0FBQyxDQUFBLEtBQUssSUFBRSxXQUFXLENBQUEsQ0FBQyxDQUFBLFFBQVEsQ0FBQSxDQUFDLENBQUEsS0FBSyxDQUFDLElBQUUsV0FBVyxJQUFJLFNBQVMsSUFBRSxFQUFFLElBQUksSUFBSSxJQUFFLE9BQU8sQ0FBQSxDQUFDLENBQUEsUUFBUSxDQUFBLENBQUMsQ0FBQSxFQUFFLEVBQUUsRUFDN08sUUFBUSxFQUFFLFFBQVEsRUFDbEIsT0FBTyxFQUFFLE9BQU8sS0FDbEIsUUFBUSxDQUFVLENBQUE7S0FBQSxDQUFDO0lBRXJCLE1BQU0sT0FBTyxHQUFHLENBQUMsRUFTRyxFQUFDLEVBQUU7WUFUTixFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksT0FTMUQsRUFUK0QsS0FBSyxjQUF2RSw0RUFBd0UsQ0FBRDtRQVNqRSxPQUFBLGlCQUFJLENBQUMsTUFBTSxpQ0FDM0IsS0FBSyxLQUNSLEtBQUssRUFBRSxVQUFVLE9BQU8sSUFBRSxXQUFXLENBQUEsQ0FBQyxDQUFBLEVBQUUsQ0FBQSxDQUFDLENBQUEsR0FBRyxHQUFDLENBQUMsT0FBTyxJQUFFLFVBQVUsQ0FBQSxDQUFDLENBQUEsU0FBUyxDQUFBLENBQUMsQ0FBQSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBRSxTQUFTLElBQUksS0FBSyxJQUFFLFNBQVMsQ0FBQSxDQUFDLENBQUEsV0FBVyxDQUFBLENBQUMsQ0FBQSxLQUFLLElBQUUsV0FBVyxDQUFBLENBQUMsQ0FBQSxRQUFRLENBQUEsQ0FBQyxDQUFBLEtBQUssQ0FBQyxJQUFFLFdBQVcsSUFBSSxTQUFTLElBQUUsRUFBRSxJQUFJLElBQUksSUFBRSxPQUFPLENBQUEsQ0FBQyxDQUFBLFFBQVEsQ0FBQSxDQUFDLENBQUEsRUFBRSxFQUFFLEVBQ3pPLFFBQVEsRUFDUixHQUFHLEVBQUMsRUFBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLEtBQ3BCLFFBQVEsQ0FBQyxDQUFBO0tBQUEsQ0FBQztJQUdiLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FrQmxCLEVBQUMsRUFBRSxDQUFBLCtCQUNBLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUNaLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUN4QixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFDMUIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQzFCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUNsQixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFDaEIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQ3hCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUN0QixNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUMsRUFBRSxXQUFBLE9BQUEsTUFBQSxLQUFLLENBQUMsTUFBTSxzREFBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQSxFQUFBLEVBQ3BELFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUMxQixXQUFXLEVBQUUsS0FBSyxDQUFDLEtBQUssR0FDMUIsQ0FBQztJQUVILE1BQU0sVUFBVSxHQUFHLENBQUMsRUFJRixFQUFDLEVBQUU7WUFKRCxFQUFDLFFBQVEsT0FJWCxFQUpnQixNQUFNLGNBQXBCLFlBQXFCLENBQUQ7UUFJbkIsT0FBQSxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUUsTUFBTSxDQUFDLFNBQVMsSUFBRSxLQUFLLEVBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxDQUFBO0tBQUEsQ0FBQztJQUVsRyxTQUFTLElBQUksQ0FBQyxLQVVJO1FBQ2QsSUFBSSxFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sS0FBYyxLQUFLLEVBQWQsS0FBSyxVQUFJLEtBQUssRUFBdEcsd0dBQThGLENBQVEsQ0FBQztRQUMzRyxPQUFPLDZDQUNILEtBQUssSUFDVCxTQUFTLEVBQUUsR0FBRyxTQUFTLElBQUUsRUFBRSxJQUFJLEVBQUUsSUFBRSxJQUFJLENBQUEsQ0FBQyxDQUFBLFVBQVUsR0FBQyxFQUFFLENBQUEsQ0FBQyxDQUFBLEVBQUUsSUFBSSxFQUFFLElBQUUsSUFBSSxDQUFBLENBQUMsQ0FBQSxVQUFVLEdBQUMsRUFBRSxDQUFBLENBQUMsQ0FBQSxFQUFFLEVBQUUsRUFDdkYsS0FBSyxFQUFFLFNBQVMsQ0FBQSxDQUFDLENBQUE7Z0JBQ2IsT0FBTyxFQUFDLE1BQU07Z0JBQ2QsUUFBUSxFQUFDLElBQUk7Z0JBQ2IsYUFBYSxFQUFDLFNBQVM7Z0JBQ3ZCLFVBQVUsRUFBQyxVQUFVO2dCQUNyQixNQUFNLEVBQUMsT0FBTyxJQUFFLElBQUksQ0FBQSxDQUFDLENBQUEsT0FBTyxHQUFDLENBQUMsR0FBQyxJQUFJLENBQUEsQ0FBQyxDQUFBLFNBQVM7YUFDaEQsQ0FBQSxDQUFDLENBQUEsRUFDRCxLQUNILFFBQVEsQ0FBTyxDQUFBO0lBQ2pCLENBQUM7SUFFRCxJQUFJLEdBQUcsR0FBRyxLQUFtQixDQUFDO0lBQzlCLElBQUksR0FBRyxHQUFHLEtBQW1CLENBQUM7SUFDOUIsSUFBSSxHQUFHLEdBQUcsS0FBbUIsQ0FBQztJQUM5QixJQUFJLEdBQUcsR0FBRyxLQUFtQixDQUFDO0lBQzlCLElBQUksR0FBRyxHQUFHLEtBQW1CLENBQUM7SUFFOUIsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFBO0lBRXBCOzs7OztNQUtFO0lBQ0YsU0FBUyxvQkFBb0IsQ0FBdUMsQ0FBRyxFQUFFLE1BQW9CLEVBQUUsWUFBYztRQUN6RyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQztZQUNoQixvR0FBb0c7WUFDcEcsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNiLENBQUMsQ0FBQyxZQUFZLENBQUE7SUFDbEIsQ0FBQztJQUVELFNBQVMsb0JBQW9CLENBQUMsS0FBcUQ7UUFDL0UsTUFBTSxTQUFTLEdBQUMsRUFBVyxDQUFDO1FBQzVCLE9BQU8sb0JBQUMsb0JBQW9CLElBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsR0FBRyxDQUFDO0lBQ25HLENBQUM7SUFFRCxTQUFTLFVBQVUsQ0FBQyxRQUF5QixFQUFFLEdBQW1DO1FBQzlFLElBQUcsUUFBUSxJQUFJLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNqQyxJQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUNsQyxPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFJLHdCQUF3QixHQUFvQixJQUFJLENBQUM7SUFFckQsU0FBUyxXQUFXLENBQUMsRUFBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQWlFO1FBQ25ILElBQUksaUJBQWlCLEdBQUMsR0FBRSxFQUFFO1lBQ3RCLElBQUEsa0NBQWMsRUFBQyw4Q0FBMEIsRUFBRSxFQUFDLFNBQVMsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQTtRQUNoRyxDQUFDLENBQUM7UUFDRixPQUFPLDZCQUFLLFNBQVMsRUFBQyxjQUFjO1lBQ2hDLG9CQUFDLE1BQU0sSUFDSCxFQUFFLEVBQUUsRUFBRSxpQkFDTyxRQUFRLGtCQUNQLFdBQVcsRUFDekIsT0FBTyxFQUFDLFVBQVUsRUFDbEIsU0FBUyxFQUFDLGtDQUFrQyxFQUM1QyxPQUFPLEVBQUUsaUJBQWlCO2dCQUUxQixvQkFBQyxxQkFBSSxDQUFDLGFBQWEsT0FBRSxDQUNoQixDQUNQLENBQUE7SUFDVixDQUFDO0lBRUQsU0FBUyxlQUFlLENBQUMsRUFBQyxTQUFTLEVBQUMsT0FBTyxFQUFxRDtRQUM1RixPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUEsQ0FBQztZQUNuQiw2QkFBSyxTQUFTLEVBQUMsTUFBTTtnQkFDaEIsT0FBTyxDQUFBLENBQUMsQ0FBQSw4QkFBTSxTQUFTLEVBQUMsU0FBUztvQkFBRSxPQUFPO3dCQUFTLENBQUEsQ0FBQyxDQUFBLElBQUk7Z0JBQ3pELG9CQUFDLHFCQUFJLENBQUMsWUFBWSxPQUFHO2dCQUFBLGtDQUFPLFNBQVMsQ0FBQyxLQUFLLENBQVEsQ0FDakQ7WUFDVixDQUFDLENBQUEsSUFBSSxDQUFBO0lBQ1QsQ0FBQztJQUVELFNBQVMsZ0JBQWdCLENBQUMsS0FBb0g7UUFDMUksTUFBTSxFQUFDLFNBQVMsRUFBQyxHQUFHLEtBQUssQ0FBQztRQUMxQixNQUFNLFFBQVEsR0FBRyxJQUFBLHlCQUFXLEdBQUUsQ0FBQztRQUMvQixJQUFJLGVBQWUsR0FBRyxJQUFBLHlCQUFXLEVBQUMsQ0FBQyxLQUFlLEVBQUMsRUFBRSxDQUFBLEtBQUssQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDckYsSUFBSSxXQUFXLEdBQThDLENBQU8sS0FBSyxFQUFDLEVBQUU7O1lBQ3hFLElBQUksU0FBUyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBcUIsRUFBRSxRQUFRLENBQUEsRUFBRSxDQUFBLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUUsQ0FBQztZQUNqTSxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDckQsU0FBUyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBQyxJQUFJLENBQUMsQ0FBQztZQUM5QyxJQUFHLHdCQUF3QixFQUFDO2dCQUN4Qix3QkFBd0IsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdELHdCQUF3QixHQUFHLElBQUksQ0FBQzthQUNuQztZQUNELElBQUksRUFBQyxjQUFjLEVBQUUsaUJBQWlCLEVBQUMsR0FBRyxJQUFBLGtDQUFjLEVBQUMsOENBQTBCLEVBQUUsRUFBQyxTQUFTLEVBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUMsS0FBSyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7WUFDaEssSUFBRyxDQUFDLGNBQWMsRUFBQztnQkFDZixTQUFTLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFDLEtBQUssSUFBRSxJQUFJLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFDLENBQUM7Z0JBQy9ELElBQUcsS0FBSyxJQUFFLElBQUksRUFBQztvQkFDWCx3QkFBd0IsR0FBQyxTQUFTLENBQUM7aUJBQ3RDO2FBQ0o7aUJBQUk7Z0JBQ0QsSUFBRyxpQkFBaUIsSUFBSSxlQUFlLEVBQUM7b0JBQ3BDLElBQUksVUFBVSxHQUFHLE1BQUMsS0FBSyxDQUFDLE1BQXNCLDBDQUFFLEtBQUssQ0FBQztvQkFDdEQsSUFBRyxVQUFVO3dCQUFFLFVBQVUsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO29CQUMxQyxNQUFNLElBQUEsb0JBQUssRUFBQyxjQUFjLENBQUMsQ0FBQztvQkFDNUIsSUFBRyxVQUFVO3dCQUFFLFVBQVUsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO29CQUN6QyxNQUFNLElBQUEsb0JBQUssRUFBQyxjQUFjLENBQUMsQ0FBQztvQkFDNUIsSUFBRyxVQUFVO3dCQUFFLFVBQVUsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO29CQUMxQyxNQUFNLElBQUEsb0JBQUssRUFBQyxjQUFjLENBQUMsQ0FBQztvQkFDNUIsSUFBRyxVQUFVO3dCQUFFLFVBQVUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO29CQUNyQywwREFBMEQ7b0JBQzFELENBQUMsQ0FBQSxNQUFBLFNBQVMsQ0FBQyxRQUFRLDBDQUFFLFFBQVEsS0FBSSxJQUFJLENBQUMsQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFBLENBQUMsQ0FBQSx5QkFBeUIsQ0FBQyxNQUFBLE1BQUEsU0FBUyxDQUFDLFFBQVEsMENBQUUsUUFBUSxtQ0FBSSxpQkFBaUIsQ0FBQyxDQUFDO2lCQUM1SDthQUNKO1FBQ0wsQ0FBQyxDQUFBLENBQUM7UUFDRixPQUFPLG9CQUFDLElBQUksSUFBQyxTQUFTLEVBQUMsUUFBUTtZQUMxQixLQUFLLENBQUMsY0FBYyxDQUFBLENBQUMsQ0FBQSxvQkFBQyxXQUFXLElBQzlCLEVBQUUsRUFBRSxjQUFjLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFdBQVcsU0FBUyxFQUM5RCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFDbEIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQ3hCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxHQUM1QixDQUFBLENBQUMsQ0FBQSxJQUFJO1lBQ1gsb0JBQUMsTUFBTSxJQUNILEVBQUUsRUFBRSxjQUFjLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxpQkFDMUMsS0FBSyxDQUFDLFFBQVEsa0JBQ2IsS0FBSyxDQUFDLFdBQVcsRUFDL0IsT0FBTyxFQUFDLFVBQVUsRUFDbEIsU0FBUyxFQUFDLHFDQUFxQyxFQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUNwQixRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUVaLG9CQUFDLElBQUksSUFBQyxTQUFTLFFBQUMsSUFBSSxFQUFDLFFBQVE7b0JBQ3pCLG9CQUFDLElBQUksSUFBQyxTQUFTLEVBQUMsSUFBSSxJQUNmLFNBQVMsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FDckM7b0JBQ1Asb0JBQUMsSUFBSSxJQUFDLFNBQVMsRUFBQyxjQUFjO3dCQUMxQixvQkFBQyxVQUFVLGlCQUFZLFNBQVMsQ0FBQyxJQUFJLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQSxDQUFDLENBQUEsU0FBUyxDQUFDLElBQUksS0FBRyxLQUFLLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQSxDQUFDLENBQUEsS0FBSyxDQUFDLElBQUksQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFBLENBQUMsQ0FBQSxJQUFJLElBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBYzt3QkFDM0ksU0FBUyxDQUFDLFVBQVUsQ0FBQSxDQUFDOzRCQUNsQixvQkFBQyxVQUFVLElBQUMsU0FBUyxFQUFDLFlBQVksSUFBRSxjQUFjLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFjOzRCQUMxRixDQUFDLENBQUEsSUFBSSxDQUNGLENBQ0osQ0FDRjtZQUNULG9CQUFDLGVBQWUsSUFBQyxTQUFTLEVBQUUsU0FBUyxHQUFHLENBQ3JDLENBQUE7SUFDWCxDQUFDO0lBUUQsU0FBUyxjQUFjLENBQUMsS0FBNEc7UUFDaEksT0FBTyxvQkFBQyxrQkFBa0IsSUFDdEIsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixFQUNoRCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFDbEIsSUFBSSxFQUFFLEtBQUssRUFDWCxtQkFBbUIsRUFBRSxLQUFLLENBQUMsbUJBQW1CLEdBQ2hELENBQUE7SUFDTixDQUFDO0lBRUQsU0FBUyxxQkFBcUIsQ0FBQyxRQUFrRDtRQUM3RSxPQUFPLENBQ0gsVUFBcUIsRUFBRSxZQUEwRCxFQUFFLFFBQXVCLEVBQzdHLEVBQUU7O1lBQ0MsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuRixJQUFJLFdBQVcsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDO1lBQ3hDLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEYsSUFBSSxVQUFVLEdBQUMsV0FBVyxJQUFFLElBQUksSUFBSSxXQUFXLElBQUUsSUFBSSxDQUFBLENBQUMsQ0FBQSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUEsQ0FBQyxDQUFBLFVBQVUsQ0FBQSxDQUFDLENBQUEsUUFBUSxDQUFDLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQztZQUN6RyxJQUFJLE1BQXFCLENBQUM7WUFDMUIsSUFBRyxRQUFRLENBQUMsT0FBTyxFQUFDO2dCQUNoQixNQUFNLEdBQUMsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLE1BQU8sQ0FBQzthQUMvQjtpQkFBSTtnQkFDRCxJQUFJLGFBQWEsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUEsRUFBRSxDQUFBLENBQUMsQ0FBQyxRQUFRLElBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBQyxFQUFFO29CQUNqRixJQUFJLEVBQUUsR0FBQyxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUcsRUFBRSxDQUFDLFFBQVMsQ0FBRSxDQUFBO29CQUNuQyxPQUFPO3dCQUNILFdBQVcsRUFBRSxFQUFFLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxNQUFNLElBQUUsUUFBUTt3QkFDbEQsWUFBWSxFQUFFLEVBQUUsQ0FBQyxZQUFZLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxJQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFFLDBCQUEwQixDQUFDO3FCQUNwRyxDQUFBO2dCQUNMLENBQUMsRUFBRSxFQUFDLFdBQVcsRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFDLElBQUksRUFBQyxDQUFDLENBQUM7Z0JBQzNDLE1BQU0sR0FBQyxhQUFhLENBQUMsV0FBVyxDQUFBLENBQUMsQ0FBQSxRQUFRLENBQUEsQ0FBQyxDQUFBLGFBQWEsQ0FBQyxZQUFZLENBQUEsQ0FBQyxDQUFBLFVBQVUsQ0FBQSxDQUFDLENBQUEsWUFBWSxDQUFBO2FBQy9GO1lBQ0QsSUFBQSxtQ0FBZSxFQUFDLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN2RCxJQUFBLG1DQUFlLEVBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNyRCxJQUFBLG1DQUFlLEVBQUMsUUFBUSxFQUFFLG1CQUFtQixFQUFFLENBQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLFlBQVksRUFBQSxDQUFDLENBQUEsSUFBSSxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUMsQ0FBQztZQUNwRixJQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUM7Z0JBQ2pCLElBQUksUUFBUSxHQUF1QixLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLDhCQUE4QixRQUFRLENBQUMsUUFBUSxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEosSUFBSSxjQUFnQyxDQUFDO2dCQUNyQyxLQUFJLGNBQWMsSUFBSSxRQUFRLEVBQUM7b0JBQzNCLElBQUksV0FBVyxHQUFHLGNBQWMsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQzlELElBQUEsbUNBQWUsRUFBQyxjQUFjLEVBQUUscUJBQXFCLEVBQUUsV0FBVyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtpQkFDbEc7Z0JBQ0QsSUFBSSxjQUFjLEdBQXNCLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDM0csSUFBSSxhQUE4QixDQUFDO2dCQUNuQyxLQUFJLGFBQWEsSUFBSSxjQUFjLEVBQUM7b0JBQ2hDLElBQUEsb0NBQWdCLEVBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxXQUFXLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2lCQUMvRjtnQkFDRCxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGdCQUFnQixHQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUUsQ0FBQztnQkFDN0UsSUFBQSxtQ0FBZSxFQUFDLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxXQUFXLElBQUksQ0FBQyxNQUFBLFFBQVEsQ0FBQyxXQUFXLG1DQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7YUFDL0c7UUFDTCxDQUFDLENBQUE7SUFDTCxDQUFDO0lBRUQsU0FBUyx3QkFBd0IsQ0FBQyxLQUEyQzs7UUFDekUsTUFBTSxFQUFDLE9BQU8sRUFBQyxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLEVBQUUsR0FBRyxXQUFXLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQyxnR0FBZ0c7UUFDaEcsSUFBSSxNQUFNLEdBQUcsQ0FBQSxNQUFBLE9BQU8sQ0FBQyxRQUFRLDBDQUFFLGFBQWEsRUFBQSxDQUFDLENBQUEsRUFBQyxhQUFhLEVBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUMsQ0FBQSxDQUFDLENBQUEsRUFBRSxDQUFDO1FBQy9GLElBQUEscUNBQWlCLEVBQUM7WUFDZCxFQUFFO1lBQ0YsTUFBTSxFQUFDLElBQUk7WUFDWCxHQUFHLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDO1NBQ3RDLENBQUMsQ0FBQTtRQUNGLE9BQU8sb0JBQUMsa0JBQWtCLElBQ3RCLEVBQUUsRUFBRSxFQUFFLEVBQ04sU0FBUyxFQUFFLE9BQU8sRUFDbEIsb0JBQW9CLEVBQUMsU0FBUyxFQUM5QixLQUFLLEVBQUUsTUFBTTtZQUViLG9CQUFDLG9CQUFvQixJQUNqQixTQUFTLEVBQUUsT0FBTyxFQUNsQixVQUFVLEVBQUUsSUFBSSxFQUNoQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksS0FBRyxLQUFLLEVBQzFCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxHQUNwQjtZQUNGLG9CQUFDLGNBQWMsSUFDWCxvQkFBb0IsRUFBRSxPQUFPLEVBQzdCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUNsQixtQkFBbUIsRUFBRSxNQUFBLEtBQUssQ0FBQyxPQUFPLENBQUMsbUJBQW1CLG1DQUFFLFlBQVksR0FDdEUsQ0FDZSxDQUFBO0lBQ3pCLENBQUM7SUFJRCxTQUFTLG9CQUFvQixDQUFDLEtBQXVGOztRQUNqSCxJQUFJLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxHQUFHLEtBQUssQ0FBQztRQUMvQixJQUFJLGdCQUFnQixHQUFHLElBQUEseUJBQVcsRUFBQyxDQUFDLEtBQWUsRUFBQyxFQUFFLENBQUEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQ3RGLElBQUksaUJBQWlCLEdBQUMsR0FBRSxFQUFFO1lBQ3RCLElBQUEsa0NBQWMsRUFBQyw4Q0FBMEIsRUFBRSxFQUFDLFNBQVMsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFDLFNBQVMsQ0FBQyxRQUFzQixFQUFFLEtBQUssRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFBO1FBQ3hILENBQUMsQ0FBQztRQUNGLElBQUksTUFBTSxHQUFHLE1BQUEsU0FBUyxDQUFDLE1BQU0sbUNBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQztRQUNyRCxpR0FBaUc7UUFDakcsSUFBSSxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztRQUNwQyxJQUFJLEVBQUUsR0FBRyxVQUFVLFNBQVMsQ0FBQyxRQUFRLElBQUUsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdELElBQUksVUFBVSxHQUFHLFdBQVcsR0FBQyxFQUFFLENBQUM7UUFDaEMsT0FBTyw2QkFDSCxTQUFTLEVBQUMsWUFBWSxlQUNYLEtBQUssQ0FBQyxJQUFJLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQSxDQUFDLENBQUEsSUFBSTtZQUUvQiw2QkFBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFFLEdBQUcsU0FBUyxDQUFDLFNBQVMsTUFBTSxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQ25GLE9BQU8sRUFBRSxHQUFFLEVBQUU7b0JBQ1QsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDOUMsR0FBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsR0FBQyxNQUFNLENBQUMsR0FBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO29CQUNoRyw0REFBNEQ7b0JBQzVELElBQUEsa0NBQWMsRUFBQyxzQ0FBa0IsRUFBRSxFQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsU0FBdUIsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO2dCQUM3RixDQUFDO2dCQUVELDZCQUFLLFNBQVMsRUFBQyxJQUFJLElBQ2QsTUFBTSxDQUNMO2dCQUNMLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBRSxPQUFPLElBQUUsU0FBUyxDQUFDLE9BQU8sSUFBRSxVQUFVLENBQUMsQ0FBQSxDQUFDLENBQUEsb0JBQUMsS0FBSyxJQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsZ0JBQWdCLElBQUksUUFBUSxHQUFHLENBQUEsQ0FBQyxDQUFBLElBQUk7Z0JBQ2pMLDZCQUFLLFNBQVMsRUFBQyxtQkFBbUIsRUFBQyxFQUFFLEVBQUUsVUFBVSxvQkFBaUIsR0FBRztvQkFDaEUsU0FBUyxDQUFDLFFBQVEsQ0FBQSxDQUFDLENBQUE7d0JBQUssb0JBQUMsTUFBTSxJQUM1QixFQUFFLEVBQUUsa0JBQWtCLEdBQUMsU0FBUyxDQUFDLFFBQVEsaUJBQzVCLFNBQVMsQ0FBQyxRQUFRLEVBQy9CLE9BQU8sRUFBQyxVQUFVLEVBQ2xCLFNBQVMsRUFBQyx1QkFBdUIsRUFDakMsT0FBTyxFQUFFLGlCQUFpQjs0QkFFMUIsb0JBQUMscUJBQUksQ0FBQyxhQUFhLE9BQUUsQ0FDaEIsQ0FBTSxDQUFBLENBQUMsQ0FBQSxJQUFJO29CQUNuQixTQUFTLENBQUMsUUFBUSxDQUFBLENBQUMsQ0FBQSxDQUFDLEtBQUssQ0FBQSxFQUFFLENBQUE7d0JBQUssb0JBQUMsTUFBTSxJQUNwQyxFQUFFLEVBQUUsZ0JBQWdCLEdBQUMsU0FBUyxDQUFDLFFBQVEsaUJBQzFCLFNBQVMsQ0FBQyxRQUFRLEVBQy9CLE9BQU8sRUFBQyxVQUFVLEVBQ2xCLFNBQVMsRUFBQyxxQkFBcUIsRUFDL0IsT0FBTyxFQUFFLEdBQUUsRUFBRTtnQ0FDVCxJQUFBLGtDQUFjLEVBQUMsOENBQTBCLEVBQUUsRUFBQyxTQUFTLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBQyxTQUFTLENBQUMsUUFBc0IsRUFBRSxLQUFLLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQTs0QkFDekgsQ0FBQyxZQUdJLENBQU0sQ0FBQyxDQUFDLE1BQUEsU0FBUyxDQUFDLFdBQVcsbUNBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUM5QyxDQUNKO1lBQ04sNkJBQUssU0FBUyxFQUFDLFlBQVk7Z0JBQ3ZCLDZCQUFLLFNBQVMsRUFBQyxRQUFRLElBQUUsY0FBYyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBTztnQkFDL0QsU0FBUyxDQUFDLFVBQVUsQ0FBQSxDQUFDO29CQUNsQiw2QkFBSyxTQUFTLEVBQUMsWUFBWSxJQUN0QixTQUFTLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxLQUFLLElBQUUsUUFBUSxDQUFBLENBQUM7d0JBQzFDLG9CQUFDLGVBQWUsSUFBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHO3dCQUMzRixDQUFDOzRCQUNHLGNBQWMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBRXRDO29CQUNWLENBQUMsQ0FBQSxJQUFJO2dCQUNMLDhDQUFtQixJQUFJO29CQUNuQiw2Q0FBa0IsVUFBVSxJQUFFLFNBQVMsQ0FBQyxRQUFRLENBQVE7b0JBQ3ZELFNBQVMsQ0FBQyxPQUFPLElBQUksU0FBUyxDQUFDLE9BQU8sSUFBRSxVQUFVLElBQUksU0FBUyxDQUFDLE9BQU8sSUFBRSxPQUFPLENBQUEsQ0FBQzt3QkFDOUUsNkNBQWtCLFNBQVMsSUFBRSxTQUFTLENBQUMsT0FBTyxDQUFRO3dCQUMxRCxDQUFDLENBQUEsSUFBSTtvQkFFRCxTQUFTLENBQUMsUUFBUSxDQUFBLENBQUMsQ0FBQSw2Q0FBa0IsVUFBVSxlQUFnQixDQUFBLENBQUMsQ0FBQSxJQUFJO29CQUV2RSxTQUFTLENBQUEsQ0FBQyxDQUFBLDZDQUFrQixXQUFXLGdCQUFpQixDQUFBLENBQUMsQ0FBQSxJQUFJO29CQUM3RCxTQUFTLENBQUMsZ0JBQWdCLENBQUEsQ0FBQyxDQUFBLDZDQUFrQixRQUFRLGFBQWMsQ0FBQSxDQUFDLENBQUEsSUFBSTtvQkFDeEUsU0FBUyxDQUFDLG1CQUFtQixDQUFBLENBQUMsQ0FBQSw2Q0FBa0IscUJBQXFCOzt3QkFBWSxTQUFTLENBQUMsbUJBQW1CLENBQVEsQ0FBQSxDQUFDLENBQUEsSUFBSTtvQkFFeEgsQ0FBQSxNQUFBLFNBQVMsQ0FBQyxRQUFRLDBDQUFFLE9BQU8sRUFBQSxDQUFDLENBQUEsNkNBQWtCLG1CQUFtQjtxQ0FBVyxNQUFBLFNBQVMsQ0FBQyxRQUFROzJCQUFFLE9BQU8sQ0FBUSxDQUFBLENBQUMsQ0FBQSxJQUFJLENBRXRILENBQ0osQ0FDSixDQUFBO0lBQ1YsQ0FBQztJQUVELFNBQVMsaUNBQWlDLENBQUMsS0FBOEM7UUFDckYsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxJQUFBLGdCQUFRLEVBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUN0RCxNQUFNLFFBQVEsR0FBRyxJQUFBLHlCQUFXLEdBQUUsQ0FBQztRQUMvQixNQUFNLFdBQVcsR0FBRyxHQUFHLEVBQUU7WUFDckIsUUFBUSxDQUFDLDhCQUFXLENBQUMsMEJBQTBCLENBQUMsRUFBQyxLQUFLLEVBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JGLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQixDQUFDLENBQUE7UUFDRCxPQUFPLG9CQUFDLGNBQU8sSUFDUCxFQUFFLEVBQUUsbUJBQW1CLEVBQ3ZCLElBQUksRUFBRSxJQUFJLEVBQ1YsT0FBTyxFQUFFLFdBQVcsRUFDcEIsWUFBWSxFQUFFO2dCQUNWLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixVQUFVLEVBQUUsUUFBUTthQUN2QixFQUNELGVBQWUsRUFBRTtnQkFDYixRQUFRLEVBQUUsS0FBSztnQkFDZixVQUFVLEVBQUUsTUFBTTthQUNyQjtZQUVELG9CQUFDLFVBQVUsNEZBQTBGO1lBQ3JHLDZCQUFLLFNBQVMsRUFBQyxrQkFBa0I7Z0JBQzdCLG9CQUFDLE1BQU0sSUFBQyxLQUFLLEVBQUMsV0FBVyxFQUFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFFLEdBQUUsRUFBRTt3QkFDdEQsSUFBRyxLQUFLLENBQUMsY0FBYyxFQUFDOzRCQUNwQixJQUFBLGtDQUFjLEVBQUMsOENBQTBCLEVBQUUsRUFBQyxLQUFLLEVBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQTt5QkFDakg7d0JBQ0QsV0FBVyxFQUFFLENBQUM7b0JBQ2xCLENBQUMsdUJBQTJCO2dCQUM1QixvQkFBQyxNQUFNLElBQUMsS0FBSyxFQUFDLFNBQVMsRUFBQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBRSxXQUFXLHdCQUE0QixDQUN6RixDQUNBLENBQUM7SUFDbkIsQ0FBQztJQUVELFNBQVMsdUJBQXVCLENBQUMsUUFBcUI7UUFDbEQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVELFNBQVMseUJBQXlCLENBQUMsaUJBQWtDO1FBQ2pFLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxFQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUMsR0FBRyxJQUFBLDRDQUF3QixFQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDekYsSUFBRyxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsR0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxlQUFlLENBQUMsRUFBQztZQUN0RCxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBQyxDQUFDLEVBQUUsUUFBUSxFQUFDLFFBQVEsRUFBQyxDQUFDLENBQUM7U0FDckQ7UUFDRCxxQkFBcUIsYUFBckIscUJBQXFCLHVCQUFyQixxQkFBcUIsQ0FBRSxLQUFLLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsU0FBUyxLQUFLLENBQUMsS0FBMEo7O1FBQ3JLLElBQUksRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztRQUN4QyxJQUFJLEVBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFDLEdBQUcsSUFBQSx5QkFBVyxFQUFDLENBQUMsS0FBZSxFQUFDLEVBQUUsQ0FBQSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUMsRUFBRSxDQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RyxvQ0FBb0M7WUFDcEMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUN0QixpREFBaUQ7UUFDakQsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRyxJQUFBLGdCQUFRLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsb0JBQW9CO1FBQ3BCLDRCQUE0QjtRQUM1QixxQkFBcUI7UUFDckIsTUFBTSxVQUFVLEdBQUc7WUFDZixTQUFTLEVBQUUsUUFBUTtTQUN0QixDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQUMsQ0FBQyxVQUE2RCxFQUFDLEVBQUU7O1lBQzVFLElBQUksRUFBQyxpQkFBaUIsRUFBQyxHQUFHLElBQUEsa0NBQWMsRUFBQyw4Q0FBMEIsRUFBRSxFQUFDLEtBQUssRUFBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDO1lBQzVJLElBQUcsaUJBQWlCLElBQUksVUFBVSxFQUFDO2dCQUMvQiwwREFBMEQ7Z0JBQzFELENBQUMsQ0FBQSxNQUFBLFFBQVEsQ0FBQyxRQUFRLDBDQUFFLFFBQVEsS0FBSSxJQUFJLENBQUMsQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFBLENBQUMsQ0FBQSx5QkFBeUIsQ0FBQyxNQUFBLE1BQUEsUUFBUSxDQUFDLFFBQVEsMENBQUUsUUFBUSxtQ0FBSSxpQkFBaUIsQ0FBQyxDQUFDO2FBQzFIO1FBQ0wsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxlQUFlLEdBQUcsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDdkQsT0FBTyw2QkFBSyxTQUFTLEVBQUMsT0FBTyxzQkFBbUIsZUFBZSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxJQUFFLFFBQVEsQ0FBQSxDQUFDLENBQUEsRUFBQyxPQUFPLEVBQUMsTUFBTSxFQUFDLENBQUEsQ0FBQyxDQUFBLEtBQUssQ0FBQyxNQUFNLENBQUEsQ0FBQyxDQUFBLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxDQUFBLENBQUMsQ0FBQSxTQUFTO1lBQ3ZKLElBQUksQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFBLENBQUMsQ0FBQSxvQkFBQyxXQUFXLElBQ25CLEVBQUUsRUFBRSxrQkFBa0IsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUN6QyxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFDM0IsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEdBQ3BCO1lBQ0YsNkJBQUssU0FBUyxFQUFDLGFBQWE7Z0JBQ3hCLG9CQUFDLFNBQVMsSUFDTixFQUFFLEVBQUUsT0FBTyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQzlCLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLFNBQVMsRUFBQyxVQUFVO29CQUNwQixpQ0FBaUM7b0JBQ2pDLFNBQVMsRUFBRSxJQUFJLEVBQ2YsVUFBVSxFQUFFLFVBQVUsRUFDdEIsSUFBSSxFQUFFLE1BQUEsUUFBUSxDQUFDLG1CQUFtQixtQ0FBRSxJQUFBLHdDQUF1QixFQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFDN0UsU0FBUyxFQUFFLENBQUMsS0FBeUIsRUFBQyxFQUFFO3dCQUNwQyxJQUFJLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUE7d0JBQzNELFVBQVUsR0FBRyxPQUFPLElBQUksQ0FBQyxlQUFlLElBQUksZ0JBQWdCLENBQUMsQ0FBQzt3QkFDOUQsSUFBRyxPQUFPLEVBQUM7NEJBQ1AsSUFBRyxLQUFLLENBQUMsTUFBTSxZQUFZLFdBQVcsRUFBQztnQ0FDbkMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQzs2QkFDdkI7NEJBQ0QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO3lCQUMxQjtvQkFDTCxDQUFDLEVBQ0QsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQ3BDLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUMsRUFBRTs7d0JBQ3BCLElBQUcsTUFBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsYUFBYSwwQ0FBRSxZQUFZLENBQUMsaUJBQWlCLENBQUMsRUFBQzs0QkFDckQsVUFBVSxHQUFHLElBQUksQ0FBQzt5QkFDckI7d0JBQ0QsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNoQixXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7b0JBQ3RCLENBQUMsR0FDSCxDQUNBO1lBQ0wsUUFBUSxJQUFJLElBQUksQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFBLENBQUM7Z0JBQ25CLDZCQUFLLFNBQVMsRUFBQyx1QkFBdUI7b0JBQ2xDLG9CQUFDLE1BQU0sSUFBQyxPQUFPLEVBQUUsUUFBUSxDQUFBLENBQUMsQ0FBQSxXQUFXLENBQUEsQ0FBQyxDQUFBLFVBQVUsRUFBRSxJQUFJLEVBQUMsT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLENBQUEsQ0FBQyxDQUFBLFNBQVMsQ0FBQSxDQUFDLENBQUEsU0FBUyxxQkFDN0UsUUFBUSxDQUFDLFFBQVEsRUFDbEMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUNaLE9BQU8sRUFBRSxHQUFFLEVBQUU7NEJBQ1QsUUFBUSxDQUFDLHlEQUFxQyxDQUFDLENBQUM7NEJBQ2hELFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTt3QkFDdEIsQ0FBQzt3QkFDSixvQkFBQyxxQkFBSSxDQUFDLEtBQUssT0FBRSxDQUFTLENBQ3JCLENBRVIsQ0FBQTtJQUNWLENBQUM7SUFPRCxTQUFTLGtCQUFrQixDQUN2QixFQUFDLG9CQUFvQixFQUFFLEtBQUssRUFBRyxJQUFJLEVBQUUsbUJBQW1CLEVBQzREO1FBRXBILE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBYSxFQUFFLGtCQUErQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQW9CLEVBQUMsRUFBRSxDQUFBLENBQ3JJLGtCQUFrQixJQUFJLElBQUksSUFBSSxrQkFBa0IsSUFBSSxXQUFXLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNyRiw2QkFBSyxTQUFTLEVBQUMsbUJBQW1CLEVBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxZQUFZO2dCQUM1RCxvQkFBQyxrQkFBa0IsSUFDZixRQUFRLEVBQUUsV0FBVyxFQUNyQixLQUFLLEVBQUUsS0FBSyxFQUNaLG9CQUFvQixFQUFDLFVBQVUsR0FDakMsQ0FDQSxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQ2QsQ0FBQyxDQUFBO1FBQ0YsT0FBTyw2QkFBSyxTQUFTLEVBQUMsV0FBVztZQUN6Qiw2QkFBSyxTQUFTLEVBQUMsVUFBVSwwQkFBdUIsbUJBQW1CLGFBQW5CLG1CQUFtQixjQUFuQixtQkFBbUIsR0FBRSxVQUFVLElBQzlFLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFhLEVBQUUsQ0FBUSxFQUFDLEVBQUUsQ0FDNUQsb0JBQUMsSUFBSSxJQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLElBQUksNEJBQ2QsTUFBTSxDQUFDLGdCQUFnQixDQUFBLENBQUMsQ0FBQSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQSxDQUFDLENBQUEsYUFBYSxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUMsQ0FBQSxDQUFDLENBQUEsSUFBSTtnQkFFakcsb0JBQUMsZ0JBQWdCLElBQ2IsU0FBUyxFQUFFLE1BQU0sRUFDakIsUUFBUSxFQUFFLG9CQUFvQixDQUFDLFFBQVEsRUFDdkMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQzdCLEtBQUssRUFBRSxLQUFLLEVBQ1osSUFBSSxFQUFFLElBQUksRUFDVixjQUFjLEVBQUUsQ0FBQyxJQUFFLENBQUMsSUFBSSxtQkFBbUIsSUFBRSxZQUFZLEdBQzNEO2dCQUNELG1CQUFtQixJQUFFLFlBQVksQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFBLENBQUMsQ0FBQSxjQUFjLENBQUMsTUFBTSxFQUFDLElBQUksQ0FBQyxDQUNoRSxDQUNWLENBQ0M7WUFDTCxtQkFBbUIsSUFBRSxZQUFZLENBQUEsQ0FBQyxDQUFBLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFhLEVBQUMsRUFBRSxDQUNwRixjQUFjLENBQUMsTUFBTSxFQUFDLElBQUksQ0FBQyxDQUM5QixDQUFBLENBQUMsQ0FBQSxJQUFJLENBQ0osQ0FBQTtJQUNWLENBQUM7SUFFRCxNQUFNLGVBQWUsR0FBQztRQUNsQixDQUFDLEVBQUUsWUFBWTtRQUNmLENBQUMsRUFBRSxRQUFRO1FBQ1gsQ0FBQyxFQUFFLFVBQVU7UUFDYixFQUFFLEVBQUUsbUJBQW1CO1FBQ3ZCLENBQUMsRUFBRSxRQUFRO1FBQ1gsRUFBRSxFQUFFLFVBQVU7UUFDZCxNQUFNLEVBQUUsUUFBUTtRQUNoQixJQUFJLEVBQUUsY0FBYztRQUNwQixFQUFFLEVBQUUsaUJBQWlCO1FBQ3JCLEtBQUssRUFBRSxvQkFBb0I7S0FDOUIsQ0FBQTtJQUVELFNBQVMsa0JBQWtCLENBQUMsS0FPM0I7O1FBQ0csT0FBTyw2QkFDSCxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsRUFBRSxJQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQ3pFLFNBQVMsRUFBRSxhQUFhLGVBQWUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQ2hFLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUNaLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSywyQkFDSyxNQUFBLE1BQUEsS0FBSyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsbUNBQUUsS0FBSyxDQUFDLG9CQUFvQixtQ0FBRSxVQUFVLHNCQUNqRixLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFDN0MsS0FBSyxDQUFDLFFBQVEsQ0FBTyxDQUFBO0lBQzNCLENBQUM7SUFFRCxTQUFTLGtCQUFrQixDQUFDLEtBSTNCOztRQUNHLElBQUksRUFBQyxRQUFRLEVBQUMsR0FBRyxLQUFLLENBQUM7UUFDdkIsTUFBTSxRQUFRLEdBQUMsSUFBQSx5QkFBVyxHQUFFLENBQUM7UUFDN0IsSUFBSSxNQUFxQixDQUFDO1FBQzFCLElBQUksRUFBRSxHQUFHLFlBQVksUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQzVDLElBQUEscUNBQWlCLEVBQUM7WUFDZCxFQUFFO1lBQ0YsTUFBTSxFQUFDLElBQUk7WUFDWCxHQUFHLEVBQUUscUJBQXFCLENBQUMsUUFBUSxDQUFDO1NBQ3ZDLENBQUMsQ0FBQTtRQUNGLElBQUksS0FBSyxHQUFrQixFQUFFLENBQUE7UUFDN0IsSUFBRyxRQUFRLENBQUMsVUFBVSxJQUFJLE1BQU0sRUFBQztZQUM3QixLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztZQUN2QixLQUFLLENBQUMsbUJBQW1CLEdBQUcsZUFBZSxDQUFDO1NBQy9DO1FBQ0QsT0FBTyxvQkFBQyxrQkFBa0IsSUFDdEIsRUFBRSxFQUFFLEVBQUUsRUFDTixTQUFTLEVBQUUsUUFBUSxFQUNuQixLQUFLLEVBQUUsS0FBSyxxQkFDSyxRQUFRLENBQUMsT0FBTyxJQUFFLFVBQVUsc0JBQzNCLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQSxDQUFDLENBQUEsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUEsQ0FBQyxDQUFBLGFBQWEsQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFDLENBQUEsQ0FBQyxDQUFBLElBQUksRUFDckcsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLG9CQUFvQjtZQUdoRCxvQkFBQyxvQkFBb0IsSUFDakIsU0FBUyxFQUFFLFFBQVEsRUFDbkIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEtBQUcsS0FBSyxFQUMzQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssR0FDcEI7WUFDRiw2QkFBSyxTQUFTLEVBQUMsV0FBVyxJQUN0QixRQUFRLENBQUMsT0FBTyxJQUFFLE9BQU8sQ0FBQSxDQUFDLENBQUEsb0JBQUMsSUFBSSxJQUFDLFNBQVM7Z0JBQ3JDLG9CQUFDLGNBQWMsSUFDWCxvQkFBb0IsRUFBRSxRQUFRLEVBQzlCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUNsQixtQkFBbUIsRUFBRSxNQUFBLEtBQUssQ0FBQyxRQUFRLENBQUMsbUJBQW1CLG1DQUFFLFVBQVUsR0FDckUsQ0FDQyxDQUFBLENBQUM7Z0JBQ1IsUUFBUSxDQUFDLE9BQU8sSUFBRSxVQUFVLENBQUMsQ0FBQztvQkFDMUIsb0JBQUMsa0JBQWtCLElBQ2Ysb0JBQW9CLEVBQUUsUUFBUSxFQUM5QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFDbEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUNyQixtQkFBbUIsRUFBRSxNQUFBLFFBQVEsQ0FBQyxtQkFBbUIsbUNBQUUsVUFBVSxHQUMvRCxDQUFBLENBQUM7b0JBQ1AsUUFBUSxDQUFDLE9BQU8sSUFBRSxJQUFJLENBQUEsQ0FBQzt3QkFDbEIsUUFBUSxDQUFDLFVBQThDLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFDLEVBQUUsQ0FDM0UsY0FBYyxDQUFDLEtBQUssSUFBRSxJQUFJLENBQUEsQ0FBQzs0QkFDdkIsb0JBQUMsd0JBQXdCLElBQ3JCLEdBQUcsRUFBRSxjQUFjLENBQUMsWUFBWSxFQUNoQyxPQUFPLEVBQUUsY0FBYyxFQUN2QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssR0FDcEI7NEJBQ04sQ0FBQyxDQUFDLDZDQUE2QztnQ0FDM0Msb0JBQUMsc0JBQXNCLElBQ25CLEdBQUcsRUFBRSxjQUFjLENBQUMsWUFBWSxFQUNoQyxTQUFTLEVBQUUsY0FBYyxFQUN6QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssR0FDcEIsQ0FDVDt3QkFDTCxDQUFDOzRCQUNELENBQUMsQ0FBQyxjQUE2QixFQUFDLEVBQUUsQ0FDOUIsb0JBQUMsS0FBSyxJQUNGLFFBQVEsRUFBRSxjQUFjLENBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUEsQ0FBQyxDQUFBLEtBQUssRUFDN0MsUUFBUSxFQUFFLGNBQWMsRUFDeEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEdBQ3BCLENBQ0wsQ0FBQyxRQUFRLENBQUMsQ0FDUjtZQUNQLDZCQUFLLFNBQVMsRUFBQyxjQUFjO2dCQUN6QixvQkFBQyxlQUFlLElBQ1osU0FBUyxFQUFFLFFBQVEsRUFDbkIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLElBQUUsVUFBVSxDQUFBLENBQUMsQ0FBQSxDQUNsQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUEsRUFBRSxDQUFBLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDLENBQUEsdUJBQXVCLENBQUEsQ0FBQyxDQUFBLG9CQUFvQixDQUM5RixDQUFBLENBQUMsQ0FBQSxFQUFFLEdBQ04sQ0FDQSxDQUNXLENBQUE7SUFDekIsQ0FBQztJQUVELElBQUksOEJBQThCLEdBQUcsQ0FDakMsc0JBQXlELEVBQ3pELDJCQUF1RSxFQUN2RSxVQUF1QixFQUMxQixFQUFFO1FBQ0MsSUFBRywyQkFBMkIsSUFBSSwyQkFBMkIsQ0FBQyxVQUFVLENBQUMsRUFBQztZQUN0RSxPQUFPLENBQUMsMkJBQTJCLENBQUMsVUFBVSxDQUFDLENBQUMsdUJBQXVCLENBQUE7U0FDMUU7YUFBSTtZQUNELE9BQU8sQ0FBQyxDQUFDLENBQUMsc0JBQXNCLElBQUksc0JBQXNCLENBQUMsd0JBQXdCLElBQUksVUFBVSxDQUFDLENBQUE7U0FDckc7SUFDTCxDQUFDLENBQUE7SUFFRCxTQUFTLG9CQUFvQixDQUFDLENBQVksRUFBRSxlQUFnQyxFQUFFLFVBQXFCLEVBQUUsVUFBZ0IsRUFBRSxXQUFxRjtRQUN4TSxJQUFJLGFBQWEsR0FBRyxJQUFBLGdEQUE0QixFQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQzFGLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxRCxJQUFJLDBCQUEwQixHQUFHLENBQUMsSUFBQSxnQkFBTSxFQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFFLElBQUksQ0FBQyxHQUFHLElBQUEsZ0JBQU0sRUFBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQSxFQUFFO1FBQ25DLDBDQUEwQztRQUMxQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFjLEVBQUMsRUFBRSxDQUNoRCxjQUFjLENBQUMsVUFBVSxDQUFDLGVBQWUsS0FBSSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsZUFBZSxDQUFBLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFlBQTRCLENBQUMsQ0FDekosQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNmLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQSxFQUFFLENBQUEsQ0FDZCxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QixpQkFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFDLEtBQUssRUFBQyxVQUFVLEVBQUMsRUFBQztnQkFDeEIsaUJBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztnQkFDaEMsaUJBQUksQ0FBQyxHQUFHLENBQ0osSUFBQSxnQkFBTSxFQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBQyxFQUFFO29CQUMzRCxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFBO29CQUNyQixJQUFJLGdCQUFnQixtQ0FBTyxVQUFVLEtBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxHQUFDLENBQUM7b0JBQ2xFLElBQUksc0JBQXNCLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQSxDQUFDLENBQUEsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFBLDBDQUFzQixFQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQTtvQkFDbEosSUFBSSwyQkFBMkIsR0FBRyxVQUFVLENBQUMsMkJBQTJCLENBQUM7b0JBQ3pFLE9BQU8saUJBQUksQ0FBQyxHQUFHLENBQUMsRUFBQyxLQUFLLEVBQUMsY0FBYyxFQUFDLEVBQUU7d0JBQ3BDLGlCQUFJLENBQUMsR0FBRyxDQUFDLEVBQUMsS0FBSyxFQUFDLFlBQVksRUFBQyxFQUFDOzRCQUMxQixpQkFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFDLEtBQUssRUFBQyxXQUFXLEVBQUMsRUFBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7NEJBQzVDLEdBQUcsSUFBQSxnQkFBTSxFQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7aUNBQ2hDLE1BQU0sQ0FBQyxPQUFPLENBQUEsRUFBRSxDQUFBLE9BQU8sQ0FBQyxVQUFVLENBQUMsZUFBZSxJQUFJLE1BQU0sQ0FBQyxlQUFlLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQTRCLENBQUMsQ0FBQztpQ0FDeEosR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBQyxFQUFFO2dDQUN6QixJQUFJLEtBQUssbUNBQU8sZ0JBQWdCLEtBQUUsVUFBVSxHQUFDLENBQUM7Z0NBQzlDLElBQUksWUFBWSxHQUFHLFdBQVcsQ0FBQyxJQUFBLG9CQUFZLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQ0FDcEQsT0FBTyxZQUFZLENBQUMsQ0FBQyxDQUFDLGlCQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBQztvQ0FDOUIsNERBQTREO29DQUM1RCx5QkFBeUIsQ0FDckI7d0NBQ0ksS0FBSzt3Q0FDTCxHQUFHO3dDQUNILE1BQU0sRUFBRSxJQUFJLElBQUksSUFBQSxvQ0FBZ0IsRUFBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7d0NBQ2xGLE1BQU0sRUFBQyxLQUFLO3dDQUNaLFFBQVEsRUFBRSxJQUFBLHNDQUFrQixFQUFDLHNCQUFzQixFQUFFLDJCQUEyQixFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO3FDQUN4RyxFQUNELFlBQVksRUFDWixDQUFDLEVBQ0QsRUFBQyxnQkFBZ0IsRUFBQyxLQUFLLEVBQUUsc0JBQXNCLEVBQUMsRUFBRSxFQUFFLE1BQU0sRUFBQyxVQUFVLEVBQUUsVUFBVSxFQUFDLElBQUksRUFBRSxLQUFLLEVBQUMsVUFBVSxFQUFDLEVBQ3pHLFVBQVUsRUFDViw2QkFBNkIsRUFDN0IsVUFBVSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxVQUFVLENBQ2hEO2lDQUNKLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBOzRCQUNiLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUEsRUFBRSxDQUFBLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFO3lCQUNwRCxDQUFDO3dCQUNELG9CQUFvQixDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsZUFBZSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLENBQUM7cUJBQzNHLENBQUMsQ0FBQTtnQkFDTixDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMxQzthQUNKLENBQUMsQ0FDTCxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQSxFQUFFLENBQUEsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxPQUFPLGlCQUFJLENBQUMsR0FBRyxDQUFDLCtDQUErQyxDQUFBLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxTQUFTLGVBQWUsQ0FBQyxLQUFvQztRQUN6RCxJQUFJLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxHQUFHLEtBQUssQ0FBQztRQUMvQixNQUFNLFFBQVEsR0FBRyxJQUFBLHlCQUFXLEdBQUUsQ0FBQztRQUMvQixJQUFJLFdBQVcsR0FBRyxTQUFTLENBQUMsc0JBQXNCLENBQUEsQ0FBQyxDQUFBLElBQUEsdUNBQW1CLEVBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQUUsRUFBRSxDQUFBLElBQUksQ0FBQztRQUNsSCxJQUFJLEVBQUMsY0FBYyxFQUFDLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsSUFBSSxFQUFFLEdBQUcsU0FBUyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDM0MsSUFBQSxxQ0FBaUIsRUFBQyxFQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUMsU0FBUyxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQVksRUFBQyxFQUFFLENBQUEsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQWMsSUFBRSxXQUFXLENBQUEsQ0FBQyxDQUFBLE9BQU8sQ0FBQSxDQUFDLENBQUEsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUMxSCxJQUFJLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxTQUFTLElBQUUsUUFBdUIsQ0FBQyxDQUFDLHlDQUF5QztRQUNqSCxJQUFHLG1CQUFtQixFQUFDO1lBQ25CLElBQUEscUNBQWlCLEVBQUMsRUFBQyxFQUFFLEVBQUUsTUFBTSxFQUFDLElBQUk7Z0JBQzlCLEdBQUcsRUFBQyxDQUNBLENBQVksRUFDWixhQUEyRCxFQUMzRCxRQUF1QixFQUN2QixXQUFvRixFQUNwRixVQUFxQixFQUN4QixFQUFFO29CQUNDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFDLEVBQUUsQ0FBQztvQkFDMUIsaUZBQWlGO29CQUNqRixJQUFHLENBQUMsQ0FBQyxlQUFlLENBQWtCLElBQUksT0FBTyxFQUFDO3dCQUM5QyxRQUFRLENBQUMsV0FBVyxHQUFHLDBCQUEwQixDQUFDO3FCQUNyRDt5QkFBSTt3QkFDRCxRQUFRLENBQUMsV0FBVyxHQUFHLHVCQUF1QixDQUFDO3dCQUMvQyxJQUFJLEVBQUMsZUFBZSxFQUFDLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVSxDQUFDO3dCQUM1RSxRQUFRLENBQUMsU0FBUyxHQUFDLEVBQUUsQ0FBQzt3QkFDdEIsUUFBUSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztxQkFDM0c7Z0JBQ0wsQ0FBQzthQUNKLENBQUMsQ0FBQTtTQUNMO1FBQ0QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxRQUFrQyxFQUFDLEVBQUU7WUFDM0MsNkRBQTZEO1lBQzdELDBDQUEwQztZQUMxQyxJQUFBLGtDQUFjLEVBQUMsMkNBQXVCLEVBQUMsRUFBQyxLQUFLLEVBQUMsUUFBUSxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7WUFDL0QsUUFBUSxDQUFDLDhCQUFXLENBQUMsa0JBQWtCLENBQUMsRUFBQyxLQUFLLEVBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLENBQUMsQ0FBQTtRQUNELE9BQU8sb0JBQUMsa0JBQWtCLElBQ3RCLEVBQUUsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUNuQixTQUFTLEVBQUUsU0FBUztZQUVwQixvQkFBQyxvQkFBb0IsSUFBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRztZQUN4RSw2QkFBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFDLE9BQU8sRUFBQyxNQUFNLEVBQUMsR0FBUTtZQUMzQyxtQkFBbUIsQ0FBQSxDQUFDO2dCQUNyQixvQkFBQyxNQUFNLElBQUMsU0FBUyxFQUFDLGdCQUFnQixFQUFDLEVBQUUsRUFBQyw2QkFBNkIsRUFBQyxLQUFLLEVBQUUsRUFBQyxPQUFPLEVBQUMsTUFBTSxFQUFDLEVBQ3ZGLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBQyxFQUFFO3dCQUNkLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFFLEtBQUssQ0FBQyxNQUF3QyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUUsQ0FBQyxDQUFDLENBQUE7b0JBQy9GLENBQUMsbUJBQ2lCO2dCQUN0QixDQUFDLENBQUEsSUFBSSxDQUVZLENBQUE7SUFDekIsQ0FBQztJQUVELFNBQVMsZ0JBQWdCLENBQUMsS0FBa0M7UUFDeEQsSUFBSSxFQUFDLE1BQU0sRUFBQyxHQUFHLEtBQUssQ0FBQztRQUNyQixPQUFPLG9CQUFDLGtCQUFrQixJQUFDLFNBQVMsRUFBRSxNQUFNO1lBQ3hDLG9CQUFDLG9CQUFvQixJQUFDLFNBQVMsRUFBRSxNQUFNLEdBQUcsQ0FDekIsQ0FBQTtJQUN6QixDQUFDO0lBRUQsU0FBUyxzQkFBc0IsQ0FBQyxLQUEyQztRQUN2RSxJQUFJLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxHQUFHLEtBQUssQ0FBQztRQUMvQixJQUFJLFdBQVcsR0FBRyxTQUFTLENBQUMsc0JBQXNCLENBQUEsQ0FBQyxDQUFBLElBQUEsdUNBQW1CLEVBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQUUsRUFBRSxDQUFBLElBQUksQ0FBQztRQUNsSCxJQUFJLEVBQUMsY0FBYyxFQUFDLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsSUFBSSxFQUFFLEdBQUcsZ0JBQWdCLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsRCxJQUFBLHFDQUFpQixFQUFDLEVBQUMsRUFBRSxFQUFFLEtBQUssRUFBQyxTQUFTLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBWSxFQUFDLEVBQUUsQ0FBQSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksY0FBYyxJQUFFLFdBQVcsQ0FBQSxDQUFDLENBQUEsT0FBTyxDQUFBLENBQUMsQ0FBQSxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQzFILE9BQU8sb0JBQUMsa0JBQWtCLElBQ3RCLEVBQUUsRUFBRSxFQUFFLEVBQ04sU0FBUyxFQUFFLFNBQVMsRUFDcEIsS0FBSyxFQUFFLEVBQUMsT0FBTyxFQUFDLE1BQU0sRUFBQztZQUV2QixvQkFBQyxvQkFBb0IsSUFBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUN2RCxDQUFBO0lBQ3pCLENBQUM7SUFXRCxJQUFJLHlCQUF5QixHQUFHLENBQzVCLFFBQWtDLEVBQ2xDLFlBQXlELEVBQ3pELG9CQUErQixFQUMvQixTQUFpTCxFQUNqTCxVQUFpQixFQUNqQixRQUFlLEVBQ2YsZ0JBQTJCLEVBQzlCLEVBQUU7O1FBQ0MsSUFBSSxLQUFLLEdBQVMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUNqQyxJQUFJLGdCQUFnQixHQUFHLElBQUEsb0JBQVksRUFBQyxLQUFLLENBQUMsR0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUEsQ0FBQyxDQUFBLFFBQVEsQ0FBQSxDQUFDLENBQUEsRUFBRSxDQUFDLENBQUM7UUFDOUUsSUFBSSxFQUFFLEdBQUcsd0JBQXdCLGdCQUFnQixFQUFFLENBQUM7UUFDcEQsSUFBSSxNQUFNLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQztRQUNsQyxPQUFPLGlCQUFJLENBQUMsRUFBRSxDQUFDO1lBQ1gsRUFBRTtZQUNGLEtBQUssRUFBQywwQkFBMEI7WUFDaEMsTUFBTSxFQUFDO2dCQUNILG1CQUFtQixFQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUEsQ0FBQyxDQUFBLFFBQVEsQ0FBQSxDQUFDLENBQUEsUUFBUSxDQUFDLE1BQU0sQ0FBQSxDQUFDLENBQUEsUUFBUSxDQUFBLENBQUMsQ0FBQSxZQUFZO2dCQUNsRixrQkFBa0IsRUFBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUEsQ0FBQyxDQUFBLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFBLENBQUMsQ0FBQSxhQUFhLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQSxJQUFJO2dCQUN4RyxhQUFhLEVBQUMsSUFBSTtnQkFDbEIsWUFBWSxFQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO2FBQ3hDO1NBQ0osRUFBRTtZQUNDLFNBQVMsQ0FBQyxVQUFVLENBQUEsQ0FBQztnQkFDakIsaUJBQUksQ0FBQyxFQUFFLENBQUMsRUFBQyxLQUFLLEVBQUMsWUFBWSxFQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pFLENBQUMsQ0FBQSxJQUFJO1lBQ0wsaUJBQUksQ0FBQyxFQUFFLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQSxDQUFDO29CQUN0RCxDQUFDLE1BQUEsTUFBQSxTQUFTLENBQUMsUUFBUSwwQ0FBRSxhQUFhLENBQUMsTUFBTSxtQ0FBRSxDQUFDLENBQUMsR0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUEsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLENBQUEsQ0FBQyxDQUFDO29CQUM1RSxDQUFDLENBQUEsSUFBSSxFQUFDLEVBQUM7Z0JBQ1AsT0FBTyxDQUFDO29CQUNKLDBCQUEwQjtvQkFDMUIsRUFBRSxFQUFDLG9CQUFvQixnQkFBZ0IsRUFBRTtvQkFDekMsT0FBTyxFQUFDLFVBQVU7b0JBQ2xCLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtvQkFDM0IsS0FBSyxFQUFDLFNBQVM7b0JBQ2YsT0FBTyxFQUFDLEdBQUUsRUFBRTt3QkFDUixJQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUM7NEJBQ3BCLElBQUcsUUFBUSxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUM7Z0NBQ3BCLElBQUcsU0FBUyxDQUFDLEtBQUssRUFBQztvQ0FDZixJQUFJLFVBQVUsR0FBRyxPQUFPLEdBQUUsU0FBUyxDQUFDLEtBQW1CLENBQUE7b0NBQ3ZELElBQUEsa0NBQWMsRUFBQyw4Q0FBMEIsRUFBQyxFQUFDLEtBQUssRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUMsUUFBUSxDQUFDLEdBQUcsSUFBRSxDQUFDLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQSxDQUFDLENBQUEsUUFBUSxDQUFDLEdBQVksRUFBQyxDQUFDLENBQUM7aUNBQzVJO2dDQUNELElBQUEsa0NBQWMsRUFBQyw4Q0FBMEIsRUFBQyxFQUFDLEtBQUssRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFDLFNBQVMsQ0FBQyxtQkFBaUMsRUFBRSxTQUFTLEVBQUMsUUFBUSxDQUFDLEdBQVksRUFBQyxDQUFDLENBQUM7NkJBQ3hKO3lCQUNKOzZCQUFJOzRCQUNELElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUF1QixDQUFDOzRCQUNyRSxNQUFNLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7NEJBQzVELE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQzt5QkFDbEI7b0JBQ0wsQ0FBQztvQkFDRCxNQUFNLEVBQUM7d0JBQ0gsZ0JBQWdCLEVBQUMsTUFBTSxJQUFFLE9BQU8sQ0FBQSxDQUFDLENBQUEsTUFBTSxDQUFBLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFBLENBQUMsQ0FBQSxRQUFRLENBQUEsQ0FBQyxDQUFBLFFBQVEsQ0FBQyxNQUFNLENBQUEsQ0FBQyxDQUFBLE1BQU0sQ0FBQSxDQUFDLENBQUEsWUFBWTtxQkFDeEc7b0JBQ0MsUUFBUSxFQUFDO3dCQUNQLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQSxDQUFDLENBQUEsU0FBUyxDQUFBLENBQUMsQ0FBQSxRQUFRLENBQUMsV0FBVyxDQUFBLENBQUMsQ0FBQSxPQUFPLENBQUEsQ0FBQyxDQUFBLFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDdkcsaUJBQUksQ0FBQyxHQUFHLENBQUMsRUFBQyxLQUFLLEVBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUMsV0FBVyxFQUFFLGFBQWEsRUFBQyxNQUFNLEVBQUMsRUFBQzs0QkFDM0YsaUJBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQSx1Q0FBc0IsQ0FBQyxHQUFHLENBQUEsQ0FBQyxDQUFBLFFBQVEsQ0FBQyxXQUFXLENBQUEsQ0FBQyxDQUFBLHVDQUFzQixDQUFDLEtBQUssQ0FBQSxDQUFDLENBQUEsU0FBUyxDQUFDLEtBQUssQ0FBQSxDQUFDLENBQUEsdUNBQXNCLENBQUMsT0FBTyxDQUFBLENBQUMsQ0FBQSx1Q0FBc0IsQ0FBQyxTQUFTLENBQUMsRUFBQyxDQUFDO3lCQUNuTSxDQUFDO3FCQUNMO2lCQUNKLENBQUM7Z0JBQ0YsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFBLENBQUM7b0JBQ3BCLE9BQU8sQ0FBQzt3QkFDSixTQUFTLEVBQUMsdUJBQXVCO3dCQUNqQyxLQUFLLEVBQUMsU0FBUzt3QkFDZixPQUFPLEVBQUMsVUFBVTt3QkFDbEIsUUFBUSxFQUNKLGlCQUFJLENBQUMsR0FBRyxDQUFDLEVBQUMsS0FBSyxFQUFDLGlCQUFpQixFQUFFLFNBQVMsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUMsTUFBTSxFQUFDLEVBQUM7NEJBQzNGLGlCQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFDLHVDQUFzQixDQUFDLGFBQWEsRUFBQyxDQUFDO3lCQUN0RCxDQUFDO3dCQUNOLE9BQU8sRUFBQyxHQUFFLEVBQUUsQ0FBQSxJQUFBLDRDQUF3QixFQUFDLEVBQUMsS0FBSyxFQUFFLFVBQVUsRUFBQyxDQUFDO3FCQUFDLENBQUM7b0JBQ25FLENBQUMsQ0FBQSxJQUFJLENBQUM7YUFDVCxDQUFDO1lBQ0YsQ0FBQyxRQUFRLENBQUMsR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFBLENBQUM7Z0JBQ3BFLENBQUMsTUFBQSxNQUFBLFNBQVMsQ0FBQyxRQUFRLDBDQUFFLGFBQWEsbUNBQUUsRUFBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUNsRSxDQUFDLEtBQVksRUFBQyxFQUFFLENBQUEsaUJBQUksQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFtQixDQUFDLENBQUMsQ0FDdkg7Z0JBQ0wsQ0FBQyxDQUFBLElBQUksQ0FBQztZQUNOLDRJQUE0STtZQUU1STs7Ozs7Ozs7Y0FRRTtTQUNMLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUNmLENBQUMsQ0FBQTtJQUVELElBQUksb0JBQW9CLEdBQUcsQ0FBQyxtQkFBZ0MsRUFBQyxFQUFFO1FBQzNELElBQUksVUFBVSxHQUFHLElBQUEsaUNBQWEsR0FBRSxDQUFDO1FBQ2pDLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDO1FBQ2hGLE9BQU8sSUFBQSxnQkFBTSxFQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7YUFDaEMsTUFBTSxDQUFDLENBQUMsY0FBNkIsRUFBRSxNQUFtQixFQUFDLEVBQUUsQ0FDMUQsY0FBYyxDQUFDLFVBQVUsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUNsRCxDQUFDLEdBQUcsQ0FBQyxDQUFDLGVBQThCLEVBQUUsTUFBbUIsRUFBQyxFQUFFLENBQ3pELE1BQU0sQ0FDVCxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ2pCLENBQUMsQ0FBQTtJQUVELElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxLQUFvQixFQUFFLFdBRTdDLEVBQUUsS0FBVyxFQUFDLEVBQUU7UUFDYixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFpQixFQUFDLEVBQUU7WUFDckMsSUFBSSxPQUFPLG1DQUFLLEtBQUssS0FBRSxVQUFVLEVBQUMsSUFBSSxHQUFDLENBQUM7WUFDeEMsSUFBSSxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUEsb0JBQVksRUFBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2xELE9BQU8sUUFBUSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUE7UUFDdEMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQTtJQUNsQixDQUFDLENBQUE7SUFFRCxTQUFTLHlCQUF5QixDQUFDLEtBQXFFOztRQUNwRyxJQUFJLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxHQUFHLEtBQUssQ0FBQztRQUMvQixJQUFJLFdBQVcsR0FBRyxTQUFTLENBQUMsc0JBQXNCLENBQUEsQ0FBQyxDQUFBLElBQUEsdUNBQW1CLEVBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQUUsRUFBRSxDQUFBLElBQUksQ0FBQztRQUNsSCxJQUFJLEVBQUMsUUFBUSxFQUFDLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsK0VBQStFO1FBQy9FLElBQUksWUFBWSxHQUFDLENBQUEsTUFBQSxTQUFTLENBQUMsS0FBSywwQ0FBRSxTQUFTLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFFLElBQUksQ0FBQSxDQUFDLENBQUEsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDaEcsdUVBQXVFO1FBQ3ZFLElBQUksbUJBQW1CLEdBQUcsSUFBSSxHQUFDLFlBQTZCLENBQUM7UUFDN0QsSUFBSSxVQUFVLEdBQUcsSUFBQSxpQ0FBYSxHQUFFLENBQUM7UUFDakMsSUFBSSxFQUFDLGdCQUFnQixFQUFDLEdBQUcsSUFBQSx5QkFBVyxFQUFDLENBQUMsTUFBZ0IsRUFBQyxFQUFFLENBQUEsQ0FBQztZQUN0RCxnQkFBZ0IsRUFBQyxVQUFVLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUMsVUFBVTtTQUMxRSxDQUFDLENBQUMsQ0FBQztRQUNKLElBQUksZ0JBQWdCLEdBQUcsSUFBQSxvQkFBWSxFQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDOzs7Ozs7Ozs7Ozs7O1VBYUU7UUFDRixNQUFNLFFBQVEsR0FBRyxJQUFBLHlCQUFXLEdBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsb0JBQW9CLENBQUMsR0FBRyxJQUFBLGdCQUFRLEVBQXVDLElBQUksQ0FBQyxDQUFDO1FBQ3JHLElBQUksbUJBQW1CLEdBQUMsZ0JBQWdCLENBQUMsZUFBZSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDO1FBQzdGLElBQUksWUFBWSxHQUFHLGdDQUFZLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM1RSxpREFBaUQ7UUFDaEQsSUFBSSxRQUFRLEdBQUMsT0FBTyxHQUFDLFlBQVksQ0FBQztRQUNsQyxJQUFJLFNBQVMsR0FBQyw0QkFBNEIsUUFBUSxFQUFFLENBQUM7UUFDckQsSUFBSSxRQUFRLEdBQUMsa0JBQWtCLFNBQVMsRUFBRSxDQUFDO1FBQzNDLElBQUEscUNBQWlCLEVBQWlCO1lBQzlCLEVBQUUsRUFBQyxTQUFTO1lBQ1osTUFBTSxFQUFDLElBQUk7WUFDWCxHQUFHLEVBQUUsQ0FBQyxvQkFBK0IsRUFBRSxXQUF5RCxFQUFFLEdBQWtCLEVBQzVHLFdBRUMsRUFDSixFQUFFOztnQkFDSCxJQUFHO29CQUNDLElBQUksbUJBQW1CLEdBQStCLEVBQUUsQ0FBQztvQkFDMUQsK0VBQStFO29CQUM5RSxJQUFJLFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxJQUFLLE9BQU8sR0FBQyxZQUFZLENBQUM7b0JBQy9ELHdFQUF3RTtvQkFDdkUsSUFBRyxtQkFBbUIsSUFBSSxTQUFTLENBQUMsS0FBSyxJQUFFLElBQUksRUFBQzt3QkFDOUMsb0hBQW9IO3dCQUNsSCxJQUFJLGFBQWEsR0FBa0IsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUMsWUFBNEIsQ0FBQyxDQUFDO3dCQUM3RixJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxlQUFnQixDQUFDLENBQUM7d0JBQ3BGLElBQUksUUFBUSxHQUFHLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsZUFBZ0IsQ0FBQyxDQUFDO3dCQUMvRSxJQUFJLGdCQUFnQixHQUFHLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxtQkFBaUMsQ0FBQyxDQUFDO3dCQUN6RixJQUFJLFNBQVMsR0FBZSxJQUFJLENBQUM7d0JBQ25DLHdHQUF3Rzt3QkFDcEcsSUFBSSxjQUFjLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUMsWUFBMEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQTt3QkFDdkYsOEVBQThFO3dCQUM3RSxJQUFJLHNCQUFzQixHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUEsQ0FBQyxDQUFBLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBQSwwQ0FBc0IsRUFBQyxLQUFLLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUE7d0JBQzdJLElBQUksMkJBQTJCLEdBQUcsVUFBVSxDQUFDLDJCQUEyQixDQUFDO3dCQUN6RSxtQkFBbUIsR0FBRyxJQUFBLGdCQUFNLEVBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBQyxFQUFFOzRCQUMvQyxJQUFJLEdBQUcsR0FBVSxJQUFBLDRDQUF3QixFQUFDLENBQUMsRUFBRSxRQUFRLENBQVcsQ0FBQzs0QkFDakUsSUFBSSxLQUFLLG1DQUFLLEtBQUssQ0FBQyxLQUFLLEtBQUUsVUFBVSxFQUFDLG1CQUFtQixFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUM7NEJBQy9FLElBQUksUUFBUSxHQUFHLG9CQUFvQixDQUFDLG1CQUFtQixDQUFDLENBQUE7NEJBQ3hELElBQUksUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFBLG9CQUFZLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzs0QkFDaEQsSUFBRyxTQUFTLElBQUksSUFBSSxJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksT0FBTyxJQUFJLGNBQWMsSUFBRyxRQUFRLEVBQUM7Z0NBQzdFLFNBQVMsR0FBRyxHQUFHLENBQUM7NkJBQ25COzRCQUNELE9BQU87Z0NBQ0gsS0FBSztnQ0FDTCxPQUFPLEVBQUMsSUFBSTtnQ0FDWixHQUFHO2dDQUNILE1BQU0sRUFBRSxJQUFBLG9DQUFnQixFQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLENBQUM7Z0NBQzNHLE1BQU0sRUFBRSxTQUFTLElBQUksSUFBSTtnQ0FDekIsYUFBYSxFQUFFLElBQUEsZ0JBQU0sRUFBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7b0NBQzNELGdCQUFnQixDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDO29DQUM5QyxJQUFBLDJDQUF1QixFQUFDLHNCQUFzQixFQUFDLG1CQUFtQixDQUFDO2dDQUN2RSxRQUFRLEVBQUUsSUFBQSxzQ0FBa0IsRUFBQyxzQkFBc0IsRUFBRSwyQkFBMkIsRUFBRSxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLENBQUM7NkJBQ3BJLENBQUE7d0JBQ0wsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ1gsSUFBRywrQkFBK0IsSUFBSSxDQUFDLFFBQVEsWUFBWSxLQUFLLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFDOzRCQUNsRixJQUFJLFlBQVksR0FBQyxDQUFDLFFBQVEsSUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDNUQsSUFBSSxLQUFLLG1DQUFLLEtBQUssQ0FBQyxLQUFLLEtBQUUsVUFBVSxFQUFDLG1CQUFtQixFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUMsWUFBWSxHQUFDLENBQUM7NEJBQ3hGLElBQUksaUJBQWlCLEdBQUcsU0FBUyxJQUFJLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLFFBQVEsSUFBRyxJQUFJLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO21DQUM1SCxDQUFDLGNBQWMsSUFBRyxRQUFRLElBQUksV0FBVyxDQUFDLENBQUM7NEJBQ2xELG1CQUFtQixDQUFDLElBQUksQ0FBQztnQ0FDckIsS0FBSztnQ0FDTCxHQUFHLEVBQUMsWUFBWTtnQ0FDaEIsU0FBUyxFQUFDLElBQUk7Z0NBQ2QsTUFBTSxFQUFDLGlCQUFpQjtnQ0FDeEIsTUFBTSxFQUFFLEtBQUs7Z0NBQ2IsUUFBUSxFQUFFLDhCQUE4QixDQUFDLHNCQUFzQixFQUFFLDJCQUEyQixFQUFFLG1CQUFtQixDQUFDOzZCQUNySCxDQUFDLENBQUM7NEJBQ0gsbUJBQW1CLENBQUMsSUFBSSxDQUFDO2dDQUNyQixLQUFLO2dDQUNMLEdBQUcsRUFBQyxZQUFZLEdBQUcsQ0FBQztnQ0FDcEIsV0FBVyxFQUFDLElBQUk7Z0NBQ2hCLE1BQU0sRUFBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsSUFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQ0FDOUYsTUFBTSxFQUFFLEtBQUs7Z0NBQ2IsUUFBUSxFQUFFLDhCQUE4QixDQUFDLHNCQUFzQixFQUFFLDJCQUEyQixFQUFFLG1CQUFtQixDQUFDOzZCQUNySCxDQUFDLENBQUM7eUJBQ047cUJBQ0o7eUJBQUk7d0JBQ0QsSUFBSSxLQUFLLG1DQUFLLEtBQUssQ0FBQyxLQUFLLEtBQUUsVUFBVSxFQUFDLG1CQUFtQixHQUFDLENBQUM7d0JBQzNELG1CQUFtQixHQUFHLENBQUMsRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBQyxXQUFXLEVBQUUsTUFBTSxFQUFDLElBQUksRUFBQyxDQUFDLENBQUE7cUJBQzFGO29CQUNELElBQUksZUFBZSxHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUEsRUFBRTs7d0JBQ3BELE9BQUEseUJBQXlCLENBQUMsUUFBUSxFQUFFLE1BQUEsV0FBVyxDQUFDLElBQUEsb0JBQVksRUFBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsbUNBQUUsRUFBQyxPQUFPLEVBQUMsT0FBTyxFQUFDLEVBQUUsb0JBQW9CLEVBQ2xILFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsQ0FDckQsQ0FBQTtxQkFBQSxDQUNKLENBQUE7b0JBQ0QsSUFBSSxvQkFBb0IsR0FBRyxJQUFBLGdCQUFNLEVBQUMsQ0FBQyxDQUFBLE1BQUEsU0FBUyxDQUFDLFFBQVEsMENBQUUsYUFBYSxLQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQSxFQUFFLENBQUEsQ0FBQyxDQUFDLENBQUM7b0JBQzdGLElBQUksV0FBVyxHQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFFLENBQUM7b0JBQ3BELFdBQVcsQ0FBQyxTQUFTLEdBQUMsRUFBRSxDQUFDO29CQUN6QixXQUFXLENBQUMsV0FBVyxDQUFDLGlCQUFJLENBQUMsS0FBSyxDQUFDLEVBQUMsS0FBSyxFQUFDLHVCQUF1QixvQkFBb0IsQ0FBQyxNQUFNLENBQUEsQ0FBQyxDQUFBLFFBQVEsQ0FBQSxDQUFDLENBQUEsRUFBRSxFQUFFLEVBQUMsRUFBQzt3QkFDeEcsaUJBQUksQ0FBQyxLQUFLLENBQUM7NEJBQ1AsaUJBQUksQ0FBQyxFQUFFLENBQUM7Z0NBQ0osU0FBUyxDQUFDLFVBQVUsQ0FBQSxDQUFDLENBQUEsaUJBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQSxDQUFDLENBQUEsSUFBSTtnQ0FDbkMsaUJBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztnQ0FDekIsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFDLEVBQUUsQ0FBQSxpQkFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQzs2QkFDaEUsQ0FBQzt5QkFDTCxDQUFDO3dCQUNGLGlCQUFJLENBQUMsS0FBSyxDQUFDOzRCQUNQLGVBQWU7eUJBQ2xCLENBQUM7cUJBQ0wsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7aUJBQ2hCO2dCQUFBLE9BQU0sR0FBRyxFQUFDO29CQUNQLElBQUksS0FBSyxHQUFHLElBQUEsdUJBQVUsRUFBQyxHQUFHLENBQUMsQ0FBQztvQkFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO29CQUM3QixHQUFHLENBQUMsV0FBVyxHQUFDLGNBQWMsR0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2lCQUNoRDtZQUNMLENBQUM7U0FDSixDQUFDLENBQUM7UUFDSCxNQUFNLEVBQUUsR0FBRyxDQUFDLFFBQWtDLEVBQUMsRUFBRTtZQUM3QyxJQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBQztnQkFDaEIsUUFBUSxDQUFDLFdBQVcsQ0FBQSxDQUFDO29CQUNqQixJQUFJO29CQUNSLENBQUM7d0JBQ0csUUFBUSxDQUFDLDhCQUFXLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDNUM7aUJBQUk7Z0JBQ0QsSUFBSSxVQUFVLG1DQUFLLEtBQUssS0FBRSxVQUFVLEVBQUMsbUJBQW1CLEdBQUMsQ0FBQztnQkFDMUQsSUFBRyxtQkFBbUIsRUFBQztvQkFDbkIscUNBQXFDO29CQUNyQyxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQTtvQkFDdkMsSUFBRyxRQUFRLENBQUMsU0FBUyxFQUFDO3dCQUNsQixJQUFBLGtDQUFjLEVBQUMsNkNBQXlCLEVBQUMsRUFBQyxLQUFLLEVBQUMsVUFBVSxFQUFDLENBQUMsQ0FBQztxQkFDaEU7eUJBQUk7d0JBQ0QsSUFBQSxrQ0FBYyxFQUFDLDJDQUF1QixFQUFDLEVBQUMsS0FBSyxFQUFDLFVBQVUsRUFBQyxDQUFDLENBQUM7cUJBQzlEO2lCQUNKO2dCQUNELFFBQVEsQ0FBQyw4QkFBVyxDQUFDLGtCQUFrQixDQUFDLEVBQUMsS0FBSyxFQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ25GO1lBQ0QsSUFBRyxpQkFBaUIsRUFBQztnQkFBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTthQUFDO1FBQ3RELENBQUMsQ0FBQztRQUNGLE9BQU8sb0JBQUMsa0JBQWtCLElBQUMsU0FBUyxFQUFFLFNBQVM7WUFDM0MsNkJBQUssRUFBRSxFQUFFLFNBQVMsR0FDWjtZQUNOLG9CQUFDLE1BQU0sSUFBQyxTQUFTLEVBQUMsZ0JBQWdCLEVBQUMsRUFBRSxFQUFFLFFBQVEsRUFDM0MsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFDLEVBQUU7b0JBQ2QsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUUsS0FBSyxDQUFDLE1BQXdDLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBRSxDQUFDLENBQUMsQ0FBQTtnQkFDL0YsQ0FBQyxtQkFDaUI7WUFDdEIsb0JBQUMsYUFBTSxJQUNILFNBQVMsRUFBQyxpQkFBaUIsRUFDM0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsRUFDekIsT0FBTyxFQUFFLEdBQUUsRUFBRSxDQUFBLG9CQUFvQixDQUFDLElBQUksQ0FBQztnQkFFdkMsNkJBQUssU0FBUyxFQUFDLGlCQUFpQjtvQkFDNUIsb0JBQUMsVUFBVSx1REFBMEQ7b0JBQ3JFLG9CQUFDLFVBQVUsa0ZBQTJFO29CQUN0RixvQkFBQyxVQUFVLHdFQUFzRSxDQUMvRTtnQkFDTixvQkFBQyxNQUFNLElBQUMsS0FBSyxFQUFDLFdBQVcsRUFBQyxPQUFPLEVBQUUsR0FBRSxFQUFFLENBQUEsaUJBQWlCLElBQUksRUFBRSxDQUFDLGlCQUFpQixDQUFDLGFBQWlCO2dCQUNsRyxvQkFBQyxNQUFNLElBQUMsS0FBSyxFQUFDLFNBQVMsRUFBQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE9BQU8sRUFBRSxHQUFFLEVBQUUsQ0FBQSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsZ0JBQW9CLENBQ2xHLENBQ1EsQ0FBQTtJQUN6QixDQUFDO0lBRUQsU0FBUyxvQkFBb0IsQ0FBQyxLQUE0QztRQUN0RSxPQUFPLG9CQUFDLGtCQUFrQixJQUN0QixFQUFFLEVBQUUsd0JBQXdCLEtBQUssQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQzFELFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBbUIsRUFDcEMsS0FBSyxFQUFFLEVBQUMsT0FBTyxFQUFDLE1BQU0sRUFBQztZQUV2QixvQkFBQyxVQUFVOztnQkFBc0MsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLOztnQkFBVSxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVM7cUJBQWU7WUFDeEgsb0JBQUMsb0JBQW9CLElBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFpQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FDM0YsQ0FBQTtJQUN6QixDQUFDO0lBRUQsU0FBUyxtQkFBbUIsQ0FBQyxLQUFXO1FBQ3BDLE9BQU8sSUFBQSx5QkFBVyxFQUFDLENBQUMsS0FBZSxFQUFDLEVBQUU7WUFDbEMsSUFBSSxVQUFVLEdBQUcsSUFBQSxpQ0FBYSxHQUFFLENBQUM7WUFDakMsT0FBTztnQkFDSCxVQUFVLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVTtnQkFDL0QsY0FBYyxFQUFFLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQSxDQUFDLENBQUEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUEsQ0FBQyxDQUFBLGNBQWM7Z0JBQ3BGLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtnQkFDaEIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO2FBQzNCLENBQUE7UUFDTCxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxTQUFTLDJCQUEyQixDQUFDLEtBQXVFO1FBQ3hHLElBQUksRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksRUFBRSxHQUFHLHNCQUFzQixTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEQsSUFBQSxxQ0FBaUIsRUFBQztZQUNkLEVBQUU7WUFDRixNQUFNLEVBQUMsSUFBSTtZQUNYLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxTQUFTLENBQUM7U0FDeEMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxjQUFjLEdBQUcsUUFBUSxDQUFDO1FBQzlCLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztRQUN0QixPQUFPLFVBQVUsSUFBSSxjQUFjLElBQUUsV0FBVyxDQUFBLENBQUMsQ0FBQSxvQkFBQyxrQkFBa0IsSUFBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTO1lBQzdGLG9CQUFDLG9CQUFvQixJQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksS0FBRyxLQUFLLEdBQUc7WUFDekYsb0JBQUMsMENBQTBDLElBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssR0FBRyxDQUN2SCxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVELFNBQVMsMENBQTBDLENBQUMsS0FBbUg7UUFDbkssSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssSUFBRSxHQUFHLENBQUM7UUFDdkQsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxJQUFBLGdCQUFRLEVBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2RCxNQUFNLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxHQUFHLElBQUEsZ0JBQVEsRUFBbUIsSUFBSSxDQUFDLENBQUM7UUFDdkUsSUFBRyxhQUFhLEVBQUM7WUFDYixJQUFHLFdBQVcsSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFDO2dCQUNoRCxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBQ2pCLGNBQWMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUE7YUFDcEQ7WUFDRCxJQUFBLGlCQUFTLEVBQUMsR0FBRSxFQUFFO2dCQUNWLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxHQUFFLEVBQUU7b0JBQ3ZCLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDckIsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUNOLE9BQU8sR0FBRSxFQUFFO29CQUNQLElBQUcsS0FBSyxFQUFDO3dCQUNMLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDdkI7Z0JBQ0wsQ0FBQyxDQUFBO1lBQ0wsQ0FBQyxDQUFDLENBQUE7U0FDTDtRQUNELE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztRQUMxQixJQUFBLGlCQUFTLEVBQUMsR0FBRSxFQUFFO1lBQ1YsSUFBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSyxJQUFFLEdBQUcsRUFBQztnQkFDbEMsSUFBQSxzREFBa0MsRUFBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbkQ7UUFDTCxDQUFDLEVBQUMsQ0FBQyxJQUFBLG9CQUFZLEVBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFDdEMsSUFBQSxpQkFBUyxFQUFDLEdBQUcsRUFBRTtZQUNYLElBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssSUFBRSxHQUFHLElBQUksT0FBTyxFQUFDO2dCQUM3QyxJQUFJLEVBQUMsaUJBQWlCLEVBQUUsY0FBYyxFQUFDLEdBQUcsSUFBQSxrQ0FBYyxFQUFDLDhDQUEwQixFQUFFLEVBQUMsU0FBUyxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUMsaURBQTZCLEVBQUUsS0FBSyxFQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO2dCQUNsSyxJQUFHLGNBQWMsSUFBSSxpQkFBaUIsRUFBQztvQkFDbkMseUJBQXlCLENBQUMsSUFBQSx1QkFBUSxFQUFDLGNBQTZCLEVBQUMsaUJBQWdDLENBQWUsQ0FBQyxDQUFBO2lCQUNwSDtxQkFBSTtvQkFDRCxJQUFJLG9CQUFvQixHQUFHLElBQUEsMkNBQXVCLEdBQUUsQ0FBQTtvQkFDcEQsSUFBRyxvQkFBb0IsQ0FBQyxJQUFBLG9CQUFZLEVBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFFLElBQUksRUFBQzt3QkFDN0QsSUFBQSw0QkFBVyxHQUFFLENBQUE7cUJBQ2hCO3lCQUFJO3dCQUNELElBQUEsNEJBQVcsR0FBRSxDQUFBO3FCQUNoQjtpQkFDSjthQUNKO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLDZCQUFLLFNBQVMsRUFBQyxXQUFXO1lBQzVCLE9BQU8sQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFBLENBQUMsQ0FBQSw2QkFBSyxLQUFLLEVBQUUsRUFBQyxNQUFNLEVBQUMsT0FBTyxFQUFFLFNBQVMsRUFBQyxRQUFRLEVBQUUsYUFBYSxFQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUMsTUFBTSxFQUFFLFFBQVEsRUFBQyxPQUFPLEVBQUUsZUFBZSxFQUFFLHVCQUF1QixFQUFFLFFBQVEsRUFBQyxNQUFNLEVBQUMsa0JBQW9CO1lBQ3BNLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBQyxFQUFFOztnQkFDcEQsSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBQyxHQUFHLEdBQUMsU0FBUyxDQUFDLFlBQVksR0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDO2dCQUMzRCxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxlQUFlLENBQUEsQ0FBQztvQkFDbkMsQ0FDSSxTQUFTLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQSxDQUFDLENBQUEsb0JBQUMsa0JBQWtCLElBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQUEsU0FBUyxDQUFDLG9CQUFvQixtQ0FBRSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLElBQUUsSUFBSSxDQUFBLENBQUMsQ0FBQSxTQUFTLENBQUEsQ0FBQyxDQUFBLFVBQVUsQ0FBQyxHQUFHLENBQUEsQ0FBQzt3QkFDbE4sU0FBUyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUEsQ0FBQyxDQUFBLG9CQUFDLGdCQUFnQixJQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFBLENBQUM7NEJBQzFILFNBQVMsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFBLENBQUMsQ0FBQSxvQkFBQyxnQkFBZ0IsSUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQSxDQUFDO2dDQUNqRyxTQUFTLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQSxDQUFDLENBQUEsb0JBQUMseUJBQXlCLElBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUEsQ0FBQztvQ0FDdkksU0FBUyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUEsQ0FBQyxDQUFBLG9CQUFDLHNCQUFzQixJQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFBLENBQUM7d0NBQ3hHLFNBQVMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFBLENBQUMsQ0FBQSxvQkFBQywyQkFBMkIsSUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQSxDQUFDOzRDQUN6SSxTQUFTLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQSxDQUFDLENBQUEsb0JBQUMsZUFBZSxJQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFBLENBQUM7Z0RBQ2xHLFNBQVMsQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFBLENBQUMsQ0FBQSxvQkFBQyxlQUFlLElBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUEsQ0FBQztvREFDaEksb0JBQUMsb0JBQW9CLElBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQzlFO29CQUNMLENBQUMsQ0FBQSxDQUFDLElBQUUsZUFBZSxDQUFBLENBQUM7d0JBQ2hCLDZCQUFLLEdBQUcsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLGdCQUFnQixFQUFDLElBQUksRUFBQyxRQUFROzRCQUN4RCx1REFBK0IsQ0FDN0I7d0JBQ1YsQ0FBQyxDQUFBLElBQUksQ0FDSixDQUFBO1lBQ0wsQ0FBQyxDQUFDLENBQ0MsQ0FBQTtJQUNYLENBQUM7SUFFRCxTQUFTLGdCQUFnQixDQUFDLEtBQXlEO1FBQy9FLElBQUksRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksR0FBRyxHQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUNoRSxJQUFJLFVBQVUsR0FBQyxDQUFDLENBQUM7UUFDakIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7UUFDeEMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFDLEtBQUssRUFBRSxHQUFHLEVBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBQzdDLElBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQSxDQUFDLENBQUEsSUFBQSx1Q0FBbUIsRUFBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBRSxFQUFFLENBQUEsSUFBSSxDQUFDO1FBQzVHLElBQUksRUFBQyxjQUFjLEVBQUMsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxJQUFHLFFBQVEsRUFBQztZQUNSLG9CQUFvQjtZQUNwQixjQUFjO1lBQ2QsaURBQWlEO1lBQ2pELDhEQUE4RDtZQUM5RCxLQUFLO1NBQ1I7UUFDRCxJQUFJLEVBQUUsR0FBRyxVQUFVLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QyxJQUFBLHFDQUFpQixFQUFDO1lBQ2QsRUFBRTtZQUNGLEtBQUssRUFBQyxTQUFTO1lBQ2YsR0FBRyxFQUFFLENBQUMsVUFBcUIsRUFBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLGNBQWMsSUFBRSxXQUFXLENBQUEsQ0FBQyxDQUFBLE9BQU8sQ0FBQSxDQUFDLENBQUEsTUFBTTtTQUN2RyxDQUFDLENBQUE7UUFDRixPQUFPLG9CQUFDLGtCQUFrQixJQUFDLFNBQVMsRUFBRSxNQUFNLG9CQUFrQixNQUFNLENBQUMsWUFBWSxpQkFBZSxRQUFRLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQSxDQUFDLENBQUEsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFO1lBQ3RILG9CQUFDLG9CQUFvQixJQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRztZQUN2RCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBQyxFQUFDLEVBQUUsQ0FDakMsb0JBQUMsMENBQTBDLElBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxHQUFHLENBQ3JKLENBQ2dCLENBQUM7SUFDMUIsQ0FBQztJQUVELE1BQU0sb0JBQW9CLEdBQUcsb0JBQW9CLENBQUM7SUFFbEQsU0FBUyxTQUFTLENBQUMsS0FBNEM7UUFDM0QsTUFBTSxZQUFZLEdBQUcsQ0FBQyxRQUFlLEVBQUMsRUFBRTtZQUNwQyxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFDLFFBQVEsR0FBQyxJQUFJLENBQUM7UUFDdEMsQ0FBQyxDQUFBO1FBQ0QsT0FBTyxvQkFBQyxlQUFRLElBQ1osT0FBTyxFQUFFLEdBQUUsRUFBRSxDQUFBLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUMsUUFBUSxFQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUMsSUFBSSxFQUFDOztZQUM1RSxLQUFLLENBQUMsWUFBWSxDQUFZLENBQUE7SUFDMUMsQ0FBQztJQUVELFNBQVMsVUFBVTtRQUNmLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRCxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFTLEVBQUUsRUFBRTtZQUM5QixXQUFXLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxJQUFBLHlCQUFXLEdBQUUsQ0FBQztRQUMvQixNQUFNLE9BQU8sR0FBRyxDQUFDLGNBQTZCLEVBQUMsRUFBRTtZQUM3QyxRQUFRLENBQUMsOEJBQVcsQ0FBQyxlQUFlLENBQUMsRUFBQyxjQUFjLEVBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2xCLENBQUMsQ0FBQTtRQUNELE1BQU0sUUFBUSxHQUFHLElBQUEseUJBQVcsRUFBQyxDQUFDLEtBQWUsRUFBQyxFQUFFLENBQUEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQy9ELE9BQU87WUFDSCxvQkFBQyxNQUFNLElBQUMsT0FBTyxFQUFFLFdBQVc7Z0JBQ3hCLG9CQUFDLHFCQUFJLENBQUMsUUFBUSxPQUFFLENBQ1g7WUFDVCxvQkFBQyxXQUFJLElBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxHQUFFLEVBQUUsQ0FBQSxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUM3RCxvQkFBQyxlQUFRLElBQUMsT0FBTyxFQUFFLEdBQUUsRUFBRSxDQUFBLE9BQU8sQ0FBQyxjQUFjLENBQUMsYUFBbUI7Z0JBQ2pFLG9CQUFDLGVBQVEsSUFBQyxPQUFPLEVBQUUsR0FBRSxFQUFFLENBQUEsT0FBTyxDQUFDLEtBQUssQ0FBVSw0QkFBa0M7Z0JBQ2hGLG9CQUFDLGVBQVEsSUFBQyxPQUFPLEVBQUUsR0FBRSxFQUFFLENBQUEsT0FBTyxDQUFDLFdBQVcsQ0FBSSx3QkFBOEI7Z0JBQzVFLG9CQUFDLGNBQU8sT0FBRTtnQkFDVixvQkFBQyxTQUFTLElBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUcsV0FBVyxHQUFFO2dCQUNyRCxvQkFBQyxTQUFTLElBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUcsT0FBTyxHQUFFO2dCQUNqRCxvQkFBQyxTQUFTLElBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUcsUUFBUSxHQUFFO2dCQUNsRCxvQkFBQyxTQUFTLElBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUcsUUFBUSxHQUFFO2dCQUNsRCxvQkFBQyxTQUFTLElBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUcsUUFBUSxHQUFFO2dCQUNsRCxvQkFBQyxjQUFPLE9BQUU7Z0JBQ1Ysb0JBQUMsZUFBUTtvQkFBQzt3QkFBTyxvQkFBQyxlQUFRLElBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQ25FLEdBQUUsRUFBRSxDQUFBLFFBQVEsQ0FBQyw4QkFBVyxDQUFDLFVBQVUsQ0FBQyxFQUFDLE1BQU0sRUFBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUMsQ0FBQyxDQUFDLEVBQ3JHLFVBQVUsRUFBRSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxHQUFHO3lDQUFzQixDQUFXO2dCQUN0RixvQkFBQyxlQUFRO29CQUFDO3dCQUFPLG9CQUFDLGVBQVEsSUFBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLGVBQWUsRUFBRSxRQUFRLEVBQ2xFLEdBQUUsRUFBRSxDQUFBLFFBQVEsQ0FBQyw4QkFBVyxDQUFDLFVBQVUsQ0FBQyxFQUFDLE1BQU0sRUFBQyxpQkFBaUIsRUFBRSxLQUFLLEVBQUMsQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFDLENBQUMsQ0FBQyxFQUNuRyxVQUFVLEVBQUUsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsR0FBRztnREFBd0IsQ0FBVyxDQUNyRixDQUNSLENBQUM7SUFDUixDQUFDO0lBRUQsU0FBUyxpQkFBaUIsQ0FBQyxLQUE2RDtRQUNwRixNQUFNLFFBQVEsR0FBRyxJQUFBLHlCQUFXLEdBQUUsQ0FBQztRQUMvQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzFCLE1BQU0sRUFBQyxRQUFRLEVBQUMsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsY0FBYyxFQUFFLGlCQUFpQixDQUFDLEdBQUcsSUFBQSxnQkFBUSxFQUFlLEtBQUssQ0FBQyxDQUFDO1FBQzFFLElBQUksVUFBVSxHQUFHLElBQUEsaUNBQWEsR0FBRSxDQUFDO1FBQ2pDLElBQUksT0FBTyxHQUFHLElBQUEsa0NBQWMsR0FBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQzlGLElBQUksYUFBYSxHQUFHOztnQkFDaEIsYUFBYSxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQ25DLElBQUEsZ0NBQWEsRUFDVCxVQUFVLENBQUMsU0FBd0IsRUFDbkMsSUFBQSxrQ0FBYyxHQUFFLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQy9FLEtBQUssQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FDckMsQ0FBQztnQkFDRix5RkFBeUY7Z0JBQ3pGLDZCQUE2QjtnQkFDN0IsVUFBVTtnQkFDVixnQ0FBZ0M7WUFDcEMsQ0FBQztTQUFBLENBQUE7UUFDRCxJQUFJLGlCQUFpQixHQUFDLEVBQUUsQ0FBQztRQUN6QixJQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBQztZQUNyQixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLEVBQUUsS0FBSyxFQUFNLEdBQUcsRUFBQyxLQUFLLEVBQUUsRUFBRSxFQUFDLG1CQUFtQixFQUFFLEtBQUssRUFBQyxjQUFjLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUE7U0FDakg7UUFDRCxRQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMsRUFBRSxDQUNsQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLEVBQUMsUUFBUSxFQUFFLEdBQUcsRUFBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQyxDQUFDLENBQ2hKLENBQUE7UUFDRCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFFLEdBQUcsRUFBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7UUFDOUcsSUFBQSxxQ0FBaUIsRUFBQyxFQUFDLEVBQUUsRUFBQyxLQUFLLENBQUMsV0FBVyxDQUFBLENBQUMsQ0FBQSxlQUFlLENBQUEsQ0FBQyxDQUFBLG1CQUFtQixFQUFFLE1BQU0sRUFBQyxJQUFJO1lBQ3BGLEdBQUcsRUFBQyxDQUNBLENBQVksRUFDWixhQUEyRCxFQUMzRCxRQUF1QixFQUN2QixXQUFxRixFQUNyRixXQUFzQixFQUN6QixFQUFFO2dCQUNDLFFBQVEsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUMsSUFBQSwyQ0FBdUIsRUFBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3pHLENBQUM7U0FDSixDQUFDLENBQUE7UUFDRixPQUFPO1lBQ0gsb0JBQUMsa0JBQVcsSUFBQyxHQUFHLEVBQUMsYUFBYSxFQUFDLFNBQVMsRUFBQyxrQkFBa0Isa0JBQWUsS0FBSyxDQUFDLFdBQVcsQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFBLENBQUMsQ0FBQSxJQUFJLElBQ2hHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxDQUMxQixvQkFBQyxNQUFNLElBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQSxDQUFDLENBQUEsU0FBUyxDQUFBLENBQUMsQ0FBQSxTQUFTLEVBQUUsT0FBTyxFQUFDLFVBQVUsRUFDMUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQ1IsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUNuQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUNoQixPQUFPLEVBQUUsR0FBRSxFQUFFO29CQUNULFFBQVEsQ0FDSixDQUFDLENBQUMsR0FBRyxJQUFFLEtBQUssQ0FBQSxDQUFDLENBQUEsOEJBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUEsQ0FBQzt3QkFDeEMsOEJBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFDLGlCQUFpQixFQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxDQUNwRSxDQUFDO29CQUNGLENBQUMsQ0FBQyxHQUFHLElBQUUsS0FBSyxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUEsQ0FBQzt3QkFDZCxJQUFBLGtDQUFjLEVBQUMsMkNBQXVCLEVBQUMsRUFBQyxLQUFLLEVBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUMsQ0FBQyxDQUFDO2dCQUNsSCxDQUFDO2dCQUVELDhCQUFNLFNBQVMsRUFBQyxLQUFLLElBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBUTtnQkFDcEMsOEJBQU0sU0FBUyxFQUFDLE9BQU8sSUFBRSxDQUFDLENBQUMsS0FBSyxDQUFRLENBQ25DLENBQ1osQ0FDUztZQUNiLEtBQUssQ0FBQyxXQUFXLENBQUEsQ0FBQyxDQUFBLG9CQUFDLFVBQVUsSUFBQyxTQUFTLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBRSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsdUJBQStCLENBQUEsQ0FBQyxDQUFBLElBQUk7WUFDM0csS0FBSyxDQUFDLFdBQVcsQ0FBQSxDQUFDO2dCQUNmO29CQUNJLG9CQUFDLGtCQUFXLElBQUMsR0FBRyxFQUFDLGlCQUFpQixFQUFDLEtBQUssRUFBRSxFQUFDLE1BQU0sRUFBQyxZQUFZLEVBQUM7d0JBQzNELG9CQUFDLE1BQU0sSUFDSCxFQUFFLEVBQUUsZUFBZSxFQUNuQixLQUFLLEVBQUMsU0FBUyxFQUNmLE9BQU8sRUFBQyxVQUFVLEVBQ2xCLE9BQU8sRUFBRSxHQUFRLEVBQUU7Z0NBQ2YsSUFBRyxLQUFLLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBQSw0QkFBUSxHQUFFLEVBQUM7b0NBQ2hDLGFBQWEsRUFBRSxDQUFDO2lDQUNuQjtxQ0FBSTtvQ0FDRCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQTtpQ0FDMUI7NEJBQ0wsQ0FBQyxDQUFBOzRCQUVELG9CQUFDLHFCQUFJLENBQUMsU0FBUyxPQUFFLENBQ1o7d0JBQ1Qsb0JBQUMsYUFBTSxJQUNILElBQUksRUFBRSxDQUFDLENBQUMsY0FBYzs0QkFDdEIsa0NBQWtDOzRCQUNsQyxPQUFPLEVBQUUsR0FBRSxFQUFFLENBQUEsaUJBQWlCLENBQUMsS0FBSyxDQUFDLHFCQUNyQixvQkFBb0Isc0JBQ25CLDBCQUEwQjs0QkFFM0Msb0JBQUMsa0JBQVcsSUFBQyxFQUFFLEVBQUMsb0JBQW9CLGtDQUEwQzs0QkFDOUUsb0JBQUMsb0JBQWE7Z0NBQ1Ysb0JBQUMsd0JBQWlCLElBQUMsRUFBRSxFQUFDLDBCQUEwQixxRkFFNUIsQ0FDUjs0QkFDaEIsb0JBQUMsb0JBQWE7Z0NBQ1Ysb0JBQUMsTUFBTSxJQUNILE9BQU8sRUFBRSxHQUFFLEVBQUU7d0NBQ1QsYUFBYSxFQUFFLENBQUE7b0NBQ25CLENBQUMsRUFDRCxLQUFLLEVBQUMsV0FBVyxFQUNqQixPQUFPLEVBQUMsVUFBVSxpQ0FHYjtnQ0FDVCxvQkFBQyxNQUFNLElBQ0gsT0FBTyxFQUFFLEdBQUUsRUFBRTt3Q0FDVCxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtvQ0FDNUIsQ0FBQyxFQUNELEtBQUssRUFBQyxTQUFTLEVBQ2YsT0FBTyxFQUFDLFdBQVcsa0NBR2QsQ0FFRyxDQUNYO3dCQUNSLEtBQUssQ0FBQyxXQUFXLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQSxDQUFDOzRCQUNwQixvQkFBQyxNQUFNLElBQ0gsRUFBRSxFQUFFLGFBQWEsRUFDakIsS0FBSyxFQUFDLFNBQVMsRUFDZixPQUFPLEVBQUMsVUFBVSxFQUNsQixRQUFRLEVBQUUsSUFBSSxFQUNkLE9BQU8sRUFBRSxHQUFRLEVBQUUsZ0RBQUEsT0FBQSxJQUFJLENBQUEsR0FBQTtnQ0FFdkIsb0JBQUMscUJBQUksQ0FBQyxJQUFJLE9BQUUsQ0FDUCxDQUVILENBQ2Y7Z0JBQ1AsQ0FBQyxDQUFBLElBQUk7WUFDTCxvQkFBQyxVQUFVLElBQUMsU0FBUyxFQUFDLGVBQWUsRUFBQyxTQUFTLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBRSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUM7Z0JBQzFFLFdBQVcsQ0FBQSxDQUFDLENBQUEsNkJBQUssR0FBRyxFQUFFLE9BQU87b0JBQUUsNENBQW9CO29CQUFBLGtDQUFPLE9BQU8sQ0FBUSxDQUFNLENBQUEsQ0FBQyxDQUFBLEVBQUU7Z0JBQ2xGLElBQUEsZ0JBQU0sRUFBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLENBQUEsQ0FBQyxJQUFFLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxDQUMzRCw2QkFBSyxHQUFHLEVBQUUsQ0FBQztvQkFBRSxrQ0FBTyxDQUFDLENBQVE7b0JBQUEsa0NBQU8sQ0FBQyxDQUFRLENBQU0sQ0FDdEQsQ0FBQyxLQUFLLEVBQUUsQ0FDQTtZQUNiLG9CQUFDLFVBQVUsT0FBRSxDQUNkLENBQUE7SUFDUCxDQUFDO0lBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxFQUFDLEVBQUUsRUFBYTtRQUN0QyxJQUFJLEVBQUMsUUFBUSxFQUFDLEdBQUcsSUFBQSx5QkFBVyxFQUFDLENBQUMsS0FBZSxFQUFDLEVBQUUsQ0FBQSxDQUFDLEVBQUMsUUFBUSxFQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0UsTUFBTSxRQUFRLEdBQUcsSUFBQSx5QkFBVyxHQUFFLENBQUM7UUFDL0IsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sNkJBQUssU0FBUyxFQUFDLGtCQUFrQjtZQUNwQyxvQkFBQyxNQUFNLElBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUMsY0FBYyxFQUNwQyxPQUFPLEVBQUUsR0FBRSxFQUFFO29CQUNULElBQUksUUFBUSxFQUFFO3dCQUNWLElBQUEsa0NBQWMsRUFBQywyQ0FBdUIsRUFBQyxFQUFDLEtBQUssRUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQzt3QkFDaEcsUUFBUSxDQUFDLDhCQUFXLENBQUMsb0JBQW9CLENBQUMsRUFBQyxpQkFBaUIsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUE7cUJBQ3BFO3lCQUFNO3dCQUNILElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO3dCQUMxRyxJQUFJLFdBQVcsRUFBRTs0QkFDYixXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7eUJBQ3ZCO3FCQUNKO2dCQUNMLENBQUM7O2dCQUNILG9CQUFDLHFCQUFJLENBQUMsV0FBVyxPQUFFO2dCQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQVUsQ0FDOUQsQ0FBQTtJQUNWLENBQUM7SUFFRCxTQUFTLG9CQUFvQixDQUFDLEtBQW1COztRQUM3QyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3hCLElBQUksRUFBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUMsR0FDMUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLElBQUksV0FBVyxHQUFHLElBQUEsa0NBQWMsR0FBRSxDQUFDLFdBQVcsQ0FBQztRQUMvQyxNQUFNLFFBQVEsR0FBRyxJQUFBLHlCQUFXLEdBQUUsQ0FBQztRQUMvQixJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUM7UUFDM0MsSUFBQSxpQkFBUyxFQUFDLEdBQUUsRUFBRTtZQUNWLElBQUksYUFBYSxHQUFDLEdBQUUsRUFBRTtnQkFDbEIsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUMxRCxJQUFHLE1BQU0sRUFBQztvQkFDTixJQUFBLG9DQUFnQixFQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsWUFBWTtvQkFDdkMsYUFBYTtvQkFDYixNQUFNLENBQUMsZ0JBQWdCLElBQUcsSUFBSSxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFOzBCQUM1RCxRQUFRLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQzlELENBQUM7aUJBQ0w7Z0JBQ0QsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUN4RCxJQUFHLEtBQUssRUFBQztvQkFDTCxJQUFBLG9DQUFnQixFQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsWUFBWTtvQkFDdEMsYUFBYTtvQkFDYixLQUFLLENBQUMsbUJBQW1CLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxFQUFFOzBCQUNqRSxRQUFRLENBQUMsZUFBZSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQ3pGLENBQUM7aUJBQ0w7WUFDTCxDQUFDLENBQUE7WUFDRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ2pELGFBQWEsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sR0FBRSxFQUFFO2dCQUNQLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDeEQsQ0FBQyxDQUFBO1FBQ0wsQ0FBQyxDQUFDLENBQUE7UUFDRixnREFBZ0Q7UUFDaEQsSUFBSSxNQUFVLENBQUE7UUFDZCxJQUFJLFFBQVksQ0FBQTtRQUNoQixJQUFJLG1CQUFtQixHQUFHLEdBQUUsRUFBRTtZQUMxQixJQUFJLEVBQUMsY0FBYyxFQUFDLEdBQUcsSUFBQSxrQ0FBYyxFQUFDLDhDQUEwQixFQUFFLEVBQUMsU0FBUyxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUMsaURBQTZCLEVBQUUsS0FBSyxFQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO1lBQy9JLElBQUcsY0FBYyxFQUFDO2dCQUNkLHlCQUF5QixDQUFDLGNBQWMsQ0FBQyxDQUFBO2FBQzVDO1FBQ0wsQ0FBQyxDQUFBO1FBQ0QsSUFBSSxVQUFVLEdBQWtCLENBQUMsV0FBVyxFQUFDLGNBQWMsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUNuRSxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQSxFQUFFO1lBQzdDLElBQUEscUNBQWlCLEVBQUMsRUFBQyxFQUFFLEVBQUUsTUFBTSxFQUFDLElBQUk7Z0JBQzlCLEdBQUcsRUFBQyxDQUNBLENBQVksRUFDWixZQUEwRCxFQUMxRCxRQUF1QixFQUN2QixXQUFxRixFQUNyRixXQUFzQixFQUN6QixFQUFFO29CQUNDLFFBQVEsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUMsUUFBUSxDQUFBLENBQUMsQ0FBQSxZQUFZLENBQUMsT0FBTyxDQUFBLENBQUMsQ0FBQSxJQUFBLDJDQUF1QixFQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3ZJLENBQUM7YUFDSixDQUFDLENBQUE7UUFDTixDQUFDLENBQUMsQ0FBQTtRQUNGLG1HQUFtRztRQUNuRyxJQUFJLGdCQUFnQixHQUFHLE1BQUEsVUFBVSxDQUFDLFFBQVEsMENBQUUsZ0JBQWdCLENBQUM7UUFDN0QsT0FBTyxDQUNIO1lBQ0ksb0JBQUMsYUFBTSxJQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQSxDQUFDLENBQUEsV0FBVyxDQUFBLENBQUMsQ0FBQSxTQUFTO2dCQUM3RCxvQkFBQyxjQUFPO29CQUNKLG9CQUFDLGlCQUFpQixJQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFdBQVcsSUFBSSxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXLEdBQUcsQ0FDbEc7Z0JBQ1YsNkJBQUssRUFBRSxFQUFDLGNBQWMsR0FBTyxDQUN4QjtZQUNUO2dCQUNJLG9CQUFDLFlBQUssSUFBQyxTQUFTLEVBQUMsWUFBWSxxQkFBa0IsY0FBYyxzQkFBb0IsUUFBUSxDQUFDLGdCQUFnQixDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUEsQ0FBQyxDQUFBLElBQUk7b0JBQy9HLElBQUksQ0FBQyxJQUFJLENBQUEsQ0FBQyxDQUFBO3dCQUNQLG9CQUFDLFVBQVUsSUFBQyxTQUFTLEVBQUMsTUFBTSwwQkFBaUM7d0JBQzdELG9CQUFDLGtCQUFXLFFBQ1gsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUEsRUFBRSxDQUNsQixvQkFBQyxNQUFNLElBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFFLGNBQWMsQ0FBQSxDQUFDLENBQUEsV0FBVyxDQUFBLENBQUMsQ0FBQSxVQUFVLEVBQUUsT0FBTyxFQUM1RSxHQUFFLEVBQUUsQ0FBQSxRQUFRLENBQUMsOEJBQVcsQ0FBQyxlQUFlLENBQUMsRUFBQyxjQUFjLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxJQUNqRSxJQUFJLENBQVUsQ0FDcEIsQ0FDYSxDQUNaLENBQUEsQ0FBQyxDQUFBLElBQUk7b0JBQ1YsZ0JBQWdCLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQSxDQUFDLENBQUEsb0JBQUMsZ0JBQWdCLElBQUMsRUFBRSxFQUFDLGdCQUFnQixHQUFFO29CQUM3RCxnQkFBZ0IsQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFBLENBQUMsQ0FBQSxvQkFBQyxvQkFBb0IsSUFBQyxTQUFTLEVBQUUsVUFBVSxHQUFHO29CQUNyRSxvQkFBQywwQ0FBMEMsSUFBQyxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEdBQUc7b0JBQ2xJLGdCQUFnQixDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUEsQ0FBQyxDQUFBLG9CQUFDLGdCQUFnQixJQUFDLEVBQUUsRUFBQyxnQkFBZ0IsR0FBRSxDQUMxRDtnQkFDUixvQkFBQyxVQUFHLElBQUMsRUFBRSxFQUFDLG1CQUFtQixFQUFDLEtBQUssRUFBQyxTQUFTLGdCQUFZLEtBQUssRUFBQyxPQUFPLEVBQUUsbUJBQW1CO29CQUNyRixvQkFBQyxxQkFBSSxDQUFDLGVBQWUsT0FBRyxDQUN0QjtnQkFDTixvQkFBQyxVQUFHLElBQUMsRUFBRSxFQUFDLGtCQUFrQixFQUFDLEtBQUssRUFBQyxTQUFTLGdCQUFZLEtBQUssRUFBQyxPQUFPLEVBQUUsbUJBQW1CO29CQUNwRixvQkFBQyxxQkFBSSxDQUFDLGlCQUFpQixPQUFHLENBQ3hCO2dCQUNOLG9CQUFDLFVBQUcsSUFBQyxFQUFFLEVBQUMsa0JBQWtCLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUMsV0FBVyxnQkFBWSxNQUFNO29CQUM3RSxvQkFBQyxxQkFBSSxDQUFDLFVBQVUsT0FBRzs0QkFFakI7Z0JBQ04sb0JBQUMsVUFBRyxJQUFDLEVBQUUsRUFBQyxpQkFBaUIsRUFBQyxPQUFPLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQyxXQUFXLGdCQUFZLE1BQU07b0JBQzVFLG9CQUFDLHFCQUFJLENBQUMsY0FBYyxPQUFHOzRCQUVyQjtnQkFDTiw2QkFBSyxTQUFTLEVBQUMsMEJBQTBCLEdBQU87Z0JBQy9DLFFBQVEsQ0FBQyxtQkFBbUIsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQSxvQkFBQyxpQ0FBaUMsSUFBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsUUFBUSxDQUFDLG1CQUFtQixHQUFHLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FDM0osQ0FDUixDQUNOLENBQUM7SUFDTixDQUFDO0lBRUQsU0FBZ0IsUUFBUSxDQUFDLEtBQWdDO1FBQ3JELE9BQU8sS0FBSyxDQUFDLEtBQUssSUFBRSxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssSUFBRSxFQUFFLENBQUEsQ0FBQyxDQUFBLDhCQUFNLFNBQVMsRUFBQyxjQUFjO1lBQ3JFLEtBQUssQ0FBQyxNQUFNLENBQUEsQ0FBQyxDQUFBLDhCQUFNLFNBQVMsRUFBQyxpQkFBaUIsSUFBRSxLQUFLLENBQUMsTUFBTSxDQUFRLENBQUEsQ0FBQyxDQUFBLElBQUk7WUFDekUsOEJBQU0sU0FBUyxFQUFDLGdCQUFnQixJQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQVEsQ0FDOUQsQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFBO0lBQ2hCLENBQUM7SUFMRCw0QkFLQztJQUVELE1BQU0saUJBQWlCLEdBQWUsQ0FBQyxTQUFTLEVBQUMsY0FBYyxFQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFFLElBQUksV0FBVyxHQUFHO1FBQ2QsRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFXLENBQUMsRUFBQyxDQUFDLEVBQWlCLEVBQUMsRUFBRSxDQUFBLEVBQUUsQ0FBQyxhQUFhLElBQUUsSUFBSSxFQUFXO1FBQ2hGLEVBQUMsTUFBTSxFQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxFQUFpQixFQUFDLEVBQUUsQ0FBQSxFQUFFLENBQUMsYUFBYSxJQUFFLGNBQWMsRUFBQztRQUNoRixFQUFDLE1BQU0sRUFBQyxZQUFZLEVBQUksQ0FBQyxFQUFDLENBQUMsRUFBaUIsRUFBQyxFQUFFLENBQUEsRUFBRSxDQUFDLGFBQWEsSUFBRSxPQUFPLEVBQVE7S0FDbkYsQ0FBQztJQUVGLFdBQVcsQ0FBQyxJQUFJLENBQ1osRUFBQyxNQUFNLEVBQUMsT0FBTyxFQUFFLENBQUMsRUFBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLENBQUEsQ0FBQyxFQUFFLENBQUEsRUFBRSxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUUsRUFBQyxDQUFDLENBQWdCLEVBQUMsRUFBRSxDQUFBLElBQUksQ0FBQyxFQUFFLENBQ3BHLENBQUE7SUFFRCxTQUFnQixnQ0FBZ0MsQ0FBQyxLQUtoRDtRQUNHLE1BQU0sRUFBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUMsR0FBRyxLQUFLLENBQUM7UUFDOUQsTUFBTSxFQUFFLEdBQUMsTUFBTSxHQUFDLFdBQVcsQ0FBQztRQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFBLGlDQUFhLEdBQUUsQ0FBQztRQUNuQyxNQUFNLEtBQUssR0FBTyxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUUsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsRUFBQyxNQUFNLENBQUMsV0FBVyxDQUFVLEVBQVUsQ0FBQyxDQUFDLHVFQUF1RTtRQUMxTCxJQUFJLEdBQUcsR0FBRyxJQUFBLGtDQUFjLEdBQUUsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQzNELE1BQU0sUUFBUSxHQUFHLElBQUEseUJBQVcsR0FBRSxDQUFDO1FBQy9CLElBQUEsaUJBQVMsRUFBQyxHQUFFLEVBQUU7WUFDVixJQUFBLHNEQUFrQyxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLElBQUEsa0NBQWMsRUFBQyxLQUFLLENBQUMsQ0FBQTtRQUN6QixDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUEscUNBQWlCLEVBQUMsRUFBQyxFQUFFLEVBQUUsTUFBTSxFQUFDLElBQUk7WUFDOUIsR0FBRyxFQUFDLENBQ0EsQ0FBWSxFQUNaLGFBQTJELEVBQzNELFFBQXVCLEVBQ3ZCLFdBQXFGLEVBQ3JGLFdBQXNCLEVBQ3pCLEVBQUU7Z0JBQ0MsZ0VBQWdFO2dCQUNoRSwyREFBMkQ7Z0JBQzNELDRCQUE0QjtnQkFDNUIsSUFBRyxDQUFDLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFDO29CQUNwRSxRQUFRLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFDLElBQUEsMkNBQXVCLEVBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztpQkFDeEc7WUFDTCxDQUFDO1NBRUosQ0FBQyxDQUFBO1FBQ0YsT0FBTyxvQkFBQyxlQUFRLElBQUMsR0FBRyxFQUFFLFdBQVc7WUFDN0Isb0JBQUMsZ0JBQVMsUUFDTCxHQUFHLENBQUEsQ0FBQztnQkFDRDtvQkFDSSxvQkFBQyxZQUFZLElBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRztvQkFDeEIsVUFBVSxDQUFDLGVBQTZCLENBQUMsSUFBRSxjQUFjLENBQUEsQ0FBQzt3QkFDdkQsb0JBQUMsb0JBQW9CLElBQUMsVUFBVSxFQUFFLFVBQVUsR0FBRzt3QkFDbkQsQ0FBQzs0QkFDRyxvQkFBQyw0Q0FBNEMsSUFBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBRTlEO2dCQUNQLENBQUMsQ0FBQSxJQUFJLENBQ0c7WUFDWixvQkFBQyxnQkFBUyxRQUNMLEtBQUssQ0FDRTtZQUNaLG9CQUFDLGdCQUFTO2dCQUNOLG9CQUFDLE1BQU0sSUFBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFFLEVBQUUsQ0FDekIsUUFBUSxDQUFDLDhCQUFXLENBQUMsa0JBQWtCLENBQUMsRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsSUFFcEUsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUNsQixDQUNELENBQ0wsQ0FBQTtJQUNmLENBQUM7SUF6REQsNEVBeURDO0lBRUQsU0FBZ0IsY0FBYyxDQUFDLEtBUzlCO1FBQ0csTUFBTSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsR0FBRyxJQUFBLGdCQUFRLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsTUFBTSxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBQyxHQUFHLEtBQUssQ0FBQztRQUMzRCxJQUFJLFVBQVUsR0FBRyxJQUFBLGlDQUFhLEdBQUUsQ0FBQztRQUNqQyxJQUFJLGlCQUFpQixHQUFHLElBQUEsZ0JBQU0sRUFBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUMsRUFBRSxDQUFBLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNwSCxNQUFNLFFBQVEsR0FBRyxJQUFBLHlCQUFXLEdBQUUsQ0FBQztRQUMvQixPQUFPLG9CQUFDLFlBQUssSUFBQyxTQUFTLEVBQUMsT0FBTyxFQUFDLEtBQUssRUFBRSxFQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBQztZQUMxRSw2QkFBSyxTQUFTLEVBQUMsbUJBQW1CO2dCQUM5Qiw2QkFBSyxTQUFTLEVBQUMsT0FBTzs7b0JBQVEsT0FBTyxDQUFPO2dCQUM1Qyw2QkFBSyxTQUFTLEVBQUMsZUFBZSxJQUFFLEtBQUssQ0FBQyxhQUFhLENBQU8sQ0FDeEQ7WUFDTiw2QkFBSyxTQUFTLEVBQUMsbUJBQW1CO2dCQUM5Qiw2QkFBSyxTQUFTLEVBQUMsT0FBTyxJQUFFLEtBQUssQ0FBQyxLQUFLLENBQU8sQ0FVeEM7WUFDTCxLQUFLLENBQUMsWUFBWSxJQUFFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFlBQVksSUFBRSxjQUFjLENBQUEsQ0FBQztnQkFDbkYsb0JBQUMsWUFBSyxJQUFDLFNBQVMsRUFBQywwQkFBMEI7b0JBQ3ZDO3dCQUNJLDZCQUFLLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsR0FBRzt3QkFDNUIsNkJBQUssS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxHQUFHO3dCQUM1Qiw2QkFBSyxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEdBQUcsQ0FDckI7b0JBQ1YsaUJBQWlCLENBQUEsQ0FBQzt3QkFDZixvQkFBQyxnQkFBUyxJQUFDLEtBQUssRUFBRSxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUM7NEJBQ2xDLG9CQUFDLGVBQVEsSUFBQyxTQUFTLEVBQUMsVUFBVTtnQ0FDMUIsb0JBQUMsZ0JBQVMsb0JBQXNCO2dDQUNoQyxvQkFBQyxnQkFBUyxnQkFBa0I7Z0NBQzVCLG9CQUFDLGdCQUFTLGNBQWdCLENBQ25CLENBQ0g7d0JBQ2hCLENBQUMsQ0FBQSxJQUFJO29CQUNMLG9CQUFDLGdCQUFTO3dCQUNOOzRCQUNDLElBQUEsZ0JBQU0sRUFBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUMsRUFBRSxDQUFBLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUMsRUFBRSxDQUMxRyxvQkFBQyxnQ0FBZ0MsSUFDN0IsR0FBRyxFQUFFLFdBQVcsRUFDaEIsV0FBVyxFQUFFLFdBQVcsRUFDeEIsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUM5QixhQUFhLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQzFDLFVBQVUsRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsQ0FBbUIsR0FDMUUsQ0FDTCxDQUFDLEtBQUssRUFBRTs0QkFDUixVQUFVLENBQUMscUJBQXFCLENBQUEsQ0FBQztnQ0FDOUIsb0JBQUMsZUFBUSxJQUFDLFNBQVMsRUFBQyxnQkFBZ0I7b0NBQ2hDLG9CQUFDLGdCQUFTLElBQUMsT0FBTyxFQUFFLENBQUM7d0NBQ2pCLG9CQUFDLE1BQU0sSUFDSCxPQUFPLEVBQUMsV0FBVyxFQUNuQixLQUFLLEVBQUMsU0FBUyxFQUNmLE9BQU8sRUFBRSxHQUFFLEVBQUUsQ0FDVCxJQUFBLGlDQUFhLEVBQUMsT0FBTyxFQUFDLENBQUMsU0FBbUIsRUFBQyxFQUFFO2dEQUN6QyxRQUFRLENBQUMsOEJBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFDLEtBQUssRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQzs0Q0FDcEYsQ0FBQyxDQUFDOzRDQUdOLG9CQUFDLHFCQUFJLENBQUMsR0FBRyxPQUFFLENBQ04sQ0FDRCxDQUNMO2dDQUNmLENBQUMsQ0FBQSxJQUFJLENBQ0YsQ0FDSyxDQUNSLENBQUEsQ0FBQztnQkFDVCxvQkFBQyxZQUFLO29CQUNGLG9CQUFDLGdCQUFTLElBQUMsS0FBSyxFQUFFLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBQzt3QkFDbEMsb0JBQUMsZUFBUSxJQUFDLFNBQVMsRUFBQyxVQUFVLElBQ3pCLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFnQyxFQUFFLENBQVEsRUFBQyxFQUFFLENBQzNELG9CQUFDLGdCQUFTLElBQUMsR0FBRyxFQUFFLENBQUMsSUFDWixTQUFTLENBQUMsTUFBTSxDQUNULENBQ2YsQ0FDTSxDQUNILENBQ1IsQ0FFSixDQUFBO0lBQ1osQ0FBQztJQTVGRCx3Q0E0RkM7SUFDRCxTQUFnQixvQkFBb0IsQ0FBQyxLQUE2QjtRQUM5RCxNQUFNLEVBQUMsVUFBVSxFQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE9BQU8sNkJBQUssU0FBUyxFQUFDLGNBQWM7WUFDaEM7Z0JBQUssb0JBQUMsUUFBUSxJQUFDLE1BQU0sRUFBQyxtQkFBbUIsRUFBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQU07WUFDekU7Z0JBQUssb0JBQUMsUUFBUSxJQUFDLE1BQU0sRUFBQyxPQUFPLEVBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFNO1lBQzdEO2dCQUFLLG9CQUFDLFFBQVEsSUFBQyxNQUFNLEVBQUMsT0FBTyxFQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBTTtZQUM3RDtnQkFBSyxvQkFBQyxRQUFRLElBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQU07WUFDOUQ7Z0JBQUssb0JBQUMsUUFBUSxJQUFDLE1BQU0sRUFBQyxPQUFPLEVBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFNLENBQzNELENBQUE7SUFDVixDQUFDO0lBVEQsb0RBU0M7SUFFRCxTQUFnQiw0Q0FBNEMsQ0FBQyxLQUFlO1FBQ3hFLE1BQU0sRUFBQyxHQUFHLEVBQUMsR0FBRyxLQUFLLENBQUM7UUFDcEIsT0FBTztZQUNILDZCQUFLLFNBQVMsRUFBQyxVQUFVO2dCQUNyQixvQkFBQyxRQUFRLElBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxDQUN6QyxDQUNKLENBQUE7SUFDVixDQUFDO0lBUEQsb0dBT0M7SUFFRCxTQUFnQixZQUFZLENBQUMsS0FBZTtRQUN4QyxNQUFNLEVBQUMsR0FBRyxFQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLE9BQU87WUFDSCw2QkFBSyxTQUFTLEVBQUMsZUFBZTtnQkFBRSxHQUFHLENBQUMsUUFBUTs7Z0JBQUcsR0FBRyxDQUFDLFlBQVk7O2dCQUFFLG9CQUFDLFFBQVEsSUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHOztnQkFBQyxvQkFBQyxRQUFRLElBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLFlBQVksR0FBRztvQkFBTztZQUNySztnQkFDSSxvQkFBQyxRQUFRLElBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sR0FBRztnQkFDOUMsb0JBQUMsUUFBUSxJQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxRQUFRLEdBQUc7Z0JBQ2xELG9CQUFDLFFBQVEsSUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHO2dCQUMxQyxvQkFBQyxRQUFRLElBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLE9BQU8sR0FBRztnQkFDaEQsb0JBQUMsUUFBUSxJQUFDLE1BQU0sRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxVQUFVLEdBQUcsQ0FDcEQ7WUFDTiw2QkFBSyxTQUFTLEVBQUMsbUJBQW1CLElBQzdCLEdBQUcsQ0FBQyxhQUFhLENBQ2hCLENBQ0osQ0FBQTtJQUNWLENBQUM7SUFmRCxvQ0FlQztJQUVELFNBQWdCLG9CQUFvQjtRQUNoQyxJQUFJLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFDLEdBQUcsSUFBQSxrQ0FBYyxHQUFFLENBQUM7UUFDeEUsSUFBSSxFQUFDLElBQUksRUFBQyxHQUFHLElBQUEseUJBQVcsRUFBQyxDQUFDLEtBQWUsRUFBQyxFQUFFLENBQUEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLElBQUksb0JBQW9CLEdBQUcsSUFBQSwyQ0FBdUIsR0FBRSxDQUFBO1FBQ3BELE1BQU0sUUFBUSxHQUFHLElBQUEseUJBQVcsR0FBRSxDQUFDO1FBQy9CLE1BQU0sa0JBQWtCLEdBQUc7WUFDdkIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFBO1FBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBQSxrQ0FBZSxHQUFFLENBQUM7UUFDckMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsR0FBRyxJQUFBLGdCQUFRLEVBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5RCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFHLGtCQUFrQixDQUFDLENBQUM7UUFDdkQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sQ0FDSDtZQUNJLG9CQUFDLGFBQU0sSUFBQyxRQUFRLEVBQUMsT0FBTztnQkFDcEIsb0JBQUMsY0FBTztvQkFDSixvQkFBQyxVQUFVLElBQUMsT0FBTyxFQUFDLElBQUksbUJBRVg7b0JBU1osTUFBTSxDQUFBLENBQUM7d0JBQ0o7NEJBQ0ksb0JBQUMsaUJBQVUsSUFDUCxLQUFLLEVBQUMsU0FBUyxFQUNmLE9BQU8sRUFBRSxHQUFFLEVBQUU7b0NBQ1QsSUFBQSxrQ0FBZSxHQUFFLENBQUE7Z0NBQ3JCLENBQUM7Z0NBRUQsb0JBQUMscUJBQUksQ0FBQyxPQUFPLE9BQUUsQ0FDTixDQUNkO3dCQUNQLENBQUMsQ0FBQSxJQUFJLENBQ0MsQ0FDTDtZQUNULDZCQUFLLFNBQVMsRUFBQyxjQUFjO2dCQUN4QixJQUFJLENBQUMsSUFBSSxDQUFBLENBQUMsQ0FBQTtvQkFDUCxvQkFBQyxVQUFVLHFCQUF3QjtvQkFDbkMsb0JBQUMsTUFBTSxJQUFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDLFdBQVcsRUFDeEMsT0FBTyxFQUFFLEdBQUUsRUFBRSxDQUFBLFFBQVEsQ0FBQyw4QkFBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxnQkFHaEQsQ0FDUCxDQUFBLENBQUMsQ0FBQSxJQUFJO2dCQUNYLDZCQUFLLFNBQVMsRUFBQyxnQkFBZ0I7b0JBQzNCLGtHQUErRDtvQkFDL0Q7d0JBQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7O3dCQUFVLFVBQVU7O3dCQUFhLFVBQVUsQ0FBTyxDQUNuRjtnQkFDTCxJQUFBLGdCQUFNLEVBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFDLEVBQUUsQ0FDL0Msb0JBQUMsY0FBYyxJQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFHLENBQzFMLENBQUMsS0FBSyxFQUFFLENBQ1AsQ0FDUCxDQUNOLENBQUM7SUFDTixDQUFDO0lBNURELG9EQTREQztJQUVELFNBQWdCLFdBQVcsQ0FBQyxLQUF1QjtRQUMvQyxPQUFPLGdDQUNGLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQSxFQUFFLENBQUE7WUFBSSxvQkFBQyxVQUFVLFFBQUUsQ0FBQyxDQUFjLENBQUssQ0FBQyxDQUMxRCxDQUFDO0lBQ1YsQ0FBQztJQUpELGtDQUlDO0lBRUQsU0FBZ0Isb0JBQW9CLENBQUMsS0FBOEI7UUFDL0QsTUFBTSxRQUFRLEdBQUMsSUFBQSx5QkFBVyxHQUFFLENBQUM7UUFDN0IsT0FBTyxvQkFBQyxZQUFLLElBQUMsU0FBUyxFQUFDLFlBQVk7WUFDL0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUEsQ0FBQztnQkFDYjtvQkFDSSxvQkFBQyxVQUFVLHFEQUF3RDtvQkFDbkUsb0JBQUMsVUFBVSx3QkFBMkI7b0JBQ3RDLG9CQUFDLFdBQVcsSUFBQyxNQUFNLEVBQUU7NEJBQ2pCLGlGQUFpRjs0QkFDakYsaUZBQWlGOzRCQUNqRiw4SEFBOEg7NEJBQzlILCtDQUErQzt5QkFDbEQsR0FBSSxDQUNOO2dCQUNILENBQUMsQ0FBQTtvQkFDRyxvQkFBQyxVQUFVLGtEQUFxRCxDQUNqRTtZQUVQLG9CQUFDLE1BQU0sSUFDSCxPQUFPLEVBQUMsV0FBVyxFQUNuQixLQUFLLEVBQUMsV0FBVyxFQUNqQixPQUFPLEVBQUUsR0FBRSxFQUFFLEdBQUUsSUFBQSxrQ0FBZSxHQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUVuQyxpREFBeUI7O2dCQUFDLG9CQUFDLHFCQUFJLENBQUMsT0FBTyxPQUFFLENBQ3BDO1lBQ1Qsb0JBQUMsTUFBTSxJQUNILE9BQU8sRUFBQyxXQUFXLEVBQ25CLEtBQUssRUFBQyxTQUFTLEVBQ2YsT0FBTyxFQUFFLEdBQUUsRUFBRSxDQUFBLFFBQVEsQ0FBQyw4QkFBVyxDQUFDLFVBQVUsQ0FBQyxFQUFDLE1BQU0sRUFBQyxZQUFZLEVBQUUsS0FBSyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUM7Z0JBRWhGLCtDQUF1Qjs7Z0JBQUMsb0JBQUMscUJBQUksQ0FBQyxJQUFJLE9BQUUsQ0FDL0IsQ0FDTCxDQUFBO0lBQ1osQ0FBQztJQWpDRCxvREFpQ0M7SUFFRCxxQkFBcUI7SUFDckIsSUFBSSxhQUFhLEdBQXFCLEVBQUUsQ0FBQztJQUN6QyxJQUFJLGNBQWMsR0FBQztRQUNmLGFBQWE7UUFDYixJQUFJLEVBQUMsZUFBZTtRQUNwQixjQUFjLEVBQUMsRUFBRTtLQUNwQixDQUFBO0lBRUQsU0FBZ0IsVUFBVTtRQUN0QixNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLElBQUEsZ0JBQVEsRUFBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEUsSUFBSSxFQUFDLFdBQVcsRUFBQyxHQUFHLElBQUEseUJBQVcsRUFBQyxDQUFDLEtBQWUsRUFBQyxFQUFFLENBQUEsQ0FBQyxFQUFDLFdBQVcsRUFBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUMvRixNQUFNLGdCQUFnQixHQUFHO1lBQ3JCLE9BQU8sQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFBO1FBQ0QsSUFBQSxpQkFBUyxFQUFDLEdBQUUsRUFBRTtZQUNWLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNwRCxPQUFPLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN4RSxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUE7UUFDTCxPQUFPLFdBQVcsQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFBLENBQUMsQ0FBQSxDQUFDLElBQUksQ0FBQyxDQUFBLENBQUM7WUFDM0IsNkJBQUssU0FBUyxFQUFDLHVCQUF1Qjs7Z0JBQXFFLElBQUksQ0FBTztZQUMxSCxDQUFDO2dCQUNHLDZCQUFLLFNBQVMsRUFBQyxhQUFhLGFBQVEsQ0FBQTtJQUM1QyxDQUFDO0lBZEQsZ0NBY0M7SUFFRCxTQUFnQixTQUFTO1FBQ3JCLElBQUksRUFBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBQyxHQUFHLElBQUEseUJBQVcsRUFBQyxDQUFDLEtBQWUsRUFBQyxFQUFFLENBQUEsK0NBQUssS0FBSyxDQUFDLFFBQVEsR0FBSyxLQUFLLENBQUMsSUFBSSxHQUFLLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDL0csSUFBRyxDQUFDLFVBQVUsRUFBQztZQUNYLE9BQU8sb0JBQUMsb0JBQW9CLElBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFBO1NBQzdDO2FBQUssSUFBRyxLQUFLLElBQUUsSUFBSSxFQUFDO1lBQ2pCLE9BQU8sb0JBQUMsb0JBQW9CLE9BQUcsQ0FBQTtTQUNsQzthQUFJO1lBQ0QsT0FBTyxvQkFBQyxvQkFBb0IsSUFBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUE7U0FDL0M7SUFDTCxDQUFDO0lBVEQsOEJBU0M7SUFFRCxTQUFTLHVCQUF1QixDQUFDLE1BQVM7UUFDdEMsTUFBTSxrQkFBa0IsR0FBRztZQUN2QixTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUE7UUFDRCxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxHQUFHLElBQUEsZ0JBQVEsRUFBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUcsa0JBQWtCLENBQUMsQ0FBQztRQUN2RCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDdkQsTUFBTSxlQUFlLEdBQUMsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFFLFVBQVUsRUFBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQyxDQUFDO1FBQy9FLE9BQU8sQ0FDSDtZQUNJLG9CQUFDLGFBQU0sSUFBQyxRQUFRLEVBQUMsT0FBTztnQkFDcEIsb0JBQUMsVUFBVSxJQUFDLE9BQU8sRUFBQyxJQUFJLEVBQUMsS0FBSyxFQUFFLEVBQUMsTUFBTSxFQUFDLEVBQUUsRUFBQyw0QkFFOUIsQ0FDUjtZQUNUO2dCQUNJLG9CQUFDLFlBQUssSUFBQyxLQUFLLEVBQUUsRUFBQyxNQUFNLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFDLEVBQUUsRUFBQztvQkFDeEQsaUNBQ0ssTUFBTSxDQUFBLENBQUM7d0JBQ0o7NEJBQ0ksb0JBQUMsVUFBVSxJQUFDLFNBQVMsRUFBQyxHQUFHLEVBQUMsS0FBSyxFQUFFLGVBQWU7O2dDQUU1Qyw4QkFBTSxLQUFLLEVBQUUsRUFBQyxPQUFPLEVBQUMsS0FBSyxFQUFDO29DQUN4QixvQkFBQyxNQUFNLElBQ0gsS0FBSyxFQUFDLFNBQVMsRUFDZixPQUFPLEVBQUMsV0FBVyxFQUNuQixPQUFPLEVBQUUsR0FBRSxFQUFFOzRDQUNULElBQUEsa0NBQWUsR0FBRSxDQUFBO3dDQUNyQixDQUFDO3dDQUVELG9CQUFDLHFCQUFJLENBQUMsT0FBTyxPQUFFLENBQ1YsQ0FDTixDQUNFLENBQ2Q7d0JBQ1AsQ0FBQzs0QkFDRyxvQkFBQyxVQUFVLElBQUMsU0FBUyxFQUFDLEdBQUcsRUFBQyxLQUFLLEVBQUUsZUFBZSwwSEFFbkMsQ0FFZixDQUNGLENBQ0wsQ0FDUixDQUNOLENBQUM7SUFDTixDQUFDO0lBRUQsU0FBZ0IsZUFBZTtRQUMzQixJQUFJLEVBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsR0FBRyxJQUFBLHlCQUFXLEVBQUMsQ0FBQyxLQUFlLEVBQUMsRUFBRSxDQUFBLCtDQUFLLEtBQUssQ0FBQyxRQUFRLEdBQUssS0FBSyxDQUFDLElBQUksR0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQy9HLElBQUcsQ0FBQyxVQUFVLEVBQUM7WUFDWCxPQUFPLG9CQUFDLG9CQUFvQixJQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQTtTQUM3QzthQUFLLElBQUcsS0FBSyxJQUFFLElBQUksRUFBQztZQUNqQixPQUFPLG9CQUFDLG9CQUFvQixPQUFHLENBQUE7U0FDbEM7YUFBSTtZQUNELE9BQU8sb0JBQUMsb0JBQW9CLElBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFBO1NBQy9DO0lBQ0wsQ0FBQztJQVRELDBDQVNDO0lBRUQsU0FBc0IseUJBQXlCOztZQUMzQyxJQUFHO2dCQUNDLE1BQU0sT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7YUFDdEM7WUFBQSxPQUFNLEdBQUcsRUFBQztnQkFDUCxNQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7YUFDYjtZQUNELFFBQVEsQ0FBQyxNQUFNLENBQ1gsb0JBQUMsdUJBQXVCLE9BQUUsRUFDMUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FDekMsQ0FBQTtRQUNMLENBQUM7S0FBQTtJQVZELDhEQVVDO0lBRUQsU0FBc0IseUJBQXlCLENBQUMsSUFBb0U7O1lBQ2hILDBDQUEwQztZQUMxQyxrQ0FBa0M7WUFDbEMsMkJBQTJCO1lBQzNCLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBQSx5Q0FBc0IsRUFBQyxJQUFJLENBQUMsQ0FBQTtZQUNoRCxJQUFHO2dCQUNDLE1BQU0sT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7YUFDdEM7WUFBQSxPQUFNLEdBQUcsRUFBQztnQkFDUCxNQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7YUFDYjtZQUNELFFBQVEsQ0FBQyxNQUFNLENBQ1gsb0JBQUMsZ0NBQWUsSUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSw4QkFBVyxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQSxzQkFBc0IsQ0FBQSxDQUFDLENBQUEsMEJBQTBCO2dCQUNySSxvQkFBQyxVQUFVLE9BQUU7Z0JBQ2Isb0JBQUMsU0FBUyxPQUFFLENBQ0UsRUFDbEIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FDekMsQ0FBQTtRQUNMLENBQUM7S0FBQTtJQWpCRCw4REFpQkM7SUFFRCxJQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBQztRQUM3QiwwQkFBMEI7UUFDMUIsTUFBTSxDQUFDLHlCQUF5QixHQUFHLHlCQUF5QixDQUFDO1FBQzdELDBCQUEwQjtRQUMxQixNQUFNLENBQUMseUJBQXlCLEdBQUcseUJBQXlCLENBQUM7S0FDaEU7SUFHRCxTQUFTLFlBQVk7UUFDakIsSUFBRyxPQUFPLGdCQUFnQixLQUFLLFdBQVcsRUFBQztZQUN2QyxPQUFPO1NBQ1Y7UUFDRCxJQUFJLEVBQUUsR0FBRyxJQUFJLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFDLElBQUksSUFBSSxHQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFDLElBQUksQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUMsR0FBRyxDQUFDLENBQUEsQ0FBQSw0QkFBNEI7UUFDM0gsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQztRQUN0QixjQUFjLENBQUMsSUFBSSxHQUFDLElBQUksQ0FBQztRQUN6QixJQUFJLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqQyxFQUFFLENBQUMsU0FBUyxHQUFDLFVBQVMsRUFBRTtZQUNwQixJQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFFLEtBQUssRUFBQztnQkFDbEIsSUFBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDO29CQUMxQixhQUFhLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUM7aUJBQy9CO2dCQUNELGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7YUFDL0I7WUFDRCxJQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFFLFFBQVEsRUFBQztnQkFDckIsT0FBTyxhQUFhLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNwQztZQUNELElBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUUsTUFBTSxFQUFDO2dCQUNuQixhQUFhLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBQyxDQUFDLENBQUM7Z0JBQzVCLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBQyxHQUFHLEVBQUMsS0FBSyxFQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDO2FBQ3ZDO1lBQ0QsY0FBYyxDQUFDLGNBQWMsR0FBQyxJQUFBLGdCQUFNLEVBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUEsRUFBRSxJQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2RixNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQztRQUNGLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBQyxHQUFHLEVBQUMsTUFBTSxFQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBQztZQUM3QixFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUMsR0FBRyxFQUFDLFFBQVEsRUFBQyxFQUFFLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztZQUN2QyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFBO1FBQ0Ysd0JBQXdCO0lBQzVCLENBQUM7SUFFTSxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBeUIsRUFBQyxFQUFFLENBQUEsZUFBZSxHQUFHLEtBQUssQ0FBQTtJQUF6RSxRQUFBLGtCQUFrQixzQkFBdUQ7SUFFdEYsSUFBQSwwQkFBa0IsRUFBQyxDQUFDLEtBS25CLEVBQUMsRUFBRSxDQUFBLDZCQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLFlBQVksMkdBQWtHLENBQUMsQ0FBQTtJQUU1SixJQUFBLHdDQUFvQixFQUFDLENBQUMsY0FBNkIsRUFBRSxLQUFXLEVBQUMsRUFBRTtRQU8vRCxJQUFJLFVBQVUsR0FBRyxJQUFBLGlDQUFhLEdBQUUsQ0FBQztRQUNqQyxJQUFJLGtCQUFrQixHQUFHLENBQUMsV0FBd0IsRUFBRSxlQUFnQyxFQUFFLFVBQXFCLEVBQUMsRUFBRTs7WUFDMUcsSUFBSSxXQUFXLEdBQUcsQ0FBQyxpQkFBNEIsRUFBRSxXQUF1QixFQUFDLEVBQUU7Z0JBQ3ZFLElBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksSUFBQSxhQUFLLEVBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksaUJBQWlCLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFJLEVBQUM7b0JBQ2xMLElBQUksVUFBVSxHQUFHLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQVcsQ0FBQTtvQkFDdkUsSUFBRyxVQUFVLElBQUksSUFBSSxFQUFDO3dCQUNsQixJQUFHLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFDOzRCQUMxQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUMsRUFBRSxDQUFDO3lCQUNoRDt3QkFDRCxVQUFVOzZCQUNMLEtBQUssQ0FBQyxHQUFHLENBQUM7NkJBQ1YsTUFBTSxDQUFDLENBQUMsTUFBYSxFQUFDLEVBQUUsQ0FBQSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzs2QkFDakQsT0FBTyxDQUFDLENBQUMsTUFBYSxFQUFFLENBQVEsRUFBQyxFQUFFOzRCQUNoQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzs0QkFDbEcsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDL0YsQ0FBQyxDQUFDLENBQUE7cUJBQ1Q7aUJBQ0o7WUFDTCxDQUFDLENBQUE7WUFDRCxJQUFHLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsRUFBQztnQkFDN0MsSUFBRyxlQUFlLElBQUksV0FBVyxFQUFDO29CQUM5QixXQUFXLENBQUMsY0FBYyxFQUFDLFdBQVcsQ0FBQyxDQUFBO2lCQUMxQztxQkFBSTtvQkFDRCxLQUFJLElBQUksaUJBQWlCLElBQUksSUFBQSxnQkFBUSxFQUFDLE1BQUEsY0FBYyxDQUFDLGVBQWUsQ0FBQyxtQ0FBRSxFQUFFLENBQUMsRUFBQzt3QkFDdkUsV0FBVyxDQUFDLGlCQUFpQixFQUFDLFdBQVcsQ0FBQyxDQUFBO3FCQUM3QztpQkFDSjthQUNKO1FBQ0wsQ0FBQyxDQUFBO1FBQ0QsSUFBSSxTQUVILENBQUM7UUFDRixJQUFJLFVBQVUsR0FBaUI7WUFDM0IsVUFBVSxFQUFFLFVBQVU7WUFDdEIsY0FBYyxFQUFFLE1BQW9CO1lBQ3BDLGdCQUFnQixFQUFFLFFBQXNCO1lBQ3hDLGFBQWEsRUFBRSxhQUEyQjtTQUM3QyxDQUFDO1FBQ0YsSUFBSSxVQUFVLEdBQWlCO1lBQzNCLFVBQVUsRUFBRSxjQUFrQztZQUM5QyxjQUFjLEVBQUUsVUFBeUI7WUFDekMsZ0JBQWdCLEVBQUUsWUFBMkI7WUFDN0MsYUFBYSxFQUFFLHlCQUF3QztTQUMxRCxDQUFDO1FBRUYsSUFBRyxVQUFVLENBQUMsV0FBVyxFQUFDO1lBQ3RCLFNBQVMsR0FBRztnQkFDUixPQUFPLEVBQUUsVUFBVTtnQkFDbkIsQ0FBQyxhQUFpQyxDQUFDLEVBQUcsVUFBVTthQUNuRCxDQUFBO1lBQ0QsSUFBQSxnQkFBTSxFQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBQyxPQUFPLEVBQUMsRUFBRTtnQkFDN0Msa0JBQWtCLENBQUMsV0FBVyxFQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQTtZQUV2RCxDQUFDLENBQUMsQ0FBQTtTQUNMO2FBQUk7WUFDRCxJQUFJLFlBQVksR0FBa0IsQ0FBQyxVQUFVLEVBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBQyxFQUFFO2dCQUNoQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFBO1lBQzNELENBQUMsQ0FBQyxDQUFBO1NBQ0w7UUFDRCxjQUFjLENBQUMsUUFBUSxHQUFDLElBQUEsa0NBQWMsR0FBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQ3hHLCtDQUErQztRQUMvQyxJQUFJLE1BQU0sR0FBRyxjQUFjLENBQUMsU0FBdUIsQ0FBQyxDQUFDO1FBQ3JELGNBQWMsQ0FBQyxTQUF1QixDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUM7UUFDdkcsSUFBSSxTQUFTLEdBQUcsY0FBYyxDQUFDLGFBQTJCLENBQUMsQ0FBQztRQUM1RCxjQUFjLENBQUMsYUFBMkIsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLGFBQWlDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQztJQUMxSSxDQUFDLENBQUMsQ0FBQTtJQUVGLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7UUFDNUIsWUFBWSxFQUFFLENBQUE7SUFDbEIsQ0FBQyxDQUFDLENBQUE7SUFDRixzQkFBc0I7SUFFdEIsU0FBUyxPQUFPLENBQUMsTUFBYSxFQUFFLEVBQVU7UUFDdEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNwQyxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFFLE1BQU0sQ0FBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxHQUFHLEdBQUksWUFBWSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1lBQ25CLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLE1BQU0sQ0FBQztZQUN2QixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBRSxJQUFJLENBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUUsRUFBRTtnQkFDZCxPQUFPLEVBQUUsQ0FBQztnQkFDVixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNsQyxDQUFDLENBQUM7WUFDRixJQUFJLENBQUMsT0FBTyxHQUFDLENBQUMsR0FBRyxFQUFDLEVBQUU7Z0JBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxDQUFDLENBQUE7Z0JBQzVDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFBO1lBQzNELENBQUMsQ0FBQTtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFNBQVMsYUFBYSxDQUFDLEVBQVM7O1FBQzVCLElBQUksUUFBUSxHQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUMsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsVUFBVSwwQ0FBRSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELE1BQU0sbUJBQW1CLEdBQUcsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xyXG5pbXBvcnQgeyAgXHJcbiAgICBSZW5kZXJQcmluY2lwYWwsIFxyXG4gICAgYWRhcHRhclRpcG9WYXJDYXNpbGxlcm8sXHJcbiAgICBJQ09OLFxyXG4gICAgZm9jdXNUb0lkLFxyXG4gICAgc2Nyb2xsVG9Ub3AsXHJcbiAgICBzY3JvbGxUb0JvdHRvbSxcclxuICAgIG1hdGVyaWFsSW9JY29uc1N2Z1BhdGhcclxufSBmcm9tIFwiLi9yZW5kZXItZ2VuZXJhbFwiO1xyXG5pbXBvcnQge0Jsb3F1ZSwgQm90b25Gb3JtdWxhcmlvLCBcclxuICAgIENhc2lsbGVyb0Jhc2UsIENhc29TdGF0ZSwgQ29uanVudG9QcmVndW50YXMsIENvbnNpc3RlbmNpYSwgXHJcbiAgICBFc3RhZG9DYXJnYSwgRmlsdHJvLCBGb3JQaywgRm9yUGtSYWl6LCBGb3JtdWxhcmlvLCBcclxuICAgIElkRm9ybXVsYXJpbywgSWRQcmVndW50YSwgSWRUYXJlYSwgSWRWYXJpYWJsZSwgSW5mb0Zvcm11bGFyaW8sXHJcbiAgICBNb2RvRGVzcGxpZWd1ZSxcclxuICAgIE9wY2lvbiwgT3BjaW9uTXVsdGlwbGUsIFBsYWluRm9yUGssIFxyXG4gICAgUHJlZ3VudGEsIFByZWd1bnRhQ29uT3BjaW9uZXMsIFByZWd1bnRhU2ltcGxlLCBcclxuICAgIFJlc3B1ZXN0YXMsIFJlc3B1ZXN0YUxhc1VBLCBSZXNwdWVzdGFzUmFpeiwgVmFsb3IsIFRFTSwgSWRDYXJnYSwgQ2FyZ2EsIElkRmluLCBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgTW9kb0FsbWFjZW5hbWllbnRvLFxyXG4gICAgdG9QbGFpbkZvclBrLFxyXG4gICAgSWRDYXNpbGxlcm8sXHJcbiAgICBQcmVndW50YUNvblNpTm8sXHJcbiAgICBUZXh0bywgRXN0cnVjdHVyYSwgSW5mb3JtYWNpb25IZHIsIERhdG9zSGRyVWFQcGFsLCBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbywgUmVzdW1lbkVzdGFkbywgRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMsIElkT3BlcmF0aXZvLCBJZEVuYywgTGlicmUsIFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgaXRlcmF0b3IsIGVtcHR5LCBDb25maWd1cmFjaW9uSGFiaWxpdGFyQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgQ2FtcG9Qa1JhaXosXHJcbiAgICBWYWx1ZVBrUmFpelxyXG59IGZyb20gXCIuL3RpcG9zXCI7XHJcbmltcG9ydHsgXHJcbiAgICBhY2Npb25fYWJyaXJfZm9ybXVsYXJpbyxcclxuICAgIGFjY2lvbl9ib3JyYXJfZm9ybXVsYXJpbyxcclxuICAgIGNhbGN1bGFyQWN0dWFsQkYsXHJcbiAgICBjYWxjdWxhckRpc2FibGVkQkYsXHJcbiAgICBjYWxjdWxhclBlcm1pdGVCb3JyYXJCRixcclxuICAgIGNhbGN1bGFyUmVzdW1lblZpdmllbmRhLFxyXG4gICAgY3JlYXJFbmN1ZXN0YSxcclxuICAgIGdldERhdG9zQnlQYXNzLFxyXG4gICAgZ2V0Rm9ybXVsYXJpb3NGb3JWYWx1ZVBrUmFpeixcclxuICAgIGdldE1haW5Gb3JtRm9yVml2aWVuZGEsXHJcbiAgICBpbnRlbnRhckJhY2t1cCxcclxuICAgIHNldENhbGN1bGFyVmFyaWFibGVzXHJcbn0gZnJvbSBcIi4vYnlwYXNzLWZvcm11bGFyaW9cIlxyXG5pbXBvcnQgeyBkbVRyYWVyRGF0b3NGb3JtdWxhcmlvLCBkaXNwYXRjaGVycywgXHJcbiAgICBnb3RvU2luY3Jvbml6YXIsXHJcbiAgICBnZXRDYWNoZVZlcnNpb24sXHJcbiAgICBnb3RvQ29uc2lzdGlyLFxyXG59IGZyb20gXCIuL3JlZHV4LWZvcm11bGFyaW9cIjtcclxuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IHVzZVNlbGVjdG9yLCB1c2VEaXNwYXRjaCB9IGZyb20gXCJyZWFjdC1yZWR1eFwiOyBcclxuaW1wb3J0IHsgc3RyaWN0IGFzIGxpa2VBciwgYmVpbmdBcnJheSB9IGZyb20gXCJsaWtlLWFyXCI7XHJcbmltcG9ydCB7c2xlZXAsIGNvYWxlc2NlfSBmcm9tIFwiYmVzdC1nbG9iYWxzXCI7XHJcbmltcG9ydCB7IHVuZXhwZWN0ZWQgfSBmcm9tIFwiY2FzdC1lcnJvclwiO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIEFwcEJhciwgQnV0dG9uR3JvdXAsIENpcmN1bGFyUHJvZ3Jlc3MsIENoZWNrYm94LCBcclxuICAgIERpYWxvZywgRGlhbG9nQWN0aW9ucywgRGlhbG9nQ29udGVudCwgRGlhbG9nQ29udGVudFRleHQsIFxyXG4gICAgRGlhbG9nVGl0bGUsIERpdmlkZXIsIEZhYiwgSWNvbkJ1dHRvbixcclxuICAgIE1lbnUsIE1lbnVJdGVtLCBQYXBlciwgUG9wb3ZlcixcclxuICAgIFRhYmxlLCBUYWJsZUJvZHksIFRhYmxlQ2VsbCwgVGFibGVIZWFkLCBUYWJsZVJvdywgVG9vbGJhciwgQ3NzQmFzZWxpbmVQcm9wc1xyXG59IGZyb20gXCJAbWF0ZXJpYWwtdWkvY29yZVwiO1xyXG5pbXBvcnQgeyBFc3RhZG9WYXJpYWJsZSwgRm9ybVN0cnVjdHVyZVN0YXRlIH0gZnJvbSBcInJvdy12YWxpZGF0b3JcIjtcclxuaW1wb3J0IHsgQ1NTUHJvcGVydGllcyB9IGZyb20gXCJAbWF0ZXJpYWwtdWkvY29yZS9zdHlsZXMvd2l0aFN0eWxlc1wiO1xyXG5cclxuaW1wb3J0IHsgXHJcbiAgICByZWdpc3RyYXJFbGVtZW50bywgc2V0QXR0ckRpc3RpbnRvLCBzZXRWYWxvckRpc3RpbnRvLCBkaXNwYXRjaEJ5UGFzcywgXHJcbiAgICBnZXREaXJ0eSwgZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IsXHJcbiAgICBnZXRGdW5jaW9uSGFiaWxpdGFyLCBcclxuICAgIGdldEVzdHJ1Y3R1cmEsIFxyXG4gICAgZGVmT3BlcmF0aXZvLFxyXG4gICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyxcclxuICAgIG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSwgXHJcbiAgICBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8sXHJcbiAgICBhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSxcclxuICAgIGFjY2lvbl9pZF9wcmVndW50YSxcclxuICAgIGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8sXHJcbiAgICBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPLFxyXG4gICAgTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVNcclxufSBmcm9tIFwiLi9ieXBhc3MtZm9ybXVsYXJpb1wiXHJcblxyXG5pbXBvcnQge2h0bWwsIEh0bWxUYWd9IGZyb20gXCJqcy10by1odG1sXCI7XHJcblxyXG5jb25zdCBERUxBWV9TQ1JPTExfMyA9IDUwO1xyXG5cclxuZnVuY3Rpb24gYnJlYWtlYWJsZVRleHQodGV4dDpzdHJpbmd8bnVsbCk6c3RyaW5nfHVuZGVmaW5lZDtcclxuZnVuY3Rpb24gYnJlYWtlYWJsZVRleHQodGV4dDpzdHJpbmd8bnVsbCwgZGljY2lvbmFyaW8/OntbY2xhdmU6c3RyaW5nXTpSZWFjdC5SZWFjdE5vZGV9KXtcclxuICAgIGlmKHR5cGVvZiB0ZXh0ICE9IFwic3RyaW5nXCIpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXC8vZyxcIi9cXHUyMDYzXCIpLnJlcGxhY2UoL1xcL1xcdTIwNjMoXFx3KVxcYi9nLCcvJDEnKTtcclxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL19fXyovZywodG9kbyk9PmBbJHt0b2RvfV1gKS5yZXBsYWNlKC9cXEBcXHcrXFxAL2csKHRvZG8pPT5gWyR7dG9kb31dYCk7XHJcbiAgICBpZighZGljY2lvbmFyaW8gfHwgdHJ1ZSkgcmV0dXJuIHRleHQ7XHJcbiAgICAvKlxyXG4gICAgcmV0dXJuIDxzcGFuPntwYXJ0ZXMubWFwKChwYXJ0ZTpzdHJpbmcsIGk6bnVtYmVyKSA9PiA8c3BhbiBzdHlsZT17aSUyPT0xP3t0ZXh0RGVjb3JhdGlvbjpcInVuZGVybGluZVwifTp7fX0+IHtwYXJ0ZStcIiBcIn0gPC9zcGFuPil9PC9zcGFuPlxyXG4gICAgKi9cclxufVxyXG5cclxuY29uc3QgVkVSX0RPTUlOSU8gPSBmYWxzZTsgLy8gZWwgZW5jdWVzdGFkb3Igbm8gbmVjZXNpdGEgdmVyIGVsIGRvbWluaW8gZW4gY2FkYSBlbmN1ZXN0YSBwb3JxdWUgZWwgZG9taW5pbyBkZXBlbmRlIGRlbCDDoXJlYSB5IHNlIGRlZHVjZSBkZWwgcHJpbWVyIGTDrWdpdG8gZGVsIG7Dum1lcm8gZGUgZW5jdWVzdGFcclxuLy8gbm8gcG9uZXIgVkVSX0RPTUlOSU8gZW4gdHJ1ZSwgY2FtYmlhciBwb3IgdW5hIHZhcmlhYmxlIHF1ZSBzZSBmaWplIHNpIGVsIERNIGVzdMOhIGVuIG1vZG8gcHJ1ZWJhIG8gZW4gbW9kbyBcImRpc2XDsW8gY29uY2VwdHVhbFwiXHJcblxyXG5jb25zdCBJRF9CT1RPTl9WT0xWRVJfSERSID0gJ2JvdG9uLXZvbHZlci1oZHInO1xyXG5jb25zdCBJRF9CT1RPTl9DRVJSQVIgPSAnYm90b24tY2VycmFyLWVuY3Vlc3RhJztcclxuXHJcbnZhciBkZWJlU2FsdGFyOmJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCk9PntcclxuICAgIC8qXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldjpLZXlib2FyZEV2ZW50KT0+e1xyXG4gICAgICAgIGRlYmVTYWx0YXIgPSBldi5rZXkgPT0gJ0VudGVyJyB8fCBldi5rZXlDb2RlID09IDEzO1xyXG4gICAgfSlcclxuICAgICovXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKT0+e1xyXG4gICAgICAgIGRlYmVTYWx0YXIgPSBmYWxzZTtcclxuICAgIH0pXHJcbn0pXHJcblxyXG4vLyAvKlxyXG5cclxudHlwZSBDb21tb25BdHRyaWJ1dGVzID0ge2NsYXNzTmFtZT86c3RyaW5nLHN0eWxlPzpDU1NQcm9wZXJ0aWVzLGlkPzpzdHJpbmcsIHRhYkluZGV4PzpudW1iZXJ9IC8vIENTU1Byb3BlcnRpZXNcclxudHlwZSBDb2xvclZhbHVlcyA9ICdwcmltYXJ5J3wnc2Vjb25kYXJ5J3wnZGVmYXVsdCd8J2luaGVyaXQnXHJcblxyXG5leHBvcnQgdHlwZSBMaWJyZURlc3BsaWVndWVUeXBlID0gKHByb3BzOntcclxuICAgIGtleTpzdHJpbmdcclxuICAgIGNhc2lsbGVybzpMaWJyZVxyXG4gICAgZm9ybXVsYXJpbzpGb3JtdWxhcmlvXHJcbiAgICBmb3JQazpGb3JQa1xyXG59KT0+SlNYLkVsZW1lbnQ7XHJcblxyXG52YXIgTGlicmVEZXNwbGllZ3VlOiBMaWJyZURlc3BsaWVndWVUeXBlXHJcblxyXG5jb25zdCBCdXR0b24gPSAoe3ZhcmlhbnQsIG9uQ2xpY2ssIGRpc2FibGVkLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCBjb2xvciwgc2l6ZSwgXHJcbiAgICAgICAgZGlzYWJsZUVsZXZhdGlvbiwgZGlzYWJsZUZvY3VzUmlwcGxlLCBkaXNhYmxlUmlwcGxlLCBcclxuICAgICAgICAuLi5vdGhlclxyXG4gICAgfTp7XHJcbiAgICB2YXJpYW50PzpzdHJpbmcsXHJcbiAgICBjb2xvcj86Q29sb3JWYWx1ZXMsXHJcbiAgICBvbkNsaWNrPzpSZWFjdC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MQnV0dG9uRWxlbWVudD4sIC8vICAoZXZlbnQ6TW91c2VFdmVudC8qIDxIVE1MQnV0dG9uRWxlbWVudCwgTW91c2VFdmVudD4qLyk9PnZvaWQsXHJcbiAgICBkaXNhYmxlZD86Ym9vbGVhblxyXG4gICAgY2hpbGRyZW46YW55LFxyXG4gICAgY2xhc3NOYW1lPzpzdHJpbmcsXHJcbiAgICBzaXplPzonc21hbGwnLFxyXG4gICAgZGlzYWJsZUVsZXZhdGlvbj86YW55LCBkaXNhYmxlRm9jdXNSaXBwbGU/OmFueSwgZGlzYWJsZVJpcHBsZT86YW55LFxyXG59ICYgQ29tbW9uQXR0cmlidXRlcyk9PjxidXR0b24gXHJcbiAgICB7Li4ub3RoZXJ9XHJcbiAgICBjbGFzc05hbWU9e2BidG4gYnRuJHt2YXJpYW50PT0nY29udGFpbmVkJz8nJzonLScrKHZhcmlhbnQ9PSdvdXRsaW5lZCc/J291dGxpbmUnOnZhcmlhbnQpfS0keyhjb2xvcj09J2RlZmF1bHQnIHx8IGNvbG9yPT0naW5oZXJpdCc/J3NlY29uZGFyeSc6Y29sb3I9PSdzZWNvbmRhcnknPydkYW5nZXInOmNvbG9yKXx8J3NlY29uZGFyeSd9ICR7Y2xhc3NOYW1lfHwnJ30gJHtzaXplPT0nc21hbGwnPydidG4tc20nOicnfWB9XHJcbiAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICBvbkNsaWNrPXtvbkNsaWNrfVxyXG4+e2NoaWxkcmVufTwvYnV0dG9uPjtcclxuXHJcbmNvbnN0IEJ1dHRvbjIgPSAoe3ZhcmlhbnQsIG9uQ2xpY2ssIGRpc2FibGVkLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCBjb2xvciwgc2l6ZSwgLi4ub3RoZXJ9OntcclxuICAgIHZhcmlhbnQ/OnN0cmluZyxcclxuICAgIGNvbG9yPzpDb2xvclZhbHVlcyxcclxuICAgIG9uQ2xpY2s/OigpPT52b2lkLFxyXG4gICAgZGlzYWJsZWQ/OmJvb2xlYW5cclxuICAgIGNoaWxkcmVuOmFueSxcclxuICAgIGNsYXNzTmFtZT86c3RyaW5nLFxyXG4gICAgc2l6ZT86J3NtYWxsJyxcclxuICAgICRhdHRycz86e31cclxufSAmIENvbW1vbkF0dHJpYnV0ZXMpPT5odG1sLmJ1dHRvbih7XHJcbiAgICAuLi5vdGhlcixcclxuICAgIGNsYXNzOiBgYnRuIGJ0biR7dmFyaWFudD09J2NvbnRhaW5lZCc/Jyc6Jy0nKyh2YXJpYW50PT0nb3V0bGluZWQnPydvdXRsaW5lJzp2YXJpYW50KX0tJHsoY29sb3I9PSdkZWZhdWx0JyB8fCBjb2xvcj09J2luaGVyaXQnPydzZWNvbmRhcnknOmNvbG9yPT0nc2Vjb25kYXJ5Jz8nZGFuZ2VyJzpjb2xvcil8fCdzZWNvbmRhcnknfSAke2NsYXNzTmFtZXx8Jyd9ICR7c2l6ZT09J3NtYWxsJz8nYnRuLXNtJzonJ31gLFxyXG4gICAgZGlzYWJsZWQsXHJcbiAgICAkb246e2NsaWNrOm9uQ2xpY2t9XHJcbn0sIGNoaWxkcmVuKTtcclxuXHJcblxyXG5jb25zdCBUZXh0RmllbGQgPSAocHJvcHM6e1xyXG4gICAgaWQ6c3RyaW5nLFxyXG4gICAgZGlzYWJsZWQ/OmJvb2xlYW4sXHJcbiAgICBjbGFzc05hbWU/OnN0cmluZyxcclxuICAgIGF1dG9Gb2N1cz86Ym9vbGVhbixcclxuICAgIGZ1bGxXaWR0aDpib29sZWFuXHJcbiAgICBpbnB1dFByb3BzPzphbnksXHJcbiAgICB2YWx1ZT86YW55LFxyXG4gICAgdHlwZTphbnksXHJcbiAgICBsYWJlbD86c3RyaW5nLFxyXG4gICAgZXJyb3I/OmJvb2xlYW4sXHJcbiAgICBoZWxwZXJUZXh0PzpzdHJpbmcsXHJcbiAgICBtdWx0aWxpbmU/OmJvb2xlYW4sXHJcbiAgICBvbkNoYW5nZT86KGV2ZW50OmFueSk9PnZvaWQsXHJcbiAgICBvbkZvY3VzPzooZXZlbnQ6YW55KT0+dm9pZCxcclxuICAgIG9uQmx1cj86KGV2ZW50OmFueSwgdmFsb3I6YW55KT0+dm9pZCxcclxuICAgIC8vIG9uS2V5RG93bj86KGV2ZW50OktleWJvYXJkRXZlbnQpPT52b2lkIC8vIEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+XHJcbiAgICBvbktleURvd24/OlJlYWN0LktleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+XHJcbn0pPT48aW5wdXRcclxuICAgIGlkPXtwcm9wcy5pZH1cclxuICAgIGRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZH1cclxuICAgIGNsYXNzTmFtZT17cHJvcHMuY2xhc3NOYW1lfVxyXG4gICAgYXV0b0ZvY3VzPXtwcm9wcy5hdXRvRm9jdXN9XHJcbiAgICB2YWx1ZT17cHJvcHMudmFsdWV9IFxyXG4gICAgdHlwZT17cHJvcHMudHlwZX1cclxuICAgIG9uQ2hhbmdlPXtwcm9wcy5vbkNoYW5nZX1cclxuICAgIG9uRm9jdXM9e3Byb3BzLm9uRm9jdXN9XHJcbiAgICBvbkJsdXI9eyhldnQpPT5wcm9wcy5vbkJsdXI/LihldnQsIGV2dC50YXJnZXQudmFsdWUpfVxyXG4gICAgb25LZXlEb3duPXtwcm9wcy5vbktleURvd259XHJcbiAgICBwbGFjZWhvbGRlcj17cHJvcHMubGFiZWx9XHJcbi8+O1xyXG5cclxuY29uc3QgVHlwb2dyYXBoeSA9ICh7Y2hpbGRyZW4sIC4uLm90aGVyc306e1xyXG4gICAgY2hpbGRyZW46YW55LFxyXG4gICAgY29tcG9uZW50PzpzdHJpbmdcclxuICAgIHZhcmlhbnQ/OidoNidcclxufSZDb21tb25BdHRyaWJ1dGVzKT0+UmVhY3QuY3JlYXRlRWxlbWVudChvdGhlcnMudmFyaWFudHx8b3RoZXJzLmNvbXBvbmVudHx8J2Rpdicsb3RoZXJzLGNoaWxkcmVuKTtcclxuXHJcbmZ1bmN0aW9uIEdyaWQocHJvcHM6e1xyXG4gICAgY29udGFpbmVyPzpib29sZWFuLFxyXG4gICAgc3BhY2luZz86bnVtYmVyLFxyXG4gICAgaXRlbT86Ym9vbGVhbixcclxuICAgIHdyYXA/Oid3cmFwJ3wnbm93cmFwJyxcclxuICAgIGRpcmVjdGlvbj86J3Jvdyd8J2NvbHVtbidcclxuICAgIGFsaWduSXRlbXM/OidzdHJldGNoJyB8ICdmbGV4LXN0YXJ0JyB8ICdmbGV4LWVuZCcgfCAnY2VudGVyJyB8ICdiYXNlbGluZScsXHJcbiAgICBjaGlsZHJlbjphbnksXHJcbiAgICB4cz86bnVtYmVyLFxyXG4gICAgc20/Om51bWJlcixcclxufSZDb21tb25BdHRyaWJ1dGVzKXtcclxuICAgIHZhciB7Y29udGFpbmVyLCBpdGVtLCB3cmFwLCBkaXJlY3Rpb24sIGFsaWduSXRlbXMsIGNoaWxkcmVuLCBjbGFzc05hbWUsIHhzLCBzbSwgc3BhY2luZywgLi4ub3RoZXJ9ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPGRpdlxyXG4gICAgey4uLm90aGVyfVxyXG4gICAgY2xhc3NOYW1lPXtgJHtjbGFzc05hbWV8fCcnfSAke3hzIT1udWxsPydncmlkLXhzLScreHM6Jyd9ICR7c20hPW51bGw/J2dyaWQtc20tJytzbTonJ31gfVxyXG4gICAgc3R5bGU9e2NvbnRhaW5lcj97XHJcbiAgICAgICAgZGlzcGxheTonZmxleCcsXHJcbiAgICAgICAgZmxleFdyYXA6d3JhcCxcclxuICAgICAgICBmbGV4RGlyZWN0aW9uOmRpcmVjdGlvbixcclxuICAgICAgICBhbGlnbkl0ZW1zOmFsaWduSXRlbXMsXHJcbiAgICAgICAgbWFyZ2luOnNwYWNpbmchPW51bGw/c3BhY2luZyo4KydweCc6dW5kZWZpbmVkXHJcbiAgICB9OntcclxuICAgIH19XHJcbj57Y2hpbGRyZW59PC9kaXY+XHJcbn1cclxuXHJcbnZhciBwMTIgPSAncDEyJyBhcyBJZFZhcmlhYmxlO1xyXG52YXIgc3AyID0gJ3NwMicgYXMgSWRWYXJpYWJsZTtcclxudmFyIHNwMyA9ICdzcDMnIGFzIElkVmFyaWFibGU7XHJcbnZhciBzcDQgPSAnc3A0JyBhcyBJZFZhcmlhYmxlO1xyXG52YXIgc3A1ID0gJ3NwNScgYXMgSWRWYXJpYWJsZTtcclxuXHJcbnZhciBkaWNjaW9uYXJpbyA9IHt9XHJcblxyXG4vKlxyXG4vLyBjb25zdCB0YWtlRWxlbWVudE9yRGVmYXVsdDxLLCBUIGV4dGVuZHMgW0sgaW5dLCBEPigpXHJcbmZ1bmN0aW9uIGlzSW48ViwgVD4oazprZXlvZiBULCBvYmplY3Q6VCk6IG9iamVjdFtrXSBpcyBWe1xyXG4gICAgcmV0dXJuIHRydWVcclxufVxyXG4qL1xyXG5mdW5jdGlvbiB0YWtlRWxlbWVudE9yRGVmYXVsdDxWLEsgZXh0ZW5kcyBzdHJpbmcsS08gZXh0ZW5kcyBzdHJpbmc+KGs6Sywgb2JqZWN0OntbayBpbiBLT106Vn0sIGRlZmF1bHRWYWx1ZTpWKTpWe1xyXG4gICAgcmV0dXJuIGsgaW4gb2JqZWN0ID8gXHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBwb3IgYWxndW5hIHJhesOzbiBUUyBubyBxdWllcmUgZW50ZW5kZXIgcXVlIHNpIGsgZXN0w6EgZW4gb2JqZWN0LCBvYmplY3Rba10gZXhpc3RlXHJcbiAgICAgICAgb2JqZWN0W2tdIFxyXG4gICAgOiBkZWZhdWx0VmFsdWVcclxufVxyXG5cclxuZnVuY3Rpb24gRGVzcGxpZWd1ZUVuY2FiZXphZG8ocHJvcHM6e2Nhc2lsbGVybzpDYXNpbGxlcm9FbmNhYmV6YWJsZSwgbGVlcj86Ym9vbGVhbn0pe1xyXG4gICAgY29uc3QgZm9yUGtOdWxsPXt9IGFzIEZvclBrO1xyXG4gICAgcmV0dXJuIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e3Byb3BzLmNhc2lsbGVyb30gbGVlcj17cHJvcHMubGVlcn0gZm9yUGs9e2ZvclBrTnVsbH0vPjtcclxufVxyXG5cclxuZnVuY3Rpb24gc3ViaXJIYXN0YShlbGVtZW50bzpIVE1MRWxlbWVudHxudWxsLCBmdW46KGVsZW1lbnRvOkhUTUxFbGVtZW50KT0+Ym9vbGVhbik6SFRNTEVsZW1lbnR8bnVsbHtcclxuICAgIGlmKGVsZW1lbnRvID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgaWYoZnVuKGVsZW1lbnRvKSkgcmV0dXJuIGVsZW1lbnRvO1xyXG4gICAgcmV0dXJuIHN1YmlySGFzdGEoZWxlbWVudG8ucGFyZW50RWxlbWVudCwgZnVuKTtcclxufVxyXG5cclxudmFyIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhcjpIVE1MRWxlbWVudHxudWxsID0gbnVsbDtcclxuXHJcbmZ1bmN0aW9uIEJvdG9uQm9ycmFyKHtpZCwgdmFyaWFibGUsIGZvclBrLCB2YWxvck9wY2lvbn06e2lkOnN0cmluZywgdmFyaWFibGU6SWRWYXJpYWJsZSwgZm9yUGs6Rm9yUGssIHZhbG9yT3BjaW9uPzphbnl9KXtcclxuICAgIHZhciBoYW5kbGVDbGlja0JvcnJhcj0oKT0+e1xyXG4gICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7cmVzcHVlc3RhOm51bGwsIHZhcmlhYmxlOnZhcmlhYmxlLCBmb3JQazpmb3JQa30pXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYm90b24tYm9ycmFyXCI+XHJcbiAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICBpZD17aWR9XHJcbiAgICAgICAgICAgIG1pLXZhcmlhYmxlPXt2YXJpYWJsZX1cclxuICAgICAgICAgICAgdmFsb3Itb3BjaW9uPXt2YWxvck9wY2lvbn1cclxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm90b24tb3BjaW9uIGJvdG9uLW9wY2lvbi1ib3JyYXJcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja0JvcnJhcn1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxJQ09OLkRlbGV0ZUZvcmV2ZXIvPlxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFNhbHRvRGVzcGxpZWd1ZSh7Y2FzaWxsZXJvLHByZWZpam99OntjYXNpbGxlcm86UHJlZ3VudGF8T3BjaW9ufEZpbHRybywgcHJlZmlqbz86c3RyaW5nfSl7XHJcbiAgICByZXR1cm4gY2FzaWxsZXJvLnNhbHRvP1xyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFzZVwiPlxyXG4gICAgICAgICAgICB7cHJlZmlqbz88c3BhbiBjbGFzc05hbWU9XCJwcmVmaWpvXCI+e3ByZWZpam99IDwvc3Bhbj46bnVsbH1cclxuICAgICAgICAgICAgPElDT04uVHJlbmRpbmdGbGF0IC8+PHNwYW4+e2Nhc2lsbGVyby5zYWx0b308L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA6bnVsbFxyXG59XHJcblxyXG5mdW5jdGlvbiBPcGNpb25EZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86T3BjaW9uLCB2YWxvck9wY2lvbjpudW1iZXIsIHZhcmlhYmxlOklkVmFyaWFibGUsIGZvclBrOkZvclBrLCBsZWVyOmJvb2xlYW4sIGNvbkJvdG9uQm9ycmFyOmJvb2xlYW59KXtcclxuICAgIGNvbnN0IHtjYXNpbGxlcm99ID0gcHJvcHM7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgc2FsdG9BdXRvbWF0aWNvID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9PnN0YXRlLm9wY2lvbmVzLnNhbHRvQXV0b21hdGljbyk7XHJcbiAgICB2YXIgaGFuZGxlQ2xpY2s6UmVhY3QuTW91c2VFdmVudEhhbmRsZXI8SFRNTEJ1dHRvbkVsZW1lbnQ+ID0gYXN5bmMgKGV2ZW50KT0+e1xyXG4gICAgICAgIHZhciBjb250YWluZXIgPSBzdWJpckhhc3RhKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCwgZWxlbWVudG89PmVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygncHJlZ3VudGEnKSB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ211bHRpcGxlJykpIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgICAgICB2YXIgdGllbmUgPSBjb250YWluZXIuZ2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycpO1xyXG4gICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2VzdG95LWJvcnJhbmRvJywnTk8nKTtcclxuICAgICAgICBpZihlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIpe1xyXG4gICAgICAgICAgICBlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIuc2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycsJ05PJyk7XHJcbiAgICAgICAgICAgIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB7cmVjZW50TW9kaWZpZWQsIHNpZ3VpZW50ZVZhcmlhYmxlfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7cmVzcHVlc3RhOnByb3BzLnZhbG9yT3BjaW9uLCB2YXJpYWJsZTpwcm9wcy52YXJpYWJsZSwgZm9yUGs6cHJvcHMuZm9yUGt9KTtcclxuICAgICAgICBpZighcmVjZW50TW9kaWZpZWQpe1xyXG4gICAgICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycsdGllbmU9PSdTSSc/J05PJzonU0knKTtcclxuICAgICAgICAgICAgaWYodGllbmUhPSdTSScpe1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyPWNvbnRhaW5lcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBpZihzaWd1aWVudGVWYXJpYWJsZSAmJiBzYWx0b0F1dG9tYXRpY28pe1xyXG4gICAgICAgICAgICAgICAgdmFyIGJvdG9uU3R5bGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8uc3R5bGU7XHJcbiAgICAgICAgICAgICAgICBpZihib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJ2dyZWVuJztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKERFTEFZX1NDUk9MTF8zKTtcclxuICAgICAgICAgICAgICAgIGlmKGJvdG9uU3R5bGUpIGJvdG9uU3R5bGUuY29sb3IgPSAnYmx1ZSc7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBzbGVlcChERUxBWV9TQ1JPTExfMyk7XHJcbiAgICAgICAgICAgICAgICBpZihib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJ2dyZWVuJztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKERFTEFZX1NDUk9MTF8zKTtcclxuICAgICAgICAgICAgICAgIGlmKGJvdG9uU3R5bGUpIGJvdG9uU3R5bGUuY29sb3IgPSAnJztcclxuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBhbGd1bm9zIGNhc2lsbGVyb3MgdGllbmVuIGVzcGVjaWFsIHkgb3Ryb3Mgbm9cclxuICAgICAgICAgICAgICAgIChjYXNpbGxlcm8uZXNwZWNpYWw/Lm5vU2Nyb2xsID09IHRydWUpP251bGw6ZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShjYXNpbGxlcm8uZXNwZWNpYWw/LnNjcm9sbFRvID8/IHNpZ3VpZW50ZVZhcmlhYmxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gPEdyaWQgY2xhc3NOYW1lPVwib3BjaW9uXCI+IFxyXG4gICAgICAgIHtwcm9wcy5jb25Cb3RvbkJvcnJhcj88Qm90b25Cb3JyYXJcclxuICAgICAgICAgICAgaWQ9e2BvcGNpb24tdmFyLSR7cHJvcHMudmFyaWFibGV9LSR7cHJvcHMudmFsb3JPcGNpb259LWJvcnJhcmB9XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgdmFyaWFibGU9e3Byb3BzLnZhcmlhYmxlfVxyXG4gICAgICAgICAgICB2YWxvck9wY2lvbj17cHJvcHMudmFsb3JPcGNpb259XHJcbiAgICAgICAgICAgIC8+Om51bGx9XHJcbiAgICAgICAgPEJ1dHRvbiBcclxuICAgICAgICAgICAgaWQ9e2BvcGNpb24tdmFyLSR7cHJvcHMudmFyaWFibGV9LSR7cHJvcHMudmFsb3JPcGNpb259YH1cclxuICAgICAgICAgICAgbWktdmFyaWFibGU9e3Byb3BzLnZhcmlhYmxlfVxyXG4gICAgICAgICAgICB2YWxvci1vcGNpb249e3Byb3BzLnZhbG9yT3BjaW9ufVxyXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJib3Rvbi1vcGNpb24gYm90b24tb3BjaW9uLXNlbGVjY2lvblwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxyXG4gICAgICAgICAgICB0YWJJbmRleD17LTF9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8R3JpZCBjb250YWluZXIgd3JhcD1cIm5vd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgPEdyaWQgY2xhc3NOYW1lPVwiaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLnZlcl9pZCB8fCBjYXNpbGxlcm8uY2FzaWxsZXJvfVxyXG4gICAgICAgICAgICAgICAgPC9HcmlkPlxyXG4gICAgICAgICAgICAgICAgPEdyaWQgY2xhc3NOYW1lPVwib3BjaW9uLXRleHRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgZGViZS1sZWVyPXtjYXNpbGxlcm8ubGVlcj8nU0knOmNhc2lsbGVyby5sZWVyPT09ZmFsc2U/J05PJzpwcm9wcy5sZWVyPydTSSc6J05PJ30+e2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5ub21icmUpfTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLmFjbGFyYWNpb24/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGNsYXNzTmFtZT0nYWNsYXJhY2lvbic+e2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKX08L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgOm51bGx9XHJcbiAgICAgICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgICAgIDwvR3JpZD5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8U2FsdG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfS8+XHJcbiAgICA8L0dyaWQ+XHJcbn1cclxuaW50ZXJmYWNlIEljYXNpbGxlcm9Db25PcGNpb25lc3tcclxuICAgIHZhcl9uYW1lOklkVmFyaWFibGUsXHJcbiAgICBkZXNwbGllZ3VlQ29udGVuaWRvOid2ZXJ0aWNhbCd8J2hvcml6b250YWwnfG51bGwsXHJcbiAgICBjYXNpbGxlcm9zOk9wY2lvbltdXHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBTaU5vRGVzcGxpZWd1ZShwcm9wczp7Y2FzaWxsZXJvQ29uT3BjaW9uZXM6SWNhc2lsbGVyb0Nvbk9wY2lvbmVzLCBmb3JQazpGb3JQaywgZGVzcGxpZWd1ZUNvbnRlbmlkbzondmVydGljYWwnfCdob3Jpem9udGFsJ30pe1xyXG4gICAgcmV0dXJuIDxPcGNpb25lc0Rlc3BsaWVndWUgXHJcbiAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e3Byb3BzLmNhc2lsbGVyb0Nvbk9wY2lvbmVzfSBcclxuICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9IFxyXG4gICAgICAgIGxlZXI9e2ZhbHNlfVxyXG4gICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3Byb3BzLmRlc3BsaWVndWVDb250ZW5pZG99XHJcbiAgICAvPlxyXG59XHJcblxyXG5mdW5jdGlvbiByZWdpc3RyYWRvckRlVmFyaWFibGUocHJlZ3VudGE6UHJlZ3VudGF8T3BjaW9uTXVsdGlwbGV8Q29uanVudG9QcmVndW50YXMpe1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsIGZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIGVsZW1lbnRvOkhUTUxEaXZFbGVtZW50XHJcbiAgICApPT57XHJcbiAgICAgICAgdmFyIHZhbG9yQWN0dWFsID0gcHJlZ3VudGEudmFyX25hbWUgPT0gbnVsbCA/IG51bGwgOiByZXNwdWVzdGFzW3ByZWd1bnRhLnZhcl9uYW1lXTtcclxuICAgICAgICB2YXIgZmVlZGJhY2tSb3cgPSBmZWVkYmFja0Zvcm0uZmVlZGJhY2s7XHJcbiAgICAgICAgdmFyIGZlZWRiYWNrVmFyID0gcHJlZ3VudGEudmFyX25hbWUgPT0gbnVsbCA/IG51bGwgOiBmZWVkYmFja1Jvd1twcmVndW50YS52YXJfbmFtZV07XHJcbiAgICAgICAgdmFyIHRpZW5lVmFsb3I9dmFsb3JBY3R1YWwhPW51bGwgJiYgZmVlZGJhY2tWYXIhPW51bGw/KGZlZWRiYWNrVmFyLmNvblByb2JsZW1hPydpbnZhbGlkbyc6J3ZhbGlkbycpOidOTyc7XHJcbiAgICAgICAgdmFyIGVzdGFkbzpFc3RhZG9WYXJpYWJsZTsgXHJcbiAgICAgICAgaWYocHJlZ3VudGEudGlwb3Zhcil7XHJcbiAgICAgICAgICAgIGVzdGFkbz1mZWVkYmFja1Zhcj8uZXN0YWRvITtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdmFyIGZlZWRiYWNrTXVsdGkgPSBwcmVndW50YS5jYXNpbGxlcm9zLmZpbHRlcihjPT5jLnZhcl9uYW1lIT1udWxsKS5yZWR1Y2UoKHB2LCBvbSk9PntcclxuICAgICAgICAgICAgICAgIHZhciBmYj1mZWVkYmFja1Jvdz8uW29tLnZhcl9uYW1lIV0hXHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpZW5lQWN0dWFsOiBwdi50aWVuZUFjdHVhbCB8fCBmYi5lc3RhZG89PSdhY3R1YWwnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVzdGFTYWx0ZWFkYTogcHYuZXN0YVNhbHRlYWRhICYmIChmYi5lc3RhZG89PSdzYWx0ZWFkYScgfHwgZmIuZXN0YWRvPT0nZnVlcmFfZGVfZmx1am9fcG9yX3NhbHRvJylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwge3RpZW5lQWN0dWFsOmZhbHNlLCBlc3RhU2FsdGVhZGE6dHJ1ZX0pO1xyXG4gICAgICAgICAgICBlc3RhZG89ZmVlZGJhY2tNdWx0aS50aWVuZUFjdHVhbD8nYWN0dWFsJzpmZWVkYmFja011bHRpLmVzdGFTYWx0ZWFkYT8nc2FsdGVhZGEnOid0b2RhdmlhX25vJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG8sICdudWVzdHJvLXZhbGlkYXRvcicsIGVzdGFkbyk7XHJcbiAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGVsZW1lbnRvLCAndGllbmUtdmFsb3InLCB0aWVuZVZhbG9yKTtcclxuICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG8sICdlc3RhLWluaGFiaWxpdGFkYScsIGZlZWRiYWNrVmFyPy5pbmhhYmlsaXRhZGE/J1NJJzonTk8nKTtcclxuICAgICAgICBpZihwcmVndW50YS52YXJfbmFtZSl7XHJcbiAgICAgICAgICAgIHZhciBvcGNpb25lczpIVE1MQnV0dG9uRWxlbWVudFtdID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWxlbWVudG8ucXVlcnlTZWxlY3RvckFsbChgLmJvdG9uLW9wY2lvblttaS12YXJpYWJsZT1cIiR7cHJlZ3VudGEudmFyX25hbWV9XCJdYCksMCk7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50b09wY2lvbjpIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgICAgICAgICAgZm9yKGVsZW1lbnRvT3BjaW9uIG9mIG9wY2lvbmVzKXtcclxuICAgICAgICAgICAgICAgIHZhciB2YWxvck9wY2lvbiA9IGVsZW1lbnRvT3BjaW9uLmdldEF0dHJpYnV0ZSgndmFsb3Itb3BjaW9uJyk7XHJcbiAgICAgICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG9PcGNpb24sICdvcGNpb24tc2VsZWNjaW9uYWRhJywgdmFsb3JPcGNpb24gPT0gdmFsb3JBY3R1YWwgPyBcIlNJXCI6IFwiTk9cIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9zSW5wdXQ6SFRNTElucHV0RWxlbWVudFtdID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWxlbWVudG8ucXVlcnlTZWxlY3RvckFsbCgnLnZhcmlhYmxlJykpO1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9JbnB1dDpIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgICAgICAgICBmb3IoZWxlbWVudG9JbnB1dCBvZiBlbGVtZW50b3NJbnB1dCl7XHJcbiAgICAgICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGVsZW1lbnRvSW5wdXQsICd2YWx1ZScsIHZhbG9yQWN0dWFsID09IG51bGwgPyAnJyA6IHZhbG9yQWN0dWFsLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBib3Rvbk5zTmMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5zbmMtcHJlZ3VudGEtXCIrcHJlZ3VudGEudmFyX25hbWUpITtcclxuICAgICAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGJvdG9uTnNOYywgJ29wY2lvbi1zZWxlY2Npb25hZGEnLCB2YWxvckFjdHVhbCA9PSAocHJlZ3VudGEudmFsb3JfbnNfbmMgPz8gLTkpID8gXCJTSVwiIDogXCJOT1wiKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gT3BjaW9uTXVsdGlwbGVEZXNwbGllZ3VlKHByb3BzOntvcGNpb25NOk9wY2lvbk11bHRpcGxlLCBmb3JQazpGb3JQa30pe1xyXG4gICAgY29uc3Qge29wY2lvbk19ID0gcHJvcHM7XHJcbiAgICB2YXIgaWQgPSBgb3BjaW9uTS0ke29wY2lvbk0uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICAvL0B0cy1pZ25vcmUgYWx0dW5vcyBjYXNpbGxlcm9zIG5vIHRpZW5lbiBlc3BlY2lhbCwgbm8gaW1wb3J0YSwgZXMgc29sbyBwYXJhIHBvbmVyIGxvcyBtZXRhZGF0b3NcclxuICAgIHZhciBzdHlsZXMgPSBvcGNpb25NLmVzcGVjaWFsPy5mbGV4RGlyZWN0aW9uP3tmbGV4RGlyZWN0aW9uOm9wY2lvbk0uZXNwZWNpYWwuZmxleERpcmVjdGlvbn06e307XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsIFxyXG4gICAgICAgIGRpcmVjdDp0cnVlLCBcclxuICAgICAgICBmdW46IHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShvcGNpb25NKVxyXG4gICAgfSlcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIFxyXG4gICAgICAgIGlkPXtpZH1cclxuICAgICAgICBjYXNpbGxlcm89e29wY2lvbk19XHJcbiAgICAgICAgZGVzcGxpZWd1ZUVuY2FiZXphZG89J2xhdGVyYWwnXHJcbiAgICAgICAgc3R5bGU9e3N0eWxlc31cclxuICAgID5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgXHJcbiAgICAgICAgICAgIGNhc2lsbGVybz17b3BjaW9uTX0gXHJcbiAgICAgICAgICAgIHZlcklkR3Vpb249e3RydWV9IFxyXG4gICAgICAgICAgICBsZWVyPXtvcGNpb25NLmxlZXIhPT1mYWxzZX0gXHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAvPlxyXG4gICAgICAgIDxTaU5vRGVzcGxpZWd1ZSBcclxuICAgICAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e29wY2lvbk19IFxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3Byb3BzLm9wY2lvbk0uZGVzcGxpZWd1ZUNvbnRlbmlkbz8/J2hvcml6b250YWwnfVxyXG4gICAgICAgIC8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxudHlwZSBDYXNpbGxlcm9FbmNhYmV6YWJsZSA9IEZvcm11bGFyaW98QmxvcXVlfEZpbHRyb3xDb25qdW50b1ByZWd1bnRhc3xQcmVndW50YXxPcGNpb25NdWx0aXBsZXxQcmVndW50YVNpbXBsZXxDb25zaXN0ZW5jaWF8VGV4dG9cclxuXHJcbmZ1bmN0aW9uIEVuY2FiZXphZG9EZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86Q2FzaWxsZXJvRW5jYWJlemFibGUsIHZlcklkR3Vpb24/OmJvb2xlYW4sIGxlZXI/OmJvb2xlYW4sIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2Nhc2lsbGVybywgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIgY29uQ2FtcG9PcGNpb25lcyA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT5zdGF0ZS5vcGNpb25lcy5jb25DYW1wb09wY2lvbmVzKVxyXG4gICAgdmFyIGhhbmRsZUNsaWNrQm9ycmFyPSgpPT57XHJcbiAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHtyZXNwdWVzdGE6bnVsbCwgdmFyaWFibGU6Y2FzaWxsZXJvLnZhcl9uYW1lIGFzIElkVmFyaWFibGUsIGZvclBrOmZvclBrfSlcclxuICAgIH07XHJcbiAgICB2YXIgdmVyX2lkID0gY2FzaWxsZXJvLnZlcl9pZCA/PyBjYXNpbGxlcm8uY2FzaWxsZXJvO1xyXG4gICAgLy8gQHRzLWlnbm9yZSBubyBlc3TDoSBlbiB0b2RvcyBsb3MgY2FzaWxsZXJvcyBwZXJvIGFjw6EgcGFyYSBlbCBkZXNwbGllZ3VlIGRlIG1ldGFkYXRvcyBubyBpbXBvcnRhXHJcbiAgICB2YXIgY2FsY3VsYWRhID0gY2FzaWxsZXJvLmNhbGN1bGFkYTtcclxuICAgIHZhciBpZCA9IGBpZC1kaXYtJHtjYXNpbGxlcm8udmFyX25hbWV8fGNhc2lsbGVyby5jYXNpbGxlcm99YDtcclxuICAgIHZhciBpZEFjY2lvbmVzID0gXCJhY2Npb25lcy1cIitpZDtcclxuICAgIHJldHVybiA8ZGl2IFxyXG4gICAgICAgIGNsYXNzTmFtZT1cImVuY2FiZXphZG9cIiBcclxuICAgICAgICBkZWJlLWxlZXI9e3Byb3BzLmxlZXI/J1NJJzonTk8nfSBcclxuICAgID5cclxuICAgICAgICA8ZGl2IGlkPXtpZH0gY2xhc3NOYW1lPVwiaWQtZGl2XCIgdGl0bGU9e2Ake2Nhc2lsbGVyby5jYXNpbGxlcm99IC0gJHtjYXNpbGxlcm8udmFyX25hbWV9YH1cclxuICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZEFjY2lvbmVzKTtcclxuICAgICAgICAgICAgICAgIGRpdiEuc2V0QXR0cmlidXRlKFwiYWNjaW9uLXZpc2libGVcIiwgKDEtTnVtYmVyKGRpdiEuZ2V0QXR0cmlidXRlKFwiYWNjaW9uLXZpc2libGVcIikpKS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8uIFZlciBxdcOpIGhhY2Vtb3MgY3VhbmRvIHNlIHRvY2EgZWwgSUQgZGUgbGEgcHJlZ3V0bmFcclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9pZF9wcmVndW50YSwge3ByZWd1bnRhOiBjYXNpbGxlcm8uY2FzaWxsZXJvIGFzIElkUHJlZ3VudGEsIGZvclBrfSk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImlkXCI+XHJcbiAgICAgICAgICAgICAgICB7dmVyX2lkfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgeyhjYXNpbGxlcm8udGlwb3Zhcj09XCJzaV9ub1wifHxjYXNpbGxlcm8udGlwb3Zhcj09XCJvcGNpb25lc1wiKT88Q2FtcG8gZGlzYWJsZWQ9e2ZhbHNlfSBwcmVndW50YT17Y2FzaWxsZXJvfSBmb3JQaz17Zm9yUGt9IG1pbmk9e3RydWV9IGhpZGRlbj17IWNvbkNhbXBvT3BjaW9uZXMgJiYgJ3F1aXRhcid9Lz46bnVsbH1cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhY2Npb25lcy1wcmVndW50YVwiIGlkPXtpZEFjY2lvbmVzfSBhY2Npb24tdmlzaWJsZT1cIjBcIj5cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8udmFyX25hbWU/PGRpdj48QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9e1wiYm9ycmFyLXByZWd1bnRhLVwiK2Nhc2lsbGVyby52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICBtaS12YXJpYWJsZT17Y2FzaWxsZXJvLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm90b24tcHJlZ3VudGEtYm9ycmFyXCJcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja0JvcnJhcn1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5EZWxldGVGb3JldmVyLz5cclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPjwvZGl2PjpudWxsfVxyXG4gICAgICAgICAgICAgICAge2Nhc2lsbGVyby52YXJfbmFtZT8obnNfbmM9PjxkaXY+PEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIGlkPXtcIm5zbmMtcHJlZ3VudGEtXCIrY2FzaWxsZXJvLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIG1pLXZhcmlhYmxlPXtjYXNpbGxlcm8udmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3Rvbi1wcmVndW50YS1uc25jXCJcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwge3Jlc3B1ZXN0YTpuc19uYywgdmFyaWFibGU6Y2FzaWxsZXJvLnZhcl9uYW1lIGFzIElkVmFyaWFibGUsIGZvclBrOmZvclBrfSlcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIE5TL05DXHJcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj48L2Rpdj4pKGNhc2lsbGVyby52YWxvcl9uc19uYz8/LTkpOm51bGx9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibm9tYnJlLWRpdlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm5vbWJyZVwiPnticmVha2VhYmxlVGV4dChjYXNpbGxlcm8ubm9tYnJlKX08L2Rpdj5cclxuICAgICAgICAgICAge2Nhc2lsbGVyby5hY2xhcmFjaW9uP1xyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhY2xhcmFjaW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge2Nhc2lsbGVyby5zYWx0byAmJiBjYXNpbGxlcm8udGlwb2M9PSdGSUxUUk8nP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8U2FsdG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfSBwcmVmaWpvPXticmVha2VhYmxlVGV4dChjYXNpbGxlcm8uYWNsYXJhY2lvbil9Lz5cclxuICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKVxyXG4gICAgICAgICAgICAgICAgICAgIH0gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDpudWxsfVxyXG4gICAgICAgICAgICA8ZGl2IGxvcy1tZXRhZGF0b3M9XCJzaVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gZWwtbWV0YWRhdG89XCJ2YXJpYWJsZVwiPntjYXNpbGxlcm8udmFyX25hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAge2Nhc2lsbGVyby50aXBvdmFyICYmIGNhc2lsbGVyby50aXBvdmFyIT0nb3BjaW9uZXMnICYmIGNhc2lsbGVyby50aXBvdmFyIT0nc2lfbm8nP1xyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGVsLW1ldGFkYXRvPVwidGlwb3ZhclwiPntjYXNpbGxlcm8udGlwb3Zhcn08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA6bnVsbH1cclxuICAgICAgICAgICAgICAgIHsgICAvL0B0cy1pZ25vcmUgdW5hIG9wY2nDs24gbcO6bHRpcGxlIG51bmNhIGxvIGEgYSBzZXIsIG5vIHRpZW5lIGVsIGNhbXBvLCBubyBpbXBvcnRhXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLm9wdGF0aXZvPzxzcGFuIGVsLW1ldGFkYXRvPVwib3B0YXRpdmFcIj5vcHRhdGl2YTwvc3Bhbj46bnVsbFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAge2NhbGN1bGFkYT88c3BhbiBlbC1tZXRhZGF0bz1cImNhbGN1bGFkYVwiPmNhbGN1bGFkYTwvc3Bhbj46bnVsbH1cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8uZGVzcGxpZWd1ZU9jdWx0YT88c3BhbiBlbC1tZXRhZGF0bz1cIm9jdWx0YVwiPm9jdWx0YTwvc3Bhbj46bnVsbH1cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcj88c3BhbiBlbC1tZXRhZGF0bz1cImV4cHJlc2lvbl9oYWJpbGl0YXJcIj5oYWJpbGl0YToge2Nhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyfTwvc3Bhbj46bnVsbH1cclxuICAgICAgICAgICAgICAgIHsgICAvL0B0cy1pZ25vcmUgYWx0dW5vcyBjYXNpbGxlcm9zIG5vIHRpZW5lbiBlc3BlY2lhbCwgbm8gaW1wb3J0YSwgZXMgc29sbyBwYXJhIHBvbmVyIGxvcyBtZXRhZGF0b3NcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8uZXNwZWNpYWw/LmF1dG9pbmc/PHNwYW4gZWwtbWV0YWRhdG89XCJleHByZXNpb25fYXV0b2luZ1wiPmF1dG9pbmc6IHtjYXNpbGxlcm8uZXNwZWNpYWw/LmF1dG9pbmd9PC9zcGFuPjpudWxsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIERlc3BsZWdhckNvbmZpcm1hckJvcnJhclJlc3B1ZXN0YShwcm9wczp7Zm9yUGs6Rm9yUGssIHZhcmlhYmxlQm9ycmFyOklkVmFyaWFibGV9KXtcclxuICAgIHZhciBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZSghIXByb3BzLnZhcmlhYmxlQm9ycmFyKVxyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgaGFuZGxlQ2xvc2UgPSAoKSA9PiB7XHJcbiAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ09ORklSTUFSX0JPUlJBUl9SRVNQVUVTVEEoe2ZvclBrOnByb3BzLmZvclBrLCB2YXJpYWJsZTpudWxsfSkpO1xyXG4gICAgICAgIHNldE9wZW4oZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDxQb3BvdmVyXHJcbiAgICAgICAgICAgIGlkPXtcInBvcG92ZXItY29uZmlybWFyXCJ9XHJcbiAgICAgICAgICAgIG9wZW49e29wZW59XHJcbiAgICAgICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlfVxyXG4gICAgICAgICAgICBhbmNob3JPcmlnaW49e3tcclxuICAgICAgICAgICAgICAgIHZlcnRpY2FsOiAnYm90dG9tJyxcclxuICAgICAgICAgICAgICAgIGhvcml6b250YWw6ICdjZW50ZXInLFxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW49e3tcclxuICAgICAgICAgICAgICAgIHZlcnRpY2FsOiAndG9wJyxcclxuICAgICAgICAgICAgICAgIGhvcml6b250YWw6ICdsZWZ0JyxcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+ICAgXHJcbiAgICAgICAgICAgIDxUeXBvZ3JhcGh5PkxhIHByZWd1bnRhIHRpZW5lIHJlZ2lzdHJhZGEgdW5hIHJlc3B1ZXN0YSBxdWUgbm8gZnVlIGRldGVjdGFkYSBjb21vIGVycsOzbmVhPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbmZpcm1hLWJvdG9uZXNcIj5cclxuICAgICAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJzZWNvbmRhcnlcIiB2YXJpYW50PVwib3V0bGluZWRcIiBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHByb3BzLnZhcmlhYmxlQm9ycmFyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHtmb3JQazpwcm9wcy5mb3JQaywgdmFyaWFibGU6cHJvcHMudmFyaWFibGVCb3JyYXIsIHJlc3B1ZXN0YTpudWxsfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIH19PmJvcnJhciByZXNwdWVzdGE8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdmFyaWFudD1cIm91dGxpbmVkXCIgb25DbGljaz17aGFuZGxlQ2xvc2V9PnZvbHZlciBzaW4gYm9ycmFyPC9CdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvUG9wb3Zlcj47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGFyTnVlc3RyYUxvbmdpdHVkKGxvbmdpdHVkOnN0cmluZyB8bnVsbCl7XHJcbiAgICByZXR1cm4gbG9uZ2l0dWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUoc2lndWllbnRlVmFyaWFibGU6SWRWYXJpYWJsZXxJZEZpbil7XHJcbiAgICBkZWJlU2FsdGFyID0gZmFsc2U7XHJcbiAgICB2YXIge3RvcCwgZW5mb2NhZG8sIGVsZW1lbnRvSW5wdXRWYXJpYWJsZX0gPSBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8oc2lndWllbnRlVmFyaWFibGUpO1xyXG4gICAgaWYodG9wICE9IG51bGwgJiYgdG9wPjAgJiYgKCFlbmZvY2FkbyB8fCBcInNhbHRhIHNpZW1wcmVcIikpe1xyXG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7dG9wLCBsZWZ0OjAsIGJlaGF2aW9yOidzbW9vdGgnfSk7XHJcbiAgICB9XHJcbiAgICBlbGVtZW50b0lucHV0VmFyaWFibGU/LmZvY3VzKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENhbXBvKHByb3BzOntkaXNhYmxlZDpib29sZWFuLCBwcmVndW50YTpQcmVndW50YVNpbXBsZXxQcmVndW50YUNvbk9wY2lvbmVzfFByZWd1bnRhQ29uU2lOb3xPcGNpb25NdWx0aXBsZSwgZm9yUGs6Rm9yUGssIG1pbmk/OmJvb2xlYW4sIGhpZGRlbj86Ym9vbGVhbnwncXVpdGFyJ30pe1xyXG4gICAgdmFyIHtwcmVndW50YSwgZGlzYWJsZWQsIG1pbmkgfSA9IHByb3BzO1xyXG4gICAgdmFyIHtzYWx0b0F1dG9tYXRpY28sIGNvbkNhbXBvT3BjaW9uZXN9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9PnN0YXRlLm9wY2lvbmVzKTtcclxuICAgIGNvbnN0IGxvbmdpdHVkID0gbWluaSA/IHByZWd1bnRhLmNhc2lsbGVyb3MucmVkdWNlKChhY3VtLCBvKT0+TWF0aC5tYXgoby5jYXNpbGxlcm8udG9TdHJpbmcoKS5sZW5ndGgsIGFjdW0pLCAwKSA6IFxyXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgbWluaSBlcyBwYXJhIGxvcyBvdHJvc1xyXG4gICAgICAgIHByZWd1bnRhLmxvbmdpdHVkO1xyXG4gICAgLy8gdmFyIFt2YWxvciwgc2V0VmFsb3JdID0gdXNlU3RhdGUocHJvcHMudmFsb3IpO1xyXG4gICAgdmFyIFtlZGl0YW5kbywgc2V0RWRpdGFuZG9dID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgLy8gdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIC8vICAgICBzZXRWYWxvcihwcm9wcy52YWxvcilcclxuICAgIC8vIH0sIFtwcm9wcy52YWxvcl0pO1xyXG4gICAgY29uc3QgaW5wdXRQcm9wcyA9IHtcclxuICAgICAgICBtYXhMZW5ndGg6IGxvbmdpdHVkLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IG9uQ2hhbmdlPShudWV2b1ZhbG9yOlZhbG9yfHR5cGVvZiBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPKT0+e1xyXG4gICAgICAgIHZhciB7c2lndWllbnRlVmFyaWFibGV9ID0gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHtmb3JQazpwcm9wcy5mb3JQaywgdmFyaWFibGU6cHJlZ3VudGEudmFyX25hbWUsIHJlc3B1ZXN0YTpudWV2b1ZhbG9yfSk7XHJcbiAgICAgICAgaWYoc2lndWllbnRlVmFyaWFibGUgJiYgZGViZVNhbHRhcil7XHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBhbGd1bm9zIGNhc2lsbGVyb3MgdGllbmVuIGVzcGVjaWFsIHkgb3Ryb3Mgbm9cclxuICAgICAgICAgICAgKHByZWd1bnRhLmVzcGVjaWFsPy5ub1Njcm9sbCA9PSB0cnVlKT9udWxsOmVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUocHJlZ3VudGEuZXNwZWNpYWw/LnNjcm9sbFRvID8/IHNpZ3VpZW50ZVZhcmlhYmxlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdmFyIG51ZXN0cmFMb25naXR1ZCA9IGNhbGN1bGFyTnVlc3RyYUxvbmdpdHVkKGxvbmdpdHVkKVxyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiY2FtcG9cIiBudWVzdHJhLWxvbmdpdHVkPXtudWVzdHJhTG9uZ2l0dWR9IHN0eWxlPXtwcm9wcy5oaWRkZW49PSdxdWl0YXInP3tkaXNwbGF5Oidub25lJ306cHJvcHMuaGlkZGVuP3t2aXNpYmlsaXR5OidoaWRkZW4nfTp1bmRlZmluZWR9PlxyXG4gICAgICAgIHttaW5pP251bGw6PEJvdG9uQm9ycmFyXHJcbiAgICAgICAgICAgIGlkPXtgYm9ycmFyLWFiaWVydGEtJHtwcmVndW50YS52YXJfbmFtZX1gfVxyXG4gICAgICAgICAgICB2YXJpYWJsZT17cHJlZ3VudGEudmFyX25hbWV9XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAvPn1cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImlucHV0LWNhbXBvXCI+XHJcbiAgICAgICAgICAgIDxUZXh0RmllbGQgXHJcbiAgICAgICAgICAgICAgICBpZD17YHZhci0ke3ByZWd1bnRhLnZhcl9uYW1lfWB9XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ2YXJpYWJsZVwiIFxyXG4gICAgICAgICAgICAgICAgLy92YXItbGVuZ3RoPXtwcmVndW50YS5sb25naXR1ZH0gXHJcbiAgICAgICAgICAgICAgICBmdWxsV2lkdGg9e3RydWV9XHJcbiAgICAgICAgICAgICAgICBpbnB1dFByb3BzPXtpbnB1dFByb3BzfVxyXG4gICAgICAgICAgICAgICAgdHlwZT17cHJlZ3VudGEuZGVzcGxpZWd1ZVRpcG9JbnB1dD8/YWRhcHRhclRpcG9WYXJDYXNpbGxlcm8ocHJlZ3VudGEudGlwb3Zhcil9XHJcbiAgICAgICAgICAgICAgICBvbktleURvd249eyhldmVudDpSZWFjdC5LZXlib2FyZEV2ZW50KT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBlc0VudGVyID0gKGV2ZW50LmtleSA9PSAnRW50ZXInIHx8IGV2ZW50LmtleUNvZGUgPT0gMTMpXHJcbiAgICAgICAgICAgICAgICAgICAgZGViZVNhbHRhciA9IGVzRW50ZXIgJiYgKHNhbHRvQXV0b21hdGljbyB8fCBjb25DYW1wb09wY2lvbmVzKTtcclxuICAgICAgICAgICAgICAgICAgICBpZihlc0VudGVyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0LmJsdXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICBvbkZvY3VzPXsoX2V2ZW50KT0+c2V0RWRpdGFuZG8odHJ1ZSl9XHJcbiAgICAgICAgICAgICAgICBvbkJsdXI9eyhldmVudCwgdmFsb3IpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZXZlbnQ/LnJlbGF0ZWRUYXJnZXQ/LmdldEF0dHJpYnV0ZSgnYm90b24tY29uZmlybWFyJykpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWJlU2FsdGFyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2UodmFsb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEVkaXRhbmRvKGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB7ZGlzYWJsZWQgfHwgbWluaT9udWxsOlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJvdG9uLWNvbmZpcm1hci1jYW1wb1wiPlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PXtlZGl0YW5kbz9cImNvbnRhaW5lZFwiOidvdXRsaW5lZCd9IHNpemU9XCJzbWFsbFwiIGNvbG9yPXtlZGl0YW5kbz8ncHJpbWFyeSc6J2RlZmF1bHQnfVxyXG4gICAgICAgICAgICAgICAgICAgIGJvdG9uLWNvbmZpcm1hcj17cHJlZ3VudGEudmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgdGFiSW5kZXg9ey0xfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlKE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFZGl0YW5kbyhmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPjxJQ09OLkNoZWNrLz48L0J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmludGVyZmFjZSBJY2FzaWxsZXJvQ29uT3BjaW9uZXN7XHJcbiAgICB2YXJfbmFtZTpJZFZhcmlhYmxlLFxyXG4gICAgY2FzaWxsZXJvczpPcGNpb25bXVxyXG59XHJcblxyXG5mdW5jdGlvbiBPcGNpb25lc0Rlc3BsaWVndWUoXHJcbiAgICB7Y2FzaWxsZXJvQ29uT3BjaW9uZXMsIGZvclBrLCAgbGVlciwgZGVzcGxpZWd1ZUNvbnRlbmlkb306XHJcbiAgICB7Y2FzaWxsZXJvQ29uT3BjaW9uZXM6SWNhc2lsbGVyb0Nvbk9wY2lvbmVzLCBmb3JQazpGb3JQaywgbGVlcjpib29sZWFuLCBkZXNwbGllZ3VlQ29udGVuaWRvOid2ZXJ0aWNhbCd8J2hvcml6b250YWwnfVxyXG4pe1xyXG4gICAgY29uc3QgZGVzcGxlZ2FyT3Ryb3MgPSAob3BjaW9uOk9wY2lvbiwgc29sb1BhcmFEZXNwbGllZ3VlOid2ZXJ0aWNhbCd8J2hvcml6b250YWwnfG51bGwpID0+IG9wY2lvbi5jYXNpbGxlcm9zLm1hcCgoc3ViUHJlZ3VudGE6UHJlZ3VudGEpPT4oXHJcbiAgICAgICAgc29sb1BhcmFEZXNwbGllZ3VlID09IG51bGwgfHwgc29sb1BhcmFEZXNwbGllZ3VlID09IHN1YlByZWd1bnRhLmRlc3BsaWVndWVDb250ZW5pZG8gP1xyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwib3Ryb3MtZXNwZWNpZmljYXJcIiBrZXk9e3N1YlByZWd1bnRhLmlkX2Nhc2lsbGVyb30+XHJcbiAgICAgICAgICAgIDxQcmVndW50YURlc3BsaWVndWUgXHJcbiAgICAgICAgICAgICAgICBwcmVndW50YT17c3ViUHJlZ3VudGF9IFxyXG4gICAgICAgICAgICAgICAgZm9yUGs9e2ZvclBrfSBcclxuICAgICAgICAgICAgICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvPSdzdXBlcmlvcidcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj46bnVsbFxyXG4gICAgKSlcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNvbnRlbmlkb1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm9wY2lvbmVzXCIgZGVzcGxpZWd1ZS1jb250ZW5pZG89e2Rlc3BsaWVndWVDb250ZW5pZG8/Pyd2ZXJ0aWNhbCd9PlxyXG4gICAgICAgICAgICB7Y2FzaWxsZXJvQ29uT3BjaW9uZXMuY2FzaWxsZXJvcy5tYXAoKG9wY2lvbjpPcGNpb24sIGk6bnVtYmVyKT0+XHJcbiAgICAgICAgICAgICAgICA8R3JpZCBrZXk9e29wY2lvbi5pZF9jYXNpbGxlcm99IGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICBvY3VsdGFyLXNhbHRlYWRhPXtvcGNpb24uZGVzcGxpZWd1ZU9jdWx0YT8ob3BjaW9uLmV4cHJlc2lvbl9oYWJpbGl0YXJfanM/J0lOSEFCSUxJVEFSJzonU0knKTonTk8nfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxPcGNpb25EZXNwbGllZ3VlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm89e29wY2lvbn0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlPXtjYXNpbGxlcm9Db25PcGNpb25lcy52YXJfbmFtZX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbG9yT3BjaW9uPXtvcGNpb24uY2FzaWxsZXJvfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JQaz17Zm9yUGt9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWVyPXtsZWVyfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25Cb3RvbkJvcnJhcj17aT09MCB8fCBkZXNwbGllZ3VlQ29udGVuaWRvIT0naG9yaXpvbnRhbCd9XHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICB7ZGVzcGxpZWd1ZUNvbnRlbmlkbz09J2hvcml6b250YWwnP251bGw6ZGVzcGxlZ2FyT3Ryb3Mob3BjaW9uLG51bGwpfVxyXG4gICAgICAgICAgICAgICAgPC9HcmlkPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtkZXNwbGllZ3VlQ29udGVuaWRvPT0naG9yaXpvbnRhbCc/Y2FzaWxsZXJvQ29uT3BjaW9uZXMuY2FzaWxsZXJvcy5tYXAoKG9wY2lvbjpPcGNpb24pPT5cclxuICAgICAgICAgICAgZGVzcGxlZ2FyT3Ryb3Mob3BjaW9uLG51bGwpXHJcbiAgICAgICAgKTpudWxsfVxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmNvbnN0IG5vbWJyZUNhc2lsbGVybz17XHJcbiAgICBGOiAnZm9ybXVsYXJpbycsXHJcbiAgICBCOiAnYmxvcXVlJyxcclxuICAgIFA6ICdwcmVndW50YScsXHJcbiAgICBDUDogJ2Nvbmp1bnRvcHJlZ3VudGFzJyxcclxuICAgIE86ICdvcGNpb24nLFxyXG4gICAgT006ICdtdWx0aXBsZScsXHJcbiAgICBGSUxUUk86ICdmaWx0cm8nLFxyXG4gICAgQ09OUzogJ2NvbnNpc3RlbmNpYScsXHJcbiAgICBCRjogJ2JvdG9uZm9ybXVsYXJpbycsXHJcbiAgICBURVhUTzogJ2FjbGFyYWNpb25zdXBlcmlvcicsXHJcbn1cclxuXHJcbmZ1bmN0aW9uIERlc3BsZWdhckNhc2lsbGVybyhwcm9wczp7XHJcbiAgICBjYXNpbGxlcm86UHJlZ3VudGF8QmxvcXVlfEZpbHRyb3xDb25qdW50b1ByZWd1bnRhc3xCb3RvbkZvcm11bGFyaW98Q29uc2lzdGVuY2lhfE9wY2lvbk11bHRpcGxlfFRleHRvLFxyXG4gICAgaWQ/OnN0cmluZyxcclxuICAgIHN0eWxlPzpSZWFjdC5DU1NQcm9wZXJ0aWVzLFxyXG4gICAgZGVzcGxpZWd1ZUVuY2FiZXphZG8/OidsYXRlcmFsJ3wnc3VwZXJpb3InXHJcbiAgICBjaGlsZHJlbjpSZWFjdC5SZWFjdE5vZGV8UmVhY3QuUmVhY3ROb2RlW10sXHJcbiAgICBcIm9jdWx0YXItc2FsdGVhZGFcIj86J1NJJ3wnTk8nfCdJTkhBQklMSVRBUid8dW5kZWZpbmVkXHJcbn0pe1xyXG4gICAgcmV0dXJuIDxkaXYgXHJcbiAgICAgICAga2V5PXtgJHtwcm9wcy5jYXNpbGxlcm8udGlwb2N9LSR7cHJvcHMuaWR8fHByb3BzLmNhc2lsbGVyby5pZF9jYXNpbGxlcm99YH1cclxuICAgICAgICBjbGFzc05hbWU9e2BjYXNpbGxlcm8gJHtub21icmVDYXNpbGxlcm9bcHJvcHMuY2FzaWxsZXJvLnRpcG9jXX1gfVxyXG4gICAgICAgIGlkPXtwcm9wcy5pZH1cclxuICAgICAgICBzdHlsZT17cHJvcHMuc3R5bGV9XHJcbiAgICAgICAgZGVzcGxpZWd1ZS1lbmNhYmV6YWRvPXtwcm9wcy5jYXNpbGxlcm8uZGVzcGxpZWd1ZUVuY2FiZXphZG8/P3Byb3BzLmRlc3BsaWVndWVFbmNhYmV6YWRvPz8nc3VwZXJpb3InfVxyXG4gICAgICAgIG9jdWx0YXItc2FsdGVhZGE9e3Byb3BzW1wib2N1bHRhci1zYWx0ZWFkYVwiXX1cclxuICAgID57cHJvcHMuY2hpbGRyZW59PC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFByZWd1bnRhRGVzcGxpZWd1ZShwcm9wczp7XHJcbiAgICBwcmVndW50YTpQcmVndW50YSwgXHJcbiAgICBmb3JQazpGb3JQaywgXHJcbiAgICBkZXNwbGllZ3VlRW5jYWJlemFkbzonbGF0ZXJhbCd8J3N1cGVyaW9yJ1xyXG59KXtcclxuICAgIHZhciB7cHJlZ3VudGF9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBkaXNwYXRjaD11c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIGVzdGFkbzpFc3RhZG9WYXJpYWJsZTtcclxuICAgIHZhciBpZCA9IGBwcmVndW50YS0ke3ByZWd1bnRhLmlkX2Nhc2lsbGVyb31gXHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsIFxyXG4gICAgICAgIGRpcmVjdDp0cnVlLCBcclxuICAgICAgICBmdW46IHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShwcmVndW50YSlcclxuICAgIH0pXHJcbiAgICB2YXIgc3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7fVxyXG4gICAgaWYocHJlZ3VudGEuZGVzcGxpZWd1ZSA9PSAnZ3JpZCcpe1xyXG4gICAgICAgIHN0eWxlLmRpc3BsYXkgPSAnZ3JpZCc7XHJcbiAgICAgICAgc3R5bGUuZ3JpZFRlbXBsYXRlQ29sdW1ucyA9ICdyZXBlYXQoMywxZnIpJztcclxuICAgIH1cclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvXHJcbiAgICAgICAgaWQ9e2lkfVxyXG4gICAgICAgIGNhc2lsbGVybz17cHJlZ3VudGF9XHJcbiAgICAgICAgc3R5bGU9e3N0eWxlfVxyXG4gICAgICAgIG51ZXN0cm8tdGlwb3Zhcj17cHJlZ3VudGEudGlwb3Zhcnx8XCJtdWx0aXBsZVwifSBcclxuICAgICAgICBvY3VsdGFyLXNhbHRlYWRhPXtwcmVndW50YS5kZXNwbGllZ3VlT2N1bHRhPyhwcmVndW50YS5leHByZXNpb25faGFiaWxpdGFyX2pzPydJTkhBQklMSVRBUic6J1NJJyk6J05PJ31cclxuICAgICAgICBkZXNwbGllZ3VlRW5jYWJlemFkbz17cHJvcHMuZGVzcGxpZWd1ZUVuY2FiZXphZG99XHJcblxyXG4gICAgPlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBcclxuICAgICAgICAgICAgY2FzaWxsZXJvPXtwcmVndW50YX0gXHJcbiAgICAgICAgICAgIGxlZXI9e3ByZWd1bnRhLmxlZXIhPT1mYWxzZX0gIFxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRlbmlkb1wiPntcclxuICAgICAgICAgICAgcHJlZ3VudGEudGlwb3Zhcj09XCJzaV9ub1wiPzxHcmlkIGNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxTaU5vRGVzcGxpZWd1ZSBcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm9Db25PcGNpb25lcz17cHJlZ3VudGF9IFxyXG4gICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa30gXHJcbiAgICAgICAgICAgICAgICAgICAgZGVzcGxpZWd1ZUNvbnRlbmlkbz17cHJvcHMucHJlZ3VudGEuZGVzcGxpZWd1ZUNvbnRlbmlkbz8/J3ZlcnRpY2FsJ31cclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvR3JpZD46XHJcbiAgICAgICAgICAgIHByZWd1bnRhLnRpcG92YXI9PVwib3BjaW9uZXNcIiA/XHJcbiAgICAgICAgICAgICAgICA8T3BjaW9uZXNEZXNwbGllZ3VlIFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyb0Nvbk9wY2lvbmVzPXtwcmVndW50YX0gXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfSBcclxuICAgICAgICAgICAgICAgICAgICBsZWVyPXshIXByZWd1bnRhLmxlZXJ9XHJcbiAgICAgICAgICAgICAgICAgICAgZGVzcGxpZWd1ZUNvbnRlbmlkbz17cHJlZ3VudGEuZGVzcGxpZWd1ZUNvbnRlbmlkbz8/J3ZlcnRpY2FsJ31cclxuICAgICAgICAgICAgICAgIC8+OlxyXG4gICAgICAgICAgICBwcmVndW50YS50aXBvdmFyPT1udWxsP1xyXG4gICAgICAgICAgICAgICAgKHByZWd1bnRhLmNhc2lsbGVyb3MgYXMgKE9wY2lvbk11bHRpcGxlfENvbnNpc3RlbmNpYSlbXSkubWFwKChvcGNpb25NdWx0aXBsZSk9PlxyXG4gICAgICAgICAgICAgICAgICAgIG9wY2lvbk11bHRpcGxlLnRpcG9jPT0nT00nPyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPE9wY2lvbk11bHRpcGxlRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtvcGNpb25NdWx0aXBsZS5pZF9jYXNpbGxlcm99IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BjaW9uTT17b3BjaW9uTXVsdGlwbGV9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA6IC8vbGFzIGNvbnNpc3RlbmNpYXMgcHVlZGVuIHNlciBoZXJtYW5hcyBkZSBPTVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Q29uc2lzdGVuY2lhRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtvcGNpb25NdWx0aXBsZS5pZF9jYXNpbGxlcm99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm89e29wY2lvbk11bHRpcGxlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPiAgICBcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAoKHByZWd1bnRhU2ltcGxlOlByZWd1bnRhU2ltcGxlKT0+XHJcbiAgICAgICAgICAgICAgICA8Q2FtcG9cclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17cHJlZ3VudGFTaW1wbGUuY2FsY3VsYWRhP3RydWU6ZmFsc2V9XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZ3VudGE9e3ByZWd1bnRhU2ltcGxlfVxyXG4gICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICkocHJlZ3VudGEpXHJcbiAgICAgICAgfTwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGllLXByZWd1bnRhXCI+XHJcbiAgICAgICAgICAgIDxTYWx0b0Rlc3BsaWVndWUgXHJcbiAgICAgICAgICAgICAgICBjYXNpbGxlcm89e3ByZWd1bnRhfVxyXG4gICAgICAgICAgICAgICAgcHJlZmlqbz17cHJlZ3VudGEudGlwb3Zhcj09XCJvcGNpb25lc1wiPyhcclxuICAgICAgICAgICAgICAgICAgICBwcmVndW50YS5jYXNpbGxlcm9zLnNvbWUob3BjaW9uPT5vcGNpb24uc2FsdG8pP1wicmVzdG8gZGUgbGFzIG9wY2lvbmVzXCI6XCJ0b2RhcyBsYXMgb3BjaW9uZXNcIlxyXG4gICAgICAgICAgICAgICAgKTpcIlwifVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbnZhciBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8gPSAoXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOkNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvfG51bGwsIFxyXG4gICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvOiBDb25maWd1cmFjaW9uSGFiaWxpdGFyQm90b25Gb3JtdWxhcmlvfG51bGwsXHJcbiAgICBmb3JtdWxhcmlvOklkRm9ybXVsYXJpb1xyXG4pPT57XHJcbiAgICBpZihoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gJiYgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dKXtcclxuICAgICAgICByZXR1cm4gIWhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tmb3JtdWxhcmlvXS5oYWJpbGl0YXJfYWdyZWdhcl9saXN0b1xyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgcmV0dXJuICEhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiYgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpbylcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gYm90b25lc0RlbEZvcm11bGFyaW8ocjpSZXNwdWVzdGFzLCB1bmlkYWRfYW5hbGlzaXM6SWRVbmlkYWRBbmFsaXNpcywgZXN0cnVjdHVyYTpFc3RydWN0dXJhLCBmb3JQa1BhZHJlOkZvclBrLCBmZWVkYmFja0FsbDp7W2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj59KTpIdG1sVGFnPEhUTUxEaXZFbGVtZW50PntcclxuICAgIHZhciBmb3Jtc1ZpdmllbmRhID0gZ2V0Rm9ybXVsYXJpb3NGb3JWYWx1ZVBrUmFpeihmb3JQa1BhZHJlW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pO1xyXG4gICAgdmFyIHVhRGVmID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgdmFyIGFycmF5RXN0cnVjdHVyYUZvcm11bGFyaW9zID0gKGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKSkuYXJyYXkoKTtcclxuICAgIHZhciB4ID0gbGlrZUFyKHVhRGVmLmhpamFzKS5maWx0ZXIodWFIaWphPT5cclxuICAgICAgICAgICAgLy9kZXNjYXJ0byB1YXMgcXVlIG5vIGVzdMOpbiBlbiBuaW5ndW4gZm9ybVxyXG4gICAgICAgICAgICBhcnJheUVzdHJ1Y3R1cmFGb3JtdWxhcmlvcy5maWx0ZXIoKGluZm9Gb3JtdWxhcmlvKT0+XHJcbiAgICAgICAgICAgICAgICBpbmZvRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YUhpamE/LnVuaWRhZF9hbmFsaXNpcyAmJiBmb3Jtc1ZpdmllbmRhLmluY2x1ZGVzKGluZm9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MuaWRfY2FzaWxsZXJvIGFzIElkRm9ybXVsYXJpbylcclxuICAgICAgICAgICAgKS5sZW5ndGggPiAwXHJcbiAgICAgICAgKS5tYXAodWFIaWphPT4oXHJcbiAgICAgICAgdWFIaWphID09IG51bGwgPyBudWxsIDpcclxuICAgICAgICBodG1sLmRpdih7Y2xhc3M6J3VhLWhpamFzJ30sW1xyXG4gICAgICAgICAgICBodG1sLmRpdih1YUhpamEudW5pZGFkX2FuYWxpc2lzKSxcclxuICAgICAgICAgICAgaHRtbC5kaXYoXHJcbiAgICAgICAgICAgICAgICBsaWtlQXIoclt1YUhpamEudW5pZGFkX2FuYWxpc2lzXXx8W10pLm1hcCgocmVzcHVlc3Rhc0hpamEsIGkpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG51bSA9IE51bWJlcihpKSsxXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvclBrSGlqYVBhcmNpYWwgPSB7Li4uZm9yUGtQYWRyZSwgW3VhSGlqYS5wa19hZ3JlZ2FkYV06IG51bX07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbz9lc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrUGFkcmVbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSldOm51bGxcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW87XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWwuZGl2KHtjbGFzczonbnVtZXJhZG9yLXVhJ30sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoe2NsYXNzOidib3RvbmVzLXVhJ30sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoe2NsYXNzOidudW1lcm8tdWEnfSxudW0udG9TdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5saWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZm9ybURlZj0+Zm9ybURlZi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YUhpamEudW5pZGFkX2FuYWxpc2lzICYmIGZvcm1zVml2aWVuZGEuaW5jbHVkZXMoZm9ybURlZi5jYXNpbGxlcm9zLmlkX2Nhc2lsbGVybyBhcyBJZEZvcm11bGFyaW8pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoX2Zvcm1EZWYsIGZvcm11bGFyaW8pPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvclBrID0gey4uLmZvclBrSGlqYVBhcmNpYWwsIGZvcm11bGFyaW99O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmZWVkYmFja0Zvcm0gPSBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmVlZGJhY2tGb3JtID8gaHRtbC5kaXYoe30sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodG1sLmJ1dHRvbigodWFIaWphISkucGtfYWdyZWdhZGErXCIgb2s6IFwiKyhOdW1iZXIoaSkrMSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3RvbkZvcm11bGFyaW9Db25SZXN1bWVuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogdHJ1ZSB8fCBjYWxjdWxhckFjdHVhbEJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIG51bSwgbnVsbCwgZm9ybXVsYXJpbywgciksIC8vUkVWSVNBUiB0cnVlIHBhcmEgcXVlIG5vIHNlIGdyaXNlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzpmYWxzZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sIG51bSwgZm9ybXVsYXJpbywgcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkYmFja0Zvcm0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtkZXNwbGllZ3VlT2N1bHRhOmZhbHNlLCBleHByZXNpb25faGFiaWxpdGFyX2pzOicnLCBub21icmU6Zm9ybXVsYXJpbywgYWNsYXJhY2lvbjpudWxsLCBzYWx0bzpmb3JtdWxhcmlvfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrUGFkcmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJvdG9uLWlyLXJlc3VtZW4tZm9ybXVsYXJpb1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JtdWxhcmlvXS5jYXNpbGxlcm9zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmFycmF5KCkubWFwKHg9PnggPT0gbnVsbCA/IG51bGwgOiB4KS5yZXZlcnNlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICxib3RvbmVzRGVsRm9ybXVsYXJpbyhyZXNwdWVzdGFzSGlqYSwgdWFIaWphLnVuaWRhZF9hbmFsaXNpcywgZXN0cnVjdHVyYSwgZm9yUGtIaWphUGFyY2lhbCwgZmVlZGJhY2tBbGwpXHJcbiAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgIH0pLmFycmF5KCkubWFwKHg9PnggPT0gbnVsbCA/IG51bGwgOiB4KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgXSlcclxuICAgICkpLmFycmF5KCkubWFwKHg9PnggPT0gbnVsbCA/IG51bGwgOiB4KTtcclxuICAgIHJldHVybiBodG1sLmRpdigvKntzdHlsZTonZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpyb3cnfSwqL3gpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBUZXh0b0Rlc3BsaWVndWUocHJvcHM6e2Nhc2lsbGVybzpUZXh0bywgZm9yUGs6Rm9yUGt9KXtcclxuICAgIHZhciB7Y2FzaWxsZXJvLCBmb3JQa30gPSBwcm9wcztcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBoYWJpbGl0YWRvciA9IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzP2dldEZ1bmNpb25IYWJpbGl0YXIoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMpOigpPT50cnVlO1xyXG4gICAgdmFyIHttb2RvRGVzcGxpZWd1ZX0gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIHZhciBpZCA9IGB0ZXh0by0ke2Nhc2lsbGVyby5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtpZCwgc3R5bGU6J2Rpc3BsYXknLCBmdW46KHI6UmVzcHVlc3Rhcyk9PmhhYmlsaXRhZG9yKHIpIHx8IG1vZG9EZXNwbGllZ3VlPT0nbWV0YWRhdG9zJz8nYmxvY2snOidub25lJ30pXHJcbiAgICB2YXIgZXNSZXN1bWVuRm9ybXVsYXJpbyA9IGNhc2lsbGVyby5jYXNpbGxlcm89PSdSZXNGb3InIGFzIElkQ2FzaWxsZXJvOyAvLyBUT0RPOiBDYW1iaWEgZXN0byBxdWUgZXN0w6EgamFyY29kZWFkby5cclxuICAgIGlmKGVzUmVzdW1lbkZvcm11bGFyaW8pe1xyXG4gICAgICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtpZCwgZGlyZWN0OnRydWUsIFxyXG4gICAgICAgICAgICBmdW46KFxyXG4gICAgICAgICAgICAgICAgcjpSZXNwdWVzdGFzLCBcclxuICAgICAgICAgICAgICAgIF9mZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvOkhUTUxEaXZFbGVtZW50LCBcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrQWxsOntbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSxWYWxvciwgSWRGaW4+fSwgXHJcbiAgICAgICAgICAgICAgICBlc3RydWN0dXJhOkVzdHJ1Y3R1cmFcclxuICAgICAgICAgICAgKT0+e1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG8uc3R5bGUuZGlzcGxheT0nJztcclxuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBsYXMgcmVzcHVlc3RhcyBzb24gcmVzcHVlc3Rhc1JhaXogcG9ycXVlIFJlc0ZvciBlc3TDoSBlbiBlbCBmb3JtIHBwYWxcclxuICAgICAgICAgICAgICAgIGlmKHJbJ3Jlc3VtZW5Fc3RhZG8nXSBhcyBSZXN1bWVuRXN0YWRvID09ICd2YWNpbycpe1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLnRleHRDb250ZW50ID0gXCJyZWxldmFtaWVudG8gc2luIGVtcGV6YXJcIjtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLnRleHRDb250ZW50ID0gXCJyZWxldmFtaWVudG8gZW1wZXphZG9cIjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIge3VuaWRhZF9hbmFsaXNpc30gPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3M7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8uaW5uZXJIVE1MPVwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8uYXBwZW5kQ2hpbGQoYm90b25lc0RlbEZvcm11bGFyaW8ociwgdW5pZGFkX2FuYWxpc2lzLCBlc3RydWN0dXJhLCBmb3JQaywgZmVlZGJhY2tBbGwpLmNyZWF0ZSgpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB2YXIgaXIgPSAoZGVmQm90b246RGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpcik9PntcclxuICAgICAgICAvLyB2YXIgbnVldmFGb3JQaz17Li4uZm9yUGssIGZvcm11bGFyaW86aWRGb3JtdWxhcmlvRGVzdGlub307XHJcbiAgICAgICAgLy8gbnVldmFGb3JQa1tudWV2b0NhbXBvUGtdID0gZGVmQm90b24ubnVtXHJcbiAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8se2ZvclBrOmRlZkJvdG9uLmZvclBrfSk7XHJcbiAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ0FNQklBUl9GT1JNVUxBUklPKHtmb3JQazpkZWZCb3Rvbi5mb3JQaywgYXBpbGFyVnVlbHRhOnRydWV9KSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBcclxuICAgICAgICBpZD17YCR7aWR9LWV4dGVybm9gfVxyXG4gICAgICAgIGNhc2lsbGVybz17Y2FzaWxsZXJvfVxyXG4gICAgPlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gbGVlcj17ZmFsc2V9IGZvclBrPXtmb3JQa30vPlxyXG4gICAgICAgIDxkaXYgaWQ9e2lkfSBzdHlsZT17e2Rpc3BsYXk6J25vbmUnfX0+PC9kaXY+XHJcbiAgICAgICAge2VzUmVzdW1lbkZvcm11bGFyaW8/XHJcbiAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJzcGVjaWFsLWJ1dHRvblwiIGlkPVwiYm90b24taXItcmVzdW1lbi1mb3JtdWxhcmlvXCIgc3R5bGU9e3tkaXNwbGF5Oidub25lJ319XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCk9PntcclxuICAgICAgICAgICAgICAgIGlyKEpTT04ucGFyc2UoKGV2ZW50LnRhcmdldCEgYXMgdW5rbm93biBhcyBIVE1MQnV0dG9uRWxlbWVudCkuZ2V0QXR0cmlidXRlKCdkZWYtYnV0dG9uJykhKSlcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+aXIgKGludGVybm8pPC9CdXR0b24+XHJcbiAgICAgICAgOm51bGx9XHJcblxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEZpbHRyb0Rlc3BsaWVndWUocHJvcHM6e2ZpbHRybzpGaWx0cm8sIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2ZpbHRyb30gPSBwcm9wcztcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIGNhc2lsbGVybz17ZmlsdHJvfT5cclxuICAgICAgICA8RGVzcGxpZWd1ZUVuY2FiZXphZG8gY2FzaWxsZXJvPXtmaWx0cm99Lz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBDb25zaXN0ZW5jaWFEZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86Q29uc2lzdGVuY2lhLCBmb3JQazpGb3JQa30pe1xyXG4gICAgdmFyIHtjYXNpbGxlcm8sIGZvclBrfSA9IHByb3BzO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanM/Z2V0RnVuY2lvbkhhYmlsaXRhcihjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyk6KCk9PnRydWU7XHJcbiAgICB2YXIge21vZG9EZXNwbGllZ3VlfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgdmFyIGlkID0gYGNvbnNpc3RlbmNpYS0ke2Nhc2lsbGVyby5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtpZCwgc3R5bGU6J2Rpc3BsYXknLCBmdW46KHI6UmVzcHVlc3Rhcyk9PmhhYmlsaXRhZG9yKHIpIHx8IG1vZG9EZXNwbGllZ3VlPT0nbWV0YWRhdG9zJz8nYmxvY2snOidub25lJ30pXHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBcclxuICAgICAgICBpZD17aWR9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtjYXNpbGxlcm99XHJcbiAgICAgICAgc3R5bGU9e3tkaXNwbGF5Oidub25lJ319XHJcbiAgICA+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfSBsZWVyPXtmYWxzZX0gZm9yUGs9e2ZvclBrfS8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxudHlwZSBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyPVxyXG4oe2ZvclBrOkZvclBrLCBudW06bnVtYmVyLCBhY3R1YWw6Ym9vbGVhbiwgcHJldmlvOmJvb2xlYW59IHwgXHJcbntmb3JQazpGb3JQaywgbnVtOm51bWJlciwgYWN0dWFsOmJvb2xlYW4sIHByZXZpbzpmYWxzZSwgZXNBZ3JlZ2FyOnRydWV9IHwgXHJcbntmb3JQazpGb3JQaywgbnVtOm51bWJlciwgYWN0dWFsOmJvb2xlYW4sIHByZXZpbzpmYWxzZSwgZXNDb25maXJtYXI6dHJ1ZX0gfFxyXG57Zm9yUGs6Rm9yUGssIG51bTpudW1iZXIsIGFjdHVhbDpib29sZWFuLCBwcmV2aW86ZmFsc2UsIHBlcm1pdGVCb3JyYXI6Ym9vbGVhbn0gfFxyXG57Zm9yUGs6Rm9yUGssIG51bTpmYWxzZSwgYWN0dWFsOmJvb2xlYW4sIHByZXZpbzp0cnVlLCB1bmljbzp0cnVlfSlcclxuJiB7ZXNDb25maXJtYXI/OnRydWUsIGVzQWdyZWdhcj86dHJ1ZSwgcGVybWl0ZUJvcnJhcj86Ym9vbGVhbiwgZGlzYWJsZWQ/OmJvb2xlYW58dW5kZWZpbmVkfTtcclxuXHJcblxyXG52YXIgYm90b25Gb3JtdWxhcmlvQ29uUmVzdW1lbiA9IChcclxuICAgIGRlZkJvdG9uOkRlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIsIFxyXG4gICAgZmVlZGJhY2tGb3JtOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBcclxuICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzOlJlc3B1ZXN0YXMsXHJcbiAgICBjYXNpbGxlcm86e2Rlc3BsaWVndWVPY3VsdGE/OmJvb2xlYW58bnVsbCwgZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz86c3RyaW5nLCBhY2xhcmFjaW9uOnN0cmluZ3xudWxsLCBleHByZXNpb25faGFiaWxpdGFyPzpzdHJpbmcsIG5vbWJyZT86c3RyaW5nLCBzYWx0bzpzdHJpbmd8bnVsbCwgZXNwZWNpYWw/OmFueX0sXHJcbiAgICBmb3JQa1BhZHJlOiBGb3JQayxcclxuICAgIGlkQnV0dG9uOnN0cmluZyxcclxuICAgIGZvcm11bGFyaW9BQWJyaXI6Rm9ybXVsYXJpb1xyXG4pPT57XHJcbiAgICB2YXIgZm9yUGs6Rm9yUGsgPSBkZWZCb3Rvbi5mb3JQaztcclxuICAgIHZhciBzdWZpam9JZEVsZW1lbnRvID0gdG9QbGFpbkZvclBrKGZvclBrKSsoZGVmQm90b24uZXNDb25maXJtYXI/Jy1saXN0byc6JycpO1xyXG4gICAgdmFyIGlkID0gYGRpdi1ib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gO1xyXG4gICAgdmFyIGVzdGFkbyA9IGZlZWRiYWNrRm9ybS5yZXN1bWVuO1xyXG4gICAgcmV0dXJuIGh0bWwudHIoe1xyXG4gICAgICAgIGlkLCBcclxuICAgICAgICBjbGFzczpcInNlY2Npb24tYm90b24tZm9ybXVsYXJpb1wiICwgXHJcbiAgICAgICAgJGF0dHJzOntcclxuICAgICAgICAgICAgXCJudWVzdHJvLXZhbGlkYXRvclwiOmRlZkJvdG9uLmFjdHVhbD8nYWN0dWFsJzpkZWZCb3Rvbi5wcmV2aW8/J3ZhbGlkYSc6J3RvZGF2aWFfbm8nLFxyXG4gICAgICAgICAgICBcIm9jdWx0YXItc2FsdGVhZGFcIjpjYXNpbGxlcm8uZGVzcGxpZWd1ZU9jdWx0YT8oY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanM/J0lOSEFCSUxJVEFSJzonU0knKTonTk8nLFxyXG4gICAgICAgICAgICBcInRpZW5lLXZhbG9yXCI6XCJOT1wiLFxyXG4gICAgICAgICAgICBcImRlZi1idXR0b25cIjpKU09OLnN0cmluZ2lmeShkZWZCb3RvbilcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgY2FzaWxsZXJvLmFjbGFyYWNpb24/XHJcbiAgICAgICAgICAgIGh0bWwudGQoe2NsYXNzOlwiYWNsYXJhY2lvblwifSwgW2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKV0pXHJcbiAgICAgICAgOm51bGwsXHJcbiAgICAgICAgaHRtbC50ZCh7Y29sc3BhbjooZGVmQm90b24uZXNBZ3JlZ2FyIHx8IGRlZkJvdG9uLmVzQ29uZmlybWFyKT9cclxuICAgICAgICAgICAgICAgIChjYXNpbGxlcm8uZXNwZWNpYWw/LmNhbXBvc1Jlc3VtZW4ubGVuZ3RoPz8xKSsoY2FzaWxsZXJvLmFjbGFyYWNpb24/MDoxKVxyXG4gICAgICAgICAgICA6bnVsbH0sW1xyXG4gICAgICAgICAgICBCdXR0b24yKHtcclxuICAgICAgICAgICAgICAgIC8vIGlkOmB2YXItJHtpZFZhcmlhYmxlfWAsXHJcbiAgICAgICAgICAgICAgICBpZDpgYm90b24tZm9ybXVsYXJpby0ke3N1Zmlqb0lkRWxlbWVudG99YCwgXHJcbiAgICAgICAgICAgICAgICB2YXJpYW50Olwib3V0bGluZWRcIixcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkZWZCb3Rvbi5kaXNhYmxlZCxcclxuICAgICAgICAgICAgICAgIGNvbG9yOlwiaW5oZXJpdFwiLFxyXG4gICAgICAgICAgICAgICAgb25DbGljazooKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGRlZkJvdG9uLmVzQ29uZmlybWFyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGVmQm90b24ubnVtICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2FzaWxsZXJvLnNhbHRvKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgQkZfdmFybmFtZSA9ICckQi5GOicrIGNhc2lsbGVyby5zYWx0byBhcyBJZFZhcmlhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEse2ZvclBrOmZvclBrUGFkcmUsIHZhcmlhYmxlOkJGX3Zhcm5hbWUsIHJlc3B1ZXN0YTpkZWZCb3Rvbi5udW09PTA/bnVsbDpkZWZCb3Rvbi5udW0gYXMgVmFsb3J9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLHtmb3JQazpmb3JQa1BhZHJlLCB2YXJpYWJsZTpjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhciBhcyBJZFZhcmlhYmxlLCByZXNwdWVzdGE6ZGVmQm90b24ubnVtIGFzIFZhbG9yfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkQnV0dG9uKSEgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2RlZi1idXR0b24nLCBKU09OLnN0cmluZ2lmeShkZWZCb3RvbikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgJGF0dHJzOntcclxuICAgICAgICAgICAgICAgICAgICBcInJlc3VtZW4tZXN0YWRvXCI6ZXN0YWRvIT0ndmFjaW8nP2VzdGFkbzogZGVmQm90b24uYWN0dWFsPydhY3R1YWwnOmRlZkJvdG9uLnByZXZpbz9lc3RhZG86J3RvZGF2aWFfbm8nLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLCBjaGlsZHJlbjpbXHJcbiAgICAgICAgICAgICAgICAgICAgKGRlZkJvdG9uLmVzQWdyZWdhcj8nYWdyZWdhcic6ZGVmQm90b24uZXNDb25maXJtYXI/J0xpc3RvJzpjYXNpbGxlcm8ubm9tYnJlICsgJyAnICsgKGRlZkJvdG9uLm51bXx8JycpKSxcclxuICAgICAgICAgICAgICAgICAgICBodG1sLnN2Zyh7Y2xhc3M6XCJNdWlTdmdJY29uLXJvb3RcIiwgZm9jdXNhYmxlOmZhbHNlLCB2aWV3Ym94OlwiMCAwIDI0IDI0XCIsIFwiYXJpYS1oaWRkZW5cIjpcInRydWVcIn0sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLnBhdGgoe2Q6KGRlZkJvdG9uLmVzQWdyZWdhcj9tYXRlcmlhbElvSWNvbnNTdmdQYXRoLkFkZDpkZWZCb3Rvbi5lc0NvbmZpcm1hcj9tYXRlcmlhbElvSWNvbnNTdmdQYXRoLkNoZWNrOmNhc2lsbGVyby5zYWx0bz9tYXRlcmlhbElvSWNvbnNTdmdQYXRoLkZvcndhcmQ6bWF0ZXJpYWxJb0ljb25zU3ZnUGF0aC5FeGl0VG9BcHApfSlcclxuICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKGRlZkJvdG9uLnBlcm1pdGVCb3JyYXI/XHJcbiAgICAgICAgICAgICAgICBCdXR0b24yKHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6XCJib3Rvbi1ib3JyYXItdWEtdmFjaWFcIixcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjpcImRlZmF1bHRcIixcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50Olwib3V0bGluZWRcIixcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5zdmcoe2NsYXNzOlwiTXVpU3ZnSWNvbi1yb290XCIsIGZvY3VzYWJsZTpmYWxzZSwgdmlld2JveDpcIjAgMCAyNCAyNFwiLCBcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCJ9LFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwucGF0aCh7ZDptYXRlcmlhbElvSWNvbnNTdmdQYXRoLkRlbGV0ZUZvcmV2ZXJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSwgXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljazooKT0+YWNjaW9uX2JvcnJhcl9mb3JtdWxhcmlvKHtmb3JQaywgZm9yUGtQYWRyZX0pfSlcclxuICAgICAgICAgICAgOm51bGwpIFxyXG4gICAgICAgIF0pLFxyXG4gICAgICAgIChkZWZCb3Rvbi5udW0gIT09IGZhbHNlICYmICFkZWZCb3Rvbi5lc0FncmVnYXIgJiYgIWRlZkJvdG9uLmVzQ29uZmlybWFyP1xyXG4gICAgICAgICAgICAoY2FzaWxsZXJvLmVzcGVjaWFsPy5jYW1wb3NSZXN1bWVuPz9bLypkZWZCb3Rvbi5udW0udG9TdHJpbmcoKSovXSkubWFwKFxyXG4gICAgICAgICAgICAgICAgKGNhbXBvOnN0cmluZyk9Pmh0bWwudGQocmVzcHVlc3Rhc0F1bWVudGFkYXNbZm9ybXVsYXJpb0FBYnJpci51bmlkYWRfYW5hbGlzaXNdW2RlZkJvdG9uLm51bS0xXVtjYW1wbyBhcyBJZFZhcmlhYmxlXSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIDpudWxsKVxyXG4gICAgICAgIC8vIGh0bWwuZGl2KHtjbGFzczonaW5saW5lLWRpYWxvZycsICRhdHRyczp7XCJpbmxpbmUtZGlhbG9nLW9wZW5cIjogY29uZmlybWFyRm9yemFySXIgPT0gZGVmQm90b24ubnVtPyd2aXNpYmxlJzonaGlkZGVuJ319LFsgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICBcclxuICAgICAgICAvKlxyXG4gICAgICAgICAgICB7ZGVmQm90b24uZXNBZ3JlZ2FyPzw+IDxzcGFuPiAgPC9zcGFuPiA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICA+PElDT04uQ2hlY2svPjwvQnV0dG9uPjwvPjpudWxsfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgICovXHJcbiAgICBdKS5jcmVhdGUoKVxyXG59XHJcblxyXG52YXIgYnVzY2FySG5vc0Zvcm11bGFyaW8gPSAoaWRGb3JtdWxhcmlvRGVzdGlubzpJZEZvcm11bGFyaW8pPT57XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciB1YSA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbaWRGb3JtdWxhcmlvRGVzdGlub10uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXM7XHJcbiAgICByZXR1cm4gbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpXHJcbiAgICAgICAgLmZpbHRlcigoaW5mb0Zvcm11bGFyaW86SW5mb0Zvcm11bGFyaW8sIGlkRm9ybTpJZEZvcm11bGFyaW8pPT5cclxuICAgICAgICAgICAgaW5mb0Zvcm11bGFyaW8uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWFcclxuICAgICAgICApLm1hcCgoX2luZm9Gb3JtdWxhcmlvOkluZm9Gb3JtdWxhcmlvLCBpZEZvcm06SWRGb3JtdWxhcmlvKT0+XHJcbiAgICAgICAgICAgIGlkRm9ybVxyXG4gICAgICAgICkuYXJyYXkoKVxyXG59XHJcblxyXG52YXIgY2hlY2tGb3Jtc1ZhY2lvcyA9IChmb3JtczpJZEZvcm11bGFyaW9bXSwgZmVlZGJhY2tBbGw6e1xyXG4gICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxufSwgZm9yUGs6Rm9yUGspPT57XHJcbiAgICByZXR1cm4gZm9ybXMuZmlsdGVyKChmb3JtOklkRm9ybXVsYXJpbyk9PntcclxuICAgICAgICBsZXQgbXlmb3JQaz17Li4uZm9yUGssIGZvcm11bGFyaW86Zm9ybX07XHJcbiAgICAgICAgdmFyIGZlZWRiYWNrID0gZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKG15Zm9yUGspXTtcclxuICAgICAgICByZXR1cm4gZmVlZGJhY2sucmVzdW1lbiAhPSAndmFjaW8nXHJcbiAgICB9KS5sZW5ndGggPT0gMFxyXG59XHJcblxyXG5mdW5jdGlvbiBCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86Qm90b25Gb3JtdWxhcmlvLCBmb3JtdWxhcmlvOkZvcm11bGFyaW8sIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2Nhc2lsbGVybywgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz9nZXRGdW5jaW9uSGFiaWxpdGFyKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzKTooKT0+dHJ1ZTtcclxuICAgIHZhciB7b3BjaW9uZXN9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICAvL3ZhciBpZEZvcm11bGFyaW9EZXN0aW5vID0gJ0Y6JytjYXNpbGxlcm8uc2FsdG8hIGFzIElkRm9ybXVsYXJpbzsgICAvL29yaWdpbmFsXHJcbiAgICB2YXIgYXJtb05vbVNhbHRvPWNhc2lsbGVyby5zYWx0bz8uc3Vic3RyaW5nKDAsMik9PSdGOic/Y2FzaWxsZXJvLnNhbHRvLnNsaWNlKDIpOmNhc2lsbGVyby5zYWx0bztcclxuICAgIC8vY29uc29sZS5sb2coJ0JvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUgYXJtb05vbVNhbHRvICcgK2FybW9Ob21TYWx0byk7XHJcbiAgICB2YXIgaWRGb3JtdWxhcmlvRGVzdGlubyA9ICdGOicrYXJtb05vbVNhbHRvISBhcyBJZEZvcm11bGFyaW87XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciB7Zm9ybXVsYXJpb0FBYnJpcn0gPSB1c2VTZWxlY3RvcigoX3N0YXRlOkNhc29TdGF0ZSk9Pih7XHJcbiAgICAgICAgZm9ybXVsYXJpb0FBYnJpcjplc3RydWN0dXJhLmZvcm11bGFyaW9zW2lkRm9ybXVsYXJpb0Rlc3Rpbm9dLmNhc2lsbGVyb3MsXHJcbiAgICB9KSk7XHJcbiAgICB2YXIgc3VmaWpvSWRFbGVtZW50byA9IHRvUGxhaW5Gb3JQayhmb3JQayk7XHJcbiAgICAvKlxyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkOmBkaXYtYm90b24tZm9ybXVsYXJpby0ke3N1Zmlqb0lkRWxlbWVudG99YCwgXHJcbiAgICAgICAgYXR0cjonZXN0YS1pbmhhYmlsaXRhZGEnLCBcclxuICAgICAgICAvLyBmdW46IChyOlJlc3B1ZXN0YXMpPT5oYWJpbGl0YWRvcihyKT8nU0knOidOTydcclxuICAgICAgICBmdW46IChfcjpSZXNwdWVzdGFzKT0+J05PJ1xyXG4gICAgfSk7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50bzxIVE1MQnV0dG9uRWxlbWVudD4oe1xyXG4gICAgICAgIGlkOmBib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gLCBcclxuICAgICAgICBwcm9wOidkaXNhYmxlZCcsIFxyXG4gICAgICAgIC8vIGZ1bjogKHI6UmVzcHVlc3Rhcyk9PiFoYWJpbGl0YWRvcihyKVxyXG4gICAgICAgIGZ1bjogKF9yOlJlc3B1ZXN0YXMpPT5mYWxzZVxyXG4gICAgfSk7XHJcbiAgICAqL1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIFtjb25maXJtYXJGb3J6YXJJciwgc2V0Q29uZmlybWFyRm9yemFySXJdID0gdXNlU3RhdGU8RGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpcnxmYWxzZXxudWxsPihudWxsKTtcclxuICAgIHZhciBtdWx0aXBsZUZvcm11bGFyaW9zPWZvcm11bGFyaW9BQWJyaXIudW5pZGFkX2FuYWxpc2lzICE9IHByb3BzLmZvcm11bGFyaW8udW5pZGFkX2FuYWxpc2lzO1xyXG4gICAgdmFyIG51ZXZvQ2FtcG9QayA9IGRlZk9wZXJhdGl2by5kZWZVQVtmb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpc10ucGs7XHJcbiAgIC8vIHZhciB2YXJfbmFtZT0nJEIuJytjYXNpbGxlcm8uc2FsdG87IC8vb3JpZ2luYWxcclxuICAgIHZhciB2YXJfbmFtZT0nJEIuRjonK2FybW9Ob21TYWx0bztcclxuICAgIHZhciBpZFNlY2Npb249YHNlY2Npb24tYm90b24tZm9ybXVsYXJpby0ke3Zhcl9uYW1lfWA7XHJcbiAgICB2YXIgaWRCdXR0b249YHNwZWNpYWwtYnV0dG9uLSR7aWRTZWNjaW9ufWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50bzxIVE1MRGl2RWxlbWVudD4oe1xyXG4gICAgICAgIGlkOmlkU2VjY2lvbiwgXHJcbiAgICAgICAgZGlyZWN0OnRydWUsXHJcbiAgICAgICAgZnVuOiAocmVzcHVlc3Rhc0F1bWVudGFkYXM6UmVzcHVlc3RhcywgZmVlZGJhY2tSb3c6IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBkaXY6SFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja0FsbDp7XHJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKT0+e1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGFEZUJvdG9uZXNBYnJpcjpEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyW10gPSBbXTtcclxuICAgICAgICAgICAgICAgLy8gdmFyIGVzVmFyQWN0dWFsID0gZmVlZGJhY2tSb3cuYWN0dWFsID09ICckQi5GOicrY2FzaWxsZXJvLnNhbHRvOyAgLy9vcmlnaW5hbFxyXG4gICAgICAgICAgICAgICAgdmFyIGVzVmFyQWN0dWFsID0gZmVlZGJhY2tSb3cuYWN0dWFsICA9PSAnJEIuRjonK2FybW9Ob21TYWx0bztcclxuICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0JvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUgZXNWYXJBY3R1YWwgJyArZXNWYXJBY3R1YWwgICk7XHJcbiAgICAgICAgICAgICAgICBpZihtdWx0aXBsZUZvcm11bGFyaW9zICYmIGNhc2lsbGVyby5zYWx0byE9bnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgIC8vICBsZXQgZGVmRm9ybXVsYXJpbzpJbmZvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbJ0Y6JytjYXNpbGxlcm8uc2FsdG8gYXMgSWRGb3JtdWxhcmlvXTsgICAgICAvL29yaWdpbmFsXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlZkZvcm11bGFyaW86SW5mb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zWydGOicrYXJtb05vbVNhbHRvIGFzIElkRm9ybXVsYXJpb107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlZlVBID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1tkZWZGb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzIV07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmp1bnRvID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbZGVmRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYW50aWRhZEVzcGVyYWRhID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgYXMgSWRWYXJpYWJsZV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG51bUFjdHVhbDpudW1iZXJ8bnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgIC8vICB2YXIgZXN0YWRvRGVsQm90b24gPSBmZWVkYmFja1Jvdy5mZWVkYmFja1snJEIuRjonK2Nhc2lsbGVyby5zYWx0byBhcyBJZFZhcmlhYmxlXS5lc3RhZG8gICAvL29yaWdpbmFsXHJcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgZXN0YWRvRGVsQm90b24gPSBmZWVkYmFja1Jvdy5mZWVkYmFja1snJEIuRjonK2FybW9Ob21TYWx0byBhcyBJZFZhcmlhYmxlXS5lc3RhZG9cclxuICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlIGVzdGFkb0RlbEJvdG9uICcgK2VzdGFkb0RlbEJvdG9uICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8/ZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKV06bnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gPSBlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyID0gbGlrZUFyKGNvbmp1bnRvKS5tYXAoKF8sIGkpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBudW06bnVtYmVyID0gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KGksIGNvbmp1bnRvKSBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JQaz17Li4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86aWRGb3JtdWxhcmlvRGVzdGlubywgW251ZXZvQ2FtcG9Qa106bnVtfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1Ibm9zID0gYnVzY2FySG5vc0Zvcm11bGFyaW8oaWRGb3JtdWxhcmlvRGVzdGlubylcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZlZWRiYWNrID0gZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKGZvclBrKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG51bUFjdHVhbCA9PSBudWxsICYmIGZlZWRiYWNrLnJlc3VtZW4gPT0gXCJ2YWNpb1wiICYmIGVzdGFkb0RlbEJvdG9uID09J3ZhbGlkYScpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQWN0dWFsID0gbnVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bWVuOm51bGwsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogY2FsY3VsYXJBY3R1YWxCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBudW0sIG51bUFjdHVhbCwgaWRGb3JtdWxhcmlvRGVzdGlubywgcmVzcHVlc3Rhc0F1bWVudGFkYXMpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOiBudW1BY3R1YWwgPT0gbnVsbCwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXRlQm9ycmFyOiBsaWtlQXIoY29uanVudG8pLmFycmF5KCkubGVuZ3RoID09IE51bWJlcihpKSArIDEgJiYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tGb3Jtc1ZhY2lvcyhmb3JtSG5vcywgZmVlZGJhY2tBbGwsIGZvclBrKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGFyUGVybWl0ZUJvcnJhckJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8saWRGb3JtdWxhcmlvRGVzdGlubyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogY2FsY3VsYXJEaXNhYmxlZEJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbywgbnVtLCBpZEZvcm11bGFyaW9EZXN0aW5vLCByZXNwdWVzdGFzQXVtZW50YWRhcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pLmFycmF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoXCJwdWVkZSBhZ3JlZ2FyIC8vVE9ETyBWRVIgRVNUT1wiICYmIChjb25qdW50byBpbnN0YW5jZW9mIEFycmF5IHx8IGNvbmp1bnRvID09IG51bGwpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG51ZXZvVmFsb3JQaz0oY29uanVudG89PW51bGwgPyAwIDogY29uanVudG8ubGVuZ3RoKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JQaz17Li4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86aWRGb3JtdWxhcmlvRGVzdGlubywgW251ZXZvQ2FtcG9Qa106bnVldm9WYWxvclBrfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRlYmVBZ3JlZ2FyT2xpc3RvID0gbnVtQWN0dWFsID09IG51bGwgJiYgKGNhbnRpZGFkRXNwZXJhZGEgPT0gbnVsbCB8fCBjYW50aWRhZEVzcGVyYWRhICE9IChjb25qdW50byAhPW51bGwgJiYgY29uanVudG8ubGVuZ3RoKSkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoZXN0YWRvRGVsQm90b24gPT0ndmFsaWRhJyB8fCBlc1ZhckFjdHVhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RhRGVCb3RvbmVzQWJyaXIucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW06bnVldm9WYWxvclBrLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzQWdyZWdhcjp0cnVlLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDpkZWJlQWdyZWdhck9saXN0bywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86IGZhbHNlLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8oY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBpZEZvcm11bGFyaW9EZXN0aW5vKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bTpudWV2b1ZhbG9yUGsgLSAxLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzQ29uZmlybWFyOnRydWUsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOmRlYmVBZ3JlZ2FyT2xpc3RvICYmICghY2FzaWxsZXJvLmxvbmdpdHVkIHx8IG51ZXZvVmFsb3JQayA+IE51bWJlcihjYXNpbGxlcm8ubG9uZ2l0dWQpKSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86IGZhbHNlLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8oY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBpZEZvcm11bGFyaW9EZXN0aW5vKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZm9yUGs9ey4uLnByb3BzLmZvclBrLCBmb3JtdWxhcmlvOmlkRm9ybXVsYXJpb0Rlc3Rpbm99O1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RhRGVCb3RvbmVzQWJyaXIgPSBbe2ZvclBrLCBudW06ZmFsc2UsIHVuaWNvOnRydWUsIGFjdHVhbDplc1ZhckFjdHVhbCwgcHJldmlvOnRydWV9XVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHRvZG9zTG9zQm90b25lcyA9IGxpc3RhRGVCb3RvbmVzQWJyaXIubWFwKGRlZkJvdG9uPT5cclxuICAgICAgICAgICAgICAgICAgICBib3RvbkZvcm11bGFyaW9Db25SZXN1bWVuKGRlZkJvdG9uLCBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsoZGVmQm90b24uZm9yUGspXT8/e3Jlc3VtZW46J3ZhY2lvJ30sIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8sIHByb3BzLmZvclBrLCBpZEJ1dHRvbiwgZm9ybXVsYXJpb0FBYnJpclxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIGxldCBub21icmVzQ2FtcG9zUmVzdW1lbiA9IGxpa2VBcigoY2FzaWxsZXJvLmVzcGVjaWFsPy5jYW1wb3NSZXN1bWVufHxbXSkpLmFycmF5KCkubWFwKGM9PmMpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGh0bWxTZWNjaW9uPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkU2VjY2lvbikhO1xyXG4gICAgICAgICAgICAgICAgaHRtbFNlY2Npb24uaW5uZXJIVE1MPVwiXCI7XHJcbiAgICAgICAgICAgICAgICBodG1sU2VjY2lvbi5hcHBlbmRDaGlsZChodG1sLnRhYmxlKHtjbGFzczpgdGFibGUgdGFibGUtc3RyaXBlZCAke25vbWJyZXNDYW1wb3NSZXN1bWVuLmxlbmd0aD8ndy1hdXRvJzonJ31gfSxbXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC50aGVhZChbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwudHIoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLmFjbGFyYWNpb24/aHRtbC50aCgpOm51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLnRoKGNhc2lsbGVyby5ub21icmUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9tYnJlc0NhbXBvc1Jlc3VtZW4ubWFwKChub21icmVDYW1wbyk9Pmh0bWwudGgobm9tYnJlQ2FtcG8pKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICBodG1sLnRib2R5KFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9kb3NMb3NCb3RvbmVzXHJcbiAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgIF0pLmNyZWF0ZSgpKTtcclxuICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSB1bmV4cGVjdGVkKGVycik7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImVudHJhIGFsIGNhdGNoXCIpXHJcbiAgICAgICAgICAgICAgICBkaXYudGV4dENvbnRlbnQ9J2VzdG8sIEZBTEzDiSAnK2Vycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGlyID0gKGRlZkJvdG9uOkRlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIpPT57XHJcbiAgICAgICAgaWYoIWNhc2lsbGVyby5zYWx0byl7XHJcbiAgICAgICAgICAgIG9wY2lvbmVzLm1vZG9EaXJlY3RvP1xyXG4gICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5WT0xWRVJfSERSKHt9KSk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHZhciBudWV2YUZvclBrPXsuLi5mb3JQaywgZm9ybXVsYXJpbzppZEZvcm11bGFyaW9EZXN0aW5vfTtcclxuICAgICAgICAgICAgaWYobXVsdGlwbGVGb3JtdWxhcmlvcyl7XHJcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIGZvclBrIHkgc3VzIGNvbXBvbmVudGVzXHJcbiAgICAgICAgICAgICAgICBudWV2YUZvclBrW251ZXZvQ2FtcG9Qa10gPSBkZWZCb3Rvbi5udW1cclxuICAgICAgICAgICAgICAgIGlmKGRlZkJvdG9uLmVzQWdyZWdhcil7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FncmVnYXJfZm9ybXVsYXJpbyx7Zm9yUGs6bnVldmFGb3JQa30pO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8se2ZvclBrOm51ZXZhRm9yUGt9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oe2ZvclBrOm51ZXZhRm9yUGssIGFwaWxhclZ1ZWx0YTp0cnVlfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihjb25maXJtYXJGb3J6YXJJcil7c2V0Q29uZmlybWFyRm9yemFySXIoZmFsc2UpfVxyXG4gICAgfTtcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIGNhc2lsbGVybz17Y2FzaWxsZXJvfT5cclxuICAgICAgICA8ZGl2IGlkPXtpZFNlY2Npb259PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwic3BlY2lhbC1idXR0b25cIiBpZD17aWRCdXR0b259XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCk9PntcclxuICAgICAgICAgICAgICAgIGlyKEpTT04ucGFyc2UoKGV2ZW50LnRhcmdldCEgYXMgdW5rbm93biBhcyBIVE1MQnV0dG9uRWxlbWVudCkuZ2V0QXR0cmlidXRlKCdkZWYtYnV0dG9uJykhKSlcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+aXIgKGludGVybm8pPC9CdXR0b24+XHJcbiAgICAgICAgPERpYWxvZyBcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibnVlc3Ryby1kaWFsb2dvXCJcclxuICAgICAgICAgICAgb3Blbj17ISFjb25maXJtYXJGb3J6YXJJcn1cclxuICAgICAgICAgICAgb25DbG9zZT17KCk9PnNldENvbmZpcm1hckZvcnphcklyKG51bGwpfVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJudWVzdHJvLWRpYWxvZ29cIj5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5Pk5vIHNlIHB1ZWRlIGF2YW56YXIgYWwgc2lndWllbnRlIGZvcm11bGFyaW8uPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+UXVpesOhcyBubyB0ZXJtaW7DsyBkZSBjb250ZXN0YXIgbGFzIHByZWd1bnRhcyBjb3JyZXNwb25kaWVudGVzPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+UXVpesOhcyBubyBjb3JyZXNwb25kZSBlbiBiYXNlIGEgbGFzIHJlc3B1ZXN0YXMgb2J0ZW5pZGFzPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInNlY29uZGFyeVwiIG9uQ2xpY2s9eygpPT5jb25maXJtYXJGb3J6YXJJciAmJiBpcihjb25maXJtYXJGb3J6YXJJcil9PmZvcnphcjwvQnV0dG9uPlxyXG4gICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHZhcmlhbnQ9XCJjb250YWluZWRcIiBvbkNsaWNrPXsoKT0+c2V0Q29uZmlybWFyRm9yemFySXIobnVsbCl9PkVudGVuZGlkbzwvQnV0dG9uPlxyXG4gICAgICAgIDwvRGlhbG9nPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENhc2lsbGVyb0Rlc2Nvbm9jaWRvKHByb3BzOntjYXNpbGxlcm86Q2FzaWxsZXJvQmFzZSwgZm9yUGs6Rm9yUGt9KXtcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIFxyXG4gICAgICAgIGlkPXtgY2FzaWxsZXJvZGVzY29ub2NpZG8tJHtwcm9wcy5jYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWB9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtwcm9wcy5jYXNpbGxlcm8gYXMgQmxvcXVlfVxyXG4gICAgICAgIHN0eWxlPXt7ZGlzcGxheTonbm9uZSd9fVxyXG4gICAgPlxyXG4gICAgICAgIDxUeXBvZ3JhcGh5PlRpcG8gZGUgY2FzaWxsZXJvIG5vIGltcGxlbWVudGFkbzogXCJ7cHJvcHMuY2FzaWxsZXJvLnRpcG9jfVwiIHBhcmEgXCJ7cHJvcHMuY2FzaWxsZXJvLmNhc2lsbGVyb31cIjwvVHlwb2dyYXBoeT5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtwcm9wcy5jYXNpbGxlcm8gYXMgQ2FzaWxsZXJvRW5jYWJlemFibGV9IGxlZXI9e2ZhbHNlfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrOkZvclBrKXtcclxuICAgIHJldHVybiB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+e1xyXG4gICAgICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZvcm11bGFyaW86IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcyxcclxuICAgICAgICAgICAgbW9kb0Rlc3BsaWVndWU6IHRydWUgfHwgc3RhdGUubW9kby5kZW1vP3N0YXRlLm9wY2lvbmVzLm1vZG9EZXNwbGllZ3VlOidyZWxldmFtaWVudG8nLFxyXG4gICAgICAgICAgICBtb2RvOiBzdGF0ZS5tb2RvLFxyXG4gICAgICAgICAgICBvcGNpb25lczogc3RhdGUub3BjaW9uZXMsXHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxufVxyXG5cclxuZnVuY3Rpb24gQ29uanVudG9QcmVndW50YXNEZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86Q29uanVudG9QcmVndW50YXMsIGZvcm11bGFyaW86Rm9ybXVsYXJpbywgZm9yUGs6Rm9yUGt9KXtcclxuICAgIGxldCB7Y2FzaWxsZXJvLCBmb3JQa30gPSBwcm9wcztcclxuICAgIHZhciBpZCA9IGBjb25qdW50by1wcmVndW50YXMtJHtjYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsIFxyXG4gICAgICAgIGRpcmVjdDp0cnVlLCBcclxuICAgICAgICBmdW46IHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShjYXNpbGxlcm8pXHJcbiAgICB9KVxyXG4gICAgbGV0IG1vZG9EZXNwbGllZ3VlID0gXCJub3JtYWxcIjtcclxuICAgIGxldCBoYWJpbGl0YWRvID0gdHJ1ZTtcclxuICAgIHJldHVybiBoYWJpbGl0YWRvIHx8IG1vZG9EZXNwbGllZ3VlPT0nbWV0YWRhdG9zJz88RGVzcGxlZ2FyQ2FzaWxsZXJvIGlkPXtpZH0gY2FzaWxsZXJvPXtjYXNpbGxlcm99PlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e2ZvclBrfSBsZWVyPXtjYXNpbGxlcm8ubGVlciE9PWZhbHNlfS8+XHJcbiAgICAgICAgPERlc3BsZWdhckNvbnRlbmlkb0ludGVybm9CbG9xdWVPRm9ybXVsYXJpbyBibG9xdWVPRm9ybXVsYXJpbz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17Zm9yUGt9IG11bHRpcGxlPXtmYWxzZX0vPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+Om51bGw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIERlc3BsZWdhckNvbnRlbmlkb0ludGVybm9CbG9xdWVPRm9ybXVsYXJpbyhwcm9wczp7YmxvcXVlT0Zvcm11bGFyaW86QmxvcXVlfEZvcm11bGFyaW98Q29uanVudG9QcmVndW50YXMsIGZvcm11bGFyaW86Rm9ybXVsYXJpbywgZm9yUGs6Rm9yUGssIG11bHRpcGxlOmJvb2xlYW59KXtcclxuICAgIHZhciBwYXJjaWFsaXphYmxlID0gcHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2M9PSdGJztcclxuICAgIGNvbnN0IFt2ZXJUb2RvLCBzZXRWZXJUb2RvXSA9IHVzZVN0YXRlKCFwYXJjaWFsaXphYmxlKTtcclxuICAgIGNvbnN0IFtmb3JQa0FjdHVhbCwgc2V0Rm9yUGtBY3R1YWxdID0gdXNlU3RhdGU8SWRDYXNpbGxlcm98bnVsbD4obnVsbCk7XHJcbiAgICBpZihwYXJjaWFsaXphYmxlKXtcclxuICAgICAgICBpZihmb3JQa0FjdHVhbCAhPSBwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby5jYXNpbGxlcm8pe1xyXG4gICAgICAgICAgICBzZXRWZXJUb2RvKGZhbHNlKVxyXG4gICAgICAgICAgICBzZXRGb3JQa0FjdHVhbChwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby5jYXNpbGxlcm8pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHVzZUVmZmVjdCgoKT0+e1xyXG4gICAgICAgICAgICB2YXIgdGltZXIgPSBzZXRUaW1lb3V0KCgpPT57XHJcbiAgICAgICAgICAgICAgICBzZXRWZXJUb2RvKHRydWUpO1xyXG4gICAgICAgICAgICB9LDI1MClcclxuICAgICAgICAgICAgcmV0dXJuICgpPT57XHJcbiAgICAgICAgICAgICAgICBpZih0aW1lcil7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBjb25zdCBsaW1pdGVOb1ZlclRvZG8gPSAzO1xyXG4gICAgdXNlRWZmZWN0KCgpPT57XHJcbiAgICAgICAgaWYocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2M9PSdGJyl7XHJcbiAgICAgICAgICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MocHJvcHMuZm9yUGspO1xyXG4gICAgICAgIH1cclxuICAgIH0sW3RvUGxhaW5Gb3JQayhwcm9wcy5mb3JQayksdmVyVG9kb10pXHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmKHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLnRpcG9jPT0nRicgJiYgdmVyVG9kbyl7XHJcbiAgICAgICAgICAgIHZhciB7c2lndWllbnRlVmFyaWFibGUsIHZhcmlhYmxlQWN0dWFsfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7cmVzcHVlc3RhOm51bGwsIHZhcmlhYmxlOk5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTLCBmb3JQazpwcm9wcy5mb3JQa30pO1xyXG4gICAgICAgICAgICBpZih2YXJpYWJsZUFjdHVhbCB8fCBzaWd1aWVudGVWYXJpYWJsZSl7XHJcbiAgICAgICAgICAgICAgICBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKGNvYWxlc2NlKHZhcmlhYmxlQWN0dWFsIGFzIHN0cmluZ3xudWxsLHNpZ3VpZW50ZVZhcmlhYmxlIGFzIHN0cmluZ3xudWxsKSBhcyBJZFZhcmlhYmxlKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHZhciBmZWVkYmFja1Jvd1ZhbGlkYXRvciA9IGdldEZlZWRiYWNrUm93VmFsaWRhdG9yKClcclxuICAgICAgICAgICAgICAgIGlmKGZlZWRiYWNrUm93VmFsaWRhdG9yW3RvUGxhaW5Gb3JQayhwcm9wcy5mb3JQayldLnJlc3VtZW49PSdvaycpe1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvVG9wKClcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvVG9wKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiY29udGVuaWRvXCI+XHJcbiAgICAgICAge3ZlclRvZG8/bnVsbDo8ZGl2IHN0eWxlPXt7aGVpZ2h0OlwiNTAwcHhcIiwgdGV4dEFsaWduOidjZW50ZXInLCB2ZXJ0aWNhbEFsaWduOidtaWRkbGUnLCB3aWR0aDonMTAwJScsIHBvc2l0aW9uOlwiZml4ZWRcIiwgYmFja2dyb3VuZENvbG9yOiAncmdiYSgxMDAsMTAwLDEwMCwwLjMpJywgZm9udFNpemU6JzIwMCUnfX0gPmNhcmdhbmRvLi4uPC9kaXY+fVxyXG4gICAgICAgIHtwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby5jYXNpbGxlcm9zLm1hcCgoY2FzaWxsZXJvLCBpKT0+e1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gY2FzaWxsZXJvLnRpcG9jKyctJytjYXNpbGxlcm8uaWRfY2FzaWxsZXJvKyctJytpO1xyXG4gICAgICAgICAgICByZXR1cm4gKHZlclRvZG8gfHwgaSA8IGxpbWl0ZU5vVmVyVG9kbz9cclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJQXCI/PFByZWd1bnRhRGVzcGxpZWd1ZSBrZXk9e2tleX0gcHJlZ3VudGE9e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfSBkZXNwbGllZ3VlRW5jYWJlemFkbz17Y2FzaWxsZXJvLmRlc3BsaWVndWVFbmNhYmV6YWRvPz8ocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2M9PSdDUCc/J2xhdGVyYWwnOidzdXBlcmlvcicpfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkJcIj88QmxvcXVlRGVzcGxpZWd1ZSBrZXk9e2tleX0gYmxvcXVlPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJGSUxUUk9cIj88RmlsdHJvRGVzcGxpZWd1ZSBrZXk9e2tleX0gZmlsdHJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJCRlwiPzxCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkNPTlNcIj88Q29uc2lzdGVuY2lhRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJDUFwiPzxDb25qdW50b1ByZWd1bnRhc0Rlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiVEVYVE9cIj88VGV4dG9EZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkxJQlJFXCI/PExpYnJlRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICA8Q2FzaWxsZXJvRGVzY29ub2NpZG8ga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz5cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgOmk9PWxpbWl0ZU5vVmVyVG9kbz9cclxuICAgICAgICAgICAgICAgIDxkaXYga2V5PSckc3Bpbm5lcicgY2xhc3NOYW1lPVwic3Bpbm5lci1ib3JkZXJcIiByb2xlPVwic3RhdHVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Y2FyZ2FuZG8gYmxvcXVlLi4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDpudWxsXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9KVxyXG4gICAgfTwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBCbG9xdWVEZXNwbGllZ3VlKHByb3BzOntibG9xdWU6QmxvcXVlLCBmb3JtdWxhcmlvOkZvcm11bGFyaW8sIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2Jsb3F1ZSwgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIga2V5PWJsb3F1ZS52ZXJfaWQhPSctJyAmJiBibG9xdWUudmVyX2lkIHx8IGJsb3F1ZS5jYXNpbGxlcm87XHJcbiAgICB2YXIgYWN0aXZlU3RlcD0wO1xyXG4gICAgdmFyIG11bHRpcGxlID0gISFibG9xdWUudW5pZGFkX2FuYWxpc2lzO1xyXG4gICAgdmFyIGxpc3RhID0gW3tmb3JQaywga2V5OjAsIG11bHRpcGxlOmZhbHNlfV07XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBibG9xdWUuZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz9nZXRGdW5jaW9uSGFiaWxpdGFyKGJsb3F1ZS5leHByZXNpb25faGFiaWxpdGFyX2pzKTooKT0+dHJ1ZTtcclxuICAgIHZhciB7bW9kb0Rlc3BsaWVndWV9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICBpZihtdWx0aXBsZSl7XHJcbiAgICAgICAgLy8gVE9ETzogR0VORVJBTElaQVJcclxuICAgICAgICAvLyBAdHMtaWdub3JlIFxyXG4gICAgICAgIC8vIGxpc3RhPXJlc3B1ZXN0YXMucGVyc29uYXMubWFwKChfcGVyc29uYSwgaSk9PihcclxuICAgICAgICAvLyAgICAge2ZvclBrOnsuLi5mb3JQaywgcGVyc29uYTppKzF9LCBrZXk6aSsxLCBtdWx0aXBsZTp0cnVlfVxyXG4gICAgICAgIC8vICkpXHJcbiAgICB9XHJcbiAgICB2YXIgaWQgPSBgYmxvcXVlLSR7YmxvcXVlLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkLFxyXG4gICAgICAgIHN0eWxlOidkaXNwbGF5JyxcclxuICAgICAgICBmdW46IChyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4gaGFiaWxpdGFkb3IocmVzcHVlc3RhcykgfHwgbW9kb0Rlc3BsaWVndWU9PSdtZXRhZGF0b3MnPyd1bnNldCc6J25vbmUnXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gY2FzaWxsZXJvPXtibG9xdWV9IG51ZXN0cm8tYmxvcXVlPXtibG9xdWUuaWRfY2FzaWxsZXJvfSBlcy1tdWx0aXBsZT17bXVsdGlwbGU/J1NJJzonTk8nfSBpZD17aWR9PlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Jsb3F1ZX0gZm9yUGs9e2ZvclBrfS8+XHJcbiAgICAgICAge2xpc3RhLm1hcCgoe2tleSwgZm9yUGssIG11bHRpcGxlfSk9PlxyXG4gICAgICAgICAgICA8RGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvIGtleT17a2V5fSBibG9xdWVPRm9ybXVsYXJpbz17YmxvcXVlfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17Zm9yUGt9IG11bHRpcGxlPXttdWx0aXBsZX0vPlxyXG4gICAgICAgICl9XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz47XHJcbn1cclxuXHJcbmNvbnN0IEZvcm11bGFyaW9FbmNhYmV6YWRvID0gRGVzcGxpZWd1ZUVuY2FiZXphZG87XHJcblxyXG5mdW5jdGlvbiBNZW51TGV0cmEocHJvcHM6e3RhbWFubmlvOm51bWJlciwgZGVub21pbmFjaW9uOnN0cmluZ30pe1xyXG4gICAgY29uc3QgY2FtYmlhckxldHJhID0gKHRhbWFubmlvOm51bWJlcik9PntcclxuICAgICAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuICAgICAgICByb290LnN0eWxlLmZvbnRTaXplPXRhbWFubmlvK1wicHhcIjtcclxuICAgIH1cclxuICAgIHJldHVybiA8TWVudUl0ZW1cclxuICAgICAgICBvbkNsaWNrPXsoKT0+Y2FtYmlhckxldHJhKHByb3BzLnRhbWFubmlvKX0gc3R5bGU9e3tmb250U2l6ZTpwcm9wcy50YW1hbm5pbysncHgnfX1cclxuICAgID5sZXRyYSB7cHJvcHMuZGVub21pbmFjaW9ufTwvTWVudUl0ZW0+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEZhc3RTZXR0dXAoKXtcclxuICAgIGNvbnN0IFthbmNob3JFbCwgc2V0QW5jaG9yRWxdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBoYW5kbGVDbGljayA9IChldmVudDphbnkpID0+IHtcclxuICAgICAgICBzZXRBbmNob3JFbChldmVudC5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBzZXRPcGVuKChwcmV2KSA9PiAhcHJldik7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgY2FtYmlhciA9IChtb2RvRGVzcGxpZWd1ZTpNb2RvRGVzcGxpZWd1ZSk9PntcclxuICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5NT0RPX0RFU1BMSUVHVUUoe21vZG9EZXNwbGllZ3VlfSkpO1xyXG4gICAgICAgIHNldE9wZW4oZmFsc2UpXHJcbiAgICB9XHJcbiAgICBjb25zdCBvcGNpb25lcyA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT5zdGF0ZS5vcGNpb25lcylcclxuICAgIHJldHVybiA8PlxyXG4gICAgICAgIDxCdXR0b24gb25DbGljaz17aGFuZGxlQ2xpY2t9PlxyXG4gICAgICAgICAgICA8SUNPTi5TZXR0aW5ncy8+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgPE1lbnUgb3Blbj17b3Blbn0gYW5jaG9yRWw9e2FuY2hvckVsfSBvbkNsb3NlPXsoKT0+c2V0T3BlbihmYWxzZSl9PlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0gb25DbGljaz17KCk9PmNhbWJpYXIoXCJyZWxldmFtaWVudG9cIil9Pm5vcm1hbDwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbSBvbkNsaWNrPXsoKT0+Y2FtYmlhcihcIlBERlwiICAgICAgICAgKX0+UERGIHBhcmEgcmVsZXZhbWllbnRvPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtIG9uQ2xpY2s9eygpPT5jYW1iaWFyKFwibWV0YWRhdG9zXCIgICApfT5yZXZpc2FyIG1ldGFkYXRvczwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgIDxEaXZpZGVyLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTJ9IGRlbm9taW5hY2lvbiA9IFwibXV5IGNoaWNhXCIvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsxNH0gZGVub21pbmFjaW9uID0gXCJjaGljYVwiLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTZ9IGRlbm9taW5hY2lvbiA9IFwibm9ybWFsXCIvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsxOX0gZGVub21pbmFjaW9uID0gXCJncmFuZGVcIi8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezIyfSBkZW5vbWluYWNpb24gPSBcImVub3JtZVwiLz5cclxuICAgICAgICAgICAgPERpdmlkZXIvPlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0+PGxhYmVsPjxDaGVja2JveCBjaGVja2VkPXtvcGNpb25lcy5jb25DYW1wb09wY2lvbmVzfSBvbkNoYW5nZT17XHJcbiAgICAgICAgICAgICAgICAoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7b3BjaW9uOidjb25DYW1wb09wY2lvbmVzJywgdmFsb3I6IW9wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXN9KSlcclxuICAgICAgICAgICAgfSBpbnB1dFByb3BzPXt7ICdhcmlhLWxhYmVsJzogJ3ByaW1hcnkgY2hlY2tib3gnIH19Lz5jYW1wbyBvcGNpb25lczwvbGFiZWw+PC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtPjxsYWJlbD48Q2hlY2tib3ggY2hlY2tlZD17b3BjaW9uZXMuc2FsdG9BdXRvbWF0aWNvfSBvbkNoYW5nZT17XHJcbiAgICAgICAgICAgICAgICAoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7b3BjaW9uOidzYWx0b0F1dG9tYXRpY28nLCB2YWxvcjohb3BjaW9uZXMuc2FsdG9BdXRvbWF0aWNvfSkpXHJcbiAgICAgICAgICAgIH0gaW5wdXRQcm9wcz17eyAnYXJpYS1sYWJlbCc6ICdwcmltYXJ5IGNoZWNrYm94JyB9fS8+c2FsdG8gYXV0b23DoXRpY288L2xhYmVsPjwvTWVudUl0ZW0+XHJcbiAgICAgICAgPC9NZW51PlxyXG4gICAgPC8+O1xyXG59XHJcblxyXG5mdW5jdGlvbiBCYXJyYURlTmF2ZWdhY2lvbihwcm9wczp7Zm9yUGs6Rm9yUGssIHNvbG9MZWN0dXJhOmJvb2xlYW4sIG1vZG9EaXJlY3RvOmJvb2xlYW59KXtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IGZvclBrID0gcHJvcHMuZm9yUGs7XHJcbiAgICBjb25zdCB7b3BjaW9uZXN9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICBjb25zdCBbY29uZmlybWFDZXJyYXIsIHNldENvbmZpcm1hQ2VycmFyXSA9IHVzZVN0YXRlPGJvb2xlYW58bnVsbD4oZmFsc2UpO1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICB2YXIgZG9taW5pbyA9IGdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXV0udGVtLmRvbWluaW87XHJcbiAgICB2YXIgY2VycmFyRGlyZWN0byA9IGFzeW5jIGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgcmVtb3ZlQ1NTQnlJZChCT09UU1RSQVBfNV8xXzNfU1JDKTtcclxuICAgICAgICBnb3RvQ29uc2lzdGlyKFxyXG4gICAgICAgICAgICBlc3RydWN0dXJhLm9wZXJhdGl2byBhcyBJZE9wZXJhdGl2byxcclxuICAgICAgICAgICAgZ2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXS50YXJlYS50YXJlYSxcclxuICAgICAgICAgICAgZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy92YXIgaGFzaD1uZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLmhhc2g/LnJlcGxhY2UoL15cXCMvLCcnKS5zcGxpdCgnJmF1dG9wcm9jZWQnKVswXSk7XHJcbiAgICAgICAgLy8vL2hhc2guZGVsZXRlKCdhdXRvcHJvY2VkJylcclxuICAgICAgICAvL2Nsb3NlKCk7XHJcbiAgICAgICAgLy9sb2NhdGlvbi5oYXNoPWhhc2gudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIHZhciBib3RvbmVzRm9ybXVsYXJpbz1bXTtcclxuICAgIGlmKCFvcGNpb25lcy5tb2RvRGlyZWN0byl7XHJcbiAgICAgICAgYm90b25lc0Zvcm11bGFyaW8ucHVzaCh7cXVlOiAnaGRyJyAgICAsIGFicjonSGRSJywgaWQ6SURfQk9UT05fVk9MVkVSX0hEUiwgbGFiZWw6J2hvamEgZGUgcnV0YScsIHJldHJvY2VzbzowfSlcclxuICAgIH1cclxuICAgIG9wY2lvbmVzLnBpbGFGb3JQay5mb3JFYWNoKChmb3JQayxpKT0+XHJcbiAgICAgICAgYm90b25lc0Zvcm11bGFyaW8ucHVzaCh7cXVlOid2b2x2ZXInLCBhYnI6Zm9yUGsuZm9ybXVsYXJpby5yZXBsYWNlKC9eRjovLCcnKSwgbGFiZWw6Zm9yUGsuZm9ybXVsYXJpbywgcmV0cm9jZXNvOm9wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGgtaX0pXHJcbiAgICApXHJcbiAgICBib3RvbmVzRm9ybXVsYXJpby5wdXNoKHtxdWU6JycsIGFicjpmb3JQay5mb3JtdWxhcmlvLnJlcGxhY2UoL15GOi8sJycpLCBsYWJlbDpmb3JQay5mb3JtdWxhcmlvLCByZXRyb2Nlc286MH0pO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe2lkOnByb3BzLm1vZG9EaXJlY3RvP0lEX0JPVE9OX0NFUlJBUjpJRF9CT1RPTl9WT0xWRVJfSERSLCBkaXJlY3Q6dHJ1ZSxcclxuICAgICAgICBmdW46KFxyXG4gICAgICAgICAgICByOlJlc3B1ZXN0YXMsIFxyXG4gICAgICAgICAgICBfZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgXHJcbiAgICAgICAgICAgIGVsZW1lbnRvOkhUTUxEaXZFbGVtZW50LCBcclxuICAgICAgICAgICAgZmVlZGJhY2tBbGw6e1tmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+fSwgXHJcbiAgICAgICAgICAgIF9lc3RydWN0dXJhOkVzdHJ1Y3R1cmFcclxuICAgICAgICApPT57XHJcbiAgICAgICAgICAgIGVsZW1lbnRvLnNldEF0dHJpYnV0ZSgncmVzdW1lbi1lc3RhZG8nLGNhbGN1bGFyUmVzdW1lblZpdmllbmRhKGZvclBrLCBmZWVkYmFja0FsbCwgcikucmVzdW1lbkVzdGFkbyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxuICAgIHJldHVybiA8PlxyXG4gICAgICAgIDxCdXR0b25Hcm91cCBrZXk9XCJmb3JtdWxhcmlvc1wiIGNsYXNzTmFtZT1cImJhcnJhLW5hdmVnYWNpb25cIiBzb2xvLWxlY3R1cmE9e3Byb3BzLnNvbG9MZWN0dXJhPydzaSc6J25vJ30gPlxyXG4gICAgICAgICAgICB7Ym90b25lc0Zvcm11bGFyaW8ubWFwKChiLGkpPT5cclxuICAgICAgICAgICAgICAgIDxCdXR0b24gY29sb3I9e2IucXVlPT1mb3JQay5mb3JtdWxhcmlvP1wicHJpbWFyeVwiOlwiaW5oZXJpdFwifSB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkPXtiLmlkfVxyXG4gICAgICAgICAgICAgICAgICAgIGtleT17YCR7aX0tJHtiLnF1ZX0tJHtiLnJldHJvY2Vzb31gfVxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshYi5xdWV9XHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLnF1ZT09J2hkcic/ZGlzcGF0Y2hlcnMuVk9MVkVSX0hEUih7fSk6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVycy5WT0xWRVJfREVfRk9STVVMQVJJTyh7bWFnbml0dWRSZXRyb2Nlc286Yi5yZXRyb2Nlc299KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiLnF1ZT09J2hkcic/bnVsbDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLHtmb3JQazpvcGNpb25lcy5waWxhRm9yUGtbb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aC1iLnJldHJvY2Vzb119KTtcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImFiclwiPntiLmFicn08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibGFiZWxcIj57Yi5sYWJlbH08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICA8L0J1dHRvbkdyb3VwPlxyXG4gICAgICAgIHtwcm9wcy5zb2xvTGVjdHVyYT88VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJzcGFuXCIgc3R5bGU9e3ttYXJnaW46JzAgMTBweCd9fT4gKFNvbG8gTGVjdHVyYSkgPC9UeXBvZ3JhcGh5PjpudWxsfVxyXG4gICAgICAgIHtwcm9wcy5tb2RvRGlyZWN0bz9cclxuICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgIDxCdXR0b25Hcm91cCBrZXk9XCJ2b2x2ZXJfeV9ncmFiYXJcIiBzdHlsZT17e21hcmdpbjonMCAwIDAgMzBweCd9fT5cclxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtJRF9CT1RPTl9DRVJSQVJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2FzeW5jICgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwcm9wcy5zb2xvTGVjdHVyYSB8fCAhZ2V0RGlydHkoKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VycmFyRGlyZWN0bygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlybWFDZXJyYXIodHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLkV4aXRUb0FwcC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPERpYWxvZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVuPXshIWNvbmZpcm1hQ2VycmFyfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2hhY2UgcXVlIG5vIHNlIGNpZXJyZSBlbCBtZW5zYWplXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xvc2U9eygpPT5zZXRDb25maXJtYUNlcnJhcihmYWxzZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cImFsZXJ0LWRpYWxvZy10aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJhbGVydC1kaWFsb2ctZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ1RpdGxlIGlkPVwiYWxlcnQtZGlhbG9nLXRpdGxlXCI+Q29uZmlybWUgY2llcnJlIGRlIGVuY3Vlc3RhPC9EaWFsb2dUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudFRleHQgaWQ9XCJhbGVydC1kaWFsb2ctZGVzY3JpcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFc3TDoSBwb3Igc2FsaXIgZGUgbGEgZW5jdWVzdGEsIHNlIHBlcmRlcsOhbiBsb3MgY2FtYmlvcyBubyBndWFyZGFkb3MuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJyYXJEaXJlY3RvKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInNlY29uZGFyeVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY2FydGFyIGNhbWJpb3MgeSBjZXJyYXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25maXJtYUNlcnJhcihmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51YXIgZWRpdGFuZG8gZW5jdWVzdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZz5cclxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMuc29sb0xlY3R1cmE/bnVsbDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e1wic2F2ZS1idXR0b25cIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RydWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXthc3luYyAoKT0+dHJ1ZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uU2F2ZS8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgIDwvPlxyXG4gICAgICAgIDpudWxsfVxyXG4gICAgICAgIDxUeXBvZ3JhcGh5IGNsYXNzTmFtZT1cIm1vc3RyYXItZm9yUGtcIiBjb21wb25lbnQ9XCJzcGFuXCIgc3R5bGU9e3ttYXJnaW46JzAgMTBweCd9fT4gXHJcbiAgICAgICAgICAgIHtWRVJfRE9NSU5JTz88ZGl2IGtleT17ZG9taW5pb30+PHNwYW4+ZG9taW5pbzwvc3Bhbj48c3Bhbj57ZG9taW5pb308L3NwYW4+PC9kaXY+OicnfVxyXG4gICAgICAgICAgICB7bGlrZUFyKHByb3BzLmZvclBrKS5maWx0ZXIoKF8sayk9PmshPSdmb3JtdWxhcmlvJykubWFwKCh2LGspPT5cclxuICAgICAgICAgICAgICAgIDxkaXYga2V5PXtrfT48c3Bhbj57a308L3NwYW4+PHNwYW4+e3Z9PC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICApLmFycmF5KCl9IFxyXG4gICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICA8RmFzdFNldHR1cC8+XHJcbiAgICA8Lz5cclxufVxyXG5cclxuZnVuY3Rpb24gQm90b25Wb2x2ZXJFbkRpdih7aWR9OntpZDpzdHJpbmd9KXtcclxuICAgIHZhciB7b3BjaW9uZXN9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9Pih7b3BjaW9uZXM6c3RhdGUub3BjaW9uZXN9KSk7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgZXNWb2x2ZXIgPSBvcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoPjA7XHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJkaXYtYm90b24tdm9sdmVyXCI+XHJcbiAgICAgICAgPEJ1dHRvbiBpZD17aWR9IGNsYXNzTmFtZT1cImJvdG9uLXZvbHZlclwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICBpZiAoZXNWb2x2ZXIpIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8se2ZvclBrOm9wY2lvbmVzLnBpbGFGb3JQa1tvcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoLTFdfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuVk9MVkVSX0RFX0ZPUk1VTEFSSU8oe21hZ25pdHVkUmV0cm9jZXNvOjF9KSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJvdG9uQ2VycmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURfQk9UT05fQ0VSUkFSKSB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChJRF9CT1RPTl9WT0xWRVJfSERSKSBcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYm90b25DZXJyYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm90b25DZXJyYXIuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPiA8SUNPTi5DaGV2cm9uTGVmdC8+e2VzVm9sdmVyID8gXCIgVm9sdmVyXCIgOiBcIiBDZXJyYXJcIn08L0J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBGb3JtdWxhcmlvRGVzcGxpZWd1ZShwcm9wczp7Zm9yUGs6Rm9yUGt9KXtcclxuICAgIHZhciBmb3JQayA9IHByb3BzLmZvclBrO1xyXG4gICAgdmFyIHtmb3JtdWxhcmlvLCBtb2RvRGVzcGxpZWd1ZSwgbW9kbywgb3BjaW9uZXN9IFxyXG4gICAgICAgID0gdXNlU2VsZWN0b3JWaXZpZW5kYShwcm9wcy5mb3JQayk7XHJcbiAgICB2YXIgc29sb0xlY3R1cmEgPSBnZXREYXRvc0J5UGFzcygpLnNvbG9MZWN0dXJhO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIGVzVm9sdmVyID0gb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aD4wO1xyXG4gICAgdXNlRWZmZWN0KCgpPT57XHJcbiAgICAgICAgdmFyIGNvbnRyb2xTY3JvbGw9KCk9PntcclxuICAgICAgICAgICAgdmFyIGFycmliYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFycmliYScpO1xyXG4gICAgICAgICAgICBpZihhcnJpYmEpe1xyXG4gICAgICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhhcnJpYmEuc3R5bGUsICd2aXNpYmlsaXR5JyxcclxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgYXJyaWJhLmVsVG9wVmlzaWJpbGl6YXIgIT1udWxsICYmIGFycmliYS5lbFRvcFZpc2liaWxpemFyICsgMTAgXHJcbiAgICAgICAgICAgICAgICAgICAgPCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGFiYWpvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYWJham8nKTtcclxuICAgICAgICAgICAgaWYoYWJham8pe1xyXG4gICAgICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhhYmFqby5zdHlsZSwgJ3Zpc2liaWxpdHknLCBcclxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgYWJham8uZWxCb3R0b21WaXNpYmlsaXphciAhPSBudWxsICYmIGFiYWpvLmVsQm90dG9tVmlzaWJpbGl6YXIgLSAyMFxyXG4gICAgICAgICAgICAgICAgICAgID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCArIHdpbmRvdy5pbm5lckhlaWdodCAqIDAuNyA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjb250cm9sU2Nyb2xsKTtcclxuICAgICAgICBjb250cm9sU2Nyb2xsKCk7XHJcbiAgICAgICAgcmV0dXJuICgpPT57XHJcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjb250cm9sU2Nyb2xsKTtcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG4gICAgLy8gVE9ETyBWb2x2ZXIgYSBwb25lciBlbCBtb3ZpbWllbnRvIGEgbGEgYWN0dWFsXHJcbiAgICB2YXIgYWN0dWFsOmFueVxyXG4gICAgdmFyIGNvbXBsZXRvOmFueVxyXG4gICAgdmFyIG9uQ2xpY2tTYWx0YXJBY3R1YWwgPSAoKT0+e1xyXG4gICAgICAgIHZhciB7dmFyaWFibGVBY3R1YWx9ID0gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHtyZXNwdWVzdGE6bnVsbCwgdmFyaWFibGU6Tk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMsIGZvclBrOnByb3BzLmZvclBrfSk7XHJcbiAgICAgICAgaWYodmFyaWFibGVBY3R1YWwpe1xyXG4gICAgICAgICAgICBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKHZhcmlhYmxlQWN0dWFsKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBsaXN0YU1vZG9zOk1vZG9EZXNwbGllZ3VlW109WydtZXRhZGF0b3MnLCdyZWxldmFtaWVudG8nLCdQREYnXTtcclxuICAgIFsnYm90b24tdm9sdmVyLTEnLCAnYm90b24tdm9sdmVyLTInXS5mb3JFYWNoKGlkPT57XHJcbiAgICAgICAgcmVnaXN0cmFyRWxlbWVudG8oe2lkLCBkaXJlY3Q6dHJ1ZSxcclxuICAgICAgICAgICAgZnVuOihcclxuICAgICAgICAgICAgICAgIHI6UmVzcHVlc3RhcywgXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvOkhUTUxEaXZFbGVtZW50LCBcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrQWxsOntbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPn0sIFxyXG4gICAgICAgICAgICAgICAgX2VzdHJ1Y3R1cmE6RXN0cnVjdHVyYVxyXG4gICAgICAgICAgICApPT57XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50by5zZXRBdHRyaWJ1dGUoJ3Jlc3VtZW4tZXN0YWRvJyxlc1ZvbHZlcj9mZWVkYmFja0Zvcm0ucmVzdW1lbjpjYWxjdWxhclJlc3VtZW5WaXZpZW5kYShmb3JQaywgZmVlZGJhY2tBbGwsIHIpLnJlc3VtZW5Fc3RhZG8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH0pXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGVzcGVjaWFsIGhheSBxdWUgbGVlcmxvIGVuIGVsIHBhcnNlciBkZSBjYXNpbGxlcm9zIHNpIGVzdG8gdGVybWluYSBxdWVkYW5kbyBhc8OtXHJcbiAgICB2YXIgcGFudGFsbGFDb21wbGV0YSA9IGZvcm11bGFyaW8uZXNwZWNpYWw/LnBhbnRhbGxhQ29tcGxldGE7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxBcHBCYXIgcG9zaXRpb249XCJmaXhlZFwiIGNvbG9yPXtzb2xvTGVjdHVyYT8nc2Vjb25kYXJ5JzoncHJpbWFyeSd9PlxyXG4gICAgICAgICAgICAgICAgPFRvb2xiYXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJhcnJhRGVOYXZlZ2FjaW9uIGZvclBrPXtmb3JQa30gc29sb0xlY3R1cmE9e3NvbG9MZWN0dXJhIHx8IGZhbHNlfSBtb2RvRGlyZWN0bz17b3BjaW9uZXMubW9kb0RpcmVjdG99Lz5cclxuICAgICAgICAgICAgICAgIDwvVG9vbGJhcj5cclxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJtaW5pLWNvbnNvbGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9BcHBCYXI+XHJcbiAgICAgICAgICAgIDxtYWluPlxyXG4gICAgICAgICAgICAgICAgPFBhcGVyIGNsYXNzTmFtZT1cImZvcm11bGFyaW9cIiBtb2RvLWRlc3BsaWVndWU9e21vZG9EZXNwbGllZ3VlfSB2ZXItbnVtLW9wY2lvbmVzPXtvcGNpb25lcy5jb25DYW1wb09wY2lvbmVzPydTSSc6J05PJ30+XHJcbiAgICAgICAgICAgICAgICAgICAge21vZG8uZGVtbz88ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJzcGFuXCI+TW9kbyBkZSBkZXNwbGllZ3VlOjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7bGlzdGFNb2Rvcy5tYXAobW9kbz0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIGtleT17bW9kb30gdmFyaWFudD17bW9kbz09bW9kb0Rlc3BsaWVndWU/XCJjb250YWluZWRcIjpcIm91dGxpbmVkXCJ9IG9uQ2xpY2s9e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpPT5kaXNwYXRjaChkaXNwYXRjaGVycy5NT0RPX0RFU1BMSUVHVUUoe21vZG9EZXNwbGllZ3VlOm1vZG99KSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0+e21vZG99PC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+Om51bGx9XHJcbiAgICAgICAgICAgICAgICAgICAge3BhbnRhbGxhQ29tcGxldGE/bnVsbDo8Qm90b25Wb2x2ZXJFbkRpdiBpZD1cImJvdG9uLXZvbHZlci0xXCIvPn1cclxuICAgICAgICAgICAgICAgICAgICB7cGFudGFsbGFDb21wbGV0YT9udWxsOjxGb3JtdWxhcmlvRW5jYWJlemFkbyBjYXNpbGxlcm89e2Zvcm11bGFyaW99Lz59XHJcbiAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNvbnRlbmlkb0ludGVybm9CbG9xdWVPRm9ybXVsYXJpbyBibG9xdWVPRm9ybXVsYXJpbz17Zm9ybXVsYXJpb30gZm9ybXVsYXJpbz17Zm9ybXVsYXJpb30gZm9yUGs9e2ZvclBrfSBtdWx0aXBsZT17ZmFsc2V9Lz5cclxuICAgICAgICAgICAgICAgICAgICB7cGFudGFsbGFDb21wbGV0YT9udWxsOjxCb3RvblZvbHZlckVuRGl2IGlkPVwiYm90b24tdm9sdmVyLTJcIi8+fVxyXG4gICAgICAgICAgICAgICAgPC9QYXBlcj5cclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1hY3Rpdm8tYXJyaWJhJyBjb2xvcj1cInByaW1hcnlcIiBhcmlhLWxhYmVsPVwiYWRkXCIgb25DbGljaz17b25DbGlja1NhbHRhckFjdHVhbH0+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uS2V5Ym9hcmRBcnJvd1VwIC8+XHJcbiAgICAgICAgICAgICAgICA8L0ZhYj5cclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1hY3Rpdm8tYWJham8nIGNvbG9yPVwicHJpbWFyeVwiIGFyaWEtbGFiZWw9XCJhZGRcIiBvbkNsaWNrPXtvbkNsaWNrU2FsdGFyQWN0dWFsfT5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5LZXlib2FyZEFycm93RG93biAvPlxyXG4gICAgICAgICAgICAgICAgPC9GYWI+XHJcbiAgICAgICAgICAgICAgICA8RmFiIGlkPSdmYWItZXJyb3ItYXJyaWJhJyB2YXJpYW50PVwiZXh0ZW5kZWRcIiBjb2xvcj1cInNlY29uZGFyeVwiIGFyaWEtbGFiZWw9XCJlZGl0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uTmF2aWdhdGlvbiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIEVycm9yXHJcbiAgICAgICAgICAgICAgICA8L0ZhYj4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8RmFiIGlkPSdmYWItZXJyb3ItYWJham8nIHZhcmlhbnQ9XCJleHRlbmRlZFwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgYXJpYS1sYWJlbD1cImVkaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5OYXZpZ2F0aW9uRG93biAvPlxyXG4gICAgICAgICAgICAgICAgICAgIEVycm9yXHJcbiAgICAgICAgICAgICAgICA8L0ZhYj4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nZXNwYWNpby1maW5hbC1mb3JtdWxhcmlvJz48L2Rpdj5cclxuICAgICAgICAgICAgICAgIHtvcGNpb25lcy5tb2RvQm9ycmFyUmVzcHVlc3RhICYmIG9wY2lvbmVzLmZvclBrPzxEZXNwbGVnYXJDb25maXJtYXJCb3JyYXJSZXNwdWVzdGEgZm9yUGs9e29wY2lvbmVzLmZvclBrfSB2YXJpYWJsZUJvcnJhcj17b3BjaW9uZXMubW9kb0JvcnJhclJlc3B1ZXN0YX0vPjpudWxsfVxyXG4gICAgICAgICAgICA8L21haW4+XHJcbiAgICAgICAgPC8+XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQXRyaWJ1dG8ocHJvcHM6e25vbWJyZTpzdHJpbmcsIHZhbG9yOmFueX0pe1xyXG4gICAgcmV0dXJuIHByb3BzLnZhbG9yIT1udWxsICYmIHByb3BzLnZhbG9yIT0nJz88c3BhbiBjbGFzc05hbWU9XCJhdHJpYnV0by1wYXJcIj5cclxuICAgICAgICB7cHJvcHMubm9tYnJlPzxzcGFuIGNsYXNzTmFtZT1cImF0cmlidXRvLW5vbWJyZVwiPntwcm9wcy5ub21icmV9PC9zcGFuPjpudWxsfVxyXG4gICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJhdHJpYnV0by12YWxvclwiPntwcm9wcy52YWxvci50b1N0cmluZygpfTwvc3Bhbj5cclxuICAgIDwvc3Bhbj46bnVsbFxyXG59XHJcblxyXG5jb25zdCBsaXN0YUVzdGFkb3NDYXJnYTpFc3RhZG9DYXJnYVtdPVsncmVzdW1lbicsJ3JlbGV2YW1pZW50bycsJ3JlY2libyddO1xyXG52YXIgcmVzdW1pZG9yZXMgPSBbXHJcbiAgICB7bm9tYnJlOidSRUEnICAgICAgICAgLCBmOihycjpSZXNwdWVzdGFzUmFpeik9PnJyLnJlc3VtZW5Fc3RhZG89PVwib2tcIiAgICAgICAgICB9LFxyXG4gICAge25vbWJyZTonQ2l0YSBwYWN0YWRhJywgZjoocnI6UmVzcHVlc3Rhc1JhaXopPT5yci5yZXN1bWVuRXN0YWRvPT1cImNpdGEgcGFjdGFkYVwifSxcclxuICAgIHtub21icmU6J1BlbmRpZW50ZXMnICAsIGY6KHJyOlJlc3B1ZXN0YXNSYWl6KT0+cnIucmVzdW1lbkVzdGFkbz09XCJ2YWNpb1wiICAgICAgIH0sXHJcbl07XHJcblxyXG5yZXN1bWlkb3Jlcy5wdXNoKFxyXG4gICAge25vbWJyZTonT3Ryb3MnLCBmOnJlc3VtaWRvcmVzLnJlZHVjZSgoZyxyKT0+KHJyPT4hci5mKHJyKSAmJiBnKHJyKSApLChfOlJlc3B1ZXN0YXNSYWl6KT0+dHJ1ZSkgfVxyXG4pXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWwocHJvcHM6e1xyXG4gICAgbnVtVml2aWVuZGE6SWRFbmMsXHJcbiAgICBmb3JtUHJpbmNpcGFsOklkRm9ybXVsYXJpbyxcclxuICAgIHRhcmVhOiBzdHJpbmcsXHJcbiAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXNSYWl6LFxyXG59KXtcclxuICAgIGNvbnN0IHtudW1WaXZpZW5kYSwgcmVzcHVlc3RhcywgZm9ybVByaW5jaXBhbCwgdGFyZWF9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBpZD0ndml2LScrbnVtVml2aWVuZGE7XHJcbiAgICBjb25zdCBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgY29uc3QgZm9yUGs6Rm9yUGs9e2Zvcm11bGFyaW86Zm9ybVByaW5jaXBhbCwgW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF06TnVtYmVyKG51bVZpdmllbmRhKSBhcyBJZEVuY30gYXMgRm9yUGs7IC8vbm8gcXVpdGFyIGVsIGNhc3RlbyBwb3JxdWUgdmllbmUgY29tbyB0ZXh0byB5IG5lY2VzaXRvIHF1ZSBzZWEgbsO6bWVyb1xyXG4gICAgdmFyIHRlbSA9IGdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbbnVtVml2aWVuZGFdLnRlbTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHVzZUVmZmVjdCgoKT0+e1xyXG4gICAgICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGspO1xyXG4gICAgICAgIGludGVudGFyQmFja3VwKGZvclBrKVxyXG4gICAgfSlcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtpZCwgZGlyZWN0OnRydWUsXHJcbiAgICAgICAgZnVuOihcclxuICAgICAgICAgICAgcjpSZXNwdWVzdGFzLCBcclxuICAgICAgICAgICAgX2ZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIFxyXG4gICAgICAgICAgICBlbGVtZW50bzpIVE1MRGl2RWxlbWVudCwgXHJcbiAgICAgICAgICAgIGZlZWRiYWNrQWxsOntbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPn0sIFxyXG4gICAgICAgICAgICBfZXN0cnVjdHVyYTpFc3RydWN0dXJhXHJcbiAgICAgICAgKT0+e1xyXG4gICAgICAgICAgICAvL3ByZWd1bnRvIHNpIGVzIGxhIG1pc21hIHZpdmllbmRhIHBvcnF1ZSBsYSBmdW5jaW9uIHNlIGRpc3BhcmEgXHJcbiAgICAgICAgICAgIC8vY29uIHRvZGFzIGxhcyBjb21iaW5hY2lvbmVzIGRlIHJlc3B1ZXN0YXMgcGFyYSBjYWRhIGZvclBrXHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSB2aXZpZW5kYSBleGlzdGVcclxuICAgICAgICAgICAgaWYocltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdID09IGZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pe1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG8uc2V0QXR0cmlidXRlKCdyZXN1bWVuLWVzdGFkbycsY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoZm9yUGssIGZlZWRiYWNrQWxsLCByKS5yZXN1bWVuRXN0YWRvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIDxUYWJsZVJvdyBrZXk9e251bVZpdmllbmRhfT5cclxuICAgICAgICA8VGFibGVDZWxsPlxyXG4gICAgICAgICAgICB7dGVtP1xyXG4gICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyVGVtIHRlbT17dGVtfS8+XHJcbiAgICAgICAgICAgICAgICAgICAge3Jlc3B1ZXN0YXNbJ3Jlc3VtZW5Fc3RhZG8nIGFzIElkVmFyaWFibGVdPT1cImNpdGEgcGFjdGFkYVwiP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ2l0YVBhY3RhZGEgcmVzcHVlc3Rhcz17cmVzcHVlc3Rhc30vPlxyXG4gICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNpdGFQYWN0YWRhWVNlbGVjY2lvbmFkb0FudGVyaW9yVGVtIHRlbT17dGVtfS8+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgIDpudWxsfVxyXG4gICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgICAgIDxUYWJsZUNlbGw+XHJcbiAgICAgICAgICAgIHt0YXJlYX1cclxuICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICA8VGFibGVDZWxsPlxyXG4gICAgICAgICAgICA8QnV0dG9uIGlkPXtpZH0gb25DbGljaz17KCk9PiBcclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNBTUJJQVJfRk9STVVMQVJJTyh7Zm9yUGssIGFwaWxhclZ1ZWx0YTpmYWxzZX0pKVxyXG4gICAgICAgICAgICB9PlxyXG4gICAgICAgICAgICAgICAge251bVZpdmllbmRhLnRvU3RyaW5nKCl9XHJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgPC9UYWJsZVJvdz5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhckNhcmdhKHByb3BzOntcclxuICAgIGNhcmdhOkNhcmdhLCBcclxuICAgIGlkQ2FyZ2E6SWRDYXJnYSwgXHJcbiAgICBwb3NpY2lvbjpudW1iZXIsXHJcbiAgICBpbmZvcm1hY2lvbkhkcjpJbmZvcm1hY2lvbkhkciwgXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFMYXNVQSxcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOntcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiBcclxuICAgIH1cclxufSl7XHJcbiAgICBjb25zdCBbbmV3U3VydmV5LCBzZXROZXdTdXJ2ZXldID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCB7Y2FyZ2EsIGlkQ2FyZ2EsIGluZm9ybWFjaW9uSGRyLCByZXNwdWVzdGFzfSA9IHByb3BzO1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICBsZXQgY2FudExpbmVhc1Jlc3VtZW4gPSBsaWtlQXIoaW5mb3JtYWNpb25IZHIpLmZpbHRlcigoaW5mb3JtYWNpb24pPT5pbmZvcm1hY2lvbi50ZW0uY2FyZ2E9PWlkQ2FyZ2EpLmFycmF5KCkubGVuZ3RoO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgcmV0dXJuIDxQYXBlciBjbGFzc05hbWU9XCJjYXJnYVwiIHN0eWxlPXt7bWFyZ2luQm90dG9tOiAnMTBweCcsIHBhZGRpbmc6ICcxMHB4J319PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW5mb3JtYWNpb24tY2FyZ2FcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJnYVwiPsOBcmVhOiB7aWRDYXJnYX08L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvYnNlcnZhY2lvbmVzXCI+e2NhcmdhLm9ic2VydmFjaW9uZXN9PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbmZvcm1hY2lvbi1jYXJnYVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZlY2hhXCI+e2NhcmdhLmZlY2hhfTwvZGl2PlxyXG4gICAgICAgICAgICB7LypcclxuICAgICAgICAgICAgPEJ1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICB7bGlzdGFFc3RhZG9zQ2FyZ2EubWFwKGVzdGFkb19jYXJnYT0+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIGtleT17ZXN0YWRvX2NhcmdhfSB2YXJpYW50PXtlc3RhZG9fY2FyZ2E9PWNhcmdhLmVzdGFkb19jYXJnYT9cImNvbnRhaW5lZFwiOlwib3V0bGluZWRcIn0gb25DbGljaz17XHJcbiAgICAgICAgICAgICAgICAgICAgKCk9PmRpc3BhdGNoKGRpc3BhdGNoZXJzLkVTVEFET19DQVJHQSh7aWRDYXJnYSwgZXN0YWRvX2NhcmdhfSkpXHJcbiAgICAgICAgICAgICAgICB9Pntlc3RhZG9fY2FyZ2F9PC9CdXR0b24+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgICovfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtjYXJnYS5lc3RhZG9fY2FyZ2E9PW51bGwgJiYgIXByb3BzLnBvc2ljaW9uIHx8IGNhcmdhLmVzdGFkb19jYXJnYT09J3JlbGV2YW1pZW50byc/XHJcbiAgICAgICAgPFRhYmxlIGNsYXNzTmFtZT1cInRhYmxhLWNhcmdhLWhvamEtZGUtcnV0YVwiPlxyXG4gICAgICAgICAgICA8Y29sZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICA8Y29sIHN0eWxlPXt7d2lkdGg6XCI3NSVcIn19Lz5cclxuICAgICAgICAgICAgICAgIDxjb2wgc3R5bGU9e3t3aWR0aDpcIjEwJVwifX0vPiAgICBcclxuICAgICAgICAgICAgICAgIDxjb2wgc3R5bGU9e3t3aWR0aDpcIjE1JVwifX0vPiAgICBcclxuICAgICAgICAgICAgPC9jb2xncm91cD5cclxuICAgICAgICAgICAge2NhbnRMaW5lYXNSZXN1bWVuP1xyXG4gICAgICAgICAgICAgICAgPFRhYmxlSGVhZCBzdHlsZT17e2ZvbnRTaXplOiBcIjEuMnJlbVwifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlUm93IGNsYXNzTmFtZT1cInRyLWNhcmdhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGw+ZG9taWNpbGlvPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGw+dGFyZWE8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbD5lbmM8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlUm93PlxyXG4gICAgICAgICAgICAgICAgPC9UYWJsZUhlYWQ+XHJcbiAgICAgICAgICAgIDpudWxsfVxyXG4gICAgICAgICAgICA8VGFibGVCb2R5PlxyXG4gICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgIHtsaWtlQXIoaW5mb3JtYWNpb25IZHIpLmZpbHRlcigoaW5mb3JtYWNpb24pPT5pbmZvcm1hY2lvbi50ZW0uY2FyZ2E9PWlkQ2FyZ2EpLm1hcCgoaW5mb3JtYWNpb24sIG51bVZpdmllbmRhKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e251bVZpdmllbmRhfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtVml2aWVuZGE9e251bVZpdmllbmRhfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYT17aW5mb3JtYWNpb24udGFyZWEudGFyZWF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1QcmluY2lwYWw9e2luZm9ybWFjaW9uLnRhcmVhLm1haW5fZm9ybX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhcz17cmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF1bbnVtVml2aWVuZGFdIGFzIFJlc3B1ZXN0YXNSYWl6fVxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICApLmFycmF5KCl9XHJcbiAgICAgICAgICAgICAgICB7ZXN0cnVjdHVyYS5wZXJtaXRlR2VuZXJhck11ZXN0cmE/XHJcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlUm93IGNsYXNzTmFtZT1cInRyLWNhcmdhLW51ZXZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGwgY29sU3Bhbj17M30+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWFyRW5jdWVzdGEoaWRDYXJnYSwoZm9yUGtSYWl6OkZvclBrUmFpeik9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNBTUJJQVJfRk9STVVMQVJJTyh7Zm9yUGs6Zm9yUGtSYWl6LCBhcGlsYXJWdWVsdGE6ZmFsc2V9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLkFkZC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9UYWJsZVJvdz5cclxuICAgICAgICAgICAgICAgIDpudWxsfVxyXG4gICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgIDwvVGFibGVCb2R5PlxyXG4gICAgICAgIDwvVGFibGU+OlxyXG4gICAgICAgIDxUYWJsZT5cclxuICAgICAgICAgICAgPFRhYmxlSGVhZCBzdHlsZT17e2ZvbnRTaXplOiBcIjEuMnJlbVwifX0+XHJcbiAgICAgICAgICAgICAgICA8VGFibGVSb3cgY2xhc3NOYW1lPVwidHItY2FyZ2FcIj5cclxuICAgICAgICAgICAgICAgICAgICB7cmVzdW1pZG9yZXMubWFwKChyZXN1bWlkb3I6IHR5cGVvZiByZXN1bWlkb3Jlc1swXSwgaTpudW1iZXIpPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbCBrZXk9e2l9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3Jlc3VtaWRvci5ub21icmV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICA8L1RhYmxlUm93PlxyXG4gICAgICAgICAgICA8L1RhYmxlSGVhZD5cclxuICAgICAgICA8L1RhYmxlPlxyXG4gICAgICAgIH1cclxuICAgIDwvUGFwZXI+XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhckNpdGFQYWN0YWRhKHByb3BzOntyZXNwdWVzdGFzOlJlc3B1ZXN0YXN9KXtcclxuICAgIGNvbnN0IHtyZXNwdWVzdGFzfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiY2l0YS1wYWN0YWRhXCI+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiQ2l0YSBwYWN0YWRhIGNvbiBcIiB2YWxvcj17cmVzcHVlc3Rhc1twMTJdfS8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiQ2VsLjpcIiB2YWxvcj17cmVzcHVlc3Rhc1tzcDJdfS8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiVGVsLjpcIiB2YWxvcj17cmVzcHVlc3Rhc1tzcDNdfS8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiRmVjaGE6XCIgdmFsb3I9e3Jlc3B1ZXN0YXNbc3A0XX0vPjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIkhvcmE6XCIgdmFsb3I9e3Jlc3B1ZXN0YXNbc3A1XX0vPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJDaXRhUGFjdGFkYVlTZWxlY2Npb25hZG9BbnRlcmlvclRlbShwcm9wczp7dGVtOlRFTX0pe1xyXG4gICAgY29uc3Qge3RlbX0gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGVtLWNpdGFcIj5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cIkNpdGE6XCIgdmFsb3I9e3RlbS5jaXRhfS8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhclRlbShwcm9wczp7dGVtOlRFTX0pe1xyXG4gICAgY29uc3Qge3RlbX0gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGVtLWRvbWljaWxpb1wiPnt0ZW0ubm9tY2FsbGV9IHt0ZW0ubnJvY2F0YXN0cmFsfSA8QXRyaWJ1dG8gbm9tYnJlPVwicGlzb1wiIHZhbG9yPXt0ZW0ucGlzb30vPiA8QXRyaWJ1dG8gbm9tYnJlPVwiZHB0b1wiIHZhbG9yPXt0ZW0uZGVwYXJ0YW1lbnRvfS8+IDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJzZWN0b3JcIiB2YWxvcj17dGVtLnNlY3Rvcn0vPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiZWRpZmljaW9cIiB2YWxvcj17dGVtLmVkaWZpY2lvfS8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJjYXNhXCIgdmFsb3I9e3RlbS5jYXNhfS8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJlbnRyYWRhXCIgdmFsb3I9e3RlbS5lbnRyYWRhfS8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJoYWJpdGFjaW9uXCIgdmFsb3I9e3RlbS5oYWJpdGFjaW9ufS8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZW0tb2JzZXJ2YWNpb25lc1wiPlxyXG4gICAgICAgICAgICB7dGVtLm9ic2VydmFjaW9uZXN9IFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBIb2phRGVSdXRhRGVzcGxpZWd1ZSgpe1xyXG4gICAgdmFyIHtjYXJnYXMsIG51bV9zaW5jcm8sIGluZm9ybWFjaW9uSGRyLCByZXNwdWVzdGFzfSA9IGdldERhdG9zQnlQYXNzKCk7XHJcbiAgICB2YXIge21vZG99ID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9Pih7bW9kbzpzdGF0ZS5tb2RvfSkpO1xyXG4gICAgdmFyIGZlZWRiYWNrUm93VmFsaWRhdG9yID0gZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IoKVxyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgdXBkYXRlT25saW5lU3RhdHVzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICBzZXRPbmxpbmUod2luZG93Lm5hdmlnYXRvci5vbkxpbmUpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXBwVmVyc2lvbiA9IGdldENhY2hlVmVyc2lvbigpO1xyXG4gICAgY29uc3QgW29ubGluZSwgc2V0T25saW5lXSA9IHVzZVN0YXRlKHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCAgdXBkYXRlT25saW5lU3RhdHVzKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgdXBkYXRlT25saW5lU3RhdHVzKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAgPEFwcEJhciBwb3NpdGlvbj1cImZpeGVkXCI+XHJcbiAgICAgICAgICAgICAgICA8VG9vbGJhcj5cclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwiaDZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSG9qYSBkZSBydXRhXHJcbiAgICAgICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAvLzxJY29uQnV0dG9uIHN0eWxlPXt7bWFyZ2luVG9wOiczcHgnfX1cclxuICAgICAgICAgICAgICAgICAgICAvLyAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgIC8vb25DbGljaz17LypkaXNwYXRjaCBxdWUgbGxldmEgYSBwYW50YWxsYSBvcGNpb25lcyovfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vPlxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgIDxJQ09OLlNldHRpbmdzLz5cclxuICAgICAgICAgICAgICAgICAgICAvLzwvSWNvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAge29ubGluZT9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvU2luY3Jvbml6YXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uU3luY0FsdC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgICAgIDpudWxsfVxyXG4gICAgICAgICAgICAgICAgPC9Ub29sYmFyPlxyXG4gICAgICAgICAgICA8L0FwcEJhcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJob2phLWRlLXJ1dGFcIj5cclxuICAgICAgICAgICAgICAgIHttb2RvLmRlbW8/PGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5Nb2RvIGRlbW8gPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cIm91dGxpbmVkXCIgY29sb3I9XCJzZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuUkVJTklDSUFSX0RFTU8oe30pKX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlaW5pY2lhclxyXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+Om51bGx9XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm5vbWJyZS12ZXJzaW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5EaXJlY2Npw7NuIEdlbmVyYWwgZGUgRXN0YWTDrXN0aWNhIHkgQ2Vuc29zIC0gQy5BLkIuQS48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PntteS5nZXRMb2NhbFZhcignYXBwLXZlcnNpb24nKX0gc2luY3JvIHtudW1fc2luY3JvfSAtIHZlcnNpw7NuIHthcHBWZXJzaW9ufTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB7bGlrZUFyKGNhcmdhcykubWFwKChjYXJnYSwgaWRDYXJnYSwgXywgcG9zaWNpb24pPT5cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ2FyZ2Ega2V5PXtpZENhcmdhfSBjYXJnYT17Y2FyZ2F9IGlkQ2FyZ2E9e2lkQ2FyZ2F9IHBvc2ljaW9uPXtwb3NpY2lvbn0gaW5mb3JtYWNpb25IZHI9e2luZm9ybWFjaW9uSGRyfSBmZWVkYmFja1Jvd1ZhbGlkYXRvcj17ZmVlZGJhY2tSb3dWYWxpZGF0b3J9IHJlc3B1ZXN0YXM9e3Jlc3B1ZXN0YXN9Lz5cclxuICAgICAgICAgICAgICAgICkuYXJyYXkoKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC8+XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gTGlzdGFUZXh0b3MocHJvcHM6e3RleHRvczpzdHJpbmdbXX0pe1xyXG4gICAgcmV0dXJuIDx1bD5cclxuICAgICAgICB7cHJvcHMudGV4dG9zLm1hcCh0PT48bGk+PFR5cG9ncmFwaHk+e3R9PC9UeXBvZ3JhcGh5PjwvbGk+KX1cclxuICAgIDwvdWw+O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQmllbnZlbmlkYURlc3BsaWVndWUocHJvcHM6e21vZG86Q2Fzb1N0YXRlW1wibW9kb1wiXX0pe1xyXG4gICAgY29uc3QgZGlzcGF0Y2g9dXNlRGlzcGF0Y2goKTtcclxuICAgIHJldHVybiA8UGFwZXIgY2xhc3NOYW1lPVwiYmllbnZlbmlkYVwiPlxyXG4gICAgICAgIHtwcm9wcy5tb2RvLmRlbW8/XHJcbiAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5ERU1PIGRlbCBzaXN0ZW1hIGRlIHJlbGV2YW1pZW50byBkZSBETUVOQ1U8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5FbiBlc3RhIGRlbW86PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPExpc3RhVGV4dG9zIHRleHRvcz17W1xyXG4gICAgICAgICAgICAgICAgICAgIFwiQWxndW5hcyB2aXZpZW5kYXMgYXBhcmVjZW4gcmVsZXZhZGFzIChlbCBib3TDs24gZXN0w6EgZGUgY29sb3IpIHNpcnZlbiBkZSBlamVtcGxvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJMbyBxdWUgc2UgY2FyZ3VlbiBzZSBndWFyZGFuIGxvY2FsbWVudGUgcGVybyBubyBzZSB0cmFzbWl0ZW4gYSBsYSBiYXNlIGRlIGRhdG9zXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJTZSBwdWVkZSB2b2x2ZXIgYSBsYSB2ZXJzacOzbiBpbmljaWFsIChvIHNlYSBib3JyYXIgbG8gcXVlIHNlIGd1YXJkw7MgbG9jYWxtZW50ZSkgZGVzZGUgbGEgaG9qYSBkZSBydXRhIGJvdG9uIFtyZWluaWNpYXIgZGVtb11cIixcclxuICAgICAgICAgICAgICAgICAgICBcIlRvZGF2w61hIGhheSBjb3NhcyBxdWUgZmFsdGFuIG8gcHVlZGVuIGNhbWJpYXJcIixcclxuICAgICAgICAgICAgICAgIF19IC8+XHJcbiAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICA6PD5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PkVuY3Vlc3RhIGRlIFNlcm9wcmV2YWxlbmNpYSBkZSBDT1ZJRC0xOTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgIGNvbG9yPVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgb25DbGljaz17KCk9PnsgZ290b1NpbmNyb25pemFyKCk7IH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3Bhbj5TaW5jcm9uaXphciA8L3NwYW4+IDxJQ09OLlN5bmNBbHQvPlxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpPT5kaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHtvcGNpb246J2JpZW52ZW5pZG8nLCB2YWxvcjp0cnVlfSkpfVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4+Q29udGludWFyIDwvc3Bhbj4gPElDT04uU2VuZC8+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICA8L1BhcGVyPlxyXG59XHJcblxyXG4vL0NPTlRST0wgREUgUEVTVEHDkUFTXHJcbnZhciBhbGxPcGVuZWRUYWJzOntbeDpzdHJpbmddOm51bWJlcn09e307XHJcbnZhciBpbmZvT3BlbmVkVGFicz17XHJcbiAgICBhbGxPcGVuZWRUYWJzLFxyXG4gICAgbXlJZDonY2FsY3VsYW5kby4uLicsXHJcbiAgICBvdGhlclRhYnNOYW1lczonJ1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gT3BlbmVkVGFicygpe1xyXG4gICAgY29uc3QgW3RhYnMsIHNldFRhYnNdID0gdXNlU3RhdGUoaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXMpO1xyXG4gICAgdmFyIHttb2RvRGlyZWN0b30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+KHttb2RvRGlyZWN0bzpzdGF0ZS5vcGNpb25lcy5tb2RvRGlyZWN0b30pKTtcclxuICAgIGNvbnN0IHVwZGF0ZVRhYnNTdGF0dXMgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgIHNldFRhYnMoaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXMpO1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpPT57XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ215LXRhYnMnLHVwZGF0ZVRhYnNTdGF0dXMpO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbXktdGFicycsdXBkYXRlVGFic1N0YXR1cyk7XHJcbiAgICB9LFtdKVxyXG4gICAgcmV0dXJuIG1vZG9EaXJlY3RvP251bGw6KHRhYnMpP1xyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGFiLWNvdW50ZXIgdGFiLWVycm9yXCI+wqFBVEVOQ0nDk04hIEhheSBtw6FzIGRlIHVuYSB2ZW50YW5hIGFiaWVydGEuIFNlIHB1ZWRlbiBwZXJkZXIgZGF0b3M6IHt0YWJzfTwvZGl2PlxyXG4gICAgOlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGFiLWNvdW50ZXJcIj7inJQ8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEFwcERtRW5jdSgpe1xyXG4gICAgdmFyIHtmb3JQaywgYmllbnZlbmlkbywgbW9kb30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+KHsuLi5zdGF0ZS5vcGNpb25lcywgLi4uc3RhdGUubW9kbywgLi4uc3RhdGV9KSk7XHJcbiAgICBpZighYmllbnZlbmlkbyl7XHJcbiAgICAgICAgcmV0dXJuIDxCaWVudmVuaWRhRGVzcGxpZWd1ZSBtb2RvPXttb2RvfS8+IFxyXG4gICAgfWVsc2UgaWYoZm9yUGs9PW51bGwpe1xyXG4gICAgICAgIHJldHVybiA8SG9qYURlUnV0YURlc3BsaWVndWUgLz4gXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICByZXR1cm4gPEZvcm11bGFyaW9EZXNwbGllZ3VlIGZvclBrPXtmb3JQa30vPlxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBQYW50YWxsYUluaWNpYWxTaW5DYXJnYShfcHJvcHM6e30pe1xyXG4gICAgY29uc3QgdXBkYXRlT25saW5lU3RhdHVzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICBzZXRPbmxpbmUod2luZG93Lm5hdmlnYXRvci5vbkxpbmUpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgW29ubGluZSwgc2V0T25saW5lXSA9IHVzZVN0YXRlKHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCAgdXBkYXRlT25saW5lU3RhdHVzKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgdXBkYXRlT25saW5lU3RhdHVzKTtcclxuICAgIGNvbnN0IHBhcmFncmFwaFN0eWxlcz17Zm9udFNpemU6XCIxLjJyZW1cIiwgZm9udFdlaWdodDo2MDAsIHBhZGRpbmc6IFwiNXB4IDEwcHhcIn07XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxBcHBCYXIgcG9zaXRpb249XCJmaXhlZFwiPlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImg2XCIgc3R5bGU9e3ttYXJnaW46MjV9fT5cclxuICAgICAgICAgICAgICAgICAgICBEaXNwb3NpdGl2byBzaW4gY2FyZ2FcclxuICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgPC9BcHBCYXI+XHJcbiAgICAgICAgICAgIDxtYWluPlxyXG4gICAgICAgICAgICAgICAgPFBhcGVyIHN0eWxlPXt7aGVpZ2h0Oic2MDBweCcsIHBhZGRpbmc6XCIxNXB4XCIsIG1hcmdpblRvcDo3NX19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtvbmxpbmU/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGNvbXBvbmVudD1cInBcIiBzdHlsZT17cGFyYWdyYXBoU3R5bGVzfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2luY3Jvbml6YXIgZGlzcG9zaXRpdm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3twYWRkaW5nOic1cHgnfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvU2luY3Jvbml6YXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uU3luY0FsdC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJwXCIgc3R5bGU9e3BhcmFncmFwaFN0eWxlc30+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gaGF5IGNvbmV4acOzbiBhIGludGVybmV0LCBwb3IgZmF2b3IgY29uw6ljdGUgZWwgZGlzcG9zaXRpdm8gYSB1bmEgcmVkIHBhcmEgc2luY3Jvbml6YXIgdW5hIGhvamEgZGUgcnV0YS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9QYXBlcj5cclxuICAgICAgICAgICAgPC9tYWluPlxyXG4gICAgICAgIDwvPlxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFBhbnRhbGxhSW5pY2lhbCgpe1xyXG4gICAgdmFyIHtmb3JQaywgYmllbnZlbmlkbywgbW9kb30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+KHsuLi5zdGF0ZS5vcGNpb25lcywgLi4uc3RhdGUubW9kbywgLi4uc3RhdGV9KSk7XHJcbiAgICBpZighYmllbnZlbmlkbyl7XHJcbiAgICAgICAgcmV0dXJuIDxCaWVudmVuaWRhRGVzcGxpZWd1ZSBtb2RvPXttb2RvfS8+IFxyXG4gICAgfWVsc2UgaWYoZm9yUGs9PW51bGwpe1xyXG4gICAgICAgIHJldHVybiA8SG9qYURlUnV0YURlc3BsaWVndWUgLz4gXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICByZXR1cm4gPEZvcm11bGFyaW9EZXNwbGllZ3VlIGZvclBrPXtmb3JQa30vPlxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG1QYW50YWxsYUluaWNpYWxTaW5DYXJnYSgpe1xyXG4gICAgdHJ5e1xyXG4gICAgICAgIGF3YWl0IGxvYWRDU1MoQk9PVFNUUkFQXzVfMV8zX1NSQyk7XHJcbiAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICB0aHJvdyhlcnIpXHJcbiAgICB9XHJcbiAgICBSZWFjdERPTS5yZW5kZXIoXHJcbiAgICAgICAgPFBhbnRhbGxhSW5pY2lhbFNpbkNhcmdhLz4sXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JylcclxuICAgIClcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwob3B0czp7bW9kb0RlbW86Ym9vbGVhbiwgZm9yUGtSYWl6PzpGb3JQa1JhaXosIG9wZXJhdGl2bzpJZE9wZXJhdGl2b30pe1xyXG4gICAgLy8gdHJhZXIgbG9zIG1ldGFkYXRvcyBlbiB1bmEgXCJlc3RydWN0dXJhXCJcclxuICAgIC8vIHRyYWVyIGxvcyBkYXRvcyBkZSBsb2NhbFN0b3JhZ2VcclxuICAgIC8vIHZlcmlmaWNhciBlbCBtYWluIExheW91dFxyXG4gICAgY29uc3Qgc3RvcmUgPSBhd2FpdCBkbVRyYWVyRGF0b3NGb3JtdWxhcmlvKG9wdHMpXHJcbiAgICB0cnl7XHJcbiAgICAgICAgYXdhaXQgbG9hZENTUyhCT09UU1RSQVBfNV8xXzNfU1JDKTtcclxuICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIHRocm93KGVycilcclxuICAgIH1cclxuICAgIFJlYWN0RE9NLnJlbmRlcihcclxuICAgICAgICA8UmVuZGVyUHJpbmNpcGFsIHN0b3JlPXtzdG9yZX0gZGlzcGF0Y2hlcnM9e2Rpc3BhdGNoZXJzfSBtZW5zYWplUmV0b3Jubz17b3B0cy5mb3JQa1JhaXo/XCJWb2x2ZXIgYWwgZm9ybXVsYXJpb1wiOlwiVm9sdmVyIGEgbGEgaG9qYSBkZSBydXRhXCJ9PlxyXG4gICAgICAgICAgICA8T3BlbmVkVGFicy8+XHJcbiAgICAgICAgICAgIDxBcHBEbUVuY3UvPlxyXG4gICAgICAgIDwvUmVuZGVyUHJpbmNpcGFsPixcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKVxyXG4gICAgKVxyXG59XHJcblxyXG5pZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyl7XHJcbiAgICAvLyBAdHMtaWdub3JlIHBhcmEgaGFjZXJsb1xyXG4gICAgd2luZG93LmRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwgPSBkZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsO1xyXG4gICAgLy8gQHRzLWlnbm9yZSBwYXJhIGhhY2VybG9cclxuICAgIHdpbmRvdy5kbVBhbnRhbGxhSW5pY2lhbFNpbkNhcmdhID0gZG1QYW50YWxsYUluaWNpYWxTaW5DYXJnYTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGxvYWRJbnN0YW5jZSgpe1xyXG4gICAgaWYodHlwZW9mIEJyb2FkY2FzdENoYW5uZWwgPT09ICd1bmRlZmluZWQnKXtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgYmMgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbCgnY29udGFkb3InKTtcclxuICAgIHZhciBteUlkPVN0cmluZy5mcm9tQ29kZVBvaW50KDEwMCtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMTAwMCkpK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxMDApLy8rJy0nK25ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgYWxsT3BlbmVkVGFic1tteUlkXT0xO1xyXG4gICAgaW5mb09wZW5lZFRhYnMubXlJZD1teUlkO1xyXG4gICAgdmFyIGV2ZW50ID0gbmV3IEV2ZW50KCdteS10YWJzJyk7XHJcbiAgICBiYy5vbm1lc3NhZ2U9ZnVuY3Rpb24oZXYpe1xyXG4gICAgICAgIGlmKGV2LmRhdGEucXVlPT0nc295Jyl7XHJcbiAgICAgICAgICAgIGlmKCFhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdKXtcclxuICAgICAgICAgICAgICAgIGFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF09MDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGV2LmRhdGEucXVlPT0ndW5sb2FkJyl7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihldi5kYXRhLnF1ZT09J2xvYWQnKXtcclxuICAgICAgICAgICAgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXT0xO1xyXG4gICAgICAgICAgICBiYy5wb3N0TWVzc2FnZSh7cXVlOidzb3knLGlkOm15SWR9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXM9bGlrZUFyKGFsbE9wZW5lZFRhYnMpLmZpbHRlcigoXyxpZCk9PmlkIT1teUlkKS5qb2luKCcsJyk7XHJcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgfTtcclxuICAgIGJjLnBvc3RNZXNzYWdlKHtxdWU6J2xvYWQnLGlkOm15SWR9KTtcclxuICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgYmMucG9zdE1lc3NhZ2Uoe3F1ZTondW5sb2FkJyxpZDpteUlkfSk7XHJcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgfSlcclxuICAgIC8vbW9zdHJhclF1aWVuZXNTb21vcygpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0TGlicmVEZXNwbGllZ3VlID0gKGxpYnJlOkxpYnJlRGVzcGxpZWd1ZVR5cGUpPT5MaWJyZURlc3BsaWVndWUgPSBsaWJyZVxyXG5cclxuc2V0TGlicmVEZXNwbGllZ3VlKChwcm9wczp7XHJcbiAgICBrZXk6c3RyaW5nXHJcbiAgICBjYXNpbGxlcm86TGlicmVcclxuICAgIGZvcm11bGFyaW86Rm9ybXVsYXJpb1xyXG4gICAgZm9yUGs6Rm9yUGtcclxufSk9PjxkaXYga2V5PXtwcm9wcy5rZXl9IGlkPXtwcm9wcy5jYXNpbGxlcm8uaWRfY2FzaWxsZXJvfT5lc3RlIGNhc2lsbGVybyBkZWJlIHJlZGVmaW5pcnNlIGVuIGxhIEFQUCBmaW5hbCB5IHN1IHVzbyBlcyBleGNsdXNpdm8gZGVsIMOhcmVhIGluZm9ybcOhdGljYTwvZGl2PilcclxuXHJcbnNldENhbGN1bGFyVmFyaWFibGVzKChyZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeiwgZm9yUGs6Rm9yUGspPT57XHJcbiAgICB0eXBlIENvbmZpZ1BhZHJlID0ge1xyXG4gICAgICAgIHVhUGVyc29uYXM6IElkVW5pZGFkQW5hbGlzaXNcclxuICAgICAgICB2YXJTZXhvUGVyc29uYTogSWRWYXJpYWJsZVxyXG4gICAgICAgIHZhck5vbWJyZVBlcnNvbmE6IElkVmFyaWFibGVcclxuICAgICAgICB2YXJMb3NOb21icmVzOiBJZFZhcmlhYmxlXHJcbiAgICB9XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciBhdXRvQ2FyZ2FyUGVyc29uYXMgPSAoY29uZmlnUGFkcmU6IENvbmZpZ1BhZHJlICx1YVBhZHJlUGVyc29uYXM6SWRVbmlkYWRBbmFsaXNpcywgZXN0cnVjdHVyYTpFc3RydWN0dXJhKT0+e1xyXG4gICAgICAgIHZhciBsZWVyTm9tYnJlcyA9IChyZXNwdWVzdGFzVUFQYWRyZTpSZXNwdWVzdGFzLCBjb25maWdQYWRyZTpDb25maWdQYWRyZSk9PntcclxuICAgICAgICAgICAgaWYoIXJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdIHx8IGVtcHR5KHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdKSB8fCByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXVswXVtjb25maWdQYWRyZS52YXJTZXhvUGVyc29uYV0gPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG9zTm9tYnJlcyA9IHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnZhckxvc05vbWJyZXNdIGFzIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgaWYobG9zTm9tYnJlcyAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBpZighcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc10pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXT1bXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbG9zTm9tYnJlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJywnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChub21icmU6c3RyaW5nKT0+bm9tYnJlLnRyaW0oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgobm9tYnJlOnN0cmluZywgaTpudW1iZXIpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXVtpXSA9IHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdW2ldIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc11baV1bY29uZmlnUGFkcmUudmFyTm9tYnJlUGVyc29uYV0gPSBub21icmUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdWFQYWRyZVBlcnNvbmFzXSl7XHJcbiAgICAgICAgICAgIGlmKHVhUGFkcmVQZXJzb25hcyA9PSAndml2aWVuZGFzJyl7XHJcbiAgICAgICAgICAgICAgICBsZWVyTm9tYnJlcyhyZXNwdWVzdGFzUmFpeixjb25maWdQYWRyZSlcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBmb3IodmFyIHJlc3B1ZXN0YXNVQVBhZHJlIG9mIGl0ZXJhdG9yKHJlc3B1ZXN0YXNSYWl6W3VhUGFkcmVQZXJzb25hc10/P1tdKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVlck5vbWJyZXMocmVzcHVlc3Rhc1VBUGFkcmUsY29uZmlnUGFkcmUpXHJcbiAgICAgICAgICAgICAgICB9ICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgdWFzSXRlcmFyOiB7XHJcbiAgICAgICAgW2tleSBpbiBJZFVuaWRhZEFuYWxpc2lzXTpDb25maWdQYWRyZVxyXG4gICAgfTsgXHJcbiAgICB2YXIgY29uZmlnRW5jdSA6IENvbmZpZ1BhZHJlID0geyBcclxuICAgICAgICB1YVBlcnNvbmFzOiAncGVyc29uYXMnLFxyXG4gICAgICAgIHZhclNleG9QZXJzb25hOiAnc2V4bycgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICB2YXJOb21icmVQZXJzb25hOiAnbm9tYnJlJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhckxvc05vbWJyZXM6IFwibG9zX25vbWJyZXNcIiBhcyBJZFZhcmlhYmxlXHJcbiAgICB9O1xyXG4gICAgdmFyIGNvbmZpZ1N1cGUgOiBDb25maWdQYWRyZSA9IHsgXHJcbiAgICAgICAgdWFQZXJzb25hczogJ3BlcnNvbmFzX3N1cCcgYXMgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgICAgICB2YXJTZXhvUGVyc29uYTogJ3NleG9fc3VwJyAgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICB2YXJOb21icmVQZXJzb25hOiAnbm9tYnJlX3N1cCcgIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgdmFyTG9zTm9tYnJlczogXCJub21icmVzX2NvbXBvbmVudGVzX3N1cFwiICBhcyBJZFZhcmlhYmxlXHJcbiAgICB9O1xyXG5cclxuICAgIGlmKGVzdHJ1Y3R1cmEuY29uUmVhSG9nYXIpe1xyXG4gICAgICAgIHVhc0l0ZXJhciA9IHtcclxuICAgICAgICAgICAgaG9nYXJlczogY29uZmlnRW5jdSxcclxuICAgICAgICAgICAgW1wiaG9nYXJlc19zdXBcIiBhcyBJZFVuaWRhZEFuYWxpc2lzXSA6IGNvbmZpZ1N1cGVcclxuICAgICAgICB9XHJcbiAgICAgICAgbGlrZUFyKHVhc0l0ZXJhcikuZm9yRWFjaCgoY29uZmlnUGFkcmUsdWFQYWRyZSk9PntcclxuICAgICAgICAgICAgYXV0b0NhcmdhclBlcnNvbmFzKGNvbmZpZ1BhZHJlLHVhUGFkcmUsIGVzdHJ1Y3R1cmEpXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0pXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICB2YXIgY29uZmlnUGFkcmVzOiBDb25maWdQYWRyZVtdID0gW2NvbmZpZ0VuY3UsY29uZmlnU3VwZV07XHJcbiAgICAgICAgY29uZmlnUGFkcmVzLmZvckVhY2goKGNvbmZpZ1BhZHJlKT0+e1xyXG4gICAgICAgICAgICBhdXRvQ2FyZ2FyUGVyc29uYXMoY29uZmlnUGFkcmUsJ3ZpdmllbmRhcycsIGVzdHJ1Y3R1cmEpXHJcbiAgICAgICAgfSkgICAgICAgIFxyXG4gICAgfVxyXG4gICAgcmVzcHVlc3Rhc1JhaXoudmRvbWluaW89Z2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXS50ZW0uZG9taW5pbztcclxuICAgIC8vVE9ETzogTUVKT1JBUiBFTiBBTEdVTiBNT01FTlRPIEVMIEJPVE9OIExJU1RPXHJcbiAgICBsZXQgdG90YWxIID0gcmVzcHVlc3Rhc1JhaXpbJ3RvdGFsX2gnIGFzIElkVmFyaWFibGVdO1xyXG4gICAgcmVzcHVlc3Rhc1JhaXpbJyRCLkY6UzEnIGFzIElkVmFyaWFibGVdID0gKHJlc3B1ZXN0YXNSYWl6Wydob2dhcmVzJ10gfHwgW10pLmxlbmd0aCA9PSB0b3RhbEg/J29rJzpudWxsO1xyXG4gICAgbGV0IHRvdGFsSHN1cCA9IHJlc3B1ZXN0YXNSYWl6Wyd0b3RhbF9oX3N1cCcgYXMgSWRWYXJpYWJsZV07XHJcbiAgICByZXNwdWVzdGFzUmFpelsnJEIuRjpTMV9TVVAnIGFzIElkVmFyaWFibGVdID0gKHJlc3B1ZXN0YXNSYWl6Wydob2dhcmVzX3N1cCcgYXMgSWRVbmlkYWRBbmFsaXNpc10gfHwgW10pLmxlbmd0aCA9PSB0b3RhbEhzdXA/J29rJzpudWxsO1xyXG59KVxyXG5cclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpe1xyXG4gICAgbG9hZEluc3RhbmNlKClcclxufSlcclxuLy9GSU4gQ09OVFJPTCBQRVNUQcORQVNcclxuXHJcbmZ1bmN0aW9uIGxvYWRDU1MoY3NzVVJMOnN0cmluZywgaWQ/OnN0cmluZyk6UHJvbWlzZTx2b2lkPntcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoIHJlc29sdmUsIHJlamVjdCApPT57XHJcbiAgICAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnbGluaycgKTtcclxuICAgICAgICBsaW5rLnJlbCAgPSAnc3R5bGVzaGVldCc7XHJcbiAgICAgICAgbGluay5ocmVmID0gY3NzVVJMO1xyXG4gICAgICAgIGxpbmsuaWQgPSBpZCB8fCBjc3NVUkw7XHJcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggbGluayApO1xyXG4gICAgICAgIGxpbmsub25sb2FkID0gKCk9PnsgXHJcbiAgICAgICAgICAgIHJlc29sdmUoKTsgXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGB0cmFlICR7Y3NzVVJMfWApO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGluay5vbmVycm9yPShlcnIpPT57XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciBjYXJnYW5kbyBlbCBlc3RpbG8nLCBlcnIpXHJcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHByb2JsZW1hIGNhcmdhbmRvIGVzdGlsbyAke2Nzc1VSTH1gKSlcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVtb3ZlQ1NTQnlJZChpZDpzdHJpbmcpe1xyXG4gICAgdmFyIGxpbmtOb2RlID0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuICAgIGxpbmtOb2RlPy5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChsaW5rTm9kZSk7XHJcbn1cclxuXHJcbmNvbnN0IEJPT1RTVFJBUF81XzFfM19TUkMgPSAnY3NzL2Jvb3RzdHJhcC5taW4uY3NzJzsiXX0=
|
|
1665
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvcmVuZGVyLWZvcm11bGFyaW8udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsK0JBQStCO0lBQy9CLHNDQUFzQztJQUN0QyxxREFRMEI7SUFDMUIsbUNBZ0JpQjtJQUNqQiwyREFjNEI7SUFDNUIseURBSTRCO0lBQzVCLGlDQUE2RDtJQUM3RCw2Q0FBdUQ7SUFDdkQscUNBQXVEO0lBQ3ZELCtDQUE2QztJQUM3QywyQ0FBd0M7SUFFeEMsNENBTTJCO0lBSTNCLDJEQWM0QjtJQUU1QiwyQ0FBeUM7SUFFekMsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0lBRzFCLFNBQVMsY0FBYyxDQUFDLElBQWdCLEVBQUUsV0FBNkM7UUFDbkYsSUFBRyxPQUFPLElBQUksSUFBSSxRQUFRO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDN0MsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUN0RSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUMsQ0FBQyxJQUFJLEVBQUMsRUFBRSxDQUFBLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFDLENBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7UUFDekYsSUFBRyxDQUFDLFdBQVcsSUFBSSxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDckM7O1VBRUU7SUFDTixDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMscUpBQXFKO0lBQ2hMLGdJQUFnSTtJQUVoSSxNQUFNLG1CQUFtQixHQUFHLGtCQUFrQixDQUFD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WUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7WUFDbkIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksTUFBTSxDQUFDO1lBQ3ZCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFFLElBQUksQ0FBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRSxFQUFFO2dCQUNkLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLENBQUMsQ0FBQztZQUNGLElBQUksQ0FBQyxPQUFPLEdBQUMsQ0FBQyxHQUFHLEVBQUMsRUFBRTtnQkFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsRUFBRSxHQUFHLENBQUMsQ0FBQTtnQkFDNUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLDRCQUE0QixNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFDM0QsQ0FBQyxDQUFBO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsU0FBUyxhQUFhLENBQUMsRUFBUzs7UUFDNUIsSUFBSSxRQUFRLEdBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QyxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxVQUFVLDBDQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsTUFBTSxtQkFBbUIsR0FBRyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XHJcbmltcG9ydCB7ICBcclxuICAgIFJlbmRlclByaW5jaXBhbCwgXHJcbiAgICBhZGFwdGFyVGlwb1ZhckNhc2lsbGVybyxcclxuICAgIElDT04sXHJcbiAgICBmb2N1c1RvSWQsXHJcbiAgICBzY3JvbGxUb1RvcCxcclxuICAgIHNjcm9sbFRvQm90dG9tLFxyXG4gICAgbWF0ZXJpYWxJb0ljb25zU3ZnUGF0aFxyXG59IGZyb20gXCIuL3JlbmRlci1nZW5lcmFsXCI7XHJcbmltcG9ydCB7QmxvcXVlLCBCb3RvbkZvcm11bGFyaW8sIFxyXG4gICAgQ2FzaWxsZXJvQmFzZSwgQ2Fzb1N0YXRlLCBDb25qdW50b1ByZWd1bnRhcywgQ29uc2lzdGVuY2lhLCBcclxuICAgIEVzdGFkb0NhcmdhLCBGaWx0cm8sIEZvclBrLCBGb3JQa1JhaXosIEZvcm11bGFyaW8sIFxyXG4gICAgSWRGb3JtdWxhcmlvLCBJZFByZWd1bnRhLCBJZFRhcmVhLCBJZFZhcmlhYmxlLCBJbmZvRm9ybXVsYXJpbyxcclxuICAgIE1vZG9EZXNwbGllZ3VlLFxyXG4gICAgT3BjaW9uLCBPcGNpb25NdWx0aXBsZSwgUGxhaW5Gb3JQaywgXHJcbiAgICBQcmVndW50YSwgUHJlZ3VudGFDb25PcGNpb25lcywgUHJlZ3VudGFTaW1wbGUsIFxyXG4gICAgUmVzcHVlc3RhcywgUmVzcHVlc3RhTGFzVUEsIFJlc3B1ZXN0YXNSYWl6LCBWYWxvciwgVEVNLCBJZENhcmdhLCBDYXJnYSwgSWRGaW4sIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBNb2RvQWxtYWNlbmFtaWVudG8sXHJcbiAgICB0b1BsYWluRm9yUGssXHJcbiAgICBJZENhc2lsbGVybyxcclxuICAgIFByZWd1bnRhQ29uU2lObyxcclxuICAgIFRleHRvLCBFc3RydWN0dXJhLCBJbmZvcm1hY2lvbkhkciwgRGF0b3NIZHJVYVBwYWwsIENvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLCBSZXN1bWVuRXN0YWRvLCBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcywgSWRPcGVyYXRpdm8sIElkRW5jLCBMaWJyZSwgVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBpdGVyYXRvciwgZW1wdHksIENvbmZpZ3VyYWNpb25IYWJpbGl0YXJCb3RvbkZvcm11bGFyaW8sXHJcbiAgICBDYW1wb1BrUmFpeixcclxuICAgIFZhbHVlUGtSYWl6XHJcbn0gZnJvbSBcIi4vdGlwb3NcIjtcclxuaW1wb3J0eyBcclxuICAgIGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLFxyXG4gICAgYWNjaW9uX2JvcnJhcl9mb3JtdWxhcmlvLFxyXG4gICAgY2FsY3VsYXJBY3R1YWxCRixcclxuICAgIGNhbGN1bGFyRGlzYWJsZWRCRixcclxuICAgIGNhbGN1bGFyUGVybWl0ZUJvcnJhckJGLFxyXG4gICAgY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEsXHJcbiAgICBjcmVhckVuY3Vlc3RhLFxyXG4gICAgZ2V0RGF0b3NCeVBhc3MsXHJcbiAgICBnZXRGb3JtdWxhcmlvc0ZvclZhbHVlUGtSYWl6LFxyXG4gICAgZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYSxcclxuICAgIGludGVudGFyQmFja3VwLFxyXG4gICAgcmVzcHVlc3Rhc0ZvclBrLFxyXG4gICAgc2V0Q2FsY3VsYXJWYXJpYWJsZXNcclxufSBmcm9tIFwiLi9ieXBhc3MtZm9ybXVsYXJpb1wiXHJcbmltcG9ydCB7IGRtVHJhZXJEYXRvc0Zvcm11bGFyaW8sIGRpc3BhdGNoZXJzLCBcclxuICAgIGdvdG9TaW5jcm9uaXphcixcclxuICAgIGdldENhY2hlVmVyc2lvbixcclxuICAgIGdvdG9Db25zaXN0aXIsXHJcbn0gZnJvbSBcIi4vcmVkdXgtZm9ybXVsYXJpb1wiO1xyXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgdXNlU2VsZWN0b3IsIHVzZURpc3BhdGNoIH0gZnJvbSBcInJlYWN0LXJlZHV4XCI7IFxyXG5pbXBvcnQgeyBzdHJpY3QgYXMgbGlrZUFyLCBiZWluZ0FycmF5IH0gZnJvbSBcImxpa2UtYXJcIjtcclxuaW1wb3J0IHtzbGVlcCwgY29hbGVzY2V9IGZyb20gXCJiZXN0LWdsb2JhbHNcIjtcclxuaW1wb3J0IHsgdW5leHBlY3RlZCB9IGZyb20gXCJjYXN0LWVycm9yXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgQXBwQmFyLCBCdXR0b25Hcm91cCwgQ2lyY3VsYXJQcm9ncmVzcywgQ2hlY2tib3gsIFxyXG4gICAgRGlhbG9nLCBEaWFsb2dBY3Rpb25zLCBEaWFsb2dDb250ZW50LCBEaWFsb2dDb250ZW50VGV4dCwgXHJcbiAgICBEaWFsb2dUaXRsZSwgRGl2aWRlciwgRmFiLCBJY29uQnV0dG9uLFxyXG4gICAgTWVudSwgTWVudUl0ZW0sIFBhcGVyLCBQb3BvdmVyLFxyXG4gICAgVGFibGUsIFRhYmxlQm9keSwgVGFibGVDZWxsLCBUYWJsZUhlYWQsIFRhYmxlUm93LCBUb29sYmFyLCBDc3NCYXNlbGluZVByb3BzXHJcbn0gZnJvbSBcIkBtYXRlcmlhbC11aS9jb3JlXCI7XHJcbmltcG9ydCB7IEVzdGFkb1ZhcmlhYmxlLCBGb3JtU3RydWN0dXJlU3RhdGUgfSBmcm9tIFwicm93LXZhbGlkYXRvclwiO1xyXG5pbXBvcnQgeyBDU1NQcm9wZXJ0aWVzIH0gZnJvbSBcIkBtYXRlcmlhbC11aS9jb3JlL3N0eWxlcy93aXRoU3R5bGVzXCI7XHJcblxyXG5pbXBvcnQgeyBcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvLCBzZXRBdHRyRGlzdGludG8sIHNldFZhbG9yRGlzdGludG8sIGRpc3BhdGNoQnlQYXNzLCBcclxuICAgIGdldERpcnR5LCBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcixcclxuICAgIGdldEZ1bmNpb25IYWJpbGl0YXIsIFxyXG4gICAgZ2V0RXN0cnVjdHVyYSwgXHJcbiAgICBkZWZPcGVyYXRpdm8sXHJcbiAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zLFxyXG4gICAgbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5LCBcclxuICAgIGNhbGN1bGFyRWxlbWVudG9FbmZvY2FkbyxcclxuICAgIGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLFxyXG4gICAgYWNjaW9uX2lkX3ByZWd1bnRhLFxyXG4gICAgYWNjaW9uX2FncmVnYXJfZm9ybXVsYXJpbyxcclxuICAgIE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8sXHJcbiAgICBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVU1xyXG59IGZyb20gXCIuL2J5cGFzcy1mb3JtdWxhcmlvXCJcclxuXHJcbmltcG9ydCB7aHRtbCwgSHRtbFRhZ30gZnJvbSBcImpzLXRvLWh0bWxcIjtcclxuXHJcbmNvbnN0IERFTEFZX1NDUk9MTF8zID0gNTA7XHJcblxyXG5mdW5jdGlvbiBicmVha2VhYmxlVGV4dCh0ZXh0OnN0cmluZ3xudWxsKTpzdHJpbmd8dW5kZWZpbmVkO1xyXG5mdW5jdGlvbiBicmVha2VhYmxlVGV4dCh0ZXh0OnN0cmluZ3xudWxsLCBkaWNjaW9uYXJpbz86e1tjbGF2ZTpzdHJpbmddOlJlYWN0LlJlYWN0Tm9kZX0pe1xyXG4gICAgaWYodHlwZW9mIHRleHQgIT0gXCJzdHJpbmdcIikgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcLy9nLFwiL1xcdTIwNjNcIikucmVwbGFjZSgvXFwvXFx1MjA2MyhcXHcpXFxiL2csJy8kMScpO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvX19fKi9nLCh0b2RvKT0+YFske3RvZG99XWApLnJlcGxhY2UoL1xcQFxcdytcXEAvZywodG9kbyk9PmBbJHt0b2RvfV1gKTtcclxuICAgIGlmKCFkaWNjaW9uYXJpbyB8fCB0cnVlKSByZXR1cm4gdGV4dDtcclxuICAgIC8qXHJcbiAgICByZXR1cm4gPHNwYW4+e3BhcnRlcy5tYXAoKHBhcnRlOnN0cmluZywgaTpudW1iZXIpID0+IDxzcGFuIHN0eWxlPXtpJTI9PTE/e3RleHREZWNvcmF0aW9uOlwidW5kZXJsaW5lXCJ9Ont9fT4ge3BhcnRlK1wiIFwifSA8L3NwYW4+KX08L3NwYW4+XHJcbiAgICAqL1xyXG59XHJcblxyXG5jb25zdCBWRVJfRE9NSU5JTyA9IGZhbHNlOyAvLyBlbCBlbmN1ZXN0YWRvciBubyBuZWNlc2l0YSB2ZXIgZWwgZG9taW5pbyBlbiBjYWRhIGVuY3Vlc3RhIHBvcnF1ZSBlbCBkb21pbmlvIGRlcGVuZGUgZGVsIMOhcmVhIHkgc2UgZGVkdWNlIGRlbCBwcmltZXIgZMOtZ2l0byBkZWwgbsO6bWVybyBkZSBlbmN1ZXN0YVxyXG4vLyBubyBwb25lciBWRVJfRE9NSU5JTyBlbiB0cnVlLCBjYW1iaWFyIHBvciB1bmEgdmFyaWFibGUgcXVlIHNlIGZpamUgc2kgZWwgRE0gZXN0w6EgZW4gbW9kbyBwcnVlYmEgbyBlbiBtb2RvIFwiZGlzZcOxbyBjb25jZXB0dWFsXCJcclxuXHJcbmNvbnN0IElEX0JPVE9OX1ZPTFZFUl9IRFIgPSAnYm90b24tdm9sdmVyLWhkcic7XHJcbmNvbnN0IElEX0JPVE9OX0NFUlJBUiA9ICdib3Rvbi1jZXJyYXItZW5jdWVzdGEnO1xyXG5cclxudmFyIGRlYmVTYWx0YXI6Ym9vbGVhbiA9IGZhbHNlO1xyXG5cclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKT0+e1xyXG4gICAgLypcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2OktleWJvYXJkRXZlbnQpPT57XHJcbiAgICAgICAgZGViZVNhbHRhciA9IGV2LmtleSA9PSAnRW50ZXInIHx8IGV2LmtleUNvZGUgPT0gMTM7XHJcbiAgICB9KVxyXG4gICAgKi9cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpPT57XHJcbiAgICAgICAgZGViZVNhbHRhciA9IGZhbHNlO1xyXG4gICAgfSlcclxufSlcclxuXHJcbi8vIC8qXHJcblxyXG50eXBlIENvbW1vbkF0dHJpYnV0ZXMgPSB7Y2xhc3NOYW1lPzpzdHJpbmcsc3R5bGU/OkNTU1Byb3BlcnRpZXMsaWQ/OnN0cmluZywgdGFiSW5kZXg/Om51bWJlcn0gLy8gQ1NTUHJvcGVydGllc1xyXG50eXBlIENvbG9yVmFsdWVzID0gJ3ByaW1hcnknfCdzZWNvbmRhcnknfCdkZWZhdWx0J3wnaW5oZXJpdCdcclxuXHJcbmV4cG9ydCB0eXBlIExpYnJlRGVzcGxpZWd1ZVR5cGUgPSAocHJvcHM6e1xyXG4gICAga2V5OnN0cmluZ1xyXG4gICAgY2FzaWxsZXJvOkxpYnJlXHJcbiAgICBmb3JtdWxhcmlvOkZvcm11bGFyaW9cclxuICAgIGZvclBrOkZvclBrXHJcbn0pPT5KU1guRWxlbWVudDtcclxuXHJcbnZhciBMaWJyZURlc3BsaWVndWU6IExpYnJlRGVzcGxpZWd1ZVR5cGVcclxuXHJcbmV4cG9ydCBjb25zdCBCdXR0b24gPSAoe3ZhcmlhbnQsIG9uQ2xpY2ssIGRpc2FibGVkLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCBjb2xvciwgc2l6ZSwgXHJcbiAgICAgICAgZGlzYWJsZUVsZXZhdGlvbiwgZGlzYWJsZUZvY3VzUmlwcGxlLCBkaXNhYmxlUmlwcGxlLCBcclxuICAgICAgICAuLi5vdGhlclxyXG4gICAgfTp7XHJcbiAgICB2YXJpYW50PzpzdHJpbmcsXHJcbiAgICBjb2xvcj86Q29sb3JWYWx1ZXMsXHJcbiAgICBvbkNsaWNrPzpSZWFjdC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MQnV0dG9uRWxlbWVudD4sIC8vICAoZXZlbnQ6TW91c2VFdmVudC8qIDxIVE1MQnV0dG9uRWxlbWVudCwgTW91c2VFdmVudD4qLyk9PnZvaWQsXHJcbiAgICBkaXNhYmxlZD86Ym9vbGVhblxyXG4gICAgY2hpbGRyZW46YW55LFxyXG4gICAgY2xhc3NOYW1lPzpzdHJpbmcsXHJcbiAgICBzaXplPzonc21hbGwnLFxyXG4gICAgZGlzYWJsZUVsZXZhdGlvbj86YW55LCBkaXNhYmxlRm9jdXNSaXBwbGU/OmFueSwgZGlzYWJsZVJpcHBsZT86YW55LFxyXG59ICYgQ29tbW9uQXR0cmlidXRlcyk9PjxidXR0b24gXHJcbiAgICB7Li4ub3RoZXJ9XHJcbiAgICBjbGFzc05hbWU9e2BidG4gYnRuJHt2YXJpYW50PT0nY29udGFpbmVkJz8nJzonLScrKHZhcmlhbnQ9PSdvdXRsaW5lZCc/J291dGxpbmUnOnZhcmlhbnQpfS0keyhjb2xvcj09J2RlZmF1bHQnIHx8IGNvbG9yPT0naW5oZXJpdCc/J3NlY29uZGFyeSc6Y29sb3I9PSdzZWNvbmRhcnknPydkYW5nZXInOmNvbG9yKXx8J3NlY29uZGFyeSd9ICR7Y2xhc3NOYW1lfHwnJ30gJHtzaXplPT0nc21hbGwnPydidG4tc20nOicnfWB9XHJcbiAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICBvbkNsaWNrPXtvbkNsaWNrfVxyXG4+e2NoaWxkcmVufTwvYnV0dG9uPjtcclxuXHJcbmNvbnN0IEJ1dHRvbjIgPSAoe3ZhcmlhbnQsIG9uQ2xpY2ssIGRpc2FibGVkLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCBjb2xvciwgc2l6ZSwgLi4ub3RoZXJ9OntcclxuICAgIHZhcmlhbnQ/OnN0cmluZyxcclxuICAgIGNvbG9yPzpDb2xvclZhbHVlcyxcclxuICAgIG9uQ2xpY2s/OigpPT52b2lkLFxyXG4gICAgZGlzYWJsZWQ/OmJvb2xlYW5cclxuICAgIGNoaWxkcmVuOmFueSxcclxuICAgIGNsYXNzTmFtZT86c3RyaW5nLFxyXG4gICAgc2l6ZT86J3NtYWxsJyxcclxuICAgICRhdHRycz86e31cclxufSAmIENvbW1vbkF0dHJpYnV0ZXMpPT5odG1sLmJ1dHRvbih7XHJcbiAgICAuLi5vdGhlcixcclxuICAgIGNsYXNzOiBgYnRuIGJ0biR7dmFyaWFudD09J2NvbnRhaW5lZCc/Jyc6Jy0nKyh2YXJpYW50PT0nb3V0bGluZWQnPydvdXRsaW5lJzp2YXJpYW50KX0tJHsoY29sb3I9PSdkZWZhdWx0JyB8fCBjb2xvcj09J2luaGVyaXQnPydzZWNvbmRhcnknOmNvbG9yPT0nc2Vjb25kYXJ5Jz8nZGFuZ2VyJzpjb2xvcil8fCdzZWNvbmRhcnknfSAke2NsYXNzTmFtZXx8Jyd9ICR7c2l6ZT09J3NtYWxsJz8nYnRuLXNtJzonJ31gLFxyXG4gICAgZGlzYWJsZWQsXHJcbiAgICAkb246e2NsaWNrOm9uQ2xpY2t9XHJcbn0sIGNoaWxkcmVuKTtcclxuXHJcblxyXG5jb25zdCBUZXh0RmllbGQgPSAocHJvcHM6e1xyXG4gICAgaWQ6c3RyaW5nLFxyXG4gICAgZGlzYWJsZWQ/OmJvb2xlYW4sXHJcbiAgICBjbGFzc05hbWU/OnN0cmluZyxcclxuICAgIGF1dG9Gb2N1cz86Ym9vbGVhbixcclxuICAgIGZ1bGxXaWR0aDpib29sZWFuXHJcbiAgICBpbnB1dFByb3BzPzphbnksXHJcbiAgICB2YWx1ZT86YW55LFxyXG4gICAgdHlwZTphbnksXHJcbiAgICBsYWJlbD86c3RyaW5nLFxyXG4gICAgZXJyb3I/OmJvb2xlYW4sXHJcbiAgICBoZWxwZXJUZXh0PzpzdHJpbmcsXHJcbiAgICBtdWx0aWxpbmU/OmJvb2xlYW4sXHJcbiAgICBvbkNoYW5nZT86KGV2ZW50OmFueSk9PnZvaWQsXHJcbiAgICBvbkZvY3VzPzooZXZlbnQ6YW55KT0+dm9pZCxcclxuICAgIG9uQmx1cj86KGV2ZW50OmFueSwgdmFsb3I6YW55KT0+dm9pZCxcclxuICAgIC8vIG9uS2V5RG93bj86KGV2ZW50OktleWJvYXJkRXZlbnQpPT52b2lkIC8vIEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+XHJcbiAgICBvbktleURvd24/OlJlYWN0LktleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+XHJcbn0pPT48aW5wdXRcclxuICAgIGlkPXtwcm9wcy5pZH1cclxuICAgIGRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZH1cclxuICAgIGNsYXNzTmFtZT17cHJvcHMuY2xhc3NOYW1lfVxyXG4gICAgYXV0b0ZvY3VzPXtwcm9wcy5hdXRvRm9jdXN9XHJcbiAgICB2YWx1ZT17cHJvcHMudmFsdWV9IFxyXG4gICAgdHlwZT17cHJvcHMudHlwZX1cclxuICAgIG9uQ2hhbmdlPXtwcm9wcy5vbkNoYW5nZX1cclxuICAgIG9uRm9jdXM9e3Byb3BzLm9uRm9jdXN9XHJcbiAgICBvbkJsdXI9eyhldnQpPT5wcm9wcy5vbkJsdXI/LihldnQsIGV2dC50YXJnZXQudmFsdWUpfVxyXG4gICAgb25LZXlEb3duPXtwcm9wcy5vbktleURvd259XHJcbiAgICBwbGFjZWhvbGRlcj17cHJvcHMubGFiZWx9XHJcbi8+O1xyXG5cclxuY29uc3QgVHlwb2dyYXBoeSA9ICh7Y2hpbGRyZW4sIC4uLm90aGVyc306e1xyXG4gICAgY2hpbGRyZW46YW55LFxyXG4gICAgY29tcG9uZW50PzpzdHJpbmdcclxuICAgIHZhcmlhbnQ/OidoNidcclxufSZDb21tb25BdHRyaWJ1dGVzKT0+UmVhY3QuY3JlYXRlRWxlbWVudChvdGhlcnMudmFyaWFudHx8b3RoZXJzLmNvbXBvbmVudHx8J2Rpdicsb3RoZXJzLGNoaWxkcmVuKTtcclxuXHJcbmZ1bmN0aW9uIEdyaWQocHJvcHM6e1xyXG4gICAgY29udGFpbmVyPzpib29sZWFuLFxyXG4gICAgc3BhY2luZz86bnVtYmVyLFxyXG4gICAgaXRlbT86Ym9vbGVhbixcclxuICAgIHdyYXA/Oid3cmFwJ3wnbm93cmFwJyxcclxuICAgIGRpcmVjdGlvbj86J3Jvdyd8J2NvbHVtbidcclxuICAgIGFsaWduSXRlbXM/OidzdHJldGNoJyB8ICdmbGV4LXN0YXJ0JyB8ICdmbGV4LWVuZCcgfCAnY2VudGVyJyB8ICdiYXNlbGluZScsXHJcbiAgICBjaGlsZHJlbjphbnksXHJcbiAgICB4cz86bnVtYmVyLFxyXG4gICAgc20/Om51bWJlcixcclxufSZDb21tb25BdHRyaWJ1dGVzKXtcclxuICAgIHZhciB7Y29udGFpbmVyLCBpdGVtLCB3cmFwLCBkaXJlY3Rpb24sIGFsaWduSXRlbXMsIGNoaWxkcmVuLCBjbGFzc05hbWUsIHhzLCBzbSwgc3BhY2luZywgLi4ub3RoZXJ9ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPGRpdlxyXG4gICAgey4uLm90aGVyfVxyXG4gICAgY2xhc3NOYW1lPXtgJHtjbGFzc05hbWV8fCcnfSAke3hzIT1udWxsPydncmlkLXhzLScreHM6Jyd9ICR7c20hPW51bGw/J2dyaWQtc20tJytzbTonJ31gfVxyXG4gICAgc3R5bGU9e2NvbnRhaW5lcj97XHJcbiAgICAgICAgZGlzcGxheTonZmxleCcsXHJcbiAgICAgICAgZmxleFdyYXA6d3JhcCxcclxuICAgICAgICBmbGV4RGlyZWN0aW9uOmRpcmVjdGlvbixcclxuICAgICAgICBhbGlnbkl0ZW1zOmFsaWduSXRlbXMsXHJcbiAgICAgICAgbWFyZ2luOnNwYWNpbmchPW51bGw/c3BhY2luZyo4KydweCc6dW5kZWZpbmVkXHJcbiAgICB9OntcclxuICAgIH19XHJcbj57Y2hpbGRyZW59PC9kaXY+XHJcbn1cclxuXHJcbnZhciBwMTIgPSAncDEyJyBhcyBJZFZhcmlhYmxlO1xyXG52YXIgc3AyID0gJ3NwMicgYXMgSWRWYXJpYWJsZTtcclxudmFyIHNwMyA9ICdzcDMnIGFzIElkVmFyaWFibGU7XHJcbnZhciBzcDQgPSAnc3A0JyBhcyBJZFZhcmlhYmxlO1xyXG52YXIgc3A1ID0gJ3NwNScgYXMgSWRWYXJpYWJsZTtcclxuXHJcbnZhciBkaWNjaW9uYXJpbyA9IHt9XHJcblxyXG4vKlxyXG4vLyBjb25zdCB0YWtlRWxlbWVudE9yRGVmYXVsdDxLLCBUIGV4dGVuZHMgW0sgaW5dLCBEPigpXHJcbmZ1bmN0aW9uIGlzSW48ViwgVD4oazprZXlvZiBULCBvYmplY3Q6VCk6IG9iamVjdFtrXSBpcyBWe1xyXG4gICAgcmV0dXJuIHRydWVcclxufVxyXG4qL1xyXG5mdW5jdGlvbiB0YWtlRWxlbWVudE9yRGVmYXVsdDxWLEsgZXh0ZW5kcyBzdHJpbmcsS08gZXh0ZW5kcyBzdHJpbmc+KGs6Sywgb2JqZWN0OntbayBpbiBLT106Vn0sIGRlZmF1bHRWYWx1ZTpWKTpWe1xyXG4gICAgcmV0dXJuIGsgaW4gb2JqZWN0ID8gXHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBwb3IgYWxndW5hIHJhesOzbiBUUyBubyBxdWllcmUgZW50ZW5kZXIgcXVlIHNpIGsgZXN0w6EgZW4gb2JqZWN0LCBvYmplY3Rba10gZXhpc3RlXHJcbiAgICAgICAgb2JqZWN0W2tdIFxyXG4gICAgOiBkZWZhdWx0VmFsdWVcclxufVxyXG5cclxuZnVuY3Rpb24gRGVzcGxpZWd1ZUVuY2FiZXphZG8ocHJvcHM6e2Nhc2lsbGVybzpDYXNpbGxlcm9FbmNhYmV6YWJsZSwgbGVlcj86Ym9vbGVhbn0pe1xyXG4gICAgY29uc3QgZm9yUGtOdWxsPXt9IGFzIEZvclBrO1xyXG4gICAgcmV0dXJuIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e3Byb3BzLmNhc2lsbGVyb30gbGVlcj17cHJvcHMubGVlcn0gZm9yUGs9e2ZvclBrTnVsbH0vPjtcclxufVxyXG5cclxuZnVuY3Rpb24gc3ViaXJIYXN0YShlbGVtZW50bzpIVE1MRWxlbWVudHxudWxsLCBmdW46KGVsZW1lbnRvOkhUTUxFbGVtZW50KT0+Ym9vbGVhbik6SFRNTEVsZW1lbnR8bnVsbHtcclxuICAgIGlmKGVsZW1lbnRvID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgaWYoZnVuKGVsZW1lbnRvKSkgcmV0dXJuIGVsZW1lbnRvO1xyXG4gICAgcmV0dXJuIHN1YmlySGFzdGEoZWxlbWVudG8ucGFyZW50RWxlbWVudCwgZnVuKTtcclxufVxyXG5cclxudmFyIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhcjpIVE1MRWxlbWVudHxudWxsID0gbnVsbDtcclxuXHJcbmZ1bmN0aW9uIEJvdG9uQm9ycmFyKHtpZCwgdmFyaWFibGUsIGZvclBrLCB2YWxvck9wY2lvbn06e2lkOnN0cmluZywgdmFyaWFibGU6SWRWYXJpYWJsZSwgZm9yUGs6Rm9yUGssIHZhbG9yT3BjaW9uPzphbnl9KXtcclxuICAgIHZhciBoYW5kbGVDbGlja0JvcnJhcj0oKT0+e1xyXG4gICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7cmVzcHVlc3RhOm51bGwsIHZhcmlhYmxlOnZhcmlhYmxlLCBmb3JQazpmb3JQa30pXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYm90b24tYm9ycmFyXCI+XHJcbiAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICBpZD17aWR9XHJcbiAgICAgICAgICAgIG1pLXZhcmlhYmxlPXt2YXJpYWJsZX1cclxuICAgICAgICAgICAgdmFsb3Itb3BjaW9uPXt2YWxvck9wY2lvbn1cclxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm90b24tb3BjaW9uIGJvdG9uLW9wY2lvbi1ib3JyYXJcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja0JvcnJhcn1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxJQ09OLkRlbGV0ZUZvcmV2ZXIvPlxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFNhbHRvRGVzcGxpZWd1ZSh7Y2FzaWxsZXJvLHByZWZpam99OntjYXNpbGxlcm86UHJlZ3VudGF8T3BjaW9ufEZpbHRybywgcHJlZmlqbz86c3RyaW5nfSl7XHJcbiAgICByZXR1cm4gY2FzaWxsZXJvLnNhbHRvP1xyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFzZVwiPlxyXG4gICAgICAgICAgICB7cHJlZmlqbz88c3BhbiBjbGFzc05hbWU9XCJwcmVmaWpvXCI+e3ByZWZpam99IDwvc3Bhbj46bnVsbH1cclxuICAgICAgICAgICAgPElDT04uVHJlbmRpbmdGbGF0IC8+PHNwYW4+e2Nhc2lsbGVyby5zYWx0b308L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA6bnVsbFxyXG59XHJcblxyXG5mdW5jdGlvbiBPcGNpb25EZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86T3BjaW9uLCB2YWxvck9wY2lvbjpudW1iZXIsIHZhcmlhYmxlOklkVmFyaWFibGUsIGZvclBrOkZvclBrLCBsZWVyOmJvb2xlYW4sIGNvbkJvdG9uQm9ycmFyOmJvb2xlYW59KXtcclxuICAgIGNvbnN0IHtjYXNpbGxlcm99ID0gcHJvcHM7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgc2FsdG9BdXRvbWF0aWNvID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9PnN0YXRlLm9wY2lvbmVzLnNhbHRvQXV0b21hdGljbyk7XHJcbiAgICB2YXIgaGFuZGxlQ2xpY2s6UmVhY3QuTW91c2VFdmVudEhhbmRsZXI8SFRNTEJ1dHRvbkVsZW1lbnQ+ID0gYXN5bmMgKGV2ZW50KT0+e1xyXG4gICAgICAgIHZhciBjb250YWluZXIgPSBzdWJpckhhc3RhKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCwgZWxlbWVudG89PmVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygncHJlZ3VudGEnKSB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ211bHRpcGxlJykpIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgICAgICB2YXIgdGllbmUgPSBjb250YWluZXIuZ2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycpO1xyXG4gICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2VzdG95LWJvcnJhbmRvJywnTk8nKTtcclxuICAgICAgICBpZihlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIpe1xyXG4gICAgICAgICAgICBlbGVtZW50b0NvblNlbm5pYWxCb3JyYXIuc2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycsJ05PJyk7XHJcbiAgICAgICAgICAgIGVsZW1lbnRvQ29uU2VubmlhbEJvcnJhciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB7cmVjZW50TW9kaWZpZWQsIHNpZ3VpZW50ZVZhcmlhYmxlfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7cmVzcHVlc3RhOnByb3BzLnZhbG9yT3BjaW9uLCB2YXJpYWJsZTpwcm9wcy52YXJpYWJsZSwgZm9yUGs6cHJvcHMuZm9yUGt9KTtcclxuICAgICAgICBpZighcmVjZW50TW9kaWZpZWQpe1xyXG4gICAgICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdlc3RveS1ib3JyYW5kbycsdGllbmU9PSdTSSc/J05PJzonU0knKTtcclxuICAgICAgICAgICAgaWYodGllbmUhPSdTSScpe1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG9Db25TZW5uaWFsQm9ycmFyPWNvbnRhaW5lcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBpZihzaWd1aWVudGVWYXJpYWJsZSAmJiBzYWx0b0F1dG9tYXRpY28pe1xyXG4gICAgICAgICAgICAgICAgdmFyIGJvdG9uU3R5bGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8uc3R5bGU7XHJcbiAgICAgICAgICAgICAgICBpZihib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJ2dyZWVuJztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKERFTEFZX1NDUk9MTF8zKTtcclxuICAgICAgICAgICAgICAgIGlmKGJvdG9uU3R5bGUpIGJvdG9uU3R5bGUuY29sb3IgPSAnYmx1ZSc7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBzbGVlcChERUxBWV9TQ1JPTExfMyk7XHJcbiAgICAgICAgICAgICAgICBpZihib3RvblN0eWxlKSBib3RvblN0eWxlLmNvbG9yID0gJ2dyZWVuJztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKERFTEFZX1NDUk9MTF8zKTtcclxuICAgICAgICAgICAgICAgIGlmKGJvdG9uU3R5bGUpIGJvdG9uU3R5bGUuY29sb3IgPSAnJztcclxuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBhbGd1bm9zIGNhc2lsbGVyb3MgdGllbmVuIGVzcGVjaWFsIHkgb3Ryb3Mgbm9cclxuICAgICAgICAgICAgICAgIChjYXNpbGxlcm8uZXNwZWNpYWw/Lm5vU2Nyb2xsID09IHRydWUpP251bGw6ZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShjYXNpbGxlcm8uZXNwZWNpYWw/LnNjcm9sbFRvID8/IHNpZ3VpZW50ZVZhcmlhYmxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gPEdyaWQgY2xhc3NOYW1lPVwib3BjaW9uXCI+IFxyXG4gICAgICAgIHtwcm9wcy5jb25Cb3RvbkJvcnJhcj88Qm90b25Cb3JyYXJcclxuICAgICAgICAgICAgaWQ9e2BvcGNpb24tdmFyLSR7cHJvcHMudmFyaWFibGV9LSR7cHJvcHMudmFsb3JPcGNpb259LWJvcnJhcmB9XHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgdmFyaWFibGU9e3Byb3BzLnZhcmlhYmxlfVxyXG4gICAgICAgICAgICB2YWxvck9wY2lvbj17cHJvcHMudmFsb3JPcGNpb259XHJcbiAgICAgICAgICAgIC8+Om51bGx9XHJcbiAgICAgICAgPEJ1dHRvbiBcclxuICAgICAgICAgICAgaWQ9e2BvcGNpb24tdmFyLSR7cHJvcHMudmFyaWFibGV9LSR7cHJvcHMudmFsb3JPcGNpb259YH1cclxuICAgICAgICAgICAgbWktdmFyaWFibGU9e3Byb3BzLnZhcmlhYmxlfVxyXG4gICAgICAgICAgICB2YWxvci1vcGNpb249e3Byb3BzLnZhbG9yT3BjaW9ufVxyXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJib3Rvbi1vcGNpb24gYm90b24tb3BjaW9uLXNlbGVjY2lvblwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxyXG4gICAgICAgICAgICB0YWJJbmRleD17LTF9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8R3JpZCBjb250YWluZXIgd3JhcD1cIm5vd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgPEdyaWQgY2xhc3NOYW1lPVwiaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLnZlcl9pZCB8fCBjYXNpbGxlcm8uY2FzaWxsZXJvfVxyXG4gICAgICAgICAgICAgICAgPC9HcmlkPlxyXG4gICAgICAgICAgICAgICAgPEdyaWQgY2xhc3NOYW1lPVwib3BjaW9uLXRleHRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgZGViZS1sZWVyPXtjYXNpbGxlcm8ubGVlcj8nU0knOmNhc2lsbGVyby5sZWVyPT09ZmFsc2U/J05PJzpwcm9wcy5sZWVyPydTSSc6J05PJ30+e2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5ub21icmUpfTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLmFjbGFyYWNpb24/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGNsYXNzTmFtZT0nYWNsYXJhY2lvbic+e2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKX08L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgOm51bGx9XHJcbiAgICAgICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgICAgIDwvR3JpZD5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8U2FsdG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfS8+XHJcbiAgICA8L0dyaWQ+XHJcbn1cclxuaW50ZXJmYWNlIEljYXNpbGxlcm9Db25PcGNpb25lc3tcclxuICAgIHZhcl9uYW1lOklkVmFyaWFibGUsXHJcbiAgICBkZXNwbGllZ3VlQ29udGVuaWRvOid2ZXJ0aWNhbCd8J2hvcml6b250YWwnfG51bGwsXHJcbiAgICBjYXNpbGxlcm9zOk9wY2lvbltdXHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBTaU5vRGVzcGxpZWd1ZShwcm9wczp7Y2FzaWxsZXJvQ29uT3BjaW9uZXM6SWNhc2lsbGVyb0Nvbk9wY2lvbmVzLCBmb3JQazpGb3JQaywgZGVzcGxpZWd1ZUNvbnRlbmlkbzondmVydGljYWwnfCdob3Jpem9udGFsJ30pe1xyXG4gICAgcmV0dXJuIDxPcGNpb25lc0Rlc3BsaWVndWUgXHJcbiAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e3Byb3BzLmNhc2lsbGVyb0Nvbk9wY2lvbmVzfSBcclxuICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9IFxyXG4gICAgICAgIGxlZXI9e2ZhbHNlfVxyXG4gICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3Byb3BzLmRlc3BsaWVndWVDb250ZW5pZG99XHJcbiAgICAvPlxyXG59XHJcblxyXG5mdW5jdGlvbiByZWdpc3RyYWRvckRlVmFyaWFibGUocHJlZ3VudGE6UHJlZ3VudGF8T3BjaW9uTXVsdGlwbGV8Q29uanVudG9QcmVndW50YXMpe1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsIGZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIGVsZW1lbnRvOkhUTUxEaXZFbGVtZW50XHJcbiAgICApPT57XHJcbiAgICAgICAgdmFyIHZhbG9yQWN0dWFsID0gcHJlZ3VudGEudmFyX25hbWUgPT0gbnVsbCA/IG51bGwgOiByZXNwdWVzdGFzW3ByZWd1bnRhLnZhcl9uYW1lXTtcclxuICAgICAgICB2YXIgZmVlZGJhY2tSb3cgPSBmZWVkYmFja0Zvcm0uZmVlZGJhY2s7XHJcbiAgICAgICAgdmFyIGZlZWRiYWNrVmFyID0gcHJlZ3VudGEudmFyX25hbWUgPT0gbnVsbCA/IG51bGwgOiBmZWVkYmFja1Jvd1twcmVndW50YS52YXJfbmFtZV07XHJcbiAgICAgICAgdmFyIHRpZW5lVmFsb3I9dmFsb3JBY3R1YWwhPW51bGwgJiYgZmVlZGJhY2tWYXIhPW51bGw/KGZlZWRiYWNrVmFyLmNvblByb2JsZW1hPydpbnZhbGlkbyc6J3ZhbGlkbycpOidOTyc7XHJcbiAgICAgICAgdmFyIGVzdGFkbzpFc3RhZG9WYXJpYWJsZTsgXHJcbiAgICAgICAgaWYocHJlZ3VudGEudGlwb3Zhcil7XHJcbiAgICAgICAgICAgIGVzdGFkbz1mZWVkYmFja1Zhcj8uZXN0YWRvITtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdmFyIGZlZWRiYWNrTXVsdGkgPSBwcmVndW50YS5jYXNpbGxlcm9zLmZpbHRlcihjPT5jLnZhcl9uYW1lIT1udWxsKS5yZWR1Y2UoKHB2LCBvbSk9PntcclxuICAgICAgICAgICAgICAgIHZhciBmYj1mZWVkYmFja1Jvdz8uW29tLnZhcl9uYW1lIV0hXHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpZW5lQWN0dWFsOiBwdi50aWVuZUFjdHVhbCB8fCBmYi5lc3RhZG89PSdhY3R1YWwnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVzdGFTYWx0ZWFkYTogcHYuZXN0YVNhbHRlYWRhICYmIChmYi5lc3RhZG89PSdzYWx0ZWFkYScgfHwgZmIuZXN0YWRvPT0nZnVlcmFfZGVfZmx1am9fcG9yX3NhbHRvJylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwge3RpZW5lQWN0dWFsOmZhbHNlLCBlc3RhU2FsdGVhZGE6dHJ1ZX0pO1xyXG4gICAgICAgICAgICBlc3RhZG89ZmVlZGJhY2tNdWx0aS50aWVuZUFjdHVhbD8nYWN0dWFsJzpmZWVkYmFja011bHRpLmVzdGFTYWx0ZWFkYT8nc2FsdGVhZGEnOid0b2RhdmlhX25vJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG8sICdudWVzdHJvLXZhbGlkYXRvcicsIGVzdGFkbyk7XHJcbiAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGVsZW1lbnRvLCAndGllbmUtdmFsb3InLCB0aWVuZVZhbG9yKTtcclxuICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG8sICdlc3RhLWluaGFiaWxpdGFkYScsIGZlZWRiYWNrVmFyPy5pbmhhYmlsaXRhZGE/J1NJJzonTk8nKTtcclxuICAgICAgICBpZihwcmVndW50YS52YXJfbmFtZSl7XHJcbiAgICAgICAgICAgIHZhciBvcGNpb25lczpIVE1MQnV0dG9uRWxlbWVudFtdID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWxlbWVudG8ucXVlcnlTZWxlY3RvckFsbChgLmJvdG9uLW9wY2lvblttaS12YXJpYWJsZT1cIiR7cHJlZ3VudGEudmFyX25hbWV9XCJdYCksMCk7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50b09wY2lvbjpIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgICAgICAgICAgZm9yKGVsZW1lbnRvT3BjaW9uIG9mIG9wY2lvbmVzKXtcclxuICAgICAgICAgICAgICAgIHZhciB2YWxvck9wY2lvbiA9IGVsZW1lbnRvT3BjaW9uLmdldEF0dHJpYnV0ZSgndmFsb3Itb3BjaW9uJyk7XHJcbiAgICAgICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG9PcGNpb24sICdvcGNpb24tc2VsZWNjaW9uYWRhJywgdmFsb3JPcGNpb24gPT0gdmFsb3JBY3R1YWwgPyBcIlNJXCI6IFwiTk9cIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9zSW5wdXQ6SFRNTElucHV0RWxlbWVudFtdID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWxlbWVudG8ucXVlcnlTZWxlY3RvckFsbCgnLnZhcmlhYmxlJykpO1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9JbnB1dDpIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgICAgICAgICBmb3IoZWxlbWVudG9JbnB1dCBvZiBlbGVtZW50b3NJbnB1dCl7XHJcbiAgICAgICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGVsZW1lbnRvSW5wdXQsICd2YWx1ZScsIHZhbG9yQWN0dWFsID09IG51bGwgPyAnJyA6IHZhbG9yQWN0dWFsLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBib3Rvbk5zTmMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5zbmMtcHJlZ3VudGEtXCIrcHJlZ3VudGEudmFyX25hbWUpITtcclxuICAgICAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGJvdG9uTnNOYywgJ29wY2lvbi1zZWxlY2Npb25hZGEnLCB2YWxvckFjdHVhbCA9PSAocHJlZ3VudGEudmFsb3JfbnNfbmMgPz8gLTkpID8gXCJTSVwiIDogXCJOT1wiKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gT3BjaW9uTXVsdGlwbGVEZXNwbGllZ3VlKHByb3BzOntvcGNpb25NOk9wY2lvbk11bHRpcGxlLCBmb3JQazpGb3JQa30pe1xyXG4gICAgY29uc3Qge29wY2lvbk19ID0gcHJvcHM7XHJcbiAgICB2YXIgaWQgPSBgb3BjaW9uTS0ke29wY2lvbk0uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICAvL0B0cy1pZ25vcmUgYWx0dW5vcyBjYXNpbGxlcm9zIG5vIHRpZW5lbiBlc3BlY2lhbCwgbm8gaW1wb3J0YSwgZXMgc29sbyBwYXJhIHBvbmVyIGxvcyBtZXRhZGF0b3NcclxuICAgIHZhciBzdHlsZXMgPSBvcGNpb25NLmVzcGVjaWFsPy5mbGV4RGlyZWN0aW9uP3tmbGV4RGlyZWN0aW9uOm9wY2lvbk0uZXNwZWNpYWwuZmxleERpcmVjdGlvbn06e307XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsIFxyXG4gICAgICAgIGRpcmVjdDp0cnVlLCBcclxuICAgICAgICBmdW46IHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShvcGNpb25NKVxyXG4gICAgfSlcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIFxyXG4gICAgICAgIGlkPXtpZH1cclxuICAgICAgICBjYXNpbGxlcm89e29wY2lvbk19XHJcbiAgICAgICAgZGVzcGxpZWd1ZUVuY2FiZXphZG89J2xhdGVyYWwnXHJcbiAgICAgICAgc3R5bGU9e3N0eWxlc31cclxuICAgID5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgXHJcbiAgICAgICAgICAgIGNhc2lsbGVybz17b3BjaW9uTX0gXHJcbiAgICAgICAgICAgIHZlcklkR3Vpb249e3RydWV9IFxyXG4gICAgICAgICAgICBsZWVyPXtvcGNpb25NLmxlZXIhPT1mYWxzZX0gXHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAvPlxyXG4gICAgICAgIDxTaU5vRGVzcGxpZWd1ZSBcclxuICAgICAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e29wY2lvbk19IFxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3Byb3BzLm9wY2lvbk0uZGVzcGxpZWd1ZUNvbnRlbmlkbz8/J2hvcml6b250YWwnfVxyXG4gICAgICAgIC8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxudHlwZSBDYXNpbGxlcm9FbmNhYmV6YWJsZSA9IEZvcm11bGFyaW98QmxvcXVlfEZpbHRyb3xDb25qdW50b1ByZWd1bnRhc3xQcmVndW50YXxPcGNpb25NdWx0aXBsZXxQcmVndW50YVNpbXBsZXxDb25zaXN0ZW5jaWF8VGV4dG9cclxuXHJcbmZ1bmN0aW9uIEVuY2FiZXphZG9EZXNwbGllZ3VlKHByb3BzOntjYXNpbGxlcm86Q2FzaWxsZXJvRW5jYWJlemFibGUsIHZlcklkR3Vpb24/OmJvb2xlYW4sIGxlZXI/OmJvb2xlYW4sIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2Nhc2lsbGVybywgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIgW29wZW5Db25maXJtLCBzZXRPcGVuQ29uZmlybV0gPSB1c2VTdGF0ZShmYWxzZSlcclxuICAgIHZhciBbcG9zR1BTLCBzZXRQb3NHUFNdID0gdXNlU3RhdGUobnVsbClcclxuICAgIHZhciBjb25DYW1wb09wY2lvbmVzID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9PnN0YXRlLm9wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXMpXHJcbiAgICB2YXIgaGFuZGxlQ2xpY2tCb3JyYXI9KCk9PntcclxuICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwge3Jlc3B1ZXN0YTpudWxsLCB2YXJpYWJsZTpjYXNpbGxlcm8udmFyX25hbWUgYXMgSWRWYXJpYWJsZSwgZm9yUGs6Zm9yUGt9KVxyXG4gICAgfTtcclxuICAgIHZhciB2ZXJfaWQgPSBjYXNpbGxlcm8udmVyX2lkID8/IGNhc2lsbGVyby5jYXNpbGxlcm87XHJcbiAgICAvLyBAdHMtaWdub3JlIG5vIGVzdMOhIGVuIHRvZG9zIGxvcyBjYXNpbGxlcm9zIHBlcm8gYWPDoSBwYXJhIGVsIGRlc3BsaWVndWUgZGUgbWV0YWRhdG9zIG5vIGltcG9ydGFcclxuICAgIHZhciBjYWxjdWxhZGEgPSBjYXNpbGxlcm8uY2FsY3VsYWRhO1xyXG4gICAgdmFyIGlkID0gYGlkLWRpdi0ke2Nhc2lsbGVyby52YXJfbmFtZXx8Y2FzaWxsZXJvLmNhc2lsbGVyb31gO1xyXG4gICAgdmFyIGlkQWNjaW9uZXMgPSBcImFjY2lvbmVzLVwiK2lkO1xyXG4gICAgY29uc3QgaGFuZGxlQ2xvc2UgPSAoKSA9PiB7XHJcbiAgICAgICAgc2V0T3BlbkNvbmZpcm0oZmFsc2UpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiA8ZGl2IFxyXG4gICAgICAgIGNsYXNzTmFtZT1cImVuY2FiZXphZG9cIiBcclxuICAgICAgICBkZWJlLWxlZXI9e3Byb3BzLmxlZXI/J1NJJzonTk8nfSBcclxuICAgID5cclxuICAgICAgICA8ZGl2IGlkPXtpZH0gY2xhc3NOYW1lPVwiaWQtZGl2XCIgdGl0bGU9e2Ake2Nhc2lsbGVyby5jYXNpbGxlcm99IC0gJHtjYXNpbGxlcm8udmFyX25hbWV9YH1cclxuICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZEFjY2lvbmVzKTtcclxuICAgICAgICAgICAgICAgIGRpdiEuc2V0QXR0cmlidXRlKFwiYWNjaW9uLXZpc2libGVcIiwgKDEtTnVtYmVyKGRpdiEuZ2V0QXR0cmlidXRlKFwiYWNjaW9uLXZpc2libGVcIikpKS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8uIFZlciBxdcOpIGhhY2Vtb3MgY3VhbmRvIHNlIHRvY2EgZWwgSUQgZGUgbGEgcHJlZ3V0bmFcclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9pZF9wcmVndW50YSwge3ByZWd1bnRhOiBjYXNpbGxlcm8uY2FzaWxsZXJvIGFzIElkUHJlZ3VudGEsIGZvclBrfSk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImlkXCI+XHJcbiAgICAgICAgICAgICAgICB7dmVyX2lkfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgeyhjYXNpbGxlcm8udGlwb3Zhcj09XCJzaV9ub1wifHxjYXNpbGxlcm8udGlwb3Zhcj09XCJvcGNpb25lc1wiKT88Q2FtcG8gZGlzYWJsZWQ9e2ZhbHNlfSBwcmVndW50YT17Y2FzaWxsZXJvfSBmb3JQaz17Zm9yUGt9IG1pbmk9e3RydWV9IGhpZGRlbj17IWNvbkNhbXBvT3BjaW9uZXMgJiYgJ3F1aXRhcid9Lz46bnVsbH1cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhY2Npb25lcy1wcmVndW50YVwiIGlkPXtpZEFjY2lvbmVzfSBhY2Npb24tdmlzaWJsZT1cIjBcIj5cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8udmFyX25hbWU/PGRpdj48QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9e1wiYm9ycmFyLXByZWd1bnRhLVwiK2Nhc2lsbGVyby52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICBtaS12YXJpYWJsZT17Y2FzaWxsZXJvLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm90b24tcHJlZ3VudGEtYm9ycmFyXCJcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja0JvcnJhcn1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5EZWxldGVGb3JldmVyLz5cclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPjwvZGl2PjpudWxsfVxyXG4gICAgICAgICAgICAgICAge2Nhc2lsbGVyby52YXJfbmFtZT8obnNfbmM9PjxkaXY+PEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIGlkPXtcIm5zbmMtcHJlZ3VudGEtXCIrY2FzaWxsZXJvLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIG1pLXZhcmlhYmxlPXtjYXNpbGxlcm8udmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3Rvbi1wcmVndW50YS1uc25jXCJcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwge3Jlc3B1ZXN0YTpuc19uYywgdmFyaWFibGU6Y2FzaWxsZXJvLnZhcl9uYW1lIGFzIElkVmFyaWFibGUsIGZvclBrOmZvclBrfSlcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIE5TL05DXHJcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj48L2Rpdj4pKGNhc2lsbGVyby52YWxvcl9uc19uYz8/LTkpOm51bGx9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibm9tYnJlLWRpdlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm5vbWJyZVwiPnticmVha2VhYmxlVGV4dChjYXNpbGxlcm8ubm9tYnJlKX1cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8uZXNwZWNpYWw/Lmdwcz9cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge29wZW5Db25maXJtP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW49e29wZW5Db25maXJtfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cInJlc3BvbnNpdmUtZGlhbG9nLXRpdGxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nVGl0bGUgaWQ9XCJyZXNwb25zaXZlLWRpYWxvZy10aXRsZVwiPlJlZ2lzdHJvIHB1bnRvIEdQUzwvRGlhbG9nVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50VGV4dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlhIGV4aXN0ZSB1biBwdW50byByZWdpc3RyYWRvLCBzaSBjb250aW7DumEgc2UgdmEgYSBzb2JyZXNjcmliaXIsIDxiPnNpIG5vIGVzdMOhIHVuIERNIERFU0NBUlRFIGVsIHB1bnRvPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHtzaWd1aWVudGVWYXJpYWJsZX0gPSBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwge2ZvclBrOnByb3BzLmZvclBrLCB2YXJpYWJsZTpjYXNpbGxlcm8udmFyX25hbWUsIHJlc3B1ZXN0YTpwb3NHUFN9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2lndWllbnRlVmFyaWFibGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUoc2lndWllbnRlVmFyaWFibGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0gY29sb3I9XCJzZWNvbmRhcnlcIiB2YXJpYW50PVwib3V0bGluZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEd1YXJkYXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gb25DbGljaz17aGFuZGxlQ2xvc2V9IGNvbG9yPVwicHJpbWFyeVwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY2FydGFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6bnVsbH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB2YXJpYW50PVwib3V0bGluZWRcIiBzdHlsZT17e21hcmdpbkxlZnQ6JzEwcHgnfX0gb25DbGljaz17KF9ldmVudCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHtyZXNwdWVzdGFzfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQayk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGVja0dQUyA9ICgpID0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFyZXNwdWVzdGFzW2Nhc2lsbGVyby52YXJfbmFtZSFdKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHtzaWd1aWVudGVWYXJpYWJsZX0gPSBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwge2ZvclBrOnByb3BzLmZvclBrLCB2YXJpYWJsZTpjYXNpbGxlcm8udmFyX25hbWUsIHJlc3B1ZXN0YTpwb3NHUFN9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzaWd1aWVudGVWYXJpYWJsZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKHNpZ3VpZW50ZVZhcmlhYmxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRPcGVuQ29uZmlybShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE9wZW5Db25maXJtKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFBvc0dQUyhKU09OLnN0cmluZ2lmeShwb3NpdGlvbikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrR1BTKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQb3NHUFMoZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0dQUygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PjxJQ09OLkxvY2F0aW9uLz48L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA6bnVsbH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIHtjYXNpbGxlcm8uYWNsYXJhY2lvbj9cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWNsYXJhY2lvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8uc2FsdG8gJiYgY2FzaWxsZXJvLnRpcG9jPT0nRklMVFJPJz9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFNhbHRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gcHJlZmlqbz17YnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLmFjbGFyYWNpb24pfS8+XHJcbiAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha2VhYmxlVGV4dChjYXNpbGxlcm8uYWNsYXJhY2lvbilcclxuICAgICAgICAgICAgICAgICAgICB9ICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA6bnVsbH1cclxuICAgICAgICAgICAgPGRpdiBsb3MtbWV0YWRhdG9zPVwic2lcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGVsLW1ldGFkYXRvPVwidmFyaWFibGVcIj57Y2FzaWxsZXJvLnZhcl9uYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8udGlwb3ZhciAmJiBjYXNpbGxlcm8udGlwb3ZhciE9J29wY2lvbmVzJyAmJiBjYXNpbGxlcm8udGlwb3ZhciE9J3NpX25vJz9cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBlbC1tZXRhZGF0bz1cInRpcG92YXJcIj57Y2FzaWxsZXJvLnRpcG92YXJ9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgOm51bGx9XHJcbiAgICAgICAgICAgICAgICB7ICAgLy9AdHMtaWdub3JlIHVuYSBvcGNpw7NuIG3Dumx0aXBsZSBudW5jYSBsbyBhIGEgc2VyLCBubyB0aWVuZSBlbCBjYW1wbywgbm8gaW1wb3J0YVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby5vcHRhdGl2bz88c3BhbiBlbC1tZXRhZGF0bz1cIm9wdGF0aXZhXCI+b3B0YXRpdmE8L3NwYW4+Om51bGxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHtjYWxjdWxhZGE/PHNwYW4gZWwtbWV0YWRhdG89XCJjYWxjdWxhZGFcIj5jYWxjdWxhZGE8L3NwYW4+Om51bGx9XHJcbiAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLmRlc3BsaWVndWVPY3VsdGE/PHNwYW4gZWwtbWV0YWRhdG89XCJvY3VsdGFcIj5vY3VsdGE8L3NwYW4+Om51bGx9XHJcbiAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXI/PHNwYW4gZWwtbWV0YWRhdG89XCJleHByZXNpb25faGFiaWxpdGFyXCI+aGFiaWxpdGE6IHtjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcn08L3NwYW4+Om51bGx9XHJcbiAgICAgICAgICAgICAgICB7ICAgLy9AdHMtaWdub3JlIGFsdHVub3MgY2FzaWxsZXJvcyBubyB0aWVuZW4gZXNwZWNpYWwsIG5vIGltcG9ydGEsIGVzIHNvbG8gcGFyYSBwb25lciBsb3MgbWV0YWRhdG9zXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLmVzcGVjaWFsPy5hdXRvaW5nPzxzcGFuIGVsLW1ldGFkYXRvPVwiZXhwcmVzaW9uX2F1dG9pbmdcIj5hdXRvaW5nOiB7Y2FzaWxsZXJvLmVzcGVjaWFsPy5hdXRvaW5nfTwvc3Bhbj46bnVsbFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBEZXNwbGVnYXJDb25maXJtYXJCb3JyYXJSZXNwdWVzdGEocHJvcHM6e2ZvclBrOkZvclBrLCB2YXJpYWJsZUJvcnJhcjpJZFZhcmlhYmxlfSl7XHJcbiAgICB2YXIgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoISFwcm9wcy52YXJpYWJsZUJvcnJhcilcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IGhhbmRsZUNsb3NlID0gKCkgPT4ge1xyXG4gICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNPTkZJUk1BUl9CT1JSQVJfUkVTUFVFU1RBKHtmb3JQazpwcm9wcy5mb3JQaywgdmFyaWFibGU6bnVsbH0pKTtcclxuICAgICAgICBzZXRPcGVuKGZhbHNlKTtcclxuICAgIH1cclxuICAgIHJldHVybiA8UG9wb3ZlclxyXG4gICAgICAgICAgICBpZD17XCJwb3BvdmVyLWNvbmZpcm1hclwifVxyXG4gICAgICAgICAgICBvcGVuPXtvcGVufVxyXG4gICAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZX1cclxuICAgICAgICAgICAgYW5jaG9yT3JpZ2luPXt7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbDogJ2JvdHRvbScsXHJcbiAgICAgICAgICAgICAgICBob3Jpem9udGFsOiAnY2VudGVyJyxcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luPXt7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbDogJ3RvcCcsXHJcbiAgICAgICAgICAgICAgICBob3Jpem9udGFsOiAnbGVmdCcsXHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPiAgIFxyXG4gICAgICAgICAgICA8VHlwb2dyYXBoeT5MYSBwcmVndW50YSB0aWVuZSByZWdpc3RyYWRhIHVuYSByZXNwdWVzdGEgcXVlIG5vIGZ1ZSBkZXRlY3RhZGEgY29tbyBlcnLDs25lYTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb25maXJtYS1ib3RvbmVzXCI+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwic2Vjb25kYXJ5XCIgdmFyaWFudD1cIm91dGxpbmVkXCIgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICBpZihwcm9wcy52YXJpYWJsZUJvcnJhcil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7Zm9yUGs6cHJvcHMuZm9yUGssIHZhcmlhYmxlOnByb3BzLnZhcmlhYmxlQm9ycmFyLCByZXNwdWVzdGE6bnVsbH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB9fT5ib3JyYXIgcmVzcHVlc3RhPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIG9uQ2xpY2s9e2hhbmRsZUNsb3NlfT52b2x2ZXIgc2luIGJvcnJhcjwvQnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L1BvcG92ZXI+O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhck51ZXN0cmFMb25naXR1ZChsb25naXR1ZDpzdHJpbmcgfG51bGwpe1xyXG4gICAgcmV0dXJuIGxvbmdpdHVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKHNpZ3VpZW50ZVZhcmlhYmxlOklkVmFyaWFibGV8SWRGaW4pe1xyXG4gICAgZGViZVNhbHRhciA9IGZhbHNlO1xyXG4gICAgdmFyIHt0b3AsIGVuZm9jYWRvLCBlbGVtZW50b0lucHV0VmFyaWFibGV9ID0gY2FsY3VsYXJFbGVtZW50b0VuZm9jYWRvKHNpZ3VpZW50ZVZhcmlhYmxlKTtcclxuICAgIGlmKHRvcCAhPSBudWxsICYmIHRvcD4wICYmICghZW5mb2NhZG8gfHwgXCJzYWx0YSBzaWVtcHJlXCIpKXtcclxuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oe3RvcCwgbGVmdDowLCBiZWhhdmlvcjonc21vb3RoJ30pO1xyXG4gICAgfVxyXG4gICAgZWxlbWVudG9JbnB1dFZhcmlhYmxlPy5mb2N1cygpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBDYW1wbyhwcm9wczp7ZGlzYWJsZWQ6Ym9vbGVhbiwgcHJlZ3VudGE6UHJlZ3VudGFTaW1wbGV8UHJlZ3VudGFDb25PcGNpb25lc3xQcmVndW50YUNvblNpTm98T3BjaW9uTXVsdGlwbGUsIGZvclBrOkZvclBrLCBtaW5pPzpib29sZWFuLCBoaWRkZW4/OmJvb2xlYW58J3F1aXRhcid9KXtcclxuICAgIHZhciB7cHJlZ3VudGEsIGRpc2FibGVkLCBtaW5pIH0gPSBwcm9wcztcclxuICAgIHZhciB7c2FsdG9BdXRvbWF0aWNvLCBjb25DYW1wb09wY2lvbmVzfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT5zdGF0ZS5vcGNpb25lcyk7XHJcbiAgICBjb25zdCBsb25naXR1ZCA9IG1pbmkgPyBwcmVndW50YS5jYXNpbGxlcm9zLnJlZHVjZSgoYWN1bSwgbyk9Pk1hdGgubWF4KG8uY2FzaWxsZXJvLnRvU3RyaW5nKCkubGVuZ3RoLCBhY3VtKSwgMCkgOiBcclxuICAgICAgICAvLyBAdHMtaWdub3JlIG1pbmkgZXMgcGFyYSBsb3Mgb3Ryb3NcclxuICAgICAgICBwcmVndW50YS5sb25naXR1ZDtcclxuICAgIC8vIHZhciBbdmFsb3IsIHNldFZhbG9yXSA9IHVzZVN0YXRlKHByb3BzLnZhbG9yKTtcclxuICAgIHZhciBbZWRpdGFuZG8sIHNldEVkaXRhbmRvXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIC8vIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAvLyAgICAgc2V0VmFsb3IocHJvcHMudmFsb3IpXHJcbiAgICAvLyB9LCBbcHJvcHMudmFsb3JdKTtcclxuICAgIGNvbnN0IGlucHV0UHJvcHMgPSB7XHJcbiAgICAgICAgbWF4TGVuZ3RoOiBsb25naXR1ZCxcclxuICAgIH07XHJcbiAgICBjb25zdCBvbkNoYW5nZT0obnVldm9WYWxvcjpWYWxvcnx0eXBlb2YgTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTyk9PntcclxuICAgICAgICB2YXIge3NpZ3VpZW50ZVZhcmlhYmxlfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7Zm9yUGs6cHJvcHMuZm9yUGssIHZhcmlhYmxlOnByZWd1bnRhLnZhcl9uYW1lLCByZXNwdWVzdGE6bnVldm9WYWxvcn0pO1xyXG4gICAgICAgIGlmKHNpZ3VpZW50ZVZhcmlhYmxlICYmIGRlYmVTYWx0YXIpe1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgYWxndW5vcyBjYXNpbGxlcm9zIHRpZW5lbiBlc3BlY2lhbCB5IG90cm9zIG5vXHJcbiAgICAgICAgICAgIChwcmVndW50YS5lc3BlY2lhbD8ubm9TY3JvbGwgPT0gdHJ1ZSk/bnVsbDplbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKHByZWd1bnRhLmVzcGVjaWFsPy5zY3JvbGxUbyA/PyBzaWd1aWVudGVWYXJpYWJsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHZhciBudWVzdHJhTG9uZ2l0dWQgPSBjYWxjdWxhck51ZXN0cmFMb25naXR1ZChsb25naXR1ZClcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNhbXBvXCIgbnVlc3RyYS1sb25naXR1ZD17bnVlc3RyYUxvbmdpdHVkfSBzdHlsZT17cHJvcHMuaGlkZGVuPT0ncXVpdGFyJz97ZGlzcGxheTonbm9uZSd9OnByb3BzLmhpZGRlbj97dmlzaWJpbGl0eTonaGlkZGVuJ306dW5kZWZpbmVkfT5cclxuICAgICAgICB7bWluaT9udWxsOjxCb3RvbkJvcnJhclxyXG4gICAgICAgICAgICBpZD17YGJvcnJhci1hYmllcnRhLSR7cHJlZ3VudGEudmFyX25hbWV9YH1cclxuICAgICAgICAgICAgdmFyaWFibGU9e3ByZWd1bnRhLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgLz59XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbnB1dC1jYW1wb1wiPlxyXG4gICAgICAgICAgICA8VGV4dEZpZWxkIFxyXG4gICAgICAgICAgICAgICAgaWQ9e2B2YXItJHtwcmVndW50YS52YXJfbmFtZX1gfVxyXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIGFsZ3Vub3MgY2FzaWxsZXJvcyB0aWVuZW4gZXNwZWNpYWwgeSBvdHJvcyBub1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkIHx8IHByZWd1bnRhLmVzcGVjaWFsPy5ncHN9XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ2YXJpYWJsZVwiIFxyXG4gICAgICAgICAgICAgICAgLy92YXItbGVuZ3RoPXtwcmVndW50YS5sb25naXR1ZH0gXHJcbiAgICAgICAgICAgICAgICBmdWxsV2lkdGg9e3RydWV9XHJcbiAgICAgICAgICAgICAgICBpbnB1dFByb3BzPXtpbnB1dFByb3BzfVxyXG4gICAgICAgICAgICAgICAgdHlwZT17cHJlZ3VudGEuZGVzcGxpZWd1ZVRpcG9JbnB1dD8/YWRhcHRhclRpcG9WYXJDYXNpbGxlcm8ocHJlZ3VudGEudGlwb3Zhcil9XHJcbiAgICAgICAgICAgICAgICBvbktleURvd249eyhldmVudDpSZWFjdC5LZXlib2FyZEV2ZW50KT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBlc0VudGVyID0gKGV2ZW50LmtleSA9PSAnRW50ZXInIHx8IGV2ZW50LmtleUNvZGUgPT0gMTMpXHJcbiAgICAgICAgICAgICAgICAgICAgZGViZVNhbHRhciA9IGVzRW50ZXIgJiYgKHNhbHRvQXV0b21hdGljbyB8fCBjb25DYW1wb09wY2lvbmVzKTtcclxuICAgICAgICAgICAgICAgICAgICBpZihlc0VudGVyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0LmJsdXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICBvbkZvY3VzPXsoX2V2ZW50KT0+c2V0RWRpdGFuZG8odHJ1ZSl9XHJcbiAgICAgICAgICAgICAgICBvbkJsdXI9eyhldmVudCwgdmFsb3IpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZXZlbnQ/LnJlbGF0ZWRUYXJnZXQ/LmdldEF0dHJpYnV0ZSgnYm90b24tY29uZmlybWFyJykpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWJlU2FsdGFyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2UodmFsb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEVkaXRhbmRvKGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB7ZGlzYWJsZWQgfHwgcHJlZ3VudGEuZXNwZWNpYWw/LmdwcyB8fCBtaW5pP251bGw6XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm90b24tY29uZmlybWFyLWNhbXBvXCI+XHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9e2VkaXRhbmRvP1wiY29udGFpbmVkXCI6J291dGxpbmVkJ30gc2l6ZT1cInNtYWxsXCIgY29sb3I9e2VkaXRhbmRvPydwcmltYXJ5JzonZGVmYXVsdCd9XHJcbiAgICAgICAgICAgICAgICAgICAgYm90b24tY29uZmlybWFyPXtwcmVndW50YS52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICB0YWJJbmRleD17LTF9XHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2UoTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRhbmRvKGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA+PElDT04uQ2hlY2svPjwvQnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuaW50ZXJmYWNlIEljYXNpbGxlcm9Db25PcGNpb25lc3tcclxuICAgIHZhcl9uYW1lOklkVmFyaWFibGUsXHJcbiAgICBjYXNpbGxlcm9zOk9wY2lvbltdXHJcbn1cclxuXHJcbmZ1bmN0aW9uIE9wY2lvbmVzRGVzcGxpZWd1ZShcclxuICAgIHtjYXNpbGxlcm9Db25PcGNpb25lcywgZm9yUGssICBsZWVyLCBkZXNwbGllZ3VlQ29udGVuaWRvfTpcclxuICAgIHtjYXNpbGxlcm9Db25PcGNpb25lczpJY2FzaWxsZXJvQ29uT3BjaW9uZXMsIGZvclBrOkZvclBrLCBsZWVyOmJvb2xlYW4sIGRlc3BsaWVndWVDb250ZW5pZG86J3ZlcnRpY2FsJ3wnaG9yaXpvbnRhbCd9XHJcbil7XHJcbiAgICBjb25zdCBkZXNwbGVnYXJPdHJvcyA9IChvcGNpb246T3BjaW9uLCBzb2xvUGFyYURlc3BsaWVndWU6J3ZlcnRpY2FsJ3wnaG9yaXpvbnRhbCd8bnVsbCkgPT4gb3BjaW9uLmNhc2lsbGVyb3MubWFwKChzdWJQcmVndW50YTpQcmVndW50YSk9PihcclxuICAgICAgICBzb2xvUGFyYURlc3BsaWVndWUgPT0gbnVsbCB8fCBzb2xvUGFyYURlc3BsaWVndWUgPT0gc3ViUHJlZ3VudGEuZGVzcGxpZWd1ZUNvbnRlbmlkbyA/XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvdHJvcy1lc3BlY2lmaWNhclwiIGtleT17c3ViUHJlZ3VudGEuaWRfY2FzaWxsZXJvfT5cclxuICAgICAgICAgICAgPFByZWd1bnRhRGVzcGxpZWd1ZSBcclxuICAgICAgICAgICAgICAgIHByZWd1bnRhPXtzdWJQcmVndW50YX0gXHJcbiAgICAgICAgICAgICAgICBmb3JQaz17Zm9yUGt9IFxyXG4gICAgICAgICAgICAgICAgZGVzcGxpZWd1ZUVuY2FiZXphZG89J3N1cGVyaW9yJ1xyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PjpudWxsXHJcbiAgICApKVxyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiY29udGVuaWRvXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwib3BjaW9uZXNcIiBkZXNwbGllZ3VlLWNvbnRlbmlkbz17ZGVzcGxpZWd1ZUNvbnRlbmlkbz8/J3ZlcnRpY2FsJ30+XHJcbiAgICAgICAgICAgIHtjYXNpbGxlcm9Db25PcGNpb25lcy5jYXNpbGxlcm9zLm1hcCgob3BjaW9uOk9wY2lvbiwgaTpudW1iZXIpPT5cclxuICAgICAgICAgICAgICAgIDxHcmlkIGtleT17b3BjaW9uLmlkX2Nhc2lsbGVyb30gaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIG9jdWx0YXItc2FsdGVhZGE9e29wY2lvbi5kZXNwbGllZ3VlT2N1bHRhPyhvcGNpb24uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz8nSU5IQUJJTElUQVInOidTSScpOidOTyd9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPE9wY2lvbkRlc3BsaWVndWUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVybz17b3BjaW9ufSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU9e2Nhc2lsbGVyb0Nvbk9wY2lvbmVzLnZhcl9uYW1lfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsb3JPcGNpb249e29wY2lvbi5jYXNpbGxlcm99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtmb3JQa30gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZXI9e2xlZXJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbkJvdG9uQm9ycmFyPXtpPT0wIHx8IGRlc3BsaWVndWVDb250ZW5pZG8hPSdob3Jpem9udGFsJ31cclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIHtkZXNwbGllZ3VlQ29udGVuaWRvPT0naG9yaXpvbnRhbCc/bnVsbDpkZXNwbGVnYXJPdHJvcyhvcGNpb24sbnVsbCl9XHJcbiAgICAgICAgICAgICAgICA8L0dyaWQ+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAge2Rlc3BsaWVndWVDb250ZW5pZG89PSdob3Jpem9udGFsJz9jYXNpbGxlcm9Db25PcGNpb25lcy5jYXNpbGxlcm9zLm1hcCgob3BjaW9uOk9wY2lvbik9PlxyXG4gICAgICAgICAgICBkZXNwbGVnYXJPdHJvcyhvcGNpb24sbnVsbClcclxuICAgICAgICApOm51bGx9XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuY29uc3Qgbm9tYnJlQ2FzaWxsZXJvPXtcclxuICAgIEY6ICdmb3JtdWxhcmlvJyxcclxuICAgIEI6ICdibG9xdWUnLFxyXG4gICAgUDogJ3ByZWd1bnRhJyxcclxuICAgIENQOiAnY29uanVudG9wcmVndW50YXMnLFxyXG4gICAgTzogJ29wY2lvbicsXHJcbiAgICBPTTogJ211bHRpcGxlJyxcclxuICAgIEZJTFRSTzogJ2ZpbHRybycsXHJcbiAgICBDT05TOiAnY29uc2lzdGVuY2lhJyxcclxuICAgIEJGOiAnYm90b25mb3JtdWxhcmlvJyxcclxuICAgIFRFWFRPOiAnYWNsYXJhY2lvbnN1cGVyaW9yJyxcclxufVxyXG5cclxuZnVuY3Rpb24gRGVzcGxlZ2FyQ2FzaWxsZXJvKHByb3BzOntcclxuICAgIGNhc2lsbGVybzpQcmVndW50YXxCbG9xdWV8RmlsdHJvfENvbmp1bnRvUHJlZ3VudGFzfEJvdG9uRm9ybXVsYXJpb3xDb25zaXN0ZW5jaWF8T3BjaW9uTXVsdGlwbGV8VGV4dG8sXHJcbiAgICBpZD86c3RyaW5nLFxyXG4gICAgc3R5bGU/OlJlYWN0LkNTU1Byb3BlcnRpZXMsXHJcbiAgICBkZXNwbGllZ3VlRW5jYWJlemFkbz86J2xhdGVyYWwnfCdzdXBlcmlvcidcclxuICAgIGNoaWxkcmVuOlJlYWN0LlJlYWN0Tm9kZXxSZWFjdC5SZWFjdE5vZGVbXSxcclxuICAgIFwib2N1bHRhci1zYWx0ZWFkYVwiPzonU0knfCdOTyd8J0lOSEFCSUxJVEFSJ3x1bmRlZmluZWRcclxufSl7XHJcbiAgICByZXR1cm4gPGRpdiBcclxuICAgICAgICBrZXk9e2Ake3Byb3BzLmNhc2lsbGVyby50aXBvY30tJHtwcm9wcy5pZHx8cHJvcHMuY2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gfVxyXG4gICAgICAgIGNsYXNzTmFtZT17YGNhc2lsbGVybyAke25vbWJyZUNhc2lsbGVyb1twcm9wcy5jYXNpbGxlcm8udGlwb2NdfWB9XHJcbiAgICAgICAgaWQ9e3Byb3BzLmlkfVxyXG4gICAgICAgIHN0eWxlPXtwcm9wcy5zdHlsZX1cclxuICAgICAgICBkZXNwbGllZ3VlLWVuY2FiZXphZG89e3Byb3BzLmNhc2lsbGVyby5kZXNwbGllZ3VlRW5jYWJlemFkbz8/cHJvcHMuZGVzcGxpZWd1ZUVuY2FiZXphZG8/PydzdXBlcmlvcid9XHJcbiAgICAgICAgb2N1bHRhci1zYWx0ZWFkYT17cHJvcHNbXCJvY3VsdGFyLXNhbHRlYWRhXCJdfVxyXG4gICAgPntwcm9wcy5jaGlsZHJlbn08L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gUHJlZ3VudGFEZXNwbGllZ3VlKHByb3BzOntcclxuICAgIHByZWd1bnRhOlByZWd1bnRhLCBcclxuICAgIGZvclBrOkZvclBrLCBcclxuICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvOidsYXRlcmFsJ3wnc3VwZXJpb3InXHJcbn0pe1xyXG4gICAgdmFyIHtwcmVndW50YX0gPSBwcm9wcztcclxuICAgIGNvbnN0IGRpc3BhdGNoPXVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgZXN0YWRvOkVzdGFkb1ZhcmlhYmxlO1xyXG4gICAgdmFyIGlkID0gYHByZWd1bnRhLSR7cHJlZ3VudGEuaWRfY2FzaWxsZXJvfWBcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZCwgXHJcbiAgICAgICAgZGlyZWN0OnRydWUsIFxyXG4gICAgICAgIGZ1bjogcmVnaXN0cmFkb3JEZVZhcmlhYmxlKHByZWd1bnRhKVxyXG4gICAgfSlcclxuICAgIHZhciBzdHlsZTogQ1NTUHJvcGVydGllcyA9IHt9XHJcbiAgICBpZihwcmVndW50YS5kZXNwbGllZ3VlID09ICdncmlkJyl7XHJcbiAgICAgICAgc3R5bGUuZGlzcGxheSA9ICdncmlkJztcclxuICAgICAgICBzdHlsZS5ncmlkVGVtcGxhdGVDb2x1bW5zID0gJ3JlcGVhdCgzLDFmciknO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm9cclxuICAgICAgICBpZD17aWR9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtwcmVndW50YX1cclxuICAgICAgICBzdHlsZT17c3R5bGV9XHJcbiAgICAgICAgbnVlc3Ryby10aXBvdmFyPXtwcmVndW50YS50aXBvdmFyfHxcIm11bHRpcGxlXCJ9IFxyXG4gICAgICAgIG9jdWx0YXItc2FsdGVhZGE9e3ByZWd1bnRhLmRlc3BsaWVndWVPY3VsdGE/KHByZWd1bnRhLmV4cHJlc2lvbl9oYWJpbGl0YXJfanM/J0lOSEFCSUxJVEFSJzonU0knKTonTk8nfVxyXG4gICAgICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvPXtwcm9wcy5kZXNwbGllZ3VlRW5jYWJlemFkb31cclxuXHJcbiAgICA+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIFxyXG4gICAgICAgICAgICBjYXNpbGxlcm89e3ByZWd1bnRhfSBcclxuICAgICAgICAgICAgbGVlcj17cHJlZ3VudGEubGVlciE9PWZhbHNlfSAgXHJcbiAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAvPlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGVuaWRvXCI+e1xyXG4gICAgICAgICAgICBwcmVndW50YS50aXBvdmFyPT1cInNpX25vXCI/PEdyaWQgY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPFNpTm9EZXNwbGllZ3VlIFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyb0Nvbk9wY2lvbmVzPXtwcmVndW50YX0gXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfSBcclxuICAgICAgICAgICAgICAgICAgICBkZXNwbGllZ3VlQ29udGVuaWRvPXtwcm9wcy5wcmVndW50YS5kZXNwbGllZ3VlQ29udGVuaWRvPz8ndmVydGljYWwnfVxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9HcmlkPjpcclxuICAgICAgICAgICAgcHJlZ3VudGEudGlwb3Zhcj09XCJvcGNpb25lc1wiID9cclxuICAgICAgICAgICAgICAgIDxPcGNpb25lc0Rlc3BsaWVndWUgXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e3ByZWd1bnRhfSBcclxuICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9IFxyXG4gICAgICAgICAgICAgICAgICAgIGxlZXI9eyEhcHJlZ3VudGEubGVlcn1cclxuICAgICAgICAgICAgICAgICAgICBkZXNwbGllZ3VlQ29udGVuaWRvPXtwcmVndW50YS5kZXNwbGllZ3VlQ29udGVuaWRvPz8ndmVydGljYWwnfVxyXG4gICAgICAgICAgICAgICAgLz46XHJcbiAgICAgICAgICAgIHByZWd1bnRhLnRpcG92YXI9PW51bGw/XHJcbiAgICAgICAgICAgICAgICAocHJlZ3VudGEuY2FzaWxsZXJvcyBhcyAoT3BjaW9uTXVsdGlwbGV8Q29uc2lzdGVuY2lhKVtdKS5tYXAoKG9wY2lvbk11bHRpcGxlKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgb3BjaW9uTXVsdGlwbGUudGlwb2M9PSdPTSc/ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8T3BjaW9uTXVsdGlwbGVEZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e29wY2lvbk11bHRpcGxlLmlkX2Nhc2lsbGVyb30gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNpb25NPXtvcGNpb25NdWx0aXBsZX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDogLy9sYXMgY29uc2lzdGVuY2lhcyBwdWVkZW4gc2VyIGhlcm1hbmFzIGRlIE9NXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxDb25zaXN0ZW5jaWFEZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e29wY2lvbk11bHRpcGxlLmlkX2Nhc2lsbGVyb31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVybz17b3BjaW9uTXVsdGlwbGV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+ICAgIFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICgocHJlZ3VudGFTaW1wbGU6UHJlZ3VudGFTaW1wbGUpPT5cclxuICAgICAgICAgICAgICAgIDxDYW1wb1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtwcmVndW50YVNpbXBsZS5jYWxjdWxhZGE/dHJ1ZTpmYWxzZX1cclxuICAgICAgICAgICAgICAgICAgICBwcmVndW50YT17cHJlZ3VudGFTaW1wbGV9XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgKShwcmVndW50YSlcclxuICAgICAgICB9PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwaWUtcHJlZ3VudGFcIj5cclxuICAgICAgICAgICAgPFNhbHRvRGVzcGxpZWd1ZSBcclxuICAgICAgICAgICAgICAgIGNhc2lsbGVybz17cHJlZ3VudGF9XHJcbiAgICAgICAgICAgICAgICBwcmVmaWpvPXtwcmVndW50YS50aXBvdmFyPT1cIm9wY2lvbmVzXCI/KFxyXG4gICAgICAgICAgICAgICAgICAgIHByZWd1bnRhLmNhc2lsbGVyb3Muc29tZShvcGNpb249Pm9wY2lvbi5zYWx0byk/XCJyZXN0byBkZSBsYXMgb3BjaW9uZXNcIjpcInRvZGFzIGxhcyBvcGNpb25lc1wiXHJcbiAgICAgICAgICAgICAgICApOlwiXCJ9XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxudmFyIGNhbGN1bGFyRGlzYWJsZWRCRkFncmVnYXJMaXN0byA9IChcclxuICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86Q29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW98bnVsbCwgXHJcbiAgICBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW86IENvbmZpZ3VyYWNpb25IYWJpbGl0YXJCb3RvbkZvcm11bGFyaW98bnVsbCxcclxuICAgIGZvcm11bGFyaW86SWRGb3JtdWxhcmlvXHJcbik9PntcclxuICAgIGlmKGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyAmJiBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bZm9ybXVsYXJpb10pe1xyXG4gICAgICAgIHJldHVybiAhaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dLmhhYmlsaXRhcl9hZ3JlZ2FyX2xpc3RvXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICByZXR1cm4gISEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJiBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvKVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBib3RvbmVzRGVsRm9ybXVsYXJpbyhyOlJlc3B1ZXN0YXMsIHVuaWRhZF9hbmFsaXNpczpJZFVuaWRhZEFuYWxpc2lzLCBlc3RydWN0dXJhOkVzdHJ1Y3R1cmEsIGZvclBrUGFkcmU6Rm9yUGssIGZlZWRiYWNrQWxsOntbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPn0pOkh0bWxUYWc8SFRNTERpdkVsZW1lbnQ+e1xyXG4gICAgdmFyIGZvcm1zVml2aWVuZGEgPSBnZXRGb3JtdWxhcmlvc0ZvclZhbHVlUGtSYWl6KGZvclBrUGFkcmVbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSk7XHJcbiAgICB2YXIgdWFEZWYgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VuaWRhZF9hbmFsaXNpc107XHJcbiAgICB2YXIgYXJyYXlFc3RydWN0dXJhRm9ybXVsYXJpb3MgPSAobGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpKS5hcnJheSgpO1xyXG4gICAgdmFyIHggPSBsaWtlQXIodWFEZWYuaGlqYXMpLmZpbHRlcih1YUhpamE9PlxyXG4gICAgICAgICAgICAvL2Rlc2NhcnRvIHVhcyBxdWUgbm8gZXN0w6luIGVuIG5pbmd1biBmb3JtXHJcbiAgICAgICAgICAgIGFycmF5RXN0cnVjdHVyYUZvcm11bGFyaW9zLmZpbHRlcigoaW5mb0Zvcm11bGFyaW8pPT5cclxuICAgICAgICAgICAgICAgIGluZm9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhSGlqYT8udW5pZGFkX2FuYWxpc2lzICYmIGZvcm1zVml2aWVuZGEuaW5jbHVkZXMoaW5mb0Zvcm11bGFyaW8uY2FzaWxsZXJvcy5pZF9jYXNpbGxlcm8gYXMgSWRGb3JtdWxhcmlvKVxyXG4gICAgICAgICAgICApLmxlbmd0aCA+IDBcclxuICAgICAgICApLm1hcCh1YUhpamE9PihcclxuICAgICAgICB1YUhpamEgPT0gbnVsbCA/IG51bGwgOlxyXG4gICAgICAgIGh0bWwuZGl2KHtjbGFzczondWEtaGlqYXMnfSxbXHJcbiAgICAgICAgICAgIGh0bWwuZGl2KHVhSGlqYS51bmlkYWRfYW5hbGlzaXMpLFxyXG4gICAgICAgICAgICBodG1sLmRpdihcclxuICAgICAgICAgICAgICAgIGxpa2VBcihyW3VhSGlqYS51bmlkYWRfYW5hbGlzaXNdfHxbXSkubWFwKChyZXNwdWVzdGFzSGlqYSwgaSk9PntcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0gTnVtYmVyKGkpKzFcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZm9yUGtIaWphUGFyY2lhbCA9IHsuLi5mb3JQa1BhZHJlLCBbdWFIaWphLnBrX2FncmVnYWRhXTogbnVtfTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29uZmlnU29ydGVvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvP2VzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtQYWRyZVtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKV06bnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gPSBlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbC5kaXYoe2NsYXNzOidudW1lcmFkb3ItdWEnfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7Y2xhc3M6J2JvdG9uZXMtdWEnfSxbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7Y2xhc3M6J251bWVyby11YSd9LG51bS50b1N0cmluZygpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmb3JtRGVmPT5mb3JtRGVmLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhSGlqYS51bmlkYWRfYW5hbGlzaXMgJiYgZm9ybXNWaXZpZW5kYS5pbmNsdWRlcyhmb3JtRGVmLmNhc2lsbGVyb3MuaWRfY2FzaWxsZXJvIGFzIElkRm9ybXVsYXJpbykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChfZm9ybURlZiwgZm9ybXVsYXJpbyk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9yUGsgPSB7Li4uZm9yUGtIaWphUGFyY2lhbCwgZm9ybXVsYXJpb307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZlZWRiYWNrRm9ybSA9IGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhmb3JQayldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmZWVkYmFja0Zvcm0gPyBodG1sLmRpdih7fSxbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0bWwuYnV0dG9uKCh1YUhpamEhKS5wa19hZ3JlZ2FkYStcIiBvazogXCIrKE51bWJlcihpKSsxKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uRm9ybXVsYXJpb0NvblJlc3VtZW4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGssIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiB0cnVlIHx8IGNhbGN1bGFyQWN0dWFsQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgbnVtLCBudWxsLCBmb3JtdWxhcmlvLCByKSwgLy9SRVZJU0FSIHRydWUgcGFyYSBxdWUgbm8gc2UgZ3Jpc2VuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOmZhbHNlLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogY2FsY3VsYXJEaXNhYmxlZEJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbywgbnVtLCBmb3JtdWxhcmlvLCByKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWRiYWNrRm9ybSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Rlc3BsaWVndWVPY3VsdGE6ZmFsc2UsIGV4cHJlc2lvbl9oYWJpbGl0YXJfanM6JycsIG5vbWJyZTpmb3JtdWxhcmlvLCBhY2xhcmFjaW9uOm51bGwsIHNhbHRvOmZvcm11bGFyaW99LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGtQYWRyZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYm90b24taXItcmVzdW1lbi1mb3JtdWxhcmlvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2Zvcm11bGFyaW9dLmNhc2lsbGVyb3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuYXJyYXkoKS5tYXAoeD0+eCA9PSBudWxsID8gbnVsbCA6IHgpLnJldmVyc2UoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLGJvdG9uZXNEZWxGb3JtdWxhcmlvKHJlc3B1ZXN0YXNIaWphLCB1YUhpamEudW5pZGFkX2FuYWxpc2lzLCBlc3RydWN0dXJhLCBmb3JQa0hpamFQYXJjaWFsLCBmZWVkYmFja0FsbClcclxuICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgfSkuYXJyYXkoKS5tYXAoeD0+eCA9PSBudWxsID8gbnVsbCA6IHgpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICBdKVxyXG4gICAgKSkuYXJyYXkoKS5tYXAoeD0+eCA9PSBudWxsID8gbnVsbCA6IHgpO1xyXG4gICAgcmV0dXJuIGh0bWwuZGl2KC8qe3N0eWxlOidkaXNwbGF5OmZsZXg7IGZsZXgtZGlyZWN0aW9uOnJvdyd9LCoveCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFRleHRvRGVzcGxpZWd1ZShwcm9wczp7Y2FzaWxsZXJvOlRleHRvLCBmb3JQazpGb3JQa30pe1xyXG4gICAgdmFyIHtjYXNpbGxlcm8sIGZvclBrfSA9IHByb3BzO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanM/Z2V0RnVuY2lvbkhhYmlsaXRhcihjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyk6KCk9PnRydWU7XHJcbiAgICB2YXIge21vZG9EZXNwbGllZ3VlfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgdmFyIGlkID0gYHRleHRvLSR7Y2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe2lkLCBzdHlsZTonZGlzcGxheScsIGZ1bjoocjpSZXNwdWVzdGFzKT0+aGFiaWxpdGFkb3IocikgfHwgbW9kb0Rlc3BsaWVndWU9PSdtZXRhZGF0b3MnPydibG9jayc6J25vbmUnfSlcclxuICAgIHZhciBlc1Jlc3VtZW5Gb3JtdWxhcmlvID0gY2FzaWxsZXJvLmNhc2lsbGVybz09J1Jlc0ZvcicgYXMgSWRDYXNpbGxlcm87IC8vIFRPRE86IENhbWJpYSBlc3RvIHF1ZSBlc3TDoSBqYXJjb2RlYWRvLlxyXG4gICAgaWYoZXNSZXN1bWVuRm9ybXVsYXJpbyl7XHJcbiAgICAgICAgcmVnaXN0cmFyRWxlbWVudG8oe2lkLCBkaXJlY3Q6dHJ1ZSwgXHJcbiAgICAgICAgICAgIGZ1bjooXHJcbiAgICAgICAgICAgICAgICByOlJlc3B1ZXN0YXMsIFxyXG4gICAgICAgICAgICAgICAgX2ZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudG86SFRNTERpdkVsZW1lbnQsIFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tBbGw6e1tmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLFZhbG9yLCBJZEZpbj59LCBcclxuICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmE6RXN0cnVjdHVyYVxyXG4gICAgICAgICAgICApPT57XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50by5zdHlsZS5kaXNwbGF5PScnO1xyXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIGxhcyByZXNwdWVzdGFzIHNvbiByZXNwdWVzdGFzUmFpeiBwb3JxdWUgUmVzRm9yIGVzdMOhIGVuIGVsIGZvcm0gcHBhbFxyXG4gICAgICAgICAgICAgICAgaWYoclsncmVzdW1lbkVzdGFkbyddIGFzIFJlc3VtZW5Fc3RhZG8gPT0gJ3ZhY2lvJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8udGV4dENvbnRlbnQgPSBcInJlbGV2YW1pZW50byBzaW4gZW1wZXphclwiO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8udGV4dENvbnRlbnQgPSBcInJlbGV2YW1pZW50byBlbXBlemFkb1wiO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB7dW5pZGFkX2FuYWxpc2lzfSA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcztcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50by5pbm5lckhUTUw9XCJcIjtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50by5hcHBlbmRDaGlsZChib3RvbmVzRGVsRm9ybXVsYXJpbyhyLCB1bmlkYWRfYW5hbGlzaXMsIGVzdHJ1Y3R1cmEsIGZvclBrLCBmZWVkYmFja0FsbCkuY3JlYXRlKCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHZhciBpciA9IChkZWZCb3RvbjpEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyKT0+e1xyXG4gICAgICAgIC8vIHZhciBudWV2YUZvclBrPXsuLi5mb3JQaywgZm9ybXVsYXJpbzppZEZvcm11bGFyaW9EZXN0aW5vfTtcclxuICAgICAgICAvLyBudWV2YUZvclBrW251ZXZvQ2FtcG9Qa10gPSBkZWZCb3Rvbi5udW1cclxuICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWJyaXJfZm9ybXVsYXJpbyx7Zm9yUGs6ZGVmQm90b24uZm9yUGt9KTtcclxuICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oe2ZvclBrOmRlZkJvdG9uLmZvclBrLCBhcGlsYXJWdWVsdGE6dHJ1ZX0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIFxyXG4gICAgICAgIGlkPXtgJHtpZH0tZXh0ZXJub2B9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtjYXNpbGxlcm99XHJcbiAgICA+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfSBsZWVyPXtmYWxzZX0gZm9yUGs9e2ZvclBrfS8+XHJcbiAgICAgICAgPGRpdiBpZD17aWR9IHN0eWxlPXt7ZGlzcGxheTonbm9uZSd9fT48L2Rpdj5cclxuICAgICAgICB7ZXNSZXN1bWVuRm9ybXVsYXJpbz9cclxuICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cInNwZWNpYWwtYnV0dG9uXCIgaWQ9XCJib3Rvbi1pci1yZXN1bWVuLWZvcm11bGFyaW9cIiBzdHlsZT17e2Rpc3BsYXk6J25vbmUnfX1cclxuICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KT0+e1xyXG4gICAgICAgICAgICAgICAgaXIoSlNPTi5wYXJzZSgoZXZlbnQudGFyZ2V0ISBhcyB1bmtub3duIGFzIEhUTUxCdXR0b25FbGVtZW50KS5nZXRBdHRyaWJ1dGUoJ2RlZi1idXR0b24nKSEpKVxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgID5pciAoaW50ZXJubyk8L0J1dHRvbj5cclxuICAgICAgICA6bnVsbH1cclxuXHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxuZnVuY3Rpb24gRmlsdHJvRGVzcGxpZWd1ZShwcm9wczp7ZmlsdHJvOkZpbHRybywgZm9yUGs6Rm9yUGt9KXtcclxuICAgIHZhciB7ZmlsdHJvfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gY2FzaWxsZXJvPXtmaWx0cm99PlxyXG4gICAgICAgIDxEZXNwbGllZ3VlRW5jYWJlemFkbyBjYXNpbGxlcm89e2ZpbHRyb30vPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENvbnNpc3RlbmNpYURlc3BsaWVndWUocHJvcHM6e2Nhc2lsbGVybzpDb25zaXN0ZW5jaWEsIGZvclBrOkZvclBrfSl7XHJcbiAgICB2YXIge2Nhc2lsbGVybywgZm9yUGt9ID0gcHJvcHM7XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz9nZXRGdW5jaW9uSGFiaWxpdGFyKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzKTooKT0+dHJ1ZTtcclxuICAgIHZhciB7bW9kb0Rlc3BsaWVndWV9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICB2YXIgaWQgPSBgY29uc2lzdGVuY2lhLSR7Y2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe2lkLCBzdHlsZTonZGlzcGxheScsIGZ1bjoocjpSZXNwdWVzdGFzKT0+aGFiaWxpdGFkb3IocikgfHwgbW9kb0Rlc3BsaWVndWU9PSdtZXRhZGF0b3MnPydibG9jayc6J25vbmUnfSlcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIFxyXG4gICAgICAgIGlkPXtpZH1cclxuICAgICAgICBjYXNpbGxlcm89e2Nhc2lsbGVyb31cclxuICAgICAgICBzdHlsZT17e2Rpc3BsYXk6J25vbmUnfX1cclxuICAgID5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IGxlZXI9e2ZhbHNlfSBmb3JQaz17Zm9yUGt9Lz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG50eXBlIERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXI9XHJcbih7Zm9yUGs6Rm9yUGssIG51bTpudW1iZXIsIGFjdHVhbDpib29sZWFuLCBwcmV2aW86Ym9vbGVhbn0gfCBcclxue2ZvclBrOkZvclBrLCBudW06bnVtYmVyLCBhY3R1YWw6Ym9vbGVhbiwgcHJldmlvOmZhbHNlLCBlc0FncmVnYXI6dHJ1ZX0gfCBcclxue2ZvclBrOkZvclBrLCBudW06bnVtYmVyLCBhY3R1YWw6Ym9vbGVhbiwgcHJldmlvOmZhbHNlLCBlc0NvbmZpcm1hcjp0cnVlfSB8XHJcbntmb3JQazpGb3JQaywgbnVtOm51bWJlciwgYWN0dWFsOmJvb2xlYW4sIHByZXZpbzpmYWxzZSwgcGVybWl0ZUJvcnJhcjpib29sZWFufSB8XHJcbntmb3JQazpGb3JQaywgbnVtOmZhbHNlLCBhY3R1YWw6Ym9vbGVhbiwgcHJldmlvOnRydWUsIHVuaWNvOnRydWV9KVxyXG4mIHtlc0NvbmZpcm1hcj86dHJ1ZSwgZXNBZ3JlZ2FyPzp0cnVlLCBwZXJtaXRlQm9ycmFyPzpib29sZWFuLCBkaXNhYmxlZD86Ym9vbGVhbnx1bmRlZmluZWR9O1xyXG5cclxuXHJcbnZhciBib3RvbkZvcm11bGFyaW9Db25SZXN1bWVuID0gKFxyXG4gICAgZGVmQm90b246RGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpciwgXHJcbiAgICBmZWVkYmFja0Zvcm06Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIFxyXG4gICAgcmVzcHVlc3Rhc0F1bWVudGFkYXM6UmVzcHVlc3RhcyxcclxuICAgIGNhc2lsbGVybzp7ZGVzcGxpZWd1ZU9jdWx0YT86Ym9vbGVhbnxudWxsLCBleHByZXNpb25faGFiaWxpdGFyX2pzPzpzdHJpbmcsIGFjbGFyYWNpb246c3RyaW5nfG51bGwsIGV4cHJlc2lvbl9oYWJpbGl0YXI/OnN0cmluZywgbm9tYnJlPzpzdHJpbmcsIHNhbHRvOnN0cmluZ3xudWxsLCBlc3BlY2lhbD86YW55fSxcclxuICAgIGZvclBrUGFkcmU6IEZvclBrLFxyXG4gICAgaWRCdXR0b246c3RyaW5nLFxyXG4gICAgZm9ybXVsYXJpb0FBYnJpcjpGb3JtdWxhcmlvXHJcbik9PntcclxuICAgIHZhciBmb3JQazpGb3JQayA9IGRlZkJvdG9uLmZvclBrO1xyXG4gICAgdmFyIHN1Zmlqb0lkRWxlbWVudG8gPSB0b1BsYWluRm9yUGsoZm9yUGspKyhkZWZCb3Rvbi5lc0NvbmZpcm1hcj8nLWxpc3RvJzonJyk7XHJcbiAgICB2YXIgaWQgPSBgZGl2LWJvdG9uLWZvcm11bGFyaW8tJHtzdWZpam9JZEVsZW1lbnRvfWA7XHJcbiAgICB2YXIgZXN0YWRvID0gZmVlZGJhY2tGb3JtLnJlc3VtZW47XHJcbiAgICByZXR1cm4gaHRtbC50cih7XHJcbiAgICAgICAgaWQsIFxyXG4gICAgICAgIGNsYXNzOlwic2VjY2lvbi1ib3Rvbi1mb3JtdWxhcmlvXCIgLCBcclxuICAgICAgICAkYXR0cnM6e1xyXG4gICAgICAgICAgICBcIm51ZXN0cm8tdmFsaWRhdG9yXCI6ZGVmQm90b24uYWN0dWFsPydhY3R1YWwnOmRlZkJvdG9uLnByZXZpbz8ndmFsaWRhJzondG9kYXZpYV9ubycsXHJcbiAgICAgICAgICAgIFwib2N1bHRhci1zYWx0ZWFkYVwiOmNhc2lsbGVyby5kZXNwbGllZ3VlT2N1bHRhPyhjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz8nSU5IQUJJTElUQVInOidTSScpOidOTycsXHJcbiAgICAgICAgICAgIFwidGllbmUtdmFsb3JcIjpcIk5PXCIsXHJcbiAgICAgICAgICAgIFwiZGVmLWJ1dHRvblwiOkpTT04uc3RyaW5naWZ5KGRlZkJvdG9uKVxyXG4gICAgICAgIH1cclxuICAgIH0sIFtcclxuICAgICAgICBjYXNpbGxlcm8uYWNsYXJhY2lvbj9cclxuICAgICAgICAgICAgaHRtbC50ZCh7Y2xhc3M6XCJhY2xhcmFjaW9uXCJ9LCBbYnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLmFjbGFyYWNpb24pXSlcclxuICAgICAgICA6bnVsbCxcclxuICAgICAgICBodG1sLnRkKHtjb2xzcGFuOihkZWZCb3Rvbi5lc0FncmVnYXIgfHwgZGVmQm90b24uZXNDb25maXJtYXIpP1xyXG4gICAgICAgICAgICAgICAgKGNhc2lsbGVyby5lc3BlY2lhbD8uY2FtcG9zUmVzdW1lbi5sZW5ndGg/PzEpKyhjYXNpbGxlcm8uYWNsYXJhY2lvbj8wOjEpXHJcbiAgICAgICAgICAgIDpudWxsfSxbXHJcbiAgICAgICAgICAgIEJ1dHRvbjIoe1xyXG4gICAgICAgICAgICAgICAgLy8gaWQ6YHZhci0ke2lkVmFyaWFibGV9YCxcclxuICAgICAgICAgICAgICAgIGlkOmBib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gLCBcclxuICAgICAgICAgICAgICAgIHZhcmlhbnQ6XCJvdXRsaW5lZFwiLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRlZkJvdG9uLmRpc2FibGVkLFxyXG4gICAgICAgICAgICAgICAgY29sb3I6XCJpbmhlcml0XCIsXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrOigpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZGVmQm90b24uZXNDb25maXJtYXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihkZWZCb3Rvbi5udW0gIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjYXNpbGxlcm8uc2FsdG8pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBCRl92YXJuYW1lID0gJyRCLkY6JysgY2FzaWxsZXJvLnNhbHRvIGFzIElkVmFyaWFibGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSx7Zm9yUGs6Zm9yUGtQYWRyZSwgdmFyaWFibGU6QkZfdmFybmFtZSwgcmVzcHVlc3RhOmRlZkJvdG9uLm51bT09MD9udWxsOmRlZkJvdG9uLm51bSBhcyBWYWxvcn0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEse2ZvclBrOmZvclBrUGFkcmUsIHZhcmlhYmxlOmNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyIGFzIElkVmFyaWFibGUsIHJlc3B1ZXN0YTpkZWZCb3Rvbi5udW0gYXMgVmFsb3J9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRCdXR0b24pISBhcyBIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLnNldEF0dHJpYnV0ZSgnZGVmLWJ1dHRvbicsIEpTT04uc3RyaW5naWZ5KGRlZkJvdG9uKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAkYXR0cnM6e1xyXG4gICAgICAgICAgICAgICAgICAgIFwicmVzdW1lbi1lc3RhZG9cIjplc3RhZG8hPSd2YWNpbyc/ZXN0YWRvOiBkZWZCb3Rvbi5hY3R1YWw/J2FjdHVhbCc6ZGVmQm90b24ucHJldmlvP2VzdGFkbzondG9kYXZpYV9ubycsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAsIGNoaWxkcmVuOltcclxuICAgICAgICAgICAgICAgICAgICAoZGVmQm90b24uZXNBZ3JlZ2FyPydhZ3JlZ2FyJzpkZWZCb3Rvbi5lc0NvbmZpcm1hcj8nTGlzdG8nOmNhc2lsbGVyby5ub21icmUgKyAnICcgKyAoZGVmQm90b24ubnVtfHwnJykpLFxyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwuc3ZnKHtjbGFzczpcIk11aVN2Z0ljb24tcm9vdFwiLCBmb2N1c2FibGU6ZmFsc2UsIHZpZXdib3g6XCIwIDAgMjQgMjRcIiwgXCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwifSxbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwucGF0aCh7ZDooZGVmQm90b24uZXNBZ3JlZ2FyP21hdGVyaWFsSW9JY29uc1N2Z1BhdGguQWRkOmRlZkJvdG9uLmVzQ29uZmlybWFyP21hdGVyaWFsSW9JY29uc1N2Z1BhdGguQ2hlY2s6Y2FzaWxsZXJvLnNhbHRvP21hdGVyaWFsSW9JY29uc1N2Z1BhdGguRm9yd2FyZDptYXRlcmlhbElvSWNvbnNTdmdQYXRoLkV4aXRUb0FwcCl9KVxyXG4gICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAoZGVmQm90b24ucGVybWl0ZUJvcnJhcj9cclxuICAgICAgICAgICAgICAgIEJ1dHRvbjIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTpcImJvdG9uLWJvcnJhci11YS12YWNpYVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOlwiZGVmYXVsdFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ6XCJvdXRsaW5lZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLnN2Zyh7Y2xhc3M6XCJNdWlTdmdJY29uLXJvb3RcIiwgZm9jdXNhYmxlOmZhbHNlLCB2aWV3Ym94OlwiMCAwIDI0IDI0XCIsIFwiYXJpYS1oaWRkZW5cIjpcInRydWVcIn0sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5wYXRoKHtkOm1hdGVyaWFsSW9JY29uc1N2Z1BhdGguRGVsZXRlRm9yZXZlcn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLCBcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOigpPT5hY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8oe2ZvclBrLCBmb3JQa1BhZHJlfSl9KVxyXG4gICAgICAgICAgICA6bnVsbCkgXHJcbiAgICAgICAgXSksXHJcbiAgICAgICAgKGRlZkJvdG9uLm51bSAhPT0gZmFsc2UgJiYgIWRlZkJvdG9uLmVzQWdyZWdhciAmJiAhZGVmQm90b24uZXNDb25maXJtYXI/XHJcbiAgICAgICAgICAgIChjYXNpbGxlcm8uZXNwZWNpYWw/LmNhbXBvc1Jlc3VtZW4/P1svKmRlZkJvdG9uLm51bS50b1N0cmluZygpKi9dKS5tYXAoXHJcbiAgICAgICAgICAgICAgICAoY2FtcG86c3RyaW5nKT0+aHRtbC50ZChyZXNwdWVzdGFzQXVtZW50YWRhc1tmb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpc11bZGVmQm90b24ubnVtLTFdW2NhbXBvIGFzIElkVmFyaWFibGVdKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgOm51bGwpXHJcbiAgICAgICAgLy8gaHRtbC5kaXYoe2NsYXNzOidpbmxpbmUtZGlhbG9nJywgJGF0dHJzOntcImlubGluZS1kaWFsb2ctb3BlblwiOiBjb25maXJtYXJGb3J6YXJJciA9PSBkZWZCb3Rvbi5udW0/J3Zpc2libGUnOidoaWRkZW4nfX0sWyAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICAgIHtkZWZCb3Rvbi5lc0FncmVnYXI/PD4gPHNwYW4+ICA8L3NwYW4+IDxCdXR0b25cclxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID48SUNPTi5DaGVjay8+PC9CdXR0b24+PC8+Om51bGx9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKi9cclxuICAgIF0pLmNyZWF0ZSgpXHJcbn1cclxuXHJcbnZhciBidXNjYXJIbm9zRm9ybXVsYXJpbyA9IChpZEZvcm11bGFyaW9EZXN0aW5vOklkRm9ybXVsYXJpbyk9PntcclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgdmFyIHVhID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tpZEZvcm11bGFyaW9EZXN0aW5vXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcztcclxuICAgIHJldHVybiBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcylcclxuICAgICAgICAuZmlsdGVyKChpbmZvRm9ybXVsYXJpbzpJbmZvRm9ybXVsYXJpbywgaWRGb3JtOklkRm9ybXVsYXJpbyk9PlxyXG4gICAgICAgICAgICBpbmZvRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YVxyXG4gICAgICAgICkubWFwKChfaW5mb0Zvcm11bGFyaW86SW5mb0Zvcm11bGFyaW8sIGlkRm9ybTpJZEZvcm11bGFyaW8pPT5cclxuICAgICAgICAgICAgaWRGb3JtXHJcbiAgICAgICAgKS5hcnJheSgpXHJcbn1cclxuXHJcbnZhciBjaGVja0Zvcm1zVmFjaW9zID0gKGZvcm1zOklkRm9ybXVsYXJpb1tdLCBmZWVkYmFja0FsbDp7XHJcbiAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiAvLyByZXN1bHRhZG8gZGVsIHJvd1ZhbGlkYXRvciBwYXJhIGVzdGFkby5mb3JQa1xyXG59LCBmb3JQazpGb3JQayk9PntcclxuICAgIHJldHVybiBmb3Jtcy5maWx0ZXIoKGZvcm06SWRGb3JtdWxhcmlvKT0+e1xyXG4gICAgICAgIGxldCBteWZvclBrPXsuLi5mb3JQaywgZm9ybXVsYXJpbzpmb3JtfTtcclxuICAgICAgICB2YXIgZmVlZGJhY2sgPSBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsobXlmb3JQayldO1xyXG4gICAgICAgIHJldHVybiBmZWVkYmFjay5yZXN1bWVuICE9ICd2YWNpbydcclxuICAgIH0pLmxlbmd0aCA9PSAwXHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUocHJvcHM6e2Nhc2lsbGVybzpCb3RvbkZvcm11bGFyaW8sIGZvcm11bGFyaW86Rm9ybXVsYXJpbywgZm9yUGs6Rm9yUGt9KXtcclxuICAgIHZhciB7Y2FzaWxsZXJvLCBmb3JQa30gPSBwcm9wcztcclxuICAgIHZhciBoYWJpbGl0YWRvciA9IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzP2dldEZ1bmNpb25IYWJpbGl0YXIoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMpOigpPT50cnVlO1xyXG4gICAgdmFyIHtvcGNpb25lc30gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIC8vdmFyIGlkRm9ybXVsYXJpb0Rlc3Rpbm8gPSAnRjonK2Nhc2lsbGVyby5zYWx0byEgYXMgSWRGb3JtdWxhcmlvOyAgIC8vb3JpZ2luYWxcclxuICAgIHZhciBhcm1vTm9tU2FsdG89Y2FzaWxsZXJvLnNhbHRvPy5zdWJzdHJpbmcoMCwyKT09J0Y6Jz9jYXNpbGxlcm8uc2FsdG8uc2xpY2UoMik6Y2FzaWxsZXJvLnNhbHRvO1xyXG4gICAgLy9jb25zb2xlLmxvZygnQm90b25Gb3JtdWxhcmlvRGVzcGxpZWd1ZSBhcm1vTm9tU2FsdG8gJyArYXJtb05vbVNhbHRvKTtcclxuICAgIHZhciBpZEZvcm11bGFyaW9EZXN0aW5vID0gJ0Y6Jythcm1vTm9tU2FsdG8hIGFzIElkRm9ybXVsYXJpbztcclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgdmFyIHtmb3JtdWxhcmlvQUFicmlyfSA9IHVzZVNlbGVjdG9yKChfc3RhdGU6Q2Fzb1N0YXRlKT0+KHtcclxuICAgICAgICBmb3JtdWxhcmlvQUFicmlyOmVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbaWRGb3JtdWxhcmlvRGVzdGlub10uY2FzaWxsZXJvcyxcclxuICAgIH0pKTtcclxuICAgIHZhciBzdWZpam9JZEVsZW1lbnRvID0gdG9QbGFpbkZvclBrKGZvclBrKTtcclxuICAgIC8qXHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQ6YGRpdi1ib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gLCBcclxuICAgICAgICBhdHRyOidlc3RhLWluaGFiaWxpdGFkYScsIFxyXG4gICAgICAgIC8vIGZ1bjogKHI6UmVzcHVlc3Rhcyk9PmhhYmlsaXRhZG9yKHIpPydTSSc6J05PJ1xyXG4gICAgICAgIGZ1bjogKF9yOlJlc3B1ZXN0YXMpPT4nTk8nXHJcbiAgICB9KTtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvPEhUTUxCdXR0b25FbGVtZW50Pih7XHJcbiAgICAgICAgaWQ6YGJvdG9uLWZvcm11bGFyaW8tJHtzdWZpam9JZEVsZW1lbnRvfWAsIFxyXG4gICAgICAgIHByb3A6J2Rpc2FibGVkJywgXHJcbiAgICAgICAgLy8gZnVuOiAocjpSZXNwdWVzdGFzKT0+IWhhYmlsaXRhZG9yKHIpXHJcbiAgICAgICAgZnVuOiAoX3I6UmVzcHVlc3Rhcyk9PmZhbHNlXHJcbiAgICB9KTtcclxuICAgICovXHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgW2NvbmZpcm1hckZvcnphcklyLCBzZXRDb25maXJtYXJGb3J6YXJJcl0gPSB1c2VTdGF0ZTxEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyfGZhbHNlfG51bGw+KG51bGwpO1xyXG4gICAgdmFyIG11bHRpcGxlRm9ybXVsYXJpb3M9Zm9ybXVsYXJpb0FBYnJpci51bmlkYWRfYW5hbGlzaXMgIT0gcHJvcHMuZm9ybXVsYXJpby51bmlkYWRfYW5hbGlzaXM7XHJcbiAgICB2YXIgbnVldm9DYW1wb1BrID0gZGVmT3BlcmF0aXZvLmRlZlVBW2Zvcm11bGFyaW9BQWJyaXIudW5pZGFkX2FuYWxpc2lzXS5waztcclxuICAgLy8gdmFyIHZhcl9uYW1lPSckQi4nK2Nhc2lsbGVyby5zYWx0bzsgLy9vcmlnaW5hbFxyXG4gICAgdmFyIHZhcl9uYW1lPSckQi5GOicrYXJtb05vbVNhbHRvO1xyXG4gICAgdmFyIGlkU2VjY2lvbj1gc2VjY2lvbi1ib3Rvbi1mb3JtdWxhcmlvLSR7dmFyX25hbWV9YDtcclxuICAgIHZhciBpZEJ1dHRvbj1gc3BlY2lhbC1idXR0b24tJHtpZFNlY2Npb259YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvPEhUTUxEaXZFbGVtZW50Pih7XHJcbiAgICAgICAgaWQ6aWRTZWNjaW9uLCBcclxuICAgICAgICBkaXJlY3Q6dHJ1ZSxcclxuICAgICAgICBmdW46IChyZXNwdWVzdGFzQXVtZW50YWRhczpSZXNwdWVzdGFzLCBmZWVkYmFja1JvdzogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIGRpdjpIVE1MRGl2RWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrQWxsOntcclxuICAgICAgICAgICAgICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiAvLyByZXN1bHRhZG8gZGVsIHJvd1ZhbGlkYXRvciBwYXJhIGVzdGFkby5mb3JQa1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApPT57XHJcbiAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgIHZhciBsaXN0YURlQm90b25lc0FicmlyOkRlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXJbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAvLyB2YXIgZXNWYXJBY3R1YWwgPSBmZWVkYmFja1Jvdy5hY3R1YWwgPT0gJyRCLkY6JytjYXNpbGxlcm8uc2FsdG87ICAvL29yaWdpbmFsXHJcbiAgICAgICAgICAgICAgICB2YXIgZXNWYXJBY3R1YWwgPSBmZWVkYmFja1Jvdy5hY3R1YWwgID09ICckQi5GOicrYXJtb05vbVNhbHRvO1xyXG4gICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQm90b25Gb3JtdWxhcmlvRGVzcGxpZWd1ZSBlc1ZhckFjdHVhbCAnICtlc1ZhckFjdHVhbCAgKTtcclxuICAgICAgICAgICAgICAgIGlmKG11bHRpcGxlRm9ybXVsYXJpb3MgJiYgY2FzaWxsZXJvLnNhbHRvIT1udWxsKXtcclxuICAgICAgICAgICAgICAgICAgLy8gIGxldCBkZWZGb3JtdWxhcmlvOkluZm9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1snRjonK2Nhc2lsbGVyby5zYWx0byBhcyBJZEZvcm11bGFyaW9dOyAgICAgIC8vb3JpZ2luYWxcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGVmRm9ybXVsYXJpbzpJbmZvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbJ0Y6Jythcm1vTm9tU2FsdG8gYXMgSWRGb3JtdWxhcmlvXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGVmVUEgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW2RlZkZvcm11bGFyaW8uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMhXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29uanVudG8gPSByZXNwdWVzdGFzQXVtZW50YWRhc1tkZWZGb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzIV07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhbnRpZGFkRXNwZXJhZGEgPSByZXNwdWVzdGFzQXVtZW50YWRhc1tjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhciBhcyBJZFZhcmlhYmxlXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtQWN0dWFsOm51bWJlcnxudWxsID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgLy8gIHZhciBlc3RhZG9EZWxCb3RvbiA9IGZlZWRiYWNrUm93LmZlZWRiYWNrWyckQi5GOicrY2FzaWxsZXJvLnNhbHRvIGFzIElkVmFyaWFibGVdLmVzdGFkbyAgIC8vb3JpZ2luYWxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhciBlc3RhZG9EZWxCb3RvbiA9IGZlZWRiYWNrUm93LmZlZWRiYWNrWyckQi5GOicrYXJtb05vbVNhbHRvIGFzIElkVmFyaWFibGVdLmVzdGFkb1xyXG4gICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0JvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUgZXN0YWRvRGVsQm90b24gJyArZXN0YWRvRGVsQm90b24gICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbz9lc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pXTpudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvO1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RhRGVCb3RvbmVzQWJyaXIgPSBsaWtlQXIoY29uanVudG8pLm1hcCgoXywgaSk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG51bTpudW1iZXIgPSBudW1iZXJPclN0cmluZ0luY0lmQXJyYXkoaSwgY29uanVudG8pIGFzIG51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZvclBrPXsuLi5wcm9wcy5mb3JQaywgZm9ybXVsYXJpbzppZEZvcm11bGFyaW9EZXN0aW5vLCBbbnVldm9DYW1wb1BrXTpudW19O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9ybUhub3MgPSBidXNjYXJIbm9zRm9ybXVsYXJpbyhpZEZvcm11bGFyaW9EZXN0aW5vKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmVlZGJhY2sgPSBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYobnVtQWN0dWFsID09IG51bGwgJiYgZmVlZGJhY2sucmVzdW1lbiA9PSBcInZhY2lvXCIgJiYgZXN0YWRvRGVsQm90b24gPT0ndmFsaWRhJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BY3R1YWwgPSBudW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZW46bnVsbCwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiBjYWxjdWxhckFjdHVhbEJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIG51bSwgbnVtQWN0dWFsLCBpZEZvcm11bGFyaW9EZXN0aW5vLCByZXNwdWVzdGFzQXVtZW50YWRhcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86IG51bUFjdHVhbCA9PSBudWxsLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pdGVCb3JyYXI6IGxpa2VBcihjb25qdW50bykuYXJyYXkoKS5sZW5ndGggPT0gTnVtYmVyKGkpICsgMSAmJiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0Zvcm1zVmFjaW9zKGZvcm1Ibm9zLCBmZWVkYmFja0FsbCwgZm9yUGspICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbyxpZEZvcm11bGFyaW9EZXN0aW5vKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBudW0sIGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSkuYXJyYXkoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZihcInB1ZWRlIGFncmVnYXIgLy9UT0RPIFZFUiBFU1RPXCIgJiYgKGNvbmp1bnRvIGluc3RhbmNlb2YgQXJyYXkgfHwgY29uanVudG8gPT0gbnVsbCkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbnVldm9WYWxvclBrPShjb25qdW50bz09bnVsbCA/IDAgOiBjb25qdW50by5sZW5ndGgpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZvclBrPXsuLi5wcm9wcy5mb3JQaywgZm9ybXVsYXJpbzppZEZvcm11bGFyaW9EZXN0aW5vLCBbbnVldm9DYW1wb1BrXTpudWV2b1ZhbG9yUGt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGViZUFncmVnYXJPbGlzdG8gPSBudW1BY3R1YWwgPT0gbnVsbCAmJiAoY2FudGlkYWRFc3BlcmFkYSA9PSBudWxsIHx8IGNhbnRpZGFkRXNwZXJhZGEgIT0gKGNvbmp1bnRvICE9bnVsbCAmJiBjb25qdW50by5sZW5ndGgpKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChlc3RhZG9EZWxCb3RvbiA9PSd2YWxpZGEnIHx8IGVzVmFyQWN0dWFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bTpudWV2b1ZhbG9yUGssIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNBZ3JlZ2FyOnRydWUsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOmRlYmVBZ3JlZ2FyT2xpc3RvLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzogZmFsc2UsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRkFncmVnYXJMaXN0byhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sIGlkRm9ybXVsYXJpb0Rlc3Rpbm8pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGssIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtOm51ZXZvVmFsb3JQayAtIDEsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNDb25maXJtYXI6dHJ1ZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6ZGViZUFncmVnYXJPbGlzdG8gJiYgKCFjYXNpbGxlcm8ubG9uZ2l0dWQgfHwgbnVldm9WYWxvclBrID4gTnVtYmVyKGNhc2lsbGVyby5sb25naXR1ZCkpLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzogZmFsc2UsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRkFncmVnYXJMaXN0byhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sIGlkRm9ybXVsYXJpb0Rlc3Rpbm8pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmb3JQaz17Li4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86aWRGb3JtdWxhcmlvRGVzdGlub307XHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpciA9IFt7Zm9yUGssIG51bTpmYWxzZSwgdW5pY286dHJ1ZSwgYWN0dWFsOmVzVmFyQWN0dWFsLCBwcmV2aW86dHJ1ZX1dXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgdG9kb3NMb3NCb3RvbmVzID0gbGlzdGFEZUJvdG9uZXNBYnJpci5tYXAoZGVmQm90b249PlxyXG4gICAgICAgICAgICAgICAgICAgIGJvdG9uRm9ybXVsYXJpb0NvblJlc3VtZW4oZGVmQm90b24sIGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhkZWZCb3Rvbi5mb3JQayldPz97cmVzdW1lbjondmFjaW8nfSwgcmVzcHVlc3Rhc0F1bWVudGFkYXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVybywgcHJvcHMuZm9yUGssIGlkQnV0dG9uLCBmb3JtdWxhcmlvQUFicmlyXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgbGV0IG5vbWJyZXNDYW1wb3NSZXN1bWVuID0gbGlrZUFyKChjYXNpbGxlcm8uZXNwZWNpYWw/LmNhbXBvc1Jlc3VtZW58fFtdKSkuYXJyYXkoKS5tYXAoYz0+Yyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgaHRtbFNlY2Npb249ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRTZWNjaW9uKSE7XHJcbiAgICAgICAgICAgICAgICBodG1sU2VjY2lvbi5pbm5lckhUTUw9XCJcIjtcclxuICAgICAgICAgICAgICAgIGh0bWxTZWNjaW9uLmFwcGVuZENoaWxkKGh0bWwudGFibGUoe2NsYXNzOmB0YWJsZSB0YWJsZS1zdHJpcGVkICR7bm9tYnJlc0NhbXBvc1Jlc3VtZW4ubGVuZ3RoPyd3LWF1dG8nOicnfWB9LFtcclxuICAgICAgICAgICAgICAgICAgICBodG1sLnRoZWFkKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC50cihbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8uYWNsYXJhY2lvbj9odG1sLnRoKCk6bnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwudGgoY2FzaWxsZXJvLm5vbWJyZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub21icmVzQ2FtcG9zUmVzdW1lbi5tYXAoKG5vbWJyZUNhbXBvKT0+aHRtbC50aChub21icmVDYW1wbykpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwudGJvZHkoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2Rvc0xvc0JvdG9uZXNcclxuICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgXSkuY3JlYXRlKCkpO1xyXG4gICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IHVuZXhwZWN0ZWQoZXJyKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZW50cmEgYWwgY2F0Y2hcIilcclxuICAgICAgICAgICAgICAgIGRpdi50ZXh0Q29udGVudD0nZXN0bywgRkFMTMOJICcrZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgY29uc3QgaXIgPSAoZGVmQm90b246RGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpcik9PntcclxuICAgICAgICBpZighY2FzaWxsZXJvLnNhbHRvKXtcclxuICAgICAgICAgICAgb3BjaW9uZXMubW9kb0RpcmVjdG8/XHJcbiAgICAgICAgICAgICAgICBudWxsXHJcbiAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlZPTFZFUl9IRFIoe30pKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdmFyIG51ZXZhRm9yUGs9ey4uLmZvclBrLCBmb3JtdWxhcmlvOmlkRm9ybXVsYXJpb0Rlc3Rpbm99O1xyXG4gICAgICAgICAgICBpZihtdWx0aXBsZUZvcm11bGFyaW9zKXtcclxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgZm9yUGsgeSBzdXMgY29tcG9uZW50ZXNcclxuICAgICAgICAgICAgICAgIG51ZXZhRm9yUGtbbnVldm9DYW1wb1BrXSA9IGRlZkJvdG9uLm51bVxyXG4gICAgICAgICAgICAgICAgaWYoZGVmQm90b24uZXNBZ3JlZ2FyKXtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWdyZWdhcl9mb3JtdWxhcmlvLHtmb3JQazpudWV2YUZvclBrfSk7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWJyaXJfZm9ybXVsYXJpbyx7Zm9yUGs6bnVldmFGb3JQa30pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNBTUJJQVJfRk9STVVMQVJJTyh7Zm9yUGs6bnVldmFGb3JQaywgYXBpbGFyVnVlbHRhOnRydWV9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGNvbmZpcm1hckZvcnphcklyKXtzZXRDb25maXJtYXJGb3J6YXJJcihmYWxzZSl9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gY2FzaWxsZXJvPXtjYXNpbGxlcm99PlxyXG4gICAgICAgIDxkaXYgaWQ9e2lkU2VjY2lvbn0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJzcGVjaWFsLWJ1dHRvblwiIGlkPXtpZEJ1dHRvbn1cclxuICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KT0+e1xyXG4gICAgICAgICAgICAgICAgaXIoSlNPTi5wYXJzZSgoZXZlbnQudGFyZ2V0ISBhcyB1bmtub3duIGFzIEhUTUxCdXR0b25FbGVtZW50KS5nZXRBdHRyaWJ1dGUoJ2RlZi1idXR0b24nKSEpKVxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgID5pciAoaW50ZXJubyk8L0J1dHRvbj5cclxuICAgICAgICA8RGlhbG9nIFxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJudWVzdHJvLWRpYWxvZ29cIlxyXG4gICAgICAgICAgICBvcGVuPXshIWNvbmZpcm1hckZvcnphcklyfVxyXG4gICAgICAgICAgICBvbkNsb3NlPXsoKT0+c2V0Q29uZmlybWFyRm9yemFySXIobnVsbCl9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm51ZXN0cm8tZGlhbG9nb1wiPlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+Tm8gc2UgcHVlZGUgYXZhbnphciBhbCBzaWd1aWVudGUgZm9ybXVsYXJpby48L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5RdWl6w6FzIG5vIHRlcm1pbsOzIGRlIGNvbnRlc3RhciBsYXMgcHJlZ3VudGFzIGNvcnJlc3BvbmRpZW50ZXM8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5RdWl6w6FzIG5vIGNvcnJlc3BvbmRlIGVuIGJhc2UgYSBsYXMgcmVzcHVlc3RhcyBvYnRlbmlkYXM8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwic2Vjb25kYXJ5XCIgb25DbGljaz17KCk9PmNvbmZpcm1hckZvcnphcklyICYmIGlyKGNvbmZpcm1hckZvcnphcklyKX0+Zm9yemFyPC9CdXR0b24+XHJcbiAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdmFyaWFudD1cImNvbnRhaW5lZFwiIG9uQ2xpY2s9eygpPT5zZXRDb25maXJtYXJGb3J6YXJJcihudWxsKX0+RW50ZW5kaWRvPC9CdXR0b24+XHJcbiAgICAgICAgPC9EaWFsb2c+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxuZnVuY3Rpb24gQ2FzaWxsZXJvRGVzY29ub2NpZG8ocHJvcHM6e2Nhc2lsbGVybzpDYXNpbGxlcm9CYXNlLCBmb3JQazpGb3JQa30pe1xyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gXHJcbiAgICAgICAgaWQ9e2BjYXNpbGxlcm9kZXNjb25vY2lkby0ke3Byb3BzLmNhc2lsbGVyby5pZF9jYXNpbGxlcm99YH1cclxuICAgICAgICBjYXNpbGxlcm89e3Byb3BzLmNhc2lsbGVybyBhcyBCbG9xdWV9XHJcbiAgICAgICAgc3R5bGU9e3tkaXNwbGF5Oidub25lJ319XHJcbiAgICA+XHJcbiAgICAgICAgPFR5cG9ncmFwaHk+VGlwbyBkZSBjYXNpbGxlcm8gbm8gaW1wbGVtZW50YWRvOiBcIntwcm9wcy5jYXNpbGxlcm8udGlwb2N9XCIgcGFyYSBcIntwcm9wcy5jYXNpbGxlcm8uY2FzaWxsZXJvfVwiPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e3Byb3BzLmNhc2lsbGVybyBhcyBDYXNpbGxlcm9FbmNhYmV6YWJsZX0gbGVlcj17ZmFsc2V9IGZvclBrPXtwcm9wcy5mb3JQa30vPlxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGs6Rm9yUGspe1xyXG4gICAgcmV0dXJuIHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT57XHJcbiAgICAgICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZm9ybXVsYXJpbzogZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zLFxyXG4gICAgICAgICAgICBtb2RvRGVzcGxpZWd1ZTogdHJ1ZSB8fCBzdGF0ZS5tb2RvLmRlbW8/c3RhdGUub3BjaW9uZXMubW9kb0Rlc3BsaWVndWU6J3JlbGV2YW1pZW50bycsXHJcbiAgICAgICAgICAgIG1vZG86IHN0YXRlLm1vZG8sXHJcbiAgICAgICAgICAgIG9wY2lvbmVzOiBzdGF0ZS5vcGNpb25lcyxcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG59XHJcblxyXG5mdW5jdGlvbiBDb25qdW50b1ByZWd1bnRhc0Rlc3BsaWVndWUocHJvcHM6e2Nhc2lsbGVybzpDb25qdW50b1ByZWd1bnRhcywgZm9ybXVsYXJpbzpGb3JtdWxhcmlvLCBmb3JQazpGb3JQa30pe1xyXG4gICAgbGV0IHtjYXNpbGxlcm8sIGZvclBrfSA9IHByb3BzO1xyXG4gICAgdmFyIGlkID0gYGNvbmp1bnRvLXByZWd1bnRhcy0ke2Nhc2lsbGVyby5pZF9jYXNpbGxlcm99YDtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZCwgXHJcbiAgICAgICAgZGlyZWN0OnRydWUsIFxyXG4gICAgICAgIGZ1bjogcmVnaXN0cmFkb3JEZVZhcmlhYmxlKGNhc2lsbGVybylcclxuICAgIH0pXHJcbiAgICBsZXQgbW9kb0Rlc3BsaWVndWUgPSBcIm5vcm1hbFwiO1xyXG4gICAgbGV0IGhhYmlsaXRhZG8gPSB0cnVlO1xyXG4gICAgcmV0dXJuIGhhYmlsaXRhZG8gfHwgbW9kb0Rlc3BsaWVndWU9PSdtZXRhZGF0b3MnPzxEZXNwbGVnYXJDYXNpbGxlcm8gaWQ9e2lkfSBjYXNpbGxlcm89e2Nhc2lsbGVyb30+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17Zm9yUGt9IGxlZXI9e2Nhc2lsbGVyby5sZWVyIT09ZmFsc2V9Lz5cclxuICAgICAgICA8RGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvIGJsb3F1ZU9Gb3JtdWxhcmlvPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtmb3JQa30gbXVsdGlwbGU9e2ZhbHNlfS8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz46bnVsbDtcclxufVxyXG5cclxuZnVuY3Rpb24gRGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvKHByb3BzOntibG9xdWVPRm9ybXVsYXJpbzpCbG9xdWV8Rm9ybXVsYXJpb3xDb25qdW50b1ByZWd1bnRhcywgZm9ybXVsYXJpbzpGb3JtdWxhcmlvLCBmb3JQazpGb3JQaywgbXVsdGlwbGU6Ym9vbGVhbn0pe1xyXG4gICAgdmFyIHBhcmNpYWxpemFibGUgPSBwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby50aXBvYz09J0YnO1xyXG4gICAgY29uc3QgW3ZlclRvZG8sIHNldFZlclRvZG9dID0gdXNlU3RhdGUoIXBhcmNpYWxpemFibGUpO1xyXG4gICAgY29uc3QgW2ZvclBrQWN0dWFsLCBzZXRGb3JQa0FjdHVhbF0gPSB1c2VTdGF0ZTxJZENhc2lsbGVyb3xudWxsPihudWxsKTtcclxuICAgIGlmKHBhcmNpYWxpemFibGUpe1xyXG4gICAgICAgIGlmKGZvclBrQWN0dWFsICE9IHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLmNhc2lsbGVybyl7XHJcbiAgICAgICAgICAgIHNldFZlclRvZG8oZmFsc2UpXHJcbiAgICAgICAgICAgIHNldEZvclBrQWN0dWFsKHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLmNhc2lsbGVybylcclxuICAgICAgICB9XHJcbiAgICAgICAgdXNlRWZmZWN0KCgpPT57XHJcbiAgICAgICAgICAgIHZhciB0aW1lciA9IHNldFRpbWVvdXQoKCk9PntcclxuICAgICAgICAgICAgICAgIHNldFZlclRvZG8odHJ1ZSk7XHJcbiAgICAgICAgICAgIH0sMjUwKVxyXG4gICAgICAgICAgICByZXR1cm4gKCk9PntcclxuICAgICAgICAgICAgICAgIGlmKHRpbWVyKXtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIGNvbnN0IGxpbWl0ZU5vVmVyVG9kbyA9IDM7XHJcbiAgICB1c2VFZmZlY3QoKCk9PntcclxuICAgICAgICBpZihwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby50aXBvYz09J0YnKXtcclxuICAgICAgICAgICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhwcm9wcy5mb3JQayk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxbdG9QbGFpbkZvclBrKHByb3BzLmZvclBrKSx2ZXJUb2RvXSlcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2M9PSdGJyAmJiB2ZXJUb2RvKXtcclxuICAgICAgICAgICAgdmFyIHtzaWd1aWVudGVWYXJpYWJsZSwgdmFyaWFibGVBY3R1YWx9ID0gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHtyZXNwdWVzdGE6bnVsbCwgdmFyaWFibGU6Tk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMsIGZvclBrOnByb3BzLmZvclBrfSk7XHJcbiAgICAgICAgICAgIGlmKHZhcmlhYmxlQWN0dWFsIHx8IHNpZ3VpZW50ZVZhcmlhYmxlKXtcclxuICAgICAgICAgICAgICAgIGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUoY29hbGVzY2UodmFyaWFibGVBY3R1YWwgYXMgc3RyaW5nfG51bGwsc2lndWllbnRlVmFyaWFibGUgYXMgc3RyaW5nfG51bGwpIGFzIElkVmFyaWFibGUpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdmFyIGZlZWRiYWNrUm93VmFsaWRhdG9yID0gZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IoKVxyXG4gICAgICAgICAgICAgICAgaWYoZmVlZGJhY2tSb3dWYWxpZGF0b3JbdG9QbGFpbkZvclBrKHByb3BzLmZvclBrKV0ucmVzdW1lbj09J29rJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9Ub3AoKVxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9Ub3AoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJjb250ZW5pZG9cIj5cclxuICAgICAgICB7dmVyVG9kbz9udWxsOjxkaXYgc3R5bGU9e3toZWlnaHQ6XCI1MDBweFwiLCB0ZXh0QWxpZ246J2NlbnRlcicsIHZlcnRpY2FsQWxpZ246J21pZGRsZScsIHdpZHRoOicxMDAlJywgcG9zaXRpb246XCJmaXhlZFwiLCBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDEwMCwxMDAsMTAwLDAuMyknLCBmb250U2l6ZTonMjAwJSd9fSA+Y2FyZ2FuZG8uLi48L2Rpdj59XHJcbiAgICAgICAge3Byb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MubWFwKChjYXNpbGxlcm8sIGkpPT57XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBjYXNpbGxlcm8udGlwb2MrJy0nK2Nhc2lsbGVyby5pZF9jYXNpbGxlcm8rJy0nK2k7XHJcbiAgICAgICAgICAgIHJldHVybiAodmVyVG9kbyB8fCBpIDwgbGltaXRlTm9WZXJUb2RvP1xyXG4gICAgICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIlBcIj88UHJlZ3VudGFEZXNwbGllZ3VlIGtleT17a2V5fSBwcmVndW50YT17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9IGRlc3BsaWVndWVFbmNhYmV6YWRvPXtjYXNpbGxlcm8uZGVzcGxpZWd1ZUVuY2FiZXphZG8/Pyhwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby50aXBvYz09J0NQJz8nbGF0ZXJhbCc6J3N1cGVyaW9yJyl9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiQlwiPzxCbG9xdWVEZXNwbGllZ3VlIGtleT17a2V5fSBibG9xdWU9e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkZJTFRST1wiPzxGaWx0cm9EZXNwbGllZ3VlIGtleT17a2V5fSBmaWx0cm89e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkJGXCI/PEJvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiQ09OU1wiPzxDb25zaXN0ZW5jaWFEZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkNQXCI/PENvbmp1bnRvUHJlZ3VudGFzRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30vPjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJURVhUT1wiPzxUZXh0b0Rlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9Lz46XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiTElCUkVcIj88TGlicmVEZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e3Byb3BzLmZvclBrfS8+OlxyXG4gICAgICAgICAgICAgICAgICAgIDxDYXNpbGxlcm9EZXNjb25vY2lkbyBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30vPlxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICA6aT09bGltaXRlTm9WZXJUb2RvP1xyXG4gICAgICAgICAgICAgICAgPGRpdiBrZXk9JyRzcGlubmVyJyBjbGFzc05hbWU9XCJzcGlubmVyLWJvcmRlclwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5jYXJnYW5kbyBibG9xdWUuLi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgOm51bGxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0pXHJcbiAgICB9PC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJsb3F1ZURlc3BsaWVndWUocHJvcHM6e2Jsb3F1ZTpCbG9xdWUsIGZvcm11bGFyaW86Rm9ybXVsYXJpbywgZm9yUGs6Rm9yUGt9KXtcclxuICAgIHZhciB7YmxvcXVlLCBmb3JQa30gPSBwcm9wcztcclxuICAgIHZhciBrZXk9YmxvcXVlLnZlcl9pZCE9Jy0nICYmIGJsb3F1ZS52ZXJfaWQgfHwgYmxvcXVlLmNhc2lsbGVybztcclxuICAgIHZhciBhY3RpdmVTdGVwPTA7XHJcbiAgICB2YXIgbXVsdGlwbGUgPSAhIWJsb3F1ZS51bmlkYWRfYW5hbGlzaXM7XHJcbiAgICB2YXIgbGlzdGEgPSBbe2ZvclBrLCBrZXk6MCwgbXVsdGlwbGU6ZmFsc2V9XTtcclxuICAgIHZhciBoYWJpbGl0YWRvciA9IGJsb3F1ZS5leHByZXNpb25faGFiaWxpdGFyX2pzP2dldEZ1bmNpb25IYWJpbGl0YXIoYmxvcXVlLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMpOigpPT50cnVlO1xyXG4gICAgdmFyIHttb2RvRGVzcGxpZWd1ZX0gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIGlmKG11bHRpcGxlKXtcclxuICAgICAgICAvLyBUT0RPOiBHRU5FUkFMSVpBUlxyXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgXHJcbiAgICAgICAgLy8gbGlzdGE9cmVzcHVlc3Rhcy5wZXJzb25hcy5tYXAoKF9wZXJzb25hLCBpKT0+KFxyXG4gICAgICAgIC8vICAgICB7Zm9yUGs6ey4uLmZvclBrLCBwZXJzb25hOmkrMX0sIGtleTppKzEsIG11bHRpcGxlOnRydWV9XHJcbiAgICAgICAgLy8gKSlcclxuICAgIH1cclxuICAgIHZhciBpZCA9IGBibG9xdWUtJHtibG9xdWUuaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsXHJcbiAgICAgICAgc3R5bGU6J2Rpc3BsYXknLFxyXG4gICAgICAgIGZ1bjogKHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiBoYWJpbGl0YWRvcihyZXNwdWVzdGFzKSB8fCBtb2RvRGVzcGxpZWd1ZT09J21ldGFkYXRvcyc/J3Vuc2V0Jzonbm9uZSdcclxuICAgIH0pXHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVybyBjYXNpbGxlcm89e2Jsb3F1ZX0gbnVlc3Ryby1ibG9xdWU9e2Jsb3F1ZS5pZF9jYXNpbGxlcm99IGVzLW11bHRpcGxlPXttdWx0aXBsZT8nU0knOidOTyd9IGlkPXtpZH0+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17YmxvcXVlfSBmb3JQaz17Zm9yUGt9Lz5cclxuICAgICAgICB7bGlzdGEubWFwKCh7a2V5LCBmb3JQaywgbXVsdGlwbGV9KT0+XHJcbiAgICAgICAgICAgIDxEZXNwbGVnYXJDb250ZW5pZG9JbnRlcm5vQmxvcXVlT0Zvcm11bGFyaW8ga2V5PXtrZXl9IGJsb3F1ZU9Gb3JtdWxhcmlvPXtibG9xdWV9IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtmb3JQa30gbXVsdGlwbGU9e211bHRpcGxlfS8+XHJcbiAgICAgICAgKX1cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPjtcclxufVxyXG5cclxuY29uc3QgRm9ybXVsYXJpb0VuY2FiZXphZG8gPSBEZXNwbGllZ3VlRW5jYWJlemFkbztcclxuXHJcbmZ1bmN0aW9uIE1lbnVMZXRyYShwcm9wczp7dGFtYW5uaW86bnVtYmVyLCBkZW5vbWluYWNpb246c3RyaW5nfSl7XHJcbiAgICBjb25zdCBjYW1iaWFyTGV0cmEgPSAodGFtYW5uaW86bnVtYmVyKT0+e1xyXG4gICAgICAgIHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xyXG4gICAgICAgIHJvb3Quc3R5bGUuZm9udFNpemU9dGFtYW5uaW8rXCJweFwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDxNZW51SXRlbVxyXG4gICAgICAgIG9uQ2xpY2s9eygpPT5jYW1iaWFyTGV0cmEocHJvcHMudGFtYW5uaW8pfSBzdHlsZT17e2ZvbnRTaXplOnByb3BzLnRhbWFubmlvKydweCd9fVxyXG4gICAgPmxldHJhIHtwcm9wcy5kZW5vbWluYWNpb259PC9NZW51SXRlbT5cclxufVxyXG5cclxuZnVuY3Rpb24gRmFzdFNldHR1cCgpe1xyXG4gICAgY29uc3QgW2FuY2hvckVsLCBzZXRBbmNob3JFbF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IGhhbmRsZUNsaWNrID0gKGV2ZW50OmFueSkgPT4ge1xyXG4gICAgICAgIHNldEFuY2hvckVsKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xyXG4gICAgICAgIHNldE9wZW4oKHByZXYpID0+ICFwcmV2KTtcclxuICAgIH07XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCBjYW1iaWFyID0gKG1vZG9EZXNwbGllZ3VlOk1vZG9EZXNwbGllZ3VlKT0+e1xyXG4gICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLk1PRE9fREVTUExJRUdVRSh7bW9kb0Rlc3BsaWVndWV9KSk7XHJcbiAgICAgICAgc2V0T3BlbihmYWxzZSlcclxuICAgIH1cclxuICAgIGNvbnN0IG9wY2lvbmVzID0gdXNlU2VsZWN0b3IoKHN0YXRlOkNhc29TdGF0ZSk9PnN0YXRlLm9wY2lvbmVzKVxyXG4gICAgcmV0dXJuIDw+XHJcbiAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVDbGlja30+XHJcbiAgICAgICAgICAgIDxJQ09OLlNldHRpbmdzLz5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8TWVudSBvcGVuPXtvcGVufSBhbmNob3JFbD17YW5jaG9yRWx9IG9uQ2xvc2U9eygpPT5zZXRPcGVuKGZhbHNlKX0+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbSBvbkNsaWNrPXsoKT0+Y2FtYmlhcihcInJlbGV2YW1pZW50b1wiKX0+bm9ybWFsPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPE1lbnVJdGVtIG9uQ2xpY2s9eygpPT5jYW1iaWFyKFwiUERGXCIgICAgICAgICApfT5QREYgcGFyYSByZWxldmFtaWVudG88L01lbnVJdGVtPlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0gb25DbGljaz17KCk9PmNhbWJpYXIoXCJtZXRhZGF0b3NcIiAgICl9PnJldmlzYXIgbWV0YWRhdG9zPC9NZW51SXRlbT5cclxuICAgICAgICAgICAgPERpdmlkZXIvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsxMn0gZGVub21pbmFjaW9uID0gXCJtdXkgY2hpY2FcIi8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezE0fSBkZW5vbWluYWNpb24gPSBcImNoaWNhXCIvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsxNn0gZGVub21pbmFjaW9uID0gXCJub3JtYWxcIi8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezE5fSBkZW5vbWluYWNpb24gPSBcImdyYW5kZVwiLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MjJ9IGRlbm9taW5hY2lvbiA9IFwiZW5vcm1lXCIvPlxyXG4gICAgICAgICAgICA8RGl2aWRlci8+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbT48bGFiZWw+PENoZWNrYm94IGNoZWNrZWQ9e29wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXN9IG9uQ2hhbmdlPXtcclxuICAgICAgICAgICAgICAgICgpPT5kaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHtvcGNpb246J2NvbkNhbXBvT3BjaW9uZXMnLCB2YWxvcjohb3BjaW9uZXMuY29uQ2FtcG9PcGNpb25lc30pKVxyXG4gICAgICAgICAgICB9IGlucHV0UHJvcHM9e3sgJ2FyaWEtbGFiZWwnOiAncHJpbWFyeSBjaGVja2JveCcgfX0vPmNhbXBvIG9wY2lvbmVzPC9sYWJlbD48L01lbnVJdGVtPlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0+PGxhYmVsPjxDaGVja2JveCBjaGVja2VkPXtvcGNpb25lcy5zYWx0b0F1dG9tYXRpY299IG9uQ2hhbmdlPXtcclxuICAgICAgICAgICAgICAgICgpPT5kaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHtvcGNpb246J3NhbHRvQXV0b21hdGljbycsIHZhbG9yOiFvcGNpb25lcy5zYWx0b0F1dG9tYXRpY299KSlcclxuICAgICAgICAgICAgfSBpbnB1dFByb3BzPXt7ICdhcmlhLWxhYmVsJzogJ3ByaW1hcnkgY2hlY2tib3gnIH19Lz5zYWx0byBhdXRvbcOhdGljbzwvbGFiZWw+PC9NZW51SXRlbT5cclxuICAgICAgICA8L01lbnU+XHJcbiAgICA8Lz47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJhcnJhRGVOYXZlZ2FjaW9uKHByb3BzOntmb3JQazpGb3JQaywgc29sb0xlY3R1cmE6Ym9vbGVhbiwgbW9kb0RpcmVjdG86Ym9vbGVhbn0pe1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgZm9yUGsgPSBwcm9wcy5mb3JQaztcclxuICAgIGNvbnN0IHtvcGNpb25lc30gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIGNvbnN0IFtjb25maXJtYUNlcnJhciwgc2V0Q29uZmlybWFDZXJyYXJdID0gdXNlU3RhdGU8Ym9vbGVhbnxudWxsPihmYWxzZSk7XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciBkb21pbmlvID0gZ2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXS50ZW0uZG9taW5pbztcclxuICAgIHZhciBjZXJyYXJEaXJlY3RvID0gYXN5bmMgZnVuY3Rpb24oKXtcclxuICAgICAgICByZW1vdmVDU1NCeUlkKEJPT1RTVFJBUF81XzFfM19TUkMpO1xyXG4gICAgICAgIGdvdG9Db25zaXN0aXIoXHJcbiAgICAgICAgICAgIGVzdHJ1Y3R1cmEub3BlcmF0aXZvIGFzIElkT3BlcmF0aXZvLFxyXG4gICAgICAgICAgICBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW2ZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF1dLnRhcmVhLnRhcmVhLFxyXG4gICAgICAgICAgICBmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvL3ZhciBoYXNoPW5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uaGFzaD8ucmVwbGFjZSgvXlxcIy8sJycpLnNwbGl0KCcmYXV0b3Byb2NlZCcpWzBdKTtcclxuICAgICAgICAvLy8vaGFzaC5kZWxldGUoJ2F1dG9wcm9jZWQnKVxyXG4gICAgICAgIC8vY2xvc2UoKTtcclxuICAgICAgICAvL2xvY2F0aW9uLmhhc2g9aGFzaC50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgdmFyIGJvdG9uZXNGb3JtdWxhcmlvPVtdO1xyXG4gICAgaWYoIW9wY2lvbmVzLm1vZG9EaXJlY3RvKXtcclxuICAgICAgICBib3RvbmVzRm9ybXVsYXJpby5wdXNoKHtxdWU6ICdoZHInICAgICwgYWJyOidIZFInLCBpZDpJRF9CT1RPTl9WT0xWRVJfSERSLCBsYWJlbDonaG9qYSBkZSBydXRhJywgcmV0cm9jZXNvOjB9KVxyXG4gICAgfVxyXG4gICAgb3BjaW9uZXMucGlsYUZvclBrLmZvckVhY2goKGZvclBrLGkpPT5cclxuICAgICAgICBib3RvbmVzRm9ybXVsYXJpby5wdXNoKHtxdWU6J3ZvbHZlcicsIGFicjpmb3JQay5mb3JtdWxhcmlvLnJlcGxhY2UoL15GOi8sJycpLCBsYWJlbDpmb3JQay5mb3JtdWxhcmlvLCByZXRyb2Nlc286b3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aC1pfSlcclxuICAgIClcclxuICAgIGJvdG9uZXNGb3JtdWxhcmlvLnB1c2goe3F1ZTonJywgYWJyOmZvclBrLmZvcm11bGFyaW8ucmVwbGFjZSgvXkY6LywnJyksIGxhYmVsOmZvclBrLmZvcm11bGFyaW8sIHJldHJvY2VzbzowfSk7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7aWQ6cHJvcHMubW9kb0RpcmVjdG8/SURfQk9UT05fQ0VSUkFSOklEX0JPVE9OX1ZPTFZFUl9IRFIsIGRpcmVjdDp0cnVlLFxyXG4gICAgICAgIGZ1bjooXHJcbiAgICAgICAgICAgIHI6UmVzcHVlc3RhcywgXHJcbiAgICAgICAgICAgIF9mZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBcclxuICAgICAgICAgICAgZWxlbWVudG86SFRNTERpdkVsZW1lbnQsIFxyXG4gICAgICAgICAgICBmZWVkYmFja0FsbDp7W2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj59LCBcclxuICAgICAgICAgICAgX2VzdHJ1Y3R1cmE6RXN0cnVjdHVyYVxyXG4gICAgICAgICk9PntcclxuICAgICAgICAgICAgZWxlbWVudG8uc2V0QXR0cmlidXRlKCdyZXN1bWVuLWVzdGFkbycsY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoZm9yUGssIGZlZWRiYWNrQWxsLCByKS5yZXN1bWVuRXN0YWRvKTtcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIDw+XHJcbiAgICAgICAgPEJ1dHRvbkdyb3VwIGtleT1cImZvcm11bGFyaW9zXCIgY2xhc3NOYW1lPVwiYmFycmEtbmF2ZWdhY2lvblwiIHNvbG8tbGVjdHVyYT17cHJvcHMuc29sb0xlY3R1cmE/J3NpJzonbm8nfSA+XHJcbiAgICAgICAgICAgIHtib3RvbmVzRm9ybXVsYXJpby5tYXAoKGIsaSk9PlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj17Yi5xdWU9PWZvclBrLmZvcm11bGFyaW8/XCJwcmltYXJ5XCI6XCJpbmhlcml0XCJ9IHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9e2IuaWR9XHJcbiAgICAgICAgICAgICAgICAgICAga2V5PXtgJHtpfS0ke2IucXVlfS0ke2IucmV0cm9jZXNvfWB9XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFiLnF1ZX1cclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIucXVlPT0naGRyJz9kaXNwYXRjaGVycy5WT0xWRVJfSERSKHt9KTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJzLlZPTFZFUl9ERV9GT1JNVUxBUklPKHttYWduaXR1ZFJldHJvY2VzbzpiLnJldHJvY2Vzb30pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGIucXVlPT0naGRyJz9udWxsOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8se2ZvclBrOm9wY2lvbmVzLnBpbGFGb3JQa1tvcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoLWIucmV0cm9jZXNvXX0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYWJyXCI+e2IuYWJyfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJsYWJlbFwiPntiLmxhYmVsfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgIDwvQnV0dG9uR3JvdXA+XHJcbiAgICAgICAge3Byb3BzLnNvbG9MZWN0dXJhPzxUeXBvZ3JhcGh5IGNvbXBvbmVudD1cInNwYW5cIiBzdHlsZT17e21hcmdpbjonMCAxMHB4J319PiAoU29sbyBMZWN0dXJhKSA8L1R5cG9ncmFwaHk+Om51bGx9XHJcbiAgICAgICAge3Byb3BzLm1vZG9EaXJlY3RvP1xyXG4gICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbkdyb3VwIGtleT1cInZvbHZlcl95X2dyYWJhclwiIHN0eWxlPXt7bWFyZ2luOicwIDAgMCAzMHB4J319PlxyXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e0lEX0JPVE9OX0NFUlJBUn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17YXN5bmMgKCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHByb3BzLnNvbG9MZWN0dXJhIHx8ICFnZXREaXJ0eSgpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJyYXJEaXJlY3RvKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25maXJtYUNlcnJhcih0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uRXhpdFRvQXBwLz5cclxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8RGlhbG9nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW49eyEhY29uZmlybWFDZXJyYXJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vaGFjZSBxdWUgbm8gc2UgY2llcnJlIGVsIG1lbnNhamVcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbG9zZT17KCk9PnNldENvbmZpcm1hQ2VycmFyKGZhbHNlKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwiYWxlcnQtZGlhbG9nLXRpdGxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT1cImFsZXJ0LWRpYWxvZy1kZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nVGl0bGUgaWQ9XCJhbGVydC1kaWFsb2ctdGl0bGVcIj5Db25maXJtZSBjaWVycmUgZGUgZW5jdWVzdGE8L0RpYWxvZ1RpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50VGV4dCBpZD1cImFsZXJ0LWRpYWxvZy1kZXNjcmlwdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVzdMOhIHBvciBzYWxpciBkZSBsYSBlbmN1ZXN0YSwgc2UgcGVyZGVyw6FuIGxvcyBjYW1iaW9zIG5vIGd1YXJkYWRvcy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudFRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0FjdGlvbnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnJhckRpcmVjdG8oKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwic2Vjb25kYXJ5XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjYXJ0YXIgY2FtYmlvcyB5IGNlcnJhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmZpcm1hQ2VycmFyKGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVhciBlZGl0YW5kbyBlbmN1ZXN0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nPlxyXG4gICAgICAgICAgICAgICAgICAgIHtwcm9wcy5zb2xvTGVjdHVyYT9udWxsOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17XCJzYXZlLWJ1dHRvblwifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dHJ1ZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2FzeW5jICgpPT50cnVlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SUNPTi5TYXZlLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9CdXR0b25Hcm91cD5cclxuICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgOm51bGx9XHJcbiAgICAgICAgPFR5cG9ncmFwaHkgY2xhc3NOYW1lPVwibW9zdHJhci1mb3JQa1wiIGNvbXBvbmVudD1cInNwYW5cIiBzdHlsZT17e21hcmdpbjonMCAxMHB4J319PiBcclxuICAgICAgICAgICAge1ZFUl9ET01JTklPPzxkaXYga2V5PXtkb21pbmlvfT48c3Bhbj5kb21pbmlvPC9zcGFuPjxzcGFuPntkb21pbmlvfTwvc3Bhbj48L2Rpdj46Jyd9XHJcbiAgICAgICAgICAgIHtsaWtlQXIocHJvcHMuZm9yUGspLmZpbHRlcigoXyxrKT0+ayE9J2Zvcm11bGFyaW8nKS5tYXAoKHYsayk9PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBrZXk9e2t9PjxzcGFuPntrfTwvc3Bhbj48c3Bhbj57dn08L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICkuYXJyYXkoKX0gXHJcbiAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgIDxGYXN0U2V0dHVwLz5cclxuICAgIDwvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBCb3RvblZvbHZlckVuRGl2KHtpZH06e2lkOnN0cmluZ30pe1xyXG4gICAgdmFyIHtvcGNpb25lc30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+KHtvcGNpb25lczpzdGF0ZS5vcGNpb25lc30pKTtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBlc1ZvbHZlciA9IG9wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGg+MDtcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImRpdi1ib3Rvbi12b2x2ZXJcIj5cclxuICAgICAgICA8QnV0dG9uIGlkPXtpZH0gY2xhc3NOYW1lPVwiYm90b24tdm9sdmVyXCJcclxuICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgIGlmIChlc1ZvbHZlcikgeyBcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWJyaXJfZm9ybXVsYXJpbyx7Zm9yUGs6b3BjaW9uZXMucGlsYUZvclBrW29wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGgtMV19KTtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5WT0xWRVJfREVfRk9STVVMQVJJTyh7bWFnbml0dWRSZXRyb2Nlc286MX0pKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYm90b25DZXJyYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChJRF9CT1RPTl9DRVJSQVIpIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElEX0JPVE9OX1ZPTFZFUl9IRFIpIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChib3RvbkNlcnJhcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3RvbkNlcnJhci5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+IDxJQ09OLkNoZXZyb25MZWZ0Lz57ZXNWb2x2ZXIgPyBcIiBWb2x2ZXJcIiA6IFwiIENlcnJhclwifTwvQnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEZvcm11bGFyaW9EZXNwbGllZ3VlKHByb3BzOntmb3JQazpGb3JQa30pe1xyXG4gICAgdmFyIGZvclBrID0gcHJvcHMuZm9yUGs7XHJcbiAgICB2YXIge2Zvcm11bGFyaW8sIG1vZG9EZXNwbGllZ3VlLCBtb2RvLCBvcGNpb25lc30gXHJcbiAgICAgICAgPSB1c2VTZWxlY3RvclZpdmllbmRhKHByb3BzLmZvclBrKTtcclxuICAgIHZhciBzb2xvTGVjdHVyYSA9IGdldERhdG9zQnlQYXNzKCkuc29sb0xlY3R1cmE7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgZXNWb2x2ZXIgPSBvcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoPjA7XHJcbiAgICB1c2VFZmZlY3QoKCk9PntcclxuICAgICAgICB2YXIgY29udHJvbFNjcm9sbD0oKT0+e1xyXG4gICAgICAgICAgICB2YXIgYXJyaWJhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYXJyaWJhJyk7XHJcbiAgICAgICAgICAgIGlmKGFycmliYSl7XHJcbiAgICAgICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGFycmliYS5zdHlsZSwgJ3Zpc2liaWxpdHknLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICBhcnJpYmEuZWxUb3BWaXNpYmlsaXphciAhPW51bGwgJiYgYXJyaWJhLmVsVG9wVmlzaWJpbGl6YXIgKyAxMCBcclxuICAgICAgICAgICAgICAgICAgICA8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgYWJham8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hYmFqbycpO1xyXG4gICAgICAgICAgICBpZihhYmFqbyl7XHJcbiAgICAgICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGFiYWpvLnN0eWxlLCAndmlzaWJpbGl0eScsIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICBhYmFqby5lbEJvdHRvbVZpc2liaWxpemFyICE9IG51bGwgJiYgYWJham8uZWxCb3R0b21WaXNpYmlsaXphciAtIDIwXHJcbiAgICAgICAgICAgICAgICAgICAgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wICsgd2luZG93LmlubmVySGVpZ2h0ICogMC43ID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGNvbnRyb2xTY3JvbGwpO1xyXG4gICAgICAgIGNvbnRyb2xTY3JvbGwoKTtcclxuICAgICAgICByZXR1cm4gKCk9PntcclxuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGNvbnRyb2xTY3JvbGwpO1xyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbiAgICAvLyBUT0RPIFZvbHZlciBhIHBvbmVyIGVsIG1vdmltaWVudG8gYSBsYSBhY3R1YWxcclxuICAgIHZhciBhY3R1YWw6YW55XHJcbiAgICB2YXIgY29tcGxldG86YW55XHJcbiAgICB2YXIgb25DbGlja1NhbHRhckFjdHVhbCA9ICgpPT57XHJcbiAgICAgICAgdmFyIHt2YXJpYWJsZUFjdHVhbH0gPSBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwge3Jlc3B1ZXN0YTpudWxsLCB2YXJpYWJsZTpOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUywgZm9yUGs6cHJvcHMuZm9yUGt9KTtcclxuICAgICAgICBpZih2YXJpYWJsZUFjdHVhbCl7XHJcbiAgICAgICAgICAgIGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUodmFyaWFibGVBY3R1YWwpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIGxpc3RhTW9kb3M6TW9kb0Rlc3BsaWVndWVbXT1bJ21ldGFkYXRvcycsJ3JlbGV2YW1pZW50bycsJ1BERiddO1xyXG4gICAgWydib3Rvbi12b2x2ZXItMScsICdib3Rvbi12b2x2ZXItMiddLmZvckVhY2goaWQ9PntcclxuICAgICAgICByZWdpc3RyYXJFbGVtZW50byh7aWQsIGRpcmVjdDp0cnVlLFxyXG4gICAgICAgICAgICBmdW46KFxyXG4gICAgICAgICAgICAgICAgcjpSZXNwdWVzdGFzLCBcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudG86SFRNTERpdkVsZW1lbnQsIFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tBbGw6e1tmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+fSwgXHJcbiAgICAgICAgICAgICAgICBfZXN0cnVjdHVyYTpFc3RydWN0dXJhXHJcbiAgICAgICAgICAgICk9PntcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvLnNldEF0dHJpYnV0ZSgncmVzdW1lbi1lc3RhZG8nLGVzVm9sdmVyP2ZlZWRiYWNrRm9ybS5yZXN1bWVuOmNhbGN1bGFyUmVzdW1lblZpdmllbmRhKGZvclBrLCBmZWVkYmFja0FsbCwgcikucmVzdW1lbkVzdGFkbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfSlcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZXNwZWNpYWwgaGF5IHF1ZSBsZWVybG8gZW4gZWwgcGFyc2VyIGRlIGNhc2lsbGVyb3Mgc2kgZXN0byB0ZXJtaW5hIHF1ZWRhbmRvIGFzw61cclxuICAgIHZhciBwYW50YWxsYUNvbXBsZXRhID0gZm9ybXVsYXJpby5lc3BlY2lhbD8ucGFudGFsbGFDb21wbGV0YTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAgPEFwcEJhciBwb3NpdGlvbj1cImZpeGVkXCIgY29sb3I9e3NvbG9MZWN0dXJhPydzZWNvbmRhcnknOidwcmltYXJ5J30+XHJcbiAgICAgICAgICAgICAgICA8VG9vbGJhcj5cclxuICAgICAgICAgICAgICAgICAgICA8QmFycmFEZU5hdmVnYWNpb24gZm9yUGs9e2ZvclBrfSBzb2xvTGVjdHVyYT17c29sb0xlY3R1cmEgfHwgZmFsc2V9IG1vZG9EaXJlY3RvPXtvcGNpb25lcy5tb2RvRGlyZWN0b30vPlxyXG4gICAgICAgICAgICAgICAgPC9Ub29sYmFyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cIm1pbmktY29uc29sZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L0FwcEJhcj5cclxuICAgICAgICAgICAgPG1haW4+XHJcbiAgICAgICAgICAgICAgICA8UGFwZXIgY2xhc3NOYW1lPVwiZm9ybXVsYXJpb1wiIG1vZG8tZGVzcGxpZWd1ZT17bW9kb0Rlc3BsaWVndWV9IHZlci1udW0tb3BjaW9uZXM9e29wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXM/J1NJJzonTk8nfT5cclxuICAgICAgICAgICAgICAgICAgICB7bW9kby5kZW1vPzxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGNvbXBvbmVudD1cInNwYW5cIj5Nb2RvIGRlIGRlc3BsaWVndWU6PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtsaXN0YU1vZG9zLm1hcChtb2RvPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24ga2V5PXttb2RvfSB2YXJpYW50PXttb2RvPT1tb2RvRGVzcGxpZWd1ZT9cImNvbnRhaW5lZFwiOlwib3V0bGluZWRcIn0gb25DbGljaz17XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCk9PmRpc3BhdGNoKGRpc3BhdGNoZXJzLk1PRE9fREVTUExJRUdVRSh7bW9kb0Rlc3BsaWVndWU6bW9kb30pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfT57bW9kb308L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b25Hcm91cD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj46bnVsbH1cclxuICAgICAgICAgICAgICAgICAgICB7cGFudGFsbGFDb21wbGV0YT9udWxsOjxCb3RvblZvbHZlckVuRGl2IGlkPVwiYm90b24tdm9sdmVyLTFcIi8+fVxyXG4gICAgICAgICAgICAgICAgICAgIHtwYW50YWxsYUNvbXBsZXRhP251bGw6PEZvcm11bGFyaW9FbmNhYmV6YWRvIGNhc2lsbGVybz17Zm9ybXVsYXJpb30vPn1cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvIGJsb3F1ZU9Gb3JtdWxhcmlvPXtmb3JtdWxhcmlvfSBmb3JtdWxhcmlvPXtmb3JtdWxhcmlvfSBmb3JQaz17Zm9yUGt9IG11bHRpcGxlPXtmYWxzZX0vPlxyXG4gICAgICAgICAgICAgICAgICAgIHtwYW50YWxsYUNvbXBsZXRhP251bGw6PEJvdG9uVm9sdmVyRW5EaXYgaWQ9XCJib3Rvbi12b2x2ZXItMlwiLz59XHJcbiAgICAgICAgICAgICAgICA8L1BhcGVyPlxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWFjdGl2by1hcnJpYmEnIGNvbG9yPVwicHJpbWFyeVwiIGFyaWEtbGFiZWw9XCJhZGRcIiBvbkNsaWNrPXtvbkNsaWNrU2FsdGFyQWN0dWFsfT5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5LZXlib2FyZEFycm93VXAgLz5cclxuICAgICAgICAgICAgICAgIDwvRmFiPlxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWFjdGl2by1hYmFqbycgY29sb3I9XCJwcmltYXJ5XCIgYXJpYS1sYWJlbD1cImFkZFwiIG9uQ2xpY2s9e29uQ2xpY2tTYWx0YXJBY3R1YWx9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLktleWJvYXJkQXJyb3dEb3duIC8+XHJcbiAgICAgICAgICAgICAgICA8L0ZhYj5cclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1lcnJvci1hcnJpYmEnIHZhcmlhbnQ9XCJleHRlbmRlZFwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgYXJpYS1sYWJlbD1cImVkaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5OYXZpZ2F0aW9uIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgRXJyb3JcclxuICAgICAgICAgICAgICAgIDwvRmFiPiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1lcnJvci1hYmFqbycgdmFyaWFudD1cImV4dGVuZGVkXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBhcmlhLWxhYmVsPVwiZWRpdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLk5hdmlnYXRpb25Eb3duIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgRXJyb3JcclxuICAgICAgICAgICAgICAgIDwvRmFiPiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdlc3BhY2lvLWZpbmFsLWZvcm11bGFyaW8nPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAge29wY2lvbmVzLm1vZG9Cb3JyYXJSZXNwdWVzdGEgJiYgb3BjaW9uZXMuZm9yUGs/PERlc3BsZWdhckNvbmZpcm1hckJvcnJhclJlc3B1ZXN0YSBmb3JQaz17b3BjaW9uZXMuZm9yUGt9IHZhcmlhYmxlQm9ycmFyPXtvcGNpb25lcy5tb2RvQm9ycmFyUmVzcHVlc3RhfS8+Om51bGx9XHJcbiAgICAgICAgICAgIDwvbWFpbj5cclxuICAgICAgICA8Lz5cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBBdHJpYnV0byhwcm9wczp7bm9tYnJlOnN0cmluZywgdmFsb3I6YW55fSl7XHJcbiAgICByZXR1cm4gcHJvcHMudmFsb3IhPW51bGwgJiYgcHJvcHMudmFsb3IhPScnPzxzcGFuIGNsYXNzTmFtZT1cImF0cmlidXRvLXBhclwiPlxyXG4gICAgICAgIHtwcm9wcy5ub21icmU/PHNwYW4gY2xhc3NOYW1lPVwiYXRyaWJ1dG8tbm9tYnJlXCI+e3Byb3BzLm5vbWJyZX08L3NwYW4+Om51bGx9XHJcbiAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImF0cmlidXRvLXZhbG9yXCI+e3Byb3BzLnZhbG9yLnRvU3RyaW5nKCl9PC9zcGFuPlxyXG4gICAgPC9zcGFuPjpudWxsXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBsaXN0YUVzdGFkb3NDYXJnYTpFc3RhZG9DYXJnYVtdPVsncmVzdW1lbicsJ3JlbGV2YW1pZW50bycsJ3JlY2libyddO1xyXG5leHBvcnQgdmFyIHJlc3VtaWRvcmVzID0gW1xyXG4gICAge25vbWJyZTonUkVBJyAgICAgICAgICwgZjoocnI6UmVzcHVlc3Rhc1JhaXopPT5yci5yZXN1bWVuRXN0YWRvPT1cIm9rXCIgICAgICAgICAgfSxcclxuICAgIHtub21icmU6J0NpdGEgcGFjdGFkYScsIGY6KHJyOlJlc3B1ZXN0YXNSYWl6KT0+cnIucmVzdW1lbkVzdGFkbz09XCJjaXRhIHBhY3RhZGFcIn0sXHJcbiAgICB7bm9tYnJlOidQZW5kaWVudGVzJyAgLCBmOihycjpSZXNwdWVzdGFzUmFpeik9PnJyLnJlc3VtZW5Fc3RhZG89PVwidmFjaW9cIiAgICAgICB9LFxyXG5dO1xyXG5cclxucmVzdW1pZG9yZXMucHVzaChcclxuICAgIHtub21icmU6J090cm9zJywgZjpyZXN1bWlkb3Jlcy5yZWR1Y2UoKGcscik9Pihycj0+IXIuZihycikgJiYgZyhycikgKSwoXzpSZXNwdWVzdGFzUmFpeik9PnRydWUpIH1cclxuKVxyXG5cclxuZXhwb3J0IHR5cGUgRGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWxUeXBlID0gKHByb3BzOntcclxuICAgIG51bVZpdmllbmRhOklkRW5jLFxyXG4gICAgZm9ybVByaW5jaXBhbDpJZEZvcm11bGFyaW8sXHJcbiAgICB0YXJlYTogc3RyaW5nLFxyXG4gICAgcmVzcHVlc3RhczpSZXNwdWVzdGFzUmFpeixcclxufSk9PkpTWC5FbGVtZW50O1xyXG5cclxuZXhwb3J0IHZhciBEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbDogRGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWxUeXBlXHJcblxyXG5leHBvcnQgY29uc3Qgc2V0RGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWwgPSAobGluZWFSZXN1bWVuVUFQcmluY2lwYWw6RGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWxUeXBlKT0+RGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWwgPSBsaW5lYVJlc3VtZW5VQVByaW5jaXBhbDtcclxuXHJcbnNldERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsKChwcm9wczp7XHJcbiAgICBudW1WaXZpZW5kYTpJZEVuYyxcclxuICAgIGZvcm1QcmluY2lwYWw6SWRGb3JtdWxhcmlvLFxyXG4gICAgdGFyZWE6IHN0cmluZyxcclxuICAgIHJlc3B1ZXN0YXM6UmVzcHVlc3Rhc1JhaXosXHJcbn0pPT57XHJcbiAgICBjb25zdCB7bnVtVml2aWVuZGEsIHJlc3B1ZXN0YXMsIGZvcm1QcmluY2lwYWwsIHRhcmVhfSA9IHByb3BzO1xyXG4gICAgY29uc3QgaWQ9J3Zpdi0nK251bVZpdmllbmRhO1xyXG4gICAgY29uc3QgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIGNvbnN0IGZvclBrOkZvclBrPXtmb3JtdWxhcmlvOmZvcm1QcmluY2lwYWwsIFtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdOk51bWJlcihudW1WaXZpZW5kYSkgYXMgSWRFbmN9IGFzIEZvclBrOyAvL25vIHF1aXRhciBlbCBjYXN0ZW8gcG9ycXVlIHZpZW5lIGNvbW8gdGV4dG8geSBuZWNlc2l0byBxdWUgc2VhIG7Dum1lcm9cclxuICAgIHZhciB0ZW0gPSBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW251bVZpdmllbmRhXS50ZW07XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB1c2VFZmZlY3QoKCk9PntcclxuICAgICAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrKTtcclxuICAgICAgICBpbnRlbnRhckJhY2t1cChmb3JQaylcclxuICAgIH0pXHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7aWQsIGRpcmVjdDp0cnVlLFxyXG4gICAgICAgIGZ1bjooXHJcbiAgICAgICAgICAgIHI6UmVzcHVlc3RhcywgXHJcbiAgICAgICAgICAgIF9mZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBcclxuICAgICAgICAgICAgZWxlbWVudG86SFRNTERpdkVsZW1lbnQsIFxyXG4gICAgICAgICAgICBmZWVkYmFja0FsbDp7W2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj59LCBcclxuICAgICAgICAgICAgX2VzdHJ1Y3R1cmE6RXN0cnVjdHVyYVxyXG4gICAgICAgICk9PntcclxuICAgICAgICAgICAgLy9wcmVndW50byBzaSBlcyBsYSBtaXNtYSB2aXZpZW5kYSBwb3JxdWUgbGEgZnVuY2lvbiBzZSBkaXNwYXJhIFxyXG4gICAgICAgICAgICAvL2NvbiB0b2RhcyBsYXMgY29tYmluYWNpb25lcyBkZSByZXNwdWVzdGFzIHBhcmEgY2FkYSBmb3JQa1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgdml2aWVuZGEgZXhpc3RlXHJcbiAgICAgICAgICAgIGlmKHJbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSA9PSBmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKXtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvLnNldEF0dHJpYnV0ZSgncmVzdW1lbi1lc3RhZG8nLGNhbGN1bGFyUmVzdW1lblZpdmllbmRhKGZvclBrLCBmZWVkYmFja0FsbCwgcikucmVzdW1lbkVzdGFkbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgfSlcclxuICAgIHJldHVybiA8VGFibGVSb3cga2V5PXtudW1WaXZpZW5kYX0+XHJcbiAgICAgICAgPFRhYmxlQ2VsbD5cclxuICAgICAgICAgICAge3RlbT9cclxuICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhclRlbSB0ZW09e3RlbX0vPlxyXG4gICAgICAgICAgICAgICAgICAgIHtyZXNwdWVzdGFzWydyZXN1bWVuRXN0YWRvJyBhcyBJZFZhcmlhYmxlXT09XCJjaXRhIHBhY3RhZGFcIj9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNpdGFQYWN0YWRhIHJlc3B1ZXN0YXM9e3Jlc3B1ZXN0YXN9Lz5cclxuICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJDaXRhUGFjdGFkYVlTZWxlY2Npb25hZG9BbnRlcmlvclRlbSB0ZW09e3RlbX0vPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICA6bnVsbH1cclxuICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICA8VGFibGVDZWxsPlxyXG4gICAgICAgICAgICB7dGFyZWF9XHJcbiAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgPFRhYmxlQ2VsbD5cclxuICAgICAgICAgICAgPEJ1dHRvbiBpZD17aWR9IG9uQ2xpY2s9eygpPT4gXHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oe2ZvclBrLCBhcGlsYXJWdWVsdGE6ZmFsc2V9KSlcclxuICAgICAgICAgICAgfT5cclxuICAgICAgICAgICAgICAgIHtudW1WaXZpZW5kYS50b1N0cmluZygpfVxyXG4gICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgIDwvVGFibGVSb3c+XHJcbn0pO1xyXG5cclxuZXhwb3J0IHR5cGUgRGVzcGxlZ2FyQ2FyZ2FUeXBlID0gKHByb3BzOntcclxuICAgIGNhcmdhOkNhcmdhLCBcclxuICAgIGlkQ2FyZ2E6SWRDYXJnYSwgXHJcbiAgICBwb3NpY2lvbjpudW1iZXIsXHJcbiAgICBpbmZvcm1hY2lvbkhkcjpJbmZvcm1hY2lvbkhkciwgXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFMYXNVQSxcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOntcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiBcclxuICAgIH1cclxufSk9PkpTWC5FbGVtZW50O1xyXG5cclxuZXhwb3J0IHZhciBEZXNwbGVnYXJDYXJnYTogRGVzcGxlZ2FyQ2FyZ2FUeXBlXHJcblxyXG5leHBvcnQgY29uc3Qgc2V0RGVzcGxlZ2FyQ2FyZ2EgPSAoZGVzcGxpZWd1ZUNhcmdhOkRlc3BsZWdhckNhcmdhVHlwZSk9PkRlc3BsZWdhckNhcmdhID0gZGVzcGxpZWd1ZUNhcmdhO1xyXG5cclxuc2V0RGVzcGxlZ2FyQ2FyZ2EoKHByb3BzOntcclxuICAgIGNhcmdhOkNhcmdhLCBcclxuICAgIGlkQ2FyZ2E6SWRDYXJnYSwgXHJcbiAgICBwb3NpY2lvbjpudW1iZXIsXHJcbiAgICBpbmZvcm1hY2lvbkhkcjpJbmZvcm1hY2lvbkhkciwgXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFMYXNVQSxcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOntcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiBcclxuICAgIH1cclxufSk9PntcclxuICAgIGNvbnN0IFtuZXdTdXJ2ZXksIHNldE5ld1N1cnZleV0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IHtjYXJnYSwgaWRDYXJnYSwgaW5mb3JtYWNpb25IZHIsIHJlc3B1ZXN0YXN9ID0gcHJvcHM7XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIGxldCBjYW50TGluZWFzUmVzdW1lbiA9IGxpa2VBcihpbmZvcm1hY2lvbkhkcikuZmlsdGVyKChpbmZvcm1hY2lvbik9PmluZm9ybWFjaW9uLnRlbS5jYXJnYT09aWRDYXJnYSkuYXJyYXkoKS5sZW5ndGg7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICByZXR1cm4gPFBhcGVyIGNsYXNzTmFtZT1cImNhcmdhXCIgc3R5bGU9e3ttYXJnaW5Cb3R0b206ICcxMHB4JywgcGFkZGluZzogJzEwcHgnfX0+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbmZvcm1hY2lvbi1jYXJnYVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmdhXCI+w4FyZWE6IHtpZENhcmdhfTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm9ic2VydmFjaW9uZXNcIj57Y2FyZ2Eub2JzZXJ2YWNpb25lc308L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImluZm9ybWFjaW9uLWNhcmdhXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmVjaGFcIj57Y2FyZ2EuZmVjaGF9PC9kaXY+XHJcbiAgICAgICAgICAgIHsvKlxyXG4gICAgICAgICAgICA8QnV0dG9uR3JvdXA+XHJcbiAgICAgICAgICAgIHtsaXN0YUVzdGFkb3NDYXJnYS5tYXAoZXN0YWRvX2NhcmdhPT5cclxuICAgICAgICAgICAgICAgIDxCdXR0b24ga2V5PXtlc3RhZG9fY2FyZ2F9IHZhcmlhbnQ9e2VzdGFkb19jYXJnYT09Y2FyZ2EuZXN0YWRvX2NhcmdhP1wiY29udGFpbmVkXCI6XCJvdXRsaW5lZFwifSBvbkNsaWNrPXtcclxuICAgICAgICAgICAgICAgICAgICAoKT0+ZGlzcGF0Y2goZGlzcGF0Y2hlcnMuRVNUQURPX0NBUkdBKHtpZENhcmdhLCBlc3RhZG9fY2FyZ2F9KSlcclxuICAgICAgICAgICAgICAgIH0+e2VzdGFkb19jYXJnYX08L0J1dHRvbj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPC9CdXR0b25Hcm91cD5cclxuICAgICAgICAgICAgKi99XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAge2NhcmdhLmVzdGFkb19jYXJnYT09bnVsbCAmJiAhcHJvcHMucG9zaWNpb24gfHwgY2FyZ2EuZXN0YWRvX2NhcmdhPT0ncmVsZXZhbWllbnRvJz9cclxuICAgICAgICA8VGFibGUgY2xhc3NOYW1lPVwidGFibGEtY2FyZ2EtaG9qYS1kZS1ydXRhXCI+XHJcbiAgICAgICAgICAgIDxjb2xncm91cD5cclxuICAgICAgICAgICAgICAgIDxjb2wgc3R5bGU9e3t3aWR0aDpcIjc1JVwifX0vPlxyXG4gICAgICAgICAgICAgICAgPGNvbCBzdHlsZT17e3dpZHRoOlwiMTAlXCJ9fS8+ICAgIFxyXG4gICAgICAgICAgICAgICAgPGNvbCBzdHlsZT17e3dpZHRoOlwiMTUlXCJ9fS8+ICAgIFxyXG4gICAgICAgICAgICA8L2NvbGdyb3VwPlxyXG4gICAgICAgICAgICB7Y2FudExpbmVhc1Jlc3VtZW4/XHJcbiAgICAgICAgICAgICAgICA8VGFibGVIZWFkIHN0eWxlPXt7Zm9udFNpemU6IFwiMS4ycmVtXCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICA8VGFibGVSb3cgY2xhc3NOYW1lPVwidHItY2FyZ2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbD5kb21pY2lsaW88L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbD50YXJlYTwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsPmVuYzwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvVGFibGVSb3c+XHJcbiAgICAgICAgICAgICAgICA8L1RhYmxlSGVhZD5cclxuICAgICAgICAgICAgOm51bGx9XHJcbiAgICAgICAgICAgIDxUYWJsZUJvZHk+XHJcbiAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAge2xpa2VBcihpbmZvcm1hY2lvbkhkcikuZmlsdGVyKChpbmZvcm1hY2lvbik9PmluZm9ybWFjaW9uLnRlbS5jYXJnYT09aWRDYXJnYSkubWFwKChpbmZvcm1hY2lvbiwgbnVtVml2aWVuZGEpPT5cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17bnVtVml2aWVuZGF9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBudW1WaXZpZW5kYT17bnVtVml2aWVuZGF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhPXtpbmZvcm1hY2lvbi50YXJlYS50YXJlYX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVByaW5jaXBhbD17aW5mb3JtYWNpb24udGFyZWEubWFpbl9mb3JtfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzPXtyZXNwdWVzdGFzW2VzdHJ1Y3R1cmEudWFQcGFsXVtudW1WaXZpZW5kYV0gYXMgUmVzcHVlc3Rhc1JhaXp9XHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICkuYXJyYXkoKX1cclxuICAgICAgICAgICAgICAgIHtlc3RydWN0dXJhLnBlcm1pdGVHZW5lcmFyTXVlc3RyYT9cclxuICAgICAgICAgICAgICAgICAgICA8VGFibGVSb3cgY2xhc3NOYW1lPVwidHItY2FyZ2EtbnVldm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbCBjb2xTcGFuPXszfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXJFbmN1ZXN0YShpZENhcmdhLChmb3JQa1JhaXo6Rm9yUGtSYWl6KT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ0FNQklBUl9GT1JNVUxBUklPKHtmb3JQazpmb3JQa1JhaXosIGFwaWxhclZ1ZWx0YTpmYWxzZX0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uQWRkLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlUm93PlxyXG4gICAgICAgICAgICAgICAgOm51bGx9XHJcbiAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgPC9UYWJsZUJvZHk+XHJcbiAgICAgICAgPC9UYWJsZT46XHJcbiAgICAgICAgPFRhYmxlPlxyXG4gICAgICAgICAgICA8VGFibGVIZWFkIHN0eWxlPXt7Zm9udFNpemU6IFwiMS4ycmVtXCJ9fT5cclxuICAgICAgICAgICAgICAgIDxUYWJsZVJvdyBjbGFzc05hbWU9XCJ0ci1jYXJnYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtyZXN1bWlkb3Jlcy5tYXAoKHJlc3VtaWRvcjogdHlwZW9mIHJlc3VtaWRvcmVzWzBdLCBpOm51bWJlcik9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsIGtleT17aX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVzdW1pZG9yLm5vbWJyZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgIDwvVGFibGVSb3c+XHJcbiAgICAgICAgICAgIDwvVGFibGVIZWFkPlxyXG4gICAgICAgIDwvVGFibGU+XHJcbiAgICAgICAgfVxyXG4gICAgPC9QYXBlcj5cclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRGVzcGxlZ2FyQ2l0YVBhY3RhZGEocHJvcHM6e3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhc30pe1xyXG4gICAgY29uc3Qge3Jlc3B1ZXN0YXN9ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJjaXRhLXBhY3RhZGFcIj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJDaXRhIHBhY3RhZGEgY29uIFwiIHZhbG9yPXtyZXNwdWVzdGFzW3AxMl19Lz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJDZWwuOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwMl19Lz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJUZWwuOlwiIHZhbG9yPXtyZXNwdWVzdGFzW3NwM119Lz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJGZWNoYTpcIiB2YWxvcj17cmVzcHVlc3Rhc1tzcDRdfS8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiSG9yYTpcIiB2YWxvcj17cmVzcHVlc3Rhc1tzcDVdfS8+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhckNpdGFQYWN0YWRhWVNlbGVjY2lvbmFkb0FudGVyaW9yVGVtKHByb3BzOnt0ZW06VEVNfSl7XHJcbiAgICBjb25zdCB7dGVtfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxkaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZW0tY2l0YVwiPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiQ2l0YTpcIiB2YWxvcj17dGVtLmNpdGF9Lz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRGVzcGxlZ2FyVGVtKHByb3BzOnt0ZW06VEVNfSl7XHJcbiAgICBjb25zdCB7dGVtfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxkaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZW0tZG9taWNpbGlvXCI+e3RlbS5ub21jYWxsZX0ge3RlbS5ucm9jYXRhc3RyYWx9IDxBdHJpYnV0byBub21icmU9XCJwaXNvXCIgdmFsb3I9e3RlbS5waXNvfS8+IDxBdHJpYnV0byBub21icmU9XCJkcHRvXCIgdmFsb3I9e3RlbS5kZXBhcnRhbWVudG99Lz4gPC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cInNlY3RvclwiIHZhbG9yPXt0ZW0uc2VjdG9yfS8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJlZGlmaWNpb1wiIHZhbG9yPXt0ZW0uZWRpZmljaW99Lz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImNhc2FcIiB2YWxvcj17dGVtLmNhc2F9Lz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImVudHJhZGFcIiB2YWxvcj17dGVtLmVudHJhZGF9Lz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImhhYml0YWNpb25cIiB2YWxvcj17dGVtLmhhYml0YWNpb259Lz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRlbS1vYnNlcnZhY2lvbmVzXCI+XHJcbiAgICAgICAgICAgIHt0ZW0ub2JzZXJ2YWNpb25lc30gXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgSG9qYURlUnV0YURlc3BsaWVndWVUeXBlID0gKHByb3BzOnt9KT0+SlNYLkVsZW1lbnQ7XHJcblxyXG5leHBvcnQgdmFyIEhvamFEZVJ1dGFEZXNwbGllZ3VlOiBIb2phRGVSdXRhRGVzcGxpZWd1ZVR5cGVcclxuXHJcbmV4cG9ydCBjb25zdCBzZXRIb2phRGVSdXRhRGVzcGxpZWd1ZSA9IChob2phRGVSdXRhOkhvamFEZVJ1dGFEZXNwbGllZ3VlVHlwZSk9PkhvamFEZVJ1dGFEZXNwbGllZ3VlID0gaG9qYURlUnV0YVxyXG5cclxuc2V0SG9qYURlUnV0YURlc3BsaWVndWUoKF9wcm9wczp7fSk9PntcclxuICAgIHZhciB7Y2FyZ2FzLCBudW1fc2luY3JvLCBpbmZvcm1hY2lvbkhkciwgcmVzcHVlc3Rhc30gPSBnZXREYXRvc0J5UGFzcygpO1xyXG4gICAgdmFyIHttb2RvfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTpDYXNvU3RhdGUpPT4oe21vZG86c3RhdGUubW9kb30pKTtcclxuICAgIHZhciBmZWVkYmFja1Jvd1ZhbGlkYXRvciA9IGdldEZlZWRiYWNrUm93VmFsaWRhdG9yKClcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IHVwZGF0ZU9ubGluZVN0YXR1cyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgc2V0T25saW5lKHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGFwcFZlcnNpb24gPSBnZXRDYWNoZVZlcnNpb24oKTtcclxuICAgIGNvbnN0IFtvbmxpbmUsIHNldE9ubGluZV0gPSB1c2VTdGF0ZSh3aW5kb3cubmF2aWdhdG9yLm9uTGluZSk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgIHVwZGF0ZU9ubGluZVN0YXR1cyk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIHVwZGF0ZU9ubGluZVN0YXR1cyk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxBcHBCYXIgcG9zaXRpb249XCJmaXhlZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRvb2xiYXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImg2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEhvamEgZGUgcnV0YVxyXG4gICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy88SWNvbkJ1dHRvbiBzdHlsZT17e21hcmdpblRvcDonM3B4J319XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAvL29uQ2xpY2s9ey8qZGlzcGF0Y2ggcXVlIGxsZXZhIGEgcGFudGFsbGEgb3BjaW9uZXMqL31cclxuICAgICAgICAgICAgICAgICAgICAvLz5cclxuICAgICAgICAgICAgICAgICAgICAvLyAgICA8SUNPTi5TZXR0aW5ncy8+XHJcbiAgICAgICAgICAgICAgICAgICAgLy88L0ljb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHtvbmxpbmU/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290b1NpbmNyb25pemFyKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLlN5bmNBbHQvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICA6bnVsbH1cclxuICAgICAgICAgICAgICAgIDwvVG9vbGJhcj5cclxuICAgICAgICAgICAgPC9BcHBCYXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaG9qYS1kZS1ydXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7bW9kby5kZW1vPzxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+TW9kbyBkZW1vIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGNvbG9yPVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCk9PmRpc3BhdGNoKGRpc3BhdGNoZXJzLlJFSU5JQ0lBUl9ERU1PKHt9KSl9XHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWluaWNpYXJcclxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PjpudWxsfVxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJub21icmUtdmVyc2lvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+RGlyZWNjacOzbiBHZW5lcmFsIGRlIEVzdGFkw61zdGljYSB5IENlbnNvcyAtIEMuQS5CLkEuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj57bXkuZ2V0TG9jYWxWYXIoJ2FwcC12ZXJzaW9uJyl9IHNpbmNybyB7bnVtX3NpbmNyb30gLSB2ZXJzacOzbiB7YXBwVmVyc2lvbn08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAge2xpa2VBcihjYXJnYXMpLm1hcCgoY2FyZ2EsIGlkQ2FyZ2EsIF8sIHBvc2ljaW9uKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNhcmdhIGtleT17aWRDYXJnYX0gY2FyZ2E9e2NhcmdhfSBpZENhcmdhPXtpZENhcmdhfSBwb3NpY2lvbj17cG9zaWNpb259IGluZm9ybWFjaW9uSGRyPXtpbmZvcm1hY2lvbkhkcn0gZmVlZGJhY2tSb3dWYWxpZGF0b3I9e2ZlZWRiYWNrUm93VmFsaWRhdG9yfSByZXNwdWVzdGFzPXtyZXNwdWVzdGFzfS8+XHJcbiAgICAgICAgICAgICAgICApLmFycmF5KCl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvPlxyXG4gICAgKTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gTGlzdGFUZXh0b3MocHJvcHM6e3RleHRvczpzdHJpbmdbXX0pe1xyXG4gICAgcmV0dXJuIDx1bD5cclxuICAgICAgICB7cHJvcHMudGV4dG9zLm1hcCh0PT48bGk+PFR5cG9ncmFwaHk+e3R9PC9UeXBvZ3JhcGh5PjwvbGk+KX1cclxuICAgIDwvdWw+O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQmllbnZlbmlkYURlc3BsaWVndWUocHJvcHM6e21vZG86Q2Fzb1N0YXRlW1wibW9kb1wiXX0pe1xyXG4gICAgY29uc3QgZGlzcGF0Y2g9dXNlRGlzcGF0Y2goKTtcclxuICAgIHJldHVybiA8UGFwZXIgY2xhc3NOYW1lPVwiYmllbnZlbmlkYVwiPlxyXG4gICAgICAgIHtwcm9wcy5tb2RvLmRlbW8/XHJcbiAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5ERU1PIGRlbCBzaXN0ZW1hIGRlIHJlbGV2YW1pZW50byBkZSBETUVOQ1U8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5FbiBlc3RhIGRlbW86PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPExpc3RhVGV4dG9zIHRleHRvcz17W1xyXG4gICAgICAgICAgICAgICAgICAgIFwiQWxndW5hcyB2aXZpZW5kYXMgYXBhcmVjZW4gcmVsZXZhZGFzIChlbCBib3TDs24gZXN0w6EgZGUgY29sb3IpIHNpcnZlbiBkZSBlamVtcGxvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJMbyBxdWUgc2UgY2FyZ3VlbiBzZSBndWFyZGFuIGxvY2FsbWVudGUgcGVybyBubyBzZSB0cmFzbWl0ZW4gYSBsYSBiYXNlIGRlIGRhdG9zXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJTZSBwdWVkZSB2b2x2ZXIgYSBsYSB2ZXJzacOzbiBpbmljaWFsIChvIHNlYSBib3JyYXIgbG8gcXVlIHNlIGd1YXJkw7MgbG9jYWxtZW50ZSkgZGVzZGUgbGEgaG9qYSBkZSBydXRhIGJvdG9uIFtyZWluaWNpYXIgZGVtb11cIixcclxuICAgICAgICAgICAgICAgICAgICBcIlRvZGF2w61hIGhheSBjb3NhcyBxdWUgZmFsdGFuIG8gcHVlZGVuIGNhbWJpYXJcIixcclxuICAgICAgICAgICAgICAgIF19IC8+XHJcbiAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICA6PD5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PkVuY3Vlc3RhIGRlIFNlcm9wcmV2YWxlbmNpYSBkZSBDT1ZJRC0xOTwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgIGNvbG9yPVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgb25DbGljaz17KCk9PnsgZ290b1NpbmNyb25pemFyKCk7IH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3Bhbj5TaW5jcm9uaXphciA8L3NwYW4+IDxJQ09OLlN5bmNBbHQvPlxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXHJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpPT5kaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHtvcGNpb246J2JpZW52ZW5pZG8nLCB2YWxvcjp0cnVlfSkpfVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4+Q29udGludWFyIDwvc3Bhbj4gPElDT04uU2VuZC8+XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICA8L1BhcGVyPlxyXG59XHJcblxyXG4vL0NPTlRST0wgREUgUEVTVEHDkUFTXHJcbnZhciBhbGxPcGVuZWRUYWJzOntbeDpzdHJpbmddOm51bWJlcn09e307XHJcbnZhciBpbmZvT3BlbmVkVGFicz17XHJcbiAgICBhbGxPcGVuZWRUYWJzLFxyXG4gICAgbXlJZDonY2FsY3VsYW5kby4uLicsXHJcbiAgICBvdGhlclRhYnNOYW1lczonJ1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gT3BlbmVkVGFicygpe1xyXG4gICAgY29uc3QgW3RhYnMsIHNldFRhYnNdID0gdXNlU3RhdGUoaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXMpO1xyXG4gICAgdmFyIHttb2RvRGlyZWN0b30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+KHttb2RvRGlyZWN0bzpzdGF0ZS5vcGNpb25lcy5tb2RvRGlyZWN0b30pKTtcclxuICAgIGNvbnN0IHVwZGF0ZVRhYnNTdGF0dXMgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgIHNldFRhYnMoaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXMpO1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpPT57XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ215LXRhYnMnLHVwZGF0ZVRhYnNTdGF0dXMpO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbXktdGFicycsdXBkYXRlVGFic1N0YXR1cyk7XHJcbiAgICB9LFtdKVxyXG4gICAgcmV0dXJuIG1vZG9EaXJlY3RvP251bGw6KHRhYnMpP1xyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGFiLWNvdW50ZXIgdGFiLWVycm9yXCI+wqFBVEVOQ0nDk04hIEhheSBtw6FzIGRlIHVuYSB2ZW50YW5hIGFiaWVydGEuIFNlIHB1ZWRlbiBwZXJkZXIgZGF0b3M6IHt0YWJzfTwvZGl2PlxyXG4gICAgOlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGFiLWNvdW50ZXJcIj7inJQ8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEFwcERtRW5jdSgpe1xyXG4gICAgdmFyIHtmb3JQaywgYmllbnZlbmlkbywgbW9kb30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+KHsuLi5zdGF0ZS5vcGNpb25lcywgLi4uc3RhdGUubW9kbywgLi4uc3RhdGV9KSk7XHJcbiAgICBpZighYmllbnZlbmlkbyl7XHJcbiAgICAgICAgcmV0dXJuIDxCaWVudmVuaWRhRGVzcGxpZWd1ZSBtb2RvPXttb2RvfS8+IFxyXG4gICAgfWVsc2UgaWYoZm9yUGs9PW51bGwpe1xyXG4gICAgICAgIHJldHVybiA8SG9qYURlUnV0YURlc3BsaWVndWUgLz4gXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICByZXR1cm4gPEZvcm11bGFyaW9EZXNwbGllZ3VlIGZvclBrPXtmb3JQa30vPlxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBQYW50YWxsYUluaWNpYWxTaW5DYXJnYShfcHJvcHM6e30pe1xyXG4gICAgY29uc3QgdXBkYXRlT25saW5lU3RhdHVzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICBzZXRPbmxpbmUod2luZG93Lm5hdmlnYXRvci5vbkxpbmUpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgW29ubGluZSwgc2V0T25saW5lXSA9IHVzZVN0YXRlKHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCAgdXBkYXRlT25saW5lU3RhdHVzKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgdXBkYXRlT25saW5lU3RhdHVzKTtcclxuICAgIGNvbnN0IHBhcmFncmFwaFN0eWxlcz17Zm9udFNpemU6XCIxLjJyZW1cIiwgZm9udFdlaWdodDo2MDAsIHBhZGRpbmc6IFwiNXB4IDEwcHhcIn07XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIDxBcHBCYXIgcG9zaXRpb249XCJmaXhlZFwiPlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImg2XCIgc3R5bGU9e3ttYXJnaW46MjV9fT5cclxuICAgICAgICAgICAgICAgICAgICBEaXNwb3NpdGl2byBzaW4gY2FyZ2FcclxuICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgPC9BcHBCYXI+XHJcbiAgICAgICAgICAgIDxtYWluPlxyXG4gICAgICAgICAgICAgICAgPFBhcGVyIHN0eWxlPXt7aGVpZ2h0Oic2MDBweCcsIHBhZGRpbmc6XCIxNXB4XCIsIG1hcmdpblRvcDo3NX19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtvbmxpbmU/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGNvbXBvbmVudD1cInBcIiBzdHlsZT17cGFyYWdyYXBoU3R5bGVzfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2luY3Jvbml6YXIgZGlzcG9zaXRpdm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3twYWRkaW5nOic1cHgnfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvU2luY3Jvbml6YXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uU3luY0FsdC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJwXCIgc3R5bGU9e3BhcmFncmFwaFN0eWxlc30+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gaGF5IGNvbmV4acOzbiBhIGludGVybmV0LCBwb3IgZmF2b3IgY29uw6ljdGUgZWwgZGlzcG9zaXRpdm8gYSB1bmEgcmVkIHBhcmEgc2luY3Jvbml6YXIgdW5hIGhvamEgZGUgcnV0YS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9QYXBlcj5cclxuICAgICAgICAgICAgPC9tYWluPlxyXG4gICAgICAgIDwvPlxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFBhbnRhbGxhSW5pY2lhbCgpe1xyXG4gICAgdmFyIHtmb3JQaywgYmllbnZlbmlkbywgbW9kb30gPSB1c2VTZWxlY3Rvcigoc3RhdGU6Q2Fzb1N0YXRlKT0+KHsuLi5zdGF0ZS5vcGNpb25lcywgLi4uc3RhdGUubW9kbywgLi4uc3RhdGV9KSk7XHJcbiAgICBpZighYmllbnZlbmlkbyl7XHJcbiAgICAgICAgcmV0dXJuIDxCaWVudmVuaWRhRGVzcGxpZWd1ZSBtb2RvPXttb2RvfS8+IFxyXG4gICAgfWVsc2UgaWYoZm9yUGs9PW51bGwpe1xyXG4gICAgICAgIHJldHVybiA8SG9qYURlUnV0YURlc3BsaWVndWUgLz4gXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICByZXR1cm4gPEZvcm11bGFyaW9EZXNwbGllZ3VlIGZvclBrPXtmb3JQa30vPlxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG1QYW50YWxsYUluaWNpYWxTaW5DYXJnYSgpe1xyXG4gICAgdHJ5e1xyXG4gICAgICAgIGF3YWl0IGxvYWRDU1MoQk9PVFNUUkFQXzVfMV8zX1NSQyk7XHJcbiAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICB0aHJvdyhlcnIpXHJcbiAgICB9XHJcbiAgICBSZWFjdERPTS5yZW5kZXIoXHJcbiAgICAgICAgPFBhbnRhbGxhSW5pY2lhbFNpbkNhcmdhLz4sXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JylcclxuICAgIClcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwob3B0czp7bW9kb0RlbW86Ym9vbGVhbiwgZm9yUGtSYWl6PzpGb3JQa1JhaXosIG9wZXJhdGl2bzpJZE9wZXJhdGl2b30pe1xyXG4gICAgLy8gdHJhZXIgbG9zIG1ldGFkYXRvcyBlbiB1bmEgXCJlc3RydWN0dXJhXCJcclxuICAgIC8vIHRyYWVyIGxvcyBkYXRvcyBkZSBsb2NhbFN0b3JhZ2VcclxuICAgIC8vIHZlcmlmaWNhciBlbCBtYWluIExheW91dFxyXG4gICAgY29uc3Qgc3RvcmUgPSBhd2FpdCBkbVRyYWVyRGF0b3NGb3JtdWxhcmlvKG9wdHMpXHJcbiAgICB0cnl7XHJcbiAgICAgICAgYXdhaXQgbG9hZENTUyhCT09UU1RSQVBfNV8xXzNfU1JDKTtcclxuICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIHRocm93KGVycilcclxuICAgIH1cclxuICAgIFJlYWN0RE9NLnJlbmRlcihcclxuICAgICAgICA8UmVuZGVyUHJpbmNpcGFsIHN0b3JlPXtzdG9yZX0gZGlzcGF0Y2hlcnM9e2Rpc3BhdGNoZXJzfSBtZW5zYWplUmV0b3Jubz17b3B0cy5mb3JQa1JhaXo/XCJWb2x2ZXIgYWwgZm9ybXVsYXJpb1wiOlwiVm9sdmVyIGEgbGEgaG9qYSBkZSBydXRhXCJ9PlxyXG4gICAgICAgICAgICA8T3BlbmVkVGFicy8+XHJcbiAgICAgICAgICAgIDxBcHBEbUVuY3UvPlxyXG4gICAgICAgIDwvUmVuZGVyUHJpbmNpcGFsPixcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKVxyXG4gICAgKVxyXG59XHJcblxyXG5pZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyl7XHJcbiAgICAvLyBAdHMtaWdub3JlIHBhcmEgaGFjZXJsb1xyXG4gICAgd2luZG93LmRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwgPSBkZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsO1xyXG4gICAgLy8gQHRzLWlnbm9yZSBwYXJhIGhhY2VybG9cclxuICAgIHdpbmRvdy5kbVBhbnRhbGxhSW5pY2lhbFNpbkNhcmdhID0gZG1QYW50YWxsYUluaWNpYWxTaW5DYXJnYTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGxvYWRJbnN0YW5jZSgpe1xyXG4gICAgaWYodHlwZW9mIEJyb2FkY2FzdENoYW5uZWwgPT09ICd1bmRlZmluZWQnKXtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgYmMgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbCgnY29udGFkb3InKTtcclxuICAgIHZhciBteUlkPVN0cmluZy5mcm9tQ29kZVBvaW50KDEwMCtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMTAwMCkpK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxMDApLy8rJy0nK25ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgYWxsT3BlbmVkVGFic1tteUlkXT0xO1xyXG4gICAgaW5mb09wZW5lZFRhYnMubXlJZD1teUlkO1xyXG4gICAgdmFyIGV2ZW50ID0gbmV3IEV2ZW50KCdteS10YWJzJyk7XHJcbiAgICBiYy5vbm1lc3NhZ2U9ZnVuY3Rpb24oZXYpe1xyXG4gICAgICAgIGlmKGV2LmRhdGEucXVlPT0nc295Jyl7XHJcbiAgICAgICAgICAgIGlmKCFhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdKXtcclxuICAgICAgICAgICAgICAgIGFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF09MDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGV2LmRhdGEucXVlPT0ndW5sb2FkJyl7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhbGxPcGVuZWRUYWJzW2V2LmRhdGEuaWRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihldi5kYXRhLnF1ZT09J2xvYWQnKXtcclxuICAgICAgICAgICAgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXT0xO1xyXG4gICAgICAgICAgICBiYy5wb3N0TWVzc2FnZSh7cXVlOidzb3knLGlkOm15SWR9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5mb09wZW5lZFRhYnMub3RoZXJUYWJzTmFtZXM9bGlrZUFyKGFsbE9wZW5lZFRhYnMpLmZpbHRlcigoXyxpZCk9PmlkIT1teUlkKS5qb2luKCcsJyk7XHJcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgfTtcclxuICAgIGJjLnBvc3RNZXNzYWdlKHtxdWU6J2xvYWQnLGlkOm15SWR9KTtcclxuICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgYmMucG9zdE1lc3NhZ2Uoe3F1ZTondW5sb2FkJyxpZDpteUlkfSk7XHJcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgfSlcclxuICAgIC8vbW9zdHJhclF1aWVuZXNTb21vcygpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0TGlicmVEZXNwbGllZ3VlID0gKGxpYnJlOkxpYnJlRGVzcGxpZWd1ZVR5cGUpPT5MaWJyZURlc3BsaWVndWUgPSBsaWJyZVxyXG5cclxuc2V0TGlicmVEZXNwbGllZ3VlKChwcm9wczp7XHJcbiAgICBrZXk6c3RyaW5nXHJcbiAgICBjYXNpbGxlcm86TGlicmVcclxuICAgIGZvcm11bGFyaW86Rm9ybXVsYXJpb1xyXG4gICAgZm9yUGs6Rm9yUGtcclxufSk9PjxkaXYga2V5PXtwcm9wcy5rZXl9IGlkPXtwcm9wcy5jYXNpbGxlcm8uaWRfY2FzaWxsZXJvfT5lc3RlIGNhc2lsbGVybyBkZWJlIHJlZGVmaW5pcnNlIGVuIGxhIEFQUCBmaW5hbCB5IHN1IHVzbyBlcyBleGNsdXNpdm8gZGVsIMOhcmVhIGluZm9ybcOhdGljYTwvZGl2PilcclxuXHJcbnNldENhbGN1bGFyVmFyaWFibGVzKChyZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeiwgZm9yUGs6Rm9yUGspPT57XHJcbiAgICB0eXBlIENvbmZpZ1BhZHJlID0ge1xyXG4gICAgICAgIHVhUGVyc29uYXM6IElkVW5pZGFkQW5hbGlzaXNcclxuICAgICAgICB2YXJTZXhvUGVyc29uYTogSWRWYXJpYWJsZVxyXG4gICAgICAgIHZhck5vbWJyZVBlcnNvbmE6IElkVmFyaWFibGVcclxuICAgICAgICB2YXJMb3NOb21icmVzOiBJZFZhcmlhYmxlXHJcbiAgICB9XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciBhdXRvQ2FyZ2FyUGVyc29uYXMgPSAoY29uZmlnUGFkcmU6IENvbmZpZ1BhZHJlICx1YVBhZHJlUGVyc29uYXM6SWRVbmlkYWRBbmFsaXNpcywgZXN0cnVjdHVyYTpFc3RydWN0dXJhKT0+e1xyXG4gICAgICAgIHZhciBsZWVyTm9tYnJlcyA9IChyZXNwdWVzdGFzVUFQYWRyZTpSZXNwdWVzdGFzLCBjb25maWdQYWRyZTpDb25maWdQYWRyZSk9PntcclxuICAgICAgICAgICAgaWYoIXJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdIHx8IGVtcHR5KHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdKSB8fCByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXVswXVtjb25maWdQYWRyZS52YXJTZXhvUGVyc29uYV0gPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG9zTm9tYnJlcyA9IHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnZhckxvc05vbWJyZXNdIGFzIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgaWYobG9zTm9tYnJlcyAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBpZighcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc10pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXT1bXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbG9zTm9tYnJlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJywnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChub21icmU6c3RyaW5nKT0+bm9tYnJlLnRyaW0oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgobm9tYnJlOnN0cmluZywgaTpudW1iZXIpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXVtpXSA9IHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdW2ldIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc11baV1bY29uZmlnUGFkcmUudmFyTm9tYnJlUGVyc29uYV0gPSBub21icmUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdWFQYWRyZVBlcnNvbmFzXSl7XHJcbiAgICAgICAgICAgIGlmKHVhUGFkcmVQZXJzb25hcyA9PSAndml2aWVuZGFzJyl7XHJcbiAgICAgICAgICAgICAgICBsZWVyTm9tYnJlcyhyZXNwdWVzdGFzUmFpeixjb25maWdQYWRyZSlcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBmb3IodmFyIHJlc3B1ZXN0YXNVQVBhZHJlIG9mIGl0ZXJhdG9yKHJlc3B1ZXN0YXNSYWl6W3VhUGFkcmVQZXJzb25hc10/P1tdKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVlck5vbWJyZXMocmVzcHVlc3Rhc1VBUGFkcmUsY29uZmlnUGFkcmUpXHJcbiAgICAgICAgICAgICAgICB9ICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgdWFzSXRlcmFyOiB7XHJcbiAgICAgICAgW2tleSBpbiBJZFVuaWRhZEFuYWxpc2lzXTpDb25maWdQYWRyZVxyXG4gICAgfTsgXHJcbiAgICB2YXIgY29uZmlnRW5jdSA6IENvbmZpZ1BhZHJlID0geyBcclxuICAgICAgICB1YVBlcnNvbmFzOiAncGVyc29uYXMnLFxyXG4gICAgICAgIHZhclNleG9QZXJzb25hOiAnc2V4bycgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICB2YXJOb21icmVQZXJzb25hOiAnbm9tYnJlJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhckxvc05vbWJyZXM6IFwibG9zX25vbWJyZXNcIiBhcyBJZFZhcmlhYmxlXHJcbiAgICB9O1xyXG4gICAgdmFyIGNvbmZpZ1N1cGUgOiBDb25maWdQYWRyZSA9IHsgXHJcbiAgICAgICAgdWFQZXJzb25hczogJ3BlcnNvbmFzX3N1cCcgYXMgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgICAgICB2YXJTZXhvUGVyc29uYTogJ3NleG9fc3VwJyAgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICB2YXJOb21icmVQZXJzb25hOiAnbm9tYnJlX3N1cCcgIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgdmFyTG9zTm9tYnJlczogXCJub21icmVzX2NvbXBvbmVudGVzX3N1cFwiICBhcyBJZFZhcmlhYmxlXHJcbiAgICB9O1xyXG5cclxuICAgIGlmKGVzdHJ1Y3R1cmEuY29uUmVhSG9nYXIpe1xyXG4gICAgICAgIHVhc0l0ZXJhciA9IHtcclxuICAgICAgICAgICAgaG9nYXJlczogY29uZmlnRW5jdSxcclxuICAgICAgICAgICAgW1wiaG9nYXJlc19zdXBcIiBhcyBJZFVuaWRhZEFuYWxpc2lzXSA6IGNvbmZpZ1N1cGVcclxuICAgICAgICB9XHJcbiAgICAgICAgbGlrZUFyKHVhc0l0ZXJhcikuZm9yRWFjaCgoY29uZmlnUGFkcmUsdWFQYWRyZSk9PntcclxuICAgICAgICAgICAgYXV0b0NhcmdhclBlcnNvbmFzKGNvbmZpZ1BhZHJlLHVhUGFkcmUsIGVzdHJ1Y3R1cmEpXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0pXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICB2YXIgY29uZmlnUGFkcmVzOiBDb25maWdQYWRyZVtdID0gW2NvbmZpZ0VuY3UsY29uZmlnU3VwZV07XHJcbiAgICAgICAgY29uZmlnUGFkcmVzLmZvckVhY2goKGNvbmZpZ1BhZHJlKT0+e1xyXG4gICAgICAgICAgICBhdXRvQ2FyZ2FyUGVyc29uYXMoY29uZmlnUGFkcmUsJ3ZpdmllbmRhcycsIGVzdHJ1Y3R1cmEpXHJcbiAgICAgICAgfSkgICAgICAgIFxyXG4gICAgfVxyXG4gICAgcmVzcHVlc3Rhc1JhaXoudmRvbWluaW89Z2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXS50ZW0uZG9taW5pbztcclxuICAgIC8vVE9ETzogTUVKT1JBUiBFTiBBTEdVTiBNT01FTlRPIEVMIEJPVE9OIExJU1RPXHJcbiAgICBsZXQgdG90YWxIID0gcmVzcHVlc3Rhc1JhaXpbJ3RvdGFsX2gnIGFzIElkVmFyaWFibGVdO1xyXG4gICAgcmVzcHVlc3Rhc1JhaXpbJyRCLkY6UzEnIGFzIElkVmFyaWFibGVdID0gKHJlc3B1ZXN0YXNSYWl6Wydob2dhcmVzJ10gfHwgW10pLmxlbmd0aCA9PSB0b3RhbEg/J29rJzpudWxsO1xyXG4gICAgbGV0IHRvdGFsSHN1cCA9IHJlc3B1ZXN0YXNSYWl6Wyd0b3RhbF9oX3N1cCcgYXMgSWRWYXJpYWJsZV07XHJcbiAgICByZXNwdWVzdGFzUmFpelsnJEIuRjpTMV9TVVAnIGFzIElkVmFyaWFibGVdID0gKHJlc3B1ZXN0YXNSYWl6Wydob2dhcmVzX3N1cCcgYXMgSWRVbmlkYWRBbmFsaXNpc10gfHwgW10pLmxlbmd0aCA9PSB0b3RhbEhzdXA/J29rJzpudWxsO1xyXG59KVxyXG5cclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpe1xyXG4gICAgbG9hZEluc3RhbmNlKClcclxufSlcclxuLy9GSU4gQ09OVFJPTCBQRVNUQcORQVNcclxuXHJcbmZ1bmN0aW9uIGxvYWRDU1MoY3NzVVJMOnN0cmluZywgaWQ/OnN0cmluZyk6UHJvbWlzZTx2b2lkPntcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoIHJlc29sdmUsIHJlamVjdCApPT57XHJcbiAgICAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnbGluaycgKTtcclxuICAgICAgICBsaW5rLnJlbCAgPSAnc3R5bGVzaGVldCc7XHJcbiAgICAgICAgbGluay5ocmVmID0gY3NzVVJMO1xyXG4gICAgICAgIGxpbmsuaWQgPSBpZCB8fCBjc3NVUkw7XHJcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggbGluayApO1xyXG4gICAgICAgIGxpbmsub25sb2FkID0gKCk9PnsgXHJcbiAgICAgICAgICAgIHJlc29sdmUoKTsgXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGB0cmFlICR7Y3NzVVJMfWApO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGluay5vbmVycm9yPShlcnIpPT57XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciBjYXJnYW5kbyBlbCBlc3RpbG8nLCBlcnIpXHJcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHByb2JsZW1hIGNhcmdhbmRvIGVzdGlsbyAke2Nzc1VSTH1gKSlcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVtb3ZlQ1NTQnlJZChpZDpzdHJpbmcpe1xyXG4gICAgdmFyIGxpbmtOb2RlID0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuICAgIGxpbmtOb2RlPy5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChsaW5rTm9kZSk7XHJcbn1cclxuXHJcbmNvbnN0IEJPT1RTVFJBUF81XzFfM19TUkMgPSAnY3NzL2Jvb3RzdHJhcC5taW4uY3NzJzsiXX0=
|