Relatório Atividade Econômica - Resultado de 2025 e Previsão
para 2026
O relatório a seguir tem como objetivo analisar empiricamente o
resultado da Atividade Econômica em 2025, bem como as projeções para
esse ano de 2026.
Previsão para o ano de 2026
Para 2026, a projeção do PIB se aproxima de um cenário próximo de
1,7%, de acordo com o Boletim Focus e as maiores casas de análise —
abaixo dos 2% projetados para 2025 —, refletindo essa queda controlada
da economia. Esse movimento é também um reflexo da sinalização da última
reunião do Copom, que indicou um ciclo de cortes de juros ao longo do
ano, com a Selic devendo terminar entre 12% e 12,75% — um patamar
inferior ao recente, porém ainda muito restritivo. Na prática, isso
significa que, embora haja um alívio em relação aos 15% de 2025, o
crédito e o consumo das famílias devem continuar operando sob restrição,
ainda que em intensidade ligeiramente menor.
Esse cenário doméstico ocorre em meio a uma desaceleração da
atividade global. Conforme projeções da OCDE, a economia mundial tem
mostrado resiliência diante dos choques comerciais, com crescimento
estimado em 3,2% para 2025, impulsionado por políticas macroeconômicas
ainda favoráveis. No entanto, os impactos das tarifas implementadas
pelos Estados Unidos ainda não se materializaram por completo e tendem a
provocar uma desaceleração do crescimento global, que deve recuar para
2,9% em 2026.
Além disso, é importante considerar o componente político do ciclo
econômico brasileiro, uma vez que 2026 será um ano de eleições
presidenciais. Historicamente, períodos eleitorais costumam gerar maior
volatilidade macroeconômica e mudanças de expectativas por parte de
agentes econômicos e investidores. Um exemplo relevante ocorreu em 2014,
quando o ambiente eleitoral foi acompanhado por deterioração das
expectativas fiscais, aumento da incerteza política e redução do
investimento privado. Naquele período, a taxa de crescimento do PIB
desacelerou significativamente, passando de 3,0% em 2013 para apenas
0,5% em 2014, refletindo um cenário de incerteza econômica e ajuste de
expectativas.
Esse padrão histórico sugere que anos eleitorais tendem a
intensificar a cautela de empresas e investidores, especialmente em
economias emergentes como o Brasil, onde mudanças na condução da
política fiscal, monetária e regulatória podem alterar
significativamente as perspectivas econômicas. Dessa forma, ainda que a
política monetária esteja em trajetória de flexibilização moderada, a
proximidade do ciclo eleitoral de 2026 pode contribuir para manter o
ambiente de investimentos mais cauteloso, reforçando o cenário de
crescimento moderado projetado para o período
Atividade Econômica nos Setores
(Agropecuária/Indústria/Serviços)
Ao analisar os diferentes setores da economia, percebe-se o mesmo
padrão de crescimento seguido de desaceleração que marcou o IBC-Br e o
PIB ao longo do ano. As altas setoriais foram de 13,1% na agropecuária,
1,5% na indústria e 2,1% em serviços.
Apesar da desaceleração, o setor de serviços se manteve aquecido ao
longo do período, com uma inflação persistente que impediu um
crescimento ainda maior. Os serviços de informação e comunicação
avançaram 1,7%, enquanto aqueles prestados às famílias cresceram
1,1%.
O agronegócio permanece sendo um pilar fundamental para a economia do
país. Em um contexto de recuperação em culturas estratégicas, a safra de
grãos 2024/25 está estimada em 350 milhões de toneladas — um aumento de
16,3% em comparação à safra de 2023/24. O desempenho do setor tem efeito
direto sobre o PIB e a balança comercial, com o IBC-Br contribuindo para
a elaboração da política monetária ao servir como calibrador da Selic,
antecipador de tendências e termômetro do impacto de decisões
anteriores.
O setor industrial, por sua vez, pode apresentar desafios em 2026 se
tratando de transporte e logística, em razão de estoques elevados
decorrentes da demanda enfraquecida e de um câmbio médio especulado em
torno de R$ 5,50
Cenário do crédito de consumo na atividade econômica
brasileira
Cenário do crédito de consumo na atividade econômica brasileira
A dinâmica do crédito constitui um dos pilares da atividade econômica
no Brasil, funcionando como mecanismo relevante de amplificação da
demanda doméstica. Ao facilitar o acesso a financiamento para famílias e
empresas, o crédito sustenta o consumo, contribui para a expansão da
demanda agregada e influencia diretamente o ritmo de crescimento
econômico.
No caso das famílias, o crédito afeta diretamente a capacidade de
consumo ao permitir a antecipação de gastos futuros. Em períodos de
melhora do mercado de trabalho e aumento da renda, a expansão das
concessões tende a reforçar o crescimento da demanda doméstica. Em
momentos de desaceleração econômica, por outro lado, a retração do
crédito costuma intensificar a perda de dinamismo da atividade.
A análise conjunta da massa de rendimento real habitual das famílias
e das concessões de crédito com recursos livres para pessoas físicas
sugere que, em determinados momentos da economia brasileira, a dinâmica
do crédito pode assumir caráter antecedente em relação à evolução da
renda agregada. Observa-se que períodos de aceleração nas concessões
tendem a preceder movimentos mais intensos de recuperação da massa
salarial, indicando que a expansão do financiamento pode atuar como um
dos primeiros sinais de melhora da demanda doméstica.
Entre 2017 e 2019, por exemplo, as concessões de crédito às famílias
apresentaram trajetória de crescimento consistente, saindo de patamares
próximos a R$110 bilhões mensais para níveis superiores a R$150 bilhões,
enquanto a massa salarial avançava de forma mais gradual. Esse
comportamento sugere que a retomada do consumo ocorreu inicialmente por
meio da ampliação do crédito, com a renda reagindo de maneira mais lenta
ao longo do processo de recuperação econômica.
Dinâmica semelhante pode ser observada no período posterior ao choque
da pandemia. Após a forte contração de 2020, as concessões de crédito às
pessoas físicas retomaram trajetória de expansão relativamente rápida,
ultrapassando R$200 bilhões mensais em 2021 e alcançando níveis
superiores a R$300 bilhões em 2025. A massa salarial real, por sua vez,
apresentou recuperação mais gradual, avançando de cerca de R$273 bilhões
em 2021 para aproximadamente R$367 bilhões ao final de 2025.
Esse descompasso temporal reforça a hipótese de que o crédito pode
atuar como mecanismo de antecipação do consumo, permitindo que famílias
ajustem seus gastos antes da consolidação plena do crescimento da
renda.
Do ponto de vista econômico, esse comportamento pode ser explicado
pela maior sensibilidade das concessões às condições financeiras e às
expectativas. Alterações na percepção de risco, na liquidez do sistema
financeiro ou nas expectativas em relação à política monetária tendem a
impactar rapidamente a oferta e a demanda por crédito, enquanto a
evolução do mercado de trabalho e da renda ocorre de forma mais
gradual.
Assim, a expansão do crédito não apenas reflete a atividade econômica
corrente, mas também pode sinalizar mudanças futuras no ritmo da demanda
doméstica.
Os dados utilizados nesta análise são provenientes do Banco Central
do Brasil, por meio das séries de concessões de crédito do Sistema
Financeiro Nacional, e da Instituto Brasileiro de Geografia e
Estatística, a partir da PNAD Contínua, que fornece as informações sobre
massa de rendimento real habitual das famílias.
Dessa forma, os dados recentes sugerem que as concessões às famílias
desempenham papel relevante como indicador antecedente da dinâmica
econômica brasileira. Ao ampliar a capacidade de consumo em momentos de
melhora das condições financeiras, o crédito atua como vetor de
propagação da atividade, reforçando movimentos de expansão e
contribuindo para a evolução da massa salarial ao longo do tempo.
Análise do Mercado de Trabalho
A dinâmica do mercado de trabalho tem desempenhado papel central na
trajetória recente da atividade econômica brasileira. A evolução da taxa
de desocupação, da população na força de trabalho e da massa salarial
real revela não apenas os efeitos das oscilações econômicas enfrentadas
pelo país na última década, mas também os fundamentos que sustentam o
momento atual da economia.
Entre 2015 e 2017, a economia brasileira enfrentou forte contração,
refletida na deterioração abrupta do mercado de trabalho. A taxa de
desocupação avançou de aproximadamente 6,5% para patamar próximo de 14%,
configurando uma duplicação do desemprego em curto intervalo de tempo.
Esse movimento foi acompanhado por enfraquecimento da renda agregada e
retração do consumo das famílias.
Ainda que a população na força de trabalho tenha mantido tendência
estrutural de crescimento, o choque recessivo se traduziu em
incapacidade de absorção dessa mão de obra, ampliando a ociosidade da
economia e reduzindo o dinamismo da demanda doméstica.
Nos anos subsequentes, observou-se estabilização do desemprego, porém
ainda em níveis elevados, superiores a 11%. A recuperação econômica
mostrou-se moderada e insuficiente para promover reabsorção rápida da
mão de obra desempregada. A massa salarial apresentou crescimento
limitado, restringindo a capacidade de aceleração do consumo.
Nos últimos anos, entretanto, o mercado de trabalho apresentou
melhora significativa. A taxa de desocupação recuou de forma consistente
e encerrou o ano em aproximadamente 5,1%, nível historicamente baixo
para os padrões da economia brasileira.
Esse movimento elevou a renda disponível das famílias e fortaleceu o
consumo doméstico, principal componente do PIB brasileiro. O mercado de
trabalho deixou de atuar como restrição ao crescimento e passou a
funcionar como mecanismo de propagação da atividade econômica.
Contudo, a economia opera atualmente com grau relativamente reduzido
de ociosidade. Além do baixo nível de desemprego, indicadores de
utilização da capacidade instalada da indústria apontam para níveis
próximos da média histórica, segundo dados da Confederação Nacional da
Indústria. A taxa de utilização da capacidade instalada tem oscilado em
torno de 78% a 80%, indicando redução da ociosidade produtiva. Esse
cenário implica: maior pressão potencial sobre salários, redução da
margem de crescimento via absorção adicional de trabalhadores, maior
dependência de ganhos de produtividade e investimento para sustentar a
expansão futura Nesse contexto, a continuidade do crescimento econômico
tende a exigir uma transição para um modelo mais intensivo em
produtividade, investimento e eficiência alocativa.
Renda e Consumo das Famílias
Renda e Consumo das Famílias
Acerca do consumo e da renda das famílias, apesar de um cenário de
juros elevados, o consumo doméstico manteve-se relativamente resiliente
ao longo do período, sustentado principalmente por um mercado de
trabalho aquecido e por ganhos reais de renda.
Dados recentes indicam que a taxa de desemprego no Brasil encerrou o
ano em aproximadamente 5,1%, segundo o Instituto Brasileiro de Geografia
e Estatística, enquanto a massa de rendimento real habitual do trabalho
apresentou crescimento consistente, refletindo tanto a expansão do
emprego quanto a recuperação do poder de compra da população.
Esse avanço da renda real tende a sustentar o consumo das famílias
mesmo em um ambiente de crédito mais restritivo, uma vez que parcela
relevante do consumo doméstico está associada à renda corrente.
Outro fator relevante foi o arrefecimento da inflação de alimentos,
que contribuiu para reduzir pressões sobre o orçamento das famílias. A
combinação de condições climáticas mais favoráveis para a produção
agrícola, juntamente com um câmbio relativamente estável, ajudou a
conter o custo de itens alimentícios ao longo do ano, liberando parcela
maior da renda disponível para outros tipos de consumo.
Esse movimento teve impacto direto sobre indicadores de atividade
ligados ao consumo, especialmente no varejo ampliado.
Como reflexo desses fatores, indicadores de consumo mostraram
desempenho positivo no final do ano. Em dezembro, o consumo avançou
15,69%, registrando crescimento expressivo em comparação ao mesmo
período de 2024, reforçando a ideia de que a combinação entre expansão
do emprego, recuperação da renda real e desaceleração inflacionária
contribuiu para sustentar a demanda doméstica mesmo em um ambiente de
política monetária ainda restritiva.
Contudo, é importante considerar que 2026 será um ano eleitoral, o
que historicamente tende a elevar o grau de incerteza econômica no
Brasil. Episódios passados ilustram esse padrão.
Em 2014, por exemplo, o processo eleitoral foi acompanhado por
deterioração das expectativas fiscais e aumento da volatilidade nos
mercados financeiros, contribuindo para a desaceleração da atividade
econômica. O PIB cresceu apenas 0,5% naquele ano, após expansão de 3,0%
em 2013.
De forma semelhante, em 2018, o período eleitoral também foi marcado
por elevada incerteza política e volatilidade cambial, levando empresas
e investidores a adotar postura mais cautelosa em relação a
investimentos e decisões de consumo de maior valor.
Esse comportamento ocorre porque anos eleitorais aumentam a incerteza
sobre a condução futura da política econômica, especialmente em relação
à política fiscal, reformas estruturais e diretrizes regulatórias.
Dessa forma, embora os fundamentos do mercado de trabalho e da renda
ainda contribuam para sustentar o consumo das famílias, a proximidade do
processo eleitoral de 2026 pode introduzir um grau adicional de cautela
no comportamento de consumidores e investidores, reforçando a
expectativa de crescimento econômico mais moderado ao longo do
período.
REFERÊNCIAS
INFOMONEY. PIB 2026: o ano em que a economia não desaba, mas também
não decola. São Paulo: InfoMoney, 2026. Disponível em: https://www.infomoney.com.br/economia/pib-2026-o-ano-em-que-a-economia-nao-desaba-mas-tambem-nao-decola/
. Acesso em: 05 mar. 2026.
INFOMONEY. Serviços: setor recua em dezembro de 2025, aponta IBGE,
com impacto de juros elevados. São Paulo: InfoMoney, 2026. Disponível
em: https://www.infomoney.com.br/economia/servicos-ibge-dezembro-2025-queda-juros/
. Acesso em: 05 mar. 2026.
EMPRESA BRASIL DE COMUNICAÇÃO. Prévia do PIB aponta crescimento de
2,5% da economia brasileira em 2025. Brasília, DF: Agência Brasil, 2026.
Disponível em: https://agenciabrasil.ebc.com.br/economia/noticia/2026-02/previa-do-pib-aponta-crescimento-de-25-da-economia-brasileira-em-2025
. Acesso em: 05 mar. 2026.
FUNDAÇÃO GETULIO VARGAS. Economia cresceu 2,2% em 2025, segundo o
Monitor do PIB-FGV. Rio de Janeiro: FGV IBRE, 2026. Disponível em: https://portalibre.fgv.br/noticias/economia-cresceu-22-em-2025-segundo-o-monitor-do-pib-fgv
. Acesso em: 05 mar. 2026.
XP INVESTIMENTOS. Brasil Macro Mensal: crescimento mais forte e
inflação mais baixa. São Paulo: XP Investimentos, 2026. Disponível em:
https://conteudos.xpi.com.br/economia/brasil-macro-mensal-crescimento-mais-forte-inflacao-mais-baixa/
. Acesso em: 05 mar. 2026.
EDITORA ABRIL. Atividade econômica brasileira cresce 2,5% em 2025.
São Paulo: Você S/A, 2026. Disponível em: https://vocesa.abril.com.br/economia/atividade-economica-brasileira-cresce-25-em-2025/
. Acesso em: 05 mar. 2026.
BANCO CENTRAL DO BRASIL. Índice de Atividade Econômica do Banco
Central (IBC-Br). Brasília, DF: BCB, 2026. Disponível em: https://www.bcb.gov.br/estatisticas/ibc-br . Acesso em:
05 mar. 2026
INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA. Indicadores
econômicos e sociais. Rio de Janeiro: IBGE, 2026. Disponível em: https://www.ibge.gov.br/indicadores . Acesso em: 05 mar.
2026.
LS0tDQp0aXRsZTogIlJlbGF0w7NyaW8gQXRpdmlkYWRlIEVjb27DtG1pY2EiDQphdXRob3I6ICJKb8OjbyBQZWRybyBHb2RpbmhvIGUgTHVpeiBSZXplbmRlIg0KZGF0ZTogIjIwMjYtMDItMTIiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgdGhlbWU6IGx1bWVuDQogICAgaGlnaGxpZ2h0OiB0YW5nbw0KICAgIGNvZGVfZm9sZGluZzogc2hvdw0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUgDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSkNCg0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoc2lkcmFyKQ0KbGlicmFyeShpcGVhZGF0YXIpDQpsaWJyYXJ5KHF1YW50bW9kKQ0KbGlicmFyeShzY2FsZXMpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkocmJjYikNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeSh3cml0ZXhsKQ0KbGlicmFyeShodHRyKQ0KbGlicmFyeSh0aWR5cikNCmBgYA0KDQojIyAqKlJlbGF0w7NyaW8gQXRpdmlkYWRlIEVjb27DtG1pY2EgLSBSZXN1bHRhZG8gZGUgMjAyNSBlIFByZXZpc8OjbyBwYXJhIDIwMjYqKg0KDQpPIHJlbGF0w7NyaW8gYSBzZWd1aXIgdGVtIGNvbW8gb2JqZXRpdm8gYW5hbGlzYXIgZW1waXJpY2FtZW50ZSBvIHJlc3VsdGFkbyBkYSBBdGl2aWRhZGUgRWNvbsO0bWljYSBlbSAyMDI1LCBiZW0gY29tbyBhcyBwcm9qZcOnw7VlcyBwYXJhIGVzc2UgYW5vIGRlIDIwMjYuDQoNCiMjICpSZXN1bHRhZG8gLSBBdGl2aWRhZGUgRWNvbsO0bWljYSBkZSAyMDI1IGVtIENvbXBhcmHDp8OjbyBjb20gMjAyNCoNCg0KTyBhbm8gZGUgMjAyNSBmb2kgbWFyY2FkbyBwb3IgdW1hIGFsdGEgdGF4YSBkZSBqdXJvcywgY29tIGEgU0VMSUMgbWFudGVuZG8tc2UgZW0gMTUlIGFvIGxvbmdvIGRlIHRvZG8gYW5vLCBtYXMgdGFtYsOpbSBjb20gb3MgZXN0w61tdWxvcyBmaXNjYWlzIGUgZGUgY3LDqWRpdG8gaW1wdWxzaW9uYW5kbyBvIHBhw61zLiBEZXNzYSBmb3JtYSwgYW8gc2UgYW5hbGlzYXIgbyBQSUIgTWVuc2FsIGUgbyBJQkMtQnIgZG8gw7psdGltbyBhbm8gZW0gY29tcGFyYcOnw6NvIGFvIGRlIDIwMjQsIHBlcmNlYmUtc2UgcXVlLCBhcGVzYXIgZG9zIGp1cm9zIGFsdG9zIGUgZGUgb3V0cm9zIGZhdG9yZXMgZGVzZmF2b3LDoXZlaXMsIGhvdXZlIHNpbSB1bSBjcmVzY2ltZW50byBubyBhbm8gZGUgMjAyNSDigJQgMiw1JSBubyBJQkMtQnIgZSAyLDUlIG5vIFBJQiDigJQgcG9yw6ltIGVtIHVtIHJpdG1vIG1lbm9yIHNlIGNvbXBhcmFkbyBhIDIwMjQsIHRlbmTDqm5jaWEgcXVlIG9jb3JyZXUgdGFudG8gY29tIG8gUElCIHF1YW50byBjb20gbyDDjW5kaWNlIGRlIEF0aXZpZGFkZSBFY29uw7RtaWNhLiBBcGVzYXIgZGlzc28sIGVtIGRhZG9zIG1haXMgcmVjZW50ZXMgbyBJQkMtQnIgcmVjdW91IDAuMiUsIGV2aWRlbmNpYW5kbyBlc3NhIGRlc2FjZWxhcmHDp8OjbyBkYSBlY29ub21pYSwgY29tIHNldG9yZXMgZGUgZ3JhbmRlIHBlc28gbmEgZWNvbm9taWEgY29tbyBBZ3JvcGVjdcOhcmlhLCBTZXJ2acOnb3MgZSBJbmTDunN0cmlhIHBlcmRlbmRvIGEgZm9yw6dhIGVjb27DtG1pY2EgdW1hIGRhcyByYXrDtWVzIHBhcmEgZXNzZQ0KcmVjdW8uDQoNCk8gY3Jlc2NpbWVudG8gZG8gUElCLCBwb3J0YW50bywgYWNvbXBhbmhvdSBvIElCQy1CciwgcmVwZXRpbmRvIG8gbWVzbW8gcGFkcsOjbyBkZSBkZXNhY2VsZXJhw6fDo28gZW0gcmVsYcOnw6NvIGEgMjAyNC4gTyBQSUIgbWVuc2FsLCBjYWxjdWxhZG8gYSBwYXJ0aXIgZGEgaW50ZXJwb2xhw6fDo28gZG9zIHZhbG9yZXMgdHJpbWVzdHJhaXMgZGlzdHJpYnXDrWRvcyBhbyBsb25nbyBkb3MgdHLDqnMgbWVzZXMgZSB0ZW5kbyBjb21vIHJlZmVyw6puY2lhIHPDqXJpZXMgZWNvbsO0bWljYXMgY29tbyBvIFZvbHVtZSBkZSBTZXJ2acOnb3MgKFBNUykgZSBhIEFycmVjYWRhw6fDo28gZGUgSW1wb3N0b3MsIHBlcm1pdGUgYWNvbXBhbmhhciBlc3NlIG1vdmltZW50byBjb20gbWFpb3IgZ3JhbnVsYXJpZGFkZS4gRXNzZSBjb21wb3J0YW1lbnRvIMOpIGV4cGxpY2FkbywgcHJpbmNpcGFsbWVudGUsIHBlbGEgbWVub3IgY29udHJpYnVpw6fDo28gZG8gc2V0b3IgZGUgU2VydmnDp29zIOKAlCBxdWUgdGVtIG8gbWFpb3IgcGVzbyBuYSBlY29ub21pYSDigJQsIHNvbWFkYSBhIHJlZHXDp8O1ZXMgbm8gc2V0b3IgSW5kdXN0cmlhbCBlIG5vIGNvbXBvbmVudGUgZGUgSW1wb3N0b3MuIEFwZW5hcyBhIEFncm9wZWN1w6FyaWEgYXVtZW50b3Ugc3VhIHBhcnRpY2lwYcOnw6NvLCBlbWJvcmEgc2V1IGltcGFjdG8gc2VqYSBpbmZlcmlvciBhbyBkbyBzZXRvciBkZSBTZXJ2acOnb3MuIE5vIGdlcmFsLCBvIFBJQiBpbmljaW91IG8gYW5vIGNvbSBmb3J0ZSBjcmVzY2ltZW50byBlIHRlcm1pbm91IGNvbSBlc3RhYmlsaWRhZGUsIHJlZmxleG8gZG8gYXBlcnRvIG1vbmV0w6FyaW8gZSBkYSBpbXBvc2nDp8OjbyBkZSB0YXJpZmFzIG5vIHBhw61zLg0KDQoNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQoNCiMgQ29sZXRhciBkYWRvcyBkbyBQSUIgbWVuc2FsIChjw7NkaWdvIDQzODApIC0gZW0gUiQgbWlsaMO1ZXMNCmRhZG9zX3BpYiA8LSBnZXRfc2VyaWVzKDQzODAsIHN0YXJ0X2RhdGUgPSAiMjAyNC0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMjYtMDItMjgiKSAlPiUgDQogIHJlbmFtZShQSUJfbWVuc2FsID0gYDQzODBgKQ0KDQojIENvbGV0YXIgZGFkb3MgZG8gSUJDLUJyIGNvbSBhanVzdGUgc2F6b25hbCAoY8OzZGlnbyAyNDM2NCkNCmRhZG9zX2liY2JyIDwtIGdldF9zZXJpZXMoMjQzNjQsIHN0YXJ0X2RhdGUgPSAiMjAyNC0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMjYtMDItMjgiKSAlPiUgDQogIHJlbmFtZShJQkNCciA9IGAyNDM2NGApDQoNCiMgUHJlcGFyYXIgZGFkb3MgZG8gUElCIChjb252ZXJ0ZXIgcGFyYSB0cmlsaMO1ZXMpDQpkYWRvc19waWJfbWVuc2FsIDwtIGRhZG9zX3BpYiAlPiUNCiAgbXV0YXRlKA0KICAgIGFubyA9IHllYXIoZGF0ZSksDQogICAgbWVzID0gbW9udGgoZGF0ZSwgbGFiZWwgPSBUUlVFLCBhYmJyID0gRkFMU0UpLA0KICAgIHRpbWVzdGFtcCA9IGRhdGV0aW1lX3RvX3RpbWVzdGFtcChkYXRlKSwNCiAgICAjIENPUlJFw4fDg086IG1pbGjDtWVzIHBhcmEgdHJpbGjDtWVzID0gZGl2aWRpciBwb3IgMS4wMDAuMDAwIChuw6NvIDEwMC4wMDApDQogICAgUElCX3RyaWxob2VzID0gcm91bmQoUElCX21lbnNhbCAvIDEwMDAwMCwgMikNCiAgKSAlPiUNCiAgc2VsZWN0KGRhdGUsIHRpbWVzdGFtcCwgUElCX3RyaWxob2VzKQ0KDQojIFByZXBhcmFyIGRhZG9zIGRvIElCQy1Ccg0KZGFkb3NfaWJjYnJfbWVuc2FsIDwtIGRhZG9zX2liY2JyICU+JQ0KICBtdXRhdGUoDQogICAgdGltZXN0YW1wID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKGRhdGUpLA0KICAgIElCQ0JyX2FycmVkb25kYWRvID0gcm91bmQoSUJDQnIsIDEpDQogICkgJT4lDQogIHNlbGVjdChkYXRlLCB0aW1lc3RhbXAsIElCQ0JyX2FycmVkb25kYWRvKQ0KDQojIENvbWJpbmFyIGRhZG9zDQpkYWRvc19jb21iaW5hZG9zIDwtIGRhZG9zX3BpYl9tZW5zYWwgJT4lDQogIGxlZnRfam9pbihkYWRvc19pYmNicl9tZW5zYWwsIGJ5ID0gYygiZGF0ZSIsICJ0aW1lc3RhbXAiKSkgJT4lDQogIGFycmFuZ2UoZGF0ZSkNCg0KIyBWZXJpZmljYXIgZGFkb3MNCmlmKG5yb3coZGFkb3NfY29tYmluYWRvcykgPT0gMCkgew0KICBzdG9wKCJEYWRvcyBuw6NvIGVuY29udHJhZG9zLiBWZXJpZmlxdWUgb3MgY8OzZGlnb3MuIikNCn0NCg0KIyBDYWxjdWxhciBsaW1pdGVzIHBhcmEgZWl4b3MNCnBpYl9taW4gPC0gbWluKGRhZG9zX2NvbWJpbmFkb3MkUElCX3RyaWxob2VzLCBuYS5ybSA9IFRSVUUpDQpwaWJfbWF4IDwtIG1heChkYWRvc19jb21iaW5hZG9zJFBJQl90cmlsaG9lcywgbmEucm0gPSBUUlVFKQ0KaWJjX21pbiA8LSBtaW4oZGFkb3NfY29tYmluYWRvcyRJQkNCcl9hcnJlZG9uZGFkbywgbmEucm0gPSBUUlVFKQ0KaWJjX21heCA8LSBtYXgoZGFkb3NfY29tYmluYWRvcyRJQkNCcl9hcnJlZG9uZGFkbywgbmEucm0gPSBUUlVFKQ0KDQojIE1hcmdlbSBkZSA1JQ0KcGliX3JhbmdlIDwtIHBpYl9tYXggLSBwaWJfbWluDQppYmNfcmFuZ2UgPC0gaWJjX21heCAtIGliY19taW4NCg0KIyBDcmlhciBncsOhZmljbyBjb21iaW5hZG8NCmhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lDQogICMgU8OpcmllIDE6IFBJQiAoY29sdW5hcykgLSBlaXhvIGVzcXVlcmRvDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX2NvbWJpbmFkb3MgJT4lIHNlbGVjdCh0aW1lc3RhbXAsIFBJQl90cmlsaG9lcykpLA0KICAgIHR5cGUgPSAiY29sdW1uIiwNCiAgICBuYW1lID0gIlBJQiBNZW5zYWwgKFIkIHRyaWxow7VlcykiLA0KICAgIGNvbG9yID0gIiMwMjAyM2MiLA0KICAgIHlBeGlzID0gMCwNCiAgICB0b29sdGlwID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMiwgdmFsdWVTdWZmaXggPSAiIHRyaWxow7VlcyIpDQogICkgJT4lDQogICMgU8OpcmllIDI6IElCQy1CciAobGluaGEpIC0gZWl4byBkaXJlaXRvDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX2NvbWJpbmFkb3MgJT4lIHNlbGVjdCh0aW1lc3RhbXAsIElCQ0JyX2FycmVkb25kYWRvKSksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIklCQy1CciAow61uZGljZSkiLA0KICAgIGNvbG9yID0gIiNmZWI3MTIiLA0KICAgIGxpbmVXaWR0aCA9IDMsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gVFJVRSwgcmFkaXVzID0gNCksDQogICAgeUF4aXMgPSAxLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxKQ0KICApICU+JQ0KICAjIENvbmZpZ3VyYXIgZWl4b3MgWSBkdWFpcw0KICBoY195QXhpc19tdWx0aXBsZXMoDQogICAgbGlzdCgNCiAgICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIlBJQiAoUiQgdHJpbGjDtWVzKSIpLA0KICAgICAgb3Bwb3NpdGUgPSBGQUxTRSwNCiAgICAgIGxhYmVscyA9IGxpc3QoZm9ybWF0ID0gInt2YWx1ZX0gdHJpIiksDQogICAgICBtaW4gPSBmbG9vcihwaWJfbWluIC0gMC4wNSAqIHBpYl9yYW5nZSksDQogICAgICBtYXggPSBjZWlsaW5nKHBpYl9tYXggKyAwLjA1ICogcGliX3JhbmdlKQ0KICAgICksDQogICAgbGlzdCgNCiAgICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIklCQy1CciAow61uZGljZSAtIGJhc2UgMjAyMj0xMDApIiksDQogICAgICBvcHBvc2l0ZSA9IFRSVUUsDQogICAgICBsYWJlbHMgPSBsaXN0KGZvcm1hdCA9ICJ7dmFsdWV9IiksDQogICAgICBtaW4gPSBmbG9vcihpYmNfbWluIC0gMC4wNSAqIGliY19yYW5nZSksDQogICAgICBtYXggPSBjZWlsaW5nKGliY19tYXggKyAwLjA1ICogaWJjX3JhbmdlKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfeEF4aXMoDQogICAgdHlwZSA9ICdkYXRldGltZScsDQogICAgbGFiZWxzID0gbGlzdChmb3JtYXQgPSAne3ZhbHVlOiViICVZfScpDQogICkgJT4lDQogIGhjX3RpdGxlKHRleHQgPSAiUElCIHZzLiBJQkMtQnI6IEF0aXZpZGFkZSBFY29uw7RtaWNhIEJyYXNpbGVpcmEiKSAlPiUNCiAgaGNfc3VidGl0bGUodGV4dCA9ICJDb21wYXJhw6fDo28gZW50cmUgUElCIE1lbnNhbCAoUiQgdHJpbGjDtWVzKSBlIElCQy1CciAow61uZGljZSkgLSAyMDI0IGEgMjAyNiIpICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLCANCiAgICB0ZXh0ID0gIkZvbnRlOiBCYW5jbyBDZW50cmFsIGRvIEJyYXNpbCAoU0dTIC0gQ8OzZGlnb3M6IDQzODAgZSAyNDM2NCkiDQogICkgJT4lDQogIGhjX3JhbmdlU2VsZWN0b3IoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYnV0dG9ucyA9IGxpc3QoDQogICAgICBsaXN0KHR5cGUgPSAnbW9udGgnLCBjb3VudCA9IDMsIHRleHQgPSAnM00nKSwNCiAgICAgIGxpc3QodHlwZSA9ICdtb250aCcsIGNvdW50ID0gNiwgdGV4dCA9ICc2TScpLA0KICAgICAgbGlzdCh0eXBlID0gJ3llYXInLCBjb3VudCA9IDEsIHRleHQgPSAnMVknKSwNCiAgICAgIGxpc3QodHlwZSA9ICdhbGwnLCB0ZXh0ID0gJ1RvZG8gcGVyw61vZG8nKQ0KICAgICksDQogICAgc2VsZWN0ZWQgPSAyDQogICkgJT4lDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICBoZWFkZXJGb3JtYXQgPSAnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJweCI+PGI+e3BvaW50LmtleX08L2I+PC9zcGFuPjxici8+JywNCiAgICBwb2ludEZvcm1hdCA9ICc8c3BhbiBzdHlsZT0iY29sb3I6e3Nlcmllcy5jb2xvcn0iPuKXjzwvc3Bhbj4ge3Nlcmllcy5uYW1lfTogPGI+e3BvaW50Lnk6LjFmfXtzZXJpZXMudG9vbHRpcE9wdGlvbnMudmFsdWVTdWZmaXh9PC9iPjxici8+Jw0KICApICU+JQ0KICBoY19sZWdlbmQoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSIsDQogICAgbGF5b3V0ID0gImhvcml6b250YWwiDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIGNvbHVtbiA9IGxpc3QoDQogICAgICBwb2ludFBhZGRpbmcgPSAwLjEsDQogICAgICBncm91cFBhZGRpbmcgPSAwLjA1LA0KICAgICAgYm9yZGVyV2lkdGggPSAwLjUNCiAgICApLA0KICAgIGxpbmUgPSBsaXN0KA0KICAgICAgYW5pbWF0aW9uID0gVFJVRSwNCiAgICAgIGNvbm5lY3ROdWxscyA9IFRSVUUNCiAgICApDQogICkNCmBgYA0KDQojIyAqUHJldmlzw6NvIHBhcmEgbyBhbm8gZGUgMjAyNioNCg0KUGFyYSAyMDI2LCBhIHByb2plw6fDo28gZG8gUElCIHNlIGFwcm94aW1hIGRlIHVtIGNlbsOhcmlvIHByw7N4aW1vIGRlIDEsNyUsIGRlIGFjb3JkbyBjb20gbyBCb2xldGltIEZvY3VzIGUgYXMgbWFpb3JlcyBjYXNhcyBkZSBhbsOhbGlzZSDigJQgYWJhaXhvIGRvcyAyJSBwcm9qZXRhZG9zIHBhcmEgMjAyNSDigJQsIHJlZmxldGluZG8gZXNzYSBxdWVkYSBjb250cm9sYWRhIGRhIGVjb25vbWlhLiBFc3NlIG1vdmltZW50byDDqSB0YW1iw6ltIHVtIHJlZmxleG8gZGEgc2luYWxpemHDp8OjbyBkYSDDumx0aW1hIHJldW5pw6NvIGRvIENvcG9tLCBxdWUgaW5kaWNvdSB1bSBjaWNsbyBkZSBjb3J0ZXMgZGUganVyb3MgYW8gbG9uZ28gZG8gYW5vLCBjb20gYSBTZWxpYyBkZXZlbmRvIHRlcm1pbmFyIGVudHJlIDEyJSBlIDEyLDc1JSDigJQgdW0gcGF0YW1hciBpbmZlcmlvciBhbyByZWNlbnRlLCBwb3LDqW0gYWluZGEgbXVpdG8gcmVzdHJpdGl2by4gTmEgcHLDoXRpY2EsIGlzc28gc2lnbmlmaWNhIHF1ZSwgZW1ib3JhIGhhamEgdW0gYWzDrXZpbyBlbSByZWxhw6fDo28gYW9zIDE1JSBkZSAyMDI1LCBvIGNyw6lkaXRvIGUgbyBjb25zdW1vIGRhcyBmYW3DrWxpYXMgZGV2ZW0gY29udGludWFyIG9wZXJhbmRvIHNvYiByZXN0cmnDp8OjbywgYWluZGEgcXVlIGVtIGludGVuc2lkYWRlIGxpZ2VpcmFtZW50ZSBtZW5vci4NCg0KRXNzZSBjZW7DoXJpbyBkb23DqXN0aWNvIG9jb3JyZSBlbSBtZWlvIGEgdW1hIGRlc2FjZWxlcmHDp8OjbyBkYSBhdGl2aWRhZGUgZ2xvYmFsLiBDb25mb3JtZSBwcm9qZcOnw7VlcyBkYSBPQ0RFLCBhIGVjb25vbWlhIG11bmRpYWwgdGVtIG1vc3RyYWRvIHJlc2lsacOqbmNpYSBkaWFudGUgZG9zIGNob3F1ZXMgY29tZXJjaWFpcywgY29tIGNyZXNjaW1lbnRvIGVzdGltYWRvIGVtIDMsMiUgcGFyYSAyMDI1LCBpbXB1bHNpb25hZG8gcG9yIHBvbMOtdGljYXMgbWFjcm9lY29uw7RtaWNhcyBhaW5kYSBmYXZvcsOhdmVpcy4gTm8gZW50YW50bywgb3MgaW1wYWN0b3MgZGFzIHRhcmlmYXMgaW1wbGVtZW50YWRhcyBwZWxvcyBFc3RhZG9zIFVuaWRvcyBhaW5kYSBuw6NvIHNlIG1hdGVyaWFsaXphcmFtIHBvciBjb21wbGV0byBlIHRlbmRlbSBhIHByb3ZvY2FyIHVtYSBkZXNhY2VsZXJhw6fDo28gZG8gY3Jlc2NpbWVudG8gZ2xvYmFsLCBxdWUgZGV2ZSByZWN1YXIgcGFyYSAyLDklIGVtIDIwMjYuDQoNCkFsw6ltIGRpc3NvLCDDqSBpbXBvcnRhbnRlIGNvbnNpZGVyYXIgbyBjb21wb25lbnRlIHBvbMOtdGljbyBkbyBjaWNsbyBlY29uw7RtaWNvIGJyYXNpbGVpcm8sIHVtYSB2ZXogcXVlIDIwMjYgc2Vyw6EgdW0gYW5vIGRlIGVsZWnDp8O1ZXMgcHJlc2lkZW5jaWFpcy4gSGlzdG9yaWNhbWVudGUsIHBlcsOtb2RvcyBlbGVpdG9yYWlzIGNvc3R1bWFtIGdlcmFyIG1haW9yIHZvbGF0aWxpZGFkZSBtYWNyb2Vjb27DtG1pY2EgZSBtdWRhbsOnYXMgZGUgZXhwZWN0YXRpdmFzIHBvciBwYXJ0ZSBkZSBhZ2VudGVzIGVjb27DtG1pY29zIGUgaW52ZXN0aWRvcmVzLiBVbSBleGVtcGxvIHJlbGV2YW50ZSBvY29ycmV1IGVtIDIwMTQsIHF1YW5kbyBvIGFtYmllbnRlIGVsZWl0b3JhbCBmb2kgYWNvbXBhbmhhZG8gcG9yIGRldGVyaW9yYcOnw6NvIGRhcyBleHBlY3RhdGl2YXMgZmlzY2FpcywgYXVtZW50byBkYSBpbmNlcnRlemEgcG9sw610aWNhIGUgcmVkdcOnw6NvIGRvIGludmVzdGltZW50byBwcml2YWRvLiBOYXF1ZWxlIHBlcsOtb2RvLCBhIHRheGEgZGUgY3Jlc2NpbWVudG8gZG8gUElCIGRlc2FjZWxlcm91IHNpZ25pZmljYXRpdmFtZW50ZSwgcGFzc2FuZG8gZGUgMywwJSBlbSAyMDEzIHBhcmEgYXBlbmFzIDAsNSUgZW0gMjAxNCwgcmVmbGV0aW5kbyB1bSBjZW7DoXJpbyBkZSBpbmNlcnRlemEgZWNvbsO0bWljYSBlIGFqdXN0ZSBkZSBleHBlY3RhdGl2YXMuDQoNCkVzc2UgcGFkcsOjbyBoaXN0w7NyaWNvIHN1Z2VyZSBxdWUgYW5vcyBlbGVpdG9yYWlzIHRlbmRlbSBhIGludGVuc2lmaWNhciBhIGNhdXRlbGEgZGUgZW1wcmVzYXMgZSBpbnZlc3RpZG9yZXMsIGVzcGVjaWFsbWVudGUgZW0gZWNvbm9taWFzIGVtZXJnZW50ZXMgY29tbyBvIEJyYXNpbCwgb25kZSBtdWRhbsOnYXMgbmEgY29uZHXDp8OjbyBkYSBwb2zDrXRpY2EgZmlzY2FsLCBtb25ldMOhcmlhIGUgcmVndWxhdMOzcmlhIHBvZGVtIGFsdGVyYXIgc2lnbmlmaWNhdGl2YW1lbnRlIGFzIHBlcnNwZWN0aXZhcyBlY29uw7RtaWNhcy4gRGVzc2EgZm9ybWEsIGFpbmRhIHF1ZSBhIHBvbMOtdGljYSBtb25ldMOhcmlhIGVzdGVqYSBlbSB0cmFqZXTDs3JpYSBkZSBmbGV4aWJpbGl6YcOnw6NvIG1vZGVyYWRhLCBhIHByb3hpbWlkYWRlIGRvIGNpY2xvIGVsZWl0b3JhbCBkZSAyMDI2IHBvZGUgY29udHJpYnVpciBwYXJhIG1hbnRlciBvIGFtYmllbnRlIGRlIGludmVzdGltZW50b3MgbWFpcyBjYXV0ZWxvc28sIHJlZm9yw6dhbmRvIG8gY2Vuw6FyaW8gZGUgY3Jlc2NpbWVudG8gbW9kZXJhZG8gcHJvamV0YWRvIHBhcmEgbyBwZXLDrW9kbw0KDQojIyAqQXRpdmlkYWRlIEVjb27DtG1pY2Egbm9zIFNldG9yZXMgKEFncm9wZWN1w6FyaWEvSW5kw7pzdHJpYS9TZXJ2acOnb3MpKg0KDQpBbyBhbmFsaXNhciBvcyBkaWZlcmVudGVzIHNldG9yZXMgZGEgZWNvbm9taWEsIHBlcmNlYmUtc2UgbyBtZXNtbyBwYWRyw6NvIGRlIGNyZXNjaW1lbnRvIHNlZ3VpZG8gZGUgZGVzYWNlbGVyYcOnw6NvIHF1ZSBtYXJjb3UgbyBJQkMtQnIgZSBvIFBJQiBhbyBsb25nbyBkbyBhbm8uIEFzIGFsdGFzIHNldG9yaWFpcyBmb3JhbSBkZSAxMywxJSBuYSBhZ3JvcGVjdcOhcmlhLCAxLDUlIG5hIGluZMO6c3RyaWEgZSAyLDElIGVtIHNlcnZpw6dvcy4NCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQoNCiMgQ29sZXRhciBkYWRvcyBkb3Mgc2V0b3JlcyAoSUJDLUJyIHNldG9yaWFsKSBkZSBqYW5laXJvLzIwMjQgYXTDqSBkZXplbWJyby8yMDI1DQojIEFURU7Dh8ODTzogU8OjbyBuw7ptZXJvcy3DrW5kaWNlIGNvbSBiYXNlIDIwMjIgPSAxMDAsIE7Dg08gc8OjbyB2YWxvcmVzIGVtIFIkIG1pbGjDtWVzDQoNCmRhZG9zX3NlcnZpY29zIDwtIGdldF9zZXJpZXMoMjk2MDYsIHN0YXJ0X2RhdGUgPSAiMjAyNC0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMjUtMTItMzAiKSAlPiUgDQogIHJlbmFtZShTZXJ2aWNvcyA9IGAyOTYwNmApICAjIElCQy1CciBTZXJ2acOnb3MgKMOtbmRpY2UpIC0gY29tIGFqdXN0ZSBzYXpvbmFsDQoNCmRhZG9zX2Fncm8gPC0gZ2V0X3NlcmllcygyOTYwMiwgc3RhcnRfZGF0ZSA9ICIyMDI0LTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAyNS0xMi0zMCIpICU+JSANCiAgcmVuYW1lKEFncm9wZWN1YXJpYSA9IGAyOTYwMmApICAjIElCQy1CciBBZ3JvcGVjdcOhcmlhICjDrW5kaWNlKSAtIGNvbSBhanVzdGUgc2F6b25hbA0KDQpkYWRvc19pbmR1c3RyaWEgPC0gZ2V0X3NlcmllcygyOTYwNCwgc3RhcnRfZGF0ZSA9ICIyMDI0LTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAyNS0xMi0zMCIpICU+JSANCiAgcmVuYW1lKEluZHVzdHJpYSA9IGAyOTYwNGApICAjIElCQy1CciBJbmTDunN0cmlhICjDrW5kaWNlKSAtIGNvbSBhanVzdGUgc2F6b25hbA0KDQojIENvbWJpbmFyIHRvZG9zIG9zIGRhZG9zDQpkYWRvc19zZXRvcmVzIDwtIGRhZG9zX3NlcnZpY29zICU+JQ0KICBsZWZ0X2pvaW4oZGFkb3NfYWdybywgYnkgPSAiZGF0ZSIpICU+JQ0KICBsZWZ0X2pvaW4oZGFkb3NfaW5kdXN0cmlhLCBieSA9ICJkYXRlIikgJT4lDQogIG11dGF0ZSgNCiAgICB0aW1lc3RhbXAgPSBkYXRldGltZV90b190aW1lc3RhbXAoZGF0ZSksDQogICAgIyBNYW50ZXIgdmFsb3JlcyBvcmlnaW5haXMgZG8gw61uZGljZSAoYmFzZSAyMDIyID0gMTAwKQ0KICAgIFNlcnZpY29zX2luZGljZSA9IFNlcnZpY29zLA0KICAgIEFncm9wZWN1YXJpYV9pbmRpY2UgPSBBZ3JvcGVjdWFyaWEsDQogICAgSW5kdXN0cmlhX2luZGljZSA9IEluZHVzdHJpYQ0KICApICU+JQ0KICBzZWxlY3QoZGF0ZSwgdGltZXN0YW1wLCBTZXJ2aWNvc19pbmRpY2UsIEFncm9wZWN1YXJpYV9pbmRpY2UsIEluZHVzdHJpYV9pbmRpY2UpICU+JQ0KICBhcnJhbmdlKGRhdGUpDQoNCiMgVmVyaWZpY2FyIHNlIGjDoSBkYWRvcw0KaWYobnJvdyhkYWRvc19zZXRvcmVzKSA9PSAwKSB7DQogIHN0b3AoIk7Do28gZm9yYW0gZW5jb250cmFkb3MgZGFkb3MgcGFyYSBvIHBlcsOtb2RvIHNlbGVjaW9uYWRvLiBWZXJpZmlxdWUgc2Ugb3MgY8OzZGlnb3MgZXN0w6NvIGNvcnJldG9zIGUgc2Ugb3MgZGFkb3MgZXN0w6NvIGRpc3BvbsOtdmVpcy4iKQ0KfQ0KDQojIENhbGN1bGFyIGxpbWl0ZXMgZG8gZWl4byBZIHBhcmEgem9vbSBhdXRvbcOhdGljbw0KeV9taW4gPC0gbWluKGMoZGFkb3Nfc2V0b3JlcyRTZXJ2aWNvc19pbmRpY2UsIA0KICAgICAgICAgICAgICAgZGFkb3Nfc2V0b3JlcyRBZ3JvcGVjdWFyaWFfaW5kaWNlLCANCiAgICAgICAgICAgICAgIGRhZG9zX3NldG9yZXMkSW5kdXN0cmlhX2luZGljZSksIG5hLnJtID0gVFJVRSkNCnlfbWF4IDwtIG1heChjKGRhZG9zX3NldG9yZXMkU2Vydmljb3NfaW5kaWNlLCANCiAgICAgICAgICAgICAgIGRhZG9zX3NldG9yZXMkQWdyb3BlY3VhcmlhX2luZGljZSwgDQogICAgICAgICAgICAgICBkYWRvc19zZXRvcmVzJEluZHVzdHJpYV9pbmRpY2UpLCBuYS5ybSA9IFRSVUUpDQoNCiMgQWRpY2lvbmFyIHVtYSBtYXJnZW0gZGUgNSUgcGFyYSBtZWxob3IgdmlzdWFsaXphw6fDo28NCnlfcmFuZ2UgPC0geV9tYXggLSB5X21pbg0KeV9taW5fYWp1c3RhZG8gPC0gbWF4KDAsIGZsb29yKHlfbWluIC0gMC4wNSAqIHlfcmFuZ2UpKQ0KeV9tYXhfYWp1c3RhZG8gPC0gY2VpbGluZyh5X21heCArIDAuMDUgKiB5X3JhbmdlKQ0KDQojIENyaWFyIG8gZ3LDoWZpY28gY29tIHBvbnRvcyAobWFya2VycykgbmFzIGxpbmhhcw0KaGlnaGNoYXJ0KHR5cGUgPSAic3RvY2siKSAlPiUNCiAgIyBTw6lyaWU6IFNlcnZpw6dvcw0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19zZXRvcmVzICU+JSBzZWxlY3QodGltZXN0YW1wLCBTZXJ2aWNvc19pbmRpY2UpKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiSUJDLUJyIFNlcnZpw6dvcyIsDQogICAgY29sb3IgPSAiIzQ2YjFlMSIsICAjIEF6dWwgY2xhcm8NCiAgICBsaW5lV2lkdGggPSAyLA0KICAgIG1hcmtlciA9IGxpc3QoDQogICAgICBlbmFibGVkID0gVFJVRSwgICAgICAgICMgSEFCSUxJVEEgT1MgUE9OVE9TDQogICAgICByYWRpdXMgPSAzLCAgICAgICAgICAgICMgVGFtYW5obyBkbyBwb250bw0KICAgICAgc3ltYm9sID0gImNpcmNsZSIsICAgICAjIEZvcm1hdG86IGPDrXJjdWxvDQogICAgICBmaWxsQ29sb3IgPSAiIzQ2YjFlMSIsICMgQ29yIGRlIHByZWVuY2hpbWVudG8NCiAgICAgIGxpbmVXaWR0aCA9IDEsICAgICAgICAgIyBCb3JkYSBkbyBwb250bw0KICAgICAgbGluZUNvbG9yID0gIiNGRkZGRkYiICAjIENvciBkYSBib3JkYSAoYnJhbmNvIHBhcmEgZGVzdGFjYXIpDQogICAgKSwNCiAgICB5QXhpcyA9IDAsDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDEpDQogICkgJT4lDQogICMgU8OpcmllOiBBZ3JvcGVjdcOhcmlhDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX3NldG9yZXMgJT4lIHNlbGVjdCh0aW1lc3RhbXAsIEFncm9wZWN1YXJpYV9pbmRpY2UpKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiSUJDLUJyIEFncm9wZWN1w6FyaWEiLA0KICAgIGNvbG9yID0gIiNmZWI3MTIiLCAgIyBEb3VyYWRvDQogICAgbGluZVdpZHRoID0gMiwNCiAgICBtYXJrZXIgPSBsaXN0KA0KICAgICAgZW5hYmxlZCA9IFRSVUUsDQogICAgICByYWRpdXMgPSAzLA0KICAgICAgc3ltYm9sID0gImNpcmNsZSIsDQogICAgICBmaWxsQ29sb3IgPSAiI2ZlYjcxMiIsDQogICAgICBsaW5lV2lkdGggPSAxLA0KICAgICAgbGluZUNvbG9yID0gIiNGRkZGRkYiDQogICAgKSwNCiAgICB5QXhpcyA9IDAsDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDEpDQogICkgJT4lDQogICMgU8OpcmllOiBJbmTDunN0cmlhDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX3NldG9yZXMgJT4lIHNlbGVjdCh0aW1lc3RhbXAsIEluZHVzdHJpYV9pbmRpY2UpKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiSUJDLUJyIEluZMO6c3RyaWEiLA0KICAgIGNvbG9yID0gIiMwMjAyM2MiLCAgIyBBenVsIGVzY3Vybw0KICAgIGxpbmVXaWR0aCA9IDIsDQogICAgbWFya2VyID0gbGlzdCgNCiAgICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgICAgcmFkaXVzID0gMywNCiAgICAgIHN5bWJvbCA9ICJjaXJjbGUiLA0KICAgICAgZmlsbENvbG9yID0gIiMwMjAyM2MiLA0KICAgICAgbGluZVdpZHRoID0gMSwNCiAgICAgIGxpbmVDb2xvciA9ICIjRkZGRkZGIg0KICAgICksDQogICAgeUF4aXMgPSAwLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxKQ0KICApICU+JQ0KICBoY195QXhpcygNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICLDjW5kaWNlIChiYXNlOiAyMDIyID0gMTAwKSIpLA0KICAgIG9wcG9zaXRlID0gRkFMU0UsDQogICAgbGFiZWxzID0gbGlzdChmb3JtYXQgPSAie3ZhbHVlfSIpLA0KICAgIG1pbiA9IHlfbWluX2FqdXN0YWRvLA0KICAgIG1heCA9IHlfbWF4X2FqdXN0YWRvLA0KICAgIHBsb3RMaW5lcyA9IGxpc3QoDQogICAgICBsaXN0KA0KICAgICAgICB2YWx1ZSA9IDEwMCwNCiAgICAgICAgY29sb3IgPSAiIzY2NjY2NiIsDQogICAgICAgIGRhc2hTdHlsZSA9ICJkYXNoIiwNCiAgICAgICAgd2lkdGggPSAxLA0KICAgICAgICBsYWJlbCA9IGxpc3QodGV4dCA9ICJCYXNlICgyMDIyID0gMTAwKSIpDQogICAgICApDQogICAgKQ0KICApICU+JQ0KICBoY194QXhpcygNCiAgICB0eXBlID0gJ2RhdGV0aW1lJywNCiAgICBsYWJlbHMgPSBsaXN0KGZvcm1hdCA9ICd7dmFsdWU6JWIgJVl9JykNCiAgKSAlPiUNCiAgaGNfdGl0bGUodGV4dCA9ICJJQkMtQnIgcG9yIFNldG9yIC0gQXRpdmlkYWRlIEVjb27DtG1pY2EgY29tIEFqdXN0ZSBTYXpvbmFsIikgJT4lDQogIGhjX3N1YnRpdGxlKHRleHQgPSAiw41uZGljZSBiYXNlOiAyMDIyID0gMTAwIC0gUGVyw61vZG86IEphbi8yMDI0IGEgRGV6LzIwMjUiKSAlPiUNCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwgDQogICAgdGV4dCA9ICJGb250ZTogQmFuY28gQ2VudHJhbCBkbyBCcmFzaWwgKFNHUyAtIEPDs2RpZ29zOiAyOTYwNiwgMjk2MDIsIDI5NjA0KSINCiAgKSAlPiUNCiAgaGNfcmFuZ2VTZWxlY3RvcigNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBidXR0b25zID0gbGlzdCgNCiAgICAgIGxpc3QodHlwZSA9ICdtb250aCcsIGNvdW50ID0gMywgdGV4dCA9ICczTScpLA0KICAgICAgbGlzdCh0eXBlID0gJ21vbnRoJywgY291bnQgPSA2LCB0ZXh0ID0gJzZNJyksDQogICAgICBsaXN0KHR5cGUgPSAnYWxsJywgdGV4dCA9ICdUb2RvIHBlcsOtb2RvJykNCiAgICApLA0KICAgIHNlbGVjdGVkID0gMg0KICApICU+JQ0KICBoY190b29sdGlwKA0KICAgIHNoYXJlZCA9IFRSVUUsDQogICAgaGVhZGVyRm9ybWF0ID0gJzxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHgiPjxiPntwb2ludC5rZXl9PC9iPjwvc3Bhbj48YnIvPicsDQogICAgcG9pbnRGb3JtYXQgPSAnPHNwYW4gc3R5bGU9ImNvbG9yOntzZXJpZXMuY29sb3J9Ij7il488L3NwYW4+IHtzZXJpZXMubmFtZX06IDxiPntwb2ludC55Oi4xZn08L2I+PGJyLz4nLA0KICAgIHZhbHVlRGVjaW1hbHMgPSAxDQogICkgJT4lDQogIGhjX2xlZ2VuZCgNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgIHZlcnRpY2FsQWxpZ24gPSAiYm90dG9tIiwNCiAgICBsYXlvdXQgPSAiaG9yaXpvbnRhbCINCiAgKSAlPiUNCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgc2VyaWVzID0gbGlzdCgNCiAgICAgIGFuaW1hdGlvbiA9IFRSVUUsDQogICAgICBjb25uZWN0TnVsbHMgPSBUUlVFDQogICAgKQ0KICApDQpgYGANCkFwZXNhciBkYSBkZXNhY2VsZXJhw6fDo28sIG8gc2V0b3IgZGUgc2VydmnDp29zIHNlIG1hbnRldmUgYXF1ZWNpZG8gYW8gbG9uZ28gZG8gcGVyw61vZG8sIGNvbSB1bWEgaW5mbGHDp8OjbyBwZXJzaXN0ZW50ZSBxdWUgaW1wZWRpdSB1bSBjcmVzY2ltZW50byBhaW5kYSBtYWlvci4gT3Mgc2VydmnDp29zIGRlIGluZm9ybWHDp8OjbyBlIGNvbXVuaWNhw6fDo28gYXZhbsOnYXJhbSAxLDclLCBlbnF1YW50byBhcXVlbGVzIHByZXN0YWRvcyDDoHMgZmFtw61saWFzIGNyZXNjZXJhbSAxLDElLg0KDQpPIGFncm9uZWfDs2NpbyBwZXJtYW5lY2Ugc2VuZG8gdW0gcGlsYXIgZnVuZGFtZW50YWwgcGFyYSBhIGVjb25vbWlhIGRvIHBhw61zLiBFbSB1bSBjb250ZXh0byBkZSByZWN1cGVyYcOnw6NvIGVtIGN1bHR1cmFzIGVzdHJhdMOpZ2ljYXMsIGEgc2FmcmEgZGUgZ3LDo29zIDIwMjQvMjUgZXN0w6EgZXN0aW1hZGEgZW0gMzUwIG1pbGjDtWVzIGRlIHRvbmVsYWRhcyDigJQgdW0gYXVtZW50byBkZSAxNiwzJSBlbSBjb21wYXJhw6fDo28gw6Agc2FmcmEgZGUgMjAyMy8yNC4gTyBkZXNlbXBlbmhvIGRvIHNldG9yIHRlbSBlZmVpdG8gZGlyZXRvIHNvYnJlIG8gUElCIGUgYSBiYWxhbsOnYSBjb21lcmNpYWwsIGNvbSBvIElCQy1CciBjb250cmlidWluZG8gcGFyYSBhIGVsYWJvcmHDp8OjbyBkYSBwb2zDrXRpY2EgbW9uZXTDoXJpYSBhbyBzZXJ2aXIgY29tbyBjYWxpYnJhZG9yIGRhIFNlbGljLCBhbnRlY2lwYWRvciBkZSB0ZW5kw6puY2lhcyBlIHRlcm3DtG1ldHJvIGRvIGltcGFjdG8gZGUgZGVjaXPDtWVzIGFudGVyaW9yZXMuDQoNCk8gc2V0b3IgaW5kdXN0cmlhbCwgcG9yIHN1YSB2ZXosIHBvZGUgYXByZXNlbnRhciBkZXNhZmlvcyBlbSAyMDI2IHNlIHRyYXRhbmRvIGRlIHRyYW5zcG9ydGUgZSBsb2fDrXN0aWNhLCBlbSByYXrDo28gZGUgZXN0b3F1ZXMgZWxldmFkb3MgZGVjb3JyZW50ZXMgZGEgZGVtYW5kYSBlbmZyYXF1ZWNpZGEgZSBkZSB1bSBjw6JtYmlvIG3DqWRpbyBlc3BlY3VsYWRvIGVtIHRvcm5vIGRlIFIkIDUsNTAgIA0KDQoNCiMjICpDZW7DoXJpbyBkbyBjcsOpZGl0byBkZSBjb25zdW1vIG5hIGF0aXZpZGFkZSBlY29uw7RtaWNhIGJyYXNpbGVpcmEqDQoNCkNlbsOhcmlvIGRvIGNyw6lkaXRvIGRlIGNvbnN1bW8gbmEgYXRpdmlkYWRlIGVjb27DtG1pY2EgYnJhc2lsZWlyYQ0KDQpBIGRpbsOibWljYSBkbyBjcsOpZGl0byBjb25zdGl0dWkgdW0gZG9zIHBpbGFyZXMgZGEgYXRpdmlkYWRlIGVjb27DtG1pY2Egbm8gQnJhc2lsLCBmdW5jaW9uYW5kbyBjb21vIG1lY2FuaXNtbyByZWxldmFudGUgZGUgYW1wbGlmaWNhw6fDo28gZGEgZGVtYW5kYSBkb23DqXN0aWNhLiBBbyBmYWNpbGl0YXIgbyBhY2Vzc28gYSBmaW5hbmNpYW1lbnRvIHBhcmEgZmFtw61saWFzIGUgZW1wcmVzYXMsIG8gY3LDqWRpdG8gc3VzdGVudGEgbyBjb25zdW1vLCBjb250cmlidWkgcGFyYSBhIGV4cGFuc8OjbyBkYSBkZW1hbmRhIGFncmVnYWRhIGUgaW5mbHVlbmNpYSBkaXJldGFtZW50ZSBvIHJpdG1vIGRlIGNyZXNjaW1lbnRvIGVjb27DtG1pY28uDQoNCk5vIGNhc28gZGFzIGZhbcOtbGlhcywgbyBjcsOpZGl0byBhZmV0YSBkaXJldGFtZW50ZSBhIGNhcGFjaWRhZGUgZGUgY29uc3VtbyBhbyBwZXJtaXRpciBhIGFudGVjaXBhw6fDo28gZGUgZ2FzdG9zIGZ1dHVyb3MuIEVtIHBlcsOtb2RvcyBkZSBtZWxob3JhIGRvIG1lcmNhZG8gZGUgdHJhYmFsaG8gZSBhdW1lbnRvIGRhIHJlbmRhLCBhIGV4cGFuc8OjbyBkYXMgY29uY2Vzc8O1ZXMgdGVuZGUgYSByZWZvcsOnYXIgbyBjcmVzY2ltZW50byBkYSBkZW1hbmRhIGRvbcOpc3RpY2EuIEVtIG1vbWVudG9zIGRlIGRlc2FjZWxlcmHDp8OjbyBlY29uw7RtaWNhLCBwb3Igb3V0cm8gbGFkbywgYSByZXRyYcOnw6NvIGRvIGNyw6lkaXRvIGNvc3R1bWEgaW50ZW5zaWZpY2FyIGEgcGVyZGEgZGUgZGluYW1pc21vIGRhIGF0aXZpZGFkZS4NCg0KQSBhbsOhbGlzZSBjb25qdW50YSBkYSBtYXNzYSBkZSByZW5kaW1lbnRvIHJlYWwgaGFiaXR1YWwgZGFzIGZhbcOtbGlhcyBlIGRhcyBjb25jZXNzw7VlcyBkZSBjcsOpZGl0byBjb20gcmVjdXJzb3MgbGl2cmVzIHBhcmEgcGVzc29hcyBmw61zaWNhcyBzdWdlcmUgcXVlLCBlbSBkZXRlcm1pbmFkb3MgbW9tZW50b3MgZGEgZWNvbm9taWEgYnJhc2lsZWlyYSwgYSBkaW7Dom1pY2EgZG8gY3LDqWRpdG8gcG9kZSBhc3N1bWlyIGNhcsOhdGVyIGFudGVjZWRlbnRlIGVtIHJlbGHDp8OjbyDDoCBldm9sdcOnw6NvIGRhIHJlbmRhIGFncmVnYWRhLiBPYnNlcnZhLXNlIHF1ZSBwZXLDrW9kb3MgZGUgYWNlbGVyYcOnw6NvIG5hcyBjb25jZXNzw7VlcyB0ZW5kZW0gYSBwcmVjZWRlciBtb3ZpbWVudG9zIG1haXMgaW50ZW5zb3MgZGUgcmVjdXBlcmHDp8OjbyBkYSBtYXNzYSBzYWxhcmlhbCwgaW5kaWNhbmRvIHF1ZSBhIGV4cGFuc8OjbyBkbyBmaW5hbmNpYW1lbnRvIHBvZGUgYXR1YXIgY29tbyB1bSBkb3MgcHJpbWVpcm9zIHNpbmFpcyBkZSBtZWxob3JhIGRhIGRlbWFuZGEgZG9tw6lzdGljYS4NCg0KRW50cmUgMjAxNyBlIDIwMTksIHBvciBleGVtcGxvLCBhcyBjb25jZXNzw7VlcyBkZSBjcsOpZGl0byDDoHMgZmFtw61saWFzIGFwcmVzZW50YXJhbSB0cmFqZXTDs3JpYSBkZSBjcmVzY2ltZW50byBjb25zaXN0ZW50ZSwgc2FpbmRvIGRlIHBhdGFtYXJlcyBwcsOzeGltb3MgYSBSJDExMCBiaWxow7VlcyBtZW5zYWlzIHBhcmEgbsOtdmVpcyBzdXBlcmlvcmVzIGEgUiQxNTAgYmlsaMO1ZXMsIGVucXVhbnRvIGEgbWFzc2Egc2FsYXJpYWwgYXZhbsOnYXZhIGRlIGZvcm1hIG1haXMgZ3JhZHVhbC4gRXNzZSBjb21wb3J0YW1lbnRvIHN1Z2VyZSBxdWUgYSByZXRvbWFkYSBkbyBjb25zdW1vIG9jb3JyZXUgaW5pY2lhbG1lbnRlIHBvciBtZWlvIGRhIGFtcGxpYcOnw6NvIGRvIGNyw6lkaXRvLCBjb20gYSByZW5kYSByZWFnaW5kbyBkZSBtYW5laXJhIG1haXMgbGVudGEgYW8gbG9uZ28gZG8gcHJvY2Vzc28gZGUgcmVjdXBlcmHDp8OjbyBlY29uw7RtaWNhLg0KDQpEaW7Dom1pY2Egc2VtZWxoYW50ZSBwb2RlIHNlciBvYnNlcnZhZGEgbm8gcGVyw61vZG8gcG9zdGVyaW9yIGFvIGNob3F1ZSBkYSBwYW5kZW1pYS4gQXDDs3MgYSBmb3J0ZSBjb250cmHDp8OjbyBkZSAyMDIwLCBhcyBjb25jZXNzw7VlcyBkZSBjcsOpZGl0byDDoHMgcGVzc29hcyBmw61zaWNhcyByZXRvbWFyYW0gdHJhamV0w7NyaWEgZGUgZXhwYW5zw6NvIHJlbGF0aXZhbWVudGUgcsOhcGlkYSwgdWx0cmFwYXNzYW5kbyBSJDIwMCBiaWxow7VlcyBtZW5zYWlzIGVtIDIwMjEgZSBhbGNhbsOnYW5kbyBuw612ZWlzIHN1cGVyaW9yZXMgYSBSJDMwMCBiaWxow7VlcyBlbSAyMDI1LiBBIG1hc3NhIHNhbGFyaWFsIHJlYWwsIHBvciBzdWEgdmV6LCBhcHJlc2VudG91IHJlY3VwZXJhw6fDo28gbWFpcyBncmFkdWFsLCBhdmFuw6dhbmRvIGRlIGNlcmNhIGRlIFIkMjczIGJpbGjDtWVzIGVtIDIwMjEgcGFyYSBhcHJveGltYWRhbWVudGUgUiQzNjcgYmlsaMO1ZXMgYW8gZmluYWwgZGUgMjAyNS4NCg0KRXNzZSBkZXNjb21wYXNzbyB0ZW1wb3JhbCByZWZvcsOnYSBhIGhpcMOzdGVzZSBkZSBxdWUgbyBjcsOpZGl0byBwb2RlIGF0dWFyIGNvbW8gbWVjYW5pc21vIGRlIGFudGVjaXBhw6fDo28gZG8gY29uc3VtbywgcGVybWl0aW5kbyBxdWUgZmFtw61saWFzIGFqdXN0ZW0gc2V1cyBnYXN0b3MgYW50ZXMgZGEgY29uc29saWRhw6fDo28gcGxlbmEgZG8gY3Jlc2NpbWVudG8gZGEgcmVuZGEuDQoNCkRvIHBvbnRvIGRlIHZpc3RhIGVjb27DtG1pY28sIGVzc2UgY29tcG9ydGFtZW50byBwb2RlIHNlciBleHBsaWNhZG8gcGVsYSBtYWlvciBzZW5zaWJpbGlkYWRlIGRhcyBjb25jZXNzw7VlcyDDoHMgY29uZGnDp8O1ZXMgZmluYW5jZWlyYXMgZSDDoHMgZXhwZWN0YXRpdmFzLiBBbHRlcmHDp8O1ZXMgbmEgcGVyY2Vww6fDo28gZGUgcmlzY28sIG5hIGxpcXVpZGV6IGRvIHNpc3RlbWEgZmluYW5jZWlybyBvdSBuYXMgZXhwZWN0YXRpdmFzIGVtIHJlbGHDp8OjbyDDoCBwb2zDrXRpY2EgbW9uZXTDoXJpYSB0ZW5kZW0gYSBpbXBhY3RhciByYXBpZGFtZW50ZSBhIG9mZXJ0YSBlIGEgZGVtYW5kYSBwb3IgY3LDqWRpdG8sIGVucXVhbnRvIGEgZXZvbHXDp8OjbyBkbyBtZXJjYWRvIGRlIHRyYWJhbGhvIGUgZGEgcmVuZGEgb2NvcnJlIGRlIGZvcm1hIG1haXMgZ3JhZHVhbC4NCg0KQXNzaW0sIGEgZXhwYW5zw6NvIGRvIGNyw6lkaXRvIG7Do28gYXBlbmFzIHJlZmxldGUgYSBhdGl2aWRhZGUgZWNvbsO0bWljYSBjb3JyZW50ZSwgbWFzIHRhbWLDqW0gcG9kZSBzaW5hbGl6YXIgbXVkYW7Dp2FzIGZ1dHVyYXMgbm8gcml0bW8gZGEgZGVtYW5kYSBkb23DqXN0aWNhLg0KDQpPcyBkYWRvcyB1dGlsaXphZG9zIG5lc3RhIGFuw6FsaXNlIHPDo28gcHJvdmVuaWVudGVzIGRvIEJhbmNvIENlbnRyYWwgZG8gQnJhc2lsLCBwb3IgbWVpbyBkYXMgc8OpcmllcyBkZSBjb25jZXNzw7VlcyBkZSBjcsOpZGl0byBkbyBTaXN0ZW1hIEZpbmFuY2Vpcm8gTmFjaW9uYWwsIGUgZGEgSW5zdGl0dXRvIEJyYXNpbGVpcm8gZGUgR2VvZ3JhZmlhIGUgRXN0YXTDrXN0aWNhLCBhIHBhcnRpciBkYSBQTkFEIENvbnTDrW51YSwgcXVlIGZvcm5lY2UgYXMgaW5mb3JtYcOnw7VlcyBzb2JyZSBtYXNzYSBkZSByZW5kaW1lbnRvIHJlYWwgaGFiaXR1YWwgZGFzIGZhbcOtbGlhcy4NCg0KRGVzc2EgZm9ybWEsIG9zIGRhZG9zIHJlY2VudGVzIHN1Z2VyZW0gcXVlIGFzIGNvbmNlc3PDtWVzIMOgcyBmYW3DrWxpYXMgZGVzZW1wZW5oYW0gcGFwZWwgcmVsZXZhbnRlIGNvbW8gaW5kaWNhZG9yIGFudGVjZWRlbnRlIGRhIGRpbsOibWljYSBlY29uw7RtaWNhIGJyYXNpbGVpcmEuIEFvIGFtcGxpYXIgYSBjYXBhY2lkYWRlIGRlIGNvbnN1bW8gZW0gbW9tZW50b3MgZGUgbWVsaG9yYSBkYXMgY29uZGnDp8O1ZXMgZmluYW5jZWlyYXMsIG8gY3LDqWRpdG8gYXR1YSBjb21vIHZldG9yIGRlIHByb3BhZ2HDp8OjbyBkYSBhdGl2aWRhZGUsIHJlZm9yw6dhbmRvIG1vdmltZW50b3MgZGUgZXhwYW5zw6NvIGUgY29udHJpYnVpbmRvIHBhcmEgYSBldm9sdcOnw6NvIGRhIG1hc3NhIHNhbGFyaWFsIGFvIGxvbmdvIGRvIHRlbXBvLg0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShoaWdoY2hhcnRlcikNCmxpYnJhcnkobHVicmlkYXRlKQ0KDQojIENvbGV0YXIgZGFkb3MNCiMgMjg1NDU6IE1hc3NhIGRlIHJlbmRpbWVudG8gcmVhbCBoYWJpdHVhbCAoUiQgbWlsaMO1ZXMpDQpkYWRvc19yZW5kYSA8LSBnZXRfc2VyaWVzKDI4NTQ1LCBzdGFydF9kYXRlID0gIjIwMjAtMDEtMDEiLCBlbmRfZGF0ZSA9IFN5cy5EYXRlKCkpICU+JSANCiAgcmVuYW1lKE1hc3NhX3JlbmRhID0gYDI4NTQ1YCkNCg0KIyAyNDQ0NDogQ29uY2Vzc8O1ZXMgZGUgY3LDqWRpdG8gLSByZWN1cnNvcyBsaXZyZXMgLSBzYXpvbmFsbWVudGUgYWp1c3RhZGFzIChSJCBtaWxow7VlcykNCmRhZG9zX2NyZWRpdG8gPC0gZ2V0X3NlcmllcygyNDQ0NCwgc3RhcnRfZGF0ZSA9ICIyMDIwLTAxLTAxIiwgZW5kX2RhdGUgPSBTeXMuRGF0ZSgpKSAlPiUgDQogIHJlbmFtZShDcmVkaXRvID0gYDI0NDQ0YCkNCg0KIyBDb21iaW5hciBkYWRvcw0KZGFkb3NfY29tYmluYWRvcyA8LSBkYWRvc19yZW5kYSAlPiUNCiAgbGVmdF9qb2luKGRhZG9zX2NyZWRpdG8sIGJ5ID0gImRhdGUiKSAlPiUNCiAgbXV0YXRlKA0KICAgIGFubyA9IHllYXIoZGF0ZSksDQogICAgbWVzID0gbW9udGgoZGF0ZSwgbGFiZWwgPSBUUlVFLCBhYmJyID0gRkFMU0UpLA0KICAgIHRpbWVzdGFtcCA9IGRhdGV0aW1lX3RvX3RpbWVzdGFtcChkYXRlKSwNCiAgICAjIENvbnZlcnRlciBhbWJhcyBwYXJhIGJpbGjDtWVzICh2aXN1YWxpemHDp8OjbyBtYWlzIGxpbXBhKQ0KICAgIE1hc3NhX2JpbGhvZXMgPSByb3VuZChNYXNzYV9yZW5kYSAvIDEwMDAsIDEpLA0KICAgIENyZWRpdG9fYmlsaG9lcyA9IHJvdW5kKENyZWRpdG8gLyAxMDAwLCAxKQ0KICApICU+JQ0KICBzZWxlY3QoZGF0ZSwgYW5vLCBtZXMsIHRpbWVzdGFtcCwgTWFzc2FfYmlsaG9lcywgQ3JlZGl0b19iaWxob2VzLCBNYXNzYV9yZW5kYSwgQ3JlZGl0bykgJT4lDQogIGFycmFuZ2UoZGF0ZSkNCg0KIyBWZXJpZmljYXIgZGFkb3MNCmlmKG5yb3coZGFkb3NfY29tYmluYWRvcykgPT0gMCkgew0KICBzdG9wKCJEYWRvcyBuw6NvIGVuY29udHJhZG9zLiBWZXJpZmlxdWUgb3MgY8OzZGlnb3MuIikNCn0NCg0KIyBDYWxjdWxhciBsaW1pdGVzIHBhcmEgZWl4b3MNCnJlbmRhX21pbiA8LSBtaW4oZGFkb3NfY29tYmluYWRvcyRNYXNzYV9iaWxob2VzLCBuYS5ybSA9IFRSVUUpDQpyZW5kYV9tYXggPC0gbWF4KGRhZG9zX2NvbWJpbmFkb3MkTWFzc2FfYmlsaG9lcywgbmEucm0gPSBUUlVFKQ0KY3JlZGl0b19taW4gPC0gbWluKGRhZG9zX2NvbWJpbmFkb3MkQ3JlZGl0b19iaWxob2VzLCBuYS5ybSA9IFRSVUUpDQpjcmVkaXRvX21heCA8LSBtYXgoZGFkb3NfY29tYmluYWRvcyRDcmVkaXRvX2JpbGhvZXMsIG5hLnJtID0gVFJVRSkNCg0KIyBNYXJnZW0gZGUgNSUNCnJlbmRhX3JhbmdlIDwtIHJlbmRhX21heCAtIHJlbmRhX21pbg0KY3JlZGl0b19yYW5nZSA8LSBjcmVkaXRvX21heCAtIGNyZWRpdG9fbWluDQoNCiMgQ3JpYXIgZ3LDoWZpY28gY29tIGR1YXMgc8OpcmllcyBlbSBiaWxow7Vlcw0KaGlnaGNoYXJ0KHR5cGUgPSAic3RvY2siKSAlPiUNCiAgIyBTw6lyaWUgMTogTWFzc2EgZGUgcmVuZGEgKGNvbHVuYXMpIC0gZWl4byBlc3F1ZXJkbw0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19jb21iaW5hZG9zICU+JSBzZWxlY3QodGltZXN0YW1wLCBNYXNzYV9iaWxob2VzKSksDQogICAgdHlwZSA9ICJjb2x1bW4iLA0KICAgIG5hbWUgPSAiTWFzc2EgU2FsYXJpYWwgKFIkIGJpbGjDtWVzKSIsDQogICAgY29sb3IgPSAiI2ZlYjcxMiIsICAjIFZlcmRlDQogICAgeUF4aXMgPSAwLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxLCB2YWx1ZVN1ZmZpeCA9ICIgYmlsaMO1ZXMiKQ0KICApICU+JQ0KICAjIFPDqXJpZSAyOiBDb25jZXNzw7VlcyBkZSBjcsOpZGl0byAobGluaGEpIC0gZWl4byBkaXJlaXRvDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX2NvbWJpbmFkb3MgJT4lIHNlbGVjdCh0aW1lc3RhbXAsIENyZWRpdG9fYmlsaG9lcykpLA0KICAgIHR5cGUgPSAibGluZSIsDQogICAgbmFtZSA9ICJDb25jZXNzw7VlcyBkZSBDcsOpZGl0byAoUiQgYmlsaMO1ZXMpIiwNCiAgICBjb2xvciA9ICIjMDIwMjNjIiwgICMgQXp1bA0KICAgIGxpbmVXaWR0aCA9IDIsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gVFJVRSwgcmFkaXVzID0gMyksDQogICAgeUF4aXMgPSAxLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxLCB2YWx1ZVN1ZmZpeCA9ICIgYmlsaMO1ZXMiKQ0KICApICU+JQ0KICAjIENvbmZpZ3VyYXIgZWl4b3MgWSBkdWFpcyAoYW1ib3MgZW0gYmlsaMO1ZXMpDQogIGhjX3lBeGlzX211bHRpcGxlcygNCiAgICBsaXN0KA0KICAgICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiTWFzc2EgU2FsYXJpYWwgKFIkIGJpbGjDtWVzKSIpLA0KICAgICAgb3Bwb3NpdGUgPSBGQUxTRSwNCiAgICAgIGxhYmVscyA9IGxpc3QoZm9ybWF0ID0gInt2YWx1ZX0gYmkiKSwNCiAgICAgIG1pbiA9IGZsb29yKHJlbmRhX21pbiAtIDAuMDUgKiByZW5kYV9yYW5nZSksDQogICAgICBtYXggPSBjZWlsaW5nKHJlbmRhX21heCArIDAuMDUgKiByZW5kYV9yYW5nZSkNCiAgICApLA0KICAgIGxpc3QoDQogICAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICJDb25jZXNzw7VlcyBkZSBDcsOpZGl0byAoUiQgYmlsaMO1ZXMpIiksDQogICAgICBvcHBvc2l0ZSA9IFRSVUUsDQogICAgICBsYWJlbHMgPSBsaXN0KGZvcm1hdCA9ICJ7dmFsdWV9IGJpIiksDQogICAgICBtaW4gPSBmbG9vcihjcmVkaXRvX21pbiAtIDAuMDUgKiBjcmVkaXRvX3JhbmdlKSwNCiAgICAgIG1heCA9IGNlaWxpbmcoY3JlZGl0b19tYXggKyAwLjA1ICogY3JlZGl0b19yYW5nZSkNCiAgICApDQogICkgJT4lDQogIGhjX3hBeGlzKA0KICAgIHR5cGUgPSAnZGF0ZXRpbWUnLA0KICAgIGxhYmVscyA9IGxpc3QoZm9ybWF0ID0gJ3t2YWx1ZTolYiAlWX0nKQ0KICApICU+JQ0KICBoY190aXRsZSh0ZXh0ID0gIlJlbmRhIHZzLiBNZXJjYWRvIGRlIENyw6lkaXRvIikgJT4lDQogIGhjX3N1YnRpdGxlKHRleHQgPSAiTWFzc2EgU2FsYXJpYWwgZSBDb25jZXNzw7VlcyBkZSBDcsOpZGl0byAoUiQgYmlsaMO1ZXMpIC0gRGFkb3MgY29tIGFqdXN0ZSBzYXpvbmFsIikgJT4lDQogIGhjX2NyZWRpdHMoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgdGV4dCA9ICJGb250ZTogQmFuY28gQ2VudHJhbCBkbyBCcmFzaWwgKFNHUyAtIEPDs2RpZ29zOiAyODU0NSwgMjQ0NDQpIg0KICApICU+JQ0KICBoY19yYW5nZVNlbGVjdG9yKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIGJ1dHRvbnMgPSBsaXN0KA0KICAgICAgbGlzdCh0eXBlID0gJ3llYXInLCBjb3VudCA9IDEsIHRleHQgPSAnMVknKSwNCiAgICAgIGxpc3QodHlwZSA9ICd5ZWFyJywgY291bnQgPSAyLCB0ZXh0ID0gJzJZJyksDQogICAgICBsaXN0KHR5cGUgPSAneWVhcicsIGNvdW50ID0gMywgdGV4dCA9ICczWScpLA0KICAgICAgbGlzdCh0eXBlID0gJ2FsbCcsIHRleHQgPSAnVG9kbyBwZXLDrW9kbycpDQogICAgKSwNCiAgICBzZWxlY3RlZCA9IDINCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBzaGFyZWQgPSBUUlVFLA0KICAgIGhlYWRlckZvcm1hdCA9ICc8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMnB4Ij48Yj57cG9pbnQua2V5fTwvYj48L3NwYW4+PGJyLz4nLA0KICAgIHBvaW50Rm9ybWF0ID0gJzxzcGFuIHN0eWxlPSJjb2xvcjp7c2VyaWVzLmNvbG9yfSI+4pePPC9zcGFuPiB7c2VyaWVzLm5hbWV9OiA8Yj5SJCB7cG9pbnQueTouMWZ9IGJpbGjDtWVzPC9iPjxici8+Jw0KICApICU+JQ0KICBoY19sZWdlbmQoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSIsDQogICAgbGF5b3V0ID0gImhvcml6b250YWwiDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIGNvbHVtbiA9IGxpc3QoDQogICAgICBwb2ludFBhZGRpbmcgPSAwLjEsDQogICAgICBncm91cFBhZGRpbmcgPSAwLjA1LA0KICAgICAgYm9yZGVyV2lkdGggPSAwLjUNCiAgICApLA0KICAgIGxpbmUgPSBsaXN0KA0KICAgICAgYW5pbWF0aW9uID0gVFJVRSwNCiAgICAgIGNvbm5lY3ROdWxscyA9IFRSVUUNCiAgICApDQogICkNCmBgYA0KIyMgKkFuw6FsaXNlIGRvIE1lcmNhZG8gZGUgVHJhYmFsaG8qDQoNCkEgZGluw6JtaWNhIGRvIG1lcmNhZG8gZGUgdHJhYmFsaG8gdGVtIGRlc2VtcGVuaGFkbyBwYXBlbCBjZW50cmFsIG5hIHRyYWpldMOzcmlhIHJlY2VudGUgZGEgYXRpdmlkYWRlIGVjb27DtG1pY2EgYnJhc2lsZWlyYS4gQSBldm9sdcOnw6NvIGRhIHRheGEgZGUgZGVzb2N1cGHDp8OjbywgZGEgcG9wdWxhw6fDo28gbmEgZm9yw6dhIGRlIHRyYWJhbGhvIGUgZGEgbWFzc2Egc2FsYXJpYWwgcmVhbCByZXZlbGEgbsOjbyBhcGVuYXMgb3MgZWZlaXRvcyBkYXMgb3NjaWxhw6fDtWVzIGVjb27DtG1pY2FzIGVuZnJlbnRhZGFzIHBlbG8gcGHDrXMgbmEgw7psdGltYSBkw6ljYWRhLCBtYXMgdGFtYsOpbSBvcyBmdW5kYW1lbnRvcyBxdWUgc3VzdGVudGFtIG8gbW9tZW50byBhdHVhbCBkYSBlY29ub21pYS4NCg0KRW50cmUgMjAxNSBlIDIwMTcsIGEgZWNvbm9taWEgYnJhc2lsZWlyYSBlbmZyZW50b3UgZm9ydGUgY29udHJhw6fDo28sIHJlZmxldGlkYSBuYSBkZXRlcmlvcmHDp8OjbyBhYnJ1cHRhIGRvIG1lcmNhZG8gZGUgdHJhYmFsaG8uIEEgdGF4YSBkZSBkZXNvY3VwYcOnw6NvIGF2YW7Dp291IGRlIGFwcm94aW1hZGFtZW50ZSA2LDUlIHBhcmEgcGF0YW1hciBwcsOzeGltbyBkZSAxNCUsIGNvbmZpZ3VyYW5kbyB1bWEgZHVwbGljYcOnw6NvIGRvIGRlc2VtcHJlZ28gZW0gY3VydG8gaW50ZXJ2YWxvIGRlIHRlbXBvLiBFc3NlIG1vdmltZW50byBmb2kgYWNvbXBhbmhhZG8gcG9yIGVuZnJhcXVlY2ltZW50byBkYSByZW5kYSBhZ3JlZ2FkYSBlIHJldHJhw6fDo28gZG8gY29uc3VtbyBkYXMgZmFtw61saWFzLg0KDQpBaW5kYSBxdWUgYSBwb3B1bGHDp8OjbyBuYSBmb3LDp2EgZGUgdHJhYmFsaG8gdGVuaGEgbWFudGlkbyB0ZW5kw6puY2lhIGVzdHJ1dHVyYWwgZGUgY3Jlc2NpbWVudG8sIG8gY2hvcXVlIHJlY2Vzc2l2byBzZSB0cmFkdXppdSBlbSBpbmNhcGFjaWRhZGUgZGUgYWJzb3LDp8OjbyBkZXNzYSBtw6NvIGRlIG9icmEsIGFtcGxpYW5kbyBhIG9jaW9zaWRhZGUgZGEgZWNvbm9taWEgZSByZWR1emluZG8gbyBkaW5hbWlzbW8gZGEgZGVtYW5kYSBkb23DqXN0aWNhLg0KDQpOb3MgYW5vcyBzdWJzZXF1ZW50ZXMsIG9ic2Vydm91LXNlIGVzdGFiaWxpemHDp8OjbyBkbyBkZXNlbXByZWdvLCBwb3LDqW0gYWluZGEgZW0gbsOtdmVpcyBlbGV2YWRvcywgc3VwZXJpb3JlcyBhIDExJS4gQSByZWN1cGVyYcOnw6NvIGVjb27DtG1pY2EgbW9zdHJvdS1zZSBtb2RlcmFkYSBlIGluc3VmaWNpZW50ZSBwYXJhIHByb21vdmVyIHJlYWJzb3LDp8OjbyByw6FwaWRhIGRhIG3Do28gZGUgb2JyYSBkZXNlbXByZWdhZGEuIEEgbWFzc2Egc2FsYXJpYWwgYXByZXNlbnRvdSBjcmVzY2ltZW50byBsaW1pdGFkbywgcmVzdHJpbmdpbmRvIGEgY2FwYWNpZGFkZSBkZSBhY2VsZXJhw6fDo28gZG8gY29uc3Vtby4NCg0KTm9zIMO6bHRpbW9zIGFub3MsIGVudHJldGFudG8sIG8gbWVyY2FkbyBkZSB0cmFiYWxobyBhcHJlc2VudG91IG1lbGhvcmEgc2lnbmlmaWNhdGl2YS4gQSB0YXhhIGRlIGRlc29jdXBhw6fDo28gcmVjdW91IGRlIGZvcm1hIGNvbnNpc3RlbnRlIGUgZW5jZXJyb3UgbyBhbm8gZW0gYXByb3hpbWFkYW1lbnRlIDUsMSUsIG7DrXZlbCBoaXN0b3JpY2FtZW50ZSBiYWl4byBwYXJhIG9zIHBhZHLDtWVzIGRhIGVjb25vbWlhIGJyYXNpbGVpcmEuDQoNCkVzc2UgbW92aW1lbnRvIGVsZXZvdSBhIHJlbmRhIGRpc3BvbsOtdmVsIGRhcyBmYW3DrWxpYXMgZSBmb3J0YWxlY2V1IG8gY29uc3VtbyBkb23DqXN0aWNvLCBwcmluY2lwYWwgY29tcG9uZW50ZSBkbyBQSUIgYnJhc2lsZWlyby4gTyBtZXJjYWRvIGRlIHRyYWJhbGhvIGRlaXhvdSBkZSBhdHVhciBjb21vIHJlc3RyacOnw6NvIGFvIGNyZXNjaW1lbnRvIGUgcGFzc291IGEgZnVuY2lvbmFyIGNvbW8gbWVjYW5pc21vIGRlIHByb3BhZ2HDp8OjbyBkYSBhdGl2aWRhZGUgZWNvbsO0bWljYS4NCg0KQ29udHVkbywgYSBlY29ub21pYSBvcGVyYSBhdHVhbG1lbnRlIGNvbSBncmF1IHJlbGF0aXZhbWVudGUgcmVkdXppZG8gZGUgb2Npb3NpZGFkZS4gQWzDqW0gZG8gYmFpeG8gbsOtdmVsIGRlIGRlc2VtcHJlZ28sIGluZGljYWRvcmVzIGRlIHV0aWxpemHDp8OjbyBkYSBjYXBhY2lkYWRlIGluc3RhbGFkYSBkYSBpbmTDunN0cmlhIGFwb250YW0gcGFyYSBuw612ZWlzIHByw7N4aW1vcyBkYSBtw6lkaWEgaGlzdMOzcmljYSwgc2VndW5kbyBkYWRvcyBkYSBDb25mZWRlcmHDp8OjbyBOYWNpb25hbCBkYSBJbmTDunN0cmlhLiBBIHRheGEgZGUgdXRpbGl6YcOnw6NvIGRhIGNhcGFjaWRhZGUgaW5zdGFsYWRhIHRlbSBvc2NpbGFkbyBlbSB0b3JubyBkZSA3OCUgYSA4MCUsIGluZGljYW5kbyByZWR1w6fDo28gZGEgb2Npb3NpZGFkZSBwcm9kdXRpdmEuDQpFc3NlIGNlbsOhcmlvIGltcGxpY2E6DQptYWlvciBwcmVzc8OjbyBwb3RlbmNpYWwgc29icmUgc2Fsw6FyaW9zLCByZWR1w6fDo28gZGEgbWFyZ2VtIGRlIGNyZXNjaW1lbnRvIHZpYSBhYnNvcsOnw6NvIGFkaWNpb25hbCBkZSB0cmFiYWxoYWRvcmVzLCBtYWlvciBkZXBlbmTDqm5jaWEgZGUgZ2FuaG9zIGRlIHByb2R1dGl2aWRhZGUgZSBpbnZlc3RpbWVudG8gcGFyYSBzdXN0ZW50YXIgYSBleHBhbnPDo28gZnV0dXJhDQpOZXNzZSBjb250ZXh0bywgYSBjb250aW51aWRhZGUgZG8gY3Jlc2NpbWVudG8gZWNvbsO0bWljbyB0ZW5kZSBhIGV4aWdpciB1bWEgdHJhbnNpw6fDo28gcGFyYSB1bSBtb2RlbG8gbWFpcyBpbnRlbnNpdm8gZW0gcHJvZHV0aXZpZGFkZSwgaW52ZXN0aW1lbnRvIGUgZWZpY2nDqm5jaWEgYWxvY2F0aXZhLg0KYGBge3J9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCg0KIyBDb2xldGFyIGRhZG9zDQojIElCQy1CciAoYXRpdmlkYWRlIGVjb27DtG1pY2EpIC0gY8OzZGlnbyAyNDM2Mw0KZGFkb3NfaWJjIDwtIGdldF9zZXJpZXMoMjQzNjMsIHN0YXJ0X2RhdGUgPSAiMjAyMC0wMS0wMSIsIGVuZF9kYXRlID0gU3lzLkRhdGUoKSkgJT4lIA0KICByZW5hbWUoSUJDID0gYDI0MzYzYCkNCg0KIyBUYXhhIGRlIGRlc29jdXBhw6fDo28gLSBQTkFEQyAtIGPDs2RpZ28gMjQzNjkNCmRhZG9zX2Rlc2VtcHJlZ28gPC0gZ2V0X3NlcmllcygyNDM2OSwgc3RhcnRfZGF0ZSA9ICIyMDIwLTAxLTAxIiwgZW5kX2RhdGUgPSBTeXMuRGF0ZSgpKSAlPiUgDQogIHJlbmFtZShEZXNlbXByZWdvID0gYDI0MzY5YCkNCg0KIyBDb21iaW5hciBkYWRvcw0KZGFkb3NfY29tYmluYWRvcyA8LSBkYWRvc19pYmMgJT4lDQogIGxlZnRfam9pbihkYWRvc19kZXNlbXByZWdvLCBieSA9ICJkYXRlIikgJT4lDQogIG11dGF0ZSgNCiAgICBhbm8gPSB5ZWFyKGRhdGUpLA0KICAgIG1lcyA9IG1vbnRoKGRhdGUsIGxhYmVsID0gVFJVRSwgYWJiciA9IEZBTFNFKSwNCiAgICB0aW1lc3RhbXAgPSBkYXRldGltZV90b190aW1lc3RhbXAoZGF0ZSkNCiAgKSAlPiUNCiAgc2VsZWN0KGRhdGUsIGFubywgbWVzLCB0aW1lc3RhbXAsIElCQywgRGVzZW1wcmVnbykgJT4lDQogIGFycmFuZ2UoZGF0ZSkNCg0KIyBWZXJpZmljYXIgZGFkb3MNCmlmKG5yb3coZGFkb3NfY29tYmluYWRvcykgPT0gMCkgew0KICBzdG9wKCJEYWRvcyBuw6NvIGVuY29udHJhZG9zLiBWZXJpZmlxdWUgb3MgY8OzZGlnb3MuIikNCn0NCg0KIyBDYWxjdWxhciBsaW1pdGVzIHBhcmEgZWl4b3MNCmliY19taW4gPC0gbWluKGRhZG9zX2NvbWJpbmFkb3MkSUJDLCBuYS5ybSA9IFRSVUUpDQppYmNfbWF4IDwtIG1heChkYWRvc19jb21iaW5hZG9zJElCQywgbmEucm0gPSBUUlVFKQ0KZGVzZW1wcmVnb19taW4gPC0gbWluKGRhZG9zX2NvbWJpbmFkb3MkRGVzZW1wcmVnbywgbmEucm0gPSBUUlVFKQ0KZGVzZW1wcmVnb19tYXggPC0gbWF4KGRhZG9zX2NvbWJpbmFkb3MkRGVzZW1wcmVnbywgbmEucm0gPSBUUlVFKQ0KDQojIE1hcmdlbSBkZSA1JQ0KaWJjX3JhbmdlIDwtIGliY19tYXggLSBpYmNfbWluDQpkZXNlbXByZWdvX3JhbmdlIDwtIGRlc2VtcHJlZ29fbWF4IC0gZGVzZW1wcmVnb19taW4NCg0KIyBDcmlhciBncsOhZmljbw0KaGlnaGNoYXJ0KHR5cGUgPSAic3RvY2siKSAlPiUNCiAgIyBTw6lyaWUgMTogSUJDLUJyIChsaW5oYSkgLSBlaXhvIGVzcXVlcmRvDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX2NvbWJpbmFkb3MgJT4lIHNlbGVjdCh0aW1lc3RhbXAsIElCQykpLA0KICAgIHR5cGUgPSAibGluZSIsDQogICAgbmFtZSA9ICJJQkMtQnIgKGF0aXZpZGFkZSBlY29uw7RtaWNhKSIsDQogICAgY29sb3IgPSAiIzAyMDIzYyIsICAjIEF6dWwNCiAgICBsaW5lV2lkdGggPSAyLA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IEZBTFNFKSwNCiAgICB5QXhpcyA9IDAsDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDEpDQogICkgJT4lDQogICMgU8OpcmllIDI6IFRheGEgZGUgZGVzZW1wcmVnbyAobGluaGEpIC0gZWl4byBkaXJlaXRvDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX2NvbWJpbmFkb3MgJT4lIHNlbGVjdCh0aW1lc3RhbXAsIERlc2VtcHJlZ28pKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiVGF4YSBkZSBEZXNlbXByZWdvICglKSIsDQogICAgY29sb3IgPSAiI2ZlYjcxMiIsDQogICAgbGluZVdpZHRoID0gMiwNCiAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBUUlVFLCByYWRpdXMgPSAyKSwNCiAgICB5QXhpcyA9IDEsDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDEsIHZhbHVlU3VmZml4ID0gIiUiKQ0KICApICU+JQ0KICAjIENvbmZpZ3VyYXIgZWl4b3MgWSBkdWFpcyAoZWl4byBkbyBkZXNlbXByZWdvIGludmVydGlkbykNCiAgaGNfeUF4aXNfbXVsdGlwbGVzKA0KICAgIGxpc3QoDQogICAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICJJQkMtQnIgKMOtbmRpY2UpIiksDQogICAgICBvcHBvc2l0ZSA9IEZBTFNFLA0KICAgICAgbGFiZWxzID0gbGlzdChmb3JtYXQgPSAie3ZhbHVlfSIpLA0KICAgICAgbWluID0gZmxvb3IoaWJjX21pbiAtIDAuMDUgKiBpYmNfcmFuZ2UpLA0KICAgICAgbWF4ID0gY2VpbGluZyhpYmNfbWF4ICsgMC4wNSAqIGliY19yYW5nZSkNCiAgICApLA0KICAgIGxpc3QoDQogICAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICJUYXhhIGRlIERlc2VtcHJlZ28gKCUpIiksDQogICAgICBvcHBvc2l0ZSA9IFRSVUUsDQogICAgICBsYWJlbHMgPSBsaXN0KGZvcm1hdCA9ICJ7dmFsdWV9JSIpLA0KICAgICAgbWluID0gZmxvb3IoZGVzZW1wcmVnb19taW4gLSAwLjA1ICogZGVzZW1wcmVnb19yYW5nZSksDQogICAgICBtYXggPSBjZWlsaW5nKGRlc2VtcHJlZ29fbWF4ICsgMC4wNSAqIGRlc2VtcHJlZ29fcmFuZ2UpLA0KICAgICAgcmV2ZXJzZWQgPSBUUlVFICAjIElOVkVSVEUgTyBFSVhPOiBkZXNlbXByZWdvIGNhaW5kbyA9IGxpbmhhIHN1YmluZG8NCiAgICApDQogICkgJT4lDQogIGhjX3hBeGlzKA0KICAgIHR5cGUgPSAnZGF0ZXRpbWUnLA0KICAgIGxhYmVscyA9IGxpc3QoZm9ybWF0ID0gJ3t2YWx1ZTolYiAlWX0nKQ0KICApICU+JQ0KICBoY190aXRsZSh0ZXh0ID0gIkF0aXZpZGFkZSBFY29uw7RtaWNhIHZzLiBNZXJjYWRvIGRlIFRyYWJhbGhvIikgJT4lDQogIGhjX3N1YnRpdGxlKHRleHQgPSAiSUJDLUJyICjDrW5kaWNlKSBlIFRheGEgZGUgRGVzZW1wcmVnbyAoJSkgLSBEYWRvcyBtZW5zYWlzIikgJT4lDQogIGhjX2NyZWRpdHMoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgdGV4dCA9ICJGb250ZTogQmFuY28gQ2VudHJhbCBkbyBCcmFzaWwgKGPDs2QuIDI0MzYzKSBlIElCR0UvUE5BREMgKGPDs2QuIDI0MzY5KSINCiAgKSAlPiUNCiAgaGNfcmFuZ2VTZWxlY3RvcigNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBidXR0b25zID0gbGlzdCgNCiAgICAgIGxpc3QodHlwZSA9ICd5ZWFyJywgY291bnQgPSAxLCB0ZXh0ID0gJzFZJyksDQogICAgICBsaXN0KHR5cGUgPSAneWVhcicsIGNvdW50ID0gMiwgdGV4dCA9ICcyWScpLA0KICAgICAgbGlzdCh0eXBlID0gJ3llYXInLCBjb3VudCA9IDMsIHRleHQgPSAnM1knKSwNCiAgICAgIGxpc3QodHlwZSA9ICdhbGwnLCB0ZXh0ID0gJ1RvZG8gcGVyw61vZG8nKQ0KICAgICksDQogICAgc2VsZWN0ZWQgPSAyDQogICkgJT4lDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICBoZWFkZXJGb3JtYXQgPSAnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJweCI+PGI+e3BvaW50LmtleX08L2I+PC9zcGFuPjxici8+JywNCiAgICBwb2ludEZvcm1hdCA9ICc8c3BhbiBzdHlsZT0iY29sb3I6e3Nlcmllcy5jb2xvcn0iPuKXjzwvc3Bhbj4ge3Nlcmllcy5uYW1lfTogPGI+e3BvaW50Lnk6LjFmfXtzZXJpZXMudG9vbHRpcE9wdGlvbnMudmFsdWVTdWZmaXh9PC9iPjxici8+Jw0KICApICU+JQ0KICBoY19sZWdlbmQoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSIsDQogICAgbGF5b3V0ID0gImhvcml6b250YWwiDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIGxpbmUgPSBsaXN0KA0KICAgICAgYW5pbWF0aW9uID0gVFJVRSwNCiAgICAgIGNvbm5lY3ROdWxscyA9IFRSVUUNCiAgICApDQogICkNCmBgYA0KIyMgKlJlbmRhIGUgQ29uc3VtbyBkYXMgRmFtw61saWFzKg0KDQpSZW5kYSBlIENvbnN1bW8gZGFzIEZhbcOtbGlhcw0KDQpBY2VyY2EgZG8gY29uc3VtbyBlIGRhIHJlbmRhIGRhcyBmYW3DrWxpYXMsIGFwZXNhciBkZSB1bSBjZW7DoXJpbyBkZSBqdXJvcyBlbGV2YWRvcywgbyBjb25zdW1vIGRvbcOpc3RpY28gbWFudGV2ZS1zZSByZWxhdGl2YW1lbnRlIHJlc2lsaWVudGUgYW8gbG9uZ28gZG8gcGVyw61vZG8sIHN1c3RlbnRhZG8gcHJpbmNpcGFsbWVudGUgcG9yIHVtIG1lcmNhZG8gZGUgdHJhYmFsaG8gYXF1ZWNpZG8gZSBwb3IgZ2FuaG9zIHJlYWlzIGRlIHJlbmRhLg0KDQpEYWRvcyByZWNlbnRlcyBpbmRpY2FtIHF1ZSBhIHRheGEgZGUgZGVzZW1wcmVnbyBubyBCcmFzaWwgZW5jZXJyb3UgbyBhbm8gZW0gYXByb3hpbWFkYW1lbnRlIDUsMSUsIHNlZ3VuZG8gbyBJbnN0aXR1dG8gQnJhc2lsZWlybyBkZSBHZW9ncmFmaWEgZSBFc3RhdMOtc3RpY2EsIGVucXVhbnRvIGEgbWFzc2EgZGUgcmVuZGltZW50byByZWFsIGhhYml0dWFsIGRvIHRyYWJhbGhvIGFwcmVzZW50b3UgY3Jlc2NpbWVudG8gY29uc2lzdGVudGUsIHJlZmxldGluZG8gdGFudG8gYSBleHBhbnPDo28gZG8gZW1wcmVnbyBxdWFudG8gYSByZWN1cGVyYcOnw6NvIGRvIHBvZGVyIGRlIGNvbXByYSBkYSBwb3B1bGHDp8Ojby4NCg0KRXNzZSBhdmFuw6dvIGRhIHJlbmRhIHJlYWwgdGVuZGUgYSBzdXN0ZW50YXIgbyBjb25zdW1vIGRhcyBmYW3DrWxpYXMgbWVzbW8gZW0gdW0gYW1iaWVudGUgZGUgY3LDqWRpdG8gbWFpcyByZXN0cml0aXZvLCB1bWEgdmV6IHF1ZSBwYXJjZWxhIHJlbGV2YW50ZSBkbyBjb25zdW1vIGRvbcOpc3RpY28gZXN0w6EgYXNzb2NpYWRhIMOgIHJlbmRhIGNvcnJlbnRlLg0KDQpPdXRybyBmYXRvciByZWxldmFudGUgZm9pIG8gYXJyZWZlY2ltZW50byBkYSBpbmZsYcOnw6NvIGRlIGFsaW1lbnRvcywgcXVlIGNvbnRyaWJ1aXUgcGFyYSByZWR1emlyIHByZXNzw7VlcyBzb2JyZSBvIG9yw6dhbWVudG8gZGFzIGZhbcOtbGlhcy4gQSBjb21iaW5hw6fDo28gZGUgY29uZGnDp8O1ZXMgY2xpbcOhdGljYXMgbWFpcyBmYXZvcsOhdmVpcyBwYXJhIGEgcHJvZHXDp8OjbyBhZ3LDrWNvbGEsIGp1bnRhbWVudGUgY29tIHVtIGPDom1iaW8gcmVsYXRpdmFtZW50ZSBlc3TDoXZlbCwgYWp1ZG91IGEgY29udGVyIG8gY3VzdG8gZGUgaXRlbnMgYWxpbWVudMOtY2lvcyBhbyBsb25nbyBkbyBhbm8sIGxpYmVyYW5kbyBwYXJjZWxhIG1haW9yIGRhIHJlbmRhIGRpc3BvbsOtdmVsIHBhcmEgb3V0cm9zIHRpcG9zIGRlIGNvbnN1bW8uDQoNCkVzc2UgbW92aW1lbnRvIHRldmUgaW1wYWN0byBkaXJldG8gc29icmUgaW5kaWNhZG9yZXMgZGUgYXRpdmlkYWRlIGxpZ2Fkb3MgYW8gY29uc3VtbywgZXNwZWNpYWxtZW50ZSBubyB2YXJlam8gYW1wbGlhZG8uDQoNCkNvbW8gcmVmbGV4byBkZXNzZXMgZmF0b3JlcywgaW5kaWNhZG9yZXMgZGUgY29uc3VtbyBtb3N0cmFyYW0gZGVzZW1wZW5obyBwb3NpdGl2byBubyBmaW5hbCBkbyBhbm8uIEVtIGRlemVtYnJvLCBvIGNvbnN1bW8gYXZhbsOnb3UgMTUsNjklLCByZWdpc3RyYW5kbyBjcmVzY2ltZW50byBleHByZXNzaXZvIGVtIGNvbXBhcmHDp8OjbyBhbyBtZXNtbyBwZXLDrW9kbyBkZSAyMDI0LCByZWZvcsOnYW5kbyBhIGlkZWlhIGRlIHF1ZSBhIGNvbWJpbmHDp8OjbyBlbnRyZSBleHBhbnPDo28gZG8gZW1wcmVnbywgcmVjdXBlcmHDp8OjbyBkYSByZW5kYSByZWFsIGUgZGVzYWNlbGVyYcOnw6NvIGluZmxhY2lvbsOhcmlhIGNvbnRyaWJ1aXUgcGFyYSBzdXN0ZW50YXIgYSBkZW1hbmRhIGRvbcOpc3RpY2EgbWVzbW8gZW0gdW0gYW1iaWVudGUgZGUgcG9sw610aWNhIG1vbmV0w6FyaWEgYWluZGEgcmVzdHJpdGl2YS4NCg0KQ29udHVkbywgw6kgaW1wb3J0YW50ZSBjb25zaWRlcmFyIHF1ZSAyMDI2IHNlcsOhIHVtIGFubyBlbGVpdG9yYWwsIG8gcXVlIGhpc3RvcmljYW1lbnRlIHRlbmRlIGEgZWxldmFyIG8gZ3JhdSBkZSBpbmNlcnRlemEgZWNvbsO0bWljYSBubyBCcmFzaWwuIEVwaXPDs2Rpb3MgcGFzc2Fkb3MgaWx1c3RyYW0gZXNzZSBwYWRyw6NvLg0KDQpFbSAyMDE0LCBwb3IgZXhlbXBsbywgbyBwcm9jZXNzbyBlbGVpdG9yYWwgZm9pIGFjb21wYW5oYWRvIHBvciBkZXRlcmlvcmHDp8OjbyBkYXMgZXhwZWN0YXRpdmFzIGZpc2NhaXMgZSBhdW1lbnRvIGRhIHZvbGF0aWxpZGFkZSBub3MgbWVyY2Fkb3MgZmluYW5jZWlyb3MsIGNvbnRyaWJ1aW5kbyBwYXJhIGEgZGVzYWNlbGVyYcOnw6NvIGRhIGF0aXZpZGFkZSBlY29uw7RtaWNhLiBPIFBJQiBjcmVzY2V1IGFwZW5hcyAwLDUlIG5hcXVlbGUgYW5vLCBhcMOzcyBleHBhbnPDo28gZGUgMywwJSBlbSAyMDEzLg0KDQpEZSBmb3JtYSBzZW1lbGhhbnRlLCBlbSAyMDE4LCBvIHBlcsOtb2RvIGVsZWl0b3JhbCB0YW1iw6ltIGZvaSBtYXJjYWRvIHBvciBlbGV2YWRhIGluY2VydGV6YSBwb2zDrXRpY2EgZSB2b2xhdGlsaWRhZGUgY2FtYmlhbCwgbGV2YW5kbyBlbXByZXNhcyBlIGludmVzdGlkb3JlcyBhIGFkb3RhciBwb3N0dXJhIG1haXMgY2F1dGVsb3NhIGVtIHJlbGHDp8OjbyBhIGludmVzdGltZW50b3MgZSBkZWNpc8O1ZXMgZGUgY29uc3VtbyBkZSBtYWlvciB2YWxvci4NCg0KRXNzZSBjb21wb3J0YW1lbnRvIG9jb3JyZSBwb3JxdWUgYW5vcyBlbGVpdG9yYWlzIGF1bWVudGFtIGEgaW5jZXJ0ZXphIHNvYnJlIGEgY29uZHXDp8OjbyBmdXR1cmEgZGEgcG9sw610aWNhIGVjb27DtG1pY2EsIGVzcGVjaWFsbWVudGUgZW0gcmVsYcOnw6NvIMOgIHBvbMOtdGljYSBmaXNjYWwsIHJlZm9ybWFzIGVzdHJ1dHVyYWlzIGUgZGlyZXRyaXplcyByZWd1bGF0w7NyaWFzLg0KDQpEZXNzYSBmb3JtYSwgZW1ib3JhIG9zIGZ1bmRhbWVudG9zIGRvIG1lcmNhZG8gZGUgdHJhYmFsaG8gZSBkYSByZW5kYSBhaW5kYSBjb250cmlidWFtIHBhcmEgc3VzdGVudGFyIG8gY29uc3VtbyBkYXMgZmFtw61saWFzLCBhIHByb3hpbWlkYWRlIGRvIHByb2Nlc3NvIGVsZWl0b3JhbCBkZSAyMDI2IHBvZGUgaW50cm9kdXppciB1bSBncmF1IGFkaWNpb25hbCBkZSBjYXV0ZWxhIG5vIGNvbXBvcnRhbWVudG8gZGUgY29uc3VtaWRvcmVzIGUgaW52ZXN0aWRvcmVzLCByZWZvcsOnYW5kbyBhIGV4cGVjdGF0aXZhIGRlIGNyZXNjaW1lbnRvIGVjb27DtG1pY28gbWFpcyBtb2RlcmFkbyBhbyBsb25nbyBkbyBwZXLDrW9kby4NCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQoNCiMgQ29sZXRhciBkYWRvcyBkbyBDb25zdW1vIGRhcyBGYW3DrWxpYXMgKDIyMTAwKQ0KZGFkb3NfY29uc3VtbyA8LSBnZXRfc2VyaWVzKDIyMTAwLCBzdGFydF9kYXRlID0gIjIwMjAtMDEtMDEiLCBlbmRfZGF0ZSA9IFN5cy5EYXRlKCkpICU+JSANCiAgcmVuYW1lKENvbnN1bW9fZmFtaWxpYXMgPSBgMjIxMDBgKQ0KDQojIENvbGV0YXIgZGFkb3MgZGEgUmVuZGEgZGFzIEZhbcOtbGlhcyAoMjkwMjgpDQpkYWRvc19yZW5kYSA8LSBnZXRfc2VyaWVzKDI5MDI4LCBzdGFydF9kYXRlID0gIjIwMjAtMDEtMDEiLCBlbmRfZGF0ZSA9IFN5cy5EYXRlKCkpICU+JSANCiAgcmVuYW1lKFJlbmRhX2ZhbWlsaWFzID0gYDI5MDI4YCkNCg0KIyBQcmVwYXJhciBkYWRvcyBkZSBDT05TVU1PDQpkYWRvc19jb25zdW1vX3RyaW0gPC0gZGFkb3NfY29uc3VtbyAlPiUNCiAgbXV0YXRlKA0KICAgIGFubyA9IHllYXIoZGF0ZSksDQogICAgdHJpbWVzdHJlID0gcXVhcnRlcihkYXRlLCB3aXRoX3llYXIgPSBGQUxTRSksDQogICAgdGltZXN0YW1wID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKGRhdGUpLA0KICAgIGluZGljZV9jb25zdW1vID0gcm91bmQoMTAwICogQ29uc3Vtb19mYW1pbGlhcyAvIGZpcnN0KENvbnN1bW9fZmFtaWxpYXMpLCAxKQ0KICApICU+JQ0KICBzZWxlY3QoZGF0ZSwgdGltZXN0YW1wLCBpbmRpY2VfY29uc3VtbykNCg0KIyBQcmVwYXJhciBkYWRvcyBkZSBSRU5EQQ0KZGFkb3NfcmVuZGFfdHJpbSA8LSBkYWRvc19yZW5kYSAlPiUNCiAgbXV0YXRlKA0KICAgIGFubyA9IHllYXIoZGF0ZSksDQogICAgdHJpbWVzdHJlID0gcXVhcnRlcihkYXRlLCB3aXRoX3llYXIgPSBGQUxTRSksDQogICAgdGltZXN0YW1wID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKGRhdGUpLA0KICAgIGluZGljZV9yZW5kYSA9IHJvdW5kKDEwMCAqIFJlbmRhX2ZhbWlsaWFzIC8gZmlyc3QoUmVuZGFfZmFtaWxpYXMpLCAxKQ0KICApICU+JQ0KICBzZWxlY3QoZGF0ZSwgdGltZXN0YW1wLCBpbmRpY2VfcmVuZGEpDQoNCiMgQ29tYmluYXIgZGFkb3MNCmRhZG9zX2NvbWJpbmFkb3MgPC0gZGFkb3NfY29uc3Vtb190cmltICU+JQ0KICBsZWZ0X2pvaW4oZGFkb3NfcmVuZGFfdHJpbSwgYnkgPSBjKCJkYXRlIiwgInRpbWVzdGFtcCIpKQ0KDQojIFZlcmlmaWNhciBkYWRvcw0KaWYobnJvdyhkYWRvc19jb21iaW5hZG9zKSA9PSAwKSB7DQogIHN0b3AoIkRhZG9zIG7Do28gZW5jb250cmFkb3MuIFZlcmlmaXF1ZSBvcyBjw7NkaWdvcy4iKQ0KfQ0KDQojIENhbGN1bGFyIGxpbWl0ZXMgZG8gZWl4byBZIChjb25zaWRlcmFuZG8gYW1iYXMgYXMgc8OpcmllcykNCnlfbWluIDwtIG1pbihjKGRhZG9zX2NvbWJpbmFkb3MkaW5kaWNlX2NvbnN1bW8sIGRhZG9zX2NvbWJpbmFkb3MkaW5kaWNlX3JlbmRhKSwgbmEucm0gPSBUUlVFKQ0KeV9tYXggPC0gbWF4KGMoZGFkb3NfY29tYmluYWRvcyRpbmRpY2VfY29uc3VtbywgZGFkb3NfY29tYmluYWRvcyRpbmRpY2VfcmVuZGEpLCBuYS5ybSA9IFRSVUUpDQp5X3JhbmdlIDwtIHlfbWF4IC0geV9taW4NCnlfbWluX2FqdXN0YWRvIDwtIGZsb29yKHlfbWluIC0gMC4wNSAqIHlfcmFuZ2UpDQp5X21heF9hanVzdGFkbyA8LSBjZWlsaW5nKHlfbWF4ICsgMC4wNSAqIHlfcmFuZ2UpDQoNCiMgQ3JpYXIgZ3LDoWZpY28gY29tYmluYWRvDQpoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpICU+JQ0KICAjIFPDqXJpZTogQ29uc3VtbyAoY29sdW5hcykgLSBBWlVMDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX2NvbWJpbmFkb3MgJT4lIHNlbGVjdCh0aW1lc3RhbXAsIGluZGljZV9jb25zdW1vKSksDQogICAgdHlwZSA9ICJjb2x1bW4iLA0KICAgIG5hbWUgPSAiQ29uc3VtbyBkYXMgRmFtw61saWFzIiwNCiAgICBjb2xvciA9ICIjMDIwMjNjIiwNCiAgICB5QXhpcyA9IDAsDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDEpDQogICkgJT4lDQogICMgU8OpcmllOiBSZW5kYSAobGluaGEpIC0gRE9VUkFETw0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19jb21iaW5hZG9zICU+JSBzZWxlY3QodGltZXN0YW1wLCBpbmRpY2VfcmVuZGEpKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiUmVuZGEgZGFzIEZhbcOtbGlhcyIsDQogICAgY29sb3IgPSAiI2ZlYjcxMiIsDQogICAgbGluZVdpZHRoID0gMywNCiAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBUUlVFLCByYWRpdXMgPSAzKSwNCiAgICB5QXhpcyA9IDAsDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDEpDQogICkgJT4lDQogIGhjX3lBeGlzKA0KICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIsONbmRpY2UgKDHCuiBUcmltLzIwMjAgPSAxMDApIiksDQogICAgb3Bwb3NpdGUgPSBGQUxTRSwNCiAgICBsYWJlbHMgPSBsaXN0KGZvcm1hdCA9ICJ7dmFsdWV9IiksDQogICAgbWluID0geV9taW5fYWp1c3RhZG8sDQogICAgbWF4ID0geV9tYXhfYWp1c3RhZG8sDQogICAgcGxvdExpbmVzID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHZhbHVlID0gMTAwLA0KICAgICAgICBjb2xvciA9ICIjNjY2NjY2IiwNCiAgICAgICAgZGFzaFN0eWxlID0gImRhc2giLA0KICAgICAgICB3aWR0aCA9IDEsDQogICAgICAgIGxhYmVsID0gbGlzdCh0ZXh0ID0gIkJhc2UgKDHCuiBUcmltLzIwMjApIikNCiAgICAgICkNCiAgICApDQogICkgJT4lDQogIGhjX3hBeGlzKA0KICAgIHR5cGUgPSAnZGF0ZXRpbWUnLA0KICAgIGxhYmVscyA9IGxpc3QoZm9ybWF0ID0gJ3t2YWx1ZTolWX0nKQ0KICApICU+JQ0KICBoY190aXRsZSh0ZXh0ID0gIlJlbmRhIHZzLiBDb25zdW1vIGRhcyBGYW3DrWxpYXMiKSAlPiUNCiAgaGNfc3VidGl0bGUodGV4dCA9ICLDjW5kaWNlIEJhc2U6IDHCuiBUcmltZXN0cmUvMjAyMCA9IDEwMCAtIERhZG9zIFRyaW1lc3RyYWlzIikgJT4lDQogIGhjX2NyZWRpdHMoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgdGV4dCA9ICJGb250ZTogQmFuY28gQ2VudHJhbCBkbyBCcmFzaWwgKFNHUyAtIEPDs2RpZ29zOiAyMjEwMCBlIDI5MDI4KSINCiAgKSAlPiUNCiAgaGNfcmFuZ2VTZWxlY3RvcigNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBidXR0b25zID0gbGlzdCgNCiAgICAgIGxpc3QodHlwZSA9ICd5ZWFyJywgY291bnQgPSAxLCB0ZXh0ID0gJzFZJyksDQogICAgICBsaXN0KHR5cGUgPSAneWVhcicsIGNvdW50ID0gMiwgdGV4dCA9ICcyWScpLA0KICAgICAgbGlzdCh0eXBlID0gJ3llYXInLCBjb3VudCA9IDMsIHRleHQgPSAnM1knKSwNCiAgICAgIGxpc3QodHlwZSA9ICdhbGwnLCB0ZXh0ID0gJ1RvZG8gcGVyw61vZG8nKQ0KICAgICksDQogICAgc2VsZWN0ZWQgPSAyDQogICkgJT4lDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICBoZWFkZXJGb3JtYXQgPSAnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJweCI+PGI+e3BvaW50LmtleX08L2I+PC9zcGFuPjxici8+JywNCiAgICBwb2ludEZvcm1hdCA9ICc8c3BhbiBzdHlsZT0iY29sb3I6e3Nlcmllcy5jb2xvcn0iPuKXjzwvc3Bhbj4ge3Nlcmllcy5uYW1lfTogPGI+e3BvaW50Lnk6LjFmfTwvYj48YnIvPicNCiAgKSAlPiUNCiAgaGNfbGVnZW5kKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgdmVydGljYWxBbGlnbiA9ICJib3R0b20iLA0KICAgIGxheW91dCA9ICJob3Jpem9udGFsIg0KICApICU+JQ0KICBoY19wbG90T3B0aW9ucygNCiAgICBjb2x1bW4gPSBsaXN0KA0KICAgICAgcG9pbnRQYWRkaW5nID0gMC4xLA0KICAgICAgZ3JvdXBQYWRkaW5nID0gMC4wNSwNCiAgICAgIGJvcmRlcldpZHRoID0gMC41DQogICAgKSwNCiAgICBsaW5lID0gbGlzdCgNCiAgICAgIGFuaW1hdGlvbiA9IFRSVUUsDQogICAgICBjb25uZWN0TnVsbHMgPSBUUlVFDQogICAgKQ0KICApDQpgYGANCiMjIFJFRkVSw4pOQ0lBUw0KDQpJTkZPTU9ORVkuIFBJQiAyMDI2OiBvIGFubyBlbSBxdWUgYSBlY29ub21pYSBuw6NvIGRlc2FiYSwgbWFzIHRhbWLDqW0gbsOjbyBkZWNvbGEuIFPDo28gUGF1bG86IEluZm9Nb25leSwgMjAyNi4gRGlzcG9uw612ZWwgZW06IDxodHRwczovL3d3dy5pbmZvbW9uZXkuY29tLmJyL2Vjb25vbWlhL3BpYi0yMDI2LW8tYW5vLWVtLXF1ZS1hLWVjb25vbWlhLW5hby1kZXNhYmEtbWFzLXRhbWJlbS1uYW8tZGVjb2xhLz4NCi4gQWNlc3NvIGVtOiAwNSBtYXIuIDIwMjYuDQoNCklORk9NT05FWS4gU2VydmnDp29zOiBzZXRvciByZWN1YSBlbSBkZXplbWJybyBkZSAyMDI1LCBhcG9udGEgSUJHRSwgY29tIGltcGFjdG8gZGUganVyb3MgZWxldmFkb3MuIFPDo28gUGF1bG86IEluZm9Nb25leSwgMjAyNi4gRGlzcG9uw612ZWwgZW06IDxodHRwczovL3d3dy5pbmZvbW9uZXkuY29tLmJyL2Vjb25vbWlhL3NlcnZpY29zLWliZ2UtZGV6ZW1icm8tMjAyNS1xdWVkYS1qdXJvcy8+DQouIEFjZXNzbyBlbTogMDUgbWFyLiAyMDI2Lg0KDQpFTVBSRVNBIEJSQVNJTCBERSBDT01VTklDQcOHw4NPLiBQcsOpdmlhIGRvIFBJQiBhcG9udGEgY3Jlc2NpbWVudG8gZGUgMiw1JSBkYSBlY29ub21pYSBicmFzaWxlaXJhIGVtIDIwMjUuIEJyYXPDrWxpYSwgREY6IEFnw6puY2lhIEJyYXNpbCwgMjAyNi4gRGlzcG9uw612ZWwgZW06IDxodHRwczovL2FnZW5jaWFicmFzaWwuZWJjLmNvbS5ici9lY29ub21pYS9ub3RpY2lhLzIwMjYtMDIvcHJldmlhLWRvLXBpYi1hcG9udGEtY3Jlc2NpbWVudG8tZGUtMjUtZGEtZWNvbm9taWEtYnJhc2lsZWlyYS1lbS0yMDI1Pg0KLiBBY2Vzc28gZW06IDA1IG1hci4gMjAyNi4NCg0KRlVOREHDh8ODTyBHRVRVTElPIFZBUkdBUy4gRWNvbm9taWEgY3Jlc2NldSAyLDIlIGVtIDIwMjUsIHNlZ3VuZG8gbyBNb25pdG9yIGRvIFBJQi1GR1YuIFJpbyBkZSBKYW5laXJvOiBGR1YgSUJSRSwgMjAyNi4gRGlzcG9uw612ZWwgZW06IDxodHRwczovL3BvcnRhbGlicmUuZmd2LmJyL25vdGljaWFzL2Vjb25vbWlhLWNyZXNjZXUtMjItZW0tMjAyNS1zZWd1bmRvLW8tbW9uaXRvci1kby1waWItZmd2Pg0KLiBBY2Vzc28gZW06IDA1IG1hci4gMjAyNi4NCg0KWFAgSU5WRVNUSU1FTlRPUy4gQnJhc2lsIE1hY3JvIE1lbnNhbDogY3Jlc2NpbWVudG8gbWFpcyBmb3J0ZSBlIGluZmxhw6fDo28gbWFpcyBiYWl4YS4gU8OjbyBQYXVsbzogWFAgSW52ZXN0aW1lbnRvcywgMjAyNi4gRGlzcG9uw612ZWwgZW06IDxodHRwczovL2NvbnRldWRvcy54cGkuY29tLmJyL2Vjb25vbWlhL2JyYXNpbC1tYWNyby1tZW5zYWwtY3Jlc2NpbWVudG8tbWFpcy1mb3J0ZS1pbmZsYWNhby1tYWlzLWJhaXhhLz4NCi4gQWNlc3NvIGVtOiAwNSBtYXIuIDIwMjYuDQoNCkVESVRPUkEgQUJSSUwuIEF0aXZpZGFkZSBlY29uw7RtaWNhIGJyYXNpbGVpcmEgY3Jlc2NlIDIsNSUgZW0gMjAyNS4gU8OjbyBQYXVsbzogVm9jw6ogUy9BLCAyMDI2LiBEaXNwb27DrXZlbCBlbTogPGh0dHBzOi8vdm9jZXNhLmFicmlsLmNvbS5ici9lY29ub21pYS9hdGl2aWRhZGUtZWNvbm9taWNhLWJyYXNpbGVpcmEtY3Jlc2NlLTI1LWVtLTIwMjUvPg0KLiBBY2Vzc28gZW06IDA1IG1hci4gMjAyNi4NCg0KQkFOQ08gQ0VOVFJBTCBETyBCUkFTSUwuIMONbmRpY2UgZGUgQXRpdmlkYWRlIEVjb27DtG1pY2EgZG8gQmFuY28gQ2VudHJhbCAoSUJDLUJyKS4gQnJhc8OtbGlhLCBERjogQkNCLCAyMDI2LiBEaXNwb27DrXZlbCBlbTogPGh0dHBzOi8vd3d3LmJjYi5nb3YuYnIvZXN0YXRpc3RpY2FzL2liYy1icj4NCi4gQWNlc3NvIGVtOiAwNSBtYXIuIDIwMjYNCg0KSU5TVElUVVRPIEJSQVNJTEVJUk8gREUgR0VPR1JBRklBIEUgRVNUQVTDjVNUSUNBLiBJbmRpY2Fkb3JlcyBlY29uw7RtaWNvcyBlIHNvY2lhaXMuIFJpbyBkZSBKYW5laXJvOiBJQkdFLCAyMDI2LiBEaXNwb27DrXZlbCBlbTogPGh0dHBzOi8vd3d3LmliZ2UuZ292LmJyL2luZGljYWRvcmVzPg0KLiBBY2Vzc28gZW06IDA1IG1hci4gMjAyNi4NCg==