library(dplyr)
library(ggplot2)
library(highcharter)
library(tidyverse)
library(lubridate)
library(openxlsx)
library(DT)
library(data.table)
library(xts)
library(zoo)
library(urca)
library(tseries)
library(xts)
library(forecast)
library(astsa)
library(vars)
library(stargazer)
library(tsDyn)
data <- read.xlsx("Datos/v2005v2.xlsx",
detectDates = TRUE)
pib_xts<-xts(data$logpib,
order.by = data$FECHA)
cfa_xts<-xts(data$logcaprea,
order.by = data$FECHA)
pea_xts<-xts(data$logpea,
order.by = data$FECHA)
gp_xts<-xts(data$loggastpub,
order.by = data$FECHA)
imp_xts<-xts(data$logimp,
order.by = data$FECHA)
exp_xts<-xts(data$logexp,
order.by = data$FECHA)
data_xts <- data.frame(pib = pib_xts, cfa = cfa_xts, pea = pea_xts,
gp = gp_xts, imp = imp_xts, exp = exp_xts)
#pib_xts
#cfa_xts
#pea_xts
#gp_xts
#imp_xts
#exp_xts
Introducción
En la literatura empírica existe un debate des hace varias decadas sobre la dirección en la relación causal entre la abertura hacía el comercio internacional de un país y su crecimiento económico. Algunos académicos sostienen que los tratados comerciales internacionales favorecen e impulsan el crecimiento de la economía [2]. Estos modelos se definen como de crecimiento impulsado por las exportaciones (CIE) y se fundamentan en las externalidades positivas resultantes de una mejor asignación de los recursos, la posibilidad de economías de escalas y un incremento del crecimiento tecnológico debido a un contexto más competitivo [4]. Otros estudios, al contrario, consideran que son las exportaciones las que determinan el crecimiento económico, y los modelos se definen como de exportaciones impulsadas por el crecimiento (EIC). En este caso un aumento en la productividad local por mejorías tecnológicas o en el capital humano impulsaría las exportaciones y por ende el crecimiento [5]. Finalmente una tercera hipótesis avanzada por la academia es que el crecimiento tenga como determinante principal el aumento de las importaciones(CII). Según esta teoría el crecimiento endógeno se ve favorecido por la posibilidad para las empresas locales de acceder a productos semiacabados y tecnologías extranjeras mejorando su competitividad internacional [7]. En México a partir de los años 80 la política de apertura frente al resto del mundo, promovida por la presidencia de Miguel de la Madrid Hurtado, determina un cambio sustancial con respecto al precedente modelo de sustitución de las importaciones y marca el camino en la definición de la política macroeconómica mexicana siempre más votada hacía un modelo abierto, con la firma del GATT (1986), el NAFTA (1996) y recientemente con la ratificación del T-MEC. A partir de este ex cursus histórico nos preguntamos si efectivamente esta abertura favoreció el crecimiento de la economía mexicana.
Otro factor relevante, cuando consideramos los modelos de crecimiento, es el papel del gasto público como motor del desarrollo económico. Siempre a partir de los años 80, frente a la década perdida, se modificó también la función del estado con respecto a la economía, pasando de un modelo donde este controlaba los sectores económicos estratégicos a uno neoliberal, predominado por la economía de mercado. Justificado por las ineficiencias y fallas de las gestiones de los gobiernos anteriores, la reducción de las funciones del estado fue acompañada por la implementación de severas políticas de estabilización macroeconómica que llevó a un masivo recorte del gasto público en infraestructura económica y social, además de la venta de la mayoría de las empresas paraestatales. Hoy en día, la inversión estatal se encuentra de nuevo al centro de la discusión pública por la política de austeridad promovida por el gobierno de Andrés Manuel López Obrador. En este trabajo se intentará comprender la relación entre esta y el crecimiento económico, mientras por algunos economistas este puede tener un efecto positivo en la economía [9] por otros el impacto a largo plazo es negativo [1].
Modelo teórico y datos
Para intentar entender los efectos de la balanza comercial (importaciones/exportaciones) y del gasto público en crecimiento del Producto Interno Bruto, se incorporaron estos elementos a la función de producción agregada, propuesto entre otros, por Sheehey [10]. La función aumentada de producción por lo tanto tendrá la siguiente especificación:
\[ Y=F[(K,L);GP,X,M]\]
Donde \(Y\) representa el PIB, \(K\) el capital neto real, \(GP\) el gasto público, \(X\) las exportaciones reales y \(M\) las importaciones reales. En la estructuración más sencilla el modelo se asumió como lineal y aditivo.
Respecto a los datos utilizados, se construyeron unas series de tiempo con frecuencia trimestral a partir del \(1-2005\) hasta él \(4-2020\) para capturar las relaciones contemporáneas entre las distintas variables. Los datos fueron desestacionalizados y transformados logarítmicamente para mitigar efectos de escala. Para las estimaciones se utilizaron datos de INEGI. En particular se utilizaron los siguientes indicadores:
- \(Y:\) Producto interno bruto (PIB y cuentas nacionales)
- \(K:\) Formación capital fijo real ajustado (Sistemas de cuentas nacionales)
- \(L:\) Población económicamente activa (ENOE/ETOE)
- \(GP:\) Consumo de gobierno (Oferta y Demanda Global Trimestral)
- \(X:\) Exportación de bienes y servicios (Oferta y demanda global de bienes y servicios)
- \(M:\) Importación de bienes y servicios (Oferta y demanda global de bienes y servicios)
Una vez descritas las variables de interés, en la próxima sección analizaremos el modelo empírico utilizado, al fin de encontrar las relaciones a corto y largo plazo entre estas.
Metodología de estimación
El primer modelo naif que se utilizó para intentar estimar la relación entre las variables de interés fue uno de mínimos cuadrados ordinarios con errores robustos, donde la forma funcional adoptada fue de tipo lineal y aditiva como especificado en la ecuación \(1\):
\[
Y= \beta_0 + \beta_1 K + \beta_2 L + \beta_3 GP + \beta_4 X + \beta_5 M + \epsilon \;\;\;(1)
\]
m<- lm(logpib~logcaprea + logpea + loggastpub + logimp + logexp,
data= data)
stargazer(m, type = "text")
##
## ===============================================
## Dependent variable:
## ---------------------------
## logpib
## -----------------------------------------------
## logcaprea 0.359***
## (0.073)
##
## logpea 0.138**
## (0.055)
##
## loggastpub -0.288***
## (0.073)
##
## logimp 0.213***
## (0.047)
##
## logexp 0.204***
## (0.046)
##
## Constant 2.462***
## (0.217)
##
## -----------------------------------------------
## Observations 64
## R2 0.993
## Adjusted R2 0.992
## Residual Std. Error 0.004 (df = 58)
## F Statistic 1,559.644*** (df = 5; 58)
## ===============================================
## Note: *p<0.1; **p<0.05; ***p<0.01
El análisis gráfico de los indicadores parece mostrar un elemento de tendencia que invalida el uso de OLS para la estimación de los parámetros y que llevaría a la identificación de relaciones espurias siendo que los supuestos de Markov no se cumplirían.
Logaritmo de las series
myMenuItems <- c("downloadPNG", "downloadJPEG", "downloadPDF", "downloadCSV" )
highchart(type = "stock")%>%
hc_add_series(name= "PIB",
pib_xts)%>%
hc_add_series(
cfa_xts,
name = "Capital fijo"
)%>%
hc_add_series(
pea_xts,
name = "Pop. Eco. Act."
)%>%
hc_add_series(
gp_xts,
name = "Gasto público"
)%>%
hc_add_series(
imp_xts,
name = "Importaciones"
)%>%
hc_add_series(
exp_xts,
name = "Exportaciones"
)%>%
hc_add_theme(hc_theme_economist())%>%
hc_title(text = "Series en logaritmos")%>%
#margin = 20, align = "left",
#style = list(color = "#90ed7d", useHTML = TRUE)) %>%
hc_subtitle(text = "2005-2020")%>%
# align = "left",
# style = list(color = "#2b908f", fontWeight = "bold")) %>%
hc_yAxis(title = list(text = "log"))%>%
hc_xAxis(title = list(text = "Fecha (colocar el apuntador sobre
las gráficas)"))%>%
hc_legend(align = "right", verticalAlign = "top",
layout = "vertical") %>%
hc_tooltip(valueDecimals=4) %>%
hc_exporting(enabled = TRUE,
filename = "datos",
buttons = list(contextButton = list(menuItems = myMenuItems)))
A partir de esta constatación y dada la naturaleza de largo plazo entre estas variables se procedió a un test de cointegración para intentar entender la relación de largo plazo entre estas.
Antes de proceder en este análisis se averiguó el orden de integración de cada serie para asegurar que tuvieran el mismo orden y que ese fuera estrictamente mayor que 0. Para hacer eso se utilizaron distintos test de raíz unitaria como el de Dickey-Fuller Aumentado, que realiza un test estadístico t en el parámetro \(\Phi\) de la ecuación \(2\) bajo la hipótesis nula que el parámetro sea igual a \(0\), el KPSS [6] y el ADF-GLS, una variante del ADF donde el parámetro \(\mu_t\) relativo a la parte determinística de la ecuación. Los parámetros en este último caso vienen estimados por medio de un método generalizado de momentos en la primera etapa, y en la segunda etapa una regresión ADF viene efectuada utilizando los residuales de la primera etapa [3]. Esto permite un mayor poder estadístico y una estimación más eficiente. La extensión utilizada en este trabajo fue la de Perron [8]
\[
\Delta y_{t}=\mu_{t}+\varphi y_{t-1}+\sum_{i=1}^{p} y_{i} \Delta y_{t-i}+\epsilon_{t}\;\;(2)
\]
Diferencia del logaritmo de las series
myMenuItems <- c("downloadPNG", "downloadJPEG", "downloadPDF", "downloadCSV" )
highchart(type = "stock")%>%
hc_add_series(name= "PIB",
diff(pib_xts))%>%
hc_add_series(
diff(cfa_xts),
name = "Capital fijo"
)%>%
hc_add_series(
diff(pea_xts),
name = "Pop. Eco. Act."
)%>%
hc_add_series(
diff(gp_xts),
name = "Gasto público"
)%>%
hc_add_series(
diff(imp_xts),
name = "Importaciones"
)%>%
hc_add_series(
diff(exp_xts),
name = "Exportaciones"
)%>%
hc_add_theme(hc_theme_economist())%>%
hc_title(text = "Diferencia series en logaritmos")%>%
#margin = 20, align = "left",
#style = list(color = "#90ed7d", useHTML = TRUE)) %>%
hc_subtitle(text = "2005-2020")%>%
# align = "left",
# style = list(color = "#2b908f", fontWeight = "bold")) %>%
hc_yAxis(title = list(text = "log"))%>%
hc_xAxis(title = list(text = "Fecha (colocar el apuntador sobre
las gráficas)"))%>%
hc_legend(align = "right", verticalAlign = "top",
layout = "vertical") %>%
hc_tooltip( valueDecimals=4) %>%
hc_exporting(enabled = TRUE,
filename = "datos",
buttons = list(contextButton = list(menuItems = myMenuItems)))
Una vez realizados estos test se definió el orden “optimo” de lags a considerar por medio de unos criterios de información, entre los cuales el BIC, el AIC y el de Hannan-Quinn (HQC), especificado en la ecuación \(3\), que se utilizó como referencia.
\[
HQC = n log (\frac{RSS}{N}) + 2k log n\;\;\;(3)
\]
Una vez identificados los lags a incluir en el modelo se realizó un test de Jhoansen para definir el número de vectores cointegrantes. Una vez definido el rango de cointegración por medio del \(\lambda-max\), se procedió a la estimación de un modelo VECM.
Existía una vieja dicotomía entre (a) modelos estructurales que representaban fielmente la teoría macroeconómica pero no se ajustaban a los datos, y (b) modelos de series de tiempo que se adaptaban con precisión a los datos pero eran difíciles, si no imposibles, de interpretar en términos económicos. Los modelos VECM rompen esta dicotomía pues permiten un equilibrio entre relaciones económicas y especificaciones de series de tiempo.
Por medio de este modelo se obtuvieron así tanto las relaciones de corto como de largo plazo entre las variables de interés además se pudo analizar las funciones de impulsos y respuesta de las principales determinantes del PIB así de averiguar los potenciales cambios en ese último a partir de políticas específicas.
Finalmente se procedió también con una estimación de un modelo VAR considerando las primeras diferencias de las series de tiempo de interés. Un VAR es una estructura cuyo objetivo es modelar la persistencia en el tiempo de un vector de \(n\) series de tiempo, \(y_t\), que vienen modeladas según la siguiente especificación:
\[
y_{t}=A_{1} y_{t-1}+A_{2} y_{t-2}+\cdots+A_{p} y_{t-p}+B x_{t}+\epsilon_{t}\;\;\;(4)
\]
Para cada variable del sistema se realiza automáticamente una prueba F, en la que la hipótesis nula es que ningún rezago de la variable j es significativo en la ecuación de la variable i. Esto se conoce comúnmente como prueba de causalidad de Granger.
Modelo empírico y resultados
Como previamente descrito empezamos nuestro análisis con una regresión ingenua estimada por OLS. los resultados vienen reportados en la tabla
Analizando pero visualmente las series de tiempo de nuestras variables de interés, reportadas en la gráfica siguientes, se nota que podría existir un componente de tendencia que invalidaría los supuestos del método de mínimos cuadrados.
Se procedió por lo tanto a algunos test de raíz unitaria (KPSS,ADF, ADF-GLS) para constatar si las series resultaran no estacionarios. Los resultados del ADF para las primeras diferencias respectivamente de PIB, Capital Real ajustado, Población Económicamente Activa, Gasto gubernamental, Importaciones y Exportaciones vienen aquí reportados. Podemos notar que se rechaza la hipótesis nula y por lo tanto todas las series son estacionarias en sus primeras diferencias. Los resultados del test para las variables a niveles es reportada en apéndice, para todas no se puede rechazar la hipótesis nula a un nivel de significatividad del \(5\%\). Los demás test se pueden consultar en el código y confirman los resultados estadísticos obtenidos con los ADF. Las series por lo tanto resultan todas integradas de orden 1 \(I(1)\).
Se procedió entonces a la identificación del número “óptimo” de lags que resultaron ser \(2\), como reportado en la siguiente tabla.
1 |
1374.56085 |
|
-44.418695 |
-42.952654 |
-43.845246 |
2 |
1459.06822 |
0.00000 |
-46.035607 |
-43.312959* |
-44.970630* |
3 |
1506.87865 |
0.00000 |
-46.429288* |
-42.450034 |
-44.872783 |
4 |
1534.33709 |
0.02260 |
-46.144570 |
-40.908708 |
-44.096536 |
El análisis siguió con el test de Johansen para definir el número de vectores cointegrantes.
0 |
0.50774 |
122.25 |
\[0.0002\] |
1 |
0.40738 |
78.312 |
\[0.0079\] |
2 |
0.28186 |
45.874 |
\[0.0746\] |
3 |
0.21216 |
25.346 |
\[0.1539\] |
4 |
0.11533 |
10.561 |
\[0.2442\] |
Analizando los p-valores del test de la traza el primer renglón para el cual no se rechaza la hipótesis nula es el número \(3\). por lo tanto implementaremos un VECM con una combinación lineal de 3 variables que representará el término de corrección.
Los resultados del VECM de rango 3 con 2 lags se reportan en las siguientes tablas.
Cointegrating vectors (standard errors in parentheses)
logpib\(_{t-1}\) |
1.00000 |
0.000000 |
0.000000 |
|
(0.000000) |
(0.000000) |
(0.000000) |
logcaprea\(_{t-1}\) |
0.000000 |
1.00000 |
0.000000 |
|
(0.000000) |
(0.000000) |
(0.000000) |
logpea\(_{t-1}\) |
0.000000 |
0.000000 |
1.00000 |
|
(0.000000) |
(0.000000) |
(0.000000) |
logimp\(_{t-1}\) |
−0.808998 |
−0.729501 |
0.104342 |
|
(0.110376) |
(0.0983724) |
(0.142211) |
logexp\(_{t-1}\) |
0.355114 |
0.811333 |
−0.0145863 |
|
(0.106402) |
(0.0948311) |
(0.137091) |
loggastpub\(_{t-1}\) |
−0.388319 |
−1.42939 |
−0.902166 |
|
(0.120083) |
(0.107024) |
(0.154718) |
Notamos por lo tanto que la ecuación de largo plazo, por cuanto concierne la determinación del Producto Interno Bruto, tendrá la siguiente estructura:
\[
\Delta y_{t}=\mu_{0}+\Pi y_{t-1}+\sum_{i=1}^{p-1} \Gamma_{i} \Delta y_{t-i}+\epsilon_{t}\;\;\;(4)
\]
Mientras la de corto plazo:
\[z_t = \beta'y_t\;\;(6)\]
Utilizando las primeras diferencias se estimó un modelo VAR para averiguar la Granger “causalidad”. Analizando la significatividad de las variables rezagadas \((l=2)\) con respecto al PIB notamos que la única significativa al \(10\%\) es la de las exportaciones. El gasto de gobierno resulta casi significativo. Considerando todas las variables en conjunto de igual forma parece haber un efecto de “causalidad” de Granger. los resultados son reportados en la siguiente tabla.
F-tests de restricciones 0
Todos los lags de d_logpib |
F(2,48)=2.09024 |
\[0.1348\] |
Todos los lags de d_logcaprea |
F(2,48)=0.61733 |
\[0.5436\] |
Todos los lags de d_logpea |
F(2,48)=0.239685 |
\[0.7878\] |
Todos los lags de d_logimp |
F(2,48)=0.938968 |
\[0.3981\] |
Todos los lags de d_logexp |
F(2,48)=2.50745 |
\[0.0921\] |
Todos los lags de d_loggastpub |
F(2,48)=2.12708 |
\[0.1303\] |
Todas las variables, lag 2 |
F(6,48)=1.96895 |
\[0.0888\] |
Averiguando la relación de causalidad de “Granger” inversa con respecto a las exportaciones, como podemos notar en la siguiente tabla, la hipótesis nulas no vienen rechazadas. Por lo tanto podemos suponer que el PIB no determina las exportaciones.
F-tests de restricciones 0
Todos los lags de d_logpib |
F(2,48)=0.882459 |
\[0.4204\] |
Todos los lags de d_logcaprea |
F(2,48)=0.269149 |
\[0.7652\] |
Todos los lags de d_logpea |
F(2,48)=0.478677 |
\[0.6225\] |
Todos los lags de d_logimp |
F(2,48)=1.13872 |
\[0.3287\] |
Todos los lags de d_logexp |
F(2,48)=1.74124 |
\[0.1862\] |
Todos los lags de d_loggastpub |
F(2,48)=1.20135 |
\[0.3097\] |
Todas las variables, lag 2 |
F(6,48)=1.24355 |
\[0.3013\] |
Los demás resultados de los test de causalidad de Granger son reportados en apéndice no resultan significativos.
Finalmente a partir de estos resultados analizamos las funciones impulsos y respuestas del modelo VECM por cuanto concierne las importaciones, las exportaciones y el gasto público. Los efectos a 30 trimestres vienen reportados en las siguientes figuras.
Podemos notar de las funciones impulso respuesta que tanto por cuanto concierne el gasto público como por las exportaciones, un shock positivo determina un inicial disminución del PIB, pero un su aumento a largo plazo. Al contrario un aumento exógeno de las importaciones tiene el efecto contrario: un inicial aumento del PIB pero una suya disminución a largo plazo.
Por último en la siguiente figura se reportó una previsión del logaritmo del PIB para los próximos 18 años, estimado por medio del modelo VECM.
Notamos como la serie histórica es aproximada suficientemente bien por los valores ajustados del modelo VECM, aunque la crisis causada por el COVID 19 no logra un buen ajuste, probablemente por el carácter único y disruptivo desde el lado de la demanda y de la oferta de esta crisis. La proyección muestra una rápida recuperación que, pero tendrá una reversión para luego proceder con un crecimiento en un sendero estable que Se podría por lo tanto suponer que la crisis del SARS-CoV-2 determinó un quiebre estructural en el crecimiento mexicano que podría indicar un proceso de histéresis con un impacto permanente de esta crisis aún cuando este fenómeno ya se haya disipado.
Conclusiones
Notamos como la serie histórica es aproximada suficientemente bien por los valores ajustados del modelo VECM, aunque la crisis causada por el COVID 19 no logra un buen ajuste, probablemente por el carácter único y disruptivo desde el lado de la demanda y de la oferta de esta crisis. La proyección muestra una rápida recuperación que, pero tendrá una reversión para luego proceder con un crecimiento en un sendero estable que Se podría por lo tanto suponer que la crisis del SARS-CoV-2 determinó un quiebre estructural en el crecimiento mexicano que podría indicar un proceso de histéresis con un impacto permanente de esta crisis aún cuando este fenómeno ya se haya disipado.
Por cuanto concierne el modelo de determinación del crecimiento los datos de las últimas dos décadas parecen sugerir validar la hipótesis de un modelo de e crecimiento impulsado por las exportaciones (CIE). La “causalidad” de Granger mostró como los valores rezagados de las exportaciones resultan significativos estadísticamente en la determinación del PIB, mientras lo contrario no resulta verdadero. El análisis impulso respuesta muestra como un shock positivo en las exportaciones podría tener un impacto positivo a largo plazo en el crecimiento de México.
Con respecto a un aumento del gasto gubernamental, este muestra un efecto negativo en el corto plazo pero positivo a largo plazo. Las importaciones muestran mientras un comportamiento opuesto.
El análisis de las proyecciones del PIB con base en el modelo VECM parecen mostrar un quiebre estructural en el crecimiento de México causado por la crisis del COVID-19, satisfaciendo la hipótesis de histéresis de impacto permanente de la crisis económico-sanitaria en el desarrollo del país.
A partir de estas consideraciones creemos que el crecimiento mexicano, fuertemente golpeado por la crisis del SARS-CoV-2, podría recibir impulso y beneficios de un aumento en el gasto público, y el relativo abandono de la política de austeridad, y en una ulterior abertura hacía nuevo partners comerciales, fortaleciendo así las exportaciones y disminuyendo al mismo tiempo la dependencia del mercado de Estados Unidos.
Presentación
Bibliografía
[1] Robert J Barro.((Government spending in a simple model of endogeneous growth)). En:Journal ofpolitical economy98.5, Part 2 (1990), S103-S125.
[2] Sebastian Edwards.((Openness, productivity and growth: what do we really know?))En:Theeconomic journal108.447 (1998), p ́ags. 383-398.
[3] Graham Elliott, Thomas J Rothenberg y James H Stock.Efficient tests for an autoregressive unitroot. Inf. t ́ec. National Bureau of Economic Research, 1992.
[4] Elhanan Helpman y Paul R Krugman.Market structure and foreign trade: Increasing returns,imperfect competition, and the international economy. MIT press, 1985.
[5] Paul Krugman.((Import protection as export promotion)). En:H. Kierzkowslci, ed(1984).
[6] Denis Kwiatkowski y col.((Testing the null hypothesis of stationarity against the alternative of aunit root: How sure are we that economic time series have a unit root?))En:Journal of econometrics54.1-3 (1992), p ́ags. 159-178.
[7] Robert Z Lawrence y David E Weinstein.((Trade and growth: import-led or export-led? Evidencefrom Japan and Korea)). En:Rethinking the East Asian Miracle(2001), p ́ags. 379-408.
[8] Serena Ng y Pierre Perron.((Lag length selection and the construction of unit root tests with goodsize and power)). En:Econometrica69.6 (2001), p ́ags. 1519-1554.
[9] Miguel D Ramirez y Nader Nazmi.((Public investment and economic growth in Latin America: Anempirical test)). En:Review of Development Economics7.1 (2003), p ́ags. 115-126.
[10] Edmund J Sheehey.((Exports and growth: additional evidence)). En:The Journal of DevelopmentStudies28.4 (1992), p ́ags. 730-734.
LS0tCnRpdGxlOiAiRGV0ZXJtaW5hbnRlcyBkZWwgY3JlY2ltaWVudG8gZWNvbsOzbWljbyBkZSBNw6l4aWNvOiBVbiBlbmZvcXVlIGRlIGNvaW50ZWdyYWNpw7NuIgphdXRob3I6ICJGZWRlcmljbyBEYXZlcmlvLCBSYWZhZWwgTWFydMOtbmV6IE1hcnTDrW5leiIKb3V0cHV0OiAKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKICAgICNudW1iZXJfc2VjdGlvbnM6IHRydWUKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgIGNvZGVfZm9sZGluZzogaGlkZQotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFKQpgYGAKCgoKCmBgYHtyfQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGx1YnJpZGF0ZSkKbGlicmFyeShvcGVueGxzeCkKbGlicmFyeShEVCkKbGlicmFyeShkYXRhLnRhYmxlKQpsaWJyYXJ5KHh0cykKbGlicmFyeSh6b28pCmxpYnJhcnkodXJjYSkKbGlicmFyeSh0c2VyaWVzKQpsaWJyYXJ5KHh0cykKbGlicmFyeShmb3JlY2FzdCkKbGlicmFyeShhc3RzYSkKbGlicmFyeSh2YXJzKQpsaWJyYXJ5KHN0YXJnYXplcikKbGlicmFyeSh0c0R5bikKYGBgCgoKYGBge3IsIGxlZXJfZGF0b3NfY29udGFnaW9zfQpkYXRhIDwtIHJlYWQueGxzeCgiRGF0b3MvdjIwMDV2Mi54bHN4IiwKICAgICAgICAgICAgICAgICAgZGV0ZWN0RGF0ZXMgPSBUUlVFKQoKCnBpYl94dHM8LXh0cyhkYXRhJGxvZ3BpYiwKICAgICAgICAgICAgICAgICBvcmRlci5ieSA9IGRhdGEkRkVDSEEpCgpjZmFfeHRzPC14dHMoZGF0YSRsb2djYXByZWEsCiAgICAgICAgICAgICAgICAgb3JkZXIuYnkgPSBkYXRhJEZFQ0hBKQoKcGVhX3h0czwteHRzKGRhdGEkbG9ncGVhLAogICAgICAgICAgICAgICAgIG9yZGVyLmJ5ID0gZGF0YSRGRUNIQSkKCmdwX3h0czwteHRzKGRhdGEkbG9nZ2FzdHB1YiwKICAgICAgICAgICAgICAgICBvcmRlci5ieSA9IGRhdGEkRkVDSEEpCgppbXBfeHRzPC14dHMoZGF0YSRsb2dpbXAsCiAgICAgICAgICAgICAgICAgb3JkZXIuYnkgPSBkYXRhJEZFQ0hBKQoKZXhwX3h0czwteHRzKGRhdGEkbG9nZXhwLAogICAgICAgICAgICAgICAgIG9yZGVyLmJ5ID0gZGF0YSRGRUNIQSkKCmRhdGFfeHRzIDwtIGRhdGEuZnJhbWUocGliID0gcGliX3h0cywgY2ZhID0gY2ZhX3h0cywgcGVhID0gcGVhX3h0cywKICAgICAgICAgICAgICAgICAgICAgICBncCA9IGdwX3h0cywgaW1wID0gaW1wX3h0cywgZXhwID0gZXhwX3h0cykKI3BpYl94dHMKI2NmYV94dHMKI3BlYV94dHMKI2dwX3h0cwojaW1wX3h0cwojZXhwX3h0cwpgYGAKCgojIEludHJvZHVjY2nDs24KPGRpdiBpZD0ianVzdGlmaWNhciI+CgpFbiBsYSBsaXRlcmF0dXJhIGVtcMOtcmljYSBleGlzdGUgdW4gZGViYXRlIGRlcyBoYWNlIHZhcmlhcyBkZWNhZGFzIHNvYnJlIGxhIGRpcmVjY2nDs24gZW4gbGEgcmVsYWNpw7NuIGNhdXNhbCBlbnRyZSBsYSBhYmVydHVyYSBoYWPDrWEgZWwgY29tZXJjaW8gaW50ZXJuYWNpb25hbCBkZSB1biBwYcOtcyB5IHN1IGNyZWNpbWllbnRvIGVjb27Ds21pY28uIEFsZ3Vub3MgYWNhZMOpbWljb3Mgc29zdGllbmVuIHF1ZSBsb3MgdHJhdGFkb3MgY29tZXJjaWFsZXMgaW50ZXJuYWNpb25hbGVzIGZhdm9yZWNlbiBlIGltcHVsc2FuIGVsIGNyZWNpbWllbnRvIGRlIGxhIGVjb25vbcOtYSBbMl0uIEVzdG9zIG1vZGVsb3Mgc2UgZGVmaW5lbiBjb21vIGRlIGNyZWNpbWllbnRvIGltcHVsc2FkbyBwb3IgbGFzIGV4cG9ydGFjaW9uZXMgKENJRSkgeSBzZSBmdW5kYW1lbnRhbiBlbiBsYXMgZXh0ZXJuYWxpZGFkZXMgcG9zaXRpdmFzIHJlc3VsdGFudGVzIGRlIHVuYSBtZWpvciBhc2lnbmFjacOzbiBkZSBsb3MgcmVjdXJzb3MsIGxhIHBvc2liaWxpZGFkIGRlIGVjb25vbcOtYXMgZGUgZXNjYWxhcyB5IHVuIGluY3JlbWVudG8gZGVsIGNyZWNpbWllbnRvIHRlY25vbMOzZ2ljbyBkZWJpZG8gYSB1biBjb250ZXh0byBtw6FzIGNvbXBldGl0aXZvIFs0XS4gT3Ryb3MgZXN0dWRpb3MsIGFsIGNvbnRyYXJpbywgY29uc2lkZXJhbiBxdWUgc29uIGxhcyBleHBvcnRhY2lvbmVzIGxhcyBxdWUgZGV0ZXJtaW5hbiBlbCBjcmVjaW1pZW50byBlY29uw7NtaWNvLCB5IGxvcyBtb2RlbG9zIHNlIGRlZmluZW4gY29tbyBkZSBleHBvcnRhY2lvbmVzIGltcHVsc2FkYXMgcG9yIGVsIGNyZWNpbWllbnRvIChFSUMpLiBFbiBlc3RlIGNhc28gdW4gYXVtZW50byBlbiBsYSBwcm9kdWN0aXZpZGFkIGxvY2FsIHBvciBtZWpvcsOtYXMgdGVjbm9sw7NnaWNhcyBvIGVuIGVsIGNhcGl0YWwgaHVtYW5vIGltcHVsc2Fyw61hIGxhcyBleHBvcnRhY2lvbmVzIHkgcG9yIGVuZGUgZWwgY3JlY2ltaWVudG8gWzVdLiBGaW5hbG1lbnRlIHVuYSB0ZXJjZXJhIGhpcMOzdGVzaXMgYXZhbnphZGEgcG9yIGxhIGFjYWRlbWlhIGVzIHF1ZSBlbCBjcmVjaW1pZW50byB0ZW5nYSBjb21vIGRldGVybWluYW50ZSBwcmluY2lwYWwgZWwgYXVtZW50byBkZSBsYXMgaW1wb3J0YWNpb25lcyhDSUkpLiBTZWfDum4gZXN0YSB0ZW9yw61hIGVsIGNyZWNpbWllbnRvIGVuZMOzZ2VubyBzZSB2ZSBmYXZvcmVjaWRvIHBvciBsYSBwb3NpYmlsaWRhZCBwYXJhIGxhcyBlbXByZXNhcyBsb2NhbGVzIGRlIGFjY2VkZXIgYSBwcm9kdWN0b3Mgc2VtaWFjYWJhZG9zIHkgdGVjbm9sb2fDrWFzIGV4dHJhbmplcmFzIG1lam9yYW5kbyBzdSBjb21wZXRpdGl2aWRhZCBpbnRlcm5hY2lvbmFsIFs3XS4gRW4gTcOpeGljbyBhIHBhcnRpciBkZSBsb3MgYcOxb3MgODAgbGEgcG9sw610aWNhIGRlIGFwZXJ0dXJhIGZyZW50ZSBhbCByZXN0byBkZWwgbXVuZG8sIHByb21vdmlkYSBwb3IgbGEgcHJlc2lkZW5jaWEgZGUgTWlndWVsIGRlIGxhIE1hZHJpZCBIdXJ0YWRvLCBkZXRlcm1pbmEgdW4gY2FtYmlvIHN1c3RhbmNpYWwgY29uIHJlc3BlY3RvIGFsIHByZWNlZGVudGUgbW9kZWxvIGRlIHN1c3RpdHVjacOzbiBkZSBsYXMgaW1wb3J0YWNpb25lcyB5IG1hcmNhIGVsIGNhbWlubyBlbiBsYSBkZWZpbmljacOzbiBkZSBsYSBwb2zDrXRpY2EgbWFjcm9lY29uw7NtaWNhIG1leGljYW5hIHNpZW1wcmUgbcOhcyB2b3RhZGEgaGFjw61hIHVuIG1vZGVsbyBhYmllcnRvLCBjb24gbGEgZmlybWEgZGVsIEdBVFQgKDE5ODYpLCBlbCBOQUZUQSAoMTk5NikgeSByZWNpZW50ZW1lbnRlIGNvbiBsYSByYXRpZmljYWNpw7NuIGRlbCBULU1FQy4gQSBwYXJ0aXIgZGUgZXN0ZSBleCBjdXJzdXMgaGlzdMOzcmljbyBub3MgcHJlZ3VudGFtb3Mgc2kgZWZlY3RpdmFtZW50ZSBlc3RhIGFiZXJ0dXJhIGZhdm9yZWNpw7MgZWwgY3JlY2ltaWVudG8gZGUgbGEgZWNvbm9tw61hIG1leGljYW5hLiAKCk90cm8gZmFjdG9yIHJlbGV2YW50ZSwgY3VhbmRvIGNvbnNpZGVyYW1vcyBsb3MgbW9kZWxvcyBkZSBjcmVjaW1pZW50bywgZXMgZWwgcGFwZWwgZGVsIGdhc3RvIHDDumJsaWNvIGNvbW8gbW90b3IgZGVsIGRlc2Fycm9sbG8gZWNvbsOzbWljby4gU2llbXByZSBhIHBhcnRpciBkZSBsb3MgYcOxb3MgODAsIGZyZW50ZSBhIGxhIF9fZMOpY2FkYSBwZXJkaWRhX18sIHNlIG1vZGlmaWPDsyB0YW1iacOpbiBsYSBmdW5jacOzbiBkZWwgZXN0YWRvIGNvbiByZXNwZWN0byBhIGxhIGVjb25vbcOtYSwgcGFzYW5kbyBkZSB1biBtb2RlbG8gZG9uZGUgZXN0ZSBjb250cm9sYWJhIGxvcyBzZWN0b3JlcyBlY29uw7NtaWNvcyBlc3RyYXTDqWdpY29zIGEgdW5vIG5lb2xpYmVyYWwsIHByZWRvbWluYWRvIHBvciBsYSBlY29ub23DrWEgZGUgbWVyY2Fkby4gSnVzdGlmaWNhZG8gcG9yIGxhcyBpbmVmaWNpZW5jaWFzIHkgZmFsbGFzIGRlIGxhcyBnZXN0aW9uZXMgZGUgbG9zIGdvYmllcm5vcyBhbnRlcmlvcmVzLCBsYSByZWR1Y2Npw7NuIGRlIGxhcyBmdW5jaW9uZXMgZGVsIGVzdGFkbyBmdWUgYWNvbXBhw7FhZGEgcG9yIGxhIGltcGxlbWVudGFjacOzbiBkZSBzZXZlcmFzIHBvbMOtdGljYXMgZGUgZXN0YWJpbGl6YWNpw7NuIG1hY3JvZWNvbsOzbWljYSBxdWUgbGxldsOzIGEgdW4gbWFzaXZvIHJlY29ydGUgZGVsIGdhc3RvIHDDumJsaWNvIGVuIGluZnJhZXN0cnVjdHVyYSBlY29uw7NtaWNhIHkgc29jaWFsLCBhZGVtw6FzIGRlIGxhIHZlbnRhIGRlIGxhIG1heW9yw61hIGRlIGxhcyBlbXByZXNhcyBwYXJhZXN0YXRhbGVzLiBIb3kgZW4gZMOtYSwgbGEgaW52ZXJzacOzbiBlc3RhdGFsIHNlIGVuY3VlbnRyYSBkZSBudWV2byBhbCBjZW50cm8gZGUgbGEgZGlzY3VzacOzbiBww7pibGljYSBwb3IgbGEgcG9sw610aWNhIGRlIGF1c3RlcmlkYWQgcHJvbW92aWRhIHBvciBlbCBnb2JpZXJubyBkZSBBbmRyw6lzIE1hbnVlbCBMw7NwZXogT2JyYWRvci4gRW4gZXN0ZSB0cmFiYWpvIHNlIGludGVudGFyw6EgY29tcHJlbmRlciBsYSByZWxhY2nDs24gZW50cmUgZXN0YSB5IGVsIGNyZWNpbWllbnRvIGVjb27Ds21pY28sIG1pZW50cmFzIHBvciBhbGd1bm9zIGVjb25vbWlzdGFzIGVzdGUgcHVlZGUgdGVuZXIgdW4gZWZlY3RvIHBvc2l0aXZvIGVuIGxhIGVjb25vbcOtYSBbOV0gcG9yIG90cm9zIGVsIGltcGFjdG8gYSBsYXJnbyBwbGF6byBlcyBuZWdhdGl2byBbMV0uICAgICAgICAgCgo8L2Rpdj4KCiMgTW9kZWxvIHRlw7NyaWNvIHkgZGF0b3MKCjxkaXYgaWQ9Imp1c3RpZmljYXIiPgpQYXJhIGludGVudGFyIGVudGVuZGVyIGxvcyBlZmVjdG9zIGRlIGxhIGJhbGFuemEgY29tZXJjaWFsIChpbXBvcnRhY2lvbmVzL2V4cG9ydGFjaW9uZXMpIHkgZGVsIGdhc3RvIHDDumJsaWNvIGVuIGNyZWNpbWllbnRvIGRlbCBQcm9kdWN0byBJbnRlcm5vIEJydXRvLCBzZSBpbmNvcnBvcmFyb24gZXN0b3MgZWxlbWVudG9zIGEgbGEgZnVuY2nDs24gZGUgcHJvZHVjY2nDs24gYWdyZWdhZGEsIHByb3B1ZXN0byBlbnRyZSBvdHJvcywgcG9yIFNoZWVoZXkgWzEwXS4gTGEgZnVuY2nDs24gYXVtZW50YWRhIGRlIHByb2R1Y2Npw7NuIHBvciBsbyB0YW50byB0ZW5kcsOhIGxhIHNpZ3VpZW50ZSBlc3BlY2lmaWNhY2nDs246CgokJCBZPUZbKEssTCk7R1AsWCxNXSQkCgpEb25kZSAkWSQgcmVwcmVzZW50YSBlbCBQSUIsICRLJCBlbCBjYXBpdGFsIG5ldG8gcmVhbCwgJEdQJCBlbCBnYXN0byBww7pibGljbywgJFgkIGxhcyBleHBvcnRhY2lvbmVzIHJlYWxlcyB5ICRNJCBsYXMgaW1wb3J0YWNpb25lcyByZWFsZXMuIEVuIGxhIGVzdHJ1Y3R1cmFjacOzbiBtw6FzIHNlbmNpbGxhIGVsIG1vZGVsbyBzZSBhc3VtacOzIGNvbW8gbGluZWFsIHkgYWRpdGl2by4gCgpSZXNwZWN0byBhIGxvcyBkYXRvcyB1dGlsaXphZG9zLCBzZSBjb25zdHJ1eWVyb24gdW5hcyBzZXJpZXMgZGUgdGllbXBvIGNvbiBmcmVjdWVuY2lhIHRyaW1lc3RyYWwgYSBwYXJ0aXIgZGVsICQxLTIwMDUkIGhhc3RhIMOpbCAkNC0yMDIwJCBwYXJhIGNhcHR1cmFyIGxhcyByZWxhY2lvbmVzIF9fY29udGVtcG9yw6FuZWFzX18gZW50cmUgbGFzIGRpc3RpbnRhcyB2YXJpYWJsZXMuIExvcyBkYXRvcyBmdWVyb24gZGVzZXN0YWNpb25hbGl6YWRvcyB5IHRyYW5zZm9ybWFkb3MgbG9nYXLDrXRtaWNhbWVudGUgcGFyYSBtaXRpZ2FyIGVmZWN0b3MgZGUgZXNjYWxhLiBQYXJhIGxhcyBlc3RpbWFjaW9uZXMgc2UgdXRpbGl6YXJvbiBkYXRvcyBkZSBJTkVHSS4gRW4gcGFydGljdWxhciBzZSB1dGlsaXphcm9uIGxvcyBzaWd1aWVudGVzIGluZGljYWRvcmVzOgoKCiAtICRZOiQgUHJvZHVjdG8gaW50ZXJubyBicnV0byAoUElCIHkgY3VlbnRhcyBuYWNpb25hbGVzKQogLSAgJEs6JCBGb3JtYWNpw7NuIGNhcGl0YWwgZmlqbyByZWFsIGFqdXN0YWRvIChTaXN0ZW1hcyBkZSBjdWVudGFzIG5hY2lvbmFsZXMpCiAtICAkTDokIFBvYmxhY2nDs24gZWNvbsOzbWljYW1lbnRlIGFjdGl2YSAoRU5PRS9FVE9FKQogLSAgJEdQOiQgQ29uc3VtbyBkZSBnb2JpZXJubyAoT2ZlcnRhIHkgRGVtYW5kYSBHbG9iYWwgVHJpbWVzdHJhbCkKIC0gJFg6JCBFeHBvcnRhY2nDs24gZGUgYmllbmVzIHkgc2VydmljaW9zIChPZmVydGEgeSBkZW1hbmRhIGdsb2JhbCBkZSBiaWVuZXMgeSBzZXJ2aWNpb3MpCiAtICRNOiQgSW1wb3J0YWNpw7NuIGRlIGJpZW5lcyB5IHNlcnZpY2lvcyAoT2ZlcnRhIHkgZGVtYW5kYSBnbG9iYWwgZGUgYmllbmVzIHkgc2VydmljaW9zKQogCgpVbmEgdmV6IGRlc2NyaXRhcyBsYXMgdmFyaWFibGVzIGRlIGludGVyw6lzLCBlbiBsYSBwcsOzeGltYSBzZWNjacOzbiBhbmFsaXphcmVtb3MgZWwgbW9kZWxvIGVtcMOtcmljbyB1dGlsaXphZG8sIGFsIGZpbiBkZSBlbmNvbnRyYXIgbGFzIHJlbGFjaW9uZXMgYSBjb3J0byB5IGxhcmdvIHBsYXpvIGVudHJlIGVzdGFzLgoKCiMgTWV0b2RvbG9nw61hIGRlIGVzdGltYWNpw7NuCgpFbCBwcmltZXIgbW9kZWxvIG5haWYgcXVlIHNlIHV0aWxpesOzIHBhcmEgaW50ZW50YXIgZXN0aW1hciBsYSByZWxhY2nDs24gZW50cmUgbGFzIHZhcmlhYmxlcyBkZSBpbnRlcsOpcyBmdWUgdW5vIGRlIG3DrW5pbW9zIGN1YWRyYWRvcyBvcmRpbmFyaW9zIGNvbiBlcnJvcmVzIHJvYnVzdG9zLCBkb25kZSBsYSBmb3JtYSBmdW5jaW9uYWwgYWRvcHRhZGEgZnVlIGRlIHRpcG8gbGluZWFsIHkgYWRpdGl2YSBjb21vIGVzcGVjaWZpY2FkbyBlbiBsYSBlY3VhY2nDs24gJDEkOgoKJCQKICAgWT0gXGJldGFfMCArIFxiZXRhXzEgSyArIFxiZXRhXzIgTCArIFxiZXRhXzMgR1AgKyBcYmV0YV80IFggKyBcYmV0YV81IE0gKyBcZXBzaWxvbiBcO1w7XDsoMSkKJCQKCmBgYHtyfQptPC0gbG0obG9ncGlifmxvZ2NhcHJlYSArIGxvZ3BlYSArIGxvZ2dhc3RwdWIgKyBsb2dpbXAgKyBsb2dleHAsCiAgICAgICAgZGF0YT0gZGF0YSkKCnN0YXJnYXplcihtLCB0eXBlID0gInRleHQiKQpgYGAKCgoKRWwgYW7DoWxpc2lzIGdyw6FmaWNvIGRlIGxvcyBpbmRpY2Fkb3JlcyBwYXJlY2UgbW9zdHJhciB1biBlbGVtZW50byBkZSB0ZW5kZW5jaWEgcXVlIGludmFsaWRhIGVsIHVzbyBkZSBPTFMgcGFyYSBsYSBlc3RpbWFjacOzbiBkZSBsb3MgcGFyw6FtZXRyb3MgeSBxdWUgbGxldmFyw61hIGEgbGEgaWRlbnRpZmljYWNpw7NuIGRlIHJlbGFjaW9uZXMgZXNwdXJpYXMgc2llbmRvIHF1ZSBsb3Mgc3VwdWVzdG9zIGRlIE1hcmtvdiBubyBzZSBjdW1wbGlyw61hbi4gIAoKIyMjIExvZ2FyaXRtbyBkZSBsYXMgc2VyaWVzCgpgYGB7cn0KbXlNZW51SXRlbXMgPC0gYygiZG93bmxvYWRQTkciLCAiZG93bmxvYWRKUEVHIiwgImRvd25sb2FkUERGIiwgImRvd25sb2FkQ1NWIiApCgogaGlnaGNoYXJ0KHR5cGUgPSAic3RvY2siKSU+JSAKICBoY19hZGRfc2VyaWVzKG5hbWU9ICJQSUIiLAogICAgICAgICAgICAgICAgcGliX3h0cyklPiUKICBoY19hZGRfc2VyaWVzKAogICAgY2ZhX3h0cywKICAgIG5hbWUgPSAiQ2FwaXRhbCAgZmlqbyIKICApJT4lCmhjX2FkZF9zZXJpZXMoCiAgICBwZWFfeHRzLAogICAgbmFtZSA9ICJQb3AuIEVjby4gQWN0LiIKICApJT4lCiAgIGhjX2FkZF9zZXJpZXMoCiAgICBncF94dHMsCiAgICBuYW1lID0gIkdhc3RvIHDDumJsaWNvIgogICklPiUKICAgaGNfYWRkX3NlcmllcygKICAgIGltcF94dHMsCiAgICBuYW1lID0gIkltcG9ydGFjaW9uZXMiCiAgKSU+JQogICBoY19hZGRfc2VyaWVzKAogICAgZXhwX3h0cywKICAgIG5hbWUgPSAiRXhwb3J0YWNpb25lcyIKICApJT4lCmhjX2FkZF90aGVtZShoY190aGVtZV9lY29ub21pc3QoKSklPiUKICBoY190aXRsZSh0ZXh0ID0gIlNlcmllcyBlbiBsb2dhcml0bW9zIiklPiUKICAgICAgICAgICAjbWFyZ2luID0gMjAsIGFsaWduID0gImxlZnQiLAogICAgICAgICAgICNzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzkwZWQ3ZCIsIHVzZUhUTUwgPSBUUlVFKSkgJT4lIAogIGhjX3N1YnRpdGxlKHRleHQgPSAiMjAwNS0yMDIwIiklPiUKICAgICAgICAgICAgICMgYWxpZ24gPSAibGVmdCIsCiAgICAgICAgICAgICMgIHN0eWxlID0gbGlzdChjb2xvciA9ICIjMmI5MDhmIiwgZm9udFdlaWdodCA9ICJib2xkIikpICU+JSAKICBoY195QXhpcyh0aXRsZSA9IGxpc3QodGV4dCA9ICJsb2ciKSklPiUKICBoY194QXhpcyh0aXRsZSA9IGxpc3QodGV4dCA9ICJGZWNoYSAoY29sb2NhciBlbCBhcHVudGFkb3Igc29icmUKICAgICAgICAgICAgICAgICAgICAgICAgbGFzIGdyw6FmaWNhcykiKSklPiUKICBoY19sZWdlbmQoYWxpZ24gPSAicmlnaHQiLCB2ZXJ0aWNhbEFsaWduID0gInRvcCIsCiAgICAgICAgICAgIGxheW91dCA9ICJ2ZXJ0aWNhbCIpICU+JQogICAgaGNfdG9vbHRpcCh2YWx1ZURlY2ltYWxzPTQpICU+JSAKICBoY19leHBvcnRpbmcoZW5hYmxlZCA9IFRSVUUsCiAgICAgICAgICAgICAgIGZpbGVuYW1lID0gImRhdG9zIiwKICAgICAgICAgICAgICAgYnV0dG9ucyA9IGxpc3QoY29udGV4dEJ1dHRvbiA9IGxpc3QobWVudUl0ZW1zID0gbXlNZW51SXRlbXMpKSkKCmBgYAoKQSBwYXJ0aXIgZGUgZXN0YSBjb25zdGF0YWNpw7NuIHkgZGFkYSBsYSBuYXR1cmFsZXphIGRlIGxhcmdvIHBsYXpvIGVudHJlIGVzdGFzIHZhcmlhYmxlcyBzZSBwcm9jZWRpw7MgYSB1biB0ZXN0IGRlIGNvaW50ZWdyYWNpw7NuIHBhcmEgaW50ZW50YXIgZW50ZW5kZXIgbGEgcmVsYWNpw7NuIGRlIGxhcmdvIHBsYXpvIGVudHJlIGVzdGFzLgoKQW50ZXMgZGUgcHJvY2VkZXIgZW4gZXN0ZSBhbsOhbGlzaXMgc2UgYXZlcmlndcOzIGVsIG9yZGVuIGRlIGludGVncmFjacOzbiBkZSBjYWRhIHNlcmllIHBhcmEgYXNlZ3VyYXIgcXVlIHR1dmllcmFuIGVsIG1pc21vIG9yZGVuIHkgcXVlIGVzZSBmdWVyYSBlc3RyaWN0YW1lbnRlIG1heW9yIHF1ZSAwLiBQYXJhIGhhY2VyIGVzbyBzZSB1dGlsaXphcm9uIGRpc3RpbnRvcyB0ZXN0IGRlIHJhw616IHVuaXRhcmlhIGNvbW8gZWwgZGUgRGlja2V5LUZ1bGxlciBBdW1lbnRhZG8sIHF1ZSByZWFsaXphIHVuIHRlc3QgZXN0YWTDrXN0aWNvIHQgZW4gZWwgcGFyw6FtZXRybyAkXFBoaSQgZGUgbGEgZWN1YWNpw7NuICQyJCBiYWpvIGxhIGhpcMOzdGVzaXMgbnVsYSBxdWUgZWwgcGFyw6FtZXRybyBzZWEgaWd1YWwgYSAkMCQsIGVsIEtQU1MgWzZdIHkgZWwgQURGLUdMUywgdW5hIHZhcmlhbnRlIGRlbCBBREYgZG9uZGUgZWwgcGFyw6FtZXRybyAkXG11X3QkIHJlbGF0aXZvIGEgbGEgcGFydGUgZGV0ZXJtaW7DrXN0aWNhIGRlIGxhIGVjdWFjacOzbi4gTG9zIHBhcsOhbWV0cm9zIGVuIGVzdGUgw7psdGltbyBjYXNvIHZpZW5lbiBlc3RpbWFkb3MgcG9yIG1lZGlvIGRlIHVuIG3DqXRvZG8gZ2VuZXJhbGl6YWRvIGRlIG1vbWVudG9zIGVuIGxhIHByaW1lcmEgZXRhcGEsIHkgZW4gbGEgc2VndW5kYSBldGFwYSB1bmEgcmVncmVzacOzbiBBREYgdmllbmUgZWZlY3R1YWRhIHV0aWxpemFuZG8gbG9zIHJlc2lkdWFsZXMgZGUgbGEgcHJpbWVyYSBldGFwYSBbM10uIEVzdG8gcGVybWl0ZSB1biBtYXlvciBwb2RlciBlc3RhZMOtc3RpY28geSB1bmEgZXN0aW1hY2nDs24gbcOhcyBlZmljaWVudGUuIExhIGV4dGVuc2nDs24gdXRpbGl6YWRhIGVuIGVzdGUgdHJhYmFqbyBmdWUgbGEgZGUgUGVycm9uIFs4XSAgCgokJAogICAgXERlbHRhIHlfe3R9PVxtdV97dH0rXHZhcnBoaSB5X3t0LTF9K1xzdW1fe2k9MX1ee3B9IHlfe2l9IFxEZWx0YSB5X3t0LWl9K1xlcHNpbG9uX3t0fVw7XDsoMikKJCQKCiMjIyBEaWZlcmVuY2lhIGRlbCBsb2dhcml0bW8gZGUgbGFzIHNlcmllcwpgYGB7cn0KbXlNZW51SXRlbXMgPC0gYygiZG93bmxvYWRQTkciLCAiZG93bmxvYWRKUEVHIiwgImRvd25sb2FkUERGIiwgImRvd25sb2FkQ1NWIiApCgogaGlnaGNoYXJ0KHR5cGUgPSAic3RvY2siKSU+JSAKICBoY19hZGRfc2VyaWVzKG5hbWU9ICJQSUIiLAogICAgICAgICAgICAgICAgZGlmZihwaWJfeHRzKSklPiUKICBoY19hZGRfc2VyaWVzKAogICAgZGlmZihjZmFfeHRzKSwKICAgIG5hbWUgPSAiQ2FwaXRhbCAgZmlqbyIKICApJT4lCmhjX2FkZF9zZXJpZXMoCiAgICBkaWZmKHBlYV94dHMpLAogICAgbmFtZSA9ICJQb3AuIEVjby4gQWN0LiIKICApJT4lCiAgIGhjX2FkZF9zZXJpZXMoCiAgICBkaWZmKGdwX3h0cyksCiAgICBuYW1lID0gIkdhc3RvIHDDumJsaWNvIgogICklPiUKICAgaGNfYWRkX3NlcmllcygKICAgIGRpZmYoaW1wX3h0cyksCiAgICBuYW1lID0gIkltcG9ydGFjaW9uZXMiCiAgKSU+JQogICBoY19hZGRfc2VyaWVzKAogICAgZGlmZihleHBfeHRzKSwKICAgIG5hbWUgPSAiRXhwb3J0YWNpb25lcyIKICApJT4lCmhjX2FkZF90aGVtZShoY190aGVtZV9lY29ub21pc3QoKSklPiUKICBoY190aXRsZSh0ZXh0ID0gIkRpZmVyZW5jaWEgc2VyaWVzIGVuIGxvZ2FyaXRtb3MiKSU+JQogICAgICAgICAgICNtYXJnaW4gPSAyMCwgYWxpZ24gPSAibGVmdCIsCiAgICAgICAgICAgI3N0eWxlID0gbGlzdChjb2xvciA9ICIjOTBlZDdkIiwgdXNlSFRNTCA9IFRSVUUpKSAlPiUgCiAgaGNfc3VidGl0bGUodGV4dCA9ICIyMDA1LTIwMjAiKSU+JQogICAgICAgICAgICAgIyBhbGlnbiA9ICJsZWZ0IiwKICAgICAgICAgICAgIyAgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiMyYjkwOGYiLCBmb250V2VpZ2h0ID0gImJvbGQiKSkgJT4lIAogIGhjX3lBeGlzKHRpdGxlID0gbGlzdCh0ZXh0ID0gImxvZyIpKSU+JQogIGhjX3hBeGlzKHRpdGxlID0gbGlzdCh0ZXh0ID0gIkZlY2hhIChjb2xvY2FyIGVsIGFwdW50YWRvciBzb2JyZQogICAgICAgICAgICAgICAgICAgICAgICBsYXMgZ3LDoWZpY2FzKSIpKSU+JQogIGhjX2xlZ2VuZChhbGlnbiA9ICJyaWdodCIsIHZlcnRpY2FsQWxpZ24gPSAidG9wIiwKICAgICAgICAgICAgbGF5b3V0ID0gInZlcnRpY2FsIikgJT4lCiAgIGhjX3Rvb2x0aXAoIHZhbHVlRGVjaW1hbHM9NCkgJT4lIAogIGhjX2V4cG9ydGluZyhlbmFibGVkID0gVFJVRSwKICAgICAgICAgICAgICAgZmlsZW5hbWUgPSAiZGF0b3MiLAogICAgICAgICAgICAgICBidXR0b25zID0gbGlzdChjb250ZXh0QnV0dG9uID0gbGlzdChtZW51SXRlbXMgPSBteU1lbnVJdGVtcykpKQoKYGBgCgoKVW5hIHZleiByZWFsaXphZG9zIGVzdG9zIHRlc3Qgc2UgZGVmaW5pw7MgZWwgb3JkZW4gIm9wdGltbyIgZGUgbGFncyBhICBjb25zaWRlcmFyIHBvciBtZWRpbyBkZSB1bm9zIGNyaXRlcmlvcyBkZSBpbmZvcm1hY2nDs24sIGVudHJlIGxvcyBjdWFsZXMgZWwgQklDLCBlbCBBSUMgeSBlbCBkZSBIYW5uYW4tUXVpbm4gKEhRQyksIGVzcGVjaWZpY2FkbyBlbiBsYSBlY3VhY2nDs24gJDMkLCBxdWUgc2UgdXRpbGl6w7MgY29tbyByZWZlcmVuY2lhLgoKJCQKICAgIEhRQyA9IG4gbG9nIChcZnJhY3tSU1N9e059KSArIDJrIGxvZyBuXDtcO1w7KDMpCiQkCgpVbmEgdmV6IGlkZW50aWZpY2Fkb3MgbG9zIGxhZ3MgYSBpbmNsdWlyIGVuIGVsIG1vZGVsbyBzZSByZWFsaXrDsyB1biB0ZXN0IGRlIEpob2Fuc2VuIHBhcmEgZGVmaW5pciBlbCBuw7ptZXJvIGRlIHZlY3RvcmVzIGNvaW50ZWdyYW50ZXMuIFVuYSB2ZXogZGVmaW5pZG8gZWwgX19yYW5nbyBkZSBjb2ludGVncmFjacOzbl9fIHBvciBtZWRpbyBkZWwgJFxsYW1iZGEtbWF4JCwgc2UgcHJvY2VkacOzIGEgbGEgZXN0aW1hY2nDs24gZGUgdW4gbW9kZWxvIFZFQ00uIAoKCkV4aXN0w61hIHVuYSB2aWVqYSBkaWNvdG9tw61hIGVudHJlIChhKSBtb2RlbG9zIGVzdHJ1Y3R1cmFsZXMgcXVlIHJlcHJlc2VudGFiYW4gZmllbG1lbnRlIGxhIHRlb3LDrWEgbWFjcm9lY29uw7NtaWNhIHBlcm8gbm8gc2UgYWp1c3RhYmFuIGEgbG9zIGRhdG9zLCB5IChiKSBtb2RlbG9zIGRlIHNlcmllcyBkZSB0aWVtcG8gcXVlIHNlIGFkYXB0YWJhbiBjb24gcHJlY2lzacOzbiBhIGxvcyBkYXRvcyBwZXJvIGVyYW4gZGlmw61jaWxlcywgc2kgbm8gaW1wb3NpYmxlcywgZGUgaW50ZXJwcmV0YXIgZW4gdMOpcm1pbm9zIGVjb27Ds21pY29zLiBMb3MgbW9kZWxvcyBWRUNNIHJvbXBlbiBlc3RhIGRpY290b23DrWEgcHVlcyBwZXJtaXRlbiB1biBlcXVpbGlicmlvIGVudHJlIHJlbGFjaW9uZXMgZWNvbsOzbWljYXMgeSBlc3BlY2lmaWNhY2lvbmVzIGRlIHNlcmllcyBkZSB0aWVtcG8uIAoKUG9yIG1lZGlvIGRlIGVzdGUgbW9kZWxvIHNlIG9idHV2aWVyb24gYXPDrSB0YW50byBsYXMgcmVsYWNpb25lcyBkZSBjb3J0byBjb21vIGRlIGxhcmdvIHBsYXpvIGVudHJlIGxhcyB2YXJpYWJsZXMgZGUgaW50ZXLDqXMgYWRlbcOhcyBzZSBwdWRvIGFuYWxpemFyIGxhcyBmdW5jaW9uZXMgZGUgaW1wdWxzb3MgeSByZXNwdWVzdGEgZGUgbGFzIHByaW5jaXBhbGVzIGRldGVybWluYW50ZXMgZGVsIFBJQiBhc8OtIGRlIGF2ZXJpZ3VhciBsb3MgcG90ZW5jaWFsZXMgY2FtYmlvcyBlbiBlc2Ugw7psdGltbyBhIHBhcnRpciBkZSBwb2zDrXRpY2FzIGVzcGVjw61maWNhcy4gCgpGaW5hbG1lbnRlIHNlIHByb2NlZGnDsyB0YW1iacOpbiBjb24gdW5hIGVzdGltYWNpw7NuIGRlIHVuIG1vZGVsbyBWQVIgY29uc2lkZXJhbmRvIGxhcyBwcmltZXJhcyBkaWZlcmVuY2lhcyBkZSBsYXMgc2VyaWVzIGRlIHRpZW1wbyBkZSBpbnRlcsOpcy4gVW4gVkFSIGVzIHVuYSBlc3RydWN0dXJhIGN1eW8gb2JqZXRpdm8gZXMgbW9kZWxhciBsYSBwZXJzaXN0ZW5jaWEgZW4gZWwgdGllbXBvIGRlIHVuIHZlY3RvciBkZSAkbiQgc2VyaWVzIGRlIHRpZW1wbywgJHlfdCQsIHF1ZSB2aWVuZW4gbW9kZWxhZGFzIHNlZ8O6biBsYSBzaWd1aWVudGUgZXNwZWNpZmljYWNpw7NuOgoKJCQKeV97dH09QV97MX0geV97dC0xfStBX3syfSB5X3t0LTJ9K1xjZG90cytBX3twfSB5X3t0LXB9K0IgeF97dH0rXGVwc2lsb25fe3R9XDtcO1w7KDQpCiQkCgoKUGFyYSBjYWRhIHZhcmlhYmxlIGRlbCBzaXN0ZW1hIHNlIHJlYWxpemEgYXV0b23DoXRpY2FtZW50ZSB1bmEgcHJ1ZWJhIEYsIGVuIGxhIHF1ZSBsYSBoaXDDs3Rlc2lzIG51bGEgZXMgcXVlIG5pbmfDum4gcmV6YWdvIGRlIGxhIHZhcmlhYmxlIGogZXMgc2lnbmlmaWNhdGl2byBlbiBsYSBlY3VhY2nDs24gZGUgbGEgdmFyaWFibGUgaS4gRXN0byBzZSBjb25vY2UgY29tw7pubWVudGUgY29tbyBwcnVlYmEgZGUgY2F1c2FsaWRhZCBkZSBHcmFuZ2VyLiAKCiMgTW9kZWxvIGVtcMOtcmljbyB5IHJlc3VsdGFkb3MKCkNvbW8gcHJldmlhbWVudGUgZGVzY3JpdG8gZW1wZXphbW9zIG51ZXN0cm8gYW7DoWxpc2lzIGNvbiB1bmEgcmVncmVzacOzbiBpbmdlbnVhIGVzdGltYWRhIHBvciBPTFMuIGxvcyByZXN1bHRhZG9zIHZpZW5lbiByZXBvcnRhZG9zIGVuIGxhIHRhYmxhIAoKQW5hbGl6YW5kbyBwZXJvIHZpc3VhbG1lbnRlIGxhcyBzZXJpZXMgZGUgdGllbXBvIGRlIG51ZXN0cmFzIHZhcmlhYmxlcyBkZSBpbnRlcsOpcywgcmVwb3J0YWRhcyBlbiBsYSBncsOhZmljYSBzaWd1aWVudGVzLCBzZSBub3RhIHF1ZSBwb2Ryw61hIGV4aXN0aXIgdW4gY29tcG9uZW50ZSBkZSB0ZW5kZW5jaWEgcXVlIGludmFsaWRhcsOtYSBsb3Mgc3VwdWVzdG9zIGRlbCBtw6l0b2RvIGRlIG3DrW5pbW9zIGN1YWRyYWRvcy4KClNlIHByb2NlZGnDsyBwb3IgbG8gdGFudG8gYSBhbGd1bm9zIHRlc3QgZGUgcmHDrXogdW5pdGFyaWEgKEtQU1MsQURGLCBBREYtR0xTKSBwYXJhIGNvbnN0YXRhciBzaSBsYXMgc2VyaWVzIHJlc3VsdGFyYW4gbm8gZXN0YWNpb25hcmlvcy4gTG9zIHJlc3VsdGFkb3MgZGVsIEFERiBwYXJhIGxhcyBwcmltZXJhcyBkaWZlcmVuY2lhcyByZXNwZWN0aXZhbWVudGUgZGUgUElCLCBDYXBpdGFsIFJlYWwgYWp1c3RhZG8sIFBvYmxhY2nDs24gRWNvbsOzbWljYW1lbnRlIEFjdGl2YSwgR2FzdG8gZ3ViZXJuYW1lbnRhbCwgSW1wb3J0YWNpb25lcyB5IEV4cG9ydGFjaW9uZXMgdmllbmVuIGFxdcOtIHJlcG9ydGFkb3MuIFBvZGVtb3Mgbm90YXIgcXVlIHNlIHJlY2hhemEgbGEgaGlww7N0ZXNpcyBudWxhIHkgcG9yIGxvIHRhbnRvIHRvZGFzIGxhcyBzZXJpZXMgc29uIGVzdGFjaW9uYXJpYXMgZW4gc3VzIHByaW1lcmFzIGRpZmVyZW5jaWFzLiBMb3MgcmVzdWx0YWRvcyBkZWwgdGVzdCBwYXJhIGxhcyB2YXJpYWJsZXMgYSBuaXZlbGVzIGVzIHJlcG9ydGFkYSBlbiBhcMOpbmRpY2UsIHBhcmEgdG9kYXMgbm8gc2UgcHVlZGUgcmVjaGF6YXIgbGEgaGlww7N0ZXNpcyBudWxhIGEgdW4gbml2ZWwgZGUgc2lnbmlmaWNhdGl2aWRhZCBkZWwgJDVcJSQuIExvcyBkZW3DoXMgdGVzdCBzZSBwdWVkZW4gY29uc3VsdGFyIGVuIGVsIGPDs2RpZ28geSBjb25maXJtYW4gbG9zIHJlc3VsdGFkb3MgZXN0YWTDrXN0aWNvcyBvYnRlbmlkb3MgY29uIGxvcyBBREYuIExhcyBzZXJpZXMgcG9yIGxvIHRhbnRvIHJlc3VsdGFuIHRvZGFzIGludGVncmFkYXMgZGUgb3JkZW4gMSAkSSgxKSQuCgpTZSBwcm9jZWRpw7MgZW50b25jZXMgYSBsYSBpZGVudGlmaWNhY2nDs24gZGVsIG7Dum1lcm8gIsOzcHRpbW8iIGRlIGxhZ3MgcXVlIHJlc3VsdGFyb24gc2VyICQyJCwgY29tbyByZXBvcnRhZG8gZW4gbGEgc2lndWllbnRlIHRhYmxhLgoKfCBsYWdzIHwgbG9nbGlrICAgICB8IHAoTFIpICAgfCBBSUMgICAgICAgICAgfCBCSUMgICAgICAgICAgfCBIUUMgICAgICAgICAgfAp8Oi0tLS0tfDotLS0tLS0tLS0tLXw6LS0tLS0tLS18Oi0tLS0tLS0tLS0tLS18Oi0tLS0tLS0tLS0tLS18Oi0tLS0tLS0tLS0tLS18CnwgMSAgICB8IDEzNzQuNTYwODUgfCAgICAgICAgIHwgLTQ0LjQxODY5NSAgIHwgLTQyLjk1MjY1NCAgIHwgLTQzLjg0NTI0NiAgIHwKfCAyICAgIHwgMTQ1OS4wNjgyMiB8IDAuMDAwMDAgfCAtNDYuMDM1NjA3ICAgfCAtNDMuMzEyOTU5XCogfCAtNDQuOTcwNjMwXCogfAp8IDMgICAgfCAxNTA2Ljg3ODY1IHwgMC4wMDAwMCB8IC00Ni40MjkyODhcKiB8IC00Mi40NTAwMzQgICB8IC00NC44NzI3ODMgICB8CnwgNCAgICB8IDE1MzQuMzM3MDkgfCAwLjAyMjYwIHwgLTQ2LjE0NDU3MCAgIHwgLTQwLjkwODcwOCAgIHwgLTQ0LjA5NjUzNiAgIHwKCgpFbCBhbsOhbGlzaXMgc2lndWnDsyBjb24gZWwgdGVzdCBkZSBKb2hhbnNlbiBwYXJhIGRlZmluaXIgZWwgbsO6bWVybyBkZSB2ZWN0b3JlcyBjb2ludGVncmFudGVzLiAKCnwgUmFuayBFaWdlbnZhbHVlIFRyYWNlIHRlc3QgfCBFaWdlbnZhbHVlIHwgVHJhY2UgdGVzdCB8IHAtdmFsdWUgICAgfAp8Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXw6LS0tLS0tLS0tLS18Oi0tLS0tLS0tLS0tfDotLS0tLS0tLS0tLXwKfCAwICAgICAgICAgICAgICAgICAgICAgICAgICB8IDAuNTA3NzQgICAgfCAxMjIuMjUgICAgIHwgXFswLjAwMDJcXSB8CnwgMSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwLjQwNzM4ICAgIHwgNzguMzEyICAgICB8IFxbMC4wMDc5XF0gfAp8IDIgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMC4yODE4NiAgICB8IDQ1Ljg3NCAgICAgfCBcWzAuMDc0NlxdIHwKfCAzICAgICAgICAgICAgICAgICAgICAgICAgICB8IDAuMjEyMTYgICAgfCAyNS4zNDYgICAgIHwgXFswLjE1MzlcXSB8CnwgNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwLjExNTMzICAgIHwgMTAuNTYxICAgICB8IFxbMC4yNDQyXF0gfAoKCkFuYWxpemFuZG8gbG9zIHAtdmFsb3JlcyBkZWwgdGVzdCBkZSBsYSB0cmF6YSBlbCBwcmltZXIgcmVuZ2zDs24gcGFyYSBlbCBjdWFsIG5vIHNlIHJlY2hhemEgbGEgaGlww7N0ZXNpcyBudWxhIGVzIGVsIG7Dum1lcm8gJDMkLiBwb3IgbG8gdGFudG8gaW1wbGVtZW50YXJlbW9zIHVuIFZFQ00gY29uIHVuYSBjb21iaW5hY2nDs24gbGluZWFsIGRlIDMgdmFyaWFibGVzIHF1ZSByZXByZXNlbnRhcsOhIGVsIHTDqXJtaW5vIGRlIGNvcnJlY2Npw7NuLiAKCkxvcyByZXN1bHRhZG9zIGRlbCBWRUNNIGRlIHJhbmdvIDMgY29uIDIgbGFncyBzZSByZXBvcnRhbiBlbiBsYXMgc2lndWllbnRlcyB0YWJsYXMuCgpDb2ludGVncmF0aW5nIHZlY3RvcnMgKHN0YW5kYXJkIGVycm9ycyBpbiBwYXJlbnRoZXNlcykKCnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAp8Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLS0tOnwKfCBsb2dwaWIkX3t0LTF9JCAgICAgfCAgICAgICAgICAgMS4wMDAwMCB8ICAgICAgICAgIDAuMDAwMDAwIHwgICAgICAgICAgIDAuMDAwMDAwIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICgwLjAwMDAwMCkgfCAgICAgICAgKDAuMDAwMDAwKSB8ICAgICAgICAgKDAuMDAwMDAwKSB8CnwgbG9nY2FwcmVhJF97dC0xfSQgIHwgICAgICAgICAgMC4wMDAwMDAgfCAgICAgICAgICAgMS4wMDAwMCB8ICAgICAgICAgICAwLjAwMDAwMCB8CnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAoMC4wMDAwMDApIHwgICAgICAgICgwLjAwMDAwMCkgfCAgICAgICAgICgwLjAwMDAwMCkgfAp8IGxvZ3BlYSRfe3QtMX0kICAgICB8ICAgICAgICAgIDAuMDAwMDAwIHwgICAgICAgICAgMC4wMDAwMDAgfCAgICAgICAgICAgIDEuMDAwMDAgfAp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgKDAuMDAwMDAwKSB8ICAgICAgICAoMC4wMDAwMDApIHwgICAgICAgICAoMC4wMDAwMDApIHwKfCBsb2dpbXAkX3t0LTF9JCAgIHwg4oiSPCEtLSAtLT4wLjgwODk5OCB8IOKIkjwhLS0gLS0+MC43Mjk1MDEgfCAgICAgICAgICAgMC4xMDQzNDIgfAp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgKDAuMTEwMzc2KSB8ICAgICAgICgwLjA5ODM3MjQpIHwgICAgICAgICAoMC4xNDIyMTEpIHwKfCBsb2dleHAkX3t0LTF9JCAgICAgfCAgICAgICAgICAwLjM1NTExNCB8ICAgICAgICAgIDAuODExMzMzIHwg4oiSPCEtLSAtLT4wLjAxNDU4NjMgfAp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgKDAuMTA2NDAyKSB8ICAgICAgICgwLjA5NDgzMTEpIHwgICAgICAgICAoMC4xMzcwOTEpIHwKfCBsb2dnYXN0cHViJF97dC0xfSR8IOKIkjwhLS0gLS0+MC4zODgzMTkgfCAg4oiSPCEtLSAtLT4xLjQyOTM5IHwgIOKIkjwhLS0gLS0+MC45MDIxNjYgfAp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgKDAuMTIwMDgzKSB8ICAgICAgICAoMC4xMDcwMjQpIHwgICAgICAgICAoMC4xNTQ3MTgpIHwKPC9kaXY+CgoKCgohW10oSW1hZ2VuZXMvZWN1YWNpb24xLnBuZykKCk5vdGFtb3MgcG9yIGxvIHRhbnRvIHF1ZSBsYSBlY3VhY2nDs24gZGUgbGFyZ28gcGxhem8sIHBvciBjdWFudG8gY29uY2llcm5lIGxhIGRldGVybWluYWNpw7NuIGRlbCBQcm9kdWN0byBJbnRlcm5vIEJydXRvLCB0ZW5kcsOhIGxhIHNpZ3VpZW50ZSBlc3RydWN0dXJhOgoKJCQKXERlbHRhIHlfe3R9PVxtdV97MH0rXFBpIHlfe3QtMX0rXHN1bV97aT0xfV57cC0xfSBcR2FtbWFfe2l9IFxEZWx0YSB5X3t0LWl9K1xlcHNpbG9uX3t0fVw7XDtcOyg0KQokJAoKTWllbnRyYXMgbGEgZGUgY29ydG8gcGxhem86CgokJHpfdCA9IFxiZXRhJ3lfdFw7XDsoNikkJAoKVXRpbGl6YW5kbyBsYXMgcHJpbWVyYXMgZGlmZXJlbmNpYXMgc2UgZXN0aW3DsyB1biBtb2RlbG8gVkFSIHBhcmEgYXZlcmlndWFyIGxhIEdyYW5nZXIgImNhdXNhbGlkYWQiLiBBbmFsaXphbmRvIGxhIHNpZ25pZmljYXRpdmlkYWQgZGUgbGFzIHZhcmlhYmxlcyByZXphZ2FkYXMgJChsPTIpJCBjb24gcmVzcGVjdG8gYWwgUElCIG5vdGFtb3MgcXVlIGxhIMO6bmljYSBzaWduaWZpY2F0aXZhIGFsICQxMFwlJCBlcyBsYSBkZSBsYXMgZXhwb3J0YWNpb25lcy4gRWwgZ2FzdG8gZGUgZ29iaWVybm8gcmVzdWx0YSBjYXNpIHNpZ25pZmljYXRpdm8uIENvbnNpZGVyYW5kbyB0b2RhcyBsYXMgdmFyaWFibGVzIGVuIGNvbmp1bnRvIGRlIGlndWFsIGZvcm1hIHBhcmVjZSBoYWJlciB1biBlZmVjdG8gZGUgImNhdXNhbGlkYWQiIGRlIEdyYW5nZXIuIGxvcyByZXN1bHRhZG9zIHNvbiByZXBvcnRhZG9zIGVuIGxhIHNpZ3VpZW50ZSB0YWJsYS4KCgpGLXRlc3RzIGRlIHJlc3RyaWNjaW9uZXMgMCAgCgp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8Cnw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tfDotLS0tLS0tLS0tLXwKfCBUb2RvcyBsb3MgbGFncyBkZSBkX2xvZ3BpYiAgICAgfCAqRiooMiw0OCk9Mi4wOTAyNCAgfCBcWzAuMTM0OFxdIHwKfCBUb2RvcyBsb3MgbGFncyBkZSBkX2xvZ2NhcHJlYSAgfCAqRiooMiw0OCk9MC42MTczMyAgfCBcWzAuNTQzNlxdIHwKfCBUb2RvcyBsb3MgbGFncyBkZSBkX2xvZ3BlYSAgICAgfCAqRiooMiw0OCk9MC4yMzk2ODUgfCBcWzAuNzg3OFxdIHwKfCBUb2RvcyBsb3MgbGFncyBkZSBkX2xvZ2ltcCAgICAgfCAqRiooMiw0OCk9MC45Mzg5NjggfCBcWzAuMzk4MVxdIHwKfCBUb2RvcyBsb3MgbGFncyBkZSBkX2xvZ2V4cCAgICAgfCAqRiooMiw0OCk9Mi41MDc0NSAgfCBcWzAuMDkyMVxdIHwKfCBUb2RvcyBsb3MgbGFncyBkZSBkX2xvZ2dhc3RwdWIgfCAqRiooMiw0OCk9Mi4xMjcwOCAgfCBcWzAuMTMwM1xdIHwKfCBUb2RhcyBsYXMgdmFyaWFibGVzLCBsYWcgMiAgICAgfCAqRiooNiw0OCk9MS45Njg5NSAgfCBcWzAuMDg4OFxdIHwKCkF2ZXJpZ3VhbmRvIGxhIHJlbGFjacOzbiBkZSBjYXVzYWxpZGFkIGRlICJHcmFuZ2VyIiBpbnZlcnNhIGNvbiByZXNwZWN0byBhIGxhcyBleHBvcnRhY2lvbmVzLCBjb21vIHBvZGVtb3Mgbm90YXIgZW4gbGEgc2lndWllbnRlIHRhYmxhLCBsYSBoaXDDs3Rlc2lzIG51bGFzIG5vIHZpZW5lbiByZWNoYXphZGFzLiBQb3IgbG8gdGFudG8gcG9kZW1vcyBzdXBvbmVyIHF1ZSBlbCBQSUIgbm8gZGV0ZXJtaW5hIGxhcyBleHBvcnRhY2lvbmVzLgoKRi10ZXN0cyBkZSByZXN0cmljY2lvbmVzIDAgIAoKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfAp8Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLXw6LS0tLS0tLS0tLS18CnwgVG9kb3MgbG9zIGxhZ3MgZGUgZF9sb2dwaWIgICAgIHwgKkYqKDIsNDgpPTAuODgyNDU5IHwgXFswLjQyMDRcXSB8CnwgVG9kb3MgbG9zIGxhZ3MgZGUgZF9sb2djYXByZWEgIHwgKkYqKDIsNDgpPTAuMjY5MTQ5IHwgXFswLjc2NTJcXSB8CnwgVG9kb3MgbG9zIGxhZ3MgZGUgZF9sb2dwZWEgICAgIHwgKkYqKDIsNDgpPTAuNDc4Njc3IHwgXFswLjYyMjVcXSB8CnwgVG9kb3MgbG9zIGxhZ3MgZGUgZF9sb2dpbXAgICAgIHwgKkYqKDIsNDgpPTEuMTM4NzIgIHwgXFswLjMyODdcXSB8CnwgVG9kb3MgbG9zIGxhZ3MgZGUgZF9sb2dleHAgICAgIHwgKkYqKDIsNDgpPTEuNzQxMjQgIHwgXFswLjE4NjJcXSB8CnwgVG9kb3MgbG9zIGxhZ3MgZGUgZF9sb2dnYXN0cHViIHwgKkYqKDIsNDgpPTEuMjAxMzUgIHwgXFswLjMwOTdcXSB8CnwgVG9kYXMgbGFzIHZhcmlhYmxlcywgbGFnIDIgICAgIHwgKkYqKDYsNDgpPTEuMjQzNTUgIHwgXFswLjMwMTNcXSB8CgoKTG9zIGRlbcOhcyByZXN1bHRhZG9zIGRlIGxvcyB0ZXN0IGRlIGNhdXNhbGlkYWQgZGUgR3JhbmdlciBzb24gcmVwb3J0YWRvcyBlbiBhcMOpbmRpY2Ugbm8gcmVzdWx0YW4gc2lnbmlmaWNhdGl2b3MuICAKCgpGaW5hbG1lbnRlIGEgcGFydGlyIGRlIGVzdG9zIHJlc3VsdGFkb3MgYW5hbGl6YW1vcyBsYXMgZnVuY2lvbmVzIGltcHVsc29zIHkgcmVzcHVlc3RhcyBkZWwgbW9kZWxvIFZFQ00gcG9yIGN1YW50byBjb25jaWVybmUgbGFzIGltcG9ydGFjaW9uZXMsIGxhcyBleHBvcnRhY2lvbmVzIHkgZWwgZ2FzdG8gcMO6YmxpY28uIExvcyBlZmVjdG9zIGEgMzAgdHJpbWVzdHJlcyB2aWVuZW4gcmVwb3J0YWRvcyBlbiBsYXMgc2lndWllbnRlcyBmaWd1cmFzLgoKIVtdKEltYWdlbmVzL2ZpZzFmMS5qcGVnKQohW10oSW1hZ2VuZXMvZmlnMmYyLmpwZWcpCgohW10oSW1hZ2VuZXMvZmlnM2YzLmpwZWcpClBvZGVtb3Mgbm90YXIgZGUgbGFzIGZ1bmNpb25lcyBpbXB1bHNvIHJlc3B1ZXN0YSBxdWUgdGFudG8gcG9yIGN1YW50byBjb25jaWVybmUgZWwgZ2FzdG8gcMO6YmxpY28gY29tbyBwb3IgbGFzIGV4cG9ydGFjaW9uZXMsIHVuIHNob2NrIHBvc2l0aXZvIGRldGVybWluYSB1biBpbmljaWFsIGRpc21pbnVjacOzbiBkZWwgUElCLCBwZXJvIHVuIHN1IGF1bWVudG8gYSBsYXJnbyBwbGF6by4gQWwgY29udHJhcmlvIHVuIGF1bWVudG8gZXjDs2dlbm8gZGUgbGFzIGltcG9ydGFjaW9uZXMgdGllbmUgZWwgZWZlY3RvIGNvbnRyYXJpbzogdW4gaW5pY2lhbCBhdW1lbnRvIGRlbCBQSUIgcGVybyB1bmEgc3V5YSBkaXNtaW51Y2nDs24gYSBsYXJnbyBwbGF6by4gCgpQb3Igw7psdGltbyBlbiBsYSBzaWd1aWVudGUgZmlndXJhIHNlIHJlcG9ydMOzIHVuYSBwcmV2aXNpw7NuIGRlbCBsb2dhcml0bW8gZGVsIFBJQiBwYXJhIGxvcyBwcsOzeGltb3MgMTggYcOxb3MsIGVzdGltYWRvIHBvciBtZWRpbyBkZWwgbW9kZWxvIFZFQ00uCgohW10oSW1hZ2VuZXMvZmlnNGY0LmpwZWcpCgpOb3RhbW9zIGNvbW8gbGEgc2VyaWUgaGlzdMOzcmljYSBlcyBhcHJveGltYWRhIHN1ZmljaWVudGVtZW50ZSBiaWVuIHBvciBsb3MgdmFsb3JlcyBhanVzdGFkb3MgZGVsIG1vZGVsbyBWRUNNLCBhdW5xdWUgbGEgY3Jpc2lzIGNhdXNhZGEgcG9yIGVsIENPVklEIDE5IG5vIGxvZ3JhIHVuIGJ1ZW4gYWp1c3RlLCBwcm9iYWJsZW1lbnRlIHBvciBlbCBjYXLDoWN0ZXIgw7puaWNvIHkgZGlzcnVwdGl2byBkZXNkZSBlbCBsYWRvIGRlIGxhIGRlbWFuZGEgeSBkZSBsYSBvZmVydGEgZGUgZXN0YSBjcmlzaXMuIExhIHByb3llY2Npw7NuIG11ZXN0cmEgdW5hIHLDoXBpZGEgcmVjdXBlcmFjacOzbiBxdWUsIHBlcm8gdGVuZHLDoSB1bmEgcmV2ZXJzacOzbiBwYXJhIGx1ZWdvIHByb2NlZGVyIGNvbiB1biBjcmVjaW1pZW50byBlbiB1biBzZW5kZXJvIGVzdGFibGUgcXVlIFNlIHBvZHLDrWEgcG9yIGxvIHRhbnRvIHN1cG9uZXIgcXVlIGxhIGNyaXNpcyBkZWwgU0FSUy1Db1YtMiBkZXRlcm1pbsOzIHVuIHF1aWVicmUgZXN0cnVjdHVyYWwgZW4gZWwgY3JlY2ltaWVudG8gbWV4aWNhbm8gcXVlIHBvZHLDrWEgaW5kaWNhciB1biBwcm9jZXNvIGRlIGhpc3TDqXJlc2lzIGNvbiB1biBpbXBhY3RvIHBlcm1hbmVudGUgZGUgZXN0YSBjcmlzaXMgYcO6biBjdWFuZG8gZXN0ZSBmZW7Ds21lbm8geWEgc2UgaGF5YSBkaXNpcGFkby4gIAoKIyBDb25jbHVzaW9uZXMKCk5vdGFtb3MgY29tbyBsYSBzZXJpZSBoaXN0w7NyaWNhIGVzIGFwcm94aW1hZGEgc3VmaWNpZW50ZW1lbnRlIGJpZW4gcG9yIGxvcyB2YWxvcmVzIGFqdXN0YWRvcyBkZWwgbW9kZWxvIFZFQ00sIGF1bnF1ZSBsYSBjcmlzaXMgY2F1c2FkYSBwb3IgZWwgQ09WSUQgMTkgbm8gbG9ncmEgdW4gYnVlbiBhanVzdGUsIHByb2JhYmxlbWVudGUgcG9yIGVsIGNhcsOhY3RlciDDum5pY28geSBkaXNydXB0aXZvIGRlc2RlIGVsIGxhZG8gZGUgbGEgZGVtYW5kYSB5IGRlIGxhIG9mZXJ0YSBkZSBlc3RhIGNyaXNpcy4gTGEgcHJveWVjY2nDs24gbXVlc3RyYSB1bmEgcsOhcGlkYSByZWN1cGVyYWNpw7NuIHF1ZSwgcGVybyB0ZW5kcsOhIHVuYSByZXZlcnNpw7NuIHBhcmEgbHVlZ28gcHJvY2VkZXIgY29uIHVuIGNyZWNpbWllbnRvIGVuIHVuIHNlbmRlcm8gZXN0YWJsZSBxdWUgU2UgcG9kcsOtYSBwb3IgbG8gdGFudG8gc3Vwb25lciBxdWUgbGEgY3Jpc2lzIGRlbCBTQVJTLUNvVi0yIGRldGVybWluw7MgdW4gcXVpZWJyZSBlc3RydWN0dXJhbCBlbiBlbCBjcmVjaW1pZW50byBtZXhpY2FubyBxdWUgcG9kcsOtYSBpbmRpY2FyIHVuIHByb2Nlc28gZGUgaGlzdMOpcmVzaXMgY29uIHVuIGltcGFjdG8gcGVybWFuZW50ZSBkZSBlc3RhIGNyaXNpcyBhw7puIGN1YW5kbyBlc3RlIGZlbsOzbWVubyB5YSBzZSBoYXlhIGRpc2lwYWRvLiAgCgpQb3IgY3VhbnRvIGNvbmNpZXJuZSBlbCBtb2RlbG8gZGUgZGV0ZXJtaW5hY2nDs24gZGVsIGNyZWNpbWllbnRvIGxvcyBkYXRvcyBkZSBsYXMgw7psdGltYXMgZG9zIGTDqWNhZGFzIHBhcmVjZW4gc3VnZXJpciB2YWxpZGFyIGxhIGhpcMOzdGVzaXMgZGUgdW4gbW9kZWxvIGRlIGUgY3JlY2ltaWVudG8gaW1wdWxzYWRvIHBvciBsYXMgZXhwb3J0YWNpb25lcyAoQ0lFKS4gTGEgImNhdXNhbGlkYWQiIGRlIEdyYW5nZXIgbW9zdHLDsyBjb21vIGxvcyB2YWxvcmVzIHJlemFnYWRvcyBkZSBsYXMgZXhwb3J0YWNpb25lcyByZXN1bHRhbiBzaWduaWZpY2F0aXZvcyBlc3RhZMOtc3RpY2FtZW50ZSBlbiBsYSBkZXRlcm1pbmFjacOzbiBkZWwgUElCLCBtaWVudHJhcyBsbyBjb250cmFyaW8gbm8gcmVzdWx0YSB2ZXJkYWRlcm8uIEVsIGFuw6FsaXNpcyBpbXB1bHNvIHJlc3B1ZXN0YSBtdWVzdHJhIGNvbW8gdW4gc2hvY2sgcG9zaXRpdm8gZW4gbGFzIGV4cG9ydGFjaW9uZXMgcG9kcsOtYSB0ZW5lciB1biBpbXBhY3RvIHBvc2l0aXZvIGEgbGFyZ28gcGxhem8gZW4gZWwgY3JlY2ltaWVudG8gZGUgTcOpeGljby4gCgpDb24gcmVzcGVjdG8gYSB1biBhdW1lbnRvIGRlbCBnYXN0byBndWJlcm5hbWVudGFsLCBlc3RlIG11ZXN0cmEgdW4gZWZlY3RvIG5lZ2F0aXZvIGVuIGVsIGNvcnRvIHBsYXpvIHBlcm8gcG9zaXRpdm8gYSBsYXJnbyBwbGF6by4gTGFzIGltcG9ydGFjaW9uZXMgbXVlc3RyYW4gbWllbnRyYXMgdW4gY29tcG9ydGFtaWVudG8gb3B1ZXN0by4KCkVsIGFuw6FsaXNpcyBkZSBsYXMgcHJveWVjY2lvbmVzIGRlbCBQSUIgY29uIGJhc2UgZW4gZWwgbW9kZWxvIFZFQ00gcGFyZWNlbiBtb3N0cmFyIHVuIHF1aWVicmUgZXN0cnVjdHVyYWwgZW4gZWwgY3JlY2ltaWVudG8gZGUgTcOpeGljbyBjYXVzYWRvIHBvciBsYSBjcmlzaXMgZGVsIENPVklELTE5LCBzYXRpc2ZhY2llbmRvIGxhIGhpcMOzdGVzaXMgZGUgaGlzdMOpcmVzaXMgZGUgaW1wYWN0byBwZXJtYW5lbnRlIGRlIGxhIGNyaXNpcyBlY29uw7NtaWNvLXNhbml0YXJpYSBlbiBlbCBkZXNhcnJvbGxvIGRlbCBwYcOtcy4KCkEgcGFydGlyIGRlIGVzdGFzIGNvbnNpZGVyYWNpb25lcyBjcmVlbW9zIHF1ZSBlbCBjcmVjaW1pZW50byBtZXhpY2FubywgZnVlcnRlbWVudGUgZ29scGVhZG8gcG9yIGxhIGNyaXNpcyBkZWwgU0FSUy1Db1YtMiwgcG9kcsOtYSByZWNpYmlyIGltcHVsc28geSBiZW5lZmljaW9zIGRlIHVuIGF1bWVudG8gZW4gZWwgZ2FzdG8gcMO6YmxpY28sIHkgZWwgcmVsYXRpdm8gYWJhbmRvbm8gZGUgbGEgcG9sw610aWNhIGRlIGF1c3RlcmlkYWQsIHkgZW4gdW5hIHVsdGVyaW9yIGFiZXJ0dXJhIGhhY8OtYSBudWV2byBwYXJ0bmVycyBjb21lcmNpYWxlcywgZm9ydGFsZWNpZW5kbyBhc8OtIGxhcyBleHBvcnRhY2lvbmVzIHkgZGlzbWludXllbmRvIGFsIG1pc21vIHRpZW1wbyBsYSBkZXBlbmRlbmNpYSBkZWwgbWVyY2FkbyBkZSBFc3RhZG9zIFVuaWRvcy4gCgoKIyBQcmVzZW50YWNpw7NuCgo8aWZyYW1lIHNyYz0iaHR0cHM6Ly9zbGlkZXMuY29tL3JhX2ZhL3N0Y2lkZS9lbWJlZCIgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9IjAiIHdlYmtpdGFsbG93ZnVsbHNjcmVlbiBtb3phbGxvd2Z1bGxzY3JlZW4gYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPgoKCiMgQmlibGlvZ3JhZsOtYQoKWzFdIFJvYmVydCBKIEJhcnJvLigoR292ZXJubWVudCBzcGVuZGluZyBpbiBhIHNpbXBsZSBtb2RlbCBvZiBlbmRvZ2VuZW91cyBncm93dGgpKS4gRW46Sm91cm5hbCBvZnBvbGl0aWNhbCBlY29ub215OTguNSwgUGFydCAyICgxOTkwKSwgUzEwMy1TMTI1LgoKWzJdIFNlYmFzdGlhbiAgRWR3YXJkcy4oKE9wZW5uZXNzLCAgcHJvZHVjdGl2aXR5ICBhbmQgIGdyb3d0aDogIHdoYXQgIGRvICB3ZSAgcmVhbGx5ICBrbm93PykpRW46VGhlZWNvbm9taWMgam91cm5hbDEwOC40NDcgKDE5OTgpLCBwIMyBYWdzLiAzODMtMzk4LgoKWzNdIEdyYWhhbSBFbGxpb3R0LCBUaG9tYXMgSiBSb3RoZW5iZXJnIHkgSmFtZXMgSCBTdG9jay5FZmZpY2llbnQgdGVzdHMgZm9yIGFuIGF1dG9yZWdyZXNzaXZlIHVuaXRyb290LiBJbmYuIHQgzIFlYy4gTmF0aW9uYWwgQnVyZWF1IG9mIEVjb25vbWljIFJlc2VhcmNoLCAxOTkyLgoKWzRdIEVsaGFuYW4gIEhlbHBtYW4gIHkgIFBhdWwgIFIgIEtydWdtYW4uTWFya2V0ICBzdHJ1Y3R1cmUgIGFuZCAgZm9yZWlnbiAgdHJhZGU6ICBJbmNyZWFzaW5nICByZXR1cm5zLGltcGVyZmVjdCBjb21wZXRpdGlvbiwgYW5kIHRoZSBpbnRlcm5hdGlvbmFsIGVjb25vbXkuIE1JVCBwcmVzcywgMTk4NS4gCgpbNV0gUGF1bCBLcnVnbWFuLigoSW1wb3J0IHByb3RlY3Rpb24gYXMgZXhwb3J0IHByb21vdGlvbikpLiBFbjpILiBLaWVyemtvd3NsY2ksIGVkKDE5ODQpLgoKWzZdIERlbmlzIEt3aWF0a293c2tpIHkgY29sLigoVGVzdGluZyB0aGUgbnVsbCBoeXBvdGhlc2lzIG9mIHN0YXRpb25hcml0eSBhZ2FpbnN0IHRoZSBhbHRlcm5hdGl2ZSBvZiBhdW5pdCByb290OiBIb3cgc3VyZSBhcmUgd2UgdGhhdCBlY29ub21pYyB0aW1lIHNlcmllcyBoYXZlIGEgdW5pdCByb290PykpRW46Sm91cm5hbCBvZiBlY29ub21ldHJpY3M1NC4xLTMgKDE5OTIpLCBwIMyBYWdzLiAxNTktMTc4LgoKWzddIFJvYmVydCBaIExhd3JlbmNlIHkgRGF2aWQgRSBXZWluc3RlaW4uKChUcmFkZSBhbmQgZ3Jvd3RoOiBpbXBvcnQtbGVkIG9yIGV4cG9ydC1sZWQ/IEV2aWRlbmNlZnJvbSBKYXBhbiBhbmQgS29yZWEpKS4gRW46UmV0aGlua2luZyB0aGUgRWFzdCBBc2lhbiBNaXJhY2xlKDIwMDEpLCBwIMyBYWdzLiAzNzktNDA4LgoKWzhdIFNlcmVuYSBOZyB5IFBpZXJyZSBQZXJyb24uKChMYWcgbGVuZ3RoIHNlbGVjdGlvbiBhbmQgdGhlIGNvbnN0cnVjdGlvbiBvZiB1bml0IHJvb3QgdGVzdHMgd2l0aCBnb29kc2l6ZSBhbmQgcG93ZXIpKS4gRW46RWNvbm9tZXRyaWNhNjkuNiAoMjAwMSksIHAgzIFhZ3MuIDE1MTktMTU1NC4KCls5XSBNaWd1ZWwgRCBSYW1pcmV6IHkgTmFkZXIgTmF6bWkuKChQdWJsaWMgaW52ZXN0bWVudCBhbmQgZWNvbm9taWMgZ3Jvd3RoIGluIExhdGluIEFtZXJpY2E6IEFuZW1waXJpY2FsIHRlc3QpKS4gRW46UmV2aWV3IG9mIERldmVsb3BtZW50IEVjb25vbWljczcuMSAoMjAwMyksIHAgzIFhZ3MuIDExNS0xMjYuCgpbMTBdIEVkbXVuZCBKIFNoZWVoZXkuKChFeHBvcnRzIGFuZCBncm93dGg6IGFkZGl0aW9uYWwgZXZpZGVuY2UpKS4gRW46VGhlICBKb3VybmFsICBvZiAgRGV2ZWxvcG1lbnRTdHVkaWVzMjguNCAoMTk5MiksIHAgzIFhZ3MuIDczMC03MzQuCgo=