Tabla de datos de jobs in data e importacion de ggplot:
jobs_in_data <- read.csv("jobs_in_data.csv")
print(jobs_in_data)
library(ggplot2)
Gráfica 1:
ggplot(jobs_in_data, aes(job_category, salary/1000)) +
geom_boxplot() +
ggtitle("Data Science: Salary distribution by job category") +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))

Preguntas sobre la gráfica 1:
A. ¿Cuál es la categoría de trabajo donde el salario es más uniforme?
Explique por qué. Respuesta: El puesto de trabajo con el salario más
uniforme es Cloud and Database. Esto se debe a que es el espacio de
trabajo con la menor diferencia en distancia en las velas. Analizando
esta información, sabemos que es el puesto de trabajo con menor
diferencia en la paga laboral de todas las opciones.
B. ¿Cuál es la categoría de trabajo donde el salario varía más?
Explique por qué. Respuesta: El salario que varía más con la paga de su
salario es Machine Learning and AI. A simple vista, la respuesta es Data
Science and Research, pero el cuerpo de la vela es más ancho en el
primer empleo mencionado, indicando que sus precios de apertura y cierre
es incluso mayor la diferencia.
C. ¿Cuál es la categoría de trabajo en donde se gana más salario en
promedio? Explique por qué. Respuesta: En promedio, el trabajo mejor
pagado es Machine Learning and AI. Esto se puede ver en la gráfica al
ser la vela que está más alto ubicada en relación a los demás. Una
posible explicación a esto se la demanda en el sector de inteligencias
artificiales en la tecnología actual.
D. ¿Cuál es la categoría de trabajo en donde se gana menos salario en
promedio? Explique por qué. Respuesta: Por su parte, la categoría donde
se gana menos en el promedio del salario es en Data Quality and
Operations. Se puede observar con la misma lógica que la pregunta
pasada, al ser la vela con una menor ubicación en la escala se puede
deducir. Una posible explicación es que las operaciones de este trabajo
en los últimos años han sido muy soportadas por herramientas de
inteligencia artificial.
Gráfica 2:
ggplot(jobs_in_data, aes(job_category, fill = work_setting)) +
geom_bar() +
ggtitle("Data Science: Count by job category") +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))

Preguntas de la gráfica 2:
A. ¿Cuál es la categoría de trabajo donde existe mayor cantidad de
puestos y es mejor pagado? Explique por qué. Respuesta: El trabajo que
tiene una mayor oferta de trabajo es Data Science and Research, mientras
que el mejor pagado es Machine Learning and AI. Sin embargo, como se
está preguntando por el puesto que combine ambas características, se
tomará Data Science and Research. De hecho, es el trabajo que tiene el
mejor y el peor puesto de trabajo según el salario. Por lo tanto, su
rango de salarios es bastante amplio. Una explicación a esto es la alta
demanda ya sea con fines tecnológicos, científicos y de investigación.
Las discrepancias en el rango de sus salarios se deben a los mismos
sectores que los requieren, según el presupuesto requerido es la paga
dada.
B. ¿Cuál es la categoría de trabajo donde existe un buen salario pero
hay pocos puestos disponibles? Explique por qué. Respuesta: Este trabajo
sería Cloud and Database. De hecho, en la gráfica de conteo de salarios,
la muestra visual es casi nula. Se sabe que la cantidad total es de
cinco personas. Además, su promedio de salario es uno de los más altos y
más comprimidos, por lo que se puede observar que tienen una igualdad
distinguida. Seguidamente, una de las razones de esto puede ser la
demanda de compañías de profesionales especializados en este campo. No
obstante, como son sistemas montados en servidores, el mantenimiento
puede ser dado por una misma persona.
C. ¿Cuál es la categoría de trabajo peor pagado y con menor cantidad
de puestos disponibles? Explique por qué. Respuesta: Este trabajo sería
Data Quality and Operations. Se ve que es uno de los trabajos con menor
conteo y también es uno de los trabajos peores pagados. Una razón a esto
puede ser la baja demanda de estos profesionales y el reemplazo de este
campo por el mantenimiento automático por inteligencia artificial.
D. ¿Cuál es la categoría de trabajo con mayor cantidad de puestos
pero salarios bajos? Explique por qué. Respuesta: Este sería el trabajo
de Data Engineering. Es uno de los trabajos con más demanda pero de los
peores pagados. Una posible explicación a esto es su alta demanda y gran
cantidad de personas aspirantes, logra satisfacer los puestos laborales,
pero no ofrece una competitividad salarial ideal.
Gráfica 3:
ggplot(jobs_in_data, aes(experience_level, salary/1000)) +
geom_violin() +
ggtitle("Salaries by experience level")

Preguntas de la gráfica 3:
A. En promedio, ¿cuál es el nivel de experiencia con los peores
salarios? Explique por qué. Respuesta: Los peores salarios son para el
nivel Entry-level. La explicación a esto es que son los miembros más
nuevos de la compañía, por lo que su experiencia es mínima, lo que les
da menor carga de trabajo y responsabilidad, lo que origina el menor
salario.
B. En promedio, ¿cuál es el nivel de experiencia con los mejores
salarios? Explique por qué. Respuesta: Sería el nivel executive. Es el
que tiene el salario mejor repartido, ya que aunque hay personas con
salarios bajos, también tiene un promedio bastante alto y una población
considerable de personas con altos salarios.
C. ¿Cuál es el nivel de experiencia que tiene el salario más alto?
Explique por qué. Respuesta: Este nivel sería Mid-Level, aunque la
población que lo tiene es extremadamente reducida. Una razón a este
fenómeno puede ser que hayan encontrado un excelente puesto de trabajo
que no se abre de manera muy recurrente.
D. ¿Cuál es el nivel de experiencia que tiene un rango de salarios
más amplio? Explique por qué. Respuesta: Este sería el Mid-Level. Así
como tiene el salario más alto, también tiene una cantidad considerable
de personas que tienen salarios reducidos. Una razón a este fenómeno es
la cantidad y variabilidad de puestos de trabajos tan grandes que
hay.
Gráfica 4:
ggplot(jobs_in_data, aes(experience_level, fill = as.factor(work_year))) +
geom_bar() +
facet_wrap(~work_setting, ncol = 3) +
labs(fill = "Work Year") +
ggtitle("Experience level: Count by working setting and year") +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))

Preguntas de la gráfica 4:
A. ¿Cuál es el año donde más se crearon trabajos remotos para
personas con nivel senior? Explique por qué. Respuesta: El año donde se
crearon más trabajos remotos para seniors fue en el 2023. Esto según los
datos proporcionados por el dataset, además de ser corroborados en la
gráfica al tener un margen de más del doble que el año más próximo, el
2022.
B. ¿Qué nivel de experiencia tenía más posibilidad de obtener un
puesto remoto en el 2023? Explique por qué. Respuesta: El nivel de
experiencia con más posibilidades de obtener un puesto remoto en 2023
fue el nivel senior. En proporción a la cantidad de empleos abiertos por
año, es definitivamente el que más cantidad tiene, incluso llegando a
superar por más del doble al segundo lugar que es el mid-level. Una
posible explicación a este fenómeno es la salida de la pandemia, donde
las empresas se dieron cuenta de que no había necesidad de seguir
estando presencialmente, lo que aumentó la oferta remota. Además,
gracias a la misma pandemia, se abrieron una gran cantidad de puestos
laborales que lograron alcanzar el estatus de senior para ese
entonces.
C. ¿Para cuál nivel de experiencia se crearon, a través de los años,
una mayor proporción de trabajos? Explique por qué. Respuesta: La mayor
demanda siempre se ha visto para el nivel senior, en especial a partir
del 2022. Una posible razón a esto es que las empresas buscan
desarrolladores confiables que produzcan código y solventen problemas
sin necesidad de cometer errores de principiantes.
D. ¿Cuál fue el año en el que solo se ofrecieron trabajos
presenciales para ejecutivos? Explique por qué. Respuesta: Fue un poco
en el 2022 y en el 2023. Una posible respuesta a esto fue la salida de
la pandemia del COVID-19, generando un regreso a la presencialidad para
los trabajadores de las empresas.
LS0tDQp0aXRsZTogIlRhcmVhIDEgLSBTYW1pciBDYWJyZXJhIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KVGFibGEgZGUgZGF0b3MgZGUgam9icyBpbiBkYXRhIGUgaW1wb3J0YWNpb24gZGUgZ2dwbG90Og0KDQpgYGB7cn0NCmxpYnJhcnkoZ2dwbG90MikNCmpvYnNfaW5fZGF0YSA8LSByZWFkLmNzdigiam9ic19pbl9kYXRhLmNzdiIpDQpwcmludChqb2JzX2luX2RhdGEpDQpgYGANCg0KDQpHcsOhZmljYSAxOiANCg0KYGBge3J9DQpnZ3Bsb3Qoam9ic19pbl9kYXRhLCBhZXMoam9iX2NhdGVnb3J5LCBzYWxhcnkvMTAwMCkpICsgDQogIGdlb21fYm94cGxvdCgpICsNCiAgZ2d0aXRsZSgiRGF0YSBTY2llbmNlOiBTYWxhcnkgZGlzdHJpYnV0aW9uIGJ5IGpvYiBjYXRlZ29yeSIpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKQ0KYGBgDQpQcmVndW50YXMgc29icmUgbGEgZ3LDoWZpY2EgMToNCg0KQS4gwr9DdcOhbCBlcyBsYSBjYXRlZ29yw61hIGRlIHRyYWJham8gZG9uZGUgZWwgc2FsYXJpbyBlcyBtw6FzIHVuaWZvcm1lPyBFeHBsaXF1ZSBwb3IgcXXDqS4NClJlc3B1ZXN0YTogRWwgcHVlc3RvIGRlIHRyYWJham8gY29uIGVsIHNhbGFyaW8gbcOhcyB1bmlmb3JtZSBlcyBDbG91ZCBhbmQgRGF0YWJhc2UuIEVzdG8gc2UgZGViZSBhIHF1ZSBlcyBlbCBlc3BhY2lvIGRlIHRyYWJham8gY29uIGxhIG1lbm9yIGRpZmVyZW5jaWEgZW4gZGlzdGFuY2lhIGVuIGxhcyB2ZWxhcy4gQW5hbGl6YW5kbyBlc3RhIGluZm9ybWFjacOzbiwgc2FiZW1vcyBxdWUgZXMgZWwgcHVlc3RvIGRlIHRyYWJham8gY29uIG1lbm9yIGRpZmVyZW5jaWEgZW4gbGEgcGFnYSBsYWJvcmFsIGRlIHRvZGFzIGxhcyBvcGNpb25lcy4NCg0KQi4gwr9DdcOhbCBlcyBsYSBjYXRlZ29yw61hIGRlIHRyYWJham8gZG9uZGUgZWwgc2FsYXJpbyB2YXLDrWEgbcOhcz8gRXhwbGlxdWUgcG9yIHF1w6kuDQpSZXNwdWVzdGE6IEVsIHNhbGFyaW8gcXVlIHZhcsOtYSBtw6FzIGNvbiBsYSBwYWdhIGRlIHN1IHNhbGFyaW8gZXMgTWFjaGluZSBMZWFybmluZyBhbmQgQUkuIEEgc2ltcGxlIHZpc3RhLCBsYSByZXNwdWVzdGEgZXMgRGF0YSBTY2llbmNlIGFuZCBSZXNlYXJjaCwgcGVybyBlbCBjdWVycG8gZGUgbGEgdmVsYSBlcyBtw6FzIGFuY2hvIGVuIGVsIHByaW1lciBlbXBsZW8gbWVuY2lvbmFkbywgaW5kaWNhbmRvIHF1ZSBzdXMgcHJlY2lvcyBkZSBhcGVydHVyYSB5IGNpZXJyZSBlcyBpbmNsdXNvIG1heW9yIGxhIGRpZmVyZW5jaWEuDQoNCkMuIMK/Q3XDoWwgZXMgbGEgY2F0ZWdvcsOtYSBkZSB0cmFiYWpvIGVuIGRvbmRlIHNlIGdhbmEgbcOhcyBzYWxhcmlvIGVuIHByb21lZGlvPyBFeHBsaXF1ZSBwb3IgcXXDqS4NClJlc3B1ZXN0YTogRW4gcHJvbWVkaW8sIGVsIHRyYWJham8gbWVqb3IgcGFnYWRvIGVzIE1hY2hpbmUgTGVhcm5pbmcgYW5kIEFJLiBFc3RvIHNlIHB1ZWRlIHZlciBlbiBsYSBncsOhZmljYSBhbCBzZXIgbGEgdmVsYSBxdWUgZXN0w6EgbcOhcyBhbHRvIHViaWNhZGEgZW4gcmVsYWNpw7NuIGEgbG9zIGRlbcOhcy4gVW5hIHBvc2libGUgZXhwbGljYWNpw7NuIGEgZXN0byBzZSBsYSBkZW1hbmRhIGVuIGVsIHNlY3RvciBkZSBpbnRlbGlnZW5jaWFzIGFydGlmaWNpYWxlcyBlbiBsYSB0ZWNub2xvZ8OtYSBhY3R1YWwuDQoNCkQuIMK/Q3XDoWwgZXMgbGEgY2F0ZWdvcsOtYSBkZSB0cmFiYWpvIGVuIGRvbmRlIHNlIGdhbmEgbWVub3Mgc2FsYXJpbyBlbiBwcm9tZWRpbz8gRXhwbGlxdWUgcG9yIHF1w6kuDQpSZXNwdWVzdGE6IFBvciBzdSBwYXJ0ZSwgbGEgY2F0ZWdvcsOtYSBkb25kZSBzZSBnYW5hIG1lbm9zIGVuIGVsIHByb21lZGlvIGRlbCBzYWxhcmlvIGVzIGVuIERhdGEgUXVhbGl0eSBhbmQgT3BlcmF0aW9ucy4gU2UgcHVlZGUgb2JzZXJ2YXIgY29uIGxhIG1pc21hIGzDs2dpY2EgcXVlIGxhIHByZWd1bnRhIHBhc2FkYSwgYWwgc2VyIGxhIHZlbGEgY29uIHVuYSBtZW5vciB1YmljYWNpw7NuIGVuIGxhIGVzY2FsYSBzZSBwdWVkZSBkZWR1Y2lyLiBVbmEgcG9zaWJsZSBleHBsaWNhY2nDs24gZXMgcXVlIGxhcyBvcGVyYWNpb25lcyBkZSBlc3RlIHRyYWJham8gZW4gbG9zIMO6bHRpbW9zIGHDsW9zIGhhbiBzaWRvIG11eSBzb3BvcnRhZGFzIHBvciBoZXJyYW1pZW50YXMgZGUgaW50ZWxpZ2VuY2lhIGFydGlmaWNpYWwuDQoNCg0KDQpHcsOhZmljYSAyOiANCg0KYGBge3J9DQpnZ3Bsb3Qoam9ic19pbl9kYXRhLCBhZXMoam9iX2NhdGVnb3J5LCBmaWxsID0gd29ya19zZXR0aW5nKSkgKyANCiAgZ2VvbV9iYXIoKSArDQogIGdndGl0bGUoIkRhdGEgU2NpZW5jZTogQ291bnQgYnkgam9iIGNhdGVnb3J5IikgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCB2anVzdCA9IDAuNSwgaGp1c3Q9MSkpDQpgYGANClByZWd1bnRhcyBkZSBsYSBncsOhZmljYSAyOg0KDQpBLiDCv0N1w6FsIGVzIGxhIGNhdGVnb3LDrWEgZGUgdHJhYmFqbyBkb25kZSBleGlzdGUgbWF5b3IgY2FudGlkYWQgZGUgcHVlc3RvcyB5IGVzIG1lam9yIHBhZ2Fkbz8gRXhwbGlxdWUgcG9yIHF1w6kuDQpSZXNwdWVzdGE6IEVsIHRyYWJham8gcXVlIHRpZW5lIHVuYSBtYXlvciBvZmVydGEgZGUgdHJhYmFqbyBlcyBEYXRhIFNjaWVuY2UgYW5kIFJlc2VhcmNoLCBtaWVudHJhcyBxdWUgZWwgbWVqb3IgcGFnYWRvIGVzIE1hY2hpbmUgTGVhcm5pbmcgYW5kIEFJLiBTaW4gZW1iYXJnbywgY29tbyBzZSBlc3TDoSBwcmVndW50YW5kbyBwb3IgZWwgcHVlc3RvIHF1ZSBjb21iaW5lIGFtYmFzIGNhcmFjdGVyw61zdGljYXMsIHNlIHRvbWFyw6EgRGF0YSBTY2llbmNlIGFuZCBSZXNlYXJjaC4gRGUgaGVjaG8sIGVzIGVsIHRyYWJham8gcXVlIHRpZW5lIGVsIG1lam9yIHkgZWwgcGVvciBwdWVzdG8gZGUgdHJhYmFqbyBzZWfDum4gZWwgc2FsYXJpby4gUG9yIGxvIHRhbnRvLCBzdSByYW5nbyBkZSBzYWxhcmlvcyBlcyBiYXN0YW50ZSBhbXBsaW8uIFVuYSBleHBsaWNhY2nDs24gYSBlc3RvIGVzIGxhIGFsdGEgZGVtYW5kYSB5YSBzZWEgY29uIGZpbmVzIHRlY25vbMOzZ2ljb3MsIGNpZW50w61maWNvcyB5IGRlIGludmVzdGlnYWNpw7NuLiBMYXMgZGlzY3JlcGFuY2lhcyBlbiBlbCByYW5nbyBkZSBzdXMgc2FsYXJpb3Mgc2UgZGViZW4gYSBsb3MgbWlzbW9zIHNlY3RvcmVzIHF1ZSBsb3MgcmVxdWllcmVuLCBzZWfDum4gZWwgcHJlc3VwdWVzdG8gcmVxdWVyaWRvIGVzIGxhIHBhZ2EgZGFkYS4NCg0KQi4gwr9DdcOhbCBlcyBsYSBjYXRlZ29yw61hIGRlIHRyYWJham8gZG9uZGUgZXhpc3RlIHVuIGJ1ZW4gc2FsYXJpbyBwZXJvIGhheSBwb2NvcyBwdWVzdG9zIGRpc3BvbmlibGVzPyBFeHBsaXF1ZSBwb3IgcXXDqS4NClJlc3B1ZXN0YTogRXN0ZSB0cmFiYWpvIHNlcsOtYSBDbG91ZCBhbmQgRGF0YWJhc2UuIERlIGhlY2hvLCBlbiBsYSBncsOhZmljYSBkZSBjb250ZW8gZGUgc2FsYXJpb3MsIGxhIG11ZXN0cmEgdmlzdWFsIGVzIGNhc2kgbnVsYS4gU2Ugc2FiZSBxdWUgbGEgY2FudGlkYWQgdG90YWwgZXMgZGUgY2luY28gcGVyc29uYXMuIEFkZW3DoXMsIHN1IHByb21lZGlvIGRlIHNhbGFyaW8gZXMgdW5vIGRlIGxvcyBtw6FzIGFsdG9zIHkgbcOhcyBjb21wcmltaWRvcywgcG9yIGxvIHF1ZSBzZSBwdWVkZSBvYnNlcnZhciBxdWUgdGllbmVuIHVuYSBpZ3VhbGRhZCBkaXN0aW5ndWlkYS4gU2VndWlkYW1lbnRlLCB1bmEgZGUgbGFzIHJhem9uZXMgZGUgZXN0byBwdWVkZSBzZXIgbGEgZGVtYW5kYSBkZSBjb21wYcOxw61hcyBkZSBwcm9mZXNpb25hbGVzIGVzcGVjaWFsaXphZG9zIGVuIGVzdGUgY2FtcG8uIE5vIG9ic3RhbnRlLCBjb21vIHNvbiBzaXN0ZW1hcyBtb250YWRvcyBlbiBzZXJ2aWRvcmVzLCBlbCBtYW50ZW5pbWllbnRvIHB1ZWRlIHNlciBkYWRvIHBvciB1bmEgbWlzbWEgcGVyc29uYS4NCg0KQy4gwr9DdcOhbCBlcyBsYSBjYXRlZ29yw61hIGRlIHRyYWJham8gcGVvciBwYWdhZG8geSBjb24gbWVub3IgY2FudGlkYWQgZGUgcHVlc3RvcyBkaXNwb25pYmxlcz8gRXhwbGlxdWUgcG9yIHF1w6kuDQpSZXNwdWVzdGE6IEVzdGUgdHJhYmFqbyBzZXLDrWEgRGF0YSBRdWFsaXR5IGFuZCBPcGVyYXRpb25zLiBTZSB2ZSBxdWUgZXMgdW5vIGRlIGxvcyB0cmFiYWpvcyBjb24gbWVub3IgY29udGVvIHkgdGFtYmnDqW4gZXMgdW5vIGRlIGxvcyB0cmFiYWpvcyBwZW9yZXMgcGFnYWRvcy4gVW5hIHJhesOzbiBhIGVzdG8gcHVlZGUgc2VyIGxhIGJhamEgZGVtYW5kYSBkZSBlc3RvcyBwcm9mZXNpb25hbGVzIHkgZWwgcmVlbXBsYXpvIGRlIGVzdGUgY2FtcG8gcG9yIGVsIG1hbnRlbmltaWVudG8gYXV0b23DoXRpY28gcG9yIGludGVsaWdlbmNpYSBhcnRpZmljaWFsLg0KDQpELiDCv0N1w6FsIGVzIGxhIGNhdGVnb3LDrWEgZGUgdHJhYmFqbyBjb24gbWF5b3IgY2FudGlkYWQgZGUgcHVlc3RvcyBwZXJvIHNhbGFyaW9zIGJham9zPyBFeHBsaXF1ZSBwb3IgcXXDqS4NClJlc3B1ZXN0YTogRXN0ZSBzZXLDrWEgZWwgdHJhYmFqbyBkZSBEYXRhIEVuZ2luZWVyaW5nLiBFcyB1bm8gZGUgbG9zIHRyYWJham9zIGNvbiBtw6FzIGRlbWFuZGEgcGVybyBkZSBsb3MgcGVvcmVzIHBhZ2Fkb3MuIFVuYSBwb3NpYmxlIGV4cGxpY2FjacOzbiBhIGVzdG8gZXMgc3UgYWx0YSBkZW1hbmRhIHkgZ3JhbiBjYW50aWRhZCBkZSBwZXJzb25hcyBhc3BpcmFudGVzLCBsb2dyYSBzYXRpc2ZhY2VyIGxvcyBwdWVzdG9zIGxhYm9yYWxlcywgcGVybyBubyBvZnJlY2UgdW5hIGNvbXBldGl0aXZpZGFkIHNhbGFyaWFsIGlkZWFsLg0KDQoNCkdyw6FmaWNhIDM6IA0KDQpgYGB7cn0NCmdncGxvdChqb2JzX2luX2RhdGEsIGFlcyhleHBlcmllbmNlX2xldmVsLCBzYWxhcnkvMTAwMCkpICsgDQogIGdlb21fdmlvbGluKCkgKw0KICBnZ3RpdGxlKCJTYWxhcmllcyBieSBleHBlcmllbmNlIGxldmVsIikNCmBgYA0KUHJlZ3VudGFzIGRlIGxhIGdyw6FmaWNhIDM6DQoNCkEuIEVuIHByb21lZGlvLCDCv2N1w6FsIGVzIGVsIG5pdmVsIGRlIGV4cGVyaWVuY2lhIGNvbiBsb3MgcGVvcmVzIHNhbGFyaW9zPyBFeHBsaXF1ZSBwb3IgcXXDqS4NClJlc3B1ZXN0YTogTG9zIHBlb3JlcyBzYWxhcmlvcyBzb24gcGFyYSBlbCBuaXZlbCBFbnRyeS1sZXZlbC4gTGEgZXhwbGljYWNpw7NuIGEgZXN0byBlcyBxdWUgc29uIGxvcyBtaWVtYnJvcyBtw6FzIG51ZXZvcyBkZSBsYSBjb21wYcOxw61hLCBwb3IgbG8gcXVlIHN1IGV4cGVyaWVuY2lhIGVzIG3DrW5pbWEsIGxvIHF1ZSBsZXMgZGEgbWVub3IgY2FyZ2EgZGUgdHJhYmFqbyB5IHJlc3BvbnNhYmlsaWRhZCwgbG8gcXVlIG9yaWdpbmEgZWwgbWVub3Igc2FsYXJpby4NCg0KQi4gRW4gcHJvbWVkaW8sIMK/Y3XDoWwgZXMgZWwgbml2ZWwgZGUgZXhwZXJpZW5jaWEgY29uIGxvcyBtZWpvcmVzIHNhbGFyaW9zPyBFeHBsaXF1ZSBwb3IgcXXDqS4NClJlc3B1ZXN0YTogU2Vyw61hIGVsIG5pdmVsIGV4ZWN1dGl2ZS4gRXMgZWwgcXVlIHRpZW5lIGVsIHNhbGFyaW8gbWVqb3IgcmVwYXJ0aWRvLCB5YSBxdWUgYXVucXVlIGhheSBwZXJzb25hcyBjb24gc2FsYXJpb3MgYmFqb3MsIHRhbWJpw6luIHRpZW5lIHVuIHByb21lZGlvIGJhc3RhbnRlIGFsdG8geSB1bmEgcG9ibGFjacOzbiBjb25zaWRlcmFibGUgZGUgcGVyc29uYXMgY29uIGFsdG9zIHNhbGFyaW9zLg0KDQpDLiDCv0N1w6FsIGVzIGVsIG5pdmVsIGRlIGV4cGVyaWVuY2lhIHF1ZSB0aWVuZSBlbCBzYWxhcmlvIG3DoXMgYWx0bz8gRXhwbGlxdWUgcG9yIHF1w6kuDQpSZXNwdWVzdGE6IEVzdGUgbml2ZWwgc2Vyw61hIE1pZC1MZXZlbCwgYXVucXVlIGxhIHBvYmxhY2nDs24gcXVlIGxvIHRpZW5lIGVzIGV4dHJlbWFkYW1lbnRlIHJlZHVjaWRhLiBVbmEgcmF6w7NuIGEgZXN0ZSBmZW7Ds21lbm8gcHVlZGUgc2VyIHF1ZSBoYXlhbiBlbmNvbnRyYWRvIHVuIGV4Y2VsZW50ZSBwdWVzdG8gZGUgdHJhYmFqbyBxdWUgbm8gc2UgYWJyZSBkZSBtYW5lcmEgbXV5IHJlY3VycmVudGUuDQoNCkQuIMK/Q3XDoWwgZXMgZWwgbml2ZWwgZGUgZXhwZXJpZW5jaWEgcXVlIHRpZW5lIHVuIHJhbmdvIGRlIHNhbGFyaW9zIG3DoXMgYW1wbGlvPyBFeHBsaXF1ZSBwb3IgcXXDqS4NClJlc3B1ZXN0YTogRXN0ZSBzZXLDrWEgZWwgTWlkLUxldmVsLiBBc8OtIGNvbW8gdGllbmUgZWwgc2FsYXJpbyBtw6FzIGFsdG8sIHRhbWJpw6luIHRpZW5lIHVuYSBjYW50aWRhZCBjb25zaWRlcmFibGUgZGUgcGVyc29uYXMgcXVlIHRpZW5lbiBzYWxhcmlvcyByZWR1Y2lkb3MuIFVuYSByYXrDs24gYSBlc3RlIGZlbsOzbWVubyBlcyBsYSBjYW50aWRhZCB5IHZhcmlhYmlsaWRhZCBkZSBwdWVzdG9zIGRlIHRyYWJham9zIHRhbiBncmFuZGVzIHF1ZSBoYXkuDQoNCg0KR3LDoWZpY2EgNDogDQoNCmBgYHtyfQ0KZ2dwbG90KGpvYnNfaW5fZGF0YSwgYWVzKGV4cGVyaWVuY2VfbGV2ZWwsIGZpbGwgPSBhcy5mYWN0b3Iod29ya195ZWFyKSkpICsgDQogIGdlb21fYmFyKCkgKyANCiAgZmFjZXRfd3JhcCh+d29ya19zZXR0aW5nLCBuY29sID0gMykgKw0KICBsYWJzKGZpbGwgPSAiV29yayBZZWFyIikgKw0KICBnZ3RpdGxlKCJFeHBlcmllbmNlIGxldmVsOiBDb3VudCBieSB3b3JraW5nIHNldHRpbmcgYW5kIHllYXIiKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkNCmBgYA0KUHJlZ3VudGFzIGRlIGxhIGdyw6FmaWNhIDQ6DQoNCkEuIMK/Q3XDoWwgZXMgZWwgYcOxbyBkb25kZSBtw6FzIHNlIGNyZWFyb24gdHJhYmFqb3MgcmVtb3RvcyBwYXJhIHBlcnNvbmFzIGNvbiBuaXZlbCBzZW5pb3I/IEV4cGxpcXVlIHBvciBxdcOpLg0KUmVzcHVlc3RhOiBFbCBhw7FvIGRvbmRlIHNlIGNyZWFyb24gbcOhcyB0cmFiYWpvcyByZW1vdG9zIHBhcmEgc2VuaW9ycyBmdWUgZW4gZWwgMjAyMy4gRXN0byBzZWfDum4gbG9zIGRhdG9zIHByb3BvcmNpb25hZG9zIHBvciBlbCBkYXRhc2V0LCBhZGVtw6FzIGRlIHNlciBjb3Jyb2JvcmFkb3MgZW4gbGEgZ3LDoWZpY2EgYWwgdGVuZXIgdW4gbWFyZ2VuIGRlIG3DoXMgZGVsIGRvYmxlIHF1ZSBlbCBhw7FvIG3DoXMgcHLDs3hpbW8sIGVsIDIwMjIuDQoNCkIuIMK/UXXDqSBuaXZlbCBkZSBleHBlcmllbmNpYSB0ZW7DrWEgbcOhcyBwb3NpYmlsaWRhZCBkZSBvYnRlbmVyIHVuIHB1ZXN0byByZW1vdG8gZW4gZWwgMjAyMz8gRXhwbGlxdWUgcG9yIHF1w6kuDQpSZXNwdWVzdGE6IEVsIG5pdmVsIGRlIGV4cGVyaWVuY2lhIGNvbiBtw6FzIHBvc2liaWxpZGFkZXMgZGUgb2J0ZW5lciB1biBwdWVzdG8gcmVtb3RvIGVuIDIwMjMgZnVlIGVsIG5pdmVsIHNlbmlvci4gRW4gcHJvcG9yY2nDs24gYSBsYSBjYW50aWRhZCBkZSBlbXBsZW9zIGFiaWVydG9zIHBvciBhw7FvLCBlcyBkZWZpbml0aXZhbWVudGUgZWwgcXVlIG3DoXMgY2FudGlkYWQgdGllbmUsIGluY2x1c28gbGxlZ2FuZG8gYSBzdXBlcmFyIHBvciBtw6FzIGRlbCBkb2JsZSBhbCBzZWd1bmRvIGx1Z2FyIHF1ZSBlcyBlbCBtaWQtbGV2ZWwuIFVuYSBwb3NpYmxlIGV4cGxpY2FjacOzbiBhIGVzdGUgZmVuw7NtZW5vIGVzIGxhIHNhbGlkYSBkZSBsYSBwYW5kZW1pYSwgZG9uZGUgbGFzIGVtcHJlc2FzIHNlIGRpZXJvbiBjdWVudGEgZGUgcXVlIG5vIGhhYsOtYSBuZWNlc2lkYWQgZGUgc2VndWlyIGVzdGFuZG8gcHJlc2VuY2lhbG1lbnRlLCBsbyBxdWUgYXVtZW50w7MgbGEgb2ZlcnRhIHJlbW90YS4gQWRlbcOhcywgZ3JhY2lhcyBhIGxhIG1pc21hIHBhbmRlbWlhLCBzZSBhYnJpZXJvbiB1bmEgZ3JhbiBjYW50aWRhZCBkZSBwdWVzdG9zIGxhYm9yYWxlcyBxdWUgbG9ncmFyb24gYWxjYW56YXIgZWwgZXN0YXR1cyBkZSBzZW5pb3IgcGFyYSBlc2UgZW50b25jZXMuDQoNCkMuIMK/UGFyYSBjdcOhbCBuaXZlbCBkZSBleHBlcmllbmNpYSBzZSBjcmVhcm9uLCBhIHRyYXbDqXMgZGUgbG9zIGHDsW9zLCB1bmEgbWF5b3IgcHJvcG9yY2nDs24gZGUgdHJhYmFqb3M/IEV4cGxpcXVlIHBvciBxdcOpLg0KUmVzcHVlc3RhOiBMYSBtYXlvciBkZW1hbmRhIHNpZW1wcmUgc2UgaGEgdmlzdG8gcGFyYSBlbCBuaXZlbCBzZW5pb3IsIGVuIGVzcGVjaWFsIGEgcGFydGlyIGRlbCAyMDIyLiBVbmEgcG9zaWJsZSByYXrDs24gYSBlc3RvIGVzIHF1ZSBsYXMgZW1wcmVzYXMgYnVzY2FuIGRlc2Fycm9sbGFkb3JlcyBjb25maWFibGVzIHF1ZSBwcm9kdXpjYW4gY8OzZGlnbyB5IHNvbHZlbnRlbiBwcm9ibGVtYXMgc2luIG5lY2VzaWRhZCBkZSBjb21ldGVyIGVycm9yZXMgZGUgcHJpbmNpcGlhbnRlcy4NCg0KRC4gwr9DdcOhbCBmdWUgZWwgYcOxbyBlbiBlbCBxdWUgc29sbyBzZSBvZnJlY2llcm9uIHRyYWJham9zIHByZXNlbmNpYWxlcyBwYXJhIGVqZWN1dGl2b3M/IEV4cGxpcXVlIHBvciBxdcOpLg0KUmVzcHVlc3RhOiBGdWUgdW4gcG9jbyBlbiBlbCAyMDIyIHkgZW4gZWwgMjAyMy4gVW5hIHBvc2libGUgcmVzcHVlc3RhIGEgZXN0byBmdWUgbGEgc2FsaWRhIGRlIGxhIHBhbmRlbWlhIGRlbCBDT1ZJRC0xOSwgZ2VuZXJhbmRvIHVuIHJlZ3Jlc28gYSBsYSBwcmVzZW5jaWFsaWRhZCBwYXJhIGxvcyB0cmFiYWphZG9yZXMgZGUgbGFzIGVtcHJlc2FzLg0K