Desarrollo y programación de un agente computacional capaz de jugar un juego de estrategia mediante algoritmos de aprendizaje por refuerzo profundo
Una forma muy recurrente de evaluar la efectividad y funcionalidad de los principales algoritmos de aprendizaje por refuerzo es mediante el uso de videojuegos. En este contexto, se decide implementar un agente basado en algoritmos de aprendizaje por refuerzo profundo en un videojuego de estrategia....
- Autores:
-
Moncayo Basante, David Santiago
- Tipo de recurso:
- Trabajo de grado de pregrado
- Fecha de publicación:
- 2023
- Institución:
- Universidad de los Andes
- Repositorio:
- Séneca: repositorio Uniandes
- Idioma:
- spa
- OAI Identifier:
- oai:repositorio.uniandes.edu.co:1992/73299
- Acceso en línea:
- https://hdl.handle.net/1992/73299
- Palabra clave:
- Agente
Algoritmo
Aprendizaje por refuerzo
Inteligencia artificial
Videojuego
Ingeniería
- Rights
- openAccess
- License
- Attribution 4.0 International
id |
UNIANDES2_757911db06528c6715e6c5d74b21cc2b |
---|---|
oai_identifier_str |
oai:repositorio.uniandes.edu.co:1992/73299 |
network_acronym_str |
UNIANDES2 |
network_name_str |
Séneca: repositorio Uniandes |
repository_id_str |
|
dc.title.spa.fl_str_mv |
Desarrollo y programación de un agente computacional capaz de jugar un juego de estrategia mediante algoritmos de aprendizaje por refuerzo profundo |
title |
Desarrollo y programación de un agente computacional capaz de jugar un juego de estrategia mediante algoritmos de aprendizaje por refuerzo profundo |
spellingShingle |
Desarrollo y programación de un agente computacional capaz de jugar un juego de estrategia mediante algoritmos de aprendizaje por refuerzo profundo Agente Algoritmo Aprendizaje por refuerzo Inteligencia artificial Videojuego Ingeniería |
title_short |
Desarrollo y programación de un agente computacional capaz de jugar un juego de estrategia mediante algoritmos de aprendizaje por refuerzo profundo |
title_full |
Desarrollo y programación de un agente computacional capaz de jugar un juego de estrategia mediante algoritmos de aprendizaje por refuerzo profundo |
title_fullStr |
Desarrollo y programación de un agente computacional capaz de jugar un juego de estrategia mediante algoritmos de aprendizaje por refuerzo profundo |
title_full_unstemmed |
Desarrollo y programación de un agente computacional capaz de jugar un juego de estrategia mediante algoritmos de aprendizaje por refuerzo profundo |
title_sort |
Desarrollo y programación de un agente computacional capaz de jugar un juego de estrategia mediante algoritmos de aprendizaje por refuerzo profundo |
dc.creator.fl_str_mv |
Moncayo Basante, David Santiago |
dc.contributor.advisor.none.fl_str_mv |
García Cárdenas, Juan José Lozano Martínez, Fernando Enrique |
dc.contributor.author.none.fl_str_mv |
Moncayo Basante, David Santiago |
dc.contributor.jury.none.fl_str_mv |
Segura Quijano, Fredy Enrique |
dc.subject.keyword.spa.fl_str_mv |
Agente Algoritmo Aprendizaje por refuerzo Inteligencia artificial |
topic |
Agente Algoritmo Aprendizaje por refuerzo Inteligencia artificial Videojuego Ingeniería |
dc.subject.keyword.none.fl_str_mv |
Videojuego |
dc.subject.themes.spa.fl_str_mv |
Ingeniería |
description |
Una forma muy recurrente de evaluar la efectividad y funcionalidad de los principales algoritmos de aprendizaje por refuerzo es mediante el uso de videojuegos. En este contexto, se decide implementar un agente basado en algoritmos de aprendizaje por refuerzo profundo en un videojuego de estrategia. Se trata de "Pokémon Edición Rojo Fuego", un juego bastante popular en su fecha de lanzamiento e incluso jugado hoy en día. La mecánica principal es el combate por turnos, donde se debe seguir una estrategia correcta para derrotar al rival. |
publishDate |
2023 |
dc.date.issued.none.fl_str_mv |
2023-12-06 |
dc.date.accessioned.none.fl_str_mv |
2024-01-17T16:41:48Z |
dc.date.available.none.fl_str_mv |
2024-01-17T16:41:48Z |
dc.type.none.fl_str_mv |
Trabajo de grado - Pregrado |
dc.type.driver.none.fl_str_mv |
info:eu-repo/semantics/bachelorThesis |
dc.type.version.none.fl_str_mv |
info:eu-repo/semantics/acceptedVersion |
dc.type.coar.none.fl_str_mv |
http://purl.org/coar/resource_type/c_7a1f |
dc.type.content.none.fl_str_mv |
Text |
dc.type.redcol.none.fl_str_mv |
http://purl.org/redcol/resource_type/TP |
format |
http://purl.org/coar/resource_type/c_7a1f |
status_str |
acceptedVersion |
dc.identifier.uri.none.fl_str_mv |
https://hdl.handle.net/1992/73299 |
dc.identifier.instname.none.fl_str_mv |
instname:Universidad de los Andes |
dc.identifier.reponame.none.fl_str_mv |
reponame:Repositorio Institucional Séneca |
dc.identifier.repourl.none.fl_str_mv |
repourl:https://repositorio.uniandes.edu.co/ |
url |
https://hdl.handle.net/1992/73299 |
identifier_str_mv |
instname:Universidad de los Andes reponame:Repositorio Institucional Séneca repourl:https://repositorio.uniandes.edu.co/ |
dc.language.iso.none.fl_str_mv |
spa |
language |
spa |
dc.relation.references.none.fl_str_mv |
R. S. Sutton, Reinforcement learning an introduction. Cambridge, Mass: MIT Press, Second edition, 2018. H. van Hasselt, A. Guez, and D. Silver, ‘Deep Reinforcement Learning with Double Qlearning’, arXiv. org, 2015. Z. Wang, T. Schaul, M. Hessel, H. van Hasselt, M. Lanctot, and N. de Freitas, ‘Dueling Network Architectures for Deep Reinforcement Learning’, arXiv. org, 2016. J. P. Romero Pinzón, ‘Desarrollo de un programa de computador capaz de jugar Trackmania usando técnicas de aprendizaje por refuerzo’. Universidad de los Andes, 16-Jan2023. Goodfellow, I., Bengio, Y., and Courville, A. (2016). Deep Learning. MIT Press A. Millán, “Los Juegos de la Serie principal de Pokémon, ordenados según Su Duración,” Nintenderos, https://www.nintenderos.com/2022/02/los-juegos-de-la-serieprincipal-de-pokemon-ordenados-segun-su-duracion/ (accessed Oct. 8, 2023). D. A. Ballesteros Villamizar, ‘Desarrollo de un programa de computador capaz de jugar Starcraft - Brood War usando técnicas de aprendizaje por refuerzo’. Uniandes, 2011. A. Nichol, V. Pfau, C. Hesse, O. Klimov, and J. Schulman, “Gotta Learn Fast: A New Benchmark for Generalization in RL,” arXiv preprint arXiv:1804.03720, 2018. Mathieu and Poliquin, Stable Retro, a fork of OpenAI’s gym-retro. GitHub, 2023. [Online]. Available: https://github.com/Farama-Foundation/stable-retro Mathieu, “OpenAI Game Integration Tool - Part 1,” YouTube, https://www.youtube.com/watch?v=lPYWaUAq_dY (accessed Oct. 8, 2023). “Pokémon Data Structure (generation III),” Pokémon data structure (Generation III) -Bulbapedia, the community-driven Pokémon encyclopedia, https://bulbapedia.bulbagarden.net/wiki/Pok%C3%A9mon_data_structure_(Generation_III) (accessed Oct. 8, 2023). O. Vinyals et al., ‘Grandmaster level in StarCraft II using multi-agent reinforcement learning’, Nature (London), vol. 575, no. 7782, pp. 350–354, 2019. |
dc.rights.en.fl_str_mv |
Attribution 4.0 International |
dc.rights.uri.none.fl_str_mv |
http://creativecommons.org/licenses/by/4.0/ |
dc.rights.accessrights.none.fl_str_mv |
info:eu-repo/semantics/openAccess |
dc.rights.coar.none.fl_str_mv |
http://purl.org/coar/access_right/c_abf2 |
rights_invalid_str_mv |
Attribution 4.0 International http://creativecommons.org/licenses/by/4.0/ http://purl.org/coar/access_right/c_abf2 |
eu_rights_str_mv |
openAccess |
dc.format.extent.none.fl_str_mv |
31 páginas |
dc.format.mimetype.none.fl_str_mv |
application/pdf |
dc.publisher.none.fl_str_mv |
Universidad de los Andes |
dc.publisher.program.none.fl_str_mv |
Ingeniería Electrónica |
dc.publisher.faculty.none.fl_str_mv |
Facultad de Ingeniería |
dc.publisher.department.none.fl_str_mv |
Departamento de Ingeniería Eléctrica y Electrónica |
publisher.none.fl_str_mv |
Universidad de los Andes |
institution |
Universidad de los Andes |
bitstream.url.fl_str_mv |
https://repositorio.uniandes.edu.co/bitstreams/2bda59a5-6e75-491e-a18f-05a7f278bca1/download https://repositorio.uniandes.edu.co/bitstreams/5d6097b9-816d-4a70-85b6-491b35a1bdb1/download https://repositorio.uniandes.edu.co/bitstreams/f3fc41ac-c923-4ef7-ab02-b31d143b1283/download https://repositorio.uniandes.edu.co/bitstreams/59fc010d-0ee1-40c7-aa53-480c54e00135/download https://repositorio.uniandes.edu.co/bitstreams/bff76d7a-8bdc-4afd-9c75-735067393706/download https://repositorio.uniandes.edu.co/bitstreams/9ed03540-092b-4f27-8bda-ea9b2ae9a334/download https://repositorio.uniandes.edu.co/bitstreams/a1772238-22c9-44b5-b600-d97edfaa63fe/download https://repositorio.uniandes.edu.co/bitstreams/c00690eb-fecc-47d7-bb14-1cbead48ed7c/download |
bitstream.checksum.fl_str_mv |
91ef2bff7c19f4447025b2330ccb9761 86fbeb087740b44e4d2eabaca1259b55 0175ea4a2d4caec4bbcc37e300941108 ae9e573a68e7f92501b6913cc846c39f 35d40b2f80ece639260e0708e882285d 956217bf887cdc33897ff620e275d45b b61039ff51bd4d8a5810130025c0d23f 2686e0ffbe93819249ea9a674c0f3d48 |
bitstream.checksumAlgorithm.fl_str_mv |
MD5 MD5 MD5 MD5 MD5 MD5 MD5 MD5 |
repository.name.fl_str_mv |
Repositorio institucional Séneca |
repository.mail.fl_str_mv |
adminrepositorio@uniandes.edu.co |
_version_ |
1818112086768615424 |
spelling |
García Cárdenas, Juan JoséLozano Martínez, Fernando Enriquevirtual::21175-1Moncayo Basante, David SantiagoSegura Quijano, Fredy Enrique2024-01-17T16:41:48Z2024-01-17T16:41:48Z2023-12-06https://hdl.handle.net/1992/73299instname:Universidad de los Andesreponame:Repositorio Institucional Sénecarepourl:https://repositorio.uniandes.edu.co/Una forma muy recurrente de evaluar la efectividad y funcionalidad de los principales algoritmos de aprendizaje por refuerzo es mediante el uso de videojuegos. En este contexto, se decide implementar un agente basado en algoritmos de aprendizaje por refuerzo profundo en un videojuego de estrategia. Se trata de "Pokémon Edición Rojo Fuego", un juego bastante popular en su fecha de lanzamiento e incluso jugado hoy en día. La mecánica principal es el combate por turnos, donde se debe seguir una estrategia correcta para derrotar al rival.Ingeniero ElectrónicoPregrado31 páginasapplication/pdfspaUniversidad de los AndesIngeniería ElectrónicaFacultad de IngenieríaDepartamento de Ingeniería Eléctrica y ElectrónicaAttribution 4.0 Internationalhttp://creativecommons.org/licenses/by/4.0/info:eu-repo/semantics/openAccesshttp://purl.org/coar/access_right/c_abf2Desarrollo y programación de un agente computacional capaz de jugar un juego de estrategia mediante algoritmos de aprendizaje por refuerzo profundoTrabajo de grado - Pregradoinfo:eu-repo/semantics/bachelorThesisinfo:eu-repo/semantics/acceptedVersionhttp://purl.org/coar/resource_type/c_7a1fTexthttp://purl.org/redcol/resource_type/TPAgenteAlgoritmoAprendizaje por refuerzoInteligencia artificialVideojuegoIngenieríaR. S. Sutton, Reinforcement learning an introduction. Cambridge, Mass: MIT Press, Second edition, 2018.H. van Hasselt, A. Guez, and D. Silver, ‘Deep Reinforcement Learning with Double Qlearning’, arXiv. org, 2015.Z. Wang, T. Schaul, M. Hessel, H. van Hasselt, M. Lanctot, and N. de Freitas, ‘Dueling Network Architectures for Deep Reinforcement Learning’, arXiv. org, 2016.J. P. Romero Pinzón, ‘Desarrollo de un programa de computador capaz de jugar Trackmania usando técnicas de aprendizaje por refuerzo’. Universidad de los Andes, 16-Jan2023.Goodfellow, I., Bengio, Y., and Courville, A. (2016). Deep Learning. MIT PressA. Millán, “Los Juegos de la Serie principal de Pokémon, ordenados según Su Duración,” Nintenderos, https://www.nintenderos.com/2022/02/los-juegos-de-la-serieprincipal-de-pokemon-ordenados-segun-su-duracion/ (accessed Oct. 8, 2023).D. A. Ballesteros Villamizar, ‘Desarrollo de un programa de computador capaz de jugar Starcraft - Brood War usando técnicas de aprendizaje por refuerzo’. Uniandes, 2011.A. Nichol, V. Pfau, C. Hesse, O. Klimov, and J. Schulman, “Gotta Learn Fast: A New Benchmark for Generalization in RL,” arXiv preprint arXiv:1804.03720, 2018.Mathieu and Poliquin, Stable Retro, a fork of OpenAI’s gym-retro. GitHub, 2023. [Online]. Available: https://github.com/Farama-Foundation/stable-retroMathieu, “OpenAI Game Integration Tool - Part 1,” YouTube, https://www.youtube.com/watch?v=lPYWaUAq_dY (accessed Oct. 8, 2023).“Pokémon Data Structure (generation III),” Pokémon data structure (Generation III) -Bulbapedia, the community-driven Pokémon encyclopedia, https://bulbapedia.bulbagarden.net/wiki/Pok%C3%A9mon_data_structure_(Generation_III) (accessed Oct. 8, 2023).O. Vinyals et al., ‘Grandmaster level in StarCraft II using multi-agent reinforcement learning’, Nature (London), vol. 575, no. 7782, pp. 350–354, 2019.202012699Publicationedd81d8c-e0b9-4c1f-bf04-eed0e12e755dvirtual::21175-1edd81d8c-e0b9-4c1f-bf04-eed0e12e755dvirtual::21175-1https://scienti.minciencias.gov.co/cvlac/visualizador/generarCurriculoCv.do?cod_rh=0000025550virtual::21175-1ORIGINALDesarrollo y programación de un agente computacional capaz de jugar un juego de estrategia mediante algoritmos de aprendizaje por refuerzo profundo.pdfDesarrollo y programación de un agente computacional capaz de jugar un juego de estrategia mediante algoritmos de aprendizaje por refuerzo profundo.pdfapplication/pdf1329051https://repositorio.uniandes.edu.co/bitstreams/2bda59a5-6e75-491e-a18f-05a7f278bca1/download91ef2bff7c19f4447025b2330ccb9761MD52autorizacion tesis.pdfautorizacion tesis.pdfHIDEapplication/pdf235199https://repositorio.uniandes.edu.co/bitstreams/5d6097b9-816d-4a70-85b6-491b35a1bdb1/download86fbeb087740b44e4d2eabaca1259b55MD51CC-LICENSElicense_rdflicense_rdfapplication/rdf+xml; charset=utf-8908https://repositorio.uniandes.edu.co/bitstreams/f3fc41ac-c923-4ef7-ab02-b31d143b1283/download0175ea4a2d4caec4bbcc37e300941108MD53LICENSElicense.txtlicense.txttext/plain; charset=utf-82535https://repositorio.uniandes.edu.co/bitstreams/59fc010d-0ee1-40c7-aa53-480c54e00135/downloadae9e573a68e7f92501b6913cc846c39fMD54TEXTDesarrollo y programación de un agente computacional capaz de jugar un juego de estrategia mediante algoritmos de aprendizaje por refuerzo profundo.pdf.txtDesarrollo y programación de un agente computacional capaz de jugar un juego de estrategia mediante algoritmos de aprendizaje por refuerzo profundo.pdf.txtExtracted texttext/plain64673https://repositorio.uniandes.edu.co/bitstreams/bff76d7a-8bdc-4afd-9c75-735067393706/download35d40b2f80ece639260e0708e882285dMD55autorizacion tesis.pdf.txtautorizacion tesis.pdf.txtExtracted texttext/plain2145https://repositorio.uniandes.edu.co/bitstreams/9ed03540-092b-4f27-8bda-ea9b2ae9a334/download956217bf887cdc33897ff620e275d45bMD57THUMBNAILDesarrollo y programación de un agente computacional capaz de jugar un juego de estrategia mediante algoritmos de aprendizaje por refuerzo profundo.pdf.jpgDesarrollo y programación de un agente computacional capaz de jugar un juego de estrategia mediante algoritmos de aprendizaje por refuerzo profundo.pdf.jpgGenerated Thumbnailimage/jpeg9421https://repositorio.uniandes.edu.co/bitstreams/a1772238-22c9-44b5-b600-d97edfaa63fe/downloadb61039ff51bd4d8a5810130025c0d23fMD56autorizacion tesis.pdf.jpgautorizacion tesis.pdf.jpgGenerated Thumbnailimage/jpeg10994https://repositorio.uniandes.edu.co/bitstreams/c00690eb-fecc-47d7-bb14-1cbead48ed7c/download2686e0ffbe93819249ea9a674c0f3d48MD581992/73299oai:repositorio.uniandes.edu.co:1992/732992024-12-04 17:05:04.426http://creativecommons.org/licenses/by/4.0/Attribution 4.0 Internationalopen.accesshttps://repositorio.uniandes.edu.coRepositorio institucional Sénecaadminrepositorio@uniandes.edu.coPGgzPjxzdHJvbmc+RGVzY2FyZ28gZGUgUmVzcG9uc2FiaWxpZGFkIC0gTGljZW5jaWEgZGUgQXV0b3JpemFjacOzbjwvc3Ryb25nPjwvaDM+CjxwPjxzdHJvbmc+UG9yIGZhdm9yIGxlZXIgYXRlbnRhbWVudGUgZXN0ZSBkb2N1bWVudG8gcXVlIHBlcm1pdGUgYWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBTw6luZWNhIHJlcHJvZHVjaXIgeSBkaXN0cmlidWlyIGxvcyByZWN1cnNvcyBkZSBpbmZvcm1hY2nDs24gZGVwb3NpdGFkb3MgbWVkaWFudGUgbGEgYXV0b3JpemFjacOzbiBkZSBsb3Mgc2lndWllbnRlcyB0w6lybWlub3M6PC9zdHJvbmc+PC9wPgo8cD5Db25jZWRhIGxhIGxpY2VuY2lhIGRlIGRlcMOzc2l0byBlc3TDoW5kYXIgc2VsZWNjaW9uYW5kbyBsYSBvcGNpw7NuIDxzdHJvbmc+J0FjZXB0YXIgbG9zIHTDqXJtaW5vcyBhbnRlcmlvcm1lbnRlIGRlc2NyaXRvcyc8L3N0cm9uZz4geSBjb250aW51YXIgZWwgcHJvY2VzbyBkZSBlbnbDrW8gbWVkaWFudGUgZWwgYm90w7NuIDxzdHJvbmc+J1NpZ3VpZW50ZScuPC9zdHJvbmc+PC9wPgo8aHI+CjxwPllvLCBlbiBtaSBjYWxpZGFkIGRlIGF1dG9yIGRlbCB0cmFiYWpvIGRlIHRlc2lzLCBtb25vZ3JhZsOtYSBvIHRyYWJham8gZGUgZ3JhZG8sIGhhZ28gZW50cmVnYSBkZWwgZWplbXBsYXIgcmVzcGVjdGl2byB5IGRlIHN1cyBhbmV4b3MgZGUgc2VyIGVsIGNhc28sIGVuIGZvcm1hdG8gZGlnaXRhbCB5L28gZWxlY3Ryw7NuaWNvIHkgYXV0b3Jpem8gYSBsYSBVbml2ZXJzaWRhZCBkZSBsb3MgQW5kZXMgcGFyYSBxdWUgcmVhbGljZSBsYSBwdWJsaWNhY2nDs24gZW4gZWwgU2lzdGVtYSBkZSBCaWJsaW90ZWNhcyBvIGVuIGN1YWxxdWllciBvdHJvIHNpc3RlbWEgbyBiYXNlIGRlIGRhdG9zIHByb3BpbyBvIGFqZW5vIGEgbGEgVW5pdmVyc2lkYWQgeSBwYXJhIHF1ZSBlbiBsb3MgdMOpcm1pbm9zIGVzdGFibGVjaWRvcyBlbiBsYSBMZXkgMjMgZGUgMTk4MiwgTGV5IDQ0IGRlIDE5OTMsIERlY2lzacOzbiBBbmRpbmEgMzUxIGRlIDE5OTMsIERlY3JldG8gNDYwIGRlIDE5OTUgeSBkZW3DoXMgbm9ybWFzIGdlbmVyYWxlcyBzb2JyZSBsYSBtYXRlcmlhLCB1dGlsaWNlIGVuIHRvZGFzIHN1cyBmb3JtYXMsIGxvcyBkZXJlY2hvcyBwYXRyaW1vbmlhbGVzIGRlIHJlcHJvZHVjY2nDs24sIGNvbXVuaWNhY2nDs24gcMO6YmxpY2EsIHRyYW5zZm9ybWFjacOzbiB5IGRpc3RyaWJ1Y2nDs24gKGFscXVpbGVyLCBwcsOpc3RhbW8gcMO6YmxpY28gZSBpbXBvcnRhY2nDs24pIHF1ZSBtZSBjb3JyZXNwb25kZW4gY29tbyBjcmVhZG9yIGRlIGxhIG9icmEgb2JqZXRvIGRlbCBwcmVzZW50ZSBkb2N1bWVudG8uPC9wPgo8cD5MYSBwcmVzZW50ZSBhdXRvcml6YWNpw7NuIHNlIGVtaXRlIGVuIGNhbGlkYWQgZGUgYXV0b3IgZGUgbGEgb2JyYSBvYmpldG8gZGVsIHByZXNlbnRlIGRvY3VtZW50byB5IG5vIGNvcnJlc3BvbmRlIGEgY2VzacOzbiBkZSBkZXJlY2hvcywgc2lubyBhIGxhIGF1dG9yaXphY2nDs24gZGUgdXNvIGFjYWTDqW1pY28gZGUgY29uZm9ybWlkYWQgY29uIGxvIGFudGVyaW9ybWVudGUgc2XDsWFsYWRvLiBMYSBwcmVzZW50ZSBhdXRvcml6YWNpw7NuIHNlIGhhY2UgZXh0ZW5zaXZhIG5vIHNvbG8gYSBsYXMgZmFjdWx0YWRlcyB5IGRlcmVjaG9zIGRlIHVzbyBzb2JyZSBsYSBvYnJhIGVuIGZvcm1hdG8gbyBzb3BvcnRlIG1hdGVyaWFsLCBzaW5vIHRhbWJpw6luIHBhcmEgZm9ybWF0byBlbGVjdHLDs25pY28sIHkgZW4gZ2VuZXJhbCBwYXJhIGN1YWxxdWllciBmb3JtYXRvIGNvbm9jaWRvIG8gcG9yIGNvbm9jZXIuPC9wPgo8cD5FbCBhdXRvciwgbWFuaWZpZXN0YSBxdWUgbGEgb2JyYSBvYmpldG8gZGUgbGEgcHJlc2VudGUgYXV0b3JpemFjacOzbiBlcyBvcmlnaW5hbCB5IGxhIHJlYWxpesOzIHNpbiB2aW9sYXIgbyB1c3VycGFyIGRlcmVjaG9zIGRlIGF1dG9yIGRlIHRlcmNlcm9zLCBwb3IgbG8gdGFudG8sIGxhIG9icmEgZXMgZGUgc3UgZXhjbHVzaXZhIGF1dG9yw61hIHkgdGllbmUgbGEgdGl0dWxhcmlkYWQgc29icmUgbGEgbWlzbWEuPC9wPgo8cD5FbiBjYXNvIGRlIHByZXNlbnRhcnNlIGN1YWxxdWllciByZWNsYW1hY2nDs24gbyBhY2Npw7NuIHBvciBwYXJ0ZSBkZSB1biB0ZXJjZXJvIGVuIGN1YW50byBhIGxvcyBkZXJlY2hvcyBkZSBhdXRvciBzb2JyZSBsYSBvYnJhIGVuIGN1ZXN0acOzbiwgZWwgYXV0b3IgYXN1bWlyw6EgdG9kYSBsYSByZXNwb25zYWJpbGlkYWQsIHkgc2FsZHLDoSBkZSBkZWZlbnNhIGRlIGxvcyBkZXJlY2hvcyBhcXXDrSBhdXRvcml6YWRvcywgcGFyYSB0b2RvcyBsb3MgZWZlY3RvcyBsYSBVbml2ZXJzaWRhZCBhY3TDumEgY29tbyB1biB0ZXJjZXJvIGRlIGJ1ZW5hIGZlLjwvcD4KPHA+U2kgdGllbmUgYWxndW5hIGR1ZGEgc29icmUgbGEgbGljZW5jaWEsIHBvciBmYXZvciwgY29udGFjdGUgY29uIGVsIDxhIGhyZWY9Im1haWx0bzpiaWJsaW90ZWNhQHVuaWFuZGVzLmVkdS5jbyIgdGFyZ2V0PSJfYmxhbmsiPkFkbWluaXN0cmFkb3IgZGVsIFNpc3RlbWEuPC9hPjwvcD4K |