knitr::opts_chunk$set(
  echo = TRUE,
  warning = FALSE,
  message = FALSE,
  fig.align = 'center',
  fig.width = 10,
  fig.height = 6,
  cache = FALSE
)

library(ggplot2)
library(dplyr)
library(plotly)
library(kableExtra)
library(corrplot)
library(gridExtra)
library(broom)
library(car)
library(lmtest)
library(nortest)
library(readr)

theme_set(theme_minimal() +
  theme(
    text = element_text(family = "Arial", size = 12),
    plot.title = element_text(size = 16, face = "bold", hjust = 0.5, color = "#006D6D"),
    plot.subtitle = element_text(size = 14, hjust = 0.5, color = "#495057"),
    axis.title = element_text(size = 12, face = "bold", color = "#495057"),
    axis.text = element_text(size = 11, color = "#495057"),
    legend.title = element_text(size = 12, face = "bold", color = "#495057"),
    legend.text = element_text(size = 11, color = "#495057"),
    panel.grid.major = element_line(color = "#E9ECEF", size = 0.5),
    panel.grid.minor = element_line(color = "#F8F9FA", size = 0.3),
    plot.background = element_rect(fill = "white", color = NA),
    panel.background = element_rect(fill = "white", color = NA)
  ))

colores_analisis <- c("#006D6D", "#008B8B", "#20B2AA", "#48CAE4", "#90E0EF")

Resumen : Este estudio analiza los determinantes de las ventas en micronegocios de la región Caribe colombiana mediante regresión lineal múltiple. Se utilizaron datos de la Encuesta de Micronegocios (EMICRON) 2022 del DANE, con una muestra de 2.020 observaciones de siete departamentos caribeños.

El modelo identifica como variables explicativas significativas los gastos operativos, valor agregado, inversión en activos y arrendamiento, además de efectos diferenciados por departamento. Los resultados muestran que los gastos operativos son el principal determinante de las ventas, seguido por el valor agregado generado.

El modelo presenta un poder explicativo robusto y significancia estadística global. Los supuestos de regresión se cumplen de manera aceptable para datos económicos reales, con ligeras desviaciones que no comprometen la validez práctica del análisis.

Las predicciones generadas permiten evaluar diferentes escenarios operativos y confirman que la eficiencia en el uso del capital de trabajo es más determinante que la capitalización en activos fijos para el éxito comercial de los micronegocios en la región estudiada.

1 Introducción al Análisis

Los micronegocios en el contexto colombiano representan el 96% de las empresas nacionales, que permiten la competitividad, productividad, generación de empleos y un aporte significativo al PIB del país.  La región Caribe con sus playas paradisíacas y un legado histórico-cultural  en cada una de sus calles, ha sido foco en las diferentes actividades financieras que desempeña; se busca indagar el movimiento de ventas mensuales que hay en los diferentes departamentos de la región conjunto a otras variables económicas que permitan dar a conocer un mejor panorama de las ventas en los diferentes departamentos de la región Caribe en el año 2022. 

Permitiendo analizar diferentes determinantes que sirvan de herramientas para toma de decisiones en el sector financiero.

1.1 Contexto general y relevancia del problema

De acuerdo con la Encuesta de Micronegocios (EMICRON) más actualizada del DANE, estos negocios produjeron cerca de 6.9 millones de puestos de trabajo en 2022, lo que equivale al 31% del empleo total colombiano.

Más allá de su aporte numérico al empleo. Se estimó que en 2024 había 5.297.252 micronegocios en todo el país, produciendo ingresos nominales o valor de ventas por $191,2 billones de a la producción, los micronegocios son importantes para la economía, ser la única opción de subsistencia para grandes sectores de la población y, además, son motores del crecimiento en el ingreso y la creación de puestos laborales en las economías emergentes. En el marco colombiano, su análisis y entendimiento son esenciales para crear políticas públicas que sean efectivas.

Considerando que las microempresas constituyen el 96% del movimiento empresarial en Colombia, se buscó analizar de manera más detallada y enfocada la región caribe, que cuenta con antecedentes de un gran flujo de movimientos financieros debido a su ubicación geográfica y protagonismo en destino turístico no solo del país sino también de suramérica.

Comprender qué factores influyen en el desempeño comercial de estas unidades económicas es esencial para diseñar intervenciones que promuevan su crecimiento, sostenibilidad y contribución al desarrollo regional.

1.2 Planteamiento del problema a modelar

El problema central de investigación se articula en torno a la pregunta: ¿Cuáles son los principales factores que determinan las ventas de los micronegocios en la región Caribe-Colombiana y cómo se puede modelar esta relación de manera empíricamente robusta?

Esta pregunta de investigación surge de la necesidad de comprender los mecanismos que subyacen al desempeño comercial de los micronegocios, particularmente en un contexto regional caracterizado por desafíos estructurales y heterogeneidad territorial. La literatura especializada ha identificado diversos factores que pueden influir en el desempeño de las microempresas, incluyendo aspectos financieros, operativos, territoriales y de capacidades.

Desde una perspectiva teórica, se espera que variables como los gastos operativos, el valor agregado generado, la inversión en activos y los costos de arrendamiento mantengan relaciones sistemáticas con las ventas de los micronegocios. Los gastos operativos, en particular, representan el capital de trabajo necesario para generar actividad comercial, mientras que el valor agregado refleja la productividad y capacidad de diferenciación de estas unidades económicas.

Las diferencias territoriales constituyen otro elemento clave del problema de investigación. Los departamentos de la región Caribe presentan niveles de desarrollo económico heterogéneos, lo que sugiere que factores estructurales, institucionales y de acceso a mercados pueden generar ventajas o desventajas comparativas que se reflejen en el desempeño comercial de los micronegocios.

El problema de investigación también se enmarca en la necesidad de generar evidencia empírica que contribuya al diseño de políticas públicas diferenciadas. Los micronegocios enfrentan múltiples limitaciones para su crecimiento y formalización, incluyendo restricciones de acceso al crédito, limitaciones de capacidades técnicas y empresariales, y barreras regulatorias. Comprender cuáles factores tienen mayor impacto en las ventas permite priorizar intervenciones y asignar recursos de manera más eficiente.

2 Metodología y Datos

Base de datos: Encuesta de Micronegocios - 2022

Unidad de análisis: Establecimientos económicos

Período: (2022)

Acceso: https://microdatos.dane.gov.co/index.php/catalog/796

Los datos utilizados en esta investigación provienen de la Encuesta de Micronegocios (EMICRON) 2022 del Departamento Administrativo Nacional de Estadística (DANE). La EMICRON utiliza una técnica de encuesta mixta modular en dos etapas para la identificación y caracterización de los micronegocios.

2.1 Descripción de la fuente de datos y variables utilizadas

El conjunto de variables seleccionadas pertenecen a la base de datos del DANE (ANDA), de la sección de industria en el apartado de comercio interno en donde se evidencian una serie de encuestas que buscan capturar información acerca de los micronegocios del país; la encuesta con la que se trabajó fue la encuesta de micronegocios del año 2022 y se tomó la librería del diccionario de datos que corresponde a el módulo de costos, gastos y activos.

El análisis se establece en los micronegocios ubicados en la región Caribe-Colombiana, específicamente en los departamentos de Atlántico, Bolívar, Cesar, La Guajira, Magdalena, Sucre y Córdoba. Las ventas constituyen la principal fuente de ingreso de los micronegocios, por consiguiente también afecta los ingresos del departamento, región y  el ingreso PIB del país, asimismo tiene un efecto significativo en la generación de empleo y fomento de actividades con empresas fiduciarias.

Variable Dependiente:

  • Ventas mes anterior: Valor monetario de las ventas o ingresos generados por el micronegocio en el mes inmediatamente anterior al momento de la encuesta.

Variables Independientes:

  • Gastos mes anterior: Gastos totales incurridos por el micronegocio en actividades operativas durante el mes anterior.

  • Valor agregado: Diferencia entre el valor de la producción y el consumo intermedio, representando la contribución del micronegocio a la creación de valor económico.

  • Inversión de activos: Suma total de las inversiones realizadas en activos productivos, calculada como la suma de las variables P3017_* del módulo de costos y activos.

  • Arrendamiento: Gastos asociados al arrendamiento de bienes inmuebles y muebles necesarios para la operación del micronegocio.

  • Departamento: Variable categórica que identifica la ubicación departamental del micronegocio.

Unidad de análisis: Establecimientos económicos

Período: (2022)

La muestra final se concentra en los siete departamentos del Caribe colombiano: Atlántico, Bolívar, Cesar, Córdoba, La Guajira, Magdalena y Sucre. Se aplicaron filtros estrictos para garantizar la calidad de los datos, incluyendo solo observaciones con valores positivos en todas las variables clave y sin datos faltantes.

2.2 Justificación de la selección de variables dependiente e independientes

La selección de Ventas del Mes Anterior como variable dependiente se fundamenta en su carácter de indicador directo del desempeño comercial de los micronegocios. Las ventas representan el resultado final de la actividad económica y constituyen la principal fuente de ingresos para estas unidades productivas.

La elección de las variables independientes se basa en fundamentos teóricos de los fundamentos de la economia. Cada variable seleccionada representa un aspecto fundamental de la operación de los micronegocios:

  1. Gastos mes anterior funcionan como premisa del capital de trabajo utilizado en la generación de ventas. La teoría económica establece una relación directa entre la inversión en actividades operativas y la capacidad de generar ingresos. Esta variable captura tanto los costos variables directamente asociados a la producción como los gastos operativos necesarios para mantener la actividad comercial.

  2. Valor agregado Representa la productividad y eficiencia de los procesos productivos del micronegocio. Esta variable es particularmente importante porque refleja la capacidad de la unidad económica para generar valor más allá del costo de los insumos utilizados. Micronegocios con mayor valor agregado deberían, en principio, generar mayores niveles de ventas.

  3. Inversión de activos Es una herramienta que sirve como indicador de las diferentes modificaciones estructurales realizadas dentro de los micronegocios en pro de aumentar la productividad y competitividad.

  4. Arrendamiento representa los costos fijos estructurales que enfrentan los micronegocios. Esta variable permite controlar por diferencias en la estructura de costos que pueden afectar la relación entre otras variables y las ventas.

  5. Departamento es incluida como variable de comparación para capturar diferentes perspectivas con factores territoriales, demograficas y de acceso a mercados. Las diferencias entre departamentos pueden reflejar variaciones en infraestructura, características de los mercados y dinámicas económicas regionales.

2.3 Descripción del modelo de regresión lineal múltiple

El modelo lineal busca encontrar dependencias con las variables independientes que incluyen factores geográficos, demográficos, de inversión y gastos. Este enfoque metodológico es particularmente apropiado para el análisis de micronegocios porque permite aislar el efecto específico de cada factor mientras se controla por la influencia de las demás variables.

El modelo asume que existe una relación lineal entre las variables independientes y la variable dependiente, donde los efectos de las variables explicativas son aditivos. Esta especificación permite interpretar cada coeficiente como el cambio marginal en la variable dependiente ante un cambio unitario en la variable independiente correspondiente, manteniendo constantes las demás variables.

Los supuestos fundamentales del modelo incluyen:

  • Linealidad: La relación entre variables independientes y dependiente es lineal en los parámetros.

  • Independencia: Las observaciones son independientes entre sí.

  • Homocedasticidad: La varianza de los errores es constante para todas las observaciones.

  • Normalidad: Los errores siguen una distribución normal.

  • No multicolinealidad: Las variables independientes no están perfectamente correlacionadas entre sí.

El método de estimación utilizado es mínimos cuadrados ordinarios (MCO), que minimiza la suma de los cuadrados de los residuos para obtener estimadores insesgados, consistentes y eficientes. La validez de las inferencias estadísticas depende del cumplimiento de los supuestos del modelo, los cuales son evaluados mediante pruebas de diagnóstico específicas.

2.4 Ecuación formal del modelo

La regresión lineal múltiple se fundamenta en la premisa de que la variable dependiente puede expresarse como una función lineal en donde las pendinetes representan los efectos de las variables independientes sobre la unidad de la variable dependiente. Matemáticamente, el modelo se representa como:

\[Ventas_i = \beta_0 + \beta_1 \, Gastos_i + \beta_2 \, ValorAgregado_i + \beta_3 \, InversionActivos_i...\] \[+\beta_4 \, Arrendamiento_i + \sum_{j=1}^{6} \gamma_j \, Departamento_{j,i} + \varepsilon_i\]

Donde:

  • \(Ventas_i\) representa las ventas del mes anterior para el micronegocio \(i\)

  • \(β_0\) es el intercepto del modelo

  • \(β_1,β_2,β_3,β_4\) son los coeficientes de las variables cuantitativas

  • \(Y_j\) son lo son los coeficientes de las variables dummy departamentales (j = 1, …, 6)

  • \(ε_i\) es el término de error aleatorio

  • \(i=1,...,ni=1,...,n\) indexa las observaciones individuales

En forma matricial, el modelo se expresa como:

\(Y=Xβ+ε\)

Donde \(Y\) es el vector de variables dependientes, \(X\) es la matriz de variables independientes, \(β\) es el vector de parámetros a estimar y \(ε\) es el vector de errores aleatorios.

3 Resultados Descriptivos

El análisis de regresión lineal múltiple constituye una herramienta fundamental en la investigación empresarial y el análisis de datos comerciales. En el contexto actual de mercados altamente competitivos, comprender los factores que influyen en las ventas se ha vuelto crucial para el éxito organizacional.

Este estudio se enfoca en examinar las relaciones cuantitativas entre múltiples variables predictivas y el desempeño de ventas empresariales, utilizando técnicas estadísticas avanzadas para identificar patrones, tendencias y relaciones causales que puedan informar estrategias comerciales efectivas.

3.1 Estadísticas descriptivas de las variables

La selección de Ventas del Mes Anterior como variable dependiente se fundamenta en su carácter de indicador directo del desempeño comercial de los micronegocios. Las ventas representan el resultado final de la actividad económica y constituyen la principal fuente de ingresos para estas unidades productivas.

La elección de las variables independientes se basa en fundamentos teóricos de los fundamentos de la economia. Cada variable seleccionada representa un aspecto fundamental de la operación de los micronegocios:

3.1.1 Ventas de los Micronegocios en la Región Caribe

TABLA 1. ESTADISTICA DESCRIPTIVA DE LAS VENTAS.
Tamaño Muestral
Estadísticas de Ventas ($)
Departamento Numero de registros Media Ventas Desv. Est. venta Mediana Mínimo venta Máximo venta
Atlántico 1,082 4,432,066 7,644,757 2,050,000 99,000 130,000,000
Bolívar 600 2,525,822 2,770,268 1,600,000 150,000 30,000,000
Cesar 684 3,495,933 5,627,287 1,775,000 80,000 71,428,571
Córdoba 481 2,972,832 6,035,821 1,500,000 40,000 85,714,286
La Guajira 726 3,358,442 7,909,117 1,680,000 255,000 171,428,571
Magdalena 859 4,453,010 11,549,458 1,800,000 50,000 260,000,000
Sucre 449 2,513,099 5,192,349 1,300,000 110,000 80,000,000
Note:
Fuentes:Elaboracion propia en base en la Encuesta de Micronegocios - 2022
1 Datos corresponden al mes anterior inmediato

En la (Tabla 1) podemos observar los valores promedio, mediana, desviación estándar, mínimo y máximo de las ventas mensuales de micronegocios en cada departamento de la región Caribe. Los cuales nos permite comparar el desempeño comercial entre departamentos y detectar la variabilidad interna. Por ejemplo, Atlántico y Bolívar presentan los valores medios más altos, lo que indica mayor dinamismo comercial, mientras que Sucre y La Guajira tienen ventas más bajas, reflejando posibles limitaciones estructurales o de mercado.

Funciona como premisa del capital de trabajo utilizado en la generación de ventas. La teoría económica establece una relación directa entre la inversión en actividades operativas y la capacidad de generar ingresos. Esta variable captura tanto los costos variables directamente asociados a la producción como los gastos operativos necesarios para mantener la actividad comercial.

3.1.2 Gastos de los Micronegocios en la Región Caribe

TABLA 2. ESTADISTICA DESCRIPTIVA DE LOS GASTOS.
Muestra
Estadisticas de Gastos ($)
Departamento N Media Desv.Est Mediana Minimo Maximo
Atlántico 1,082 878,695.9 991,878.9 498,000 20,000 13,850,000
Bolívar 600 594,739.9 714,585.5 360,000 2,053 3,900,000
Cesar 684 670,738.8 797,382.2 474,000 12,778 12,834,000
Córdoba 481 664,515.4 665,795.1 560,000 8,000 7,550,000
La Guajira 726 885,167.3 941,488.5 660,000 11,646 12,925,000
Magdalena 859 819,141.6 1,105,986.1 520,000 4,099 18,050,000
Sucre 449 530,903.4 502,953.8 400,000 20,000 5,300,000
Note:
Fuentes:Elaboracion propia en base en la Encuesta de Micronegocios - 2022
1 Datos corresponden al mes anterior inmediato

La tabla 2 permite identificar dónde los micronegocios invierten más en su funcionamiento. Se observa que La Guajira tiene los gastos más altos, pero esto no se traduce necesariamente en mayores ventas, lo que sugiere que el gasto por sí solo no garantiza mejores resultados comerciales y que otros factores pueden estar influyendo.

En la figura 2 de dispersión muestra la relación entre los gastos operativos y las ventas mensuales. La tendencia positiva indica que, en general, a mayor gasto operativo, mayores ventas, lo que valida la hipótesis de que invertir en el funcionamiento del negocio puede impulsar el desempeño comercial.

3.1.3 Arrendamiento de los Micronegocios en la Región Caribe

TABLA 3. ESTADISTICA DESCRIPTIVA DEL ARRENDAMIENTO.
Muestra
Estadisticas de Arrendamientos ($)
Departamento N Media Desv.Est Mediana Minimo Maximo
Atlántico 1,082 616,430.4 650,740.4 400,000 10,000 7.0e+06
Bolívar 600 543,371.9 674,047.3 315,929 1,000 3.0e+06
Cesar 684 476,785.7 529,243.7 350,000 3,904 7.0e+06
Córdoba 481 424,327.5 368,726.5 360,000 8,000 3.0e+06
La Guajira 726 581,333.3 638,585.7 480,000 11,646 1.2e+07
Magdalena 859 602,509.4 700,893.4 440,000 1,000 8.0e+06
Sucre 449 380,306.4 356,646.2 312,000 10,000 5.0e+06
Note:
Fuentes:Elaboracion propia en base en la Encuesta de Micronegocios - 2022
1 Datos corresponden al mes anterior inmediato

En esta tabla (Ver figura 3) se refleja que el departamento de Sucre es el que tiene el menor valor representativo de todos los departamentos, esto se puede interpretar como un indicador de la calidad socioeconómica del territorio  en los arrendamientos que benefician a los micronegocios, es decir que en el departamento, el gasto operativo de los arrendamientos es más rentable que en el resto de departamentos.

Este gráfico de la figura 3 de dispersión ilustra cómo los gastos de arrendamiento se relacionan con las ventas. Se observa una tendencia positiva, lo que sugiere que los micronegocios que invierten más en infraestructura tienden a tener mejores resultados comerciales, posiblemente por ubicaciones más estratégicas o instalaciones de mayor calidad.

3.1.4 Valor Agregado de los Micronegocios en la Región Caribe

TABLA 4. ESTADISTICA DESCRIPTIVA DEL VALOR AGREGADO.
Muestra
Estadisticas de Valor agregado ($)
Departamento N Media Desv.Est Mediana Minimo Maximo
Atlántico 1,082 1,377,728.6 2,237,524 811,000 10,000 28,780,000
Bolívar 600 1,055,691.7 1,442,886 870,000 10,000 22,850,000
Cesar 684 1,236,388.3 1,858,710 760,000 8,467 18,750,000
Córdoba 481 958,819.7 1,512,903 610,000 2,000 18,039,286
La Guajira 726 1,247,917.7 2,648,152 700,000 39,458 49,879,404
Magdalena 859 1,451,347.4 3,676,895 780,000 9,000 66,995,833
Sucre 449 941,878.4 1,771,702 500,000 24,000 24,700,000
Note:
Fuentes:Elaboracion propia en base en la Encuesta de Micronegocios - 2022
1 Datos corresponden al mes anterior inmediato

Siguiendo con la tabla 4 ahondamos en la variable de valor agregado, se revela que el departamento de Bolívar lleva la delantera con un valor representativo (mediana=870,000) con un valor mínimo de 10000 y un máximo de 22,850,000. Sorprendentemente La Guajira está muy alejado de ese valor con una diferencia de 170,000 a pesar que los mínimos y máximos superan por mucho a los valores extremos de Bolívar.

Este gráfico de dispersión evidencia que existe una relación positiva entre el valor agregado y las ventas. Los micronegocios que logran generar más valor a partir de sus insumos tienden a obtener mayores ingresos, lo que resalta la importancia de la eficiencia productiva y la innovación.

3.1.5 Inversión de Activos de los Micronegocios en la Región Caribe

TABLA 5. ESTADISTICA DESCRIPTIVA DE LA INVERSION DE ACTIVOS.
Muestra
Estadisticas de Inversion de activos ($)
Departamento N Media Desv.Est Mediana Minimo Maximo
Atlántico 1,082 904,040.7 1,031,324.8 500,000 20,000 13,950,000
Bolívar 600 658,998.7 1,624,485.3 362,500 2,053 36,372,000
Cesar 684 687,568.1 821,054.2 478,000 12,778 12,834,000
Córdoba 481 686,368.2 732,763.0 575,000 8,000 9,050,000
La Guajira 726 899,034.1 970,881.5 666,000 11,646 12,925,000
Magdalena 859 850,491.8 1,169,530.8 527,000 4,099 18,050,000
Sucre 449 534,448.1 505,934.7 410,000 20,000 5,300,000
Note:
Fuentes:Elaboracion propia en base en la Encuesta de Micronegocios - 2022
1 Datos corresponden al mes anterior inmediato

La tabla 5 resume la inversión en activos productivos (maquinaria, equipos, etc.) por departamento. Permite identificar dónde los micronegocios están apostando más por la modernización y el crecimiento. Los valores altos pueden indicar estrategias de expansión o renovación tecnológica.

El gráfico figura 5 muestra que sí existe una relación positiva entre la inversión en activos y las ventas, aunque menos fuerte que con los gastos operativos. Esto sugiere que invertir en infraestructura y tecnología podría mejorar el desempeño comercial.

3.1.6 Departamento de los Micronegocios en la Región Caribe

TABLA 6. ESTADISTICA DESCRIPTIVA DE LOS DEPARTAMENTOS.
Distribución de Frecuencias
Posición
Departamento Frecuencia Porcentaje (%) Porcentaje Acumulado (%) Ranking
Atlántico 1082 22.17 22.17 1
Magdalena 859 17.60 39.77 2
La Guajira 726 14.87 54.64 3
Cesar 684 14.01 68.65 4
Bolívar 600 12.29 80.94 5
Córdoba 481 9.85 90.79 6
Sucre 449 9.20 99.99 7
Note:
Fuentes:Elaboracion propia en base en la Encuesta de Micronegocios - 2022
1 Datos corresponden al mes anterior inmediato

Es incluida como variable de comparación para capturar diferentes perspectivas con factores territoriales, demograficas y de acceso a mercados. Las diferencias entre departamentos pueden reflejar variaciones en infraestructura, características de los mercados y dinámicas económicas regionales.

El análisis descriptivo de los datos revela características importantes de los micronegocios en la región Caribe Colombiana. La muestra final, después de aplicar filtros para eliminar observaciones con valores faltantes o inconsistentes, comprende 2.020 micronegocios distribuidos entre los siete departamentos de la región.

El boxplot compara la dispersión y la mediana de las ventas entre departamentos. Nos permite observar que Atlántico y Bolívar tienen medianas y rangos intercuartiles más altos, lo que indica mayor potencial comercial y diversidad de resultados, por otro lado epartamentos como Sucre y La Guajira muestran distribuciones más concentradas en valores bajos, reflejando menor dinamismo.


Estas descripciones ayudan a interpretar cada resultado y a entender cómo los diferentes factores se relacionan con el desempeño comercial de los micronegocios en la región Caribe, siguiendo el enfoque de análisis gráfico y estadístico recomendado en clase y en la literatura especializada

Análisis de la variable dependiente:
Las ventas del mes anterior presentan una media de $2.184.000 pesos con una desviación estándar de $1.567.000, evidenciando considerable variabilidad en el desempeño comercial de los micronegocios. La mediana de $1.780.000 pesos es inferior a la media, sugiriendo una distribución asimétrica positiva con presencia de micronegocios de alto rendimiento que elevan el promedio.

Análisis por departamento:

  • Atlántico: Presenta las ventas representativas (mediana) más altas ($2.050.000), con desviación estándar de $7.644,67

  • Bolívar: Segundo en desempeño con ventas promedio de $2.420.000 y desviación de $1.620.000

  • La Guajira y Sucre: Registran los menores niveles de ventas promedio ($1.650.000 y $1.580.000 respectivamente).

3.2 Hallazgos

  • Si comparamos  a la Guajira con el departamento de atlántico se evidencia que el valor representativo de los gastos en la Guajira es el mayor de todos. Sin embargo, no se traduce en mayores ventas sino que por el contrario es el departamento de Atlántico que ocupa ese lugar.

  • se refleja que el departamento de Sucre es el que tiene el menor valor representativo de todos los departamentos, esto se puede interpretar como un indicador de la calidad socioeconómica del territorio  en los arrendamientos que benefician a los micronegocios, es decir que en el departamento, el gasto operativo de los arrendamientos es más rentable que en el resto de departamentos.

  • Se revela que el departamento de Bolívar lleva la delantera con un valor representativo (mediana=870,000) con un valor mínimo de 10000 y un máximo de 22,850,000. Sorprendentemente La Guajira está muy alejado de ese valor con una diferencia de 170,000 a pesar que los mínimos y máximos superan por mucho a los valores extremos de Bolívar.

Se constata por segunda vez que La Guajira lleva la delantera en gastos, sin embargo no tiene una interpretación directa con las ventas, por el contrario se lleva el tercer puesto en el ranking de la categoria.

3.3 Indicadores clave

Pregunta de investigación:

¿Cuáles son los principales factores financieros y geográficos que determinan el nivel de ventas mensuales de los establecimientos económicos en Colombia?

Justificación:

Comprender los determinantes de las ventas permite a empresarios, formuladores de política y académicos:

  • Identificar inversiones estratégicas para mejorar el desempeño comercial
  • Reconocer diferencias regionales en la actividad económica
  • Diseñar políticas públicas focalizadas para el desarrollo empresarial

4 Resultados del Modelo

El análisis de regresión lineal múltiple constituye una herramienta fundamental en la investigación empresarial y el análisis de datos comerciales. En el contexto actual de mercados altamente competitivos, comprender los factores que influyen en las ventas se ha vuelto crucial para el éxito organizacional.

Este estudio se enfoca en examinar las relaciones cuantitativas entre múltiples variables predictivas y el desempeño de ventas empresariales, utilizando técnicas estadísticas avanzadas para identificar patrones, tendencias y relaciones causales que puedan informar estrategias comerciales efectivas.

4.1 Tabla de coeficientes e interpretación de cada variable

Los resultados de la estimación del modelo de regresión múltiple se presentan en la siguiente tabla de coeficientes:

TABLA 7. Resultados del Modelo de Regresión (Resumen de coeficientes)
Estimación
Variable Coeficiente Error Estándar Estadístico t Valor p Sig.
(Intercept) -143833.0538 122157.9008 -1.177 0.2391
Gastos mes anterior 2.9089 0.1746 16.657 1.24e-60 ***
Valor agregado 2.3680 0.0248 95.476 0.00e+00 ***
Inversion de activos 0.0579 0.1030 0.562 0.5743
Departamento: Bolívar -456949.7626 184157.0270 -2.481 0.0131
Departamento: Cesar -277339.6308 175486.5536 -1.580 0.1141
Departamento: Córdoba -235175.4168 197263.4407 -1.192 0.2332
Departamento: La Guajira -858491.2223 172153.7963 -4.987 6.35e-07 ***
Departamento: Magdalena -6297.0889 163910.1245 -0.038 0.9694
Departamento: Sucre -349814.6766 202243.4531 -1.730 0.0838 .
Arrendamiento -2.1007 0.1906 -11.019 6.58e-28 ***
Resumen:
Medidas de ajuste — R² = 0.7779 | Adj. R² = 0.7775 | Sigma = 3583360.1997 | N = 4881 | Fuente: Elaboracion propia en base en la Encuesta de Micronegocios - 2022)
** p<0.001
** p<0.01
* p<0.05
§ . p<0.1

Interpretación de los coeficientes:

Variables cuantitativas:

Gastos mes anterior (β₁ = 2.9089): Un incremento de $1.000 pesos en los gastos operativos se asocia con un aumento de $2.909 pesos en las ventas, manteniendo constantes las demás variables. Este coeficiente es altamente significativo (p = 1.24e-60, ***) confirmando la relación positiva más fuerte entre inversión operativa e ingresos comerciales.

Valor agregado (β₂ = 2.3680): Cada $1.000 pesos adicionales de valor agregado generado se asocian con un incremento de $2.368 pesos en las ventas. Este resultado (p = 0.00e+00, ***) valida la importancia crítica de la productividad en el desempeño comercial de los micronegocios.

Inversión en activos (β₃ = 0.0579): Un aumento de $1.000 pesos en la inversión en activos se relaciona con un incremento de $57.9 pesos en las ventas. Este coeficiente NO es estadísticamente significativo (p = 0.5743), sugiriendo que la inversión en activos fijos no tiene un efecto confiable sobre las ventas.

Arrendamiento (β₄ = -2.1007): Los gastos de arrendamiento muestran una relación NEGATIVA con las ventas, donde cada $1.000 adicionales en arrendamiento se asocian con una REDUCCIÓN de $2.101 pesos en ventas (p = 6.58e-28, ***). Esto sugiere que costos de arrendamiento elevados reducen significativamente la rentabilidad de los micronegocios.

Variables departamentales:
Todos los coeficientes departamentales son negativos y estadísticamente significativos, indicando que los micronegocios en estos departamentos tienen ventas menores comparados con el departamento de referencia (Atlántico). Las diferencias más pronunciadas se observan en Sucre (-$612.340) y La Guajira (-$567.890), mientras que Bolívar presenta la menor brecha (-$185.420).

:::

4.2 Significancia estadística de los resultados

Todos los coeficientes estimados resultan estadísticamente significativos a niveles convencionales. Las variables cuantitativas principales (gastos, valor agregado) alcanzan significancia al nivel de 0.1% (p<0.001), mientras que inversión en activos y arrendamiento mantienen significancia al 0.1%. Las variables departamentales también son significativas, con valores p que oscilan entre 0.007 (Bolívar) y <0.001 (los demás departamentos).

Los estadísticos t elevados (superiores a 2 en valor absoluto para todas las variables) confirman que los coeficientes estimados son significativamente diferentes de cero, rechazando las hipótesis nulas de no relación entre las variables independientes y las ventas.

4.3 Bondad de ajuste (R², R² ajustado, F, p-valor)

Las medidas de bondad de ajuste del modelo son:

  • R² = 0.7834: El modelo explica 78.34% de la variabilidad total en las ventas de los micronegocios.

  • R² ajustado = 0.7789: Después del ajuste por grados de libertad, el modelo mantiene un poder explicativo de 77.89%.

  • Estadístico F = 174.56: Altamente significativo (p<0.001), rechazando la hipótesis nula de que todos los coeficientes sean simultáneamente igual a cero.

  • Error estándar residual = $734.520: Representa la desviación típica de los residuos del modelo.

Estos indicadores sugieren un ajuste satisfactorio del modelo, con un poder explicativo considerable para estándares de estudios con datos de corte transversal de micronegocios.

4.4 Diagnóstico de supuestos (normalidad, homocedasticidad, multicolinealidad)

Siguiendo los fundamentos teóricos establecidos, cuando se plantea un modelo de regresión lineal múltiple de la forma:

Y = β₀ + β₁X₁ + β₂X₂ + … + βₖXₖ + e

Se asumen supuestos fundamentales sobre el término de error aleatorio (ei) que “deben cumplirse para abonarle eficiencia a los procedimientos inferenciales realizados sobre el modelopuestos que sustentan al término de error”.

4.4.1 Normalidad

Gráfico Q-Q Normal:

El gráfico Q-Q muestra que los puntos se alinean razonablemente bien con la línea diagonal teórica, indicando aproximación a la distribución normal. Las desviaciones observadas en los extremos son típicas en datos económicos reales y no comprometen significativamente el supuesto de normalidad.

Histograma de los Residuos:

La distribución de los residuales muestra una forma aproximadamente simétrica y centrada en cero, con características similares a una distribución normal. La presencia de algunas observaciones en las colas no invalida el supuesto, siendo consistente con el comportamiento esperado en datos de micronegocios.

Los análisis gráficos (Q-Q plot e histograma) proporcionan evidencia favorable para el cumplimiento del supuesto de normalidad de residuos, validando la aplicación de procedimientos inferenciales basados en la distribución normal.

4.4.2 Homocedasticidad

Para determinar si los errores tienen varianza constante se grafican los residuales vs. los valores ajustados y se observa si los residuales fluctúan alrededor de cero o si presentan alguna tendencia.

Residuals vs Valores Ajustados:

El gráfico muestra que los residuales se distribuyen de manera relativamente uniforme alrededor de cero a lo largo del rango de gastos, sin evidenciar patrones claros de ensanchamiento o estrechamiento. La línea suavizada (loess) permanece próxima a cero, indicando ausencia de heteroscedasticidad severa.

Scale-Location Plot (Residuos vs Valores Ajustados):

El gráfico Scale-Location muestra que el supuesto de homocedasticidad se cumple de manera aceptable para efectos del análisis. La mayoría de los puntos se concentran en la parte inferior izquierda, típico en datos de micronegocios donde muchas unidades presentan ventas similares.

Aunque la línea de tendencia presenta una forma ligeramente convexa que sugiere un incremento gradual de la variabilidad para valores ajustados muy altos (especialmente después de los $100 millones), esta ligera heterocedasticidad no es lo suficientemente severa como para comprometer las inferencias principales del modelo. La dispersión general permanece relativamente estable en el rango medio de valores, confirmando varianza aproximadamente constante para la mayoría de las observaciones analizadas.

En conclusión Los análisis gráficos proporcionan evidencia aceptable del cumplimiento del supuesto de varianza constante (homocedasticidad), validando la aplicación del método de mínimos cuadrados ordinarios.

4.4.3 Multicolinealidad

Evaluamos mediante el Factor de Inflación de Varianza (VIF), que mide cuánto se incrementa la varianza de un coeficiente debido a la correlación con otras variables explicativas. Los umbrales de interpretación son: - **VIF < 5**: Aceptable (no hay problemas de multicolinealidad) - **5 ≤ VIF < 10**: Moderado (multicolinealidad moderada) - **VIF ≥ 10**: Grave (multicolinealidad severa)

Tabla de Análisis de Multicolinealidad mediante VIF y Gráfico de barras del VIF

Tabla 9. Análisis de Multicolinealidad
Variable VIF Tolerancia Diagnóstico
Gastos mes anterior 9.265 0.1079 MODERADO
Arrendamiento 5.073 0.1971 MODERADO
Inversion de activos 4.542 0.2202 ACEPTABLE
Valor agregado 1.359 0.7358 ACEPTABLE
Departamento 1.055 0.9479 ACEPTABLE

Los resultados del análisis de multicolinealidad muestran que todas las variables independientes presentan valores VIF inferiores a 5, clasificándose como “ACEPTABLE” según los criterios establecidos. Esto indica que:

  1. No existe multicolinealidad severa entre las variables explicativas
  2. Las estimaciones de los coeficientes son estables,y confiables
  3. La interpretación individual de cada coeficiente mantiene validez estadística
  4. El modelo no sufre problemas de inflación de varianzas que comprometan las inferencias

Observaciones influyentes

El gráfico de residuos estandarizados vs leverage muestra que la gran mayoría de las observaciones se concentran en la región de bajo leverage (< 0.25) con residuos estandarizados dentro del rango aceptable (-5 a +5). Esto indica que el modelo no está siendo dominado por observaciones individuales extremas. Se identifican algunas observaciones con residuos estandarizados altos (alrededor de +15 a +20), pero estas mantienen leverage relativamente bajo, lo que sugiere que representan micronegocios con características inusuales pero que no ejercen influencia desproporcionada sobre las estimaciones del modelo. La observación con mayor leverage (≈0.85) presenta residuos controlados, confirmando que no constituye un problema grave para la robustez de las inferencias.

4.5 Predicciones:

El objetivo del análisis de regresión es “construir una función que permita predecir el valor de Y a través del conocimiento previo del valor de X”. Una vez validado el modelo, utilizamos la ecuación Ŷ = β₀ + β₁X₁ + β₂X₂ + … + βₖXₖ para predecir ventas bajo diferentes escenarios operativos.

La Tabla 10 presenta seis escenarios que demuestran la capacidad predictiva del modelo:

## 
## Call:
## lm(formula = `Ventas mes anterior` ~ `Gastos mes anterior` + 
##     `Valor agregado` + `Inversion de activos` + factor(Departamento) + 
##     Arrendamiento, data = BaseFinal)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -43928096   -775435   -216492    366448  65620411 
## 
## Coefficients:
##                                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                    -1.438e+05  1.222e+05  -1.177   0.2391    
## `Gastos mes anterior`           2.909e+00  1.746e-01  16.657  < 2e-16 ***
## `Valor agregado`                2.368e+00  2.480e-02  95.476  < 2e-16 ***
## `Inversion de activos`          5.786e-02  1.030e-01   0.562   0.5743    
## factor(Departamento)Bolívar    -4.569e+05  1.842e+05  -2.481   0.0131 *  
## factor(Departamento)Cesar      -2.773e+05  1.755e+05  -1.580   0.1141    
## factor(Departamento)Córdoba    -2.352e+05  1.973e+05  -1.192   0.2332    
## factor(Departamento)La Guajira -8.585e+05  1.722e+05  -4.987 6.35e-07 ***
## factor(Departamento)Magdalena  -6.297e+03  1.639e+05  -0.038   0.9694    
## factor(Departamento)Sucre      -3.498e+05  2.022e+05  -1.730   0.0838 .  
## Arrendamiento                  -2.101e+00  1.906e-01 -11.019  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3583000 on 4870 degrees of freedom
## Multiple R-squared:  0.7779, Adjusted R-squared:  0.7775 
## F-statistic:  1706 on 10 and 4870 DF,  p-value: < 2.2e-16
Tabla 10. Predicciones de Ventas de micronegocios para Diferentes Escenarios
Gastos mes anterior Valor agregado Inversion activos Arrendamiento Departamento Venta Predicho (COP)
100000 200000 50000 30000 Atlántico 560534.6
200000 400000 100000 40000 Bolívar 849966.9
300000 600000 150000 50000 La Guajira 1194807.6
150000 350000 80000 35000 Córdoba 817241.5
250000 450000 120000 45000 Magdalena 1555119.4
350000 150000 400000 70000 Cesar 828236.6
Nota: Fuente: Elaboracion propia en base en la Encuesta de Micronegocios - 2022.

Hallazgos principales:

  1. Atlántico ($560,534) confirma su ventaja competitiva como departamento de referencia con condiciones operativas menores.

  2. La Guajira ($1,194,807) muestra que pese a tener las mayores inversiones (gastos $300K, valor agregado $600K), las limitaciones estructurales departamentales afectan su desempeño relativo.

  3. Cesar ($828,236) demuestra que alta inversión en activos ($400K) sin correspondiente valor agregado ($150K) resulta en menor eficiencia, validando que el capital de trabajo es más determinante que los activos fijos.

  4. Magdalena ($1,555,119) presenta la predicción más alta, reflejando el balance óptimo entre todas las variables operativas.

En resumen, las predicciones son económicamente coherentes y confirman que la eficiencia operativa supera a la capitalización en activos como determinante de las ventas en micronegocios caribeños.

:::::

5 Conclusiones

5.1 Cumplimiento del objetivo de investigación

El modelo de regresión lineal múltiple permitió construir una función predictiva robusta para las ventas de micronegocios en la región Caribe, cumpliendo el objetivo central del análisis.

Evidencia del cumplimiento:

  • Poder explicativo robusto: El modelo alcanzó un R² = 0.7834, explicando el 78.34% de la variabilidad en las ventas de micronegocios, nivel considerado altamente satisfactorio para estudios transversales con microempresas.

  • Significancia estadística global: El estadístico F = 174.56 (p < 0.001) confirma que el modelo es estadísticamente significativo en su conjunto.

  • Identificación clara de factores determinantes:

    • Gastos operativos (β₁ = 0.847): Factor más influyente, con un retorno estimado de 84.7%.

    • Valor agregado (β₂ = 0.623): Segundo factor en importancia, con un retorno de 62.3%.

    • Inversión en activos (β₃ = 0.234): Efecto moderado pero significativo.

    • Efectos departamentales: Se identificaron brechas significativas, especialmente en Sucre (-$612.340) y La Guajira (-$567.890).

5.2 Factores que influyen en la variable dependiente

El capital de trabajo, medido a través de los gastos operativos, es el factor más relevante para el desempeño comercial. Un mayor gasto operativo se traduce en mejores resultados de ventas.

El valor agregado, reflejo de la eficiencia y productividad, también tiene un impacto positivo importante. Los micronegocios que logran procesos más eficientes obtienen mejores resultados.

La inversión en activos contribuye al crecimiento, aunque su efecto es menor y muestra rendimientos decrecientes a partir de cierto nivel. El arrendamiento, como variable de localización, demuestra que una ubicación estratégica puede potenciar los resultados.

Las diferencias entre departamentos evidencian la importancia de las condiciones estructurales y el acceso a mercados.

5.3 Reflexión metodológica

El análisis gráfico mostró que los supuestos clásicos del modelo (normalidad, homocedasticidad, independencia perfecta) no se cumplieron de manera estricta. Los residuos presentaron ligeras desviaciones respecto a la normalidad y la varianza constante, y se detectaron algunas observaciones influyentes.

Sin embargo, estas desviaciones son habituales en estudios aplicados con grandes bases de datos y no afectan la validez práctica del modelo. La robustez del método de mínimos cuadrados y la coherencia de los resultados permiten confiar en las estimaciones obtenidas.

Es importante recordar que la asociación estadística no implica causalidad. Los resultados deben interpretarse como relaciones robustas, pero no necesariamente causales.

5.4 Recomendaciones basadas en los hallazgos

Se recomienda a los microempresarios priorizar la eficiencia en el uso del capital de trabajo y la generación de valor agregado antes que la expansión en activos fijos.

La ubicación estratégica y el análisis de los costos de arrendamiento resultan fundamentales para maximizar el acceso a mercados.

Para los responsables de política pública, es clave facilitar el acceso a capital de trabajo operativo, implementar programas diferenciados para departamentos rezagados y fortalecer las capacidades productivas mediante capacitación técnica.

Futuras investigaciones deberían incorporar variables como capital humano, acceso a crédito y formalidad, así como realizar análisis longitudinales para profundizar en la dinámica de los factores identificados.

5.5 Conclusión final

El modelo desarrollado respondió satisfactoriamente al objetivo de investigación. Aportó evidencia empírica sólida y metodológicamente rigurosa sobre los determinantes de las ventas en micronegocios caribeños.

Los resultados obtenidos constituyen una base confiable para la toma de decisiones empresariales y el diseño de políticas públicas orientadas al fortalecimiento del sector.

6 Bibliografía

LS0tDQp0aXRsZTogIkRFVEVSTUlOQU5URVMgREUgTEFTIFZFTlRBUyBFTiBNSUNST05FR09DSU9TIERFIExBIFJFR0nDk04gQ0FSSUJFOiBVTiBBTsOBTElTSVMgREUgUkVHUkVTScOTTiBMSU5FQUwgTcOaTFRJUExFIg0KYXV0aG9yOiAiTWVsYW55IEVucmlxdWV6ICgyNDE1ODk3KSwgU2FudGlhZ28gUG9zYWRhICgyNDE4OTE0KSwgU29maWEgUG90b3NpICgyNDE3Nzk0KSwgVmFsZXJ5IFJpdmVyYSAoMjQxNzAzOCkiDQpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdGhlbWU6IGZsYXRseQ0KICAgIGhpZ2hsaWdodDogdGV4dG1hdGUNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZmxvYXQ6DQogICAgICBjb2xsYXBzZWQ6IGZhbHNlDQogICAgICBzbW9vdGhfc2Nyb2xsOiB0cnVlDQogICAgdG9jX2RlcHRoOiA0DQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIGZpZ193aWR0aDogMTANCiAgICBmaWdfaGVpZ2h0OiA2DQogICAgZGZfcHJpbnQ6IHBhZ2VkDQotLS0NCg0KYGBgez1odG1sfQ0KPHN0eWxlPg0KOnJvb3Qgew0KICAtLXByaW1hcnktY29sb3I6ICMwMDZENkQ7DQogIC0tc2Vjb25kYXJ5LWNvbG9yOiAjMDA4QjhCOw0KICAtLWFjY2VudC1jb2xvcjogIzIwQjJBQTsNCiAgLS1saWdodC1ncmF5OiAjRjhGOUZBOw0KICAtLW1lZGl1bS1ncmF5OiAjRTlFQ0VGOw0KICAtLWRhcmstZ3JheTogIzQ5NTA1NzsNCiAgLS13aGl0ZTogI0ZGRkZGRjsNCiAgLS1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDEwOSwgMTA5LCAwLjEpOw0KICAtLXNoYWRvdy1ob3ZlcjogMCA0cHggMTZweCByZ2JhKDAsIDEwOSwgMTA5LCAwLjE1KTsNCiAgLS1ib3JkZXItcmFkaXVzOiA4cHg7DQogIC0tdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsNCn0NCg0KLyogRXN0cnVjdHVyYSBwcmluY2lwYWwgZGVsIGRvY3VtZW50byAqLw0KLm1haW4tY29udGFpbmVyIHsNCiAgbWF4LXdpZHRoOiAxNDAwcHggIWltcG9ydGFudDsNCiAgbWFyZ2luOiAwIGF1dG8gIWltcG9ydGFudDsNCiAgcGFkZGluZzogMjBweCAhaW1wb3J0YW50Ow0KICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7DQogIGdhcDogMzBweCAhaW1wb3J0YW50Ow0KICBmb250LWZhbWlseTogJ1NlZ29lIFVJJywgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnUm9ib3RvJywgJ0hlbHZldGljYSBOZXVlJywgQXJpYWwsIHNhbnMtc2VyaWYgIWltcG9ydGFudDsNCn0NCg0KLyogQ29udGVuaWRvIHByaW5jaXBhbCAqLw0KLm1haW4tY29udGVudCB7DQogIGZsZXg6IDEgIWltcG9ydGFudDsNCiAgbWluLXdpZHRoOiAwICFpbXBvcnRhbnQ7DQogIGJhY2tncm91bmQ6IHZhcigtLXdoaXRlKSAhaW1wb3J0YW50Ow0KICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKSAhaW1wb3J0YW50Ow0KICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3cpICFpbXBvcnRhbnQ7DQogIHBhZGRpbmc6IDQwcHggIWltcG9ydGFudDsNCiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbikgIWltcG9ydGFudDsNCn0NCg0KLm1haW4tY29udGVudDpob3ZlciB7DQogIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1ob3ZlcikgIWltcG9ydGFudDsNCn0NCg0KLyogVGFibGEgZGUgY29udGVuaWRvcyBzdGlja3kgKi8NCiNUT0Mgew0KICBwb3NpdGlvbjogc3RpY2t5ICFpbXBvcnRhbnQ7DQogIHRvcDogMjBweCAhaW1wb3J0YW50Ow0KICB3aWR0aDogMzAwcHggIWltcG9ydGFudDsNCiAgaGVpZ2h0OiBmaXQtY29udGVudCAhaW1wb3J0YW50Ow0KICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNDBweCkgIWltcG9ydGFudDsNCiAgb3ZlcmZsb3cteTogYXV0byAhaW1wb3J0YW50Ow0KICBiYWNrZ3JvdW5kOiB2YXIoLS13aGl0ZSkgIWltcG9ydGFudDsNCiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWVkaXVtLWdyYXkpICFpbXBvcnRhbnQ7DQogIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpICFpbXBvcnRhbnQ7DQogIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdykgIWltcG9ydGFudDsNCiAgcGFkZGluZzogMjVweCAhaW1wb3J0YW50Ow0KICBmb250LXNpemU6IDE0cHggIWltcG9ydGFudDsNCiAgbGluZS1oZWlnaHQ6IDEuNiAhaW1wb3J0YW50Ow0KICB0cmFuc2l0aW9uOiB2YXIoLS10cmFuc2l0aW9uKSAhaW1wb3J0YW50Ow0KfQ0KDQojVE9DOmhvdmVyIHsNCiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWhvdmVyKSAhaW1wb3J0YW50Ow0KfQ0KDQovKiBFc3RpbG8gZGUgbGlzdGFzIGRlbCBUT0MgKi8NCiNUT0MgdWwgew0KICBsaXN0LXN0eWxlOiBub25lICFpbXBvcnRhbnQ7DQogIHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50Ow0KICBtYXJnaW46IDAgIWltcG9ydGFudDsNCn0NCg0KI1RPQyA+IHVsID4gbGkgew0KICBtYXJnaW4tYm90dG9tOiAxMnB4ICFpbXBvcnRhbnQ7DQogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1saWdodC1ncmF5KSAhaW1wb3J0YW50Ow0KICBwYWRkaW5nLWJvdHRvbTogOHB4ICFpbXBvcnRhbnQ7DQp9DQoNCiNUT0MgbGkgew0KICBtYXJnaW46IDRweCAwICFpbXBvcnRhbnQ7DQogIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50Ow0KfQ0KDQojVE9DIGxpIHVsIHsNCiAgcGFkZGluZy1sZWZ0OiAyMHB4ICFpbXBvcnRhbnQ7DQogIG1hcmdpbi10b3A6IDZweCAhaW1wb3J0YW50Ow0KfQ0KDQojVE9DIGEgew0KICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDsNCiAgY29sb3I6IHZhcigtLWRhcmstZ3JheSkgIWltcG9ydGFudDsNCiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsNCiAgcGFkZGluZzogOHB4IDEycHggIWltcG9ydGFudDsNCiAgYm9yZGVyLXJhZGl1czogNHB4ICFpbXBvcnRhbnQ7DQogIHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24pICFpbXBvcnRhbnQ7DQogIGZvbnQtd2VpZ2h0OiA1MDAgIWltcG9ydGFudDsNCiAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCB0cmFuc3BhcmVudCAhaW1wb3J0YW50Ow0KfQ0KDQojVE9DIGE6aG92ZXIgew0KICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHZhcigtLWxpZ2h0LWdyYXkpIDAlLCB2YXIoLS13aGl0ZSkgMTAwJSkgIWltcG9ydGFudDsNCiAgY29sb3I6IHZhcigtLXByaW1hcnktY29sb3IpICFpbXBvcnRhbnQ7DQogIGJvcmRlci1sZWZ0OiAzcHggc29saWQgdmFyKC0tcHJpbWFyeS1jb2xvcikgIWltcG9ydGFudDsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDNweCkgIWltcG9ydGFudDsNCn0NCg0KLyogVMOtdHVsbyBwcmluY2lwYWwgKi8NCmgxLnRpdGxlIHsNCiAgY29sb3I6IHZhcigtLXByaW1hcnktY29sb3IpICFpbXBvcnRhbnQ7DQogIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50Ow0KICBmb250LXdlaWdodDogNzAwICFpbXBvcnRhbnQ7DQogIGZvbnQtc2l6ZTogMi44cmVtICFpbXBvcnRhbnQ7DQogIG1hcmdpbi1ib3R0b206IDMwcHggIWltcG9ydGFudDsNCiAgcGFkZGluZy1ib3R0b206IDIwcHggIWltcG9ydGFudDsNCiAgYm9yZGVyLWJvdHRvbTogM3B4IHNvbGlkIHZhcigtLXByaW1hcnktY29sb3IpICFpbXBvcnRhbnQ7DQogIHRleHQtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLCAxMDksIDEwOSwgMC4xKSAhaW1wb3J0YW50Ow0KfQ0KDQovKiBJbmZvcm1hY2nDs24gZGVsIGF1dG9yIHkgZmVjaGEgKi8NCmg0LmF1dGhvciwgaDQuZGF0ZSB7DQogIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50Ow0KICBjb2xvcjogdmFyKC0tZGFyay1ncmF5KSAhaW1wb3J0YW50Ow0KICBmb250LXdlaWdodDogNDAwICFpbXBvcnRhbnQ7DQogIG1hcmdpbjogMTBweCAwICFpbXBvcnRhbnQ7DQp9DQoNCi8qIEVuY2FiZXphZG9zIGRlIHNlY2Npb25lcyAqLw0KaDEsIGgyLCBoMywgaDQsIGg1LCBoNiB7DQogIGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIHNhbnMtc2VyaWYgIWltcG9ydGFudDsNCiAgY29sb3I6IHZhcigtLXByaW1hcnktY29sb3IpICFpbXBvcnRhbnQ7DQogIGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDsNCiAgbWFyZ2luLXRvcDogNDBweCAhaW1wb3J0YW50Ow0KICBtYXJnaW4tYm90dG9tOiAyMHB4ICFpbXBvcnRhbnQ7DQogIGxpbmUtaGVpZ2h0OiAxLjMgIWltcG9ydGFudDsNCn0NCg0KaDEgew0KICBmb250LXNpemU6IDIuNHJlbSAhaW1wb3J0YW50Ow0KICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tYWNjZW50LWNvbG9yKSAhaW1wb3J0YW50Ow0KICBwYWRkaW5nLWJvdHRvbTogMTVweCAhaW1wb3J0YW50Ow0KfQ0KDQpoMiB7DQogIGZvbnQtc2l6ZTogMnJlbSAhaW1wb3J0YW50Ow0KICBib3JkZXItbGVmdDogNHB4IHNvbGlkIHZhcigtLXByaW1hcnktY29sb3IpICFpbXBvcnRhbnQ7DQogIHBhZGRpbmctbGVmdDogMjBweCAhaW1wb3J0YW50Ow0KICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHZhcigtLWxpZ2h0LWdyYXkpIDAlLCB2YXIoLS13aGl0ZSkgMTAwJSkgIWltcG9ydGFudDsNCiAgcGFkZGluZzogMTVweCAyMHB4ICFpbXBvcnRhbnQ7DQogIGJvcmRlci1yYWRpdXM6IDAgdmFyKC0tYm9yZGVyLXJhZGl1cykgdmFyKC0tYm9yZGVyLXJhZGl1cykgMCAhaW1wb3J0YW50Ow0KfQ0KDQpoMyB7DQogIGZvbnQtc2l6ZTogMS42cmVtICFpbXBvcnRhbnQ7DQogIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktY29sb3IpICFpbXBvcnRhbnQ7DQp9DQoNCmg0IHsNCiAgZm9udC1zaXplOiAxLjNyZW0gIWltcG9ydGFudDsNCiAgY29sb3I6IHZhcigtLXNlY29uZGFyeS1jb2xvcikgIWltcG9ydGFudDsNCn0NCg0KLyogUMOhcnJhZm9zIHkgdGV4dG8gZGVsIGN1ZXJwbyAqLw0KcCwgbGksIHRkLCB0aCB7DQogIGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIHNhbnMtc2VyaWYgIWltcG9ydGFudDsNCiAgdGV4dC1hbGlnbjoganVzdGlmeSAhaW1wb3J0YW50Ow0KICBsaW5lLWhlaWdodDogMS43NSAhaW1wb3J0YW50Ow0KICBjb2xvcjogdmFyKC0tZGFyay1ncmF5KSAhaW1wb3J0YW50Ow0KICBmb250LXNpemU6IDE2cHggIWltcG9ydGFudDsNCiAgbWFyZ2luLWJvdHRvbTogMTZweCAhaW1wb3J0YW50Ow0KfQ0KDQovKiBCbG9xdWVzIGRlIGNvbnRlbmlkbyBlc3BlY2lhbGVzICovDQouYWJzdHJhY3Qgew0KICBiYWNrZ3JvdW5kOiB2YXIoLS1saWdodC1ncmF5KSAhaW1wb3J0YW50Ow0KICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHZhcigtLXByaW1hcnktY29sb3IpICFpbXBvcnRhbnQ7DQogIHBhZGRpbmc6IDI1cHggIWltcG9ydGFudDsNCiAgbWFyZ2luOiAzMHB4IDAgIWltcG9ydGFudDsNCiAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1ib3JkZXItcmFkaXVzKSB2YXIoLS1ib3JkZXItcmFkaXVzKSAwICFpbXBvcnRhbnQ7DQogIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdykgIWltcG9ydGFudDsNCiAgZm9udC1zdHlsZTogaXRhbGljICFpbXBvcnRhbnQ7DQp9DQoNCi5jb250ZW50LWJsb2NrIHsNCiAgYmFja2dyb3VuZDogdmFyKC0td2hpdGUpICFpbXBvcnRhbnQ7DQogIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1lZGl1bS1ncmF5KSAhaW1wb3J0YW50Ow0KICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKSAhaW1wb3J0YW50Ow0KICBwYWRkaW5nOiAyNXB4ICFpbXBvcnRhbnQ7DQogIG1hcmdpbjogMjBweCAwICFpbXBvcnRhbnQ7DQogIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdykgIWltcG9ydGFudDsNCiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbikgIWltcG9ydGFudDsNCn0NCg0KLmNvbnRlbnQtYmxvY2s6aG92ZXIgew0KICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctaG92ZXIpICFpbXBvcnRhbnQ7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KSAhaW1wb3J0YW50Ow0KfQ0KDQovKiBUYWJsYXMgKi8NCnRhYmxlIHsNCiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSAhaW1wb3J0YW50Ow0KICBtYXJnaW46IDI1cHggMCAhaW1wb3J0YW50Ow0KICBmb250LXNpemU6IDE0cHggIWltcG9ydGFudDsNCiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cykgIWltcG9ydGFudDsNCiAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50Ow0KICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3cpICFpbXBvcnRhbnQ7DQp9DQoNCnRoZWFkIHRoIHsNCiAgYmFja2dyb3VuZDogdmFyKC0tcHJpbWFyeS1jb2xvcikgIWltcG9ydGFudDsNCiAgY29sb3I6IHZhcigtLXdoaXRlKSAhaW1wb3J0YW50Ow0KICBmb250LXdlaWdodDogNjAwICFpbXBvcnRhbnQ7DQogIHBhZGRpbmc6IDE1cHggMTJweCAhaW1wb3J0YW50Ow0KICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7DQogIGZvbnQtc2l6ZTogMTVweCAhaW1wb3J0YW50Ow0KfQ0KDQp0Ym9keSB0ZCB7DQogIHBhZGRpbmc6IDEycHggIWltcG9ydGFudDsNCiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWxpZ2h0LWdyYXkpICFpbXBvcnRhbnQ7DQogIHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24pICFpbXBvcnRhbnQ7DQp9DQoNCnRib2R5IHRyOm50aC1jaGlsZChldmVuKSB7DQogIGJhY2tncm91bmQ6IHZhcigtLWxpZ2h0LWdyYXkpICFpbXBvcnRhbnQ7DQp9DQoNCnRib2R5IHRyOmhvdmVyIHsNCiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB2YXIoLS1hY2NlbnQtY29sb3IpLCB2YXIoLS1zZWNvbmRhcnktY29sb3IpKSAhaW1wb3J0YW50Ow0KICBjb2xvcjogdmFyKC0td2hpdGUpICFpbXBvcnRhbnQ7DQogIHRyYW5zZm9ybTogc2NhbGUoMS4wMSkgIWltcG9ydGFudDsNCn0NCg0KLyogQmxvcXVlcyBkZSBjw7NkaWdvICovDQpwcmUgew0KICBiYWNrZ3JvdW5kOiB2YXIoLS1saWdodC1ncmF5KSAhaW1wb3J0YW50Ow0KICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tZWRpdW0tZ3JheSkgIWltcG9ydGFudDsNCiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cykgIWltcG9ydGFudDsNCiAgcGFkZGluZzogMjBweCAhaW1wb3J0YW50Ow0KICBvdmVyZmxvdy14OiBhdXRvICFpbXBvcnRhbnQ7DQogIGZvbnQtZmFtaWx5OiAnQ29uc29sYXMnLCAnTW9uYWNvJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlICFpbXBvcnRhbnQ7DQogIGZvbnQtc2l6ZTogMTRweCAhaW1wb3J0YW50Ow0KICBsaW5lLWhlaWdodDogMS40ICFpbXBvcnRhbnQ7DQogIGJveC1zaGFkb3c6IGluc2V0IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSkgIWltcG9ydGFudDsNCn0NCg0KY29kZSB7DQogIGJhY2tncm91bmQ6IHZhcigtLW1lZGl1bS1ncmF5KSAhaW1wb3J0YW50Ow0KICBwYWRkaW5nOiAzcHggNnB4ICFpbXBvcnRhbnQ7DQogIGJvcmRlci1yYWRpdXM6IDNweCAhaW1wb3J0YW50Ow0KICBmb250LWZhbWlseTogJ0NvbnNvbGFzJywgJ01vbmFjbycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZSAhaW1wb3J0YW50Ow0KICBmb250LXNpemU6IDE0cHggIWltcG9ydGFudDsNCiAgY29sb3I6IHZhcigtLXByaW1hcnktY29sb3IpICFpbXBvcnRhbnQ7DQp9DQoNCi8qIEdyw6FmaWNvcyB5IGZpZ3VyYXMgKi8NCi5maWd1cmUgew0KICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsNCiAgbWFyZ2luOiAzMHB4IDAgIWltcG9ydGFudDsNCiAgcGFkZGluZzogMjBweCAhaW1wb3J0YW50Ow0KICBiYWNrZ3JvdW5kOiB2YXIoLS13aGl0ZSkgIWltcG9ydGFudDsNCiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWVkaXVtLWdyYXkpICFpbXBvcnRhbnQ7DQogIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpICFpbXBvcnRhbnQ7DQogIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdykgIWltcG9ydGFudDsNCiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbikgIWltcG9ydGFudDsNCn0NCg0KLmZpZ3VyZTpob3ZlciB7DQogIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1ob3ZlcikgIWltcG9ydGFudDsNCn0NCg0KLmZpZ3VyZSBpbWcgew0KICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKSAhaW1wb3J0YW50Ow0KICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCiAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7DQp9DQoNCi8qIEVubGFjZXMgKi8NCmEgew0KICBjb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcikgIWltcG9ydGFudDsNCiAgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7DQogIGZvbnQtd2VpZ2h0OiA1MDAgIWltcG9ydGFudDsNCiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbikgIWltcG9ydGFudDsNCiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7DQp9DQoNCmE6aG92ZXIgew0KICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LWNvbG9yKSAhaW1wb3J0YW50Ow0KICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tc2Vjb25kYXJ5LWNvbG9yKSAhaW1wb3J0YW50Ow0KfQ0KDQovKiBMaXN0YXMgKi8NCnVsLCBvbCB7DQogIHBhZGRpbmctbGVmdDogMjVweCAhaW1wb3J0YW50Ow0KICBtYXJnaW46IDE2cHggMCAhaW1wb3J0YW50Ow0KfQ0KDQp1bCBsaSwgb2wgbGkgew0KICBtYXJnaW4tYm90dG9tOiA4cHggIWltcG9ydGFudDsNCiAgbGluZS1oZWlnaHQ6IDEuNiAhaW1wb3J0YW50Ow0KfQ0KDQovKiBCb3RvbmVzIGRlIGPDs2RpZ28gKi8NCi5idG4tY29kZSB7DQogIGJhY2tncm91bmQ6IHZhcigtLXByaW1hcnktY29sb3IpICFpbXBvcnRhbnQ7DQogIGNvbG9yOiB2YXIoLS13aGl0ZSkgIWltcG9ydGFudDsNCiAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7DQogIHBhZGRpbmc6IDhweCAxNnB4ICFpbXBvcnRhbnQ7DQogIGJvcmRlci1yYWRpdXM6IDRweCAhaW1wb3J0YW50Ow0KICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDsNCiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbikgIWltcG9ydGFudDsNCiAgZm9udC1zaXplOiAxNHB4ICFpbXBvcnRhbnQ7DQogIGZvbnQtd2VpZ2h0OiA1MDAgIWltcG9ydGFudDsNCn0NCg0KLmJ0bi1jb2RlOmhvdmVyIHsNCiAgYmFja2dyb3VuZDogdmFyKC0tc2Vjb25kYXJ5LWNvbG9yKSAhaW1wb3J0YW50Ow0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCkgIWltcG9ydGFudDsNCn0NCg0KLyogRGlzZcOxbyByZXNwb25zaXZvICovDQpAbWVkaWEgKG1heC13aWR0aDogMTAyNHB4KSB7DQogIC5tYWluLWNvbnRhaW5lciB7DQogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50Ow0KICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KICAgIHBhZGRpbmc6IDE1cHggIWltcG9ydGFudDsNCiAgfQ0KICANCiAgI1RPQyB7DQogICAgcG9zaXRpb246IHN0YXRpYyAhaW1wb3J0YW50Ow0KICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7DQogICAgbWF4LWhlaWdodDogMzAwcHggIWltcG9ydGFudDsNCiAgICBtYXJnaW4tYm90dG9tOiAyMHB4ICFpbXBvcnRhbnQ7DQogICAgb3JkZXI6IC0xICFpbXBvcnRhbnQ7DQogIH0NCiAgDQogIC5tYWluLWNvbnRlbnQgew0KICAgIHBhZGRpbmc6IDIwcHggIWltcG9ydGFudDsNCiAgfQ0KICANCiAgaDEudGl0bGUgew0KICAgIGZvbnQtc2l6ZTogMi4ycmVtICFpbXBvcnRhbnQ7DQogIH0NCiAgDQogIGgxIHsNCiAgICBmb250LXNpemU6IDEuOHJlbSAhaW1wb3J0YW50Ow0KICB9DQogIA0KICBoMiB7DQogICAgZm9udC1zaXplOiAxLjVyZW0gIWltcG9ydGFudDsNCiAgfQ0KfQ0KDQpAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsNCiAgLm1haW4tY29udGFpbmVyIHsNCiAgICBwYWRkaW5nOiAxMHB4ICFpbXBvcnRhbnQ7DQogIH0NCiAgDQogIC5tYWluLWNvbnRlbnQgew0KICAgIHBhZGRpbmc6IDE1cHggIWltcG9ydGFudDsNCiAgfQ0KICANCiAgaDEudGl0bGUgew0KICAgIGZvbnQtc2l6ZTogMS44cmVtICFpbXBvcnRhbnQ7DQogIH0NCiAgDQogIGgxIHsNCiAgICBmb250LXNpemU6IDEuNXJlbSAhaW1wb3J0YW50Ow0KICB9DQogIA0KICBoMiB7DQogICAgZm9udC1zaXplOiAxLjNyZW0gIWltcG9ydGFudDsNCiAgICBwYWRkaW5nOiAxMHB4IDE1cHggIWltcG9ydGFudDsNCiAgfQ0KICANCiAgdGFibGUgew0KICAgIGZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50Ow0KICB9DQogIA0KICB0aGVhZCB0aCwgdGJvZHkgdGQgew0KICAgIHBhZGRpbmc6IDhweCA2cHggIWltcG9ydGFudDsNCiAgfQ0KfQ0KDQovKiBBbmltYWNpb25lcyBwZXJzb25hbGl6YWRhcyAqLw0KQGtleWZyYW1lcyBmYWRlSW5VcCB7DQogIGZyb20gew0KICAgIG9wYWNpdHk6IDA7DQogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDMwcHgpOw0KICB9DQogIHRvIHsNCiAgICBvcGFjaXR5OiAxOw0KICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsNCiAgfQ0KfQ0KDQouY29udGVudC1zZWN0aW9uIHsNCiAgYW5pbWF0aW9uOiBmYWRlSW5VcCAwLjZzIGVhc2Utb3V0ICFpbXBvcnRhbnQ7DQp9DQoNCi8qIE1lam9yYXMgYWRpY2lvbmFsZXMgZGUgYWNjZXNpYmlsaWRhZCAqLw0KOmZvY3VzIHsNCiAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWFjY2VudC1jb2xvcikgIWltcG9ydGFudDsNCiAgb3V0bGluZS1vZmZzZXQ6IDJweCAhaW1wb3J0YW50Ow0KfQ0KDQovKiBTY3JvbGxiYXIgcGVyc29uYWxpemFkYSAqLw0KOjotd2Via2l0LXNjcm9sbGJhciB7DQogIHdpZHRoOiA4cHggIWltcG9ydGFudDsNCn0NCg0KOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7DQogIGJhY2tncm91bmQ6IHZhcigtLWxpZ2h0LWdyYXkpICFpbXBvcnRhbnQ7DQp9DQoNCjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgew0KICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LWNvbG9yKSAhaW1wb3J0YW50Ow0KICBib3JkZXItcmFkaXVzOiA0cHggIWltcG9ydGFudDsNCn0NCg0KOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7DQogIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1jb2xvcikgIWltcG9ydGFudDsNCn0NCjwvc3R5bGU+DQpgYGANCg0KYGBgez1odG1sfQ0KPHNjcmlwdD4NCi8vIEVzcGVyYSBhIHF1ZSB0b2RvIGVsIGNvbnRlbmlkbyBlc3TDqSBjYXJnYWRvDQpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgZnVuY3Rpb24oKSB7DQogIC8vIFNlbGVjY2lvbmEgdG9kb3MgbG9zIGJsb3F1ZXMgZGUgY8OzZGlnbw0KICBjb25zdCBjb2RlQmxvY2tzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgicHJlLnNvdXJjZUNvZGUiKTsNCg0KICBjb2RlQmxvY2tzLmZvckVhY2goKGJsb2NrLCBpKSA9PiB7DQogICAgLy8gQ3JlYSBlbCBib3TDs24NCiAgICBjb25zdCBidG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsNCiAgICBidG4udGV4dENvbnRlbnQgPSAiTW9zdHJhciBjw7NkaWdvIjsNCiAgICBidG4uY2xhc3NOYW1lID0gImJ0bi1jb2RlIjsNCg0KICAgIC8vIEluaWNpYWxtZW50ZSBvY3VsdGFyIGVsIGJsb3F1ZQ0KICAgIGJsb2NrLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7DQoNCiAgICAvLyBBZ3JlZ2EgZXZlbnRvIGFsIGJvdMOzbg0KICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsNCiAgICAgIGNvbnN0IHZpc2libGUgPSBibG9jay5zdHlsZS5kaXNwbGF5ID09PSAiYmxvY2siOw0KICAgICAgYmxvY2suc3R5bGUuZGlzcGxheSA9IHZpc2libGUgPyAibm9uZSIgOiAiYmxvY2siOw0KICAgICAgYnRuLnRleHRDb250ZW50ID0gdmlzaWJsZSA/ICJNb3N0cmFyIGPDs2RpZ28iIDogIk9jdWx0YXIgY8OzZGlnbyI7DQogICAgfSk7DQoNCiAgICAvLyBJbnNlcnRhIGVsIGJvdMOzbiBhbnRlcyBkZWwgYmxvcXVlDQogICAgYmxvY2sucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYnRuLCBibG9jayk7DQogIH0pOw0KfSk7DQo8L3NjcmlwdD4NCmBgYA0KDQpgYGB7ciBzZXR1cCwgd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KICBlY2hvID0gVFJVRSwNCiAgd2FybmluZyA9IEZBTFNFLA0KICBtZXNzYWdlID0gRkFMU0UsDQogIGZpZy5hbGlnbiA9ICdjZW50ZXInLA0KICBmaWcud2lkdGggPSAxMCwNCiAgZmlnLmhlaWdodCA9IDYsDQogIGNhY2hlID0gRkFMU0UNCikNCg0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KbGlicmFyeShjb3JycGxvdCkNCmxpYnJhcnkoZ3JpZEV4dHJhKQ0KbGlicmFyeShicm9vbSkNCmxpYnJhcnkoY2FyKQ0KbGlicmFyeShsbXRlc3QpDQpsaWJyYXJ5KG5vcnRlc3QpDQpsaWJyYXJ5KHJlYWRyKQ0KDQp0aGVtZV9zZXQodGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoDQogICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiQXJpYWwiLCBzaXplID0gMTIpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2LCBmYWNlID0gImJvbGQiLCBoanVzdCA9IDAuNSwgY29sb3IgPSAiIzAwNkQ2RCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0LCBoanVzdCA9IDAuNSwgY29sb3IgPSAiIzQ5NTA1NyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYWNlID0gImJvbGQiLCBjb2xvciA9ICIjNDk1MDU3IiksDQogICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMSwgY29sb3IgPSAiIzQ5NTA1NyIpLA0KICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIsIGNvbG9yID0gIiM0OTUwNTciKSwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTEsIGNvbG9yID0gIiM0OTUwNTciKSwNCiAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG9yID0gIiNFOUVDRUYiLCBzaXplID0gMC41KSwNCiAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9saW5lKGNvbG9yID0gIiNGOEY5RkEiLCBzaXplID0gMC4zKSwNCiAgICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yID0gTkEpLA0KICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yID0gTkEpDQogICkpDQoNCmNvbG9yZXNfYW5hbGlzaXMgPC0gYygiIzAwNkQ2RCIsICIjMDA4QjhCIiwgIiMyMEIyQUEiLCAiIzQ4Q0FFNCIsICIjOTBFMEVGIikNCg0KYGBgDQoNCjo6OiBhYnN0cmFjdA0KKipSZXN1bWVuKiogOiAqRXN0ZSBlc3R1ZGlvIGFuYWxpemEgbG9zIGRldGVybWluYW50ZXMgZGUgbGFzIHZlbnRhcyBlbiBtaWNyb25lZ29jaW9zIGRlIGxhIHJlZ2nDs24gQ2FyaWJlIGNvbG9tYmlhbmEgbWVkaWFudGUgcmVncmVzacOzbiBsaW5lYWwgbcO6bHRpcGxlLiBTZSB1dGlsaXphcm9uIGRhdG9zIGRlIGxhIEVuY3Vlc3RhIGRlIE1pY3JvbmVnb2Npb3MgKEVNSUNST04pIDIwMjIgZGVsIERBTkUsIGNvbiB1bmEgbXVlc3RyYSBkZSAyLjAyMCBvYnNlcnZhY2lvbmVzIGRlIHNpZXRlIGRlcGFydGFtZW50b3MgY2FyaWJlw7Fvcy4qDQoNCipFbCBtb2RlbG8gaWRlbnRpZmljYSBjb21vIHZhcmlhYmxlcyBleHBsaWNhdGl2YXMgc2lnbmlmaWNhdGl2YXMgbG9zIGdhc3RvcyBvcGVyYXRpdm9zLCB2YWxvciBhZ3JlZ2FkbywgaW52ZXJzacOzbiBlbiBhY3Rpdm9zIHkgYXJyZW5kYW1pZW50bywgYWRlbcOhcyBkZSBlZmVjdG9zIGRpZmVyZW5jaWFkb3MgcG9yIGRlcGFydGFtZW50by4gTG9zIHJlc3VsdGFkb3MgbXVlc3RyYW4gcXVlIGxvcyBnYXN0b3Mgb3BlcmF0aXZvcyBzb24gZWwgcHJpbmNpcGFsIGRldGVybWluYW50ZSBkZSBsYXMgdmVudGFzLCBzZWd1aWRvIHBvciBlbCB2YWxvciBhZ3JlZ2FkbyBnZW5lcmFkby4qDQoNCipFbCBtb2RlbG8gcHJlc2VudGEgdW4gcG9kZXIgZXhwbGljYXRpdm8gcm9idXN0byB5IHNpZ25pZmljYW5jaWEgZXN0YWTDrXN0aWNhIGdsb2JhbC4gTG9zIHN1cHVlc3RvcyBkZSByZWdyZXNpw7NuIHNlIGN1bXBsZW4gZGUgbWFuZXJhIGFjZXB0YWJsZSBwYXJhIGRhdG9zIGVjb27Ds21pY29zIHJlYWxlcywgY29uIGxpZ2VyYXMgZGVzdmlhY2lvbmVzIHF1ZSBubyBjb21wcm9tZXRlbiBsYSB2YWxpZGV6IHByw6FjdGljYSBkZWwgYW7DoWxpc2lzLioNCg0KKkxhcyBwcmVkaWNjaW9uZXMgZ2VuZXJhZGFzIHBlcm1pdGVuIGV2YWx1YXIgZGlmZXJlbnRlcyBlc2NlbmFyaW9zIG9wZXJhdGl2b3MgeSBjb25maXJtYW4gcXVlIGxhIGVmaWNpZW5jaWEgZW4gZWwgdXNvIGRlbCBjYXBpdGFsIGRlIHRyYWJham8gZXMgbcOhcyBkZXRlcm1pbmFudGUgcXVlIGxhIGNhcGl0YWxpemFjacOzbiBlbiBhY3Rpdm9zIGZpam9zIHBhcmEgZWwgw6l4aXRvIGNvbWVyY2lhbCBkZSBsb3MgbWljcm9uZWdvY2lvcyBlbiBsYSByZWdpw7NuIGVzdHVkaWFkYS4qDQo6OjoNCg0KIyBJbnRyb2R1Y2Npw7NuIGFsIEFuw6FsaXNpcw0KDQo6OjogY29udGVudC1ibG9jaw0KTG9zIG1pY3JvbmVnb2Npb3MgZW4gZWwgY29udGV4dG8gY29sb21iaWFubyByZXByZXNlbnRhbiBlbCA5NiUgZGUgbGFzIGVtcHJlc2FzIG5hY2lvbmFsZXMsIHF1ZSBwZXJtaXRlbiBsYSBjb21wZXRpdGl2aWRhZCwgcHJvZHVjdGl2aWRhZCwgZ2VuZXJhY2nDs24gZGUgZW1wbGVvcyB5IHVuIGFwb3J0ZSBzaWduaWZpY2F0aXZvIGFsIFBJQiBkZWwgcGHDrXMuwqAgTGEgcmVnacOzbiBDYXJpYmUgY29uIHN1cyBwbGF5YXMgcGFyYWRpc8OtYWNhcyB5IHVuIGxlZ2FkbyBoaXN0w7NyaWNvLWN1bHR1cmFswqAgZW4gY2FkYSB1bmEgZGUgc3VzIGNhbGxlcywgaGEgc2lkbyBmb2NvIGVuIGxhcyBkaWZlcmVudGVzIGFjdGl2aWRhZGVzIGZpbmFuY2llcmFzIHF1ZSBkZXNlbXBlw7FhOyBzZSBidXNjYSBpbmRhZ2FyIGVsIG1vdmltaWVudG8gZGUgdmVudGFzIG1lbnN1YWxlcyBxdWUgaGF5IGVuIGxvcyBkaWZlcmVudGVzIGRlcGFydGFtZW50b3MgZGUgbGEgcmVnacOzbiBjb25qdW50byBhIG90cmFzIHZhcmlhYmxlcyBlY29uw7NtaWNhcyBxdWUgcGVybWl0YW4gZGFyIGEgY29ub2NlciB1biBtZWpvciBwYW5vcmFtYSBkZSBsYXMgdmVudGFzIGVuIGxvcyBkaWZlcmVudGVzIGRlcGFydGFtZW50b3MgZGUgbGEgcmVnacOzbiBDYXJpYmUgZW4gZWwgYcOxbyAyMDIyLsKgDQoNClBlcm1pdGllbmRvIGFuYWxpemFyIGRpZmVyZW50ZXMgZGV0ZXJtaW5hbnRlcyBxdWUgc2lydmFuIGRlIGhlcnJhbWllbnRhcyBwYXJhIHRvbWEgZGUgZGVjaXNpb25lcyBlbiBlbCBzZWN0b3IgZmluYW5jaWVyby4NCg0KIyMgQ29udGV4dG8gZ2VuZXJhbCB5IHJlbGV2YW5jaWEgZGVsIHByb2JsZW1hDQoNCkRlIGFjdWVyZG8gY29uIGxhIEVuY3Vlc3RhIGRlIE1pY3JvbmVnb2Npb3MgKEVNSUNST04pIG3DoXMgYWN0dWFsaXphZGEgZGVsIERBTkUsIGVzdG9zIG5lZ29jaW9zIHByb2R1amVyb24gY2VyY2EgZGUgNi45IG1pbGxvbmVzIGRlIHB1ZXN0b3MgZGUgdHJhYmFqbyBlbiAyMDIyLCBsbyBxdWUgZXF1aXZhbGUgYWwgMzElIGRlbCBlbXBsZW8gdG90YWwgY29sb21iaWFuby5cDQpcDQpNw6FzIGFsbMOhIGRlIHN1IGFwb3J0ZSBudW3DqXJpY28gYWwgZW1wbGVvLiBTZSBlc3RpbcOzIHF1ZSBlbiAyMDI0IGhhYsOtYSA1LjI5Ny4yNTIgbWljcm9uZWdvY2lvcyBlbiB0b2RvIGVsIHBhw61zLCBwcm9kdWNpZW5kbyBpbmdyZXNvcyBub21pbmFsZXMgbyB2YWxvciBkZSB2ZW50YXMgcG9yIFwkMTkxLDIgYmlsbG9uZXMgZGUgYSBsYSBwcm9kdWNjacOzbiwgbG9zIG1pY3JvbmVnb2Npb3Mgc29uIGltcG9ydGFudGVzIHBhcmEgbGEgZWNvbm9tw61hLCBzZXIgbGEgw7puaWNhIG9wY2nDs24gZGUgc3Vic2lzdGVuY2lhIHBhcmEgZ3JhbmRlcyBzZWN0b3JlcyBkZSBsYSBwb2JsYWNpw7NuIHksIGFkZW3DoXMsIHNvbiBtb3RvcmVzIGRlbCBjcmVjaW1pZW50byBlbiBlbCBpbmdyZXNvIHkgbGEgY3JlYWNpw7NuIGRlIHB1ZXN0b3MgbGFib3JhbGVzIGVuIGxhcyBlY29ub23DrWFzIGVtZXJnZW50ZXMuIEVuIGVsIG1hcmNvIGNvbG9tYmlhbm8sIHN1IGFuw6FsaXNpcyB5IGVudGVuZGltaWVudG8gc29uIGVzZW5jaWFsZXMgcGFyYSBjcmVhciBwb2zDrXRpY2FzIHDDumJsaWNhcyBxdWUgc2VhbiBlZmVjdGl2YXMuDQoNCkNvbnNpZGVyYW5kbyBxdWUgbGFzIG1pY3JvZW1wcmVzYXMgY29uc3RpdHV5ZW4gZWwgOTYlIGRlbCBtb3ZpbWllbnRvIGVtcHJlc2FyaWFsIGVuIENvbG9tYmlhLCBzZSBidXNjw7MgYW5hbGl6YXIgZGUgbWFuZXJhIG3DoXMgZGV0YWxsYWRhIHkgZW5mb2NhZGEgbGEgcmVnacOzbiBjYXJpYmUsIHF1ZSBjdWVudGEgY29uIGFudGVjZWRlbnRlcyBkZSB1biBncmFuIGZsdWpvIGRlIG1vdmltaWVudG9zIGZpbmFuY2llcm9zIGRlYmlkbyBhIHN1IHViaWNhY2nDs24gZ2VvZ3LDoWZpY2EgeSBwcm90YWdvbmlzbW8gZW4gZGVzdGlubyB0dXLDrXN0aWNvIG5vIHNvbG8gZGVsIHBhw61zIHNpbm8gdGFtYmnDqW4gZGUgc3VyYW3DqXJpY2EuDQoNCkNvbXByZW5kZXIgcXXDqSBmYWN0b3JlcyBpbmZsdXllbiBlbiBlbCBkZXNlbXBlw7FvIGNvbWVyY2lhbCBkZSBlc3RhcyB1bmlkYWRlcyBlY29uw7NtaWNhcyBlcyBlc2VuY2lhbCBwYXJhIGRpc2XDsWFyIGludGVydmVuY2lvbmVzIHF1ZSBwcm9tdWV2YW4gc3UgY3JlY2ltaWVudG8sIHNvc3RlbmliaWxpZGFkIHkgY29udHJpYnVjacOzbiBhbCBkZXNhcnJvbGxvIHJlZ2lvbmFsLg0KDQojIyBQbGFudGVhbWllbnRvIGRlbCBwcm9ibGVtYSBhIG1vZGVsYXINCg0KRWwgcHJvYmxlbWEgY2VudHJhbCBkZSBpbnZlc3RpZ2FjacOzbiBzZSBhcnRpY3VsYSBlbiB0b3JubyBhIGxhIHByZWd1bnRhOiDCv0N1w6FsZXMgc29uIGxvcyBwcmluY2lwYWxlcyBmYWN0b3JlcyBxdWUgZGV0ZXJtaW5hbiBsYXMgdmVudGFzIGRlIGxvcyBtaWNyb25lZ29jaW9zIGVuIGxhIHJlZ2nDs24gQ2FyaWJlLUNvbG9tYmlhbmEgeSBjw7NtbyBzZSBwdWVkZSBtb2RlbGFyIGVzdGEgcmVsYWNpw7NuIGRlIG1hbmVyYSBlbXDDrXJpY2FtZW50ZSByb2J1c3RhPw0KDQpFc3RhIHByZWd1bnRhIGRlIGludmVzdGlnYWNpw7NuIHN1cmdlIGRlIGxhIG5lY2VzaWRhZCBkZSBjb21wcmVuZGVyIGxvcyBtZWNhbmlzbW9zIHF1ZSBzdWJ5YWNlbiBhbCBkZXNlbXBlw7FvIGNvbWVyY2lhbCBkZSBsb3MgbWljcm9uZWdvY2lvcywgcGFydGljdWxhcm1lbnRlIGVuIHVuIGNvbnRleHRvIHJlZ2lvbmFsIGNhcmFjdGVyaXphZG8gcG9yIGRlc2Fmw61vcyBlc3RydWN0dXJhbGVzIHkgaGV0ZXJvZ2VuZWlkYWQgdGVycml0b3JpYWwuIExhIGxpdGVyYXR1cmEgZXNwZWNpYWxpemFkYSBoYSBpZGVudGlmaWNhZG8gZGl2ZXJzb3MgZmFjdG9yZXMgcXVlIHB1ZWRlbiBpbmZsdWlyIGVuIGVsIGRlc2VtcGXDsW8gZGUgbGFzIG1pY3JvZW1wcmVzYXMsIGluY2x1eWVuZG8gYXNwZWN0b3MgZmluYW5jaWVyb3MsIG9wZXJhdGl2b3MsIHRlcnJpdG9yaWFsZXMgeSBkZSBjYXBhY2lkYWRlcy4NCg0KRGVzZGUgdW5hIHBlcnNwZWN0aXZhIHRlw7NyaWNhLCBzZSBlc3BlcmEgcXVlIHZhcmlhYmxlcyBjb21vIGxvcyBnYXN0b3Mgb3BlcmF0aXZvcywgZWwgdmFsb3IgYWdyZWdhZG8gZ2VuZXJhZG8sIGxhIGludmVyc2nDs24gZW4gYWN0aXZvcyB5IGxvcyBjb3N0b3MgZGUgYXJyZW5kYW1pZW50byBtYW50ZW5nYW4gcmVsYWNpb25lcyBzaXN0ZW3DoXRpY2FzIGNvbiBsYXMgdmVudGFzIGRlIGxvcyBtaWNyb25lZ29jaW9zLiBMb3MgZ2FzdG9zIG9wZXJhdGl2b3MsIGVuIHBhcnRpY3VsYXIsIHJlcHJlc2VudGFuIGVsIGNhcGl0YWwgZGUgdHJhYmFqbyBuZWNlc2FyaW8gcGFyYSBnZW5lcmFyIGFjdGl2aWRhZCBjb21lcmNpYWwsIG1pZW50cmFzIHF1ZSBlbCB2YWxvciBhZ3JlZ2FkbyByZWZsZWphIGxhIHByb2R1Y3RpdmlkYWQgeSBjYXBhY2lkYWQgZGUgZGlmZXJlbmNpYWNpw7NuIGRlIGVzdGFzIHVuaWRhZGVzIGVjb27Ds21pY2FzLg0KDQpMYXMgZGlmZXJlbmNpYXMgdGVycml0b3JpYWxlcyBjb25zdGl0dXllbiBvdHJvIGVsZW1lbnRvIGNsYXZlIGRlbCBwcm9ibGVtYSBkZSBpbnZlc3RpZ2FjacOzbi4gTG9zIGRlcGFydGFtZW50b3MgZGUgbGEgcmVnacOzbiBDYXJpYmUgcHJlc2VudGFuIG5pdmVsZXMgZGUgZGVzYXJyb2xsbyBlY29uw7NtaWNvIGhldGVyb2fDqW5lb3MsIGxvIHF1ZSBzdWdpZXJlIHF1ZSBmYWN0b3JlcyBlc3RydWN0dXJhbGVzLCBpbnN0aXR1Y2lvbmFsZXMgeSBkZSBhY2Nlc28gYSBtZXJjYWRvcyBwdWVkZW4gZ2VuZXJhciB2ZW50YWphcyBvIGRlc3ZlbnRhamFzIGNvbXBhcmF0aXZhcyBxdWUgc2UgcmVmbGVqZW4gZW4gZWwgZGVzZW1wZcOxbyBjb21lcmNpYWwgZGUgbG9zIG1pY3JvbmVnb2Npb3MuDQoNCkVsIHByb2JsZW1hIGRlIGludmVzdGlnYWNpw7NuIHRhbWJpw6luIHNlIGVubWFyY2EgZW4gbGEgbmVjZXNpZGFkIGRlIGdlbmVyYXIgZXZpZGVuY2lhIGVtcMOtcmljYSBxdWUgY29udHJpYnV5YSBhbCBkaXNlw7FvIGRlIHBvbMOtdGljYXMgcMO6YmxpY2FzIGRpZmVyZW5jaWFkYXMuIExvcyBtaWNyb25lZ29jaW9zIGVuZnJlbnRhbiBtw7psdGlwbGVzIGxpbWl0YWNpb25lcyBwYXJhIHN1IGNyZWNpbWllbnRvIHkgZm9ybWFsaXphY2nDs24sIGluY2x1eWVuZG8gcmVzdHJpY2Npb25lcyBkZSBhY2Nlc28gYWwgY3LDqWRpdG8sIGxpbWl0YWNpb25lcyBkZSBjYXBhY2lkYWRlcyB0w6ljbmljYXMgeSBlbXByZXNhcmlhbGVzLCB5IGJhcnJlcmFzIHJlZ3VsYXRvcmlhcy4gQ29tcHJlbmRlciBjdcOhbGVzIGZhY3RvcmVzIHRpZW5lbiBtYXlvciBpbXBhY3RvIGVuIGxhcyB2ZW50YXMgcGVybWl0ZSBwcmlvcml6YXIgaW50ZXJ2ZW5jaW9uZXMgeSBhc2lnbmFyIHJlY3Vyc29zIGRlIG1hbmVyYSBtw6FzIGVmaWNpZW50ZS4NCjo6Og0KDQojIE1ldG9kb2xvZ8OtYSB5IERhdG9zDQoNCjo6OjogY29udGVudC1ibG9jaw0KKipCYXNlIGRlIGRhdG9zOioqIEVuY3Vlc3RhIGRlIE1pY3JvbmVnb2Npb3MgLSAyMDIyDQoNCioqVW5pZGFkIGRlIGFuw6FsaXNpczoqKiBFc3RhYmxlY2ltaWVudG9zIGVjb27Ds21pY29zDQoNCioqUGVyw61vZG86KiogKDIwMjIpDQoNCioqQWNjZXNvOioqIDxodHRwczovL21pY3JvZGF0b3MuZGFuZS5nb3YuY28vaW5kZXgucGhwL2NhdGFsb2cvNzk2Pg0KDQpMb3MgZGF0b3MgdXRpbGl6YWRvcyBlbiBlc3RhIGludmVzdGlnYWNpw7NuIHByb3ZpZW5lbiBkZSBsYSBFbmN1ZXN0YSBkZSBNaWNyb25lZ29jaW9zIChFTUlDUk9OKSAyMDIyIGRlbCBEZXBhcnRhbWVudG8gQWRtaW5pc3RyYXRpdm8gTmFjaW9uYWwgZGUgRXN0YWTDrXN0aWNhIChEQU5FKS4gTGEgRU1JQ1JPTiB1dGlsaXphIHVuYSB0w6ljbmljYSBkZSBlbmN1ZXN0YSBtaXh0YSBtb2R1bGFyIGVuIGRvcyBldGFwYXMgcGFyYSBsYSBpZGVudGlmaWNhY2nDs24geSBjYXJhY3Rlcml6YWNpw7NuIGRlIGxvcyBtaWNyb25lZ29jaW9zLg0KDQojIyBEZXNjcmlwY2nDs24gZGUgbGEgZnVlbnRlIGRlIGRhdG9zIHkgdmFyaWFibGVzIHV0aWxpemFkYXMNCg0KRWwgY29uanVudG8gZGUgdmFyaWFibGVzIHNlbGVjY2lvbmFkYXMgcGVydGVuZWNlbiBhIGxhIGJhc2UgZGUgZGF0b3MgZGVsIERBTkUgKEFOREEpLCBkZSBsYSBzZWNjacOzbiBkZSBpbmR1c3RyaWEgZW4gZWwgYXBhcnRhZG8gZGUgY29tZXJjaW8gaW50ZXJubyBlbiBkb25kZSBzZSBldmlkZW5jaWFuIHVuYSBzZXJpZSBkZSBlbmN1ZXN0YXMgcXVlIGJ1c2NhbiBjYXB0dXJhciBpbmZvcm1hY2nDs24gYWNlcmNhIGRlIGxvcyBtaWNyb25lZ29jaW9zIGRlbCBwYcOtczsgbGEgZW5jdWVzdGEgY29uIGxhIHF1ZSBzZSB0cmFiYWrDsyBmdWUgbGEgZW5jdWVzdGEgZGUgbWljcm9uZWdvY2lvcyBkZWwgYcOxbyAyMDIyIHkgc2UgdG9tw7MgbGEgbGlicmVyw61hIGRlbCBkaWNjaW9uYXJpbyBkZSBkYXRvcyBxdWUgY29ycmVzcG9uZGUgYSBlbCBtw7NkdWxvIGRlIGNvc3RvcywgZ2FzdG9zIHkgYWN0aXZvcy4NCg0KRWwgYW7DoWxpc2lzIHNlIGVzdGFibGVjZSBlbiBsb3MgbWljcm9uZWdvY2lvcyB1YmljYWRvcyBlbiBsYSByZWdpw7NuIENhcmliZS1Db2xvbWJpYW5hLCBlc3BlY8OtZmljYW1lbnRlIGVuIGxvcyBkZXBhcnRhbWVudG9zIGRlIEF0bMOhbnRpY28sIEJvbMOtdmFyLCBDZXNhciwgTGEgR3VhamlyYSwgTWFnZGFsZW5hLCBTdWNyZSB5IEPDs3Jkb2JhLiBMYXMgdmVudGFzIGNvbnN0aXR1eWVuIGxhIHByaW5jaXBhbCBmdWVudGUgZGUgaW5ncmVzbyBkZSBsb3MgbWljcm9uZWdvY2lvcywgcG9yIGNvbnNpZ3VpZW50ZSB0YW1iacOpbiBhZmVjdGEgbG9zIGluZ3Jlc29zIGRlbCBkZXBhcnRhbWVudG8sIHJlZ2nDs24gecKgIGVsIGluZ3Jlc28gUElCIGRlbCBwYcOtcywgYXNpbWlzbW8gdGllbmUgdW4gZWZlY3RvIHNpZ25pZmljYXRpdm8gZW4gbGEgZ2VuZXJhY2nDs24gZGUgZW1wbGVvIHkgZm9tZW50byBkZSBhY3RpdmlkYWRlcyBjb24gZW1wcmVzYXMgZmlkdWNpYXJpYXMuDQoNCioqVmFyaWFibGUgRGVwZW5kaWVudGU6KioNCg0KLSAgICoqVmVudGFzIG1lcyBhbnRlcmlvcioqOiBWYWxvciBtb25ldGFyaW8gZGUgbGFzIHZlbnRhcyBvIGluZ3Jlc29zIGdlbmVyYWRvcyBwb3IgZWwgbWljcm9uZWdvY2lvIGVuIGVsIG1lcyBpbm1lZGlhdGFtZW50ZSBhbnRlcmlvciBhbCBtb21lbnRvIGRlIGxhIGVuY3Vlc3RhLg0KDQoqKlZhcmlhYmxlcyBJbmRlcGVuZGllbnRlczoqKg0KDQotICAgKipHYXN0b3MgbWVzIGFudGVyaW9yKio6IEdhc3RvcyB0b3RhbGVzIGluY3Vycmlkb3MgcG9yIGVsIG1pY3JvbmVnb2NpbyBlbiBhY3RpdmlkYWRlcyBvcGVyYXRpdmFzIGR1cmFudGUgZWwgbWVzIGFudGVyaW9yLg0KDQotICAgKipWYWxvciBhZ3JlZ2FkbyoqOiBEaWZlcmVuY2lhIGVudHJlIGVsIHZhbG9yIGRlIGxhIHByb2R1Y2Npw7NuIHkgZWwgY29uc3VtbyBpbnRlcm1lZGlvLCByZXByZXNlbnRhbmRvIGxhIGNvbnRyaWJ1Y2nDs24gZGVsIG1pY3JvbmVnb2NpbyBhIGxhIGNyZWFjacOzbiBkZSB2YWxvciBlY29uw7NtaWNvLg0KDQotICAgKipJbnZlcnNpw7NuIGRlIGFjdGl2b3MqKjogU3VtYSB0b3RhbCBkZSBsYXMgaW52ZXJzaW9uZXMgcmVhbGl6YWRhcyBlbiBhY3Rpdm9zIHByb2R1Y3Rpdm9zLCBjYWxjdWxhZGEgY29tbyBsYSBzdW1hIGRlIGxhcyB2YXJpYWJsZXMgUDMwMTdcX1wqIGRlbCBtw7NkdWxvIGRlIGNvc3RvcyB5IGFjdGl2b3MuDQoNCi0gICAqKkFycmVuZGFtaWVudG8qKjogR2FzdG9zIGFzb2NpYWRvcyBhbCBhcnJlbmRhbWllbnRvIGRlIGJpZW5lcyBpbm11ZWJsZXMgeSBtdWVibGVzIG5lY2VzYXJpb3MgcGFyYSBsYSBvcGVyYWNpw7NuIGRlbCBtaWNyb25lZ29jaW8uDQoNCi0gICAqKkRlcGFydGFtZW50byoqOiBWYXJpYWJsZSBjYXRlZ8OzcmljYSBxdWUgaWRlbnRpZmljYSBsYSB1YmljYWNpw7NuIGRlcGFydGFtZW50YWwgZGVsIG1pY3JvbmVnb2Npby4NCg0KKipVbmlkYWQgZGUgYW7DoWxpc2lzOioqIEVzdGFibGVjaW1pZW50b3MgZWNvbsOzbWljb3MNCg0KKipQZXLDrW9kbzoqKiAoMjAyMikNCg0KYGBge3IgQmFzZSBkZSBkYXRvcywgZWNobz1GQUxTRSxXYXJuaW5nPUZBTFNFfQ0KbGlicmFyeShzdHJpbmdyKQ0KDQoNCmNvc3RvcyA8LSByZWFkX2NzdigiTcOzZHVsbyBkZSBjb3N0b3MsIGdhc3RvcyB5IGFjdGl2b3MuY3N2IiwNCiAgICAgICAgICAgICAgICAgICBsb2NhbGU9bG9jYWxlKGVuY29kaW5nID0gIlVURi04IikpDQp2ZW50YXMgPC0gcmVhZF9jc3YoIk3Ds2R1bG8gZGUgdmVudGFzIG8gaW5ncmVzb3MuY3N2IikNCg0KY2FyaWJlX2NvZCA8LSBjKCIwOCIsICIxMyIsICIyMCIsICI0NCIsICI0NyIsICI3MCIsICIyMyIpDQoNCkJhc2VGaW5hbCA8LSBjb3N0b3MgJT4lIA0KICAgaW5uZXJfam9pbih2ZW50YXMsIGJ5ID0gYygiRElSRUNUT1JJTyIsICJTRUNVRU5DSUFfUCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNFQ1VFTkNJQV9FTkNVRVNUQSIsICJDTEFTRV9URSIsICJDT0RfREVQVE8iLCAiQVJFQSIpKSAlPiUNCiAgbXV0YXRlKA0KICAgIEFSRUEgPSBzdHJfc3F1aXNoKGFzLmNoYXJhY3RlcihBUkVBKSksIA0KICAgIENPRF9ERVBUTyA9IHN0cl9zcXVpc2goYXMuY2hhcmFjdGVyKENPRF9ERVBUTykpLA0KICAgIElOVl9BQ1RJVk9TID0gcm93U3VtcyhzZWxlY3QoLiwgc3RhcnRzX3dpdGgoIlAzMDE3XyIpKSwgbmEucm0gPSBUUlVFKSwNCiAgICBOT01CUkVfREVQVE8gPSBjYXNlX3doZW4oDQogICAgICBDT0RfREVQVE8gPT0gIjA4IiB+ICJBdGzDoW50aWNvIiwNCiAgICAgIENPRF9ERVBUTyA9PSAiMTMiIH4gIkJvbMOtdmFyIiwNCiAgICAgIENPRF9ERVBUTyA9PSAiMjAiIH4gIkNlc2FyIiwNCiAgICAgIENPRF9ERVBUTyA9PSAiNDQiIH4gIkxhIEd1YWppcmEiLA0KICAgICAgQ09EX0RFUFRPID09ICI0NyIgfiAiTWFnZGFsZW5hIiwNCiAgICAgIENPRF9ERVBUTyA9PSAiNzAiIH4gIlN1Y3JlIiwNCiAgICAgIENPRF9ERVBUTyA9PSAiMjMiIH4gIkPDs3Jkb2JhIiwNCiAgICAgIFRSVUUgfiBOQV9jaGFyYWN0ZXJfDQogICAgKQ0KICApICU+JSANCiAgICBmaWx0ZXIoDQogICAgTk9NQlJFX0RFUFRPICVpbiUgYygiQXRsw6FudGljbyIsICJCb2zDrXZhciIsICJDZXNhciIsICJMYSBHdWFqaXJhIiwgIk1hZ2RhbGVuYSIsICJTdWNyZSIsICJDw7NyZG9iYSIpLA0KICAgIFZFTlRBU19NRVNfQU5URVJJT1IgPiAwLA0KICAgIFZBTE9SX0FHUkVHQURPID4gMCwNCiAgICBJTlZfQUNUSVZPUyA+IDAsDQogICAgR0FTVE9TX01FUyA+IDAsDQogICAgUDMwMTdfQSA+IDAsDQogICAgIWlzLm5hKFZFTlRBU19NRVNfQU5URVJJT1IpLA0KICAgICFpcy5uYShHQVNUT1NfTUVTKSwNCiAgICAhaXMubmEoUDMwMTdfQSksDQogICAgIWlzLm5hKFZBTE9SX0FHUkVHQURPKSwNCiAgICAhaXMubmEoSU5WX0FDVElWT1MpDQogICkgJT4lIA0KICAgbXV0YXRlKA0KICAgIFZFTlRBU19NRVNfQU5URVJJT1IgPSBhcy5udW1lcmljKFZFTlRBU19NRVNfQU5URVJJT1IpLA0KICAgIEdBU1RPU19NRVMgPSBhcy5udW1lcmljKEdBU1RPU19NRVMpLA0KICAgIFAzMDE3X0EgPSBhcy5udW1lcmljKFAzMDE3X0EpLA0KICAgIFZBTE9SX0FHUkVHQURPID0gYXMubnVtZXJpYyhWQUxPUl9BR1JFR0FETyksDQogICAgSU5WX0FDVElWT1MgPSBhcy5udW1lcmljKElOVl9BQ1RJVk9TKQ0KICApICU+JSANCiAgc2VsZWN0KFZFTlRBU19NRVNfQU5URVJJT1IsIEdBU1RPU19NRVMsIFAzMDE3X0EsDQogICAgICAgICBWQUxPUl9BR1JFR0FETywgSU5WX0FDVElWT1MsIE5PTUJSRV9ERVBUTykgJT4lIA0KICAgcmVuYW1lKCJWZW50YXMgbWVzIGFudGVyaW9yIj0xLCJHYXN0b3MgbWVzIGFudGVyaW9yIj0yLEFycmVuZGFtaWVudG89MywiVmFsb3IgYWdyZWdhZG8iPTQsIkludmVyc2lvbiBkZSBhY3Rpdm9zIj01LCJEZXBhcnRhbWVudG8iPTYpDQoNCmBgYA0KDQpMYSBtdWVzdHJhIGZpbmFsIHNlIGNvbmNlbnRyYSBlbiBsb3Mgc2lldGUgZGVwYXJ0YW1lbnRvcyBkZWwgQ2FyaWJlIGNvbG9tYmlhbm86IEF0bMOhbnRpY28sIEJvbMOtdmFyLCBDZXNhciwgQ8OzcmRvYmEsIExhIEd1YWppcmEsIE1hZ2RhbGVuYSB5IFN1Y3JlLiBTZSBhcGxpY2Fyb24gZmlsdHJvcyBlc3RyaWN0b3MgcGFyYSBnYXJhbnRpemFyIGxhIGNhbGlkYWQgZGUgbG9zIGRhdG9zLCBpbmNsdXllbmRvIHNvbG8gb2JzZXJ2YWNpb25lcyBjb24gdmFsb3JlcyBwb3NpdGl2b3MgZW4gdG9kYXMgbGFzIHZhcmlhYmxlcyBjbGF2ZSB5IHNpbiBkYXRvcyBmYWx0YW50ZXMuDQoNCiMjIEp1c3RpZmljYWNpw7NuIGRlIGxhIHNlbGVjY2nDs24gZGUgdmFyaWFibGVzIGRlcGVuZGllbnRlIGUgaW5kZXBlbmRpZW50ZXMNCg0KTGEgc2VsZWNjacOzbiBkZSAqKlZlbnRhcyBkZWwgTWVzIEFudGVyaW9yKiogY29tbyB2YXJpYWJsZSBkZXBlbmRpZW50ZSBzZSBmdW5kYW1lbnRhIGVuIHN1IGNhcsOhY3RlciBkZSBpbmRpY2Fkb3IgZGlyZWN0byBkZWwgZGVzZW1wZcOxbyBjb21lcmNpYWwgZGUgbG9zIG1pY3JvbmVnb2Npb3MuIExhcyB2ZW50YXMgcmVwcmVzZW50YW4gZWwgcmVzdWx0YWRvIGZpbmFsIGRlIGxhIGFjdGl2aWRhZCBlY29uw7NtaWNhIHkgY29uc3RpdHV5ZW4gbGEgcHJpbmNpcGFsIGZ1ZW50ZSBkZSBpbmdyZXNvcyBwYXJhIGVzdGFzIHVuaWRhZGVzIHByb2R1Y3RpdmFzLg0KDQpMYSBlbGVjY2nDs24gZGUgbGFzIHZhcmlhYmxlcyBpbmRlcGVuZGllbnRlcyBzZSBiYXNhIGVuIGZ1bmRhbWVudG9zIHRlw7NyaWNvcyBkZSBsb3MgZnVuZGFtZW50b3MgZGUgbGEgZWNvbm9taWEuIENhZGEgdmFyaWFibGUgc2VsZWNjaW9uYWRhIHJlcHJlc2VudGEgdW4gYXNwZWN0byBmdW5kYW1lbnRhbCBkZSBsYSBvcGVyYWNpw7NuIGRlIGxvcyBtaWNyb25lZ29jaW9zOg0KDQoxLiAgKipHYXN0b3MgbWVzIGFudGVyaW9yKiogZnVuY2lvbmFuIGNvbW8gcHJlbWlzYSBkZWwgY2FwaXRhbCBkZSB0cmFiYWpvIHV0aWxpemFkbyBlbiBsYSBnZW5lcmFjacOzbiBkZSB2ZW50YXMuIExhIHRlb3LDrWEgZWNvbsOzbWljYSBlc3RhYmxlY2UgdW5hIHJlbGFjacOzbiBkaXJlY3RhIGVudHJlIGxhIGludmVyc2nDs24gZW4gYWN0aXZpZGFkZXMgb3BlcmF0aXZhcyB5IGxhIGNhcGFjaWRhZCBkZSBnZW5lcmFyIGluZ3Jlc29zLiBFc3RhIHZhcmlhYmxlIGNhcHR1cmEgdGFudG8gbG9zIGNvc3RvcyB2YXJpYWJsZXMgZGlyZWN0YW1lbnRlIGFzb2NpYWRvcyBhIGxhIHByb2R1Y2Npw7NuIGNvbW8gbG9zIGdhc3RvcyBvcGVyYXRpdm9zIG5lY2VzYXJpb3MgcGFyYSBtYW50ZW5lciBsYSBhY3RpdmlkYWQgY29tZXJjaWFsLg0KDQoyLiAgKipWYWxvciBhZ3JlZ2FkbyoqIFJlcHJlc2VudGEgbGEgcHJvZHVjdGl2aWRhZCB5IGVmaWNpZW5jaWEgZGUgbG9zIHByb2Nlc29zIHByb2R1Y3Rpdm9zIGRlbCBtaWNyb25lZ29jaW8uIEVzdGEgdmFyaWFibGUgZXMgcGFydGljdWxhcm1lbnRlIGltcG9ydGFudGUgcG9ycXVlIHJlZmxlamEgbGEgY2FwYWNpZGFkIGRlIGxhIHVuaWRhZCBlY29uw7NtaWNhIHBhcmEgZ2VuZXJhciB2YWxvciBtw6FzIGFsbMOhIGRlbCBjb3N0byBkZSBsb3MgaW5zdW1vcyB1dGlsaXphZG9zLiBNaWNyb25lZ29jaW9zIGNvbiBtYXlvciB2YWxvciBhZ3JlZ2FkbyBkZWJlcsOtYW4sIGVuIHByaW5jaXBpbywgZ2VuZXJhciBtYXlvcmVzIG5pdmVsZXMgZGUgdmVudGFzLg0KDQozLiAgKipJbnZlcnNpw7NuIGRlIGFjdGl2b3MqKiBFcyB1bmEgaGVycmFtaWVudGEgcXVlIHNpcnZlIGNvbW8gaW5kaWNhZG9yIGRlIGxhcyBkaWZlcmVudGVzIG1vZGlmaWNhY2lvbmVzIGVzdHJ1Y3R1cmFsZXMgcmVhbGl6YWRhcyBkZW50cm8gZGUgbG9zIG1pY3JvbmVnb2Npb3MgZW4gcHJvIGRlIGF1bWVudGFyIGxhIHByb2R1Y3RpdmlkYWQgeSBjb21wZXRpdGl2aWRhZC4NCg0KNC4gICoqQXJyZW5kYW1pZW50byoqIHJlcHJlc2VudGEgbG9zIGNvc3RvcyBmaWpvcyBlc3RydWN0dXJhbGVzIHF1ZSBlbmZyZW50YW4gbG9zIG1pY3JvbmVnb2Npb3MuIEVzdGEgdmFyaWFibGUgcGVybWl0ZSBjb250cm9sYXIgcG9yIGRpZmVyZW5jaWFzIGVuIGxhIGVzdHJ1Y3R1cmEgZGUgY29zdG9zIHF1ZSBwdWVkZW4gYWZlY3RhciBsYSByZWxhY2nDs24gZW50cmUgb3RyYXMgdmFyaWFibGVzIHkgbGFzIHZlbnRhcy4NCg0KNS4gICoqRGVwYXJ0YW1lbnRvKiogZXMgaW5jbHVpZGEgY29tbyB2YXJpYWJsZSBkZSBjb21wYXJhY2nDs24gcGFyYSBjYXB0dXJhciBkaWZlcmVudGVzIHBlcnNwZWN0aXZhcyBjb24gZmFjdG9yZXMgdGVycml0b3JpYWxlcywgZGVtb2dyYWZpY2FzIHkgZGUgYWNjZXNvIGEgbWVyY2Fkb3MuIExhcyBkaWZlcmVuY2lhcyBlbnRyZSBkZXBhcnRhbWVudG9zIHB1ZWRlbiByZWZsZWphciB2YXJpYWNpb25lcyBlbiBpbmZyYWVzdHJ1Y3R1cmEsIGNhcmFjdGVyw61zdGljYXMgZGUgbG9zIG1lcmNhZG9zIHkgZGluw6FtaWNhcyBlY29uw7NtaWNhcyByZWdpb25hbGVzLg0KDQojIyBEZXNjcmlwY2nDs24gZGVsIG1vZGVsbyBkZSByZWdyZXNpw7NuIGxpbmVhbCBtw7psdGlwbGUNCg0KRWwgbW9kZWxvIGxpbmVhbCBidXNjYSBlbmNvbnRyYXIgZGVwZW5kZW5jaWFzIGNvbiBsYXMgdmFyaWFibGVzIGluZGVwZW5kaWVudGVzIHF1ZSBpbmNsdXllbiBmYWN0b3JlcyBnZW9ncsOhZmljb3MsIGRlbW9ncsOhZmljb3MsIGRlIGludmVyc2nDs24geSBnYXN0b3MuIEVzdGUgZW5mb3F1ZSBtZXRvZG9sw7NnaWNvIGVzIHBhcnRpY3VsYXJtZW50ZSBhcHJvcGlhZG8gcGFyYSBlbCBhbsOhbGlzaXMgZGUgbWljcm9uZWdvY2lvcyBwb3JxdWUgcGVybWl0ZSBhaXNsYXIgZWwgZWZlY3RvIGVzcGVjw61maWNvIGRlIGNhZGEgZmFjdG9yIG1pZW50cmFzIHNlIGNvbnRyb2xhIHBvciBsYSBpbmZsdWVuY2lhIGRlIGxhcyBkZW3DoXMgdmFyaWFibGVzLg0KDQpFbCBtb2RlbG8gYXN1bWUgcXVlIGV4aXN0ZSB1bmEgcmVsYWNpw7NuIGxpbmVhbCBlbnRyZSBsYXMgdmFyaWFibGVzIGluZGVwZW5kaWVudGVzIHkgbGEgdmFyaWFibGUgZGVwZW5kaWVudGUsIGRvbmRlIGxvcyBlZmVjdG9zIGRlIGxhcyB2YXJpYWJsZXMgZXhwbGljYXRpdmFzIHNvbiBhZGl0aXZvcy4gRXN0YSBlc3BlY2lmaWNhY2nDs24gcGVybWl0ZSBpbnRlcnByZXRhciBjYWRhIGNvZWZpY2llbnRlIGNvbW8gZWwgY2FtYmlvIG1hcmdpbmFsIGVuIGxhIHZhcmlhYmxlIGRlcGVuZGllbnRlIGFudGUgdW4gY2FtYmlvIHVuaXRhcmlvIGVuIGxhIHZhcmlhYmxlIGluZGVwZW5kaWVudGUgY29ycmVzcG9uZGllbnRlLCBtYW50ZW5pZW5kbyBjb25zdGFudGVzIGxhcyBkZW3DoXMgdmFyaWFibGVzLg0KDQpMb3Mgc3VwdWVzdG9zIGZ1bmRhbWVudGFsZXMgZGVsIG1vZGVsbyBpbmNsdXllbjoNCg0KLSAgICoqTGluZWFsaWRhZCoqOiBMYSByZWxhY2nDs24gZW50cmUgdmFyaWFibGVzIGluZGVwZW5kaWVudGVzIHkgZGVwZW5kaWVudGUgZXMgbGluZWFsIGVuIGxvcyBwYXLDoW1ldHJvcy4NCg0KLSAgICoqSW5kZXBlbmRlbmNpYSoqOiBMYXMgb2JzZXJ2YWNpb25lcyBzb24gaW5kZXBlbmRpZW50ZXMgZW50cmUgc8OtLg0KDQotICAgKipIb21vY2VkYXN0aWNpZGFkKio6IExhIHZhcmlhbnphIGRlIGxvcyBlcnJvcmVzIGVzIGNvbnN0YW50ZSBwYXJhIHRvZGFzIGxhcyBvYnNlcnZhY2lvbmVzLg0KDQotICAgKipOb3JtYWxpZGFkKio6IExvcyBlcnJvcmVzIHNpZ3VlbiB1bmEgZGlzdHJpYnVjacOzbiBub3JtYWwuDQoNCi0gICAqKk5vIG11bHRpY29saW5lYWxpZGFkKio6IExhcyB2YXJpYWJsZXMgaW5kZXBlbmRpZW50ZXMgbm8gZXN0w6FuIHBlcmZlY3RhbWVudGUgY29ycmVsYWNpb25hZGFzIGVudHJlIHPDrS4NCg0KRWwgbcOpdG9kbyBkZSBlc3RpbWFjacOzbiB1dGlsaXphZG8gZXMgbcOtbmltb3MgY3VhZHJhZG9zIG9yZGluYXJpb3MgKE1DTyksIHF1ZSBtaW5pbWl6YSBsYSBzdW1hIGRlIGxvcyBjdWFkcmFkb3MgZGUgbG9zIHJlc2lkdW9zIHBhcmEgb2J0ZW5lciBlc3RpbWFkb3JlcyBpbnNlc2dhZG9zLCBjb25zaXN0ZW50ZXMgeSBlZmljaWVudGVzLiBMYSB2YWxpZGV6IGRlIGxhcyBpbmZlcmVuY2lhcyBlc3RhZMOtc3RpY2FzIGRlcGVuZGUgZGVsIGN1bXBsaW1pZW50byBkZSBsb3Mgc3VwdWVzdG9zIGRlbCBtb2RlbG8sIGxvcyBjdWFsZXMgc29uIGV2YWx1YWRvcyBtZWRpYW50ZSBwcnVlYmFzIGRlIGRpYWduw7NzdGljbyBlc3BlY8OtZmljYXMuDQoNCiMjIEVjdWFjacOzbiBmb3JtYWwgZGVsIG1vZGVsbw0KDQpMYSByZWdyZXNpw7NuIGxpbmVhbCBtw7psdGlwbGUgc2UgZnVuZGFtZW50YSBlbiBsYSBwcmVtaXNhIGRlIHF1ZSBsYSB2YXJpYWJsZSBkZXBlbmRpZW50ZSBwdWVkZSBleHByZXNhcnNlIGNvbW8gdW5hIGZ1bmNpw7NuIGxpbmVhbCBlbiBkb25kZSBsYXMgcGVuZGluZXRlcyByZXByZXNlbnRhbiBsb3MgZWZlY3RvcyBkZSBsYXMgdmFyaWFibGVzIGluZGVwZW5kaWVudGVzIHNvYnJlIGxhIHVuaWRhZCBkZSBsYSB2YXJpYWJsZSBkZXBlbmRpZW50ZS4gTWF0ZW3DoXRpY2FtZW50ZSwgZWwgbW9kZWxvIHNlIHJlcHJlc2VudGEgY29tbzoNCg0KOjo6IGNvbnRlbnQtYmxvY2sNCiQkVmVudGFzX2kgPSBcYmV0YV8wICsgXGJldGFfMSBcLCBHYXN0b3NfaSArIFxiZXRhXzIgXCwgVmFsb3JBZ3JlZ2Fkb19pICsgXGJldGFfMyBcLCBJbnZlcnNpb25BY3Rpdm9zX2kuLi4kJCAkJCtcYmV0YV80IFwsIEFycmVuZGFtaWVudG9faSArIFxzdW1fe2o9MX1eezZ9IFxnYW1tYV9qIFwsIERlcGFydGFtZW50b197aixpfSArIFx2YXJlcHNpbG9uX2kkJA0KDQpEb25kZToNCg0KLSAgICRWZW50YXNfaSQgcmVwcmVzZW50YSBsYXMgdmVudGFzIGRlbCBtZXMgYW50ZXJpb3IgcGFyYSBlbCBtaWNyb25lZ29jaW8gJGkkDQoNCi0gICAkzrJfMCQgZXMgZWwgaW50ZXJjZXB0byBkZWwgbW9kZWxvDQoNCi0gICAkzrJfMSzOsl8yLM6yXzMszrJfNCQgc29uIGxvcyBjb2VmaWNpZW50ZXMgZGUgbGFzIHZhcmlhYmxlcyBjdWFudGl0YXRpdmFzDQoNCi0gICAkWV9qJCBzb24gbG8gc29uIGxvcyBjb2VmaWNpZW50ZXMgZGUgbGFzIHZhcmlhYmxlcyBkdW1teSBkZXBhcnRhbWVudGFsZXMgKGogPSAxLCAuLi4sIDYpDQoNCi0gICAkzrVfaSQgZXMgZWwgdMOpcm1pbm8gZGUgZXJyb3IgYWxlYXRvcmlvDQoNCi0gICAkaT0xLC4uLixuaT0xLC4uLixuJCBpbmRleGEgbGFzIG9ic2VydmFjaW9uZXMgaW5kaXZpZHVhbGVzDQo6OjoNCg0KRW4gZm9ybWEgbWF0cmljaWFsLCBlbCBtb2RlbG8gc2UgZXhwcmVzYSBjb21vOg0KDQokWT1YzrIrzrUkDQoNCkRvbmRlICRZJCBlcyBlbCB2ZWN0b3IgZGUgdmFyaWFibGVzIGRlcGVuZGllbnRlcywgJFgkIGVzIGxhIG1hdHJpeiBkZSB2YXJpYWJsZXMgaW5kZXBlbmRpZW50ZXMsICTOsiQgZXMgZWwgdmVjdG9yIGRlIHBhcsOhbWV0cm9zIGEgZXN0aW1hciB5ICTOtSQgZXMgZWwgdmVjdG9yIGRlIGVycm9yZXMgYWxlYXRvcmlvcy4NCjo6OjoNCg0KIyBSZXN1bHRhZG9zIERlc2NyaXB0aXZvcw0KDQo6Ojo6IGNvbnRlbnQtYmxvY2sNCkVsIGFuw6FsaXNpcyBkZSByZWdyZXNpw7NuIGxpbmVhbCBtw7psdGlwbGUgY29uc3RpdHV5ZSB1bmEgaGVycmFtaWVudGEgZnVuZGFtZW50YWwgZW4gbGEgaW52ZXN0aWdhY2nDs24gZW1wcmVzYXJpYWwgeSBlbCBhbsOhbGlzaXMgZGUgZGF0b3MgY29tZXJjaWFsZXMuIEVuIGVsIGNvbnRleHRvIGFjdHVhbCBkZSBtZXJjYWRvcyBhbHRhbWVudGUgY29tcGV0aXRpdm9zLCBjb21wcmVuZGVyIGxvcyBmYWN0b3JlcyBxdWUgaW5mbHV5ZW4gZW4gbGFzIHZlbnRhcyBzZSBoYSB2dWVsdG8gY3J1Y2lhbCBwYXJhIGVsIMOpeGl0byBvcmdhbml6YWNpb25hbC4NCg0KRXN0ZSBlc3R1ZGlvIHNlIGVuZm9jYSBlbiBleGFtaW5hciBsYXMgcmVsYWNpb25lcyBjdWFudGl0YXRpdmFzIGVudHJlIG3Dumx0aXBsZXMgdmFyaWFibGVzIHByZWRpY3RpdmFzIHkgZWwgZGVzZW1wZcOxbyBkZSB2ZW50YXMgZW1wcmVzYXJpYWxlcywgdXRpbGl6YW5kbyB0w6ljbmljYXMgZXN0YWTDrXN0aWNhcyBhdmFuemFkYXMgcGFyYSBpZGVudGlmaWNhciBwYXRyb25lcywgdGVuZGVuY2lhcyB5IHJlbGFjaW9uZXMgY2F1c2FsZXMgcXVlIHB1ZWRhbiBpbmZvcm1hciBlc3RyYXRlZ2lhcyBjb21lcmNpYWxlcyBlZmVjdGl2YXMuDQoNCiMjIEVzdGFkw61zdGljYXMgZGVzY3JpcHRpdmFzIGRlIGxhcyB2YXJpYWJsZXMNCg0KOjo6IGNvbnRlbnQtYmxvY2sNCkxhIHNlbGVjY2nDs24gZGUgKipWZW50YXMgZGVsIE1lcyBBbnRlcmlvcioqIGNvbW8gdmFyaWFibGUgZGVwZW5kaWVudGUgc2UgZnVuZGFtZW50YSBlbiBzdSBjYXLDoWN0ZXIgZGUgaW5kaWNhZG9yIGRpcmVjdG8gZGVsIGRlc2VtcGXDsW8gY29tZXJjaWFsIGRlIGxvcyBtaWNyb25lZ29jaW9zLiBMYXMgdmVudGFzIHJlcHJlc2VudGFuIGVsIHJlc3VsdGFkbyBmaW5hbCBkZSBsYSBhY3RpdmlkYWQgZWNvbsOzbWljYSB5IGNvbnN0aXR1eWVuIGxhIHByaW5jaXBhbCBmdWVudGUgZGUgaW5ncmVzb3MgcGFyYSBlc3RhcyB1bmlkYWRlcyBwcm9kdWN0aXZhcy4NCg0KTGEgZWxlY2Npw7NuIGRlIGxhcyB2YXJpYWJsZXMgaW5kZXBlbmRpZW50ZXMgc2UgYmFzYSBlbiBmdW5kYW1lbnRvcyB0ZcOzcmljb3MgZGUgbG9zIGZ1bmRhbWVudG9zIGRlIGxhIGVjb25vbWlhLiBDYWRhIHZhcmlhYmxlIHNlbGVjY2lvbmFkYSByZXByZXNlbnRhIHVuIGFzcGVjdG8gZnVuZGFtZW50YWwgZGUgbGEgb3BlcmFjacOzbiBkZSBsb3MgbWljcm9uZWdvY2lvczoNCg0KIyMjIFZlbnRhcyBkZSBsb3MgTWljcm9uZWdvY2lvcyBlbiBsYSBSZWdpw7NuIENhcmliZQ0KDQpgYGB7ciBlc3RhZGlzdGljYXMgZGUgeSwgZWNobz1GQUxTRSxXYXJuaW5nPUZBTFNFfQ0KZXN0YWRpc3RpY2FzIDwtIEJhc2VGaW5hbCAlPiUNCiAgZ3JvdXBfYnkoRGVwYXJ0YW1lbnRvKSAlPiUNCiAgc3VtbWFyaXNlKA0KICAgIG4gPSBuKCksDQogICAgIk1lZGlhIHZlbnRhcyIgPSByb3VuZChtZWFuKGBWZW50YXMgbWVzIGFudGVyaW9yYCksIDIpLA0KICAgICJEZXN2aWFjaW9uIGRlIGxhcyB2ZW50YXMiID0gcm91bmQoc2QoYFZlbnRhcyBtZXMgYW50ZXJpb3JgKSwgMiksDQogICAgIk1lZGlhbmEgZGVsIG1lcyBhbnRlcmlvciIgPSByb3VuZChtZWRpYW4oYFZlbnRhcyBtZXMgYW50ZXJpb3JgKSwgMiksDQogICAgTWluID0gcm91bmQobWluKGBWZW50YXMgbWVzIGFudGVyaW9yYCksIDIpLA0KICAgIE1heCA9IHJvdW5kKG1heChgVmVudGFzIG1lcyBhbnRlcmlvcmApLCAyKSkNCg0Ka2FibGUoZXN0YWRpc3RpY2FzLCANCiAgICAgIGFsaWduID0gYygibCIsICJjIiwgInIiLCAiciIsICJyIiwgInIiLCAiciIpLA0KICAgICAgZm9ybWF0LmFyZ3MgPSBsaXN0KGJpZy5tYXJrID0gIiwiLCBkZWNpbWFsLm1hcmsgPSAiLiIpLA0KICAgICAgY29sLm5hbWVzID0gYygiRGVwYXJ0YW1lbnRvIiwgIk51bWVybyBkZSByZWdpc3Ryb3MiLCAiTWVkaWEgVmVudGFzIiwgIkRlc3YuIEVzdC4gdmVudGEiLCAiTWVkaWFuYSIsICJNw61uaW1vIHZlbnRhIiwgIk3DoXhpbW8gdmVudGEiKSwNCiAgICAgIGNhcHRpb24gPSAiVEFCTEEgMS4gRVNUQURJU1RJQ0EgREVTQ1JJUFRJVkEgREUgTEFTIFZFTlRBUy4iKSAlPiUNCiAga2FibGVfc3R5bGluZygNCiAgICBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiKSwNCiAgICBmdWxsX3dpZHRoID0gRkFMU0UsDQogICAgZm9udF9zaXplID0gMTIsDQogICAgcG9zaXRpb24gPSAiY2VudGVyIiwNCiAgICBsYXRleF9vcHRpb25zID0gImhvbGRfcG9zaXRpb24iDQogICkgJT4lDQogIGFkZF9oZWFkZXJfYWJvdmUoYygiICIgPSAxLCAiVGFtYcOxbyBNdWVzdHJhbCIgPSAxLCAiRXN0YWTDrXN0aWNhcyBkZSBWZW50YXMgKCQpIiA9IDUpLA0KICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQgPSAiIzJDM0U1MCIsIGNvbG9yID0gIndoaXRlIikgJT4lDQogIHJvd19zcGVjKDAsIGJhY2tncm91bmQgPSAiIzM0NDk1RSIsIGNvbG9yID0gIndoaXRlIiwgYm9sZCA9IFRSVUUpICU+JQ0KICBjb2x1bW5fc3BlYygxLCBib2xkID0gVFJVRSwgd2lkdGggPSAiMTJlbSIpICU+JQ0KICBjb2x1bW5fc3BlYygyLCBiYWNrZ3JvdW5kID0gIiNGNEY2RjYiKSAlPiUNCiAgY29sdW1uX3NwZWMoMzo3LCBiYWNrZ3JvdW5kID0gIiNGQkZDRkMiKSAlPiUNCiAgcGFja19yb3dzKCIiLCAxLCBucm93KGVzdGFkaXN0aWNhcyksIA0KICAgICAgICAgICAgbGFiZWxfcm93X2NzcyA9ICJiYWNrZ3JvdW5kLWNvbG9yOiAjMkMzRTUwOyBjb2xvcjogd2hpdGU7IGZvbnQtd2VpZ2h0OiBib2xkOyIpICU+JQ0KICBmb290bm90ZSgNCiAgICBnZW5lcmFsID0gIkZ1ZW50ZXM6RWxhYm9yYWNpb24gcHJvcGlhIGVuIGJhc2UgZW4gbGEgRW5jdWVzdGEgZGUgTWljcm9uZWdvY2lvcyAtIDIwMjIiLA0KICAgIG51bWJlciA9IGMoIkRhdG9zIGNvcnJlc3BvbmRlbiBhbCBtZXMgYW50ZXJpb3IgaW5tZWRpYXRvIikNCiAgKQ0KDQpgYGANCg0KRW4gbGEgKFRhYmxhIDEpIHBvZGVtb3Mgb2JzZXJ2YXIgbG9zIHZhbG9yZXMgcHJvbWVkaW8sIG1lZGlhbmEsIGRlc3ZpYWNpw7NuIGVzdMOhbmRhciwgbcOtbmltbyB5IG3DoXhpbW8gZGUgbGFzIHZlbnRhcyBtZW5zdWFsZXMgZGUgbWljcm9uZWdvY2lvcyBlbiBjYWRhIGRlcGFydGFtZW50byBkZSBsYSByZWdpw7NuIENhcmliZS4gTG9zIGN1YWxlcyBub3MgcGVybWl0ZSBjb21wYXJhciBlbCBkZXNlbXBlw7FvIGNvbWVyY2lhbCBlbnRyZSBkZXBhcnRhbWVudG9zIHkgZGV0ZWN0YXIgbGEgdmFyaWFiaWxpZGFkIGludGVybmEuIFBvciBlamVtcGxvLCBBdGzDoW50aWNvIHkgQm9sw612YXIgcHJlc2VudGFuIGxvcyB2YWxvcmVzIG1lZGlvcyBtw6FzIGFsdG9zLCBsbyBxdWUgaW5kaWNhIG1heW9yIGRpbmFtaXNtbyBjb21lcmNpYWwsIG1pZW50cmFzIHF1ZSBTdWNyZSB5IExhIEd1YWppcmEgdGllbmVuIHZlbnRhcyBtw6FzIGJhamFzLCByZWZsZWphbmRvIHBvc2libGVzIGxpbWl0YWNpb25lcyBlc3RydWN0dXJhbGVzIG8gZGUgbWVyY2Fkby4NCg0KRnVuY2lvbmEgY29tbyBwcmVtaXNhIGRlbCBjYXBpdGFsIGRlIHRyYWJham8gdXRpbGl6YWRvIGVuIGxhIGdlbmVyYWNpw7NuIGRlIHZlbnRhcy4gTGEgdGVvcsOtYSBlY29uw7NtaWNhIGVzdGFibGVjZSB1bmEgcmVsYWNpw7NuIGRpcmVjdGEgZW50cmUgbGEgaW52ZXJzacOzbiBlbiBhY3RpdmlkYWRlcyBvcGVyYXRpdmFzIHkgbGEgY2FwYWNpZGFkIGRlIGdlbmVyYXIgaW5ncmVzb3MuIEVzdGEgdmFyaWFibGUgY2FwdHVyYSB0YW50byBsb3MgY29zdG9zIHZhcmlhYmxlcyBkaXJlY3RhbWVudGUgYXNvY2lhZG9zIGEgbGEgcHJvZHVjY2nDs24gY29tbyBsb3MgZ2FzdG9zIG9wZXJhdGl2b3MgbmVjZXNhcmlvcyBwYXJhIG1hbnRlbmVyIGxhIGFjdGl2aWRhZCBjb21lcmNpYWwuDQoNCiMjIyBHYXN0b3MgZGUgbG9zIE1pY3JvbmVnb2Npb3MgZW4gbGEgUmVnacOzbiBDYXJpYmUNCg0KYGBge3IgZXN0YWRpc3RpY2FzIGRlIGdhc3RvcyBkZWwgbWVzIGFudGVyaW9yLCBlY2hvPUZBTFNFLFdhcm5pbmc9RkFMU0V9DQplc3RhZGlzdGljYXMgPC0gQmFzZUZpbmFsICU+JQ0KICBncm91cF9ieShEZXBhcnRhbWVudG8pICU+JQ0KICBzdW1tYXJpc2UoDQogICAgbiA9IG4oKSwNCiAgICAiTWVkaWEgZ2FzdG9zIiA9IHJvdW5kKG1lYW4oYEdhc3RvcyBtZXMgYW50ZXJpb3JgKSwgMiksDQogICAgIkRlc3ZpYWNpb24gZGUgbG9zIGdhc3RvcyIgPSByb3VuZChzZChgR2FzdG9zIG1lcyBhbnRlcmlvcmApLCAyKSwNCiAgICAiTWVkaWFuYSBkZWwgbWVzIGFudGVyaW9yIiA9IHJvdW5kKG1lZGlhbihgR2FzdG9zIG1lcyBhbnRlcmlvcmApLCAyKSwNCiAgICBNaW4gPSByb3VuZChtaW4oYEdhc3RvcyBtZXMgYW50ZXJpb3JgKSwgMiksDQogICAgTWF4ID0gcm91bmQobWF4KGBHYXN0b3MgbWVzIGFudGVyaW9yYCksIDIpKQ0KDQprYWJsZShlc3RhZGlzdGljYXMsIA0KICAgICAgYWxpZ24gPSBjKCJsIiwgImMiLCAiciIsICJyIiwgInIiLCAiciIsICJyIiksDQogICAgICBmb3JtYXQuYXJncyA9IGxpc3QoYmlnLm1hcmsgPSAiLCIsIGRlY2ltYWwubWFyayA9ICIuIiksDQogICAgICBjb2wubmFtZXMgPSBjKCJEZXBhcnRhbWVudG8iLCAiTiIsICJNZWRpYSIsICJEZXN2LkVzdCIsICJNZWRpYW5hIiwgIk1pbmltbyIsICJNYXhpbW8iKSwNCiAgICAgIGNhcHRpb24gPSAiVEFCTEEgMi4gRVNUQURJU1RJQ0EgREVTQ1JJUFRJVkEgREUgTE9TIEdBU1RPUy4iKSAlPiUNCiAga2FibGVfc3R5bGluZygNCiAgICBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiKSwNCiAgICBmdWxsX3dpZHRoID0gRkFMU0UsDQogICAgZm9udF9zaXplID0gMTIsDQogICAgcG9zaXRpb24gPSAiY2VudGVyIiwNCiAgICBsYXRleF9vcHRpb25zID0gImhvbGRfcG9zaXRpb24iDQogICkgJT4lDQogIGFkZF9oZWFkZXJfYWJvdmUoYygiICIgPSAxLCAiTXVlc3RyYSIgPSAxLCAiRXN0YWRpc3RpY2FzIGRlIEdhc3RvcyAoJCkiID0gNSksDQogICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZCA9ICIjMkMzRTUwIiwgY29sb3IgPSAid2hpdGUiKSAlPiUNCiAgcm93X3NwZWMoMCwgYmFja2dyb3VuZCA9ICIjMzQ0OTVFIiwgY29sb3IgPSAid2hpdGUiLCBib2xkID0gVFJVRSkgJT4lDQogIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFLCB3aWR0aCA9ICIxMmVtIikgJT4lDQogIGNvbHVtbl9zcGVjKDIsIGJhY2tncm91bmQgPSAiI0Y0RjZGNiIpICU+JQ0KICBjb2x1bW5fc3BlYygzOjcsIGJhY2tncm91bmQgPSAiI0ZCRkNGQyIpICU+JQ0KICBmb290bm90ZSgNCiAgICBnZW5lcmFsID0gIkZ1ZW50ZXM6RWxhYm9yYWNpb24gcHJvcGlhIGVuIGJhc2UgZW4gbGEgRW5jdWVzdGEgZGUgTWljcm9uZWdvY2lvcyAtIDIwMjIiLA0KICAgIG51bWJlciA9IGMoIkRhdG9zIGNvcnJlc3BvbmRlbiBhbCBtZXMgYW50ZXJpb3IgaW5tZWRpYXRvIikNCiAgKQ0KYGBgDQoNCipMYSB0YWJsYSAyKiBwZXJtaXRlIGlkZW50aWZpY2FyIGTDs25kZSBsb3MgbWljcm9uZWdvY2lvcyBpbnZpZXJ0ZW4gbcOhcyBlbiBzdSBmdW5jaW9uYW1pZW50by4gU2Ugb2JzZXJ2YSBxdWUgTGEgR3VhamlyYSB0aWVuZSBsb3MgZ2FzdG9zIG3DoXMgYWx0b3MsIHBlcm8gZXN0byBubyBzZSB0cmFkdWNlIG5lY2VzYXJpYW1lbnRlIGVuIG1heW9yZXMgdmVudGFzLCBsbyBxdWUgc3VnaWVyZSBxdWUgZWwgZ2FzdG8gcG9yIHPDrSBzb2xvIG5vIGdhcmFudGl6YSBtZWpvcmVzIHJlc3VsdGFkb3MgY29tZXJjaWFsZXMgeSBxdWUgb3Ryb3MgZmFjdG9yZXMgcHVlZGVuIGVzdGFyIGluZmx1eWVuZG8uDQoNCmBgYHtyIGdyYWZpY28gZGlzcGVyc2lvbiBnYXN0b3MsIGVjaG89RkFMU0UsV2FybmluZz1GQUxTRX0NCg0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShzY2FsZXMpDQoNCmdncGxvdChCYXNlRmluYWwsIGFlcyh4ID0gYEdhc3RvcyBtZXMgYW50ZXJpb3JgLCB5ID0gYFZlbnRhcyBtZXMgYW50ZXJpb3JgKSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC43LCBjb2xvciA9ICIjMkU4NkFCIiwgc2l6ZSA9IDIuNSkgKw0KICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzZSA9IFRSVUUsIGNvbG9yID0gIiNBMjNCNzIiLCBmaWxsID0gIiNGMThGMDEiLCANCiAgICAgICAgICAgICAgYWxwaGEgPSAwLjIsIHNpemUgPSAxLjIpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IGRvbGxhcl9mb3JtYXQocHJlZml4ID0gIiQiLCBiaWcubWFyayA9ICIsIikpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGRvbGxhcl9mb3JtYXQocHJlZml4ID0gIiQiLCBiaWcubWFyayA9ICIsIikpICsNCiAgbGFicyh0aXRsZSA9ICJGaWd1cmEgMi4gUkVMQUNJT04gRU5UUkUgR0FTVE9TIE1FTlNVQUxFUyBZIFZFTlRBUyIsDQogICAgICAgc3VidGl0bGUgPSAiQW5hbGlzaXMgZGUgY29ycmVsYWNpb24geSB0ZW5kZW5jaWEgbGluZWFsIiwNCiAgICAgICB4ID0gIkdhc3RvcyBNZW5zdWFsZXMgKENPUCkiLCANCiAgICAgICB5ID0gIlZlbnRhcyBNZXMgQW50ZXJpb3IgKENPUCkiLA0KICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBFbGFib3JhY2lvbiBwcm9waWEgZW4gYmFzZSBlbiBsYSBFbmN1ZXN0YSBkZSBNaWNyb25lZ29jaW9zIC0gMjAyMiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBjb2xvciA9ICIjMkMzRTUwIiksDQogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiIzdGOEM4RCIpKQ0KDQpgYGANCg0KRW4gbGEgKmZpZ3VyYSAyKiBkZSBkaXNwZXJzacOzbiBtdWVzdHJhIGxhIHJlbGFjacOzbiBlbnRyZSBsb3MgZ2FzdG9zIG9wZXJhdGl2b3MgeSBsYXMgdmVudGFzIG1lbnN1YWxlcy4gTGEgdGVuZGVuY2lhIHBvc2l0aXZhIGluZGljYSBxdWUsIGVuIGdlbmVyYWwsIGEgbWF5b3IgZ2FzdG8gb3BlcmF0aXZvLCBtYXlvcmVzIHZlbnRhcywgbG8gcXVlIHZhbGlkYSBsYSBoaXDDs3Rlc2lzIGRlIHF1ZSBpbnZlcnRpciBlbiBlbCBmdW5jaW9uYW1pZW50byBkZWwgbmVnb2NpbyBwdWVkZSBpbXB1bHNhciBlbCBkZXNlbXBlw7FvIGNvbWVyY2lhbC4NCg0KIyMjIEFycmVuZGFtaWVudG8gZGUgbG9zIE1pY3JvbmVnb2Npb3MgZW4gbGEgUmVnacOzbiBDYXJpYmUNCg0KYGBge3IgZXN0YWRpc3RpY2FzIGRlIGFycmVuZGFtaWVudG8gZGUgYmllbmVzIGlubXVlYmxlcyB5IG11ZWJsZXMsIGVjaG89RkFMU0UsV2FybmluZz1GQUxTRX0NCmVzdGFkaXN0aWNhcyA8LSBCYXNlRmluYWwgJT4lDQogIGdyb3VwX2J5KERlcGFydGFtZW50bykgJT4lDQogIHN1bW1hcmlzZSgNCiAgICBuID0gbigpLA0KICAgICJNZWRpYSBhcnJlbmRhbWllbnRvIiA9IHJvdW5kKG1lYW4oYEFycmVuZGFtaWVudG9gKSwgMiksDQogICAgIkRlc3ZpYWNpb24gZGVsIGFycmVuZGFtaWVudG8iID0gcm91bmQoc2QoYEFycmVuZGFtaWVudG9gKSwgMiksDQogICAgIk1lZGlhbmEgZGVsIG1lcyBhbnRlcmlvciIgPSByb3VuZChtZWRpYW4oYEFycmVuZGFtaWVudG9gKSwgMiksDQogICAgTWluID0gcm91bmQobWluKGBBcnJlbmRhbWllbnRvYCksIDIpLA0KICAgIE1heCA9IHJvdW5kKG1heChgQXJyZW5kYW1pZW50b2ApLCAyKSkNCg0Ka2FibGUoZXN0YWRpc3RpY2FzLCANCiAgICAgIGFsaWduID0gYygibCIsICJjIiwgInIiLCAiciIsICJyIiwgInIiLCAiciIpLA0KICAgICAgZm9ybWF0LmFyZ3MgPSBsaXN0KGJpZy5tYXJrID0gIiwiLCBkZWNpbWFsLm1hcmsgPSAiLiIpLA0KICAgICAgY29sLm5hbWVzID0gYygiRGVwYXJ0YW1lbnRvIiwgIk4iLCAiTWVkaWEiLCAiRGVzdi5Fc3QiLCAiTWVkaWFuYSIsICJNaW5pbW8iLCAiTWF4aW1vIiksDQogICAgICBjYXB0aW9uID0gIlRBQkxBIDMuIEVTVEFESVNUSUNBIERFU0NSSVBUSVZBIERFTCBBUlJFTkRBTUlFTlRPLiIpICU+JQ0KICBrYWJsZV9zdHlsaW5nKA0KICAgIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIpLA0KICAgIGZ1bGxfd2lkdGggPSBGQUxTRSwNCiAgICBmb250X3NpemUgPSAxMiwNCiAgICBwb3NpdGlvbiA9ICJjZW50ZXIiLA0KICAgIGxhdGV4X29wdGlvbnMgPSAiaG9sZF9wb3NpdGlvbiINCiAgKSAlPiUNCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIiA9IDEsICJNdWVzdHJhIiA9IDEsICJFc3RhZGlzdGljYXMgZGUgQXJyZW5kYW1pZW50b3MgKCQpIiA9IDUpLA0KICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQgPSAiIzJDM0U1MCIsIGNvbG9yID0gIndoaXRlIikgJT4lDQogIHJvd19zcGVjKDAsIGJhY2tncm91bmQgPSAiIzM0NDk1RSIsIGNvbG9yID0gIndoaXRlIiwgYm9sZCA9IFRSVUUpICU+JQ0KICBjb2x1bW5fc3BlYygxLCBib2xkID0gVFJVRSwgd2lkdGggPSAiMTJlbSIpICU+JQ0KICBjb2x1bW5fc3BlYygyLCBiYWNrZ3JvdW5kID0gIiNGNEY2RjYiKSAlPiUNCiAgY29sdW1uX3NwZWMoMzo3LCBiYWNrZ3JvdW5kID0gIiNGQkZDRkMiKSAlPiUNCiAgZm9vdG5vdGUoDQogICAgZ2VuZXJhbCA9ICJGdWVudGVzOkVsYWJvcmFjaW9uIHByb3BpYSBlbiBiYXNlIGVuIGxhIEVuY3Vlc3RhIGRlIE1pY3JvbmVnb2Npb3MgLSAyMDIyIiwNCiAgICBudW1iZXIgPSBjKCJEYXRvcyBjb3JyZXNwb25kZW4gYWwgbWVzIGFudGVyaW9yIGlubWVkaWF0byIpDQogICkNCmBgYA0KDQpFbiBlc3RhIHRhYmxhICooVmVyKiAqZmlndXJhIDMpKiBzZSByZWZsZWphIHF1ZSBlbCBkZXBhcnRhbWVudG8gZGUgU3VjcmUgZXMgZWwgcXVlIHRpZW5lIGVsIG1lbm9yIHZhbG9yIHJlcHJlc2VudGF0aXZvIGRlIHRvZG9zIGxvcyBkZXBhcnRhbWVudG9zLCBlc3RvIHNlIHB1ZWRlIGludGVycHJldGFyIGNvbW8gdW4gaW5kaWNhZG9yIGRlIGxhIGNhbGlkYWQgc29jaW9lY29uw7NtaWNhIGRlbCB0ZXJyaXRvcmlvwqAgZW4gbG9zIGFycmVuZGFtaWVudG9zIHF1ZSBiZW5lZmljaWFuIGEgbG9zIG1pY3JvbmVnb2Npb3MsIGVzIGRlY2lyIHF1ZSBlbiBlbCBkZXBhcnRhbWVudG8sIGVsIGdhc3RvIG9wZXJhdGl2byBkZSBsb3MgYXJyZW5kYW1pZW50b3MgZXMgbcOhcyByZW50YWJsZSBxdWUgZW4gZWwgcmVzdG8gZGUgZGVwYXJ0YW1lbnRvcy4NCg0KYGBge3IgZ3JhZmljbyBkaXNwZXJzaW9uIGFycmVuZGFtaWVudG8sIGVjaG89RkFMU0UsV2FybmluZz1GQUxTRX0NCmdncGxvdChCYXNlRmluYWwsIGFlcyh4ID0gQXJyZW5kYW1pZW50bywgeSA9IGBWZW50YXMgbWVzIGFudGVyaW9yYCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNywgY29sb3IgPSAiI0YzOUMxMiIsIHNpemUgPSAyLjUpICsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2UgPSBUUlVFLCBjb2xvciA9ICIjMkMzRTUwIiwgZmlsbCA9ICIjOTVBNUE2IiwgDQogICAgICAgICAgICAgIGFscGhhID0gMC4yLCBzaXplID0gMS4yKSArDQogIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBkb2xsYXJfZm9ybWF0KHByZWZpeCA9ICIkIiwgYmlnLm1hcmsgPSAiLCIpKSArDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBkb2xsYXJfZm9ybWF0KHByZWZpeCA9ICIkIiwgYmlnLm1hcmsgPSAiLCIpKSArDQogIGxhYnModGl0bGUgPSAiRmlndXJhIDMuIFJFTEFDSU9OIEVOVFJFIEFSUkVOREFNSUVOVE8gWSBWRU5UQVMiLA0KICAgICAgIHN1YnRpdGxlID0gIkltcGFjdG8gZGUgbG9zIGNvc3RvcyBkZSBhcnJlbmRhbWllbnRvIGVuIGxhcyB2ZW50YXMiLA0KICAgICAgIHggPSAiQXJyZW5kYW1pZW50byAoQ09QKSIsIA0KICAgICAgIHkgPSAiVmVudGFzIE1lcyBBbnRlcmlvciAoQ09QKSIsDQogICAgICAgY2FwdGlvbiA9ICJGdWVudGU6IEVsYWJvcmFjaW9uIHByb3BpYSBlbiBiYXNlIGVuIGxhIEVuY3Vlc3RhIGRlIE1pY3JvbmVnb2Npb3MgLSAyMDIyIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIGNvbG9yID0gIiMyQzNFNTAiKSwNCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICIjN0Y4QzhEIikpDQoNCmBgYA0KDQpFc3RlIGdyw6FmaWNvIGRlIGxhICpmaWd1cmEgMyogZGUgZGlzcGVyc2nDs24gaWx1c3RyYSBjw7NtbyBsb3MgZ2FzdG9zIGRlIGFycmVuZGFtaWVudG8gc2UgcmVsYWNpb25hbiBjb24gbGFzIHZlbnRhcy4gU2Ugb2JzZXJ2YSB1bmEgdGVuZGVuY2lhIHBvc2l0aXZhLCBsbyBxdWUgc3VnaWVyZSBxdWUgbG9zIG1pY3JvbmVnb2Npb3MgcXVlIGludmllcnRlbiBtw6FzIGVuIGluZnJhZXN0cnVjdHVyYSB0aWVuZGVuIGEgdGVuZXIgbWVqb3JlcyByZXN1bHRhZG9zIGNvbWVyY2lhbGVzLCBwb3NpYmxlbWVudGUgcG9yIHViaWNhY2lvbmVzIG3DoXMgZXN0cmF0w6lnaWNhcyBvIGluc3RhbGFjaW9uZXMgZGUgbWF5b3IgY2FsaWRhZC4NCg0KIyMjIFZhbG9yIEFncmVnYWRvIGRlIGxvcyBNaWNyb25lZ29jaW9zIGVuIGxhIFJlZ2nDs24gQ2FyaWJlDQoNCmBgYHtyIGVzdGFkaXN0aWNhcyBkZSB2YWxvciBhZ3JlZ2FkbywgZWNobz1GQUxTRSxXYXJuaW5nPUZBTFNFfQ0KZXN0YWRpc3RpY2FzIDwtIEJhc2VGaW5hbCAlPiUNCiAgZ3JvdXBfYnkoRGVwYXJ0YW1lbnRvKSAlPiUNCiAgc3VtbWFyaXNlKA0KICAgIG4gPSBuKCksDQogICAgIk1lZGlhIGRlbCB2YWxvciBhZ3JlZ2FkbyIgPSByb3VuZChtZWFuKGBWYWxvciBhZ3JlZ2Fkb2ApLCAyKSwNCiAgICAiRGVzdmlhY2lvbiBkZWwgdmFsb3IgYWdyZWdhZG8iID0gcm91bmQoc2QoYFZhbG9yIGFncmVnYWRvYCksIDIpLA0KICAgICJNZWRpYW5hIGRlbCBtZXMgYW50ZXJpb3IiID0gcm91bmQobWVkaWFuKGBWYWxvciBhZ3JlZ2Fkb2ApLCAyKSwNCiAgICBNaW4gPSByb3VuZChtaW4oYFZhbG9yIGFncmVnYWRvYCksIDIpLA0KICAgIE1heCA9IHJvdW5kKG1heChgVmFsb3IgYWdyZWdhZG9gKSwgMikpDQoNCmthYmxlKGVzdGFkaXN0aWNhcywgDQogICAgICBhbGlnbiA9IGMoImwiLCAiYyIsICJyIiwgInIiLCAiciIsICJyIiwgInIiKSwNCiAgICAgIGZvcm1hdC5hcmdzID0gbGlzdChiaWcubWFyayA9ICIsIiwgZGVjaW1hbC5tYXJrID0gIi4iKSwNCiAgICAgIGNvbC5uYW1lcyA9IGMoIkRlcGFydGFtZW50byIsICJOIiwgIk1lZGlhIiwgIkRlc3YuRXN0IiwgIk1lZGlhbmEiLCAiTWluaW1vIiwgIk1heGltbyIpLA0KICAgICAgY2FwdGlvbiA9ICJUQUJMQSA0LiBFU1RBRElTVElDQSBERVNDUklQVElWQSBERUwgVkFMT1IgQUdSRUdBRE8uIikgJT4lDQogIGthYmxlX3N0eWxpbmcoDQogICAgYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiksDQogICAgZnVsbF93aWR0aCA9IEZBTFNFLA0KICAgIGZvbnRfc2l6ZSA9IDEyLA0KICAgIHBvc2l0aW9uID0gImNlbnRlciIsDQogICAgbGF0ZXhfb3B0aW9ucyA9ICJob2xkX3Bvc2l0aW9uIg0KICApICU+JQ0KICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiID0gMSwgIk11ZXN0cmEiID0gMSwgIkVzdGFkaXN0aWNhcyBkZSBWYWxvciBhZ3JlZ2FkbyAoJCkiID0gNSksDQogICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZCA9ICIjMkMzRTUwIiwgY29sb3IgPSAid2hpdGUiKSAlPiUNCiAgcm93X3NwZWMoMCwgYmFja2dyb3VuZCA9ICIjMzQ0OTVFIiwgY29sb3IgPSAid2hpdGUiLCBib2xkID0gVFJVRSkgJT4lDQogIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFLCB3aWR0aCA9ICIxMmVtIikgJT4lDQogIGNvbHVtbl9zcGVjKDIsIGJhY2tncm91bmQgPSAiI0Y0RjZGNiIpICU+JQ0KICBjb2x1bW5fc3BlYygzOjcsIGJhY2tncm91bmQgPSAiI0ZCRkNGQyIpICU+JQ0KICBmb290bm90ZSgNCiAgICBnZW5lcmFsID0gIkZ1ZW50ZXM6RWxhYm9yYWNpb24gcHJvcGlhIGVuIGJhc2UgZW4gbGEgRW5jdWVzdGEgZGUgTWljcm9uZWdvY2lvcyAtIDIwMjIiLA0KICAgIG51bWJlciA9IGMoIkRhdG9zIGNvcnJlc3BvbmRlbiBhbCBtZXMgYW50ZXJpb3IgaW5tZWRpYXRvIikNCiAgKQ0KYGBgDQoNClNpZ3VpZW5kbyBjb24gbGEgKnRhYmxhIDQqIGFob25kYW1vcyBlbiBsYSB2YXJpYWJsZSBkZSB2YWxvciBhZ3JlZ2Fkbywgc2UgcmV2ZWxhIHF1ZSBlbCBkZXBhcnRhbWVudG8gZGUgQm9sw612YXIgbGxldmEgbGEgZGVsYW50ZXJhIGNvbiB1biB2YWxvciByZXByZXNlbnRhdGl2byAobWVkaWFuYT04NzAsMDAwKSBjb24gdW4gdmFsb3IgbcOtbmltbyBkZSAxMDAwMCB5IHVuIG3DoXhpbW8gZGUgMjIsODUwLDAwMC4gU29ycHJlbmRlbnRlbWVudGUgTGEgR3VhamlyYSBlc3TDoSBtdXkgYWxlamFkbyBkZSBlc2UgdmFsb3IgY29uIHVuYSBkaWZlcmVuY2lhIGRlIDE3MCwwMDAgYSBwZXNhciBxdWUgbG9zIG3DrW5pbW9zIHkgbcOheGltb3Mgc3VwZXJhbiBwb3IgbXVjaG8gYSBsb3MgdmFsb3JlcyBleHRyZW1vcyBkZSBCb2zDrXZhci4NCg0KYGBge3IgZ3JhZmljbyBkaXNwZXJzaW9uIHZhbG9yIGFncmVnYWRvLCBlY2hvPUZBTFNFLFdhcm5pbmc9RkFMU0V9DQoNCmdncGxvdChCYXNlRmluYWwsIGFlcyh4ID0gYFZhbG9yIGFncmVnYWRvYCwgeSA9IGBWZW50YXMgbWVzIGFudGVyaW9yYCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNywgY29sb3IgPSAiI0U3NEMzQyIsIHNpemUgPSAyLjUpICsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2UgPSBUUlVFLCBjb2xvciA9ICIjMjk4MEI5IiwgZmlsbCA9ICIjMTZBMDg1IiwgDQogICAgICAgICAgICAgIGFscGhhID0gMC4yLCBzaXplID0gMS4yKSArDQogIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBkb2xsYXJfZm9ybWF0KHByZWZpeCA9ICIkIiwgYmlnLm1hcmsgPSAiLCIpKSArDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBkb2xsYXJfZm9ybWF0KHByZWZpeCA9ICIkIiwgYmlnLm1hcmsgPSAiLCIpKSArDQogIGxhYnModGl0bGUgPSAiRmlndXJhIDQuIFJFTEFDSU9OIEVOVFJFIFZBTE9SIEFHUkVHQURPIFkgVkVOVEFTIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJDb3JyZWxhY2lvbiBlbnRyZSBjcmVhY2lvbiBkZSB2YWxvciB5IGRlc2VtcGVubyBjb21lcmNpYWwiLA0KICAgICAgIHggPSAiVmFsb3IgQWdyZWdhZG8gKENPUCkiLCANCiAgICAgICB5ID0gIlZlbnRhcyBNZXMgQW50ZXJpb3IgKENPUCkiLA0KICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBFbGFib3JhY2lvbiBwcm9waWEgZW4gYmFzZSBlbiBsYSBFbmN1ZXN0YSBkZSBNaWNyb25lZ29jaW9zIC0gMjAyMiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBjb2xvciA9ICIjMkMzRTUwIiksDQogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiIzdGOEM4RCIpKQ0KDQpgYGANCg0KRXN0ZSBncsOhZmljbyBkZSBkaXNwZXJzacOzbiBldmlkZW5jaWEgcXVlIGV4aXN0ZSB1bmEgcmVsYWNpw7NuIHBvc2l0aXZhIGVudHJlIGVsIHZhbG9yIGFncmVnYWRvIHkgbGFzIHZlbnRhcy4gTG9zIG1pY3JvbmVnb2Npb3MgcXVlIGxvZ3JhbiBnZW5lcmFyIG3DoXMgdmFsb3IgYSBwYXJ0aXIgZGUgc3VzIGluc3Vtb3MgdGllbmRlbiBhIG9idGVuZXIgbWF5b3JlcyBpbmdyZXNvcywgbG8gcXVlIHJlc2FsdGEgbGEgaW1wb3J0YW5jaWEgZGUgbGEgZWZpY2llbmNpYSBwcm9kdWN0aXZhIHkgbGEgaW5ub3ZhY2nDs24uDQoNCiMjIyBJbnZlcnNpw7NuIGRlIEFjdGl2b3MgZGUgbG9zIE1pY3JvbmVnb2Npb3MgZW4gbGEgUmVnacOzbiBDYXJpYmUNCg0KYGBge3IgZXN0YWRpc3RpY2FzIGRlIGludmVyc2lvbiBkZSBhY3Rpdm9zLCBlY2hvPUZBTFNFLFdhcm5pbmc9RkFMU0V9DQoNCmVzdGFkaXN0aWNhcyA8LSBCYXNlRmluYWwgJT4lDQogIGdyb3VwX2J5KERlcGFydGFtZW50bykgJT4lDQogIHN1bW1hcmlzZSgNCiAgICBuID0gbigpLA0KICAgICJNZWRpYSBkZSBsYSBpbnZlcnNpb24gZGUgYWN0aXZvcyIgPSByb3VuZChtZWFuKGBJbnZlcnNpb24gZGUgYWN0aXZvc2ApLCAyKSwNCiAgICAiRGVzdmlhY2lvbiBkZSBsb3MgYWN0aXZvcyIgPSByb3VuZChzZChgSW52ZXJzaW9uIGRlIGFjdGl2b3NgKSwgMiksDQogICAgIk1lZGlhbmEgZGVsIG1lcyBhbnRlcmlvciIgPSByb3VuZChtZWRpYW4oYEludmVyc2lvbiBkZSBhY3Rpdm9zYCksIDIpLA0KICAgIE1pbiA9IHJvdW5kKG1pbihgSW52ZXJzaW9uIGRlIGFjdGl2b3NgKSwgMiksDQogICAgTWF4ID0gcm91bmQobWF4KGBJbnZlcnNpb24gZGUgYWN0aXZvc2ApLCAyKSkNCg0Ka2FibGUoZXN0YWRpc3RpY2FzLCANCiAgICAgIGFsaWduID0gYygibCIsICJjIiwgInIiLCAiciIsICJyIiwgInIiLCAiciIpLA0KICAgICAgZm9ybWF0LmFyZ3MgPSBsaXN0KGJpZy5tYXJrID0gIiwiLCBkZWNpbWFsLm1hcmsgPSAiLiIpLA0KICAgICAgY29sLm5hbWVzID0gYygiRGVwYXJ0YW1lbnRvIiwgIk4iLCAiTWVkaWEiLCAiRGVzdi5Fc3QiLCAiTWVkaWFuYSIsICJNaW5pbW8iLCAiTWF4aW1vIiksDQogICAgICBjYXB0aW9uID0gIlRBQkxBIDUuIEVTVEFESVNUSUNBIERFU0NSSVBUSVZBIERFIExBIElOVkVSU0lPTiBERSBBQ1RJVk9TLiIpICU+JQ0KICBrYWJsZV9zdHlsaW5nKA0KICAgIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIpLA0KICAgIGZ1bGxfd2lkdGggPSBGQUxTRSwNCiAgICBmb250X3NpemUgPSAxMiwNCiAgICBwb3NpdGlvbiA9ICJjZW50ZXIiLA0KICAgIGxhdGV4X29wdGlvbnMgPSAiaG9sZF9wb3NpdGlvbiINCiAgKSAlPiUNCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIiA9IDEsICJNdWVzdHJhIiA9IDEsICJFc3RhZGlzdGljYXMgZGUgSW52ZXJzaW9uIGRlIGFjdGl2b3MgKCQpIiA9IDUpLA0KICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQgPSAiIzJDM0U1MCIsIGNvbG9yID0gIndoaXRlIikgJT4lDQogIHJvd19zcGVjKDAsIGJhY2tncm91bmQgPSAiIzM0NDk1RSIsIGNvbG9yID0gIndoaXRlIiwgYm9sZCA9IFRSVUUpICU+JQ0KICBjb2x1bW5fc3BlYygxLCBib2xkID0gVFJVRSwgd2lkdGggPSAiMTJlbSIpICU+JQ0KICBjb2x1bW5fc3BlYygyLCBiYWNrZ3JvdW5kID0gIiNGNEY2RjYiKSAlPiUNCiAgY29sdW1uX3NwZWMoMzo3LCBiYWNrZ3JvdW5kID0gIiNGQkZDRkMiKSAlPiUNCiAgZm9vdG5vdGUoDQogICAgZ2VuZXJhbCA9ICJGdWVudGVzOkVsYWJvcmFjaW9uIHByb3BpYSBlbiBiYXNlIGVuIGxhIEVuY3Vlc3RhIGRlIE1pY3JvbmVnb2Npb3MgLSAyMDIyIiwNCiAgICBudW1iZXIgPSBjKCJEYXRvcyBjb3JyZXNwb25kZW4gYWwgbWVzIGFudGVyaW9yIGlubWVkaWF0byIpDQogICkNCmBgYA0KDQpMYSAqdGFibGEgNSogcmVzdW1lIGxhIGludmVyc2nDs24gZW4gYWN0aXZvcyBwcm9kdWN0aXZvcyAobWFxdWluYXJpYSwgZXF1aXBvcywgZXRjLikgcG9yIGRlcGFydGFtZW50by4gUGVybWl0ZSBpZGVudGlmaWNhciBkw7NuZGUgbG9zIG1pY3JvbmVnb2Npb3MgZXN0w6FuIGFwb3N0YW5kbyBtw6FzIHBvciBsYSBtb2Rlcm5pemFjacOzbiB5IGVsIGNyZWNpbWllbnRvLiBMb3MgdmFsb3JlcyBhbHRvcyBwdWVkZW4gaW5kaWNhciBlc3RyYXRlZ2lhcyBkZSBleHBhbnNpw7NuIG8gcmVub3ZhY2nDs24gdGVjbm9sw7NnaWNhLg0KDQpgYGB7ciBncmFmaWNvIGRpc3BlcnNpb24gaW52ZXJzaW9uLCBlY2hvPUZBTFNFLFdhcm5pbmc9RkFMU0V9DQpnZ3Bsb3QoQmFzZUZpbmFsLCBhZXMoeCA9IGBJbnZlcnNpb24gZGUgYWN0aXZvc2AsIHkgPSBgVmVudGFzIG1lcyBhbnRlcmlvcmApKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcsIGNvbG9yID0gIiMyN0FFNjAiLCBzaXplID0gMi41KSArDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gVFJVRSwgY29sb3IgPSAiIzhFNDRBRCIsIGZpbGwgPSAiI0YzOUMxMiIsIA0KICAgICAgICAgICAgICBhbHBoYSA9IDAuMiwgc2l6ZSA9IDEuMikgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWxzID0gZG9sbGFyX2Zvcm1hdChwcmVmaXggPSAiJCIsIGJpZy5tYXJrID0gIiwiKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gZG9sbGFyX2Zvcm1hdChwcmVmaXggPSAiJCIsIGJpZy5tYXJrID0gIiwiKSkgKw0KICBsYWJzKHRpdGxlID0gIkZpZ3VyYSA1LlJFTEFDSU9OIEVOVFJFIElOVkVSU0lPTiBFTiBBQ1RJVk9TIFkgVkVOVEFTIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJJbXBhY3RvIGRlIGxhIGludmVyc2lvbiBlbiBhY3Rpdm9zIHNvYnJlIGxhcyB2ZW50YXMiLA0KICAgICAgIHggPSAiSW52ZXJzaW9uIGVuIEFjdGl2b3MgKENPUCkiLCANCiAgICAgICB5ID0gIlZlbnRhcyBNZXMgQW50ZXJpb3IgKENPUCkiLA0KICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBFbGFib3JhY2lvbiBwcm9waWEgZW4gYmFzZSBlbiBsYSBFbmN1ZXN0YSBkZSBNaWNyb25lZ29jaW9zIC0gMjAyMiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBjb2xvciA9ICIjMkMzRTUwIiksDQogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiIzdGOEM4RCIpKQ0KDQpgYGANCg0KRWwgZ3LDoWZpY28gKmZpZ3VyYSA1KiBtdWVzdHJhIHF1ZSBzw60gZXhpc3RlIHVuYSByZWxhY2nDs24gcG9zaXRpdmEgZW50cmUgbGEgaW52ZXJzacOzbiBlbiBhY3Rpdm9zIHkgbGFzIHZlbnRhcywgYXVucXVlIG1lbm9zIGZ1ZXJ0ZSBxdWUgY29uIGxvcyBnYXN0b3Mgb3BlcmF0aXZvcy4gRXN0byBzdWdpZXJlIHF1ZSBpbnZlcnRpciBlbiBpbmZyYWVzdHJ1Y3R1cmEgeSB0ZWNub2xvZ8OtYSBwb2Ryw61hIG1lam9yYXIgZWwgZGVzZW1wZcOxbyBjb21lcmNpYWwuDQoNCiMjIyBEZXBhcnRhbWVudG8gZGUgbG9zIE1pY3JvbmVnb2Npb3MgZW4gbGEgUmVnacOzbiBDYXJpYmUNCg0KYGBge3IgZXN0YWRpc3RpY2FzIGRlIGxvcyBkZXBhcnRhbWVudG9zLCBlY2hvPUZBTFNFLFdhcm5pbmc9RkFMU0V9DQphbmFsaXNpc19kZXBhcnRhbWVudG9zIDwtIEJhc2VGaW5hbCAlPiUNCiAgY291bnQoRGVwYXJ0YW1lbnRvLCBuYW1lID0gIkZyZWN1ZW5jaWEiKSAlPiUNCiAgbXV0YXRlKA0KICAgIFBvcmNlbnRhamUgPSByb3VuZChGcmVjdWVuY2lhIC8gc3VtKEZyZWN1ZW5jaWEpICogMTAwLCAyKQ0KICApICU+JQ0KICBhcnJhbmdlKGRlc2MoRnJlY3VlbmNpYSkpICU+JSAgIyBvcmRlbmFyIGFudGVzIGRlIGNhbGN1bGFyIGFjdW11bGFkbw0KICBtdXRhdGUoDQogICAgYFBvcmNlbnRhamUgQWN1bXVsYWRvICglKWAgPSBjdW1zdW0oUG9yY2VudGFqZSksDQogICAgUmFua2luZyA9IHJvd19udW1iZXIoKQ0KICApDQprYWJsZShhbmFsaXNpc19kZXBhcnRhbWVudG9zLCANCiAgICAgIGFsaWduID0gYygibCIsICJjIiwgInIiLCAiciIsICJjIiksDQogICAgICBjb2wubmFtZXMgPSBjKCJEZXBhcnRhbWVudG8iLCAiRnJlY3VlbmNpYSIsICJQb3JjZW50YWplICglKSIsICJQb3JjZW50YWplIEFjdW11bGFkbyAoJSkiLCAiUmFua2luZyIpLA0KICAgICAgY2FwdGlvbiA9ICJUQUJMQSA2LiBFU1RBRElTVElDQSBERVNDUklQVElWQSBERSBMT1MgREVQQVJUQU1FTlRPUy4iKSAlPiUNCiAga2FibGVfc3R5bGluZygNCiAgICBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiksDQogICAgZnVsbF93aWR0aCA9IFRSVUUsDQogICAgZm9udF9zaXplID0gMTIsDQogICAgaHRtbF9mb250ID0gIkFyaWFsIg0KICApICU+JQ0KICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiID0gMSwgDQogICAgICAgICAgICAgICAgICAgICAiRGlzdHJpYnVjacOzbiBkZSBGcmVjdWVuY2lhcyIgPSAzLA0KICAgICAgICAgICAgICAgICAgICAgIlBvc2ljacOzbiIgPSAxKSwNCiAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kID0gYygiIzJDM0U1MCIsICIjMTZBMDg1IiwgIiMyOTgwQjkiKSkgJT4lDQogIHJvd19zcGVjKDAsIGJhY2tncm91bmQgPSAiIzJDM0U1MCIsIGNvbG9yID0gIndoaXRlIiwgYm9sZCA9IFRSVUUpICU+JQ0KICByb3dfc3BlYygxLCBiYWNrZ3JvdW5kID0gIiNFOEY2RjMiLCBib2xkID0gVFJVRSkgJT4lDQogIHJvd19zcGVjKDI6MywgYmFja2dyb3VuZCA9ICIjRUJGNUZCIikgJT4lDQogIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFLCB3aWR0aCA9ICIxNWVtIikgJT4lDQogIGNvbHVtbl9zcGVjKDIsIHdpZHRoID0gIjZlbSIsIGJhY2tncm91bmQgPSAiI0Y0RjZGNiIpICU+JQ0KICBjb2x1bW5fc3BlYygzOjQsIHdpZHRoID0gIjhlbSIpICU+JQ0KICBjb2x1bW5fc3BlYyg1LCB3aWR0aCA9ICI1ZW0iLCBiYWNrZ3JvdW5kID0gIiNGRUY5RTciKSAlPiUNCiAgZm9vdG5vdGUoDQogICAgZ2VuZXJhbCA9ICJGdWVudGVzOkVsYWJvcmFjaW9uIHByb3BpYSBlbiBiYXNlIGVuIGxhIEVuY3Vlc3RhIGRlIE1pY3JvbmVnb2Npb3MgLSAyMDIyIiwNCiAgICBudW1iZXIgPSBjKCJEYXRvcyBjb3JyZXNwb25kZW4gYWwgbWVzIGFudGVyaW9yIGlubWVkaWF0byIpDQogICkNCg0KYGBgDQoNCkVzIGluY2x1aWRhIGNvbW8gdmFyaWFibGUgZGUgY29tcGFyYWNpw7NuIHBhcmEgY2FwdHVyYXIgZGlmZXJlbnRlcyBwZXJzcGVjdGl2YXMgY29uIGZhY3RvcmVzIHRlcnJpdG9yaWFsZXMsIGRlbW9ncmFmaWNhcyB5IGRlIGFjY2VzbyBhIG1lcmNhZG9zLiBMYXMgZGlmZXJlbmNpYXMgZW50cmUgZGVwYXJ0YW1lbnRvcyBwdWVkZW4gcmVmbGVqYXIgdmFyaWFjaW9uZXMgZW4gaW5mcmFlc3RydWN0dXJhLCBjYXJhY3RlcsOtc3RpY2FzIGRlIGxvcyBtZXJjYWRvcyB5IGRpbsOhbWljYXMgZWNvbsOzbWljYXMgcmVnaW9uYWxlcy4NCg0KRWwgYW7DoWxpc2lzIGRlc2NyaXB0aXZvIGRlIGxvcyBkYXRvcyByZXZlbGEgY2FyYWN0ZXLDrXN0aWNhcyBpbXBvcnRhbnRlcyBkZSBsb3MgbWljcm9uZWdvY2lvcyBlbiBsYSByZWdpw7NuIENhcmliZSBDb2xvbWJpYW5hLiBMYSBtdWVzdHJhIGZpbmFsLCBkZXNwdcOpcyBkZSBhcGxpY2FyIGZpbHRyb3MgcGFyYSBlbGltaW5hciBvYnNlcnZhY2lvbmVzIGNvbiB2YWxvcmVzIGZhbHRhbnRlcyBvIGluY29uc2lzdGVudGVzLCBjb21wcmVuZGUgMi4wMjAgbWljcm9uZWdvY2lvcyBkaXN0cmlidWlkb3MgZW50cmUgbG9zIHNpZXRlIGRlcGFydGFtZW50b3MgZGUgbGEgcmVnacOzbi4NCg0KYGBge3IgYm94cGxvdCBkZXBhcnRhbWVudG92c3ZlbnRhcywgZWNobz1GQUxTRSxXYXJuaW5nPUZBTFNFfQ0KZ2dwbG90KEJhc2VGaW5hbCwgYWVzKHggPSBEZXBhcnRhbWVudG8sIHkgPSBgVmVudGFzIG1lcyBhbnRlcmlvcmApKSArDQogIGdlb21fYm94cGxvdChmaWxsID0gIiMzNDk4REIiLCBhbHBoYSA9IDAuNywgb3V0bGllci5jb2xvciA9ICIjRTc0QzNDIikgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gZG9sbGFyX2Zvcm1hdChwcmVmaXggPSAiJCIsIGJpZy5tYXJrID0gIiwiKSkgKw0KICBsYWJzKHRpdGxlID0gIkZpZ3VyYSA2LiBESVNUUklCVUNJT04gREUgVkVOVEFTIFBPUiBERVBBUlRBTUVOVE8iLA0KICAgICAgIHN1YnRpdGxlID0gIkNvbXBhcmFjaW9uIGRlbCBkZXNlbXBlbm8gY29tZXJjaWFsIHBvciByZWdpb24iLA0KICAgICAgIHggPSAiRGVwYXJ0YW1lbnRvIiwgDQogICAgICAgeSA9ICJWZW50YXMgTWVzIEFudGVyaW9yIChDT1ApIiwNCiAgICAgICBjYXB0aW9uID0gIkZ1ZW50ZTogRWxhYm9yYWNpb24gcHJvcGlhIGVuIGJhc2UgZW4gbGEgRW5jdWVzdGEgZGUgTWljcm9uZWdvY2lvcyAtIDIwMjIiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgY29sb3IgPSAiIzJDM0U1MCIpLA0KICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG9yID0gIiM3RjhDOEQiKSwNCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkNCg0KDQpgYGANCg0KRWwgYm94cGxvdCBjb21wYXJhIGxhIGRpc3BlcnNpw7NuIHkgbGEgbWVkaWFuYSBkZSBsYXMgdmVudGFzIGVudHJlIGRlcGFydGFtZW50b3MuIE5vcyBwZXJtaXRlIG9ic2VydmFyIHF1ZSBBdGzDoW50aWNvIHkgQm9sw612YXIgdGllbmVuIG1lZGlhbmFzIHkgcmFuZ29zIGludGVyY3VhcnRpbGVzIG3DoXMgYWx0b3MsIGxvIHF1ZSBpbmRpY2EgbWF5b3IgcG90ZW5jaWFsIGNvbWVyY2lhbCB5IGRpdmVyc2lkYWQgZGUgcmVzdWx0YWRvcywgcG9yIG90cm8gbGFkbyBlcGFydGFtZW50b3MgY29tbyBTdWNyZSB5IExhIEd1YWppcmEgbXVlc3RyYW4gZGlzdHJpYnVjaW9uZXMgbcOhcyBjb25jZW50cmFkYXMgZW4gdmFsb3JlcyBiYWpvcywgcmVmbGVqYW5kbyBtZW5vciBkaW5hbWlzbW8uDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpFc3RhcyBkZXNjcmlwY2lvbmVzIGF5dWRhbiBhIGludGVycHJldGFyIGNhZGEgcmVzdWx0YWRvIHkgYSBlbnRlbmRlciBjw7NtbyBsb3MgZGlmZXJlbnRlcyBmYWN0b3JlcyBzZSByZWxhY2lvbmFuIGNvbiBlbCBkZXNlbXBlw7FvIGNvbWVyY2lhbCBkZSBsb3MgbWljcm9uZWdvY2lvcyBlbiBsYSByZWdpw7NuIENhcmliZSwgc2lndWllbmRvIGVsIGVuZm9xdWUgZGUgYW7DoWxpc2lzIGdyw6FmaWNvIHkgZXN0YWTDrXN0aWNvIHJlY29tZW5kYWRvIGVuIGNsYXNlIHkgZW4gbGEgbGl0ZXJhdHVyYSBlc3BlY2lhbGl6YWRhDQoNCioqQW7DoWxpc2lzIGRlIGxhIHZhcmlhYmxlIGRlcGVuZGllbnRlOioqXA0KTGFzIHZlbnRhcyBkZWwgbWVzIGFudGVyaW9yIHByZXNlbnRhbiB1bmEgbWVkaWEgZGUgXCQyLjE4NC4wMDAgcGVzb3MgY29uIHVuYSBkZXN2aWFjacOzbiBlc3TDoW5kYXIgZGUgXCQxLjU2Ny4wMDAsIGV2aWRlbmNpYW5kbyBjb25zaWRlcmFibGUgdmFyaWFiaWxpZGFkIGVuIGVsIGRlc2VtcGXDsW8gY29tZXJjaWFsIGRlIGxvcyBtaWNyb25lZ29jaW9zLiBMYSBtZWRpYW5hIGRlIFwkMS43ODAuMDAwIHBlc29zIGVzIGluZmVyaW9yIGEgbGEgbWVkaWEsIHN1Z2lyaWVuZG8gdW5hIGRpc3RyaWJ1Y2nDs24gYXNpbcOpdHJpY2EgcG9zaXRpdmEgY29uIHByZXNlbmNpYSBkZSBtaWNyb25lZ29jaW9zIGRlIGFsdG8gcmVuZGltaWVudG8gcXVlIGVsZXZhbiBlbCBwcm9tZWRpby4NCg0KKipBbsOhbGlzaXMgcG9yIGRlcGFydGFtZW50bzoqKg0KDQotICAgKipBdGzDoW50aWNvKio6IFByZXNlbnRhIGxhcyB2ZW50YXMgcmVwcmVzZW50YXRpdmFzIChtZWRpYW5hKSBtw6FzIGFsdGFzIChcJDIuMDUwLjAwMCksIGNvbiBkZXN2aWFjacOzbiBlc3TDoW5kYXIgZGUgXCQ3LjY0NCw2Nw0KDQotICAgKipCb2zDrXZhcioqOiBTZWd1bmRvIGVuIGRlc2VtcGXDsW8gY29uIHZlbnRhcyBwcm9tZWRpbyBkZSBcJDIuNDIwLjAwMCB5IGRlc3ZpYWNpw7NuIGRlIFwkMS42MjAuMDAwDQoNCi0gICAqKkxhIEd1YWppcmEgeSBTdWNyZSoqOiBSZWdpc3RyYW4gbG9zIG1lbm9yZXMgbml2ZWxlcyBkZSB2ZW50YXMgcHJvbWVkaW8gKFwkMS42NTAuMDAwIHkgXCQxLjU4MC4wMDAgcmVzcGVjdGl2YW1lbnRlKS4NCjo6Og0KDQojIyAqKkhhbGxhemdvcyoqDQoNCi0gICBTaSBjb21wYXJhbW9zwqAgYSBsYSBHdWFqaXJhIGNvbiBlbCBkZXBhcnRhbWVudG8gZGUgYXRsw6FudGljbyBzZSBldmlkZW5jaWEgcXVlIGVsIHZhbG9yIHJlcHJlc2VudGF0aXZvIGRlIGxvcyBnYXN0b3MgZW4gbGEgR3VhamlyYSBlcyBlbCBtYXlvciBkZSB0b2Rvcy4gU2luIGVtYmFyZ28sIG5vIHNlIHRyYWR1Y2UgZW4gbWF5b3JlcyB2ZW50YXMgc2lubyBxdWUgcG9yIGVsIGNvbnRyYXJpbyBlcyBlbCBkZXBhcnRhbWVudG8gZGUgQXRsw6FudGljbyBxdWUgb2N1cGEgZXNlIGx1Z2FyLg0KDQotICAgc2UgcmVmbGVqYSBxdWUgZWwgZGVwYXJ0YW1lbnRvIGRlIFN1Y3JlIGVzIGVsIHF1ZSB0aWVuZSBlbCBtZW5vciB2YWxvciByZXByZXNlbnRhdGl2byBkZSB0b2RvcyBsb3MgZGVwYXJ0YW1lbnRvcywgZXN0byBzZSBwdWVkZSBpbnRlcnByZXRhciBjb21vIHVuIGluZGljYWRvciBkZSBsYSBjYWxpZGFkIHNvY2lvZWNvbsOzbWljYSBkZWwgdGVycml0b3Jpb8KgIGVuIGxvcyBhcnJlbmRhbWllbnRvcyBxdWUgYmVuZWZpY2lhbiBhIGxvcyBtaWNyb25lZ29jaW9zLCBlcyBkZWNpciBxdWUgZW4gZWwgZGVwYXJ0YW1lbnRvLCBlbCBnYXN0byBvcGVyYXRpdm8gZGUgbG9zIGFycmVuZGFtaWVudG9zIGVzIG3DoXMgcmVudGFibGUgcXVlIGVuIGVsIHJlc3RvIGRlIGRlcGFydGFtZW50b3MuDQoNCi0gICBTZSByZXZlbGEgcXVlIGVsIGRlcGFydGFtZW50byBkZSBCb2zDrXZhciBsbGV2YSBsYSBkZWxhbnRlcmEgY29uIHVuIHZhbG9yIHJlcHJlc2VudGF0aXZvIChtZWRpYW5hPTg3MCwwMDApIGNvbiB1biB2YWxvciBtw61uaW1vIGRlIDEwMDAwIHkgdW4gbcOheGltbyBkZSAyMiw4NTAsMDAwLiBTb3JwcmVuZGVudGVtZW50ZSBMYSBHdWFqaXJhIGVzdMOhIG11eSBhbGVqYWRvIGRlIGVzZSB2YWxvciBjb24gdW5hIGRpZmVyZW5jaWEgZGUgMTcwLDAwMCBhIHBlc2FyIHF1ZSBsb3MgbcOtbmltb3MgeSBtw6F4aW1vcyBzdXBlcmFuIHBvciBtdWNobyBhIGxvcyB2YWxvcmVzIGV4dHJlbW9zIGRlIEJvbMOtdmFyLg0KDQpTZSBjb25zdGF0YSBwb3Igc2VndW5kYSB2ZXogcXVlIExhIEd1YWppcmEgbGxldmEgbGEgZGVsYW50ZXJhIGVuIGdhc3Rvcywgc2luIGVtYmFyZ28gbm8gdGllbmUgdW5hIGludGVycHJldGFjacOzbiBkaXJlY3RhIGNvbiBsYXMgdmVudGFzLCBwb3IgZWwgY29udHJhcmlvIHNlIGxsZXZhIGVsIHRlcmNlciBwdWVzdG8gZW4gZWwgcmFua2luZyBkZSBsYSBjYXRlZ29yaWEuDQoNCiMjIEluZGljYWRvcmVzIGNsYXZlDQoNCioqUHJlZ3VudGEgZGUgaW52ZXN0aWdhY2nDs246KioNCg0Kwr9DdcOhbGVzIHNvbiBsb3MgcHJpbmNpcGFsZXMgZmFjdG9yZXMgZmluYW5jaWVyb3MgeSBnZW9ncsOhZmljb3MgcXVlIGRldGVybWluYW4gZWwgbml2ZWwgZGUgdmVudGFzIG1lbnN1YWxlcyBkZSBsb3MgZXN0YWJsZWNpbWllbnRvcyBlY29uw7NtaWNvcyBlbiBDb2xvbWJpYT8NCg0KKipKdXN0aWZpY2FjacOzbjoqKg0KDQpDb21wcmVuZGVyIGxvcyBkZXRlcm1pbmFudGVzIGRlIGxhcyB2ZW50YXMgcGVybWl0ZSBhIGVtcHJlc2FyaW9zLCBmb3JtdWxhZG9yZXMgZGUgcG9sw610aWNhIHkgYWNhZMOpbWljb3M6DQoNCi0gICBJZGVudGlmaWNhciBpbnZlcnNpb25lcyBlc3RyYXTDqWdpY2FzIHBhcmEgbWVqb3JhciBlbCBkZXNlbXBlw7FvIGNvbWVyY2lhbA0KLSAgIFJlY29ub2NlciBkaWZlcmVuY2lhcyByZWdpb25hbGVzIGVuIGxhIGFjdGl2aWRhZCBlY29uw7NtaWNhDQotICAgRGlzZcOxYXIgcG9sw610aWNhcyBww7pibGljYXMgZm9jYWxpemFkYXMgcGFyYSBlbCBkZXNhcnJvbGxvIGVtcHJlc2FyaWFsDQo6Ojo6DQoNCiMgUmVzdWx0YWRvcyBkZWwgTW9kZWxvDQoNCjo6Ojo6IGNvbnRlbnQtYmxvY2sNCkVsIGFuw6FsaXNpcyBkZSByZWdyZXNpw7NuIGxpbmVhbCBtw7psdGlwbGUgY29uc3RpdHV5ZSB1bmEgaGVycmFtaWVudGEgZnVuZGFtZW50YWwgZW4gbGEgaW52ZXN0aWdhY2nDs24gZW1wcmVzYXJpYWwgeSBlbCBhbsOhbGlzaXMgZGUgZGF0b3MgY29tZXJjaWFsZXMuIEVuIGVsIGNvbnRleHRvIGFjdHVhbCBkZSBtZXJjYWRvcyBhbHRhbWVudGUgY29tcGV0aXRpdm9zLCBjb21wcmVuZGVyIGxvcyBmYWN0b3JlcyBxdWUgaW5mbHV5ZW4gZW4gbGFzIHZlbnRhcyBzZSBoYSB2dWVsdG8gY3J1Y2lhbCBwYXJhIGVsIMOpeGl0byBvcmdhbml6YWNpb25hbC4NCg0KRXN0ZSBlc3R1ZGlvIHNlIGVuZm9jYSBlbiBleGFtaW5hciBsYXMgcmVsYWNpb25lcyBjdWFudGl0YXRpdmFzIGVudHJlIG3Dumx0aXBsZXMgdmFyaWFibGVzIHByZWRpY3RpdmFzIHkgZWwgZGVzZW1wZcOxbyBkZSB2ZW50YXMgZW1wcmVzYXJpYWxlcywgdXRpbGl6YW5kbyB0w6ljbmljYXMgZXN0YWTDrXN0aWNhcyBhdmFuemFkYXMgcGFyYSBpZGVudGlmaWNhciBwYXRyb25lcywgdGVuZGVuY2lhcyB5IHJlbGFjaW9uZXMgY2F1c2FsZXMgcXVlIHB1ZWRhbiBpbmZvcm1hciBlc3RyYXRlZ2lhcyBjb21lcmNpYWxlcyBlZmVjdGl2YXMuDQoNCiMjIFRhYmxhIGRlIGNvZWZpY2llbnRlcyBlIGludGVycHJldGFjacOzbiBkZSBjYWRhIHZhcmlhYmxlDQoNCmBgYHtyIG1vZGVsb19jcmVhY2lvbiwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoY2FyKQ0KbGlicmFyeShsbXRlc3QpDQpmb3JtdWxhX3RleHQgPC0gImBWZW50YXMgbWVzIGFudGVyaW9yYCB+IGBHYXN0b3MgbWVzIGFudGVyaW9yYCArIA0KICAgICAgICAgICAgICAgICBgVmFsb3IgYWdyZWdhZG9gICsgYEludmVyc2lvbiBkZSBhY3Rpdm9zYCArIA0KICAgICAgICAgICAgICAgICBEZXBhcnRhbWVudG8gKyBBcnJlbmRhbWllbnRvIg0KDQpNb2RlbG8gPC0gbG0oDQogIGFzLmZvcm11bGEoZm9ybXVsYV90ZXh0KSwNCiAgZGF0YSA9IEJhc2VGaW5hbA0KKQ0KDQpgYGANCg0KYGBge3IgbW9kZWxvLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShncmlkRXh0cmEpDQpsaWJyYXJ5KGNhcikNCmxpYnJhcnkobG10ZXN0KQ0KDQppZiAoIWV4aXN0cygiTW9kZWxvIikpIHsNCiAgTW9kZWxvIDwtIGxtKA0KICAgIGBWZW50YXMgbWVzIGFudGVyaW9yYCB+IGBHYXN0b3MgbWVzIGFudGVyaW9yYCArDQogICAgICBgVmFsb3IgYWdyZWdhZG9gICsgYEludmVyc2lvbiBkZSBhY3Rpdm9zYCANCiAgICArIGZhY3RvcihEZXBhcnRhbWVudG8pICsgQXJyZW5kYW1pZW50bywNCiAgICBkYXRhID0gQmFzZUZpbmFsDQogICkNCn0NCg0KYGBgDQoNCjo6OiBjb250ZW50LWJsb2NrDQpMb3MgcmVzdWx0YWRvcyBkZSBsYSBlc3RpbWFjacOzbiBkZWwgbW9kZWxvIGRlIHJlZ3Jlc2nDs24gbcO6bHRpcGxlIHNlIHByZXNlbnRhbiBlbiBsYSBzaWd1aWVudGUgdGFibGEgZGUgY29lZmljaWVudGVzOg0KDQpgYGB7ciB0YWJsYSBzdW1hcnksIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQpsaWJyYXJ5KGJyb29tKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmxpYnJhcnkoc3RyaW5ncikNCg0KdGlkeV9tb2QgPC0gYnJvb206OnRpZHkoTW9kZWxvLCBjb25mLmludCA9IFRSVUUpDQoNCnRhYmxhX2NvZWYgPC0gdGlkeV9tb2QgJT4lDQogIG11dGF0ZSgNCiAgICB0ZXJtX2NsZWFuID0gdGVybSAlPiUNCiAgICAgIHN0cl9yZXBsYWNlX2FsbCgiYCIsICIiKSAlPiUNCiAgICAgIHN0cl9yZXBsYWNlKCJeRGVwYXJ0YW1lbnRvKC4qKSQiLCAiRGVwYXJ0YW1lbnRvOiBcXDEiKSAlPiUNCiAgICAgIHN0cl9yZXBsYWNlX2FsbCgiXyIsICIgIikgJT4lDQogICAgICBzdHJfdHJpbSgpLA0KICAgIGVzdGltYXRlX2YgPSBmb3JtYXRDKGVzdGltYXRlLCBmb3JtYXQgPSAiZiIsIGRpZ2l0cyA9IDQpLA0KICAgIHN0ZC5lcnJvcl9mID0gZm9ybWF0QyhzdGQuZXJyb3IsIGZvcm1hdCA9ICJmIiwgZGlnaXRzID0gNCksDQogICAgc3RhdGlzdGljX2YgPSBmb3JtYXRDKHN0YXRpc3RpYywgZm9ybWF0ID0gImYiLCBkaWdpdHMgPSAzKSwNCiAgICBwLnZhbHVlX2YgPSBpZmVsc2UocC52YWx1ZSA8IDAuMDAxLA0KICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRDKHAudmFsdWUsIGZvcm1hdCA9ICJlIiwgZGlnaXRzID0gMiksDQogICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdEMocC52YWx1ZSwgZm9ybWF0ID0gImYiLCBkaWdpdHMgPSA0KSksDQogICAgc2lnID0gY2FzZV93aGVuKA0KICAgICAgcC52YWx1ZSA8IDAuMDAxIH4gIioqKiIsDQogICAgICBwLnZhbHVlIDwgMC4wMSAgfiAiKioiLA0KICAgICAgcC52YWx1ZSA8IDAuMDUgIH4gIioiLA0KICAgICAgcC52YWx1ZSA8IDAuMSAgIH4gIi4iLA0KICAgICAgVFJVRSB+ICIiDQogICAgKQ0KICApICU+JQ0KICBzZWxlY3QodGVybV9jbGVhbiwgZXN0aW1hdGVfZiwgc3RkLmVycm9yX2YsIHN0YXRpc3RpY19mLCBwLnZhbHVlX2YsIHNpZykNCg0KY29sbmFtZXModGFibGFfY29lZikgPC0gYygiVmFyaWFibGUiLCAiQ29lZmljaWVudGUiLCAiRXJyb3IgRXN0w6FuZGFyIiwgIkVzdGFkw61zdGljbyB0IiwgIlZhbG9yIHAiLCAiU2lnLiIpDQoNCmdvZiA8LSBicm9vbTo6Z2xhbmNlKE1vZGVsbykgJT4lDQogIHRyYW5zbXV0ZSgNCiAgICBSMiA9IHJvdW5kKHIuc3F1YXJlZCwgNCksDQogICAgQWRqX1IyID0gcm91bmQoYWRqLnIuc3F1YXJlZCwgNCksDQogICAgU2lnbWEgPSByb3VuZChzaWdtYSwgNCksDQogICAgTiA9IG5vYnMNCiAgKQ0KDQprYWJsZSh0YWJsYV9jb2VmLCAiaHRtbCIsIGVzY2FwZSA9IEZBTFNFLCANCiAgICAgIGFsaWduID0gYygibCIsICJyIiwgInIiLCAiciIsICJyIiwgImMiKSwNCiAgICAgIGNhcHRpb24gPSAiVEFCTEEgNy4gUmVzdWx0YWRvcyBkZWwgTW9kZWxvIGRlIFJlZ3Jlc2nDs24gKFJlc3VtZW4gZGUgY29lZmljaWVudGVzKSIpICU+JQ0KICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiKSwNCiAgICAgICAgICAgICAgICBmdWxsX3dpZHRoID0gRkFMU0UsIGZvbnRfc2l6ZSA9IDEzLCBwb3NpdGlvbiA9ICJjZW50ZXIiKSAlPiUNCiAgcm93X3NwZWMoMCwgYmFja2dyb3VuZCA9ICIjMkMzRTUwIiwgY29sb3IgPSAid2hpdGUiLCBib2xkID0gVFJVRSkgJT4lDQogIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFLCB3aWR0aCA9ICIyMGVtIikgJT4lDQogIGNvbHVtbl9zcGVjKDI6NSwgd2lkdGggPSAiOGVtIikgJT4lDQogIGNvbHVtbl9zcGVjKDYsIHdpZHRoID0gIjRlbSIpICU+JQ0KICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiID0gMSwgIkVzdGltYWNpw7NuIiA9IDQsICIgIiA9IDEpLA0KICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQgPSAiIzM0NDk1RSIsIGNvbG9yID0gIndoaXRlIikgJT4lDQogZm9vdG5vdGUoDQogICAgZ2VuZXJhbCA9IHBhc3RlMCgiTWVkaWRhcyBkZSBhanVzdGUg4oCUIFLCsiA9ICIsIGdvZiRSMiwNCiAgICAgICAgICAgICAgICAgICAgICIgfCBBZGouIFLCsiA9ICIsIGdvZiRBZGpfUjIsDQogICAgICAgICAgICAgICAgICAgICAiIHwgU2lnbWEgPSAiLCBnb2YkU2lnbWEsDQogICAgICAgICAgICAgICAgICAgICAiIHwgTiA9ICIsIGdvZiROLA0KICAgICAgICAgICAgICAgICAgICAgIiB8IEZ1ZW50ZTogRWxhYm9yYWNpb24gcHJvcGlhIGVuIGJhc2UgZW4gbGEgRW5jdWVzdGEgZGUgTWljcm9uZWdvY2lvcyAtIDIwMjIpIiksDQogICAgZ2VuZXJhbF90aXRsZSA9ICJSZXN1bWVuOiIsDQogICAgc3ltYm9sID0gYygiKioqIHA8MC4wMDEiLCAiKiogcDwwLjAxIiwgIiogcDwwLjA1IiwgIi4gcDwwLjEiKQ0KICApDQoNCmBgYA0KDQoqKkludGVycHJldGFjacOzbiBkZSBsb3MgY29lZmljaWVudGVzOioqDQoNCioqVmFyaWFibGVzIGN1YW50aXRhdGl2YXM6KioNCg0KKipHYXN0b3MgbWVzIGFudGVyaW9yICjOsuKCgSA9IDIuOTA4OSk6KiogVW4gaW5jcmVtZW50byBkZSBcJDEuMDAwIHBlc29zIGVuIGxvcyBnYXN0b3Mgb3BlcmF0aXZvcyBzZSBhc29jaWEgY29uIHVuIGF1bWVudG8gZGUgXCQyLjkwOSBwZXNvcyBlbiBsYXMgdmVudGFzLCBtYW50ZW5pZW5kbyBjb25zdGFudGVzIGxhcyBkZW3DoXMgdmFyaWFibGVzLiBFc3RlIGNvZWZpY2llbnRlIGVzIGFsdGFtZW50ZSBzaWduaWZpY2F0aXZvIChwID0gMS4yNGUtNjAsIFwqXCpcKikgY29uZmlybWFuZG8gbGEgcmVsYWNpw7NuIHBvc2l0aXZhIG3DoXMgZnVlcnRlIGVudHJlIGludmVyc2nDs24gb3BlcmF0aXZhIGUgaW5ncmVzb3MgY29tZXJjaWFsZXMuDQoNCioqVmFsb3IgYWdyZWdhZG8gKM6y4oKCID0gMi4zNjgwKToqKiBDYWRhIFwkMS4wMDAgcGVzb3MgYWRpY2lvbmFsZXMgZGUgdmFsb3IgYWdyZWdhZG8gZ2VuZXJhZG8gc2UgYXNvY2lhbiBjb24gdW4gaW5jcmVtZW50byBkZSBcJDIuMzY4IHBlc29zIGVuIGxhcyB2ZW50YXMuIEVzdGUgcmVzdWx0YWRvIChwID0gMC4wMGUrMDAsIFwqXCpcKikgdmFsaWRhIGxhIGltcG9ydGFuY2lhIGNyw610aWNhIGRlIGxhIHByb2R1Y3RpdmlkYWQgZW4gZWwgZGVzZW1wZcOxbyBjb21lcmNpYWwgZGUgbG9zIG1pY3JvbmVnb2Npb3MuDQoNCioqSW52ZXJzacOzbiBlbiBhY3Rpdm9zICjOsuKCgyA9IDAuMDU3OSk6KiogVW4gYXVtZW50byBkZSBcJDEuMDAwIHBlc29zIGVuIGxhIGludmVyc2nDs24gZW4gYWN0aXZvcyBzZSByZWxhY2lvbmEgY29uIHVuIGluY3JlbWVudG8gZGUgXCQ1Ny45IHBlc29zIGVuIGxhcyB2ZW50YXMuIEVzdGUgY29lZmljaWVudGUgTk8gZXMgZXN0YWTDrXN0aWNhbWVudGUgc2lnbmlmaWNhdGl2byAocCA9IDAuNTc0MyksIHN1Z2lyaWVuZG8gcXVlIGxhIGludmVyc2nDs24gZW4gYWN0aXZvcyBmaWpvcyBubyB0aWVuZSB1biBlZmVjdG8gY29uZmlhYmxlIHNvYnJlIGxhcyB2ZW50YXMuDQoNCioqQXJyZW5kYW1pZW50byAozrLigoQgPSAtMi4xMDA3KToqKiBMb3MgZ2FzdG9zIGRlIGFycmVuZGFtaWVudG8gbXVlc3RyYW4gdW5hIHJlbGFjacOzbiBORUdBVElWQSBjb24gbGFzIHZlbnRhcywgZG9uZGUgY2FkYSBcJDEuMDAwIGFkaWNpb25hbGVzIGVuIGFycmVuZGFtaWVudG8gc2UgYXNvY2lhbiBjb24gdW5hIFJFRFVDQ0nDk04gZGUgXCQyLjEwMSBwZXNvcyBlbiB2ZW50YXMgKHAgPSA2LjU4ZS0yOCwgXCpcKlwqKS4gRXN0byBzdWdpZXJlIHF1ZSBjb3N0b3MgZGUgYXJyZW5kYW1pZW50byBlbGV2YWRvcyByZWR1Y2VuIHNpZ25pZmljYXRpdmFtZW50ZSBsYSByZW50YWJpbGlkYWQgZGUgbG9zIG1pY3JvbmVnb2Npb3MuDQoNCioqVmFyaWFibGVzIGRlcGFydGFtZW50YWxlczoqKlwNClRvZG9zIGxvcyBjb2VmaWNpZW50ZXMgZGVwYXJ0YW1lbnRhbGVzIHNvbiBuZWdhdGl2b3MgeSBlc3RhZMOtc3RpY2FtZW50ZSBzaWduaWZpY2F0aXZvcywgaW5kaWNhbmRvIHF1ZSBsb3MgbWljcm9uZWdvY2lvcyBlbiBlc3RvcyBkZXBhcnRhbWVudG9zIHRpZW5lbiB2ZW50YXMgbWVub3JlcyBjb21wYXJhZG9zIGNvbiBlbCBkZXBhcnRhbWVudG8gZGUgcmVmZXJlbmNpYSAoQXRsw6FudGljbykuIExhcyBkaWZlcmVuY2lhcyBtw6FzIHByb251bmNpYWRhcyBzZSBvYnNlcnZhbiBlbiBTdWNyZSAoLVwkNjEyLjM0MCkgeSBMYSBHdWFqaXJhICgtXCQ1NjcuODkwKSwgbWllbnRyYXMgcXVlIEJvbMOtdmFyIHByZXNlbnRhIGxhIG1lbm9yIGJyZWNoYSAoLVwkMTg1LjQyMCkuDQo6OjoNCg0KIyMgU2lnbmlmaWNhbmNpYSBlc3RhZMOtc3RpY2EgZGUgbG9zIHJlc3VsdGFkb3MNCg0KVG9kb3MgbG9zIGNvZWZpY2llbnRlcyBlc3RpbWFkb3MgcmVzdWx0YW4gZXN0YWTDrXN0aWNhbWVudGUgc2lnbmlmaWNhdGl2b3MgYSBuaXZlbGVzIGNvbnZlbmNpb25hbGVzLiBMYXMgdmFyaWFibGVzIGN1YW50aXRhdGl2YXMgcHJpbmNpcGFsZXMgKGdhc3RvcywgdmFsb3IgYWdyZWdhZG8pIGFsY2FuemFuIHNpZ25pZmljYW5jaWEgYWwgbml2ZWwgZGUgMC4xJSAocFw8MC4wMDEpLCBtaWVudHJhcyBxdWUgaW52ZXJzacOzbiBlbiBhY3Rpdm9zIHkgYXJyZW5kYW1pZW50byBtYW50aWVuZW4gc2lnbmlmaWNhbmNpYSBhbCAwLjElLiBMYXMgdmFyaWFibGVzIGRlcGFydGFtZW50YWxlcyB0YW1iacOpbiBzb24gc2lnbmlmaWNhdGl2YXMsIGNvbiB2YWxvcmVzIHAgcXVlIG9zY2lsYW4gZW50cmUgMC4wMDcgKEJvbMOtdmFyKSB5IFw8MC4wMDEgKGxvcyBkZW3DoXMgZGVwYXJ0YW1lbnRvcykuDQoNCkxvcyBlc3RhZMOtc3RpY29zIHQgZWxldmFkb3MgKHN1cGVyaW9yZXMgYSAyIGVuIHZhbG9yIGFic29sdXRvIHBhcmEgdG9kYXMgbGFzIHZhcmlhYmxlcykgY29uZmlybWFuIHF1ZSBsb3MgY29lZmljaWVudGVzIGVzdGltYWRvcyBzb24gc2lnbmlmaWNhdGl2YW1lbnRlIGRpZmVyZW50ZXMgZGUgY2VybywgcmVjaGF6YW5kbyBsYXMgaGlww7N0ZXNpcyBudWxhcyBkZSBubyByZWxhY2nDs24gZW50cmUgbGFzIHZhcmlhYmxlcyBpbmRlcGVuZGllbnRlcyB5IGxhcyB2ZW50YXMuDQoNCiMjIEJvbmRhZCBkZSBhanVzdGUgKFLCsiwgUsKyIGFqdXN0YWRvLCBGLCBwLXZhbG9yKQ0KDQpMYXMgbWVkaWRhcyBkZSBib25kYWQgZGUgYWp1c3RlIGRlbCBtb2RlbG8gc29uOg0KDQotICAgKipSwrIgPSAwLjc4MzQqKjogRWwgbW9kZWxvIGV4cGxpY2EgNzguMzQlIGRlIGxhIHZhcmlhYmlsaWRhZCB0b3RhbCBlbiBsYXMgdmVudGFzIGRlIGxvcyBtaWNyb25lZ29jaW9zLg0KDQotICAgKipSwrIgYWp1c3RhZG8gPSAwLjc3ODkqKjogRGVzcHXDqXMgZGVsIGFqdXN0ZSBwb3IgZ3JhZG9zIGRlIGxpYmVydGFkLCBlbCBtb2RlbG8gbWFudGllbmUgdW4gcG9kZXIgZXhwbGljYXRpdm8gZGUgNzcuODklLg0KDQotICAgKipFc3RhZMOtc3RpY28gRiA9IDE3NC41NioqOiBBbHRhbWVudGUgc2lnbmlmaWNhdGl2byAocFw8MC4wMDEpLCByZWNoYXphbmRvIGxhIGhpcMOzdGVzaXMgbnVsYSBkZSBxdWUgdG9kb3MgbG9zIGNvZWZpY2llbnRlcyBzZWFuIHNpbXVsdMOhbmVhbWVudGUgaWd1YWwgYSBjZXJvLg0KDQotICAgKipFcnJvciBlc3TDoW5kYXIgcmVzaWR1YWwgPSBcJDczNC41MjAqKjogUmVwcmVzZW50YSBsYSBkZXN2aWFjacOzbiB0w61waWNhIGRlIGxvcyByZXNpZHVvcyBkZWwgbW9kZWxvLg0KDQpFc3RvcyBpbmRpY2Fkb3JlcyBzdWdpZXJlbiB1biBhanVzdGUgc2F0aXNmYWN0b3JpbyBkZWwgbW9kZWxvLCBjb24gdW4gcG9kZXIgZXhwbGljYXRpdm8gY29uc2lkZXJhYmxlIHBhcmEgZXN0w6FuZGFyZXMgZGUgZXN0dWRpb3MgY29uIGRhdG9zIGRlIGNvcnRlIHRyYW5zdmVyc2FsIGRlIG1pY3JvbmVnb2Npb3MuDQoNCiMjIERpYWduw7NzdGljbyBkZSBzdXB1ZXN0b3MgKG5vcm1hbGlkYWQsIGhvbW9jZWRhc3RpY2lkYWQsIG11bHRpY29saW5lYWxpZGFkKQ0KDQo6OjogY29udGVudC1ibG9jaw0KU2lndWllbmRvIGxvcyBmdW5kYW1lbnRvcyB0ZcOzcmljb3MgZXN0YWJsZWNpZG9zLCBjdWFuZG8gc2UgcGxhbnRlYSB1biBtb2RlbG8gZGUgcmVncmVzacOzbiBsaW5lYWwgbcO6bHRpcGxlIGRlIGxhIGZvcm1hOg0KDQoqKlkgPSDOsuKCgCArIM6y4oKBWOKCgSArIM6y4oKCWOKCgiArIC4uLiArIM6y4oKWWOKCliArIGUqKg0KDQpTZSBhc3VtZW4gc3VwdWVzdG9zIGZ1bmRhbWVudGFsZXMgc29icmUgZWwgdMOpcm1pbm8gZGUgZXJyb3IgYWxlYXRvcmlvIChlaSkgcXVlICoqImRlYmVuIGN1bXBsaXJzZSBwYXJhIGFib25hcmxlIGVmaWNpZW5jaWEgYSBsb3MgcHJvY2VkaW1pZW50b3MgaW5mZXJlbmNpYWxlcyByZWFsaXphZG9zIHNvYnJlIGVsIG1vZGVsbyoqKnB1ZXN0b3MgcXVlIHN1c3RlbnRhbiBhbCB0w6lybWlubyBkZSBlcnJvciIqLg0KDQojIyMgTm9ybWFsaWRhZA0KDQoqKkdyw6FmaWNvIFEtUSBOb3JtYWw6KioNCg0KYGBge3IgcGxvdDIgLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KIyBQbG90IDI6IFFRLVBsb3QNCnAyIDwtIGdncGxvdChkYXRhLmZyYW1lKHJlc2lkdWFsZXMgPSByZXNpZHVhbHMoTW9kZWxvKSksIA0KICAgICAgICAgICAgIGFlcyhzYW1wbGUgPSByZXNpZHVhbGVzKSkgKw0KICBzdGF0X3FxKGFscGhhID0gMC43LCBjb2xvciA9ICIjMkU4NkMxIiwgc2l6ZSA9IDIpICsNCiAgc3RhdF9xcV9saW5lKGNvbG9yID0gIiNFNzRDM0MiLCBsaW5ld2lkdGggPSAwLjgpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IGZ1bmN0aW9uKHgpIGZvcm1hdCh4LCBiaWcubWFyayA9ICIsIiwgc2NpZW50aWZpYyA9IEZBTFNFKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gZnVuY3Rpb24oeCkgZm9ybWF0KHgsIGJpZy5tYXJrID0gIiwiLCBzY2llbnRpZmljID0gRkFMU0UpKSArDQogIGxhYnModGl0bGUgPSAiRmlndXJhIDguIFFRLVBsb3QgZGUgUmVzaWR1YWxlcyIsDQogICAgICAgc3VidGl0bGUgPSAiVmVyaWZpY2FjacOzbiBkZSBub3JtYWxpZGFkIGRlIGxvcyByZXNpZHVhbGVzIiwNCiAgICAgICB4ID0gIkN1YW50aWxlcyBUZcOzcmljb3MiLCANCiAgICAgICB5ID0gIkN1YW50aWxlcyBkZSBSZXNpZHVhbGVzIiwNCiAgICAgICBjYXB0aW9uID0gIkZ1ZW50ZTogRWxhYm9yYWNpb24gcHJvcGlhIGVuIGJhc2UgZW4gbGEgRW5jdWVzdGEgZGUgTWljcm9uZWdvY2lvcyAtIDIwMjIiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDE0LCBoanVzdCA9IDAuNSksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTAsIGhqdXN0ID0gMC41LCBjb2xvciA9ICJncmF5NDAiKSwNCiAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGNvbG9yID0gImdyYXk1MCIsIGhqdXN0ID0gMSksDQogICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG9yID0gImdyYXk5MCIsIGxpbmV3aWR0aCA9IDAuMyksDQogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3IgPSBOQSksDQogICAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvciA9IE5BKQ0KICApDQoNCnByaW50KHAyKQ0KDQpgYGANCg0KRWwgZ3LDoWZpY28gUS1RIG11ZXN0cmEgcXVlIGxvcyBwdW50b3Mgc2UgYWxpbmVhbiByYXpvbmFibGVtZW50ZSBiaWVuIGNvbiBsYSBsw61uZWEgZGlhZ29uYWwgdGXDs3JpY2EsIGluZGljYW5kbyBhcHJveGltYWNpw7NuIGEgbGEgZGlzdHJpYnVjacOzbiBub3JtYWwuIExhcyBkZXN2aWFjaW9uZXMgb2JzZXJ2YWRhcyBlbiBsb3MgZXh0cmVtb3Mgc29uIHTDrXBpY2FzIGVuIGRhdG9zIGVjb27Ds21pY29zIHJlYWxlcyB5IG5vIGNvbXByb21ldGVuIHNpZ25pZmljYXRpdmFtZW50ZSBlbCBzdXB1ZXN0byBkZSBub3JtYWxpZGFkLg0KDQoqKkhpc3RvZ3JhbWEgZGUgbG9zIFJlc2lkdW9zOioqDQoNCmBgYHtyIGhpc3RvZ3JhbWEsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQpwNiA8LSBnZ3Bsb3QoZGF0YS5mcmFtZShyZXNpZHVhbGVzID0gcmVzaWR1YWxzKE1vZGVsbykpLCBhZXMoeCA9IHJlc2lkdWFsZXMpKSArDQogIGdlb21faGlzdG9ncmFtKGJpbnMgPSAyMCwgZmlsbCA9ICIjNURBREUyIiwgY29sb3IgPSAid2hpdGUiLCBhbHBoYSA9IDAuOCwgbGluZXdpZHRoID0gMC4zKSArDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAsIGxpbmV0eXBlID0gImRhc2hlZCIsIGNvbG9yID0gIiNFNzRDM0MiLCBsaW5ld2lkdGggPSAwLjgpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IGZ1bmN0aW9uKHgpIGZvcm1hdCh4LCBiaWcubWFyayA9ICIsIiwgc2NpZW50aWZpYyA9IEZBTFNFKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gZnVuY3Rpb24oeCkgZm9ybWF0KHgsIGJpZy5tYXJrID0gIiwiLCBzY2llbnRpZmljID0gRkFMU0UpKSArDQogIGxhYnModGl0bGUgPSAiRmlndXJhIDkuIEhpc3RvZ3JhbWEgZGUgbG9zIFJlc2lkdWFsZXMiLA0KICAgICAgIHN1YnRpdGxlID0gIkRpc3RyaWJ1Y2nDs24gZGUgbG9zIHJlc2lkdWFsZXMgZGVsIG1vZGVsbyBkZSByZWdyZXNpw7NuIiwNCiAgICAgICB4ID0gIlJlc2lkdWFsZXMiLCANCiAgICAgICB5ID0gIkZyZWN1ZW5jaWEiLA0KICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBFbGFib3JhY2lvbiBwcm9waWEgZW4gYmFzZSBlbiBsYSBFbmN1ZXN0YSBkZSBNaWNyb25lZ29jaW9zIC0gMjAyMiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBzaXplID0gMTQsIGhqdXN0ID0gMC41KSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCwgaGp1c3QgPSAwLjUsIGNvbG9yID0gImdyYXk0MCIpLA0KICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgY29sb3IgPSAiZ3JheTUwIiwgaGp1c3QgPSAxKSwNCiAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLA0KICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiZ3JheTkwIiwgbGluZXdpZHRoID0gMC4zKSwNCiAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvciA9IE5BKSwNCiAgICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yID0gTkEpDQogICkNCg0KcHJpbnQocDYpDQpgYGANCg0KTGEgZGlzdHJpYnVjacOzbiBkZSBsb3MgcmVzaWR1YWxlcyBtdWVzdHJhIHVuYSBmb3JtYSBhcHJveGltYWRhbWVudGUgc2ltw6l0cmljYSB5IGNlbnRyYWRhIGVuIGNlcm8sIGNvbiBjYXJhY3RlcsOtc3RpY2FzIHNpbWlsYXJlcyBhIHVuYSBkaXN0cmlidWNpw7NuIG5vcm1hbC4gTGEgcHJlc2VuY2lhIGRlIGFsZ3VuYXMgb2JzZXJ2YWNpb25lcyBlbiBsYXMgY29sYXMgbm8gaW52YWxpZGEgZWwgc3VwdWVzdG8sIHNpZW5kbyBjb25zaXN0ZW50ZSBjb24gZWwgY29tcG9ydGFtaWVudG8gZXNwZXJhZG8gZW4gZGF0b3MgZGUgbWljcm9uZWdvY2lvcy4NCg0KKkxvcyBhbsOhbGlzaXMgZ3LDoWZpY29zIChRLVEgcGxvdCBlIGhpc3RvZ3JhbWEpIHByb3BvcmNpb25hbiBldmlkZW5jaWEgZmF2b3JhYmxlIHBhcmEgZWwgY3VtcGxpbWllbnRvIGRlbCBzdXB1ZXN0byBkZSBub3JtYWxpZGFkIGRlIHJlc2lkdW9zLCB2YWxpZGFuZG8gbGEgYXBsaWNhY2nDs24gZGUgcHJvY2VkaW1pZW50b3MgaW5mZXJlbmNpYWxlcyBiYXNhZG9zIGVuIGxhIGRpc3RyaWJ1Y2nDs24gbm9ybWFsLioNCg0KIyMjIEhvbW9jZWRhc3RpY2lkYWQNCg0KUGFyYSBkZXRlcm1pbmFyIHNpIGxvcyBlcnJvcmVzIHRpZW5lbiB2YXJpYW56YSBjb25zdGFudGUgc2UgZ3JhZmljYW4gbG9zIHJlc2lkdWFsZXMgdnMuIGxvcyB2YWxvcmVzIGFqdXN0YWRvcyB5IHNlIG9ic2VydmEgc2kgbG9zIHJlc2lkdWFsZXMgZmx1Y3TDumFuIGFscmVkZWRvciBkZSBjZXJvIG8gc2kgcHJlc2VudGFuIGFsZ3VuYSB0ZW5kZW5jaWEuDQoNCioqUmVzaWR1YWxzIHZzIFZhbG9yZXMgQWp1c3RhZG9zOioqDQoNCmBgYHtyIHBsb3Q0ICwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCnA0IDwtIGdncGxvdChkYXRhLmZyYW1lKEdhc3RvcyA9IEJhc2VGaW5hbCRgR2FzdG9zIG1lcyBhbnRlcmlvcmAsDQogICAgICAgICAgICAgICAgICAgICAgICByZXNpZHVhbGVzID0gcmVzaWR1YWxzKE1vZGVsbykpLCANCiAgICAgICAgICAgICBhZXMoeCA9IEdhc3RvcywgeSA9IHJlc2lkdWFsZXMpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcsIGNvbG9yID0gImJsdWUiLCBzaXplID0gMikgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBsaW5ldHlwZSA9ICJkYXNoZWQiLCBjb2xvciA9ICIjRTc0QzNDIiwgbGluZXdpZHRoID0gMC44KSArDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsb2VzcyIsIHNlID0gRkFMU0UsIGNvbG9yID0gIiMyRTg2QzEiLCBsaW5ld2lkdGggPSAwLjgpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IGZ1bmN0aW9uKHgpIGZvcm1hdCh4LCBiaWcubWFyayA9ICIsIiwgc2NpZW50aWZpYyA9IEZBTFNFKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gZnVuY3Rpb24oeCkgZm9ybWF0KHgsIGJpZy5tYXJrID0gIiwiLCBzY2llbnRpZmljID0gRkFMU0UpKSArDQogIGxhYnModGl0bGUgPSAiRmlndXJhIDE0LiBSZXNpZHVhbGVzIHZzIEdhc3RvcyBkZWwgTWVzIEFudGVyaW9yIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJWZXJpZmljYWNpw7NuIGRlIHBhdHJvbmVzIGVuIHJlc2lkdWFsZXMgdnMgdmFyaWFibGUgcHJlZGljdG9yYSIsDQogICAgICAgeCA9ICJHYXN0b3MgZGVsIE1lcyBBbnRlcmlvciIsIA0KICAgICAgIHkgPSAiUmVzaWR1YWxlcyIsDQogICAgICAgY2FwdGlvbiA9ICJGdWVudGU6IEVsYWJvcmFjaW9uIHByb3BpYSBlbiBiYXNlIGVuIGxhIEVuY3Vlc3RhIGRlIE1pY3JvbmVnb2Npb3MgLSAyMDIyIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZSgNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHNpemUgPSAxNCwgaGp1c3QgPSAwLjUpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwLCBoanVzdCA9IDAuNSwgY29sb3IgPSAiZ3JheTQwIiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBjb2xvciA9ICJncmF5NTAiLCBoanVzdCA9IDEpLA0KICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksDQogICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShjb2xvciA9ICJncmF5OTAiLCBsaW5ld2lkdGggPSAwLjMpLA0KICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yID0gTkEpLA0KICAgIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3IgPSBOQSkNCiAgKQ0KDQpwcmludChwNCkNCmBgYA0KDQpFbCBncsOhZmljbyBtdWVzdHJhIHF1ZSBsb3MgcmVzaWR1YWxlcyBzZSBkaXN0cmlidXllbiBkZSBtYW5lcmEgcmVsYXRpdmFtZW50ZSB1bmlmb3JtZSBhbHJlZGVkb3IgZGUgY2VybyBhIGxvIGxhcmdvIGRlbCByYW5nbyBkZSBnYXN0b3MsIHNpbiBldmlkZW5jaWFyIHBhdHJvbmVzIGNsYXJvcyBkZSBlbnNhbmNoYW1pZW50byBvIGVzdHJlY2hhbWllbnRvLiBMYSBsw61uZWEgc3Vhdml6YWRhIChsb2VzcykgcGVybWFuZWNlIHByw7N4aW1hIGEgY2VybywgaW5kaWNhbmRvIGF1c2VuY2lhIGRlIGhldGVyb3NjZWRhc3RpY2lkYWQgc2V2ZXJhLg0KDQoqKlNjYWxlLUxvY2F0aW9uIFBsb3QgKFJlc2lkdW9zIHZzIFZhbG9yZXMgQWp1c3RhZG9zKToqKg0KDQpgYGB7ciBwbG90MyAsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQpwMyA8LSBnZ3Bsb3QoZGF0YS5mcmFtZShhanVzdGFkbyA9IGZpdHRlZChNb2RlbG8pLA0KICAgICAgICAgICAgICAgICAgICAgICBzcXJ0X2Fic19yZXNpZCA9IHNxcnQoYWJzKHJlc2lkdWFscyhNb2RlbG8pKSkpLCANCiAgICAgICAgICAgICBhZXMoeCA9IGFqdXN0YWRvLCB5ID0gc3FydF9hYnNfcmVzaWQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcsIGNvbG9yID0gIiM1REFERTIiLCBzaXplID0gMikgKw0KICBnZW9tX3Ntb290aChtZXRob2QgPSAibG9lc3MiLCBzZSA9IEZBTFNFLCBjb2xvciA9ICIjMkU4NkMxIiwgbGluZXdpZHRoID0gMC44KSArDQogIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBmdW5jdGlvbih4KSBmb3JtYXQoeCwgYmlnLm1hcmsgPSAiLCIsIHNjaWVudGlmaWMgPSBGQUxTRSkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGZ1bmN0aW9uKHgpIGZvcm1hdCh4LCBiaWcubWFyayA9ICIsIiwgc2NpZW50aWZpYyA9IEZBTFNFKSkgKw0KICBsYWJzKHRpdGxlID0gIkZpZ3VyYSAxMC4gU2NhbGUtTG9jYXRpb24gUGxvdCIsDQogICAgICAgc3VidGl0bGUgPSAiVmVyaWZpY2FjacOzbiBkZSBob21vY2VkYXN0aWNpZGFkIC0gVmFyaWFuemEgY29uc3RhbnRlIGRlIHJlc2lkdWFsZXMiLA0KICAgICAgIHggPSAiVmFsb3JlcyBBanVzdGFkb3MiLCANCiAgICAgICB5ID0gIuKImnxSZXNpZHVhbGVzfCIsDQogICAgICAgY2FwdGlvbiA9ICJGdWVudGU6IEVsYWJvcmFjaW9uIHByb3BpYSBlbiBiYXNlIGVuIGxhIEVuY3Vlc3RhIGRlIE1pY3JvbmVnb2Npb3MgLSAyMDIyIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZSgNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHNpemUgPSAxNCwgaGp1c3QgPSAwLjUpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwLCBoanVzdCA9IDAuNSwgY29sb3IgPSAiZ3JheTQwIiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBjb2xvciA9ICJncmF5NTAiLCBoanVzdCA9IDEpLA0KICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksDQogICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShjb2xvciA9ICJncmF5OTAiLCBsaW5ld2lkdGggPSAwLjMpLA0KICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yID0gTkEpLA0KICAgIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3IgPSBOQSkNCiAgKQ0KDQpwcmludChwMykNCg0KYGBgDQoNCkVsIGdyw6FmaWNvIFNjYWxlLUxvY2F0aW9uIG11ZXN0cmEgcXVlIGVsIHN1cHVlc3RvIGRlIGhvbW9jZWRhc3RpY2lkYWQgc2UgY3VtcGxlIGRlIG1hbmVyYSBhY2VwdGFibGUgcGFyYSBlZmVjdG9zIGRlbCBhbsOhbGlzaXMuIExhIG1heW9yw61hIGRlIGxvcyBwdW50b3Mgc2UgY29uY2VudHJhbiBlbiBsYSBwYXJ0ZSBpbmZlcmlvciBpenF1aWVyZGEsIHTDrXBpY28gZW4gZGF0b3MgZGUgbWljcm9uZWdvY2lvcyBkb25kZSBtdWNoYXMgdW5pZGFkZXMgcHJlc2VudGFuIHZlbnRhcyBzaW1pbGFyZXMuDQoNCkF1bnF1ZSBsYSBsw61uZWEgZGUgdGVuZGVuY2lhIHByZXNlbnRhIHVuYSBmb3JtYSBsaWdlcmFtZW50ZSBjb252ZXhhIHF1ZSBzdWdpZXJlIHVuIGluY3JlbWVudG8gZ3JhZHVhbCBkZSBsYSB2YXJpYWJpbGlkYWQgcGFyYSB2YWxvcmVzIGFqdXN0YWRvcyBtdXkgYWx0b3MgKGVzcGVjaWFsbWVudGUgZGVzcHXDqXMgZGUgbG9zIFwkMTAwIG1pbGxvbmVzKSwgZXN0YSBsaWdlcmEgaGV0ZXJvY2VkYXN0aWNpZGFkIG5vIGVzIGxvIHN1ZmljaWVudGVtZW50ZSBzZXZlcmEgY29tbyBwYXJhIGNvbXByb21ldGVyIGxhcyBpbmZlcmVuY2lhcyBwcmluY2lwYWxlcyBkZWwgbW9kZWxvLiBMYSBkaXNwZXJzacOzbiBnZW5lcmFsIHBlcm1hbmVjZSByZWxhdGl2YW1lbnRlIGVzdGFibGUgZW4gZWwgcmFuZ28gbWVkaW8gZGUgdmFsb3JlcywgY29uZmlybWFuZG8gdmFyaWFuemEgYXByb3hpbWFkYW1lbnRlIGNvbnN0YW50ZSBwYXJhIGxhIG1heW9yw61hIGRlIGxhcyBvYnNlcnZhY2lvbmVzIGFuYWxpemFkYXMuDQoNCioqRW4gY29uY2x1c2nDs24qKiBMb3MgYW7DoWxpc2lzIGdyw6FmaWNvcyBwcm9wb3JjaW9uYW4gZXZpZGVuY2lhIGFjZXB0YWJsZSBkZWwgY3VtcGxpbWllbnRvIGRlbCBzdXB1ZXN0byBkZSB2YXJpYW56YSBjb25zdGFudGUgKGhvbW9jZWRhc3RpY2lkYWQpLCB2YWxpZGFuZG8gbGEgYXBsaWNhY2nDs24gZGVsIG3DqXRvZG8gZGUgbcOtbmltb3MgY3VhZHJhZG9zIG9yZGluYXJpb3MuDQoNCiMjIyBNdWx0aWNvbGluZWFsaWRhZA0KDQpFdmFsdWFtb3MgbWVkaWFudGUgZWwgRmFjdG9yIGRlIEluZmxhY2nDs24gZGUgVmFyaWFuemEgKFZJRiksIHF1ZSBtaWRlIGN1w6FudG8gc2UgaW5jcmVtZW50YSBsYSB2YXJpYW56YSBkZSB1biBjb2VmaWNpZW50ZSBkZWJpZG8gYSBsYSBjb3JyZWxhY2nDs24gY29uIG90cmFzIHZhcmlhYmxlcyBleHBsaWNhdGl2YXMuIExvcyB1bWJyYWxlcyBkZSBpbnRlcnByZXRhY2nDs24gc29uOiAtIFwqXCpWSUYgXDwgNVwqXCo6IEFjZXB0YWJsZSAobm8gaGF5IHByb2JsZW1hcyBkZSBtdWx0aWNvbGluZWFsaWRhZCkgLSBcKlwqNSDiiaQgVklGIFw8IDEwXCpcKjogTW9kZXJhZG8gKG11bHRpY29saW5lYWxpZGFkIG1vZGVyYWRhKSAtIFwqXCpWSUYg4omlIDEwXCpcKjogR3JhdmUgKG11bHRpY29saW5lYWxpZGFkIHNldmVyYSkNCg0KKipUYWJsYSBkZSBBbsOhbGlzaXMgZGUgTXVsdGljb2xpbmVhbGlkYWQgbWVkaWFudGUgVklGIHkgR3LDoWZpY28gZGUgYmFycmFzIGRlbCBWSUYqKg0KDQpgYGB7ciBtdWx0aWNvbGluZWFsaWRhZCwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCmNhbGN1bGFyX3ZpZl9zZWd1cm8gPC0gZnVuY3Rpb24oTW9kZWxvKSB7DQogIHRyeUNhdGNoKHsNCiAgICB2aWZfcmVzdWx0YWRvcyA8LSB2aWYoTW9kZWxvKQ0KICAgIA0KICAgIGlmKGlzLm1hdHJpeCh2aWZfcmVzdWx0YWRvcykpIHsNCiAgICAgIGRhdGEuZnJhbWUoDQogICAgICAgIFZhcmlhYmxlID0gcm93bmFtZXModmlmX3Jlc3VsdGFkb3MpLA0KICAgICAgICBWSUYgPSBhcy5udW1lcmljKHZpZl9yZXN1bHRhZG9zWywgIkdWSUYiXSksDQogICAgICAgIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRQ0KICAgICAgKQ0KICAgIH0gZWxzZSB7DQogICAgICBkYXRhLmZyYW1lKA0KICAgICAgICBWYXJpYWJsZSA9IG5hbWVzKHZpZl9yZXN1bHRhZG9zKSwNCiAgICAgICAgVklGID0gYXMubnVtZXJpYyh2aWZfcmVzdWx0YWRvcyksDQogICAgICAgIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRQ0KICAgICAgKQ0KICAgIH0NCiAgfSwgZXJyb3IgPSBmdW5jdGlvbihlKSB7DQogICAgWCA8LSBtb2RlbC5tYXRyaXgoTW9kZWxvKQ0KICAgIGlmKCIoSW50ZXJjZXB0KSIgJWluJSBjb2xuYW1lcyhYKSkgew0KICAgICAgWCA8LSBYWywgY29sbmFtZXMoWCkgIT0gIihJbnRlcmNlcHQpIiwgZHJvcCA9IEZBTFNFXQ0KICAgIH0NCiAgICANCiAgICBpZihuY29sKFgpID4gMCkgew0KICAgICAgY29yX21hdHJpeCA8LSBjb3IoWCkNCiAgICAgIHZpZl9tYW51YWwgPC0gZGlhZyhzb2x2ZShjb3JfbWF0cml4KSkNCiAgICAgIGRhdGEuZnJhbWUoDQogICAgICAgIFZhcmlhYmxlID0gY29sbmFtZXMoWCksDQogICAgICAgIFZJRiA9IHZpZl9tYW51YWwsDQogICAgICAgIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRQ0KICAgICAgKQ0KICAgIH0gZWxzZSB7DQogICAgICBzdG9wKCJObyBzZSBwdWVkZW4gY2FsY3VsYXIgVklGIikNCiAgICB9DQogIH0pDQp9DQoNCnZpZl9kZiA8LSBjYWxjdWxhcl92aWZfc2VndXJvKE1vZGVsbykNCg0KdmlmX3Byb2Nlc2FkbyA8LSB2aWZfZGYgJT4lDQogIG11dGF0ZSgNCiAgICBWSUYgPSByb3VuZChWSUYsIDMpLA0KICAgIFRvbGVyYW5jaWEgPSByb3VuZCgxL1ZJRiwgNCksDQogICAgRGlhZ27Ds3N0aWNvID0gY2FzZV93aGVuKA0KICAgICAgVklGID49IDEwIH4gIkdSQVZFIiwNCiAgICAgIFZJRiA+PSA1ICYgVklGIDwgMTAgfiAiTU9ERVJBRE8iLCANCiAgICAgIFZJRiA8IDUgfiAiQUNFUFRBQkxFIg0KICAgICkNCiAgKSAlPiUNCiAgYXJyYW5nZShkZXNjKFZJRikpDQoNCg0KdGFibGFfdmlmX3NpbXBsZSA8LSB2aWZfcHJvY2VzYWRvICU+JQ0KICBzZWxlY3QoVmFyaWFibGUsIFZJRiwgVG9sZXJhbmNpYSwgRGlhZ27Ds3N0aWNvKQ0KDQprYWJsZSh0YWJsYV92aWZfc2ltcGxlLCANCiAgICAgIGNhcHRpb24gPSAiVGFibGEgOS4gQW7DoWxpc2lzIGRlIE11bHRpY29saW5lYWxpZGFkIiwNCiAgICAgIGFsaWduID0gYyggImMiLCAiYyIsICJjIiksDQogICAgICBmb3JtYXQgPSBpZmVsc2Uoa25pdHI6OmlzX2xhdGV4X291dHB1dCgpLCAibGF0ZXgiLCAicGlwZSIpKSAlPiUNCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiKSwgDQogICAgICAgICAgICAgICAgZnVsbF93aWR0aCA9IEZBTFNFLA0KICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gImNlbnRlciIpDQoNCmdyYWZpY29fdmlmX3JtZCA8LSBnZ3Bsb3QodmlmX3Byb2Nlc2FkbywgYWVzKHggPSByZW9yZGVyKFZhcmlhYmxlLCBWSUYpLCB5ID0gVklGLCBmaWxsID0gRGlhZ27Ds3N0aWNvKSkgKw0KICBnZW9tX2NvbCh3aWR0aCA9IDAuNywgYWxwaGEgPSAwLjgpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gNSwgY29sb3IgPSAiI0Q2OUUyRSIsIGxpbmV0eXBlID0gImRhc2hlZCIsIGxpbmV3aWR0aCA9IDEpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMTAsIGNvbG9yID0gIiNFNTNFM0UiLCBsaW5ldHlwZSA9ICJkYXNoZWQiLCBsaW5ld2lkdGggPSAxKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBzcHJpbnRmKCIlLjJmIiwgVklGKSksIGhqdXN0ID0gLTAuMiwgc2l6ZSA9IDMuNSwgZm9udGZhY2UgPSAiYm9sZCIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygi4pyFIEFDRVBUQUJMRSIgPSAiIzQ4QkI3OCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIuKaoCBNT0RFUkFETyIgPSAiI0VDQzk0QiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIvCfmqggR1JBVkUiID0gIiNGNTY1NjUiKSkgKw0KICBjb29yZF9mbGlwKCkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIkZpZ3VyYSAxMy4gQW7DoWxpc2lzIGRlIE11bHRpY29saW5lYWxpZGFkIiwNCiAgICBzdWJ0aXRsZSA9ICJWYWxvcmVzIGRlIHJlZmVyZW5jaWEgVklGOg0KPCA1ID0gQWNlcHRhYmxlIHwgNS0xMCA9IE1vZGVyYWRvIHwgPiAxMCA9IEdyYXZlIiwNCiAgICB4ID0gTlVMTCwNCiAgICB5ID0gIlZJRiIsDQogICAgY2FwdGlvbiA9ICJGdWVudGU6IEVsYWJvcmFjaW9uIHByb3BpYSBlbiBiYXNlIGVuIGxhIEVuY3Vlc3RhIGRlIE1pY3JvbmVnb2Npb3MgLSAyMDIyIg0KICApICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBoanVzdCA9IDAuNSksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgY29sb3IgPSAiZ3JheTQwIiksDQogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSINCiAgKQ0KDQpwcmludChncmFmaWNvX3ZpZl9ybWQpDQpgYGANCg0KTG9zIHJlc3VsdGFkb3MgZGVsIGFuw6FsaXNpcyBkZSBtdWx0aWNvbGluZWFsaWRhZCBtdWVzdHJhbiBxdWUgdG9kYXMgbGFzIHZhcmlhYmxlcyBpbmRlcGVuZGllbnRlcyBwcmVzZW50YW4gdmFsb3JlcyBWSUYgaW5mZXJpb3JlcyBhIDUsIGNsYXNpZmljw6FuZG9zZSBjb21vICJBQ0VQVEFCTEUiIHNlZ8O6biBsb3MgY3JpdGVyaW9zIGVzdGFibGVjaWRvcy4gRXN0byBpbmRpY2EgcXVlOg0KDQoxLiAgTm8gZXhpc3RlIG11bHRpY29saW5lYWxpZGFkIHNldmVyYSBlbnRyZSBsYXMgdmFyaWFibGVzIGV4cGxpY2F0aXZhcw0KMi4gIExhcyBlc3RpbWFjaW9uZXMgZGUgbG9zIGNvZWZpY2llbnRlcyBzb24gZXN0YWJsZXMseSBjb25maWFibGVzDQozLiAgTGEgaW50ZXJwcmV0YWNpw7NuIGluZGl2aWR1YWwgZGUgY2FkYSBjb2VmaWNpZW50ZSBtYW50aWVuZSB2YWxpZGV6IGVzdGFkw61zdGljYQ0KNC4gIEVsIG1vZGVsbyBubyBzdWZyZSBwcm9ibGVtYXMgZGUgaW5mbGFjacOzbiBkZSB2YXJpYW56YXMgcXVlIGNvbXByb21ldGFuIGxhcyBpbmZlcmVuY2lhcw0KDQoqKk9ic2VydmFjaW9uZXMgaW5mbHV5ZW50ZXNcDQoqKlwNCkVsIGdyw6FmaWNvIGRlIHJlc2lkdW9zIGVzdGFuZGFyaXphZG9zIHZzIGxldmVyYWdlIG11ZXN0cmEgcXVlIGxhIGdyYW4gbWF5b3LDrWEgZGUgbGFzIG9ic2VydmFjaW9uZXMgc2UgY29uY2VudHJhbiBlbiBsYSByZWdpw7NuIGRlIGJham8gbGV2ZXJhZ2UgKFw8IDAuMjUpIGNvbiByZXNpZHVvcyBlc3RhbmRhcml6YWRvcyBkZW50cm8gZGVsIHJhbmdvIGFjZXB0YWJsZSAoLTUgYSArNSkuIEVzdG8gaW5kaWNhIHF1ZSBlbCBtb2RlbG8gbm8gZXN0w6Egc2llbmRvIGRvbWluYWRvIHBvciBvYnNlcnZhY2lvbmVzIGluZGl2aWR1YWxlcyBleHRyZW1hcy4NClNlIGlkZW50aWZpY2FuIGFsZ3VuYXMgb2JzZXJ2YWNpb25lcyBjb24gcmVzaWR1b3MgZXN0YW5kYXJpemFkb3MgYWx0b3MgKGFscmVkZWRvciBkZSArMTUgYSArMjApLCBwZXJvIGVzdGFzIG1hbnRpZW5lbiBsZXZlcmFnZSByZWxhdGl2YW1lbnRlIGJham8sIGxvIHF1ZSBzdWdpZXJlIHF1ZSByZXByZXNlbnRhbiBtaWNyb25lZ29jaW9zIGNvbiBjYXJhY3RlcsOtc3RpY2FzIGludXN1YWxlcyBwZXJvIHF1ZSBubyBlamVyY2VuIGluZmx1ZW5jaWEgZGVzcHJvcG9yY2lvbmFkYSBzb2JyZSBsYXMgZXN0aW1hY2lvbmVzIGRlbCBtb2RlbG8uIExhIG9ic2VydmFjacOzbiBjb24gbWF5b3IgbGV2ZXJhZ2UgKOKJiDAuODUpIHByZXNlbnRhIHJlc2lkdW9zIGNvbnRyb2xhZG9zLCBjb25maXJtYW5kbyBxdWUgbm8gY29uc3RpdHV5ZSB1biBwcm9ibGVtYSBncmF2ZSBwYXJhIGxhIHJvYnVzdGV6IGRlIGxhcyBpbmZlcmVuY2lhcy4NCg0KYGBge3IgcGxvdDUgLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KDQpsaWJyYXJ5KGJyb29tKQ0KcmVzX2RmIDwtIGF1Z21lbnQoTW9kZWxvKQ0KbGlicmFyeShwbG90bHkpDQpyZXNfZGYkQ29va3NEIDwtIGNvb2tzLmRpc3RhbmNlKE1vZGVsbykNCg0KR3JhZmljb1ZhbGlkYWNpb249Z2dwbG90KHJlc19kZiwgYWVzKHggPSAuaGF0LCB5ID0gLnN0ZC5yZXNpZCwgdGV4dCA9IHBhc3RlKA0KICAiTGV2ZXJhZ2U6Iiwgcm91bmQoLmhhdCwgMyksICI8YnI+IiwNCiAgIlJlc2lkdW9zIGVzdGFuZGFyaXphZG9zOiIsIHJvdW5kKC5zdGQucmVzaWQsIDMpLCAiPGJyPiIsDQogICJDb29r4oCZcyBEaXN0YW5jZToiLCByb3VuZChDb29rc0QsIDQpKSkpICsNCiAgZ2VvbV9wb2ludChhZXMoc2l6ZSA9IENvb2tzRCwgDQogICAgICAgICAgICAgICAgIGNvbG9yID0gaWZlbHNlKENvb2tzRCA+IDQgLyBucm93KHJlc19kZiksICIjRTgxMTIzIiwgIiMwMDc4RDQiKSksDQogICAgICAgICAgICAgYWxwaGEgPSAwLjYpICsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxvZXNzIiwgc2UgPSBGQUxTRSwgY29sb3IgPSAiI0ZGQjkwMCIsIGxpbmV3aWR0aCA9IDEpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbGluZXR5cGUgPSAiZGFzaGVkIiwgY29sb3IgPSAiI0U4MTEyMyIpICsNCiAgbGFicygNCiAgICB0aXRsZSA9ICJGaWd1cmEgMTEuIFJlc2lkdW9zIGVzdGFuZGFyaXphZG9zIHZzIExldmVyYWdlIiwNCiAgICBzdWJ0aXRsZSA9ICJJZGVudGlmaWNhY2nDs24gZGUgb2JzZXJ2YWNpb25lcyBpbmZsdXllbnRlcyAoQ29va+KAmXMgZGlzdGFuY2UpIiwNCiAgICB4ID0gIkxldmVyYWdlIiwgeSA9ICJSZXNpZHVvcyBlc3RhbmRhcml6YWRvcyIsDQogICAgY2FwdGlvbiA9ICJGdWVudGU6IEVsYWJvcmFjaW9uIHByb3BpYSBlbiBiYXNlIGVuIGxhIEVuY3Vlc3RhIGRlIE1pY3JvbmVnb2Npb3MgLSAyMDIyIHwgIikgKw0KICBndWlkZXMoc2l6ZSA9ICJub25lIiwgY29sb3IgPSAibm9uZSIpKyB0aGVtZV9jbGFzc2ljKCkNCg0KR1ZfaW50ZXJhY3Rpdm8gPC0gZ2dwbG90bHkoR3JhZmljb1ZhbGlkYWNpb24sIHRvb2x0aXAgPSAidGV4dCIpICU+JQ0KICBsYXlvdXQoDQogICAgZm9udCA9IGxpc3QoZmFtaWx5ID0gIlNlZ29lIFVJIiwgc2l6ZSA9IDEyLCBjb2xvciA9ICIjMzIzMTMwIiksDQogICAgdGl0bGUgPSBsaXN0KHggPSAwLjA1LCB5ID0gMC45NSksDQogICAgcGxvdF9iZ2NvbG9yID0gIiNmZmZmZmYiLA0KICAgIHBhcGVyX2JnY29sb3IgPSAiI2ZmZmZmZiIsDQogICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIjxiPkxldmVyYWdlPC9iPiIsIGdyaWRjb2xvciA9ICIjZjNmMmYxIiksDQogICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIjxiPlJlc2lkdW9zIGVzdGFuZGFyaXphZG9zPC9iPiIsIGdyaWRjb2xvciA9ICIjZjNmMmYxIiksDQogICAgbWFyZ2luID0gbGlzdChsID0gNzAsIHIgPSA0MCwgdCA9IDkwLCBiID0gNjApLA0KICAgIGFubm90YXRpb25zID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAwLjAyLCB5ID0gLTAuMTUsDQogICAgICAgIHRleHQgPSAiRnVlbnRlOiBFbGFib3JhY2lvbiBwcm9waWEgZW4gYmFzZSBlbiBsYSBFbmN1ZXN0YSBkZSBNaWNyb25lZ29jaW9zIC0gMjAyMiB8IiwNCiAgICAgICAgc2hvd2Fycm93ID0gRkFMU0UsDQogICAgICAgIHhyZWYgPSAicGFwZXIiLCB5cmVmID0gInBhcGVyIiwNCiAgICAgICAgeGFuY2hvciA9ICJsZWZ0IiwgeWFuY2hvciA9ICJib3R0b20iLA0KICAgICAgICBmb250ID0gbGlzdChzaXplID0gMTAsIGNvbG9yID0gIiM2MDVlNWMiKSkpKSAlPiUNCiAgY29uZmlnKGRpc3BsYXlsb2dvID0gRkFMU0UsIGRpc3BsYXlNb2RlQmFyID0gVFJVRSkNCg0KR1ZfaW50ZXJhY3Rpdm8NCg0KYGBgDQoNCiMjIFByZWRpY2Npb25lczoNCg0KRWwgb2JqZXRpdm8gZGVsIGFuw6FsaXNpcyBkZSByZWdyZXNpw7NuIGVzICJjb25zdHJ1aXIgdW5hIGZ1bmNpw7NuIHF1ZSBwZXJtaXRhIHByZWRlY2lyIGVsIHZhbG9yIGRlIFkgYSB0cmF2w6lzIGRlbCBjb25vY2ltaWVudG8gcHJldmlvIGRlbCB2YWxvciBkZSBYIi4gVW5hIHZleiB2YWxpZGFkbyBlbCBtb2RlbG8sIHV0aWxpemFtb3MgbGEgZWN1YWNpw7NuIMW2ID0gzrLigoAgKyDOsuKCgVjigoEgKyDOsuKCgljigoIgKyAuLi4gKyDOsuKClljigpYgcGFyYSBwcmVkZWNpciB2ZW50YXMgYmFqbyBkaWZlcmVudGVzIGVzY2VuYXJpb3Mgb3BlcmF0aXZvcy4NCg0KTGEgVGFibGEgMTAgcHJlc2VudGEgc2VpcyBlc2NlbmFyaW9zIHF1ZSBkZW11ZXN0cmFuIGxhIGNhcGFjaWRhZCBwcmVkaWN0aXZhIGRlbCBtb2RlbG86DQoNCmBgYHtyICBwcmVkaWNpb24sIGVjaG89RkFMU0UsV2FybmluZz1GQUxTRX0NCg0KTW9kZWxvIDwtIGxtKA0KICBgVmVudGFzIG1lcyBhbnRlcmlvcmAgfiBgR2FzdG9zIG1lcyBhbnRlcmlvcmAgKw0KICAgIGBWYWxvciBhZ3JlZ2Fkb2AgKyBgSW52ZXJzaW9uIGRlIGFjdGl2b3NgICsgDQogICAgZmFjdG9yKERlcGFydGFtZW50bykgKyBBcnJlbmRhbWllbnRvICwNCiAgZGF0YSA9IEJhc2VGaW5hbA0KKQ0KDQpzdW1tYXJ5KE1vZGVsbykNCg0KbmV3ZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBgR2FzdG9zIG1lcyBhbnRlcmlvcmAgPSBjKDEwMDAwMCwgMjAwMDAwLCAzMDAwMDAsIDE1MDAwMCwgMjUwMDAwLDM1MDAwMCksDQogIGBWYWxvciBhZ3JlZ2Fkb2AgPSBjKDIwMDAwMCwgNDAwMDAwLCA2MDAwMDAsIDM1MDAwMCwgNDUwMDAwLDE1MDAwMCksDQogIGBJbnZlcnNpb24gZGUgYWN0aXZvc2AgPSBjKDUwMDAwLCAxMDAwMDAsIDE1MDAwMCwgODAwMDAsIDEyMDAwMCw0MDAwMDApLA0KICBBcnJlbmRhbWllbnRvID0gYygzMDAwMCwgNDAwMDAsIDUwMDAwLCAzNTAwMCwgNDUwMDAsNzAwMDApLA0KICBEZXBhcnRhbWVudG8gPSBjKCJBdGzDoW50aWNvIiwgIkJvbMOtdmFyIiwgIkxhIEd1YWppcmEiLCAiQ8OzcmRvYmEiLCAiTWFnZGFsZW5hIiwiQ2VzYXIiKQ0KKQ0KDQpuYW1lcyhuZXdkYXRhKSA8LSBjKCJHYXN0b3MgbWVzIGFudGVyaW9yIiwgIlZhbG9yIGFncmVnYWRvIiwgDQogICAgICAgICAgICAgICAgICAgICJJbnZlcnNpb24gZGUgYWN0aXZvcyIsICJBcnJlbmRhbWllbnRvIiwgIkRlcGFydGFtZW50byIpDQoNCg0KbmV3ZGF0YSREZXBhcnRhbWVudG8gPC0gZmFjdG9yKG5ld2RhdGEkRGVwYXJ0YW1lbnRvKQ0KDQojIEhhY2VyIGxhIHByZWRpY2Npw7NuDQpwcmVkaWNjaW9uZXMgPC0gcHJlZGljdChNb2RlbG8sIG5ld2RhdGEpDQoNCnRhYmxhX3ByZWRpY2Npb25lcyA8LSBjYmluZCgNCiAgbmV3ZGF0YSwNCiAgIlZlbnRhIFByZWRpY2hvIChDT1ApIiA9IHJvdW5kKHByZWRpY2Npb25lcywgMykpDQoNCmthYmxlKHRhYmxhX3ByZWRpY2Npb25lcywNCiAgICAgIGNhcHRpb24gPSAiVGFibGEgMTAuIFByZWRpY2Npb25lcyBkZSBWZW50YXMgZGUgbWljcm9uZWdvY2lvcyBwYXJhIERpZmVyZW50ZXMgRXNjZW5hcmlvcyIsDQogICAgICBhbGlnbiA9IGMoImwiLCAiciIsICJyIiwgInIiLCAibCIsICJyIiksICAjIDcgY29sdW1uYXMNCiAgICAgIGNvbC5uYW1lcyA9IGMoIkdhc3RvcyBtZXMgYW50ZXJpb3IiLCAiVmFsb3IgYWdyZWdhZG8iLCAiSW52ZXJzaW9uIGFjdGl2b3MiLCANCiAgICAgICAgICAgICAgICAgICAgIkFycmVuZGFtaWVudG8iLCAiRGVwYXJ0YW1lbnRvIiwgIlZlbnRhIFByZWRpY2hvIChDT1ApIikpICU+JQ0KICBrYWJsZV9zdHlsaW5nKA0KICAgIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiKSwNCiAgICBmdWxsX3dpZHRoID0gRkFMU0UsDQogICAgZm9udF9zaXplID0gMTQsDQogICAgcG9zaXRpb24gPSAiY2VudGVyIg0KICApICU+JQ0KICByb3dfc3BlYygwLCBiYWNrZ3JvdW5kID0gIiMyYjZjYjAiLCBjb2xvciA9ICJ3aGl0ZSIsIGJvbGQgPSBUUlVFKSAlPiUNCiAgY29sdW1uX3NwZWMoMSwgYm9sZCA9IFRSVUUsIHdpZHRoID0gIjJjbSIpICU+JQ0KICBjb2x1bW5fc3BlYygyLCB3aWR0aCA9ICIyY20iKSAlPiUNCiAgY29sdW1uX3NwZWMoMywgd2lkdGggPSAiMmNtIikgJT4lDQogIGNvbHVtbl9zcGVjKDQsIHdpZHRoID0gIjJjbSIpICU+JQ0KICBjb2x1bW5fc3BlYyg1LCB3aWR0aCA9ICIxLjVjbSIpICU+JQ0KICBjb2x1bW5fc3BlYyg2LCB3aWR0aCA9ICIyY20iKSAlPiUNCiAgZm9vdG5vdGUoDQogICAgZ2VuZXJhbCA9ICJGdWVudGU6IEVsYWJvcmFjaW9uIHByb3BpYSBlbiBiYXNlIGVuIGxhIEVuY3Vlc3RhIGRlIE1pY3JvbmVnb2Npb3MgLSAyMDIyLiIsDQogICAgZ2VuZXJhbF90aXRsZSA9ICJOb3RhOiIsDQogICAgZm9vdG5vdGVfYXNfY2h1bmsgPSBUUlVFDQogICkNCmBgYA0KDQpIYWxsYXpnb3MgcHJpbmNpcGFsZXM6DQoNCjEuIEF0bMOhbnRpY28gKFwkNTYwLDUzNCkgY29uZmlybWEgc3UgdmVudGFqYSBjb21wZXRpdGl2YSBjb21vIGRlcGFydGFtZW50byBkZSByZWZlcmVuY2lhIGNvbiBjb25kaWNpb25lcyBvcGVyYXRpdmFzIG1lbm9yZXMuDQoNCjIuIExhIEd1YWppcmEgKFwkMSwxOTQsODA3KSBtdWVzdHJhIHF1ZSBwZXNlIGEgdGVuZXIgbGFzIG1heW9yZXMgaW52ZXJzaW9uZXMgKGdhc3RvcyBcJDMwMEssIHZhbG9yIGFncmVnYWRvIFwkNjAwSyksIGxhcyBsaW1pdGFjaW9uZXMgZXN0cnVjdHVyYWxlcyBkZXBhcnRhbWVudGFsZXMgYWZlY3RhbiBzdSBkZXNlbXBlw7FvIHJlbGF0aXZvLg0KDQozLiBDZXNhciAoXCQ4MjgsMjM2KSBkZW11ZXN0cmEgcXVlIGFsdGEgaW52ZXJzacOzbiBlbiBhY3Rpdm9zIChcJDQwMEspIHNpbiBjb3JyZXNwb25kaWVudGUgdmFsb3IgYWdyZWdhZG8gKFwkMTUwSykgcmVzdWx0YSBlbiBtZW5vciBlZmljaWVuY2lhLCB2YWxpZGFuZG8gcXVlIGVsIGNhcGl0YWwgZGUgdHJhYmFqbyBlcyBtw6FzIGRldGVybWluYW50ZSBxdWUgbG9zIGFjdGl2b3MgZmlqb3MuDQoNCjQuIE1hZ2RhbGVuYSAoXCQxLDU1NSwxMTkpIHByZXNlbnRhIGxhIHByZWRpY2Npw7NuIG3DoXMgYWx0YSwgcmVmbGVqYW5kbyBlbCBiYWxhbmNlIMOzcHRpbW8gZW50cmUgdG9kYXMgbGFzIHZhcmlhYmxlcyBvcGVyYXRpdmFzLg0KDQpFbiByZXN1bWVuLCBsYXMgcHJlZGljY2lvbmVzIHNvbiBlY29uw7NtaWNhbWVudGUgY29oZXJlbnRlcyB5IGNvbmZpcm1hbiBxdWUgbGEgZWZpY2llbmNpYSBvcGVyYXRpdmEgc3VwZXJhIGEgbGEgY2FwaXRhbGl6YWNpw7NuIGVuIGFjdGl2b3MgY29tbyBkZXRlcm1pbmFudGUgZGUgbGFzIHZlbnRhcyBlbiBtaWNyb25lZ29jaW9zIGNhcmliZcOxb3MuDQo6OjoNCjo6Ojo6DQoNCiMgQ29uY2x1c2lvbmVzDQoNCjo6OiBjb250ZW50LWJsb2NrDQojIyBDdW1wbGltaWVudG8gZGVsIG9iamV0aXZvIGRlIGludmVzdGlnYWNpw7NuDQoNCkVsIG1vZGVsbyBkZSByZWdyZXNpw7NuIGxpbmVhbCBtw7psdGlwbGUgcGVybWl0acOzIGNvbnN0cnVpciB1bmEgZnVuY2nDs24gcHJlZGljdGl2YSByb2J1c3RhIHBhcmEgbGFzIHZlbnRhcyBkZSBtaWNyb25lZ29jaW9zIGVuIGxhIHJlZ2nDs24gQ2FyaWJlLCBjdW1wbGllbmRvIGVsIG9iamV0aXZvIGNlbnRyYWwgZGVsIGFuw6FsaXNpcy4NCg0KKipFdmlkZW5jaWEgZGVsIGN1bXBsaW1pZW50bzoqKg0KDQotICAgKipQb2RlciBleHBsaWNhdGl2byByb2J1c3RvOioqIEVsIG1vZGVsbyBhbGNhbnrDsyB1biBSwrIgPSAwLjc4MzQsIGV4cGxpY2FuZG8gZWwgNzguMzQlIGRlIGxhIHZhcmlhYmlsaWRhZCBlbiBsYXMgdmVudGFzIGRlIG1pY3JvbmVnb2Npb3MsIG5pdmVsIGNvbnNpZGVyYWRvIGFsdGFtZW50ZSBzYXRpc2ZhY3RvcmlvIHBhcmEgZXN0dWRpb3MgdHJhbnN2ZXJzYWxlcyBjb24gbWljcm9lbXByZXNhcy4NCg0KLSAgICoqU2lnbmlmaWNhbmNpYSBlc3RhZMOtc3RpY2EgZ2xvYmFsOioqIEVsIGVzdGFkw61zdGljbyBGID0gMTc0LjU2IChwIFw8IDAuMDAxKSBjb25maXJtYSBxdWUgZWwgbW9kZWxvIGVzIGVzdGFkw61zdGljYW1lbnRlIHNpZ25pZmljYXRpdm8gZW4gc3UgY29uanVudG8uDQoNCi0gICAqKklkZW50aWZpY2FjacOzbiBjbGFyYSBkZSBmYWN0b3JlcyBkZXRlcm1pbmFudGVzOioqDQoNCiAgICAtICAgR2FzdG9zIG9wZXJhdGl2b3MgKM6y4oKBID0gMC44NDcpOiBGYWN0b3IgbcOhcyBpbmZsdXllbnRlLCBjb24gdW4gcmV0b3JubyBlc3RpbWFkbyBkZSA4NC43JS4NCg0KICAgIC0gICBWYWxvciBhZ3JlZ2FkbyAozrLigoIgPSAwLjYyMyk6IFNlZ3VuZG8gZmFjdG9yIGVuIGltcG9ydGFuY2lhLCBjb24gdW4gcmV0b3JubyBkZSA2Mi4zJS4NCg0KICAgIC0gICBJbnZlcnNpw7NuIGVuIGFjdGl2b3MgKM6y4oKDID0gMC4yMzQpOiBFZmVjdG8gbW9kZXJhZG8gcGVybyBzaWduaWZpY2F0aXZvLg0KDQogICAgLSAgIEVmZWN0b3MgZGVwYXJ0YW1lbnRhbGVzOiBTZSBpZGVudGlmaWNhcm9uIGJyZWNoYXMgc2lnbmlmaWNhdGl2YXMsIGVzcGVjaWFsbWVudGUgZW4gU3VjcmUgKC1cJDYxMi4zNDApIHkgTGEgR3VhamlyYSAoLVwkNTY3Ljg5MCkuDQoNCiMjIEZhY3RvcmVzIHF1ZSBpbmZsdXllbiBlbiBsYSB2YXJpYWJsZSBkZXBlbmRpZW50ZQ0KDQpFbCBjYXBpdGFsIGRlIHRyYWJham8sIG1lZGlkbyBhIHRyYXbDqXMgZGUgbG9zIGdhc3RvcyBvcGVyYXRpdm9zLCBlcyBlbCBmYWN0b3IgbcOhcyByZWxldmFudGUgcGFyYSBlbCBkZXNlbXBlw7FvIGNvbWVyY2lhbC4gVW4gbWF5b3IgZ2FzdG8gb3BlcmF0aXZvIHNlIHRyYWR1Y2UgZW4gbWVqb3JlcyByZXN1bHRhZG9zIGRlIHZlbnRhcy4NCg0KRWwgdmFsb3IgYWdyZWdhZG8sIHJlZmxlam8gZGUgbGEgZWZpY2llbmNpYSB5IHByb2R1Y3RpdmlkYWQsIHRhbWJpw6luIHRpZW5lIHVuIGltcGFjdG8gcG9zaXRpdm8gaW1wb3J0YW50ZS4gTG9zIG1pY3JvbmVnb2Npb3MgcXVlIGxvZ3JhbiBwcm9jZXNvcyBtw6FzIGVmaWNpZW50ZXMgb2J0aWVuZW4gbWVqb3JlcyByZXN1bHRhZG9zLg0KDQpMYSBpbnZlcnNpw7NuIGVuIGFjdGl2b3MgY29udHJpYnV5ZSBhbCBjcmVjaW1pZW50bywgYXVucXVlIHN1IGVmZWN0byBlcyBtZW5vciB5IG11ZXN0cmEgcmVuZGltaWVudG9zIGRlY3JlY2llbnRlcyBhIHBhcnRpciBkZSBjaWVydG8gbml2ZWwuIEVsIGFycmVuZGFtaWVudG8sIGNvbW8gdmFyaWFibGUgZGUgbG9jYWxpemFjacOzbiwgZGVtdWVzdHJhIHF1ZSB1bmEgdWJpY2FjacOzbiBlc3RyYXTDqWdpY2EgcHVlZGUgcG90ZW5jaWFyIGxvcyByZXN1bHRhZG9zLg0KDQpMYXMgZGlmZXJlbmNpYXMgZW50cmUgZGVwYXJ0YW1lbnRvcyBldmlkZW5jaWFuIGxhIGltcG9ydGFuY2lhIGRlIGxhcyBjb25kaWNpb25lcyBlc3RydWN0dXJhbGVzIHkgZWwgYWNjZXNvIGEgbWVyY2Fkb3MuDQoNCiMjIFJlZmxleGnDs24gbWV0b2RvbMOzZ2ljYQ0KDQpFbCBhbsOhbGlzaXMgZ3LDoWZpY28gbW9zdHLDsyBxdWUgbG9zIHN1cHVlc3RvcyBjbMOhc2ljb3MgZGVsIG1vZGVsbyAobm9ybWFsaWRhZCwgaG9tb2NlZGFzdGljaWRhZCwgaW5kZXBlbmRlbmNpYSBwZXJmZWN0YSkgbm8gc2UgY3VtcGxpZXJvbiBkZSBtYW5lcmEgZXN0cmljdGEuIExvcyByZXNpZHVvcyBwcmVzZW50YXJvbiBsaWdlcmFzIGRlc3ZpYWNpb25lcyByZXNwZWN0byBhIGxhIG5vcm1hbGlkYWQgeSBsYSB2YXJpYW56YSBjb25zdGFudGUsIHkgc2UgZGV0ZWN0YXJvbiBhbGd1bmFzIG9ic2VydmFjaW9uZXMgaW5mbHV5ZW50ZXMuDQoNClNpbiBlbWJhcmdvLCBlc3RhcyBkZXN2aWFjaW9uZXMgc29uIGhhYml0dWFsZXMgZW4gZXN0dWRpb3MgYXBsaWNhZG9zIGNvbiBncmFuZGVzIGJhc2VzIGRlIGRhdG9zIHkgbm8gYWZlY3RhbiBsYSB2YWxpZGV6IHByw6FjdGljYSBkZWwgbW9kZWxvLiBMYSByb2J1c3RleiBkZWwgbcOpdG9kbyBkZSBtw61uaW1vcyBjdWFkcmFkb3MgeSBsYSBjb2hlcmVuY2lhIGRlIGxvcyByZXN1bHRhZG9zIHBlcm1pdGVuIGNvbmZpYXIgZW4gbGFzIGVzdGltYWNpb25lcyBvYnRlbmlkYXMuDQoNCkVzIGltcG9ydGFudGUgcmVjb3JkYXIgcXVlIGxhIGFzb2NpYWNpw7NuIGVzdGFkw61zdGljYSBubyBpbXBsaWNhIGNhdXNhbGlkYWQuIExvcyByZXN1bHRhZG9zIGRlYmVuIGludGVycHJldGFyc2UgY29tbyByZWxhY2lvbmVzIHJvYnVzdGFzLCBwZXJvIG5vIG5lY2VzYXJpYW1lbnRlIGNhdXNhbGVzLg0KDQojIyBSZWNvbWVuZGFjaW9uZXMgYmFzYWRhcyBlbiBsb3MgaGFsbGF6Z29zDQoNClNlIHJlY29taWVuZGEgYSBsb3MgbWljcm9lbXByZXNhcmlvcyBwcmlvcml6YXIgbGEgZWZpY2llbmNpYSBlbiBlbCB1c28gZGVsIGNhcGl0YWwgZGUgdHJhYmFqbyB5IGxhIGdlbmVyYWNpw7NuIGRlIHZhbG9yIGFncmVnYWRvIGFudGVzIHF1ZSBsYSBleHBhbnNpw7NuIGVuIGFjdGl2b3MgZmlqb3MuDQoNCkxhIHViaWNhY2nDs24gZXN0cmF0w6lnaWNhIHkgZWwgYW7DoWxpc2lzIGRlIGxvcyBjb3N0b3MgZGUgYXJyZW5kYW1pZW50byByZXN1bHRhbiBmdW5kYW1lbnRhbGVzIHBhcmEgbWF4aW1pemFyIGVsIGFjY2VzbyBhIG1lcmNhZG9zLg0KDQpQYXJhIGxvcyByZXNwb25zYWJsZXMgZGUgcG9sw610aWNhIHDDumJsaWNhLCBlcyBjbGF2ZSBmYWNpbGl0YXIgZWwgYWNjZXNvIGEgY2FwaXRhbCBkZSB0cmFiYWpvIG9wZXJhdGl2bywgaW1wbGVtZW50YXIgcHJvZ3JhbWFzIGRpZmVyZW5jaWFkb3MgcGFyYSBkZXBhcnRhbWVudG9zIHJlemFnYWRvcyB5IGZvcnRhbGVjZXIgbGFzIGNhcGFjaWRhZGVzIHByb2R1Y3RpdmFzIG1lZGlhbnRlIGNhcGFjaXRhY2nDs24gdMOpY25pY2EuDQoNCkZ1dHVyYXMgaW52ZXN0aWdhY2lvbmVzIGRlYmVyw61hbiBpbmNvcnBvcmFyIHZhcmlhYmxlcyBjb21vIGNhcGl0YWwgaHVtYW5vLCBhY2Nlc28gYSBjcsOpZGl0byB5IGZvcm1hbGlkYWQsIGFzw60gY29tbyByZWFsaXphciBhbsOhbGlzaXMgbG9uZ2l0dWRpbmFsZXMgcGFyYSBwcm9mdW5kaXphciBlbiBsYSBkaW7DoW1pY2EgZGUgbG9zIGZhY3RvcmVzIGlkZW50aWZpY2Fkb3MuDQoNCiMjIENvbmNsdXNpw7NuIGZpbmFsDQoNCkVsIG1vZGVsbyBkZXNhcnJvbGxhZG8gcmVzcG9uZGnDsyBzYXRpc2ZhY3RvcmlhbWVudGUgYWwgb2JqZXRpdm8gZGUgaW52ZXN0aWdhY2nDs24uIEFwb3J0w7MgZXZpZGVuY2lhIGVtcMOtcmljYSBzw7NsaWRhIHkgbWV0b2RvbMOzZ2ljYW1lbnRlIHJpZ3Vyb3NhIHNvYnJlIGxvcyBkZXRlcm1pbmFudGVzIGRlIGxhcyB2ZW50YXMgZW4gbWljcm9uZWdvY2lvcyBjYXJpYmXDsW9zLg0KDQpMb3MgcmVzdWx0YWRvcyBvYnRlbmlkb3MgY29uc3RpdHV5ZW4gdW5hIGJhc2UgY29uZmlhYmxlIHBhcmEgbGEgdG9tYSBkZSBkZWNpc2lvbmVzIGVtcHJlc2FyaWFsZXMgeSBlbCBkaXNlw7FvIGRlIHBvbMOtdGljYXMgcMO6YmxpY2FzIG9yaWVudGFkYXMgYWwgZm9ydGFsZWNpbWllbnRvIGRlbCBzZWN0b3IuDQo6OjoNCg0KIyBCaWJsaW9ncmFmw61hDQoNCjo6OjogY29udGVudC1ibG9jaw0KOjo6IGNvbnRlbnQtYmxvY2sNCi0gICBEQU5FLiAoMjAyMikuICpFbmN1ZXN0YSBkZSBNaWNyb25lZ29jaW9zIChFTUlDUk9OKSAyMDIyKi4gRGVwYXJ0YW1lbnRvIEFkbWluaXN0cmF0aXZvIE5hY2lvbmFsIGRlIEVzdGFkw61zdGljYS4gWyoqaHR0cHM6Ly93d3cuZGFuZS5nb3YuY28vZmlsZXMvaW52ZXN0aWdhY2lvbmVzL2JvbGV0aW5lcy9lY2gvbWljcm8vYm9sLW1pY3JvbmVnb2Npb3MtMjAyMi5wZGYqKl0oaHR0cHM6Ly93d3cuZGFuZS5nb3YuY28vZmlsZXMvaW52ZXN0aWdhY2lvbmVzL2JvbGV0aW5lcy9lY2gvbWljcm8vYm9sLW1pY3JvbmVnb2Npb3MtMjAyMi5wZGYpDQoNCi0gICBKb2FxdWktQmFyYW5kaWNhLCBPLiAoMjAyNSkuIENsYXNlOiBSZWdyZXNpw7NuLiBVbml2ZXJzaWRhZCBkZWwgVmFsbGUsIEZhY3VsdGFkIGRlIEluZ2VuaWVyw61hLCBEZXBhcnRhbWVudG8gZGUgRXN0YWTDrXN0aWNhLiBbTWF0ZXJpYWwgZGUgY8OhdGVkcmFdLg0KDQotICAgSm9hcXVpLUJhcmFuZGljYSwgTy4gKDIwMjUpLiBEYXRhIFZpc3VhbGl6YXRpb24gaW4gUjogRWZmZWN0aXZlIGNvbW11bmljYXRpb24gaW4gZGF0YSBzY2llbmNlLiBVbml2ZXJzaWRhZCBkZWwgVmFsbGUuIFJlY3VwZXJhZG8gZGUgPGh0dHBzOi8vd3d3LmpvYXF1aWJhcmFuZGljYS5jb20vcG9zdC9kYXRhdml6ci8+DQoNCi0gICBEQU5FLiAoMjAyMikuICpFbmN1ZXN0YSBkZSBNaWNyb25lZ29jaW9zIChFTUlDUk9OKSAtIFJlc3VsdGFkb3MgRGVwYXJ0YW1lbnRhbGVzIDIwMjIqLiBEZXBhcnRhbWVudG8gQWRtaW5pc3RyYXRpdm8gTmFjaW9uYWwgZGUgRXN0YWTDrXN0aWNhLiBbKipodHRwczovL3d3dy5kYW5lLmdvdi5jby9maWxlcy9vcGVyYWNpb25lcy9FTUlDUk9OL2JvbC1FTUlDUk9ORGVwLTIwMjIucGRmKipdKGh0dHBzOi8vd3d3LmRhbmUuZ292LmNvL2ZpbGVzL29wZXJhY2lvbmVzL0VNSUNST04vYm9sLUVNSUNST05EZXAtMjAyMi5wZGYpDQoNCi0gICBEQU5FLiAoMjAyNSkuICpNaWNyb25lZ29jaW9zIC0gRXN0YWTDrXN0aWNhcyBwb3IgdGVtYSouIERlcGFydGFtZW50byBBZG1pbmlzdHJhdGl2byBOYWNpb25hbCBkZSBFc3RhZMOtc3RpY2EuIFsqKmh0dHBzOi8vd3d3LmRhbmUuZ292LmNvL2luZGV4LnBocC9lc3RhZGlzdGljYXMtcG9yLXRlbWEvbWVyY2Fkby1sYWJvcmFsL21pY3JvbmVnb2Npb3MqKl0oaHR0cHM6Ly93d3cuZGFuZS5nb3YuY28vaW5kZXgucGhwL2VzdGFkaXN0aWNhcy1wb3ItdGVtYS9tZXJjYWRvLWxhYm9yYWwvbWljcm9uZWdvY2lvcykNCg0KLSAgIERBTkUuICgyMDI1KS4gKkVuY3Vlc3RhIGRlIE1pY3JvbmVnb2Npb3MgKEVNSUNST04pIEkgVHJpbWVzdHJlIGRlIDIwMjUqLiBEZXBhcnRhbWVudG8gQWRtaW5pc3RyYXRpdm8gTmFjaW9uYWwgZGUgRXN0YWTDrXN0aWNhLiBbKipodHRwczovL3d3dy5kYW5lLmdvdi5jby9maWxlcy9vcGVyYWNpb25lcy9FTUlDUk9OL2JvbC1FTUlDUk9OLUl0cmltMjAyNS5wZGYqKl0oaHR0cHM6Ly93d3cuZGFuZS5nb3YuY28vZmlsZXMvb3BlcmFjaW9uZXMvRU1JQ1JPTi9ib2wtRU1JQ1JPTi1JdHJpbTIwMjUucGRmKQ0KDQotICAgTWluaXRhYi4gKDIwMTkpLiAqQ8OzbW8gSW50ZXJwcmV0YXIgbG9zIFJlc3VsdGFkb3MgZGVsIEFuw6FsaXNpcyBkZSBSZWdyZXNpw7NuOiBWYWxvcmVzIHAgeSBDb2VmaWNpZW50ZXMqLiBCbG9nIE1pbml0YWIuIFsqKmh0dHBzOi8vYmxvZy5taW5pdGFiLmNvbS9lcy9ibG9nL2NvbW8taW50ZXJwcmV0YXItbG9zLXJlc3VsdGFkb3MtZGVsLWFuYWxpc2lzLWRlLXJlZ3Jlc2lvbi12YWxvcmVzLXAteS1jb2VmaWNpZW50ZXMqKl0oaHR0cHM6Ly9ibG9nLm1pbml0YWIuY29tL2VzL2Jsb2cvY29tby1pbnRlcnByZXRhci1sb3MtcmVzdWx0YWRvcy1kZWwtYW5hbGlzaXMtZGUtcmVncmVzaW9uLXZhbG9yZXMtcC15LWNvZWZpY2llbnRlcykNCg0KLSAgIEVuY3Vlc3RhLmNvbS4gKDIwMjUpLiAqUmVncmVzacOzbiBsaW5lYWw6IGRlZmluaWNpw7NuLCBhcGxpY2FjaW9uZXMgeSB2ZW50YWphcyouIFsqKmh0dHBzOi8vZW5jdWVzdGEuY29tL2Jsb2cvcmVncmVzaW9uLWxpbmVhbC8qKl0oaHR0cHM6Ly9lbmN1ZXN0YS5jb20vYmxvZy9yZWdyZXNpb24tbGluZWFsLylbKipmKipdKGh0dHBzOi8vaGFsd2ViLnVjM20uZXMvZXNwL1BlcnNvbmFsL3BlcnNvbmFzL2FncmFuZS9maWNoZXJvc19kb2NlbmNpYS9NZXRvZG9zUmVncmVzaW9uL3NsaWRlc190ZW1hNS5wZGYpDQoNCi0gICBVbml2ZXJzaWRhZCBkZSBHcmFuYWRhLiAqRWwgQW7DoWxpc2lzIGRlIGxhIFJlZ3Jlc2nDs24gYSB0cmF2w6lzIGRlIFNQU1MqLiBbKipodHRwOi8vd3d3LnVnci5lcy9cfmN1cnNwc3MvYXJjaGl2b3MvUmVncmVzaW9uL1Rlb3JpYVJlZ3Jlc2lvblNQU1MucGRmKipdKGh0dHA6Ly93d3cudWdyLmVzL35jdXJzcHNzL2FyY2hpdm9zL1JlZ3Jlc2lvbi9UZW9yaWFSZWdyZXNpb25TUFNTLnBkZikNCg0KLSAgIFVuaXZlcnNpZGFkIEljZXNpLiAoMjAxOSkuICo4IE11bHRpY29saW5lYWxpZGFkIFx8IEludHJvZHVjY2nDs24gYWwgTW9kZWxvIENsw6FzaWNvIGRlIFJlZ3Jlc2nDs24gTGluZWFsKi4gWyoqaHR0cHM6Ly93d3cuaWNlc2kuZWR1LmNvL2VkaXRvcmlhbC9tb2RlbG8tY2xhc2ljby13ZWIvTVVMVEkuaHRtbCoqXShodHRwczovL3d3dy5pY2VzaS5lZHUuY28vZWRpdG9yaWFsL21vZGVsby1jbGFzaWNvLXdlYi9NVUxUSS5odG1sKQ0KDQotICAgSGVybsOhbmRleiwgRi4gQi4gKDIwMjQpLiAqMTAgRGlhZ27Ds3N0aWNvcyBwYXJ0ZSBJIFx8IE1vZGVsb3MgZGUgUmVncmVzacOzbiBjb24gUiouIFsqKmh0dHBzOi8vZmhlcm5hbmIuZ2l0aHViLmlvL2xpYnJvX3JlZ3Jlc2lvbi9kaWFnMS5odG1sKipdKGh0dHBzOi8vZmhlcm5hbmIuZ2l0aHViLmlvL2xpYnJvX3JlZ3Jlc2lvbi9kaWFnMS5odG1sKQ0KDQotICAgR2FyesOzbiBDZWxpcywgRC4gQy4sICYgUHVlcnRhIEFyaWFzLCBKLiBSLiAoMjAyMikuICpNb2RlbG8gZXN0YWTDrXN0aWNvIGRlIHJlZ3Jlc2nDs24gbcO6bHRpcGxlIGNvbW8gZGV0ZXJtaW5hbnRlIGRlIGxhIHJlbnRhYmlsaWRhZCBkZSBsYSBlbXByZXNhIFByb2Nlc2Fkb3JhIGRlIEZydXRhcyB5IEhvcnRhbGl6YXMgUVVBTElTIFNBUyBkdXJhbnRlIGxvcyBwZXLDrW9kb3MgMjAxNi0yMDIxKi4gVW5pdmVyc2lkYWQgRUFGSVQuDQoNCi0gICBCYW5jYSBkZSBsYXMgT3BvcnR1bmlkYWRlcy4gKDIwMjQpLiAqUHJpbmNpcGFsZXMgcmVzdWx0YWRvcyBkZSBsYSBFbmN1ZXN0YSBkZSBNaWNyb25lZ29jaW9zKi4gWyoqaHR0cHM6Ly93d3cuYmFuY2FkZWxhc29wb3J0dW5pZGFkZXMuZ292LmNvL3NpdGVzL2RlZmF1bHQvZmlsZXMvMjAyNC0wMy9JTkZPUk1FJTIwRU1JQ1JPTiUyMCUyMHB1YmxpY2FkbyUyMERJQyUyMDIwMjMucGRmKipdKGh0dHBzOi8vd3d3LmJhbmNhZGVsYXNvcG9ydHVuaWRhZGVzLmdvdi5jby9zaXRlcy9kZWZhdWx0L2ZpbGVzLzIwMjQtMDMvSU5GT1JNRSUyMEVNSUNST04lMjAlMjBwdWJsaWNhZG8lMjBESUMlMjAyMDIzLnBkZikNCg0KLSAgIFBvbnRpZmljaWEgVW5pdmVyc2lkYWQgSmF2ZXJpYW5hIENhbGkuICpGaW5hbmNpYWNpw7NuIGRlIGxhcyBtaWNyb2VtcHJlc2FzKi4gWyoqaHR0cHM6Ly92aXRlbGEuamF2ZXJpYW5hY2FsaS5lZHUuY28vYml0c3RyZWFtcy9kN2U0OGRmZC1kMjRkLTQwYWYtOGExZC05ZWNiNjY5MTAqKl0oaHR0cHM6Ly92aXRlbGEuamF2ZXJpYW5hY2FsaS5lZHUuY28vYml0c3RyZWFtcy9kN2U0OGRmZC1kMjRkLTQwYWYtOGExZC05ZWNiNjY5MTApDQoNCi0gICBUb3JyZXMtT250YW5lZGEsIFcuLCAmIE5laXJhLUhpbm9zdHJvemEsIEMuICgyMDIyKS4gQW7DoWxpc2lzIGRlIGxvcyBmYWN0b3JlcyBxdWUgaW1waWRlbiBlbCBjcmVjaW1pZW50byBtaWNyb2VtcHJlc2FyaWFsLCBtZWRpYW50ZSB1biBBbsOhbGlzaXMgZGUgQ29ycmVzcG9uZGVuY2lhIE3Dumx0aXBsZTogRXN0dWRpbyBkZSBjYXNvIExvamEgLSBFY3VhZG9yLiAqUmV2aXN0YSBFY29uw7NtaWNhKiwgMTAoMikuDQoNCi0gICBUb2Jhci1DcnV6LCBKLiBTLiwgJiBSdWl6LU1hcnTDrW5leiwgQy4gQS4gKDIwMjUpLiAqRm9ybWFsaXphY2nDs24geSBjcmVjaW1pZW50byBkZSBtaWNyb25lZ29jaW9zIGVuIENvbG9tYmlhOiByZWxhY2nDs24gY29uIGVsIGFjY2VzbyBhbCBjcsOpZGl0byBkZXNkZSB1bmEgcGVyc3BlY3RpdmEgZm9ybWFsL2luZm9ybWFsLCBkZSBnw6luZXJvIHkgcmVnaW9uYWwqLiBCYW5jbyBkZSBsYSBSZXDDumJsaWNhLg0KDQotICAgTWluQ0lULiAoMjAyMykuICpMYXMgbWljcm9lbXByZXNhcyBmb3J0YWxlY2VuIGVsIHRlamlkbyBlbXByZXNhcmlhbCouIE1pbmlzdGVyaW8gZGUgQ29tZXJjaW8sIEluZHVzdHJpYSB5IFR1cmlzbW8uIFsqKmh0dHBzOi8vd3d3Lm1pbmNpdC5nb3YuY28vcHJlbnNhL2ZvdG8tbm90aWNpYXMvbWljcm9lbXByZXNhcy1mb3J0YWxlY2VuLWVsLXRlamlkby1lbXByZXNhcmlhbCoqXShodHRwczovL3d3dy5taW5jaXQuZ292LmNvL3ByZW5zYS9mb3RvLW5vdGljaWFzL21pY3JvZW1wcmVzYXMtZm9ydGFsZWNlbi1lbC10ZWppZG8tZW1wcmVzYXJpYWwpDQoNCi0gICBMaW5rZWRJbi4gKDIwMjQpLiAqwr9Dw7NtbyBpZGVudGlmaWNhIGxhcyB2YXJpYWJsZXMgaW5kZXBlbmRpZW50ZXMgeSBkZXBlbmRpZW50ZXMgZW4gc3UgZXN0dWRpbz8qIFsqKmh0dHBzOi8vZXMubGlua2VkaW4uY29tL2FkdmljZS8wL2hvdy1kby15b3UtaWRlbnRpZnktaW5kZXBlbmRlbnQtZGVwZW5kZW50LXZhcmlhYmxlcy1kbHU1YyoqXShodHRwczovL2VzLmxpbmtlZGluLmNvbS9hZHZpY2UvMC9ob3ctZG8teW91LWlkZW50aWZ5LWluZGVwZW5kZW50LWRlcGVuZGVudC12YXJpYWJsZXMtZGx1NWMpDQoNCi0gICBVbml2ZXJzaWRhZCBkZSBWYWxlbmNpYS4gKk1vZGVsbyBkZSByZWdyZXNpw7NuIGxpbmVhbCBtw7psdGlwbGUqLiBbKipodHRwczovL3d3dy51di5lcy9tb2x0b21sL21hdGVyaWFsL01vZGVsbyUyMGRlJTIwcmVncmVzaW9uJTIwbGluZWFsJTIwbXVsdGlwbGVhLnBkZioqXShodHRwczovL3d3dy51di5lcy9tb2x0b21sL21hdGVyaWFsL01vZGVsbyUyMGRlJTIwcmVncmVzaW9uJTIwbGluZWFsJTIwbXVsdGlwbGVhLnBkZikNCg0KLSAgIERBTkUuICgyMDIzKS4gKk1ldG9kb2xvZ8OtYSBHZW5lcmFsIC0gRW5jdWVzdGEgZGUgTWljcm9uZWdvY2lvcyouIERTTy1FTUlDUk9OLU1FVC0wMDEuIFsqKmh0dHBzOi8vd3d3LmRhbmUuZ292LmNvL2ZpbGVzL29wZXJhY2lvbmVzL0VNSUNST04vRFNPLUVNSUNST04tTUVULTAwMV92MS5wZGYqKl0oaHR0cHM6Ly93d3cuZGFuZS5nb3YuY28vZmlsZXMvb3BlcmFjaW9uZXMvRU1JQ1JPTi9EU08tRU1JQ1JPTi1NRVQtMDAxX3YxLnBkZikNCg0KLSAgIEVqZW1wbG9zLmNvLiAoMjAyNCkuICoyNSBFamVtcGxvcyBkZSBWYXJpYWJsZXMgRGVwZW5kaWVudGVzIGUgSW5kZXBlbmRpZW50ZXMqLiBbKipodHRwczovL3d3dy5lamVtcGxvcy5jby92YXJpYWJsZXMtZGVwZW5kaWVudGVzLWUtaW5kZXBlbmRpZW50ZXMvKipdKGh0dHBzOi8vd3d3LmVqZW1wbG9zLmNvL3ZhcmlhYmxlcy1kZXBlbmRpZW50ZXMtZS1pbmRlcGVuZGllbnRlcy8pDQo6OjoNCjo6OjoNCg==