Presentación

En este breve informe se presentan una serie de indicadores sociales, desagregados por sexo, calculados con bases públicas de la EPH (Encuesta Permanente de Hogares - INDEC - Argentina). El objetivo de esta presentación es visibilizar la desigualdad de género en la composición del mercado de trabajo, la percepción de ingresos, entre otras cuestiones, en un formato amigable.
Quienes estén interesados en reproducir los cálculos necesarios para obtener la información que aquí se presenta, pueden descargar la sintaxis en lenguaje R.2
Todos los datos refieren a los 31 aglomerados urbanos relevados en la EPH y en esta ocasión corresponden al 3er trimestre de 2017.


Composición del Mercado de Trabajo

Inserción laboral

En primer lugar se presentan algunos indicadores clásicos (utilizados a nivel internacional) que caracterizan la composición del mercado de trabajo, desagregados según el sexo.
La tasa de Actividad es la relación entre aquellos que participan en el mercado de trabajo (ya sea como ocupados o como desocupados) y la población total. En este caso, dicha tasa es ampliamente mayor entre los varones (la diferencia supera los 20 puntos porcentuales). Esto sucede porque existe una importante porción de las mujeres en edad laboral que dedican su tiempo a realizar tareas domésticas hacia el interior de sus hogares en lugar tener una actividad en el mercado de trabajo.
La tasa de Empleo exhibe la proporción de ocupados entre la población total. La diferencia entre varones y mujeres en este caso también supera los 20 puntos, denotando el mismo fenómeno anteriormente mencionado.
A diferencia de las tasas anteriores, las tasas de desocupación y subocupación expresan la proporción que estos grupos representan en la Población Económicamente Activa. En este caso, ambas tasas son mayores para las mujeres que para los varones. Esto expresa que, incluso siendo minoría en el mercado de trabajo, las mujeres tienen más dificultades para conseguir trabajo y/o para trabajar una jornada completa.
En su conjunto, estos cuatro indicadores nos presentan una primera imagen de la masculinización del mercado de trabajo argentino.

Gráfico 1. Población de 14 años y más. Principales indicadores de Mercado de Trabajo por sexo. Total de aglomerados urbanos. 3er trimestre 2017.


Empleo no registrado

A su vez, las ocupadas asalariadas están expuestas a una tasa de empleo no registrado mayor que la de sus compañeros varones. Hay un 36.5% de las asalariadas a quienes sus empleadores no inscriben en la seguridad social, mientras que para los asalariados varones esta tasa de no registro es del 32.8%.

Cuadro 2. Ocupadas/os asalariadas/os. Tasas de empleo no registrado por sexo. Total de aglomerados urbanos. 3er trimestre 2017.

Sexo Proporción de no Registrados
Mujeres 36,5
Varones 32,8


Acceso a Cargos jerárquicos

Además de tener una participación más restringida en el mercado de trabajo, las ocupadas encuentran más obstáculos para acceder a cargos jerárquicos: mientras que un 7.8% de los ocupados varones tienen cargos de dirección o son jefes, sólo un 4.7% de las ocupadas ejercen puestos de esas características. Al mismo tiempo, las ocupadas se encuentran más concentradas en los puestos asalariados, es decir, en relación de dependencia.

Gráfico 3. Ocupadas/os. Mujeres y Varones según Jerarquía de la ocupación, en porcentaje (escalas libres). Total de aglomerados urbanos. 3er trimestre 2017.


Brechas de ingresos mensuales

A continuación se hace foco en las diferencias de montos de ingresos que perciben los varones y las mujeres. Estos ingresos pueden provenir de diversas fuentes y al mismo tiempo pueden desagregarse según características adicionales de las personas o los puestos que desempeñan. Incluso pueden distinguirse los ingresos mensuales y los ingresos horarios.
Para dimensionar estas diferencias hacemos uso del concepto de “brecha”, que en este caso se calcula como la diferencia entre los ingresos promedios de los varones y las mujeres, expresada en términos del ingreso más alto. Es decir, que puede leerse como “las mujeres perciben ingresos que, en promedio, son un …% menores que los de los varones”.


Brecha de ingresos totales mensuales

Observando los ingresos totales individuales de toda la población de 14 años y más, se observa que la brecha entre varones y mujeres en este caso supera los 30 puntos porcentuales. Es decir, contemplando todos los ingresos que se perciben, sean de origen laboral o no laboral (como jubilaciones y pensiones, cuotas alimentarias, subsidios, etc.), las mujeres perciben ingresos que, en promedio, son un 33.5% menores que los de los varones.

Cuadro 4. Población perceptora de ingresos de 14 años y más. Media de ingresos totales individuales y brecha de ingresos (en porcentaje) por sexo. Total de aglomerados urbanos. 3er trimestre 2017.

Media de ingresos de las Mujeres Media de ingresos de los Varones Brecha del Ingreso Total Individual
$8.978,30 $13.498,30 33,5


Brecha de ingresos mensuales de las/os ocupadas/os

Simultáneamente, en el mercado de trabajo, las mujeres ganan en promedio un 25,6% menos que los varones ($11.085 vs. $14.898 ). Estos datos corresponden a la totalidad de ocupadas/os, cualquiera sea su categoría ocupacional, calificación o jerarquía, y observando en este caso los ingresos provenientes de la ocupación principal.

Cuadro 5. Ocupadas/os. Media de ingresos de la ocupación principal y brecha de ingresos (en porcentaje) por sexo. Total de aglomerados urbanos. 3er trimestre 2017.

Media de ingresos de las Mujeres Media de ingresos de los Varones Brecha de ingresos de la ocupación principal
$11.085,00 $14.897,90 25,6


Brecha de ingresos mensuales entre asalariadas/os no registrados

Anteriormente se observó que las asalariadas están expuestas a una tasa de no registro más alta que la que presentan los asalariados varones. Pero además, las asalariadas de este sector, el no registrado, ganan en promedio un 37.1% menos que sus pares. Es decir que la brecha de ingresos entre sexos se amplía cuando vemos a aquellas/os asalariadas/os que tienen peores condiciones de trabajo.

Cuadro 6. Ocupadas/os Asalariadas/os no registrados. Media de ingresos de la ocupación principal y brecha de ingresos (en porcentaje) por sexo. Total de aglomerados urbanos. 3er trimestre 2017.

Media de ingresos de las Mujeres Media de ingresos de los Varones Brecha de ingresos de la ocupación principal
$5.779,10 $9.180,70 37,1


Brecha de ingresos mensuales por calificación del puesto de trabajo

La brecha de ingresos mensuales de las/os ocupadas/os se mantiene incluso a iguales niveles de calificación del puesto de trabajo. Por ejemplo, mientras que los varones que trabajan en ocupaciones profesionales tienen un ingreso medio de $28.556, las mujeres ocupadas en ese mismo segmento perciben un ingreso medio de $21.108, es decir, un 26.1% menos que los varones. Entonces, para las mujeres que se desempeñan como profesionales, la brecha es más alta que para el total de ocupadas/os.
En los puestos no calificados, los varones ganan $9.531 en promedio, al tiempo que las mujeres ganan alrededor de $6.298. Esta brecha es del 33.9%, siendo también superior a la brecha promedio del mercado laboral.

Gráfico 7. Ocupadas/os. Media de ingresos mensuales de la ocupación principal, por sexo y calificación ocupacional. Total de aglomerados urbanos. 3er trimestre 2017.


Brecha de ingresos mensuales por nivel educativo

Las mujeres ocupadas están en promedio más formadas que los varones que participan en el mercado de trabajo (hay una mayor proporción de mujeres con niveles educativos más altos). Sin embargo, a igual nivel educativo, los ingresos laborales de las mujeres trabajadoras son inferiores a los de los varones. Esta diferencia de ingresos oscila entre el 31.5% para las de nivel universitario/superior, y el 39.6% para las de nivel primario.

Cuadro 8.1. Ocupadas/os. Mujeres y Varones según nivel educativo (Porcentaje por columnas). Total de aglomerados urbanos. 3er trimestre 2017.

Nivel Educativo % de Mujeres % de Varones
Sin Instrucción 0,4 0,5
Primaria 25,3 39,3
Secundaria 44,8 42,2
Superior 29,5 18,0

Gráfico 8.2. Ocupadas/os. Media de ingresos mensuales de la ocupación principal, por sexo y nivel educativo. Total de aglomerados urbanos. 3er trimestre 2017.


Brechas de ingresos horarios

Brecha de ingresos horarios por calificación del puesto de trabajo

Si en lugar de comparar ingresos mensuales tomamos el ingreso por hora de las personas, la historia es un poco diferente. Al recalcular el gráfico 7 (Calificación del puesto), la brecha disminuye fuertemente, siendo incluso negativa en el caso de los técnicos y no calificados. En el caso de los puestos profesionales y operativos se reduce a 6.5% y 3.7% respectivamente.

Gráfico 9. Ocupadas/os. Media de ingresos horarios de la ocupación principal, por sexo y calificación ocupacional. Total de aglomerados urbanos. 3er trimestre 2017.


Brecha de ingresos horarios por nivel educativo

Si esos mismos ingresos horarios de las/os ocupadas/os se comparan según su nivel educativo, la brecha se mantiene para todos los niveles excepto para quienes poseen un nivel educativo primario. En este caso la brecha es de 4.2% a favor de las mujeres. Para el resto de los niveles educativos, las mujeres perciben ingresos horarios menores que los varones. Esta diferencia es de entre un 13.9% y 14.9% a favor de los ocupados varones. Al igual que en el gráfico 9, el gráfico 10 muestra que la brecha se reduce fuertemente, aunque no en la misma magnitud que al analizar la calificación ocupacional.

Gráfico 10. Ocupadas/os. Media de ingresos horarios de la ocupación principal, por sexo y nivel educativo. Total de aglomerados urbanos. 3er trimestre 2017.

Al incorporar la extensión de las jornadas laborales al análisis, la magnitud de la brecha disminuye notablemente. De aquí se desprende que, en promedio, las mujeres trabajan menos horas que los varones, y esto explica una parte importante de la brecha de ingresos mensuales. A su vez, la disminución es menor al observar el nivel educativo, por lo que existe un factor de la desigualdad de género en términos de ingresos laborales que opera sobre una dimensión y no sobre la otra. Por ejemplo, podría haber una mayor sobrecalificación en mujeres que en varones. Al margen de esto último, cabe cuestionarse respecto al porqué de la diferencia de horas trabajadas por mujeres y por hombres. ¿Existe una falta de voluntad de las mujeres para trabajar? ¿son más holgazanas? ¿o en realidad existe otro motivo por el cual las mujeres deben relegar sus trabajos, del cual los hombres están exentos?


Distribución de las tareas del hogar

Generalmente, las mujeres deben además dedicar su tiempo al trabajo doméstico. Es decir, realizan tareas de cuidado y reproducción para otros miembros de su hogar. Este trabajo no se comercia en el mercado y por tanto no es remunerado. A modo ilustrativo, se señala que: del total de personas que realizan las tareas de la casa, un 76% son mujeres y un 24% son varones. A esto se suma el hecho de que prácticamente todas las personas que se dedican al servicio doméstico (es decir, que sí venden este trabajo en el mercado) son mujeres.
Este reparto desigual de las tareas domésticas entre varones y mujeres puede asociarse a las desigualdades vistas en la composición del mercado de trabajo y la diferencia de la extensión de la jornada laboral.

Gráfico 11. Personas que realizan las tareas domésticas del hogar, según sexo (no incluye trabajadoras de servicio doméstico). Total de aglomerados urbanos. 3er trimestre 2017.


Distribución del ingreso

Por último, podemos ver el efecto de estas diferencias en la distribución de los ingresos. Separando a la población en deciles (diez grupos de igual tamaño ordenados de acuerdo a los niveles de los ingresos), puede verse que los deciles más bajos de ingresos están compuestos mayoritariamente por mujeres. Paralelamente, los deciles de mayores ingresos se componen mayoritariamente por varones. Los estratos de menores ingresos están entonces feminizados, al tiempo que los estratos de mayores ingresos se encuentran masculinizados.
En este caso nos referimos a los ingresos totales individuales, es decir, considerando todo tipo de fuente de ingresos.

Gráfico 12. Población perceptora de ingresos. Composición según sexo de los deciles de ingresos totales individuales. Total de aglomerados urbanos. 3er trimestre 2017.


  1. Soy estudiante avanzada de la carrera de Economía (FCE-UBA). Me dedico al análisis de datos y la realización de estudios metodológicos en el área de Pobreza e Ingresos de la Dirección de la Encuesta Permanente de Hogares (EPH-INDEC), aunque este informe lo realizo a título personal. También soy colaboradora en Economía Femini(s)ta y soy parte de RLadies Buenos Aires. Contacto: natsumi.shokida@gmail.com

  2. Presionando en Code > Download Rmd se accede a la descarga de la sintaxis completa de este informe, que incluye la descarga automática de las bases de la EPH utilizadas, una serie de funciones útiles y la elaboración de cuadros y gráficos con el lenguaje R.

LS0tCnRpdGxlOiAiT2JzZXJ2YXRvcmlvIGRlIGxhIGRlc2lndWFsZGFkIGRlIGfDqW5lcm8iCnN1YnRpdGxlOiAiRW5jdWVzdGEgUGVybWFuZW50ZSBkZSBIb2dhcmVzLiAzZXIgdHJpbWVzdHJlIGRlIDIwMTcuIgphdXRob3I6ICJOYXRzdW1pIFMuIFNob2tpZGFeWyBfU295IGVzdHVkaWFudGUgYXZhbnphZGEgZGUgbGEgY2FycmVyYSBkZSBFY29ub23DrWEgKEZDRS1VQkEpLiBNZSBkZWRpY28gYWwgYW7DoWxpc2lzIGRlIGRhdG9zIHkgbGEgcmVhbGl6YWNpw7NuIGRlIGVzdHVkaW9zIG1ldG9kb2zDs2dpY29zIGVuIGVsIMOhcmVhIGRlIFBvYnJlemEgZSBJbmdyZXNvcyBkZSBsYSBEaXJlY2Npw7NuIGRlIGxhIEVuY3Vlc3RhIFBlcm1hbmVudGUgZGUgSG9nYXJlcyAoRVBILUlOREVDKSwgYXVucXVlIGVzdGUgaW5mb3JtZSBsbyByZWFsaXpvIGEgdMOtdHVsbyBwZXJzb25hbC4gVGFtYmnDqW4gc295IGNvbGFib3JhZG9yYSBlbl8gW0Vjb25vbcOtYSBGZW1pbmkocyl0YV0oaHR0cDovL2Vjb25vbWlhZmVtaW5pdGEuY29tLykgX3kgc295IHBhcnRlIGRlXyBbUkxhZGllcyBCdWVub3MgQWlyZXNdKGh0dHBzOi8vd3d3Lm1lZXR1cC5jb20vZXMvcmxhZGllcy1idWVub3MtYWlyZXMvKS4gX0NvbnRhY3RvXzogbmF0c3VtaS5zaG9raWRhQGdtYWlsLmNvbV0iCmRhdGU6ICJNYXlvIGRlIDIwMTgiCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICBkZXB0aDogNAotLS0KICAgIAo8YnI+CiAgICAgCiMjIFByZXNlbnRhY2nDs24KCkVuIGVzdGUgYnJldmUgaW5mb3JtZSBzZSBwcmVzZW50YW4gdW5hIHNlcmllIGRlIGluZGljYWRvcmVzIHNvY2lhbGVzLCBkZXNhZ3JlZ2Fkb3MgcG9yIHNleG8sIGNhbGN1bGFkb3MgY29uIGJhc2VzIHDDumJsaWNhcyBkZSBsYSBFUEggKEVuY3Vlc3RhIFBlcm1hbmVudGUgZGUgSG9nYXJlcyAtIElOREVDIC0gQXJnZW50aW5hKS4gRWwgb2JqZXRpdm8gZGUgZXN0YSBwcmVzZW50YWNpw7NuIGVzIHZpc2liaWxpemFyIGxhIGRlc2lndWFsZGFkIGRlIGfDqW5lcm8gZW4gbGEgY29tcG9zaWNpw7NuIGRlbCBtZXJjYWRvIGRlIHRyYWJham8sIGxhIHBlcmNlcGNpw7NuIGRlIGluZ3Jlc29zLCBlbnRyZSBvdHJhcyBjdWVzdGlvbmVzLCBlbiB1biBmb3JtYXRvIGFtaWdhYmxlLiAgICAgICAgClF1aWVuZXMgZXN0w6luIGludGVyZXNhZG9zIGVuIHJlcHJvZHVjaXIgbG9zIGPDoWxjdWxvcyBuZWNlc2FyaW9zIHBhcmEgb2J0ZW5lciBsYSBpbmZvcm1hY2nDs24gcXVlIGFxdcOtIHNlIHByZXNlbnRhLCBwdWVkZW4gZGVzY2FyZ2FyIGxhIHNpbnRheGlzIGVuIGxlbmd1YWplIFIuW14xXSAgICAgICAgICAgClRvZG9zIGxvcyBkYXRvcyByZWZpZXJlbiBhIGxvcyAzMSBhZ2xvbWVyYWRvcyB1cmJhbm9zIHJlbGV2YWRvcyBlbiBsYSBFUEggeSBlbiBlc3RhIG9jYXNpw7NuIGNvcnJlc3BvbmRlbiBhbCAzZXIgdHJpbWVzdHJlIGRlIDIwMTcuIAoKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMgU2UgbGltcGlhIGxhIG1lbW9yaWEgeSBzZSBjYXJnYW4gbGlicmVyw61hcyDDunRpbGVzCnJtKGxpc3QgPSBscygpKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShodHRyKQpsaWJyYXJ5KHN0cmluZ3IpCmxpYnJhcnkoeGxzeCkKbGlicmFyeShoYXZlbikKbGlicmFyeShyZWFkeGwpCmxpYnJhcnkoZ2d0aGVtZXMpCmxpYnJhcnkoc2NhbGVzKQpsaWJyYXJ5KGtuaXRyKQpgYGAKCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIEZ1bmNpw7NuIHF1ZSBkZXNjYXJnYSBiYXNlcyBkZSBsYSBww6FnaW5hIGRlIGluZGVjLCBzZWfDum4gZWwgbm9tYnJlIHF1ZSBsZSBwdXNpZXJvbiBhbCB6aXAuCmRlc2NhcmdhX3VsdGltYV9iYXNlIDwtIGZ1bmN0aW9uKGJhc2UgPSAnRVBIX3VzdV8yX1RyaW1fMjAxN190eHQuemlwJywgaW5kaXZpZHVhbCA9IEZBTFNFLCBob2dhciA9IEZBTFNFKXsKICAKICBsaW5rID0gcGFzdGUwKCdodHRwczovL3d3dy5pbmRlYy5nb2IuYXIvZnRwL2N1YWRyb3MvbWVudXN1cGVyaW9yL2VwaC8nLCBiYXNlKQogIHRlbXAgPC0gdGVtcGZpbGUoKQogIGRvd25sb2FkLmZpbGUobGluayx0ZW1wKQogIG5vbWJyZXMgPC0gYXNfdmVjdG9yKHVuemlwKHRlbXAsIGxpc3QgPSBUUlVFKVsnTmFtZSddKQogIGJhc2VfaG9nYXJfbmFtZSA8LSBub21icmVzW3N0cl9kZXRlY3Qobm9tYnJlcywgJ2hvZycpXQogIGJhc2VfaW5kaXZpZHVhbF9uYW1lIDwtIG5vbWJyZXNbc3RyX2RldGVjdChub21icmVzLCAnaW5kJyldCiAgCiAgaWYgKGluZGl2aWR1YWwpIHsKICAgIGJhc2VfaW5kaXZpZHVhbCA8PC0gcmVhZC50YWJsZSh1bnoodGVtcCxiYXNlX2luZGl2aWR1YWxfbmFtZSksIHNlcD0iOyIsIGRlYz0iLCIsIGhlYWRlciA9IFRSVUUsIGZpbGwgPSBUUlVFKQogIH0KICAKICBpZiAoaG9nYXIpIHsKICAgIGJhc2VfaG9nYXIgPDwtIHJlYWQudGFibGUodW56KHRlbXAsYmFzZV9ob2dhcl9uYW1lKSwgc2VwPSI7IiwgZGVjPSIsIiwgaGVhZGVyID0gVFJVRSwgZmlsbCA9IFRSVUUpIAogIH0KICAKICB1bmxpbmsodGVtcCkKfQoKIyBGdW5jaW9uIGRlIHJlZG9uZGVvIHBhcmEgcHJlc2VudGFjacOzbiAocXVlZGEgY29tbyBjaGFyYWN0ZXIpCmZvcm1hdG9fcG9yYyA8LSBmdW5jdGlvbihudW1lcm8sIGRlYyA9IDEpewogIGZvcm1hdChyb3VuZChudW1lcm8sIGRpZ2l0cyA9IGRlYyksIG5zbWFsbCA9IGRlYywgZGVjaW1hbC5tYXJrID0gIiwiKQp9Cgpmb3JtYXRvX3Blc29zIDwtIGZ1bmN0aW9uKG51bWVybywgZGVjID0gMil7CiAgcGFzdGUwKCIkIiwgZm9ybWF0KHJvdW5kKG51bWVybywgZGlnaXRzID0gZGVjKSwgbnNtYWxsID0gZGVjLCBiaWcubWFyayA9ICIuIiwgZGVjaW1hbC5tYXJrID0gIiwiKSkKfQoKZm9ybWF0b19jYW50aWRhZCA8LSBmdW5jdGlvbihudW1lcm8sIGRlYyA9IDApewogIGZvcm1hdChyb3VuZChudW1lcm8sIGRpZ2l0cyA9IGRlYyksIG5zbWFsbCA9IGRlYywgYmlnLm1hcmsgPSAiLiIsIGRlY2ltYWwubWFyayA9ICIsIikKfQoKYGBgCgpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyBTZSBsZXZhbnRhbiBsYXMgYmFzZXMgdXN1YXJpYXMgZGVsIDNlciB0cmltZXN0cmUgZGUgMjAxNyBkZSBsYSBFUEgKZGVzY2FyZ2FfdWx0aW1hX2Jhc2UoYmFzZSA9ICJFUEhfdXN1XzNfVHJpbV8yMDE3X3R4dC56aXAiLCBpbmRpdmlkdWFsID0gVFJVRSkKZGVzY2FyZ2FfdWx0aW1hX2Jhc2UoYmFzZSA9ICJFUEhfdXN1XzNfVHJpbV8yMDE3X3R4dC56aXAiLCBob2dhciA9IFRSVUUpCmBgYAoKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMgTW9kaWZpY2FjaW9uZXMgZW4gbGEgYmFzZQpiYXNlX2luZGl2aWR1YWwgPC0gYmFzZV9pbmRpdmlkdWFsICU+JSAKICBtdXRhdGUoU2V4byA9IGFzLmNoYXJhY3RlcihDSDA0KSwKICAgICAgICAgU2V4byA9IGNhc2Vfd2hlbihTZXhvPT0iMSIgfiAiVmFyb25lcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgU2V4bz09IjIiIH4gIk11amVyZXMiKSwKICAgICAgICAgUFAwNERfQ09EID0gYXMuY2hhcmFjdGVyKFBQMDREX0NPRCksCiAgICAgICAgIFBQMDREX0NPRCA9IGNhc2Vfd2hlbihuY2hhcihQUDA0RF9DT0QpID09IDUgfiBQUDA0RF9DT0QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY2hhcihQUDA0RF9DT0QpID09IDQgfiBwYXN0ZTAoIjAiLCBQUDA0RF9DT0QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNoYXIoUFAwNERfQ09EKSA9PSAzIH4gcGFzdGUwKCIwMCIsIFBQMDREX0NPRCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY2hhcihQUDA0RF9DT0QpID09IDIgfiBwYXN0ZTAoIjAwMCIsIFBQMDREX0NPRCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY2hhcihQUDA0RF9DT0QpID09IDEgfiBwYXN0ZTAoIjAwMDAiLCBQUDA0RF9DT0QpKSwKICAgICAgICAgQ0FMSUZJQ0FDSU9OID0gc3Vic3RyKFBQMDREX0NPRCwgNSwgNSksCiAgICAgICAgIENBTElGSUNBQ0lPTiA9IGNhc2Vfd2hlbihDQUxJRklDQUNJT049PSIxIiB+ICJQcm9mZXNpb25hbGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBTElGSUNBQ0lPTj09IjIiIH4gIlTDqWNuaWNvcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQUxJRklDQUNJT049PSIzIiB+ICJPcGVyYXRpdm9zIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBTElGSUNBQ0lPTj09IjQiIH4gIk5vIENhbGlmaWNhZG9zIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiAiMCIpLAogICAgICAgICBDQUxJRklDQUNJT04gPSBmYWN0b3IoQ0FMSUZJQ0FDSU9OLCBjKCJQcm9mZXNpb25hbGVzIiwgIlTDqWNuaWNvcyIsICJPcGVyYXRpdm9zIiwgIk5vIENhbGlmaWNhZG9zIikpLAogICAgICAgICBKRVJBUlFVSUEgPSBzdWJzdHIoUFAwNERfQ09ELCAzLCAzKSwKICAgICAgICAgSkVSQVJRVUlBID0gY2FzZV93aGVuKEpFUkFSUVVJQT09IjAiIH4gIkRpcmVjY2nDs24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkVSQVJRVUlBPT0iMSIgfiAiQ3VlbnRhcHJvcGlhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpFUkFSUVVJQT09IjIiIH4gIkplZmVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpFUkFSUVVJQT09IjMiIH4gIlRyYWJhamFkb3JlcyBBc2FsYXJpYWRvcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gIjAiKSwKICAgICAgICAgSkVSQVJRVUlBID0gZmFjdG9yKEpFUkFSUVVJQSwgYygiSmVmZXMiLCAiRGlyZWNjacOzbiIsICJUcmFiYWphZG9yZXMgQXNhbGFyaWFkb3MiLCAiQ3VlbnRhcHJvcGlhIikpLAogICAgICAgICBOSVZFTF9FRFVDQVRJVk8gPSBjYXNlX3doZW4oTklWRUxfRUQ9PTEgfiAiU2luIGluc3RydWNjacOzbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSVZFTF9FRD09MiB+ICJQcmltYXJpYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSVZFTF9FRD09MyB+ICJQcmltYXJpYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSVZFTF9FRD09NCB+ICJTZWN1bmRhcmlhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JVkVMX0VEPT01IH4gIlNlY3VuZGFyaWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTklWRUxfRUQ9PTYgfiAiU3VwZXJpb3IiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTklWRUxfRUQ9PTcgfiAiU2luIEluc3RydWNjacOzbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSVZFTF9FRD09OSB+ICJOUy9OUiIpLAogICAgICAgICBOSVZFTF9FRFVDQVRJVk8gPSBmYWN0b3IoTklWRUxfRURVQ0FUSVZPLCBsZXZlbHMgPSBjKCJTaW4gSW5zdHJ1Y2Npw7NuIiwiUHJpbWFyaWEiLCAiU2VjdW5kYXJpYSIsICJTdXBlcmlvciIpKSkKCmNvbG9yZXMgPSBjKCIjYWExNjVhIiwiIzE2YWE2NiIpCmBgYAoKPGJyPgoKIyMgQ29tcG9zaWNpw7NuIGRlbCBNZXJjYWRvIGRlIFRyYWJham8KCiMjIEluc2VyY2nDs24gbGFib3JhbAoKRW4gcHJpbWVyIGx1Z2FyIHNlIHByZXNlbnRhbiBhbGd1bm9zIGluZGljYWRvcmVzIGNsw6FzaWNvcyAodXRpbGl6YWRvcyBhIG5pdmVsIGludGVybmFjaW9uYWwpIHF1ZSBjYXJhY3Rlcml6YW4gbGEgY29tcG9zaWNpw7NuIGRlbCBtZXJjYWRvIGRlIHRyYWJham8sIGRlc2FncmVnYWRvcyBzZWfDum4gZWwgc2V4by4gICAgICAKTGEgdGFzYSBkZSBBY3RpdmlkYWQgZXMgbGEgcmVsYWNpw7NuIGVudHJlIGFxdWVsbG9zIHF1ZSBwYXJ0aWNpcGFuIGVuIGVsIG1lcmNhZG8gZGUgdHJhYmFqbyAoeWEgc2VhIGNvbW8gb2N1cGFkb3MgbyBjb21vIGRlc29jdXBhZG9zKSB5IGxhIHBvYmxhY2nDs24gdG90YWwuIEVuIGVzdGUgY2FzbywgZGljaGEgdGFzYSBlcyBhbXBsaWFtZW50ZSBtYXlvciBlbnRyZSBsb3MgdmFyb25lcyAobGEgZGlmZXJlbmNpYSBzdXBlcmEgbG9zIDIwIHB1bnRvcyBwb3JjZW50dWFsZXMpLiBFc3RvIHN1Y2VkZSBwb3JxdWUgZXhpc3RlIHVuYSBpbXBvcnRhbnRlIHBvcmNpw7NuIGRlIGxhcyBtdWplcmVzIGVuIGVkYWQgbGFib3JhbCBxdWUgZGVkaWNhbiBzdSB0aWVtcG8gYSByZWFsaXphciB0YXJlYXMgZG9tw6lzdGljYXMgaGFjaWEgZWwgaW50ZXJpb3IgZGUgc3VzIGhvZ2FyZXMgZW4gbHVnYXIgdGVuZXIgdW5hIGFjdGl2aWRhZCBlbiBlbCBtZXJjYWRvIGRlIHRyYWJham8uICAgICAgICAgICAKTGEgdGFzYSBkZSBFbXBsZW8gZXhoaWJlIGxhIHByb3BvcmNpw7NuIGRlIG9jdXBhZG9zIGVudHJlIGxhIHBvYmxhY2nDs24gdG90YWwuIExhIGRpZmVyZW5jaWEgZW50cmUgdmFyb25lcyB5IG11amVyZXMgZW4gZXN0ZSBjYXNvIHRhbWJpw6luIHN1cGVyYSBsb3MgMjAgcHVudG9zLCBkZW5vdGFuZG8gZWwgbWlzbW8gZmVuw7NtZW5vIGFudGVyaW9ybWVudGUgbWVuY2lvbmFkby4gICAKQSBkaWZlcmVuY2lhIGRlIGxhcyB0YXNhcyBhbnRlcmlvcmVzLCBsYXMgdGFzYXMgZGUgZGVzb2N1cGFjacOzbiB5IHN1Ym9jdXBhY2nDs24gZXhwcmVzYW4gbGEgcHJvcG9yY2nDs24gcXVlIGVzdG9zIGdydXBvcyByZXByZXNlbnRhbiBlbiBsYSBQb2JsYWNpw7NuIEVjb27Ds21pY2FtZW50ZSBBY3RpdmEuIEVuIGVzdGUgY2FzbywgYW1iYXMgdGFzYXMgc29uIG1heW9yZXMgcGFyYSBsYXMgbXVqZXJlcyBxdWUgcGFyYSBsb3MgdmFyb25lcy4gRXN0byBleHByZXNhIHF1ZSwgaW5jbHVzbyBzaWVuZG8gbWlub3LDrWEgZW4gZWwgbWVyY2FkbyBkZSB0cmFiYWpvLCBsYXMgbXVqZXJlcyB0aWVuZW4gbcOhcyBkaWZpY3VsdGFkZXMgcGFyYSBjb25zZWd1aXIgdHJhYmFqbyB5L28gcGFyYSB0cmFiYWphciB1bmEgam9ybmFkYSBjb21wbGV0YS4gICAgICAKRW4gc3UgY29uanVudG8sIGVzdG9zIGN1YXRybyBpbmRpY2Fkb3JlcyBub3MgcHJlc2VudGFuIHVuYSBwcmltZXJhIGltYWdlbiBkZSBsYSBtYXNjdWxpbml6YWNpw7NuIGRlbCBtZXJjYWRvIGRlIHRyYWJham8gYXJnZW50aW5vLiAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAKX19HcsOhZmljbyAxLl9fIF9Qb2JsYWNpw7NuIGRlIDE0IGHDsW9zIHkgbcOhcy4gUHJpbmNpcGFsZXMgaW5kaWNhZG9yZXMgZGUgTWVyY2FkbyBkZSBUcmFiYWpvIHBvciBzZXhvLiBUb3RhbCBkZSBhZ2xvbWVyYWRvcyB1cmJhbm9zLiAzZXIgdHJpbWVzdHJlIDIwMTcuXwpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQp0YWJsYTEuMSA8LSBiYXNlX2luZGl2aWR1YWwgJT4lIAogIGZpbHRlcihDSDA2ID49IDE0KSAlPiUgCiAgZ3JvdXBfYnkoU2V4bykgJT4lIAogIHN1bW1hcmlzZShQb2JsYWNpb24gICAgICAgICA9IHN1bShQT05ERVJBKSwKICAgICAgICAgICAgT2N1cGFkb3MgICAgICAgICAgPSBzdW0oUE9OREVSQVtFU1RBRE8gPT0gMV0pLAogICAgICAgICAgICBEZXNvY3VwYWRvcyAgICAgICA9IHN1bShQT05ERVJBW0VTVEFETyA9PSAyXSksCiAgICAgICAgICAgIFBFQSAgICAgICAgICAgICAgID0gT2N1cGFkb3MgKyBEZXNvY3VwYWRvcywKICAgICAgICAgICAgT2N1cGFkb3NfZGVtYW5kICAgPSBzdW0oUE9OREVSQVtFU1RBRE8gPT0gMSAmIFBQMDNKID09MV0pLAogICAgICAgICAgICBTdWJvY19kZW1hbmRhbnRlICA9IHN1bShQT05ERVJBW0VTVEFETyA9PSAxICYgSU5URU5TSSA9PTEgJiBQUDAzSj09MV0pLAogICAgICAgICAgICBTdWJvY19ub19kZW1hbmQgICA9IHN1bShQT05ERVJBW0VTVEFETyA9PSAxICYgSU5URU5TSSA9PTEgJiBQUDAzSiAlaW4lIGMoMiw5KV0pLAogICAgICAgICAgICBTdWJvY3VwYWRvcyAgICAgICA9IFN1Ym9jX2RlbWFuZGFudGUgKyBTdWJvY19ub19kZW1hbmQsCiAgICAgICAgICAgICdUYXNhIEFjdGl2aWRhZCcgICAgICAgICAgICAgICAgICA9IHJvdW5kKFBFQS9Qb2JsYWNpb24sIDMpLAogICAgICAgICAgICAnVGFzYSBFbXBsZW8nICAgICAgICAgICAgICAgICAgICAgPSByb3VuZChPY3VwYWRvcy9Qb2JsYWNpb24sIDMpLAogICAgICAgICAgICAnVGFzYSBEZXNvY3VwYWNpb24nICAgICAgICAgICAgICAgPSByb3VuZChEZXNvY3VwYWRvcy9QRUEsIDMpLAogICAgICAgICAgICAnVGFzYSBPY3VwYWRvcyBEZW1hbmRhbnRlcycgICAgICAgPSByb3VuZChPY3VwYWRvc19kZW1hbmQvUEVBLCAzKSwKICAgICAgICAgICAgJ1Rhc2EgU3Vib2N1cGFjacOzbicgICAgICAgICAgICAgICA9IHJvdW5kKFN1Ym9jdXBhZG9zL1BFQSwgMyksCiAgICAgICAgICAgICdUYXNhIFN1Ym9jdXBhY2nDs24gZGVtYW5kYW50ZScgICAgPSByb3VuZChTdWJvY19kZW1hbmRhbnRlL1BFQSwgMyksCiAgICAgICAgICAgICdUYXNhIFN1Ym9jdXBhY2nDs24gbm8gZGVtYW5kYW50ZScgPSByb3VuZChTdWJvY19ub19kZW1hbmQvUEVBLCAzKSkgJT4lIAogIHNlbGVjdCgtYygyOjkpKSAlPiUgCiAgZ2F0aGVyKEluZGljYWRvcmVzLCBWYWxvciwgMjo4KSAlPiUgCiAgc3ByZWFkKC4sIFNleG8sIFZhbG9yKQoKdGFibGExLjJfZ3JhZiA8LSB0YWJsYTEuMSAlPiUgCiAgZmlsdGVyKCFJbmRpY2Fkb3JlcyAlaW4lIGMoIlRhc2EgU3Vib2N1cGFjacOzbiBkZW1hbmRhbnRlIiwgIlRhc2EgU3Vib2N1cGFjacOzbiBubyBkZW1hbmRhbnRlIiwgIlRhc2EgT2N1cGFkb3MgRGVtYW5kYW50ZXMiKSkgJT4lIAogIGdhdGhlciguLCBTZXhvLCBwcm9wb3JjaW9uLDI6MykKCmdncGxvdCh0YWJsYTEuMl9ncmFmLCBhZXMoeCA9ICcnLCBwcm9wb3JjaW9uLCBmaWxsID0gU2V4bywgZ3JvdXA9IFNleG8sIGxhYmVsID0gcGVyY2VudChwcm9wb3JjaW9uKSkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpICsKICBnZW9tX3RleHQocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IC45KSwgdmp1c3QgPTIsIHNpemUgPSA2KSArCiAgdGhlbWVfdm9pZCgpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb2xvcmVzKSArCiAgZmFjZXRfd3JhcCh+SW5kaWNhZG9yZXMsIHNjYWxlcyA9ICJmcmVlIikgKwogIGxhYnMoY2FwdGlvbiA9ICJGdWVudGU6IEVsYWJvcmFjacOzbiBwcm9waWEgZW4gYmFzZSBhIEVQSC1JTkRFQyIpCmBgYAoKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMgQXF1w60gaGF5IHF1ZSBjYW1iaWFyIGVsIGRpcmVjdG9yaW8gZW4gcXVlIHNlIHZhIGEgZ3VhcmRhciBlbCBncsOhZmljby4KZ2dzYXZlKCJHcmFmaWNvcy9HcmFmaWNvMS5wbmciLCBzY2FsZSA9IDIpCmBgYAoKPGJyPgoKIyMgRW1wbGVvIG5vIHJlZ2lzdHJhZG8KCkEgc3UgdmV6LCBsYXMgb2N1cGFkYXMgYXNhbGFyaWFkYXMgZXN0w6FuIGV4cHVlc3RhcyBhIHVuYSB0YXNhIGRlIGVtcGxlbyBubyByZWdpc3RyYWRvIG1heW9yIHF1ZSBsYSBkZSBzdXMgY29tcGHDsWVyb3MgdmFyb25lcy4gSGF5IHVuIDM2LjUlIGRlIGxhcyBhc2FsYXJpYWRhcyBhIHF1aWVuZXMgc3VzIGVtcGxlYWRvcmVzIG5vIGluc2NyaWJlbiBlbiBsYSBzZWd1cmlkYWQgc29jaWFsLCBtaWVudHJhcyBxdWUgcGFyYSBsb3MgYXNhbGFyaWFkb3MgdmFyb25lcyBlc3RhIHRhc2EgZGUgbm8gcmVnaXN0cm8gZXMgZGVsIDMyLjglLiAgICAKICAgICAgCl9fQ3VhZHJvIDIuX18gX09jdXBhZGFzL29zIGFzYWxhcmlhZGFzL29zLiBUYXNhcyBkZSBlbXBsZW8gbm8gcmVnaXN0cmFkbyBwb3Igc2V4by4gVG90YWwgZGUgYWdsb21lcmFkb3MgdXJiYW5vcy4gM2VyIHRyaW1lc3RyZSAyMDE3Ll8KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnRhYmxhMi4xIDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgCiAgZmlsdGVyKEVTVEFETz09MSwKICAgICAgICAgQ0FUX09DVVA9PTMpICU+JSAKICBncm91cF9ieShTZXhvKSAlPiUgCiAgc3VtbWFyaXNlKCJQcm9wb3JjacOzbiBkZSBubyBSZWdpc3RyYWRvcyIgPSBmb3JtYXRvX3BvcmMoc3VtKFBPTkRFUkFbUFAwN0g9PTJdKS9zdW0oUE9OREVSQSkqMTAwKSkKCmthYmxlKHRhYmxhMi4xKQpgYGAKCjxicj4KCiMjIEFjY2VzbyBhIENhcmdvcyBqZXLDoXJxdWljb3MKCkFkZW3DoXMgZGUgdGVuZXIgdW5hIHBhcnRpY2lwYWNpw7NuIG3DoXMgcmVzdHJpbmdpZGEgZW4gZWwgbWVyY2FkbyBkZSB0cmFiYWpvLCBsYXMgb2N1cGFkYXMgZW5jdWVudHJhbiBtw6FzIG9ic3TDoWN1bG9zIHBhcmEgYWNjZWRlciBhIGNhcmdvcyBqZXLDoXJxdWljb3M6IG1pZW50cmFzIHF1ZSB1biA3LjglIGRlIGxvcyBvY3VwYWRvcyB2YXJvbmVzIHRpZW5lbiBjYXJnb3MgZGUgZGlyZWNjacOzbiBvIHNvbiBqZWZlcywgc8OzbG8gdW4gNC43JSBkZSBsYXMgb2N1cGFkYXMgZWplcmNlbiBwdWVzdG9zIGRlIGVzYXMgY2FyYWN0ZXLDrXN0aWNhcy4gQWwgbWlzbW8gdGllbXBvLCBsYXMgb2N1cGFkYXMgc2UgZW5jdWVudHJhbiBtw6FzIGNvbmNlbnRyYWRhcyBlbiBsb3MgcHVlc3RvcyBhc2FsYXJpYWRvcywgZXMgZGVjaXIsIGVuIHJlbGFjacOzbiBkZSBkZXBlbmRlbmNpYS4gICAKICAgICAgIApfX0dyw6FmaWNvIDMuX18gX09jdXBhZGFzL29zLiBNdWplcmVzIHkgVmFyb25lcyBzZWfDum4gSmVyYXJxdcOtYSBkZSBsYSBvY3VwYWNpw7NuLCBlbiBwb3JjZW50YWplIChlc2NhbGFzIGxpYnJlcykuIFRvdGFsIGRlIGFnbG9tZXJhZG9zIHVyYmFub3MuIDNlciB0cmltZXN0cmUgMjAxNy5fCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnRhYmxhMy4xIDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgCiAgZmlsdGVyKEpFUkFSUVVJQSAhPSAiMCIsCiAgICAgICAgIEVTVEFETyA9PSAxKSAlPiUKICBncm91cF9ieShTZXhvKSAlPiUgCiAgbXV0YXRlKEZyZWN1ZW5jaWEgPSBzdW0oUE9OREVSQSkpICU+JSAKICBncm91cF9ieShTZXhvLCBKRVJBUlFVSUEpICU+JSAKICBzdW1tYXJpc2UocHJvcG9yY2lvbiA9IHJvdW5kKHN1bShQT05ERVJBKS91bmlxdWUoRnJlY3VlbmNpYSksIDMpKQoKZ2dwbG90KHRhYmxhMy4xLCBhZXMoeCA9ICcnLCBwcm9wb3JjaW9uLCBmaWxsID0gU2V4bywgZ3JvdXA9IFNleG8sIGxhYmVsID0gcGVyY2VudChwcm9wb3JjaW9uKSApKSsKICBnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpICsKICBnZW9tX3RleHQocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IC45KSwgdmp1c3QgPTIsIHNpemUgPSA2KSArCiAgdGhlbWVfdm9pZCgpKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvbG9yZXMpKwogIGZhY2V0X3dyYXAofkpFUkFSUVVJQSwgc2NhbGVzID0gImZyZWUiKSArIAogIGxhYnMoY2FwdGlvbiA9ICJGdWVudGU6IEVsYWJvcmFjacOzbiBwcm9waWEgZW4gYmFzZSBhIEVQSC1JTkRFQyIpCmBgYAoKYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9Cmdnc2F2ZSgiR3JhZmljb3MvR3JhZmljbzMucG5nIiwgc2NhbGUgPSAyKQpgYGAKCjxicj4KCiMjIEJyZWNoYXMgZGUgaW5ncmVzb3MgbWVuc3VhbGVzCgpBIGNvbnRpbnVhY2nDs24gc2UgaGFjZSBmb2NvIGVuIGxhcyBkaWZlcmVuY2lhcyBkZSBtb250b3MgZGUgaW5ncmVzb3MgcXVlIHBlcmNpYmVuIGxvcyB2YXJvbmVzIHkgbGFzIG11amVyZXMuIEVzdG9zIGluZ3Jlc29zIHB1ZWRlbiBwcm92ZW5pciBkZSBkaXZlcnNhcyBmdWVudGVzIHkgYWwgbWlzbW8gdGllbXBvIHB1ZWRlbiBkZXNhZ3JlZ2Fyc2Ugc2Vnw7puIGNhcmFjdGVyw61zdGljYXMgYWRpY2lvbmFsZXMgZGUgbGFzIHBlcnNvbmFzIG8gbG9zIHB1ZXN0b3MgcXVlIGRlc2VtcGXDsWFuLiBJbmNsdXNvIHB1ZWRlbiBkaXN0aW5ndWlyc2UgbG9zIGluZ3Jlc29zIG1lbnN1YWxlcyB5IGxvcyBpbmdyZXNvcyBob3Jhcmlvcy4gICAgICAgICAgICAgIApQYXJhIGRpbWVuc2lvbmFyIGVzdGFzIGRpZmVyZW5jaWFzIGhhY2Vtb3MgdXNvIGRlbCBjb25jZXB0byBkZSAiYnJlY2hhIiwgcXVlIGVuIGVzdGUgY2FzbyBzZSBjYWxjdWxhIGNvbW8gbGEgZGlmZXJlbmNpYSBlbnRyZSBsb3MgaW5ncmVzb3MgcHJvbWVkaW9zIGRlIGxvcyB2YXJvbmVzIHkgbGFzIG11amVyZXMsIGV4cHJlc2FkYSBlbiB0w6lybWlub3MgZGVsIGluZ3Jlc28gbcOhcyBhbHRvLiBFcyBkZWNpciwgcXVlIHB1ZWRlIGxlZXJzZSBjb21vICJsYXMgbXVqZXJlcyBwZXJjaWJlbiBpbmdyZXNvcyBxdWUsIGVuIHByb21lZGlvLCBzb24gdW4gLi4uJSBtZW5vcmVzIHF1ZSBsb3MgZGUgbG9zIHZhcm9uZXMiLiAgICAgICAgICAKCjxicj4KCiMjIyBCcmVjaGEgZGUgaW5ncmVzb3MgdG90YWxlcyBtZW5zdWFsZXMKCk9ic2VydmFuZG8gbG9zIGluZ3Jlc29zIHRvdGFsZXMgaW5kaXZpZHVhbGVzIGRlIHRvZGEgbGEgcG9ibGFjacOzbiBkZSAxNCBhw7FvcyB5IG3DoXMsIHNlIG9ic2VydmEgcXVlIGxhIGJyZWNoYSBlbnRyZSB2YXJvbmVzIHkgbXVqZXJlcyBlbiBlc3RlIGNhc28gc3VwZXJhIGxvcyAzMCBwdW50b3MgcG9yY2VudHVhbGVzLiBFcyBkZWNpciwgY29udGVtcGxhbmRvIHRvZG9zIGxvcyBpbmdyZXNvcyBxdWUgc2UgcGVyY2liZW4sIHNlYW4gZGUgb3JpZ2VuIGxhYm9yYWwgbyBubyBsYWJvcmFsIChjb21vIGp1YmlsYWNpb25lcyB5IHBlbnNpb25lcywgY3VvdGFzIGFsaW1lbnRhcmlhcywgc3Vic2lkaW9zLCBldGMuKSwgbGFzIG11amVyZXMgcGVyY2liZW4gaW5ncmVzb3MgcXVlLCBlbiBwcm9tZWRpbywgc29uIHVuIDMzLjUlIG1lbm9yZXMgcXVlIGxvcyBkZSBsb3MgdmFyb25lcy4gICAgICAgICAgIAogICAgICAgICAgICAgIApfX0N1YWRybyA0Ll9fIF9Qb2JsYWNpw7NuIHBlcmNlcHRvcmEgZGUgaW5ncmVzb3MgZGUgMTQgYcOxb3MgeSBtw6FzLiBNZWRpYSBkZSBpbmdyZXNvcyB0b3RhbGVzIGluZGl2aWR1YWxlcyB5IGJyZWNoYSBkZSBpbmdyZXNvcyAoZW4gcG9yY2VudGFqZSkgcG9yIHNleG8uIFRvdGFsIGRlIGFnbG9tZXJhZG9zIHVyYmFub3MuIDNlciB0cmltZXN0cmUgMjAxNy5fCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQp0YWJsYTQuMSA8LSBiYXNlX2luZGl2aWR1YWwgJT4lIAogIGZpbHRlcihDSDA2ID49IDE0ICYgIWlzLm5hKFA0N1QpKSAlPiUgCiAgZ3JvdXBfYnkoU2V4bykgJT4lIAogIHN1bW1hcmlzZShNZWRpYS5JVEkgPSByb3VuZCh3ZWlnaHRlZC5tZWFuKFA0N1QsIFBPTkRJSSksIDEpKSAlPiUgCiAgc3ByZWFkKC4sIFNleG8sIE1lZGlhLklUSSkgJT4lIAogIG11dGF0ZSgiQnJlY2hhIGRlbCBJbmdyZXNvIFRvdGFsIEluZGl2aWR1YWwiID0gZm9ybWF0b19wb3JjKCgoVmFyb25lcy1NdWplcmVzKS9WYXJvbmVzKSoxMDApLAogICAgICAgICAiTWVkaWEgZGUgaW5ncmVzb3MgZGUgbGFzIE11amVyZXMiID0gZm9ybWF0b19wZXNvcyhNdWplcmVzKSwKICAgICAgICAgIk1lZGlhIGRlIGluZ3Jlc29zIGRlIGxvcyBWYXJvbmVzIiA9IGZvcm1hdG9fcGVzb3MoVmFyb25lcykpICU+JSAKICBzZWxlY3QoIk1lZGlhIGRlIGluZ3Jlc29zIGRlIGxhcyBNdWplcmVzIiwgIk1lZGlhIGRlIGluZ3Jlc29zIGRlIGxvcyBWYXJvbmVzIiwgIkJyZWNoYSBkZWwgSW5ncmVzbyBUb3RhbCBJbmRpdmlkdWFsIikKCmthYmxlKHRhYmxhNC4xKQpgYGAKCjxicj4KCiMjIyBCcmVjaGEgZGUgaW5ncmVzb3MgbWVuc3VhbGVzIGRlIGxhcy9vcyBvY3VwYWRhcy9vcwoKU2ltdWx0w6FuZWFtZW50ZSwgZW4gZWwgbWVyY2FkbyBkZSB0cmFiYWpvLCBsYXMgbXVqZXJlcyBnYW5hbiBlbiBwcm9tZWRpbyB1biAyNSw2JSBtZW5vcyBxdWUgbG9zIHZhcm9uZXMgKFwkMTEuMDg1IHZzLiBcJDE0Ljg5OCApLiBFc3RvcyBkYXRvcyBjb3JyZXNwb25kZW4gYSBsYSB0b3RhbGlkYWQgZGUgb2N1cGFkYXMvb3MsIGN1YWxxdWllcmEgc2VhIHN1IGNhdGVnb3LDrWEgb2N1cGFjaW9uYWwsIGNhbGlmaWNhY2nDs24gbyBqZXJhcnF1w61hLCB5IG9ic2VydmFuZG8gZW4gZXN0ZSBjYXNvIGxvcyBpbmdyZXNvcyBwcm92ZW5pZW50ZXMgZGUgbGEgb2N1cGFjacOzbiBwcmluY2lwYWwuICAKICAgICAgICAgICAgICAKX19DdWFkcm8gNS5fXyBfT2N1cGFkYXMvb3MuIE1lZGlhIGRlIGluZ3Jlc29zIGRlIGxhIG9jdXBhY2nDs24gcHJpbmNpcGFsIHkgYnJlY2hhIGRlIGluZ3Jlc29zIChlbiBwb3JjZW50YWplKSBwb3Igc2V4by4gVG90YWwgZGUgYWdsb21lcmFkb3MgdXJiYW5vcy4gM2VyIHRyaW1lc3RyZSAyMDE3Ll8KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnRhYmxhNS4xIDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgCiAgZmlsdGVyKEVTVEFETyA9PSAxKSAlPiUgCiAgZ3JvdXBfYnkoU2V4bykgJT4lIAogIHN1bW1hcmlzZShNZWRpYS5JT1AgPSByb3VuZCh3ZWlnaHRlZC5tZWFuKFAyMSwgUE9ORElJTyksIDEpKSAlPiUgCiAgc3ByZWFkKC4sIFNleG8sIE1lZGlhLklPUCkgJT4lIAogIG11dGF0ZSgiQnJlY2hhIGRlIGluZ3Jlc29zIGRlIGxhIG9jdXBhY2nDs24gcHJpbmNpcGFsIiA9IGZvcm1hdG9fcG9yYygoKFZhcm9uZXMtTXVqZXJlcykvVmFyb25lcykqMTAwKSwKICAgICAgICAgIk1lZGlhIGRlIGluZ3Jlc29zIGRlIGxhcyBNdWplcmVzIiA9IGZvcm1hdG9fcGVzb3MoTXVqZXJlcyksCiAgICAgICAgICJNZWRpYSBkZSBpbmdyZXNvcyBkZSBsb3MgVmFyb25lcyIgPSBmb3JtYXRvX3Blc29zKFZhcm9uZXMpKSAlPiUgCiAgc2VsZWN0KCJNZWRpYSBkZSBpbmdyZXNvcyBkZSBsYXMgTXVqZXJlcyIsICJNZWRpYSBkZSBpbmdyZXNvcyBkZSBsb3MgVmFyb25lcyIsICJCcmVjaGEgZGUgaW5ncmVzb3MgZGUgbGEgb2N1cGFjacOzbiBwcmluY2lwYWwiKQoKa2FibGUodGFibGE1LjEpCmBgYAoKPGJyPgoKIyMjIEJyZWNoYSBkZSBpbmdyZXNvcyBtZW5zdWFsZXMgZW50cmUgYXNhbGFyaWFkYXMvb3Mgbm8gcmVnaXN0cmFkb3MKCkFudGVyaW9ybWVudGUgc2Ugb2JzZXJ2w7MgcXVlIGxhcyBhc2FsYXJpYWRhcyBlc3TDoW4gZXhwdWVzdGFzIGEgdW5hIHRhc2EgZGUgbm8gcmVnaXN0cm8gbcOhcyBhbHRhIHF1ZSBsYSBxdWUgcHJlc2VudGFuIGxvcyBhc2FsYXJpYWRvcyB2YXJvbmVzLiBQZXJvIGFkZW3DoXMsIGxhcyBhc2FsYXJpYWRhcyBkZSBlc3RlIHNlY3RvciwgZWwgbm8gcmVnaXN0cmFkbywgZ2FuYW4gZW4gcHJvbWVkaW8gdW4gMzcuMSUgbWVub3MgcXVlIHN1cyBwYXJlcy4gRXMgZGVjaXIgcXVlIGxhIGJyZWNoYSBkZSBpbmdyZXNvcyBlbnRyZSBzZXhvcyBzZSBhbXBsw61hIGN1YW5kbyB2ZW1vcyBhIGFxdWVsbGFzL29zIGFzYWxhcmlhZGFzL29zIHF1ZSB0aWVuZW4gcGVvcmVzIGNvbmRpY2lvbmVzIGRlIHRyYWJham8uICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIApfX0N1YWRybyA2Ll9fIF9PY3VwYWRhcy9vcyBBc2FsYXJpYWRhcy9vcyBubyByZWdpc3RyYWRvcy4gTWVkaWEgZGUgaW5ncmVzb3MgZGUgbGEgb2N1cGFjacOzbiBwcmluY2lwYWwgeSBicmVjaGEgZGUgaW5ncmVzb3MgKGVuIHBvcmNlbnRhamUpIHBvciBzZXhvLiBUb3RhbCBkZSBhZ2xvbWVyYWRvcyB1cmJhbm9zLiAzZXIgdHJpbWVzdHJlIDIwMTcuXwpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KdGFibGE2LjEgPC0gYmFzZV9pbmRpdmlkdWFsICU+JSAKICBmaWx0ZXIoRVNUQURPID09IDEgJiBDQVRfT0NVUCA9PSAzICYgUFAwN0ggPT0gMikgJT4lIAogIGdyb3VwX2J5KFNleG8pICU+JSAKICBzdW1tYXJpc2UoTWVkaWEuSU9QID0gcm91bmQod2VpZ2h0ZWQubWVhbihQMjEsIFBPTkRJSU8pLCAxKSkgJT4lIAogIHNwcmVhZCguLCBTZXhvLCBNZWRpYS5JT1ApICU+JSAKICBtdXRhdGUoIkJyZWNoYSBkZSBpbmdyZXNvcyBkZSBsYSBvY3VwYWNpw7NuIHByaW5jaXBhbCIgPSBmb3JtYXRvX3BvcmMoKChWYXJvbmVzLU11amVyZXMpL1Zhcm9uZXMpKjEwMCksCiAgICAgICAgICJNZWRpYSBkZSBpbmdyZXNvcyBkZSBsYXMgTXVqZXJlcyIgPSBmb3JtYXRvX3Blc29zKE11amVyZXMpLAogICAgICAgICAiTWVkaWEgZGUgaW5ncmVzb3MgZGUgbG9zIFZhcm9uZXMiID0gZm9ybWF0b19wZXNvcyhWYXJvbmVzKSkgJT4lIAogIHNlbGVjdCgiTWVkaWEgZGUgaW5ncmVzb3MgZGUgbGFzIE11amVyZXMiLCAiTWVkaWEgZGUgaW5ncmVzb3MgZGUgbG9zIFZhcm9uZXMiLCAiQnJlY2hhIGRlIGluZ3Jlc29zIGRlIGxhIG9jdXBhY2nDs24gcHJpbmNpcGFsIikKCmthYmxlKHRhYmxhNi4xKQpgYGAKCjxicj4KCiMjIyBCcmVjaGEgZGUgaW5ncmVzb3MgbWVuc3VhbGVzIHBvciBjYWxpZmljYWNpw7NuIGRlbCBwdWVzdG8gZGUgdHJhYmFqbwoKTGEgYnJlY2hhIGRlIGluZ3Jlc29zIG1lbnN1YWxlcyBkZSBsYXMvb3Mgb2N1cGFkYXMvb3Mgc2UgbWFudGllbmUgaW5jbHVzbyBhIGlndWFsZXMgbml2ZWxlcyBkZSBjYWxpZmljYWNpw7NuIGRlbCBwdWVzdG8gZGUgdHJhYmFqby4gUG9yIGVqZW1wbG8sIG1pZW50cmFzIHF1ZSBsb3MgdmFyb25lcyBxdWUgdHJhYmFqYW4gZW4gb2N1cGFjaW9uZXMgcHJvZmVzaW9uYWxlcyB0aWVuZW4gdW4gaW5ncmVzbyBtZWRpbyBkZSBcJDI4LjU1NiwgbGFzIG11amVyZXMgb2N1cGFkYXMgZW4gZXNlIG1pc21vIHNlZ21lbnRvIHBlcmNpYmVuIHVuIGluZ3Jlc28gbWVkaW8gZGUgXCQyMS4xMDgsIGVzIGRlY2lyLCB1biAyNi4xJSBtZW5vcyBxdWUgbG9zIHZhcm9uZXMuIEVudG9uY2VzLCBwYXJhIGxhcyBtdWplcmVzIHF1ZSBzZSBkZXNlbXBlw7FhbiBjb21vIHByb2Zlc2lvbmFsZXMsIGxhIGJyZWNoYSBlcyBtw6FzIGFsdGEgcXVlIHBhcmEgZWwgdG90YWwgZGUgb2N1cGFkYXMvb3MuICAgICAgCkVuIGxvcyBwdWVzdG9zIG5vIGNhbGlmaWNhZG9zLCBsb3MgdmFyb25lcyBnYW5hbiBcJDkuNTMxIGVuIHByb21lZGlvLCBhbCB0aWVtcG8gcXVlIGxhcyBtdWplcmVzIGdhbmFuIGFscmVkZWRvciBkZSBcJDYuMjk4LiBFc3RhIGJyZWNoYSBlcyBkZWwgMzMuOSUsIHNpZW5kbyB0YW1iacOpbiBzdXBlcmlvciBhIGxhIGJyZWNoYSBwcm9tZWRpbyBkZWwgbWVyY2FkbyBsYWJvcmFsLiAgICAgIAogICAgICAgICAgICAgICAgIApfX0dyw6FmaWNvIDcuX18gX09jdXBhZGFzL29zLiBNZWRpYSBkZSBpbmdyZXNvcyBtZW5zdWFsZXMgZGUgbGEgb2N1cGFjacOzbiBwcmluY2lwYWwsIHBvciBzZXhvIHkgY2FsaWZpY2FjacOzbiBvY3VwYWNpb25hbC4gVG90YWwgZGUgYWdsb21lcmFkb3MgdXJiYW5vcy4gM2VyIHRyaW1lc3RyZSAyMDE3Ll8KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KdGFibGE3LjEgPC0gYmFzZV9pbmRpdmlkdWFsICU+JSAKICBmaWx0ZXIoQ0FMSUZJQ0FDSU9OIT0iMCIsCiAgICAgICAgIEVTVEFETyA9PSAxLCBQUDNFX1RPVCA+IDApICU+JSAKICBncm91cF9ieShTZXhvLCBDQUxJRklDQUNJT04pICU+JSAKICBzdW1tYXJpc2UoSU9QX2hyID0gcm91bmQod2VpZ2h0ZWQubWVhbihQMjEvKFBQM0VfVE9UICogMzAgLyA3KSwgUE9ORElJTyksIDIpLAogICAgICAgICAgICBJT1BfbWVuc3VhbCAgPSByb3VuZCh3ZWlnaHRlZC5tZWFuKFAyMSwgUE9ORElJTyksIDIpKSAKCmdncGxvdCh0YWJsYTcuMSwgYWVzKHggPSBDQUxJRklDQUNJT04sIElPUF9tZW5zdWFsLCBmaWxsID0gU2V4bywgZ3JvdXAgPSBTZXhvLCBsYWJlbCA9IGZvcm1hdG9fcGVzb3MoSU9QX21lbnN1YWwsIGRlYyA9IDApICkpKwogIGdlb21fY29sKHBvc2l0aW9uID0gImRvZGdlIikgKwogIGdlb21fdGV4dChwb3NpdGlvbiA9cG9zaXRpb25fZG9kZ2Uod2lkdGggPSAuOSksIHZqdXN0ID0tLjEsIHNpemUgPSAzLjUpICsKICB0aGVtZV90dWZ0ZSgpICsKICB0aGVtZShheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpY2tzLnkgPSBlbGVtZW50X2JsYW5rKCkpICsKICBsYWJzKHkgPSAnSW5ncmVzbyBNZW5zdWFsJywgeCA9ICIiKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29sb3JlcykgKwogIGxhYnMoY2FwdGlvbiA9ICJGdWVudGU6IEVsYWJvcmFjacOzbiBwcm9waWEgZW4gYmFzZSBhIEVQSC1JTkRFQyIpCmBgYAoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZ2dzYXZlKCJHcmFmaWNvcy9HcmFmaWNvN19tcy5wbmciKQpgYGAKCjxicj4KCiMjIyBCcmVjaGEgZGUgaW5ncmVzb3MgbWVuc3VhbGVzIHBvciBuaXZlbCBlZHVjYXRpdm8gCgpMYXMgbXVqZXJlcyBvY3VwYWRhcyBlc3TDoW4gZW4gcHJvbWVkaW8gbcOhcyBmb3JtYWRhcyBxdWUgbG9zIHZhcm9uZXMgcXVlIHBhcnRpY2lwYW4gZW4gZWwgbWVyY2FkbyBkZSB0cmFiYWpvIChoYXkgdW5hIG1heW9yIHByb3BvcmNpw7NuIGRlIG11amVyZXMgY29uIG5pdmVsZXMgZWR1Y2F0aXZvcyBtw6FzIGFsdG9zKS4gU2luIGVtYmFyZ28sIGEgaWd1YWwgbml2ZWwgZWR1Y2F0aXZvLCBsb3MgaW5ncmVzb3MgbGFib3JhbGVzIGRlIGxhcyBtdWplcmVzIHRyYWJhamFkb3JhcyBzb24gaW5mZXJpb3JlcyBhIGxvcyBkZSBsb3MgdmFyb25lcy4gRXN0YSBkaWZlcmVuY2lhIGRlIGluZ3Jlc29zIG9zY2lsYSBlbnRyZSBlbCAzMS41JSBwYXJhIGxhcyBkZSBuaXZlbCB1bml2ZXJzaXRhcmlvL3N1cGVyaW9yLCB5IGVsIDM5LjYlIHBhcmEgbGFzIGRlIG5pdmVsIHByaW1hcmlvLiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIApfX0N1YWRybyA4LjEuX18gX09jdXBhZGFzL29zLiBNdWplcmVzIHkgVmFyb25lcyBzZWfDum4gbml2ZWwgZWR1Y2F0aXZvIChQb3JjZW50YWplIHBvciBjb2x1bW5hcykuIFRvdGFsIGRlIGFnbG9tZXJhZG9zIHVyYmFub3MuIDNlciB0cmltZXN0cmUgMjAxNy5fCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnRhYmxhOC4xIDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgCiAgZmlsdGVyKEVTVEFETyA9PSAxLCAhaXMubmEoTklWRUxfRURVQ0FUSVZPKSkgJT4lIAogIGdyb3VwX2J5KFNleG8pICU+JQogIG11dGF0ZShGcmVjdWVuY2lhID0gc3VtKFBPTkRFUkEpKSAlPiUgCiAgZ3JvdXBfYnkoU2V4bywgTklWRUxfRURVQ0FUSVZPKSAlPiUgCiAgc3VtbWFyaXNlKFRhc2EgPSBmb3JtYXRvX3BvcmMoc3VtKFBPTkRFUkEpL3VuaXF1ZShGcmVjdWVuY2lhKSoxMDApKSAlPiUgCiAgc3ByZWFkKC4sIFNleG8sIFRhc2EpICU+JSAKICByZW5hbWUoIk5pdmVsIEVkdWNhdGl2byIgPSBOSVZFTF9FRFVDQVRJVk8sICIlIGRlIE11amVyZXMiID0gTXVqZXJlcywgIiUgZGUgVmFyb25lcyIgPSBWYXJvbmVzKQoKa2FibGUodGFibGE4LjEpCmBgYAoKX19HcsOhZmljbyA4LjIuX18gX09jdXBhZGFzL29zLiBNZWRpYSBkZSBpbmdyZXNvcyBtZW5zdWFsZXMgZGUgbGEgb2N1cGFjacOzbiBwcmluY2lwYWwsIHBvciBzZXhvIHkgbml2ZWwgZWR1Y2F0aXZvLiBUb3RhbCBkZSBhZ2xvbWVyYWRvcyB1cmJhbm9zLiAzZXIgdHJpbWVzdHJlIDIwMTcuXwpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQp0YWJsYTguMiA8LSBiYXNlX2luZGl2aWR1YWwgJT4lIAogIGZpbHRlcihFU1RBRE8gPT0gMSwgUFAzRV9UT1Q+MCwgIWlzLm5hKE5JVkVMX0VEVUNBVElWTykpICU+JSAKICBncm91cF9ieShTZXhvLCBOSVZFTF9FRFVDQVRJVk8pICU+JSAKICBzdW1tYXJpc2UoSU9QX2hyID0gcm91bmQod2VpZ2h0ZWQubWVhbihQMjEvKFBQM0VfVE9UICogMzAgLyA3KSwgUE9ORElJTyksIDIpLAogICAgICAgICAgICBJT1BfbWVuc3VhbCAgPSByb3VuZCh3ZWlnaHRlZC5tZWFuKFAyMSwgUE9ORElJTyksIDIpKSAKCmdncGxvdCh0YWJsYTguMiwgYWVzKHggPSBOSVZFTF9FRFVDQVRJVk8sIElPUF9tZW5zdWFsLCBmaWxsID0gU2V4bywgZ3JvdXA9IFNleG8sIGxhYmVsID0gZm9ybWF0b19wZXNvcyhJT1BfbWVuc3VhbCwgZGVjID0gMCkgKSkgKwogIGdlb21fY29sKHBvc2l0aW9uID0gImRvZGdlIikgKwogIGdlb21fdGV4dChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gLjkpLCB2anVzdCA9LS4xLCBzaXplID0gMy41KSArCiAgdGhlbWVfdHVmdGUoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aWNrcy55ID0gZWxlbWVudF9ibGFuaygpKSArCiAgbGFicyh5ID0gJ0luZ3Jlc28gTWVuc3VhbCcsIHggPSAiIikgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvbG9yZXMpICsKICBsYWJzKGNhcHRpb24gPSAiRnVlbnRlOiBFbGFib3JhY2nDs24gcHJvcGlhIGVuIGJhc2UgYSBFUEgtSU5ERUMiKQpgYGAKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9Cmdnc2F2ZSgiR3JhZmljb3MvR3JhZmljbzhfbXMucG5nIikKYGBgCgo8YnI+CgojIyBCcmVjaGFzIGRlIGluZ3Jlc29zIGhvcmFyaW9zCgojIyMgQnJlY2hhIGRlIGluZ3Jlc29zIGhvcmFyaW9zIHBvciBjYWxpZmljYWNpw7NuIGRlbCBwdWVzdG8gZGUgdHJhYmFqbwoKU2kgZW4gbHVnYXIgZGUgY29tcGFyYXIgaW5ncmVzb3MgbWVuc3VhbGVzIHRvbWFtb3MgZWwgaW5ncmVzbyBwb3IgaG9yYSBkZSBsYXMgcGVyc29uYXMsIGxhIGhpc3RvcmlhIGVzIHVuIHBvY28gZGlmZXJlbnRlLiBBbCByZWNhbGN1bGFyIGVsIGdyw6FmaWNvIDcgKENhbGlmaWNhY2nDs24gZGVsIHB1ZXN0byksIGxhIGJyZWNoYSBkaXNtaW51eWUgZnVlcnRlbWVudGUsIHNpZW5kbyBpbmNsdXNvIG5lZ2F0aXZhIGVuIGVsIGNhc28gZGUgbG9zIHTDqWNuaWNvcyB5IG5vIGNhbGlmaWNhZG9zLiBFbiBlbCBjYXNvIGRlIGxvcyBwdWVzdG9zIHByb2Zlc2lvbmFsZXMgeSBvcGVyYXRpdm9zIHNlIHJlZHVjZSBhIDYuNSUgeSAzLjclIHJlc3BlY3RpdmFtZW50ZS4KCl9fR3LDoWZpY28gOS5fXyBfT2N1cGFkYXMvb3MuIE1lZGlhIGRlIGluZ3Jlc29zIGhvcmFyaW9zIGRlIGxhIG9jdXBhY2nDs24gcHJpbmNpcGFsLCBwb3Igc2V4byB5IGNhbGlmaWNhY2nDs24gb2N1cGFjaW9uYWwuIFRvdGFsIGRlIGFnbG9tZXJhZG9zIHVyYmFub3MuIDNlciB0cmltZXN0cmUgMjAxNy5fCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmdncGxvdCh0YWJsYTcuMSwgYWVzKHggPSBDQUxJRklDQUNJT04sIElPUF9ociwgZmlsbCA9IFNleG8sIGdyb3VwPSBTZXhvLCBsYWJlbCA9IGZvcm1hdG9fcGVzb3MoSU9QX2hyLCBkZWMgPSAwKSApKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZG9kZ2UiKSArCiAgZ2VvbV90ZXh0KHBvc2l0aW9uID1wb3NpdGlvbl9kb2RnZSh3aWR0aCA9IC45KSwgdmp1c3QgPS0uMSwgc2l6ZSA9IDQpICsKICB0aGVtZV90dWZ0ZSgpICsKICB0aGVtZShheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpY2tzLnkgPSBlbGVtZW50X2JsYW5rKCkpICsKICBsYWJzKHkgPSAnSW5ncmVzbyBIb3JhcmlvJywgeCA9ICIiKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29sb3JlcykgKwogIGxhYnMoY2FwdGlvbiA9ICJGdWVudGU6IEVsYWJvcmFjacOzbiBwcm9waWEgZW4gYmFzZSBhIEVQSC1JTkRFQyIpCmBgYAoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZ2dzYXZlKCJHcmFmaWNvcy9HcmFmaWNvOV9oci5wbmciKQpgYGAKCjxicj4KCiMjIyBCcmVjaGEgZGUgaW5ncmVzb3MgaG9yYXJpb3MgcG9yIG5pdmVsIGVkdWNhdGl2bwoKU2kgZXNvcyBtaXNtb3MgaW5ncmVzb3MgaG9yYXJpb3MgZGUgbGFzL29zIG9jdXBhZGFzL29zIHNlIGNvbXBhcmFuIHNlZ8O6biBzdSBuaXZlbCBlZHVjYXRpdm8sIGxhIGJyZWNoYSBzZSBtYW50aWVuZSBwYXJhIHRvZG9zIGxvcyBuaXZlbGVzIGV4Y2VwdG8gcGFyYSBxdWllbmVzIHBvc2VlbiB1biBuaXZlbCBlZHVjYXRpdm8gcHJpbWFyaW8uIEVuIGVzdGUgY2FzbyBsYSBicmVjaGEgZXMgZGUgNC4yJSBhIGZhdm9yIGRlIGxhcyBtdWplcmVzLiBQYXJhIGVsIHJlc3RvIGRlIGxvcyBuaXZlbGVzIGVkdWNhdGl2b3MsIGxhcyBtdWplcmVzIHBlcmNpYmVuIGluZ3Jlc29zIGhvcmFyaW9zIG1lbm9yZXMgcXVlIGxvcyB2YXJvbmVzLiBFc3RhIGRpZmVyZW5jaWEgZXMgZGUgZW50cmUgdW4gMTMuOSUgeSAxNC45JSBhIGZhdm9yIGRlIGxvcyBvY3VwYWRvcyB2YXJvbmVzLiBBbCBpZ3VhbCBxdWUgZW4gZWwgZ3LDoWZpY28gOSwgZWwgZ3LDoWZpY28gMTAgbXVlc3RyYSBxdWUgbGEgYnJlY2hhIHNlIHJlZHVjZSBmdWVydGVtZW50ZSwgYXVucXVlIG5vIGVuIGxhIG1pc21hIG1hZ25pdHVkIHF1ZSBhbCBhbmFsaXphciBsYSBjYWxpZmljYWNpw7NuIG9jdXBhY2lvbmFsLgoKX19HcsOhZmljbyAxMC5fXyBfT2N1cGFkYXMvb3MuIE1lZGlhIGRlIGluZ3Jlc29zIGhvcmFyaW9zIGRlIGxhIG9jdXBhY2nDs24gcHJpbmNpcGFsLCBwb3Igc2V4byB5IG5pdmVsIGVkdWNhdGl2by4gVG90YWwgZGUgYWdsb21lcmFkb3MgdXJiYW5vcy4gM2VyIHRyaW1lc3RyZSAyMDE3Ll8KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZ2dwbG90KHRhYmxhOC4yLCBhZXMoeCA9IE5JVkVMX0VEVUNBVElWTywgSU9QX2hyLCBmaWxsID0gU2V4bywgZ3JvdXA9IFNleG8sIGxhYmVsID0gZm9ybWF0b19wZXNvcyhJT1BfaHIsIGRlYyA9IDApICkpKwogIGdlb21fY29sKHBvc2l0aW9uID0gImRvZGdlIikrCiAgZ2VvbV90ZXh0KHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAuOSksIHZqdXN0ID0tLjEsIHNpemUgPSA0KSsKICB0aGVtZV90dWZ0ZSgpICsKICB0aGVtZShheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpY2tzLnkgPSBlbGVtZW50X2JsYW5rKCkpICsKICBsYWJzKHkgPSAnSW5ncmVzbyBIb3JhcmlvJywgeCA9ICIiKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29sb3JlcykgKwogIGxhYnMoY2FwdGlvbiA9ICJGdWVudGU6IEVsYWJvcmFjacOzbiBwcm9waWEgZW4gYmFzZSBhIEVQSC1JTkRFQyIpCmBgYAoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZ2dzYXZlKCJHcmFmaWNvcy9HcmFmaWNvMTBfaHIucG5nIikKYGBgCgpBbCBpbmNvcnBvcmFyIGxhIGV4dGVuc2nDs24gZGUgbGFzIGpvcm5hZGFzIGxhYm9yYWxlcyBhbCBhbsOhbGlzaXMsIGxhIG1hZ25pdHVkIGRlIGxhIGJyZWNoYSBkaXNtaW51eWUgbm90YWJsZW1lbnRlLiBEZSBhcXXDrSBzZSBkZXNwcmVuZGUgcXVlLCBlbiBwcm9tZWRpbywgbGFzIG11amVyZXMgdHJhYmFqYW4gbWVub3MgaG9yYXMgcXVlIGxvcyB2YXJvbmVzLCB5IGVzdG8gZXhwbGljYSB1bmEgcGFydGUgaW1wb3J0YW50ZSBkZSBsYSBicmVjaGEgZGUgaW5ncmVzb3MgbWVuc3VhbGVzLiBBIHN1IHZleiwgbGEgZGlzbWludWNpw7NuIGVzIG1lbm9yIGFsIG9ic2VydmFyIGVsIG5pdmVsIGVkdWNhdGl2bywgcG9yIGxvIHF1ZSBleGlzdGUgdW4gZmFjdG9yIGRlIGxhIGRlc2lndWFsZGFkIGRlIGfDqW5lcm8gZW4gdMOpcm1pbm9zIGRlIGluZ3Jlc29zIGxhYm9yYWxlcyBxdWUgb3BlcmEgc29icmUgdW5hIGRpbWVuc2nDs24geSBubyBzb2JyZSBsYSBvdHJhLiBQb3IgZWplbXBsbywgcG9kcsOtYSBoYWJlciB1bmEgbWF5b3Igc29icmVjYWxpZmljYWNpw7NuIGVuIG11amVyZXMgcXVlIGVuIHZhcm9uZXMuIEFsIG1hcmdlbiBkZSBlc3RvIMO6bHRpbW8sIGNhYmUgY3Vlc3Rpb25hcnNlIHJlc3BlY3RvIGFsIHBvcnF1w6kgZGUgbGEgZGlmZXJlbmNpYSBkZSBob3JhcyB0cmFiYWphZGFzIHBvciBtdWplcmVzIHkgcG9yIGhvbWJyZXMuIMK/RXhpc3RlIHVuYSBmYWx0YSBkZSB2b2x1bnRhZCBkZSBsYXMgbXVqZXJlcyBwYXJhIHRyYWJhamFyPyDCv3NvbiBtw6FzIGhvbGdhemFuYXM/IMK/byBlbiByZWFsaWRhZCBleGlzdGUgb3RybyBtb3Rpdm8gcG9yIGVsIGN1YWwgbGFzIG11amVyZXMgZGViZW4gcmVsZWdhciBzdXMgdHJhYmFqb3MsIGRlbCBjdWFsIGxvcyBob21icmVzIGVzdMOhbiBleGVudG9zPwoKPGJyPgoKIyMgRGlzdHJpYnVjacOzbiBkZSBsYXMgdGFyZWFzIGRlbCBob2dhcgoKR2VuZXJhbG1lbnRlLCBsYXMgbXVqZXJlcyBkZWJlbiBhZGVtw6FzIGRlZGljYXIgc3UgdGllbXBvIGFsIHRyYWJham8gZG9tw6lzdGljby4gRXMgZGVjaXIsIHJlYWxpemFuIHRhcmVhcyBkZSBjdWlkYWRvIHkgcmVwcm9kdWNjacOzbiBwYXJhIG90cm9zIG1pZW1icm9zIGRlIHN1IGhvZ2FyLiBFc3RlIHRyYWJham8gbm8gc2UgY29tZXJjaWEgZW4gZWwgbWVyY2FkbyB5IHBvciB0YW50byBubyBlcyByZW11bmVyYWRvLiBBIG1vZG8gaWx1c3RyYXRpdm8sIHNlIHNlw7FhbGEgcXVlOiBkZWwgdG90YWwgZGUgcGVyc29uYXMgcXVlIHJlYWxpemFuIGxhcyB0YXJlYXMgZGUgbGEgY2FzYSwgdW4gNzYlIHNvbiBtdWplcmVzIHkgdW4gMjQlIHNvbiB2YXJvbmVzLiBBIGVzdG8gc2Ugc3VtYSBlbCBoZWNobyBkZSBxdWUgcHLDoWN0aWNhbWVudGUgdG9kYXMgbGFzIHBlcnNvbmFzIHF1ZSBzZSBkZWRpY2FuIGFsIHNlcnZpY2lvIGRvbcOpc3RpY28gKGVzIGRlY2lyLCBxdWUgc8OtIHZlbmRlbiBlc3RlIHRyYWJham8gZW4gZWwgbWVyY2Fkbykgc29uIG11amVyZXMuICAgICAgICAgICAgICAKRXN0ZSByZXBhcnRvIGRlc2lndWFsIGRlIGxhcyB0YXJlYXMgZG9tw6lzdGljYXMgZW50cmUgdmFyb25lcyB5IG11amVyZXMgcHVlZGUgYXNvY2lhcnNlIGEgbGFzIGRlc2lndWFsZGFkZXMgdmlzdGFzIGVuIGxhIGNvbXBvc2ljacOzbiBkZWwgbWVyY2FkbyBkZSB0cmFiYWpvIHkgbGEgZGlmZXJlbmNpYSBkZSBsYSBleHRlbnNpw7NuIGRlIGxhIGpvcm5hZGEgbGFib3JhbC4gICAgIAogICAgICAgICAgICAgICAgICAgICAgCl9fR3LDoWZpY28gMTEuX18gX1BlcnNvbmFzIHF1ZSByZWFsaXphbiBsYXMgdGFyZWFzIGRvbcOpc3RpY2FzIGRlbCBob2dhciwgc2Vnw7puIHNleG8gKG5vIGluY2x1eWUgdHJhYmFqYWRvcmFzIGRlIHNlcnZpY2lvIGRvbcOpc3RpY28pLiBUb3RhbCBkZSBhZ2xvbWVyYWRvcyB1cmJhbm9zLiAzZXIgdHJpbWVzdHJlIDIwMTcuXwpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQp0YWJsYTExLjFfZ3JhZiA8LSBiYXNlX2luZGl2aWR1YWwgJT4lIAogIGxlZnRfam9pbiguLCBiYXNlX2hvZ2FyICU+JSAKICAgICAgICAgICAgICBzZWxlY3QoQ09EVVNVLCBOUk9fSE9HQVIsIFZJSTFfMSwgVklJMV8yKSwgYnkgPSBjKCJDT0RVU1UiLCAiTlJPX0hPR0FSIikpICU+JSAKICBtdXRhdGUocHJvcG9yY2lvbiA9IGNhc2Vfd2hlbihWSUkxXzEgPT0gQ09NUE9ORU5URSB8IFZJSTFfMiA9PSBDT01QT05FTlRFIH4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IDApKSAlPiUgCiAgc2VsZWN0KFNleG8sIHByb3BvcmNpb24sIFBPTkRFUkEpICU+JSAKICBncm91cF9ieShTZXhvKSAlPiUgCiAgICBzdW1tYXJpc2UocHJvcG9yY2lvbiA9IHN1bShwcm9wb3JjaW9uKlBPTkRFUkEpKSAlPiUgCiAgICBtdXRhdGUocHJvcG9yY2lvbiA9IHJvdW5kKHByb3BvcmNpb24vc3VtKHByb3BvcmNpb24pKjEwMCwgMCkpCgojIyBQcmVwIGRhdGEgKG5vdGhpbmcgdG8gY2hhbmdlIGhlcmUpCm5yb3dzIDwtIDEwCmRmIDwtIGV4cGFuZC5ncmlkKHggPSAxOm5yb3dzLCB5ID0gMTpucm93cykKZGYkU2V4byA8LSBmYWN0b3IocmVwKHRhYmxhMTEuMV9ncmFmJFNleG8sIHRhYmxhMTEuMV9ncmFmJHByb3BvcmNpb24pKSAgCiMjIFBsb3QKZ2dwbG90KGRmLCBhZXMoeCA9IHgsIHkgPSB5LCBmaWxsID0gU2V4bykpICsgCiAgICAgICAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuNSkgKwogICAgICAgIHNjYWxlX3hfY29udGludW91cyhleHBhbmQgPSBjKDAsIDApKSArCiAgICAgICAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwgMCksIHRyYW5zID0gJ3JldmVyc2UnKSArCiAgICAgICAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29sb3JlcykgKwogIHRoZW1lX3ZvaWQoKSArCiAgbGFicyhjYXB0aW9uID0gIkZ1ZW50ZTogRWxhYm9yYWNpw7NuIHByb3BpYSBlbiBiYXNlIGEgRVBILUlOREVDIikKYGBgCgpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZ2dzYXZlKCJHcmFmaWNvcy9HcmFmaWNvMTEucG5nIiwgc2NhbGUgPSAzKQpgYGAKCjxicj4KCiMjIERpc3RyaWJ1Y2nDs24gZGVsIGluZ3Jlc28KClBvciDDumx0aW1vLCBwb2RlbW9zIHZlciBlbCBlZmVjdG8gZGUgZXN0YXMgZGlmZXJlbmNpYXMgZW4gbGEgZGlzdHJpYnVjacOzbiBkZSBsb3MgaW5ncmVzb3MuIFNlcGFyYW5kbyBhIGxhIHBvYmxhY2nDs24gZW4gZGVjaWxlcyAoZGlleiBncnVwb3MgZGUgaWd1YWwgdGFtYcOxbyBvcmRlbmFkb3MgZGUgYWN1ZXJkbyBhIGxvcyBuaXZlbGVzIGRlIGxvcyBpbmdyZXNvcyksIHB1ZWRlIHZlcnNlIHF1ZSBsb3MgZGVjaWxlcyBtw6FzIGJham9zIGRlIGluZ3Jlc29zIGVzdMOhbiBjb21wdWVzdG9zIG1heW9yaXRhcmlhbWVudGUgcG9yIG11amVyZXMuIFBhcmFsZWxhbWVudGUsIGxvcyBkZWNpbGVzIGRlIG1heW9yZXMgaW5ncmVzb3Mgc2UgY29tcG9uZW4gbWF5b3JpdGFyaWFtZW50ZSBwb3IgdmFyb25lcy4gTG9zIGVzdHJhdG9zIGRlIG1lbm9yZXMgaW5ncmVzb3MgZXN0w6FuIGVudG9uY2VzIGZlbWluaXphZG9zLCBhbCB0aWVtcG8gcXVlIGxvcyBlc3RyYXRvcyBkZSBtYXlvcmVzIGluZ3Jlc29zIHNlIGVuY3VlbnRyYW4gbWFzY3VsaW5pemFkb3MuICAgIApFbiBlc3RlIGNhc28gbm9zIHJlZmVyaW1vcyBhIGxvcyBpbmdyZXNvcyB0b3RhbGVzIGluZGl2aWR1YWxlcywgZXMgZGVjaXIsIGNvbnNpZGVyYW5kbyB0b2RvIHRpcG8gZGUgZnVlbnRlIGRlIGluZ3Jlc29zLiAgICAgICAgICAgICAgCiAgICAgIApfX0dyw6FmaWNvIDEyLl9fIF9Qb2JsYWNpw7NuIHBlcmNlcHRvcmEgZGUgaW5ncmVzb3MuIENvbXBvc2ljacOzbiBzZWfDum4gc2V4byBkZSBsb3MgZGVjaWxlcyBkZSBpbmdyZXNvcyB0b3RhbGVzIGluZGl2aWR1YWxlcy4gVG90YWwgZGUgYWdsb21lcmFkb3MgdXJiYW5vcy4gM2VyIHRyaW1lc3RyZSAyMDE3Ll8KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KdGFibGExMi4xX2dyYWYgPC1iYXNlX2luZGl2aWR1YWwgJT4lIAogICAgc2VsZWN0KERFQ0lORFIsIFA0N1QsIFBPTkRJSSwgU2V4bykgJT4lIAogICAgZmlsdGVyKERFQ0lORFIgJWluJSBjKDE6MTApKSAlPiUgCiAgZ3JvdXBfYnkoREVDSU5EUikgJT4lIAogIG11dGF0ZShQb2IgPSBzdW0oUE9ORElJKSkgJT4lIAogIGdyb3VwX2J5KERFQ0lORFIsIFNleG8pICU+JQogIHN1bW1hcmlzZShQcm9wID0gc3VtKFBPTkRJSSkvdW5pcXVlKFBvYikpCgpnZ3Bsb3QodGFibGExMi4xX2dyYWYsIGFlcyh4ID0gREVDSU5EUiwgUHJvcCwgZmlsbCA9IFNleG8sIGdyb3VwPSBTZXhvLCBsYWJlbCA9IHBlcmNlbnQocm91bmQoUHJvcCwyKSkpKSsKICBnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpKwogIGdlb21fdGV4dChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gLjkpLCB2anVzdCA9LS4xLCBzaXplID0gMi41KSsKICB0aGVtZV90dWZ0ZSgpKwogIHRoZW1lKGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGlja3MueSA9IGVsZW1lbnRfYmxhbmsoKSkgKwogIGxhYnMoeSA9ICcnKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29sb3JlcykrCiAgc2NhbGVfeF9jb250aW51b3VzKCJEZWNpbCBkZSBpbmdyZXNvIHRvdGFsIiwgYnJlYWtzID1jKDE6MTApKSArCiAgbGFicyhjYXB0aW9uID0gIkZ1ZW50ZTogRWxhYm9yYWNpw7NuIHByb3BpYSBlbiBiYXNlIGEgRVBILUlOREVDIikKCmBgYAoKCiAgICAgICAgICAgICAgIApbXjFdOiBfUHJlc2lvbmFuZG8gZW5fICBfX0NvZGUgPiBEb3dubG9hZCBSbWRfXyBfc2UgYWNjZWRlIGEgbGEgZGVzY2FyZ2EgZGUgbGEgc2ludGF4aXMgY29tcGxldGEgZGUgZXN0ZSBpbmZvcm1lLCBxdWUgaW5jbHV5ZSBsYSBkZXNjYXJnYSBhdXRvbcOhdGljYSBkZSBsYXMgYmFzZXMgZGUgbGEgRVBIIHV0aWxpemFkYXMsIHVuYSBzZXJpZSBkZSBmdW5jaW9uZXMgw7p0aWxlcyB5IGxhIGVsYWJvcmFjacOzbiBkZSBjdWFkcm9zIHkgZ3LDoWZpY29zIGNvbiBlbCBsZW5ndWFqZSBSLl8gICAgCg==