Fase 1 [Descripciones Multivariantes]

En la primera etapa del estudio, se llevarán a cabo cálculos, visualizaciones y un análisis del ranking fortune de las 1000 empresas mas importantes de Estados Unidos cabe recalcar que estamos usando los datos exclusivos de este ranking el cual contiene una actualización hasta el 8 de mayo del 2024 , que será descrito en la sección 1.2. Este proceso se abordará desde una perspectiva de estadística descriptiva multivariante, lo que permitirá no solo una visión general de los datos, sino también un análisis más enriquecido y precisa de las relaciones entre las diferentes variables involucradas.

Este enfoque facilitará una comprensión más profunda de las relaciones entre las variables (cuantitativas), ayudando a identificar patrones y tendencias relevantes para el análisis. Las visualizaciones jugarán un rol importante en la interpretaciòn de las gráficas de estas relaciones, todo esto se llevará a cabo utilizando las herramientas R y RStudio, que permitirán una ejecución eficiente y precisa de los cálculos y la creación de gráficos interactivos.

Cabe destacar que la estructura general del trabajo, así como algunas ideas específicas, se tomaron del Estudio de Análisis Multivariado con base en un conjunto de datos de aspirantes extranjeros para ser admitidos en estudios superiores en EE.UU. realizado por el profesor (Libreros2023?) en el marco de sus estudios de posgrado en Estadística Aplicada. Además, el profesor proporcionó una amplia base bibliográfica como apoyo al inicio del curso. Entre las principales referencias se incluyen el libro Análisis estadístico de datos multivariados del profesor (Díaz Morales & Morales Rivera, 2012), de la Universidad Nacional de Colombia, y el texto Análisis multivariante aplicado con R de (Aldás & Uriel, 2017) en su segunda edición, el cual aportara herramientas clave para realizar análisis avanzados utilizando este software.

También se incorporaron conceptos de la obra Estadística aplicada a los negocios y la economía de (LindEstadistica2012?) y de Probabilidad y estadística para ingeniería industrial de (Devore, Jay L., 2008). Estas fuentes han sido fundamentales para guiar y estructurar el enfoque metodológico y analítico del presente estudio.

1.1. Objetivos

El objetivo principal de este estudio es analizar el comportamiento de las principales compañías rankeadas en el Fortune 1000 para el año 2024, utilizando herramientas de análisis multivariado otorgadas y dictadas por el profesor Gian Carlo Libreros, a través del análisis de diversas variables cualitativas y cuantitativas, buscando asi identificar patrones, correlaciones y estructuras subyacentes en los datos. De manera específica, pretendemos:

Evaluar la relación entre diferentes métricas empresariales (como ingresos, ganancias, activos, capitalizaciòn en bolsa, etc) y como esto influye en el ranking general, identificar posibles agrupaciones de empresas con características similares, tambien determinar si los datos presentan una distribución normal multivariada, lo que facilitaría la aplicación de ciertos métodos estadísticos.

1.2. Descripción de los datos

El conjunto de datos original descargado desde la plataforma de kaggle, contiene 32 campos (variables) y 1000 compañias (registros). contando con varios campos donde son simplemente identificadores numéricos y de etiqeutas secuencial de los registros; otros cuatro son de naturaleza dicotomica (categóricas con múltiples opciones); y el resto son numéricos estrictamente positivos.

La lista siguiente describe las variables en el mismo orden, de izquierda a derecha, como aparecen en el rango de datos que los contiene, y se establece para cada campo, excepto el campo Rank (Serial), el tipo de variable y su escala de medición con base en el nombre y contenido de la respectiva variable:

-1.Rank: (Serial::identificador). Representa el rango o posiciòn de la compañía en la lista de Fortune 1000 .

-2.Company: (Cualitativa::nominal). Resgitra los nombres de las compañías que hacen participe en este ranking .

-3.Ticker: (Cualitativa::nominal). Registra la abreviaciòn del nombre de la empresa en este ranking .

-4.Sector: (Cualitativa::nominal). Registra la el sector al cual que pertenece el campo de acciòn de la empresa .

-5.Industry: (Cualitativa::nominal). Resgistra la categoría especifica de la industria la que pertenece la empresa .

-6.Profitable: (Cualitativa::nominal_dicotomìca). Resgistra el indicador si la empresa es o no rentable dentro del mercado de competiciòn (yes(1)/no(0)) .

-7.Founder_is_CEO: (Cualitativa:.nominal_dicotomìca). Resgitra el indicador acerca de que si el fundador es el CEO (yes(1)/no(0)) .

-8.FemaleCEO: (Cualitativa::nominal_dicotomìca). Registra el Indicador acerca de que si el CEO es mujer (yes(1)/no(0)) .

-9Growth_in_Jobs: (Cualitativa::nominal_dicotomìca). Registra el Indicador sobre el si a aumentado el crecimiento en el número (yes(1)/no(0)) .

-10.Change_in_Rank: (Cuantitativa::razón).Registra los cambios en el rango de la empresa respecto al año anterior .

-11.Gained_in_Rank: (Cualitativa::nominal_dicotomìca). Indicador si la empresa ganó rango (yes(1)/no(0)) .

-12.Dropped_in_Rank: (Cualitativa::nominal_dicotomìca). Indicador si la empresa perdió rango (yes(1)/no(0)) .

-13.Newcomer_to_the_Fortune500:(Cualitativa::nominal_dicotomìca). Indicador si la empresa es nueva en la lista, representando un crecimiento en el mercado y aumentando su valor en el mismo (yes(1)/no(0)) .

-14.Global500: (Cualitativa::nominal_dicotomìca). Registra una comparaciòn en la cual indica si la empresa también aparece en la lista Global 500 (yes(1)/no(0)) .

-15.Worlds_Most_Admired_Companies: (Cualitativa::nominal_dicotomìca)).Registra otra comparativa la cual indica si la empresa está en la lista de las más admiradas del mundo (yes(1)/no(0)) .

-16.Best_Companies_to_Work_For: (Cualitativa::nominal_dicotomìca). Registra otra comparativa la cual indica si está en la lista de mejores empresas para trabajar (yes(1)/no(0)).

-17.Number_of_employees: (Cuantitativa::razón). Resgistra número de empleados con los que las empresas cuentan en disposiciòn .

-18.MarketCap_March28_M: (Cuantitativa::razón). Registra la capitalización de mercado de las empresas en miles de millones de dólares hasta el 28 de marzo.

-19.Revenues_M: (Cuantitativa::razón). Registra los ingresos de las empresas en millones de dólares .

-20.RevenuePercentChange: (Cuantitativa::razón). Registra el cambio porcentual en los ingresos de las empresas .

-21.Profits_M: (Cuantitativa::razón).Registra las ganancias de las empresas en miles de millones de dólares.

-22.ProfitsPercentChange: (Cuantitativa::razón).Registra el cambio porcentual en las ganancias de las empresas .

-23.Assets_M: (Cuantitativa::razón). Registra los activos respectivos de las empresas en miles de millones de dólares.

-24.CEO: (Cualitativa::nominal). Registra el nombre de los CEO`s de cada una de las respectivas empresas de acuerdo a la posiciòn de las compañias en el ranking .

-25.Country: (Cualitativa::nominal). Registra el país donde se ubica respectivamente cada empresa .

-26.HeadquartersCity: (Cualitativa::nominal). Registra la ciudad donde se encuentran ubicadas las oficinas centrales de las empresas .

-27.HeadquartersState: (Cualitativa::nominal). Registra el estado donde se encuentran ubicadas las oficinas centrales de las compañias .

-28.Website: (Cualitativa::nominal).Registra la dirrecciòn online de la Página web de las empresas .

-29.CompanyType: (Cualitativa::nominal_dicotoìca).Registra el tipo de compañía si pertenece al sector publico o privado (pública (1), privada(0)) en esta variable se tiene que hacer la aclaraciòn de que el ranking fortune 1000, categoriza una compañia si es publica a todas aquellas coticen en bolsa, siendo asi privadas aquellas que no cotizan en bolsa.

-30.Footnote: (Cualitativa::nominal). Registra notas o comentarios adicionales sobre las empresas .

-31.MarketCap_Updated_M: (Cuantitativa::razón). Registra la capitalización de mercado o cotizaciòn en bolsa mas actualizada en miles de millones de dólares de cada empresa .

-32.Updated: (Cualitativa::ordinal). Registra la fecha en que se actualizó la información del conjunto de datos en la pagina kaggle .

Reestructuraciòn de los datos

Se hace una complemetentaciòn de registros vacios (obteniendo ) y una depuraciòn de las siguientes variables: Ticker, Growth_in_Jobs, Gained_in_Rank, newcomer_to_the_fortune, Dropped_in_Rank, MarketCap_March28_M, Revenue_Percent_Change, Profits_Percent_Change, CEO, Country, Website, Updated.

teniendo en cuentas las siguientes razones:

Quedando actualmente las siguientes variables:

-1.Rank: (Serial::identificador). Representa el rango o posiciòn de la compañía en la lista de Fortune 1000 .

-2.Company: (Cualitativa::nominal). Resgitra los nombres de las compañías que hacen participe en este ranking .

-3.Sector: (Cualitativa::nominal). Registra la el sector al cual que pertenece el campo de acciòn de la empresa .

-4.Industry: (Cualitativa::nominal). Resgistra la categoría especifica de la industria la que pertenece la empresa .

-5.Profitable: (Cualitativa::nominal_dicotomìca). Resgistra el indicador si la empresa es o no rentable dentro del mercado de competiciòn (yes(1)/no(0)) .

-6.Founder_is_CEO: (Cualitativa:.nominal_dicotomìca). Resgitra el indicador acerca de que si el fundador es el CEO (yes(1)/no(0)) .

-7.FemaleCEO: (Cualitativa::nominal_dicotomìca). Registra el Indicador acerca de que si el CEO es mujer (yes(1)/no(0)) .

-8.Change_in_Rank: (Cuantitativa::razón).Registra los cambios en el rango de la empresa respecto al año anterior .

-9.Global500: (Cualitativa::nominal_dicotomìca). Registra una comparaciòn en la cual indica si la empresa también aparece en la lista Global 500 (yes(1)/no(0)) .

-10.Worlds_Most_Admired_Companies: (Cualitativa::nominal_dicotomìca)).Registra otra comparativa la cual indica si la empresa está en la lista de las más admiradas del mundo (yes(1)/no(0)) .

-11.Best_Companies_to_Work_For: (Cualitativa::nominal_dicotomìca). Registra otra comparativa la cual indica si está en la lista de mejores empresas para trabajar (yes(1)/no(0)) .

-12.Number_of_employees: (Cuantitativa::razón). Resgistra número de empleados con los que lsa empresas cuentan en disposiciòn .

-13.Revenues_M: (Cuantitativa::razón). Registra los ingresos de las empresas en millones de dólares .

-14.Profits_M: (Cuantitativa::razón).Registra las ganancias de las empresas en millones de dólares.

-15.Assets_M: (Cuantitativa::razón). Registra los activos respectivos de las empresas en millones de dólares.

-16.HeadquartersCity: (Cualitativa::nominal). Registra la ciudad donde se encuentran ubicadas las oficinas centrales de las empresas .

-17.HeadquartersState: (Cualitativa::nominal). Registra el estado donde se encuentran ubicadas las oficinas centrales de las compañia.

-18.CompanyType: (Cualitativa::nominal_dicotoìca).Registra el tipo de compañía si pertenece al sector publico o privado (pública (1), privada(0)) .

-19.Footnote: (Cualitativa::nominal). Registra notas o comentarios adicionales sobre las empresas .

-20.MarketCap_Updated_M: (Cuantitativa::razón). Registra la capitalización de mercado o cotizaciòn en bolsa actualizada en millones de dólares de cada empresa, compañias que no cotizan en bolsa su valor es de 0.

Estructura del conjunto de datos inicial

str(cdd_ranking_fortune_G9) 
## tibble [1,000 × 32] (S3: tbl_df/tbl/data.frame)
##  $ Rank                         : num [1:1000] 1 2 3 4 5 6 7 8 9 10 ...
##  $ Company                      : chr [1:1000] "Walmart" "Amazon" "Apple" "UnitedHealth Group" ...
##  $ Ticker                       : chr [1:1000] "WMT" "AMZN" "AAPL" "UNH" ...
##  $ Sector                       : chr [1:1000] "Retailing" "Retailing" "Technology" "Health Care" ...
##  $ Industry                     : chr [1:1000] "General Merchandisers" "Internet Services and Retailing" "Computers, Office Equipment" "Health Care: Insurance and Managed Care" ...
##  $ Profitable                   : num [1:1000] 1 1 1 1 1 1 1 1 1 1 ...
##  $ Founder_is_CEO               : num [1:1000] 0 0 0 0 0 0 0 0 0 0 ...
##  $ Female_CEO                   : num [1:1000] 0 0 0 0 0 1 0 0 0 0 ...
##  $ Growth_in_Jobs               : num [1:1000] 0 0 0 1 1 0 0 0 0 1 ...
##  $ Change_in_Rank               : num [1:1000] 0 0 10 10 20 0 -40 0 0 10 ...
##  $ Gained_in_Rank               : num [1:1000] 0 0 1 1 1 0 0 0 0 1 ...
##  $ Dropped_in_Rank              : num [1:1000] 0 0 0 0 0 0 1 0 0 0 ...
##  $ Newcomer_to_the_Fortune500   : chr [1:1000] "0" "0" "0" "0" ...
##  $ Global500                    : num [1:1000] 1 1 1 1 1 1 1 1 1 1 ...
##  $ Worlds_Most_Admired_Companies: num [1:1000] 1 1 1 1 1 1 0 1 0 0 ...
##  $ Best_Companies_to_Work_For   : num [1:1000] 1 0 0 0 0 0 0 0 0 0 ...
##  $ Number_of_employees          : num [1:1000] 2100000 1525000 161000 440000 396500 ...
##  $ MarketCap_March28_M          : num [1:1000] 4848528 1873676 2647974 4560808 9089197 ...
##  $ Revenues_M                   : num [1:1000] 6481250 5747850 3832850 3716220 3644820 ...
##  $ Revenue_Percent_Change       : num [1:1000] 60 118 -28 146 207 109 -167 87 48 99 ...
##  $ Profits_M                    : num [1:1000] 155110 304250 969950 223810 962230 ...
##  $ Profits_Percent_Change       : num [1:1000] 328 NA -28 112 NA ...
##  $ Assets_M                     : num [1:1000] 2523990 5278540 3525830 2737200 10699780 ...
##  $ CEO                          : chr [1:1000] "C. Douglas McMillon" "Andrew R. Jassy" "Timothy D. Cook" "Andrew P. Witty" ...
##  $ Country                      : chr [1:1000] "U.S." "U.S." "U.S." "U.S." ...
##  $ Headquarters_City            : chr [1:1000] "Bentonville" "Seattle" "Cupertino" "Minnetonka" ...
##  $ Headquarters_State           : chr [1:1000] "Arkansas" "Washington" "California" "Minnesota" ...
##  $ Website                      : chr [1:1000] "https://www.stock.walmart.com" "https://www.amazon.com" "https://www.apple.com" "https://www.unitedhealthgroup.com" ...
##  $ Company_Type                 : num [1:1000] 0 0 0 0 0 0 0 0 0 0 ...
##  $ Footnote                     : chr [1:1000] "Figures are for fiscal year ended Jan. 31, 2024. Market value as of July 15, 2024." "Market value as of July 15, 2024." "Figures are for fiscal year ended Sept. 30, 2023. Market value as of July 15, 2024." "Market value as of July 15, 2024." ...
##  $ Market_Cap_Updated_M         : num [1:1000] 5599110 20055650 35943090 4743390 9370280 ...
##  $ Updated                      : POSIXct[1:1000], format: "2024-08-05" "2024-08-05" ...

Conjunto de datos original

cdd_ranking_fortune_G9
## # A tibble: 1,000 × 32
##     Rank Company     Ticker Sector Industry Profitable Founder_is_CEO Female_CEO
##    <dbl> <chr>       <chr>  <chr>  <chr>         <dbl>          <dbl>      <dbl>
##  1     1 Walmart     WMT    Retai… General…          1              0          0
##  2     2 Amazon      AMZN   Retai… Interne…          1              0          0
##  3     3 Apple       AAPL   Techn… Compute…          1              0          0
##  4     4 UnitedHeal… UNH    Healt… Health …          1              0          0
##  5     5 Berkshire … BRKA   Finan… Insuran…          1              0          0
##  6     6 CVS Health  CVS    Healt… Health …          1              0          1
##  7     7 Exxon Mobil XOM    Energy Petrole…          1              0          0
##  8     8 Alphabet    GOOGL  Techn… Interne…          1              0          0
##  9     9 McKesson    MCK    Healt… Wholesa…          1              0          0
## 10    10 Cencora     COR    Healt… Wholesa…          1              0          0
## # ℹ 990 more rows
## # ℹ 24 more variables: Growth_in_Jobs <dbl>, Change_in_Rank <dbl>,
## #   Gained_in_Rank <dbl>, Dropped_in_Rank <dbl>,
## #   Newcomer_to_the_Fortune500 <chr>, Global500 <dbl>,
## #   Worlds_Most_Admired_Companies <dbl>, Best_Companies_to_Work_For <dbl>,
## #   Number_of_employees <dbl>, MarketCap_March28_M <dbl>, Revenues_M <dbl>,
## #   Revenue_Percent_Change <dbl>, Profits_M <dbl>, …

Estructura del conjunto de datos reescrito

str(cdd_ranking_fortune_reescrito)
## tibble [1,000 × 20] (S3: tbl_df/tbl/data.frame)
##  $ Rank                         : num [1:1000] 1 2 3 4 5 6 7 8 9 10 ...
##  $ Company                      : chr [1:1000] "Walmart" "Amazon" "Apple" "UnitedHealth Group" ...
##  $ Sector                       : chr [1:1000] "Retailing" "Retailing" "Technology" "Health Care" ...
##  $ Industry                     : chr [1:1000] "General Merchandisers" "Internet Services and Retailing" "Computers, Office Equipment" "Health Care: Insurance and Managed Care" ...
##  $ Profitable                   : num [1:1000] 1 1 1 1 1 1 1 1 1 1 ...
##  $ Founder_is_CEO               : num [1:1000] 0 0 0 0 0 0 0 0 0 0 ...
##  $ FemaleCEO                    : num [1:1000] 0 0 0 0 0 1 0 0 0 0 ...
##  $ Change_in_Rank               : num [1:1000] 0 0 10 10 20 0 0 0 0 10 ...
##  $ Global500                    : num [1:1000] 1 1 1 1 1 1 1 1 1 1 ...
##  $ Worlds_Most_Admired_Companies: num [1:1000] 1 1 1 1 1 1 0 1 0 0 ...
##  $ Best_Companies_to_Work_For   : num [1:1000] 1 0 0 0 0 0 0 0 0 0 ...
##  $ Number_of_employees          : num [1:1000] 2100000 1525000 161000 440000 396500 ...
##  $ Revenues_M                   : num [1:1000] 648125 574785 383285 371622 364482 ...
##  $ Profits_M                    : num [1:1000] 15511 30425 96995 22381 96223 ...
##  $ Assets_M                     : num [1:1000] 2523990 5278540 3525830 2737200 10699780 ...
##  $ Headquarters_City            : chr [1:1000] "Bentonville" "Seattle" "Cupertino" "Minnetonka" ...
##  $ Headquarters_State           : chr [1:1000] "Arkansas" "Washington" "California" "Minnesota" ...
##  $ Company_Type                 : num [1:1000] 1 1 1 1 1 1 1 1 1 1 ...
##  $ Footnote                     : chr [1:1000] "Figures are for fiscal year ended Jan, 31, 2024, Market value as of July 15, 2024," "Market value as of July 15, 2024," "Figures are for fiscal year ended Sept, 30, 2023, Market value as of July 15, 2024," "Market value as of July 15, 2024," ...
##  $ MarketCap_Updated_M          : num [1:1000] 5599110 20055650 35943090 4743390 9370280 ...

Conjunto de datos reescritos

cdd_ranking_fortune_reescrito
## # A tibble: 1,000 × 20
##     Rank Company            Sector  Industry Profitable Founder_is_CEO FemaleCEO
##    <dbl> <chr>              <chr>   <chr>         <dbl>          <dbl>     <dbl>
##  1     1 Walmart            Retail… General…          1              0         0
##  2     2 Amazon             Retail… Interne…          1              0         0
##  3     3 Apple              Techno… Compute…          1              0         0
##  4     4 UnitedHealth Group Health… Health …          1              0         0
##  5     5 Berkshire Hathaway Financ… Insuran…          1              0         0
##  6     6 CVS Health         Health… Health …          1              0         1
##  7     7 Exxon Mobil        Energy  Petrole…          1              0         0
##  8     8 Alphabet           Techno… Interne…          1              0         0
##  9     9 McKesson           Health… Wholesa…          1              0         0
## 10    10 Cencora            Health… Wholesa…          1              0         0
## # ℹ 990 more rows
## # ℹ 13 more variables: Change_in_Rank <dbl>, Global500 <dbl>,
## #   Worlds_Most_Admired_Companies <dbl>, Best_Companies_to_Work_For <dbl>,
## #   Number_of_employees <dbl>, Revenues_M <dbl>, Profits_M <dbl>,
## #   Assets_M <dbl>, Headquarters_City <chr>, Headquarters_State <chr>,
## #   Company_Type <dbl>, Footnote <chr>, MarketCap_Updated_M <dbl>

1.3. Estimaciones multivariadas

Las estimaciones multivariadas en este estudio permiten analizar el comportamiento conjunto de las variables empresariales, facilitando una mejor comprensión de cómo los factores clave como ingresos, ganancias, activos y número de empleados interactúan entre sí para influir en el rendimiento empresarial y su posición en el ranking Fortune 1000.

Este análisis multivariado se basa en vectores y matrices que capturan aspectos fundamentales de las empresas, tales como sus promedios, variabilidad y las correlaciones entre estas métricas empresariales.

El vector de medias en este análisis muestra el valor promedio esperado de cada métrica empresarial, ofreciendo un panorama general sobre el desempeño promedio de las compañías de las lista. Por otro lado, la matriz de varianzas y covarianzas revela una perspectiva detallada sobre la dispersión y las relaciones entre las métricas financieras y operativas de las empresas.

1.4. Planteamiento y Desarrollo

Con base en las pestañas Vector de Medias y Boxplots, se observa que los datos registrados tienden a agruparse en la parte inferior del rango. Esto se debe a la presencia de observaciones atípicas que amplían el rango y afectan la normalidad de la distribución, generando sesgos. Este fenómeno ocurre porque dentro del ranking existen empresas con un poder significativamente superior al resto, lo que genera valores muy dispersos. Estas variaciones drásticas reflejan las diferencias entre pequeñas y grandes empresas, dependiendo de su posición en el ranking Fortune.

Las variables (número de empleados (Number_of_employees?), ingresos (Revenues_M?), ganancias (Profits_M?), activos (Assets_M?) y capitalización de mercado (MarketCap_Updated_M?)) no presentan una distribución normal. Como se mencionó anteriormente, existe una concentración de valores en los extremos inferiores, existiendo valores altos exxtendiendo la cola lo que genera un sesgo hacia la derecha, siendo esto normal en este contexto por las razones anteriores.

Con base en la matriz de varianza-covarianza, podemos interpretar lo siguiente:

Varianzas (diagonal principal): La varianza de cada variable representa la dispersión de los datos respecto a su media. Los valores observados indican:

Number_of_employees (9.98e+08): Refleja la variabilidad en el número de empleados entre las empresas. Revenues_M (3.53e+10): Muestra la dispersión de los ingresos (en millones), indicando una gran diferencia entre empresas. Profits_M (2.25e+07): Representa la variabilidad en las ganancias, mostrando cómo fluctúan los beneficios entre empresas. Assets_M (4.83e+10): Indica la dispersión en el total de activos, lo que evidencia la diversidad en los recursos financieros de las empresas. MarketCap_Updated_M (7.39e+12): Refleja una gran variabilidad en la capitalización de mercado, lo que es esperable debido a la amplia diferencia en los valores de mercado entre empresas.

En general, mientras mayor sea el valor de la varianza, más dispersa es la variable en los datos.

Covarianzas (relaciòn entre variables):

Número de empleados vs Ingresos (3.35e+09): Relación positiva fuerte. Las empresas con más empleados tienden a generar mayores ingresos.

Ingresos (Revenues_M) vs Ganancias (Profits_M) (2.12e+07): Relación positiva moderada. Empresas con mayores ingresos suelen tener mayores ganancias, aunque con variabilidad en los márgenes de beneficio.

Ganancias (Profits_M) vs Activos (Assets_M) (7.14e+09): Relación positiva moderada. Empresas con más activos suelen generar mayores ganancias.

Activos (Assets_M) vs MarketCap_Updated_M (5.03e+12): Relación positiva fuerte. Empresas con más activos tienden a estar mejor valoradas en el mercado.

En conclusión, las relaciones positivas observadas reflejan que las variables están fuertemente asociadas entre sí, lo cual es consistente con el comportamiento que presentaba en las pestañas Vector de Medias y Boxplots.

Con base en la matriz de correlaciones, se observa que las relaciones entre las variables cuantitativas analizadas presentan distintos grados de asociación lineal, desde relaciones débiles hasta moderadamente fuertes. A continuación, se analizan los principales coeficientes de correlación:

Número de empleados y Ingresos(Revenues_M) (0.728): Existe una correlación positiva moderada-alta, lo que indica que las empresas con más empleados tienden a generar mayores ingresos. Esta relación es consistente con el hecho de que empresas más grandes suelen tener operaciones más extensas.

Ingresos(Revenues_M) y ganancias(Profits_M) (0.658): Relación positiva moderada. Empresas con mayores ingresos suelen tener mayores ganancias.

ganancias(Profits_M) y capitalizaciòn de mercado(MarketCap_Updated_M)(0.808): Esta es la correlación más alta de la matriz, lo que refleja que las ganancias están estrechamente relacionadas con la valoración de mercado. Las empresas más rentables tienden a ser más valoradas por los inversores.

activos(Assets_M) y MarketCap_Updated_M (0.170): Relación positiva débil. A pesar de que los activos contribuyen al valor de una empresa, la baja correlación sugiere que otros factores, como ingresos o ganancias, tienen mayor peso en la capitalización de mercado.

Número de empleados y (ganancias)Profits_M (0.339): Relación positiva débil. Esto indica que un mayor número de empleados no necesariamente se traduce en mayores ganancias, probablemente debido a diferencias en la eficiencia operativa o en el modelo de negocio de las empresas.

activos(Assets_M) y Ingresos(Revenues_M) (0.381): Relación positiva débil-moderada. Empresas con mayores ingresos suelen tener más activos, aunque la relación no es tan fuerte.

Vector de medias y Bloxplots

apply(cdd_ranking_fortune_reescrito[, -c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)], 2, mean)
## Number_of_employees          Revenues_M           Profits_M            Assets_M 
##           36611.758           20965.064            1863.432          637572.191 
## MarketCap_Updated_M 
##          519773.910
cdd_ranking_fortune_reescrito_reducido = cdd_ranking_fortune_reescrito[,-c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)]
nombres_boxplots <- c("Number of employees", "Revenues M", "Profits", "Assets M", "MarketCap Updated M")
par(mfrow = c(1, ncol(cdd_ranking_fortune_reescrito_reducido)))
invisible(lapply(1:ncol(cdd_ranking_fortune_reescrito_reducido), function(i) {boxplot(cdd_ranking_fortune_reescrito_reducido[, i], main = nombres_boxplots[i])}))

Matriz de varianza-covariancia

round(cov(cdd_ranking_fortune_reescrito[, -c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)]), 2)
##                     Number_of_employees  Revenues_M   Profits_M     Assets_M
## Number_of_employees          9980208920  3533034712   225078324 4.837928e+10
## Revenues_M                   3533034712  2360921146   212445795 5.036195e+10
## Profits_M                     225078324   212445795    44139441 7.149239e+09
## Assets_M                    48379280347 50361954810  7149239081 7.406842e+12
## MarketCap_Updated_M         73944416783 58879309199 12095938730 1.041580e+12
##                     MarketCap_Updated_M
## Number_of_employees        7.394442e+10
## Revenues_M                 5.887931e+10
## Profits_M                  1.209594e+10
## Assets_M                   1.041580e+12
## MarketCap_Updated_M        5.072022e+12

Matriz de correlaciones

round(cor(cdd_ranking_fortune_reescrito[, -c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)]), 3)
##                     Number_of_employees Revenues_M Profits_M Assets_M
## Number_of_employees               1.000      0.728     0.339    0.178
## Revenues_M                        0.728      1.000     0.658    0.381
## Profits_M                         0.339      0.658     1.000    0.395
## Assets_M                          0.178      0.381     0.395    1.000
## MarketCap_Updated_M               0.329      0.538     0.808    0.170
##                     MarketCap_Updated_M
## Number_of_employees               0.329
## Revenues_M                        0.538
## Profits_M                         0.808
## Assets_M                          0.170
## MarketCap_Updated_M               1.000

1.5. Gráficas multivariadas

Las gráficas multivariadas permiten una representación visual del comportamiento conjunto de las variables empresariales, lo cual es esencial para detectar patrones, relaciones y posibles agrupaciones dentro del conjunto de datos del Ranking Fortune 1000. A través de técnicas como el análisis de componentes principales (PCA) y los gráficos de correlación, podemos observar cómo se distribuyen las empresas en función de sus principales características, como ingresos, activos y número de empleados.

Las gráficas multivariadas han sido fundamentales para entender las dinámicas entre las variables empresariales clave. La capacidad de visualizar las relaciones entre estas métricas nos permite identificar grupos de empresas con características similares y su rendimiento en el mercado. Este tipo de visualización es una herramienta poderosa para la toma de decisiones empresariales, ya que resalta las áreas donde las empresas pueden mejorar su competitividad.

En el diagrama de dispersión de distribución y correlación se destacan las relaciones más significativas entre las variables analizadas. La variable ((Profits?)) muestra una fuerte influencia sobre ((MarketCap_Updated_M?)), con una correlación de 0.808, siendo esta la relación más alta observada entre todas las variables. Esto sugiere que las empresas más rentables suelen tener una mayor valoración de mercado.

Asimismo, se observa una correlación alta entre ((Number_of_employees?)) y ((Revenues_M?)), con un coeficiente de 0.728. Esto indica que las empresas con un mayor número de empleados tienden a generar más ingresos, lo que resalta la importancia de la fuerza laboral en la capacidad productiva de las compañías.

Por otro lado, la relación entre ((Profits?)) y ((Revenues_M?)), con una correlación de 0.658, muestra que mayores ingresos tienden a estar asociados con mayores ganancias, aunque otros factores (como los costos operativos) también influyen.

En general, estas correlaciones reflejan que, si bien un mayor número de empleados puede impulsar los ingresos de una empresa, no necesariamente garantiza mayores ganancias.

Cuando se observa el Diagrama Conjunto de Dispersión, Distribución y Correlaciones [Profitable], se puede apreciar que las relaciones entre las variables cuantitativas analizadas reflejan patrones significativos, aunque con diferencias en su intensidad. Comparativamente, la variable Profitable (Rentable o No Rentable) no parece ser un factor determinante que explique la variabilidad en ingresos, ganancias o activos de las empresas. Sin embargo, se identifican correlaciones relevantes entre variables financieras clave, como la fuerte relación entre Revenues_M y Number_of_employees (Corr: 0.837), así como entre Profits_M y MarketCap_Updated_M (Corr: 0.427). Estas relaciones destacan que factores operativos y financieros específicos tienen un impacto directo en el desempeño global de las empresas, aunque no necesariamente están determinados por su clasificación como rentables o no rentables. por otro laddo los valores bajos o cercanos a cero (ej. correlación con MarketCap_Updated_M: -0.027) sugieren que los activos no están fuertemente relacionados de manera lineal con las otras variables, lo que puede deberse a que los activos están diversificados o no directamente vinculados a los ingresos y ganancias. En general, la categorización por Profitable muestra una influencia limitada frente a la complejidad de las dinámicas financieras y operativas representadas en el conjunto de datos.

En el diagrama de Estrellas y en el diagrama de las Caras de Chernoff se puede concluir de igual manera, la visualización de los datos no muestra una clara agrupación entre las empresas según sus características financieras (como el número de empleados, ingresos, ganancias, activos, y capitalización de mercado). Esto sugiere que no se identifican patrones o similitudes claras entre las compañías que puedan clasificarse en grupos bien definidos. La dispersión de las caras en el gráfico refleja que las diferencias entre los valores de las variables no son lo suficientemente consistentes como para formar agrupaciones evidentes en los datos.

No obstante, si existieran agrupaciones, se podrían observar algunas similitudes entre ciertos pares de caras, como por ejemplo:

Las caras (1, 3, 7, 8, 9, 10) y (2, 5) podrían compartir características similares, pero en última instancia no son completamente iguales debido a diferencias específicas en sus rasgos faciales, como la estructura del rostro o la forma del cabello.

diagrama conjunto de dispersion; Distribuciòn y correlaciòn

ggpairs(cdd_ranking_fortune_reescrito[, -c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)])

diagrama conjunto de dispersion; Distribuciòn y correlaciòn [Profitable]

cdd_ranking_fortune_reescrito$Profitable <-  factor(cdd_ranking_fortune_reescrito$Profitable, levels = c(0,1), labels = c("NR", "R"))

set.seed(20050326)
ccd_ranking_fortune_reescrito_muestreo = cdd_ranking_fortune_reescrito [sample(1:nrow(cdd_ranking_fortune_reescrito),50), -c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)]

ggpairs(ccd_ranking_fortune_reescrito_muestreo, columns = c(1:5), aes(alpha = 0.5), color = "blue", upper = list(continuous = wrap("cor", size = 2.5)))
## Warning in warn_if_args_exist(list(...)): Extra arguments: "color" are being
## ignored.  If these are meant to be aesthetics, submit them using the 'mapping'
## variable within ggpairs with ggplot2::aes or ggplot2::aes_string.

diagrama de estrellas

set.seed(780728)
cdd_ranking_fortune_reescrito_muestreo <- cdd_ranking_fortune_reescrito[sample(1:nrow(cdd_ranking_fortune_reescrito), 10), -c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)]
stars(cdd_ranking_fortune_reescrito_muestreo, len = 1, cex = 0.4, key.loc = c(10, 2), draw.segments = TRUE)

caras de chernoff

set.seed(780728)
cdd_ranking_fortune_reescrito_muestreo <- cdd_ranking_fortune_reescrito[sample(1:nrow(cdd_ranking_fortune_reescrito), 10), -c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)]
faces(cdd_ranking_fortune_reescrito_muestreo)

## effect of variables:
##  modified item       Var                  
##  "height of face   " "Number_of_employees"
##  "width of face    " "Revenues_M"         
##  "structure of face" "Profits_M"          
##  "height of mouth  " "Assets_M"           
##  "width of mouth   " "MarketCap_Updated_M"
##  "smiling          " "Number_of_employees"
##  "height of eyes   " "Revenues_M"         
##  "width of eyes    " "Profits_M"          
##  "height of hair   " "Assets_M"           
##  "width of hair   "  "MarketCap_Updated_M"
##  "style of hair   "  "Number_of_employees"
##  "height of nose  "  "Revenues_M"         
##  "width of nose   "  "Profits_M"          
##  "width of ear    "  "Assets_M"           
##  "height of ear   "  "MarketCap_Updated_M"

1.6. Normalidad multivariada

Es posible analizar o determinar la distribución multivariada de un conjunto de datos mediante métodos descriptivos, como los gráficos, o inferenciales, como las pruebas estadísticas. Mientras que los procedimientos inferenciales permiten obtener conclusiones más generalizables, los gráficos resultan útiles como soporte para la interpretación de los resultados.

En este apartado se aborda la aplicación de procedimientos inferenciales para verificar si el conjunto de datos de trabajo, respecto a sus variables numéricas, sigue una distribución normal multivariada (DNM). Las pruebas de normalidad multivariada (PNM) que se aplicarán son: Mardia, Henze-Zirkler, Doornik-Hansen y Royston. Estas pruebas de normalidad se realizan bajo un nivel de significancia determinado \(\alpha = 0.05\) y a las hipótesis:\[H_0: \text {Las variables tienen una DNM}\] \[H_1: \text {Las variables NO tienen una DNM}\]

La prueba de Mardia se fundamenta en las extensiones de asimetría y curtosis, el cuadrado de la distancia de Mahalanobis, el número de variables \(p\) a analizar y el número de registros \(n\). Asimismo, se considera que la estadística de la prueba para la asimetría sigue una distribución \(\chi^2\), mientras que la estadística para la curtosis se distribuye de manera aproximada de forma normal.

La prueba de Henze-Zirkler se basa en la distancia funcional, ya que si el conjunto de datos sigue una distribución normal multivariada, el estadístico de la prueba se distribuye de manera aproximada como una lognormal, con parámetros de media \(\mu\) y varianza \(\sigma^2\).

La prueba de Doornik-Hansen se basa en la asimetría y la curtosis de un conjunto de datos multivariados, los cuales se transforman para asegurar la independencia. Se considera más potente que la prueba de Shapiro-Wilk en casos multivariados. El estadístico de la prueba se define como la suma de las transformaciones al cuadrado de la asimetría y la curtosis, y sigue aproximadamente una distribución \(\chi^2\).

Por otro lado, la prueba de Royston utiliza las pruebas de Shapiro-Wilk o Shapiro-Francia para evaluar la normalidad multivariada. Si la curtosis es mayor que 3, se emplea Shapiro-Francia para distribuciones leptocúrticas, mientras que para distribuciones platicúrticas se utiliza Shapiro-Wilk. Los parámetros en esta prueba se obtienen mediante aproximaciones polinomiales.

1.7.Planteamiento y Desarrollo

se realizó una prueba estadística de normalidad multivariada utilizando un nivel de significancia \(\alpha = 0.05\), con el objetivo de determinar si las variables métricas provienen de una población con distribución normal multivariada. Las variables numéricas analizadas son: Number_of_employees, Revenues_M, Profits_M, Assets_M y MarketCap_Updated_M.

La navegación a través de los resultados muestra que el conjunto de datos, en relación con sus variables numéricas, no se distribuye normalmente de forma multivariada. En particular:

La PNM de Mardia La PNM de Mardia muestra que los \(p-values\) para la asimetría (skewness) y la curtosis (kurtosis) son iguales a 0, lo que es menor que el nivel de significancia (\(\alpha = 0.05\)). Esto indica que se rechaza la hipótesis nula de normalidad multivariada, lo que sugiere que los datos no provienen de una distribución normal multivariada. Este resultado puede observarse en la salida de la prueba de Mardia.

La PNM de Henze-Zirkler muestra que el p-value es 0, lo cual es menor que el nivel de significancia (\(\alpha = 0.05\)). Esto implica que se rechaza la hipótesis nula de normalidad multivariada, lo que sugiere que los datos no siguen una distribución normal multivariada. Este resultado indica que no se puede asumir que las variables del conjunto de datos provienen de una distribución normal multivariada, y que es necesario considerar otros métodos para análisis y modelado.

Este resultado también es consistente con los resultados obtenidos de las otras pruebas de normalidad (como la de Mardia), donde también se concluyó que los datos no son multivariadamente normales.

La PNM de Doornik-Hansen muestra que el p-value es 0, lo cual es menor que el nivel de significancia (\(\alpha = 0.05\)). Esto indica que se rechaza la hipótesis nula de normalidad multivariada, lo que sugiere que los datos no siguen una distribución normal multivariada.

Este resultado es consistente con los obtenidos en las pruebas anteriores (Mardia y Henze-Zirkler), que también indicaron que los datos no presentan normalidad multivariada. La prueba de Doornik-Hansen refuerza esta conclusión, ya que un p-value de 0 implica una fuerte evidencia en contra de la normalidad multivariada.

En resumen, a partir de la prueba de Doornik-Hansen, se concluye que los datos no provienen de una distribución normal multivariada, y, por lo tanto, no es apropiado suponer que las variables en el conjunto de datos siguen una distribución normal, pero donde los datos a su vez tienen sentido con el contexto descrito en la descrpciòn de los datos ya que hay compañias con valores demasiados altos generando datos atipicos y ampliando el rango de escala.

PNM Mardia

mvn(cdd_ranking_fortune_reescrito[,-c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)], mvnTest="mardia")
## $multivariateNormality
##              Test        Statistic p value Result
## 1 Mardia Skewness 105592.024206345       0     NO
## 2 Mardia Kurtosis 1804.87201732215       0     NO
## 3             MVN             <NA>    <NA>     NO
## 
## $univariateNormality
##               Test            Variable Statistic   p value Normality
## 1 Anderson-Darling Number_of_employees  200.2158  <0.001      NO    
## 2 Anderson-Darling     Revenues_M       200.7217  <0.001      NO    
## 3 Anderson-Darling      Profits_M       205.0434  <0.001      NO    
## 4 Anderson-Darling      Assets_M        263.3239  <0.001      NO    
## 5 Anderson-Darling MarketCap_Updated_M  262.0699  <0.001      NO    
## 
## $Descriptives
##                        n       Mean     Std.Dev   Median    Min      Max
## Number_of_employees 1000  36611.758   99900.996  14000.0     28  2100000
## Revenues_M          1000  20965.064   48589.311   7090.5   2489   648125
## Profits_M           1000   1863.432    6643.752    541.4 -10298    96995
## Assets_M            1000 637572.191 2721551.400 128476.5   3613 43254370
## MarketCap_Updated_M 1000 519773.910 2252115.037 113350.0      0 35943090
##                          25th      75th      Skew  Kurtosis
## Number_of_employees  6718.000  30740.75 12.944897 231.02447
## Revenues_M           3968.375  16207.65  6.673341  59.48102
## Profits_M             154.500   1398.35  9.455872 112.43224
## Assets_M            53429.500 375801.25 11.123623 141.88549
## MarketCap_Updated_M 41207.500 357562.50 11.821698 159.33762

PNM Henze-Zirkler

mvn(cdd_ranking_fortune_reescrito[,-c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)], mvnTest="hz")
## $multivariateNormality
##            Test       HZ p value MVN
## 1 Henze-Zirkler 458.3821       0  NO
## 
## $univariateNormality
##               Test            Variable Statistic   p value Normality
## 1 Anderson-Darling Number_of_employees  200.2158  <0.001      NO    
## 2 Anderson-Darling     Revenues_M       200.7217  <0.001      NO    
## 3 Anderson-Darling      Profits_M       205.0434  <0.001      NO    
## 4 Anderson-Darling      Assets_M        263.3239  <0.001      NO    
## 5 Anderson-Darling MarketCap_Updated_M  262.0699  <0.001      NO    
## 
## $Descriptives
##                        n       Mean     Std.Dev   Median    Min      Max
## Number_of_employees 1000  36611.758   99900.996  14000.0     28  2100000
## Revenues_M          1000  20965.064   48589.311   7090.5   2489   648125
## Profits_M           1000   1863.432    6643.752    541.4 -10298    96995
## Assets_M            1000 637572.191 2721551.400 128476.5   3613 43254370
## MarketCap_Updated_M 1000 519773.910 2252115.037 113350.0      0 35943090
##                          25th      75th      Skew  Kurtosis
## Number_of_employees  6718.000  30740.75 12.944897 231.02447
## Revenues_M           3968.375  16207.65  6.673341  59.48102
## Profits_M             154.500   1398.35  9.455872 112.43224
## Assets_M            53429.500 375801.25 11.123623 141.88549
## MarketCap_Updated_M 41207.500 357562.50 11.821698 159.33762

PNM Doornik-Hansen

mvn(cdd_ranking_fortune_reescrito[,-c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)], mvnTest="dh")
## $multivariateNormality
##             Test        E df p value MVN
## 1 Doornik-Hansen 3554.996 10       0  NO
## 
## $univariateNormality
##               Test            Variable Statistic   p value Normality
## 1 Anderson-Darling Number_of_employees  200.2158  <0.001      NO    
## 2 Anderson-Darling     Revenues_M       200.7217  <0.001      NO    
## 3 Anderson-Darling      Profits_M       205.0434  <0.001      NO    
## 4 Anderson-Darling      Assets_M        263.3239  <0.001      NO    
## 5 Anderson-Darling MarketCap_Updated_M  262.0699  <0.001      NO    
## 
## $Descriptives
##                        n       Mean     Std.Dev   Median    Min      Max
## Number_of_employees 1000  36611.758   99900.996  14000.0     28  2100000
## Revenues_M          1000  20965.064   48589.311   7090.5   2489   648125
## Profits_M           1000   1863.432    6643.752    541.4 -10298    96995
## Assets_M            1000 637572.191 2721551.400 128476.5   3613 43254370
## MarketCap_Updated_M 1000 519773.910 2252115.037 113350.0      0 35943090
##                          25th      75th      Skew  Kurtosis
## Number_of_employees  6718.000  30740.75 12.944897 231.02447
## Revenues_M           3968.375  16207.65  6.673341  59.48102
## Profits_M             154.500   1398.35  9.455872 112.43224
## Assets_M            53429.500 375801.25 11.123623 141.88549
## MarketCap_Updated_M 41207.500 357562.50 11.821698 159.33762

Fase 2 [Componentes Principales]

En términos generales, esta segunda etapa de estudio mostrará cálculos, visualizaciones e interpretaciones con base en el conjunto de datos tratado del ranking fortune 1000 2024, pero ahora desde un enfoque de análisis de componentes principales sobre las variables cuantitativas, que incluirá: selección, calidad de representación, contribuciones e interpretación.

Recuérdese que el conjunto de datos de trabajo es descrito en la [fase 1]descripciòn de los datos.

Por último, este trabajo fue procesado con R version 4.4.1 (2024-06-14 ucrt) mediado por RStudio 2022.12.0 Build 353 en una plataforma x86_64-w64-mingw32. Además, por su naturaleza de publicación en línea y para cumplir con el requisito temporal de entrega, será actualizado, como máximo, hasta las 11:59 p.m. del martes 3 de diciembre de 2024.

2.1. Objetivos

El objetivo principal de esta fase es descomponer las relaciones entre múltiples variables a través del análisis de Componentes Principales (ACP). Esto permitirá identificar las dimensiones clave que explican la mayor parte de la variabilidad de los datos, simplificando su interpretación sin perder información significativa.

El análisis de Componentes Principales utiliza transformaciones matemáticas para convertir variables originales correlacionadas en nuevas variables independientes (componentes principales). Estas nuevas dimensiones facilitan la visualización y el análisis de grandes conjuntos de datos, al tiempo que maximizan la varianza explicada por cada componente. En esta sección, se abordará la selección de componentes, la evaluación de su calidad, y su interpretación a través de gráficos como biplots y círculos de correlaciones.

2.2. Selección de Componentes

Como señalan Díaz Morales y Morales Rivera (2012), el Análisis de Componentes Principales (ACP) permite reorganizar un conjunto de datos multivariado al reducir el número de variables, sin requerir suposiciones específicas sobre la distribución de probabilidad de estas. Esta reducción se alcanza mediante la creación de combinaciones lineales de las variables originales, diseñadas para captar la mayor variabilidad posible en los datos. De este modo, el ACP genera nuevas variables, denominadas componentes principales, que presentan independencia estadística y ausencia de correlación, siempre bajo el supuesto de normalidad.

La selección de componentes es un paso fundamental en el análisis multivariado, ya que permite reducir la complejidad de los datos mientras se conserva la información más relevante. A través de herramientas como el Análisis de Componentes Principales (ACP), matrices de correlaciones y gráficos interpretativos, es posible identificar las dimensiones principales que explican la mayor parte de la variabilidad en los datos, facilitando una interpretación más clara y efectiva.

2.3. Planteamiento y Desarrollo

A partir de las variables cuantitativas del conjunto de datos descrito en la Sección 1.2, se requiere inicialmente determinar el porcentaje de varianza explicado por cada dimensión tras realizar el Análisis de Componentes Principales (ACP). Posteriormente, con base en el autovalor promedio o mediante un gráfico de sedimentación, se debe decidir cuántos componentes conservar.

La Matriz ACP muestra cinco dimensiones, donde la primera dimensión retiene el 57.85% de la varianza total, seguida por la segunda dimensión con un 17.84%, lo que resulta en un porcentaje acumulado del 75.69% de la variabilidad explicada. La tercera dimensión explica un 17.40% adicional, alcanzando un porcentaje acumulado del 93.08%. Las últimas dos dimensiones (dimensiones 4 y 5) explican un 4.32% y un 2.60%, respectivamente, lo que lleva al 100% de la varianza explicada por el conjunto de las cinco dimensiones.

La Matriz de Correlaciones ayuda a describir las relaciones entre las variables que conforman la dimensión 1 y 2. Según esta matriz, se observa que las correlaciones más altas son entre las variables Profits_M y MarketCap_Updated_M con una correlación de 0.808, Number_of_employees y Revenues_M con 0.728, y Profits_M y Revenues_M con 0.658. Estas relaciones son esperadas dentro del contexto del análisis de variables económicas, ya que ingresos y ganacias son factores comúnmente relacionados con el tamaño de la empresa y su capitalización de mercado. En particular, las correlaciones más altas indican que estas variables probablemente contribuyan de manera significativa a las combinaciones lineales que definen las dimensiones 1 y 2. Además, se observa que las correlaciones entre Profits_M y Revenues_M también son altas, lo que es lógico dentro de un análisis de desempeño financiero, dado que las ganancias suelen estar estrechamente relacionados con los ingresos de la empresa.

La pestaña de Valores y Vectores Propios muestra los objetos calculados a partir de la matriz de correlaciones del conjunto de datos. En este sentido, se garantiza que la suma de los valores propios sea igual a la dimensión de dicha matriz y a la variabilidad total del conjunto, lo que permite calcular las proporciones de retención de variabilidad de manera inmediata.

Estos valores propios indican cuánta varianza es explicada por cada componente. La Comp.1 tiene el valor propio más alto (2.8924264), lo que indica que es la componente que explica la mayor parte de la variabilidad en el conjunto de datos. La Comp.2 y Comp.3, con valores propios de 0.8919076 y 0.8698068, respectivamente, siguen en importancia, aunque explican menos variabilidad. Las Comp.4 y Comp.5 tienen valores propios mucho más bajos (0.2157810 y 0.1300782), lo que sugiere que estas componentes explican una pequeña proporción de la varianza total.

Además, la matriz de vectores propios define los coeficientes de las combinaciones lineales de cada componente en relación con las variables del conjunto de datos, proporcionando información adicional sobre cómo se combinan las variables originales para formar las componentes principales.

En el grafico de Correlaciones Comparadas ilustra las correlaciones entre las variables originales (Number_of_employees, Revenues_M, Profits_M, etc.) y las componentes principales (Comp.1 a Comp.5). Observamos que:

La primera componente tiene altas correlaciones con variables relacionadas con ingresos y ganancias (Revenues_M, Profits_M), indicando que captura una dimensión económica significativa. Las correlaciones más débiles en componentes superiores (Comp.4 y Comp.5) reflejan que estas dimensiones adicionales aportan información menos relevante.

El Gráfico de Cattell, también conocido como el gráfico de sedimentación o formas de codo, muestra los valores propios (eigenvalues) de las componentes principales. Este gráfico identifica el punto de inflexión donde la pendiente entre valores propios disminuye significativamente. En este caso:La primera componente explica el 57.8% de la varianza total, lo que destaca su importancia en la captura de la mayor parte de la información del conjunto de datos.

Las siguientes componentes muestran un descenso progresivo en la varianza explicada, con la segunda y tercera componentes capturando 17.8% y 17.4%, respectivamente.

El punto de inflexión se observa después de la primera componente, sugiriendo que esta retiene la mayor parte de la información, pero las tres primeras componentes juntas explican un 92% de la varianza acumulada, lo que las hace relevantes para capturar variaciones adicionales.

El Gráfico de Cattell-Kaiser combina la regla de Kaiser, que recomienda retener solo las componentes con valores propios mayores a 1: En este análisis, solo las primeras dos componentes cumplen con este criterio. Esto sugiere que retener estas componentes es suficiente para capturar la mayor parte de la variabilidad.

Sin embargo, al considerar la varianza acumulada, se observa que las tres primeras componentes juntas capturan la mayoría de la información del sistema, siendo relevantes para describir las relaciones entre variables como Revenues, Profits, y MarketCap en el contexto del ranking fortune explicado en la Fase 1 [Descripciones Multivariantes].

El análisis PCA permite reducir las dimensiones del dataset conservando la mayor parte de la variabilidad. Según el gráfico de Cattell y la regla de Kaiser, se recomienda retener al menos las tres primeras componentes, ya que explican un 92% de la varianza total, lo cual es crucial para describir patrones y tendencias clave en el conjunto de datos, esto asegura un balance entre simplificación y retención de información en el análisis de las empresas del ranking Fortune.

Matriz ACP

get_eigenvalue(PCA(cdd_ranking_fortune_reescrito[,-c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)], ncp = 4, scale.unit = TRUE, graph = F))
##       eigenvalue variance.percent cumulative.variance.percent
## Dim.1  2.8924264        57.848528                    57.84853
## Dim.2  0.8919076        17.838152                    75.68668
## Dim.3  0.8698068        17.396136                    93.08282
## Dim.4  0.2157810         4.315621                    97.39844
## Dim.5  0.1300782         2.601564                   100.00000

Matriz de correlaciones

round(cor(cdd_ranking_fortune_reescrito[,-c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)]),3)
##                     Number_of_employees Revenues_M Profits_M Assets_M
## Number_of_employees               1.000      0.728     0.339    0.178
## Revenues_M                        0.728      1.000     0.658    0.381
## Profits_M                         0.339      0.658     1.000    0.395
## Assets_M                          0.178      0.381     0.395    1.000
## MarketCap_Updated_M               0.329      0.538     0.808    0.170
##                     MarketCap_Updated_M
## Number_of_employees               0.329
## Revenues_M                        0.538
## Profits_M                         0.808
## Assets_M                          0.170
## MarketCap_Updated_M               1.000

Valores y Vectores Propios

princomp(cdd_ranking_fortune_reescrito[,-c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)], cor = TRUE)$sdev^2
##    Comp.1    Comp.2    Comp.3    Comp.4    Comp.5 
## 2.8924264 0.8919076 0.8698068 0.2157810 0.1300782

Correlaciones Comparadas

par(mfrow=c(1,2))
corrplot::corrplot(cor(cdd_ranking_fortune_reescrito[,-c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)]), method = "color", type = "upper", number.cex = 0.4)
corrplot::corrplot(cor(princomp(cdd_ranking_fortune_reescrito[,-c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)], cor = TRUE)$scores), method = "color", type = "upper", number.cex = 0.4)

Gráfico de Cattell

fviz_eig(PCA(cdd_ranking_fortune_reescrito[,-c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)], scale.unit = T, graph = F), addlabels = T, ylim=c(0,90), main = "")

Gráfico de Cattell-Kaiser

scree(cdd_ranking_fortune_reescrito[,-c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)],factors = FALSE, pc = TRUE, main ="")

2.4. Calidad de Representación

Con base en la referencia de (Díaz Morales & Morales Rivera, 2012),se confirma que, tras reducir la dimensionalidad del conjunto de datos y entender que sus variables estandarizadas se representan gráficamente como proyecciones de una hiperesfera de correlaciones, es esencial iniciar la interpretación de las componentes a partir de esas correlaciones. Posteriormente, se debe evaluar la calidad de las representaciones obtenidas, considerando la reducción dimensional aplicada al conjunto de datos y su impacto en las variables.

Es necesario evaluar la calidad de la representación de las variables cuantitativas en relación con el número de dimensiones calculadas que capturan la mayor proporción de variabilidad; para más detalles, consultar la sección 2.3.

2.5 Desarrollo del Análisis.

Explorar las pestañas revela que reducir la dimensionalidad del conjunto de datos permite analizar la calidad de la representación, usando una escala de contribuciones relativas.

El Círculo de Correlaciones expresa que se pueden identificar patrones significativos entre las variables originales en el marco de una selección de componentes principales. En este caso, la dimensión 1 (Dim1), que explica el 57.8% de la varianza, muestra una correlación positiva con variables como MarketCap_Updated_M, Revenues_M, y Profits_M, las cuales están orientadas hacia este eje y cercanas a la frontera del círculo unitario. Esto indica que estas variables contribuyen significativamente a la construcción de Dim1, probablemente capturando características relacionadas con la magnitud financiera de las empresas.

Por otro lado, la dimensión 2 (Dim2), que explica el 17.8% de la varianza, muestra una correlación positiva con la variable Number_of_employees, que está más alineada con este eje. Esto sugiere que Dim2 podría estar capturando características relacionadas con la estructura laboral o el tamaño de las empresas en términos de su personal.

En conjunto, el gráfico refleja que las dimensiones principales diferencian entre aspectos financieros y operativos de las empresas, con las variables más cercanas al círculo contribuyendo más significativamente a las respectivas dimensiones.

la Matriz de Representación muestra que las variables Revenues_M, Profits_M y MarketCap_Updated_M tienen altos valores de coseno cuadrado en relación con la Dimensión 1 (0.793, 0.762 y 0.6233066 respectivamente), lo que indica que están fuertemente asociadas con este componente y aportan significativamente a él. Esto sugiere que estas variables financieras contribuyen mayormente a la explicación de la variabilidad capturada por esta dimensión.

Number_of_employees muestra una representación equilibrada entre la Dimensión 1 (0.466) y la Dimensión 2 (0.47436568), reflejando una contribución compartida entre ambas, pero siendo la que mas aporta en la Dimensiòn 2.

En contraste, variables como Assets_M tiene valores bajos de coseno cuadrado en la Dimensión 1 (0.247 respectivamente), lo que indica que su varianza se distribuye más hacia otras dimensiones. En particular, Assets_M tiene un valor alto de coseno cuadrado en la Dimensión 3 (0.648), lo que sugiere que está mejor representada por este componente.

El gráfico de la Calidad de Representación muestra que las variables están representadas con una alta calidad en relación con las dimensiones principales, especialmente respecto a la dimensión 1, que explica un 57.8% de la varianza. En particular, “MarketCap_Updated_M”, “Profits_M”, y “Assets_M” tienen valores de coseno cuadrado elevados respecto a la dimensión 1, indicando una fuerte asociación con este componente. Esto implica que estas variables están altamente correlacionadas con la componente principal, lo que sugiere su relevancia en la explicación de la variabilidad del modelo.

Por otro lado, la dimensión 2, que explica un 17.8% de la varianza, tiene una representación notable de “Revenues_M” y “Number_of_employees”, destacando su importancia para capturar información adicional que no está contenida en la dimensión principal. Aunque la dimensión 1 es dominante, la dimensión 2 aporta un complemento significativo para interpretar aspectos específicos de estas variables. La escala de colores refuerza este análisis, con valores de coseno cuadrado más altos indicando una mejor calidad de representación para cada variable en su dimensión correspondiente.

Las Coordenadas Individuales permiten identificar los perfiles de los registros empresariales en relación con las dimensiones principales que explican la variabilidad de los datos (componentes 1 y 2). Por ejemplo, en la dimensión 1, los registros 3 y 2 presentan valores positivos extremos (19.38 y 18.69, respectivamente), indicando características similares con una fuerte contribución a esta dimensión, mientras que el registro 6, con un valor bajo (5.27), representa un caso opuesto.

En la dimensión 2, los registros 1 y 2 tienen valores negativos destacados (-17.24 y -9.14, respectivamente), lo que sugiere una proximidad en términos de comportamiento en esta dimensión, mientras que el registro 8, con un valor positivo notable (5.21), muestra una dirección contraria.

Estos patrones reflejan cómo los registros se agrupan o divergen en función de sus contribuciones a las dimensiones principales del análisis PCA.

Cada registro (observación) es proyectado en un espacio de menor dimensión (Dim1, Dim2, etc.), que combina las variables originales según sus relaciones (correlaciones). Por ejemplo, el registro 3, con un valor alto en Dim1 (19.38) y un valor positivo en Dim2 (8.16), probablemente corresponda a una empresa con: Altos valores en “MarketCap_Updated_M”, “Assets_M”, y “Profits_M”. Relativamente altos valores en “Number_of_employees” o “Revenues_M”. En contraste, el registro 1, con valores negativos extremos en Dim2 (-17.24) y valores positivos en Dim1 (17.36), podría representar una empresa con: Altos valores en Dim1 (similar al registro 3) para variables como “MarketCap_Updated_M”. Bajos valores en variables asociadas a Dim2, como “Number_of_employees”.

circulo de correlaciones

fviz_pca_var(PCA(cdd_ranking_fortune_reescrito[,-c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)], scale.unit = T, graph = F),col.var="#3B83BD", repel = T, col.circle = "#CDCDCD", ggtheme = theme_bw())

Matriz de Representación

(get_pca_var(PCA(cdd_ranking_fortune_reescrito[,-c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)], ncp = 6, scale.unit = TRUE, graph = F)))$cos2
##                         Dim.1      Dim.2       Dim.3      Dim.4       Dim.5
## Number_of_employees 0.4663490 0.47436568 0.001032248 0.04654040 0.011712699
## Revenues_M          0.7934610 0.08436528 0.004656148 0.09095052 0.026567044
## Profits_M           0.7624880 0.13385605 0.024728014 0.01601400 0.062913983
## Assets_M            0.2468219 0.09130324 0.648045659 0.01279328 0.001035924
## MarketCap_Updated_M 0.6233066 0.10801735 0.191344727 0.04948283 0.027848529

Calidad de Representación

fviz_pca_var(PCA(cdd_ranking_fortune_reescrito[,-c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)], ncp = 6, scale.unit = TRUE, graph = F), col.var="cos2", gradient.cols=c("#00AFBB","#E7B800","#FC4E07"), repel = TRUE)

Coordenadas Individuales

head((PCA(cdd_ranking_fortune_reescrito[,-c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)], ncp = 6, scale.unit = TRUE, graph = F))$ind$coord, n = 10L)
##        Dim.1       Dim.2       Dim.3      Dim.4      Dim.5
## 1  17.366641 -17.2387665  0.85042736  1.9025812 -0.6881382
## 2  18.693703  -9.1456071 -1.97529389  2.9188144  1.8573850
## 3  19.378676   8.1631344 -8.29123193 -0.3733162  0.4107339
## 4   8.086807  -3.0699667 -0.06732788 -2.5667056  0.8390585
## 5  15.353592   3.2527573 -0.40547017 -4.0058642 -5.6179022
## 6   5.274205  -3.1305586  0.96471482 -3.5191594  1.8912642
## 7   7.524690   0.8471986 -0.34767627 -4.3425802  0.4185129
## 8  14.268447   5.2142553 -4.98576743 -0.9836245 -0.5432927
## 9   2.981068  -1.5698838  0.29359429 -3.3877862  2.2148373
## 10  2.603699  -1.6025040  0.38225993 -3.2038667  2.2174766

2.6. Contribuciones y Biplots

Los autores (Díaz Morales & Morales Rivera, 2012) señalan que la interpretación de los resultados está estrechamente ligada al cálculo de elementos como coordenadas, contribuciones y cosenos cuadrados. Por lo tanto, es esencial que las variables estén bien conceptualizadas y contextualizadas para facilitar su comprensión. En este sentido, analizar la contribución de cada variable a una componente ayuda a interpretar los resultados, mostrando cómo cada una influye en la definición de las componentes generadas. Este análisis se lleva a cabo en esta sección para determinar el aporte de cada variable en la construcción de las componentes.

2.7. Planteamiento y Desarrollo

Basado en las variables cuantitativas del conjunto de datos descrito en la [sección 1.2], se requiere determinar las contribuciones de cada variable en la construcción de las componentes.

La Matriz de Contribuciones muestra cómo cada variable contribuye a la retención de variabilidad en la construcción de cada componente. Los diagramas de barras, que se visualizan en las pestañas desde Contribuciones a D1 hasta Contribuciones a D5, ilustran las contribuciones específicas de las variables para explicar la variabilidad en cada componente. Cada gráfico incluye una línea que indica la contribución media, lo que facilita la identificación de las variables que tienen mayor impacto en la explicación de la variabilidad de los componentes.

Contribuciones a D1:Las variables por encima de la contribución media: Revenues_M, Profits_M, y MarketCap_Updated_M, retienen aproximadamente el 75.34% de la variabilidad del componente 1. Esto sugiere que este componente está principalmente influido por el tamaño financiero y el valor de mercado de las empresas.

Contribuciones a D2:Las variables por encima de la contribución media: Number_of_employees, retiene aproximadamente el 53.2% de la variabilidad del componente 2. Este componente refleja aspectos relacionados con el tamaño laboral.

Contribuciones a D3:La variable que domina significativamente es Assets_M y MarketCap_Updated_M, la cual retienen el 96,50% de la variabilidad del componente 3. Esto indica que el componente 3 está fuertemente relacionado con los activos empresariales y su cotizaciòn en bolsa.

Contribuciones a D4:Las variables por encima de la contribución media son Revenues_M, Number_of_employees y MarketCap_Updated_M, las cuales retienen conjuntamente aproximadamente el 86,65% de la variabilidad del componente 4. Este componente está asociado a la interacción entre ingresos, la potencia de producciòn y capitalización de mercado.

Contribuciones a D5:Las variables más representativas son Profits_M, MarketCap_Updated_M y Revenues_M, que retienen aproximadamente el 90,2% de la variabilidad del componente 5. Esto sugiere que este componente refleja aspectos relacionados con las ganancias, los ingresos empresariales y capitalización de mercado.

Las pestañas de Biplot de Variables y Registros Totales en las categorías Profitable (rentable o no rentable, donde 0 = no rentable y 1 = rentable) muestran, con base en las agrupaciones que esta variable categórica puede establecer, la representación en dimensionalidad reducida en el plano de factores generado por los componentes principales.

En este sentido:

La agrupación con base en Profitable permite observar cómo las empresas rentables (Profitable = 1) tienden a estar más dispersas en el espacio generado por las dimensiones Dim.1 y Dim.2, lo cual sugiere que estas empresas poseen características variadas relacionadas con las variables cuantitativas principales (MarketCap_Updated_M, Profits_M, y Revenues_M). En particular, registros como el 30, 34 y 42 destacan al proyectarse lejos del centro, lo que indica que son casos excepcionales con alta influencia en Dim.1 o Dim.2.

Por otro lado, las empresas no rentables (Profitable = 0) están más concentradas alrededor del origen en este plano factorial, lo que podría sugerir que sus características cuantitativas presentan menores variaciones y están menos asociadas a los factores principales.

En cuanto a las variables, la dimensión Dim.1 (60.9%) está principalmente influida por MarketCap_Updated_M, Profits_M, y Revenues_M, mientras que la dimensión Dim.2 (17.9%) refleja una mayor asociación con Number_of_employees.

Esto sugiere que la rentabilidad de las empresas podría estar principalmente explicada por el tamaño financiero y la capitalización de mercado, mientras que el tamaño laboral tiene un rol más secundario en esta representación.

Matriz de Contribuciones

(get_pca_var(PCA(cdd_ranking_fortune_reescrito[,-c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)], ncp = 6, scale.unit = TRUE, graph = F)))$contrib
##                         Dim.1     Dim.2      Dim.3     Dim.4      Dim.5
## Number_of_employees 16.123106 53.185518  0.1186756 21.568347  9.0043538
## Revenues_M          27.432367  9.458971  0.5353084 42.149449 20.4239054
## Profits_M           26.361534 15.007838  2.8429318  7.421412 48.3662849
## Assets_M             8.533385 10.236850 74.5045522  5.928826  0.7963859
## MarketCap_Updated_M 21.549608 12.110823 21.9985321 22.931966 21.4090701

Contribuciones a D1

fviz_contrib(PCA(cdd_ranking_fortune_reescrito[,-c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 1, top = 10)

Contribuciones a D2

fviz_contrib(PCA(cdd_ranking_fortune_reescrito[,-c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 2, top = 10)

Contribuciones a D3

fviz_contrib(PCA(cdd_ranking_fortune_reescrito[,-c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 3, top = 10)

Contribuciones a D4

fviz_contrib(PCA(cdd_ranking_fortune_reescrito[,-c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 4, top = 10)

Contribuciones a D5

fviz_contrib(PCA(cdd_ranking_fortune_reescrito[,-c(1,2,3,4,5,6,7,8,9,10,11,16,17,18,19)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 5, top = 10)

Biplots de Variables y Registros [filtro:Profitable]

cdd_ranking_fortune_reescrito <- read_excel("C:/CURSOS/4to Semestre/CURSO GdD 2024_ G9/cdd_ranking_fortune_reescrito.xlsx")
View(cdd_ranking_fortune_reescrito)

set.seed(20050325)
cdd_ranking_fortune_Muestra <- cdd_ranking_fortune_reescrito[sample(1:nrow(cdd_ranking_fortune_reescrito), 50),-c(1,2,3,4,6,7,8,9,10,11,16,17,18,19)]

cdd_ranking_fortune_Muestra$Profitable <- as.factor(cdd_ranking_fortune_Muestra$Profitable)

fviz_pca_biplot(PCA(cdd_ranking_fortune_Muestra [,], ncp = 5, scale.unit = TRUE, graph = F, quali.sup = "Profitable"), axes = c(1,2), repel = TRUE, habillage = "Profitable")

Fase 3 [Correspondencias]

3.1. Objetivos

En esta tercera fase del estudio, se presentarán cálculos, visualizaciones e interpretaciones basadas en el conjunto de datos trabajado en la fase 1 y fase 2. Sin embargo, esta fase se enfocará en aplicar análisis de correspondencias simples y múltiples sobre las variables cualitativas, abarcando la construcción de tablas de contingencia y disyuntivas completas, así como la evaluación de calidades de representación, contribuciones e interpretaciones.

3.2. Correspondencias Simples

Según (Aldás & Uriel, 2017),el análisis de correspondencias simple (ACS) tiene como propósito reducir la dimensionalidad de las relaciones entre categorías de dos variables categóricas, representándolas en un espacio multidimensional. Este método permite analizar gráficamente las distancias entre las categorías de las variables, facilitando la interpretación de tablas de contingencia. El número máximo de dimensiones necesarias para explicar dichas relaciones corresponde a uno menos el número de categorías de la variable con menor cantidad de niveles.

Asimismo, el ACS, basado en tablas de contingencia, puede ampliarse para incluir más de dos variables categóricas, lo que se conoce como Análisis de correspondencias múltiples (ACM). Este enfoque utiliza una tabla disyuntiva completa, permitiendo explorar y representar relaciones más complejas entre múltiples variables categóricas.

3.3. Planteamiento y Desarrollo

La navegación a través de las pestañas permite visualizar objetos matriciales y gráficos que fortalecen la interpretación del análisis de correspondencias simple (ACS) aplicado a los pares de variables categóricas seleccionadas del conjunto de datos: ChestPain, Target y Gender.Se realiza el ACS sobre las tres combinaciones posibles entre estas variables, destacando las relaciones y patrones presentes en cada análisis.

La pestaña AC Parejas Totales muestra las combinaciones entre variables categóricas seleccionadas.

En la tabla Profitable vs. FemaleCEO, se observa que la rentabilidad de las empresas no parece estar asociada significativamente a si el CEO es mujer, con 772 de las 851 empresas rentables lideradas por hombres y un p-valor de 0.3606, lo que no permite rechazar la hipótesis de independencia.

En la tabla Profitable vs. Company_Type, se destaca que las empresas privadas tienen mayor rentabilidad, con 820 casos frente a 135 de las empresas públicas, lo que evidencia una asociación significativa (p-valor = 0.0036).

Finalmente, en la tabla FemaleCEO vs. Company_Type, las mujeres CEO predominan en empresas públicas (90 de 97 casos), aunque el análisis sugiere que esta asociación podría no ser confiable debido a los bajos valores esperados en algunas celdas (advertencia en la prueba de hipótesis).

Estos resultados resaltan patrones clave entre rentabilidad, tipo de empresa y liderazgo femenino.

La subpestaña Probabilidades muestra las proporciones relativas entre las combinaciones de variables categóricas analizadas.

En la tabla Profitable vs. FemaleCEO, el \(77.2%\) del total corresponde a empresas rentables lideradas por hombres, mientras que solo el \(1.8%\) de las empresas no rentables tienen una mujer como CEO.

En la tabla Profitable vs. Company_Type, el \(82.0%\) del total corresponde a empresas privadas rentables, mientras que las empresas públicas no rentables representan el \(1.4%\).

Finalmente, en la tabla FemaleCEO vs. Company_Type, el \(86.5%\) del total corresponde a empresas públicas con CEO hombre y solo el \(0.7%\) a empresas privadas lideradas por mujeres.

En la subpestaña Frecuencias [CPF y CPC], se presentan las frecuencias condicionadas por filas (CPF) y por columnas (CPC) derivadas de las tablas de contingencia. Según la matriz CPF de Profitable vs. FemaleCEO, el \(87.92%\) de las empresas no rentables son lideradas por hombres, mientras que el \(90.72%\) de las empresas rentables también tienen un CEO hombre. En la CPC, el \(95.79%\) de las empresas lideradas por hombres son rentables y el \(12.08%\) de las empresas no rentables son lideradas por mujeres.

En la matriz CPF de Profitable vs. Company_Type, el \(90.60%\) de las empresas públicas son rentables, mientras que el \(96.36%\) de las privadas también lo son. En la CPC, el \(13.5%\) de las empresas públicas son rentables frente al \(9.4%\) de las no rentables.

Por último, en la matriz CPF de FemaleCEO vs. Company_Type, el \(95.79%\) de las empresas públicas tienen un CEO hombre, mientras que el \(92.78%\) de las privadas también lo tienen. En la CPC, el \(7.22%\) de las empresas privadas tienen CEO mujer y el \(4.21%\) de las empresas públicas también lo tienen.

Con base en las matrices de frecuencias, se analizan los perfiles condicionados por filas (CPF) y columnas (CPC) de las variables Profitable-FemaleCEO, Profitable-Company_Type y FemaleCEO-Company_Type, los cuales se presentan en la subpestaña Perfiles [CPF y CPC]. Los gráficos permiten comparar las proporciones con un perfil promedio, identificado como “marg”.

Perfiles de Profitable y FemaleCEO

En los perfiles fila (CPF), el \(87.92%\) de las empresas no rentables tienen un CEO hombre, mientras que el \(90.72%\) de las empresas rentables también tienen un CEO hombre. En los perfiles columna (CPC), el \(95.79%\) de las empresas lideradas por hombres son rentables, mientras que solo el \(12.08%\) de las empresas no rentables son lideradas por mujeres. Perfiles de Profitable y Company_Type

En los perfiles fila (CPF), el \(90.60%\) de las empresas públicas son rentables, mientras que el \(96.36%\) de las privadas también lo son.

En los perfiles columna (CPC), el \(13.5%\) de las empresas públicas son rentables frente al \(9.4%\) de las no rentables.

Pero esto no implica que la rentabilidad de las empresas dependa del género del CEO. Tanto las compañías dirigidas por hombres como las dirigidas por mujeres muestran proporciones similares de rentabilidad. La mayor presencia de hombres en estos roles refleja tendencias estructurales de las compañias Perfiles de Profitable vs. Company_Type

El 95.5% de las empresas del ranking son públicas, mientras que solo el 4.5% son privadas. La rentabilidad es notablemente más alta en empresas públicas (85.8%) en comparación con las privadas (68.9%).

Esto indica que el tipo de empresa (pública o privada) puede estar asociado con la rentabilidad, posiblemente debido a factores como acceso a capital, ingresos, ganancias , activos o tamaño de la empresa.

Perfiles de FemaleCEO y Company_Type

En los perfiles fila (CPF), el \(95.79%\) de las empresas públicas tienen CEO hombre, mientras que el \(92.78%\) de las privadas también tienen CEO hombre. En los perfiles columna (CPC), el \(7.22%\) de las empresas privadas tienen CEO mujer y el \(4.21%\) de las empresas públicas también lo tienen.

Esto podría sugerir que las empresas privadas ofrecen ligeramente más oportunidades para que mujeres ocupen cargos de CEO, aunque siguen estando en desventaja frente a los hombres

Con base en las descripciones realizadas, es posible anticipar que los pares de variables categóricas Profitable vs. FemaleCEO y FemaleCEO vs. Company_Type son independientes, mientras que el par Profitable vs. Company_Type muestra dependencia significativa. Este juicio se fundamenta en los resultados de las pruebas de hipótesis, las cuales se visualizaron en la subpestaña correspondiente. Para estas pruebas, y considerando un nivel de significancia \(\alpha = 0.05\), se formularon las siguientes hipótesis: 𝐻\[H_0: \text {Las variables categóricas son independientes}\] \[H_1: \text {las variables categóricas son dependientes}\]

Los resultados de las pruebas de hipótesis indican que Profitable vs. FemaleCEO (\(p = 0.3606\)) y FemaleCEO vs. Company_Type (\(p = 0.2711\)) son independientes, mientras que Profitable vs. Company_Type muestra dependencia significativa (\(p = 0.0036\)). Debido a esto, para los análisis posteriores se decidió trabajar únicamente con el par Profitable vs. Company_Type, dada su fuerte asociación y relevancia en este contexto empresarial.

A través de la pestaña AC Pareja Única, se despliegan las sub-pestañas correspondientes al análisis de correspondencias para el par de variables Profitable-Company_Type.

En la sub-pestaña Contingencias y Residuales [Profitable-Company_Type], se visualizan las tablas de contingencias, valores esperados y residuales para estas variables. De las tablas se observa que los recuentos observados y esperados bajo la hipótesis nula presentan diferencias en las combinaciones. Por ejemplo, el valor observado para Profitable = 0 y Company_Type = 0 es 14, mientras que el esperado es 6.705, mostrando una notable desviación. Los residuales de Pearson y los residuales estandarizados revelan que la mayor desviación positiva ocurre en la categoría Profitable = 0, Company_Type = 0, mientras que las combinaciones con valores negativos reflejan desviaciones en el sentido contrario.

Asimismo, en la sub-pestaña Contribuciones [Profitable-Company_Type], se identifica que la categoría Company_Type = 0 con Profitable = 0 tiene la contribución más alta al estadístico chi-cuadrado (93.67%), indicando que esta combinación tiene el mayor peso en la relación entre las variables. En cambio, las combinaciones con Profitable = 1 y Company_Type = 1 presentan contribuciones muy bajas, lo que sugiere que tienen menor impacto en la asociación entre las variables.

Por último, el resultado del análisis de correspondencias simple se presenta en la sub-pestaña Correspondencia Simple Unidimensional [Profitable-Company_Type]. En este apartado, se observa que una única dimensión explica el 100% de la variabilidad entre las variables. Las coordenadas proyectadas de las categorías muestran que Company_Type = 0 y Company_Type = 1 están en extremos opuestos del eje unidimensional, con la primera teniendo mayor contribución (85.1%). Por otro lado, las categorías de Profitable reflejan un comportamiento similar, con Profitable = 0 proyectándose más alejado en comparación con Profitable = 1, lo que refuerza la relación significativa entre las variables.

En conjunto, los resultados sugieren una asociación significativa entre las variables Profitable y Company_Type. Las categorías extremas de ambas variables, especialmente Company_Type = 0 y Profitable = 0, tienen un mayor impacto en la configuración de la relación, mientras que las otras combinaciones presentan contribuciones menores. Este análisis subraya la importancia de las diferencias en el tipo de compañía para determinar su rentabilidad.

AC Parejas Totales

Tablas de Contingencias
addmargins(table(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$FemaleCEO))
##      
##          0    1  Sum
##   0    131   18  149
##   1    772   79  851
##   Sum  903   97 1000
addmargins(table(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$Company_Type))
##      
##          0    1  Sum
##   0     14  135  149
##   1     31  820  851
##   Sum   45  955 1000
addmargins(table(cdd_ranking_fortune_reescrito$FemaleCEO, cdd_ranking_fortune_reescrito$Company_Type))
##      
##          0    1  Sum
##   0     38  865  903
##   1      7   90   97
##   Sum   45  955 1000
Probabilidades
addmargins(prop.table(table(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$FemaleCEO))*100)
##      
##           0     1   Sum
##   0    13.1   1.8  14.9
##   1    77.2   7.9  85.1
##   Sum  90.3   9.7 100.0
addmargins(prop.table(table(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$Company_Type))*100)
##      
##           0     1   Sum
##   0     1.4  13.5  14.9
##   1     3.1  82.0  85.1
##   Sum   4.5  95.5 100.0
addmargins(prop.table(table(cdd_ranking_fortune_reescrito$FemaleCEO, cdd_ranking_fortune_reescrito$Company_Type))*100)
##      
##           0     1   Sum
##   0     3.8  86.5  90.3
##   1     0.7   9.0   9.7
##   Sum   4.5  95.5 100.0
Frecuencias [CPF y CPC]
round(addmargins(prop.table(table(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$FemaleCEO), 1)*100, 2), 2)
##    
##          0      1    Sum
##   0  87.92  12.08 100.00
##   1  90.72   9.28 100.00
round(addmargins(prop.table(table(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$Company_Type), 1)*100, 2), 2)
##    
##          0      1    Sum
##   0   9.40  90.60 100.00
##   1   3.64  96.36 100.00
round(addmargins(prop.table(table(cdd_ranking_fortune_reescrito$FemaleCEO, cdd_ranking_fortune_reescrito$Company_Type), 1)*100, 2), 2)
##    
##          0      1    Sum
##   0   4.21  95.79 100.00
##   1   7.22  92.78 100.00
Perfiles [CPF y CPC]
plotct(table(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$FemaleCEO),"row")

plotct(table(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$Company_Type),"row")

plotct(table(cdd_ranking_fortune_reescrito$FemaleCEO, cdd_ranking_fortune_reescrito$Company_Type),"row")

Pruebas de Hipótesis
chisq.test(table(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$FemaleCEO))
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  table(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$FemaleCEO)
## X-squared = 0.83593, df = 1, p-value = 0.3606
chisq.test(table(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$Company_Type))
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  table(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$Company_Type)
## X-squared = 8.4732, df = 1, p-value = 0.003604
chisq.test(table(cdd_ranking_fortune_reescrito$FemaleCEO, cdd_ranking_fortune_reescrito$Company_Type))
## Warning in chisq.test(table(cdd_ranking_fortune_reescrito$FemaleCEO,
## cdd_ranking_fortune_reescrito$Company_Type)): Chi-squared approximation may be
## incorrect
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  table(cdd_ranking_fortune_reescrito$FemaleCEO, cdd_ranking_fortune_reescrito$Company_Type)
## X-squared = 1.2109, df = 1, p-value = 0.2711

AC Pareja Única

Contingencias y Residuales [T-CP]
chisq.test(table(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$Company_Type))$observed
##    
##       0   1
##   0  14 135
##   1  31 820
chisq.test(table(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$Company_Type))$expected
##    
##          0       1
##   0  6.705 142.295
##   1 38.295 812.705
chisq.test(table(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$Company_Type))$residuals
##    
##              0          1
##   0  2.8172534 -0.6115479
##   1 -1.1788384  0.2558933
chisq.test(table(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$Company_Type))$stdres
##    
##             0         1
##   0  3.125068 -3.125068
##   1 -3.125068  3.125068
Contribuciones [T-CP]
# Contribución porcentual al estadístico chi-cuadrado
chisq.test(table(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$Company_Type))$residuals^2 / 
chisq.test(table(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$Company_Type))$statistic * 100
##    
##              0          1
##   0 93.6708804  4.4138111
##   1 16.4006594  0.7728059
Correspondencia Simple Unidimensional [R-UR]
CA(table(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$Company_Type), graph = FALSE)$eig
##        eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.009766049                    100                               100
CA(table(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$Company_Type), graph = FALSE)$col
## $coord
##          [,1]
## 0  0.45525515
## 1 -0.02145181
## 
## $contrib
##   [,1]
## 0 95.5
## 1  4.5
## 
## $cos2
##   [,1]
## 0    1
## 1    1
## 
## $inertia
## [1] 0.0093265764 0.0004394722
CA(table(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$Company_Type), graph = FALSE)$row
## $coord
##           0           1 
##  0.23617346 -0.04135117 
## 
## $contrib
##    0    1 
## 85.1 14.9 
## 
## $cos2
## 0 1 
## 1 1 
## 
## $inertia
## [1] 0.008310907 0.001455141

3.4. Correspondencias Múltiples

De acuerdo con (Díaz Morales & Morales Rivera, 2012), el análisis de correspondencias simple (ACS) puede ampliarse para trabajar con tablas disyuntivas completas. En este formato, las filas representan a las empresas, mientras que las columnas describen las modalidades de las variables categóricas analizadas, como Profitable, Company_Type y otras características relacionadas, asignando a cada empresa una categoría única para cada variable. El análisis de correspondencias múltiples (ACM) se construye sobre esta tabla disyuntiva, aplicando el método de correspondencias de forma conjunta a todas las variables categóricas, particionando de manera exclusiva y exhaustiva a la población empresarial en función de sus características.

Esta sección se plantea como una solución complementaria al ACS, cuyo análisis en la sección3.2 estuvo limitado por la naturaleza unidimensional de los datos y la imposibilidad de una representación bidimensional significativa. Por ello, mediante el ACM y el tratamiento conjunto de todas las variables categóricas relacionadas, se busca construir una representación más completa en el primer plano factorial, ofreciendo una visión integral de las asociaciones más relevantes entre los tipos de empresas y su rentabilidad.

3.5. Planteamiento y Desarrollo

El análisis de correspondencias múltiples ACM en donde se resalta que solo se trabajan con 2 variables categoricas (sector, Headquarters_State), ya que si se trabaja con todas se presenta errores dentro de la ejecuciòn del codigo haciendo disparar los valores al infinito o presentando errores a la hora de la interpretaciòn por la cantidad exorbitante de observaciones evitando problemas computacionales..

El analisis revela que las primeras dimensiones explican una pequeña proporción de la varianza total, comenzando con un 2.28% en la primera dimensión, y decreciendo gradualmente. Las primeras cuatro dimensiones explican un total acumulado de 8.84% de la variabilidad en los datos. A partir de la dimensión 47, la contribución de cada dimensión se reduce significativamente, y se observa que las dimensiones más altas aportan menos varianza explicada. A pesar de que las primeras dimensiones son más relevantes, el análisis muestra que una proporción considerable de la variabilidad está distribuida entre muchas dimensiones, lo que sugiere que para comprender completamente las relaciones en los datos, podría ser necesario considerar más dimensiones. Sin embargo, las dimensiones con una menor contribución explican cada vez menos varianza, lo que indica que, aunque la varianza se acumula, la importancia de las dimensiones adicionales disminuye después de cierto punto.

Eigenvalue (valor propio):Los valores propios indican la cantidad de varianza explicada por cada dimensión. En este caso, los primeros valores propios son bastante altos, con 0.75 en la primera dimensión, lo que sugiere que la primera dimensión es importante para explicar la variabilidad de los datos. Percentage of variance (porcentaje de varianza):El porcentaje de varianza explica qué tan grande es la contribución de cada dimensión a la varianza total. La primera dimensión explica 2.28% de la variabilidad en los datos, la segunda 2.25%, y la tercera 2.17%, lo que sugiere que las primeras dimensiones capturan una pequeña porción de la varianza total. Cumulative percentage of variance (porcentaje acumulado de varianza):Este valor muestra el porcentaje acumulado de la variabilidad explicada por las dimensiones hasta el punto que se menciona. Al sumar las primeras cuatro dimensiones, se alcanza un acumulado de 8.84%, lo que indica que la mayoría de la varianza se distribuye entre muchas dimensiones.

En el apartado de la visualizaciòn del ACM por medio del biplot se sugiere trabajar con una muestra aleatoria relativamente pequeña (50) para poder describir los acontecimientos que ocurren dentro de la grafica y asi mismo tener de manera mas precisa un interpretaciòn conclusiva acerca de la grafica observada.

El biplot muestra la distribución de las variables y observaciones seleccionadas de la matriz original en un espacio bidimensional definido por las dimensiones principales (Dim1 y Dim2), que explican el 5.3% y 5.3% de la varianza, respectivamente.

Variables (en amarillo): Representan categorías de las variables seleccionadas (“Sector” y “Headquarters_State”). Por ejemplo, “Media” y “Nevada” están alejados del origen, lo que indica que estas categorías están bien diferenciadas en las dimensiones seleccionadas. Observaciones (en azul): Representan puntos de las filas seleccionadas (empresas). Su proximidad a ciertas categorías indica una relación fuerte con estas. Óvalos elípticos: Se agregaron para identificar grupos naturales de datos con base en la similitud de sus coordenadas. Conclusión: Las categorías y observaciones bien representadas en este gráfico (es decir, alejadas del origen) tienen un impacto significativo en las dimensiones y contribuyen al entendimiento de las relaciones entre los sectores y los estados donde están las sedes.

Calidad de representación de las variables (Cos2) Este gráfico visualiza la calidad de representación de cada categoría de las variables seleccionadas en el espacio bidimensional. El coseno cuadrado (Cos2) mide la proporción de varianza explicada para cada categoría.

Coloración: Las categorías en tonos cálidos (naranja/rojo) tienen valores altos de Cos2, lo que indica que están bien representadas en las dos primeras dimensiones. Por ejemplo, categorías como “Energy” y “Motor Vehicles & Parts” tienen un Cos2 alto, mostrando su importancia en este espacio. Distribución: Categorías más cercanas al origen (como “Hawaii”) tienen un Cos2 bajo, sugiriendo que no están tan bien representadas y contribuyen menos al análisis. Conclusión: Las categorías mejor representadas (en naranja/rojo) son las más influyentes en las primeras dos dimensiones y ayudan a explicar las diferencias principales en el conjunto de datos.

Contribuciones de las variables a Dim1 Este gráfico de barras muestra cuánto contribuyen las variables y categorías a la construcción de la primera dimensión (Dim1).

Variables principales: “Technology,” “California,” y “Motor Vehicles & Parts” tienen las mayores contribuciones, indicando que son las más influyentes para definir la Dim1. Variables menos influyentes: Categorías como “Ohio” y “Massachusetts” tienen contribuciones bajas, lo que sugiere que su impacto en Dim1 es limitado. Línea roja: Representa el valor promedio esperado de contribución. Las categorías por encima de esta línea son las que tienen un aporte significativo. Conclusión: Las categorías con contribuciones altas dominan la construcción de Dim1 y son clave para interpretar esta dimensión.

La gráfica de Análisis de Biplot con Contribuciones nos muestra cómo las categorías de las variables seleccionadas (columnas 3 y 17 del dataset) están relacionadas entre sí.

Dimensiones PrincipalesLas dimensiones 1 (2.3%) y 2 (2.2%) representan las características principales que diferencian las categorías analizadas. Aunque explican un porcentaje modesto de la variabilidad total, son suficientes para identificar patrones clave. Agrupaciones y Relaciones:las categorías cercanas en el gráfico están asociadas o tienden a aparecer juntas en los datos. Por ejemplo, podríamos observar que ciertos estados como “Texas” están más relacionados con sectores específicos como “Energy”. Contribuciones de Categorías:Las categorías más alejadas del centro (en rojo) tienen un impacto más fuerte en la diferenciación de las dimensiones. Estas son particularmente importantes para entender qué elementos están definiendo los patrones observados. Patrones Globales:La dispersión sugiere que ciertas categorías (estados o sectores) tienen perfiles únicos o fuertes relaciones dentro del dataset, mientras que otras (más cercanas al centro) tienen menos influencia o aparecen en múltiples contextos. En términos generales, el MCA ayuda a identificar asociaciones importantes entre estados, sectores y otras características categóricas, revelando cómo ciertos factores están interconectados en el contexto de las empresas del ranking Fortune 1000.

En conclusion El análisis permite identificar asociaciones clave entre sectores y estados, destacando patrones significativos en cómo las empresas del ranking Fortune 1000 se distribuyen en términos de industria y ubicación. Aunque las primeras dimensiones explican solo una fracción de la variabilidad total, aportan suficiente información para comprender las relaciones más importantes dentro del ranking.

ACM

round(MCA(cdd_ranking_fortune_reescrito[1:1000, c(3,17)], graph = FALSE)$eig, 2)
##        eigenvalue percentage of variance cumulative percentage of variance
## dim 1        0.75                   2.28                              2.28
## dim 2        0.74                   2.25                              4.52
## dim 3        0.72                   2.17                              6.70
## dim 4        0.71                   2.14                              8.84
## dim 5        0.69                   2.09                             10.92
## dim 6        0.67                   2.02                             12.95
## dim 7        0.66                   2.01                             14.96
## dim 8        0.66                   1.99                             16.95
## dim 9        0.65                   1.95                             18.90
## dim 10       0.63                   1.91                             20.81
## dim 11       0.62                   1.89                             22.70
## dim 12       0.61                   1.86                             24.55
## dim 13       0.60                   1.83                             26.39
## dim 14       0.60                   1.82                             28.21
## dim 15       0.60                   1.81                             30.01
## dim 16       0.59                   1.80                             31.81
## dim 17       0.59                   1.78                             33.59
## dim 18       0.57                   1.74                             35.33
## dim 19       0.57                   1.72                             37.05
## dim 20       0.54                   1.63                             38.69
## dim 21       0.50                   1.52                             40.20
## dim 22       0.50                   1.52                             41.72
## dim 23       0.50                   1.52                             43.23
## dim 24       0.50                   1.52                             44.75
## dim 25       0.50                   1.52                             46.26
## dim 26       0.50                   1.52                             47.78
## dim 27       0.50                   1.52                             49.29
## dim 28       0.50                   1.52                             50.81
## dim 29       0.50                   1.52                             52.32
## dim 30       0.50                   1.52                             53.84
## dim 31       0.50                   1.52                             55.35
## dim 32       0.50                   1.52                             56.87
## dim 33       0.50                   1.52                             58.38
## dim 34       0.50                   1.52                             59.90
## dim 35       0.50                   1.52                             61.41
## dim 36       0.50                   1.52                             62.93
## dim 37       0.50                   1.52                             64.44
## dim 38       0.50                   1.52                             65.96
## dim 39       0.50                   1.52                             67.47
## dim 40       0.50                   1.52                             68.99
## dim 41       0.50                   1.52                             70.50
## dim 42       0.50                   1.52                             72.02
## dim 43       0.50                   1.52                             73.53
## dim 44       0.50                   1.52                             75.05
## dim 45       0.50                   1.52                             76.56
## dim 46       0.50                   1.52                             78.08
## dim 47       0.46                   1.40                             79.48
## dim 48       0.43                   1.31                             80.78
## dim 49       0.43                   1.29                             82.08
## dim 50       0.41                   1.25                             83.32
## dim 51       0.41                   1.23                             84.56
## dim 52       0.40                   1.22                             85.78
## dim 53       0.40                   1.21                             86.99
## dim 54       0.40                   1.20                             88.19
## dim 55       0.39                   1.17                             89.37
## dim 56       0.38                   1.14                             90.51
## dim 57       0.37                   1.12                             91.63
## dim 58       0.35                   1.08                             92.71
## dim 59       0.34                   1.04                             93.75
## dim 60       0.34                   1.02                             94.77
## dim 61       0.33                   1.01                             95.77
## dim 62       0.31                   0.94                             96.71
## dim 63       0.29                   0.89                             97.61
## dim 64       0.28                   0.86                             98.46
## dim 65       0.26                   0.78                             99.25
## dim 66       0.25                   0.75                            100.00

Biplot ACM

file_path <- "C:/CURSOS/4to Semestre/CURSO GdD 2024_ G9/cdd_ranking_fortune_reescrito.xlsx"
cdd_ranking_fortune_reescrito_V2 <- read_excel(file_path)

selected_columns <- cdd_ranking_fortune_reescrito_V2[, c("Sector","Headquarters_State")]

selected_columns <- na.omit(selected_columns)

set.seed(780729)

# Seleccionar una muestra de 50 filas
selected_data <- selected_columns[
  sample(1:nrow(selected_columns), min(50, nrow(selected_columns))),]

selected_data <- data.frame(lapply(selected_data, as.factor))

# Realizar el Análisis de Componentes Múltiples (MCA)
res.mca <- MCA(selected_data, graph = FALSE)

# Visualizar el Biplot del MCA
fviz_mca_biplot(
  res.mca, 
  repel = TRUE, 
  col.var = "#E7B800",
  addEllipses = TRUE,   
  ellipse.level = 0.95  # Nivel de confianza del 95%
)

Calidad de Representación

# Asegurar que las columnas seleccionadas sean categóricas (factores)
categorical_columns <- cdd_ranking_fortune_reescrito[1:1000, c(3,17)]
categorical_data <- data.frame(lapply(categorical_columns, as.factor))


# Realizar el análisis MCA (ACM)
mca_result <- MCA(categorical_data, graph = FALSE)

# Calidad de representación (Cos2) para variables y observaciones
# Cos2 mide la calidad de la representación de las variables/individuos en las dimensiones
var_cos2 <- mca_result$var$cos2 
ind_cos2 <- mca_result$ind$cos2

# Visualizar la calidad de representación para variables
fviz_mca_var(mca_result, col.var = "cos2", 
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
             repel = TRUE)

Contribuciones

fviz_contrib(MCA(cdd_ranking_fortune_reescrito[1:1000, c(3,17)], graph = FALSE), choice = "var", axes = 1, top = 15)

Biplot con Contribuciones

fviz_mca_var(MCA(cdd_ranking_fortune_reescrito[1:1000, c(3,17)], graph = FALSE), col.var ="contrib", gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), repel = TRUE)

Fase 4 [Conglomerados]

En esta cuarta etapa del estudio se presentarán cálculos, visualizaciones e interpretaciones, utilizando el conjunto de datos procesado en las fases previas (1, 2 y 3). El enfoque se centrará en el análisis de conglomerados, abarcando tanto su versión jerárquica mediante dendrogramas como la no jerárquica con K-medias.

4.1. Objetivos

El principal objetivo del análisis de conglomerados es identificar agrupaciones naturales dentro de un conjunto de datos multivariados, maximizando la homogeniedad dentro de los clusters y la heterogeniedad entre ellos. Este enfoque permite simplificar y estructurar la información, facilitando su interpretación y uso estratégico.

Para lograr este objetivo, se utilizan técnicas que cuantifican las similitudes entre observaciones, estableciendo una estructura jerárquica o particional según el método seleccionado. Estas técnicas permiten detectar patrones en los datos que de otra manera pasarían desapercibidos, destacando relaciones importantes entre las observaciones y sus características. En el contexto del ranking Fortune 1000, esto se traduce en agrupar empresas con perfiles similares en términos de variables clave como ingresos, activos y ganancias.

Los objetivos del análisis de conglomerados se cumplieron al segmentar de manera eficiente las observaciones en grupos significativos, ofreciendo una visión más organizada del conjunto de datos. Estos resultados refuerzan la utilidad de este enfoque para simplificar datos complejos y apoyar decisiones basadas en patrones estructurales claros.

4.2. Agrupación Jerárquica

El Profesor (EAMOTImo42023?), en su trabajo (al que se pueden remitir mediante el enlace), señalaba que los autores (Díaz Morales & Morales Rivera, 2012), basándose en el análisis de Everitt (1980) titulado Cluster Analysis, describen los conglomerados como zonas continuas en un espacio donde se concentra una alta densidad de puntos, separadas por áreas con menor densidad. Para identificar estas concentraciones, se emplean diferentes técnicas, destacándose los métodos jerárquicos. Estos inician con el cálculo de una matriz de distancias entre los elementos analizados, lo que permite agruparlos mediante un proceso de aglomeración. Este método comienza con conglomerados individuales y avanza hacia un único grupo final. A lo largo de este proceso, se generan fusiones y divisiones que establecen jerarquías basadas en similitudes, representadas gráficamente a través de un dendograma.

4.3. Planteamiento y Desarrollo

Para una adecuada visualización de los datos y con fines exclusivamente académicos, el conjunto de datos descrito fue modificado previamente para incluir variables normalizadas relacionadas con empleados, ingresos, ganancias, y activos de cada estado, como se observa en la definiciòn de la variable sobre el Conjunto normalizado cdd_ranking_fortune_headquarters_State_Promedio <- read_excel(“C:/CURSOS/4to Semestre/CURSO GdD 2024_ G9/cdd_ranking_fortune_headquarters_State_Promedio.xlsx”) View(cdd_ranking_fortune_headquarters_State_Promedio).

Estas métricas permitieron estandarizar las características económicas y empresariales de los estados, garantizando una comparación más precisa en el análisis de conglomerados.

La pestaña Disimilaridad ofrece una representación gráfica que muestra las relaciones de proximidad entre los estados según las métricas seleccionadas. A través de una escala de colores, la gráfica ilustra las distancias entre los registros:

Zonas de menor disimilaridad (en tonos azul claro): Indican estados con características muy similares, lo que sugiere que tienden a formar parte de agrupaciones más cercanas. como, estados como Arkansas, Mississippi y Louisiana muestran alta similitud en sus características promedio, como ingresos y activos.

Zonas de mayor disimilaridad (en tonos rojizos): Representan estados con diferencias significativas frente al resto. Esto se observa en estados como California y Texas, que se destacan por valores notablemente mayores en ingresos y ganancias promedio.

Este comportamiento indica que los estados más similares tienden a formar agrupaciones dentro de las mismas jerarquías económicas, mientras que aquellos con distancias más pronunciadas probablemente conformen grupos independientes, reflejando diferencias específicas en su desempeño corporativo o económico.

La pestaña Optimización de Mojena identifica el número óptimo de grupos para clasificar a los pacientes según tres estrategias jerárquicas. Tanto la unión simpleconcluye que 5 grupos son ideales en unión completa concluyen que 4 grupos son ideales, maximizando la cohesión interna y diferenciación externa. Por su lado, la unión promedio sugiere 5 grupos como la configuración óptima, considerando distancias medias. Cada método se acompaña de su respectivo dendograma para visualizar las jerarquías y agrupaciones resultantes, cada grupo refleja la relevancia de cada grupo dentro del ranking..

En el caso del Enlace Simple, el dendograma muestra *5 conglomerados establecidos a un nivel de similitud cercano a 1 y 2, 3 y 4, aunque las distancias de aglomeración son relativamente amplia entre los grupos facilitando la diferenciaciòn de los grupos generados. Por su parte, el método de Enlace Completo permite identificar 4 conglomerados mostrando una separaciòn del grupo 1 del resto de grupos, queriendo decir que es el grupo donde se obtiene la informaciòn de unos datos atipicos de empresas poderosas, tambien habiendo un nivel de similitud de los grupos 2 y 3 separados de la aglomeraciòn donde se encuentran comapñias sin el mismo poder de las compañias top del ranking Enlace Promedio establece 5 conglomerados** donde los grupos se separan direcatamente entre todos hasta el 5 donde se encuentran la mayor aglomeraciòn de compañis con carasteristicas similares, y en las 4 representanto compañias con un poder mayor dentro del ranking (valores atipicos) a los del grupo 5.

Estos dendogramas muestran que, si se seleccionaran niveles de corte más altos, se obtendrían menos conglomerados con mayor cohesión interna, agrupando empresas con sedes en estados con características similares. En cambio, niveles de corte más bajos generarían una mayor cantidad de conglomerados, permitiendo identificar patrones más específicos pero con menor similitud interna. De esta forma, las visualizaciones reflejan el efecto de los valores atípicos, como las empresas con mayor poder en el ranking debido a características destacadas en las variables cuantitativas analizadas, permitiendo una clasificación más precisa según la ubicación de las sedes y otros factores relevantes.

Campo clasificador

cdd_ranking_fortune_headquarters_State_Promedio <- read_excel("C:/CURSOS/4to Semestre/CURSO GdD 2024_ G9/cdd_ranking_fortune_headquarters_State_Promedio.xlsx")
View(cdd_ranking_fortune_headquarters_State_Promedio)

head(as.data.frame(cdd_ranking_fortune_headquarters_State_Promedio))
##   Headquarters_State Number_of_employees_S01 Revenues_M_S01 Profits_M_S01
## 1            Alabama             0.009688542         0.0074    0.10641639
## 2            Arizona             0.007590743         0.0093    0.10374930
## 3           Arkansas             0.184462777         0.1883    0.12251545
## 4         California             0.013583150         0.0285    0.12892186
## 5           Colorado             0.006767067         0.0087    0.09823365
## 6        Connecticut             0.017096018         0.0276    0.11054462
##   Assets_M_S01
## 1  0.013237395
## 2  0.003358494
## 3  0.011764519
## 4  0.011703523
## 5  0.003368532
## 6  0.009053241

Disimilaridad

data_ = as.data.frame(cdd_ranking_fortune_headquarters_State_Promedio)[, -c(1)]
rownames(data_) = unclass(cdd_ranking_fortune_headquarters_State_Promedio$Headquarters_State)
fviz_dist(get_dist(data_, stand = T, method = "euclidean"), gradient = list(low = "#00AFBB", mid = "white", high = "#FC4E07"))

Optimización de Mojena

Unión Simple
hc_single = hclust(get_dist(data_, stand = T, method = "euclidean"), method = "single")

mojena = function(hc){
  n_hd = length(hc$height)
  alp_g = 0 ; alpha = hc$height[n_hd:1]
  for(i in 1:(n_hd-1)){
    alp_g[i] = mean(alpha[(n_hd-i+1):1])+1.25*sd(alpha[(n_hd-i+1):1])
  }
  nog = sum(alp_g<= alpha[-n_hd]) + 1
  plot(alpha[-n_hd], pch=20, col=(alp_g>alpha[-n_hd])+1, main = paste("Optimal number of groups =",nog),
       ylab = expression(alpha[g]), xlab="Nodes")}

mojena(hc_single)

Unión Completa
hc_complete = hclust(get_dist(data_, stand = T, method = "euclidean"), method = "complete")

mojena = function(hc){
  n_hd = length(hc$height)
  alp_g = 0 ; alpha = hc$height[n_hd:1]
  for(i in 1:(n_hd-1)){
    alp_g[i] = mean(alpha[(n_hd-i+1):1])+1.25*sd(alpha[(n_hd-i+1):1])
  }
  nog = sum(alp_g<= alpha[-n_hd]) + 1
  plot(alpha[-n_hd], pch=20, col=(alp_g>alpha[-n_hd])+1, main = paste("Optimal number of groups =",nog),
       ylab = expression(alpha[g]), xlab="Nodes")}

mojena(hc_complete)

Unión Promedio
hc_average = hclust(get_dist(data_, stand = T, method = "euclidean"), method = "average")

mojena = function(hc){
  n_hd = length(hc$height)
  alp_g = 0 ; alpha = hc$height[n_hd:1]
  for(i in 1:(n_hd-1)){
    alp_g[i] = mean(alpha[(n_hd-i+1):1])+1.25*sd(alpha[(n_hd-i+1):1])
  }
  nog = sum(alp_g<= alpha[-n_hd]) + 1
  plot(alpha[-n_hd], pch=20, col=(alp_g>alpha[-n_hd])+1, main = paste("Optimal number of groups =",nog),
       ylab = expression(alpha[g]), xlab="Nodes")}

mojena(hc_average)

Dendogramas Optimizados

Enlace Simple
suppressWarnings(fviz_dend(hc_single, k = 3, cex = 0.5, k_colors = "npg", color_labels_by_k = T, rect = T))

Enlace Completo
fviz_dend(hc_complete, k = 3, cex = 0.5, k_colors = "npg", color_labels_by_k = T, rect = T)

Enlace Promedio
fviz_dend(hc_average, k = 4, cex = 0.5, k_colors = "npg", color_labels_by_k = T, rect = T)

4.4. Agrupación No-Jerárquica

Según (Díaz Morales & Morales Rivera, 2012), los métodos de aglomeración no jerárquicos, también conocidos como métodos de partición, se basan en una partición inicial del conjunto de datos, generando subconjuntos o grupos. A cada uno de estos grupos se le calcula un centroide, y posteriormente, las observaciones se asignan al conglomerado cuyo centroide se encuentra más cercano. Este proceso se repite recursivamente, recalculando los centroides y ajustando las asignaciones hasta que las observaciones ya no puedan cambiar de grupo. A diferencia de los métodos jerárquicos, este enfoque permite que una observación cambie de grupo durante el proceso.

El análisis de conglomerados se cerrará con el método no jerárquico de K-medias, que divide un conjunto de \(n\) objetos en \(k\) grupos. Este método selecciona los centroides de los grupos de manera que minimicen la distancia euclidiana entre cada objeto y su centroide más cercano. Las observaciones se asignan al conglomerado cuyo centroide esté más próximo, con el objetivo de reorganizar los objetos en grupos que presenten la menor variabilidad interna posible.

4.5. Planteamiento y Desarrollo

Dado que el método de K-medias requiere definir previamente la cantidad de conglomerados a formar, es fundamental determinar este número de manera adecuada para garantizar el mejor resultado posible. En la pestaña K-óptimos se encuentran las subpestañas que muestran los resultados de los cálculos para determinar el número óptimo de grupos, utilizando los métodos de Codo (Elbow), Silueta (Silhouette),Gap Statistic y Regla de la Mayoría (Majority Rule)

El método de Codo (Elbow) y Silueta (Silhouette) identificó que el número óptimo de agrupamientos que minimizan la variación total dentro de los grupos es \(3\). , el método de Gap Statistic señaló como número óptimo 2.

ación externa), mostrando que esta última se acerca más a uno para este número de conglomerados.

A pesar de las diferencias en las recomendaciones de los distintos índices, la regla de mayoría indica que el número de clusters más apropiado es 3. Esto implica que la mayoría de los índices utilizados favorecen esta opción, y se puede considerar como la mejor solución para el número de clusters en este análisis.

El resultado del apartado K-óptimo [wws] muestra cómo se agrupan los datos en 3 clusters basados en las características proporcionadas. El cluster 3 es el más grande, con registros más homogéneos en términos de las variables estudiadas, mientras que los clusters 1 y 2 son más pequeños. La mayor parte de la variabilidad se explica por las diferencias entre los clusters (68.9%), lo que sugiere que el algoritmo K-means ha logrado una segmentación significativa.

En el ultimo apartado de K-óptimo [sil ha segmentado los datos en dos clusters: Cluster 1 es el grupo más grande y parece estar compuesto por registros con valores relativamente bajos en cuanto a empleados, ingresos, ganancias y activos. Cluster 2 está compuesto por un grupo más pequeño de registros con valores significativamente más altos en estas variables. El modelo explica 44.9% de la variabilidad entre los clusters, lo que sugiere que las diferencias entre los dos grupos son moderadas, aunque podría haber más variabilidad explicada si el número de clusters fuera mayor.

En el apartado de las graficas de los K-optimos se visualiza: En la primera grafica: la separaciòn de los 3 clusters y donde se visualiza lo concluido anteriormente “basados en las características proporcionadas. El cluster 3 es el más grande, con registros más homogéneos en términos de las variables estudiadas, mientras que los clusters 1 y 2 son más pequeños. La mayor parte de la variabilidad se explica por las diferencias entre los clusters (68.9%)” En la segunda grafica: se observa la separaciòn on los 2 cluster donde el tambien se puede repetir lo concluido anteriormente “Cluster 1 es el grupo más grande y parece estar compuesto por registros con valores relativamente bajos en cuanto a empleados, ingresos, ganancias y activos, Cluster 2 está compuesto por un grupo más pequeño de registros con valores significativamente más altos en estas variables, El modelo explica 44.9%

K-óptimos

Elbow
fviz_nbclust(data_, kmeans, method = "wss") + geom_vline(xintercept = 3, linetype = 2)

Silhouette
fviz_nbclust(data_, kmeans, method = "silhouette")

Gap Statistic
fviz_nbclust(data_, kmeans, method = "gap_stat")

Majority Rule
suppressWarnings(NbClust(data = data_, diss = NULL, distance = "euclidean", min.nc = 2, max.nc = 10, method = "kmeans")$Best.nc)

## *** : The Hubert index is a graphical method of determining the number of clusters.
##                 In the plot of Hubert index, we seek a significant knee that corresponds to a 
##                 significant increase of the value of the measure i.e the significant peak in Hubert
##                 index second differences plot. 
## 

## *** : The D index is a graphical method of determining the number of clusters. 
##                 In the plot of D index, we seek a significant knee (the significant peak in Dindex
##                 second differences plot) that corresponds to a significant increase of the value of
##                 the measure. 
##  
## ******************************************************************* 
## * Among all indices:                                                
## * 4 proposed 2 as the best number of clusters 
## * 9 proposed 3 as the best number of clusters 
## * 1 proposed 4 as the best number of clusters 
## * 1 proposed 6 as the best number of clusters 
## * 7 proposed 9 as the best number of clusters 
## * 1 proposed 10 as the best number of clusters 
## 
##                    ***** Conclusion *****                            
##  
## * According to the majority rule, the best number of clusters is  3 
##  
##  
## *******************************************************************
##                      KL       CH Hartigan     CCC   Scott Marriot TrCovW TraceW
## Number_clusters  6.0000   9.0000   4.0000  9.0000   3.000       3  3e+00 3.0000
## Value_Index     13.3017 133.7333  46.2301 22.4887 118.066       0  6e-04 0.0259
##                 Friedman    Rubin  Cindex    DB Silhouette   Duda PseudoT2
## Number_clusters    9.000   9.0000 10.0000 9.000     3.0000 2.0000   2.0000
## Value_Index      365.136 -81.1558  0.0115 0.512     0.7894 2.0227 -21.7409
##                   Beale Ratkowsky   Ball PtBiserial Frey McClain   Dunn Hubert
## Number_clusters  2.0000    2.0000 3.0000     3.0000    1  3.0000 3.0000      0
## Value_Index     -1.1922    0.4734 0.0256     0.8987   NA  0.0296 0.3532      0
##                  SDindex Dindex   SDbw
## Number_clusters   9.0000      0 9.0000
## Value_Index     104.7741      0 0.0295

Resultados K-means

K-óptimo [wws]
set.seed(20050325)
print(kmeans(data_, 3, nstart = 25))
## K-means clustering with 3 clusters of sizes 1, 3, 44
## 
## Cluster means:
##   Number_of_employees_S01 Revenues_M_S01 Profits_M_S01 Assets_M_S01
## 1             0.009823941     0.05270000     0.1378235   0.20571813
## 2             0.097025753     0.12490000     0.1681664   0.02150156
## 3             0.012355840     0.01841136     0.1044527   0.00980288
## 
## Clustering vector:
##              Alabama              Arizona             Arkansas 
##                    3                    3                    2 
##           California             Colorado          Connecticut 
##                    3                    3                    3 
##             Delaware District Of Columbia              Florida 
##                    3                    1                    3 
##              Georgia               Hawaii                Idaho 
##                    3                    3                    3 
##             Illinois              Indiana                 Iowa 
##                    3                    3                    3 
##               Kansas             Kentucky            Louisiana 
##                    3                    3                    3 
##                Maine             Maryland        Massachusetts 
##                    3                    3                    3 
##             Michigan            Minnesota          Mississippi 
##                    3                    3                    3 
##             Missouri              Montana             Nebraska 
##                    3                    3                    2 
##               Nevada        New Hampshire           New Jersey 
##                    3                    3                    3 
##             New York       North Carolina         North Dakota 
##                    3                    3                    3 
##                 Ohio             Oklahoma               Oregon 
##                    3                    3                    3 
##         Pennsylvania          Puerto Rico         Rhode Island 
##                    3                    3                    3 
##       South Carolina            Tennessee                Texas 
##                    3                    3                    3 
##                 Utah              Vermont             Virginia 
##                    3                    3                    3 
##           Washington            Wisconsin              general 
##                    2                    3                    3 
## 
## Within cluster sum of squares by cluster:
## [1] 0.00000000 0.02380785 0.02245778
##  (between_SS / total_SS =  68.9 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"
K-óptimo [sil]
set.seed(780728)
print(kmeans(data_, 2, nstart = 25))
## K-means clustering with 2 clusters of sizes 44, 4
## 
## Cluster means:
##   Number_of_employees_S01 Revenues_M_S01 Profits_M_S01 Assets_M_S01
## 1              0.01235584     0.01841136     0.1044527   0.00980288
## 2              0.07522530     0.10685000     0.1605807   0.06755570
## 
## Clustering vector:
##              Alabama              Arizona             Arkansas 
##                    1                    1                    2 
##           California             Colorado          Connecticut 
##                    1                    1                    1 
##             Delaware District Of Columbia              Florida 
##                    1                    2                    1 
##              Georgia               Hawaii                Idaho 
##                    1                    1                    1 
##             Illinois              Indiana                 Iowa 
##                    1                    1                    1 
##               Kansas             Kentucky            Louisiana 
##                    1                    1                    1 
##                Maine             Maryland        Massachusetts 
##                    1                    1                    1 
##             Michigan            Minnesota          Mississippi 
##                    1                    1                    1 
##             Missouri              Montana             Nebraska 
##                    1                    1                    2 
##               Nevada        New Hampshire           New Jersey 
##                    1                    1                    1 
##             New York       North Carolina         North Dakota 
##                    1                    1                    1 
##                 Ohio             Oklahoma               Oregon 
##                    1                    1                    1 
##         Pennsylvania          Puerto Rico         Rhode Island 
##                    1                    1                    1 
##       South Carolina            Tennessee                Texas 
##                    1                    1                    1 
##                 Utah              Vermont             Virginia 
##                    1                    1                    1 
##           Washington            Wisconsin              general 
##                    2                    1                    1 
## 
## Within cluster sum of squares by cluster:
## [1] 0.02245778 0.05956293
##  (between_SS / total_SS =  44.9 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

Gráficos K-Means

K-Óptimo [Elb_Ma-Rul 3]
fviz_cluster(kmeans(data_, 3, nstart = 25), data = data_, palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#E7B801"), ellipse.type = "euclid", star.plot = TRUE, repel = TRUE, ggtheme = theme_minimal()
)
## Too few points to calculate an ellipse
## Too few points to calculate an ellipse

K-Óptimo [sil 4]
fviz_cluster(kmeans(data_, 2, nstart = 25), data = data_, palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#E7B801"), ellipse.type = "euclid", star.plot = TRUE, repel = TRUE, ggtheme = theme_minimal()
)

Fase 5 [Análisis de Regresión]

El análisis de regresión es una herramienta fundamental para modelar y predecir relaciones entre variables. En esta fase, se exploran diferentes enfoques de regresión —lineal simple, lineal múltiple y logística simple— para comprender cómo las variables independientes influyen en la variable dependiente, identificando patrones significativos en los datos del ranking Fortune 1000.

Se emplean métodos de regresión para cuantificar las relaciones entre variables clave como ingresos, activos y utilidades. A través de modelos simples y múltiples, se evalúa el impacto individual y combinado de estas variables, mientras que la regresión logística analiza la probabilidad de pertenecer a una categoría específica en función de predictores seleccionados.

Los resultados del análisis de regresión proporcionaron insights valiosos sobre las relaciones entre variables económicas clave. Este enfoque permitió no solo predecir comportamientos futuros, sino también identificar factores determinantes que afectan significativamente los resultados empresariales.

El principal objetivo del análisis de regresión es modelar y entender cómo las variables independientes afectan una variable dependiente específica, identificando relaciones lineales o no lineales que puedan ser utilizadas para predicción y análisis estratégico.

En este contexto, se busca determinar la significancia estadística de los predictores seleccionados, evaluar el ajuste del modelo y optimizar su capacidad de explicación. Además, se pretende identificar patrones que expliquen la varianza de la variable dependiente, facilitando la toma de decisiones basadas en datos concretos.

Los objetivos del análisis de regresión se lograron al establecer modelos robustos que explican las relaciones entre variables clave. Esto permitió no solo interpretar los factores que más contribuyen a los resultados empresariales, sino también construir herramientas predictivas útiles para el análisis económico.

5.1. Regresión Lineal Simple

Este modelo, que a partir de ahora se denominará como RLS, está compuesto por dos variables: una predictora y otra respuesta. Específicamente, la variable \(Y\) se considera influida por la variable predictora \(x\). La relación entre estas variables está descrita por la ecuación: \[Y = \beta_0 + \beta_1x + \varepsilon\] La relación entre la variable independiente y la variable dependiente en el modelo de regresión lineal simple debe cumplir ciertas suposiciones clave para que los resultados sean válidos. Estas son las siguientes: 1. La relación entre la variable independiente \(x\) y la variable dependiente \(Y\) debe ser lineal. 2. El término de error \(ε\) sigue una distribución normal y tiene una media igual a cero. 3. Las observaciones deben ser independientes entre sí, es decir, el valor de \(Y\) para un dato no influye en los valores de \(Y\) para otros datos. 4. La varianza del término de error \(ε\) debe ser constante para todos los valores de la variable independiente \(x\), una condición conocida como homocedasticidad. La varianza de \(\varepsilon\) es constante para todos los valores de \(x\).

Para estimar los parámetros desconocidos (\(\beta_0\), \(\beta_1\) y \(\sigma^2\)), se usa el método de mínimos cuadrados, que busca minimizar la suma de los cuadrados de las desviaciones verticales entre los puntos observados y la línea de regresión:\[SCE = \sum_{i=1}^n \left(y_i - (\beta_0 + \beta_1x_i)\right)^2\]. Resolviendo este problema, las estimaciones de los parámetros son: \[\hat{\beta}_1 = \frac{\sum_{i=1}^n (x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^n (x_i - \bar{x})^2}, \quad \hat{\beta}_0 = \bar{y} - \hat{\beta}_1 \bar{x}.\]

Aquí, \(\bar{x}\) y \(\bar{y}\) son las medias muestrales de \(x\) e \(y\), respectivamente.

El coeficiente de determinación indica la proporción de la variabilidad de \(Y\) que puede explicarse mediante el modelo de regresión lineal simple:\[R^2 = 1 - \frac{SCE}{STC},\] donde \(SCE\) es la suma de cuadrados del error y \(STC\) es la suma total de cuadrados. Un valor de \(R^2\) cercano a 1 indica que el modelo explica gran parte de la variabilidad observada en los datos.

Se pueden formular pruebas para determinar si los coeficientes del modelo son significativamente diferentes de cero. Las hipótesis nulas comunes son: - Para \(\beta_0\): \(H_0: \beta_0 = \beta_{00}\). - Para \(\beta_1\): \(H_0: \beta_1 = 0\) (prueba de utilidad del modelo).

El estadístico de prueba asociado es:\[ t = \frac{\hat{\beta}_1 - 0}{SE(\hat{\beta}_1)},\] donde \(SE(\hat{\beta}_1)\) es el error estándar de \(\hat{\beta}_1\). Este estadístico sigue una distribución \(t\) de Student con \(n-2\) grados de libertad.

Los intervalos de confianza para los parámetros estimados se calculan como: \[\hat{\beta}_1 \pm t_{\alpha/2, n-2} \cdot SE(\hat{\beta}_1).\]. Estos intervalos brindan un rango probable para los verdaderos valores de \(\beta_0\) y \(\beta_1\).

El modelo de regresión lineal simple es una herramienta poderosa para analizar relaciones lineales. Sin embargo, debe usarse con cautela: no extrapole más allá del rango de los datos y asegúrese de que las suposiciones del modelo sean razonables para los datos. Al comprender la variabilidad explicada y no explicada por el modelo, los analistas pueden tomar decisiones fundamentadas y evaluar la utilidad del modelo en contextos específicos.

5.1.1. Planteamiento del Problema

Con base en el conjunto de datos descrito en la sección 2 se formulará un modelo de regresión lineal simple para estudiar la relación lineal supuesta entre las varaibles definidas por los campos: Profits_M (variable dependiente) y TOEFL Score (variable independiente).

5.1.2. Desarrollo del Análisis

El estudio de regresión lineal simple ha sido procesado con R version 4.4.1 (2024-06-14 ucrt) mediado por RStudio en una plataforma x86_64-w64-mingw32.

5.1.2.1. Resumen estadístico de las variables por estudiar.

Resumen de Profitable La variable Profitable es una variable categórica binaria que toma valores de 0 (no rentable) y 1 (rentable). El análisis muestra que la mayoría de las empresas (alrededor del 85.1%) son rentables, mientras que un pequeño porcentaje (14.9%) no lo son. Los valores de los cuartiles y la mediana, todos en 1.000, refuerzan que la distribución está fuertemente inclinada hacia las empresas rentables.

Resumen de Profits_M (ganancias) La mayoría de las empresas tienen ganancias que oscilan entre 154.5 (primer cuartil) y 1,398.3 (tercer cuartil), mientras que la mediana se encuentra en 541.4, lo que indica que la mitad de las empresas tienen ganancias por debajo de este valor. Sin embargo, el promedio (1,863.4) sugiere que existen algunas empresas con ganancias extremadamente altas, como la que alcanza un máximo de 96,995.0, lo que eleva el valor medio. Además, hay casos de pérdidas significativas reflejadas en el valor mínimo de -10,298.0.

El diagrama de caja permite visualizar claramente esta dispersión y la presencia de valores extremos, tanto en el rango positivo como negativo. Es crucial tener en cuenta estos valores atípicos para evitar sesgos en análisis posteriores y considerar posibles segmentaciones o transformaciones en los datos.

El Diagrama de Dispersión Profits_M (ganancias) vs. Profitable El análisis muestra una clara diferencia en los niveles de ganancias entre las empresas rentables y no rentables. Las empresas rentables presentan ganancias significativamente mayores, mientras que las no rentables tienden a registrar valores más bajos, llegando incluso a pérdidas en algunos casos.

Este comportamiento resalta que la rentabilidad está estrechamente relacionada con la capacidad de las empresas para generar y gestionar sus ganancias de manera eficiente. Por lo tanto, este análisis enfatiza la importancia de identificar los factores que permiten a las empresas maximizar sus beneficios y mantenerse dentro del grupo de las rentables.

Los Diagramas Totales de Dispersión Profits_M (ganancias) vs Revenues_M:

La dispersión sugiere que hay una relación positiva: a mayor número de empleados, tienden a aumentar los ingresos. Sin embargo, la relación no es perfectamente lineal, ya que los puntos están dispersos, especialmente en los extremos.

Number_of_employees vs Profits_M:Hay una dispersión significativa, lo que indica que no hay una relación clara entre el número de empleados y las ganancias. Algunas empresas tienen pocos empleados y altas ganancias, mientras que otras tienen muchos empleados y ganancias bajas. Number_of_employees vs Assets_M:La relación entre estas variables parece ser débil. Los activos no parecen depender directamente de la cantidad de empleados, ya que los puntos están dispersos sin un patrón claro. Number_of_employees vs MarketCap_Updated_M:Se observa una leve relación positiva: las empresas con mayor número de empleados tienden a tener una mayor capitalización de mercado, pero nuevamente, la relación no es fuerte. Revenues_M vs Profits_M:Existe una relación positiva más evidente: a medida que los ingresos aumentan, también tienden a aumentar las ganancias. Sin embargo, hay casos atípicos (outliers) que pueden estar afectando la claridad del patrón. Revenues_M vs Assets_M:La relación entre ingresos y activos es positiva, pero moderada. Las empresas con mayores ingresos tienden a tener activos más grandes. Revenues_M vs MarketCap_Updated_M:Hay una relación positiva moderada: empresas con mayores ingresos suelen tener una mayor capitalización de mercado. Profits_M vs Assets_M:Relación positiva débil: las ganancias y los activos no parecen estar estrechamente relacionados, aunque hay una ligera tendencia a que las empresas con más activos tengan más ganancias. Profits_M vs MarketCap_Updated_M:Existe una relación positiva fuerte: las ganancias parecen estar estrechamente relacionadas con la capitalización de mercado. Esto implica que las empresas más rentables tienden a ser más valiosas en términos de mercado. Assets_M vs MarketCap_Updated_M:Relación débil: los activos y la capitalización de mercado no parecen tener una relación fuerte, lo que indica que el valor de mercado no depende directamente de los activos totales de la empresa.

Este análisis muestra que:

Las relaciones más fuertes se encuentran entre Revenues_M y Profits_M y entre Profits_M y MarketCap_Updated_M. Otras variables, como Number_of_employees y Assets_M, muestran relaciones más débiles con las demás. Estos patrones podrían sugerir que los ingresos y las ganancias son los principales impulsores de la capitalización de mercado, mientras que el número de empleados o los activos tienen un impacto menos directo.

Resumen de Profitable
# Función para crear el diagrama de caja con escala personalizada
crear_boxplot_profitable <- function(data, variable, main_title = "Diagrama de Caja de Profitable", color = "orange", ylim = NULL) {
  boxplot(data[[variable]], 
          main = main_title, 
          col = color, 
          ylim = ylim) # Permite personalizar los límites del eje Y
}

# Resumen de la variable Profitable
summary(cdd_ranking_fortune_reescrito$Profitable)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   1.000   1.000   0.851   1.000   1.000
crear_boxplot_profitable(
  cdd_ranking_fortune_reescrito, 
  "Profitable", 
  main_title = "Diagrama de Caja de Profitable", 
  color = "orange", 
  ylim = c(-0.5, 1.5) # Escala personalizada (puedes ajustarla según tus necesidades)
)

Resumen de Profits_M (ganancias)
summary(cdd_ranking_fortune_reescrito$Profits_M)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -10298.0    154.5    541.4   1863.4   1398.3  96995.0
boxplot(cdd_ranking_fortune_reescrito$Profits_M, main = "Diagrama de caja Profit_M", col = c("gold"))

Diagrama de Dispersión Profits_M (ganancias) vs. Profitable
plot(cdd_ranking_fortune_reescrito$Profits_M, cdd_ranking_fortune_reescrito$Profitable, main = "Diagrama de Dispersión  Profits_M (ganancias) vs. Profitable")

Diagramas Totales de Dispersión
pairs(~Number_of_employees + Revenues_M + Profits_M + Assets_M + MarketCap_Updated_M , data = cdd_ranking_fortune_reescrito)

5.3.2 Formulación del modelo de RLS entre las variables de estudio.
  1. Coeficientes del Modelo RLS Intercepto = 0.83396: Este valor representa la probabilidad promedio de que una empresa sea rentable cuando las ganancias (Profits_M) son igual a cero. Aunque no tiene un significado práctico directo (porque es improbable que una empresa tenga ganancias exactamente iguales a cero), se incluye en el modelo para el ajuste del modelo de regresión. En este caso, un valor de 0.83396 indica que, cuando las ganancias son nulas, la probabilidad base de que la empresa sea rentable es 83.4%.

Pendiente = 9.144e-06: Este valor indica que por cada millón adicional de ganancias (Profits_M), la probabilidad de que la empresa sea rentable aumenta en 0.0009144%. Aunque la relación es positiva, el impacto es muy débil, sugiriendo que las ganancias tienen una influencia marginal sobre la probabilidad de rentabilidad de la empresa.

Resumen Estadístico del Modelo RLS Residuals:Los valores residuales representan la diferencia entre los valores observados de la variable dependiente (Profitable) y los valores predichos por el modelo. Los residuos son los siguientes:mínimo: -0.8340,Primer cuartil (1Q): 0.1293,Mediana: 0.1578,Tercer cuartil (3Q): 0.1628,Máximo: 0.1660, Estos valores sugieren que el modelo tiene algunos errores significativos en la predicción de la rentabilidad. La diferencia entre los valores predichos y observados puede ser relativamente grande en algunos casos, aunque el error es moderado en términos absolutos.

Coeficientes: El coeficiente de la variable Profits_M es 9.144e-06, con un valor p muy bajo (5.78e-08), lo que significa que existe una relación positiva entre las ganancias y la probabilidad de que una empresa sea rentable. Esta relación es estadísticamente significativa al nivel del 99.9% de confianza. Sin embargo, el coeficiente es pequeño, lo que indica que la influencia de las ganancias sobre la probabilidad de rentabilidad es débil.

R-squared (R² = 0.02908): El valor de R² es 0.02908, lo que significa que solo el 2.91% de la variabilidad en la probabilidad de rentabilidad de las empresas puede ser explicado por las ganancias. Este es un valor muy bajo, lo que indica que el modelo tiene una capacidad predictiva limitada. Las ganancias por sí solas no explican la mayor parte de la variabilidad en la rentabilidad.

F-statistic (29.89) y valor p (5.776e-08): El F-statistic es 29.89 y el valor p es 5.776e-08, lo que indica que el modelo es estadísticamente significativo en su conjunto. A pesar de la baja capacidad explicativa (bajo R²), el modelo muestra suficiente evidencia estadística para sugerir que las ganancias tienen un impacto en la probabilidad de rentabilidad.

  1. Tabla ANOVA para el Modelo RLS Profits_M:Df = 1: Hay una sola variable explicativa, Profits_M. Sum Sq = 3.687: La variabilidad total explicada por las ganancias es 3.687. Mean Sq = 3.6873: La media de la variabilidad explicada es 3.6873. F value = 29.891: El valor F es 29.891, lo que sugiere que el modelo es significativo. Pr(>F) = 5.776e-08: Este valor p es extremadamente bajo (5.776e-08), lo que indica que Profits_M es una variable explicativa significativamente relevante para el modelo. Residuals:Df = 998: El número de grados de libertad residuales es 998, lo que representa la cantidad de información no explicada por el modelo. Sum Sq = 123.112: La variabilidad no explicada por el modelo es 123.112.

La ANOVA confirma que, aunque Profits_M es significativa al nivel del 99.9% (p < 0.001), la variabilidad explicada por el modelo es baja. Esto refuerza la idea de que las ganancias por sí solas tienen una relación débil con la rentabilidad, y que la capacidad explicativa del modelo es limitada.

Relación débil: Existe una relación positiva entre las ganancias y la probabilidad de rentabilidad, pero el impacto es muy pequeño. Baja capacidad explicativa: Solo el 2.91% de la variabilidad en la rentabilidad de las empresas se explica por las ganancias. Modelo significativo: Aunque el poder explicativo es limitado, el modelo es estadísticamente significativo, lo que sugiere que las ganancias tienen un impacto en la rentabilidad, pero no son el único factor relevante.

Este modelo, aunque significativo, tiene una capacidad predictiva muy baja. Se recomienda considerar otras variables adicionales para mejorar la capacidad explicativa del modelo.

Coeficientes del Modelo RLS
modelo_RL_Simple = lm(cdd_ranking_fortune_reescrito$Profitable~cdd_ranking_fortune_reescrito$Profits_M)
coef(modelo_RL_Simple)
##                             (Intercept) cdd_ranking_fortune_reescrito$Profits_M 
##                            8.339600e-01                            9.144421e-06
Resumen Estadístico del Modelo RLS
summary(modelo_RL_Simple)
## 
## Call:
## lm(formula = cdd_ranking_fortune_reescrito$Profitable ~ cdd_ranking_fortune_reescrito$Profits_M)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.8340  0.1293  0.1578  0.1628  0.1660 
## 
## Coefficients:
##                                          Estimate Std. Error t value Pr(>|t|)
## (Intercept)                             8.340e-01  1.154e-02  72.294  < 2e-16
## cdd_ranking_fortune_reescrito$Profits_M 9.144e-06  1.673e-06   5.467 5.78e-08
##                                            
## (Intercept)                             ***
## cdd_ranking_fortune_reescrito$Profits_M ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3512 on 998 degrees of freedom
## Multiple R-squared:  0.02908,    Adjusted R-squared:  0.02811 
## F-statistic: 29.89 on 1 and 998 DF,  p-value: 5.776e-08
Tabla ANOVA para el Modelo RLS
anova(modelo_RL_Simple)
## Analysis of Variance Table
## 
## Response: cdd_ranking_fortune_reescrito$Profitable
##                                          Df  Sum Sq Mean Sq F value    Pr(>F)
## cdd_ranking_fortune_reescrito$Profits_M   1   3.687  3.6873  29.891 5.776e-08
## Residuals                               998 123.112  0.1234                  
##                                            
## cdd_ranking_fortune_reescrito$Profits_M ***
## Residuals                                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
5.1.2.3. Análisis del modelo RLS.

La navegación a través de las pestañas permite observar el intervalo de confianza para \(B1\) y las predicciones del modelo de regresión lineal simple, ambos calculados al 95 %. Las variables de interés analizadas en este caso (variable dependiente) (variable independiente).

Intervalo de Confianza para B1 Este intervalo nos indica que, con un nivel de confianza del 95%, el valor real del coeficiente para la variable Profits_M Profits_M se encuentra entre 5.86e-06 y 1.24e-05.Esto implica que, en promedio, por cada aumento en Profits_M.

Profits_M (es decir, un incremento en las ganacias de las empresas), el valor de la variable dependiente cambiará en un valor que está dentro de este rango. El hecho de que el intervalo no incluya cero sugiere que la variable

Profits_M tiene una relación significativa con la variable dependiente en el modelo.

El efecto de Profits_M sobre la variable dependiente es positivo, y el modelo sugiere que este efecto es estadísticamente significativo.

Predicciones y sus Intervalos de Predicción El modelo predice que, para los valores de entrada del 1 al 1000, los resultados seguirán una tendencia que está dentro de los intervalos de predicción mencionados, con un nivel de certeza del 95%. Los intervalos proporcionan un rango de valores posibles para cada predicción, lo que ayuda a entender la incertidumbre del modelo.

Si la predicción de un punto tiene un intervalo de predicción muy amplio, esto podría indicar que el modelo tiene alta incertidumbre en esa predicción. Por el contrario, si el intervalo es estrecho, el modelo tiene una mayor certeza sobre el valor predicho

Predicciones y sus intervalos de confianza fit: Son los valores predichos por el modelo para las observaciones de entrada (en este caso, las secuencias de números de 1 a 1000). lwr: Es el límite inferior del intervalo de confianza para cada predicción. upr: Es el límite superior del intervalo de confianza para cada predicción.

El intervalo de confianza ofrece una medida de que tan preciso es el modelo al predecir valores futuros. Si los intervalos son más amplios, sugiere que la predicción es menos precisa. Si son más estrechos, indica mayor precisión.

Este tipo de análisis es útil cuando se trabaja con predicciones en situaciones donde se necesita saber no solo el valor esperado, sino también cuánta variabilidad o error podría estar presente.

Intervalo de Confianza para B1
confint(modelo_RL_Simple, level = 0.95)
##                                                2.5 %       97.5 %
## (Intercept)                             8.113230e-01 8.565970e-01
## cdd_ranking_fortune_reescrito$Profits_M 5.862234e-06 1.242661e-05
Predicciones y sus Intervalos de Predicción
predict(modelo_RL_Simple, data.frame(seq(1,1000)), interval='prediction', level = 0.95)
##            fit        lwr      upr
## 1    0.9757991 0.28477856 1.666820
## 2    1.1121790 0.41626887 1.808089
## 3    1.7209232 0.96395781 2.477888
## 4    1.0386213 0.34577359 1.731469
## 5    1.7138637 0.95793998 2.469787
## 6    0.9102610 0.22036587 1.600156
## 7    1.1632506 0.46463496 1.861866
## 8    1.5087726 0.77990854 2.237637
## 9    0.8665141 0.17692445 1.556104
## 10   0.8499198 0.16035245 1.539487
## 11   0.8914967 0.20177632 1.581217
## 12   1.2870844 0.57997595 1.994193
## 13   1.4956595 0.76830639 2.223013
## 14   0.8363467 0.14675943 1.525934
## 15   1.0293671 0.33683439 1.721900
## 16   0.8811818 0.19152950 1.570834
## 17   0.8737108 0.18409542 1.563326
## 18   1.0764243 0.38212647 1.770722
## 19   0.9265656 0.23646515 1.616666
## 20   0.8887076 0.19900764 1.578408
## 21   0.9183447 0.22835399 1.608335
## 22   0.8586682 0.16909553 1.548241
## 23   0.9724340 0.28149065 1.663377
## 24   0.9224871 0.23244273 1.612532
## 25   0.8537485 0.16418062 1.543316
## 26   0.8981081 0.20833364 1.587883
## 27   0.9931461 0.30169400 1.684598
## 28   0.8057952 0.11603712 1.495553
## 29   0.9147510 0.22480422 1.604698
## 30   1.1914886 0.49117550 1.891802
## 31   0.9401633 0.24985386 1.630473
## 32   0.9656397 0.27484590 1.656433
## 33   0.9746744 0.28367984 1.665669
## 34   1.0090025 0.31710720 1.700898
## 35   0.9118339 0.22192108 1.601747
## 36   0.9303239 0.24016918 1.620479
## 37   0.8717996 0.18219200 1.561407
## 38   0.8567205 0.16715020 1.546291
## 39   0.7766034 0.08651941 1.466687
## 40   0.9710989 0.28018563 1.662012
## 41   0.9170554 0.22708068 1.607030
## 42   1.1554138 0.45724392 1.853584
## 43   0.8658100 0.17622233 1.555398
## 44   0.9169365 0.22696327 1.606910
## 45   0.8953008 0.20555027 1.585051
## 46   0.8702816 0.18067971 1.559884
## 47   0.8554860 0.16591688 1.545055
## 48   0.8633227 0.17374135 1.552904
## 49   0.9046098 0.21477418 1.594445
## 50   0.9679532 0.27710948 1.658797
## 51   0.8699433 0.18034257 1.559544
## 52   0.8136411 0.12394353 1.503339
## 53   0.8478001 0.15823192 1.537368
## 54   0.8501465 0.16057927 1.539714
## 55   0.8631764 0.17359537 1.552757
## 56   0.9206583 0.23063794 1.610679
## 57   0.8972394 0.20747250 1.587006
## 58   0.9105354 0.22063716 1.600434
## 59   0.9284676 0.23834003 1.618595
## 60   0.8483899 0.15882206 1.537958
## 61   0.8818951 0.19223870 1.571551
## 62   0.8696452 0.18004551 1.559245
## 63   0.9025614 0.21274594 1.592377
## 64   0.9269222 0.23681674 1.617028
## 65   1.1060980 0.41047848 1.801717
## 66   0.8361409 0.14655312 1.525729
## 67   0.8372977 0.14771297 1.526882
## 68   0.9341554 0.24394259 1.624368
## 69   0.8533370 0.16376931 1.542905
## 70   0.8761066 0.18648055 1.565733
## 71   0.8396926 0.15011349 1.529272
## 72   0.8737291 0.18411363 1.563345
## 73   0.8322408 0.14264077 1.521841
## 74   0.9492986 0.25882936 1.639768
## 75   0.8335467 0.14395101 1.523142
## 76   0.8756311 0.18600725 1.565255
## 77   0.8784293 0.18879184 1.568067
## 78   0.8413176 0.15174164 1.530894
## 79   0.8494049 0.15983749 1.538972
## 80   0.8748721 0.18525171 1.564493
## 81   0.8567113 0.16714107 1.546282
## 82   0.8637982 0.17421574 1.553381
## 83   0.8579001 0.16832844 1.547472
## 84   0.8375922 0.14800817 1.527176
## 85   0.8280344 0.13841794 1.517651
## 86   0.8414767 0.15190104 1.531052
## 87   0.8359078 0.14631928 1.525496
## 88   0.8803222 0.19067470 1.569970
## 89   0.9117150 0.22180355 1.601626
## 90   0.8845469 0.19487462 1.574219
## 91   0.8786488 0.18901018 1.568287
## 92   0.8357706 0.14618173 1.525359
## 93   0.8344437 0.14485093 1.524037
## 94   0.8672731 0.17768119 1.556865
## 95   0.9319333 0.24175452 1.622112
## 96   0.8210764 0.13142558 1.510727
## 97   0.8513381 0.16177084 1.540905
## 98   0.9073440 0.21748029 1.597208
## 99   0.8393461 0.14976617 1.528926
## 100  0.8453082 0.15573800 1.534878
## 101  0.8887808 0.19908028 1.578481
## 102  0.8269042 0.13728273 1.516526
## 103  0.8450568 0.15548625 1.534627
## 104  0.8642738 0.17469009 1.553857
## 105  0.8613110 0.17173383 1.550888
## 106  0.8053745 0.11561291 1.495136
## 107  0.8836051 0.19393856 1.573272
## 108  0.8862935 0.19660997 1.575977
## 109  0.8527609 0.16319344 1.542328
## 110  0.8404653 0.15088777 1.530043
## 111  0.8491516 0.15958410 1.538719
## 112  0.8535336 0.16396583 1.543101
## 113  0.8512155 0.16164831 1.540783
## 114  0.8856991 0.19601947 1.575379
## 115  0.8793072 0.18966513 1.568949
## 116  0.8716762 0.18206903 1.561283
## 117  0.9000925 0.21030016 1.589885
## 118  0.9627317 0.27199936 1.653464
## 119  0.8385871 0.14900548 1.528169
## 120  0.8773567 0.18772459 1.566989
## 121  0.9054054 0.21556172 1.595249
## 122  0.8760316 0.18640592 1.565657
## 123  0.8717813 0.18217378 1.561389
## 124  0.8753367 0.18571415 1.564959
## 125  0.8414401 0.15186440 1.531016
## 126  0.8699753 0.18037447 1.559576
## 127  0.8818804 0.19222415 1.571537
## 128  0.8439366 0.15436470 1.533508
## 129  0.8406811 0.15110400 1.530258
## 130  0.8640086 0.17442556 1.553592
## 131  0.8834130 0.19374769 1.573078
## 132  0.8239834 0.13434805 1.513619
## 133  0.8422220 0.15264758 1.531796
## 134  0.7699948 0.07981488 1.460175
## 135  0.9919116 0.30049206 1.683331
## 136  0.8801119 0.19046553 1.569758
## 137  0.8484969 0.15892910 1.538065
## 138  0.8429764 0.15340318 1.532550
## 139  0.8849676 0.19529261 1.574643
## 140  0.8431117 0.15353872 1.532685
## 141  0.8383932 0.14881117 1.527975
## 142  0.8284002 0.13878528 1.518015
## 143  0.8248302 0.13519903 1.514461
## 144  0.8341795 0.14458583 1.523773
## 145  0.8727872 0.18317567 1.562399
## 146  0.8435909 0.15401857 1.533163
## 147  0.8524774 0.16291005 1.542045
## 148  0.8599393 0.17036463 1.549514
## 149  0.8769022 0.18727233 1.566532
## 150  0.8321128 0.14251230 1.521713
## 151  0.8953831 0.20563189 1.585134
## 152  0.9008057 0.21100683 1.590605
## 153  0.8775240 0.18789110 1.567157
## 154  0.8857631 0.19608307 1.575443
## 155  0.8432974 0.15372462 1.532870
## 156  0.8600673 0.17049244 1.549642
## 157  0.8410085 0.15143199 1.530585
## 158  0.8966541 0.20689228 1.586416
## 159  0.8382122 0.14862968 1.527795
## 160  0.8802948 0.19064742 1.569942
## 161  0.8517276 0.16216036 1.541295
## 162  0.9114023 0.22149434 1.601310
## 163  0.8703182 0.18071616 1.559920
## 164  0.9363318 0.24608474 1.626579
## 165  0.8488014 0.15923374 1.538369
## 166  0.8568576 0.16728722 1.546428
## 167  0.8544618 0.16489347 1.544030
## 168  0.8463964 0.15682723 1.535966
## 169  0.9034027 0.21357906 1.593226
## 170  0.8922923 0.20256580 1.582019
## 171  0.8271026 0.13748205 1.516723
## 172  0.8349202 0.14532881 1.524512
## 173  0.8621522 0.17257343 1.551731
## 174  0.8391952 0.14961496 1.528775
## 175  0.8459986 0.15642909 1.535568
## 176  0.8558042 0.16623483 1.545374
## 177  0.8580830 0.16851109 1.547655
## 178  0.8508589 0.16129168 1.540426
## 179  0.8391110 0.14953064 1.528691
## 180  0.8683064 0.17871126 1.557902
## 181  0.8417693 0.15219417 1.531344
## 182  0.9388099 0.24852284 1.629097
## 183  0.8409600 0.15138343 1.530537
## 184  0.8462958 0.15672655 1.535865
## 185  0.8376086 0.14802467 1.527193
## 186  0.8340496 0.14445557 1.523644
## 187  0.8552482 0.16567932 1.544817
## 188  0.8680897 0.17849524 1.557684
## 189  0.8440582 0.15448648 1.533630
## 190  0.8731804 0.18356726 1.562794
## 191  0.8544252 0.16485692 1.543994
## 192  0.8407698 0.15119287 1.530347
## 193  0.8360211 0.14643299 1.525609
## 194  0.8608446 0.17126834 1.550421
## 195  0.8395472 0.14996778 1.529127
## 196  0.9083041 0.21843026 1.598178
## 197  0.8629021 0.17332166 1.552483
## 198  0.8500908 0.16052348 1.539658
## 199  0.8550287 0.16546003 1.544597
## 200  0.9243160 0.23424689 1.614385
## 201  0.8511012 0.16153401 1.540668
## 202  0.8188808 0.12921728 1.508544
## 203  0.8576797 0.16810834 1.547251
## 204  0.8276595 0.13804140 1.517278
## 205  0.8387489 0.14916771 1.528330
## 206  0.8482984 0.15873057 1.537866
## 207  0.8549922 0.16542348 1.544561
## 208  0.8383585 0.14877633 1.527941
## 209  0.8451802 0.15560984 1.534751
## 210  0.8835959 0.19392947 1.573262
## 211  0.8475303 0.15796199 1.537099
## 212  0.8787128 0.18907386 1.568352
## 213  0.8534010 0.16383330 1.542969
## 214  0.8390516 0.14947107 1.528632
## 215  0.8620151 0.17243655 1.551594
## 216  0.8530069 0.16343933 1.542574
## 217  0.8541518 0.16458366 1.543720
## 218  0.8365936 0.14700700 1.526180
## 219  0.8347720 0.14518022 1.524364
## 220  0.8401242 0.15054600 1.529702
## 221  0.8563721 0.16680216 1.545942
## 222  0.8765639 0.18693561 1.566192
## 223  0.8422083 0.15263384 1.531783
## 224  0.9548401 0.26426639 1.645414
## 225  0.8517368 0.16216950 1.541304
## 226  0.8455734 0.15600346 1.535143
## 227  0.8421443 0.15256973 1.531719
## 228  0.8651608 0.17557483 1.554747
## 229  0.8394613 0.14988164 1.529041
## 230  0.8521940 0.16262664 1.541761
## 231  0.8842726 0.19460200 1.573943
## 232  0.8582750 0.16870287 1.547847
## 233  0.8369328 0.14734716 1.526519
## 234  0.8934902 0.20375435 1.583226
## 235  0.8368588 0.14727290 1.526445
## 236  0.8570808 0.16751010 1.546651
## 237  0.8752096 0.18558762 1.564832
## 238  0.8406811 0.15110400 1.530258
## 239  0.8447138 0.15514294 1.534285
## 240  0.8480479 0.15847988 1.537616
## 241  0.8213956 0.13174650 1.511045
## 242  0.8183953 0.12872878 1.508062
## 243  0.8258123 0.13618586 1.515439
## 244  0.8341411 0.14454731 1.523735
## 245  0.8362845 0.14669708 1.525872
## 246  0.8620699 0.17249130 1.551649
## 247  0.8353545 0.14576445 1.524945
## 248  0.8506851 0.16111793 1.540252
## 249  0.8400484 0.15046995 1.529627
## 250  0.8449059 0.15533520 1.534477
## 251  0.8444048 0.15483349 1.533976
## 252  0.8373892 0.14780465 1.526974
## 253  0.8610000 0.17142351 1.550577
## 254  0.8573331 0.16776219 1.546904
## 255  0.8577574 0.16818597 1.547329
## 256  0.8462675 0.15669818 1.535837
## 257  0.8432873 0.15371455 1.532860
## 258  0.8396753 0.15009608 1.529254
## 259  0.8431593 0.15358634 1.532732
## 260  0.8470731 0.15750446 1.536642
## 261  0.8554183 0.16584927 1.544987
## 262  0.8522132 0.16264584 1.541781
## 263  0.8311207 0.14151654 1.520725
## 264  0.7806206 0.09059084 1.470650
## 265  0.8352311 0.14564064 1.524821
## 266  0.8357797 0.14619090 1.525369
## 267  0.8344602 0.14486744 1.524053
## 268  0.8558243 0.16625493 1.545394
## 269  0.8465089 0.15693980 1.536078
## 270  0.8582476 0.16867547 1.547820
## 271  0.8682241 0.17862923 1.557819
## 272  0.8426563 0.15308264 1.532230
## 273  0.8279896 0.13837294 1.517606
## 274  0.8380448 0.14846193 1.527628
## 275  0.8463781 0.15680892 1.535947
## 276  0.8497890 0.16022165 1.539356
## 277  0.8452899 0.15571969 1.534860
## 278  0.8385505 0.14896882 1.528132
## 279  0.8539040 0.16433599 1.543472
## 280  0.8461760 0.15660665 1.535745
## 281  0.8394695 0.14988989 1.529049
## 282  0.8419614 0.15238653 1.531536
## 283  0.8476126 0.15804435 1.537181
## 284  0.8383932 0.14881117 1.527975
## 285  0.8348854 0.14529395 1.524477
## 286  0.8351853 0.14559479 1.524776
## 287  0.8466835 0.15711460 1.536252
## 288  0.7731130 0.08297937 1.463247
## 289  0.8569948 0.16742424 1.546565
## 290  0.8679315 0.17833754 1.557525
## 291  0.8344657 0.14487295 1.524058
## 292  0.7397907 0.04906922 1.430512
## 293  0.8440847 0.15451303 1.533656
## 294  0.8287660 0.13915259 1.518379
## 295  0.8446718 0.15510083 1.534243
## 296  0.8355895 0.14600015 1.525179
## 297  0.8557603 0.16619098 1.545330
## 298  0.8561261 0.16655642 1.545696
## 299  0.8405239 0.15094641 1.530101
## 300  0.8485179 0.15895014 1.538086
## 301  0.8468171 0.15724822 1.536386
## 302  0.8501548 0.16058750 1.539722
## 303  0.8487008 0.15913311 1.538268
## 304  0.8404251 0.15084746 1.530003
## 305  0.8425192 0.15294526 1.532093
## 306  0.8343962 0.14480323 1.523989
## 307  0.8446123 0.15504132 1.534183
## 308  0.8423820 0.15280787 1.531956
## 309  0.8377824 0.14819884 1.527366
## 310  0.8396588 0.15007958 1.529238
## 311  0.8701134 0.18051206 1.559715
## 312  0.8498621 0.16029482 1.539429
## 313  0.8435296 0.15395722 1.533102
## 314  0.8256166 0.13598924 1.515244
## 315  0.8412481 0.15167202 1.530824
## 316  0.8406199 0.15104261 1.530197
## 317  0.8590249 0.16945164 1.548598
## 318  0.8467348 0.15716585 1.536304
## 319  0.8362370 0.14664940 1.525825
## 320  0.8395289 0.14994946 1.529108
## 321  0.8554402 0.16587120 1.545009
## 322  0.8549940 0.16542530 1.544563
## 323  0.8392729 0.14969286 1.528853
## 324  0.8397484 0.15016939 1.529327
## 325  0.8515904 0.16202321 1.541158
## 326  0.8383402 0.14875800 1.527922
## 327  0.8378281 0.14824468 1.527411
## 328  0.8409189 0.15134221 1.530496
## 329  0.8579732 0.16840150 1.547545
## 330  0.8327438 0.14314545 1.522342
## 331  0.8440371 0.15446542 1.533609
## 332  0.8456996 0.15612978 1.535269
## 333  0.8377641 0.14818051 1.527348
## 334  0.8183596 0.12869290 1.508026
## 335  0.8642701 0.17468645 1.553854
## 336  0.8402111 0.15063305 1.529789
## 337  0.8486642 0.15909652 1.538232
## 338  0.8506669 0.16109964 1.540234
## 339  0.8555088 0.16593973 1.545078
## 340  0.8465921 0.15702308 1.536161
## 341  0.8402834 0.15070544 1.529861
## 342  0.8440856 0.15451395 1.533657
## 343  0.8412170 0.15164087 1.530793
## 344  0.8380750 0.14849218 1.527658
## 345  0.8488837 0.15931607 1.538451
## 346  0.8272114 0.13759135 1.516831
## 347  0.8335037 0.14390789 1.523099
## 348  0.8299163 0.14030761 1.519525
## 349  0.8111538 0.12143831 1.500869
## 350  0.8376726 0.14808884 1.527256
## 351  0.8386877 0.14910630 1.528269
## 352  0.8426371 0.15306340 1.532211
## 353  0.8411475 0.15157124 1.530724
## 354  0.8270834 0.13746276 1.516704
## 355  0.8350445 0.14545354 1.524636
## 356  0.8104863 0.12076576 1.500207
## 357  0.8401873 0.15060923 1.529765
## 358  0.8342316 0.14463812 1.523825
## 359  0.8573971 0.16782613 1.546968
## 360  0.8457654 0.15619568 1.535335
## 361  0.8509851 0.16141788 1.540552
## 362  0.8343221 0.14472893 1.523915
## 363  0.8475239 0.15795559 1.537092
## 364  0.8299410 0.14033240 1.519550
## 365  0.8398353 0.15025644 1.529414
## 366  0.8373828 0.14779823 1.526967
## 367  0.8381975 0.14861501 1.527780
## 368  0.8415224 0.15194684 1.531098
## 369  0.8518831 0.16231579 1.541450
## 370  0.8326341 0.14303535 1.522233
## 371  0.8630301 0.17344939 1.552611
## 372  0.8440042 0.15443246 1.533576
## 373  0.8530261 0.16345853 1.542594
## 374  0.8277052 0.13808732 1.517323
## 375  0.8518008 0.16223350 1.541368
## 376  0.8291445 0.13953273 1.518756
## 377  0.8380750 0.14849218 1.527658
## 378  0.8465976 0.15702858 1.536167
## 379  0.8343075 0.14471426 1.523901
## 380  0.8280070 0.13839039 1.517624
## 381  0.8458660 0.15629637 1.535436
## 382  0.8649349 0.17534956 1.554520
## 383  0.8429389 0.15336563 1.532512
## 384  0.8384225 0.14884050 1.528004
## 385  0.8361089 0.14652102 1.525697
## 386  0.8428027 0.15322917 1.532376
## 387  0.8451253 0.15555491 1.534696
## 388  0.8335823 0.14398679 1.523178
## 389  0.8443938 0.15482250 1.533965
## 390  0.8592626 0.16968903 1.548836
## 391  0.8428255 0.15325207 1.532399
## 392  0.8437107 0.15413853 1.533283
## 393  0.8508159 0.16124870 1.540383
## 394  0.8465071 0.15693797 1.536076
## 395  0.8495878 0.16002043 1.539155
## 396  0.8777801 0.18814587 1.567414
## 397  0.8556140 0.16604480 1.545183
## 398  0.8353225 0.14573236 1.524913
## 399  0.8451957 0.15562540 1.534766
## 400  0.8670591 0.17746785 1.556650
## 401  0.8445776 0.15500653 1.534149
## 402  0.8360541 0.14646600 1.525642
## 403  0.8344373 0.14484451 1.524030
## 404  0.8370654 0.14748010 1.526651
## 405  0.8371349 0.14754978 1.526720
## 406  0.8485143 0.15894648 1.538082
## 407  0.8448967 0.15532604 1.534467
## 408  0.8414127 0.15183691 1.530988
## 409  0.8394284 0.14984865 1.529008
## 410  0.8429782 0.15340501 1.532551
## 411  0.8481357 0.15856771 1.537704
## 412  0.8483487 0.15878089 1.537917
## 413  0.8311252 0.14152113 1.520729
## 414  0.8360266 0.14643849 1.525615
## 415  0.8333107 0.14371431 1.522907
## 416  0.8405714 0.15099405 1.530149
## 417  0.8395930 0.15001360 1.529172
## 418  0.8682379 0.17864290 1.557833
## 419  0.8418059 0.15223081 1.531381
## 420  0.8408448 0.15126800 1.530422
## 421  0.8353902 0.14580022 1.524980
## 422  0.8364454 0.14685846 1.526032
## 423  0.8417693 0.15219417 1.531344
## 424  0.8344465 0.14485368 1.524039
## 425  0.8400282 0.15044979 1.529607
## 426  0.8421351 0.15256057 1.531710
## 427  0.8365323 0.14694557 1.526119
## 428  0.8529255 0.16335798 1.542493
## 429  0.8379378 0.14835468 1.527521
## 430  0.8466470 0.15707800 1.536216
## 431  0.8385578 0.14897615 1.528139
## 432  0.8497890 0.16022165 1.539356
## 433  0.8367948 0.14720872 1.526381
## 434  0.8202251 0.13056941 1.509881
## 435  0.8461376 0.15656821 1.535707
## 436  0.8325463 0.14294726 1.522145
## 437  0.8462867 0.15671740 1.535856
## 438  0.8418224 0.15224730 1.531397
## 439  0.8622693 0.17269023 1.551848
## 440  0.8560804 0.16651074 1.545650
## 441  0.8423454 0.15277123 1.531920
## 442  0.8344300 0.14483717 1.524023
## 443  0.8288574 0.13924441 1.518470
## 444  0.8430404 0.15346729 1.532614
## 445  0.8553945 0.16582552 1.544964
## 446  0.8331251 0.14352806 1.522722
## 447  0.8544225 0.16485417 1.543991
## 448  0.8436238 0.15405154 1.533196
## 449  0.8627009 0.17312092 1.552281
## 450  0.8385596 0.14897798 1.528141
## 451  0.8407269 0.15114981 1.530304
## 452  0.8539287 0.16436067 1.543497
## 453  0.8342746 0.14468123 1.523868
## 454  0.8406226 0.15104536 1.530200
## 455  0.8600673 0.17049244 1.549642
## 456  0.8428228 0.15324932 1.532396
## 457  0.8332376 0.14364092 1.522834
## 458  0.8309423 0.14133756 1.520547
## 459  0.8398399 0.15026102 1.529419
## 460  0.8304120 0.14080517 1.520019
## 461  0.8362580 0.14667049 1.525845
## 462  0.8360321 0.14644399 1.525620
## 463  0.8619346 0.17235624 1.551513
## 464  0.8466790 0.15711003 1.536248
## 465  0.8389510 0.14937026 1.528532
## 466  0.8422631 0.15268880 1.531837
## 467  0.8371340 0.14754886 1.526719
## 468  0.8420327 0.15245798 1.531607
## 469  0.8352311 0.14564064 1.524821
## 470  0.8417510 0.15217585 1.531326
## 471  0.8409573 0.15138069 1.530534
## 472  0.8424936 0.15291961 1.532068
## 473  0.8394466 0.14986698 1.529026
## 474  0.8426454 0.15307165 1.532219
## 475  0.8356883 0.14609919 1.525277
## 476  0.8416322 0.15205677 1.531208
## 477  0.8346550 0.14506282 1.524247
## 478  0.8420711 0.15249645 1.531646
## 479  0.8383219 0.14873967 1.527904
## 480  0.8364994 0.14691256 1.526086
## 481  0.8419888 0.15241401 1.531564
## 482  0.8412938 0.15171782 1.530870
## 483  0.8409911 0.15141458 1.530568
## 484  0.8433239 0.15375118 1.532897
## 485  0.8353225 0.14573236 1.524913
## 486  0.8395289 0.14994946 1.529108
## 487  0.8396753 0.15009608 1.529254
## 488  0.8445218 0.15495068 1.534093
## 489  0.8388641 0.14928319 1.528445
## 490  0.8465884 0.15701942 1.536157
## 491  0.8394338 0.14985415 1.529014
## 492  0.8383374 0.14875525 1.527920
## 493  0.8386630 0.14908155 1.528244
## 494  0.8444944 0.15492322 1.534066
## 495  0.8359452 0.14635688 1.525534
## 496  0.8488745 0.15930693 1.538442
## 497  0.8504017 0.16083443 1.539969
## 498  0.8398124 0.15023353 1.529391
## 499  0.8368295 0.14724356 1.526415
## 500  0.8330181 0.14342072 1.522616
## 501  0.8485636 0.15899588 1.538131
## 502  0.8365936 0.14700700 1.526180
## 503  0.8206924 0.13103936 1.510345
## 504  0.8367152 0.14712895 1.526301
## 505  0.8476949 0.15812670 1.537263
## 506  0.8368963 0.14731049 1.526482
## 507  0.8315367 0.14193414 1.521139
## 508  0.8314453 0.14184236 1.521048
## 509  0.8353591 0.14576904 1.524949
## 510  0.8498274 0.16026007 1.539395
## 511  0.8358456 0.14625692 1.525434
## 512  0.8379808 0.14839776 1.527564
## 513  0.8339691 0.14437485 1.523563
## 514  0.8410808 0.15150437 1.530657
## 515  0.8407159 0.15113881 1.530293
## 516  0.8446489 0.15507794 1.534220
## 517  0.8381683 0.14858568 1.527751
## 518  0.7908532 0.10094814 1.480758
## 519  0.8383832 0.14880108 1.527965
## 520  0.8363275 0.14674018 1.525915
## 521  0.8452991 0.15572884 1.534869
## 522  0.8381683 0.14858568 1.527751
## 523  0.8398828 0.15030409 1.529462
## 524  0.8383036 0.14872134 1.527886
## 525  0.8374779 0.14789357 1.527062
## 526  0.8373526 0.14776798 1.526937
## 527  0.8481704 0.15860248 1.537738
## 528  0.8359718 0.14638347 1.525560
## 529  0.8361867 0.14659896 1.525774
## 530  0.8401837 0.15060556 1.529762
## 531  0.8425192 0.15294526 1.532093
## 532  0.8376946 0.14811084 1.527278
## 533  0.8409555 0.15137885 1.530532
## 534  0.8370700 0.14748469 1.526655
## 535  0.8479071 0.15833897 1.537475
## 536  0.8459684 0.15639889 1.535538
## 537  0.8458295 0.15625976 1.535399
## 538  0.8406354 0.15105819 1.530213
## 539  0.8481979 0.15862993 1.537766
## 540  0.8372502 0.14766530 1.526835
## 541  0.8355273 0.14593779 1.525117
## 542  0.8358584 0.14626976 1.525447
## 543  0.8503166 0.16074938 1.539884
## 544  0.8387398 0.14915854 1.528321
## 545  0.8393570 0.14977717 1.528937
## 546  0.8378043 0.14822085 1.527388
## 547  0.8377193 0.14813559 1.527303
## 548  0.8294792 0.13986877 1.519090
## 549  0.8456100 0.15604007 1.535180
## 550  0.8433147 0.15374202 1.532887
## 551  0.8222533 0.13260892 1.511898
## 552  0.8334351 0.14383909 1.523031
## 553  0.8358803 0.14629177 1.525469
## 554  0.8342435 0.14465004 1.523837
## 555  0.8348836 0.14529212 1.524475
## 556  0.8349586 0.14536733 1.524550
## 557  0.8362424 0.14665490 1.525830
## 558  0.8466177 0.15704871 1.536187
## 559  0.8387078 0.14912646 1.528289
## 560  0.8407150 0.15113790 1.530292
## 561  0.8336527 0.14405743 1.523248
## 562  0.8418772 0.15230226 1.531452
## 563  0.8436439 0.15407168 1.533216
## 564  0.8397265 0.15014740 1.529306
## 565  0.8283252 0.13870998 1.517940
## 566  0.8378921 0.14830885 1.527475
## 567  0.8317836 0.14218193 1.521385
## 568  0.8381939 0.14861134 1.527776
## 569  0.8467841 0.15721527 1.536353
## 570  0.8359425 0.14635413 1.525531
## 571  0.8342828 0.14468949 1.523876
## 572  0.8369411 0.14735541 1.526527
## 573  0.8372200 0.14763504 1.526805
## 574  0.8486551 0.15908737 1.538223
## 575  0.8488197 0.15925204 1.538387
## 576  0.8420299 0.15245523 1.531605
## 577  0.8374971 0.14791283 1.527081
## 578  0.8358876 0.14629911 1.525476
## 579  0.8408695 0.15129273 1.530446
## 580  0.8452945 0.15572427 1.534865
## 581  0.8424003 0.15282619 1.531974
## 582  0.8314846 0.14188183 1.521087
## 583  0.8530471 0.16347956 1.542615
## 584  0.8452067 0.15563638 1.534777
## 585  0.8404214 0.15084379 1.529999
## 586  0.8342252 0.14463170 1.523819
## 587  0.8351131 0.14552233 1.524704
## 588  0.8409774 0.15140084 1.530554
## 589  0.8548376 0.16526905 1.544406
## 590  0.8337981 0.14420330 1.523393
## 591  0.8330730 0.14347577 1.522670
## 592  0.8420592 0.15248454 1.531634
## 593  0.8634617 0.17388002 1.553043
## 594  0.8367966 0.14721055 1.526383
## 595  0.8386072 0.14902564 1.528189
## 596  0.8387444 0.14916313 1.528326
## 597  0.8406473 0.15107010 1.530225
## 598  0.8254246 0.13579629 1.515053
## 599  0.8404919 0.15091434 1.530069
## 600  0.8395116 0.14993205 1.529091
## 601  0.8361409 0.14655312 1.525729
## 602  0.8422448 0.15267048 1.531819
## 603  0.8370837 0.14749844 1.526669
## 604  0.8356444 0.14605517 1.525234
## 605  0.8426362 0.15306249 1.532210
## 606  0.8436256 0.15405337 1.533198
## 607  0.8428374 0.15326398 1.532411
## 608  0.8354332 0.14584333 1.525023
## 609  0.8359206 0.14633212 1.525509
## 610  0.8353399 0.14574978 1.524930
## 611  0.8352375 0.14564706 1.524828
## 612  0.8374157 0.14783124 1.527000
## 613  0.8332696 0.14367303 1.522866
## 614  0.8409079 0.15133121 1.530485
## 615  0.8298679 0.14025895 1.519477
## 616  0.8431858 0.15361290 1.532759
## 617  0.8236753 0.13403832 1.513312
## 618  0.8370051 0.14741959 1.526591
## 619  0.8357980 0.14620924 1.525387
## 620  0.8363778 0.14679061 1.525965
## 621  0.8407269 0.15114981 1.530304
## 622  0.8444560 0.15488476 1.534027
## 623  0.8398216 0.15024270 1.529400
## 624  0.8340213 0.14442714 1.523615
## 625  0.8389464 0.14936568 1.528527
## 626  0.8355145 0.14592495 1.525104
## 627  0.8420162 0.15244149 1.531591
## 628  0.8372447 0.14765980 1.526830
## 629  0.8369173 0.14733158 1.526503
## 630  0.8395774 0.14999803 1.529157
## 631  0.8405257 0.15094824 1.530103
## 632  0.8315870 0.14198462 1.521189
## 633  0.8293878 0.13977695 1.518999
## 634  0.8387380 0.14915671 1.528319
## 635  0.8365908 0.14700425 1.526177
## 636  0.8386968 0.14911547 1.528278
## 637  0.8352923 0.14570209 1.524883
## 638  0.8432059 0.15363305 1.532779
## 639  0.8350884 0.14549757 1.524679
## 640  0.8421625 0.15258805 1.531737
## 641  0.8482006 0.15863267 1.537769
## 642  0.8203412 0.13068621 1.509996
## 643  0.8373709 0.14778631 1.526955
## 644  0.8382972 0.14871492 1.527879
## 645  0.8393561 0.14977625 1.528936
## 646  0.8409061 0.15132938 1.530483
## 647  0.8314718 0.14186898 1.521075
## 648  0.8371240 0.14753878 1.526709
## 649  0.8259714 0.13634572 1.515597
## 650  0.8373261 0.14774139 1.526911
## 651  0.8373892 0.14780465 1.526974
## 652  0.8363055 0.14671817 1.525893
## 653  0.8354396 0.14584975 1.525029
## 654  0.8310219 0.14141741 1.520626
## 655  0.8347620 0.14517013 1.524354
## 656  0.8342929 0.14469958 1.523886
## 657  0.8360449 0.14645683 1.525633
## 658  0.8344511 0.14485827 1.524044
## 659  0.8303333 0.14072622 1.519940
## 660  0.8371788 0.14759379 1.526764
## 661  0.8429471 0.15337388 1.532520
## 662  0.8375638 0.14797975 1.527148
## 663  0.8390470 0.14946649 1.528628
## 664  0.8362827 0.14669525 1.525870
## 665  0.8327090 0.14311059 1.522307
## 666  0.8295533 0.13994313 1.519163
## 667  0.8349092 0.14531780 1.524501
## 668  0.8385468 0.14896515 1.528129
## 669  0.8377741 0.14819059 1.527358
## 670  0.8361812 0.14659346 1.525769
## 671  0.8362223 0.14663473 1.525810
## 672  0.8377522 0.14816859 1.527336
## 673  0.8376269 0.14804300 1.527211
## 674  0.8367481 0.14716196 1.526334
## 675  0.8348406 0.14524901 1.524432
## 676  0.8376589 0.14807509 1.527243
## 677  0.8401782 0.15060006 1.529756
## 678  0.8345306 0.14493807 1.524123
## 679  0.8218665 0.13222002 1.511513
## 680  0.8366667 0.14708035 1.526253
## 681  0.8315587 0.14195616 1.521161
## 682  0.8369749 0.14738934 1.526560
## 683  0.8397896 0.15021063 1.529369
## 684  0.8364601 0.14687313 1.526047
## 685  0.8536050 0.16403712 1.543173
## 686  0.8233433 0.13370468 1.512982
## 687  0.8335851 0.14398954 1.523181
## 688  0.8460443 0.15647485 1.535614
## 689  0.8357468 0.14615788 1.525336
## 690  0.8387069 0.14912555 1.528288
## 691  0.8359654 0.14637705 1.525554
## 692  0.7842875 0.09430468 1.474270
## 693  0.8227032 0.13306122 1.512345
## 694  0.8358373 0.14624867 1.525426
## 695  0.8362095 0.14662189 1.525797
## 696  0.8371304 0.14754520 1.526716
## 697  0.8349586 0.14536733 1.524550
## 698  0.8308481 0.14124302 1.520453
## 699  0.8362900 0.14670258 1.525877
## 700  0.8363915 0.14680436 1.525979
## 701  0.8333620 0.14376569 1.522958
## 702  0.8396844 0.15010524 1.529264
## 703  0.8356673 0.14607810 1.525256
## 704  0.8405659 0.15098856 1.530143
## 705  0.8364025 0.14681537 1.525990
## 706  0.8355456 0.14595613 1.525135
## 707  0.8348287 0.14523709 1.524420
## 708  0.8338777 0.14428311 1.523472
## 709  0.8369603 0.14737467 1.526546
## 710  0.8420610 0.15248637 1.531636
## 711  0.8316190 0.14201674 1.521221
## 712  0.8419202 0.15234531 1.531495
## 713  0.8465317 0.15696268 1.536101
## 714  0.8425923 0.15301853 1.532166
## 715  0.8372995 0.14771480 1.526884
## 716  0.8411201 0.15154376 1.530696
## 717  0.8333812 0.14378496 1.522977
## 718  0.8421680 0.15259354 1.531743
## 719  0.8363714 0.14678419 1.525959
## 720  0.8352320 0.14564156 1.524822
## 721  0.8354917 0.14590202 1.525081
## 722  0.8389455 0.14936476 1.528526
## 723  0.8327346 0.14313628 1.522333
## 724  0.8343998 0.14480690 1.523993
## 725  0.8359617 0.14637338 1.525550
## 726  0.8353390 0.14574886 1.524929
## 727  0.8377165 0.14813284 1.527300
## 728  0.8246747 0.13504282 1.514307
## 729  0.8364884 0.14690156 1.526075
## 730  0.8362123 0.14662464 1.525800
## 731  0.8348982 0.14530679 1.524490
## 732  0.8382999 0.14871767 1.527882
## 733  0.8351113 0.14552050 1.524702
## 734  0.8237914 0.13415505 1.513428
## 735  0.8388733 0.14929236 1.528454
## 736  0.8343495 0.14475645 1.523943
## 737  0.8434803 0.15390777 1.533053
## 738  0.8343450 0.14475186 1.523938
## 739  0.8419367 0.15236180 1.531512
## 740  0.8376260 0.14804209 1.527210
## 741  0.8382158 0.14863334 1.527798
## 742  0.8381299 0.14854718 1.527713
## 743  0.8403885 0.15081081 1.529966
## 744  0.8359224 0.14633395 1.525511
## 745  0.8370984 0.14751311 1.526684
## 746  0.8338183 0.14422348 1.523413
## 747  0.8339124 0.14431797 1.523507
## 748  0.8445785 0.15500745 1.534150
## 749  0.8368222 0.14723622 1.526408
## 750  0.8346861 0.14509400 1.524278
## 751  0.8327529 0.14315463 1.522351
## 752  0.8337533 0.14415835 1.523348
## 753  0.8412079 0.15163171 1.530784
## 754  0.8504337 0.16086644 1.540001
## 755  0.8384042 0.14882216 1.527986
## 756  0.8371240 0.14753878 1.526709
## 757  0.8345315 0.14493899 1.524124
## 758  0.8418955 0.15232058 1.531470
## 759  0.8380293 0.14844635 1.527612
## 760  0.8339966 0.14440237 1.523591
## 761  0.8433221 0.15374935 1.532895
## 762  0.8389099 0.14932902 1.528491
## 763  0.8363467 0.14675943 1.525934
## 764  0.8323945 0.14279494 1.521994
## 765  0.8452780 0.15570779 1.534848
## 766  0.8317105 0.14210851 1.521312
## 767  0.8380302 0.14844726 1.527613
## 768  0.8390498 0.14946924 1.528630
## 769  0.8320744 0.14247376 1.521675
## 770  0.8300919 0.14048387 1.519700
## 771  0.8389675 0.14938676 1.528548
## 772  0.8368067 0.14722064 1.526393
## 773  0.8345626 0.14497017 1.524155
## 774  0.8358867 0.14629819 1.525475
## 775  0.8411731 0.15159689 1.530749
## 776  0.8347812 0.14518939 1.524373
## 777  0.8345471 0.14495458 1.524140
## 778  0.8409226 0.15134587 1.530499
## 779  0.8339609 0.14436659 1.523555
## 780  0.8368332 0.14724723 1.526419
## 781  0.8429389 0.15336563 1.532512
## 782  0.8238764 0.13424052 1.513512
## 783  0.8375812 0.14799717 1.527165
## 784  0.8366658 0.14707944 1.526252
## 785  0.8396295 0.15005026 1.529209
## 786  0.8359480 0.14635963 1.525536
## 787  0.8358748 0.14628627 1.525463
## 788  0.8356481 0.14605884 1.525237
## 789  0.8312532 0.14164962 1.520857
## 790  0.8362735 0.14668608 1.525861
## 791  0.8371029 0.14751769 1.526688
## 792  0.8355676 0.14597814 1.525157
## 793  0.8394247 0.14984499 1.529004
## 794  0.8363302 0.14674293 1.525918
## 795  0.8396506 0.15007134 1.529230
## 796  0.8365177 0.14693090 1.526104
## 797  0.8357816 0.14619273 1.525370
## 798  0.8266253 0.13700256 1.516248
## 799  0.8416870 0.15211173 1.531262
## 800  0.8347921 0.14520040 1.524384
## 801  0.8386858 0.14910447 1.528267
## 802  0.8389117 0.14933085 1.528493
## 803  0.8171251 0.12745073 1.506799
## 804  0.8569445 0.16737400 1.546515
## 805  0.8366503 0.14706385 1.526237
## 806  0.8338594 0.14426476 1.523454
## 807  0.8349037 0.14531230 1.524495
## 808  0.8367134 0.14712712 1.526300
## 809  0.8344456 0.14485277 1.524038
## 810  0.8304842 0.14087768 1.520091
## 811  0.8295085 0.13989815 1.519119
## 812  0.8356124 0.14602307 1.525202
## 813  0.8402687 0.15069077 1.529847
## 814  0.8352850 0.14569475 1.524875
## 815  0.8343587 0.14476562 1.523952
## 816  0.8359343 0.14634587 1.525523
## 817  0.8364738 0.14688689 1.526061
## 818  0.8365616 0.14697491 1.526148
## 819  0.8362589 0.14667141 1.525846
## 820  0.8274711 0.13785220 1.517090
## 821  0.8411320 0.15155567 1.530708
## 822  0.8390233 0.14944266 1.528604
## 823  0.8405623 0.15098489 1.530140
## 824  0.8352667 0.14567641 1.524857
## 825  0.8400099 0.15043146 1.529588
## 826  0.8389318 0.14935101 1.528513
## 827  0.8348662 0.14527469 1.524458
## 828  0.8348872 0.14529579 1.524479
## 829  0.8496948 0.16012744 1.539262
## 830  0.8342764 0.14468307 1.523870
## 831  0.8372410 0.14765613 1.526826
## 832  0.8394732 0.14989356 1.529053
## 833  0.8350025 0.14541135 1.524594
## 834  0.8343925 0.14479956 1.523985
## 835  0.8308052 0.14119987 1.520410
## 836  0.8369210 0.14733524 1.526507
## 837  0.8419257 0.15235081 1.531501
## 838  0.8385185 0.14893674 1.528100
## 839  0.8399176 0.15033891 1.529496
## 840  0.8462958 0.15672655 1.535865
## 841  0.8396533 0.15007409 1.529233
## 842  0.8355237 0.14593412 1.525113
## 843  0.8415572 0.15198165 1.531133
## 844  0.8351085 0.14551775 1.524699
## 845  0.8331059 0.14350880 1.522703
## 846  0.8349878 0.14539668 1.524579
## 847  0.8372218 0.14763688 1.526807
## 848  0.8377138 0.14813009 1.527297
## 849  0.8371331 0.14754795 1.526718
## 850  0.8332650 0.14366844 1.522862
## 851  0.8394110 0.14983124 1.528991
## 852  0.8356993 0.14611020 1.525288
## 853  0.8304339 0.14082720 1.520041
## 854  0.8342828 0.14468949 1.523876
## 855  0.8320095 0.14240860 1.521610
## 856  0.8277518 0.13813416 1.517370
## 857  0.8333062 0.14370973 1.522903
## 858  0.8350363 0.14544529 1.524627
## 859  0.8425009 0.15292694 1.532075
## 860  0.8359654 0.14637705 1.525554
## 861  0.8408915 0.15131472 1.530468
## 862  0.8382030 0.14862051 1.527786
## 863  0.8346522 0.14506006 1.524244
## 864  0.8285246 0.13891017 1.518139
## 865  0.8344035 0.14481057 1.523996
## 866  0.8312990 0.14169551 1.520902
## 867  0.8388129 0.14923187 1.528394
## 868  0.8383155 0.14873325 1.527898
## 869  0.8349924 0.14540126 1.524584
## 870  0.8348278 0.14523617 1.524419
## 871  0.8433074 0.15373470 1.532880
## 872  0.8378263 0.14824285 1.527410
## 873  0.8355712 0.14598181 1.525161
## 874  0.8374065 0.14782207 1.526991
## 875  0.8366768 0.14709044 1.526263
## 876  0.8359983 0.14641006 1.525587
## 877  0.8343916 0.14479865 1.523985
## 878  0.8338713 0.14427669 1.523466
## 879  0.8342261 0.14463262 1.523820
## 880  0.8379378 0.14835468 1.527521
## 881  0.8385971 0.14901556 1.528179
## 882  0.8356810 0.14609185 1.525270
## 883  0.8347766 0.14518481 1.524368
## 884  0.8336345 0.14403909 1.523230
## 885  0.8191277 0.12946566 1.508790
## 886  0.8391696 0.14958930 1.528750
## 887  0.8401142 0.15053592 1.529692
## 888  0.8351268 0.14553609 1.524718
## 889  0.8322317 0.14263160 1.521832
## 890  0.8338676 0.14427302 1.523462
## 891  0.8349293 0.14533798 1.524521
## 892  0.8372182 0.14763321 1.526803
## 893  0.8376507 0.14806684 1.527235
## 894  0.8378665 0.14828318 1.527450
## 895  0.8283965 0.13878161 1.518011
## 896  0.8352448 0.14565440 1.524835
## 897  0.8334534 0.14385744 1.523049
## 898  0.8262988 0.13667461 1.515923
## 899  0.8398325 0.15025369 1.529411
## 900  0.8393863 0.14980650 1.528966
## 901  0.8360861 0.14649810 1.525674
## 902  0.8234302 0.13379200 1.513068
## 903  0.8342736 0.14468032 1.523867
## 904  0.8337616 0.14416660 1.523357
## 905  0.8402980 0.15072010 1.529876
## 906  0.8360449 0.14645683 1.525633
## 907  0.8360852 0.14649718 1.525673
## 908  0.8383191 0.14873692 1.527901
## 909  0.8291354 0.13952354 1.518747
## 910  0.8354505 0.14586075 1.525040
## 911  0.8364116 0.14682454 1.525999
## 912  0.8337241 0.14412899 1.523319
## 913  0.8352832 0.14569292 1.524873
## 914  0.8372054 0.14762038 1.526790
## 915  0.8415992 0.15202379 1.531175
## 916  0.8379296 0.14834643 1.527513
## 917  0.8358758 0.14628718 1.525464
## 918  0.8347217 0.14512977 1.524314
## 919  0.8372017 0.14761671 1.526787
## 920  0.8392766 0.14969652 1.528857
## 921  0.8345480 0.14495550 1.524140
## 922  0.8358849 0.14629636 1.525473
## 923  0.8345205 0.14492798 1.524113
## 924  0.8356325 0.14604325 1.525222
## 925  0.8355273 0.14593779 1.525117
## 926  0.8338896 0.14429504 1.523484
## 927  0.8321128 0.14251230 1.521713
## 928  0.8392327 0.14965253 1.528813
## 929  0.8375711 0.14798708 1.527155
## 930  0.8416971 0.15212181 1.531272
## 931  0.8263143 0.13669022 1.515938
## 932  0.8438799 0.15430793 1.533452
## 933  0.8391174 0.14953706 1.528698
## 934  0.8224225 0.13277900 1.512066
## 935  0.8234265 0.13378832 1.513065
## 936  0.8361885 0.14660080 1.525776
## 937  0.8360394 0.14645133 1.525628
## 938  0.8357724 0.14618356 1.525361
## 939  0.8358373 0.14624867 1.525426
## 940  0.8319629 0.14236180 1.521564
## 941  0.8424533 0.15287931 1.532027
## 942  0.8346367 0.14504447 1.524229
## 943  0.8349878 0.14539668 1.524579
## 944  0.8320900 0.14248936 1.521691
## 945  0.8358428 0.14625417 1.525431
## 946  0.8367728 0.14718671 1.526359
## 947  0.8339618 0.14436751 1.523556
## 948  0.8338512 0.14425651 1.523446
## 949  0.8371487 0.14756353 1.526734
## 950  0.8395802 0.15000078 1.529160
## 951  0.8356243 0.14603500 1.525214
## 952  0.8315779 0.14197544 1.521180
## 953  0.8359306 0.14634221 1.525519
## 954  0.8385487 0.14896698 1.528130
## 955  0.8308856 0.14128065 1.520491
## 956  0.8375163 0.14793208 1.527100
## 957  0.8348470 0.14525543 1.524439
## 958  0.8349074 0.14531597 1.524499
## 959  0.8346696 0.14507749 1.524262
## 960  0.8395802 0.15000078 1.529160
## 961  0.8363375 0.14675026 1.525925
## 962  0.8380640 0.14848118 1.527647
## 963  0.8377714 0.14818784 1.527355
## 964  0.8281323 0.13851621 1.517748
## 965  0.8359489 0.14636055 1.525537
## 966  0.8337058 0.14411064 1.523301
## 967  0.8337643 0.14416936 1.523359
## 968  0.8394284 0.14984865 1.529008
## 969  0.8413048 0.15172881 1.530881
## 970  0.8343742 0.14478122 1.523967
## 971  0.8330666 0.14346934 1.522664
## 972  0.8384179 0.14883591 1.528000
## 973  0.8365744 0.14698775 1.526161
## 974  0.8469423 0.15737359 1.536511
## 975  0.8360724 0.14648434 1.525660
## 976  0.8376342 0.14805034 1.527218
## 977  0.8319446 0.14234345 1.521546
## 978  0.8355877 0.14599831 1.525177
## 979  0.8350948 0.14550399 1.524686
## 980  0.8399578 0.15037923 1.529536
## 981  0.8373654 0.14778081 1.526950
## 982  0.8361089 0.14652102 1.525697
## 983  0.8397219 0.15014281 1.529301
## 984  0.8330437 0.14344641 1.522641
## 985  0.8347482 0.14515637 1.524340
## 986  0.8339609 0.14436659 1.523555
## 987  0.8344757 0.14488304 1.524068
## 988  0.8363979 0.14681078 1.525985
## 989  0.8392820 0.14970202 1.528862
## 990  0.8353774 0.14578738 1.524967
## 991  0.8360751 0.14648709 1.525663
## 992  0.8444633 0.15489209 1.534034
## 993  0.8339609 0.14436659 1.523555
## 994  0.8311298 0.14152572 1.520734
## 995  0.8361803 0.14659255 1.525768
## 996  0.8350354 0.14544437 1.524626
## 997  0.8381079 0.14852518 1.527691
## 998  0.8320936 0.14249303 1.521694
## 999  0.8362077 0.14662005 1.525795
## 1000 0.8311170 0.14151287 1.520721
Predicciones y sus Intervalos de Confianza
predict(modelo_RL_Simple, data.frame(seq(1,1000)), interval='confidence', level = 0.95)
##            fit       lwr       upr
## 1    0.9757991 0.9259843 1.0256140
## 2    1.1121790 1.0159343 1.2084237
## 3    1.7209232 1.4079237 2.0339226
## 4    1.0386213 0.9678396 1.1094029
## 5    1.7138637 1.4033919 2.0243354
## 6    0.9102610 0.8798068 0.9407153
## 7    1.1632506 1.0490756 1.2774256
## 8    1.5087726 1.2716758 1.7458694
## 9    0.8665141 0.8440189 0.8890094
## 10   0.8499198 0.8281212 0.8717183
## 11   0.8914967 0.8652993 0.9176941
## 12   1.2870844 1.1290514 1.4451173
## 13   1.4956595 1.2632490 1.7280699
## 14   0.8363467 0.8139259 0.8587674
## 15   1.0293671 0.9617379 1.0969963
## 16   0.8811818 0.8568429 0.9055207
## 17   0.8737108 0.8504412 0.8969804
## 18   1.0764243 0.9926292 1.1602195
## 19   0.9265656 0.8917710 0.9613601
## 20   0.8887076 0.8630521 0.9143632
## 21   0.9183447 0.8857977 0.9508917
## 22   0.8586682 0.8367000 0.8806365
## 23   0.9724340 0.9237024 1.0211656
## 24   0.9224871 0.8888212 0.9561531
## 25   0.8537485 0.8319311 0.8755660
## 26   0.8981081 0.8705233 0.9256929
## 27   0.9931461 0.9376656 1.0486266
## 28   0.8057952 0.7786237 0.8329666
## 29   0.9147510 0.8831501 0.9463518
## 30   1.1914886 1.0673495 1.3156277
## 31   0.9401633 0.9014434 0.9788832
## 32   0.9656397 0.9190764 1.0122029
## 33   0.9746744 0.9252222 1.0241265
## 34   1.0090025 0.9482471 1.0697579
## 35   0.9118339 0.8809827 0.9426850
## 36   0.9303239 0.8944678 0.9661800
## 37   0.8717996 0.8487613 0.8948379
## 38   0.8567205 0.8348288 0.8786121
## 39   0.7766034 0.7421349 0.8110719
## 40   0.9710989 0.9227954 1.0194024
## 41   0.9170554 0.8848505 0.9492602
## 42   1.1554138 1.0439986 1.2668290
## 43   0.8658100 0.8433760 0.8882440
## 44   0.9169365 0.8847631 0.9491099
## 45   0.8953008 0.8683218 0.9222797
## 46   0.8702816 0.8474141 0.8931492
## 47   0.8554860 0.8336314 0.8773405
## 48   0.8633227 0.8410833 0.8855621
## 49   0.9046098 0.8755360 0.9336836
## 50   0.9679532 0.9206546 1.0152518
## 51   0.8699433 0.8471122 0.8927744
## 52   0.8136411 0.7880514 0.8392308
## 53   0.8478001 0.8259747 0.8696255
## 54   0.8501465 0.8283492 0.8719438
## 55   0.8631764 0.8409474 0.8854054
## 56   0.9206583 0.8874899 0.9538266
## 57   0.8972394 0.8698446 0.9246342
## 58   0.9105354 0.8800123 0.9410585
## 59   0.9284676 0.8931383 0.9637969
## 60   0.8483899 0.8265746 0.8702052
## 61   0.8818951 0.8574411 0.9063490
## 62   0.8696452 0.8468457 0.8924446
## 63   0.9025614 0.8739689 0.9311539
## 64   0.9269222 0.8920277 0.9618166
## 65   1.1060980 1.0119779 1.2002180
## 66   0.8361409 0.8137028 0.8585791
## 67   0.8372977 0.8149546 0.8596408
## 68   0.9341554 0.8971979 0.9711130
## 69   0.8533370 0.8315258 0.8751483
## 70   0.8761066 0.8525220 0.8996913
## 71   0.8396926 0.8175228 0.8618624
## 72   0.8737291 0.8504572 0.8970010
## 73   0.8322408 0.8094294 0.8550523
## 74   0.9492986 0.9078275 0.9907697
## 75   0.8335467 0.8108691 0.8562242
## 76   0.8756311 0.8521112 0.8991511
## 77   0.8784293 0.8545137 0.9023449
## 78   0.8413176 0.8192471 0.8633881
## 79   0.8494049 0.8276023 0.8712076
## 80   0.8748721 0.8514532 0.8982910
## 81   0.8567113 0.8348200 0.8786026
## 82   0.8637982 0.8415243 0.8860722
## 83   0.8579001 0.8359647 0.8798355
## 84   0.8375922 0.8152720 0.8599123
## 85   0.8280344 0.8047326 0.8513362
## 86   0.8414767 0.8194152 0.8635383
## 87   0.8359078 0.8134495 0.8583660
## 88   0.8803222 0.8561190 0.9045254
## 89   0.9117150 0.8808940 0.9425360
## 90   0.8845469 0.8596469 0.9094470
## 91   0.8786488 0.8547007 0.9025969
## 92   0.8357706 0.8133004 0.8582407
## 93   0.8344437 0.8118530 0.8570345
## 94   0.8672731 0.8447089 0.8898373
## 95   0.9319333 0.8956169 0.9682498
## 96   0.8210764 0.7967786 0.8453742
## 97   0.8513381 0.8295426 0.8731335
## 98   0.9073440 0.8776116 0.9370764
## 99   0.8393461 0.8171532 0.8615390
## 100  0.8453082 0.8234176 0.8671989
## 101  0.8887808 0.8631114 0.9144502
## 102  0.8269042 0.8034558 0.8503526
## 103  0.8450568 0.8231575 0.8669560
## 104  0.8642738 0.8419640 0.8865835
## 105  0.8613110 0.8392038 0.8834181
## 106  0.8053745 0.7781127 0.8326364
## 107  0.8836051 0.8588667 0.9083434
## 108  0.8862935 0.8610844 0.9115027
## 109  0.8527609 0.8309566 0.8745652
## 110  0.8404653 0.8183446 0.8625860
## 111  0.8491516 0.8273464 0.8709569
## 112  0.8535336 0.8317195 0.8753477
## 113  0.8512155 0.8294202 0.8730108
## 114  0.8856991 0.8605965 0.9108018
## 115  0.8793072 0.8552602 0.9033542
## 116  0.8716762 0.8486522 0.8947001
## 117  0.9000925 0.8720654 0.9281195
## 118  0.9627317 0.9170882 1.0083752
## 119  0.8385871 0.8163412 0.8608329
## 120  0.8773567 0.8535970 0.9011164
## 121  0.9054054 0.8761418 0.9346689
## 122  0.8760316 0.8524573 0.8996060
## 123  0.8717813 0.8487452 0.8948175
## 124  0.8753367 0.8518563 0.8988171
## 125  0.8414401 0.8193765 0.8635037
## 126  0.8699753 0.8471408 0.8928098
## 127  0.8818804 0.8574288 0.9063320
## 128  0.8439366 0.8219945 0.8658787
## 129  0.8406811 0.8185736 0.8627887
## 130  0.8640086 0.8417189 0.8862982
## 131  0.8834130 0.8587072 0.9081188
## 132  0.8239834 0.8001285 0.8478384
## 133  0.8422220 0.8202003 0.8642437
## 134  0.7699948 0.7336577 0.8063319
## 135  0.9919116 0.9368383 1.0469849
## 136  0.8801119 0.8559414 0.9042823
## 137  0.8484969 0.8266832 0.8703105
## 138  0.8429764 0.8209918 0.8649610
## 139  0.8849676 0.8599942 0.9099410
## 140  0.8431117 0.8211335 0.8650900
## 141  0.8383932 0.8161333 0.8606531
## 142  0.8284002 0.8051445 0.8516559
## 143  0.8248302 0.8010972 0.8485633
## 144  0.8341795 0.8115636 0.8567953
## 145  0.8727872 0.8496316 0.8959428
## 146  0.8435909 0.8216341 0.8655477
## 147  0.8524774 0.8306759 0.8742790
## 148  0.8599393 0.8379093 0.8819693
## 149  0.8769022 0.8532070 0.9005974
## 150  0.8321128 0.8092877 0.8549379
## 151  0.8953831 0.8683867 0.9223794
## 152  0.9008057 0.8726170 0.9289944
## 153  0.8775240 0.8537404 0.9013077
## 154  0.8857631 0.8606491 0.9108772
## 155  0.8432974 0.8213276 0.8652671
## 156  0.8600673 0.8380305 0.8821041
## 157  0.8410085 0.8189203 0.8630967
## 158  0.8966541 0.8693861 0.9239222
## 159  0.8382122 0.8159390 0.8604853
## 160  0.8802948 0.8560959 0.9044937
## 161  0.8517276 0.8299309 0.8735243
## 162  0.9114023 0.8806606 0.9421440
## 163  0.8703182 0.8474467 0.8931897
## 164  0.9363318 0.8987406 0.9739230
## 165  0.8488014 0.8269920 0.8706108
## 166  0.8568576 0.8349613 0.8787539
## 167  0.8544618 0.8326313 0.8762923
## 168  0.8463964 0.8245387 0.8682541
## 169  0.9034027 0.8746139 0.9321916
## 170  0.8922923 0.8659353 0.9186492
## 171  0.8271026 0.8036804 0.8505248
## 172  0.8349202 0.8123738 0.8574665
## 173  0.8621522 0.8399926 0.8843119
## 174  0.8391952 0.8169920 0.8613983
## 175  0.8459986 0.8241297 0.8678676
## 176  0.8558042 0.8339409 0.8776674
## 177  0.8580830 0.8361401 0.8800259
## 178  0.8508589 0.8290637 0.8726541
## 179  0.8391110 0.8169021 0.8613200
## 180  0.8683064 0.8456434 0.8909695
## 181  0.8417693 0.8197238 0.8638148
## 182  0.9388099 0.9004905 0.9771293
## 183  0.8409600 0.8188690 0.8630511
## 184  0.8462958 0.8244354 0.8681563
## 185  0.8376086 0.8152898 0.8599275
## 186  0.8340496 0.8114213 0.8566780
## 187  0.8552482 0.8333998 0.8770966
## 188  0.8680897 0.8454479 0.8907316
## 189  0.8440582 0.8221211 0.8659953
## 190  0.8731804 0.8499768 0.8963840
## 191  0.8544252 0.8325954 0.8762550
## 192  0.8407698 0.8186676 0.8628721
## 193  0.8360211 0.8135727 0.8584696
## 194  0.8608446 0.8387649 0.8829243
## 195  0.8395472 0.8173678 0.8617266
## 196  0.9083041 0.8783363 0.9382720
## 197  0.8629021 0.8406922 0.8851119
## 198  0.8500908 0.8282932 0.8718883
## 199  0.8550287 0.8331857 0.8768718
## 200  0.9243160 0.8901471 0.9584850
## 201  0.8511012 0.8293060 0.8728964
## 202  0.8188808 0.7942245 0.8435371
## 203  0.8576797 0.8357531 0.8796063
## 204  0.8276595 0.8043097 0.8510093
## 205  0.8387489 0.8165146 0.8609832
## 206  0.8482984 0.8264818 0.8701151
## 207  0.8549922 0.8331500 0.8768344
## 208  0.8383585 0.8160960 0.8606209
## 209  0.8451802 0.8232852 0.8670752
## 210  0.8835959 0.8588591 0.9083327
## 211  0.8475303 0.8256996 0.8693610
## 212  0.8787128 0.8547552 0.9026704
## 213  0.8534010 0.8315889 0.8752132
## 214  0.8390516 0.8168385 0.8612647
## 215  0.8620151 0.8398643 0.8841659
## 216  0.8530069 0.8311999 0.8748139
## 217  0.8541518 0.8323273 0.8759763
## 218  0.8365936 0.8141935 0.8589937
## 219  0.8347720 0.8122120 0.8573320
## 220  0.8401242 0.8179823 0.8622662
## 221  0.8563721 0.8344918 0.8782523
## 222  0.8765639 0.8529160 0.9002117
## 223  0.8422083 0.8201859 0.8642307
## 224  0.9548401 0.9116641 0.9980161
## 225  0.8517368 0.8299400 0.8735335
## 226  0.8455734 0.8236914 0.8674554
## 227  0.8421443 0.8201186 0.8641699
## 228  0.8651608 0.8427808 0.8875407
## 229  0.8394613 0.8172761 0.8616464
## 230  0.8521940 0.8303946 0.8739933
## 231  0.8842726 0.8594200 0.9091252
## 232  0.8582750 0.8363240 0.8802260
## 233  0.8369328 0.8145605 0.8593052
## 234  0.8934902 0.8668891 0.9200913
## 235  0.8368588 0.8144804 0.8592371
## 236  0.8570808 0.8351766 0.8789849
## 237  0.8752096 0.8517461 0.8986731
## 238  0.8406811 0.8185736 0.8627887
## 239  0.8447138 0.8228022 0.8666254
## 240  0.8480479 0.8262270 0.8698688
## 241  0.8213956 0.7971482 0.8456430
## 242  0.8183953 0.7936570 0.8431335
## 243  0.8258123 0.8022166 0.8494081
## 244  0.8341411 0.8115215 0.8567606
## 245  0.8362845 0.8138585 0.8587105
## 246  0.8620699 0.8399156 0.8842243
## 247  0.8353545 0.8128476 0.8578615
## 248  0.8506851 0.8288897 0.8724806
## 249  0.8400484 0.8179016 0.8621951
## 250  0.8449059 0.8230012 0.8668105
## 251  0.8444048 0.8224814 0.8663281
## 252  0.8373892 0.8150532 0.8597251
## 253  0.8610000 0.8389113 0.8830888
## 254  0.8573331 0.8354198 0.8792465
## 255  0.8577574 0.8358278 0.8796871
## 256  0.8462675 0.8244062 0.8681287
## 257  0.8432873 0.8213171 0.8652575
## 258  0.8396753 0.8175043 0.8618462
## 259  0.8431593 0.8211832 0.8651354
## 260  0.8470731 0.8252324 0.8689138
## 261  0.8554183 0.8335655 0.8772710
## 262  0.8522132 0.8304137 0.8740127
## 263  0.8311207 0.8081873 0.8540540
## 264  0.7806206 0.7472566 0.8139845
## 265  0.8352311 0.8127130 0.8577491
## 266  0.8357797 0.8133104 0.8582491
## 267  0.8344602 0.8118710 0.8570494
## 268  0.8558243 0.8339605 0.8776881
## 269  0.8465089 0.8246542 0.8683636
## 270  0.8582476 0.8362978 0.8801974
## 271  0.8682241 0.8455692 0.8908791
## 272  0.8426563 0.8206564 0.8646563
## 273  0.8279896 0.8046821 0.8512971
## 274  0.8380448 0.8157592 0.8603305
## 275  0.8463781 0.8245199 0.8682363
## 276  0.8497890 0.8279895 0.8715885
## 277  0.8452899 0.8233986 0.8671812
## 278  0.8385505 0.8163020 0.8607990
## 279  0.8539040 0.8320839 0.8757240
## 280  0.8461760 0.8243122 0.8680398
## 281  0.8394695 0.8172849 0.8616541
## 282  0.8419614 0.8199261 0.8639966
## 283  0.8476126 0.8257836 0.8694416
## 284  0.8383932 0.8161333 0.8606531
## 285  0.8348854 0.8123359 0.8574350
## 286  0.8351853 0.8126632 0.8577075
## 287  0.8466835 0.8248334 0.8685337
## 288  0.7731130 0.7376651 0.8085609
## 289  0.8569948 0.8350937 0.8788959
## 290  0.8679315 0.8453050 0.8905581
## 291  0.8344657 0.8118770 0.8570543
## 292  0.7397907 0.6943119 0.7852696
## 293  0.8440847 0.8221487 0.8660207
## 294  0.8287660 0.8055557 0.8519762
## 295  0.8446718 0.8227586 0.8665849
## 296  0.8355895 0.8131035 0.8580756
## 297  0.8557603 0.8338983 0.8776223
## 298  0.8561261 0.8342534 0.8779987
## 299  0.8405239 0.8184067 0.8626410
## 300  0.8485179 0.8267046 0.8703312
## 301  0.8468171 0.8249703 0.8686638
## 302  0.8501548 0.8283575 0.8719520
## 303  0.8487008 0.8268901 0.8705116
## 304  0.8404251 0.8183019 0.8625483
## 305  0.8425192 0.8205125 0.8645259
## 306  0.8343962 0.8118010 0.8569914
## 307  0.8446123 0.8226969 0.8665277
## 308  0.8423820 0.8203685 0.8643955
## 309  0.8377824 0.8154769 0.8600879
## 310  0.8396588 0.8174868 0.8618308
## 311  0.8701134 0.8472640 0.8929627
## 312  0.8498621 0.8280632 0.8716611
## 313  0.8435296 0.8215702 0.8654891
## 314  0.8256166 0.8019939 0.8492394
## 315  0.8412481 0.8191737 0.8633225
## 316  0.8406199 0.8185086 0.8627312
## 317  0.8590249 0.8370402 0.8810095
## 318  0.8467348 0.8248859 0.8685836
## 319  0.8362370 0.8138069 0.8586670
## 320  0.8395289 0.8173483 0.8617096
## 321  0.8554402 0.8335869 0.8772936
## 322  0.8549940 0.8331518 0.8768362
## 323  0.8392729 0.8170750 0.8614708
## 324  0.8397484 0.8175823 0.8619145
## 325  0.8515904 0.8297943 0.8733866
## 326  0.8383402 0.8160764 0.8606039
## 327  0.8378281 0.8155261 0.8601301
## 328  0.8409189 0.8188254 0.8630124
## 329  0.8579732 0.8360349 0.8799116
## 330  0.8327438 0.8099849 0.8555026
## 331  0.8440371 0.8220992 0.8659751
## 332  0.8456996 0.8238216 0.8675776
## 333  0.8377641 0.8154572 0.8600710
## 334  0.8183596 0.7936153 0.8431039
## 335  0.8642701 0.8419606 0.8865796
## 336  0.8402111 0.8180746 0.8623476
## 337  0.8486642 0.8268530 0.8704755
## 338  0.8506669 0.8288714 0.8724623
## 339  0.8555088 0.8336537 0.8773640
## 340  0.8465921 0.8247396 0.8684446
## 341  0.8402834 0.8181514 0.8624153
## 342  0.8440856 0.8221496 0.8660216
## 343  0.8412170 0.8191408 0.8632932
## 344  0.8380750 0.8157916 0.8603584
## 345  0.8488837 0.8270753 0.8706921
## 346  0.8272114 0.8038035 0.8506194
## 347  0.8335037 0.8108219 0.8561855
## 348  0.8299163 0.8068448 0.8529879
## 349  0.8111538 0.7850852 0.8372224
## 350  0.8376726 0.8153587 0.8599865
## 351  0.8386877 0.8164490 0.8609263
## 352  0.8426371 0.8206363 0.8646380
## 353  0.8411475 0.8190673 0.8632277
## 354  0.8270834 0.8036586 0.8505081
## 355  0.8350445 0.8125096 0.8575795
## 356  0.8104863 0.7842854 0.8366871
## 357  0.8401873 0.8180494 0.8623253
## 358  0.8342316 0.8116207 0.8568425
## 359  0.8573971 0.8354814 0.8793129
## 360  0.8457654 0.8238895 0.8676414
## 361  0.8509851 0.8291899 0.8727802
## 362  0.8343221 0.8117199 0.8569244
## 363  0.8475239 0.8256931 0.8693547
## 364  0.8299410 0.8068724 0.8530096
## 365  0.8398353 0.8176748 0.8619958
## 366  0.8373828 0.8150463 0.8597192
## 367  0.8381975 0.8159232 0.8604718
## 368  0.8415224 0.8194634 0.8635814
## 369  0.8518831 0.8300856 0.8736805
## 370  0.8326341 0.8098638 0.8554043
## 371  0.8630301 0.8408114 0.8852489
## 372  0.8440042 0.8220649 0.8659435
## 373  0.8530261 0.8312189 0.8748334
## 374  0.8277052 0.8043613 0.8510491
## 375  0.8518008 0.8300037 0.8735978
## 376  0.8291445 0.8059807 0.8523084
## 377  0.8380750 0.8157916 0.8603584
## 378  0.8465976 0.8247452 0.8684499
## 379  0.8343075 0.8117038 0.8569111
## 380  0.8280070 0.8047017 0.8513123
## 381  0.8458660 0.8239931 0.8677389
## 382  0.8649349 0.8425732 0.8872966
## 383  0.8429389 0.8209526 0.8649252
## 384  0.8384225 0.8161647 0.8606802
## 385  0.8361089 0.8136680 0.8585499
## 386  0.8428027 0.8208098 0.8647955
## 387  0.8451253 0.8232284 0.8670222
## 388  0.8335823 0.8109083 0.8562564
## 389  0.8443938 0.8224700 0.8663175
## 390  0.8592626 0.8372666 0.8812586
## 391  0.8428255 0.8208338 0.8648173
## 392  0.8437107 0.8217591 0.8656623
## 393  0.8508159 0.8290207 0.8726111
## 394  0.8465071 0.8246523 0.8683618
## 395  0.8495878 0.8277868 0.8713888
## 396  0.8777801 0.8539595 0.9016007
## 397  0.8556140 0.8337560 0.8774719
## 398  0.8353225 0.8128127 0.8578323
## 399  0.8451957 0.8233013 0.8670902
## 400  0.8670591 0.8445147 0.8896036
## 401  0.8445776 0.8226609 0.8664943
## 402  0.8360541 0.8136084 0.8584997
## 403  0.8344373 0.8118460 0.8570287
## 404  0.8370654 0.8147038 0.8594271
## 405  0.8371349 0.8147789 0.8594910
## 406  0.8485143 0.8267009 0.8703276
## 407  0.8448967 0.8229918 0.8668017
## 408  0.8414127 0.8193476 0.8634778
## 409  0.8394284 0.8172410 0.8616157
## 410  0.8429782 0.8209937 0.8649627
## 411  0.8481357 0.8263163 0.8699550
## 412  0.8483487 0.8265328 0.8701646
## 413  0.8311252 0.8081924 0.8540581
## 414  0.8360266 0.8135787 0.8584746
## 415  0.8333107 0.8106096 0.8560118
## 416  0.8405714 0.8184572 0.8626856
## 417  0.8395930 0.8174166 0.8617693
## 418  0.8682379 0.8455815 0.8908942
## 419  0.8418059 0.8197624 0.8638495
## 420  0.8408448 0.8187470 0.8629427
## 421  0.8353902 0.8128864 0.8578939
## 422  0.8364454 0.8140330 0.8588579
## 423  0.8417693 0.8197238 0.8638148
## 424  0.8344465 0.8118560 0.8570370
## 425  0.8400282 0.8178802 0.8621763
## 426  0.8421351 0.8201089 0.8641613
## 427  0.8365323 0.8141271 0.8589375
## 428  0.8529255 0.8311194 0.8747316
## 429  0.8379378 0.8156441 0.8602315
## 430  0.8466470 0.8247959 0.8684980
## 431  0.8385578 0.8163099 0.8608058
## 432  0.8497890 0.8279895 0.8715885
## 433  0.8367948 0.8144112 0.8591783
## 434  0.8202251 0.7957906 0.8446595
## 435  0.8461376 0.8242727 0.8680025
## 436  0.8325463 0.8097669 0.8553256
## 437  0.8462867 0.8244260 0.8681474
## 438  0.8418224 0.8197797 0.8638650
## 439  0.8622693 0.8401020 0.8844366
## 440  0.8560804 0.8342091 0.8779516
## 441  0.8423454 0.8203300 0.8643608
## 442  0.8344300 0.8118380 0.8570220
## 443  0.8288574 0.8056584 0.8520564
## 444  0.8430404 0.8210588 0.8650220
## 445  0.8553945 0.8335424 0.8772467
## 446  0.8331251 0.8104053 0.8558449
## 447  0.8544225 0.8325927 0.8762522
## 448  0.8436238 0.8216685 0.8655792
## 449  0.8627009 0.8405048 0.8848970
## 450  0.8385596 0.8163118 0.8608075
## 451  0.8407269 0.8186220 0.8628317
## 452  0.8539287 0.8321082 0.8757491
## 453  0.8342746 0.8116678 0.8568813
## 454  0.8406226 0.8185115 0.8627337
## 455  0.8600673 0.8380305 0.8821041
## 456  0.8428228 0.8208309 0.8648146
## 457  0.8332376 0.8105291 0.8559460
## 458  0.8309423 0.8079890 0.8538957
## 459  0.8398399 0.8176797 0.8620000
## 460  0.8304120 0.8073982 0.8534257
## 461  0.8362580 0.8138297 0.8586862
## 462  0.8360321 0.8135846 0.8584796
## 463  0.8619346 0.8397889 0.8840803
## 464  0.8466790 0.8248287 0.8685292
## 465  0.8389510 0.8167310 0.8611711
## 466  0.8422631 0.8202436 0.8642827
## 467  0.8371340 0.8147779 0.8594902
## 468  0.8420327 0.8200012 0.8640642
## 469  0.8352311 0.8127130 0.8577491
## 470  0.8417510 0.8197045 0.8637975
## 471  0.8409573 0.8188661 0.8630485
## 472  0.8424936 0.8204856 0.8645015
## 473  0.8394466 0.8172605 0.8616328
## 474  0.8426454 0.8206449 0.8646458
## 475  0.8356883 0.8132109 0.8581657
## 476  0.8416322 0.8195792 0.8636851
## 477  0.8346550 0.8120841 0.8572259
## 478  0.8420711 0.8200416 0.8641006
## 479  0.8383219 0.8160568 0.8605870
## 480  0.8364994 0.8140914 0.8589074
## 481  0.8419888 0.8199550 0.8640226
## 482  0.8412938 0.8192220 0.8633656
## 483  0.8409911 0.8189019 0.8630804
## 484  0.8433239 0.8213553 0.8652925
## 485  0.8353225 0.8128127 0.8578323
## 486  0.8395289 0.8173483 0.8617096
## 487  0.8396753 0.8175043 0.8618462
## 488  0.8445218 0.8226030 0.8664406
## 489  0.8388641 0.8166380 0.8610903
## 490  0.8465884 0.8247359 0.8684410
## 491  0.8394338 0.8172469 0.8616208
## 492  0.8383374 0.8160735 0.8606014
## 493  0.8386630 0.8164226 0.8609034
## 494  0.8444944 0.8225745 0.8664142
## 495  0.8359452 0.8134903 0.8584002
## 496  0.8488745 0.8270661 0.8706830
## 497  0.8504017 0.8286055 0.8721979
## 498  0.8398124 0.8176505 0.8619744
## 499  0.8368295 0.8144488 0.8592102
## 500  0.8330181 0.8102874 0.8557488
## 501  0.8485636 0.8267510 0.8703763
## 502  0.8365936 0.8141935 0.8589937
## 503  0.8206924 0.7963333 0.8450514
## 504  0.8367152 0.8143251 0.8591053
## 505  0.8476949 0.8258675 0.8695223
## 506  0.8368963 0.8145210 0.8592716
## 507  0.8315367 0.8086494 0.8544241
## 508  0.8314453 0.8085479 0.8543427
## 509  0.8353591 0.8128526 0.8578656
## 510  0.8498274 0.8280282 0.8716266
## 511  0.8358456 0.8133820 0.8583092
## 512  0.8379808 0.8156903 0.8602713
## 513  0.8339691 0.8113330 0.8566053
## 514  0.8410808 0.8189967 0.8631648
## 515  0.8407159 0.8186104 0.8628214
## 516  0.8446489 0.8227349 0.8665629
## 517  0.8381683 0.8158918 0.8604447
## 518  0.7908532 0.7601761 0.8215303
## 519  0.8383832 0.8161225 0.8606438
## 520  0.8363275 0.8139051 0.8587499
## 521  0.8452991 0.8234081 0.8671901
## 522  0.8381683 0.8158918 0.8604447
## 523  0.8398828 0.8177254 0.8620402
## 524  0.8383036 0.8160371 0.8605700
## 525  0.8374779 0.8151489 0.8598069
## 526  0.8373526 0.8150138 0.8596914
## 527  0.8481704 0.8263516 0.8699892
## 528  0.8359718 0.8135191 0.8584245
## 529  0.8361867 0.8137524 0.8586210
## 530  0.8401837 0.8180455 0.8623219
## 531  0.8425192 0.8205125 0.8645259
## 532  0.8376946 0.8153824 0.8600068
## 533  0.8409555 0.8188642 0.8630468
## 534  0.8370700 0.8147087 0.8594313
## 535  0.8479071 0.8260837 0.8697305
## 536  0.8459684 0.8240986 0.8678383
## 537  0.8458295 0.8239554 0.8677035
## 538  0.8406354 0.8185251 0.8627458
## 539  0.8481979 0.8263795 0.8700162
## 540  0.8372502 0.8149033 0.8595971
## 541  0.8355273 0.8130358 0.8580189
## 542  0.8358584 0.8133959 0.8583209
## 543  0.8503166 0.8285201 0.8721131
## 544  0.8387398 0.8165048 0.8609747
## 545  0.8393570 0.8171649 0.8615492
## 546  0.8378043 0.8155005 0.8601081
## 547  0.8377193 0.8154089 0.8600296
## 548  0.8294792 0.8063558 0.8526027
## 549  0.8456100 0.8237292 0.8674908
## 550  0.8433147 0.8213457 0.8652837
## 551  0.8222533 0.7981392 0.8463674
## 552  0.8334351 0.8107465 0.8561238
## 553  0.8358803 0.8134197 0.8583409
## 554  0.8342435 0.8116337 0.8568532
## 555  0.8348836 0.8123339 0.8574333
## 556  0.8349586 0.8124157 0.8575014
## 557  0.8362424 0.8138129 0.8586720
## 558  0.8466177 0.8247659 0.8684695
## 559  0.8387078 0.8164706 0.8609450
## 560  0.8407150 0.8186094 0.8628205
## 561  0.8336527 0.8109857 0.8563198
## 562  0.8418772 0.8198375 0.8639170
## 563  0.8436439 0.8216895 0.8655984
## 564  0.8397265 0.8175589 0.8618940
## 565  0.8283252 0.8050601 0.8515903
## 566  0.8378921 0.8155949 0.8601892
## 567  0.8317836 0.8089232 0.8546441
## 568  0.8381939 0.8159193 0.8604684
## 569  0.8467841 0.8249365 0.8686317
## 570  0.8359425 0.8134873 0.8583977
## 571  0.8342828 0.8116768 0.8568888
## 572  0.8369411 0.8145694 0.8593127
## 573  0.8372200 0.8148707 0.8595693
## 574  0.8486551 0.8268437 0.8704665
## 575  0.8488197 0.8270105 0.8706289
## 576  0.8420299 0.8199983 0.8640616
## 577  0.8374971 0.8151696 0.8598246
## 578  0.8358876 0.8134277 0.8583476
## 579  0.8408695 0.8187732 0.8629659
## 580  0.8452945 0.8234034 0.8671856
## 581  0.8424003 0.8203877 0.8644129
## 582  0.8314846 0.8085915 0.8543777
## 583  0.8530471 0.8312396 0.8748547
## 584  0.8452067 0.8233126 0.8671008
## 585  0.8404214 0.8182980 0.8625448
## 586  0.8342252 0.8116137 0.8568367
## 587  0.8351131 0.8125844 0.8576418
## 588  0.8409774 0.8188874 0.8630674
## 589  0.8548376 0.8329990 0.8766762
## 590  0.8337981 0.8111453 0.8564509
## 591  0.8330730 0.8103479 0.8557981
## 592  0.8420592 0.8200291 0.8640893
## 593  0.8634617 0.8412124 0.8857111
## 594  0.8367966 0.8144132 0.8591800
## 595  0.8386072 0.8163628 0.8608516
## 596  0.8387444 0.8165097 0.8609790
## 597  0.8406473 0.8185377 0.8627569
## 598  0.8254246 0.8017752 0.8490740
## 599  0.8404919 0.8183728 0.8626109
## 600  0.8395116 0.8173298 0.8616934
## 601  0.8361409 0.8137028 0.8585791
## 602  0.8422448 0.8202243 0.8642654
## 603  0.8370837 0.8147236 0.8594439
## 604  0.8356444 0.8131632 0.8581256
## 605  0.8426362 0.8206353 0.8646371
## 606  0.8436256 0.8216704 0.8655809
## 607  0.8428374 0.8208462 0.8648286
## 608  0.8354332 0.8129332 0.8579331
## 609  0.8359206 0.8134634 0.8583777
## 610  0.8353399 0.8128316 0.8578482
## 611  0.8352375 0.8127200 0.8577549
## 612  0.8374157 0.8150818 0.8597495
## 613  0.8332696 0.8105644 0.8559748
## 614  0.8409079 0.8188138 0.8630020
## 615  0.8298679 0.8067906 0.8529451
## 616  0.8431858 0.8212109 0.8651607
## 617  0.8236753 0.7997751 0.8475754
## 618  0.8370051 0.8146386 0.8593716
## 619  0.8357980 0.8133303 0.8582658
## 620  0.8363778 0.8139596 0.8587959
## 621  0.8407269 0.8186220 0.8628317
## 622  0.8444560 0.8225346 0.8663773
## 623  0.8398216 0.8176602 0.8619829
## 624  0.8340213 0.8113902 0.8566524
## 625  0.8389464 0.8167261 0.8611668
## 626  0.8355145 0.8130219 0.8580072
## 627  0.8420162 0.8199839 0.8640486
## 628  0.8372447 0.8148973 0.8595920
## 629  0.8369173 0.8145437 0.8592909
## 630  0.8395774 0.8174000 0.8617548
## 631  0.8405257 0.8184087 0.8626427
## 632  0.8315870 0.8087052 0.8544689
## 633  0.8293878 0.8062533 0.8525222
## 634  0.8387380 0.8165029 0.8609730
## 635  0.8365908 0.8141905 0.8589912
## 636  0.8386968 0.8164588 0.8609348
## 637  0.8352923 0.8127798 0.8578049
## 638  0.8432059 0.8212320 0.8651799
## 639  0.8350884 0.8125574 0.8576194
## 640  0.8421625 0.8201378 0.8641873
## 641  0.8482006 0.8263823 0.8700189
## 642  0.8203412 0.7959256 0.8447568
## 643  0.8373709 0.8150335 0.8597082
## 644  0.8382972 0.8160303 0.8605641
## 645  0.8393561 0.8171639 0.8615483
## 646  0.8409061 0.8188119 0.8630003
## 647  0.8314718 0.8085773 0.8543663
## 648  0.8371240 0.8147670 0.8594809
## 649  0.8259714 0.8023975 0.8495454
## 650  0.8373261 0.8149852 0.8596670
## 651  0.8373892 0.8150532 0.8597251
## 652  0.8363055 0.8138813 0.8587298
## 653  0.8354396 0.8129402 0.8579389
## 654  0.8310219 0.8080775 0.8539663
## 655  0.8347620 0.8122010 0.8573229
## 656  0.8342929 0.8116878 0.8568979
## 657  0.8360449 0.8135985 0.8584913
## 658  0.8344511 0.8118610 0.8570411
## 659  0.8303333 0.8073105 0.8533562
## 660  0.8371788 0.8148263 0.8595314
## 661  0.8429471 0.8209612 0.8649331
## 662  0.8375638 0.8152415 0.8598861
## 663  0.8390470 0.8168337 0.8612604
## 664  0.8362827 0.8138565 0.8587088
## 665  0.8327090 0.8099466 0.8554715
## 666  0.8295533 0.8064387 0.8526679
## 667  0.8349092 0.8123618 0.8574566
## 668  0.8385468 0.8162981 0.8607956
## 669  0.8377741 0.8154680 0.8600803
## 670  0.8361812 0.8137464 0.8586159
## 671  0.8362223 0.8137911 0.8586536
## 672  0.8377522 0.8154444 0.8600600
## 673  0.8376269 0.8153095 0.8599443
## 674  0.8367481 0.8143607 0.8591355
## 675  0.8348406 0.8122869 0.8573943
## 676  0.8376589 0.8153440 0.8599739
## 677  0.8401782 0.8180397 0.8623167
## 678  0.8345306 0.8119481 0.8571132
## 679  0.8218665 0.7976927 0.8460403
## 680  0.8366667 0.8142727 0.8590608
## 681  0.8315587 0.8086737 0.8544436
## 682  0.8369749 0.8146060 0.8593438
## 683  0.8397896 0.8176261 0.8619530
## 684  0.8364601 0.8140488 0.8588713
## 685  0.8536050 0.8317898 0.8754201
## 686  0.8233433 0.7993940 0.8472926
## 687  0.8335851 0.8109113 0.8562588
## 688  0.8460443 0.8241768 0.8679119
## 689  0.8357468 0.8132746 0.8582190
## 690  0.8387069 0.8164696 0.8609441
## 691  0.8359654 0.8135121 0.8584186
## 692  0.7842875 0.7519087 0.8166663
## 693  0.8227032 0.7986578 0.8467486
## 694  0.8358373 0.8133730 0.8583017
## 695  0.8362095 0.8137772 0.8586419
## 696  0.8371304 0.8147739 0.8594868
## 697  0.8349586 0.8124157 0.8575014
## 698  0.8308481 0.8078842 0.8538121
## 699  0.8362900 0.8138645 0.8587155
## 700  0.8363915 0.8139745 0.8588085
## 701  0.8333620 0.8106660 0.8560579
## 702  0.8396844 0.8175141 0.8618547
## 703  0.8356673 0.8131881 0.8581465
## 704  0.8405659 0.8184514 0.8626805
## 705  0.8364025 0.8139864 0.8588185
## 706  0.8355456 0.8130557 0.8580356
## 707  0.8348287 0.8122739 0.8573835
## 708  0.8338777 0.8112327 0.8565227
## 709  0.8369603 0.8145902 0.8593304
## 710  0.8420610 0.8200310 0.8640911
## 711  0.8316190 0.8087407 0.8544974
## 712  0.8419202 0.8198828 0.8639577
## 713  0.8465317 0.8246777 0.8683858
## 714  0.8425923 0.8205893 0.8645954
## 715  0.8372995 0.8149565 0.8596425
## 716  0.8411201 0.8190383 0.8632018
## 717  0.8333812 0.8106871 0.8560752
## 718  0.8421680 0.8201436 0.8641925
## 719  0.8363714 0.8139527 0.8587901
## 720  0.8352320 0.8127140 0.8577499
## 721  0.8354917 0.8129970 0.8579864
## 722  0.8389455 0.8167251 0.8611660
## 723  0.8327346 0.8099748 0.8554944
## 724  0.8343998 0.8118050 0.8569947
## 725  0.8359617 0.8135081 0.8584153
## 726  0.8353390 0.8128306 0.8578473
## 727  0.8377165 0.8154060 0.8600271
## 728  0.8246747 0.8009196 0.8484299
## 729  0.8364884 0.8140796 0.8588973
## 730  0.8362123 0.8137801 0.8586444
## 731  0.8348982 0.8123498 0.8574466
## 732  0.8382999 0.8160332 0.8605667
## 733  0.8351113 0.8125824 0.8576402
## 734  0.8237914 0.7999083 0.8476745
## 735  0.8388733 0.8166478 0.8610988
## 736  0.8343495 0.8117499 0.8569492
## 737  0.8434803 0.8215186 0.8654419
## 738  0.8343450 0.8117449 0.8569451
## 739  0.8419367 0.8199001 0.8639732
## 740  0.8376260 0.8153085 0.8599435
## 741  0.8382158 0.8159429 0.8604887
## 742  0.8381299 0.8158506 0.8604092
## 743  0.8403885 0.8182631 0.8625140
## 744  0.8359224 0.8134654 0.8583794
## 745  0.8370984 0.8147394 0.8594574
## 746  0.8338183 0.8111674 0.8564691
## 747  0.8339124 0.8112708 0.8565541
## 748  0.8445785 0.8226618 0.8664952
## 749  0.8368222 0.8144409 0.8592035
## 750  0.8346861 0.8121181 0.8572541
## 751  0.8327529 0.8099950 0.8555108
## 752  0.8337533 0.8110962 0.8564105
## 753  0.8412079 0.8191312 0.8632846
## 754  0.8504337 0.8286376 0.8722298
## 755  0.8384042 0.8161451 0.8606633
## 756  0.8371240 0.8147670 0.8594809
## 757  0.8345315 0.8119491 0.8571140
## 758  0.8418955 0.8198568 0.8639343
## 759  0.8380293 0.8157424 0.8603161
## 760  0.8339966 0.8113631 0.8566301
## 761  0.8433221 0.8213534 0.8652907
## 762  0.8389099 0.8166869 0.8611328
## 763  0.8363467 0.8139259 0.8587674
## 764  0.8323945 0.8095992 0.8551897
## 765  0.8452780 0.8233864 0.8671697
## 766  0.8317105 0.8088421 0.8545789
## 767  0.8380302 0.8157434 0.8603169
## 768  0.8390498 0.8168366 0.8612630
## 769  0.8320744 0.8092452 0.8549036
## 770  0.8300919 0.8070410 0.8531428
## 771  0.8389675 0.8167486 0.8611864
## 772  0.8368067 0.8144241 0.8591893
## 773  0.8345626 0.8119831 0.8571422
## 774  0.8358867 0.8134267 0.8583468
## 775  0.8411731 0.8190944 0.8632518
## 776  0.8347812 0.8122220 0.8573403
## 777  0.8345471 0.8119661 0.8571281
## 778  0.8409226 0.8188293 0.8630158
## 779  0.8339609 0.8113240 0.8565978
## 780  0.8368332 0.8144527 0.8592136
## 781  0.8429389 0.8209526 0.8649252
## 782  0.8238764 0.8000058 0.8477470
## 783  0.8375812 0.8152602 0.8599022
## 784  0.8366658 0.8142717 0.8590600
## 785  0.8396295 0.8174556 0.8618035
## 786  0.8359480 0.8134932 0.8584027
## 787  0.8358748 0.8134138 0.8583359
## 788  0.8356481 0.8131672 0.8581290
## 789  0.8312532 0.8083346 0.8541719
## 790  0.8362735 0.8138466 0.8587005
## 791  0.8371029 0.8147443 0.8594616
## 792  0.8355676 0.8130796 0.8580556
## 793  0.8394247 0.8172371 0.8616123
## 794  0.8363302 0.8139081 0.8587524
## 795  0.8396506 0.8174780 0.8618231
## 796  0.8365177 0.8141113 0.8589241
## 797  0.8357816 0.8133124 0.8582508
## 798  0.8266253 0.8031397 0.8501108
## 799  0.8416870 0.8196371 0.8637370
## 800  0.8347921 0.8122340 0.8573503
## 801  0.8386858 0.8164471 0.8609246
## 802  0.8389117 0.8166889 0.8611345
## 803  0.8171251 0.7921679 0.8420823
## 804  0.8569445 0.8350452 0.8788438
## 805  0.8366503 0.8142548 0.8590457
## 806  0.8338594 0.8112126 0.8565062
## 807  0.8349037 0.8123558 0.8574516
## 808  0.8367134 0.8143231 0.8591036
## 809  0.8344456 0.8118550 0.8570361
## 810  0.8304842 0.8074787 0.8534897
## 811  0.8295085 0.8063885 0.8526284
## 812  0.8356124 0.8131284 0.8580964
## 813  0.8402687 0.8181359 0.8624016
## 814  0.8352850 0.8127718 0.8577982
## 815  0.8343587 0.8117599 0.8569575
## 816  0.8359343 0.8134783 0.8583902
## 817  0.8364738 0.8140637 0.8588839
## 818  0.8365616 0.8141588 0.8589644
## 819  0.8362589 0.8138307 0.8586871
## 820  0.8274711 0.8040970 0.8508452
## 821  0.8411320 0.8190509 0.8632130
## 822  0.8390233 0.8168082 0.8612383
## 823  0.8405623 0.8184475 0.8626770
## 824  0.8352667 0.8127519 0.8577816
## 825  0.8400099 0.8178607 0.8621592
## 826  0.8389318 0.8167104 0.8611532
## 827  0.8348662 0.8123149 0.8574175
## 828  0.8348872 0.8123379 0.8574366
## 829  0.8496948 0.8278946 0.8714950
## 830  0.8342764 0.8116698 0.8568830
## 831  0.8372410 0.8148934 0.8595886
## 832  0.8394732 0.8172888 0.8616575
## 833  0.8350025 0.8124636 0.8575413
## 834  0.8343925 0.8117970 0.8569881
## 835  0.8308052 0.8078363 0.8537740
## 836  0.8369210 0.8145477 0.8592943
## 837  0.8419257 0.8198885 0.8639629
## 838  0.8385185 0.8162677 0.8607693
## 839  0.8399176 0.8177624 0.8620727
## 840  0.8462958 0.8244354 0.8681563
## 841  0.8396533 0.8174809 0.8618257
## 842  0.8355237 0.8130318 0.8580156
## 843  0.8415572 0.8195001 0.8636143
## 844  0.8351085 0.8125794 0.8576377
## 845  0.8331059 0.8103841 0.8558277
## 846  0.8349878 0.8124477 0.8575280
## 847  0.8372218 0.8148727 0.8595710
## 848  0.8377138 0.8154030 0.8600245
## 849  0.8371331 0.8147769 0.8594893
## 850  0.8332650 0.8105593 0.8559707
## 851  0.8394110 0.8172225 0.8615995
## 852  0.8356993 0.8132229 0.8581757
## 853  0.8304339 0.8074226 0.8534452
## 854  0.8342828 0.8116768 0.8568888
## 855  0.8320095 0.8091734 0.8548456
## 856  0.8277518 0.8044140 0.8510897
## 857  0.8333062 0.8106046 0.8560077
## 858  0.8350363 0.8125006 0.8575720
## 859  0.8425009 0.8204933 0.8645085
## 860  0.8359654 0.8135121 0.8584186
## 861  0.8408915 0.8187964 0.8629865
## 862  0.8382030 0.8159291 0.8604769
## 863  0.8346522 0.8120811 0.8572234
## 864  0.8285246 0.8052844 0.8517647
## 865  0.8344035 0.8118090 0.8569980
## 866  0.8312990 0.8083854 0.8542125
## 867  0.8388129 0.8165832 0.8610427
## 868  0.8383155 0.8160499 0.8605811
## 869  0.8349924 0.8124527 0.8575321
## 870  0.8348278 0.8122729 0.8573827
## 871  0.8433074 0.8213381 0.8652768
## 872  0.8378263 0.8155241 0.8601284
## 873  0.8355712 0.8130836 0.8580589
## 874  0.8374065 0.8150720 0.8597411
## 875  0.8366768 0.8142836 0.8590701
## 876  0.8359983 0.8135479 0.8584487
## 877  0.8343916 0.8117959 0.8569873
## 878  0.8338713 0.8112256 0.8565169
## 879  0.8342261 0.8116147 0.8568375
## 880  0.8379378 0.8156441 0.8602315
## 881  0.8385971 0.8163520 0.8608423
## 882  0.8356810 0.8132030 0.8581590
## 883  0.8347766 0.8122170 0.8573362
## 884  0.8336345 0.8109656 0.8563033
## 885  0.8191277 0.7945128 0.8437427
## 886  0.8391696 0.8169646 0.8613745
## 887  0.8401142 0.8179716 0.8622568
## 888  0.8351268 0.8125993 0.8576543
## 889  0.8322317 0.8094192 0.8550441
## 890  0.8338676 0.8112216 0.8565136
## 891  0.8349293 0.8123838 0.8574748
## 892  0.8372182 0.8148687 0.8595676
## 893  0.8376507 0.8153351 0.8599663
## 894  0.8378665 0.8155674 0.8601656
## 895  0.8283965 0.8051404 0.8516527
## 896  0.8352448 0.8127280 0.8577616
## 897  0.8334534 0.8107666 0.8561402
## 898  0.8262988 0.8027694 0.8498282
## 899  0.8398325 0.8176719 0.8619932
## 900  0.8393863 0.8171961 0.8615765
## 901  0.8360861 0.8136432 0.8585290
## 902  0.8234302 0.7994938 0.8473666
## 903  0.8342736 0.8116668 0.8568805
## 904  0.8337616 0.8111052 0.8564179
## 905  0.8402980 0.8181670 0.8624290
## 906  0.8360449 0.8135985 0.8584913
## 907  0.8360852 0.8136422 0.8585281
## 908  0.8383191 0.8160538 0.8605845
## 909  0.8291354 0.8059704 0.8523004
## 910  0.8354505 0.8129522 0.8579489
## 911  0.8364116 0.8139963 0.8588269
## 912  0.8337241 0.8110640 0.8563841
## 913  0.8352832 0.8127698 0.8577965
## 914  0.8372054 0.8148549 0.8595558
## 915  0.8415992 0.8195445 0.8636540
## 916  0.8379296 0.8156353 0.8602239
## 917  0.8358758 0.8134147 0.8583368
## 918  0.8347217 0.8121570 0.8572864
## 919  0.8372017 0.8148509 0.8595524
## 920  0.8392766 0.8170789 0.8614742
## 921  0.8345480 0.8119671 0.8571289
## 922  0.8358849 0.8134247 0.8583451
## 923  0.8345205 0.8119371 0.8571040
## 924  0.8356325 0.8131502 0.8581148
## 925  0.8355273 0.8130358 0.8580189
## 926  0.8338896 0.8112457 0.8565335
## 927  0.8321128 0.8092877 0.8549379
## 928  0.8392327 0.8170321 0.8614333
## 929  0.8375711 0.8152494 0.8598929
## 930  0.8416971 0.8196477 0.8637465
## 931  0.8263143 0.8027870 0.8498416
## 932  0.8438799 0.8219354 0.8658243
## 933  0.8391174 0.8169089 0.8613260
## 934  0.8224225 0.7983343 0.8465106
## 935  0.8234265 0.7994896 0.8473635
## 936  0.8361885 0.8137544 0.8586226
## 937  0.8360394 0.8135926 0.8584863
## 938  0.8357724 0.8133024 0.8582424
## 939  0.8358373 0.8133730 0.8583017
## 940  0.8319629 0.8091217 0.8548040
## 941  0.8424533 0.8204434 0.8644633
## 942  0.8346367 0.8120641 0.8572093
## 943  0.8349878 0.8124477 0.8575280
## 944  0.8320900 0.8092624 0.8549175
## 945  0.8358428 0.8133790 0.8583067
## 946  0.8367728 0.8143875 0.8591582
## 947  0.8339618 0.8113250 0.8565987
## 948  0.8338512 0.8112036 0.8564988
## 949  0.8371487 0.8147937 0.8595036
## 950  0.8395802 0.8174029 0.8617574
## 951  0.8356243 0.8131413 0.8581073
## 952  0.8315779 0.8086950 0.8544607
## 953  0.8359306 0.8134744 0.8583869
## 954  0.8385487 0.8163000 0.8607973
## 955  0.8308856 0.8079259 0.8538454
## 956  0.8375163 0.8151903 0.8598423
## 957  0.8348470 0.8122939 0.8574001
## 958  0.8349074 0.8123598 0.8574549
## 959  0.8346696 0.8121001 0.8572391
## 960  0.8395802 0.8174029 0.8617574
## 961  0.8363375 0.8139160 0.8587591
## 962  0.8380640 0.8157798 0.8603482
## 963  0.8377714 0.8154651 0.8600777
## 964  0.8281323 0.8048428 0.8514217
## 965  0.8359489 0.8134942 0.8584036
## 966  0.8337058 0.8110439 0.8563676
## 967  0.8337643 0.8111082 0.8564204
## 968  0.8394284 0.8172410 0.8616157
## 969  0.8413048 0.8192336 0.8633760
## 970  0.8343742 0.8117769 0.8569715
## 971  0.8330666 0.8103408 0.8557923
## 972  0.8384179 0.8161598 0.8606760
## 973  0.8365744 0.8141727 0.8589761
## 974  0.8469423 0.8250986 0.8687861
## 975  0.8360724 0.8136283 0.8585164
## 976  0.8376342 0.8153174 0.8599511
## 977  0.8319446 0.8091015 0.8547877
## 978  0.8355877 0.8131015 0.8580739
## 979  0.8350948 0.8125644 0.8576252
## 980  0.8399578 0.8178053 0.8621104
## 981  0.8373654 0.8150276 0.8597032
## 982  0.8361089 0.8136680 0.8585499
## 983  0.8397219 0.8175540 0.8618898
## 984  0.8330437 0.8103156 0.8557718
## 985  0.8347482 0.8121860 0.8573105
## 986  0.8339609 0.8113240 0.8565978
## 987  0.8344757 0.8118880 0.8570635
## 988  0.8363979 0.8139815 0.8588143
## 989  0.8392820 0.8170848 0.8614793
## 990  0.8353774 0.8128725 0.8578823
## 991  0.8360751 0.8136313 0.8585189
## 992  0.8444633 0.8225422 0.8663843
## 993  0.8339609 0.8113240 0.8565978
## 994  0.8311298 0.8081974 0.8540622
## 995  0.8361803 0.8137454 0.8586151
## 996  0.8350354 0.8124996 0.8575712
## 997  0.8381079 0.8158270 0.8603888
## 998  0.8320936 0.8092665 0.8549208
## 999  0.8362077 0.8137752 0.8586402
## 1000 0.8311170 0.8081832 0.8540508

5.2. Regresión Lineal Múltiple

En este estudio, el Modelo de Regresión Lineal Múltiple (RLM) puede considerarse como una extensión del modelo de regresión lineal simple, con el objetivo de facilitar su comprensión y análisis. Su ecuación general, que refleja la relación entre las variables dependientes e independientes, es la siguiente:\[y_i = \beta_0 + \beta_1 x_{i1} + \dots + \beta_k x_{ik} + \epsilon_i,\quad i = 1, 2, \dots, n\] donde:\(\epsilon\) es el término de error, con una media \(E(\epsilon) = 0\) y una varianza \(V(\epsilon) = \sigma^2\). Se asume que \(\epsilon\) sigue una distribución normal, lo cual es clave para realizar pruebas de hipótesis y calcular intervalos de confianza y predicción.

El método utilizado para estimar los parámetros del modelo es el de mínimos cuadrados ordinarios (MCO). Este enfoque se basa en minimizar una función de error que se construye a partir de las desviaciones cuadráticas entre los valores observados y los valores predichos por el modelo. La función de error se expresa de la siguiente forma:\[f(\beta_0, \beta_1, \dots, \beta_k) = \sum_j \left[ y_i - \left( \beta_0 + \beta_1 x_{1j} + \beta_2 x_{2j} + \dots + \beta_k x_{kj} \right) \right]^2\]

5.2.1. Planteamiento del Problema

Con base en el conjunto de datos descrito en la sección 2 se formulará un modelo de regresión lineal múltiple para estudiar la relación lineal múltiple supuesta entre las varaibles definidas.

5.2.2. Desarrollo del Análisis

El estudio de regresión lineal múltiple ha sido procesado con R version 4.4.1 (2024-06-14 ucrt) mediado por RStudio en una plataforma x86_64-w64-mingw32.

5.2.2.1. Resumen estadístico de las variables de estudio.

La navegación a través de las pestañas muestra el resumen estadístico de todas las variables del conjunto de datos, excepto Serial, porque simplemente es un índice posicional. Sin embargo, para las varaibles de naturaleza cuantitativa::razón el resumen será el tradicional, pero para las variables de naturaleza cualitativa::nominal el resumen estadístico consistirá en conteos, proporciones y diagramas de barras. Se menciona de nuevo que Chance of Admit es la variable dependiente

*Resumen Variables Cuantitativas** El resumen de estas variables cuantitativas te proporciona una visión general de la distribución de las características de las empresas en términos de su tamaño (empleados), su rendimiento (ingresos, beneficios), su tamaño financiero (activos) y su valoración en el mercado (capitalización). Si alguna de estas variables tiene una gran diferencia entre el valor de la mediana y la media, indicaría una distribución sesgada (por ejemplo, muchas empresas pequeñas en comparación con unas pocas muy grandes).

Resumen Variables Cualitativas En esta pestaña podemos ver como en la primera graficas que representa la variable FemaleCEO en donde en la mayorias de las compañias predomina la presencia de mas hombres CEOs que mujeres, en la segunda grafica se muestra la variable Headquarters_State en donde representa en como hay estados mas influyentes que otros dentro del ranking, en la cuarta grafica muestra la variable Company_Type donde su comportamiento es claro donde predominan las compañias publicas (que cotizan en bolsa) sobre las compañias privadas (no cotizan en bolsa)

Diagrama de dispersiòn de las variables cuantitativas El diagrama nos permite visualizar si existe una relación directa o inversa entre las variables analizadas (número de empleados, ingresos, beneficios, activos y capitalización de mercado). Por ejemplo, podríamos observar si las empresas con mayor número de empleados también tienden a tener mayores ingresos. Al analizar el conjunto de puntos en cada panel, podemos identificar patrones, agrupamientos o valores atípicos que podrían indicar tendencias o características particulares de las empresas en el ranking. Podemos comparar el desempeño de diferentes empresas en función de las variables analizadas. Por ejemplo, podríamos identificar empresas que tienen una alta capitalización de mercado pero bajas ganancias.

Resumen Variables Cuantitativas
summary(cdd_ranking_fortune_reescrito$Number_of_employees)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      28    6718   14000   36612   30741 2100000
summary(cdd_ranking_fortune_reescrito$Revenues_M)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    2489    3968    7090   20965   16208  648125
summary(cdd_ranking_fortune_reescrito$Profits_M)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -10298.0    154.5    541.4   1863.4   1398.3  96995.0
summary(cdd_ranking_fortune_reescrito$Assets_M)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
##     3613    53430   128476   637572   375801 43254370
summary(cdd_ranking_fortune_reescrito$MarketCap_Updated_M)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
##        0    41208   113350   519774   357562 35943090
Resumen Variables Cualitativas
table(cdd_ranking_fortune_reescrito$FemaleCEO)
## 
##   0   1 
## 903  97
prop.table(table(cdd_ranking_fortune_reescrito$FemaleCEO))
## 
##     0     1 
## 0.903 0.097
barplot(table(cdd_ranking_fortune_reescrito$FemaleCEO))

table(cdd_ranking_fortune_reescrito$Headquarters_State)
## 
##              Alabama              Arizona             Arkansas 
##                    3                   23                    6 
##           California             Colorado          Connecticut 
##                  124                   23                   25 
##             Delaware District Of Columbia              Florida 
##                    6                    5                   39 
##              Georgia               Hawaii                Idaho 
##                   37                    3                    4 
##             Illinois              Indiana                 Iowa 
##                   58                   20                    3 
##               Kansas             Kentucky            Louisiana 
##                    4                    7                    3 
##                Maine             Maryland        Massachusetts 
##                    2                   11                   32 
##             Michigan            Minnesota          Mississippi 
##                   28                   25                    1 
##             Missouri              Montana             Nebraska 
##                   20                    1                    8 
##               Nevada        New Hampshire           New Jersey 
##                   11                    2                   23 
##             New York       North Carolina         North Dakota 
##                   78                   28                    3 
##                 Ohio             Oklahoma               Oregon 
##                   51                   10                    6 
##         Pennsylvania          Puerto Rico         Rhode Island 
##                   45                    1                    7 
##       South Carolina            Tennessee                Texas 
##                    4                   20                  107 
##                 Utah              Vermont             Virginia 
##                    4                    1                   39 
##           Washington            Wisconsin 
##                   17                   22
prop.table(table(cdd_ranking_fortune_reescrito$Headquarters_State))
## 
##              Alabama              Arizona             Arkansas 
##                0.003                0.023                0.006 
##           California             Colorado          Connecticut 
##                0.124                0.023                0.025 
##             Delaware District Of Columbia              Florida 
##                0.006                0.005                0.039 
##              Georgia               Hawaii                Idaho 
##                0.037                0.003                0.004 
##             Illinois              Indiana                 Iowa 
##                0.058                0.020                0.003 
##               Kansas             Kentucky            Louisiana 
##                0.004                0.007                0.003 
##                Maine             Maryland        Massachusetts 
##                0.002                0.011                0.032 
##             Michigan            Minnesota          Mississippi 
##                0.028                0.025                0.001 
##             Missouri              Montana             Nebraska 
##                0.020                0.001                0.008 
##               Nevada        New Hampshire           New Jersey 
##                0.011                0.002                0.023 
##             New York       North Carolina         North Dakota 
##                0.078                0.028                0.003 
##                 Ohio             Oklahoma               Oregon 
##                0.051                0.010                0.006 
##         Pennsylvania          Puerto Rico         Rhode Island 
##                0.045                0.001                0.007 
##       South Carolina            Tennessee                Texas 
##                0.004                0.020                0.107 
##                 Utah              Vermont             Virginia 
##                0.004                0.001                0.039 
##           Washington            Wisconsin 
##                0.017                0.022
barplot(table(cdd_ranking_fortune_reescrito$Headquarters_State))

table(cdd_ranking_fortune_reescrito$Company_Type)
## 
##   0   1 
##  45 955
prop.table(table(cdd_ranking_fortune_reescrito$Company_Type))
## 
##     0     1 
## 0.045 0.955
barplot(table(cdd_ranking_fortune_reescrito$Company_Type))

Diagramas de Dispersión Variables Cuantitativas
pairs(~Number_of_employees + Revenues_M + Profits_M + Assets_M + MarketCap_Updated_M, data = cdd_ranking_fortune_reescrito)

##### Formulación del modelo de RLM entre las variables de estudio. {.tabset .tabset-pills}

Este conjunto de resultados corresponde a los coeficientes obtenidos de un modelo de regresión lineal múltiple, donde la variable dependiente es Profitable, y las variables independientes son diferentes características de las empresas, como el número de empleados, ingresos, ganancias, activos, si la empresa tiene una CEO femenina, el estado de la sede de la empresa y el tipo de empresa.

Resumen y ANOVA del Modelo RLM TotalAunque el modelo es significativo (p-valor del F-test), el R² bajo sugiere que la mayor parte de la variabilidad de Profitable no está explicada por las variables independientes. Pero esto siendo causado por la distribuciòn sesgada gracias a los valores atipicos dentro de las variables

Una distribución sesgada implica que los residuos no están distribuidos de manera simétrica alrededor de cero, lo que viola uno de los supuestos fundamentales de la regresión lineal: la normalidad de los residuos.

Los residuos deben ser aproximadamente normales. Los valores deben estar centrados en 0 y tener varianza constante (homocedasticidad). Si los residuos son sistemáticamente mayores o menores en ciertos rangos de las variables predictoras o si están sesgados, esto indica, El modelo no está capturando adecuadamente la relación entre las variables independientes y la dependiente. Podrían existir patrones no lineales o relaciones no consideradas.

Coeficientes del Modelo RLM Total

Relación positiva con rentabilidad:Un mayor número de empleados y mayores ganancias parecen estar asociados con una mayor probabilidad de rentabilidad. Las empresas de tipo 1 también muestran una mayor probabilidad de rentabilidad.

Relación negativa con rentabilidad:El impacto de los ingresos y activos es negativo, aunque los coeficientes son extremadamente pequeños, lo que sugiere que no tienen un impacto significativo en la rentabilidad. Tener una CEO femenina parece estar ligeramente asociado con una menor probabilidad de rentabilidad, aunque este efecto es pequeño. Varias ubicaciones geográficas (estados) están asociadas con una menor probabilidad de rentabilidad, especialmente estados como Montana.

Coeficientes del Modelo RLM Reducido

Relación positiva con rentabilidad:Número de empleados: Aunque el coeficiente es pequeño, existe una relación positiva, lo que sugiere que un mayor número de empleados está ligeramente asociado con una mayor rentabilidad. Ganancias: Un aumento en las ganancias está positivamente relacionado con una mayor rentabilidad.

Relación negativa con rentabilidad:Ingresos: Existe una relación negativa, lo que implica que a pesar de tener mayores ingresos, la rentabilidad puede no aumentar tanto (o incluso disminuir ligeramente). Activos: La relación negativa es extremadamente pequeña, lo que sugiere que los activos de la empresa no tienen un impacto importante sobre su rentabilidad. Relación significativa del tipo de empresa:

Las empresas de tipo 1 son más rentables en comparación con otros tipos de empresas, según este modelo. ###### Resumen y ANOVA del Modelo RLM Total

summary(lm(cdd_ranking_fortune_reescrito$Profitable~cdd_ranking_fortune_reescrito$Number_of_employees+cdd_ranking_fortune_reescrito$Revenues_M+cdd_ranking_fortune_reescrito$Profits_M+cdd_ranking_fortune_reescrito$Assets_M+as.factor(cdd_ranking_fortune_reescrito$FemaleCEO)+as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)+as.factor(cdd_ranking_fortune_reescrito$Company_Type)))
## 
## Call:
## lm(formula = cdd_ranking_fortune_reescrito$Profitable ~ cdd_ranking_fortune_reescrito$Number_of_employees + 
##     cdd_ranking_fortune_reescrito$Revenues_M + cdd_ranking_fortune_reescrito$Profits_M + 
##     cdd_ranking_fortune_reescrito$Assets_M + as.factor(cdd_ranking_fortune_reescrito$FemaleCEO) + 
##     as.factor(cdd_ranking_fortune_reescrito$Headquarters_State) + 
##     as.factor(cdd_ranking_fortune_reescrito$Company_Type))
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.96082  0.04007  0.13755  0.17850  0.49877 
## 
## Coefficients:
##                                                                                   Estimate
## (Intercept)                                                                      8.246e-01
## cdd_ranking_fortune_reescrito$Number_of_employees                                1.752e-07
## cdd_ranking_fortune_reescrito$Revenues_M                                        -6.060e-07
## cdd_ranking_fortune_reescrito$Profits_M                                          1.085e-05
## cdd_ranking_fortune_reescrito$Assets_M                                           4.795e-10
## as.factor(cdd_ranking_fortune_reescrito$FemaleCEO)1                             -3.286e-02
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Arizona              -3.150e-02
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Arkansas             -1.734e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)California           -1.660e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Colorado             -1.961e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Connecticut          -7.822e-02
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Delaware             -3.153e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)District Of Columbia -2.163e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Florida              -1.393e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Georgia              -2.125e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Hawaii               -3.216e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Idaho                -2.262e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Illinois             -1.607e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Indiana              -3.860e-02
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Iowa                  6.426e-02
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Kansas               -4.861e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Kentucky             -1.313e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Louisiana            -2.803e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Maine                 2.225e-02
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Maryland             -9.174e-02
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Massachusetts        -2.034e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Michigan             -1.601e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Minnesota            -3.868e-02
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Mississippi           4.768e-03
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Missouri             -2.664e-02
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Montana              -9.789e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Nebraska             -1.926e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Nevada                7.967e-03
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)New Hampshire         1.003e-02
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)New Jersey           -1.425e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)New York             -1.855e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)North Carolina       -1.787e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)North Dakota          2.104e-02
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Ohio                 -1.178e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Oklahoma              1.359e-02
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Oregon               -1.450e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Pennsylvania         -1.833e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Puerto Rico           6.159e-03
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Rhode Island         -2.146e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)South Carolina       -1.947e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Tennessee            -1.974e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Texas                -9.724e-02
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Utah                  6.330e-03
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Vermont               1.748e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Virginia             -1.471e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Washington           -9.913e-02
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Wisconsin            -1.425e-01
## as.factor(cdd_ranking_fortune_reescrito$Company_Type)1                           1.638e-01
##                                                                                 Std. Error
## (Intercept)                                                                      2.105e-01
## cdd_ranking_fortune_reescrito$Number_of_employees                                1.766e-07
## cdd_ranking_fortune_reescrito$Revenues_M                                         4.518e-07
## cdd_ranking_fortune_reescrito$Profits_M                                          2.435e-06
## cdd_ranking_fortune_reescrito$Assets_M                                           4.775e-09
## as.factor(cdd_ranking_fortune_reescrito$FemaleCEO)1                              3.853e-02
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Arizona               2.158e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Arkansas              2.526e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)California            2.053e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Colorado              2.157e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Connecticut           2.147e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Delaware              2.485e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)District Of Columbia  2.593e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Florida               2.105e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Georgia               2.109e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Hawaii                2.868e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Idaho                 2.685e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Illinois              2.081e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Indiana               2.176e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Iowa                  2.874e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Kansas                2.683e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Kentucky              2.425e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Louisiana             2.873e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Maine                 3.213e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Maryland              2.288e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Massachusetts         2.122e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Michigan              2.135e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Minnesota             2.151e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Mississippi           4.056e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Missouri              2.177e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Montana               4.056e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Nebraska              2.393e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Nevada                2.288e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)New Hampshire         3.207e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)New Jersey            2.157e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)New York              2.069e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)North Carolina        2.135e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)North Dakota          2.871e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Ohio                  2.088e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Oklahoma              2.313e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Oregon                2.492e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Pennsylvania          2.095e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Puerto Rico           4.056e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Rhode Island          2.437e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)South Carolina        2.687e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Tennessee             2.176e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Texas                 2.058e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Utah                  2.683e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Vermont               4.095e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Virginia              2.105e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Washington            2.208e-01
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Wisconsin             2.165e-01
## as.factor(cdd_ranking_fortune_reescrito$Company_Type)1                           5.646e-02
##                                                                                 t value
## (Intercept)                                                                       3.917
## cdd_ranking_fortune_reescrito$Number_of_employees                                 0.992
## cdd_ranking_fortune_reescrito$Revenues_M                                         -1.341
## cdd_ranking_fortune_reescrito$Profits_M                                           4.455
## cdd_ranking_fortune_reescrito$Assets_M                                            0.100
## as.factor(cdd_ranking_fortune_reescrito$FemaleCEO)1                              -0.853
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Arizona               -0.146
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Arkansas              -0.686
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)California            -0.808
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Colorado              -0.909
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Connecticut           -0.364
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Delaware              -1.269
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)District Of Columbia  -0.834
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Florida               -0.662
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Georgia               -1.007
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Hawaii                -1.121
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Idaho                 -0.843
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Illinois              -0.772
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Indiana               -0.177
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Iowa                   0.224
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Kansas                -1.812
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Kentucky              -0.542
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Louisiana             -0.976
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Maine                  0.069
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Maryland              -0.401
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Massachusetts         -0.959
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Michigan              -0.750
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Minnesota             -0.180
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Mississippi            0.012
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Missouri              -0.122
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Montana               -2.413
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Nebraska              -0.805
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Nevada                 0.035
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)New Hampshire          0.031
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)New Jersey            -0.661
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)New York              -0.897
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)North Carolina        -0.837
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)North Dakota           0.073
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Ohio                  -0.564
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Oklahoma               0.059
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Oregon                -0.582
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Pennsylvania          -0.875
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Puerto Rico            0.015
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Rhode Island          -0.881
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)South Carolina        -0.725
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Tennessee             -0.907
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Texas                 -0.473
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Utah                   0.024
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Vermont                0.427
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Virginia              -0.698
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Washington            -0.449
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Wisconsin             -0.658
## as.factor(cdd_ranking_fortune_reescrito$Company_Type)1                            2.901
##                                                                                 Pr(>|t|)
## (Intercept)                                                                     9.60e-05
## cdd_ranking_fortune_reescrito$Number_of_employees                                0.32154
## cdd_ranking_fortune_reescrito$Revenues_M                                         0.18022
## cdd_ranking_fortune_reescrito$Profits_M                                         9.39e-06
## cdd_ranking_fortune_reescrito$Assets_M                                           0.92004
## as.factor(cdd_ranking_fortune_reescrito$FemaleCEO)1                              0.39407
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Arizona               0.88399
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Arkansas              0.49267
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)California            0.41919
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Colorado              0.36349
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Connecticut           0.71569
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Delaware              0.20473
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)District Of Columbia  0.40436
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Florida               0.50827
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Georgia               0.31403
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Hawaii                0.26248
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Idaho                 0.39959
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Illinois              0.44008
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Indiana               0.85925
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Iowa                  0.82315
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Kansas                0.07034
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Kentucky              0.58826
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Louisiana             0.32942
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Maine                 0.94481
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Maryland              0.68856
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Massachusetts         0.33795
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Michigan              0.45373
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Minnesota             0.85734
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Mississippi           0.99062
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Missouri              0.90262
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Montana               0.01600
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Nebraska              0.42106
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Nevada                0.97224
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)New Hampshire         0.97506
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)New Jersey            0.50903
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)New York              0.37016
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)North Carolina        0.40286
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)North Dakota          0.94159
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Ohio                  0.57286
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Oklahoma              0.95317
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Oregon                0.56080
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Pennsylvania          0.38196
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Puerto Rico           0.98789
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Rhode Island          0.37872
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)South Carolina        0.46888
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Tennessee             0.36466
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Texas                 0.63662
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Utah                  0.98118
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Vermont               0.66952
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Virginia              0.48506
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Washington            0.65362
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Wisconsin             0.51039
## as.factor(cdd_ranking_fortune_reescrito$Company_Type)1                           0.00381
##                                                                                    
## (Intercept)                                                                     ***
## cdd_ranking_fortune_reescrito$Number_of_employees                                  
## cdd_ranking_fortune_reescrito$Revenues_M                                           
## cdd_ranking_fortune_reescrito$Profits_M                                         ***
## cdd_ranking_fortune_reescrito$Assets_M                                             
## as.factor(cdd_ranking_fortune_reescrito$FemaleCEO)1                                
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Arizona                 
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Arkansas                
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)California              
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Colorado                
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Connecticut             
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Delaware                
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)District Of Columbia    
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Florida                 
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Georgia                 
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Hawaii                  
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Idaho                   
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Illinois                
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Indiana                 
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Iowa                    
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Kansas               .  
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Kentucky                
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Louisiana               
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Maine                   
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Maryland                
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Massachusetts           
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Michigan                
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Minnesota               
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Mississippi             
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Missouri                
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Montana              *  
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Nebraska                
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Nevada                  
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)New Hampshire           
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)New Jersey              
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)New York                
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)North Carolina          
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)North Dakota            
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Ohio                    
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Oklahoma                
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Oregon                  
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Pennsylvania            
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Puerto Rico             
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Rhode Island            
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)South Carolina          
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Tennessee               
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Texas                   
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Utah                    
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Vermont                 
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Virginia                
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Washington              
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Wisconsin               
## as.factor(cdd_ranking_fortune_reescrito$Company_Type)1                          ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3513 on 947 degrees of freedom
## Multiple R-squared:  0.07841,    Adjusted R-squared:  0.0278 
## F-statistic: 1.549 on 52 and 947 DF,  p-value: 0.008644
Coeficientes del Modelo RLM Total
coefficients(lm(cdd_ranking_fortune_reescrito$Profitable~cdd_ranking_fortune_reescrito$Number_of_employees+cdd_ranking_fortune_reescrito$Revenues_M+cdd_ranking_fortune_reescrito$Profits_M+cdd_ranking_fortune_reescrito$Assets_M+as.factor(cdd_ranking_fortune_reescrito$FemaleCEO)+as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)+as.factor(cdd_ranking_fortune_reescrito$Company_Type)))
##                                                                     (Intercept) 
##                                                                    8.246109e-01 
##                               cdd_ranking_fortune_reescrito$Number_of_employees 
##                                                                    1.751719e-07 
##                                        cdd_ranking_fortune_reescrito$Revenues_M 
##                                                                   -6.059544e-07 
##                                         cdd_ranking_fortune_reescrito$Profits_M 
##                                                                    1.084734e-05 
##                                          cdd_ranking_fortune_reescrito$Assets_M 
##                                                                    4.794743e-10 
##                             as.factor(cdd_ranking_fortune_reescrito$FemaleCEO)1 
##                                                                   -3.285534e-02 
##              as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Arizona 
##                                                                   -3.149884e-02 
##             as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Arkansas 
##                                                                   -1.733972e-01 
##           as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)California 
##                                                                   -1.659535e-01 
##             as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Colorado 
##                                                                   -1.961053e-01 
##          as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Connecticut 
##                                                                   -7.821627e-02 
##             as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Delaware 
##                                                                   -3.153480e-01 
## as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)District Of Columbia 
##                                                                   -2.162771e-01 
##              as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Florida 
##                                                                   -1.393150e-01 
##              as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Georgia 
##                                                                   -2.124767e-01 
##               as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Hawaii 
##                                                                   -3.216030e-01 
##                as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Idaho 
##                                                                   -2.262431e-01 
##             as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Illinois 
##                                                                   -1.606997e-01 
##              as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Indiana 
##                                                                   -3.860319e-02 
##                 as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Iowa 
##                                                                    6.426154e-02 
##               as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Kansas 
##                                                                   -4.861153e-01 
##             as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Kentucky 
##                                                                   -1.313372e-01 
##            as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Louisiana 
##                                                                   -2.803019e-01 
##                as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Maine 
##                                                                    2.224565e-02 
##             as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Maryland 
##                                                                   -9.174132e-02 
##        as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Massachusetts 
##                                                                   -2.033944e-01 
##             as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Michigan 
##                                                                   -1.600552e-01 
##            as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Minnesota 
##                                                                   -3.868284e-02 
##          as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Mississippi 
##                                                                    4.768403e-03 
##             as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Missouri 
##                                                                   -2.663822e-02 
##              as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Montana 
##                                                                   -9.788954e-01 
##             as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Nebraska 
##                                                                   -1.925992e-01 
##               as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Nevada 
##                                                                    7.966555e-03 
##        as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)New Hampshire 
##                                                                    1.002784e-02 
##           as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)New Jersey 
##                                                                   -1.425106e-01 
##             as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)New York 
##                                                                   -1.854785e-01 
##       as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)North Carolina 
##                                                                   -1.786773e-01 
##         as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)North Dakota 
##                                                                    2.104224e-02 
##                 as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Ohio 
##                                                                   -1.177790e-01 
##             as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Oklahoma 
##                                                                    1.358875e-02 
##               as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Oregon 
##                                                                   -1.449893e-01 
##         as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Pennsylvania 
##                                                                   -1.832821e-01 
##          as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Puerto Rico 
##                                                                    6.158805e-03 
##         as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Rhode Island 
##                                                                   -2.146461e-01 
##       as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)South Carolina 
##                                                                   -1.946838e-01 
##            as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Tennessee 
##                                                                   -1.973681e-01 
##                as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Texas 
##                                                                   -9.723975e-02 
##                 as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Utah 
##                                                                    6.330371e-03 
##              as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Vermont 
##                                                                    1.748361e-01 
##             as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Virginia 
##                                                                   -1.470587e-01 
##           as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Washington 
##                                                                   -9.913279e-02 
##            as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)Wisconsin 
##                                                                   -1.425295e-01 
##                          as.factor(cdd_ranking_fortune_reescrito$Company_Type)1 
##                                                                    1.637882e-01
Coeficientes del Modelo RLM Reducido
coefficients(lm(cdd_ranking_fortune_reescrito$Profitable~cdd_ranking_fortune_reescrito$Number_of_employees+cdd_ranking_fortune_reescrito$Revenues_M+cdd_ranking_fortune_reescrito$Profits_M+cdd_ranking_fortune_reescrito$Assets_M+as.factor(cdd_ranking_fortune_reescrito$Company_Type)))
##                                            (Intercept) 
##                                           6.947086e-01 
##      cdd_ranking_fortune_reescrito$Number_of_employees 
##                                           1.462605e-07 
##               cdd_ranking_fortune_reescrito$Revenues_M 
##                                          -5.517496e-07 
##                cdd_ranking_fortune_reescrito$Profits_M 
##                                           1.109259e-05 
##                 cdd_ranking_fortune_reescrito$Assets_M 
##                                          -1.682910e-09 
## as.factor(cdd_ranking_fortune_reescrito$Company_Type)1 
##                                           1.496405e-01
5.2.2.3. Análisis del modelo RLM.

En el cual se realiza un análisis iterativo mediante el criterio AIC para seleccionar las variables más relevantes. Este es un proceso típico de stepwise selection, que intenta reducir el número de variables del modelo, manteniendo aquellas que contribuyen significativamente a la explicación de la variable dependiente, que en este caso es Profitable (si la empresa es rentable o no).

Mejor Modelo Iterado según AIC El modelo final se ha simplificado significativamente eliminando variables que no contribuyen mucho a predecir la rentabilidad de las empresas. ganancias (Profits_M) y tipo de empresa (Company_Type) son las variables más relevantes para predecir la rentabilidad de una empresa. El AIC más bajo en el modelo final (-2097.11) indica que es el modelo más eficiente en términos de ajuste y simplicidad, y es el que mejor predice la rentabilidad sin incluir variables innecesarias.

Bondades de Ajuste, Significancias y Criterios de Información Comparados Este resultado es una comparación entre tres modelos de regresión lineal múltiple (RLM) para predecir la variable dependiente “Profitable” (si la empresa es rentable o no). Los tres modelos considerados son:

modelo_RLM_TOTAL: Un modelo completo con todas las variables independientes disponibles. modelo_RLM_REDUCIDO: Un modelo reducido con algunas variables seleccionadas. modelo_Iterado_STEP: Un modelo iterativo basado en el proceso de selección hacia atrás (stepwise) utilizando el criterio de AIC . 1. Interpretación de las Coeficientes y Significancia Profits_M: Este es el único predictor que tiene un impacto significativo en la variable dependiente, con un valor p menor que 0.01 en todos los modelos. El coeficiente positivo indica que a medida que aumentan los beneficios (Profits_M), es más probable que la empresa sea rentable. Company_Type: Tiene un coeficiente positivo significativo en todos los modelos, lo que sugiere que el tipo de empresa también influye en la probabilidad de ser rentable. Otros factores: El resto de las variables (por ejemplo, el número de empleados, los ingresos, el patrimonio, el género del CEO y las ubicaciones geográficas) no muestran significancia en ninguno de los modelos, ya que sus valores p son mayores a 0.05 o 0.1.

  1. Bondades de ajuste: R² (Coeficiente de Determinación): modelo_RLM_TOTAL: 0.078, lo que indica que el modelo explica el 7.8% de la variabilidad en la rentabilidad. Esto es relativamente bajo, lo que sugiere que otros factores no incluidos en el modelo podrían estar influyendo en la rentabilidad. modelo_RLM_REDUCIDO: 0.039, indicando que el modelo reducido tiene un poder explicativo aún más bajo. modelo_Iterado_STEP: 0.037, similar al modelo reducido, con un poder explicativo igualmente bajo. R² ajustado: Este valor ajusta el R² por el número de predictores en el modelo. modelo_RLM_TOTAL: 0.028 modelo_RLM_REDUCIDO: 0.034 modelo_Iterado_STEP: 0.035 Estos valores ajustados son bajos, lo que también indica que, aunque el modelo tiene algunas variables significativas, no explica mucho de la variabilidad de la rentabilidad.

  2. Estadístico F: Los valores del estadístico F muestran que, aunque los modelos tienen algunos predictores significativos (especialmente Profits_M y Company_Type), el ajuste general del modelo es limitado. La significancia de los modelos está reflejada por los valores p muy bajos del F-statistic (menores a 0.01), pero en general la calidad del ajuste no es alta.

  3. Criterios de Información: AIC (Criterio de Información de Akaike): modelo_RLM_TOTAL: 799.0720 modelo_RLM_REDUCIDO: 746.7895 modelo_Iterado_STEP: 742.7638 El modelo_Iterado_STEP tiene el menor valor de AIC, lo que indica que es el modelo más eficiente en términos de ajuste y complejidad (el AIC penaliza la complejidad del modelo). BIC (Criterio de Información Bayesiano): modelo_RLM_TOTAL: 1064.0908 modelo_RLM_REDUCIDO: 781.1438 modelo_Iterado_STEP: 762.3948 Similar al AIC, el modelo_Iterado_STEP también tiene el valor más bajo en el BIC, lo que respalda la selección de este modelo como el más adecuado entre los tres.

en concliusiòn Significancia de los predictores: Solo los beneficios (Profits_M) y el tipo de empresa (Company_Type) tienen un impacto significativo en la rentabilidad.

El modelo modelo_Iterado_STEP es el mejor en cuanto a criterios de información (AIC y BIC), a pesar de que el R² es bajo en todos los modelos. M El modelo_Iterado_STEP parece ser el más adecuado debido a su mejor rendimiento en AIC y BIC, aunque la explicación general de la rentabilidad sigue siendo limitada.

Mejor Modelo Iterado según AIC
modelo_Iterado_STEP = step(lm(cdd_ranking_fortune_reescrito$Profitable~cdd_ranking_fortune_reescrito$Number_of_employees+cdd_ranking_fortune_reescrito$Revenues_M+cdd_ranking_fortune_reescrito$Profits_M+cdd_ranking_fortune_reescrito$Assets_M+as.factor(cdd_ranking_fortune_reescrito$FemaleCEO)+as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)+as.factor(cdd_ranking_fortune_reescrito$Company_Type)))
## Start:  AIC=-2040.81
## cdd_ranking_fortune_reescrito$Profitable ~ cdd_ranking_fortune_reescrito$Number_of_employees + 
##     cdd_ranking_fortune_reescrito$Revenues_M + cdd_ranking_fortune_reescrito$Profits_M + 
##     cdd_ranking_fortune_reescrito$Assets_M + as.factor(cdd_ranking_fortune_reescrito$FemaleCEO) + 
##     as.factor(cdd_ranking_fortune_reescrito$Headquarters_State) + 
##     as.factor(cdd_ranking_fortune_reescrito$Company_Type)
## 
##                                                               Df Sum of Sq
## - as.factor(cdd_ranking_fortune_reescrito$Headquarters_State) 46    4.9189
## - cdd_ranking_fortune_reescrito$Assets_M                       1    0.0012
## - as.factor(cdd_ranking_fortune_reescrito$FemaleCEO)           1    0.0897
## - cdd_ranking_fortune_reescrito$Number_of_employees            1    0.1214
## - cdd_ranking_fortune_reescrito$Revenues_M                     1    0.2219
## <none>                                                                    
## - as.factor(cdd_ranking_fortune_reescrito$Company_Type)        1    1.0385
## - cdd_ranking_fortune_reescrito$Profits_M                      1    2.4490
##                                                                  RSS     AIC
## - as.factor(cdd_ranking_fortune_reescrito$Headquarters_State) 121.78 -2091.6
## - cdd_ranking_fortune_reescrito$Assets_M                      116.86 -2042.8
## - as.factor(cdd_ranking_fortune_reescrito$FemaleCEO)          116.95 -2042.0
## - cdd_ranking_fortune_reescrito$Number_of_employees           116.98 -2041.8
## - cdd_ranking_fortune_reescrito$Revenues_M                    117.08 -2040.9
## <none>                                                        116.86 -2040.8
## - as.factor(cdd_ranking_fortune_reescrito$Company_Type)       117.89 -2034.0
## - cdd_ranking_fortune_reescrito$Profits_M                     119.31 -2022.1
## 
## Step:  AIC=-2091.57
## cdd_ranking_fortune_reescrito$Profitable ~ cdd_ranking_fortune_reescrito$Number_of_employees + 
##     cdd_ranking_fortune_reescrito$Revenues_M + cdd_ranking_fortune_reescrito$Profits_M + 
##     cdd_ranking_fortune_reescrito$Assets_M + as.factor(cdd_ranking_fortune_reescrito$FemaleCEO) + 
##     as.factor(cdd_ranking_fortune_reescrito$Company_Type)
## 
##                                                         Df Sum of Sq    RSS
## - cdd_ranking_fortune_reescrito$Assets_M                 1   0.01293 121.79
## - as.factor(cdd_ranking_fortune_reescrito$FemaleCEO)     1   0.05915 121.83
## - cdd_ranking_fortune_reescrito$Number_of_employees      1   0.08861 121.86
## - cdd_ranking_fortune_reescrito$Revenues_M               1   0.18337 121.96
## <none>                                                               121.78
## - as.factor(cdd_ranking_fortune_reescrito$Company_Type)  1   0.93503 122.71
## - cdd_ranking_fortune_reescrito$Profits_M                1   2.67626 124.45
##                                                             AIC
## - cdd_ranking_fortune_reescrito$Assets_M                -2093.5
## - as.factor(cdd_ranking_fortune_reescrito$FemaleCEO)    -2093.1
## - cdd_ranking_fortune_reescrito$Number_of_employees     -2092.8
## - cdd_ranking_fortune_reescrito$Revenues_M              -2092.1
## <none>                                                  -2091.6
## - as.factor(cdd_ranking_fortune_reescrito$Company_Type) -2085.9
## - cdd_ranking_fortune_reescrito$Profits_M               -2071.8
## 
## Step:  AIC=-2093.47
## cdd_ranking_fortune_reescrito$Profitable ~ cdd_ranking_fortune_reescrito$Number_of_employees + 
##     cdd_ranking_fortune_reescrito$Revenues_M + cdd_ranking_fortune_reescrito$Profits_M + 
##     as.factor(cdd_ranking_fortune_reescrito$FemaleCEO) + as.factor(cdd_ranking_fortune_reescrito$Company_Type)
## 
##                                                         Df Sum of Sq    RSS
## - as.factor(cdd_ranking_fortune_reescrito$FemaleCEO)     1   0.06315 121.85
## - cdd_ranking_fortune_reescrito$Number_of_employees      1   0.09669 121.89
## - cdd_ranking_fortune_reescrito$Revenues_M               1   0.21020 122.00
## <none>                                                               121.79
## - as.factor(cdd_ranking_fortune_reescrito$Company_Type)  1   0.94284 122.73
## - cdd_ranking_fortune_reescrito$Profits_M                1   2.69709 124.49
##                                                             AIC
## - as.factor(cdd_ranking_fortune_reescrito$FemaleCEO)    -2094.9
## - cdd_ranking_fortune_reescrito$Number_of_employees     -2094.7
## - cdd_ranking_fortune_reescrito$Revenues_M              -2093.7
## <none>                                                  -2093.5
## - as.factor(cdd_ranking_fortune_reescrito$Company_Type) -2087.8
## - cdd_ranking_fortune_reescrito$Profits_M               -2073.6
## 
## Step:  AIC=-2094.95
## cdd_ranking_fortune_reescrito$Profitable ~ cdd_ranking_fortune_reescrito$Number_of_employees + 
##     cdd_ranking_fortune_reescrito$Revenues_M + cdd_ranking_fortune_reescrito$Profits_M + 
##     as.factor(cdd_ranking_fortune_reescrito$Company_Type)
## 
##                                                         Df Sum of Sq    RSS
## - cdd_ranking_fortune_reescrito$Number_of_employees      1   0.10094 121.95
## - cdd_ranking_fortune_reescrito$Revenues_M               1   0.22307 122.08
## <none>                                                               121.85
## - as.factor(cdd_ranking_fortune_reescrito$Company_Type)  1   0.96284 122.81
## - cdd_ranking_fortune_reescrito$Profits_M                1   2.75575 124.61
##                                                             AIC
## - cdd_ranking_fortune_reescrito$Number_of_employees     -2096.1
## - cdd_ranking_fortune_reescrito$Revenues_M              -2095.1
## <none>                                                  -2094.9
## - as.factor(cdd_ranking_fortune_reescrito$Company_Type) -2089.1
## - cdd_ranking_fortune_reescrito$Profits_M               -2074.6
## 
## Step:  AIC=-2096.12
## cdd_ranking_fortune_reescrito$Profitable ~ cdd_ranking_fortune_reescrito$Revenues_M + 
##     cdd_ranking_fortune_reescrito$Profits_M + as.factor(cdd_ranking_fortune_reescrito$Company_Type)
## 
##                                                         Df Sum of Sq    RSS
## - cdd_ranking_fortune_reescrito$Revenues_M               1    0.1229 122.08
## <none>                                                               121.95
## - as.factor(cdd_ranking_fortune_reescrito$Company_Type)  1    1.0114 122.96
## - cdd_ranking_fortune_reescrito$Profits_M                1    2.6755 124.63
##                                                             AIC
## - cdd_ranking_fortune_reescrito$Revenues_M              -2097.1
## <none>                                                  -2096.1
## - as.factor(cdd_ranking_fortune_reescrito$Company_Type) -2089.9
## - cdd_ranking_fortune_reescrito$Profits_M               -2076.4
## 
## Step:  AIC=-2097.11
## cdd_ranking_fortune_reescrito$Profitable ~ cdd_ranking_fortune_reescrito$Profits_M + 
##     as.factor(cdd_ranking_fortune_reescrito$Company_Type)
## 
##                                                         Df Sum of Sq    RSS
## <none>                                                               122.08
## - as.factor(cdd_ranking_fortune_reescrito$Company_Type)  1    1.0360 123.11
## - cdd_ranking_fortune_reescrito$Profits_M                1    3.4849 125.56
##                                                             AIC
## <none>                                                  -2097.1
## - as.factor(cdd_ranking_fortune_reescrito$Company_Type) -2090.7
## - cdd_ranking_fortune_reescrito$Profits_M               -2071.0
coefficients(modelo_Iterado_STEP)
##                                            (Intercept) 
##                                           6.859527e-01 
##                cdd_ranking_fortune_reescrito$Profits_M 
##                                           8.901128e-06 
## as.factor(cdd_ranking_fortune_reescrito$Company_Type)1 
##                                           1.554562e-01
Bondades de Ajuste, Significancias y Criterios de Información Comparados
modelo_RLM_TOTAL = lm(cdd_ranking_fortune_reescrito$Profitable~cdd_ranking_fortune_reescrito$Number_of_employees+cdd_ranking_fortune_reescrito$Revenues_M+cdd_ranking_fortune_reescrito$Profits_M+cdd_ranking_fortune_reescrito$Assets_M+as.factor(cdd_ranking_fortune_reescrito$FemaleCEO)+as.factor(cdd_ranking_fortune_reescrito$Headquarters_State)+as.factor(cdd_ranking_fortune_reescrito$Company_Type))
modelo_RLM_REDUCIDO = lm(cdd_ranking_fortune_reescrito$Profitable~cdd_ranking_fortune_reescrito$Number_of_employees+cdd_ranking_fortune_reescrito$Revenues_M+cdd_ranking_fortune_reescrito$Profits_M+cdd_ranking_fortune_reescrito$Assets_M+as.factor(cdd_ranking_fortune_reescrito$Company_Type))

stargazer(modelo_RLM_TOTAL, modelo_RLM_REDUCIDO, modelo_Iterado_STEP, type = "text", df = TRUE)
## 
## ==============================================================================================================
##                                                                  Dependent variable:                          
##                                         ----------------------------------------------------------------------
##                                                                       Profitable                              
##                                                   (1)                    (2)                     (3)          
## --------------------------------------------------------------------------------------------------------------
## Number_of_employees                             0.00000                0.00000                                
##                                                (0.00000)              (0.00000)                               
##                                                                                                               
## Revenues_M                                     -0.00000                -0.00000                               
##                                                (0.00000)              (0.00000)                               
##                                                                                                               
## Profits_M                                     0.00001***              0.00001***             0.00001***       
##                                                (0.00000)              (0.00000)               (0.00000)       
##                                                                                                               
## Assets_M                                         0.000                  -0.000                                
##                                                 (0.000)                (0.000)                                
##                                                                                                               
## FemaleCEO)1                                     -0.033                                                        
##                                                 (0.039)                                                       
##                                                                                                               
## Headquarters_State)Arizona                      -0.031                                                        
##                                                 (0.216)                                                       
##                                                                                                               
## Headquarters_State)Arkansas                     -0.173                                                        
##                                                 (0.253)                                                       
##                                                                                                               
## Headquarters_State)California                   -0.166                                                        
##                                                 (0.205)                                                       
##                                                                                                               
## Headquarters_State)Colorado                     -0.196                                                        
##                                                 (0.216)                                                       
##                                                                                                               
## Headquarters_State)Connecticut                  -0.078                                                        
##                                                 (0.215)                                                       
##                                                                                                               
## Headquarters_State)Delaware                     -0.315                                                        
##                                                 (0.248)                                                       
##                                                                                                               
## Headquarters_State)District Of Columbia         -0.216                                                        
##                                                 (0.259)                                                       
##                                                                                                               
## Headquarters_State)Florida                      -0.139                                                        
##                                                 (0.211)                                                       
##                                                                                                               
## Headquarters_State)Georgia                      -0.212                                                        
##                                                 (0.211)                                                       
##                                                                                                               
## Headquarters_State)Hawaii                       -0.322                                                        
##                                                 (0.287)                                                       
##                                                                                                               
## Headquarters_State)Idaho                        -0.226                                                        
##                                                 (0.268)                                                       
##                                                                                                               
## Headquarters_State)Illinois                     -0.161                                                        
##                                                 (0.208)                                                       
##                                                                                                               
## Headquarters_State)Indiana                      -0.039                                                        
##                                                 (0.218)                                                       
##                                                                                                               
## Headquarters_State)Iowa                          0.064                                                        
##                                                 (0.287)                                                       
##                                                                                                               
## Headquarters_State)Kansas                       -0.486*                                                       
##                                                 (0.268)                                                       
##                                                                                                               
## Headquarters_State)Kentucky                     -0.131                                                        
##                                                 (0.243)                                                       
##                                                                                                               
## Headquarters_State)Louisiana                    -0.280                                                        
##                                                 (0.287)                                                       
##                                                                                                               
## Headquarters_State)Maine                         0.022                                                        
##                                                 (0.321)                                                       
##                                                                                                               
## Headquarters_State)Maryland                     -0.092                                                        
##                                                 (0.229)                                                       
##                                                                                                               
## Headquarters_State)Massachusetts                -0.203                                                        
##                                                 (0.212)                                                       
##                                                                                                               
## Headquarters_State)Michigan                     -0.160                                                        
##                                                 (0.214)                                                       
##                                                                                                               
## Headquarters_State)Minnesota                    -0.039                                                        
##                                                 (0.215)                                                       
##                                                                                                               
## Headquarters_State)Mississippi                   0.005                                                        
##                                                 (0.406)                                                       
##                                                                                                               
## Headquarters_State)Missouri                     -0.027                                                        
##                                                 (0.218)                                                       
##                                                                                                               
## Headquarters_State)Montana                     -0.979**                                                       
##                                                 (0.406)                                                       
##                                                                                                               
## Headquarters_State)Nebraska                     -0.193                                                        
##                                                 (0.239)                                                       
##                                                                                                               
## Headquarters_State)Nevada                        0.008                                                        
##                                                 (0.229)                                                       
##                                                                                                               
## Headquarters_State)New Hampshire                 0.010                                                        
##                                                 (0.321)                                                       
##                                                                                                               
## Headquarters_State)New Jersey                   -0.143                                                        
##                                                 (0.216)                                                       
##                                                                                                               
## Headquarters_State)New York                     -0.185                                                        
##                                                 (0.207)                                                       
##                                                                                                               
## Headquarters_State)North Carolina               -0.179                                                        
##                                                 (0.213)                                                       
##                                                                                                               
## Headquarters_State)North Dakota                  0.021                                                        
##                                                 (0.287)                                                       
##                                                                                                               
## Headquarters_State)Ohio                         -0.118                                                        
##                                                 (0.209)                                                       
##                                                                                                               
## Headquarters_State)Oklahoma                      0.014                                                        
##                                                 (0.231)                                                       
##                                                                                                               
## Headquarters_State)Oregon                       -0.145                                                        
##                                                 (0.249)                                                       
##                                                                                                               
## Headquarters_State)Pennsylvania                 -0.183                                                        
##                                                 (0.210)                                                       
##                                                                                                               
## Headquarters_State)Puerto Rico                   0.006                                                        
##                                                 (0.406)                                                       
##                                                                                                               
## Headquarters_State)Rhode Island                 -0.215                                                        
##                                                 (0.244)                                                       
##                                                                                                               
## Headquarters_State)South Carolina               -0.195                                                        
##                                                 (0.269)                                                       
##                                                                                                               
## Headquarters_State)Tennessee                    -0.197                                                        
##                                                 (0.218)                                                       
##                                                                                                               
## Headquarters_State)Texas                        -0.097                                                        
##                                                 (0.206)                                                       
##                                                                                                               
## Headquarters_State)Utah                          0.006                                                        
##                                                 (0.268)                                                       
##                                                                                                               
## Headquarters_State)Vermont                       0.175                                                        
##                                                 (0.410)                                                       
##                                                                                                               
## Headquarters_State)Virginia                     -0.147                                                        
##                                                 (0.211)                                                       
##                                                                                                               
## Headquarters_State)Washington                   -0.099                                                        
##                                                 (0.221)                                                       
##                                                                                                               
## Headquarters_State)Wisconsin                    -0.143                                                        
##                                                 (0.216)                                                       
##                                                                                                               
## Company_Type)1                                 0.164***                0.150***               0.155***        
##                                                 (0.056)                (0.054)                 (0.053)        
##                                                                                                               
## Constant                                       0.825***                0.695***               0.686***        
##                                                 (0.211)                (0.053)                 (0.052)        
##                                                                                                               
## --------------------------------------------------------------------------------------------------------------
## Observations                                     1,000                  1,000                   1,000         
## R2                                               0.078                  0.039                   0.037         
## Adjusted R2                                      0.028                  0.034                   0.035         
## Residual Std. Error                        0.351 (df = 947)        0.350 (df = 994)       0.350 (df = 997)    
## F Statistic                             1.549*** (df = 52; 947) 8.100*** (df = 5; 994) 19.287*** (df = 2; 997)
## ==============================================================================================================
## Note:                                                                              *p<0.1; **p<0.05; ***p<0.01
AIC(modelo_RLM_TOTAL, modelo_RLM_REDUCIDO, modelo_Iterado_STEP)
##                     df      AIC
## modelo_RLM_TOTAL    54 799.0720
## modelo_RLM_REDUCIDO  7 746.7895
## modelo_Iterado_STEP  4 742.7638
BIC(modelo_RLM_TOTAL, modelo_RLM_REDUCIDO, modelo_Iterado_STEP)
##                     df       BIC
## modelo_RLM_TOTAL    54 1064.0908
## modelo_RLM_REDUCIDO  7  781.1438
## modelo_Iterado_STEP  4  762.3948

5.3. Regresión Logística Simple

La regresión logística simple se utiliza para modelar la relación entre una variable dependiente categórica y una única variable independiente, proporcionando probabilidades de pertenencia a diferentes categorías.

En este análisis, se emplea la regresión logística para predecir la probabilidad de que una empresa pertenezca a un sector específico o rango de ingresos en función de variables como sus activos. Se calcula la función logit y se interpretan los coeficientes en términos de probabilidades, evaluando la significancia estadística de los predictores.

El modelo de regresión logística simple identificó asociaciones significativas entre las variables analizadas, permitiendo predecir con precisión la pertenencia a categorías específicas. Este enfoque destacó la utilidad de este método para entender y modelar relaciones categóricas en datos complejos.

Para facilitar las interpretaciones se entiende que la función de enlace \(\pi(x)\) proviene de una razón de probabilidades (conocida en idioma inglés como ODDS ratio (OR)), que a su vez es el argumento de un logaritmo: \(\log\left(\frac{\pi(x)}{1-\pi(x)}\right)\), así, se modela la probabilidad de que la variable de respuesta pertenezca al nivel de referencia \(1\) en función del valor de los predictores. Complementariamente, la transformación de probabilidades a razones de probabilidad es conserva la monotonicidad de sentidos. Además, la transformación convierte el intervalo de probabilidad \([0,1]\) a \((-\infty,\infty)\). Las propiedades que se dan entre las probabilidades complementarias de éxito y fracaso, sus razones y la función de enlace logit son:

\(p(éxito)=p(fracaso)\) \(OR=1\) \(Logit\left(OR\right)=0\)
\(p(éxito)<p(fracaso)\) \(OR<1\) \(Logit\left(OR\right)<0\)
\(p(éxito)>p(fracaso)\) \(OR>1\) \(Logit\left(OR\right)>0\)

Se entiende que la transformación \(Logit\) carece de sentido para la certeza del éxito o del fracaso.

5.3.1 Planteamiento y Desarrollo

Resumen y Boxplot de Profitable La variable Profitable es mayormente 1, lo que indica que la mayoría de las empresas en el conjunto de datos son rentables. La media también refuerza esta idea, con un valor de 0.851, lo que sugiere que más del 85% de las empresas son rentables. El diagrama de caja visualiza esta concentración de datos en torno al valor 1.

Histograma de Profitable, Resumen y Diagrama de Barras de Company_Type En estos apartados se muestra de manera mas explicita donde se puede ver la escala de mediciòn sobre las compañias que son o no rentable, apreciandose la total dominaciòn de las que son rentables con las que no.

Resumen y Diagrama de Cajas Conjunto Las empresas de tipo 0 tienen una tasa de rentabilidad más baja en comparación con las de tipo 1, ya que tanto el promedio como la mediana para Profitable son más bajos. Las empresas de tipo 1 muestran una mayor tendencia a ser rentables, con un promedio y mediana más altos. El boxplot refuerza esta observación visualmente al mostrar que las empresas del tipo 1 tienen una mayor concentración de valores en 1 (rentables), mientras que las del tipo 0 tienen una mayor dispersión hacia 0 (no rentables).

Resumen y Boxplot de Profitable
summary(cdd_ranking_fortune_reescrito$Profitable)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   1.000   1.000   0.851   1.000   1.000
boxplot(cdd_ranking_fortune_reescrito$Profitable, main = "Diagrama de Caja de Profitable", col = c("orange"))

Histograma de Profitable
summary(cdd_ranking_fortune_reescrito$Profitable)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   1.000   1.000   0.851   1.000   1.000
hist(cdd_ranking_fortune_reescrito$Profitable, main = "Histograma de Profitable", col = c("gold"))

Resumen y Diagrama de Barras de Company_Type
table(cdd_ranking_fortune_reescrito$Company_Type)
## 
##   0   1 
##  45 955
prop.table(table(cdd_ranking_fortune_reescrito$Company_Type))
## 
##     0     1 
## 0.045 0.955
barplot(table(cdd_ranking_fortune_reescrito$Company_Type))

Resumen y Diagrama de Cajas Conjunto
tapply(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$Company_Type, mean)
##         0         1 
## 0.6888889 0.8586387
tapply(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$Company_Type, median)
## 0 1 
## 1 1
boxplot(cdd_ranking_fortune_reescrito$Profitable, cdd_ranking_fortune_reescrito$Company_Type, main = "Boxplot Conjunto: Profitable - Company_Type", col = c("orange", "gold")) 

5.3.2.2. Formulación del modelo de RLogS entre las variables de estudio.

La navegación a través de las pestañas muestra los coeficientes del modelo RLogS y su resumen estadístico. Se menciona de nuevo que las variables de interés son: Company_Type) y Profitable Coeficientes del Modelo RLogS Intercepto: El valor de base de las probabilidades logarítmicas cuando la empresa no es rentable. Coeficiente de Profitable: Un valor de 1.009100 sugiere que las empresas rentables tienen 2.745 veces más probabilidades de ser del tipo 1 en comparación con las empresas no rentables, todo lo demás siendo igual.

Resumen Estadístico del Modelo RLogS En el primer modelo (para predecir el tipo de empresa), el coeficiente de Profitable es significativo y sugiere que las empresas rentables tienen mayores probabilidades de ser del tipo 1.

En el segundo modelo (para predecir si una empresa tiene una CEO mujer), el coeficiente de Profitable no es significativo, lo que sugiere que la rentabilidad de la empresa no tiene un impacto claro sobre la probabilidad de tener una CEO mujer.

Coeficientes del Modelo RLogS
modelo_RLog_Simple = glm(cdd_ranking_fortune_reescrito$Company_Type~cdd_ranking_fortune_reescrito$Profitable, family = "binomial", data = data.frame(cdd_ranking_fortune_reescrito$Company_Type, cdd_ranking_fortune_reescrito$Profitable))
coef(modelo_RLog_Simple)
##                              (Intercept) 
##                                 2.266217 
## cdd_ranking_fortune_reescrito$Profitable 
##                                 1.009100
Resumen Estadístico del Modelo RLogS
summary(modelo_RLog_Simple)
## 
## Call:
## glm(formula = cdd_ranking_fortune_reescrito$Company_Type ~ cdd_ranking_fortune_reescrito$Profitable, 
##     family = "binomial", data = data.frame(cdd_ranking_fortune_reescrito$Company_Type, 
##         cdd_ranking_fortune_reescrito$Profitable))
## 
## Coefficients:
##                                          Estimate Std. Error z value Pr(>|z|)
## (Intercept)                                2.2662     0.2808   8.071 6.96e-16
## cdd_ranking_fortune_reescrito$Profitable   1.0091     0.3351   3.011   0.0026
##                                             
## (Intercept)                              ***
## cdd_ranking_fortune_reescrito$Profitable ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 367.04  on 999  degrees of freedom
## Residual deviance: 359.09  on 998  degrees of freedom
## AIC: 363.09
## 
## Number of Fisher Scoring iterations: 6
modelo_RLog_Simple_S = glm(cdd_ranking_fortune_reescrito$FemaleCEO~cdd_ranking_fortune_reescrito$Profitable, family = "binomial", data = data.frame(cdd_ranking_fortune_reescrito$FemaleCEO, cdd_ranking_fortune_reescrito$Profitable))
summary(modelo_RLog_Simple_S)
## 
## Call:
## glm(formula = cdd_ranking_fortune_reescrito$FemaleCEO ~ cdd_ranking_fortune_reescrito$Profitable, 
##     family = "binomial", data = data.frame(cdd_ranking_fortune_reescrito$FemaleCEO, 
##         cdd_ranking_fortune_reescrito$Profitable))
## 
## Coefficients:
##                                          Estimate Std. Error z value Pr(>|z|)
## (Intercept)                               -1.9848     0.2514  -7.896 2.88e-15
## cdd_ranking_fortune_reescrito$Profitable  -0.2947     0.2777  -1.061    0.289
##                                             
## (Intercept)                              ***
## cdd_ranking_fortune_reescrito$Profitable    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 636.88  on 999  degrees of freedom
## Residual deviance: 635.81  on 998  degrees of freedom
## AIC: 639.81
## 
## Number of Fisher Scoring iterations: 5
5.3.2.3. Análisis del modelo RLogS.

La navegación a través de las pestañas muestra los coeficientes del modelo RLogS y su resumen estadístico. Se menciona de nuevo que las variables de interés son: Company_Type) y Profitable Variable Predictora igual a Cero se oberva que el: intercepto (9.642857): El odds ratio del intercepto indica que cuando la variable independiente Profitable es igual a cero (es decir, cuando una empresa no es rentable), las odds de que la empresa sea del tipo 1 son 9.64 veces mayores que las odds de que no lo sea. En otras palabras, en ausencia de rentabilidad, hay una alta probabilidad de que la empresa sea del tipo 1.

Coeficiente de Profitable (2.743130): El odds ratio para la variable Profitable es 2.743130, lo que significa que si una empresa es rentable (Profitable = 1), las odds de que la empresa sea del tipo 1 aumentan en un factor de 2.74 veces en comparación con las empresas no rentables. Es decir, las empresas rentables tienen 2.74 veces más probabilidades de ser del tipo 1 que las empresas no rentables.

Probabilidades Estimadas Los valores mostrados en la salida indican las probabilidades de que el evento de interés ocurra para cada número de la secuencia (1 a 1000). La mayoría de las probabilidades se acercan a 0.96357, con algunas variaciones pequeñas, como 0.90604. Una probabilidad cercana a 1 (en este caso, 0.96357) indica que el modelo predice que es muy probable que el evento ocurra para esos valores. Las probabilidades 0.90604 muestran que, en algunos casos, el modelo estima una probabilidad ligeramente más baja para los eventos correspondientes. queriendo decir que dentro del conjunto es mas probable que una compañia rentable sea publica esto por su probablidad tan cercana al 100%

Gráfica del Modelo RLogS aca se ve refeljado lo que se estaba concluyendo en la pestaña anterior donde es mas probable que una empresa sea publica y rentable a pesar de haber fluctuaciones donde hay una baja probablilidad que sea rentable y privada, teniendo consistencias con el conjunto estudiado “ranking fortune 1000”

Variable Predictora igual a Cero
coef(modelo_RLog_Simple)
##                              (Intercept) 
##                                 2.266217 
## cdd_ranking_fortune_reescrito$Profitable 
##                                 1.009100
round(exp(coef(modelo_RLog_Simple)),6)
##                              (Intercept) 
##                                 9.642857 
## cdd_ranking_fortune_reescrito$Profitable 
##                                 2.743130
Probabilidades Estimadas
predict(modelo_RLog_Simple, data.frame(seq(1, 1000)), type = "response")
##         1         2         3         4         5         6         7         8 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##         9        10        11        12        13        14        15        16 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##        17        18        19        20        21        22        23        24 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##        25        26        27        28        29        30        31        32 
## 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 
##        33        34        35        36        37        38        39        40 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 
##        41        42        43        44        45        46        47        48 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##        49        50        51        52        53        54        55        56 
## 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 
##        57        58        59        60        61        62        63        64 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##        65        66        67        68        69        70        71        72 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##        73        74        75        76        77        78        79        80 
## 0.9060403 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##        81        82        83        84        85        86        87        88 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 
##        89        90        91        92        93        94        95        96 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 
##        97        98        99       100       101       102       103       104 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 
##       105       106       107       108       109       110       111       112 
## 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       113       114       115       116       117       118       119       120 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       121       122       123       124       125       126       127       128 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       129       130       131       132       133       134       135       136 
## 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9060403 0.9635723 0.9635723 
##       137       138       139       140       141       142       143       144 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9060403 0.9635723 
##       145       146       147       148       149       150       151       152 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 
##       153       154       155       156       157       158       159       160 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       161       162       163       164       165       166       167       168 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       169       170       171       172       173       174       175       176 
## 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       177       178       179       180       181       182       183       184 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       185       186       187       188       189       190       191       192 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       193       194       195       196       197       198       199       200 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       201       202       203       204       205       206       207       208 
## 0.9635723 0.9060403 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 
##       209       210       211       212       213       214       215       216 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       217       218       219       220       221       222       223       224 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       225       226       227       228       229       230       231       232 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       233       234       235       236       237       238       239       240 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       241       242       243       244       245       246       247       248 
## 0.9060403 0.9060403 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       249       250       251       252       253       254       255       256 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       257       258       259       260       261       262       263       264 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9060403 
##       265       266       267       268       269       270       271       272 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       273       274       275       276       277       278       279       280 
## 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       281       282       283       284       285       286       287       288 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 
##       289       290       291       292       293       294       295       296 
## 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9060403 0.9635723 0.9635723 
##       297       298       299       300       301       302       303       304 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       305       306       307       308       309       310       311       312 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       313       314       315       316       317       318       319       320 
## 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       321       322       323       324       325       326       327       328 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       329       330       331       332       333       334       335       336 
## 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 
##       337       338       339       340       341       342       343       344 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       345       346       347       348       349       350       351       352 
## 0.9635723 0.9060403 0.9060403 0.9060403 0.9060403 0.9635723 0.9635723 0.9635723 
##       353       354       355       356       357       358       359       360 
## 0.9635723 0.9060403 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 
##       361       362       363       364       365       366       367       368 
## 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 
##       369       370       371       372       373       374       375       376 
## 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9060403 
##       377       378       379       380       381       382       383       384 
## 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 
##       385       386       387       388       389       390       391       392 
## 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 
##       393       394       395       396       397       398       399       400 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       401       402       403       404       405       406       407       408 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       409       410       411       412       413       414       415       416 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9060403 0.9635723 
##       417       418       419       420       421       422       423       424 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       425       426       427       428       429       430       431       432 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       433       434       435       436       437       438       439       440 
## 0.9635723 0.9060403 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 
##       441       442       443       444       445       446       447       448 
## 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 
##       449       450       451       452       453       454       455       456 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       457       458       459       460       461       462       463       464 
## 0.9060403 0.9060403 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 
##       465       466       467       468       469       470       471       472 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       473       474       475       476       477       478       479       480 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       481       482       483       484       485       486       487       488 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       489       490       491       492       493       494       495       496 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       497       498       499       500       501       502       503       504 
## 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9060403 0.9635723 
##       505       506       507       508       509       510       511       512 
## 0.9635723 0.9635723 0.9060403 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 
##       513       514       515       516       517       518       519       520 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 
##       521       522       523       524       525       526       527       528 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       529       530       531       532       533       534       535       536 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       537       538       539       540       541       542       543       544 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       545       546       547       548       549       550       551       552 
## 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9060403 0.9060403 
##       553       554       555       556       557       558       559       560 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       561       562       563       564       565       566       567       568 
## 0.9060403 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9060403 0.9635723 
##       569       570       571       572       573       574       575       576 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       577       578       579       580       581       582       583       584 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 
##       585       586       587       588       589       590       591       592 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9060403 0.9635723 
##       593       594       595       596       597       598       599       600 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 
##       601       602       603       604       605       606       607       608 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       609       610       611       612       613       614       615       616 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9060403 0.9635723 
##       617       618       619       620       621       622       623       624 
## 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       625       626       627       628       629       630       631       632 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 
##       633       634       635       636       637       638       639       640 
## 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       641       642       643       644       645       646       647       648 
## 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 
##       649       650       651       652       653       654       655       656 
## 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 
##       657       658       659       660       661       662       663       664 
## 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       665       666       667       668       669       670       671       672 
## 0.9060403 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       673       674       675       676       677       678       679       680 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 
##       681       682       683       684       685       686       687       688 
## 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9060403 0.9635723 
##       689       690       691       692       693       694       695       696 
## 0.9635723 0.9635723 0.9635723 0.9060403 0.9060403 0.9635723 0.9635723 0.9635723 
##       697       698       699       700       701       702       703       704 
## 0.9635723 0.9060403 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 
##       705       706       707       708       709       710       711       712 
## 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9060403 0.9635723 
##       713       714       715       716       717       718       719       720 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 
##       721       722       723       724       725       726       727       728 
## 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 
##       729       730       731       732       733       734       735       736 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 
##       737       738       739       740       741       742       743       744 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       745       746       747       748       749       750       751       752 
## 0.9635723 0.9060403 0.9060403 0.9635723 0.9635723 0.9635723 0.9060403 0.9060403 
##       753       754       755       756       757       758       759       760 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       761       762       763       764       765       766       767       768 
## 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9060403 0.9635723 0.9635723 
##       769       770       771       772       773       774       775       776 
## 0.9060403 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       777       778       779       780       781       782       783       784 
## 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 
##       785       786       787       788       789       790       791       792 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 
##       793       794       795       796       797       798       799       800 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 
##       801       802       803       804       805       806       807       808 
## 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 
##       809       810       811       812       813       814       815       816 
## 0.9635723 0.9060403 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       817       818       819       820       821       822       823       824 
## 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 
##       825       826       827       828       829       830       831       832 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       833       834       835       836       837       838       839       840 
## 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       841       842       843       844       845       846       847       848 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 
##       849       850       851       852       853       854       855       856 
## 0.9635723 0.9060403 0.9635723 0.9635723 0.9060403 0.9635723 0.9060403 0.9060403 
##       857       858       859       860       861       862       863       864 
## 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 
##       865       866       867       868       869       870       871       872 
## 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       873       874       875       876       877       878       879       880 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 
##       881       882       883       884       885       886       887       888 
## 0.9635723 0.9635723 0.9635723 0.9060403 0.9060403 0.9635723 0.9635723 0.9635723 
##       889       890       891       892       893       894       895       896 
## 0.9060403 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 
##       897       898       899       900       901       902       903       904 
## 0.9060403 0.9060403 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9060403 
##       905       906       907       908       909       910       911       912 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9060403 
##       913       914       915       916       917       918       919       920 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       921       922       923       924       925       926       927       928 
## 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 0.9060403 0.9635723 
##       929       930       931       932       933       934       935       936 
## 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9060403 0.9060403 0.9635723 
##       937       938       939       940       941       942       943       944 
## 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9060403 
##       945       946       947       948       949       950       951       952 
## 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9060403 
##       953       954       955       956       957       958       959       960 
## 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       961       962       963       964       965       966       967       968 
## 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9060403 0.9060403 0.9635723 
##       969       970       971       972       973       974       975       976 
## 0.9635723 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       977       978       979       980       981       982       983       984 
## 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9060403 
##       985       986       987       988       989       990       991       992 
## 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 0.9635723 
##       993       994       995       996       997       998       999      1000 
## 0.9635723 0.9060403 0.9635723 0.9635723 0.9635723 0.9060403 0.9635723 0.9060403
Gráfica del Modelo RLogS
Company_type <- cdd_ranking_fortune_reescrito$Company_Type
Profitable <- cdd_ranking_fortune_reescrito$Profitable
dataPlot <- data.frame(Profitable, Company_type)
plot(Company_type~Profitable, data = dataPlot, main = "Modelo RLogS: Profitable - Company type", xlab = "Profitable", ylab = "Company type = 0 | Company type = 1", col = "gold", pch = "I")
curve(predict(glm(Company_type~Profitable, family = "binomial", data = dataPlot), data.frame(Profitable = x), type = "response"), col = "orange", lwd = 3, add = TRUE)

6. Conclusiones

El análisis del ranking Fortune 1000 de 2024 permitió identificar patrones y tendencias clave en las métricas financieras y operativas de las principales empresas de Estados Unidos. Aunque no se encontraron agrupaciones claras en los datos (como lo evidenciaron los diagramas de Chernoff y las estrellas), variables como ingresos, activos y número de empleados mostraron relaciones positivas significativas entre sí, indicando que estas métricas están fuertemente interconectadas en el rendimiento empresarial.

Sin embargo, las variables incluidas en este análisis multivariado explican únicamente cerca del 80% de la variabilidad observada en los datos, lo que es suficiente para tomar decisiones informadas sobre los patrones principales en las empresas, pero deja un 20% de variabilidad sujeto a incertidumbre. Este porcentaje restante abre la puerta a futuros estudios que podrían explorar otras variables no consideradas o factores externos que influyen en el desempeño empresarial.

De que la distribuciòn general del ranking, tiende a estar aglomerada a excepciòn de datos atipicos con valores muy alto los cuales tienden a sesgar la distribuciòn con con la hacia la derecha.

teniendo en cuenta de que este modelo no lo puede predecir con tal presiciòn gracias a los valores atipicos que sesgan las observaciones.

7. Bibliografía

Fortune 1000 Companies (2024)https://www.kaggle.com/datasets/jeannicolasduval/2024-fortune-1000-companies/data

Aldás, J., & Uriel, E. (2017). Análisis multivariante aplicado con R (2nd ed.). ALFACENTAURO.

Libreros, G. (2023). Estudio de análisis multivariado con base en un conjunto de datos de aspirantes extranjeros para ser admitidos en estudios superiores en EE.UU. In R MARKDOWN. https://glibrerosl.github.io/Applied-Statistics-FULL/#8_Calidad_de_Representaci%C3%B3nhttps://glibrerosl.github.io/Applied-Statistics-FULL/

Díaz Morales, L. G., & Morales Rivera, M. A. (2012). Análisis estadístico de datos multivariados (1st ed.). UNAL.

Devore, Jay L. (2008). Probabilidad y estadı́stica para ingenierı́a y ciencias (7th ed.). CENGAGE LEARNING.

Lind, D. A., Marchal, W. G., & Wathen, S. A. (2012). Estadística aplicada a los negocios y la economía (15th ed.). McGraw-Hill Education.

Staff, M. C. (2024). What are ideal cholesterol levels? https://www.mayoclinic.org/es/diseases-conditions/high-blood-cholesterol/expert-answers/cholesterol-level/faq-20057952

Aldás, J., & Uriel, E. (2017). Análisis multivariante aplicado con R (2nd ed.). ALFACENTAURO.
Devore, Jay L. (2008). Probabilidad y estadı́stica para ingenierı́a y ciencias (7th ed.). CENGAGE LEARNING.
Díaz Morales, L. G., & Morales Rivera, M. A. (2012). Análisis estadístico de datos multivariados (1st ed.). UNAL.
LS0tDQp0aXRsZTogIioqUk1EX0c5KioiDQpzdWJ0aXRsZTogIkVzdHVkaW8gZGUgQW7DoWxpc2lzIE11bHRpdmFyaWFkbyBjb24gYmFzZSBlbiB1biBjb25qdW50byBkZSBkYXRvcyBzb2JyZSBlbCByYW5raW5nIGZvcnR1bmUgMTAwMCAyMDI0ICINCmF1dGhvcjogImJheXJvbi5tdW5vejo6Y2FybG9zLmZhcmlkLm1lbmRlejo6am9zZS5saXphcmF6bzo6IEBjb3JyZW91bml2YWxsZS5lZHUuY28iDQpkYXRlOiAiRXN0dWRpbyBoZWNobyBkdXJhbnRlIGVsIHBlcmlvZG8gYWNhZGVtaWNvIGFnb3N0by1kaWNpZW1icmUgZGUgMjAyNCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDogDQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIHRoZW1lOiBsdW1lbg0KYmlibGlvZ3JhcGh5OiBiaWJsaW9ncmFmaWFfTUUuYmliDQpjc2w6IGFwYS5jc2wNCmxpbmstY2l0YXRpb25zOiB5ZXMNCi0tLQ0KPCEtLSBDb25maWd1cmFjacOzbiBHbG9iYWwgZGUgUiAtLT4NCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KEdHYWxseSkNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoYW5kcmV3cykNCmxpYnJhcnkodGNsdGspDQpsaWJyYXJ5KGFwbHBhY2spDQpsaWJyYXJ5KGdyYXBoaWNzKQ0KbGlicmFyeShjb3JycGxvdCkNCmxpYnJhcnkoTVZOKQ0KbGlicmFyeShyZXNoYXBlMikNCmxpYnJhcnkoRmFjdG9NaW5lUikNCmxpYnJhcnkoZmFjdG9leHRyYSkNCmxpYnJhcnkocHN5Y2gpDQpsaWJyYXJ5KEZhY3RvQ2xhc3MpDQpsaWJyYXJ5KGNsdXN0ZXIpDQpsaWJyYXJ5KGRlbmRleHRlbmQpDQpsaWJyYXJ5KG1hZ3JpdHRyKQ0KbGlicmFyeShOYkNsdXN0KQ0KbGlicmFyeShzdGFyZ2F6ZXIpDQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobz1UUlVFKQ0KDQoNCg0KY2RkX3JhbmtpbmdfZm9ydHVuZV9HOSA8LSByZWFkX2V4Y2VsKCJDOi9DVVJTT1MvNHRvIFNlbWVzdHJlL0NVUlNPIEdkRCAyMDI0XyBHOS9jZGRfcmFua2luZ19mb3J0dW5lX0c5LnhscyIpDQpWaWV3KGNkZF9yYW5raW5nX2ZvcnR1bmVfRzkpDQoNCmNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvIDwtIHJlYWRfZXhjZWwoIkM6L0NVUlNPUy80dG8gU2VtZXN0cmUvQ1VSU08gR2REIDIwMjRfIEc5L2NkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvLnhsc3giKQ0KVmlldyhjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0bykNCg0KY2RkX3JhbmtpbmdfZm9ydHVuZV9oZWFkcXVhcnRlcnNfU3RhdGVfUHJvbWVkaW88LXJlYWRfZXhjZWwoImNkZF9yYW5raW5nX2ZvcnR1bmVfaGVhZHF1YXJ0ZXJzX1N0YXRlX1Byb21lZGlvLnhsc3giKQ0KVmlldyhjZGRfcmFua2luZ19mb3J0dW5lX2hlYWRxdWFydGVyc19TdGF0ZV9Qcm9tZWRpbykNCg0KDQpgYGANCiMjICoqRmFzZSAxIFtEZXNjcmlwY2lvbmVzIE11bHRpdmFyaWFudGVzXSoqDQpFbiBsYSBwcmltZXJhIGV0YXBhIGRlbCBlc3R1ZGlvLCBzZSBsbGV2YXLDoW4gYSBjYWJvIGPDoWxjdWxvcywgdmlzdWFsaXphY2lvbmVzIHkgdW4gYW7DoWxpc2lzIGRlbCByYW5raW5nIGZvcnR1bmUgZGUgbGFzIDEwMDAgZW1wcmVzYXMgbWFzIGltcG9ydGFudGVzIGRlIEVzdGFkb3MgVW5pZG9zIGNhYmUgcmVjYWxjYXIgcXVlIGVzdGFtb3MgdXNhbmRvIGxvcyBkYXRvcyBleGNsdXNpdm9zIGRlIGVzdGUgcmFua2luZyBlbCBjdWFsIGNvbnRpZW5lIHVuYSBhY3R1YWxpemFjacOzbiBoYXN0YSBlbCA4IGRlIG1heW8gZGVsIDIwMjQgLCBxdWUgc2Vyw6EgZGVzY3JpdG8gZW4gbGEgW3NlY2Npw7NuIDEuMl0oI3NlYzEuMikuIEVzdGUgcHJvY2VzbyBzZSBhYm9yZGFyw6EgZGVzZGUgdW5hIHBlcnNwZWN0aXZhIGRlIGVzdGFkw61zdGljYSBkZXNjcmlwdGl2YSBtdWx0aXZhcmlhbnRlLCBsbyBxdWUgcGVybWl0aXLDoSBubyBzb2xvIHVuYSB2aXNpw7NuIGdlbmVyYWwgZGUgbG9zIGRhdG9zLCBzaW5vIHRhbWJpw6luIHVuIGFuw6FsaXNpcyBtw6FzIGVucmlxdWVjaWRvIHkgcHJlY2lzYSBkZSBsYXMgcmVsYWNpb25lcyBlbnRyZSBsYXMgZGlmZXJlbnRlcyB2YXJpYWJsZXMgaW52b2x1Y3JhZGFzLg0KDQpFc3RlIGVuZm9xdWUgZmFjaWxpdGFyw6EgdW5hIGNvbXByZW5zacOzbiBtw6FzIHByb2Z1bmRhIGRlIGxhcyByZWxhY2lvbmVzIGVudHJlIGxhcyB2YXJpYWJsZXMgKGN1YW50aXRhdGl2YXMpLCBheXVkYW5kbyBhIGlkZW50aWZpY2FyIHBhdHJvbmVzIHkgdGVuZGVuY2lhcyByZWxldmFudGVzIHBhcmEgZWwgYW7DoWxpc2lzLiBMYXMgdmlzdWFsaXphY2lvbmVzIGp1Z2Fyw6FuIHVuIHJvbCBpbXBvcnRhbnRlIGVuIGxhIGludGVycHJldGFjacOybiBkZSBsYXMgZ3LDoWZpY2FzIGRlIGVzdGFzIHJlbGFjaW9uZXMsIHRvZG8gZXN0byBzZSBsbGV2YXLDoSBhIGNhYm8gdXRpbGl6YW5kbyBsYXMgaGVycmFtaWVudGFzIFIgeSBSU3R1ZGlvLCBxdWUgcGVybWl0aXLDoW4gdW5hIGVqZWN1Y2nDs24gZWZpY2llbnRlIHkgcHJlY2lzYSBkZSBsb3MgY8OhbGN1bG9zIHkgbGEgY3JlYWNpw7NuIGRlIGdyw6FmaWNvcyBpbnRlcmFjdGl2b3MuDQoNCkNhYmUgZGVzdGFjYXIgcXVlIGxhIGVzdHJ1Y3R1cmEgZ2VuZXJhbCBkZWwgdHJhYmFqbywgYXPDrSBjb21vIGFsZ3VuYXMgaWRlYXMgZXNwZWPDrWZpY2FzLCBzZSB0b21hcm9uIGRlbCAqKkVzdHVkaW8gZGUgQW7DoWxpc2lzIE11bHRpdmFyaWFkbyBjb24gYmFzZSBlbiB1biBjb25qdW50byBkZSBkYXRvcyBkZSBhc3BpcmFudGVzIGV4dHJhbmplcm9zIHBhcmEgc2VyIGFkbWl0aWRvcyBlbiBlc3R1ZGlvcyBzdXBlcmlvcmVzIGVuIEVFLlVVLioqIHJlYWxpemFkbyBwb3IgZWwgcHJvZmVzb3IgW0BMaWJyZXJvczIwMjNdIGVuIGVsIG1hcmNvIGRlIHN1cyBlc3R1ZGlvcyBkZSBwb3NncmFkbyBlbiBFc3RhZMOtc3RpY2EgQXBsaWNhZGEuIEFkZW3DoXMsIGVsIHByb2Zlc29yIHByb3BvcmNpb27DsyB1bmEgYW1wbGlhIGJhc2UgYmlibGlvZ3LDoWZpY2EgY29tbyBhcG95byBhbCBpbmljaW8gZGVsIGN1cnNvLiBFbnRyZSBsYXMgcHJpbmNpcGFsZXMgcmVmZXJlbmNpYXMgc2UgaW5jbHV5ZW4gZWwgbGlicm8gKkFuw6FsaXNpcyBlc3RhZMOtc3RpY28gZGUgZGF0b3MgbXVsdGl2YXJpYWRvcyogZGVsIHByb2Zlc29yIFtAQUVETURpYXotTW9yYWxlczFlZF0sIGRlIGxhIFVuaXZlcnNpZGFkIE5hY2lvbmFsIGRlIENvbG9tYmlhLCB5IGVsIHRleHRvICpBbsOhbGlzaXMgbXVsdGl2YXJpYW50ZSBhcGxpY2FkbyBjb24gUiogZGUgW0BBTUFSQWxkYXMtVXJpZWwyZWRdIGVuIHN1IHNlZ3VuZGEgZWRpY2nDs24sIGVsIGN1YWwgYXBvcnRhcmEgaGVycmFtaWVudGFzIGNsYXZlIHBhcmEgcmVhbGl6YXIgYW7DoWxpc2lzIGF2YW56YWRvcyB1dGlsaXphbmRvIGVzdGUgc29mdHdhcmUuDQoNClRhbWJpw6luIHNlIGluY29ycG9yYXJvbiBjb25jZXB0b3MgZGUgbGEgb2JyYSAqRXN0YWTDrXN0aWNhIGFwbGljYWRhIGEgbG9zIG5lZ29jaW9zIHkgbGEgZWNvbm9tw61hKiBkZSBbQExpbmRFc3RhZGlzdGljYTIwMTJdIHkgZGUgKlByb2JhYmlsaWRhZCB5IGVzdGFkw61zdGljYSBwYXJhIGluZ2VuaWVyw61hIGluZHVzdHJpYWwqIGRlIFtAUEVEZXZvcmU3ZWRdLiBFc3RhcyBmdWVudGVzIGhhbiBzaWRvIGZ1bmRhbWVudGFsZXMgcGFyYSBndWlhciB5IGVzdHJ1Y3R1cmFyIGVsIGVuZm9xdWUgbWV0b2RvbMOzZ2ljbyB5IGFuYWzDrXRpY28gZGVsIHByZXNlbnRlIGVzdHVkaW8uDQoNCiMjIyAxLjEuIE9iamV0aXZvcw0KDQpFbCBvYmpldGl2byBwcmluY2lwYWwgZGUgZXN0ZSBlc3R1ZGlvIGVzIGFuYWxpemFyIGVsIGNvbXBvcnRhbWllbnRvIGRlIGxhcyBwcmluY2lwYWxlcyBjb21wYcOxw61hcyByYW5rZWFkYXMgZW4gZWwgRm9ydHVuZSAxMDAwIHBhcmEgZWwgYcOxbyAyMDI0LCB1dGlsaXphbmRvIGhlcnJhbWllbnRhcyBkZSBhbsOhbGlzaXMgbXVsdGl2YXJpYWRvIG90b3JnYWRhcyB5IGRpY3RhZGFzIHBvciBlbCBwcm9mZXNvciBHaWFuIENhcmxvIExpYnJlcm9zLCBhIHRyYXbDqXMgZGVsIGFuw6FsaXNpcyBkZSBkaXZlcnNhcyB2YXJpYWJsZXMgY3VhbGl0YXRpdmFzIHkgY3VhbnRpdGF0aXZhcywgYnVzY2FuZG8gYXNpIGlkZW50aWZpY2FyIHBhdHJvbmVzLCBjb3JyZWxhY2lvbmVzIHkgZXN0cnVjdHVyYXMgc3VieWFjZW50ZXMgZW4gbG9zIGRhdG9zLiBEZSBtYW5lcmEgZXNwZWPDrWZpY2EsIHByZXRlbmRlbW9zOg0KDQpFdmFsdWFyIGxhIHJlbGFjacOzbiBlbnRyZSBkaWZlcmVudGVzIG3DqXRyaWNhcyBlbXByZXNhcmlhbGVzIChjb21vIGluZ3Jlc29zLCBnYW5hbmNpYXMsIGFjdGl2b3MsIGNhcGl0YWxpemFjacOybiBlbiBib2xzYSwgZXRjKSB5IGNvbW8gZXN0byBpbmZsdXllIGVuIGVsIHJhbmtpbmcgZ2VuZXJhbCwgaWRlbnRpZmljYXIgcG9zaWJsZXMgYWdydXBhY2lvbmVzIGRlIGVtcHJlc2FzIGNvbiBjYXJhY3RlcsOtc3RpY2FzIHNpbWlsYXJlcywgdGFtYmllbiBkZXRlcm1pbmFyIHNpIGxvcyBkYXRvcyBwcmVzZW50YW4gdW5hIGRpc3RyaWJ1Y2nDs24gbm9ybWFsIG11bHRpdmFyaWFkYSwgbG8gcXVlIGZhY2lsaXRhcsOtYSBsYSBhcGxpY2FjacOzbiBkZSBjaWVydG9zIG3DqXRvZG9zIGVzdGFkw61zdGljb3MuDQoNCiMjIyAxLjIuIERlc2NyaXBjacOzbiBkZSBsb3MgZGF0b3Mgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KRWwgY29uanVudG8gZGUgZGF0b3Mgb3JpZ2luYWwgZGVzY2FyZ2FkbyBkZXNkZSBsYSBwbGF0YWZvcm1hIGRlIGthZ2dsZSwgY29udGllbmUgMzIgY2FtcG9zICoqKHZhcmlhYmxlcykqKiB5IDEwMDAgY29tcGHDsWlhcyAocmVnaXN0cm9zKS4gY29udGFuZG8gY29uIHZhcmlvcyBjYW1wb3MgZG9uZGUgc29uIHNpbXBsZW1lbnRlIGlkZW50aWZpY2Fkb3JlcyBudW3DqXJpY29zIHkgZGUgZXRpcWV1dGFzIHNlY3VlbmNpYWwgZGUgbG9zIHJlZ2lzdHJvczsgb3Ryb3MgY3VhdHJvIHNvbiBkZSBuYXR1cmFsZXphIGRpY290b21pY2EgKiooY2F0ZWfDs3JpY2FzIGNvbiBtw7psdGlwbGVzIG9wY2lvbmVzKSoqOyB5IGVsIHJlc3RvIHNvbiBudW3DqXJpY29zIGVzdHJpY3RhbWVudGUgcG9zaXRpdm9zLg0KDQpMYSBsaXN0YSBzaWd1aWVudGUgZGVzY3JpYmUgbGFzIHZhcmlhYmxlcyBlbiBlbCBtaXNtbyBvcmRlbiwgZGUgaXpxdWllcmRhIGEgZGVyZWNoYSwgY29tbyBhcGFyZWNlbiBlbiBlbCByYW5nbyBkZSBkYXRvcyBxdWUgbG9zIGNvbnRpZW5lLCB5IHNlIGVzdGFibGVjZSBwYXJhIGNhZGEgY2FtcG8sIGV4Y2VwdG8gZWwgY2FtcG8gUmFuayAqKihTZXJpYWwpKiosIGVsIHRpcG8gZGUgdmFyaWFibGUgeSBzdSBlc2NhbGEgZGUgbWVkaWNpw7NuIGNvbiBiYXNlIGVuIGVsIG5vbWJyZSB5IGNvbnRlbmlkbyBkZSBsYSByZXNwZWN0aXZhIHZhcmlhYmxlOg0KDQotMS4qKlJhbmsqKjogKFNlcmlhbDo6aWRlbnRpZmljYWRvcikuIFJlcHJlc2VudGEgZWwgcmFuZ28gbyBwb3NpY2nDsm4gZGUgbGEgY29tcGHDscOtYSBlbiBsYSBsaXN0YSBkZSBGb3J0dW5lIDEwMDAgLg0KDQotMi4qKkNvbXBhbnkqKjogKEN1YWxpdGF0aXZhOjpub21pbmFsKS4gUmVzZ2l0cmEgbG9zIG5vbWJyZXMgZGUgbGFzIGNvbXBhw7HDrWFzIHF1ZSBoYWNlbiBwYXJ0aWNpcGUgZW4gZXN0ZSByYW5raW5nIC4NCg0KLTMuKipUaWNrZXIqKjogKEN1YWxpdGF0aXZhOjpub21pbmFsKS4gUmVnaXN0cmEgbGEgYWJyZXZpYWNpw7JuIGRlbCBub21icmUgZGUgbGEgZW1wcmVzYSBlbiBlc3RlIHJhbmtpbmcgLg0KDQotNC4qKlNlY3RvcioqOiAoQ3VhbGl0YXRpdmE6Om5vbWluYWwpLiBSZWdpc3RyYSBsYSBlbCBzZWN0b3IgYWwgY3VhbCBxdWUgcGVydGVuZWNlIGVsIGNhbXBvIGRlIGFjY2nDsm4gZGUgbGEgZW1wcmVzYSAuDQoNCi01LioqSW5kdXN0cnkqKjogKEN1YWxpdGF0aXZhOjpub21pbmFsKS4gUmVzZ2lzdHJhIGxhIGNhdGVnb3LDrWEgZXNwZWNpZmljYSBkZSBsYSBpbmR1c3RyaWEgbGEgcXVlIHBlcnRlbmVjZSBsYSBlbXByZXNhIC4NCg0KLTYuKipQcm9maXRhYmxlKio6IChDdWFsaXRhdGl2YTo6bm9taW5hbF9kaWNvdG9tw6xjYSkuIFJlc2dpc3RyYSBlbCBpbmRpY2Fkb3Igc2kgbGEgZW1wcmVzYSBlcyBvIG5vIHJlbnRhYmxlIGRlbnRybyBkZWwgbWVyY2FkbyBkZSBjb21wZXRpY2nDsm4gKHllcygxKS9ubygwKSkgLg0KDQotNy4qKkZvdW5kZXJfaXNfQ0VPKio6IChDdWFsaXRhdGl2YToubm9taW5hbF9kaWNvdG9tw6xjYSkuIFJlc2dpdHJhIGVsIGluZGljYWRvciBhY2VyY2EgZGUgcXVlIHNpIGVsIGZ1bmRhZG9yIGVzIGVsIENFTyAoeWVzKDEpL25vKDApKSAuDQoNCi04LioqRmVtYWxlQ0VPKio6IChDdWFsaXRhdGl2YTo6bm9taW5hbF9kaWNvdG9tw6xjYSkuIFJlZ2lzdHJhIGVsIEluZGljYWRvciBhY2VyY2EgZGUgcXVlIHNpIGVsIENFTyBlcyBtdWplciAoeWVzKDEpL25vKDApKSAuDQoNCi05KipHcm93dGhfaW5fSm9icyoqOiAoQ3VhbGl0YXRpdmE6Om5vbWluYWxfZGljb3RvbcOsY2EpLiBSZWdpc3RyYSBlbCBJbmRpY2Fkb3Igc29icmUgZWwgc2kgYSBhdW1lbnRhZG8gZWwgY3JlY2ltaWVudG8gZW4gZWwgbsO6bWVybyAoeWVzKDEpL25vKDApKSAuDQoNCi0xMC4qKkNoYW5nZV9pbl9SYW5rKio6IChDdWFudGl0YXRpdmE6OnJhesOzbikuUmVnaXN0cmEgbG9zIGNhbWJpb3MgZW4gZWwgcmFuZ28gZGUgbGEgZW1wcmVzYSByZXNwZWN0byBhbCBhw7FvIGFudGVyaW9yIC4NCg0KLTExLioqR2FpbmVkX2luX1JhbmsqKjogKEN1YWxpdGF0aXZhOjpub21pbmFsX2RpY290b23DrGNhKS4gSW5kaWNhZG9yIHNpIGxhIGVtcHJlc2EgZ2Fuw7MgcmFuZ28gKHllcygxKS9ubygwKSkgLg0KDQotMTIuKipEcm9wcGVkX2luX1JhbmsqKjogKEN1YWxpdGF0aXZhOjpub21pbmFsX2RpY290b23DrGNhKS4gSW5kaWNhZG9yIHNpIGxhIGVtcHJlc2EgcGVyZGnDsyByYW5nbyAoeWVzKDEpL25vKDApKSAuDQoNCi0xMy4qKk5ld2NvbWVyX3RvX3RoZV9Gb3J0dW5lNTAwKio6KEN1YWxpdGF0aXZhOjpub21pbmFsX2RpY290b23DrGNhKS4gSW5kaWNhZG9yIHNpIGxhIGVtcHJlc2EgZXMgbnVldmEgZW4gbGEgbGlzdGEsIHJlcHJlc2VudGFuZG8gdW4gY3JlY2ltaWVudG8gZW4gZWwgbWVyY2FkbyB5IGF1bWVudGFuZG8gc3UgdmFsb3IgZW4gZWwgbWlzbW8gKHllcygxKS9ubygwKSkgLg0KDQotMTQuKipHbG9iYWw1MDAqKjogKEN1YWxpdGF0aXZhOjpub21pbmFsX2RpY290b23DrGNhKS4gUmVnaXN0cmEgdW5hIGNvbXBhcmFjacOybiBlbiBsYSBjdWFsIGluZGljYSBzaSBsYSBlbXByZXNhIHRhbWJpw6luIGFwYXJlY2UgZW4gbGEgbGlzdGEgR2xvYmFsIDUwMCAoeWVzKDEpL25vKDApKSAuDQoNCi0xNS4qKldvcmxkc19Nb3N0X0FkbWlyZWRfQ29tcGFuaWVzKio6IChDdWFsaXRhdGl2YTo6bm9taW5hbF9kaWNvdG9tw6xjYSkpLlJlZ2lzdHJhIG90cmEgY29tcGFyYXRpdmEgbGEgY3VhbCBpbmRpY2Egc2kgbGEgZW1wcmVzYSBlc3TDoSBlbiBsYSBsaXN0YSBkZSBsYXMgbcOhcyBhZG1pcmFkYXMgZGVsIG11bmRvICh5ZXMoMSkvbm8oMCkpIC4NCg0KLTE2LioqQmVzdF9Db21wYW5pZXNfdG9fV29ya19Gb3IqKjogKEN1YWxpdGF0aXZhOjpub21pbmFsX2RpY290b23DrGNhKS4gUmVnaXN0cmEgb3RyYSBjb21wYXJhdGl2YSBsYSBjdWFsIGluZGljYSBzaSBlc3TDoSBlbiBsYSBsaXN0YSBkZSBtZWpvcmVzIGVtcHJlc2FzIHBhcmEgdHJhYmFqYXIgKHllcygxKS9ubygwKSkuDQoNCi0xNy4qKk51bWJlcl9vZl9lbXBsb3llZXMqKjogKEN1YW50aXRhdGl2YTo6cmF6w7NuKS4gUmVzZ2lzdHJhIG7Dum1lcm8gZGUgZW1wbGVhZG9zIGNvbiBsb3MgcXVlIGxhcyBlbXByZXNhcyBjdWVudGFuIGVuIGRpc3Bvc2ljacOybiAuDQoNCi0xOC4qKk1hcmtldENhcF9NYXJjaDI4X00qKjogKEN1YW50aXRhdGl2YTo6cmF6w7NuKS4gUmVnaXN0cmEgbGEgY2FwaXRhbGl6YWNpw7NuIGRlIG1lcmNhZG8gZGUgbGFzIGVtcHJlc2FzIGVuIG1pbGVzIGRlIG1pbGxvbmVzIGRlIGTDs2xhcmVzIGhhc3RhIGVsIDI4IGRlIG1hcnpvLg0KDQotMTkuKipSZXZlbnVlc19NKio6IChDdWFudGl0YXRpdmE6OnJhesOzbikuIFJlZ2lzdHJhIGxvcyBpbmdyZXNvcyBkZSBsYXMgZW1wcmVzYXMgZW4gbWlsbG9uZXMgZGUgZMOzbGFyZXMgLg0KDQotMjAuKipSZXZlbnVlUGVyY2VudENoYW5nZSoqOiAoQ3VhbnRpdGF0aXZhOjpyYXrDs24pLiBSZWdpc3RyYSBlbCBjYW1iaW8gcG9yY2VudHVhbCBlbiBsb3MgaW5ncmVzb3MgZGUgbGFzIGVtcHJlc2FzIC4NCg0KLTIxLioqUHJvZml0c19NKio6IChDdWFudGl0YXRpdmE6OnJhesOzbikuUmVnaXN0cmEgbGFzIGdhbmFuY2lhcyBkZSBsYXMgZW1wcmVzYXMgZW4gbWlsZXMgZGUgbWlsbG9uZXMgZGUgZMOzbGFyZXMuDQoNCi0yMi4qKlByb2ZpdHNQZXJjZW50Q2hhbmdlKio6IChDdWFudGl0YXRpdmE6OnJhesOzbikuUmVnaXN0cmEgZWwgY2FtYmlvIHBvcmNlbnR1YWwgZW4gbGFzIGdhbmFuY2lhcyBkZSBsYXMgZW1wcmVzYXMgLg0KDQotMjMuKipBc3NldHNfTSoqOiAoQ3VhbnRpdGF0aXZhOjpyYXrDs24pLiBSZWdpc3RyYSBsb3MgYWN0aXZvcyByZXNwZWN0aXZvcyBkZSBsYXMgZW1wcmVzYXMgZW4gbWlsZXMgZGUgbWlsbG9uZXMgZGUgZMOzbGFyZXMuDQoNCi0yNC4qKkNFTyoqOiAoQ3VhbGl0YXRpdmE6Om5vbWluYWwpLiBSZWdpc3RyYSBlbCBub21icmUgZGUgbG9zIENFT2BzIGRlIGNhZGEgdW5hIGRlIGxhcyByZXNwZWN0aXZhcyBlbXByZXNhcyBkZSBhY3VlcmRvIGEgbGEgcG9zaWNpw7JuIGRlIGxhcyBjb21wYcOxaWFzIGVuIGVsIHJhbmtpbmcgLg0KDQotMjUuKipDb3VudHJ5Kio6IChDdWFsaXRhdGl2YTo6bm9taW5hbCkuIFJlZ2lzdHJhIGVsIHBhw61zIGRvbmRlIHNlIHViaWNhIHJlc3BlY3RpdmFtZW50ZSBjYWRhIGVtcHJlc2EgLg0KDQotMjYuKipIZWFkcXVhcnRlcnNDaXR5Kio6IChDdWFsaXRhdGl2YTo6bm9taW5hbCkuIFJlZ2lzdHJhIGxhIGNpdWRhZCBkb25kZSBzZSBlbmN1ZW50cmFuIHViaWNhZGFzIGxhcyBvZmljaW5hcyBjZW50cmFsZXMgZGUgbGFzIGVtcHJlc2FzIC4NCg0KLTI3LioqSGVhZHF1YXJ0ZXJzU3RhdGUqKjogKEN1YWxpdGF0aXZhOjpub21pbmFsKS4gUmVnaXN0cmEgZWwgZXN0YWRvIGRvbmRlIHNlIGVuY3VlbnRyYW4gdWJpY2FkYXMgbGFzIG9maWNpbmFzIGNlbnRyYWxlcyBkZSBsYXMgY29tcGHDsWlhcyAuDQoNCi0yOC4qKldlYnNpdGUqKjogKEN1YWxpdGF0aXZhOjpub21pbmFsKS5SZWdpc3RyYSBsYSBkaXJyZWNjacOybiBvbmxpbmUgZGUgbGEgUMOhZ2luYSB3ZWIgZGUgbGFzIGVtcHJlc2FzIC4NCg0KLTI5LioqQ29tcGFueVR5cGUqKjogKEN1YWxpdGF0aXZhOjpub21pbmFsX2RpY290b8OsY2EpLlJlZ2lzdHJhIGVsIHRpcG8gZGUgY29tcGHDscOtYSBzaSBwZXJ0ZW5lY2UgYWwgc2VjdG9yIHB1YmxpY28gbyBwcml2YWRvIChww7pibGljYSAoMSksIHByaXZhZGEoMCkpDQplbiBlc3RhIHZhcmlhYmxlIHNlIHRpZW5lIHF1ZSBoYWNlciBsYSBhY2xhcmFjacOybiBkZSBxdWUgZWwgcmFua2luZyBmb3J0dW5lIDEwMDAsIGNhdGVnb3JpemEgdW5hIGNvbXBhw7FpYSBzaSBlcyBwdWJsaWNhIGEgdG9kYXMgYXF1ZWxsYXMgY290aWNlbiBlbiBib2xzYSwgc2llbmRvIGFzaSBwcml2YWRhcyBhcXVlbGxhcyBxdWUgbm8gY290aXphbiBlbiBib2xzYS4NCg0KLTMwLioqRm9vdG5vdGUqKjogKEN1YWxpdGF0aXZhOjpub21pbmFsKS4gUmVnaXN0cmEgbm90YXMgbyBjb21lbnRhcmlvcyBhZGljaW9uYWxlcyBzb2JyZSBsYXMgZW1wcmVzYXMgLg0KDQotMzEuKipNYXJrZXRDYXBfVXBkYXRlZF9NKio6IChDdWFudGl0YXRpdmE6OnJhesOzbikuIFJlZ2lzdHJhIGxhIGNhcGl0YWxpemFjacOzbiBkZSBtZXJjYWRvIG8gY290aXphY2nDsm4gZW4gYm9sc2EgbWFzIGFjdHVhbGl6YWRhIGVuIG1pbGVzIGRlICBtaWxsb25lcyBkZSBkw7NsYXJlcyBkZSBjYWRhIGVtcHJlc2EgLg0KDQotMzIuKipVcGRhdGVkKio6IChDdWFsaXRhdGl2YTo6b3JkaW5hbCkuIFJlZ2lzdHJhIGxhIGZlY2hhIGVuIHF1ZSBzZSBhY3R1YWxpesOzIGxhIGluZm9ybWFjacOzbiBkZWwgY29uanVudG8gZGUgZGF0b3MgZW4gbGEgcGFnaW5hIGthZ2dsZSAuDQoNCioqUmVlc3RydWN0dXJhY2nDsm4gZGUgbG9zIGRhdG9zKioNCg0KU2UgaGFjZSB1bmEgY29tcGxlbWV0ZW50YWNpw7JuIGRlIHJlZ2lzdHJvcyB2YWNpb3MgKG9idGVuaWVuZG8gKSB5IHVuYSBkZXB1cmFjacOybiBkZSBsYXMgc2lndWllbnRlcyB2YXJpYWJsZXM6ICoqVGlja2VyLCBHcm93dGhfaW5fSm9icywgR2FpbmVkX2luX1JhbmssIG5ld2NvbWVyX3RvX3RoZV9mb3J0dW5lLCBEcm9wcGVkX2luX1JhbmssIE1hcmtldENhcF9NYXJjaDI4X00sIFJldmVudWVfUGVyY2VudF9DaGFuZ2UsIFByb2ZpdHNfUGVyY2VudF9DaGFuZ2UsIENFTywgQ291bnRyeSwgV2Vic2l0ZSwgVXBkYXRlZCoqLiANCg0KKip0ZW5pZW5kbyBlbiBjdWVudGFzIGxhcyBzaWd1aWVudGVzIHJhem9uZXM6KiogDQoNCi0gRXN0YXMgdmFyaWFibGVzIChAR3Jvd3RoX2luX0pvYnMsIEBHYWluZWRfaW5fUmFuaywgQG5ld2NvbWVyX3RvX3RoZV9mb3J0dW5lLCBARHJvcHBlZF9pbl9SYW5rLCBAQ0VPLCBAV2Vic2l0ZSwgQFVwZGF0ZWQpIG5vIHNlIHByZXZpc3VhbGl6YW4gcmVsZXZhbnRlcyBkZW50cm8gZGVsIGNvbmp1bnRvIGRlIGRhdG9zIHkgcG9zdGVyaW9ybWVudGUgbm8gYWZlY3RhIGVsIGFuYWxpc2lzIGZ1dHVybyBkZSBsb3MgZGF0b3MuDQoNCi0gTGFzIHZhcmlhYmxlcyAoQFJldmVudWVfUGVyY2VudF9DaGFuZ2UsIEBQcm9maXRzX1BlcmNlbnRfQ2hhbmdlKSBhbCBkZXBlbmRlciBkZSBvdHJhcyBubyBzZSBoYWNlbiBuZWNlc2FyaWFzIHkgbm8gYWZlY3RhbiBkZSBuaW5ndW5hIG1hbmVyYSB1biBhbmFsaXNpcyBmdXR1cm8gZGVsIGNvbmp1bnRvIGRlIGRhdG9zLg0KDQotIExhcyB2YXJpYWJsZXMgKEBUaWNrZXIsIEBNYXJrZXRDYXBfTWFyY2gyOF9NLCBAQ291bnRyeSApIHNvbiByZWR1bnRhbnRlcyBvL3Ugb2J2aWFzLCBubyBzb24gbmVjZXNhcmlhcyB5IHRhbXBvY28gYWZlY3RhIGVsIGFuYWxpc2lzIGRlIGRhdG9zLg0KDQoNCioqUXVlZGFuZG8gYWN0dWFsbWVudGUgbGFzIHNpZ3VpZW50ZXMgdmFyaWFibGVzOioqDQoNCi0xLioqUmFuayoqOiAoU2VyaWFsOjppZGVudGlmaWNhZG9yKS4gUmVwcmVzZW50YSBlbCByYW5nbyBvIHBvc2ljacOybiBkZSBsYSBjb21wYcOxw61hIGVuIGxhIGxpc3RhIGRlIEZvcnR1bmUgMTAwMCAuDQoNCi0yLioqQ29tcGFueSoqOiAoQ3VhbGl0YXRpdmE6Om5vbWluYWwpLiBSZXNnaXRyYSBsb3Mgbm9tYnJlcyBkZSBsYXMgY29tcGHDscOtYXMgcXVlIGhhY2VuIHBhcnRpY2lwZSBlbiBlc3RlIHJhbmtpbmcgLg0KDQotMy4qKlNlY3RvcioqOiAoQ3VhbGl0YXRpdmE6Om5vbWluYWwpLiBSZWdpc3RyYSBsYSBlbCBzZWN0b3IgYWwgY3VhbCBxdWUgcGVydGVuZWNlIGVsIGNhbXBvIGRlIGFjY2nDsm4gZGUgbGEgZW1wcmVzYSAuDQoNCi00LioqSW5kdXN0cnkqKjogKEN1YWxpdGF0aXZhOjpub21pbmFsKS4gUmVzZ2lzdHJhIGxhIGNhdGVnb3LDrWEgZXNwZWNpZmljYSBkZSBsYSBpbmR1c3RyaWEgbGEgcXVlIHBlcnRlbmVjZSBsYSBlbXByZXNhIC4NCg0KLTUuKipQcm9maXRhYmxlKio6IChDdWFsaXRhdGl2YTo6bm9taW5hbF9kaWNvdG9tw6xjYSkuIFJlc2dpc3RyYSBlbCBpbmRpY2Fkb3Igc2kgbGEgZW1wcmVzYSBlcyBvIG5vIHJlbnRhYmxlIGRlbnRybyBkZWwgbWVyY2FkbyBkZSBjb21wZXRpY2nDsm4gKHllcygxKS9ubygwKSkgLg0KDQotNi4qKkZvdW5kZXJfaXNfQ0VPKio6IChDdWFsaXRhdGl2YToubm9taW5hbF9kaWNvdG9tw6xjYSkuIFJlc2dpdHJhIGVsIGluZGljYWRvciBhY2VyY2EgZGUgcXVlIHNpIGVsIGZ1bmRhZG9yIGVzIGVsIENFTyAoeWVzKDEpL25vKDApKSAuDQoNCi03LioqRmVtYWxlQ0VPKio6IChDdWFsaXRhdGl2YTo6bm9taW5hbF9kaWNvdG9tw6xjYSkuIFJlZ2lzdHJhIGVsIEluZGljYWRvciBhY2VyY2EgZGUgcXVlIHNpIGVsIENFTyBlcyBtdWplciAoeWVzKDEpL25vKDApKSAuDQoNCi04LioqQ2hhbmdlX2luX1JhbmsqKjogKEN1YW50aXRhdGl2YTo6cmF6w7NuKS5SZWdpc3RyYSBsb3MgY2FtYmlvcyBlbiBlbCByYW5nbyBkZSBsYSBlbXByZXNhIHJlc3BlY3RvIGFsIGHDsW8gYW50ZXJpb3IgLg0KDQotOS4qKkdsb2JhbDUwMCoqOiAoQ3VhbGl0YXRpdmE6Om5vbWluYWxfZGljb3RvbcOsY2EpLiBSZWdpc3RyYSB1bmEgY29tcGFyYWNpw7JuIGVuIGxhIGN1YWwgaW5kaWNhIHNpIGxhIGVtcHJlc2EgdGFtYmnDqW4gYXBhcmVjZSBlbiBsYSBsaXN0YSBHbG9iYWwgNTAwICh5ZXMoMSkvbm8oMCkpIC4NCg0KLTEwLioqV29ybGRzX01vc3RfQWRtaXJlZF9Db21wYW5pZXMqKjogKEN1YWxpdGF0aXZhOjpub21pbmFsX2RpY290b23DrGNhKSkuUmVnaXN0cmEgb3RyYSBjb21wYXJhdGl2YSBsYSBjdWFsIGluZGljYSBzaSBsYSBlbXByZXNhIGVzdMOhIGVuIGxhIGxpc3RhIGRlIGxhcyBtw6FzIGFkbWlyYWRhcyBkZWwgbXVuZG8gKHllcygxKS9ubygwKSkgLg0KDQotMTEuKipCZXN0X0NvbXBhbmllc190b19Xb3JrX0ZvcioqOiAoQ3VhbGl0YXRpdmE6Om5vbWluYWxfZGljb3RvbcOsY2EpLiBSZWdpc3RyYSBvdHJhIGNvbXBhcmF0aXZhIGxhIGN1YWwgaW5kaWNhIHNpIGVzdMOhIGVuIGxhIGxpc3RhIGRlIG1lam9yZXMgZW1wcmVzYXMgcGFyYSB0cmFiYWphciAoeWVzKDEpL25vKDApKSAuDQoNCi0xMi4qKk51bWJlcl9vZl9lbXBsb3llZXMqKjogKEN1YW50aXRhdGl2YTo6cmF6w7NuKS4gUmVzZ2lzdHJhIG7Dum1lcm8gZGUgZW1wbGVhZG9zIGNvbiBsb3MgcXVlIGxzYSBlbXByZXNhcyBjdWVudGFuIGVuIGRpc3Bvc2ljacOybiAuDQoNCi0xMy4qKlJldmVudWVzX00qKjogKEN1YW50aXRhdGl2YTo6cmF6w7NuKS4gUmVnaXN0cmEgbG9zIGluZ3Jlc29zIGRlIGxhcyBlbXByZXNhcyBlbiBtaWxsb25lcyBkZSBkw7NsYXJlcyAuDQoNCi0xNC4qKlByb2ZpdHNfTSoqOiAoQ3VhbnRpdGF0aXZhOjpyYXrDs24pLlJlZ2lzdHJhIGxhcyBnYW5hbmNpYXMgZGUgbGFzIGVtcHJlc2FzIGVuIG1pbGxvbmVzIGRlIGTDs2xhcmVzLg0KDQotMTUuKipBc3NldHNfTSoqOiAoQ3VhbnRpdGF0aXZhOjpyYXrDs24pLiBSZWdpc3RyYSBsb3MgYWN0aXZvcyByZXNwZWN0aXZvcyBkZSBsYXMgZW1wcmVzYXMgZW4gbWlsbG9uZXMgZGUgZMOzbGFyZXMuDQoNCi0xNi4qKkhlYWRxdWFydGVyc0NpdHkqKjogKEN1YWxpdGF0aXZhOjpub21pbmFsKS4gUmVnaXN0cmEgbGEgY2l1ZGFkIGRvbmRlIHNlIGVuY3VlbnRyYW4gdWJpY2FkYXMgbGFzIG9maWNpbmFzIGNlbnRyYWxlcyBkZSBsYXMgZW1wcmVzYXMgLg0KDQotMTcuKipIZWFkcXVhcnRlcnNTdGF0ZSoqOiAoQ3VhbGl0YXRpdmE6Om5vbWluYWwpLiBSZWdpc3RyYSBlbCBlc3RhZG8gZG9uZGUgc2UgZW5jdWVudHJhbiB1YmljYWRhcyBsYXMgb2ZpY2luYXMgY2VudHJhbGVzIGRlIGxhcyBjb21wYcOxaWEuDQoNCi0xOC4qKkNvbXBhbnlUeXBlKio6IChDdWFsaXRhdGl2YTo6bm9taW5hbF9kaWNvdG/DrGNhKS5SZWdpc3RyYSBlbCB0aXBvIGRlIGNvbXBhw7HDrWEgc2kgcGVydGVuZWNlIGFsIHNlY3RvciBwdWJsaWNvIG8gcHJpdmFkbyAocMO6YmxpY2EgKDEpLCBwcml2YWRhKDApKSAuDQoNCi0xOS4qKkZvb3Rub3RlKio6IChDdWFsaXRhdGl2YTo6bm9taW5hbCkuIFJlZ2lzdHJhIG5vdGFzIG8gY29tZW50YXJpb3MgYWRpY2lvbmFsZXMgc29icmUgbGFzIGVtcHJlc2FzIC4NCg0KLTIwLioqTWFya2V0Q2FwX1VwZGF0ZWRfTSoqOiAoQ3VhbnRpdGF0aXZhOjpyYXrDs24pLiBSZWdpc3RyYSBsYSBjYXBpdGFsaXphY2nDs24gZGUgbWVyY2FkbyBvIGNvdGl6YWNpw7JuIGVuIGJvbHNhIGFjdHVhbGl6YWRhIGVuIG1pbGxvbmVzIGRlIGTDs2xhcmVzIGRlIGNhZGEgZW1wcmVzYSwgY29tcGHDsWlhcyBxdWUgbm8gY290aXphbiBlbiBib2xzYSBzdSB2YWxvciBlcyBkZSAwLg0KDQoNCg0KDQojIyMjIEVzdHJ1Y3R1cmEgZGVsIGNvbmp1bnRvIGRlIGRhdG9zIGluaWNpYWwNCmBgYHtyIEVzdHJ1Y3R1cmFfY29uanVudG9fZGVfZGF0b3NfaW5pY2lhbCwgZmlnLmFsaWduPSdjZW50ZXInfQ0Kc3RyKGNkZF9yYW5raW5nX2ZvcnR1bmVfRzkpIA0KDQpgYGANCg0KIyMjIyBDb25qdW50byBkZSBkYXRvcyBvcmlnaW5hbA0KYGBge3IgQ29uanVudG9fZGVfZGF0b3Nfb3JpZ2luYWwsIGZpZy5hbGlnbj0nY2VudGVyJ30NCmNkZF9yYW5raW5nX2ZvcnR1bmVfRzkNCg0KYGBgDQoNCiMjIyMgRXN0cnVjdHVyYSBkZWwgY29uanVudG8gZGUgZGF0b3MgcmVlc2NyaXRvDQpgYGB7ciBDb25qdW50b19kZV9kYXRvc19kZXB1cmFkbywgZmlnLmFsaWduPSdjZW50ZXInfQ0Kc3RyKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvKQ0KDQpgYGANCg0KIyMjIyBDb25qdW50byBkZSBkYXRvcyByZWVzY3JpdG9zDQpgYGB7ciBDb25qdW50b19kZV9kYXRvc19yZWVzY3JpdG8sIGZpZy5hbGlnbj0nY2VudGVyJ30NCmNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvDQoNCmBgYA0KDQoNCiMjIyAxLjMuIEVzdGltYWNpb25lcyBtdWx0aXZhcmlhZGFzIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCkxhcyBlc3RpbWFjaW9uZXMgbXVsdGl2YXJpYWRhcyBlbiBlc3RlIGVzdHVkaW8gcGVybWl0ZW4gYW5hbGl6YXIgZWwgY29tcG9ydGFtaWVudG8gY29uanVudG8gZGUgbGFzIHZhcmlhYmxlcyBlbXByZXNhcmlhbGVzLCBmYWNpbGl0YW5kbyB1bmEgbWVqb3IgY29tcHJlbnNpw7NuIGRlIGPDs21vIGxvcyBmYWN0b3JlcyBjbGF2ZSBjb21vIGluZ3Jlc29zLCBnYW5hbmNpYXMsIGFjdGl2b3MgeSBuw7ptZXJvIGRlIGVtcGxlYWRvcyBpbnRlcmFjdMO6YW4gZW50cmUgc8OtIHBhcmEgaW5mbHVpciBlbiBlbCByZW5kaW1pZW50byBlbXByZXNhcmlhbCB5IHN1IHBvc2ljacOzbiBlbiBlbCByYW5raW5nIEZvcnR1bmUgMTAwMC4gDQoNCkVzdGUgYW7DoWxpc2lzIG11bHRpdmFyaWFkbyBzZSBiYXNhIGVuIHZlY3RvcmVzIHkgbWF0cmljZXMgcXVlIGNhcHR1cmFuIGFzcGVjdG9zIGZ1bmRhbWVudGFsZXMgZGUgbGFzIGVtcHJlc2FzLCB0YWxlcyBjb21vIHN1cyBwcm9tZWRpb3MsIHZhcmlhYmlsaWRhZCB5IGxhcyBjb3JyZWxhY2lvbmVzIGVudHJlIGVzdGFzIG3DqXRyaWNhcyBlbXByZXNhcmlhbGVzLg0KDQpFbCB2ZWN0b3IgZGUgbWVkaWFzIGVuIGVzdGUgYW7DoWxpc2lzIG11ZXN0cmEgZWwgdmFsb3IgcHJvbWVkaW8gZXNwZXJhZG8gZGUgY2FkYSBtw6l0cmljYSBlbXByZXNhcmlhbCwgb2ZyZWNpZW5kbyB1biBwYW5vcmFtYSBnZW5lcmFsIHNvYnJlIGVsIGRlc2VtcGXDsW8gcHJvbWVkaW8gZGUgbGFzIGNvbXBhw7HDrWFzIGRlIGxhcyBsaXN0YS4gUG9yIG90cm8gbGFkbywgbGEgbWF0cml6IGRlIHZhcmlhbnphcyB5IGNvdmFyaWFuemFzIHJldmVsYSB1bmEgcGVyc3BlY3RpdmEgZGV0YWxsYWRhIHNvYnJlIGxhIGRpc3BlcnNpw7NuIHkgbGFzIHJlbGFjaW9uZXMgZW50cmUgbGFzIG3DqXRyaWNhcyBmaW5hbmNpZXJhcyB5IG9wZXJhdGl2YXMgZGUgbGFzIGVtcHJlc2FzLiANCg0KIyMjIDEuNC4gUGxhbnRlYW1pZW50byB5IERlc2Fycm9sbG8gey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KQ29uIGJhc2UgZW4gbGFzIHBlc3Rhw7FhcyAqVmVjdG9yIGRlIE1lZGlhcyB5IEJveHBsb3RzKiwgc2Ugb2JzZXJ2YSBxdWUgbG9zIGRhdG9zIHJlZ2lzdHJhZG9zIHRpZW5kZW4gYSBhZ3J1cGFyc2UgZW4gbGEgcGFydGUgaW5mZXJpb3IgZGVsIHJhbmdvLiBFc3RvIHNlIGRlYmUgYSBsYSBwcmVzZW5jaWEgZGUgb2JzZXJ2YWNpb25lcyBhdMOtcGljYXMgcXVlIGFtcGzDrWFuIGVsIHJhbmdvIHkgYWZlY3RhbiBsYSBub3JtYWxpZGFkIGRlIGxhIGRpc3RyaWJ1Y2nDs24sIGdlbmVyYW5kbyBzZXNnb3MuIEVzdGUgZmVuw7NtZW5vIG9jdXJyZSBwb3JxdWUgZGVudHJvIGRlbCByYW5raW5nIGV4aXN0ZW4gZW1wcmVzYXMgY29uIHVuIHBvZGVyIHNpZ25pZmljYXRpdmFtZW50ZSBzdXBlcmlvciBhbCByZXN0bywgbG8gcXVlIGdlbmVyYSB2YWxvcmVzIG11eSBkaXNwZXJzb3MuIEVzdGFzIHZhcmlhY2lvbmVzIGRyw6FzdGljYXMgcmVmbGVqYW4gbGFzIGRpZmVyZW5jaWFzIGVudHJlIHBlcXVlw7FhcyB5IGdyYW5kZXMgZW1wcmVzYXMsIGRlcGVuZGllbmRvIGRlIHN1IHBvc2ljacOzbiBlbiBlbCByYW5raW5nIEZvcnR1bmUuDQoNCkxhcyB2YXJpYWJsZXMgKG7Dum1lcm8gZGUgZW1wbGVhZG9zIEBOdW1iZXJfb2ZfZW1wbG95ZWVzLCBpbmdyZXNvcyBAUmV2ZW51ZXNfTSwgZ2FuYW5jaWFzIEBQcm9maXRzX00sIGFjdGl2b3MgQEFzc2V0c19NIHkgY2FwaXRhbGl6YWNpw7NuIGRlIG1lcmNhZG8gQE1hcmtldENhcF9VcGRhdGVkX00pIG5vIHByZXNlbnRhbiB1bmEgZGlzdHJpYnVjacOzbiBub3JtYWwuIENvbW8gc2UgbWVuY2lvbsOzIGFudGVyaW9ybWVudGUsIGV4aXN0ZSB1bmEgY29uY2VudHJhY2nDs24gZGUgdmFsb3JlcyBlbiBsb3MgZXh0cmVtb3MgaW5mZXJpb3JlcywgZXhpc3RpZW5kbyB2YWxvcmVzIGFsdG9zIGV4eHRlbmRpZW5kbyBsYSBjb2xhIGxvIHF1ZSBnZW5lcmEgdW4gc2VzZ28gaGFjaWEgbGEgZGVyZWNoYSwgc2llbmRvIGVzdG8gbm9ybWFsIGVuIGVzdGUgY29udGV4dG8gcG9yIGxhcyByYXpvbmVzIGFudGVyaW9yZXMuDQoNCkNvbiBiYXNlIGVuIGxhIG1hdHJpeiBkZSAqdmFyaWFuemEtY292YXJpYW56YSosIHBvZGVtb3MgaW50ZXJwcmV0YXIgbG8gc2lndWllbnRlOg0KDQpWYXJpYW56YXMgKGRpYWdvbmFsIHByaW5jaXBhbCk6DQpMYSB2YXJpYW56YSBkZSBjYWRhIHZhcmlhYmxlIHJlcHJlc2VudGEgbGEgZGlzcGVyc2nDs24gZGUgbG9zIGRhdG9zIHJlc3BlY3RvIGEgc3UgbWVkaWEuIExvcyB2YWxvcmVzIG9ic2VydmFkb3MgaW5kaWNhbjoNCg0KTnVtYmVyX29mX2VtcGxveWVlcyAoOS45OGUrMDgpOiBSZWZsZWphIGxhIHZhcmlhYmlsaWRhZCBlbiBlbCBuw7ptZXJvIGRlIGVtcGxlYWRvcyBlbnRyZSBsYXMgZW1wcmVzYXMuDQpSZXZlbnVlc19NICgzLjUzZSsxMCk6IE11ZXN0cmEgbGEgZGlzcGVyc2nDs24gZGUgbG9zIGluZ3Jlc29zIChlbiBtaWxsb25lcyksIGluZGljYW5kbyB1bmEgZ3JhbiBkaWZlcmVuY2lhIGVudHJlIGVtcHJlc2FzLg0KUHJvZml0c19NICgyLjI1ZSswNyk6IFJlcHJlc2VudGEgbGEgdmFyaWFiaWxpZGFkIGVuIGxhcyBnYW5hbmNpYXMsIG1vc3RyYW5kbyBjw7NtbyBmbHVjdMO6YW4gbG9zIGJlbmVmaWNpb3MgZW50cmUgZW1wcmVzYXMuDQpBc3NldHNfTSAoNC44M2UrMTApOiBJbmRpY2EgbGEgZGlzcGVyc2nDs24gZW4gZWwgdG90YWwgZGUgYWN0aXZvcywgbG8gcXVlIGV2aWRlbmNpYSBsYSBkaXZlcnNpZGFkIGVuIGxvcyByZWN1cnNvcyBmaW5hbmNpZXJvcyBkZSBsYXMgZW1wcmVzYXMuDQpNYXJrZXRDYXBfVXBkYXRlZF9NICg3LjM5ZSsxMik6IFJlZmxlamEgdW5hIGdyYW4gdmFyaWFiaWxpZGFkIGVuIGxhIGNhcGl0YWxpemFjacOzbiBkZSBtZXJjYWRvLCBsbyBxdWUgZXMgZXNwZXJhYmxlIGRlYmlkbyBhIGxhIGFtcGxpYSBkaWZlcmVuY2lhIGVuIGxvcyB2YWxvcmVzIGRlIG1lcmNhZG8gZW50cmUgZW1wcmVzYXMuDQoNCkVuIGdlbmVyYWwsIG1pZW50cmFzIG1heW9yIHNlYSBlbCB2YWxvciBkZSBsYSB2YXJpYW56YSwgbcOhcyBkaXNwZXJzYSBlcyBsYSB2YXJpYWJsZSBlbiBsb3MgZGF0b3MuDQoNCipDb3ZhcmlhbnphcyogKHJlbGFjacOybiBlbnRyZSB2YXJpYWJsZXMpOg0KDQoqTsO6bWVybyBkZSBlbXBsZWFkb3MgdnMgSW5ncmVzb3MgKDMuMzVlKzA5KSo6IFJlbGFjacOzbiBwb3NpdGl2YSBmdWVydGUuIExhcyBlbXByZXNhcyBjb24gbcOhcyBlbXBsZWFkb3MgdGllbmRlbiBhIGdlbmVyYXIgbWF5b3JlcyBpbmdyZXNvcy4NCg0KKkluZ3Jlc29zIChSZXZlbnVlc19NKSB2cyBHYW5hbmNpYXMgKFByb2ZpdHNfTSkgKigyLjEyZSswNyk6IFJlbGFjacOzbiBwb3NpdGl2YSBtb2RlcmFkYS4gRW1wcmVzYXMgY29uIG1heW9yZXMgaW5ncmVzb3Mgc3VlbGVuIHRlbmVyIG1heW9yZXMgZ2FuYW5jaWFzLCBhdW5xdWUgY29uIHZhcmlhYmlsaWRhZCBlbiBsb3MgbcOhcmdlbmVzIGRlIGJlbmVmaWNpby4NCg0KKkdhbmFuY2lhcyAoUHJvZml0c19NKSB2cyBBY3Rpdm9zIChBc3NldHNfTSkgKDcuMTRlKzA5KSo6IFJlbGFjacOzbiBwb3NpdGl2YSBtb2RlcmFkYS4gRW1wcmVzYXMgY29uIG3DoXMgYWN0aXZvcyBzdWVsZW4gZ2VuZXJhciBtYXlvcmVzIGdhbmFuY2lhcy4NCg0KKkFjdGl2b3MgKEFzc2V0c19NKSB2cyBNYXJrZXRDYXBfVXBkYXRlZF9NICg1LjAzZSsxMikqOiBSZWxhY2nDs24gcG9zaXRpdmEgZnVlcnRlLiBFbXByZXNhcyBjb24gbcOhcyBhY3Rpdm9zIHRpZW5kZW4gYSBlc3RhciBtZWpvciB2YWxvcmFkYXMgZW4gZWwgbWVyY2Fkby4NCg0KRW4gY29uY2x1c2nDs24sIGxhcyByZWxhY2lvbmVzIHBvc2l0aXZhcyBvYnNlcnZhZGFzIHJlZmxlamFuIHF1ZSBsYXMgdmFyaWFibGVzIGVzdMOhbiBmdWVydGVtZW50ZSBhc29jaWFkYXMgZW50cmUgc8OtLCBsbyBjdWFsIGVzIGNvbnNpc3RlbnRlIGNvbiBlbCBjb21wb3J0YW1pZW50byBxdWUgcHJlc2VudGFiYSBlbiBsYXMgcGVzdGHDsWFzICpWZWN0b3IgZGUgTWVkaWFzIHkgQm94cGxvdHMqLg0KDQpDb24gYmFzZSBlbiBsYSBtYXRyaXogZGUgY29ycmVsYWNpb25lcywgc2Ugb2JzZXJ2YSBxdWUgbGFzIHJlbGFjaW9uZXMgZW50cmUgbGFzIHZhcmlhYmxlcyBjdWFudGl0YXRpdmFzIGFuYWxpemFkYXMgcHJlc2VudGFuIGRpc3RpbnRvcyBncmFkb3MgZGUgYXNvY2lhY2nDs24gbGluZWFsLCBkZXNkZSByZWxhY2lvbmVzIGTDqWJpbGVzIGhhc3RhIG1vZGVyYWRhbWVudGUgZnVlcnRlcy4gQSBjb250aW51YWNpw7NuLCBzZSBhbmFsaXphbiBsb3MgcHJpbmNpcGFsZXMgY29lZmljaWVudGVzIGRlIGNvcnJlbGFjacOzbjoNCg0KKk7Dum1lcm8gZGUgZW1wbGVhZG9zIHkgSW5ncmVzb3MoUmV2ZW51ZXNfTSkgKDAuNzI4KSo6DQpFeGlzdGUgdW5hIGNvcnJlbGFjacOzbiBwb3NpdGl2YSBtb2RlcmFkYS1hbHRhLCBsbyBxdWUgaW5kaWNhIHF1ZSBsYXMgZW1wcmVzYXMgY29uIG3DoXMgZW1wbGVhZG9zIHRpZW5kZW4gYSBnZW5lcmFyIG1heW9yZXMgaW5ncmVzb3MuIEVzdGEgcmVsYWNpw7NuIGVzIGNvbnNpc3RlbnRlIGNvbiBlbCBoZWNobyBkZSBxdWUgZW1wcmVzYXMgbcOhcyBncmFuZGVzIHN1ZWxlbiB0ZW5lciBvcGVyYWNpb25lcyBtw6FzIGV4dGVuc2FzLg0KDQoqSW5ncmVzb3MoUmV2ZW51ZXNfTSkgeSBnYW5hbmNpYXMoUHJvZml0c19NKSogKDAuNjU4KToNClJlbGFjacOzbiBwb3NpdGl2YSBtb2RlcmFkYS4gRW1wcmVzYXMgY29uIG1heW9yZXMgaW5ncmVzb3Mgc3VlbGVuIHRlbmVyIG1heW9yZXMgZ2FuYW5jaWFzLg0KDQoqZ2FuYW5jaWFzKFByb2ZpdHNfTSkgeSBjYXBpdGFsaXphY2nDsm4gZGUgbWVyY2FkbyhNYXJrZXRDYXBfVXBkYXRlZF9NKSooMC44MDgpOg0KRXN0YSBlcyBsYSBjb3JyZWxhY2nDs24gbcOhcyBhbHRhIGRlIGxhIG1hdHJpeiwgbG8gcXVlIHJlZmxlamEgcXVlIGxhcyBnYW5hbmNpYXMgZXN0w6FuIGVzdHJlY2hhbWVudGUgcmVsYWNpb25hZGFzIGNvbiBsYSB2YWxvcmFjacOzbiBkZSBtZXJjYWRvLiBMYXMgZW1wcmVzYXMgbcOhcyByZW50YWJsZXMgdGllbmRlbiBhIHNlciBtw6FzIHZhbG9yYWRhcyBwb3IgbG9zIGludmVyc29yZXMuDQoNCiphY3Rpdm9zKEFzc2V0c19NKSB5IE1hcmtldENhcF9VcGRhdGVkX00gKDAuMTcwKSo6DQpSZWxhY2nDs24gcG9zaXRpdmEgZMOpYmlsLiBBIHBlc2FyIGRlIHF1ZSBsb3MgYWN0aXZvcyBjb250cmlidXllbiBhbCB2YWxvciBkZSB1bmEgZW1wcmVzYSwgbGEgYmFqYSBjb3JyZWxhY2nDs24gc3VnaWVyZSBxdWUgb3Ryb3MgZmFjdG9yZXMsIGNvbW8gaW5ncmVzb3MgbyBnYW5hbmNpYXMsIHRpZW5lbiBtYXlvciBwZXNvIGVuIGxhIGNhcGl0YWxpemFjacOzbiBkZSBtZXJjYWRvLg0KDQoqTsO6bWVybyBkZSBlbXBsZWFkb3MgeSAoZ2FuYW5jaWFzKVByb2ZpdHNfTSAqICgwLjMzOSk6DQpSZWxhY2nDs24gcG9zaXRpdmEgZMOpYmlsLiBFc3RvIGluZGljYSBxdWUgdW4gbWF5b3IgbsO6bWVybyBkZSBlbXBsZWFkb3Mgbm8gbmVjZXNhcmlhbWVudGUgc2UgdHJhZHVjZSBlbiBtYXlvcmVzIGdhbmFuY2lhcywgcHJvYmFibGVtZW50ZSBkZWJpZG8gYSBkaWZlcmVuY2lhcyBlbiBsYSBlZmljaWVuY2lhIG9wZXJhdGl2YSBvIGVuIGVsIG1vZGVsbyBkZSBuZWdvY2lvIGRlIGxhcyBlbXByZXNhcy4NCg0KKmFjdGl2b3MoQXNzZXRzX00pIHkgSW5ncmVzb3MoUmV2ZW51ZXNfTSkqICgwLjM4MSk6DQpSZWxhY2nDs24gcG9zaXRpdmEgZMOpYmlsLW1vZGVyYWRhLiBFbXByZXNhcyBjb24gbWF5b3JlcyBpbmdyZXNvcyBzdWVsZW4gdGVuZXIgbcOhcyBhY3Rpdm9zLCBhdW5xdWUgbGEgcmVsYWNpw7NuIG5vIGVzIHRhbiBmdWVydGUuDQoNCg0KDQojIyMjIFZlY3RvciBkZSBtZWRpYXMgeSBCbG94cGxvdHMgDQpgYGB7ciBWZWN0b3JfZGVfbWVkaWFzX3lfQmxveHBsb3RzICwgZmlnLmFsaWduPSdjZW50ZXInfQ0KYXBwbHkoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG9bLCAtYygxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxNiwxNywxOCwxOSldLCAyLCBtZWFuKQ0KY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG9fcmVkdWNpZG8gPSBjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0b1ssLWMoMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTYsMTcsMTgsMTkpXQ0Kbm9tYnJlc19ib3hwbG90cyA8LSBjKCJOdW1iZXIgb2YgZW1wbG95ZWVzIiwgIlJldmVudWVzIE0iLCAiUHJvZml0cyIsICJBc3NldHMgTSIsICJNYXJrZXRDYXAgVXBkYXRlZCBNIikNCnBhcihtZnJvdyA9IGMoMSwgbmNvbChjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0b19yZWR1Y2lkbykpKQ0KaW52aXNpYmxlKGxhcHBseSgxOm5jb2woY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG9fcmVkdWNpZG8pLCBmdW5jdGlvbihpKSB7Ym94cGxvdChjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0b19yZWR1Y2lkb1ssIGldLCBtYWluID0gbm9tYnJlc19ib3hwbG90c1tpXSl9KSkNCmBgYA0KDQoNCg0KIyMjIyBNYXRyaXogZGUgdmFyaWFuemEtY292YXJpYW5jaWENCmBgYHtyIE1hdHJpel9kZV92YXJpYW56YV9jb3ZhcmlhbmNpYSAsIGZpZy5hbGlnbj0nY2VudGVyJ30NCnJvdW5kKGNvdihjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0b1ssIC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDE2LDE3LDE4LDE5KV0pLCAyKQ0KDQpgYGANCg0KDQojIyMjIE1hdHJpeiBkZSBjb3JyZWxhY2lvbmVzDQpgYGB7ciBNYXRyaXpfZGVfY29ycmVsYWNpb25lcyAsIGZpZy5hbGlnbj0nY2VudGVyJ30NCnJvdW5kKGNvcihjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0b1ssIC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDE2LDE3LDE4LDE5KV0pLCAzKQ0KYGBgDQoNCg0KDQojIyMgMS41LiBHcsOhZmljYXMgbXVsdGl2YXJpYWRhc3sudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCkxhcyBncsOhZmljYXMgbXVsdGl2YXJpYWRhcyBwZXJtaXRlbiB1bmEgcmVwcmVzZW50YWNpw7NuIHZpc3VhbCBkZWwgY29tcG9ydGFtaWVudG8gY29uanVudG8gZGUgbGFzIHZhcmlhYmxlcyBlbXByZXNhcmlhbGVzLCBsbyBjdWFsIGVzIGVzZW5jaWFsIHBhcmEgZGV0ZWN0YXIgcGF0cm9uZXMsIHJlbGFjaW9uZXMgeSBwb3NpYmxlcyBhZ3J1cGFjaW9uZXMgZGVudHJvIGRlbCBjb25qdW50byBkZSBkYXRvcyBkZWwgUmFua2luZyBGb3J0dW5lIDEwMDAuIEEgdHJhdsOpcyBkZSB0w6ljbmljYXMgY29tbyBlbCBhbsOhbGlzaXMgZGUgY29tcG9uZW50ZXMgcHJpbmNpcGFsZXMgKFBDQSkgeSBsb3MgZ3LDoWZpY29zIGRlIGNvcnJlbGFjacOzbiwgcG9kZW1vcyBvYnNlcnZhciBjw7NtbyBzZSBkaXN0cmlidXllbiBsYXMgZW1wcmVzYXMgZW4gZnVuY2nDs24gZGUgc3VzIHByaW5jaXBhbGVzIGNhcmFjdGVyw61zdGljYXMsIGNvbW8gaW5ncmVzb3MsIGFjdGl2b3MgeSBuw7ptZXJvIGRlIGVtcGxlYWRvcy4NCg0KDQpMYXMgZ3LDoWZpY2FzIG11bHRpdmFyaWFkYXMgaGFuIHNpZG8gZnVuZGFtZW50YWxlcyBwYXJhIGVudGVuZGVyIGxhcyBkaW7DoW1pY2FzIGVudHJlIGxhcyB2YXJpYWJsZXMgZW1wcmVzYXJpYWxlcyBjbGF2ZS4gTGEgY2FwYWNpZGFkIGRlIHZpc3VhbGl6YXIgbGFzIHJlbGFjaW9uZXMgZW50cmUgZXN0YXMgbcOpdHJpY2FzIG5vcyBwZXJtaXRlIGlkZW50aWZpY2FyIGdydXBvcyBkZSBlbXByZXNhcyBjb24gY2FyYWN0ZXLDrXN0aWNhcyBzaW1pbGFyZXMgeSBzdSByZW5kaW1pZW50byBlbiBlbCBtZXJjYWRvLiBFc3RlIHRpcG8gZGUgdmlzdWFsaXphY2nDs24gZXMgdW5hIGhlcnJhbWllbnRhIHBvZGVyb3NhIHBhcmEgbGEgdG9tYSBkZSBkZWNpc2lvbmVzIGVtcHJlc2FyaWFsZXMsIHlhIHF1ZSByZXNhbHRhIGxhcyDDoXJlYXMgZG9uZGUgbGFzIGVtcHJlc2FzIHB1ZWRlbiBtZWpvcmFyIHN1IGNvbXBldGl0aXZpZGFkLg0KDQpFbiBlbCAqZGlhZ3JhbWEgZGUgZGlzcGVyc2nDs24gZGUgZGlzdHJpYnVjacOzbiB5IGNvcnJlbGFjacOzbiogc2UgZGVzdGFjYW4gbGFzIHJlbGFjaW9uZXMgbcOhcyBzaWduaWZpY2F0aXZhcyBlbnRyZSBsYXMgdmFyaWFibGVzIGFuYWxpemFkYXMuIExhIHZhcmlhYmxlIChAUHJvZml0cykgbXVlc3RyYSB1bmEgZnVlcnRlIGluZmx1ZW5jaWEgc29icmUgKEBNYXJrZXRDYXBfVXBkYXRlZF9NKSwgY29uIHVuYSBjb3JyZWxhY2nDs24gZGUgMC44MDgsIHNpZW5kbyBlc3RhIGxhIHJlbGFjacOzbiBtw6FzIGFsdGEgb2JzZXJ2YWRhIGVudHJlIHRvZGFzIGxhcyB2YXJpYWJsZXMuIEVzdG8gc3VnaWVyZSBxdWUgbGFzIGVtcHJlc2FzIG3DoXMgcmVudGFibGVzIHN1ZWxlbiB0ZW5lciB1bmEgbWF5b3IgdmFsb3JhY2nDs24gZGUgbWVyY2Fkby4NCg0KQXNpbWlzbW8sIHNlIG9ic2VydmEgdW5hIGNvcnJlbGFjacOzbiBhbHRhIGVudHJlIChATnVtYmVyX29mX2VtcGxveWVlcykgeSAoQFJldmVudWVzX00pLCBjb24gdW4gY29lZmljaWVudGUgZGUgMC43MjguIEVzdG8gaW5kaWNhIHF1ZSBsYXMgZW1wcmVzYXMgY29uIHVuIG1heW9yIG7Dum1lcm8gZGUgZW1wbGVhZG9zIHRpZW5kZW4gYSBnZW5lcmFyIG3DoXMgaW5ncmVzb3MsIGxvIHF1ZSByZXNhbHRhIGxhIGltcG9ydGFuY2lhIGRlIGxhIGZ1ZXJ6YSBsYWJvcmFsIGVuIGxhIGNhcGFjaWRhZCBwcm9kdWN0aXZhIGRlIGxhcyBjb21wYcOxw61hcy4NCg0KUG9yIG90cm8gbGFkbywgbGEgcmVsYWNpw7NuIGVudHJlIChAUHJvZml0cykgeSAoQFJldmVudWVzX00pLCBjb24gdW5hIGNvcnJlbGFjacOzbiBkZSAwLjY1OCwgbXVlc3RyYSBxdWUgbWF5b3JlcyBpbmdyZXNvcyB0aWVuZGVuIGEgZXN0YXIgYXNvY2lhZG9zIGNvbiBtYXlvcmVzIGdhbmFuY2lhcywgYXVucXVlIG90cm9zIGZhY3RvcmVzIChjb21vIGxvcyBjb3N0b3Mgb3BlcmF0aXZvcykgdGFtYmnDqW4gaW5mbHV5ZW4uDQoNCkVuIGdlbmVyYWwsIGVzdGFzIGNvcnJlbGFjaW9uZXMgcmVmbGVqYW4gcXVlLCBzaSBiaWVuIHVuIG1heW9yIG7Dum1lcm8gZGUgZW1wbGVhZG9zIHB1ZWRlIGltcHVsc2FyIGxvcyBpbmdyZXNvcyBkZSB1bmEgZW1wcmVzYSwgbm8gbmVjZXNhcmlhbWVudGUgZ2FyYW50aXphIG1heW9yZXMgZ2FuYW5jaWFzLg0KDQpDdWFuZG8gc2Ugb2JzZXJ2YSBlbCAqRGlhZ3JhbWEgQ29uanVudG8gZGUgRGlzcGVyc2nDs24sIERpc3RyaWJ1Y2nDs24geSBDb3JyZWxhY2lvbmVzIFtQcm9maXRhYmxlXSosIHNlIHB1ZWRlIGFwcmVjaWFyIHF1ZSBsYXMgcmVsYWNpb25lcyBlbnRyZSBsYXMgdmFyaWFibGVzIGN1YW50aXRhdGl2YXMgYW5hbGl6YWRhcyByZWZsZWphbiBwYXRyb25lcyBzaWduaWZpY2F0aXZvcywgYXVucXVlIGNvbiBkaWZlcmVuY2lhcyBlbiBzdSBpbnRlbnNpZGFkLiBDb21wYXJhdGl2YW1lbnRlLCBsYSB2YXJpYWJsZSBQcm9maXRhYmxlIChSZW50YWJsZSBvIE5vIFJlbnRhYmxlKSBubyBwYXJlY2Ugc2VyIHVuIGZhY3RvciBkZXRlcm1pbmFudGUgcXVlIGV4cGxpcXVlIGxhIHZhcmlhYmlsaWRhZCBlbiBpbmdyZXNvcywgZ2FuYW5jaWFzIG8gYWN0aXZvcyBkZSBsYXMgZW1wcmVzYXMuIFNpbiBlbWJhcmdvLCBzZSBpZGVudGlmaWNhbiBjb3JyZWxhY2lvbmVzIHJlbGV2YW50ZXMgZW50cmUgdmFyaWFibGVzIGZpbmFuY2llcmFzIGNsYXZlLCBjb21vIGxhIGZ1ZXJ0ZSByZWxhY2nDs24gZW50cmUgUmV2ZW51ZXNfTSB5IE51bWJlcl9vZl9lbXBsb3llZXMgKENvcnI6IDAuODM3KSwgYXPDrSBjb21vIGVudHJlIFByb2ZpdHNfTSB5IE1hcmtldENhcF9VcGRhdGVkX00gKENvcnI6IDAuNDI3KS4gRXN0YXMgcmVsYWNpb25lcyBkZXN0YWNhbiBxdWUgZmFjdG9yZXMgb3BlcmF0aXZvcyB5IGZpbmFuY2llcm9zIGVzcGVjw61maWNvcyB0aWVuZW4gdW4gaW1wYWN0byBkaXJlY3RvIGVuIGVsIGRlc2VtcGXDsW8gZ2xvYmFsIGRlIGxhcyBlbXByZXNhcywgYXVucXVlIG5vIG5lY2VzYXJpYW1lbnRlIGVzdMOhbiBkZXRlcm1pbmFkb3MgcG9yIHN1IGNsYXNpZmljYWNpw7NuIGNvbW8gcmVudGFibGVzIG8gbm8gcmVudGFibGVzLiBwb3Igb3RybyBsYWRkbyBsb3MgdmFsb3JlcyBiYWpvcyBvIGNlcmNhbm9zIGEgY2VybyAoZWouIGNvcnJlbGFjacOzbiBjb24gTWFya2V0Q2FwX1VwZGF0ZWRfTTogLTAuMDI3KSBzdWdpZXJlbiBxdWUgbG9zIGFjdGl2b3Mgbm8gZXN0w6FuIGZ1ZXJ0ZW1lbnRlIHJlbGFjaW9uYWRvcyBkZSBtYW5lcmEgbGluZWFsIGNvbiBsYXMgb3RyYXMgdmFyaWFibGVzLCBsbyBxdWUgcHVlZGUgZGViZXJzZSBhIHF1ZSBsb3MgYWN0aXZvcyBlc3TDoW4gZGl2ZXJzaWZpY2Fkb3MgbyBubyBkaXJlY3RhbWVudGUgdmluY3VsYWRvcyBhIGxvcyBpbmdyZXNvcyB5IGdhbmFuY2lhcy4NCkVuIGdlbmVyYWwsIGxhIGNhdGVnb3JpemFjacOzbiBwb3IgUHJvZml0YWJsZSBtdWVzdHJhIHVuYSBpbmZsdWVuY2lhIGxpbWl0YWRhIGZyZW50ZSBhIGxhIGNvbXBsZWppZGFkIGRlIGxhcyBkaW7DoW1pY2FzIGZpbmFuY2llcmFzIHkgb3BlcmF0aXZhcyByZXByZXNlbnRhZGFzIGVuIGVsIGNvbmp1bnRvIGRlIGRhdG9zLg0KDQpFbiAqZWwgZGlhZ3JhbWEgZGUgRXN0cmVsbGFzKiB5IGVuIGVsICpkaWFncmFtYSBkZSBsYXMgQ2FyYXMgZGUgQ2hlcm5vZmYqIHNlIHB1ZWRlIGNvbmNsdWlyIGRlIGlndWFsIG1hbmVyYSwgbGEgdmlzdWFsaXphY2nDs24gZGUgbG9zIGRhdG9zIG5vIG11ZXN0cmEgdW5hIGNsYXJhIGFncnVwYWNpw7NuIGVudHJlIGxhcyBlbXByZXNhcyBzZWfDum4gc3VzIGNhcmFjdGVyw61zdGljYXMgZmluYW5jaWVyYXMgKGNvbW8gZWwgbsO6bWVybyBkZSBlbXBsZWFkb3MsIGluZ3Jlc29zLCBnYW5hbmNpYXMsIGFjdGl2b3MsIHkgY2FwaXRhbGl6YWNpw7NuIGRlIG1lcmNhZG8pLiBFc3RvIHN1Z2llcmUgcXVlIG5vIHNlIGlkZW50aWZpY2FuIHBhdHJvbmVzIG8gc2ltaWxpdHVkZXMgY2xhcmFzIGVudHJlIGxhcyBjb21wYcOxw61hcyBxdWUgcHVlZGFuIGNsYXNpZmljYXJzZSBlbiBncnVwb3MgYmllbiBkZWZpbmlkb3MuIExhIGRpc3BlcnNpw7NuIGRlIGxhcyBjYXJhcyBlbiBlbCBncsOhZmljbyByZWZsZWphIHF1ZSBsYXMgZGlmZXJlbmNpYXMgZW50cmUgbG9zIHZhbG9yZXMgZGUgbGFzIHZhcmlhYmxlcyBubyBzb24gbG8gc3VmaWNpZW50ZW1lbnRlIGNvbnNpc3RlbnRlcyBjb21vIHBhcmEgZm9ybWFyIGFncnVwYWNpb25lcyBldmlkZW50ZXMgZW4gbG9zIGRhdG9zLg0KDQpObyBvYnN0YW50ZSwgc2kgZXhpc3RpZXJhbiBhZ3J1cGFjaW9uZXMsIHNlIHBvZHLDrWFuIG9ic2VydmFyIGFsZ3VuYXMgc2ltaWxpdHVkZXMgZW50cmUgY2llcnRvcyBwYXJlcyBkZSBjYXJhcywgY29tbyBwb3IgZWplbXBsbzoNCg0KTGFzIGNhcmFzICgxLCAzLCA3LCA4LCA5LCAxMCkgeSAoMiwgNSkgcG9kcsOtYW4gY29tcGFydGlyIGNhcmFjdGVyw61zdGljYXMgc2ltaWxhcmVzLCBwZXJvIGVuIMO6bHRpbWEgaW5zdGFuY2lhIG5vIHNvbiBjb21wbGV0YW1lbnRlIGlndWFsZXMgZGViaWRvIGEgZGlmZXJlbmNpYXMgZXNwZWPDrWZpY2FzIGVuIHN1cyByYXNnb3MgZmFjaWFsZXMsIGNvbW8gbGEgZXN0cnVjdHVyYSBkZWwgcm9zdHJvIG8gbGEgZm9ybWEgZGVsIGNhYmVsbG8uIA0KDQoNCiMjIyMgZGlhZ3JhbWEgY29uanVudG8gZGUgZGlzcGVyc2lvbjsgRGlzdHJpYnVjacOybiB5IGNvcnJlbGFjacOybg0KYGBge3IgRGlhZ3JhbWFfY29uanVudG9fZGVfZGlzcGVyc2lvbl9EaXN0cmlidWNpb25feV9jb3JyZWxhY2lvbiwgZmlnLmFsaWduPSdjZW50ZXInfQ0KZ2dwYWlycyhjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0b1ssIC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDE2LDE3LDE4LDE5KV0pDQoNCmBgYA0KDQojIyMjIGRpYWdyYW1hIGNvbmp1bnRvIGRlIGRpc3BlcnNpb247IERpc3RyaWJ1Y2nDsm4geSBjb3JyZWxhY2nDsm4gW1Byb2ZpdGFibGVdDQpgYGB7ciBEaWFncmFtYV9jb25qdW50b19kZV9kaXNwZXJzaW9uX0Rpc3RyaWJ1Y2lvbl95X2NvcnJlbGFjaW9uX1Byb2ZpdGFibGUsIGZpZy5hbGlnbj0nY2VudGVyJ30NCmNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJFByb2ZpdGFibGUgPC0gIGZhY3RvcihjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRQcm9maXRhYmxlLCBsZXZlbHMgPSBjKDAsMSksIGxhYmVscyA9IGMoIk5SIiwgIlIiKSkNCg0Kc2V0LnNlZWQoMjAwNTAzMjYpDQpjY2RfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0b19tdWVzdHJlbyA9IGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvIFtzYW1wbGUoMTpucm93KGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvKSw1MCksIC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDE2LDE3LDE4LDE5KV0NCg0KZ2dwYWlycyhjY2RfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0b19tdWVzdHJlbywgY29sdW1ucyA9IGMoMTo1KSwgYWVzKGFscGhhID0gMC41KSwgY29sb3IgPSAiYmx1ZSIsIHVwcGVyID0gbGlzdChjb250aW51b3VzID0gd3JhcCgiY29yIiwgc2l6ZSA9IDIuNSkpKQ0KDQoNCg0KYGBgDQoNCiMjIyMgZGlhZ3JhbWEgZGUgZXN0cmVsbGFzDQpgYGB7ciBkaWFncmFtYV9kZV9Fc3RyZWxsYXMsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0Kc2V0LnNlZWQoNzgwNzI4KQ0KY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG9fbXVlc3RyZW8gPC0gY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG9bc2FtcGxlKDE6bnJvdyhjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byksIDEwKSwgLWMoMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTYsMTcsMTgsMTkpXQ0Kc3RhcnMoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG9fbXVlc3RyZW8sIGxlbiA9IDEsIGNleCA9IDAuNCwga2V5LmxvYyA9IGMoMTAsIDIpLCBkcmF3LnNlZ21lbnRzID0gVFJVRSkNCg0KYGBgDQoNCg0KIyMjIyBjYXJhcyBkZSBjaGVybm9mZiANCmBgYHtyIGNhcmFzX2RlX2NoZXJub2ZmLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCnNldC5zZWVkKDc4MDcyOCkNCmNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvX211ZXN0cmVvIDwtIGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvW3NhbXBsZSgxOm5yb3coY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8pLCAxMCksIC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDE2LDE3LDE4LDE5KV0NCmZhY2VzKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvX211ZXN0cmVvKQ0KDQoNCg0KYGBgDQojIyMgMS42LiBOb3JtYWxpZGFkIG11bHRpdmFyaWFkYSB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpFcyBwb3NpYmxlIGFuYWxpemFyIG8gZGV0ZXJtaW5hciBsYSBkaXN0cmlidWNpw7NuIG11bHRpdmFyaWFkYSBkZSB1biBjb25qdW50byBkZSBkYXRvcyBtZWRpYW50ZSBtw6l0b2RvcyBkZXNjcmlwdGl2b3MsIGNvbW8gbG9zIGdyw6FmaWNvcywgbyBpbmZlcmVuY2lhbGVzLCBjb21vIGxhcyBwcnVlYmFzIGVzdGFkw61zdGljYXMuIE1pZW50cmFzIHF1ZSBsb3MgcHJvY2VkaW1pZW50b3MgaW5mZXJlbmNpYWxlcyBwZXJtaXRlbiBvYnRlbmVyIGNvbmNsdXNpb25lcyBtw6FzIGdlbmVyYWxpemFibGVzLCBsb3MgZ3LDoWZpY29zIHJlc3VsdGFuIMO6dGlsZXMgY29tbyBzb3BvcnRlIHBhcmEgbGEgaW50ZXJwcmV0YWNpw7NuIGRlIGxvcyByZXN1bHRhZG9zLg0KDQpFbiBlc3RlIGFwYXJ0YWRvIHNlIGFib3JkYSBsYSBhcGxpY2FjacOzbiBkZSBwcm9jZWRpbWllbnRvcyBpbmZlcmVuY2lhbGVzIHBhcmEgdmVyaWZpY2FyIHNpIGVsIGNvbmp1bnRvIGRlIGRhdG9zIGRlIHRyYWJham8sIHJlc3BlY3RvIGEgc3VzIHZhcmlhYmxlcyBudW3DqXJpY2FzLCBzaWd1ZSB1bmEgZGlzdHJpYnVjacOzbiBub3JtYWwgbXVsdGl2YXJpYWRhIChETk0pLiBMYXMgcHJ1ZWJhcyBkZSBub3JtYWxpZGFkIG11bHRpdmFyaWFkYSAoUE5NKSBxdWUgc2UgYXBsaWNhcsOhbiBzb246IE1hcmRpYSwgSGVuemUtWmlya2xlciwgRG9vcm5pay1IYW5zZW4geSBSb3lzdG9uLiBFc3RhcyBwcnVlYmFzIGRlIG5vcm1hbGlkYWQgc2UgcmVhbGl6YW4gYmFqbyB1biBuaXZlbCBkZSBzaWduaWZpY2FuY2lhIGRldGVybWluYWRvICRcYWxwaGEgPSAwLjA1JCB5IGEgbGFzIGhpcMOzdGVzaXM6JCRIXzA6IFx0ZXh0IHtMYXMgdmFyaWFibGVzIHRpZW5lbiB1bmEgRE5NfSQkICQkSF8xOiBcdGV4dCB7TGFzIHZhcmlhYmxlcyBOTyB0aWVuZW4gdW5hIEROTX0kJCANCg0KTGEgKipwcnVlYmEgZGUgTWFyZGlhKiogc2UgZnVuZGFtZW50YSBlbiBsYXMgZXh0ZW5zaW9uZXMgZGUgYXNpbWV0csOtYSB5IGN1cnRvc2lzLCBlbCBjdWFkcmFkbyBkZSBsYSBkaXN0YW5jaWEgZGUgTWFoYWxhbm9iaXMsIGVsIG7Dum1lcm8gZGUgdmFyaWFibGVzICRwJCBhIGFuYWxpemFyIHkgZWwgbsO6bWVybyBkZSByZWdpc3Ryb3MgJG4kLiBBc2ltaXNtbywgc2UgY29uc2lkZXJhIHF1ZSBsYSBlc3RhZMOtc3RpY2EgZGUgbGEgcHJ1ZWJhIHBhcmEgbGEgYXNpbWV0csOtYSBzaWd1ZSB1bmEgZGlzdHJpYnVjacOzbiAkXGNoaV4yJCwgbWllbnRyYXMgcXVlIGxhIGVzdGFkw61zdGljYSBwYXJhIGxhIGN1cnRvc2lzIHNlIGRpc3RyaWJ1eWUgZGUgbWFuZXJhIGFwcm94aW1hZGEgZGUgZm9ybWEgbm9ybWFsLiANCg0KTGEgKipwcnVlYmEgZGUgSGVuemUtWmlya2xlcioqIHNlIGJhc2EgZW4gbGEgZGlzdGFuY2lhIGZ1bmNpb25hbCwgeWEgcXVlIHNpIGVsIGNvbmp1bnRvIGRlIGRhdG9zIHNpZ3VlIHVuYSBkaXN0cmlidWNpw7NuIG5vcm1hbCBtdWx0aXZhcmlhZGEsIGVsIGVzdGFkw61zdGljbyBkZSBsYSBwcnVlYmEgc2UgZGlzdHJpYnV5ZSBkZSBtYW5lcmEgYXByb3hpbWFkYSBjb21vIHVuYSBsb2dub3JtYWwsIGNvbiBwYXLDoW1ldHJvcyBkZSBtZWRpYSAkXG11JCB5IHZhcmlhbnphICRcc2lnbWFeMiQuIA0KDQpMYSAqKnBydWViYSBkZSBEb29ybmlrLUhhbnNlbioqIHNlIGJhc2EgZW4gbGEgYXNpbWV0csOtYSB5IGxhIGN1cnRvc2lzIGRlIHVuIGNvbmp1bnRvIGRlIGRhdG9zIG11bHRpdmFyaWFkb3MsIGxvcyBjdWFsZXMgc2UgdHJhbnNmb3JtYW4gcGFyYSBhc2VndXJhciBsYSBpbmRlcGVuZGVuY2lhLiBTZSBjb25zaWRlcmEgbcOhcyBwb3RlbnRlIHF1ZSBsYSBwcnVlYmEgZGUgU2hhcGlyby1XaWxrIGVuIGNhc29zIG11bHRpdmFyaWFkb3MuIEVsIGVzdGFkw61zdGljbyBkZSBsYSBwcnVlYmEgc2UgZGVmaW5lIGNvbW8gbGEgc3VtYSBkZSBsYXMgdHJhbnNmb3JtYWNpb25lcyBhbCBjdWFkcmFkbyBkZSBsYSBhc2ltZXRyw61hIHkgbGEgY3VydG9zaXMsIHkgc2lndWUgYXByb3hpbWFkYW1lbnRlIHVuYSBkaXN0cmlidWNpw7NuICRcY2hpXjIkLiANCg0KUG9yIG90cm8gbGFkbywgbGEgcHJ1ZWJhIGRlIFJveXN0b24gdXRpbGl6YSBsYXMgKipwcnVlYmFzIGRlIFNoYXBpcm8tV2lsayBvIFNoYXBpcm8tRnJhbmNpYSoqIHBhcmEgZXZhbHVhciBsYSBub3JtYWxpZGFkIG11bHRpdmFyaWFkYS4gU2kgbGEgY3VydG9zaXMgZXMgbWF5b3IgcXVlIDMsIHNlIGVtcGxlYSBTaGFwaXJvLUZyYW5jaWEgcGFyYSBkaXN0cmlidWNpb25lcyBsZXB0b2PDunJ0aWNhcywgbWllbnRyYXMgcXVlIHBhcmEgZGlzdHJpYnVjaW9uZXMgcGxhdGljw7pydGljYXMgc2UgdXRpbGl6YSBTaGFwaXJvLVdpbGsuIExvcyBwYXLDoW1ldHJvcyBlbiBlc3RhIHBydWViYSBzZSBvYnRpZW5lbiBtZWRpYW50ZSBhcHJveGltYWNpb25lcyBwb2xpbm9taWFsZXMuDQoNCiMjIyAxLjcuUGxhbnRlYW1pZW50byB5IERlc2Fycm9sbG97LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpzZSByZWFsaXrDsyB1bmEgcHJ1ZWJhIGVzdGFkw61zdGljYSBkZSBub3JtYWxpZGFkIG11bHRpdmFyaWFkYSB1dGlsaXphbmRvIHVuIG5pdmVsIGRlIHNpZ25pZmljYW5jaWEgJFxhbHBoYSA9IDAuMDUkLCBjb24gZWwgb2JqZXRpdm8gZGUgZGV0ZXJtaW5hciBzaSBsYXMgdmFyaWFibGVzIG3DqXRyaWNhcyBwcm92aWVuZW4gZGUgdW5hIHBvYmxhY2nDs24gY29uIGRpc3RyaWJ1Y2nDs24gbm9ybWFsIG11bHRpdmFyaWFkYS4gTGFzIHZhcmlhYmxlcyBudW3DqXJpY2FzIGFuYWxpemFkYXMgc29uOiBOdW1iZXJfb2ZfZW1wbG95ZWVzLCBSZXZlbnVlc19NLCBQcm9maXRzX00sIEFzc2V0c19NIHkgTWFya2V0Q2FwX1VwZGF0ZWRfTS4NCg0KTGEgbmF2ZWdhY2nDs24gYSB0cmF2w6lzIGRlIGxvcyByZXN1bHRhZG9zIG11ZXN0cmEgcXVlIGVsIGNvbmp1bnRvIGRlIGRhdG9zLCBlbiByZWxhY2nDs24gY29uIHN1cyB2YXJpYWJsZXMgbnVtw6lyaWNhcywgbm8gc2UgZGlzdHJpYnV5ZSBub3JtYWxtZW50ZSBkZSBmb3JtYSBtdWx0aXZhcmlhZGEuIEVuIHBhcnRpY3VsYXI6DQoNCkxhIFBOTSBkZSAqTWFyZGlhKiBMYSBQTk0gZGUgTWFyZGlhIG11ZXN0cmEgcXVlIGxvcyAkcC12YWx1ZXMkIHBhcmEgbGEgYXNpbWV0csOtYSAoc2tld25lc3MpIHkgbGEgY3VydG9zaXMgKGt1cnRvc2lzKSBzb24gaWd1YWxlcyBhIDAsIGxvIHF1ZSBlcyBtZW5vciBxdWUgZWwgbml2ZWwgZGUgc2lnbmlmaWNhbmNpYSAoJFxhbHBoYSA9IDAuMDUkKS4gRXN0byBpbmRpY2EgcXVlIHNlIHJlY2hhemEgbGEgaGlww7N0ZXNpcyBudWxhIGRlIG5vcm1hbGlkYWQgbXVsdGl2YXJpYWRhLCBsbyBxdWUgc3VnaWVyZSBxdWUgbG9zIGRhdG9zIG5vIHByb3ZpZW5lbiBkZSB1bmEgZGlzdHJpYnVjacOzbiBub3JtYWwgbXVsdGl2YXJpYWRhLiBFc3RlIHJlc3VsdGFkbyBwdWVkZSBvYnNlcnZhcnNlIGVuIGxhIHNhbGlkYSBkZSBsYSBwcnVlYmEgZGUgTWFyZGlhLg0KDQpMYSBQTk0gZGUgKkhlbnplLVppcmtsZXIqIG11ZXN0cmEgcXVlIGVsIHAtdmFsdWUgZXMgMCwgbG8gY3VhbCBlcyBtZW5vciBxdWUgZWwgbml2ZWwgZGUgc2lnbmlmaWNhbmNpYSAoJFxhbHBoYSA9IDAuMDUkKS4gRXN0byBpbXBsaWNhIHF1ZSBzZSByZWNoYXphIGxhIGhpcMOzdGVzaXMgbnVsYSBkZSBub3JtYWxpZGFkIG11bHRpdmFyaWFkYSwgbG8gcXVlIHN1Z2llcmUgcXVlIGxvcyBkYXRvcyBubyBzaWd1ZW4gdW5hIGRpc3RyaWJ1Y2nDs24gbm9ybWFsIG11bHRpdmFyaWFkYS4gRXN0ZSByZXN1bHRhZG8gaW5kaWNhIHF1ZSBubyBzZSBwdWVkZSBhc3VtaXIgcXVlIGxhcyB2YXJpYWJsZXMgZGVsIGNvbmp1bnRvIGRlIGRhdG9zIHByb3ZpZW5lbiBkZSB1bmEgZGlzdHJpYnVjacOzbiBub3JtYWwgbXVsdGl2YXJpYWRhLCB5IHF1ZSBlcyBuZWNlc2FyaW8gY29uc2lkZXJhciBvdHJvcyBtw6l0b2RvcyBwYXJhIGFuw6FsaXNpcyB5IG1vZGVsYWRvLg0KDQpFc3RlIHJlc3VsdGFkbyB0YW1iacOpbiBlcyBjb25zaXN0ZW50ZSBjb24gbG9zIHJlc3VsdGFkb3Mgb2J0ZW5pZG9zIGRlIGxhcyBvdHJhcyBwcnVlYmFzIGRlIG5vcm1hbGlkYWQgKGNvbW8gbGEgZGUgKk1hcmRpYSopLCBkb25kZSB0YW1iacOpbiBzZSBjb25jbHV5w7MgcXVlIGxvcyBkYXRvcyBubyBzb24gbXVsdGl2YXJpYWRhbWVudGUgbm9ybWFsZXMuDQoNCg0KTGEgUE5NIGRlICpEb29ybmlrLUhhbnNlbiogbXVlc3RyYSBxdWUgZWwgcC12YWx1ZSBlcyAwLCBsbyBjdWFsIGVzIG1lbm9yIHF1ZSBlbCBuaXZlbCBkZSBzaWduaWZpY2FuY2lhICgkXGFscGhhID0gMC4wNSQpLiBFc3RvIGluZGljYSBxdWUgc2UgcmVjaGF6YSBsYSBoaXDDs3Rlc2lzIG51bGEgZGUgbm9ybWFsaWRhZCBtdWx0aXZhcmlhZGEsIGxvIHF1ZSBzdWdpZXJlIHF1ZSBsb3MgZGF0b3Mgbm8gc2lndWVuIHVuYSBkaXN0cmlidWNpw7NuIG5vcm1hbCBtdWx0aXZhcmlhZGEuDQoNCkVzdGUgcmVzdWx0YWRvIGVzIGNvbnNpc3RlbnRlIGNvbiBsb3Mgb2J0ZW5pZG9zIGVuIGxhcyBwcnVlYmFzIGFudGVyaW9yZXMgKCpNYXJkaWEgeSBIZW56ZS1aaXJrbGVyKiksIHF1ZSB0YW1iacOpbiBpbmRpY2Fyb24gcXVlIGxvcyBkYXRvcyBubyBwcmVzZW50YW4gbm9ybWFsaWRhZCBtdWx0aXZhcmlhZGEuIExhIHBydWViYSBkZSBEb29ybmlrLUhhbnNlbiByZWZ1ZXJ6YSBlc3RhIGNvbmNsdXNpw7NuLCB5YSBxdWUgdW4gcC12YWx1ZSBkZSAwIGltcGxpY2EgdW5hIGZ1ZXJ0ZSBldmlkZW5jaWEgZW4gY29udHJhIGRlIGxhIG5vcm1hbGlkYWQgbXVsdGl2YXJpYWRhLg0KDQpFbiByZXN1bWVuLCBhIHBhcnRpciBkZSBsYSBwcnVlYmEgZGUgRG9vcm5pay1IYW5zZW4sIHNlIGNvbmNsdXllIHF1ZSBsb3MgZGF0b3Mgbm8gcHJvdmllbmVuIGRlIHVuYSBkaXN0cmlidWNpw7NuIG5vcm1hbCBtdWx0aXZhcmlhZGEsIHksIHBvciBsbyB0YW50bywgbm8gZXMgYXByb3BpYWRvIHN1cG9uZXIgcXVlIGxhcyB2YXJpYWJsZXMgZW4gZWwgY29uanVudG8gZGUgZGF0b3Mgc2lndWVuIHVuYSBkaXN0cmlidWNpw7NuIG5vcm1hbCwgcGVybyBkb25kZSBsb3MgZGF0b3MgYSBzdSB2ZXogdGllbmVuIHNlbnRpZG8gY29uIGVsIGNvbnRleHRvIGRlc2NyaXRvIGVuIGxhIGRlc2NycGNpw7JuIGRlIGxvcyBkYXRvcyB5YSBxdWUgaGF5IGNvbXBhw7FpYXMgY29uIHZhbG9yZXMgZGVtYXNpYWRvcyBhbHRvcyBnZW5lcmFuZG8gZGF0b3MgYXRpcGljb3MgeSBhbXBsaWFuZG8gZWwgcmFuZ28gZGUgZXNjYWxhLg0KDQoNCiMjIyMgUE5NIE1hcmRpYQ0KYGBge3IgUE5NX01hcmRpYSwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQptdm4oY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG9bLC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDE2LDE3LDE4LDE5KV0sIG12blRlc3Q9Im1hcmRpYSIpDQpgYGANCg0KIyMjIyBQTk0gSGVuemUtWmlya2xlcg0KYGBge3IgUE5NX0hlbnplX1ppcmtsZXIsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KbXZuKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvWywtYygxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxNiwxNywxOCwxOSldLCBtdm5UZXN0PSJoeiIpDQpgYGANCg0KIyMjIyBQTk0gRG9vcm5pay1IYW5zZW4NCmBgYHtyIFBOTV9Eb29ybmlrX0hhbnNlbiwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQptdm4oY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG9bLC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDE2LDE3LDE4LDE5KV0sIG12blRlc3Q9ImRoIikNCmBgYA0KDQojIyAqKkZhc2UgMiBbQ29tcG9uZW50ZXMgUHJpbmNpcGFsZXNdKioNCg0KRW4gdMOpcm1pbm9zIGdlbmVyYWxlcywgZXN0YSBzZWd1bmRhIGV0YXBhIGRlIGVzdHVkaW8gbW9zdHJhcsOhIGPDoWxjdWxvcywgdmlzdWFsaXphY2lvbmVzIGUgaW50ZXJwcmV0YWNpb25lcyBjb24gYmFzZSBlbiBlbCBjb25qdW50byBkZSBkYXRvcyB0cmF0YWRvIGRlbCByYW5raW5nIGZvcnR1bmUgMTAwMCAyMDI0LCBwZXJvIGFob3JhIGRlc2RlIHVuIGVuZm9xdWUgZGUgYW7DoWxpc2lzIGRlIGNvbXBvbmVudGVzIHByaW5jaXBhbGVzIHNvYnJlIGxhcyB2YXJpYWJsZXMgY3VhbnRpdGF0aXZhcywgcXVlIGluY2x1aXLDoTogc2VsZWNjacOzbiwgY2FsaWRhZCBkZSByZXByZXNlbnRhY2nDs24sIGNvbnRyaWJ1Y2lvbmVzIGUgaW50ZXJwcmV0YWNpw7NuLg0KDQpSZWN1w6lyZGVzZSBxdWUgZWwgY29uanVudG8gZGUgZGF0b3MgZGUgdHJhYmFqbyBlcyBkZXNjcml0byBlbiBsYSBbZmFzZSAxXWRlc2NyaXBjacOybiBkZSBsb3MgZGF0b3MuDQoNClBvciDDumx0aW1vLCBlc3RlIHRyYWJham8gZnVlIHByb2Nlc2FkbyBjb24gYHIgUi52ZXJzaW9uLnN0cmluZ2AgbWVkaWFkbyBwb3IgUlN0dWRpbyAyMDIyLjEyLjAgQnVpbGQgMzUzIGVuIHVuYSBwbGF0YWZvcm1hIHg4Nl82NC13NjQtbWluZ3czMi4gQWRlbcOhcywgcG9yIHN1IG5hdHVyYWxlemEgZGUgcHVibGljYWNpw7NuIGVuIGzDrW5lYSB5IHBhcmEgY3VtcGxpciBjb24gZWwgcmVxdWlzaXRvIHRlbXBvcmFsIGRlIGVudHJlZ2EsIHNlcsOhIGFjdHVhbGl6YWRvLCBjb21vIG3DoXhpbW8sIGhhc3RhIGxhcyAxMTo1OSBwLm0uIGRlbCBtYXJ0ZXMgMyBkZSBkaWNpZW1icmUgZGUgMjAyNC4NCg0KIyMjIDIuMS4gT2JqZXRpdm9zDQoNCkVsIG9iamV0aXZvIHByaW5jaXBhbCBkZSBlc3RhIGZhc2UgZXMgZGVzY29tcG9uZXIgbGFzIHJlbGFjaW9uZXMgZW50cmUgbcO6bHRpcGxlcyB2YXJpYWJsZXMgYSB0cmF2w6lzIGRlbCBhbsOhbGlzaXMgZGUgQ29tcG9uZW50ZXMgUHJpbmNpcGFsZXMgKEFDUCkuIEVzdG8gcGVybWl0aXLDoSBpZGVudGlmaWNhciBsYXMgZGltZW5zaW9uZXMgY2xhdmUgcXVlIGV4cGxpY2FuIGxhIG1heW9yIHBhcnRlIGRlIGxhIHZhcmlhYmlsaWRhZCBkZSBsb3MgZGF0b3MsIHNpbXBsaWZpY2FuZG8gc3UgaW50ZXJwcmV0YWNpw7NuIHNpbiBwZXJkZXIgaW5mb3JtYWNpw7NuIHNpZ25pZmljYXRpdmEuDQoNCkVsIGFuw6FsaXNpcyBkZSBDb21wb25lbnRlcyBQcmluY2lwYWxlcyB1dGlsaXphIHRyYW5zZm9ybWFjaW9uZXMgbWF0ZW3DoXRpY2FzIHBhcmEgY29udmVydGlyIHZhcmlhYmxlcyBvcmlnaW5hbGVzIGNvcnJlbGFjaW9uYWRhcyBlbiBudWV2YXMgdmFyaWFibGVzIGluZGVwZW5kaWVudGVzIChjb21wb25lbnRlcyBwcmluY2lwYWxlcykuIEVzdGFzIG51ZXZhcyBkaW1lbnNpb25lcyBmYWNpbGl0YW4gbGEgdmlzdWFsaXphY2nDs24geSBlbCBhbsOhbGlzaXMgZGUgZ3JhbmRlcyBjb25qdW50b3MgZGUgZGF0b3MsIGFsIHRpZW1wbyBxdWUgbWF4aW1pemFuIGxhIHZhcmlhbnphIGV4cGxpY2FkYSBwb3IgY2FkYSBjb21wb25lbnRlLiBFbiBlc3RhIHNlY2Npw7NuLCBzZSBhYm9yZGFyw6EgbGEgc2VsZWNjacOzbiBkZSBjb21wb25lbnRlcywgbGEgZXZhbHVhY2nDs24gZGUgc3UgY2FsaWRhZCwgeSBzdSBpbnRlcnByZXRhY2nDs24gYSB0cmF2w6lzIGRlIGdyw6FmaWNvcyBjb21vIGJpcGxvdHMgeSBjw61yY3Vsb3MgZGUgY29ycmVsYWNpb25lcy4NCg0KDQojIyMgMi4yLiBTZWxlY2Npw7NuIGRlIENvbXBvbmVudGVzIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCkNvbW8gc2XDsWFsYW4gRMOtYXogTW9yYWxlcyB5IE1vcmFsZXMgUml2ZXJhICgyMDEyKSwgZWwgQW7DoWxpc2lzIGRlIENvbXBvbmVudGVzIFByaW5jaXBhbGVzICoqKEFDUCkqKiBwZXJtaXRlIHJlb3JnYW5pemFyIHVuIGNvbmp1bnRvIGRlIGRhdG9zIG11bHRpdmFyaWFkbyBhbCByZWR1Y2lyIGVsIG7Dum1lcm8gZGUgdmFyaWFibGVzLCBzaW4gcmVxdWVyaXIgc3Vwb3NpY2lvbmVzIGVzcGVjw61maWNhcyBzb2JyZSBsYSBkaXN0cmlidWNpw7NuIGRlIHByb2JhYmlsaWRhZCBkZSBlc3Rhcy4gRXN0YSByZWR1Y2Npw7NuIHNlIGFsY2FuemEgbWVkaWFudGUgbGEgY3JlYWNpw7NuIGRlIGNvbWJpbmFjaW9uZXMgbGluZWFsZXMgZGUgbGFzIHZhcmlhYmxlcyBvcmlnaW5hbGVzLCBkaXNlw7FhZGFzIHBhcmEgY2FwdGFyIGxhIG1heW9yIHZhcmlhYmlsaWRhZCBwb3NpYmxlIGVuIGxvcyBkYXRvcy4gRGUgZXN0ZSBtb2RvLCBlbCAqKkFDUCoqIGdlbmVyYSBudWV2YXMgdmFyaWFibGVzLCBkZW5vbWluYWRhcyBjb21wb25lbnRlcyBwcmluY2lwYWxlcywgcXVlIHByZXNlbnRhbiBpbmRlcGVuZGVuY2lhIGVzdGFkw61zdGljYSB5IGF1c2VuY2lhIGRlIGNvcnJlbGFjacOzbiwgc2llbXByZSBiYWpvIGVsIHN1cHVlc3RvIGRlIG5vcm1hbGlkYWQuDQoNCkxhIHNlbGVjY2nDs24gZGUgY29tcG9uZW50ZXMgZXMgdW4gcGFzbyBmdW5kYW1lbnRhbCBlbiBlbCBhbsOhbGlzaXMgbXVsdGl2YXJpYWRvLCB5YSBxdWUgcGVybWl0ZSByZWR1Y2lyIGxhIGNvbXBsZWppZGFkIGRlIGxvcyBkYXRvcyBtaWVudHJhcyBzZSBjb25zZXJ2YSBsYSBpbmZvcm1hY2nDs24gbcOhcyByZWxldmFudGUuIEEgdHJhdsOpcyBkZSBoZXJyYW1pZW50YXMgY29tbyBlbCBBbsOhbGlzaXMgZGUgQ29tcG9uZW50ZXMgUHJpbmNpcGFsZXMgKEFDUCksIG1hdHJpY2VzIGRlIGNvcnJlbGFjaW9uZXMgeSBncsOhZmljb3MgaW50ZXJwcmV0YXRpdm9zLCBlcyBwb3NpYmxlIGlkZW50aWZpY2FyIGxhcyBkaW1lbnNpb25lcyBwcmluY2lwYWxlcyBxdWUgZXhwbGljYW4gbGEgbWF5b3IgcGFydGUgZGUgbGEgdmFyaWFiaWxpZGFkIGVuIGxvcyBkYXRvcywgZmFjaWxpdGFuZG8gdW5hIGludGVycHJldGFjacOzbiBtw6FzIGNsYXJhIHkgZWZlY3RpdmEuDQoNCg0KIyMjIDIuMy4gUGxhbnRlYW1pZW50byB5IERlc2Fycm9sbG8gey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KQSBwYXJ0aXIgZGUgbGFzIHZhcmlhYmxlcyBjdWFudGl0YXRpdmFzIGRlbCBjb25qdW50byBkZSBkYXRvcyBkZXNjcml0byBlbiBsYSAqU2VjY2nDs24gMS4yKiwgc2UgcmVxdWllcmUgaW5pY2lhbG1lbnRlIGRldGVybWluYXIgZWwgcG9yY2VudGFqZSBkZSB2YXJpYW56YSBleHBsaWNhZG8gcG9yIGNhZGEgZGltZW5zacOzbiB0cmFzIHJlYWxpemFyIGVsIEFuw6FsaXNpcyBkZSBDb21wb25lbnRlcyBQcmluY2lwYWxlcyAoQUNQKS4gUG9zdGVyaW9ybWVudGUsIGNvbiBiYXNlIGVuIGVsIGF1dG92YWxvciBwcm9tZWRpbyBvIG1lZGlhbnRlIHVuIGdyw6FmaWNvIGRlIHNlZGltZW50YWNpw7NuLCBzZSBkZWJlIGRlY2lkaXIgY3XDoW50b3MgY29tcG9uZW50ZXMgY29uc2VydmFyLg0KDQpMYSAqTWF0cml6IEFDUCogbXVlc3RyYSBjaW5jbyBkaW1lbnNpb25lcywgZG9uZGUgbGEgcHJpbWVyYSBkaW1lbnNpw7NuIHJldGllbmUgZWwgNTcuODUlIGRlIGxhIHZhcmlhbnphIHRvdGFsLCBzZWd1aWRhIHBvciBsYSBzZWd1bmRhIGRpbWVuc2nDs24gY29uIHVuIDE3Ljg0JSwgbG8gcXVlIHJlc3VsdGEgZW4gdW4gcG9yY2VudGFqZSBhY3VtdWxhZG8gZGVsIDc1LjY5JSBkZSBsYSB2YXJpYWJpbGlkYWQgZXhwbGljYWRhLiBMYSB0ZXJjZXJhIGRpbWVuc2nDs24gZXhwbGljYSB1biAxNy40MCUgYWRpY2lvbmFsLCBhbGNhbnphbmRvIHVuIHBvcmNlbnRhamUgYWN1bXVsYWRvIGRlbCA5My4wOCUuIExhcyDDumx0aW1hcyBkb3MgZGltZW5zaW9uZXMgKGRpbWVuc2lvbmVzIDQgeSA1KSBleHBsaWNhbiB1biA0LjMyJSB5IHVuIDIuNjAlLCByZXNwZWN0aXZhbWVudGUsIGxvIHF1ZSBsbGV2YSBhbCAxMDAlIGRlIGxhIHZhcmlhbnphIGV4cGxpY2FkYSBwb3IgZWwgY29uanVudG8gZGUgbGFzIGNpbmNvIGRpbWVuc2lvbmVzLg0KDQpMYSAqTWF0cml6IGRlIENvcnJlbGFjaW9uZXMqIGF5dWRhIGEgZGVzY3JpYmlyIGxhcyByZWxhY2lvbmVzIGVudHJlIGxhcyB2YXJpYWJsZXMgcXVlIGNvbmZvcm1hbiBsYSBkaW1lbnNpw7NuIDEgeSAyLiBTZWfDum4gZXN0YSBtYXRyaXosIHNlIG9ic2VydmEgcXVlIGxhcyBjb3JyZWxhY2lvbmVzIG3DoXMgYWx0YXMgc29uIGVudHJlIGxhcyB2YXJpYWJsZXMgKlByb2ZpdHNfTSogeSAqTWFya2V0Q2FwX1VwZGF0ZWRfTSogY29uIHVuYSBjb3JyZWxhY2nDs24gZGUgMC44MDgsICpOdW1iZXJfb2ZfZW1wbG95ZWVzKiB5ICpSZXZlbnVlc19NKiBjb24gMC43MjgsIHkgKlByb2ZpdHNfTSogeSAqUmV2ZW51ZXNfTSogY29uIDAuNjU4LiBFc3RhcyByZWxhY2lvbmVzIHNvbiBlc3BlcmFkYXMgZGVudHJvIGRlbCBjb250ZXh0byBkZWwgYW7DoWxpc2lzIGRlIHZhcmlhYmxlcyBlY29uw7NtaWNhcywgeWEgcXVlIGluZ3Jlc29zIHkgZ2FuYWNpYXMgc29uIGZhY3RvcmVzIGNvbcO6bm1lbnRlIHJlbGFjaW9uYWRvcyBjb24gZWwgdGFtYcOxbyBkZSBsYSBlbXByZXNhIHkgc3UgY2FwaXRhbGl6YWNpw7NuIGRlIG1lcmNhZG8uIEVuIHBhcnRpY3VsYXIsIGxhcyBjb3JyZWxhY2lvbmVzIG3DoXMgYWx0YXMgaW5kaWNhbiBxdWUgZXN0YXMgdmFyaWFibGVzIHByb2JhYmxlbWVudGUgY29udHJpYnV5YW4gZGUgbWFuZXJhIHNpZ25pZmljYXRpdmEgYSBsYXMgY29tYmluYWNpb25lcyBsaW5lYWxlcyBxdWUgZGVmaW5lbiBsYXMgZGltZW5zaW9uZXMgMSB5IDIuIEFkZW3DoXMsIHNlIG9ic2VydmEgcXVlIGxhcyBjb3JyZWxhY2lvbmVzIGVudHJlICpQcm9maXRzX00qIHkgKlJldmVudWVzX00qIHRhbWJpw6luIHNvbiBhbHRhcywgbG8gcXVlIGVzIGzDs2dpY28gZGVudHJvIGRlIHVuIGFuw6FsaXNpcyBkZSBkZXNlbXBlw7FvIGZpbmFuY2llcm8sIGRhZG8gcXVlIGxhcyBnYW5hbmNpYXMgc3VlbGVuIGVzdGFyIGVzdHJlY2hhbWVudGUgcmVsYWNpb25hZG9zIGNvbiBsb3MgaW5ncmVzb3MgZGUgbGEgZW1wcmVzYS4NCg0KTGEgcGVzdGHDsWEgZGUgKlZhbG9yZXMgeSBWZWN0b3JlcyBQcm9waW9zKiBtdWVzdHJhIGxvcyBvYmpldG9zIGNhbGN1bGFkb3MgYSBwYXJ0aXIgZGUgbGEgbWF0cml6IGRlIGNvcnJlbGFjaW9uZXMgZGVsIGNvbmp1bnRvIGRlIGRhdG9zLiBFbiBlc3RlIHNlbnRpZG8sIHNlIGdhcmFudGl6YSBxdWUgbGEgc3VtYSBkZSBsb3MgdmFsb3JlcyBwcm9waW9zIHNlYSBpZ3VhbCBhIGxhIGRpbWVuc2nDs24gZGUgZGljaGEgbWF0cml6IHkgYSBsYSB2YXJpYWJpbGlkYWQgdG90YWwgZGVsIGNvbmp1bnRvLCBsbyBxdWUgcGVybWl0ZSBjYWxjdWxhciBsYXMgcHJvcG9yY2lvbmVzIGRlIHJldGVuY2nDs24gZGUgdmFyaWFiaWxpZGFkIGRlIG1hbmVyYSBpbm1lZGlhdGEuDQoNCkVzdG9zIHZhbG9yZXMgcHJvcGlvcyBpbmRpY2FuIGN1w6FudGEgdmFyaWFuemEgZXMgZXhwbGljYWRhIHBvciBjYWRhIGNvbXBvbmVudGUuIExhIENvbXAuMSB0aWVuZSBlbCB2YWxvciBwcm9waW8gbcOhcyBhbHRvICgyLjg5MjQyNjQpLCBsbyBxdWUgaW5kaWNhIHF1ZSBlcyBsYSBjb21wb25lbnRlIHF1ZSBleHBsaWNhIGxhIG1heW9yIHBhcnRlIGRlIGxhIHZhcmlhYmlsaWRhZCBlbiBlbCBjb25qdW50byBkZSBkYXRvcy4gTGEgQ29tcC4yIHkgQ29tcC4zLCBjb24gdmFsb3JlcyBwcm9waW9zIGRlIDAuODkxOTA3NiB5IDAuODY5ODA2OCwgcmVzcGVjdGl2YW1lbnRlLCBzaWd1ZW4gZW4gaW1wb3J0YW5jaWEsIGF1bnF1ZSBleHBsaWNhbiBtZW5vcyB2YXJpYWJpbGlkYWQuIExhcyBDb21wLjQgeSBDb21wLjUgdGllbmVuIHZhbG9yZXMgcHJvcGlvcyBtdWNobyBtw6FzIGJham9zICgwLjIxNTc4MTAgeSAwLjEzMDA3ODIpLCBsbyBxdWUgc3VnaWVyZSBxdWUgZXN0YXMgY29tcG9uZW50ZXMgZXhwbGljYW4gdW5hIHBlcXVlw7FhIHByb3BvcmNpw7NuIGRlIGxhIHZhcmlhbnphIHRvdGFsLg0KDQpBZGVtw6FzLCBsYSBtYXRyaXogZGUgdmVjdG9yZXMgcHJvcGlvcyBkZWZpbmUgbG9zIGNvZWZpY2llbnRlcyBkZSBsYXMgY29tYmluYWNpb25lcyBsaW5lYWxlcyBkZSBjYWRhIGNvbXBvbmVudGUgZW4gcmVsYWNpw7NuIGNvbiBsYXMgdmFyaWFibGVzIGRlbCBjb25qdW50byBkZSBkYXRvcywgcHJvcG9yY2lvbmFuZG8gaW5mb3JtYWNpw7NuIGFkaWNpb25hbCBzb2JyZSBjw7NtbyBzZSBjb21iaW5hbiBsYXMgdmFyaWFibGVzIG9yaWdpbmFsZXMgcGFyYSBmb3JtYXIgbGFzIGNvbXBvbmVudGVzIHByaW5jaXBhbGVzLg0KDQpFbiBlbCBncmFmaWNvIGRlICpDb3JyZWxhY2lvbmVzIENvbXBhcmFkYXMqIGlsdXN0cmEgbGFzIGNvcnJlbGFjaW9uZXMgZW50cmUgbGFzIHZhcmlhYmxlcyBvcmlnaW5hbGVzIChOdW1iZXJfb2ZfZW1wbG95ZWVzLCBSZXZlbnVlc19NLCBQcm9maXRzX00sIGV0Yy4pIHkgbGFzIGNvbXBvbmVudGVzIHByaW5jaXBhbGVzIChDb21wLjEgYSBDb21wLjUpLiBPYnNlcnZhbW9zIHF1ZToNCg0KTGEgcHJpbWVyYSBjb21wb25lbnRlIHRpZW5lIGFsdGFzIGNvcnJlbGFjaW9uZXMgY29uIHZhcmlhYmxlcyByZWxhY2lvbmFkYXMgY29uIGluZ3Jlc29zIHkgZ2FuYW5jaWFzIChSZXZlbnVlc19NLCBQcm9maXRzX00pLCBpbmRpY2FuZG8gcXVlIGNhcHR1cmEgdW5hIGRpbWVuc2nDs24gZWNvbsOzbWljYSBzaWduaWZpY2F0aXZhLg0KTGFzIGNvcnJlbGFjaW9uZXMgbcOhcyBkw6liaWxlcyBlbiBjb21wb25lbnRlcyBzdXBlcmlvcmVzIChDb21wLjQgeSBDb21wLjUpIHJlZmxlamFuIHF1ZSBlc3RhcyBkaW1lbnNpb25lcyBhZGljaW9uYWxlcyBhcG9ydGFuIGluZm9ybWFjacOzbiBtZW5vcyByZWxldmFudGUuDQoNCkVsICpHcsOhZmljbyBkZSBDYXR0ZWxsKiwgdGFtYmnDqW4gY29ub2NpZG8gY29tbyBlbCBncsOhZmljbyBkZSBzZWRpbWVudGFjacOzbiBvIGZvcm1hcyBkZSBjb2RvLCBtdWVzdHJhIGxvcyB2YWxvcmVzIHByb3Bpb3MgKGVpZ2VudmFsdWVzKSBkZSBsYXMgY29tcG9uZW50ZXMgcHJpbmNpcGFsZXMuIEVzdGUgZ3LDoWZpY28gaWRlbnRpZmljYSBlbCBwdW50byBkZSBpbmZsZXhpw7NuIGRvbmRlIGxhIHBlbmRpZW50ZSBlbnRyZSB2YWxvcmVzIHByb3Bpb3MgZGlzbWludXllIHNpZ25pZmljYXRpdmFtZW50ZS4gRW4gZXN0ZSBjYXNvOkxhIHByaW1lcmEgY29tcG9uZW50ZSBleHBsaWNhIGVsIDU3LjglIGRlIGxhIHZhcmlhbnphIHRvdGFsLCBsbyBxdWUgZGVzdGFjYSBzdSBpbXBvcnRhbmNpYSBlbiBsYSBjYXB0dXJhIGRlIGxhIG1heW9yIHBhcnRlIGRlIGxhIGluZm9ybWFjacOzbiBkZWwgY29uanVudG8gZGUgZGF0b3MuDQoNCkxhcyBzaWd1aWVudGVzIGNvbXBvbmVudGVzIG11ZXN0cmFuIHVuIGRlc2NlbnNvIHByb2dyZXNpdm8gZW4gbGEgdmFyaWFuemEgZXhwbGljYWRhLCBjb24gbGEgc2VndW5kYSB5IHRlcmNlcmEgY29tcG9uZW50ZXMgY2FwdHVyYW5kbyAxNy44JSB5IDE3LjQlLCByZXNwZWN0aXZhbWVudGUuDQoNCkVsIHB1bnRvIGRlIGluZmxleGnDs24gc2Ugb2JzZXJ2YSBkZXNwdcOpcyBkZSBsYSBwcmltZXJhIGNvbXBvbmVudGUsIHN1Z2lyaWVuZG8gcXVlIGVzdGEgcmV0aWVuZSBsYSBtYXlvciBwYXJ0ZSBkZSBsYSBpbmZvcm1hY2nDs24sIHBlcm8gbGFzIHRyZXMgcHJpbWVyYXMgY29tcG9uZW50ZXMganVudGFzIGV4cGxpY2FuIHVuIDkyJSBkZSBsYSB2YXJpYW56YSBhY3VtdWxhZGEsIGxvIHF1ZSBsYXMgaGFjZSByZWxldmFudGVzIHBhcmEgY2FwdHVyYXIgdmFyaWFjaW9uZXMgYWRpY2lvbmFsZXMuDQoNCkVsIEdyw6FmaWNvIGRlICpDYXR0ZWxsLUthaXNlciogY29tYmluYSBsYSByZWdsYSBkZSBLYWlzZXIsIHF1ZSByZWNvbWllbmRhIHJldGVuZXIgc29sbyBsYXMgY29tcG9uZW50ZXMgY29uIHZhbG9yZXMgcHJvcGlvcyBtYXlvcmVzIGEgMToNCkVuIGVzdGUgYW7DoWxpc2lzLCBzb2xvIGxhcyBwcmltZXJhcyBkb3MgY29tcG9uZW50ZXMgY3VtcGxlbiBjb24gZXN0ZSBjcml0ZXJpby4gRXN0byBzdWdpZXJlIHF1ZSByZXRlbmVyIGVzdGFzIGNvbXBvbmVudGVzIGVzIHN1ZmljaWVudGUgcGFyYSBjYXB0dXJhciBsYSBtYXlvciBwYXJ0ZSBkZSBsYSB2YXJpYWJpbGlkYWQuDQoNClNpbiBlbWJhcmdvLCBhbCBjb25zaWRlcmFyIGxhIHZhcmlhbnphIGFjdW11bGFkYSwgc2Ugb2JzZXJ2YSBxdWUgbGFzIHRyZXMgcHJpbWVyYXMgY29tcG9uZW50ZXMganVudGFzIGNhcHR1cmFuIGxhIG1heW9yw61hIGRlIGxhIGluZm9ybWFjacOzbiBkZWwgc2lzdGVtYSwgc2llbmRvIHJlbGV2YW50ZXMgcGFyYSBkZXNjcmliaXIgbGFzIHJlbGFjaW9uZXMgZW50cmUgdmFyaWFibGVzIGNvbW8gUmV2ZW51ZXMsIFByb2ZpdHMsIHkgTWFya2V0Q2FwIGVuIGVsIGNvbnRleHRvIGRlbCByYW5raW5nIGZvcnR1bmUgZXhwbGljYWRvIGVuIGxhICBGYXNlIDEgW0Rlc2NyaXBjaW9uZXMgTXVsdGl2YXJpYW50ZXNdLg0KDQpFbCBhbsOhbGlzaXMgUENBIHBlcm1pdGUgcmVkdWNpciBsYXMgZGltZW5zaW9uZXMgZGVsIGRhdGFzZXQgY29uc2VydmFuZG8gbGEgbWF5b3IgcGFydGUgZGUgbGEgdmFyaWFiaWxpZGFkLiBTZWfDum4gZWwgZ3LDoWZpY28gZGUgQ2F0dGVsbCB5IGxhIHJlZ2xhIGRlIEthaXNlciwgc2UgcmVjb21pZW5kYSByZXRlbmVyIGFsIG1lbm9zIGxhcyB0cmVzIHByaW1lcmFzIGNvbXBvbmVudGVzLCB5YSBxdWUgZXhwbGljYW4gdW4gOTIlIGRlIGxhIHZhcmlhbnphIHRvdGFsLCBsbyBjdWFsIGVzIGNydWNpYWwgcGFyYSBkZXNjcmliaXIgcGF0cm9uZXMgeSB0ZW5kZW5jaWFzIGNsYXZlIGVuIGVsIGNvbmp1bnRvIGRlIGRhdG9zLCBlc3RvIGFzZWd1cmEgdW4gYmFsYW5jZSBlbnRyZSBzaW1wbGlmaWNhY2nDs24geSByZXRlbmNpw7NuIGRlIGluZm9ybWFjacOzbiBlbiBlbCBhbsOhbGlzaXMgZGUgbGFzIGVtcHJlc2FzIGRlbCByYW5raW5nIEZvcnR1bmUuDQoNCiMjIyMgTWF0cml6IEFDUA0KYGBge3IgTWF0cml6X0FDUCwgZmlnLmFsaWduPSdjZW50ZXInfQ0KZ2V0X2VpZ2VudmFsdWUoUENBKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvWywtYygxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxNiwxNywxOCwxOSldLCBuY3AgPSA0LCBzY2FsZS51bml0ID0gVFJVRSwgZ3JhcGggPSBGKSkNCg0KYGBgDQoNCiMjIyMgTWF0cml6IGRlIGNvcnJlbGFjaW9uZXMNCmBgYHtyIE1hdHJpel9kZV9jb3JyZWxhY2lvbmVzLCBmaWcuYWxpZ249J2NlbnRlcid9DQpyb3VuZChjb3IoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG9bLC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDE2LDE3LDE4LDE5KV0pLDMpDQoNCmBgYA0KDQojIyMjIFZhbG9yZXMgeSBWZWN0b3JlcyBQcm9waW9zDQpgYGB7ciBWYWxvcmVzX3lfVmVjdG9yZXNfUHJvcGlvcywgZmlnLmFsaWduPSdjZW50ZXInfQ0KcHJpbmNvbXAoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG9bLC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDE2LDE3LDE4LDE5KV0sIGNvciA9IFRSVUUpJHNkZXZeMg0KDQpgYGANCg0KIyMjIyBDb3JyZWxhY2lvbmVzIENvbXBhcmFkYXMNCmBgYHtyIENvcnJlbGFjaW9uZXNfQ29tcGFyYWRhcywgZmlnLmFsaWduPSdjZW50ZXInfQ0KcGFyKG1mcm93PWMoMSwyKSkNCmNvcnJwbG90Ojpjb3JycGxvdChjb3IoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG9bLC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDE2LDE3LDE4LDE5KV0pLCBtZXRob2QgPSAiY29sb3IiLCB0eXBlID0gInVwcGVyIiwgbnVtYmVyLmNleCA9IDAuNCkNCmNvcnJwbG90Ojpjb3JycGxvdChjb3IocHJpbmNvbXAoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG9bLC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDE2LDE3LDE4LDE5KV0sIGNvciA9IFRSVUUpJHNjb3JlcyksIG1ldGhvZCA9ICJjb2xvciIsIHR5cGUgPSAidXBwZXIiLCBudW1iZXIuY2V4ID0gMC40KQ0KYGBgDQoNCiMjIyMgR3LDoWZpY28gZGUgQ2F0dGVsbA0KYGBge3IgR3LDoWZpY29fZGVfQ2F0dGVsbCwgZmlnLmFsaWduPSdjZW50ZXInfQ0KZnZpel9laWcoUENBKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvWywtYygxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxNiwxNywxOCwxOSldLCBzY2FsZS51bml0ID0gVCwgZ3JhcGggPSBGKSwgYWRkbGFiZWxzID0gVCwgeWxpbT1jKDAsOTApLCBtYWluID0gIiIpDQpgYGANCg0KIyMjIyBHcsOhZmljbyBkZSBDYXR0ZWxsLUthaXNlcg0KYGBge3IgR3LDoWZpY29fZGVfQ2F0dGVsbC1LYWlzZXIsIGZpZy5hbGlnbj0nY2VudGVyJ30NCnNjcmVlKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvWywtYygxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxNiwxNywxOCwxOSldLGZhY3RvcnMgPSBGQUxTRSwgcGMgPSBUUlVFLCBtYWluID0iIikNCg0KYGBgDQoNCg0KIyMjIDIuNC4gQ2FsaWRhZCBkZSBSZXByZXNlbnRhY2nDs24gey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KQ29uIGJhc2UgZW4gbGEgcmVmZXJlbmNpYSBkZSBbQEFFRE1EaWF6LU1vcmFsZXMxZWRdLHNlIGNvbmZpcm1hIHF1ZSwgdHJhcyByZWR1Y2lyIGxhIGRpbWVuc2lvbmFsaWRhZCBkZWwgY29uanVudG8gZGUgZGF0b3MgeSBlbnRlbmRlciBxdWUgc3VzIHZhcmlhYmxlcyBlc3RhbmRhcml6YWRhcyBzZSByZXByZXNlbnRhbiBncsOhZmljYW1lbnRlIGNvbW8gcHJveWVjY2lvbmVzIGRlIHVuYSBoaXBlcmVzZmVyYSBkZSBjb3JyZWxhY2lvbmVzLCBlcyBlc2VuY2lhbCBpbmljaWFyIGxhIGludGVycHJldGFjacOzbiBkZSBsYXMgY29tcG9uZW50ZXMgYSBwYXJ0aXIgZGUgZXNhcyBjb3JyZWxhY2lvbmVzLiBQb3N0ZXJpb3JtZW50ZSwgc2UgZGViZSBldmFsdWFyIGxhIGNhbGlkYWQgZGUgbGFzIHJlcHJlc2VudGFjaW9uZXMgb2J0ZW5pZGFzLCBjb25zaWRlcmFuZG8gbGEgcmVkdWNjacOzbiBkaW1lbnNpb25hbCBhcGxpY2FkYSBhbCBjb25qdW50byBkZSBkYXRvcyB5IHN1IGltcGFjdG8gZW4gbGFzIHZhcmlhYmxlcy4NCg0KRXMgbmVjZXNhcmlvIGV2YWx1YXIgbGEgY2FsaWRhZCBkZSBsYSByZXByZXNlbnRhY2nDs24gZGUgbGFzIHZhcmlhYmxlcyBjdWFudGl0YXRpdmFzIGVuIHJlbGFjacOzbiBjb24gZWwgbsO6bWVybyBkZSBkaW1lbnNpb25lcyBjYWxjdWxhZGFzIHF1ZSBjYXB0dXJhbiBsYSBtYXlvciBwcm9wb3JjacOzbiBkZSB2YXJpYWJpbGlkYWQ7IHBhcmEgbcOhcyBkZXRhbGxlcywgY29uc3VsdGFyIGxhIFtzZWNjacOzbiAyLjNdKCNzZWMyLjMpLg0KDQojIyMgMi41ICBEZXNhcnJvbGxvIGRlbCBBbsOhbGlzaXMuIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCkV4cGxvcmFyIGxhcyBwZXN0YcOxYXMgcmV2ZWxhIHF1ZSByZWR1Y2lyIGxhIGRpbWVuc2lvbmFsaWRhZCBkZWwgY29uanVudG8gZGUgZGF0b3MgcGVybWl0ZSBhbmFsaXphciBsYSBjYWxpZGFkIGRlIGxhIHJlcHJlc2VudGFjacOzbiwgdXNhbmRvIHVuYSBlc2NhbGEgZGUgY29udHJpYnVjaW9uZXMgcmVsYXRpdmFzLg0KDQpFbCBDw61yY3VsbyBkZSBDb3JyZWxhY2lvbmVzIGV4cHJlc2EgcXVlIHNlIHB1ZWRlbiBpZGVudGlmaWNhciBwYXRyb25lcyBzaWduaWZpY2F0aXZvcyBlbnRyZSBsYXMgdmFyaWFibGVzIG9yaWdpbmFsZXMgZW4gZWwgbWFyY28gZGUgdW5hIHNlbGVjY2nDs24gZGUgY29tcG9uZW50ZXMgcHJpbmNpcGFsZXMuIEVuIGVzdGUgY2FzbywgbGEgZGltZW5zacOzbiAxICgqRGltMSopLCBxdWUgZXhwbGljYSBlbCA1Ny44JSBkZSBsYSB2YXJpYW56YSwgbXVlc3RyYSB1bmEgY29ycmVsYWNpw7NuIHBvc2l0aXZhIGNvbiB2YXJpYWJsZXMgY29tbyAqTWFya2V0Q2FwX1VwZGF0ZWRfTSosICpSZXZlbnVlc19NKiwgeSAqUHJvZml0c19NKiwgbGFzIGN1YWxlcyBlc3TDoW4gb3JpZW50YWRhcyBoYWNpYSBlc3RlIGVqZSB5IGNlcmNhbmFzIGEgbGEgZnJvbnRlcmEgZGVsIGPDrXJjdWxvIHVuaXRhcmlvLiBFc3RvIGluZGljYSBxdWUgZXN0YXMgdmFyaWFibGVzIGNvbnRyaWJ1eWVuIHNpZ25pZmljYXRpdmFtZW50ZSBhIGxhIGNvbnN0cnVjY2nDs24gZGUgKkRpbTEqLCBwcm9iYWJsZW1lbnRlIGNhcHR1cmFuZG8gY2FyYWN0ZXLDrXN0aWNhcyByZWxhY2lvbmFkYXMgY29uIGxhIG1hZ25pdHVkIGZpbmFuY2llcmEgZGUgbGFzIGVtcHJlc2FzLg0KDQpQb3Igb3RybyBsYWRvLCBsYSBkaW1lbnNpw7NuIDIgKCpEaW0yKiksIHF1ZSBleHBsaWNhIGVsIDE3LjglIGRlIGxhIHZhcmlhbnphLCBtdWVzdHJhIHVuYSBjb3JyZWxhY2nDs24gcG9zaXRpdmEgY29uIGxhIHZhcmlhYmxlICpOdW1iZXJfb2ZfZW1wbG95ZWVzKiwgcXVlIGVzdMOhIG3DoXMgYWxpbmVhZGEgY29uIGVzdGUgZWplLiBFc3RvIHN1Z2llcmUgcXVlICpEaW0yKiBwb2Ryw61hIGVzdGFyIGNhcHR1cmFuZG8gY2FyYWN0ZXLDrXN0aWNhcyByZWxhY2lvbmFkYXMgY29uIGxhIGVzdHJ1Y3R1cmEgbGFib3JhbCBvIGVsIHRhbWHDsW8gZGUgbGFzIGVtcHJlc2FzIGVuIHTDqXJtaW5vcyBkZSBzdSBwZXJzb25hbC4NCg0KRW4gY29uanVudG8sIGVsIGdyw6FmaWNvIHJlZmxlamEgcXVlIGxhcyBkaW1lbnNpb25lcyBwcmluY2lwYWxlcyBkaWZlcmVuY2lhbiBlbnRyZSBhc3BlY3RvcyBmaW5hbmNpZXJvcyB5IG9wZXJhdGl2b3MgZGUgbGFzIGVtcHJlc2FzLCBjb24gbGFzIHZhcmlhYmxlcyBtw6FzIGNlcmNhbmFzIGFsIGPDrXJjdWxvIGNvbnRyaWJ1eWVuZG8gbcOhcyBzaWduaWZpY2F0aXZhbWVudGUgYSBsYXMgcmVzcGVjdGl2YXMgZGltZW5zaW9uZXMuDQoNCmxhIE1hdHJpeiBkZSBSZXByZXNlbnRhY2nDs24gbXVlc3RyYSBxdWUgbGFzIHZhcmlhYmxlcyAqUmV2ZW51ZXNfTSosICpQcm9maXRzX00qIHkgKk1hcmtldENhcF9VcGRhdGVkX00qIHRpZW5lbiBhbHRvcyB2YWxvcmVzIGRlIGNvc2VubyBjdWFkcmFkbyBlbiByZWxhY2nDs24gY29uIGxhIERpbWVuc2nDs24gMSAoMC43OTMsIDAuNzYyIHkgMC42MjMzMDY2IHJlc3BlY3RpdmFtZW50ZSksIGxvIHF1ZSBpbmRpY2EgcXVlIGVzdMOhbiBmdWVydGVtZW50ZSBhc29jaWFkYXMgY29uIGVzdGUgY29tcG9uZW50ZSB5IGFwb3J0YW4gc2lnbmlmaWNhdGl2YW1lbnRlIGEgw6lsLiBFc3RvIHN1Z2llcmUgcXVlIGVzdGFzIHZhcmlhYmxlcyBmaW5hbmNpZXJhcyBjb250cmlidXllbiBtYXlvcm1lbnRlIGEgbGEgZXhwbGljYWNpw7NuIGRlIGxhIHZhcmlhYmlsaWRhZCBjYXB0dXJhZGEgcG9yIGVzdGEgZGltZW5zacOzbi4NCg0KKk51bWJlcl9vZl9lbXBsb3llZXMqIG11ZXN0cmEgdW5hIHJlcHJlc2VudGFjacOzbiBlcXVpbGlicmFkYSBlbnRyZSBsYSBEaW1lbnNpw7NuIDEgKDAuNDY2KSB5IGxhIERpbWVuc2nDs24gMiAoMC40NzQzNjU2OCksIHJlZmxlamFuZG8gdW5hIGNvbnRyaWJ1Y2nDs24gY29tcGFydGlkYSBlbnRyZSBhbWJhcywgcGVybyBzaWVuZG8gbGEgcXVlIG1hcyBhcG9ydGEgZW4gbGEgKkRpbWVuc2nDsm4gMiouDQoNCkVuIGNvbnRyYXN0ZSwgdmFyaWFibGVzIGNvbW8gKkFzc2V0c19NKiB0aWVuZSB2YWxvcmVzIGJham9zIGRlIGNvc2VubyBjdWFkcmFkbyBlbiBsYSAqRGltZW5zacOzbiAxKiAoMC4yNDcgcmVzcGVjdGl2YW1lbnRlKSwgbG8gcXVlIGluZGljYSBxdWUgc3UgdmFyaWFuemEgc2UgZGlzdHJpYnV5ZSBtw6FzIGhhY2lhIG90cmFzIGRpbWVuc2lvbmVzLiBFbiBwYXJ0aWN1bGFyLCAqQXNzZXRzX00qIHRpZW5lIHVuIHZhbG9yIGFsdG8gZGUgY29zZW5vIGN1YWRyYWRvIGVuIGxhICpEaW1lbnNpw7NuIDMqICgwLjY0OCksIGxvIHF1ZSBzdWdpZXJlIHF1ZSBlc3TDoSBtZWpvciByZXByZXNlbnRhZGEgcG9yIGVzdGUgY29tcG9uZW50ZS4NCg0KRWwgZ3LDoWZpY28gZGUgbGEgKkNhbGlkYWQgZGUgUmVwcmVzZW50YWNpw7NuKiBtdWVzdHJhIHF1ZSBsYXMgdmFyaWFibGVzIGVzdMOhbiByZXByZXNlbnRhZGFzIGNvbiB1bmEgYWx0YSBjYWxpZGFkIGVuIHJlbGFjacOzbiBjb24gbGFzIGRpbWVuc2lvbmVzIHByaW5jaXBhbGVzLCBlc3BlY2lhbG1lbnRlIHJlc3BlY3RvIGEgbGEgKmRpbWVuc2nDs24gMSosIHF1ZSBleHBsaWNhIHVuIDU3LjglIGRlIGxhIHZhcmlhbnphLiBFbiBwYXJ0aWN1bGFyLCAiKk1hcmtldENhcF9VcGRhdGVkX00qIiwgIipQcm9maXRzX00qIiwgeSAiKkFzc2V0c19NKiIgdGllbmVuIHZhbG9yZXMgZGUgY29zZW5vIGN1YWRyYWRvIGVsZXZhZG9zIHJlc3BlY3RvIGEgbGEgZGltZW5zacOzbiAxLCBpbmRpY2FuZG8gdW5hIGZ1ZXJ0ZSBhc29jaWFjacOzbiBjb24gZXN0ZSBjb21wb25lbnRlLiBFc3RvIGltcGxpY2EgcXVlIGVzdGFzIHZhcmlhYmxlcyBlc3TDoW4gYWx0YW1lbnRlIGNvcnJlbGFjaW9uYWRhcyBjb24gbGEgY29tcG9uZW50ZSBwcmluY2lwYWwsIGxvIHF1ZSBzdWdpZXJlIHN1IHJlbGV2YW5jaWEgZW4gbGEgZXhwbGljYWNpw7NuIGRlIGxhIHZhcmlhYmlsaWRhZCBkZWwgbW9kZWxvLg0KDQpQb3Igb3RybyBsYWRvLCBsYSAqZGltZW5zacOzbiAyKiwgcXVlIGV4cGxpY2EgdW4gMTcuOCUgZGUgbGEgdmFyaWFuemEsIHRpZW5lIHVuYSByZXByZXNlbnRhY2nDs24gbm90YWJsZSBkZSAiKlJldmVudWVzX00qIiB5ICIqTnVtYmVyX29mX2VtcGxveWVlcyoiLCBkZXN0YWNhbmRvIHN1IGltcG9ydGFuY2lhIHBhcmEgY2FwdHVyYXIgaW5mb3JtYWNpw7NuIGFkaWNpb25hbCBxdWUgbm8gZXN0w6EgY29udGVuaWRhIGVuIGxhIGRpbWVuc2nDs24gcHJpbmNpcGFsLiBBdW5xdWUgbGEgZGltZW5zacOzbiAxIGVzIGRvbWluYW50ZSwgbGEgKmRpbWVuc2nDs24gMiogYXBvcnRhIHVuIGNvbXBsZW1lbnRvIHNpZ25pZmljYXRpdm8gcGFyYSBpbnRlcnByZXRhciBhc3BlY3RvcyBlc3BlY8OtZmljb3MgZGUgZXN0YXMgdmFyaWFibGVzLiBMYSBlc2NhbGEgZGUgY29sb3JlcyByZWZ1ZXJ6YSBlc3RlIGFuw6FsaXNpcywgY29uIHZhbG9yZXMgZGUgY29zZW5vIGN1YWRyYWRvIG3DoXMgYWx0b3MgaW5kaWNhbmRvIHVuYSBtZWpvciBjYWxpZGFkIGRlIHJlcHJlc2VudGFjacOzbiBwYXJhIGNhZGEgdmFyaWFibGUgZW4gc3UgZGltZW5zacOzbiBjb3JyZXNwb25kaWVudGUuDQoNCg0KTGFzICpDb29yZGVuYWRhcyBJbmRpdmlkdWFsZXMqIHBlcm1pdGVuIGlkZW50aWZpY2FyIGxvcyBwZXJmaWxlcyBkZSBsb3MgcmVnaXN0cm9zIGVtcHJlc2FyaWFsZXMgZW4gcmVsYWNpw7NuIGNvbiBsYXMgZGltZW5zaW9uZXMgcHJpbmNpcGFsZXMgcXVlIGV4cGxpY2FuIGxhIHZhcmlhYmlsaWRhZCBkZSBsb3MgZGF0b3MgKCpjb21wb25lbnRlcyAxIHkgMiopLiBQb3IgZWplbXBsbywgZW4gbGEgKmRpbWVuc2nDs24gMSosIGxvcyByZWdpc3Ryb3MgMyB5IDIgcHJlc2VudGFuIHZhbG9yZXMgcG9zaXRpdm9zIGV4dHJlbW9zICgxOS4zOCB5IDE4LjY5LCByZXNwZWN0aXZhbWVudGUpLCBpbmRpY2FuZG8gY2FyYWN0ZXLDrXN0aWNhcyBzaW1pbGFyZXMgY29uIHVuYSBmdWVydGUgY29udHJpYnVjacOzbiBhIGVzdGEgZGltZW5zacOzbiwgbWllbnRyYXMgcXVlIGVsIHJlZ2lzdHJvIDYsIGNvbiB1biB2YWxvciBiYWpvICg1LjI3KSwgcmVwcmVzZW50YSB1biBjYXNvIG9wdWVzdG8uDQoNCkVuIGxhICpkaW1lbnNpw7NuIDIqLCBsb3MgcmVnaXN0cm9zIDEgeSAyIHRpZW5lbiB2YWxvcmVzIG5lZ2F0aXZvcyBkZXN0YWNhZG9zICgtMTcuMjQgeSAtOS4xNCwgcmVzcGVjdGl2YW1lbnRlKSwgbG8gcXVlIHN1Z2llcmUgdW5hIHByb3hpbWlkYWQgZW4gdMOpcm1pbm9zIGRlIGNvbXBvcnRhbWllbnRvIGVuIGVzdGEgZGltZW5zacOzbiwgbWllbnRyYXMgcXVlIGVsIHJlZ2lzdHJvIDgsIGNvbiB1biB2YWxvciBwb3NpdGl2byBub3RhYmxlICg1LjIxKSwgbXVlc3RyYSB1bmEgZGlyZWNjacOzbiBjb250cmFyaWEuDQoNCkVzdG9zIHBhdHJvbmVzIHJlZmxlamFuIGPDs21vIGxvcyByZWdpc3Ryb3Mgc2UgYWdydXBhbiBvIGRpdmVyZ2VuIGVuIGZ1bmNpw7NuIGRlIHN1cyBjb250cmlidWNpb25lcyBhIGxhcyBkaW1lbnNpb25lcyBwcmluY2lwYWxlcyBkZWwgYW7DoWxpc2lzIFBDQS4NCg0KKkNhZGEgcmVnaXN0cm8qIChvYnNlcnZhY2nDs24pIGVzIHByb3llY3RhZG8gZW4gdW4gZXNwYWNpbyBkZSBtZW5vciBkaW1lbnNpw7NuICgqRGltMSosICpEaW0yKiwgZXRjLiksIHF1ZSBjb21iaW5hIGxhcyB2YXJpYWJsZXMgb3JpZ2luYWxlcyBzZWfDum4gc3VzIHJlbGFjaW9uZXMgKCpjb3JyZWxhY2lvbmVzKikuDQpQb3IgZWplbXBsbywgZWwgcmVnaXN0cm8gMywgY29uIHVuIHZhbG9yIGFsdG8gZW4gKkRpbTEqICgxOS4zOCkgeSB1biB2YWxvciBwb3NpdGl2byBlbiAqRGltMiogKDguMTYpLCBwcm9iYWJsZW1lbnRlIGNvcnJlc3BvbmRhIGEgdW5hIGVtcHJlc2EgY29uOg0KQWx0b3MgdmFsb3JlcyBlbiAiTWFya2V0Q2FwX1VwZGF0ZWRfTSIsICIqQXNzZXRzX00qIiwgeSAiKlByb2ZpdHNfTSoiLg0KUmVsYXRpdmFtZW50ZSBhbHRvcyB2YWxvcmVzIGVuICJOdW1iZXJfb2ZfZW1wbG95ZWVzIiBvICJSZXZlbnVlc19NIi4NCkVuIGNvbnRyYXN0ZSwgZWwgcmVnaXN0cm8gMSwgY29uIHZhbG9yZXMgbmVnYXRpdm9zIGV4dHJlbW9zIGVuICpEaW0yKiAoLTE3LjI0KSB5IHZhbG9yZXMgcG9zaXRpdm9zIGVuICpEaW0xKiAoMTcuMzYpLCBwb2Ryw61hIHJlcHJlc2VudGFyIHVuYSBlbXByZXNhIGNvbjoNCkFsdG9zIHZhbG9yZXMgZW4gKkRpbTEqIChzaW1pbGFyIGFsIHJlZ2lzdHJvIDMpIHBhcmEgdmFyaWFibGVzIGNvbW8gIipNYXJrZXRDYXBfVXBkYXRlZF9NKiIuDQpCYWpvcyB2YWxvcmVzIGVuIHZhcmlhYmxlcyBhc29jaWFkYXMgYSAqRGltMiosIGNvbW8gIipOdW1iZXJfb2ZfZW1wbG95ZWVzIiouDQoNCg0KIyMjIyBjaXJjdWxvIGRlIGNvcnJlbGFjaW9uZXMNCmBgYHtyIGNpcmN1bG9fZGVfY29ycmVsYWNpb25lcywgZmlnLmFsaWduPSdjZW50ZXInfQ0KZnZpel9wY2FfdmFyKFBDQShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0b1ssLWMoMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTYsMTcsMTgsMTkpXSwgc2NhbGUudW5pdCA9IFQsIGdyYXBoID0gRiksY29sLnZhcj0iIzNCODNCRCIsIHJlcGVsID0gVCwgY29sLmNpcmNsZSA9ICIjQ0RDRENEIiwgZ2d0aGVtZSA9IHRoZW1lX2J3KCkpDQpgYGANCg0KIyMjIyBNYXRyaXogZGUgUmVwcmVzZW50YWNpw7NuDQpgYGB7ciBNYXRyaXpfZGVfUmVwcmVzZW50YWNpb24sIGZpZy5hbGlnbj0nY2VudGVyJ30NCihnZXRfcGNhX3ZhcihQQ0EoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG9bLC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDE2LDE3LDE4LDE5KV0sIG5jcCA9IDYsIHNjYWxlLnVuaXQgPSBUUlVFLCBncmFwaCA9IEYpKSkkY29zMg0KYGBgDQoNCiMjIyMgQ2FsaWRhZCBkZSBSZXByZXNlbnRhY2nDs24NCmBgYHtyIENhbGlkYWRfZGVfUmVwcmVzZW50YWNpw7NuLCBmaWcuYWxpZ249J2NlbnRlcid9DQpmdml6X3BjYV92YXIoUENBKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvWywtYygxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxNiwxNywxOCwxOSldLCBuY3AgPSA2LCBzY2FsZS51bml0ID0gVFJVRSwgZ3JhcGggPSBGKSwgY29sLnZhcj0iY29zMiIsIGdyYWRpZW50LmNvbHM9YygiIzAwQUZCQiIsIiNFN0I4MDAiLCIjRkM0RTA3IiksIHJlcGVsID0gVFJVRSkNCmBgYA0KDQojIyMjIENvb3JkZW5hZGFzIEluZGl2aWR1YWxlcw0KYGBge3IgQ29vcmRlbmFkYXNfSW5kaXZpZHVhbGVzLCBmaWcuYWxpZ249J2NlbnRlcid9DQpoZWFkKChQQ0EoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG9bLC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDE2LDE3LDE4LDE5KV0sIG5jcCA9IDYsIHNjYWxlLnVuaXQgPSBUUlVFLCBncmFwaCA9IEYpKSRpbmQkY29vcmQsIG4gPSAxMEwpDQpgYGANCg0KDQojIyMgMi42LiBDb250cmlidWNpb25lcyB5IEJpcGxvdHMgey50YWJzZXQgLnRhYnNldC1waWxsc30NCkxvcyBhdXRvcmVzIFtAQUVETURpYXotTW9yYWxlczFlZF0gc2XDsWFsYW4gcXVlIGxhIGludGVycHJldGFjacOzbiBkZSBsb3MgcmVzdWx0YWRvcyBlc3TDoSBlc3RyZWNoYW1lbnRlIGxpZ2FkYSBhbCBjw6FsY3VsbyBkZSBlbGVtZW50b3MgY29tbyBjb29yZGVuYWRhcywgY29udHJpYnVjaW9uZXMgeSBjb3Nlbm9zIGN1YWRyYWRvcy4gUG9yIGxvIHRhbnRvLCBlcyBlc2VuY2lhbCBxdWUgbGFzIHZhcmlhYmxlcyBlc3TDqW4gYmllbiBjb25jZXB0dWFsaXphZGFzIHkgY29udGV4dHVhbGl6YWRhcyBwYXJhIGZhY2lsaXRhciBzdSBjb21wcmVuc2nDs24uIEVuIGVzdGUgc2VudGlkbywgYW5hbGl6YXIgbGEgY29udHJpYnVjacOzbiBkZSBjYWRhIHZhcmlhYmxlIGEgdW5hIGNvbXBvbmVudGUgYXl1ZGEgYSBpbnRlcnByZXRhciBsb3MgcmVzdWx0YWRvcywgbW9zdHJhbmRvIGPDs21vIGNhZGEgdW5hIGluZmx1eWUgZW4gbGEgZGVmaW5pY2nDs24gZGUgbGFzIGNvbXBvbmVudGVzIGdlbmVyYWRhcy4gRXN0ZSBhbsOhbGlzaXMgc2UgbGxldmEgYSBjYWJvIGVuIGVzdGEgc2VjY2nDs24gcGFyYSBkZXRlcm1pbmFyIGVsIGFwb3J0ZSBkZSBjYWRhIHZhcmlhYmxlIGVuIGxhIGNvbnN0cnVjY2nDs24gZGUgbGFzIGNvbXBvbmVudGVzLg0KDQojIyMgMi43LiBQbGFudGVhbWllbnRvIHkgRGVzYXJyb2xsbyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpCYXNhZG8gZW4gbGFzIHZhcmlhYmxlcyBjdWFudGl0YXRpdmFzIGRlbCBjb25qdW50byBkZSBkYXRvcyBkZXNjcml0byBlbiBsYSBbKnNlY2Npw7NuIDEuMipdLCBzZSByZXF1aWVyZSBkZXRlcm1pbmFyIGxhcyBjb250cmlidWNpb25lcyBkZSBjYWRhIHZhcmlhYmxlIGVuIGxhIGNvbnN0cnVjY2nDs24gZGUgbGFzIGNvbXBvbmVudGVzLg0KDQpMYSBNYXRyaXogZGUgQ29udHJpYnVjaW9uZXMgbXVlc3RyYSBjw7NtbyBjYWRhIHZhcmlhYmxlIGNvbnRyaWJ1eWUgYSBsYSByZXRlbmNpw7NuIGRlIHZhcmlhYmlsaWRhZCBlbiBsYSBjb25zdHJ1Y2Npw7NuIGRlIGNhZGEgY29tcG9uZW50ZS4gTG9zIGRpYWdyYW1hcyBkZSBiYXJyYXMsIHF1ZSBzZSB2aXN1YWxpemFuIGVuIGxhcyBwZXN0YcOxYXMgZGVzZGUgQ29udHJpYnVjaW9uZXMgYSBEMSBoYXN0YSBDb250cmlidWNpb25lcyBhIEQ1LCBpbHVzdHJhbiBsYXMgY29udHJpYnVjaW9uZXMgZXNwZWPDrWZpY2FzIGRlIGxhcyB2YXJpYWJsZXMgcGFyYSBleHBsaWNhciBsYSB2YXJpYWJpbGlkYWQgZW4gY2FkYSBjb21wb25lbnRlLiBDYWRhIGdyw6FmaWNvIGluY2x1eWUgdW5hIGzDrW5lYSBxdWUgaW5kaWNhIGxhIGNvbnRyaWJ1Y2nDs24gbWVkaWEsIGxvIHF1ZSBmYWNpbGl0YSBsYSBpZGVudGlmaWNhY2nDs24gZGUgbGFzIHZhcmlhYmxlcyBxdWUgdGllbmVuIG1heW9yIGltcGFjdG8gZW4gbGEgZXhwbGljYWNpw7NuIGRlIGxhIHZhcmlhYmlsaWRhZCBkZSBsb3MgY29tcG9uZW50ZXMuDQoNCipDb250cmlidWNpb25lcyBhIEQxKjpMYXMgdmFyaWFibGVzIHBvciBlbmNpbWEgZGUgbGEgY29udHJpYnVjacOzbiBtZWRpYTogKlJldmVudWVzX00qLCAqUHJvZml0c19NKiwgeSAqTWFya2V0Q2FwX1VwZGF0ZWRfTSosIHJldGllbmVuIGFwcm94aW1hZGFtZW50ZSBlbCAqNzUuMzQlKiBkZSBsYSB2YXJpYWJpbGlkYWQgZGVsIGNvbXBvbmVudGUgMS4NCkVzdG8gc3VnaWVyZSBxdWUgZXN0ZSBjb21wb25lbnRlIGVzdMOhIHByaW5jaXBhbG1lbnRlIGluZmx1aWRvIHBvciBlbCB0YW1hw7FvIGZpbmFuY2llcm8geSBlbCB2YWxvciBkZSBtZXJjYWRvIGRlIGxhcyBlbXByZXNhcy4NCg0KKkNvbnRyaWJ1Y2lvbmVzIGEgRDIqOkxhcyB2YXJpYWJsZXMgcG9yIGVuY2ltYSBkZSBsYSBjb250cmlidWNpw7NuIG1lZGlhOiAqTnVtYmVyX29mX2VtcGxveWVlcyosIHJldGllbmUgYXByb3hpbWFkYW1lbnRlIGVsICo1My4yJSogZGUgbGEgdmFyaWFiaWxpZGFkIGRlbCBjb21wb25lbnRlIDIuDQpFc3RlIGNvbXBvbmVudGUgcmVmbGVqYSBhc3BlY3RvcyByZWxhY2lvbmFkb3MgY29uIGVsIHRhbWHDsW8gbGFib3JhbC4NCg0KKkNvbnRyaWJ1Y2lvbmVzIGEgRDMqOkxhIHZhcmlhYmxlIHF1ZSBkb21pbmEgc2lnbmlmaWNhdGl2YW1lbnRlIGVzICpBc3NldHNfTSogeSAqTWFya2V0Q2FwX1VwZGF0ZWRfTSosIGxhIGN1YWwgcmV0aWVuZW4gZWwgKjk2LDUwJSogZGUgbGEgdmFyaWFiaWxpZGFkIGRlbCBjb21wb25lbnRlIDMuDQpFc3RvIGluZGljYSBxdWUgZWwgY29tcG9uZW50ZSAzIGVzdMOhIGZ1ZXJ0ZW1lbnRlIHJlbGFjaW9uYWRvIGNvbiBsb3MgYWN0aXZvcyBlbXByZXNhcmlhbGVzIHkgc3UgY290aXphY2nDsm4gZW4gYm9sc2EuDQoNCipDb250cmlidWNpb25lcyBhIEQ0KjpMYXMgdmFyaWFibGVzIHBvciBlbmNpbWEgZGUgbGEgY29udHJpYnVjacOzbiBtZWRpYSBzb24gKlJldmVudWVzX00qLCAqTnVtYmVyX29mX2VtcGxveWVlcyogeSAqTWFya2V0Q2FwX1VwZGF0ZWRfTSosIGxhcyBjdWFsZXMgcmV0aWVuZW4gY29uanVudGFtZW50ZSBhcHJveGltYWRhbWVudGUgZWwgKjg2LDY1JSogZGUgbGEgdmFyaWFiaWxpZGFkIGRlbCBjb21wb25lbnRlIDQuDQpFc3RlIGNvbXBvbmVudGUgZXN0w6EgYXNvY2lhZG8gYSBsYSBpbnRlcmFjY2nDs24gZW50cmUgaW5ncmVzb3MsIGxhIHBvdGVuY2lhIGRlIHByb2R1Y2Npw7JuIHkgY2FwaXRhbGl6YWNpw7NuIGRlIG1lcmNhZG8uDQoNCipDb250cmlidWNpb25lcyBhIEQ1KjpMYXMgdmFyaWFibGVzIG3DoXMgcmVwcmVzZW50YXRpdmFzIHNvbiAqUHJvZml0c19NKiwgKk1hcmtldENhcF9VcGRhdGVkX00qIHkgKlJldmVudWVzX00qLCBxdWUgcmV0aWVuZW4gYXByb3hpbWFkYW1lbnRlIGVsICo5MCwyJSogZGUgbGEgdmFyaWFiaWxpZGFkIGRlbCBjb21wb25lbnRlIDUuDQpFc3RvIHN1Z2llcmUgcXVlIGVzdGUgY29tcG9uZW50ZSByZWZsZWphIGFzcGVjdG9zIHJlbGFjaW9uYWRvcyBjb24gbGFzIGdhbmFuY2lhcywgbG9zIGluZ3Jlc29zIGVtcHJlc2FyaWFsZXMgeSBjYXBpdGFsaXphY2nDs24gZGUgbWVyY2Fkby4NCg0KTGFzIHBlc3Rhw7FhcyBkZSAqQmlwbG90IGRlIFZhcmlhYmxlcyB5IFJlZ2lzdHJvcyBUb3RhbGVzKiBlbiBsYXMgY2F0ZWdvcsOtYXMgUHJvZml0YWJsZSAocmVudGFibGUgbyBubyByZW50YWJsZSwgZG9uZGUgMCA9IG5vIHJlbnRhYmxlIHkgMSA9IHJlbnRhYmxlKSBtdWVzdHJhbiwgY29uIGJhc2UgZW4gbGFzIGFncnVwYWNpb25lcyBxdWUgZXN0YSB2YXJpYWJsZSBjYXRlZ8OzcmljYSBwdWVkZSBlc3RhYmxlY2VyLCBsYSByZXByZXNlbnRhY2nDs24gZW4gZGltZW5zaW9uYWxpZGFkIHJlZHVjaWRhIGVuIGVsIHBsYW5vIGRlIGZhY3RvcmVzIGdlbmVyYWRvIHBvciBsb3MgY29tcG9uZW50ZXMgcHJpbmNpcGFsZXMuDQoNCkVuIGVzdGUgc2VudGlkbzoNCg0KTGEgYWdydXBhY2nDs24gY29uIGJhc2UgZW4gUHJvZml0YWJsZSBwZXJtaXRlIG9ic2VydmFyIGPDs21vIGxhcyBlbXByZXNhcyByZW50YWJsZXMgKFByb2ZpdGFibGUgPSAxKSB0aWVuZGVuIGEgZXN0YXIgbcOhcyBkaXNwZXJzYXMgZW4gZWwgZXNwYWNpbyBnZW5lcmFkbyBwb3IgbGFzIGRpbWVuc2lvbmVzIERpbS4xIHkgRGltLjIsIGxvIGN1YWwgc3VnaWVyZSBxdWUgZXN0YXMgZW1wcmVzYXMgcG9zZWVuIGNhcmFjdGVyw61zdGljYXMgdmFyaWFkYXMgcmVsYWNpb25hZGFzIGNvbiBsYXMgdmFyaWFibGVzIGN1YW50aXRhdGl2YXMgcHJpbmNpcGFsZXMgKE1hcmtldENhcF9VcGRhdGVkX00sIFByb2ZpdHNfTSwgeSBSZXZlbnVlc19NKS4gRW4gcGFydGljdWxhciwgcmVnaXN0cm9zIGNvbW8gZWwgMzAsIDM0IHkgNDIgZGVzdGFjYW4gYWwgcHJveWVjdGFyc2UgbGVqb3MgZGVsIGNlbnRybywgbG8gcXVlIGluZGljYSBxdWUgc29uIGNhc29zIGV4Y2VwY2lvbmFsZXMgY29uIGFsdGEgaW5mbHVlbmNpYSBlbiBEaW0uMSBvIERpbS4yLg0KDQpQb3Igb3RybyBsYWRvLCBsYXMgZW1wcmVzYXMgbm8gcmVudGFibGVzIChQcm9maXRhYmxlID0gMCkgZXN0w6FuIG3DoXMgY29uY2VudHJhZGFzIGFscmVkZWRvciBkZWwgb3JpZ2VuIGVuIGVzdGUgcGxhbm8gZmFjdG9yaWFsLCBsbyBxdWUgcG9kcsOtYSBzdWdlcmlyIHF1ZSBzdXMgY2FyYWN0ZXLDrXN0aWNhcyBjdWFudGl0YXRpdmFzIHByZXNlbnRhbiBtZW5vcmVzIHZhcmlhY2lvbmVzIHkgZXN0w6FuIG1lbm9zIGFzb2NpYWRhcyBhIGxvcyBmYWN0b3JlcyBwcmluY2lwYWxlcy4NCg0KRW4gY3VhbnRvIGEgbGFzIHZhcmlhYmxlcywgbGEgZGltZW5zacOzbiBEaW0uMSAoNjAuOSUpIGVzdMOhIHByaW5jaXBhbG1lbnRlIGluZmx1aWRhIHBvciBNYXJrZXRDYXBfVXBkYXRlZF9NLCBQcm9maXRzX00sIHkgUmV2ZW51ZXNfTSwgbWllbnRyYXMgcXVlIGxhIGRpbWVuc2nDs24gRGltLjIgKDE3LjklKSByZWZsZWphIHVuYSBtYXlvciBhc29jaWFjacOzbiBjb24gTnVtYmVyX29mX2VtcGxveWVlcy4gDQoNCkVzdG8gc3VnaWVyZSBxdWUgbGEgcmVudGFiaWxpZGFkIGRlIGxhcyBlbXByZXNhcyBwb2Ryw61hIGVzdGFyIHByaW5jaXBhbG1lbnRlIGV4cGxpY2FkYSBwb3IgZWwgdGFtYcOxbyBmaW5hbmNpZXJvIHkgbGEgY2FwaXRhbGl6YWNpw7NuIGRlIG1lcmNhZG8sIG1pZW50cmFzIHF1ZSBlbCB0YW1hw7FvIGxhYm9yYWwgdGllbmUgdW4gcm9sIG3DoXMgc2VjdW5kYXJpbyBlbiBlc3RhIHJlcHJlc2VudGFjacOzbi4NCg0KDQoNCiMjIyMgTWF0cml6IGRlIENvbnRyaWJ1Y2lvbmVzDQpgYGB7ciBNYXRyaXpfZGVfQ29udHJpYnVjaW9uZXMsIGZpZy5hbGlnbj0nY2VudGVyJ30NCihnZXRfcGNhX3ZhcihQQ0EoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG9bLC1jKDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDE2LDE3LDE4LDE5KV0sIG5jcCA9IDYsIHNjYWxlLnVuaXQgPSBUUlVFLCBncmFwaCA9IEYpKSkkY29udHJpYg0KYGBgDQoNCiMjIyMgQ29udHJpYnVjaW9uZXMgYSBEMQ0KYGBge3IgQ29udHJpYnVjaW9uZXNfYV9EMSwgZmlnLmFsaWduPSdjZW50ZXInfQ0KZnZpel9jb250cmliKFBDQShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0b1ssLWMoMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTYsMTcsMTgsMTkpXSwgbmNwID0gNiwgc2NhbGUudW5pdCA9IFRSVUUsIGdyYXBoID0gRiksIGNob2ljZSA9ICJ2YXIiLCBheGVzID0gMSwgdG9wID0gMTApDQpgYGANCg0KIyMjIyBDb250cmlidWNpb25lcyBhIEQyDQpgYGB7ciBDb250cmlidWNpb25lc19hX0QyLCBmaWcuYWxpZ249J2NlbnRlcid9DQpmdml6X2NvbnRyaWIoUENBKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvWywtYygxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxNiwxNywxOCwxOSldLCBuY3AgPSA2LCBzY2FsZS51bml0ID0gVFJVRSwgZ3JhcGggPSBGKSwgY2hvaWNlID0gInZhciIsIGF4ZXMgPSAyLCB0b3AgPSAxMCkNCg0KDQpgYGANCg0KIyMjIyBDb250cmlidWNpb25lcyBhIEQzDQpgYGB7ciBDb250cmlidWNpb25lc19hX0QzLCBmaWcuYWxpZ249J2NlbnRlcid9DQpmdml6X2NvbnRyaWIoUENBKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvWywtYygxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxNiwxNywxOCwxOSldLCBuY3AgPSA2LCBzY2FsZS51bml0ID0gVFJVRSwgZ3JhcGggPSBGKSwgY2hvaWNlID0gInZhciIsIGF4ZXMgPSAzLCB0b3AgPSAxMCkNCg0KDQpgYGANCg0KIyMjIyBDb250cmlidWNpb25lcyBhIEQ0DQpgYGB7ciBDb250cmlidWNpb25lc19hX0Q0LCBmaWcuYWxpZ249J2NlbnRlcid9DQpmdml6X2NvbnRyaWIoUENBKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvWywtYygxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxNiwxNywxOCwxOSldLCBuY3AgPSA2LCBzY2FsZS51bml0ID0gVFJVRSwgZ3JhcGggPSBGKSwgY2hvaWNlID0gInZhciIsIGF4ZXMgPSA0LCB0b3AgPSAxMCkNCg0KYGBgDQoNCiMjIyMgQ29udHJpYnVjaW9uZXMgYSBENQ0KYGBge3IgQ29udHJpYnVjaW9uZXNfYV9ENSwgZmlnLmFsaWduPSdjZW50ZXInfQ0KZnZpel9jb250cmliKFBDQShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0b1ssLWMoMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTYsMTcsMTgsMTkpXSwgbmNwID0gNiwgc2NhbGUudW5pdCA9IFRSVUUsIGdyYXBoID0gRiksIGNob2ljZSA9ICJ2YXIiLCBheGVzID0gNSwgdG9wID0gMTApDQoNCg0KYGBgDQoNCiMjIyMgQmlwbG90cyBkZSBWYXJpYWJsZXMgeSBSZWdpc3Ryb3MgW2ZpbHRybzpQcm9maXRhYmxlXQ0KYGBge3IgQmlwbG90c19kZV9WYXJpYWJsZXNfeV9SZWdpc3Ryb3NfW2ZpbHRybzpQcm9maXRhYmxlXX0NCg0KY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8gPC0gcmVhZF9leGNlbCgiQzovQ1VSU09TLzR0byBTZW1lc3RyZS9DVVJTTyBHZEQgMjAyNF8gRzkvY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8ueGxzeCIpDQpWaWV3KGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvKQ0KDQpzZXQuc2VlZCgyMDA1MDMyNSkNCmNkZF9yYW5raW5nX2ZvcnR1bmVfTXVlc3RyYSA8LSBjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0b1tzYW1wbGUoMTpucm93KGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvKSwgNTApLC1jKDEsMiwzLDQsNiw3LDgsOSwxMCwxMSwxNiwxNywxOCwxOSldDQoNCmNkZF9yYW5raW5nX2ZvcnR1bmVfTXVlc3RyYSRQcm9maXRhYmxlIDwtIGFzLmZhY3RvcihjZGRfcmFua2luZ19mb3J0dW5lX011ZXN0cmEkUHJvZml0YWJsZSkNCg0KZnZpel9wY2FfYmlwbG90KFBDQShjZGRfcmFua2luZ19mb3J0dW5lX011ZXN0cmEgWyxdLCBuY3AgPSA1LCBzY2FsZS51bml0ID0gVFJVRSwgZ3JhcGggPSBGLCBxdWFsaS5zdXAgPSAiUHJvZml0YWJsZSIpLCBheGVzID0gYygxLDIpLCByZXBlbCA9IFRSVUUsIGhhYmlsbGFnZSA9ICJQcm9maXRhYmxlIikNCmBgYA0KDQojIyAqKkZhc2UgMyBbQ29ycmVzcG9uZGVuY2lhc10qKg0KDQojIyMgMy4xLiBPYmpldGl2b3MNCg0KRW4gZXN0YSB0ZXJjZXJhIGZhc2UgZGVsIGVzdHVkaW8sIHNlIHByZXNlbnRhcsOhbiBjw6FsY3Vsb3MsIHZpc3VhbGl6YWNpb25lcyBlIGludGVycHJldGFjaW9uZXMgYmFzYWRhcyBlbiBlbCBjb25qdW50byBkZSBkYXRvcyB0cmFiYWphZG8gZW4gbGEgW2Zhc2UgMV0oI3NlYzEpIHkgW2Zhc2UgMl0oI3NlYzIpLiBTaW4gZW1iYXJnbywgZXN0YSBmYXNlIHNlIGVuZm9jYXLDoSBlbiBhcGxpY2FyIGFuw6FsaXNpcyBkZSBjb3JyZXNwb25kZW5jaWFzIHNpbXBsZXMgeSBtw7psdGlwbGVzIHNvYnJlIGxhcyB2YXJpYWJsZXMgY3VhbGl0YXRpdmFzLCBhYmFyY2FuZG8gbGEgY29uc3RydWNjacOzbiBkZSB0YWJsYXMgZGUgY29udGluZ2VuY2lhIHkgZGlzeXVudGl2YXMgY29tcGxldGFzLCBhc8OtIGNvbW8gbGEgZXZhbHVhY2nDs24gZGUgY2FsaWRhZGVzIGRlIHJlcHJlc2VudGFjacOzbiwgY29udHJpYnVjaW9uZXMgZSBpbnRlcnByZXRhY2lvbmVzLg0KDQojIyMgMy4yLiBDb3JyZXNwb25kZW5jaWFzIFNpbXBsZXMgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KU2Vnw7puIFtAQU1BUkFsZGFzLVVyaWVsMmVkXSxlbCAqKmFuw6FsaXNpcyBkZSBjb3JyZXNwb25kZW5jaWFzKiogc2ltcGxlICoqKEFDUykqKiB0aWVuZSBjb21vIHByb3DDs3NpdG8gcmVkdWNpciBsYSBkaW1lbnNpb25hbGlkYWQgZGUgbGFzIHJlbGFjaW9uZXMgZW50cmUgY2F0ZWdvcsOtYXMgZGUgZG9zIHZhcmlhYmxlcyBjYXRlZ8OzcmljYXMsIHJlcHJlc2VudMOhbmRvbGFzIGVuIHVuIGVzcGFjaW8gbXVsdGlkaW1lbnNpb25hbC4gRXN0ZSBtw6l0b2RvIHBlcm1pdGUgYW5hbGl6YXIgZ3LDoWZpY2FtZW50ZSBsYXMgZGlzdGFuY2lhcyBlbnRyZSBsYXMgY2F0ZWdvcsOtYXMgZGUgbGFzIHZhcmlhYmxlcywgZmFjaWxpdGFuZG8gbGEgaW50ZXJwcmV0YWNpw7NuIGRlIHRhYmxhcyBkZSBjb250aW5nZW5jaWEuIEVsIG7Dum1lcm8gbcOheGltbyBkZSBkaW1lbnNpb25lcyBuZWNlc2FyaWFzIHBhcmEgZXhwbGljYXIgZGljaGFzIHJlbGFjaW9uZXMgY29ycmVzcG9uZGUgYSB1bm8gbWVub3MgZWwgbsO6bWVybyBkZSBjYXRlZ29yw61hcyBkZSBsYSB2YXJpYWJsZSBjb24gbWVub3IgY2FudGlkYWQgZGUgbml2ZWxlcy4NCg0KQXNpbWlzbW8sIGVsICoqQUNTKiosIGJhc2FkbyBlbiB0YWJsYXMgZGUgY29udGluZ2VuY2lhLCBwdWVkZSBhbXBsaWFyc2UgcGFyYSBpbmNsdWlyIG3DoXMgZGUgZG9zIHZhcmlhYmxlcyBjYXRlZ8OzcmljYXMsIGxvIHF1ZSBzZSBjb25vY2UgY29tbyAqKkFuw6FsaXNpcyBkZSBjb3JyZXNwb25kZW5jaWFzIG3Dumx0aXBsZXMgKEFDTSkqKi4gRXN0ZSBlbmZvcXVlIHV0aWxpemEgdW5hIHRhYmxhIGRpc3l1bnRpdmEgY29tcGxldGEsIHBlcm1pdGllbmRvIGV4cGxvcmFyIHkgcmVwcmVzZW50YXIgcmVsYWNpb25lcyBtw6FzIGNvbXBsZWphcyBlbnRyZSBtw7psdGlwbGVzIHZhcmlhYmxlcyBjYXRlZ8OzcmljYXMuDQoNCiMjIyAzLjMuIFBsYW50ZWFtaWVudG8geSBEZXNhcnJvbGxvIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCkxhIG5hdmVnYWNpw7NuIGEgdHJhdsOpcyBkZSBsYXMgcGVzdGHDsWFzIHBlcm1pdGUgdmlzdWFsaXphciBvYmpldG9zIG1hdHJpY2lhbGVzIHkgZ3LDoWZpY29zIHF1ZSBmb3J0YWxlY2VuIGxhIGludGVycHJldGFjacOzbiBkZWwgYW7DoWxpc2lzIGRlIGNvcnJlc3BvbmRlbmNpYXMgc2ltcGxlICoqKEFDUykqKiBhcGxpY2FkbyBhIGxvcyBwYXJlcyBkZSB2YXJpYWJsZXMgY2F0ZWfDs3JpY2FzIHNlbGVjY2lvbmFkYXMgZGVsIGNvbmp1bnRvIGRlIGRhdG9zOiAqKkNoZXN0UGFpbioqLCAqKlRhcmdldCoqIHkgKipHZW5kZXIqKi5TZSByZWFsaXphIGVsIEFDUyBzb2JyZSBsYXMgdHJlcyBjb21iaW5hY2lvbmVzIHBvc2libGVzIGVudHJlIGVzdGFzIHZhcmlhYmxlcywgZGVzdGFjYW5kbyBsYXMgcmVsYWNpb25lcyB5IHBhdHJvbmVzIHByZXNlbnRlcyBlbiBjYWRhIGFuw6FsaXNpcy4NCg0KTGEgcGVzdGHDsWEgKkFDIFBhcmVqYXMgVG90YWxlcyogbXVlc3RyYSBsYXMgY29tYmluYWNpb25lcyBlbnRyZSB2YXJpYWJsZXMgY2F0ZWfDs3JpY2FzIHNlbGVjY2lvbmFkYXMuDQoNCkVuIGxhIHRhYmxhICpQcm9maXRhYmxlKiB2cy4gKkZlbWFsZUNFTyosIHNlIG9ic2VydmEgcXVlIGxhIHJlbnRhYmlsaWRhZCBkZSBsYXMgZW1wcmVzYXMgbm8gcGFyZWNlIGVzdGFyIGFzb2NpYWRhIHNpZ25pZmljYXRpdmFtZW50ZSBhIHNpIGVsIENFTyBlcyBtdWplciwgY29uIDc3MiBkZSBsYXMgODUxIGVtcHJlc2FzIHJlbnRhYmxlcyBsaWRlcmFkYXMgcG9yIGhvbWJyZXMgeSB1biBwLXZhbG9yIGRlIDAuMzYwNiwgbG8gcXVlIG5vIHBlcm1pdGUgcmVjaGF6YXIgbGEgaGlww7N0ZXNpcyBkZSBpbmRlcGVuZGVuY2lhLg0KDQpFbiBsYSB0YWJsYSAqUHJvZml0YWJsZSB2cy4gQ29tcGFueV9UeXBlKiwgc2UgZGVzdGFjYSBxdWUgbGFzIGVtcHJlc2FzIHByaXZhZGFzIHRpZW5lbiBtYXlvciByZW50YWJpbGlkYWQsIGNvbiA4MjAgY2Fzb3MgZnJlbnRlIGEgMTM1IGRlIGxhcyBlbXByZXNhcyBww7pibGljYXMsIGxvIHF1ZSBldmlkZW5jaWEgdW5hIGFzb2NpYWNpw7NuIHNpZ25pZmljYXRpdmEgKHAtdmFsb3IgPSAwLjAwMzYpLg0KDQpGaW5hbG1lbnRlLCBlbiBsYSB0YWJsYSAqRmVtYWxlQ0VPIHZzLiBDb21wYW55X1R5cGUqLCBsYXMgbXVqZXJlcyBDRU8gcHJlZG9taW5hbiBlbiBlbXByZXNhcyBww7pibGljYXMgKDkwIGRlIDk3IGNhc29zKSwgYXVucXVlIGVsIGFuw6FsaXNpcyBzdWdpZXJlIHF1ZSBlc3RhIGFzb2NpYWNpw7NuIHBvZHLDrWEgbm8gc2VyIGNvbmZpYWJsZSBkZWJpZG8gYSBsb3MgYmFqb3MgdmFsb3JlcyBlc3BlcmFkb3MgZW4gYWxndW5hcyBjZWxkYXMgKGFkdmVydGVuY2lhIGVuIGxhIHBydWViYSBkZSBoaXDDs3Rlc2lzKS4NCg0KRXN0b3MgcmVzdWx0YWRvcyByZXNhbHRhbiBwYXRyb25lcyBjbGF2ZSBlbnRyZSByZW50YWJpbGlkYWQsIHRpcG8gZGUgZW1wcmVzYSB5IGxpZGVyYXpnbyBmZW1lbmluby4NCg0KTGEgc3VicGVzdGHDsWEgUHJvYmFiaWxpZGFkZXMgbXVlc3RyYSBsYXMgcHJvcG9yY2lvbmVzIHJlbGF0aXZhcyBlbnRyZSBsYXMgY29tYmluYWNpb25lcyBkZSB2YXJpYWJsZXMgY2F0ZWfDs3JpY2FzIGFuYWxpemFkYXMuIA0KDQpFbiBsYSB0YWJsYSAqUHJvZml0YWJsZSogdnMuICpGZW1hbGVDRU8qLCBlbCAkNzcuMiUkIGRlbCB0b3RhbCBjb3JyZXNwb25kZSBhIGVtcHJlc2FzIHJlbnRhYmxlcyBsaWRlcmFkYXMgcG9yIGhvbWJyZXMsIG1pZW50cmFzIHF1ZSBzb2xvIGVsICQxLjglJCBkZSBsYXMgZW1wcmVzYXMgbm8gcmVudGFibGVzIHRpZW5lbiB1bmEgbXVqZXIgY29tbyBDRU8uDQoNCkVuIGxhIHRhYmxhICpQcm9maXRhYmxlIHZzLiBDb21wYW55X1R5cGUqLCBlbCAkODIuMCUkIGRlbCB0b3RhbCBjb3JyZXNwb25kZSBhIGVtcHJlc2FzIHByaXZhZGFzIHJlbnRhYmxlcywgbWllbnRyYXMgcXVlIGxhcyBlbXByZXNhcyBww7pibGljYXMgbm8gcmVudGFibGVzIHJlcHJlc2VudGFuIGVsICQxLjQlJC4NCg0KRmluYWxtZW50ZSwgZW4gbGEgdGFibGEgKkZlbWFsZUNFTyB2cy4gQ29tcGFueV9UeXBlKiwgZWwgJDg2LjUlJCBkZWwgdG90YWwgY29ycmVzcG9uZGUgYSBlbXByZXNhcyBww7pibGljYXMgY29uIENFTyBob21icmUgeSBzb2xvIGVsICQwLjclJCBhIGVtcHJlc2FzIHByaXZhZGFzIGxpZGVyYWRhcyBwb3IgbXVqZXJlcy4NCg0KRW4gbGEgc3VicGVzdGHDsWEgKkZyZWN1ZW5jaWFzIFtDUEYgeSBDUENdKiwgc2UgcHJlc2VudGFuIGxhcyBmcmVjdWVuY2lhcyBjb25kaWNpb25hZGFzIHBvciBmaWxhcyAoQ1BGKSB5IHBvciBjb2x1bW5hcyAoQ1BDKSBkZXJpdmFkYXMgZGUgbGFzIHRhYmxhcyBkZSBjb250aW5nZW5jaWEuIFNlZ8O6biBsYSBtYXRyaXogQ1BGIGRlICpQcm9maXRhYmxlIHZzLiBGZW1hbGVDRU8qLCBlbCAkODcuOTIlJCBkZSBsYXMgZW1wcmVzYXMgbm8gcmVudGFibGVzIHNvbiBsaWRlcmFkYXMgcG9yIGhvbWJyZXMsIG1pZW50cmFzIHF1ZSBlbCAkOTAuNzIlJCBkZSBsYXMgZW1wcmVzYXMgcmVudGFibGVzIHRhbWJpw6luIHRpZW5lbiB1biBDRU8gaG9tYnJlLiBFbiBsYSBDUEMsIGVsICQ5NS43OSUkIGRlIGxhcyBlbXByZXNhcyBsaWRlcmFkYXMgcG9yIGhvbWJyZXMgc29uIHJlbnRhYmxlcyB5IGVsICQxMi4wOCUkIGRlIGxhcyBlbXByZXNhcyBubyByZW50YWJsZXMgc29uIGxpZGVyYWRhcyBwb3IgbXVqZXJlcy4NCg0KRW4gbGEgbWF0cml6IENQRiBkZSAqUHJvZml0YWJsZSB2cy4gQ29tcGFueV9UeXBlKiwgZWwgJDkwLjYwJSQgZGUgbGFzIGVtcHJlc2FzIHDDumJsaWNhcyBzb24gcmVudGFibGVzLCBtaWVudHJhcyBxdWUgZWwgJDk2LjM2JSQgZGUgbGFzIHByaXZhZGFzIHRhbWJpw6luIGxvIHNvbi4gRW4gbGEgQ1BDLCBlbCAkMTMuNSUkIGRlIGxhcyBlbXByZXNhcyBww7pibGljYXMgc29uIHJlbnRhYmxlcyBmcmVudGUgYWwgJDkuNCUkIGRlIGxhcyBubyByZW50YWJsZXMuDQoNClBvciDDumx0aW1vLCBlbiBsYSBtYXRyaXogQ1BGIGRlICpGZW1hbGVDRU8gdnMuIENvbXBhbnlfVHlwZSosIGVsICQ5NS43OSUkIGRlIGxhcyBlbXByZXNhcyBww7pibGljYXMgdGllbmVuIHVuIENFTyBob21icmUsIG1pZW50cmFzIHF1ZSBlbCAkOTIuNzglJCBkZSBsYXMgcHJpdmFkYXMgdGFtYmnDqW4gbG8gdGllbmVuLiBFbiBsYSBDUEMsIGVsICQ3LjIyJSQgZGUgbGFzIGVtcHJlc2FzIHByaXZhZGFzIHRpZW5lbiBDRU8gbXVqZXIgeSBlbCAkNC4yMSUkIGRlIGxhcyBlbXByZXNhcyBww7pibGljYXMgdGFtYmnDqW4gbG8gdGllbmVuLg0KDQpDb24gYmFzZSBlbiBsYXMgbWF0cmljZXMgZGUgZnJlY3VlbmNpYXMsIHNlIGFuYWxpemFuIGxvcyBwZXJmaWxlcyBjb25kaWNpb25hZG9zIHBvciBmaWxhcyAoQ1BGKSB5IGNvbHVtbmFzIChDUEMpIGRlIGxhcyB2YXJpYWJsZXMgKlByb2ZpdGFibGUtRmVtYWxlQ0VPLCBQcm9maXRhYmxlLUNvbXBhbnlfVHlwZSB5IEZlbWFsZUNFTy1Db21wYW55X1R5cGUqLCBsb3MgY3VhbGVzIHNlIHByZXNlbnRhbiBlbiBsYSBzdWJwZXN0YcOxYSBQZXJmaWxlcyBbQ1BGIHkgQ1BDXS4gTG9zIGdyw6FmaWNvcyBwZXJtaXRlbiBjb21wYXJhciBsYXMgcHJvcG9yY2lvbmVzIGNvbiB1biBwZXJmaWwgcHJvbWVkaW8sIGlkZW50aWZpY2FkbyBjb21vICJtYXJnIi4NCg0KKlBlcmZpbGVzIGRlIFByb2ZpdGFibGUgeSBGZW1hbGVDRU8qDQoNCkVuIGxvcyBwZXJmaWxlcyBmaWxhIChDUEYpLCBlbCAkODcuOTIlJCBkZSBsYXMgZW1wcmVzYXMgbm8gcmVudGFibGVzIHRpZW5lbiB1biBDRU8gaG9tYnJlLCBtaWVudHJhcyBxdWUgZWwgJDkwLjcyJSQgZGUgbGFzIGVtcHJlc2FzIHJlbnRhYmxlcyB0YW1iacOpbiB0aWVuZW4gdW4gQ0VPIGhvbWJyZS4NCkVuIGxvcyBwZXJmaWxlcyBjb2x1bW5hIChDUEMpLCBlbCAkOTUuNzklJCBkZSBsYXMgZW1wcmVzYXMgbGlkZXJhZGFzIHBvciBob21icmVzIHNvbiByZW50YWJsZXMsIG1pZW50cmFzIHF1ZSBzb2xvIGVsICQxMi4wOCUkIGRlIGxhcyBlbXByZXNhcyBubyByZW50YWJsZXMgc29uIGxpZGVyYWRhcyBwb3IgbXVqZXJlcy4NClBlcmZpbGVzIGRlIFByb2ZpdGFibGUgeSBDb21wYW55X1R5cGUNCg0KRW4gbG9zIHBlcmZpbGVzIGZpbGEgKENQRiksIGVsICQ5MC42MCUkIGRlIGxhcyBlbXByZXNhcyBww7pibGljYXMgc29uIHJlbnRhYmxlcywgbWllbnRyYXMgcXVlIGVsICQ5Ni4zNiUkIGRlIGxhcyBwcml2YWRhcyB0YW1iacOpbiBsbyBzb24uDQoNCkVuIGxvcyBwZXJmaWxlcyBjb2x1bW5hIChDUEMpLCBlbCAkMTMuNSUkIGRlIGxhcyBlbXByZXNhcyBww7pibGljYXMgc29uIHJlbnRhYmxlcyBmcmVudGUgYWwgJDkuNCUkIGRlIGxhcyBubyByZW50YWJsZXMuDQoNClBlcm8gZXN0byBubyBpbXBsaWNhIHF1ZSBsYSByZW50YWJpbGlkYWQgZGUgbGFzIGVtcHJlc2FzIGRlcGVuZGEgZGVsIGfDqW5lcm8gZGVsIENFTy4gVGFudG8gbGFzIGNvbXBhw7HDrWFzIGRpcmlnaWRhcyBwb3IgaG9tYnJlcyBjb21vIGxhcyBkaXJpZ2lkYXMgcG9yIG11amVyZXMgbXVlc3RyYW4gcHJvcG9yY2lvbmVzIHNpbWlsYXJlcyBkZSByZW50YWJpbGlkYWQuIExhIG1heW9yIHByZXNlbmNpYSBkZSBob21icmVzIGVuIGVzdG9zIHJvbGVzIHJlZmxlamEgdGVuZGVuY2lhcyBlc3RydWN0dXJhbGVzIGRlIGxhcyBjb21wYcOxaWFzDQoqUGVyZmlsZXMgZGUgUHJvZml0YWJsZSB2cy4gQ29tcGFueV9UeXBlKg0KDQpFbCA5NS41JSBkZSBsYXMgZW1wcmVzYXMgZGVsIHJhbmtpbmcgc29uIHDDumJsaWNhcywgbWllbnRyYXMgcXVlIHNvbG8gZWwgNC41JSBzb24gcHJpdmFkYXMuDQpMYSByZW50YWJpbGlkYWQgZXMgbm90YWJsZW1lbnRlIG3DoXMgYWx0YSBlbiBlbXByZXNhcyBww7pibGljYXMgKDg1LjglKSBlbiBjb21wYXJhY2nDs24gY29uIGxhcyBwcml2YWRhcyAoNjguOSUpLg0KDQpFc3RvIGluZGljYSBxdWUgZWwgdGlwbyBkZSBlbXByZXNhIChww7pibGljYSBvIHByaXZhZGEpIHB1ZWRlIGVzdGFyIGFzb2NpYWRvIGNvbiBsYSByZW50YWJpbGlkYWQsIHBvc2libGVtZW50ZSBkZWJpZG8gYSBmYWN0b3JlcyBjb21vIGFjY2VzbyBhIGNhcGl0YWwsIGluZ3Jlc29zLCBnYW5hbmNpYXMgLCBhY3Rpdm9zICBvIHRhbWHDsW8gZGUgbGEgZW1wcmVzYS4NCg0KDQoqUGVyZmlsZXMgZGUgRmVtYWxlQ0VPIHkgQ29tcGFueV9UeXBlKg0KDQpFbiBsb3MgcGVyZmlsZXMgZmlsYSAoQ1BGKSwgZWwgJDk1Ljc5JSQgZGUgbGFzIGVtcHJlc2FzIHDDumJsaWNhcyB0aWVuZW4gQ0VPIGhvbWJyZSwgbWllbnRyYXMgcXVlIGVsICQ5Mi43OCUkIGRlIGxhcyBwcml2YWRhcyB0YW1iacOpbiB0aWVuZW4gQ0VPIGhvbWJyZS4NCkVuIGxvcyBwZXJmaWxlcyBjb2x1bW5hIChDUEMpLCBlbCAkNy4yMiUkIGRlIGxhcyBlbXByZXNhcyBwcml2YWRhcyB0aWVuZW4gQ0VPIG11amVyIHkgZWwgJDQuMjElJCBkZSBsYXMgZW1wcmVzYXMgcMO6YmxpY2FzIHRhbWJpw6luIGxvIHRpZW5lbi4NCg0KRXN0byBwb2Ryw61hIHN1Z2VyaXIgcXVlIGxhcyBlbXByZXNhcyBwcml2YWRhcyBvZnJlY2VuIGxpZ2VyYW1lbnRlIG3DoXMgb3BvcnR1bmlkYWRlcyBwYXJhIHF1ZSBtdWplcmVzIG9jdXBlbiBjYXJnb3MgZGUgQ0VPLCBhdW5xdWUgc2lndWVuIGVzdGFuZG8gZW4gZGVzdmVudGFqYSBmcmVudGUgYSBsb3MgaG9tYnJlcw0KDQpDb24gYmFzZSBlbiBsYXMgZGVzY3JpcGNpb25lcyByZWFsaXphZGFzLCBlcyBwb3NpYmxlIGFudGljaXBhciBxdWUgbG9zIHBhcmVzIGRlIHZhcmlhYmxlcyBjYXRlZ8OzcmljYXMgKlByb2ZpdGFibGUgdnMuIEZlbWFsZUNFTyB5IEZlbWFsZUNFTyB2cy4gQ29tcGFueV9UeXBlKiBzb24gaW5kZXBlbmRpZW50ZXMsIG1pZW50cmFzIHF1ZSBlbCBwYXIgKlByb2ZpdGFibGUgdnMuIENvbXBhbnlfVHlwZSogbXVlc3RyYSBkZXBlbmRlbmNpYSBzaWduaWZpY2F0aXZhLiBFc3RlIGp1aWNpbyBzZSBmdW5kYW1lbnRhIGVuIGxvcyByZXN1bHRhZG9zIGRlIGxhcyBwcnVlYmFzIGRlIGhpcMOzdGVzaXMsIGxhcyBjdWFsZXMgc2UgdmlzdWFsaXphcm9uIGVuIGxhIHN1YnBlc3Rhw7FhIGNvcnJlc3BvbmRpZW50ZS4gUGFyYSBlc3RhcyBwcnVlYmFzLCB5IGNvbnNpZGVyYW5kbyB1biBuaXZlbCBkZSBzaWduaWZpY2FuY2lhICRcYWxwaGEgPSAwLjA1JCwgc2UgZm9ybXVsYXJvbiBsYXMgc2lndWllbnRlcyBoaXDDs3Rlc2lzOg0K8J2QuyQkSF8wOiBcdGV4dCB7TGFzIHZhcmlhYmxlcyBjYXRlZ8OzcmljYXMgc29uIGluZGVwZW5kaWVudGVzfSQkICQkSF8xOiBcdGV4dCB7bGFzIHZhcmlhYmxlcyBjYXRlZ8OzcmljYXMgc29uIGRlcGVuZGllbnRlc30kJA0KDQpMb3MgcmVzdWx0YWRvcyBkZSBsYXMgcHJ1ZWJhcyBkZSBoaXDDs3Rlc2lzIGluZGljYW4gcXVlIFByb2ZpdGFibGUgdnMuIEZlbWFsZUNFTyAoJHAgPSAwLjM2MDYkKSB5IEZlbWFsZUNFTyB2cy4gQ29tcGFueV9UeXBlICgkcCA9IDAuMjcxMSQpIHNvbiBpbmRlcGVuZGllbnRlcywgbWllbnRyYXMgcXVlIFByb2ZpdGFibGUgdnMuIENvbXBhbnlfVHlwZSBtdWVzdHJhIGRlcGVuZGVuY2lhIHNpZ25pZmljYXRpdmEgKCRwID0gMC4wMDM2JCkuIERlYmlkbyBhIGVzdG8sIHBhcmEgbG9zIGFuw6FsaXNpcyBwb3N0ZXJpb3JlcyBzZSBkZWNpZGnDsyB0cmFiYWphciDDum5pY2FtZW50ZSBjb24gZWwgcGFyIFByb2ZpdGFibGUgdnMuIENvbXBhbnlfVHlwZSwgZGFkYSBzdSBmdWVydGUgYXNvY2lhY2nDs24geSByZWxldmFuY2lhIGVuIGVzdGUgY29udGV4dG8gZW1wcmVzYXJpYWwuDQoNCkEgdHJhdsOpcyBkZSBsYSBwZXN0YcOxYSAqQUMgUGFyZWphIMOabmljYSosIHNlIGRlc3BsaWVnYW4gbGFzIHN1Yi1wZXN0YcOxYXMgY29ycmVzcG9uZGllbnRlcyBhbCBhbsOhbGlzaXMgZGUgY29ycmVzcG9uZGVuY2lhcyBwYXJhIGVsIHBhciBkZSB2YXJpYWJsZXMgKlByb2ZpdGFibGUtQ29tcGFueV9UeXBlKi4NCg0KRW4gbGEgc3ViLXBlc3Rhw7FhIENvbnRpbmdlbmNpYXMgeSBSZXNpZHVhbGVzICpbUHJvZml0YWJsZS1Db21wYW55X1R5cGVdKiwgc2UgdmlzdWFsaXphbiBsYXMgdGFibGFzIGRlIGNvbnRpbmdlbmNpYXMsIHZhbG9yZXMgZXNwZXJhZG9zIHkgcmVzaWR1YWxlcyBwYXJhIGVzdGFzIHZhcmlhYmxlcy4gRGUgbGFzIHRhYmxhcyBzZSBvYnNlcnZhIHF1ZSBsb3MgcmVjdWVudG9zIG9ic2VydmFkb3MgeSBlc3BlcmFkb3MgYmFqbyBsYSBoaXDDs3Rlc2lzIG51bGEgcHJlc2VudGFuIGRpZmVyZW5jaWFzIGVuIGxhcyBjb21iaW5hY2lvbmVzLiBQb3IgZWplbXBsbywgZWwgdmFsb3Igb2JzZXJ2YWRvIHBhcmEgKlByb2ZpdGFibGUqID0gMCB5ICpDb21wYW55X1R5cGUqID0gMCBlcyAqMTQsIG1pZW50cmFzIHF1ZSBlbCBlc3BlcmFkbyBlcyA2LjcwNSosIG1vc3RyYW5kbyB1bmEgbm90YWJsZSBkZXN2aWFjacOzbi4gTG9zIHJlc2lkdWFsZXMgZGUgUGVhcnNvbiB5IGxvcyByZXNpZHVhbGVzIGVzdGFuZGFyaXphZG9zIHJldmVsYW4gcXVlIGxhIG1heW9yIGRlc3ZpYWNpw7NuIHBvc2l0aXZhIG9jdXJyZSBlbiBsYSBjYXRlZ29yw61hICpQcm9maXRhYmxlID0gMCwgQ29tcGFueV9UeXBlID0gMCosIG1pZW50cmFzIHF1ZSBsYXMgY29tYmluYWNpb25lcyBjb24gdmFsb3JlcyBuZWdhdGl2b3MgcmVmbGVqYW4gZGVzdmlhY2lvbmVzIGVuIGVsIHNlbnRpZG8gY29udHJhcmlvLg0KDQpBc2ltaXNtbywgZW4gbGEgc3ViLXBlc3Rhw7FhIENvbnRyaWJ1Y2lvbmVzICpbUHJvZml0YWJsZS1Db21wYW55X1R5cGVdKiwgc2UgaWRlbnRpZmljYSBxdWUgbGEgY2F0ZWdvcsOtYSAqQ29tcGFueV9UeXBlID0gMCBjb24gUHJvZml0YWJsZSA9IDAgKiB0aWVuZSBsYSBjb250cmlidWNpw7NuIG3DoXMgYWx0YSBhbCBlc3RhZMOtc3RpY28gY2hpLWN1YWRyYWRvICooOTMuNjclKSosIGluZGljYW5kbyBxdWUgZXN0YSBjb21iaW5hY2nDs24gKnRpZW5lIGVsIG1heW9yIHBlc28gZW4gbGEgcmVsYWNpw7NuIGVudHJlIGxhcyB2YXJpYWJsZXMqLiBFbiBjYW1iaW8sIGxhcyBjb21iaW5hY2lvbmVzIGNvbiAqUHJvZml0YWJsZSA9IDEgeSBDb21wYW55X1R5cGUgPSAxKiAqcHJlc2VudGFuIGNvbnRyaWJ1Y2lvbmVzIG11eSBiYWphcyosIGxvIHF1ZSBzdWdpZXJlIHF1ZSB0aWVuZW4gbWVub3IgaW1wYWN0byBlbiBsYSBhc29jaWFjacOzbiBlbnRyZSBsYXMgdmFyaWFibGVzLg0KDQpQb3Igw7psdGltbywgZWwgcmVzdWx0YWRvIGRlbCBhbsOhbGlzaXMgZGUgY29ycmVzcG9uZGVuY2lhcyBzaW1wbGUgc2UgcHJlc2VudGEgZW4gbGEgc3ViLXBlc3Rhw7FhICpDb3JyZXNwb25kZW5jaWEgU2ltcGxlIFVuaWRpbWVuc2lvbmFsIFtQcm9maXRhYmxlLUNvbXBhbnlfVHlwZV0qLiBFbiBlc3RlIGFwYXJ0YWRvLCBzZSBvYnNlcnZhIHF1ZSB1bmEgw7puaWNhIGRpbWVuc2nDs24gKmV4cGxpY2EgZWwgMTAwJSogZGUgbGEgdmFyaWFiaWxpZGFkIGVudHJlIGxhcyB2YXJpYWJsZXMuIExhcyBjb29yZGVuYWRhcyBwcm95ZWN0YWRhcyBkZSBsYXMgY2F0ZWdvcsOtYXMgbXVlc3RyYW4gcXVlICpDb21wYW55X1R5cGUgPSAwIHkgQ29tcGFueV9UeXBlID0gMSogZXN0w6FuIGVuIGV4dHJlbW9zIG9wdWVzdG9zIGRlbCBlamUgdW5pZGltZW5zaW9uYWwsIGNvbiBsYSBwcmltZXJhIHRlbmllbmRvIG1heW9yIGNvbnRyaWJ1Y2nDs24gKDg1LjElKS4gUG9yIG90cm8gbGFkbywgbGFzIGNhdGVnb3LDrWFzIGRlICpQcm9maXRhYmxlKiByZWZsZWphbiB1biBjb21wb3J0YW1pZW50byBzaW1pbGFyLCBjb24gKlByb2ZpdGFibGUgPSAwKiBwcm95ZWN0w6FuZG9zZSBtw6FzIGFsZWphZG8gZW4gY29tcGFyYWNpw7NuIGNvbiAqUHJvZml0YWJsZSA9IDEqLCBsbyBxdWUgcmVmdWVyemEgbGEgcmVsYWNpw7NuIHNpZ25pZmljYXRpdmEgZW50cmUgbGFzIHZhcmlhYmxlcy4NCg0KRW4gY29uanVudG8sIGxvcyByZXN1bHRhZG9zIHN1Z2llcmVuIHVuYSBhc29jaWFjacOzbiBzaWduaWZpY2F0aXZhIGVudHJlIGxhcyB2YXJpYWJsZXMgKlByb2ZpdGFibGUgeSBDb21wYW55X1R5cGUqLiBMYXMgY2F0ZWdvcsOtYXMgZXh0cmVtYXMgZGUgYW1iYXMgdmFyaWFibGVzLCBlc3BlY2lhbG1lbnRlICpDb21wYW55X1R5cGUgPSAwIHkgUHJvZml0YWJsZSA9IDAqLCB0aWVuZW4gdW4gbWF5b3IgaW1wYWN0byBlbiBsYSBjb25maWd1cmFjacOzbiBkZSBsYSByZWxhY2nDs24sIG1pZW50cmFzIHF1ZSBsYXMgb3RyYXMgY29tYmluYWNpb25lcyBwcmVzZW50YW4gY29udHJpYnVjaW9uZXMgbWVub3Jlcy4gRXN0ZSBhbsOhbGlzaXMgc3VicmF5YSBsYSAqaW1wb3J0YW5jaWEgZGUgbGFzIGRpZmVyZW5jaWFzIGVuIGVsIHRpcG8gZGUgY29tcGHDscOtYSBwYXJhIGRldGVybWluYXIgc3UgcmVudGFiaWxpZGFkKi4NCg0KDQojIyMjIEFDIFBhcmVqYXMgVG90YWxlcyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQojIyMjIyBUYWJsYXMgZGUgQ29udGluZ2VuY2lhcw0KYGBge3IgVGFibGFzX2RlX0NvbnRpbmdlbmNpYXMsIGZpZy5hbGlnbj0nY2VudGVyJ30NCmFkZG1hcmdpbnModGFibGUoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kUHJvZml0YWJsZSwgY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kRmVtYWxlQ0VPKSkNCg0KYWRkbWFyZ2lucyh0YWJsZShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRQcm9maXRhYmxlLCBjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRDb21wYW55X1R5cGUpKQ0KDQphZGRtYXJnaW5zKHRhYmxlKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJEZlbWFsZUNFTywgY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kQ29tcGFueV9UeXBlKSkNCmBgYA0KDQojIyMjIyBQcm9iYWJpbGlkYWRlcw0KYGBge3IgUHJvYmFiaWxpZGFkZXMsIGZpZy5hbGlnbj0nY2VudGVyJ30NCmFkZG1hcmdpbnMocHJvcC50YWJsZSh0YWJsZShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRQcm9maXRhYmxlLCBjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRGZW1hbGVDRU8pKSoxMDApDQoNCmFkZG1hcmdpbnMocHJvcC50YWJsZSh0YWJsZShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRQcm9maXRhYmxlLCBjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRDb21wYW55X1R5cGUpKSoxMDApDQoNCmFkZG1hcmdpbnMocHJvcC50YWJsZSh0YWJsZShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRGZW1hbGVDRU8sIGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJENvbXBhbnlfVHlwZSkpKjEwMCkNCmBgYA0KDQojIyMjIyBGcmVjdWVuY2lhcyBbQ1BGIHkgQ1BDXQ0KYGBge3IgRnJlY3VlbmNpYXNfW0NQRiB5IENQQ10sIGZpZy5hbGlnbj0nY2VudGVyJ30NCnJvdW5kKGFkZG1hcmdpbnMocHJvcC50YWJsZSh0YWJsZShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRQcm9maXRhYmxlLCBjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRGZW1hbGVDRU8pLCAxKSoxMDAsIDIpLCAyKQ0KDQpyb3VuZChhZGRtYXJnaW5zKHByb3AudGFibGUodGFibGUoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kUHJvZml0YWJsZSwgY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kQ29tcGFueV9UeXBlKSwgMSkqMTAwLCAyKSwgMikNCg0Kcm91bmQoYWRkbWFyZ2lucyhwcm9wLnRhYmxlKHRhYmxlKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJEZlbWFsZUNFTywgY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kQ29tcGFueV9UeXBlKSwgMSkqMTAwLCAyKSwgMikNCmBgYA0KDQojIyMjIyBQZXJmaWxlcyBbQ1BGIHkgQ1BDXQ0KYGBge3IgUGVyZmlsZXNfW0NQRiB5IENQQ10sIGZpZy5hbGlnbj0nY2VudGVyJ30NCnBsb3RjdCh0YWJsZShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRQcm9maXRhYmxlLCBjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRGZW1hbGVDRU8pLCJyb3ciKQ0KDQpwbG90Y3QodGFibGUoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kUHJvZml0YWJsZSwgY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kQ29tcGFueV9UeXBlKSwicm93IikNCg0KcGxvdGN0KHRhYmxlKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJEZlbWFsZUNFTywgY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kQ29tcGFueV9UeXBlKSwicm93IikNCg0KYGBgDQoNCiMjIyMjIFBydWViYXMgZGUgSGlww7N0ZXNpcw0KYGBge3IgUHJ1ZWJhc19kZV9IaXDDs3Rlc2lzfQ0KY2hpc3EudGVzdCh0YWJsZShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRQcm9maXRhYmxlLCBjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRGZW1hbGVDRU8pKQ0KDQpjaGlzcS50ZXN0KHRhYmxlKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJFByb2ZpdGFibGUsIGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJENvbXBhbnlfVHlwZSkpDQoNCmNoaXNxLnRlc3QodGFibGUoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kRmVtYWxlQ0VPLCBjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRDb21wYW55X1R5cGUpKQ0KYGBgDQoNCg0KIyMjIyBBQyBQYXJlamEgw5puaWNhIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCiMjIyMjIENvbnRpbmdlbmNpYXMgeSBSZXNpZHVhbGVzIFtULUNQXQ0KYGBge3IgQ29udGluZ2VuY2lhc195X1Jlc2lkdWFsZXNfW1QtQ1BdLGZpZy5hbGlnbj0nY2VudGVyJ30NCg0KY2hpc3EudGVzdCh0YWJsZShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRQcm9maXRhYmxlLCBjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRDb21wYW55X1R5cGUpKSRvYnNlcnZlZA0KDQpjaGlzcS50ZXN0KHRhYmxlKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJFByb2ZpdGFibGUsIGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJENvbXBhbnlfVHlwZSkpJGV4cGVjdGVkDQoNCmNoaXNxLnRlc3QodGFibGUoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kUHJvZml0YWJsZSwgY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kQ29tcGFueV9UeXBlKSkkcmVzaWR1YWxzDQoNCmNoaXNxLnRlc3QodGFibGUoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kUHJvZml0YWJsZSwgY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kQ29tcGFueV9UeXBlKSkkc3RkcmVzDQoNCg0KYGBgDQoNCiMjIyMjIENvbnRyaWJ1Y2lvbmVzIFtULUNQXQ0KYGBge3IgQ29udHJpYnVjaW9uZXNfW1QtQ1BdLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCiMgQ29udHJpYnVjacOzbiBwb3JjZW50dWFsIGFsIGVzdGFkw61zdGljbyBjaGktY3VhZHJhZG8NCmNoaXNxLnRlc3QodGFibGUoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kUHJvZml0YWJsZSwgY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kQ29tcGFueV9UeXBlKSkkcmVzaWR1YWxzXjIgLyANCmNoaXNxLnRlc3QodGFibGUoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kUHJvZml0YWJsZSwgY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kQ29tcGFueV9UeXBlKSkkc3RhdGlzdGljICogMTAwDQoNCg0KYGBgDQoNCiMjIyMjIENvcnJlc3BvbmRlbmNpYSBTaW1wbGUgVW5pZGltZW5zaW9uYWwgW1ItVVJdDQpgYGB7ciBDb3JyZXNwb25kZW5jaWFfU2ltcGxlX1VuaWRpbWVuc2lvbmFsX1tSLVVSXX0NCkNBKHRhYmxlKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJFByb2ZpdGFibGUsIGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJENvbXBhbnlfVHlwZSksIGdyYXBoID0gRkFMU0UpJGVpZw0KQ0EodGFibGUoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kUHJvZml0YWJsZSwgY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kQ29tcGFueV9UeXBlKSwgZ3JhcGggPSBGQUxTRSkkY29sDQpDQSh0YWJsZShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRQcm9maXRhYmxlLCBjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRDb21wYW55X1R5cGUpLCBncmFwaCA9IEZBTFNFKSRyb3cNCg0KYGBgDQoNCg0KIyMjIDMuNC4gQ29ycmVzcG9uZGVuY2lhcyBNw7psdGlwbGVzIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQpEZSBhY3VlcmRvIGNvbiBbQEFFRE1EaWF6LU1vcmFsZXMxZWRdLCBlbCBhbsOhbGlzaXMgZGUgY29ycmVzcG9uZGVuY2lhcyBzaW1wbGUgKEFDUykgcHVlZGUgYW1wbGlhcnNlIHBhcmEgdHJhYmFqYXIgY29uIHRhYmxhcyBkaXN5dW50aXZhcyBjb21wbGV0YXMuIEVuIGVzdGUgZm9ybWF0bywgbGFzIGZpbGFzIHJlcHJlc2VudGFuIGEgbGFzIGVtcHJlc2FzLCBtaWVudHJhcyBxdWUgbGFzIGNvbHVtbmFzIGRlc2NyaWJlbiBsYXMgbW9kYWxpZGFkZXMgZGUgbGFzIHZhcmlhYmxlcyBjYXRlZ8OzcmljYXMgYW5hbGl6YWRhcywgY29tbyBQcm9maXRhYmxlLCBDb21wYW55X1R5cGUgeSBvdHJhcyBjYXJhY3RlcsOtc3RpY2FzIHJlbGFjaW9uYWRhcywgYXNpZ25hbmRvIGEgY2FkYSBlbXByZXNhIHVuYSBjYXRlZ29yw61hIMO6bmljYSBwYXJhIGNhZGEgdmFyaWFibGUuIEVsIGFuw6FsaXNpcyBkZSBjb3JyZXNwb25kZW5jaWFzIG3Dumx0aXBsZXMgKEFDTSkgc2UgY29uc3RydXllIHNvYnJlIGVzdGEgdGFibGEgZGlzeXVudGl2YSwgYXBsaWNhbmRvIGVsIG3DqXRvZG8gZGUgY29ycmVzcG9uZGVuY2lhcyBkZSBmb3JtYSBjb25qdW50YSBhIHRvZGFzIGxhcyB2YXJpYWJsZXMgY2F0ZWfDs3JpY2FzLCBwYXJ0aWNpb25hbmRvIGRlIG1hbmVyYSBleGNsdXNpdmEgeSBleGhhdXN0aXZhIGEgbGEgcG9ibGFjacOzbiBlbXByZXNhcmlhbCBlbiBmdW5jacOzbiBkZSBzdXMgY2FyYWN0ZXLDrXN0aWNhcy4NCg0KRXN0YSBzZWNjacOzbiBzZSBwbGFudGVhIGNvbW8gdW5hIHNvbHVjacOzbiBjb21wbGVtZW50YXJpYSBhbCBBQ1MsIGN1eW8gYW7DoWxpc2lzIGVuIGxhIHNlY2Npw7NuMy4yIGVzdHV2byBsaW1pdGFkbyBwb3IgbGEgbmF0dXJhbGV6YSB1bmlkaW1lbnNpb25hbCBkZSBsb3MgZGF0b3MgeSBsYSBpbXBvc2liaWxpZGFkIGRlIHVuYSByZXByZXNlbnRhY2nDs24gYmlkaW1lbnNpb25hbCBzaWduaWZpY2F0aXZhLiBQb3IgZWxsbywgbWVkaWFudGUgZWwgQUNNIHkgZWwgdHJhdGFtaWVudG8gY29uanVudG8gZGUgdG9kYXMgbGFzIHZhcmlhYmxlcyBjYXRlZ8OzcmljYXMgcmVsYWNpb25hZGFzLCBzZSBidXNjYSBjb25zdHJ1aXIgdW5hIHJlcHJlc2VudGFjacOzbiBtw6FzIGNvbXBsZXRhIGVuIGVsIHByaW1lciBwbGFubyBmYWN0b3JpYWwsIG9mcmVjaWVuZG8gdW5hIHZpc2nDs24gaW50ZWdyYWwgZGUgbGFzIGFzb2NpYWNpb25lcyBtw6FzIHJlbGV2YW50ZXMgZW50cmUgbG9zIHRpcG9zIGRlIGVtcHJlc2FzIHkgc3UgcmVudGFiaWxpZGFkLg0KDQojIyMgMy41LiBQbGFudGVhbWllbnRvIHkgRGVzYXJyb2xsbyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpFbCBhbsOhbGlzaXMgZGUgY29ycmVzcG9uZGVuY2lhcyBtw7psdGlwbGVzICpBQ00qIGVuIGRvbmRlIHNlIHJlc2FsdGEgcXVlIHNvbG8gc2UgdHJhYmFqYW4gY29uIDIgdmFyaWFibGVzIGNhdGVnb3JpY2FzICooc2VjdG9yLCBIZWFkcXVhcnRlcnNfU3RhdGUpKiwgeWEgcXVlIHNpIHNlIHRyYWJhamEgY29uIHRvZGFzIHNlIHByZXNlbnRhIGVycm9yZXMgZGVudHJvIGRlIGxhIGVqZWN1Y2nDsm4gZGVsIGNvZGlnbyBoYWNpZW5kbyBkaXNwYXJhciBsb3MgdmFsb3JlcyBhbCBpbmZpbml0byBvIHByZXNlbnRhbmRvIGVycm9yZXMgYSBsYSBob3JhIGRlIGxhIGludGVycHJldGFjacOybiBwb3IgbGEgY2FudGlkYWQgZXhvcmJpdGFudGUgZGUgb2JzZXJ2YWNpb25lcyBldml0YW5kbyBwcm9ibGVtYXMgY29tcHV0YWNpb25hbGVzLi4NCg0KRWwgYW5hbGlzaXMgIHJldmVsYSBxdWUgbGFzIHByaW1lcmFzIGRpbWVuc2lvbmVzIGV4cGxpY2FuIHVuYSBwZXF1ZcOxYSBwcm9wb3JjacOzbiBkZSBsYSB2YXJpYW56YSB0b3RhbCwgY29tZW56YW5kbyBjb24gdW4gMi4yOCUgZW4gbGEgcHJpbWVyYSBkaW1lbnNpw7NuLCB5IGRlY3JlY2llbmRvIGdyYWR1YWxtZW50ZS4gTGFzIHByaW1lcmFzIGN1YXRybyBkaW1lbnNpb25lcyBleHBsaWNhbiB1biB0b3RhbCBhY3VtdWxhZG8gZGUgOC44NCUgZGUgbGEgdmFyaWFiaWxpZGFkIGVuIGxvcyBkYXRvcy4gQSBwYXJ0aXIgZGUgbGEgZGltZW5zacOzbiA0NywgbGEgY29udHJpYnVjacOzbiBkZSBjYWRhIGRpbWVuc2nDs24gc2UgcmVkdWNlIHNpZ25pZmljYXRpdmFtZW50ZSwgeSBzZSBvYnNlcnZhIHF1ZSBsYXMgZGltZW5zaW9uZXMgbcOhcyBhbHRhcyBhcG9ydGFuIG1lbm9zIHZhcmlhbnphIGV4cGxpY2FkYS4gQSBwZXNhciBkZSBxdWUgbGFzIHByaW1lcmFzIGRpbWVuc2lvbmVzIHNvbiBtw6FzIHJlbGV2YW50ZXMsIGVsIGFuw6FsaXNpcyBtdWVzdHJhIHF1ZSB1bmEgcHJvcG9yY2nDs24gY29uc2lkZXJhYmxlIGRlIGxhIHZhcmlhYmlsaWRhZCBlc3TDoSBkaXN0cmlidWlkYSBlbnRyZSBtdWNoYXMgZGltZW5zaW9uZXMsIGxvIHF1ZSBzdWdpZXJlIHF1ZSBwYXJhIGNvbXByZW5kZXIgY29tcGxldGFtZW50ZSBsYXMgcmVsYWNpb25lcyBlbiBsb3MgZGF0b3MsIHBvZHLDrWEgc2VyIG5lY2VzYXJpbyBjb25zaWRlcmFyIG3DoXMgZGltZW5zaW9uZXMuIFNpbiBlbWJhcmdvLCBsYXMgZGltZW5zaW9uZXMgY29uIHVuYSBtZW5vciBjb250cmlidWNpw7NuIGV4cGxpY2FuIGNhZGEgdmV6IG1lbm9zIHZhcmlhbnphLCBsbyBxdWUgaW5kaWNhIHF1ZSwgYXVucXVlIGxhIHZhcmlhbnphIHNlIGFjdW11bGEsIGxhIGltcG9ydGFuY2lhIGRlIGxhcyBkaW1lbnNpb25lcyBhZGljaW9uYWxlcyBkaXNtaW51eWUgZGVzcHXDqXMgZGUgY2llcnRvIHB1bnRvLg0KDQoqRWlnZW52YWx1ZSAodmFsb3IgcHJvcGlvKSo6TG9zIHZhbG9yZXMgcHJvcGlvcyBpbmRpY2FuIGxhIGNhbnRpZGFkIGRlIHZhcmlhbnphIGV4cGxpY2FkYSBwb3IgY2FkYSBkaW1lbnNpw7NuLiBFbiBlc3RlIGNhc28sIGxvcyBwcmltZXJvcyB2YWxvcmVzIHByb3Bpb3Mgc29uIGJhc3RhbnRlIGFsdG9zLCBjb24gMC43NSBlbiBsYSBwcmltZXJhIGRpbWVuc2nDs24sIGxvIHF1ZSBzdWdpZXJlIHF1ZSBsYSBwcmltZXJhIGRpbWVuc2nDs24gZXMgaW1wb3J0YW50ZSBwYXJhIGV4cGxpY2FyIGxhIHZhcmlhYmlsaWRhZCBkZSBsb3MgZGF0b3MuDQoqUGVyY2VudGFnZSBvZiB2YXJpYW5jZSAocG9yY2VudGFqZSBkZSB2YXJpYW56YSkqOkVsIHBvcmNlbnRhamUgZGUgdmFyaWFuemEgZXhwbGljYSBxdcOpIHRhbiBncmFuZGUgZXMgbGEgY29udHJpYnVjacOzbiBkZSBjYWRhIGRpbWVuc2nDs24gYSBsYSB2YXJpYW56YSB0b3RhbC4gTGEgcHJpbWVyYSBkaW1lbnNpw7NuIGV4cGxpY2EgMi4yOCUgZGUgbGEgdmFyaWFiaWxpZGFkIGVuIGxvcyBkYXRvcywgbGEgc2VndW5kYSAyLjI1JSwgeSBsYSB0ZXJjZXJhIDIuMTclLCBsbyBxdWUgc3VnaWVyZSBxdWUgbGFzIHByaW1lcmFzIGRpbWVuc2lvbmVzIGNhcHR1cmFuIHVuYSBwZXF1ZcOxYSBwb3JjacOzbiBkZSBsYSB2YXJpYW56YSB0b3RhbC4NCipDdW11bGF0aXZlIHBlcmNlbnRhZ2Ugb2YgdmFyaWFuY2UgKHBvcmNlbnRhamUgYWN1bXVsYWRvIGRlIHZhcmlhbnphKSo6RXN0ZSB2YWxvciBtdWVzdHJhIGVsIHBvcmNlbnRhamUgYWN1bXVsYWRvIGRlIGxhIHZhcmlhYmlsaWRhZCBleHBsaWNhZGEgcG9yIGxhcyBkaW1lbnNpb25lcyBoYXN0YSBlbCBwdW50byBxdWUgc2UgbWVuY2lvbmEuIEFsIHN1bWFyIGxhcyBwcmltZXJhcyBjdWF0cm8gZGltZW5zaW9uZXMsIHNlIGFsY2FuemEgdW4gYWN1bXVsYWRvIGRlIDguODQlLCBsbyBxdWUgaW5kaWNhIHF1ZSBsYSBtYXlvcsOtYSBkZSBsYSB2YXJpYW56YSBzZSBkaXN0cmlidXllIGVudHJlIG11Y2hhcyBkaW1lbnNpb25lcy4NCg0KRW4gZWwgYXBhcnRhZG8gZGUgbGEgdmlzdWFsaXphY2nDsm4gZGVsICpBQ00qIHBvciBtZWRpbyBkZWwgYmlwbG90IHNlIHN1Z2llcmUgdHJhYmFqYXIgY29uIHVuYSBtdWVzdHJhIGFsZWF0b3JpYSByZWxhdGl2YW1lbnRlIHBlcXVlw7FhICg1MCkgcGFyYSBwb2RlciBkZXNjcmliaXIgbG9zIGFjb250ZWNpbWllbnRvcyBxdWUgb2N1cnJlbiBkZW50cm8gZGUgbGEgZ3JhZmljYSB5IGFzaSBtaXNtbyB0ZW5lciBkZSBtYW5lcmEgbWFzIHByZWNpc2EgdW4gaW50ZXJwcmV0YWNpw7JuIGNvbmNsdXNpdmEgYWNlcmNhIGRlIGxhIGdyYWZpY2Egb2JzZXJ2YWRhLg0KDQpFbCAqYmlwbG90KiBtdWVzdHJhIGxhIGRpc3RyaWJ1Y2nDs24gZGUgbGFzIHZhcmlhYmxlcyB5IG9ic2VydmFjaW9uZXMgc2VsZWNjaW9uYWRhcyBkZSBsYSBtYXRyaXogb3JpZ2luYWwgZW4gdW4gZXNwYWNpbyBiaWRpbWVuc2lvbmFsIGRlZmluaWRvIHBvciBsYXMgZGltZW5zaW9uZXMgcHJpbmNpcGFsZXMgKihEaW0xIHkgRGltMikqLCBxdWUgZXhwbGljYW4gZWwgKjUuMyUgeSA1LjMlKiBkZSBsYSB2YXJpYW56YSwgcmVzcGVjdGl2YW1lbnRlLg0KDQoqVmFyaWFibGVzIChlbiBhbWFyaWxsbykqOiBSZXByZXNlbnRhbiBjYXRlZ29yw61hcyBkZSBsYXMgdmFyaWFibGVzIHNlbGVjY2lvbmFkYXMgKCJTZWN0b3IiIHkgIkhlYWRxdWFydGVyc19TdGF0ZSIpLiBQb3IgZWplbXBsbywgKiJNZWRpYSIgeSAiTmV2YWRhIiogZXN0w6FuIGFsZWphZG9zIGRlbCBvcmlnZW4sIGxvIHF1ZSBpbmRpY2EgcXVlIGVzdGFzIGNhdGVnb3LDrWFzIGVzdMOhbiAqYmllbiBkaWZlcmVuY2lhZGFzIGVuIGxhcyBkaW1lbnNpb25lcyBzZWxlY2Npb25hZGFzKi4NCipPYnNlcnZhY2lvbmVzIChlbiBhenVsKSo6IFJlcHJlc2VudGFuIHB1bnRvcyBkZSBsYXMgZmlsYXMgc2VsZWNjaW9uYWRhcyAoZW1wcmVzYXMpLiBTdSBwcm94aW1pZGFkIGEgY2llcnRhcyBjYXRlZ29yw61hcyBpbmRpY2EgdW5hIHJlbGFjacOzbiBmdWVydGUgY29uIGVzdGFzLg0KKsOTdmFsb3MgZWzDrXB0aWNvcyo6IFNlIGFncmVnYXJvbiBwYXJhIGlkZW50aWZpY2FyIGdydXBvcyBuYXR1cmFsZXMgZGUgZGF0b3MgY29uIGJhc2UgZW4gbGEgc2ltaWxpdHVkIGRlIHN1cyBjb29yZGVuYWRhcy4NCkNvbmNsdXNpw7NuOiAqTGFzIGNhdGVnb3LDrWFzIHkgb2JzZXJ2YWNpb25lcyBiaWVuIHJlcHJlc2VudGFkYXMgZW4gZXN0ZSBncsOhZmljbyAoZXMgZGVjaXIsIGFsZWphZGFzIGRlbCBvcmlnZW4pIHRpZW5lbiB1biBpbXBhY3RvIHNpZ25pZmljYXRpdm8gZW4gbGFzIGRpbWVuc2lvbmVzIHkgY29udHJpYnV5ZW4gYWwgZW50ZW5kaW1pZW50byBkZSBsYXMgcmVsYWNpb25lcyBlbnRyZSBsb3Mgc2VjdG9yZXMgeSBsb3MgZXN0YWRvcyBkb25kZSBlc3TDoW4gbGFzIHNlZGVzKi4NCg0KKkNhbGlkYWQgZGUgcmVwcmVzZW50YWNpw7NuIGRlIGxhcyB2YXJpYWJsZXMgKENvczIpKg0KRXN0ZSBncsOhZmljbyB2aXN1YWxpemEgbGEgY2FsaWRhZCBkZSByZXByZXNlbnRhY2nDs24gZGUgY2FkYSBjYXRlZ29yw61hIGRlIGxhcyB2YXJpYWJsZXMgc2VsZWNjaW9uYWRhcyBlbiBlbCBlc3BhY2lvIGJpZGltZW5zaW9uYWwuIEVsICpjb3Nlbm8gY3VhZHJhZG8gKENvczIpKiBtaWRlIGxhIHByb3BvcmNpw7NuIGRlIHZhcmlhbnphIGV4cGxpY2FkYSBwYXJhIGNhZGEgY2F0ZWdvcsOtYS4NCg0KKkNvbG9yYWNpw7NuKjogTGFzIGNhdGVnb3LDrWFzIGVuIHRvbm9zIGPDoWxpZG9zIChuYXJhbmphL3Jvam8pIHRpZW5lbiB2YWxvcmVzIGFsdG9zIGRlIENvczIsIGxvIHF1ZSBpbmRpY2EgcXVlIGVzdMOhbiBiaWVuIHJlcHJlc2VudGFkYXMgZW4gbGFzIGRvcyBwcmltZXJhcyBkaW1lbnNpb25lcy4gUG9yIGVqZW1wbG8sIGNhdGVnb3LDrWFzIGNvbW8gKiJFbmVyZ3kiIHkgIk1vdG9yIFZlaGljbGVzICYgUGFydHMiKiB0aWVuZW4gdW4gQ29zMiBhbHRvLCAqbW9zdHJhbmRvIHN1IGltcG9ydGFuY2lhIGVuIGVzdGUgZXNwYWNpbyouDQoqRGlzdHJpYnVjacOzbio6IENhdGVnb3LDrWFzIG3DoXMgY2VyY2FuYXMgYWwgb3JpZ2VuIChjb21vICJIYXdhaWkiKSB0aWVuZW4gdW4gQ29zMiBiYWpvLCBzdWdpcmllbmRvIHF1ZSBubyBlc3TDoW4gdGFuIGJpZW4gcmVwcmVzZW50YWRhcyB5IGNvbnRyaWJ1eWVuIG1lbm9zIGFsIGFuw6FsaXNpcy4NCipDb25jbHVzacOzbio6IExhcyBjYXRlZ29yw61hcyBtZWpvciByZXByZXNlbnRhZGFzICooZW4gbmFyYW5qYS9yb2pvKSogc29uIGxhcyBtw6FzIGluZmx1eWVudGVzIGVuIGxhcyBwcmltZXJhcyBkb3MgZGltZW5zaW9uZXMgeSBheXVkYW4gYSBleHBsaWNhciBsYXMgZGlmZXJlbmNpYXMgcHJpbmNpcGFsZXMgZW4gZWwgY29uanVudG8gZGUgZGF0b3MuDQoNCipDb250cmlidWNpb25lcyogZGUgbGFzIHZhcmlhYmxlcyBhIERpbTENCkVzdGUgZ3LDoWZpY28gZGUgYmFycmFzIG11ZXN0cmEgY3XDoW50byBjb250cmlidXllbiBsYXMgdmFyaWFibGVzIHkgY2F0ZWdvcsOtYXMgYSBsYSBjb25zdHJ1Y2Npw7NuIGRlIGxhIHByaW1lcmEgZGltZW5zacOzbiAoRGltMSkuDQoNCipWYXJpYWJsZXMgcHJpbmNpcGFsZXMqOiAqIlRlY2hub2xvZ3ksIiAiQ2FsaWZvcm5pYSwiIHkgIk1vdG9yIFZlaGljbGVzICYgUGFydHMiKiB0aWVuZW4gbGFzIG1heW9yZXMgY29udHJpYnVjaW9uZXMsIGluZGljYW5kbyBxdWUgc29uIGxhcyBtw6FzIGluZmx1eWVudGVzIHBhcmEgZGVmaW5pciBsYSBEaW0xLg0KKlZhcmlhYmxlcyBtZW5vcyBpbmZsdXllbnRlcyo6IENhdGVnb3LDrWFzIGNvbW8gIk9oaW8iIHkgIk1hc3NhY2h1c2V0dHMiIHRpZW5lbiBjb250cmlidWNpb25lcyBiYWphcywgbG8gcXVlIHN1Z2llcmUgcXVlIHN1IGltcGFjdG8gZW4gRGltMSBlcyBsaW1pdGFkby4NCipMw61uZWEgcm9qYSo6IFJlcHJlc2VudGEgZWwgdmFsb3IgcHJvbWVkaW8gZXNwZXJhZG8gZGUgY29udHJpYnVjacOzbi4gTGFzIGNhdGVnb3LDrWFzIHBvciBlbmNpbWEgZGUgZXN0YSBsw61uZWEgc29uICpsYXMgcXVlIHRpZW5lbiB1biBhcG9ydGUgc2lnbmlmaWNhdGl2byouDQoqQ29uY2x1c2nDs24qOiBMYXMgY2F0ZWdvcsOtYXMgY29uIGNvbnRyaWJ1Y2lvbmVzIGFsdGFzIGRvbWluYW4gbGEgY29uc3RydWNjacOzbiBkZSBEaW0xIHkgc29uIGNsYXZlIHBhcmEgaW50ZXJwcmV0YXIgZXN0YSBkaW1lbnNpw7NuLg0KDQpMYSBncsOhZmljYSBkZSBBbsOhbGlzaXMgZGUgKkJpcGxvdCBjb24gQ29udHJpYnVjaW9uZXMqIG5vcyBtdWVzdHJhIGPDs21vIGxhcyBjYXRlZ29yw61hcyBkZSBsYXMgdmFyaWFibGVzIHNlbGVjY2lvbmFkYXMgKGNvbHVtbmFzIDMgeSAxNyBkZWwgZGF0YXNldCkgZXN0w6FuIHJlbGFjaW9uYWRhcyBlbnRyZSBzw60uDQoNCipEaW1lbnNpb25lcyBQcmluY2lwYWxlcypMYXMgZGltZW5zaW9uZXMgMSAoMi4zJSkgeSAyICgyLjIlKSByZXByZXNlbnRhbiBsYXMgY2FyYWN0ZXLDrXN0aWNhcyBwcmluY2lwYWxlcyBxdWUgZGlmZXJlbmNpYW4gbGFzIGNhdGVnb3LDrWFzIGFuYWxpemFkYXMuIEF1bnF1ZSBleHBsaWNhbiB1biBwb3JjZW50YWplIG1vZGVzdG8gZGUgbGEgdmFyaWFiaWxpZGFkIHRvdGFsLCBzb24gc3VmaWNpZW50ZXMgcGFyYSBpZGVudGlmaWNhciBwYXRyb25lcyBjbGF2ZS4NCipBZ3J1cGFjaW9uZXMgeSBSZWxhY2lvbmVzKjpsYXMgY2F0ZWdvcsOtYXMgY2VyY2FuYXMgZW4gZWwgZ3LDoWZpY28gZXN0w6FuIGFzb2NpYWRhcyBvIHRpZW5kZW4gYSBhcGFyZWNlciBqdW50YXMgZW4gbG9zIGRhdG9zLiBQb3IgZWplbXBsbywgcG9kcsOtYW1vcyBvYnNlcnZhciBxdWUgY2llcnRvcyBlc3RhZG9zIGNvbW8gKiJUZXhhcyIgKmVzdMOhbiBtw6FzIHJlbGFjaW9uYWRvcyBjb24gc2VjdG9yZXMgZXNwZWPDrWZpY29zIGNvbW8gKiJFbmVyZ3kiKi4NCipDb250cmlidWNpb25lcyBkZSBDYXRlZ29yw61hcyo6TGFzIGNhdGVnb3LDrWFzIG3DoXMgYWxlamFkYXMgZGVsIGNlbnRybyAoZW4gcm9qbykgdGllbmVuIHVuIGltcGFjdG8gbcOhcyBmdWVydGUgZW4gbGEgZGlmZXJlbmNpYWNpw7NuIGRlIGxhcyBkaW1lbnNpb25lcy4gRXN0YXMgc29uIHBhcnRpY3VsYXJtZW50ZSBpbXBvcnRhbnRlcyBwYXJhIGVudGVuZGVyIHF1w6kgZWxlbWVudG9zIGVzdMOhbiBkZWZpbmllbmRvIGxvcyBwYXRyb25lcyBvYnNlcnZhZG9zLg0KKlBhdHJvbmVzIEdsb2JhbGVzKjpMYSBkaXNwZXJzacOzbiBzdWdpZXJlIHF1ZSBjaWVydGFzIGNhdGVnb3LDrWFzIChlc3RhZG9zIG8gc2VjdG9yZXMpIHRpZW5lbiBwZXJmaWxlcyDDum5pY29zIG8gZnVlcnRlcyByZWxhY2lvbmVzIGRlbnRybyBkZWwgZGF0YXNldCwgbWllbnRyYXMgcXVlIG90cmFzIChtw6FzIGNlcmNhbmFzIGFsIGNlbnRybykgdGllbmVuIG1lbm9zIGluZmx1ZW5jaWEgbyBhcGFyZWNlbiBlbiBtw7psdGlwbGVzIGNvbnRleHRvcy4NCkVuIHTDqXJtaW5vcyBnZW5lcmFsZXMsIGVsIE1DQSBheXVkYSBhIGlkZW50aWZpY2FyIGFzb2NpYWNpb25lcyBpbXBvcnRhbnRlcyBlbnRyZSBlc3RhZG9zLCBzZWN0b3JlcyB5IG90cmFzIGNhcmFjdGVyw61zdGljYXMgY2F0ZWfDs3JpY2FzLCByZXZlbGFuZG8gY8OzbW8gY2llcnRvcyBmYWN0b3JlcyBlc3TDoW4gaW50ZXJjb25lY3RhZG9zIGVuIGVsIGNvbnRleHRvIGRlIGxhcyBlbXByZXNhcyBkZWwgcmFua2luZyBGb3J0dW5lIDEwMDAuDQoNCkVuIGNvbmNsdXNpb24gRWwgYW7DoWxpc2lzIHBlcm1pdGUgaWRlbnRpZmljYXIgYXNvY2lhY2lvbmVzIGNsYXZlIGVudHJlIHNlY3RvcmVzIHkgZXN0YWRvcywgZGVzdGFjYW5kbyBwYXRyb25lcyBzaWduaWZpY2F0aXZvcyBlbiBjw7NtbyBsYXMgZW1wcmVzYXMgZGVsIHJhbmtpbmcgRm9ydHVuZSAxMDAwIHNlIGRpc3RyaWJ1eWVuIGVuIHTDqXJtaW5vcyBkZSBpbmR1c3RyaWEgeSB1YmljYWNpw7NuLiBBdW5xdWUgbGFzIHByaW1lcmFzIGRpbWVuc2lvbmVzIGV4cGxpY2FuIHNvbG8gdW5hIGZyYWNjacOzbiBkZSBsYSB2YXJpYWJpbGlkYWQgdG90YWwsIGFwb3J0YW4gc3VmaWNpZW50ZSBpbmZvcm1hY2nDs24gcGFyYSBjb21wcmVuZGVyIGxhcyByZWxhY2lvbmVzIG3DoXMgaW1wb3J0YW50ZXMgZGVudHJvIGRlbCByYW5raW5nLg0KDQojIyMjIEFDTQ0KYGBge3IgQUNNLGZpZy5hbGlnbj0nY2VudGVyJ30NCnJvdW5kKE1DQShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0b1sxOjEwMDAsIGMoMywxNyldLCBncmFwaCA9IEZBTFNFKSRlaWcsIDIpDQpgYGANCg0KIyMjIyBCaXBsb3QgQUNNDQoNCmBgYHtyIEJpcGxvdF9BQ019DQoNCmZpbGVfcGF0aCA8LSAiQzovQ1VSU09TLzR0byBTZW1lc3RyZS9DVVJTTyBHZEQgMjAyNF8gRzkvY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8ueGxzeCINCmNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvX1YyIDwtIHJlYWRfZXhjZWwoZmlsZV9wYXRoKQ0KDQpzZWxlY3RlZF9jb2x1bW5zIDwtIGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvX1YyWywgYygiU2VjdG9yIiwiSGVhZHF1YXJ0ZXJzX1N0YXRlIildDQoNCnNlbGVjdGVkX2NvbHVtbnMgPC0gbmEub21pdChzZWxlY3RlZF9jb2x1bW5zKQ0KDQpzZXQuc2VlZCg3ODA3MjkpDQoNCiMgU2VsZWNjaW9uYXIgdW5hIG11ZXN0cmEgZGUgNTAgZmlsYXMNCnNlbGVjdGVkX2RhdGEgPC0gc2VsZWN0ZWRfY29sdW1uc1sNCiAgc2FtcGxlKDE6bnJvdyhzZWxlY3RlZF9jb2x1bW5zKSwgbWluKDUwLCBucm93KHNlbGVjdGVkX2NvbHVtbnMpKSksXQ0KDQpzZWxlY3RlZF9kYXRhIDwtIGRhdGEuZnJhbWUobGFwcGx5KHNlbGVjdGVkX2RhdGEsIGFzLmZhY3RvcikpDQoNCiMgUmVhbGl6YXIgZWwgQW7DoWxpc2lzIGRlIENvbXBvbmVudGVzIE3Dumx0aXBsZXMgKE1DQSkNCnJlcy5tY2EgPC0gTUNBKHNlbGVjdGVkX2RhdGEsIGdyYXBoID0gRkFMU0UpDQoNCiMgVmlzdWFsaXphciBlbCBCaXBsb3QgZGVsIE1DQQ0KZnZpel9tY2FfYmlwbG90KA0KICByZXMubWNhLCANCiAgcmVwZWwgPSBUUlVFLCANCiAgY29sLnZhciA9ICIjRTdCODAwIiwNCiAgYWRkRWxsaXBzZXMgPSBUUlVFLCAgIA0KICBlbGxpcHNlLmxldmVsID0gMC45NSAgIyBOaXZlbCBkZSBjb25maWFuemEgZGVsIDk1JQ0KKQ0KDQpgYGANCg0KDQoNCg0KIyMjIyBDYWxpZGFkIGRlIFJlcHJlc2VudGFjacOzbg0KYGBge3IgQ2FsaWRhZF9kZV9SZXByZXNlbnRhY2lvbixmaWcuYWxpZ249J2NlbnRlcid9DQoNCiMgQXNlZ3VyYXIgcXVlIGxhcyBjb2x1bW5hcyBzZWxlY2Npb25hZGFzIHNlYW4gY2F0ZWfDs3JpY2FzIChmYWN0b3JlcykNCmNhdGVnb3JpY2FsX2NvbHVtbnMgPC0gY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG9bMToxMDAwLCBjKDMsMTcpXQ0KY2F0ZWdvcmljYWxfZGF0YSA8LSBkYXRhLmZyYW1lKGxhcHBseShjYXRlZ29yaWNhbF9jb2x1bW5zLCBhcy5mYWN0b3IpKQ0KDQoNCiMgUmVhbGl6YXIgZWwgYW7DoWxpc2lzIE1DQSAoQUNNKQ0KbWNhX3Jlc3VsdCA8LSBNQ0EoY2F0ZWdvcmljYWxfZGF0YSwgZ3JhcGggPSBGQUxTRSkNCg0KIyBDYWxpZGFkIGRlIHJlcHJlc2VudGFjacOzbiAoQ29zMikgcGFyYSB2YXJpYWJsZXMgeSBvYnNlcnZhY2lvbmVzDQojIENvczIgbWlkZSBsYSBjYWxpZGFkIGRlIGxhIHJlcHJlc2VudGFjacOzbiBkZSBsYXMgdmFyaWFibGVzL2luZGl2aWR1b3MgZW4gbGFzIGRpbWVuc2lvbmVzDQp2YXJfY29zMiA8LSBtY2FfcmVzdWx0JHZhciRjb3MyIA0KaW5kX2NvczIgPC0gbWNhX3Jlc3VsdCRpbmQkY29zMg0KDQojIFZpc3VhbGl6YXIgbGEgY2FsaWRhZCBkZSByZXByZXNlbnRhY2nDs24gcGFyYSB2YXJpYWJsZXMNCmZ2aXpfbWNhX3ZhcihtY2FfcmVzdWx0LCBjb2wudmFyID0gImNvczIiLCANCiAgICAgICAgICAgICBncmFkaWVudC5jb2xzID0gYygiIzAwQUZCQiIsICIjRTdCODAwIiwgIiNGQzRFMDciKSwNCiAgICAgICAgICAgICByZXBlbCA9IFRSVUUpDQpgYGANCg0KDQojIyMjIENvbnRyaWJ1Y2lvbmVzDQpgYGB7ciBDb250cmlidWNpb25lcyxmaWcuYWxpZ249J2NlbnRlcid9DQpmdml6X2NvbnRyaWIoTUNBKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvWzE6MTAwMCwgYygzLDE3KV0sIGdyYXBoID0gRkFMU0UpLCBjaG9pY2UgPSAidmFyIiwgYXhlcyA9IDEsIHRvcCA9IDE1KQ0KDQoNCmBgYA0KDQoNCiMjIyMgQmlwbG90IGNvbiBDb250cmlidWNpb25lcw0KYGBge3IgQmlwbG90X2Nvbl9Db250cmlidWNpb25lcyxmaWcuYWxpZ249J2NlbnRlcid9DQpmdml6X21jYV92YXIoTUNBKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvWzE6MTAwMCwgYygzLDE3KV0sIGdyYXBoID0gRkFMU0UpLCBjb2wudmFyID0iY29udHJpYiIsIGdyYWRpZW50LmNvbHMgPSBjKCIjMDBBRkJCIiwgIiNFN0I4MDAiLCAiI0ZDNEUwNyIpLCByZXBlbCA9IFRSVUUpDQoNCmBgYA0KDQoNCiMjICoqRmFzZSA0IFtDb25nbG9tZXJhZG9zXSoqDQoNCkVuIGVzdGEgKipjdWFydGEgZXRhcGEqKiBkZWwgZXN0dWRpbyBzZSBwcmVzZW50YXLDoW4gY8OhbGN1bG9zLCB2aXN1YWxpemFjaW9uZXMgZSBpbnRlcnByZXRhY2lvbmVzLCB1dGlsaXphbmRvIGVsIGNvbmp1bnRvIGRlIGRhdG9zIHByb2Nlc2FkbyBlbiBsYXMgZmFzZXMgcHJldmlhcyAqKigxLCAyIHkgMykqKi4gRWwgZW5mb3F1ZSBzZSBjZW50cmFyw6EgZW4gZWwgKiphbsOhbGlzaXMgZGUgY29uZ2xvbWVyYWRvcyoqLCBhYmFyY2FuZG8gdGFudG8gc3UgdmVyc2nDs24gamVyw6FycXVpY2EgbWVkaWFudGUgZGVuZHJvZ3JhbWFzIGNvbW8gbGEgbm8gamVyw6FycXVpY2EgY29uIEstbWVkaWFzLg0KDQojIyMgNC4xLiBPYmpldGl2b3MNCkVsIHByaW5jaXBhbCBvYmpldGl2byBkZWwgYW7DoWxpc2lzIGRlIGNvbmdsb21lcmFkb3MgZXMgaWRlbnRpZmljYXIgYWdydXBhY2lvbmVzIG5hdHVyYWxlcyBkZW50cm8gZGUgdW4gY29uanVudG8gZGUgZGF0b3MgbXVsdGl2YXJpYWRvcywgbWF4aW1pemFuZG8gbGEgaG9tb2dlbmllZGFkIGRlbnRybyBkZSBsb3MgY2x1c3RlcnMgeSBsYSBoZXRlcm9nZW5pZWRhZCBlbnRyZSBlbGxvcy4gRXN0ZSBlbmZvcXVlIHBlcm1pdGUgc2ltcGxpZmljYXIgeSBlc3RydWN0dXJhciBsYSBpbmZvcm1hY2nDs24sIGZhY2lsaXRhbmRvIHN1IGludGVycHJldGFjacOzbiB5IHVzbyBlc3RyYXTDqWdpY28uDQoNClBhcmEgbG9ncmFyIGVzdGUgb2JqZXRpdm8sIHNlIHV0aWxpemFuIHTDqWNuaWNhcyBxdWUgY3VhbnRpZmljYW4gbGFzIHNpbWlsaXR1ZGVzIGVudHJlIG9ic2VydmFjaW9uZXMsIGVzdGFibGVjaWVuZG8gdW5hIGVzdHJ1Y3R1cmEgamVyw6FycXVpY2EgbyBwYXJ0aWNpb25hbCBzZWfDum4gZWwgbcOpdG9kbyBzZWxlY2Npb25hZG8uIEVzdGFzIHTDqWNuaWNhcyBwZXJtaXRlbiBkZXRlY3RhciBwYXRyb25lcyBlbiBsb3MgZGF0b3MgcXVlIGRlIG90cmEgbWFuZXJhIHBhc2Fyw61hbiBkZXNhcGVyY2liaWRvcywgZGVzdGFjYW5kbyByZWxhY2lvbmVzIGltcG9ydGFudGVzIGVudHJlIGxhcyBvYnNlcnZhY2lvbmVzIHkgc3VzIGNhcmFjdGVyw61zdGljYXMuIEVuIGVsIGNvbnRleHRvIGRlbCByYW5raW5nIEZvcnR1bmUgMTAwMCwgZXN0byBzZSB0cmFkdWNlIGVuIGFncnVwYXIgZW1wcmVzYXMgY29uIHBlcmZpbGVzIHNpbWlsYXJlcyBlbiB0w6lybWlub3MgZGUgdmFyaWFibGVzIGNsYXZlIGNvbW8gaW5ncmVzb3MsIGFjdGl2b3MgeSBnYW5hbmNpYXMuDQoNCkxvcyBvYmpldGl2b3MgZGVsIGFuw6FsaXNpcyBkZSBjb25nbG9tZXJhZG9zIHNlIGN1bXBsaWVyb24gYWwgc2VnbWVudGFyIGRlIG1hbmVyYSBlZmljaWVudGUgbGFzIG9ic2VydmFjaW9uZXMgZW4gZ3J1cG9zIHNpZ25pZmljYXRpdm9zLCBvZnJlY2llbmRvIHVuYSB2aXNpw7NuIG3DoXMgb3JnYW5pemFkYSBkZWwgY29uanVudG8gZGUgZGF0b3MuIEVzdG9zIHJlc3VsdGFkb3MgcmVmdWVyemFuIGxhIHV0aWxpZGFkIGRlIGVzdGUgZW5mb3F1ZSBwYXJhIHNpbXBsaWZpY2FyIGRhdG9zIGNvbXBsZWpvcyB5IGFwb3lhciBkZWNpc2lvbmVzIGJhc2FkYXMgZW4gcGF0cm9uZXMgZXN0cnVjdHVyYWxlcyBjbGFyb3MuDQoNCg0KIyMjIDQuMi4gQWdydXBhY2nDs24gSmVyw6FycXVpY2Egey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KRWwgUHJvZmVzb3IgW0BFQU1PVEltbzQyMDIzXSwgZW4gc3UgdHJhYmFqbyAoYWwgcXVlIHNlIHB1ZWRlbiByZW1pdGlyIG1lZGlhbnRlIGVsIGVubGFjZSksIHNlw7FhbGFiYSBxdWUgbG9zIGF1dG9yZXMgW0BBRURNRGlhei1Nb3JhbGVzMWVkXSwgYmFzw6FuZG9zZSBlbiBlbCBhbsOhbGlzaXMgZGUgKkV2ZXJpdHQgKDE5ODApKiB0aXR1bGFkbyAqKkNsdXN0ZXIgQW5hbHlzaXMqKiwgZGVzY3JpYmVuIGxvcyBjb25nbG9tZXJhZG9zIGNvbW8gKip6b25hcyBjb250aW51YXMqKiBlbiB1biBlc3BhY2lvIGRvbmRlIHNlIGNvbmNlbnRyYSB1bmEgYWx0YSBkZW5zaWRhZCBkZSBwdW50b3MsIHNlcGFyYWRhcyBwb3Igw6FyZWFzIGNvbiBtZW5vciBkZW5zaWRhZC4gUGFyYSBpZGVudGlmaWNhciBlc3RhcyBjb25jZW50cmFjaW9uZXMsIHNlIGVtcGxlYW4gZGlmZXJlbnRlcyB0w6ljbmljYXMsIGRlc3RhY8OhbmRvc2UgbG9zIG3DqXRvZG9zIGplcsOhcnF1aWNvcy4gRXN0b3MgaW5pY2lhbiBjb24gZWwgKipjw6FsY3VsbyBkZSB1bmEgbWF0cml6IGRlIGRpc3RhbmNpYXMqKiBlbnRyZSBsb3MgZWxlbWVudG9zIGFuYWxpemFkb3MsIGxvIHF1ZSBwZXJtaXRlIGFncnVwYXJsb3MgbWVkaWFudGUgdW4gcHJvY2VzbyBkZSAqKmFnbG9tZXJhY2nDs24qKi4gRXN0ZSBtw6l0b2RvIGNvbWllbnphIGNvbiAqKmNvbmdsb21lcmFkb3MgaW5kaXZpZHVhbGVzKiogeSBhdmFuemEgaGFjaWEgdW4gKirDum5pY28gZ3J1cG8gZmluYWwqKi4gQSBsbyBsYXJnbyBkZSBlc3RlIHByb2Nlc28sIHNlIGdlbmVyYW4gZnVzaW9uZXMgeSBkaXZpc2lvbmVzIHF1ZSBlc3RhYmxlY2VuIGplcmFycXXDrWFzIGJhc2FkYXMgZW4gc2ltaWxpdHVkZXMsIHJlcHJlc2VudGFkYXMgZ3LDoWZpY2FtZW50ZSBhIHRyYXbDqXMgZGUgdW4gKipkZW5kb2dyYW1hKiouDQoNCiMjIyA0LjMuIFBsYW50ZWFtaWVudG8geSBEZXNhcnJvbGxvIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQpQYXJhIHVuYSBhZGVjdWFkYSB2aXN1YWxpemFjacOzbiBkZSBsb3MgZGF0b3MgeSBjb24gZmluZXMgZXhjbHVzaXZhbWVudGUgYWNhZMOpbWljb3MsIGVsIGNvbmp1bnRvIGRlIGRhdG9zIGRlc2NyaXRvIGZ1ZSBtb2RpZmljYWRvIHByZXZpYW1lbnRlIHBhcmEgaW5jbHVpciB2YXJpYWJsZXMgbm9ybWFsaXphZGFzIHJlbGFjaW9uYWRhcyBjb24gKmVtcGxlYWRvcywgaW5ncmVzb3MsIGdhbmFuY2lhcywgeSBhY3Rpdm9zIGRlIGNhZGEgZXN0YWRvKiwgY29tbyBzZSBvYnNlcnZhIGVuIGxhIGRlZmluaWNpw7JuIGRlIGxhIHZhcmlhYmxlIHNvYnJlIGVsICpDb25qdW50byBub3JtYWxpemFkbyogY2RkX3JhbmtpbmdfZm9ydHVuZV9oZWFkcXVhcnRlcnNfU3RhdGVfUHJvbWVkaW8gPC0gcmVhZF9leGNlbCgiQzovQ1VSU09TLzR0byBTZW1lc3RyZS9DVVJTTyBHZEQgMjAyNF8gRzkvY2RkX3JhbmtpbmdfZm9ydHVuZV9oZWFkcXVhcnRlcnNfU3RhdGVfUHJvbWVkaW8ueGxzeCIpDQpWaWV3KGNkZF9yYW5raW5nX2ZvcnR1bmVfaGVhZHF1YXJ0ZXJzX1N0YXRlX1Byb21lZGlvKS4NCg0KRXN0YXMgbcOpdHJpY2FzIHBlcm1pdGllcm9uIGVzdGFuZGFyaXphciBsYXMgY2FyYWN0ZXLDrXN0aWNhcyBlY29uw7NtaWNhcyB5IGVtcHJlc2FyaWFsZXMgZGUgbG9zIGVzdGFkb3MsIGdhcmFudGl6YW5kbyB1bmEgY29tcGFyYWNpw7NuIG3DoXMgcHJlY2lzYSBlbiBlbCBhbsOhbGlzaXMgZGUgY29uZ2xvbWVyYWRvcy4NCg0KTGEgcGVzdGHDsWEgKkRpc2ltaWxhcmlkYWQqIG9mcmVjZSB1bmEgcmVwcmVzZW50YWNpw7NuIGdyw6FmaWNhIHF1ZSBtdWVzdHJhIGxhcyByZWxhY2lvbmVzIGRlIHByb3hpbWlkYWQgZW50cmUgbG9zIGVzdGFkb3Mgc2Vnw7puIGxhcyBtw6l0cmljYXMgc2VsZWNjaW9uYWRhcy4gQSB0cmF2w6lzIGRlIHVuYSAqZXNjYWxhIGRlIGNvbG9yZXMqLCBsYSBncsOhZmljYSBpbHVzdHJhIGxhcyBkaXN0YW5jaWFzIGVudHJlIGxvcyByZWdpc3Ryb3M6DQoNCipab25hcyBkZSBtZW5vciBkaXNpbWlsYXJpZGFkIChlbiB0b25vcyBhenVsIGNsYXJvKSo6IEluZGljYW4gZXN0YWRvcyBjb24gY2FyYWN0ZXLDrXN0aWNhcyBtdXkgc2ltaWxhcmVzLCBsbyBxdWUgc3VnaWVyZSBxdWUgdGllbmRlbiBhIGZvcm1hciBwYXJ0ZSBkZSBhZ3J1cGFjaW9uZXMgbcOhcyBjZXJjYW5hcy4gY29tbywgZXN0YWRvcyBjb21vICpBcmthbnNhcywgTWlzc2lzc2lwcGkgeSBMb3Vpc2lhbiphIG11ZXN0cmFuIGFsdGEgc2ltaWxpdHVkIGVuIHN1cyBjYXJhY3RlcsOtc3RpY2FzIHByb21lZGlvLCBjb21vIGluZ3Jlc29zIHkgYWN0aXZvcy4NCg0KKlpvbmFzIGRlIG1heW9yIGRpc2ltaWxhcmlkYWQgKGVuIHRvbm9zIHJvaml6b3MpKjogUmVwcmVzZW50YW4gZXN0YWRvcyBjb24gZGlmZXJlbmNpYXMgc2lnbmlmaWNhdGl2YXMgZnJlbnRlIGFsIHJlc3RvLiBFc3RvIHNlIG9ic2VydmEgZW4gZXN0YWRvcyBjb21vICpDYWxpZm9ybmlhIHkgVGV4YSpzLCBxdWUgc2UgZGVzdGFjYW4gcG9yIHZhbG9yZXMgbm90YWJsZW1lbnRlIG1heW9yZXMgZW4gaW5ncmVzb3MgeSBnYW5hbmNpYXMgcHJvbWVkaW8uDQoNCkVzdGUgY29tcG9ydGFtaWVudG8gaW5kaWNhIHF1ZSBsb3MgZXN0YWRvcyBtw6FzIHNpbWlsYXJlcyB0aWVuZGVuIGEgZm9ybWFyIGFncnVwYWNpb25lcyBkZW50cm8gZGUgbGFzIG1pc21hcyBqZXJhcnF1w61hcyBlY29uw7NtaWNhcywgbWllbnRyYXMgcXVlIGFxdWVsbG9zIGNvbiBkaXN0YW5jaWFzIG3DoXMgcHJvbnVuY2lhZGFzIHByb2JhYmxlbWVudGUgY29uZm9ybWVuIGdydXBvcyBpbmRlcGVuZGllbnRlcywgcmVmbGVqYW5kbyBkaWZlcmVuY2lhcyBlc3BlY8OtZmljYXMgZW4gc3UgZGVzZW1wZcOxbyBjb3Jwb3JhdGl2byBvIGVjb27Ds21pY28uDQoNCkxhIHBlc3Rhw7FhICoqT3B0aW1pemFjacOzbiBkZSBNb2plbmEqKiBpZGVudGlmaWNhIGVsIG7Dum1lcm8gw7NwdGltbyBkZSBncnVwb3MgcGFyYSBjbGFzaWZpY2FyIGEgbG9zIHBhY2llbnRlcyBzZWfDum4gdHJlcyBlc3RyYXRlZ2lhcyBqZXLDoXJxdWljYXMuIFRhbnRvIGxhICoqdW5pw7NuIHNpbXBsZSoqY29uY2x1eWUgcXVlICoqNSBncnVwb3MqKiBzb24gaWRlYWxlcyBlbiAqKnVuacOzbiBjb21wbGV0YSoqIGNvbmNsdXllbiBxdWUgKio0IGdydXBvcyoqIHNvbiBpZGVhbGVzLCBtYXhpbWl6YW5kbyBsYSBjb2hlc2nDs24gaW50ZXJuYSB5IGRpZmVyZW5jaWFjacOzbiBleHRlcm5hLiBQb3Igc3UgbGFkbywgbGEgKip1bmnDs24gcHJvbWVkaW8qKiBzdWdpZXJlICo1IGdydXBvcyogY29tbyBsYSBjb25maWd1cmFjacOzbiDDs3B0aW1hLCBjb25zaWRlcmFuZG8gZGlzdGFuY2lhcyBtZWRpYXMuIENhZGEgbcOpdG9kbyBzZSBhY29tcGHDsWEgZGUgc3UgcmVzcGVjdGl2byBkZW5kb2dyYW1hIHBhcmEgdmlzdWFsaXphciBsYXMgamVyYXJxdcOtYXMgeSBhZ3J1cGFjaW9uZXMgcmVzdWx0YW50ZXMsIGNhZGEgZ3J1cG8gcmVmbGVqYSBsYSByZWxldmFuY2lhIGRlIGNhZGEgZ3J1cG8gZGVudHJvIGRlbCByYW5raW5nLi4NCg0KRW4gZWwgY2FzbyBkZWwgKipFbmxhY2UgU2ltcGxlKiosIGVsIGRlbmRvZ3JhbWEgbXVlc3RyYSAqNSBjb25nbG9tZXJhZG9zKiogZXN0YWJsZWNpZG9zIGEgdW4gbml2ZWwgZGUgc2ltaWxpdHVkIGNlcmNhbm8gYSAqKjEgeSAyKiosICozIHkgNCosIGF1bnF1ZSBsYXMgZGlzdGFuY2lhcyBkZSBhZ2xvbWVyYWNpw7NuIHNvbiByZWxhdGl2YW1lbnRlIGFtcGxpYSBlbnRyZSBsb3MgZ3J1cG9zIGZhY2lsaXRhbmRvIGxhIGRpZmVyZW5jaWFjacOybiBkZSBsb3MgZ3J1cG9zIGdlbmVyYWRvcy4gUG9yIHN1IHBhcnRlLCBlbCBtw6l0b2RvIGRlICoqRW5sYWNlIENvbXBsZXRvKiogcGVybWl0ZSBpZGVudGlmaWNhciAqKjQgY29uZ2xvbWVyYWRvcyoqIG1vc3RyYW5kbyB1bmEgc2VwYXJhY2nDsm4gZGVsIGdydXBvIDEgZGVsIHJlc3RvIGRlIGdydXBvcywgcXVlcmllbmRvIGRlY2lyIHF1ZSBlcyBlbCBncnVwbyBkb25kZSBzZSBvYnRpZW5lIGxhIGluZm9ybWFjacOybiBkZSB1bm9zIGRhdG9zIGF0aXBpY29zIGRlIGVtcHJlc2FzIHBvZGVyb3NhcywgdGFtYmllbiBoYWJpZW5kbyB1biBuaXZlbCBkZSBzaW1pbGl0dWQgZGUgbG9zIGdydXBvcyAyIHkgMyBzZXBhcmFkb3MgZGUgbGEgYWdsb21lcmFjacOybiBkb25kZSBzZSBlbmN1ZW50cmFuIGNvbWFww7FpYXMgc2luIGVsIG1pc21vIHBvZGVyIGRlIGxhcyBjb21wYcOxaWFzIHRvcCBkZWwgcmFua2luZyAqKkVubGFjZSBQcm9tZWRpbyoqIGVzdGFibGVjZSAqKjUgY29uZ2xvbWVyYWRvcyoqIGRvbmRlIGxvcyBncnVwb3Mgc2Ugc2VwYXJhbiBkaXJlY2F0YW1lbnRlIGVudHJlIHRvZG9zIGhhc3RhIGVsIDUgZG9uZGUgc2UgZW5jdWVudHJhbiBsYSBtYXlvciBhZ2xvbWVyYWNpw7JuIGRlIGNvbXBhw7FpcyBjb24gY2FyYXN0ZXJpc3RpY2FzIHNpbWlsYXJlcywgeSBlbiBsYXMgNCByZXByZXNlbnRhbnRvIGNvbXBhw7FpYXMgY29uIHVuIHBvZGVyIG1heW9yIGRlbnRybyBkZWwgcmFua2luZyAodmFsb3JlcyBhdGlwaWNvcykgYSBsb3MgZGVsIGdydXBvIDUuIA0KDQpFc3RvcyAqZGVuZG9ncmFtYXMqIG11ZXN0cmFuIHF1ZSwgc2kgc2Ugc2VsZWNjaW9uYXJhbiBuaXZlbGVzIGRlIGNvcnRlIG3DoXMgYWx0b3MsIHNlIG9idGVuZHLDrWFuIG1lbm9zIGNvbmdsb21lcmFkb3MgY29uIG1heW9yIGNvaGVzacOzbiBpbnRlcm5hLCBhZ3J1cGFuZG8gZW1wcmVzYXMgY29uIHNlZGVzIGVuIGVzdGFkb3MgY29uIGNhcmFjdGVyw61zdGljYXMgc2ltaWxhcmVzLiBFbiBjYW1iaW8sIG5pdmVsZXMgZGUgY29ydGUgbcOhcyBiYWpvcyBnZW5lcmFyw61hbiB1bmEgbWF5b3IgY2FudGlkYWQgZGUgY29uZ2xvbWVyYWRvcywgcGVybWl0aWVuZG8gaWRlbnRpZmljYXIgcGF0cm9uZXMgbcOhcyBlc3BlY8OtZmljb3MgcGVybyBjb24gbWVub3Igc2ltaWxpdHVkIGludGVybmEuIERlIGVzdGEgZm9ybWEsIGxhcyB2aXN1YWxpemFjaW9uZXMgcmVmbGVqYW4gZWwgZWZlY3RvIGRlIGxvcyB2YWxvcmVzIGF0w61waWNvcywgY29tbyBsYXMgZW1wcmVzYXMgY29uIG1heW9yIHBvZGVyIGVuIGVsIHJhbmtpbmcgZGViaWRvIGEgY2FyYWN0ZXLDrXN0aWNhcyBkZXN0YWNhZGFzIGVuIGxhcyB2YXJpYWJsZXMgY3VhbnRpdGF0aXZhcyBhbmFsaXphZGFzLCBwZXJtaXRpZW5kbyB1bmEgY2xhc2lmaWNhY2nDs24gbcOhcyBwcmVjaXNhIHNlZ8O6biBsYSB1YmljYWNpw7NuIGRlIGxhcyBzZWRlcyB5IG90cm9zIGZhY3RvcmVzIHJlbGV2YW50ZXMuDQoNCiMjIyMgQ2FtcG8gY2xhc2lmaWNhZG9yDQpgYGB7ciBDYW1wb19jbGFzaWZpY2Fkb3IsIGZpZy5hbGlnbj0nY2VudGVyJ30NCg0KY2RkX3JhbmtpbmdfZm9ydHVuZV9oZWFkcXVhcnRlcnNfU3RhdGVfUHJvbWVkaW8gPC0gcmVhZF9leGNlbCgiQzovQ1VSU09TLzR0byBTZW1lc3RyZS9DVVJTTyBHZEQgMjAyNF8gRzkvY2RkX3JhbmtpbmdfZm9ydHVuZV9oZWFkcXVhcnRlcnNfU3RhdGVfUHJvbWVkaW8ueGxzeCIpDQpWaWV3KGNkZF9yYW5raW5nX2ZvcnR1bmVfaGVhZHF1YXJ0ZXJzX1N0YXRlX1Byb21lZGlvKQ0KDQpoZWFkKGFzLmRhdGEuZnJhbWUoY2RkX3JhbmtpbmdfZm9ydHVuZV9oZWFkcXVhcnRlcnNfU3RhdGVfUHJvbWVkaW8pKQ0KDQoNCmBgYA0KDQoNCiMjIyMgRGlzaW1pbGFyaWRhZA0KYGBge3IgRGlzaW1pbGFyaWRhZCwgZmlnLmFsaWduPSdjZW50ZXInfQ0KZGF0YV8gPSBhcy5kYXRhLmZyYW1lKGNkZF9yYW5raW5nX2ZvcnR1bmVfaGVhZHF1YXJ0ZXJzX1N0YXRlX1Byb21lZGlvKVssIC1jKDEpXQ0Kcm93bmFtZXMoZGF0YV8pID0gdW5jbGFzcyhjZGRfcmFua2luZ19mb3J0dW5lX2hlYWRxdWFydGVyc19TdGF0ZV9Qcm9tZWRpbyRIZWFkcXVhcnRlcnNfU3RhdGUpDQpmdml6X2Rpc3QoZ2V0X2Rpc3QoZGF0YV8sIHN0YW5kID0gVCwgbWV0aG9kID0gImV1Y2xpZGVhbiIpLCBncmFkaWVudCA9IGxpc3QobG93ID0gIiMwMEFGQkIiLCBtaWQgPSAid2hpdGUiLCBoaWdoID0gIiNGQzRFMDciKSkNCg0KDQpgYGANCg0KDQoNCiMjIyMgT3B0aW1pemFjacOzbiBkZSBNb2plbmEgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KIyMjIyMgVW5pw7NuIFNpbXBsZSANCmBgYHtyIFVuacOzbl9TaW1wbGUsIGZpZy5hbGlnbj0nY2VudGVyJ30NCmhjX3NpbmdsZSA9IGhjbHVzdChnZXRfZGlzdChkYXRhXywgc3RhbmQgPSBULCBtZXRob2QgPSAiZXVjbGlkZWFuIiksIG1ldGhvZCA9ICJzaW5nbGUiKQ0KDQptb2plbmEgPSBmdW5jdGlvbihoYyl7DQogIG5faGQgPSBsZW5ndGgoaGMkaGVpZ2h0KQ0KICBhbHBfZyA9IDAgOyBhbHBoYSA9IGhjJGhlaWdodFtuX2hkOjFdDQogIGZvcihpIGluIDE6KG5faGQtMSkpew0KICAgIGFscF9nW2ldID0gbWVhbihhbHBoYVsobl9oZC1pKzEpOjFdKSsxLjI1KnNkKGFscGhhWyhuX2hkLWkrMSk6MV0pDQogIH0NCiAgbm9nID0gc3VtKGFscF9nPD0gYWxwaGFbLW5faGRdKSArIDENCiAgcGxvdChhbHBoYVstbl9oZF0sIHBjaD0yMCwgY29sPShhbHBfZz5hbHBoYVstbl9oZF0pKzEsIG1haW4gPSBwYXN0ZSgiT3B0aW1hbCBudW1iZXIgb2YgZ3JvdXBzID0iLG5vZyksDQogICAgICAgeWxhYiA9IGV4cHJlc3Npb24oYWxwaGFbZ10pLCB4bGFiPSJOb2RlcyIpfQ0KDQptb2plbmEoaGNfc2luZ2xlKQ0KDQpgYGANCg0KIyMjIyMgVW5pw7NuIENvbXBsZXRhDQpgYGB7ciBVbmnDs25fQ29tcGxldGEsZmlnLmFsaWduPSdjZW50ZXInfQ0KaGNfY29tcGxldGUgPSBoY2x1c3QoZ2V0X2Rpc3QoZGF0YV8sIHN0YW5kID0gVCwgbWV0aG9kID0gImV1Y2xpZGVhbiIpLCBtZXRob2QgPSAiY29tcGxldGUiKQ0KDQptb2plbmEgPSBmdW5jdGlvbihoYyl7DQogIG5faGQgPSBsZW5ndGgoaGMkaGVpZ2h0KQ0KICBhbHBfZyA9IDAgOyBhbHBoYSA9IGhjJGhlaWdodFtuX2hkOjFdDQogIGZvcihpIGluIDE6KG5faGQtMSkpew0KICAgIGFscF9nW2ldID0gbWVhbihhbHBoYVsobl9oZC1pKzEpOjFdKSsxLjI1KnNkKGFscGhhWyhuX2hkLWkrMSk6MV0pDQogIH0NCiAgbm9nID0gc3VtKGFscF9nPD0gYWxwaGFbLW5faGRdKSArIDENCiAgcGxvdChhbHBoYVstbl9oZF0sIHBjaD0yMCwgY29sPShhbHBfZz5hbHBoYVstbl9oZF0pKzEsIG1haW4gPSBwYXN0ZSgiT3B0aW1hbCBudW1iZXIgb2YgZ3JvdXBzID0iLG5vZyksDQogICAgICAgeWxhYiA9IGV4cHJlc3Npb24oYWxwaGFbZ10pLCB4bGFiPSJOb2RlcyIpfQ0KDQptb2plbmEoaGNfY29tcGxldGUpDQoNCmBgYA0KDQojIyMjIyBVbmnDs24gUHJvbWVkaW8NCmBgYHtyIFVuacOzbl9Qcm9tZWRpbyxmaWcuYWxpZ249J2NlbnRlcid9DQpoY19hdmVyYWdlID0gaGNsdXN0KGdldF9kaXN0KGRhdGFfLCBzdGFuZCA9IFQsIG1ldGhvZCA9ICJldWNsaWRlYW4iKSwgbWV0aG9kID0gImF2ZXJhZ2UiKQ0KDQptb2plbmEgPSBmdW5jdGlvbihoYyl7DQogIG5faGQgPSBsZW5ndGgoaGMkaGVpZ2h0KQ0KICBhbHBfZyA9IDAgOyBhbHBoYSA9IGhjJGhlaWdodFtuX2hkOjFdDQogIGZvcihpIGluIDE6KG5faGQtMSkpew0KICAgIGFscF9nW2ldID0gbWVhbihhbHBoYVsobl9oZC1pKzEpOjFdKSsxLjI1KnNkKGFscGhhWyhuX2hkLWkrMSk6MV0pDQogIH0NCiAgbm9nID0gc3VtKGFscF9nPD0gYWxwaGFbLW5faGRdKSArIDENCiAgcGxvdChhbHBoYVstbl9oZF0sIHBjaD0yMCwgY29sPShhbHBfZz5hbHBoYVstbl9oZF0pKzEsIG1haW4gPSBwYXN0ZSgiT3B0aW1hbCBudW1iZXIgb2YgZ3JvdXBzID0iLG5vZyksDQogICAgICAgeWxhYiA9IGV4cHJlc3Npb24oYWxwaGFbZ10pLCB4bGFiPSJOb2RlcyIpfQ0KDQptb2plbmEoaGNfYXZlcmFnZSkNCg0KYGBgDQoNCiMjIyMgRGVuZG9ncmFtYXMgT3B0aW1pemFkb3Mgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KIyMjIyMgRW5sYWNlIFNpbXBsZQ0KYGBge3IgRW5sYWNlX1NpbXBsZSxmaWcuYWxpZ249J2NlbnRlcid9DQpzdXBwcmVzc1dhcm5pbmdzKGZ2aXpfZGVuZChoY19zaW5nbGUsIGsgPSAzLCBjZXggPSAwLjUsIGtfY29sb3JzID0gIm5wZyIsIGNvbG9yX2xhYmVsc19ieV9rID0gVCwgcmVjdCA9IFQpKQ0KDQpgYGANCg0KDQojIyMjIyBFbmxhY2UgQ29tcGxldG8NCmBgYHtyIEVubGFjZV9Db21wbGV0byxmaWcuYWxpZ249J2NlbnRlcid9DQpmdml6X2RlbmQoaGNfY29tcGxldGUsIGsgPSAzLCBjZXggPSAwLjUsIGtfY29sb3JzID0gIm5wZyIsIGNvbG9yX2xhYmVsc19ieV9rID0gVCwgcmVjdCA9IFQpDQoNCmBgYA0KDQoNCiMjIyMjIEVubGFjZSBQcm9tZWRpbw0KYGBge3IgRW5sYWNlX1Byb21lZGlvLGZpZy5hbGlnbj0nY2VudGVyJ30NCmZ2aXpfZGVuZChoY19hdmVyYWdlLCBrID0gNCwgY2V4ID0gMC41LCBrX2NvbG9ycyA9ICJucGciLCBjb2xvcl9sYWJlbHNfYnlfayA9IFQsIHJlY3QgPSBUKQ0KDQpgYGANCg0KDQojIyMgNC40LiBBZ3J1cGFjacOzbiBOby1KZXLDoXJxdWljYSB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KU2Vnw7puICBbQEFFRE1EaWF6LU1vcmFsZXMxZWRdLCBsb3MgKiptw6l0b2RvcyBkZSBhZ2xvbWVyYWNpw7NuIG5vIGplcsOhcnF1aWNvcyoqLCB0YW1iacOpbiBjb25vY2lkb3MgY29tbyBtw6l0b2RvcyBkZSAqKnBhcnRpY2nDs24qKiwgc2UgYmFzYW4gZW4gdW5hICoqcGFydGljacOzbiBpbmljaWFsKiogZGVsIGNvbmp1bnRvIGRlIGRhdG9zLCBnZW5lcmFuZG8gc3ViY29uanVudG9zIG8gZ3J1cG9zLiBBIGNhZGEgdW5vIGRlIGVzdG9zIGdydXBvcyBzZSBsZSBjYWxjdWxhIHVuIGNlbnRyb2lkZSwgeSBwb3N0ZXJpb3JtZW50ZSwgbGFzIG9ic2VydmFjaW9uZXMgc2UgYXNpZ25hbiBhbCBjb25nbG9tZXJhZG8gY3V5byBjZW50cm9pZGUgc2UgZW5jdWVudHJhIG3DoXMgY2VyY2Fuby4gRXN0ZSBwcm9jZXNvIHNlIHJlcGl0ZSByZWN1cnNpdmFtZW50ZSwgcmVjYWxjdWxhbmRvIGxvcyBjZW50cm9pZGVzIHkgYWp1c3RhbmRvIGxhcyBhc2lnbmFjaW9uZXMgaGFzdGEgcXVlIGxhcyBvYnNlcnZhY2lvbmVzIHlhIG5vIHB1ZWRhbiBjYW1iaWFyIGRlIGdydXBvLiBBIGRpZmVyZW5jaWEgZGUgbG9zIG3DqXRvZG9zIGplcsOhcnF1aWNvcywgZXN0ZSBlbmZvcXVlIHBlcm1pdGUgcXVlIHVuYSBvYnNlcnZhY2nDs24gY2FtYmllIGRlIGdydXBvIGR1cmFudGUgZWwgcHJvY2Vzby4NCg0KRWwgKiphbsOhbGlzaXMgZGUgY29uZ2xvbWVyYWRvcyBzZSBjZXJyYXLDoSoqIGNvbiBlbCBtw6l0b2RvIG5vIGplcsOhcnF1aWNvIGRlICoqSy1tZWRpYXMqKiwgcXVlIGRpdmlkZSB1biBjb25qdW50byBkZSAkbiQgb2JqZXRvcyBlbiAkayQgZ3J1cG9zLiBFc3RlIG3DqXRvZG8gc2VsZWNjaW9uYSBsb3MgY2VudHJvaWRlcyBkZSBsb3MgZ3J1cG9zIGRlIG1hbmVyYSBxdWUgbWluaW1pY2VuIGxhIGRpc3RhbmNpYSAqZXVjbGlkaWFuYSogZW50cmUgY2FkYSBvYmpldG8geSBzdSBjZW50cm9pZGUgbcOhcyBjZXJjYW5vLiBMYXMgb2JzZXJ2YWNpb25lcyBzZSBhc2lnbmFuIGFsIGNvbmdsb21lcmFkbyBjdXlvIGNlbnRyb2lkZSBlc3TDqSBtw6FzIHByw7N4aW1vLCBjb24gZWwgb2JqZXRpdm8gZGUgcmVvcmdhbml6YXIgbG9zIG9iamV0b3MgZW4gZ3J1cG9zIHF1ZSBwcmVzZW50ZW4gbGEgbWVub3IgdmFyaWFiaWxpZGFkIGludGVybmEgcG9zaWJsZS4NCg0KIyMjIDQuNS4gUGxhbnRlYW1pZW50byB5IERlc2Fycm9sbG8gey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KRGFkbyBxdWUgZWwgbcOpdG9kbyBkZSAqKkstbWVkaWFzKiogcmVxdWllcmUgZGVmaW5pciBwcmV2aWFtZW50ZSBsYSBjYW50aWRhZCBkZSBjb25nbG9tZXJhZG9zIGEgZm9ybWFyLCBlcyBmdW5kYW1lbnRhbCBkZXRlcm1pbmFyIGVzdGUgbsO6bWVybyBkZSBtYW5lcmEgYWRlY3VhZGEgcGFyYSBnYXJhbnRpemFyIGVsIG1lam9yIHJlc3VsdGFkbyBwb3NpYmxlLiBFbiBsYSBwZXN0YcOxYSAqKkstw7NwdGltb3MqKiBzZSBlbmN1ZW50cmFuIGxhcyBzdWJwZXN0YcOxYXMgcXVlIG11ZXN0cmFuIGxvcyByZXN1bHRhZG9zIGRlIGxvcyBjw6FsY3Vsb3MgcGFyYSBkZXRlcm1pbmFyIGVsIG7Dum1lcm8gKirDs3B0aW1vIGRlIGdydXBvcyoqLCB1dGlsaXphbmRvIGxvcyBtw6l0b2RvcyBkZSAqKkNvZG8gKEVsYm93KSoqLCAqKlNpbHVldGEqKiAqKihTaWxob3VldHRlKSoqLCoqR2FwIFN0YXRpc3RpYyoqIHkgKipSZWdsYSBkZSBsYSBNYXlvcsOtYSAoTWFqb3JpdHkgUnVsZSkqKg0KDQpFbCBtw6l0b2RvIGRlICoqQ29kbyAoRWxib3cpKiogeSAqKlNpbHVldGEgKFNpbGhvdWV0dGUpKiogaWRlbnRpZmljw7MgcXVlIGVsIG7Dum1lcm8gw7NwdGltbyBkZSBhZ3J1cGFtaWVudG9zIHF1ZSBtaW5pbWl6YW4gbGEgdmFyaWFjacOzbiB0b3RhbCBkZW50cm8gZGUgbG9zIGdydXBvcyBlcyAkMyQuICwgZWwgbcOpdG9kbyBkZSAqKkdhcCBTdGF0aXN0aWMqKiBzZcOxYWzDsyBjb21vIG7Dum1lcm8gw7NwdGltbyAyLg0KDQphY2nDs24gZXh0ZXJuYSksIG1vc3RyYW5kbyBxdWUgZXN0YSDDumx0aW1hIHNlIGFjZXJjYSBtw6FzIGEgdW5vIHBhcmEgZXN0ZSBuw7ptZXJvIGRlIGNvbmdsb21lcmFkb3MuDQoNCkEgcGVzYXIgZGUgbGFzIGRpZmVyZW5jaWFzIGVuIGxhcyByZWNvbWVuZGFjaW9uZXMgZGUgbG9zIGRpc3RpbnRvcyDDrW5kaWNlcywgbGEgcmVnbGEgZGUgbWF5b3LDrWEgaW5kaWNhIHF1ZSBlbCBuw7ptZXJvIGRlIGNsdXN0ZXJzIG3DoXMgYXByb3BpYWRvIGVzIDMuIEVzdG8gaW1wbGljYSBxdWUgbGEgbWF5b3LDrWEgZGUgbG9zIMOtbmRpY2VzIHV0aWxpemFkb3MgZmF2b3JlY2VuIGVzdGEgb3BjacOzbiwgeSBzZSBwdWVkZSBjb25zaWRlcmFyIGNvbW8gbGEgbWVqb3Igc29sdWNpw7NuIHBhcmEgZWwgbsO6bWVybyBkZSBjbHVzdGVycyBlbiBlc3RlIGFuw6FsaXNpcy4NCg0KRWwgcmVzdWx0YWRvIGRlbCBhcGFydGFkbyAqSy3Ds3B0aW1vIFt3d3NdKiBtdWVzdHJhIGPDs21vIHNlIGFncnVwYW4gbG9zIGRhdG9zIGVuIDMgY2x1c3RlcnMgYmFzYWRvcyBlbiBsYXMgY2FyYWN0ZXLDrXN0aWNhcyBwcm9wb3JjaW9uYWRhcy4gRWwgY2x1c3RlciAzIGVzIGVsIG3DoXMgZ3JhbmRlLCBjb24gcmVnaXN0cm9zIG3DoXMgaG9tb2fDqW5lb3MgZW4gdMOpcm1pbm9zIGRlIGxhcyB2YXJpYWJsZXMgZXN0dWRpYWRhcywgbWllbnRyYXMgcXVlIGxvcyBjbHVzdGVycyAxIHkgMiBzb24gbcOhcyBwZXF1ZcOxb3MuIExhIG1heW9yIHBhcnRlIGRlIGxhIHZhcmlhYmlsaWRhZCBzZSBleHBsaWNhIHBvciBsYXMgZGlmZXJlbmNpYXMgZW50cmUgbG9zIGNsdXN0ZXJzICg2OC45JSksIGxvIHF1ZSBzdWdpZXJlIHF1ZSBlbCBhbGdvcml0bW8gSy1tZWFucyBoYSBsb2dyYWRvIHVuYSBzZWdtZW50YWNpw7NuIHNpZ25pZmljYXRpdmEuDQoNCkVuIGVsIHVsdGltbyBhcGFydGFkbyBkZSAqSy3Ds3B0aW1vIFtzaWwqIGhhIHNlZ21lbnRhZG8gbG9zIGRhdG9zIGVuIGRvcyBjbHVzdGVyczoNCkNsdXN0ZXIgMSBlcyBlbCBncnVwbyBtw6FzIGdyYW5kZSB5IHBhcmVjZSBlc3RhciBjb21wdWVzdG8gcG9yIHJlZ2lzdHJvcyBjb24gdmFsb3JlcyByZWxhdGl2YW1lbnRlIGJham9zIGVuIGN1YW50byBhIGVtcGxlYWRvcywgaW5ncmVzb3MsIGdhbmFuY2lhcyB5IGFjdGl2b3MuDQpDbHVzdGVyIDIgZXN0w6EgY29tcHVlc3RvIHBvciB1biBncnVwbyBtw6FzIHBlcXVlw7FvIGRlIHJlZ2lzdHJvcyBjb24gdmFsb3JlcyBzaWduaWZpY2F0aXZhbWVudGUgbcOhcyBhbHRvcyBlbiBlc3RhcyB2YXJpYWJsZXMuDQpFbCBtb2RlbG8gZXhwbGljYSA0NC45JSBkZSBsYSB2YXJpYWJpbGlkYWQgZW50cmUgbG9zIGNsdXN0ZXJzLCBsbyBxdWUgc3VnaWVyZSBxdWUgbGFzIGRpZmVyZW5jaWFzIGVudHJlIGxvcyBkb3MgZ3J1cG9zIHNvbiBtb2RlcmFkYXMsIGF1bnF1ZSBwb2Ryw61hIGhhYmVyIG3DoXMgdmFyaWFiaWxpZGFkIGV4cGxpY2FkYSBzaSBlbCBuw7ptZXJvIGRlIGNsdXN0ZXJzIGZ1ZXJhIG1heW9yLg0KDQpFbiBlbCBhcGFydGFkbyBkZSBsYXMgZ3JhZmljYXMgZGUgbG9zIEstb3B0aW1vcyBzZSB2aXN1YWxpemE6DQpFbiBsYSBwcmltZXJhIGdyYWZpY2E6IGxhIHNlcGFyYWNpw7JuIGRlIGxvcyAzIGNsdXN0ZXJzIHkgZG9uZGUgc2UgdmlzdWFsaXphIGxvIGNvbmNsdWlkbyBhbnRlcmlvcm1lbnRlICoiYmFzYWRvcyBlbiBsYXMgY2FyYWN0ZXLDrXN0aWNhcyBwcm9wb3JjaW9uYWRhcy4gRWwgY2x1c3RlciAzIGVzIGVsIG3DoXMgZ3JhbmRlLCBjb24gcmVnaXN0cm9zIG3DoXMgaG9tb2fDqW5lb3MgZW4gdMOpcm1pbm9zIGRlIGxhcyB2YXJpYWJsZXMgZXN0dWRpYWRhcywgbWllbnRyYXMgcXVlIGxvcyBjbHVzdGVycyAxIHkgMiBzb24gbcOhcyBwZXF1ZcOxb3MuIExhIG1heW9yIHBhcnRlIGRlIGxhIHZhcmlhYmlsaWRhZCBzZSBleHBsaWNhIHBvciBsYXMgZGlmZXJlbmNpYXMgZW50cmUgbG9zIGNsdXN0ZXJzICg2OC45JSkiKg0KRW4gbGEgc2VndW5kYSBncmFmaWNhOiBzZSBvYnNlcnZhIGxhIHNlcGFyYWNpw7JuIG9uIGxvcyAyIGNsdXN0ZXIgZG9uZGUgZWwgdGFtYmllbiBzZSBwdWVkZSByZXBldGlyIGxvIGNvbmNsdWlkbyBhbnRlcmlvcm1lbnRlICIqQ2x1c3RlciAxIGVzIGVsIGdydXBvIG3DoXMgZ3JhbmRlIHkgcGFyZWNlIGVzdGFyIGNvbXB1ZXN0byBwb3IgcmVnaXN0cm9zIGNvbiB2YWxvcmVzIHJlbGF0aXZhbWVudGUgYmFqb3MgZW4gY3VhbnRvIGEgZW1wbGVhZG9zLCBpbmdyZXNvcywgZ2FuYW5jaWFzIHkgYWN0aXZvcywgQ2x1c3RlciAyIGVzdMOhIGNvbXB1ZXN0byBwb3IgdW4gZ3J1cG8gbcOhcyBwZXF1ZcOxbyBkZSByZWdpc3Ryb3MgY29uIHZhbG9yZXMgc2lnbmlmaWNhdGl2YW1lbnRlIG3DoXMgYWx0b3MgZW4gZXN0YXMgdmFyaWFibGVzLCBFbCBtb2RlbG8gZXhwbGljYSA0NC45JSoiDQoNCg0KIyMjIyBLLcOzcHRpbW9zIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCiMjIyMjIEVsYm93DQpgYGB7ciBFbGJvdywgZmlnLmFsaWduPSdjZW50ZXInfQ0KZnZpel9uYmNsdXN0KGRhdGFfLCBrbWVhbnMsIG1ldGhvZCA9ICJ3c3MiKSArIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDMsIGxpbmV0eXBlID0gMikNCg0KYGBgDQoNCiMjIyMjIFNpbGhvdWV0dGUNCmBgYHtyIFNpbGhvdWV0dGUsZmlnLmFsaWduPSdjZW50ZXInfQ0KZnZpel9uYmNsdXN0KGRhdGFfLCBrbWVhbnMsIG1ldGhvZCA9ICJzaWxob3VldHRlIikNCg0KYGBgDQoNCiMjIyMjIEdhcCBTdGF0aXN0aWMNCmBgYHtyIEdhcF9TdGF0aXN0aWMsZmlnLmFsaWduPSdjZW50ZXInfQ0KZnZpel9uYmNsdXN0KGRhdGFfLCBrbWVhbnMsIG1ldGhvZCA9ICJnYXBfc3RhdCIpDQoNCg0KYGBgDQoNCiMjIyMjIE1ham9yaXR5IFJ1bGUNCmBgYHtyIE1ham9yaXR5X1J1bGUsZmlnLmFsaWduPSdjZW50ZXInfQ0Kc3VwcHJlc3NXYXJuaW5ncyhOYkNsdXN0KGRhdGEgPSBkYXRhXywgZGlzcyA9IE5VTEwsIGRpc3RhbmNlID0gImV1Y2xpZGVhbiIsIG1pbi5uYyA9IDIsIG1heC5uYyA9IDEwLCBtZXRob2QgPSAia21lYW5zIikkQmVzdC5uYykNCg0KYGBgDQoNCiMjIyMgUmVzdWx0YWRvcyBLLW1lYW5zIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCiMjIyMjIEstw7NwdGltbyBbd3dzXQ0KYGBge3IgSy3Ds3B0aW1vX1t3d3NdLGZpZy5hbGlnbj0nY2VudGVyJ30NCnNldC5zZWVkKDIwMDUwMzI1KQ0KcHJpbnQoa21lYW5zKGRhdGFfLCAzLCBuc3RhcnQgPSAyNSkpDQpgYGANCg0KIyMjIyMgSy3Ds3B0aW1vIFtzaWxdDQpgYGB7ciBLLcOzcHRpbW9fW3NpbF0sZmlnLmFsaWduPSdjZW50ZXInfQ0Kc2V0LnNlZWQoNzgwNzI4KQ0KcHJpbnQoa21lYW5zKGRhdGFfLCAyLCBuc3RhcnQgPSAyNSkpDQpgYGANCg0KIyMjIyBHcsOhZmljb3MgSy1NZWFuc3sudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCiMjIyMjIEstw5NwdGltbyBbRWxiX01hLVJ1bCAzXQ0KYGBge3IgR3JhZl9FbGJfTWEtUnVsLCBmaWcuYWxpZ249J2NlbnRlcid9DQpmdml6X2NsdXN0ZXIoa21lYW5zKGRhdGFfLCAzLCBuc3RhcnQgPSAyNSksIGRhdGEgPSBkYXRhXywgcGFsZXR0ZSA9IGMoIiMyRTlGREYiLCAiIzAwQUZCQiIsICIjRTdCODAwIiwgIiNFN0I4MDEiKSwgZWxsaXBzZS50eXBlID0gImV1Y2xpZCIsIHN0YXIucGxvdCA9IFRSVUUsIHJlcGVsID0gVFJVRSwgZ2d0aGVtZSA9IHRoZW1lX21pbmltYWwoKQ0KKQ0KYGBgDQoNCiMjIyMjIEstw5NwdGltbyAgW3NpbCA0XQ0KYGBge3IgR3JhZl9zaWwsIGZpZy5hbGlnbj0nY2VudGVyJ30NCmZ2aXpfY2x1c3RlcihrbWVhbnMoZGF0YV8sIDIsIG5zdGFydCA9IDI1KSwgZGF0YSA9IGRhdGFfLCBwYWxldHRlID0gYygiIzJFOUZERiIsICIjMDBBRkJCIiwgIiNFN0I4MDAiLCAiI0U3QjgwMSIpLCBlbGxpcHNlLnR5cGUgPSAiZXVjbGlkIiwgc3Rhci5wbG90ID0gVFJVRSwgcmVwZWwgPSBUUlVFLCBnZ3RoZW1lID0gdGhlbWVfbWluaW1hbCgpDQopDQoNCmBgYA0KDQoNCg0KDQojIyAqKkZhc2UgNSBbQW7DoWxpc2lzIGRlIFJlZ3Jlc2nDs25dKioNCg0KRWwgYW7DoWxpc2lzIGRlIHJlZ3Jlc2nDs24gZXMgdW5hIGhlcnJhbWllbnRhIGZ1bmRhbWVudGFsIHBhcmEgbW9kZWxhciB5IHByZWRlY2lyIHJlbGFjaW9uZXMgZW50cmUgdmFyaWFibGVzLiBFbiBlc3RhIGZhc2UsIHNlIGV4cGxvcmFuIGRpZmVyZW50ZXMgZW5mb3F1ZXMgZGUgcmVncmVzacOzbiDigJRsaW5lYWwgc2ltcGxlLCBsaW5lYWwgbcO6bHRpcGxlIHkgbG9nw61zdGljYSBzaW1wbGXigJQgcGFyYSBjb21wcmVuZGVyIGPDs21vIGxhcyB2YXJpYWJsZXMgaW5kZXBlbmRpZW50ZXMgaW5mbHV5ZW4gZW4gbGEgdmFyaWFibGUgZGVwZW5kaWVudGUsIGlkZW50aWZpY2FuZG8gcGF0cm9uZXMgc2lnbmlmaWNhdGl2b3MgZW4gbG9zIGRhdG9zIGRlbCByYW5raW5nIEZvcnR1bmUgMTAwMC4NCg0KU2UgZW1wbGVhbiBtw6l0b2RvcyBkZSByZWdyZXNpw7NuIHBhcmEgY3VhbnRpZmljYXIgbGFzIHJlbGFjaW9uZXMgZW50cmUgdmFyaWFibGVzIGNsYXZlIGNvbW8gaW5ncmVzb3MsIGFjdGl2b3MgeSB1dGlsaWRhZGVzLiBBIHRyYXbDqXMgZGUgbW9kZWxvcyBzaW1wbGVzIHkgbcO6bHRpcGxlcywgc2UgZXZhbMO6YSBlbCBpbXBhY3RvIGluZGl2aWR1YWwgeSBjb21iaW5hZG8gZGUgZXN0YXMgdmFyaWFibGVzLCBtaWVudHJhcyBxdWUgbGEgcmVncmVzacOzbiBsb2fDrXN0aWNhIGFuYWxpemEgbGEgcHJvYmFiaWxpZGFkIGRlIHBlcnRlbmVjZXIgYSB1bmEgY2F0ZWdvcsOtYSBlc3BlY8OtZmljYSBlbiBmdW5jacOzbiBkZSBwcmVkaWN0b3JlcyBzZWxlY2Npb25hZG9zLg0KDQpMb3MgcmVzdWx0YWRvcyBkZWwgYW7DoWxpc2lzIGRlIHJlZ3Jlc2nDs24gcHJvcG9yY2lvbmFyb24gaW5zaWdodHMgdmFsaW9zb3Mgc29icmUgbGFzIHJlbGFjaW9uZXMgZW50cmUgdmFyaWFibGVzIGVjb27Ds21pY2FzIGNsYXZlLiBFc3RlIGVuZm9xdWUgcGVybWl0acOzIG5vIHNvbG8gcHJlZGVjaXIgY29tcG9ydGFtaWVudG9zIGZ1dHVyb3MsIHNpbm8gdGFtYmnDqW4gaWRlbnRpZmljYXIgZmFjdG9yZXMgZGV0ZXJtaW5hbnRlcyBxdWUgYWZlY3RhbiBzaWduaWZpY2F0aXZhbWVudGUgbG9zIHJlc3VsdGFkb3MgZW1wcmVzYXJpYWxlcy4NCg0KRWwgcHJpbmNpcGFsIG9iamV0aXZvIGRlbCBhbsOhbGlzaXMgZGUgcmVncmVzacOzbiBlcyBtb2RlbGFyIHkgZW50ZW5kZXIgY8OzbW8gbGFzIHZhcmlhYmxlcyBpbmRlcGVuZGllbnRlcyBhZmVjdGFuIHVuYSB2YXJpYWJsZSBkZXBlbmRpZW50ZSBlc3BlY8OtZmljYSwgaWRlbnRpZmljYW5kbyByZWxhY2lvbmVzIGxpbmVhbGVzIG8gbm8gbGluZWFsZXMgcXVlIHB1ZWRhbiBzZXIgdXRpbGl6YWRhcyBwYXJhIHByZWRpY2Npw7NuIHkgYW7DoWxpc2lzIGVzdHJhdMOpZ2ljby4NCg0KRW4gZXN0ZSBjb250ZXh0bywgc2UgYnVzY2EgZGV0ZXJtaW5hciBsYSBzaWduaWZpY2FuY2lhIGVzdGFkw61zdGljYSBkZSBsb3MgcHJlZGljdG9yZXMgc2VsZWNjaW9uYWRvcywgZXZhbHVhciBlbCBhanVzdGUgZGVsIG1vZGVsbyB5IG9wdGltaXphciBzdSBjYXBhY2lkYWQgZGUgZXhwbGljYWNpw7NuLiBBZGVtw6FzLCBzZSBwcmV0ZW5kZSBpZGVudGlmaWNhciBwYXRyb25lcyBxdWUgZXhwbGlxdWVuIGxhIHZhcmlhbnphIGRlIGxhIHZhcmlhYmxlIGRlcGVuZGllbnRlLCBmYWNpbGl0YW5kbyBsYSB0b21hIGRlIGRlY2lzaW9uZXMgYmFzYWRhcyBlbiBkYXRvcyBjb25jcmV0b3MuDQoNCkxvcyBvYmpldGl2b3MgZGVsIGFuw6FsaXNpcyBkZSByZWdyZXNpw7NuIHNlIGxvZ3Jhcm9uIGFsIGVzdGFibGVjZXIgbW9kZWxvcyByb2J1c3RvcyBxdWUgZXhwbGljYW4gbGFzIHJlbGFjaW9uZXMgZW50cmUgdmFyaWFibGVzIGNsYXZlLiBFc3RvIHBlcm1pdGnDsyBubyBzb2xvIGludGVycHJldGFyIGxvcyBmYWN0b3JlcyBxdWUgbcOhcyBjb250cmlidXllbiBhIGxvcyByZXN1bHRhZG9zIGVtcHJlc2FyaWFsZXMsIHNpbm8gdGFtYmnDqW4gY29uc3RydWlyIGhlcnJhbWllbnRhcyBwcmVkaWN0aXZhcyDDunRpbGVzIHBhcmEgZWwgYW7DoWxpc2lzIGVjb27Ds21pY28uDQoNCg0KIyMjIDUuMS4gUmVncmVzacOzbiBMaW5lYWwgU2ltcGxlDQoNCkVzdGUgbW9kZWxvLCBxdWUgYSBwYXJ0aXIgZGUgYWhvcmEgc2UgZGVub21pbmFyw6EgY29tbyBSTFMsIGVzdMOhIGNvbXB1ZXN0byBwb3IgZG9zIHZhcmlhYmxlczogdW5hIHByZWRpY3RvcmEgeSBvdHJhIHJlc3B1ZXN0YS4gRXNwZWPDrWZpY2FtZW50ZSwgbGEgdmFyaWFibGUgJFkkIHNlIGNvbnNpZGVyYSBpbmZsdWlkYSBwb3IgbGEgdmFyaWFibGUgcHJlZGljdG9yYSAkeCQuIExhIHJlbGFjacOzbiBlbnRyZSBlc3RhcyB2YXJpYWJsZXMgZXN0w6EgZGVzY3JpdGEgcG9yIGxhIGVjdWFjacOzbjoNCiQkWSA9IFxiZXRhXzAgKyBcYmV0YV8xeCArIFx2YXJlcHNpbG9uJCQNCkxhIHJlbGFjacOzbiBlbnRyZSBsYSB2YXJpYWJsZSBpbmRlcGVuZGllbnRlIHkgbGEgdmFyaWFibGUgZGVwZW5kaWVudGUgZW4gZWwgbW9kZWxvIGRlIHJlZ3Jlc2nDs24gbGluZWFsIHNpbXBsZSBkZWJlIGN1bXBsaXIgY2llcnRhcyBzdXBvc2ljaW9uZXMgY2xhdmUgcGFyYSBxdWUgbG9zIHJlc3VsdGFkb3Mgc2VhbiB2w6FsaWRvcy4gRXN0YXMgc29uIGxhcyBzaWd1aWVudGVzOiAxLiBMYSByZWxhY2nDs24gZW50cmUgbGEgdmFyaWFibGUgaW5kZXBlbmRpZW50ZSAkeCQgeSBsYSB2YXJpYWJsZSBkZXBlbmRpZW50ZSAkWSQgZGViZSBzZXIgbGluZWFsLiAyLiBFbCB0w6lybWlubyBkZSBlcnJvciAkzrUkIHNpZ3VlIHVuYSBkaXN0cmlidWNpw7NuIG5vcm1hbCB5IHRpZW5lIHVuYSBtZWRpYSBpZ3VhbCBhIGNlcm8uIDMuIExhcyBvYnNlcnZhY2lvbmVzIGRlYmVuIHNlciBpbmRlcGVuZGllbnRlcyBlbnRyZSBzw60sIGVzIGRlY2lyLCBlbCB2YWxvciBkZSAkWSQgcGFyYSB1biBkYXRvIG5vIGluZmx1eWUgZW4gbG9zIHZhbG9yZXMgZGUgJFkkIHBhcmEgb3Ryb3MgZGF0b3MuIDQuIExhIHZhcmlhbnphIGRlbCB0w6lybWlubyBkZSBlcnJvciAkzrUkIGRlYmUgc2VyIGNvbnN0YW50ZSBwYXJhIHRvZG9zIGxvcyB2YWxvcmVzIGRlIGxhIHZhcmlhYmxlIGluZGVwZW5kaWVudGUgJHgkLCB1bmEgY29uZGljacOzbiBjb25vY2lkYSBjb21vIGhvbW9jZWRhc3RpY2lkYWQuIExhIHZhcmlhbnphIGRlICRcdmFyZXBzaWxvbiQgZXMgY29uc3RhbnRlIHBhcmEgdG9kb3MgbG9zIHZhbG9yZXMgZGUgJHgkLg0KDQoNClBhcmEgZXN0aW1hciBsb3MgcGFyw6FtZXRyb3MgZGVzY29ub2NpZG9zICgkXGJldGFfMCQsICRcYmV0YV8xJCB5ICRcc2lnbWFeMiQpLCBzZSB1c2EgZWwgKiptw6l0b2RvIGRlIG3DrW5pbW9zIGN1YWRyYWRvcyoqLCBxdWUgYnVzY2EgbWluaW1pemFyIGxhIHN1bWEgZGUgbG9zIGN1YWRyYWRvcyBkZSBsYXMgZGVzdmlhY2lvbmVzIHZlcnRpY2FsZXMgZW50cmUgbG9zIHB1bnRvcyBvYnNlcnZhZG9zIHkgbGEgbMOtbmVhIGRlIHJlZ3Jlc2nDs246JCRTQ0UgPSBcc3VtX3tpPTF9Xm4gXGxlZnQoeV9pIC0gKFxiZXRhXzAgKyBcYmV0YV8xeF9pKVxyaWdodCleMiQkLiBSZXNvbHZpZW5kbyBlc3RlIHByb2JsZW1hLCBsYXMgZXN0aW1hY2lvbmVzIGRlIGxvcyBwYXLDoW1ldHJvcyBzb246DQokJFxoYXR7XGJldGF9XzEgPSBcZnJhY3tcc3VtX3tpPTF9Xm4gKHhfaSAtIFxiYXJ7eH0pKHlfaSAtIFxiYXJ7eX0pfXtcc3VtX3tpPTF9Xm4gKHhfaSAtIFxiYXJ7eH0pXjJ9LCBccXVhZCBcaGF0e1xiZXRhfV8wID0gXGJhcnt5fSAtIFxoYXR7XGJldGF9XzEgXGJhcnt4fS4kJA0KDQpBcXXDrSwgJFxiYXJ7eH0kIHkgJFxiYXJ7eX0kIHNvbiBsYXMgbWVkaWFzIG11ZXN0cmFsZXMgZGUgJHgkIGUgJHkkLCByZXNwZWN0aXZhbWVudGUuDQoNCkVsIGNvZWZpY2llbnRlIGRlIGRldGVybWluYWNpw7NuIGluZGljYSBsYSBwcm9wb3JjacOzbiBkZSBsYSB2YXJpYWJpbGlkYWQgZGUgJFkkIHF1ZSBwdWVkZSBleHBsaWNhcnNlIG1lZGlhbnRlIGVsIG1vZGVsbyBkZSByZWdyZXNpw7NuIGxpbmVhbCBzaW1wbGU6JCRSXjIgPSAxIC0gXGZyYWN7U0NFfXtTVEN9LCQkIGRvbmRlICRTQ0UkIGVzIGxhIHN1bWEgZGUgY3VhZHJhZG9zIGRlbCBlcnJvciB5ICRTVEMkIGVzIGxhIHN1bWEgdG90YWwgZGUgY3VhZHJhZG9zLiBVbiB2YWxvciBkZSAkUl4yJCBjZXJjYW5vIGEgMSBpbmRpY2EgcXVlIGVsIG1vZGVsbyBleHBsaWNhIGdyYW4gcGFydGUgZGUgbGEgdmFyaWFiaWxpZGFkIG9ic2VydmFkYSBlbiBsb3MgZGF0b3MuDQoNClNlIHB1ZWRlbiBmb3JtdWxhciBwcnVlYmFzIHBhcmEgZGV0ZXJtaW5hciBzaSBsb3MgY29lZmljaWVudGVzIGRlbCBtb2RlbG8gc29uIHNpZ25pZmljYXRpdmFtZW50ZSBkaWZlcmVudGVzIGRlIGNlcm8uIExhcyBoaXDDs3Rlc2lzIG51bGFzIGNvbXVuZXMgc29uOg0KLSBQYXJhICRcYmV0YV8wJDogJEhfMDogXGJldGFfMCA9IFxiZXRhX3swMH0kLg0KLSBQYXJhICRcYmV0YV8xJDogJEhfMDogXGJldGFfMSA9IDAkIChwcnVlYmEgZGUgdXRpbGlkYWQgZGVsIG1vZGVsbykuDQoNCkVsIGVzdGFkw61zdGljbyBkZSBwcnVlYmEgYXNvY2lhZG8gZXM6JCQgdCA9IFxmcmFje1xoYXR7XGJldGF9XzEgLSAwfXtTRShcaGF0e1xiZXRhfV8xKX0sJCQgZG9uZGUgJFNFKFxoYXR7XGJldGF9XzEpJCBlcyBlbCBlcnJvciBlc3TDoW5kYXIgZGUgJFxoYXR7XGJldGF9XzEkLiBFc3RlIGVzdGFkw61zdGljbyBzaWd1ZSB1bmEgZGlzdHJpYnVjacOzbiAkdCQgZGUgU3R1ZGVudCBjb24gJG4tMiQgZ3JhZG9zIGRlIGxpYmVydGFkLg0KDQpMb3MgaW50ZXJ2YWxvcyBkZSBjb25maWFuemEgcGFyYSBsb3MgcGFyw6FtZXRyb3MgZXN0aW1hZG9zIHNlIGNhbGN1bGFuIGNvbW86ICQkXGhhdHtcYmV0YX1fMSBccG0gdF97XGFscGhhLzIsIG4tMn0gXGNkb3QgU0UoXGhhdHtcYmV0YX1fMSkuJCQuIEVzdG9zIGludGVydmFsb3MgYnJpbmRhbiB1biByYW5nbyBwcm9iYWJsZSBwYXJhIGxvcyB2ZXJkYWRlcm9zIHZhbG9yZXMgZGUgJFxiZXRhXzAkIHkgJFxiZXRhXzEkLg0KDQpFbCBtb2RlbG8gZGUgcmVncmVzacOzbiBsaW5lYWwgc2ltcGxlIGVzIHVuYSBoZXJyYW1pZW50YSBwb2Rlcm9zYSBwYXJhIGFuYWxpemFyIHJlbGFjaW9uZXMgbGluZWFsZXMuIFNpbiBlbWJhcmdvLCBkZWJlIHVzYXJzZSBjb24gY2F1dGVsYTogbm8gZXh0cmFwb2xlIG3DoXMgYWxsw6EgZGVsIHJhbmdvIGRlIGxvcyBkYXRvcyB5IGFzZWfDunJlc2UgZGUgcXVlIGxhcyBzdXBvc2ljaW9uZXMgZGVsIG1vZGVsbyBzZWFuIHJhem9uYWJsZXMgcGFyYSBsb3MgZGF0b3MuIEFsIGNvbXByZW5kZXIgbGEgdmFyaWFiaWxpZGFkIGV4cGxpY2FkYSB5IG5vIGV4cGxpY2FkYSBwb3IgZWwgbW9kZWxvLCBsb3MgYW5hbGlzdGFzIHB1ZWRlbiB0b21hciBkZWNpc2lvbmVzIGZ1bmRhbWVudGFkYXMgeSBldmFsdWFyIGxhIHV0aWxpZGFkIGRlbCBtb2RlbG8gZW4gY29udGV4dG9zIGVzcGVjw61maWNvcy4NCg0KIyMjIyA1LjEuMS4gUGxhbnRlYW1pZW50byBkZWwgUHJvYmxlbWENCkNvbiBiYXNlIGVuIGVsIGNvbmp1bnRvIGRlIGRhdG9zIGRlc2NyaXRvIGVuIGxhIHNlY2Npw7NuICoqMioqIHNlIGZvcm11bGFyw6EgdW4gbW9kZWxvIGRlIHJlZ3Jlc2nDs24gbGluZWFsIHNpbXBsZSBwYXJhIGVzdHVkaWFyIGxhIHJlbGFjacOzbiBsaW5lYWwgc3VwdWVzdGEgZW50cmUgbGFzIHZhcmFpYmxlcyBkZWZpbmlkYXMgcG9yIGxvcyBjYW1wb3M6ICoqUHJvZml0c19NKiogKHZhcmlhYmxlIGRlcGVuZGllbnRlKSB5ICoqVE9FRkwgU2NvcmUqKiAodmFyaWFibGUgaW5kZXBlbmRpZW50ZSkuDQoNCiMjIyMgNS4xLjIuIERlc2Fycm9sbG8gZGVsIEFuw6FsaXNpcw0KRWwgZXN0dWRpbyBkZSByZWdyZXNpw7NuIGxpbmVhbCBzaW1wbGUgaGEgc2lkbyBwcm9jZXNhZG8gY29uIGByIFIudmVyc2lvbi5zdHJpbmdgIG1lZGlhZG8gcG9yIFJTdHVkaW8gZW4gdW5hIHBsYXRhZm9ybWEgeDg2XzY0LXc2NC1taW5ndzMyLg0KDQojIyMjIyA1LjEuMi4xLiBSZXN1bWVuIGVzdGFkw61zdGljbyBkZSBsYXMgdmFyaWFibGVzIHBvciBlc3R1ZGlhci4gey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KKlJlc3VtZW4gZGUgUHJvZml0YWJsZSogTGEgdmFyaWFibGUgUHJvZml0YWJsZSBlcyB1bmEgdmFyaWFibGUgY2F0ZWfDs3JpY2EgYmluYXJpYSBxdWUgdG9tYSB2YWxvcmVzIGRlIDAgKG5vIHJlbnRhYmxlKSB5IDEgKHJlbnRhYmxlKS4NCkVsIGFuw6FsaXNpcyBtdWVzdHJhIHF1ZSBsYSBtYXlvcsOtYSBkZSBsYXMgZW1wcmVzYXMgKGFscmVkZWRvciBkZWwgODUuMSUpIHNvbiByZW50YWJsZXMsIG1pZW50cmFzIHF1ZSB1biBwZXF1ZcOxbyBwb3JjZW50YWplICgxNC45JSkgbm8gbG8gc29uLg0KTG9zIHZhbG9yZXMgZGUgbG9zIGN1YXJ0aWxlcyB5IGxhIG1lZGlhbmEsIHRvZG9zIGVuIDEuMDAwLCByZWZ1ZXJ6YW4gcXVlIGxhIGRpc3RyaWJ1Y2nDs24gZXN0w6EgZnVlcnRlbWVudGUgaW5jbGluYWRhIGhhY2lhIGxhcyBlbXByZXNhcyByZW50YWJsZXMuDQoNCipSZXN1bWVuIGRlIFByb2ZpdHNfTSAoZ2FuYW5jaWFzKSogTGEgbWF5b3LDrWEgZGUgbGFzIGVtcHJlc2FzIHRpZW5lbiBnYW5hbmNpYXMgcXVlIG9zY2lsYW4gZW50cmUgMTU0LjUgKHByaW1lciBjdWFydGlsKSB5IDEsMzk4LjMgKHRlcmNlciBjdWFydGlsKSwgbWllbnRyYXMgcXVlIGxhIG1lZGlhbmEgc2UgZW5jdWVudHJhIGVuIDU0MS40LCBsbyBxdWUgaW5kaWNhIHF1ZSBsYSBtaXRhZCBkZSBsYXMgZW1wcmVzYXMgdGllbmVuIGdhbmFuY2lhcyBwb3IgZGViYWpvIGRlIGVzdGUgdmFsb3IuIFNpbiBlbWJhcmdvLCBlbCBwcm9tZWRpbyAoMSw4NjMuNCkgc3VnaWVyZSBxdWUgZXhpc3RlbiBhbGd1bmFzIGVtcHJlc2FzIGNvbiBnYW5hbmNpYXMgZXh0cmVtYWRhbWVudGUgYWx0YXMsIGNvbW8gbGEgcXVlIGFsY2FuemEgdW4gbcOheGltbyBkZSA5Niw5OTUuMCwgbG8gcXVlIGVsZXZhIGVsIHZhbG9yIG1lZGlvLiBBZGVtw6FzLCBoYXkgY2Fzb3MgZGUgcMOpcmRpZGFzIHNpZ25pZmljYXRpdmFzIHJlZmxlamFkYXMgZW4gZWwgdmFsb3IgbcOtbmltbyBkZSAtMTAsMjk4LjAuDQoNCkVsIGRpYWdyYW1hIGRlIGNhamEgcGVybWl0ZSB2aXN1YWxpemFyIGNsYXJhbWVudGUgZXN0YSBkaXNwZXJzacOzbiB5IGxhIHByZXNlbmNpYSBkZSB2YWxvcmVzIGV4dHJlbW9zLCB0YW50byBlbiBlbCByYW5nbyBwb3NpdGl2byBjb21vIG5lZ2F0aXZvLiBFcyBjcnVjaWFsIHRlbmVyIGVuIGN1ZW50YSBlc3RvcyB2YWxvcmVzIGF0w61waWNvcyBwYXJhIGV2aXRhciBzZXNnb3MgZW4gYW7DoWxpc2lzIHBvc3RlcmlvcmVzIHkgY29uc2lkZXJhciBwb3NpYmxlcyBzZWdtZW50YWNpb25lcyBvIHRyYW5zZm9ybWFjaW9uZXMgZW4gbG9zIGRhdG9zLg0KDQpFbCAqRGlhZ3JhbWEgZGUgRGlzcGVyc2nDs24gIFByb2ZpdHNfTSAoZ2FuYW5jaWFzKSB2cy4gUHJvZml0YWJsZSogRWwgYW7DoWxpc2lzIG11ZXN0cmEgdW5hIGNsYXJhIGRpZmVyZW5jaWEgZW4gbG9zIG5pdmVsZXMgZGUgZ2FuYW5jaWFzIGVudHJlIGxhcyBlbXByZXNhcyByZW50YWJsZXMgeSBubyByZW50YWJsZXMuIExhcyBlbXByZXNhcyByZW50YWJsZXMgcHJlc2VudGFuIGdhbmFuY2lhcyBzaWduaWZpY2F0aXZhbWVudGUgbWF5b3JlcywgbWllbnRyYXMgcXVlIGxhcyBubyByZW50YWJsZXMgdGllbmRlbiBhIHJlZ2lzdHJhciB2YWxvcmVzIG3DoXMgYmFqb3MsIGxsZWdhbmRvIGluY2x1c28gYSBww6lyZGlkYXMgZW4gYWxndW5vcyBjYXNvcy4NCg0KRXN0ZSBjb21wb3J0YW1pZW50byByZXNhbHRhIHF1ZSBsYSByZW50YWJpbGlkYWQgZXN0w6EgZXN0cmVjaGFtZW50ZSByZWxhY2lvbmFkYSBjb24gbGEgY2FwYWNpZGFkIGRlIGxhcyBlbXByZXNhcyBwYXJhIGdlbmVyYXIgeSBnZXN0aW9uYXIgc3VzIGdhbmFuY2lhcyBkZSBtYW5lcmEgZWZpY2llbnRlLiBQb3IgbG8gdGFudG8sIGVzdGUgYW7DoWxpc2lzIGVuZmF0aXphIGxhIGltcG9ydGFuY2lhIGRlIGlkZW50aWZpY2FyIGxvcyBmYWN0b3JlcyBxdWUgcGVybWl0ZW4gYSBsYXMgZW1wcmVzYXMgbWF4aW1pemFyIHN1cyBiZW5lZmljaW9zIHkgbWFudGVuZXJzZSBkZW50cm8gZGVsIGdydXBvIGRlIGxhcyByZW50YWJsZXMuDQoNCkxvcyAqRGlhZ3JhbWFzIFRvdGFsZXMgZGUgRGlzcGVyc2nDs24qIFByb2ZpdHNfTSAoZ2FuYW5jaWFzKSB2cyBSZXZlbnVlc19NOg0KDQpMYSBkaXNwZXJzacOzbiBzdWdpZXJlIHF1ZSBoYXkgdW5hIHJlbGFjacOzbiBwb3NpdGl2YTogYSBtYXlvciBuw7ptZXJvIGRlIGVtcGxlYWRvcywgdGllbmRlbiBhIGF1bWVudGFyIGxvcyBpbmdyZXNvcy4gU2luIGVtYmFyZ28sIGxhIHJlbGFjacOzbiBubyBlcyBwZXJmZWN0YW1lbnRlIGxpbmVhbCwgeWEgcXVlIGxvcyBwdW50b3MgZXN0w6FuIGRpc3BlcnNvcywgZXNwZWNpYWxtZW50ZSBlbiBsb3MgZXh0cmVtb3MuDQoNCipOdW1iZXJfb2ZfZW1wbG95ZWVzIHZzIFByb2ZpdHNfTSo6SGF5IHVuYSBkaXNwZXJzacOzbiBzaWduaWZpY2F0aXZhLCBsbyBxdWUgaW5kaWNhIHF1ZSBubyBoYXkgdW5hIHJlbGFjacOzbiBjbGFyYSBlbnRyZSBlbCBuw7ptZXJvIGRlIGVtcGxlYWRvcyB5IGxhcyBnYW5hbmNpYXMuIEFsZ3VuYXMgZW1wcmVzYXMgdGllbmVuIHBvY29zIGVtcGxlYWRvcyB5IGFsdGFzIGdhbmFuY2lhcywgbWllbnRyYXMgcXVlIG90cmFzIHRpZW5lbiBtdWNob3MgZW1wbGVhZG9zIHkgZ2FuYW5jaWFzIGJhamFzLg0KKk51bWJlcl9vZl9lbXBsb3llZXMgdnMgQXNzZXRzX00qOkxhIHJlbGFjacOzbiBlbnRyZSBlc3RhcyB2YXJpYWJsZXMgcGFyZWNlIHNlciBkw6liaWwuIExvcyBhY3Rpdm9zIG5vIHBhcmVjZW4gZGVwZW5kZXIgZGlyZWN0YW1lbnRlIGRlIGxhIGNhbnRpZGFkIGRlIGVtcGxlYWRvcywgeWEgcXVlIGxvcyBwdW50b3MgZXN0w6FuIGRpc3BlcnNvcyBzaW4gdW4gcGF0csOzbiBjbGFyby4NCipOdW1iZXJfb2ZfZW1wbG95ZWVzIHZzIE1hcmtldENhcF9VcGRhdGVkX00qOlNlIG9ic2VydmEgdW5hIGxldmUgcmVsYWNpw7NuIHBvc2l0aXZhOiBsYXMgZW1wcmVzYXMgY29uIG1heW9yIG7Dum1lcm8gZGUgZW1wbGVhZG9zIHRpZW5kZW4gYSB0ZW5lciB1bmEgbWF5b3IgY2FwaXRhbGl6YWNpw7NuIGRlIG1lcmNhZG8sIHBlcm8gbnVldmFtZW50ZSwgbGEgcmVsYWNpw7NuIG5vIGVzIGZ1ZXJ0ZS4NCipSZXZlbnVlc19NIHZzIFByb2ZpdHNfTSo6RXhpc3RlIHVuYSByZWxhY2nDs24gcG9zaXRpdmEgbcOhcyBldmlkZW50ZTogYSBtZWRpZGEgcXVlIGxvcyBpbmdyZXNvcyBhdW1lbnRhbiwgdGFtYmnDqW4gdGllbmRlbiBhIGF1bWVudGFyIGxhcyBnYW5hbmNpYXMuIFNpbiBlbWJhcmdvLCBoYXkgY2Fzb3MgYXTDrXBpY29zIChvdXRsaWVycykgcXVlIHB1ZWRlbiBlc3RhciBhZmVjdGFuZG8gbGEgY2xhcmlkYWQgZGVsIHBhdHLDs24uDQoqUmV2ZW51ZXNfTSB2cyBBc3NldHNfTSo6TGEgcmVsYWNpw7NuIGVudHJlIGluZ3Jlc29zIHkgYWN0aXZvcyBlcyBwb3NpdGl2YSwgcGVybyBtb2RlcmFkYS4gTGFzIGVtcHJlc2FzIGNvbiBtYXlvcmVzIGluZ3Jlc29zIHRpZW5kZW4gYSB0ZW5lciBhY3Rpdm9zIG3DoXMgZ3JhbmRlcy4NCipSZXZlbnVlc19NIHZzIE1hcmtldENhcF9VcGRhdGVkX00qOkhheSB1bmEgcmVsYWNpw7NuIHBvc2l0aXZhIG1vZGVyYWRhOiBlbXByZXNhcyBjb24gbWF5b3JlcyBpbmdyZXNvcyBzdWVsZW4gdGVuZXIgdW5hIG1heW9yIGNhcGl0YWxpemFjacOzbiBkZSBtZXJjYWRvLg0KKlByb2ZpdHNfTSB2cyBBc3NldHNfTSo6UmVsYWNpw7NuIHBvc2l0aXZhIGTDqWJpbDogbGFzIGdhbmFuY2lhcyB5IGxvcyBhY3Rpdm9zIG5vIHBhcmVjZW4gZXN0YXIgZXN0cmVjaGFtZW50ZSByZWxhY2lvbmFkb3MsIGF1bnF1ZSBoYXkgdW5hIGxpZ2VyYSB0ZW5kZW5jaWEgYSBxdWUgbGFzIGVtcHJlc2FzIGNvbiBtw6FzIGFjdGl2b3MgdGVuZ2FuIG3DoXMgZ2FuYW5jaWFzLg0KKlByb2ZpdHNfTSB2cyBNYXJrZXRDYXBfVXBkYXRlZF9NKjpFeGlzdGUgdW5hIHJlbGFjacOzbiBwb3NpdGl2YSBmdWVydGU6IGxhcyBnYW5hbmNpYXMgcGFyZWNlbiBlc3RhciBlc3RyZWNoYW1lbnRlIHJlbGFjaW9uYWRhcyBjb24gbGEgY2FwaXRhbGl6YWNpw7NuIGRlIG1lcmNhZG8uIEVzdG8gaW1wbGljYSBxdWUgbGFzIGVtcHJlc2FzIG3DoXMgcmVudGFibGVzIHRpZW5kZW4gYSBzZXIgbcOhcyB2YWxpb3NhcyBlbiB0w6lybWlub3MgZGUgbWVyY2Fkby4NCipBc3NldHNfTSB2cyBNYXJrZXRDYXBfVXBkYXRlZF9NKjpSZWxhY2nDs24gZMOpYmlsOiBsb3MgYWN0aXZvcyB5IGxhIGNhcGl0YWxpemFjacOzbiBkZSBtZXJjYWRvIG5vIHBhcmVjZW4gdGVuZXIgdW5hIHJlbGFjacOzbiBmdWVydGUsIGxvIHF1ZSBpbmRpY2EgcXVlIGVsIHZhbG9yIGRlIG1lcmNhZG8gbm8gZGVwZW5kZSBkaXJlY3RhbWVudGUgZGUgbG9zIGFjdGl2b3MgdG90YWxlcyBkZSBsYSBlbXByZXNhLg0KDQpFc3RlIGFuw6FsaXNpcyBtdWVzdHJhIHF1ZToNCg0KTGFzIHJlbGFjaW9uZXMgbcOhcyBmdWVydGVzIHNlIGVuY3VlbnRyYW4gZW50cmUgKlJldmVudWVzX00geSBQcm9maXRzX00qIHkgZW50cmUgKlByb2ZpdHNfTSB5IE1hcmtldENhcF9VcGRhdGVkX00qLg0KT3RyYXMgdmFyaWFibGVzLCBjb21vICpOdW1iZXJfb2ZfZW1wbG95ZWVzIHkgQXNzZXRzX00qLCBtdWVzdHJhbiByZWxhY2lvbmVzIG3DoXMgZMOpYmlsZXMgY29uIGxhcyBkZW3DoXMuDQpFc3RvcyBwYXRyb25lcyBwb2Ryw61hbiBzdWdlcmlyIHF1ZSBsb3MgKmluZ3Jlc29zIHkgbGFzIGdhbmFuY2lhcyogc29uIGxvcyBwcmluY2lwYWxlcyBpbXB1bHNvcmVzIGRlIGxhIGNhcGl0YWxpemFjacOzbiBkZSBtZXJjYWRvLCBtaWVudHJhcyBxdWUgZWwgbsO6bWVybyBkZSBlbXBsZWFkb3MgbyBsb3MgYWN0aXZvcyB0aWVuZW4gdW4gaW1wYWN0byBtZW5vcyBkaXJlY3RvLg0KDQojIyMjIyMgUmVzdW1lbiBkZSBQcm9maXRhYmxlDQpgYGB7ciBSZXN1bWVuX2RlX1Byb2ZpdGFibGUsIGZpZy5hbGlnbj0nY2VudGVyJ30NCiMgRnVuY2nDs24gcGFyYSBjcmVhciBlbCBkaWFncmFtYSBkZSBjYWphIGNvbiBlc2NhbGEgcGVyc29uYWxpemFkYQ0KY3JlYXJfYm94cGxvdF9wcm9maXRhYmxlIDwtIGZ1bmN0aW9uKGRhdGEsIHZhcmlhYmxlLCBtYWluX3RpdGxlID0gIkRpYWdyYW1hIGRlIENhamEgZGUgUHJvZml0YWJsZSIsIGNvbG9yID0gIm9yYW5nZSIsIHlsaW0gPSBOVUxMKSB7DQogIGJveHBsb3QoZGF0YVtbdmFyaWFibGVdXSwgDQogICAgICAgICAgbWFpbiA9IG1haW5fdGl0bGUsIA0KICAgICAgICAgIGNvbCA9IGNvbG9yLCANCiAgICAgICAgICB5bGltID0geWxpbSkgIyBQZXJtaXRlIHBlcnNvbmFsaXphciBsb3MgbMOtbWl0ZXMgZGVsIGVqZSBZDQp9DQoNCiMgUmVzdW1lbiBkZSBsYSB2YXJpYWJsZSBQcm9maXRhYmxlDQpzdW1tYXJ5KGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJFByb2ZpdGFibGUpDQoNCmNyZWFyX2JveHBsb3RfcHJvZml0YWJsZSgNCiAgY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8sIA0KICAiUHJvZml0YWJsZSIsIA0KICBtYWluX3RpdGxlID0gIkRpYWdyYW1hIGRlIENhamEgZGUgUHJvZml0YWJsZSIsIA0KICBjb2xvciA9ICJvcmFuZ2UiLCANCiAgeWxpbSA9IGMoLTAuNSwgMS41KSAjIEVzY2FsYSBwZXJzb25hbGl6YWRhIChwdWVkZXMgYWp1c3RhcmxhIHNlZ8O6biB0dXMgbmVjZXNpZGFkZXMpDQopDQoNCmBgYA0KDQoNCiMjIyMjIyBSZXN1bWVuIGRlIFByb2ZpdHNfTSAoZ2FuYW5jaWFzKQ0KYGBge3IgUmVzdW1lbl9kZV9Qcm9maXRzX019DQpzdW1tYXJ5KGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJFByb2ZpdHNfTSkNCg0KYm94cGxvdChjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRQcm9maXRzX00sIG1haW4gPSAiRGlhZ3JhbWEgZGUgY2FqYSBQcm9maXRfTSIsIGNvbCA9IGMoImdvbGQiKSkNCg0KYGBgDQoNCiMjIyMjIyBEaWFncmFtYSBkZSBEaXNwZXJzacOzbiAgUHJvZml0c19NIChnYW5hbmNpYXMpIHZzLiBQcm9maXRhYmxlDQpgYGB7ciBEaWFncmFtYV9kZV9EaXNwZXJzacOzbl9Qcm9maXRzX01fdnMuX1Byb2ZpdGFibGUsZmlnLmFsaWduPSdjZW50ZXInfQ0KcGxvdChjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRQcm9maXRzX00sIGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJFByb2ZpdGFibGUsIG1haW4gPSAiRGlhZ3JhbWEgZGUgRGlzcGVyc2nDs24gIFByb2ZpdHNfTSAoZ2FuYW5jaWFzKSB2cy4gUHJvZml0YWJsZSIpDQoNCmBgYA0KDQojIyMjIyMgRGlhZ3JhbWFzIFRvdGFsZXMgZGUgRGlzcGVyc2nDs24NCmBgYHtyIERpYWdyYW1hc19Ub3RhbGVzX2RlX0Rpc3BlcnNpw7NufQ0KcGFpcnMofk51bWJlcl9vZl9lbXBsb3llZXMgKyBSZXZlbnVlc19NICsgUHJvZml0c19NICsgQXNzZXRzX00gKyBNYXJrZXRDYXBfVXBkYXRlZF9NICwgZGF0YSA9IGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvKQ0KYGBgDQoNCg0KDQoNCiMjIyMjIDUuMy4yIEZvcm11bGFjacOzbiBkZWwgbW9kZWxvIGRlIFJMUyBlbnRyZSBsYXMgdmFyaWFibGVzIGRlIGVzdHVkaW8uey50YWJzZXQudGFic2V0LXBpbGxzfQ0KDQoxLiAqQ29lZmljaWVudGVzIGRlbCBNb2RlbG8gUkxTKg0KSW50ZXJjZXB0byA9IDAuODMzOTY6DQpFc3RlIHZhbG9yIHJlcHJlc2VudGEgbGEgcHJvYmFiaWxpZGFkIHByb21lZGlvIGRlIHF1ZSB1bmEgZW1wcmVzYSBzZWEgcmVudGFibGUgY3VhbmRvIGxhcyBnYW5hbmNpYXMgKFByb2ZpdHNfTSkgc29uIGlndWFsIGEgY2Vyby4gQXVucXVlIG5vIHRpZW5lIHVuIHNpZ25pZmljYWRvIHByw6FjdGljbyBkaXJlY3RvIChwb3JxdWUgZXMgaW1wcm9iYWJsZSBxdWUgdW5hIGVtcHJlc2EgdGVuZ2EgZ2FuYW5jaWFzIGV4YWN0YW1lbnRlIGlndWFsZXMgYSBjZXJvKSwgc2UgaW5jbHV5ZSBlbiBlbCBtb2RlbG8gcGFyYSBlbCBhanVzdGUgZGVsIG1vZGVsbyBkZSByZWdyZXNpw7NuLiBFbiBlc3RlIGNhc28sIHVuIHZhbG9yIGRlIDAuODMzOTYgaW5kaWNhIHF1ZSwgY3VhbmRvIGxhcyBnYW5hbmNpYXMgc29uIG51bGFzLCBsYSBwcm9iYWJpbGlkYWQgYmFzZSBkZSBxdWUgbGEgZW1wcmVzYSBzZWEgcmVudGFibGUgZXMgODMuNCUuDQoNClBlbmRpZW50ZSA9IDkuMTQ0ZS0wNjoNCkVzdGUgdmFsb3IgaW5kaWNhIHF1ZSBwb3IgY2FkYSBtaWxsw7NuIGFkaWNpb25hbCBkZSBnYW5hbmNpYXMgKFByb2ZpdHNfTSksIGxhIHByb2JhYmlsaWRhZCBkZSBxdWUgbGEgZW1wcmVzYSBzZWEgcmVudGFibGUgYXVtZW50YSBlbiAwLjAwMDkxNDQlLiBBdW5xdWUgbGEgcmVsYWNpw7NuIGVzIHBvc2l0aXZhLCBlbCBpbXBhY3RvIGVzIG11eSBkw6liaWwsIHN1Z2lyaWVuZG8gcXVlIGxhcyBnYW5hbmNpYXMgdGllbmVuIHVuYSBpbmZsdWVuY2lhIG1hcmdpbmFsIHNvYnJlIGxhIHByb2JhYmlsaWRhZCBkZSByZW50YWJpbGlkYWQgZGUgbGEgZW1wcmVzYS4NCg0KKlJlc3VtZW4gRXN0YWTDrXN0aWNvIGRlbCBNb2RlbG8gUkxTKg0KUmVzaWR1YWxzOkxvcyB2YWxvcmVzIHJlc2lkdWFsZXMgcmVwcmVzZW50YW4gbGEgZGlmZXJlbmNpYSBlbnRyZSBsb3MgdmFsb3JlcyBvYnNlcnZhZG9zIGRlIGxhIHZhcmlhYmxlIGRlcGVuZGllbnRlIChQcm9maXRhYmxlKSB5IGxvcyB2YWxvcmVzIHByZWRpY2hvcyBwb3IgZWwgbW9kZWxvLiBMb3MgcmVzaWR1b3Mgc29uIGxvcyBzaWd1aWVudGVzOm3DrW5pbW86IC0wLjgzNDAsUHJpbWVyIGN1YXJ0aWwgKDFRKTogMC4xMjkzLE1lZGlhbmE6IDAuMTU3OCxUZXJjZXIgY3VhcnRpbCAoM1EpOiAwLjE2MjgsTcOheGltbzogMC4xNjYwLCBFc3RvcyB2YWxvcmVzIHN1Z2llcmVuIHF1ZSBlbCBtb2RlbG8gdGllbmUgYWxndW5vcyBlcnJvcmVzIHNpZ25pZmljYXRpdm9zIGVuIGxhIHByZWRpY2Npw7NuIGRlIGxhIHJlbnRhYmlsaWRhZC4gTGEgZGlmZXJlbmNpYSBlbnRyZSBsb3MgdmFsb3JlcyBwcmVkaWNob3MgeSBvYnNlcnZhZG9zIHB1ZWRlIHNlciByZWxhdGl2YW1lbnRlIGdyYW5kZSBlbiBhbGd1bm9zIGNhc29zLCBhdW5xdWUgZWwgZXJyb3IgZXMgbW9kZXJhZG8gZW4gdMOpcm1pbm9zIGFic29sdXRvcy4NCg0KQ29lZmljaWVudGVzOiBFbCBjb2VmaWNpZW50ZSBkZSBsYSB2YXJpYWJsZSBQcm9maXRzX00gZXMgOS4xNDRlLTA2LCBjb24gdW4gdmFsb3IgcCBtdXkgYmFqbyAoNS43OGUtMDgpLCBsbyBxdWUgc2lnbmlmaWNhIHF1ZSBleGlzdGUgdW5hIHJlbGFjacOzbiBwb3NpdGl2YSBlbnRyZSBsYXMgZ2FuYW5jaWFzIHkgbGEgcHJvYmFiaWxpZGFkIGRlIHF1ZSB1bmEgZW1wcmVzYSBzZWEgcmVudGFibGUuIEVzdGEgcmVsYWNpw7NuIGVzIGVzdGFkw61zdGljYW1lbnRlIHNpZ25pZmljYXRpdmEgYWwgbml2ZWwgZGVsIDk5LjklIGRlIGNvbmZpYW56YS4gU2luIGVtYmFyZ28sIGVsIGNvZWZpY2llbnRlIGVzIHBlcXVlw7FvLCBsbyBxdWUgaW5kaWNhIHF1ZSBsYSBpbmZsdWVuY2lhIGRlIGxhcyBnYW5hbmNpYXMgc29icmUgbGEgcHJvYmFiaWxpZGFkIGRlIHJlbnRhYmlsaWRhZCBlcyBkw6liaWwuDQoNClItc3F1YXJlZCAoUsKyID0gMC4wMjkwOCk6IEVsIHZhbG9yIGRlIFLCsiBlcyAwLjAyOTA4LCBsbyBxdWUgc2lnbmlmaWNhIHF1ZSBzb2xvIGVsIDIuOTElIGRlIGxhIHZhcmlhYmlsaWRhZCBlbiBsYSBwcm9iYWJpbGlkYWQgZGUgcmVudGFiaWxpZGFkIGRlIGxhcyBlbXByZXNhcyBwdWVkZSBzZXIgZXhwbGljYWRvIHBvciBsYXMgZ2FuYW5jaWFzLiBFc3RlIGVzIHVuIHZhbG9yIG11eSBiYWpvLCBsbyBxdWUgaW5kaWNhIHF1ZSBlbCBtb2RlbG8gdGllbmUgdW5hIGNhcGFjaWRhZCBwcmVkaWN0aXZhIGxpbWl0YWRhLiBMYXMgZ2FuYW5jaWFzIHBvciBzw60gc29sYXMgbm8gZXhwbGljYW4gbGEgbWF5b3IgcGFydGUgZGUgbGEgdmFyaWFiaWxpZGFkIGVuIGxhIHJlbnRhYmlsaWRhZC4NCg0KRi1zdGF0aXN0aWMgKDI5Ljg5KSB5IHZhbG9yIHAgKDUuNzc2ZS0wOCk6IEVsIEYtc3RhdGlzdGljIGVzIDI5Ljg5IHkgZWwgdmFsb3IgcCBlcyA1Ljc3NmUtMDgsIGxvIHF1ZSBpbmRpY2EgcXVlIGVsIG1vZGVsbyBlcyBlc3RhZMOtc3RpY2FtZW50ZSBzaWduaWZpY2F0aXZvIGVuIHN1IGNvbmp1bnRvLiBBIHBlc2FyIGRlIGxhIGJhamEgY2FwYWNpZGFkIGV4cGxpY2F0aXZhIChiYWpvIFLCsiksIGVsIG1vZGVsbyBtdWVzdHJhIHN1ZmljaWVudGUgZXZpZGVuY2lhIGVzdGFkw61zdGljYSBwYXJhIHN1Z2VyaXIgcXVlIGxhcyBnYW5hbmNpYXMgdGllbmVuIHVuIGltcGFjdG8gZW4gbGEgcHJvYmFiaWxpZGFkIGRlIHJlbnRhYmlsaWRhZC4NCg0KMy4gKlRhYmxhIEFOT1ZBKiBwYXJhIGVsIE1vZGVsbyBSTFMNClByb2ZpdHNfTTpEZiA9IDE6IEhheSB1bmEgc29sYSB2YXJpYWJsZSBleHBsaWNhdGl2YSwgUHJvZml0c19NLg0KU3VtIFNxID0gMy42ODc6IExhIHZhcmlhYmlsaWRhZCB0b3RhbCBleHBsaWNhZGEgcG9yIGxhcyBnYW5hbmNpYXMgZXMgMy42ODcuDQpNZWFuIFNxID0gMy42ODczOiBMYSBtZWRpYSBkZSBsYSB2YXJpYWJpbGlkYWQgZXhwbGljYWRhIGVzIDMuNjg3My4NCkYgdmFsdWUgPSAyOS44OTE6IEVsIHZhbG9yIEYgZXMgMjkuODkxLCBsbyBxdWUgc3VnaWVyZSBxdWUgZWwgbW9kZWxvIGVzIHNpZ25pZmljYXRpdm8uDQpQcig+RikgPSA1Ljc3NmUtMDg6IEVzdGUgdmFsb3IgcCBlcyBleHRyZW1hZGFtZW50ZSBiYWpvICg1Ljc3NmUtMDgpLCBsbyBxdWUgaW5kaWNhIHF1ZSBQcm9maXRzX00gZXMgdW5hIHZhcmlhYmxlIGV4cGxpY2F0aXZhIHNpZ25pZmljYXRpdmFtZW50ZSByZWxldmFudGUgcGFyYSBlbCBtb2RlbG8uDQpSZXNpZHVhbHM6RGYgPSA5OTg6IEVsIG7Dum1lcm8gZGUgZ3JhZG9zIGRlIGxpYmVydGFkIHJlc2lkdWFsZXMgZXMgOTk4LCBsbyBxdWUgcmVwcmVzZW50YSBsYSBjYW50aWRhZCBkZSBpbmZvcm1hY2nDs24gbm8gZXhwbGljYWRhIHBvciBlbCBtb2RlbG8uDQpTdW0gU3EgPSAxMjMuMTEyOiBMYSB2YXJpYWJpbGlkYWQgbm8gZXhwbGljYWRhIHBvciBlbCBtb2RlbG8gZXMgMTIzLjExMi4NCg0KTGEgKkFOT1ZBKiBjb25maXJtYSBxdWUsIGF1bnF1ZSBQcm9maXRzX00gZXMgc2lnbmlmaWNhdGl2YSBhbCBuaXZlbCBkZWwgOTkuOSUgKHAgPCAwLjAwMSksIGxhIHZhcmlhYmlsaWRhZCBleHBsaWNhZGEgcG9yIGVsIG1vZGVsbyBlcyBiYWphLiBFc3RvIHJlZnVlcnphIGxhIGlkZWEgZGUgcXVlIGxhcyBnYW5hbmNpYXMgcG9yIHPDrSBzb2xhcyB0aWVuZW4gdW5hIHJlbGFjacOzbiBkw6liaWwgY29uIGxhIHJlbnRhYmlsaWRhZCwgeSBxdWUgbGEgY2FwYWNpZGFkIGV4cGxpY2F0aXZhIGRlbCBtb2RlbG8gZXMgbGltaXRhZGEuDQoNClJlbGFjacOzbiBkw6liaWw6IEV4aXN0ZSB1bmEgcmVsYWNpw7NuIHBvc2l0aXZhIGVudHJlIGxhcyBnYW5hbmNpYXMgeSBsYSBwcm9iYWJpbGlkYWQgZGUgcmVudGFiaWxpZGFkLCBwZXJvIGVsIGltcGFjdG8gZXMgbXV5IHBlcXVlw7FvLg0KQmFqYSBjYXBhY2lkYWQgZXhwbGljYXRpdmE6IFNvbG8gZWwgMi45MSUgZGUgbGEgdmFyaWFiaWxpZGFkIGVuIGxhIHJlbnRhYmlsaWRhZCBkZSBsYXMgZW1wcmVzYXMgc2UgZXhwbGljYSBwb3IgbGFzIGdhbmFuY2lhcy4NCk1vZGVsbyBzaWduaWZpY2F0aXZvOiBBdW5xdWUgZWwgcG9kZXIgZXhwbGljYXRpdm8gZXMgbGltaXRhZG8sIGVsIG1vZGVsbyBlcyBlc3RhZMOtc3RpY2FtZW50ZSBzaWduaWZpY2F0aXZvLCBsbyBxdWUgc3VnaWVyZSBxdWUgbGFzIGdhbmFuY2lhcyB0aWVuZW4gdW4gaW1wYWN0byBlbiBsYSByZW50YWJpbGlkYWQsIHBlcm8gbm8gc29uIGVsIMO6bmljbyBmYWN0b3IgcmVsZXZhbnRlLg0KDQoqRXN0ZSBtb2RlbG8sIGF1bnF1ZSBzaWduaWZpY2F0aXZvLCB0aWVuZSB1bmEgY2FwYWNpZGFkIHByZWRpY3RpdmEgbXV5IGJhamEuIFNlIHJlY29taWVuZGEgY29uc2lkZXJhciBvdHJhcyB2YXJpYWJsZXMgYWRpY2lvbmFsZXMgcGFyYSBtZWpvcmFyIGxhIGNhcGFjaWRhZCBleHBsaWNhdGl2YSBkZWwgbW9kZWxvLioNCg0KIyMjIyMjIENvZWZpY2llbnRlcyBkZWwgTW9kZWxvIFJMUw0KYGBge3IgQ29lZmljaWVudGVzX2RlbF9Nb2RlbG9fUkxTLCBmaWcuYWxpZ249J2NlbnRlcid9DQptb2RlbG9fUkxfU2ltcGxlID0gbG0oY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kUHJvZml0YWJsZX5jZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRQcm9maXRzX00pDQpjb2VmKG1vZGVsb19STF9TaW1wbGUpDQpgYGANCg0KIyMjIyMjIFJlc3VtZW4gRXN0YWTDrXN0aWNvIGRlbCBNb2RlbG8gUkxTDQpgYGB7ciBSZXN1bWVuIEVzdGFkw61zdGljb19kZWxfTW9kZWxvX1JMUyxmaWcuYWxpZ249J2NlbnRlcid9DQpzdW1tYXJ5KG1vZGVsb19STF9TaW1wbGUpDQpgYGANCg0KIyMjIyMjIFRhYmxhIEFOT1ZBIHBhcmEgZWwgTW9kZWxvIFJMUw0KYGBge3IgVGFibGFfQU5PVkFfcGFyYV9lbF9Nb2RlbG9fUkxTLGZpZy5hbGlnbj0nY2VudGVyJ30NCmFub3ZhKG1vZGVsb19STF9TaW1wbGUpDQoNCmBgYA0KDQojIyMjIyA1LjEuMi4zLiBBbsOhbGlzaXMgZGVsIG1vZGVsbyBSTFMuIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCkxhIG5hdmVnYWNpw7NuIGEgdHJhdsOpcyBkZSBsYXMgcGVzdGHDsWFzIHBlcm1pdGUgb2JzZXJ2YXIgZWwgKippbnRlcnZhbG8gZGUgY29uZmlhbnphIHBhcmEgJEIxJCoqIHkgKipsYXMgcHJlZGljY2lvbmVzIGRlbCBtb2RlbG8gZGUgcmVncmVzacOzbiBsaW5lYWwgc2ltcGxlKiosIGFtYm9zIGNhbGN1bGFkb3MgYWwgOTUgJS4gTGFzIHZhcmlhYmxlcyBkZSBpbnRlcsOpcyBhbmFsaXphZGFzIGVuIGVzdGUgY2FzbyAodmFyaWFibGUgZGVwZW5kaWVudGUpICAodmFyaWFibGUgaW5kZXBlbmRpZW50ZSkuDQoNCipJbnRlcnZhbG8gZGUgQ29uZmlhbnphIHBhcmEgQjEqIEVzdGUgaW50ZXJ2YWxvIG5vcyBpbmRpY2EgcXVlLCBjb24gdW4gbml2ZWwgZGUgY29uZmlhbnphIGRlbCA5NSUsIGVsIHZhbG9yIHJlYWwgZGVsIGNvZWZpY2llbnRlIHBhcmEgbGEgdmFyaWFibGUgDQpQcm9maXRzX00NClByb2ZpdHNfTSBzZSBlbmN1ZW50cmEgZW50cmUgNS44NmUtMDYgeSAxLjI0ZS0wNS5Fc3RvIGltcGxpY2EgcXVlLCBlbiBwcm9tZWRpbywgcG9yIGNhZGEgYXVtZW50byBlbiBQcm9maXRzX00uDQoNClByb2ZpdHNfTSAoZXMgZGVjaXIsIHVuIGluY3JlbWVudG8gZW4gbGFzIGdhbmFjaWFzIGRlIGxhcyBlbXByZXNhcyksIGVsIHZhbG9yIGRlIGxhIHZhcmlhYmxlIGRlcGVuZGllbnRlIGNhbWJpYXLDoSBlbiB1biB2YWxvciBxdWUgZXN0w6EgZGVudHJvIGRlIGVzdGUgcmFuZ28uIEVsIGhlY2hvIGRlIHF1ZSBlbCBpbnRlcnZhbG8gbm8gaW5jbHV5YSBjZXJvIHN1Z2llcmUgcXVlIGxhIHZhcmlhYmxlDQoNClByb2ZpdHNfTSB0aWVuZSB1bmEgcmVsYWNpw7NuIHNpZ25pZmljYXRpdmEgY29uIGxhIHZhcmlhYmxlIGRlcGVuZGllbnRlIGVuIGVsIG1vZGVsby4NCg0KRWwgZWZlY3RvIGRlIFByb2ZpdHNfTSBzb2JyZSBsYSB2YXJpYWJsZSBkZXBlbmRpZW50ZSBlcyBwb3NpdGl2bywgeSBlbCBtb2RlbG8gc3VnaWVyZSBxdWUgZXN0ZSBlZmVjdG8gZXMgZXN0YWTDrXN0aWNhbWVudGUgc2lnbmlmaWNhdGl2by4NCg0KKlByZWRpY2Npb25lcyB5IHN1cyBJbnRlcnZhbG9zIGRlIFByZWRpY2Npw7NuICpFbCBtb2RlbG8gcHJlZGljZSBxdWUsIHBhcmEgbG9zIHZhbG9yZXMgZGUgZW50cmFkYSBkZWwgMSBhbCAxMDAwLCBsb3MgcmVzdWx0YWRvcyBzZWd1aXLDoW4gdW5hIHRlbmRlbmNpYSBxdWUgZXN0w6EgZGVudHJvIGRlIGxvcyBpbnRlcnZhbG9zIGRlIHByZWRpY2Npw7NuIG1lbmNpb25hZG9zLCBjb24gdW4gbml2ZWwgZGUgY2VydGV6YSBkZWwgOTUlLiBMb3MgaW50ZXJ2YWxvcyBwcm9wb3JjaW9uYW4gdW4gcmFuZ28gZGUgdmFsb3JlcyBwb3NpYmxlcyBwYXJhIGNhZGEgcHJlZGljY2nDs24sIGxvIHF1ZSBheXVkYSBhIGVudGVuZGVyIGxhIGluY2VydGlkdW1icmUgZGVsIG1vZGVsby4NCg0KU2kgbGEgcHJlZGljY2nDs24gZGUgdW4gcHVudG8gdGllbmUgdW4gaW50ZXJ2YWxvIGRlIHByZWRpY2Npw7NuIG11eSBhbXBsaW8sIGVzdG8gcG9kcsOtYSBpbmRpY2FyIHF1ZSBlbCBtb2RlbG8gdGllbmUgYWx0YSBpbmNlcnRpZHVtYnJlIGVuIGVzYSBwcmVkaWNjacOzbi4gUG9yIGVsIGNvbnRyYXJpbywgc2kgZWwgaW50ZXJ2YWxvIGVzIGVzdHJlY2hvLCBlbCBtb2RlbG8gdGllbmUgdW5hIG1heW9yIGNlcnRlemEgc29icmUgZWwgdmFsb3IgcHJlZGljaG8NCg0KKlByZWRpY2Npb25lcyB5IHN1cyBpbnRlcnZhbG9zIGRlIGNvbmZpYW56YSoNCmZpdDogU29uIGxvcyB2YWxvcmVzIHByZWRpY2hvcyBwb3IgZWwgbW9kZWxvIHBhcmEgbGFzIG9ic2VydmFjaW9uZXMgZGUgZW50cmFkYSAoZW4gZXN0ZSBjYXNvLCBsYXMgc2VjdWVuY2lhcyBkZSBuw7ptZXJvcyBkZSAxIGEgMTAwMCkuDQpsd3I6IEVzIGVsIGzDrW1pdGUgaW5mZXJpb3IgZGVsIGludGVydmFsbyBkZSBjb25maWFuemEgcGFyYSBjYWRhIHByZWRpY2Npw7NuLg0KdXByOiBFcyBlbCBsw61taXRlIHN1cGVyaW9yIGRlbCBpbnRlcnZhbG8gZGUgY29uZmlhbnphIHBhcmEgY2FkYSBwcmVkaWNjacOzbi4NCg0KRWwgaW50ZXJ2YWxvIGRlIGNvbmZpYW56YSBvZnJlY2UgdW5hIG1lZGlkYSBkZSBxdWUgdGFuIHByZWNpc28gZXMgZWwgbW9kZWxvIGFsIHByZWRlY2lyIHZhbG9yZXMgZnV0dXJvcy4gU2kgbG9zIGludGVydmFsb3Mgc29uIG3DoXMgYW1wbGlvcywgc3VnaWVyZSBxdWUgbGEgcHJlZGljY2nDs24gZXMgbWVub3MgcHJlY2lzYS4gU2kgc29uIG3DoXMgZXN0cmVjaG9zLCBpbmRpY2EgbWF5b3IgcHJlY2lzacOzbi4NCg0KRXN0ZSB0aXBvIGRlIGFuw6FsaXNpcyBlcyDDunRpbCBjdWFuZG8gc2UgdHJhYmFqYSBjb24gcHJlZGljY2lvbmVzIGVuIHNpdHVhY2lvbmVzIGRvbmRlIHNlIG5lY2VzaXRhIHNhYmVyIG5vIHNvbG8gZWwgdmFsb3IgZXNwZXJhZG8sIHNpbm8gdGFtYmnDqW4gY3XDoW50YSB2YXJpYWJpbGlkYWQgbyBlcnJvciBwb2Ryw61hIGVzdGFyIHByZXNlbnRlLg0KDQoNCg0KIyMjIyMjIEludGVydmFsbyBkZSBDb25maWFuemEgcGFyYSBCMSANCmBgYHtyIEludGVydmFsb19kZV9Db25maWFuemFfcGFyYV9CMSxmaWcuYWxpZ249J2NlbnRlcid9DQpjb25maW50KG1vZGVsb19STF9TaW1wbGUsIGxldmVsID0gMC45NSkNCmBgYA0KDQojIyMjIyMgUHJlZGljY2lvbmVzIHkgc3VzIEludGVydmFsb3MgZGUgUHJlZGljY2nDs24NCmBgYHtyIFByZWRpY2Npb25lc195X3N1c19JbnRlcnZhbG9zX2RlX1ByZWRpY2Npw7NuLCBmaWcuYWxpZ249J2NlbnRlcid9DQpwcmVkaWN0KG1vZGVsb19STF9TaW1wbGUsIGRhdGEuZnJhbWUoc2VxKDEsMTAwMCkpLCBpbnRlcnZhbD0ncHJlZGljdGlvbicsIGxldmVsID0gMC45NSkNCg0KYGBgDQoNCiMjIyMjIyBQcmVkaWNjaW9uZXMgeSBzdXMgSW50ZXJ2YWxvcyBkZSBDb25maWFuemENCmBgYHtyIFByZWRpY2Npb25lc195X3N1c19JbnRlcnZhbG9zX2RlX0NvbmZpYW56YSwgZmlnLmFsaWduPSdjZW50ZXInfQ0KcHJlZGljdChtb2RlbG9fUkxfU2ltcGxlLCBkYXRhLmZyYW1lKHNlcSgxLDEwMDApKSwgaW50ZXJ2YWw9J2NvbmZpZGVuY2UnLCBsZXZlbCA9IDAuOTUpDQoNCmBgYA0KDQoNCiMjIyA1LjIuIFJlZ3Jlc2nDs24gTGluZWFsIE3Dumx0aXBsZQ0KDQpFbiBlc3RlIGVzdHVkaW8sIGVsICoqTW9kZWxvIGRlIFJlZ3Jlc2nDs24gTGluZWFsIE3Dumx0aXBsZSoqIChSTE0pIHB1ZWRlIGNvbnNpZGVyYXJzZSBjb21vIHVuYSBleHRlbnNpw7NuIGRlbCBtb2RlbG8gZGUgcmVncmVzacOzbiBsaW5lYWwgc2ltcGxlLCBjb24gZWwgb2JqZXRpdm8gZGUgZmFjaWxpdGFyIHN1IGNvbXByZW5zacOzbiB5IGFuw6FsaXNpcy4gU3UgZWN1YWNpw7NuIGdlbmVyYWwsIHF1ZSByZWZsZWphIGxhIHJlbGFjacOzbiBlbnRyZSBsYXMgdmFyaWFibGVzIGRlcGVuZGllbnRlcyBlIGluZGVwZW5kaWVudGVzLCBlcyBsYSBzaWd1aWVudGU6JCR5X2kgPSBcYmV0YV8wICsgXGJldGFfMSB4X3tpMX0gKyBcZG90cyArIFxiZXRhX2sgeF97aWt9ICsgXGVwc2lsb25faSxccXVhZCBpID0gMSwgMiwgXGRvdHMsIG4kJA0KZG9uZGU6JFxlcHNpbG9uJCBlcyBlbCB0w6lybWlubyBkZSBlcnJvciwgY29uIHVuYSBtZWRpYSAkRShcZXBzaWxvbikgPSAwJCB5IHVuYSB2YXJpYW56YSAkVihcZXBzaWxvbikgPSBcc2lnbWFeMiQuIFNlIGFzdW1lIHF1ZSAkXGVwc2lsb24kIHNpZ3VlIHVuYSBkaXN0cmlidWNpw7NuIG5vcm1hbCwgbG8gY3VhbCBlcyBjbGF2ZSBwYXJhIHJlYWxpemFyIHBydWViYXMgZGUgaGlww7N0ZXNpcyB5IGNhbGN1bGFyIGludGVydmFsb3MgZGUgY29uZmlhbnphIHkgcHJlZGljY2nDs24uDQoNCkVsIG3DqXRvZG8gdXRpbGl6YWRvIHBhcmEgZXN0aW1hciBsb3MgcGFyw6FtZXRyb3MgZGVsIG1vZGVsbyBlcyBlbCBkZSAqKm3DrW5pbW9zIGN1YWRyYWRvcyBvcmRpbmFyaW9zIChNQ08pKiouIEVzdGUgZW5mb3F1ZSBzZSBiYXNhIGVuIG1pbmltaXphciB1bmEgZnVuY2nDs24gZGUgZXJyb3IgcXVlIHNlIGNvbnN0cnV5ZSBhIHBhcnRpciBkZSBsYXMgZGVzdmlhY2lvbmVzIGN1YWRyw6F0aWNhcyBlbnRyZSBsb3MgdmFsb3JlcyBvYnNlcnZhZG9zIHkgbG9zIHZhbG9yZXMgcHJlZGljaG9zIHBvciBlbCBtb2RlbG8uIExhIGZ1bmNpw7NuIGRlIGVycm9yIHNlIGV4cHJlc2EgZGUgbGEgc2lndWllbnRlIGZvcm1hOiQkZihcYmV0YV8wLCBcYmV0YV8xLCBcZG90cywgXGJldGFfaykgPSBcc3VtX2ogXGxlZnRbIHlfaSAtIFxsZWZ0KCBcYmV0YV8wICsgXGJldGFfMSB4X3sxan0gKyBcYmV0YV8yIHhfezJqfSArIFxkb3RzICsgXGJldGFfayB4X3tran0gXHJpZ2h0KSBccmlnaHRdXjIkJA0KDQojIyMjIDUuMi4xLiBQbGFudGVhbWllbnRvIGRlbCBQcm9ibGVtYQ0KQ29uIGJhc2UgZW4gZWwgY29uanVudG8gZGUgZGF0b3MgZGVzY3JpdG8gZW4gbGEgc2VjY2nDs24gKioyKiogc2UgZm9ybXVsYXLDoSB1biBtb2RlbG8gZGUgcmVncmVzacOzbiBsaW5lYWwgbcO6bHRpcGxlIHBhcmEgZXN0dWRpYXIgbGEgcmVsYWNpw7NuIGxpbmVhbCBtw7psdGlwbGUgc3VwdWVzdGEgZW50cmUgbGFzIHZhcmFpYmxlcyBkZWZpbmlkYXMuDQoNCiMjIyMgNS4yLjIuIERlc2Fycm9sbG8gZGVsIEFuw6FsaXNpcw0KRWwgZXN0dWRpbyBkZSByZWdyZXNpw7NuIGxpbmVhbCBtw7psdGlwbGUgaGEgc2lkbyBwcm9jZXNhZG8gY29uIGByIFIudmVyc2lvbi5zdHJpbmdgIG1lZGlhZG8gcG9yIFJTdHVkaW8gIGVuIHVuYSBwbGF0YWZvcm1hIHg4Nl82NC13NjQtbWluZ3czMi4NCg0KIyMjIyMgNS4yLjIuMS4gUmVzdW1lbiBlc3RhZMOtc3RpY28gZGUgbGFzIHZhcmlhYmxlcyBkZSBlc3R1ZGlvLiB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KTGEgbmF2ZWdhY2nDs24gYSB0cmF2w6lzIGRlIGxhcyBwZXN0YcOxYXMgbXVlc3RyYSBlbCByZXN1bWVuIGVzdGFkw61zdGljbyBkZSB0b2RhcyBsYXMgdmFyaWFibGVzIGRlbCBjb25qdW50byBkZSBkYXRvcywgZXhjZXB0byAqKlNlcmlhbCoqLCBwb3JxdWUgc2ltcGxlbWVudGUgZXMgdW4gw61uZGljZSBwb3NpY2lvbmFsLiBTaW4gZW1iYXJnbywgcGFyYSBsYXMgdmFyYWlibGVzIGRlIG5hdHVyYWxlemEgY3VhbnRpdGF0aXZhOjpyYXrDs24gZWwgcmVzdW1lbiBzZXLDoSBlbCB0cmFkaWNpb25hbCwgcGVybyBwYXJhIGxhcyB2YXJpYWJsZXMgZGUgbmF0dXJhbGV6YSBjdWFsaXRhdGl2YTo6bm9taW5hbCBlbCByZXN1bWVuIGVzdGFkw61zdGljbyBjb25zaXN0aXLDoSBlbiBjb250ZW9zLCBwcm9wb3JjaW9uZXMgeSBkaWFncmFtYXMgZGUgYmFycmFzLiAgU2UgbWVuY2lvbmEgZGUgbnVldm8gcXVlICoqQ2hhbmNlIG9mIEFkbWl0KiogZXMgbGEgdmFyaWFibGUgZGVwZW5kaWVudGUNCg0KKlJlc3VtZW4gVmFyaWFibGVzIEN1YW50aXRhdGl2YXMqKiBFbCByZXN1bWVuIGRlIGVzdGFzIHZhcmlhYmxlcyBjdWFudGl0YXRpdmFzIHRlIHByb3BvcmNpb25hIHVuYSB2aXNpw7NuIGdlbmVyYWwgZGUgbGEgZGlzdHJpYnVjacOzbiBkZSBsYXMgY2FyYWN0ZXLDrXN0aWNhcyBkZSBsYXMgZW1wcmVzYXMgZW4gdMOpcm1pbm9zIGRlIHN1IHRhbWHDsW8gKGVtcGxlYWRvcyksIHN1IHJlbmRpbWllbnRvIChpbmdyZXNvcywgYmVuZWZpY2lvcyksIHN1IHRhbWHDsW8gZmluYW5jaWVybyAoYWN0aXZvcykgeSBzdSB2YWxvcmFjacOzbiBlbiBlbCBtZXJjYWRvIChjYXBpdGFsaXphY2nDs24pLiBTaSBhbGd1bmEgZGUgZXN0YXMgdmFyaWFibGVzIHRpZW5lIHVuYSBncmFuIGRpZmVyZW5jaWEgZW50cmUgZWwgdmFsb3IgZGUgbGEgbWVkaWFuYSB5IGxhIG1lZGlhLCBpbmRpY2Fyw61hIHVuYSBkaXN0cmlidWNpw7NuIHNlc2dhZGEgKHBvciBlamVtcGxvLCBtdWNoYXMgZW1wcmVzYXMgcGVxdWXDsWFzIGVuIGNvbXBhcmFjacOzbiBjb24gdW5hcyBwb2NhcyBtdXkgZ3JhbmRlcykuDQoNCipSZXN1bWVuIFZhcmlhYmxlcyBDdWFsaXRhdGl2YXMqIEVuIGVzdGEgcGVzdGHDsWEgcG9kZW1vcyB2ZXIgY29tbyBlbiBsYSBwcmltZXJhIGdyYWZpY2FzIHF1ZSByZXByZXNlbnRhIGxhIHZhcmlhYmxlICpGZW1hbGVDRU8qIGVuIGRvbmRlIGVuIGxhIG1heW9yaWFzIGRlIGxhcyBjb21wYcOxaWFzIHByZWRvbWluYSBsYSBwcmVzZW5jaWEgZGUgbWFzIGhvbWJyZXMgQ0VPcyBxdWUgbXVqZXJlcywgZW4gbGEgc2VndW5kYSBncmFmaWNhIHNlIG11ZXN0cmEgbGEgdmFyaWFibGUgKkhlYWRxdWFydGVyc19TdGF0ZSogZW4gZG9uZGUgcmVwcmVzZW50YSBlbiBjb21vIGhheSBlc3RhZG9zIG1hcyBpbmZsdXllbnRlcyBxdWUgb3Ryb3MgZGVudHJvIGRlbCByYW5raW5nLCBlbiBsYSBjdWFydGEgZ3JhZmljYSBtdWVzdHJhIGxhIHZhcmlhYmxlICpDb21wYW55X1R5cGUqIGRvbmRlIHN1IGNvbXBvcnRhbWllbnRvIGVzIGNsYXJvIGRvbmRlIHByZWRvbWluYW4gbGFzIGNvbXBhw7FpYXMgcHVibGljYXMgKHF1ZSBjb3RpemFuIGVuIGJvbHNhKSBzb2JyZSBsYXMgY29tcGHDsWlhcyBwcml2YWRhcyAobm8gY290aXphbiBlbiBib2xzYSkNCg0KKkRpYWdyYW1hIGRlIGRpc3BlcnNpw7JuIGRlIGxhcyB2YXJpYWJsZXMgY3VhbnRpdGF0aXZhcyogDQpFbCBkaWFncmFtYSBub3MgcGVybWl0ZSB2aXN1YWxpemFyIHNpIGV4aXN0ZSB1bmEgcmVsYWNpw7NuIGRpcmVjdGEgbyBpbnZlcnNhIGVudHJlIGxhcyB2YXJpYWJsZXMgYW5hbGl6YWRhcyAobsO6bWVybyBkZSBlbXBsZWFkb3MsIGluZ3Jlc29zLCBiZW5lZmljaW9zLCBhY3Rpdm9zIHkgY2FwaXRhbGl6YWNpw7NuIGRlIG1lcmNhZG8pLiBQb3IgZWplbXBsbywgcG9kcsOtYW1vcyBvYnNlcnZhciBzaSBsYXMgZW1wcmVzYXMgY29uIG1heW9yIG7Dum1lcm8gZGUgZW1wbGVhZG9zIHRhbWJpw6luIHRpZW5kZW4gYSB0ZW5lciBtYXlvcmVzIGluZ3Jlc29zLg0KQWwgYW5hbGl6YXIgZWwgY29uanVudG8gZGUgcHVudG9zIGVuIGNhZGEgcGFuZWwsIHBvZGVtb3MgaWRlbnRpZmljYXIgcGF0cm9uZXMsIGFncnVwYW1pZW50b3MgbyB2YWxvcmVzIGF0w61waWNvcyBxdWUgcG9kcsOtYW4gaW5kaWNhciB0ZW5kZW5jaWFzIG8gY2FyYWN0ZXLDrXN0aWNhcyBwYXJ0aWN1bGFyZXMgZGUgbGFzIGVtcHJlc2FzIGVuIGVsIHJhbmtpbmcuDQpQb2RlbW9zIGNvbXBhcmFyIGVsIGRlc2VtcGXDsW8gZGUgZGlmZXJlbnRlcyBlbXByZXNhcyBlbiBmdW5jacOzbiBkZSBsYXMgdmFyaWFibGVzIGFuYWxpemFkYXMuIFBvciBlamVtcGxvLCBwb2Ryw61hbW9zIGlkZW50aWZpY2FyIGVtcHJlc2FzIHF1ZSB0aWVuZW4gdW5hIGFsdGEgY2FwaXRhbGl6YWNpw7NuIGRlIG1lcmNhZG8gcGVybyBiYWphcyBnYW5hbmNpYXMuDQoNCg0KIyMjIyMjIFJlc3VtZW4gVmFyaWFibGVzIEN1YW50aXRhdGl2YXMNCmBgYHtyIFJlc3VtZW5fVmFyaWFibGVzX0N1YW50aXRhdGl2YXMsZmlnLmFsaWduPSdjZW50ZXInfQ0Kc3VtbWFyeShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byROdW1iZXJfb2ZfZW1wbG95ZWVzKQ0Kc3VtbWFyeShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRSZXZlbnVlc19NKQ0Kc3VtbWFyeShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRQcm9maXRzX00pDQpzdW1tYXJ5KGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJEFzc2V0c19NKQ0Kc3VtbWFyeShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRNYXJrZXRDYXBfVXBkYXRlZF9NKQ0KYGBgDQoNCiMjIyMjIyBSZXN1bWVuIFZhcmlhYmxlcyBDdWFsaXRhdGl2YXMNCmBgYHtyIFJlc3VtZW5fVmFyaWFibGVzX0N1YWxpdGF0aXZhcyxmaWcuYWxpZ249J2NlbnRlcid9DQoNCnRhYmxlKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJEZlbWFsZUNFTykNCnByb3AudGFibGUodGFibGUoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kRmVtYWxlQ0VPKSkNCmJhcnBsb3QodGFibGUoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kRmVtYWxlQ0VPKSkNCg0KDQp0YWJsZShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRIZWFkcXVhcnRlcnNfU3RhdGUpDQpwcm9wLnRhYmxlKHRhYmxlKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJEhlYWRxdWFydGVyc19TdGF0ZSkpDQpiYXJwbG90KHRhYmxlKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJEhlYWRxdWFydGVyc19TdGF0ZSkpDQoNCnRhYmxlKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJENvbXBhbnlfVHlwZSkNCnByb3AudGFibGUodGFibGUoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kQ29tcGFueV9UeXBlKSkNCmJhcnBsb3QodGFibGUoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kQ29tcGFueV9UeXBlKSkNCg0KYGBgDQoNCiMjIyMjIyBEaWFncmFtYXMgZGUgRGlzcGVyc2nDs24gVmFyaWFibGVzIEN1YW50aXRhdGl2YXMNCmBgYHtyIERpYWdyYW1hc19kZV9EaXNwZXJzacOzbl9WYXJpYWJsZXNfQ3VhbnRpdGF0aXZhcyxmaWcuYWxpZ249J2NlbnRlcid9DQpwYWlycyh+TnVtYmVyX29mX2VtcGxveWVlcyArIFJldmVudWVzX00gKyBQcm9maXRzX00gKyBBc3NldHNfTSArIE1hcmtldENhcF9VcGRhdGVkX00sIGRhdGEgPSBjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0bykNCg0KYGBgDQojIyMjIyAgRm9ybXVsYWNpw7NuIGRlbCBtb2RlbG8gZGUgUkxNIGVudHJlIGxhcyB2YXJpYWJsZXMgZGUgZXN0dWRpby4gey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KRXN0ZSBjb25qdW50byBkZSByZXN1bHRhZG9zIGNvcnJlc3BvbmRlIGEgbG9zIGNvZWZpY2llbnRlcyBvYnRlbmlkb3MgZGUgdW4gbW9kZWxvIGRlIHJlZ3Jlc2nDs24gbGluZWFsIG3Dumx0aXBsZSwgZG9uZGUgbGEgdmFyaWFibGUgZGVwZW5kaWVudGUgZXMgUHJvZml0YWJsZSwgeSBsYXMgdmFyaWFibGVzIGluZGVwZW5kaWVudGVzIHNvbiBkaWZlcmVudGVzIGNhcmFjdGVyw61zdGljYXMgZGUgbGFzIGVtcHJlc2FzLCBjb21vIGVsIG7Dum1lcm8gZGUgZW1wbGVhZG9zLCBpbmdyZXNvcywgZ2FuYW5jaWFzLCBhY3Rpdm9zLCBzaSBsYSBlbXByZXNhIHRpZW5lIHVuYSBDRU8gZmVtZW5pbmEsIGVsIGVzdGFkbyBkZSBsYSBzZWRlIGRlIGxhIGVtcHJlc2EgeSBlbCB0aXBvIGRlIGVtcHJlc2EuDQoNCipSZXN1bWVuIHkgQU5PVkEgZGVsIE1vZGVsbyBSTE0gVG90YWwqQXVucXVlIGVsIG1vZGVsbyBlcyBzaWduaWZpY2F0aXZvIChwLXZhbG9yIGRlbCBGLXRlc3QpLCBlbCBSwrIgYmFqbyBzdWdpZXJlIHF1ZSBsYSBtYXlvciBwYXJ0ZSBkZSBsYSB2YXJpYWJpbGlkYWQgZGUgUHJvZml0YWJsZSBubyBlc3TDoSBleHBsaWNhZGEgcG9yIGxhcyB2YXJpYWJsZXMgaW5kZXBlbmRpZW50ZXMuIA0KUGVybyBlc3RvIHNpZW5kbyBjYXVzYWRvIHBvciBsYSBkaXN0cmlidWNpw7JuIHNlc2dhZGEgZ3JhY2lhcyBhIGxvcyB2YWxvcmVzIGF0aXBpY29zIGRlbnRybyBkZSBsYXMgdmFyaWFibGVzDQoNClVuYSBkaXN0cmlidWNpw7NuIHNlc2dhZGEgaW1wbGljYSBxdWUgbG9zIHJlc2lkdW9zIG5vIGVzdMOhbiBkaXN0cmlidWlkb3MgZGUgbWFuZXJhIHNpbcOpdHJpY2EgYWxyZWRlZG9yIGRlIGNlcm8sIGxvIHF1ZSB2aW9sYSB1bm8gZGUgbG9zIHN1cHVlc3RvcyBmdW5kYW1lbnRhbGVzIGRlIGxhIHJlZ3Jlc2nDs24gbGluZWFsOiBsYSBub3JtYWxpZGFkIGRlIGxvcyByZXNpZHVvcy4NCg0KTG9zIHJlc2lkdW9zIGRlYmVuIHNlciBhcHJveGltYWRhbWVudGUgbm9ybWFsZXMuDQpMb3MgdmFsb3JlcyBkZWJlbiBlc3RhciBjZW50cmFkb3MgZW4gMCB5IHRlbmVyIHZhcmlhbnphIGNvbnN0YW50ZSAoaG9tb2NlZGFzdGljaWRhZCkuDQpTaSBsb3MgcmVzaWR1b3Mgc29uIHNpc3RlbcOhdGljYW1lbnRlIG1heW9yZXMgbyBtZW5vcmVzIGVuIGNpZXJ0b3MgcmFuZ29zIGRlIGxhcyB2YXJpYWJsZXMgcHJlZGljdG9yYXMgbyBzaSBlc3TDoW4gc2VzZ2Fkb3MsIGVzdG8gaW5kaWNhLCBFbCBtb2RlbG8gbm8gZXN0w6EgY2FwdHVyYW5kbyBhZGVjdWFkYW1lbnRlIGxhIHJlbGFjacOzbiBlbnRyZSBsYXMgdmFyaWFibGVzIGluZGVwZW5kaWVudGVzIHkgbGEgZGVwZW5kaWVudGUuDQpQb2Ryw61hbiBleGlzdGlyIHBhdHJvbmVzIG5vIGxpbmVhbGVzIG8gcmVsYWNpb25lcyBubyBjb25zaWRlcmFkYXMuDQoNCipDb2VmaWNpZW50ZXMgZGVsIE1vZGVsbyBSTE0gVG90YWwqIA0KDQoNCipSZWxhY2nDs24gcG9zaXRpdmEgY29uIHJlbnRhYmlsaWRhZCo6VW4gbWF5b3IgbsO6bWVybyBkZSBlbXBsZWFkb3MgeSBtYXlvcmVzIGdhbmFuY2lhcyBwYXJlY2VuIGVzdGFyIGFzb2NpYWRvcyBjb24gdW5hIG1heW9yIHByb2JhYmlsaWRhZCBkZSByZW50YWJpbGlkYWQuDQpMYXMgZW1wcmVzYXMgZGUgdGlwbyAxIHRhbWJpw6luIG11ZXN0cmFuIHVuYSBtYXlvciBwcm9iYWJpbGlkYWQgZGUgcmVudGFiaWxpZGFkLg0KDQoqUmVsYWNpw7NuIG5lZ2F0aXZhIGNvbiByZW50YWJpbGlkYWQqOkVsIGltcGFjdG8gZGUgbG9zIGluZ3Jlc29zIHkgYWN0aXZvcyBlcyBuZWdhdGl2bywgYXVucXVlIGxvcyBjb2VmaWNpZW50ZXMgc29uIGV4dHJlbWFkYW1lbnRlIHBlcXVlw7FvcywgbG8gcXVlIHN1Z2llcmUgcXVlIG5vIHRpZW5lbiB1biBpbXBhY3RvIHNpZ25pZmljYXRpdm8gZW4gbGEgcmVudGFiaWxpZGFkLg0KVGVuZXIgdW5hIENFTyBmZW1lbmluYSBwYXJlY2UgZXN0YXIgbGlnZXJhbWVudGUgYXNvY2lhZG8gY29uIHVuYSBtZW5vciBwcm9iYWJpbGlkYWQgZGUgcmVudGFiaWxpZGFkLCBhdW5xdWUgZXN0ZSBlZmVjdG8gZXMgcGVxdWXDsW8uDQpWYXJpYXMgdWJpY2FjaW9uZXMgZ2VvZ3LDoWZpY2FzIChlc3RhZG9zKSBlc3TDoW4gYXNvY2lhZGFzIGNvbiB1bmEgbWVub3IgcHJvYmFiaWxpZGFkIGRlIHJlbnRhYmlsaWRhZCwgZXNwZWNpYWxtZW50ZSBlc3RhZG9zIGNvbW8gTW9udGFuYS4NCg0KKkNvZWZpY2llbnRlcyBkZWwgTW9kZWxvIFJMTSBSZWR1Y2lkbyoNCg0KKlJlbGFjacOzbiBwb3NpdGl2YSBjb24gcmVudGFiaWxpZGFkKjpOw7ptZXJvIGRlIGVtcGxlYWRvczogQXVucXVlIGVsIGNvZWZpY2llbnRlIGVzIHBlcXVlw7FvLCBleGlzdGUgdW5hIHJlbGFjacOzbiBwb3NpdGl2YSwgbG8gcXVlIHN1Z2llcmUgcXVlIHVuIG1heW9yIG7Dum1lcm8gZGUgZW1wbGVhZG9zIGVzdMOhIGxpZ2VyYW1lbnRlIGFzb2NpYWRvIGNvbiB1bmEgbWF5b3IgcmVudGFiaWxpZGFkLg0KR2FuYW5jaWFzOiBVbiBhdW1lbnRvIGVuIGxhcyBnYW5hbmNpYXMgZXN0w6EgcG9zaXRpdmFtZW50ZSByZWxhY2lvbmFkbyBjb24gdW5hIG1heW9yIHJlbnRhYmlsaWRhZC4NCg0KKlJlbGFjacOzbiBuZWdhdGl2YSBjb24gcmVudGFiaWxpZGFkKjpJbmdyZXNvczogRXhpc3RlIHVuYSByZWxhY2nDs24gbmVnYXRpdmEsIGxvIHF1ZSBpbXBsaWNhIHF1ZSBhIHBlc2FyIGRlIHRlbmVyIG1heW9yZXMgaW5ncmVzb3MsIGxhIHJlbnRhYmlsaWRhZCBwdWVkZSBubyBhdW1lbnRhciB0YW50byAobyBpbmNsdXNvIGRpc21pbnVpciBsaWdlcmFtZW50ZSkuDQpBY3Rpdm9zOiBMYSByZWxhY2nDs24gbmVnYXRpdmEgZXMgZXh0cmVtYWRhbWVudGUgcGVxdWXDsWEsIGxvIHF1ZSBzdWdpZXJlIHF1ZSBsb3MgYWN0aXZvcyBkZSBsYSBlbXByZXNhIG5vIHRpZW5lbiB1biBpbXBhY3RvIGltcG9ydGFudGUgc29icmUgc3UgcmVudGFiaWxpZGFkLg0KUmVsYWNpw7NuIHNpZ25pZmljYXRpdmEgZGVsIHRpcG8gZGUgZW1wcmVzYToNCg0KTGFzIGVtcHJlc2FzIGRlIHRpcG8gMSBzb24gbcOhcyByZW50YWJsZXMgZW4gY29tcGFyYWNpw7NuIGNvbiBvdHJvcyB0aXBvcyBkZSBlbXByZXNhcywgc2Vnw7puIGVzdGUgbW9kZWxvLg0KIyMjIyMjIFJlc3VtZW4geSBBTk9WQSBkZWwgTW9kZWxvIFJMTSBUb3RhbA0KYGBge3IgUmVzdW1lbl95X0FOT1ZBX2RlbF9Nb2RlbG9fUkxNX1RvdGFsLGZpZy5hbGlnbj0nY2VudGVyJ30NCnN1bW1hcnkobG0oY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kUHJvZml0YWJsZX5jZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byROdW1iZXJfb2ZfZW1wbG95ZWVzK2NkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJFJldmVudWVzX00rY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kUHJvZml0c19NK2NkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJEFzc2V0c19NK2FzLmZhY3RvcihjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRGZW1hbGVDRU8pK2FzLmZhY3RvcihjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRIZWFkcXVhcnRlcnNfU3RhdGUpK2FzLmZhY3RvcihjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRDb21wYW55X1R5cGUpKSkNCmBgYA0KDQojIyMjIyMgQ29lZmljaWVudGVzIGRlbCBNb2RlbG8gUkxNIFRvdGFsDQpgYGB7ciBDb2VmaWNpZW50ZXNfZGVsX01vZGVsb19STE1fVG90YWwsZmlnLmFsaWduPSdjZW50ZXInfQ0KY29lZmZpY2llbnRzKGxtKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJFByb2ZpdGFibGV+Y2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kTnVtYmVyX29mX2VtcGxveWVlcytjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRSZXZlbnVlc19NK2NkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJFByb2ZpdHNfTStjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRBc3NldHNfTSthcy5mYWN0b3IoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kRmVtYWxlQ0VPKSthcy5mYWN0b3IoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kSGVhZHF1YXJ0ZXJzX1N0YXRlKSthcy5mYWN0b3IoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kQ29tcGFueV9UeXBlKSkpDQoNCmBgYA0KDQojIyMjIyMgQ29lZmljaWVudGVzIGRlbCBNb2RlbG8gUkxNIFJlZHVjaWRvDQpgYGB7ciBDb2VmaWNpZW50ZXMgZGVsIE1vZGVsbyBSTE0gUmVkdWNpZG8sZmlnLmFsaWduPSdjZW50ZXInfQ0KY29lZmZpY2llbnRzKGxtKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJFByb2ZpdGFibGV+Y2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kTnVtYmVyX29mX2VtcGxveWVlcytjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRSZXZlbnVlc19NK2NkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJFByb2ZpdHNfTStjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRBc3NldHNfTSthcy5mYWN0b3IoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kQ29tcGFueV9UeXBlKSkpDQoNCmBgYA0KDQoNCiMjIyMjIDUuMi4yLjMuIEFuw6FsaXNpcyBkZWwgbW9kZWxvIFJMTS4gey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KRW4gZWwgY3VhbCBzZSByZWFsaXphIHVuIGFuw6FsaXNpcyBpdGVyYXRpdm8gbWVkaWFudGUgZWwgY3JpdGVyaW8gQUlDIHBhcmEgc2VsZWNjaW9uYXIgbGFzIHZhcmlhYmxlcyBtw6FzIHJlbGV2YW50ZXMuIEVzdGUgZXMgdW4gcHJvY2VzbyB0w61waWNvIGRlIHN0ZXB3aXNlIHNlbGVjdGlvbiwgcXVlIGludGVudGEgcmVkdWNpciBlbCBuw7ptZXJvIGRlIHZhcmlhYmxlcyBkZWwgbW9kZWxvLCBtYW50ZW5pZW5kbyBhcXVlbGxhcyBxdWUgY29udHJpYnV5ZW4gc2lnbmlmaWNhdGl2YW1lbnRlIGEgbGEgZXhwbGljYWNpw7NuIGRlIGxhIHZhcmlhYmxlIGRlcGVuZGllbnRlLCBxdWUgZW4gZXN0ZSBjYXNvIGVzICpQcm9maXRhYmxlKiAoc2kgbGEgZW1wcmVzYSBlcyByZW50YWJsZSBvIG5vKS4NCg0KKk1lam9yIE1vZGVsbyBJdGVyYWRvIHNlZ8O6biBBSUMqDQpFbCBtb2RlbG8gZmluYWwgc2UgaGEgc2ltcGxpZmljYWRvIHNpZ25pZmljYXRpdmFtZW50ZSBlbGltaW5hbmRvIHZhcmlhYmxlcyBxdWUgbm8gY29udHJpYnV5ZW4gbXVjaG8gYSBwcmVkZWNpciBsYSByZW50YWJpbGlkYWQgZGUgbGFzIGVtcHJlc2FzLg0KZ2FuYW5jaWFzICooUHJvZml0c19NKSogeSB0aXBvIGRlIGVtcHJlc2EgKihDb21wYW55X1R5cGUpKiBzb24gbGFzIHZhcmlhYmxlcyBtw6FzIHJlbGV2YW50ZXMgcGFyYSBwcmVkZWNpciBsYSByZW50YWJpbGlkYWQgZGUgdW5hIGVtcHJlc2EuDQpFbCBBSUMgbcOhcyBiYWpvIGVuIGVsIG1vZGVsbyBmaW5hbCAoLTIwOTcuMTEpIGluZGljYSBxdWUgZXMgZWwgbW9kZWxvIG3DoXMgKmVmaWNpZW50ZSogZW4gdMOpcm1pbm9zIGRlIGFqdXN0ZSB5IHNpbXBsaWNpZGFkLCB5IGVzIGVsIHF1ZSBtZWpvciBwcmVkaWNlIGxhIHJlbnRhYmlsaWRhZCBzaW4gaW5jbHVpciB2YXJpYWJsZXMgaW5uZWNlc2FyaWFzLg0KDQoqQm9uZGFkZXMgZGUgQWp1c3RlLCBTaWduaWZpY2FuY2lhcyB5IENyaXRlcmlvcyBkZSBJbmZvcm1hY2nDs24gQ29tcGFyYWRvcyoNCkVzdGUgcmVzdWx0YWRvIGVzIHVuYSBjb21wYXJhY2nDs24gZW50cmUgdHJlcyBtb2RlbG9zIGRlIHJlZ3Jlc2nDs24gbGluZWFsIG3Dumx0aXBsZSAoUkxNKSBwYXJhIHByZWRlY2lyIGxhIHZhcmlhYmxlIGRlcGVuZGllbnRlICoiUHJvZml0YWJsZSIqIChzaSBsYSBlbXByZXNhIGVzIHJlbnRhYmxlIG8gbm8pLiBMb3MgdHJlcyBtb2RlbG9zIGNvbnNpZGVyYWRvcyBzb246DQoNCm1vZGVsb19STE1fVE9UQUw6IFVuIG1vZGVsbyBjb21wbGV0byBjb24gdG9kYXMgbGFzIHZhcmlhYmxlcyBpbmRlcGVuZGllbnRlcyBkaXNwb25pYmxlcy4NCm1vZGVsb19STE1fUkVEVUNJRE86IFVuIG1vZGVsbyByZWR1Y2lkbyBjb24gYWxndW5hcyB2YXJpYWJsZXMgc2VsZWNjaW9uYWRhcy4NCm1vZGVsb19JdGVyYWRvX1NURVA6IFVuIG1vZGVsbyBpdGVyYXRpdm8gYmFzYWRvIGVuIGVsIHByb2Nlc28gZGUgc2VsZWNjacOzbiBoYWNpYSBhdHLDoXMgKHN0ZXB3aXNlKSB1dGlsaXphbmRvIGVsIGNyaXRlcmlvIGRlIEFJQw0KLg0KMS4gKkludGVycHJldGFjacOzbiBkZSBsYXMgQ29lZmljaWVudGVzIHkgU2lnbmlmaWNhbmNpYSoNClByb2ZpdHNfTTogRXN0ZSBlcyBlbCDDum5pY28gcHJlZGljdG9yIHF1ZSB0aWVuZSB1biBpbXBhY3RvIHNpZ25pZmljYXRpdm8gZW4gbGEgdmFyaWFibGUgZGVwZW5kaWVudGUsIGNvbiB1biB2YWxvciBwIG1lbm9yIHF1ZSAwLjAxIGVuIHRvZG9zIGxvcyBtb2RlbG9zLiBFbCBjb2VmaWNpZW50ZSBwb3NpdGl2byBpbmRpY2EgcXVlIGEgbWVkaWRhIHF1ZSBhdW1lbnRhbiBsb3MgYmVuZWZpY2lvcyAoUHJvZml0c19NKSwgZXMgbcOhcyBwcm9iYWJsZSBxdWUgbGEgZW1wcmVzYSBzZWEgcmVudGFibGUuDQpDb21wYW55X1R5cGU6IFRpZW5lIHVuIGNvZWZpY2llbnRlIHBvc2l0aXZvIHNpZ25pZmljYXRpdm8gZW4gdG9kb3MgbG9zIG1vZGVsb3MsIGxvIHF1ZSBzdWdpZXJlIHF1ZSBlbCB0aXBvIGRlIGVtcHJlc2EgdGFtYmnDqW4gaW5mbHV5ZSBlbiBsYSBwcm9iYWJpbGlkYWQgZGUgc2VyIHJlbnRhYmxlLg0KT3Ryb3MgZmFjdG9yZXM6IEVsIHJlc3RvIGRlIGxhcyB2YXJpYWJsZXMgKHBvciBlamVtcGxvLCBlbCBuw7ptZXJvIGRlIGVtcGxlYWRvcywgbG9zIGluZ3Jlc29zLCBlbCBwYXRyaW1vbmlvLCBlbCBnw6luZXJvIGRlbCBDRU8geSBsYXMgdWJpY2FjaW9uZXMgZ2VvZ3LDoWZpY2FzKSBubyBtdWVzdHJhbiBzaWduaWZpY2FuY2lhIGVuIG5pbmd1bm8gZGUgbG9zIG1vZGVsb3MsIHlhIHF1ZSBzdXMgdmFsb3JlcyBwIHNvbiBtYXlvcmVzIGEgMC4wNSBvIDAuMS4NCg0KMi4gKkJvbmRhZGVzIGRlIGFqdXN0ZSo6DQpSwrIgKENvZWZpY2llbnRlIGRlIERldGVybWluYWNpw7NuKToNCm1vZGVsb19STE1fVE9UQUw6IDAuMDc4LCBsbyBxdWUgaW5kaWNhIHF1ZSBlbCBtb2RlbG8gZXhwbGljYSBlbCA3LjglIGRlIGxhIHZhcmlhYmlsaWRhZCBlbiBsYSByZW50YWJpbGlkYWQuIEVzdG8gZXMgcmVsYXRpdmFtZW50ZSBiYWpvLCBsbyBxdWUgc3VnaWVyZSBxdWUgb3Ryb3MgZmFjdG9yZXMgbm8gaW5jbHVpZG9zIGVuIGVsIG1vZGVsbyBwb2Ryw61hbiBlc3RhciBpbmZsdXllbmRvIGVuIGxhIHJlbnRhYmlsaWRhZC4NCm1vZGVsb19STE1fUkVEVUNJRE86IDAuMDM5LCBpbmRpY2FuZG8gcXVlIGVsIG1vZGVsbyByZWR1Y2lkbyB0aWVuZSB1biBwb2RlciBleHBsaWNhdGl2byBhw7puIG3DoXMgYmFqby4NCm1vZGVsb19JdGVyYWRvX1NURVA6IDAuMDM3LCBzaW1pbGFyIGFsIG1vZGVsbyByZWR1Y2lkbywgY29uIHVuIHBvZGVyIGV4cGxpY2F0aXZvIGlndWFsbWVudGUgYmFqby4NClLCsiBhanVzdGFkbzogRXN0ZSB2YWxvciBhanVzdGEgZWwgUsKyIHBvciBlbCBuw7ptZXJvIGRlIHByZWRpY3RvcmVzIGVuIGVsIG1vZGVsby4NCm1vZGVsb19STE1fVE9UQUw6IDAuMDI4DQptb2RlbG9fUkxNX1JFRFVDSURPOiAwLjAzNA0KbW9kZWxvX0l0ZXJhZG9fU1RFUDogMC4wMzUgRXN0b3MgdmFsb3JlcyBhanVzdGFkb3Mgc29uIGJham9zLCBsbyBxdWUgdGFtYmnDqW4gaW5kaWNhIHF1ZSwgYXVucXVlIGVsIG1vZGVsbyB0aWVuZSBhbGd1bmFzIHZhcmlhYmxlcyBzaWduaWZpY2F0aXZhcywgbm8gZXhwbGljYSBtdWNobyBkZSBsYSB2YXJpYWJpbGlkYWQgZGUgbGEgcmVudGFiaWxpZGFkLg0KDQozLiAqRXN0YWTDrXN0aWNvIEYqOg0KTG9zIHZhbG9yZXMgZGVsIGVzdGFkw61zdGljbyBGIG11ZXN0cmFuIHF1ZSwgYXVucXVlIGxvcyBtb2RlbG9zIHRpZW5lbiBhbGd1bm9zIHByZWRpY3RvcmVzIHNpZ25pZmljYXRpdm9zIChlc3BlY2lhbG1lbnRlICpQcm9maXRzX00geSBDb21wYW55X1R5cGUqKSwgZWwgYWp1c3RlIGdlbmVyYWwgZGVsIG1vZGVsbyBlcyBsaW1pdGFkby4gTGEgc2lnbmlmaWNhbmNpYSBkZSBsb3MgbW9kZWxvcyBlc3TDoSByZWZsZWphZGEgcG9yIGxvcyB2YWxvcmVzIHAgbXV5IGJham9zIGRlbCBGLXN0YXRpc3RpYyAobWVub3JlcyBhIDAuMDEpLCBwZXJvIGVuIGdlbmVyYWwgbGEgY2FsaWRhZCBkZWwgYWp1c3RlIG5vIGVzIGFsdGEuDQo0LiBDcml0ZXJpb3MgZGUgSW5mb3JtYWNpw7NuOioNCipBSUMgKENyaXRlcmlvIGRlIEluZm9ybWFjacOzbiBkZSBBa2Fpa2UqKSo6DQptb2RlbG9fUkxNX1RPVEFMOiA3OTkuMDcyMA0KbW9kZWxvX1JMTV9SRURVQ0lETzogNzQ2Ljc4OTUNCm1vZGVsb19JdGVyYWRvX1NURVA6IDc0Mi43NjM4IEVsIG1vZGVsb19JdGVyYWRvX1NURVAgdGllbmUgZWwgbWVub3IgdmFsb3IgZGUgQUlDLCBsbyBxdWUgaW5kaWNhIHF1ZSBlcyBlbCBtb2RlbG8gbcOhcyBlZmljaWVudGUgZW4gdMOpcm1pbm9zIGRlIGFqdXN0ZSB5IGNvbXBsZWppZGFkIChlbCBBSUMgcGVuYWxpemEgbGEgY29tcGxlamlkYWQgZGVsIG1vZGVsbykuDQoqQklDIChDcml0ZXJpbyBkZSBJbmZvcm1hY2nDs24gQmF5ZXNpYW5vKSo6DQptb2RlbG9fUkxNX1RPVEFMOiAxMDY0LjA5MDgNCm1vZGVsb19STE1fUkVEVUNJRE86IDc4MS4xNDM4DQptb2RlbG9fSXRlcmFkb19TVEVQOiA3NjIuMzk0OCBTaW1pbGFyIGFsIEFJQywgZWwgbW9kZWxvX0l0ZXJhZG9fU1RFUCB0YW1iacOpbiB0aWVuZSBlbCB2YWxvciBtw6FzIGJham8gZW4gZWwgQklDLCBsbyBxdWUgcmVzcGFsZGEgbGEgc2VsZWNjacOzbiBkZSBlc3RlIG1vZGVsbyBjb21vIGVsIG3DoXMgYWRlY3VhZG8gZW50cmUgbG9zIHRyZXMuDQoNCmVuIGNvbmNsaXVzacOybiBTaWduaWZpY2FuY2lhIGRlIGxvcyBwcmVkaWN0b3JlczogU29sbyBsb3MgYmVuZWZpY2lvcyAoUHJvZml0c19NKSB5IGVsIHRpcG8gZGUgZW1wcmVzYSAoQ29tcGFueV9UeXBlKSB0aWVuZW4gdW4gaW1wYWN0byBzaWduaWZpY2F0aXZvIGVuIGxhIHJlbnRhYmlsaWRhZC4NCg0KIEVsIG1vZGVsbyBtb2RlbG9fSXRlcmFkb19TVEVQIGVzIGVsIG1lam9yIGVuIGN1YW50byBhIGNyaXRlcmlvcyBkZSBpbmZvcm1hY2nDs24gKEFJQyB5IEJJQyksIGEgcGVzYXIgZGUgcXVlIGVsIFLCsiBlcyBiYWpvIGVuIHRvZG9zIGxvcyBtb2RlbG9zLg0KTQ0KRWwgbW9kZWxvX0l0ZXJhZG9fU1RFUCBwYXJlY2Ugc2VyIGVsIG3DoXMgYWRlY3VhZG8gZGViaWRvIGEgc3UgbWVqb3IgcmVuZGltaWVudG8gZW4gQUlDIHkgQklDLCBhdW5xdWUgbGEgZXhwbGljYWNpw7NuIGdlbmVyYWwgZGUgbGEgcmVudGFiaWxpZGFkIHNpZ3VlIHNpZW5kbyBsaW1pdGFkYS4NCg0KDQojIyMjIyMgTWVqb3IgTW9kZWxvIEl0ZXJhZG8gc2Vnw7puIEFJQw0KYGBge3IgTWVqb3JfTW9kZWxvX0l0ZXJhZG9fc2Vnw7puX0FJQywgZmlnLmFsaWduPSdjZW50ZXInfQ0KbW9kZWxvX0l0ZXJhZG9fU1RFUCA9IHN0ZXAobG0oY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kUHJvZml0YWJsZX5jZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byROdW1iZXJfb2ZfZW1wbG95ZWVzK2NkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJFJldmVudWVzX00rY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kUHJvZml0c19NK2NkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJEFzc2V0c19NK2FzLmZhY3RvcihjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRGZW1hbGVDRU8pK2FzLmZhY3RvcihjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRIZWFkcXVhcnRlcnNfU3RhdGUpK2FzLmZhY3RvcihjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRDb21wYW55X1R5cGUpKSkNCmNvZWZmaWNpZW50cyhtb2RlbG9fSXRlcmFkb19TVEVQKQ0KDQpgYGANCg0KIyMjIyMjIEJvbmRhZGVzIGRlIEFqdXN0ZSwgU2lnbmlmaWNhbmNpYXMgeSBDcml0ZXJpb3MgZGUgSW5mb3JtYWNpw7NuIENvbXBhcmFkb3MNCmBgYHtyIEJvbmRhZGVzX2RlX0FqdXN0ZV9TaWduaWZpY2FuY2lhc195X0NyaXRlcmlvc19kZV9JbmZvcm1hY2nDs25fQ29tcGFyYWRvcywgZmlnLmFsaWduPSdjZW50ZXInfQ0KbW9kZWxvX1JMTV9UT1RBTCA9IGxtKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJFByb2ZpdGFibGV+Y2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kTnVtYmVyX29mX2VtcGxveWVlcytjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRSZXZlbnVlc19NK2NkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJFByb2ZpdHNfTStjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRBc3NldHNfTSthcy5mYWN0b3IoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kRmVtYWxlQ0VPKSthcy5mYWN0b3IoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kSGVhZHF1YXJ0ZXJzX1N0YXRlKSthcy5mYWN0b3IoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kQ29tcGFueV9UeXBlKSkNCm1vZGVsb19STE1fUkVEVUNJRE8gPSBsbShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRQcm9maXRhYmxlfmNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJE51bWJlcl9vZl9lbXBsb3llZXMrY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kUmV2ZW51ZXNfTStjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRQcm9maXRzX00rY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kQXNzZXRzX00rYXMuZmFjdG9yKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJENvbXBhbnlfVHlwZSkpDQoNCnN0YXJnYXplcihtb2RlbG9fUkxNX1RPVEFMLCBtb2RlbG9fUkxNX1JFRFVDSURPLCBtb2RlbG9fSXRlcmFkb19TVEVQLCB0eXBlID0gInRleHQiLCBkZiA9IFRSVUUpDQoNCkFJQyhtb2RlbG9fUkxNX1RPVEFMLCBtb2RlbG9fUkxNX1JFRFVDSURPLCBtb2RlbG9fSXRlcmFkb19TVEVQKQ0KDQpCSUMobW9kZWxvX1JMTV9UT1RBTCwgbW9kZWxvX1JMTV9SRURVQ0lETywgbW9kZWxvX0l0ZXJhZG9fU1RFUCkNCmBgYA0KDQoNCg0KIyMjIDUuMy4gUmVncmVzacOzbiBMb2fDrXN0aWNhIFNpbXBsZQ0KDQpMYSByZWdyZXNpw7NuIGxvZ8Otc3RpY2Egc2ltcGxlIHNlIHV0aWxpemEgcGFyYSBtb2RlbGFyIGxhIHJlbGFjacOzbiBlbnRyZSB1bmEgdmFyaWFibGUgZGVwZW5kaWVudGUgY2F0ZWfDs3JpY2EgeSB1bmEgw7puaWNhIHZhcmlhYmxlIGluZGVwZW5kaWVudGUsIHByb3BvcmNpb25hbmRvIHByb2JhYmlsaWRhZGVzIGRlIHBlcnRlbmVuY2lhIGEgZGlmZXJlbnRlcyBjYXRlZ29yw61hcy4NCg0KRW4gZXN0ZSBhbsOhbGlzaXMsIHNlIGVtcGxlYSBsYSByZWdyZXNpw7NuIGxvZ8Otc3RpY2EgcGFyYSBwcmVkZWNpciBsYSBwcm9iYWJpbGlkYWQgZGUgcXVlIHVuYSBlbXByZXNhIHBlcnRlbmV6Y2EgYSB1biBzZWN0b3IgZXNwZWPDrWZpY28gbyByYW5nbyBkZSBpbmdyZXNvcyBlbiBmdW5jacOzbiBkZSB2YXJpYWJsZXMgY29tbyBzdXMgYWN0aXZvcy4gU2UgY2FsY3VsYSBsYSBmdW5jacOzbiBsb2dpdCB5IHNlIGludGVycHJldGFuIGxvcyBjb2VmaWNpZW50ZXMgZW4gdMOpcm1pbm9zIGRlIHByb2JhYmlsaWRhZGVzLCBldmFsdWFuZG8gbGEgc2lnbmlmaWNhbmNpYSBlc3RhZMOtc3RpY2EgZGUgbG9zIHByZWRpY3RvcmVzLg0KDQpFbCBtb2RlbG8gZGUgcmVncmVzacOzbiBsb2fDrXN0aWNhIHNpbXBsZSBpZGVudGlmaWPDsyBhc29jaWFjaW9uZXMgc2lnbmlmaWNhdGl2YXMgZW50cmUgbGFzIHZhcmlhYmxlcyBhbmFsaXphZGFzLCBwZXJtaXRpZW5kbyBwcmVkZWNpciBjb24gcHJlY2lzacOzbiBsYSBwZXJ0ZW5lbmNpYSBhIGNhdGVnb3LDrWFzIGVzcGVjw61maWNhcy4gRXN0ZSBlbmZvcXVlIGRlc3RhY8OzIGxhIHV0aWxpZGFkIGRlIGVzdGUgbcOpdG9kbyBwYXJhIGVudGVuZGVyIHkgbW9kZWxhciByZWxhY2lvbmVzIGNhdGVnw7NyaWNhcyBlbiBkYXRvcyBjb21wbGVqb3MuDQoNClBhcmEgZmFjaWxpdGFyIGxhcyBpbnRlcnByZXRhY2lvbmVzIHNlIGVudGllbmRlIHF1ZSBsYSBmdW5jacOzbiBkZSBlbmxhY2UgJFxwaSh4KSQgcHJvdmllbmUgZGUgdW5hIHJhesOzbiBkZSBwcm9iYWJpbGlkYWRlcyAoY29ub2NpZGEgZW4gaWRpb21hIGluZ2zDqXMgY29tbyBPRERTIHJhdGlvIChPUikpLCBxdWUgYSBzdSB2ZXogZXMgZWwgYXJndW1lbnRvIGRlIHVuIGxvZ2FyaXRtbzogJFxsb2dcbGVmdChcZnJhY3tccGkoeCl9ezEtXHBpKHgpfVxyaWdodCkkLCBhc8OtLCBzZSBtb2RlbGEgbGEgcHJvYmFiaWxpZGFkIGRlIHF1ZSBsYSB2YXJpYWJsZSBkZSByZXNwdWVzdGEgcGVydGVuZXpjYSBhbCBuaXZlbCBkZSByZWZlcmVuY2lhICQxJCBlbiBmdW5jacOzbiBkZWwgdmFsb3IgZGUgbG9zIHByZWRpY3RvcmVzLiBDb21wbGVtZW50YXJpYW1lbnRlLCBsYSB0cmFuc2Zvcm1hY2nDs24gZGUgcHJvYmFiaWxpZGFkZXMgYSByYXpvbmVzIGRlIHByb2JhYmlsaWRhZCBlcyBjb25zZXJ2YSBsYSBtb25vdG9uaWNpZGFkIGRlIHNlbnRpZG9zLiBBZGVtw6FzLCBsYSB0cmFuc2Zvcm1hY2nDs24gY29udmllcnRlIGVsIGludGVydmFsbyBkZSBwcm9iYWJpbGlkYWQgJFswLDFdJCBhICQoLVxpbmZ0eSxcaW5mdHkpJC4gTGFzIHByb3BpZWRhZGVzIHF1ZSBzZSBkYW4gZW50cmUgbGFzIHByb2JhYmlsaWRhZGVzIGNvbXBsZW1lbnRhcmlhcyBkZSDDqXhpdG8geSBmcmFjYXNvLCBzdXMgcmF6b25lcyB5IGxhIGZ1bmNpw7NuIGRlIGVubGFjZSBsb2dpdCBzb246DQoNCnx8fHwNCjotOnw6LTp8Oi06fA0KJHAow6l4aXRvKT1wKGZyYWNhc28pJHwkT1I9MSR8JExvZ2l0XGxlZnQoT1JccmlnaHQpPTAkDQokcCjDqXhpdG8pPHAoZnJhY2FzbykkfCRPUjwxJHwkTG9naXRcbGVmdChPUlxyaWdodCk8MCQNCiRwKMOpeGl0byk+cChmcmFjYXNvKSR8JE9SPjEkfCRMb2dpdFxsZWZ0KE9SXHJpZ2h0KT4wJA0KfHx8fA0KDQpTZSBlbnRpZW5kZSBxdWUgbGEgdHJhbnNmb3JtYWNpw7NuICRMb2dpdCQgY2FyZWNlIGRlIHNlbnRpZG8gcGFyYSBsYSBjZXJ0ZXphIGRlbCDDqXhpdG8gbyBkZWwgZnJhY2Fzby4NCg0KIyMjIyA1LjMuMSBQbGFudGVhbWllbnRvIHkgRGVzYXJyb2xsbyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQoqUmVzdW1lbiB5IEJveHBsb3QgZGUgUHJvZml0YWJsZSogTGEgdmFyaWFibGUgKlByb2ZpdGFibGUqIGVzIG1heW9ybWVudGUgMSwgbG8gcXVlIGluZGljYSBxdWUgbGEgbWF5b3LDrWEgZGUgbGFzIGVtcHJlc2FzIGVuIGVsIGNvbmp1bnRvIGRlIGRhdG9zIHNvbiByZW50YWJsZXMuIExhIG1lZGlhIHRhbWJpw6luIHJlZnVlcnphIGVzdGEgaWRlYSwgY29uIHVuIHZhbG9yIGRlIDAuODUxLCBsbyBxdWUgc3VnaWVyZSBxdWUgbcOhcyBkZWwgODUlIGRlIGxhcyBlbXByZXNhcyBzb24gcmVudGFibGVzLiBFbCBkaWFncmFtYSBkZSBjYWphIHZpc3VhbGl6YSBlc3RhIGNvbmNlbnRyYWNpw7NuIGRlIGRhdG9zIGVuIHRvcm5vIGFsIHZhbG9yIDEuDQoNCipIaXN0b2dyYW1hIGRlIFByb2ZpdGFibGUqLCAqUmVzdW1lbiB5IERpYWdyYW1hIGRlIEJhcnJhcyBkZSBDb21wYW55X1R5cGUqICBFbiBlc3RvcyBhcGFydGFkb3Mgc2UgbXVlc3RyYSBkZSBtYW5lcmEgbWFzIGV4cGxpY2l0YSBkb25kZSBzZSBwdWVkZSB2ZXIgbGEgZXNjYWxhIGRlIG1lZGljacOybiBzb2JyZSBsYXMgY29tcGHDsWlhcyBxdWUgc29uIG8gbm8gcmVudGFibGUsIGFwcmVjaWFuZG9zZSBsYSB0b3RhbCBkb21pbmFjacOybiBkZSBsYXMgcXVlIHNvbiByZW50YWJsZXMgY29uIGxhcyBxdWUgbm8uDQoNCg0KKlJlc3VtZW4geSBEaWFncmFtYSBkZSBDYWphcyBDb25qdW50byogTGFzIGVtcHJlc2FzIGRlIHRpcG8gMCB0aWVuZW4gdW5hIHRhc2EgZGUgcmVudGFiaWxpZGFkIG3DoXMgYmFqYSBlbiBjb21wYXJhY2nDs24gY29uIGxhcyBkZSB0aXBvIDEsIHlhIHF1ZSB0YW50byBlbCBwcm9tZWRpbyBjb21vIGxhIG1lZGlhbmEgcGFyYSBQcm9maXRhYmxlIHNvbiBtw6FzIGJham9zLg0KTGFzIGVtcHJlc2FzIGRlIHRpcG8gMSBtdWVzdHJhbiB1bmEgbWF5b3IgdGVuZGVuY2lhIGEgc2VyIHJlbnRhYmxlcywgY29uIHVuIHByb21lZGlvIHkgbWVkaWFuYSBtw6FzIGFsdG9zLg0KRWwgYm94cGxvdCByZWZ1ZXJ6YSBlc3RhIG9ic2VydmFjacOzbiB2aXN1YWxtZW50ZSBhbCBtb3N0cmFyIHF1ZSBsYXMgZW1wcmVzYXMgZGVsIHRpcG8gMSB0aWVuZW4gdW5hIG1heW9yIGNvbmNlbnRyYWNpw7NuIGRlIHZhbG9yZXMgZW4gMSAocmVudGFibGVzKSwgbWllbnRyYXMgcXVlIGxhcyBkZWwgdGlwbyAwIHRpZW5lbiB1bmEgbWF5b3IgZGlzcGVyc2nDs24gaGFjaWEgMCAobm8gcmVudGFibGVzKS4NCg0KIyMjIyMjIFJlc3VtZW4geSBCb3hwbG90IGRlIFByb2ZpdGFibGUNCmBgYHtyIFJlc3VtZW5feV9Cb3hwbG90X2RlX1Byb2ZpdGFibGUsZmlnLmFsaWduPSdjZW50ZXInfQ0Kc3VtbWFyeShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRQcm9maXRhYmxlKQ0KDQpib3hwbG90KGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJFByb2ZpdGFibGUsIG1haW4gPSAiRGlhZ3JhbWEgZGUgQ2FqYSBkZSBQcm9maXRhYmxlIiwgY29sID0gYygib3JhbmdlIikpDQoNCmBgYA0KDQojIyMjIyMgSGlzdG9ncmFtYSBkZSBQcm9maXRhYmxlDQpgYGB7ciBIaXN0b2dyYW1hX2RlX1Byb2ZpdGFibGUsIGZpZy5hbGlnbj0nY2VudGVyJ30NCnN1bW1hcnkoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kUHJvZml0YWJsZSkNCg0KaGlzdChjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRQcm9maXRhYmxlLCBtYWluID0gIkhpc3RvZ3JhbWEgZGUgUHJvZml0YWJsZSIsIGNvbCA9IGMoImdvbGQiKSkNCmBgYA0KDQojIyMjIyMgUmVzdW1lbiB5IERpYWdyYW1hIGRlIEJhcnJhcyBkZSBDb21wYW55X1R5cGUNCmBgYHtyIFJlc3VtZW5feV9EaWFncmFtYV9kZV9CYXJyYXNfZGVfQ29tcGFueV9UeXBlLGZpZy5hbGlnbj0nY2VudGVyJ30NCnRhYmxlKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJENvbXBhbnlfVHlwZSkNCg0KDQpwcm9wLnRhYmxlKHRhYmxlKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJENvbXBhbnlfVHlwZSkpDQoNCg0KYmFycGxvdCh0YWJsZShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRDb21wYW55X1R5cGUpKQ0KDQpgYGANCg0KIyMjIyMjIFJlc3VtZW4geSBEaWFncmFtYSBkZSBDYWphcyBDb25qdW50bw0KYGBge3IgYm94cGxvdF9Db25qdW50b19DaGFuY2Utb2YtQWRtaXRfUmVzZWFyY2gsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KdGFwcGx5KGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJFByb2ZpdGFibGUsIGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJENvbXBhbnlfVHlwZSwgbWVhbikNCnRhcHBseShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRQcm9maXRhYmxlLCBjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRDb21wYW55X1R5cGUsIG1lZGlhbikNCmJveHBsb3QoY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kUHJvZml0YWJsZSwgY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kQ29tcGFueV9UeXBlLCBtYWluID0gIkJveHBsb3QgQ29uanVudG86IFByb2ZpdGFibGUgLSBDb21wYW55X1R5cGUiLCBjb2wgPSBjKCJvcmFuZ2UiLCAiZ29sZCIpKSANCg0KYGBgDQoNCiMjIyMjIDUuMy4yLjIuIEZvcm11bGFjacOzbiBkZWwgbW9kZWxvIGRlIFJMb2dTIGVudHJlIGxhcyB2YXJpYWJsZXMgZGUgZXN0dWRpby4gey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KDQpMYSBuYXZlZ2FjacOzbiBhIHRyYXbDqXMgZGUgbGFzIHBlc3Rhw7FhcyBtdWVzdHJhIGxvcyBjb2VmaWNpZW50ZXMgZGVsIG1vZGVsbyBSTG9nUyB5IHN1IHJlc3VtZW4gZXN0YWTDrXN0aWNvLiBTZSBtZW5jaW9uYSBkZSBudWV2byBxdWUgbGFzIHZhcmlhYmxlcyBkZSBpbnRlcsOpcyBzb246ICoqQ29tcGFueV9UeXBlKiopIHkgKipQcm9maXRhYmxlKiogDQoqQ29lZmljaWVudGVzIGRlbCBNb2RlbG8gUkxvZ1MqDQpJbnRlcmNlcHRvOiBFbCB2YWxvciBkZSBiYXNlIGRlIGxhcyBwcm9iYWJpbGlkYWRlcyBsb2dhcsOtdG1pY2FzIGN1YW5kbyBsYSBlbXByZXNhIG5vIGVzIHJlbnRhYmxlLg0KQ29lZmljaWVudGUgZGUgUHJvZml0YWJsZTogVW4gdmFsb3IgZGUgMS4wMDkxMDAgc3VnaWVyZSBxdWUgbGFzIGVtcHJlc2FzIHJlbnRhYmxlcyB0aWVuZW4gMi43NDUgdmVjZXMgbcOhcyBwcm9iYWJpbGlkYWRlcyBkZSBzZXIgZGVsIHRpcG8gMSBlbiBjb21wYXJhY2nDs24gY29uIGxhcyBlbXByZXNhcyBubyByZW50YWJsZXMsIHRvZG8gbG8gZGVtw6FzIHNpZW5kbyBpZ3VhbC4NCg0KKlJlc3VtZW4gRXN0YWTDrXN0aWNvIGRlbCBNb2RlbG8gUkxvZ1MqDQpFbiBlbCBwcmltZXIgbW9kZWxvIChwYXJhIHByZWRlY2lyIGVsIHRpcG8gZGUgZW1wcmVzYSksIGVsIGNvZWZpY2llbnRlIGRlIFByb2ZpdGFibGUgZXMgc2lnbmlmaWNhdGl2byB5IHN1Z2llcmUgcXVlIGxhcyBlbXByZXNhcyByZW50YWJsZXMgdGllbmVuIG1heW9yZXMgcHJvYmFiaWxpZGFkZXMgZGUgc2VyIGRlbCB0aXBvIDEuDQoNCkVuIGVsIHNlZ3VuZG8gbW9kZWxvIChwYXJhIHByZWRlY2lyIHNpIHVuYSBlbXByZXNhIHRpZW5lIHVuYSBDRU8gbXVqZXIpLCBlbCBjb2VmaWNpZW50ZSBkZSBQcm9maXRhYmxlIG5vIGVzIHNpZ25pZmljYXRpdm8sIGxvIHF1ZSBzdWdpZXJlIHF1ZSBsYSByZW50YWJpbGlkYWQgZGUgbGEgZW1wcmVzYSBubyB0aWVuZSB1biBpbXBhY3RvIGNsYXJvIHNvYnJlIGxhIHByb2JhYmlsaWRhZCBkZSB0ZW5lciB1bmEgQ0VPIG11amVyLg0KDQoNCiMjIyMjIyBDb2VmaWNpZW50ZXMgZGVsIE1vZGVsbyBSTG9nUw0KYGBge3IgQ29lZmljaWVudGVzX2RlbF9Nb2RlbG9fUkxvZ1MsZmlnLmFsaWduPSdjZW50ZXInfQ0KbW9kZWxvX1JMb2dfU2ltcGxlID0gZ2xtKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJENvbXBhbnlfVHlwZX5jZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRQcm9maXRhYmxlLCBmYW1pbHkgPSAiYmlub21pYWwiLCBkYXRhID0gZGF0YS5mcmFtZShjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRDb21wYW55X1R5cGUsIGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJFByb2ZpdGFibGUpKQ0KY29lZihtb2RlbG9fUkxvZ19TaW1wbGUpDQpgYGANCg0KIyMjIyMjIFJlc3VtZW4gRXN0YWTDrXN0aWNvIGRlbCBNb2RlbG8gUkxvZ1MNCmBgYHtyIFJlc3VtZW5fRXN0YWTDrXN0aWNvX2RlbF9Nb2RlbG9fUkxvZ1MsZmlnLmFsaWduPSdjZW50ZXInfQ0KDQpzdW1tYXJ5KG1vZGVsb19STG9nX1NpbXBsZSkNCg0KbW9kZWxvX1JMb2dfU2ltcGxlX1MgPSBnbG0oY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kRmVtYWxlQ0VPfmNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJFByb2ZpdGFibGUsIGZhbWlseSA9ICJiaW5vbWlhbCIsIGRhdGEgPSBkYXRhLmZyYW1lKGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJEZlbWFsZUNFTywgY2RkX3JhbmtpbmdfZm9ydHVuZV9yZWVzY3JpdG8kUHJvZml0YWJsZSkpDQpzdW1tYXJ5KG1vZGVsb19STG9nX1NpbXBsZV9TKQ0KYGBgDQoNCg0KIyMjIyMgNS4zLjIuMy4gQW7DoWxpc2lzIGRlbCBtb2RlbG8gUkxvZ1MuIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCkxhIG5hdmVnYWNpw7NuIGEgdHJhdsOpcyBkZSBsYXMgcGVzdGHDsWFzIG11ZXN0cmEgbG9zIGNvZWZpY2llbnRlcyBkZWwgbW9kZWxvIFJMb2dTIHkgc3UgcmVzdW1lbiBlc3RhZMOtc3RpY28uIFNlIG1lbmNpb25hIGRlIG51ZXZvIHF1ZSBsYXMgdmFyaWFibGVzIGRlIGludGVyw6lzIHNvbjogKipDb21wYW55X1R5cGUqKikgeSAqKlByb2ZpdGFibGUqKiANCipWYXJpYWJsZSBQcmVkaWN0b3JhIGlndWFsIGEgQ2Vybyogc2Ugb2JlcnZhIHF1ZSBlbDoNCmludGVyY2VwdG8gKDkuNjQyODU3KTogRWwgb2RkcyByYXRpbyBkZWwgaW50ZXJjZXB0byBpbmRpY2EgcXVlIGN1YW5kbyBsYSB2YXJpYWJsZSBpbmRlcGVuZGllbnRlIFByb2ZpdGFibGUgZXMgaWd1YWwgYSBjZXJvIChlcyBkZWNpciwgY3VhbmRvIHVuYSBlbXByZXNhIG5vIGVzIHJlbnRhYmxlKSwgbGFzIG9kZHMgZGUgcXVlIGxhIGVtcHJlc2Egc2VhIGRlbCB0aXBvIDEgc29uIDkuNjQgdmVjZXMgbWF5b3JlcyBxdWUgbGFzIG9kZHMgZGUgcXVlIG5vIGxvIHNlYS4gRW4gb3RyYXMgcGFsYWJyYXMsIGVuIGF1c2VuY2lhIGRlIHJlbnRhYmlsaWRhZCwgaGF5IHVuYSBhbHRhIHByb2JhYmlsaWRhZCBkZSBxdWUgbGEgZW1wcmVzYSBzZWEgZGVsIHRpcG8gMS4NCg0KQ29lZmljaWVudGUgZGUgUHJvZml0YWJsZSAoMi43NDMxMzApOiBFbCBvZGRzIHJhdGlvIHBhcmEgbGEgdmFyaWFibGUgUHJvZml0YWJsZSBlcyAyLjc0MzEzMCwgbG8gcXVlIHNpZ25pZmljYSBxdWUgc2kgdW5hIGVtcHJlc2EgZXMgcmVudGFibGUgKFByb2ZpdGFibGUgPSAxKSwgbGFzIG9kZHMgZGUgcXVlIGxhIGVtcHJlc2Egc2VhIGRlbCB0aXBvIDEgYXVtZW50YW4gZW4gdW4gZmFjdG9yIGRlIDIuNzQgdmVjZXMgZW4gY29tcGFyYWNpw7NuIGNvbiBsYXMgZW1wcmVzYXMgbm8gcmVudGFibGVzLiBFcyBkZWNpciwgbGFzIGVtcHJlc2FzIHJlbnRhYmxlcyB0aWVuZW4gMi43NCB2ZWNlcyBtw6FzIHByb2JhYmlsaWRhZGVzIGRlIHNlciBkZWwgdGlwbyAxIHF1ZSBsYXMgZW1wcmVzYXMgbm8gcmVudGFibGVzLg0KDQoqUHJvYmFiaWxpZGFkZXMgRXN0aW1hZGFzKiANCkxvcyB2YWxvcmVzIG1vc3RyYWRvcyBlbiBsYSBzYWxpZGEgaW5kaWNhbiBsYXMgcHJvYmFiaWxpZGFkZXMgZGUgcXVlIGVsIGV2ZW50byBkZSBpbnRlcsOpcyBvY3VycmEgcGFyYSBjYWRhIG7Dum1lcm8gZGUgbGEgc2VjdWVuY2lhICgxIGEgMTAwMCkuIExhIG1heW9yw61hIGRlIGxhcyBwcm9iYWJpbGlkYWRlcyBzZSBhY2VyY2FuIGEgMC45NjM1NywgY29uIGFsZ3VuYXMgdmFyaWFjaW9uZXMgcGVxdWXDsWFzLCBjb21vIDAuOTA2MDQuDQpVbmEgcHJvYmFiaWxpZGFkIGNlcmNhbmEgYSAxIChlbiBlc3RlIGNhc28sIDAuOTYzNTcpIGluZGljYSBxdWUgZWwgbW9kZWxvIHByZWRpY2UgcXVlIGVzIG11eSBwcm9iYWJsZSBxdWUgZWwgZXZlbnRvIG9jdXJyYSBwYXJhIGVzb3MgdmFsb3Jlcy4NCkxhcyBwcm9iYWJpbGlkYWRlcyAwLjkwNjA0IG11ZXN0cmFuIHF1ZSwgZW4gYWxndW5vcyBjYXNvcywgZWwgbW9kZWxvIGVzdGltYSB1bmEgcHJvYmFiaWxpZGFkIGxpZ2VyYW1lbnRlIG3DoXMgYmFqYSBwYXJhIGxvcyBldmVudG9zIGNvcnJlc3BvbmRpZW50ZXMuDQpxdWVyaWVuZG8gZGVjaXIgcXVlIGRlbnRybyBkZWwgY29uanVudG8gZXMgbWFzIHByb2JhYmxlIHF1ZSB1bmEgY29tcGHDsWlhIHJlbnRhYmxlIHNlYSBwdWJsaWNhIGVzdG8gcG9yIHN1IHByb2JhYmxpZGFkIHRhbiBjZXJjYW5hIGFsIDEwMCUgDQoNCipHcsOhZmljYSBkZWwgTW9kZWxvIFJMb2dTKiBhY2Egc2UgdmUgcmVmZWxqYWRvIGxvIHF1ZSBzZSBlc3RhYmEgY29uY2x1eWVuZG8gZW4gbGEgcGVzdGHDsWEgYW50ZXJpb3IgZG9uZGUgZXMgbWFzIHByb2JhYmxlIHF1ZSB1bmEgZW1wcmVzYSBzZWEgcHVibGljYSB5IHJlbnRhYmxlIGEgcGVzYXIgZGUgaGFiZXIgZmx1Y3R1YWNpb25lcyBkb25kZSBoYXkgdW5hIGJhamEgcHJvYmFibGlsaWRhZCBxdWUgc2VhIHJlbnRhYmxlIHkgcHJpdmFkYSwgdGVuaWVuZG8gY29uc2lzdGVuY2lhcyBjb24gZWwgY29uanVudG8gZXN0dWRpYWRvICAicmFua2luZyBmb3J0dW5lIDEwMDAiIA0KIA0KIyMjIyMjIFZhcmlhYmxlIFByZWRpY3RvcmEgaWd1YWwgYSBDZXJvIA0KYGBge3IgVmFyaWFibGVfUHJlZGljdG9yYV9pZ3VhbF9hX0Nlcm8sZmlnLmFsaWduPSdjZW50ZXInfQ0KY29lZihtb2RlbG9fUkxvZ19TaW1wbGUpDQoNCnJvdW5kKGV4cChjb2VmKG1vZGVsb19STG9nX1NpbXBsZSkpLDYpDQoNCmBgYA0KIA0KDQojIyMjIyMgUHJvYmFiaWxpZGFkZXMgRXN0aW1hZGFzDQpgYGB7ciBQcm9iYWJpbGlkYWRlc19Fc3RpbWFkYXMsIGZpZy5hbGlnbj0nY2VudGVyJ30NCg0KcHJlZGljdChtb2RlbG9fUkxvZ19TaW1wbGUsIGRhdGEuZnJhbWUoc2VxKDEsIDEwMDApKSwgdHlwZSA9ICJyZXNwb25zZSIpDQoNCg0KYGBgDQoNCiMjIyMjIyBHcsOhZmljYSBkZWwgTW9kZWxvIFJMb2dTDQpgYGB7ciBHcsOhZmljYV9kZWxfTW9kZWxvX1JMb2dTLGZpZy5hbGlnbj0nY2VudGVyJ30NCg0KQ29tcGFueV90eXBlIDwtIGNkZF9yYW5raW5nX2ZvcnR1bmVfcmVlc2NyaXRvJENvbXBhbnlfVHlwZQ0KUHJvZml0YWJsZSA8LSBjZGRfcmFua2luZ19mb3J0dW5lX3JlZXNjcml0byRQcm9maXRhYmxlDQpkYXRhUGxvdCA8LSBkYXRhLmZyYW1lKFByb2ZpdGFibGUsIENvbXBhbnlfdHlwZSkNCnBsb3QoQ29tcGFueV90eXBlflByb2ZpdGFibGUsIGRhdGEgPSBkYXRhUGxvdCwgbWFpbiA9ICJNb2RlbG8gUkxvZ1M6IFByb2ZpdGFibGUgLSBDb21wYW55IHR5cGUiLCB4bGFiID0gIlByb2ZpdGFibGUiLCB5bGFiID0gIkNvbXBhbnkgdHlwZSA9IDAgfCBDb21wYW55IHR5cGUgPSAxIiwgY29sID0gImdvbGQiLCBwY2ggPSAiSSIpDQpjdXJ2ZShwcmVkaWN0KGdsbShDb21wYW55X3R5cGV+UHJvZml0YWJsZSwgZmFtaWx5ID0gImJpbm9taWFsIiwgZGF0YSA9IGRhdGFQbG90KSwgZGF0YS5mcmFtZShQcm9maXRhYmxlID0geCksIHR5cGUgPSAicmVzcG9uc2UiKSwgY29sID0gIm9yYW5nZSIsIGx3ZCA9IDMsIGFkZCA9IFRSVUUpDQoNCmBgYA0KDQoNCiMjICoqNi4gQ29uY2x1c2lvbmVzKioNCg0KRWwgYW7DoWxpc2lzIGRlbCByYW5raW5nIEZvcnR1bmUgMTAwMCBkZSAyMDI0IHBlcm1pdGnDsyBpZGVudGlmaWNhciBwYXRyb25lcyB5IHRlbmRlbmNpYXMgY2xhdmUgZW4gbGFzIG3DqXRyaWNhcyBmaW5hbmNpZXJhcyB5IG9wZXJhdGl2YXMgZGUgbGFzIHByaW5jaXBhbGVzIGVtcHJlc2FzIGRlIEVzdGFkb3MgVW5pZG9zLiBBdW5xdWUgbm8gc2UgZW5jb250cmFyb24gYWdydXBhY2lvbmVzIGNsYXJhcyBlbiBsb3MgZGF0b3MgKGNvbW8gbG8gZXZpZGVuY2lhcm9uIGxvcyBkaWFncmFtYXMgZGUgQ2hlcm5vZmYgeSBsYXMgZXN0cmVsbGFzKSwgdmFyaWFibGVzIGNvbW8gaW5ncmVzb3MsIGFjdGl2b3MgeSBuw7ptZXJvIGRlIGVtcGxlYWRvcyBtb3N0cmFyb24gcmVsYWNpb25lcyBwb3NpdGl2YXMgc2lnbmlmaWNhdGl2YXMgZW50cmUgc8OtLCBpbmRpY2FuZG8gcXVlIGVzdGFzIG3DqXRyaWNhcyBlc3TDoW4gZnVlcnRlbWVudGUgaW50ZXJjb25lY3RhZGFzIGVuIGVsIHJlbmRpbWllbnRvIGVtcHJlc2FyaWFsLg0KDQpTaW4gZW1iYXJnbywgbGFzIHZhcmlhYmxlcyBpbmNsdWlkYXMgZW4gZXN0ZSBhbsOhbGlzaXMgbXVsdGl2YXJpYWRvIGV4cGxpY2FuIMO6bmljYW1lbnRlIGNlcmNhIGRlbCA4MCUgZGUgbGEgdmFyaWFiaWxpZGFkIG9ic2VydmFkYSBlbiBsb3MgZGF0b3MsIGxvIHF1ZSBlcyBzdWZpY2llbnRlIHBhcmEgdG9tYXIgZGVjaXNpb25lcyBpbmZvcm1hZGFzIHNvYnJlIGxvcyBwYXRyb25lcyBwcmluY2lwYWxlcyBlbiBsYXMgZW1wcmVzYXMsIHBlcm8gZGVqYSB1biAyMCUgZGUgdmFyaWFiaWxpZGFkIHN1amV0byBhIGluY2VydGlkdW1icmUuIEVzdGUgcG9yY2VudGFqZSByZXN0YW50ZSBhYnJlIGxhIHB1ZXJ0YSBhIGZ1dHVyb3MgZXN0dWRpb3MgcXVlIHBvZHLDrWFuIGV4cGxvcmFyIG90cmFzIHZhcmlhYmxlcyBubyBjb25zaWRlcmFkYXMgbyBmYWN0b3JlcyBleHRlcm5vcyBxdWUgaW5mbHV5ZW4gZW4gZWwgZGVzZW1wZcOxbyBlbXByZXNhcmlhbC4NCg0KRGUgcXVlIGxhIGRpc3RyaWJ1Y2nDsm4gZ2VuZXJhbCBkZWwgcmFua2luZywgdGllbmRlIGEgZXN0YXIgYWdsb21lcmFkYSBhIGV4Y2VwY2nDsm4gZGUgZGF0b3MgYXRpcGljb3MgY29uIHZhbG9yZXMgbXV5IGFsdG8gbG9zIGN1YWxlcyB0aWVuZGVuIGEgc2VzZ2FyIGxhIGRpc3RyaWJ1Y2nDsm4gY29uIGNvbiBsYSBoYWNpYSBsYSBkZXJlY2hhLg0KIA0KdGVuaWVuZG8gZW4gY3VlbnRhIGRlIHF1ZSBlc3RlIG1vZGVsbyBubyBsbyBwdWVkZSBwcmVkZWNpciBjb24gdGFsIHByZXNpY2nDsm4gZ3JhY2lhcyBhIGxvcyB2YWxvcmVzIGF0aXBpY29zIHF1ZSBzZXNnYW4gbGFzIG9ic2VydmFjaW9uZXMuICANCg0KDQojIyAqKjcuIEJpYmxpb2dyYWbDrWEqKg0KDQpGb3J0dW5lIDEwMDAgQ29tcGFuaWVzICgyMDI0KWh0dHBzOi8vd3d3LmthZ2dsZS5jb20vZGF0YXNldHMvamVhbm5pY29sYXNkdXZhbC8yMDI0LWZvcnR1bmUtMTAwMC1jb21wYW5pZXMvZGF0YQ0KDQpBbGTDoXMsIEouLCAmIFVyaWVsLCBFLiAoMjAxNykuIEFuw6FsaXNpcyBtdWx0aXZhcmlhbnRlIGFwbGljYWRvIGNvbiBSICgybmQgZWQuKS4gQUxGQUNFTlRBVVJPLg0KDQpMaWJyZXJvcywgRy4gKDIwMjMpLiBFc3R1ZGlvIGRlIGFuw6FsaXNpcyBtdWx0aXZhcmlhZG8gY29uIGJhc2UgZW4gdW4gY29uanVudG8gZGUgZGF0b3MgZGUgYXNwaXJhbnRlcyBleHRyYW5qZXJvcyBwYXJhIHNlciBhZG1pdGlkb3MgZW4gZXN0dWRpb3Mgc3VwZXJpb3JlcyBlbiBFRS5VVS4gSW4gUiBNQVJLRE9XTi4gaHR0cHM6Ly9nbGlicmVyb3NsLmdpdGh1Yi5pby9BcHBsaWVkLVN0YXRpc3RpY3MtRlVMTC8jOF9DYWxpZGFkX2RlX1JlcHJlc2VudGFjaSVDMyVCM25odHRwczovL2dsaWJyZXJvc2wuZ2l0aHViLmlvL0FwcGxpZWQtU3RhdGlzdGljcy1GVUxMLw0KDQpEw61heiBNb3JhbGVzLCBMLiBHLiwgJiBNb3JhbGVzIFJpdmVyYSwgTS4gQS4gKDIwMTIpLiBBbsOhbGlzaXMgZXN0YWTDrXN0aWNvIGRlIGRhdG9zIG11bHRpdmFyaWFkb3MgKDFzdCBlZC4pLiBVTkFMLg0KDQpEZXZvcmUsIEpheSBMLiAoMjAwOCkuIFByb2JhYmlsaWRhZCB5IGVzdGFkxLHMgXN0aWNhIHBhcmEgaW5nZW5pZXLEscyBYSB5IGNpZW5jaWFzICg3dGggZWQuKS4gQ0VOR0FHRSBMRUFSTklORy4NCg0KTGluZCwgRC4gQS4sIE1hcmNoYWwsIFcuIEcuLCAmIFdhdGhlbiwgUy4gQS4gKDIwMTIpLiBFc3RhZMOtc3RpY2EgYXBsaWNhZGEgYSBsb3MgbmVnb2Npb3MgeSBsYSBlY29ub23DrWEgKDE1dGggZWQuKS4gTWNHcmF3LUhpbGwgRWR1Y2F0aW9uLg0KDQpTdGFmZiwgTS4gQy4gKDIwMjQpLiBXaGF0IGFyZSBpZGVhbCBjaG9sZXN0ZXJvbCBsZXZlbHM/IGh0dHBzOi8vd3d3Lm1heW9jbGluaWMub3JnL2VzL2Rpc2Vhc2VzLWNvbmRpdGlvbnMvaGlnaC1ibG9vZC1jaG9sZXN0ZXJvbC9leHBlcnQtYW5zd2Vycy9jaG9sZXN0ZXJvbC1sZXZlbC9mYXEtMjAwNTc5NTINCg0K