dmencu 0.3.33 → 0.3.35
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/client/client.d.ts +1 -1
- package/dist/client/client/client.js +538 -538
- package/dist/client/client/menu.js +2 -2
- package/dist/client/unlogged/abrir-formulario.d.ts +12 -12
- package/dist/client/unlogged/abrir-formulario.js +102 -102
- package/dist/client/unlogged/bypass-formulario.d.ts +200 -200
- package/dist/client/unlogged/bypass-formulario.js +1041 -1041
- package/dist/client/unlogged/redux-formulario.d.ts +349 -349
- package/dist/client/unlogged/redux-formulario.js +317 -317
- package/dist/client/unlogged/tipos.d.ts +469 -469
- package/dist/client/unlogged/tipos.js +21 -21
- package/dist/server/server/app-dmencu.d.ts +1511 -1511
- package/dist/server/server/app-dmencu.js +649 -649
- package/dist/server/server/def-config.d.ts +1 -1
- package/dist/server/server/def-config.js +14 -14
- package/dist/server/server/procedures-dmencu.d.ts +6 -6
- package/dist/server/server/procedures-dmencu.js +852 -852
- package/dist/server/server/server-dmencu.d.ts +1 -1
- package/dist/server/server/server-dmencu.js +20 -20
- package/dist/server/server/table-acciones.d.ts +3 -3
- package/dist/server/server/table-acciones.js +53 -53
- package/dist/server/server/table-areas.d.ts +3 -3
- package/dist/server/server/table-areas.js +88 -88
- package/dist/server/server/table-comunas.d.ts +3 -3
- package/dist/server/server/table-comunas.js +28 -28
- package/dist/server/server/table-control_campo.d.ts +11 -11
- package/dist/server/server/table-control_campo.js +71 -71
- package/dist/server/server/table-control_resumen.d.ts +3 -3
- package/dist/server/server/table-control_resumen.js +18 -18
- package/dist/server/server/table-encuestadores.d.ts +3 -3
- package/dist/server/server/table-encuestadores.js +18 -18
- package/dist/server/server/table-estados.d.ts +3 -3
- package/dist/server/server/table-estados.js +59 -60
- package/dist/server/server/table-estados_acciones.d.ts +3 -3
- package/dist/server/server/table-estados_acciones.js +38 -38
- package/dist/server/server/table-hogares.d.ts +3 -3
- package/dist/server/server/table-hogares.js +156 -156
- package/dist/server/server/table-hogares_sup.d.ts +3 -3
- package/dist/server/server/table-hogares_sup.js +191 -191
- package/dist/server/server/table-lotes.d.ts +3 -3
- package/dist/server/server/table-lotes.js +35 -35
- package/dist/server/server/table-mis_encuestadores.d.ts +3 -3
- package/dist/server/server/table-mis_encuestadores.js +56 -56
- package/dist/server/server/table-mis_tareas.d.ts +3 -3
- package/dist/server/server/table-mis_tareas.js +18 -18
- package/dist/server/server/table-mis_tareas_areas.d.ts +3 -3
- package/dist/server/server/table-mis_tareas_areas.js +20 -20
- package/dist/server/server/table-no_rea.d.ts +3 -3
- package/dist/server/server/table-no_rea.js +32 -32
- package/dist/server/server/table-no_rea_sup.d.ts +3 -3
- package/dist/server/server/table-no_rea_sup.js +32 -32
- package/dist/server/server/table-operaciones.d.ts +3 -3
- package/dist/server/server/table-operaciones.js +30 -30
- package/dist/server/server/table-parametros.d.ts +3 -3
- package/dist/server/server/table-parametros.js +39 -39
- package/dist/server/server/table-permisos.d.ts +3 -3
- package/dist/server/server/table-permisos.js +31 -31
- package/dist/server/server/table-personal.d.ts +6 -6
- package/dist/server/server/table-personal.js +56 -56
- package/dist/server/server/table-personal_rol.d.ts +3 -3
- package/dist/server/server/table-personal_rol.js +36 -36
- package/dist/server/server/table-personas.d.ts +3 -3
- package/dist/server/server/table-personas.js +448 -448
- package/dist/server/server/table-personas_sup.d.ts +3 -3
- package/dist/server/server/table-personas_sup.js +93 -93
- package/dist/server/server/table-recepcionistas.d.ts +3 -3
- package/dist/server/server/table-recepcionistas.js +18 -18
- package/dist/server/server/table-recuperadores.d.ts +3 -3
- package/dist/server/server/table-recuperadores.js +18 -18
- package/dist/server/server/table-resultados_tarea.d.ts +3 -3
- package/dist/server/server/table-resultados_tarea.js +28 -28
- package/dist/server/server/table-roles.d.ts +3 -3
- package/dist/server/server/table-roles.js +32 -32
- package/dist/server/server/table-roles_permisos.d.ts +3 -3
- package/dist/server/server/table-roles_permisos.js +35 -35
- package/dist/server/server/table-roles_subordinados.d.ts +3 -3
- package/dist/server/server/table-roles_subordinados.js +32 -32
- package/dist/server/server/table-semanas.d.ts +3 -3
- package/dist/server/server/table-semanas.js +34 -34
- package/dist/server/server/table-sincronizaciones.d.ts +3 -3
- package/dist/server/server/table-sincronizaciones.js +30 -30
- package/dist/server/server/table-supervisores.d.ts +3 -3
- package/dist/server/server/table-supervisores.js +18 -18
- package/dist/server/server/table-tareas.d.ts +3 -3
- package/dist/server/server/table-tareas.js +46 -46
- package/dist/server/server/table-tareas_areas.d.ts +3 -3
- package/dist/server/server/table-tareas_areas.js +55 -55
- package/dist/server/server/table-tareas_tem.d.ts +3 -3
- package/dist/server/server/table-tareas_tem.js +104 -105
- package/dist/server/server/table-tareas_tem_asignables.d.ts +1 -1
- package/dist/server/server/table-tareas_tem_asignables.js +44 -39
- package/dist/server/server/table-tareas_tem_recepcion.d.ts +3 -5
- package/dist/server/server/table-tareas_tem_recepcion.js +33 -43
- package/dist/server/server/table-tem.d.ts +3 -3
- package/dist/server/server/table-tem.js +191 -191
- package/dist/server/server/table-tem_asignacion.d.ts +3 -0
- package/dist/server/server/table-tem_asignacion.js +51 -0
- package/dist/server/server/table-tem_recepcion.d.ts +3 -3
- package/dist/server/server/table-tem_recepcion.js +18 -18
- package/dist/server/server/table-usuarios.d.ts +3 -3
- package/dist/server/server/table-usuarios.js +58 -58
- package/dist/server/server/table-visitas.d.ts +3 -3
- package/dist/server/server/table-visitas.js +91 -91
- package/dist/server/server/table-visitas_sup.d.ts +3 -3
- package/dist/server/server/table-visitas_sup.js +91 -91
- package/dist/server/server/table-viviendas.d.ts +3 -3
- package/dist/server/server/table-viviendas.js +299 -299
- package/dist/server/server/types-dmencu.d.ts +24 -24
- package/dist/server/server/types-dmencu.js +32 -32
- package/dist/server/unlogged/tipos.d.ts +469 -469
- package/dist/server/unlogged/tipos.js +21 -21
- package/dist/unlogged/unlogged/abrir-formulario.d.ts +12 -12
- package/dist/unlogged/unlogged/abrir-formulario.js +102 -102
- package/dist/unlogged/unlogged/adapt.js +7 -7
- package/dist/unlogged/unlogged/bypass-formulario.d.ts +200 -200
- package/dist/unlogged/unlogged/bypass-formulario.js +1041 -1041
- package/dist/unlogged/unlogged/redux-formulario.d.ts +349 -349
- package/dist/unlogged/unlogged/redux-formulario.js +317 -317
- package/dist/unlogged/unlogged/render-formulario.d.ts +54 -54
- package/dist/unlogged/unlogged/render-formulario.js +1485 -1485
- package/dist/unlogged/unlogged/render-general.d.ts +126 -126
- package/dist/unlogged/unlogged/render-general.js +184 -184
- package/dist/unlogged/unlogged/tipos.d.ts +469 -469
- package/dist/unlogged/unlogged/tipos.js +21 -21
- package/dist/unlogged/unlogged/unlogged.d.ts +1 -1
- package/dist/unlogged/unlogged/unlogged.js +162 -162
- package/install/tipoc_tipoc.tab +1 -0
- package/package.json +10 -11
|
@@ -1,318 +1,318 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
(function (factory) {
|
|
11
|
-
if (typeof module === "object" && typeof module.exports === "object") {
|
|
12
|
-
var v = factory(require, exports);
|
|
13
|
-
if (v !== undefined) module.exports = v;
|
|
14
|
-
}
|
|
15
|
-
else if (typeof define === "function" && define.amd) {
|
|
16
|
-
define(["require", "exports", "redux", "./tipos", "redux-typed-reducer", "like-ar", "best-globals", "json4all"], factory);
|
|
17
|
-
}
|
|
18
|
-
})(function (require, exports) {
|
|
19
|
-
"use strict";
|
|
20
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
-
exports.dmTraerDatosFormulario = exports.traerEstructura = exports.getCacheVersion = exports.gotoConsistir = exports.gotoCampo = exports.gotoSincronizar = exports.replaceSpecialWords = exports.dispatchers = void 0;
|
|
22
|
-
const redux_1 = require("redux");
|
|
23
|
-
const tipos_1 = require("./tipos");
|
|
24
|
-
const redux_typed_reducer_1 = require("redux-typed-reducer");
|
|
25
|
-
const likeAr = require("like-ar");
|
|
26
|
-
const bestGlobals = require("best-globals");
|
|
27
|
-
const JSON4all = require("json4all");
|
|
28
|
-
var my = myOwn;
|
|
29
|
-
const LOCAL_STORAGE_STATE_NAME = 'hdr-state';
|
|
30
|
-
function forPkToUrl(forPk, pilaForPk) {
|
|
31
|
-
var addrParams = myOwn.UriSearchToObject(location.hash || location.search || '');
|
|
32
|
-
myOwn.replaceAddrParams(Object.assign(Object.assign({}, addrParams), { state_forPk: forPk == null ? 'null' : (0, tipos_1.toPlainForPk)(forPk), state_pilaForPk: pilaForPk.map(tipos_1.toPlainForPk).join('|') }));
|
|
33
|
-
}
|
|
34
|
-
var reducers = {
|
|
35
|
-
MODO_DESPLIEGUE: (payload) => function (state) {
|
|
36
|
-
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { modoDespliegue: payload.modoDespliegue }) });
|
|
37
|
-
},
|
|
38
|
-
CAMBIAR_FORMULARIO: (payload) => function (state) {
|
|
39
|
-
var forPk = payload.forPk;
|
|
40
|
-
var pilaForPk = payload.apilarVuelta ? (state.opciones.forPk == null ? [] : [...state.opciones.pilaForPk, state.opciones.forPk]) : state.opciones.pilaForPk;
|
|
41
|
-
forPkToUrl(forPk, pilaForPk);
|
|
42
|
-
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { forPk,
|
|
43
|
-
pilaForPk }) });
|
|
44
|
-
},
|
|
45
|
-
VOLVER_DE_FORMULARIO: ({ magnitudRetroceso }) => function (state) {
|
|
46
|
-
var forPk = state.opciones.pilaForPk[state.opciones.pilaForPk.length - magnitudRetroceso] || null;
|
|
47
|
-
var pilaForPk = state.opciones.pilaForPk.slice(0, state.opciones.pilaForPk.length - magnitudRetroceso);
|
|
48
|
-
forPkToUrl(forPk, pilaForPk);
|
|
49
|
-
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { forPk,
|
|
50
|
-
pilaForPk }) });
|
|
51
|
-
},
|
|
52
|
-
ESTADO_CARGA: (payload) => function (state) {
|
|
53
|
-
return state;
|
|
54
|
-
//DESACTIVADO
|
|
55
|
-
//return {
|
|
56
|
-
// ...state,
|
|
57
|
-
// datos:{
|
|
58
|
-
// ...state.datos,
|
|
59
|
-
// cargas:{
|
|
60
|
-
// ...state.datos.cargas,
|
|
61
|
-
// [payload.idCarga]: {
|
|
62
|
-
// ...state.datos.cargas[payload.idCarga],
|
|
63
|
-
// estado_carga: payload.estado_carga
|
|
64
|
-
// }
|
|
65
|
-
// }
|
|
66
|
-
// }
|
|
67
|
-
//}
|
|
68
|
-
},
|
|
69
|
-
VOLVER_HDR: (_payload) => function (state) {
|
|
70
|
-
var forPk = null;
|
|
71
|
-
var pilaForPk = [];
|
|
72
|
-
forPkToUrl(forPk, pilaForPk);
|
|
73
|
-
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { forPk,
|
|
74
|
-
pilaForPk }) });
|
|
75
|
-
},
|
|
76
|
-
SET_OPCION: (payload) => function (state) {
|
|
77
|
-
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { [payload.opcion]: payload.valor }) });
|
|
78
|
-
},
|
|
79
|
-
RESET_OPCIONES: (_payload) => function (state) {
|
|
80
|
-
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { forPk: null }) });
|
|
81
|
-
},
|
|
82
|
-
REINICIAR_DEMO: (_payload) => function (state) {
|
|
83
|
-
if (!state.modo.demo)
|
|
84
|
-
return state;
|
|
85
|
-
return Object.assign(Object.assign({}, state), {
|
|
86
|
-
// @ts-ignore copio los datos iniciales
|
|
87
|
-
datos: bestGlobals.deepCopy(state.modo.demo) });
|
|
88
|
-
},
|
|
89
|
-
CONFIRMAR_BORRAR_RESPUESTA: (payload) => function (state) {
|
|
90
|
-
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { forPk: payload.forPk, modoBorrarRespuesta: payload.variable }) });
|
|
91
|
-
},
|
|
92
|
-
};
|
|
93
|
-
/* FIN ACCIONES */
|
|
94
|
-
exports.dispatchers = (0, redux_typed_reducer_1.createDispatchers)(reducers);
|
|
95
|
-
const casilleroVacio = { salto: null, despliegue: null, aclaracion: null, ver_id: null, casilleros: [], leer: null,
|
|
96
|
-
despliegueEncabezado: null, despliegueContenido: null, despliegueOculta: null, despliegueTipoInput: null
|
|
97
|
-
};
|
|
98
|
-
const opcionesSiNo = [
|
|
99
|
-
Object.assign(Object.assign({}, casilleroVacio), { casillero: 1, tipoc: 'O', nombre: 'Sí' }),
|
|
100
|
-
Object.assign(Object.assign({}, casilleroVacio), { casillero: 2, tipoc: 'O', nombre: 'No' }),
|
|
101
|
-
];
|
|
102
|
-
function aplanarLaCurva(casillerosData) {
|
|
103
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
104
|
-
var data = casillerosData.data;
|
|
105
|
-
return Object.assign(Object.assign({}, data), { despliegueContenido: ((_a = data.despliegue) === null || _a === void 0 ? void 0 : _a.includes('horizontal')) ? 'horizontal' : ((_b = data.despliegue) === null || _b === void 0 ? void 0 : _b.includes('vertical')) ? 'vertical' : null, despliegueEncabezado: ((_c = data.despliegue) === null || _c === void 0 ? void 0 : _c.includes('lateral')) ? 'lateral' : ((_d = data.despliegue) === null || _d === void 0 ? void 0 : _d.includes('superior')) ? 'superior' : null, despliegueOculta: (_f = (_e = data.despliegue) === null || _e === void 0 ? void 0 : _e.includes('ocultar')) !== null && _f !== void 0 ? _f : null, despliegueTipoInput: ((_g = data.despliegue) === null || _g === void 0 ? void 0 : _g.includes('telefono')) ? 'tel' : null, casilleros: !casillerosData.childs.length && casillerosData.data.tipoc == 'OM' ? opcionesSiNo :
|
|
106
|
-
casillerosData.childs.map(casillero => aplanarLaCurva(casillero)) });
|
|
107
|
-
}
|
|
108
|
-
// type AnyRef<T extends {}>=[T, keyof T];
|
|
109
|
-
function rellenarVariablesYOpciones(idFormulario, estructura, casillero, unidadAnalisis, subordinadaVar, subordinadaValor) {
|
|
110
|
-
if (casillero.var_name != null || casillero.tipoc == 'FILTRO') {
|
|
111
|
-
var var_name;
|
|
112
|
-
if (casillero.tipoc == 'FILTRO') {
|
|
113
|
-
// @ts-ignore pongo como nombre de variable el filtro;
|
|
114
|
-
var_name = casillero.casillero;
|
|
115
|
-
}
|
|
116
|
-
else if (casillero.var_name.endsWith('!')) {
|
|
117
|
-
// @ts-ignore las variables espejo son las que terminan en !
|
|
118
|
-
var_name = casillero.var_name_especial.replace(/!+$/, '');
|
|
119
|
-
casillero.var_name = var_name;
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
122
|
-
var_name = casillero.var_name;
|
|
123
|
-
}
|
|
124
|
-
let variableDef = {
|
|
125
|
-
tipo: casillero.tipoc == 'FILTRO' ? 'filtro' : casillero.tipoc == 'OM' || casillero.tipovar == 'si_no' ? 'opciones' : casillero.tipovar,
|
|
126
|
-
// @ts-ignore optativo podría no existir, quedará null.
|
|
127
|
-
optativa: casillero.optativo,
|
|
128
|
-
opciones: (casillero.tipoc == 'OM' || casillero.tipovar == 'opciones' || casillero.tipovar == 'si_no' ?
|
|
129
|
-
likeAr.createIndex(casillero.casilleros, 'casillero') : {}),
|
|
130
|
-
salto: casillero.salto,
|
|
131
|
-
saltoNsNr: 'salto_ns_nc' in casillero && casillero.salto_ns_nc || null,
|
|
132
|
-
funcionHabilitar: casillero.expresion_habilitar_js,
|
|
133
|
-
funcionAutoIngresar: casillero.expresion_autoingresar_js,
|
|
134
|
-
calculada:
|
|
135
|
-
// @ts-ignore // TODO. Averiguar si las preguntas y filtros pueden tener unidad de análisis
|
|
136
|
-
casillero.unidad_analisis && casillero.unidad_analisis != unidadAnalisis
|
|
137
|
-
|| casillero.calculada,
|
|
138
|
-
libre: casillero.libre
|
|
139
|
-
};
|
|
140
|
-
if (subordinadaValor != undefined) {
|
|
141
|
-
variableDef.subordinadaVar = subordinadaVar;
|
|
142
|
-
variableDef.subordinadaValor = subordinadaValor;
|
|
143
|
-
}
|
|
144
|
-
estructura.variables[var_name] = variableDef;
|
|
145
|
-
}
|
|
146
|
-
else if (casillero.tipoc == 'BF') {
|
|
147
|
-
// var var_name = '$B.F:'+casillero.salto as IdVariable; //original
|
|
148
|
-
var saltoNombre = casillero.salto.substr(0, 2) == 'F:' ? casillero.salto.slice(2) : casillero.salto;
|
|
149
|
-
var var_name = '$B.F:' + saltoNombre;
|
|
150
|
-
casillero.var_name_BF = var_name;
|
|
151
|
-
let variableDef = Object.assign({ tipo: 'texto', libre: true }, (casillero.expresion_habilitar ? { funcionHabilitar: `valores['${casillero.expresion_habilitar}'] !==0 ` } : {}));
|
|
152
|
-
estructura.variables[var_name] = variableDef;
|
|
153
|
-
}
|
|
154
|
-
if (casillero.casilleros) {
|
|
155
|
-
casillero.casilleros.forEach((casilleroHijo) => rellenarVariablesYOpciones(idFormulario, estructura, casilleroHijo, unidadAnalisis, casillero.var_name ? casillero.var_name : casillero.tipoc == 'O' ? subordinadaVar : undefined, casillero.tipoc == 'O' ? casillero.casillero : undefined));
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
function obtenerDestinosCasilleros(casillero, destinos) {
|
|
159
|
-
if (destinos == null)
|
|
160
|
-
return obtenerDestinosCasilleros(casillero, {});
|
|
161
|
-
if (casillero.tipoc == 'FILTRO') {
|
|
162
|
-
destinos[casillero.casillero] = casillero.casillero;
|
|
163
|
-
}
|
|
164
|
-
else if (casillero.tipoc != 'F' && casillero.tipoc != 'O' && casillero.tipoc != 'OM') {
|
|
165
|
-
destinos[casillero.casillero] = casillero.primera_variable || null;
|
|
166
|
-
}
|
|
167
|
-
if (casillero.casilleros) {
|
|
168
|
-
casillero.casilleros.forEach(c => obtenerDestinosCasilleros(c, destinos));
|
|
169
|
-
}
|
|
170
|
-
return destinos;
|
|
171
|
-
}
|
|
172
|
-
function rellenarDestinos(estructura, destinos) {
|
|
173
|
-
function obtenerDestino(idVariableQueTieneUnDestino) {
|
|
174
|
-
return idVariableQueTieneUnDestino == 'fin' ? 'fin' : idVariableQueTieneUnDestino != null && destinos[idVariableQueTieneUnDestino] || null;
|
|
175
|
-
}
|
|
176
|
-
return Object.assign(Object.assign({}, estructura), { variables: likeAr(estructura.variables).map(variableDef => (Object.assign(Object.assign({}, variableDef), { salto: obtenerDestino(variableDef.salto), saltoNsNr: obtenerDestino(variableDef.saltoNsNr), opciones: variableDef.opciones != null ? likeAr(variableDef.opciones).map(opcionDef => ({ salto: obtenerDestino(opcionDef.salto) })).plain() : undefined }))).plain() });
|
|
177
|
-
}
|
|
178
|
-
function generarEstructuraRowValidator(casillero, idFormulario) {
|
|
179
|
-
var estructuraIncompleta = { variables: {}, marcaFin: 'fin' };
|
|
180
|
-
rellenarVariablesYOpciones(idFormulario, estructuraIncompleta, casillero,
|
|
181
|
-
// @ts-ignore ver si cualquier cosa puede tener unidad_analisis
|
|
182
|
-
casillero.unidad_analisis);
|
|
183
|
-
var destinos = obtenerDestinosCasilleros(casillero);
|
|
184
|
-
return rellenarDestinos(estructuraIncompleta, destinos);
|
|
185
|
-
}
|
|
186
|
-
function replaceSpecialWords(text, nombre, apellido, resultado) {
|
|
187
|
-
function capitalizeFirstLetter(text) {
|
|
188
|
-
return text.charAt(0).toUpperCase() + text.slice(1);
|
|
189
|
-
}
|
|
190
|
-
var simplificatedChars = {
|
|
191
|
-
"#nombre": capitalizeFirstLetter(nombre),
|
|
192
|
-
"#apellido": capitalizeFirstLetter(apellido),
|
|
193
|
-
"#resultado": resultado,
|
|
194
|
-
};
|
|
195
|
-
var re = new RegExp(Object.keys(simplificatedChars).join("|"), "gi");
|
|
196
|
-
return text.replace(re, function (matched) {
|
|
197
|
-
return simplificatedChars[matched.toLowerCase()];
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
exports.replaceSpecialWords = replaceSpecialWords;
|
|
201
|
-
function gotoSincronizar() {
|
|
202
|
-
history.replaceState(null, '', `${location.origin + location.pathname}/../menu#i=sincronizar`);
|
|
203
|
-
location.reload();
|
|
204
|
-
}
|
|
205
|
-
exports.gotoSincronizar = gotoSincronizar;
|
|
206
|
-
function gotoCampo() {
|
|
207
|
-
history.replaceState(null, '', `${location.origin + location.pathname}/../campo`);
|
|
208
|
-
location.reload();
|
|
209
|
-
}
|
|
210
|
-
exports.gotoCampo = gotoCampo;
|
|
211
|
-
function gotoConsistir(operativo, tarea, encuesta) {
|
|
212
|
-
// TODO-2023-03: probar con esto:
|
|
213
|
-
history.replaceState(null, '', `${location.origin + location.pathname}/../menu#w=consistir_encuesta&up=${JSON4all.toUrl({ operativo, tarea, encuesta })}&autoproced=true`);
|
|
214
|
-
// history.replaceState(null, '', `${location.origin+location.pathname}/../menu#w=consistir_encuesta&up={"operativo":"${operativo}","tarea":"${tarea}","encuesta":${encuesta}}&autoproced=true`);
|
|
215
|
-
location.reload();
|
|
216
|
-
}
|
|
217
|
-
exports.gotoConsistir = gotoConsistir;
|
|
218
|
-
function getCacheVersion() {
|
|
219
|
-
return my.getLocalVar('app-cache-version');
|
|
220
|
-
}
|
|
221
|
-
exports.getCacheVersion = getCacheVersion;
|
|
222
|
-
var redirectIfNotLogged = function redirectIfNotLogged(err) {
|
|
223
|
-
if (err.message == my.messages.notLogged) {
|
|
224
|
-
setTimeout(() => {
|
|
225
|
-
history.replaceState(null, '', `${location.origin + location.pathname}/../login${location.hash}`);
|
|
226
|
-
location.reload();
|
|
227
|
-
}, 1500);
|
|
228
|
-
}
|
|
229
|
-
};
|
|
230
|
-
function traerEstructura(params) {
|
|
231
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
232
|
-
var estructura = yield my.ajax.operativo_estructura_completa(params);
|
|
233
|
-
var casillerosOriginales = estructura.formularios;
|
|
234
|
-
//TODO: GENERALIZAR
|
|
235
|
-
//@ts-ignore
|
|
236
|
-
// casillerosOriginales['F:F2_personas']=casillerosOriginales['F:F2'].childs.find(casillero=>casillero.data.casillero=='LP');
|
|
237
|
-
var mainForm;
|
|
238
|
-
//@ts-ignore
|
|
239
|
-
var casillerosTodosFormularios = likeAr(casillerosOriginales).map((casillerosJerarquizados, idFormulario) => {
|
|
240
|
-
var casillerosAplanados = aplanarLaCurva(casillerosJerarquizados);
|
|
241
|
-
if (casillerosAplanados.tipoc == 'F' && casillerosAplanados.formulario_principal) {
|
|
242
|
-
mainForm = idFormulario;
|
|
243
|
-
}
|
|
244
|
-
return {
|
|
245
|
-
casilleros: casillerosAplanados,
|
|
246
|
-
estructuraRowValidator: generarEstructuraRowValidator(casillerosAplanados, idFormulario)
|
|
247
|
-
};
|
|
248
|
-
}).plain();
|
|
249
|
-
estructura.formularios = casillerosTodosFormularios;
|
|
250
|
-
return estructura;
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
exports.traerEstructura = traerEstructura;
|
|
254
|
-
function dmTraerDatosFormulario(opts) {
|
|
255
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
256
|
-
var getCasoState = () => myOwn.getLocalVar(LOCAL_STORAGE_STATE_NAME);
|
|
257
|
-
var setCasoState = (casoState) => myOwn.setLocalVar(LOCAL_STORAGE_STATE_NAME, casoState);
|
|
258
|
-
var loadState = function loadState() {
|
|
259
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
260
|
-
var casoState = getCasoState();
|
|
261
|
-
var initialState = {
|
|
262
|
-
opciones: {
|
|
263
|
-
forPk: null,
|
|
264
|
-
pilaForPk: [],
|
|
265
|
-
modoDespliegue: 'relevamiento',
|
|
266
|
-
modoDirecto: false,
|
|
267
|
-
conCampoOpciones: false,
|
|
268
|
-
saltoAutomatico: true,
|
|
269
|
-
bienvenido: true,
|
|
270
|
-
modoBorrarRespuesta: null,
|
|
271
|
-
},
|
|
272
|
-
modo: {
|
|
273
|
-
//@ts-ignore es un booleano pero pongo ahí los datos de demo!
|
|
274
|
-
demo:
|
|
275
|
-
// @ts-ignore
|
|
276
|
-
myOwn.config.config.ambiente == 'test' || myOwn.config.config.ambiente == 'demo',
|
|
277
|
-
}
|
|
278
|
-
};
|
|
279
|
-
if (casoState) {
|
|
280
|
-
initialState = Object.assign(Object.assign({}, initialState), { opciones: casoState.opciones });
|
|
281
|
-
}
|
|
282
|
-
if (opts.forPkRaiz) {
|
|
283
|
-
initialState.opciones.forPk = opts.forPkRaiz;
|
|
284
|
-
initialState.opciones.modoDirecto = !!opts.forPkRaiz;
|
|
285
|
-
initialState.opciones.pilaForPk = [];
|
|
286
|
-
}
|
|
287
|
-
var addrParams = myOwn.UriSearchToObject(location.hash || location.search || '');
|
|
288
|
-
if (addrParams.state_forPk) {
|
|
289
|
-
initialState.opciones.forPk = JSON.parse(addrParams.state_forPk);
|
|
290
|
-
}
|
|
291
|
-
if (addrParams.state_pilaForPk) {
|
|
292
|
-
initialState.opciones.pilaForPk = addrParams.state_pilaForPk.split('|').map(j => JSON4all.parse(j));
|
|
293
|
-
}
|
|
294
|
-
return initialState;
|
|
295
|
-
});
|
|
296
|
-
};
|
|
297
|
-
var saveState = function saveState(state) {
|
|
298
|
-
setCasoState(state);
|
|
299
|
-
};
|
|
300
|
-
/* DEFINICION CONTROLADOR */
|
|
301
|
-
var initialState = yield loadState();
|
|
302
|
-
const hdrReducer = (0, redux_typed_reducer_1.createReducer)(reducers, initialState);
|
|
303
|
-
/* FIN DEFINICION CONTROLADOR */
|
|
304
|
-
/* CARGA Y GUARDADO DE STATE */
|
|
305
|
-
/* CREACION STORE */
|
|
306
|
-
const store = (0, redux_1.createStore)(hdrReducer, initialState);
|
|
307
|
-
saveState(store.getState());
|
|
308
|
-
store.subscribe(function () {
|
|
309
|
-
saveState(store.getState());
|
|
310
|
-
});
|
|
311
|
-
/* FIN CREACION STORE */
|
|
312
|
-
//HDR CON STORE CREADO
|
|
313
|
-
return store;
|
|
314
|
-
});
|
|
315
|
-
}
|
|
316
|
-
exports.dmTraerDatosFormulario = dmTraerDatosFormulario;
|
|
317
|
-
});
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
(function (factory) {
|
|
11
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
12
|
+
var v = factory(require, exports);
|
|
13
|
+
if (v !== undefined) module.exports = v;
|
|
14
|
+
}
|
|
15
|
+
else if (typeof define === "function" && define.amd) {
|
|
16
|
+
define(["require", "exports", "redux", "./tipos", "redux-typed-reducer", "like-ar", "best-globals", "json4all"], factory);
|
|
17
|
+
}
|
|
18
|
+
})(function (require, exports) {
|
|
19
|
+
"use strict";
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.dmTraerDatosFormulario = exports.traerEstructura = exports.getCacheVersion = exports.gotoConsistir = exports.gotoCampo = exports.gotoSincronizar = exports.replaceSpecialWords = exports.dispatchers = void 0;
|
|
22
|
+
const redux_1 = require("redux");
|
|
23
|
+
const tipos_1 = require("./tipos");
|
|
24
|
+
const redux_typed_reducer_1 = require("redux-typed-reducer");
|
|
25
|
+
const likeAr = require("like-ar");
|
|
26
|
+
const bestGlobals = require("best-globals");
|
|
27
|
+
const JSON4all = require("json4all");
|
|
28
|
+
var my = myOwn;
|
|
29
|
+
const LOCAL_STORAGE_STATE_NAME = 'hdr-state';
|
|
30
|
+
function forPkToUrl(forPk, pilaForPk) {
|
|
31
|
+
var addrParams = myOwn.UriSearchToObject(location.hash || location.search || '');
|
|
32
|
+
myOwn.replaceAddrParams(Object.assign(Object.assign({}, addrParams), { state_forPk: forPk == null ? 'null' : (0, tipos_1.toPlainForPk)(forPk), state_pilaForPk: pilaForPk.map(tipos_1.toPlainForPk).join('|') }));
|
|
33
|
+
}
|
|
34
|
+
var reducers = {
|
|
35
|
+
MODO_DESPLIEGUE: (payload) => function (state) {
|
|
36
|
+
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { modoDespliegue: payload.modoDespliegue }) });
|
|
37
|
+
},
|
|
38
|
+
CAMBIAR_FORMULARIO: (payload) => function (state) {
|
|
39
|
+
var forPk = payload.forPk;
|
|
40
|
+
var pilaForPk = payload.apilarVuelta ? (state.opciones.forPk == null ? [] : [...state.opciones.pilaForPk, state.opciones.forPk]) : state.opciones.pilaForPk;
|
|
41
|
+
forPkToUrl(forPk, pilaForPk);
|
|
42
|
+
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { forPk,
|
|
43
|
+
pilaForPk }) });
|
|
44
|
+
},
|
|
45
|
+
VOLVER_DE_FORMULARIO: ({ magnitudRetroceso }) => function (state) {
|
|
46
|
+
var forPk = state.opciones.pilaForPk[state.opciones.pilaForPk.length - magnitudRetroceso] || null;
|
|
47
|
+
var pilaForPk = state.opciones.pilaForPk.slice(0, state.opciones.pilaForPk.length - magnitudRetroceso);
|
|
48
|
+
forPkToUrl(forPk, pilaForPk);
|
|
49
|
+
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { forPk,
|
|
50
|
+
pilaForPk }) });
|
|
51
|
+
},
|
|
52
|
+
ESTADO_CARGA: (payload) => function (state) {
|
|
53
|
+
return state;
|
|
54
|
+
//DESACTIVADO
|
|
55
|
+
//return {
|
|
56
|
+
// ...state,
|
|
57
|
+
// datos:{
|
|
58
|
+
// ...state.datos,
|
|
59
|
+
// cargas:{
|
|
60
|
+
// ...state.datos.cargas,
|
|
61
|
+
// [payload.idCarga]: {
|
|
62
|
+
// ...state.datos.cargas[payload.idCarga],
|
|
63
|
+
// estado_carga: payload.estado_carga
|
|
64
|
+
// }
|
|
65
|
+
// }
|
|
66
|
+
// }
|
|
67
|
+
//}
|
|
68
|
+
},
|
|
69
|
+
VOLVER_HDR: (_payload) => function (state) {
|
|
70
|
+
var forPk = null;
|
|
71
|
+
var pilaForPk = [];
|
|
72
|
+
forPkToUrl(forPk, pilaForPk);
|
|
73
|
+
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { forPk,
|
|
74
|
+
pilaForPk }) });
|
|
75
|
+
},
|
|
76
|
+
SET_OPCION: (payload) => function (state) {
|
|
77
|
+
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { [payload.opcion]: payload.valor }) });
|
|
78
|
+
},
|
|
79
|
+
RESET_OPCIONES: (_payload) => function (state) {
|
|
80
|
+
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { forPk: null }) });
|
|
81
|
+
},
|
|
82
|
+
REINICIAR_DEMO: (_payload) => function (state) {
|
|
83
|
+
if (!state.modo.demo)
|
|
84
|
+
return state;
|
|
85
|
+
return Object.assign(Object.assign({}, state), {
|
|
86
|
+
// @ts-ignore copio los datos iniciales
|
|
87
|
+
datos: bestGlobals.deepCopy(state.modo.demo) });
|
|
88
|
+
},
|
|
89
|
+
CONFIRMAR_BORRAR_RESPUESTA: (payload) => function (state) {
|
|
90
|
+
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { forPk: payload.forPk, modoBorrarRespuesta: payload.variable }) });
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
/* FIN ACCIONES */
|
|
94
|
+
exports.dispatchers = (0, redux_typed_reducer_1.createDispatchers)(reducers);
|
|
95
|
+
const casilleroVacio = { salto: null, despliegue: null, aclaracion: null, ver_id: null, casilleros: [], leer: null,
|
|
96
|
+
despliegueEncabezado: null, despliegueContenido: null, despliegueOculta: null, despliegueTipoInput: null
|
|
97
|
+
};
|
|
98
|
+
const opcionesSiNo = [
|
|
99
|
+
Object.assign(Object.assign({}, casilleroVacio), { casillero: 1, tipoc: 'O', nombre: 'Sí' }),
|
|
100
|
+
Object.assign(Object.assign({}, casilleroVacio), { casillero: 2, tipoc: 'O', nombre: 'No' }),
|
|
101
|
+
];
|
|
102
|
+
function aplanarLaCurva(casillerosData) {
|
|
103
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
104
|
+
var data = casillerosData.data;
|
|
105
|
+
return Object.assign(Object.assign({}, data), { despliegueContenido: ((_a = data.despliegue) === null || _a === void 0 ? void 0 : _a.includes('horizontal')) ? 'horizontal' : ((_b = data.despliegue) === null || _b === void 0 ? void 0 : _b.includes('vertical')) ? 'vertical' : null, despliegueEncabezado: ((_c = data.despliegue) === null || _c === void 0 ? void 0 : _c.includes('lateral')) ? 'lateral' : ((_d = data.despliegue) === null || _d === void 0 ? void 0 : _d.includes('superior')) ? 'superior' : null, despliegueOculta: (_f = (_e = data.despliegue) === null || _e === void 0 ? void 0 : _e.includes('ocultar')) !== null && _f !== void 0 ? _f : null, despliegueTipoInput: ((_g = data.despliegue) === null || _g === void 0 ? void 0 : _g.includes('telefono')) ? 'tel' : null, casilleros: !casillerosData.childs.length && casillerosData.data.tipoc == 'OM' ? opcionesSiNo :
|
|
106
|
+
casillerosData.childs.map(casillero => aplanarLaCurva(casillero)) });
|
|
107
|
+
}
|
|
108
|
+
// type AnyRef<T extends {}>=[T, keyof T];
|
|
109
|
+
function rellenarVariablesYOpciones(idFormulario, estructura, casillero, unidadAnalisis, subordinadaVar, subordinadaValor) {
|
|
110
|
+
if (casillero.var_name != null || casillero.tipoc == 'FILTRO') {
|
|
111
|
+
var var_name;
|
|
112
|
+
if (casillero.tipoc == 'FILTRO') {
|
|
113
|
+
// @ts-ignore pongo como nombre de variable el filtro;
|
|
114
|
+
var_name = casillero.casillero;
|
|
115
|
+
}
|
|
116
|
+
else if (casillero.var_name.endsWith('!')) {
|
|
117
|
+
// @ts-ignore las variables espejo son las que terminan en !
|
|
118
|
+
var_name = casillero.var_name_especial.replace(/!+$/, '');
|
|
119
|
+
casillero.var_name = var_name;
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
var_name = casillero.var_name;
|
|
123
|
+
}
|
|
124
|
+
let variableDef = {
|
|
125
|
+
tipo: casillero.tipoc == 'FILTRO' ? 'filtro' : casillero.tipoc == 'OM' || casillero.tipovar == 'si_no' ? 'opciones' : casillero.tipovar,
|
|
126
|
+
// @ts-ignore optativo podría no existir, quedará null.
|
|
127
|
+
optativa: casillero.optativo,
|
|
128
|
+
opciones: (casillero.tipoc == 'OM' || casillero.tipovar == 'opciones' || casillero.tipovar == 'si_no' ?
|
|
129
|
+
likeAr.createIndex(casillero.casilleros, 'casillero') : {}),
|
|
130
|
+
salto: casillero.salto,
|
|
131
|
+
saltoNsNr: 'salto_ns_nc' in casillero && casillero.salto_ns_nc || null,
|
|
132
|
+
funcionHabilitar: casillero.expresion_habilitar_js,
|
|
133
|
+
funcionAutoIngresar: casillero.expresion_autoingresar_js,
|
|
134
|
+
calculada:
|
|
135
|
+
// @ts-ignore // TODO. Averiguar si las preguntas y filtros pueden tener unidad de análisis
|
|
136
|
+
casillero.unidad_analisis && casillero.unidad_analisis != unidadAnalisis
|
|
137
|
+
|| casillero.calculada,
|
|
138
|
+
libre: casillero.libre
|
|
139
|
+
};
|
|
140
|
+
if (subordinadaValor != undefined) {
|
|
141
|
+
variableDef.subordinadaVar = subordinadaVar;
|
|
142
|
+
variableDef.subordinadaValor = subordinadaValor;
|
|
143
|
+
}
|
|
144
|
+
estructura.variables[var_name] = variableDef;
|
|
145
|
+
}
|
|
146
|
+
else if (casillero.tipoc == 'BF') {
|
|
147
|
+
// var var_name = '$B.F:'+casillero.salto as IdVariable; //original
|
|
148
|
+
var saltoNombre = casillero.salto.substr(0, 2) == 'F:' ? casillero.salto.slice(2) : casillero.salto;
|
|
149
|
+
var var_name = '$B.F:' + saltoNombre;
|
|
150
|
+
casillero.var_name_BF = var_name;
|
|
151
|
+
let variableDef = Object.assign({ tipo: 'texto', libre: true }, (casillero.expresion_habilitar ? { funcionHabilitar: `valores['${casillero.expresion_habilitar}'] !==0 ` } : {}));
|
|
152
|
+
estructura.variables[var_name] = variableDef;
|
|
153
|
+
}
|
|
154
|
+
if (casillero.casilleros) {
|
|
155
|
+
casillero.casilleros.forEach((casilleroHijo) => rellenarVariablesYOpciones(idFormulario, estructura, casilleroHijo, unidadAnalisis, casillero.var_name ? casillero.var_name : casillero.tipoc == 'O' ? subordinadaVar : undefined, casillero.tipoc == 'O' ? casillero.casillero : undefined));
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
function obtenerDestinosCasilleros(casillero, destinos) {
|
|
159
|
+
if (destinos == null)
|
|
160
|
+
return obtenerDestinosCasilleros(casillero, {});
|
|
161
|
+
if (casillero.tipoc == 'FILTRO') {
|
|
162
|
+
destinos[casillero.casillero] = casillero.casillero;
|
|
163
|
+
}
|
|
164
|
+
else if (casillero.tipoc != 'F' && casillero.tipoc != 'O' && casillero.tipoc != 'OM') {
|
|
165
|
+
destinos[casillero.casillero] = casillero.primera_variable || null;
|
|
166
|
+
}
|
|
167
|
+
if (casillero.casilleros) {
|
|
168
|
+
casillero.casilleros.forEach(c => obtenerDestinosCasilleros(c, destinos));
|
|
169
|
+
}
|
|
170
|
+
return destinos;
|
|
171
|
+
}
|
|
172
|
+
function rellenarDestinos(estructura, destinos) {
|
|
173
|
+
function obtenerDestino(idVariableQueTieneUnDestino) {
|
|
174
|
+
return idVariableQueTieneUnDestino == 'fin' ? 'fin' : idVariableQueTieneUnDestino != null && destinos[idVariableQueTieneUnDestino] || null;
|
|
175
|
+
}
|
|
176
|
+
return Object.assign(Object.assign({}, estructura), { variables: likeAr(estructura.variables).map(variableDef => (Object.assign(Object.assign({}, variableDef), { salto: obtenerDestino(variableDef.salto), saltoNsNr: obtenerDestino(variableDef.saltoNsNr), opciones: variableDef.opciones != null ? likeAr(variableDef.opciones).map(opcionDef => ({ salto: obtenerDestino(opcionDef.salto) })).plain() : undefined }))).plain() });
|
|
177
|
+
}
|
|
178
|
+
function generarEstructuraRowValidator(casillero, idFormulario) {
|
|
179
|
+
var estructuraIncompleta = { variables: {}, marcaFin: 'fin' };
|
|
180
|
+
rellenarVariablesYOpciones(idFormulario, estructuraIncompleta, casillero,
|
|
181
|
+
// @ts-ignore ver si cualquier cosa puede tener unidad_analisis
|
|
182
|
+
casillero.unidad_analisis);
|
|
183
|
+
var destinos = obtenerDestinosCasilleros(casillero);
|
|
184
|
+
return rellenarDestinos(estructuraIncompleta, destinos);
|
|
185
|
+
}
|
|
186
|
+
function replaceSpecialWords(text, nombre, apellido, resultado) {
|
|
187
|
+
function capitalizeFirstLetter(text) {
|
|
188
|
+
return text.charAt(0).toUpperCase() + text.slice(1);
|
|
189
|
+
}
|
|
190
|
+
var simplificatedChars = {
|
|
191
|
+
"#nombre": capitalizeFirstLetter(nombre),
|
|
192
|
+
"#apellido": capitalizeFirstLetter(apellido),
|
|
193
|
+
"#resultado": resultado,
|
|
194
|
+
};
|
|
195
|
+
var re = new RegExp(Object.keys(simplificatedChars).join("|"), "gi");
|
|
196
|
+
return text.replace(re, function (matched) {
|
|
197
|
+
return simplificatedChars[matched.toLowerCase()];
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
exports.replaceSpecialWords = replaceSpecialWords;
|
|
201
|
+
function gotoSincronizar() {
|
|
202
|
+
history.replaceState(null, '', `${location.origin + location.pathname}/../menu#i=sincronizar`);
|
|
203
|
+
location.reload();
|
|
204
|
+
}
|
|
205
|
+
exports.gotoSincronizar = gotoSincronizar;
|
|
206
|
+
function gotoCampo() {
|
|
207
|
+
history.replaceState(null, '', `${location.origin + location.pathname}/../campo`);
|
|
208
|
+
location.reload();
|
|
209
|
+
}
|
|
210
|
+
exports.gotoCampo = gotoCampo;
|
|
211
|
+
function gotoConsistir(operativo, tarea, encuesta) {
|
|
212
|
+
// TODO-2023-03: probar con esto:
|
|
213
|
+
history.replaceState(null, '', `${location.origin + location.pathname}/../menu#w=consistir_encuesta&up=${JSON4all.toUrl({ operativo, tarea, encuesta })}&autoproced=true`);
|
|
214
|
+
// history.replaceState(null, '', `${location.origin+location.pathname}/../menu#w=consistir_encuesta&up={"operativo":"${operativo}","tarea":"${tarea}","encuesta":${encuesta}}&autoproced=true`);
|
|
215
|
+
location.reload();
|
|
216
|
+
}
|
|
217
|
+
exports.gotoConsistir = gotoConsistir;
|
|
218
|
+
function getCacheVersion() {
|
|
219
|
+
return my.getLocalVar('app-cache-version');
|
|
220
|
+
}
|
|
221
|
+
exports.getCacheVersion = getCacheVersion;
|
|
222
|
+
var redirectIfNotLogged = function redirectIfNotLogged(err) {
|
|
223
|
+
if (err.message == my.messages.notLogged) {
|
|
224
|
+
setTimeout(() => {
|
|
225
|
+
history.replaceState(null, '', `${location.origin + location.pathname}/../login${location.hash}`);
|
|
226
|
+
location.reload();
|
|
227
|
+
}, 1500);
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
function traerEstructura(params) {
|
|
231
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
232
|
+
var estructura = yield my.ajax.operativo_estructura_completa(params);
|
|
233
|
+
var casillerosOriginales = estructura.formularios;
|
|
234
|
+
//TODO: GENERALIZAR
|
|
235
|
+
//@ts-ignore
|
|
236
|
+
// casillerosOriginales['F:F2_personas']=casillerosOriginales['F:F2'].childs.find(casillero=>casillero.data.casillero=='LP');
|
|
237
|
+
var mainForm;
|
|
238
|
+
//@ts-ignore
|
|
239
|
+
var casillerosTodosFormularios = likeAr(casillerosOriginales).map((casillerosJerarquizados, idFormulario) => {
|
|
240
|
+
var casillerosAplanados = aplanarLaCurva(casillerosJerarquizados);
|
|
241
|
+
if (casillerosAplanados.tipoc == 'F' && casillerosAplanados.formulario_principal) {
|
|
242
|
+
mainForm = idFormulario;
|
|
243
|
+
}
|
|
244
|
+
return {
|
|
245
|
+
casilleros: casillerosAplanados,
|
|
246
|
+
estructuraRowValidator: generarEstructuraRowValidator(casillerosAplanados, idFormulario)
|
|
247
|
+
};
|
|
248
|
+
}).plain();
|
|
249
|
+
estructura.formularios = casillerosTodosFormularios;
|
|
250
|
+
return estructura;
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
exports.traerEstructura = traerEstructura;
|
|
254
|
+
function dmTraerDatosFormulario(opts) {
|
|
255
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
256
|
+
var getCasoState = () => myOwn.getLocalVar(LOCAL_STORAGE_STATE_NAME);
|
|
257
|
+
var setCasoState = (casoState) => myOwn.setLocalVar(LOCAL_STORAGE_STATE_NAME, casoState);
|
|
258
|
+
var loadState = function loadState() {
|
|
259
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
260
|
+
var casoState = getCasoState();
|
|
261
|
+
var initialState = {
|
|
262
|
+
opciones: {
|
|
263
|
+
forPk: null,
|
|
264
|
+
pilaForPk: [],
|
|
265
|
+
modoDespliegue: 'relevamiento',
|
|
266
|
+
modoDirecto: false,
|
|
267
|
+
conCampoOpciones: false,
|
|
268
|
+
saltoAutomatico: true,
|
|
269
|
+
bienvenido: true,
|
|
270
|
+
modoBorrarRespuesta: null,
|
|
271
|
+
},
|
|
272
|
+
modo: {
|
|
273
|
+
//@ts-ignore es un booleano pero pongo ahí los datos de demo!
|
|
274
|
+
demo:
|
|
275
|
+
// @ts-ignore
|
|
276
|
+
myOwn.config.config.ambiente == 'test' || myOwn.config.config.ambiente == 'demo',
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
if (casoState) {
|
|
280
|
+
initialState = Object.assign(Object.assign({}, initialState), { opciones: casoState.opciones });
|
|
281
|
+
}
|
|
282
|
+
if (opts.forPkRaiz) {
|
|
283
|
+
initialState.opciones.forPk = opts.forPkRaiz;
|
|
284
|
+
initialState.opciones.modoDirecto = !!opts.forPkRaiz;
|
|
285
|
+
initialState.opciones.pilaForPk = [];
|
|
286
|
+
}
|
|
287
|
+
var addrParams = myOwn.UriSearchToObject(location.hash || location.search || '');
|
|
288
|
+
if (addrParams.state_forPk) {
|
|
289
|
+
initialState.opciones.forPk = JSON.parse(addrParams.state_forPk);
|
|
290
|
+
}
|
|
291
|
+
if (addrParams.state_pilaForPk) {
|
|
292
|
+
initialState.opciones.pilaForPk = addrParams.state_pilaForPk.split('|').map(j => JSON4all.parse(j));
|
|
293
|
+
}
|
|
294
|
+
return initialState;
|
|
295
|
+
});
|
|
296
|
+
};
|
|
297
|
+
var saveState = function saveState(state) {
|
|
298
|
+
setCasoState(state);
|
|
299
|
+
};
|
|
300
|
+
/* DEFINICION CONTROLADOR */
|
|
301
|
+
var initialState = yield loadState();
|
|
302
|
+
const hdrReducer = (0, redux_typed_reducer_1.createReducer)(reducers, initialState);
|
|
303
|
+
/* FIN DEFINICION CONTROLADOR */
|
|
304
|
+
/* CARGA Y GUARDADO DE STATE */
|
|
305
|
+
/* CREACION STORE */
|
|
306
|
+
const store = (0, redux_1.createStore)(hdrReducer, initialState);
|
|
307
|
+
saveState(store.getState());
|
|
308
|
+
store.subscribe(function () {
|
|
309
|
+
saveState(store.getState());
|
|
310
|
+
});
|
|
311
|
+
/* FIN CREACION STORE */
|
|
312
|
+
//HDR CON STORE CREADO
|
|
313
|
+
return store;
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
exports.dmTraerDatosFormulario = dmTraerDatosFormulario;
|
|
317
|
+
});
|
|
318
318
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtZm9ybXVsYXJpby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91bmxvZ2dlZC9yZWR1eC1mb3JtdWxhcmlvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUFBLGlDQUFvQztJQUNwQyxtQ0FVaUI7SUFDakIsNkRBQW9GO0lBRXBGLGtDQUFrQztJQUNsQyw0Q0FBNEM7SUFDNUMscUNBQXFDO0lBSXJDLElBQUksRUFBRSxHQUFDLEtBQUssQ0FBQztJQUViLE1BQU0sd0JBQXdCLEdBQUUsV0FBVyxDQUFDO0lBRTVDLFNBQVMsVUFBVSxDQUFDLEtBQWdCLEVBQUUsU0FBaUI7UUFDbkQsSUFBSSxVQUFVLEdBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUUsUUFBUSxDQUFDLE1BQU0sSUFBRSxFQUFFLENBQUMsQ0FBQztRQUMzRSxLQUFLLENBQUMsaUJBQWlCLGlDQUNoQixVQUFVLEtBQ2IsV0FBVyxFQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBQSxvQkFBWSxFQUFDLEtBQUssQ0FBQyxFQUN4RCxlQUFlLEVBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxvQkFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUN2RCxDQUFDO0lBQ1AsQ0FBQztJQUVELElBQUksUUFBUSxHQUFDO1FBQ1QsZUFBZSxFQUFFLENBQUMsT0FBd0MsRUFBRSxFQUFFLENBQzFELFVBQVMsS0FBZ0I7WUFDckIsdUNBQ08sS0FBSyxLQUNSLFFBQVEsa0NBQ0QsS0FBSyxDQUFDLFFBQVEsS0FDakIsY0FBYyxFQUFDLE9BQU8sQ0FBQyxjQUFjLE9BRTVDO1FBQ0wsQ0FBQztRQUNMLGtCQUFrQixFQUFFLENBQUMsT0FBNEMsRUFBRSxFQUFFLENBQ2pFLFVBQVMsS0FBZ0I7WUFDckIsSUFBSSxLQUFLLEdBQUcsT0FB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QyxDQUFDO3FCQUNsRTtvQkFDRCxJQUFHLFVBQVUsQ0FBQyxlQUFlLEVBQUM7d0JBQzFCLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFFLFVBQVUsQ0FBQyxlQUEwQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQy9HO29CQUNELE9BQU8sWUFBWSxDQUFDO2dCQUN4QixDQUFDO2FBQUEsQ0FBQTtZQUNELElBQUksU0FBUyxHQUFHLFNBQVMsU0FBUyxDQUFDLEtBQWU7Z0JBQzlDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QixDQUFDLENBQUE7WUFDRCw0QkFBNEI7WUFDNUIsSUFBSSxZQUFZLEdBQWEsTUFBTSxTQUFTLEVBQUUsQ0FBQztZQUMvQyxNQUFNLFVBQVUsR0FBRyxJQUFBLG1DQUFhLEVBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ3pELGdDQUFnQztZQUNoQywrQkFBK0I7WUFDL0Isb0JBQW9CO1lBQ3BCLE1BQU0sS0FBSyxHQUFHLElBQUEsbUJBQVcsRUFBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDcEQsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLEtBQUssQ0FBQyxTQUFTLENBQUM7Z0JBQ1gsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsd0JBQXdCO1lBQ3hCLHNCQUFzQjtZQUN0QixPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0tBQUE7SUE3REQsd0RBNkRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlU3RvcmUgfSBmcm9tIFwicmVkdXhcIjtcclxuaW1wb3J0IHsgQ2FzaWxsZXJvc0ltcGxlbWVudGFkb3MsIENhc29TdGF0ZSwgXHJcbiAgICBFc3RhZG9DYXJnYSwgRXN0cnVjdHVyYVJvd1ZhbGlkYXRvciwgXHJcbiAgICBGb3JtdWxhcmlvLCBGb3JQaywgRm9yUGtSYWl6LCBcclxuICAgIElkQ2FyZ2EsIElkRGVzdGlubywgSWRGb3JtdWxhcmlvLCBJZFZhcmlhYmxlLCBJZE9wZXJhdGl2bywgXHJcbiAgICBNb2RvRGVzcGxpZWd1ZSwgXHJcbiAgICBPcGNpb24sXHJcbiAgICB0b1BsYWluRm9yUGssXHJcbiAgICBJZEZpbixcclxuICAgIElkRW5jLFxyXG4gICAgSWRUYXJlYSxcclxufSBmcm9tIFwiLi90aXBvc1wiO1xyXG5pbXBvcnQgeyBjcmVhdGVSZWR1Y2VyLCBjcmVhdGVEaXNwYXRjaGVycywgQWN0aW9uc0Zyb20gfSBmcm9tIFwicmVkdXgtdHlwZWQtcmVkdWNlclwiO1xyXG5pbXBvcnQgeyBNb2RvQWxtYWNlbmFtaWVudG8gfSBmcm9tIFwiLi90aXBvc1wiXHJcbmltcG9ydCAqIGFzIGxpa2VBciBmcm9tIFwibGlrZS1hclwiO1xyXG5pbXBvcnQgKiBhcyBiZXN0R2xvYmFscyBmcm9tIFwiYmVzdC1nbG9iYWxzXCI7XHJcbmltcG9ydCAqIGFzIEpTT040YWxsIGZyb20gXCJqc29uNGFsbFwiO1xyXG5cclxuaW1wb3J0IHsgT3BjaW9uIGFzIFJvd1ZhbGlkYXRvck9wY2lvbiB9IGZyb20gXCJyb3ctdmFsaWRhdG9yXCI7XHJcblxyXG52YXIgbXk9bXlPd247XHJcblxyXG5jb25zdCBMT0NBTF9TVE9SQUdFX1NUQVRFX05BTUUgPSdoZHItc3RhdGUnO1xyXG5cclxuZnVuY3Rpb24gZm9yUGtUb1VybChmb3JQazpGb3JQa3xudWxsLCBwaWxhRm9yUGs6Rm9yUGtbXSl7XHJcbiAgICB2YXIgYWRkclBhcmFtcz1teU93bi5VcmlTZWFyY2hUb09iamVjdChsb2NhdGlvbi5oYXNofHxsb2NhdGlvbi5zZWFyY2h8fCcnKTtcclxuICAgIG15T3duLnJlcGxhY2VBZGRyUGFyYW1zKHtcclxuICAgICAgICAuLi5hZGRyUGFyYW1zLCBcclxuICAgICAgICBzdGF0ZV9mb3JQazpmb3JQayA9PSBudWxsID8gJ251bGwnIDogdG9QbGFpbkZvclBrKGZvclBrKSwgXHJcbiAgICAgICAgc3RhdGVfcGlsYUZvclBrOnBpbGFGb3JQay5tYXAodG9QbGFpbkZvclBrKS5qb2luKCd8JylcclxuICAgIH0pO1xyXG59XHJcblxyXG52YXIgcmVkdWNlcnM9e1xyXG4gICAgTU9ET19ERVNQTElFR1VFOiAocGF5bG9hZDoge21vZG9EZXNwbGllZ3VlOk1vZG9EZXNwbGllZ3VlfSkgPT4gXHJcbiAgICAgICAgZnVuY3Rpb24oc3RhdGU6IENhc29TdGF0ZSl7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgICAgICAgIG9wY2lvbmVzOntcclxuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5vcGNpb25lcyxcclxuICAgICAgICAgICAgICAgICAgICBtb2RvRGVzcGxpZWd1ZTpwYXlsb2FkLm1vZG9EZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgQ0FNQklBUl9GT1JNVUxBUklPOiAocGF5bG9hZDoge2ZvclBrOkZvclBrLCBhcGlsYXJWdWVsdGE6Ym9vbGVhbn0pID0+IFxyXG4gICAgICAgIGZ1bmN0aW9uKHN0YXRlOiBDYXNvU3RhdGUpe1xyXG4gICAgICAgICAgICB2YXIgZm9yUGsgPSBwYXlsb2FkLmZvclBrO1xyXG4gICAgICAgICAgICB2YXIgcGlsYUZvclBrID0gcGF5bG9hZC5hcGlsYXJWdWVsdGE/KFxyXG4gICAgICAgICAgICAgICAgc3RhdGUub3BjaW9uZXMuZm9yUGs9PW51bGw/W106Wy4uLnN0YXRlLm9wY2lvbmVzLnBpbGFGb3JQaywgc3RhdGUub3BjaW9uZXMuZm9yUGtdXHJcbiAgICAgICAgICAgICk6c3RhdGUub3BjaW9uZXMucGlsYUZvclBrO1xyXG4gICAgICAgICAgICBmb3JQa1RvVXJsKGZvclBrLCBwaWxhRm9yUGspO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBvcGNpb25lczp7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUub3BjaW9uZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yUGssXHJcbiAgICAgICAgICAgICAgICAgICAgcGlsYUZvclBrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgVk9MVkVSX0RFX0ZPUk1VTEFSSU86ICh7bWFnbml0dWRSZXRyb2Nlc299OiB7bWFnbml0dWRSZXRyb2Nlc286bnVtYmVyfSkgPT4gXHJcbiAgICAgICAgZnVuY3Rpb24oc3RhdGU6IENhc29TdGF0ZSl7XHJcbiAgICAgICAgICAgIHZhciBmb3JQayA9IHN0YXRlLm9wY2lvbmVzLnBpbGFGb3JQa1tzdGF0ZS5vcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoLW1hZ25pdHVkUmV0cm9jZXNvXXx8bnVsbDtcclxuICAgICAgICAgICAgdmFyIHBpbGFGb3JQayA9IHN0YXRlLm9wY2lvbmVzLnBpbGFGb3JQay5zbGljZSgwLHN0YXRlLm9wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGgtbWFnbml0dWRSZXRyb2Nlc28pO1xyXG4gICAgICAgICAgICBmb3JQa1RvVXJsKGZvclBrLCBwaWxhRm9yUGspO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBvcGNpb25lczp7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUub3BjaW9uZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yUGssXHJcbiAgICAgICAgICAgICAgICAgICAgcGlsYUZvclBrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgRVNUQURPX0NBUkdBOiAocGF5bG9hZDoge2lkQ2FyZ2E6SWRDYXJnYSwgZXN0YWRvX2NhcmdhOkVzdGFkb0NhcmdhfSkgPT5cclxuICAgICAgICBmdW5jdGlvbihzdGF0ZTogQ2Fzb1N0YXRlKXtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlXHJcbiAgICAgICAgICAgIC8vREVTQUNUSVZBRE9cclxuICAgICAgICAgICAgLy9yZXR1cm4ge1xyXG4gICAgICAgICAgICAvLyAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgICAgLy8gICAgZGF0b3M6e1xyXG4gICAgICAgICAgICAvLyAgICAgICAgLi4uc3RhdGUuZGF0b3MsXHJcbiAgICAgICAgICAgIC8vICAgICAgICBjYXJnYXM6e1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgIC4uLnN0YXRlLmRhdG9zLmNhcmdhcyxcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICBbcGF5bG9hZC5pZENhcmdhXToge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAuLi5zdGF0ZS5kYXRvcy5jYXJnYXNbcGF5bG9hZC5pZENhcmdhXSxcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgZXN0YWRvX2NhcmdhOiBwYXlsb2FkLmVzdGFkb19jYXJnYVxyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICAgfVxyXG4gICAgICAgICAgICAvL31cclxuICAgICAgICB9LFxyXG4gICAgVk9MVkVSX0hEUjogKF9wYXlsb2FkOiB7fSkgPT4gXHJcbiAgICAgICAgZnVuY3Rpb24oc3RhdGU6IENhc29TdGF0ZSl7XHJcbiAgICAgICAgICAgIHZhciBmb3JQayA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBwaWxhRm9yUGs6Rm9yUGtbXSA9IFtdO1xyXG4gICAgICAgICAgICBmb3JQa1RvVXJsKGZvclBrLCBwaWxhRm9yUGspO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBvcGNpb25lczp7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUub3BjaW9uZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yUGssXHJcbiAgICAgICAgICAgICAgICAgICAgcGlsYUZvclBrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgU0VUX09QQ0lPTjogKHBheWxvYWQ6IHtvcGNpb246a2V5b2YgQ2Fzb1N0YXRlWydvcGNpb25lcyddLCB2YWxvcjphbnl9KSA9PiBcclxuICAgICAgICBmdW5jdGlvbihzdGF0ZTogQ2Fzb1N0YXRlKXtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxyXG4gICAgICAgICAgICAgICAgb3BjaW9uZXM6e1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLm9wY2lvbmVzLFxyXG4gICAgICAgICAgICAgICAgICAgIFtwYXlsb2FkLm9wY2lvbl06IHBheWxvYWQudmFsb3JcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICBSRVNFVF9PUENJT05FUzogKF9wYXlsb2FkOiB7fSkgPT4gXHJcbiAgICAgICAgZnVuY3Rpb24oc3RhdGU6IENhc29TdGF0ZSl7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgICAgICAgIG9wY2lvbmVzOntcclxuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5vcGNpb25lcyxcclxuICAgICAgICAgICAgICAgICAgICBmb3JQazogbnVsbFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIFJFSU5JQ0lBUl9ERU1POiAoX3BheWxvYWQ6IHt9KSA9PlxyXG4gICAgICAgIGZ1bmN0aW9uKHN0YXRlOiBDYXNvU3RhdGUpe1xyXG4gICAgICAgICAgICBpZighc3RhdGUubW9kby5kZW1vKSByZXR1cm4gc3RhdGU7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgY29waW8gbG9zIGRhdG9zIGluaWNpYWxlc1xyXG4gICAgICAgICAgICAgICAgZGF0b3M6YmVzdEdsb2JhbHMuZGVlcENvcHkoc3RhdGUubW9kby5kZW1vKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIENPTkZJUk1BUl9CT1JSQVJfUkVTUFVFU1RBOiAocGF5bG9hZDoge2ZvclBrOkZvclBrLCB2YXJpYWJsZTpJZFZhcmlhYmxlfG51bGx9KSA9PiBcclxuICAgICAgICBmdW5jdGlvbihzdGF0ZTogQ2Fzb1N0YXRlKXtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxyXG4gICAgICAgICAgICAgICAgb3BjaW9uZXM6e1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLm9wY2lvbmVzLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvclBrOnBheWxvYWQuZm9yUGssXHJcbiAgICAgICAgICAgICAgICAgICAgbW9kb0JvcnJhclJlc3B1ZXN0YTogcGF5bG9hZC52YXJpYWJsZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQWN0aW9uRm9ybXVsYXJpb1N0YXRlID0gQWN0aW9uc0Zyb208dHlwZW9mIHJlZHVjZXJzPjtcclxuLyogRklOIEFDQ0lPTkVTICovXHJcblxyXG5leHBvcnQgY29uc3QgZGlzcGF0Y2hlcnMgPSBjcmVhdGVEaXNwYXRjaGVycyhyZWR1Y2Vycyk7XHJcblxyXG5pbnRlcmZhY2UgSURhdGFTZXBhcmFkYTxUIGV4dGVuZHMge3RpcG9jOnN0cmluZ30+IHtcclxuICAgIGRhdGE6VCxcclxuICAgIGNoaWxkczpJRGF0YVNlcGFyYWRhPFQ+W11cclxufVxyXG5cclxudHlwZSBJRGF0YUNvbkNhc2lsbGVyb3M8VD4gPSBUICYge1xyXG4gICAgY2FzaWxsZXJvczpyZWFkb25seSBJRGF0YUNvbkNhc2lsbGVyb3M8VD5bXVxyXG59XHJcblxyXG5jb25zdCBjYXNpbGxlcm9WYWNpbz17c2FsdG86bnVsbCwgZGVzcGxpZWd1ZTpudWxsLCBhY2xhcmFjaW9uOm51bGwsIHZlcl9pZDpudWxsLCBjYXNpbGxlcm9zOltdLCBsZWVyOm51bGwsXHJcbiAgICBkZXNwbGllZ3VlRW5jYWJlemFkbzpudWxsLCBkZXNwbGllZ3VlQ29udGVuaWRvOm51bGwsIGRlc3BsaWVndWVPY3VsdGE6bnVsbCwgZGVzcGxpZWd1ZVRpcG9JbnB1dDpudWxsXHJcbn1cclxuXHJcbmNvbnN0IG9wY2lvbmVzU2lObzogT3BjaW9uW10gPSBbXHJcbiAgICB7Li4uY2FzaWxsZXJvVmFjaW8sIGNhc2lsbGVybzoxLCB0aXBvYzonTycsIG5vbWJyZTonU8OtJ30sXHJcbiAgICB7Li4uY2FzaWxsZXJvVmFjaW8sIGNhc2lsbGVybzoyLCB0aXBvYzonTycsIG5vbWJyZTonTm8nfSxcclxuXVxyXG5cclxudHlwZSBDYXJhY2VyaXphY2lvbkVzdGFkb1Jvd1ZhbGlkYXRvcj17XHJcbiAgICBjb3JyZWN0bzpib29sZWFuLFxyXG4gICAgY29uVmFsb3I6Ym9vbGVhbnxudWxsLCAvLyBudWxsID0gdW5rbm93blxyXG59XHJcblxyXG5mdW5jdGlvbiBhcGxhbmFyTGFDdXJ2YTxUIGV4dGVuZHMge3RpcG9jOnN0cmluZywgZGVzcGxpZWd1ZT86c3RyaW5nfT4oY2FzaWxsZXJvc0RhdGE6SURhdGFTZXBhcmFkYTxUPik6SURhdGFDb25DYXNpbGxlcm9zPFR8T3BjaW9uPntcclxuICAgIHZhciBkYXRhID0gY2FzaWxsZXJvc0RhdGEuZGF0YVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5kYXRhLFxyXG4gICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG86IGRhdGEuZGVzcGxpZWd1ZT8uaW5jbHVkZXMoJ2hvcml6b250YWwnKT8naG9yaXpvbnRhbCc6ZGF0YS5kZXNwbGllZ3VlPy5pbmNsdWRlcygndmVydGljYWwnKT8ndmVydGljYWwnOm51bGwsXHJcbiAgICAgICAgZGVzcGxpZWd1ZUVuY2FiZXphZG86IGRhdGEuZGVzcGxpZWd1ZT8uaW5jbHVkZXMoJ2xhdGVyYWwnKT8nbGF0ZXJhbCc6ZGF0YS5kZXNwbGllZ3VlPy5pbmNsdWRlcygnc3VwZXJpb3InKT8nc3VwZXJpb3InOm51bGwsXHJcbiAgICAgICAgZGVzcGxpZWd1ZU9jdWx0YTogZGF0YS5kZXNwbGllZ3VlPy5pbmNsdWRlcygnb2N1bHRhcicpPz9udWxsLFxyXG4gICAgICAgIGRlc3BsaWVndWVUaXBvSW5wdXQ6IGRhdGEuZGVzcGxpZWd1ZT8uaW5jbHVkZXMoJ3RlbGVmb25vJyk/J3RlbCc6bnVsbCxcclxuICAgICAgICBjYXNpbGxlcm9zOiAhY2FzaWxsZXJvc0RhdGEuY2hpbGRzLmxlbmd0aCAmJiBjYXNpbGxlcm9zRGF0YS5kYXRhLnRpcG9jPT0nT00nID8gb3BjaW9uZXNTaU5vIDpcclxuICAgICAgICAgICAgIGNhc2lsbGVyb3NEYXRhLmNoaWxkcy5tYXAoY2FzaWxsZXJvPT5hcGxhbmFyTGFDdXJ2YShjYXNpbGxlcm8pKVxyXG4gICAgfVxyXG59XHJcblxyXG4vLyB0eXBlIEFueVJlZjxUIGV4dGVuZHMge30+PVtULCBrZXlvZiBUXTtcclxuXHJcbmZ1bmN0aW9uIHJlbGxlbmFyVmFyaWFibGVzWU9wY2lvbmVzKGlkRm9ybXVsYXJpbzpJZEZvcm11bGFyaW8sIGVzdHJ1Y3R1cmE6RXN0cnVjdHVyYVJvd1ZhbGlkYXRvciwgY2FzaWxsZXJvOkNhc2lsbGVyb3NJbXBsZW1lbnRhZG9zLCB1bmlkYWRBbmFsaXNpcz86c3RyaW5nfG51bGwsXHJcbiAgICBzdWJvcmRpbmFkYVZhcj86SWRWYXJpYWJsZSwgc3Vib3JkaW5hZGFWYWxvcj86YW55XHJcbil7XHJcbiAgICBpZihjYXNpbGxlcm8udmFyX25hbWUgIT0gbnVsbCB8fCBjYXNpbGxlcm8udGlwb2M9PSdGSUxUUk8nKXtcclxuICAgICAgICB2YXIgdmFyX25hbWU6SWRWYXJpYWJsZVxyXG4gICAgICAgIGlmKGNhc2lsbGVyby50aXBvYz09J0ZJTFRSTycpe1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIHBvbmdvIGNvbW8gbm9tYnJlIGRlIHZhcmlhYmxlIGVsIGZpbHRybztcclxuICAgICAgICAgICAgdmFyX25hbWUgPSBjYXNpbGxlcm8uY2FzaWxsZXJvO1xyXG4gICAgICAgIH1lbHNlIGlmKGNhc2lsbGVyby52YXJfbmFtZS5lbmRzV2l0aCgnIScpKXtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBsYXMgdmFyaWFibGVzIGVzcGVqbyBzb24gbGFzIHF1ZSB0ZXJtaW5hbiBlbiAhXHJcbiAgICAgICAgICAgIHZhcl9uYW1lID0gY2FzaWxsZXJvLnZhcl9uYW1lX2VzcGVjaWFsLnJlcGxhY2UoLyErJC8sJycpO1xyXG4gICAgICAgICAgICBjYXNpbGxlcm8udmFyX25hbWUgPSB2YXJfbmFtZTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdmFyX25hbWUgPSBjYXNpbGxlcm8udmFyX25hbWVcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHZhcmlhYmxlRGVmPXtcclxuICAgICAgICAgICAgdGlwbzpjYXNpbGxlcm8udGlwb2M9PSdGSUxUUk8nPydmaWx0cm8nOmNhc2lsbGVyby50aXBvYz09J09NJyB8fCBjYXNpbGxlcm8udGlwb3Zhcj09J3NpX25vJz8nb3BjaW9uZXMnOmNhc2lsbGVyby50aXBvdmFyLFxyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIG9wdGF0aXZvIHBvZHLDrWEgbm8gZXhpc3RpciwgcXVlZGFyw6EgbnVsbC5cclxuICAgICAgICAgICAgb3B0YXRpdmE6Y2FzaWxsZXJvLm9wdGF0aXZvISxcclxuICAgICAgICAgICAgb3BjaW9uZXM6KGNhc2lsbGVyby50aXBvYz09J09NJyB8fCBjYXNpbGxlcm8udGlwb3Zhcj09J29wY2lvbmVzJyB8fCBjYXNpbGxlcm8udGlwb3Zhcj09J3NpX25vJz9cclxuICAgICAgICAgICAgICAgIGxpa2VBci5jcmVhdGVJbmRleChjYXNpbGxlcm8uY2FzaWxsZXJvcywgJ2Nhc2lsbGVybycpOnt9KSBhcyB1bmtub3duIGFzIHsgW2tleTogc3RyaW5nXTogUm93VmFsaWRhdG9yT3BjaW9uPElkVmFyaWFibGU+IH0sXHJcbiAgICAgICAgICAgIHNhbHRvOmNhc2lsbGVyby5zYWx0byBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgICAgICBzYWx0b05zTnI6J3NhbHRvX25zX25jJyBpbiBjYXNpbGxlcm8gJiYgY2FzaWxsZXJvLnNhbHRvX25zX25jIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGZ1bmNpb25IYWJpbGl0YXI6Y2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMsXHJcbiAgICAgICAgICAgIGZ1bmNpb25BdXRvSW5ncmVzYXI6Y2FzaWxsZXJvLmV4cHJlc2lvbl9hdXRvaW5ncmVzYXJfanMsXHJcbiAgICAgICAgICAgIGNhbGN1bGFkYTpcclxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgLy8gVE9ETy4gQXZlcmlndWFyIHNpIGxhcyBwcmVndW50YXMgeSBmaWx0cm9zIHB1ZWRlbiB0ZW5lciB1bmlkYWQgZGUgYW7DoWxpc2lzXHJcbiAgICAgICAgICAgICAgICBjYXNpbGxlcm8udW5pZGFkX2FuYWxpc2lzICYmIGNhc2lsbGVyby51bmlkYWRfYW5hbGlzaXMhPXVuaWRhZEFuYWxpc2lzIFxyXG4gICAgICAgICAgICAgICAgfHwgY2FzaWxsZXJvLmNhbGN1bGFkYSxcclxuICAgICAgICAgICAgbGlicmU6Y2FzaWxsZXJvLmxpYnJlXHJcbiAgICAgICAgfSBhcyAodHlwZW9mIGVzdHJ1Y3R1cmEudmFyaWFibGVzKVtJZFZhcmlhYmxlXVxyXG4gICAgICAgIGlmKHN1Ym9yZGluYWRhVmFsb3IgIT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgdmFyaWFibGVEZWYuc3Vib3JkaW5hZGFWYXIgPSBzdWJvcmRpbmFkYVZhcjtcclxuICAgICAgICAgICAgdmFyaWFibGVEZWYuc3Vib3JkaW5hZGFWYWxvciA9IHN1Ym9yZGluYWRhVmFsb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVzdHJ1Y3R1cmEudmFyaWFibGVzW3Zhcl9uYW1lXT12YXJpYWJsZURlZjtcclxuICAgIH0gZWxzZSBpZiAoY2FzaWxsZXJvLnRpcG9jPT0nQkYnKXtcclxuICAgICAgIC8vIHZhciB2YXJfbmFtZSA9ICckQi5GOicrY2FzaWxsZXJvLnNhbHRvIGFzIElkVmFyaWFibGU7ICAgIC8vb3JpZ2luYWxcclxuICAgICAgICB2YXIgc2FsdG9Ob21icmU9Y2FzaWxsZXJvLnNhbHRvIS5zdWJzdHIoMCwyKT09J0Y6Jz9jYXNpbGxlcm8uc2FsdG8hLnNsaWNlKDIpOmNhc2lsbGVyby5zYWx0bztcclxuICAgICAgICB2YXIgdmFyX25hbWUgPSAnJEIuRjonK3NhbHRvTm9tYnJlIGFzIElkVmFyaWFibGU7XHJcbiAgICAgICAgY2FzaWxsZXJvLnZhcl9uYW1lX0JGID0gdmFyX25hbWU7XHJcbiAgICAgICAgbGV0IHZhcmlhYmxlRGVmPXtcclxuICAgICAgICAgICAgdGlwbzondGV4dG8nLFxyXG4gICAgICAgICAgICBsaWJyZTp0cnVlLFxyXG4gICAgICAgICAgICAuLi4oY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXI/e2Z1bmNpb25IYWJpbGl0YXI6YHZhbG9yZXNbJyR7Y2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJ9J10gIT09MCBgfTp7fSksXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVzdHJ1Y3R1cmEudmFyaWFibGVzW3Zhcl9uYW1lXT12YXJpYWJsZURlZjtcclxuICAgIH1cclxuICAgIGlmKGNhc2lsbGVyby5jYXNpbGxlcm9zKXtcclxuICAgICAgICBjYXNpbGxlcm8uY2FzaWxsZXJvcy5mb3JFYWNoKChjYXNpbGxlcm9IaWpvOkNhc2lsbGVyb3NJbXBsZW1lbnRhZG9zKT0+XHJcbiAgICAgICAgICAgIHJlbGxlbmFyVmFyaWFibGVzWU9wY2lvbmVzKGlkRm9ybXVsYXJpbywgZXN0cnVjdHVyYSwgY2FzaWxsZXJvSGlqbywgdW5pZGFkQW5hbGlzaXMsIGNhc2lsbGVyby52YXJfbmFtZT9jYXNpbGxlcm8udmFyX25hbWU6Y2FzaWxsZXJvLnRpcG9jPT0nTyc/c3Vib3JkaW5hZGFWYXI6dW5kZWZpbmVkLGNhc2lsbGVyby50aXBvYz09J08nP2Nhc2lsbGVyby5jYXNpbGxlcm86dW5kZWZpbmVkKVxyXG4gICAgICAgIClcclxuICAgIH1cclxufVxyXG5cclxudHlwZSBSZWdpc3Ryb0Rlc3Rpbm9zPXtbZGVzdGlubyBpbiBJZERlc3Rpbm9dOklkVmFyaWFibGV8bnVsbH07XHJcblxyXG5mdW5jdGlvbiBvYnRlbmVyRGVzdGlub3NDYXNpbGxlcm9zKGNhc2lsbGVybzpDYXNpbGxlcm9zSW1wbGVtZW50YWRvcywgZGVzdGlub3M/OlJlZ2lzdHJvRGVzdGlub3MpOlJlZ2lzdHJvRGVzdGlub3N7XHJcbiAgICBpZihkZXN0aW5vcz09bnVsbCkgcmV0dXJuIG9idGVuZXJEZXN0aW5vc0Nhc2lsbGVyb3MoY2FzaWxsZXJvLCB7fSBhcyBSZWdpc3Ryb0Rlc3Rpbm9zKTtcclxuICAgIGlmKGNhc2lsbGVyby50aXBvYz09J0ZJTFRSTycpe1xyXG4gICAgICAgIGRlc3Rpbm9zW2Nhc2lsbGVyby5jYXNpbGxlcm9dPWNhc2lsbGVyby5jYXNpbGxlcm8gYXMgSWRWYXJpYWJsZTtcclxuICAgIH1lbHNlIGlmKGNhc2lsbGVyby50aXBvYyE9J0YnICYmIGNhc2lsbGVyby50aXBvYyE9J08nICYmIGNhc2lsbGVyby50aXBvYyE9J09NJyl7XHJcbiAgICAgICAgZGVzdGlub3NbY2FzaWxsZXJvLmNhc2lsbGVyb109Y2FzaWxsZXJvLnByaW1lcmFfdmFyaWFibGV8fG51bGxcclxuICAgIH1cclxuICAgIGlmKGNhc2lsbGVyby5jYXNpbGxlcm9zKXtcclxuICAgICAgICBjYXNpbGxlcm8uY2FzaWxsZXJvcy5mb3JFYWNoKGM9Pm9idGVuZXJEZXN0aW5vc0Nhc2lsbGVyb3MoYyxkZXN0aW5vcykpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlc3Rpbm9zO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZWxsZW5hckRlc3Rpbm9zKGVzdHJ1Y3R1cmE6RXN0cnVjdHVyYVJvd1ZhbGlkYXRvciwgZGVzdGlub3M6UmVnaXN0cm9EZXN0aW5vcyk6RXN0cnVjdHVyYVJvd1ZhbGlkYXRvcntcclxuICAgIGZ1bmN0aW9uIG9idGVuZXJEZXN0aW5vKGlkVmFyaWFibGVRdWVUaWVuZVVuRGVzdGlubzpJZFZhcmlhYmxlfG51bGx8dW5kZWZpbmVkfElkRmluKTpJZFZhcmlhYmxlfG51bGx7XHJcbiAgICAgICAgcmV0dXJuIGlkVmFyaWFibGVRdWVUaWVuZVVuRGVzdGlubz09J2ZpbicgYXMgSWRWYXJpYWJsZSA/ICdmaW4nIGFzIElkVmFyaWFibGUgOiBpZFZhcmlhYmxlUXVlVGllbmVVbkRlc3Rpbm8hPW51bGwgJiYgZGVzdGlub3NbaWRWYXJpYWJsZVF1ZVRpZW5lVW5EZXN0aW5vIGFzIElkRGVzdGlub10gfHwgbnVsbFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5lc3RydWN0dXJhLFxyXG4gICAgICAgIHZhcmlhYmxlczpsaWtlQXIoZXN0cnVjdHVyYS52YXJpYWJsZXMpLm1hcCh2YXJpYWJsZURlZj0+KHtcclxuICAgICAgICAgICAgLi4udmFyaWFibGVEZWYsXHJcbiAgICAgICAgICAgIHNhbHRvOm9idGVuZXJEZXN0aW5vKHZhcmlhYmxlRGVmLnNhbHRvKSxcclxuICAgICAgICAgICAgc2FsdG9Oc05yOm9idGVuZXJEZXN0aW5vKHZhcmlhYmxlRGVmLnNhbHRvTnNOciksXHJcbiAgICAgICAgICAgIG9wY2lvbmVzOnZhcmlhYmxlRGVmLm9wY2lvbmVzIT1udWxsID8gbGlrZUFyKHZhcmlhYmxlRGVmLm9wY2lvbmVzKS5tYXAob3BjaW9uRGVmPT4oe3NhbHRvOm9idGVuZXJEZXN0aW5vKG9wY2lvbkRlZi5zYWx0byl9KSkucGxhaW4oKTp1bmRlZmluZWRcclxuICAgICAgICB9KSkucGxhaW4oKVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZW5lcmFyRXN0cnVjdHVyYVJvd1ZhbGlkYXRvcihjYXNpbGxlcm86Q2FzaWxsZXJvc0ltcGxlbWVudGFkb3MsIGlkRm9ybXVsYXJpbzogSWRGb3JtdWxhcmlvKTpFc3RydWN0dXJhUm93VmFsaWRhdG9ye1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmFJbmNvbXBsZXRhOkVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3I9e3ZhcmlhYmxlczp7fSwgbWFyY2FGaW46J2Zpbid9IGFzIHVua25vd24gYXMgRXN0cnVjdHVyYVJvd1ZhbGlkYXRvcjtcclxuICAgIHJlbGxlbmFyVmFyaWFibGVzWU9wY2lvbmVzKGlkRm9ybXVsYXJpbywgZXN0cnVjdHVyYUluY29tcGxldGEsIGNhc2lsbGVybywgXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZSB2ZXIgc2kgY3VhbHF1aWVyIGNvc2EgcHVlZGUgdGVuZXIgdW5pZGFkX2FuYWxpc2lzXHJcbiAgICAgICAgY2FzaWxsZXJvLnVuaWRhZF9hbmFsaXNpc1xyXG4gICAgKTtcclxuICAgIHZhciBkZXN0aW5vcz1vYnRlbmVyRGVzdGlub3NDYXNpbGxlcm9zKGNhc2lsbGVybyk7XHJcbiAgICByZXR1cm4gcmVsbGVuYXJEZXN0aW5vcyhlc3RydWN0dXJhSW5jb21wbGV0YSwgZGVzdGlub3MpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVNwZWNpYWxXb3Jkcyh0ZXh0OnN0cmluZywgbm9tYnJlOnN0cmluZywgYXBlbGxpZG86c3RyaW5nLCByZXN1bHRhZG86c3RyaW5nKTpzdHJpbmd7XHJcbiAgICBmdW5jdGlvbiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIodGV4dDpzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGV4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRleHQuc2xpY2UoMSk7XHJcbiAgICB9XHJcbiAgICB2YXIgc2ltcGxpZmljYXRlZENoYXJzOntbazpzdHJpbmddOnN0cmluZ309e1xyXG4gICAgICAgIFwiI25vbWJyZVwiOmNhcGl0YWxpemVGaXJzdExldHRlcihub21icmUpLFxyXG4gICAgICAgIFwiI2FwZWxsaWRvXCI6Y2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGFwZWxsaWRvKSxcclxuICAgICAgICBcIiNyZXN1bHRhZG9cIjpyZXN1bHRhZG8sXHJcbiAgICB9O1xyXG4gICAgdmFyIHJlID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhzaW1wbGlmaWNhdGVkQ2hhcnMpLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XHJcblxyXG4gICAgcmV0dXJuIHRleHQucmVwbGFjZShyZSwgZnVuY3Rpb24obWF0Y2hlZCl7XHJcbiAgICAgICAgcmV0dXJuIHNpbXBsaWZpY2F0ZWRDaGFyc1ttYXRjaGVkLnRvTG93ZXJDYXNlKCldO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnb3RvU2luY3Jvbml6YXIoKXtcclxuICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsICcnLCBgJHtsb2NhdGlvbi5vcmlnaW4rbG9jYXRpb24ucGF0aG5hbWV9Ly4uL21lbnUjaT1zaW5jcm9uaXphcmApO1xyXG4gICAgbG9jYXRpb24ucmVsb2FkKCk7ICAgXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnb3RvQ2FtcG8oKXtcclxuICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsICcnLCBgJHtsb2NhdGlvbi5vcmlnaW4rbG9jYXRpb24ucGF0aG5hbWV9Ly4uL2NhbXBvYCk7XHJcbiAgICBsb2NhdGlvbi5yZWxvYWQoKTsgICBcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdvdG9Db25zaXN0aXIob3BlcmF0aXZvOklkT3BlcmF0aXZvLHRhcmVhOklkVGFyZWEsIGVuY3Vlc3RhOklkRW5jKXtcclxuICAgIC8vIFRPRE8tMjAyMy0wMzogcHJvYmFyIGNvbiBlc3RvOlxyXG4gICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgJycsIGAke2xvY2F0aW9uLm9yaWdpbitsb2NhdGlvbi5wYXRobmFtZX0vLi4vbWVudSN3PWNvbnNpc3Rpcl9lbmN1ZXN0YSZ1cD0ke0pTT040YWxsLnRvVXJsKHtvcGVyYXRpdm8sIHRhcmVhLCBlbmN1ZXN0YX0pfSZhdXRvcHJvY2VkPXRydWVgKTtcclxuICAgIC8vIGhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsICcnLCBgJHtsb2NhdGlvbi5vcmlnaW4rbG9jYXRpb24ucGF0aG5hbWV9Ly4uL21lbnUjdz1jb25zaXN0aXJfZW5jdWVzdGEmdXA9e1wib3BlcmF0aXZvXCI6XCIke29wZXJhdGl2b31cIixcInRhcmVhXCI6XCIke3RhcmVhfVwiLFwiZW5jdWVzdGFcIjoke2VuY3Vlc3RhfX0mYXV0b3Byb2NlZD10cnVlYCk7XHJcbiAgICBsb2NhdGlvbi5yZWxvYWQoKTsgICBcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENhY2hlVmVyc2lvbigpe1xyXG4gICAgcmV0dXJuIG15LmdldExvY2FsVmFyKCdhcHAtY2FjaGUtdmVyc2lvbicpO1xyXG59XHJcblxyXG52YXIgcmVkaXJlY3RJZk5vdExvZ2dlZCA9IGZ1bmN0aW9uIHJlZGlyZWN0SWZOb3RMb2dnZWQoZXJyOkVycm9yKXtcclxuICAgIGlmKGVyci5tZXNzYWdlID09IG15Lm1lc3NhZ2VzLm5vdExvZ2dlZCl7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKT0+e1xyXG4gICAgICAgICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCAnJywgYCR7bG9jYXRpb24ub3JpZ2luK2xvY2F0aW9uLnBhdGhuYW1lfS8uLi9sb2dpbiR7bG9jYXRpb24uaGFzaH1gKTtcclxuICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7ICAgXHJcbiAgICAgICAgfSwxNTAwKVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJhZXJFc3RydWN0dXJhKHBhcmFtczp7b3BlcmF0aXZvOiBzdHJpbmd9KXtcclxuICAgIHZhciBlc3RydWN0dXJhID0gIGF3YWl0IG15LmFqYXgub3BlcmF0aXZvX2VzdHJ1Y3R1cmFfY29tcGxldGEocGFyYW1zKTtcclxuICAgIHZhciBjYXNpbGxlcm9zT3JpZ2luYWxlczp7fSA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3M7XHJcbiAgICAvL1RPRE86IEdFTkVSQUxJWkFSXHJcbiAgICAvL0B0cy1pZ25vcmVcclxuICAgIC8vIGNhc2lsbGVyb3NPcmlnaW5hbGVzWydGOkYyX3BlcnNvbmFzJ109Y2FzaWxsZXJvc09yaWdpbmFsZXNbJ0Y6RjInXS5jaGlsZHMuZmluZChjYXNpbGxlcm89PmNhc2lsbGVyby5kYXRhLmNhc2lsbGVybz09J0xQJyk7XHJcbiAgICB2YXIgbWFpbkZvcm06SWRGb3JtdWxhcmlvfHVuZGVmaW5lZDtcclxuICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgdmFyIGNhc2lsbGVyb3NUb2Rvc0Zvcm11bGFyaW9zOntbZiBpbiBJZEZvcm11bGFyaW9dOntjYXNpbGxlcm9zOkZvcm11bGFyaW8sIGVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3I6RXN0cnVjdHVyYVJvd1ZhbGlkYXRvcn19PVxyXG4gICAgICAgIGxpa2VBcihjYXNpbGxlcm9zT3JpZ2luYWxlcykubWFwKFxyXG4gICAgICAgICAgICAoY2FzaWxsZXJvc0plcmFycXVpemFkb3M6YW55LCBpZEZvcm11bGFyaW8pPT57XHJcbiAgICAgICAgICAgICAgICB2YXIgY2FzaWxsZXJvc0FwbGFuYWRvczpDYXNpbGxlcm9zSW1wbGVtZW50YWRvcyA9IGFwbGFuYXJMYUN1cnZhKGNhc2lsbGVyb3NKZXJhcnF1aXphZG9zKTtcclxuICAgICAgICAgICAgICAgIGlmKGNhc2lsbGVyb3NBcGxhbmFkb3MudGlwb2M9PSdGJyAmJiBjYXNpbGxlcm9zQXBsYW5hZG9zLmZvcm11bGFyaW9fcHJpbmNpcGFsKXtcclxuICAgICAgICAgICAgICAgICAgICBtYWluRm9ybT1pZEZvcm11bGFyaW87XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyb3M6IGNhc2lsbGVyb3NBcGxhbmFkb3MsXHJcbiAgICAgICAgICAgICAgICAgICAgZXN0cnVjdHVyYVJvd1ZhbGlkYXRvcjogZ2VuZXJhckVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IoY2FzaWxsZXJvc0FwbGFuYWRvcywgaWRGb3JtdWxhcmlvKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKS5wbGFpbigpO1xyXG4gICAgZXN0cnVjdHVyYS5mb3JtdWxhcmlvcyA9IGNhc2lsbGVyb3NUb2Rvc0Zvcm11bGFyaW9zXHJcbiAgICByZXR1cm4gZXN0cnVjdHVyYTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRtVHJhZXJEYXRvc0Zvcm11bGFyaW8ob3B0czp7b3BlcmF0aXZvOklkT3BlcmF0aXZvLCBtb2RvRGVtbzpib29sZWFuLCBmb3JQa1JhaXo/OkZvclBrUmFpen0pe1xyXG4gICAgdmFyIGdldENhc29TdGF0ZT0oKTpDYXNvU3RhdGU9PiBteU93bi5nZXRMb2NhbFZhcihMT0NBTF9TVE9SQUdFX1NUQVRFX05BTUUpO1xyXG4gICAgdmFyIHNldENhc29TdGF0ZT0oY2Fzb1N0YXRlOkNhc29TdGF0ZSk9PiBteU93bi5zZXRMb2NhbFZhcihMT0NBTF9TVE9SQUdFX1NUQVRFX05BTUUsIGNhc29TdGF0ZSk7XHJcbiAgICBcclxuICAgIHZhciBsb2FkU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBsb2FkU3RhdGUoKTpQcm9taXNlPENhc29TdGF0ZT57XHJcbiAgICAgICAgdmFyIGNhc29TdGF0ZTpDYXNvU3RhdGV8bnVsbCA9IGdldENhc29TdGF0ZSgpO1xyXG4gICAgICAgIHZhciBpbml0aWFsU3RhdGUgPSB7XHJcbiAgICAgICAgICAgIG9wY2lvbmVzOntcclxuICAgICAgICAgICAgICAgIGZvclBrOm51bGwsXHJcbiAgICAgICAgICAgICAgICBwaWxhRm9yUGs6W10sXHJcbiAgICAgICAgICAgICAgICBtb2RvRGVzcGxpZWd1ZToncmVsZXZhbWllbnRvJyxcclxuICAgICAgICAgICAgICAgIG1vZG9EaXJlY3RvOmZhbHNlLFxyXG4gICAgICAgICAgICAgICAgY29uQ2FtcG9PcGNpb25lczpmYWxzZSxcclxuICAgICAgICAgICAgICAgIHNhbHRvQXV0b21hdGljbzp0cnVlLCBcclxuICAgICAgICAgICAgICAgIGJpZW52ZW5pZG86dHJ1ZSxcclxuICAgICAgICAgICAgICAgIG1vZG9Cb3JyYXJSZXNwdWVzdGE6bnVsbCxcclxuICAgICAgICAgICAgfSBhcyBDYXNvU3RhdGVbXCJvcGNpb25lc1wiXSwgLy8gcG9uZXIgbG9zIHZhbG9yZXMgcG9yIGRlZmVjdG8gbcOhcyBhYmFqb1xyXG4gICAgICAgICAgICBtb2RvOntcclxuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBlcyB1biBib29sZWFubyBwZXJvIHBvbmdvIGFow60gbG9zIGRhdG9zIGRlIGRlbW8hXHJcbiAgICAgICAgICAgICAgICBkZW1vOiBcclxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgbXlPd24uY29uZmlnLmNvbmZpZy5hbWJpZW50ZT09J3Rlc3QnIHx8IG15T3duLmNvbmZpZy5jb25maWcuYW1iaWVudGU9PSdkZW1vJyxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gYXMgQ2Fzb1N0YXRlO1xyXG4gICAgICAgIGlmKGNhc29TdGF0ZSl7XHJcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZSA9IHtcclxuICAgICAgICAgICAgICAgIC4uLmluaXRpYWxTdGF0ZSwgXHJcbiAgICAgICAgICAgICAgICBvcGNpb25lczpjYXNvU3RhdGUub3BjaW9uZXMsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYob3B0cy5mb3JQa1JhaXope1xyXG4gICAgICAgICAgICBpbml0aWFsU3RhdGUub3BjaW9uZXMuZm9yUGs9b3B0cy5mb3JQa1JhaXo7XHJcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZS5vcGNpb25lcy5tb2RvRGlyZWN0bz0hIW9wdHMuZm9yUGtSYWl6O1xyXG4gICAgICAgICAgICBpbml0aWFsU3RhdGUub3BjaW9uZXMucGlsYUZvclBrPVtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYWRkclBhcmFtcz1teU93bi5VcmlTZWFyY2hUb09iamVjdChsb2NhdGlvbi5oYXNofHxsb2NhdGlvbi5zZWFyY2h8fCcnKTtcclxuICAgICAgICBpZihhZGRyUGFyYW1zLnN0YXRlX2ZvclBrKXtcclxuICAgICAgICAgICAgaW5pdGlhbFN0YXRlLm9wY2lvbmVzLmZvclBrPUpTT04ucGFyc2UoYWRkclBhcmFtcy5zdGF0ZV9mb3JQayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGFkZHJQYXJhbXMuc3RhdGVfcGlsYUZvclBrKXtcclxuICAgICAgICAgICAgaW5pdGlhbFN0YXRlLm9wY2lvbmVzLnBpbGFGb3JQaz0oYWRkclBhcmFtcy5zdGF0ZV9waWxhRm9yUGsgYXMgc3RyaW5nKS5zcGxpdCgnfCcpLm1hcChqPT5KU09ONGFsbC5wYXJzZShqKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XHJcbiAgICB9XHJcbiAgICB2YXIgc2F2ZVN0YXRlID0gZnVuY3Rpb24gc2F2ZVN0YXRlKHN0YXRlOkNhc29TdGF0ZSl7XHJcbiAgICAgICAgc2V0Q2Fzb1N0YXRlKHN0YXRlKTtcclxuICAgIH1cclxuICAgIC8qIERFRklOSUNJT04gQ09OVFJPTEFET1IgKi9cclxuICAgIHZhciBpbml0aWFsU3RhdGU6Q2Fzb1N0YXRlID0gYXdhaXQgbG9hZFN0YXRlKCk7XHJcbiAgICBjb25zdCBoZHJSZWR1Y2VyID0gY3JlYXRlUmVkdWNlcihyZWR1Y2VycywgaW5pdGlhbFN0YXRlKTtcclxuICAgIC8qIEZJTiBERUZJTklDSU9OIENPTlRST0xBRE9SICovXHJcbiAgICAvKiBDQVJHQSBZIEdVQVJEQURPIERFIFNUQVRFICovXHJcbiAgICAvKiBDUkVBQ0lPTiBTVE9SRSAqL1xyXG4gICAgY29uc3Qgc3RvcmUgPSBjcmVhdGVTdG9yZShoZHJSZWR1Y2VyLCBpbml0aWFsU3RhdGUpOyBcclxuICAgIHNhdmVTdGF0ZShzdG9yZS5nZXRTdGF0ZSgpKTtcclxuICAgIHN0b3JlLnN1YnNjcmliZShmdW5jdGlvbigpe1xyXG4gICAgICAgICBzYXZlU3RhdGUoc3RvcmUuZ2V0U3RhdGUoKSk7XHJcbiAgICB9KTtcclxuICAgIC8qIEZJTiBDUkVBQ0lPTiBTVE9SRSAqL1xyXG4gICAgLy9IRFIgQ09OIFNUT1JFIENSRUFET1xyXG4gICAgcmV0dXJuIHN0b3JlO1xyXG59Il19
|