Licença

This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.

License: CC BY-SA 4.0
License: CC BY-SA 4.0

Citação

Sugestão de citação: FIGUEIREDO, Adriano Marcos Rodrigues. Economia Regional: polos, diversidade e especialização em R. Campo Grande-MS,Brasil: RStudio/Rpubs, 2019. Disponível em http://rpubs.com/amrofi/Regional_Economics_poles_diversity.

1 Introdução

1.2 Ideia Básica

A ideia básica deste arquivo é orientar os procedimentos para o cálculo dos indicadores de análise regional a saber:

  1. Quociente Locacional (QL)
  2. Índice de Diversidade (Div)
  3. Índice de Ubiquidade (Ubiq)

Para a maioria dos casos, os dados serão de Emprego Setorial (E) conforme as divisões CNAE 2.0, por Região Geográfica Imediata (RGI) de Mato Grosso do Sul em 2016. Existem rotinas para a obtenção eletrônica desses dados, mas por hora eles serão trazidos já preparados em planilha eletrônica tipo MS Excel.

2 Procedimentos

2.1 Carregar os dados e pacotes

Os dados foram argegados em 12 Regiões Geográficas Imediatas (RGI) de Mato Grosso do Sul e 87 divisões CNAE 2.0 contendo o número de empregados formais da RAIS/MTE. São portanto 12 observações espaciais nas linhas e as divisões nas colunas contendo ainda a última coluna com o total de cada RGI para o ano de 2016.

Como os pacotes REAT e o EconGeo não estão (em 12.05.2021) disponíveis no CRAN, eles necessitam algumas rotinas que serão aqui explicadas. O pacote REAT está arquivado no CRAN porque apresentou algumas falhas na versão arquivada em 10 de dezembro de 2020 (https://cran.r-project.org/web/packages/REAT/index.html).

Entretanto, se o leitor checar os resultados da versão 3.0.2, (https://cran-archive.r-project.org/web/checks/2020/2020-12-10_check_results_REAT.html), verá que são problemas no Linux e uma nota para o MACOS. No sistema Windows não tem ressalvas.

Se acessar o archive (https://cran.r-project.org/src/contrib/Archive/REAT/) do REAT, encontrará as versões anteriores que conseguem desenvolver as rotinas aqui necessárias. Estou utilizando a versão 3.0.1 instalada a partir do arquivo (https://cran.r-project.org/src/contrib/Archive/REAT/REAT_3.0.1.tar.gz). Após baixá-lo em sua máquina, vá em Packages, Install, Install from e escolha o arquivo baixado. Sua tela parecerá como abaixo.

Tela de instalação do REAT por arquivo
Tela de instalação do REAT por arquivo

Outra forma é apenas instalar pelo console fazendo como o código abaixo, lembrando de especificar o caminho completo onde está o arquivo.

install.packages("~/REAT_3.0.1.tar.gz", repos = NULL, type = "source")

Para o pacote EconGeo, este pode ser instalado fazendo como a seguir:

install.packages("devtools")
library(devtools)
devtools::install_github("PABalland/EconGeo", force = T)

Os dados foram `embedded ` de modo a facilitar a reprodução do código (o acesso é feito via download do code deste post), mas os alunos da UFMS matriculados na disciplina de Economia Regional podem acessar o arquivo Excel pelo AVA-UFMS. São 87 divisões CNAE mais uma coluna do total ao final, e as duas colunas identificadoras iniciais das 12 RGIs (Regiões Geográficas Imediatas) de Mato Grosso do Sul.

library(readxl)
dados <- read_excel("rgi2016.xlsx")
attach(dados)

2.2 Quociente Locacional (QL)

Para os próximos indicadores, necessita-se dos dados de emprego por setor em cada município de MS. Desta forma, chama-se a planilha já preparada com os dados da base de informações RAIS do Ministério do Trabalho e Emprego do Brasil (MTE). Um meio de obter tais informações eletronicamente é pelo pacote raisr. Outra forma é pela página http://bi.mte.gov.br/bgcaged/login.php.

A RAIS possui os dados para o final de cada ano (dezembro), portanto, os saldos de empregados ocupados. A CAGED apresenta outro tipo de informação, a de ligados e desligados, invés do saldo de pessoas ocupadas.

Utilizaremos os dados da RAIS por vínculos, por Divisão CNAE 2.0 e por município. Outras agregações podem ser testadas, a critério do usuário, e no presente estudo os dados municipais foram agregados para Regiões Geográficas Imediatas do IBGE. O procedimento recomendado é baixar os dados primeiro, organizar e depois chamar a planilha consolidada para o RStudio.

O Quociente Locacional (QL) é uma medida que dá a informação de qual o setor mais representado no município (região de análise) quando comparado com o mesmo setor no estado (região de referência). Foi elaborado inicialmente por Haig (1928) e vem sendo muito utilizado em várias análises regionais e de localização industrial. Também chamado de Índice de Revealed Comparative Advantage (RCA – ou Vantagem comparativa revelada, VCR) seguindo Balasa (1965), ou índice de Hoover-Balassa.

A expressão básica é:

\[ QL_{ki}=\left( {\frac{{\frac{{{E_{ki}}}}{E_i}}}{{\frac{{{E_k}}}{E}}}} \right) \]

em que: \({E_{ki}}\) é o emprego no setor \(k\) na localidade de análise \(i\); \({E_i}\) é o emprego total na localidade de análise \(i\); \({E_k}\) é o emprego no setor \(k\) da localidade de referência; e \(E\) é o emprego total da localidade de referência.

A ideia é saber se na localidade de análise, a proporção do emprego do setor é maior ou menor que esta proporção no local de referência. Assim, se o resultado for maior que hum \(\left( {QL_{ki}}\gt 1\right)\), então diz-se que a localidade de análise é relativamente mais especializada nesse setor que a localidade de refência. De outro lado, valores menores que a unidade \(\left( {QL_{ki}}\lt 1\right)\) indicam que a localidade analisada tem representação menor deste setor do que a representação deste na localidade de referência.

2.2.1 EconGeo de Balland (2017)

Esta rotina pode ser resumida fazendo o uso do pacote EconGeo, e a função RCA para obter o Quociente Locacional (similar ao Revealed Comparative Advantage - RCA - índice de Balassa, 1965). Ela utiliza uma matriz contendo os dados no formato abaixo, em que \((I1,I2,I3)\) são as indústrias ou setores, para os municípios \((R1,R2,R3)\).

municipio  |I1       |I2      | I3
-----------|---------|--------|------------
 R1        |100      |150     | 165
 R2        |130      |400     | 220
 R3        |200      |1200    | 20

Prepararemos os dados para os cálculos, construindo uma matriz mat:

library(EconGeo)
## gerar a matriz industrial da região, para 2006
set.seed(31)
mat <- as.matrix(dados[1:12, 3:89])
# rownames(mat)<- c ('R1', 'R2', 'R3', 'R4', 'R5','R6', 'R7', 'R8', 'R9',
# 'R10','R11','R12')
rownames(mat) <- dados$nome_rgi
colnames(mat)
 [1] "div1"  "div2"  "div3"  "div4"  "div5"  "div6"  "div7"  "div8"  "div9" 
[10] "div10" "div11" "div12" "div13" "div14" "div15" "div16" "div17" "div18"
[19] "div19" "div20" "div21" "div22" "div23" "div24" "div25" "div26" "div27"
[28] "div28" "div29" "div30" "div31" "div32" "div33" "div34" "div35" "div36"
[37] "div37" "div38" "div39" "div40" "div41" "div42" "div43" "div44" "div45"
[46] "div46" "div47" "div48" "div49" "div50" "div51" "div52" "div53" "div54"
[55] "div55" "div56" "div57" "div58" "div59" "div60" "div61" "div62" "div63"
[64] "div64" "div65" "div66" "div67" "div68" "div69" "div70" "div71" "div72"
[73] "div73" "div74" "div75" "div76" "div77" "div78" "div79" "div80" "div81"
[82] "div82" "div83" "div84" "div85" "div86" "div87"

O cálculo do Quociente Locacional (QL = RCA) será fazendo:

QL2016 <- round(rca(mat), digits = 4)
divisoes <- structure(list(div = c("ADMINISTRAÇÃO PÚBLICA, DEFESA E SEGURIDADE SOCIAL",
    "AGÊNCIAS DE VIAGENS, OPERADORES TURÍSTICOS E SERVIÇOS DE RESERVAS", "AGRICULTURA, PECUÁRIA E SERVIÇOS RELACIONADOS",
    "ALIMENTAÇÃO", "ALOJAMENTO", "ALUGUÉIS NÃO-IMOBILIÁRIOS E GESTÃO DE ATIVOS INTANGÍVEIS NÃO-FINANCEIROS",
    "ARMAZENAMENTO E ATIVIDADES AUXILIARES DOS TRANSPORTES", "ATIVIDADES ARTÍSTICAS, CRIATIVAS E DE ESPETÁCULOS",
    "ATIVIDADES AUXILIARES DOS SERVIÇOS FINANCEIROS, SEGUROS, PREVIDÊNCIA COMPLEMENTAR E PLANOS DE SAÚDE",
    "ATIVIDADES CINEMATOGRÁFICAS, PRODUÇÃO DE VÍDEOS E DE PROGRAMAS DE TELEVISÃO",
    "ATIVIDADES DE APOIO À EXTRAÇÃO DE MINERAIS", "ATIVIDADES DE ATENÇÃO À SAÚDE HUMANA",
    "ATIVIDADES DE ATENÇÃO À SAÚDE HUMANA INTEGRADAS COM ASSISTÊNCIA SOCIAL, PRESTADAS EM RESIDÊNCIAS COLETIVAS E PARTICULARES",
    "ATIVIDADES DE EXPLORAÇÃO DE JOGOS DE AZAR E APOSTAS", "ATIVIDADES DE ORGANIZAÇÕES ASSOCIATIVAS",
    "ATIVIDADES DE PRESTAÇÃO DE SERVIÇOS DE INFORMAÇÃO", "ATIVIDADES DE RÁDIO E DE TELEVISÃO",
    "ATIVIDADES DE SEDES DE EMPRESAS E DE CONSULTORIA EM GESTÃO EMPRESARIAL", "ATIVIDADES DE SERVIÇOS FINANCEIROS",
    "ATIVIDADES DE VIGILÂNCIA, SEGURANÇA E INVESTIGAÇÃO", "ATIVIDADES DOS SERVIÇOS DE TECNOLOGIA DA INFORMAÇÃO",
    "ATIVIDADES ESPORTIVAS E DE RECREAÇÃO E LAZER", "ATIVIDADES IMOBILIÁRIAS",
    "ATIVIDADES JURÍDICAS, DE CONTABILIDADE E DE AUDITORIA", "ATIVIDADES LIGADAS AO PATRIMÔNIO CULTURAL E AMBIENTAL",
    "ATIVIDADES VETERINÁRIAS", "CAPTAÇÃO, TRATAMENTO E DISTRIBUIÇÃO DE ÁGUA",
    "COLETA, TRATAMENTO E DISPOSIÇÃO DE RESÍDUOS", "COMÉRCIO E REPARAÇÃO DE VEÍCULOS AUTOMOTORES E MOTOCICLETAS",
    "COMÉRCIO POR ATACADO, EXCETO VEÍCULOS AUTOMOTORES E MOTOCICLETAS", "COMÉRCIO VAREJISTA",
    "CONFECÇÃO DE ARTIGOS DO VESTUÁRIO E ACESSÓRIOS", "CONSTRUÇÃO DE EDIFÍCIOS",
    "CORREIO E OUTRAS ATIVIDADES DE ENTREGA", "DESCONTAMINAÇÃO E OUTROS SERVIÇOS DE GESTÃO DE RESÍDUOS",
    "EDIÇÃO E EDIÇÃO INTEGRADA À IMPRESSÃO", "EDUCAÇÃO", "ELETRICIDADE, GÁS E OUTRAS UTILIDADES",
    "ESGOTO E ATIVIDADES RELACIONADAS", "EXTRAÇÃO DE CARVÃO MINERAL", "EXTRAÇÃO DE MINERAIS METÁLICOS",
    "EXTRAÇÃO DE MINERAIS NÃO-METÁLICOS", "EXTRAÇÃO DE PETRÓLEO E GÁS NATURAL",
    "FABRICAÇÃO DE BEBIDAS", "FABRICAÇÃO DE CELULOSE, PAPEL E PRODUTOS DE PAPEL",
    "FABRICAÇÃO DE COQUE, DE PRODUTOS DERIVADOS DO PETRÓLEO E DE BIOCOMBUSTÍVEIS",
    "FABRICAÇÃO DE EQUIPAMENTOS DE INFORMÁTICA, PRODUTOS ELETRÔNICOS E ÓPTICOS",
    "FABRICAÇÃO DE MÁQUINAS E EQUIPAMENTOS", "FABRICAÇÃO DE MÁQUINAS, APARELHOS E MATERIAIS ELÉTRICOS",
    "FABRICAÇÃO DE MÓVEIS", "FABRICAÇÃO DE OUTROS EQUIPAMENTOS DE TRANSPORTE, EXCETO VEÍCULOS AUTOMOTORES",
    "FABRICAÇÃO DE PRODUTOS ALIMENTÍCIOS", "FABRICAÇÃO DE PRODUTOS DE BORRACHA E DE MATERIAL PLÁSTICO",
    "FABRICAÇÃO DE PRODUTOS DE MADEIRA", "FABRICAÇÃO DE PRODUTOS DE METAL, EXCETO MÁQUINAS E EQUIPAMENTOS",
    "FABRICAÇÃO DE PRODUTOS DE MINERAIS NÃO-METÁLICOS", "FABRICAÇÃO DE PRODUTOS DIVERSOS",
    "FABRICAÇÃO DE PRODUTOS DO FUMO", "FABRICAÇÃO DE PRODUTOS FARMOQUÍMICOS E FARMACÊUTICOS",
    "FABRICAÇÃO DE PRODUTOS QUÍMICOS", "FABRICAÇÃO DE PRODUTOS TÊXTEIS", "FABRICAÇÃO DE VEÍCULOS AUTOMOTORES, REBOQUES E CARROCERIAS",
    "IMPRESSÃO E REPRODUÇÃO DE GRAVAÇÕES", "MANUTENÇÃO, REPARAÇÃO E INSTALAÇÃO DE MÁQUINAS E EQUIPAMENTOS",
    "METALURGIA", "OBRAS DE INFRA-ESTRUTURA", "ORGANISMOS INTERNACIONAIS E OUTRAS INSTITUIÇÕES EXTRATERRITORIAIS",
    "OUTRAS ATIVIDADES DE SERVIÇOS PESSOAIS", "OUTRAS ATIVIDADES PROFISSIONAIS, CIENTÍFICAS E TÉCNICAS",
    "PESCA E AQÜICULTURA", "PESQUISA E DESENVOLVIMENTO CIENTÍFICO", "PREPARAÇÃO DE COUROS E FABRICAÇÃO DE ARTEFATOS DE COURO, ARTIGOS PARA VIAGEM E CALÇADOS",
    "PRODUÇÃO FLORESTAL", "PUBLICIDADE E PESQUISA DE MERCADO", "REPARAÇÃO E MANUTENÇÃO DE EQUIPAMENTOS DE INFORMÁTICA E COMUNICAÇÃO E DE OBJETOS PESSOAIS E DOMÉSTICOS",
    "SEGUROS, RESSEGUROS, PREVIDÊNCIA COMPLEMENTAR E PLANOS DE SAÚDE", "SELEÇÃO, AGENCIAMENTO E LOCAÇÃO DE MÃO-DE-OBRA",
    "SERVIÇOS DE ARQUITETURA E ENGENHARIA", "SERVIÇOS DE ASSISTÊNCIA SOCIAL SEM ALOJAMENTO",
    "SERVIÇOS DE ESCRITÓRIO, DE APOIO ADMINISTRATIVO E OUTROS SERVIÇOS PRESTADOS ÀS EMPRESAS",
    "SERVIÇOS DOMÉSTICOS", "SERVIÇOS ESPECIALIZADOS PARA CONSTRUÇÃO", "SERVIÇOS PARA EDIFÍCIOS E ATIVIDADES PAISAGÍSTICAS",
    "TELECOMUNICAÇÕES", "TRANSPORTE AÉREO", "TRANSPORTE AQUAVIÁRIO", "TRANSPORTE TERRESTRE")),
    row.names = c(NA, -87L), class = c("tbl_df", "tbl", "data.frame"))
DT::datatable(cbind(divisoes, t(QL2016)))

2.3 Índice de Diversidade (Div)

Cálculo da diversidade pelo pacote EconGeo, função diversity. A função calcula uma medida simples de diversidade das regiões calculando o número de setores nos quais a região tem vantagem comparativa relativa (RCA), ou seja, \(QL > 1\) em relação as regiões das matrizes de incidência.

div2016 <- diversity(mat, rca = TRUE)
knitr::kable(div2016)
x
Amambai 15
Aquidauana - Anastácio 17
Campo Grande 47
Corumbá 31
Coxim 15
Dourados 21
Jardim 14
Naviraí - Mundo Novo 20
Nova Andradina 12
Paranaíba - Chapadão do Sul - Cassilândia 31
Ponta Porã 17
Três Lagoas 31
# ordenaremos os dados conforme a sequencia do shapefile do mapa a ser plotado
# na próxima seção
data <- cbind(dados$rgi, div2016)
dataord <- data[order(data[, 1]), ]

2.4 Índice de Ubiquidade (ubiq)

A função ubiquity do pacote EconGeo calcula uma medida simples do número de regiões em que um setor é encontrado (ou seja, com QL>1). Teoricamente, setores que são mais comumente encontrados são setores menos complexos e, portanto, menos exigentes de capacidades técnicas.

library(knitr)
library(tidyr)
library(dplyr)
library(DT)
library(magrittr)
ubiq2016 <- ubiquity(mat, rca = TRUE)
datatable(cbind(divisoes, ubiq2016))

2.5 Mapa da diversidade

Veja como fazer mapas de formas diferentes assistindo as videoaulas: ECONOMIA REGIONAL 2021 Mapas em RStudio com geobr e ggplot2 - parte 1 ; e ECONOMIA REGIONAL 2021 Mapas em RStudio com geobr e ggplot2 - parte 2.

library(rgdal)
library(sf)
library(maptools)

ms.only <- readOGR("MSRGI2017.shp", verbose = FALSE)
ms.only@data$div2016 <- dataord[,2]
#rbPal <- colorRampPalette(c('white', 'blue'))
#ms.only@data$col <- rbPal(12)[as.numeric(cut(ms.only@data$div2016, seq(0, 60, by = 5)))]
classes <- c('40-|50','30-|40','20-|30','10-|20','0-|10')

ms.only@data$groups[ms.only@data$div2016 <= 10] <- 1 
ms.only@data$groups[ms.only@data$div2016 > 10 & ms.only@data$div2016 <=20] <- 2 
ms.only@data$groups[ms.only@data$div2016 > 20 & ms.only@data$div2016 <=30] <- 3 
ms.only@data$groups[ms.only@data$div2016 > 30 & ms.only@data$div2016 <=40] <- 4 
ms.only@data$groups[ms.only@data$div2016 > 40 & ms.only@data$div2016 <=50] <- 5 
ms.only@data$col <- c('red','green','white','yellow','blue')[ms.only@data$groups]
                    
plot(ms.only, col = ms.only@data$col,
     main = "Diversidade das Regiões Geográficas Imediatas 
     de Mato Grosso do Sul, 2016")

invisible(text(coordinates(ms.only), label = as.character(row.names(dataord)), cex = 0.6))
# adicione uma legenda ao mapa
legend("bottomright",   # local da legenda
   legend = classes, # categorias da legenda
   fill = c('blue','yellow','white','green','red')) # cores na legenda

Este mapa evidencia a diversidade da RGI Campo Grande, seguida das RGI de Corumbá, de Três Lagoas, de Paranaíba - Chapadão do Sul - Cassilândia, e de Dourados. Dentro destas, é possível observar quais as divisões com maiores QL, mas deixarei para o leitor fazer essa comparação em virtude da extensão das divisões e regiões (uma matriz 87 x 12 colocada na seção 2.2).

2.6 Coeficiente de especialização (CE)

O Coeficiente de especialização (\(CE\)) de Hoover e Giarratani (1984) faz uma análise alternativa ao indicador de quociente locacional, também para avaliar se o local é especializado em determinada atividade comparativamente ao local de referência. Para seu cálculo, recomenda-se utilizar os dados de emprego de cada local para cada setor, e comparar com os mesmos dados da economia de referência. Utiliza-se aqui a mesma notação utilizada no \(QL\), para a expressão de \(CE\) para a localidade \(i\):

\[ C{E_i} = \frac{1}{2}\sum\limits_k {\left| {\frac{{{E_{ki}}}}{{{E_i}}} - \frac{{{E_k}}}{E}} \right|} \]

em que: \({E_{ki}}\) é o emprego no setor \(k\) na localidade de análise \(i\); \({E_i}\) é o emprego total na localidade de análise \(i\); \({E_k}\) é o emprego no setor \(k\) da localidade de referência; e \(E\) é o emprego total da localidade de referência.
Valores próximos de zero (\(\left( {CE_{i}}= 0\right)\)) indicam que o local \(i\) tem estrutura no mesmo padrão de especialização que a localidade de referência. De forma oposta, valores próximos a hum (\(\left( {CE_{i}}= 1\right)\)) indicam que o local \(i\) tem padrão de especialização completamente diferente da localidade de referência.

Esta rotina pode ser resumida fazendo o uso do pacote EconGeo, e a função spec.coeff. Ela utiliza a mesma matriz mat utilizada para o QL.

# Coeficiente de especialização de Hoover pelo EconGeo
library(EconGeo)
ce2016 <- spec_coeff(mat)
knitr::kable(ce2016)
x
Amambai 0.2922770
Aquidauana - Anastácio 0.2531550
Campo Grande 0.1387183
Corumbá 0.2542972
Coxim 0.3144260
Dourados 0.1805880
Jardim 0.3173153
Naviraí - Mundo Novo 0.2096315
Nova Andradina 0.2967188
Paranaíba - Chapadão do Sul - Cassilândia 0.2424751
Ponta Porã 0.2121405
Três Lagoas 0.3026620

Referências

BALASSA, B. Trade Liberalization and Revealed Comparative Advantage, The Manchester School 33: 99-123. 1965.

BALLAND, P.A. Economic Geography in R: Introduction to the EconGeo Package, Papers in Evolutionary Economic Geography, 17 (09): 1-75, 2017.

CRUZ, B.O.; QUEIROZ, I.V. Efeitos encadeados do perfil setorial dos investimentos e a distribuição espacial da indústria: onde se localizam as indústrias dos setores com maiores impactos? Texto para discussão n. 2172, Brasília: IPEA, 2016.

FLORENCE, P. Sargent. Investment, location, and size of plant. Cambridge: Cambridge University Press, 1948.

MONASTERIO, Leonardo. Indicadores de análise regional e espacial. In: CRUZ et al (orgs). Economia regional e urbana : teorias e métodos com ênfase no Brasil. Brasília: Ipea, 2011. cap. 10. pp.315-331.

NORTH, Douglas. Teoria da localização e crescimento econômico regional. In: SCWARTZMANN, J. (org.) Economia regional e urbana: tetos escolhidos. Belo Horizonte: UFMG, p.333-343, 1977.

SOUZA, Filipe Lage de. A localização da indústria de transformação brasileira nas últimas três décadas. Rio de Janeiro: EPGE-FGV, 2002. (Dissertação, Mestrado em Economia). 130p.

WIELAND, Thomas. REAT: Regional Economic Analysis Toolbox. 2019. R package version 3.0.1. https://CRAN.R-project.org/package=REAT.

LS0tDQp0aXRsZTogIkVjb25vbWlhIFJlZ2lvbmFsIC0gUGVycm91eDogcG9sb3MsIGRpdmVyc2lkYWRlIGUgZXNwZWNpYWxpemHDp8OjbyBlbSBSIg0KYXV0aG9yOiAiQWRyaWFubyBNYXJjb3MgUm9kcmlndWVzIEZpZ3VlaXJlZG8sICplLW1haWw6IGFkcmlhbm8uZmlndWVpcmVkb0B1Zm1zLmJyKiINCmxpbmtjb2xvcjogYmx1ZQ0KYWJzdHJhY3Q6IA0KICBUaGlzIGlzIGFuIHVuZGVyZ3JhZCBzdHVkZW50IGxldmVsIGluc3RydWN0aW9uIGZvciBjbGFzcyB1c2UuICANCmRhdGU6ICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVkICVCICVZJylgIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICB0aGVtZTogZGVmYXVsdA0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgIHRvYzogeWVzDQogICAgdG9jX2Zsb2F0OiBubw0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIGZpZ19jYXB0aW9uOiB0cnVlDQogIHBkZl9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KLS0tDQoNCmBgYHtyIGtuaXRyX2luaXQsIGVjaG89RkFMU0UsIGNhY2hlPUZBTFNFfQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkocm1hcmtkb3duKQ0KbGlicmFyeShybWRmb3JtYXRzKQ0KDQojIyBHbG9iYWwgb3B0aW9ucw0Kb3B0aW9ucyhtYXgucHJpbnQ9IjEwMCIpDQpvcHRzX2NodW5rJHNldChlY2hvPVRSVUUsDQoJICAgICAgICAgICAgIGNhY2hlPUYsDQogICAgICAgICAgICAgICBwcm9tcHQ9RkFMU0UsDQogICAgICAgICAgICAgICB0aWR5PVRSVUUsDQogICAgICAgICAgICAgICBjb21tZW50PU5BLA0KICAgICAgICAgICAgICAgbWVzc2FnZT1GQUxTRSwNCiAgICAgICAgICAgICAgIHdhcm5pbmc9RkFMU0UpDQpvcHRzX2tuaXQkc2V0KHdpZHRoPTEwMCkNCmBgYA0KDQojIExpY2Vuw6dhIHsjTGljZW7Dp2EgLnVubnVtYmVyZWR9DQoNClRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDQuMCBJbnRlcm5hdGlvbmFsIExpY2Vuc2UuIFRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgbGljZW5zZSwgdmlzaXQgPGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzQuMC8+IG9yIHNlbmQgYSBsZXR0ZXIgdG8gQ3JlYXRpdmUgQ29tbW9ucywgUE8gQm94IDE4NjYsIE1vdW50YWluIFZpZXcsIENBIDk0MDQyLCBVU0EuDQoNCiFbTGljZW5zZTogQ0MgQlktU0EgNC4wXShodHRwczovL21pcnJvcnMuY3JlYXRpdmVjb21tb25zLm9yZy9wcmVzc2tpdC9idXR0b25zLzg4eDMxL3BuZy9ieS1zYS5wbmcpe3dpZHRoPSIyNSUifQ0KDQojIENpdGHDp8OjbyB7I0NpdGHDp8OjbyAudW5udW1iZXJlZH0NCg0KU3VnZXN0w6NvIGRlIGNpdGHDp8OjbzogRklHVUVJUkVETywgQWRyaWFubyBNYXJjb3MgUm9kcmlndWVzLiBFY29ub21pYSBSZWdpb25hbDogcG9sb3MsIGRpdmVyc2lkYWRlIGUgZXNwZWNpYWxpemHDp8OjbyBlbSBSLiBDYW1wbyBHcmFuZGUtTVMsQnJhc2lsOiBSU3R1ZGlvL1JwdWJzLCAyMDE5LiBEaXNwb27DrXZlbCBlbSA8aHR0cDovL3JwdWJzLmNvbS9hbXJvZmkvUmVnaW9uYWxfRWNvbm9taWNzX3BvbGVzX2RpdmVyc2l0eT4uDQoNCiMgSW50cm9kdcOnw6NvDQoNCiMjIFZpZGVvYXVsYXMNCg0KVmVyIHRhbWLDqW0gYXMgbWluaGFzIHZpZGVvYXVsYXMgcHLDoXRpY2EgZW0gW0VDT05PTUlBIFJFR0lPTkFMIDIwMjEuMTogMDUgUGVycm91eDogRXhlcmNpY2lvIFFMIGRpdmVyc2lkYWRlIHViaXF1aWRhZGUgTVNdKGh0dHBzOi8veW91dHUuYmUvZXQyalZLc3lsdlEgIkVDT05PTUlBIFJFR0lPTkFMIDIwMjEuMTogMDUgUGVycm91eDogRXhlcmNpY2lvIFFMIGRpdmVyc2lkYWRlIHViaXF1aWRhZGUgTVMiKSBlIGEgdGXDs3JpY2EgZW0gW0VDT05PTUlBIFJFR0lPTkFMIDIwMjEuMTogMDUgUGVycm91eCBlIG9zIHBvbG9zIGRlIGNyZXNjaW1lbnRvXShodHRwczovL3lvdXR1LmJlL3BieU5UREtjSDFnICJFQ09OT01JQSBSRUdJT05BTCAyMDIxLjE6IDA1IFBlcnJvdXggZSBvcyBwb2xvcyBkZSBjcmVzY2ltZW50byIpLg0KDQojIyBJZGVpYSBCw6FzaWNhDQoNCkEgaWRlaWEgYsOhc2ljYSBkZXN0ZSBhcnF1aXZvIMOpIG9yaWVudGFyIG9zIHByb2NlZGltZW50b3MgcGFyYSBvIGPDoWxjdWxvIGRvcyBpbmRpY2Fkb3JlcyBkZSBhbsOhbGlzZSByZWdpb25hbCBhIHNhYmVyOg0KDQoxLiAgUXVvY2llbnRlIExvY2FjaW9uYWwgKFFMKQ0KMi4gIMONbmRpY2UgZGUgRGl2ZXJzaWRhZGUgKERpdikNCjMuICDDjW5kaWNlIGRlIFViaXF1aWRhZGUgKFViaXEpDQoNClBhcmEgYSBtYWlvcmlhIGRvcyBjYXNvcywgb3MgZGFkb3Mgc2Vyw6NvIGRlIEVtcHJlZ28gU2V0b3JpYWwgKEUpIGNvbmZvcm1lIGFzIGRpdmlzw7VlcyBDTkFFIDIuMCwgcG9yIFJlZ2nDo28gR2VvZ3LDoWZpY2EgSW1lZGlhdGEgKFJHSSkgZGUgTWF0byBHcm9zc28gZG8gU3VsIGVtIDIwMTYuIEV4aXN0ZW0gcm90aW5hcyBwYXJhIGEgb2J0ZW7Dp8OjbyBlbGV0csO0bmljYSBkZXNzZXMgZGFkb3MsIG1hcyBwb3IgaG9yYSBlbGVzIHNlcsOjbyB0cmF6aWRvcyBqw6EgcHJlcGFyYWRvcyBlbSBwbGFuaWxoYSBlbGV0csO0bmljYSB0aXBvIE1TIEV4Y2VsLg0KDQojIFByb2NlZGltZW50b3MNCg0KIyMgQ2FycmVnYXIgb3MgZGFkb3MgZSBwYWNvdGVzDQoNCk9zIGRhZG9zIGZvcmFtIGFyZ2VnYWRvcyBlbSAxMiBSZWdpw7VlcyBHZW9ncsOhZmljYXMgSW1lZGlhdGFzIChSR0kpIGRlIE1hdG8gR3Jvc3NvIGRvIFN1bCBlIDg3IGRpdmlzw7VlcyBDTkFFIDIuMCBjb250ZW5kbyBvIG7Dum1lcm8gZGUgZW1wcmVnYWRvcyBmb3JtYWlzIGRhIFJBSVMvTVRFLiBTw6NvIHBvcnRhbnRvIDEyIG9ic2VydmHDp8O1ZXMgZXNwYWNpYWlzIG5hcyBsaW5oYXMgZSBhcyBkaXZpc8O1ZXMgbmFzIGNvbHVuYXMgY29udGVuZG8gYWluZGEgYSDDumx0aW1hIGNvbHVuYSBjb20gbyB0b3RhbCBkZSBjYWRhIFJHSSBwYXJhIG8gYW5vIGRlIDIwMTYuDQoNCkNvbW8gb3MgcGFjb3RlcyBSRUFUIGUgbyBFY29uR2VvIG7Do28gZXN0w6NvIChlbSAxMi4wNS4yMDIxKSBkaXNwb27DrXZlaXMgbm8gQ1JBTiwgZWxlcyBuZWNlc3NpdGFtIGFsZ3VtYXMgcm90aW5hcyBxdWUgc2Vyw6NvIGFxdWkgZXhwbGljYWRhcy4gTyBwYWNvdGUgUkVBVCBlc3TDoSBhcnF1aXZhZG8gbm8gQ1JBTiBwb3JxdWUgYXByZXNlbnRvdSBhbGd1bWFzIGZhbGhhcyBuYSB2ZXJzw6NvIGFycXVpdmFkYSBlbSAxMCBkZSBkZXplbWJybyBkZSAyMDIwICg8aHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL1JFQVQvaW5kZXguaHRtbD4pLg0KDQpFbnRyZXRhbnRvLCBzZSBvIGxlaXRvciBjaGVjYXIgb3MgcmVzdWx0YWRvcyBkYSB2ZXJzw6NvIDMuMC4yLCAoPGh0dHBzOi8vY3Jhbi1hcmNoaXZlLnItcHJvamVjdC5vcmcvd2ViL2NoZWNrcy8yMDIwLzIwMjAtMTItMTBfY2hlY2tfcmVzdWx0c19SRUFULmh0bWw+KSwgdmVyw6EgcXVlIHPDo28gcHJvYmxlbWFzIG5vIExpbnV4IGUgdW1hIG5vdGEgcGFyYSBvIE1BQ09TLiBObyBzaXN0ZW1hIFdpbmRvd3MgbsOjbyB0ZW0gcmVzc2FsdmFzLg0KDQpTZSBhY2Vzc2FyIG8gYGFyY2hpdmVgICg8aHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvc3JjL2NvbnRyaWIvQXJjaGl2ZS9SRUFULz4pIGRvIFJFQVQsIGVuY29udHJhcsOhIGFzIHZlcnPDtWVzIGFudGVyaW9yZXMgcXVlIGNvbnNlZ3VlbSBkZXNlbnZvbHZlciBhcyByb3RpbmFzIGFxdWkgbmVjZXNzw6FyaWFzLiBFc3RvdSB1dGlsaXphbmRvIGEgdmVyc8OjbyAzLjAuMSBpbnN0YWxhZGEgYSBwYXJ0aXIgZG8gYXJxdWl2byAoPGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3NyYy9jb250cmliL0FyY2hpdmUvUkVBVC9SRUFUXzMuMC4xLnRhci5nej4pLiBBcMOzcyBiYWl4w6EtbG8gZW0gc3VhIG3DoXF1aW5hLCB2w6EgZW0gYFBhY2thZ2VzYCwgYEluc3RhbGxgLCBgSW5zdGFsbCBmcm9tYCBlIGVzY29saGEgbyBhcnF1aXZvIGJhaXhhZG8uIFN1YSB0ZWxhIHBhcmVjZXLDoSBjb21vIGFiYWl4by4NCg0KIVtUZWxhIGRlIGluc3RhbGHDp8OjbyBkbyBSRUFUIHBvciBhcnF1aXZvXShpbnN0YWxhUkVBVC5wbmcgIlRlbGEgZGUgaW5zdGFsYcOnw6NvIGRvIFJFQVQgcG9yIGFycXVpdm8iKXt3aWR0aD0iNTAlIn0NCg0KT3V0cmEgZm9ybWEgw6kgYXBlbmFzIGluc3RhbGFyIHBlbG8gY29uc29sZSBmYXplbmRvIGNvbW8gbyBjw7NkaWdvIGFiYWl4bywgbGVtYnJhbmRvIGRlIGVzcGVjaWZpY2FyIG8gY2FtaW5obyBjb21wbGV0byBvbmRlIGVzdMOhIG8gYXJxdWl2by4NCg0KYGBgICAgICAgICAgDQppbnN0YWxsLnBhY2thZ2VzKCJ+L1JFQVRfMy4wLjEudGFyLmd6IiwgcmVwb3MgPSBOVUxMLCB0eXBlID0gInNvdXJjZSIpDQpgYGANCg0KUGFyYSBvIHBhY290ZSBFY29uR2VvLCBlc3RlIHBvZGUgc2VyIGluc3RhbGFkbyBmYXplbmRvIGNvbW8gYSBzZWd1aXI6DQoNCmBgYCAgICAgICAgIA0KaW5zdGFsbC5wYWNrYWdlcygiZGV2dG9vbHMiKQ0KbGlicmFyeShkZXZ0b29scykNCmRldnRvb2xzOjppbnN0YWxsX2dpdGh1YigiUEFCYWxsYW5kL0Vjb25HZW8iLCBmb3JjZSA9IFQpDQpgYGANCg0KT3MgZGFkb3MgZm9yYW0gXGBlbWJlZGRlZCBcYCBkZSBtb2RvIGEgZmFjaWxpdGFyIGEgcmVwcm9kdcOnw6NvIGRvIGPDs2RpZ28gKG8gYWNlc3NvIMOpIGZlaXRvIHZpYSBkb3dubG9hZCBkbyBjb2RlIGRlc3RlIHBvc3QpLCBtYXMgb3MgYWx1bm9zIGRhIFVGTVMgbWF0cmljdWxhZG9zIG5hIGRpc2NpcGxpbmEgZGUgRWNvbm9taWEgUmVnaW9uYWwgcG9kZW0gYWNlc3NhciBvIGFycXVpdm8gRXhjZWwgcGVsbyBBVkEtVUZNUy4gU8OjbyA4NyBkaXZpc8O1ZXMgQ05BRSBtYWlzIHVtYSBjb2x1bmEgZG8gdG90YWwgYW8gZmluYWwsIGUgYXMgZHVhcyBjb2x1bmFzIGlkZW50aWZpY2Fkb3JhcyBpbmljaWFpcyBkYXMgMTIgUkdJcyAoUmVnacO1ZXMgR2VvZ3LDoWZpY2FzIEltZWRpYXRhcykgZGUgTWF0byBHcm9zc28gZG8gU3VsLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCmRhZG9zPC0NCnN0cnVjdHVyZShsaXN0KHJnaSA9IGMoNTAwMDA5LCA1MDAwMTIsIDUwMDAwMSwgNTAwMDEwLCA1MDAwMDQsIA0KNTAwMDA1LCA1MDAwMTEsIDUwMDAwNiwgNTAwMDA3LCA1MDAwMDMsIDUwMDAwOCwgNTAwMDAyKSwgbm9tZV9yZ2kgPSBjKCJBbWFtYmFpIiwgDQoiQXF1aWRhdWFuYSAtIEFuYXN0w6FjaW8iLCAiQ2FtcG8gR3JhbmRlIiwgIkNvcnVtYsOhIiwgIkNveGltIiwgDQoiRG91cmFkb3MiLCAiSmFyZGltIiwgIk5hdmlyYcOtIC0gTXVuZG8gTm92byIsICJOb3ZhIEFuZHJhZGluYSIsIA0KIlBhcmFuYcOtYmEgLSBDaGFwYWTDo28gZG8gU3VsIC0gQ2Fzc2lsw6JuZGlhIiwgIlBvbnRhIFBvcsOjIiwgIlRyw6pzIExhZ29hcyINCiksIGRpdjEgPSBjKDI4MDYsIDI2OTYsIDcxNzIwLCA1MTQwLCAzMzQ0LCAxMjA3OCwgMzY1OCwgNDA2NSwgDQo0NjE0LCA0MjIzLCAyOTMyLCA2MDc3KSwgZGl2MiA9IGMoMjEwMiwgMzQxMiwgMTQwMjcsIDIxOTAsIDY5MDMsIA0KMTA3MzAsIDQ3MzksIDMxOTIsIDM0MjYsIDU0MjgsIDIyMTYsIDU1OTUpLCBkaXYzID0gYygwLCAyNywgMzY0LCANCjQ0LCA2LCA2NSwgMjU3LCA2LCA0LCAxNCwgMjcsIDkpLCBkaXY0ID0gYygxMDQsIDI4OSwgODUwNywgNTYyLCANCjM2MCwgMjA5NywgNDEzLCA0MDIsIDQxNiwgODIwLCAyODcsIDEzOTMpLCBkaXY1ID0gYyg1NiwgMjIxLCANCjE2NzcsIDI4OSwgMjA5LCA2NzQsIDc2NCwgMTU5LCAxMjQsIDI0NCwgMjA2LCA2MzEpLCBkaXY2ID0gYygzLCANCjUsIDE4NTMsIDU5LCAxMiwgMjU0LCAzOCwgNDIsIDE0LCA0NCwgMzIsIDIyNSksIGRpdjcgPSBjKDE1LCANCjcsIDIxODIsIDM5NSwgMzMsIDM3NCwgNDIsIDMxLCAyNCwgMzIzLCA3NiwgMTQ4KSwgZGl2OCA9IGMoMCwgDQowLCAyODYsIDQ1LCAxLCAxOSwgNCwgMCwgNCwgMiwgMCwgMCksIGRpdjkgPSBjKDQsIDUsIDQ3NSwgMTIsIA0KMywgMTM0LCAzLCAxMSwgMTQsIDcsIDE0LCAxOCksIGRpdjEwID0gYygwLCA1MSwgMjcxLCAxLCA1LCA0MCwgDQo0LCAxLCAyLCAwLCAwLCAxNyksIGRpdjExID0gYygwLCAwLCAwLCA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCANCjI2KSwgZGl2MTIgPSBjKDEzOCwgNDIzLCAxNDg4MywgNjk3LCA1NTQsIDM5MzksIDMwNSwgMzE2LCA1NTMsIA0KNzE5LCAyNDIsIDE1NzMpLCBkaXYxMyA9IGMoMTYsIDEzLCA0MTYsIDQ0LCAxOCwgNjEsIDksIDIzLCA1NSwgDQoxNTEsIDEsIDE0KSwgZGl2MTQgPSBjKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDApLCBkaXYxNSA9IGMoMTcxLCANCjE1OCwgOTYwNCwgMTczLCAxMTIsIDExNDczLCAxNTgsIDIzNCwgMjg2LCAzMzAsIDU1NywgNDQ1KSwgZGl2MTYgPSBjKDIsIA0KOSwgNTA3LCAyMSwgNCwgNzIsIDYsIDE3LCA4LCAxNiwgMTAsIDEyKSwgZGl2MTcgPSBjKDEwLCAyMCwgODg4LCANCjU3LCAzNCwgMTcxLCAxMSwgNTIsIDM4LCA0NCwgMjgsIDY4KSwgZGl2MTggPSBjKDAsIDAsIDI5NCwgMCwgDQoxMCwgNDksIDYsIDAsIDEsIDM1MiwgMSwgOSksIGRpdjE5ID0gYyg5NCwgMTI5LCAyOTQyLCAxMzgsIDE2NywgDQo5MTMsIDE0OSwgMzU3LCAxNjcsIDIzOCwgMTY0LCAzMTIpLCBkaXYyMCA9IGMoMiwgMTAsIDM1NTYsIDM0LCANCjU4OCwgODU5LCAxMCwgMTU0LCAwLCAzOSwgNzAsIDQ3MCksIGRpdjIxID0gYygxLCA5LCAyNjk0LCAxLCANCjE3LCAxMTgsIDEsIDcsIDczLCAxOCwgMCwgNyksIGRpdjIyID0gYygxNCwgNjQsIDkzMiwgMTE2LCAxOSwgDQoyMTgsIDIxNSwgNDQsIDQ2LCA3OSwgMzMsIDExMyksIGRpdjIzID0gYyg1LCAyLCA2MTAsIDEwLCA4LCAyMTUsIA0KMTUsIDYwLCAzMywgMjAsIDE5LCAxMDEpLCBkaXYyNCA9IGMoMTA1LCAxMjAsIDI4MzIsIDEwNCwgMjYyLCANCjk3NiwgMTY3LCAyNTQsIDIyOSwgNDY3LCAyMDUsIDQxMCksIGRpdjI1ID0gYygwLCAwLCAxMCwgMzIsIDAsIA0KMCwgMCwgMCwgMCwgMTYsIDAsIDApLCBkaXYyNiA9IGMoNCwgMSwgMTM0LCAyLCA4LCAyNCwgMiwgNiwgMiwgDQoxMCwgMCwgOCksIGRpdjI3ID0gYygwLCA1LCAyMDU0LCAxLCAzMCwgMiwgMzEsIDAsIDAsIDAsIDAsIDApLCANCiAgICBkaXYyOCA9IGMoNDYsIDEsIDE2NTEsIDE1NiwgMjQsIDc3LCAxMywgMTAsIDIwLCAxMSwgNSwgNTcNCiAgICApLCBkaXYyOSA9IGMoMzQ3LCAyOTMsIDgyMjUsIDM5NywgNjcxLCAzNTQ5LCAyNzEsIDYzOSwgNzk4LCANCiAgICA5NjEsIDUzNiwgMTE3NyksIGRpdjMwID0gYygyMTcsIDE0OSwgNzkzOCwgNTM3LCAzMjIsIDM0OTYsIA0KICAgIDMyMCwgNTExLCAzMDgsIDY0MiwgODk2LCA1MzMpLCBkaXYzMSA9IGMoMTY3NSwgMjQ4OCwgNDE2MzMsIA0KICAgIDI3NjcsIDM0ODAsIDE1NzY3LCAyNjI5LCAzNDMwLCAzNTc2LCA0NDAwLCAyNzA3LCA2MDE0KSwgZGl2MzIgPSBjKDE0LCANCiAgICAxMiwgMjI4MSwgMCwgMjAsIDQ0MywgMTUsIDYyNSwgMTE4LCAxMDgsIDE1LCAzODQpLCBkaXYzMyA9IGMoMTQ2LCANCiAgICA0LCA2MzU4LCAxNDgsIDExMywgMTE3MSwgMzgsIDI5MCwgMjUsIDM1MiwgNDcsIDE0NTIpLCBkaXYzNCA9IGMoMjQsIA0KICAgIDM3LCAxMzYwLCA0MSwgNjIsIDI1MCwgNjQsIDQ0LCA1MiwgODAsIDM5LCA3NSksIGRpdjM1ID0gYygwLCANCiAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwgZGl2MzYgPSBjKDExLCA4LCAzODAsIDEwLCANCiAgICAxMCwgMTUzLCAzLCAxMCwgMTAsIDMyLCA4LCA2MiksIGRpdjM3ID0gYygxMzMsIDQxOCwgMTU1ODcsIA0KICAgIDYxMywgMjE1LCA0NTI0LCAyOTIsIDM4MCwgMzE2LCA0NDMsIDU1MCwgMTEzOSksIGRpdjM4ID0gYygxNywgDQogICAgMTA1LCAxMDA5LCAzMywgODQsIDIxMSwgNjEsIDUzLCA1MiwgODIsIDM3LCA0MDcpLCBkaXYzOSA9IGMoMiwgDQogICAgMiwgMzYxLCAwLCA0LCA2LCAwLCAwLCAzNSwgMSwgOSwgNzYpLCBkaXY0MCA9IGMoMCwgMCwgMCwgDQogICAgMCwgMCwgMCwgMCwgMCwgMCwgMiwgMCwgMCksIGRpdjQxID0gYygwLCAwLCA2LCAxMTE1LCAwLCAwLCANCiAgICAwLCAwLCAwLCAxMiwgMCwgMCksIGRpdjQyID0gYygxMiwgMTQ1LCAyMjcsIDE3LCA0NCwgMjU2LCANCiAgICAzNTIsIDg2LCAxMywgNjksIDE3LCA1NSksIGRpdjQzID0gYygwLCAwLCAwLCAwLCAwLCAwLCAwLCANCiAgICAwLCAwLCA3MiwgMCwgMCksIGRpdjQ0ID0gYygwLCAwLCA4NzgsIDEsIDAsIDUsIDEzLCAwLCAwLCANCiAgICA3NywgNCwgMzcpLCBkaXY0NSA9IGMoMCwgMSwgMjQyLCAwLCAxLCAzLCAxLCA5LCAwLCAwLCAwLCANCiAgICAzMzI1KSwgZGl2NDYgPSBjKDAsIDAsIDE5OTcsIDAsIDM5NSwgMzQ2MSwgMCwgMjU2LCAxNDkwLCANCiAgICAxMzI4LCA2NzksIDApLCBkaXY0NyA9IGMoMCwgMiwgNCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgsIDAsIA0KICAgIDApLCBkaXY0OCA9IGMoOSwgMCwgNDExLCAwLCA2LCAxNTIsIDEzLCAyMiwgMTAxLCAzLCAwLCA0NA0KICAgICksIGRpdjQ5ID0gYygwLCAwLCAxMDUsIDAsIDEsIDIsIDAsIDAsIDU0LCAxNDMsIDAsIDEwODUpLCANCiAgICBkaXY1MCA9IGMoMzUsIDE1LCA0MTgsIDUsIDcsIDE2OCwgNiwgMjYsIDI3LCA0NjcsIDExLCA0MiksIA0KICAgIGRpdjUxID0gYygwLCAwLCA0LCAyLCAyLCA4LCAwLCAwLCAwLCAwLCAwLCAwKSwgZGl2NTIgPSBjKDM1OCwgDQogICAgODk2LCAxMTgwOCwgMjMyLCA0MDIsIDExODExLCA1NjksIDM2OTYsIDc0MzYsIDIwMzcsIDQ3MSwgDQogICAgMjg2NiksIGRpdjUzID0gYygxMywgMCwgNzY1LCAwLCAwLCAzNTMsIDM1LCAxMywgOCwgNDk3LCAxOSwgDQogICAgNjQ3KSwgZGl2NTQgPSBjKDIzLCAzOCwgNTk4LCAwLCAxMSwgNzcsIDcsIDQ0LCA1MCwgMzAsIDQwLCANCiAgICAyOTkpLCBkaXY1NSA9IGMoMzYsIDI2LCAxMTgyLCAxMjMsIDQ3LCA0MTEsIDI3LCAxMDIsIDgzLCANCiAgICAzMjUsIDEyLCA0ODQpLCBkaXY1NiA9IGMoMjcsIDIwNiwgMTEzMCwgMTc0LCAzNzcsIDU0NiwgMTg2LCANCiAgICAyNzMsIDIxMiwgMTM0LCA1MywgNDIxKSwgZGl2NTcgPSBjKDcsIDIsIDQzMCwgOSwgMTAsIDIwNywgDQogICAgNiwgMywgNywgNTc0LCAyNCwgMzkpLCBkaXY1OCA9IGMoMCwgMCwgMjUsIDAsIDAsIDAsIDAsIDAsIA0KICAgIDAsIDI0LCAwLCAwKSwgZGl2NTkgPSBjKDAsIDAsIDE0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgDQogICAgMCksIGRpdjYwID0gYygxNywgMCwgNTA1LCAwLCAxLCAyODEsIDAsIDM2LCAxNiwgMTEsIDAsIDE5Ng0KICAgICksIGRpdjYxID0gYyg2LCAwLCAzMDMsIDAsIDEsIDY0LCA0LCAxODgsIDE3LCAxMSwgMiwgMTM0OQ0KICAgICksIGRpdjYyID0gYygyLCAwLCAxMTYsIDAsIDAsIDQxLCA3LCAxNSwgMTUsIDUwLCA3LCA3MSksIA0KICAgIGRpdjYzID0gYygxNiwgMTAsIDM0MSwgMzMsIDEzLCAxNDcsIDksIDI1LCAzMiwgMTksIDEyLCA0NQ0KICAgICksIGRpdjY0ID0gYygyMSwgMjEsIDU3MywgMTMyLCAyNCwgNTY5LCA5LCA2MSwgMjQsIDY0LCA0NSwgDQogICAgMTYwKSwgZGl2NjUgPSBjKDAsIDE1MiwgODYsIDI5NywgMCwgMjQsIDAsIDQsIDEsIDk4LCAyNSwgDQogICAgMjkxKSwgZGl2NjYgPSBjKDM5LCAyMywgNTUxMiwgNTMsIDgxLCA1OTQsIDM3LCAyMTgsIDc5LCAxNTAsIA0KICAgIDM5LCAzMzU3KSwgZGl2NjcgPSBjKDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcpLCANCiAgICBkaXY2OCA9IGMoMzMsIDc0LCAxNzE0LCA5NCwgMzIsIDQyOSwgNjgsIDg0LCA1NSwgNzgsIDcwLCANCiAgICAxNzIpLCBkaXY2OSA9IGMoMiwgMTUsIDMzNiwgNiwgMzcsIDI2NiwgNCwgMTAsIDUsIDY4LCA2LCANCiAgICA2KSwgZGl2NzAgPSBjKDAsIDEsIDYwLCAyNywgODMsIDMyLCAxNCwgNiwgMTM0LCA1NCwgNCwgMiksIA0KICAgIGRpdjcxID0gYygxLCAwLCAzMTAsIDEzMiwgMCwgMTYwLCAwLCAwLCAwLCAzMywgMCwgMSksIGRpdjcyID0gYygxLCANCiAgICAwLCA2OTEsIDAsIDE0LCA2MSwgMCwgMjUzLCAzMTMsIDkxNywgMCwgMTA4NCksIGRpdjczID0gYygyMSwgDQogICAgMTQ5LCAxMjM3LCAxLCA4MCwgMjMsIDQwLCA0MCwgNzQsIDgzLCAyMCwgNTM5MSksIGRpdjc0ID0gYygwLCANCiAgICA3LCAxMDA1LCAxMSwgOCwgNjksIDEzLCA2LCAxMCwgMjM2LCAxLCA0MCksIGRpdjc1ID0gYygxNSwgDQogICAgMywgOTg4LCAyNywgMTcsIDIxNCwgMTQsIDMwLCAyNywgNTQsIDIxLCA4NSksIGRpdjc2ID0gYygxNiwgDQogICAgNCwgNjgwLCAwLCAwLCAxNzAsIDIsIDUsIDAsIDMsIDU2LCAwKSwgZGl2NzcgPSBjKDAsIDAsIDE2ODksIA0KICAgIDAsIDEsIDMsIDAsIDAsIDAsIDAsIDAsIDMpLCBkaXY3OCA9IGMoMCwgNiwgMTEwMiwgNTYsIDQ1LCANCiAgICAxMzcsIDYsIDMsIDE1LCA3NiwgNiwgNDExKSwgZGl2NzkgPSBjKDAsIDQsIDEwNjQsIDM2LCAyLCANCiAgICAxMjksIDAsIDEzLCAyOCwgNDYsIDQsIDE1OCksIGRpdjgwID0gYygyMywgNDgsIDg0OTEsIDg2LCANCiAgICAxMjYsIDkzMiwgNDUsIDEzNCwgMTExLCAxNzgsIDU5LCAyOTApLCBkaXY4MSA9IGMoMCwgMywgMjEsIA0KICAgIDEsIDQsIDQsIDEsIDIsIDEsIDAsIDUsIDUpLCBkaXY4MiA9IGMoMTgsIDE3NywgMzYwMCwgNzYsIA0KICAgIDEyMiwgODAzLCA2NCwgMjU1LCAxODksIDE1NCwgMTA3LCA4NTMpLCBkaXY4MyA9IGMoNSwgMiwgMTAxNDYsIA0KICAgIDE0MiwgMTQ3LCAxNzIwLCAyMiwgNTYsIDI1LCAyNywgMjAsIDI0NyksIGRpdjg0ID0gYygxNiwgMTQsIA0KICAgIDg3MCwgMzAsIDE1LCA0MjEsIDI3LCA1NCwgMjMsIDQ3LCAxOCwgOTYpLCBkaXY4NSA9IGMoMCwgMSwgDQogICAgMywgMzQ5LCAwLCAwLCA2LCAxLCAwLCAxLCAwLCAwKSwgZGl2ODYgPSBjKDAsIDAsIDI0MywgMTIsIA0KICAgIDAsIDE1LCAxNCwgMCwgMCwgMCwgMCwgOCksIGRpdjg3ID0gYygxNzgsIDE5NSwgMTEwNzYsIDgxNiwgDQogICAgNTk3LCAzNDA3LCAxOTYsIDY2NCwgNjQwLCA4NjIsIDQzMSwgMjE5NSksIFRvdGFsID0gYyg5MjM0LCANCiAgICAxMzQzMywgMzAzNjQwLCAxODk2OSwgMjA0NjUsIDEwMzM3NywgMTY1MzAsIDIyMTE4LCAyNjc1OCwgDQogICAgMjg3MDEsIDE0MjU3LCA1NDkyNCkpLCByb3cubmFtZXMgPSBjKE5BLCAtMTJMKSwgY2xhc3MgPSBjKCJ0YmxfZGYiLCANCiJ0YmwiLCAiZGF0YS5mcmFtZSIpKQ0KYXR0YWNoKGRhZG9zKQ0KYGBgDQoNCmBgYCAgICAgICAgIA0KbGlicmFyeShyZWFkeGwpDQpkYWRvcyA8LSByZWFkX2V4Y2VsKCJyZ2kyMDE2Lnhsc3giKQ0KYXR0YWNoKGRhZG9zKQ0KYGBgDQoNCiMjIFF1b2NpZW50ZSBMb2NhY2lvbmFsIChRTCkNCg0KUGFyYSBvcyBwcsOzeGltb3MgaW5kaWNhZG9yZXMsIG5lY2Vzc2l0YS1zZSBkb3MgZGFkb3MgZGUgZW1wcmVnbyBwb3Igc2V0b3IgZW0gY2FkYSBtdW5pY8OtcGlvIGRlIE1TLiBEZXN0YSBmb3JtYSwgY2hhbWEtc2UgYSBwbGFuaWxoYSBqw6EgcHJlcGFyYWRhIGNvbSBvcyBkYWRvcyBkYSBiYXNlIGRlIGluZm9ybWHDp8O1ZXMgUkFJUyBkbyBNaW5pc3TDqXJpbyBkbyBUcmFiYWxobyBlIEVtcHJlZ28gZG8gQnJhc2lsIChNVEUpLiBVbSBtZWlvIGRlIG9idGVyIHRhaXMgaW5mb3JtYcOnw7VlcyBlbGV0cm9uaWNhbWVudGUgw6kgcGVsbyBwYWNvdGUgYHJhaXNyYC4gT3V0cmEgZm9ybWEgw6kgcGVsYSBww6FnaW5hIDxodHRwOi8vYmkubXRlLmdvdi5ici9iZ2NhZ2VkL2xvZ2luLnBocD4uDQoNCkEgUkFJUyBwb3NzdWkgb3MgZGFkb3MgcGFyYSBvIGZpbmFsIGRlIGNhZGEgYW5vIChkZXplbWJybyksIHBvcnRhbnRvLCBvcyBzYWxkb3MgZGUgZW1wcmVnYWRvcyBvY3VwYWRvcy4gQSBDQUdFRCBhcHJlc2VudGEgb3V0cm8gdGlwbyBkZSBpbmZvcm1hw6fDo28sIGEgZGUgbGlnYWRvcyBlIGRlc2xpZ2Fkb3MsIGludsOpcyBkbyBzYWxkbyBkZSBwZXNzb2FzIG9jdXBhZGFzLg0KDQpVdGlsaXphcmVtb3Mgb3MgZGFkb3MgZGEgUkFJUyBwb3IgdsOtbmN1bG9zLCBwb3IgRGl2aXPDo28gQ05BRSAyLjAgZSBwb3IgbXVuaWPDrXBpby4gT3V0cmFzIGFncmVnYcOnw7VlcyBwb2RlbSBzZXIgdGVzdGFkYXMsIGEgY3JpdMOpcmlvIGRvIHVzdcOhcmlvLCBlIG5vIHByZXNlbnRlIGVzdHVkbyBvcyBkYWRvcyBtdW5pY2lwYWlzIGZvcmFtIGFncmVnYWRvcyBwYXJhIFJlZ2nDtWVzIEdlb2dyw6FmaWNhcyBJbWVkaWF0YXMgZG8gSUJHRS4gTyBwcm9jZWRpbWVudG8gcmVjb21lbmRhZG8gw6kgYmFpeGFyIG9zIGRhZG9zIHByaW1laXJvLCBvcmdhbml6YXIgZSBkZXBvaXMgY2hhbWFyIGEgcGxhbmlsaGEgY29uc29saWRhZGEgcGFyYSBvIFJTdHVkaW8uDQoNCk8gUXVvY2llbnRlIExvY2FjaW9uYWwgKFFMKSDDqSB1bWEgbWVkaWRhIHF1ZSBkw6EgYSBpbmZvcm1hw6fDo28gZGUgcXVhbCBvIHNldG9yIG1haXMgcmVwcmVzZW50YWRvIG5vIG11bmljw61waW8gKHJlZ2nDo28gZGUgYW7DoWxpc2UpIHF1YW5kbyBjb21wYXJhZG8gY29tIG8gbWVzbW8gc2V0b3Igbm8gZXN0YWRvIChyZWdpw6NvIGRlIHJlZmVyw6puY2lhKS4gRm9pIGVsYWJvcmFkbyBpbmljaWFsbWVudGUgcG9yIEhhaWcgKDE5MjgpIGUgdmVtIHNlbmRvIG11aXRvIHV0aWxpemFkbyBlbSB2w6FyaWFzIGFuw6FsaXNlcyByZWdpb25haXMgZSBkZSBsb2NhbGl6YcOnw6NvIGluZHVzdHJpYWwuIFRhbWLDqW0gY2hhbWFkbyBkZSDDjW5kaWNlIGRlIGBSZXZlYWxlZCBDb21wYXJhdGl2ZSBBZHZhbnRhZ2VgIChSQ0EgLS0gb3UgVmFudGFnZW0gY29tcGFyYXRpdmEgcmV2ZWxhZGEsIFZDUikgc2VndWluZG8gQmFsYXNhICgxOTY1KSwgb3Ugw61uZGljZSBkZSBIb292ZXItQmFsYXNzYS4NCg0KQSBleHByZXNzw6NvIGLDoXNpY2Egw6k6DQoNCiQkDQpRTF97a2l9PVxsZWZ0KCB7XGZyYWN7e1xmcmFje3t7RV97a2l9fX19e0VfaX19fXt7XGZyYWN7e3tFX2t9fX17RX19fX0gXHJpZ2h0KQ0KJCQNCg0KZW0gcXVlOiAke0Vfe2tpfX0kIMOpIG8gZW1wcmVnbyBubyBzZXRvciAkayQgbmEgbG9jYWxpZGFkZSBkZSBhbsOhbGlzZSAkaSQ7ICR7RV9pfSQgw6kgbyBlbXByZWdvIHRvdGFsIG5hIGxvY2FsaWRhZGUgZGUgYW7DoWxpc2UgJGkkOyAke0Vfa30kIMOpIG8gZW1wcmVnbyBubyBzZXRvciAkayQgZGEgbG9jYWxpZGFkZSBkZSByZWZlcsOqbmNpYTsgZSAkRSQgw6kgbyBlbXByZWdvIHRvdGFsIGRhIGxvY2FsaWRhZGUgZGUgcmVmZXLDqm5jaWEuDQoNCkEgaWRlaWEgw6kgc2FiZXIgc2UgbmEgbG9jYWxpZGFkZSBkZSBhbsOhbGlzZSwgYSBwcm9wb3LDp8OjbyBkbyBlbXByZWdvIGRvIHNldG9yIMOpIG1haW9yIG91IG1lbm9yIHF1ZSBlc3RhIHByb3BvcsOnw6NvIG5vIGxvY2FsIGRlIHJlZmVyw6puY2lhLiBBc3NpbSwgc2UgbyByZXN1bHRhZG8gZm9yIG1haW9yIHF1ZSBodW0gJFxsZWZ0KCB7UUxfe2tpfX1cZ3QgMVxyaWdodCkkLCBlbnTDo28gZGl6LXNlIHF1ZSBhIGxvY2FsaWRhZGUgZGUgYW7DoWxpc2Ugw6kgcmVsYXRpdmFtZW50ZSBtYWlzIGVzcGVjaWFsaXphZGEgbmVzc2Ugc2V0b3IgcXVlIGEgbG9jYWxpZGFkZSBkZSByZWbDqm5jaWEuIERlIG91dHJvIGxhZG8sIHZhbG9yZXMgbWVub3JlcyBxdWUgYSB1bmlkYWRlICRcbGVmdCgge1FMX3traX19XGx0IDFccmlnaHQpJCBpbmRpY2FtIHF1ZSBhIGxvY2FsaWRhZGUgYW5hbGlzYWRhIHRlbSByZXByZXNlbnRhw6fDo28gbWVub3IgZGVzdGUgc2V0b3IgZG8gcXVlIGEgcmVwcmVzZW50YcOnw6NvIGRlc3RlIG5hIGxvY2FsaWRhZGUgZGUgcmVmZXLDqm5jaWEuDQoNCiMjIyBFY29uR2VvIGRlIEJhbGxhbmQgKDIwMTcpDQoNCkVzdGEgcm90aW5hIHBvZGUgc2VyIHJlc3VtaWRhIGZhemVuZG8gbyB1c28gZG8gcGFjb3RlIGBFY29uR2VvYCwgZSBhIGZ1bsOnw6NvIGBSQ0FgIHBhcmEgb2J0ZXIgbyBRdW9jaWVudGUgTG9jYWNpb25hbCAoc2ltaWxhciBhbyAqUmV2ZWFsZWQgQ29tcGFyYXRpdmUgQWR2YW50YWdlKiAtIFJDQSAtIMOtbmRpY2UgZGUgQmFsYXNzYSwgMTk2NSkuIEVsYSB1dGlsaXphIHVtYSBtYXRyaXogY29udGVuZG8gb3MgZGFkb3Mgbm8gZm9ybWF0byBhYmFpeG8sIGVtIHF1ZSAkKEkxLEkyLEkzKSQgc8OjbyBhcyBpbmTDunN0cmlhcyBvdSBzZXRvcmVzLCBwYXJhIG9zIG11bmljw61waW9zICQoUjEsUjIsUjMpJC4NCg0KYGBgICAgICAgICAgDQptdW5pY2lwaW8gIHxJMSAgICAgICB8STIgICAgICB8IEkzDQotLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS18LS0tLS0tLS0tLS0tDQogUjEgICAgICAgIHwxMDAgICAgICB8MTUwICAgICB8IDE2NQ0KIFIyICAgICAgICB8MTMwICAgICAgfDQwMCAgICAgfCAyMjANCiBSMyAgICAgICAgfDIwMCAgICAgIHwxMjAwICAgIHwgMjANCmBgYA0KDQpQcmVwYXJhcmVtb3Mgb3MgZGFkb3MgcGFyYSBvcyBjw6FsY3Vsb3MsIGNvbnN0cnVpbmRvIHVtYSBtYXRyaXogYG1hdGA6DQoNCmBgYHtyfQ0KbGlicmFyeShFY29uR2VvKQ0KIyMgZ2VyYXIgYSBtYXRyaXogaW5kdXN0cmlhbCBkYSByZWdpw6NvLCBwYXJhIDIwMDYNCnNldC5zZWVkKDMxKQ0KbWF0IDwtIGFzLm1hdHJpeChkYWRvc1sxOjEyLDM6ODldKQ0KI3Jvd25hbWVzKG1hdCk8LSBjICgiUjEiLCAiUjIiLCAiUjMiLCAiUjQiLCAiUjUiLCJSNiIsICJSNyIsICJSOCIsICJSOSIsICJSMTAiLCJSMTEiLCJSMTIiKQ0Kcm93bmFtZXMobWF0KTwtZGFkb3Mkbm9tZV9yZ2kNCmNvbG5hbWVzKG1hdCkNCmBgYA0KDQpPIGPDoWxjdWxvIGRvIFF1b2NpZW50ZSBMb2NhY2lvbmFsIChRTCA9IFJDQSkgc2Vyw6EgZmF6ZW5kbzoNCg0KYGBge3J9DQpRTDIwMTY8LXJvdW5kKHJjYShtYXQpLGRpZ2l0cyA9IDQpDQpgYGANCg0KYGBge3IsIGVjaG89VFJVRX0NCmRpdmlzb2VzPC0gc3RydWN0dXJlKGxpc3QoZGl2ID0gYygiQURNSU5JU1RSQcOHw4NPIFDDmkJMSUNBLCBERUZFU0EgRSBTRUdVUklEQURFIFNPQ0lBTCIsIA0KIkFHw4pOQ0lBUyBERSBWSUFHRU5TLCBPUEVSQURPUkVTIFRVUsONU1RJQ09TIEUgU0VSVknDh09TIERFIFJFU0VSVkFTIiwgDQoiQUdSSUNVTFRVUkEsIFBFQ1XDgVJJQSBFIFNFUlZJw4dPUyBSRUxBQ0lPTkFET1MiLCAiQUxJTUVOVEHDh8ODTyIsIA0KIkFMT0pBTUVOVE8iLCAiQUxVR1XDiUlTIE7Dg08tSU1PQklMScOBUklPUyBFIEdFU1TDg08gREUgQVRJVk9TIElOVEFOR8ONVkVJUyBOw4NPLUZJTkFOQ0VJUk9TIiwgDQoiQVJNQVpFTkFNRU5UTyBFIEFUSVZJREFERVMgQVVYSUxJQVJFUyBET1MgVFJBTlNQT1JURVMiLCAiQVRJVklEQURFUyBBUlTDjVNUSUNBUywgQ1JJQVRJVkFTIEUgREUgRVNQRVTDgUNVTE9TIiwgDQoiQVRJVklEQURFUyBBVVhJTElBUkVTIERPUyBTRVJWScOHT1MgRklOQU5DRUlST1MsIFNFR1VST1MsIFBSRVZJRMOKTkNJQSBDT01QTEVNRU5UQVIgRSBQTEFOT1MgREUgU0HDmkRFIiwgDQoiQVRJVklEQURFUyBDSU5FTUFUT0dSw4FGSUNBUywgUFJPRFXDh8ODTyBERSBWw41ERU9TIEUgREUgUFJPR1JBTUFTIERFIFRFTEVWSVPDg08iLCANCiJBVElWSURBREVTIERFIEFQT0lPIMOAIEVYVFJBw4fDg08gREUgTUlORVJBSVMiLCAiQVRJVklEQURFUyBERSBBVEVOw4fDg08gw4AgU0HDmkRFIEhVTUFOQSIsIA0KIkFUSVZJREFERVMgREUgQVRFTsOHw4NPIMOAIFNBw5pERSBIVU1BTkEgSU5URUdSQURBUyBDT00gQVNTSVNUw4pOQ0lBIFNPQ0lBTCwgUFJFU1RBREFTIEVNIFJFU0lEw4pOQ0lBUyBDT0xFVElWQVMgRSBQQVJUSUNVTEFSRVMiLCANCiJBVElWSURBREVTIERFIEVYUExPUkHDh8ODTyBERSBKT0dPUyBERSBBWkFSIEUgQVBPU1RBUyIsICJBVElWSURBREVTIERFIE9SR0FOSVpBw4fDlUVTIEFTU09DSUFUSVZBUyIsIA0KIkFUSVZJREFERVMgREUgUFJFU1RBw4fDg08gREUgU0VSVknDh09TIERFIElORk9STUHDh8ODTyIsICJBVElWSURBREVTIERFIFLDgURJTyBFIERFIFRFTEVWSVPDg08iLCANCiJBVElWSURBREVTIERFIFNFREVTIERFIEVNUFJFU0FTIEUgREUgQ09OU1VMVE9SSUEgRU0gR0VTVMODTyBFTVBSRVNBUklBTCIsIA0KIkFUSVZJREFERVMgREUgU0VSVknDh09TIEZJTkFOQ0VJUk9TIiwgIkFUSVZJREFERVMgREUgVklHSUzDgk5DSUEsIFNFR1VSQU7Dh0EgRSBJTlZFU1RJR0HDh8ODTyIsIA0KIkFUSVZJREFERVMgRE9TIFNFUlZJw4dPUyBERSBURUNOT0xPR0lBIERBIElORk9STUHDh8ODTyIsICJBVElWSURBREVTIEVTUE9SVElWQVMgRSBERSBSRUNSRUHDh8ODTyBFIExBWkVSIiwgDQoiQVRJVklEQURFUyBJTU9CSUxJw4FSSUFTIiwgIkFUSVZJREFERVMgSlVSw41ESUNBUywgREUgQ09OVEFCSUxJREFERSBFIERFIEFVRElUT1JJQSIsIA0KIkFUSVZJREFERVMgTElHQURBUyBBTyBQQVRSSU3DlE5JTyBDVUxUVVJBTCBFIEFNQklFTlRBTCIsICJBVElWSURBREVTIFZFVEVSSU7DgVJJQVMiLCANCiJDQVBUQcOHw4NPLCBUUkFUQU1FTlRPIEUgRElTVFJJQlVJw4fDg08gREUgw4FHVUEiLCAiQ09MRVRBLCBUUkFUQU1FTlRPIEUgRElTUE9TScOHw4NPIERFIFJFU8ONRFVPUyIsIA0KIkNPTcOJUkNJTyBFIFJFUEFSQcOHw4NPIERFIFZFw41DVUxPUyBBVVRPTU9UT1JFUyBFIE1PVE9DSUNMRVRBUyIsIA0KIkNPTcOJUkNJTyBQT1IgQVRBQ0FETywgRVhDRVRPIFZFw41DVUxPUyBBVVRPTU9UT1JFUyBFIE1PVE9DSUNMRVRBUyIsIA0KIkNPTcOJUkNJTyBWQVJFSklTVEEiLCAiQ09ORkVDw4fDg08gREUgQVJUSUdPUyBETyBWRVNUVcOBUklPIEUgQUNFU1PDk1JJT1MiLCANCiJDT05TVFJVw4fDg08gREUgRURJRsONQ0lPUyIsICJDT1JSRUlPIEUgT1VUUkFTIEFUSVZJREFERVMgREUgRU5UUkVHQSIsIA0KIkRFU0NPTlRBTUlOQcOHw4NPIEUgT1VUUk9TIFNFUlZJw4dPUyBERSBHRVNUw4NPIERFIFJFU8ONRFVPUyIsICJFREnDh8ODTyBFIEVEScOHw4NPIElOVEVHUkFEQSDDgCBJTVBSRVNTw4NPIiwgDQoiRURVQ0HDh8ODTyIsICJFTEVUUklDSURBREUsIEfDgVMgRSBPVVRSQVMgVVRJTElEQURFUyIsICJFU0dPVE8gRSBBVElWSURBREVTIFJFTEFDSU9OQURBUyIsIA0KIkVYVFJBw4fDg08gREUgQ0FSVsODTyBNSU5FUkFMIiwgIkVYVFJBw4fDg08gREUgTUlORVJBSVMgTUVUw4FMSUNPUyIsIA0KIkVYVFJBw4fDg08gREUgTUlORVJBSVMgTsODTy1NRVTDgUxJQ09TIiwgIkVYVFJBw4fDg08gREUgUEVUUsOTTEVPIEUgR8OBUyBOQVRVUkFMIiwgDQoiRkFCUklDQcOHw4NPIERFIEJFQklEQVMiLCAiRkFCUklDQcOHw4NPIERFIENFTFVMT1NFLCBQQVBFTCBFIFBST0RVVE9TIERFIFBBUEVMIiwgDQoiRkFCUklDQcOHw4NPIERFIENPUVVFLCBERSBQUk9EVVRPUyBERVJJVkFET1MgRE8gUEVUUsOTTEVPIEUgREUgQklPQ09NQlVTVMONVkVJUyIsIA0KIkZBQlJJQ0HDh8ODTyBERSBFUVVJUEFNRU5UT1MgREUgSU5GT1JNw4FUSUNBLCBQUk9EVVRPUyBFTEVUUsOUTklDT1MgRSDDk1BUSUNPUyIsIA0KIkZBQlJJQ0HDh8ODTyBERSBNw4FRVUlOQVMgRSBFUVVJUEFNRU5UT1MiLCAiRkFCUklDQcOHw4NPIERFIE3DgVFVSU5BUywgQVBBUkVMSE9TIEUgTUFURVJJQUlTIEVMw4lUUklDT1MiLCANCiJGQUJSSUNBw4fDg08gREUgTcOTVkVJUyIsICJGQUJSSUNBw4fDg08gREUgT1VUUk9TIEVRVUlQQU1FTlRPUyBERSBUUkFOU1BPUlRFLCBFWENFVE8gVkXDjUNVTE9TIEFVVE9NT1RPUkVTIiwgDQoiRkFCUklDQcOHw4NPIERFIFBST0RVVE9TIEFMSU1FTlTDjUNJT1MiLCAiRkFCUklDQcOHw4NPIERFIFBST0RVVE9TIERFIEJPUlJBQ0hBIEUgREUgTUFURVJJQUwgUEzDgVNUSUNPIiwgDQoiRkFCUklDQcOHw4NPIERFIFBST0RVVE9TIERFIE1BREVJUkEiLCAiRkFCUklDQcOHw4NPIERFIFBST0RVVE9TIERFIE1FVEFMLCBFWENFVE8gTcOBUVVJTkFTIEUgRVFVSVBBTUVOVE9TIiwgDQoiRkFCUklDQcOHw4NPIERFIFBST0RVVE9TIERFIE1JTkVSQUlTIE7Dg08tTUVUw4FMSUNPUyIsICJGQUJSSUNBw4fDg08gREUgUFJPRFVUT1MgRElWRVJTT1MiLCANCiJGQUJSSUNBw4fDg08gREUgUFJPRFVUT1MgRE8gRlVNTyIsICJGQUJSSUNBw4fDg08gREUgUFJPRFVUT1MgRkFSTU9RVcONTUlDT1MgRSBGQVJNQUPDilVUSUNPUyIsIA0KIkZBQlJJQ0HDh8ODTyBERSBQUk9EVVRPUyBRVcONTUlDT1MiLCAiRkFCUklDQcOHw4NPIERFIFBST0RVVE9TIFTDilhURUlTIiwgDQoiRkFCUklDQcOHw4NPIERFIFZFw41DVUxPUyBBVVRPTU9UT1JFUywgUkVCT1FVRVMgRSBDQVJST0NFUklBUyIsIA0KIklNUFJFU1PDg08gRSBSRVBST0RVw4fDg08gREUgR1JBVkHDh8OVRVMiLCAiTUFOVVRFTsOHw4NPLCBSRVBBUkHDh8ODTyBFIElOU1RBTEHDh8ODTyBERSBNw4FRVUlOQVMgRSBFUVVJUEFNRU5UT1MiLCANCiJNRVRBTFVSR0lBIiwgIk9CUkFTIERFIElORlJBLUVTVFJVVFVSQSIsICJPUkdBTklTTU9TIElOVEVSTkFDSU9OQUlTIEUgT1VUUkFTIElOU1RJVFVJw4fDlUVTIEVYVFJBVEVSUklUT1JJQUlTIiwgDQoiT1VUUkFTIEFUSVZJREFERVMgREUgU0VSVknDh09TIFBFU1NPQUlTIiwgIk9VVFJBUyBBVElWSURBREVTIFBST0ZJU1NJT05BSVMsIENJRU5Uw41GSUNBUyBFIFTDiUNOSUNBUyIsIA0KIlBFU0NBIEUgQVHDnElDVUxUVVJBIiwgIlBFU1FVSVNBIEUgREVTRU5WT0xWSU1FTlRPIENJRU5Uw41GSUNPIiwgDQoiUFJFUEFSQcOHw4NPIERFIENPVVJPUyBFIEZBQlJJQ0HDh8ODTyBERSBBUlRFRkFUT1MgREUgQ09VUk8sIEFSVElHT1MgUEFSQSBWSUFHRU0gRSBDQUzDh0FET1MiLCANCiJQUk9EVcOHw4NPIEZMT1JFU1RBTCIsICJQVUJMSUNJREFERSBFIFBFU1FVSVNBIERFIE1FUkNBRE8iLCAiUkVQQVJBw4fDg08gRSBNQU5VVEVOw4fDg08gREUgRVFVSVBBTUVOVE9TIERFIElORk9STcOBVElDQSBFIENPTVVOSUNBw4fDg08gRSBERSBPQkpFVE9TIFBFU1NPQUlTIEUgRE9Nw4lTVElDT1MiLCANCiJTRUdVUk9TLCBSRVNTRUdVUk9TLCBQUkVWSUTDik5DSUEgQ09NUExFTUVOVEFSIEUgUExBTk9TIERFIFNBw5pERSIsIA0KIlNFTEXDh8ODTywgQUdFTkNJQU1FTlRPIEUgTE9DQcOHw4NPIERFIE3Dg08tREUtT0JSQSIsICJTRVJWScOHT1MgREUgQVJRVUlURVRVUkEgRSBFTkdFTkhBUklBIiwgDQoiU0VSVknDh09TIERFIEFTU0lTVMOKTkNJQSBTT0NJQUwgU0VNIEFMT0pBTUVOVE8iLCAiU0VSVknDh09TIERFIEVTQ1JJVMOTUklPLCBERSBBUE9JTyBBRE1JTklTVFJBVElWTyBFIE9VVFJPUyBTRVJWScOHT1MgUFJFU1RBRE9TIMOAUyBFTVBSRVNBUyIsIA0KIlNFUlZJw4dPUyBET03DiVNUSUNPUyIsICJTRVJWScOHT1MgRVNQRUNJQUxJWkFET1MgUEFSQSBDT05TVFJVw4fDg08iLCANCiJTRVJWScOHT1MgUEFSQSBFRElGw41DSU9TIEUgQVRJVklEQURFUyBQQUlTQUfDjVNUSUNBUyIsICJURUxFQ09NVU5JQ0HDh8OVRVMiLCANCiJUUkFOU1BPUlRFIEHDiVJFTyIsICJUUkFOU1BPUlRFIEFRVUFWScOBUklPIiwgIlRSQU5TUE9SVEUgVEVSUkVTVFJFIg0KKSksIHJvdy5uYW1lcyA9IGMoTkEsIC04N0wpLCBjbGFzcyA9IGMoInRibF9kZiIsICJ0YmwiLCAiZGF0YS5mcmFtZSINCikpDQpgYGANCg0KYGBge3J9DQpEVDo6ZGF0YXRhYmxlKGNiaW5kKGRpdmlzb2VzLHQoUUwyMDE2KSkpDQpgYGANCg0KIyMgw41uZGljZSBkZSBEaXZlcnNpZGFkZSAoRGl2KQ0KDQpDw6FsY3VsbyBkYSBkaXZlcnNpZGFkZSBwZWxvIHBhY290ZSBgRWNvbkdlb2AsIGZ1bsOnw6NvIGBkaXZlcnNpdHlgLiBBIGZ1bsOnw6NvIGNhbGN1bGEgdW1hIG1lZGlkYSBzaW1wbGVzIGRlIGRpdmVyc2lkYWRlIGRhcyByZWdpw7VlcyBjYWxjdWxhbmRvIG8gbsO6bWVybyBkZSBzZXRvcmVzIG5vcyBxdWFpcyBhIHJlZ2nDo28gdGVtIHZhbnRhZ2VtIGNvbXBhcmF0aXZhIHJlbGF0aXZhIChSQ0EpLCBvdSBzZWphLCAkUUwgPiAxJCBlbSByZWxhw6fDo28gYXMgcmVnacO1ZXMgZGFzIG1hdHJpemVzIGRlIGluY2lkw6puY2lhLg0KDQpgYGB7cn0NCmRpdjIwMTY8LWRpdmVyc2l0eShtYXQscmNhID0gVFJVRSkNCmtuaXRyOjprYWJsZShkaXYyMDE2KQ0KDQojIG9yZGVuYXJlbW9zIG9zIGRhZG9zIGNvbmZvcm1lIGEgc2VxdWVuY2lhIGRvIHNoYXBlZmlsZSBkbyBtYXBhDQojIGEgc2VyIHBsb3RhZG8gbmEgcHLDs3hpbWEgc2XDp8Ojbw0KZGF0YTwtY2JpbmQoZGFkb3MkcmdpLGRpdjIwMTYpIA0KZGF0YW9yZDwtZGF0YVtvcmRlcihkYXRhWywxXSksXQ0KYGBgDQoNCiMjIMONbmRpY2UgZGUgVWJpcXVpZGFkZSAodWJpcSkNCg0KQSBmdW7Dp8OjbyBgdWJpcXVpdHlgIGRvIHBhY290ZSBgRWNvbkdlb2AgY2FsY3VsYSB1bWEgbWVkaWRhIHNpbXBsZXMgZG8gbsO6bWVybyBkZSByZWdpw7VlcyBlbSBxdWUgdW0gc2V0b3Igw6kgZW5jb250cmFkbyAob3Ugc2VqYSwgY29tIFFMXD4xKS4gVGVvcmljYW1lbnRlLCBzZXRvcmVzIHF1ZSBzw6NvIG1haXMgY29tdW1lbnRlIGVuY29udHJhZG9zIHPDo28gc2V0b3JlcyBtZW5vcyBjb21wbGV4b3MgZSwgcG9ydGFudG8sIG1lbm9zIGV4aWdlbnRlcyBkZSBjYXBhY2lkYWRlcyB0w6ljbmljYXMuDQoNCmBgYHtyfQ0KbGlicmFyeShrbml0cik7bGlicmFyeSh0aWR5cik7bGlicmFyeShkcGx5cik7bGlicmFyeShEVCk7bGlicmFyeShtYWdyaXR0cikNCnViaXEyMDE2PC11YmlxdWl0eShtYXQscmNhID0gVFJVRSkNCmRhdGF0YWJsZShjYmluZChkaXZpc29lcyx1YmlxMjAxNikpDQpgYGANCg0KIyMgTWFwYSBkYSBkaXZlcnNpZGFkZQ0KDQpWZWphIGNvbW8gZmF6ZXIgbWFwYXMgZGUgZm9ybWFzIGRpZmVyZW50ZXMgYXNzaXN0aW5kbyBhcyB2aWRlb2F1bGFzOiBbRUNPTk9NSUEgUkVHSU9OQUwgMjAyMSBNYXBhcyBlbSBSU3R1ZGlvIGNvbSBnZW9iciBlIGdncGxvdDIgLSBwYXJ0ZSAxXShodHRwczovL3lvdXR1LmJlL0FqZkVVdF9JRk53ICJFQ09OT01JQSBSRUdJT05BTCAyMDIxIE1hcGFzIGVtIFJTdHVkaW8gY29tIGdlb2JyIGUgZ2dwbG90MiAtIHBhcnRlIDEiKSA7IGUgW0VDT05PTUlBIFJFR0lPTkFMIDIwMjEgTWFwYXMgZW0gUlN0dWRpbyBjb20gZ2VvYnIgZSBnZ3Bsb3QyIC0gcGFydGUgMl0oaHR0cHM6Ly95b3V0dS5iZS9OMUFzaDNPWmtnMCAiRUNPTk9NSUEgUkVHSU9OQUwgMjAyMSBNYXBhcyBlbSBSU3R1ZGlvIGNvbSBnZW9iciBlIGdncGxvdDIgLSBwYXJ0ZSAyIikuDQoNCmBgYHtyfQ0KbGlicmFyeShyZ2RhbCkNCmxpYnJhcnkoc2YpDQpsaWJyYXJ5KG1hcHRvb2xzKQ0KDQptcy5vbmx5IDwtIHJlYWRPR1IoIk1TUkdJMjAxNy5zaHAiLCB2ZXJib3NlID0gRkFMU0UpDQptcy5vbmx5QGRhdGEkZGl2MjAxNiA8LSBkYXRhb3JkWywyXQ0KI3JiUGFsIDwtIGNvbG9yUmFtcFBhbGV0dGUoYygnd2hpdGUnLCAnYmx1ZScpKQ0KI21zLm9ubHlAZGF0YSRjb2wgPC0gcmJQYWwoMTIpW2FzLm51bWVyaWMoY3V0KG1zLm9ubHlAZGF0YSRkaXYyMDE2LCBzZXEoMCwgNjAsIGJ5ID0gNSkpKV0NCmNsYXNzZXMgPC0gYygnNDAtfDUwJywnMzAtfDQwJywnMjAtfDMwJywnMTAtfDIwJywnMC18MTAnKQ0KDQptcy5vbmx5QGRhdGEkZ3JvdXBzW21zLm9ubHlAZGF0YSRkaXYyMDE2IDw9IDEwXSA8LSAxIA0KbXMub25seUBkYXRhJGdyb3Vwc1ttcy5vbmx5QGRhdGEkZGl2MjAxNiA+IDEwICYgbXMub25seUBkYXRhJGRpdjIwMTYgPD0yMF0gPC0gMiANCm1zLm9ubHlAZGF0YSRncm91cHNbbXMub25seUBkYXRhJGRpdjIwMTYgPiAyMCAmIG1zLm9ubHlAZGF0YSRkaXYyMDE2IDw9MzBdIDwtIDMgDQptcy5vbmx5QGRhdGEkZ3JvdXBzW21zLm9ubHlAZGF0YSRkaXYyMDE2ID4gMzAgJiBtcy5vbmx5QGRhdGEkZGl2MjAxNiA8PTQwXSA8LSA0IA0KbXMub25seUBkYXRhJGdyb3Vwc1ttcy5vbmx5QGRhdGEkZGl2MjAxNiA+IDQwICYgbXMub25seUBkYXRhJGRpdjIwMTYgPD01MF0gPC0gNSANCm1zLm9ubHlAZGF0YSRjb2wgPC0gYygncmVkJywnZ3JlZW4nLCd3aGl0ZScsJ3llbGxvdycsJ2JsdWUnKVttcy5vbmx5QGRhdGEkZ3JvdXBzXQ0KICAgICAgICAgICAgICAgICAgICANCnBsb3QobXMub25seSwgY29sID0gbXMub25seUBkYXRhJGNvbCwNCiAgICAgbWFpbiA9ICJEaXZlcnNpZGFkZSBkYXMgUmVnacO1ZXMgR2VvZ3LDoWZpY2FzIEltZWRpYXRhcyANCiAgICAgZGUgTWF0byBHcm9zc28gZG8gU3VsLCAyMDE2IikNCg0KaW52aXNpYmxlKHRleHQoY29vcmRpbmF0ZXMobXMub25seSksIGxhYmVsID0gYXMuY2hhcmFjdGVyKHJvdy5uYW1lcyhkYXRhb3JkKSksIGNleCA9IDAuNikpDQojIGFkaWNpb25lIHVtYSBsZWdlbmRhIGFvIG1hcGENCmxlZ2VuZCgiYm90dG9tcmlnaHQiLCAgICMgbG9jYWwgZGEgbGVnZW5kYQ0KICAgbGVnZW5kID0gY2xhc3NlcywgIyBjYXRlZ29yaWFzIGRhIGxlZ2VuZGENCiAgIGZpbGwgPSBjKCdibHVlJywneWVsbG93Jywnd2hpdGUnLCdncmVlbicsJ3JlZCcpKSAjIGNvcmVzIG5hIGxlZ2VuZGENCmBgYA0KDQpFc3RlIG1hcGEgZXZpZGVuY2lhIGEgZGl2ZXJzaWRhZGUgZGEgUkdJIENhbXBvIEdyYW5kZSwgc2VndWlkYSBkYXMgUkdJIGRlIENvcnVtYsOhLCBkZSBUcsOqcyBMYWdvYXMsIGRlIFBhcmFuYcOtYmEgLSBDaGFwYWTDo28gZG8gU3VsIC0gQ2Fzc2lsw6JuZGlhLCBlIGRlIERvdXJhZG9zLiBEZW50cm8gZGVzdGFzLCDDqSBwb3Nzw612ZWwgb2JzZXJ2YXIgcXVhaXMgYXMgZGl2aXPDtWVzIGNvbSBtYWlvcmVzIFFMLCBtYXMgZGVpeGFyZWkgcGFyYSBvIGxlaXRvciBmYXplciBlc3NhIGNvbXBhcmHDp8OjbyBlbSB2aXJ0dWRlIGRhIGV4dGVuc8OjbyBkYXMgZGl2aXPDtWVzIGUgcmVnacO1ZXMgKHVtYSBtYXRyaXogODcgeCAxMiBjb2xvY2FkYSBuYSBzZcOnw6NvIDIuMikuDQoNCiMjIENvZWZpY2llbnRlIGRlIGVzcGVjaWFsaXphw6fDo28gKENFKQ0KDQpPIENvZWZpY2llbnRlIGRlIGVzcGVjaWFsaXphw6fDo28gKCRDRSQpIGRlIEhvb3ZlciBlIEdpYXJyYXRhbmkgKDE5ODQpIGZheiB1bWEgYW7DoWxpc2UgYWx0ZXJuYXRpdmEgYW8gaW5kaWNhZG9yIGRlIHF1b2NpZW50ZSBsb2NhY2lvbmFsLCB0YW1iw6ltIHBhcmEgYXZhbGlhciBzZSBvIGxvY2FsIMOpIGVzcGVjaWFsaXphZG8gZW0gZGV0ZXJtaW5hZGEgYXRpdmlkYWRlIGNvbXBhcmF0aXZhbWVudGUgYW8gbG9jYWwgZGUgcmVmZXLDqm5jaWEuIFBhcmEgc2V1IGPDoWxjdWxvLCByZWNvbWVuZGEtc2UgdXRpbGl6YXIgb3MgZGFkb3MgZGUgZW1wcmVnbyBkZSBjYWRhIGxvY2FsIHBhcmEgY2FkYSBzZXRvciwgZSBjb21wYXJhciBjb20gb3MgbWVzbW9zIGRhZG9zIGRhIGVjb25vbWlhIGRlIHJlZmVyw6puY2lhLiBVdGlsaXphLXNlIGFxdWkgYSBtZXNtYSBub3Rhw6fDo28gdXRpbGl6YWRhIG5vICRRTCQsIHBhcmEgYSBleHByZXNzw6NvIGRlICRDRSQgcGFyYSBhIGxvY2FsaWRhZGUgJGkkOg0KDQokJA0KQ3tFX2l9ID0gXGZyYWN7MX17Mn1cc3VtXGxpbWl0c19rIHtcbGVmdHwge1xmcmFje3t7RV97a2l9fX19e3t7RV9pfX19IC0gXGZyYWN7e3tFX2t9fX17RX19IFxyaWdodHx9DQokJA0KDQplbSBxdWU6ICR7RV97a2l9fSQgw6kgbyBlbXByZWdvIG5vIHNldG9yICRrJCBuYSBsb2NhbGlkYWRlIGRlIGFuw6FsaXNlICRpJDsgJHtFX2l9JCDDqSBvIGVtcHJlZ28gdG90YWwgbmEgbG9jYWxpZGFkZSBkZSBhbsOhbGlzZSAkaSQ7ICR7RV9rfSQgw6kgbyBlbXByZWdvIG5vIHNldG9yICRrJCBkYSBsb2NhbGlkYWRlIGRlIHJlZmVyw6puY2lhOyBlICRFJCDDqSBvIGVtcHJlZ28gdG90YWwgZGEgbG9jYWxpZGFkZSBkZSByZWZlcsOqbmNpYS5cDQpWYWxvcmVzIHByw7N4aW1vcyBkZSB6ZXJvICgkXGxlZnQoIHtDRV97aX19PSAwXHJpZ2h0KSQpIGluZGljYW0gcXVlIG8gbG9jYWwgJGkkIHRlbSBlc3RydXR1cmEgbm8gbWVzbW8gcGFkcsOjbyBkZSBlc3BlY2lhbGl6YcOnw6NvIHF1ZSBhIGxvY2FsaWRhZGUgZGUgcmVmZXLDqm5jaWEuIERlIGZvcm1hIG9wb3N0YSwgdmFsb3JlcyBwcsOzeGltb3MgYSBodW0gKCRcbGVmdCgge0NFX3tpfX09IDFccmlnaHQpJCkgaW5kaWNhbSBxdWUgbyBsb2NhbCAkaSQgdGVtIHBhZHLDo28gZGUgZXNwZWNpYWxpemHDp8OjbyBjb21wbGV0YW1lbnRlIGRpZmVyZW50ZSBkYSBsb2NhbGlkYWRlIGRlIHJlZmVyw6puY2lhLg0KDQpFc3RhIHJvdGluYSBwb2RlIHNlciByZXN1bWlkYSBmYXplbmRvIG8gdXNvIGRvIHBhY290ZSBgRWNvbkdlb2AsIGUgYSBmdW7Dp8OjbyBgc3BlYy5jb2VmZmAuIEVsYSB1dGlsaXphIGEgbWVzbWEgbWF0cml6IGBtYXRgIHV0aWxpemFkYSBwYXJhIG8gUUwuDQoNCmBgYHtyfQ0KIyBDb2VmaWNpZW50ZSBkZSBlc3BlY2lhbGl6YcOnw6NvIGRlIEhvb3ZlciBwZWxvIEVjb25HZW8NCmxpYnJhcnkoRWNvbkdlbykNCmNlMjAxNjwtc3BlY19jb2VmZihtYXQpDQprbml0cjo6a2FibGUoY2UyMDE2KQ0KYGBgDQoNCiMgUmVmZXLDqm5jaWFzIHsjUmVmZXLDqm5jaWFzIC51bm51bWJlcmVkfQ0KDQpCQUxBU1NBLCBCLiBUcmFkZSBMaWJlcmFsaXphdGlvbiBhbmQgUmV2ZWFsZWQgQ29tcGFyYXRpdmUgQWR2YW50YWdlLCBUaGUgTWFuY2hlc3RlciBTY2hvb2wgMzM6IDk5LTEyMy4gMTk2NS4NCg0KQkFMTEFORCwgUC5BLiBFY29ub21pYyBHZW9ncmFwaHkgaW4gUjogSW50cm9kdWN0aW9uIHRvIHRoZSBFY29uR2VvIFBhY2thZ2UsIFBhcGVycyBpbiBFdm9sdXRpb25hcnkgRWNvbm9taWMgR2VvZ3JhcGh5LCAxNyAoMDkpOiAxLTc1LCAyMDE3Lg0KDQpDUlVaLCBCLk8uOyBRVUVJUk9aLCBJLlYuIEVmZWl0b3MgZW5jYWRlYWRvcyBkbyBwZXJmaWwgc2V0b3JpYWwgZG9zIGludmVzdGltZW50b3MgZSBhIGRpc3RyaWJ1acOnw6NvIGVzcGFjaWFsIGRhIGluZMO6c3RyaWE6IG9uZGUgc2UgbG9jYWxpemFtIGFzIGluZMO6c3RyaWFzIGRvcyBzZXRvcmVzIGNvbSBtYWlvcmVzIGltcGFjdG9zPyBUZXh0byBwYXJhIGRpc2N1c3PDo28gbi4gMjE3MiwgQnJhc8OtbGlhOiBJUEVBLCAyMDE2Lg0KDQpGTE9SRU5DRSwgUC4gU2FyZ2VudC4gSW52ZXN0bWVudCwgbG9jYXRpb24sIGFuZCBzaXplIG9mIHBsYW50LiBDYW1icmlkZ2U6IENhbWJyaWRnZSBVbml2ZXJzaXR5IFByZXNzLCAxOTQ4Lg0KDQpNT05BU1RFUklPLCBMZW9uYXJkby4gSW5kaWNhZG9yZXMgZGUgYW7DoWxpc2UgcmVnaW9uYWwgZSBlc3BhY2lhbC4gSW46IENSVVogZXQgYWwgKG9yZ3MpLiBFY29ub21pYSByZWdpb25hbCBlIHVyYmFuYSA6IHRlb3JpYXMgZSBtw6l0b2RvcyBjb20gw6puZmFzZSBubyBCcmFzaWwuIEJyYXPDrWxpYTogSXBlYSwgMjAxMS4gY2FwLiAxMC4gcHAuMzE1LTMzMS4NCg0KTk9SVEgsIERvdWdsYXMuIFRlb3JpYSBkYSBsb2NhbGl6YcOnw6NvIGUgY3Jlc2NpbWVudG8gZWNvbsO0bWljbyByZWdpb25hbC4gSW46IFNDV0FSVFpNQU5OLCBKLiAob3JnLikgRWNvbm9taWEgcmVnaW9uYWwgZSB1cmJhbmE6IHRldG9zIGVzY29saGlkb3MuIEJlbG8gSG9yaXpvbnRlOiBVRk1HLCBwLjMzMy0zNDMsIDE5NzcuDQoNClNPVVpBLCBGaWxpcGUgTGFnZSBkZS4gQSBsb2NhbGl6YcOnw6NvIGRhIGluZMO6c3RyaWEgZGUgdHJhbnNmb3JtYcOnw6NvIGJyYXNpbGVpcmEgbmFzIMO6bHRpbWFzIHRyw6pzIGTDqWNhZGFzLiBSaW8gZGUgSmFuZWlybzogRVBHRS1GR1YsIDIwMDIuIChEaXNzZXJ0YcOnw6NvLCBNZXN0cmFkbyBlbSBFY29ub21pYSkuIDEzMHAuDQoNCldJRUxBTkQsIFRob21hcy4gUkVBVDogUmVnaW9uYWwgRWNvbm9taWMgQW5hbHlzaXMgVG9vbGJveC4gMjAxOS4gUiBwYWNrYWdlIHZlcnNpb24gMy4wLjEuIDxodHRwczovL0NSQU4uUi1wcm9qZWN0Lm9yZy9wYWNrYWdlPVJFQVQ+Lg0K