Introducción
Los hashtags son objetos digitales “nativos” (Rogers 2013). Si bien hay objetos en el mundo digital que tienen un paralelo en la vida offline, como el texto y la imagen, que preexistían a la digitalización, existen otros objetos que nacen con la Web. El hashtag es un desarrollo particular del hiperenlace, un centro de convergencia temático entre los múltiples hilos de la Web, un hiperespacio donde convergen algunas de esas lineas de vida de las que nos hablaba Ingold (2015).
En nuestro país el uso de hashtags no parece tan extendido como en otras latitudes. Sin embargo, en el ultimo tiempo se ha visto el uso relativamente masivo de varios de ellos, como un agregador de sentidos, demandas y actividades, principalmente por grupos activistas; por ejemplo, #TipnisEnResistencia, #MejorInternetYa, #NiUnaMenos, y recientemente #BoliviaDijoNo, #21FDiaDeLaMentira y #Paro21F. El uso de hashtags tiene claras ventajas para los usuarios, pero también para los analistas de redes sociales que constantemente tienen que naufragar en cantidades enormes de datos y conversaciones caóticas dispersas en diversos espacios. Aquí el hashtag funciona como un agregador de opinión pública.
La pasada semana nació una tendencia en las redes que tenía como eje central la figura del presidente Evo Morales. El hashtag #RayoEvolizador nació en Twitter, como un remix de otros hashtags similares en otros países, y rápidamente se expandió a otras plataformas. El centro son los memes que son parte “del remix y la cultura participativa en la que los usuarios agregan, apropian, imitan, parodian, remezclan, editorializan y transforman el contenido original de alguna manera” (Vicery 2015: 1450) Pero además los memes de #RayoEvolizador más allá del contenido visual, portan textos, usuarios, grupos, opiniones, contraopiniones, antagonismos, pulsiones y tácticas.
Si bien parece simplemente un hashtag de “ocio”, en realidad es un hashtag políticamente relevante por las siguientes razones. Primero tiene como centro temático a la imagen del presidente del país. Segundo es una muestra acotada de una nueva forma de generar opinión pública en las redes: la de la sátira política en red, una combinación de humor y crítica. Y tercero, en este hashtag han confluido dos dinámicas distintas, la dinámica civil espontanea y la dinámica política planificada, la primera más participativa y caótica y la segunda más centralizada y planificada.
El objetivo de este artículo es el de analizar las dinámicas estructurales de opinión en torno al hashtag #RayoEvolizador en Twitter. Por dinámica estructural entendemos el conjunto de patrones de redes de comunicación, y no así las dinámicas de contenido que dejamos para otro estudio. Para ello utilizaremos principalmente técnicas del Social Network Analysis (SNA), particularmente los algoritmos de detección de comunidades, también llamados módulos, y algunas medidas de centralidad nodal. El Análisis de Redes Sociales es “un método estructural-relacional, formal y cuantitativo que se interesa por los patrones de interacciones entre los actores” (Ojeda 2015: 17). Este método nos permitirá identificar algunos patrones relevantes en las dinámicas de agrupación y opinión que de otro modo no serían visibles mediante, por ejemplo, la etnografía o la estadística tradicional.
Recolección de datos
Hemos recolectado todos los tweets que contienen el hashtag #RayoEvolizador, desde su creación el 28 de febrero de 2018 hasta el 5 de marzo de 2018 (censo), mediante el paquete SocialMediaLab
:
library(SocialMediaLab)
library(magrittr)
# Autenticación y recolección de datos
rayo <- Authenticate("twitter", apiKey = "", apiSecret="", accessToken="", accessTokenSecret="") %>% Collect(searchTerm="#rayoevolizador", numTweets=1500, verbose=TRUE, maxID = "967395488524795904")
A partir de varias iteraciones, conseguimos un dataset de 6218 tweets:
rayo
Dado que nos concentraremos en las formas de conversación, de momento no nos interesa el contenido de la variable text, por lo que solo utilizaremos las siguientes variables: from_user, reply_to y users_mentioned. A partir de ellas crearemos una red de actores donde los nodos representan usuarios de Twitter que participaron en el hashtag y las aristas representan una mención, réplica o retweet de un usuario \(i\) hacia un usuario \(j\) dado un tweet \(k\).
library(igraph)
# Creamos la red en una estructura de datos apropiada (clase: igraph)
rayoactor <- rayo %>% Create("actor")
Guardamos los datos en formato GraphML para luego medirlo y visualizarlo en Gephi.
write.graph(rayoactor, "rayoactor.graphml", "graphml")
Resultados
El grafo entero
Antes de ir a las comunidades, visualizaremos primero el panorama general de la red entera del hashtag. Los parámetros de la visualización que adoptamos son los siguientes:
Tipo de grafo |
Dirigido y ponderado |
Nodos |
2353 |
Aristas |
6224 |
Algoritmo de disposición |
Yifan Hu |
Tamaño de nodos |
En función al calculo del grado ponderado |
Color de nodos |
En función al calculo de modularidad |
En este caso, debido a la gran cantidad de nodos, hemos optado en principio por no visualizar todas sus etiquetas. Sólo mostramos las etiquetas para los nodos que tienen un grado mayor a 50, por lo que se pueden observar los actores más centrales en cada comunidad:
A primera vista se puede ver en el grafo entero dos campos. El de la derecha donde se ve una interacción más densa y caótica entre varias comunidades y el de la izquierda donde existe un circulo cerrado o burbuja de conversación alrededor del nodo central que es @evoespueblo.
La Figura 3 muestra un snapshot del total de nodos e interacciones que participaron en el hashtag, pero ahora necesitamos una análisis diacrónico. A continuación veremos las comunidades en orden de aparición, que nos permiten deducir su dinámica comunicativa.
A. Comunidad de opinión civil
La comunidad que originó el hashtag creció con el tiempo. En la forma de sus interacciones, vemos que existen algunos centros claros, pero en general es bastante participativo Llamaremos a su forma como “orgánica”“, no en el sentido del sindicato, que implica obediencia a la estructura y decisiones colectivas, sino en el sentido de las redes sociales digitales, que implica formación de algo a partir de cadenas horizontales de interacciones.
En esta comunidad tienen mayor presencia usuarios de Twitter que no son políticos ni activistas, sino principalmente cuentas dedicadas a difundir memes textuales, historias y algunos blogueros. Muchos de ellos incluso actúan a partir de un avatar, mostrando la fuerza de la anonimidad en Internet. Para evitar connotaciones de tinte político o activista, los llamaremos “civiles”.
library(readr)
library(dplyr)
library(magrittr)
centrales <- read_csv("centrales.csv")
filter(centrales, Comunidad == "A") %>%
knitr::kable()
A |
Dexanfetamina |
267 |
250 |
517 |
A |
ciudadano_scz |
52 |
200 |
252 |
A |
alebalcazar |
219 |
23 |
242 |
A |
cristhianj1992 |
180 |
3 |
183 |
A |
carmen_jul_ |
15 |
115 |
130 |
A |
angelcaido666x |
80 |
50 |
130 |
A |
leonardortn |
124 |
0 |
124 |
A |
carlos_olivera |
110 |
0 |
110 |
A |
UCruceno |
88 |
2 |
90 |
A |
Jonatangl |
74 |
9 |
83 |
Así, esta es una comunidad de opinión orgánica y civil. Al revisar sus tweets se puede observar que su motivación al implicarse con hashtag parece principalmente lúdica.
B. Comunidad de opinión activista oficialista
La segunda comunidad que emergió fue de activistas oficialistas y algunas cuentas del gobierno. Su forma es similar a la anterior comunidad, sin embargo como ellos no originaron el mene, es más bien una comunidad con múltiples centros, esto es, descentralizada.
No son necesariamente funcionarios, su comportamiento parece más bien de activistas, en este caso progobierno.
filter(centrales, Comunidad == "B") %>%
knitr::kable()
B |
Axel1Ray1 |
350 |
161 |
511 |
B |
Calderory |
231 |
51 |
282 |
B |
tritigrehernan |
93 |
66 |
159 |
B |
llamerosolo |
83 |
56 |
139 |
B |
Bol_vamosbien |
86 |
14 |
100 |
B |
TOJPA |
42 |
39 |
81 |
B |
axraythel |
64 |
16 |
80 |
B |
FranklinTerraz2 |
4 |
75 |
79 |
B |
guialbar |
0 |
74 |
74 |
B |
AdrianaVerito20 |
0 |
68 |
68 |
Esta es una comunidad de opinión descentralizada de activistas oficialistas. Los posts muestran su interés en defender la imagen de Evo Morales. Su motivación parece ser táctica.
C. Comunidad de opinión activista opositora
La tercera comunidad tiene una forma similar a la anterior, una forma descentralizada e interactiva.
Los actores principales aquí son activistas y personajes críticos al gobierno, e incluso algunas cuentas con avatares. Diremos, por simpleza, que son de “oposición” no en el sentido de oposición política partidaria necesariamente, pero sí en un sentido de contraposición o crítica al oficialismo.
filter(centrales, Comunidad == "C") %>%
knitr::kable()
C |
asaoyvino |
398 |
30 |
428 |
C |
ciudadan0libre |
142 |
2 |
144 |
C |
FlokiBoliviano |
107 |
4 |
111 |
C |
danforever |
110 |
0 |
110 |
C |
RobertCarhlos |
89 |
0 |
89 |
C |
viviza3 |
88 |
0 |
88 |
C |
martindiazmeave |
77 |
4 |
81 |
C |
LetteLop |
59 |
18 |
77 |
C |
tupackatari51 |
62 |
10 |
72 |
C |
PabloEid |
62 |
6 |
68 |
Esta es una comunidad descentralizada de activismo opositor. Existe aquí una mezcla entre intereses tácticos y lúdicos. En el grafo dinámico que veremos más adelante, veremos que es una de las comunidades que más conversación generó con otros grupos.
D. Comunidad de opinión gubernamental
La cuarta comunidad es la más sorpresiva en cuánto a su peculiar forma. Fue la que se desarrolló alrededor de @evoespueblo. Es una comunidad extremadamente centralizada y dispersa entre sí.
Entre los miembros existen algunos usuarios críticos que mencionan a @evoespueblo, pero la mayoría son usuarios de apoyo de cuentas internacionales o nacionales. Queda por confirmar si son cuentas de apoyo espontaneo, planificado, pagado o simplemente bots, pues la estructura de interacción aquí es bastante peculiar.
filter(centrales, Comunidad == "D") %>%
knitr::kable()
D |
evoespueblo |
2084 |
0 |
2084 |
D |
PorSu_Nombre |
0 |
6 |
6 |
D |
2011Martina |
0 |
5 |
5 |
D |
yuriyaguana |
0 |
5 |
5 |
D |
Hector04748898 |
0 |
4 |
4 |
D |
efrain7272 |
0 |
4 |
4 |
D |
NievaEchii |
0 |
4 |
4 |
D |
Bachmir |
0 |
4 |
4 |
D |
marianapbo82 |
0 |
4 |
4 |
D |
Cristin02226447 |
0 |
3 |
3 |
Esta es una comunidad centralizada alrededor de una cuenta gubernamental En el grafo dinámico se verá que esta comunidad tiene una fuerte relación con la comunidad B, aunque no comparten la misma lógica.
E. Comunidad de opinión con medios
Por ultimo, la quinta comunidad si bien también es descentralizada, poseen centros nodales más grandes de lo hasta ahora visto.
Incorpora principalmente la presencia de tweets de medios sobre las noticias del hashtag. Aunque también hay la presencia de otros civiles, avatares y rezagados.
filter(centrales, Comunidad == "E") %>%
knitr::kable()
E |
a_luismamanito |
4 |
86 |
90 |
E |
diarioeldeber |
68 |
0 |
68 |
E |
noticiasfides |
63 |
0 |
63 |
E |
nuklive |
58 |
5 |
63 |
E |
LeonardoPrado83 |
24 |
4 |
28 |
E |
luisca_sl |
7 |
20 |
27 |
E |
thestreetsays |
24 |
1 |
25 |
E |
LaRazon_Bolivia |
24 |
0 |
24 |
E |
LosTiemposBol |
23 |
0 |
23 |
E |
tazisupay |
14 |
5 |
19 |
Es una comunidad descentralizada con medios como los principales hubs de información.
Comparación
¿Qué similitudes y diferencias Tienen las comunidades de opinión que identificamos?
La comunidad civil es la segunda más grande, ocupando el 16,92% del grafo entero. También posee uno de las densidades más altas, lo cual muestra su vigor, como una comunidad verdaderamente orgánica. Las comunidades de activistas, tanto del oficialismo y la oposición tiene lógicas comunicativas similares, aunque la oficialista crea más lazos hacia adentro que hacia afuera. La comunidad con medios es la más pequeña y tardía, con hubs visibles que consumen la participación. Finalmente, el porcentaje más grande del grafo entero lo ocupa la comunidad gubernamental con el 44,51%, pero con la densidad más baja por mucho, al no existir ni siquiera mucha comunicación entre los mismos interlocutores, recordando a un lógica de comunicación al éstilo del broadcasting.
comp <- read_csv2("comp.csv")
comp %>% knitr::kable()
A |
Civil |
Orgánica |
393 |
1048 |
16.92 |
0.007 |
B |
Activista oficialista |
Descentralizada |
243 |
1335 |
10.46 |
0.023 |
C |
Activista opositora |
Descentralizada |
365 |
742 |
15.71 |
0.006 |
D |
Gubernamental oficialista |
Centralizada |
1034 |
1045 |
44.51 |
0.001 |
E |
Medios |
Descentralizada |
162 |
201 |
6.97 |
0.008 |
F |
Otros |
NA |
126 |
1853 |
5.43 |
NA |
Generamos un grafo dinámico en el que podemos ver esas tendencias y otras:
Para una exploración más minuciosa:
hemos creado una versión interactiva del grafo que puede ser visualizada aquí.
Conclusiones
El hashtag #RayoEvolizador fue fugaz, como suelen ser los memes y los fenómenos virales en Internet. Hoy ya no parece importante y los usuarios de las redes parecen estar siguiendo y generando otras tendencias, en la lógica dinámica del prosumidor. Sin embargo, este tipo de fenómenos sociodigitales dejan huellas impresas en la Web, como pudimos visualizar aquí, las cuáles nos sirven para la comprensión de las dinámicas de opinión en redes sociales, siendo que su estudio en nuestro país aún es escaso y con métodos rústicos.
En este caso, la dinámica concreta fue la siguiente. Una comunidad civil que buscaba principalmente el humor crea el hashtag, ante lo cual aparecen dos comunidades activistas para tácticamente, desde una lucha de interacción de redes llevar el hashtag a sus horizontes. En eso interviene la cuenta del presidente @evoespueblo para sentar su presencia, teniendo un fuerte apoyo, en primer lugar, de individuos inconexos y, en segundo lugar, del activismo oficialista. Después de esos encuentros, vienen algunos rezagados, incluyendo la prensa. Es decir que lo que más dinamizó el hashtag fue aquella comunidad orgánica original, para que luego fuera abordadas por una lógica de activismo en red y otra lógica centralizada gubernamental.
Si bien este es un caso concreto, puede ilustrar otras dinámicas de generación de opinión pública en las redes, principalmente las más sutiles que sólo pueden ser apreciadas a partir una mirada panorámica. Lo cual incluye la ahora denominada “guerra digital” que el gobierno ha convocado (Los Tiempos 04/02/2018).
Bibliografía
Ingold, Tim (2015). Lineas: Una breve historia. Barcelona: Gedisa.
Los Tiempos (04/02/2018). “Evo insta a organizaciones a preparase para una ‘guerra digital’ en redes sociales”.
Ojeda, Alex (2015). “Introducción al Análisis de Redes Sociales”. Texto de la materia electiva “Análisis de Redes Sociales I” de la Carrera de Sociología, Facultad de Ciencias Sociales - UMSS.
Rogers, Richard (2013). Digital Methods. MIT Press.
Vickery, Jacqueline (2015). “Memes in digital culture”. En: Information, Communication & Society, 18:12, 1450-1451, DOI: 10.1080/1369118X.2014.979217
Herramientas digitales
- R
- SocialMediaLab
- iGraph
- Gephi
- Sigma.js
Sobre el autor
Alex Ojeda Copa es sociólogo digital y analista de redes sociales. Otros proyectos en los que está trabajando pueden verse en su portafolio. También pueden contactarlo en Twitter, LinkedIn y Academia.edu.
Notas
LS0tCnRpdGxlOiAiQ29tdW5pZGFkZXMgZGUgb3BpbmnDs24gYWxyZWRlZG9yIGRlbCBoYXNodGFnICNSYXlvRXZvbGl6YWRvciBlbiBUd2l0dGVyIgphdXRob3I6ICJBbGV4IE9qZWRhIENvcGEiCmRhdGU6ICIwNy8wMy8yMDE4IgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6CiAgICAgIHRoZW1lOiBjb3NtbwogICAgICB0b2M6IHRydWUKICAgICAgdG9jX2Zsb2F0OiB0cnVlCi0tLQoKIyMgSW50cm9kdWNjacOzbgoKTG9zIGhhc2h0YWdzIHNvbiBvYmpldG9zIGRpZ2l0YWxlcyAibmF0aXZvcyIgKFJvZ2VycyAyMDEzKS4gU2kgYmllbiBoYXkgb2JqZXRvcyBlbiBlbCBtdW5kbyBkaWdpdGFsIHF1ZSB0aWVuZW4gdW4gcGFyYWxlbG8gZW4gbGEgdmlkYSBvZmZsaW5lLCBjb21vIGVsIHRleHRvIHkgbGEgaW1hZ2VuLCBxdWUgcHJlZXhpc3TDrWFuIGEgbGEgZGlnaXRhbGl6YWNpw7NuLCBleGlzdGVuIG90cm9zIG9iamV0b3MgcXVlIG5hY2VuIGNvbiBsYSBXZWIuIEVsIGhhc2h0YWcgZXMgdW4gZGVzYXJyb2xsbyBwYXJ0aWN1bGFyIGRlbCBoaXBlcmVubGFjZSwgdW4gY2VudHJvIGRlIGNvbnZlcmdlbmNpYSB0ZW3DoXRpY28gZW50cmUgbG9zIG3Dumx0aXBsZXMgaGlsb3MgZGUgbGEgV2ViLCB1biBoaXBlcmVzcGFjaW8gZG9uZGUgY29udmVyZ2VuIGFsZ3VuYXMgZGUgZXNhcyAqbGluZWFzKiBkZSB2aWRhIGRlIGxhcyBxdWUgbm9zIGhhYmxhYmEgSW5nb2xkICgyMDE1KS4KCkVuIG51ZXN0cm8gcGHDrXMgZWwgdXNvIGRlIGhhc2h0YWdzIG5vIHBhcmVjZSB0YW4gZXh0ZW5kaWRvIGNvbW8gZW4gb3RyYXMgbGF0aXR1ZGVzLiBTaW4gZW1iYXJnbywgZW4gZWwgdWx0aW1vIHRpZW1wbyBzZSBoYSB2aXN0byBlbCB1c28gcmVsYXRpdmFtZW50ZSBtYXNpdm8gZGUgdmFyaW9zIGRlIGVsbG9zLCBjb21vIHVuIGFncmVnYWRvciBkZSBzZW50aWRvcywgZGVtYW5kYXMgeSBhY3RpdmlkYWRlcywgcHJpbmNpcGFsbWVudGUgcG9yIGdydXBvcyBhY3RpdmlzdGFzOyBwb3IgZWplbXBsbywgI1RpcG5pc0VuUmVzaXN0ZW5jaWEsICNNZWpvckludGVybmV0WWEsICNOaVVuYU1lbm9zLCB5IHJlY2llbnRlbWVudGUgI0JvbGl2aWFEaWpvTm8sICMyMUZEaWFEZUxhTWVudGlyYSB5ICNQYXJvMjFGLiBFbCB1c28gZGUgaGFzaHRhZ3MgdGllbmUgY2xhcmFzIHZlbnRhamFzIHBhcmEgbG9zIHVzdWFyaW9zLCBwZXJvIHRhbWJpw6luIHBhcmEgbG9zIGFuYWxpc3RhcyBkZSByZWRlcyBzb2NpYWxlcyBxdWUgY29uc3RhbnRlbWVudGUgdGllbmVuIHF1ZSBuYXVmcmFnYXIgZW4gY2FudGlkYWRlcyBlbm9ybWVzIGRlIGRhdG9zIHkgY29udmVyc2FjaW9uZXMgY2HDs3RpY2FzIGRpc3BlcnNhcyBlbiBkaXZlcnNvcyBlc3BhY2lvcy4gQXF1w60gZWwgaGFzaHRhZyBmdW5jaW9uYSBjb21vIHVuIGFncmVnYWRvciBkZSBvcGluacOzbiBww7pibGljYS4gCgpMYSBwYXNhZGEgc2VtYW5hIG5hY2nDsyB1bmEgdGVuZGVuY2lhIGVuIGxhcyByZWRlcyBxdWUgdGVuw61hIGNvbW8gZWplIGNlbnRyYWwgbGEgZmlndXJhIGRlbCBwcmVzaWRlbnRlIEV2byBNb3JhbGVzLiBFbCBoYXNodGFnICNSYXlvRXZvbGl6YWRvciBuYWNpw7MgZW4gVHdpdHRlciwgY29tbyB1biByZW1peCBkZSBvdHJvcyBoYXNodGFncyBzaW1pbGFyZXMgZW4gb3Ryb3MgcGHDrXNlcywgeSByw6FwaWRhbWVudGUgc2UgZXhwYW5kacOzIGEgb3RyYXMgcGxhdGFmb3JtYXMuIEVsIGNlbnRybyBzb24gbG9zIG1lbWVzIHF1ZSBzb24gcGFydGUgImRlbCByZW1peCB5IGxhIGN1bHR1cmEgcGFydGljaXBhdGl2YSBlbiBsYSBxdWUgbG9zIHVzdWFyaW9zIGFncmVnYW4sIGFwcm9waWFuLCBpbWl0YW4sIHBhcm9kaWFuLCByZW1lemNsYW4sIGVkaXRvcmlhbGl6YW4geSB0cmFuc2Zvcm1hbiBlbCBjb250ZW5pZG8gb3JpZ2luYWwgZGUgYWxndW5hIG1hbmVyYSIgKFZpY2VyeSAyMDE1OiAxNDUwKSBQZXJvIGFkZW3DoXMgbG9zIG1lbWVzIGRlICNSYXlvRXZvbGl6YWRvciBtw6FzIGFsbMOhIGRlbCBjb250ZW5pZG8gdmlzdWFsLCBwb3J0YW4gdGV4dG9zLCB1c3VhcmlvcywgZ3J1cG9zLCBvcGluaW9uZXMsIGNvbnRyYW9waW5pb25lcywgYW50YWdvbmlzbW9zLCBwdWxzaW9uZXMgeSB0w6FjdGljYXMuCgpTaSBiaWVuIHBhcmVjZSBzaW1wbGVtZW50ZSB1biBoYXNodGFnIGRlICJvY2lvIiwgZW4gcmVhbGlkYWQgZXMgdW4gaGFzaHRhZyBwb2zDrXRpY2FtZW50ZSByZWxldmFudGUgcG9yIGxhcyBzaWd1aWVudGVzIHJhem9uZXMuIFByaW1lcm8gdGllbmUgY29tbyBjZW50cm8gdGVtw6F0aWNvIGEgbGEgaW1hZ2VuIGRlbCBwcmVzaWRlbnRlIGRlbCBwYcOtcy4gU2VndW5kbyBlcyB1bmEgbXVlc3RyYSBhY290YWRhIGRlIHVuYSBudWV2YSBmb3JtYSBkZSBnZW5lcmFyIG9waW5pw7NuIHDDumJsaWNhIGVuIGxhcyByZWRlczogbGEgZGUgbGEgc8OhdGlyYSBwb2zDrXRpY2EgZW4gcmVkLCB1bmEgY29tYmluYWNpw7NuIGRlIGh1bW9yIHkgY3LDrXRpY2EuIFkgdGVyY2VybywgZW4gZXN0ZSBoYXNodGFnIGhhbiBjb25mbHVpZG8gZG9zIGRpbsOhbWljYXMgZGlzdGludGFzLCBsYSBkaW7DoW1pY2EgY2l2aWwgZXNwb250YW5lYSB5IGxhIGRpbsOhbWljYSBwb2zDrXRpY2EgcGxhbmlmaWNhZGEsIGxhIHByaW1lcmEgbcOhcyBwYXJ0aWNpcGF0aXZhIHkgY2HDs3RpY2EgeSBsYSBzZWd1bmRhIG3DoXMgY2VudHJhbGl6YWRhIHkgcGxhbmlmaWNhZGEuCgpFbCBvYmpldGl2byBkZSBlc3RlIGFydMOtY3VsbyBlcyBlbCBkZSBhbmFsaXphciBsYXMgZGluw6FtaWNhcyBlc3RydWN0dXJhbGVzIGRlIG9waW5pw7NuIGVuIHRvcm5vIGFsIGhhc2h0YWcgI1JheW9Fdm9saXphZG9yIGVuIFR3aXR0ZXIuIFBvciBkaW7DoW1pY2EgZXN0cnVjdHVyYWwgZW50ZW5kZW1vcyBlbCBjb25qdW50byBkZSBwYXRyb25lcyBkZSByZWRlcyBkZSBjb211bmljYWNpw7NuLCB5IG5vIGFzw60gbGFzIGRpbsOhbWljYXMgZGUgY29udGVuaWRvIHF1ZSBkZWphbW9zIHBhcmEgb3RybyBlc3R1ZGlvLiBQYXJhIGVsbG8gdXRpbGl6YXJlbW9zIHByaW5jaXBhbG1lbnRlIHTDqWNuaWNhcyBkZWwgKlNvY2lhbCBOZXR3b3JrIEFuYWx5c2lzKiAoU05BKSwgcGFydGljdWxhcm1lbnRlIGxvcyBhbGdvcml0bW9zIGRlIGRldGVjY2nDs24gZGUgY29tdW5pZGFkZXNbXjFdLCB0YW1iacOpbiBsbGFtYWRvcyBtw7NkdWxvcywgeSBhbGd1bmFzIG1lZGlkYXMgZGUgY2VudHJhbGlkYWQgbm9kYWwuIEVsICpBbsOhbGlzaXMgZGUgUmVkZXMgU29jaWFsZXMqIGVzICJ1biBtw6l0b2RvIGVzdHJ1Y3R1cmFsLXJlbGFjaW9uYWwsIGZvcm1hbCB5IGN1YW50aXRhdGl2byBxdWUgc2UgaW50ZXJlc2EgcG9yIGxvcyBwYXRyb25lcyBkZSBpbnRlcmFjY2lvbmVzIGVudHJlIGxvcyBhY3RvcmVzIiAoT2plZGEgMjAxNTogMTcpLiBFc3RlIG3DqXRvZG8gbm9zIHBlcm1pdGlyw6EgaWRlbnRpZmljYXIgYWxndW5vcyBwYXRyb25lcyByZWxldmFudGVzIGVuIGxhcyBkaW7DoW1pY2FzIGRlIGFncnVwYWNpw7NuIHkgb3BpbmnDs24gcXVlIGRlIG90cm8gbW9kbyBubyBzZXLDrWFuIHZpc2libGVzIG1lZGlhbnRlLCBwb3IgZWplbXBsbywgbGEgZXRub2dyYWbDrWEgbyBsYSBlc3RhZMOtc3RpY2EgdHJhZGljaW9uYWwuIAoKIyMgUmVjb2xlY2Npw7NuIGRlIGRhdG9zCgpIZW1vcyByZWNvbGVjdGFkbyB0b2RvcyBsb3MgdHdlZXRzIHF1ZSBjb250aWVuZW4gZWwgaGFzaHRhZyAjUmF5b0V2b2xpemFkb3IsIGRlc2RlIHN1IGNyZWFjacOzbiBlbCAyOCBkZSBmZWJyZXJvIGRlIDIwMTggaGFzdGEgZWwgNSBkZSBtYXJ6byBkZSAyMDE4IChjZW5zbyksIG1lZGlhbnRlIGVsIHBhcXVldGUgYFNvY2lhbE1lZGlhTGFiYDoKCmBgYHtyIGV2YWw9RkFMU0V9CmxpYnJhcnkoU29jaWFsTWVkaWFMYWIpCmxpYnJhcnkobWFncml0dHIpCgojIEF1dGVudGljYWNpw7NuIHkgcmVjb2xlY2Npw7NuIGRlIGRhdG9zCnJheW8gPC0gQXV0aGVudGljYXRlKCJ0d2l0dGVyIiwgYXBpS2V5ID0gIiIsIGFwaVNlY3JldD0iIiwgYWNjZXNzVG9rZW49IiIsIGFjY2Vzc1Rva2VuU2VjcmV0PSIiKSAlPiUgQ29sbGVjdChzZWFyY2hUZXJtPSIjcmF5b2V2b2xpemFkb3IiLCBudW1Ud2VldHM9MTUwMCwgdmVyYm9zZT1UUlVFLCBtYXhJRCA9ICI5NjczOTU0ODg1MjQ3OTU5MDQiKSAKYGBgCgpBIHBhcnRpciBkZSB2YXJpYXMgaXRlcmFjaW9uZXMsIGNvbnNlZ3VpbW9zIHVuIGRhdGFzZXQgZGUgNjIxOCB0d2VldHM6CgpgYGB7cn0KcmF5bwpgYGAKCkRhZG8gcXVlIG5vcyBjb25jZW50cmFyZW1vcyBlbiBsYXMgZm9ybWFzIGRlIGNvbnZlcnNhY2nDs24sIGRlIG1vbWVudG8gbm8gbm9zIGludGVyZXNhIGVsIGNvbnRlbmlkbyBkZSBsYSB2YXJpYWJsZSAqdGV4dCosIHBvciBsbyBxdWUgc29sbyB1dGlsaXphcmVtb3MgbGFzIHNpZ3VpZW50ZXMgdmFyaWFibGVzOiAqZnJvbV91c2VyKiwgKnJlcGx5X3RvKiB5ICp1c2Vyc19tZW50aW9uZWQqLiBBIHBhcnRpciBkZSBlbGxhcyBjcmVhcmVtb3MgdW5hICpyZWQgZGUgYWN0b3JlcyogZG9uZGUgbG9zICpub2RvcyogcmVwcmVzZW50YW4gdXN1YXJpb3MgZGUgVHdpdHRlciBxdWUgcGFydGljaXBhcm9uIGVuIGVsIGhhc2h0YWcgeSBsYXMgKmFyaXN0YXMqIHJlcHJlc2VudGFuIHVuYSBtZW5jacOzbiwgcsOpcGxpY2EgbyByZXR3ZWV0IGRlIHVuIHVzdWFyaW8gJGkkIGhhY2lhIHVuIHVzdWFyaW8gJGokIGRhZG8gdW4gdHdlZXQgJGskLgoKYGBge3IgZXZhbD1GQUxTRX0KbGlicmFyeShpZ3JhcGgpCgojIENyZWFtb3MgbGEgcmVkIGVuIHVuYSBlc3RydWN0dXJhIGRlIGRhdG9zIGFwcm9waWFkYSAoY2xhc2U6IGlncmFwaCkKcmF5b2FjdG9yIDwtIHJheW8gJT4lIENyZWF0ZSgiYWN0b3IiKSAKYGBgCgpHdWFyZGFtb3MgbG9zIGRhdG9zIGVuIGZvcm1hdG8gR3JhcGhNTCBwYXJhIGx1ZWdvIG1lZGlybG8geSB2aXN1YWxpemFybG8gZW4gR2VwaGkuCgpgYGB7ciBldmFsPUZBTFNFfQp3cml0ZS5ncmFwaChyYXlvYWN0b3IsICJyYXlvYWN0b3IuZ3JhcGhtbCIsICJncmFwaG1sIikKYGBgCgojIyBSZXN1bHRhZG9zCgojIyMgRnJlY3VlbmNpYSBkZSBsb3MgdHdlZXRzIHkgb3JpZ2VuIGRlbCBoYXNodGFnCgpUb2RvcyBsb3MgZmVuw7NtZW5vcyB2aXJhbGVzIHRpZW5lbiB1biBvcmlnZW4sIHVuYSBkaWZ1c2nDs24geSB1biBkZWNhaW1pZW50bywgc2lndWllbmRvIGxhIGNhdGVnb3JpemFjacOzbiBkZSBbS25vd1lvdXJNZW1lXShodHRwOi8va25vd3lvdXJtZW1lLmNvbS8pLiBQYXJhIGVsIGNhc28gZGUgI1JheW9Fdm9saXphZG9yLCBtb3N0cmFtb3MgYSBjb250aW51YWNpw7NuIGVzYSBkaW7DoW1pY2EgZGUgdHdlZXRzIGVuIGVsIHRpZW1wbzoKCmBgYHtyIGZpZy53aWR0aCA9IDE1fQpsaWJyYXJ5KHJ0d2VldCkKbGlicmFyeShnZ3Bsb3QyKQp0c19wbG90KHJheW8sICJob3VycyIpICsKICAgIHRoZW1lX21pbmltYWwoKSArCiAgICBzY2FsZV94X2RhdGV0aW1lKGRhdGVfYnJlYWtzID0gIjEgZGF5IiwgZGF0ZV9sYWJlbCA9ICIlbS0lZCIpICsKICAgIGxhYnMoeCA9ICJUaWVtcG8iLCB5ID0gIk7Dum1lcm8gZGUgdHdlZXRzIiwKICAgIHRpdGxlID0gIkZpZ3VyYSAxLiBGcmVjdWVuY2lhIGRlIHR3ZWV0cyBzb2JyZSAjUmF5b0V2b2xpemFkb3IiLAogICAgc3VidGl0bGUgPSAiIiwKICAgIGNhcHRpb24gPSAiRnVlbnRlOiBFbGFib3JhY2nDs24gcHJvcGlhIGEgcGFydGlyIGRlIGRhdG9zIHJlY29sZWN0YWRvcyBkZSBsYSBBUEkgZGUgVHdpdHRlciIKICApCmBgYAoKRWwgcGljbyBtw6FzIGFsdG8gZGUgcHJvZHVjY2nDs24gZGUgbWVuc2FqZXMgc2UgZGEgZWwgZMOtYSBkZSBjcmVhY2nDs24gZGVsIGhhc2h0YWcsIGVsIDI4IGRlIGZlYnJlcm8uIEF1bnF1ZSBoYXkgdW4gY2llcnRvIHJlbW9udGUgZWwgMiBkZSBtYXJ6byBkZXNwdcOpcyBkZSBxdWUgQGV2b2VzcHVlYmxvIHkgbGEgcHJlbnNhIGxlIHByZXN0YW4gYXRlbmNpw7NuIGFsIGhhc2h0YWcuIAoKTGEgcHJpbWVyYSBjb211bmlkYWQgZW4gYXBhcmVjZXIgZWwgMjggZGUgZmVicmVybyBlcyBsYSBxdWUgc3VyZ2UgYWxyZWRlZG9yIGRlbCBwcmltZXIgdHdlZXQgZGVsIHVzdWFyaW8gQGRleGFuZmV0YW1pbmEsIHVuIHVzdWFyaW8gY3J1Y2XDsW8uIEVzdGEgY29tdW5pZGFkIGV2b2x1Y2lvbmFyw6EgcGFyYSBzZXIgbGEgY29tdW5pZGFkIG3DoXMgZ3JhbmRlIHkgYWN0aXZhIHBvc3Rlcmlvcm1lbnRlLCBzb2xvIG9wYWNhZGEgZW4gbnVtZXJvLCBwZXJvIG5vIGVuIGRlbnNpZGFkLCBwb3IgbGEgZGUgQGV2b2VzcHVlYmxvLiAKCiFbRmlndXJhIDIuIE9yaWdlbiBkZWwgaGFzaHRhZ1xsYWJlbF0oaW1nL2NvbTEuanBnKXsgd2lkdGg9NzAlIH0KCiMjIyBFbCBncmFmbyBlbnRlcm8KCkFudGVzIGRlIGlyIGEgbGFzIGNvbXVuaWRhZGVzLCB2aXN1YWxpemFyZW1vcyBwcmltZXJvIGVsIHBhbm9yYW1hIGdlbmVyYWwgZGUgbGEgcmVkIGVudGVyYSBkZWwgaGFzaHRhZy4gTG9zIHBhcsOhbWV0cm9zIGRlIGxhIHZpc3VhbGl6YWNpw7NuIHF1ZSBhZG9wdGFtb3Mgc29uIGxvcyBzaWd1aWVudGVzOgoKIFBhcsOhbWV0cm8gICAgICB8IFZhbG9yICAgICAgICAgICAgICAgIHwgCnwgLS0tLS0tLS0tLS0tLSB8Oi0tLS0tLS0tLS0tLS0tLS0tLS0tOnwgCnwgVGlwbyBkZSBncmFmbyB8IERpcmlnaWRvIHkgcG9uZGVyYWRvIHwgCnwgTm9kb3MgICAgICAgICB8IDIzNTMgICAgICAgICAgICAgICAgIHwgICAKfCBBcmlzdGFzICAgICAgIHwgNjIyNCAgICAgICAgICAgICAgICAgfCAgCnwgQWxnb3JpdG1vIGRlIGRpc3Bvc2ljacOzbiB8IFlpZmFuIEh1ICB8CnwgVGFtYcOxbyBkZSBub2RvcyB8IEVuIGZ1bmNpw7NuIGFsIGNhbGN1bG8gZGVsIGdyYWRvIHBvbmRlcmFkbyB8CnwgQ29sb3IgZGUgbm9kb3MgfCBFbiBmdW5jacOzbiBhbCBjYWxjdWxvIGRlIG1vZHVsYXJpZGFkW14yXSB8CgpFbiBlc3RlIGNhc28sIGRlYmlkbyBhIGxhIGdyYW4gY2FudGlkYWQgZGUgbm9kb3MsIGhlbW9zIG9wdGFkbyBlbiBwcmluY2lwaW8gcG9yIG5vIHZpc3VhbGl6YXIgdG9kYXMgc3VzIGV0aXF1ZXRhcy4gU8OzbG8gbW9zdHJhbW9zIGxhcyBldGlxdWV0YXMgcGFyYSBsb3Mgbm9kb3MgcXVlIHRpZW5lbiB1biBncmFkbyBtYXlvciBhIDUwLCBwb3IgbG8gcXVlIHNlIHB1ZWRlbiBvYnNlcnZhciBsb3MgYWN0b3JlcyBtw6FzIGNlbnRyYWxlcyBlbiBjYWRhIGNvbXVuaWRhZDoKCiFbRmlndXJhIDMuIEdyYWZvIGVudGVybyBkZSAjUmF5b0V2b2xpemFkb3JcbGFiZWxdKGltZy9yZWRlbnRlcmEuanBnKQoKQSBwcmltZXJhIHZpc3RhIHNlIHB1ZWRlIHZlciBlbiBlbCBncmFmbyBlbnRlcm8gZG9zIGNhbXBvcy4gRWwgZGUgbGEgZGVyZWNoYSBkb25kZSBzZSB2ZSB1bmEgaW50ZXJhY2Npw7NuIG3DoXMgZGVuc2EgeSBjYcOzdGljYSBlbnRyZSB2YXJpYXMgY29tdW5pZGFkZXMgeSBlbCBkZSBsYSBpenF1aWVyZGEgZG9uZGUgZXhpc3RlIHVuIGNpcmN1bG8gY2VycmFkbyBvIGJ1cmJ1amEgZGUgY29udmVyc2FjacOzbiBhbHJlZGVkb3IgZGVsIG5vZG8gY2VudHJhbCBxdWUgZXMgQGV2b2VzcHVlYmxvLiAKCkxhIEZpZ3VyYSAzIG11ZXN0cmEgdW4gKnNuYXBzaG90KiBkZWwgdG90YWwgZGUgbm9kb3MgZSBpbnRlcmFjY2lvbmVzIHF1ZSBwYXJ0aWNpcGFyb24gZW4gZWwgaGFzaHRhZywgcGVybyBhaG9yYSBuZWNlc2l0YW1vcyB1bmEgYW7DoWxpc2lzIGRpYWNyw7NuaWNvLiBBIGNvbnRpbnVhY2nDs24gdmVyZW1vcyBsYXMgY29tdW5pZGFkZXMgZW4gb3JkZW4gZGUgYXBhcmljacOzbiwgcXVlIG5vcyBwZXJtaXRlbiBkZWR1Y2lyIHN1IGRpbsOhbWljYSBjb211bmljYXRpdmEuIAoKIyMjIEEuIENvbXVuaWRhZCBkZSBvcGluacOzbiBjaXZpbCAKCkxhIGNvbXVuaWRhZCBxdWUgb3JpZ2luw7MgZWwgaGFzaHRhZyBjcmVjacOzIGNvbiBlbCB0aWVtcG8uIEVuIGxhIGZvcm1hIGRlIHN1cyBpbnRlcmFjY2lvbmVzLCB2ZW1vcyBxdWUgZXhpc3RlbiBhbGd1bm9zIGNlbnRyb3MgY2xhcm9zLCBwZXJvIGVuIGdlbmVyYWwgZXMgYmFzdGFudGUgcGFydGljaXBhdGl2byBMbGFtYXJlbW9zIGEgc3UgZm9ybWEgY29tbyAib3Jnw6FuaWNhIiIsIG5vIGVuIGVsIHNlbnRpZG8gZGVsIHNpbmRpY2F0bywgcXVlIGltcGxpY2Egb2JlZGllbmNpYSBhIGxhIGVzdHJ1Y3R1cmEgeSBkZWNpc2lvbmVzIGNvbGVjdGl2YXMsIHNpbm8gZW4gZWwgc2VudGlkbyBkZSBsYXMgcmVkZXMgc29jaWFsZXMgZGlnaXRhbGVzLCBxdWUgaW1wbGljYSBmb3JtYWNpw7NuIGRlIGFsZ28gYSBwYXJ0aXIgZGUgY2FkZW5hcyBob3Jpem9udGFsZXMgZGUgaW50ZXJhY2Npb25lcy4KCiFbRmlndXJhIDQuIEdyYWZvIGRlIGxhIGNvbXVuaWRhZCBkZSBvcGluacOzbiBjaXZpbF0oaW1nL2NvbTFmdWxsLmpwZykKCkVuIGVzdGEgY29tdW5pZGFkIHRpZW5lbiBtYXlvciBwcmVzZW5jaWEgdXN1YXJpb3MgZGUgVHdpdHRlciBxdWUgbm8gc29uIHBvbMOtdGljb3MgbmkgYWN0aXZpc3Rhcywgc2lubyBwcmluY2lwYWxtZW50ZSBjdWVudGFzIGRlZGljYWRhcyBhIGRpZnVuZGlyIG1lbWVzIHRleHR1YWxlcywgaGlzdG9yaWFzIHkgYWxndW5vcyBibG9ndWVyb3MuIE11Y2hvcyBkZSBlbGxvcyBpbmNsdXNvIGFjdMO6YW4gYSBwYXJ0aXIgZGUgdW4gYXZhdGFyLCBtb3N0cmFuZG8gbGEgZnVlcnphIGRlIGxhIGFub25pbWlkYWQgZW4gSW50ZXJuZXQuIFBhcmEgZXZpdGFyIGNvbm5vdGFjaW9uZXMgZGUgdGludGUgcG9sw610aWNvIG8gYWN0aXZpc3RhLCBsb3MgbGxhbWFyZW1vcyAiY2l2aWxlcyIuCgpgYGB7ciBtZXNzYWdlID0gRkFMU0V9CmxpYnJhcnkocmVhZHIpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkobWFncml0dHIpCmNlbnRyYWxlcyA8LSByZWFkX2NzdigiY2VudHJhbGVzLmNzdiIpCmZpbHRlcihjZW50cmFsZXMsIENvbXVuaWRhZCA9PSAiQSIpICU+JSAKICBrbml0cjo6a2FibGUoKQpgYGAKCkFzw60sIGVzdGEgZXMgdW5hIGNvbXVuaWRhZCBkZSBvcGluacOzbiBvcmfDoW5pY2EgeSBjaXZpbC4gQWwgcmV2aXNhciBzdXMgdHdlZXRzIHNlIHB1ZWRlIG9ic2VydmFyIHF1ZSBzdSBtb3RpdmFjacOzbiBhbCBpbXBsaWNhcnNlIGNvbiBoYXNodGFnIHBhcmVjZSBwcmluY2lwYWxtZW50ZSBsw7pkaWNhLiAKCiMjIyBCLiBDb211bmlkYWQgZGUgb3BpbmnDs24gYWN0aXZpc3RhIG9maWNpYWxpc3RhIAoKTGEgc2VndW5kYSBjb211bmlkYWQgcXVlIGVtZXJnacOzIGZ1ZSBkZSBhY3RpdmlzdGFzIG9maWNpYWxpc3RhcyB5IGFsZ3VuYXMgY3VlbnRhcyBkZWwgZ29iaWVybm8uIFN1IGZvcm1hIGVzIHNpbWlsYXIgYSBsYSBhbnRlcmlvciBjb211bmlkYWQsIHNpbiBlbWJhcmdvIGNvbW8gZWxsb3Mgbm8gb3JpZ2luYXJvbiBlbCBtZW5lLCBlcyBtw6FzIGJpZW4gdW5hIGNvbXVuaWRhZCBjb24gbcO6bHRpcGxlcyBjZW50cm9zLCBlc3RvIGVzLCBkZXNjZW50cmFsaXphZGEuICAKCiFbRmlndXJhIDUuIEdyYWZvIGRlIGxhIGNvbXVuaWRhZCBkZSBvcGluacOzbiBvZmljaWFsaXN0YVxsYWJlbF0oaW1nL2NvbTJmdWxsLmpwZykKCk5vIHNvbiBuZWNlc2FyaWFtZW50ZSBmdW5jaW9uYXJpb3MsIHN1IGNvbXBvcnRhbWllbnRvIHBhcmVjZSBtw6FzIGJpZW4gZGUgYWN0aXZpc3RhcywgZW4gZXN0ZSBjYXNvIHByb2dvYmllcm5vLiAKCmBgYHtyfQpmaWx0ZXIoY2VudHJhbGVzLCBDb211bmlkYWQgPT0gIkIiKSAlPiUgCiAga25pdHI6OmthYmxlKCkKYGBgCgpFc3RhIGVzIHVuYSBjb211bmlkYWQgZGUgb3BpbmnDs24gZGVzY2VudHJhbGl6YWRhIGRlIGFjdGl2aXN0YXMgb2ZpY2lhbGlzdGFzLiBMb3MgcG9zdHMgbXVlc3RyYW4gc3UgaW50ZXLDqXMgZW4gZGVmZW5kZXIgbGEgaW1hZ2VuIGRlIEV2byBNb3JhbGVzLiBTdSBtb3RpdmFjacOzbiBwYXJlY2Ugc2VyIHTDoWN0aWNhLiAKCiMjIyBDLiBDb211bmlkYWQgZGUgb3BpbmnDs24gYWN0aXZpc3RhIG9wb3NpdG9yYSAKCkxhIHRlcmNlcmEgY29tdW5pZGFkIHRpZW5lIHVuYSBmb3JtYSBzaW1pbGFyIGEgbGEgYW50ZXJpb3IsIHVuYSBmb3JtYSBkZXNjZW50cmFsaXphZGEgZSBpbnRlcmFjdGl2YS4KCiFbRmlndXJhIDYuIEdyYWZvIGRlIGxhIGNvbXVuaWRhZCBkZSBvcGluacOzbiBhY3RpdmlzdGEgb3Bvc2l0b3JhXShpbWcvY29tM2Z1bGwuanBnKQpMb3MgYWN0b3JlcyBwcmluY2lwYWxlcyBhcXXDrSBzb24gYWN0aXZpc3RhcyB5IHBlcnNvbmFqZXMgY3LDrXRpY29zIGFsIGdvYmllcm5vLCBlIGluY2x1c28gYWxndW5hcyBjdWVudGFzIGNvbiBhdmF0YXJlcy4gRGlyZW1vcywgcG9yIHNpbXBsZXphLCBxdWUgc29uIGRlICJvcG9zaWNpw7NuIiBubyBlbiBlbCBzZW50aWRvIGRlIG9wb3NpY2nDs24gcG9sw610aWNhIHBhcnRpZGFyaWEgbmVjZXNhcmlhbWVudGUsIHBlcm8gc8OtIGVuIHVuIHNlbnRpZG8gZGUgY29udHJhcG9zaWNpw7NuIG8gY3LDrXRpY2EgYWwgb2ZpY2lhbGlzbW8uIAoKYGBge3J9CmZpbHRlcihjZW50cmFsZXMsIENvbXVuaWRhZCA9PSAiQyIpICU+JSAKICBrbml0cjo6a2FibGUoKQpgYGAKCkVzdGEgZXMgdW5hIGNvbXVuaWRhZCBkZXNjZW50cmFsaXphZGEgZGUgYWN0aXZpc21vIG9wb3NpdG9yLiBFeGlzdGUgYXF1w60gdW5hIG1lemNsYSBlbnRyZSBpbnRlcmVzZXMgdMOhY3RpY29zIHkgbMO6ZGljb3MuIEVuIGVsIGdyYWZvIGRpbsOhbWljbyBxdWUgdmVyZW1vcyBtw6FzIGFkZWxhbnRlLCB2ZXJlbW9zIHF1ZSBlcyB1bmEgZGUgbGFzIGNvbXVuaWRhZGVzIHF1ZSBtw6FzIGNvbnZlcnNhY2nDs24gZ2VuZXLDsyBjb24gb3Ryb3MgZ3J1cG9zLiAKCiMjIyBELiBDb211bmlkYWQgZGUgb3BpbmnDs24gZ3ViZXJuYW1lbnRhbCAKCkxhIGN1YXJ0YSBjb211bmlkYWQgZXMgbGEgbcOhcyBzb3JwcmVzaXZhIGVuIGN1w6FudG8gYSBzdSBwZWN1bGlhciBmb3JtYS4gRnVlIGxhIHF1ZSBzZSBkZXNhcnJvbGzDsyBhbHJlZGVkb3IgZGUgQGV2b2VzcHVlYmxvLiBFcyB1bmEgY29tdW5pZGFkIGV4dHJlbWFkYW1lbnRlIGNlbnRyYWxpemFkYSB5IGRpc3BlcnNhIGVudHJlIHPDrS4KCiFbRmlndXJhIDcuIEdyYWZvIGRlIGxhIGNvbXVuaWRhZCBvZmljaWFsaXN0YSBjZW50cmFsaXphZGEgXShpbWcvY29tNGZ1bGwuanBnKQoKRW50cmUgbG9zIG1pZW1icm9zIGV4aXN0ZW4gYWxndW5vcyB1c3VhcmlvcyBjcsOtdGljb3MgcXVlIG1lbmNpb25hbiBhIEBldm9lc3B1ZWJsbywgcGVybyBsYSBtYXlvcsOtYSBzb24gdXN1YXJpb3MgZGUgYXBveW8gZGUgY3VlbnRhcyBpbnRlcm5hY2lvbmFsZXMgbyBuYWNpb25hbGVzLiBRdWVkYSBwb3IgY29uZmlybWFyIHNpIHNvbiBjdWVudGFzIGRlIGFwb3lvIGVzcG9udGFuZW8sIHBsYW5pZmljYWRvLCBwYWdhZG8gbyBzaW1wbGVtZW50ZSBib3RzLCBwdWVzIGxhIGVzdHJ1Y3R1cmEgZGUgaW50ZXJhY2Npw7NuIGFxdcOtIGVzIGJhc3RhbnRlIHBlY3VsaWFyLiAKCmBgYHtyfQpmaWx0ZXIoY2VudHJhbGVzLCBDb211bmlkYWQgPT0gIkQiKSAlPiUgCiAga25pdHI6OmthYmxlKCkKYGBgCgpFc3RhIGVzIHVuYSBjb211bmlkYWQgY2VudHJhbGl6YWRhIGFscmVkZWRvciBkZSB1bmEgY3VlbnRhIGd1YmVybmFtZW50YWwgRW4gZWwgZ3JhZm8gZGluw6FtaWNvIHNlIHZlcsOhIHF1ZSBlc3RhIGNvbXVuaWRhZCB0aWVuZSB1bmEgZnVlcnRlIHJlbGFjacOzbiBjb24gbGEgY29tdW5pZGFkIEIsIGF1bnF1ZSBubyBjb21wYXJ0ZW4gbGEgbWlzbWEgbMOzZ2ljYS4gCgojIyMgRS4gQ29tdW5pZGFkIGRlIG9waW5pw7NuIGNvbiBtZWRpb3MKClBvciB1bHRpbW8sIGxhIHF1aW50YSBjb211bmlkYWQgc2kgYmllbiB0YW1iacOpbiBlcyBkZXNjZW50cmFsaXphZGEsIHBvc2VlbiBjZW50cm9zIG5vZGFsZXMgbcOhcyBncmFuZGVzIGRlIGxvIGhhc3RhIGFob3JhIHZpc3RvLgoKIVtGaWd1cmEgOC4gR3JhZm8gZGUgbGEgb211bmlkYWQgZGUgb3BpbmnDs24gY29uIG1lZGlvc10oaW1nL2NvbTVmdWxsLmpwZyl7IHdpZHRoPTgwJSB9CgpJbmNvcnBvcmEgcHJpbmNpcGFsbWVudGUgbGEgcHJlc2VuY2lhIGRlIHR3ZWV0cyBkZSBtZWRpb3Mgc29icmUgbGFzIG5vdGljaWFzIGRlbCBoYXNodGFnLiBBdW5xdWUgdGFtYmnDqW4gaGF5IGxhIHByZXNlbmNpYSBkZSBvdHJvcyBjaXZpbGVzLCBhdmF0YXJlcyB5IHJlemFnYWRvcy4KCmBgYHtyfQpmaWx0ZXIoY2VudHJhbGVzLCBDb211bmlkYWQgPT0gIkUiKSAlPiUgCiAga25pdHI6OmthYmxlKCkKYGBgCgpFcyB1bmEgY29tdW5pZGFkIGRlc2NlbnRyYWxpemFkYSBjb24gbWVkaW9zIGNvbW8gbG9zIHByaW5jaXBhbGVzICpodWJzKiBkZSBpbmZvcm1hY2nDs24uIAoKIyMjIENvbXBhcmFjacOzbgoKwr9RdcOpIHNpbWlsaXR1ZGVzIHkgZGlmZXJlbmNpYXMgVGllbmVuIGxhcyBjb211bmlkYWRlcyBkZSBvcGluacOzbiBxdWUgaWRlbnRpZmljYW1vcz8gCgohW10oaW1nL2NvbXAuanBnKQoKTGEgY29tdW5pZGFkIGNpdmlsIGVzIGxhIHNlZ3VuZGEgbcOhcyBncmFuZGUsIG9jdXBhbmRvIGVsIDE2LDkyJSBkZWwgZ3JhZm8gZW50ZXJvLiBUYW1iacOpbiBwb3NlZSB1bm8gZGUgbGFzIGRlbnNpZGFkZXMgbcOhcyBhbHRhcywgbG8gY3VhbCBtdWVzdHJhIHN1IHZpZ29yLCBjb21vIHVuYSBjb211bmlkYWQgdmVyZGFkZXJhbWVudGUgb3Jnw6FuaWNhLiBMYXMgY29tdW5pZGFkZXMgZGUgYWN0aXZpc3RhcywgdGFudG8gZGVsIG9maWNpYWxpc21vIHkgbGEgb3Bvc2ljacOzbiB0aWVuZSBsw7NnaWNhcyBjb211bmljYXRpdmFzIHNpbWlsYXJlcywgYXVucXVlIGxhIG9maWNpYWxpc3RhIGNyZWEgbcOhcyBsYXpvcyBoYWNpYSBhZGVudHJvIHF1ZSBoYWNpYSBhZnVlcmEuIExhIGNvbXVuaWRhZCBjb24gbWVkaW9zIGVzIGxhIG3DoXMgcGVxdWXDsWEgeSB0YXJkw61hLCBjb24gKmh1YnMqIHZpc2libGVzIHF1ZSBjb25zdW1lbiBsYSBwYXJ0aWNpcGFjacOzbi4gRmluYWxtZW50ZSwgZWwgcG9yY2VudGFqZSBtw6FzIGdyYW5kZSBkZWwgZ3JhZm8gZW50ZXJvIGxvIG9jdXBhIGxhIGNvbXVuaWRhZCBndWJlcm5hbWVudGFsIGNvbiBlbCA0NCw1MSUsIHBlcm8gY29uIGxhIGRlbnNpZGFkIG3DoXMgYmFqYSBwb3IgbXVjaG8sIGFsIG5vIGV4aXN0aXIgbmkgc2lxdWllcmEgbXVjaGEgY29tdW5pY2FjacOzbiBlbnRyZSBsb3MgbWlzbW9zIGludGVybG9jdXRvcmVzLCByZWNvcmRhbmRvIGEgdW4gbMOzZ2ljYSBkZSBjb211bmljYWNpw7NuIGFsIMOpc3RpbG8gZGVsICpicm9hZGNhc3RpbmcqLiAKCmBgYHtyIG1lc3NhZ2U9RkFMU0V9CmNvbXAgPC0gcmVhZF9jc3YyKCJjb21wLmNzdiIpCmNvbXAgJT4lIGtuaXRyOjprYWJsZSgpCmBgYAoKR2VuZXJhbW9zIHVuIGdyYWZvIGRpbsOhbWljbyBlbiBlbCBxdWUgcG9kZW1vcyB2ZXIgZXNhcyB0ZW5kZW5jaWFzIHkgb3RyYXM6CgohW10oaHR0cHM6Ly9tZWRpYS5naXBoeS5jb20vbWVkaWEvMzFZa2FyMFRibmNmM0hhaFlZL2dpcGh5LmdpZikKClBhcmEgdW5hIGV4cGxvcmFjacOzbiBtw6FzIG1pbnVjaW9zYTogCgo+aGVtb3MgY3JlYWRvIHVuYSAqdmVyc2nDs24gaW50ZXJhY3RpdmEqIGRlbCBncmFmbyBxdWUgcHVlZGUgc2VyIHZpc3VhbGl6YWRhIFthcXXDrV0oc2lnbWEvaW5kZXguaHRtbCkuCgojIyBDb25jbHVzaW9uZXMKCkVsIGhhc2h0YWcgI1JheW9Fdm9saXphZG9yIGZ1ZSBmdWdheiwgY29tbyBzdWVsZW4gc2VyIGxvcyBtZW1lcyB5IGxvcyBmZW7Ds21lbm9zIHZpcmFsZXMgZW4gSW50ZXJuZXQuIEhveSB5YSBubyBwYXJlY2UgaW1wb3J0YW50ZSB5IGxvcyB1c3VhcmlvcyBkZSBsYXMgcmVkZXMgcGFyZWNlbiBlc3RhciBzaWd1aWVuZG8geSBnZW5lcmFuZG8gb3RyYXMgdGVuZGVuY2lhcywgZW4gbGEgbMOzZ2ljYSBkaW7DoW1pY2EgZGVsIHByb3N1bWlkb3IuIFNpbiBlbWJhcmdvLCBlc3RlIHRpcG8gZGUgZmVuw7NtZW5vcyBzb2Npb2RpZ2l0YWxlcyBkZWphbiBodWVsbGFzIGltcHJlc2FzIGVuIGxhIFdlYiwgY29tbyBwdWRpbW9zIHZpc3VhbGl6YXIgYXF1w60sIGxhcyBjdcOhbGVzIG5vcyBzaXJ2ZW4gcGFyYSBsYSBjb21wcmVuc2nDs24gZGUgbGFzIGRpbsOhbWljYXMgZGUgb3BpbmnDs24gZW4gcmVkZXMgc29jaWFsZXMsIHNpZW5kbyBxdWUgc3UgZXN0dWRpbyBlbiBudWVzdHJvIHBhw61zIGHDum4gZXMgZXNjYXNvIHkgY29uIG3DqXRvZG9zIHLDunN0aWNvcy4gICAKCkVuIGVzdGUgY2FzbywgbGEgZGluw6FtaWNhIGNvbmNyZXRhIGZ1ZSBsYSBzaWd1aWVudGUuIFVuYSBjb211bmlkYWQgY2l2aWwgcXVlIGJ1c2NhYmEgcHJpbmNpcGFsbWVudGUgZWwgaHVtb3IgY3JlYSBlbCBoYXNodGFnLCBhbnRlIGxvIGN1YWwgYXBhcmVjZW4gZG9zIGNvbXVuaWRhZGVzIGFjdGl2aXN0YXMgcGFyYSB0w6FjdGljYW1lbnRlLCBkZXNkZSB1bmEgbHVjaGEgZGUgaW50ZXJhY2Npw7NuIGRlIHJlZGVzIGxsZXZhciBlbCBoYXNodGFnIGEgc3VzIGhvcml6b250ZXMuIEVuIGVzbyBpbnRlcnZpZW5lIGxhIGN1ZW50YSBkZWwgcHJlc2lkZW50ZSBAZXZvZXNwdWVibG8gcGFyYSBzZW50YXIgc3UgcHJlc2VuY2lhLCB0ZW5pZW5kbyB1biBmdWVydGUgYXBveW8sIGVuIHByaW1lciBsdWdhciwgZGUgaW5kaXZpZHVvcyBpbmNvbmV4b3MgeSwgZW4gc2VndW5kbyBsdWdhciwgZGVsIGFjdGl2aXNtbyBvZmljaWFsaXN0YS4gRGVzcHXDqXMgZGUgZXNvcyBlbmN1ZW50cm9zLCB2aWVuZW4gYWxndW5vcyByZXphZ2Fkb3MsIGluY2x1eWVuZG8gbGEgcHJlbnNhLiBFcyBkZWNpciBxdWUgbG8gcXVlIG3DoXMgZGluYW1pesOzIGVsIGhhc2h0YWcgZnVlIGFxdWVsbGEgY29tdW5pZGFkIG9yZ8OhbmljYSBvcmlnaW5hbCwgcGFyYSBxdWUgbHVlZ28gZnVlcmEgYWJvcmRhZGFzIHBvciB1bmEgbMOzZ2ljYSBkZSBhY3RpdmlzbW8gZW4gcmVkIHkgb3RyYSBsw7NnaWNhIGNlbnRyYWxpemFkYSBndWJlcm5hbWVudGFsLiAKClNpIGJpZW4gZXN0ZSBlcyB1biBjYXNvIGNvbmNyZXRvLCBwdWVkZSBpbHVzdHJhciBvdHJhcyBkaW7DoW1pY2FzIGRlIGdlbmVyYWNpw7NuIGRlIG9waW5pw7NuIHDDumJsaWNhIGVuIGxhcyByZWRlcywgcHJpbmNpcGFsbWVudGUgbGFzIG3DoXMgc3V0aWxlcyBxdWUgc8OzbG8gcHVlZGVuIHNlciBhcHJlY2lhZGFzIGEgcGFydGlyIHVuYSBtaXJhZGEgcGFub3LDoW1pY2EuIExvIGN1YWwgaW5jbHV5ZSBsYSBhaG9yYSBkZW5vbWluYWRhICJndWVycmEgZGlnaXRhbCIgIHF1ZSBlbCBnb2JpZXJubyBoYSBjb252b2NhZG8gKExvcyBUaWVtcG9zIDA0LzAyLzIwMTgpLgoKIyMgQmlibGlvZ3JhZsOtYQoKSW5nb2xkLCBUaW0gKDIwMTUpLiAqTGluZWFzOiBVbmEgYnJldmUgaGlzdG9yaWEqLiBCYXJjZWxvbmE6IEdlZGlzYS4gCgpMb3MgVGllbXBvcyAoMDQvMDIvMjAxOCkuICJFdm8gaW5zdGEgYSBvcmdhbml6YWNpb25lcyBhIHByZXBhcmFzZSBwYXJhIHVuYSAnZ3VlcnJhIGRpZ2l0YWwnIGVuIHJlZGVzIHNvY2lhbGVzIi4gCgpPamVkYSwgQWxleCAoMjAxNSkuICJJbnRyb2R1Y2Npw7NuIGFsIEFuw6FsaXNpcyBkZSBSZWRlcyBTb2NpYWxlcyIuIFRleHRvIGRlIGxhIG1hdGVyaWEgZWxlY3RpdmEgIkFuw6FsaXNpcyBkZSBSZWRlcyBTb2NpYWxlcyBJIiBkZSBsYSBDYXJyZXJhIGRlIFNvY2lvbG9nw61hLCBGYWN1bHRhZCBkZSBDaWVuY2lhcyBTb2NpYWxlcyAtIFVNU1MuIAoKUm9nZXJzLCBSaWNoYXJkICgyMDEzKS4gKkRpZ2l0YWwgTWV0aG9kcyouIE1JVCBQcmVzcy4KClZpY2tlcnksIEphY3F1ZWxpbmUgKDIwMTUpLiAiTWVtZXMgaW4gZGlnaXRhbCBjdWx0dXJlIi4gRW46ICpJbmZvcm1hdGlvbiwgQ29tbXVuaWNhdGlvbiAmIFNvY2lldHkqLCAxODoxMiwgMTQ1MC0xNDUxLCBET0k6IDEwLjEwODAvMTM2OTExOFguMjAxNC45NzkyMTcKCgojIyBIZXJyYW1pZW50YXMgZGlnaXRhbGVzIAoKKiBSCiogU29jaWFsTWVkaWFMYWIKKiBpR3JhcGgKKiBHZXBoaQoqIFNpZ21hLmpzCgojIyBTb2JyZSBlbCBhdXRvcgoKQWxleCBPamVkYSBDb3BhIGVzIHNvY2nDs2xvZ28gZGlnaXRhbCB5IGFuYWxpc3RhIGRlIHJlZGVzIHNvY2lhbGVzLiBPdHJvcyBwcm95ZWN0b3MgZW4gbG9zIHF1ZSBlc3TDoSB0cmFiYWphbmRvIHB1ZWRlbiB2ZXJzZSBlbiBzdSBbcG9ydGFmb2xpb10oaHR0cHM6Ly9hbGV4LXJvYy5naXRodWIuaW8vKS4gVGFtYmnDqW4gcHVlZGVuIGNvbnRhY3RhcmxvIGVuIFtUd2l0dGVyXShodHRwczovL3R3aXR0ZXIuY29tL2FsZXhyb2N6KSwgW0xpbmtlZEluXShodHRwczovL3d3dy5saW5rZWRpbi5jb20vaW4vYWxleHJvYy8pIHkgW0FjYWRlbWlhLmVkdV0oaHR0cHM6Ly91bXNzLmFjYWRlbWlhLmVkdS9hbGV4cm9jKS4gCgojIyBOb3RhcwpbXjFdOiBBcXXDrSB1dGlsaXphbW9zIGVsIHRlcm1pbm8gImNvbXVuaWRhZCIgbm8gZW4gc3Ugc2VudGlkbyBhbnRyb3BvbMOzZ2ljbyBkZSBzZW50aWRvcyBjb21wYXJ0aWRvcywgc2lubyBlbiBlbCBzZW50aWRvIGRlbCBBbsOhbGlzaXMgZGUgUmVkZXMsIGNvbW8gdW4gY29uanVudG8gZGUgYWN0b3JlcyBxdWUgaW50ZXJhY3R1YW4gZnJlY3VlbnRlbWVudGUgaGFjaWEgYWRlbnRybyBwZXJvIG5vIG11Y2hvIGhhY2lhIGFmdWVyYSwgc2llbmRvIGVzYSBzdSBmcm9udGVyYSBjb24gb3RyYXMgY29tdW5pZGFkZXMuIApbXjJdOiBVc2Ftb3MgZWwgYWxnb3JpdG1vIGRlIG1vZHVsYXJpZGFkIHF1ZSB0aWVuZSBHZXBoaSBpbmNvcnBvcmFkbywgY29ub2NpZG8gdGFtYmnDqW4gY29tbyAiTG91dmFpbiBNb2R1bGFyaXR5Ii4gQsOhc2ljYW1lbnRlIGxvIHF1ZSBoYWNlIGVzdGUgYWxnb3JpdG1vIGVzIGhhY2VyIHVuIGNhbGN1bG8gZGVsIHBlc28gZGUgbGFzIGFyaXN0YXMgZW4gZWwgdmVjaW5kYXJpbyBkZSBjYWRhIG5vZG8sIHBhcmEgZGV0ZWN0YXIgbm9kb3MgZG9uZGUgbGFzIGFyaXN0YXMgc29uIG3DoXMgZGVuc2FzIGVudHJlIHPDrSB5IGFsIG1pc21vIHRpZW1wbyBtZW5vcyBkZW5zYXMgZnJlbnRlIGEgb3Ryb3MuIEFzw60gZXMgcG9zaWJsZSBkZXRlY3RhciBjb211bmlkYWRlcyBiYXNhZGFzIGVuIGxhIGludGVyYWNjacOzbi4gTcOhcyBkZXRhbGxlcyBlbjogaHR0cHM6Ly9hcnhpdi5vcmcvYWJzLzA4MDMuMDQ3Ni4gCgoKCgo=