dmencu 0.3.9 → 0.3.11

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.
@@ -13,16 +13,16 @@ import {Bloque, BotonFormulario,
13
13
  CasilleroBase, CasoState, ConjuntoPreguntas, Consistencia,
14
14
  EstadoCarga, Filtro, ForPk, ForPkRaiz, Formulario,
15
15
  IdFormulario, IdPregunta, IdTarea, IdVariable, InfoFormulario,
16
- HojaDeRuta,
17
16
  ModoDespliegue,
18
17
  Opcion, OpcionMultiple, PlainForPk,
19
18
  Pregunta, PreguntaConOpciones, PreguntaSimple,
20
- Respuestas, RespuestasRaiz, Valor, TEM, IdCarga, Carga, IdFin, IdUnidadAnalisis,
19
+ Respuestas, RespuestaLasUA, RespuestasRaiz, Valor, TEM, IdCarga, Carga, IdFin, IdUnidadAnalisis,
21
20
  ModoAlmacenamiento,
22
21
  toPlainForPk,
23
22
  IdCasillero,
24
23
  PreguntaConSiNo,
25
- Texto, Estructura, InformacionHdr, DatosHdrUaPpal, ConfiguracionSorteoFormulario, ResumenEstado, DatosByPassPersistibles, IdOperativo, IdEnc, Libre
24
+ Texto, Estructura, InformacionHdr, DatosHdrUaPpal, ConfiguracionSorteoFormulario, ResumenEstado, DatosByPassPersistibles, IdOperativo, IdEnc, Libre, UnidadAnalisis,
25
+ iterator, empty
26
26
  } from "./tipos";
27
27
  import{
28
28
  accion_abrir_formulario,
@@ -60,7 +60,7 @@ import { CSSProperties } from "@material-ui/core/styles/withStyles";
60
60
 
61
61
  import {
62
62
  registrarElemento, setAttrDistinto, setValorDistinto, dispatchByPass,
63
- getDirty, getHojaDeRuta, getFeedbackRowValidator,
63
+ getDirty, getFeedbackRowValidator,
64
64
  getFuncionHabilitar,
65
65
  getEstructura,
66
66
  defOperativo,
@@ -118,7 +118,7 @@ export type LibreDespliegueType = (props:{
118
118
  var LibreDespliegue: LibreDespliegueType
119
119
 
120
120
  const Button = ({variant, onClick, disabled, children, className, color, size,
121
- disableElevation, disableFocusRipple, disableRipple, fullWidth,
121
+ disableElevation, disableFocusRipple, disableRipple,
122
122
  ...other
123
123
  }:{
124
124
  variant?:string,
@@ -169,7 +169,8 @@ const TextField = (props:{
169
169
  onChange?:(event:any)=>void,
170
170
  onFocus?:(event:any)=>void,
171
171
  onBlur?:(event:any, valor:any)=>void,
172
- onKeyDown?:(event:KeyboardEvent)=>void
172
+ // onKeyDown?:(event:KeyboardEvent)=>void // KeyboardEventHandler<HTMLInputElement>
173
+ onKeyDown?:React.KeyboardEventHandler<HTMLInputElement>
173
174
  })=><input
174
175
  id={props.id}
175
176
  disabled={props.disabled}
@@ -464,17 +465,17 @@ function EncabezadoDespliegue(props:{casillero:CasilleroEncabezable, verIdGuion?
464
465
  >
465
466
  <ICON.DeleteForever/>
466
467
  </Button></div>:null}
467
- {casillero.var_name?<div><Button
468
+ {casillero.var_name?(ns_nc=><div><Button
468
469
  id={"nsnc-pregunta-"+casillero.var_name}
469
470
  mi-variable={casillero.var_name}
470
471
  variant="outlined"
471
472
  className="boton-pregunta-nsnc"
472
473
  onClick={()=>{
473
- dispatchByPass(accion_registrar_respuesta, {respuesta:casillero.valor_ns_nc??-9, variable:casillero.var_name as IdVariable, forPk:forPk})
474
+ dispatchByPass(accion_registrar_respuesta, {respuesta:ns_nc, variable:casillero.var_name as IdVariable, forPk:forPk})
474
475
  }}
475
476
  >
476
477
  NS/NC
477
- </Button></div>:null}
478
+ </Button></div>)(casillero.valor_ns_nc??-9):null}
478
479
  </div>
479
480
  </div>
480
481
  <div className="nombre-div">
@@ -589,7 +590,7 @@ function Campo(props:{disabled:boolean, pregunta:PreguntaSimple|PreguntaConOpcio
589
590
  fullWidth={true}
590
591
  inputProps={inputProps}
591
592
  type={pregunta.despliegueTipoInput??adaptarTipoVarCasillero(pregunta.tipovar)}
592
- onKeyDown={(event:KeyboardEvent)=>{
593
+ onKeyDown={(event:React.KeyboardEvent)=>{
593
594
  var esEnter = (event.key == 'Enter' || event.keyCode == 13)
594
595
  debeSaltar = esEnter && (saltoAutomatico || conCampoOpciones);
595
596
  if(esEnter){
@@ -685,8 +686,8 @@ function DesplegarCasillero(props:{
685
686
  id?:string,
686
687
  style?:React.CSSProperties,
687
688
  despliegueEncabezado?:'lateral'|'superior'
688
- children:React.ReactNode|Element[],
689
- "ocultar-salteada"?:boolean
689
+ children:React.ReactNode|React.ReactNode[],
690
+ "ocultar-salteada"?:'SI'|'NO'|'INHABILITAR'|undefined
690
691
  }){
691
692
  return <div
692
693
  key={`${props.casillero.tipoc}-${props.id||props.casillero.id_casillero}`}
@@ -778,7 +779,7 @@ var calcularDisabledBFAgregarListo = (configSorteoFormulario:ConfiguracionSorteo
778
779
  !!(configSorteoFormulario && configSorteoFormulario.id_formulario_individual == formulario)
779
780
 
780
781
  function botonesDelFormulario(r:Respuestas, unidad_analisis:IdUnidadAnalisis, estructura:Estructura, forPkPadre:ForPk, feedbackAll:{[formulario in PlainForPk]:FormStructureState<IdVariable, Valor, IdFin>}):HtmlTag<HTMLDivElement>{
781
- var formsVivienda = getFormulariosForIdVivienda(forPkPadre.vivienda!);
782
+ var formsVivienda = getFormulariosForIdVivienda(forPkPadre.vivienda);
782
783
  var uaDef = estructura.unidades_analisis[unidad_analisis];
783
784
  var arrayEstructuraFormularios = (likeAr(estructura.formularios)).array();
784
785
  var x = likeAr(uaDef.hijas).filter(uaHija=>
@@ -867,7 +868,6 @@ function TextoDespliegue(props:{casillero:Texto, forPk:ForPk}){
867
868
  // var nuevaForPk={...forPk, formulario:idFormularioDestino};
868
869
  // nuevaForPk[nuevoCampoPk] = defBoton.num
869
870
  dispatch(dispatchers.CAMBIAR_FORMULARIO({forPk:defBoton.forPk, apilarVuelta:true}));
870
- dispatchByPass(accion_abrir_formulario,{forPk:defBoton.forPk})
871
871
  }
872
872
  return <DesplegarCasillero
873
873
  id={`${id}-externo`}
@@ -1005,11 +1005,11 @@ function BotonFormularioDespliegue(props:{casillero:BotonFormulario, formulario:
1005
1005
  var habilitador = casillero.expresion_habilitar_js?getFuncionHabilitar(casillero.expresion_habilitar_js):()=>true;
1006
1006
  var {opciones} = useSelectorVivienda(forPk);
1007
1007
  //var idFormularioDestino = 'F:'+casillero.salto! as IdFormulario; //original
1008
- var armoNomSalto=casillero.salto!.substr(0,2)=='F:'?casillero.salto.slice(2):casillero.salto;
1008
+ var armoNomSalto=casillero.salto?.substring(0,2)=='F:'?casillero.salto.slice(2):casillero.salto;
1009
1009
  //console.log('BotonFormularioDespliegue armoNomSalto ' +armoNomSalto);
1010
1010
  var idFormularioDestino = 'F:'+armoNomSalto! as IdFormulario;
1011
1011
  var estructura = getEstructura();
1012
- var {formularioAAbrir} = useSelector((state:CasoState)=>({
1012
+ var {formularioAAbrir} = useSelector((_state:CasoState)=>({
1013
1013
  formularioAAbrir:estructura.formularios[idFormularioDestino].casilleros,
1014
1014
  }));
1015
1015
  var sufijoIdElemento = toPlainForPk(forPk);
@@ -1058,7 +1058,7 @@ function BotonFormularioDespliegue(props:{casillero:BotonFormulario, formulario:
1058
1058
  // var estadoDelBoton = feedbackRow.feedback['$B.F:'+casillero.salto as IdVariable].estado //original
1059
1059
  var estadoDelBoton = feedbackRow.feedback['$B.F:'+armoNomSalto as IdVariable].estado
1060
1060
  // console.log('BotonFormularioDespliegue estadoDelBoton ' +estadoDelBoton );
1061
- var configSorteoFormulario = estructura.configSorteo?estructura.configSorteo[getMainFormForVivienda(forPk.vivienda!)]:null
1061
+ var configSorteoFormulario = estructura.configSorteo?estructura.configSorteo[getMainFormForVivienda(forPk.vivienda)]:null
1062
1062
  listaDeBotonesAbrir = likeAr(conjunto).map((_, i)=>{
1063
1063
  let num:number = numberOrStringIncIfArray(i, conjunto) as number;
1064
1064
  let forPk={...props.forPk, formulario:idFormularioDestino, [nuevoCampoPk]:num};
@@ -1214,7 +1214,7 @@ function DesplegarContenidoInternoBloqueOFormulario(props:{bloqueOFormulario:Blo
1214
1214
  setForPkActual(props.bloqueOFormulario.casillero)
1215
1215
  }
1216
1216
  useEffect(()=>{
1217
- var timer:NodeJS.Timeout|null = setTimeout(()=>{
1217
+ var timer = setTimeout(()=>{
1218
1218
  setVerTodo(true);
1219
1219
  },250)
1220
1220
  return ()=>{
@@ -1355,14 +1355,14 @@ function BarraDeNavegacion(props:{forPk:ForPk, soloLectura:boolean, modoDirecto:
1355
1355
  const forPk = props.forPk;
1356
1356
  const {opciones} = useSelectorVivienda(forPk);
1357
1357
  const [confirmaCerrar, setConfirmaCerrar] = useState<boolean|null>(false);
1358
- var dominio = getDatosByPass().informacionHdr[forPk.vivienda!].tem.dominio;
1358
+ var dominio = getDatosByPass().informacionHdr[forPk.vivienda].tem.dominio;
1359
1359
  var cerrarDirecto = async function(){
1360
1360
  removeCSSById(BOOTSTRAP_5_1_3_SRC);
1361
1361
  var estructura = getEstructura();
1362
1362
  gotoConsistir(
1363
1363
  estructura.operativo as IdOperativo,
1364
- getDatosByPass().informacionHdr[forPk.vivienda!].tarea.tarea,
1365
- forPk.vivienda?.toString() as IdEnc
1364
+ getDatosByPass().informacionHdr[forPk.vivienda].tarea.tarea,
1365
+ forPk.vivienda
1366
1366
  );
1367
1367
  //var hash=new URLSearchParams(location.hash?.replace(/^\#/,'').split('&autoproced')[0]);
1368
1368
  ////hash.delete('autoproced')
@@ -1529,6 +1529,8 @@ function FormularioDespliegue(props:{forPk:ForPk}){
1529
1529
  feedbackForm.resumen
1530
1530
  )})
1531
1531
  })
1532
+ // @ts-expect-error especial hay que leerlo en el parser de casilleros si esto termina quedando así
1533
+ var pantallaCompleta = formulario.especial?.pantallaCompleta;
1532
1534
  return (
1533
1535
  <>
1534
1536
  <AppBar position="fixed" color={soloLectura?'secondary':'primary'}>
@@ -1549,10 +1551,10 @@ function FormularioDespliegue(props:{forPk:ForPk}){
1549
1551
  )}
1550
1552
  </ButtonGroup>
1551
1553
  </div>:null}
1552
- <BotonVolverEnDiv id="boton-volver-1"/>
1553
- <FormularioEncabezado casillero={formulario}/>
1554
+ {pantallaCompleta?null:<BotonVolverEnDiv id="boton-volver-1"/>}
1555
+ {pantallaCompleta?null:<FormularioEncabezado casillero={formulario}/>}
1554
1556
  <DesplegarContenidoInternoBloqueOFormulario bloqueOFormulario={formulario} formulario={formulario} forPk={forPk} multiple={false}/>
1555
- <BotonVolverEnDiv id="boton-volver-2"/>
1557
+ {pantallaCompleta?null:<BotonVolverEnDiv id="boton-volver-2"/>}
1556
1558
  </Paper>
1557
1559
  <Fab id='fab-activo-arriba' color="primary" aria-label="add" onClick={onClickSaltarActual}>
1558
1560
  <ICON.KeyboardArrowUp />
@@ -1594,14 +1596,14 @@ resumidores.push(
1594
1596
  )
1595
1597
 
1596
1598
  export function DesplegarLineaResumenUAPrincipal(props:{
1597
- numVivienda:number,
1599
+ numVivienda:IdEnc,
1598
1600
  formPrincipal:IdFormulario,
1599
1601
  tarea: string,
1600
1602
  respuestas:RespuestasRaiz,
1601
1603
  }){
1602
1604
  const {numVivienda, respuestas, formPrincipal, tarea} = props;
1603
1605
  const id='viv-'+numVivienda;
1604
- const forPk:ForPk={formulario:formPrincipal, vivienda:Number(numVivienda)};
1606
+ const forPk:ForPk={formulario:formPrincipal, vivienda:numVivienda};
1605
1607
  var tem = getDatosByPass().informacionHdr[numVivienda].tem;
1606
1608
  var dispatch = useDispatch();
1607
1609
  useEffect(()=>{
@@ -1656,7 +1658,7 @@ export function DesplegarCarga(props:{
1656
1658
  idCarga:IdCarga,
1657
1659
  posicion:number,
1658
1660
  informacionHdr:InformacionHdr,
1659
- respuestas: Respuestas,
1661
+ respuestas: RespuestaLasUA,
1660
1662
  feedbackRowValidator:{
1661
1663
  [formulario in PlainForPk]:FormStructureState<IdVariable, Valor, IdFin>
1662
1664
  }
@@ -1694,13 +1696,13 @@ export function DesplegarCarga(props:{
1694
1696
  </TableRow>
1695
1697
  </TableHead>
1696
1698
  <TableBody>
1697
- {beingArray(informacionHdr).filter((informacion:DatosHdrUaPpal, _numVivienda:number)=>informacion.tem.carga==idCarga).map((informacion:DatosHdrUaPpal, numVivienda:number)=>
1699
+ {likeAr(informacionHdr).filter((informacion)=>informacion.tem.carga==idCarga).map((informacion, numVivienda)=>
1698
1700
  <DesplegarLineaResumenUAPrincipal
1699
1701
  key={numVivienda}
1700
1702
  numVivienda={numVivienda}
1701
1703
  tarea={informacion.tarea.tarea}
1702
1704
  formPrincipal={informacion.tarea.main_form}
1703
- respuestas={respuestas.viviendas[numVivienda]}
1705
+ respuestas={respuestas.viviendas[numVivienda] as RespuestasRaiz}
1704
1706
  />
1705
1707
  ).array()}
1706
1708
  </TableBody>
@@ -1810,7 +1812,7 @@ export function HojaDeRutaDespliegue(){
1810
1812
  <div>Dirección General de Estadística y Censos - C.A.B.A.</div>
1811
1813
  <div>{my.getLocalVar('app-version')} sincro {num_sincro} - versión {appVersion}</div>
1812
1814
  </div>
1813
- {likeAr(cargas).map((carga: Carga, idCarga: IdCarga, _, posicion:number)=>
1815
+ {likeAr(cargas).map((carga, idCarga, _, posicion)=>
1814
1816
  <DesplegarCarga key={idCarga} carga={carga} idCarga={idCarga} posicion={posicion} informacionHdr={informacionHdr} feedbackRowValidator={feedbackRowValidator} respuestas={respuestas}/>
1815
1817
  ).array()}
1816
1818
  </div>
@@ -1964,7 +1966,7 @@ export async function dmPantallaInicialSinCarga(){
1964
1966
  )
1965
1967
  }
1966
1968
 
1967
- export async function desplegarFormularioActual(opts:{modoDemo:boolean, forPkRaiz?:ForPkRaiz}){
1969
+ export async function desplegarFormularioActual(opts:{modoDemo:boolean, forPkRaiz?:ForPkRaiz, operativo:IdOperativo}){
1968
1970
  // traer los metadatos en una "estructura"
1969
1971
  // traer los datos de localStorage
1970
1972
  // verificar el main Layout
@@ -2039,8 +2041,9 @@ setCalcularVariables((respuestasRaiz:RespuestasRaiz, forPk:ForPk)=>{
2039
2041
  //TODO GENERALIZAR
2040
2042
  var uasIterar:{
2041
2043
  [key in IdUnidadAnalisis]:{
2042
- uaPersonas: IdUnidadAnalisis,
2043
- varSexoPersona: IdVariable,
2044
+ uaPersonas: IdUnidadAnalisis
2045
+ varSexoPersona: IdVariable
2046
+ varNombrePersona: IdVariable
2044
2047
  varLosNombres: IdVariable
2045
2048
  }
2046
2049
  } = {
@@ -2050,8 +2053,7 @@ setCalcularVariables((respuestasRaiz:RespuestasRaiz, forPk:ForPk)=>{
2050
2053
  varNombrePersona: 'nombre' as IdVariable,
2051
2054
  varLosNombres: "los_nombres" as IdVariable
2052
2055
  },
2053
- //@ts-ignore es unidad de analisis
2054
- hogares_sup: {
2056
+ ["hogares_sup" as IdUnidadAnalisis] : {
2055
2057
  uaPersonas: 'personas_sup' as IdUnidadAnalisis,
2056
2058
  varSexoPersona: 'sexo_sup' as IdVariable,
2057
2059
  varNombrePersona: 'nombre_sup' as IdVariable,
@@ -2061,13 +2063,14 @@ setCalcularVariables((respuestasRaiz:RespuestasRaiz, forPk:ForPk)=>{
2061
2063
  likeAr(uasIterar).forEach((configHogares,uaHogares)=>{
2062
2064
  var estructura = getEstructura();
2063
2065
  if(estructura.unidades_analisis[uaHogares]){
2064
- for(var respuestasHogar of respuestasRaiz[uaHogares]||[]){
2065
- if(!respuestasHogar[configHogares.uaPersonas] || respuestasHogar[configHogares.uaPersonas].length==0 || respuestasHogar[configHogares.uaPersonas][0][configHogares.varSexoPersona] == null){
2066
- if(respuestasHogar[configHogares.varLosNombres]){
2066
+ for(var respuestasHogar of iterator(respuestasRaiz[uaHogares]??[])){
2067
+ if(!respuestasHogar[configHogares.uaPersonas] || empty(respuestasHogar[configHogares.uaPersonas]) || respuestasHogar[configHogares.uaPersonas][0][configHogares.varSexoPersona] == null){
2068
+ var losNombres = respuestasHogar[configHogares.varLosNombres] as string
2069
+ if(losNombres != null){
2067
2070
  if(!respuestasHogar[configHogares.uaPersonas]){
2068
2071
  respuestasHogar[configHogares.uaPersonas]=[];
2069
2072
  }
2070
- respuestasHogar[configHogares.varLosNombres]
2073
+ losNombres
2071
2074
  .split(',')
2072
2075
  .filter((nombre:string)=>nombre.trim().length > 0)
2073
2076
  .forEach((nombre:string, i:number)=>{
@@ -70,6 +70,7 @@ export declare type OpcionMultiple = CasilleroBase & {
70
70
  casilleros: [OpcionSi, OpcionNo];
71
71
  calculada?: boolean;
72
72
  libre?: boolean;
73
+ valor_ns_nc: any;
73
74
  };
74
75
  export declare type PreguntaBase = CasilleroBase & {
75
76
  tipoc: 'P';
@@ -77,6 +78,7 @@ export declare type PreguntaBase = CasilleroBase & {
77
78
  casillero: IdPregunta;
78
79
  calculada: boolean | null;
79
80
  libre: boolean | null;
81
+ valor_ns_nc: any;
80
82
  };
81
83
  export declare type PreguntaSimple = PreguntaBase & {
82
84
  tipovar: TipoVariables;
@@ -172,12 +174,14 @@ export declare type CasillerosImplementados = Formulario | Bloque | Filtro | Con
172
174
  export declare type CampoPkRaiz = 'vivienda' | 'etc...';
173
175
  export declare type ForPkRaiz = {
174
176
  formulario: IdFormulario;
177
+ vivienda: IdEnc;
175
178
  } & {
176
179
  [campo in CampoPkRaiz]?: number;
177
180
  };
178
181
  export declare type CampoPk = 'vivienda' | 'hogar' | 'persona' | 'etc...';
179
182
  export declare type ForPk = {
180
183
  formulario: IdFormulario;
184
+ vivienda: IdEnc;
181
185
  } & {
182
186
  [campo in CampoPk]?: number;
183
187
  };
@@ -185,11 +189,13 @@ export declare type PlainForPk = '{"formulario":"F:F1","vivienda":"10202","perso
185
189
  export declare type ObjetoNumeradoOArray<T> = T[] | {
186
190
  [n in number]: T;
187
191
  };
188
- export declare type Respuestas = {
192
+ export declare type RespuestasUnaUA = {
189
193
  [pregunta in IdVariable]: Valor;
190
- } & {
194
+ };
195
+ export declare type RespuestaLasUA = {
191
196
  [ua in IdUnidadAnalisis]: ObjetoNumeradoOArray<Respuestas>;
192
197
  };
198
+ export declare type Respuestas = RespuestasUnaUA & RespuestaLasUA;
193
199
  export declare type RespuestasRaiz = Respuestas & {
194
200
  resumenEstado: ResumenEstado;
195
201
  resumenEstadoSup: ResumenEstado;
@@ -227,7 +233,7 @@ export declare type TEM = {
227
233
  };
228
234
  export declare type ResumenEstado = 'vacio' | 'con problemas' | 'incompleto' | 'ok' | 'no rea' | 'cita pactada';
229
235
  export declare type InfoTarea = {
230
- tarea?: IdTarea;
236
+ tarea: IdTarea;
231
237
  notas?: string;
232
238
  fecha_asignacion?: Date;
233
239
  asignado?: string;
@@ -298,7 +304,7 @@ export declare type Estructura = {
298
304
  grupo0_sup: string;
299
305
  }[];
300
306
  };
301
- export declare type IdEnc = '130031' | '130032' | 'etc';
307
+ export declare type IdEnc = 130031 | 130032;
302
308
  export declare type InformacionHdr = {
303
309
  [enc in IdEnc]: DatosHdrUaPpal;
304
310
  };
@@ -437,6 +443,8 @@ export declare type ConfiguracionSorteoFormulario = {
437
443
  id_formulario_padre?: IdFormulario;
438
444
  } & (ConfiguracionSorteoHash | ConfiguracionSorteoTabla);
439
445
  export declare function toPlainForPk(forPk: ForPk): PlainForPk;
446
+ export declare var iterator: <T>(o: ObjetoNumeradoOArray<T>) => Iterable<T>;
447
+ export declare var empty: <T>(o: ObjetoNumeradoOArray<T> | null | undefined) => boolean;
440
448
  declare global {
441
449
  namespace myOwn {
442
450
  interface AddrParams {
@@ -4,16 +4,19 @@
4
4
  if (v !== undefined) module.exports = v;
5
5
  }
6
6
  else if (typeof define === "function" && define.amd) {
7
- define(["require", "exports"], factory);
7
+ define(["require", "exports", "like-ar"], factory);
8
8
  }
9
9
  })(function (require, exports) {
10
10
  "use strict";
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.toPlainForPk = void 0;
12
+ exports.empty = exports.iterator = exports.toPlainForPk = void 0;
13
+ const LikeAr = require("like-ar");
13
14
  function toPlainForPk(forPk) {
14
15
  // @ts-ignore sabemos que hay que hacer un JSON
15
16
  return JSON.stringify(forPk);
16
17
  }
17
18
  exports.toPlainForPk = toPlainForPk;
19
+ exports.iterator = LikeAr.iterator;
20
+ exports.empty = LikeAr.empty;
18
21
  });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlwb3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvdGlwb3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0lBQUEsWUFBWSxDQUFDOzs7SUFnZGIsU0FBZ0IsWUFBWSxDQUFDLEtBQVc7UUFDcEMsK0NBQStDO1FBQy9DLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBSEQsb0NBR0MiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuaW1wb3J0IHtTdHJ1Y3R1cmUsIEZlZWRiYWNrfSBmcm9tIFwicm93LXZhbGlkYXRvclwiO1xyXG5cclxuZXhwb3J0IHR5cGUgTW9kb0FsbWFjZW5hbWllbnRvID0gJ3Nlc3Npb24nfCAvLyBjdWFuZG8gc2VhIHBhcmEgdW5hIHNvbGEgcGVzdGHDsWEsIHNlIHVzYSBlbiBtb2RvIGRpcmVjdG8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsb2NhbCcgICAgLy8gcGFyYSB0b2RvIGVsIGRpc3Bvc2l0aXZvLCBzZSB1c2EgYWwgY2FyZ2FyIGhvamFzIGRlIHJ1dGEgZW50cmVzXHJcblxyXG5leHBvcnQgdHlwZSBJZE9wY2lvbiA9IG51bWJlclxyXG5leHBvcnQgdHlwZSBJZE9wZXJhdGl2byA9ICdldG9pMjExJ3wnZWFoMjAyMid8J2V0Yy4uLidcclxuZXhwb3J0IHR5cGUgSWRWYXJpYWJsZSA9ICd2MSd8J3YyJ3wndjMnfCdldGMuLi4nfCd2ZG9taW5pbyd8JyRwMCdcclxuZXhwb3J0IHR5cGUgSWRQcmVndW50YSA9ICdQMSd8J1AyJ3wnZXRjLi4uJ1xyXG5leHBvcnQgdHlwZSBJZEJsb3F1ZSA9ICdCMSd8J0IyJ3wnZXRjLi4uJ1xyXG5leHBvcnQgdHlwZSBJZEZvcm11bGFyaW8gPSAnRjEnfCdGMid8J2V0Yy4uLidcclxuZXhwb3J0IHR5cGUgSWRVbmlkYWRBbmFsaXNpcyA9ICd2aXZpZW5kYXMnfCdob2dhcmVzJ3wncGVyc29uYXMnXHJcbmV4cG9ydCB0eXBlIElkQm90b25Gb3JtdWxhcmlvID0gJ0JGOkYxJ3wnQkY6RjInfCdldGMuLi4nXHJcbmV4cG9ydCB0eXBlIElkQ29uc2lzdGVuY2lhID0gJ0NPTlMxJ3wnQ09OUzInfCdldGMuLi4nXHJcbmV4cG9ydCB0eXBlIElkVGV4dG8gPSAnRDMwX1JFRid8J01FU19SRUYnfCdTRU1fUkVGJ3wnZXRjLi4uJ1xyXG5leHBvcnQgdHlwZSBJZEZpbHRybyA9ICdGSUxUUk8xJyB8ICdGSUxUUk8yJyB8ICdldGMuLi4nXHJcbmV4cG9ydCB0eXBlIElkQ2FzaWxsZXJvID0gSWRWYXJpYWJsZSB8IElkUHJlZ3VudGEgfCBJZEJsb3F1ZSB8IElkRm9ybXVsYXJpbyB8IElkRmlsdHJvIHwgSWRPcGNpb25cclxuZXhwb3J0IHR5cGUgSWRGaW4gPSAnZmluJzsgLy8gbmV2ZXIgLy8gVE9ETzogcG9kZXIgcG9uZXIgJ0ZJTidcclxuZXhwb3J0IHR5cGUgSWREZXN0aW5vID0gSWRQcmVndW50YSB8IElkQmxvcXVlIHwgSWRGaW4gfCBJZEZpbHRybyBcclxuZXhwb3J0IHR5cGUgVmFsb3IgPSBzdHJpbmd8bnVtYmVyfG51bGw7XHJcbmV4cG9ydCB0eXBlIFRpcG9jRGVzdGlub3MgPSAnUCd8J0NQJ3wnQid8J0ZJTFRSTyd8J0JGJ1xyXG5leHBvcnQgdHlwZSBUaXBvYyA9IFRpcG9jRGVzdGlub3MgfCAnRid8J08nfCdPTSd8J0NPTlMnIHwnVEVYVE8nIHwgJ0xJQlJFJ1xyXG5cclxuZXhwb3J0IHR5cGUgSWRUYXJlYSA9ICdlbmN1J3wncmVjdSd8J3N1cGUnO1xyXG5cclxuZXhwb3J0IHR5cGUgRmVlZGJhY2tWYXJpYWJsZSA9IEZlZWRiYWNrPElkVmFyaWFibGUsIElkRmluPlxyXG5cclxuZXhwb3J0IHR5cGUgVGlwb1ZhcmlhYmxlcyA9ICd0ZXh0byd8J251bWVybyd8J2ZlY2hhJ3wnaG9yYXMnXHJcblxyXG5leHBvcnQgdHlwZSBEZXNwbGllZ3VlID0gJ2hvcml6b250YWwnfCdvY3VsdGEnXHJcblxyXG5leHBvcnQgdHlwZSBDYXNpbGxlcm9CYXNlID0ge1xyXG4gICAgaWRfY2FzaWxsZXJvPzpzdHJpbmdcclxuICAgIHRpcG9jOlRpcG9jXHJcbiAgICBjYXNpbGxlcm86SWRDYXNpbGxlcm9cclxuICAgIG5vbWJyZTpzdHJpbmdcclxuICAgIHNhbHRvOklkRGVzdGlub3xJZEZpbnxudWxsXHJcbiAgICB2ZXJfaWQ6c3RyaW5nfG51bGxcclxuICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvOidsYXRlcmFsJ3wnc3VwZXJpb3InfG51bGxcclxuICAgIGRlc3BsaWVndWVDb250ZW5pZG86J3ZlcnRpY2FsJ3wnaG9yaXpvbnRhbCd8bnVsbFxyXG4gICAgZGVzcGxpZWd1ZVRpcG9JbnB1dDondGVsJ3xudWxsXHJcbiAgICBkZXNwbGllZ3VlT2N1bHRhOmJvb2xlYW58bnVsbFxyXG4gICAgbGVlcjpib29sZWFufG51bGxcclxuICAgIGFjbGFyYWNpb246c3RyaW5nfG51bGxcclxuICAgIHByaW1lcmFfdmFyaWFibGU/OklkVmFyaWFibGV8bnVsbFxyXG4gICAgdmFyX25hbWU/OklkVmFyaWFibGV8bnVsbFxyXG4gICAgdmFyX25hbWVfZXNwZWNpYWw/OnN0cmluZ3xudWxsXHJcbiAgICB0aXBvdmFyPzpUaXBvVmFyaWFibGVzfCdvcGNpb25lcyd8J3NpX25vJ3xudWxsXHJcbiAgICBjYXNpbGxlcm9zPzpDYXNpbGxlcm9zSW1wbGVtZW50YWRvc1tdfG51bGxcclxuICAgIGV4cHJlc2lvbl9oYWJpbGl0YXI/OnN0cmluZ1xyXG4gICAgZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz86c3RyaW5nXHJcbiAgICBleHByZXNpb25fYXV0b2luZ3Jlc2FyPzpzdHJpbmdcclxuICAgIGV4cHJlc2lvbl9hdXRvaW5ncmVzYXJfanM/OnN0cmluZ1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBPcGNpb249Q2FzaWxsZXJvQmFzZSAmIHtcclxuICAgIHRpcG9jOidPJ1xyXG4gICAgY2FzaWxsZXJvOklkT3BjaW9uXHJcbiAgICBjYXNpbGxlcm9zOlByZWd1bnRhU2ltcGxlW11cclxuICAgIHZhcl9uYW1lPzpudWxsXHJcbiAgICB0aXBvdmFyPzpudWxsXHJcbiAgICBwcmltZXJhX3ZhcmlhYmxlPzpudWxsXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIE9wY2lvblNpPU9wY2lvbiAmIHtcclxuICAgIGNhc2lsbGVybzoxXHJcbiAgICBub21icmU6J1PDrSdcclxuICAgIGNhc2lsbGVyb3M6UHJlZ3VudGFTaW1wbGVbXSBcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgT3BjaW9uTm89T3BjaW9uICYge1xyXG4gICAgY2FzaWxsZXJvOjJcclxuICAgIG5vbWJyZTonTm8nXHJcbiAgICBjYXNpbGxlcm9zOlByZWd1bnRhU2ltcGxlW10gXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIE9wY2lvbk11bHRpcGxlPUNhc2lsbGVyb0Jhc2UgJiB7XHJcbiAgICB0aXBvYzonT00nXHJcbiAgICB0aXBvdmFyOidvcGNpb25lcydcclxuICAgIHZhcl9uYW1lOklkVmFyaWFibGVcclxuICAgIGNhc2lsbGVyb3M6W09wY2lvblNpLCBPcGNpb25Ob11cclxuICAgIGNhbGN1bGFkYT86Ym9vbGVhblxyXG4gICAgbGlicmU/OmJvb2xlYW5cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUHJlZ3VudGFCYXNlID0gQ2FzaWxsZXJvQmFzZSAmIHtcclxuICAgIHRpcG9jOidQJ1xyXG4gICAgb3B0YXRpdm86Ym9vbGVhbnxudWxsXHJcbiAgICBjYXNpbGxlcm86SWRQcmVndW50YVxyXG4gICAgY2FsY3VsYWRhOiBib29sZWFufG51bGxcclxuICAgIGxpYnJlOiBib29sZWFufG51bGxcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUHJlZ3VudGFTaW1wbGUgPSBQcmVndW50YUJhc2UgJiB7XHJcbiAgICB0aXBvdmFyOlRpcG9WYXJpYWJsZXNcclxuICAgIHZhcl9uYW1lOklkVmFyaWFibGVcclxuICAgIGxvbmdpdHVkOnN0cmluZ1xyXG4gICAgc2FsdG9fbnNfbmM6SWRWYXJpYWJsZXxudWxsXHJcbiAgICBjYXNpbGxlcm9zOiBQcmVndW50YVNpbXBsZVtdXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFByZWd1bnRhQ29uU2lObyA9IFByZWd1bnRhQmFzZSAmIHtcclxuICAgIHRpcG92YXI6J3NpX25vJ1xyXG4gICAgdmFyX25hbWU6SWRWYXJpYWJsZVxyXG4gICAgc2FsdG9fbnNfbmM6SWRWYXJpYWJsZXxudWxsXHJcbiAgICBjYXNpbGxlcm9zOiBbT3BjaW9uU2ksIE9wY2lvbk5vXVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBQcmVndW50YUNvbk9wY2lvbmVzID0gUHJlZ3VudGFCYXNlICYge1xyXG4gICAgdGlwb3Zhcjonb3BjaW9uZXMnXHJcbiAgICB2YXJfbmFtZTpJZFZhcmlhYmxlXHJcbiAgICBzYWx0b19uc19uYzpJZFZhcmlhYmxlfG51bGxcclxuICAgIGNhc2lsbGVyb3M6IE9wY2lvbltdXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFByZWd1bnRhQ29uT3BjaW9uZXNNdWx0aXBsZXMgPSBQcmVndW50YUJhc2UgJiB7XHJcbiAgICB2YXJfbmFtZT86bnVsbFxyXG4gICAgdGlwb3Zhcj86bnVsbFxyXG4gICAgY2FzaWxsZXJvczogT3BjaW9uTXVsdGlwbGVbXVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBQcmVndW50YT1QcmVndW50YVNpbXBsZSB8IFByZWd1bnRhQ29uU2lObyB8IFByZWd1bnRhQ29uT3BjaW9uZXMgfCBQcmVndW50YUNvbk9wY2lvbmVzTXVsdGlwbGVzXHJcblxyXG5leHBvcnQgdHlwZSBDb25qdW50b1ByZWd1bnRhcz0gQ2FzaWxsZXJvQmFzZSAmIHtcclxuICAgIHRpcG9jOidDUCdcclxuICAgIGNhc2lsbGVybzpJZFByZWd1bnRhXHJcbiAgICB2YXJfbmFtZT86bnVsbFxyXG4gICAgdGlwb3Zhcj86bnVsbFxyXG4gICAgY2FzaWxsZXJvczpQcmVndW50YVtdXHJcbn1cclxuXHJcbi8qXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvbnRlbmlkbyBleHRlbmRzIENhc2lsbGVyb0Jhc2Uge1xyXG4gICAgY2FzaWxsZXJvczpJQ29udGVuaWRvW11cclxufVxyXG4qL1xyXG5cclxuZXhwb3J0IHR5cGUgRmlsdHJvID0gQ2FzaWxsZXJvQmFzZSAmIHtcclxuICAgIHRpcG9jOidGSUxUUk8nXHJcbiAgICBjYXNpbGxlcm86SWRGaWx0cm9cclxuICAgIHZhcl9uYW1lPzpudWxsXHJcbiAgICB0aXBvdmFyPzpudWxsXHJcbiAgICBwcmltZXJhX3ZhcmlhYmxlPzpudWxsXHJcbiAgICBjYWxjdWxhZGE/Om51bGxcclxuICAgIGxpYnJlPzpudWxsXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIENvbnRlbmlkb0Zvcm11bGFyaW89QmxvcXVlfFByZWd1bnRhfENvbmp1bnRvUHJlZ3VudGFzfEZpbHRyb3xCb3RvbkZvcm11bGFyaW98Q29uc2lzdGVuY2lhfFRleHRvXHJcblxyXG5leHBvcnQgdHlwZSBCbG9xdWUgPSBDYXNpbGxlcm9CYXNlICYge1xyXG4gICAgdGlwb2M6J0InXHJcbiAgICBjYXNpbGxlcm86SWRCbG9xdWVcclxuICAgIGNhc2lsbGVyb3M6Q29udGVuaWRvRm9ybXVsYXJpb1tdXHJcbiAgICB2YXJfbmFtZT86bnVsbFxyXG4gICAgdGlwb3Zhcj86bnVsbFxyXG4gICAgdW5pZGFkX2FuYWxpc2lzPzpJZFVuaWRhZEFuYWxpc2lzXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIENvbnNpc3RlbmNpYSA9IENhc2lsbGVyb0Jhc2UgJiB7XHJcbiAgICB0aXBvYzonQ09OUydcclxuICAgIGNhc2lsbGVybzpJZENvbnNpc3RlbmNpYVxyXG4gICAgdmFyX25hbWU/Om51bGxcclxuICAgIHRpcG92YXI/Om51bGxcclxuICAgIHByaW1lcmFfdmFyaWFibGU/Om51bGxcclxufVxyXG5leHBvcnQgdHlwZSBUZXh0byA9IENhc2lsbGVyb0Jhc2UgJiB7XHJcbiAgICB0aXBvYzonVEVYVE8nXHJcbiAgICBjYXNpbGxlcm86SWRUZXh0b1xyXG4gICAgdmFyX25hbWU/Om51bGxcclxuICAgIHRpcG92YXI/Om51bGxcclxuICAgIHByaW1lcmFfdmFyaWFibGU/Om51bGxcclxufVxyXG5leHBvcnQgdHlwZSBMaWJyZSA9IENhc2lsbGVyb0Jhc2UgJiB7XHJcbiAgICB0aXBvYzonTElCUkUnXHJcbiAgICBjYXNpbGxlcm86SWRUZXh0b1xyXG4gICAgdmFyX25hbWU/Om51bGxcclxuICAgIHRpcG92YXI/Om51bGxcclxuICAgIHByaW1lcmFfdmFyaWFibGU/Om51bGxcclxufVxyXG5leHBvcnQgdHlwZSBCb3RvbkZvcm11bGFyaW8gPSBDYXNpbGxlcm9CYXNlICYge1xyXG4gICAgdGlwb2M6J0JGJ1xyXG4gICAgY2FzaWxsZXJvOklkQm90b25Gb3JtdWxhcmlvXHJcbiAgICB2YXJfbmFtZT86bnVsbFxyXG4gICAgdGlwb3Zhcj86bnVsbFxyXG4gICAgcHJpbWVyYV92YXJpYWJsZT86bnVsbFxyXG4gICAgdmFyX25hbWVfQkY/OklkVmFyaWFibGVcclxuICAgIGxvbmdpdHVkPzpzdHJpbmdcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRm9ybXVsYXJpbyA9IENhc2lsbGVyb0Jhc2UgJiB7XHJcbiAgICB0aXBvYzonRidcclxuICAgIGNhc2lsbGVybzpJZEZvcm11bGFyaW9cclxuICAgIGZvcm11bGFyaW9fcHJpbmNpcGFsOmJvb2xlYW5cclxuICAgIGNhc2lsbGVyb3M6Q29udGVuaWRvRm9ybXVsYXJpb1tdXHJcbiAgICB2YXJfbmFtZT86bnVsbFxyXG4gICAgdGlwb3Zhcj86bnVsbFxyXG4gICAgaGVybWFubz86dHJ1ZVxyXG4gICAgdW5pZGFkX2FuYWxpc2lzOklkVW5pZGFkQW5hbGlzaXNcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQ2FzaWxsZXJvc0ltcGxlbWVudGFkb3M9Rm9ybXVsYXJpb3xCbG9xdWV8RmlsdHJvfENvbmp1bnRvUHJlZ3VudGFzfFByZWd1bnRhfE9wY2lvbk11bHRpcGxlfE9wY2lvbnxCb3RvbkZvcm11bGFyaW98Q29uc2lzdGVuY2lhfFRleHRvfExpYnJlXHJcblxyXG5leHBvcnQgdHlwZSBDYW1wb1BrUmFpeiA9ICd2aXZpZW5kYSd8J2V0Yy4uLic7XHJcblxyXG5leHBvcnQgdHlwZSBGb3JQa1JhaXo9e1xyXG4gICAgZm9ybXVsYXJpbzpJZEZvcm11bGFyaW8sIFxyXG59ICYge1xyXG4gICAgW2NhbXBvIGluIENhbXBvUGtSYWl6XT86bnVtYmVyXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIENhbXBvUGsgPSAndml2aWVuZGEnfCdob2dhcid8J3BlcnNvbmEnfCdldGMuLi4nO1xyXG5leHBvcnQgdHlwZSBGb3JQayA9IHtcclxuICAgIGZvcm11bGFyaW86SWRGb3JtdWxhcmlvLCBcclxufSAmIHtcclxuICAgIFtjYW1wbyBpbiBDYW1wb1BrXT86bnVtYmVyXHJcbn1cclxuZXhwb3J0IHR5cGUgUGxhaW5Gb3JQaz0ne1wiZm9ybXVsYXJpb1wiOlwiRjpGMVwiLFwidml2aWVuZGFcIjpcIjEwMjAyXCIsXCJwZXJzb25hXCI6bnVsbH0nfCdldGMuLi4nO1xyXG5cclxuZXhwb3J0IHR5cGUgT2JqZXRvTnVtZXJhZG9PQXJyYXk8VD4gPSBUW10gfCB7W24gaW4gbnVtYmVyXTpUfVxyXG5cclxuZXhwb3J0IHR5cGUgUmVzcHVlc3Rhcz17XHJcbiAgICAgICAgW3ByZWd1bnRhIGluIElkVmFyaWFibGVdOlZhbG9yXHJcbiAgICB9ICYge1xyXG4gICAgICAgIFt1YSBpbiBJZFVuaWRhZEFuYWxpc2lzXTpPYmpldG9OdW1lcmFkb09BcnJheTxSZXNwdWVzdGFzPlxyXG4gICAgfVxyXG5cclxuZXhwb3J0IHR5cGUgUmVzcHVlc3Rhc1JhaXo9UmVzcHVlc3RhcyAmIHtcclxuICAgIHJlc3VtZW5Fc3RhZG86UmVzdW1lbkVzdGFkb1xyXG4gICAgcmVzdW1lbkVzdGFkb1N1cDpSZXN1bWVuRXN0YWRvXHJcbiAgICAkZGlydHk6Ym9vbGVhblxyXG4gICAgY29kTm9SZWE6IHN0cmluZ3xudWxsXHJcbiAgICBjb2RSZWE6IG51bWJlcnxudWxsXHJcbiAgICBjb2ROb1JlYVN1cDogc3RyaW5nfG51bGxcclxuICAgIGNvZFJlYVN1cDogbnVtYmVyfG51bGxcclxufVxyXG5cclxuLypcclxuICAgIGFjbGFyYWNpw7NuOlxyXG4gICAge3YxOid4JywgdjI6J3gnLCBwZXJzb25hczpbe3AxOjEsIHAyOid4fSx7cDE6MiwgcDI6eH1dLCBtYXNjb3RhczpbXSB9XHJcbiAgICBlc3TDoSBhbmlkYWRvIHBvciB1bmlkYWQgZGUgYW7DoWxpc2lzXHJcbiovXHJcblxyXG5leHBvcnQgdHlwZSBVbmlkYWRBbmFsaXNpcyA9IHtcclxuICAgIHVuaWRhZF9hbmFsaXNpczpJZFVuaWRhZEFuYWxpc2lzLCBcclxuICAgIHBhZHJlPzpJZFVuaWRhZEFuYWxpc2lzLCBcclxuICAgIHBrX2FncmVnYWRhOkNhbXBvUGssIFxyXG4gICAgcHJpbmNpcGFsPzpib29sZWFuLCBcclxuICAgIGhpamFzOiB7W2sgaW4gSWRVbmlkYWRBbmFsaXNpc10/OiBVbmlkYWRBbmFsaXNpc31cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVEVNID0ge1xyXG4gICAgbm9tY2FsbGU6c3RyaW5nXHJcbiAgICBkb21pbmlvOm51bWJlclxyXG4gICAgc2VjdG9yOnN0cmluZ1xyXG4gICAgZWRpZmljaW86c3RyaW5nXHJcbiAgICBlbnRyYWRhOnN0cmluZ1xyXG4gICAgbnJvY2F0YXN0cmFsOnN0cmluZ1xyXG4gICAgcGlzbzpzdHJpbmdcdFxyXG4gICAgZGVwYXJ0YW1lbnRvOnN0cmluZ1xyXG4gICAgaGFiaXRhY2lvbjpzdHJpbmdcclxuICAgIGNhc2E6c3RyaW5nXHJcbiAgICBwcmlvcmlkYWQ6MXwyfDNcclxuICAgIG9ic2VydmFjaW9uZXM6c3RyaW5nXHJcbiAgICBzZWxlY2Npb25hZG86bnVtYmVyLFxyXG4gICAgY2l0YTogc3RyaW5nLFxyXG4gICAgY2FyZ2E6c3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFJlc3VtZW5Fc3RhZG8gPSAndmFjaW8nIHwgJ2NvbiBwcm9ibGVtYXMnIHwgJ2luY29tcGxldG8nIHwgJ29rJyB8ICdubyByZWEnIHwgJ2NpdGEgcGFjdGFkYSc7XHJcblxyXG5leHBvcnQgdHlwZSBJbmZvVGFyZWE9IHtcclxuICAgIHRhcmVhPzogSWRUYXJlYVxyXG4gICAgbm90YXM/OnN0cmluZ1xyXG4gICAgZmVjaGFfYXNpZ25hY2lvbj86RGF0ZVxyXG4gICAgYXNpZ25hZG8/OnN0cmluZ1xyXG4gICAgbWFpbl9mb3JtOiBJZEZvcm11bGFyaW9cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVmlzaXRhPXtcclxuICAgIGZlY2hhOiBzdHJpbmcgfCBudWxsXHJcbiAgICBob3JhOiBzdHJpbmcgfCBudWxsXHJcbiAgICBpZHBlcjogc3RyaW5nIHwgbnVsbFxyXG4gICAgb2JzZXJ2YWNpb25lczogc3RyaW5nIHwgbnVsbFxyXG59XHJcblxyXG5leHBvcnQgdHlwZSAgRGF0b3NIZHJVYVBwYWw9IHtcclxuICAgIHRhcmVhOiBJbmZvVGFyZWFcclxuICAgIHRlbTogVEVNXHJcbiAgICBcclxuLypcclxuICAgIGFjbGFyYWNpw7NuOlxyXG4gICAge3YxOid4JywgdjI6J3gnLCBwZXJzb25hczpbe3AxOjEsIHAyOid4fSx7cDE6MiwgcDI6eH1dLCBtYXNjb3RhczpbXSB9XHJcbiAgICBlc3TDoSBhbmlkYWRvIHBvciB1bmlkYWQgZGUgYW7DoWxpc2lzXHJcbiovXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIElkQ2FyZ2E9XCIyMDIwLTA3LTA3XCJ8XCIyMDIwLTA3LTA4XCJcclxuXHJcbmV4cG9ydCB0eXBlIEVzdGFkb0NhcmdhPSdyZXN1bWVuJ3wncmVsZXZhbWllbnRvJ3wncmVjaWJvJ1xyXG5cclxuZXhwb3J0IHR5cGUgQ2FyZ2E9e1xyXG4gICAgZmVjaGE6IERhdGVcclxuICAgIGVzdGFkb19jYXJnYTogRXN0YWRvQ2FyZ2FcclxuICAgIG5lY2VzYXJpYXM6IG51bWJlclxyXG4gICAgb2JzZXJ2YWNpb25lczogc3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIENhcmdhcz17XHJcbiAgICBbaWRDYXJnYSBpbiBJZENhcmdhXTogQ2FyZ2FcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRXN0cnVjdHVyYVJvd1ZhbGlkYXRvcj1TdHJ1Y3R1cmU8SWRWYXJpYWJsZSxWYWxvcixJZEZpbj47XHJcblxyXG5leHBvcnQgdHlwZSBNb2RvRGVzcGxpZWd1ZSA9ICdtZXRhZGF0b3MnfCdyZWxldmFtaWVudG8nfCdQREYnXHJcblxyXG5leHBvcnQgdHlwZSBJbmZvRm9ybXVsYXJpbz17XHJcbiAgICBjYXNpbGxlcm9zOkZvcm11bGFyaW8sIC8vIGNhc2lsbGVyb3MgYXBsYW5hZG9zXHJcbiAgICBlc3RydWN0dXJhUm93VmFsaWRhdG9yOkVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IgLy8gZXN0cnVjdHVyYSBkZSB2YXJpYWJsZXMgcGFyYSBlbCBSb3dWYWxpZGF0b3JcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgSWRSZXN1bHRhZG8gPSAnQVZFUklHVUFSJ3wnVE9ETyc7XHJcblxyXG5leHBvcnQgdHlwZSBUYXJlYXNFc3RydWN0dXJhPXtcclxuICAgIFtpZFRhcmVhIGluIElkVGFyZWFdOntcclxuICAgICAgICByZXN1bHRhZG9zOntcclxuICAgICAgICAgICAgW2lkUmVzdWx0YWRvIGluIElkUmVzdWx0YWRvXTp7XHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwY2lvbjpzdHJpbmdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRXN0cnVjdHVyYSA9IHtcclxuICAgIGZvcm11bGFyaW9zOnsgXHJcbiAgICAgICAgW25vbWJyZUZvcm11bGFyaW8gaW4gSWRGb3JtdWxhcmlvXTpJbmZvRm9ybXVsYXJpb1xyXG4gICAgfVxyXG4gICAgdW5pZGFkZXNfYW5hbGlzaXM6eyBcclxuICAgICAgICBbaWRVbmlkYWRBbmFsaXNpcyBpbiBJZFVuaWRhZEFuYWxpc2lzXTogVW5pZGFkQW5hbGlzaXNcclxuICAgIH1cclxuICAgIHRhcmVhczpUYXJlYXNFc3RydWN0dXJhXHJcbiAgICB0aW1lc3RhbXA6bnVtYmVyXHJcbiAgICBvcGVyYXRpdm86SWRPcGVyYXRpdm9cclxuICAgIGNvbmZpZ1NvcnRlbzogQ29uZmlndXJhY2lvblNvcnRlb1xyXG5cdG5vUmVhczogeyBcclxuXHQgICAgICBub19yZWE6IHN0cmluZyAgXHJcblx0XHQgIGRlc2NyaXBjaW9uOiBzdHJpbmdcclxuXHRcdCAgZ3J1cG86ICAgICBzdHJpbmcgICAgXHJcblx0XHQgIHZhcmlhYmxlOiAgc3RyaW5nXHJcblx0XHQgIHZhbG9yOiAgICAgc3RyaW5nXHJcblx0XHQgIGdydXBvMDogICAgc3RyaW5nXHJcblx0fVtdXHJcbiAgICBub1JlYXNTdXA6IHsgXHJcbiAgICAgICAgbm9fcmVhX3N1cDogc3RyaW5nICBcclxuICAgICAgICBkZXNjX25vcmVhX3N1cDogc3RyaW5nXHJcbiAgICAgICAgZ3J1cG9fc3VwOiAgICAgc3RyaW5nICAgIFxyXG4gICAgICAgIHZhcmlhYmxlX3N1cDogIHN0cmluZ1xyXG4gICAgICAgIHZhbG9yX3N1cDogICAgIHN0cmluZ1xyXG4gICAgICAgIGdydXBvMF9zdXA6ICAgIHN0cmluZ1xyXG4gIH1bXVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBJZEVuYyA9ICcxMzAwMzEnfCcxMzAwMzInfCdldGMnO1xyXG5leHBvcnQgdHlwZSBJbmZvcm1hY2lvbkhkcj17W2VuYyBpbiBJZEVuY106IERhdG9zSGRyVWFQcGFsfVxyXG5cclxuZXhwb3J0IHR5cGUgQ2Fzb1N0YXRlPXtcclxuICAgIG9wY2lvbmVzOnsgLy8gZGF0b3MgZGUgbmF2ZWdhY2nDs24gcXVlIGVsaWplIGVsIHVzdWFyaW9cclxuICAgICAgICBmb3JQazpGb3JQa3xudWxsIC8vIMOtbmRpY2UgZGVudHJvIGRlIGxhcyB1bmlkYWRlcyBkZSBhbsOhbGlzaXMuIE51bGwgPSBlbiBob2phIGRlIHJ1dGFcclxuICAgICAgICBwaWxhRm9yUGs6Rm9yUGtbXVxyXG4gICAgICAgIG1vZG9EZXNwbGllZ3VlOk1vZG9EZXNwbGllZ3VlXHJcbiAgICAgICAgYmllbnZlbmlkbzpib29sZWFuXHJcbiAgICAgICAgbW9kb0RpcmVjdG86Ym9vbGVhblxyXG4gICAgICAgIG1vZG9Cb3JyYXJSZXNwdWVzdGE6SWRWYXJpYWJsZXxudWxsXHJcbiAgICAgICAgY29uQ2FtcG9PcGNpb25lczpib29sZWFuXHJcbiAgICAgICAgc2FsdG9BdXRvbWF0aWNvOmJvb2xlYW5cclxuICAgIH0sIFxyXG4gICAgbW9kbzp7IC8vIG5vIHNlIHBlcnNpc3RlXHJcbiAgICAgICAgZGVtbzpib29sZWFuXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIERlZk9wZXJhdGl2byA9IHtcclxuICAgIGVzTm9SZWE6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kTm9SZWE6c3RyaW5nfG51bGwsIGVzTm9SZWE6Ym9vbGVhbn0sXHJcbiAgICBlc05vUmVhU3VwOihyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4ge2NvZE5vUmVhU3VwOnN0cmluZ3xudWxsLCBlc05vUmVhU3VwOmJvb2xlYW59LFxyXG4gICAgZXNSZWFsaXphZGE6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kUmVhOm51bWJlcnxudWxsLCBlc1JlYTpib29sZWFufSxcclxuICAgIGVzUmVhbGl6YWRhU3VwOihyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4ge2NvZFJlYVN1cDpudW1iZXJ8bnVsbCwgZXNSZWFTdXA6Ym9vbGVhbn0sXHJcbiAgICBVQXByaW5jaXBhbDogSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgIGRlZlVBOntbaSBpbiBJZFVuaWRhZEFuYWxpc2lzXTp7cGs6SWRWYXJpYWJsZSwgaW5jbHVpZGFzOklkVW5pZGFkQW5hbGlzaXNbXSwgaWRzRm9yOklkRm9ybXVsYXJpb1tdfX0sXHJcbiAgICBkZWZGb3I6e1tmIGluIElkRm9ybXVsYXJpb106ey8qYXJib2xVQTpJZFVuaWRhZEFuYWxpc2lzW10sICovIGhlcm1hbm8/OnRydWV9fVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyA9IHtcclxuICAgIHJlc3B1ZXN0YXM6e1t1YSBpbiBJZFVuaWRhZEFuYWxpc2lzXTpSZXNwdWVzdGFzUmFpeltdfVxyXG4gICAgbW9kb0FsbWFjZW5hbWllbnRvOk1vZG9BbG1hY2VuYW1pZW50b1xyXG4gICAgcGVyc29uYTpzdHJpbmdcclxuICAgIHRhcmVhOklkVGFyZWFcclxuICAgIGlkcGVyOnN0cmluZ1xyXG4gICAgY2FyZ2FzOiBDYXJnYXNcclxuICAgIGluZm9ybWFjaW9uSGRyOiBJbmZvcm1hY2lvbkhkclxyXG4gICAgc29sb0xlY3R1cmE6IGJvb2xlYW5cclxuICAgIHRva2VuPzpzdHJpbmdcclxuICAgIG51bV9zaW5jcm8/Om51bWJlclxyXG4gICAgdGltZXN0YW1wRXN0cnVjdHVyYT86bnVtYmVyXHJcbn1cclxuXHJcbnR5cGUgQ29uZmlndXJhY2lvblNvcnRlb1RhYmxhID0ge1xyXG4gICAgbWV0b2RvOiBcInRhYmxhXCIsXHJcbiAgICBwYXJhbV9tZXRvZG86IHtcclxuICAgICAgICB0YWJsYTpzdHJpbmdbXSxcclxuICAgICAgICB2YXJfbGV0cmE6SWRWYXJpYWJsZSxcclxuICAgIH0gICAgXHJcbn1cclxuXHJcbnR5cGUgQ29uZmlndXJhY2lvblNvcnRlb0hhc2ggPSB7XHJcbiAgICBtZXRvZG86IFwiaGFzaFwiLFxyXG4gICAgcGFyYW1fbWV0b2RvOiB7XHJcbiAgICAgICAgdmFyX2NvZWY6IFtcclxuICAgICAgICAgICAge3ZhcjpJZFZhcmlhYmxlLCBjb2VmOm51bWJlcn0sXHJcbiAgICAgICAgICAgIHt2YXI6SWRWYXJpYWJsZSwgY29lZjpudW1iZXJ9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgZGl2aXNvcjogbnVtYmVyXHJcbiAgICB9ICAgIFxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBDb25maWd1cmFjaW9uU29ydGVvID0ge1trZXkgaW4gSWRGb3JtdWxhcmlvXTpDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpb31cclxuXHJcbmV4cG9ydCB0eXBlIENvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvID0ge1xyXG4gICAgdW5pZGFkX2FuYWxpc2lzOiBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgdW5pZGFkX2FuYWxpc2lzX3BhZHJlOiBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgLy9leHByX2luY29tcGxldGl0dWQ6IHN0cmluZyAvL1wibm90IChwMSkgb3Igbm8gdCAocDIpIG9yIG5vdChwMylcIlxyXG4gICAgZXhwcl9pbmNvbXBsZXRpdHVkOiB7XHJcbiAgICAgICAgW2tleSBpbiBudW1iZXJdOntkb21pbmlvOm51bWJlciwgZXhwcjpzdHJpbmd9XHJcbiAgICB9IFxyXG4gICAgLy9leHByX2luY29tcGxldGl0dWRfanM6IHN0cmluZyAvL3NlIGNyZWEgYWwgY29tcGlsYXJcclxuICAgIGV4cHJfaW5jb21wbGV0aXR1ZF9qczoge1xyXG4gICAgICAgIFtrZXkgaW4gbnVtYmVyXTp7ZG9taW5pbzpudW1iZXIsIGV4cHI6c3RyaW5nfVxyXG4gICAgfSBcclxuICAgIGRpc3BhcmFkb3I6IElkVmFyaWFibGUgLy9cInA5XCJcclxuICAgIC8vZmlsdHJvOiBzdHJpbmcgLy9cInAzPj0xOFwiXHJcbiAgICBmaWx0cm86IHtcclxuICAgICAgICBba2V5IGluIG51bWJlcl06e2RvbWluaW86bnVtYmVyLCBleHByOnN0cmluZ31cclxuICAgIH0gXHJcbiAgICAvL2ZpbHRyb19qczogc3RyaW5nIC8vc2UgY3JlYSBhbCBjb21waWxhclxyXG4gICAgZmlsdHJvX2pzOiB7XHJcbiAgICAgICAgW2tleSBpbiBudW1iZXJdOntkb21pbmlvOm51bWJlciwgZXhwcjpzdHJpbmd9XHJcbiAgICB9IFxyXG4gICAgb3JkZW46IHtcclxuICAgICAgICB2YXJpYWJsZTpJZFZhcmlhYmxlXHJcbiAgICAgICAgb3JkZW46IDF8LTFcclxuICAgIH1bXSAvL1tcInAzXCIsIFwicDJcIiwgXCJwMVwiLCBcInAwXCJdLCAvLyBwMCBlcyBjb25zdHJ1aWRhLCBubyB2YSBlbiBwYXLDoW1ldHJvcywgc2UgcG9uZSBwYXJhIHF1ZSBlbCBvcmRlbiBzZWEgZGV0ZXJtaW7DrXN0aWNvXHJcbiAgICBwYXJhbWV0cm9zOklkVmFyaWFibGVbXS8vIFtcInAxXCIsXCJwMlwiLFwicDNcIiwgXCJwNFwiLCBcInA1XCIsIFwicDZcIl0sIC8vIHZhcmlhYmxlcyBxdWUgYW51bGFuIGFsIGRpc3BhcmFkb3JcclxuICAgIGNhbnRpZGFkX3NvcnRlYWJsZXM6IElkVmFyaWFibGVcclxuICAgIGNhbnRpZGFkX3RvdGFsOiBJZFZhcmlhYmxlXHJcbiAgICByZXN1bHRhZG86IElkVmFyaWFibGUgLy9cInAxMVwiXHJcbiAgICByZXN1bHRhZG9fbWFudWFsOiBJZFZhcmlhYmxlIC8vXCJwMTFcIlxyXG4gICAgc29ydGVhZG9fbW9zdHJhcj86IHtzb3VyY2U6SWRWYXJpYWJsZSwgdGFyZ2V0OklkVmFyaWFibGV9W10sXHJcbiAgICBpbmNvbXBsZXRhczogSWRWYXJpYWJsZVxyXG4gICAgdmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQTogSWRWYXJpYWJsZS8vJyRCLkY6UzFfUCdcclxuICAgIHZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsPzogSWRWYXJpYWJsZSAvLyckQi5GOkkxJ1xyXG4gICAgaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsPzogSWRGb3JtdWxhcmlvIC8vICdGOkkxJ1xyXG4gICAgaWRfZm9ybXVsYXJpb19wYWRyZT86IElkRm9ybXVsYXJpbyAvLyAnRjpTMSdcclxufSAmIChDb25maWd1cmFjaW9uU29ydGVvSGFzaCB8IENvbmZpZ3VyYWNpb25Tb3J0ZW9UYWJsYSlcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdG9QbGFpbkZvclBrKGZvclBrOkZvclBrKTpQbGFpbkZvclBre1xyXG4gICAgLy8gQHRzLWlnbm9yZSBzYWJlbW9zIHF1ZSBoYXkgcXVlIGhhY2VyIHVuIEpTT05cclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShmb3JQayk7XHJcbn1cclxuXHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICAgIG5hbWVzcGFjZSBteU93bntcclxuICAgICAgICBpbnRlcmZhY2UgQWRkclBhcmFtcyB7XHJcbiAgICAgICAgICAgIHN0YXRlX2ZvclBrOnN0cmluZ1xyXG4gICAgICAgICAgICBzdGF0ZV9waWxhRm9yUGs6c3RyaW5nXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBEaXJlY2Npb25BY2Npb24gPSAnYXZhbmNlJyB8ICdyZXRyb2Nlc28nIHwgJ2JsYW5xdWVvJ1xyXG5cclxuZXhwb3J0IHR5cGUgRXN0YWRvQWNjaW9uID0ge1xyXG4gICAgb3BlcmF0aXZvOiBzdHJpbmdcclxuICAgIHRhcmVhOiAnZW5jdSd8J3JlY3UnfCdzdXBlJ1xyXG4gICAgZXN0YWRvOiBzdHJpbmdcclxuICAgIGVhY2Npb246IHN0cmluZ1xyXG4gICAgY29uZGljaW9uOiBzdHJpbmdcclxuICAgIGVzdGFkb19kZXN0aW5vOiBzdHJpbmdcclxuICAgIHRhcmVhX2Rlc3Rpbm86IHN0cmluZ1xyXG4gICAgZWFjY2lvbl9kaXJlY2Npb246IERpcmVjY2lvbkFjY2lvblxyXG4gICAgcGF0aF9pY29ub19zdmc6IHN0cmluZ1xyXG4gICAgbm9tYnJlX3Byb2NlZHVyZTogc3RyaW5nXHJcbiAgICBkZXNhY3RpdmFfYm90b246IGJvb2xlYW5cclxuICAgIGNvbmZpcm1hOiBib29sZWFuXHJcbn0iXX0=
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlwb3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvdGlwb3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0lBQUEsWUFBWSxDQUFDOzs7SUFFYixrQ0FBa0M7SUF1ZGxDLFNBQWdCLFlBQVksQ0FBQyxLQUFXO1FBQ3BDLCtDQUErQztRQUMvQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUhELG9DQUdDO0lBRVUsUUFBQSxRQUFRLEdBQStDLE1BQU0sQ0FBQyxRQUFRLENBQUE7SUFDdEUsUUFBQSxLQUFLLEdBQTBELE1BQU0sQ0FBQyxLQUFLLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuaW1wb3J0IHtTdHJ1Y3R1cmUsIEZlZWRiYWNrfSBmcm9tIFwicm93LXZhbGlkYXRvclwiO1xyXG5pbXBvcnQgKiBhcyBMaWtlQXIgZnJvbSBcImxpa2UtYXJcIjtcclxuXHJcbmV4cG9ydCB0eXBlIE1vZG9BbG1hY2VuYW1pZW50byA9ICdzZXNzaW9uJ3wgLy8gY3VhbmRvIHNlYSBwYXJhIHVuYSBzb2xhIHBlc3Rhw7FhLCBzZSB1c2EgZW4gbW9kbyBkaXJlY3RvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9jYWwnICAgIC8vIHBhcmEgdG9kbyBlbCBkaXNwb3NpdGl2bywgc2UgdXNhIGFsIGNhcmdhciBob2phcyBkZSBydXRhIGVudHJlc1xyXG5cclxuZXhwb3J0IHR5cGUgSWRPcGNpb24gPSBudW1iZXJcclxuZXhwb3J0IHR5cGUgSWRPcGVyYXRpdm8gPSAnZXRvaTIxMSd8J2VhaDIwMjInfCdldGMuLi4nXHJcbmV4cG9ydCB0eXBlIElkVmFyaWFibGUgPSAndjEnfCd2Mid8J3YzJ3wnZXRjLi4uJ3wndmRvbWluaW8nfCckcDAnXHJcbmV4cG9ydCB0eXBlIElkUHJlZ3VudGEgPSAnUDEnfCdQMid8J2V0Yy4uLidcclxuZXhwb3J0IHR5cGUgSWRCbG9xdWUgPSAnQjEnfCdCMid8J2V0Yy4uLidcclxuZXhwb3J0IHR5cGUgSWRGb3JtdWxhcmlvID0gJ0YxJ3wnRjInfCdldGMuLi4nXHJcbmV4cG9ydCB0eXBlIElkVW5pZGFkQW5hbGlzaXMgPSAndml2aWVuZGFzJ3wnaG9nYXJlcyd8J3BlcnNvbmFzJ1xyXG5leHBvcnQgdHlwZSBJZEJvdG9uRm9ybXVsYXJpbyA9ICdCRjpGMSd8J0JGOkYyJ3wnZXRjLi4uJ1xyXG5leHBvcnQgdHlwZSBJZENvbnNpc3RlbmNpYSA9ICdDT05TMSd8J0NPTlMyJ3wnZXRjLi4uJ1xyXG5leHBvcnQgdHlwZSBJZFRleHRvID0gJ0QzMF9SRUYnfCdNRVNfUkVGJ3wnU0VNX1JFRid8J2V0Yy4uLidcclxuZXhwb3J0IHR5cGUgSWRGaWx0cm8gPSAnRklMVFJPMScgfCAnRklMVFJPMicgfCAnZXRjLi4uJ1xyXG5leHBvcnQgdHlwZSBJZENhc2lsbGVybyA9IElkVmFyaWFibGUgfCBJZFByZWd1bnRhIHwgSWRCbG9xdWUgfCBJZEZvcm11bGFyaW8gfCBJZEZpbHRybyB8IElkT3BjaW9uXHJcbmV4cG9ydCB0eXBlIElkRmluID0gJ2Zpbic7IC8vIG5ldmVyIC8vIFRPRE86IHBvZGVyIHBvbmVyICdGSU4nXHJcbmV4cG9ydCB0eXBlIElkRGVzdGlubyA9IElkUHJlZ3VudGEgfCBJZEJsb3F1ZSB8IElkRmluIHwgSWRGaWx0cm8gXHJcbmV4cG9ydCB0eXBlIFZhbG9yID0gc3RyaW5nfG51bWJlcnxudWxsO1xyXG5leHBvcnQgdHlwZSBUaXBvY0Rlc3Rpbm9zID0gJ1AnfCdDUCd8J0InfCdGSUxUUk8nfCdCRidcclxuZXhwb3J0IHR5cGUgVGlwb2MgPSBUaXBvY0Rlc3Rpbm9zIHwgJ0YnfCdPJ3wnT00nfCdDT05TJyB8J1RFWFRPJyB8ICdMSUJSRSdcclxuXHJcbmV4cG9ydCB0eXBlIElkVGFyZWEgPSAnZW5jdSd8J3JlY3UnfCdzdXBlJztcclxuXHJcbmV4cG9ydCB0eXBlIEZlZWRiYWNrVmFyaWFibGUgPSBGZWVkYmFjazxJZFZhcmlhYmxlLCBJZEZpbj5cclxuXHJcbmV4cG9ydCB0eXBlIFRpcG9WYXJpYWJsZXMgPSAndGV4dG8nfCdudW1lcm8nfCdmZWNoYSd8J2hvcmFzJ1xyXG5cclxuZXhwb3J0IHR5cGUgRGVzcGxpZWd1ZSA9ICdob3Jpem9udGFsJ3wnb2N1bHRhJ1xyXG5cclxuZXhwb3J0IHR5cGUgQ2FzaWxsZXJvQmFzZSA9IHtcclxuICAgIGlkX2Nhc2lsbGVybz86c3RyaW5nXHJcbiAgICB0aXBvYzpUaXBvY1xyXG4gICAgY2FzaWxsZXJvOklkQ2FzaWxsZXJvXHJcbiAgICBub21icmU6c3RyaW5nXHJcbiAgICBzYWx0bzpJZERlc3Rpbm98SWRGaW58bnVsbFxyXG4gICAgdmVyX2lkOnN0cmluZ3xudWxsXHJcbiAgICBkZXNwbGllZ3VlRW5jYWJlemFkbzonbGF0ZXJhbCd8J3N1cGVyaW9yJ3xudWxsXHJcbiAgICBkZXNwbGllZ3VlQ29udGVuaWRvOid2ZXJ0aWNhbCd8J2hvcml6b250YWwnfG51bGxcclxuICAgIGRlc3BsaWVndWVUaXBvSW5wdXQ6J3RlbCd8bnVsbFxyXG4gICAgZGVzcGxpZWd1ZU9jdWx0YTpib29sZWFufG51bGxcclxuICAgIGxlZXI6Ym9vbGVhbnxudWxsXHJcbiAgICBhY2xhcmFjaW9uOnN0cmluZ3xudWxsXHJcbiAgICBwcmltZXJhX3ZhcmlhYmxlPzpJZFZhcmlhYmxlfG51bGxcclxuICAgIHZhcl9uYW1lPzpJZFZhcmlhYmxlfG51bGxcclxuICAgIHZhcl9uYW1lX2VzcGVjaWFsPzpzdHJpbmd8bnVsbFxyXG4gICAgdGlwb3Zhcj86VGlwb1ZhcmlhYmxlc3wnb3BjaW9uZXMnfCdzaV9ubyd8bnVsbFxyXG4gICAgY2FzaWxsZXJvcz86Q2FzaWxsZXJvc0ltcGxlbWVudGFkb3NbXXxudWxsXHJcbiAgICBleHByZXNpb25faGFiaWxpdGFyPzpzdHJpbmdcclxuICAgIGV4cHJlc2lvbl9oYWJpbGl0YXJfanM/OnN0cmluZ1xyXG4gICAgZXhwcmVzaW9uX2F1dG9pbmdyZXNhcj86c3RyaW5nXHJcbiAgICBleHByZXNpb25fYXV0b2luZ3Jlc2FyX2pzPzpzdHJpbmdcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgT3BjaW9uPUNhc2lsbGVyb0Jhc2UgJiB7XHJcbiAgICB0aXBvYzonTydcclxuICAgIGNhc2lsbGVybzpJZE9wY2lvblxyXG4gICAgY2FzaWxsZXJvczpQcmVndW50YVNpbXBsZVtdXHJcbiAgICB2YXJfbmFtZT86bnVsbFxyXG4gICAgdGlwb3Zhcj86bnVsbFxyXG4gICAgcHJpbWVyYV92YXJpYWJsZT86bnVsbFxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBPcGNpb25TaT1PcGNpb24gJiB7XHJcbiAgICBjYXNpbGxlcm86MVxyXG4gICAgbm9tYnJlOidTw60nXHJcbiAgICBjYXNpbGxlcm9zOlByZWd1bnRhU2ltcGxlW10gXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIE9wY2lvbk5vPU9wY2lvbiAmIHtcclxuICAgIGNhc2lsbGVybzoyXHJcbiAgICBub21icmU6J05vJ1xyXG4gICAgY2FzaWxsZXJvczpQcmVndW50YVNpbXBsZVtdIFxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBPcGNpb25NdWx0aXBsZT1DYXNpbGxlcm9CYXNlICYge1xyXG4gICAgdGlwb2M6J09NJ1xyXG4gICAgdGlwb3Zhcjonb3BjaW9uZXMnXHJcbiAgICB2YXJfbmFtZTpJZFZhcmlhYmxlXHJcbiAgICBjYXNpbGxlcm9zOltPcGNpb25TaSwgT3BjaW9uTm9dXHJcbiAgICBjYWxjdWxhZGE/OmJvb2xlYW5cclxuICAgIGxpYnJlPzpib29sZWFuXHJcbiAgICB2YWxvcl9uc19uYzogYW55XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFByZWd1bnRhQmFzZSA9IENhc2lsbGVyb0Jhc2UgJiB7XHJcbiAgICB0aXBvYzonUCdcclxuICAgIG9wdGF0aXZvOmJvb2xlYW58bnVsbFxyXG4gICAgY2FzaWxsZXJvOklkUHJlZ3VudGFcclxuICAgIGNhbGN1bGFkYTogYm9vbGVhbnxudWxsXHJcbiAgICBsaWJyZTogYm9vbGVhbnxudWxsXHJcbiAgICB2YWxvcl9uc19uYzogYW55XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFByZWd1bnRhU2ltcGxlID0gUHJlZ3VudGFCYXNlICYge1xyXG4gICAgdGlwb3ZhcjpUaXBvVmFyaWFibGVzXHJcbiAgICB2YXJfbmFtZTpJZFZhcmlhYmxlXHJcbiAgICBsb25naXR1ZDpzdHJpbmdcclxuICAgIHNhbHRvX25zX25jOklkVmFyaWFibGV8bnVsbFxyXG4gICAgY2FzaWxsZXJvczogUHJlZ3VudGFTaW1wbGVbXVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBQcmVndW50YUNvblNpTm8gPSBQcmVndW50YUJhc2UgJiB7XHJcbiAgICB0aXBvdmFyOidzaV9ubydcclxuICAgIHZhcl9uYW1lOklkVmFyaWFibGVcclxuICAgIHNhbHRvX25zX25jOklkVmFyaWFibGV8bnVsbFxyXG4gICAgY2FzaWxsZXJvczogW09wY2lvblNpLCBPcGNpb25Ob11cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUHJlZ3VudGFDb25PcGNpb25lcyA9IFByZWd1bnRhQmFzZSAmIHtcclxuICAgIHRpcG92YXI6J29wY2lvbmVzJ1xyXG4gICAgdmFyX25hbWU6SWRWYXJpYWJsZVxyXG4gICAgc2FsdG9fbnNfbmM6SWRWYXJpYWJsZXxudWxsXHJcbiAgICBjYXNpbGxlcm9zOiBPcGNpb25bXVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBQcmVndW50YUNvbk9wY2lvbmVzTXVsdGlwbGVzID0gUHJlZ3VudGFCYXNlICYge1xyXG4gICAgdmFyX25hbWU/Om51bGxcclxuICAgIHRpcG92YXI/Om51bGxcclxuICAgIGNhc2lsbGVyb3M6IE9wY2lvbk11bHRpcGxlW11cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUHJlZ3VudGE9UHJlZ3VudGFTaW1wbGUgfCBQcmVndW50YUNvblNpTm8gfCBQcmVndW50YUNvbk9wY2lvbmVzIHwgUHJlZ3VudGFDb25PcGNpb25lc011bHRpcGxlc1xyXG5cclxuZXhwb3J0IHR5cGUgQ29uanVudG9QcmVndW50YXM9IENhc2lsbGVyb0Jhc2UgJiB7XHJcbiAgICB0aXBvYzonQ1AnXHJcbiAgICBjYXNpbGxlcm86SWRQcmVndW50YVxyXG4gICAgdmFyX25hbWU/Om51bGxcclxuICAgIHRpcG92YXI/Om51bGxcclxuICAgIGNhc2lsbGVyb3M6UHJlZ3VudGFbXVxyXG59XHJcblxyXG4vKlxyXG5leHBvcnQgaW50ZXJmYWNlIElDb250ZW5pZG8gZXh0ZW5kcyBDYXNpbGxlcm9CYXNlIHtcclxuICAgIGNhc2lsbGVyb3M6SUNvbnRlbmlkb1tdXHJcbn1cclxuKi9cclxuXHJcbmV4cG9ydCB0eXBlIEZpbHRybyA9IENhc2lsbGVyb0Jhc2UgJiB7XHJcbiAgICB0aXBvYzonRklMVFJPJ1xyXG4gICAgY2FzaWxsZXJvOklkRmlsdHJvXHJcbiAgICB2YXJfbmFtZT86bnVsbFxyXG4gICAgdGlwb3Zhcj86bnVsbFxyXG4gICAgcHJpbWVyYV92YXJpYWJsZT86bnVsbFxyXG4gICAgY2FsY3VsYWRhPzpudWxsXHJcbiAgICBsaWJyZT86bnVsbFxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBDb250ZW5pZG9Gb3JtdWxhcmlvPUJsb3F1ZXxQcmVndW50YXxDb25qdW50b1ByZWd1bnRhc3xGaWx0cm98Qm90b25Gb3JtdWxhcmlvfENvbnNpc3RlbmNpYXxUZXh0b1xyXG5cclxuZXhwb3J0IHR5cGUgQmxvcXVlID0gQ2FzaWxsZXJvQmFzZSAmIHtcclxuICAgIHRpcG9jOidCJ1xyXG4gICAgY2FzaWxsZXJvOklkQmxvcXVlXHJcbiAgICBjYXNpbGxlcm9zOkNvbnRlbmlkb0Zvcm11bGFyaW9bXVxyXG4gICAgdmFyX25hbWU/Om51bGxcclxuICAgIHRpcG92YXI/Om51bGxcclxuICAgIHVuaWRhZF9hbmFsaXNpcz86SWRVbmlkYWRBbmFsaXNpc1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBDb25zaXN0ZW5jaWEgPSBDYXNpbGxlcm9CYXNlICYge1xyXG4gICAgdGlwb2M6J0NPTlMnXHJcbiAgICBjYXNpbGxlcm86SWRDb25zaXN0ZW5jaWFcclxuICAgIHZhcl9uYW1lPzpudWxsXHJcbiAgICB0aXBvdmFyPzpudWxsXHJcbiAgICBwcmltZXJhX3ZhcmlhYmxlPzpudWxsXHJcbn1cclxuZXhwb3J0IHR5cGUgVGV4dG8gPSBDYXNpbGxlcm9CYXNlICYge1xyXG4gICAgdGlwb2M6J1RFWFRPJ1xyXG4gICAgY2FzaWxsZXJvOklkVGV4dG9cclxuICAgIHZhcl9uYW1lPzpudWxsXHJcbiAgICB0aXBvdmFyPzpudWxsXHJcbiAgICBwcmltZXJhX3ZhcmlhYmxlPzpudWxsXHJcbn1cclxuZXhwb3J0IHR5cGUgTGlicmUgPSBDYXNpbGxlcm9CYXNlICYge1xyXG4gICAgdGlwb2M6J0xJQlJFJ1xyXG4gICAgY2FzaWxsZXJvOklkVGV4dG9cclxuICAgIHZhcl9uYW1lPzpudWxsXHJcbiAgICB0aXBvdmFyPzpudWxsXHJcbiAgICBwcmltZXJhX3ZhcmlhYmxlPzpudWxsXHJcbn1cclxuZXhwb3J0IHR5cGUgQm90b25Gb3JtdWxhcmlvID0gQ2FzaWxsZXJvQmFzZSAmIHtcclxuICAgIHRpcG9jOidCRidcclxuICAgIGNhc2lsbGVybzpJZEJvdG9uRm9ybXVsYXJpb1xyXG4gICAgdmFyX25hbWU/Om51bGxcclxuICAgIHRpcG92YXI/Om51bGxcclxuICAgIHByaW1lcmFfdmFyaWFibGU/Om51bGxcclxuICAgIHZhcl9uYW1lX0JGPzpJZFZhcmlhYmxlXHJcbiAgICBsb25naXR1ZD86c3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEZvcm11bGFyaW8gPSBDYXNpbGxlcm9CYXNlICYge1xyXG4gICAgdGlwb2M6J0YnXHJcbiAgICBjYXNpbGxlcm86SWRGb3JtdWxhcmlvXHJcbiAgICBmb3JtdWxhcmlvX3ByaW5jaXBhbDpib29sZWFuXHJcbiAgICBjYXNpbGxlcm9zOkNvbnRlbmlkb0Zvcm11bGFyaW9bXVxyXG4gICAgdmFyX25hbWU/Om51bGxcclxuICAgIHRpcG92YXI/Om51bGxcclxuICAgIGhlcm1hbm8/OnRydWVcclxuICAgIHVuaWRhZF9hbmFsaXNpczpJZFVuaWRhZEFuYWxpc2lzXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIENhc2lsbGVyb3NJbXBsZW1lbnRhZG9zPUZvcm11bGFyaW98QmxvcXVlfEZpbHRyb3xDb25qdW50b1ByZWd1bnRhc3xQcmVndW50YXxPcGNpb25NdWx0aXBsZXxPcGNpb258Qm90b25Gb3JtdWxhcmlvfENvbnNpc3RlbmNpYXxUZXh0b3xMaWJyZVxyXG5cclxuZXhwb3J0IHR5cGUgQ2FtcG9Qa1JhaXogPSAndml2aWVuZGEnfCdldGMuLi4nO1xyXG5cclxuZXhwb3J0IHR5cGUgRm9yUGtSYWl6PXtcclxuICAgIGZvcm11bGFyaW86SWRGb3JtdWxhcmlvLCBcclxuICAgIHZpdmllbmRhOklkRW5jXHJcbn0gJiB7XHJcbiAgICBbY2FtcG8gaW4gQ2FtcG9Qa1JhaXpdPzpudW1iZXJcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQ2FtcG9QayA9ICd2aXZpZW5kYSd8J2hvZ2FyJ3wncGVyc29uYSd8J2V0Yy4uLic7XHJcbmV4cG9ydCB0eXBlIEZvclBrID0ge1xyXG4gICAgZm9ybXVsYXJpbzpJZEZvcm11bGFyaW8sIFxyXG4gICAgdml2aWVuZGE6SWRFbmNcclxufSAmIHtcclxuICAgIFtjYW1wbyBpbiBDYW1wb1BrXT86bnVtYmVyXHJcbn1cclxuZXhwb3J0IHR5cGUgUGxhaW5Gb3JQaz0ne1wiZm9ybXVsYXJpb1wiOlwiRjpGMVwiLFwidml2aWVuZGFcIjpcIjEwMjAyXCIsXCJwZXJzb25hXCI6bnVsbH0nfCdldGMuLi4nO1xyXG5cclxuZXhwb3J0IHR5cGUgT2JqZXRvTnVtZXJhZG9PQXJyYXk8VD4gPSBUW10gfCB7W24gaW4gbnVtYmVyXTpUfVxyXG5cclxuZXhwb3J0IHR5cGUgUmVzcHVlc3Rhc1VuYVVBID0ge1xyXG4gICAgW3ByZWd1bnRhIGluIElkVmFyaWFibGVdOlZhbG9yXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFJlc3B1ZXN0YUxhc1VBID0ge1xyXG4gICAgW3VhIGluIElkVW5pZGFkQW5hbGlzaXNdOk9iamV0b051bWVyYWRvT0FycmF5PFJlc3B1ZXN0YXM+XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFJlc3B1ZXN0YXM9IFJlc3B1ZXN0YXNVbmFVQSAmIFJlc3B1ZXN0YUxhc1VBXHJcblxyXG5leHBvcnQgdHlwZSBSZXNwdWVzdGFzUmFpej1SZXNwdWVzdGFzICYge1xyXG4gICAgcmVzdW1lbkVzdGFkbzpSZXN1bWVuRXN0YWRvXHJcbiAgICByZXN1bWVuRXN0YWRvU3VwOlJlc3VtZW5Fc3RhZG9cclxuICAgICRkaXJ0eTpib29sZWFuXHJcbiAgICBjb2ROb1JlYTogc3RyaW5nfG51bGxcclxuICAgIGNvZFJlYTogbnVtYmVyfG51bGxcclxuICAgIGNvZE5vUmVhU3VwOiBzdHJpbmd8bnVsbFxyXG4gICAgY29kUmVhU3VwOiBudW1iZXJ8bnVsbFxyXG59XHJcblxyXG4vKlxyXG4gICAgYWNsYXJhY2nDs246XHJcbiAgICB7djE6J3gnLCB2MjoneCcsIHBlcnNvbmFzOlt7cDE6MSwgcDI6J3h9LHtwMToyLCBwMjp4fV0sIG1hc2NvdGFzOltdIH1cclxuICAgIGVzdMOhIGFuaWRhZG8gcG9yIHVuaWRhZCBkZSBhbsOhbGlzaXNcclxuKi9cclxuXHJcbmV4cG9ydCB0eXBlIFVuaWRhZEFuYWxpc2lzID0ge1xyXG4gICAgdW5pZGFkX2FuYWxpc2lzOklkVW5pZGFkQW5hbGlzaXMsIFxyXG4gICAgcGFkcmU/OklkVW5pZGFkQW5hbGlzaXMsIFxyXG4gICAgcGtfYWdyZWdhZGE6Q2FtcG9QaywgXHJcbiAgICBwcmluY2lwYWw/OmJvb2xlYW4sIFxyXG4gICAgaGlqYXM6IHtbayBpbiBJZFVuaWRhZEFuYWxpc2lzXT86IFVuaWRhZEFuYWxpc2lzfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBURU0gPSB7XHJcbiAgICBub21jYWxsZTpzdHJpbmdcclxuICAgIGRvbWluaW86bnVtYmVyXHJcbiAgICBzZWN0b3I6c3RyaW5nXHJcbiAgICBlZGlmaWNpbzpzdHJpbmdcclxuICAgIGVudHJhZGE6c3RyaW5nXHJcbiAgICBucm9jYXRhc3RyYWw6c3RyaW5nXHJcbiAgICBwaXNvOnN0cmluZ1x0XHJcbiAgICBkZXBhcnRhbWVudG86c3RyaW5nXHJcbiAgICBoYWJpdGFjaW9uOnN0cmluZ1xyXG4gICAgY2FzYTpzdHJpbmdcclxuICAgIHByaW9yaWRhZDoxfDJ8M1xyXG4gICAgb2JzZXJ2YWNpb25lczpzdHJpbmdcclxuICAgIHNlbGVjY2lvbmFkbzpudW1iZXIsXHJcbiAgICBjaXRhOiBzdHJpbmcsXHJcbiAgICBjYXJnYTpzdHJpbmdcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUmVzdW1lbkVzdGFkbyA9ICd2YWNpbycgfCAnY29uIHByb2JsZW1hcycgfCAnaW5jb21wbGV0bycgfCAnb2snIHwgJ25vIHJlYScgfCAnY2l0YSBwYWN0YWRhJztcclxuXHJcbmV4cG9ydCB0eXBlIEluZm9UYXJlYT0ge1xyXG4gICAgdGFyZWE6IElkVGFyZWFcclxuICAgIG5vdGFzPzpzdHJpbmdcclxuICAgIGZlY2hhX2FzaWduYWNpb24/OkRhdGVcclxuICAgIGFzaWduYWRvPzpzdHJpbmdcclxuICAgIG1haW5fZm9ybTogSWRGb3JtdWxhcmlvXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFZpc2l0YT17XHJcbiAgICBmZWNoYTogc3RyaW5nIHwgbnVsbFxyXG4gICAgaG9yYTogc3RyaW5nIHwgbnVsbFxyXG4gICAgaWRwZXI6IHN0cmluZyB8IG51bGxcclxuICAgIG9ic2VydmFjaW9uZXM6IHN0cmluZyB8IG51bGxcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgIERhdG9zSGRyVWFQcGFsPSB7XHJcbiAgICB0YXJlYTogSW5mb1RhcmVhXHJcbiAgICB0ZW06IFRFTVxyXG4gICAgXHJcbi8qXHJcbiAgICBhY2xhcmFjacOzbjpcclxuICAgIHt2MToneCcsIHYyOid4JywgcGVyc29uYXM6W3twMToxLCBwMjoneH0se3AxOjIsIHAyOnh9XSwgbWFzY290YXM6W10gfVxyXG4gICAgZXN0w6EgYW5pZGFkbyBwb3IgdW5pZGFkIGRlIGFuw6FsaXNpc1xyXG4qL1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBJZENhcmdhPVwiMjAyMC0wNy0wN1wifFwiMjAyMC0wNy0wOFwiXHJcblxyXG5leHBvcnQgdHlwZSBFc3RhZG9DYXJnYT0ncmVzdW1lbid8J3JlbGV2YW1pZW50byd8J3JlY2libydcclxuXHJcbmV4cG9ydCB0eXBlIENhcmdhPXtcclxuICAgIGZlY2hhOiBEYXRlXHJcbiAgICBlc3RhZG9fY2FyZ2E6IEVzdGFkb0NhcmdhXHJcbiAgICBuZWNlc2FyaWFzOiBudW1iZXJcclxuICAgIG9ic2VydmFjaW9uZXM6IHN0cmluZ1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBDYXJnYXM9e1xyXG4gICAgW2lkQ2FyZ2EgaW4gSWRDYXJnYV06IENhcmdhXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3I9U3RydWN0dXJlPElkVmFyaWFibGUsVmFsb3IsSWRGaW4+O1xyXG5cclxuZXhwb3J0IHR5cGUgTW9kb0Rlc3BsaWVndWUgPSAnbWV0YWRhdG9zJ3wncmVsZXZhbWllbnRvJ3wnUERGJ1xyXG5cclxuZXhwb3J0IHR5cGUgSW5mb0Zvcm11bGFyaW89e1xyXG4gICAgY2FzaWxsZXJvczpGb3JtdWxhcmlvLCAvLyBjYXNpbGxlcm9zIGFwbGFuYWRvc1xyXG4gICAgZXN0cnVjdHVyYVJvd1ZhbGlkYXRvcjpFc3RydWN0dXJhUm93VmFsaWRhdG9yIC8vIGVzdHJ1Y3R1cmEgZGUgdmFyaWFibGVzIHBhcmEgZWwgUm93VmFsaWRhdG9yXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIElkUmVzdWx0YWRvID0gJ0FWRVJJR1VBUid8J1RPRE8nO1xyXG5cclxuZXhwb3J0IHR5cGUgVGFyZWFzRXN0cnVjdHVyYT17XHJcbiAgICBbaWRUYXJlYSBpbiBJZFRhcmVhXTp7XHJcbiAgICAgICAgcmVzdWx0YWRvczp7XHJcbiAgICAgICAgICAgIFtpZFJlc3VsdGFkbyBpbiBJZFJlc3VsdGFkb106e1xyXG4gICAgICAgICAgICAgICAgZGVzY3JpcGNpb246c3RyaW5nXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEVzdHJ1Y3R1cmEgPSB7XHJcbiAgICBmb3JtdWxhcmlvczp7IFxyXG4gICAgICAgIFtub21icmVGb3JtdWxhcmlvIGluIElkRm9ybXVsYXJpb106SW5mb0Zvcm11bGFyaW9cclxuICAgIH1cclxuICAgIHVuaWRhZGVzX2FuYWxpc2lzOnsgXHJcbiAgICAgICAgW2lkVW5pZGFkQW5hbGlzaXMgaW4gSWRVbmlkYWRBbmFsaXNpc106IFVuaWRhZEFuYWxpc2lzXHJcbiAgICB9XHJcbiAgICB0YXJlYXM6VGFyZWFzRXN0cnVjdHVyYVxyXG4gICAgdGltZXN0YW1wOm51bWJlclxyXG4gICAgb3BlcmF0aXZvOklkT3BlcmF0aXZvXHJcbiAgICBjb25maWdTb3J0ZW86IENvbmZpZ3VyYWNpb25Tb3J0ZW9cclxuXHRub1JlYXM6IHsgXHJcblx0ICAgICAgbm9fcmVhOiBzdHJpbmcgIFxyXG5cdFx0ICBkZXNjcmlwY2lvbjogc3RyaW5nXHJcblx0XHQgIGdydXBvOiAgICAgc3RyaW5nICAgIFxyXG5cdFx0ICB2YXJpYWJsZTogIHN0cmluZ1xyXG5cdFx0ICB2YWxvcjogICAgIHN0cmluZ1xyXG5cdFx0ICBncnVwbzA6ICAgIHN0cmluZ1xyXG5cdH1bXVxyXG4gICAgbm9SZWFzU3VwOiB7IFxyXG4gICAgICAgIG5vX3JlYV9zdXA6IHN0cmluZyAgXHJcbiAgICAgICAgZGVzY19ub3JlYV9zdXA6IHN0cmluZ1xyXG4gICAgICAgIGdydXBvX3N1cDogICAgIHN0cmluZyAgICBcclxuICAgICAgICB2YXJpYWJsZV9zdXA6ICBzdHJpbmdcclxuICAgICAgICB2YWxvcl9zdXA6ICAgICBzdHJpbmdcclxuICAgICAgICBncnVwbzBfc3VwOiAgICBzdHJpbmdcclxuICB9W11cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgSWRFbmMgPSAxMzAwMzF8MTMwMDMyO1xyXG5leHBvcnQgdHlwZSBJbmZvcm1hY2lvbkhkcj17W2VuYyBpbiBJZEVuY106IERhdG9zSGRyVWFQcGFsfVxyXG5cclxuZXhwb3J0IHR5cGUgQ2Fzb1N0YXRlPXtcclxuICAgIG9wY2lvbmVzOnsgLy8gZGF0b3MgZGUgbmF2ZWdhY2nDs24gcXVlIGVsaWplIGVsIHVzdWFyaW9cclxuICAgICAgICBmb3JQazpGb3JQa3xudWxsIC8vIMOtbmRpY2UgZGVudHJvIGRlIGxhcyB1bmlkYWRlcyBkZSBhbsOhbGlzaXMuIE51bGwgPSBlbiBob2phIGRlIHJ1dGFcclxuICAgICAgICBwaWxhRm9yUGs6Rm9yUGtbXVxyXG4gICAgICAgIG1vZG9EZXNwbGllZ3VlOk1vZG9EZXNwbGllZ3VlXHJcbiAgICAgICAgYmllbnZlbmlkbzpib29sZWFuXHJcbiAgICAgICAgbW9kb0RpcmVjdG86Ym9vbGVhblxyXG4gICAgICAgIG1vZG9Cb3JyYXJSZXNwdWVzdGE6SWRWYXJpYWJsZXxudWxsXHJcbiAgICAgICAgY29uQ2FtcG9PcGNpb25lczpib29sZWFuXHJcbiAgICAgICAgc2FsdG9BdXRvbWF0aWNvOmJvb2xlYW5cclxuICAgIH0sIFxyXG4gICAgbW9kbzp7IC8vIG5vIHNlIHBlcnNpc3RlXHJcbiAgICAgICAgZGVtbzpib29sZWFuXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIERlZk9wZXJhdGl2byA9IHtcclxuICAgIGVzTm9SZWE6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kTm9SZWE6c3RyaW5nfG51bGwsIGVzTm9SZWE6Ym9vbGVhbn0sXHJcbiAgICBlc05vUmVhU3VwOihyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4ge2NvZE5vUmVhU3VwOnN0cmluZ3xudWxsLCBlc05vUmVhU3VwOmJvb2xlYW59LFxyXG4gICAgZXNSZWFsaXphZGE6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kUmVhOm51bWJlcnxudWxsLCBlc1JlYTpib29sZWFufSxcclxuICAgIGVzUmVhbGl6YWRhU3VwOihyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4ge2NvZFJlYVN1cDpudW1iZXJ8bnVsbCwgZXNSZWFTdXA6Ym9vbGVhbn0sXHJcbiAgICBVQXByaW5jaXBhbDogSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgIGRlZlVBOntbaSBpbiBJZFVuaWRhZEFuYWxpc2lzXTp7cGs6SWRWYXJpYWJsZSwgaW5jbHVpZGFzOklkVW5pZGFkQW5hbGlzaXNbXSwgaWRzRm9yOklkRm9ybXVsYXJpb1tdfX0sXHJcbiAgICBkZWZGb3I6e1tmIGluIElkRm9ybXVsYXJpb106ey8qYXJib2xVQTpJZFVuaWRhZEFuYWxpc2lzW10sICovIGhlcm1hbm8/OnRydWV9fVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyA9IHtcclxuICAgIHJlc3B1ZXN0YXM6e1t1YSBpbiBJZFVuaWRhZEFuYWxpc2lzXTpSZXNwdWVzdGFzUmFpeltdfVxyXG4gICAgbW9kb0FsbWFjZW5hbWllbnRvOk1vZG9BbG1hY2VuYW1pZW50b1xyXG4gICAgcGVyc29uYTpzdHJpbmdcclxuICAgIHRhcmVhOklkVGFyZWFcclxuICAgIGlkcGVyOnN0cmluZ1xyXG4gICAgY2FyZ2FzOiBDYXJnYXNcclxuICAgIGluZm9ybWFjaW9uSGRyOiBJbmZvcm1hY2lvbkhkclxyXG4gICAgc29sb0xlY3R1cmE6IGJvb2xlYW5cclxuICAgIHRva2VuPzpzdHJpbmdcclxuICAgIG51bV9zaW5jcm8/Om51bWJlclxyXG4gICAgdGltZXN0YW1wRXN0cnVjdHVyYT86bnVtYmVyXHJcbn1cclxuXHJcbnR5cGUgQ29uZmlndXJhY2lvblNvcnRlb1RhYmxhID0ge1xyXG4gICAgbWV0b2RvOiBcInRhYmxhXCIsXHJcbiAgICBwYXJhbV9tZXRvZG86IHtcclxuICAgICAgICB0YWJsYTpzdHJpbmdbXSxcclxuICAgICAgICB2YXJfbGV0cmE6SWRWYXJpYWJsZSxcclxuICAgIH0gICAgXHJcbn1cclxuXHJcbnR5cGUgQ29uZmlndXJhY2lvblNvcnRlb0hhc2ggPSB7XHJcbiAgICBtZXRvZG86IFwiaGFzaFwiLFxyXG4gICAgcGFyYW1fbWV0b2RvOiB7XHJcbiAgICAgICAgdmFyX2NvZWY6IFtcclxuICAgICAgICAgICAge3ZhcjpJZFZhcmlhYmxlLCBjb2VmOm51bWJlcn0sXHJcbiAgICAgICAgICAgIHt2YXI6SWRWYXJpYWJsZSwgY29lZjpudW1iZXJ9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgZGl2aXNvcjogbnVtYmVyXHJcbiAgICB9ICAgIFxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBDb25maWd1cmFjaW9uU29ydGVvID0ge1trZXkgaW4gSWRGb3JtdWxhcmlvXTpDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpb31cclxuXHJcbmV4cG9ydCB0eXBlIENvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvID0ge1xyXG4gICAgdW5pZGFkX2FuYWxpc2lzOiBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgdW5pZGFkX2FuYWxpc2lzX3BhZHJlOiBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgLy9leHByX2luY29tcGxldGl0dWQ6IHN0cmluZyAvL1wibm90IChwMSkgb3Igbm8gdCAocDIpIG9yIG5vdChwMylcIlxyXG4gICAgZXhwcl9pbmNvbXBsZXRpdHVkOiB7XHJcbiAgICAgICAgW2tleSBpbiBudW1iZXJdOntkb21pbmlvOm51bWJlciwgZXhwcjpzdHJpbmd9XHJcbiAgICB9IFxyXG4gICAgLy9leHByX2luY29tcGxldGl0dWRfanM6IHN0cmluZyAvL3NlIGNyZWEgYWwgY29tcGlsYXJcclxuICAgIGV4cHJfaW5jb21wbGV0aXR1ZF9qczoge1xyXG4gICAgICAgIFtrZXkgaW4gbnVtYmVyXTp7ZG9taW5pbzpudW1iZXIsIGV4cHI6c3RyaW5nfVxyXG4gICAgfSBcclxuICAgIGRpc3BhcmFkb3I6IElkVmFyaWFibGUgLy9cInA5XCJcclxuICAgIC8vZmlsdHJvOiBzdHJpbmcgLy9cInAzPj0xOFwiXHJcbiAgICBmaWx0cm86IHtcclxuICAgICAgICBba2V5IGluIG51bWJlcl06e2RvbWluaW86bnVtYmVyLCBleHByOnN0cmluZ31cclxuICAgIH0gXHJcbiAgICAvL2ZpbHRyb19qczogc3RyaW5nIC8vc2UgY3JlYSBhbCBjb21waWxhclxyXG4gICAgZmlsdHJvX2pzOiB7XHJcbiAgICAgICAgW2tleSBpbiBudW1iZXJdOntkb21pbmlvOm51bWJlciwgZXhwcjpzdHJpbmd9XHJcbiAgICB9IFxyXG4gICAgb3JkZW46IHtcclxuICAgICAgICB2YXJpYWJsZTpJZFZhcmlhYmxlXHJcbiAgICAgICAgb3JkZW46IDF8LTFcclxuICAgIH1bXSAvL1tcInAzXCIsIFwicDJcIiwgXCJwMVwiLCBcInAwXCJdLCAvLyBwMCBlcyBjb25zdHJ1aWRhLCBubyB2YSBlbiBwYXLDoW1ldHJvcywgc2UgcG9uZSBwYXJhIHF1ZSBlbCBvcmRlbiBzZWEgZGV0ZXJtaW7DrXN0aWNvXHJcbiAgICBwYXJhbWV0cm9zOklkVmFyaWFibGVbXS8vIFtcInAxXCIsXCJwMlwiLFwicDNcIiwgXCJwNFwiLCBcInA1XCIsIFwicDZcIl0sIC8vIHZhcmlhYmxlcyBxdWUgYW51bGFuIGFsIGRpc3BhcmFkb3JcclxuICAgIGNhbnRpZGFkX3NvcnRlYWJsZXM6IElkVmFyaWFibGVcclxuICAgIGNhbnRpZGFkX3RvdGFsOiBJZFZhcmlhYmxlXHJcbiAgICByZXN1bHRhZG86IElkVmFyaWFibGUgLy9cInAxMVwiXHJcbiAgICByZXN1bHRhZG9fbWFudWFsOiBJZFZhcmlhYmxlIC8vXCJwMTFcIlxyXG4gICAgc29ydGVhZG9fbW9zdHJhcj86IHtzb3VyY2U6SWRWYXJpYWJsZSwgdGFyZ2V0OklkVmFyaWFibGV9W10sXHJcbiAgICBpbmNvbXBsZXRhczogSWRWYXJpYWJsZVxyXG4gICAgdmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQTogSWRWYXJpYWJsZS8vJyRCLkY6UzFfUCdcclxuICAgIHZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsPzogSWRWYXJpYWJsZSAvLyckQi5GOkkxJ1xyXG4gICAgaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsPzogSWRGb3JtdWxhcmlvIC8vICdGOkkxJ1xyXG4gICAgaWRfZm9ybXVsYXJpb19wYWRyZT86IElkRm9ybXVsYXJpbyAvLyAnRjpTMSdcclxufSAmIChDb25maWd1cmFjaW9uU29ydGVvSGFzaCB8IENvbmZpZ3VyYWNpb25Tb3J0ZW9UYWJsYSlcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdG9QbGFpbkZvclBrKGZvclBrOkZvclBrKTpQbGFpbkZvclBre1xyXG4gICAgLy8gQHRzLWlnbm9yZSBzYWJlbW9zIHF1ZSBoYXkgcXVlIGhhY2VyIHVuIEpTT05cclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShmb3JQayk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgaXRlcmF0b3I6PFQ+KG86T2JqZXRvTnVtZXJhZG9PQXJyYXk8VD4pPT5JdGVyYWJsZTxUPiA9IExpa2VBci5pdGVyYXRvclxyXG5leHBvcnQgdmFyIGVtcHR5OjxUPihvOk9iamV0b051bWVyYWRvT0FycmF5PFQ+fG51bGx8dW5kZWZpbmVkKT0+Ym9vbGVhbiA9IExpa2VBci5lbXB0eVxyXG5cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gICAgbmFtZXNwYWNlIG15T3due1xyXG4gICAgICAgIGludGVyZmFjZSBBZGRyUGFyYW1zIHtcclxuICAgICAgICAgICAgc3RhdGVfZm9yUGs6c3RyaW5nXHJcbiAgICAgICAgICAgIHN0YXRlX3BpbGFGb3JQazpzdHJpbmdcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIERpcmVjY2lvbkFjY2lvbiA9ICdhdmFuY2UnIHwgJ3JldHJvY2VzbycgfCAnYmxhbnF1ZW8nXHJcblxyXG5leHBvcnQgdHlwZSBFc3RhZG9BY2Npb24gPSB7XHJcbiAgICBvcGVyYXRpdm86IHN0cmluZ1xyXG4gICAgdGFyZWE6ICdlbmN1J3wncmVjdSd8J3N1cGUnXHJcbiAgICBlc3RhZG86IHN0cmluZ1xyXG4gICAgZWFjY2lvbjogc3RyaW5nXHJcbiAgICBjb25kaWNpb246IHN0cmluZ1xyXG4gICAgZXN0YWRvX2Rlc3Rpbm86IHN0cmluZ1xyXG4gICAgdGFyZWFfZGVzdGlubzogc3RyaW5nXHJcbiAgICBlYWNjaW9uX2RpcmVjY2lvbjogRGlyZWNjaW9uQWNjaW9uXHJcbiAgICBwYXRoX2ljb25vX3N2Zzogc3RyaW5nXHJcbiAgICBub21icmVfcHJvY2VkdXJlOiBzdHJpbmdcclxuICAgIGRlc2FjdGl2YV9ib3RvbjogYm9vbGVhblxyXG4gICAgY29uZmlybWE6IGJvb2xlYW5cclxufSJdfQ==
@@ -1,25 +1,30 @@
1
1
  --set role to ggs2022_owner;
2
2
  --set search_path=base;
3
- CREATE OR REPLACE FUNCTION accion_cumple_condicion(operativo text, estado text, enc text, tarea text, eaccion text, tarea_destino text, condicion text)
3
+ CREATE OR REPLACE FUNCTION accion_cumple_condicion(p_operativo text, p_estado text, p_enc text, p_tarea text, p_eaccion text, p_tarea_destino text)
4
4
  RETURNS boolean AS
5
5
  $BODY$
6
6
  DECLARE
7
- vsent text;
8
- vcond text;
9
- vsalida integer;
7
+ v_sent text;
8
+ v_cond text;
9
+ v_salida integer;
10
10
  BEGIN
11
- vcond=condicion;
12
- vsent=' select 1
11
+ v_cond=p_condicion;
12
+ v_sent=' select 1
13
13
  from base.tareas_tem t
14
14
  inner join base.estados_acciones ea using (operativo, estado, tarea)
15
15
  inner join tem te using (operativo,enc)
16
16
  left join sincronizaciones s on t.cargado_dm=s.token
17
17
  left join viviendas v on (te.operativo = v.operativo and te.enc = v.vivienda)
18
18
  left join no_rea nr on (te.norea::text = nr.no_rea)
19
- where t.operativo='''||$1||''' and t.estado='''||$2||''' and t.enc='''||$3||''' and t.tarea='''||$4||''' and ea.eaccion='''||$5 ||''' and ea.tarea_destino='''||$6 ||''' and '||vcond||';';
19
+ where t.operativo='||quote_literal(p_operativo)||
20
+ ' and t.estado='||quote_literal(p_estado)||
21
+ ' and t.enc='||qote_literal(p_enc)||
22
+ ' and t.tarea='||quote_literal(p_enc)||
23
+ ' and ea.eaccion='||quote_literal(p_eaccion)||
24
+ ' and ea.tarea_destino='||qote_literal(p_destino)||' and '||v_cond||';';
20
25
  --raise notice 'esto %',vsent;
21
- execute vsent into vsalida;
22
- IF vsalida=1 THEN
26
+ execute v_sent into v_salida;
27
+ IF v_salida=1 THEN
23
28
  return true;
24
29
  ELSE
25
30
  return false;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dmencu",
3
3
  "description": "DM Encu - Encuestas en dispositivo móvil",
4
- "version": "0.3.9",
4
+ "version": "0.3.11",
5
5
  "author": "Codenautas <codenautas@googlegroups.com>",
6
6
  "license": "MIT",
7
7
  "main": "dist/server/server/app-dmencu.js",
@@ -24,7 +24,8 @@
24
24
  "redux-typed-reducer": "~0.1.1",
25
25
  "service-worker-admin": "^0.2.1",
26
26
  "yazl": "~2.5.1",
27
- "row-validator": "^1.0.0-rc1"
27
+ "row-validator": "^1.0.0-rc1",
28
+ "like-ar": "^0.3.9"
28
29
  },
29
30
  "dependencias provisorias: las que se pongan en dependencias ponerlas acá y sacarlas juntas": {},
30
31
  "devDependencies": {