Entregable 2.4

Exportar bases de datos

bd_prod <- read.csv("/Users/georginamartinez/Documents/Tec/Séptimo Semestre/Analítica para negocios, de los datos a decisiones/Base de datos FORM/FORM_Producción_C.csv")
bd_merma <- read.csv("/Users/georginamartinez/Documents/Tec/Séptimo Semestre/Analítica para negocios, de los datos a decisiones/Base de datos FORM/FORM - Merma1.csv")
bd_scrap <- read.csv("/Users/georginamartinez/Documents/Tec/Séptimo Semestre/Analítica para negocios, de los datos a decisiones/Base de datos FORM/FORM - Scrap.csv")

a. FORM – Producción

1) ¿Cuántas variables y cuántos registros tiene la base de datos?

La base de datos cuenta con 17 variables y 2568 registros.

2) Clasificación de cada variable en cualitativa, cuantitativa discreta o cuantitativa continua

Variable <-c("No.", "Cliente","ID Form","Producto", "Fecha", "Piezas Prog", "Tiempo Min", "Hora Fin", "Estación Arranque", "Laminas procesadas", "Inicio Sep up", "Fin Inicio Sep up", "Inicio proceso", "Fin de proceso", "Tiempo calidad", "Tiempo materiales", "Mermas máquinas")
Tipo <-c("Cuantitativa (discreta)", "Cualitativa (nominal)", "Cualitativa (nominal)", "Cualitativa (nominal)", "Cuantitativa (continua)", "Cuantitativa (discreta)", "Cuantitativa (discreta)", "Cuantitativa (continua)",  "Cuantitativa (continua)", "Cuantitativa (discreta)",  "Cuantitativa (continua)",  "Cuantitativa (continua)",  "Cuantitativa (continua)",  "Cuantitativa (continua)", "Cuantitativa (discreta)", "Cuantitativa (discreta)", "Cuantitativa (discreta)")
table<-data.frame(Variable, Tipo)
knitr::kable(table)
Variable Tipo
No. Cuantitativa (discreta)
Cliente Cualitativa (nominal)
ID Form Cualitativa (nominal)
Producto Cualitativa (nominal)
Fecha Cuantitativa (continua)
Piezas Prog Cuantitativa (discreta)
Tiempo Min Cuantitativa (discreta)
Hora Fin Cuantitativa (continua)
Estación Arranque Cuantitativa (continua)
Laminas procesadas Cuantitativa (discreta)
Inicio Sep up Cuantitativa (continua)
Fin Inicio Sep up Cuantitativa (continua)
Inicio proceso Cuantitativa (continua)
Fin de proceso Cuantitativa (continua)
Tiempo calidad Cuantitativa (discreta)
Tiempo materiales Cuantitativa (discreta)
Mermas máquinas Cuantitativa (discreta)

3) Elige la escala de medición de cada variable.

Variable <-c("No.", "Cliente","ID Form","Producto", "Fecha", "Piezas Prog", "Tiempo Min", "Hora Fin", "Estación Arranque", "Laminas procesadas*", "Inicio Sep up", "Fin Inicio Sep up", "Inicio proceso", "Fin de proceso", "Tiempo calidad", "Tiempo materiales", "Mermas máquinas")

Medicion <-c("Razón", "Nominal", "Nominal", "Nominal", "Intervalo", "Razón", "Razón", "Intervalo","Intervalo", "Razón", "Intervalo", "Intervalo", "Intervalo", "Intervalo", "Razón", "Razón", "Razón")

table2<-data.frame(Variable, Medicion)
knitr::kable(table2)
Variable Medicion
No. Razón
Cliente Nominal
ID Form Nominal
Producto Nominal
Fecha Intervalo
Piezas Prog Razón
Tiempo Min Razón
Hora Fin Intervalo
Estación Arranque Intervalo
Laminas procesadas* Razón
Inicio Sep up Intervalo
Fin Inicio Sep up Intervalo
Inicio proceso Intervalo
Fin de proceso Intervalo
Tiempo calidad Razón
Tiempo materiales Razón
Mermas máquinas Razón

4) Aplica al menos 2 técnicas de limpieza de bases de datos y explícalas brevemente, ¿por qué realizaste esas técnicas?

Se realizó una limpia previa a la base de datos debido a que no se podía manejar en R, ya que el formato en que se encontraba no permitía que R pudiera entender cuales eran las variables de nuestra base de datos, después pasamos a las técnicas que podemos utilizar en R, como lo fue la técnica de Remover valores irrelevantes, para sacar provecho de la base de datos, solo necesitamos de cinco variables valiosas que son: Cliente, Piezas programadas, Tiempo mínimo, Láminas procesadas y Tiempo Calidad, también borramos renglones que tuvieran valor 0, la segunda técnica fue Valores Faltantes, donde quitamos todos los NA’s de la base de datos y por último la tercera tecnica utilizada fue Convertir tipos de datos que convertimos la fecha de caracter a entero.

#### Técnica. Remover valores irrelevantes

#### Eliminar columnas
summary(bd_prod)
##        no          cliente            id.form            producto        
##  Min.   :  1.0   Length:2568        Length:2568        Length:2568       
##  1st Qu.: 25.0   Class :character   Class :character   Class :character  
##  Median : 50.0   Mode  :character   Mode  :character   Mode  :character  
##  Mean   : 50.8                                                           
##  3rd Qu.: 75.0                                                           
##  Max.   :121.0                                                           
##  NA's   :8                                                               
##     fecha            piezas.prog     tiempo.min          hora.fin        
##  Length:2568        Min.   :    1   Length:2568        Length:2568       
##  Class :character   1st Qu.:  100   Class :character   Class :character  
##  Mode  :character   Median :  192   Mode  :character   Mode  :character  
##                     Mean   : 1744                                        
##                     3rd Qu.:  240                                        
##                     Max.   :36625                                        
##                     NA's   :1                                            
##  estacion_arranque  laminas_procesadas inicio_sep_up       fin_sep_up       
##  Length:2568        Min.   :   0.0     Length:2568        Length:2568       
##  Class :character   1st Qu.:   0.5     Class :character   Class :character  
##  Mode  :character   Median :  60.0     Mode  :character   Mode  :character  
##                     Mean   : 108.9                                          
##                     3rd Qu.: 200.0                                          
##                     Max.   :1125.0                                          
##                     NA's   :593                                             
##  inicio_proceso     fin_proceso        tiempo_calidad     tiempo_materiales
##  Length:2568        Length:2568        Length:2568        Min.   : 0.000   
##  Class :character   Class :character   Class :character   1st Qu.: 0.000   
##  Mode  :character   Mode  :character   Mode  :character   Median : 0.000   
##                                                           Mean   : 2.535   
##                                                           3rd Qu.: 1.000   
##                                                           Max.   :48.000   
##                                                           NA's   :2243     
##  mermas_maquinas 
##  Min.   : 0.000  
##  1st Qu.: 0.000  
##  Median : 1.000  
##  Mean   : 1.626  
##  3rd Qu.: 1.000  
##  Max.   :50.000  
##  NA's   :2461
bd_prod2 <- bd_prod
bd_prod2 <- subset (bd_prod2, select = -c (no, id.form, producto, hora.fin, estacion_arranque, inicio_sep_up, fin_sep_up, inicio_proceso, fin_proceso, tiempo_materiales, mermas_maquinas))

#### Eliminar renglones
bd_prod2 <- bd_prod2[bd_prod2$tiempo.min > 0, ]

#### Técnica. Valores faltantes

#### ¿Cuántos NA tengo en la base de datos?
sum(is.na(bd_prod2))
## [1] 244
sum(is.na(bd_prod))
## [1] 5306
#### ¿Cuántos NA tengo por variable?
sapply(bd_prod2, function(x) sum(is.na(x)))
##            cliente              fecha        piezas.prog         tiempo.min 
##                  0                  0                  0                  0 
## laminas_procesadas     tiempo_calidad 
##                244                  0
sapply(bd_prod, function(x) sum(is.na(x)))  
##                 no            cliente            id.form           producto 
##                  8                  0                  0                  0 
##              fecha        piezas.prog         tiempo.min           hora.fin 
##                  0                  1                  0                  0 
##  estacion_arranque laminas_procesadas      inicio_sep_up         fin_sep_up 
##                  0                593                  0                  0 
##     inicio_proceso        fin_proceso     tiempo_calidad  tiempo_materiales 
##                  0                  0                  0               2243 
##    mermas_maquinas 
##               2461
?sapply  

#### Borrar todos los registros NA de una tabla
bd_prod3 <- bd_prod2
bd_prod3 <- na.omit(bd_prod3)
summary(bd_prod3)
##    cliente             fecha            piezas.prog     tiempo.min       
##  Length:1584        Length:1584        Min.   :    1   Length:1584       
##  Class :character   Class :character   1st Qu.:  100   Class :character  
##  Mode  :character   Mode  :character   Median :  200   Mode  :character  
##                                        Mean   : 1875                     
##                                        3rd Qu.:  208                     
##                                        Max.   :36625                     
##  laminas_procesadas tiempo_calidad    
##  Min.   :   0.0     Length:1584       
##  1st Qu.:  37.0     Class :character  
##  Median : 101.0     Mode  :character  
##  Mean   : 132.6                       
##  3rd Qu.: 202.0                       
##  Max.   :1125.0
#### Técnica. Convertir tipos de datos

#### Convertir de caracter a fecha
bd_prod4 <- bd_prod3
bd_prod4$fecha <- as.Date(bd_prod4$fecha, format ="%d/%m/%y")

bd_prod4 <- bd_prod3
bd_prod4$tiempo.min<- substr(bd_prod4$tiempo.min, start = 1, stop = 2)


bd_prod4$tiempo.min <- as.integer(bd_prod4$tiempo.min)  
## Warning: NAs introduced by coercion
str(bd_prod4)  
## 'data.frame':    1584 obs. of  6 variables:
##  $ cliente           : chr  "VARROC" "VARROC" "VARROC" "DENSO" ...
##  $ fecha             : chr  "01/08/22" "01/08/22" "01/08/22" "01/08/22" ...
##  $ piezas.prog       : int  199 57 68 192 192 400 80 104 104 160 ...
##  $ tiempo.min        : int  15 10 10 15 15 30 15 15 15 20 ...
##  $ laminas_procesadas: int  201 116 69 49 49 801 41 53 53 55 ...
##  $ tiempo_calidad    : chr  "1" "1" "1" "1" ...
##  - attr(*, "na.action")= 'omit' Named int [1:244] 77 78 79 80 81 82 99 101 102 104 ...
##   ..- attr(*, "names")= chr [1:244] "106" "107" "108" "109" ...

Exportar base de datos

bd_prod5 <- bd_prod4
write.csv(bd_prod5, file ="producción_FORM_limpia.csv", row.names = FALSE)

5) Realizar un análisis estadístico descriptivo en el que logres destacar el conjunto de datos, que apoyan a la empresa a mejorar su operación.

Librerías requeridas

library(foreign)
library(dplyr)        # data manipulation 
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(forcats)      # to work with categorical variables
library(ggplot2)      # data visualization 
library(janitor)      # data exploration and cleaning 
## 
## Attaching package: 'janitor'
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test
# install.packages("psych")
library(corrplot)     # correlation plots
## corrplot 0.92 loaded
library(lmtest)       # diagnostic checks - linear regression analysis 
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(car)          # diagnostic checks - linear regression analysis
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode

Tabla de frecuencia

Se generan las tablas de frecuencias de las variables CUALITATIVAS.
Cliente <-table(bd_prod5$cliente)
Cliente
## 
##                DENSO                HELLA MERIDIAN LIGHTWEIGHT 
##                  166                   61                   31 
##           STABILUS 1           STABILUS 3                 TRMX 
##                  507                  239                  221 
##               VARROC              YANFENG 
##                  129                  230
knitr::kable(Cliente)
Var1 Freq
DENSO 166
HELLA 61
MERIDIAN LIGHTWEIGHT 31
STABILUS 1 507
STABILUS 3 239
TRMX 221
VARROC 129
YANFENG 230

Tablas cruzada

cruzadaP1 <-table(bd_prod5$cliente,bd_prod5$laminas_procesadas)
knitr::kable(cruzadaP1)
0 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 64 65 66 67 69 70 73 74 75 76 77 78 79 80 81 82 83 84 85 86 89 90 91 92 95 97 98 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 116 118 119 120 121 122 123 124 126 130 132 134 136 137 138 139 140 141 143 144 146 150 151 152 153 154 155 156 158 160 161 162 163 164 165 166 167 170 171 173 174 178 180 181 184 185 187 190 193 194 196 197 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 215 216 219 225 227 228 229 233 236 240 241 242 243 246 247 248 252 253 278 286 298 300 301 302 303 304 306 308 310 313 322 326 328 330 335 336 339 344 347 352 354 356 358 368 370 375 376 377 378 380 384 386 387 390 391 396 398 399 400 401 402 403 404 405 406 407 408 410 412 414 426 436 437 438 439 450 452 456 502 503 505 519 572 577 582 584 600 602 605 608 609 688 740 741 752 766 772 773 789 790 799 801 802 1022 1124 1125
DENSO 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 1 0 0 0 1 2 0 0 0 0 9 0 0 2 0 1 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 28 0 1 6 1 1 0 0 5 0 0 0 0 0 0 0 16 0 0 0 0 0 0 2 0 0 0 3 0 1 0 0 0 0 0 0 0 8 0 0 0 1 0 0 0 0 0 5 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 0 2 0 0 0 1 2 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 2 5 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
HELLA 12 0 1 0 0 1 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 3 1 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 7 4 6 4 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
MERIDIAN LIGHTWEIGHT 1 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 1 0 2 1 0 1 0 0 0 0 1 0 2 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
STABILUS 1 29 0 0 0 2 0 0 0 2 1 14 1 5 1 1 2 4 0 0 1 7 0 0 0 3 5 10 1 1 3 2 0 1 2 1 3 3 0 1 5 4 1 0 4 1 1 0 6 25 19 2 1 4 1 0 0 1 2 2 0 0 1 0 3 0 0 1 2 1 2 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 8 9 42 9 7 2 0 1 0 0 5 1 1 0 0 0 0 0 0 1 1 0 1 2 1 0 1 0 0 0 0 1 0 1 0 1 1 2 5 1 2 1 0 0 0 1 0 2 0 1 1 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 2 1 7 9 79 22 8 1 3 0 1 0 0 0 0 0 0 5 1 1 0 0 0 0 1 2 0 0 0 1 0 0 0 1 1 0 0 5 1 3 0 0 0 0 0 1 0 1 1 1 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 0 4 2 5 1 3 1 1 0 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
STABILUS 3 37 0 1 1 0 1 0 1 1 1 6 2 4 0 0 1 1 0 0 0 0 2 0 0 9 7 2 0 0 1 1 10 1 1 3 2 1 0 1 1 0 0 0 0 0 0 0 1 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 19 32 13 1 0 0 0 0 0 1 1 1 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 2 1 0 0 1 1 1 5 5 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 9 3 0 2 0 0 0 0 0 0 1 1 1 0 0 0 1 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
TRMX 32 2 0 0 1 1 0 0 1 0 0 0 0 0 1 0 0 0 0 2 1 0 0 0 0 1 1 3 2 1 0 1 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 23 15 4 1 0 1 2 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 1 1 0 0 0 0 0 0 0 2 0 0 0 0 0 15 7 17 4 2 0 0 0 0 2 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 1 1 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 5 2 12 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
VARROC 6 1 0 0 2 0 1 1 1 1 3 2 2 0 1 3 2 1 0 2 5 1 1 1 1 2 0 0 2 0 3 1 0 0 0 0 0 0 1 2 0 0 0 0 0 1 0 1 5 1 0 0 0 0 0 0 0 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 1 0 1 2 1 0 0 0 1 0 1 0 1 4 3 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 3 2 3 1 1 0 0 1 2 1 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 0 4 2 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 2 1 1 0 1 0 2 1 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
YANFENG 30 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 0 1 1 1 0 0 0 1 6 0 0 0 1 1 2 0 1 1 0 1 0 2 0 0 1 5 5 1 0 0 0 0 4 1 1 0 1 1 1 1 0 0 0 2 5 0 0 6 0 0 0 0 2 1 1 0 0 2 0 1 0 2 2 0 0 2 3 0 0 0 3 1 1 0 1 1 0 0 0 0 2 0 1 0 0 3 0 0 0 1 0 0 2 0 1 2 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 2 0 0 0 0 2 1 0 1 0 0 0 0 0 2 0 0 2 2 0 2 5 2 0 1 2 1 1 3 0 1 0 0 0 0 0 0 1 0 3 0 2 0 0 1 0 1 0 1 1 0 0 0 1 0 0 0 1 0 0 0 2 0 0 4 0 0 0 0 2 0 1 1 3 2 1 0 1 1 1 1 0 1 0 1 1 1 2 1 1 0 0 2 2 3 1 0 0 1 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 1 2 1 1 2 1 1 1 1 1 1 1 2 0 0 0
cruzadaP2 <-table(bd_prod5$tiempo.min,bd_prod5$laminas_procesadas)
knitr::kable(cruzadaP2)
0 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 64 65 66 67 69 70 73 74 75 76 77 78 79 80 81 82 83 84 85 86 89 90 91 92 95 97 98 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 116 118 119 120 121 122 123 124 126 130 132 134 136 137 138 139 140 141 143 144 146 150 151 152 153 154 155 156 158 160 161 162 163 164 165 166 167 170 171 173 174 178 180 181 184 185 187 190 193 194 196 197 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 215 216 219 225 227 228 229 233 236 240 241 242 243 246 247 248 252 253 278 286 298 300 301 302 303 304 306 308 310 313 322 326 328 330 335 336 339 344 347 352 354 356 358 368 370 375 376 377 378 380 384 386 387 390 391 396 398 399 400 401 402 403 404 405 406 407 408 410 412 414 426 436 437 438 439 450 452 456 502 503 505 519 572 577 582 584 600 602 605 608 609 688 740 741 752 766 772 773 789 790 799 801 802 1022 1124 1125
5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
10 26 3 2 1 4 3 1 2 5 2 19 4 10 1 3 6 8 2 1 5 19 1 1 2 3 8 12 1 3 3 6 6 5 3 2 4 5 9 3 8 3 1 0 5 5 2 0 8 29 7 3 1 1 1 1 2 1 1 7 1 1 1 5 1 1 6 0 0 0 0 0 2 0 1 0 0 1 0 0 0 0 1 0 1 3 1 1 6 4 8 1 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
15 10 0 0 0 1 0 0 0 0 1 7 1 3 1 1 0 0 0 0 0 1 2 0 0 7 6 7 3 1 2 2 7 0 0 3 1 8 1 1 3 0 1 1 4 1 0 12 20 18 11 3 1 1 1 0 1 1 1 11 0 0 2 0 3 0 0 6 1 1 2 0 3 0 0 1 1 0 0 1 0 1 0 1 0 0 0 0 3 4 11 0 1 0 0 0 0 0 4 1 1 0 1 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 2 3 4 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
20 26 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 3 1 1 0 1 0 1 1 0 0 1 0 1 0 1 2 2 0 1 0 0 2 5 0 0 3 0 0 3 0 0 0 0 1 11 1 1 5 1 2 0 0 0 1 0 0 3 1 0 0 13 0 0 0 0 0 1 1 0 1 1 3 0 1 4 23 14 6 0 1 1 0 2 0 1 1 0 0 0 1 0 6 2 2 1 2 0 1 2 0 3 1 1 0 6 1 2 0 0 0 0 4 2 2 1 0 1 0 1 1 3 1 0 1 1 0 0 0 0 1 0 1 0 0 0 1 0 0 1 1 0 0 0 5 0 2 1 2 0 0 0 2 0 0 0 0 0 0 0 1 0 1 2 0 2 0 2 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0
25 70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 3 4 4 0 0 0 1 0 0 0 0 2 0 0 0 0 1 0 0 0 0 0 0 0 3 1 1 3 1 0 1 0 0 0 0 0 0 0 1 0 18 5 13 0 2 2 0 0 8 0 0 0 0 0 0 0 0 0 1 3 0 0 0 0 0 0 1 0 2 0 0 0 0 0 2 1 0 0 0 0 0 0 2 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 1 1 2 1 6 11 106 58 28 8 2 1 2 1 1 1 1 1 0 0 0 1 1 3 0 0 1 2 1 2 6 1 1 0 3 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 1 2 1 2 0 1 1 0 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
30 4 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 1 5 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
35 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 3 10 5 1 0 0 0 1 4 0 0 1 0 2 1 0 0 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0
40 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 1 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 3 1 3 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 3 0 0 0 1 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 8 6 5 2 2 0 0 1 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 1 1 0 2 0 0 0
45 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 6 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 14 0 0 0 0 0 1 1 0 0 1 5 2 1 0 0 0 1 0 0 0 0 0 0 0 0 4 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
60 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 1 1 1 0 2 1 1 0 0 0 0 0 0 0 0 0 0 1 1
65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
70 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
75 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
90 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Gráficos de datos cualitativos y cuantitativos

Datos cualitativos

Se obtiene primeramente una gráfica de barras que compara los distintos clientes que se tiene en Form y vemos que con el que más se trabaja es Stabilus 1, por lo que es importante tenerlo en foco.
barplot(prop.table(table(bd_prod5$cliente)),col=c("orange","blue","red","green"),main="Clientes", ylab ="Frecuencias",las=1)

Datos cuantitativos

El presente histograma ve las láminas procesadas, y podemos ver que entre 0 y 100 son las que más se frecuentan, es decir que casi siempre se esta procesando entre 0 a 100 láminas.
hist(bd_prod5$piezas.prog, main = "Frecuencia de piezas que se programan", xlab = "Piezas", ylab = "Frecuencia",col = "blue")

El presente histograma ve las láminas procesadas, y podemos ver que entre 0 y 100 son las que más se frecuentan, es decir que casi siempre se esta procesando entre 0 a 100 láminas.
hist(bd_prod5$laminas_procesadas, main = "Frecuencia de las láminas procesadas", xlab = "Láminas", ylab = "Frecuencia",col = "orange")

Gráficos de dispersión

Podemos ver como la mayoría del proceso pasa entre los 0 a 5 minutos.
plot(bd_prod5$tiempo_calidad, bd_prod5$tiempo.min, main = "Tiempo calidad por minutos", xlab = "Tiempo calidad", ylab = "Tiempo min")
## Warning in xy.coords(x, y, xlabel, ylabel, log): NAs introduced by coercion

Después vemos esta gráfica que nos muestra la relación entre las piezas programadas y que terminan procesadas.
ggplot(data=bd_prod5, mapping = aes(piezas.prog, laminas_procesadas)) + geom_point(aes(color = tiempo.min)) + theme_bw()

Analizando otra vez, las láminas procesadas podemos ver que se encuentra entre 100-200.
boxplot(bd_prod5$laminas_procesadas , vertical = TRUE)

Propuestas

  • Propuesta 1 Cambiar logística para cumplir con las piezas programas, ya sea reduciendo el tiempo de set it up o tener IA para que las máquinas sean autosuficientes.

b. FORM – Scrap

1) ¿Cuántas variables y cuántos registros tiene la base de datos?

La base de datos cuenta con 9 variables y 250 registros.

2) Clasificación de cada variable en cualitativa, cuantitativa discreta o cuantitativa continua

Variable <-c("Referencia", "Fecha", "Hora", "Producto", "Cantidad", "Unidad de medida", "Ubicación de origen", "Ubicación de desecho", "Estado")

Tipo <-c("Cualitativa (nominal)", "Cuantitativa (continua)", "Cuantitativa (continua)", "Cualitativa (nominal)", "Cuantitativa (discreta)", "Cualitativa (nominal)", "Cualitativa (nominal)", "Cualitativa (nominal)","Cualitativa (nominal)")

table3<-data.frame(Variable, Tipo)
knitr::kable(table3)
Variable Tipo
Referencia Cualitativa (nominal)
Fecha Cuantitativa (continua)
Hora Cuantitativa (continua)
Producto Cualitativa (nominal)
Cantidad Cuantitativa (discreta)
Unidad de medida Cualitativa (nominal)
Ubicación de origen Cualitativa (nominal)
Ubicación de desecho Cualitativa (nominal)
Estado Cualitativa (nominal)

3) Elige la escala de medición de cada variable.

Variables <-c("Referencia", "Fecha",    "Hora", "Producto", "Cantidad", "Unidad de medida", "Ubicación de origen", "Ubicación de desecho", "Estado")

Medicion <-c("Nominal", "Intervalo", "Intevalo", "Nominal", "Razón", "Nominal", "Nominal","Nominal", "Nominal")

table4 <-data.frame(Variables, Medicion)
knitr::kable(table4)
Variables Medicion
Referencia Nominal
Fecha Intervalo
Hora Intevalo
Producto Nominal
Cantidad Razón
Unidad de medida Nominal
Ubicación de origen Nominal
Ubicación de desecho Nominal
Estado Nominal

4) Aplica al menos 2 técnicas de limpieza de bases de datos y explícalas brevemente, ¿por qué realizaste esas técnicas?

Se realizó una limpia previa a la base de datos debido a que no se podía manejar en R, ya que el formato en que se encontraba no permitía que R pudiera entender cuales eran las variables de nuestra base de datos y una vez teniendo la base de datos las técnicas que utilizamos en el programa fue Remover valores irrelevantes dejando las variables con mayor importancia como: Fecha, Cantidad y Ubicación de origen y la segunda técnica que utilizamos fue Convertir de caracter a fecha para tener la fecha en entero.

#### Técnica. Remover valores irrelevantes

#### Eliminar columnas
summary(bd_prod)
##        no          cliente            id.form            producto        
##  Min.   :  1.0   Length:2568        Length:2568        Length:2568       
##  1st Qu.: 25.0   Class :character   Class :character   Class :character  
##  Median : 50.0   Mode  :character   Mode  :character   Mode  :character  
##  Mean   : 50.8                                                           
##  3rd Qu.: 75.0                                                           
##  Max.   :121.0                                                           
##  NA's   :8                                                               
##     fecha            piezas.prog     tiempo.min          hora.fin        
##  Length:2568        Min.   :    1   Length:2568        Length:2568       
##  Class :character   1st Qu.:  100   Class :character   Class :character  
##  Mode  :character   Median :  192   Mode  :character   Mode  :character  
##                     Mean   : 1744                                        
##                     3rd Qu.:  240                                        
##                     Max.   :36625                                        
##                     NA's   :1                                            
##  estacion_arranque  laminas_procesadas inicio_sep_up       fin_sep_up       
##  Length:2568        Min.   :   0.0     Length:2568        Length:2568       
##  Class :character   1st Qu.:   0.5     Class :character   Class :character  
##  Mode  :character   Median :  60.0     Mode  :character   Mode  :character  
##                     Mean   : 108.9                                          
##                     3rd Qu.: 200.0                                          
##                     Max.   :1125.0                                          
##                     NA's   :593                                             
##  inicio_proceso     fin_proceso        tiempo_calidad     tiempo_materiales
##  Length:2568        Length:2568        Length:2568        Min.   : 0.000   
##  Class :character   Class :character   Class :character   1st Qu.: 0.000   
##  Mode  :character   Mode  :character   Mode  :character   Median : 0.000   
##                                                           Mean   : 2.535   
##                                                           3rd Qu.: 1.000   
##                                                           Max.   :48.000   
##                                                           NA's   :2243     
##  mermas_maquinas 
##  Min.   : 0.000  
##  1st Qu.: 0.000  
##  Median : 1.000  
##  Mean   : 1.626  
##  3rd Qu.: 1.000  
##  Max.   :50.000  
##  NA's   :2461
bd_scrap2 <- bd_scrap
bd_scrap2 <- subset (bd_scrap2, select = -c (Referencia, Hora, Producto, Unidad.de.medida, Ubicación.de.desecho, Estado))

summary (bd_scrap2)
##     Fecha              Cantidad      Ubicación.de.origen
##  Length:250         Min.   : 0.000   Length:250         
##  Class :character   1st Qu.: 1.000   Class :character   
##  Mode  :character   Median : 2.000   Mode  :character   
##                     Mean   : 6.696                      
##                     3rd Qu.: 7.000                      
##                     Max.   :96.000
#### Técnica. Convertir tipos de datos

#### Convertir de caracter a fecha
bd_scrap3 <- bd_scrap2
bd_scrap3$Fecha <- as.Date(bd_scrap3$Fecha, format ="%d/%m/%y")
tibble(bd_scrap3)  
## # A tibble: 250 × 3
##    Fecha      Cantidad Ubicación.de.origen      
##    <date>        <dbl> <chr>                    
##  1 2020-08-31        2 SAB/Calidad/Entrega de PT
##  2 2020-08-31        1 SAB/Calidad/Entrega de PT
##  3 2020-08-31        1 SAB/Calidad/Entrega de PT
##  4 2020-08-31       31 SAB/Pre-Production       
##  5 2020-08-31        1 SAB/Pre-Production       
##  6 2020-08-31        1 SAB/Pre-Production       
##  7 2020-08-31        1 SAB/Pre-Production       
##  8 2020-08-31        9 SAB/Pre-Production       
##  9 2020-08-31        2 SAB/Pre-Production       
## 10 2020-08-31        1 SAB/Pre-Production       
## # … with 240 more rows
# Cambiar los nombres de las variables más cortas y específicas

names(bd_scrap3) [3] = "Ubi_origen"
names(bd_scrap3)
## [1] "Fecha"      "Cantidad"   "Ubi_origen"
#### Exportar base de datos
bd_scrap4 <- bd_scrap3
write.csv(bd_scrap4, file ="scrap_FORM_limpia.csv", row.names = FALSE)

5) Realizar un análisis estadístico descriptivo en el que logres destacar el conjunto de datos, que apoyan a la empresa a mejorar su operación.

Tablas de Frecuencia

bd_scrap5 <- bd_scrap4
bd_scrap5 <- table(bd_scrap4$Fecha)
knitr::kable(bd_scrap5)
Var1 Freq
2020-08-01 2
2020-08-02 5
2020-08-03 13
2020-08-04 6
2020-08-05 7
2020-08-06 7
2020-08-08 4
2020-08-09 5
2020-08-10 13
2020-08-11 3
2020-08-12 12
2020-08-13 5
2020-08-15 6
2020-08-16 24
2020-08-17 9
2020-08-19 17
2020-08-20 9
2020-08-22 11
2020-08-23 1
2020-08-24 21
2020-08-25 11
2020-08-26 12
2020-08-27 12
2020-08-29 8
2020-08-30 17
2020-08-31 10
bd_scrap6 <- bd_scrap5
bd_scrap6 <- table(bd_scrap4$Ubi_origen)
knitr::kable(bd_scrap6)
Var1 Freq
SAB/Calidad/Entrega de PT 58
SAB/Post-Production 13
SAB/Pre-Production 179

Tablas cruzadas

bd_scrap7 <- bd_scrap6
bd_scrap7<-table(bd_scrap4$Fecha,bd_scrap4$Ubi_origen)
knitr::kable(bd_scrap7)
SAB/Calidad/Entrega de PT SAB/Post-Production SAB/Pre-Production
2020-08-01 2 0 0
2020-08-02 3 2 0
2020-08-03 4 0 9
2020-08-04 2 0 4
2020-08-05 2 1 4
2020-08-06 1 0 6
2020-08-08 0 1 3
2020-08-09 0 0 5
2020-08-10 2 1 10
2020-08-11 0 0 3
2020-08-12 2 1 9
2020-08-13 5 0 0
2020-08-15 1 5 0
2020-08-16 5 0 19
2020-08-17 0 0 9
2020-08-19 0 0 17
2020-08-20 0 0 9
2020-08-22 3 1 7
2020-08-23 0 1 0
2020-08-24 5 0 16
2020-08-25 4 0 7
2020-08-26 7 0 5
2020-08-27 1 0 11
2020-08-29 2 0 6
2020-08-30 4 0 13
2020-08-31 3 0 7

Tabla cualitativa de Ubicación de origen

Podemos ver que el scrap de donde se tiene más origen es de SAB/Pre-Production
library(plyr)
## ------------------------------------------------------------------------------
## You have loaded plyr after dplyr - this is likely to cause problems.
## If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
## library(plyr); library(dplyr)
## ------------------------------------------------------------------------------
## 
## Attaching package: 'plyr'
## The following objects are masked from 'package:dplyr':
## 
##     arrange, count, desc, failwith, id, mutate, rename, summarise,
##     summarize
pie(prop.table(table(bd_scrap4$Ubi_origen)),col=c("lightgreen","blue","red"),main="Ubicación de origen",las=1)

Histograma

Este histograma nos muestra que entre 0 a 10 kg es lo que mas se frecuenta a reciclar el material.
hist(bd_scrap4$Cantidad, main = "Cantidad de Material reciclado", xlab = "Cantidad", ylab = "Frecuencia",col = "blue")

Gráfico de dispersión

Podemos ver que hay ciertos días que salen fuera del promedio (que es alrededor de 0-20kg) que se tiene de la cantidad de Scrap.
plot(bd_scrap4$Fecha, bd_scrap4$Cantidad, main = "Cantidad de Scrap por fecha", xlab = "Fecha", ylab = "Cantidad")

Propuestas

  • Propuesta 1 Buscar máquinas con tecnología mas ahorradoras para que el material reciclado sea mayor y recupar mas desperdicio.

  • Propuesta 2 Crear un modelo que nos ayude a predecir cuanto scrap se genera dependiendo de las demás variables.

c. FORM – Merma

1) ¿Cuántas variables y cuántos registros tiene la base de datos?

La base de datos cuenta con 2 variables y 50 registros.

2) Clasificación de cada variable en cualitativa, cuantitativa discreta o cuantitativa continua

Variable <-c("Fecha", "Mes", "Kilos")
Tipo <-c("Cuantitativa (continua)", "Cualitativa (nominal)", "Cuantitativa (discreta)")

table5<-data.frame(Variable, Tipo)
knitr::kable(table5)
Variable Tipo
Fecha Cuantitativa (continua)
Mes Cualitativa (nominal)
Kilos Cuantitativa (discreta)

3) Elige la escala de medición de cada variable.

Variables <-c("Fecha", "Mes", "Kilos")
Medicion <-c("Intervalo", "Intervalo", "Razón")

table6 <-data.frame(Variables, Medicion)
knitr::kable(table6)
Variables Medicion
Fecha Intervalo
Mes Intervalo
Kilos Razón

4) Aplica al menos 2 técnicas de limpieza de bases de datos y explícalas brevemente, ¿por qué realizaste esas técnicas?

Se realizó una limpia previa a la base de datos debido a que no se podía manejar en R, ya que el formato en que se encontraba no permitía que R pudiera entender cuales eran las variables de nuestra base de datos y una vez teniendo la base de datos las técnicas que utilizamos en el programa fue Remover valores irrelevantes dejando las variables con mayor importancia como: Fecha, Cantidad y Ubicación de origen y la segunda técnica que utilizamos fue Convertir de caracter a fecha para tener la fecha en entero.

#### Técnica. Remover valores irrelevantes

#### Eliminar columnas
summary(bd_merma)
##     Fecha               Mes                Kilos       
##  Length:60          Length:60          Min.   :   790  
##  Class :character   Class :character   1st Qu.:  3545  
##  Mode  :character   Mode  :character   Median :  4025  
##                                        Mean   :  9271  
##                                        3rd Qu.:  4702  
##                                        Max.   :185426
bd_merma2 <- bd_merma
bd_merma2 <- subset (bd_merma2, select = -c (Mes))

#### Eliminar renglones
bd_merma3 <- bd_merma2
bd_merma3 <- bd_merma3[bd_merma3$Fecha > 0, ]


#### Técnica. Convertir tipos de datos

#### Convertir de caracter a fecha
bd_merma4 <- bd_merma3
bd_merma4$Fecha <- as.Date(bd_merma4$Fecha, format ="%d/%m/%y")
tibble(bd_merma4)  
## # A tibble: 50 × 2
##    Fecha      Kilos
##    <date>     <int>
##  1 2022-01-11  5080
##  2 2022-01-11  3810
##  3 2022-01-22  2990
##  4 2022-01-22  2680
##  5 2022-02-18  3650
##  6 2022-02-18  4380
##  7 2022-02-18  3870
##  8 2022-02-18  3590
##  9 2022-02-18  3410
## 10 2022-02-24  3930
## # … with 40 more rows
#### Exportar
bd_merma5 <- bd_merma4
write.csv(bd_merma5, file ="merma_FORM_limpia.csv", row.names = FALSE)

5) Realizar un análisis estadístico descriptivo en el que logres destacar el conjunto de datos, que apoyan a la empresa a mejorar su operación.

Tabla cuantitativa
media <- mean(bd_merma5$Kilos)
media
## [1] 3708.52
mediana <- median(bd_merma5$Kilos)

mode <- function (x) {
  ux <- unique(x)
  ux [which.max(tabulate(match(x,ux)))]
}

mode <- mode(bd_merma5$Kilos)
mode
## [1] 3810
hist(bd_merma5$Kilos)

library(ggplot2)
Podemos ver como en inicios de Febrero a Abril tenemos la mayor cantidad de kilos de merma.
ggplot(bd_merma5, aes(x= Fecha, y= Kilos)) + geom_bar(stat="identity", fill="red") + scale_fill_grey() + labs(title = "Kilos de merma", x = "Fecha")

Gráfico de dispersión

Podemos ver como hay mas dispersión en septiembre, los demás meses ha tenido en promedio la misma cantidad de merma.
bd_merma5$Fecha <- as.Date(bd_merma5$Fecha, format = "%d/%m/%Y")
plot(bd_merma5$Fecha, bd_merma5$Kilos, main = "Kilos de merma",
     xlab = "Fecha", ylab = "Kilos",
     pch = 19, frame = FALSE)

Propuestas

  • Propuesta 1 Buscar máquinas con tecnología mas ahorradoras para reducir la merma.

  • Propuesta 2 Crear un modelo que nos ayude a predecir cuanta merma se puede gastar dependiendo de las demás variables.

  • Propuesta 3 Buscar negocios donde se pueda realizar economía circular.

Reflexión

Construir una base de datos y realizar interpretaciones sobre la información que se tiene en una empresa es clave para poder conocer a tu negocio, partiendo de análisis desde gráficas, histogramas hasta poder construir después con esa información modelos que nos ayuden a poder predecir y tener una mejor toma de decisiones. En esta caso trabajamos con la interpretación de la empresa FORM, conociendo sus áreas de producción, scrap y mermas y pudimos desarrollar este reporte para poder saber como se encuentra el socioformador.

LS0tCnRpdGxlOiA8c3BhbiBzdHlsZT0iY29sb3I6T3JhbmdlIj4iRW50cmVnYWJsZSBSNSAyLjQgRGVzYXJyb2xsYXIgcHJlcGFyYWNpw7NuIHkgYW7DoWxpc2lzIGRlIGJhc2UgZGUgZGF0b3MiPC9zcGFuPiAKYXV0aG9yOiAiS2FybGEgR2VvcmdpbmEgTWFydMOtbmV6IEdvbnrDoWxleiBBMDA4Mjc1MDAiCmRhdGU6ICIyMDIyLTA5LTI4IgpvdXRwdXQ6IAogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQotLS0KCjxpbWcgc3JjPSAiL1VzZXJzL2dlb3JnaW5hbWFydGluZXovRG9jdW1lbnRzL1RlYy9TZcyBcHRpbW8gU2VtZXN0cmUvQW5hbGnMgXRpY2EgcGFyYSBuZWdvY2lvcywgZGUgbG9zIGRhdG9zIGEgZGVjaXNpb25lcy9Gb3JtLnBuZyI+CgoKIyBFbnRyZWdhYmxlIDIuNCAKIyMjIyBFeHBvcnRhciBiYXNlcyBkZSBkYXRvcwpgYGB7cn0KYmRfcHJvZCA8LSByZWFkLmNzdigiL1VzZXJzL2dlb3JnaW5hbWFydGluZXovRG9jdW1lbnRzL1RlYy9TZcyBcHRpbW8gU2VtZXN0cmUvQW5hbGnMgXRpY2EgcGFyYSBuZWdvY2lvcywgZGUgbG9zIGRhdG9zIGEgZGVjaXNpb25lcy9CYXNlIGRlIGRhdG9zIEZPUk0vRk9STV9Qcm9kdWNjaW/MgW5fQy5jc3YiKQpiZF9tZXJtYSA8LSByZWFkLmNzdigiL1VzZXJzL2dlb3JnaW5hbWFydGluZXovRG9jdW1lbnRzL1RlYy9TZcyBcHRpbW8gU2VtZXN0cmUvQW5hbGnMgXRpY2EgcGFyYSBuZWdvY2lvcywgZGUgbG9zIGRhdG9zIGEgZGVjaXNpb25lcy9CYXNlIGRlIGRhdG9zIEZPUk0vRk9STSAtIE1lcm1hMS5jc3YiKQpiZF9zY3JhcCA8LSByZWFkLmNzdigiL1VzZXJzL2dlb3JnaW5hbWFydGluZXovRG9jdW1lbnRzL1RlYy9TZcyBcHRpbW8gU2VtZXN0cmUvQW5hbGnMgXRpY2EgcGFyYSBuZWdvY2lvcywgZGUgbG9zIGRhdG9zIGEgZGVjaXNpb25lcy9CYXNlIGRlIGRhdG9zIEZPUk0vRk9STSAtIFNjcmFwLmNzdiIpCmBgYAoKIyMgYS4gRk9STSDigJMgUHJvZHVjY2nDs24KCiMjIyAxKSDCv0N1w6FudGFzIHZhcmlhYmxlcyB5IGN1w6FudG9zIHJlZ2lzdHJvcyB0aWVuZSBsYSBiYXNlIGRlIGRhdG9zPyAgCgpMYSBiYXNlIGRlIGRhdG9zIGN1ZW50YSBjb24gMTcgdmFyaWFibGVzIHkgMjU2OCByZWdpc3Ryb3MuCgojIyMgMikgQ2xhc2lmaWNhY2nDs24gZGUgY2FkYSB2YXJpYWJsZSBlbiBjdWFsaXRhdGl2YSwgY3VhbnRpdGF0aXZhIGRpc2NyZXRhIG8gY3VhbnRpdGF0aXZhIGNvbnRpbnVhCmBgYHtyfQpWYXJpYWJsZSA8LWMoIk5vLiIsICJDbGllbnRlIiwiSUQgRm9ybSIsIlByb2R1Y3RvIiwgIkZlY2hhIiwgIlBpZXphcyBQcm9nIiwgIlRpZW1wbyBNaW4iLCAiSG9yYSBGaW4iLCAiRXN0YWNpw7NuIEFycmFucXVlIiwgIkxhbWluYXMgcHJvY2VzYWRhcyIsICJJbmljaW8gU2VwIHVwIiwgIkZpbiBJbmljaW8gU2VwIHVwIiwgIkluaWNpbyBwcm9jZXNvIiwgIkZpbiBkZSBwcm9jZXNvIiwgIlRpZW1wbyBjYWxpZGFkIiwgIlRpZW1wbyBtYXRlcmlhbGVzIiwgIk1lcm1hcyBtw6FxdWluYXMiKQpUaXBvIDwtYygiQ3VhbnRpdGF0aXZhIChkaXNjcmV0YSkiLCAiQ3VhbGl0YXRpdmEgKG5vbWluYWwpIiwgIkN1YWxpdGF0aXZhIChub21pbmFsKSIsICJDdWFsaXRhdGl2YSAobm9taW5hbCkiLCAiQ3VhbnRpdGF0aXZhIChjb250aW51YSkiLCAiQ3VhbnRpdGF0aXZhIChkaXNjcmV0YSkiLCAiQ3VhbnRpdGF0aXZhIChkaXNjcmV0YSkiLCAiQ3VhbnRpdGF0aXZhIChjb250aW51YSkiLCAgIkN1YW50aXRhdGl2YSAoY29udGludWEpIiwgIkN1YW50aXRhdGl2YSAoZGlzY3JldGEpIiwgICJDdWFudGl0YXRpdmEgKGNvbnRpbnVhKSIsICAiQ3VhbnRpdGF0aXZhIChjb250aW51YSkiLCAgIkN1YW50aXRhdGl2YSAoY29udGludWEpIiwgICJDdWFudGl0YXRpdmEgKGNvbnRpbnVhKSIsICJDdWFudGl0YXRpdmEgKGRpc2NyZXRhKSIsICJDdWFudGl0YXRpdmEgKGRpc2NyZXRhKSIsICJDdWFudGl0YXRpdmEgKGRpc2NyZXRhKSIpCnRhYmxlPC1kYXRhLmZyYW1lKFZhcmlhYmxlLCBUaXBvKQprbml0cjo6a2FibGUodGFibGUpCmBgYAoKIyMjIDMpIEVsaWdlIGxhIGVzY2FsYSBkZSBtZWRpY2nDs24gZGUgY2FkYSB2YXJpYWJsZS4KYGBge3J9ClZhcmlhYmxlIDwtYygiTm8uIiwgIkNsaWVudGUiLCJJRCBGb3JtIiwiUHJvZHVjdG8iLCAiRmVjaGEiLCAiUGllemFzIFByb2ciLCAiVGllbXBvIE1pbiIsICJIb3JhIEZpbiIsICJFc3RhY2nDs24gQXJyYW5xdWUiLCAiTGFtaW5hcyBwcm9jZXNhZGFzKiIsICJJbmljaW8gU2VwIHVwIiwgIkZpbiBJbmljaW8gU2VwIHVwIiwgIkluaWNpbyBwcm9jZXNvIiwgIkZpbiBkZSBwcm9jZXNvIiwgIlRpZW1wbyBjYWxpZGFkIiwgIlRpZW1wbyBtYXRlcmlhbGVzIiwgIk1lcm1hcyBtw6FxdWluYXMiKQoKTWVkaWNpb24gPC1jKCJSYXrDs24iLCAiTm9taW5hbCIsICJOb21pbmFsIiwgIk5vbWluYWwiLCAiSW50ZXJ2YWxvIiwgIlJhesOzbiIsICJSYXrDs24iLCAiSW50ZXJ2YWxvIiwiSW50ZXJ2YWxvIiwgIlJhesOzbiIsICJJbnRlcnZhbG8iLCAiSW50ZXJ2YWxvIiwgIkludGVydmFsbyIsICJJbnRlcnZhbG8iLCAiUmF6w7NuIiwgIlJhesOzbiIsICJSYXrDs24iKQoKdGFibGUyPC1kYXRhLmZyYW1lKFZhcmlhYmxlLCBNZWRpY2lvbikKa25pdHI6OmthYmxlKHRhYmxlMikKYGBgCgojIyMgNCkgQXBsaWNhIGFsIG1lbm9zIDIgdMOpY25pY2FzIGRlIGxpbXBpZXphIGRlIGJhc2VzIGRlIGRhdG9zIHkgZXhwbMOtY2FsYXMgYnJldmVtZW50ZSwgwr9wb3IgcXXDqSByZWFsaXphc3RlIGVzYXMgdMOpY25pY2FzPyAgCgpTZSByZWFsaXrDsyB1bmEgbGltcGlhIHByZXZpYSBhIGxhIGJhc2UgZGUgZGF0b3MgZGViaWRvIGEgcXVlIG5vIHNlIHBvZMOtYSBtYW5lamFyIGVuIFIsIHlhIHF1ZSBlbCBmb3JtYXRvIGVuIHF1ZSBzZSBlbmNvbnRyYWJhIG5vIHBlcm1pdMOtYSBxdWUgUiBwdWRpZXJhIGVudGVuZGVyIGN1YWxlcyBlcmFuIGxhcyB2YXJpYWJsZXMgZGUgbnVlc3RyYSBiYXNlIGRlIGRhdG9zLCBkZXNwdcOpcyBwYXNhbW9zIGEgbGFzIHTDqWNuaWNhcyBxdWUgcG9kZW1vcyB1dGlsaXphciBlbiBSLCBjb21vIGxvIGZ1ZSBsYSB0w6ljbmljYSBkZSAqKlJlbW92ZXIgdmFsb3JlcyBpcnJlbGV2YW50ZXMqKiwgcGFyYSBzYWNhciBwcm92ZWNobyBkZSBsYSBiYXNlIGRlIGRhdG9zLCBzb2xvIG5lY2VzaXRhbW9zIGRlIGNpbmNvIHZhcmlhYmxlcyB2YWxpb3NhcyBxdWUgc29uOiBDbGllbnRlLCBQaWV6YXMgcHJvZ3JhbWFkYXMsIFRpZW1wbyBtw61uaW1vLCBMw6FtaW5hcyBwcm9jZXNhZGFzIHkgVGllbXBvIENhbGlkYWQsIHRhbWJpw6luIGJvcnJhbW9zIHJlbmdsb25lcyBxdWUgdHV2aWVyYW4gdmFsb3IgMCwgbGEgc2VndW5kYSB0w6ljbmljYSBmdWUgKipWYWxvcmVzIEZhbHRhbnRlcyoqLCBkb25kZSBxdWl0YW1vcyB0b2RvcyBsb3MgTkEncyBkZSBsYSBiYXNlIGRlIGRhdG9zIHkgcG9yIMO6bHRpbW8gbGEgdGVyY2VyYSB0ZWNuaWNhIHV0aWxpemFkYSBmdWUgKipDb252ZXJ0aXIgdGlwb3MgZGUgZGF0b3MqKiBxdWUgY29udmVydGltb3MgbGEgZmVjaGEgZGUgY2FyYWN0ZXIgYSBlbnRlcm8uCgpgYGB7cn0KIyMjIyBUw6ljbmljYS4gUmVtb3ZlciB2YWxvcmVzIGlycmVsZXZhbnRlcwoKIyMjIyBFbGltaW5hciBjb2x1bW5hcwpzdW1tYXJ5KGJkX3Byb2QpCgpiZF9wcm9kMiA8LSBiZF9wcm9kCmJkX3Byb2QyIDwtIHN1YnNldCAoYmRfcHJvZDIsIHNlbGVjdCA9IC1jIChubywgaWQuZm9ybSwgcHJvZHVjdG8sIGhvcmEuZmluLCBlc3RhY2lvbl9hcnJhbnF1ZSwgaW5pY2lvX3NlcF91cCwgZmluX3NlcF91cCwgaW5pY2lvX3Byb2Nlc28sIGZpbl9wcm9jZXNvLCB0aWVtcG9fbWF0ZXJpYWxlcywgbWVybWFzX21hcXVpbmFzKSkKCiMjIyMgRWxpbWluYXIgcmVuZ2xvbmVzCmJkX3Byb2QyIDwtIGJkX3Byb2QyW2JkX3Byb2QyJHRpZW1wby5taW4gPiAwLCBdCgojIyMjIFTDqWNuaWNhLiBWYWxvcmVzIGZhbHRhbnRlcwoKIyMjIyDCv0N1w6FudG9zIE5BIHRlbmdvIGVuIGxhIGJhc2UgZGUgZGF0b3M/CnN1bShpcy5uYShiZF9wcm9kMikpCnN1bShpcy5uYShiZF9wcm9kKSkKCiMjIyMgwr9DdcOhbnRvcyBOQSB0ZW5nbyBwb3IgdmFyaWFibGU/CnNhcHBseShiZF9wcm9kMiwgZnVuY3Rpb24oeCkgc3VtKGlzLm5hKHgpKSkKc2FwcGx5KGJkX3Byb2QsIGZ1bmN0aW9uKHgpIHN1bShpcy5uYSh4KSkpICAKCj9zYXBwbHkgIAoKIyMjIyBCb3JyYXIgdG9kb3MgbG9zIHJlZ2lzdHJvcyBOQSBkZSB1bmEgdGFibGEKYmRfcHJvZDMgPC0gYmRfcHJvZDIKYmRfcHJvZDMgPC0gbmEub21pdChiZF9wcm9kMykKc3VtbWFyeShiZF9wcm9kMykKCiMjIyMgVMOpY25pY2EuIENvbnZlcnRpciB0aXBvcyBkZSBkYXRvcwoKIyMjIyBDb252ZXJ0aXIgZGUgY2FyYWN0ZXIgYSBmZWNoYQpiZF9wcm9kNCA8LSBiZF9wcm9kMwpiZF9wcm9kNCRmZWNoYSA8LSBhcy5EYXRlKGJkX3Byb2Q0JGZlY2hhLCBmb3JtYXQgPSIlZC8lbS8leSIpCgpiZF9wcm9kNCA8LSBiZF9wcm9kMwpiZF9wcm9kNCR0aWVtcG8ubWluPC0gc3Vic3RyKGJkX3Byb2Q0JHRpZW1wby5taW4sIHN0YXJ0ID0gMSwgc3RvcCA9IDIpCgoKYmRfcHJvZDQkdGllbXBvLm1pbiA8LSBhcy5pbnRlZ2VyKGJkX3Byb2Q0JHRpZW1wby5taW4pICAKc3RyKGJkX3Byb2Q0KSAgCmBgYAoKIyMjIyBFeHBvcnRhciBiYXNlIGRlIGRhdG9zCmBgYHtyfQpiZF9wcm9kNSA8LSBiZF9wcm9kNAp3cml0ZS5jc3YoYmRfcHJvZDUsIGZpbGUgPSJwcm9kdWNjacOzbl9GT1JNX2xpbXBpYS5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkKYGBgCgojIyMgNSkgUmVhbGl6YXIgdW4gYW7DoWxpc2lzIGVzdGFkw61zdGljbyBkZXNjcmlwdGl2byBlbiBlbCBxdWUgbG9ncmVzIGRlc3RhY2FyIGVsIGNvbmp1bnRvIGRlIGRhdG9zLCBxdWUgYXBveWFuIGEgbGEgZW1wcmVzYSBhIG1lam9yYXIgc3Ugb3BlcmFjacOzbi4gIAoKIyMjIyBMaWJyZXLDrWFzIHJlcXVlcmlkYXMKYGBge3J9CmxpYnJhcnkoZm9yZWlnbikKbGlicmFyeShkcGx5cikgICAgICAgICMgZGF0YSBtYW5pcHVsYXRpb24gCmxpYnJhcnkoZm9yY2F0cykgICAgICAjIHRvIHdvcmsgd2l0aCBjYXRlZ29yaWNhbCB2YXJpYWJsZXMKbGlicmFyeShnZ3Bsb3QyKSAgICAgICMgZGF0YSB2aXN1YWxpemF0aW9uIApsaWJyYXJ5KGphbml0b3IpICAgICAgIyBkYXRhIGV4cGxvcmF0aW9uIGFuZCBjbGVhbmluZyAKIyBpbnN0YWxsLnBhY2thZ2VzKCJwc3ljaCIpCmxpYnJhcnkoY29ycnBsb3QpICAgICAjIGNvcnJlbGF0aW9uIHBsb3RzCmxpYnJhcnkobG10ZXN0KSAgICAgICAjIGRpYWdub3N0aWMgY2hlY2tzIC0gbGluZWFyIHJlZ3Jlc3Npb24gYW5hbHlzaXMgCmxpYnJhcnkoY2FyKSAgICAgICAgICAjIGRpYWdub3N0aWMgY2hlY2tzIC0gbGluZWFyIHJlZ3Jlc3Npb24gYW5hbHlzaXMKYGBgCgojIyMjIFRhYmxhIGRlIGZyZWN1ZW5jaWEgIAoKIyMjIyMgU2UgZ2VuZXJhbiBsYXMgdGFibGFzIGRlIGZyZWN1ZW5jaWFzIGRlIGxhcyB2YXJpYWJsZXMgKipDVUFMSVRBVElWQVMqKi4KYGBge3J9CkNsaWVudGUgPC10YWJsZShiZF9wcm9kNSRjbGllbnRlKQpDbGllbnRlCmtuaXRyOjprYWJsZShDbGllbnRlKQpgYGAKCgojIyMjIFRhYmxhcyBjcnV6YWRhCmBgYHtyfQpjcnV6YWRhUDEgPC10YWJsZShiZF9wcm9kNSRjbGllbnRlLGJkX3Byb2Q1JGxhbWluYXNfcHJvY2VzYWRhcykKa25pdHI6OmthYmxlKGNydXphZGFQMSkKCgpjcnV6YWRhUDIgPC10YWJsZShiZF9wcm9kNSR0aWVtcG8ubWluLGJkX3Byb2Q1JGxhbWluYXNfcHJvY2VzYWRhcykKa25pdHI6OmthYmxlKGNydXphZGFQMikKYGBgCgoKIyMjIyBHcsOhZmljb3MgZGUgZGF0b3MgY3VhbGl0YXRpdm9zIHkgY3VhbnRpdGF0aXZvcyAgCgojIyMjIERhdG9zIGN1YWxpdGF0aXZvcyAgICAKCiMjIyMjIFNlIG9idGllbmUgcHJpbWVyYW1lbnRlIHVuYSBncsOhZmljYSBkZSBiYXJyYXMgcXVlIGNvbXBhcmEgbG9zIGRpc3RpbnRvcyBjbGllbnRlcyBxdWUgc2UgdGllbmUgZW4gRm9ybSB5IHZlbW9zIHF1ZSBjb24gZWwgcXVlIG3DoXMgc2UgdHJhYmFqYSBlcyBTdGFiaWx1cyAxLCBwb3IgbG8gcXVlIGVzIGltcG9ydGFudGUgdGVuZXJsbyBlbiBmb2NvLgpgYGB7cn0KYmFycGxvdChwcm9wLnRhYmxlKHRhYmxlKGJkX3Byb2Q1JGNsaWVudGUpKSxjb2w9Yygib3JhbmdlIiwiYmx1ZSIsInJlZCIsImdyZWVuIiksbWFpbj0iQ2xpZW50ZXMiLCB5bGFiID0iRnJlY3VlbmNpYXMiLGxhcz0xKQpgYGAKCgojIyMjIERhdG9zIGN1YW50aXRhdGl2b3MgICAgCgojIyMjIyBFbCBwcmVzZW50ZSBoaXN0b2dyYW1hIHZlIGxhcyBsw6FtaW5hcyBwcm9jZXNhZGFzLCB5IHBvZGVtb3MgdmVyIHF1ZSBlbnRyZSAwIHkgMTAwIHNvbiBsYXMgcXVlIG3DoXMgc2UgZnJlY3VlbnRhbiwgZXMgZGVjaXIgcXVlIGNhc2kgc2llbXByZSBzZSBlc3RhIHByb2Nlc2FuZG8gZW50cmUgMCBhIDEwMCBsw6FtaW5hcy4KCmBgYHtyfQpoaXN0KGJkX3Byb2Q1JHBpZXphcy5wcm9nLCBtYWluID0gIkZyZWN1ZW5jaWEgZGUgcGllemFzIHF1ZSBzZSBwcm9ncmFtYW4iLCB4bGFiID0gIlBpZXphcyIsIHlsYWIgPSAiRnJlY3VlbmNpYSIsY29sID0gImJsdWUiKQpgYGAKCiMjIyMjIEVsIHByZXNlbnRlIGhpc3RvZ3JhbWEgdmUgbGFzIGzDoW1pbmFzIHByb2Nlc2FkYXMsIHkgcG9kZW1vcyB2ZXIgcXVlIGVudHJlIDAgeSAxMDAgc29uIGxhcyBxdWUgbcOhcyBzZSBmcmVjdWVudGFuLCBlcyBkZWNpciBxdWUgY2FzaSBzaWVtcHJlIHNlIGVzdGEgcHJvY2VzYW5kbyBlbnRyZSAwIGEgMTAwIGzDoW1pbmFzLgpgYGB7cn0KaGlzdChiZF9wcm9kNSRsYW1pbmFzX3Byb2Nlc2FkYXMsIG1haW4gPSAiRnJlY3VlbmNpYSBkZSBsYXMgbMOhbWluYXMgcHJvY2VzYWRhcyIsIHhsYWIgPSAiTMOhbWluYXMiLCB5bGFiID0gIkZyZWN1ZW5jaWEiLGNvbCA9ICJvcmFuZ2UiKQpgYGAKCgojIyMjIEdyw6FmaWNvcyBkZSBkaXNwZXJzacOzbiAgICAKCiMjIyMjIFBvZGVtb3MgdmVyIGNvbW8gbGEgbWF5b3LDrWEgZGVsIHByb2Nlc28gcGFzYSBlbnRyZSBsb3MgMCBhIDUgbWludXRvcy4KYGBge3J9CnBsb3QoYmRfcHJvZDUkdGllbXBvX2NhbGlkYWQsIGJkX3Byb2Q1JHRpZW1wby5taW4sIG1haW4gPSAiVGllbXBvIGNhbGlkYWQgcG9yIG1pbnV0b3MiLCB4bGFiID0gIlRpZW1wbyBjYWxpZGFkIiwgeWxhYiA9ICJUaWVtcG8gbWluIikKYGBgCgojIyMjIyBEZXNwdcOpcyB2ZW1vcyBlc3RhIGdyw6FmaWNhIHF1ZSBub3MgbXVlc3RyYSBsYSByZWxhY2nDs24gZW50cmUgbGFzIHBpZXphcyBwcm9ncmFtYWRhcyB5IHF1ZSB0ZXJtaW5hbiBwcm9jZXNhZGFzLgpgYGB7cn0KZ2dwbG90KGRhdGE9YmRfcHJvZDUsIG1hcHBpbmcgPSBhZXMocGllemFzLnByb2csIGxhbWluYXNfcHJvY2VzYWRhcykpICsgZ2VvbV9wb2ludChhZXMoY29sb3IgPSB0aWVtcG8ubWluKSkgKyB0aGVtZV9idygpCmBgYAoKIyMjIyMgQW5hbGl6YW5kbyBvdHJhIHZleiwgbGFzIGzDoW1pbmFzIHByb2Nlc2FkYXMgcG9kZW1vcyB2ZXIgcXVlIHNlIGVuY3VlbnRyYSBlbnRyZSAxMDAtMjAwLgpgYGB7cn0KYm94cGxvdChiZF9wcm9kNSRsYW1pbmFzX3Byb2Nlc2FkYXMgLCB2ZXJ0aWNhbCA9IFRSVUUpCmBgYAoKIyMjIFByb3B1ZXN0YXMKCiogKipQcm9wdWVzdGEgMSoqIENhbWJpYXIgbG9nw61zdGljYSBwYXJhIGN1bXBsaXIgY29uIGxhcyBwaWV6YXMgcHJvZ3JhbWFzLCB5YSBzZWEgcmVkdWNpZW5kbyBlbCB0aWVtcG8gZGUgc2V0IGl0IHVwIG8gdGVuZXIgSUEgcGFyYSBxdWUgbGFzIG3DoXF1aW5hcyBzZWFuIGF1dG9zdWZpY2llbnRlcy4gIAoKCiMjIGIuIEZPUk0g4oCTIFNjcmFwCgojIyMgMSkgwr9DdcOhbnRhcyB2YXJpYWJsZXMgeSBjdcOhbnRvcyByZWdpc3Ryb3MgdGllbmUgbGEgYmFzZSBkZSBkYXRvcz8gIAoKTGEgYmFzZSBkZSBkYXRvcyBjdWVudGEgY29uIDkgdmFyaWFibGVzIHkgMjUwIHJlZ2lzdHJvcy4KCiMjIyAyKSBDbGFzaWZpY2FjacOzbiBkZSBjYWRhIHZhcmlhYmxlIGVuIGN1YWxpdGF0aXZhLCBjdWFudGl0YXRpdmEgZGlzY3JldGEgbyBjdWFudGl0YXRpdmEgY29udGludWEKYGBge3J9ClZhcmlhYmxlIDwtYygiUmVmZXJlbmNpYSIsICJGZWNoYSIsCSJIb3JhIiwJIlByb2R1Y3RvIiwgIkNhbnRpZGFkIiwgIlVuaWRhZCBkZSBtZWRpZGEiLAkiVWJpY2FjacOzbiBkZSBvcmlnZW4iLCAiVWJpY2FjacOzbiBkZSBkZXNlY2hvIiwgIkVzdGFkbyIpCgpUaXBvIDwtYygiQ3VhbGl0YXRpdmEgKG5vbWluYWwpIiwgIkN1YW50aXRhdGl2YSAoY29udGludWEpIiwgIkN1YW50aXRhdGl2YSAoY29udGludWEpIiwgIkN1YWxpdGF0aXZhIChub21pbmFsKSIsICJDdWFudGl0YXRpdmEgKGRpc2NyZXRhKSIsICJDdWFsaXRhdGl2YSAobm9taW5hbCkiLCAiQ3VhbGl0YXRpdmEgKG5vbWluYWwpIiwgIkN1YWxpdGF0aXZhIChub21pbmFsKSIsIkN1YWxpdGF0aXZhIChub21pbmFsKSIpCgp0YWJsZTM8LWRhdGEuZnJhbWUoVmFyaWFibGUsIFRpcG8pCmtuaXRyOjprYWJsZSh0YWJsZTMpCmBgYAoKIyMjIDMpIEVsaWdlIGxhIGVzY2FsYSBkZSBtZWRpY2nDs24gZGUgY2FkYSB2YXJpYWJsZS4KYGBge3J9ClZhcmlhYmxlcyA8LWMoIlJlZmVyZW5jaWEiLCAiRmVjaGEiLAkiSG9yYSIsCSJQcm9kdWN0byIsICJDYW50aWRhZCIsICJVbmlkYWQgZGUgbWVkaWRhIiwJIlViaWNhY2nDs24gZGUgb3JpZ2VuIiwgIlViaWNhY2nDs24gZGUgZGVzZWNobyIsICJFc3RhZG8iKQoKTWVkaWNpb24gPC1jKCJOb21pbmFsIiwgIkludGVydmFsbyIsICJJbnRldmFsbyIsICJOb21pbmFsIiwgIlJhesOzbiIsICJOb21pbmFsIiwgIk5vbWluYWwiLCJOb21pbmFsIiwgIk5vbWluYWwiKQoKdGFibGU0IDwtZGF0YS5mcmFtZShWYXJpYWJsZXMsIE1lZGljaW9uKQprbml0cjo6a2FibGUodGFibGU0KQpgYGAKCiMjIyA0KSBBcGxpY2EgYWwgbWVub3MgMiB0w6ljbmljYXMgZGUgbGltcGllemEgZGUgYmFzZXMgZGUgZGF0b3MgeSBleHBsw61jYWxhcyBicmV2ZW1lbnRlLCDCv3BvciBxdcOpIHJlYWxpemFzdGUgZXNhcyB0w6ljbmljYXM/ICAKClNlIHJlYWxpesOzIHVuYSBsaW1waWEgcHJldmlhIGEgbGEgYmFzZSBkZSBkYXRvcyBkZWJpZG8gYSBxdWUgbm8gc2UgcG9kw61hIG1hbmVqYXIgZW4gUiwgeWEgcXVlIGVsIGZvcm1hdG8gZW4gcXVlIHNlIGVuY29udHJhYmEgbm8gcGVybWl0w61hIHF1ZSBSIHB1ZGllcmEgZW50ZW5kZXIgY3VhbGVzIGVyYW4gbGFzIHZhcmlhYmxlcyBkZSBudWVzdHJhIGJhc2UgZGUgZGF0b3MgeSB1bmEgdmV6IHRlbmllbmRvIGxhIGJhc2UgZGUgZGF0b3MgbGFzIHTDqWNuaWNhcyBxdWUgdXRpbGl6YW1vcyBlbiBlbCBwcm9ncmFtYSBmdWUgKipSZW1vdmVyIHZhbG9yZXMgaXJyZWxldmFudGVzKiogZGVqYW5kbyBsYXMgdmFyaWFibGVzIGNvbiBtYXlvciBpbXBvcnRhbmNpYSBjb21vOiBGZWNoYSwgQ2FudGlkYWQgeSBVYmljYWNpw7NuIGRlIG9yaWdlbiB5IGxhIHNlZ3VuZGEgdMOpY25pY2EgcXVlIHV0aWxpemFtb3MgZnVlICoqQ29udmVydGlyIGRlIGNhcmFjdGVyIGEgZmVjaGEqKiBwYXJhIHRlbmVyIGxhIGZlY2hhIGVuIGVudGVyby4KCgpgYGB7cn0KIyMjIyBUw6ljbmljYS4gUmVtb3ZlciB2YWxvcmVzIGlycmVsZXZhbnRlcwoKIyMjIyBFbGltaW5hciBjb2x1bW5hcwpzdW1tYXJ5KGJkX3Byb2QpCgpiZF9zY3JhcDIgPC0gYmRfc2NyYXAKYmRfc2NyYXAyIDwtIHN1YnNldCAoYmRfc2NyYXAyLCBzZWxlY3QgPSAtYyAoUmVmZXJlbmNpYSwgSG9yYSwgUHJvZHVjdG8sIFVuaWRhZC5kZS5tZWRpZGEsIFViaWNhY2nDs24uZGUuZGVzZWNobywgRXN0YWRvKSkKCnN1bW1hcnkgKGJkX3NjcmFwMikKCiMjIyMgVMOpY25pY2EuIENvbnZlcnRpciB0aXBvcyBkZSBkYXRvcwoKIyMjIyBDb252ZXJ0aXIgZGUgY2FyYWN0ZXIgYSBmZWNoYQpiZF9zY3JhcDMgPC0gYmRfc2NyYXAyCmJkX3NjcmFwMyRGZWNoYSA8LSBhcy5EYXRlKGJkX3NjcmFwMyRGZWNoYSwgZm9ybWF0ID0iJWQvJW0vJXkiKQp0aWJibGUoYmRfc2NyYXAzKSAgCgojIENhbWJpYXIgbG9zIG5vbWJyZXMgZGUgbGFzIHZhcmlhYmxlcyBtw6FzIGNvcnRhcyB5IGVzcGVjw61maWNhcwoKbmFtZXMoYmRfc2NyYXAzKSBbM10gPSAiVWJpX29yaWdlbiIKbmFtZXMoYmRfc2NyYXAzKQoKIyMjIyBFeHBvcnRhciBiYXNlIGRlIGRhdG9zCmJkX3NjcmFwNCA8LSBiZF9zY3JhcDMKd3JpdGUuY3N2KGJkX3NjcmFwNCwgZmlsZSA9InNjcmFwX0ZPUk1fbGltcGlhLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQpgYGAKCiMjIyA1KSBSZWFsaXphciB1biBhbsOhbGlzaXMgZXN0YWTDrXN0aWNvIGRlc2NyaXB0aXZvIGVuIGVsIHF1ZSBsb2dyZXMgZGVzdGFjYXIgZWwgY29uanVudG8gZGUgZGF0b3MsIHF1ZSBhcG95YW4gYSBsYSBlbXByZXNhIGEgbWVqb3JhciBzdSBvcGVyYWNpw7NuLiAgIAoKIyMjIyBUYWJsYXMgZGUgRnJlY3VlbmNpYQpgYGB7cn0KYmRfc2NyYXA1IDwtIGJkX3NjcmFwNApiZF9zY3JhcDUgPC0gdGFibGUoYmRfc2NyYXA0JEZlY2hhKQprbml0cjo6a2FibGUoYmRfc2NyYXA1KQoKYmRfc2NyYXA2IDwtIGJkX3NjcmFwNQpiZF9zY3JhcDYgPC0gdGFibGUoYmRfc2NyYXA0JFViaV9vcmlnZW4pCmtuaXRyOjprYWJsZShiZF9zY3JhcDYpCmBgYAoKIyMjIyBUYWJsYXMgY3J1emFkYXMKYGBge3J9CmJkX3NjcmFwNyA8LSBiZF9zY3JhcDYKYmRfc2NyYXA3PC10YWJsZShiZF9zY3JhcDQkRmVjaGEsYmRfc2NyYXA0JFViaV9vcmlnZW4pCmtuaXRyOjprYWJsZShiZF9zY3JhcDcpCmBgYAoKIyMjIyBUYWJsYSBjdWFsaXRhdGl2YSBkZSBVYmljYWNpw7NuIGRlIG9yaWdlbiAgIAojIyMjIyBQb2RlbW9zIHZlciBxdWUgZWwgc2NyYXAgZGUgZG9uZGUgc2UgdGllbmUgbcOhcyBvcmlnZW4gZXMgZGUgU0FCL1ByZS1Qcm9kdWN0aW9uCmBgYHtyfQpsaWJyYXJ5KHBseXIpCnBpZShwcm9wLnRhYmxlKHRhYmxlKGJkX3NjcmFwNCRVYmlfb3JpZ2VuKSksY29sPWMoImxpZ2h0Z3JlZW4iLCJibHVlIiwicmVkIiksbWFpbj0iVWJpY2FjacOzbiBkZSBvcmlnZW4iLGxhcz0xKQpgYGAKCiMjIyMgSGlzdG9ncmFtYSAgCgojIyMjIyBFc3RlIGhpc3RvZ3JhbWEgbm9zIG11ZXN0cmEgcXVlIGVudHJlIDAgYSAxMCBrZyBlcyBsbyBxdWUgbWFzIHNlIGZyZWN1ZW50YSBhIHJlY2ljbGFyIGVsIG1hdGVyaWFsLgpgYGB7cn0KaGlzdChiZF9zY3JhcDQkQ2FudGlkYWQsIG1haW4gPSAiQ2FudGlkYWQgZGUgTWF0ZXJpYWwgcmVjaWNsYWRvIiwgeGxhYiA9ICJDYW50aWRhZCIsIHlsYWIgPSAiRnJlY3VlbmNpYSIsY29sID0gImJsdWUiKQpgYGAKCgojIyMjIEdyw6FmaWNvIGRlIGRpc3BlcnNpw7NuCiMjIyMjIFBvZGVtb3MgdmVyIHF1ZSBoYXkgY2llcnRvcyBkw61hcyBxdWUgc2FsZW4gZnVlcmEgZGVsIHByb21lZGlvIChxdWUgZXMgYWxyZWRlZG9yIGRlIDAtMjBrZykgcXVlIHNlIHRpZW5lIGRlIGxhIGNhbnRpZGFkIGRlIFNjcmFwLgpgYGB7cn0KcGxvdChiZF9zY3JhcDQkRmVjaGEsIGJkX3NjcmFwNCRDYW50aWRhZCwgbWFpbiA9ICJDYW50aWRhZCBkZSBTY3JhcCBwb3IgZmVjaGEiLCB4bGFiID0gIkZlY2hhIiwgeWxhYiA9ICJDYW50aWRhZCIpCmBgYAoKIyMjIFByb3B1ZXN0YXMKCiogKipQcm9wdWVzdGEgMSoqIEJ1c2NhciBtw6FxdWluYXMgY29uIHRlY25vbG9nw61hIG1hcyBhaG9ycmFkb3JhcyBwYXJhIHF1ZSBlbCBtYXRlcmlhbCByZWNpY2xhZG8gc2VhIG1heW9yIHkgcmVjdXBhciBtYXMgZGVzcGVyZGljaW8uICAKCiogKipQcm9wdWVzdGEgMioqIENyZWFyIHVuIG1vZGVsbyBxdWUgbm9zIGF5dWRlIGEgcHJlZGVjaXIgY3VhbnRvIHNjcmFwIHNlIGdlbmVyYSBkZXBlbmRpZW5kbyBkZSBsYXMgZGVtw6FzIHZhcmlhYmxlcy4gICAgCgoKIyMgYy4gRk9STSDigJMgTWVybWEgIAoKIyMjIDEpIMK/Q3XDoW50YXMgdmFyaWFibGVzIHkgY3XDoW50b3MgcmVnaXN0cm9zIHRpZW5lIGxhIGJhc2UgZGUgZGF0b3M/ICAKTGEgYmFzZSBkZSBkYXRvcyBjdWVudGEgY29uIDIgdmFyaWFibGVzIHkgNTAgcmVnaXN0cm9zLiAgCgojIyMgMikgQ2xhc2lmaWNhY2nDs24gZGUgY2FkYSB2YXJpYWJsZSBlbiBjdWFsaXRhdGl2YSwgY3VhbnRpdGF0aXZhIGRpc2NyZXRhIG8gY3VhbnRpdGF0aXZhIGNvbnRpbnVhCmBgYHtyfQpWYXJpYWJsZSA8LWMoIkZlY2hhIiwgIk1lcyIsICJLaWxvcyIpClRpcG8gPC1jKCJDdWFudGl0YXRpdmEgKGNvbnRpbnVhKSIsICJDdWFsaXRhdGl2YSAobm9taW5hbCkiLCAiQ3VhbnRpdGF0aXZhIChkaXNjcmV0YSkiKQoKdGFibGU1PC1kYXRhLmZyYW1lKFZhcmlhYmxlLCBUaXBvKQprbml0cjo6a2FibGUodGFibGU1KQpgYGAKCiMjIyAzKSBFbGlnZSBsYSBlc2NhbGEgZGUgbWVkaWNpw7NuIGRlIGNhZGEgdmFyaWFibGUuCmBgYHtyfQpWYXJpYWJsZXMgPC1jKCJGZWNoYSIsICJNZXMiLCAiS2lsb3MiKQpNZWRpY2lvbiA8LWMoIkludGVydmFsbyIsICJJbnRlcnZhbG8iLCAiUmF6w7NuIikKCnRhYmxlNiA8LWRhdGEuZnJhbWUoVmFyaWFibGVzLCBNZWRpY2lvbikKa25pdHI6OmthYmxlKHRhYmxlNikKYGBgCgojIyMgNCkgQXBsaWNhIGFsIG1lbm9zIDIgdMOpY25pY2FzIGRlIGxpbXBpZXphIGRlIGJhc2VzIGRlIGRhdG9zIHkgZXhwbMOtY2FsYXMgYnJldmVtZW50ZSwgwr9wb3IgcXXDqSByZWFsaXphc3RlIGVzYXMgdMOpY25pY2FzPyAgCgpTZSByZWFsaXrDsyB1bmEgbGltcGlhIHByZXZpYSBhIGxhIGJhc2UgZGUgZGF0b3MgZGViaWRvIGEgcXVlIG5vIHNlIHBvZMOtYSBtYW5lamFyIGVuIFIsIHlhIHF1ZSBlbCBmb3JtYXRvIGVuIHF1ZSBzZSBlbmNvbnRyYWJhIG5vIHBlcm1pdMOtYSBxdWUgUiBwdWRpZXJhIGVudGVuZGVyIGN1YWxlcyBlcmFuIGxhcyB2YXJpYWJsZXMgZGUgbnVlc3RyYSBiYXNlIGRlIGRhdG9zIHkgdW5hIHZleiB0ZW5pZW5kbyBsYSBiYXNlIGRlIGRhdG9zIGxhcyB0w6ljbmljYXMgcXVlIHV0aWxpemFtb3MgZW4gZWwgcHJvZ3JhbWEgZnVlICoqUmVtb3ZlciB2YWxvcmVzIGlycmVsZXZhbnRlcyoqIGRlamFuZG8gbGFzIHZhcmlhYmxlcyBjb24gbWF5b3IgaW1wb3J0YW5jaWEgY29tbzogRmVjaGEsIENhbnRpZGFkIHkgVWJpY2FjacOzbiBkZSBvcmlnZW4geSBsYSBzZWd1bmRhIHTDqWNuaWNhIHF1ZSB1dGlsaXphbW9zIGZ1ZSAqKkNvbnZlcnRpciBkZSBjYXJhY3RlciBhIGZlY2hhKiogcGFyYSB0ZW5lciBsYSBmZWNoYSBlbiBlbnRlcm8uCgpgYGB7cn0KIyMjIyBUw6ljbmljYS4gUmVtb3ZlciB2YWxvcmVzIGlycmVsZXZhbnRlcwoKIyMjIyBFbGltaW5hciBjb2x1bW5hcwpzdW1tYXJ5KGJkX21lcm1hKQoKYmRfbWVybWEyIDwtIGJkX21lcm1hCmJkX21lcm1hMiA8LSBzdWJzZXQgKGJkX21lcm1hMiwgc2VsZWN0ID0gLWMgKE1lcykpCgojIyMjIEVsaW1pbmFyIHJlbmdsb25lcwpiZF9tZXJtYTMgPC0gYmRfbWVybWEyCmJkX21lcm1hMyA8LSBiZF9tZXJtYTNbYmRfbWVybWEzJEZlY2hhID4gMCwgXQoKCiMjIyMgVMOpY25pY2EuIENvbnZlcnRpciB0aXBvcyBkZSBkYXRvcwoKIyMjIyBDb252ZXJ0aXIgZGUgY2FyYWN0ZXIgYSBmZWNoYQpiZF9tZXJtYTQgPC0gYmRfbWVybWEzCmJkX21lcm1hNCRGZWNoYSA8LSBhcy5EYXRlKGJkX21lcm1hNCRGZWNoYSwgZm9ybWF0ID0iJWQvJW0vJXkiKQp0aWJibGUoYmRfbWVybWE0KSAgCgoKIyMjIyBFeHBvcnRhcgpiZF9tZXJtYTUgPC0gYmRfbWVybWE0CndyaXRlLmNzdihiZF9tZXJtYTUsIGZpbGUgPSJtZXJtYV9GT1JNX2xpbXBpYS5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkKYGBgCgojIyMgNSkgUmVhbGl6YXIgdW4gYW7DoWxpc2lzIGVzdGFkw61zdGljbyBkZXNjcmlwdGl2byBlbiBlbCBxdWUgbG9ncmVzIGRlc3RhY2FyIGVsIGNvbmp1bnRvIGRlIGRhdG9zLCBxdWUgYXBveWFuIGEgbGEgZW1wcmVzYSBhIG1lam9yYXIgc3Ugb3BlcmFjacOzbi4gCgojIyMjIyBUYWJsYSBjdWFudGl0YXRpdmEKYGBge3J9Cm1lZGlhIDwtIG1lYW4oYmRfbWVybWE1JEtpbG9zKQptZWRpYQoKbWVkaWFuYSA8LSBtZWRpYW4oYmRfbWVybWE1JEtpbG9zKQoKbW9kZSA8LSBmdW5jdGlvbiAoeCkgewogIHV4IDwtIHVuaXF1ZSh4KQogIHV4IFt3aGljaC5tYXgodGFidWxhdGUobWF0Y2goeCx1eCkpKV0KfQoKbW9kZSA8LSBtb2RlKGJkX21lcm1hNSRLaWxvcykKbW9kZQoKaGlzdChiZF9tZXJtYTUkS2lsb3MpCmxpYnJhcnkoZ2dwbG90MikKYGBgCgojIyMjIyMgUG9kZW1vcyB2ZXIgY29tbyBlbiBpbmljaW9zIGRlIEZlYnJlcm8gYSBBYnJpbCB0ZW5lbW9zIGxhIG1heW9yIGNhbnRpZGFkIGRlIGtpbG9zIGRlIG1lcm1hLgpgYGB7cn0KZ2dwbG90KGJkX21lcm1hNSwgYWVzKHg9IEZlY2hhLCB5PSBLaWxvcykpICsgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiLCBmaWxsPSJyZWQiKSArIHNjYWxlX2ZpbGxfZ3JleSgpICsgbGFicyh0aXRsZSA9ICJLaWxvcyBkZSBtZXJtYSIsIHggPSAiRmVjaGEiKQpgYGAKCiMjIyMgR3LDoWZpY28gZGUgZGlzcGVyc2nDs24KIyMjIyMjIFBvZGVtb3MgdmVyIGNvbW8gaGF5IG1hcyBkaXNwZXJzacOzbiBlbiBzZXB0aWVtYnJlLCBsb3MgZGVtw6FzIG1lc2VzIGhhIHRlbmlkbyBlbiBwcm9tZWRpbyBsYSBtaXNtYSBjYW50aWRhZCBkZSBtZXJtYS4KYGBge3J9CmJkX21lcm1hNSRGZWNoYSA8LSBhcy5EYXRlKGJkX21lcm1hNSRGZWNoYSwgZm9ybWF0ID0gIiVkLyVtLyVZIikKcGxvdChiZF9tZXJtYTUkRmVjaGEsIGJkX21lcm1hNSRLaWxvcywgbWFpbiA9ICJLaWxvcyBkZSBtZXJtYSIsCiAgICAgeGxhYiA9ICJGZWNoYSIsIHlsYWIgPSAiS2lsb3MiLAogICAgIHBjaCA9IDE5LCBmcmFtZSA9IEZBTFNFKQpgYGAKCiMjIyBQcm9wdWVzdGFzCgoqICoqUHJvcHVlc3RhIDEqKiBCdXNjYXIgbcOhcXVpbmFzIGNvbiB0ZWNub2xvZ8OtYSBtYXMgYWhvcnJhZG9yYXMgcGFyYSByZWR1Y2lyIGxhIG1lcm1hLiAgCgoqICoqUHJvcHVlc3RhIDIqKiBDcmVhciB1biBtb2RlbG8gcXVlIG5vcyBheXVkZSBhIHByZWRlY2lyIGN1YW50YSBtZXJtYSBzZSBwdWVkZSBnYXN0YXIgZGVwZW5kaWVuZG8gZGUgbGFzIGRlbcOhcyB2YXJpYWJsZXMuICAKCiogKipQcm9wdWVzdGEgMyoqIEJ1c2NhciBuZWdvY2lvcyBkb25kZSBzZSBwdWVkYSByZWFsaXphciBlY29ub23DrWEgY2lyY3VsYXIuICAKCiMjIFJlZmxleGnDs24gIApDb25zdHJ1aXIgdW5hIGJhc2UgZGUgZGF0b3MgeSByZWFsaXphciBpbnRlcnByZXRhY2lvbmVzIHNvYnJlIGxhIGluZm9ybWFjacOzbiBxdWUgc2UgdGllbmUgZW4gdW5hIGVtcHJlc2EgZXMgY2xhdmUgcGFyYSBwb2RlciBjb25vY2VyIGEgdHUgbmVnb2NpbywgcGFydGllbmRvIGRlIGFuw6FsaXNpcyBkZXNkZSBncsOhZmljYXMsIGhpc3RvZ3JhbWFzIGhhc3RhIHBvZGVyIGNvbnN0cnVpciBkZXNwdcOpcyBjb24gZXNhIGluZm9ybWFjacOzbiBtb2RlbG9zIHF1ZSBub3MgYXl1ZGVuIGEgcG9kZXIgcHJlZGVjaXIgeSB0ZW5lciB1bmEgbWVqb3IgdG9tYSBkZSBkZWNpc2lvbmVzLiBFbiBlc3RhIGNhc28gdHJhYmFqYW1vcyBjb24gbGEgaW50ZXJwcmV0YWNpw7NuIGRlIGxhIGVtcHJlc2EgRk9STSwgY29ub2NpZW5kbyBzdXMgw6FyZWFzIGRlIHByb2R1Y2Npw7NuLCBzY3JhcCB5IG1lcm1hcyB5IHB1ZGltb3MgZGVzYXJyb2xsYXIgZXN0ZSByZXBvcnRlIHBhcmEgcG9kZXIgc2FiZXIgY29tbyBzZSBlbmN1ZW50cmEgZWwgc29jaW9mb3JtYWRvci4=