Creación de una arquitectura de redes neuronales con un enfoque modular para la generación de código fuente HTML y CSS a partir de Mockups
El presente trabajo busca desarrollar una arquitectura de redes neuronales capaz de traducir una captura de interfaz gráfica a código HTML y CSS. Esto con el fin de automatizar la mencionada actividad, ya que la elaboración manual de esta trae consigo ciertas desventajas (Capítulo 1 y 2). A pesar de...
- Autores:
-
Hernández Hernández, Camilo
Rodríguez Gutiérrez, Jonathan
- Tipo de recurso:
- Trabajo de grado de pregrado
- Fecha de publicación:
- 2020
- Institución:
- Universidad Distrital Francisco José de Caldas
- Repositorio:
- RIUD: repositorio U. Distrital
- Idioma:
- spa
- OAI Identifier:
- oai:repository.udistrital.edu.co:11349/27938
- Acceso en línea:
- http://hdl.handle.net/11349/27938
- Palabra clave:
- Redes Neuronales
Html
Css
Desarrollo Web
Generación de Código
Redes Convolucionales
Detección de Objetos
Aprendizaje Automático
Generación de Datos Aleatorios
Fuzzer Gramatical
Extracción de Características
Maquetación
Prototipo de sitio web
Ingeniería de Sistemas - Tesis y disertaciones académicas
Redes neurales (Informática)
HTML (Lenguaje de procesamiento de texto)
Diseño de páginas Web
Hojas de estilo en cascada
Neural Networks
Html
Css
Web Development
Code Generation
Convolutional Networks
Object Detection
Machine Learning
Random Data Generation
Grammar Fuzzer
Feature Extraction
Mockup
Website Prototype
- Rights
- License
- Atribución-NoComercial-SinDerivadas 4.0 Internacional
id |
UDISTRITA2_76e657d7d6abaaffe9067339cec7f182 |
---|---|
oai_identifier_str |
oai:repository.udistrital.edu.co:11349/27938 |
network_acronym_str |
UDISTRITA2 |
network_name_str |
RIUD: repositorio U. Distrital |
repository_id_str |
|
dc.title.spa.fl_str_mv |
Creación de una arquitectura de redes neuronales con un enfoque modular para la generación de código fuente HTML y CSS a partir de Mockups |
dc.title.titleenglish.spa.fl_str_mv |
Creation of a neural network architecture with a modular approach for the generation of HTML and CSS source code from Mockups |
title |
Creación de una arquitectura de redes neuronales con un enfoque modular para la generación de código fuente HTML y CSS a partir de Mockups |
spellingShingle |
Creación de una arquitectura de redes neuronales con un enfoque modular para la generación de código fuente HTML y CSS a partir de Mockups Redes Neuronales Html Css Desarrollo Web Generación de Código Redes Convolucionales Detección de Objetos Aprendizaje Automático Generación de Datos Aleatorios Fuzzer Gramatical Extracción de Características Maquetación Prototipo de sitio web Ingeniería de Sistemas - Tesis y disertaciones académicas Redes neurales (Informática) HTML (Lenguaje de procesamiento de texto) Diseño de páginas Web Hojas de estilo en cascada Neural Networks Html Css Web Development Code Generation Convolutional Networks Object Detection Machine Learning Random Data Generation Grammar Fuzzer Feature Extraction Mockup Website Prototype |
title_short |
Creación de una arquitectura de redes neuronales con un enfoque modular para la generación de código fuente HTML y CSS a partir de Mockups |
title_full |
Creación de una arquitectura de redes neuronales con un enfoque modular para la generación de código fuente HTML y CSS a partir de Mockups |
title_fullStr |
Creación de una arquitectura de redes neuronales con un enfoque modular para la generación de código fuente HTML y CSS a partir de Mockups |
title_full_unstemmed |
Creación de una arquitectura de redes neuronales con un enfoque modular para la generación de código fuente HTML y CSS a partir de Mockups |
title_sort |
Creación de una arquitectura de redes neuronales con un enfoque modular para la generación de código fuente HTML y CSS a partir de Mockups |
dc.creator.fl_str_mv |
Hernández Hernández, Camilo Rodríguez Gutiérrez, Jonathan |
dc.contributor.advisor.spa.fl_str_mv |
Alvarado Nieto, Luz Deicy |
dc.contributor.author.spa.fl_str_mv |
Hernández Hernández, Camilo Rodríguez Gutiérrez, Jonathan |
dc.subject.spa.fl_str_mv |
Redes Neuronales Html Css Desarrollo Web Generación de Código Redes Convolucionales Detección de Objetos Aprendizaje Automático Generación de Datos Aleatorios Fuzzer Gramatical Extracción de Características Maquetación Prototipo de sitio web |
topic |
Redes Neuronales Html Css Desarrollo Web Generación de Código Redes Convolucionales Detección de Objetos Aprendizaje Automático Generación de Datos Aleatorios Fuzzer Gramatical Extracción de Características Maquetación Prototipo de sitio web Ingeniería de Sistemas - Tesis y disertaciones académicas Redes neurales (Informática) HTML (Lenguaje de procesamiento de texto) Diseño de páginas Web Hojas de estilo en cascada Neural Networks Html Css Web Development Code Generation Convolutional Networks Object Detection Machine Learning Random Data Generation Grammar Fuzzer Feature Extraction Mockup Website Prototype |
dc.subject.lemb.spa.fl_str_mv |
Ingeniería de Sistemas - Tesis y disertaciones académicas Redes neurales (Informática) HTML (Lenguaje de procesamiento de texto) Diseño de páginas Web Hojas de estilo en cascada |
dc.subject.keyword.spa.fl_str_mv |
Neural Networks Html Css Web Development Code Generation Convolutional Networks Object Detection Machine Learning Random Data Generation Grammar Fuzzer Feature Extraction Mockup Website Prototype |
description |
El presente trabajo busca desarrollar una arquitectura de redes neuronales capaz de traducir una captura de interfaz gráfica a código HTML y CSS. Esto con el fin de automatizar la mencionada actividad, ya que la elaboración manual de esta trae consigo ciertas desventajas (Capítulo 1 y 2). A pesar de que (Beltramelli, 2017), (Wallner, 2018) y (silverstar94, 2019) han propuesto redes neuronales como una prueba de concepto para el mismo fin; con este proyecto se propone una arquitectura con un enfoque modular y la capacidad de generar un mayor número de etiquetas en comparación con los anteriores trabajos (Capítulo 6). Para realizar el entrenamiento y evaluación de las redes se usaron datos artificiales y páginas web extraídas de internet (Capítulo 8 y 9) posteriormente en el caso de HTML fueron seleccionadas 3 arquitecturas Pix2Code, YOLOv3 y RetinaNet para la predicción de elementos (Capítulo 10). Por otra parte, para CSS se agruparon propiedades de acuerdo con las similitudes de sus efectos, definiendo gramáticas, construyendo datasets con base en estas y entrenando para la predicción de los estilos seleccionados (Capítulo 11). Como resultado principal se encontró que la mejor arquitectura para la detección de elementos HTML es YOLOv3. En el caso de CSS las arquitecturas con el codificador VGG16 y entrenadas con un batch de tamaño 16 obtuvieron el mejor desempeño. Por último las mejores arquitecturas obtenidas fueron integradas usando Rust para efectuar la generación de código fuente HTML y propiedades CSS, recibiendo como entrada una imagen de 1280x1280 píxeles (Capítulo 12). |
publishDate |
2020 |
dc.date.created.spa.fl_str_mv |
2020-11-20 |
dc.date.accessioned.none.fl_str_mv |
2021-12-23T19:47:04Z |
dc.date.available.none.fl_str_mv |
2021-12-23T19:47:04Z |
dc.type.degree.spa.fl_str_mv |
Monografía |
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.uri.none.fl_str_mv |
http://hdl.handle.net/11349/27938 |
url |
http://hdl.handle.net/11349/27938 |
dc.language.iso.spa.fl_str_mv |
spa |
language |
spa |
dc.rights.*.fl_str_mv |
Atribución-NoComercial-SinDerivadas 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 |
Atribución-NoComercial-SinDerivadas 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/6aaa8563-443d-411d-b507-78be4b4d6251/download https://repository.udistrital.edu.co/bitstreams/2dba1550-fd09-476b-b2b9-25bb29ca6ed8/download https://repository.udistrital.edu.co/bitstreams/c705562e-47e2-45f5-8565-418d748249a6/download https://repository.udistrital.edu.co/bitstreams/376500eb-8a05-4af9-b5e7-dace936a2e14/download https://repository.udistrital.edu.co/bitstreams/3f684c97-2757-4c0e-8434-c451f7c903c4/download https://repository.udistrital.edu.co/bitstreams/50a2d8dd-de5e-4b86-971a-252e60ba5218/download https://repository.udistrital.edu.co/bitstreams/56f0a283-482e-4d35-84c0-62f87dcbe7e0/download https://repository.udistrital.edu.co/bitstreams/db016791-615c-4343-955b-3b4eda2f07c0/download |
bitstream.checksum.fl_str_mv |
3c5ab090faf6df726518541a8555c039 1d01170aada4a2324817a15e054a3321 827296500ff9cc472a53740e5ac90806 aa2ff24e10e689d87d0a0a6fb005d522 486e70aa6e7b0271de4953c01c4283fd d41d8cd98f00b204e9800998ecf8427e d41d8cd98f00b204e9800998ecf8427e da5c6a3ca62d5dd4853000a60fee7083 |
bitstream.checksumAlgorithm.fl_str_mv |
MD5 MD5 MD5 MD5 MD5 MD5 MD5 MD5 |
repository.name.fl_str_mv |
Repositorio Universidad Distrital |
repository.mail.fl_str_mv |
repositorio@udistrital.edu.co |
_version_ |
1828165033981378560 |
spelling |
Alvarado Nieto, Luz DeicyHernández Hernández, CamiloRodríguez Gutiérrez, Jonathan2021-12-23T19:47:04Z2021-12-23T19:47:04Z2020-11-20http://hdl.handle.net/11349/27938El presente trabajo busca desarrollar una arquitectura de redes neuronales capaz de traducir una captura de interfaz gráfica a código HTML y CSS. Esto con el fin de automatizar la mencionada actividad, ya que la elaboración manual de esta trae consigo ciertas desventajas (Capítulo 1 y 2). A pesar de que (Beltramelli, 2017), (Wallner, 2018) y (silverstar94, 2019) han propuesto redes neuronales como una prueba de concepto para el mismo fin; con este proyecto se propone una arquitectura con un enfoque modular y la capacidad de generar un mayor número de etiquetas en comparación con los anteriores trabajos (Capítulo 6). Para realizar el entrenamiento y evaluación de las redes se usaron datos artificiales y páginas web extraídas de internet (Capítulo 8 y 9) posteriormente en el caso de HTML fueron seleccionadas 3 arquitecturas Pix2Code, YOLOv3 y RetinaNet para la predicción de elementos (Capítulo 10). Por otra parte, para CSS se agruparon propiedades de acuerdo con las similitudes de sus efectos, definiendo gramáticas, construyendo datasets con base en estas y entrenando para la predicción de los estilos seleccionados (Capítulo 11). Como resultado principal se encontró que la mejor arquitectura para la detección de elementos HTML es YOLOv3. En el caso de CSS las arquitecturas con el codificador VGG16 y entrenadas con un batch de tamaño 16 obtuvieron el mejor desempeño. Por último las mejores arquitecturas obtenidas fueron integradas usando Rust para efectuar la generación de código fuente HTML y propiedades CSS, recibiendo como entrada una imagen de 1280x1280 píxeles (Capítulo 12).This work aims to develop a neural network architecture capable of translating a graphical interface screenshot into HTML and CSS code, in order to automate the mentioned activity, since the manual elaboration of this one brings certain disadvantages (Chapter 1 and 2). Although (Beltramelli, 2017), (Wallner, 2018) and (silverstar94, 2019) have proposed neural networks as a proof of concept for the same purpose, this project proposes an architecture with a modular approach and the ability to generate a greater number of tags compared to previous work (Chapter 6). To carry out the training and evaluation of the networks, artificial data and web pages extracted from the Internet were used (Chapter 8 and 9). Later, in the case of HTML, Pix2Code, YOLOv3 and RetinaNet architectures were selected for the prediction of elements (Chapter 10). On the other hand, CSS properties were grouped according to the similarities of their effects, defining grammars, building datasets based on them and training for the prediction of the selected styles (Chapter 11). As a main result, it was found that the best architecture for the detection of HTML elements is YOLOv3. In the case of CSS, architectures with the VGG16 encoder and trained with a batch size of 16 obtained the best performance. Finally, the best architectures obtained were integrated using Rust to perform the generation of HTML source code and CSS properties, receiving as input an image of 1280x1280 pixels (Chapter 12).pdfspaAtribución-NoComercial-SinDerivadas 4.0 Internacionalhttp://creativecommons.org/licenses/by-nc-nd/4.0/Abierto (Texto Completo)http://purl.org/coar/access_right/c_abf2Redes NeuronalesHtmlCssDesarrollo WebGeneración de CódigoRedes ConvolucionalesDetección de ObjetosAprendizaje AutomáticoGeneración de Datos AleatoriosFuzzer GramaticalExtracción de CaracterísticasMaquetaciónPrototipo de sitio webIngeniería de Sistemas - Tesis y disertaciones académicasRedes neurales (Informática)HTML (Lenguaje de procesamiento de texto)Diseño de páginas WebHojas de estilo en cascadaNeural NetworksHtmlCssWeb DevelopmentCode GenerationConvolutional NetworksObject DetectionMachine LearningRandom Data GenerationGrammar FuzzerFeature ExtractionMockupWebsite PrototypeCreación de una arquitectura de redes neuronales con un enfoque modular para la generación de código fuente HTML y CSS a partir de MockupsCreation of a neural network architecture with a modular approach for the generation of HTML and CSS source code from MockupsMonografíainfo:eu-repo/semantics/bachelorThesishttp://purl.org/coar/resource_type/c_7a1fTHUMBNAILHernandezCamiloRodriguezJonathan2020.pdf.jpgHernandezCamiloRodriguezJonathan2020.pdf.jpgIM Thumbnailimage/jpeg7236https://repository.udistrital.edu.co/bitstreams/6aaa8563-443d-411d-b507-78be4b4d6251/download3c5ab090faf6df726518541a8555c039MD59Licencia y autorización de los autores para publicar.pdf.jpgLicencia y autorización de los autores para publicar.pdf.jpgIM Thumbnailimage/jpeg13157https://repository.udistrital.edu.co/bitstreams/2dba1550-fd09-476b-b2b9-25bb29ca6ed8/download1d01170aada4a2324817a15e054a3321MD510ORIGINALHernandezCamiloRodriguezJonathan2020.pdfHernandezCamiloRodriguezJonathan2020.pdfapplication/pdf35548658https://repository.udistrital.edu.co/bitstreams/c705562e-47e2-45f5-8565-418d748249a6/download827296500ff9cc472a53740e5ac90806MD51Licencia y autorización de los autores para publicar.pdfLicencia y autorización de los autores para publicar.pdfapplication/pdf284276https://repository.udistrital.edu.co/bitstreams/376500eb-8a05-4af9-b5e7-dace936a2e14/downloadaa2ff24e10e689d87d0a0a6fb005d522MD52CC-LICENSElicense_urllicense_urltext/plain; charset=utf-846https://repository.udistrital.edu.co/bitstreams/3f684c97-2757-4c0e-8434-c451f7c903c4/download486e70aa6e7b0271de4953c01c4283fdMD55license_textlicense_texttext/html; charset=utf-80https://repository.udistrital.edu.co/bitstreams/50a2d8dd-de5e-4b86-971a-252e60ba5218/downloadd41d8cd98f00b204e9800998ecf8427eMD56license_rdflicense_rdfapplication/rdf+xml; charset=utf-80https://repository.udistrital.edu.co/bitstreams/56f0a283-482e-4d35-84c0-62f87dcbe7e0/downloadd41d8cd98f00b204e9800998ecf8427eMD57LICENSElicense.txtlicense.txttext/plain; charset=utf-87163https://repository.udistrital.edu.co/bitstreams/db016791-615c-4343-955b-3b4eda2f07c0/downloadda5c6a3ca62d5dd4853000a60fee7083MD5811349/27938oai:repository.udistrital.edu.co:11349/279382023-06-13 12:51:08.095http://creativecommons.org/licenses/by-nc-nd/4.0/Atribución-NoComercial-SinDerivadas 4.0 Internacionalopen.accesshttps://repository.udistrital.edu.coRepositorio Universidad Distritalrepositorio@udistrital.edu.coTElDRU5DSUEgWSBBVVRPUklaQUNJw5NOIEVTUEVDSUFMIFBBUkEgUFVCTElDQVIgWSBQRVJNSVRJUiBMQSBDT05TVUxUQSBZIFVTTyBERSBDT05URU5JRE9TIEVOIEVMIFJFUE9TSVRPUklPIElOU1RJVFVDSU9OQUwgREUgTEEgVU5JVkVSU0lEQUQgRElTVFJJVEFMClTDqXJtaW5vcyB5IGNvbmRpY2lvbmVzIGRlIHVzbyBwYXJhIHB1YmxpY2FjacOzbiBkZSBvYnJhcyBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIChSSVVEKQoKQ29tbyB0aXR1bGFyKGVzKSBkZWwob3MpIGRlcmVjaG8ocykgZGUgYXV0b3IsIGNvbmZpZXJvIChlcmltb3MpIGEgbGEgVW5pdmVyc2lkYWQgRGlzdHJpdGFsIEZyYW5jaXNjbyBKb3PDqSBkZSBDYWxkYXMgKGVuIGFkZWxhbnRlLCBMQSBVTklWRVJTSURBRCkgdW5hIGxpY2VuY2lhIHBhcmEgdXNvIG5vIGV4Y2x1c2l2YSwgbGltaXRhZGEgeSBncmF0dWl0YSBzb2JyZSBsYSBvYnJhIHF1ZSBpbnRlZ3JhcsOhIGVsIFJlcG9zaXRvcmlvIEluc3RpdHVjaW9uYWwgKGVuIGFkZWxhbnRlLCBSSVVEKSwgZGUgYWN1ZXJkbyBhIGxhcyBzaWd1aWVudGVzIHJlZ2xhcywgbGFzIGN1YWxlcyBkZWNsYXJvIChhbW9zKSBjb25vY2VyIHkgYWNlcHRhcjoKCmEpCUVzdGFyw6EgdmlnZW50ZSBhIHBhcnRpciBkZSBsYSBmZWNoYSBlbiBxdWUgc2UgaW5jbHV5YSBlbiBlbCBSSVVEIHkgaGFzdGEgcG9yIHVuIHBsYXpvIGRlIGRpZXogKDEwKSBBw7FvcywgcHJvcnJvZ2FibGUgaW5kZWZpbmlkYW1lbnRlIHBvciBlbCB0aWVtcG8gcXVlIGR1cmUgZWwgZGVyZWNobyBQYXRyaW1vbmlhbCBkZWwgYXV0b3I7IGxhIGN1YWwgcG9kcsOhIGRhcnNlIHBvciB0ZXJtaW5hZGEgcHJldmlhIHNvbGljaXR1ZCBhIExBIFVOSVZFUlNJREFEIHBvciBlc2NyaXRvIGNvbiB1bmEgYW50ZWxhY2nDs24gZGUgZG9zICgyKSBtZXNlcyBhbnRlcyBkZWwgdmVuY2ltaWVudG8gZGVsIHBsYXpvIGluaWNpYWwgbyBlbCBkZSBzdShzKSBwcsOzcnJvZ2EocykuICAKCmIpCUxBIFVOSVZFUlNJREFEIHBvZHLDoSBwdWJsaWNhciBsYSBvYnJhIGVuIGxhcyBkaXN0aW50YXMgdmVyc2lvbmVzIHJlcXVlcmlkYXMgcG9yIGVsIFJJVUQgKGRpZ2l0YWwsIGltcHJlc28sIGVsZWN0csOzbmljbyB1IG90cm8gbWVkaW8gY29ub2NpZG8gbyBwb3IgY29ub2NlcikgTEEgVU5JVkVSU0lEQUQgbm8gc2Vyw6EgcmVzcG9uc2FibGUgZW4gZWwgZXZlbnRvIHF1ZSBlbCBkb2N1bWVudG8gYXBhcmV6Y2EgcmVmZXJlbmNpYWRvIGVuIG1vdG9yZXMgZGUgYsO6c3F1ZWRhIG8gcmVwb3NpdG9yaW9zIGRpZmVyZW50ZXMgYWwgUklVRCwgdW5hIHZleiBlbChvcykgYXV0b3IoZXMpIHNvbGljaXRlbiBzdSBlbGltaW5hY2nDs24gZGVsIFJJVUQsIGRhZG8gcXVlIGxhIG1pc21hIHNlcsOhIHB1YmxpY2FkYSBlbiBJbnRlcm5ldC4gCgpjKQlMYSBhdXRvcml6YWNpw7NuIHNlIGhhY2UgYSB0w610dWxvIGdyYXR1aXRvLCBwb3IgbG8gdGFudG8sIGxvcyBhdXRvcmVzIHJlbnVuY2lhbiBhIHJlY2liaXIgYmVuZWZpY2lvIGFsZ3VubyBwb3IgbGEgcHVibGljYWNpw7NuLCBkaXN0cmlidWNpw7NuLCBjb211bmljYWNpw7NuIHDDumJsaWNhIHkgY3VhbHF1aWVyIG90cm8gdXNvIHF1ZSBzZSBoYWdhIGVuIGxvcyB0w6lybWlub3MgZGUgbGEgcHJlc2VudGUgbGljZW5jaWEgeSBkZSBsYSBsaWNlbmNpYSBkZSB1c28gY29uIHF1ZSBzZSBwdWJsaWNhIChDcmVhdGl2ZSBDb21tb25zKS4KCmQpCUxvcyBjb250ZW5pZG9zIHB1YmxpY2Fkb3MgZW4gZWwgUklVRCBzb24gb2JyYShzKSBvcmlnaW5hbChlcykgc29icmUgbGEgY3VhbChlcykgZWwob3MpIGF1dG9yKGVzKSBjb21vIHRpdHVsYXJlcyBkZSBsb3MgZGVyZWNob3MgZGUgYXV0b3IsIGFzdW1lbiB0b3RhbCByZXNwb25zYWJpbGlkYWQgcG9yIGVsIGNvbnRlbmlkbyBkZSBzdSBvYnJhIGFudGUgTEEgVU5JVkVSU0lEQUQgeSBhbnRlIHRlcmNlcm9zLiBFbiB0b2RvIGNhc28gTEEgVU5JVkVSU0lEQUQgc2UgY29tcHJvbWV0ZSBhIGluZGljYXIgc2llbXByZSBsYSBhdXRvcsOtYSBpbmNsdXllbmRvIGVsIG5vbWJyZSBkZWwgYXV0b3IgeSBsYSBmZWNoYSBkZSBwdWJsaWNhY2nDs24uCgplKQlMQSBVTklWRVJTSURBRCBwb2Ryw6EgaW5jbHVpciBsYSBvYnJhIGVuIGxvcyDDrW5kaWNlcyB5IGJ1c2NhZG9yZXMgcXVlIGVzdGltZW4gbmVjZXNhcmlvcyBwYXJhIG1heGltaXphciBsYSB2aXNpYmlsaWRhZCBlbCB1c28geSBlbCBpbXBhY3RvIGRlIGxhIHByb2R1Y2Npw7NuIGNpZW50w61maWNhLCBhcnTDrXN0aWNhIHkgYWNhZMOpbWljYSBlbiBsYSBjb211bmlkYWQgbG9jYWwsIG5hY2lvbmFsIG8gaW50ZXJuYWNpb25hbC4gCgoKZikJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIGNvbnZlcnRpciBsYSBvYnJhIGEgY3VhbHF1aWVyIG1lZGlvIG8gZm9ybWF0byBjb24gZWwgZmluIGRlIHN1IHByZXNlcnZhY2nDs24gZW4gZWwgdGllbXBvIHF1ZSBsYSBwcmVzZW50ZSBsaWNlbmNpYSB5IGxhIGRlIHN1cyBwcsOzcnJvZ2FzLgoKCkNvbiBiYXNlIGVuIGxvIGFudGVyaW9yIGF1dG9yaXpvKGFtb3MpLCBhIGZhdm9yIGRlbCBSSVVEIHkgZGUgc3VzIHVzdWFyaW9zLCBsYSBwdWJsaWNhY2nDs24geSBjb25zdWx0YSBkZSBsYSBzaWd1aWVudGUgb2JyYToKClRpdHVsbyAJCkF1dG9yCUFwZWxsaWRvcwlOb21icmVzCjEJCQoyCQkKMwkJCiAKCmcpCUF1dG9yaXpvKGFtb3MpLCBxdWUgbGEgb2JyYSBzZWEgcHVlc3RhIGEgZGlzcG9zaWNpw7NuIGRlbCBww7pibGljbyBlbiBsb3MgdMOpcm1pbm9zIGVzdGFibGVjaWRvcyBlbiBsb3MgbGl0ZXJhbGVzIGFudGVyaW9yZXMsIGJham8gbG9zIGzDrW1pdGVzIGRlZmluaWRvcyBwb3IgTEEgVU5JVkVSU0lEQUQsIGVuIGxhcyDigJxDb25kaWNpb25lcyBkZSB1c28gZGUgZXN0cmljdG8gY3VtcGxpbWllbnRv4oCdIGRlIGxvcyByZWN1cnNvcyBwdWJsaWNhZG9zIGVuIGVsIFJJVUQsIGN1eW8gdGV4dG8gY29tcGxldG8gc2UgcHVlZGUgY29uc3VsdGFyIGVuIGh0dHA6Ly9yZXBvc2l0b3J5LnVkaXN0cml0YWwuZWR1LmNvLwoKaCkJQ29ub3pjbyhjZW1vcykgeSBhY2VwdG8oYW1vcykgcXVlIG90b3JnbyhhbW9zKSB1bmEgbGljZW5jaWEgZXNwZWNpYWwgcGFyYSBwdWJsaWNhY2nDs24gZGUgb2JyYXMgZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcywgbGljZW5jaWEgICBkZSBsYSBjdWFsIGhlIChoZW1vcykgb2J0ZW5pZG8gdW5hIGNvcGlhLgoKaSkJTWFuaWZpZXN0byhhbW9zKSBtaSAobnVlc3RybykgdG90YWwgYWN1ZXJkbyBjb24gbGFzIGNvbmRpY2lvbmVzIGRlIHVzbyB5IHB1YmxpY2FjacOzbiBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIHF1ZSBzZSBkZXNjcmliZW4geSBleHBsaWNhbiBlbiBlbCBwcmVzZW50ZSBkb2N1bWVudG8uCgpqKQlDb25vemNvKGNlbW9zKSBsYSBub3JtYXRpdmlkYWQgaW50ZXJuYSBkZSAgTEEgVU5JVkVSU0lEQUQ7IGVuIGNvbmNyZXRvLCBlbCBBY3VlcmRvIDAwNCBkZSAyMDEyIGRlbCBDU1UsIEFjdWVyZG8gMDIzIGRlIDIwMTIgZGVsIENTVSBzb2JyZSBQb2zDrXRpY2EgRWRpdG9yaWFsLCBBY3VlcmRvIDAyNiAgZGVsIDMxIGRlIGp1bGlvIGRlIDIwMTIgc29icmUgZWwgcHJvY2VkaW1pZW50byBwYXJhIGxhIHB1YmxpY2FjacOzbiBkZSB0ZXNpcyBkZSBwb3N0Z3JhZG8gZGUgbG9zIGVzdHVkaWFudGVzIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzLCAgQWN1ZXJkbyAwMzAgZGVsIDAzIGRlIGRpY2llbWJyZSBkZSAyMDEzIHBvciBtZWRpbyBkZWwgY3VhbCBzZSBjcmVhIGVsIFJlcG9zaXRvcmlvIEluc3RpdHVjaW9uYWwgZGUgbGEgVW5pdmVyc2lkYWQgRGlzdHJpdGFsIEZyYW5jaXNjbyBKb3PDqSBkZSBDYWxkYXMsIEFjdWVyZG8gMDM4IGRlIDIwMTUgMjAxNSDigJxwb3IgZWwgY3VhbCBzZSBtb2RpZmljYSBlbCBBY3VlcmRvIDAzMSBkZSAyMDE0IGRlIDIwMTQgcXVlIHJlZ2xhbWVudGEgZWwgdHJhYmFqbyBkZSBncmFkbyBwYXJhIGxvcyBlc3R1ZGlhbnRlcyBkZSBwcmVncmFkbyBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyB5IHNlIGRpY3RhbiBvdHJhcyBkaXJlY3RyaWNlc+KAnSB5IGxhcyBkZW3DoXMgbm9ybWFzIGNvbmNvcmRhbnRlIHkgY29tcGxlbWVudGFyaWFzIHF1ZSByaWdlbiBhbCByZXNwZWN0bywgZXNwZWNpYWxtZW50ZSBsYSBsZXkgMjMgZGUgMTk4MiwgbGEgbGV5IDQ0IGRlIDE5OTMgeSBsYSBkZWNpc2nDs24gQW5kaW5hIDM1MSBkZSAxOTkzLiBFc3RvcyBkb2N1bWVudG9zIHBvZHLDoW4gc2VyIGNvbnN1bHRhZG9zIHkgZGVzY2FyZ2Fkb3MgZW4gZWwgcG9ydGFsIHdlYiBkZSBsYSBiaWJsaW90ZWNhIGh0dHA6Ly9zaXN0ZW1hZGViaWJsaW90ZWNhcy51ZGlzdHJpdGFsLmVkdS5jby8gIAoKaykJQWNlcHRvKGFtb3MpIHF1ZSBMQSBVTklWRVJTSURBRCBubyBzZSByZXNwb25zYWJpbGl6YSBwb3IgbGFzIGluZnJhY2Npb25lcyBhIGxhIHByb3BpZWRhZCBpbnRlbGVjdHVhbCBvIERlcmVjaG9zIGRlIEF1dG9yIGNhdXNhZGFzIHBvciBsb3MgdGl0dWxhcmVzIGRlIGxhIHByZXNlbnRlIExpY2VuY2lhIHkgZGVjbGFyYW1vcyBxdWUgbWFudGVuZHLDqSAoZW1vcykgaW5kZW1uZSBhIExBIFVOSVZFUlNJREFEIHBvciBsYXMgcmVjbGFtYWNpb25lcyBsZWdhbGVzIGRlIGN1YWxxdWllciB0aXBvIHF1ZSBsbGVnYXJlbiBhIHByZXNlbnRhcnNlIHBvciB2aW9sYWNpw7NuIGRlIGRlcmVjaG9zIGEgbGEgcHJvcGllZGFkIGludGVsZWN0dWFsIG8gZGUgQXV0b3IgcmVsYWNpb25hZG9zIGNvbiBsb3MgZG9jdW1lbnRvcyByZWdpc3RyYWRvcyBlbiBlbCBSSVVELgoKbCkJRWwgKGxvcykgYXV0b3IoZXMpIG1hbmlmaWVzdGEobW9zKSBxdWUgbGEgb2JyYSBvYmpldG8gZGUgbGEgcHJlc2VudGUgYXV0b3JpemFjacOzbiBlcyBvcmlnaW5hbCwgZGUgZXhjbHVzaXZhIGF1dG9yw61hLCB5IHNlIHJlYWxpesOzIHNpbiB2aW9sYXIgbyB1c3VycGFyIGRlcmVjaG9zIGRlIGF1dG9yIGRlIHRlcmNlcm9zOyBkZSB0YWwgc3VlcnRlLCBlbiBjYXNvIGRlIHByZXNlbnRhcnNlIGN1YWxxdWllciByZWNsYW1hY2nDs24gbyBhY2Npw7NuIHBvciBwYXJ0ZSBkZSB1biB0ZXJjZXJvIGVuIGN1YW50byBhIGxvcyBkZXJlY2hvcyBkZSBhdXRvciBzb2JyZSBsYSBvYnJhLCBlbCAobG9zKSBlc3R1ZGlhbnRlKHMpIOKAkyBhdXRvcihlcykgYXN1bWlyw6EobikgdG9kYSBsYSByZXNwb25zYWJpbGlkYWQgeSBzYWxkcsOhKG4pIGVuIGRlZmVuc2EgZGUgbG9zIGRlcmVjaG9zIGFxdcOtIGF1dG9yaXphZG9zLiBQYXJhIHRvZG9zIGxvcyBlZmVjdG9zLCBMQSBVTklWRVJTSURBRCBhY3TDumEgY29tbyB1biB0ZXJjZXJvIGRlIGJ1ZW5hIGZlLiAgIAoKCm0pCUVsIChsb3MpIGF1dG9yKGVzKSBtYW5pZmllc3RhKG1vcykgcXVlIGNvbm96Y28oY2Vtb3MpIGxhIGF1dG9ub23DrWEgeSBsb3MgZGVyZWNob3MsIHF1ZSBwb3NlZShtb3MpIHNvYnJlIGxhIG9icmEgeSwgY29tbyB0YWwsIGVzIChzb21vcykgcmVzcG9uc2FibGUocykgZGVsIGFsY2FuY2UganVyw61kaWNvIHkgbGVnYWwsIGRlIGVzY29nZXIgbGEgb3BjacOzbiBkZSBsYSBwdWJsaWNhY2nDs24gbyBkZSByZXN0cmljY2nDs24gZGUgbGEgcHVibGljYWNpw7NuIGRlbCBkb2N1bWVudG8gcmVnaXN0cmFkbyBlbiBlbCBSSVVELgoKCgoKU0kgRUwgRE9DVU1FTlRPIFNFIEJBU0EgRU4gVU4gVFJBQkFKTyBRVUUgSEEgU0lETyBQQVRST0NJTkFETyBPIEFQT1lBRE8gUE9SIFVOQSBBR0VOQ0lBIE8gVU5BIE9SR0FOSVpBQ0nDk04sIENPTiBFWENFUENJw5NOIERFIExBIFVOSVZFUlNJREFEIERJU1RSSVRBTCBGUkFOQ0lTQ08gSk9TRSBERSBDQUxEQVMsIExPUyBBVVRPUkVTIEdBUkFOVElaQU4gUVVFIFNFIEhBIENVTVBMSURPIENPTiBMT1MgCkRFUkVDSE9TIFkgT0JMSUdBQ0lPTkVTIFJFUVVFUklET1MgUE9SIEVMIFJFU1BFQ1RJVk8gQ09OVFJBVE8gTyBBQ1VFUkRPLgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpFbiBjb25zdGFuY2lhIGRlIGxvIGFudGVyaW9yLCBmaXJtbyhhbW9zKSBlbCBwcmVzZW50ZSBkb2N1bWVudG8sIGVuIGxhIGNpdWRhZCBkZSBCb2dvdMOhLCBELkMuLCBhIGxvcyAKCgpGSVJNQSBERSBMT1MgVElUVUxBUkVTIERFIERFUkVDSE9TIERFIEFVVE9SCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gICBDLkMuIE5vLiBfX19fX19fX19fX19fX19fX18KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fICAgQy5DLiBOby4gX19fX19fX19fX19fX19fX19fCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAgIEMuQy4gTm8uIF9fX19fX19fX19fX19fX19fXwoKCgpDb3JyZW8gRWxlY3Ryw7NuaWNvIEluc3RpdHVjaW9uYWwgZGVsIChkZSBsb3MpIEF1dG9yKGVzKToKCkF1dG9yCUNvcnJlbyBFbGVjdHLDs25pY28gCjEJCjIJCjMJCgpOb21icmUgZGUgRGlyZWN0b3IoZXMpIGRlIEdyYWRvOgoKMQkKMgkKMwkKCk5vbWJyZSBGYWN1bHRhZCB5IFByb3llY3RvIEN1cnJpY3VsYXI6CgpGYWN1bHRhZAlQcm95ZWN0byBDdXJyaWN1bGFyCgkKCgoKCgoKCk5vdGE6IEVuIGNhc28gcXVlIG5vIGVzdMOpIGRlIGFjdWVyZG8gY29uIGxhcyBjb25kaWNpb25lcyBkZSBsYSBwcmVzZW50ZSBsaWNlbmNpYSwgeSBtYW5pZmllc3RlIGFsZ3VuYSByZXN0cmljY2nDs24gc29icmUgbGEgb2JyYSwganVzdGlmaXF1ZSBsb3MgbW90aXZvcyBwb3IgbG9zIGN1YWxlcyBlbCBkb2N1bWVudG8geSBzdXMgYW5leG9zIG5vIHB1ZWRlbiBzZXIgcHVibGljYWRvcyBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIFJJVUQuCgoKU2kgcmVxdWllcmUgbcOhcyBlc3BhY2lvLCBwdWVkZSBhbmV4YXIgdW5hIGNvcGlhIHNpbWlsYXIgYSBlc3RhIGhvamEKCgo= |