Trabajo elaborado para la asignatura “Programación y manejo de datos en la era del Big Data” de la Universitat de València durante el curso 2020-2021. La página web de la asignatura puede verse aquí: https://perezp44.github.io/intro-ds-20-21-web/. Los trabajos de mis compañeros de curso pueden verse aquí.


1. Introducción

La actual crisis sanitaria ha tenido un importante impacto a nivel político, económico y social a nivel global, puede que uno de los efectos más relevante es el económico. Como estudiante de economía, abordamos un tema de actualidad desde la vertiente económica, que es la materia que nos atañe y motiva un análisis más eficaz.

Las diversas crisis que han sucedido en el último siglo, han abierto debates sobre las políticas monetarias y fiscales adoptadas por los distintos gobiernos de cada región en los períodos anteriores y posteriores a la crisis. La actual recesión ha generado una controversia más importante sobre la actuación política y económica, ya que atendiendo a la naturaleza de ésta, en concreto crisis sanitaria, no es un acontecimiento fácilmente previsible para los gobiernos, ya que las shocks económicos normalmente suelen tener un origen económico o estructural, por tanto resulta conveniente estudiar el impacto económico que ha tenido la crisis del COVID-19 en algunos de los países miembros de la Unión europea, y verificar si el grado de efecto está relacionado con la especialización económica de cada región.

La UE es una unión de países de distintas características económicas, sociales y políticas. Por tanto, el impacto de una medida o un shock económico es distinto para cada región, con lo cual cabe esperar que la actual crisis afecte de forma irregular a cada una de las regiones europeas, ya sea por una mejor estructura económica, o mejor gestión de los recursos disponibles para hacer frente a la crisis.

El objetivo del presente trabajo es hacer un análisis de la situación anteriormente descrita, mediante el uso de algunos indicadores económicos, como es el PIB per cápita, volúmen de exportaciones y la renta nacional por sectores productivos, para observar la evolución económica antes y después de la crisis.

Es pertinente hacer un pequeño repaso de la estructura económica, y modelos de desarollo de cada región para saber con exactitud de qué tipo de país se va a hablar, por tanto se procede a un breve análisis de la situación de algunos de los países de la UE.

2. Especialización productiva

España

Bandera de España

El PIB español en 2019 fue de 1.244.757M.€. Cabe destacar la fuerte caída sufrida en el primer y sobre todo segundo trimestre de 2020 debido a la pandemia. La caída fue de un 17,8%. Según la OCDE España tendrá que esperar como pronto a 2023 para recuperar el nivel de PIB anterior a la pandemia. La deuda española es preocupante y cada día aumenta muchísimo. Actualmente se sitúa en 1.188.859 millones de euros. La tasa de desempleo es del 16% en 2020. En 2018, los sectores más importantes de la economía española fueron el comercio mayorista y minorista, el transporte, la hostelería y la restauración (23,9%), la administración pública, la defensa, la educación, la sanidad y los servicios sociales (18,0%), y la industria (17,7%).

Francia

El PIB per cápita fue de 35.960€ euros, por lo que se encuentra en el puesto 27 de los 196 países del ranking de PIB per cápita. La última tasa de variación anual del IPC fue del 0,2%. El gasto en educación per cápita es de 1.804€, muy superior a los 1009 euros de España. La tasa de desempleo es de 8,6% En 2018, los sectores más importantes de la economía francesa fueron la administración pública, la defensa, la educación, la sanidad y los servicios sociales (22,4%), el comercio mayorista y minorista, el transporte, la hostelería y la restauración (17,8%), las actividades profesionales, científicas y técnicas, y las actividades administrativas y de servicios auxiliares (14,0%)

Bandera de Francia

Alemania

La deuda pública de Alemania en 2019 fue de 2.053.033 millones de euros, con una deuda del 59,8% del PIB. Su deuda per cápita es de 24.686€ euros por habitante. El PIB per cápita fue de 41.350€ El gasto en educación per cápita es de 1.827 euros. Podemos concluir que España tiene un gasto en educación muy bajo comparado con los países cercanos de la UE. El IVA general es del 19%, inferior al 21% de España y al 20% de Francia. En 2018, los sectores más importantes de la economía alemana fueron la industria (25,8 %), la administración pública, la defensa, la educación, la sanidad y los servicios sociales (18,2 %) y el comercio mayorista y minorista, el transporte y la hostelería y la restauración (16,3 %).

Bandera de Alemania

country year Agricultura Industria Manufactura Servicios
Germany 2019 0.7218220 26.70373 19.111987 62.63278
Germany 2018 0.6646685 27.37565 20.080890 62.06852
Germany 2017 0.8261704 27.51109 20.420816 61.74952
Germany 2016 0.6984311 27.56851 20.661873 61.77061
Spain 2019 2.6149367 20.47797 11.158590 67.60724
Spain 2018 2.7611583 20.12313 11.133071 67.61271
Spain 2017 2.7885292 20.06004 11.336926 67.79692
Spain 2016 2.8257200 20.00853 11.275318 67.90482
France 2019 1.5971419 17.13520 9.818907 70.19472
France 2018 1.6511295 17.07473 9.891315 70.20249
France 2017 1.5424148 17.24115 10.136285 70.28537
France 2016 1.4371149 17.43413 10.283023 70.50542
Italy 2019 1.9135330 21.38174 14.872929 66.31158
Italy 2018 1.9446851 21.45864 15.008980 66.33166
Italy 2017 1.9726847 21.30041 14.913870 66.43106
Italy 2016 1.9283733 21.21794 14.791034 66.64998

3. Demografía y Empleo

Demografía y empleo

A continuación vamos analizar dos variables demográficas importantes como son la población y el empleo, de algunos de los países más representativos de la UE durante la última década, en concreto durante el período 2007-2019, con el fn de conocer las distintas situaciónes de cada país en un entorno anteriór a la crisis sanitaria. (Datos obtenidos de eurostat)

Como podemos observar tanto en niveles de población como en niveles de empleo total anuales Alemania siempre ha estado en cabeza (dentro de los países seleccionados para esta representación), podemos observar que, si bien hay diferencias en los niveles de población entre países, estos varian poco a lo largo del periódo, mientras que los niveles de empleo tienen distintas tendencias según el país. En Alemania, por ejemplo, han tenido una tendencia creciente a lo largo de todo el periódo, empezando con una cifra de alrededor de 40 mill de empleados en 2007, y terminando con apróximadamente 60 millones de empleados en 2019, mientras que en otros países como por ejemplo España, la recuperación de los niveles de empleo respecto de la anterior crisis de 2008 no empezó a ocurrir sino a partir de los años 2014-2015 y desde entonces habia una tendencia creciente en los niveles de empleo hasta el 2019, al igual que el resto de países, algunos como Gran Bretaña o Francia incluso tenian niveles de empleo en 2019 muy superiores a los del 2007, con lo que podemos concluir que en 2019 estos países estaba en un situación relativamente prospera en cuanto a niveles de empleo.

más información en: Base de datos Eurostat Articulo respecto a la evolución del empleo 2008-2018 https://www.nuevatribuna.es/articulo/europa1/eurozona-empleo-trabajo-mercado-laboral-europa-euro-salarios/20180424071729151171.html

4. El PIB per cápita

En este apartado analizamos la evolucion del PIB per cápita entre los años 2011, 2019 Y 2020 para España, Italia, Francia, Reino Unido, Holanda, Polonia y Alemania. Hemos dividido los niveles de renta per cápita en 7 categorias para poder visualizar con claridad la integración real entre paises de la UE con modelos de desarrollo distintos.

El resultado es claro, y es que Holanda y Alemania estaban y estan en un nivel de renta per cápita muy superior al de paises como España. España está en la penúltima categoria, cerca del nivel de Polonia. Podemos concluir en este apartado que con nuestro modelo de desarrollo basado en los servicios y en especial en el turismo, el nivel de renta per cápita en los últimos 9 años no ha evolucionado casi nada. Seguimos a la cola de los paises desarrollados y ni de cerca estamos sufriendo una integración con paises punteros como Alemania. No hay diferencia casi entre ambos mapas, y es que en estos años de recuperación economica tras la crisis de 2008 los países han crecido al unísono y los que eran líderes económicos lo siguen siendo.

El 2020 ha provocado caidas en los niveles de PIB per cápita en todos los paises analizados, pero no ha alterado los mapas. Es decir, el covid no ha provocado ni integración ni desintegración real entre paises. Cabe destacar que los datos utilzados para el 2020 son semestrales.

5. Las exportaciones

En este apartado analizamos el volumen de exportaciones de bienes y servicios en 2019 y en 2020 para España, Italia, Francia, Reino Unido, Holanda, Polonia y Alemania. Los datos utilizados nos permiten ver como la pandemia ha reducido el volumen de exportaciones en todos los paises analizados, pero en ciertos paises la caida ha sido mayor. Esto lo podemos ver en los siguientes mapas, donde dividimos las exportaciones en tres categorias segun el volumen y cada color representa una categoria.

Como podemos observar en 2019 el país puntero en exportaciones es Alemania, seguido de Francia y Reino Unido. Los principales bienes exportados de Alemania son vehículos, maquinarias, productos químicos, productos electrónicos y productos farmacéuticos. Tras la pandemia sufrida en 2020 las exportaciones de Alemania cayeron, aunque mucho menos que las de otros paises.

En el segundo mapa llama la atención como el único país que sigue en el top de paises exportadores es Alemania, y que Francia y Reino Unido han descendido a la última categoría. Las exportaciones francesas sufrieron en el trimestre una caída del 25,5%, frente al descenso del 6,1% del primer trimestre.

El caso de Reino Unido es más expecial, ya que no solo se ve afectado por la pandemia. El Brexit cada vez está más cerca, y la incertidumbre que esto genera provoca un mayor descenso de las exportaciones.

6. Medidas de política fiscal en la pandemia.

En este apartado vamos a analizar la politica fiscal seguida por los gobiernos europeos. Estos países pertenecen a la UE y por tanto no poseen autoridad monetaria propia a la hora de expandir la oferta de dinero o de contraerla. Por tanto, su único instrumento ante las crisis es la política fiscal. Evidentemente ante la crisis sanitaria que hemos vivido en 2020 el gasto de los gobiernos europeos se ha incrementado. Dado el fuerte aumento de la deuda pública, la calidad, y no solo la cantidad, de las medidas fiscales tomadas frente a la crisis de la COVID es crucial. Podríamos distinguir dos fases en las medidas de política fiscal tomadas tanto en Alemania como en Francia y España. En la fase de contención del virus, la prioridad es mantener el tejido productivo de la economía y evitar que empresas eficientes quiebren o que empleados necesarios acaben desempleados. Los programas de ajuste temporal del empleo han sido en Alemania (Kurzarbeit), España (ERTE) y Francia (chômage partiel). Una vez pasada la crisis sanitaria, los esfuerzos deberán concentrarse en la recuperación económica. Pero, para conseguirlo, será necesario algo más que aumentar el gasto público. El shock económico ha sido tan fuerte que ya está suponiendo transformaciones estructurales en las economías. Por esta razón, las políticas deberían centrarse en la transformación económica y la reasignación de recursos.

enlace a CaixaBank Research

7. Conclusiones

Una vez analizados los datos, matemática y gráficamente, nos disponemos a resolver la cuestion que nos planteamos al inicio del informe: ¿Está ligado el impacto económico de la actual crisis sanitaria con la especialización económica de cada país?. pues bien, esta cuestion la abordaremos en diferntes partes. Para comenzar, vemos que los indicadores macroeconómicos situan los paises mas industrializados como los mejor situados para afrontar es crisis, en primer lugar Alemania, después Reino Unido y Francia, y en el último lugar España. Estos indicadores son la tasa de desempleo, el PIB, el PIB per cápita y las exportaciones. En segundo lugar tenemos la influencia de la actual crisis sanitaria, donde observmos que la mayor incidencia se registra en España, pais ligado al turismo de una manera mas intensa que el resto y por tanto con una caida mayor del PIB, asi pues las exportaciones españolas no son las mas afectados, hecho al que esta ligado la salida de Reino Unido de la Unión Europea. En cambio, paises como Francia y Reino Unido no han visto caer su PIB de forma tan brusca, como consecuencia de su ayor y mejor tejido industrial. En último lugar Alemania que es el país menos afectado, en primer lugar por su tejido industria y la especialización de su economia en ese sector. Y además sus exportaciones, pricipalmente productos tecnologicos, quimicos y farmaceuticos, que son los mas demandados en esta crisis (ya sean maquinaria para hospitales o farmacos para el control de la pandemia) Por tanto podemos concluir que la especializacion economica de cada país influye, y de manera importante, en la recuperación de estos países tras la crisis actual. Viendo una estrecha relacion entre el grado de industralizacion de los paises, y mas concretamente de especializacion en industria pesada, farmaceutica y quimica, con la velocidad de recuperacion y el impacto de esta crisis.

LS0tDQp0aXRsZTogIkltcGFjdG8gZWNvbsOzbWljbyBkZWwgQ292aWQtMTkgc2Vnw7puIG1vZGVsbyBkZSBkZXNhcnJvbGxvIGRlIGxvcyBwYcOtc2VzIg0KYXV0aG9yOiAiRGFpcm8gU21pdGggUXVpbnRlcm8gVmFyZ2FzKGRhaXF1aW5AYWx1bW5pLnV2LmVzKSAgXG5cbiBEYW5pZWxhIFZpbGxhIEFyYm9sZWRhKGRhdmlhckBhbHVtbmkudXYuZXMpICBcblxuIENhcmxvcyBDb3JhY2hhbiBQw6lyZXooY2FyY29wZTJAYWx1bW5pLnV2LmVzKSBcbiBcbiBNaWd1ZWwgU2lsbGEgUmlvcyAobWlzaXJpb3NAYWx1bW5pLnV2LmVzKS4gXG5cbiBVbml2ZXJzaXRhdCBkZSBWYWzDqG5jaWEiDQpkYXRlOiAiRGljaWVtYnJlIGRlIDIwMjAgKGFjdHVhbGl6YWRvIGVsIGByIGZvcm1hdChTeXMudGltZSgpLCAnJWQtJW0tJVknKWApIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRoZW1lOiBwYXBlcg0KICAgIGhpZ2hsaWdodDogdGV4dG1hdGUgDQogICAgdG9jOiB0cnVlDQogICAgdG9jX2RlcHRoOiAzIA0KICAgIHRvY19mbG9hdDogDQogICAgICBjb2xsYXBzZWQ6IHRydWUNCiAgICAgIHNtb290aF9zY3JvbGw6IHRydWUNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogZmFsc2UNCiAgICBkZl9wcmludDoga2FibGUNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQplZGl0b3Jfb3B0aW9uczogDQogIGNodW5rX291dHB1dF90eXBlOiBjb25zb2xlDQotLS0NCg0KYGBge3IgcGFja2FnZXMtc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShrbGlwcHkpICAjLSByZW1vdGVzOjppbnN0YWxsX2dpdGh1Yigicmxlc3VyL2tsaXBweSIpDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShldXJvc3RhdCkNCmxpYnJhcnkocmlvKQ0KbGlicmFyeShEVCkNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZ2dyZXBlbCkNCmxpYnJhcnkoZ2d0aGVtZXMpDQpsaWJyYXJ5KGNvd3Bsb3QpDQpsaWJyYXJ5KGdnYW5pbWF0ZSkNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShXREkpDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQpgYGANCg0KYGBge3IgY2h1bmstc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgZXZhbCA9IFRSVUUsIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLCANCiAgICAgICAgICAgICAgICAgICAgICAjcmVzdWx0cyA9ICJob2xkIiwNCiAgICAgICAgICAgICAgICAgICAgICBjYWNoZSA9IEZBTFNFLCBjYWNoZS5wYXRoID0gIi9jYWNoZXMvIiwgY29tbWVudCA9ICIjPiIsDQogICAgICAgICAgICAgICAgICAgICAgI2ZpZy53aWR0aCA9IDcsICNmaWcuaGVpZ2h0PSA3LCAgIA0KICAgICAgICAgICAgICAgICAgICAgICNvdXQud2lkdGggPSA3LCBvdXQuaGVpZ2h0ID0gNywNCiAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZSA9IFRSVUUsICBmaWcuc2hvdyA9ICJob2xkIiwNCiAgICAgICAgICAgICAgICAgICAgICBmaWcuYXNwID0gNy85LCBvdXQud2lkdGggPSAiNjAlIiwgZmlnLmFsaWduID0gImNlbnRlciIpDQprbml0cjo6b3B0c19jaHVuayRzZXQoZGV2ID0gInBuZyIsIGRldi5hcmdzID0gbGlzdCh0eXBlID0gImNhaXJvLXBuZyIpKQ0KYGBgDQoNCmBgYHtyIG9wdGlvbnMtc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0NCm9wdGlvbnMoc2NpcGVuID0gOTk5KSAjLSBwYXJhIHF1aXRhciBsYSBub3RhY2nDs24gY2llbnTDrWZpY2ENCm9wdGlvbnMoInlhbWwuZXZhbC5leHByIiA9IFRSVUUpIA0KYGBgDQoNCg0KYGBge3Iga2xpcHB5LCBlY2hvID0gRkFMU0V9DQprbGlwcHk6OmtsaXBweShwb3NpdGlvbiA9IGMoInRvcCIsICJyaWdodCIpKSAjLSByZW1vdGVzOjppbnN0YWxsX2dpdGh1Yigicmxlc3VyL2tsaXBweSIpDQpgYGANCg0KLS0tLS0tLS0tLS0tLS0tLS0NCg0KVHJhYmFqbyAgZWxhYm9yYWRvIHBhcmEgbGEgYXNpZ25hdHVyYSAiUHJvZ3JhbWFjacOzbiB5IG1hbmVqbyBkZSBkYXRvcyBlbiBsYSBlcmEgZGVsIEJpZyBEYXRhIiBkZSBsYSBVbml2ZXJzaXRhdCBkZSBWYWzDqG5jaWEgZHVyYW50ZSBlbCBjdXJzbyAyMDIwLTIwMjEuIExhIHDDoWdpbmEgd2ViIGRlIGxhIGFzaWduYXR1cmEgcHVlZGUgdmVyc2UgYXF1w606IDxodHRwczovL3BlcmV6cDQ0LmdpdGh1Yi5pby9pbnRyby1kcy0yMC0yMS13ZWIvPi4gTG9zIHRyYWJham9zIGRlIG1pcyBjb21wYcOxZXJvcyBkZSBjdXJzbyBwdWVkZW4gdmVyc2UgW2FxdcOtXShodHRwczovL3BlcmV6cDQ0LmdpdGh1Yi5pby9pbnRyby1kcy0yMC0yMS13ZWIvMDctdHJhYmFqb3MuaHRtbCkuDQoNCi0tLS0tLS0tLS0tLS0tLQ0KDQoNCiMjIDEuICBJbnRyb2R1Y2Npw7NuDQoNCkxhIGFjdHVhbCBjcmlzaXMgc2FuaXRhcmlhIGhhIHRlbmlkbyB1biBpbXBvcnRhbnRlIGltcGFjdG8gYSBuaXZlbCBwb2zDrXRpY28sIGVjb27Ds21pY28geSBzb2NpYWwgYSBuaXZlbCBnbG9iYWwsIHB1ZWRlIHF1ZSB1bm8gZGUgbG9zIGVmZWN0b3MgbcOhcyByZWxldmFudGUgZXMgZWwgZWNvbsOzbWljby4gQ29tbyBlc3R1ZGlhbnRlIGRlIGVjb25vbcOtYSwgYWJvcmRhbW9zIHVuIHRlbWEgZGUgYWN0dWFsaWRhZCBkZXNkZSBsYSB2ZXJ0aWVudGUgZWNvbsOzbWljYSwgcXVlIGVzIGxhIG1hdGVyaWEgcXVlIG5vcyBhdGHDsWUgeSBtb3RpdmEgdW4gYW7DoWxpc2lzIG3DoXMgZWZpY2F6Lg0KDQpMYXMgZGl2ZXJzYXMgY3Jpc2lzIHF1ZSBoYW4gc3VjZWRpZG8gZW4gZWwgw7psdGltbyBzaWdsbywgaGFuIGFiaWVydG8gZGViYXRlcyBzb2JyZSBsYXMgcG9sw610aWNhcyBtb25ldGFyaWFzIHkgZmlzY2FsZXMgYWRvcHRhZGFzIHBvciBsb3MgZGlzdGludG9zIGdvYmllcm5vcyBkZSBjYWRhIHJlZ2nDs24gZW4gbG9zIHBlcsOtb2RvcyBhbnRlcmlvcmVzIHkgcG9zdGVyaW9yZXMgYSBsYSBjcmlzaXMuIExhIGFjdHVhbCByZWNlc2nDs24gaGEgZ2VuZXJhZG8gdW5hIGNvbnRyb3ZlcnNpYSBtw6FzIGltcG9ydGFudGUgc29icmUgbGEgYWN0dWFjacOzbiBwb2zDrXRpY2EgeSBlY29uw7NtaWNhLCB5YSBxdWUgYXRlbmRpZW5kbyBhIGxhIG5hdHVyYWxlemEgZGUgw6lzdGEsIGVuIGNvbmNyZXRvIGNyaXNpcyBzYW5pdGFyaWEsIG5vIGVzIHVuIGFjb250ZWNpbWllbnRvIGbDoWNpbG1lbnRlIHByZXZpc2libGUgcGFyYSBsb3MgZ29iaWVybm9zLCB5YSBxdWUgbGFzIHNob2NrcyBlY29uw7NtaWNvcyBub3JtYWxtZW50ZSBzdWVsZW4gdGVuZXIgdW4gb3JpZ2VuIGVjb27Ds21pY28gbyBlc3RydWN0dXJhbCwgcG9yIHRhbnRvIHJlc3VsdGEgY29udmVuaWVudGUgZXN0dWRpYXIgZWwgaW1wYWN0byBlY29uw7NtaWNvIHF1ZSBoYSB0ZW5pZG8gbGEgY3Jpc2lzIGRlbCBDT1ZJRC0xOSBlbiBhbGd1bm9zIGRlIGxvcyBwYcOtc2VzIG1pZW1icm9zIGRlIGxhIFVuacOzbiBldXJvcGVhLCB5IHZlcmlmaWNhciBzaSBlbCBncmFkbyBkZSBlZmVjdG8gZXN0w6EgcmVsYWNpb25hZG8gY29uIGxhIGVzcGVjaWFsaXphY2nDs24gZWNvbsOzbWljYSBkZSBjYWRhIHJlZ2nDs24uDQoNCkxhIFVFIGVzIHVuYSB1bmnDs24gZGUgcGHDrXNlcyBkZSBkaXN0aW50YXMgY2FyYWN0ZXLDrXN0aWNhcyBlY29uw7NtaWNhcywgc29jaWFsZXMgeSBwb2zDrXRpY2FzLiBQb3IgdGFudG8sIGVsIGltcGFjdG8gZGUgdW5hIG1lZGlkYSBvIHVuIHNob2NrIGVjb27Ds21pY28gZXMgZGlzdGludG8gcGFyYSBjYWRhIHJlZ2nDs24sIGNvbiBsbyBjdWFsIGNhYmUgZXNwZXJhciBxdWUgbGEgYWN0dWFsIGNyaXNpcyBhZmVjdGUgZGUgZm9ybWEgaXJyZWd1bGFyIGEgY2FkYSB1bmEgZGUgbGFzIHJlZ2lvbmVzIGV1cm9wZWFzLCB5YSBzZWEgcG9yIHVuYSBtZWpvciBlc3RydWN0dXJhIGVjb27Ds21pY2EsIG8gbWVqb3IgZ2VzdGnDs24gZGUgbG9zIHJlY3Vyc29zIGRpc3BvbmlibGVzIHBhcmEgaGFjZXIgZnJlbnRlICBhIGxhIGNyaXNpcy4NCg0KRWwgb2JqZXRpdm8gZGVsIHByZXNlbnRlIHRyYWJham8gZXMgaGFjZXIgdW4gYW7DoWxpc2lzIGRlIGxhIHNpdHVhY2nDs24gYW50ZXJpb3JtZW50ZSBkZXNjcml0YSwgbWVkaWFudGUgZWwgdXNvIGRlIGFsZ3Vub3MgaW5kaWNhZG9yZXMgZWNvbsOzbWljb3MsIGNvbW8gZXMgZWwgUElCIHBlciBjw6FwaXRhLCB2b2zDum1lbiBkZSBleHBvcnRhY2lvbmVzIHkgbGEgcmVudGEgbmFjaW9uYWwgcG9yIHNlY3RvcmVzIHByb2R1Y3Rpdm9zLCBwYXJhIG9ic2VydmFyIGxhIGV2b2x1Y2nDs24gZWNvbsOzbWljYSBhbnRlcyB5IGRlc3B1w6lzIGRlIGxhIGNyaXNpcy4NCg0KDQpFcyBwZXJ0aW5lbnRlIGhhY2VyIHVuIHBlcXVlw7FvIHJlcGFzbyBkZSBsYSBlc3RydWN0dXJhIGVjb27Ds21pY2EsIHkgbW9kZWxvcyBkZSBkZXNhcm9sbG8gZGUgY2FkYSByZWdpw7NuIHBhcmEgc2FiZXIgY29uIGV4YWN0aXR1ZCBkZSBxdcOpIHRpcG8gZGUgcGHDrXMgc2UgdmEgYSBoYWJsYXIsIHBvciB0YW50byBzZSBwcm9jZWRlIGEgdW4gYnJldmUgYW7DoWxpc2lzIGRlIGxhIHNpdHVhY2nDs24gZGUgYWxndW5vcyBkZSBsb3MgcGHDrXNlcyBkZSBsYSBVRS4NCg0KIyMgMi4gRXNwZWNpYWxpemFjacOzbiBwcm9kdWN0aXZhDQoNCioqRXNwYcOxYSoqDQoNCiFbQmFuZGVyYSBkZSBFc3Bhw7FhXSguL2ltYWdlbmVzL0JhbmRlcmEtRXNwYcOxYS5qcGcpDQoNCkVsIFBJQiBlc3Bhw7FvbCBlbiAyMDE5IGZ1ZSBkZSAxLjI0NC43NTdNLuKCrC4gQ2FiZSBkZXN0YWNhciBsYSBmdWVydGUgY2HDrWRhIHN1ZnJpZGEgZW4gZWwgcHJpbWVyIHkgc29icmUgdG9kbyBzZWd1bmRvIHRyaW1lc3RyZSBkZSAyMDIwIGRlYmlkbyBhIGxhIHBhbmRlbWlhLiBMYSBjYcOtZGEgZnVlIGRlIHVuIDE3LDglLiBTZWfDum4gbGEgT0NERSBFc3Bhw7FhIHRlbmRyw6EgcXVlIGVzcGVyYXIgY29tbyBwcm9udG8gYSAyMDIzIHBhcmEgcmVjdXBlcmFyIGVsIG5pdmVsIGRlIFBJQiBhbnRlcmlvciBhIGxhIHBhbmRlbWlhLiBMYSBkZXVkYSBlc3Bhw7FvbGEgZXMgcHJlb2N1cGFudGUgeSBjYWRhIGTDrWEgYXVtZW50YSBtdWNow61zaW1vLiBBY3R1YWxtZW50ZSBzZSBzaXTDumEgZW4gMS4xODguODU5IG1pbGxvbmVzIGRlIGV1cm9zLiAgTGEgdGFzYSBkZSBkZXNlbXBsZW8gZXMgZGVsIDE2JSBlbiAyMDIwLg0KRW4gMjAxOCwgbG9zIHNlY3RvcmVzIG3DoXMgaW1wb3J0YW50ZXMgZGUgbGEgZWNvbm9tw61hIGVzcGHDsW9sYSBmdWVyb24gZWwgY29tZXJjaW8gbWF5b3Jpc3RhIHkgbWlub3Jpc3RhLCBlbCB0cmFuc3BvcnRlLCBsYSBob3N0ZWxlcsOtYSB5IGxhIHJlc3RhdXJhY2nDs24gKDIzLDklKSwgbGEgYWRtaW5pc3RyYWNpw7NuIHDDumJsaWNhLCBsYSBkZWZlbnNhLCBsYSBlZHVjYWNpw7NuLCBsYSBzYW5pZGFkIHkgbG9zIHNlcnZpY2lvcyBzb2NpYWxlcyAoMTgsMCUpLCB5IGxhIGluZHVzdHJpYSAoMTcsNyUpLg0KDQoNCioqRnJhbmNpYSoqDQoNCkVsIFBJQiBwZXIgY8OhcGl0YSBmdWUgZGUgMzUuOTYw4oKsIGV1cm9zLCBwb3IgbG8gcXVlIHNlIGVuY3VlbnRyYSBlbiBlbCBwdWVzdG8gMjcgZGUgbG9zIDE5NiBwYcOtc2VzIGRlbCByYW5raW5nIGRlIFBJQiBwZXIgY8OhcGl0YS4gTGEgw7psdGltYSB0YXNhIGRlIHZhcmlhY2nDs24gYW51YWwgZGVsIElQQyBmdWUgZGVsIDAsMiUuIEVsIGdhc3RvIGVuIGVkdWNhY2nDs24gcGVyIGPDoXBpdGEgZXMgZGUgMS44MDTigqwsIG11eSBzdXBlcmlvciBhIGxvcyAxMDA5IGV1cm9zIGRlIEVzcGHDsWEuIExhIHRhc2EgZGUgZGVzZW1wbGVvIGVzIGRlIDgsNiUNCkVuIDIwMTgsIGxvcyBzZWN0b3JlcyBtw6FzIGltcG9ydGFudGVzIGRlIGxhIGVjb25vbcOtYSBmcmFuY2VzYSBmdWVyb24gbGEgYWRtaW5pc3RyYWNpw7NuIHDDumJsaWNhLCBsYSBkZWZlbnNhLCBsYSBlZHVjYWNpw7NuLCBsYSBzYW5pZGFkIHkgbG9zIHNlcnZpY2lvcyBzb2NpYWxlcyAoMjIsNCUpLCBlbCBjb21lcmNpbyBtYXlvcmlzdGEgeSBtaW5vcmlzdGEsIGVsIHRyYW5zcG9ydGUsIGxhIGhvc3RlbGVyw61hIHkgbGEgcmVzdGF1cmFjacOzbiAoMTcsOCUpLCBsYXMgYWN0aXZpZGFkZXMgcHJvZmVzaW9uYWxlcywgY2llbnTDrWZpY2FzIHkgdMOpY25pY2FzLCB5IGxhcyBhY3RpdmlkYWRlcyBhZG1pbmlzdHJhdGl2YXMgeSBkZSBzZXJ2aWNpb3MgYXV4aWxpYXJlcyAoMTQsMCUpDQoNCg0KIVtCYW5kZXJhIGRlIEZyYW5jaWFdKC4vaW1hZ2VuZXMvRnJhbmNpYS5qcGcpDQoNCg0KKipBbGVtYW5pYSoqDQoNCkxhIGRldWRhIHDDumJsaWNhIGRlIEFsZW1hbmlhIGVuIDIwMTkgZnVlIGRlIDIuMDUzLjAzMyBtaWxsb25lcyBkZSBldXJvcywgY29uIHVuYSBkZXVkYSBkZWwgNTksOCUgZGVsIFBJQi4gU3UgZGV1ZGEgcGVyIGPDoXBpdGEgZXMgZGUgMjQuNjg24oKsIGV1cm9zIHBvciBoYWJpdGFudGUuIEVsIFBJQiBwZXIgY8OhcGl0YSBmdWUgZGUgNDEuMzUw4oKsIEVsIGdhc3RvIGVuIGVkdWNhY2nDs24gcGVyIGPDoXBpdGEgZXMgZGUgMS44MjcgZXVyb3MuIFBvZGVtb3MgY29uY2x1aXIgcXVlIEVzcGHDsWEgdGllbmUgdW4gZ2FzdG8gZW4gZWR1Y2FjacOzbiBtdXkgYmFqbyBjb21wYXJhZG8gY29uIGxvcyBwYcOtc2VzIGNlcmNhbm9zIGRlIGxhIFVFLiBFbCBJVkEgZ2VuZXJhbCBlcyBkZWwgMTklLCBpbmZlcmlvciBhbCAyMSUgZGUgRXNwYcOxYSB5IGFsIDIwJSBkZSBGcmFuY2lhLg0KRW4gMjAxOCwgbG9zIHNlY3RvcmVzIG3DoXMgaW1wb3J0YW50ZXMgZGUgbGEgZWNvbm9tw61hIGFsZW1hbmEgZnVlcm9uIGxhIGluZHVzdHJpYSAoMjUsOCAlKSwgbGEgYWRtaW5pc3RyYWNpw7NuIHDDumJsaWNhLCBsYSBkZWZlbnNhLCBsYSBlZHVjYWNpw7NuLCBsYSBzYW5pZGFkIHkgbG9zIHNlcnZpY2lvcyBzb2NpYWxlcyAoMTgsMiAlKSB5IGVsIGNvbWVyY2lvIG1heW9yaXN0YSB5IG1pbm9yaXN0YSwgZWwgdHJhbnNwb3J0ZSB5IGxhIGhvc3RlbGVyw61hIHkgbGEgcmVzdGF1cmFjacOzbiAoMTYsMyAlKS4NCg0KDQoNCiFbQmFuZGVyYSBkZSBBbGVtYW5pYV0oLi9pbWFnZW5lcy9BbGVtYW5pYS5qcGcpDQoNCg0KYGBge3IsIGVjaG8gPSBGQUxTRSwgZXZhbCA9IFRSVUV9DQoNCmRmX2FnciA8LSBXREkoaW5kaWNhdG9yID0gICJOVi5BR1IuVE9UTC5aUyIsIGNvdW50cnkgPSBjKCdFU1AnLCdERVUnLCdGUkEnLCAnSVRBJyksIHN0YXJ0ID0gMjAxNiwgZW5kID0gMjAxOSkNCg0KZGZfaW5kIDwtIFdESShpbmRpY2F0b3IgPSAgIk5WLklORC5UT1RMLlpTIiwgY291bnRyeSA9IGMoJ0VTUCcsJ0RFVScsJ0ZSQScsICdJVEEnKSwgc3RhcnQgPSAyMDE2LCBlbmQgPSAyMDE5KQ0KDQpkZl9tbmYgPC0gV0RJKGluZGljYXRvciA9ICAiTlYuSU5ELk1BTkYuWlMiLCBjb3VudHJ5ID0gYygnRVNQJywnREVVJywnRlJBJywgJ0lUQScpLCBzdGFydCA9IDIwMTYsIGVuZCA9IDIwMTkpDQoNCmRmX3NlcnY8LSBXREkoaW5kaWNhdG9yID0gICJOVi5TUlYuVE9UTC5aUyIsIGNvdW50cnkgPSBjKCdFU1AnLCdERVUnLCdGUkEnLCAnSVRBJyksIHN0YXJ0ID0gMjAxNiwgZW5kID0gMjAxOSkNCg0KI3VuaW1vcyBsb3MgY3VhdHJvIGRhdGFmcmFtZQ0KDQpkZl9zZWN0b3JlczwtIGlubmVyX2pvaW4oZGZfYWdyLGRmX2luZCkNCg0KZGZfc2VjdG9yZXMxPC0gaW5uZXJfam9pbihkZl9tbmYsIGRmX3NlcnYgKQ0KDQpkZl9zZWN0b3JlczM8LSBpbm5lcl9qb2luKGRmX3NlY3RvcmVzLGRmX3NlY3RvcmVzMSkNCg0KI0ZpbHRybyBsYSBjb250cmlidWNpw7NuIGRlIGxvcyBjdWF0cm8gc2VjdG9yZXMgcHJvZHVjdGl2b3MgZW4gZWwgYcOxbyAyMDE5LCBtb2RpZmljbyBsb3Mgbm9tYnJlcyBkZSBsYXMgdmFyaWFibGVzDQpkZl9zZWN0b3JlczQ8LSBkZl9zZWN0b3JlczMgJT4lIHJlbmFtZShBZ3JpY3VsdHVyYSA9IE5WLkFHUi5UT1RMLlpTLCBJbmR1c3RyaWEgPSBOVi5JTkQuVE9UTC5aUywgTWFudWZhY3R1cmEgPSBOVi5JTkQuTUFORi5aUyAsIFNlcnZpY2lvcz1OVi5TUlYuVE9UTC5aUyklPiUgc2VsZWN0ICgiY291bnRyeSIsICJ5ZWFyIiwgIkFncmljdWx0dXJhIiwgIkluZHVzdHJpYSIsICJNYW51ZmFjdHVyYSIsICJTZXJ2aWNpb3MiKQ0KDQpkZl9zZWN0PC0gZGZfc2VjdG9yZXM0ICU+JSBwaXZvdF9sb25nZXIoY29scyA9IDM6NiwgbmFtZXNfdG8gPSAic2VjdG9yZXMiKQ0KDQpkZl9zcGFpbiA8LSBkZl9zZWN0b3JlczQgJT4lIHBpdm90X2xvbmdlcihjb2xzID0gMzo2LCBuYW1lc190byA9ICJzZWN0b3JlcyIpJT4lIGZpbHRlcihjb3VudHJ5PT0gIlNwYWluIiwgeWVhcj09IDIwMTkpDQoNCmRmX2dlcm1hbnk8LSBkZl9zZWN0b3JlczQgJT4lIHBpdm90X2xvbmdlcihjb2xzID0gMzo2LCBuYW1lc190byA9ICJzZWN0b3JlcyIpJT4lIGZpbHRlcihjb3VudHJ5PT0gIkdlcm1hbnkiLCB5ZWFyPT0gMjAxOSkNCg0KZGZfZnJhbmNlPC0gZGZfc2VjdG9yZXM0ICU+JSBwaXZvdF9sb25nZXIoY29scyA9IDM6NiwgbmFtZXNfdG8gPSAic2VjdG9yZXMiKSU+JSBmaWx0ZXIoY291bnRyeT09ICJGcmFuY2UiLCB5ZWFyPT0gMjAxOSkNCg0KDQpkZl9pdGFseTwtIGRmX3NlY3RvcmVzNCAlPiUgcGl2b3RfbG9uZ2VyKGNvbHMgPSAzOjYsIG5hbWVzX3RvID0gInNlY3RvcmVzIiklPiUgZmlsdGVyKGNvdW50cnk9PSAiSXRhbHkiLCB5ZWFyPT0gMjAxOSkNCg0KDQoNCiNjcmVhciB0YWJsYQ0Ka25pdHI6OmthYmxlKGRmX3NlY3RvcmVzNCApICU+JSAga2FibGVFeHRyYTo6a2FibGVfc3R5bGluZyggYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIikgLCBmaXhlZF90aGVhZCA9IGxpc3QoZW5hYmxlZCA9IFQsIGJhY2tncm91bmQgPSAiZGFya2JsdWUiICkpDQoNCg0KDQojR3LDoWZpY29zIGRlIGFuw6FsaXNpcyBwYXJhIGFncmljdWx0dXJhIGUgaW5kdXN0cmlhDQoNCmdncGxvdChkZl9zcGFpbiwgYWVzKHg9IiIsIHk9dmFsdWUsIGZpbGw9c2VjdG9yZXMpKSArDQogIGdlb21fYmFyKHN0YXQ9ImlkZW50aXR5Iiwgd2lkdGg9MSkgKw0KICBjb29yZF9wb2xhcigieSIsIHN0YXJ0PTApICsgZ2d0aXRsZSgiRGlzdHJpYnVjacOzbiBzZWN0b3JpYWwgZGVsIFBJQiBlc3Bhw7FvbCIpDQoNCmdncGxvdChkZl9nZXJtYW55LCBhZXMoeD0iJSBzb2JyZSBlbCBvdXRwdXQiLCB5PXZhbHVlLCBmaWxsPXNlY3RvcmVzKSkgKw0KICBnZW9tX2JhcihzdGF0PSJpZGVudGl0eSIsIHdpZHRoPTEpICsNCiAgY29vcmRfcG9sYXIoInkiLCBzdGFydD0wKSArIGdndGl0bGUoIkRpc3RyaWJ1Y2nDs24gc2VjdG9yaWFsIGRlbCBQSUIgYWxlbcOhbiIpDQoNCmdncGxvdChkZl9mcmFuY2UsIGFlcyh4PSIlIHNvYnJlIGVsIG91dHB1dCIsIHk9dmFsdWUsIGZpbGw9c2VjdG9yZXMpKSArDQogIGdlb21fYmFyKHN0YXQ9ImlkZW50aXR5Iiwgd2lkdGg9MSkgKw0KICBjb29yZF9wb2xhcigieSIsIHN0YXJ0PTApICsgZ2d0aXRsZSgiRGlzdHJpYnVjacOzbiBzZWN0b3JpYWwgZGVsIFBJQiBGcmFuY8OpcyIpDQoNCiBnZ3Bsb3QoZGZfaXRhbHksIGFlcyh4PSIlIHNvYnJlIGVsIG91dHB1dCIsIHk9dmFsdWUsIGZpbGw9c2VjdG9yZXMpKSArDQogIGdlb21fYmFyKHN0YXQ9ImlkZW50aXR5Iiwgd2lkdGg9MSkgKw0KICBjb29yZF9wb2xhcigieSIsIHN0YXJ0PTApICsgZ2d0aXRsZSgiRGlzdHJpYnVjacOzbiBzZWN0b3JpYWwgZGVsIFBJQiBJdGFsaWFubyIpDQogIA0KICANCmBgYA0KDQojIyAzLiBEZW1vZ3JhZsOtYSB5IEVtcGxlbw0KIVtEZW1vZ3JhZsOtYSB5IGVtcGxlb10oLi9pbWFnZW5lcy9lbXBsZW9fY292aWQuanBnKQ0KDQoNCg0KQSBjb250aW51YWNpw7NuIHZhbW9zIGFuYWxpemFyIGRvcyB2YXJpYWJsZXMgZGVtb2dyw6FmaWNhcyBpbXBvcnRhbnRlcyBjb21vIHNvbiBsYSBwb2JsYWNpw7NuIHkgZWwgZW1wbGVvLCBkZSBhbGd1bm9zIGRlIGxvcyBwYcOtc2VzIG3DoXMgcmVwcmVzZW50YXRpdm9zIGRlIGxhIFVFIGR1cmFudGUgbGEgw7psdGltYSBkw6ljYWRhLCBlbiBjb25jcmV0byBkdXJhbnRlIGVsIHBlcsOtb2RvIDIwMDctMjAxOSwgY29uIGVsIGZuIGRlIGNvbm9jZXIgbGFzIGRpc3RpbnRhcyBzaXR1YWNpw7NuZXMgZGUgY2FkYSBwYcOtcyBlbiB1biBlbnRvcm5vIGFudGVyacOzciBhIGxhIGNyaXNpcyBzYW5pdGFyaWEuDQooRGF0b3Mgb2J0ZW5pZG9zIGRlIGV1cm9zdGF0KQ0KDQpgYGB7ciwgZWNobyA9IEZBTFNFLCBldmFsID0gVFJVRX0NCg0KI2RmX2V1cnN0IDwtIHNlYXJjaF9ldXJvc3RhdCgicG9wdWxhdGlvbiIsIHR5cGUgPSAiYWxsIikNCg0KI2VzdG9zIGRhdG9zIHNvbiBsb3NxdWUgdXRpbGl6YXLDqSBwYXJhIGdyYWZpY2FzIGxvcyBuaXZlbGVzIGRlIHBvYmxhY2nDs24geSBlbXBsZW8gDQoNCm15X3RhYmxlNSA8LSAibmFpZGFfMTBfcGUiDQojbGFiZWxfZXVyb3N0YXRfdGFibGVzKG15X3RhYmxlNSkNCmV1X3BvcGVtcF9hbnVfaW50IDwtIGdldF9ldXJvc3RhdChteV90YWJsZTUgLCB0aW1lX2Zvcm1hdCA9ICJudW0iKQ0KZXVfcG9wZW1wX2FudV9pbnQgPC0gbGFiZWxfZXVyb3N0YXQoZXVfcG9wZW1wX2FudV9pbnQpDQojZXhwb3J0KGV1X3BvcGVtcF9hbnVfaW50ICwgIi4vZGF0b3MvZXVyb3N0YXQvcG9ibGFjaW9uZW1wbGVvLmNzdiIgKQ0KDQojYXF1aSB2b3kgYSBoYWNlciBlc3RlIGRmIHRpZHksIHBhcmEgZWxsbyB2b3kgYSB1dGlsaXphciBwaXZvdF93aWRlciBwYXJhIHBvbmVyIGxhcyB2YXJpYWJsZXMgY29tbyBjb2x1bW5hcywgZmlsdHJhciBsb3MgcGFpc2VzICB5IGZlY2hhcyBlbiBsb3MgcXVlIGVzdG95IGludGVyZXNhZG8uIA0KDQpkZl9wb3BlbXAgPC0gZXVfcG9wZW1wX2FudV9pbnQgICU+JSAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IG5hX2l0ZW0sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzX2Zyb20gPSB2YWx1ZXMpDQpkZl9wb3BlbXAgPC0gZGZfcG9wZW1wICU+JSByZW5hbWUoZmVjaGEgPSB0aW1lICwgdW5pZGFkID0gdW5pdCAsIGVtcGxlb190b3RhbD1gVG90YWwgZW1wbG95bWVudCBkb21lc3RpYyBjb25jZXB0YCAsIHBvYmxhY2nDs25fdG90YWw9YFRvdGFsIHBvcHVsYXRpb24gbmF0aW9uYWwgY29uY2VwdGAsIHBhw61zID0gZ2VvKQ0KDQpkZl9wb3BlbXAgPC0gbmEub21pdChkZl9wb3BlbXApDQoNCmRmX3BvcGVtcCA8LSBkZl9wb3BlbXAgICU+JSBmaWx0ZXIocGHDrXMgJWluJSBjKCJTcGFpbiIsICJJdGFseSIsIkdlcm1hbnkgKHVudGlsIDE5OTAgZm9ybWVyIHRlcnJpdG9yeSBvZiB0aGUgRlJHKSIgLCJGcmFuY2UiLCAiR2VybWFueSIsICJVbml0ZWQgS2luZ2RvbSIsICJQb2xhbmQiICwiSG9sbGFuZCIpKSAlPiUgZmlsdGVyKGJldHdlZW4oZmVjaGEgICwgIDIwMDgsMjAxOSkpICU+JSBtdXRhdGUocG9ibGFjacOzbl90b3RhbCA9IChwb2JsYWNpw7NuX3RvdGFsLzEwMDApKQ0KDQoNCmFhPC0gZ2dwbG90KGRmX3BvcGVtcCAsIGFlcyhmZWNoYSAsIHBvYmxhY2nDs25fdG90YWwgLCBjb2xvciA9IHBhw61zKSkgK3RoZW1lX3N0YXRhKCkgKyBnZW9tX2xpbmUoKSArDQogICAgIGxhYnModGl0bGUgPSAiTml2ZWxlcyBkZSBQb2JsYWNpw7MgdG90YWwiICwNCiAgICAgICBjYXB0aW9uID0gIkRhdG9zIHByb3ZlbmllbnRlcyBkZSBsYSBBUEkgZXVyb3N0YXQiLA0KICAgICAgIHkgPSAiUG9ibGFjacOzbiIsDQogICAgICAgeCA9ICJBw7FvcyIpICsgZ2VvbV9wb2ludCgpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQ0KZ2dwbG90bHkoYWEpDQogIA0KICAgICANCmJiIDwtIGdncGxvdChkZl9wb3BlbXAgLCBhZXMoZmVjaGEgLCBlbXBsZW9fdG90YWwgLCBjb2xvciA9IHBhw61zKSkgK3RoZW1lX2dyYXkoKSArIGdlb21fbGluZSgpICsNCiAgICAgbGFicyh0aXRsZSA9ICJFdm9sdWNpw7NuIGRlbCBFbXBsZW8gdG90YWwgZGUgY2FkYSBwYcOtcyIgLA0KICAgICAgIGNhcHRpb24gPSAiRGF0b3MgcHJvdmVuaWVudGVzIGRlIGxhIEFQSSBldXJvc3RhdCIsDQogICAgICAgeSA9ICJFbXBsZW8iLA0KICAgICAgIHggPSAiQcOxb3MiKSArIGdlb21fcG9pbnQoKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikNCmdncGxvdGx5KGJiKQ0KDQoNCiNpbnRlbnRvIGHDsWFkaXIgZGF0b3MgdHJpbSBkZWwgMjAyMCBwZXJvICBhbCBmaWx0cmFyIGxhcyBmZWNoYXMgcGllcmRvIGxvcyBkYXRvcyBkZWwgZGF0YWZyYW1lIHkgbm8gcHVlZG8gaGFjZXIgZWwgZ3JhZmljbyANCiNteV90YWJsZTV0IDwtICJuYWlkcV8xMF9wZSINCiNsYWJlbF9ldXJvc3RhdF90YWJsZXMobXlfdGFibGU1dCkNCiNldV9wb3BlbXBfdHJpbV9pbnQgPC0gZ2V0X2V1cm9zdGF0KG15X3RhYmxlNXQgLCB0aW1lX2Zvcm1hdCA9ICJkYXRlIikNCiNldV9wb3BlbXBfdHJpbV9pbnQgPC0gbGFiZWxfZXVyb3N0YXQoZXVfcG9wZW1wX3RyaW1faW50KQ0KI2V4cG9ydChldV9wb3BlbXBfdHJpbV9pbnQgLCAiLi9kYXRvcy9ldXJvc3RhdC9wb2JsYWNpb25lbXBsZW90cmltLmNzdiIgKQ0KDQojYXF1aSB2b3kgYSBoYWNlciBlc3RlIGRmIHRpZHksIHBhcmEgZWxsbyB2b3kgYSB1dGlsaXphciBwaXZvdF93aWRlciBwYXJhIHBvbmVyIGxhcyB2YXJpYWJsZXMgY29tbyBjb2x1bW5hcywgZmlsdHJhciBsb3MgcGFpc2VzICB5IGZlY2hhcyBlbiBsb3MgcXVlIGVzdG95IGludGVyZXNhZG8uIA0KDQojZGZfcG9wZW1wX3RyaW0gPC0gZXVfcG9wZW1wX3RyaW1faW50ICAlPiUgIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBuYV9pdGVtLCB2YWx1ZXNfZnJvbSA9IHZhbHVlcykNCiNkZl9wb3BlbXBfdHJpbSA8LSBkZl9wb3BlbXBfdHJpbSAlPiUgcmVuYW1lKGZlY2hhID0gdGltZSAsIHVuaWRhZCA9IHVuaXQgLCBlbXBsZW9fdG90YWw9YFRvdGFsIGVtcGxveW1lbnQgZG9tZXN0aWMgY29uY2VwdGAgLCBwb2JsYWNpw7NuX3RvdGFsPWBUb3RhbCBwb3B1bGF0aW9uIG5hdGlvbmFsIGNvbmNlcHRgLCBwYcOtcyA9IGdlbykNCg0KI2RmX3BvcGVtcF90cmltIDwtIG5hLm9taXQoZGZfcG9wZW1wX3RyaW0pDQojc3RyKGRmX3BvcGVtcF90cmltKQ0KI2RmX3BvcGVtcF90cmltIDwtIGRmX3BvcGVtcF90cmltICAlPiUgZmlsdGVyKHBhw61zICVpbiUgYygiU3BhaW4iLCAiSXRhbHkiLCJHZXJtYW55ICh1bnRpbCAxOTkwIGZvcm1lciB0ZXJyaXRvcnkgb2YgdGhlIEZSRykiICwiRnJhbmNlIiwgIkdlcm1hbnkiLCAiVW5pdGVkIEtpbmdkb20iLCAiUG9sYW5kIiAsIkhvbGxhbmQiKSkgJT4lIGZpbHRlcihiZXR3ZWVuIChmZWNoYSwiMjAxNy0wMS0wMDEiLCAiMjAyMC0wOC0wMSIpICU+JSBtdXRhdGUocG9ibGFjacOzbl90b3RhbCA9IChwb2JsYWNpw7NuX3RvdGFsLzEwMDApKQ0KDQojZ2dwbG90KGRmX3BvcGVtcF90cmltICwgYWVzKGZlY2hhICwgcG9ibGFjacOzbl90b3RhbCAsIGNvbG9yID0gcGHDrXMpKSArdGhlbWVfc3RhdGEoKSArIGdlb21fbGluZSgpICtsYWJzKHRpdGxlID0gIlBvYmxhY2nDsyB0b3RhbCIgLGNhcHRpb24gPSAiRGF0b3MgcHJvdmVuaWVudGVzIGRlIGxhIEFQSSBldXJvc3RhdCIsIHkgPSAiUG9ibGFjacOzbiB0b3RhbCIsIHggPSAiVHJpbWVzdHJlcyIpICsgZ2VvbV9wb2ludCgpDQoNCg0KDQoNCiNhIGNvbnRpbnVhY2nDs24gZGVqbyBjb25zdGFuY2lhIGRlIHBhcnRlIGRlIGxhIGJ1c3F1ZWRhIGRlIGRhdG9zIGVuIGxhIGFwaSBlcnVvc3RhdCBxdWUgZmluYWxtZW50ZSBubyB1dGlsaXpvIHBvciBxdWUgc29uIGRhdG9zIHF1ZSB5YSB1c2FuIG1pcyBjb21wYcOxZXJvcyBlbiBvdHJvcyBhcGFydGFkb3MgDQojbXlfdGFibGUgPC0idGVjMDAxMTUiDQojbGFiZWxfZXVyb3N0YXRfdGFibGVzKG15X3RhYmxlKQ0KI2V1X2dkcF9yYXRlIDwtIGdldF9ldXJvc3RhdChteV90YWJsZSAsIHRpbWVfZm9ybWF0ID0gInJhdyIgLCBrZWVwRmxhZ3MgPSBUICkNCiNkZl9ldV9nZHByYXRlIDwtIGxhYmVsX2V1cm9zdGF0KGV1X2dkcF9yYXRlKQ0KI2V4cG9ydChldV9nZHBfcmF0ZSwgIi4vZGF0b3MvZXVyb3N0YXQvZ2RwdmFyaWFjaW9ucG9yY2VudHVhbC5jc3YiKQ0KDQojbXlfdGFibGUyIDwtICJuYW1xXzEwX2dkcCINCiNsYWJlbF9ldXJvc3RhdF90YWJsZXMobXlfdGFibGUyKQ0KI2V1X3JnZHBfbWFpbiA8LSBnZXRfZXVyb3N0YXQobXlfdGFibGUyKQ0KI2V1X3JnZHBfbWFpbiA8LSBsYWJlbF9ldXJvc3RhdChldV9yZ2RwX21haW4pDQojZXhwb3J0KGV1X3JnZHBfbWFpbiAsIi4vZGF0b3MvZXVyb3N0YXQvZ2RwYW5kbWFpbnZhbHVlcy5jc3YiKQ0KDQojbXlfdGFibGUzIDwtICJuYWlkcV8xMF9nZHAiDQojbGFiZWxfZXVyb3N0YXRfdGFibGVzKG15X3RhYmxlMykNCiNldV9yZ2RwX21haW5faW50IDwtIGdldF9ldXJvc3RhdChteV90YWJsZTMpDQojZXVfcmdkcF9tYWluX2ludCA8LSBsYWJlbF9ldXJvc3RhdChldV9yZ2RwX21haW5faW50KQ0KDQojbXlfdGFibGU0IDwtICJuYWlkYV8xMF9nZHAiDQojbGFiZWxfZXVyb3N0YXRfdGFibGVzKG15X3RhYmxlNCkNCiNldV9yZ2RwX21haW5fYW51X2ludCA8LSBnZXRfZXVyb3N0YXQobXlfdGFibGU0KQ0KI2V1X3JnZHBfbWFpbl9hbnVfaW50IDwtIGxhYmVsX2V1cm9zdGF0KGV1X3JnZHBfbWFpbl9hbnVfaW50KQ0KI2V4cG9ydChldV9yZ2RwX21haW5fYW51X2ludCwiLi9kYXRvcy9ldXJvc3RhdC9yZWFsZ2RwYW5pbnRlcm5hY2lvbmFsLmNzdiIgKQ0KDQpgYGANCg0KQ29tbyBwb2RlbW9zIG9ic2VydmFyIHRhbnRvIGVuIG5pdmVsZXMgZGUgcG9ibGFjacOzbiBjb21vIGVuIG5pdmVsZXMgZGUgZW1wbGVvIHRvdGFsIGFudWFsZXMgQWxlbWFuaWEgc2llbXByZSBoYSBlc3RhZG8gZW4gY2FiZXphIChkZW50cm8gZGUgbG9zIHBhw61zZXMgc2VsZWNjaW9uYWRvcyBwYXJhIGVzdGEgcmVwcmVzZW50YWNpw7NuKSwgcG9kZW1vcyBvYnNlcnZhciBxdWUsIHNpIGJpZW4gaGF5IGRpZmVyZW5jaWFzIGVuIGxvcyBuaXZlbGVzIGRlIHBvYmxhY2nDs24gZW50cmUgcGHDrXNlcywgZXN0b3MgdmFyaWFuIHBvY28gYSBsbyBsYXJnbyBkZWwgcGVyacOzZG8sIG1pZW50cmFzIHF1ZSBsb3Mgbml2ZWxlcyBkZSBlbXBsZW8gdGllbmVuIGRpc3RpbnRhcyB0ZW5kZW5jaWFzIHNlZ8O6biBlbCBwYcOtcy4gRW4gQWxlbWFuaWEsIHBvciBlamVtcGxvLCBoYW4gdGVuaWRvIHVuYSB0ZW5kZW5jaWEgY3JlY2llbnRlIGEgbG8gbGFyZ28gZGUgdG9kbyBlbCBwZXJpw7NkbywgZW1wZXphbmRvIGNvbiB1bmEgY2lmcmEgZGUgYWxyZWRlZG9yIGRlIDQwIG1pbGwgZGUgZW1wbGVhZG9zIGVuIDIwMDcsIHkgdGVybWluYW5kbyBjb24gYXByw7N4aW1hZGFtZW50ZSA2MCBtaWxsb25lcyBkZSBlbXBsZWFkb3MgZW4gMjAxOSwgbWllbnRyYXMgcXVlIGVuIG90cm9zIHBhw61zZXMgY29tbyBwb3IgZWplbXBsbyBFc3Bhw7FhLCBsYSByZWN1cGVyYWNpw7NuIGRlIGxvcyBuaXZlbGVzIGRlIGVtcGxlbyByZXNwZWN0byBkZSBsYSBhbnRlcmlvciBjcmlzaXMgZGUgMjAwOCBubyBlbXBlesOzIGEgb2N1cnJpciBzaW5vIGEgcGFydGlyIGRlIGxvcyBhw7FvcyAyMDE0LTIwMTUgeSBkZXNkZSBlbnRvbmNlcyBoYWJpYSB1bmEgdGVuZGVuY2lhIGNyZWNpZW50ZSBlbiBsb3Mgbml2ZWxlcyBkZSBlbXBsZW8gaGFzdGEgZWwgMjAxOSwgIGFsIGlndWFsIHF1ZSBlbCByZXN0byBkZSBwYcOtc2VzLCBhbGd1bm9zIGNvbW8gR3JhbiBCcmV0YcOxYSBvIEZyYW5jaWEgaW5jbHVzbyB0ZW5pYW4gbml2ZWxlcyBkZSBlbXBsZW8gZW4gMjAxOSBtdXkgc3VwZXJpb3JlcyBhIGxvcyBkZWwgMjAwNywgY29uIGxvIHF1ZSBwb2RlbW9zIGNvbmNsdWlyIHF1ZSBlbiAyMDE5IGVzdG9zIHBhw61zZXMgZXN0YWJhIGVuIHVuIHNpdHVhY2nDs24gcmVsYXRpdmFtZW50ZSBwcm9zcGVyYSBlbiBjdWFudG8gYSBuaXZlbGVzIGRlIGVtcGxlby4NCg0KDQoqKm3DoXMgaW5mb3JtYWNpw7NuIGVuOioqDQpbQmFzZSBkZSBkYXRvcyBFdXJvc3RhdF0oaHR0cHM6Ly9lYy5ldXJvcGEuZXUvZXVyb3N0YXQvc2VhcmNoP3BfYXV0aD1uTElCQ2cwZyZwX3BfaWQ9ZXN0YXRzZWFyY2hwb3J0bGV0X1dBUl9lc3RhdHNlYXJjaHBvcnRsZXQmcF9wX2xpZmVjeWNsZT0xJnBfcF9zdGF0ZT1tYXhpbWl6ZWQmcF9wX21vZGU9dmlldyZfZXN0YXRzZWFyY2hwb3J0bGV0X1dBUl9lc3RhdHNlYXJjaHBvcnRsZXRfdGhlbWU9ZW1wdHkmX2VzdGF0c2VhcmNocG9ydGxldF9XQVJfZXN0YXRzZWFyY2hwb3J0bGV0X2FjdGlvbj1zZWFyY2gmX2VzdGF0c2VhcmNocG9ydGxldF9XQVJfZXN0YXRzZWFyY2hwb3J0bGV0X2NvbGxlY3Rpb249ZW1wdHkmdGV4dD1FbXBsb3ltZW50KQ0KKipBcnRpY3VsbyByZXNwZWN0byBhIGxhIGV2b2x1Y2nDs24gZGVsIGVtcGxlbyAyMDA4LTIwMTgqKiA8aHR0cHM6Ly93d3cubnVldmF0cmlidW5hLmVzL2FydGljdWxvL2V1cm9wYTEvZXVyb3pvbmEtZW1wbGVvLXRyYWJham8tbWVyY2Fkby1sYWJvcmFsLWV1cm9wYS1ldXJvLXNhbGFyaW9zLzIwMTgwNDI0MDcxNzI5MTUxMTcxLmh0bWw+DQoNCg0KDQojIyA0LiBFbCBQSUIgcGVyIGPDoXBpdGENCg0KRW4gZXN0ZSBhcGFydGFkbyBhbmFsaXphbW9zIGxhIGV2b2x1Y2lvbiBkZWwgUElCIHBlciBjw6FwaXRhIGVudHJlIGxvcyBhw7FvcyAyMDExLCAyMDE5IFkgMjAyMCBwYXJhIEVzcGHDsWEsIEl0YWxpYSwgRnJhbmNpYSwgUmVpbm8gVW5pZG8sIEhvbGFuZGEsIFBvbG9uaWEgeSBBbGVtYW5pYS4gSGVtb3MgZGl2aWRpZG8gbG9zIG5pdmVsZXMgZGUgcmVudGEgcGVyIGPDoXBpdGEgZW4gNyBjYXRlZ29yaWFzIHBhcmEgcG9kZXIgdmlzdWFsaXphciBjb24gY2xhcmlkYWQgbGEgaW50ZWdyYWNpw7NuIHJlYWwgZW50cmUgcGFpc2VzIGRlIGxhIFVFIGNvbiBtb2RlbG9zIGRlIGRlc2Fycm9sbG8gZGlzdGludG9zLg0KDQoNCmBgYHtyLCBlY2hvID0gRkFMU0UsIGV2YWwgPSBUUlVFfQ0KDQpjb250ZW5pZG9fZXVyb3N0YXQgPC0gZ2V0X2V1cm9zdGF0X3RvYygpDQoNClBJQnBjIDwtIGdldF9ldXJvc3RhdChpZD0ic2RnXzA4XzEwIiwgdGltZV9mb3JtYXQgPSAibnVtIikNCg0KREYgPC0gUElCcGMgJT4lIGZpbHRlcih0aW1lID4gMjAxMCkgJT4lIGZpbHRlcihnZW8gJWluJSBjKCJFUyIsICJGUiIgLCAiREUiLCAiSVQiLCAiU1ciLCAiVUsiICwgIlBMIiAsICAiTkwiKSklPiUgZmlsdGVyKHVuaXQgPT0gIkNMVjEwX0VVUl9IQUIiKQ0KDQpERjIwMTkgPC0gREYgJT4lIGZpbHRlcih0aW1lID09IDIwMTkpDQpERjIwMTggPC0gREYgJT4lIGZpbHRlcih0aW1lID09IDIwMTgpDQpERjIwMTEgPC0gREYgJT4lIGZpbHRlcih0aW1lID09IDIwMTEpDQoNCg0KDQoNCmRmX3ggPC0gREYyMDE5ICU+JSBmaWx0ZXIodGltZSA9PSAiMjAxOSIpICU+JQ0KICAgICAgICBtdXRhdGUoY2F0ID0gY3V0X3RvX2NsYXNzZXModmFsdWVzLCBuID0gNywgZGVjaW1hbHMgPSAxKSkNCg0KZ2VvbWV0cmlhcyA8LSBnZXRfZXVyb3N0YXRfZ2Vvc3BhdGlhbChyZXNvbHV0aW9uID0gIjIwIiwgbnV0c19sZXZlbCA9ICIwIikNCg0KDQptYXBkYXRhIDwtIGlubmVyX2pvaW4oZ2VvbWV0cmlhcywgZGZfeCwgYnkgPSBjKCJnZW8iID0gImdlbyIpKQ0KDQpQSUJwY19tYXBhIDwtIGdldF9ldXJvc3RhdF9nZW9zcGF0aWFsKG51dHNfbGV2ZWwgPSAwKSAlPiUNCiAgcmlnaHRfam9pbihERjIwMTkpICU+JQ0KICBtdXRhdGUoY2F0ZWdvcmlhcyA9IGN1dF90b19jbGFzc2VzKHZhbHVlcywgbj04LCBkZWNpbWFscz0xKSkNCg0KDQoNCg0KDQogZ2dwbG90KFBJQnBjX21hcGEsIGFlcyhmaWxsPWNhdGVnb3JpYXMpKSArDQogIGdlb21fc2YoY29sb3IgPSBhbHBoYSgid2hpdGUiLCAxLzIpLCBhbHBoYT0gMC45KSArDQogIHhsaW0oYygtMjAsIDQ0KSkgKw0KICB5bGltKGMoMzUsIDcwKSkgKw0KICBsYWJzKHRpdGxlID0gIlBJQiBwZXIgY2FwaXRhIDIwMTkiLA0KICAgICAgIHN1YnRpdGxlID0gIiIsDQogICAgICAgY2FwdGlvbiA9ICJTb3VyY2U6IEVsYWJvcmFjaW9uIHByb3BpYSIsDQogICAgICAgZmlsbD0gIkV1cm9zIikrDQogIHRoZW1lX21pbmltYWwoKQ0KDQoNCg0KDQoNCmRmX3gyMDExIDwtIERGMjAxMSAlPiUgZmlsdGVyKHRpbWUgPT0gIjIwMTEiKSAlPiUNCiAgICAgICAgbXV0YXRlKGNhdCA9IGN1dF90b19jbGFzc2VzKHZhbHVlcywgbiA9IDcsIGRlY2ltYWxzID0gMSkpDQoNCmdlb21ldHJpYXMxMSA8LSBnZXRfZXVyb3N0YXRfZ2Vvc3BhdGlhbChyZXNvbHV0aW9uID0gIjIwIiwgbnV0c19sZXZlbCA9ICIwIikNCg0KDQptYXBkYXRhMTEgPC0gaW5uZXJfam9pbihnZW9tZXRyaWFzMTEsIGRmX3gyMDExLCBieSA9IGMoImdlbyIgPSAiZ2VvIikpDQoNClBJQnBjX21hcGExMSA8LSBnZXRfZXVyb3N0YXRfZ2Vvc3BhdGlhbChudXRzX2xldmVsID0gMCkgJT4lDQogIHJpZ2h0X2pvaW4oREYyMDExKSAlPiUNCiAgbXV0YXRlKGNhdGVnb3JpYXMgPSBjdXRfdG9fY2xhc3Nlcyh2YWx1ZXMsIG49OCwgZGVjaW1hbHM9MSkpDQoNCg0KDQoNCmdncGxvdChQSUJwY19tYXBhMTEsIGFlcyhmaWxsPWNhdGVnb3JpYXMpKSArDQogIGdlb21fc2YoY29sb3IgPSBhbHBoYSgid2hpdGUiLCAxLzIpLCBhbHBoYT0gMC45KSArDQogIHhsaW0oYygtMjAsIDQ0KSkgKw0KICB5bGltKGMoMzUsIDcwKSkgKw0KICBsYWJzKHRpdGxlID0gIlBJQiBwZXIgY2FwaXRhIDIwMTEiLA0KICAgICAgIHN1YnRpdGxlID0gIiIsDQogICAgICAgY2FwdGlvbiA9ICJTb3VyY2U6IEVsYWJvcmFjaW9uIHByb3BpYSIsDQogICAgICAgZmlsbD0gIkV1cm9zIikrDQogIHRoZW1lX21pbmltYWwoKQ0KDQoNCg0KUElCcGNTSU5FVEkgPC0gZ2V0X2V1cm9zdGF0KGlkPSJuYW1xXzEwX3BjIiwgdGltZV9mb3JtYXQgPSAibnVtIikNClBJQlBDMjAyMFBDIDwtbGFiZWxfZXVyb3N0YXQoUElCcGNTSU5FVEkpDQoNCkRGMjAyMHBpYnBjIDwtIFBJQnBjU0lORVRJICU+JSBmaWx0ZXIodGltZSA9PSAyMDIwLjUpICU+JSBmaWx0ZXIoZ2VvICVpbiUgYygiRVMiLCAiRlIiICwgIkRFIiwgIklUIiwgIlNXIiwgIlVLIiAsICJQTCIgLCAgIk5MIikpJT4lIGZpbHRlcih1bml0ID09ICJDTFYxMF9FVVJfSEFCIikgJT4lICBmaWx0ZXIobmFfaXRlbSA9PSAiQjFHUSIpDQoNCg0KDQoNCg0KZGZfeHBpYjIwMjAgPC0gREYyMDIwcGlicGMgJT4lIGZpbHRlcih0aW1lID09ICIyMDIwLjUiKSAlPiUNCiAgICAgICAgbXV0YXRlKGNhdCA9IGN1dF90b19jbGFzc2VzKHZhbHVlcywgbiA9IDcsIGRlY2ltYWxzID0gMSkpDQoNCmdlb21ldHJpYXMyMDIwcGliIDwtIGdldF9ldXJvc3RhdF9nZW9zcGF0aWFsKHJlc29sdXRpb24gPSAiMjAiLCBudXRzX2xldmVsID0gIjAiKQ0KDQoNCm1hcGRhdGEyMDIwcGliIDwtIGlubmVyX2pvaW4oZ2VvbWV0cmlhczIwMjBwaWIsIGRmX3hwaWIyMDIwLCBieSA9IGMoImdlbyIgPSAiZ2VvIikpDQoNClBJQnBjX21hcGEyMDIwcGliIDwtIGdldF9ldXJvc3RhdF9nZW9zcGF0aWFsKG51dHNfbGV2ZWwgPSAwKSAlPiUNCiAgcmlnaHRfam9pbihERjIwMjBwaWJwYykgJT4lDQogIG11dGF0ZShjYXRlZ29yaWFzID0gY3V0X3RvX2NsYXNzZXModmFsdWVzLCBuPTgsIGRlY2ltYWxzPTEpKQ0KDQoNCg0KDQoNCmdncGxvdChQSUJwY19tYXBhMjAyMHBpYiwgYWVzKGZpbGw9Y2F0ZWdvcmlhcykpICsNCiAgZ2VvbV9zZihjb2xvciA9IGFscGhhKCJ3aGl0ZSIsIDEvMiksIGFscGhhPSAwLjkpICsNCiAgeGxpbShjKC0yMCwgNDQpKSArDQogIHlsaW0oYygzNSwgNzApKSArDQogIGxhYnModGl0bGUgPSAiUElCIHBlciBjYXBpdGEgMjAyMCIsDQogICAgICAgc3VidGl0bGUgPSAiIiwNCiAgICAgICBjYXB0aW9uID0gIlNvdXJjZTogRWxhYm9yYWNpb24gcHJvcGlhIiwNCiAgICAgICBmaWxsPSAiRXVyb3MiKSsNCiAgdGhlbWVfbWluaW1hbCgpDQoNCmBgYA0KDQpFbCByZXN1bHRhZG8gZXMgY2xhcm8sIHkgZXMgcXVlIEhvbGFuZGEgeSBBbGVtYW5pYSBlc3RhYmFuIHkgZXN0YW4gZW4gdW4gbml2ZWwgZGUgcmVudGEgcGVyIGPDoXBpdGEgbXV5IHN1cGVyaW9yIGFsIGRlIHBhaXNlcyBjb21vIEVzcGHDsWEuIEVzcGHDsWEgZXN0w6EgZW4gbGEgcGVuw7psdGltYSBjYXRlZ29yaWEsIGNlcmNhIGRlbCBuaXZlbCBkZSBQb2xvbmlhLiBQb2RlbW9zIGNvbmNsdWlyIGVuIGVzdGUgYXBhcnRhZG8gcXVlIGNvbiBudWVzdHJvIG1vZGVsbyBkZSBkZXNhcnJvbGxvIGJhc2FkbyBlbiBsb3Mgc2VydmljaW9zIHkgZW4gZXNwZWNpYWwgZW4gZWwgdHVyaXNtbywgZWwgbml2ZWwgZGUgcmVudGEgcGVyIGPDoXBpdGEgZW4gbG9zIMO6bHRpbW9zIDkgYcOxb3Mgbm8gaGEgZXZvbHVjaW9uYWRvIGNhc2kgbmFkYS4gU2VndWltb3MgYSBsYSBjb2xhIGRlIGxvcyBwYWlzZXMgZGVzYXJyb2xsYWRvcyB5IG5pIGRlIGNlcmNhIGVzdGFtb3Mgc3VmcmllbmRvIHVuYSBpbnRlZ3JhY2nDs24gY29uIHBhaXNlcyBwdW50ZXJvcyBjb21vIEFsZW1hbmlhLg0KTm8gaGF5IGRpZmVyZW5jaWEgY2FzaSBlbnRyZSBhbWJvcyBtYXBhcywgeSBlcyBxdWUgZW4gZXN0b3MgYcOxb3MgZGUgcmVjdXBlcmFjacOzbiBlY29ub21pY2EgdHJhcyBsYSBjcmlzaXMgZGUgMjAwOCBsb3MgcGHDrXNlcyBoYW4gY3JlY2lkbyBhbCB1bsOtc29ubyB5IGxvcyBxdWUgZXJhbiBsw61kZXJlcyBlY29uw7NtaWNvcyBsbyBzaWd1ZW4gc2llbmRvLg0KDQpFbCAyMDIwIGhhIHByb3ZvY2FkbyBjYWlkYXMgZW4gbG9zIG5pdmVsZXMgZGUgUElCIHBlciBjw6FwaXRhIGVuIHRvZG9zIGxvcyBwYWlzZXMgYW5hbGl6YWRvcywgcGVybyBubyBoYSBhbHRlcmFkbyBsb3MgbWFwYXMuIEVzIGRlY2lyLCBlbCBjb3ZpZCBubyBoYSBwcm92b2NhZG8gbmkgaW50ZWdyYWNpw7NuIG5pIGRlc2ludGVncmFjacOzbiByZWFsIGVudHJlIHBhaXNlcy4gQ2FiZSBkZXN0YWNhciBxdWUgbG9zIGRhdG9zIHV0aWx6YWRvcyBwYXJhIGVsIDIwMjAgc29uIHNlbWVzdHJhbGVzLg0KDQojIyA1LiBMYXMgZXhwb3J0YWNpb25lcw0KDQpFbiBlc3RlIGFwYXJ0YWRvIGFuYWxpemFtb3MgZWwgdm9sdW1lbiBkZSBleHBvcnRhY2lvbmVzIGRlIGJpZW5lcyB5IHNlcnZpY2lvcyBlbiAyMDE5IHkgZW4gMjAyMCBwYXJhIEVzcGHDsWEsIEl0YWxpYSwgRnJhbmNpYSwgUmVpbm8gVW5pZG8sIEhvbGFuZGEsIFBvbG9uaWEgeSBBbGVtYW5pYS4gTG9zIGRhdG9zIHV0aWxpemFkb3Mgbm9zIHBlcm1pdGVuIHZlciBjb21vIGxhIHBhbmRlbWlhIGhhIHJlZHVjaWRvIGVsIHZvbHVtZW4gZGUgZXhwb3J0YWNpb25lcyBlbiB0b2RvcyBsb3MgcGFpc2VzIGFuYWxpemFkb3MsIHBlcm8gZW4gY2llcnRvcyBwYWlzZXMgbGEgY2FpZGEgaGEgc2lkbyBtYXlvci4gRXN0byBsbyBwb2RlbW9zIHZlciBlbiBsb3Mgc2lndWllbnRlcyBtYXBhcywgZG9uZGUgZGl2aWRpbW9zIGxhcyBleHBvcnRhY2lvbmVzIGVuIHRyZXMgY2F0ZWdvcmlhcyBzZWd1biBlbCB2b2x1bWVuIHkgY2FkYSBjb2xvciByZXByZXNlbnRhIHVuYSBjYXRlZ29yaWEuIA0KDQpgYGB7ciwgZWNobyA9IEZBTFNFLCBldmFsID0gVFJVRX0NCmNvbnRlbmlkb19ldXJvc3RhdCA8LSBnZXRfZXVyb3N0YXRfdG9jKCkNCmV4cG9ydCA8LSBnZXRfZXVyb3N0YXQoaWQ9Im5hbXFfMTBfZXhpIiwgdGltZV9mb3JtYXQgPSAibnVtIikNCg0KZXhwb3J0X2xhYmVscyA8LSBsYWJlbF9ldXJvc3RhdChleHBvcnQpDQoNCkRGZXhwb3J0XzIwMTlfNSA8LSBleHBvcnQgJT4lIGZpbHRlcih0aW1lID09IDIwMTkuNSkgJT4lIGZpbHRlcihnZW8gJWluJSBjKCJFUyIsICJGUiIgLCAiREUiLCAiSVQiLCAiU1ciLCAiVUsiICwgIlBMIiAsICAiTkwiKSklPiUgZmlsdGVyKHVuaXQgPT0gIkNQX01FVVIiKSAlPiUgZmlsdGVyKG5hX2l0ZW0gPT0gIlA2IikgJT4lIGZpbHRlcihzX2FkaiA9PSAiTlNBIikNCg0KDQpERmV4cG9ydDIwMjBfNTAgPC0gZXhwb3J0ICU+JSBmaWx0ZXIodGltZSA9PSAyMDIwLjUpICU+JSBmaWx0ZXIoZ2VvICVpbiUgYygiRVMiLCAiRlIiICwgIkRFIiwgIklUIiwgIlNXIiwgIlVLIiAsICJQTCIgLCAgIk5MIikpJT4lIGZpbHRlcih1bml0ID09ICJDUF9NRVVSIikgJT4lIGZpbHRlcihuYV9pdGVtID09ICJQNiIpICU+JSBmaWx0ZXIoc19hZGogPT0gIk5TQSIpDQoNCg0KZGZfZXgyMDE5IDwtIERGZXhwb3J0XzIwMTlfNSAlPiUgZmlsdGVyKHRpbWUgPT0gIjIwMTkuNSIpICU+JQ0KICAgICAgICBtdXRhdGUoY2F0ID0gY3V0X3RvX2NsYXNzZXModmFsdWVzLCBuID0gNywgZGVjaW1hbHMgPSAxKSkNCg0KZ2VvbWV0cmlhczE5IDwtIGdldF9ldXJvc3RhdF9nZW9zcGF0aWFsKHJlc29sdXRpb24gPSAiMjAiLCBudXRzX2xldmVsID0gIjAiKQ0KDQoNCm1hcGRhdGExOSA8LSBpbm5lcl9qb2luKGdlb21ldHJpYXMxOSwgZGZfZXgyMDE5LCBieSA9IGMoImdlbyIgPSAiZ2VvIikpDQoNCk1BUEFfRVhQT1JUXzIwMTkgPC0gZ2V0X2V1cm9zdGF0X2dlb3NwYXRpYWwobnV0c19sZXZlbCA9IDApICU+JQ0KICByaWdodF9qb2luKERGZXhwb3J0XzIwMTlfNSkgJT4lDQogIG11dGF0ZShjYXRlZ29yaWFzID0gY3V0X3RvX2NsYXNzZXModmFsdWVzLCBuPTMsIGRlY2ltYWxzPTEpKQ0KDQoNCg0KDQoNCg0KZ2dwbG90KE1BUEFfRVhQT1JUXzIwMTksIGFlcyhmaWxsPWNhdGVnb3JpYXMpKSArDQogIGdlb21fc2YoY29sb3IgPSBhbHBoYSgiYmxhY2siLCAxLzIpLCBhbHBoYT0gMC45KSArDQogIHhsaW0oYygtMjAsIDQ0KSkgKw0KICB5bGltKGMoMzUsIDcwKSkgKw0KICBsYWJzKHRpdGxlID0gIkV4cG9ydGFjaW9uZXMgMjAxOSIsDQogICAgICAgc3VidGl0bGUgPSAiIiwNCiAgICAgICBjYXB0aW9uID0gIlNvdXJjZTogRWxhYm9yYWNpb24gcHJvcGlhIiwNCiAgICAgICBmaWxsPSAiTWlsbG9uZXMgZGUgZXVyb3MiKSsNCiAgdGhlbWVfZGFyaygpDQoNCg0KDQoNCmRmX2V4MjAyMDwtIERGZXhwb3J0MjAyMF81MCAlPiUgZmlsdGVyKHRpbWUgPT0gIjIwMjAuNSIpICU+JQ0KICAgICAgICBtdXRhdGUoY2F0ID0gY3V0X3RvX2NsYXNzZXModmFsdWVzLCBuID0gNywgZGVjaW1hbHMgPSAxKSkNCg0KZ2VvbWV0cmlhczIwIDwtIGdldF9ldXJvc3RhdF9nZW9zcGF0aWFsKHJlc29sdXRpb24gPSAiMjAiLCBudXRzX2xldmVsID0gIjAiKQ0KDQoNCm1hcGRhdGEyMCA8LSBpbm5lcl9qb2luKGdlb21ldHJpYXMyMCwgZGZfZXgyMDIwLCBieSA9IGMoImdlbyIgPSAiZ2VvIikpDQoNCk1BUEFfRVhQT1JUXzIwMjAgPC0gZ2V0X2V1cm9zdGF0X2dlb3NwYXRpYWwobnV0c19sZXZlbCA9IDApICU+JQ0KICByaWdodF9qb2luKERGZXhwb3J0MjAyMF81MCkgJT4lDQogIG11dGF0ZShjYXRlZ29yaWFzID0gY3V0X3RvX2NsYXNzZXModmFsdWVzLCBuPTMsIGRlY2ltYWxzPTEpKQ0KDQoNCg0KDQoNCg0KZ2dwbG90KE1BUEFfRVhQT1JUXzIwMjAsIGFlcyhmaWxsPWNhdGVnb3JpYXMpKSArDQogIGdlb21fc2YoY29sb3IgPSBhbHBoYSgiYmxhY2siLCAxLzIpLCBhbHBoYT0gMC45KSArDQogIHhsaW0oYygtMjAsIDQ0KSkgKw0KICB5bGltKGMoMzUsIDcwKSkgKw0KICBsYWJzKHRpdGxlID0gIkV4cG9ydGFjaW9uZXMgMjAyMCIsDQogICAgICAgc3VidGl0bGUgPSAiIiwNCiAgICAgICBjYXB0aW9uID0gIlNvdXJjZTogRWxhYm9yYWNpb24gcHJvcGlhIiwNCiAgICAgICBmaWxsPSAiTWlsbG9uZXMgZGUgZXVyb3MiKSsNCiAgdGhlbWVfZGFyaygpDQoNCg0KYGBgDQoNCg0KQ29tbyBwb2RlbW9zIG9ic2VydmFyIGVuIDIwMTkgZWwgcGHDrXMgcHVudGVybyBlbiBleHBvcnRhY2lvbmVzIGVzIEFsZW1hbmlhLCBzZWd1aWRvIGRlIEZyYW5jaWEgeSBSZWlubyBVbmlkby4gTG9zIHByaW5jaXBhbGVzIGJpZW5lcyBleHBvcnRhZG9zIGRlIEFsZW1hbmlhIHNvbiB2ZWjDrWN1bG9zLCBtYXF1aW5hcmlhcywgcHJvZHVjdG9zIHF1w61taWNvcywgcHJvZHVjdG9zIGVsZWN0csOzbmljb3MgeSBwcm9kdWN0b3MgZmFybWFjw6l1dGljb3MuIFRyYXMgbGEgcGFuZGVtaWEgc3VmcmlkYSBlbiAyMDIwIGxhcyBleHBvcnRhY2lvbmVzIGRlIEFsZW1hbmlhIGNheWVyb24sIGF1bnF1ZSBtdWNobyBtZW5vcyBxdWUgbGFzIGRlIG90cm9zIHBhaXNlcy4NCg0KRW4gZWwgc2VndW5kbyBtYXBhIGxsYW1hIGxhIGF0ZW5jacOzbiBjb21vIGVsIMO6bmljbyBwYcOtcyBxdWUgc2lndWUgZW4gZWwgdG9wIGRlIHBhaXNlcyBleHBvcnRhZG9yZXMgZXMgQWxlbWFuaWEsIHkgcXVlIEZyYW5jaWEgeSBSZWlubyBVbmlkbyBoYW4gZGVzY2VuZGlkbyBhIGxhIMO6bHRpbWEgY2F0ZWdvcsOtYS4gTGFzIGV4cG9ydGFjaW9uZXMgZnJhbmNlc2FzIHN1ZnJpZXJvbiBlbiBlbCB0cmltZXN0cmUgdW5hIGNhw61kYSBkZWwgMjUsNSUsIGZyZW50ZSBhbCBkZXNjZW5zbyBkZWwgNiwxJSBkZWwgcHJpbWVyIHRyaW1lc3RyZS4NCg0KRWwgY2FzbyBkZSBSZWlubyBVbmlkbyBlcyBtw6FzIGV4cGVjaWFsLCB5YSBxdWUgbm8gc29sbyBzZSB2ZSBhZmVjdGFkbyBwb3IgbGEgcGFuZGVtaWEuIEVsIEJyZXhpdCBjYWRhIHZleiBlc3TDoSBtw6FzIGNlcmNhLCB5IGxhIGluY2VydGlkdW1icmUgcXVlIGVzdG8gZ2VuZXJhIHByb3ZvY2EgdW4gbWF5b3IgZGVzY2Vuc28gZGUgbGFzIGV4cG9ydGFjaW9uZXMuDQoNCiMjIDYuIE1lZGlkYXMgZGUgcG9sw610aWNhIGZpc2NhbCBlbiBsYSBwYW5kZW1pYS4NCg0KRW4gZXN0ZSBhcGFydGFkbyB2YW1vcyBhIGFuYWxpemFyIGxhIHBvbGl0aWNhIGZpc2NhbCBzZWd1aWRhIHBvciBsb3MgZ29iaWVybm9zIGV1cm9wZW9zLiBFc3RvcyBwYcOtc2VzIHBlcnRlbmVjZW4gYSBsYSBVRSB5IHBvciB0YW50byBubyBwb3NlZW4gYXV0b3JpZGFkIG1vbmV0YXJpYSBwcm9waWEgYSBsYSBob3JhIGRlIGV4cGFuZGlyIGxhIG9mZXJ0YSBkZSBkaW5lcm8gbyBkZSBjb250cmFlcmxhLiBQb3IgdGFudG8sIHN1IMO6bmljbyBpbnN0cnVtZW50byBhbnRlIGxhcyBjcmlzaXMgZXMgbGEgcG9sw610aWNhIGZpc2NhbC4gRXZpZGVudGVtZW50ZSBhbnRlIGxhIGNyaXNpcyBzYW5pdGFyaWEgcXVlIGhlbW9zIHZpdmlkbyBlbiAyMDIwIGVsIGdhc3RvIGRlIGxvcyBnb2JpZXJub3MgZXVyb3Blb3Mgc2UgaGEgaW5jcmVtZW50YWRvLiBEYWRvIGVsIGZ1ZXJ0ZSBhdW1lbnRvIGRlIGxhIGRldWRhIHDDumJsaWNhLCBsYSBjYWxpZGFkLCB5IG5vIHNvbG8gbGEgY2FudGlkYWQsIGRlIGxhcyBtZWRpZGFzIGZpc2NhbGVzIHRvbWFkYXMgZnJlbnRlIGEgbGEgY3Jpc2lzIGRlIGxhIENPVklEIGVzIGNydWNpYWwuDQpQb2Ryw61hbW9zIGRpc3Rpbmd1aXIgZG9zIGZhc2VzIGVuIGxhcyBtZWRpZGFzIGRlIHBvbMOtdGljYSBmaXNjYWwgdG9tYWRhcyB0YW50byBlbiBBbGVtYW5pYSBjb21vIGVuIEZyYW5jaWEgeSBFc3Bhw7FhLiBFbiBsYSBmYXNlIGRlIGNvbnRlbmNpw7NuIGRlbCB2aXJ1cywgbGEgcHJpb3JpZGFkIGVzIG1hbnRlbmVyIGVsIHRlamlkbyBwcm9kdWN0aXZvIGRlIGxhIGVjb25vbcOtYSB5IGV2aXRhciBxdWUgZW1wcmVzYXMgZWZpY2llbnRlcyBxdWllYnJlbiBvIHF1ZSBlbXBsZWFkb3MgbmVjZXNhcmlvcyBhY2FiZW4gZGVzZW1wbGVhZG9zLiBMb3MgcHJvZ3JhbWFzIGRlIGFqdXN0ZSB0ZW1wb3JhbCBkZWwgZW1wbGVvIGhhbiBzaWRvIGVuIEFsZW1hbmlhIChLdXJ6YXJiZWl0KSwgRXNwYcOxYSAoRVJURSkgeSBGcmFuY2lhIChjaMO0bWFnZSBwYXJ0aWVsKS4NClVuYSB2ZXogcGFzYWRhIGxhIGNyaXNpcyBzYW5pdGFyaWEsIGxvcyBlc2Z1ZXJ6b3MgZGViZXLDoW4gY29uY2VudHJhcnNlIGVuIGxhIHJlY3VwZXJhY2nDs24gZWNvbsOzbWljYS4gUGVybywgcGFyYSBjb25zZWd1aXJsbywgc2Vyw6EgbmVjZXNhcmlvIGFsZ28gbcOhcyBxdWUgYXVtZW50YXIgZWwgZ2FzdG8gcMO6YmxpY28uIEVsIHNob2NrIGVjb27Ds21pY28gaGEgc2lkbyB0YW4gZnVlcnRlIHF1ZSB5YSBlc3TDoSBzdXBvbmllbmRvIHRyYW5zZm9ybWFjaW9uZXMgZXN0cnVjdHVyYWxlcyBlbiBsYXMgZWNvbm9tw61hcy4gUG9yIGVzdGEgcmF6w7NuLCBsYXMgcG9sw610aWNhcyBkZWJlcsOtYW4gY2VudHJhcnNlIGVuIGxhIHRyYW5zZm9ybWFjacOzbiBlY29uw7NtaWNhIHkgbGEgcmVhc2lnbmFjacOzbiBkZSByZWN1cnNvcy4NCg0KW2VubGFjZSBhIENhaXhhQmFuayBSZXNlYXJjaF0oaHR0cHM6Ly93d3cuY2FpeGFiYW5rcmVzZWFyY2guY29tL2VzL2Vjb25vbWlhLXktbWVyY2Fkb3Mvc2VjdG9yLXB1YmxpY28vZWZlY3RpdmlkYWQtcG9saXRpY2EtZmlzY2FsLXRpZW1wb3MtY292aWQpDQoNCiMjICA3LiBDb25jbHVzaW9uZXMNCg0KVW5hIHZleiBhbmFsaXphZG9zIGxvcyBkYXRvcywgbWF0ZW3DoXRpY2EgeSBncsOhZmljYW1lbnRlLCBub3MgZGlzcG9uZW1vcyBhIHJlc29sdmVyIGxhIGN1ZXN0aW9uIHF1ZSBub3MgcGxhbnRlYW1vcyBhbCBpbmljaW8gZGVsIGluZm9ybWU6IMK/RXN0w6EgbGlnYWRvIGVsIGltcGFjdG8gZWNvbsOzbWljbyBkZSBsYSBhY3R1YWwgY3Jpc2lzIHNhbml0YXJpYSBjb24gbGEgZXNwZWNpYWxpemFjacOzbiBlY29uw7NtaWNhIGRlIGNhZGEgcGHDrXM/LiBwdWVzIGJpZW4sIGVzdGEgY3Vlc3Rpb24gbGEgYWJvcmRhcmVtb3MgZW4gZGlmZXJudGVzIHBhcnRlcy4gDQpQYXJhIGNvbWVuemFyLCB2ZW1vcyBxdWUgbG9zIGluZGljYWRvcmVzIG1hY3JvZWNvbsOzbWljb3Mgc2l0dWFuIGxvcyBwYWlzZXMgbWFzIGluZHVzdHJpYWxpemFkb3MgY29tbyBsb3MgbWVqb3Igc2l0dWFkb3MgcGFyYSBhZnJvbnRhciBlcyBjcmlzaXMsIGVuIHByaW1lciBsdWdhciBBbGVtYW5pYSwgZGVzcHXDqXMgUmVpbm8gVW5pZG8geSBGcmFuY2lhLCB5IGVuIGVsIMO6bHRpbW8gbHVnYXIgRXNwYcOxYS4gRXN0b3MgaW5kaWNhZG9yZXMgc29uIGxhIHRhc2EgZGUgZGVzZW1wbGVvLCBlbCBQSUIsIGVsIFBJQiBwZXIgY8OhcGl0YSB5IGxhcyBleHBvcnRhY2lvbmVzLiANCkVuIHNlZ3VuZG8gbHVnYXIgdGVuZW1vcyBsYSBpbmZsdWVuY2lhIGRlIGxhIGFjdHVhbCBjcmlzaXMgc2FuaXRhcmlhLCBkb25kZSBvYnNlcnZtb3MgcXVlIGxhIG1heW9yIGluY2lkZW5jaWEgc2UgcmVnaXN0cmEgZW4gRXNwYcOxYSwgcGFpcyBsaWdhZG8gYWwgdHVyaXNtbyBkZSB1bmEgbWFuZXJhIG1hcyBpbnRlbnNhIHF1ZSBlbCByZXN0byB5IHBvciB0YW50byBjb24gdW5hIGNhaWRhIG1heW9yIGRlbCBQSUIsIGFzaSBwdWVzIGxhcyBleHBvcnRhY2lvbmVzIGVzcGHDsW9sYXMgbm8gc29uIGxhcyBtYXMgYWZlY3RhZG9zLCBoZWNobyBhbCBxdWUgZXN0YSBsaWdhZG8gbGEgc2FsaWRhIGRlIFJlaW5vIFVuaWRvIGRlIGxhIFVuacOzbiBFdXJvcGVhLiBFbiBjYW1iaW8sIHBhaXNlcyBjb21vIEZyYW5jaWEgeSBSZWlubyBVbmlkbyBubyBoYW4gdmlzdG8gY2FlciBzdSBQSUIgZGUgZm9ybWEgdGFuIGJydXNjYSwgY29tbyBjb25zZWN1ZW5jaWEgZGUgc3UgYXlvciB5IG1lam9yIHRlamlkbyBpbmR1c3RyaWFsLiBFbiDDumx0aW1vIGx1Z2FyIEFsZW1hbmlhIHF1ZSBlcyBlbCBwYcOtcyBtZW5vcyBhZmVjdGFkbywgZW4gcHJpbWVyIGx1Z2FyIHBvciBzdSB0ZWppZG8gaW5kdXN0cmlhIHkgbGEgZXNwZWNpYWxpemFjacOzbiBkZSBzdSBlY29ub21pYSBlbiBlc2Ugc2VjdG9yLiBZIGFkZW3DoXMgc3VzIGV4cG9ydGFjaW9uZXMsIHByaWNpcGFsbWVudGUgcHJvZHVjdG9zIHRlY25vbG9naWNvcywgcXVpbWljb3MgeSBmYXJtYWNldXRpY29zLCBxdWUgc29uIGxvcyBtYXMgZGVtYW5kYWRvcyBlbiBlc3RhIGNyaXNpcyAoeWEgc2VhbiBtYXF1aW5hcmlhIHBhcmEgaG9zcGl0YWxlcyBvIGZhcm1hY29zIHBhcmEgZWwgY29udHJvbCBkZSBsYSBwYW5kZW1pYSkNClBvciB0YW50byBwb2RlbW9zIGNvbmNsdWlyIHF1ZSBsYSBlc3BlY2lhbGl6YWNpb24gZWNvbm9taWNhIGRlIGNhZGEgcGHDrXMgaW5mbHV5ZSwgeSBkZSBtYW5lcmEgaW1wb3J0YW50ZSwgZW4gbGEgcmVjdXBlcmFjacOzbiBkZSBlc3RvcyBwYcOtc2VzIHRyYXMgbGEgY3Jpc2lzIGFjdHVhbC4gVmllbmRvIHVuYSBlc3RyZWNoYSByZWxhY2lvbiBlbnRyZSBlbCBncmFkbyBkZSBpbmR1c3RyYWxpemFjaW9uIGRlIGxvcyBwYWlzZXMsIHkgbWFzIGNvbmNyZXRhbWVudGUgZGUgZXNwZWNpYWxpemFjaW9uIGVuIGluZHVzdHJpYSBwZXNhZGEsIGZhcm1hY2V1dGljYSB5IHF1aW1pY2EsIGNvbiBsYSB2ZWxvY2lkYWQgZGUgcmVjdXBlcmFjaW9uIHkgZWwgaW1wYWN0byBkZSBlc3RhIGNyaXNpcy4NCg0KDQojIyAgOC4gQmlibGlvZ3JhZsOtYSANCg0KW0Jhc2UgZGUgZGF0b3MgRXVyb3N0YXRdKGh0dHBzOi8vZWMuZXVyb3BhLmV1L2V1cm9zdGF0L3NlYXJjaD9wX2F1dGg9bkxJQkNnMGcmcF9wX2lkPWVzdGF0c2VhcmNocG9ydGxldF9XQVJfZXN0YXRzZWFyY2hwb3J0bGV0JnBfcF9saWZlY3ljbGU9MSZwX3Bfc3RhdGU9bWF4aW1pemVkJnBfcF9tb2RlPXZpZXcmX2VzdGF0c2VhcmNocG9ydGxldF9XQVJfZXN0YXRzZWFyY2hwb3J0bGV0X3RoZW1lPWVtcHR5Jl9lc3RhdHNlYXJjaHBvcnRsZXRfV0FSX2VzdGF0c2VhcmNocG9ydGxldF9hY3Rpb249c2VhcmNoJl9lc3RhdHNlYXJjaHBvcnRsZXRfV0FSX2VzdGF0c2VhcmNocG9ydGxldF9jb2xsZWN0aW9uPWVtcHR5JnRleHQ9RW1wbG95bWVudCkNCioqQXJ0aWN1bG8gcmVzcGVjdG8gYSBsYSBldm9sdWNpw7NuIGRlbCBlbXBsZW8gMjAwOC0yMDE4KiogPGh0dHBzOi8vd3d3Lm51ZXZhdHJpYnVuYS5lcy9hcnRpY3Vsby9ldXJvcGExL2V1cm96b25hLWVtcGxlby10cmFiYWpvLW1lcmNhZG8tbGFib3JhbC1ldXJvcGEtZXVyby1zYWxhcmlvcy8yMDE4MDQyNDA3MTcyOTE1MTE3MS5odG1sPg0KDQo8aHR0cHM6Ly9kYXRvc21hY3JvLmV4cGFuc2lvbi5jb20+IA0KPGh0dHBzOi8vd3d3LnJzdHVkaW8uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE1LzAzL3JtYXJrZG93bi1zcGFuaXNoLnBkZj4NCkFQSSBFVVJPU1RBVCANCjxodHRwczovL3d3dy5iYW5jb211bmRpYWwub3JnLz4NCg0KDQotLS0tLS0tLS0tLS0tLS0tDQoNCg0KDQoNCg0K