# Carga de archivos
padron<-read.xlsx("Padron.xlsx")
abril2021<-read_csv2("Abril2021.csv")
marzo2021<-read_csv2("Marzo 2021.csv")
total2021<-read_csv2("BaseExtrasCompleto.csv")
total2021<-total2021 %>% 
  left_join(padron, by="Legajo")
marzo21completo<-marzo2021 %>% 
  left_join(padron, by ="Legajo")
abril21completo<-abril2021 %>% 
  left_join(padron, by ="Legajo") %>% 
  arrange(desc(`Cant. Horas`))
ComparativoMensual2021<-read.xlsx("ComparativoMensual2021.xlsx")

Comparativo Mensual

gt(ComparativoMensual2021) %>% 
  tab_header(title = "Comparativo Mensual",
             subtitle = "Año 2021") %>% 
  cols_label(Meses = "Periodo",
             `Hrs.50%` = "Hrs 50%",
             `Hrs.100%` = "Hrs 100%", 
             `Hrs.150%` = "Hrs 150%",
             `Ajuste.50%` = "Ajuste 50%",
             `Ajuste.100%` = "Ajuste 100%",
             `Ajuste.150%` = "Ajuste 150%",
             Total = "Total")
Comparativo Mensual
Año 2021
Periodo Hrs 50% Hrs 100% Hrs 150% Ajuste 50% Ajuste 100% Ajuste 150% Total
Ene 21 3794.5 4638.0 2796.0 186.5 26.0 172.0 11658.0
Feb 21 4379.0 8034.0 4029.0 8.0 10.0 0.0 16450.0
Mar 21 3916.5 4483.5 2668.0 121.5 280.0 182.0 11651.5
Abr 21 3667.5 4548.5 2554.5 295.5 184.0 104.5 11354.5
May 21 3526.0 3161.5 1702.0 144.0 249.0 38.0 8820.5
Jun 21 2625.0 5665.0 2412.0 87.0 67.5 61.0 10917.5

Total de horas acumuladas en Julio 2021

HorasPorTipoJulio<-total2021 %>% 
  filter(Fecha>"2021-06-20" & Fecha<"2021-07-21") %>%
  select(`Tipo de hora`, `Cant. Horas`, Departamento) %>% 
  group_by(`Tipo de hora`) %>%
  summarise(sum=sum(`Cant. Horas`), n = n()) %>% 
  arrange(desc(sum))

HorasTotalJulio<-total2021 %>% 
  filter(Fecha>"2021-06-20" & Fecha<"2021-07-21") %>%
  select(`Cant. Horas`) %>% 
  summarise(sum=sum(`Cant. Horas`), n = n())

gt(HorasPorTipoJulio) %>% 
  tab_header(title = "Acumulado Julio según Tipo de Hora",
             subtitle = "Año 2021") %>% 
  cols_label(`Tipo de hora` = "Tipo de hora",
             sum = "Suma",
             n = "Casos")
Acumulado Julio según Tipo de Hora
Año 2021
Tipo de hora Suma Casos
Hrs. 100% 900.5 149
Hrs. 50% 507.0 126
Hrs. 150% 447.0 50
gt(HorasTotalJulio) %>% 
  tab_header(title = "Acumulado Julio",
             subtitle = "Año 2021") %>% 
  cols_label(sum = "Suma",
             n = "Casos")
Acumulado Julio
Año 2021
Suma Casos
1854.5 325
horas50julio<-total2021 %>% 
  filter(Fecha>"2021-06-20" & Fecha<"2021-07-21") %>%
  select(`Tipo de hora`, `Cant. Horas`, Departamento) %>% 
  filter(`Tipo de hora`=="Hrs. 50%") %>% 
  summarise(sum(`Cant. Horas`))

horas100julio<-total2021 %>%
  filter(Fecha>"2021-06-20" & Fecha<"2021-07-21") %>% 
  select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
  filter(`Tipo de hora`=="Hrs. 100%") %>% 
  summarise(sum(`Cant. Horas`))

horas150julio<-total2021 %>% 
  filter(Fecha>"2021-06-20" & Fecha<"2021-07-21") %>% 
  select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
  filter(`Tipo de hora`=="Hrs. 150%") %>% 
  summarise(sum(`Cant. Horas`))
  

ponderadas50julio<-horas50julio*1.5
ponderadas100julio<-horas100julio*2
ponderadas150julio<-horas150julio*2.5

Las horas ponderadas al 50% corresponden a 760.5 horas.

Las horas ponderadas al 100% corresponden a 1801 horas.

Las horas ponderadas al 150% corresponden a 1117.5 horas.

Acumulado Julio por Departamento

HorasPorDepartamentoJulio<-total2021 %>% 
  filter(Fecha>"2021-06-20" & Fecha<"2021-07-21") %>%
  select(`Tipo de hora`, `Cant. Horas`, Departamento) %>% 
  group_by(Departamento) %>%
  summarise(sum=sum(`Cant. Horas`), n = n()) %>% 
  arrange(desc(sum))

gt(HorasPorDepartamentoJulio) %>% 
  tab_header(title = "Acumulado Julio por departamento",
             subtitle = "Año 2021") %>% 
  cols_label(Departamento = "Departamento",
             sum = "Suma",
             n = "Casos")
Acumulado Julio por departamento
Año 2021
Departamento Suma Casos
ENFERMERÍA 1268.0 202
SERVICIOS GENERALES 192.5 20
HEMOTERAPIA 105.5 19
ALIMENTACIÓN 61.5 11
LABORATORIO 49.5 18
C.I.R.H.E. 48.0 19
QUIRÓFANO 34.0 10
ROPERIA 25.5 4
FARMACIA Y SUMINISTROS 18.0 3
GERENCIA DE OPERACIONES 18.0 2
ESTERILIZACIÓN 10.5 1
CARDIOLOGIA 7.0 4
GERENCIA DE CONTRATACIONES Y COMERCIALIZACION 5.0 5
IMÁGENES 4.5 2
GERENCIA DE FINANZAS 4.0 1
ANATOMIA PALOTÓGICA 2.0 2
GERENCIA CONTABILIDAD 1.0 2
graficoJulio<-total2021 %>% 
  filter(Fecha>"2021-06-20" & Fecha<"2021-07-21")

ggplot(graficoJulio, aes(x = Departamento, y=`Cant. Horas`, fill=`Tipo de hora`))+
  geom_col()+
  theme(axis.text.x = element_text(angle = 90, size = rel(0.5)))+
  ggtitle("Cantidad y tipos de hora por departamento Julio 2021")

Top 10 legajos con más horas

los10masTotal<-total2021 %>% 
  filter(Fecha>"2021-06-20" & Fecha<"2021-07-21") %>%
  select(`Tipo de hora`, `Cant. Horas`, Empleado) %>% 
  group_by(Empleado) %>%
  summarise(sum=sum(`Cant. Horas`), n = n()) %>% 
  arrange (desc(sum)) %>% 
  slice(1:10)

gt(los10masTotal) %>% 
  tab_header(title = "Legajos Top 10 con horas ",
             subtitle = "Julio 2021") %>% 
  cols_label(Empleado = "Colaborador/a",
             sum = "Suma de horas",
             n = "Guardias")
Legajos Top 10 con horas
Julio 2021
Colaborador/a Suma de horas Guardias
HUANACUNI COPA, SILVIA MERCEDES 42.0 3
LIOTINE, RENEE ALONDRA 42.0 3
OSORIO PINEDA, MARIA CRISTINA 42.0 4
ASCURRA ZENTENO, ABEL MODESTO 36.0 6
FARFAN, CARLA MARIANA 35.0 7
KRUPA, RAMONA DEL CARMEN 33.5 5
DE LUCA, ENRIQUE ANIBAL 30.0 3
CARRIZO, MANUELA 28.0 4
ORTELLADO, EVELYN DENISSE 27.5 2
PORTUGUEZ CUZQUE, LILIANA MAGALI 25.5 4

Cantidad de Horas totales según día de la semana

####Resumen por dia de semana###
totalDiaSemana<-total2021 %>% 
  select(`Dia Sem.`, `Tipo de hora`, `Cant. Horas`) %>% 
  group_by(`Dia Sem.`) %>% 
  summarise(mean = mean(`Cant. Horas`), sum = sum(`Cant. Horas`), n = n())

gt(totalDiaSemana) %>% 
  tab_header(title = "Resumen por día de la semana",
             subtitle = "Año 2021") %>% 
  cols_label(`Dia Sem.` = "Dia de la semana",
             mean = "Media",
             sum = "Suma",
             n = "Casos")
Resumen por día de la semana
Año 2021
Dia de la semana Media Suma Casos
DO 7.050441 5591.0 793
JU 4.265974 5541.5 1299
LU 4.659091 6150.0 1320
MA 4.931720 6825.5 1384
MI 4.388972 5850.5 1333
SA 6.530238 6047.0 926
VI 4.419423 6280.0 1421

Total de horas acumuladas en Junio 2021

HorasPorTipoJunio<-total2021 %>% 
  filter(Fecha>"2021-05-20" & Fecha<"2021-06-21") %>%
  select(`Tipo de hora`, `Cant. Horas`, Departamento) %>% 
  group_by(`Tipo de hora`) %>%
  summarise(sum=sum(`Cant. Horas`), n = n()) %>% 
  arrange(desc(sum))

HorasTotalJunio<-total2021 %>% 
  filter(Fecha>"2021-05-20" & Fecha<"2021-06-21") %>%
  select(`Cant. Horas`) %>% 
  summarise(sum=sum(`Cant. Horas`), n = n())

gt(HorasPorTipoJunio) %>% 
  tab_header(title = "Acumulado Junio según Tipo de Hora",
             subtitle = "Año 2021") %>% 
  cols_label(`Tipo de hora` = "Tipo de hora",
             sum = "Suma",
             n = "Casos")
Acumulado Junio según Tipo de Hora
Año 2021
Tipo de hora Suma Casos
Hrs. 100% 5697.5 866
Hrs. 50% 2629.5 823
Hrs. 150% 2412.0 285
gt(HorasTotalJunio) %>% 
  tab_header(title = "Acumulado Junio",
             subtitle = "Año 2021") %>% 
  cols_label(sum = "Suma",
             n = "Casos")
Acumulado Junio
Año 2021
Suma Casos
10739 1974
horas50junio<-total2021 %>% 
  filter(Fecha>"2021-05-20" & Fecha<"2021-06-21") %>%
  select(`Tipo de hora`, `Cant. Horas`, Departamento) %>% 
  filter(`Tipo de hora`=="Hrs. 50%") %>% 
  summarise(sum(`Cant. Horas`))

horas100junio<-total2021 %>%
  filter(Fecha>"2021-05-20" & Fecha<"2021-06-21") %>% 
  select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
  filter(`Tipo de hora`=="Hrs. 100%") %>% 
  summarise(sum(`Cant. Horas`))

horas150junio<-total2021 %>% 
  filter(Fecha>"2021-05-20" & Fecha<"2021-06-21") %>% 
  select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%
  filter(`Tipo de hora`=="Hrs. 150%") %>% 
  summarise(sum(`Cant. Horas`))
  

ponderadas50junio<-horas50junio*1.5
ponderadas100junio<-horas100junio*2
ponderadas150junio<-horas150junio*2.5

Las horas ponderadas al 50% corresponden a 3944.25 horas.

Las horas ponderadas al 100% corresponden a 1.139510^{4} horas.

Las horas ponderadas al 150% corresponden a 6030 horas.

graficoJunio<-total2021 %>% 
  filter(Fecha>"2021-05-20" & Fecha<"2021-06-21")

ggplot(graficoJunio, aes(x = Departamento, y=`Cant. Horas`, fill=`Tipo de hora`))+
  geom_col()+
  theme(axis.text.x = element_text(angle = 90, size = rel(0.5)))+
  ggtitle("Cantidad y tipos de hora por departamento Junio 2021")

Acumulado Junio por Departamento

HorasPorDepartamentoJunio<-total2021 %>% 
  filter(Fecha>"2021-05-20" & Fecha<"2021-06-21") %>%
  select(`Tipo de hora`, `Cant. Horas`, Departamento) %>% 
  group_by(Departamento) %>%
  summarise(sum=sum(`Cant. Horas`), n = n()) %>% 
  arrange(desc(sum))

gt(HorasPorDepartamentoJunio) %>% 
  tab_header(title = "Acumulado Junio por departamento",
             subtitle = "Año 2021") %>% 
  cols_label(Departamento = "Departamento",
             sum = "Suma",
             n = "Casos")
Acumulado Junio por departamento
Año 2021
Departamento Suma Casos
ENFERMERÍA 5307.5 854
SERVICIOS GENERALES 1534.0 197
LABORATORIO 1149.0 346
ALIMENTACIÓN 537.0 52
HEMOTERAPIA 444.5 69
GERENCIA DE OPERACIONES 444.0 120
FARMACIA Y SUMINISTROS 320.0 77
ROPERIA 196.5 40
QUIRÓFANO 161.0 34
IMÁGENES 134.5 26
GERENCIA DE CONTRATACIONES Y COMERCIALIZACION 97.0 33
ANATOMIA PALOTÓGICA 74.5 37
MANTENIMIENTO 70.0 13
C.I.R.H.E. 63.5 14
FARMACIA AMBULATORIA 54.0 9
DIRECCIÓN HUSS 24.0 4
GERENCIA DE FINANZAS 23.0 7
NEUROCIENCIAS 22.5 11
IUC 21.0 9
NA 14.0 1
ESTERILIZACIÓN 13.0 1
DIRECCIÓN ADMINISTRATIVA 10.0 2
DIRECCIÓN DE INVESTIGACIÓN 9.0 6
GERENCIA CONTABILIDAD 6.5 8
BIOINGENIERIA 4.0 1
CARDIOLOGIA 3.0 1
ANESTESIOLOGÍA 2.0 2

Total de horas acumuladas en Mayo 2021

HorasPorTipoMayo<-total2021 %>% 
  filter(Fecha>"2021-04-20" & Fecha<"2021-05-21") %>%
  select(`Tipo de hora`, `Cant. Horas`, Departamento) %>% 
  group_by(`Tipo de hora`) %>%
  summarise(sum=sum(`Cant. Horas`), n = n()) %>% 
  arrange(desc(sum))

HorasTotalMayo<-total2021 %>% 
  filter(Fecha>"2021-04-20" & Fecha<"2021-05-21") %>%
  select(`Cant. Horas`) %>% 
  summarise(sum=sum(`Cant. Horas`), n = n())

gt(HorasPorTipoMayo) %>% 
  tab_header(title = "Acumulado Mayo según Tipo de Hora",
             subtitle = "Año 2021") %>% 
  cols_label(`Tipo de hora` = "Tipo de hora",
             sum = "Suma",
             n = "Casos")
Acumulado Mayo según Tipo de Hora
Año 2021
Tipo de hora Suma Casos
Hrs. 50% 3480.5 1130
Hrs. 100% 3110.0 581
Hrs. 150% 1719.0 198
gt(HorasTotalMayo) %>% 
  tab_header(title = "Acumulado Mayo",
             subtitle = "Año 2021") %>% 
  cols_label(sum = "Suma",
             n = "Casos")
Acumulado Mayo
Año 2021
Suma Casos
8309.5 1909
horas50mayo<-total2021 %>% 
  filter(Fecha>"2021-04-20" & Fecha<"2021-05-21") %>%
  select(`Tipo de hora`, `Cant. Horas`, Departamento) %>% 
  filter(`Tipo de hora`=="Hrs. 50%") %>% 
  summarise(sum(`Cant. Horas`))

horas100mayo<-total2021 %>% 
  filter(Fecha>"2021-04-20" & Fecha<"2021-05-21") %>%
  select(`Tipo de hora`, `Cant. Horas`, Departamento) %>% 
  filter(`Tipo de hora`=="Hrs. 100%") %>% 
  summarise(sum(`Cant. Horas`))

horas150mayo<-total2021 %>% 
  filter(Fecha>"2021-04-20" & Fecha<"2021-05-21
  select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%") %>% 
  filter(`Tipo de hora`=="Hrs. 150%") %>% 
  summarise(sum(`Cant. Horas`))
  

ponderadas50mayo<-horas50mayo*1.5
ponderadas100mayo<-horas100mayo*2
ponderadas150mayo<-horas150mayo*2.5

Las horas ponderadas al 50% corresponden a 5220.75 horas.

Las horas ponderadas al 100% corresponden a 6220 horas.

Las horas ponderadas al 150% corresponden a 4297.5 horas.

graficoMayo<-total2021 %>% 
  filter(Fecha>"2021-04-20" & Fecha<"2021-05-21")

ggplot(graficoMayo, aes(x = Departamento, y=`Cant. Horas`, fill=`Tipo de hora`))+
  geom_col()+
  theme(axis.text.x = element_text(angle = 90, size = rel(0.5)))+
  ggtitle("Cantidad y tipos de hora por departamento Mayo 2021")

Acumulado Mayo por Departamento

HorasPorDepartamentoMayo<-total2021 %>% 
  filter(Fecha>"2021-04-20" & Fecha<"2021-05-21") %>%
  select(`Tipo de hora`, `Cant. Horas`, Departamento) %>% 
  group_by(Departamento) %>%
  summarise(sum=sum(`Cant. Horas`), n = n()) %>% 
  arrange(desc(sum))

gt(HorasPorDepartamentoMayo) %>% 
  tab_header(title = "Acumulado Mayo por departamento",
             subtitle = "Año 2021") %>% 
  cols_label(Departamento = "Departamento",
             sum = "Suma",
             n = "Casos")
Acumulado Mayo por departamento
Año 2021
Departamento Suma Casos
ENFERMERÍA 3827.0 676
LABORATORIO 1352.5 443
SERVICIOS GENERALES 818.0 133
GERENCIA DE OPERACIONES 497.0 179
ALIMENTACIÓN 440.0 70
HEMOTERAPIA 354.5 63
FARMACIA Y SUMINISTROS 194.5 54
IMÁGENES 146.0 26
GERENCIA DE CONTRATACIONES Y COMERCIALIZACION 115.0 59
ANATOMIA PALOTÓGICA 112.0 54
QUIRÓFANO 108.0 36
C.I.R.H.E. 78.5 34
ROPERIA 72.5 13
MANTENIMIENTO 55.0 8
GERENCIA DE FINANZAS 46.5 23
FARMACIA AMBULATORIA 36.0 6
CARDIOLOGIA 16.5 7
NA 10.0 2
BIOINGENIERIA 6.5 6
NEUROCIENCIAS 6.5 4
IUC 5.5 3
ANESTESIOLOGÍA 5.0 2
DIRECCIÓN DE INVESTIGACIÓN 5.0 5
GERENCIA CONTABILIDAD 1.5 3

Total de horas acumuladas en Abril 2021

HorasPorTipoAbril<-total2021 %>% 
  filter(Fecha>"2021-03-20" & Fecha<"2021-04-21") %>%
  select(`Tipo de hora`, `Cant. Horas`, Departamento) %>% 
  group_by(`Tipo de hora`) %>%
  summarise(sum=sum(`Cant. Horas`), n = n()) %>% 
  arrange(desc(sum))

HorasTotalabril<-total2021 %>% 
  filter(Fecha>"2021-03-20" & Fecha<"2021-04-21") %>%
  select(`Cant. Horas`) %>% 
  summarise(sum=sum(`Cant. Horas`), n = n())

gt(HorasPorTipoAbril) %>% 
  tab_header(title = "Acumulado Abril según Tipo de Hora",
             subtitle = "Año 2021") %>% 
  cols_label(`Tipo de hora` = "Tipo de hora",
             sum = "Suma",
             n = "Casos")
Acumulado Abril según Tipo de Hora
Año 2021
Tipo de hora Suma Casos
Hrs. 100% 4262.5 742
Hrs. 50% 3578.5 1010
Hrs. 150% 2536.5 296
gt(HorasTotalabril) %>% 
  tab_header(title = "Acumulado Abril",
             subtitle = "Año 2021") %>% 
  cols_label(sum = "Suma",
             n = "Casos")
Acumulado Abril
Año 2021
Suma Casos
10377.5 2048
horas50abril<-total2021 %>% 
  filter(Fecha>"2021-03-20" & Fecha<"2021-04-21") %>%
  select(`Tipo de hora`, `Cant. Horas`, Departamento) %>% 
  filter(`Tipo de hora`=="Hrs. 50%") %>% 
  summarise(sum(`Cant. Horas`))

horas100abril<-total2021 %>% 
  filter(Fecha>"2021-03-20" & Fecha<"2021-04-21") %>%
  select(`Tipo de hora`, `Cant. Horas`, Departamento) %>% 
  filter(`Tipo de hora`=="Hrs. 100%") %>% 
  summarise(sum(`Cant. Horas`))

horas150abril<-total2021 %>% 
  filter(Fecha>"2021-03-20" & Fecha<"2021-04-21
  select(`Tipo de hora`, `Cant. Horas`, Departamento) %>%") %>% 
  filter(`Tipo de hora`=="Hrs. 150%") %>% 
  summarise(sum(`Cant. Horas`))
  

ponderadas50abril<-horas50abril*1.5
ponderadas100abril<-horas100abril*2
ponderadas150abril<-horas150abril*2.5

Las horas ponderadas al 50% corresponden a 5367.75 horas.

Las horas ponderadas al 100% corresponden a 8525 horas.

Las horas ponderadas al 150% corresponden a 6341.25 horas.

graficoAbril<-total2021 %>% 
  filter(Fecha>"2021-03-20" & Fecha<"2021-04-21")

ggplot(graficoAbril, aes(x = Departamento, y=`Cant. Horas`, fill=`Tipo de hora`))+
  geom_col()+
  theme(axis.text.x = element_text(angle = 90, size = rel(0.5)))+
  ggtitle("Cantidad y tipos de hora por departamento Abril 2021")

Acumulado Abril por Departamento

HorasPorDepartamentoAbril<-total2021 %>% 
  filter(Fecha>"2021-03-20" & Fecha<"2021-04-21") %>%
  select(`Tipo de hora`, `Cant. Horas`, Departamento) %>% 
  group_by(Departamento) %>%
  summarise(sum=sum(`Cant. Horas`), n = n()) %>% 
  arrange(desc(sum))

gt(HorasPorDepartamentoAbril) %>% 
  tab_header(title = "Acumulado Abril por departamento",
             subtitle = "Año 2021") %>% 
  cols_label(Departamento = "Departamento",
             sum = "Suma",
             n = "Casos")
Acumulado Abril por departamento
Año 2021
Departamento Suma Casos
ENFERMERÍA 4929.0 837
SERVICIOS GENERALES 1551.5 246
LABORATORIO 1142.0 326
GERENCIA DE OPERACIONES 512.5 128
ALIMENTACIÓN 484.5 73
IMÁGENES 374.0 58
HEMOTERAPIA 335.0 53
FARMACIA Y SUMINISTROS 232.5 58
QUIRÓFANO 225.5 60
MANTENIMIENTO 113.0 20
GERENCIA DE CONTRATACIONES Y COMERCIALIZACION 100.0 50
ROPERIA 97.5 19
ANATOMIA PALOTÓGICA 87.5 43
GERENCIA DE FINANZAS 68.0 40
C.I.R.H.E. 43.0 8
FARMACIA AMBULATORIA 36.0 6
CARDIOLOGIA 16.5 6
DIRECCIÓN ADMINISTRATIVA 10.0 2
NEUROCIENCIAS 9.5 7
ANESTESIOLOGÍA 3.5 2
GERENCIA CONTABILIDAD 3.5 4
DIRECCIÓN DE INVESTIGACIÓN 3.0 2

Marzo 2021

filtroFecha<-total2021 %>%
  filter(Fecha>"2021-02-20" & Fecha<"2021-03-21") %>%
  arrange(Fecha)

marzo21porDepartamento<-total2021 %>% 
  filter(Fecha>"2021-02-20" & Fecha<"2021-03-21") %>%
  select(`Tipo de hora`, `Cant. Horas`, Departamento) %>% 
  group_by(Departamento) %>%
  summarise(sum=sum(`Cant. Horas`), n = n()) %>% 
  arrange(desc(sum))

gt(marzo21porDepartamento) %>% 
  tab_header(title = "Horas totales por departamento",
             subtitle = "Marzo 2021") %>% 
  cols_label(Departamento = "Departamento",
             sum = "Horas Totales",
             n = "Casos")
Horas totales por departamento
Marzo 2021
Departamento Horas Totales Casos
ENFERMERÍA 5589.5 947
SERVICIOS GENERALES 2109.5 329
LABORATORIO 923.0 307
GERENCIA DE OPERACIONES 401.5 126
IMÁGENES 312.0 65
HEMOTERAPIA 305.5 53
FARMACIA Y SUMINISTROS 291.0 65
QUIRÓFANO 273.5 78
ALIMENTACIÓN 237.5 41
ROPERIA 136.5 25
GERENCIA DE CONTRATACIONES Y COMERCIALIZACION 115.0 79
ANATOMIA PALOTÓGICA 71.5 31
MANTENIMIENTO 69.0 11
C.I.R.H.E. 49.5 15
GERENCIA DE FINANZAS 44.0 21
FARMACIA AMBULATORIA 42.0 7
DIRECCIÓN ADMINISTRATIVA 10.0 2
ESTERILIZACIÓN 6.0 3
DIRECCIÓN DE INVESTIGACIÓN 4.0 4
NEUROCIENCIAS 4.0 3
GERENCIA CONTABILIDAD 3.5 4
CARDIOLOGIA 3.0 2
ANESTESIOLOGÍA 2.0 1
NA 2.0 1
ggplot(filtroFecha, aes(x = Departamento, y=`Cant. Horas`, fill=`Tipo de hora`))+
  geom_col()+
  theme(axis.text.x = element_text(angle = 90, size = rel(0.5)))+
  ggtitle("Cantidad y tipos de hora por departamento Marzo 2021")

LS0tDQp0aXRsZTogIlJlcG9ydGUgZGUgaG9yYXMgZXh0cmFzIg0KYXV0aG9yOiAiRmFiacOhbiBEZXNpYSINCmRhdGU6ICJNYXJ6byAyMDIxIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0aGVtZTogc3BhY2VsYWINCiAgICBoaWdobGlnaHQ6IHB5Z21lbnRzDQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSkNCmBgYA0KDQoNCmBgYHtyIGxpYnJlcmlhcy1kYXRvcywgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCg0KbGlicmFyeShvcGVueGxzeCkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KHJlYWRyKSMgTGVlciBhcmNoaXZvcyBjc3YNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeSh0aWR5dmVyc2UpICMgTGltcGlhciB5IG1hbmlwdWxhciBkYXRvcw0KbGlicmFyeShndCkgIyBNb2RpZmljYXIgZWwgZm9ybWF0byBkZSBzYWxpZGEgZGUgbGFzIHRhYmxhcw0KbGlicmFyeShsdWJyaWRhdGUpICMgQWp1c3RhciBsb3MgZm9ybWF0b3MgZGUgZmVjaGFzDQpgYGANCmBgYHtyfQ0KDQojIENhcmdhIGRlIGFyY2hpdm9zDQpwYWRyb248LXJlYWQueGxzeCgiUGFkcm9uLnhsc3giKQ0KYWJyaWwyMDIxPC1yZWFkX2NzdjIoIkFicmlsMjAyMS5jc3YiKQ0KbWFyem8yMDIxPC1yZWFkX2NzdjIoIk1hcnpvIDIwMjEuY3N2IikNCnRvdGFsMjAyMTwtcmVhZF9jc3YyKCJCYXNlRXh0cmFzQ29tcGxldG8uY3N2IikNCnRvdGFsMjAyMTwtdG90YWwyMDIxICU+JSANCiAgbGVmdF9qb2luKHBhZHJvbiwgYnk9IkxlZ2FqbyIpDQptYXJ6bzIxY29tcGxldG88LW1hcnpvMjAyMSAlPiUgDQogIGxlZnRfam9pbihwYWRyb24sIGJ5ID0iTGVnYWpvIikNCmFicmlsMjFjb21wbGV0bzwtYWJyaWwyMDIxICU+JSANCiAgbGVmdF9qb2luKHBhZHJvbiwgYnkgPSJMZWdham8iKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhgQ2FudC4gSG9yYXNgKSkNCkNvbXBhcmF0aXZvTWVuc3VhbDIwMjE8LXJlYWQueGxzeCgiQ29tcGFyYXRpdm9NZW5zdWFsMjAyMS54bHN4IikNCg0KYGBgDQoNCiMgKipDb21wYXJhdGl2byBNZW5zdWFsKioNCg0KYGBge3J9DQpndChDb21wYXJhdGl2b01lbnN1YWwyMDIxKSAlPiUgDQogIHRhYl9oZWFkZXIodGl0bGUgPSAiQ29tcGFyYXRpdm8gTWVuc3VhbCIsDQogICAgICAgICAgICAgc3VidGl0bGUgPSAiQcOxbyAyMDIxIikgJT4lIA0KICBjb2xzX2xhYmVsKE1lc2VzID0gIlBlcmlvZG8iLA0KICAgICAgICAgICAgIGBIcnMuNTAlYCA9ICJIcnMgNTAlIiwNCiAgICAgICAgICAgICBgSHJzLjEwMCVgID0gIkhycyAxMDAlIiwgDQogICAgICAgICAgICAgYEhycy4xNTAlYCA9ICJIcnMgMTUwJSIsDQogICAgICAgICAgICAgYEFqdXN0ZS41MCVgID0gIkFqdXN0ZSA1MCUiLA0KICAgICAgICAgICAgIGBBanVzdGUuMTAwJWAgPSAiQWp1c3RlIDEwMCUiLA0KICAgICAgICAgICAgIGBBanVzdGUuMTUwJWAgPSAiQWp1c3RlIDE1MCUiLA0KICAgICAgICAgICAgIFRvdGFsID0gIlRvdGFsIikNCg0KYGBgDQoNCiMgKipUb3RhbCBkZSBob3JhcyBhY3VtdWxhZGFzIGVuIEp1bGlvIDIwMjEqKg0KDQpgYGB7ciBmaWcuaGVpZ2h0PTQsIGZpZy5zaG93PSJob2xkIiwgZmlnLndpZHRoPTQsIG91dC53aWR0aD0iNDAlIn0NCkhvcmFzUG9yVGlwb0p1bGlvPC10b3RhbDIwMjEgJT4lIA0KICBmaWx0ZXIoRmVjaGE+IjIwMjEtMDYtMjAiICYgRmVjaGE8IjIwMjEtMDctMjEiKSAlPiUNCiAgc2VsZWN0KGBUaXBvIGRlIGhvcmFgLCBgQ2FudC4gSG9yYXNgLCBEZXBhcnRhbWVudG8pICU+JSANCiAgZ3JvdXBfYnkoYFRpcG8gZGUgaG9yYWApICU+JQ0KICBzdW1tYXJpc2Uoc3VtPXN1bShgQ2FudC4gSG9yYXNgKSwgbiA9IG4oKSkgJT4lIA0KICBhcnJhbmdlKGRlc2Moc3VtKSkNCg0KSG9yYXNUb3RhbEp1bGlvPC10b3RhbDIwMjEgJT4lIA0KICBmaWx0ZXIoRmVjaGE+IjIwMjEtMDYtMjAiICYgRmVjaGE8IjIwMjEtMDctMjEiKSAlPiUNCiAgc2VsZWN0KGBDYW50LiBIb3Jhc2ApICU+JSANCiAgc3VtbWFyaXNlKHN1bT1zdW0oYENhbnQuIEhvcmFzYCksIG4gPSBuKCkpDQoNCmd0KEhvcmFzUG9yVGlwb0p1bGlvKSAlPiUgDQogIHRhYl9oZWFkZXIodGl0bGUgPSAiQWN1bXVsYWRvIEp1bGlvIHNlZ8O6biBUaXBvIGRlIEhvcmEiLA0KICAgICAgICAgICAgIHN1YnRpdGxlID0gIkHDsW8gMjAyMSIpICU+JSANCiAgY29sc19sYWJlbChgVGlwbyBkZSBob3JhYCA9ICJUaXBvIGRlIGhvcmEiLA0KICAgICAgICAgICAgIHN1bSA9ICJTdW1hIiwNCiAgICAgICAgICAgICBuID0gIkNhc29zIikNCmd0KEhvcmFzVG90YWxKdWxpbykgJT4lIA0KICB0YWJfaGVhZGVyKHRpdGxlID0gIkFjdW11bGFkbyBKdWxpbyIsDQogICAgICAgICAgICAgc3VidGl0bGUgPSAiQcOxbyAyMDIxIikgJT4lIA0KICBjb2xzX2xhYmVsKHN1bSA9ICJTdW1hIiwNCiAgICAgICAgICAgICBuID0gIkNhc29zIikNCg0KYGBgDQpgYGB7cn0NCmhvcmFzNTBqdWxpbzwtdG90YWwyMDIxICU+JSANCiAgZmlsdGVyKEZlY2hhPiIyMDIxLTA2LTIwIiAmIEZlY2hhPCIyMDIxLTA3LTIxIikgJT4lDQogIHNlbGVjdChgVGlwbyBkZSBob3JhYCwgYENhbnQuIEhvcmFzYCwgRGVwYXJ0YW1lbnRvKSAlPiUgDQogIGZpbHRlcihgVGlwbyBkZSBob3JhYD09Ikhycy4gNTAlIikgJT4lIA0KICBzdW1tYXJpc2Uoc3VtKGBDYW50LiBIb3Jhc2ApKQ0KDQpob3JhczEwMGp1bGlvPC10b3RhbDIwMjEgJT4lDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wNi0yMCIgJiBGZWNoYTwiMjAyMS0wNy0yMSIpICU+JSANCiAgc2VsZWN0KGBUaXBvIGRlIGhvcmFgLCBgQ2FudC4gSG9yYXNgLCBEZXBhcnRhbWVudG8pICU+JQ0KICBmaWx0ZXIoYFRpcG8gZGUgaG9yYWA9PSJIcnMuIDEwMCUiKSAlPiUgDQogIHN1bW1hcmlzZShzdW0oYENhbnQuIEhvcmFzYCkpDQoNCmhvcmFzMTUwanVsaW88LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wNi0yMCIgJiBGZWNoYTwiMjAyMS0wNy0yMSIpICU+JSANCiAgc2VsZWN0KGBUaXBvIGRlIGhvcmFgLCBgQ2FudC4gSG9yYXNgLCBEZXBhcnRhbWVudG8pICU+JQ0KICBmaWx0ZXIoYFRpcG8gZGUgaG9yYWA9PSJIcnMuIDE1MCUiKSAlPiUgDQogIHN1bW1hcmlzZShzdW0oYENhbnQuIEhvcmFzYCkpDQogIA0KDQpwb25kZXJhZGFzNTBqdWxpbzwtaG9yYXM1MGp1bGlvKjEuNQ0KcG9uZGVyYWRhczEwMGp1bGlvPC1ob3JhczEwMGp1bGlvKjINCnBvbmRlcmFkYXMxNTBqdWxpbzwtaG9yYXMxNTBqdWxpbyoyLjUNCmBgYA0KDQoqKkxhcyBob3JhcyBwb25kZXJhZGFzIGFsIDUwJSBjb3JyZXNwb25kZW4gYSBgciBwb25kZXJhZGFzNTBqdWxpb2AgaG9yYXMuKioNCg0KKipMYXMgaG9yYXMgcG9uZGVyYWRhcyBhbCAxMDAlIGNvcnJlc3BvbmRlbiBhIGByIHBvbmRlcmFkYXMxMDBqdWxpb2AgaG9yYXMuKioNCg0KKipMYXMgaG9yYXMgcG9uZGVyYWRhcyBhbCAxNTAlIGNvcnJlc3BvbmRlbiBhIGByIHBvbmRlcmFkYXMxNTBqdWxpb2AgaG9yYXMuKioNCg0KIyMgKipBY3VtdWxhZG8gSnVsaW8gcG9yIERlcGFydGFtZW50byoqDQogDQpgYGB7cn0NCkhvcmFzUG9yRGVwYXJ0YW1lbnRvSnVsaW88LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wNi0yMCIgJiBGZWNoYTwiMjAyMS0wNy0yMSIpICU+JQ0KICBzZWxlY3QoYFRpcG8gZGUgaG9yYWAsIGBDYW50LiBIb3Jhc2AsIERlcGFydGFtZW50bykgJT4lIA0KICBncm91cF9ieShEZXBhcnRhbWVudG8pICU+JQ0KICBzdW1tYXJpc2Uoc3VtPXN1bShgQ2FudC4gSG9yYXNgKSwgbiA9IG4oKSkgJT4lIA0KICBhcnJhbmdlKGRlc2Moc3VtKSkNCg0KZ3QoSG9yYXNQb3JEZXBhcnRhbWVudG9KdWxpbykgJT4lIA0KICB0YWJfaGVhZGVyKHRpdGxlID0gIkFjdW11bGFkbyBKdWxpbyBwb3IgZGVwYXJ0YW1lbnRvIiwNCiAgICAgICAgICAgICBzdWJ0aXRsZSA9ICJBw7FvIDIwMjEiKSAlPiUgDQogIGNvbHNfbGFiZWwoRGVwYXJ0YW1lbnRvID0gIkRlcGFydGFtZW50byIsDQogICAgICAgICAgICAgc3VtID0gIlN1bWEiLA0KICAgICAgICAgICAgIG4gPSAiQ2Fzb3MiKQ0KDQpgYGANCg0KYGBge3J9DQpncmFmaWNvSnVsaW88LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wNi0yMCIgJiBGZWNoYTwiMjAyMS0wNy0yMSIpDQoNCmdncGxvdChncmFmaWNvSnVsaW8sIGFlcyh4ID0gRGVwYXJ0YW1lbnRvLCB5PWBDYW50LiBIb3Jhc2AsIGZpbGw9YFRpcG8gZGUgaG9yYWApKSsNCiAgZ2VvbV9jb2woKSsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgc2l6ZSA9IHJlbCgwLjUpKSkrDQogIGdndGl0bGUoIkNhbnRpZGFkIHkgdGlwb3MgZGUgaG9yYSBwb3IgZGVwYXJ0YW1lbnRvIEp1bGlvIDIwMjEiKQ0KYGBgDQoNCiMjICoqVG9wIDEwIGxlZ2Fqb3MgY29uIG3DoXMgaG9yYXMqKg0KIA0KYGBge3J9DQpsb3MxMG1hc1RvdGFsPC10b3RhbDIwMjEgJT4lIA0KICBmaWx0ZXIoRmVjaGE+IjIwMjEtMDYtMjAiICYgRmVjaGE8IjIwMjEtMDctMjEiKSAlPiUNCiAgc2VsZWN0KGBUaXBvIGRlIGhvcmFgLCBgQ2FudC4gSG9yYXNgLCBFbXBsZWFkbykgJT4lIA0KICBncm91cF9ieShFbXBsZWFkbykgJT4lDQogIHN1bW1hcmlzZShzdW09c3VtKGBDYW50LiBIb3Jhc2ApLCBuID0gbigpKSAlPiUgDQogIGFycmFuZ2UgKGRlc2Moc3VtKSkgJT4lIA0KICBzbGljZSgxOjEwKQ0KDQpndChsb3MxMG1hc1RvdGFsKSAlPiUgDQogIHRhYl9oZWFkZXIodGl0bGUgPSAiTGVnYWpvcyBUb3AgMTAgY29uIGhvcmFzICIsDQogICAgICAgICAgICAgc3VidGl0bGUgPSAiSnVsaW8gMjAyMSIpICU+JSANCiAgY29sc19sYWJlbChFbXBsZWFkbyA9ICJDb2xhYm9yYWRvci9hIiwNCiAgICAgICAgICAgICBzdW0gPSAiU3VtYSBkZSBob3JhcyIsDQogICAgICAgICAgICAgbiA9ICJHdWFyZGlhcyIpDQpgYGANCg0KIyAqKkNhbnRpZGFkIGRlIEhvcmFzIHRvdGFsZXMgc2Vnw7puIGTDrWEgZGUgbGEgc2VtYW5hKioNCg0KYGBge3J9DQoNCiMjIyNSZXN1bWVuIHBvciBkaWEgZGUgc2VtYW5hIyMjDQp0b3RhbERpYVNlbWFuYTwtdG90YWwyMDIxICU+JSANCiAgc2VsZWN0KGBEaWEgU2VtLmAsIGBUaXBvIGRlIGhvcmFgLCBgQ2FudC4gSG9yYXNgKSAlPiUgDQogIGdyb3VwX2J5KGBEaWEgU2VtLmApICU+JSANCiAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKGBDYW50LiBIb3Jhc2ApLCBzdW0gPSBzdW0oYENhbnQuIEhvcmFzYCksIG4gPSBuKCkpDQoNCmd0KHRvdGFsRGlhU2VtYW5hKSAlPiUgDQogIHRhYl9oZWFkZXIodGl0bGUgPSAiUmVzdW1lbiBwb3IgZMOtYSBkZSBsYSBzZW1hbmEiLA0KICAgICAgICAgICAgIHN1YnRpdGxlID0gIkHDsW8gMjAyMSIpICU+JSANCiAgY29sc19sYWJlbChgRGlhIFNlbS5gID0gIkRpYSBkZSBsYSBzZW1hbmEiLA0KICAgICAgICAgICAgIG1lYW4gPSAiTWVkaWEiLA0KICAgICAgICAgICAgIHN1bSA9ICJTdW1hIiwNCiAgICAgICAgICAgICBuID0gIkNhc29zIikNCg0KYGBgDQogDQoNCiMgKipUb3RhbCBkZSBob3JhcyBhY3VtdWxhZGFzIGVuIEp1bmlvIDIwMjEqKg0KDQpgYGB7ciBmaWcuaGVpZ2h0PTQsIGZpZy5zaG93PSJob2xkIiwgZmlnLndpZHRoPTQsIG91dC53aWR0aD0iNDAlIn0NCkhvcmFzUG9yVGlwb0p1bmlvPC10b3RhbDIwMjEgJT4lIA0KICBmaWx0ZXIoRmVjaGE+IjIwMjEtMDUtMjAiICYgRmVjaGE8IjIwMjEtMDYtMjEiKSAlPiUNCiAgc2VsZWN0KGBUaXBvIGRlIGhvcmFgLCBgQ2FudC4gSG9yYXNgLCBEZXBhcnRhbWVudG8pICU+JSANCiAgZ3JvdXBfYnkoYFRpcG8gZGUgaG9yYWApICU+JQ0KICBzdW1tYXJpc2Uoc3VtPXN1bShgQ2FudC4gSG9yYXNgKSwgbiA9IG4oKSkgJT4lIA0KICBhcnJhbmdlKGRlc2Moc3VtKSkNCg0KSG9yYXNUb3RhbEp1bmlvPC10b3RhbDIwMjEgJT4lIA0KICBmaWx0ZXIoRmVjaGE+IjIwMjEtMDUtMjAiICYgRmVjaGE8IjIwMjEtMDYtMjEiKSAlPiUNCiAgc2VsZWN0KGBDYW50LiBIb3Jhc2ApICU+JSANCiAgc3VtbWFyaXNlKHN1bT1zdW0oYENhbnQuIEhvcmFzYCksIG4gPSBuKCkpDQoNCmd0KEhvcmFzUG9yVGlwb0p1bmlvKSAlPiUgDQogIHRhYl9oZWFkZXIodGl0bGUgPSAiQWN1bXVsYWRvIEp1bmlvIHNlZ8O6biBUaXBvIGRlIEhvcmEiLA0KICAgICAgICAgICAgIHN1YnRpdGxlID0gIkHDsW8gMjAyMSIpICU+JSANCiAgY29sc19sYWJlbChgVGlwbyBkZSBob3JhYCA9ICJUaXBvIGRlIGhvcmEiLA0KICAgICAgICAgICAgIHN1bSA9ICJTdW1hIiwNCiAgICAgICAgICAgICBuID0gIkNhc29zIikNCmd0KEhvcmFzVG90YWxKdW5pbykgJT4lIA0KICB0YWJfaGVhZGVyKHRpdGxlID0gIkFjdW11bGFkbyBKdW5pbyIsDQogICAgICAgICAgICAgc3VidGl0bGUgPSAiQcOxbyAyMDIxIikgJT4lIA0KICBjb2xzX2xhYmVsKHN1bSA9ICJTdW1hIiwNCiAgICAgICAgICAgICBuID0gIkNhc29zIikNCg0KYGBgDQpgYGB7cn0NCmhvcmFzNTBqdW5pbzwtdG90YWwyMDIxICU+JSANCiAgZmlsdGVyKEZlY2hhPiIyMDIxLTA1LTIwIiAmIEZlY2hhPCIyMDIxLTA2LTIxIikgJT4lDQogIHNlbGVjdChgVGlwbyBkZSBob3JhYCwgYENhbnQuIEhvcmFzYCwgRGVwYXJ0YW1lbnRvKSAlPiUgDQogIGZpbHRlcihgVGlwbyBkZSBob3JhYD09Ikhycy4gNTAlIikgJT4lIA0KICBzdW1tYXJpc2Uoc3VtKGBDYW50LiBIb3Jhc2ApKQ0KDQpob3JhczEwMGp1bmlvPC10b3RhbDIwMjEgJT4lDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wNS0yMCIgJiBGZWNoYTwiMjAyMS0wNi0yMSIpICU+JSANCiAgc2VsZWN0KGBUaXBvIGRlIGhvcmFgLCBgQ2FudC4gSG9yYXNgLCBEZXBhcnRhbWVudG8pICU+JQ0KICBmaWx0ZXIoYFRpcG8gZGUgaG9yYWA9PSJIcnMuIDEwMCUiKSAlPiUgDQogIHN1bW1hcmlzZShzdW0oYENhbnQuIEhvcmFzYCkpDQoNCmhvcmFzMTUwanVuaW88LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wNS0yMCIgJiBGZWNoYTwiMjAyMS0wNi0yMSIpICU+JSANCiAgc2VsZWN0KGBUaXBvIGRlIGhvcmFgLCBgQ2FudC4gSG9yYXNgLCBEZXBhcnRhbWVudG8pICU+JQ0KICBmaWx0ZXIoYFRpcG8gZGUgaG9yYWA9PSJIcnMuIDE1MCUiKSAlPiUgDQogIHN1bW1hcmlzZShzdW0oYENhbnQuIEhvcmFzYCkpDQogIA0KDQpwb25kZXJhZGFzNTBqdW5pbzwtaG9yYXM1MGp1bmlvKjEuNQ0KcG9uZGVyYWRhczEwMGp1bmlvPC1ob3JhczEwMGp1bmlvKjINCnBvbmRlcmFkYXMxNTBqdW5pbzwtaG9yYXMxNTBqdW5pbyoyLjUNCmBgYA0KDQoqKkxhcyBob3JhcyBwb25kZXJhZGFzIGFsIDUwJSBjb3JyZXNwb25kZW4gYSBgciBwb25kZXJhZGFzNTBqdW5pb2AgaG9yYXMuKioNCg0KKipMYXMgaG9yYXMgcG9uZGVyYWRhcyBhbCAxMDAlIGNvcnJlc3BvbmRlbiBhIGByIHBvbmRlcmFkYXMxMDBqdW5pb2AgaG9yYXMuKioNCg0KKipMYXMgaG9yYXMgcG9uZGVyYWRhcyBhbCAxNTAlIGNvcnJlc3BvbmRlbiBhIGByIHBvbmRlcmFkYXMxNTBqdW5pb2AgaG9yYXMuKioNCg0KYGBge3J9DQpncmFmaWNvSnVuaW88LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wNS0yMCIgJiBGZWNoYTwiMjAyMS0wNi0yMSIpDQoNCmdncGxvdChncmFmaWNvSnVuaW8sIGFlcyh4ID0gRGVwYXJ0YW1lbnRvLCB5PWBDYW50LiBIb3Jhc2AsIGZpbGw9YFRpcG8gZGUgaG9yYWApKSsNCiAgZ2VvbV9jb2woKSsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgc2l6ZSA9IHJlbCgwLjUpKSkrDQogIGdndGl0bGUoIkNhbnRpZGFkIHkgdGlwb3MgZGUgaG9yYSBwb3IgZGVwYXJ0YW1lbnRvIEp1bmlvIDIwMjEiKQ0KYGBgDQogDQojIyAqKkFjdW11bGFkbyBKdW5pbyBwb3IgRGVwYXJ0YW1lbnRvKioNCiANCmBgYHtyfQ0KSG9yYXNQb3JEZXBhcnRhbWVudG9KdW5pbzwtdG90YWwyMDIxICU+JSANCiAgZmlsdGVyKEZlY2hhPiIyMDIxLTA1LTIwIiAmIEZlY2hhPCIyMDIxLTA2LTIxIikgJT4lDQogIHNlbGVjdChgVGlwbyBkZSBob3JhYCwgYENhbnQuIEhvcmFzYCwgRGVwYXJ0YW1lbnRvKSAlPiUgDQogIGdyb3VwX2J5KERlcGFydGFtZW50bykgJT4lDQogIHN1bW1hcmlzZShzdW09c3VtKGBDYW50LiBIb3Jhc2ApLCBuID0gbigpKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhzdW0pKQ0KDQpndChIb3Jhc1BvckRlcGFydGFtZW50b0p1bmlvKSAlPiUgDQogIHRhYl9oZWFkZXIodGl0bGUgPSAiQWN1bXVsYWRvIEp1bmlvIHBvciBkZXBhcnRhbWVudG8iLA0KICAgICAgICAgICAgIHN1YnRpdGxlID0gIkHDsW8gMjAyMSIpICU+JSANCiAgY29sc19sYWJlbChEZXBhcnRhbWVudG8gPSAiRGVwYXJ0YW1lbnRvIiwNCiAgICAgICAgICAgICBzdW0gPSAiU3VtYSIsDQogICAgICAgICAgICAgbiA9ICJDYXNvcyIpDQoNCmBgYA0KDQoNCg0KIyAqKlRvdGFsIGRlIGhvcmFzIGFjdW11bGFkYXMgZW4gTWF5byAyMDIxKioNCg0KYGBge3IgZmlnLmhlaWdodD00LCBmaWcuc2hvdz0iaG9sZCIsIGZpZy53aWR0aD00LCBvdXQud2lkdGg9IjQwJSJ9DQpIb3Jhc1BvclRpcG9NYXlvPC10b3RhbDIwMjEgJT4lIA0KICBmaWx0ZXIoRmVjaGE+IjIwMjEtMDQtMjAiICYgRmVjaGE8IjIwMjEtMDUtMjEiKSAlPiUNCiAgc2VsZWN0KGBUaXBvIGRlIGhvcmFgLCBgQ2FudC4gSG9yYXNgLCBEZXBhcnRhbWVudG8pICU+JSANCiAgZ3JvdXBfYnkoYFRpcG8gZGUgaG9yYWApICU+JQ0KICBzdW1tYXJpc2Uoc3VtPXN1bShgQ2FudC4gSG9yYXNgKSwgbiA9IG4oKSkgJT4lIA0KICBhcnJhbmdlKGRlc2Moc3VtKSkNCg0KSG9yYXNUb3RhbE1heW88LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wNC0yMCIgJiBGZWNoYTwiMjAyMS0wNS0yMSIpICU+JQ0KICBzZWxlY3QoYENhbnQuIEhvcmFzYCkgJT4lIA0KICBzdW1tYXJpc2Uoc3VtPXN1bShgQ2FudC4gSG9yYXNgKSwgbiA9IG4oKSkNCg0KZ3QoSG9yYXNQb3JUaXBvTWF5bykgJT4lIA0KICB0YWJfaGVhZGVyKHRpdGxlID0gIkFjdW11bGFkbyBNYXlvIHNlZ8O6biBUaXBvIGRlIEhvcmEiLA0KICAgICAgICAgICAgIHN1YnRpdGxlID0gIkHDsW8gMjAyMSIpICU+JSANCiAgY29sc19sYWJlbChgVGlwbyBkZSBob3JhYCA9ICJUaXBvIGRlIGhvcmEiLA0KICAgICAgICAgICAgIHN1bSA9ICJTdW1hIiwNCiAgICAgICAgICAgICBuID0gIkNhc29zIikNCmd0KEhvcmFzVG90YWxNYXlvKSAlPiUgDQogIHRhYl9oZWFkZXIodGl0bGUgPSAiQWN1bXVsYWRvIE1heW8iLA0KICAgICAgICAgICAgIHN1YnRpdGxlID0gIkHDsW8gMjAyMSIpICU+JSANCiAgY29sc19sYWJlbChzdW0gPSAiU3VtYSIsDQogICAgICAgICAgICAgbiA9ICJDYXNvcyIpDQoNCmBgYA0KYGBge3J9DQpob3JhczUwbWF5bzwtdG90YWwyMDIxICU+JSANCiAgZmlsdGVyKEZlY2hhPiIyMDIxLTA0LTIwIiAmIEZlY2hhPCIyMDIxLTA1LTIxIikgJT4lDQogIHNlbGVjdChgVGlwbyBkZSBob3JhYCwgYENhbnQuIEhvcmFzYCwgRGVwYXJ0YW1lbnRvKSAlPiUgDQogIGZpbHRlcihgVGlwbyBkZSBob3JhYD09Ikhycy4gNTAlIikgJT4lIA0KICBzdW1tYXJpc2Uoc3VtKGBDYW50LiBIb3Jhc2ApKQ0KDQpob3JhczEwMG1heW88LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wNC0yMCIgJiBGZWNoYTwiMjAyMS0wNS0yMSIpICU+JQ0KICBzZWxlY3QoYFRpcG8gZGUgaG9yYWAsIGBDYW50LiBIb3Jhc2AsIERlcGFydGFtZW50bykgJT4lIA0KICBmaWx0ZXIoYFRpcG8gZGUgaG9yYWA9PSJIcnMuIDEwMCUiKSAlPiUgDQogIHN1bW1hcmlzZShzdW0oYENhbnQuIEhvcmFzYCkpDQoNCmhvcmFzMTUwbWF5bzwtdG90YWwyMDIxICU+JSANCiAgZmlsdGVyKEZlY2hhPiIyMDIxLTA0LTIwIiAmIEZlY2hhPCIyMDIxLTA1LTIxDQogIHNlbGVjdChgVGlwbyBkZSBob3JhYCwgYENhbnQuIEhvcmFzYCwgRGVwYXJ0YW1lbnRvKSAlPiUiKSAlPiUgDQogIGZpbHRlcihgVGlwbyBkZSBob3JhYD09Ikhycy4gMTUwJSIpICU+JSANCiAgc3VtbWFyaXNlKHN1bShgQ2FudC4gSG9yYXNgKSkNCiAgDQoNCnBvbmRlcmFkYXM1MG1heW88LWhvcmFzNTBtYXlvKjEuNQ0KcG9uZGVyYWRhczEwMG1heW88LWhvcmFzMTAwbWF5byoyDQpwb25kZXJhZGFzMTUwbWF5bzwtaG9yYXMxNTBtYXlvKjIuNQ0KYGBgDQoNCioqTGFzIGhvcmFzIHBvbmRlcmFkYXMgYWwgNTAlIGNvcnJlc3BvbmRlbiBhIGByIHBvbmRlcmFkYXM1MG1heW9gIGhvcmFzLioqDQoNCioqTGFzIGhvcmFzIHBvbmRlcmFkYXMgYWwgMTAwJSBjb3JyZXNwb25kZW4gYSBgciBwb25kZXJhZGFzMTAwbWF5b2AgaG9yYXMuKioNCg0KKipMYXMgaG9yYXMgcG9uZGVyYWRhcyBhbCAxNTAlIGNvcnJlc3BvbmRlbiBhIGByIHBvbmRlcmFkYXMxNTBtYXlvYCBob3Jhcy4qKg0KYGBge3J9DQpncmFmaWNvTWF5bzwtdG90YWwyMDIxICU+JSANCiAgZmlsdGVyKEZlY2hhPiIyMDIxLTA0LTIwIiAmIEZlY2hhPCIyMDIxLTA1LTIxIikNCg0KZ2dwbG90KGdyYWZpY29NYXlvLCBhZXMoeCA9IERlcGFydGFtZW50bywgeT1gQ2FudC4gSG9yYXNgLCBmaWxsPWBUaXBvIGRlIGhvcmFgKSkrDQogIGdlb21fY29sKCkrDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHNpemUgPSByZWwoMC41KSkpKw0KICBnZ3RpdGxlKCJDYW50aWRhZCB5IHRpcG9zIGRlIGhvcmEgcG9yIGRlcGFydGFtZW50byBNYXlvIDIwMjEiKQ0KYGBgDQogDQojIyAqKkFjdW11bGFkbyBNYXlvIHBvciBEZXBhcnRhbWVudG8qKg0KIA0KYGBge3J9DQpIb3Jhc1BvckRlcGFydGFtZW50b01heW88LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wNC0yMCIgJiBGZWNoYTwiMjAyMS0wNS0yMSIpICU+JQ0KICBzZWxlY3QoYFRpcG8gZGUgaG9yYWAsIGBDYW50LiBIb3Jhc2AsIERlcGFydGFtZW50bykgJT4lIA0KICBncm91cF9ieShEZXBhcnRhbWVudG8pICU+JQ0KICBzdW1tYXJpc2Uoc3VtPXN1bShgQ2FudC4gSG9yYXNgKSwgbiA9IG4oKSkgJT4lIA0KICBhcnJhbmdlKGRlc2Moc3VtKSkNCg0KZ3QoSG9yYXNQb3JEZXBhcnRhbWVudG9NYXlvKSAlPiUgDQogIHRhYl9oZWFkZXIodGl0bGUgPSAiQWN1bXVsYWRvIE1heW8gcG9yIGRlcGFydGFtZW50byIsDQogICAgICAgICAgICAgc3VidGl0bGUgPSAiQcOxbyAyMDIxIikgJT4lIA0KICBjb2xzX2xhYmVsKERlcGFydGFtZW50byA9ICJEZXBhcnRhbWVudG8iLA0KICAgICAgICAgICAgIHN1bSA9ICJTdW1hIiwNCiAgICAgICAgICAgICBuID0gIkNhc29zIikNCg0KYGBgDQoNCg0KIyAqKlRvdGFsIGRlIGhvcmFzIGFjdW11bGFkYXMgZW4gQWJyaWwgMjAyMSoqDQoNCmBgYHtyIG91dC53aWR0aD0iNDAlIiwgZmlnLnNob3c9ImhvbGQifQ0KSG9yYXNQb3JUaXBvQWJyaWw8LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wMy0yMCIgJiBGZWNoYTwiMjAyMS0wNC0yMSIpICU+JQ0KICBzZWxlY3QoYFRpcG8gZGUgaG9yYWAsIGBDYW50LiBIb3Jhc2AsIERlcGFydGFtZW50bykgJT4lIA0KICBncm91cF9ieShgVGlwbyBkZSBob3JhYCkgJT4lDQogIHN1bW1hcmlzZShzdW09c3VtKGBDYW50LiBIb3Jhc2ApLCBuID0gbigpKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhzdW0pKQ0KDQpIb3Jhc1RvdGFsYWJyaWw8LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wMy0yMCIgJiBGZWNoYTwiMjAyMS0wNC0yMSIpICU+JQ0KICBzZWxlY3QoYENhbnQuIEhvcmFzYCkgJT4lIA0KICBzdW1tYXJpc2Uoc3VtPXN1bShgQ2FudC4gSG9yYXNgKSwgbiA9IG4oKSkNCg0KZ3QoSG9yYXNQb3JUaXBvQWJyaWwpICU+JSANCiAgdGFiX2hlYWRlcih0aXRsZSA9ICJBY3VtdWxhZG8gQWJyaWwgc2Vnw7puIFRpcG8gZGUgSG9yYSIsDQogICAgICAgICAgICAgc3VidGl0bGUgPSAiQcOxbyAyMDIxIikgJT4lIA0KICBjb2xzX2xhYmVsKGBUaXBvIGRlIGhvcmFgID0gIlRpcG8gZGUgaG9yYSIsDQogICAgICAgICAgICAgc3VtID0gIlN1bWEiLA0KICAgICAgICAgICAgIG4gPSAiQ2Fzb3MiKQ0KZ3QoSG9yYXNUb3RhbGFicmlsKSAlPiUgDQogIHRhYl9oZWFkZXIodGl0bGUgPSAiQWN1bXVsYWRvIEFicmlsIiwNCiAgICAgICAgICAgICBzdWJ0aXRsZSA9ICJBw7FvIDIwMjEiKSAlPiUgDQogIGNvbHNfbGFiZWwoc3VtID0gIlN1bWEiLA0KICAgICAgICAgICAgIG4gPSAiQ2Fzb3MiKQ0KDQpgYGANCmBgYHtyfQ0KaG9yYXM1MGFicmlsPC10b3RhbDIwMjEgJT4lIA0KICBmaWx0ZXIoRmVjaGE+IjIwMjEtMDMtMjAiICYgRmVjaGE8IjIwMjEtMDQtMjEiKSAlPiUNCiAgc2VsZWN0KGBUaXBvIGRlIGhvcmFgLCBgQ2FudC4gSG9yYXNgLCBEZXBhcnRhbWVudG8pICU+JSANCiAgZmlsdGVyKGBUaXBvIGRlIGhvcmFgPT0iSHJzLiA1MCUiKSAlPiUgDQogIHN1bW1hcmlzZShzdW0oYENhbnQuIEhvcmFzYCkpDQoNCmhvcmFzMTAwYWJyaWw8LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wMy0yMCIgJiBGZWNoYTwiMjAyMS0wNC0yMSIpICU+JQ0KICBzZWxlY3QoYFRpcG8gZGUgaG9yYWAsIGBDYW50LiBIb3Jhc2AsIERlcGFydGFtZW50bykgJT4lIA0KICBmaWx0ZXIoYFRpcG8gZGUgaG9yYWA9PSJIcnMuIDEwMCUiKSAlPiUgDQogIHN1bW1hcmlzZShzdW0oYENhbnQuIEhvcmFzYCkpDQoNCmhvcmFzMTUwYWJyaWw8LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wMy0yMCIgJiBGZWNoYTwiMjAyMS0wNC0yMQ0KICBzZWxlY3QoYFRpcG8gZGUgaG9yYWAsIGBDYW50LiBIb3Jhc2AsIERlcGFydGFtZW50bykgJT4lIikgJT4lIA0KICBmaWx0ZXIoYFRpcG8gZGUgaG9yYWA9PSJIcnMuIDE1MCUiKSAlPiUgDQogIHN1bW1hcmlzZShzdW0oYENhbnQuIEhvcmFzYCkpDQogIA0KDQpwb25kZXJhZGFzNTBhYnJpbDwtaG9yYXM1MGFicmlsKjEuNQ0KcG9uZGVyYWRhczEwMGFicmlsPC1ob3JhczEwMGFicmlsKjINCnBvbmRlcmFkYXMxNTBhYnJpbDwtaG9yYXMxNTBhYnJpbCoyLjUNCmBgYA0KDQoqKkxhcyBob3JhcyBwb25kZXJhZGFzIGFsIDUwJSBjb3JyZXNwb25kZW4gYSBgciBwb25kZXJhZGFzNTBhYnJpbGAgaG9yYXMuKioNCg0KKipMYXMgaG9yYXMgcG9uZGVyYWRhcyBhbCAxMDAlIGNvcnJlc3BvbmRlbiBhIGByIHBvbmRlcmFkYXMxMDBhYnJpbGAgaG9yYXMuKioNCg0KKipMYXMgaG9yYXMgcG9uZGVyYWRhcyBhbCAxNTAlIGNvcnJlc3BvbmRlbiBhIGByIHBvbmRlcmFkYXMxNTBhYnJpbGAgaG9yYXMuKioNCmBgYHtyfQ0KZ3JhZmljb0FicmlsPC10b3RhbDIwMjEgJT4lIA0KICBmaWx0ZXIoRmVjaGE+IjIwMjEtMDMtMjAiICYgRmVjaGE8IjIwMjEtMDQtMjEiKQ0KDQpnZ3Bsb3QoZ3JhZmljb0FicmlsLCBhZXMoeCA9IERlcGFydGFtZW50bywgeT1gQ2FudC4gSG9yYXNgLCBmaWxsPWBUaXBvIGRlIGhvcmFgKSkrDQogIGdlb21fY29sKCkrDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHNpemUgPSByZWwoMC41KSkpKw0KICBnZ3RpdGxlKCJDYW50aWRhZCB5IHRpcG9zIGRlIGhvcmEgcG9yIGRlcGFydGFtZW50byBBYnJpbCAyMDIxIikNCmBgYA0KIA0KIyMgKipBY3VtdWxhZG8gQWJyaWwgcG9yIERlcGFydGFtZW50byoqDQogDQpgYGB7cn0NCkhvcmFzUG9yRGVwYXJ0YW1lbnRvQWJyaWw8LXRvdGFsMjAyMSAlPiUgDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wMy0yMCIgJiBGZWNoYTwiMjAyMS0wNC0yMSIpICU+JQ0KICBzZWxlY3QoYFRpcG8gZGUgaG9yYWAsIGBDYW50LiBIb3Jhc2AsIERlcGFydGFtZW50bykgJT4lIA0KICBncm91cF9ieShEZXBhcnRhbWVudG8pICU+JQ0KICBzdW1tYXJpc2Uoc3VtPXN1bShgQ2FudC4gSG9yYXNgKSwgbiA9IG4oKSkgJT4lIA0KICBhcnJhbmdlKGRlc2Moc3VtKSkNCg0KZ3QoSG9yYXNQb3JEZXBhcnRhbWVudG9BYnJpbCkgJT4lIA0KICB0YWJfaGVhZGVyKHRpdGxlID0gIkFjdW11bGFkbyBBYnJpbCBwb3IgZGVwYXJ0YW1lbnRvIiwNCiAgICAgICAgICAgICBzdWJ0aXRsZSA9ICJBw7FvIDIwMjEiKSAlPiUgDQogIGNvbHNfbGFiZWwoRGVwYXJ0YW1lbnRvID0gIkRlcGFydGFtZW50byIsDQogICAgICAgICAgICAgc3VtID0gIlN1bWEiLA0KICAgICAgICAgICAgIG4gPSAiQ2Fzb3MiKQ0KDQpgYGANCg0KDQojICoqTWFyem8gMjAyMSoqDQpgYGB7cn0NCmZpbHRyb0ZlY2hhPC10b3RhbDIwMjEgJT4lDQogIGZpbHRlcihGZWNoYT4iMjAyMS0wMi0yMCIgJiBGZWNoYTwiMjAyMS0wMy0yMSIpICU+JQ0KICBhcnJhbmdlKEZlY2hhKQ0KDQptYXJ6bzIxcG9yRGVwYXJ0YW1lbnRvPC10b3RhbDIwMjEgJT4lIA0KICBmaWx0ZXIoRmVjaGE+IjIwMjEtMDItMjAiICYgRmVjaGE8IjIwMjEtMDMtMjEiKSAlPiUNCiAgc2VsZWN0KGBUaXBvIGRlIGhvcmFgLCBgQ2FudC4gSG9yYXNgLCBEZXBhcnRhbWVudG8pICU+JSANCiAgZ3JvdXBfYnkoRGVwYXJ0YW1lbnRvKSAlPiUNCiAgc3VtbWFyaXNlKHN1bT1zdW0oYENhbnQuIEhvcmFzYCksIG4gPSBuKCkpICU+JSANCiAgYXJyYW5nZShkZXNjKHN1bSkpDQoNCmd0KG1hcnpvMjFwb3JEZXBhcnRhbWVudG8pICU+JSANCiAgdGFiX2hlYWRlcih0aXRsZSA9ICJIb3JhcyB0b3RhbGVzIHBvciBkZXBhcnRhbWVudG8iLA0KICAgICAgICAgICAgIHN1YnRpdGxlID0gIk1hcnpvIDIwMjEiKSAlPiUgDQogIGNvbHNfbGFiZWwoRGVwYXJ0YW1lbnRvID0gIkRlcGFydGFtZW50byIsDQogICAgICAgICAgICAgc3VtID0gIkhvcmFzIFRvdGFsZXMiLA0KICAgICAgICAgICAgIG4gPSAiQ2Fzb3MiKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KGZpbHRyb0ZlY2hhLCBhZXMoeCA9IERlcGFydGFtZW50bywgeT1gQ2FudC4gSG9yYXNgLCBmaWxsPWBUaXBvIGRlIGhvcmFgKSkrDQogIGdlb21fY29sKCkrDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHNpemUgPSByZWwoMC41KSkpKw0KICBnZ3RpdGxlKCJDYW50aWRhZCB5IHRpcG9zIGRlIGhvcmEgcG9yIGRlcGFydGFtZW50byBNYXJ6byAyMDIxIikNCmBgYA0K