Análise da Balança Comercial Brasileira e suas Principais Commodities - Influência da Soja, Minério de Ferro e Petróleo e seus preços nas exportações e no saldo da balança

O relatório abaixo apresenta o comportamento das exportações bem como seus preços das 3 principais commodities do Brasil, e como a força desses 3 produtos ditam o comportamento das exportações e do saldo comercial da balança, podendo explicar em ambos números totais e saldos maiores.

Balança Comercial Brasileira nos Últimos 20 anos

A balança comercial, segundo Krugman (1998), representa o saldo líquido das exportações menos as importações de bens e serviços de um país, constituindo-se como um dos principais componentes da balança de pagamentos. Trata-se da movimentação mercadológica, isto é, da troca de bens tangíveis entre o país e o restante do mundo, refletindo diretamente sua inserção no comércio internacional. Um saldo positivo indica superávit comercial, enquanto um saldo negativo indica déficit, revelando assim a capacidade de geração de divisas e a competitividade da economia nacional.

Ademais, conforme Carvalho (2018), a balança comercial integra as transações correntes do balanço de pagamentos, ao lado da balança de serviços e das transferências unilaterais, distinguindo-se dos movimentos de capitais. Compõe, portanto, o primeiro grupo desse registro contábil, que engloba todas as transações econômicas entre residentes e não residentes de uma nação. Desse modo, a balança comercial se apresenta como um indicador essencial para compreender a dinâmica das trocas internacionais, sendo utilizada tanto na formulação de políticas econômicas quanto na avaliação da posição externa de um país.

No contexto brasileiro, as exportações líquidas configuram-se como um elemento estratégico de relevância econômica, uma vez que exercem influência direta sobre o Produto Interno Bruto (PIB) e assumem, de forma crescente, papel essencial no processo de desenvolvimento financeiro do país. Nesse sentido, o Ministério do Desenvolvimento, Indústria, Comércio e Serviços (MDIC) corrobora tal perspectiva ao evidenciar que, em 2024, o Brasil alcançou um recorde histórico na balança comercial, com exportações de US$ 337 bilhões, superávit de US$ 74,6 bilhões e destaque para a indústria de transformação, consolidando sua posição entre as dez maiores economias do mundo em termos de comércio exterior.

Entretanto, logo após 2023, as 3 variáveis apresentaram uma queda significativa e a previsão é para que essa redução se mantenha onde até o momento as exportações apresentaram um valor US$ 227,6 bilhões e o saldo um superávit de US$ 42,8 bilhões. Tal comportamento será visível em inúmeros gráficos deste relatório deixando evidente uma desacelaração da economia global…

Portanto, em conformidade com Simonsen (1989), há uma razão específica para que os países se preocupem com não só com o saldo final da balança de pagamentos, como também das conta-correntes, pois se há decifit em ambos, eles terão de ser cobertos. E um país só poderá cobrí-los através de investimentos diretos, aumentando seus endividamentos externos, ou diminuindo reservas internacionais. Em especial no país cujo será analisado no presente relatório, Brasil, deve-se afligir especialmente mais com o tópico, pois, conforme Cavalcante e De-Losso (2025), a dependência estrutural da exportação de commodities como soja, minério de ferro e petróleo expõe vulnerabilidades diante de instabilidades, e, embora alguns avanços tenham ocorrido na diversificação da pauta exportadora, o país ainda enfrenta dificuldades em ampliar setores de maior valor agregado. Essa vulnerabilidade será melhor explorada ao longo deste relatório.

Diante os pontos apresentados, o presente relatório tem como objetivo analisar empiricamente como as principais commodities que o Brasil exporta influenciam na balança comercial, através não só do estudo de gráficos, como também através de embasamento acadêmico e no desenvolvimento do modelo econométrico elaborado por Nelson H. Barbosa-Filho(2004).

Funções de Demanda por Importações e Exportações A demanda por importações (Qm​) e exportações (Qx​) é representada por funções multiplicativas de renda e câmbio real:

\[ Q_m = A Z^{-α} Q_h^β \] \[ Q_x = B Z^{γ} Q_f^δ \] onde: Z = E Pf/Ph é a taxa de câmbio real;

Qh​ é a renda real doméstica;

Qf é a renda real do resto do mundo;

α e β são, respectivamente, as elasticidades-preço e elasticidade-renda das importações;

γ e δ são, respectivamente, as elasticidades-preço e elasticidade-renda das exportações;

A e B captam efeitos fixos. Razões Comércio e PIB As equações são normalizadas pelo PIB doméstico (Qh), obtendo-se:

\[ m = \frac{Z Q_m}{Q_h} \] \[ x = \frac{Q_x}{Q_h} \]

onde m é a razão importações/PIB e x a razão exportações/PIB. Dinâmica das razões comerciais Derivando as equações em relação ao tempo:

\[ \frac{dm}{dt} = m \left[ (1 - \alpha) z + (\beta - 1) q_h \right] \frac{dx}{dt} = x \left[ \gamma z + \delta q_f - q_h \right] \]

onde: z = taxa de crescimento da taxa de câmbio real (desvalorização positiva);

qh ​ = taxa de crescimento do PIB doméstico;

qf = taxa de crescimento do PIB mundial. Se α < 1, haverá uma desvalorização real, cujo aumenta a razão importações/PIB. Se β>1, o crescimento doméstico expande fortemente as importações. Ademais, as exportações aumentam com desvalorização (γ>0) e com crescimento externo (δ>0), mas são reduzidas pelo crescimento doméstico (qh​). Trade-Off Crescimento-Desvalorização O saldo comercial em relação ao PIB evolui segundo:

\[ \frac{dx}{dt} - \frac{dm}{dt} = x(\gamma z + \delta q_f - q_h) - m[(1 - \alpha)z + (\beta - 1)q_h] \]

Se o objetivo é manter o saldo comercial constante (dx/dt -dm/dt = 0), obtêm-se a equação de Trade-off:

\[ q_h = \frac{x\delta q_f}{x - m(1 - \beta)} + \frac{x\gamma - m(1 - \alpha)}{x - m(1 - \beta)} z \]

A inclinação da curva é:

\[ \varphi = \frac{x\gamma - m(1 - \alpha)}{x - m(1 - \beta)} \]

φ mede o quanto de desvalorização cambial é necessário (z) para sustentar 1% adicional de crescimento (qh​) mantendo o saldo comercial estável.

Aplicação empírica no Brasil: Com base em Cavalcanti e Frischtak (2002), os parâmetros estimados para 1980–2000 foram:

\[ \alpha = 0.74, \quad \beta = 3.39, \quad \gamma = 0.61, \quad \delta = 1.01 \]

Em 2002, observavam-se aproximadamente:

\[ x = 0.13, \quad m = 0.10, \quad q_f = 0.04 \]

Substituindo-se na equação (6), Barbosa-Filho obtém:

\[ q_h = 0.356q_f + 0.144z \] Logo:

\[ z \approx \frac{q_h - 0.0142}{0.144} \]

Através deste modelo, é possível concluir que dadas as elasticidades para o Brasil em 2002, a cada 1% adicional de crescimento no PIB, exige-se uma desvalorização cambial real de aproximadamente 6,9%. Em termos práticos, isso significa que o país se encontrava preso a uma dinâmica em que o crescimento econômico só poderia ser sustentado ao custo de fortes desvalorizações cambiais, com todos os efeitos colaterais que estas implicam, notadamente pressões inflacionárias e impactos redistributivos regressivos.

Ademais, a estrutura comercial brasileira revela-se desfavorável ao crescimento sustentado. As importações são pouco sensíveis a variações de preços (α<1) e, ao mesmo tempo, apresentam elevada elasticidade em relação à renda (β>1), o que implica que qualquer aceleração do crescimento interno se traduz rapidamente em aumentos expressivos da demanda por bens importados, configurando assim um trade-off extremamente custoso. E, ao longo-prazo, a estabilidade simultânea das razões exportações/PIB e importações/PIB exigiria combinações de crescimento muito baixo com apreciação cambial contínua. Tal cenário é evidentemente insustentável, pois nenhuma economia consegue sustentar uma trajetória de apreciação cambial sem perda de competitividade. Esse resultado indica que a própria estrutura do comércio externo brasileiro contém um viés estrutural contra o crescimento robusto.

Portanto, o modelo de Barbosa-Filho (2004) conclui que as problemáticas brasileiras vão além de choques conjunturais, sendo causados por restrições estruturais do comércio. A alta elasticidade-renda das importações é o principal entrave, enquanto a baixa elasticidade-preço das exportações e importações limitam a eficácia da desvalorização cambial. Ou seja, mesmo que tal teoria esteja aplicada em um contexto de 20 anos anteriores, ainda pode ser aplicada à contemporaneidade, visto que constata-se que a trajetória de baixo crescimento e crises cambiais do Brasil estão enraizadas na estrutura comercial, cujo não só é dependente, como sobrevaloriza a exportação de insumos, como a soja e minérios.

PIB Brasileiro x (%) das Exportações no PIB

O gráfico acima mostra a evolução do PIB em dólares e da participação das exportações no PIB entre 2005 e 2024. O comportamento entre os dois se torna bem imprevisível, uma vez que não necessariamente um aumento do PIB significa também um aumento da porcentagem de exportações dentro dele. Prova disso é o comportamento da porcentagem que apresentou uma crescente a partir de 2016 variado entre 11% e 18,7% até 2023, enquanto o PIB sofreu com aumentos e quedas no mesmo período, com destaque para 2021 com uma redução do PIB de 1,6 trilhão US$ para 1,5 trilhão US$, porém a porcentagem de exportaççao saltou 12,6% para 18.3%.

O PIB retomou o crescimento em 2022, ultrapassando US$ 2,2 trilhões em 2024, mas a participação das exportações no PIB manteve-se estável, em torno de 16% a 17%. Isso indica que, embora o Brasil tenha se recuperado em termos de produto agregado, o aumento das exportações não acompanhou proporcionalmente o crescimento do PIB. Em síntese, o gráfico evidencia a natureza estrutural da economia brasileira destacada por Barbosa-Filho (2004), visto que o crescimento interno eleva as importações e reduz a relevância das exportações no PIB, enquanto choques externos e desvalorizações cambiais ampliam temporariamente sua participação.

No geral, apesar de algumas quedas no PIB em alguns anos específicos a porcentagem das exportações dentro do PIB apresentou grande crescimento apesar da queda no último ano, o que mostra a força da parcela que as exportações detém no PIB da economia brasileira.

Evolução do Valor Total Exportado por Produto ao Ano

Observa-se que as três commodities apresentam trajetórias semelhantes tanto de aumento quanto de queda na grande maioria do anos independentemente do valor do produto, com forte expansão das exportações a partir de 2016, impulsionadas pelo aumento da demanda internacional e pela desvalorização cambial do período. A soja se destaca como principal produto exportado, atingindo o pico em 2023 com cerca de US$ 53,2 bilhões, seguida por petróleo e derivados (US$ 42,5 bilhões) e minério de ferro (US$ 30,5 bilhões). O crescimento até 2021 reflete o boom das commodities, especialmente pela alta dos preços internacionais e o fortalecimento da pauta agroexportadora brasileira.

A partir de 2024 nota-se uma queda generalizada no valor exportado das três categorias, sugerindo a combinação de retração de preços internacionais, redução da demanda chinesa e valorização cambial, o que diminui a competitividade externa. Assim, os dados confirmam novamente a dependência brasileira de produtos primários, destacando a vulnerabilidade do país a choques externos de preços e à oscilação do câmbio.

Evolução dos Preços das Commodities por Ano

O gráfico apresentado evidencia como as flutuações dos preços internacionais impactam diretamente a pauta exportadora brasileira, dada sua alta concentração nesses produtos. Entre 2015 e 2020, observa-se relativa estabilidade nos preços, com variações moderadas e um leve crescimento a partir de 2018, refletindo a recuperação do comércio global após a recessão brasileira e a crise das commodities de 2014 à 2015. Contudo, entre 2021 e 2022, ocorreu um forte aumento generalizado dos preços impulsionados pela retomada pós-pandemia, gargalos logísticos e tensões geopolíticas, que pressionaram os preços de energia e alimentos.

A partir de 2023, houve uma tendência de queda nos preços das três commodities, onde a soja e o petróleo convergiram para US$ 523/t e o minério de ferro caiu para US$ 81/t. Essa retração reflete a desaceleração da economia chinesa, principal destino das exportações brasileiras, e o refluxo dos preços internacionais após o pico de 2022. Em termos estruturais, o gráfico reforça o argumento apresentado através do modelo econométrico discorrido, onde a dependência de produtos primários torna o desempenho externo nacional fortemente condicionado às flutuações de preços internacionais.

Variação Percentual Anual dos Preços

O gráfico apresentado evidencia a forte volatilidade que caracteriza o comportamento da soja, do minério de ferro e do petróleo. Esses bens, centrais na pauta exportadora brasileira, apresentam oscilações acentuadas em função de choques externos e ciclos globais de demanda. Observa-se, por exemplo, um ciclo de expansão expressiva entre 2007 e 2011, impulsionado pelo aquecimento da economia mundial, seguido por retrações bruscas durante crises, como a financeira de 2008–2009.

Entre 2014 e 2016, nota-se um movimento de queda generalizada, principalmente no preço do petróleo, que chegou a cair quase 50% em um único ano, refletindo o excesso de oferta global, mas, a partir de 2017, os preços se recuperam gradualmente, atingindo novo auge em 2021–2022, impulsionados pela retomada econômica pós-pandemia e pelas tensões geopolíticas decorrentes da guerra na Ucrânia, que elevaram significativamente os preços de energia e alimentos. Contudo, a partir de 2023, há uma tendência de estabilização e queda nos preços, indicando o arrefecimento da demanda global e a recomposição da oferta internacional.

Correlação entre as Commodities

O gráfico apresenta os coeficientes de correlação entre os preços da soja, do minério de ferro e do petróleo e derivados, revelando o grau de associação entre suas variações ao longo do tempo. Os resultados mostram relações positivas e relativamente fortes: soja e petróleo (0,78), minério de ferro e petróleo (0,70), e soja e minério de ferro (0,67). Esses valores indicam que os preços das principais commodities exportadas pelo Brasil tendem a se mover na mesma direção, refletindo a influência de fatores macroeconômicos globais comuns. Ou seja, quando há valorização em um desses mercados, é provável que as demais commodities também se apreciem.

Essa forte interdependência reforça a vulnerabilidade da pauta exportadora brasileira, uma vez que choques negativos nos preços internacionais afetam simultaneamente diversos setores estratégicos

Apesar de existirem situações fora da curva como já abordadas na análise do gráfico de Variação Percentual Anual dos Preços, tal correlação favorável entre todos os produtos possibilitou realizar uma análise conjunta usando o preço das 3 commodities em um preço ponderado, sendo calculado a partir da participação de cada produto nas exportações totais da balança ao longo dos anos, dados esses presentes no primeiro gráfico apresentado.

ESCALA DE CORRELAÇÃO DE PEARSON:

PERFEITA      ██████████ 0.90 - 1.00  → Movem-se juntas

MUITO FORTE   ████████░░ 0.70 - 0.89  → Alta sincronização 

FORTE         ██████░░░░ 0.50 - 0.69  → Sincronização significativa

MODERADA      ████░░░░░░ 0.30 - 0.49  → Relação perceptível

FRACA         ██░░░░░░░░ 0.10 - 0.29  → Pouca relação

NULA          ░░░░░░░░░░ 0.00 - 0.09  → Independentes

Código da Correlação

dados_correlacao <- dados_preco %>%
  select(Ano, Commodity, Preço) %>%
  pivot_wider(names_from = Commodity, values_from = Preço) %>%
  select(-Ano)
matriz_cor <- cor(dados_correlacao, use = "complete.obs")
analise_correlacao <- as.data.frame(as.table(matriz_cor)) %>%
  rename(Commodity1 = Var1, Commodity2 = Var2, Correlacao = Freq) %>%
  filter(Commodity1 != Commodity2) %>%
  rowwise() %>%
  mutate(Par = paste(sort(c(Commodity1, Commodity2)), collapse = " vs ")) %>%
  distinct(Par, .keep_all = TRUE) %>%
  ungroup() %>%
  arrange(desc(Correlacao))
highchart() %>%
  hc_chart(type = "column") %>%
  hc_title(text = "Correlação entre as Commodities") %>%
  hc_xAxis(categories = analise_correlacao$Par) %>%
  hc_yAxis(
    title = list(text = "Coeficiente de Correlação"),
    min = -1,
    max = 1
  ) %>%
  hc_add_series(
    data = analise_correlacao$Correlacao,
    name = "Correlação",
    colorByPoint = TRUE,
    colors = c("#02023c", "#02023c", "#feb712")
  ) %>%
  hc_tooltip(
    pointFormat = "<b>{point.category}</b><br>Correlação: <b>{point.y:.3f}</b>"
  ) %>%
  hc_plotOptions(
    column = list(
      dataLabels = list(
        enabled = TRUE,
        format = "{point.y:.2f}",
        style = list(fontSize = "12px", fontWeight = "bold")
      )
    )
  )

Explicação e Cálculo do Preço Ponderado

Nos últimos 2 gráficos será utilizado um preço ponderado das 3 commodities juntas ao longo dos anos, sendo basicamente uma média de preço que considera o peso real de cada commodity nas exportações totais em cada ano, através disso será possível realizar uma análise mais detalhada e fiel do real impacto desses 3 produtos nas exportações e no saldo comercial.

Participação na exportação total = Exportações da commodity / Exportações totais

Preço Ponderado Anual = Σ Preço da commodity (US$/t) × Participação na exportação total (Peso/Ponderação)

Comparativo entre Exportações e Preço Ponderado Real

O gráfico evidencia a relação direta entre os preços internacionais das 3 commodities (agora ponderados em um só), a quantidades totais exportadas em milhões de toneladas e o desempenho exportador brasileiro, onde o preço ponderado e as exportações totais apresentam comportamento semelhante mostrando a força e a influência desses 3 produtos nas exportações brasileiras analisando somente pela ótica do preço.A quantidade também evidencia a importância desses 3 produtos nos totais exportados do país, uma vez que em alguns ano de baixa dos preços as exportações se manteram graças ao aumento das quantidades exportadas como em 2023 e 2024 por exemplo.

Em períodos de valorização das commodities, como entre 2005–2008 e 2021–2022, coincidem com aumentos expressivos nas exportações, enquanto fases de queda dos preços, como 2014–2016, resultam em retração do valor exportado apesar do aumento da quantidade exportada. Isso demonstra que as receitas externas do país são fortemente influenciadas pelas variações de preços globais em praticamente todos os anos da análise apenas nos últimos 2 anos que pode-se observar uma constância no valor total exportado graças ao aumento das quantidades.

Nos anos recentes, após o pico de 2022, há uma estabilização dos preços e manutenção das exportações em patamar elevado, indicando relativa resiliência. No entanto, o gráfico reforça a dependência estrutural brasileira de commodities, o que torna o crescimento econômico vulnerável a choques externos. Tal dinâmica reflete a restrição externa ao crescimento, limitando o potencial de expansão sustentável da economia.

Apesar de ainda não ter terminado a tendência para 2025 é continuar a redução tanto do preço, quantidade e exportações, indicando mais uma vez aquele cenário de desacelaração econômica global

Impacto dos Preços das Commodities no Saldo Comercial

O gráfico acima mostra a relação entre os preços das commodities e o desempenho do saldo comercial do Brasil entre 2005 e 2025.

Vale ressaltar que diferentemente do último gráfico, para se analisar o saldo é necessário adicionar não somente as exportações já analisadas mas as importações também. De forma contrária as exportações totais ao se analisar somente o saldo com o preço ponderado, não se observa uma relação parecida entre exportações e o preço, justamente pelas importações e outros fatores externos monetários e cambiais além de barreiras comerciais impactarem o valor do saldo final, mostrando uma grande variação mostrando que se caso o preço aumente ou diminua, não necessariamente o saldo irá seguir esse padrão. Isso é evidente em 2023 por exemplo onde houve uma redução considerável no preço, e o saldo saiu de 61 bilhões US$ para quase 99 bilhões US$, muito por conta das importações que também caíram junto com o preço.

Nos períodos de valorização das commodities, especialmente entre 2007 e 2011 e novamente em 2021 e 2022, observa-se um crescimento expressivo das exportações, acompanhado pela expansão do saldo comercial positivo. Em contrapartida, nas fases de queda de preços, como em 2014 e 2016, o saldo comercial se reduz significativamente, ainda que as importações também desaceleram. Isso indica que a deterioração dos termos de troca afeta diretamente a capacidade de geração de divisas do país.

Conclusão

Os resultados obtidos neste relatório indicam que a estrutura exportadora brasileira permanece fortemente dependente de produtos primários, o que evidencia a persistência de um padrão de especialização produtiva baseado em bens de baixo valor agregado. Essa configuração acentua a vulnerabilidade externa da economia nacional, tornando o desempenho comercial e o crescimento econômico condicionados a fatores exógenos, como a variação dos preços internacionais e a dinâmica da demanda global. Além disso, a aplicação do modelo de restrição externa ao crescimento revelou que o Brasil enfrenta um trade-off estrutural entre expansão do produto interno e equilíbrio do setor externo. O aumento do PIB, ao elevar a demanda por importações, onde a elasticidade-renda é superior a um, impõe a necessidade de desvalorizações cambiais para manutenção do saldo comercial, implicando custos inflacionários e redistributivos. Tal resultado reforça a tese de que o crescimento brasileiro encontra-se limitado não apenas por choques conjunturais, mas por condicionantes estruturais de sua inserção internacional.

As análises empíricas e gráficas corroboraram esse diagnóstico, ao evidenciar as correlações positivas entre os preços das commodities e o desempenho da balança comercial, bem como a natureza intermitente da relação entre câmbio, exportações e crescimento. Dessa forma, o desempenho externo do país tem se mostrado mais sensível à precificação internacional do que a ganhos de produtividade, o que explica a volatilidade da balança e a recorrência de episódios de restrição externa.

Referências

LS0tDQp0aXRsZTogIlJlbGF0w7NyaW8gSW1wYWN0byBkYSBTb2phLCBGZXJybyBlIFBldHLDs2xlbyBuYSBCYWxhbsOnYSBDb21lcmNpYWwiDQphdXRob3I6ICJKb8OjbyBQZWRybyBHb2RpbmhvIFF1ZXJpZG8gZSBKYWRlIFNpbcOjbyBGcmFuY28gQmljYWxobyINCmRhdGU6ICIyMDI1LTA5LTE2Ig0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19mbG9hdDogdHJ1ZQ0KICAgIHRoZW1lOiBsdW1lbg0KICAgIGhpZ2hsaWdodDogdGFuZ28NCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSkNCg0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoc2lkcmFyKQ0KbGlicmFyeShpcGVhZGF0YXIpDQpsaWJyYXJ5KHF1YW50bW9kKQ0KbGlicmFyeShzY2FsZXMpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkocmJjYikNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeSh3cml0ZXhsKQ0KbGlicmFyeShodHRyKQ0KbGlicmFyeSh0aWR5cikNCmBgYA0KDQojIyAqKkFuw6FsaXNlIGRhIEJhbGFuw6dhIENvbWVyY2lhbCBCcmFzaWxlaXJhIGUgc3VhcyBQcmluY2lwYWlzIENvbW1vZGl0aWVzIC0gSW5mbHXDqm5jaWEgZGEgU29qYSwgTWluw6lyaW8gZGUgRmVycm8gZSBQZXRyw7NsZW8gZSBzZXVzIHByZcOnb3MgbmFzIGV4cG9ydGHDp8O1ZXMgZSBubyBzYWxkbyBkYSBiYWxhbsOnYSoqDQoNCk8gcmVsYXTDs3JpbyBhYmFpeG8gYXByZXNlbnRhIG8gY29tcG9ydGFtZW50byBkYXMgZXhwb3J0YcOnw7VlcyBiZW0gY29tbyBzZXVzIHByZcOnb3MgZGFzIDMgcHJpbmNpcGFpcyBjb21tb2RpdGllcyBkbyBCcmFzaWwsIGUgY29tbyBhIGZvcsOnYSBkZXNzZXMgMyBwcm9kdXRvcyBkaXRhbSBvIGNvbXBvcnRhbWVudG8gZGFzIGV4cG9ydGHDp8O1ZXMgZSBkbyBzYWxkbyBjb21lcmNpYWwgZGEgYmFsYW7Dp2EsIHBvZGVuZG8gZXhwbGljYXIgZW0gYW1ib3MgbsO6bWVyb3MgdG90YWlzIGUgc2FsZG9zIG1haW9yZXMuIA0KDQojIyAqQmFsYW7Dp2EgQ29tZXJjaWFsIEJyYXNpbGVpcmEgbm9zIMOabHRpbW9zIDIwIGFub3MqDQoNCmBgYHtyfQ0KdG90YWlzX2FudWFpcyA8LSByZWFkX2V4Y2VsKCJUb3RhbEFudWFsRXhwLnhsc3giLCByYW5nZSA9ICJBNjpFMjciKSAlPiUNCiAgbXV0YXRlKA0KICAgIEV4cG9ydGHDp8O1ZXMgPSByb3VuZChFeHBvcnRhw6fDtWVzLCBkaWdpdHMgPSAyKSwNCiAgICBJbXBvcnRhw6fDtWVzID0gcm91bmQoSW1wb3J0YcOnw7VlcywgZGlnaXRzID0gMiksDQogICAgU2FsZG8gPSByb3VuZChTYWxkbywgZGlnaXRzID0gMiksDQogICAgQ29ycmVudGUgPSByb3VuZChDb3JyZW50ZSwgZGlnaXRzID0gMiksDQogICAgRGF0YSA9IGFzLmNoYXJhY3RlcihEYXRhKSwgIA0KICAgIERhdGFfU3RvY2sgPSBhcy5EYXRlKHBhc3RlMChhcy5jaGFyYWN0ZXIoRGF0YSksICItMDEtMDEiKSkNCiAgKQ0KZGFkb3NfYmFsYW5jYV9zdG9jayA8LSB0b3RhaXNfYW51YWlzICU+JQ0KICBhcnJhbmdlKERhdGFfU3RvY2spICU+JQ0KICBtdXRhdGUoDQogICAgdGltZXN0YW1wID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKERhdGFfU3RvY2spDQogICkNCmhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX2JhbGFuY2Ffc3RvY2sgJT4lIHNlbGVjdCh0aW1lc3RhbXAsIEV4cG9ydGHDp8O1ZXMpKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiRXhwb3J0YcOnw7VlcyAoVVMkIGJpKSIsDQogICAgY29sb3IgPSAiIzAyMDIzYyIsDQogICAgeUF4aXMgPSAwLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAwLCB2YWx1ZVByZWZpeCA9ICJVUyQgIiwgdmFsdWVTdWZmaXggPSAiIGJpIikNCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3NfYmFsYW5jYV9zdG9jayAlPiUgc2VsZWN0KHRpbWVzdGFtcCwgSW1wb3J0YcOnw7VlcykpLA0KICAgIHR5cGUgPSAibGluZSIsIA0KICAgIG5hbWUgPSAiSW1wb3J0YcOnw7VlcyAoVVMkIGJpKSIsDQogICAgY29sb3IgPSAiI0ZFQjcxMiIsDQogICAgeUF4aXMgPSAwLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAwLCB2YWx1ZVByZWZpeCA9ICJVUyQgIiwgdmFsdWVTdWZmaXggPSAiIGJpIikNCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3NfYmFsYW5jYV9zdG9jayAlPiUgc2VsZWN0KHRpbWVzdGFtcCwgU2FsZG8pKSwNCiAgICB0eXBlID0gImxpbmUiLCANCiAgICBuYW1lID0gIlNhbGRvIENvbWVyY2lhbCAoVVMkIGJpKSIsDQogICAgY29sb3IgPSAiIzQ2YjFlMSIsDQogICAgeUF4aXMgPSAxLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAwLCB2YWx1ZVByZWZpeCA9ICJVUyQgIiwgdmFsdWVTdWZmaXggPSAiIGJpIikNCiAgKSAlPiUNCiAgaGNfeUF4aXNfbXVsdGlwbGVzKA0KICAgIGxpc3QoDQogICAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICJFeHBvcnRhw6fDtWVzIGUgSW1wb3J0YcOnw7VlcyAoVVMkIGJpKSIpLA0KICAgICAgb3Bwb3NpdGUgPSBGQUxTRQ0KICAgICksDQogICAgbGlzdCgNCiAgICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIlNhbGRvIENvbWVyY2lhbCAoVVMkIGJpKSIpLA0KICAgICAgb3Bwb3NpdGUgPSBUUlVFDQogICAgKQ0KICApICU+JQ0KICBoY190aXRsZSh0ZXh0ID0gIkJhbGFuw6dhIENvbWVyY2lhbCBCcmFzaWxlaXJhIC0gw5psdGltYXMgMiBEw6ljYWRhcyIpICU+JQ0KICBoY19zdWJ0aXRsZSh0ZXh0ID0gIkV2b2x1w6fDo28gZGFzIGV4cG9ydGHDp8O1ZXMsIGltcG9ydGHDp8O1ZXMgZSBzYWxkbyBjb21lcmNpYWwiKSAlPiUNCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwgDQogICAgdGV4dCA9ICJGb250ZTogTURJQyAtIE1pbmlzdMOpcmlvIGRvIERlc2Vudm9sdmltZW50bywgSW5kw7pzdHJpYSwgQ29tw6lyY2lvIGUgU2VydmnDp29zIg0KICApICU+JQ0KICBoY19yYW5nZVNlbGVjdG9yKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIGJ1dHRvbnMgPSBsaXN0KA0KICAgICAgbGlzdCh0eXBlID0gJ3llYXInLCBjb3VudCA9IDUsIHRleHQgPSAnNVknKSwNCiAgICAgIGxpc3QodHlwZSA9ICd5ZWFyJywgY291bnQgPSAxMCwgdGV4dCA9ICcxMFknKSwNCiAgICAgIGxpc3QodHlwZSA9ICdhbGwnLCB0ZXh0ID0gJ0FsbCcpDQogICAgKQ0KICApICU+JQ0KICBoY190b29sdGlwKA0KICAgIHNoYXJlZCA9IFRSVUUsDQogICAgaGVhZGVyRm9ybWF0ID0gJzxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHgiPjxiPntwb2ludC5rZXk6JVl9PC9iPjwvc3Bhbj48YnIvPicNCiAgKSAlPiUNCiAgaGNfbGVnZW5kKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgdmVydGljYWxBbGlnbiA9ICJib3R0b20iDQogICkNCmBgYA0KQSBiYWxhbsOnYSBjb21lcmNpYWwsIHNlZ3VuZG8gS3J1Z21hbiAoMTk5OCksIHJlcHJlc2VudGEgbyBzYWxkbyBsw61xdWlkbyBkYXMgZXhwb3J0YcOnw7VlcyBtZW5vcyBhcyBpbXBvcnRhw6fDtWVzIGRlIGJlbnMgZSBzZXJ2acOnb3MgZGUgdW0gcGHDrXMsIGNvbnN0aXR1aW5kby1zZSBjb21vIHVtIGRvcyBwcmluY2lwYWlzIGNvbXBvbmVudGVzIGRhIGJhbGFuw6dhIGRlIHBhZ2FtZW50b3MuIFRyYXRhLXNlIGRhIG1vdmltZW50YcOnw6NvIG1lcmNhZG9sw7NnaWNhLCBpc3RvIMOpLCBkYSB0cm9jYSBkZSBiZW5zIHRhbmfDrXZlaXMgZW50cmUgbyBwYcOtcyBlIG8gcmVzdGFudGUgZG8gbXVuZG8sIHJlZmxldGluZG8gZGlyZXRhbWVudGUgc3VhIGluc2Vyw6fDo28gbm8gY29tw6lyY2lvIGludGVybmFjaW9uYWwuIFVtIHNhbGRvIHBvc2l0aXZvIGluZGljYSBzdXBlcsOhdml0IGNvbWVyY2lhbCwgZW5xdWFudG8gdW0gc2FsZG8gbmVnYXRpdm8gaW5kaWNhIGTDqWZpY2l0LCByZXZlbGFuZG8gYXNzaW0gYSBjYXBhY2lkYWRlIGRlIGdlcmHDp8OjbyBkZSBkaXZpc2FzIGUgYSBjb21wZXRpdGl2aWRhZGUgZGEgZWNvbm9taWEgbmFjaW9uYWwuIA0KDQpBZGVtYWlzLCBjb25mb3JtZSBDYXJ2YWxobyAoMjAxOCksIGEgYmFsYW7Dp2EgY29tZXJjaWFsIGludGVncmEgYXMgdHJhbnNhw6fDtWVzIGNvcnJlbnRlcyBkbyBiYWxhbsOnbyBkZSBwYWdhbWVudG9zLCBhbyBsYWRvIGRhIGJhbGFuw6dhIGRlIHNlcnZpw6dvcyBlIGRhcyB0cmFuc2ZlcsOqbmNpYXMgdW5pbGF0ZXJhaXMsIGRpc3Rpbmd1aW5kby1zZSBkb3MgbW92aW1lbnRvcyBkZSBjYXBpdGFpcy4gQ29tcMO1ZSwgcG9ydGFudG8sIG8gcHJpbWVpcm8gZ3J1cG8gZGVzc2UgcmVnaXN0cm8gY29udMOhYmlsLCBxdWUgZW5nbG9iYSB0b2RhcyBhcyB0cmFuc2HDp8O1ZXMgZWNvbsO0bWljYXMgZW50cmUgcmVzaWRlbnRlcyBlIG7Do28gcmVzaWRlbnRlcyBkZSB1bWEgbmHDp8Ojby4gRGVzc2UgbW9kbywgYSBiYWxhbsOnYSBjb21lcmNpYWwgc2UgYXByZXNlbnRhIGNvbW8gdW0gaW5kaWNhZG9yIGVzc2VuY2lhbCBwYXJhIGNvbXByZWVuZGVyIGEgZGluw6JtaWNhIGRhcyB0cm9jYXMgaW50ZXJuYWNpb25haXMsIHNlbmRvIHV0aWxpemFkYSB0YW50byBuYSBmb3JtdWxhw6fDo28gZGUgcG9sw610aWNhcyBlY29uw7RtaWNhcyBxdWFudG8gbmEgYXZhbGlhw6fDo28gZGEgcG9zacOnw6NvIGV4dGVybmEgZGUgdW0gcGHDrXMuDQoNCk5vIGNvbnRleHRvIGJyYXNpbGVpcm8sIGFzIGV4cG9ydGHDp8O1ZXMgbMOtcXVpZGFzIGNvbmZpZ3VyYW0tc2UgY29tbyB1bSBlbGVtZW50byBlc3RyYXTDqWdpY28gZGUgcmVsZXbDom5jaWEgZWNvbsO0bWljYSwgdW1hIHZleiBxdWUgZXhlcmNlbSBpbmZsdcOqbmNpYSBkaXJldGEgc29icmUgbyBQcm9kdXRvIEludGVybm8gQnJ1dG8gKFBJQikgZSBhc3N1bWVtLCBkZSBmb3JtYSBjcmVzY2VudGUsIHBhcGVsIGVzc2VuY2lhbCBubyBwcm9jZXNzbyBkZSBkZXNlbnZvbHZpbWVudG8gZmluYW5jZWlybyBkbyBwYcOtcy4gTmVzc2Ugc2VudGlkbywgbyBNaW5pc3TDqXJpbyBkbyBEZXNlbnZvbHZpbWVudG8sIEluZMO6c3RyaWEsIENvbcOpcmNpbyBlIFNlcnZpw6dvcyAoTURJQykgY29ycm9ib3JhIHRhbCBwZXJzcGVjdGl2YSBhbyBldmlkZW5jaWFyIHF1ZSwgZW0gMjAyNCwgbyBCcmFzaWwgYWxjYW7Dp291IHVtIHJlY29yZGUgaGlzdMOzcmljbyBuYSBiYWxhbsOnYSBjb21lcmNpYWwsIGNvbSBleHBvcnRhw6fDtWVzIGRlIFVTXCQgMzM3IGJpbGjDtWVzLCBzdXBlcsOhdml0IGRlIFVTXCQgNzQsNiBiaWxow7VlcyBlIGRlc3RhcXVlIHBhcmEgYSBpbmTDunN0cmlhIGRlIHRyYW5zZm9ybWHDp8OjbywgY29uc29saWRhbmRvIHN1YSBwb3Npw6fDo28gZW50cmUgYXMgZGV6IG1haW9yZXMgZWNvbm9taWFzIGRvIG11bmRvIGVtIHRlcm1vcyBkZSBjb23DqXJjaW8gZXh0ZXJpb3IuDQoNCkVudHJldGFudG8sIGxvZ28gYXDDs3MgMjAyMywgYXMgMyB2YXJpw6F2ZWlzIGFwcmVzZW50YXJhbSB1bWEgcXVlZGEgc2lnbmlmaWNhdGl2YSBlIGEgcHJldmlzw6NvIMOpIHBhcmEgcXVlIGVzc2EgcmVkdcOnw6NvIHNlIG1hbnRlbmhhIG9uZGUgYXTDqSBvIG1vbWVudG8gYXMgZXhwb3J0YcOnw7VlcyBhcHJlc2VudGFyYW0gdW0gdmFsb3IgVVNcJCAyMjcsNiBiaWxow7VlcyBlIG8gc2FsZG8gdW0gc3VwZXLDoXZpdCBkZSBVU1wkIDQyLDggYmlsaMO1ZXMuIFRhbCBjb21wb3J0YW1lbnRvIHNlcsOhIHZpc8OtdmVsIGVtIGluw7ptZXJvcyBncsOhZmljb3MgZGVzdGUgcmVsYXTDs3JpbyBkZWl4YW5kbyBldmlkZW50ZSB1bWEgZGVzYWNlbGFyYcOnw6NvIGRhIGVjb25vbWlhIGdsb2JhbC4uLg0KDQpQb3J0YW50bywgZW0gY29uZm9ybWlkYWRlIGNvbSBTaW1vbnNlbiAoMTk4OSksIGjDoSB1bWEgcmF6w6NvIGVzcGVjw61maWNhIHBhcmEgcXVlIG9zIHBhw61zZXMgc2UgcHJlb2N1cGVtIGNvbSBuw6NvIHPDsyBjb20gbyBzYWxkbyBmaW5hbCBkYSBiYWxhbsOnYSBkZSBwYWdhbWVudG9zLCBjb21vIHRhbWLDqW0gZGFzIGNvbnRhLWNvcnJlbnRlcywgcG9pcyBzZSBow6EgZGVjaWZpdCBlbSBhbWJvcywgZWxlcyB0ZXLDo28gZGUgc2VyIGNvYmVydG9zLiBFIHVtIHBhw61zIHPDsyBwb2RlcsOhIGNvYnLDrS1sb3MgYXRyYXbDqXMgZGUgaW52ZXN0aW1lbnRvcyBkaXJldG9zLCBhdW1lbnRhbmRvIHNldXMgZW5kaXZpZGFtZW50b3MgZXh0ZXJub3MsIG91IGRpbWludWluZG8gcmVzZXJ2YXMgaW50ZXJuYWNpb25haXMuIEVtIGVzcGVjaWFsIG5vIHBhw61zIGN1am8gc2Vyw6EgYW5hbGlzYWRvIG5vIHByZXNlbnRlIHJlbGF0w7NyaW8sIEJyYXNpbCwgZGV2ZS1zZSBhZmxpZ2lyIGVzcGVjaWFsbWVudGUgbWFpcyBjb20gbyB0w7NwaWNvLCBwb2lzLCBjb25mb3JtZSBDYXZhbGNhbnRlIGUgRGUtTG9zc28gKDIwMjUpLCBhIGRlcGVuZMOqbmNpYSBlc3RydXR1cmFsIGRhIGV4cG9ydGHDp8OjbyBkZSBjb21tb2RpdGllcyBjb21vIHNvamEsIG1pbsOpcmlvIGRlIGZlcnJvIGUgcGV0csOzbGVvIGV4cMO1ZSB2dWxuZXJhYmlsaWRhZGVzIGRpYW50ZSBkZSBpbnN0YWJpbGlkYWRlcywgZSwgZW1ib3JhIGFsZ3VucyBhdmFuw6dvcyB0ZW5oYW0gb2NvcnJpZG8gbmEgZGl2ZXJzaWZpY2HDp8OjbyBkYSBwYXV0YSBleHBvcnRhZG9yYSwgbyBwYcOtcyBhaW5kYSBlbmZyZW50YSBkaWZpY3VsZGFkZXMgZW0gYW1wbGlhciBzZXRvcmVzIGRlIG1haW9yIHZhbG9yIGFncmVnYWRvLiBFc3NhIHZ1bG5lcmFiaWxpZGFkZSBzZXLDoSBtZWxob3IgZXhwbG9yYWRhIGFvIGxvbmdvIGRlc3RlIHJlbGF0w7NyaW8uDQoNCkRpYW50ZSBvcyBwb250b3MgYXByZXNlbnRhZG9zLCBvIHByZXNlbnRlIHJlbGF0w7NyaW8gdGVtIGNvbW8gb2JqZXRpdm8gYW5hbGlzYXIgZW1waXJpY2FtZW50ZSBjb21vIGFzIHByaW5jaXBhaXMgY29tbW9kaXRpZXMgcXVlIG8gQnJhc2lsIGV4cG9ydGEgaW5mbHVlbmNpYW0gbmEgYmFsYW7Dp2EgY29tZXJjaWFsLCBhdHJhdsOpcyBuw6NvIHPDsyBkbyBlc3R1ZG8gZGUgZ3LDoWZpY29zLCBjb21vIHRhbWLDqW0gYXRyYXbDqXMgZGUgZW1iYXNhbWVudG8gYWNhZMOqbWljbyBlIG5vIGRlc2Vudm9sdmltZW50byBkbyBtb2RlbG8gZWNvbm9tw6l0cmljbyBlbGFib3JhZG8gcG9yIE5lbHNvbiBILiBCYXJib3NhLUZpbGhvKDIwMDQpLg0KDQpGdW7Dp8O1ZXMgZGUgRGVtYW5kYSBwb3IgSW1wb3J0YcOnw7VlcyBlIEV4cG9ydGHDp8O1ZXMgQSBkZW1hbmRhIHBvciBpbXBvcnRhw6fDtWVzIChRbeKAiykgZSBleHBvcnRhw6fDtWVzIChReOKAiykgw6kgcmVwcmVzZW50YWRhIHBvciBmdW7Dp8O1ZXMgbXVsdGlwbGljYXRpdmFzIGRlIHJlbmRhIGUgY8OibWJpbyByZWFsOg0KDQokJA0KUV9tID0gQSBaXnstzrF9IFFfaF7Osg0KJCQNCiQkDQpRX3ggPSBCIFpee86zfSBRX2ZezrQNCiQkDQpvbmRlOiBaID0gReKAiVBmL1BoIMOpIGEgdGF4YSBkZSBjw6JtYmlvIHJlYWw7DQoNClFo4oCLIMOpIGEgcmVuZGEgcmVhbCBkb23DqXN0aWNhOw0KDQpRZiDDqSBhIHJlbmRhIHJlYWwgZG8gcmVzdG8gZG8gbXVuZG87DQoNCs6xIGUgzrIgc8OjbywgcmVzcGVjdGl2YW1lbnRlLCBhcyBlbGFzdGljaWRhZGVzLXByZcOnbyBlIGVsYXN0aWNpZGFkZS1yZW5kYSBkYXMgaW1wb3J0YcOnw7VlczsNCg0KzrMgZSDOtCBzw6NvLCByZXNwZWN0aXZhbWVudGUsIGFzIGVsYXN0aWNpZGFkZXMtcHJlw6dvIGUgZWxhc3RpY2lkYWRlLXJlbmRhIGRhcyBleHBvcnRhw6fDtWVzOw0KDQpBIGUgQiBjYXB0YW0gZWZlaXRvcyBmaXhvcy4gUmF6w7VlcyBDb23DqXJjaW8gZSBQSUIgQXMgZXF1YcOnw7VlcyBzw6NvIG5vcm1hbGl6YWRhcyBwZWxvIFBJQiBkb23DqXN0aWNvIChRaCksIG9idGVuZG8tc2U6DQoNCiQkDQptID0gXGZyYWN7WiBRX219e1FfaH0NCiQkDQokJA0KeCA9IFxmcmFje1FfeH17UV9ofSANCiQkDQoNCg0Kb25kZSBtIMOpIGEgcmF6w6NvIGltcG9ydGHDp8O1ZXMvUElCIGUgeCBhIHJhesOjbyBleHBvcnRhw6fDtWVzL1BJQi4gRGluw6JtaWNhIGRhcyByYXrDtWVzIGNvbWVyY2lhaXMgRGVyaXZhbmRvIGFzIGVxdWHDp8O1ZXMgZW0gcmVsYcOnw6NvIGFvIHRlbXBvOg0KDQokJA0KIFxmcmFje2RtfXtkdH0gPSBtIFxsZWZ0WyAoMSAtIFxhbHBoYSkgeiArIChcYmV0YSAtIDEpIHFfaCBccmlnaHRdIA0KIFxmcmFje2R4fXtkdH0gPSB4IFxsZWZ0WyBcZ2FtbWEgeiArIFxkZWx0YSBxX2YgLSBxX2ggXHJpZ2h0XSANCiQkDQoNCm9uZGU6IHogPSB0YXhhIGRlIGNyZXNjaW1lbnRvIGRhIHRheGEgZGUgY8OibWJpbyByZWFsIChkZXN2YWxvcml6YcOnw6NvIHBvc2l0aXZhKTsNCg0KcWgg4oCLID0gdGF4YSBkZSBjcmVzY2ltZW50byBkbyBQSUIgZG9tw6lzdGljbzsNCg0KcWYgPSB0YXhhIGRlIGNyZXNjaW1lbnRvIGRvIFBJQiBtdW5kaWFsLiBTZSDOsSBcPCAxLCBoYXZlcsOhIHVtYSBkZXN2YWxvcml6YcOnw6NvIHJlYWwsIGN1am8gYXVtZW50YSBhIHJhesOjbyBpbXBvcnRhw6fDtWVzL1BJQi4gU2UgzrJcPjEsIG8gY3Jlc2NpbWVudG8gZG9tw6lzdGljbyBleHBhbmRlIGZvcnRlbWVudGUgYXMgaW1wb3J0YcOnw7Vlcy4gQWRlbWFpcywgYXMgZXhwb3J0YcOnw7VlcyBhdW1lbnRhbSBjb20gZGVzdmFsb3JpemHDp8OjbyAozrNcPjApIGUgY29tIGNyZXNjaW1lbnRvIGV4dGVybm8gKM60XD4wKSwgbWFzIHPDo28gcmVkdXppZGFzIHBlbG8gY3Jlc2NpbWVudG8gZG9tw6lzdGljbyAocWjigIspLiBUcmFkZS1PZmYgQ3Jlc2NpbWVudG8tRGVzdmFsb3JpemHDp8OjbyBPIHNhbGRvIGNvbWVyY2lhbCBlbSByZWxhw6fDo28gYW8gUElCIGV2b2x1aSBzZWd1bmRvOg0KDQokJA0KIFxmcmFje2R4fXtkdH0gLSBcZnJhY3tkbX17ZHR9ID0geChcZ2FtbWEgeiArIFxkZWx0YSBxX2YgLSBxX2gpIC0gbVsoMSAtIFxhbHBoYSl6ICsgKFxiZXRhIC0gMSlxX2hdIA0KJCQNCg0KU2UgbyBvYmpldGl2byDDqSBtYW50ZXIgbyBzYWxkbyBjb21lcmNpYWwgY29uc3RhbnRlIChkeC9kdCAtZG0vZHQgPSAwKSwgb2J0w6ptLXNlIGEgZXF1YcOnw6NvIGRlIFRyYWRlLW9mZjoNCg0KJCQNCnFfaCA9IFxmcmFje3hcZGVsdGEgcV9mfXt4IC0gbSgxIC0gXGJldGEpfSArIFxmcmFje3hcZ2FtbWEgLSBtKDEgLSBcYWxwaGEpfXt4IC0gbSgxIC0gXGJldGEpfSB6IA0KJCQNCg0KQSBpbmNsaW5hw6fDo28gZGEgY3VydmEgw6k6DQoNCiQkDQogXHZhcnBoaSA9IFxmcmFje3hcZ2FtbWEgLSBtKDEgLSBcYWxwaGEpfXt4IC0gbSgxIC0gXGJldGEpfSANCiQkDQoNCs+GIG1lZGUgbyBxdWFudG8gZGUgZGVzdmFsb3JpemHDp8OjbyBjYW1iaWFsIMOpIG5lY2Vzc8OhcmlvICh6KSBwYXJhIHN1c3RlbnRhciAxJSBhZGljaW9uYWwgZGUgY3Jlc2NpbWVudG8gKHFo4oCLKSBtYW50ZW5kbyBvIHNhbGRvIGNvbWVyY2lhbCBlc3TDoXZlbC4NCg0KQXBsaWNhw6fDo28gZW1ww61yaWNhIG5vIEJyYXNpbDogQ29tIGJhc2UgZW0gQ2F2YWxjYW50aSBlIEZyaXNjaHRhayAoMjAwMiksIG9zIHBhcsOibWV0cm9zIGVzdGltYWRvcyBwYXJhIDE5ODDigJMyMDAwIGZvcmFtOg0KDQokJA0KIFxhbHBoYSA9IDAuNzQsIFxxdWFkIFxiZXRhID0gMy4zOSwgXHF1YWQgXGdhbW1hID0gMC42MSwgXHF1YWQgXGRlbHRhID0gMS4wMSANCiQkDQoNCkVtIDIwMDIsIG9ic2VydmF2YW0tc2UgYXByb3hpbWFkYW1lbnRlOg0KDQokJA0KeCA9IDAuMTMsIFxxdWFkIG0gPSAwLjEwLCBccXVhZCBxX2YgPSAwLjA0IA0KJCQNCg0KU3Vic3RpdHVpbmRvLXNlIG5hIGVxdWHDp8OjbyAoNiksIEJhcmJvc2EtRmlsaG8gb2J0w6ltOg0KDQokJCANCnFfaCA9IDAuMzU2cV9mICsgMC4xNDR6IA0KJCQNCkxvZ286DQoNCiQkDQp6IFxhcHByb3ggXGZyYWN7cV9oIC0gMC4wMTQyfXswLjE0NH0gDQokJA0KDQpBdHJhdsOpcyBkZXN0ZSBtb2RlbG8sIMOpIHBvc3PDrXZlbCBjb25jbHVpciBxdWUgZGFkYXMgYXMgZWxhc3RpY2lkYWRlcyBwYXJhIG8gQnJhc2lsIGVtIDIwMDIsIGEgY2FkYSAxJSBhZGljaW9uYWwgZGUgY3Jlc2NpbWVudG8gbm8gUElCLCBleGlnZS1zZSB1bWEgZGVzdmFsb3JpemHDp8OjbyBjYW1iaWFsIHJlYWwgZGUgYXByb3hpbWFkYW1lbnRlIDYsOSUuIEVtIHRlcm1vcyBwcsOhdGljb3MsIGlzc28gc2lnbmlmaWNhIHF1ZSBvIHBhw61zIHNlIGVuY29udHJhdmEgcHJlc28gYSB1bWEgZGluw6JtaWNhIGVtIHF1ZSBvIGNyZXNjaW1lbnRvIGVjb27DtG1pY28gc8OzIHBvZGVyaWEgc2VyIHN1c3RlbnRhZG8gYW8gY3VzdG8gZGUgZm9ydGVzIGRlc3ZhbG9yaXphw6fDtWVzIGNhbWJpYWlzLCBjb20gdG9kb3Mgb3MgZWZlaXRvcyBjb2xhdGVyYWlzIHF1ZSBlc3RhcyBpbXBsaWNhbSwgbm90YWRhbWVudGUgcHJlc3PDtWVzIGluZmxhY2lvbsOhcmlhcyBlIGltcGFjdG9zIHJlZGlzdHJpYnV0aXZvcyByZWdyZXNzaXZvcy4NCg0KQWRlbWFpcywgYSBlc3RydXR1cmEgY29tZXJjaWFsIGJyYXNpbGVpcmEgcmV2ZWxhLXNlIGRlc2Zhdm9yw6F2ZWwgYW8gY3Jlc2NpbWVudG8gc3VzdGVudGFkby4gQXMgaW1wb3J0YcOnw7VlcyBzw6NvIHBvdWNvIHNlbnPDrXZlaXMgYSB2YXJpYcOnw7VlcyBkZSBwcmXDp29zICjOsVw8MSkgZSwgYW8gbWVzbW8gdGVtcG8sIGFwcmVzZW50YW0gZWxldmFkYSBlbGFzdGljaWRhZGUgZW0gcmVsYcOnw6NvIMOgIHJlbmRhICjOslw+MSksIG8gcXVlIGltcGxpY2EgcXVlIHF1YWxxdWVyIGFjZWxlcmHDp8OjbyBkbyBjcmVzY2ltZW50byBpbnRlcm5vIHNlIHRyYWR1eiByYXBpZGFtZW50ZSBlbSBhdW1lbnRvcyBleHByZXNzaXZvcyBkYSBkZW1hbmRhIHBvciBiZW5zIGltcG9ydGFkb3MsIGNvbmZpZ3VyYW5kbyBhc3NpbSB1bSB0cmFkZS1vZmYgZXh0cmVtYW1lbnRlIGN1c3Rvc28uIEUsIGFvIGxvbmdvLXByYXpvLCBhIGVzdGFiaWxpZGFkZSBzaW11bHTDom5lYSBkYXMgcmF6w7VlcyBleHBvcnRhw6fDtWVzL1BJQiBlIGltcG9ydGHDp8O1ZXMvUElCIGV4aWdpcmlhIGNvbWJpbmHDp8O1ZXMgZGUgY3Jlc2NpbWVudG8gbXVpdG8gYmFpeG8gY29tIGFwcmVjaWHDp8OjbyBjYW1iaWFsIGNvbnTDrW51YS4gVGFsIGNlbsOhcmlvIMOpIGV2aWRlbnRlbWVudGUgaW5zdXN0ZW50w6F2ZWwsIHBvaXMgbmVuaHVtYSBlY29ub21pYSBjb25zZWd1ZSBzdXN0ZW50YXIgdW1hIHRyYWpldMOzcmlhIGRlIGFwcmVjaWHDp8OjbyBjYW1iaWFsIHNlbSBwZXJkYSBkZSBjb21wZXRpdGl2aWRhZGUuIEVzc2UgcmVzdWx0YWRvIGluZGljYSBxdWUgYSBwcsOzcHJpYSBlc3RydXR1cmEgZG8gY29tw6lyY2lvIGV4dGVybm8gYnJhc2lsZWlybyBjb250w6ltIHVtIHZpw6lzIGVzdHJ1dHVyYWwgY29udHJhIG8gY3Jlc2NpbWVudG8gcm9idXN0by4NCg0KUG9ydGFudG8sIG8gbW9kZWxvIGRlIEJhcmJvc2EtRmlsaG8gKDIwMDQpIGNvbmNsdWkgcXVlIGFzIHByb2JsZW3DoXRpY2FzIGJyYXNpbGVpcmFzIHbDo28gYWzDqW0gZGUgY2hvcXVlcyBjb25qdW50dXJhaXMsIHNlbmRvIGNhdXNhZG9zIHBvciByZXN0cmnDp8O1ZXMgZXN0cnV0dXJhaXMgZG8gY29tw6lyY2lvLiBBIGFsdGEgZWxhc3RpY2lkYWRlLXJlbmRhIGRhcyBpbXBvcnRhw6fDtWVzIMOpIG8gcHJpbmNpcGFsIGVudHJhdmUsIGVucXVhbnRvIGEgYmFpeGEgZWxhc3RpY2lkYWRlLXByZcOnbyBkYXMgZXhwb3J0YcOnw7VlcyBlIGltcG9ydGHDp8O1ZXMgbGltaXRhbSBhIGVmaWPDoWNpYSBkYSBkZXN2YWxvcml6YcOnw6NvIGNhbWJpYWwuIE91IHNlamEsIG1lc21vIHF1ZSB0YWwgdGVvcmlhIGVzdGVqYSBhcGxpY2FkYSBlbSB1bSBjb250ZXh0byBkZSAyMCBhbm9zIGFudGVyaW9yZXMsIGFpbmRhIHBvZGUgc2VyIGFwbGljYWRhIMOgIGNvbnRlbXBvcmFuZWlkYWRlLCB2aXN0byBxdWUgY29uc3RhdGEtc2UgcXVlIGEgdHJhamV0w7NyaWEgZGUgYmFpeG8gY3Jlc2NpbWVudG8gZSBjcmlzZXMgY2FtYmlhaXMgZG8gQnJhc2lsIGVzdMOjbyBlbnJhaXphZGFzIG5hIGVzdHJ1dHVyYSBjb21lcmNpYWwsIGN1am8gbsOjbyBzw7Mgw6kgZGVwZW5kZW50ZSwgY29tbyBzb2JyZXZhbG9yaXphIGEgZXhwb3J0YcOnw6NvIGRlIGluc3Vtb3MsIGNvbW8gYSBzb2phIGUgbWluw6lyaW9zLg0KDQojIyAqUElCIEJyYXNpbGVpcm8geCAoJSkgZGFzIEV4cG9ydGHDp8O1ZXMgbm8gUElCKg0KDQpgYGB7cn0NCmNvZGlnb3NfYmNiIDwtIGMoDQogIHBpYl9iciA9IDQxOTIsDQogIHBpYl9leHBfdHJpID0gMjI3MDgNCikNCmRhZG9zX3BpYl9hbm8gPC0gZ2V0X3Nlcmllcyhjb2RpZ29zX2JjYlsxXSwgc3RhcnRfZGF0ZSA9ICIyMDA1LTAxLTAxIikgJT4lDQogIHJlbmFtZShwaWJfbWVuc2FsID0gcGliX2JyKSAlPiUNCiAgbXV0YXRlKGFubyA9IHllYXIoZGF0ZSkpICU+JQ0KICBncm91cF9ieShhbm8pICU+JQ0KICBzdW1tYXJpc2UocGliX2Fub191c2QgPSBtZWFuKHBpYl9tZW5zYWwsIG5hLnJtID0gVFJVRSkpICU+JQ0KICBtdXRhdGUocGliX2Fub191c2QgPSByb3VuZChwaWJfYW5vX3VzZCwgZGlnaXRzID0gMikpDQpkYWRvc19leHBfdHJpIDwtIGdldF9zZXJpZXMoY29kaWdvc19iY2JbMl0sIHN0YXJ0X2RhdGUgPSAiMjAwNS0wMS0wMSIpICU+JQ0KICByZW5hbWUoZXhwX3RyaV91c2QgPSBwaWJfZXhwX3RyaSkgJT4lDQogIG11dGF0ZShhbm8gPSB5ZWFyKGRhdGUpKQ0KZXhwX2FubyA8LSBkYWRvc19leHBfdHJpICU+JQ0KICBncm91cF9ieShhbm8pICU+JQ0KICBzdW1tYXJpc2UoZXhwX2Fub191c2QgPSBzdW0oZXhwX3RyaV91c2QsIG5hLnJtID0gVFJVRSkpDQpkYWRvc19jb21wbGV0b3MgPC0gZnVsbF9qb2luKGRhZG9zX3BpYl9hbm8sIGV4cF9hbm8sIGJ5ID0gImFubyIpICU+JQ0KICBtdXRhdGUoDQogICAgcGliX2Fub19iaSA9IHBpYl9hbm9fdXNkIC8gMTAwMCwNCiAgICBleHBfYW5vX2JpID0gZXhwX2Fub191c2QgLyAxMDAwLA0KICAgIHBlcmNfZXhwID0gKGV4cF9hbm9fYmkgLyBwaWJfYW5vX2JpKSAqIDEwMCwNCiAgICBwZXJjX2V4cCA9IHJvdW5kKHBlcmNfZXhwLCBkaWdpdHMgPSAxKSwNCiAgICBEYXRhID0gYXMuRGF0ZShwYXN0ZTAoYW5vLCAiLTAxLTAxIikpLA0KICAgIHRpbWVzdGFtcCA9IGRhdGV0aW1lX3RvX3RpbWVzdGFtcChEYXRhKQ0KICApICU+JQ0KICBuYS5vbWl0KCkgJT4lDQogIGFycmFuZ2UoRGF0YSkNCmhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX2NvbXBsZXRvcyAlPiUgc2VsZWN0KHRpbWVzdGFtcCwgcGVyY19leHApKSwNCiAgICB0eXBlID0gImNvbHVtbiIsDQogICAgbmFtZSA9ICJFeHBvcnRhw6fDtWVzICglIFBJQikiLCANCiAgICBjb2xvciA9ICIjZmViNzEyIiwNCiAgICB5QXhpcyA9IDAsDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDEsIHZhbHVlU3VmZml4ID0gIiUiKQ0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19jb21wbGV0b3MgJT4lIHNlbGVjdCh0aW1lc3RhbXAsIHBpYl9hbm9fYmkpKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiUElCIChVUyQgYmlsaMO1ZXMpIiwgIA0KICAgIGxpbmVXaWR0aCA9IDIsDQogICAgY29sb3IgPSAiIzAyMDIzYyIsDQogICAgeUF4aXMgPSAxLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxLCB2YWx1ZVByZWZpeCA9ICJVUyQgIiwgdmFsdWVTdWZmaXggPSAiIGJpIikgIA0KICApICU+JQ0KICBoY195QXhpc19tdWx0aXBsZXMoDQogICAgbGlzdCh0aXRsZSA9IGxpc3QodGV4dCA9ICJQYXJ0aWNpcGHDp8OjbyBubyBQSUIgKCUpIiksIG9wcG9zaXRlID0gRkFMU0UpLA0KICAgIGxpc3QodGl0bGUgPSBsaXN0KHRleHQgPSAiUElCIChVUyQgYmlsaMO1ZXMpIiksIG9wcG9zaXRlID0gVFJVRSkgDQogICkgJT4lDQogIGhjX3RpdGxlKHRleHQgPSAiUElCIEJyYXNpbGVpcm8gdnMgUGFydGljaXBhw6fDo28gZGFzIEV4cG9ydGHDp8O1ZXMiKSAlPiUNCiAgaGNfc3VidGl0bGUodGV4dCA9ICJWYWxvcmVzIGVtIGJpbGjDtWVzIGRlIGTDs2xhcmVzIikgJT4lICANCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwgDQogICAgdGV4dCA9ICJGb250ZTogQmFuY28gQ2VudHJhbCBkbyBCcmFzaWwiDQogICkgJT4lDQogIGhjX3JhbmdlU2VsZWN0b3IoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYnV0dG9ucyA9IGxpc3QoDQogICAgICBsaXN0KHR5cGUgPSAneWVhcicsIGNvdW50ID0gNSwgdGV4dCA9ICc1WScpLA0KICAgICAgbGlzdCh0eXBlID0gJ3llYXInLCBjb3VudCA9IDEwLCB0ZXh0ID0gJzEwWScpLA0KICAgICAgbGlzdCh0eXBlID0gJ2FsbCcsIHRleHQgPSAnQWxsJykNCiAgICApDQogICkgJT4lDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICBoZWFkZXJGb3JtYXQgPSAnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJweCI+PGI+e3BvaW50LmtleTolWX08L2I+PC9zcGFuPjxici8+Jw0KICApICU+JQ0KICBoY19sZWdlbmQoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSIsDQogICAgbGF5b3V0ID0gImhvcml6b250YWwiDQogICkNCmBgYA0KDQpPIGdyw6FmaWNvIGFjaW1hIG1vc3RyYSBhIGV2b2x1w6fDo28gZG8gUElCIGVtIGTDs2xhcmVzIGUgZGEgcGFydGljaXBhw6fDo28gZGFzIGV4cG9ydGHDp8O1ZXMgbm8gUElCIGVudHJlIDIwMDUgZSAyMDI0LiBPIGNvbXBvcnRhbWVudG8gZW50cmUgb3MgZG9pcyBzZSB0b3JuYSBiZW0gaW1wcmV2aXPDrXZlbCwgdW1hIHZleiBxdWUgbsOjbyBuZWNlc3NhcmlhbWVudGUgdW0gYXVtZW50byBkbyBQSUIgc2lnbmlmaWNhIHRhbWLDqW0gdW0gYXVtZW50byBkYSBwb3JjZW50YWdlbSBkZSBleHBvcnRhw6fDtWVzIGRlbnRybyBkZWxlLiBQcm92YSBkaXNzbyDDqSBvIGNvbXBvcnRhbWVudG8gZGEgcG9yY2VudGFnZW0gcXVlIGFwcmVzZW50b3UgdW1hIGNyZXNjZW50ZSBhIHBhcnRpciBkZSAyMDE2IHZhcmlhZG8gZW50cmUgMTElIGUgMTgsNyUgYXTDqSAyMDIzLCBlbnF1YW50byBvIFBJQiBzb2ZyZXUgY29tIGF1bWVudG9zIGUgcXVlZGFzIG5vIG1lc21vIHBlcsOtb2RvLCBjb20gZGVzdGFxdWUgcGFyYSAyMDIxIGNvbSB1bWEgcmVkdcOnw6NvIGRvIFBJQiBkZSAxLDYgdHJpbGjDo28gVVMkIHBhcmEgMSw1IHRyaWxow6NvIFVTJCwgcG9yw6ltIGEgcG9yY2VudGFnZW0gZGUgZXhwb3J0YcOnw6dhbyBzYWx0b3UgMTIsNiUgcGFyYSAxOC4zJS4NCg0KTyBQSUIgcmV0b21vdSBvIGNyZXNjaW1lbnRvIGVtIDIwMjIsIHVsdHJhcGFzc2FuZG8gVVNcJCAyLDIgdHJpbGjDtWVzIGVtIDIwMjQsIG1hcyBhIHBhcnRpY2lwYcOnw6NvIGRhcyBleHBvcnRhw6fDtWVzIG5vIFBJQiBtYW50ZXZlLXNlIGVzdMOhdmVsLCBlbSB0b3JubyBkZSAxNiUgYSAxNyUuIElzc28gaW5kaWNhIHF1ZSwgZW1ib3JhIG8gQnJhc2lsIHRlbmhhIHNlIHJlY3VwZXJhZG8gZW0gdGVybW9zIGRlIHByb2R1dG8gYWdyZWdhZG8sIG8gYXVtZW50byBkYXMgZXhwb3J0YcOnw7VlcyBuw6NvIGFjb21wYW5ob3UgcHJvcG9yY2lvbmFsbWVudGUgbyBjcmVzY2ltZW50byBkbyBQSUIuIEVtIHPDrW50ZXNlLCBvIGdyw6FmaWNvIGV2aWRlbmNpYSBhIG5hdHVyZXphIGVzdHJ1dHVyYWwgZGEgZWNvbm9taWEgYnJhc2lsZWlyYSBkZXN0YWNhZGEgcG9yIEJhcmJvc2EtRmlsaG8gKDIwMDQpLCB2aXN0byBxdWUgbyBjcmVzY2ltZW50byBpbnRlcm5vIGVsZXZhIGFzIGltcG9ydGHDp8O1ZXMgZSByZWR1eiBhIHJlbGV2w6JuY2lhIGRhcyBleHBvcnRhw6fDtWVzIG5vIFBJQiwgZW5xdWFudG8gY2hvcXVlcyBleHRlcm5vcyBlIGRlc3ZhbG9yaXphw6fDtWVzIGNhbWJpYWlzIGFtcGxpYW0gdGVtcG9yYXJpYW1lbnRlIHN1YSBwYXJ0aWNpcGHDp8Ojby4NCg0KTm8gZ2VyYWwsIGFwZXNhciBkZSBhbGd1bWFzIHF1ZWRhcyBubyBQSUIgZW0gYWxndW5zIGFub3MgZXNwZWPDrWZpY29zIGEgcG9yY2VudGFnZW0gZGFzIGV4cG9ydGHDp8O1ZXMgZGVudHJvIGRvIFBJQiBhcHJlc2VudG91IGdyYW5kZSBjcmVzY2ltZW50byBhcGVzYXIgZGEgcXVlZGEgbm8gw7psdGltbyBhbm8sIG8gcXVlIG1vc3RyYSBhIGZvcsOnYSBkYSBwYXJjZWxhIHF1ZSBhcyBleHBvcnRhw6fDtWVzIGRldMOpbSBubyBQSUIgZGEgZWNvbm9taWEgYnJhc2lsZWlyYS4NCg0KIyMgKkV2b2x1w6fDo28gZG8gVmFsb3IgVG90YWwgRXhwb3J0YWRvIHBvciBQcm9kdXRvIGFvIEFubyoNCg0KYGBge3J9DQp0b3RhaXNfc29qYSA8LSByZWFkX2V4Y2VsKCJEYWRvc1NvamEueGxzeCIsIHJhbmdlID0gIkE2OkQyNyIpICU+JQ0KICBtdXRhdGUoDQogICAgVmFsb3IgPSByb3VuZChWYWxvciwgZGlnaXRzID0gMiksDQogICAgUXRkZSA9IHJvdW5kKFF0ZGUsIGRpZ2l0cyA9IDIpLA0KICAgIFByZcOnbyA9IHJvdW5kKFByZcOnbywgZGlnaXRzID0gMiksDQogICAgRGF0YSA9IGFzLkRhdGUoRGF0YSwgZm9ybWF0ID0gIiVZIiksDQogICAgQW5vID0geWVhcihEYXRhKSwNCiAgICBDb21tb2RpdHkgPSAiU29qYSINCiAgKQ0KdG90YWlzX2ZlcnJvIDwtIHJlYWRfZXhjZWwoIkRhZG9zRmVycm8ueGxzeCIsIHJhbmdlID0gIkE2OkQyNyIpICU+JQ0KICBtdXRhdGUoDQogICAgVmFsb3IgPSByb3VuZChWYWxvciwgZGlnaXRzID0gMiksDQogICAgUXRkZSA9IHJvdW5kKFF0ZGUsIGRpZ2l0cyA9IDIpLA0KICAgIFByZcOnbyA9IHJvdW5kKFByZcOnbywgZGlnaXRzID0gMiksDQogICAgRGF0YSA9IGFzLkRhdGUoRGF0YSwgZm9ybWF0ID0gIiVZIiksDQogICAgQW5vID0geWVhcihEYXRhKSwNCiAgICBDb21tb2RpdHkgPSAiTWluw6lyaW8gZGUgRmVycm8iDQogICkNCnRvdGFpc19wZXRyb2xlbyA8LSByZWFkX2V4Y2VsKCJEYWRvc1BldHJvbGVvZURlci54bHN4IiwgcmFuZ2UgPSAiQTY6RDI3IikgJT4lDQogIG11dGF0ZSgNCiAgICBWYWxvciA9IHJvdW5kKFZhbG9yLCBkaWdpdHMgPSAyKSwNCiAgICBRdGRlID0gcm91bmQoUXRkZSwgZGlnaXRzID0gMiksDQogICAgUHJlw6dvID0gcm91bmQoUHJlw6dvLCBkaWdpdHMgPSAyKSwNCiAgICBEYXRhID0gYXMuRGF0ZShEYXRhLCBmb3JtYXQgPSAiJVkiKSwNCiAgICBBbm8gPSB5ZWFyKERhdGEpLA0KICAgIENvbW1vZGl0eSA9ICJQZXRyw7NsZW8gZSBEZXJpdmFkb3MiDQogICkNCmRhZG9zX2Fub192YWxvciA8LSBiaW5kX3Jvd3MoDQogIHRvdGFpc19zb2phICU+JSBzZWxlY3QoQW5vLCBDb21tb2RpdHksIFZhbG9yKSwNCiAgdG90YWlzX2ZlcnJvICU+JSBzZWxlY3QoQW5vLCBDb21tb2RpdHksIFZhbG9yKSwNCiAgdG90YWlzX3BldHJvbGVvICU+JSBzZWxlY3QoQW5vLCBDb21tb2RpdHksIFZhbG9yKQ0KKSAlPiUNCiAgZ3JvdXBfYnkoQW5vLCBDb21tb2RpdHkpICU+JQ0KICBzdW1tYXJpc2UoVmFsb3IgPSBzdW0oVmFsb3IsIG5hLnJtID0gVFJVRSksIC5ncm91cHMgPSAiZHJvcCIpDQpkYWRvc19wcmVjbyA8LSBiaW5kX3Jvd3MoDQogIHRvdGFpc19zb2phICU+JSBzZWxlY3QoQW5vLCBDb21tb2RpdHksIFByZcOnbyksDQogIHRvdGFpc19mZXJybyAlPiUgc2VsZWN0KEFubywgQ29tbW9kaXR5LCBQcmXDp28pLA0KICB0b3RhaXNfcGV0cm9sZW8gJT4lIHNlbGVjdChBbm8sIENvbW1vZGl0eSwgUHJlw6dvKQ0KKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShQcmXDp28pICYgaXMuZmluaXRlKFByZcOnbykpDQpkYWRvc19xdGRlIDwtIGJpbmRfcm93cygNCiAgdG90YWlzX3NvamEgJT4lIHNlbGVjdChBbm8sIENvbW1vZGl0eSwgUXRkZSksDQogIHRvdGFpc19mZXJybyAlPiUgc2VsZWN0KEFubywgQ29tbW9kaXR5LCBRdGRlKSwNCiAgdG90YWlzX3BldHJvbGVvICU+JSBzZWxlY3QoQW5vLCBDb21tb2RpdHksIFF0ZGUpDQopICU+JQ0KICBmaWx0ZXIoIWlzLm5hKFF0ZGUpICYgaXMuZmluaXRlKFF0ZGUpKQ0KZGFkb3Nfc3RvY2tfZXhwb3J0IDwtIGRhZG9zX2Fub192YWxvciAlPiUNCiAgbXV0YXRlKA0KICAgIERhdGEgPSBhcy5EYXRlKHBhc3RlMChBbm8sICItMDEtMDEiKSksDQogICAgdGltZXN0YW1wID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKERhdGEpDQogICkgJT4lDQogIGFycmFuZ2UoRGF0YSkNCmhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX3N0b2NrX2V4cG9ydCAlPiUgZmlsdGVyKENvbW1vZGl0eSA9PSAiU29qYSIpICU+JSBzZWxlY3QodGltZXN0YW1wLCBWYWxvcikpLA0KICAgIHR5cGUgPSAibGluZSIsIG5hbWUgPSAiU29qYSAoVVMkIGJpKSIsIGNvbG9yID0gIiNGRUI3MTIiLCBsaW5lV2lkdGggPSAzLA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IFRSVUUsIHJhZGl1cyA9IDQpLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAwLCB2YWx1ZVByZWZpeCA9ICJVUyQgIiwgdmFsdWVTdWZmaXggPSAiIGJpIikNCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3Nfc3RvY2tfZXhwb3J0ICU+JSBmaWx0ZXIoQ29tbW9kaXR5ID09ICJNaW7DqXJpbyBkZSBGZXJybyIpICU+JSBzZWxlY3QodGltZXN0YW1wLCBWYWxvcikpLA0KICAgIHR5cGUgPSAibGluZSIsIG5hbWUgPSAiTWluw6lyaW8gZGUgRmVycm8gKFVTJCBiaSkiLCBjb2xvciA9ICIjNDZCMUUxIiwgbGluZVdpZHRoID0gMywNCiAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBUUlVFLCByYWRpdXMgPSA0KSwNCiAgICB0b29sdGlwID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMCwgdmFsdWVQcmVmaXggPSAiVVMkICIsIHZhbHVlU3VmZml4ID0gIiBiaSIpDQogICkgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX3N0b2NrX2V4cG9ydCAlPiUgZmlsdGVyKENvbW1vZGl0eSA9PSAiUGV0csOzbGVvIGUgRGVyaXZhZG9zIikgJT4lIHNlbGVjdCh0aW1lc3RhbXAsIFZhbG9yKSksDQogICAgdHlwZSA9ICJsaW5lIiwgbmFtZSA9ICJQZXRyw7NsZW8gZSBEZXJpdmFkb3MgKFVTJCBiaSkiLCBjb2xvciA9ICIjMDIwMjNDIiwgbGluZVdpZHRoID0gMywNCiAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBUUlVFLCByYWRpdXMgPSA0KSwNCiAgICB0b29sdGlwID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMCwgdmFsdWVQcmVmaXggPSAiVVMkICIsIHZhbHVlU3VmZml4ID0gIiBiaSIpDQogICkgJT4lDQogIGhjX3lBeGlzKHRpdGxlID0gbGlzdCh0ZXh0ID0gIlZhbG9yIEV4cG9ydGFkbyAoVVMkIGJpKSIpLCBsYWJlbHMgPSBsaXN0KGZvcm1hdCA9ICJVUyQge3ZhbHVlOiwuMGZ9IGJpIikpICU+JQ0KICBoY190aXRsZSh0ZXh0ID0gIkV4cG9ydGHDp8O1ZXMgcG9yIFByb2R1dG8gLSAoVVMkIEJpbGjDtWVzKSIpICU+JQ0KICBoY19zdWJ0aXRsZSh0ZXh0ID0gIkV2b2x1w6fDo28gZG8gdmFsb3IgZXhwb3J0YWRvIGRlIFNvamEsIE1pbsOpcmlvIGRlIEZlcnJvIGUgUGV0csOzbGVvIikgJT4lDQogIGhjX2NyZWRpdHMoZW5hYmxlZCA9IFRSVUUsIHRleHQgPSAiRm9udGU6IE1ESUMgLSBNaW5pc3TDqXJpbyBkbyBEZXNlbnZvbHZpbWVudG8sIEluZMO6c3RyaWEsIENvbcOpcmNpbyBlIFNlcnZpw6dvcyIpICU+JQ0KICBoY19yYW5nZVNlbGVjdG9yKGVuYWJsZWQgPSBUUlVFLCBidXR0b25zID0gbGlzdChsaXN0KHR5cGUgPSAneWVhcicsIGNvdW50ID0gNSwgdGV4dCA9ICc1WScpLCBsaXN0KHR5cGUgPSAneWVhcicsIGNvdW50ID0gMTAsIHRleHQgPSAnMTBZJyksIGxpc3QodHlwZSA9ICdhbGwnLCB0ZXh0ID0gJ0FsbCcpKSkgJT4lDQogIGhjX3Rvb2x0aXAoc2hhcmVkID0gVFJVRSwgY3Jvc3NoYWlycyA9IFRSVUUsIGhlYWRlckZvcm1hdCA9ICc8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMnB4Ij48Yj57cG9pbnQua2V5OiVZfTwvYj48L3NwYW4+PGJyLz4nKSAlPiUNCiAgaGNfbGVnZW5kKGVuYWJsZWQgPSBUUlVFLCBhbGlnbiA9ICJjZW50ZXIiLCB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSIsIGxheW91dCA9ICJob3Jpem9udGFsIikNCmBgYA0KDQpPYnNlcnZhLXNlIHF1ZSBhcyB0csOqcyBjb21tb2RpdGllcyBhcHJlc2VudGFtIHRyYWpldMOzcmlhcyBzZW1lbGhhbnRlcyB0YW50byBkZSBhdW1lbnRvIHF1YW50byBkZSBxdWVkYSBuYSBncmFuZGUgbWFpb3JpYSBkbyBhbm9zIGluZGVwZW5kZW50ZW1lbnRlIGRvIHZhbG9yIGRvIHByb2R1dG8sIGNvbSBmb3J0ZSBleHBhbnPDo28gZGFzIGV4cG9ydGHDp8O1ZXMgYSBwYXJ0aXIgZGUgMjAxNiwgaW1wdWxzaW9uYWRhcyBwZWxvIGF1bWVudG8gZGEgZGVtYW5kYSBpbnRlcm5hY2lvbmFsIGUgcGVsYSBkZXN2YWxvcml6YcOnw6NvIGNhbWJpYWwgZG8gcGVyw61vZG8uIEEgc29qYSBzZSBkZXN0YWNhIGNvbW8gcHJpbmNpcGFsIHByb2R1dG8gZXhwb3J0YWRvLCBhdGluZ2luZG8gbyBwaWNvIGVtIDIwMjMgY29tIGNlcmNhIGRlIFVTXCQgNTMsMiBiaWxow7Vlcywgc2VndWlkYSBwb3IgcGV0csOzbGVvIGUgZGVyaXZhZG9zIChVU1wkIDQyLDUgYmlsaMO1ZXMpIGUgbWluw6lyaW8gZGUgZmVycm8gKFVTXCQgMzAsNSBiaWxow7VlcykuIE8gY3Jlc2NpbWVudG8gYXTDqSAyMDIxIHJlZmxldGUgbyBib29tIGRhcyBjb21tb2RpdGllcywgZXNwZWNpYWxtZW50ZSBwZWxhIGFsdGEgZG9zIHByZcOnb3MgaW50ZXJuYWNpb25haXMgZSBvIGZvcnRhbGVjaW1lbnRvIGRhIHBhdXRhIGFncm9leHBvcnRhZG9yYSBicmFzaWxlaXJhLg0KDQpBIHBhcnRpciBkZSAyMDI0IG5vdGEtc2UgdW1hIHF1ZWRhIGdlbmVyYWxpemFkYSBubyB2YWxvciBleHBvcnRhZG8gZGFzIHRyw6pzIGNhdGVnb3JpYXMsIHN1Z2VyaW5kbyBhIGNvbWJpbmHDp8OjbyBkZSByZXRyYcOnw6NvIGRlIHByZcOnb3MgaW50ZXJuYWNpb25haXMsIHJlZHXDp8OjbyBkYSBkZW1hbmRhIGNoaW5lc2EgZSB2YWxvcml6YcOnw6NvIGNhbWJpYWwsIG8gcXVlIGRpbWludWkgYSBjb21wZXRpdGl2aWRhZGUgZXh0ZXJuYS4gQXNzaW0sIG9zIGRhZG9zIGNvbmZpcm1hbSBub3ZhbWVudGUgYSBkZXBlbmTDqm5jaWEgYnJhc2lsZWlyYSBkZSBwcm9kdXRvcyBwcmltw6FyaW9zLCBkZXN0YWNhbmRvIGEgdnVsbmVyYWJpbGlkYWRlIGRvIHBhw61zIGEgY2hvcXVlcyBleHRlcm5vcyBkZSBwcmXDp29zIGUgw6Agb3NjaWxhw6fDo28gZG8gY8OibWJpby4NCg0KIyMgKkV2b2x1w6fDo28gZG9zIFByZcOnb3MgZGFzIENvbW1vZGl0aWVzIHBvciBBbm8qDQoNCmBgYHtyfQ0KZGFkb3NfcHJlY29fc3RvY2sgPC0gZGFkb3NfcHJlY28gJT4lDQogIG11dGF0ZSgNCiAgICBEYXRhID0gYXMuRGF0ZShwYXN0ZTAoQW5vLCAiLTAxLTAxIikpLA0KICAgIHRpbWVzdGFtcCA9IGRhdGV0aW1lX3RvX3RpbWVzdGFtcChEYXRhKQ0KICApICU+JQ0KICBhcnJhbmdlKERhdGEpDQpoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19wcmVjb19zdG9jayAlPiUgZmlsdGVyKENvbW1vZGl0eSA9PSAiU29qYSIpICU+JSBzZWxlY3QodGltZXN0YW1wLCBQcmXDp28pKSwNCiAgICB0eXBlID0gImxpbmUiLCBuYW1lID0gIlNvamEgKFVTJC90KSIsIGNvbG9yID0gIiNGRUI3MTIiLCBsaW5lV2lkdGggPSAzLA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IFRSVUUsIHJhZGl1cyA9IDQpLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAwLCB2YWx1ZVByZWZpeCA9ICJVUyQgIiwgdmFsdWVTdWZmaXggPSAiL3QiKQ0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19wcmVjb19zdG9jayAlPiUgZmlsdGVyKENvbW1vZGl0eSA9PSAiTWluw6lyaW8gZGUgRmVycm8iKSAlPiUgc2VsZWN0KHRpbWVzdGFtcCwgUHJlw6dvKSksDQogICAgdHlwZSA9ICJsaW5lIiwgbmFtZSA9ICJNaW7DqXJpbyBkZSBGZXJybyAoVVMkL3QpIiwgY29sb3IgPSAiIzQ2QjFFMSIsIGxpbmVXaWR0aCA9IDMsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gVFJVRSwgcmFkaXVzID0gNCksDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDAsIHZhbHVlUHJlZml4ID0gIlVTJCAiLCB2YWx1ZVN1ZmZpeCA9ICIvdCIpDQogICkgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX3ByZWNvX3N0b2NrICU+JSBmaWx0ZXIoQ29tbW9kaXR5ID09ICJQZXRyw7NsZW8gZSBEZXJpdmFkb3MiKSAlPiUgc2VsZWN0KHRpbWVzdGFtcCwgUHJlw6dvKSksDQogICAgdHlwZSA9ICJsaW5lIiwgbmFtZSA9ICJQZXRyw7NsZW8gZSBEZXJpdmFkb3MgKFVTJC90KSIsIGNvbG9yID0gIiMwMjAyM0MiLCBsaW5lV2lkdGggPSAzLA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IFRSVUUsIHJhZGl1cyA9IDQpLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAwLCB2YWx1ZVByZWZpeCA9ICJVUyQgIiwgdmFsdWVTdWZmaXggPSAiL3QiKQ0KICApICU+JQ0KICBoY195QXhpcyh0aXRsZSA9IGxpc3QodGV4dCA9ICJQcmXDp28gcG9yIFRvbmVsYWRhIChVUyQpIiksIGxhYmVscyA9IGxpc3QoZm9ybWF0ID0gIlVTJCB7dmFsdWU6LC4wZn0iKSkgJT4lDQogIGhjX3RpdGxlKHRleHQgPSAiRXZvbHXDp8OjbyBkb3MgUHJlw6dvcyBkYXMgQ29tbW9kaXRpZXMiKSAlPiUNCiAgaGNfc3VidGl0bGUodGV4dCA9ICJQcmXDp29zIGVtIFVTJCBwb3IgdG9uZWxhZGEgZGUgU29qYSwgTWluw6lyaW8gZGUgRmVycm8gZSBQZXRyw7NsZW8iKSAlPiUNCiAgaGNfY3JlZGl0cyhlbmFibGVkID0gVFJVRSwgdGV4dCA9ICJGb250ZTogTURJQyAtIE1pbmlzdMOpcmlvIGRvIERlc2Vudm9sdmltZW50bywgSW5kw7pzdHJpYSwgQ29tw6lyY2lvIGUgU2VydmnDp29zIikgJT4lDQogIGhjX3JhbmdlU2VsZWN0b3IoZW5hYmxlZCA9IFRSVUUsIGJ1dHRvbnMgPSBsaXN0KGxpc3QodHlwZSA9ICd5ZWFyJywgY291bnQgPSA1LCB0ZXh0ID0gJzVZJyksIGxpc3QodHlwZSA9ICd5ZWFyJywgY291bnQgPSAxMCwgdGV4dCA9ICcxMFknKSwgbGlzdCh0eXBlID0gJ2FsbCcsIHRleHQgPSAnQWxsJykpKSAlPiUNCiAgaGNfdG9vbHRpcChzaGFyZWQgPSBUUlVFLCBjcm9zc2hhaXJzID0gVFJVRSwgaGVhZGVyRm9ybWF0ID0gJzxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHgiPjxiPntwb2ludC5rZXk6JVl9PC9iPjwvc3Bhbj48YnIvPicpICU+JQ0KICBoY19sZWdlbmQoZW5hYmxlZCA9IFRSVUUsIGFsaWduID0gImNlbnRlciIsIHZlcnRpY2FsQWxpZ24gPSAiYm90dG9tIiwgbGF5b3V0ID0gImhvcml6b250YWwiKQ0KYGBgDQoNCk8gZ3LDoWZpY28gYXByZXNlbnRhZG8gZXZpZGVuY2lhIGNvbW8gYXMgZmx1dHVhw6fDtWVzIGRvcyBwcmXDp29zIGludGVybmFjaW9uYWlzIGltcGFjdGFtIGRpcmV0YW1lbnRlIGEgcGF1dGEgZXhwb3J0YWRvcmEgYnJhc2lsZWlyYSwgZGFkYSBzdWEgYWx0YSBjb25jZW50cmHDp8OjbyBuZXNzZXMgcHJvZHV0b3MuIEVudHJlIDIwMTUgZSAyMDIwLCBvYnNlcnZhLXNlIHJlbGF0aXZhIGVzdGFiaWxpZGFkZSBub3MgcHJlw6dvcywgY29tIHZhcmlhw6fDtWVzIG1vZGVyYWRhcyBlIHVtIGxldmUgY3Jlc2NpbWVudG8gYSBwYXJ0aXIgZGUgMjAxOCwgcmVmbGV0aW5kbyBhIHJlY3VwZXJhw6fDo28gZG8gY29tw6lyY2lvIGdsb2JhbCBhcMOzcyBhIHJlY2Vzc8OjbyBicmFzaWxlaXJhIGUgYSBjcmlzZSBkYXMgY29tbW9kaXRpZXMgZGUgMjAxNCDDoCAyMDE1LiBDb250dWRvLCBlbnRyZSAyMDIxIGUgMjAyMiwgb2NvcnJldSB1bSBmb3J0ZSBhdW1lbnRvIGdlbmVyYWxpemFkbyBkb3MgcHJlw6dvcyBpbXB1bHNpb25hZG9zIHBlbGEgcmV0b21hZGEgcMOzcy1wYW5kZW1pYSwgZ2FyZ2Fsb3MgbG9nw61zdGljb3MgZSB0ZW5zw7VlcyBnZW9wb2zDrXRpY2FzLCBxdWUgcHJlc3Npb25hcmFtIG9zIHByZcOnb3MgZGUgZW5lcmdpYSBlIGFsaW1lbnRvcy4NCg0KQSBwYXJ0aXIgZGUgMjAyMywgaG91dmUgdW1hIHRlbmTDqm5jaWEgZGUgcXVlZGEgbm9zIHByZcOnb3MgZGFzIHRyw6pzIGNvbW1vZGl0aWVzLCBvbmRlIGEgc29qYSBlIG8gcGV0csOzbGVvIGNvbnZlcmdpcmFtIHBhcmEgVVNcJCA1MjMvdCBlIG8gbWluw6lyaW8gZGUgZmVycm8gY2FpdSBwYXJhIFVTXCQgODEvdC4gRXNzYSByZXRyYcOnw6NvIHJlZmxldGUgYSBkZXNhY2VsZXJhw6fDo28gZGEgZWNvbm9taWEgY2hpbmVzYSwgcHJpbmNpcGFsIGRlc3Rpbm8gZGFzIGV4cG9ydGHDp8O1ZXMgYnJhc2lsZWlyYXMsIGUgbyByZWZsdXhvIGRvcyBwcmXDp29zIGludGVybmFjaW9uYWlzIGFww7NzIG8gcGljbyBkZSAyMDIyLiBFbSB0ZXJtb3MgZXN0cnV0dXJhaXMsIG8gZ3LDoWZpY28gcmVmb3LDp2EgbyBhcmd1bWVudG8gYXByZXNlbnRhZG8gYXRyYXbDqXMgZG8gbW9kZWxvIGVjb25vbcOpdHJpY28gZGlzY29ycmlkbywgb25kZSBhIGRlcGVuZMOqbmNpYSBkZSBwcm9kdXRvcyBwcmltw6FyaW9zIHRvcm5hIG8gZGVzZW1wZW5obyBleHRlcm5vIG5hY2lvbmFsIGZvcnRlbWVudGUgY29uZGljaW9uYWRvIMOgcyBmbHV0dWHDp8O1ZXMgZGUgcHJlw6dvcyBpbnRlcm5hY2lvbmFpcy4NCg0KIyMgKlZhcmlhw6fDo28gUGVyY2VudHVhbCBBbnVhbCBkb3MgUHJlw6dvcyoNCg0KYGBge3J9DQpkYWRvc192YXJpYWNhb19jb21tb2RpdGllcyA8LSBkYWRvc19wcmVjbyAlPiUNCiAgYXJyYW5nZShDb21tb2RpdHksIEFubykgJT4lDQogIGdyb3VwX2J5KENvbW1vZGl0eSkgJT4lDQogIG11dGF0ZSgNCiAgICBWYXJpYWNhb19QZXJjZW50dWFsID0gKFByZcOnbyAvIGxhZyhQcmXDp28pIC0gMSkgKiAxMDANCiAgKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShWYXJpYWNhb19QZXJjZW50dWFsKSkNCmhpZ2hjaGFydCgpICU+JQ0KICBoY190aXRsZSh0ZXh0ID0gIlZhcmlhw6fDo28gUGVyY2VudHVhbCBBbnVhbCBkb3MgUHJlw6dvcyBkYXMgQ29tbW9kaXRpZXMiKSAlPiUNCiAgaGNfc3VidGl0bGUodGV4dCA9ICJDb2x1bmFzIGxhZG8gYSBsYWRvIHBhcmEgbWVsaG9yIGNvbXBhcmHDp8OjbyIpICU+JQ0KICBoY194QXhpcygNCiAgICBjYXRlZ29yaWVzID0gdW5pcXVlKGRhZG9zX3ZhcmlhY2FvX2NvbW1vZGl0aWVzJEFubyksDQogICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiQW5vIikNCiAgKSAlPiUNCiAgaGNfeUF4aXMoDQogICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiVmFyaWHDp8OjbyBQZXJjZW50dWFsICglKSIpLA0KICAgIGxhYmVscyA9IGxpc3QoZm9ybWF0ID0gInt2YWx1ZX0lIikNCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gZGFkb3NfdmFyaWFjYW9fY29tbW9kaXRpZXMgJT4lIGZpbHRlcihDb21tb2RpdHkgPT0gIlNvamEiKSwNCiAgICB0eXBlID0gImNvbHVtbiIsDQogICAgaGNhZXMoeCA9IEFubywgeSA9IFZhcmlhY2FvX1BlcmNlbnR1YWwpLA0KICAgIG5hbWUgPSAiU29qYSIsDQogICAgY29sb3IgPSAiI0ZFQjcxMiINCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gZGFkb3NfdmFyaWFjYW9fY29tbW9kaXRpZXMgJT4lIGZpbHRlcihDb21tb2RpdHkgPT0gIk1pbsOpcmlvIGRlIEZlcnJvIiksDQogICAgdHlwZSA9ICJjb2x1bW4iLCANCiAgICBoY2Flcyh4ID0gQW5vLCB5ID0gVmFyaWFjYW9fUGVyY2VudHVhbCksDQogICAgbmFtZSA9ICJNaW7DqXJpbyBkZSBGZXJybyIsDQogICAgY29sb3IgPSAiIzQ2QjFFMSINCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gZGFkb3NfdmFyaWFjYW9fY29tbW9kaXRpZXMgJT4lIGZpbHRlcihDb21tb2RpdHkgPT0gIlBldHLDs2xlbyBlIERlcml2YWRvcyIpLA0KICAgIHR5cGUgPSAiY29sdW1uIiwNCiAgICBoY2Flcyh4ID0gQW5vLCB5ID0gVmFyaWFjYW9fUGVyY2VudHVhbCksDQogICAgbmFtZSA9ICJQZXRyw7NsZW8iLA0KICAgIGNvbG9yID0gIiMwMjAyM0MiDQogICkgJT4lDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gRkFMU0UsDQogICAgaGVhZGVyRm9ybWF0ID0gIkFubzogPGI+e3BvaW50LmtleX08L2I+PGJyLz4iLA0KICAgIHBvaW50Rm9ybWF0ID0gJzxzcGFuIHN0eWxlPSJjb2xvcjp7cG9pbnQuY29sb3J9Ij7ilqA8L3NwYW4+IHtzZXJpZXMubmFtZX06IDxiPntwb2ludC55Oi4xZn0lPC9iPicNCiAgKSAlPiUNCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgY29sdW1uID0gbGlzdCgNCiAgICAgIGdyb3VwaW5nID0gVFJVRSwNCiAgICAgIHBvaW50UGFkZGluZyA9IDAuMiwNCiAgICAgIGdyb3VwUGFkZGluZyA9IDAuMSwNCiAgICAgIGJvcmRlcldpZHRoID0gMCwNCiAgICAgIGRhdGFMYWJlbHMgPSBsaXN0KA0KICAgICAgICBlbmFibGVkID0gVFJVRSwNCiAgICAgICAgZm9ybWF0ID0gIntwb2ludC55Oi4xZn0lIiwNCiAgICAgICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjdweCIsIGZvbnRXZWlnaHQgPSAiYm9sZCIpDQogICAgICApDQogICAgKQ0KICApICU+JQ0KICBoY19leHBvcnRpbmcoZW5hYmxlZCA9IFRSVUUpDQpgYGANCg0KTyBncsOhZmljbyBhcHJlc2VudGFkbyBldmlkZW5jaWEgYSBmb3J0ZSB2b2xhdGlsaWRhZGUgcXVlIGNhcmFjdGVyaXphIG8gY29tcG9ydGFtZW50byBkYSBzb2phLCBkbyBtaW7DqXJpbyBkZSBmZXJybyBlIGRvIHBldHLDs2xlby4gRXNzZXMgYmVucywgY2VudHJhaXMgbmEgcGF1dGEgZXhwb3J0YWRvcmEgYnJhc2lsZWlyYSwgYXByZXNlbnRhbSBvc2NpbGHDp8O1ZXMgYWNlbnR1YWRhcyBlbSBmdW7Dp8OjbyBkZSBjaG9xdWVzIGV4dGVybm9zIGUgY2ljbG9zIGdsb2JhaXMgZGUgZGVtYW5kYS4gT2JzZXJ2YS1zZSwgcG9yIGV4ZW1wbG8sIHVtIGNpY2xvIGRlIGV4cGFuc8OjbyBleHByZXNzaXZhIGVudHJlIDIwMDcgZSAyMDExLCBpbXB1bHNpb25hZG8gcGVsbyBhcXVlY2ltZW50byBkYSBlY29ub21pYSBtdW5kaWFsLCBzZWd1aWRvIHBvciByZXRyYcOnw7VlcyBicnVzY2FzIGR1cmFudGUgY3Jpc2VzLCBjb21vIGEgZmluYW5jZWlyYSBkZSAyMDA44oCTMjAwOS4NCg0KRW50cmUgMjAxNCBlIDIwMTYsIG5vdGEtc2UgdW0gbW92aW1lbnRvIGRlIHF1ZWRhIGdlbmVyYWxpemFkYSwgcHJpbmNpcGFsbWVudGUgbm8gcHJlw6dvIGRvIHBldHLDs2xlbywgcXVlIGNoZWdvdSBhIGNhaXIgcXVhc2UgNTAlIGVtIHVtIMO6bmljbyBhbm8sIHJlZmxldGluZG8gbyBleGNlc3NvIGRlIG9mZXJ0YSBnbG9iYWwsIG1hcywgYSBwYXJ0aXIgZGUgMjAxNywgb3MgcHJlw6dvcyBzZSByZWN1cGVyYW0gZ3JhZHVhbG1lbnRlLCBhdGluZ2luZG8gbm92byBhdWdlIGVtIDIwMjHigJMyMDIyLCBpbXB1bHNpb25hZG9zIHBlbGEgcmV0b21hZGEgZWNvbsO0bWljYSBww7NzLXBhbmRlbWlhIGUgcGVsYXMgdGVuc8O1ZXMgZ2VvcG9sw610aWNhcyBkZWNvcnJlbnRlcyBkYSBndWVycmEgbmEgVWNyw6JuaWEsIHF1ZSBlbGV2YXJhbSBzaWduaWZpY2F0aXZhbWVudGUgb3MgcHJlw6dvcyBkZSBlbmVyZ2lhIGUgYWxpbWVudG9zLiBDb250dWRvLCBhIHBhcnRpciBkZSAyMDIzLCBow6EgdW1hIHRlbmTDqm5jaWEgZGUgZXN0YWJpbGl6YcOnw6NvIGUgcXVlZGEgbm9zIHByZcOnb3MsIGluZGljYW5kbyBvIGFycmVmZWNpbWVudG8gZGEgZGVtYW5kYSBnbG9iYWwgZSBhIHJlY29tcG9zacOnw6NvIGRhIG9mZXJ0YSBpbnRlcm5hY2lvbmFsLg0KDQojIyAqQ29ycmVsYcOnw6NvIGVudHJlIGFzIENvbW1vZGl0aWVzKg0KDQpgYGB7cn0NCmRhZG9zX2NvcnJlbGFjYW8gPC0gZGFkb3NfcHJlY28gJT4lDQogIHNlbGVjdChBbm8sIENvbW1vZGl0eSwgUHJlw6dvKSAlPiUNCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IENvbW1vZGl0eSwgdmFsdWVzX2Zyb20gPSBQcmXDp28pICU+JQ0KICBzZWxlY3QoLUFubykNCm1hdHJpel9jb3IgPC0gY29yKGRhZG9zX2NvcnJlbGFjYW8sIHVzZSA9ICJjb21wbGV0ZS5vYnMiKQ0KYW5hbGlzZV9jb3JyZWxhY2FvIDwtIGFzLmRhdGEuZnJhbWUoYXMudGFibGUobWF0cml6X2NvcikpICU+JQ0KICByZW5hbWUoQ29tbW9kaXR5MSA9IFZhcjEsIENvbW1vZGl0eTIgPSBWYXIyLCBDb3JyZWxhY2FvID0gRnJlcSkgJT4lDQogIGZpbHRlcihDb21tb2RpdHkxICE9IENvbW1vZGl0eTIpICU+JQ0KICByb3d3aXNlKCkgJT4lDQogIG11dGF0ZShQYXIgPSBwYXN0ZShzb3J0KGMoQ29tbW9kaXR5MSwgQ29tbW9kaXR5MikpLCBjb2xsYXBzZSA9ICIgdnMgIikpICU+JQ0KICBkaXN0aW5jdChQYXIsIC5rZWVwX2FsbCA9IFRSVUUpICU+JQ0KICB1bmdyb3VwKCkgJT4lDQogIGFycmFuZ2UoZGVzYyhDb3JyZWxhY2FvKSkNCmhpZ2hjaGFydCgpICU+JQ0KICBoY19jaGFydCh0eXBlID0gImNvbHVtbiIpICU+JQ0KICBoY190aXRsZSh0ZXh0ID0gIkNvcnJlbGHDp8OjbyBlbnRyZSBhcyBDb21tb2RpdGllcyIpICU+JQ0KICBoY194QXhpcyhjYXRlZ29yaWVzID0gYW5hbGlzZV9jb3JyZWxhY2FvJFBhcikgJT4lDQogIGhjX3lBeGlzKA0KICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIkNvZWZpY2llbnRlIGRlIENvcnJlbGHDp8OjbyIpLA0KICAgIG1pbiA9IC0xLA0KICAgIG1heCA9IDENCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gYW5hbGlzZV9jb3JyZWxhY2FvJENvcnJlbGFjYW8sDQogICAgbmFtZSA9ICJDb3JyZWxhw6fDo28iLA0KICAgIGNvbG9yQnlQb2ludCA9IFRSVUUsDQogICAgY29sb3JzID0gYygiIzAyMDIzYyIsICIjMDIwMjNjIiwgIiNmZWI3MTIiKQ0KICApICU+JQ0KICBoY190b29sdGlwKA0KICAgIHBvaW50Rm9ybWF0ID0gIjxiPntwb2ludC5jYXRlZ29yeX08L2I+PGJyPkNvcnJlbGHDp8OjbzogPGI+e3BvaW50Lnk6LjNmfTwvYj4iDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIGNvbHVtbiA9IGxpc3QoDQogICAgICBkYXRhTGFiZWxzID0gbGlzdCgNCiAgICAgICAgZW5hYmxlZCA9IFRSVUUsDQogICAgICAgIGZvcm1hdCA9ICJ7cG9pbnQueTouMmZ9IiwNCiAgICAgICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEycHgiLCBmb250V2VpZ2h0ID0gImJvbGQiKQ0KICAgICAgKQ0KICAgICkNCiAgKQ0KYGBgDQoNCk8gZ3LDoWZpY28gYXByZXNlbnRhIG9zIGNvZWZpY2llbnRlcyBkZSBjb3JyZWxhw6fDo28gZW50cmUgb3MgcHJlw6dvcyBkYSBzb2phLCBkbyBtaW7DqXJpbyBkZSBmZXJybyBlIGRvIHBldHLDs2xlbyBlIGRlcml2YWRvcywgcmV2ZWxhbmRvIG8gZ3JhdSBkZSBhc3NvY2lhw6fDo28gZW50cmUgc3VhcyB2YXJpYcOnw7VlcyBhbyBsb25nbyBkbyB0ZW1wby4gT3MgcmVzdWx0YWRvcyBtb3N0cmFtIHJlbGHDp8O1ZXMgcG9zaXRpdmFzIGUgcmVsYXRpdmFtZW50ZSBmb3J0ZXM6IHNvamEgZSBwZXRyw7NsZW8gKDAsNzgpLCBtaW7DqXJpbyBkZSBmZXJybyBlIHBldHLDs2xlbyAoMCw3MCksIGUgc29qYSBlIG1pbsOpcmlvIGRlIGZlcnJvICgwLDY3KS4gRXNzZXMgdmFsb3JlcyBpbmRpY2FtIHF1ZSBvcyBwcmXDp29zIGRhcyBwcmluY2lwYWlzIGNvbW1vZGl0aWVzIGV4cG9ydGFkYXMgcGVsbyBCcmFzaWwgdGVuZGVtIGEgc2UgbW92ZXIgbmEgbWVzbWEgZGlyZcOnw6NvLCByZWZsZXRpbmRvIGEgaW5mbHXDqm5jaWEgZGUgZmF0b3JlcyBtYWNyb2Vjb27DtG1pY29zIGdsb2JhaXMgY29tdW5zLiBPdSBzZWphLCBxdWFuZG8gaMOhIHZhbG9yaXphw6fDo28gZW0gdW0gZGVzc2VzIG1lcmNhZG9zLCDDqSBwcm92w6F2ZWwgcXVlIGFzIGRlbWFpcyBjb21tb2RpdGllcyB0YW1iw6ltIHNlIGFwcmVjaWVtLg0KDQpFc3NhIGZvcnRlIGludGVyZGVwZW5kw6puY2lhIHJlZm9yw6dhIGEgdnVsbmVyYWJpbGlkYWRlIGRhIHBhdXRhIGV4cG9ydGFkb3JhIGJyYXNpbGVpcmEsIHVtYSB2ZXogcXVlIGNob3F1ZXMgbmVnYXRpdm9zIG5vcyBwcmXDp29zIGludGVybmFjaW9uYWlzIGFmZXRhbSBzaW11bHRhbmVhbWVudGUgZGl2ZXJzb3Mgc2V0b3JlcyBlc3RyYXTDqWdpY29zDQoNCkFwZXNhciBkZSBleGlzdGlyZW0gc2l0dWHDp8O1ZXMgZm9yYSBkYSBjdXJ2YSBjb21vIGrDoSBhYm9yZGFkYXMgbmEgYW7DoWxpc2UgZG8gZ3LDoWZpY28gZGUgVmFyaWHDp8OjbyBQZXJjZW50dWFsIEFudWFsIGRvcyBQcmXDp29zLCB0YWwgY29ycmVsYcOnw6NvIGZhdm9yw6F2ZWwgZW50cmUgdG9kb3Mgb3MgcHJvZHV0b3MgcG9zc2liaWxpdG91IHJlYWxpemFyIHVtYSBhbsOhbGlzZSBjb25qdW50YSB1c2FuZG8gbyBwcmXDp28gZGFzIDMgY29tbW9kaXRpZXMgZW0gdW0gcHJlw6dvIHBvbmRlcmFkbywgc2VuZG8gY2FsY3VsYWRvIGEgcGFydGlyIGRhIHBhcnRpY2lwYcOnw6NvIGRlIGNhZGEgcHJvZHV0byBuYXMgZXhwb3J0YcOnw7VlcyB0b3RhaXMgZGEgYmFsYW7Dp2EgYW8gbG9uZ28gZG9zIGFub3MsIGRhZG9zIGVzc2VzIHByZXNlbnRlcyBubyBwcmltZWlybyBncsOhZmljbyBhcHJlc2VudGFkby4NCg0KICoqRVNDQUxBIERFIENPUlJFTEHDh8ODTyBERSBQRUFSU09OOioqDQoNCmBgYA0KUEVSRkVJVEEgICAgICDilojilojilojilojilojilojilojilojilojiloggMC45MCAtIDEuMDAgIOKGkiBNb3ZlbS1zZSBqdW50YXMNCg0KTVVJVE8gRk9SVEUgICDilojilojilojilojilojilojilojilojilpHilpEgMC43MCAtIDAuODkgIOKGkiBBbHRhIHNpbmNyb25pemHDp8OjbyANCg0KRk9SVEUgICAgICAgICDilojilojilojilojilojilojilpHilpHilpHilpEgMC41MCAtIDAuNjkgIOKGkiBTaW5jcm9uaXphw6fDo28gc2lnbmlmaWNhdGl2YQ0KDQpNT0RFUkFEQSAgICAgIOKWiOKWiOKWiOKWiOKWkeKWkeKWkeKWkeKWkeKWkSAwLjMwIC0gMC40OSAg4oaSIFJlbGHDp8OjbyBwZXJjZXB0w612ZWwNCg0KRlJBQ0EgICAgICAgICDilojilojilpHilpHilpHilpHilpHilpHilpHilpEgMC4xMCAtIDAuMjkgIOKGkiBQb3VjYSByZWxhw6fDo28NCg0KTlVMQSAgICAgICAgICDilpHilpHilpHilpHilpHilpHilpHilpHilpHilpEgMC4wMCAtIDAuMDkgIOKGkiBJbmRlcGVuZGVudGVzDQpgYGANCg0KIyMgKkPDs2RpZ28gZGEgQ29ycmVsYcOnw6NvKg0KDQpgYGB7ciwgZWNobz1UUlVFfQ0KZGFkb3NfY29ycmVsYWNhbyA8LSBkYWRvc19wcmVjbyAlPiUNCiAgc2VsZWN0KEFubywgQ29tbW9kaXR5LCBQcmXDp28pICU+JQ0KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gQ29tbW9kaXR5LCB2YWx1ZXNfZnJvbSA9IFByZcOnbykgJT4lDQogIHNlbGVjdCgtQW5vKQ0KbWF0cml6X2NvciA8LSBjb3IoZGFkb3NfY29ycmVsYWNhbywgdXNlID0gImNvbXBsZXRlLm9icyIpDQphbmFsaXNlX2NvcnJlbGFjYW8gPC0gYXMuZGF0YS5mcmFtZShhcy50YWJsZShtYXRyaXpfY29yKSkgJT4lDQogIHJlbmFtZShDb21tb2RpdHkxID0gVmFyMSwgQ29tbW9kaXR5MiA9IFZhcjIsIENvcnJlbGFjYW8gPSBGcmVxKSAlPiUNCiAgZmlsdGVyKENvbW1vZGl0eTEgIT0gQ29tbW9kaXR5MikgJT4lDQogIHJvd3dpc2UoKSAlPiUNCiAgbXV0YXRlKFBhciA9IHBhc3RlKHNvcnQoYyhDb21tb2RpdHkxLCBDb21tb2RpdHkyKSksIGNvbGxhcHNlID0gIiB2cyAiKSkgJT4lDQogIGRpc3RpbmN0KFBhciwgLmtlZXBfYWxsID0gVFJVRSkgJT4lDQogIHVuZ3JvdXAoKSAlPiUNCiAgYXJyYW5nZShkZXNjKENvcnJlbGFjYW8pKQ0KaGlnaGNoYXJ0KCkgJT4lDQogIGhjX2NoYXJ0KHR5cGUgPSAiY29sdW1uIikgJT4lDQogIGhjX3RpdGxlKHRleHQgPSAiQ29ycmVsYcOnw6NvIGVudHJlIGFzIENvbW1vZGl0aWVzIikgJT4lDQogIGhjX3hBeGlzKGNhdGVnb3JpZXMgPSBhbmFsaXNlX2NvcnJlbGFjYW8kUGFyKSAlPiUNCiAgaGNfeUF4aXMoDQogICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiQ29lZmljaWVudGUgZGUgQ29ycmVsYcOnw6NvIiksDQogICAgbWluID0gLTEsDQogICAgbWF4ID0gMQ0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBhbmFsaXNlX2NvcnJlbGFjYW8kQ29ycmVsYWNhbywNCiAgICBuYW1lID0gIkNvcnJlbGHDp8OjbyIsDQogICAgY29sb3JCeVBvaW50ID0gVFJVRSwNCiAgICBjb2xvcnMgPSBjKCIjMDIwMjNjIiwgIiMwMjAyM2MiLCAiI2ZlYjcxMiIpDQogICkgJT4lDQogIGhjX3Rvb2x0aXAoDQogICAgcG9pbnRGb3JtYXQgPSAiPGI+e3BvaW50LmNhdGVnb3J5fTwvYj48YnI+Q29ycmVsYcOnw6NvOiA8Yj57cG9pbnQueTouM2Z9PC9iPiINCiAgKSAlPiUNCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgY29sdW1uID0gbGlzdCgNCiAgICAgIGRhdGFMYWJlbHMgPSBsaXN0KA0KICAgICAgICBlbmFibGVkID0gVFJVRSwNCiAgICAgICAgZm9ybWF0ID0gIntwb2ludC55Oi4yZn0iLA0KICAgICAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTJweCIsIGZvbnRXZWlnaHQgPSAiYm9sZCIpDQogICAgICApDQogICAgKQ0KICApDQpgYGANCg0KIyMgKkV4cGxpY2HDp8OjbyBlIEPDoWxjdWxvIGRvIFByZcOnbyBQb25kZXJhZG8qDQoNCk5vcyDDumx0aW1vcyAyIGdyw6FmaWNvcyBzZXLDoSB1dGlsaXphZG8gdW0gcHJlw6dvIHBvbmRlcmFkbyBkYXMgMyBjb21tb2RpdGllcyBqdW50YXMgYW8gbG9uZ28gZG9zIGFub3MsIHNlbmRvIGJhc2ljYW1lbnRlIHVtYSBtw6lkaWEgZGUgcHJlw6dvIHF1ZSBjb25zaWRlcmEgbyBwZXNvIHJlYWwgZGUgY2FkYSBjb21tb2RpdHkgbmFzIGV4cG9ydGHDp8O1ZXMgdG90YWlzIGVtIGNhZGEgYW5vLCBhdHJhdsOpcyBkaXNzbyBzZXLDoSBwb3Nzw612ZWwgcmVhbGl6YXIgdW1hIGFuw6FsaXNlIG1haXMgZGV0YWxoYWRhIGUgZmllbCBkbyByZWFsIGltcGFjdG8gZGVzc2VzIDMgcHJvZHV0b3MgbmFzIGV4cG9ydGHDp8O1ZXMgZSBubyBzYWxkbyBjb21lcmNpYWwuDQogDQpQYXJ0aWNpcGHDp8OjbyBuYSBleHBvcnRhw6fDo28gdG90YWwgPSBFeHBvcnRhw6fDtWVzIGRhIGNvbW1vZGl0eSAvIEV4cG9ydGHDp8O1ZXMgdG90YWlzDQoNClByZcOnbyBQb25kZXJhZG8gQW51YWwgPSDOoyBQcmXDp28gZGEgY29tbW9kaXR5IChVUyQvdCkgw5cgUGFydGljaXBhw6fDo28gbmEgZXhwb3J0YcOnw6NvIHRvdGFsIChQZXNvL1BvbmRlcmHDp8OjbykNCg0KIyMgKkNvbXBhcmF0aXZvIGVudHJlIEV4cG9ydGHDp8O1ZXMgZSBQcmXDp28gUG9uZGVyYWRvIFJlYWwqDQoNCmBgYHtyfQ0KZGFkb3NfcXVhbnRpZGFkZV90b3RhbCA8LSBkYWRvc19xdGRlICU+JQ0KICBsZWZ0X2pvaW4oZGFkb3NfYW5vX3ZhbG9yLCBieSA9IGMoIkFubyIsICJDb21tb2RpdHkiKSkgJT4lDQogIGdyb3VwX2J5KEFubykgJT4lDQogIHN1bW1hcmlzZShRdWFudGlkYWRlX1RvdGFsID0gc3VtKFF0ZGUsIG5hLnJtID0gVFJVRSkpICU+JQ0KICBtdXRhdGUoDQogICAgRGF0YSA9IGFzLkRhdGUocGFzdGUwKEFubywgIi0wMS0wMSIpKSwNCiAgICB0aW1lc3RhbXAgPSBkYXRldGltZV90b190aW1lc3RhbXAoRGF0YSkNCiAgKQ0KDQpkYWRvc19leHBvcnRfc3RvY2sgPC0gdG90YWlzX2FudWFpcyAlPiUNCiAgbXV0YXRlKEFubyA9IHllYXIoRGF0YV9TdG9jaykpICU+JQ0KICBzZWxlY3QoQW5vLCBFeHBvcnRhY2FvX1RvdGFsID0gRXhwb3J0YcOnw7VlcykgJT4lDQogIGxlZnRfam9pbigNCiAgICBkYWRvc19wcmVjbyAlPiUNCiAgICAgIGxlZnRfam9pbihkYWRvc19hbm9fdmFsb3IsIGJ5ID0gYygiQW5vIiwgIkNvbW1vZGl0eSIpKSAlPiUNCiAgICAgIGxlZnRfam9pbih0b3RhaXNfYW51YWlzICU+JSBtdXRhdGUoQW5vID0geWVhcihEYXRhX1N0b2NrKSkgJT4lIHNlbGVjdChBbm8sIEV4cF9Ub3RhbCA9IEV4cG9ydGHDp8O1ZXMpLCBieSA9ICJBbm8iKSAlPiUNCiAgICAgIG11dGF0ZShQYXJ0aWNpcGFjYW9fUmVhbCA9IFZhbG9yIC8gRXhwX1RvdGFsKSAlPiUNCiAgICAgIGdyb3VwX2J5KEFubykgJT4lDQogICAgICBzdW1tYXJpc2UoDQogICAgICAgIFByZcOnb19Qb25kZXJhZG8gPSB3ZWlnaHRlZC5tZWFuKFByZcOnbywgdyA9IFBhcnRpY2lwYWNhb19SZWFsLCBuYS5ybSA9IFRSVUUpDQogICAgICApLA0KICAgIGJ5ID0gIkFubyINCiAgKSAlPiUNCiAgbGVmdF9qb2luKA0KICAgIGRhZG9zX3F0ZGUgJT4lDQogICAgICBncm91cF9ieShBbm8pICU+JQ0KICAgICAgc3VtbWFyaXNlKFF1YW50aWRhZGVfVG90YWwgPSBzdW0oUXRkZSwgbmEucm0gPSBUUlVFKSksDQogICAgYnkgPSAiQW5vIg0KICApICU+JQ0KICBtdXRhdGUoRGF0YSA9IGFzLkRhdGUocGFzdGUwKEFubywgIi0wMS0wMSIpKSwgdGltZXN0YW1wID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKERhdGEpKSAlPiUNCiAgYXJyYW5nZShEYXRhKQ0KDQpoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19leHBvcnRfc3RvY2sgJT4lIHNlbGVjdCh0aW1lc3RhbXAsIEV4cG9ydGFjYW9fVG90YWwpKSwNCiAgICB0eXBlID0gImNvbHVtbiIsIG5hbWUgPSAiRXhwb3J0YcOnw7VlcyBUb3RhaXMgQnJhc2lsIChVUyQgYmkpIiwgY29sb3IgPSAiIzAyMDIzYyIsIHlBeGlzID0gMCwgIA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAwLCB2YWx1ZVByZWZpeCA9ICJVUyQgIiwgdmFsdWVTdWZmaXggPSAiIGJpIikNCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3NfZXhwb3J0X3N0b2NrICU+JSBzZWxlY3QodGltZXN0YW1wLCBQcmXDp29fUG9uZGVyYWRvKSksDQogICAgdHlwZSA9ICJsaW5lIiwgbmFtZSA9ICJQcmXDp28gUG9uZGVyYWRvIChVUyQvdCkiLCBjb2xvciA9ICIjZmViNzEyIiwgbGluZVdpZHRoID0gMiwgeUF4aXMgPSAxLCAgDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDAsIHZhbHVlUHJlZml4ID0gIlVTJCAiLCB2YWx1ZVN1ZmZpeCA9ICIvdCIpDQogICkgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX2V4cG9ydF9zdG9jayAlPiUgc2VsZWN0KHRpbWVzdGFtcCwgUXVhbnRpZGFkZV9Ub3RhbCkpLA0KICAgIHR5cGUgPSAibGluZSIsIG5hbWUgPSAiUXVhbnRpZGFkZSBUb3RhbCAobWkgdCkiLCBjb2xvciA9ICIjNDZiMWUxIiwgbGluZVdpZHRoID0gMywgeUF4aXMgPSAyLCAgDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDAsIHZhbHVlU3VmZml4ID0gIiBtaSB0IikNCiAgKSAlPiUNCiAgaGNfeUF4aXNfbXVsdGlwbGVzKA0KICAgIGxpc3QodGl0bGUgPSBsaXN0KHRleHQgPSAiRXhwb3J0YcOnw7VlcyBUb3RhaXMgZG8gQnJhc2lsIChVUyQgYmkpIiksIG9wcG9zaXRlID0gRkFMU0UpLCAgDQogICAgbGlzdCh0aXRsZSA9IGxpc3QodGV4dCA9ICJQcmXDp28gUG9uZGVyYWRvIChVUyQvdCkiKSwgb3Bwb3NpdGUgPSBUUlVFKSwgDQogICAgbGlzdCh0aXRsZSA9IGxpc3QodGV4dCA9ICJRdWFudGlkYWRlIFRvdGFsIChtaSB0KSIpLCBvcHBvc2l0ZSA9IEZBTFNFLCAgDQogICAgICAgICBsYWJlbHMgPSBsaXN0KGZvcm1hdCA9ICJ7dmFsdWV9IG1pIHQiKSkNCiAgKSAlPiUNCiAgaGNfdGl0bGUodGV4dCA9ICJFeHBvcnRhw6fDtWVzIFRvdGFpcyBCcmFzaWwgdnMgUHJlw6dvIGUgUXVhbnRpZGFkZSIpICU+JSAgDQogIGhjX3N1YnRpdGxlKHRleHQgPSAiUmVsYcOnw6NvIGVudHJlIGV4cG9ydGHDp8O1ZXMgdG90YWlzIGUgaW5kaWNhZG9yZXMiKSAlPiUgIA0KICBoY19jcmVkaXRzKGVuYWJsZWQgPSBUUlVFLCB0ZXh0ID0gIkZvbnRlOiBNRElDIC0gTWluaXN0w6lyaW8gZG8gRGVzZW52b2x2aW1lbnRvLCBJbmTDunN0cmlhLCBDb23DqXJjaW8gZSBTZXJ2acOnb3MiKSAlPiUNCiAgaGNfcmFuZ2VTZWxlY3RvcihidXR0b25zID0gbGlzdChsaXN0KHR5cGUgPSAneWVhcicsIGNvdW50ID0gNSwgdGV4dCA9ICc1WScpLCBsaXN0KHR5cGUgPSAneWVhcicsIGNvdW50ID0gMTAsIHRleHQgPSAnMTBZJyksIGxpc3QodHlwZSA9ICdhbGwnLCB0ZXh0ID0gJ0FsbCcpKSkgJT4lDQogIGhjX3Rvb2x0aXAoc2hhcmVkID0gVFJVRSwgaGVhZGVyRm9ybWF0ID0gJzxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHgiPjxiPntwb2ludC5rZXk6JVl9PC9iPjwvc3Bhbj48YnIvPicpICU+JQ0KICBoY19sZWdlbmQoZW5hYmxlZCA9IFRSVUUsIGFsaWduID0gImNlbnRlciIsIHZlcnRpY2FsQWxpZ24gPSAiYm90dG9tIiwgbGF5b3V0ID0gImhvcml6b250YWwiKQ0KYGBgDQoNCk8gZ3LDoWZpY28gZXZpZGVuY2lhIGEgcmVsYcOnw6NvIGRpcmV0YSBlbnRyZSBvcyBwcmXDp29zIGludGVybmFjaW9uYWlzIGRhcyAzIGNvbW1vZGl0aWVzIChhZ29yYSBwb25kZXJhZG9zIGVtIHVtIHPDsyksIGEgcXVhbnRpZGFkZXMgdG90YWlzIGV4cG9ydGFkYXMgZW0gbWlsaMO1ZXMgZGUgdG9uZWxhZGFzIGUgbyBkZXNlbXBlbmhvIGV4cG9ydGFkb3IgYnJhc2lsZWlybywgb25kZSBvIHByZcOnbyBwb25kZXJhZG8gZSBhcyBleHBvcnRhw6fDtWVzIHRvdGFpcyBhcHJlc2VudGFtIGNvbXBvcnRhbWVudG8gc2VtZWxoYW50ZSBtb3N0cmFuZG8gYSBmb3LDp2EgZSBhIGluZmx1w6puY2lhIGRlc3NlcyAzIHByb2R1dG9zIG5hcyBleHBvcnRhw6fDtWVzIGJyYXNpbGVpcmFzIGFuYWxpc2FuZG8gc29tZW50ZSBwZWxhIMOzdGljYSBkbyBwcmXDp28uQSBxdWFudGlkYWRlIHRhbWLDqW0gZXZpZGVuY2lhIGEgaW1wb3J0w6JuY2lhIGRlc3NlcyAzIHByb2R1dG9zIG5vcyB0b3RhaXMgZXhwb3J0YWRvcyBkbyBwYcOtcywgdW1hIHZleiBxdWUgZW0gYWxndW5zIGFubyBkZSBiYWl4YSBkb3MgcHJlw6dvcyBhcyBleHBvcnRhw6fDtWVzIHNlIG1hbnRlcmFtIGdyYcOnYXMgYW8gYXVtZW50byBkYXMgcXVhbnRpZGFkZXMgZXhwb3J0YWRhcyBjb21vIGVtIDIwMjMgZSAyMDI0IHBvciBleGVtcGxvLg0KDQpFbSBwZXLDrW9kb3MgZGUgdmFsb3JpemHDp8OjbyBkYXMgY29tbW9kaXRpZXMsIGNvbW8gZW50cmUgMjAwNeKAkzIwMDggZSAyMDIx4oCTMjAyMiwgY29pbmNpZGVtIGNvbSBhdW1lbnRvcyBleHByZXNzaXZvcyBuYXMgZXhwb3J0YcOnw7VlcywgZW5xdWFudG8gZmFzZXMgZGUgcXVlZGEgZG9zIHByZcOnb3MsIGNvbW8gMjAxNOKAkzIwMTYsIHJlc3VsdGFtIGVtIHJldHJhw6fDo28gZG8gdmFsb3IgZXhwb3J0YWRvIGFwZXNhciBkbyBhdW1lbnRvIGRhIHF1YW50aWRhZGUgZXhwb3J0YWRhLiBJc3NvIGRlbW9uc3RyYSBxdWUgYXMgcmVjZWl0YXMgZXh0ZXJuYXMgZG8gcGHDrXMgc8OjbyBmb3J0ZW1lbnRlIGluZmx1ZW5jaWFkYXMgcGVsYXMgdmFyaWHDp8O1ZXMgZGUgcHJlw6dvcyBnbG9iYWlzIGVtIHByYXRpY2FtZW50ZSB0b2RvcyBvcyBhbm9zIGRhIGFuw6FsaXNlIGFwZW5hcyBub3Mgw7psdGltb3MgMiBhbm9zIHF1ZSBwb2RlLXNlIG9ic2VydmFyIHVtYSBjb25zdMOibmNpYSBubyB2YWxvciB0b3RhbCBleHBvcnRhZG8gZ3Jhw6dhcyBhbyBhdW1lbnRvIGRhcyBxdWFudGlkYWRlcy4NCg0KTm9zIGFub3MgcmVjZW50ZXMsIGFww7NzIG8gcGljbyBkZSAyMDIyLCBow6EgdW1hIGVzdGFiaWxpemHDp8OjbyBkb3MgcHJlw6dvcyBlIG1hbnV0ZW7Dp8OjbyBkYXMgZXhwb3J0YcOnw7VlcyBlbSBwYXRhbWFyIGVsZXZhZG8sIGluZGljYW5kbyByZWxhdGl2YSByZXNpbGnDqm5jaWEuIE5vIGVudGFudG8sIG8gZ3LDoWZpY28gcmVmb3LDp2EgYSBkZXBlbmTDqm5jaWEgZXN0cnV0dXJhbCBicmFzaWxlaXJhIGRlIGNvbW1vZGl0aWVzLCBvIHF1ZSB0b3JuYSBvIGNyZXNjaW1lbnRvIGVjb27DtG1pY28gdnVsbmVyw6F2ZWwgYSBjaG9xdWVzIGV4dGVybm9zLiBUYWwgZGluw6JtaWNhIHJlZmxldGUgYSByZXN0cmnDp8OjbyBleHRlcm5hIGFvIGNyZXNjaW1lbnRvLCBsaW1pdGFuZG8gbyBwb3RlbmNpYWwgZGUgZXhwYW5zw6NvIHN1c3RlbnTDoXZlbCBkYSBlY29ub21pYS4NCg0KQXBlc2FyIGRlIGFpbmRhIG7Do28gdGVyIHRlcm1pbmFkbyBhIHRlbmTDqm5jaWEgcGFyYSAyMDI1IMOpIGNvbnRpbnVhciBhIHJlZHXDp8OjbyB0YW50byBkbyBwcmXDp28sIHF1YW50aWRhZGUgZSBleHBvcnRhw6fDtWVzLCBpbmRpY2FuZG8gbWFpcyB1bWEgdmV6IGFxdWVsZSBjZW7DoXJpbyBkZSBkZXNhY2VsYXJhw6fDo28gZWNvbsO0bWljYSBnbG9iYWwNCg0KIyMgKkltcGFjdG8gZG9zIFByZcOnb3MgZGFzIENvbW1vZGl0aWVzIG5vIFNhbGRvIENvbWVyY2lhbCoNCg0KYGBge3J9DQpkYWRvc19pbXBhY3RvX3N0b2NrIDwtIHRvdGFpc19hbnVhaXMgJT4lDQogIG11dGF0ZShBbm8gPSB5ZWFyKERhdGFfU3RvY2spKSAlPiUNCiAgc2VsZWN0KEFubywgU2FsZG8sIEltcG9ydGFjb2VzID0gSW1wb3J0YcOnw7VlcykgJT4lDQogIGxlZnRfam9pbigNCiAgICBkYWRvc19wcmVjbyAlPiUNCiAgICAgIGxlZnRfam9pbihkYWRvc19hbm9fdmFsb3IsIGJ5ID0gYygiQW5vIiwgIkNvbW1vZGl0eSIpKSAlPiUNCiAgICAgIGxlZnRfam9pbih0b3RhaXNfYW51YWlzICU+JSBtdXRhdGUoQW5vID0geWVhcihEYXRhX1N0b2NrKSkgJT4lIHNlbGVjdChBbm8sIEV4cF9Ub3RhbCA9IEV4cG9ydGHDp8O1ZXMpLCBieSA9ICJBbm8iKSAlPiUNCiAgICAgIG11dGF0ZShQYXJ0aWNpcGFjYW9fUmVhbCA9IFZhbG9yIC8gRXhwX1RvdGFsKSAlPiUNCiAgICAgIGdyb3VwX2J5KEFubykgJT4lDQogICAgICBzdW1tYXJpc2UoUHJlw6dvX1BvbmRlcmFkbyA9IHdlaWdodGVkLm1lYW4oUHJlw6dvLCB3ID0gUGFydGljaXBhY2FvX1JlYWwsIG5hLnJtID0gVFJVRSkpLA0KICAgIGJ5ID0gIkFubyINCiAgKSAlPiUNCiAgbXV0YXRlKERhdGEgPSBhcy5EYXRlKHBhc3RlMChBbm8sICItMDEtMDEiKSksIHRpbWVzdGFtcCA9IGRhdGV0aW1lX3RvX3RpbWVzdGFtcChEYXRhKSkgJT4lDQogIGFycmFuZ2UoRGF0YSkNCg0KaGlnaGNoYXJ0KHR5cGUgPSAic3RvY2siKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3NfaW1wYWN0b19zdG9jayAlPiUgc2VsZWN0KHRpbWVzdGFtcCwgU2FsZG8pKSwNCiAgICB0eXBlID0gImNvbHVtbiIsIG5hbWUgPSAiU2FsZG8gQ29tZXJjaWFsIChVUyQgYmkpIiwgY29sb3IgPSAiIzAyMDIzYyIsIGxpbmVXaWR0aCA9IDIsIHlBeGlzID0gMCwNCiAgICB0b29sdGlwID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMCwgdmFsdWVQcmVmaXggPSAiVVMkICIsIHZhbHVlU3VmZml4ID0gIiBiaSIpDQogICkgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX2ltcGFjdG9fc3RvY2sgJT4lIHNlbGVjdCh0aW1lc3RhbXAsIEltcG9ydGFjb2VzKSksDQogICAgdHlwZSA9ICJsaW5lIiwgbmFtZSA9ICJJbXBvcnRhw6fDtWVzIChVUyQgYmkpIiwgY29sb3IgPSAiIzQ2YjFlMSIsIGxpbmVXaWR0aCA9IDMsIHlBeGlzID0gMCwNCiAgICB0b29sdGlwID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMCwgdmFsdWVQcmVmaXggPSAiVVMkICIsIHZhbHVlU3VmZml4ID0gIiBiaSIpDQogICkgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX2ltcGFjdG9fc3RvY2sgJT4lIHNlbGVjdCh0aW1lc3RhbXAsIFByZcOnb19Qb25kZXJhZG8pKSwNCiAgICB0eXBlID0gImxpbmUiLCBuYW1lID0gIlByZcOnbyBQb25kZXJhZG8gKFVTJC90KSIsIGNvbG9yID0gIiNmZWI3MTIiLCBsaW5lV2lkdGggPSAyLCB5QXhpcyA9IDEsDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDAsIHZhbHVlUHJlZml4ID0gIlVTJCAiLCB2YWx1ZVN1ZmZpeCA9ICIvdCIpDQogICkgJT4lDQogIGhjX3lBeGlzX211bHRpcGxlcygNCiAgICBsaXN0KHRpdGxlID0gbGlzdCh0ZXh0ID0gIlNhbGRvIGUgSW1wb3J0YcOnw7VlcyAoVVMkIGJpKSIpLCBvcHBvc2l0ZSA9IEZBTFNFKSwNCiAgICBsaXN0KHRpdGxlID0gbGlzdCh0ZXh0ID0gIlByZcOnbyBQb25kZXJhZG8gKFVTJC90KSIpLCBvcHBvc2l0ZSA9IFRSVUUpDQogICkgJT4lDQogIGhjX3RpdGxlKHRleHQgPSAiUmVsYcOnw6NvOiBQcmXDp29zIGRhcyBDb21tb2RpdGllcyB2cyBCYWxhbsOnYSBDb21lcmNpYWwiKSAlPiUNCiAgaGNfc3VidGl0bGUodGV4dCA9ICJJbXBhY3RvIGRvcyBwcmXDp29zIG5vIHNhbGRvIGNvbWVyY2lhbCBlIGltcG9ydGHDp8O1ZXMgYnJhc2lsZWlyYXMiKSAlPiUNCiAgaGNfY3JlZGl0cyhlbmFibGVkID0gVFJVRSwgdGV4dCA9ICJGb250ZTogTURJQyAtIE1pbmlzdMOpcmlvIGRvIERlc2Vudm9sdmltZW50bywgSW5kw7pzdHJpYSwgQ29tw6lyY2lvIGUgU2VydmnDp29zIikgJT4lDQogIGhjX3JhbmdlU2VsZWN0b3IoYnV0dG9ucyA9IGxpc3QobGlzdCh0eXBlID0gJ3llYXInLCBjb3VudCA9IDUsIHRleHQgPSAnNVknKSwgbGlzdCh0eXBlID0gJ3llYXInLCBjb3VudCA9IDEwLCB0ZXh0ID0gJzEwWScpLCBsaXN0KHR5cGUgPSAnYWxsJywgdGV4dCA9ICdBbGwnKSkpICU+JQ0KICBoY190b29sdGlwKHNoYXJlZCA9IFRSVUUsIGhlYWRlckZvcm1hdCA9ICc8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMnB4Ij48Yj57cG9pbnQua2V5OiVZfTwvYj48L3NwYW4+PGJyLz4nKSAlPiUNCiAgaGNfbGVnZW5kKGVuYWJsZWQgPSBUUlVFLCBhbGlnbiA9ICJjZW50ZXIiLCB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSIsIGxheW91dCA9ICJob3Jpem9udGFsIikNCmBgYA0KDQpPIGdyw6FmaWNvIGFjaW1hIG1vc3RyYSBhIHJlbGHDp8OjbyBlbnRyZSBvcyBwcmXDp29zIGRhcyBjb21tb2RpdGllcyBlIG8gZGVzZW1wZW5obyBkbyBzYWxkbyBjb21lcmNpYWwgZG8gQnJhc2lsIGVudHJlIDIwMDUgZSAyMDI1Lg0KDQpWYWxlIHJlc3NhbHRhciBxdWUgZGlmZXJlbnRlbWVudGUgZG8gw7psdGltbyBncsOhZmljbywgcGFyYSBzZSBhbmFsaXNhciBvIHNhbGRvIMOpIG5lY2Vzc8OhcmlvIGFkaWNpb25hciBuw6NvIHNvbWVudGUgYXMgZXhwb3J0YcOnw7VlcyBqw6EgYW5hbGlzYWRhcyBtYXMgYXMgaW1wb3J0YcOnw7VlcyB0YW1iw6ltLiBEZSBmb3JtYSBjb250csOhcmlhIGFzIGV4cG9ydGHDp8O1ZXMgdG90YWlzIGFvIHNlIGFuYWxpc2FyIHNvbWVudGUgbyBzYWxkbyBjb20gbyBwcmXDp28gcG9uZGVyYWRvLCBuw6NvIHNlIG9ic2VydmEgdW1hIHJlbGHDp8OjbyBwYXJlY2lkYSBlbnRyZSBleHBvcnRhw6fDtWVzIGUgbyBwcmXDp28sIGp1c3RhbWVudGUgcGVsYXMgaW1wb3J0YcOnw7VlcyBlIG91dHJvcyBmYXRvcmVzIGV4dGVybm9zIG1vbmV0w6FyaW9zIGUgY2FtYmlhaXMgYWzDqW0gZGUgYmFycmVpcmFzIGNvbWVyY2lhaXMgaW1wYWN0YXJlbSBvIHZhbG9yIGRvIHNhbGRvIGZpbmFsLCBtb3N0cmFuZG8gdW1hIGdyYW5kZSB2YXJpYcOnw6NvIG1vc3RyYW5kbyBxdWUgc2UgY2FzbyBvIHByZcOnbyBhdW1lbnRlIG91IGRpbWludWEsIG7Do28gbmVjZXNzYXJpYW1lbnRlIG8gc2FsZG8gaXLDoSBzZWd1aXIgZXNzZSBwYWRyw6NvLiBJc3NvIMOpIGV2aWRlbnRlIGVtIDIwMjMgcG9yIGV4ZW1wbG8gb25kZSBob3V2ZSB1bWEgcmVkdcOnw6NvIGNvbnNpZGVyw6F2ZWwgbm8gcHJlw6dvLCBlIG8gc2FsZG8gc2FpdSBkZSA2MSBiaWxow7VlcyBVUyQgcGFyYSBxdWFzZSA5OSBiaWxow7VlcyBVUyQsIG11aXRvIHBvciBjb250YSBkYXMgaW1wb3J0YcOnw7VlcyBxdWUgdGFtYsOpbSBjYcOtcmFtIGp1bnRvIGNvbSBvIHByZcOnby4NCg0KTm9zIHBlcsOtb2RvcyBkZSB2YWxvcml6YcOnw6NvIGRhcyBjb21tb2RpdGllcywgZXNwZWNpYWxtZW50ZSBlbnRyZSAyMDA3IGUgMjAxMSBlIG5vdmFtZW50ZSBlbSAyMDIxIGUgMjAyMiwgb2JzZXJ2YS1zZSB1bSBjcmVzY2ltZW50byBleHByZXNzaXZvIGRhcyBleHBvcnRhw6fDtWVzLCBhY29tcGFuaGFkbyBwZWxhIGV4cGFuc8OjbyBkbyBzYWxkbyBjb21lcmNpYWwgcG9zaXRpdm8uIEVtIGNvbnRyYXBhcnRpZGEsIG5hcyBmYXNlcyBkZSBxdWVkYSBkZSBwcmXDp29zLCBjb21vIGVtIDIwMTQgZSAyMDE2LCBvIHNhbGRvIGNvbWVyY2lhbCBzZSByZWR1eiBzaWduaWZpY2F0aXZhbWVudGUsIGFpbmRhIHF1ZSBhcyBpbXBvcnRhw6fDtWVzIHRhbWLDqW0gZGVzYWNlbGVyYW0uIElzc28gaW5kaWNhIHF1ZSBhIGRldGVyaW9yYcOnw6NvIGRvcyB0ZXJtb3MgZGUgdHJvY2EgYWZldGEgZGlyZXRhbWVudGUgYSBjYXBhY2lkYWRlIGRlIGdlcmHDp8OjbyBkZSBkaXZpc2FzIGRvIHBhw61zLiANCg0KIyMgQ29uY2x1c8Ojbw0KDQpPcyByZXN1bHRhZG9zIG9idGlkb3MgbmVzdGUgcmVsYXTDs3JpbyBpbmRpY2FtIHF1ZSBhIGVzdHJ1dHVyYSBleHBvcnRhZG9yYSBicmFzaWxlaXJhIHBlcm1hbmVjZSBmb3J0ZW1lbnRlIGRlcGVuZGVudGUgZGUgcHJvZHV0b3MgcHJpbcOhcmlvcywgbyBxdWUgZXZpZGVuY2lhIGEgcGVyc2lzdMOqbmNpYSBkZSB1bSBwYWRyw6NvIGRlIGVzcGVjaWFsaXphw6fDo28gcHJvZHV0aXZhIGJhc2VhZG8gZW0gYmVucyBkZSBiYWl4byB2YWxvciBhZ3JlZ2Fkby4gRXNzYSBjb25maWd1cmHDp8OjbyBhY2VudHVhIGEgdnVsbmVyYWJpbGlkYWRlIGV4dGVybmEgZGEgZWNvbm9taWEgbmFjaW9uYWwsIHRvcm5hbmRvIG8gZGVzZW1wZW5obyBjb21lcmNpYWwgZSBvIGNyZXNjaW1lbnRvIGVjb27DtG1pY28gY29uZGljaW9uYWRvcyBhIGZhdG9yZXMgZXjDs2dlbm9zLCBjb21vIGEgdmFyaWHDp8OjbyBkb3MgcHJlw6dvcyBpbnRlcm5hY2lvbmFpcyBlIGEgZGluw6JtaWNhIGRhIGRlbWFuZGEgZ2xvYmFsLiBBbMOpbSBkaXNzbywgYSBhcGxpY2HDp8OjbyBkbyBtb2RlbG8gZGUgcmVzdHJpw6fDo28gZXh0ZXJuYSBhbyBjcmVzY2ltZW50byByZXZlbG91IHF1ZSBvIEJyYXNpbCBlbmZyZW50YSB1bSB0cmFkZS1vZmYgZXN0cnV0dXJhbCBlbnRyZSBleHBhbnPDo28gZG8gcHJvZHV0byBpbnRlcm5vIGUgZXF1aWzDrWJyaW8gZG8gc2V0b3IgZXh0ZXJuby4gTyBhdW1lbnRvIGRvIFBJQiwgYW8gZWxldmFyIGEgZGVtYW5kYSBwb3IgaW1wb3J0YcOnw7Vlcywgb25kZSBhIGVsYXN0aWNpZGFkZS1yZW5kYSDDqSBzdXBlcmlvciBhIHVtLCBpbXDDtWUgYSBuZWNlc3NpZGFkZSBkZSBkZXN2YWxvcml6YcOnw7VlcyBjYW1iaWFpcyBwYXJhIG1hbnV0ZW7Dp8OjbyBkbyBzYWxkbyBjb21lcmNpYWwsIGltcGxpY2FuZG8gY3VzdG9zIGluZmxhY2lvbsOhcmlvcyBlIHJlZGlzdHJpYnV0aXZvcy4gVGFsIHJlc3VsdGFkbyByZWZvcsOnYSBhIHRlc2UgZGUgcXVlIG8gY3Jlc2NpbWVudG8gYnJhc2lsZWlybyBlbmNvbnRyYS1zZSBsaW1pdGFkbyBuw6NvIGFwZW5hcyBwb3IgY2hvcXVlcyBjb25qdW50dXJhaXMsIG1hcyBwb3IgY29uZGljaW9uYW50ZXMgZXN0cnV0dXJhaXMgZGUgc3VhIGluc2Vyw6fDo28gaW50ZXJuYWNpb25hbC4NCg0KQXMgYW7DoWxpc2VzIGVtcMOtcmljYXMgZSBncsOhZmljYXMgY29ycm9ib3JhcmFtIGVzc2UgZGlhZ27Ds3N0aWNvLCBhbyBldmlkZW5jaWFyIGFzIGNvcnJlbGHDp8O1ZXMgcG9zaXRpdmFzIGVudHJlIG9zIHByZcOnb3MgZGFzIGNvbW1vZGl0aWVzIGUgbyBkZXNlbXBlbmhvIGRhIGJhbGFuw6dhIGNvbWVyY2lhbCwgYmVtIGNvbW8gYSBuYXR1cmV6YSBpbnRlcm1pdGVudGUgZGEgcmVsYcOnw6NvIGVudHJlIGPDom1iaW8sIGV4cG9ydGHDp8O1ZXMgZSBjcmVzY2ltZW50by4gRGVzc2EgZm9ybWEsIG8gZGVzZW1wZW5obyBleHRlcm5vIGRvIHBhw61zIHRlbSBzZSBtb3N0cmFkbyBtYWlzIHNlbnPDrXZlbCDDoCBwcmVjaWZpY2HDp8OjbyBpbnRlcm5hY2lvbmFsIGRvIHF1ZSBhIGdhbmhvcyBkZSBwcm9kdXRpdmlkYWRlLCBvIHF1ZSBleHBsaWNhIGEgdm9sYXRpbGlkYWRlIGRhIGJhbGFuw6dhIGUgYSByZWNvcnLDqm5jaWEgZGUgZXBpc8OzZGlvcyBkZSByZXN0cmnDp8OjbyBleHRlcm5hLg0KDQojIyBSZWZlcsOqbmNpYXMNCg0KLSAgIEJBUkJPU0EtRklMSE8sIE5lbHNvbiBILiBHcm93dGgsIGV4Y2hhbmdlIHJhdGVzIGFuZCB0cmFkZSBpbiBCcmF6aWw6IGEgc3RydWN0dXJhbGlzdCBwb3N0LUtleW5lc2lhbiBhcHByb2FjaC4gTm92YSBFY29ub21pYSwgQmVsbyBIb3Jpem9udGUsIHYuIDE0LCBuLiAyLCBwLiA1OeKAkzg2LCBtYWlvL2Fnby4gMjAwNC4gRGlzcG9uw612ZWwgZW06IDxodHRwczovL3d3dy5yZXNlYXJjaGdhdGUubmV0L3B1YmxpY2F0aW9uLzUyMDAxNzBfR3Jvd3RoX2V4Y2hhbmdlX3JhdGVzX2FuZF90cmFkZV9pbl9CcmF6aWxfYV9zdHJ1Y3R1cmFsaXN0X3Bvc3QtS2V5bmVzaWFuX2FwcHJvYWNoPiBBY2Vzc28gZW06IDUgb3V0LiAyMDI1Lg0KDQotICAgQk9ORUxMSSwgUmVnaXMuIFByb2R1dGl2aWRhZGUgZSBjcmVzY2ltZW50byBubyBCcmFzaWw6IG8gcXVlIChuw6NvKSBhcHJlbmRlbW9zIG5vcyBhbm9zIDE5OTAuIFRleHRvIHBhcmEgRGlzY3Vzc8OjbywgSW5zdGl0dXRvIGRlIFBlc3F1aXNhIEVjb27DtG1pY2EgQXBsaWNhZGEgKElQRUEpLCBuLiAxMDU5LCAyMDA1Lg0KDQotICAgQlJFU1NFUi1QRVJFSVJBLCBMdWl6IENhcmxvczsgR0FMQSwgUGF1bG8uIFBvciBxdWUgYSBwb3VwYW7Dp2EgZXh0ZXJuYSBuw6NvIHByb21vdmUgY3Jlc2NpbWVudG8uIFJldmlzdGEgZGUgRWNvbm9taWEgUG9sw610aWNhLCBTw6NvIFBhdWxvLCB2LiAyNywgbi4gMSwgcC4gM+KAkzE5LCBqYW4uL21hci4gMjAwNy4NCg0KLSAgIEJSQVNJTC4gTWluaXN0w6lyaW8gZG8gRGVzZW52b2x2aW1lbnRvLCBJbmTDunN0cmlhIGUgQ29tw6lyY2lvIEV4dGVyaW9yLiBTaXRlIGluc3RpdHVjaW9uYWwuIERpc3BvbsOtdmVsIGVtOiA8aHR0cHM6Ly93d3cuZ292LmJyL21kaWMvcHQtYnI+IEFjZXNzbyBlbTogNSBvdXQuIDIwMjUuDQoNCi0gICBDQVJORUlSTywgUmljYXJkby4gR2xvYmFsaXphw6fDo28gZSBpbnNlcsOnw6NvIGV4dGVybmE6IGEgZWNvbm9taWEgYnJhc2lsZWlyYSBub3MgYW5vcyAxOTkwLiBOb3ZvcyBFc3R1ZG9zIENFQlJBUCwgU8OjbyBQYXVsbywgbi4gODAsIHAuIDXigJMyOCwgbWFyLiAyMDA4Lg0KDQotICAgQ09SREVOLCBXLiBNLjsgTkVBUlksIEouIFAuIEJvb21pbmcgc2VjdG9yIGFuZCBkZS1pbmR1c3RyaWFsaXNhdGlvbiBpbiBhIHNtYWxsIG9wZW4gZWNvbm9teS4gVGhlIEVjb25vbWljIEpvdXJuYWwsIHYuIDkyLCBuLiAzNjgsIHAuIDgyNeKAkzg0OCwgMTk4Mi4NCg0KLSAgIEtSVUdNQU4sIFBhdWwuIEludGVybmF0aW9uYWwgZWNvbm9taWNzOiB0aGVvcnkgYW5kIHBvbGljeS4gNC4gZWQuIFJlYWRpbmcsIE1BOiBBZGRpc29uLVdlc2xleSwgMTk5OC4NCg0KLSAgIEtVUEZFUiwgRGF2aWQ7IFJPQ0hBLCBGZXJuYW5kby4gSW5kdXN0cmlhbGl6YcOnw6NvIG5vIEJyYXNpbDogZGEgc3Vic3RpdHVpw6fDo28gZGUgaW1wb3J0YcOnw7VlcyDDoCBnbG9iYWxpemHDp8Ojby4gUmlvIGRlIEphbmVpcm86IENhbXB1cywgMjAwOC4NCg0KLSAgIE1JTklTVMOJUklPIERPIERFU0VOVk9MVklNRU5UTywgSU5Ew5pTVFJJQSwgQ09Nw4lSQ0lPIEUgU0VSVknDh09TLiBCcmFzaWwgc2UgZGVzdGFjYSBjb20gcmVjb3JkZSBkZSBleHBvcnRhw6fDo28gZGUgVVNcJCAxODEsOSBiaWxow7VlcyBuYSBpbmTDunN0cmlhIGRlIHRyYW5zZm9ybWHDp8Ojby4gQnJhc8OtbGlhLCAyMDI1LiBEaXNwb27DrXZlbCBlbTogPGh0dHBzOi8vd3d3Lmdvdi5ici9tZGljL3B0LWJyL2Fzc3VudG9zL25vdGljaWFzLzIwMjUvamFuZWlyby9icmFzaWwtc2UtZGVzdGFjYS1jb20tcmVjb3JkZS1kZS1leHBvcnRhY2FvLWRlLXVzLTE4MS05LWJpbGhvZXMtbmEtaW5kdXN0cmlhLWRlLXRyYW5zZm9ybWFjYW8+IEFjZXNzbyBlbTogNSBvdXQuIDIwMjUuDQoNCi0gICBNSU5JU1TDiVJJTyBETyBERVNFTlZPTFZJTUVOVE8sIElORMOaU1RSSUEsIENPTcOJUkNJTyBFIFNFUlZJw4dPUy4gQmFsYW7Dp2EgY29tZXJjaWFsIGJyYXNpbGVpcmEg4oCTIHByaW5jaXBhaXMgcmVzdWx0YWRvcy4gRGlzcG9uw612ZWwgZW06IDxodHRwczovL2JhbGFuY2EuZWNvbm9taWEuZ292LmJyL2JhbGFuY2EvcGdfcHJpbmNpcGFsX2JjL3ByaW5jaXBhaXNfcmVzdWx0YWRvcy5odG1sPiBBY2Vzc28gZW06IDUgb3V0LiAyMDI1Lg0KDQotICAgTUlOSVNUw4lSSU8gRE8gREVTRU5WT0xWSU1FTlRPLCBJTkTDmlNUUklBLCBDT03DiVJDSU8gRSBTRVJWScOHT1MuIENvbWV4IFN0YXQuIERpc3BvbsOtdmVsIGVtOiA8aHR0cHM6Ly9jb21leHN0YXQubWRpYy5nb3YuYnIvcHQvaG9tZT4gQWNlc3NvIGVtOiA1IG91dC4gMjAyNS4NCg0KLSAgIE9SRUlSTywgSm9zw6kgTHVpczsgRkVJSsOTLCBDYXJtZW0gQXBhcmVjaWRhLiBEZXNpbmR1c3RyaWFsaXphw6fDo286IGNvbmNlaXR1YcOnw6NvLCBjYXVzYXMsIGVmZWl0b3MgZSBvIGNhc28gYnJhc2lsZWlyby4gUmV2aXN0YSBkZSBFY29ub21pYSBQb2zDrXRpY2EsIFPDo28gUGF1bG8sIHYuIDMwLCBuLiAyLCBwLiAyMTnigJMyMzIsIGFici4vanVuLiAyMDEwLg0KDQotICAgUFJBVEVTLCBEYW5pZWxhIE1hZ2FsaMOjZXMuIEFwcmVjaWHDp8OjbyBjYW1iaWFsIGUgZGVzaW5kdXN0cmlhbGl6YcOnw6NvIG5vIEJyYXNpbC4gUmV2aXN0YSBkZSBFY29ub21pYSBQb2zDrXRpY2EsIFPDo28gUGF1bG8sIHYuIDI3LCBuLiAxLCBwLiA0N+KAkzY1LCBqYW4uL21hci4gMjAwNy4NCg0KLSAgIFNJTU9OU0VOLCBNYXJpbyBIZW5yaXF1ZS4gQSBjb250YS1jb3JyZW50ZSBkbyBnb3Zlcm5vOiAxOTcw4oCTMTk4OC4gUmlvIGRlIEphbmVpcm86IEZ1bmRhw6fDo28gR2V0w7psaW8gVmFyZ2FzLCAxOTg5Lg0KDQotICAgQkFOQ08gQ0VOVFJBTCBETyBCUkFTSUwuIEVzdGF0w61zdGljYXMgZG8gc2V0b3IgZXh0ZXJubyDigJMgMjAyNS4gQnJhc8OtbGlhOiBCQ0IsIDIwMjUuIERpc3BvbsOtdmVsIGVtOiA8aHR0cHM6Ly93d3cuYmNiLmdvdi5ici9jb250ZW50L2VzdGF0aXN0aWNhcy9oaXN0X2VzdGF0aXN0aWNhc3NldG9yZXh0ZXJuby8yMDI1MDhfVGV4dG9fZGVfZXN0YXRpc3RpY2FzX2RvX3NldG9yX2V4dGVybm8ucGRmPiBBY2Vzc28gZW06IDUgb3V0LiAyMDI1Lg0KDQotICAgQkFOQ08gQ0VOVFJBTCBETyBCUkFTSUwuIFJlbGF0w7NyaW8gZGUgZ2VzdMOjbyBkYXMgcmVzZXJ2YXMgaW50ZXJuYWNpb25haXMg4oCTIDIwMjUuIEJyYXPDrWxpYTogQkNCLCAyMDI1LiBEaXNwb27DrXZlbCBlbTogPGh0dHBzOi8vd3d3LmJjYi5nb3YuYnIvY29udGVudC9wdWJsaWNhY29lcy9yZWxnZXN0YW9yZXNlcnZhcy9HRVNUQU9SRVNFUlZBUzIwMjUwMy1yZWxhdG9yaW9fYW51YWxfcmVzZXJ2YXNfaW50ZXJuYWNpb25haXNfMjAyNS5wZGY+IEFjZXNzbyBlbTogNSBvdXQuIDIwMjUuDQoNCi0gICBCQU5DTyBDRU5UUkFMIERPIEJSQVNJTC4gU8OpcmllcyB0ZW1wb3JhaXMg4oCTIFNldG9yIGV4dGVybm8uIERpc3BvbsOtdmVsIGVtOiA8aHR0cHM6Ly93d3czLmJjYi5nb3YuYnIvc2dzcHViL2xvY2FsaXphcnNlcmllcz4gQWNlc3NvIGVtOiA1IG91dC4gMjAyNS4NCg0KLSAgIEJOREVTIOKAkyBCYW5jbyBOYWNpb25hbCBkZSBEZXNlbnZvbHZpbWVudG8gRWNvbsO0bWljbyBlIFNvY2lhbC4gQmFsYW7Dp28gZGUgcGFnYW1lbnRvcyBkbyBCcmFzaWwuIFJpbyBkZSBKYW5laXJvOiBCTkRFUywgW3MuZC5dLiBEaXNwb27DrXZlbCBlbTogPGh0dHBzOi8vd2ViLmJuZGVzLmdvdi5ici9iaWIvanNwdWkvYml0c3RyZWFtLzE0MDgvMjgxNjcvMS9QUkZvbF8yMTY1OTFfQmFsYW4lQzMlQTdvJTIwZGUlMjBwYWdhbWVudG9zJTIwZG8lMjBCcmFzaWxfXy5wZGY+IEFjZXNzbyBlbTogNSBvdXQuIDIwMjUuDQoNCi0gICBGSVBFIOKAkyBGdW5kYcOnw6NvIEluc3RpdHV0byBkZSBQZXNxdWlzYXMgRWNvbsO0bWljYXMuIEJvbGV0aW0gSW5mb3JtYcOnw7VlcyBGSVBFLCBuLiA1MzQsIHAuIDM44oCTNDcsIDIwMjUuIERpc3BvbsOtdmVsIGVtOiA8aHR0cHM6Ly9kb3dubG9hZHMuZmlwZS5vcmcuYnIvcHVibGljYWNvZXMvYmlmL2JpZjUzNC5wZGY+IEFjZXNzbyBlbTogNSBvdXQuIDIwMjUuDQoNCi0gICBJUEVBIOKAkyBJbnN0aXR1dG8gZGUgUGVzcXVpc2EgRWNvbsO0bWljYSBBcGxpY2FkYS4gUHVibGljYcOnw6NvIHNvYnJlIG8gc2V0b3IgZXh0ZXJubyBicmFzaWxlaXJvLiBCcmFzw61saWE6IElQRUEsIFtzLmQuXS4gRGlzcG9uw612ZWwgZW06IDxodHRwczovL3JlcG9zaXRvcmlvLmlwZWEuZ292LmJyL3NlcnZlci9hcGkvY29yZS9iaXRzdHJlYW1zLzUwODc0ODUwLTE2MjUtNDY0Zi1hZGE5LTlhZWQ3YmI4ZjQ3My9jb250ZW50PiBBY2Vzc28gZW06IDUgb3V0LiAyMDI1Lg0KDQotICAgSVBFQSDigJMgSW5zdGl0dXRvIGRlIFBlc3F1aXNhIEVjb27DtG1pY2EgQXBsaWNhZGEuIFJlcG9zaXTDs3JpbyBpbnN0aXR1Y2lvbmFsIElQRUEuIERpc3BvbsOtdmVsIGVtOiA8aHR0cHM6Ly9yZXBvc2l0b3Jpby5pcGVhLmdvdi5icj4gQWNlc3NvIGVtOiA1IG91dC4gMjAyNS4gSVBFQURBVEEuIEJhc2UgZGUgZGFkb3MgbWFjcm9lY29uw7RtaWNvcy4gRGlzcG9uw612ZWwgZW06IDxodHRwczovL3d3dy5pcGVhZGF0YS5nb3YuYnI+LiBBY2Vzc28gZW06IDUgb3V0LiAyMDI1Lg0KDQotICAgUEFTU0VJIERJUkVUTy4gRWNvbm9taWEgSW50ZXJuYWNpb25hbCBJLiBNYXRlcmlhbCBjb21wYXJ0aWxoYWRvIHBvciB1c3XDoXJpby4gRGlzcG9uw612ZWwgZW06IDxodHRwczovL3d3dy5wYXNzZWlkaXJldG8uY29tL2FycXVpdm8vNzIyMTIzNTQvZWNvbm9taWEtaW50ZXJuYWNpb25hbC1pPiBBY2Vzc28gZW06IDUgb3V0LiAyMDI1LjcNCg0KLSAgIEZHViDigJMgRnVuZGHDp8OjbyBHZXR1bGlvIFZhcmdhcy4gUmVsYXTDs3JpbyBzb2JyZSBiYWxhbsOnbyBkZSBwYWdhbWVudG9zIGUgY29tw6lyY2lvIGV4dGVyaW9yLiBSaW8gZGUgSmFuZWlybzogRkdWLCBbcy5kLl0uIERpc3BvbsOtdmVsIGVtOiA8aHR0cHM6Ly9yZXBvc2l0b3Jpby5mZ3YuYnIvc2VydmVyL2FwaS9jb3JlL2JpdHN0cmVhbXMvZjc2YmI4ZGEtYTNjYS00Mzg5LWFkM2MtYTFjYTYzMjY5MzA3L2NvbnRlbnQ+IEFjZXNzbyBlbTogNSBvdXQuIDIwMjUuDQoNCg0KDQoNCg0KDQo=