Identificación del impacto de la observación y el monitoreo sobre sistemas reactivos en ambientes distribuidos
El presente documento provee una alternativa de observabilidad y monitoreo sobre sistemas distribuidos utilizando herramientas de software libre, presentando una plataforma de visualización de observabilidad. Además de identificar las mejores prácticas a la hora de monitorear aplicaciones reactivas...
- Autores:
-
Benedetti Velasquez, Adolfo Enrique
- Tipo de recurso:
- Trabajo de grado de pregrado
- Fecha de publicación:
- 2021
- Institución:
- Universidad Distrital Francisco José de Caldas
- Repositorio:
- RIUD: repositorio U. Distrital
- Idioma:
- spa
- OAI Identifier:
- oai:repository.udistrital.edu.co:11349/29109
- Acceso en línea:
- http://hdl.handle.net/11349/29109
- Palabra clave:
- Quarkus
Java
Jaeger
Búsqueda elástica
Observabilidad
Rastreo
Ingeniería de Sistemas - Tesis y disertaciones académicas
Java (Programa para computador)
Sistemas de archivos distribuidos
Sistemas multimedia distribuidos
Software libre
Quarkus
Java
Jaeger
Elastic search
Observability
Tracking
- Rights
- License
- Atribución 4.0 Internacional
id |
UDISTRITA2_ad50cbc2d032ae14a4505e91b259589e |
---|---|
oai_identifier_str |
oai:repository.udistrital.edu.co:11349/29109 |
network_acronym_str |
UDISTRITA2 |
network_name_str |
RIUD: repositorio U. Distrital |
repository_id_str |
|
dc.title.spa.fl_str_mv |
Identificación del impacto de la observación y el monitoreo sobre sistemas reactivos en ambientes distribuidos |
dc.title.alternative.spa.fl_str_mv |
Identification of the impact of observability and monitoring on reactive systems in distributed environments |
dc.title.titleenglish.spa.fl_str_mv |
Identification of the impact of observation and monitoring on reactive systems in distributed environments |
title |
Identificación del impacto de la observación y el monitoreo sobre sistemas reactivos en ambientes distribuidos |
spellingShingle |
Identificación del impacto de la observación y el monitoreo sobre sistemas reactivos en ambientes distribuidos Quarkus Java Jaeger Búsqueda elástica Observabilidad Rastreo Ingeniería de Sistemas - Tesis y disertaciones académicas Java (Programa para computador) Sistemas de archivos distribuidos Sistemas multimedia distribuidos Software libre Quarkus Java Jaeger Elastic search Observability Tracking |
title_short |
Identificación del impacto de la observación y el monitoreo sobre sistemas reactivos en ambientes distribuidos |
title_full |
Identificación del impacto de la observación y el monitoreo sobre sistemas reactivos en ambientes distribuidos |
title_fullStr |
Identificación del impacto de la observación y el monitoreo sobre sistemas reactivos en ambientes distribuidos |
title_full_unstemmed |
Identificación del impacto de la observación y el monitoreo sobre sistemas reactivos en ambientes distribuidos |
title_sort |
Identificación del impacto de la observación y el monitoreo sobre sistemas reactivos en ambientes distribuidos |
dc.creator.fl_str_mv |
Benedetti Velasquez, Adolfo Enrique |
dc.contributor.advisor.none.fl_str_mv |
Parra Peña, John Freddy Daza Corredor, Alejandro Paolo |
dc.contributor.author.none.fl_str_mv |
Benedetti Velasquez, Adolfo Enrique |
dc.subject.spa.fl_str_mv |
Quarkus Java Jaeger Búsqueda elástica Observabilidad Rastreo |
topic |
Quarkus Java Jaeger Búsqueda elástica Observabilidad Rastreo Ingeniería de Sistemas - Tesis y disertaciones académicas Java (Programa para computador) Sistemas de archivos distribuidos Sistemas multimedia distribuidos Software libre Quarkus Java Jaeger Elastic search Observability Tracking |
dc.subject.lemb.spa.fl_str_mv |
Ingeniería de Sistemas - Tesis y disertaciones académicas Java (Programa para computador) Sistemas de archivos distribuidos Sistemas multimedia distribuidos Software libre |
dc.subject.keyword.spa.fl_str_mv |
Quarkus Java Jaeger Elastic search Observability Tracking |
description |
El presente documento provee una alternativa de observabilidad y monitoreo sobre sistemas distribuidos utilizando herramientas de software libre, presentando una plataforma de visualización de observabilidad. Además de identificar las mejores prácticas a la hora de monitorear aplicaciones reactivas en sistemas distribuidos escalables. Explorar los diferentes frameworks reactivos disponibles dentro del software libre que hagan uso de la máquina virtual de Java. Presentar como algunos frameworks libres que usan programación asincrónica en la máquina virtual de Java, son herramientas accesibles y eficientes para escribir de forma asíncrona aplicaciones escalables enfocadas a la nube. Y para finalizar construye un prototipo observable reactivo con su respectivo cliente de carga usando alguno de estos frameworks. El rápido escalamiento de compañías de internet, y posteriores subproductos de la nube como Amazon AWS o Google Cloud, combinado con herramientas enfocadas a infraestructura como Containers y Kubernetes, han abierto una nueva era de sistemas distribuidos operando en cientos de nodos alrededor de múltiples centros de datos. Arquitecturas enfocadas a microservicios actualmente han incrementando la complejidad de estos sistemas exponencialmente, a pesar de que permiten a los sistemas responder en un tiempo aceptable, escalar vertical y horizontalmente, permitir flujos de datos de forma asíncrona, hace aún más difícil monitorear el estatus actual de dichos sistemas. La programación asincrónica es clave para maximizar el uso de estos nuevos recursos de hardware, ya que permite lidiar con más conexiones concurrentes que con los paradigmas tradicionales de bloqueo de E / S (Entrada/ Salida). Los servicios deben atender las cargas de trabajo que pueden cambiar drásticamente de una hora a otra, por lo tanto, debemos diseñar un código que admita naturalmente la escalabilidad horizontal. Pero esto solo incrementa la complejidad de las aplicaciones, algo para lo cual el monitoreo de microservicios reactivos no estaba diseñado inicialmente. El monitoreo de microservicios reactivos se puede realizar haciendo uso combinado del clásico registro de eventos (Logging), rastreo distribuido y combinado esto con métricas, en los ambientes donde estos sistemas sean desplegados. |
publishDate |
2021 |
dc.date.created.none.fl_str_mv |
2021-06 |
dc.date.issued.none.fl_str_mv |
2021-06-28 |
dc.date.accessioned.none.fl_str_mv |
2022-05-25T17:17:40Z |
dc.date.available.none.fl_str_mv |
2022-05-25T17:17:40Z |
dc.type.spa.fl_str_mv |
Thesis |
dc.type.degree.spa.fl_str_mv |
Creación o Interpretación |
dc.type.driver.spa.fl_str_mv |
info:eu-repo/semantics/bachelorThesis |
dc.type.coar.spa.fl_str_mv |
http://purl.org/coar/resource_type/c_7a1f |
format |
http://purl.org/coar/resource_type/c_7a1f |
dc.identifier.citation.spa.fl_str_mv |
20-2021-040 |
dc.identifier.uri.none.fl_str_mv |
http://hdl.handle.net/11349/29109 |
identifier_str_mv |
20-2021-040 |
url |
http://hdl.handle.net/11349/29109 |
dc.language.iso.spa.fl_str_mv |
spa |
language |
spa |
dc.relation.ispartofseries.none.fl_str_mv |
20-2021-040; |
dc.rights.*.fl_str_mv |
Atribución 4.0 Internacional |
dc.rights.coar.fl_str_mv |
http://purl.org/coar/access_right/c_abf2 |
dc.rights.uri.*.fl_str_mv |
http://creativecommons.org/licenses/by/4.0/ |
dc.rights.acceso.spa.fl_str_mv |
Abierto (Texto Completo) |
rights_invalid_str_mv |
Atribución 4.0 Internacional http://creativecommons.org/licenses/by/4.0/ Abierto (Texto Completo) http://purl.org/coar/access_right/c_abf2 |
dc.format.mimetype.spa.fl_str_mv |
pdf |
dc.publisher.spa.fl_str_mv |
Proyecto curricular de Ingeniería de Sistemas |
institution |
Universidad Distrital Francisco José de Caldas |
bitstream.url.fl_str_mv |
http://repository.udistrital.edu.co/bitstream/11349/29109/10/BenedettiVelasquezAdolfoEnrique2021.pdf http://repository.udistrital.edu.co/bitstream/11349/29109/9/Licencia%20y%20autorizacio%cc%81n%20de%20los%20autores%20para%20publicar.pdf http://repository.udistrital.edu.co/bitstream/11349/29109/12/license_rdf http://repository.udistrital.edu.co/bitstream/11349/29109/13/license.txt http://repository.udistrital.edu.co/bitstream/11349/29109/14/BenedettiVelasquezAdolfoEnrique2021.pdf.jpg http://repository.udistrital.edu.co/bitstream/11349/29109/15/Licencia%20y%20autorizacio%cc%81n%20de%20los%20autores%20para%20publicar.pdf.jpg |
bitstream.checksum.fl_str_mv |
094ee462ebc2a3ba11e9880b22e38ebe 4928cdd4220ae4693e429ac74cdcdaf0 1608e658af296c3febc577e957e919bf 997daf6c648c962d566d7b082dac908d 42c64fec61eedca6a6472bcc2ebbdad3 a6bc0139dddc493af9461cfcb84c7f54 |
bitstream.checksumAlgorithm.fl_str_mv |
MD5 MD5 MD5 MD5 MD5 MD5 |
repository.name.fl_str_mv |
Repositorio Institucional Universidad Distrital - RIUD |
repository.mail.fl_str_mv |
repositorio@udistrital.edu.co |
_version_ |
1803712672973193216 |
spelling |
Parra Peña, John FreddyDaza Corredor, Alejandro PaoloBenedetti Velasquez, Adolfo EnriqueBenedetti Velásquez, Adolfo Enrique2022-05-25T17:17:40Z2022-05-25T17:17:40Z2021-062021-06-2820-2021-040http://hdl.handle.net/11349/29109El presente documento provee una alternativa de observabilidad y monitoreo sobre sistemas distribuidos utilizando herramientas de software libre, presentando una plataforma de visualización de observabilidad. Además de identificar las mejores prácticas a la hora de monitorear aplicaciones reactivas en sistemas distribuidos escalables. Explorar los diferentes frameworks reactivos disponibles dentro del software libre que hagan uso de la máquina virtual de Java. Presentar como algunos frameworks libres que usan programación asincrónica en la máquina virtual de Java, son herramientas accesibles y eficientes para escribir de forma asíncrona aplicaciones escalables enfocadas a la nube. Y para finalizar construye un prototipo observable reactivo con su respectivo cliente de carga usando alguno de estos frameworks. El rápido escalamiento de compañías de internet, y posteriores subproductos de la nube como Amazon AWS o Google Cloud, combinado con herramientas enfocadas a infraestructura como Containers y Kubernetes, han abierto una nueva era de sistemas distribuidos operando en cientos de nodos alrededor de múltiples centros de datos. Arquitecturas enfocadas a microservicios actualmente han incrementando la complejidad de estos sistemas exponencialmente, a pesar de que permiten a los sistemas responder en un tiempo aceptable, escalar vertical y horizontalmente, permitir flujos de datos de forma asíncrona, hace aún más difícil monitorear el estatus actual de dichos sistemas. La programación asincrónica es clave para maximizar el uso de estos nuevos recursos de hardware, ya que permite lidiar con más conexiones concurrentes que con los paradigmas tradicionales de bloqueo de E / S (Entrada/ Salida). Los servicios deben atender las cargas de trabajo que pueden cambiar drásticamente de una hora a otra, por lo tanto, debemos diseñar un código que admita naturalmente la escalabilidad horizontal. Pero esto solo incrementa la complejidad de las aplicaciones, algo para lo cual el monitoreo de microservicios reactivos no estaba diseñado inicialmente. El monitoreo de microservicios reactivos se puede realizar haciendo uso combinado del clásico registro de eventos (Logging), rastreo distribuido y combinado esto con métricas, en los ambientes donde estos sistemas sean desplegados.This document provides an alternative for observability and monitoring on distributed systems using free software tools, presenting an observability visualisation platform. In addition to identifying best practices when monitoring reactive applications in scalable distributed systems. Also, exploring the different reactive frameworks available within free software that make use of the Java virtual machine. Showing how some free frameworks that use asynchronous programming in the Java virtual machine are accessible and efficient tools to write scalable cloud-focused applications asynchronously. And finally, build a reactive observable prototype with its respective load client. T he fast grow of internet companies, and subsequent cloud by-products such as Amazon AWS or Google Cloud, combined with infrastructure-focused tools such as Containers and Kubernetes, have opened a new era of distributed systems operating in hundreds of nodes around multiple hubs. Architectures focused on microservices currently have increasing the complexity of these systems exponentially, although they allow systems to respond in an acceptable time, scale vertically and horizontally allowing data flows asynchronously is making more difficult to monitor the current status of such systems. Asynchronous programming is key to maximising the use of these new hardware resources, allowing to deal with more concurrent connections than with traditional I/O blocking paradigms. Services must cater for workloads that can change dramatically from hour to hour, therefore we must design code that naturally supports horizontal scalability. But this only increases the complexity of the applications, something for which reactive microservices monitoring was not designed initially. The monitoring of reactive microservices can be carried out by making combined use of the classic event logging and distributed tracing in the environments where these systems are deployed.pdfspaProyecto curricular de Ingeniería de Sistemas20-2021-040;Atribución 4.0 Internacionalhttp://creativecommons.org/licenses/by/4.0/Abierto (Texto Completo)http://purl.org/coar/access_right/c_abf2QuarkusJavaJaegerBúsqueda elásticaObservabilidadRastreoIngeniería de Sistemas - Tesis y disertaciones académicasJava (Programa para computador)Sistemas de archivos distribuidosSistemas multimedia distribuidosSoftware libreQuarkusJavaJaegerElastic searchObservabilityTrackingIdentificación del impacto de la observación y el monitoreo sobre sistemas reactivos en ambientes distribuidosIdentification of the impact of observability and monitoring on reactive systems in distributed environmentsIdentification of the impact of observation and monitoring on reactive systems in distributed environmentsThesisCreación o Interpretacióninfo:eu-repo/semantics/bachelorThesishttp://purl.org/coar/resource_type/c_7a1fORIGINALBenedettiVelasquezAdolfoEnrique2021.pdfBenedettiVelasquezAdolfoEnrique2021.pdfapplication/pdf6741629http://repository.udistrital.edu.co/bitstream/11349/29109/10/BenedettiVelasquezAdolfoEnrique2021.pdf094ee462ebc2a3ba11e9880b22e38ebeMD510open accessLicencia y autorización de los autores para publicar.pdfLicencia y autorización de los autores para publicar.pdfLicenciaapplication/pdf6730831http://repository.udistrital.edu.co/bitstream/11349/29109/9/Licencia%20y%20autorizacio%cc%81n%20de%20los%20autores%20para%20publicar.pdf4928cdd4220ae4693e429ac74cdcdaf0MD59metadata only accessCC-LICENSElicense_rdflicense_rdfapplication/rdf+xml; charset=utf-8914http://repository.udistrital.edu.co/bitstream/11349/29109/12/license_rdf1608e658af296c3febc577e957e919bfMD512open accessLICENSElicense.txtlicense.txttext/plain; charset=utf-87167http://repository.udistrital.edu.co/bitstream/11349/29109/13/license.txt997daf6c648c962d566d7b082dac908dMD513open accessTHUMBNAILBenedettiVelasquezAdolfoEnrique2021.pdf.jpgBenedettiVelasquezAdolfoEnrique2021.pdf.jpgIM Thumbnailimage/jpeg6849http://repository.udistrital.edu.co/bitstream/11349/29109/14/BenedettiVelasquezAdolfoEnrique2021.pdf.jpg42c64fec61eedca6a6472bcc2ebbdad3MD514open accessLicencia y autorización de los autores para publicar.pdf.jpgLicencia y autorización de los autores para publicar.pdf.jpgIM Thumbnailimage/jpeg13813http://repository.udistrital.edu.co/bitstream/11349/29109/15/Licencia%20y%20autorizacio%cc%81n%20de%20los%20autores%20para%20publicar.pdf.jpga6bc0139dddc493af9461cfcb84c7f54MD515open access11349/29109oai:repository.udistrital.edu.co:11349/291092023-06-09 16:07:27.145open accessRepositorio Institucional Universidad Distrital - RIUDrepositorio@udistrital.edu.coTElDRU5DSUEgWSBBVVRPUklaQUNJw5NOIEVTUEVDSUFMIFBBUkEgUFVCTElDQVIgWSBQRVJNSVRJUiBMQSBDT05TVUxUQSBZIFVTTyBERSBDT05URU5JRE9TIEVOIEVMIFJFUE9TSVRPUklPIElOU1RJVFVDSU9OQUwgREUgTEEgVU5JVkVSU0lEQUQgRElTVFJJVEFMCgpUw6lybWlub3MgeSBjb25kaWNpb25lcyBkZSB1c28gcGFyYSBwdWJsaWNhY2nDs24gZGUgb2JyYXMgZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyAoUklVRCkKCkNvbW8gdGl0dWxhcihlcykgZGVsKG9zKSBkZXJlY2hvKHMpIGRlIGF1dG9yLCBjb25maWVybyAoZXJpbW9zKSBhIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIChlbiBhZGVsYW50ZSwgTEEgVU5JVkVSU0lEQUQpIHVuYSBsaWNlbmNpYSBwYXJhIHVzbyBubyBleGNsdXNpdmEsIGxpbWl0YWRhIHkgZ3JhdHVpdGEgc29icmUgbGEgb2JyYSBxdWUgaW50ZWdyYXLDoSBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIChlbiBhZGVsYW50ZSwgUklVRCksIGRlIGFjdWVyZG8gYSBsYXMgc2lndWllbnRlcyByZWdsYXMsIGxhcyBjdWFsZXMgZGVjbGFybyAoYW1vcykgY29ub2NlciB5IGFjZXB0YXI6CgphKQlFc3RhcsOhIHZpZ2VudGUgYSBwYXJ0aXIgZGUgbGEgZmVjaGEgZW4gcXVlIHNlIGluY2x1eWEgZW4gZWwgUklVRCB5IGhhc3RhIHBvciB1biBwbGF6byBkZSBkaWV6ICgxMCkgQcOxb3MsIHByb3Jyb2dhYmxlIGluZGVmaW5pZGFtZW50ZSBwb3IgZWwgdGllbXBvIHF1ZSBkdXJlIGVsIGRlcmVjaG8gUGF0cmltb25pYWwgZGVsIGF1dG9yOyBsYSBjdWFsIHBvZHLDoSBkYXJzZSBwb3IgdGVybWluYWRhIHByZXZpYSBzb2xpY2l0dWQgYSBMQSBVTklWRVJTSURBRCBwb3IgZXNjcml0byBjb24gdW5hIGFudGVsYWNpw7NuIGRlIGRvcyAoMikgbWVzZXMgYW50ZXMgZGVsIHZlbmNpbWllbnRvIGRlbCBwbGF6byBpbmljaWFsIG8gZWwgZGUgc3UocykgcHLDs3Jyb2dhKHMpLgoKYikJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIHB1YmxpY2FyIGxhIG9icmEgZW4gbGFzIGRpc3RpbnRhcyB2ZXJzaW9uZXMgcmVxdWVyaWRhcyBwb3IgZWwgUklVRCAoZGlnaXRhbCwgaW1wcmVzbywgZWxlY3Ryw7NuaWNvIHUgb3RybyBtZWRpbyBjb25vY2lkbyBvIHBvciBjb25vY2VyKSBMQSBVTklWRVJTSURBRCBubyBzZXLDoSByZXNwb25zYWJsZSBlbiBlbCBldmVudG8gcXVlIGVsIGRvY3VtZW50byBhcGFyZXpjYSByZWZlcmVuY2lhZG8gZW4gbW90b3JlcyBkZSBiw7pzcXVlZGEgbyByZXBvc2l0b3Jpb3MgZGlmZXJlbnRlcyBhbCBSSVVELCB1bmEgdmV6IGVsKG9zKSBhdXRvcihlcykgc29saWNpdGVuIHN1IGVsaW1pbmFjacOzbiBkZWwgUklVRCwgZGFkbyBxdWUgbGEgbWlzbWEgc2Vyw6EgcHVibGljYWRhIGVuIEludGVybmV0LgoKYykJTGEgYXV0b3JpemFjacOzbiBzZSBoYWNlIGEgdMOtdHVsbyBncmF0dWl0bywgcG9yIGxvIHRhbnRvLCBsb3MgYXV0b3JlcyByZW51bmNpYW4gYSByZWNpYmlyIGJlbmVmaWNpbyBhbGd1bm8gcG9yIGxhIHB1YmxpY2FjacOzbiwgZGlzdHJpYnVjacOzbiwgY29tdW5pY2FjacOzbiBww7pibGljYSB5IGN1YWxxdWllciBvdHJvIHVzbyBxdWUgc2UgaGFnYSBlbiBsb3MgdMOpcm1pbm9zIGRlIGxhIHByZXNlbnRlIGxpY2VuY2lhIHkgZGUgbGEgbGljZW5jaWEgZGUgdXNvIGNvbiBxdWUgc2UgcHVibGljYSAoQ3JlYXRpdmUgQ29tbW9ucykuCgpkKQlMb3MgY29udGVuaWRvcyBwdWJsaWNhZG9zIGVuIGVsIFJJVUQgc29uIG9icmEocykgb3JpZ2luYWwoZXMpIHNvYnJlIGxhIGN1YWwoZXMpIGVsKG9zKSBhdXRvcihlcykgY29tbyB0aXR1bGFyZXMgZGUgbG9zIGRlcmVjaG9zIGRlIGF1dG9yLCBhc3VtZW4gdG90YWwgcmVzcG9uc2FiaWxpZGFkIHBvciBlbCBjb250ZW5pZG8gZGUgc3Ugb2JyYSBhbnRlIExBIFVOSVZFUlNJREFEIHkgYW50ZSB0ZXJjZXJvcy4gRW4gdG9kbyBjYXNvIExBIFVOSVZFUlNJREFEIHNlIGNvbXByb21ldGUgYSBpbmRpY2FyIHNpZW1wcmUgbGEgYXV0b3LDrWEgaW5jbHV5ZW5kbyBlbCBub21icmUgZGVsIGF1dG9yIHkgbGEgZmVjaGEgZGUgcHVibGljYWNpw7NuLgoKZSkJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIGluY2x1aXIgbGEgb2JyYSBlbiBsb3Mgw61uZGljZXMgeSBidXNjYWRvcmVzIHF1ZSBlc3RpbWVuIG5lY2VzYXJpb3MgcGFyYSBtYXhpbWl6YXIgbGEgdmlzaWJpbGlkYWQgZWwgdXNvIHkgZWwgaW1wYWN0byBkZSBsYSBwcm9kdWNjacOzbiBjaWVudMOtZmljYSwgYXJ0w61zdGljYSB5IGFjYWTDqW1pY2EgZW4gbGEgY29tdW5pZGFkIGxvY2FsLCBuYWNpb25hbCBvIGludGVybmFjaW9uYWwuCgoKZikJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIGNvbnZlcnRpciBsYSBvYnJhIGEgY3VhbHF1aWVyIG1lZGlvIG8gZm9ybWF0byBjb24gZWwgZmluIGRlIHN1IHByZXNlcnZhY2nDs24gZW4gZWwgdGllbXBvIHF1ZSBsYSBwcmVzZW50ZSBsaWNlbmNpYSB5IGxhIGRlIHN1cyBwcsOzcnJvZ2FzLgoKCkNvbiBiYXNlIGVuIGxvIGFudGVyaW9yIGF1dG9yaXpvKGFtb3MpLCBhIGZhdm9yIGRlbCBSSVVEIHkgZGUgc3VzIHVzdWFyaW9zLCBsYSBwdWJsaWNhY2nDs24geSBjb25zdWx0YSBkZSBsYSBzaWd1aWVudGUgb2JyYToKClRpdHVsbwoKQXV0b3IgICAgICAgQXBlbGxpZG9zICAgICAgICAgTm9tYnJlcwoKMQoKMgoKMwoKCmcpCUF1dG9yaXpvKGFtb3MpLCBxdWUgbGEgb2JyYSBzZWEgcHVlc3RhIGEgZGlzcG9zaWNpw7NuIGRlbCBww7pibGljbyBlbiBsb3MgdMOpcm1pbm9zIGVzdGFibGVjaWRvcyBlbiBsb3MgbGl0ZXJhbGVzIGFudGVyaW9yZXMsIGJham8gbG9zIGzDrW1pdGVzIGRlZmluaWRvcyBwb3IgTEEgVU5JVkVSU0lEQUQsIGVuIGxhcyDigJxDb25kaWNpb25lcyBkZSB1c28gZGUgZXN0cmljdG8gY3VtcGxpbWllbnRv4oCdIGRlIGxvcyByZWN1cnNvcyBwdWJsaWNhZG9zIGVuIGVsIFJJVUQsIGN1eW8gdGV4dG8gY29tcGxldG8gc2UgcHVlZGUgY29uc3VsdGFyIGVuIGh0dHA6Ly9yZXBvc2l0b3J5LnVkaXN0cml0YWwuZWR1LmNvLwoKaCkJQ29ub3pjbyhjZW1vcykgeSBhY2VwdG8oYW1vcykgcXVlIG90b3JnbyhhbW9zKSB1bmEgbGljZW5jaWEgZXNwZWNpYWwgcGFyYSBwdWJsaWNhY2nDs24gZGUgb2JyYXMgZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcywgbGljZW5jaWEgICBkZSBsYSBjdWFsIGhlIChoZW1vcykgb2J0ZW5pZG8gdW5hIGNvcGlhLgoKaSkJTWFuaWZpZXN0byhhbW9zKSBtaSAobnVlc3RybykgdG90YWwgYWN1ZXJkbyBjb24gbGFzIGNvbmRpY2lvbmVzIGRlIHVzbyB5IHB1YmxpY2FjacOzbiBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIHF1ZSBzZSBkZXNjcmliZW4geSBleHBsaWNhbiBlbiBlbCBwcmVzZW50ZSBkb2N1bWVudG8uCgpqKQlDb25vemNvKGNlbW9zKSBsYSBub3JtYXRpdmlkYWQgaW50ZXJuYSBkZSAgTEEgVU5JVkVSU0lEQUQ7IGVuIGNvbmNyZXRvLCBlbCBBY3VlcmRvIDAwNCBkZSAyMDEyIGRlbCBDU1UsIEFjdWVyZG8gMDIzIGRlIDIwMTIgZGVsIENTVSBzb2JyZSBQb2zDrXRpY2EgRWRpdG9yaWFsLCBBY3VlcmRvIDAyNiAgZGVsIDMxIGRlIGp1bGlvIGRlIDIwMTIgc29icmUgZWwgcHJvY2VkaW1pZW50byBwYXJhIGxhIHB1YmxpY2FjacOzbiBkZSB0ZXNpcyBkZSBwb3N0Z3JhZG8gZGUgbG9zIGVzdHVkaWFudGVzIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzLCAgQWN1ZXJkbyAwMzAgZGVsIDAzIGRlIGRpY2llbWJyZSBkZSAyMDEzIHBvciBtZWRpbyBkZWwgY3VhbCBzZSBjcmVhIGVsIFJlcG9zaXRvcmlvIEluc3RpdHVjaW9uYWwgZGUgbGEgVW5pdmVyc2lkYWQgRGlzdHJpdGFsIEZyYW5jaXNjbyBKb3PDqSBkZSBDYWxkYXMsIEFjdWVyZG8gMDM4IGRlIDIwMTUgMjAxNSDigJxwb3IgZWwgY3VhbCBzZSBtb2RpZmljYSBlbCBBY3VlcmRvIDAzMSBkZSAyMDE0IGRlIDIwMTQgcXVlIHJlZ2xhbWVudGEgZWwgdHJhYmFqbyBkZSBncmFkbyBwYXJhIGxvcyBlc3R1ZGlhbnRlcyBkZSBwcmVncmFkbyBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyB5IHNlIGRpY3RhbiBvdHJhcyBkaXJlY3RyaWNlc+KAnSB5IGxhcyBkZW3DoXMgbm9ybWFzIGNvbmNvcmRhbnRlIHkgY29tcGxlbWVudGFyaWFzIHF1ZSByaWdlbiBhbCByZXNwZWN0bywgZXNwZWNpYWxtZW50ZSBsYSBsZXkgMjMgZGUgMTk4MiwgbGEgbGV5IDQ0IGRlIDE5OTMgeSBsYSBkZWNpc2nDs24gQW5kaW5hIDM1MSBkZSAxOTkzLiBFc3RvcyBkb2N1bWVudG9zIHBvZHLDoW4gc2VyIGNvbnN1bHRhZG9zIHkgZGVzY2FyZ2Fkb3MgZW4gZWwgcG9ydGFsIHdlYiBkZSBsYSBiaWJsaW90ZWNhIGh0dHA6Ly9zaXN0ZW1hZGViaWJsaW90ZWNhcy51ZGlzdHJpdGFsLmVkdS5jby8KCmspCUFjZXB0byhhbW9zKSBxdWUgTEEgVU5JVkVSU0lEQUQgbm8gc2UgcmVzcG9uc2FiaWxpemEgcG9yIGxhcyBpbmZyYWNjaW9uZXMgYSBsYSBwcm9waWVkYWQgaW50ZWxlY3R1YWwgbyBEZXJlY2hvcyBkZSBBdXRvciBjYXVzYWRhcyBwb3IgbG9zIHRpdHVsYXJlcyBkZSBsYSBwcmVzZW50ZSBMaWNlbmNpYSB5IGRlY2xhcmFtb3MgcXVlIG1hbnRlbmRyw6kgKGVtb3MpIGluZGVtbmUgYSBMQSBVTklWRVJTSURBRCBwb3IgbGFzIHJlY2xhbWFjaW9uZXMgbGVnYWxlcyBkZSBjdWFscXVpZXIgdGlwbyBxdWUgbGxlZ2FyZW4gYSBwcmVzZW50YXJzZSBwb3IgdmlvbGFjacOzbiBkZSBkZXJlY2hvcyBhIGxhIHByb3BpZWRhZCBpbnRlbGVjdHVhbCBvIGRlIEF1dG9yIHJlbGFjaW9uYWRvcyBjb24gbG9zIGRvY3VtZW50b3MgcmVnaXN0cmFkb3MgZW4gZWwgUklVRC4KCmwpCUVsIChsb3MpIGF1dG9yKGVzKSBtYW5pZmllc3RhKG1vcykgcXVlIGxhIG9icmEgb2JqZXRvIGRlIGxhIHByZXNlbnRlIGF1dG9yaXphY2nDs24gZXMgb3JpZ2luYWwsIGRlIGV4Y2x1c2l2YSBhdXRvcsOtYSwgeSBzZSByZWFsaXrDsyBzaW4gdmlvbGFyIG8gdXN1cnBhciBkZXJlY2hvcyBkZSBhdXRvciBkZSB0ZXJjZXJvczsgZGUgdGFsIHN1ZXJ0ZSwgZW4gY2FzbyBkZSBwcmVzZW50YXJzZSBjdWFscXVpZXIgcmVjbGFtYWNpw7NuIG8gYWNjacOzbiBwb3IgcGFydGUgZGUgdW4gdGVyY2VybyBlbiBjdWFudG8gYSBsb3MgZGVyZWNob3MgZGUgYXV0b3Igc29icmUgbGEgb2JyYSwgZWwgKGxvcykgZXN0dWRpYW50ZShzKSDigJMgYXV0b3IoZXMpIGFzdW1pcsOhKG4pIHRvZGEgbGEgcmVzcG9uc2FiaWxpZGFkIHkgc2FsZHLDoShuKSBlbiBkZWZlbnNhIGRlIGxvcyBkZXJlY2hvcyBhcXXDrSBhdXRvcml6YWRvcy4gUGFyYSB0b2RvcyBsb3MgZWZlY3RvcywgTEEgVU5JVkVSU0lEQUQgYWN0w7phIGNvbW8gdW4gdGVyY2VybyBkZSBidWVuYSBmZS4KCgptKQlFbCAobG9zKSBhdXRvcihlcykgbWFuaWZpZXN0YShtb3MpIHF1ZSBjb25vemNvKGNlbW9zKSBsYSBhdXRvbm9tw61hIHkgbG9zIGRlcmVjaG9zLCBxdWUgcG9zZWUobW9zKSBzb2JyZSBsYSBvYnJhIHksIGNvbW8gdGFsLCBlcyAoc29tb3MpIHJlc3BvbnNhYmxlKHMpIGRlbCBhbGNhbmNlIGp1csOtZGljbyB5IGxlZ2FsLCBkZSBlc2NvZ2VyIGxhIG9wY2nDs24gZGUgbGEgcHVibGljYWNpw7NuIG8gZGUgcmVzdHJpY2Npw7NuIGRlIGxhIHB1YmxpY2FjacOzbiBkZWwgZG9jdW1lbnRvIHJlZ2lzdHJhZG8gZW4gZWwgUklVRC4KCgoKCgoKU0kgRUwgRE9DVU1FTlRPIFNFIEJBU0EgRU4gVU4gVFJBQkFKTyBRVUUgSEEgU0lETyBQQVRST0NJTkFETyBPIEFQT1lBRE8gUE9SIFVOQSBBR0VOQ0lBIE8gVU5BIE9SR0FOSVpBQ0nDk04sIENPTiBFWENFUENJw5NOIERFIExBIFVOSVZFUlNJREFEIERJU1RSSVRBTCBGUkFOQ0lTQ08gSk9TRSBERSBDQUxEQVMsIExPUyBBVVRPUkVTIEdBUkFOVElaQU4gUVVFIFNFIEhBIENVTVBMSURPIENPTiBMT1MKREVSRUNIT1MgWSBPQkxJR0FDSU9ORVMgUkVRVUVSSURPUyBQT1IgRUwgUkVTUEVDVElWTyBDT05UUkFUTyBPIEFDVUVSRE8uCgoKCgoKCgoKCgoKCgoKCgoKCgoKCkVuIGNvbnN0YW5jaWEgZGUgbG8gYW50ZXJpb3IsIGZpcm1vKGFtb3MpIGVsIHByZXNlbnRlIGRvY3VtZW50bywgZW4gbGEgY2l1ZGFkIGRlIEJvZ290w6EsIEQuQy4sIGEgbG9zCgoKRklSTUEgREUgTE9TIFRJVFVMQVJFUyBERSBERVJFQ0hPUyBERSBBVVRPUgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fICAgQy5DLiBOby4gX19fX19fX19fX19fX19fX19fCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gICBDLkMuIE5vLiBfX19fX19fX19fX19fX19fX18KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAgIEMuQy4gTm8uIF9fX19fX19fX19fX19fX19fXwoKCgpDb3JyZW8gRWxlY3Ryw7NuaWNvIEluc3RpdHVjaW9uYWwgZGVsIChkZSBsb3MpIEF1dG9yKGVzKToKCkF1dG9yCSAgICAgIENvcnJlbyBFbGVjdHLDs25pY28KCjEKCjIKCjMKCk5vbWJyZSBkZSBEaXJlY3RvcihlcykgZGUgR3JhZG86CgoxCgoyCgozCgpOb21icmUgRmFjdWx0YWQgeSBQcm95ZWN0byBDdXJyaWN1bGFyOgoKRmFjdWx0YWQJUHJveWVjdG8gQ3VycmljdWxhcgoKCgoKCgoKCk5vdGE6IEVuIGNhc28gcXVlIG5vIGVzdMOpIGRlIGFjdWVyZG8gY29uIGxhcyBjb25kaWNpb25lcyBkZSBsYSBwcmVzZW50ZSBsaWNlbmNpYSwgeSBtYW5pZmllc3RlIGFsZ3VuYSByZXN0cmljY2nDs24gc29icmUgbGEgb2JyYSwganVzdGlmaXF1ZSBsb3MgbW90aXZvcyBwb3IgbG9zIGN1YWxlcyBlbCBkb2N1bWVudG8geSBzdXMgYW5leG9zIG5vIHB1ZWRlbiBzZXIgcHVibGljYWRvcyBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIFJJVUQuCgoKU2kgcmVxdWllcmUgbcOhcyBlc3BhY2lvLCBwdWVkZSBhbmV4YXIgdW5hIGNvcGlhIHNpbWlsYXIgYSBlc3RhIGhvamEK |