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. El repo del trabajo está aquí. La página web de la asignatura y los trabajos de mis compañeros pueden verse aquí.


Índice

    1. Introducción
    1. Datos
    1. Evolución del saldo de la balanza por cuenta corriente
    1. Relación entre consumo y saldo de la balanza por CC
    1. Niveles de deuda
    1. Conclusiones
    1. Bibliografía

1. Introducción

El objetivo de este trabajo es analizar la evolución del saldo de la balanza por cuenta corriente en los ultimos años. La balanza por cuenta corriente es la suma del conjunto de transacciones de intercambio de bienes y servicios, rentas y transferencias (tanto corrientes como de capital), su saldo determina la capacidad o necesidad de financiación de un país

La globalización ha aumentado el comercio internacional en gran medida, pero en los últimos 5 años y coincidiendo con las guerras comerciales el comercio internacional ha ido perdiendo volumen. Esto también afecta a las exportaciones e importaciones españolas.

Analizaré por tanto, el crédito y débito de cada país, el saldo de la balanza por cuenta corriente, su relación con el consumo final de cada país y los niveles de deuda.

La motivación de este trabajo surge de el interés por conocer los motivos que generan las diferencias en los saldos de la cuenta corriente entre paises con niveles de PIB per cápita similares y con un nivel de desarrollo alto.

2. Datos

Los datos los he obtenido de EUROSTAT. A través del paquete “eurostat” y con su datatable he podido obtener todos los datos utilizados para los graficos y mapas. El proceso de limpieza ha consistido en eliminar las etiquetas que EUROSTAT da a sus variables para asi poder visualizarlas mejor. Posteriormente he filtrado los años que me parecian mas recientes y significativos. A continuación he cambiado el formato y nombre de algunas variables. Finalmente he elegido los datos que necesitaba para hacer los gráficos y en algun caso he hecho un full_join.

3. Evolución del saldo de la balanza por cuenta corriente

En este apartado analizaremos la evolución desde 1995 hasta 2020 del débito, crédito y saldo de la balanza por cuenta corriente.

Como podemos observar en el gráfico hay un país que destaca por su increible crecimiento desde el 2005. Hablamos de Alemania, la cual ha podido generar estos superávits gracias a dos factores: primero, el relativamente débil euro, que favorece las exportaciones alemanas y, segundo, la caída del precio de los combustibles y materias primas, que abarata las importaciones de Alemania.

Por otro lado, destaca negativamente el caso de España y de Reino Unido, los cuales han soportado déficits en el saldo de la balanza por cuenta corriente. Este déficit se debe en gran parte al déficit comercial, el cual era muy grande en años posteriores a la crisis de 2007 pero que desde 2013 se ha ido reduciendo. El caso de Reino Unido es especial, ya que sus relaciones con los socios de la UE nunca han sido favorables. El referendum del Brexit ya causó un descenso importante de las exportaciones del Reino Unido, y no es casualidad que en los ultimos años su déficit comercial y su déficit en el saldo de la balanza por cuenta corriente sea tan acusado.

Para entender un poco más el porque de estos déficits y superávits procedemos a explicar que exporta cada país. Los principales bienes exportados de Alemania son vehículos, maquinarias, productos químicos, productos electrónicos, productos farmacéuticos, equipos de transporte, metales básicos, productos alimenticios, caucho y plásticos.

España es el principal exportador de: Productos hortofrutícolas como: lechugas, pimientos, coles, melones y frutas, productos naturales procesados: como el aceite de oliva puro.

Reino Unido exporta principalmente combustibles, productos químicos, alimentos, bebidas, tabaco El principal Destino de las exportaciones son: Estados Unidos 14,2% Alemania 11,1% Francia 8,1% Irlanda 8% Países Bajos 6,8% Bélgica 5,3% España 4,5% Italia 4,1%.

Grafico 1 Grafico 2

Grafico 3

4. Relación entre consumo y saldo de la balanza por CC

En este apratado vamos a analizar la relación entre el consumo y ahorro final de las familias y el saldo de la balanza por cuenta corriente desde 2005 hasta la actualidad. Hay que tener en cuenta que en este scatterplot hay muchas factores que no tenemos en cuenta, es por ello que casos como el de Reino Unido no llegan a ser significativos en este gráfico. Dentro del gráfico Reino Unido tiene mucha volatilidad a lo largo de los años, y es por ello que no podemos concluir si existe relacion entre el consumo y el saldo en este concreto caso. Hechos recientes como el Brexit distorsionan los datos.

Existe un caso claro en el que si que podemos establecer una relación positiva entre el consumo final de las familias y el saldo de la balanza por cuenta corriente. Este es el caso de Alemania.

En el caso de Francia, encontramos una relación negativa entre estas dos variables, y aunque el saldo no ha descendido mucho, el consumo si que ha aumentado bastante.

Grafico 4

5. Niveles de deuda

Finalmente procedo a analizar los niveles de deuda para los principales paises europeos. Hemos establecido tres categorias para los niveles de deuda absolutos en millones de euros. Como podemos apreciar, España se situa en la segunda categoría, siendo Alemania, Francia, Reino Unido e Italia las líderes. Esto, que a priori seria una buena señal para España, no lo es tanto si hablamos de niveles de deuda en % del PIB. Entonces, ¿Cómo un pais como Italia se situa como líder en deuda si estamos hablando en terminos absolutos? A día de hoy, la deuda pública de Italia asciende a 2,4 billones de euros, para hacerse una idea es como si Italia tuviese una deuda que equivale a la economía entera de Francia.

En España la deuda es del 114,1% del PIB. Estos datos son alarmantes, ya que en teoría no deberiamos superar el 60% de deuda sobre pib segun los pactos de estabilidad y crecimiento. La situación reciente sufrida con el COVID explica que el aumento del gasto público sea mayor para frenar los efectos del desempleo y mantener la economía en una situación límite como la que hemos vivido. Este gasto, sumado a la falta de ingresos y al nivel de deuda que ya existía nos pone en una situación límite y que dificilmente va a mejorar. Las primas de riesgo no dejan de subir ante el inminente riesgo de impago por el elevado nivel de deuda y si no se revierte la situación desde Bruselas, la estabilidad de la economía española esta en riesgo

6. Conclusiones

En conclusión, el saldo de la balanza por cuenta corriente depende de muchos factores tanto internos como externos. El hecho de pertenecer a la UE no asegura que todos los paises van a tener saldos similares. Como hemos podido apreciar, Alemania se aprovecha de la debilidad del euro para aumentar su superávit comercial y asi aumentar el saldo de la balanza por cuenta corriente. A su vez el Brexit y otros facotres provocan un déficit para el Reino Unido. En paises como Islandia el saldo se mantiene lineal, con un ligero superávit pero que no crece mucho.

El programa R nos ha facilitado la visualización de los datos gracias a lo gráficos interactivos ya que cualquier persona que estudie o no economía, puede entender estos gráficos y mapas y acercarse un poco mas a la realidad.

7. Bibliografía

Los datos los he obtenido de enlace a EUROSTAT

He utilizado este tutorial para graficar y para los mapas: enlace al tutorial

Para lo graficos interactivos me he inspirado de esta web: enlace a la web

Por supuesto he tuilizado los tutoriales de ggplot2 y Data munging para graficar y para arreglar los datos.

LS0tDQp0aXRsZTogIkV2b2x1Y2nDs24gZGVsIHNhbGRvIGRlIGxhIGJhbGFuemEgcG9yIGN1ZW50YSBjb3JyaWVudGUiDQpzdWJ0aXRsZTogIk1pZ3VlbCBTaWxsYSBSw61vcyAobWlzaXJpb3NAYWx1bW5pLnV2LmVzKSINCmF1dGhvcjogIlVuaXZlcnNpdGF0IGRlIFZhbMOobmNpYSINCmRhdGU6ICJEaWNpZW1icmUgZGUgMjAyMCAoYWN0dWFsaXphZG8gZWwgYHIgZm9ybWF0KFN5cy50aW1lKCksICclZC0lbS0lWScpYCkiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgI2NzczogIi4vYXNzZXRzL215X2Nzc19maWxlLmNzcyINCiAgICB0aGVtZTogcGFwZXINCiAgICBoaWdobGlnaHQ6IHRleHRtYXRlIA0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19kZXB0aDogMyANCiAgICB0b2NfZmxvYXQ6IA0KICAgICAgY29sbGFwc2VkOiB0cnVlDQogICAgICBzbW9vdGhfc2Nyb2xsOiB0cnVlDQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICBudW1iZXJfc2VjdGlvbnM6IGZhbHNlDQogICAgZGZfcHJpbnQ6IGthYmxlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KZWRpdG9yX29wdGlvbnM6IA0KICBjaHVua19vdXRwdXRfdHlwZTogY29uc29sZQ0KLS0tDQoNCmBgYHtyIHBhY2thZ2VzLXNldHVwLCBpbmNsdWRlID0gRkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoa2xpcHB5KSAgIy0gcmVtb3Rlczo6aW5zdGFsbF9naXRodWIoInJsZXN1ci9rbGlwcHkiKQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkoZXVyb3N0YXQpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShnZ2FuaW1hdGUpDQoNCmBgYA0KDQpgYGB7ciBjaHVuay1zZXR1cCwgaW5jbHVkZSA9IEZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCBldmFsID0gVFJVRSwgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UsIA0KICAgICAgICAgICAgICAgICAgICAgICNyZXN1bHRzID0gImhvbGQiLA0KICAgICAgICAgICAgICAgICAgICAgIGNhY2hlID0gRkFMU0UsIGNhY2hlLnBhdGggPSAiL2NhY2hlcy8iLCBjb21tZW50ID0gIiM+IiwNCiAgICAgICAgICAgICAgICAgICAgICAjZmlnLndpZHRoID0gNywgI2ZpZy5oZWlnaHQ9IDcsICAgDQogICAgICAgICAgICAgICAgICAgICAgI291dC53aWR0aCA9IDcsIG91dC5oZWlnaHQgPSA3LA0KICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlID0gVFJVRSwgIGZpZy5zaG93ID0gImhvbGQiLA0KICAgICAgICAgICAgICAgICAgICAgIGZpZy5hc3AgPSA3LzksIG91dC53aWR0aCA9ICI2MCUiLCBmaWcuYWxpZ24gPSAiY2VudGVyIikNCmtuaXRyOjpvcHRzX2NodW5rJHNldChkZXYgPSAicG5nIiwgZGV2LmFyZ3MgPSBsaXN0KHR5cGUgPSAiY2Fpcm8tcG5nIikpDQpgYGANCg0KYGBge3Igb3B0aW9ucy1zZXR1cCwgaW5jbHVkZSA9IEZBTFNFfQ0Kb3B0aW9ucyhzY2lwZW4gPSA5OTkpICMtIHBhcmEgcXVpdGFyIGxhIG5vdGFjacOzbiBjaWVudMOtZmljYQ0Kb3B0aW9ucygieWFtbC5ldmFsLmV4cHIiID0gVFJVRSkgDQpgYGANCg0KDQpgYGB7ciBrbGlwcHksIGVjaG8gPSBGQUxTRX0NCmtsaXBweTo6a2xpcHB5KHBvc2l0aW9uID0gYygidG9wIiwgInJpZ2h0IikpICMtIHJlbW90ZXM6Omluc3RhbGxfZ2l0aHViKCJybGVzdXIva2xpcHB5IikNCmBgYA0KDQo8aHIgY2xhc3M9ImxpbmVhLWJsYWNrIj4NCg0KVHJhYmFqbyBlbGFib3JhZG8gcGFyYSBsYSBhc2lnbmF0dXJhICJQcm9ncmFtYWNpw7NuIHkgbWFuZWpvIGRlIGRhdG9zIGVuIGxhIGVyYSBkZWwgQmlnIERhdGEiIGRlIGxhIFVuaXZlcnNpdGF0IGRlIFZhbMOobmNpYSBkdXJhbnRlIGVsIGN1cnNvIDIwMjAtMjAyMS4gRWwgcmVwbyBkZWwgdHJhYmFqbyBlc3TDoSBbYXF1w61dKGh0dHBzOi8vZ2l0aHViLmNvbS9wZXJlenA0NC90cmFiYWpvX0JpZ0RhdGEpe3RhcmdldD0iX2JsYW5rIn0uIExhIHDDoWdpbmEgd2ViIGRlIGxhIGFzaWduYXR1cmEgeSBsb3MgdHJhYmFqb3MgZGUgbWlzIGNvbXBhw7Flcm9zIHB1ZWRlbiB2ZXJzZSBbYXF1w61dKGh0dHBzOi8vcGVyZXpwNDQuZ2l0aHViLmlvL2ludHJvLWRzLTIwLTIxLXdlYi8wNy10cmFiYWpvcy5odG1sKXt0YXJnZXQ9Il9ibGFuayJ9Lg0KDQo8IS0tIEVsIHDDoXJyYWZvIGRlIGFycmliYSBoYXMgZGUgZGVqYXJsbyBjYXNpIGlndWFsLCANCiAgICAgICAgc29sbyBIQVMgZGUgU1VTVElUVUlSIGxhcyAyIHZlY2VzIHF1ZSBhcGFyZWNlICJwZXJlenA0NCIgcG9yIHR1IHVzdWFyaW8gZGUgR2l0aHViLS0+DQoNCjxociBjbGFzcz0ibGluZWEtcmVkIj4NCg0KIyMgw41uZGljZQ0KIA0KIC0gMS4gSW50cm9kdWNjacOzbg0KIC0gMi4gRGF0b3MNCiAtIDMuIEV2b2x1Y2nDs24gZGVsIHNhbGRvIGRlIGxhIGJhbGFuemEgcG9yIGN1ZW50YSBjb3JyaWVudGUNCiAtIDQuIFJlbGFjacOzbiBlbnRyZSBjb25zdW1vIHkgc2FsZG8gZGUgbGEgYmFsYW56YSBwb3IgQ0MNCiAtIDUuIE5pdmVsZXMgZGUgZGV1ZGENCiAtIDYuIENvbmNsdXNpb25lcw0KIC0gNy4gQmlibGlvZ3JhZsOtYQ0KDQoNCiMgMS4gSW50cm9kdWNjacOzbg0KDQpFbCBvYmpldGl2byBkZSBlc3RlIHRyYWJham8gZXMgYW5hbGl6YXIgbGEgZXZvbHVjacOzbiBkZWwgc2FsZG8gZGUgbGEgYmFsYW56YSBwb3IgY3VlbnRhIGNvcnJpZW50ZSBlbiBsb3MgdWx0aW1vcyBhw7Fvcy4gTGEgYmFsYW56YSBwb3IgY3VlbnRhIGNvcnJpZW50ZSBlcyBsYSBzdW1hIGRlbCBjb25qdW50byBkZSB0cmFuc2FjY2lvbmVzIGRlIGludGVyY2FtYmlvIGRlIGJpZW5lcyB5IHNlcnZpY2lvcywgcmVudGFzIHkgdHJhbnNmZXJlbmNpYXMgKHRhbnRvIGNvcnJpZW50ZXMgY29tbyBkZSBjYXBpdGFsKSwgc3Ugc2FsZG8gZGV0ZXJtaW5hIGxhIGNhcGFjaWRhZCBvIG5lY2VzaWRhZCBkZSBmaW5hbmNpYWNpw7NuIGRlIHVuIHBhw61zDQoNCkxhIGdsb2JhbGl6YWNpw7NuIGhhIGF1bWVudGFkbyBlbCBjb21lcmNpbyBpbnRlcm5hY2lvbmFsIGVuIGdyYW4gbWVkaWRhLCBwZXJvIGVuIGxvcyDDumx0aW1vcyA1IGHDsW9zIHkgY29pbmNpZGllbmRvIGNvbiBsYXMgZ3VlcnJhcyBjb21lcmNpYWxlcyBlbCBjb21lcmNpbyBpbnRlcm5hY2lvbmFsIGhhIGlkbyBwZXJkaWVuZG8gdm9sdW1lbi4gRXN0byB0YW1iacOpbiBhZmVjdGEgYSBsYXMgZXhwb3J0YWNpb25lcyBlIGltcG9ydGFjaW9uZXMgZXNwYcOxb2xhcy4NCg0KQW5hbGl6YXLDqSBwb3IgdGFudG8sIGVsIGNyw6lkaXRvIHkgZMOpYml0byBkZSBjYWRhIHBhw61zLCBlbCBzYWxkbyBkZSBsYSBiYWxhbnphIHBvciBjdWVudGEgY29ycmllbnRlLCBzdSByZWxhY2nDs24gY29uIGVsIGNvbnN1bW8gZmluYWwgZGUgY2FkYSBwYcOtcyB5IGxvcyBuaXZlbGVzIGRlIGRldWRhLg0KDQpMYSBtb3RpdmFjacOzbiBkZSBlc3RlIHRyYWJham8gc3VyZ2UgZGUgZWwgaW50ZXLDqXMgcG9yIGNvbm9jZXIgbG9zIG1vdGl2b3MgcXVlIGdlbmVyYW4gbGFzIGRpZmVyZW5jaWFzIGVuIGxvcyBzYWxkb3MgZGUgbGEgY3VlbnRhIGNvcnJpZW50ZSBlbnRyZSBwYWlzZXMgY29uIG5pdmVsZXMgZGUgUElCIHBlciBjw6FwaXRhIHNpbWlsYXJlcyB5IGNvbiB1biBuaXZlbCBkZSBkZXNhcnJvbGxvIGFsdG8uDQoNCg0KIyAyLiBEYXRvcw0KDQpMb3MgZGF0b3MgbG9zIGhlIG9idGVuaWRvIGRlIEVVUk9TVEFULiBBIHRyYXbDqXMgZGVsIHBhcXVldGUgImV1cm9zdGF0IiB5IGNvbiBzdSBkYXRhdGFibGUgaGUgcG9kaWRvIG9idGVuZXIgdG9kb3MgbG9zIGRhdG9zIHV0aWxpemFkb3MgcGFyYSBsb3MgZ3JhZmljb3MgeSBtYXBhcy4gRWwgcHJvY2VzbyBkZSBsaW1waWV6YSBoYSBjb25zaXN0aWRvIGVuIGVsaW1pbmFyIGxhcyBldGlxdWV0YXMgcXVlIEVVUk9TVEFUIGRhIGEgc3VzIHZhcmlhYmxlcyBwYXJhIGFzaSBwb2RlciB2aXN1YWxpemFybGFzIG1lam9yLiBQb3N0ZXJpb3JtZW50ZSBoZSBmaWx0cmFkbyBsb3MgYcOxb3MgcXVlIG1lIHBhcmVjaWFuIG1hcyByZWNpZW50ZXMgeSBzaWduaWZpY2F0aXZvcy4gQSBjb250aW51YWNpw7NuIGhlIGNhbWJpYWRvIGVsIGZvcm1hdG8gIHkgbm9tYnJlIGRlIGFsZ3VuYXMgdmFyaWFibGVzLiBGaW5hbG1lbnRlIGhlIGVsZWdpZG8gbG9zIGRhdG9zIHF1ZSBuZWNlc2l0YWJhIHBhcmEgaGFjZXIgbG9zIGdyw6FmaWNvcyB5IGVuIGFsZ3VuIGNhc28gaGUgaGVjaG8gdW4gZnVsbF9qb2luLg0KDQojIDMuIEV2b2x1Y2nDs24gZGVsIHNhbGRvIGRlIGxhIGJhbGFuemEgcG9yIGN1ZW50YSBjb3JyaWVudGUNCg0KRW4gZXN0ZSBhcGFydGFkbyBhbmFsaXphcmVtb3MgbGEgZXZvbHVjacOzbiBkZXNkZSAxOTk1IGhhc3RhIDIwMjAgZGVsIGTDqWJpdG8sIGNyw6lkaXRvIHkgc2FsZG8gZGUgbGEgYmFsYW56YSBwb3IgY3VlbnRhIGNvcnJpZW50ZS4gDQoNCkNvbW8gcG9kZW1vcyBvYnNlcnZhciBlbiBlbCBncsOhZmljbyBoYXkgdW4gcGHDrXMgcXVlIGRlc3RhY2EgcG9yIHN1IGluY3JlaWJsZSBjcmVjaW1pZW50byBkZXNkZSBlbCAyMDA1LiBIYWJsYW1vcyBkZSBBbGVtYW5pYSwgbGEgY3VhbCBoYSBwb2RpZG8gZ2VuZXJhciBlc3RvcyBzdXBlcsOhdml0cyBncmFjaWFzIGEgZG9zIGZhY3RvcmVzOiBwcmltZXJvLCBlbCByZWxhdGl2YW1lbnRlIGTDqWJpbCBldXJvLCBxdWUgZmF2b3JlY2UgbGFzIGV4cG9ydGFjaW9uZXMgYWxlbWFuYXMgeSwgc2VndW5kbywgbGEgY2HDrWRhIGRlbCBwcmVjaW8gZGUgbG9zIGNvbWJ1c3RpYmxlcyB5IG1hdGVyaWFzIHByaW1hcywgcXVlIGFiYXJhdGEgbGFzIGltcG9ydGFjaW9uZXMgZGUgQWxlbWFuaWEuDQoNClBvciBvdHJvIGxhZG8sIGRlc3RhY2EgbmVnYXRpdmFtZW50ZSBlbCBjYXNvIGRlIEVzcGHDsWEgeSBkZSBSZWlubyBVbmlkbywgbG9zIGN1YWxlcyBoYW4gc29wb3J0YWRvIGTDqWZpY2l0cyBlbiBlbCBzYWxkbyBkZSBsYSBiYWxhbnphIHBvciBjdWVudGEgY29ycmllbnRlLiBFc3RlIGTDqWZpY2l0IHNlIGRlYmUgZW4gZ3JhbiBwYXJ0ZSBhbCBkw6lmaWNpdCBjb21lcmNpYWwsIGVsIGN1YWwgZXJhIG11eSBncmFuZGUgZW4gYcOxb3MgcG9zdGVyaW9yZXMgYSBsYSBjcmlzaXMgZGUgMjAwNyBwZXJvIHF1ZSBkZXNkZSAyMDEzIHNlIGhhIGlkbyByZWR1Y2llbmRvLiBFbCBjYXNvIGRlIFJlaW5vIFVuaWRvIGVzIGVzcGVjaWFsLCB5YSBxdWUgc3VzIHJlbGFjaW9uZXMgY29uIGxvcyBzb2Npb3MgZGUgbGEgVUUgbnVuY2EgaGFuIHNpZG8gZmF2b3JhYmxlcy4gRWwgcmVmZXJlbmR1bSBkZWwgQnJleGl0IHlhIGNhdXPDsyB1biBkZXNjZW5zbyBpbXBvcnRhbnRlIGRlIGxhcyBleHBvcnRhY2lvbmVzIGRlbCBSZWlubyBVbmlkbywgeSBubyBlcyBjYXN1YWxpZGFkIHF1ZSBlbiBsb3MgdWx0aW1vcyBhw7FvcyBzdSBkw6lmaWNpdCBjb21lcmNpYWwgeSBzdSBkw6lmaWNpdCBlbiBlbCBzYWxkbyBkZSBsYSBiYWxhbnphIHBvciBjdWVudGEgY29ycmllbnRlIHNlYSB0YW4gYWN1c2Fkby4NCg0KUGFyYSBlbnRlbmRlciB1biBwb2NvIG3DoXMgZWwgcG9ycXVlIGRlIGVzdG9zIGTDqWZpY2l0cyB5IHN1cGVyw6F2aXRzIHByb2NlZGVtb3MgYSBleHBsaWNhciBxdWUgZXhwb3J0YSBjYWRhIHBhw61zLiBMb3MgcHJpbmNpcGFsZXMgYmllbmVzIGV4cG9ydGFkb3MgZGUgQWxlbWFuaWEgc29uIHZlaMOtY3Vsb3MsIG1hcXVpbmFyaWFzLCBwcm9kdWN0b3MgcXXDrW1pY29zLCBwcm9kdWN0b3MgZWxlY3Ryw7NuaWNvcywgcHJvZHVjdG9zIGZhcm1hY8OpdXRpY29zLCBlcXVpcG9zIGRlIHRyYW5zcG9ydGUsIG1ldGFsZXMgYsOhc2ljb3MsIHByb2R1Y3RvcyBhbGltZW50aWNpb3MsIGNhdWNobyB5IHBsw6FzdGljb3MuDQoNCkVzcGHDsWEgZXMgZWwgcHJpbmNpcGFsIGV4cG9ydGFkb3IgZGU6IFByb2R1Y3RvcyBob3J0b2ZydXTDrWNvbGFzIGNvbW86IGxlY2h1Z2FzLCBwaW1pZW50b3MsIGNvbGVzLCBtZWxvbmVzIHkgZnJ1dGFzLCBwcm9kdWN0b3MgbmF0dXJhbGVzIHByb2Nlc2Fkb3M6IGNvbW8gZWwgYWNlaXRlIGRlIG9saXZhIHB1cm8uDQoNClJlaW5vIFVuaWRvIGV4cG9ydGEgcHJpbmNpcGFsbWVudGUgY29tYnVzdGlibGVzLCBwcm9kdWN0b3MgcXXDrW1pY29zLCBhbGltZW50b3MsIGJlYmlkYXMsIHRhYmFjbw0KRWwgcHJpbmNpcGFsIERlc3Rpbm8gZGUgIGxhcyBleHBvcnRhY2lvbmVzIHNvbjoJRXN0YWRvcyBVbmlkb3MgMTQsMiUgQWxlbWFuaWEgMTEsMSUgRnJhbmNpYSA4LDElIElybGFuZGEgOCUgUGHDrXNlcyBCYWpvcyA2LDglIELDqWxnaWNhIDUsMyUgRXNwYcOxYSA0LDUlIEl0YWxpYSA0LDElLg0KDQohW0dyYWZpY28gMV0oLi9HcmFmaWNvcy9QLmdpZikNCiFbR3JhZmljbyAyXSguL0dyYWZpY29zL1AxLmdpZikNCg0KIVtHcmFmaWNvIDNdKC4vR3JhZmljb3MvUDIuZ2lmKQ0KDQoNCg0KYGBge3IsIGV2YWw9IFRSVUUsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpjb250ZW5pZG9fZXVyb3N0YXQgPC0gZ2V0X2V1cm9zdGF0X3RvYygpDQpDQyA8LSBnZXRfZXVyb3N0YXQoaWQ9ImVpX2JwbTZjYV9xIiwgdGltZV9mb3JtYXQgPSAibnVtIikNCkNDMiA8LSBsYWJlbF9ldXJvc3RhdChDQykNCg0KDQpERiA8LSBDQzIgJT4lIGZpbHRlcih0aW1lICVpbiUgYygiMTk5NCIsICIxOTk1IiAsICIxOTk2IiwgIjE5OTciLCAiMTk5OCIsIjE5OTgiICwgIjE5OTkiICwgICIyMDAwIiwgICIyMDAxIiwgICIyMDAyIiwgICIyMDAzIiwgICIyMDA0IiwgICIyMDA1IiwgICIyMDA2IiwgICIyMDA3IiwgICIyMDA4IiwgICIyMDA5IiwgICIyMDEwIiwgICIyMDExIiwgICIyMDEyIiwgICIyMDEzIiwgICIyMDE0IiwgICIyMDE1IiwgICIyMDE2IiwgICIyMDE3IiwgICIyMDE4IiwgICIyMDE5IiwgICIyMDIwIikpICU+JSBmaWx0ZXIoZ2VvICVpbiUgYyggIkZyYW5jZSIgLCAiR2VybWFueSAodW50aWwgMTk5MCBmb3JtZXIgdGVycml0b3J5IG9mIHRoZSBGUkcpIiwgIkl0YWx5IiwgICJVbml0ZWQgS2luZ2RvbSIgLCAiUG9sYW5kIiAsICAiTmV0aGVybGFuZHMiLCAiSWNlbGFuZCIgLCAiRGVubWFyayIsICJTcGFpbiIpKSU+JSBmaWx0ZXIoYm9wX2l0ZW0gPT0gIkN1cnJlbnQgYWNjb3VudCIpDQoNCkRGZGViaXQgPC0gQ0MyICU+JSBmaWx0ZXIodGltZSAlaW4lIGMoIjE5OTQiLCAiMTk5NSIgLCAiMTk5NiIsICIxOTk3IiwgIjE5OTgiLCIxOTk4IiAsICIxOTk5IiAsICAiMjAwMCIsICAiMjAwMSIsICAiMjAwMiIsICAiMjAwMyIsICAiMjAwNCIsICAiMjAwNSIsICAiMjAwNiIsICAiMjAwNyIsICAiMjAwOCIsICAiMjAwOSIsICAiMjAxMCIsICAiMjAxMSIsICAiMjAxMiIsICAiMjAxMyIsICAiMjAxNCIsICAiMjAxNSIsICAiMjAxNiIsICAiMjAxNyIsICAiMjAxOCIsICAiMjAxOSIsICAiMjAyMCIpKSAlPiUgZmlsdGVyKGdlbyAlaW4lIGMoICJGcmFuY2UiICwgIkdlcm1hbnkgKHVudGlsIDE5OTAgZm9ybWVyIHRlcnJpdG9yeSBvZiB0aGUgRlJHKSIsICJJdGFseSIsICAiVW5pdGVkIEtpbmdkb20iICwgIlBvbGFuZCIgLCAgIk5ldGhlcmxhbmRzIiwgIkljZWxhbmQiICwgIkRlbm1hcmsiLCAiU3BhaW4iKSklPiUgZmlsdGVyKGJvcF9pdGVtID09ICJDdXJyZW50IGFjY291bnQiKSAlPiUgZmlsdGVyKHN0a19mbG93ID09ICJEZWJpdCIpICU+JSBzZWxlY3QoZ2VvLCB2YWx1ZXMsIHRpbWUsIHN0a19mbG93KQ0KDQoNCkRGY3JlZGl0IDwtIENDMiAlPiUgZmlsdGVyKHRpbWUgJWluJSBjKCIxOTk0IiwgIjE5OTUiICwgIjE5OTYiLCAiMTk5NyIsICIxOTk4IiwiMTk5OCIgLCAiMTk5OSIgLCAgIjIwMDAiLCAgIjIwMDEiLCAgIjIwMDIiLCAgIjIwMDMiLCAgIjIwMDQiLCAgIjIwMDUiLCAgIjIwMDYiLCAgIjIwMDciLCAgIjIwMDgiLCAgIjIwMDkiLCAgIjIwMTAiLCAgIjIwMTEiLCAgIjIwMTIiLCAgIjIwMTMiLCAgIjIwMTQiLCAgIjIwMTUiLCAgIjIwMTYiLCAgIjIwMTciLCAgIjIwMTgiLCAgIjIwMTkiLCAgIjIwMjAiKSkgJT4lIGZpbHRlcihnZW8gJWluJSBjKCJTcGFpbiIsICJGcmFuY2UiICwgIkdlcm1hbnkgKHVudGlsIDE5OTAgZm9ybWVyIHRlcnJpdG9yeSBvZiB0aGUgRlJHKSIsICJJdGFseSIsICAiVW5pdGVkIEtpbmdkb20iICwgIlBvbGFuZCIgLCAgIk5ldGhlcmxhbmRzIiwgIkljZWxhbmQiICwgIkRlbm1hcmsiLCAiU3BhaW4iKSklPiUgZmlsdGVyKGJvcF9pdGVtID09ICJDdXJyZW50IGFjY291bnQiKSAlPiUgZmlsdGVyKHN0a19mbG93ID09ICJDcmVkaXQiKSAlPiUgc2VsZWN0KGdlbywgdmFsdWVzLCB0aW1lLCBzdGtfZmxvdykNCg0KREZiYWxhbmNlIDwtIENDMiAlPiUgZmlsdGVyKHRpbWUgJWluJSBjKCIxOTk0IiwgIjE5OTUiICwgIjE5OTYiLCAiMTk5NyIsICIxOTk4IiwiMTk5OCIgLCAiMTk5OSIgLCAgIjIwMDAiLCAgIjIwMDEiLCAgIjIwMDIiLCAgIjIwMDMiLCAgIjIwMDQiLCAgIjIwMDUiLCAgIjIwMDYiLCAgIjIwMDciLCAgIjIwMDgiLCAgIjIwMDkiLCAgIjIwMTAiLCAgIjIwMTEiLCAgIjIwMTIiLCAgIjIwMTMiLCAgIjIwMTQiLCAgIjIwMTUiLCAgIjIwMTYiLCAgIjIwMTciLCAgIjIwMTgiLCAgIjIwMTkiLCAgIjIwMjAiKSkgJT4lIGZpbHRlcihnZW8gJWluJSBjKCJGcmFuY2UiICwgIkdlcm1hbnkgKHVudGlsIDE5OTAgZm9ybWVyIHRlcnJpdG9yeSBvZiB0aGUgRlJHKSIsICJJdGFseSIsICAiVW5pdGVkIEtpbmdkb20iICwgIlBvbGFuZCIgLCAgIk5ldGhlcmxhbmRzIiwgIkljZWxhbmQiICwgIkRlbm1hcmsiLCAiU3BhaW4iKSklPiUgZmlsdGVyKGJvcF9pdGVtID09ICJDdXJyZW50IGFjY291bnQiKSAlPiUgZmlsdGVyKHN0a19mbG93ID09ICJCYWxhbmNlIikgJT4lIHNlbGVjdChnZW8sIHZhbHVlcywgdGltZSwgc3RrX2Zsb3cpDQoNCg0KcCA8LSBnZ3Bsb3QoREZkZWJpdCwgYWVzKHggPSB0aW1lLCB5ID0gdmFsdWVzLCBjb2xvciA9IGdlbykpICsgZ2VvbV9saW5lKCkgKyBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDQwMDAwMCwgMjAwMDApLCBsaW1pdHMgPSBjKDAsIDQwMDAwMCkpICArIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMTk5NSwgMjAyMCwgNSksIGxpbWl0cyA9IGMoMTk5NSwgMjAyMCkpICsNCiAgbGFicyh0aXRsZSA9ICJFdm9sdWNpw7NuIGRlbCBkw6liaXRvICgxOTk1IC0gMjAyMCkiLA0KICAgICAgIHN1YnRpdGxlID0gIiIsDQogICAgICAgY2FwdGlvbiA9ICJTb3VyY2U6IEVsYWJvcmFjaW9uIHByb3BpYSIsDQogICAgICAgZmlsbD0gIk1pbGxvbmVzIGRlIGV1cm9zIiwgIHggPSAiQcOxbyIsDQogICAgICAgeSA9ICIiLA0KICAgICAgIGNvbG9yID0gIlBhw61zZXMiKSsNCiAgdGhlbWVfZGFyaygpICsNCiAgZ2VvbV9wb2ludChhZXMoZ3JvdXAgPSBzZXFfYWxvbmcodGltZSkpKSArDQogIHRyYW5zaXRpb25fcmV2ZWFsKHRpbWUpDQoNCg0KDQpwMSA8LSBnZ3Bsb3QoREZjcmVkaXQsIGFlcyh4ID0gdGltZSwgeSA9IHZhbHVlcywgY29sb3IgPSBnZW8pKSArIGdlb21fbGluZSgpICsgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA1MDAwMDAsIDIwMDAwKSwgbGltaXRzID0gYygwLCA1MDAwMDApKSAgKyBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDE5OTUsIDIwMjAsIDUpLCBsaW1pdHMgPSBjKDE5OTUsIDIwMjApKSArDQogIGxhYnModGl0bGUgPSAiRXZvbHVjacOzbiBkZWwgY3LDqWRpdG8gKDE5OTUgLSAyMDIwKSIsDQogICAgICAgc3VidGl0bGUgPSAiIiwNCiAgICAgICBjYXB0aW9uID0gIlNvdXJjZTogRWxhYm9yYWNpb24gcHJvcGlhIiwNCiAgICAgICBmaWxsPSAiTWlsbG9uZXMgZGUgZXVyb3MiLCAgeCA9ICJBw7FvIiwNCiAgICAgICB5ID0gIiIsDQogICAgICAgY29sb3IgPSAiUGHDrXNlcyIpKw0KICB0aGVtZV9kYXJrKCkgKw0KICBnZW9tX3BvaW50KGFlcyhncm91cCA9IHNlcV9hbG9uZyh0aW1lKSkpICsNCiAgdHJhbnNpdGlvbl9yZXZlYWwodGltZSkNCg0KDQpwMiA8LSBnZ3Bsb3QoREZiYWxhbmNlLCBhZXMoeCA9IHRpbWUsIHkgPSB2YWx1ZXMsIGNvbG9yID0gZ2VvKSkgKyBnZW9tX2xpbmUoKSArIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTUwMDAwLCA3MzAwMCwgMTAwMDApLCBsaW1pdHMgPSBjKC01MDAwMCwgNzMwMDApKSAgKyBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDE5OTUsIDIwMjAsIDUpLCBsaW1pdHMgPSBjKDE5OTUsIDIwMjApKSArDQogIGxhYnModGl0bGUgPSAiRXZvbHVjacOzbiBkZWwgc2FsZG8gZGUgbGEgYmFsYW56YSBwb3IgY3VlbnRhIGNvcnJpZW50ZSAoMTk5NSAtIDIwMjApIiwNCiAgICAgICBzdWJ0aXRsZSA9ICIiLA0KICAgICAgIGNhcHRpb24gPSAiU291cmNlOiBFbGFib3JhY2lvbiBwcm9waWEiLA0KICAgICAgIGZpbGw9ICJNaWxsb25lcyBkZSBldXJvcyIsICB4ID0gIkHDsW8iLA0KICAgICAgIHkgPSAiIiwNCiAgICAgICBjb2xvciA9ICJQYcOtc2VzIikrDQogIHRoZW1lX2RhcmsoKSArDQogIGdlb21fcG9pbnQoYWVzKGdyb3VwID0gc2VxX2Fsb25nKHRpbWUpKSkgKw0KICB0cmFuc2l0aW9uX3JldmVhbCh0aW1lKQ0KYGBgDQoNCiMgNC4gUmVsYWNpw7NuIGVudHJlIGNvbnN1bW8geSBzYWxkbyBkZSBsYSBiYWxhbnphIHBvciBDQw0KDQpFbiBlc3RlIGFwcmF0YWRvIHZhbW9zIGEgYW5hbGl6YXIgbGEgcmVsYWNpw7NuIGVudHJlIGVsIGNvbnN1bW8geSBhaG9ycm8gZmluYWwgZGUgbGFzIGZhbWlsaWFzIHkgZWwgc2FsZG8gZGUgbGEgYmFsYW56YSBwb3IgY3VlbnRhIGNvcnJpZW50ZSBkZXNkZSAyMDA1IGhhc3RhIGxhIGFjdHVhbGlkYWQuIEhheSBxdWUgdGVuZXIgZW4gY3VlbnRhIHF1ZSBlbiBlc3RlIHNjYXR0ZXJwbG90IGhheSBtdWNoYXMgZmFjdG9yZXMgcXVlIG5vIHRlbmVtb3MgZW4gY3VlbnRhLCBlcyBwb3IgZWxsbyBxdWUgY2Fzb3MgY29tbyBlbCBkZSBSZWlubyBVbmlkbyBubyBsbGVnYW4gYSBzZXIgc2lnbmlmaWNhdGl2b3MgZW4gZXN0ZSBncsOhZmljby4gRGVudHJvIGRlbCBncsOhZmljbyBSZWlubyBVbmlkbyB0aWVuZSBtdWNoYSB2b2xhdGlsaWRhZCBhIGxvIGxhcmdvIGRlIGxvcyBhw7FvcywgeSBlcyBwb3IgZWxsbyBxdWUgbm8gcG9kZW1vcyBjb25jbHVpciBzaSBleGlzdGUgcmVsYWNpb24gZW50cmUgZWwgY29uc3VtbyB5IGVsIHNhbGRvIGVuIGVzdGUgY29uY3JldG8gY2Fzby4gSGVjaG9zIHJlY2llbnRlcyBjb21vIGVsIEJyZXhpdCBkaXN0b3JzaW9uYW4gbG9zIGRhdG9zLg0KDQpFeGlzdGUgdW4gY2FzbyBjbGFybyBlbiBlbCBxdWUgc2kgcXVlIHBvZGVtb3MgZXN0YWJsZWNlciB1bmEgcmVsYWNpw7NuIHBvc2l0aXZhIGVudHJlIGVsIGNvbnN1bW8gZmluYWwgZGUgbGFzIGZhbWlsaWFzIHkgZWwgc2FsZG8gZGUgbGEgYmFsYW56YSBwb3IgY3VlbnRhIGNvcnJpZW50ZS4gRXN0ZSBlcyBlbCBjYXNvIGRlIEFsZW1hbmlhLiANCg0KRW4gZWwgY2FzbyBkZSBGcmFuY2lhLCBlbmNvbnRyYW1vcyB1bmEgcmVsYWNpw7NuIG5lZ2F0aXZhIGVudHJlIGVzdGFzIGRvcyB2YXJpYWJsZXMsIHkgYXVucXVlIGVsIHNhbGRvIG5vIGhhIGRlc2NlbmRpZG8gbXVjaG8sIGVsIGNvbnN1bW8gc2kgcXVlIGhhIGF1bWVudGFkbyBiYXN0YW50ZS4NCg0KIVtHcmFmaWNvIDRdKC4vR3JhZmljb3MvUDQuZ2lmKQ0KDQpgYGB7ciwgZXZhbD0gVFJVRSwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnBvczE8LSBnZXRfZXVyb3N0YXQoaWQ9Im5hbWFfMTBfZ2RwIiwgdGltZV9mb3JtYXQgPSAibnVtIikNCnBvczIgPC0gbGFiZWxfZXVyb3N0YXQocG9zMSkNCg0KDQpERmNvbnN1bW8gPC0gcG9zMiAlPiUgZmlsdGVyKHVuaXQgPT0gIkN1cnJlbnQgcHJpY2VzLCBtaWxsaW9uIGV1cm8iKSAlPiUgZmlsdGVyKG5hX2l0ZW0gPT0gIkZpbmFsIGNvbnN1bXB0aW9uIGV4cGVuZGl0dXJlIikgJT4lIGZpbHRlcih0aW1lICVpbiUgYygiMjAwNSIsICAiMjAwNiIsICAiMjAwNyIsICAiMjAwOCIsICAiMjAwOSIsICAiMjAxMCIsICAiMjAxMSIsICAiMjAxMiIsICAiMjAxMyIsICAiMjAxNCIsICAiMjAxNSIsICAiMjAxNiIsICAiMjAxNyIsICAiMjAxOCIsICAiMjAxOSIsICAiMjAyMCIpKSAlPiUgZmlsdGVyKGdlbyAlaW4lIGMoICJGcmFuY2UiICwgIkdlcm1hbnkgKHVudGlsIDE5OTAgZm9ybWVyIHRlcnJpdG9yeSBvZiB0aGUgRlJHKSIsICJJdGFseSIsICAiVW5pdGVkIEtpbmdkb20iICwgIlBvbGFuZCIgLCAgIk5ldGhlcmxhbmRzIiwgIkljZWxhbmQiICwgIkRlbm1hcmsiLCAiU3BhaW4iKSkgJT4lIHJlbmFtZShjb25zdW1vID0gdmFsdWVzKQ0KDQoNCkRGYmFsYW5jZTIgPC0gQ0MyICU+JSBmaWx0ZXIodGltZSAlaW4lIGMoIjIwMDUiLCAgIjIwMDYiLCAgIjIwMDciLCAgIjIwMDgiLCAgIjIwMDkiLCAgIjIwMTAiLCAgIjIwMTEiLCAgIjIwMTIiLCAgIjIwMTMiLCAgIjIwMTQiLCAgIjIwMTUiLCAgIjIwMTYiLCAgIjIwMTciLCAgIjIwMTgiLCAgIjIwMTkiLCAgIjIwMjAiKSkgJT4lIGZpbHRlcihnZW8gJWluJSBjKCAiRnJhbmNlIiAsICJHZXJtYW55ICh1bnRpbCAxOTkwIGZvcm1lciB0ZXJyaXRvcnkgb2YgdGhlIEZSRykiLCAiSXRhbHkiLCAgIlVuaXRlZCBLaW5nZG9tIiAsICJQb2xhbmQiICwgICJOZXRoZXJsYW5kcyIsICJJY2VsYW5kIiAsICJEZW5tYXJrIiwgIlNwYWluIikpICU+JSBmaWx0ZXIoYm9wX2l0ZW0gPT0gIkN1cnJlbnQgYWNjb3VudCIpICU+JWZpbHRlcihzdGtfZmxvdyA9PSAiQmFsYW5jZSIpICU+JSBzZWxlY3QoZ2VvLCB2YWx1ZXMsIHRpbWUsIHN0a19mbG93KQ0KDQpkZl9mdWxsIDwtIGZ1bGxfam9pbihERmNvbnN1bW8sIERGYmFsYW5jZTIpICU+JSBzZWxlY3QodGltZSwgZ2VvLCBjb25zdW1vLCB2YWx1ZXMsIG5hX2l0ZW0pDQoNCg0KcDQgPC0gZ2dwbG90KGRmX2Z1bGwsIGFlcyh2YWx1ZXMsIGNvbnN1bW8sIGNvbG9yID0gZ2VvKSkgKw0KICAgICBnZW9tX3BvaW50KCkgKyBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDcwMDAsIDMwMDAwMDAsIDEwMDAwMCksIGxpbWl0cyA9IGMoNzAwMCwgMzAwMDAwMCkpICArIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTQyMDAwLCA3MzAwMCwgMjUwMDApLCBsaW1pdHMgPSBjKC00MjAwMCwgNzMwMDApKSAgKw0KICAgICBsYWJzKHRpdGxlID0gIlJlbGFjacOzbiBlbnRyZSBlbCBjb25zdW1vIGZpbmFsIHkgZWwgIHNhbGRvIGRlIGxhIGJhbGFuemEgcG9yIENDICIsDQoNCiAgICAgICB4ID0gIlNhbGRvIGJhbGFuemEgcG9yIENDIiwNCiAgICAgICB5ID0gIkNvbnN1bW8gZW4gbWlsbG9uZXMgZGUgZXVyb3MiLA0KICAgICAgIGNvbG9yID0gIlBhaXNlcyIpICsgdGhlbWVfZGFyaygpICsgdHJhbnNpdGlvbl90aW1lKHRpbWUpICsNCiAgbGFicyh0aXRsZSA9ICJUaW1lOiB7ZnJhbWVfdGltZX0iKSArDQogIHNoYWRvd193YWtlKHdha2VfbGVuZ3RoID0gMC4yLCBhbHBoYSA9IEZBTFNFKQ0KDQpgYGANCg0KIyA1LiBOaXZlbGVzIGRlIGRldWRhDQoNCkZpbmFsbWVudGUgcHJvY2VkbyBhIGFuYWxpemFyIGxvcyBuaXZlbGVzIGRlIGRldWRhIHBhcmEgbG9zIHByaW5jaXBhbGVzIHBhaXNlcyBldXJvcGVvcy4gSGVtb3MgZXN0YWJsZWNpZG8gdHJlcyBjYXRlZ29yaWFzIHBhcmEgbG9zIG5pdmVsZXMgZGUgZGV1ZGEgYWJzb2x1dG9zIGVuIG1pbGxvbmVzIGRlIGV1cm9zLiBDb21vIHBvZGVtb3MgYXByZWNpYXIsIEVzcGHDsWEgc2Ugc2l0dWEgZW4gbGEgc2VndW5kYSBjYXRlZ29yw61hLCBzaWVuZG8gQWxlbWFuaWEsIEZyYW5jaWEsIFJlaW5vIFVuaWRvIGUgSXRhbGlhIGxhcyBsw61kZXJlcy4gRXN0bywgcXVlIGEgcHJpb3JpIHNlcmlhIHVuYSBidWVuYSBzZcOxYWwgcGFyYSBFc3Bhw7FhLCBubyBsbyBlcyB0YW50byBzaSBoYWJsYW1vcyBkZSBuaXZlbGVzIGRlIGRldWRhIGVuICUgZGVsIFBJQi4gRW50b25jZXMsIMK/Q8OzbW8gdW4gcGFpcyBjb21vIEl0YWxpYSBzZSBzaXR1YSBjb21vIGzDrWRlciBlbiBkZXVkYSBzaSBlc3RhbW9zIGhhYmxhbmRvIGVuIHRlcm1pbm9zIGFic29sdXRvcz8gQSBkw61hIGRlIGhveSwgbGEgZGV1ZGEgcMO6YmxpY2EgZGUgSXRhbGlhIGFzY2llbmRlIGEgMiw0IGJpbGxvbmVzIGRlIGV1cm9zLCBwYXJhIGhhY2Vyc2UgdW5hIGlkZWEgZXMgY29tbyBzaSBJdGFsaWEgdHV2aWVzZSB1bmEgZGV1ZGEgcXVlIGVxdWl2YWxlIGEgbGEgZWNvbm9tw61hIGVudGVyYSBkZSBGcmFuY2lhLg0KDQpFbiBFc3Bhw7FhIGxhIGRldWRhIGVzIGRlbCAxMTQsMSUgZGVsIFBJQi4gRXN0b3MgZGF0b3Mgc29uIGFsYXJtYW50ZXMsIHlhIHF1ZSBlbiB0ZW9yw61hIG5vIGRlYmVyaWFtb3Mgc3VwZXJhciBlbCA2MCUgZGUgZGV1ZGEgc29icmUgcGliIHNlZ3VuIGxvcyBwYWN0b3MgZGUgZXN0YWJpbGlkYWQgeSBjcmVjaW1pZW50by4gTGEgc2l0dWFjacOzbiByZWNpZW50ZSBzdWZyaWRhIGNvbiBlbCBDT1ZJRCBleHBsaWNhIHF1ZSBlbCBhdW1lbnRvIGRlbCBnYXN0byBww7pibGljbyBzZWEgbWF5b3IgcGFyYSBmcmVuYXIgbG9zIGVmZWN0b3MgZGVsIGRlc2VtcGxlbyB5IG1hbnRlbmVyIGxhIGVjb25vbcOtYSBlbiB1bmEgc2l0dWFjacOzbiBsw61taXRlIGNvbW8gbGEgcXVlIGhlbW9zIHZpdmlkby4gRXN0ZSBnYXN0bywgc3VtYWRvIGEgbGEgZmFsdGEgZGUgaW5ncmVzb3MgeSBhbCBuaXZlbCBkZSBkZXVkYSBxdWUgeWEgZXhpc3TDrWEgbm9zIHBvbmUgZW4gdW5hIHNpdHVhY2nDs24gbMOtbWl0ZSB5IHF1ZSBkaWZpY2lsbWVudGUgdmEgYSBtZWpvcmFyLiBMYXMgcHJpbWFzIGRlIHJpZXNnbyBubyBkZWphbiBkZSBzdWJpciBhbnRlIGVsIGlubWluZW50ZSByaWVzZ28gZGUgaW1wYWdvIHBvciBlbCBlbGV2YWRvIG5pdmVsIGRlIGRldWRhIHkgc2kgbm8gc2UgcmV2aWVydGUgbGEgc2l0dWFjacOzbiBkZXNkZSBCcnVzZWxhcywgbGEgZXN0YWJpbGlkYWQgZGUgbGEgZWNvbm9tw61hIGVzcGHDsW9sYSBlc3RhIGVuIHJpZXNnbw0KDQpgYGB7ciwgZXZhbD0gVFJVRSwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0NCkNDZGV1ZGEgPC0gZ2V0X2V1cm9zdGF0KGlkPSJnb3ZfMTBkZF9lZHB0MSIsIHRpbWVfZm9ybWF0ID0gIm51bSIpDQoNCg0KREZERVVEQSA8LSBDQ2RldWRhICU+JSBmaWx0ZXIodGltZSAlaW4lIGMoIjE5OTQiLCAiMTk5NSIgLCAiMTk5NiIsICIxOTk3IiwgIjE5OTgiLCIxOTk4IiAsICIxOTk5IiAsICAiMjAwMCIsICAiMjAwMSIsICAiMjAwMiIsICAiMjAwMyIsICAiMjAwNCIsICAiMjAwNSIsICAiMjAwNiIsICAiMjAwNyIsICAiMjAwOCIsICAiMjAwOSIsICAiMjAxMCIsICAiMjAxMSIsICAiMjAxMiIsICAiMjAxMyIsICAiMjAxNCIsICAiMjAxNSIsICAiMjAxNiIsICAiMjAxNyIsICAiMjAxOCIsICAiMjAxOSIsICAiMjAyMCIpKSAlPiUgZmlsdGVyKGdlbyAlaW4lIGMoIkVTIiwgIkZSIiAsICJERSIsICJJVCIsICAiVUsiICwgIlBMIiAsICAiTkwiLCAiSUMiKSklPiUgZmlsdGVyKG5hX2l0ZW0gPT0gIkdEIikgJT4lIGZpbHRlcih1bml0ID09ICJNSU9fRVVSIikgJT4lIHNlbGVjdChnZW8sIHZhbHVlcywgdGltZSwgbmFfaXRlbSkNCg0KDQoNCg0KDQoNCg0KDQpkZl9hMjAxOSA8LSBERkRFVURBICU+JSBmaWx0ZXIodGltZSA9PSAiMjAxOSIpICU+JQ0KICAgICAgICBtdXRhdGUoY2F0ID0gY3V0X3RvX2NsYXNzZXModmFsdWVzLCBuID0gMywgZGVjaW1hbHMgPSAxKSkNCg0KZ2VvbWV0cmlhczE5IDwtIGdldF9ldXJvc3RhdF9nZW9zcGF0aWFsKHJlc29sdXRpb24gPSAiMjAiLCBudXRzX2xldmVsID0gIjAiKQ0KDQoNCm1hcGRhdGExOSA8LSBpbm5lcl9qb2luKGdlb21ldHJpYXMxOSwgZGZfYTIwMTksIGJ5ID0gYygiZ2VvIiA9ICJnZW8iKSkNCkRFVURBX01BUEExOSA8LSBnZXRfZXVyb3N0YXRfZ2Vvc3BhdGlhbChudXRzX2xldmVsID0gMCkgJT4lDQogIHJpZ2h0X2pvaW4oZGZfYTIwMTkpICU+JQ0KICBtdXRhdGUoY2F0ZWdvcmlhcyA9IGN1dF90b19jbGFzc2VzKHZhbHVlcywgbj0zLCBkZWNpbWFscz0xKSkNCg0KDQoNCg0KDQpnZ3Bsb3QoREVVREFfTUFQQTE5LCBhZXMoZmlsbD1jYXRlZ29yaWFzKSkgKw0KICBnZW9tX3NmKGNvbG9yID0gYWxwaGEoIndoaXRlIiwgMS8yKSwgYWxwaGE9IDAuOSkgKw0KICB4bGltKGMoLTIwLCA0NCkpICsNCiAgeWxpbShjKDM1LCA3MCkpICsNCiAgbGFicyh0aXRsZSA9ICJEZXVkYSAyMDE5IiwNCiAgICAgICBzdWJ0aXRsZSA9ICIiLA0KICAgICAgIGNhcHRpb24gPSAiU291cmNlOiBFbGFib3JhY2lvbiBwcm9waWEiLA0KICAgICAgIGZpbGw9ICJNaWxsb25lcyBkZSBFdXJvcyIpICsNCiAgdGhlbWVfbWluaW1hbCgpICArDQogIHRoZW1lKA0KICAgIGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICBheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gInNub3ciLCBjb2xvciA9IE5BKSwNCiAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGw9ICJzbm93IiwgY29sb3IgPSBOQSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYsIGhqdXN0ID0gMC41KSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCwgaGp1c3QgPSAwLjUpLA0KICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gOCwgaGp1c3QgPSAxKSwNCiAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiZ3JleTQwIiwgc2l6ZSA9IDgpLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImdyZXk0MCIsIHNpemUgPSA3LCBoanVzdCA9IDApLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9IGMoMSwgMC42KSwNCiAgICBwbG90Lm1hcmdpbiA9IHVuaXQoYygwLjUsMiwwLjUsMSksICJjbSIpKSArDQogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGU9ICJTcGVjdHJhbCIpDQoNCmBgYA0KDQoNCiMgNi4gQ29uY2x1c2lvbmVzDQoNCkVuIGNvbmNsdXNpw7NuLCBlbCBzYWxkbyBkZSBsYSBiYWxhbnphIHBvciBjdWVudGEgY29ycmllbnRlIGRlcGVuZGUgZGUgbXVjaG9zIGZhY3RvcmVzIHRhbnRvIGludGVybm9zIGNvbW8gZXh0ZXJub3MuIEVsIGhlY2hvIGRlIHBlcnRlbmVjZXIgYSBsYSBVRSBubyBhc2VndXJhIHF1ZSB0b2RvcyBsb3MgcGFpc2VzIHZhbiBhIHRlbmVyIHNhbGRvcyBzaW1pbGFyZXMuIENvbW8gaGVtb3MgcG9kaWRvIGFwcmVjaWFyLCBBbGVtYW5pYSBzZSBhcHJvdmVjaGEgZGUgbGEgZGViaWxpZGFkIGRlbCBldXJvIHBhcmEgYXVtZW50YXIgc3Ugc3VwZXLDoXZpdCBjb21lcmNpYWwgeSBhc2kgYXVtZW50YXIgZWwgc2FsZG8gZGUgbGEgYmFsYW56YSBwb3IgY3VlbnRhIGNvcnJpZW50ZS4gQSBzdSB2ZXogZWwgQnJleGl0IHkgb3Ryb3MgZmFjb3RyZXMgcHJvdm9jYW4gdW4gZMOpZmljaXQgcGFyYSBlbCBSZWlubyBVbmlkby4gRW4gcGFpc2VzIGNvbW8gSXNsYW5kaWEgZWwgc2FsZG8gc2UgbWFudGllbmUgbGluZWFsLCBjb24gdW4gbGlnZXJvIHN1cGVyw6F2aXQgcGVybyBxdWUgbm8gY3JlY2UgbXVjaG8uDQoNCkVsIHByb2dyYW1hIFIgbm9zIGhhIGZhY2lsaXRhZG8gbGEgdmlzdWFsaXphY2nDs24gZGUgbG9zIGRhdG9zIGdyYWNpYXMgYSBsbyBncsOhZmljb3MgaW50ZXJhY3Rpdm9zIHlhIHF1ZSBjdWFscXVpZXIgcGVyc29uYSBxdWUgZXN0dWRpZSBvIG5vIGVjb25vbcOtYSwgcHVlZGUgZW50ZW5kZXIgZXN0b3MgZ3LDoWZpY29zIHkgbWFwYXMgeSBhY2VyY2Fyc2UgdW4gcG9jbyBtYXMgYSBsYSByZWFsaWRhZC4NCg0KIyA3LiBCaWJsaW9ncmFmw61hDQoNCkxvcyBkYXRvcyBsb3MgaGUgb2J0ZW5pZG8gZGUgW2VubGFjZSBhIEVVUk9TVEFUXShodHRwczovL2VjLmV1cm9wYS5ldS9ldXJvc3RhdC9kYXRhL2RhdGFiYXNlKSANCg0KSGUgdXRpbGl6YWRvIGVzdGUgdHV0b3JpYWwgcGFyYSBncmFmaWNhciB5IHBhcmEgbG9zIG1hcGFzOg0KW2VubGFjZSBhbCB0dXRvcmlhbF0oaHR0cHM6Ly9yc3R1ZGlvLXB1YnMtc3RhdGljLnMzLmFtYXpvbmF3cy5jb20vNTcxNTIxX2RjNjUwZGZjMjEyNjRiNDRhYWRjNDBjYzI3NDhhY2I1Lmh0bWwpIA0KDQpQYXJhIGxvIGdyYWZpY29zIGludGVyYWN0aXZvcyBtZSBoZSBpbnNwaXJhZG8gZGUgZXN0YSB3ZWI6IFtlbmxhY2UgYSBsYSB3ZWJdKGh0dHBzOi8vd3d3LmRhdGFub3ZpYS5jb20vZW4vYmxvZy9nZ2FuaW1hdGUtaG93LXRvLWNyZWF0ZS1wbG90cy13aXRoLWJlYXV0aWZ1bC1hbmltYXRpb24taW4tci8pDQoNClBvciBzdXB1ZXN0byBoZSB0dWlsaXphZG8gbG9zIHR1dG9yaWFsZXMgZGUgZ2dwbG90MiB5IERhdGEgbXVuZ2luZyBwYXJhIGdyYWZpY2FyIHkgcGFyYSBhcnJlZ2xhciBsb3MgZGF0b3MuDQoNCg==