Aplicación distribuida para la detección de ambigüedades en los requerimientos de software utilizando técnicas de machine learning y bases de conocimiento
En este proyecto de grado, se abordó la creación de una aplicación web de enfoque distribuido, que utiliza técnicas avanzadas de Machine Learning y se apoya en bases de conocimiento, con el objetivo de identificar y resolver ambigüedades presentes en los requerimientos de software. Para lograrlo, se...
- Autores:
-
Hernández Capera, Fabián Mauricio
Niño González, Julián David
- Tipo de recurso:
- Trabajo de grado de pregrado
- Fecha de publicación:
- 2023
- Institución:
- Universidad Distrital Francisco José de Caldas
- Repositorio:
- RIUD: repositorio U. Distrital
- Idioma:
- spa
- OAI Identifier:
- oai:repository.udistrital.edu.co:11349/39845
- Acceso en línea:
- http://hdl.handle.net/11349/39845
- Palabra clave:
- Inteligencia Artificial
Detección de ambigüedades
Aplicación distribuida
Requerimientos de software
Machine Learning
Bases de conocimiento
Desarrollo de Software
Procesamiento de lenguaje natural
Aprendizaje automático
Ambigüedad en requisitos
Toma de decisiones
Validación automática de requisitos
Ingeniería Telemática -- Tesis y disertaciones académicas
Análisis de información -- Información
Aprendizaje automático -- Inteligencia artificial
Software -- Programación
Procesamiento electrónico de datos -- Bases de datos
Distributed application
Ambiguity detection
Software requirements
Machine Learning
Knowledge bases
software development
Natural language processing
Ambiguity in requirements
decision making
Automatic requirements validation
Artificial intelligence
- Rights
- License
- Attribution-NonCommercial-NoDerivatives 4.0 Internacional
id |
UDISTRITA2_a194b0ec1dfdadae203b59559fc57e21 |
---|---|
oai_identifier_str |
oai:repository.udistrital.edu.co:11349/39845 |
network_acronym_str |
UDISTRITA2 |
network_name_str |
RIUD: repositorio U. Distrital |
repository_id_str |
|
dc.title.spa.fl_str_mv |
Aplicación distribuida para la detección de ambigüedades en los requerimientos de software utilizando técnicas de machine learning y bases de conocimiento |
dc.title.titleenglish.spa.fl_str_mv |
Distributed application for detecting ambiguities in software requirements using machine learning techniques and knowledge bases |
title |
Aplicación distribuida para la detección de ambigüedades en los requerimientos de software utilizando técnicas de machine learning y bases de conocimiento |
spellingShingle |
Aplicación distribuida para la detección de ambigüedades en los requerimientos de software utilizando técnicas de machine learning y bases de conocimiento Inteligencia Artificial Detección de ambigüedades Aplicación distribuida Requerimientos de software Machine Learning Bases de conocimiento Desarrollo de Software Procesamiento de lenguaje natural Aprendizaje automático Ambigüedad en requisitos Toma de decisiones Validación automática de requisitos Ingeniería Telemática -- Tesis y disertaciones académicas Análisis de información -- Información Aprendizaje automático -- Inteligencia artificial Software -- Programación Procesamiento electrónico de datos -- Bases de datos Distributed application Ambiguity detection Software requirements Machine Learning Knowledge bases software development Natural language processing Ambiguity in requirements decision making Automatic requirements validation Artificial intelligence |
title_short |
Aplicación distribuida para la detección de ambigüedades en los requerimientos de software utilizando técnicas de machine learning y bases de conocimiento |
title_full |
Aplicación distribuida para la detección de ambigüedades en los requerimientos de software utilizando técnicas de machine learning y bases de conocimiento |
title_fullStr |
Aplicación distribuida para la detección de ambigüedades en los requerimientos de software utilizando técnicas de machine learning y bases de conocimiento |
title_full_unstemmed |
Aplicación distribuida para la detección de ambigüedades en los requerimientos de software utilizando técnicas de machine learning y bases de conocimiento |
title_sort |
Aplicación distribuida para la detección de ambigüedades en los requerimientos de software utilizando técnicas de machine learning y bases de conocimiento |
dc.creator.fl_str_mv |
Hernández Capera, Fabián Mauricio Niño González, Julián David |
dc.contributor.advisor.none.fl_str_mv |
Hernández Gutiérrez, Jairo |
dc.contributor.author.none.fl_str_mv |
Hernández Capera, Fabián Mauricio Niño González, Julián David |
dc.contributor.orcid.none.fl_str_mv |
Hernández Gutiérrez, Jairo [0000-0003-3908-2763] |
dc.subject.spa.fl_str_mv |
Inteligencia Artificial Detección de ambigüedades Aplicación distribuida Requerimientos de software Machine Learning Bases de conocimiento Desarrollo de Software Procesamiento de lenguaje natural Aprendizaje automático Ambigüedad en requisitos Toma de decisiones Validación automática de requisitos |
topic |
Inteligencia Artificial Detección de ambigüedades Aplicación distribuida Requerimientos de software Machine Learning Bases de conocimiento Desarrollo de Software Procesamiento de lenguaje natural Aprendizaje automático Ambigüedad en requisitos Toma de decisiones Validación automática de requisitos Ingeniería Telemática -- Tesis y disertaciones académicas Análisis de información -- Información Aprendizaje automático -- Inteligencia artificial Software -- Programación Procesamiento electrónico de datos -- Bases de datos Distributed application Ambiguity detection Software requirements Machine Learning Knowledge bases software development Natural language processing Ambiguity in requirements decision making Automatic requirements validation Artificial intelligence |
dc.subject.lemb.none.fl_str_mv |
Ingeniería Telemática -- Tesis y disertaciones académicas Análisis de información -- Información Aprendizaje automático -- Inteligencia artificial Software -- Programación Procesamiento electrónico de datos -- Bases de datos |
dc.subject.keyword.spa.fl_str_mv |
Distributed application Ambiguity detection Software requirements Machine Learning Knowledge bases software development Natural language processing Ambiguity in requirements decision making Automatic requirements validation Artificial intelligence |
description |
En este proyecto de grado, se abordó la creación de una aplicación web de enfoque distribuido, que utiliza técnicas avanzadas de Machine Learning y se apoya en bases de conocimiento, con el objetivo de identificar y resolver ambigüedades presentes en los requerimientos de software. Para lograrlo, se diseñó un método que combina algoritmos de aprendizaje automático con información almacenada en bases de datos vectoriales, permitiendo una detección precisa y eficiente de las ambigüedades más comunes. La aplicación final se destaca por su interfaz de fácil acceso y su rendimiento excepcional, respaldado adicionalmente por una infraestructura distribuida en la nube que asegura una distribución equitativa de la carga y una seguridad robusta a través de la aplicación de JSON Web Tokens. En conjunto, este proyecto culmina en una solución tecnológica innovadora que potencia la calidad y eficiencia en el proceso de desarrollo de software al abordar de manera efectiva las ambigüedades presentes en los requerimientos. |
publishDate |
2023 |
dc.date.created.none.fl_str_mv |
2023-08-31 |
dc.date.accessioned.none.fl_str_mv |
2024-08-17T16:20:12Z |
dc.date.available.none.fl_str_mv |
2024-08-17T16:20:12Z |
dc.type.spa.fl_str_mv |
bachelorThesis |
dc.type.degree.spa.fl_str_mv |
Pasantía |
dc.type.driver.none.fl_str_mv |
info:eu-repo/semantics/bachelorThesis |
dc.type.coar.none.fl_str_mv |
http://purl.org/coar/resource_type/c_7a1f |
format |
http://purl.org/coar/resource_type/c_7a1f |
dc.identifier.uri.none.fl_str_mv |
http://hdl.handle.net/11349/39845 |
url |
http://hdl.handle.net/11349/39845 |
dc.language.iso.none.fl_str_mv |
spa |
language |
spa |
dc.relation.references.none.fl_str_mv |
ReQtest. (2020). ReQtest – A Complete Guide. Recuperado de https://reqtest.com/what-isreqtest/. IBM. (2021). IBM Rational DOORS. Recuperado de https://www.ibm.com/products/rationaldoors. Jama Software. (2021). Jama Connect. Recuperado de https://www.jamasoftware.com/. Micro Focus. (2021). CaliberRM. Recuperado de https://www.opentext.com/. Sparx Systems. (2021). Enterprise Architect. Recuperado de https://sparxsystems.com/products/ea/index.html Pauzi, Z., & Capiluppi, A. (2023). Applications of natural language processing in software traceability: A systematic mapping study. Recuperado de https://www.sciencedirect.com/science/article/pii/S0164121223000110?via%3Dihub Siahaan, D., Raharjana, I. K., & Fatichah, C. (2023). User Story Extraction from Natural Language for Requirements Elicitation: Identify Software-Related Information from Online News. Recuperado de https://www.sciencedirect.com/science/article/abs/pii/S0950584923000496?via%3Dihub. Riaz, M. Q., Butt, W. H., & Rehman, S. (2019). Automatic Detection of Ambiguous Software Requirements: An Insight. Recuperado de https://ieeexplore.ieee.org/document/8714682 Rajender Kumar Surana, C. S., Shriya, Gupta, D. B., & Shankar, S. P. (2019). Intelligent Chatbot for Requirements Elicitation and Classification. Recuperado de https://ieeexplore.ieee.org/document/9016907. Liu, K., Reddivari, S., & Reddivari, K. (2022). Artificial Intelligence in Software Requirements Engineering: State-of-the-Art. Recuperado de https://ieeexplore.ieee.org/document/9874229 Elsevier. (2023). A review on risk assessment techniques for building services. Recuperado de https://linkinghub.elsevier.com/retrieve/pii/S0950584923000496. ScienceDirect. (s.f.). (2023) Explore scientific, technical, and medical research on ScienceDirect. Recuperado de https://www.sciencedirect.com/ Health Data Miner. (2019). CRISP-DM: Una metodología para minería de datos en salud. Recuperado el 19 de marzo de 2023, Recuperado de https://healthdataminer.com/datamining/crisp-dm-una-metodologia-para-mineria-de-datos-en-salud/ Biblioteca Hugging Face Transformers. (2023) Huggingface Recuperado de https://github.com/huggingface/transformers Pinecone (2023) Búsqueda de Similitud Vectorial a Escala. Recuperado de https://www.pinecone.io/ Gensim. (2023). Documentación vía GitHub Recuperado de https://radimrehurek.com/gensim/auto_examples/index.html#core-tutorials. Pinecone. (2023). Choosing index type and size Recuperado de https://docs.pinecone.io/docs/choosing-index-type-and-size Hugging Face (2023). Transformers Recuperado de https://huggingface.co/docs/transformers/index. Abstracta Chile. (2023). Herramienta para pruebas de API: Review de Insomnia. Recuperado de https://cl.abstracta.us/blog/insomnia-herramienta-pruebas-api/. Jones, M., Bradley, J., & Sakimura, N. (2015). JSON Web Token (JWT). RFC 7519. Recuperado de https://tools.ietf.org/html/rfc7519 Auth0. (n.d.). JSON Web Token Introduction. Recuperado de https://auth0.com/learn/json-webtokens/ Leon,E. (2020). Procesamiento del lenguaje natural con Python. Recuperado de https://www.baoss.es/procesamiento-del-lenguaje-natural-pln-con-python/ Fernandez. (2023) ChatGPT: Que es, cómo usarlo y qué puedes hacer con este chat de Inteligencia Artificial Recuperado de: https://www.xataka.com/basics/chatgpt-que-como-usarlo-quepuedes-hacer-este-chat-inteligencia-artificial. Tripathi, R. (2023). What are vector embeddings. Recuperado de www.pinecone.io/learn/vectorembeddings/ Pinecone. (2023). Arquitectura de datos. Recuperado de https://www.pinecone.io/ Pinecoce. (2023). Modelo Embeeding. Recuperado de www.pinecone.io/learn/vector-embeddings/ Rivas, A. (2023) Normas APA: La guía definitiva para presentar trabajos escritos. Guía Normas APA. Recuperado de https://normasapa.in/ |
dc.rights.*.fl_str_mv |
Attribution-NonCommercial-NoDerivatives 4.0 Internacional Attribution-NonCommercial-NoDerivatives 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-nc-nd/4.0/ |
dc.rights.acceso.spa.fl_str_mv |
Abierto (Texto Completo) |
rights_invalid_str_mv |
Attribution-NonCommercial-NoDerivatives 4.0 Internacional http://creativecommons.org/licenses/by-nc-nd/4.0/ Abierto (Texto Completo) http://purl.org/coar/access_right/c_abf2 |
dc.format.mimetype.spa.fl_str_mv |
pdf |
institution |
Universidad Distrital Francisco José de Caldas |
bitstream.url.fl_str_mv |
https://repository.udistrital.edu.co/bitstreams/4dfc065f-8454-48a4-862a-cdbfcb5db8af/download https://repository.udistrital.edu.co/bitstreams/603b18fc-fe12-4757-bc65-580041939bec/download https://repository.udistrital.edu.co/bitstreams/b6377802-41dc-4a86-b242-4222a039addc/download https://repository.udistrital.edu.co/bitstreams/0a7aa937-c424-4a23-b3db-d64eb977508b/download |
bitstream.checksum.fl_str_mv |
92bb88280d6f0c832b592bf2c92a9e84 02128d357fe7c047fe20f5fb267ee5de 4460e5956bc1d1639be9ae6146a50347 997daf6c648c962d566d7b082dac908d |
bitstream.checksumAlgorithm.fl_str_mv |
MD5 MD5 MD5 MD5 |
repository.name.fl_str_mv |
Repositorio Universidad Distrital |
repository.mail.fl_str_mv |
repositorio@udistrital.edu.co |
_version_ |
1837007214937636864 |
spelling |
Hernández Gutiérrez, JairoHernández Capera, Fabián MauricioNiño González, Julián DavidHernández Gutiérrez, Jairo [0000-0003-3908-2763]2024-08-17T16:20:12Z2024-08-17T16:20:12Z2023-08-31http://hdl.handle.net/11349/39845En este proyecto de grado, se abordó la creación de una aplicación web de enfoque distribuido, que utiliza técnicas avanzadas de Machine Learning y se apoya en bases de conocimiento, con el objetivo de identificar y resolver ambigüedades presentes en los requerimientos de software. Para lograrlo, se diseñó un método que combina algoritmos de aprendizaje automático con información almacenada en bases de datos vectoriales, permitiendo una detección precisa y eficiente de las ambigüedades más comunes. La aplicación final se destaca por su interfaz de fácil acceso y su rendimiento excepcional, respaldado adicionalmente por una infraestructura distribuida en la nube que asegura una distribución equitativa de la carga y una seguridad robusta a través de la aplicación de JSON Web Tokens. En conjunto, este proyecto culmina en una solución tecnológica innovadora que potencia la calidad y eficiencia en el proceso de desarrollo de software al abordar de manera efectiva las ambigüedades presentes en los requerimientos.In this degree project, the creation of a distributed approach web application was addressed, which uses advanced Machine Learning techniques and is supported by knowledge bases, with the objective of identifying and resolving ambiguities present in software requirements. To achieve this, a method was designed that combines machine learning algorithms with information stored in vector databases, allowing an accurate and efficient detection of the most common ambiguities. The final application stands out for its easy-to-access interface and exceptional performance, additionally supported by a distributed cloud infrastructure that ensures equitable load distribution and robust security through the application of JSON Web Tokens. Overall, this project culminates in an innovative technological solution that enhances quality and efficiency in the software development process by effectively addressing the ambiguities present in the requirements.Eprocess S.A.SpdfspaAttribution-NonCommercial-NoDerivatives 4.0 InternacionalAttribution-NonCommercial-NoDerivatives 4.0 Internacionalhttp://creativecommons.org/licenses/by-nc-nd/4.0/Abierto (Texto Completo)http://purl.org/coar/access_right/c_abf2Inteligencia ArtificialDetección de ambigüedadesAplicación distribuidaRequerimientos de softwareMachine LearningBases de conocimientoDesarrollo de SoftwareProcesamiento de lenguaje naturalAprendizaje automáticoAmbigüedad en requisitosToma de decisionesValidación automática de requisitosIngeniería Telemática -- Tesis y disertaciones académicasAnálisis de información -- InformaciónAprendizaje automático -- Inteligencia artificialSoftware -- ProgramaciónProcesamiento electrónico de datos -- Bases de datosDistributed applicationAmbiguity detectionSoftware requirementsMachine LearningKnowledge basessoftware developmentNatural language processingAmbiguity in requirementsdecision makingAutomatic requirements validationArtificial intelligenceAplicación distribuida para la detección de ambigüedades en los requerimientos de software utilizando técnicas de machine learning y bases de conocimientoDistributed application for detecting ambiguities in software requirements using machine learning techniques and knowledge basesbachelorThesisPasantíainfo:eu-repo/semantics/bachelorThesishttp://purl.org/coar/resource_type/c_7a1fReQtest. (2020). ReQtest – A Complete Guide. Recuperado de https://reqtest.com/what-isreqtest/.IBM. (2021). IBM Rational DOORS. Recuperado de https://www.ibm.com/products/rationaldoors.Jama Software. (2021). Jama Connect. Recuperado de https://www.jamasoftware.com/. Micro Focus. (2021). CaliberRM. Recuperado de https://www.opentext.com/. Sparx Systems. (2021). Enterprise Architect. Recuperado de https://sparxsystems.com/products/ea/index.htmlPauzi, Z., & Capiluppi, A. (2023). Applications of natural language processing in software traceability: A systematic mapping study. Recuperado de https://www.sciencedirect.com/science/article/pii/S0164121223000110?via%3DihubSiahaan, D., Raharjana, I. K., & Fatichah, C. (2023). User Story Extraction from Natural Language for Requirements Elicitation: Identify Software-Related Information from Online News. Recuperado de https://www.sciencedirect.com/science/article/abs/pii/S0950584923000496?via%3Dihub.Riaz, M. Q., Butt, W. H., & Rehman, S. (2019). Automatic Detection of Ambiguous Software Requirements: An Insight. Recuperado de https://ieeexplore.ieee.org/document/8714682Rajender Kumar Surana, C. S., Shriya, Gupta, D. B., & Shankar, S. P. (2019). Intelligent Chatbot for Requirements Elicitation and Classification. Recuperado de https://ieeexplore.ieee.org/document/9016907.Liu, K., Reddivari, S., & Reddivari, K. (2022). Artificial Intelligence in Software Requirements Engineering: State-of-the-Art. Recuperado de https://ieeexplore.ieee.org/document/9874229Elsevier. (2023). A review on risk assessment techniques for building services. Recuperado de https://linkinghub.elsevier.com/retrieve/pii/S0950584923000496.ScienceDirect. (s.f.). (2023) Explore scientific, technical, and medical research on ScienceDirect. Recuperado de https://www.sciencedirect.com/Health Data Miner. (2019). CRISP-DM: Una metodología para minería de datos en salud. Recuperado el 19 de marzo de 2023, Recuperado de https://healthdataminer.com/datamining/crisp-dm-una-metodologia-para-mineria-de-datos-en-salud/Biblioteca Hugging Face Transformers. (2023) Huggingface Recuperado de https://github.com/huggingface/transformersPinecone (2023) Búsqueda de Similitud Vectorial a Escala. Recuperado de https://www.pinecone.io/Gensim. (2023). Documentación vía GitHub Recuperado de https://radimrehurek.com/gensim/auto_examples/index.html#core-tutorials.Pinecone. (2023). Choosing index type and size Recuperado de https://docs.pinecone.io/docs/choosing-index-type-and-sizeHugging Face (2023). Transformers Recuperado de https://huggingface.co/docs/transformers/index.Abstracta Chile. (2023). Herramienta para pruebas de API: Review de Insomnia. Recuperado de https://cl.abstracta.us/blog/insomnia-herramienta-pruebas-api/.Jones, M., Bradley, J., & Sakimura, N. (2015). JSON Web Token (JWT). RFC 7519. Recuperado de https://tools.ietf.org/html/rfc7519 Auth0. (n.d.). JSON Web Token Introduction. Recuperado de https://auth0.com/learn/json-webtokens/Leon,E. (2020). Procesamiento del lenguaje natural con Python. Recuperado de https://www.baoss.es/procesamiento-del-lenguaje-natural-pln-con-python/Fernandez. (2023) ChatGPT: Que es, cómo usarlo y qué puedes hacer con este chat de Inteligencia Artificial Recuperado de: https://www.xataka.com/basics/chatgpt-que-como-usarlo-quepuedes-hacer-este-chat-inteligencia-artificial.Tripathi, R. (2023). What are vector embeddings. Recuperado de www.pinecone.io/learn/vectorembeddings/Pinecone. (2023). Arquitectura de datos. Recuperado de https://www.pinecone.io/Pinecoce. (2023). Modelo Embeeding. Recuperado de www.pinecone.io/learn/vector-embeddings/Rivas, A. (2023) Normas APA: La guía definitiva para presentar trabajos escritos. Guía Normas APA. Recuperado de https://normasapa.in/ORIGINALTrabajo de gradoTrabajo de gradoTrabajo de gradoapplication/pdf4161664https://repository.udistrital.edu.co/bitstreams/4dfc065f-8454-48a4-862a-cdbfcb5db8af/download92bb88280d6f0c832b592bf2c92a9e84MD51Licencia de uso y autorizaciónLicencia de uso y autorizaciónLicencia de uso y autorizaciónapplication/pdf688391https://repository.udistrital.edu.co/bitstreams/603b18fc-fe12-4757-bc65-580041939bec/download02128d357fe7c047fe20f5fb267ee5deMD54CC-LICENSElicense_rdflicense_rdfapplication/rdf+xml; charset=utf-8805https://repository.udistrital.edu.co/bitstreams/b6377802-41dc-4a86-b242-4222a039addc/download4460e5956bc1d1639be9ae6146a50347MD55LICENSElicense.txtlicense.txttext/plain; charset=utf-87167https://repository.udistrital.edu.co/bitstreams/0a7aa937-c424-4a23-b3db-d64eb977508b/download997daf6c648c962d566d7b082dac908dMD5611349/39845oai:repository.udistrital.edu.co:11349/398452024-08-17 11:20:15.214http://creativecommons.org/licenses/by-nc-nd/4.0/Attribution-NonCommercial-NoDerivatives 4.0 Internacionalopen.accesshttps://repository.udistrital.edu.coRepositorio Universidad Distritalrepositorio@udistrital.edu.coTElDRU5DSUEgWSBBVVRPUklaQUNJw5NOIEVTUEVDSUFMIFBBUkEgUFVCTElDQVIgWSBQRVJNSVRJUiBMQSBDT05TVUxUQSBZIFVTTyBERSBDT05URU5JRE9TIEVOIEVMIFJFUE9TSVRPUklPIElOU1RJVFVDSU9OQUwgREUgTEEgVU5JVkVSU0lEQUQgRElTVFJJVEFMCgpUw6lybWlub3MgeSBjb25kaWNpb25lcyBkZSB1c28gcGFyYSBwdWJsaWNhY2nDs24gZGUgb2JyYXMgZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyAoUklVRCkKCkNvbW8gdGl0dWxhcihlcykgZGVsKG9zKSBkZXJlY2hvKHMpIGRlIGF1dG9yLCBjb25maWVybyAoZXJpbW9zKSBhIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIChlbiBhZGVsYW50ZSwgTEEgVU5JVkVSU0lEQUQpIHVuYSBsaWNlbmNpYSBwYXJhIHVzbyBubyBleGNsdXNpdmEsIGxpbWl0YWRhIHkgZ3JhdHVpdGEgc29icmUgbGEgb2JyYSBxdWUgaW50ZWdyYXLDoSBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIChlbiBhZGVsYW50ZSwgUklVRCksIGRlIGFjdWVyZG8gYSBsYXMgc2lndWllbnRlcyByZWdsYXMsIGxhcyBjdWFsZXMgZGVjbGFybyAoYW1vcykgY29ub2NlciB5IGFjZXB0YXI6CgphKQlFc3RhcsOhIHZpZ2VudGUgYSBwYXJ0aXIgZGUgbGEgZmVjaGEgZW4gcXVlIHNlIGluY2x1eWEgZW4gZWwgUklVRCB5IGhhc3RhIHBvciB1biBwbGF6byBkZSBkaWV6ICgxMCkgQcOxb3MsIHByb3Jyb2dhYmxlIGluZGVmaW5pZGFtZW50ZSBwb3IgZWwgdGllbXBvIHF1ZSBkdXJlIGVsIGRlcmVjaG8gUGF0cmltb25pYWwgZGVsIGF1dG9yOyBsYSBjdWFsIHBvZHLDoSBkYXJzZSBwb3IgdGVybWluYWRhIHByZXZpYSBzb2xpY2l0dWQgYSBMQSBVTklWRVJTSURBRCBwb3IgZXNjcml0byBjb24gdW5hIGFudGVsYWNpw7NuIGRlIGRvcyAoMikgbWVzZXMgYW50ZXMgZGVsIHZlbmNpbWllbnRvIGRlbCBwbGF6byBpbmljaWFsIG8gZWwgZGUgc3UocykgcHLDs3Jyb2dhKHMpLgoKYikJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIHB1YmxpY2FyIGxhIG9icmEgZW4gbGFzIGRpc3RpbnRhcyB2ZXJzaW9uZXMgcmVxdWVyaWRhcyBwb3IgZWwgUklVRCAoZGlnaXRhbCwgaW1wcmVzbywgZWxlY3Ryw7NuaWNvIHUgb3RybyBtZWRpbyBjb25vY2lkbyBvIHBvciBjb25vY2VyKSBMQSBVTklWRVJTSURBRCBubyBzZXLDoSByZXNwb25zYWJsZSBlbiBlbCBldmVudG8gcXVlIGVsIGRvY3VtZW50byBhcGFyZXpjYSByZWZlcmVuY2lhZG8gZW4gbW90b3JlcyBkZSBiw7pzcXVlZGEgbyByZXBvc2l0b3Jpb3MgZGlmZXJlbnRlcyBhbCBSSVVELCB1bmEgdmV6IGVsKG9zKSBhdXRvcihlcykgc29saWNpdGVuIHN1IGVsaW1pbmFjacOzbiBkZWwgUklVRCwgZGFkbyBxdWUgbGEgbWlzbWEgc2Vyw6EgcHVibGljYWRhIGVuIEludGVybmV0LgoKYykJTGEgYXV0b3JpemFjacOzbiBzZSBoYWNlIGEgdMOtdHVsbyBncmF0dWl0bywgcG9yIGxvIHRhbnRvLCBsb3MgYXV0b3JlcyByZW51bmNpYW4gYSByZWNpYmlyIGJlbmVmaWNpbyBhbGd1bm8gcG9yIGxhIHB1YmxpY2FjacOzbiwgZGlzdHJpYnVjacOzbiwgY29tdW5pY2FjacOzbiBww7pibGljYSB5IGN1YWxxdWllciBvdHJvIHVzbyBxdWUgc2UgaGFnYSBlbiBsb3MgdMOpcm1pbm9zIGRlIGxhIHByZXNlbnRlIGxpY2VuY2lhIHkgZGUgbGEgbGljZW5jaWEgZGUgdXNvIGNvbiBxdWUgc2UgcHVibGljYSAoQ3JlYXRpdmUgQ29tbW9ucykuCgpkKQlMb3MgY29udGVuaWRvcyBwdWJsaWNhZG9zIGVuIGVsIFJJVUQgc29uIG9icmEocykgb3JpZ2luYWwoZXMpIHNvYnJlIGxhIGN1YWwoZXMpIGVsKG9zKSBhdXRvcihlcykgY29tbyB0aXR1bGFyZXMgZGUgbG9zIGRlcmVjaG9zIGRlIGF1dG9yLCBhc3VtZW4gdG90YWwgcmVzcG9uc2FiaWxpZGFkIHBvciBlbCBjb250ZW5pZG8gZGUgc3Ugb2JyYSBhbnRlIExBIFVOSVZFUlNJREFEIHkgYW50ZSB0ZXJjZXJvcy4gRW4gdG9kbyBjYXNvIExBIFVOSVZFUlNJREFEIHNlIGNvbXByb21ldGUgYSBpbmRpY2FyIHNpZW1wcmUgbGEgYXV0b3LDrWEgaW5jbHV5ZW5kbyBlbCBub21icmUgZGVsIGF1dG9yIHkgbGEgZmVjaGEgZGUgcHVibGljYWNpw7NuLgoKZSkJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIGluY2x1aXIgbGEgb2JyYSBlbiBsb3Mgw61uZGljZXMgeSBidXNjYWRvcmVzIHF1ZSBlc3RpbWVuIG5lY2VzYXJpb3MgcGFyYSBtYXhpbWl6YXIgbGEgdmlzaWJpbGlkYWQgZWwgdXNvIHkgZWwgaW1wYWN0byBkZSBsYSBwcm9kdWNjacOzbiBjaWVudMOtZmljYSwgYXJ0w61zdGljYSB5IGFjYWTDqW1pY2EgZW4gbGEgY29tdW5pZGFkIGxvY2FsLCBuYWNpb25hbCBvIGludGVybmFjaW9uYWwuCgoKZikJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIGNvbnZlcnRpciBsYSBvYnJhIGEgY3VhbHF1aWVyIG1lZGlvIG8gZm9ybWF0byBjb24gZWwgZmluIGRlIHN1IHByZXNlcnZhY2nDs24gZW4gZWwgdGllbXBvIHF1ZSBsYSBwcmVzZW50ZSBsaWNlbmNpYSB5IGxhIGRlIHN1cyBwcsOzcnJvZ2FzLgoKCkNvbiBiYXNlIGVuIGxvIGFudGVyaW9yIGF1dG9yaXpvKGFtb3MpLCBhIGZhdm9yIGRlbCBSSVVEIHkgZGUgc3VzIHVzdWFyaW9zLCBsYSBwdWJsaWNhY2nDs24geSBjb25zdWx0YSBkZSBsYSBzaWd1aWVudGUgb2JyYToKClRpdHVsbwoKQXV0b3IgICAgICAgQXBlbGxpZG9zICAgICAgICAgTm9tYnJlcwoKMQoKMgoKMwoKCmcpCUF1dG9yaXpvKGFtb3MpLCBxdWUgbGEgb2JyYSBzZWEgcHVlc3RhIGEgZGlzcG9zaWNpw7NuIGRlbCBww7pibGljbyBlbiBsb3MgdMOpcm1pbm9zIGVzdGFibGVjaWRvcyBlbiBsb3MgbGl0ZXJhbGVzIGFudGVyaW9yZXMsIGJham8gbG9zIGzDrW1pdGVzIGRlZmluaWRvcyBwb3IgTEEgVU5JVkVSU0lEQUQsIGVuIGxhcyDigJxDb25kaWNpb25lcyBkZSB1c28gZGUgZXN0cmljdG8gY3VtcGxpbWllbnRv4oCdIGRlIGxvcyByZWN1cnNvcyBwdWJsaWNhZG9zIGVuIGVsIFJJVUQsIGN1eW8gdGV4dG8gY29tcGxldG8gc2UgcHVlZGUgY29uc3VsdGFyIGVuIGh0dHA6Ly9yZXBvc2l0b3J5LnVkaXN0cml0YWwuZWR1LmNvLwoKaCkJQ29ub3pjbyhjZW1vcykgeSBhY2VwdG8oYW1vcykgcXVlIG90b3JnbyhhbW9zKSB1bmEgbGljZW5jaWEgZXNwZWNpYWwgcGFyYSBwdWJsaWNhY2nDs24gZGUgb2JyYXMgZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcywgbGljZW5jaWEgICBkZSBsYSBjdWFsIGhlIChoZW1vcykgb2J0ZW5pZG8gdW5hIGNvcGlhLgoKaSkJTWFuaWZpZXN0byhhbW9zKSBtaSAobnVlc3RybykgdG90YWwgYWN1ZXJkbyBjb24gbGFzIGNvbmRpY2lvbmVzIGRlIHVzbyB5IHB1YmxpY2FjacOzbiBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIHF1ZSBzZSBkZXNjcmliZW4geSBleHBsaWNhbiBlbiBlbCBwcmVzZW50ZSBkb2N1bWVudG8uCgpqKQlDb25vemNvKGNlbW9zKSBsYSBub3JtYXRpdmlkYWQgaW50ZXJuYSBkZSAgTEEgVU5JVkVSU0lEQUQ7IGVuIGNvbmNyZXRvLCBlbCBBY3VlcmRvIDAwNCBkZSAyMDEyIGRlbCBDU1UsIEFjdWVyZG8gMDIzIGRlIDIwMTIgZGVsIENTVSBzb2JyZSBQb2zDrXRpY2EgRWRpdG9yaWFsLCBBY3VlcmRvIDAyNiAgZGVsIDMxIGRlIGp1bGlvIGRlIDIwMTIgc29icmUgZWwgcHJvY2VkaW1pZW50byBwYXJhIGxhIHB1YmxpY2FjacOzbiBkZSB0ZXNpcyBkZSBwb3N0Z3JhZG8gZGUgbG9zIGVzdHVkaWFudGVzIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzLCAgQWN1ZXJkbyAwMzAgZGVsIDAzIGRlIGRpY2llbWJyZSBkZSAyMDEzIHBvciBtZWRpbyBkZWwgY3VhbCBzZSBjcmVhIGVsIFJlcG9zaXRvcmlvIEluc3RpdHVjaW9uYWwgZGUgbGEgVW5pdmVyc2lkYWQgRGlzdHJpdGFsIEZyYW5jaXNjbyBKb3PDqSBkZSBDYWxkYXMsIEFjdWVyZG8gMDM4IGRlIDIwMTUgMjAxNSDigJxwb3IgZWwgY3VhbCBzZSBtb2RpZmljYSBlbCBBY3VlcmRvIDAzMSBkZSAyMDE0IGRlIDIwMTQgcXVlIHJlZ2xhbWVudGEgZWwgdHJhYmFqbyBkZSBncmFkbyBwYXJhIGxvcyBlc3R1ZGlhbnRlcyBkZSBwcmVncmFkbyBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyB5IHNlIGRpY3RhbiBvdHJhcyBkaXJlY3RyaWNlc+KAnSB5IGxhcyBkZW3DoXMgbm9ybWFzIGNvbmNvcmRhbnRlIHkgY29tcGxlbWVudGFyaWFzIHF1ZSByaWdlbiBhbCByZXNwZWN0bywgZXNwZWNpYWxtZW50ZSBsYSBsZXkgMjMgZGUgMTk4MiwgbGEgbGV5IDQ0IGRlIDE5OTMgeSBsYSBkZWNpc2nDs24gQW5kaW5hIDM1MSBkZSAxOTkzLiBFc3RvcyBkb2N1bWVudG9zIHBvZHLDoW4gc2VyIGNvbnN1bHRhZG9zIHkgZGVzY2FyZ2Fkb3MgZW4gZWwgcG9ydGFsIHdlYiBkZSBsYSBiaWJsaW90ZWNhIGh0dHA6Ly9zaXN0ZW1hZGViaWJsaW90ZWNhcy51ZGlzdHJpdGFsLmVkdS5jby8KCmspCUFjZXB0byhhbW9zKSBxdWUgTEEgVU5JVkVSU0lEQUQgbm8gc2UgcmVzcG9uc2FiaWxpemEgcG9yIGxhcyBpbmZyYWNjaW9uZXMgYSBsYSBwcm9waWVkYWQgaW50ZWxlY3R1YWwgbyBEZXJlY2hvcyBkZSBBdXRvciBjYXVzYWRhcyBwb3IgbG9zIHRpdHVsYXJlcyBkZSBsYSBwcmVzZW50ZSBMaWNlbmNpYSB5IGRlY2xhcmFtb3MgcXVlIG1hbnRlbmRyw6kgKGVtb3MpIGluZGVtbmUgYSBMQSBVTklWRVJTSURBRCBwb3IgbGFzIHJlY2xhbWFjaW9uZXMgbGVnYWxlcyBkZSBjdWFscXVpZXIgdGlwbyBxdWUgbGxlZ2FyZW4gYSBwcmVzZW50YXJzZSBwb3IgdmlvbGFjacOzbiBkZSBkZXJlY2hvcyBhIGxhIHByb3BpZWRhZCBpbnRlbGVjdHVhbCBvIGRlIEF1dG9yIHJlbGFjaW9uYWRvcyBjb24gbG9zIGRvY3VtZW50b3MgcmVnaXN0cmFkb3MgZW4gZWwgUklVRC4KCmwpCUVsIChsb3MpIGF1dG9yKGVzKSBtYW5pZmllc3RhKG1vcykgcXVlIGxhIG9icmEgb2JqZXRvIGRlIGxhIHByZXNlbnRlIGF1dG9yaXphY2nDs24gZXMgb3JpZ2luYWwsIGRlIGV4Y2x1c2l2YSBhdXRvcsOtYSwgeSBzZSByZWFsaXrDsyBzaW4gdmlvbGFyIG8gdXN1cnBhciBkZXJlY2hvcyBkZSBhdXRvciBkZSB0ZXJjZXJvczsgZGUgdGFsIHN1ZXJ0ZSwgZW4gY2FzbyBkZSBwcmVzZW50YXJzZSBjdWFscXVpZXIgcmVjbGFtYWNpw7NuIG8gYWNjacOzbiBwb3IgcGFydGUgZGUgdW4gdGVyY2VybyBlbiBjdWFudG8gYSBsb3MgZGVyZWNob3MgZGUgYXV0b3Igc29icmUgbGEgb2JyYSwgZWwgKGxvcykgZXN0dWRpYW50ZShzKSDigJMgYXV0b3IoZXMpIGFzdW1pcsOhKG4pIHRvZGEgbGEgcmVzcG9uc2FiaWxpZGFkIHkgc2FsZHLDoShuKSBlbiBkZWZlbnNhIGRlIGxvcyBkZXJlY2hvcyBhcXXDrSBhdXRvcml6YWRvcy4gUGFyYSB0b2RvcyBsb3MgZWZlY3RvcywgTEEgVU5JVkVSU0lEQUQgYWN0w7phIGNvbW8gdW4gdGVyY2VybyBkZSBidWVuYSBmZS4KCgptKQlFbCAobG9zKSBhdXRvcihlcykgbWFuaWZpZXN0YShtb3MpIHF1ZSBjb25vemNvKGNlbW9zKSBsYSBhdXRvbm9tw61hIHkgbG9zIGRlcmVjaG9zLCBxdWUgcG9zZWUobW9zKSBzb2JyZSBsYSBvYnJhIHksIGNvbW8gdGFsLCBlcyAoc29tb3MpIHJlc3BvbnNhYmxlKHMpIGRlbCBhbGNhbmNlIGp1csOtZGljbyB5IGxlZ2FsLCBkZSBlc2NvZ2VyIGxhIG9wY2nDs24gZGUgbGEgcHVibGljYWNpw7NuIG8gZGUgcmVzdHJpY2Npw7NuIGRlIGxhIHB1YmxpY2FjacOzbiBkZWwgZG9jdW1lbnRvIHJlZ2lzdHJhZG8gZW4gZWwgUklVRC4KCgoKCgoKU0kgRUwgRE9DVU1FTlRPIFNFIEJBU0EgRU4gVU4gVFJBQkFKTyBRVUUgSEEgU0lETyBQQVRST0NJTkFETyBPIEFQT1lBRE8gUE9SIFVOQSBBR0VOQ0lBIE8gVU5BIE9SR0FOSVpBQ0nDk04sIENPTiBFWENFUENJw5NOIERFIExBIFVOSVZFUlNJREFEIERJU1RSSVRBTCBGUkFOQ0lTQ08gSk9TRSBERSBDQUxEQVMsIExPUyBBVVRPUkVTIEdBUkFOVElaQU4gUVVFIFNFIEhBIENVTVBMSURPIENPTiBMT1MKREVSRUNIT1MgWSBPQkxJR0FDSU9ORVMgUkVRVUVSSURPUyBQT1IgRUwgUkVTUEVDVElWTyBDT05UUkFUTyBPIEFDVUVSRE8uCgoKCgoKCgoKCgoKCgoKCgoKCgoKCkVuIGNvbnN0YW5jaWEgZGUgbG8gYW50ZXJpb3IsIGZpcm1vKGFtb3MpIGVsIHByZXNlbnRlIGRvY3VtZW50bywgZW4gbGEgY2l1ZGFkIGRlIEJvZ290w6EsIEQuQy4sIGEgbG9zCgoKRklSTUEgREUgTE9TIFRJVFVMQVJFUyBERSBERVJFQ0hPUyBERSBBVVRPUgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fICAgQy5DLiBOby4gX19fX19fX19fX19fX19fX19fCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gICBDLkMuIE5vLiBfX19fX19fX19fX19fX19fX18KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAgIEMuQy4gTm8uIF9fX19fX19fX19fX19fX19fXwoKCgpDb3JyZW8gRWxlY3Ryw7NuaWNvIEluc3RpdHVjaW9uYWwgZGVsIChkZSBsb3MpIEF1dG9yKGVzKToKCkF1dG9yCSAgICAgIENvcnJlbyBFbGVjdHLDs25pY28KCjEKCjIKCjMKCk5vbWJyZSBkZSBEaXJlY3RvcihlcykgZGUgR3JhZG86CgoxCgoyCgozCgpOb21icmUgRmFjdWx0YWQgeSBQcm95ZWN0byBDdXJyaWN1bGFyOgoKRmFjdWx0YWQJUHJveWVjdG8gQ3VycmljdWxhcgoKCgoKCgoKCk5vdGE6IEVuIGNhc28gcXVlIG5vIGVzdMOpIGRlIGFjdWVyZG8gY29uIGxhcyBjb25kaWNpb25lcyBkZSBsYSBwcmVzZW50ZSBsaWNlbmNpYSwgeSBtYW5pZmllc3RlIGFsZ3VuYSByZXN0cmljY2nDs24gc29icmUgbGEgb2JyYSwganVzdGlmaXF1ZSBsb3MgbW90aXZvcyBwb3IgbG9zIGN1YWxlcyBlbCBkb2N1bWVudG8geSBzdXMgYW5leG9zIG5vIHB1ZWRlbiBzZXIgcHVibGljYWRvcyBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIFJJVUQuCgoKU2kgcmVxdWllcmUgbcOhcyBlc3BhY2lvLCBwdWVkZSBhbmV4YXIgdW5hIGNvcGlhIHNpbWlsYXIgYSBlc3RhIGhvamEK |