hllinas2023

1 ¿Qué son los SEM?

  1. Los SEM representan una familia de modelos estadísticos multivariados que posibilitan la estimación de los efectos y relaciones entre múltiples variables.

  2. Surgieron como respuesta a la necesidad de brindar una mayor flexibilidad a los modelos de regresión.

  3. Son menos restrictivos al permitir la inclusión de errores de medición tanto en las variables dependientes como en las independientes.

  4. Estos modelos combinan elementos de la regresión con técnicas de análisis factorial.

  5. De esta manera, posibilitan la representación de efectos directos e indirectos entre las variables.

  6. Desde el punto de vista matemático, son modelos con un alto grado de complejidad para la estimación de los parámetros correspondientes.

  7. SEM no es simplemente una técnica de estimación para un modelo específico.

  8. SEM representa una manera distinta de concebir, formular y estimar un modelo.

2 ¿Para qué sirven los SEM?

  1. Elaborar modelos teóricos que faciliten una comprensión más profunda de la realidad y de los fenómenos complejos que se observan.

  2. Evaluar en qué medida los datos respaldan un modelo teórico que describe múltiples relaciones de dependencia entre las variables.

  3. Aplicar métodos estadísticos para analizar las relaciones entre un conjunto de variables, investigando los posibles efectos mediadores y espurios de ciertas variables.

  4. Examinar los constructos latentes, que son variables que no pueden ser directamente observadas o medidas, sino que se infieren a partir de diversos indicadores observables.

3 Antecedentes

  1. En 1934, el biometrista Sewall Wright introdujo el concepto de análisis de trayectoria (path model), aplicándolo al estudio de las relaciones de tamaño en mediciones óseas.

  2. Posteriormente, sociólogos como Blalock (1964, 1971), Boundon (1965) y Duncan (1966), entre otros, reconocieron su utilidad como herramienta para analizar datos no experimentales, lo que resultó en un redescubrimiento y su difusión en las ciencias sociales.

  3. En la década de 1970, estadísticos como Jöreskog (1973), Keesling (1972) y Wiley (1973) desarrollaron el primer modelo general de ecuaciones estructurales, conocido como LISREL (Linear Structural Relations) o modelo JKW, que integraba variables latentes y observadas.

  4. Posteriormente, Jöreskog refinó LISREL y desarrolló métodos para trabajar con diferentes tipos de datos, como transversales, longitudinales, multi-grupo y multinivel.

  5. Los seguidores de Jöreskog han hecho importantes aportaciones en diversos aspectos:

    • Sörbom (1974) amplía el modelo multi-grupo con medias en las variables latentes.

    • Muthén (1977) introduce técnicas para incluir variables observadas categóricas.

    • Hägglund (1985) contribuye con el enfoque de mínimos cuadrados en dos etapas (two-stages least-squares).

    • Quiroga (1992) lleva a cabo estudios de robustez utilizando correlaciones policóricas para abordar desviaciones del supuesto de normalidad.

    • Yang-Wallentin (1997) desarrolla métodos para estimar relaciones no lineales.

    • Los progresos más recientes incluyen extensiones para datos provenientes de muestras complejas, modelos lineales generalizados y análisis de series temporales.

4 ¿Softwares para SEM?

  1. LISREL (acrónimo de Linear Structural Relations), desarrollado por Jöreskog y Sörbom desde la década de 1970 hasta 2015. Fue el primer software para SEM. Originalmente basado en comandos, sus versiones más recientes incluyen una interfaz gráfica. Es distribuido por Scientific Software International (SSI).

  2. EQS (acrónimo de Equations) de Bentler, disponible desde 1985 hasta 2006. Fue creado específicamente para modelos SEM y cuenta con versiones para Windows y Linux.

  3. AMOS (Analysis of Moment Structures) de Arbuckle, desarrollado entre 1995 y 2009 para SPSS Inc. Puede usarse como una aplicación independiente o como un módulo de SPSS. También ofrece una versión gratuita para estudiantes.

  4. MPLUS de Muthén y Muthén, disponible desde 1998 hasta 2010. Incluye métodos automáticos para trabajar con variables de diferentes escalas y permite combinar Análisis Factorial Exploratorio (EFA) con SEM (ESEM). Además, dispone de una versión demo para estudiantes.

  5. MX (acrónimo de Matrix) de Neale, Boker, Xie y Maes, lanzado en 2003. Es un software libre para análisis multivariado compatible con varios sistemas operativos (Windows, Linux, Apple OSX y AIX). Una versión de código abierto ha sido desarrollada como un paquete de R llamado OpenMx.

  6. Otros: CALIS/TCALIS (módulo de SAS/STAT), RAMONA (módulo de SYSTAT), SEPATH (módulo de STATISTICA), SEM y lavaan (paquetes de R), STATA y MATLAB.

5 La causalidad en SEM

  1. Una característica destacada de estos modelos es la capacidad de representar el efecto causal entre variables.

  2. También es posible estimar los parámetros asociados a estos efectos, pero la capacidad de estimarlos no demuestra causalidad.

  3. La existencia de cualquier relación causal entre las variables debe estar respaldada por la fundamentación teórica del modelo y no solo por su estimación a partir de los datos.

  4. Estos modelos no prueban la causalidad, solo permiten seleccionar hipótesis causales relevantes, descartando aquellas que no están respaldadas por la evidencia empírica.

  5. Se especifican una serie de relaciones y luego se evalúa cuáles de estas relaciones están representadas por los datos.

6 Tipos de variables en SEM

  1. Variables manifistas (observadas, indicadoras): son variables observables, generalmente ítems o preguntas en un cuestionario.

  2. Variables latentes (no observadas): son constructos teóricos que solo pueden medirse indirectamente a través de variables observables que actúan como sus manifestaciones. Similar al análisis factorial, se pueden utilizar múltiples medidas para representar un constructo, lo que ayuda a controlar el error de medición específico de cada variable.

  3. Variables de error: representan tanto los errores asociados a la medición de una variable como aquellas variables no consideradas en el modelo que pueden influir en la medición de una variable observable. Al igual que las variables latentes, no son observables directamente.

  4. Variables exógenas: Son variables que influyen en otras variables del modelo pero no son afectadas por ninguna otra variable. Son similares a las variables independientes en un modelo de regresión.

  5. Variables endógenas: Son variables que son influenciadas por otras variables dentro del modelo. Corresponden a las variables dependientes en los modelos de regresión. Cada variable endógena debe estar acompañada de un término de error.

  6. Variables mediadoras: Son las variables endógenas que a su vez influyen en otras endógenas.

  7. Variables de agrupación o moderadoras: Son variables categóricas que indican la pertenencia de las observaciones a diferentes subpoblaciones. Se utilizan principalmente en análisis de comparaciones entre grupos.

7 Escala de las variables latentes

7.0.1 Escala: explicación

  1. Como las variables latentes (LVs) no se observan directamente, no tienen unidades de medida inherentes.

  2. Por lo tanto, un modelo de variables latentes (LVM) no está identificado a menos que se restrinjan algunas estimaciones de parámetros para definir la escala de la variable latente.

  3. Estos diferentes métodos de escalamiento producen valores distintos para los parámetros del modelo, pero no deberían afectar el ajuste del modelo a los datos.

7.0.2 Escala: métodos

Hay tres métodos comunes para establecer esta escala:

  1. Variable latente estandarizada.

  2. Variable marcador.

  3. Codificación de efectos.

A continuación, explicaremos brevemente cada uno de ellos.

7.0.3 Escala: variable latente estandarizada

  1. Este método establece la varianza de la variable latente en 1.0, convirtiéndola así en una variable estandarizada (similar a una puntuación \(Z\)).

  2. Si las variables indicadoras también están estandarizadas, las cargas pueden interpretarse igual que un coeficiente de regresión estandarizado:

  • El número de desviaciones estándar que cambia la variable manifiesta (MV) cuando la variable latente aumenta en una desviación estándar.
  1. Además, si hay más de una variable latente, la covarianza entre ellas se convierte en una correlación.

7.0.4 Escala: variable marcador

  1. Este método implica restringir una carga factorial de cada variable latente a un valor arbitrario (usualmente 1.0).

  2. La variable indicadora cuya carga está restringida se conoce como la variable marcador.

  3. Este método define la varianza de la variable latente usando la variable marcador.

7.0.5 Escala: codificación de efectos

  1. Este método estima todas las cargas, pero impone que las cargas de una variable latente determinada promedien 1.0.

  2. De manera equivalente, que su suma sea igual al número de variables indicadoras únicas.

8 Tipos de relaciones entre variables

En un SEM, se pueden definir varios tipos de relaciones entre variables. A continuación se describen estos tipos de relaciones.

8.0.1 Covariación

Se refiere a la relación entre dos variables que varían juntas, pero sin implicar causalidad. Indica que cuando una variable cambia, la otra también lo hace, pero no necesariamente porque una cause a la otra.

Ejemplo.

La relación entre la cantidad de helados vendidos y el número de personas que van a la playa. Estas dos variables covarían porque ambas aumentan durante el verano, pero una no causa directamente a la otra. Véase la figura 8.1.

**Covariación**

Figure 8.1: Covariación

8.0.2 Causalidad:

Se refiere a una relación en la que un cambio en una variable provoca un cambio en otra. En SEM, la causalidad implica una dirección de influencia.

Ejemplo.

El nivel de educación y el salario. Una mayor educación (variable independiente) puede causar un aumento en el salario (variable dependiente). Véase la figura 8.2.

**Causalidad**

Figure 8.2: Causalidad

8.0.3 Relación espuria

Se da cuando dos variables parecen estar relacionadas, pero esta relación es causada por una tercera variable que afecta a ambas. La relación entre las dos variables no es directa sino que es mediada por esta tercera variable.

Ejemplo.

El tamaño del pie y la habilidad para leer en niños. Aunque pueden parecer relacionados, ambos están influenciados por la edad del niño, que es la verdadera causa subyacente de la relación. Véase la figura 8.3.

**Relación espuria**

Figure 8.3: Relación espuria

8.0.4 Causalidad directa

Ocurre cuando una variable directamente afecta a otra sin la intervención de otras variables. En el diagrama de SEM, esto se representa con una flecha que va directamente de la variable causa a la variable efecto.

Ejemplo.

El tenre un empleo (variable independiente) incrementa los ingresos (variable dependiente). Véase la figura 8.4.

**Causalidad directa**

Figure 8.4: Causalidad directa

8.0.5 Causalidad indirecta

Se refiere a una situación en la que una variable afecta a otra a través de una o más variables intermedias (mediadoras). En un diagrama SEM, esto se muestra como una cadena de flechas que pasan por una o más variables mediadoras antes de llegar a la variable objetivo.

Ejemplo.

La educación afecta los ingresos a través del empleo. La educación (variable independiente) aumenta la probabilidad de obtener un empleo (variable mediadora), lo cual a su vez incrementa los ingresos (variable dependiente). Véase la figura 8.5.

**Causalidad indirecta**

Figure 8.5: Causalidad indirecta

8.0.6 Causalidad recíproca

Se presenta cuando dos variables se afectan mutuamente. Cada variable es a la vez causa y efecto de la otra. En un diagrama SEM, esto se representa con flechas bidireccionales entre las dos variables.

Ejemplo.

Estrés y problemas de salud. El estrés puede causar problemas de salud, y a su vez, los problemas de salud pueden aumentar el nivel de estrés. Esta relación es bidireccional. Véase la figura 8.6.

**Causalidad recíproca**

Figure 8.6: Causalidad recíproca

8.0.7 Diagramas estructurales

Como ejemplo, véase la figura 8.7.

**Ejemplo de un diagrama estructural**

Figure 8.7: Ejemplo de un diagrama estructural

Observaciones.

  1. Los efectos directos se indican con flechas rechas.

  2. El final de la flecha es la variable dependiente.

  3. Las estimaciones delos parámetros siempre aparecen sobre la flecha correspondiente.

  4. Cualquier variable que sea influenciada por otra variable del modelo debe tener un término de error.

  5. Algunos programas también suelen mostrar:

    • Junto a cada variable, su varianza.

    • En el caso de las variables dependientes, la proporción de varianza explicada correspondiente.

9 Componentes de un SEM

9.0.1 Tipos

  1. Son dos: Modelo de medida y modelo estructural. Más adelante, se explica cada uno de ellos.

  2. Al sustituir en el modelo de medida las relaciones de covarianza por las relaciones causales de la parte estructural, se obtiene el modelo estructural completo, también denominado modelo de regresión estructural.

9.0.2 Modelo de medida

  1. Compuesto por las relaciones entre las variables indicadoras del modelo y sus constructos latentes.

  2. Así como por las relaciones de covarianza entre las variables latentes.

  3. Cada constructo latente y sus indicadores forman una parte del modelo de medida.

  4. También conocido como instrumento de medida y es el modelo propuesto para “medir” las variables latentes.

  5. Este modelo corresponde a un análisis factorial confirmatorio,en el que cada variable latente se asocia con un grupo de variables observadas, y además se permite que las variables latentes estén correlacionadas entre sí.

  6. Véase la figura 9.1.

**Modelo de medida**

Figure 9.1: Modelo de medida

9.0.3 Modelo estructural

  1. Se refiere a las interrelaciones causales propuestas entre las variables latentes del modelo.

  2. Es la parte del modelo que emplea el análisis de caminos (path analysis), pero con variables alatentes.

  3. Es similar a un análisis de regresión.

  4. Véase la figura 9.2.

**Modelo estructural**

Figure 9.2: Modelo estructural

9.0.4 Modelo estructural completo

Véase la figura 9.3.

**Modelo estructural completo**

Figure 9.3: Modelo estructural completo

10 Otros tipos de modelos

10.0.1 Modelo factorial exploratorio vs confirmatorio

  1. El modelo de variables latentes (LVM) crea las variables latentes (LVs) empleadas en el modelo estructural.

  2. Cuando un LVM se examina sin un modelo estructural, se conoce ocasionalmente como análisis factorial confirmatorio (CFA).

  3. Si no se tuviera una estructura hipotética para el modelo de variables latentes, se trataría de un análisis factorial exploratorio (EFA).

  4. Véase la figura 10.1.

**Modelo factorial exploratorio vs confirmatorio**

Figure 10.1: Modelo factorial exploratorio vs confirmatorio

10.0.2 Modelo formativo vs reflectivo

  1. Existen dos tipos de variables latentes: reflectivas y formativas.

  2. Se considera que las variables latentes reflectivas causan la covariación de otras variables.

  3. Las variables latentes formativas son el resultado de la covariación de otras variables (similar a un modelo de regresión).

  4. Véase la figura 10.2.

**Modelo formativo vs reflectivo**

Figure 10.2: Modelo formativo vs reflectivo

10.0.3 Modelos de segundo orden

Véase la figura 10.3.

**Modelos de segundo orden**

Figure 10.3: Modelos de segundo orden

11 Procedimiento para ejecutar un SEM

11.0.1 Etapa 1: Validación del modelo de medida

  1. Implica realizar un Análisis factorial Confirmatorio (AFC), proponiendo los indicadores de cada variable latente y evaluando en forma conjunta la bondad de ajuste de los instrumentos de medida empleados para cada factor.

  2. Significa reemplazar los efectos directos e indirectos del componente estructural propuestos según la teoría por relaciones de covarianza entre las variables latentes.

  3. Si el ajuste es rechazado se aplican herramientas de reespecificación.

11.0.2 Etapa 2: Ajuste del modelo completo de ecuaciones estructurales

  1. Es el ajuste del SEM incorporando las modificaciones de la etapa anterior.

  2. Incluye la comparación con otros modelos alternativos que difieran en la parte estructural, si los hubiera, utilizando para esto contrastes de comparación de modelos.

12 Pasos en cada una de las etapas

Son los siguientes (cada uno se explicará más adelante):

  1. Especificación.

  2. Identificación.

  3. Evaluación de la calidad de la base de datos.

  4. Estimación de parámetros.

  5. Evaluación de la bondad de ajuste.

  6. Re-especificación del modelo.

Véase la figura 12.1.

**Pasos en cada una de las etapas**

Figure 12.1: Pasos en cada una de las etapas

13 Especificación

  1. El modelo se define con base en los conocimientos teóricos y antecedentes empíricos del tema estudiado.

  2. Se deben incluir únicamente las variables esenciales que cuenten con un fuerte respaldo teórico y empírico.

  3. Es crucial determinar las relaciones entre variables latentes e indicadoras, asumiendo que cualquier relación no especificada no existe.

  4. Es recomendable realizar un análisis factorial exploratorio (AFE) previo para validar o revalidar las escalas utilizadas en la medición de cada variable latente.

  5. Según la regla de Kenny (1979), el número de factores por factor debe ser: mínimo 2, 3 es bueno, 4 es óptimo, y 5 o más es excesivo, pero no se deben exceder los 20 factores para todo el SEM.

  6. En esta etapa se determina qué parámetros serán estimados y cuáles se mantendrán constantes.

  7. Además, se asume la forma de la distribución conjunta, usualmente una normalidad multivariada.

  8. Lo más común es diseñar el modelo utilizando un diagrama estructural.

  9. A partir de este gráfico, el software genera las ecuaciones del modelo automáticamente.

  10. La interfaz gráfica también permite añadir directamente en el diagrama las restricciones que se imponen habitualmente sobre los parámetros para los siguientes pasos del análisis.

14 Identificación

14.0.1 Identificación (definición)

Un modelo está identificado cuando todos y cada uno de sus parámetros pueden ser estimados de manera única a partir de la matriz de varianzas y covarianzas muestrales.

14.0.2 Identificación (condiciones)

Se deben cumplir las siguientes condiciones necesarias para la identificación:

Condición 1.

Si tenemos \(K\) variables observables, entonces, la cantidad de datos \(p\) (es decir, la cantidad de varianzas y covarianzas muestrales) debe ser suficiente para estimar el número de parámetros (\(q\)) del modelo. Esta es la regla clásica de conteo según la cual los grados de libertad deben ser mayores o iguales a cero: \[\text{Grados de libertad} \;=\; p - q \;=\; \frac{K(K + 1)}{2} - q \; \geq \; 0\]

Condición 2.

Debe definirse la escala de los errores (véase la figura 14.1):

  1. Los coeficientes de sus efectos directos sobre las indicadoras y las latentes endógenas se fijan en 1.

Condición 3.

También debe definierse la escala de los factores latentes. Las opciones habituales son fijar en 1 (véase la figura 14.1):

  1. La carga factorial asociada a una de las variables observadas (de referencia) de cada latente o

  2. La varianza de las variables latentes exógenas.

**Identificación (condiciones 2 y 3)**

Figure 14.1: Identificación (condiciones 2 y 3)

14.0.3 Identificación (observaciones)

  1. Que se haya identificado completamente el modelo de ecuaciones estructurales (SEM) no asegura que el modelo de medida también lo esté.

  2. Para los modelos de medida basados en análisis factorial confirmatorio (AFC) convencionales, donde cada indicador se asocia únicamente a un factor y los errores de medición no están correlacionados, es necesario cumplir con las siguientes reglas que se describen en la sección siguiente:

    • Regla de los tres indicadores.

    • Regla de los dos indicadores.

14.0.4 Identificación (Regla de los tres indicadores)

Si el modelo tiene una sola variable latente, debe incluir al menos tres indicadores (véase la figura 14.2).

**Identificación (regla de los tres indicadores)**

Figure 14.2: Identificación (regla de los tres indicadores)

14.0.5 Identificación (Regla de los dos indicadores)

Si el modelo incluye dos o más variables latentes, cada una de ellas debe tener al menos dos indicadores (véase la figura 14.3).

**Identificación (regla de los dos indicadores)**

Figure 14.3: Identificación (regla de los dos indicadores)

15 Evaluación de la calidad de la base de datos

En las siguientes secciones se van a proponer recomendaciones con respecto a los siguientes puntos:

  1. Tamaño de la muestra.

  2. Multicolinealidad.

  3. Valores extremos univariados y multivariados.

4.Normalidad multivariada.

15.0.1 Tamaño de la muestra

Se recomienda tener:

  1. Al menos 200 observaciones.

  2. Al menos 10 observaciones por cada variable observada.

15.0.2 Multicolinealidad

  1. Una colinealidad bivariada extrema (\(r > 0.85\)) y multivariada puede indicar la presencia de variables redundantes y que la matriz de correlación no sea definida positiva.

  2. Es importante examinar los coeficientes de correlación, así como el determinante y los autovalores de la matriz de correlación.

15.0.3 Valores extremos univariados y multivariados

  1. Se deben eliminar observaciones cuyos valores se desvíen más de 3 desviaciones estándar de la media.

  2. En el caso de valores extremos multivariados, se deben calcular las distancias de Mahalanobis y descartar las observaciones con distancias significativas al 1%.

15.0.4 Normalidad multivariada

  1. Se deben examinar los coeficientes de asimetría y curtosis para evaluar la normalidad univariada.

  2. Se consideran normales las variables cuyos coeficientes en valor absoluto sean menores a 3 y 10 respectivamente.

  3. Es importante aplicar pruebas de normalidad univariada (como la prueba conjunta de asimetría y curtosis) y algún test de normalidad multivariada (como el de Mardia). Lo más relevante es que se cumpla la curtosis multivariada.

15.0.5 Normalidad multivariada: comentario

  1. Si la distribución no es normal pero presenta mesocurtosis, las propiedades de los estimadores de máxima verosimilitud son equivalentes a las que se tienen bajo la hipótesis de normalidad.

  2. Sin embargo, si la curtosis difiere significativamente de la normal, estos estimadores son consistentes pero no eficientes asintóticamente.

  3. Lo anterior puede generar dificultades en las pruebas de significación individual de los parámetros y en la prueba de validez global del modelo.

16 Estimación de parámetros

16.0.1 Objetivos

  1. En los modelos de ecuaciones estructurales (SEM), el objetivo es ajustar las covarianzas entre las variables.

  2. En lugar de reducir la diferencia entre los valores pronosticados y los observados a nivel individual, se busca minimizar la discrepancia entre las covarianzas observadas en la muestra y las covarianzas previstas por el modelo estructural.

  3. Por esta razón, estos modelos también se conocen como modelos de estructura de covarianza (Covariance Structure Models).

16.0.2 Hipótesis fundamental

  1. La hipótesis principal sostiene que, si el modelo es preciso, la matriz de varianzas y covarianzas de la población puede ser representada de manera exacta mediante una combinación de los parámetros del modelo.

  2. Expresado en notación:

\[Ho:\; \Sigma \,=\, \Sigma(\theta)\]

  1. En la expresión anterior, \(\Sigma\) representa la matriz de varianzas y covarianzas de la población entre las variables observadas, y \(\Sigma(\theta)\) es la matriz de varianzas y covarianzas obtenida como una función de los parámetros contenidos en el vector \(\theta\).

17 Estimación: ejemplo

Consideremos el siguiente modelo de regresión:

\[ y \;=\; \beta x + \varepsilon\]

La matriz de varianzas y covarianzas entre \(X\) y \(Y\) es:

\[\Sigma \;= \; \begin{pmatrix} V(X)& Cov(X,Y)\\ Cov(X,Y) & V(Y) \end{pmatrix}\]

Aplicando propiedades de varianza y covarianza (y suponiendo que \(V(\varepsilon)=\sigma^2\)) se puede demostrar que:

\[Cov(X,Y) \;=\; \beta \,V(X), \qquad V(Y) \;=\; \beta^2\, V(X) \;+\; V(\varepsilon)\;=\; \beta^2\, V(X) \;+\; \sigma^2\]

Al reemplazar estas expresiones en la matriz de varianzas y covarianzas poblacional, se puede expresar en términos de los parámetros del modelo, obteniendo así la matriz implícita de varianzas y covarianzas:

\[\Sigma(\theta) \;= \; \begin{pmatrix} V(X) & \beta \,V(X)\\ \beta \,V(X) & \beta^2\, V(X) \;+\; \sigma^2 \end{pmatrix}, \qquad \theta=(\beta, \sigma^2)^T\]

La estimación de los parámetros se lleva a cabo buscando maximizar la precisión del modelo. Para lograr esto, se intenta reducir al mínimo las diferencias entre las varianzas y covarianzas observadas, \(S\), y las que el modelo reproduce, \(S\big(\widehat{\theta}\big)\)

18 Estimación: métodos

18.0.1 Algunos métodos de estimación

Algunos de los métodos que explicaremos en secciones siguientes, son:

  1. Máxima verosimilitud (ML).

  2. Mínimos cuadrados no ponderados (ULS).

  3. Mínimos cuadrados generalizados (GLS).

  4. Mínimos cuadrados ponderados (WLS) o de distribución asintóticamente libre (ADF).

18.0.2 Máxima verosimilitud (ML)

  1. Es la mejor opción (por su insesgadez y eficiencia) bajo la suposición de normalidad multivariada y es bastante robusta ante pequeñas desviaciones.

  2. Si la falta de normalidad es severa, se recomiendan errores estándar robustos (Quasi-Maximum Likelihood, Huber-White) o bootstrap.

18.0.3 Mínimos cuadrados no ponderados (ULS).

  1. Similar a OLS en regresión (Ordinary Least Squares o Mínimos Cuadrados Ordinarios), pero asume normalidad.

  2. No necesita una matriz de covarianzas definida positiva.

  3. Produce estimadores insesgados, aunque no tan eficientes como los de ML.

  4. Requiere que todas las variables estén en la misma escala.

  5. Se utiliza para obtener una estimación preliminar (valores iniciales para ML).

18.0.4 Mínimos cuadrados generalizados (GLS).

  1. Funciona también bajo la suposición de normalidad.

  2. No requiere que las variables tengan la misma escala.

  3. Consume menos tiempo de cómputo que ML y ULS.

18.0.5 Mínimos cuadrados ponderados (WLS) o de distribución asintóticamente libre (ADF).

  1. No requiere normalidad, pero sí un gran número de observaciones (mínimo entre 200 y 500).

  2. Es la mejor opción para matrices policóricas, tetracóricas o poliseriales.

19 Estimación: función de ajuste

  1. Máxima verosimilitud (ML).

\[F_{ML} \; = \; \log|\Sigma(\theta)| \;+\; tr\left(S\,\Sigma^{-1}(\theta)\right) \;-\; \log|S| -(p+q)\]

  1. Mínimos cuadrados no ponderados (ULS).

\[F_{ULS} \; = \; \frac{1}{2}\, tr\left([S\,-\,\Sigma(\theta)]^2\right)\]

  1. Mínimos cuadrados generalizados (GLS).

\[F_{GLS} \; = \; \frac{1}{2}\, tr\left(\left\{[S\,-\,\Sigma(\theta)]W^{-1}\right\}^2\right)\]

  1. Mínimos cuadrados ponderados (WLS) o de distribución asintóticamente libre (ADF).

\[F_{WLS} \; = \; \frac{1}{2}\, tr\left(\left\{[S\,-\,\Sigma(\theta)]V^{-1}\right\}^2\right)\] Véase la figura 19.1.

**Funciones de bondad de ajuste**

Figure 19.1: Funciones de bondad de ajuste

20 Estimación con variables observadas ordinales o categóricas

20.0.1 Observaciones generales

  1. Si los indicadores de cada variable latente son independientes entre sí, no se debe utilizar el método de Máxima Verosimilitud (ML).

  2. En su lugar, es recomendable emplear algún método que tenga en cuenta la falta de normalidad.

20.0.2 Indicadores en escala Likert o similar

  1. Si los indicadores son un conjunto homogéneo de variables en escala Likert u otra escala parecida, se deben agrupar los indicadores (mediante la suma o el promedio de los puntajes) para intentar lograr la normalidad y así poder utilizar ML.

  2. Este enfoque requiere unidimensionalidad, es decir, que los indicadores agrupados midan un solo constructo.

  3. Para verificar esto, primero se debe realizar un Análisis Factorial Exploratorio (AFE).

  4. La agrupación de indicadores puede hacerse de manera aleatoria o por contenido similar.

20.0.3 Metodología de Muthén (1984) para variables continuas/categóricas (CVM)

  1. En este método, las variables observadas pueden ser de cualquier tipo (dicotómicas, ordinales, continuas).

  2. Se utiliza una matriz de correlaciones policóricas y luego se estima con WLS (Weighted Least Squares) o ADF (Asymptotically Distribution Free).

  3. Este método requiere una gran cantidad de datos.

  4. Si se presentan problemas debido al tamaño pequeño de la muestra o falta de convergencia, se puede combinar con métodos de estimación robusta.

21 Evaluación del ajuste

21.0.1 Observaciones

  1. Se examina la significancia de los coeficientes, similar a un modelo de regresión, y se revisan las medidas de bondad de ajuste.

  2. Ninguna medida por sí sola proporciona toda la información necesaria para evaluar el modelo, por lo que generalmente se utiliza un conjunto de medidas que se informa simultáneamente.

21.0.2 Tipos de medidas de ajuste

Existen tres tipos de estas medidas:

  1. Medidas absolutas: Evalúan los residuos.

  2. Medidas de ajuste comparativo o incremental: Comparan el ajuste con respecto a otro modelo con un ajuste inferior.

  3. Medidas de ajuste de parsimonia: Valoran el ajuste en relación con la cantidad de parámetros utilizados.

21.0.3 Indices de ajuste

  1. Véase la figura 21.1.
**Tipos de medidas de ajuste**

Figure 21.1: Tipos de medidas de ajuste

  1. El estadístico \(\chi^2\) debe resultar no significativo.

  2. Si resulta significativo, entonces, el modelo teórico propuesto difiere de manera significativa de lo que se observa en la matriz de varianzas y covarianzas de los datos.

  3. La hipótesis nula, en este caso, es que los errores son nulos.

22 Re-especificación del modelo

  1. Cuando el ajuste no es satisfactorio, se busca redefinir el modelo.

  2. Para ello, se examinan los índices de modificación de los coeficientes que inicialmente se asumieron como cero (efectos no incluidos en el modelo).

  3. Estos índices indican la reducción en el estadístico \(\chi^2\) que se produciría si el coeficiente fuera estimado.

  4. Un valor superior a 3.84 (valor crítico de una \(\chi^2\) con 1 grado de libertad y \(\alpha=0.05\)) sugiere que la inclusión del efecto adicional correspondiente resultaría en una reducción estadísticamente significativa.

  5. Es decir, un índice de modificación mayor sugiere que la inclusión del efecto adicional correspondiente mejoraría significativamente el ajuste del modelo a los datos

23 Ejercicios

Pendiente

Bibliografía

Consultar el documento RPubs :: Análisis multivariado (bibliografía).

 

 
If you found any ERRORS or have SUGGESTIONS, please report them to my email. Thanks.  
LS0tDQp0aXRsZTogIk1PREVMT1MgREUgRUNVQUNJT05FUyBFU1RSVUNUVVJBTEVTIChTRU0pIg0Kc3VidGl0bGU6IDxoMT4qKlRlb3LDrWEqKjwvaDE+DQoNCmF1dGhvcjogDQogIC0gbmFtZSAgICAgICAgICA6ICJEci4gcmVyLiBuYXQuIEh1bWJlcnRvIExMaW7DoXMgU29sYW5vIg0KICAgIGFmZmlsaWF0aW9uICAgOiAiRGVwYXJ0YW1lbnRvIGRlIE1hdGVtw6F0aWNhcyB5IEVzdGFkw61zdGljYSwgVW5pdmVyc2lkYWQgZGVsIE5vcnRlIChCYXJyYW5xdWlsbGEsIENvbG9tYmlhKSINCiAgICAgI2NvcnJlc3BvbmRpbmcgOiB5ZXMgICAgIyBEZWZpbmUgb25seSBvbmUgY29ycmVzcG9uZGluZyBhdXRob3INCiAgICAgI2FkZHJlc3MgICAgICAgOiAiRGVwYXJ0YW1lbnRvIGRlIE1hdGVtw6F0aWNhcyB5IEVzdGFkw61zdGljYSINCiAgICBlbWFpbCAgICAgICAgIDogfA0KICAgICAgaGxsaW5hc0B1bmlub3J0ZS5lZHUuY28NCiAgICAgIA0KICAgICAgW0Jpb2dyYXBoaWNhbCBza2V0Y2hdKGh0dHBzOi8vcnB1YnMuY29tL2hsbGluYXMvQmlvX1NrZXRjaCkNCiAgICAgIA0KICAgICAgYHIgZm9ybWF0KFN5cy50aW1lKCksICIlZC8lbS8leSIpYCANCiAgICAgIA0KICAgICAjcm9sZTogICAgICAgICAjIENvbnRyaWJ1dG9yc2hpcCByb2xlcyAoZS5nLiwgQ1JlZGlULCBodHRwczovL2Nhc3JhaS5vcmcvY3JlZGl0LykNCiAgIyAgICAtIENvbmNlcHR1YWxpemF0aW9uDQogICMgICAgLSBXcml0aW5nIC0gT3JpZ2luYWwgRHJhZnQgUHJlcGFyYXRpb24NCiAgIyAgICAtIFdyaXRpbmcgLSBSZXZpZXcgJiBFZGl0aW5nDQogIyAtIG5hbWUgICAgICAgICAgOiAiQXV0b3IgbnVtZXJvIDIiDQogIyAgIGFmZmlsaWF0aW9uICAgOiAiMSwyIg0KICMgICByb2xlOg0KICMgICAgIC0gV3JpdGluZyAtIFJldmlldyAmIEVkaXRpbmcNCiAgICAgI2FmZmlsaWF0aW9uOg0KICAjLSBpZCAgICAgICAgICAgIDogIjEiDQogICMgIGluc3RpdHV0aW9uICAgOiAiVW5pdmVyc2lkYWQgZGVsIE5vcnRlIChCYXJyYW5xdWlsbGEsIENvbG9tYmlhKSINCiAgIyFbXShobGxpbmFzLmpwZyl7d2lkdGg9MWlufSANCiAgDQojZGF0ZTogJ2ByIGZvcm1hdChTeXMudGltZSgpLCAiJWQvJW0vJXkiKWAnICAjIHZlciBodHRwczovL2Jvb2tkb3duLm9yZy95aWh1aS9ybWFya2Rvd24tY29va2Jvb2svdXBkYXRlLWRhdGUuaHRtbA0Kb3V0cHV0OiANCiAgICBib29rZG93bjo6aHRtbF9kb2N1bWVudDI6IA0KICAgICAgICAgICNPSk8gU2FsZW4gY2FwaXR1bG9zLCBzZWNjaW9uZXMgeSBUZW9yZW1hcw0KICAgICNib29rZG93bjo6aHRtbF9ib29rOg0KICAgICAgICAgICNPSk8gRVJST1IgU2FsZW4gdGVvcmVtYXMsIHBlcm8gbm8gc2FsZW4gbG9zIGNhcGl0dWxvcyANCiAgICAjaHRtbF9kb2N1bWVudDoNCiAgICAgICAgICB0b2M6IHRydWUgICAgICAjIHRhYmxlIG9mIGNvbnRlbnQgdHJ1ZQ0KICAgICAgICAgIHRvY19kZXB0aDogNCAgICMgdXB0byB0aHJlZSBkZXB0aHMgb2YgaGVhZGluZ3MgKHNwZWNpZmllZCBieSAjLCAjIyBhbmQgIyMjKQ0KICAgICAgICAgIHRvY19mbG9hdDogdHJ1ZSAjQ29uIHRydWUsIHRvYyBzYWxlIGFsIG1hcmdlbiBpenF1aWVyZG8gZGUgbGEgcMOhZ2luYTsgZGUgbG8gY29udHJhcmlvLCBhcnJpYmENCiAgICAgICAgICBjb2xsYXBzZWQ6IGZhbHNlDQogICAgICAgICAgc21vb3RoX3Njcm9sbDogZmFsc2UNCiAgICAgICAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUgICAjIGlmIHlvdSB3YW50IG51bWJlciBzZWN0aW9ucyBhdCBlYWNoIHRhYmxlIGhlYWRlcg0KICAgICAgICAgICN0aGVtZTogc2FuZHN0b25lDQogICAgICAgICAgI3RoZW1lOiB1bml0ZWQgICMgbWFueSBvcHRpb25zIGZvciB0aGVtZSwgdGhpcyBvbmUgaXMgbXkgZmF2b3JpdGUuDQogICAgICAgICAgI3RoZW1lOiBmbGF0bHkgICMgDQogICAgICAgICAgI3RoZW1lOiBjZXJ1bGVhbiAgIyANCiAgICAgICAgICAjaGlnaGxpZ2h0OiB0YW5nbyAgIyBzcGVjaWZpZXMgdGhlIHN5bnRheCBoaWdobGlnaHRpbmcgc3R5bGUNCiAgICAgICAgICAjY3NzOiBTY3JpcHRzIGFjY2Vzb3Jpb3MvZXN0aWxvYm90b24uY3NzDQogICAgICAgICAgI2NzczogbXkuY3NzICAgIyB5b3UgY2FuIGFkZCB5b3VyIGN1c3RvbSBjc3MsIHNob3VsZCBiZSBpbiBzYW1lIGZvbGRlcg0KICAgICAgICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICAgICAgICAjaGlnaGxpZ2h0OiB0YW5nbyAgIyBjYW1iaWFyIGNvbG9yIGRlIGxpYnJhcnkgZW4gYXp1bA0KICAgICMgYm9va2Rvd246OmdpdGJvb2s6DQogICAgIyAgICAgIGluY2x1ZGVzOg0KICAgICMgICAgICAgIGluX2hlYWRlcjogaGVhZGVyLmh0bWwNCiAgICAjIGJvb2tkb3duOjpwZGZfYm9vazoNCiAgICAjICAgICAgIGtlZXBfdGV4OiB5ZXMNCiAgICAjIGJvb2tkb3duOjpodG1sX2Jvb2s6DQogICAgIyAgICAgICBjc3M6IHRvYy5jc3MNCiAgICAjIGJvb2tkb3duOjpodG1sX2Jvb2s6DQogICAgIyAgICAgICAgIGluY2x1ZGVzOg0KICAgICMgICAgICAgICAgIGluX2hlYWRlcjogc3R5bGUuY3NzDQogICAgI2Jvb2tkb3duOjpodG1sX2RvY3VtZW50MjogZGVmYXVsdA0KICAgICMgYm9va2Rvd246OnBkZl9kb2N1bWVudDI6DQogICAgIyAgICAgIGtlZXBfdGV4OiB0cnVlDQogICAgI2JpYmxpb2dyYXBoeTogcmVmZXJlbmNlcy5iaWINCiAgICBtYXRoamF4OiAiaHR0cDovL2V4YW1wbGUuY29tL21hdGhqYXgvTWF0aEpheC5qcz9jb25maWc9VGVYLUFNUy1NTUxfSFRNTG9yTU1MIg0KaGVhZGVyLWluY2x1ZGVzOg0KICAgIFx1c2VwYWNrYWdlW3gxMW5hbWVzXXt4Y29sb3J9IA0KICAgIA0KY3NsOiBzY2llbmNlLmNzbA0KI09qbzogU2UgdXRpbGl6YSBsZW5ndWFqZSBZQU1MDQoNCmFic3RyYWN0OiB8DQogKipFbiBbUnB1YnM6OiB0b2NdKGh0dHBzOi8vcnB1YnMuY29tL2hsbGluYXMvdG9jKSBzZSBwdWVkZW4gdmVyIG90cm9zIGRvY3VtZW50b3MgZGUgcG9zaWJsZSBpbnRlcsOpcy4qKg0KICANCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgZmlnLmFsaWduPSJjZW50ZXIiLCAgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSMsDQogICAgICAgICAgICAgICAgICAgICAgI3N0eWxlID0gImNvbG9yOmRhcmtibHVlIg0KICAgICAgICAgICAgICAgICAgICAjIGNsYXNzLnNvdXJjZT0iYmctZGFuZ2VyIiwgY2xhc3Mub3V0cHV0PSJiZy13YXJuaW5nIiAgICNDb2xvcmVzIGRlbnRybyBkZWwgY2h1bmsNCiAgICAgICAgICAgICAgICAgICAgICkNCmxpYnJhcnkocmdsKQ0Ka25pdHI6OmtuaXRfaG9va3Mkc2V0KHdlYmdsID0gaG9va193ZWJnbCkNCmBgYA0KDQoNCg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgZXZhbD1GQUxTRX0NCmh0dHBzOi8vYm9va2Rvd24ub3JnL3lpaHVpL3JtYXJrZG93bi9sYW5ndWFnZS1lbmdpbmVzLmh0bWwNCg0KaHR0cHM6Ly9ib29rZG93bi5vcmcveWlodWkvYm9va2Rvd24vbWFya2Rvd24tc3ludGF4Lmh0bWwNCg0KaHR0cHM6Ly9ib29rZG93bi5vcmcveWlodWkvYm9va2Rvd24vYS1zaW5nbGUtZG9jdW1lbnQuaHRtbA0KDQpodHRwczovL2Jvb2tkb3duLm9yZy95aWh1aS9ib29rZG93bi9tYXJrZG93bi1leHRlbnNpb25zLWJ5LWJvb2tkb3duLmh0bWwNCg0KaHR0cHM6Ly9ib29rZG93bi5vcmcveWlodWkvcm1hcmtkb3duL2Jvb2tkb3duLW1hcmtkb3duLmh0bWwgICMgVGVvcmVtcyBhbmQgcHJvb2ZzDQoNCmh0dHBzOi8vYm9va2Rvd24ub3JnL3lpaHVpL2Jvb2tkb3duL21hcmtkb3duLWV4dGVuc2lvbnMtYnktYm9va2Rvd24uaHRtbCN0aGVvcmVtcw0KDQpodHRwczovL2Jvb2tkb3duLm9yZy95aWh1aS9ib29rZG93bi9odG1sLmh0bWwNCg0KaHR0cHM6Ly93d3cuZGF0YS10by12aXouY29tLw0KICANCltScHVic10obGluaykNCiAgDQooXCNlcTplYy0pLCAgRWN1YWNpb24gXEByZWYoZXE6ZWMtKSwgRmlndXJhIFxAcmVmKGZpZzpGaWctKSwgVGFibGUgXEByZWYodGFiOm10Y2FycyksIFRoZW9yZW0gXEByZWYodGhtOmJvcmluZykNCg0KDQojIFRpdHVsbyB7I1RpdHVsb1NlY2Npb259ICAgXEByZWYoVGl0dWxvU2VjY2lvbikNCiAgDQojIEZvciBIVE1MLCB3ZSBjYW4gc2V0IGNvbG9yIHdpdGggQ1NTLCBlLmcuLCA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPnRleHQ8L3NwYW4+DQogIA0KIyBodHRwczovL3JhZGlhbnQtcnN0YXRzLmdpdGh1Yi5pby9kb2NzL21vZGVsL2xvZ2lzdGljLmh0bWwgU2hpbm55IExvZ2l0ICANCiAgDQpgYGANCg0KDQpgYGB7ciwgZXZhbD1GQUxTRSwgZWNobz1GQUxTRX0NCiNMYSBmb3RvIHRhbWHDsW8gY8OpZHVsYQ0KDQpodG1sdG9vbHM6OmltZyhzcmMgPSBrbml0cjo6aW1hZ2VfdXJpKGZpbGUucGF0aChSLmhvbWUoImRvYyIpLCAiaHRtbCIsICJsb2dvLmpwZyIpKSwgDQogICAgICAgICAgICAgICBhbHQgPSAnaGxsaW5hcycsIA0KICAgICAgICAgICAgICAgc3R5bGUgPSAncG9zaXRpb246YWJzb2x1dGU7IHRvcDowOyByaWdodDowOyBwYWRkaW5nOjEwcHg7JyAjLA0KICAgICAgICAgICAgICAgd2lkdGggPSAiMjAwcHgiKSAgIyBBcXXDrSBlc3BlY2lmaWNhcyBlbCBhbmNobyBkZXNlYWRvIGVuIHDDrXhlbGVzIG8gcG9yY2VudGFqZQ0KYGBgDQoNCg0KDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCB9DQojIExhIGZvdG8gZ3JhbmRlDQoNCmh0bWx0b29sczo6aW1nKHNyYyA9IGtuaXRyOjppbWFnZV91cmkoImhsbGluYXMyMDIzLmpwZyIpLCANCiAgICAgICAgICAgICAgIGFsdCA9ICdobGxpbmFzMjAyMycsIA0KICAgICAgICAgICAgICAgc3R5bGUgPSAncG9zaXRpb246YWJzb2x1dGU7IHRvcDowOyByaWdodDowOyBwYWRkaW5nOjFweDsnLA0KICAgICAgICAgICAgICAgd2lkdGg9IjE1JSIpDQpgYGANCg0KDQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAgLS0+DQoNCmBgYHtjc3MsIGVjaG89RkFMU0V9DQouY29sdW1ucyB7ZGlzcGxheTogZmxleDt9DQpoMSB7Y29sb3I6IGRhcmtibHVlO30NCmgzIHtjb2xvcjogZGFya2dyZWVuO30NCmg0IHtjb2xvcjogZ3JlZW47fQ0KYGBgDQoNCg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlIC0tPg0KPCEtLSBDYXDDrXR1bG8gIC0tPg0KDQoNCmBgYHtjc3MsIGVjaG89RkFMU0UsIGV2YWw9RkFMU0V9DQojaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDEwMzA0NzcvY2hhbmdpbmctY2h1bmstYmFja2dyb3VuZC1jb2xvci1pbi1ybWFya2Rvd24NCg0KLmJhZENvZGUgew0KYmFja2dyb3VuZC1jb2xvcjogcmVkOw0KfQ0KYGBgDQoNCg0KDQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAgLS0+DQoNCg0KDQoNCg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyDCv1F1w6kgc29uIGxvcyBTRU0/DQoNCjEuIExvcyBTRU0gcmVwcmVzZW50YW4gdW5hIGZhbWlsaWEgZGUgbW9kZWxvcyBlc3RhZMOtc3RpY29zIG11bHRpdmFyaWFkb3MgcXVlIHBvc2liaWxpdGFuIGxhIGVzdGltYWNpw7NuIGRlIGxvcyBlZmVjdG9zIHkgcmVsYWNpb25lcyBlbnRyZSBtw7psdGlwbGVzIHZhcmlhYmxlcy4NCg0KMi4gU3VyZ2llcm9uIGNvbW8gcmVzcHVlc3RhIGEgbGEgbmVjZXNpZGFkIGRlIGJyaW5kYXIgdW5hIG1heW9yIGZsZXhpYmlsaWRhZCBhIGxvcyBtb2RlbG9zIGRlIHJlZ3Jlc2nDs24uIA0KDQozLiBTb24gbWVub3MgcmVzdHJpY3Rpdm9zIGFsIHBlcm1pdGlyIGxhIGluY2x1c2nDs24gZGUgZXJyb3JlcyBkZSBtZWRpY2nDs24gdGFudG8gZW4gbGFzIHZhcmlhYmxlcyBkZXBlbmRpZW50ZXMgY29tbyBlbiBsYXMgaW5kZXBlbmRpZW50ZXMuDQoNCjQuIEVzdG9zIG1vZGVsb3MgY29tYmluYW4gZWxlbWVudG9zIGRlIGxhIHJlZ3Jlc2nDs24gY29uIHTDqWNuaWNhcyBkZSBhbsOhbGlzaXMgZmFjdG9yaWFsLiANCg0KNS4gRGUgZXN0YSBtYW5lcmEsIHBvc2liaWxpdGFuIGxhIHJlcHJlc2VudGFjacOzbiBkZSBlZmVjdG9zIGRpcmVjdG9zIGUgaW5kaXJlY3RvcyBlbnRyZSBsYXMgdmFyaWFibGVzLiANCg0KNC4gRGVzZGUgZWwgcHVudG8gZGUgdmlzdGEgbWF0ZW3DoXRpY28sIHNvbiBtb2RlbG9zICBjb24gdW4gYWx0byBncmFkbyBkZSBjb21wbGVqaWRhZCBwYXJhIGxhIGVzdGltYWNpw7NuIGRlIGxvcyBwYXLDoW1ldHJvcyBjb3JyZXNwb25kaWVudGVzLg0KDQo1LiBTRU0gbm8gZXMgc2ltcGxlbWVudGUgdW5hIHTDqWNuaWNhIGRlIGVzdGltYWNpw7NuIHBhcmEgdW4gbW9kZWxvIGVzcGVjw61maWNvLiANCg0KNi4gU0VNIHJlcHJlc2VudGEgdW5hIG1hbmVyYSBkaXN0aW50YSBkZSBjb25jZWJpciwgZm9ybXVsYXIgeSBlc3RpbWFyIHVuIG1vZGVsby4NCg0KPCEtLSAlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlIC0tPg0KPCEtLSBTZXBhcmFkb3IgLS0+DQoNCiMgwr9QYXJhIHF1w6kgc2lydmVuIGxvcyBTRU0/DQoNCjEuIEVsYWJvcmFyIG1vZGVsb3MgdGXDs3JpY29zIHF1ZSBmYWNpbGl0ZW4gdW5hIGNvbXByZW5zacOzbiBtw6FzIHByb2Z1bmRhIGRlIGxhIHJlYWxpZGFkIHkgZGUgbG9zIGZlbsOzbWVub3MgY29tcGxlam9zIHF1ZSBzZSBvYnNlcnZhbi4NCg0KMi4gRXZhbHVhciBlbiBxdcOpIG1lZGlkYSBsb3MgZGF0b3MgcmVzcGFsZGFuIHVuIG1vZGVsbyB0ZcOzcmljbyBxdWUgZGVzY3JpYmUgbcO6bHRpcGxlcyByZWxhY2lvbmVzIGRlIGRlcGVuZGVuY2lhIGVudHJlIGxhcyB2YXJpYWJsZXMuDQoNCjMuIEFwbGljYXIgbcOpdG9kb3MgZXN0YWTDrXN0aWNvcyBwYXJhIGFuYWxpemFyIGxhcyByZWxhY2lvbmVzIGVudHJlIHVuIGNvbmp1bnRvIGRlIHZhcmlhYmxlcywgaW52ZXN0aWdhbmRvIGxvcyBwb3NpYmxlcyBlZmVjdG9zIG1lZGlhZG9yZXMgeSBlc3B1cmlvcyBkZSBjaWVydGFzIHZhcmlhYmxlcy4NCg0KNC4gRXhhbWluYXIgbG9zIGNvbnN0cnVjdG9zIGxhdGVudGVzLCBxdWUgc29uIHZhcmlhYmxlcyBxdWUgbm8gcHVlZGVuIHNlciBkaXJlY3RhbWVudGUgb2JzZXJ2YWRhcyBvIG1lZGlkYXMsIHNpbm8gcXVlIHNlIGluZmllcmVuIGEgcGFydGlyIGRlIGRpdmVyc29zIGluZGljYWRvcmVzIG9ic2VydmFibGVzLg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KDQojIEFudGVjZWRlbnRlcw0KDQoxLiBFbiAxOTM0LCBlbCBiaW9tZXRyaXN0YSBTZXdhbGwgV3JpZ2h0IGludHJvZHVqbyBlbCBjb25jZXB0byBkZSBhbsOhbGlzaXMgZGUgdHJheWVjdG9yaWEgKHBhdGggbW9kZWwpLCBhcGxpY8OhbmRvbG8gYWwgZXN0dWRpbyBkZSBsYXMgcmVsYWNpb25lcyBkZSB0YW1hw7FvIGVuIG1lZGljaW9uZXMgw7NzZWFzLg0KDQoyLiBQb3N0ZXJpb3JtZW50ZSwgc29jacOzbG9nb3MgY29tbyBCbGFsb2NrICgxOTY0LCAxOTcxKSwgQm91bmRvbiAoMTk2NSkgeSBEdW5jYW4gKDE5NjYpLCBlbnRyZSBvdHJvcywgcmVjb25vY2llcm9uIHN1IHV0aWxpZGFkIGNvbW8gaGVycmFtaWVudGEgcGFyYSBhbmFsaXphciBkYXRvcyBubyBleHBlcmltZW50YWxlcywgbG8gcXVlIHJlc3VsdMOzIGVuIHVuIHJlZGVzY3VicmltaWVudG8geSBzdSBkaWZ1c2nDs24gZW4gbGFzIGNpZW5jaWFzIHNvY2lhbGVzLg0KDQozLiBFbiBsYSBkw6ljYWRhIGRlIDE5NzAsIGVzdGFkw61zdGljb3MgY29tbyBKw7ZyZXNrb2cgKDE5NzMpLCBLZWVzbGluZyAoMTk3MikgeSBXaWxleSAoMTk3MykgZGVzYXJyb2xsYXJvbiBlbCBwcmltZXIgbW9kZWxvIGdlbmVyYWwgZGUgZWN1YWNpb25lcyBlc3RydWN0dXJhbGVzLCBjb25vY2lkbyBjb21vIExJU1JFTCAoTGluZWFyIFN0cnVjdHVyYWwgUmVsYXRpb25zKSBvIG1vZGVsbyBKS1csIHF1ZSBpbnRlZ3JhYmEgdmFyaWFibGVzIGxhdGVudGVzIHkgb2JzZXJ2YWRhcy4NCg0KNC4gUG9zdGVyaW9ybWVudGUsIErDtnJlc2tvZyByZWZpbsOzIExJU1JFTCB5IGRlc2Fycm9sbMOzIG3DqXRvZG9zIHBhcmEgdHJhYmFqYXIgY29uIGRpZmVyZW50ZXMgdGlwb3MgZGUgZGF0b3MsIGNvbW8gdHJhbnN2ZXJzYWxlcywgbG9uZ2l0dWRpbmFsZXMsIG11bHRpLWdydXBvIHkgbXVsdGluaXZlbC4NCg0KNS4gTG9zIHNlZ3VpZG9yZXMgZGUgSsO2cmVza29nIGhhbiBoZWNobyBpbXBvcnRhbnRlcyBhcG9ydGFjaW9uZXMgZW4gZGl2ZXJzb3MgYXNwZWN0b3M6DQogICAgDQogICAgLSBTw7ZyYm9tICgxOTc0KSBhbXBsw61hIGVsIG1vZGVsbyBtdWx0aS1ncnVwbyBjb24gbWVkaWFzIGVuIGxhcyB2YXJpYWJsZXMgbGF0ZW50ZXMuDQogICAgDQogICAgLSBNdXRow6luICgxOTc3KSBpbnRyb2R1Y2UgdMOpY25pY2FzIHBhcmEgaW5jbHVpciB2YXJpYWJsZXMgb2JzZXJ2YWRhcyBjYXRlZ8OzcmljYXMuDQogICAgDQogICAgLSBIw6RnZ2x1bmQgKDE5ODUpIGNvbnRyaWJ1eWUgY29uIGVsIGVuZm9xdWUgZGUgbcOtbmltb3MgY3VhZHJhZG9zIGVuIGRvcyBldGFwYXMgKHR3by1zdGFnZXMgbGVhc3Qtc3F1YXJlcykuDQogICAgDQogICAgLSBRdWlyb2dhICgxOTkyKSBsbGV2YSBhIGNhYm8gZXN0dWRpb3MgZGUgcm9idXN0ZXogdXRpbGl6YW5kbyBjb3JyZWxhY2lvbmVzIHBvbGljw7NyaWNhcyBwYXJhIGFib3JkYXIgZGVzdmlhY2lvbmVzIGRlbCBzdXB1ZXN0byBkZSBub3JtYWxpZGFkLg0KICAgIA0KICAgIC0gWWFuZy1XYWxsZW50aW4gKDE5OTcpIGRlc2Fycm9sbGEgbcOpdG9kb3MgcGFyYSBlc3RpbWFyIHJlbGFjaW9uZXMgbm8gbGluZWFsZXMuDQogICAgDQogICAgLSBMb3MgcHJvZ3Jlc29zIG3DoXMgcmVjaWVudGVzIGluY2x1eWVuIGV4dGVuc2lvbmVzIHBhcmEgZGF0b3MgcHJvdmVuaWVudGVzIGRlIG11ZXN0cmFzIGNvbXBsZWphcywgbW9kZWxvcyBsaW5lYWxlcyBnZW5lcmFsaXphZG9zIHkgYW7DoWxpc2lzIGRlIHNlcmllcyB0ZW1wb3JhbGVzLg0KICAgIA0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyDCv1NvZnR3YXJlcyBwYXJhIFNFTT8NCg0KMS4gKipMSVNSRUwqKiAoYWNyw7NuaW1vIGRlIExpbmVhciBTdHJ1Y3R1cmFsIFJlbGF0aW9ucyksIGRlc2Fycm9sbGFkbyBwb3IgSsO2cmVza29nIHkgU8O2cmJvbSBkZXNkZSBsYSBkw6ljYWRhIGRlIDE5NzAgaGFzdGEgMjAxNS4gRnVlIGVsIHByaW1lciBzb2Z0d2FyZSBwYXJhIFNFTS4gT3JpZ2luYWxtZW50ZSBiYXNhZG8gZW4gY29tYW5kb3MsIHN1cyB2ZXJzaW9uZXMgbcOhcyByZWNpZW50ZXMgaW5jbHV5ZW4gdW5hIGludGVyZmF6IGdyw6FmaWNhLiBFcyBkaXN0cmlidWlkbyBwb3IgU2NpZW50aWZpYyBTb2Z0d2FyZSBJbnRlcm5hdGlvbmFsIChTU0kpLg0KDQoyLiAqKkVRUyoqIChhY3LDs25pbW8gZGUgRXF1YXRpb25zKSBkZSBCZW50bGVyLCBkaXNwb25pYmxlIGRlc2RlIDE5ODUgaGFzdGEgMjAwNi4gRnVlIGNyZWFkbyBlc3BlY8OtZmljYW1lbnRlIHBhcmEgbW9kZWxvcyBTRU0geSBjdWVudGEgY29uIHZlcnNpb25lcyBwYXJhIFdpbmRvd3MgeSBMaW51eC4NCg0KMy4gKipBTU9TKiogKEFuYWx5c2lzIG9mIE1vbWVudCBTdHJ1Y3R1cmVzKSBkZSBBcmJ1Y2tsZSwgZGVzYXJyb2xsYWRvIGVudHJlIDE5OTUgeSAyMDA5IHBhcmEgU1BTUyBJbmMuIFB1ZWRlIHVzYXJzZSBjb21vIHVuYSBhcGxpY2FjacOzbiBpbmRlcGVuZGllbnRlIG8gY29tbyB1biBtw7NkdWxvIGRlIFNQU1MuIFRhbWJpw6luIG9mcmVjZSB1bmEgdmVyc2nDs24gZ3JhdHVpdGEgcGFyYSBlc3R1ZGlhbnRlcy4NCg0KNC4gKipNUExVUyoqIGRlIE11dGjDqW4geSBNdXRow6luLCBkaXNwb25pYmxlIGRlc2RlIDE5OTggaGFzdGEgMjAxMC4gSW5jbHV5ZSBtw6l0b2RvcyBhdXRvbcOhdGljb3MgcGFyYSB0cmFiYWphciBjb24gdmFyaWFibGVzIGRlIGRpZmVyZW50ZXMgZXNjYWxhcyB5IHBlcm1pdGUgY29tYmluYXIgQW7DoWxpc2lzIEZhY3RvcmlhbCBFeHBsb3JhdG9yaW8gKEVGQSkgY29uIFNFTSAoRVNFTSkuIEFkZW3DoXMsIGRpc3BvbmUgZGUgdW5hIHZlcnNpw7NuIGRlbW8gcGFyYSBlc3R1ZGlhbnRlcy4NCg0KNS4gKipNWCoqIChhY3LDs25pbW8gZGUgTWF0cml4KSBkZSBOZWFsZSwgQm9rZXIsIFhpZSB5IE1hZXMsIGxhbnphZG8gZW4gMjAwMy4gRXMgdW4gc29mdHdhcmUgbGlicmUgcGFyYSBhbsOhbGlzaXMgbXVsdGl2YXJpYWRvIGNvbXBhdGlibGUgY29uIHZhcmlvcyBzaXN0ZW1hcyBvcGVyYXRpdm9zIChXaW5kb3dzLCBMaW51eCwgQXBwbGUgT1NYIHkgQUlYKS4gVW5hIHZlcnNpw7NuIGRlIGPDs2RpZ28gYWJpZXJ0byBoYSBzaWRvIGRlc2Fycm9sbGFkYSBjb21vIHVuIHBhcXVldGUgZGUgUiBsbGFtYWRvIE9wZW5NeC4NCg0KNi4gKipPdHJvcyoqOiBDQUxJUy9UQ0FMSVMgKG3Ds2R1bG8gZGUgU0FTL1NUQVQpLCBSQU1PTkEgKG3Ds2R1bG8gZGUgU1lTVEFUKSwgU0VQQVRIIChtw7NkdWxvIGRlIFNUQVRJU1RJQ0EpLCBTRU0geSBsYXZhYW4gKHBhcXVldGVzIGRlIFIpLCBTVEFUQSB5IE1BVExBQi4NCiAgDQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSAtLT4NCjwhLS0gU2VwYXJhZG9yIC0tPg0KDQojIExhIGNhdXNhbGlkYWQgZW4gU0VNDQoNCjEuIFVuYSBjYXJhY3RlcsOtc3RpY2EgZGVzdGFjYWRhIGRlIGVzdG9zIG1vZGVsb3MgZXMgbGEgY2FwYWNpZGFkIGRlIHJlcHJlc2VudGFyIGVsIGVmZWN0byBjYXVzYWwgZW50cmUgdmFyaWFibGVzLg0KDQoyLiBUYW1iacOpbiBlcyBwb3NpYmxlIGVzdGltYXIgbG9zIHBhcsOhbWV0cm9zIGFzb2NpYWRvcyBhIGVzdG9zIGVmZWN0b3MsIHBlcm8gbGEgY2FwYWNpZGFkIGRlIGVzdGltYXJsb3Mgbm8gZGVtdWVzdHJhIGNhdXNhbGlkYWQuDQoNCjMuIExhIGV4aXN0ZW5jaWEgZGUgY3VhbHF1aWVyIHJlbGFjacOzbiBjYXVzYWwgZW50cmUgbGFzIHZhcmlhYmxlcyBkZWJlIGVzdGFyIHJlc3BhbGRhZGEgcG9yIGxhIGZ1bmRhbWVudGFjacOzbiB0ZcOzcmljYSBkZWwgbW9kZWxvIHkgbm8gc29sbyBwb3Igc3UgZXN0aW1hY2nDs24gYSBwYXJ0aXIgZGUgbG9zIGRhdG9zLg0KDQo0LiBFc3RvcyBtb2RlbG9zIG5vIHBydWViYW4gbGEgY2F1c2FsaWRhZCwgc29sbyBwZXJtaXRlbiBzZWxlY2Npb25hciBoaXDDs3Rlc2lzIGNhdXNhbGVzIHJlbGV2YW50ZXMsIGRlc2NhcnRhbmRvIGFxdWVsbGFzIHF1ZSBubyBlc3TDoW4gcmVzcGFsZGFkYXMgcG9yIGxhIGV2aWRlbmNpYSBlbXDDrXJpY2EuDQoNCjUuIFNlIGVzcGVjaWZpY2FuIHVuYSBzZXJpZSBkZSByZWxhY2lvbmVzIHkgbHVlZ28gc2UgZXZhbMO6YSBjdcOhbGVzIGRlIGVzdGFzIHJlbGFjaW9uZXMgZXN0w6FuIHJlcHJlc2VudGFkYXMgcG9yIGxvcyBkYXRvcy4NCg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyBUaXBvcyBkZSB2YXJpYWJsZXMgZW4gU0VNDQoNCjEuICoqVmFyaWFibGVzIG1hbmlmaXN0YXMgKG9ic2VydmFkYXMsIGluZGljYWRvcmFzKSoqOiBzb24gdmFyaWFibGVzIG9ic2VydmFibGVzLCBnZW5lcmFsbWVudGUgw610ZW1zIG8gcHJlZ3VudGFzIGVuIHVuIGN1ZXN0aW9uYXJpby4NCg0KMi4gKipWYXJpYWJsZXMgbGF0ZW50ZXMgKG5vIG9ic2VydmFkYXMpKio6IHNvbiBjb25zdHJ1Y3RvcyB0ZcOzcmljb3MgcXVlIHNvbG8gcHVlZGVuIG1lZGlyc2UgaW5kaXJlY3RhbWVudGUgYSB0cmF2w6lzIGRlIHZhcmlhYmxlcyBvYnNlcnZhYmxlcyBxdWUgYWN0w7phbiBjb21vIHN1cyBtYW5pZmVzdGFjaW9uZXMuIFNpbWlsYXIgYWwgYW7DoWxpc2lzIGZhY3RvcmlhbCwgc2UgcHVlZGVuIHV0aWxpemFyIG3Dumx0aXBsZXMgbWVkaWRhcyBwYXJhIHJlcHJlc2VudGFyIHVuIGNvbnN0cnVjdG8sIGxvIHF1ZSBheXVkYSBhIGNvbnRyb2xhciBlbCBlcnJvciBkZSBtZWRpY2nDs24gZXNwZWPDrWZpY28gZGUgY2FkYSB2YXJpYWJsZS4NCg0KMy4gKipWYXJpYWJsZXMgZGUgZXJyb3IqKjogcmVwcmVzZW50YW4gdGFudG8gbG9zIGVycm9yZXMgYXNvY2lhZG9zIGEgbGEgbWVkaWNpw7NuIGRlIHVuYSB2YXJpYWJsZSBjb21vIGFxdWVsbGFzIHZhcmlhYmxlcyBubyBjb25zaWRlcmFkYXMgZW4gZWwgbW9kZWxvIHF1ZSBwdWVkZW4gaW5mbHVpciBlbiBsYSBtZWRpY2nDs24gZGUgdW5hIHZhcmlhYmxlIG9ic2VydmFibGUuIEFsIGlndWFsIHF1ZSBsYXMgdmFyaWFibGVzIGxhdGVudGVzLCBubyBzb24gb2JzZXJ2YWJsZXMgZGlyZWN0YW1lbnRlLg0KDQo0LiAqKlZhcmlhYmxlcyBleMOzZ2VuYXMqKjogU29uIHZhcmlhYmxlcyBxdWUgaW5mbHV5ZW4gZW4gb3RyYXMgdmFyaWFibGVzIGRlbCBtb2RlbG8gcGVybyBubyBzb24gYWZlY3RhZGFzIHBvciBuaW5ndW5hIG90cmEgdmFyaWFibGUuIFNvbiBzaW1pbGFyZXMgYSBsYXMgdmFyaWFibGVzIGluZGVwZW5kaWVudGVzIGVuIHVuIG1vZGVsbyBkZSByZWdyZXNpw7NuLg0KDQo1LiAqKlZhcmlhYmxlcyBlbmTDs2dlbmFzKio6IFNvbiB2YXJpYWJsZXMgcXVlIHNvbiBpbmZsdWVuY2lhZGFzIHBvciBvdHJhcyB2YXJpYWJsZXMgZGVudHJvIGRlbCBtb2RlbG8uIENvcnJlc3BvbmRlbiBhIGxhcyB2YXJpYWJsZXMgZGVwZW5kaWVudGVzIGVuIGxvcyBtb2RlbG9zIGRlIHJlZ3Jlc2nDs24uIENhZGEgdmFyaWFibGUgZW5kw7NnZW5hIGRlYmUgZXN0YXIgYWNvbXBhw7FhZGEgZGUgdW4gdMOpcm1pbm8gZGUgZXJyb3IuIA0KDQo2LiAqKlZhcmlhYmxlcyBtZWRpYWRvcmFzKio6IFNvbiBsYXMgdmFyaWFibGVzIGVuZMOzZ2VuYXMgcXVlIGEgc3UgdmV6IGluZmx1eWVuIGVuIG90cmFzIGVuZMOzZ2VuYXMuDQoNCjcuICoqVmFyaWFibGVzIGRlIGFncnVwYWNpw7NuKiogbyAqKm1vZGVyYWRvcmFzKio6IFNvbiB2YXJpYWJsZXMgY2F0ZWfDs3JpY2FzIHF1ZSBpbmRpY2FuIGxhIHBlcnRlbmVuY2lhIGRlIGxhcyBvYnNlcnZhY2lvbmVzIGEgZGlmZXJlbnRlcyBzdWJwb2JsYWNpb25lcy4gU2UgdXRpbGl6YW4gcHJpbmNpcGFsbWVudGUgZW4gYW7DoWxpc2lzIGRlIGNvbXBhcmFjaW9uZXMgZW50cmUgZ3J1cG9zLg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyBFc2NhbGEgZGUgbGFzIHZhcmlhYmxlcyBsYXRlbnRlcw0KDQojIyMgRXNjYWxhOiBleHBsaWNhY2nDs24gDQoNCjEuIENvbW8gbGFzIHZhcmlhYmxlcyBsYXRlbnRlcyAoTFZzKSBubyBzZSBvYnNlcnZhbiBkaXJlY3RhbWVudGUsIG5vIHRpZW5lbiB1bmlkYWRlcyBkZSBtZWRpZGEgaW5oZXJlbnRlcy4gDQoNCjIuIFBvciBsbyB0YW50bywgdW4gbW9kZWxvIGRlIHZhcmlhYmxlcyBsYXRlbnRlcyAoTFZNKSBubyBlc3TDoSBpZGVudGlmaWNhZG8gYSBtZW5vcyBxdWUgc2UgcmVzdHJpbmphbiBhbGd1bmFzIGVzdGltYWNpb25lcyBkZSBwYXLDoW1ldHJvcyBwYXJhIGRlZmluaXIgbGEgZXNjYWxhIGRlIGxhIHZhcmlhYmxlIGxhdGVudGUuIA0KDQozLiBFc3RvcyBkaWZlcmVudGVzIG3DqXRvZG9zIGRlIGVzY2FsYW1pZW50byBwcm9kdWNlbiB2YWxvcmVzIGRpc3RpbnRvcyBwYXJhIGxvcyBwYXLDoW1ldHJvcyBkZWwgbW9kZWxvLCBwZXJvIG5vIGRlYmVyw61hbiBhZmVjdGFyIGVsIGFqdXN0ZSBkZWwgbW9kZWxvIGEgbG9zIGRhdG9zLg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyMjIEVzY2FsYTogbcOpdG9kb3MgDQoNCkhheSB0cmVzIG3DqXRvZG9zIGNvbXVuZXMgcGFyYSBlc3RhYmxlY2VyIGVzdGEgZXNjYWxhOg0KICANCiAgMS4gKlZhcmlhYmxlIGxhdGVudGUgZXN0YW5kYXJpemFkYSouDQogIA0KICAyLiAqVmFyaWFibGUgbWFyY2Fkb3IqLg0KICANCiAgMy4gKkNvZGlmaWNhY2nDs24gZGUgZWZlY3RvcyouDQoNCkEgY29udGludWFjacOzbiwgZXhwbGljYXJlbW9zIGJyZXZlbWVudGUgY2FkYSB1bm8gZGUgZWxsb3MuIA0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyMjIEVzY2FsYTogdmFyaWFibGUgbGF0ZW50ZSBlc3RhbmRhcml6YWRhDQoNCjEuIEVzdGUgbcOpdG9kbyBlc3RhYmxlY2UgbGEgdmFyaWFuemEgZGUgbGEgdmFyaWFibGUgbGF0ZW50ZSBlbiAxLjAsIGNvbnZpcnRpw6luZG9sYSBhc8OtIGVuIHVuYSB2YXJpYWJsZSBlc3RhbmRhcml6YWRhIChzaW1pbGFyIGEgdW5hIHB1bnR1YWNpw7NuICRaJCkuIA0KDQoyLiBTaSBsYXMgdmFyaWFibGVzIGluZGljYWRvcmFzIHRhbWJpw6luIGVzdMOhbiBlc3RhbmRhcml6YWRhcywgbGFzIGNhcmdhcyBwdWVkZW4gaW50ZXJwcmV0YXJzZSBpZ3VhbCBxdWUgdW4gY29lZmljaWVudGUgZGUgcmVncmVzacOzbiBlc3RhbmRhcml6YWRvOiANCg0KICArICpFbCBuw7ptZXJvIGRlIGRlc3ZpYWNpb25lcyBlc3TDoW5kYXIgcXVlIGNhbWJpYSBsYSB2YXJpYWJsZSBtYW5pZmllc3RhIChNVikgY3VhbmRvIGxhIHZhcmlhYmxlIGxhdGVudGUgYXVtZW50YSBlbiB1bmEgZGVzdmlhY2nDs24gZXN0w6FuZGFyLiogDQoNCjQuIEFkZW3DoXMsIHNpIGhheSBtw6FzIGRlIHVuYSB2YXJpYWJsZSBsYXRlbnRlLCBsYSBjb3ZhcmlhbnphIGVudHJlIGVsbGFzIHNlIGNvbnZpZXJ0ZSBlbiB1bmEgY29ycmVsYWNpw7NuLg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyMjIEVzY2FsYTogdmFyaWFibGUgbWFyY2Fkb3INCg0KMS4gRXN0ZSBtw6l0b2RvIGltcGxpY2EgcmVzdHJpbmdpciB1bmEgY2FyZ2EgZmFjdG9yaWFsIGRlIGNhZGEgdmFyaWFibGUgbGF0ZW50ZSBhIHVuIHZhbG9yIGFyYml0cmFyaW8gKHVzdWFsbWVudGUgMS4wKS4gDQoNCjIuIExhIHZhcmlhYmxlIGluZGljYWRvcmEgY3V5YSBjYXJnYSBlc3TDoSByZXN0cmluZ2lkYSBzZSBjb25vY2UgY29tbyBsYSAqdmFyaWFibGUgbWFyY2Fkb3IqLiANCg0KMy4gRXN0ZSBtw6l0b2RvIGRlZmluZSBsYSB2YXJpYW56YSBkZSBsYSB2YXJpYWJsZSBsYXRlbnRlIHVzYW5kbyBsYSB2YXJpYWJsZSBtYXJjYWRvci4NCg0KPCEtLSAlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlIC0tPg0KPCEtLSBTZXBhcmFkb3IgLS0+DQoNCiMjIyBFc2NhbGE6IGNvZGlmaWNhY2nDs24gZGUgZWZlY3Rvcw0KDQoxLiBFc3RlIG3DqXRvZG8gZXN0aW1hIHRvZGFzIGxhcyBjYXJnYXMsIHBlcm8gaW1wb25lIHF1ZSBsYXMgY2FyZ2FzIGRlIHVuYSB2YXJpYWJsZSBsYXRlbnRlIGRldGVybWluYWRhIHByb21lZGllbiAxLjAuDQoNCjIuIERlIG1hbmVyYSBlcXVpdmFsZW50ZSwgcXVlIHN1IHN1bWEgc2VhIGlndWFsIGFsIG7Dum1lcm8gZGUgdmFyaWFibGVzIGluZGljYWRvcmFzIMO6bmljYXMuDQoNCg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyBUaXBvcyBkZSByZWxhY2lvbmVzIGVudHJlIHZhcmlhYmxlcw0KDQpFbiB1biBTRU0sIHNlIHB1ZWRlbiBkZWZpbmlyIHZhcmlvcyB0aXBvcyBkZSByZWxhY2lvbmVzIGVudHJlIHZhcmlhYmxlcy4gQSBjb250aW51YWNpw7NuIHNlIGRlc2NyaWJlbiBlc3RvcyB0aXBvcyBkZSByZWxhY2lvbmVzLg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyMjIENvdmFyaWFjacOzbg0KDQpTZSByZWZpZXJlIGEgbGEgcmVsYWNpw7NuIGVudHJlIGRvcyB2YXJpYWJsZXMgcXVlIHZhcsOtYW4ganVudGFzLCBwZXJvIHNpbiBpbXBsaWNhciBjYXVzYWxpZGFkLiBJbmRpY2EgcXVlIGN1YW5kbyB1bmEgdmFyaWFibGUgY2FtYmlhLCBsYSBvdHJhIHRhbWJpw6luIGxvIGhhY2UsIHBlcm8gbm8gbmVjZXNhcmlhbWVudGUgcG9ycXVlIHVuYSBjYXVzZSBhIGxhIG90cmEuDQoNCioqRWplbXBsby4qKg0KDQpMYSByZWxhY2nDs24gZW50cmUgbGEgY2FudGlkYWQgZGUgaGVsYWRvcyB2ZW5kaWRvcyB5IGVsIG7Dum1lcm8gZGUgcGVyc29uYXMgcXVlIHZhbiBhIGxhIHBsYXlhLiBFc3RhcyBkb3MgdmFyaWFibGVzIGNvdmFyw61hbiBwb3JxdWUgYW1iYXMgYXVtZW50YW4gZHVyYW50ZSBlbCB2ZXJhbm8sIHBlcm8gdW5hIG5vIGNhdXNhIGRpcmVjdGFtZW50ZSBhIGxhIG90cmEuIFbDqWFzZSBsYSBmaWd1cmEgXEByZWYoZmlnOlJlbGFjaW9uMSkuIA0KDQoNCjxjZW50ZXI+DQpgYGB7ciBSZWxhY2lvbjEsIGVjaG89RkFMU0UsIGZpZy5jYXAgPSAiKipDb3ZhcmlhY2nDs24qKiIsIG91dC53aWR0aCA9ICI1MCUifQ0KIyBmaWcud2lkdGggPSAyMCAjIE5vIGZ1bmNpb25hIGVzdGEgb3BjaW9uIGVuIGVsIGNodW5rDQoNCiNodHRwOi8vemV2cm9zcy5jb20vYmxvZy8yMDE3LzA2LzE5L3RpcHMtYW5kLXRyaWNrcy1mb3Itd29ya2luZy13aXRoLWltYWdlcy1hbmQtZmlndXJlcy1pbi1yLW1hcmtkb3duLWRvY3VtZW50cy8NCiMgUGFnaW5hIDM1OSBkZSBSMjAxNS1GcmllbmRseQ0KDQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiUmVsYWNpb24xLnBuZyIpDQoNCiNPdHJhIG1hbmVyYSwgcGVybyAgc2FsZSBlbCBjYXB0aW9uOg0KIzxjZW50ZXI+DQojIVsoI2ZpZzpGaWctY2FwdGlvbikgTWkgZmlndXJhXShOb21icmUucG5nKXt3aWR0aD00MDBweH0NCiM8L2NlbnRlcj4NCmBgYA0KPC9jZW50ZXI+DQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSAtLT4NCjwhLS0gU2VwYXJhZG9yIC0tPg0KDQojIyMgQ2F1c2FsaWRhZDoNCg0KU2UgcmVmaWVyZSBhIHVuYSByZWxhY2nDs24gZW4gbGEgcXVlIHVuIGNhbWJpbyBlbiB1bmEgdmFyaWFibGUgcHJvdm9jYSB1biBjYW1iaW8gZW4gb3RyYS4gRW4gU0VNLCBsYSBjYXVzYWxpZGFkIGltcGxpY2EgdW5hIGRpcmVjY2nDs24gZGUgaW5mbHVlbmNpYS4NCg0KKipFamVtcGxvLioqDQoNCkVsIG5pdmVsIGRlIGVkdWNhY2nDs24geSBlbCBzYWxhcmlvLiBVbmEgbWF5b3IgZWR1Y2FjacOzbiAodmFyaWFibGUgaW5kZXBlbmRpZW50ZSkgcHVlZGUgY2F1c2FyIHVuIGF1bWVudG8gZW4gZWwgc2FsYXJpbyAodmFyaWFibGUgZGVwZW5kaWVudGUpLiBWw6lhc2UgbGEgZmlndXJhIFxAcmVmKGZpZzpSZWxhY2lvbjIpLiANCg0KDQo8Y2VudGVyPg0KYGBge3IgUmVsYWNpb24yLCBlY2hvPUZBTFNFLCBmaWcuY2FwID0gIioqQ2F1c2FsaWRhZCoqIiwgb3V0LndpZHRoID0gIjUwJSJ9DQojIGZpZy53aWR0aCA9IDIwICMgTm8gZnVuY2lvbmEgZXN0YSBvcGNpb24gZW4gZWwgY2h1bmsNCg0KI2h0dHA6Ly96ZXZyb3NzLmNvbS9ibG9nLzIwMTcvMDYvMTkvdGlwcy1hbmQtdHJpY2tzLWZvci13b3JraW5nLXdpdGgtaW1hZ2VzLWFuZC1maWd1cmVzLWluLXItbWFya2Rvd24tZG9jdW1lbnRzLw0KIyBQYWdpbmEgMzU5IGRlIFIyMDE1LUZyaWVuZGx5DQoNCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJSZWxhY2lvbjIucG5nIikNCg0KI090cmEgbWFuZXJhLCBwZXJvICBzYWxlIGVsIGNhcHRpb246DQojPGNlbnRlcj4NCiMhWygjZmlnOkZpZy1jYXB0aW9uKSBNaSBmaWd1cmFdKE5vbWJyZS5wbmcpe3dpZHRoPTQwMHB4fQ0KIzwvY2VudGVyPg0KYGBgDQo8L2NlbnRlcj4NCg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyMjIFJlbGFjacOzbiBlc3B1cmlhDQoNClNlIGRhIGN1YW5kbyBkb3MgdmFyaWFibGVzIHBhcmVjZW4gZXN0YXIgcmVsYWNpb25hZGFzLCBwZXJvIGVzdGEgcmVsYWNpw7NuIGVzIGNhdXNhZGEgcG9yIHVuYSB0ZXJjZXJhIHZhcmlhYmxlIHF1ZSBhZmVjdGEgYSBhbWJhcy4gTGEgcmVsYWNpw7NuIGVudHJlIGxhcyBkb3MgdmFyaWFibGVzIG5vIGVzIGRpcmVjdGEgc2lubyBxdWUgZXMgbWVkaWFkYSBwb3IgZXN0YSB0ZXJjZXJhIHZhcmlhYmxlLg0KDQoqKkVqZW1wbG8uKioNCg0KRWwgdGFtYcOxbyBkZWwgcGllIHkgbGEgaGFiaWxpZGFkIHBhcmEgbGVlciBlbiBuacOxb3MuIEF1bnF1ZSBwdWVkZW4gcGFyZWNlciByZWxhY2lvbmFkb3MsIGFtYm9zIGVzdMOhbiBpbmZsdWVuY2lhZG9zIHBvciBsYSBlZGFkIGRlbCBuacOxbywgcXVlIGVzIGxhIHZlcmRhZGVyYSBjYXVzYSBzdWJ5YWNlbnRlIGRlIGxhIHJlbGFjacOzbi4gVsOpYXNlIGxhIGZpZ3VyYSBcQHJlZihmaWc6UmVsYWNpb24zKS4gDQoNCg0KPGNlbnRlcj4NCmBgYHtyIFJlbGFjaW9uMywgZWNobz1GQUxTRSwgZmlnLmNhcCA9ICIqKlJlbGFjacOzbiBlc3B1cmlhKioiLCBvdXQud2lkdGggPSAiNDAlIn0NCiMgZmlnLndpZHRoID0gMjAgIyBObyBmdW5jaW9uYSBlc3RhIG9wY2lvbiBlbiBlbCBjaHVuaw0KDQojaHR0cDovL3pldnJvc3MuY29tL2Jsb2cvMjAxNy8wNi8xOS90aXBzLWFuZC10cmlja3MtZm9yLXdvcmtpbmctd2l0aC1pbWFnZXMtYW5kLWZpZ3VyZXMtaW4tci1tYXJrZG93bi1kb2N1bWVudHMvDQojIFBhZ2luYSAzNTkgZGUgUjIwMTUtRnJpZW5kbHkNCg0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIlJlbGFjaW9uMy5wbmciKQ0KDQojT3RyYSBtYW5lcmEsIHBlcm8gIHNhbGUgZWwgY2FwdGlvbjoNCiM8Y2VudGVyPg0KIyFbKCNmaWc6RmlnLWNhcHRpb24pIE1pIGZpZ3VyYV0oTm9tYnJlLnBuZyl7d2lkdGg9NDAwcHh9DQojPC9jZW50ZXI+DQpgYGANCjwvY2VudGVyPg0KDQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSAtLT4NCjwhLS0gU2VwYXJhZG9yIC0tPg0KDQojIyMgQ2F1c2FsaWRhZCBkaXJlY3RhDQoNCk9jdXJyZSBjdWFuZG8gdW5hIHZhcmlhYmxlIGRpcmVjdGFtZW50ZSBhZmVjdGEgYSBvdHJhIHNpbiBsYSBpbnRlcnZlbmNpw7NuIGRlIG90cmFzIHZhcmlhYmxlcy4gRW4gZWwgZGlhZ3JhbWEgZGUgU0VNLCBlc3RvIHNlIHJlcHJlc2VudGEgY29uIHVuYSBmbGVjaGEgcXVlIHZhIGRpcmVjdGFtZW50ZSBkZSBsYSB2YXJpYWJsZSBjYXVzYSBhIGxhIHZhcmlhYmxlIGVmZWN0by4NCg0KKipFamVtcGxvLioqDQoNCkVsIHRlbnJlIHVuIGVtcGxlbyAodmFyaWFibGUgaW5kZXBlbmRpZW50ZSkgaW5jcmVtZW50YSBsb3MgaW5ncmVzb3MgKHZhcmlhYmxlIGRlcGVuZGllbnRlKS4gVsOpYXNlIGxhIGZpZ3VyYSBcQHJlZihmaWc6UmVsYWNpb240KS4gDQoNCjxjZW50ZXI+DQpgYGB7ciBSZWxhY2lvbjQsIGVjaG89RkFMU0UsIGZpZy5jYXAgPSAiKipDYXVzYWxpZGFkIGRpcmVjdGEqKiIsIG91dC53aWR0aCA9ICI2MCUifQ0KIyBmaWcud2lkdGggPSAyMCAjIE5vIGZ1bmNpb25hIGVzdGEgb3BjaW9uIGVuIGVsIGNodW5rDQoNCiNodHRwOi8vemV2cm9zcy5jb20vYmxvZy8yMDE3LzA2LzE5L3RpcHMtYW5kLXRyaWNrcy1mb3Itd29ya2luZy13aXRoLWltYWdlcy1hbmQtZmlndXJlcy1pbi1yLW1hcmtkb3duLWRvY3VtZW50cy8NCiMgUGFnaW5hIDM1OSBkZSBSMjAxNS1GcmllbmRseQ0KDQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiUmVsYWNpb240LnBuZyIpDQoNCiNPdHJhIG1hbmVyYSwgcGVybyAgc2FsZSBlbCBjYXB0aW9uOg0KIzxjZW50ZXI+DQojIVsoI2ZpZzpGaWctY2FwdGlvbikgTWkgZmlndXJhXShOb21icmUucG5nKXt3aWR0aD00MDBweH0NCiM8L2NlbnRlcj4NCmBgYA0KPC9jZW50ZXI+DQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSAtLT4NCjwhLS0gU2VwYXJhZG9yIC0tPg0KDQojIyMgQ2F1c2FsaWRhZCBpbmRpcmVjdGENCg0KU2UgcmVmaWVyZSBhIHVuYSBzaXR1YWNpw7NuIGVuIGxhIHF1ZSB1bmEgdmFyaWFibGUgYWZlY3RhIGEgb3RyYSBhIHRyYXbDqXMgZGUgdW5hIG8gbcOhcyB2YXJpYWJsZXMgaW50ZXJtZWRpYXMgKG1lZGlhZG9yYXMpLiBFbiB1biBkaWFncmFtYSBTRU0sIGVzdG8gc2UgbXVlc3RyYSBjb21vIHVuYSBjYWRlbmEgZGUgZmxlY2hhcyBxdWUgcGFzYW4gcG9yIHVuYSBvIG3DoXMgdmFyaWFibGVzIG1lZGlhZG9yYXMgYW50ZXMgZGUgbGxlZ2FyIGEgbGEgdmFyaWFibGUgb2JqZXRpdm8uDQoNCioqRWplbXBsby4qKg0KDQpMYSBlZHVjYWNpw7NuIGFmZWN0YSBsb3MgaW5ncmVzb3MgYSB0cmF2w6lzIGRlbCBlbXBsZW8uIExhIGVkdWNhY2nDs24gKHZhcmlhYmxlIGluZGVwZW5kaWVudGUpIGF1bWVudGEgbGEgcHJvYmFiaWxpZGFkIGRlIG9idGVuZXIgdW4gZW1wbGVvICh2YXJpYWJsZSBtZWRpYWRvcmEpLCBsbyBjdWFsIGEgc3UgdmV6IGluY3JlbWVudGEgbG9zIGluZ3Jlc29zICh2YXJpYWJsZSBkZXBlbmRpZW50ZSkuIFbDqWFzZSBsYSBmaWd1cmEgXEByZWYoZmlnOlJlbGFjaW9uNSkuIA0KDQoNCjxjZW50ZXI+DQpgYGB7ciBSZWxhY2lvbjUsIGVjaG89RkFMU0UsIGZpZy5jYXAgPSAiKipDYXVzYWxpZGFkIGluZGlyZWN0YSoqIiwgb3V0LndpZHRoID0gIjQwJSJ9DQojIGZpZy53aWR0aCA9IDIwICMgTm8gZnVuY2lvbmEgZXN0YSBvcGNpb24gZW4gZWwgY2h1bmsNCg0KI2h0dHA6Ly96ZXZyb3NzLmNvbS9ibG9nLzIwMTcvMDYvMTkvdGlwcy1hbmQtdHJpY2tzLWZvci13b3JraW5nLXdpdGgtaW1hZ2VzLWFuZC1maWd1cmVzLWluLXItbWFya2Rvd24tZG9jdW1lbnRzLw0KIyBQYWdpbmEgMzU5IGRlIFIyMDE1LUZyaWVuZGx5DQoNCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJSZWxhY2lvbjUucG5nIikNCg0KI090cmEgbWFuZXJhLCBwZXJvICBzYWxlIGVsIGNhcHRpb246DQojPGNlbnRlcj4NCiMhWygjZmlnOkZpZy1jYXB0aW9uKSBNaSBmaWd1cmFdKE5vbWJyZS5wbmcpe3dpZHRoPTQwMHB4fQ0KIzwvY2VudGVyPg0KYGBgDQo8L2NlbnRlcj4NCg0KPCEtLSAlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlIC0tPg0KPCEtLSBTZXBhcmFkb3IgLS0+DQoNCiMjIyBDYXVzYWxpZGFkIHJlY8OtcHJvY2ENCg0KU2UgcHJlc2VudGEgY3VhbmRvIGRvcyB2YXJpYWJsZXMgc2UgYWZlY3RhbiBtdXR1YW1lbnRlLiBDYWRhIHZhcmlhYmxlIGVzIGEgbGEgdmV6IGNhdXNhIHkgZWZlY3RvIGRlIGxhIG90cmEuIEVuIHVuIGRpYWdyYW1hIFNFTSwgZXN0byBzZSByZXByZXNlbnRhIGNvbiBmbGVjaGFzIGJpZGlyZWNjaW9uYWxlcyBlbnRyZSBsYXMgZG9zIHZhcmlhYmxlcy4NCg0KKipFamVtcGxvLioqDQoNCkVzdHLDqXMgeSBwcm9ibGVtYXMgZGUgc2FsdWQuIEVsIGVzdHLDqXMgcHVlZGUgY2F1c2FyIHByb2JsZW1hcyBkZSBzYWx1ZCwgeSBhIHN1IHZleiwgbG9zIHByb2JsZW1hcyBkZSBzYWx1ZCBwdWVkZW4gYXVtZW50YXIgZWwgbml2ZWwgZGUgZXN0csOpcy4gRXN0YSByZWxhY2nDs24gZXMgYmlkaXJlY2Npb25hbC4gVsOpYXNlIGxhIGZpZ3VyYSBcQHJlZihmaWc6UmVsYWNpb242KS4gDQoNCg0KPGNlbnRlcj4NCmBgYHtyIFJlbGFjaW9uNiwgZWNobz1GQUxTRSwgZmlnLmNhcCA9ICIqKkNhdXNhbGlkYWQgcmVjw61wcm9jYSoqIiwgb3V0LndpZHRoID0gIjYwJSJ9DQojIGZpZy53aWR0aCA9IDIwICMgTm8gZnVuY2lvbmEgZXN0YSBvcGNpb24gZW4gZWwgY2h1bmsNCg0KI2h0dHA6Ly96ZXZyb3NzLmNvbS9ibG9nLzIwMTcvMDYvMTkvdGlwcy1hbmQtdHJpY2tzLWZvci13b3JraW5nLXdpdGgtaW1hZ2VzLWFuZC1maWd1cmVzLWluLXItbWFya2Rvd24tZG9jdW1lbnRzLw0KIyBQYWdpbmEgMzU5IGRlIFIyMDE1LUZyaWVuZGx5DQoNCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJSZWxhY2lvbjYucG5nIikNCg0KI090cmEgbWFuZXJhLCBwZXJvICBzYWxlIGVsIGNhcHRpb246DQojPGNlbnRlcj4NCiMhWygjZmlnOkZpZy1jYXB0aW9uKSBNaSBmaWd1cmFdKE5vbWJyZS5wbmcpe3dpZHRoPTQwMHB4fQ0KIzwvY2VudGVyPg0KYGBgDQo8L2NlbnRlcj4NCg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyMjIERpYWdyYW1hcyBlc3RydWN0dXJhbGVzDQoNCkNvbW8gZWplbXBsbywgdsOpYXNlIGxhIGZpZ3VyYSBcQHJlZihmaWc6UmVsYWNpb243KS4gDQoNCg0KPGNlbnRlcj4NCmBgYHtyIFJlbGFjaW9uNywgZWNobz1GQUxTRSwgZmlnLmNhcCA9ICIqKkVqZW1wbG8gZGUgdW4gZGlhZ3JhbWEgZXN0cnVjdHVyYWwqKiIsIG91dC53aWR0aCA9ICI4MCUifQ0KIyBmaWcud2lkdGggPSAyMCAjIE5vIGZ1bmNpb25hIGVzdGEgb3BjaW9uIGVuIGVsIGNodW5rDQoNCiNodHRwOi8vemV2cm9zcy5jb20vYmxvZy8yMDE3LzA2LzE5L3RpcHMtYW5kLXRyaWNrcy1mb3Itd29ya2luZy13aXRoLWltYWdlcy1hbmQtZmlndXJlcy1pbi1yLW1hcmtkb3duLWRvY3VtZW50cy8NCiMgUGFnaW5hIDM1OSBkZSBSMjAxNS1GcmllbmRseQ0KDQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiUmVsYWNpb243LnBuZyIpDQoNCiNPdHJhIG1hbmVyYSwgcGVybyAgc2FsZSBlbCBjYXB0aW9uOg0KIzxjZW50ZXI+DQojIVsoI2ZpZzpGaWctY2FwdGlvbikgTWkgZmlndXJhXShOb21icmUucG5nKXt3aWR0aD00MDBweH0NCiM8L2NlbnRlcj4NCmBgYA0KPC9jZW50ZXI+DQoNCg0KKipPYnNlcnZhY2lvbmVzLioqDQoNCjEuIExvcyBlZmVjdG9zIGRpcmVjdG9zIHNlIGluZGljYW4gY29uIGZsZWNoYXMgcmVjaGFzLiANCg0KMi4gRWwgZmluYWwgZGUgbGEgZmxlY2hhIGVzIGxhIHZhcmlhYmxlIGRlcGVuZGllbnRlLg0KDQozLiBMYXMgZXN0aW1hY2lvbmVzIGRlbG9zIHBhcsOhbWV0cm9zIHNpZW1wcmUgYXBhcmVjZW4gc29icmUgbGEgZmxlY2hhIGNvcnJlc3BvbmRpZW50ZS4NCg0KNC4gQ3VhbHF1aWVyIHZhcmlhYmxlIHF1ZSBzZWEgaW5mbHVlbmNpYWRhIHBvciBvdHJhIHZhcmlhYmxlIGRlbCBtb2RlbG8gZGViZSB0ZW5lciB1biB0w6lybWlubyBkZSBlcnJvci4gDQoNCjUuIEFsZ3Vub3MgcHJvZ3JhbWFzIHRhbWJpw6luIHN1ZWxlbiBtb3N0cmFyOiANCiAgICANCiAgICArIEp1bnRvIGEgY2FkYSB2YXJpYWJsZSwgc3UgdmFyaWFuemEuDQogICAgDQogICAgKyBFbiBlbCBjYXNvIGRlIGxhcyB2YXJpYWJsZXMgZGVwZW5kaWVudGVzLCBsYSBwcm9wb3JjacOzbiBkZSB2YXJpYW56YSBleHBsaWNhZGEgY29ycmVzcG9uZGllbnRlLg0KICAgIA0KDQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSAtLT4NCjwhLS0gU2VwYXJhZG9yIC0tPg0KDQojIENvbXBvbmVudGVzIGRlIHVuIFNFTQ0KDQojIyMgVGlwb3MNCg0KMS4gU29uIGRvczogKk1vZGVsbyBkZSBtZWRpZGEqIHkgKm1vZGVsbyBlc3RydWN0dXJhbCouIE3DoXMgYWRlbGFudGUsIHNlIGV4cGxpY2EgY2FkYSB1bm8gZGUgZWxsb3MuIA0KDQoyLiBBbCBzdXN0aXR1aXIgZW4gZWwgbW9kZWxvIGRlIG1lZGlkYSBsYXMgcmVsYWNpb25lcyBkZSBjb3ZhcmlhbnphIHBvciBsYXMgcmVsYWNpb25lcyBjYXVzYWxlcyBkZSBsYSBwYXJ0ZSBlc3RydWN0dXJhbCwgc2Ugb2J0aWVuZSBlbCAqbW9kZWxvIGVzdHJ1Y3R1cmFsIGNvbXBsZXRvKiwgdGFtYmnDqW4gZGVub21pbmFkbyAqbW9kZWxvIGRlIHJlZ3Jlc2nDs24gZXN0cnVjdHVyYWwqLg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyMjIE1vZGVsbyBkZSBtZWRpZGENCiAgDQogIA0KMS4gQ29tcHVlc3RvIHBvciBsYXMgcmVsYWNpb25lcyBlbnRyZSBsYXMgdmFyaWFibGVzIGluZGljYWRvcmFzIGRlbCBtb2RlbG8geSBzdXMgY29uc3RydWN0b3MgbGF0ZW50ZXMuIA0KDQoyLiBBc8OtIGNvbW8gcG9yIGxhcyByZWxhY2lvbmVzIGRlIGNvdmFyaWFuemEgZW50cmUgbGFzIHZhcmlhYmxlcyBsYXRlbnRlcy4gDQoNCjMuIENhZGEgY29uc3RydWN0byBsYXRlbnRlIHkgc3VzIGluZGljYWRvcmVzIGZvcm1hbiB1bmEgcGFydGUgZGVsIG1vZGVsbyBkZSBtZWRpZGEuDQoNCjQuIFRhbWJpw6luIGNvbm9jaWRvIGNvbW8gaW5zdHJ1bWVudG8gZGUgbWVkaWRhIHkgZXMgZWwgbW9kZWxvIHByb3B1ZXN0byBwYXJhICJtZWRpciIgbGFzIHZhcmlhYmxlcyBsYXRlbnRlcy4gDQoNCjUuIEVzdGUgbW9kZWxvIGNvcnJlc3BvbmRlIGEgdW4gYW7DoWxpc2lzIGZhY3RvcmlhbCBjb25maXJtYXRvcmlvLGVuIGVsIHF1ZSBjYWRhIHZhcmlhYmxlIGxhdGVudGUgc2UgYXNvY2lhIGNvbiB1biBncnVwbyBkZSB2YXJpYWJsZXMgb2JzZXJ2YWRhcywgeSBhZGVtw6FzIHNlIHBlcm1pdGUgcXVlIGxhcyB2YXJpYWJsZXMgbGF0ZW50ZXMgZXN0w6luIGNvcnJlbGFjaW9uYWRhcyBlbnRyZSBzw60uDQoNCjYuIFbDqWFzZSBsYSBmaWd1cmEgXEByZWYoZmlnOlJlbGFjaW9uOCkuIA0KDQoNCjxjZW50ZXI+DQpgYGB7ciBSZWxhY2lvbjgsIGVjaG89RkFMU0UsIGZpZy5jYXAgPSAiKipNb2RlbG8gZGUgbWVkaWRhKioiLCBvdXQud2lkdGggPSAiNTAlIn0NCiMgZmlnLndpZHRoID0gMjAgIyBObyBmdW5jaW9uYSBlc3RhIG9wY2lvbiBlbiBlbCBjaHVuaw0KDQojaHR0cDovL3pldnJvc3MuY29tL2Jsb2cvMjAxNy8wNi8xOS90aXBzLWFuZC10cmlja3MtZm9yLXdvcmtpbmctd2l0aC1pbWFnZXMtYW5kLWZpZ3VyZXMtaW4tci1tYXJrZG93bi1kb2N1bWVudHMvDQojIFBhZ2luYSAzNTkgZGUgUjIwMTUtRnJpZW5kbHkNCg0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIlJlbGFjaW9uOC5wbmciKQ0KDQojT3RyYSBtYW5lcmEsIHBlcm8gIHNhbGUgZWwgY2FwdGlvbjoNCiM8Y2VudGVyPg0KIyFbKCNmaWc6RmlnLWNhcHRpb24pIE1pIGZpZ3VyYV0oTm9tYnJlLnBuZyl7d2lkdGg9NDAwcHh9DQojPC9jZW50ZXI+DQpgYGANCjwvY2VudGVyPg0KDQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSAtLT4NCjwhLS0gU2VwYXJhZG9yIC0tPg0KDQojIyMgTW9kZWxvIGVzdHJ1Y3R1cmFsDQoNCjEuIFNlIHJlZmllcmUgYSBsYXMgaW50ZXJyZWxhY2lvbmVzIGNhdXNhbGVzIHByb3B1ZXN0YXMgZW50cmUgbGFzIHZhcmlhYmxlcyBsYXRlbnRlcyBkZWwgbW9kZWxvLg0KDQoyLiBFcyBsYSBwYXJ0ZSBkZWwgbW9kZWxvIHF1ZSBlbXBsZWEgZWwgYW7DoWxpc2lzIGRlIGNhbWlub3MgKHBhdGggYW5hbHlzaXMpLCBwZXJvIGNvbiB2YXJpYWJsZXMgYWxhdGVudGVzLiANCg0KMy4gRXMgc2ltaWxhciBhIHVuIGFuw6FsaXNpcyBkZSByZWdyZXNpw7NuLiANCg0KNC4gVsOpYXNlIGxhIGZpZ3VyYSBcQHJlZihmaWc6UmVsYWNpb245KS4gDQoNCg0KPGNlbnRlcj4NCmBgYHtyIFJlbGFjaW9uOSwgZWNobz1GQUxTRSwgZmlnLmNhcCA9ICIqKk1vZGVsbyBlc3RydWN0dXJhbCoqIiwgb3V0LndpZHRoID0gIjIwJSJ9DQojIGZpZy53aWR0aCA9IDIwICMgTm8gZnVuY2lvbmEgZXN0YSBvcGNpb24gZW4gZWwgY2h1bmsNCg0KI2h0dHA6Ly96ZXZyb3NzLmNvbS9ibG9nLzIwMTcvMDYvMTkvdGlwcy1hbmQtdHJpY2tzLWZvci13b3JraW5nLXdpdGgtaW1hZ2VzLWFuZC1maWd1cmVzLWluLXItbWFya2Rvd24tZG9jdW1lbnRzLw0KIyBQYWdpbmEgMzU5IGRlIFIyMDE1LUZyaWVuZGx5DQoNCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJSZWxhY2lvbjkucG5nIikNCg0KI090cmEgbWFuZXJhLCBwZXJvICBzYWxlIGVsIGNhcHRpb246DQojPGNlbnRlcj4NCiMhWygjZmlnOkZpZy1jYXB0aW9uKSBNaSBmaWd1cmFdKE5vbWJyZS5wbmcpe3dpZHRoPTQwMHB4fQ0KIzwvY2VudGVyPg0KYGBgDQo8L2NlbnRlcj4NCg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyMjIE1vZGVsbyBlc3RydWN0dXJhbCBjb21wbGV0bw0KDQpWw6lhc2UgbGEgZmlndXJhIFxAcmVmKGZpZzpSZWxhY2lvbjEwKS4gDQoNCg0KPGNlbnRlcj4NCmBgYHtyIFJlbGFjaW9uMTAsIGVjaG89RkFMU0UsIGZpZy5jYXAgPSAiKipNb2RlbG8gZXN0cnVjdHVyYWwgY29tcGxldG8qKiIsIG91dC53aWR0aCA9ICI1MCUifQ0KIyBmaWcud2lkdGggPSAyMCAjIE5vIGZ1bmNpb25hIGVzdGEgb3BjaW9uIGVuIGVsIGNodW5rDQoNCiNodHRwOi8vemV2cm9zcy5jb20vYmxvZy8yMDE3LzA2LzE5L3RpcHMtYW5kLXRyaWNrcy1mb3Itd29ya2luZy13aXRoLWltYWdlcy1hbmQtZmlndXJlcy1pbi1yLW1hcmtkb3duLWRvY3VtZW50cy8NCiMgUGFnaW5hIDM1OSBkZSBSMjAxNS1GcmllbmRseQ0KDQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiUmVsYWNpb24xMC5wbmciKQ0KDQojT3RyYSBtYW5lcmEsIHBlcm8gIHNhbGUgZWwgY2FwdGlvbjoNCiM8Y2VudGVyPg0KIyFbKCNmaWc6RmlnLWNhcHRpb24pIE1pIGZpZ3VyYV0oTm9tYnJlLnBuZyl7d2lkdGg9NDAwcHh9DQojPC9jZW50ZXI+DQpgYGANCjwvY2VudGVyPg0KDQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSAtLT4NCjwhLS0gU2VwYXJhZG9yIC0tPg0KDQojIE90cm9zIHRpcG9zIGRlIG1vZGVsb3MNCg0KIyMjIE1vZGVsbyBmYWN0b3JpYWwgZXhwbG9yYXRvcmlvIHZzIGNvbmZpcm1hdG9yaW8NCg0KMS4gRWwgbW9kZWxvIGRlIHZhcmlhYmxlcyBsYXRlbnRlcyAoTFZNKSBjcmVhIGxhcyB2YXJpYWJsZXMgbGF0ZW50ZXMgKExWcykgZW1wbGVhZGFzIGVuIGVsIG1vZGVsbyBlc3RydWN0dXJhbC4gDQoNCjIuIEN1YW5kbyB1biBMVk0gc2UgZXhhbWluYSBzaW4gdW4gbW9kZWxvIGVzdHJ1Y3R1cmFsLCBzZSBjb25vY2Ugb2Nhc2lvbmFsbWVudGUgY29tbyAqKmFuw6FsaXNpcyBmYWN0b3JpYWwgY29uZmlybWF0b3JpbyoqIChDRkEpLiANCg0KMy4gU2kgbm8gc2UgdHV2aWVyYSB1bmEgZXN0cnVjdHVyYSBoaXBvdMOpdGljYSBwYXJhIGVsIG1vZGVsbyBkZSB2YXJpYWJsZXMgbGF0ZW50ZXMsIHNlIHRyYXRhcsOtYSBkZSB1biAqKmFuw6FsaXNpcyBmYWN0b3JpYWwgZXhwbG9yYXRvcmlvKiogKEVGQSkuDQoNCjQuIFbDqWFzZSBsYSBmaWd1cmEgXEByZWYoZmlnOlJlbGFjaW9uMTEpLiANCg0KDQo8Y2VudGVyPg0KYGBge3IgUmVsYWNpb24xMSwgZWNobz1GQUxTRSwgZmlnLmNhcCA9ICIqKk1vZGVsbyBmYWN0b3JpYWwgZXhwbG9yYXRvcmlvIHZzIGNvbmZpcm1hdG9yaW8qKiIsIG91dC53aWR0aCA9ICI4MCUifQ0KIyBmaWcud2lkdGggPSAyMCAjIE5vIGZ1bmNpb25hIGVzdGEgb3BjaW9uIGVuIGVsIGNodW5rDQoNCiNodHRwOi8vemV2cm9zcy5jb20vYmxvZy8yMDE3LzA2LzE5L3RpcHMtYW5kLXRyaWNrcy1mb3Itd29ya2luZy13aXRoLWltYWdlcy1hbmQtZmlndXJlcy1pbi1yLW1hcmtkb3duLWRvY3VtZW50cy8NCiMgUGFnaW5hIDM1OSBkZSBSMjAxNS1GcmllbmRseQ0KDQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiUmVsYWNpb24xMS5wbmciKQ0KDQojT3RyYSBtYW5lcmEsIHBlcm8gIHNhbGUgZWwgY2FwdGlvbjoNCiM8Y2VudGVyPg0KIyFbKCNmaWc6RmlnLWNhcHRpb24pIE1pIGZpZ3VyYV0oTm9tYnJlLnBuZyl7d2lkdGg9NDAwcHh9DQojPC9jZW50ZXI+DQpgYGANCjwvY2VudGVyPg0KDQoNCg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyMjIE1vZGVsbyBmb3JtYXRpdm8gdnMgcmVmbGVjdGl2bw0KDQoxLiBFeGlzdGVuIGRvcyB0aXBvcyBkZSB2YXJpYWJsZXMgbGF0ZW50ZXM6ICpyZWZsZWN0aXZhcyogeSAqZm9ybWF0aXZhcyouIA0KDQoyLiBTZSBjb25zaWRlcmEgcXVlIGxhcyB2YXJpYWJsZXMgbGF0ZW50ZXMgKipyZWZsZWN0aXZhcyoqIGNhdXNhbiBsYSBjb3ZhcmlhY2nDs24gZGUgb3RyYXMgdmFyaWFibGVzLiANCg0KMy4gTGFzIHZhcmlhYmxlcyBsYXRlbnRlcyAqKmZvcm1hdGl2YXMqKiBzb24gZWwgcmVzdWx0YWRvIGRlIGxhIGNvdmFyaWFjacOzbiBkZSBvdHJhcyB2YXJpYWJsZXMgKHNpbWlsYXIgYSB1biBtb2RlbG8gZGUgcmVncmVzacOzbikuDQoNCjQuIFbDqWFzZSBsYSBmaWd1cmEgXEByZWYoZmlnOlJlbGFjaW9uMTIpLiANCg0KDQo8Y2VudGVyPg0KYGBge3IgUmVsYWNpb24xMiwgZWNobz1GQUxTRSwgZmlnLmNhcCA9ICIqKk1vZGVsbyBmb3JtYXRpdm8gdnMgcmVmbGVjdGl2byoqIiwgb3V0LndpZHRoID0gIjgwJSJ9DQojIGZpZy53aWR0aCA9IDIwICMgTm8gZnVuY2lvbmEgZXN0YSBvcGNpb24gZW4gZWwgY2h1bmsNCg0KI2h0dHA6Ly96ZXZyb3NzLmNvbS9ibG9nLzIwMTcvMDYvMTkvdGlwcy1hbmQtdHJpY2tzLWZvci13b3JraW5nLXdpdGgtaW1hZ2VzLWFuZC1maWd1cmVzLWluLXItbWFya2Rvd24tZG9jdW1lbnRzLw0KIyBQYWdpbmEgMzU5IGRlIFIyMDE1LUZyaWVuZGx5DQoNCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJSZWxhY2lvbjEyLnBuZyIpDQoNCiNPdHJhIG1hbmVyYSwgcGVybyAgc2FsZSBlbCBjYXB0aW9uOg0KIzxjZW50ZXI+DQojIVsoI2ZpZzpGaWctY2FwdGlvbikgTWkgZmlndXJhXShOb21icmUucG5nKXt3aWR0aD00MDBweH0NCiM8L2NlbnRlcj4NCmBgYA0KPC9jZW50ZXI+DQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSAtLT4NCjwhLS0gU2VwYXJhZG9yIC0tPg0KDQojIyMgTW9kZWxvcyBkZSBzZWd1bmRvIG9yZGVuDQoNClbDqWFzZSBsYSBmaWd1cmEgXEByZWYoZmlnOlJlbGFjaW9uMTMpLiANCg0KDQo8Y2VudGVyPg0KYGBge3IgUmVsYWNpb24xMywgZWNobz1GQUxTRSwgZmlnLmNhcCA9ICIqKk1vZGVsb3MgZGUgc2VndW5kbyBvcmRlbioqIiwgb3V0LndpZHRoID0gIjEwMCUifQ0KIyBmaWcud2lkdGggPSAyMCAjIE5vIGZ1bmNpb25hIGVzdGEgb3BjaW9uIGVuIGVsIGNodW5rDQoNCiNodHRwOi8vemV2cm9zcy5jb20vYmxvZy8yMDE3LzA2LzE5L3RpcHMtYW5kLXRyaWNrcy1mb3Itd29ya2luZy13aXRoLWltYWdlcy1hbmQtZmlndXJlcy1pbi1yLW1hcmtkb3duLWRvY3VtZW50cy8NCiMgUGFnaW5hIDM1OSBkZSBSMjAxNS1GcmllbmRseQ0KDQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiUmVsYWNpb24xMy5wbmciKQ0KDQojT3RyYSBtYW5lcmEsIHBlcm8gIHNhbGUgZWwgY2FwdGlvbjoNCiM8Y2VudGVyPg0KIyFbKCNmaWc6RmlnLWNhcHRpb24pIE1pIGZpZ3VyYV0oTm9tYnJlLnBuZyl7d2lkdGg9NDAwcHh9DQojPC9jZW50ZXI+DQpgYGANCjwvY2VudGVyPg0KDQoNCg0KDQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSAtLT4NCjwhLS0gU2VwYXJhZG9yIC0tPg0KDQojIFByb2NlZGltaWVudG8gcGFyYSBlamVjdXRhciB1biBTRU0NCg0KIyMjIEV0YXBhIDE6IFZhbGlkYWNpw7NuIGRlbCBtb2RlbG8gZGUgbWVkaWRhDQoNCjEuIEltcGxpY2EgcmVhbGl6YXIgdW4gQW7DoWxpc2lzIGZhY3RvcmlhbCBDb25maXJtYXRvcmlvIChBRkMpLCBwcm9wb25pZW5kbyBsb3MgaW5kaWNhZG9yZXMgZGUgY2FkYSB2YXJpYWJsZSBsYXRlbnRlIHkNCmV2YWx1YW5kbyBlbiBmb3JtYSBjb25qdW50YSBsYSBib25kYWQgZGUgYWp1c3RlIGRlIGxvcyBpbnN0cnVtZW50b3MgZGUgbWVkaWRhIGVtcGxlYWRvcyBwYXJhIGNhZGEgZmFjdG9yLg0KDQoyLiBTaWduaWZpY2EgcmVlbXBsYXphciBsb3MgZWZlY3RvcyBkaXJlY3RvcyBlIGluZGlyZWN0b3MgZGVsIGNvbXBvbmVudGUgZXN0cnVjdHVyYWwgcHJvcHVlc3RvcyBzZWfDum4gbGEgdGVvcsOtYSBwb3IgcmVsYWNpb25lcyBkZSBjb3ZhcmlhbnphIGVudHJlIGxhcyB2YXJpYWJsZXMgbGF0ZW50ZXMuDQoNCjMuIFNpIGVsIGFqdXN0ZSBlcyByZWNoYXphZG8gc2UgYXBsaWNhbiBoZXJyYW1pZW50YXMgZGUgcmVlc3BlY2lmaWNhY2nDs24uDQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSAtLT4NCjwhLS0gU2VwYXJhZG9yIC0tPg0KDQojIyMgRXRhcGEgMjogQWp1c3RlIGRlbCBtb2RlbG8gY29tcGxldG8gZGUgZWN1YWNpb25lcyBlc3RydWN0dXJhbGVzDQoNCjEuIEVzIGVsIGFqdXN0ZSBkZWwgU0VNIGluY29ycG9yYW5kbyBsYXMgbW9kaWZpY2FjaW9uZXMgZGUgbGEgZXRhcGEgYW50ZXJpb3IuDQoNCjIuIEluY2x1eWUgbGEgY29tcGFyYWNpw7NuIGNvbiBvdHJvcyBtb2RlbG9zIGFsdGVybmF0aXZvcyBxdWUgZGlmaWVyYW4gZW4gbGEgcGFydGUgZXN0cnVjdHVyYWwsIHNpIGxvcyBodWJpZXJhLCB1dGlsaXphbmRvIHBhcmEgZXN0byBjb250cmFzdGVzIGRlIGNvbXBhcmFjacOzbiBkZSBtb2RlbG9zLg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyBQYXNvcyBlbiBjYWRhIHVuYSBkZSBsYXMgZXRhcGFzDQoNClNvbiBsb3Mgc2lndWllbnRlcyAoY2FkYSB1bm8gc2UgZXhwbGljYXLDoSBtw6FzIGFkZWxhbnRlKTogDQoNCjEuIEVzcGVjaWZpY2FjacOzbi4NCg0KMi4gSWRlbnRpZmljYWNpw7NuLg0KDQozLiBFdmFsdWFjacOzbiBkZSBsYSBjYWxpZGFkIGRlIGxhIGJhc2UgZGUgZGF0b3MuDQoNCjQuIEVzdGltYWNpw7NuIGRlIHBhcsOhbWV0cm9zLg0KDQo1LiBFdmFsdWFjacOzbiBkZSBsYSBib25kYWQgZGUgYWp1c3RlLg0KDQo2LiBSZS1lc3BlY2lmaWNhY2nDs24gZGVsIG1vZGVsby4NCg0KDQpWw6lhc2UgbGEgZmlndXJhIFxAcmVmKGZpZzpSZWxhY2lvbjE3KS4gDQoNCg0KPGNlbnRlcj4NCmBgYHtyIFJlbGFjaW9uMTcsIGVjaG89RkFMU0UsIGZpZy5jYXAgPSAiKipQYXNvcyBlbiBjYWRhIHVuYSBkZSBsYXMgZXRhcGFzKioiLCBvdXQud2lkdGggPSAiNzAlIn0NCiMgZmlnLndpZHRoID0gMjAgIyBObyBmdW5jaW9uYSBlc3RhIG9wY2lvbiBlbiBlbCBjaHVuaw0KDQojaHR0cDovL3pldnJvc3MuY29tL2Jsb2cvMjAxNy8wNi8xOS90aXBzLWFuZC10cmlja3MtZm9yLXdvcmtpbmctd2l0aC1pbWFnZXMtYW5kLWZpZ3VyZXMtaW4tci1tYXJrZG93bi1kb2N1bWVudHMvDQojIFBhZ2luYSAzNTkgZGUgUjIwMTUtRnJpZW5kbHkNCg0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIlJlbGFjaW9uMTcucG5nIikNCg0KI090cmEgbWFuZXJhLCBwZXJvICBzYWxlIGVsIGNhcHRpb246DQojPGNlbnRlcj4NCiMhWygjZmlnOkZpZy1jYXB0aW9uKSBNaSBmaWd1cmFdKE5vbWJyZS5wbmcpe3dpZHRoPTQwMHB4fQ0KIzwvY2VudGVyPg0KYGBgDQo8L2NlbnRlcj4NCg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyBFc3BlY2lmaWNhY2nDs24NCg0KDQoxLiBFbCBtb2RlbG8gc2UgZGVmaW5lIGNvbiBiYXNlIGVuIGxvcyBjb25vY2ltaWVudG9zIHRlw7NyaWNvcyB5IGFudGVjZWRlbnRlcyBlbXDDrXJpY29zIGRlbCB0ZW1hIGVzdHVkaWFkby4gDQoNCjIuIFNlIGRlYmVuIGluY2x1aXIgw7puaWNhbWVudGUgbGFzIHZhcmlhYmxlcyBlc2VuY2lhbGVzIHF1ZSBjdWVudGVuIGNvbiB1biBmdWVydGUgcmVzcGFsZG8gdGXDs3JpY28geSBlbXDDrXJpY28uIA0KDQozLiBFcyBjcnVjaWFsIGRldGVybWluYXIgbGFzIHJlbGFjaW9uZXMgZW50cmUgdmFyaWFibGVzIGxhdGVudGVzIGUgaW5kaWNhZG9yYXMsIGFzdW1pZW5kbyBxdWUgY3VhbHF1aWVyIHJlbGFjacOzbiBubyBlc3BlY2lmaWNhZGEgbm8gZXhpc3RlLiANCg0KNC4gRXMgcmVjb21lbmRhYmxlIHJlYWxpemFyIHVuIGFuw6FsaXNpcyBmYWN0b3JpYWwgZXhwbG9yYXRvcmlvIChBRkUpIHByZXZpbyBwYXJhIHZhbGlkYXIgbyByZXZhbGlkYXIgbGFzIGVzY2FsYXMgdXRpbGl6YWRhcyBlbiBsYSBtZWRpY2nDs24gZGUgY2FkYSB2YXJpYWJsZSBsYXRlbnRlLiANCg0KNS4gU2Vnw7puIGxhIHJlZ2xhIGRlIEtlbm55ICgxOTc5KSwgZWwgbsO6bWVybyBkZSBmYWN0b3JlcyBwb3IgZmFjdG9yIGRlYmUgc2VyOiBtw61uaW1vIDIsIDMgZXMgYnVlbm8sIDQgZXMgw7NwdGltbywgeSA1IG8gbcOhcyBlcyBleGNlc2l2bywgcGVybyBubyBzZSBkZWJlbiBleGNlZGVyIGxvcyAyMCBmYWN0b3JlcyBwYXJhIHRvZG8gZWwgU0VNLg0KDQo2LiBFbiBlc3RhIGV0YXBhIHNlIGRldGVybWluYSBxdcOpIHBhcsOhbWV0cm9zIHNlcsOhbiBlc3RpbWFkb3MgeSBjdcOhbGVzIHNlIG1hbnRlbmRyw6FuIGNvbnN0YW50ZXMuDQoNCjcuIEFkZW3DoXMsIHNlIGFzdW1lIGxhIGZvcm1hIGRlIGxhIGRpc3RyaWJ1Y2nDs24gY29uanVudGEsIHVzdWFsbWVudGUgdW5hIG5vcm1hbGlkYWQgbXVsdGl2YXJpYWRhLg0KDQo4LiBMbyBtw6FzIGNvbcO6biBlcyBkaXNlw7FhciBlbCBtb2RlbG8gdXRpbGl6YW5kbyB1biBkaWFncmFtYSBlc3RydWN0dXJhbC4gDQoNCjkuIEEgcGFydGlyIGRlIGVzdGUgZ3LDoWZpY28sIGVsIHNvZnR3YXJlIGdlbmVyYSBsYXMgZWN1YWNpb25lcyBkZWwgbW9kZWxvIGF1dG9tw6F0aWNhbWVudGUuDQoNCjEwLiBMYSBpbnRlcmZheiBncsOhZmljYSB0YW1iacOpbiBwZXJtaXRlIGHDsWFkaXIgZGlyZWN0YW1lbnRlIGVuIGVsIGRpYWdyYW1hIGxhcyByZXN0cmljY2lvbmVzIHF1ZSBzZSBpbXBvbmVuIGhhYml0dWFsbWVudGUgc29icmUgbG9zIHBhcsOhbWV0cm9zIHBhcmEgbG9zIHNpZ3VpZW50ZXMgcGFzb3MgZGVsIGFuw6FsaXNpcy4NCg0KPCEtLSAlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlIC0tPg0KPCEtLSBTZXBhcmFkb3IgLS0+DQoNCiMgSWRlbnRpZmljYWNpw7NuDQoNCiMjIyBJZGVudGlmaWNhY2nDs24gKGRlZmluaWNpw7NuKQ0KDQpVbiBtb2RlbG8gZXN0w6EgaWRlbnRpZmljYWRvIGN1YW5kbyB0b2RvcyB5IGNhZGEgdW5vIGRlIHN1cyBwYXLDoW1ldHJvcyBwdWVkZW4gc2VyIGVzdGltYWRvcyBkZSBtYW5lcmEgw7puaWNhIGEgcGFydGlyIGRlIGxhIG1hdHJpeiBkZSB2YXJpYW56YXMgeSBjb3ZhcmlhbnphcyBtdWVzdHJhbGVzLg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyMjIElkZW50aWZpY2FjacOzbiAoY29uZGljaW9uZXMpDQoNClNlIGRlYmVuIGN1bXBsaXIgbGFzIHNpZ3VpZW50ZXMgY29uZGljaW9uZXMgbmVjZXNhcmlhcyBwYXJhIGxhIGlkZW50aWZpY2FjacOzbjoNCg0KKipDb25kaWNpw7NuIDEuKioNCg0KU2kgdGVuZW1vcyAkSyQgdmFyaWFibGVzIG9ic2VydmFibGVzLCBlbnRvbmNlcywgbGEgY2FudGlkYWQgZGUgZGF0b3MgJHAkIChlcyBkZWNpciwgbGEgY2FudGlkYWQgZGUgdmFyaWFuemFzIHkgY292YXJpYW56YXMgbXVlc3RyYWxlcykgZGViZSBzZXIgc3VmaWNpZW50ZSBwYXJhIGVzdGltYXIgZWwgbsO6bWVybyBkZSBwYXLDoW1ldHJvcyAoJHEkKSBkZWwgbW9kZWxvLiBFc3RhIGVzIGxhIHJlZ2xhIGNsw6FzaWNhIGRlIGNvbnRlbyBzZWfDum4gbGEgY3VhbCBsb3MgZ3JhZG9zIGRlIGxpYmVydGFkIGRlYmVuIHNlciBtYXlvcmVzIG8gaWd1YWxlcyBhIGNlcm86IA0KJCRcdGV4dHtHcmFkb3MgZGUgbGliZXJ0YWR9IFw7PVw7IHAgLSBxIFw7PVw7IFxmcmFje0soSyArIDEpfXsyfSAtIHEgXDsgXGdlcSBcOyAwJCQNCg0KKipDb25kaWNpw7NuIDIuKioNCg0KRGViZSBkZWZpbmlyc2UgbGEgZXNjYWxhIGRlIGxvcyBlcnJvcmVzICh2w6lhc2UgbGEgZmlndXJhIFxAcmVmKGZpZzpSZWxhY2lvbjE0KSk6ICANCiAgICANCiAgMS4gTG9zIGNvZWZpY2llbnRlcyBkZSBzdXMgZWZlY3RvcyBkaXJlY3RvcyBzb2JyZSBsYXMgaW5kaWNhZG9yYXMgeSBsYXMgbGF0ZW50ZXMgZW5kw7NnZW5hcyBzZSBmaWphbiBlbiAxLiANCiAgICANCiANCioqQ29uZGljacOzbiAzLioqIA0KDQpUYW1iacOpbiBkZWJlIGRlZmluaWVyc2UgbGEgZXNjYWxhIGRlIGxvcyBmYWN0b3JlcyBsYXRlbnRlcy4gTGFzIG9wY2lvbmVzIGhhYml0dWFsZXMgc29uIGZpamFyIGVuIDEgKHbDqWFzZSBsYSBmaWd1cmEgXEByZWYoZmlnOlJlbGFjaW9uMTQpKToNCiAgICAgIA0KICAxLiBMYSBjYXJnYSBmYWN0b3JpYWwgYXNvY2lhZGEgYSB1bmEgZGUgbGFzIHZhcmlhYmxlcyBvYnNlcnZhZGFzIChkZSByZWZlcmVuY2lhKSBkZSBjYWRhIGxhdGVudGUgbyANCiAgICAgIA0KICAyLiBMYSB2YXJpYW56YSBkZSBsYXMgdmFyaWFibGVzIGxhdGVudGVzIGV4w7NnZW5hcy4NCg0KDQoNCjxjZW50ZXI+DQpgYGB7ciBSZWxhY2lvbjE0LCBlY2hvPUZBTFNFLCBmaWcuY2FwID0gIioqSWRlbnRpZmljYWNpw7NuIChjb25kaWNpb25lcyAyIHkgMykqKiIsIG91dC53aWR0aCA9ICI0MCUifQ0KIyBmaWcud2lkdGggPSAyMCAjIE5vIGZ1bmNpb25hIGVzdGEgb3BjaW9uIGVuIGVsIGNodW5rDQoNCiNodHRwOi8vemV2cm9zcy5jb20vYmxvZy8yMDE3LzA2LzE5L3RpcHMtYW5kLXRyaWNrcy1mb3Itd29ya2luZy13aXRoLWltYWdlcy1hbmQtZmlndXJlcy1pbi1yLW1hcmtkb3duLWRvY3VtZW50cy8NCiMgUGFnaW5hIDM1OSBkZSBSMjAxNS1GcmllbmRseQ0KDQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiUmVsYWNpb24xNC5wbmciKQ0KDQojT3RyYSBtYW5lcmEsIHBlcm8gIHNhbGUgZWwgY2FwdGlvbjoNCiM8Y2VudGVyPg0KIyFbKCNmaWc6RmlnLWNhcHRpb24pIE1pIGZpZ3VyYV0oTm9tYnJlLnBuZyl7d2lkdGg9NDAwcHh9DQojPC9jZW50ZXI+DQpgYGANCjwvY2VudGVyPg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyMjIElkZW50aWZpY2FjacOzbiAob2JzZXJ2YWNpb25lcykNCiANCg0KMS4gUXVlIHNlIGhheWEgaWRlbnRpZmljYWRvIGNvbXBsZXRhbWVudGUgZWwgbW9kZWxvIGRlIGVjdWFjaW9uZXMgZXN0cnVjdHVyYWxlcyAoU0VNKSBubyBhc2VndXJhIHF1ZSBlbCBtb2RlbG8gZGUgbWVkaWRhIHRhbWJpw6luIGxvIGVzdMOpLiANCg0KMi4gUGFyYSBsb3MgbW9kZWxvcyBkZSBtZWRpZGEgYmFzYWRvcyBlbiBhbsOhbGlzaXMgZmFjdG9yaWFsIGNvbmZpcm1hdG9yaW8gKEFGQykgY29udmVuY2lvbmFsZXMsIGRvbmRlIGNhZGEgaW5kaWNhZG9yIHNlIGFzb2NpYSDDum5pY2FtZW50ZSBhIHVuIGZhY3RvciB5IGxvcyBlcnJvcmVzIGRlIG1lZGljacOzbiBubyBlc3TDoW4gY29ycmVsYWNpb25hZG9zLCBlcyBuZWNlc2FyaW8gY3VtcGxpciBjb24gbGFzIHNpZ3VpZW50ZXMgcmVnbGFzIHF1ZSBzZSBkZXNjcmliZW4gZW4gbGEgc2VjY2nDs24gc2lndWllbnRlOg0KICAgIA0KICAgICsgUmVnbGEgZGUgbG9zIHRyZXMgaW5kaWNhZG9yZXMuDQogICAgDQogICAgKyBSZWdsYSBkZSBsb3MgZG9zIGluZGljYWRvcmVzLg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyMjIElkZW50aWZpY2FjacOzbiAoUmVnbGEgZGUgbG9zIHRyZXMgaW5kaWNhZG9yZXMpDQoNClNpIGVsIG1vZGVsbyB0aWVuZSB1bmEgc29sYSB2YXJpYWJsZSBsYXRlbnRlLCBkZWJlIGluY2x1aXIgYWwgbWVub3MgdHJlcyBpbmRpY2Fkb3JlcyAodsOpYXNlIGxhIGZpZ3VyYSBcQHJlZihmaWc6UmVsYWNpb24xNSkpLg0KDQo8Y2VudGVyPg0KYGBge3IgUmVsYWNpb24xNSwgZWNobz1GQUxTRSwgZmlnLmNhcCA9ICIqKklkZW50aWZpY2FjacOzbiAocmVnbGEgZGUgbG9zIHRyZXMgaW5kaWNhZG9yZXMpKioiLCBvdXQud2lkdGggPSAiNzAlIn0NCiMgZmlnLndpZHRoID0gMjAgIyBObyBmdW5jaW9uYSBlc3RhIG9wY2lvbiBlbiBlbCBjaHVuaw0KDQojaHR0cDovL3pldnJvc3MuY29tL2Jsb2cvMjAxNy8wNi8xOS90aXBzLWFuZC10cmlja3MtZm9yLXdvcmtpbmctd2l0aC1pbWFnZXMtYW5kLWZpZ3VyZXMtaW4tci1tYXJrZG93bi1kb2N1bWVudHMvDQojIFBhZ2luYSAzNTkgZGUgUjIwMTUtRnJpZW5kbHkNCg0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIlJlbGFjaW9uMTUucG5nIikNCg0KI090cmEgbWFuZXJhLCBwZXJvICBzYWxlIGVsIGNhcHRpb246DQojPGNlbnRlcj4NCiMhWygjZmlnOkZpZy1jYXB0aW9uKSBNaSBmaWd1cmFdKE5vbWJyZS5wbmcpe3dpZHRoPTQwMHB4fQ0KIzwvY2VudGVyPg0KYGBgDQo8L2NlbnRlcj4NCg0KDQoNCg0KPCEtLSAlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlIC0tPg0KPCEtLSBTZXBhcmFkb3IgLS0+DQoNCiMjIyBJZGVudGlmaWNhY2nDs24gKFJlZ2xhIGRlIGxvcyBkb3MgaW5kaWNhZG9yZXMpDQoNClNpIGVsIG1vZGVsbyBpbmNsdXllIGRvcyBvIG3DoXMgdmFyaWFibGVzIGxhdGVudGVzLCBjYWRhIHVuYSBkZSBlbGxhcyBkZWJlIHRlbmVyIGFsIG1lbm9zIGRvcyBpbmRpY2Fkb3JlcyAodsOpYXNlIGxhIGZpZ3VyYSBcQHJlZihmaWc6UmVsYWNpb24xNikpLg0KDQo8Y2VudGVyPg0KYGBge3IgUmVsYWNpb24xNiwgZWNobz1GQUxTRSwgZmlnLmNhcCA9ICIqKklkZW50aWZpY2FjacOzbiAocmVnbGEgZGUgbG9zIGRvcyBpbmRpY2Fkb3JlcykqKiIsIG91dC53aWR0aCA9ICI3MCUifQ0KIyBmaWcud2lkdGggPSAyMCAjIE5vIGZ1bmNpb25hIGVzdGEgb3BjaW9uIGVuIGVsIGNodW5rDQoNCiNodHRwOi8vemV2cm9zcy5jb20vYmxvZy8yMDE3LzA2LzE5L3RpcHMtYW5kLXRyaWNrcy1mb3Itd29ya2luZy13aXRoLWltYWdlcy1hbmQtZmlndXJlcy1pbi1yLW1hcmtkb3duLWRvY3VtZW50cy8NCiMgUGFnaW5hIDM1OSBkZSBSMjAxNS1GcmllbmRseQ0KDQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiUmVsYWNpb24xNi5wbmciKQ0KDQojT3RyYSBtYW5lcmEsIHBlcm8gIHNhbGUgZWwgY2FwdGlvbjoNCiM8Y2VudGVyPg0KIyFbKCNmaWc6RmlnLWNhcHRpb24pIE1pIGZpZ3VyYV0oTm9tYnJlLnBuZyl7d2lkdGg9NDAwcHh9DQojPC9jZW50ZXI+DQpgYGANCjwvY2VudGVyPg0KDQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSAtLT4NCjwhLS0gU2VwYXJhZG9yIC0tPg0KDQpgYGB7ciBldmFsPUZBTFNFLCBlY2hvPUZBTFNFfQ0KTk8gRVNUw4EgUEFSQUZSQVNFQURPDQoNCklkZW50aWZpY2FjacOzbiAoY29udC4pIA0KDQpSZWdsYXMgZGUgS2VubnksIEthc2h5IHkgQm9sZ2VyICgxOTk4KSBwYXJhIEFGQyBubyBjb252ZW5jaW9uYWxlcyAoaW5kaWNhZG9yZXMgY29uDQpjYXJnYXMgZmFjdG9yaWFsZXMgZW4gbWFzIGRlIHVuIGZhY3RvciB5L28gY29uIGVycm9yZXMgZGUgbWVkaWNpw7NuIGNvcnJlbGFjaW9uYWRvcyk6DQrvgqcgRW4gbW9kZWxvcyBjb24gZXNjYWxhcyB1bmlkaW1lbnNpb25hbGVzIChlc3RydWN0dXJhIGZhY3RvcmlhbCBzaW1wbGUpIGNvbiB0w6lybWlub3MgZGUNCmVycm9yIGNvcnJlbGFjaW9uYWRvczoNCu+CpyBQYXJhIGNhZGEgZmFjdG9yIGRlYmUgY3VtcGxpcnNlIGFsZ3VuYSBkZSBsYXMgc2lndWllbnRlcyBzaXR1YWNpb25lczoNCjEuIFRlbmVyIGFsIG1lbm9zIHRyZXMgaW5kaWNhZG9yZXMgY3V5b3MgZXJyb3JlcyBubyBlc3TDqW4gY29ycmVsYWNpb25hZG9zIGVudHJlIHPDrS4NCjIuIFRlbmVyIGFsIG1lbm9zIGRvcyBpbmRpY2Fkb3JlcyBjdXlvcyBlcnJvcmVzIG5vIGVzdMOpbiBjb3JyZWxhY2lvbmFkb3MgZW50cmUgc8OtIHkgcXVlOg0KYS4gTG9zIGVycm9yZXMgZGUgYW1ib3MgaW5kaWNhZG9yZXMgbm8gZXN0w6luIGNvcnJlbGFjaW9uYWRvcyBjb24gZWwgZXJyb3IgZGUgdW4gdGVyY2VyDQppbmRpY2Fkb3IgZGUgdW4gZmFjdG9yIGRpZmVyZW50ZS4NCmIuIFVuYSByZXN0cmljY2nDs24gZGUgaWd1YWxkYWQgc2VhIGltcHVlc3RhIHNvYnJlIGxhcyBjYXJnYXMgZmFjdG9yaWFsZXMgZGUgYW1ib3MgaW5kaWNhZG9yZXMuDQrvgqcgUGFyYSBjYWRhIHBhciBkZSBmYWN0b3JlcyBkZWJlIGhhYmVyIGFsIG1lbm9zIGRvcyBpbmRpY2Fkb3JlcywgdW5vIGRlIGNhZGEgZmFjdG9yLA0KY3V5b3MgdMOpcm1pbm9zIGRlIGVycm9yIG5vIGVzdMOpbiBjb3JyZWxhY2lvbmFkb3MuDQrvgqcgUGFyYSBjYWRhIGluZGljYWRvciBkZWJlIGhhYmVyIGFsIG1lbm9zIG90cm8gaW5kaWNhZG9yIChubyBuZWNlc2FyaWFtZW50ZSBkZWwNCm1pc21vIGZhY3RvcikgY29uIGVsIGN1YWwgZW50cmUgc3VzIGVycm9yZXMgbm8gaGF5YSBjb3JyZWxhY2nDs24uDQoNCu+CpyBFbiBtb2RlbG9zIGNvbiBlc2NhbGFzIG11bHRpZGltZW5zaW9uYWxlcyAoY29uIGluZGljYWRvcmVzIGNvbXBsZWpvcywgcXVlIHNhdHVyYW4gZW4NCm3DoXMgZGUgdW4gZmFjdG9yKSB5IGNvbiB0w6lybWlub3MgZGUgZXJyb3IgY29ycmVsYWNpb25hZG9zOg0K74KnIENhcmdhcyBmYWN0b3JpYWxlcy4gUGFyYSBjYWRhIGluZGljYWRvciBjb21wbGVqbyBkZWJlbiBjdW1wbGlyc2UgbGFzIHNpZ3VpZW50ZXMgZG9zIGNvbmRpY2lvbmVzOg0KMS4gQ2FkYSBmYWN0b3IgZW4gZWwgcXVlIHNhdHVyZSB1biBpbmRpY2Fkb3IgY29tcGxlam8gZGViZSBjdW1wbGlyIGFsZ3VuYSBkZSBsYXMgc2lndWllbnRlcyBzaXR1YWNpb25lczoNCjEpIFRlbmVyIGFsIG1lbm9zIHRyZXMgaW5kaWNhZG9yZXMgY3V5b3MgZXJyb3JlcyBubyBlc3TDqW4gY29ycmVsYWNpb25hZG9zIGVudHJlIHPDrS4NCjIpIFRlbmVyIGFsIG1lbm9zIGRvcyBpbmRpY2Fkb3JlcyBjdXlvcyBlcnJvcmVzIG5vIGVzdMOpbiBjb3JyZWxhY2lvbmFkb3MgZW50cmUgc8OtIHkgYWRlbcOhcyBxdWU6DQphLiBMb3MgZXJyb3JlcyBkZSBhbWJvcyBpbmRpY2Fkb3JlcyBubyBlc3TDqW4gY29ycmVsYWNpb25hZG9zIGNvbiBlbCBlcnJvciBkZSB1biB0ZXJjZXIgaW5kaWNhZG9yIGRlIG90cm8gZmFjdG9yLg0KYi4gVW5hIHJlc3RyaWNjacOzbiBkZSBpZ3VhbGRhZCBzZWEgaW1wdWVzdGEgc29icmUgbGFzIGNhcmdhcyBmYWN0b3JpYWxlcyBkZSBhbWJvcyBpbmRpY2Fkb3Jlcy4NCjIuIFRvZG8gcGFyIGRlIGZhY3RvcmVzIGVuIGxvcyBxdWUgc2F0dXJlIGVsIGluZGljYWRvciBjb21wbGVqbyBkZWJlIHRlbmVyIGFsIG1lbm9zIGRvcyBpbmRpY2Fkb3JlcywgdW5vIGRlIGNhZGENCmZhY3RvciwgY3V5b3MgdMOpcm1pbm9zIGRlIGVycm9yIG5vIGVzdMOpbiBjb3JyZWxhY2lvbmFkb3MuDQrvgqcgQ29ycmVsYWNpb25lcyBlbnRyZSBsb3MgZXJyb3JlcyBkZSBpbmRpY2Fkb3JlcyBjb21wbGVqb3MuIERlYmVuIGN1bXBsaXJzZSBsYXMgc2lndWllbnRlcyBkb3MNCmNvbmRpY2lvbmVzOg0KMS4gTGFzIG1pc21hcyByZWdsYXMgYW50ZXJpb3JlcyBxdWUgZGViZW4gY3VtcGxpcnNlIHBhcmEgY2FyZ2FzIGZhY3RvcmlhbGVzLg0KMi4gUGFyYSBjYWRhIGZhY3RvciBlbiBlbCBxdWUgY2FyZ3VlIHVuIGluZGljYWRvciBjb21wbGVqbyBkZWJlIGhhYmVyIGFsIG1lbm9zIHVuIGluZGljYWRvciBjb24gdW5hIHNvbGEgY2FyZ2ENCmZhY3RvcmlhbCBxdWUgbm8gZXN0w6kgY29ycmVsYWNpb25hZG8gY29uIGVsIGluZGljYWRvciBjb21wbGVqby4NCmBgYA0KDQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSAtLT4NCjwhLS0gU2VwYXJhZG9yIC0tPg0KDQojIEV2YWx1YWNpw7NuIGRlIGxhIGNhbGlkYWQgZGUgbGEgYmFzZSBkZSBkYXRvcw0KDQpFbiBsYXMgc2lndWllbnRlcyBzZWNjaW9uZXMgc2UgdmFuIGEgcHJvcG9uZXIgcmVjb21lbmRhY2lvbmVzIGNvbiByZXNwZWN0byBhIGxvcyBzaWd1aWVudGVzIHB1bnRvczogDQoNCjEuIFRhbWHDsW8gZGUgbGEgbXVlc3RyYS4NCg0KMi4gTXVsdGljb2xpbmVhbGlkYWQuDQoNCjMuIFZhbG9yZXMgZXh0cmVtb3MgdW5pdmFyaWFkb3MgeSBtdWx0aXZhcmlhZG9zLg0KDQo0Lk5vcm1hbGlkYWQgbXVsdGl2YXJpYWRhLg0KDQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSAtLT4NCjwhLS0gU2VwYXJhZG9yIC0tPg0KDQojIyMgVGFtYcOxbyBkZSBsYSBtdWVzdHJhDQoNClNlIHJlY29taWVuZGEgdGVuZXI6DQoNCjEuIEFsIG1lbm9zIDIwMCBvYnNlcnZhY2lvbmVzLiANCg0KMi4gQWwgbWVub3MgMTAgb2JzZXJ2YWNpb25lcyBwb3IgY2FkYSB2YXJpYWJsZSBvYnNlcnZhZGEuDQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSAtLT4NCjwhLS0gU2VwYXJhZG9yIC0tPg0KDQojIyMgTXVsdGljb2xpbmVhbGlkYWQNCg0KMS4gVW5hIGNvbGluZWFsaWRhZCBiaXZhcmlhZGEgZXh0cmVtYSAoJHIgPiAwLjg1JCkgeSBtdWx0aXZhcmlhZGEgcHVlZGUgaW5kaWNhciBsYSBwcmVzZW5jaWEgZGUgdmFyaWFibGVzIHJlZHVuZGFudGVzIHkgcXVlIGxhIG1hdHJpeiBkZSBjb3JyZWxhY2nDs24gbm8gc2VhIGRlZmluaWRhIHBvc2l0aXZhLiANCg0KMi4gRXMgaW1wb3J0YW50ZSBleGFtaW5hciBsb3MgY29lZmljaWVudGVzIGRlIGNvcnJlbGFjacOzbiwgYXPDrSBjb21vIGVsIGRldGVybWluYW50ZSB5IGxvcyBhdXRvdmFsb3JlcyBkZSBsYSBtYXRyaXogZGUgY29ycmVsYWNpw7NuLg0KDQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSAtLT4NCjwhLS0gU2VwYXJhZG9yIC0tPg0KDQojIyMgVmFsb3JlcyBleHRyZW1vcyB1bml2YXJpYWRvcyB5IG11bHRpdmFyaWFkb3MNCg0KMS4gU2UgZGViZW4gZWxpbWluYXIgb2JzZXJ2YWNpb25lcyBjdXlvcyB2YWxvcmVzIHNlIGRlc3bDrWVuIG3DoXMgZGUgMyBkZXN2aWFjaW9uZXMgZXN0w6FuZGFyIGRlIGxhIG1lZGlhLiANCg0KMi4gRW4gZWwgY2FzbyBkZSB2YWxvcmVzIGV4dHJlbW9zIG11bHRpdmFyaWFkb3MsIHNlIGRlYmVuIGNhbGN1bGFyIGxhcyBkaXN0YW5jaWFzIGRlIE1haGFsYW5vYmlzIHkgZGVzY2FydGFyIGxhcyBvYnNlcnZhY2lvbmVzIGNvbiBkaXN0YW5jaWFzIHNpZ25pZmljYXRpdmFzIGFsIDElLg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyMjIE5vcm1hbGlkYWQgbXVsdGl2YXJpYWRhDQoNCjEuIFNlIGRlYmVuIGV4YW1pbmFyIGxvcyBjb2VmaWNpZW50ZXMgZGUgYXNpbWV0csOtYSB5IGN1cnRvc2lzIHBhcmEgZXZhbHVhciBsYSBub3JtYWxpZGFkIHVuaXZhcmlhZGEuDQoNCjIuIFNlIGNvbnNpZGVyYW4gbm9ybWFsZXMgbGFzIHZhcmlhYmxlcyBjdXlvcyBjb2VmaWNpZW50ZXMgZW4gdmFsb3IgYWJzb2x1dG8gc2VhbiBtZW5vcmVzIGEgMyB5IDEwIHJlc3BlY3RpdmFtZW50ZS4gDQoNCjMuIEVzIGltcG9ydGFudGUgYXBsaWNhciBwcnVlYmFzIGRlIG5vcm1hbGlkYWQgdW5pdmFyaWFkYSAoY29tbyBsYSBwcnVlYmEgY29uanVudGEgZGUgYXNpbWV0csOtYSB5IGN1cnRvc2lzKSB5IGFsZ8O6biB0ZXN0IGRlIG5vcm1hbGlkYWQgbXVsdGl2YXJpYWRhIChjb21vIGVsIGRlIE1hcmRpYSkuIExvIG3DoXMgcmVsZXZhbnRlIGVzIHF1ZSBzZSBjdW1wbGEgbGEgY3VydG9zaXMgbXVsdGl2YXJpYWRhLg0KDQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSAtLT4NCjwhLS0gU2VwYXJhZG9yIC0tPg0KDQojIyMgTm9ybWFsaWRhZCBtdWx0aXZhcmlhZGE6IGNvbWVudGFyaW8NCg0KMS4gU2kgbGEgZGlzdHJpYnVjacOzbiBubyBlcyBub3JtYWwgcGVybyBwcmVzZW50YSBtZXNvY3VydG9zaXMsIGxhcyBwcm9waWVkYWRlcyBkZSBsb3MgZXN0aW1hZG9yZXMgZGUgbcOheGltYSB2ZXJvc2ltaWxpdHVkICBzb24gZXF1aXZhbGVudGVzIGEgbGFzIHF1ZSBzZSB0aWVuZW4gYmFqbyBsYSBoaXDDs3Rlc2lzIGRlIG5vcm1hbGlkYWQuIA0KDQoyLiBTaW4gZW1iYXJnbywgc2kgbGEgY3VydG9zaXMgZGlmaWVyZSBzaWduaWZpY2F0aXZhbWVudGUgZGUgbGEgbm9ybWFsLCBlc3RvcyBlc3RpbWFkb3JlcyBzb24gY29uc2lzdGVudGVzIHBlcm8gbm8gZWZpY2llbnRlcyBhc2ludMOzdGljYW1lbnRlLg0KDQozLiBMbyBhbnRlcmlvciBwdWVkZSBnZW5lcmFyIGRpZmljdWx0YWRlcyBlbiBsYXMgcHJ1ZWJhcyBkZSBzaWduaWZpY2FjacOzbiBpbmRpdmlkdWFsIGRlIGxvcyBwYXLDoW1ldHJvcyB5IGVuIGxhIHBydWViYSBkZSB2YWxpZGV6IGdsb2JhbCBkZWwgbW9kZWxvLg0KDQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSAtLT4NCjwhLS0gU2VwYXJhZG9yIC0tPg0KDQojIEVzdGltYWNpw7NuIGRlIHBhcsOhbWV0cm9zDQoNCiMjIyBPYmpldGl2b3MNCg0KMS4gRW4gbG9zIG1vZGVsb3MgZGUgZWN1YWNpb25lcyBlc3RydWN0dXJhbGVzIChTRU0pLCBlbCBvYmpldGl2byBlcyBhanVzdGFyIGxhcyBjb3ZhcmlhbnphcyBlbnRyZSBsYXMgdmFyaWFibGVzLiANCg0KMi4gRW4gbHVnYXIgZGUgcmVkdWNpciBsYSBkaWZlcmVuY2lhIGVudHJlIGxvcyB2YWxvcmVzIHByb25vc3RpY2Fkb3MgeSBsb3Mgb2JzZXJ2YWRvcyBhIG5pdmVsIGluZGl2aWR1YWwsIHNlIGJ1c2NhIG1pbmltaXphciBsYSBkaXNjcmVwYW5jaWEgZW50cmUgbGFzIGNvdmFyaWFuemFzIG9ic2VydmFkYXMgZW4gbGEgbXVlc3RyYSB5IGxhcyBjb3ZhcmlhbnphcyBwcmV2aXN0YXMgcG9yIGVsIG1vZGVsbyBlc3RydWN0dXJhbC4gDQoNCjMuIFBvciBlc3RhIHJhesOzbiwgZXN0b3MgbW9kZWxvcyB0YW1iacOpbiBzZSBjb25vY2VuIGNvbW8gKm1vZGVsb3MgZGUgZXN0cnVjdHVyYSBkZSBjb3ZhcmlhbnphKiAoQ292YXJpYW5jZSBTdHJ1Y3R1cmUgTW9kZWxzKS4NCg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyMjIEhpcMOzdGVzaXMgZnVuZGFtZW50YWwNCg0KMS4gTGEgaGlww7N0ZXNpcyBwcmluY2lwYWwgc29zdGllbmUgcXVlLCBzaSBlbCBtb2RlbG8gZXMgcHJlY2lzbywgbGEgbWF0cml6IGRlIHZhcmlhbnphcyB5IGNvdmFyaWFuemFzIGRlIGxhIHBvYmxhY2nDs24gcHVlZGUgc2VyIHJlcHJlc2VudGFkYSBkZSBtYW5lcmEgZXhhY3RhIG1lZGlhbnRlIHVuYSBjb21iaW5hY2nDs24gZGUgbG9zIHBhcsOhbWV0cm9zIGRlbCBtb2RlbG8uIA0KDQoyLiBFeHByZXNhZG8gZW4gbm90YWNpw7NuOg0KDQokJEhvOlw7ICBcU2lnbWEgXCw9XCwgXFNpZ21hKFx0aGV0YSkkJA0KDQozLiBFbiBsYSBleHByZXNpw7NuIGFudGVyaW9yLCAkXFNpZ21hJCByZXByZXNlbnRhIGxhIG1hdHJpeiBkZSB2YXJpYW56YXMgeSBjb3ZhcmlhbnphcyBkZSBsYSBwb2JsYWNpw7NuIGVudHJlIGxhcyB2YXJpYWJsZXMgb2JzZXJ2YWRhcywgeSAkXFNpZ21hKFx0aGV0YSkkIGVzIGxhIG1hdHJpeiBkZSB2YXJpYW56YXMgeSBjb3ZhcmlhbnphcyBvYnRlbmlkYSBjb21vIHVuYSBmdW5jacOzbiBkZSBsb3MgcGFyw6FtZXRyb3MgY29udGVuaWRvcyBlbiBlbCB2ZWN0b3IgJFx0aGV0YSQuDQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSAtLT4NCjwhLS0gU2VwYXJhZG9yIC0tPg0KDQojIEVzdGltYWNpw7NuOiBlamVtcGxvDQoNCg0KQ29uc2lkZXJlbW9zIGVsIHNpZ3VpZW50ZSBtb2RlbG8gZGUgcmVncmVzacOzbjogDQoNCiQkIHkgXDs9XDsgXGJldGEgeCArIFx2YXJlcHNpbG9uJCQNCg0KTGEgbWF0cml6IGRlIHZhcmlhbnphcyB5IGNvdmFyaWFuemFzIGVudHJlICRYJCB5ICRZJCBlczogDQoNCiQkXFNpZ21hIFw7PSBcOyBcYmVnaW57cG1hdHJpeH0NCiBWKFgpJiBDb3YoWCxZKVxcIA0KQ292KFgsWSkgJiBWKFkpDQpcZW5ke3BtYXRyaXh9JCQNCg0KQXBsaWNhbmRvIHByb3BpZWRhZGVzIGRlIHZhcmlhbnphIHkgY292YXJpYW56YSAoeSBzdXBvbmllbmRvIHF1ZSAkVihcdmFyZXBzaWxvbik9XHNpZ21hXjIkKSBzZSBwdWVkZSBkZW1vc3RyYXIgcXVlOg0KDQokJENvdihYLFkpIFw7PVw7IFxiZXRhIFwsVihYKSwgXHFxdWFkIFYoWSkgXDs9XDsgXGJldGFeMlwsIFYoWCkgXDsrXDsgVihcdmFyZXBzaWxvbilcOz1cOyBcYmV0YV4yXCwgVihYKSBcOytcOyBcc2lnbWFeMiQkDQoNCkFsIHJlZW1wbGF6YXIgZXN0YXMgZXhwcmVzaW9uZXMgZW4gbGEgbWF0cml6IGRlIHZhcmlhbnphcyB5IGNvdmFyaWFuemFzIHBvYmxhY2lvbmFsLCBzZSBwdWVkZSBleHByZXNhciBlbiB0w6lybWlub3MgZGUgbG9zIHBhcsOhbWV0cm9zIGRlbCBtb2RlbG8sIG9idGVuaWVuZG8gYXPDrSBsYSBtYXRyaXogaW1wbMOtY2l0YSBkZSB2YXJpYW56YXMgeSBjb3ZhcmlhbnphczoNCg0KDQokJFxTaWdtYShcdGhldGEpIFw7PSBcOyBcYmVnaW57cG1hdHJpeH0NClYoWCkgJiBcYmV0YSBcLFYoWClcXCANClxiZXRhIFwsVihYKSAmIFxiZXRhXjJcLCBWKFgpIFw7K1w7IFxzaWdtYV4yDQpcZW5ke3BtYXRyaXh9LCBccXF1YWQgXHRoZXRhPShcYmV0YSwgXHNpZ21hXjIpXlQkJA0KDQpMYSBlc3RpbWFjacOzbiBkZSBsb3MgcGFyw6FtZXRyb3Mgc2UgbGxldmEgYSBjYWJvIGJ1c2NhbmRvIG1heGltaXphciBsYSBwcmVjaXNpw7NuIGRlbCBtb2RlbG8uIFBhcmEgbG9ncmFyIGVzdG8sIHNlIGludGVudGEgcmVkdWNpciBhbCBtw61uaW1vIGxhcyBkaWZlcmVuY2lhcyBlbnRyZSBsYXMgdmFyaWFuemFzIHkgY292YXJpYW56YXMgb2JzZXJ2YWRhcywgJFMkLCB5IGxhcyBxdWUgZWwgbW9kZWxvIHJlcHJvZHVjZSwgJFNcYmlnKFx3aWRlaGF0e1x0aGV0YX1cYmlnKSQNCg0KPCEtLSAlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlIC0tPg0KPCEtLSBTZXBhcmFkb3IgLS0+DQoNCiMgRXN0aW1hY2nDs246IG3DqXRvZG9zDQoNCiMjIyBBbGd1bm9zIG3DqXRvZG9zIGRlIGVzdGltYWNpw7NuDQoNCkFsZ3Vub3MgZGUgbG9zIG3DqXRvZG9zIHF1ZSBleHBsaWNhcmVtb3MgZW4gc2VjY2lvbmVzIHNpZ3VpZW50ZXMsIHNvbjogDQoNCjEuIE3DoXhpbWEgdmVyb3NpbWlsaXR1ZCAoTUwpLg0KDQoyLiBNw61uaW1vcyBjdWFkcmFkb3Mgbm8gcG9uZGVyYWRvcyAoVUxTKS4NCg0KMy4gTcOtbmltb3MgY3VhZHJhZG9zIGdlbmVyYWxpemFkb3MgKEdMUykuDQoNCjQuIE3DrW5pbW9zIGN1YWRyYWRvcyBwb25kZXJhZG9zIChXTFMpIG8gZGUgZGlzdHJpYnVjacOzbiBhc2ludMOzdGljYW1lbnRlIGxpYnJlIChBREYpLiANCg0KPCEtLSAlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlIC0tPg0KPCEtLSBTZXBhcmFkb3IgLS0+DQoNCiMjIyBNw6F4aW1hIHZlcm9zaW1pbGl0dWQgKE1MKQ0KDQoxLiBFcyBsYSBtZWpvciBvcGNpw7NuIChwb3Igc3UgaW5zZXNnYWRleiB5IGVmaWNpZW5jaWEpIGJham8gbGEgc3Vwb3NpY2nDs24gZGUgbm9ybWFsaWRhZCBtdWx0aXZhcmlhZGEgeSBlcyBiYXN0YW50ZSByb2J1c3RhIGFudGUgcGVxdWXDsWFzIGRlc3ZpYWNpb25lcy4gDQoNCjIuIFNpIGxhIGZhbHRhIGRlIG5vcm1hbGlkYWQgZXMgc2V2ZXJhLCBzZSByZWNvbWllbmRhbiBlcnJvcmVzIGVzdMOhbmRhciByb2J1c3RvcyAoUXVhc2ktTWF4aW11bSBMaWtlbGlob29kLCBIdWJlci1XaGl0ZSkgbyBib290c3RyYXAuDQoNCg0KPCEtLSAlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlIC0tPg0KPCEtLSBTZXBhcmFkb3IgLS0+DQoNCiMjIyBNw61uaW1vcyBjdWFkcmFkb3Mgbm8gcG9uZGVyYWRvcyAoVUxTKS4NCg0KMS4gU2ltaWxhciBhIE9MUyBlbiByZWdyZXNpw7NuICgqT3JkaW5hcnkgTGVhc3QgU3F1YXJlcyogbyAqTcOtbmltb3MgQ3VhZHJhZG9zIE9yZGluYXJpb3MqKSwgcGVybyBhc3VtZSBub3JtYWxpZGFkLiANCg0KMi4gTm8gbmVjZXNpdGEgdW5hIG1hdHJpeiBkZSBjb3ZhcmlhbnphcyBkZWZpbmlkYSBwb3NpdGl2YS4gDQoNCjMuIFByb2R1Y2UgZXN0aW1hZG9yZXMgaW5zZXNnYWRvcywgYXVucXVlIG5vIHRhbiBlZmljaWVudGVzIGNvbW8gbG9zIGRlIE1MLiANCg0KNC4gUmVxdWllcmUgcXVlIHRvZGFzIGxhcyB2YXJpYWJsZXMgZXN0w6luIGVuIGxhIG1pc21hIGVzY2FsYS4gDQoNCjUuIFNlIHV0aWxpemEgcGFyYSBvYnRlbmVyIHVuYSBlc3RpbWFjacOzbiBwcmVsaW1pbmFyICh2YWxvcmVzIGluaWNpYWxlcyBwYXJhIE1MKS4NCg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyMjIE3DrW5pbW9zIGN1YWRyYWRvcyBnZW5lcmFsaXphZG9zIChHTFMpLg0KDQoxLiBGdW5jaW9uYSB0YW1iacOpbiBiYWpvIGxhIHN1cG9zaWNpw7NuIGRlIG5vcm1hbGlkYWQuIA0KDQoyLiBObyByZXF1aWVyZSBxdWUgbGFzIHZhcmlhYmxlcyB0ZW5nYW4gbGEgbWlzbWEgZXNjYWxhLg0KDQozLiBDb25zdW1lIG1lbm9zIHRpZW1wbyBkZSBjw7NtcHV0byBxdWUgTUwgeSBVTFMuDQoNCg0KPCEtLSAlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlIC0tPg0KPCEtLSBTZXBhcmFkb3IgLS0+DQoNCiMjIyBNw61uaW1vcyBjdWFkcmFkb3MgcG9uZGVyYWRvcyAoV0xTKSBvIGRlIGRpc3RyaWJ1Y2nDs24gYXNpbnTDs3RpY2FtZW50ZSBsaWJyZSAoQURGKS4gDQoNCjEuIE5vIHJlcXVpZXJlIG5vcm1hbGlkYWQsIHBlcm8gc8OtIHVuIGdyYW4gbsO6bWVybyBkZSBvYnNlcnZhY2lvbmVzIChtw61uaW1vIGVudHJlIDIwMCB5IDUwMCkuIA0KDQoyLiBFcyBsYSBtZWpvciBvcGNpw7NuIHBhcmEgbWF0cmljZXMgcG9saWPDs3JpY2FzLCB0ZXRyYWPDs3JpY2FzIG8gcG9saXNlcmlhbGVzLg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIFNlcGFyYWRvciAtLT4NCg0KIyBFc3RpbWFjacOzbjogZnVuY2nDs24gZGUgYWp1c3RlDQoNCjEuICoqTcOheGltYSB2ZXJvc2ltaWxpdHVkIChNTCkuKioNCg0KJCRGX3tNTH0gXDsgPSBcOyBcbG9nfFxTaWdtYShcdGhldGEpfCBcOytcOyB0clxsZWZ0KFNcLFxTaWdtYV57LTF9KFx0aGV0YSlccmlnaHQpIFw7LVw7IFxsb2d8U3wgLShwK3EpJCQNCg0KMi4gKipNw61uaW1vcyBjdWFkcmFkb3Mgbm8gcG9uZGVyYWRvcyAoVUxTKS4qKg0KDQokJEZfe1VMU30gXDsgPSBcOyBcZnJhY3sxfXsyfVwsIHRyXGxlZnQoW1NcLC1cLFxTaWdtYShcdGhldGEpXV4yXHJpZ2h0KSQkDQoNCjMuICoqTcOtbmltb3MgY3VhZHJhZG9zIGdlbmVyYWxpemFkb3MgKEdMUykuKioNCg0KJCRGX3tHTFN9IFw7ID0gXDsgXGZyYWN7MX17Mn1cLCB0clxsZWZ0KFxsZWZ0XHtbU1wsLVwsXFNpZ21hKFx0aGV0YSldV157LTF9XHJpZ2h0XH1eMlxyaWdodCkkJA0KDQo0LiAqKk3DrW5pbW9zIGN1YWRyYWRvcyBwb25kZXJhZG9zIChXTFMpKiogbyAqKmRlIGRpc3RyaWJ1Y2nDs24gYXNpbnTDs3RpY2FtZW50ZSBsaWJyZSAoQURGKS4qKiANCg0KJCRGX3tXTFN9IFw7ID0gXDsgXGZyYWN7MX17Mn1cLCB0clxsZWZ0KFxsZWZ0XHtbU1wsLVwsXFNpZ21hKFx0aGV0YSldVl57LTF9XHJpZ2h0XH1eMlxyaWdodCkkJA0KVsOpYXNlIGxhIGZpZ3VyYSBcQHJlZihmaWc6UmVsYWNpb24xOCkuDQoNCjxjZW50ZXI+DQpgYGB7ciBSZWxhY2lvbjE4LCBlY2hvPUZBTFNFLCBmaWcuY2FwID0gIioqRnVuY2lvbmVzIGRlIGJvbmRhZCBkZSBhanVzdGUqKiIsIG91dC53aWR0aCA9ICIxMDAlIn0NCiMgZmlnLndpZHRoID0gMjAgIyBObyBmdW5jaW9uYSBlc3RhIG9wY2lvbiBlbiBlbCBjaHVuaw0KDQojaHR0cDovL3pldnJvc3MuY29tL2Jsb2cvMjAxNy8wNi8xOS90aXBzLWFuZC10cmlja3MtZm9yLXdvcmtpbmctd2l0aC1pbWFnZXMtYW5kLWZpZ3VyZXMtaW4tci1tYXJrZG93bi1kb2N1bWVudHMvDQojIFBhZ2luYSAzNTkgZGUgUjIwMTUtRnJpZW5kbHkNCg0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIlJlbGFjaW9uMTgucG5nIikNCg0KI090cmEgbWFuZXJhLCBwZXJvICBzYWxlIGVsIGNhcHRpb246DQojPGNlbnRlcj4NCiMhWygjZmlnOkZpZy1jYXB0aW9uKSBNaSBmaWd1cmFdKE5vbWJyZS5wbmcpe3dpZHRoPTQwMHB4fQ0KIzwvY2VudGVyPg0KYGBgDQo8L2NlbnRlcj4NCg0KPCEtLSAlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlIC0tPg0KPCEtLSBTZXBhcmFkb3IgLS0+DQoNCiMgRXN0aW1hY2nDs24gY29uIHZhcmlhYmxlcyBvYnNlcnZhZGFzIG9yZGluYWxlcyBvIGNhdGVnw7NyaWNhcyANCg0KIyMjIE9ic2VydmFjaW9uZXMgZ2VuZXJhbGVzDQoNCjEuIFNpIGxvcyBpbmRpY2Fkb3JlcyBkZSBjYWRhIHZhcmlhYmxlIGxhdGVudGUgc29uIGluZGVwZW5kaWVudGVzIGVudHJlIHPDrSwgbm8gc2UgZGViZSB1dGlsaXphciBlbCBtw6l0b2RvIGRlIE3DoXhpbWEgVmVyb3NpbWlsaXR1ZCAoTUwpLiANCg0KMi4gRW4gc3UgbHVnYXIsIGVzIHJlY29tZW5kYWJsZSBlbXBsZWFyIGFsZ8O6biBtw6l0b2RvIHF1ZSB0ZW5nYSBlbiBjdWVudGEgbGEgZmFsdGEgZGUgbm9ybWFsaWRhZC4NCg0KPCEtLSAlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlIC0tPg0KPCEtLSBTZXBhcmFkb3IgLS0+DQoNCiMjIyBJbmRpY2Fkb3JlcyBlbiBlc2NhbGEgTGlrZXJ0IG8gc2ltaWxhcg0KDQoxLiBTaSBsb3MgaW5kaWNhZG9yZXMgc29uIHVuIGNvbmp1bnRvIGhvbW9nw6luZW8gZGUgdmFyaWFibGVzIGVuIGVzY2FsYSBMaWtlcnQgdSBvdHJhIGVzY2FsYSBwYXJlY2lkYSwgc2UgZGViZW4gYWdydXBhciBsb3MgaW5kaWNhZG9yZXMgKG1lZGlhbnRlIGxhIHN1bWEgbyBlbCBwcm9tZWRpbyBkZSBsb3MgcHVudGFqZXMpIHBhcmEgaW50ZW50YXIgbG9ncmFyIGxhIG5vcm1hbGlkYWQgeSBhc8OtIHBvZGVyIHV0aWxpemFyIE1MLiANCg0KMi4gRXN0ZSBlbmZvcXVlIHJlcXVpZXJlIHVuaWRpbWVuc2lvbmFsaWRhZCwgZXMgZGVjaXIsIHF1ZSBsb3MgaW5kaWNhZG9yZXMgYWdydXBhZG9zIG1pZGFuIHVuIHNvbG8gY29uc3RydWN0by4gDQoNCjMuIFBhcmEgdmVyaWZpY2FyIGVzdG8sIHByaW1lcm8gc2UgZGViZSByZWFsaXphciB1biBBbsOhbGlzaXMgRmFjdG9yaWFsIEV4cGxvcmF0b3JpbyAoQUZFKS4gDQoNCjQuIExhIGFncnVwYWNpw7NuIGRlIGluZGljYWRvcmVzIHB1ZWRlIGhhY2Vyc2UgZGUgbWFuZXJhIGFsZWF0b3JpYSBvIHBvciBjb250ZW5pZG8gc2ltaWxhci4NCg0KPCEtLSAlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlIC0tPg0KPCEtLSBTZXBhcmFkb3IgLS0+DQoNCiMjIyBNZXRvZG9sb2fDrWEgZGUgTXV0aMOpbiAoMTk4NCkgcGFyYSB2YXJpYWJsZXMgY29udGludWFzL2NhdGVnw7NyaWNhcyAoQ1ZNKQ0KDQoxLiBFbiBlc3RlIG3DqXRvZG8sIGxhcyB2YXJpYWJsZXMgb2JzZXJ2YWRhcyBwdWVkZW4gc2VyIGRlIGN1YWxxdWllciB0aXBvIChkaWNvdMOzbWljYXMsIG9yZGluYWxlcywgY29udGludWFzKS4gDQoNCjIuIFNlIHV0aWxpemEgdW5hIG1hdHJpeiBkZSBjb3JyZWxhY2lvbmVzIHBvbGljw7NyaWNhcyB5IGx1ZWdvIHNlIGVzdGltYSBjb24gV0xTIChXZWlnaHRlZCBMZWFzdCBTcXVhcmVzKSBvIEFERiAoQXN5bXB0b3RpY2FsbHkgRGlzdHJpYnV0aW9uIEZyZWUpLiANCg0KMy4gRXN0ZSBtw6l0b2RvIHJlcXVpZXJlIHVuYSBncmFuIGNhbnRpZGFkIGRlIGRhdG9zLiANCg0KNC4gU2kgc2UgcHJlc2VudGFuIHByb2JsZW1hcyBkZWJpZG8gYWwgdGFtYcOxbyBwZXF1ZcOxbyBkZSBsYSBtdWVzdHJhIG8gZmFsdGEgZGUgY29udmVyZ2VuY2lhLCBzZSBwdWVkZSBjb21iaW5hciBjb24gbcOpdG9kb3MgZGUgZXN0aW1hY2nDs24gcm9idXN0YS4NCg0KPCEtLSAlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlIC0tPg0KPCEtLSBTZXBhcmFkb3IgLS0+DQoNCiMgRXZhbHVhY2nDs24gZGVsIGFqdXN0ZQ0KDQojIyMgT2JzZXJ2YWNpb25lcw0KDQoxLiBTZSBleGFtaW5hIGxhIHNpZ25pZmljYW5jaWEgZGUgbG9zIGNvZWZpY2llbnRlcywgc2ltaWxhciBhIHVuIG1vZGVsbyBkZSByZWdyZXNpw7NuLCB5IHNlIHJldmlzYW4gbGFzIG1lZGlkYXMgZGUgYm9uZGFkIGRlIGFqdXN0ZS4gDQoNCjIuIE5pbmd1bmEgbWVkaWRhIHBvciBzw60gc29sYSBwcm9wb3JjaW9uYSB0b2RhIGxhIGluZm9ybWFjacOzbiBuZWNlc2FyaWEgcGFyYSBldmFsdWFyIGVsIG1vZGVsbywgcG9yIGxvIHF1ZSBnZW5lcmFsbWVudGUgc2UgdXRpbGl6YSB1biBjb25qdW50byBkZSBtZWRpZGFzIHF1ZSBzZSBpbmZvcm1hIHNpbXVsdMOhbmVhbWVudGUuDQoNCg0KPCEtLSAlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlIC0tPg0KPCEtLSBTZXBhcmFkb3IgLS0+DQoNCiMjIyBUaXBvcyBkZSBtZWRpZGFzIGRlIGFqdXN0ZQ0KDQpFeGlzdGVuIHRyZXMgdGlwb3MgZGUgZXN0YXMgbWVkaWRhczoNCg0KMS4gKipNZWRpZGFzIGFic29sdXRhczoqKiBFdmFsw7phbiBsb3MgcmVzaWR1b3MuDQoNCjIuICoqTWVkaWRhcyBkZSBhanVzdGUgY29tcGFyYXRpdm8gbyBpbmNyZW1lbnRhbDoqKiBDb21wYXJhbiBlbCBhanVzdGUgY29uIHJlc3BlY3RvIGEgb3RybyBtb2RlbG8gY29uIHVuIGFqdXN0ZSBpbmZlcmlvci4NCg0KMy4gKipNZWRpZGFzIGRlIGFqdXN0ZSBkZSBwYXJzaW1vbmlhOioqIFZhbG9yYW4gZWwgYWp1c3RlIGVuIHJlbGFjacOzbiBjb24gbGEgY2FudGlkYWQgZGUgcGFyw6FtZXRyb3MgdXRpbGl6YWRvcy4NCg0KYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NClxiZWdpbnt0YWJsZX1baHRdDQpcY2VudGVyaW5nDQpcYmVnaW57dGFidWxhcn17fGx8Y3xjfH0NClxobGluZQ0KXHRleHRiZntGaXQgTWVhc3VyZX0gJiBcdGV4dGJme0dvb2QgRml0fSAmIFx0ZXh0YmZ7QWNjZXB0YWJsZSBGaXR9IFxcDQpcaGxpbmUNCiRcY2hpXjIkICYgJDAgXGxlcSBcY2hpXjIgXGxlcSAyZGYkICYgJDJkZiBcbGVxIFxjaGleMiBcbGVxIDNkZiQgXFwNClxobGluZQ0KJHAkIHZhbHVlICYgJC4wNSA8IHAgXGxlcSAxLjAwJCAmICQuMDEgXGxlcSBwIFxsZXEgLjA1JCBcXA0KXGhsaW5lDQokXGNoaV4yL2RmJCAmICQwIFxsZXEgXGNoaV4yL2RmIFxsZXEgMiQgJiAkMiA8IFxjaGleMi9kZiBcbGVxIDMkIFxcDQpcaGxpbmUNClJNU0VBICYgJDAgXGxlcSBcdGV4dHtSTVNFQX0gXGxlcSAuMDUkICYgJC4wNSA8IFx0ZXh0e1JNU0VBfSBcbGVxIC4wOCQgXFwNClxobGluZQ0KJHAkIHZhbHVlIGZvciB0ZXN0IG9mIGNsb3NlIGZpdCAoUk1TRUEgJDwgLjA1JCkgJiAkLjEwIDwgcCBcbGVxIDEuMDAkICYgJC4wNSBcbGVxIHAgXGxlcSAuMTAkIFxcDQpcaGxpbmUNCkNvbmZpZGVuY2UgaW50ZXJ2YWwgKENJKSAmIGNsb3NlIHRvIFJNU0VBLCBsZWZ0IGJvdW5kYXJ5IG9mIENJID0gLjAwICYgY2xvc2UgdG8gUk1TRUEgXFwNClxobGluZQ0KU1JNUiAmICQwIFxsZXEgXHRleHR7U1JNUn0gXGxlcSAuMDUkICYgJDAgXGxlcSBcdGV4dHtTUk1SfSBcbGVxIC4xMCQgXFwNClxobGluZQ0KTkZJICYgJC45NSBcbGVxIFx0ZXh0e05GSX0gXGxlcSAxLjAwJCAmICQuOTAgXGxlcSBcdGV4dHtORkl9IDwgLjk1JCBcXA0KXGhsaW5lDQpOTkZJICYgJC45NyBcbGVxIFx0ZXh0e05ORkl9IFxsZXEgMS4wMCQgJiAkLjk1IFxsZXEgXHRleHR7Tk5GSX0gPCAuOTckIFxcDQpcaGxpbmUNClxobGluZQ0KVExJICYgJC45NyBcbGVxIFx0ZXh0e0NGSX0gXGxlcSAxLjAwJCAmICQuOTUgXGxlcSBcdGV4dHtDRkl9IDwgLjk3JCBcXA0KQ0ZJICYgJC45NyBcbGVxIFx0ZXh0e0NGSX0gXGxlcSAxLjAwJCAmICQuOTUgXGxlcSBcdGV4dHtDRkl9IDwgLjk3JCBcXA0KXGhsaW5lDQpHRkkgJiAkLjk1IFxsZXEgXHRleHR7R0ZJfSBcbGVxIDEuMDAkICYgJC45MCBcbGVxIFx0ZXh0e0dGSX0gPCAuOTUkIFxcDQpcaGxpbmUNCkFHRkkgJiAkLjkwIFxsZXEgXHRleHR7QUdGSX0gXGxlcSAxLjAwLCBcdGV4dHtjbG9zZSB0byBHRkl9JCAmICQuODUgXGxlcSBcdGV4dHtBR0ZJfSA8IC45MCwgXHRleHR7Y2xvc2UgdG8gR0ZJfSQgXFwNClxobGluZQ0KQUlDICYgXG11bHRpY29sdW1uezJ9e2N8fXtzbWFsbGVyIHRoYW4gQUlDIGZvciBjb21wYXJpc29uIG1vZGVsfSBcXA0KXGhsaW5lDQpDQUlDICYgXG11bHRpY29sdW1uezJ9e2N8fXtzbWFsbGVyIHRoYW4gQ0FJQyBmb3IgY29tcGFyaXNvbiBtb2RlbH0gXFwNClxobGluZQ0KRUNWSSAmIFxtdWx0aWNvbHVtbnsyfXtjfH17c21hbGxlciB0aGFuIEVDVkkgZm9yIGNvbXBhcmlzb24gbW9kZWx9IFxcDQpcaGxpbmUNClxlbmR7dGFidWxhcn0NClxjYXB0aW9ue0dvb2RuZXNzIG9mIEZpdCBJbmRpY2VzfQ0KXGVuZHt0YWJsZX0NCg0KYGBgDQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSAtLT4NCjwhLS0gU2VwYXJhZG9yIC0tPg0KDQojIyMgSW5kaWNlcyBkZSBhanVzdGUNCg0KMS4gVsOpYXNlIGxhIGZpZ3VyYSBcQHJlZihmaWc6UmVsYWNpb24xOSkuDQoNCjxjZW50ZXI+DQpgYGB7ciBSZWxhY2lvbjE5LCBlY2hvPUZBTFNFLCBmaWcuY2FwID0gIioqVGlwb3MgZGUgbWVkaWRhcyBkZSBhanVzdGUqKiIsIG91dC53aWR0aCA9ICI4MCUifQ0KIyBmaWcud2lkdGggPSAyMCAjIE5vIGZ1bmNpb25hIGVzdGEgb3BjaW9uIGVuIGVsIGNodW5rDQoNCiNodHRwOi8vemV2cm9zcy5jb20vYmxvZy8yMDE3LzA2LzE5L3RpcHMtYW5kLXRyaWNrcy1mb3Itd29ya2luZy13aXRoLWltYWdlcy1hbmQtZmlndXJlcy1pbi1yLW1hcmtkb3duLWRvY3VtZW50cy8NCiMgUGFnaW5hIDM1OSBkZSBSMjAxNS1GcmllbmRseQ0KDQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiUmVsYWNpb24xOS5wbmciKQ0KDQojT3RyYSBtYW5lcmEsIHBlcm8gIHNhbGUgZWwgY2FwdGlvbjoNCiM8Y2VudGVyPg0KIyFbKCNmaWc6RmlnLWNhcHRpb24pIE1pIGZpZ3VyYV0oTm9tYnJlLnBuZyl7d2lkdGg9NDAwcHh9DQojPC9jZW50ZXI+DQpgYGANCjwvY2VudGVyPg0KDQoNCjIuIEVsIGVzdGFkw61zdGljbyAkXGNoaV4yJCBkZWJlIHJlc3VsdGFyIG5vIHNpZ25pZmljYXRpdm8uDQoNCjMuIFNpIHJlc3VsdGEgc2lnbmlmaWNhdGl2bywgZW50b25jZXMsIGVsIG1vZGVsbyB0ZcOzcmljbyBwcm9wdWVzdG8gZGlmaWVyZSBkZSBtYW5lcmEgc2lnbmlmaWNhdGl2YSBkZSBsbyBxdWUgc2Ugb2JzZXJ2YSBlbiBsYSBtYXRyaXogZGUgdmFyaWFuemFzIHkgY292YXJpYW56YXMgZGUgbG9zIGRhdG9zLiANCg0KNC4gTGEgaGlww7N0ZXNpcyBudWxhLCBlbiBlc3RlIGNhc28sIGVzIHF1ZSBsb3MgZXJyb3JlcyBzb24gbnVsb3MuDQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSAtLT4NCjwhLS0gU2VwYXJhZG9yIC0tPg0KDQojIFJlLWVzcGVjaWZpY2FjacOzbiBkZWwgbW9kZWxvDQoNCjEuIEN1YW5kbyBlbCBhanVzdGUgbm8gZXMgc2F0aXNmYWN0b3Jpbywgc2UgYnVzY2EgcmVkZWZpbmlyIGVsIG1vZGVsby4NCg0KMi4gUGFyYSBlbGxvLCBzZSBleGFtaW5hbiBsb3Mgw61uZGljZXMgZGUgbW9kaWZpY2FjacOzbiBkZSBsb3MgY29lZmljaWVudGVzIHF1ZSBpbmljaWFsbWVudGUgc2UgYXN1bWllcm9uIGNvbW8gY2VybyAoZWZlY3RvcyBubyBpbmNsdWlkb3MgZW4gZWwgbW9kZWxvKS4NCg0KMy4gRXN0b3Mgw61uZGljZXMgaW5kaWNhbiBsYSByZWR1Y2Npw7NuIGVuIGVsIGVzdGFkw61zdGljbyAkXGNoaV4yJCBxdWUgc2UgcHJvZHVjaXLDrWEgc2kgZWwgY29lZmljaWVudGUgZnVlcmEgZXN0aW1hZG8uIA0KDQo0LiBVbiB2YWxvciBzdXBlcmlvciBhIDMuODQgKHZhbG9yIGNyw610aWNvIGRlIHVuYSAkXGNoaV4yJCBjb24gMSBncmFkbyBkZSBsaWJlcnRhZCB5ICRcYWxwaGE9MC4wNSQpIHN1Z2llcmUgcXVlIGxhIGluY2x1c2nDs24gZGVsIGVmZWN0byBhZGljaW9uYWwgY29ycmVzcG9uZGllbnRlIHJlc3VsdGFyw61hIGVuIHVuYSByZWR1Y2Npw7NuIGVzdGFkw61zdGljYW1lbnRlIHNpZ25pZmljYXRpdmEuDQoNCjUuIEVzIGRlY2lyLCB1biDDrW5kaWNlIGRlIG1vZGlmaWNhY2nDs24gbWF5b3Igc3VnaWVyZSBxdWUgbGEgaW5jbHVzacOzbiBkZWwgZWZlY3RvIGFkaWNpb25hbCBjb3JyZXNwb25kaWVudGUgbWVqb3JhcsOtYSBzaWduaWZpY2F0aXZhbWVudGUgZWwgYWp1c3RlIGRlbCBtb2RlbG8gYSBsb3MgZGF0b3MNCg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQo8IS0tIENhcMOtdHVsbyBFamVyY2ljaW9zIC0tPg0KDQojIEVqZXJjaWNpb3MNCg0KUGVuZGllbnRlDQoNCjwhLS0gJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgLS0+DQoNCjwhLS0gQ2Fww610dWxvIEJpYmxpb2dyYWbDrWEtLT4NCg0KDQojIEJpYmxpb2dyYWbDrWEgey51bmxpc3RlZCAudW5udW1iZXJlZH0NCiAgDQpDb25zdWx0YXIgZWwgZG9jdW1lbnRvIFtSUHVicyA6OiBBbsOhbGlzaXMgbXVsdGl2YXJpYWRvIChiaWJsaW9ncmFmw61hKV0oaHR0cHM6Ly9ycHVicy5jb20vaGxsaW5hcy9SX011bHRpdmFyaWFkb19CaWJsaW9ncmFmaWEpLg0KDQo8IS0tICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlIC0tPg0KDQombmJzcDsNCg0KDQombmJzcDsNCjxjZW50ZXI+DQp+fn4NCklmIHlvdSBmb3VuZCBhbnkgRVJST1JTIG9yIGhhdmUgU1VHR0VTVElPTlMsIHBsZWFzZSByZXBvcnQgdGhlbSB0byBteSBlbWFpbC4gVGhhbmtzLiAgDQp+fn4NCjwvY2VudGVyPg0KDQoNCg==