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...

Full description

Autores:
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.contributor.advisor.spa.fl_str_mv Alvarado Nieto, Luz Deicy
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 http://repository.udistrital.edu.co/bitstream/11349/27938/9/HernandezCamiloRodriguezJonathan2020.pdf.jpg
http://repository.udistrital.edu.co/bitstream/11349/27938/10/Licencia%20y%20autorizaci%c3%b3n%20de%20los%20autores%20para%20publicar.pdf.jpg
http://repository.udistrital.edu.co/bitstream/11349/27938/1/HernandezCamiloRodriguezJonathan2020.pdf
http://repository.udistrital.edu.co/bitstream/11349/27938/2/Licencia%20y%20autorizaci%c3%b3n%20de%20los%20autores%20para%20publicar.pdf
http://repository.udistrital.edu.co/bitstream/11349/27938/5/license_url
http://repository.udistrital.edu.co/bitstream/11349/27938/6/license_text
http://repository.udistrital.edu.co/bitstream/11349/27938/7/license_rdf
http://repository.udistrital.edu.co/bitstream/11349/27938/8/license.txt
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 Institucional Universidad Distrital - RIUD
repository.mail.fl_str_mv repositorio@udistrital.edu.co
_version_ 1803712478802083840
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/jpeg7236http://repository.udistrital.edu.co/bitstream/11349/27938/9/HernandezCamiloRodriguezJonathan2020.pdf.jpg3c5ab090faf6df726518541a8555c039MD59open accessLicencia y autorización de los autores para publicar.pdf.jpgLicencia y autorización de los autores para publicar.pdf.jpgIM Thumbnailimage/jpeg13157http://repository.udistrital.edu.co/bitstream/11349/27938/10/Licencia%20y%20autorizaci%c3%b3n%20de%20los%20autores%20para%20publicar.pdf.jpg1d01170aada4a2324817a15e054a3321MD510open accessORIGINALHernandezCamiloRodriguezJonathan2020.pdfHernandezCamiloRodriguezJonathan2020.pdfapplication/pdf35548658http://repository.udistrital.edu.co/bitstream/11349/27938/1/HernandezCamiloRodriguezJonathan2020.pdf827296500ff9cc472a53740e5ac90806MD51open accessLicencia y autorización de los autores para publicar.pdfLicencia y autorización de los autores para publicar.pdfapplication/pdf284276http://repository.udistrital.edu.co/bitstream/11349/27938/2/Licencia%20y%20autorizaci%c3%b3n%20de%20los%20autores%20para%20publicar.pdfaa2ff24e10e689d87d0a0a6fb005d522MD52metadata only accessCC-LICENSElicense_urllicense_urltext/plain; charset=utf-846http://repository.udistrital.edu.co/bitstream/11349/27938/5/license_url486e70aa6e7b0271de4953c01c4283fdMD55open accesslicense_textlicense_texttext/html; charset=utf-80http://repository.udistrital.edu.co/bitstream/11349/27938/6/license_textd41d8cd98f00b204e9800998ecf8427eMD56open accesslicense_rdflicense_rdfapplication/rdf+xml; charset=utf-80http://repository.udistrital.edu.co/bitstream/11349/27938/7/license_rdfd41d8cd98f00b204e9800998ecf8427eMD57open accessLICENSElicense.txtlicense.txttext/plain; charset=utf-87163http://repository.udistrital.edu.co/bitstream/11349/27938/8/license.txtda5c6a3ca62d5dd4853000a60fee7083MD58open access11349/27938oai:repository.udistrital.edu.co:11349/279382023-06-13 12:51:08.095open accessRepositorio Institucional Universidad Distrital - RIUDrepositorio@udistrital.edu.coTElDRU5DSUEgWSBBVVRPUklaQUNJw5NOIEVTUEVDSUFMIFBBUkEgUFVCTElDQVIgWSBQRVJNSVRJUiBMQSBDT05TVUxUQSBZIFVTTyBERSBDT05URU5JRE9TIEVOIEVMIFJFUE9TSVRPUklPIElOU1RJVFVDSU9OQUwgREUgTEEgVU5JVkVSU0lEQUQgRElTVFJJVEFMClTDqXJtaW5vcyB5IGNvbmRpY2lvbmVzIGRlIHVzbyBwYXJhIHB1YmxpY2FjacOzbiBkZSBvYnJhcyBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIChSSVVEKQoKQ29tbyB0aXR1bGFyKGVzKSBkZWwob3MpIGRlcmVjaG8ocykgZGUgYXV0b3IsIGNvbmZpZXJvIChlcmltb3MpIGEgbGEgVW5pdmVyc2lkYWQgRGlzdHJpdGFsIEZyYW5jaXNjbyBKb3PDqSBkZSBDYWxkYXMgKGVuIGFkZWxhbnRlLCBMQSBVTklWRVJTSURBRCkgdW5hIGxpY2VuY2lhIHBhcmEgdXNvIG5vIGV4Y2x1c2l2YSwgbGltaXRhZGEgeSBncmF0dWl0YSBzb2JyZSBsYSBvYnJhIHF1ZSBpbnRlZ3JhcsOhIGVsIFJlcG9zaXRvcmlvIEluc3RpdHVjaW9uYWwgKGVuIGFkZWxhbnRlLCBSSVVEKSwgZGUgYWN1ZXJkbyBhIGxhcyBzaWd1aWVudGVzIHJlZ2xhcywgbGFzIGN1YWxlcyBkZWNsYXJvIChhbW9zKSBjb25vY2VyIHkgYWNlcHRhcjoKCmEpCUVzdGFyw6EgdmlnZW50ZSBhIHBhcnRpciBkZSBsYSBmZWNoYSBlbiBxdWUgc2UgaW5jbHV5YSBlbiBlbCBSSVVEIHkgaGFzdGEgcG9yIHVuIHBsYXpvIGRlIGRpZXogKDEwKSBBw7FvcywgcHJvcnJvZ2FibGUgaW5kZWZpbmlkYW1lbnRlIHBvciBlbCB0aWVtcG8gcXVlIGR1cmUgZWwgZGVyZWNobyBQYXRyaW1vbmlhbCBkZWwgYXV0b3I7IGxhIGN1YWwgcG9kcsOhIGRhcnNlIHBvciB0ZXJtaW5hZGEgcHJldmlhIHNvbGljaXR1ZCBhIExBIFVOSVZFUlNJREFEIHBvciBlc2NyaXRvIGNvbiB1bmEgYW50ZWxhY2nDs24gZGUgZG9zICgyKSBtZXNlcyBhbnRlcyBkZWwgdmVuY2ltaWVudG8gZGVsIHBsYXpvIGluaWNpYWwgbyBlbCBkZSBzdShzKSBwcsOzcnJvZ2EocykuICAKCmIpCUxBIFVOSVZFUlNJREFEIHBvZHLDoSBwdWJsaWNhciBsYSBvYnJhIGVuIGxhcyBkaXN0aW50YXMgdmVyc2lvbmVzIHJlcXVlcmlkYXMgcG9yIGVsIFJJVUQgKGRpZ2l0YWwsIGltcHJlc28sIGVsZWN0csOzbmljbyB1IG90cm8gbWVkaW8gY29ub2NpZG8gbyBwb3IgY29ub2NlcikgTEEgVU5JVkVSU0lEQUQgbm8gc2Vyw6EgcmVzcG9uc2FibGUgZW4gZWwgZXZlbnRvIHF1ZSBlbCBkb2N1bWVudG8gYXBhcmV6Y2EgcmVmZXJlbmNpYWRvIGVuIG1vdG9yZXMgZGUgYsO6c3F1ZWRhIG8gcmVwb3NpdG9yaW9zIGRpZmVyZW50ZXMgYWwgUklVRCwgdW5hIHZleiBlbChvcykgYXV0b3IoZXMpIHNvbGljaXRlbiBzdSBlbGltaW5hY2nDs24gZGVsIFJJVUQsIGRhZG8gcXVlIGxhIG1pc21hIHNlcsOhIHB1YmxpY2FkYSBlbiBJbnRlcm5ldC4gCgpjKQlMYSBhdXRvcml6YWNpw7NuIHNlIGhhY2UgYSB0w610dWxvIGdyYXR1aXRvLCBwb3IgbG8gdGFudG8sIGxvcyBhdXRvcmVzIHJlbnVuY2lhbiBhIHJlY2liaXIgYmVuZWZpY2lvIGFsZ3VubyBwb3IgbGEgcHVibGljYWNpw7NuLCBkaXN0cmlidWNpw7NuLCBjb211bmljYWNpw7NuIHDDumJsaWNhIHkgY3VhbHF1aWVyIG90cm8gdXNvIHF1ZSBzZSBoYWdhIGVuIGxvcyB0w6lybWlub3MgZGUgbGEgcHJlc2VudGUgbGljZW5jaWEgeSBkZSBsYSBsaWNlbmNpYSBkZSB1c28gY29uIHF1ZSBzZSBwdWJsaWNhIChDcmVhdGl2ZSBDb21tb25zKS4KCmQpCUxvcyBjb250ZW5pZG9zIHB1YmxpY2Fkb3MgZW4gZWwgUklVRCBzb24gb2JyYShzKSBvcmlnaW5hbChlcykgc29icmUgbGEgY3VhbChlcykgZWwob3MpIGF1dG9yKGVzKSBjb21vIHRpdHVsYXJlcyBkZSBsb3MgZGVyZWNob3MgZGUgYXV0b3IsIGFzdW1lbiB0b3RhbCByZXNwb25zYWJpbGlkYWQgcG9yIGVsIGNvbnRlbmlkbyBkZSBzdSBvYnJhIGFudGUgTEEgVU5JVkVSU0lEQUQgeSBhbnRlIHRlcmNlcm9zLiBFbiB0b2RvIGNhc28gTEEgVU5JVkVSU0lEQUQgc2UgY29tcHJvbWV0ZSBhIGluZGljYXIgc2llbXByZSBsYSBhdXRvcsOtYSBpbmNsdXllbmRvIGVsIG5vbWJyZSBkZWwgYXV0b3IgeSBsYSBmZWNoYSBkZSBwdWJsaWNhY2nDs24uCgplKQlMQSBVTklWRVJTSURBRCBwb2Ryw6EgaW5jbHVpciBsYSBvYnJhIGVuIGxvcyDDrW5kaWNlcyB5IGJ1c2NhZG9yZXMgcXVlIGVzdGltZW4gbmVjZXNhcmlvcyBwYXJhIG1heGltaXphciBsYSB2aXNpYmlsaWRhZCBlbCB1c28geSBlbCBpbXBhY3RvIGRlIGxhIHByb2R1Y2Npw7NuIGNpZW50w61maWNhLCBhcnTDrXN0aWNhIHkgYWNhZMOpbWljYSBlbiBsYSBjb211bmlkYWQgbG9jYWwsIG5hY2lvbmFsIG8gaW50ZXJuYWNpb25hbC4gCgoKZikJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIGNvbnZlcnRpciBsYSBvYnJhIGEgY3VhbHF1aWVyIG1lZGlvIG8gZm9ybWF0byBjb24gZWwgZmluIGRlIHN1IHByZXNlcnZhY2nDs24gZW4gZWwgdGllbXBvIHF1ZSBsYSBwcmVzZW50ZSBsaWNlbmNpYSB5IGxhIGRlIHN1cyBwcsOzcnJvZ2FzLgoKCkNvbiBiYXNlIGVuIGxvIGFudGVyaW9yIGF1dG9yaXpvKGFtb3MpLCBhIGZhdm9yIGRlbCBSSVVEIHkgZGUgc3VzIHVzdWFyaW9zLCBsYSBwdWJsaWNhY2nDs24geSBjb25zdWx0YSBkZSBsYSBzaWd1aWVudGUgb2JyYToKClRpdHVsbyAJCkF1dG9yCUFwZWxsaWRvcwlOb21icmVzCjEJCQoyCQkKMwkJCiAKCmcpCUF1dG9yaXpvKGFtb3MpLCBxdWUgbGEgb2JyYSBzZWEgcHVlc3RhIGEgZGlzcG9zaWNpw7NuIGRlbCBww7pibGljbyBlbiBsb3MgdMOpcm1pbm9zIGVzdGFibGVjaWRvcyBlbiBsb3MgbGl0ZXJhbGVzIGFudGVyaW9yZXMsIGJham8gbG9zIGzDrW1pdGVzIGRlZmluaWRvcyBwb3IgTEEgVU5JVkVSU0lEQUQsIGVuIGxhcyDigJxDb25kaWNpb25lcyBkZSB1c28gZGUgZXN0cmljdG8gY3VtcGxpbWllbnRv4oCdIGRlIGxvcyByZWN1cnNvcyBwdWJsaWNhZG9zIGVuIGVsIFJJVUQsIGN1eW8gdGV4dG8gY29tcGxldG8gc2UgcHVlZGUgY29uc3VsdGFyIGVuIGh0dHA6Ly9yZXBvc2l0b3J5LnVkaXN0cml0YWwuZWR1LmNvLwoKaCkJQ29ub3pjbyhjZW1vcykgeSBhY2VwdG8oYW1vcykgcXVlIG90b3JnbyhhbW9zKSB1bmEgbGljZW5jaWEgZXNwZWNpYWwgcGFyYSBwdWJsaWNhY2nDs24gZGUgb2JyYXMgZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcywgbGljZW5jaWEgICBkZSBsYSBjdWFsIGhlIChoZW1vcykgb2J0ZW5pZG8gdW5hIGNvcGlhLgoKaSkJTWFuaWZpZXN0byhhbW9zKSBtaSAobnVlc3RybykgdG90YWwgYWN1ZXJkbyBjb24gbGFzIGNvbmRpY2lvbmVzIGRlIHVzbyB5IHB1YmxpY2FjacOzbiBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIHF1ZSBzZSBkZXNjcmliZW4geSBleHBsaWNhbiBlbiBlbCBwcmVzZW50ZSBkb2N1bWVudG8uCgpqKQlDb25vemNvKGNlbW9zKSBsYSBub3JtYXRpdmlkYWQgaW50ZXJuYSBkZSAgTEEgVU5JVkVSU0lEQUQ7IGVuIGNvbmNyZXRvLCBlbCBBY3VlcmRvIDAwNCBkZSAyMDEyIGRlbCBDU1UsIEFjdWVyZG8gMDIzIGRlIDIwMTIgZGVsIENTVSBzb2JyZSBQb2zDrXRpY2EgRWRpdG9yaWFsLCBBY3VlcmRvIDAyNiAgZGVsIDMxIGRlIGp1bGlvIGRlIDIwMTIgc29icmUgZWwgcHJvY2VkaW1pZW50byBwYXJhIGxhIHB1YmxpY2FjacOzbiBkZSB0ZXNpcyBkZSBwb3N0Z3JhZG8gZGUgbG9zIGVzdHVkaWFudGVzIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzLCAgQWN1ZXJkbyAwMzAgZGVsIDAzIGRlIGRpY2llbWJyZSBkZSAyMDEzIHBvciBtZWRpbyBkZWwgY3VhbCBzZSBjcmVhIGVsIFJlcG9zaXRvcmlvIEluc3RpdHVjaW9uYWwgZGUgbGEgVW5pdmVyc2lkYWQgRGlzdHJpdGFsIEZyYW5jaXNjbyBKb3PDqSBkZSBDYWxkYXMsIEFjdWVyZG8gMDM4IGRlIDIwMTUgMjAxNSDigJxwb3IgZWwgY3VhbCBzZSBtb2RpZmljYSBlbCBBY3VlcmRvIDAzMSBkZSAyMDE0IGRlIDIwMTQgcXVlIHJlZ2xhbWVudGEgZWwgdHJhYmFqbyBkZSBncmFkbyBwYXJhIGxvcyBlc3R1ZGlhbnRlcyBkZSBwcmVncmFkbyBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyB5IHNlIGRpY3RhbiBvdHJhcyBkaXJlY3RyaWNlc+KAnSB5IGxhcyBkZW3DoXMgbm9ybWFzIGNvbmNvcmRhbnRlIHkgY29tcGxlbWVudGFyaWFzIHF1ZSByaWdlbiBhbCByZXNwZWN0bywgZXNwZWNpYWxtZW50ZSBsYSBsZXkgMjMgZGUgMTk4MiwgbGEgbGV5IDQ0IGRlIDE5OTMgeSBsYSBkZWNpc2nDs24gQW5kaW5hIDM1MSBkZSAxOTkzLiBFc3RvcyBkb2N1bWVudG9zIHBvZHLDoW4gc2VyIGNvbnN1bHRhZG9zIHkgZGVzY2FyZ2Fkb3MgZW4gZWwgcG9ydGFsIHdlYiBkZSBsYSBiaWJsaW90ZWNhIGh0dHA6Ly9zaXN0ZW1hZGViaWJsaW90ZWNhcy51ZGlzdHJpdGFsLmVkdS5jby8gIAoKaykJQWNlcHRvKGFtb3MpIHF1ZSBMQSBVTklWRVJTSURBRCBubyBzZSByZXNwb25zYWJpbGl6YSBwb3IgbGFzIGluZnJhY2Npb25lcyBhIGxhIHByb3BpZWRhZCBpbnRlbGVjdHVhbCBvIERlcmVjaG9zIGRlIEF1dG9yIGNhdXNhZGFzIHBvciBsb3MgdGl0dWxhcmVzIGRlIGxhIHByZXNlbnRlIExpY2VuY2lhIHkgZGVjbGFyYW1vcyBxdWUgbWFudGVuZHLDqSAoZW1vcykgaW5kZW1uZSBhIExBIFVOSVZFUlNJREFEIHBvciBsYXMgcmVjbGFtYWNpb25lcyBsZWdhbGVzIGRlIGN1YWxxdWllciB0aXBvIHF1ZSBsbGVnYXJlbiBhIHByZXNlbnRhcnNlIHBvciB2aW9sYWNpw7NuIGRlIGRlcmVjaG9zIGEgbGEgcHJvcGllZGFkIGludGVsZWN0dWFsIG8gZGUgQXV0b3IgcmVsYWNpb25hZG9zIGNvbiBsb3MgZG9jdW1lbnRvcyByZWdpc3RyYWRvcyBlbiBlbCBSSVVELgoKbCkJRWwgKGxvcykgYXV0b3IoZXMpIG1hbmlmaWVzdGEobW9zKSBxdWUgbGEgb2JyYSBvYmpldG8gZGUgbGEgcHJlc2VudGUgYXV0b3JpemFjacOzbiBlcyBvcmlnaW5hbCwgZGUgZXhjbHVzaXZhIGF1dG9yw61hLCB5IHNlIHJlYWxpesOzIHNpbiB2aW9sYXIgbyB1c3VycGFyIGRlcmVjaG9zIGRlIGF1dG9yIGRlIHRlcmNlcm9zOyBkZSB0YWwgc3VlcnRlLCBlbiBjYXNvIGRlIHByZXNlbnRhcnNlIGN1YWxxdWllciByZWNsYW1hY2nDs24gbyBhY2Npw7NuIHBvciBwYXJ0ZSBkZSB1biB0ZXJjZXJvIGVuIGN1YW50byBhIGxvcyBkZXJlY2hvcyBkZSBhdXRvciBzb2JyZSBsYSBvYnJhLCBlbCAobG9zKSBlc3R1ZGlhbnRlKHMpIOKAkyBhdXRvcihlcykgYXN1bWlyw6EobikgdG9kYSBsYSByZXNwb25zYWJpbGlkYWQgeSBzYWxkcsOhKG4pIGVuIGRlZmVuc2EgZGUgbG9zIGRlcmVjaG9zIGFxdcOtIGF1dG9yaXphZG9zLiBQYXJhIHRvZG9zIGxvcyBlZmVjdG9zLCBMQSBVTklWRVJTSURBRCBhY3TDumEgY29tbyB1biB0ZXJjZXJvIGRlIGJ1ZW5hIGZlLiAgIAoKCm0pCUVsIChsb3MpIGF1dG9yKGVzKSBtYW5pZmllc3RhKG1vcykgcXVlIGNvbm96Y28oY2Vtb3MpIGxhIGF1dG9ub23DrWEgeSBsb3MgZGVyZWNob3MsIHF1ZSBwb3NlZShtb3MpIHNvYnJlIGxhIG9icmEgeSwgY29tbyB0YWwsIGVzIChzb21vcykgcmVzcG9uc2FibGUocykgZGVsIGFsY2FuY2UganVyw61kaWNvIHkgbGVnYWwsIGRlIGVzY29nZXIgbGEgb3BjacOzbiBkZSBsYSBwdWJsaWNhY2nDs24gbyBkZSByZXN0cmljY2nDs24gZGUgbGEgcHVibGljYWNpw7NuIGRlbCBkb2N1bWVudG8gcmVnaXN0cmFkbyBlbiBlbCBSSVVELgoKCgoKU0kgRUwgRE9DVU1FTlRPIFNFIEJBU0EgRU4gVU4gVFJBQkFKTyBRVUUgSEEgU0lETyBQQVRST0NJTkFETyBPIEFQT1lBRE8gUE9SIFVOQSBBR0VOQ0lBIE8gVU5BIE9SR0FOSVpBQ0nDk04sIENPTiBFWENFUENJw5NOIERFIExBIFVOSVZFUlNJREFEIERJU1RSSVRBTCBGUkFOQ0lTQ08gSk9TRSBERSBDQUxEQVMsIExPUyBBVVRPUkVTIEdBUkFOVElaQU4gUVVFIFNFIEhBIENVTVBMSURPIENPTiBMT1MgCkRFUkVDSE9TIFkgT0JMSUdBQ0lPTkVTIFJFUVVFUklET1MgUE9SIEVMIFJFU1BFQ1RJVk8gQ09OVFJBVE8gTyBBQ1VFUkRPLgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpFbiBjb25zdGFuY2lhIGRlIGxvIGFudGVyaW9yLCBmaXJtbyhhbW9zKSBlbCBwcmVzZW50ZSBkb2N1bWVudG8sIGVuIGxhIGNpdWRhZCBkZSBCb2dvdMOhLCBELkMuLCBhIGxvcyAKCgpGSVJNQSBERSBMT1MgVElUVUxBUkVTIERFIERFUkVDSE9TIERFIEFVVE9SCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gICBDLkMuIE5vLiBfX19fX19fX19fX19fX19fX18KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fICAgQy5DLiBOby4gX19fX19fX19fX19fX19fX19fCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAgIEMuQy4gTm8uIF9fX19fX19fX19fX19fX19fXwoKCgpDb3JyZW8gRWxlY3Ryw7NuaWNvIEluc3RpdHVjaW9uYWwgZGVsIChkZSBsb3MpIEF1dG9yKGVzKToKCkF1dG9yCUNvcnJlbyBFbGVjdHLDs25pY28gCjEJCjIJCjMJCgpOb21icmUgZGUgRGlyZWN0b3IoZXMpIGRlIEdyYWRvOgoKMQkKMgkKMwkKCk5vbWJyZSBGYWN1bHRhZCB5IFByb3llY3RvIEN1cnJpY3VsYXI6CgpGYWN1bHRhZAlQcm95ZWN0byBDdXJyaWN1bGFyCgkKCgoKCgoKCk5vdGE6IEVuIGNhc28gcXVlIG5vIGVzdMOpIGRlIGFjdWVyZG8gY29uIGxhcyBjb25kaWNpb25lcyBkZSBsYSBwcmVzZW50ZSBsaWNlbmNpYSwgeSBtYW5pZmllc3RlIGFsZ3VuYSByZXN0cmljY2nDs24gc29icmUgbGEgb2JyYSwganVzdGlmaXF1ZSBsb3MgbW90aXZvcyBwb3IgbG9zIGN1YWxlcyBlbCBkb2N1bWVudG8geSBzdXMgYW5leG9zIG5vIHB1ZWRlbiBzZXIgcHVibGljYWRvcyBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIFJJVUQuCgoKU2kgcmVxdWllcmUgbcOhcyBlc3BhY2lvLCBwdWVkZSBhbmV4YXIgdW5hIGNvcGlhIHNpbWlsYXIgYSBlc3RhIGhvamEKCgo=