Relatório como parte da disciplina AGM5710 Meteorologia da Poluição do Ar
Prof.a Maria de Fátima Andrade


Alejandro Herman Delgado Peralta \(^{(a)}\), Leandro Alex Moreira Viscardi \(^{(b)}\)

\(^{(a)}\) IAG-USP, Nº USP: 11340504,
\(^{(b)}\) IF-USP, Nº USP: 8624459,


Introdução

A estação São José do Rio Preto (SJRP) registra poluentes atmosféricos, os quais estão disponíveis no endereço web (https://cetesb.sp.gov.br/ar/qualar/) da Companhia Ambiental do Estado de São Paulo (CETESB). De todos os poluentes registrados, e como parte do alcance do presente trabalho, foram baixados dados para o ano 2018 (janeiro até dezembro) de ozônio (O3), dióxido de nitrogênio (NO2) e material particulado menor que 2,5 \(\mu\)m (PM2,5) como diâmetro aerodinâmico. Os gráficos foram feitos para cada poluente com a finalidade de fazer comparações com o limite da Organização Mundial da Saude (OMS) e os padrões de qualidade do ar da CETESB. O presente trabalho é baseado nas seguintes atividades:

  1. Faça o gráfico da série temporal de todos os poluentes baixados.
  2. Calcule as médias e compare com os Padrões Estaduais/Nacionais e as recomendações da Organização Mundial de Saúde (que é o padrão final do decreto e da resolução CONAMA)
  3. Calcule o número de ultrapassagens dos padrões/recomendações.
  4. Calcule as médias horárias do PM2,5, O3 e NO2 e esboce os gráficos do ciclo diário médio (24 horas) para cada um dos meses.
  5. Discuta o comportamento diário dos poluentes (tente relacionar com as variáveis de radiação, temperatura, chuva/umidade).
  6. Prepare uma pequena apresentação contendo os resultados para discutirmos na próxima aula.
  7. Fazer um relatório.

Desenvolvimento do trabalho

A estação SJRP está localizado nas coordenadas 7700854 m de latitude e 666.719 de longitude, fuso 22k (CETESB, 2019). Na Figura

Figura 1 Estação SJRP

xxxx

Figura 2 Localização da estação SJRP


1. Faça o gráfico da série temporal de todos os poluentes baixados

Primeiro baixamos os dados da CETESB disponíveis em seu endereço web. Depois usamos o pacote openair de R no programa R Studio. Com isso foi possível determinar a série temporal de todos os poluentes baixados. Ao mesmo tempo, também foi usado o programa Python.

Como mostra a Figura 1, as concentrações de O\(_3\) ultrapassam 100 \(\mu\)g/m3 nos dias entre os meses de setembro e novembro. Igualmente, nestes meses as concentrações de NO\(_2\) e PM\(_{2,5}\) são altas. No entanto, as concentrações de PM\(_{2,5}\) aumenta durante o inverno, estação do ano em que o ar permanece estagnado na região de camada de mistura mais baixa, principalmente durante a noite onde poderia acontecer resfriamento radiativo (Falta citar esto).

2. Calcule as médias e compare com os Padrões Estaduais/Nacionais e as recomendações da Organização Mundial de Saúde (que é o padrão final do decreto e da resolução CONAMA).

As médias foram calculadas para cada poluente de acordo com as médias dos padrões de qualidade do ar nacional e da Organização Mundial de Saúde (OMS). Na Tabela 1 mostra-se os padrões de qualidade do ar. Estes padrões são usados na comparação com as médias calculadas para a estação SJRP. Segundo a CETESB, as Metas Intermediárias (MI) são padrões temporários a serem alcançados com o objetivo de melhorar a qualidade do ar no Estado de São Paulo. Os Padrões Finais (PF) são aqueles que oferecem menor risco a saúde da população e são considerados pela OMS.

Tabela 1 Padrões de qualidade do ar (CETESB Decreto Estadual nº 59113 de 23/04/2013)
Poluente Tempo de Amostragem MI\(_1\) MI\(_2\) MI\(_3\) PF
PM\(_{2,5}\) 24 horas (média) 60 50 37 25
NO\(_2\) 1 hora (média) 260 240 220 200
O\(_3\) 8 horas (máxima média movil diaria) 140 130 120 100

Para o cálculo da média de cada poluente, usamos o pacote openair do R. As opções timePlot, rollingMean e aggregate foram usados como mostrado abaixo. A opção timePlot permite fazer médias diárias; importante para obter médias de 24 horas para o PM\(_{2,5}\). O rollingMean é uma função do openair que permite calcular as médias móveis para cada 8 horas que tenham ao menos 75% de dados (pelo menos 6 horas). Esta opção foi usada para processar as concentrações horárias de O\(_3\). Finalmente, as máximas diarias das médias móveis foram consideradas para o análise.

A Figura 2 mostra a média diária do PM\(_{2,5}\) comparado com os padrões de qualidade do ar. No inverno acontecem ultrapassagens dos padrões. A influência no aumento das concentrações é por causa de uma menor altura do mezclado (citar esto).

Especificamente, o principal fator é o enfraquecimento do turbulência térmica devido à disminução das temperaturas (citar esto)

Na Figura 3 mostra-se a comparação das concentrações médias horárias do NO\(_2\), mas não acontecem ultrapasagens dos padrões para este poluente.

A Figura 4 mostra as concentrações máximas diárias das médias móveis para o O\(_3\) troposférico. Durante o verão a nubosidade reduze a irradiância solar que é un fator determinante nas reações químicas de formação do O\(_3\); na primavera, em ausência de nuvens, há um maior número de horas de irradiância solar (citar esto).

3. Calcule o número de ultrapassagens dos padrões/recomendações.

A Tabela 2 mostra o número de ultrapassagens dos padrões de qualidade do ar para os poluentes. As opções timeAverage foi usado para calcular a média diária do PM2,5.

Tabela 2 Número de ultrapassagens dos padrões de qualidade do ar (CETESB, 2019)
Poluente MI\(_1\) MI\(_2\) MI\(_3\) PF
PM\(_{2,5}\) 1 2 8 48
NO\(_2\) 0 0 0 0
O\(_3\) 0 2 3 22

Para entender que aconteceu, as datas com ultrapassagens foram contados para cada poluente mediante o programa R. Além disso, a função calendarPlot do pacote openair foi usado para visualizar com melhor facilidade os dias que excederam os padrões de qualidade do ar para o PM\(_{2,5}\) (Figura 5) e o O\(_3\) (Figura 6).

Julho apresenta mais dias de ultrapassagens dos padrões de qualidade do ar. Este mês apresenta baixas temperaturas e condições de estagnamento da camada de mistura (citar esto). O segundo mês com mais dias de ultrapasagens é setembro. Neste mês tambem acontece os maiores dias com concentrações altas de O\(_3\).

Neste sentido, a Figura 5 mostra claramente que os meses de agosto e setembro apresentam os maiores dias com ultrapasagens dos padrões de qualidade do ar para o O\(_3\). Principalmente, setembro tem mais dias assim como as concentrações mais altas.

4. Calcule as médias horárias do PM2,5, O3 e NO2 e esboce os gráficos do ciclo diário médio (24 horas) para cada um dos meses.

As médias horárias foram calculadas para cada poluente. A Figura 7 mostra a variação das concentrações do PM2,5. Julho é o mês que tem máximas concentrações durante o ciclo diário médio de 24 horas.

A Figura 8 mostra ciclos diários de 24 horas para cada mês das concentrações de NO2. Altas concentrações estão presentes no inverno e baixas durante o verão. Além disso, também há concentrações altas durante a manhã (07:00 h - 09:00 h) e a noite (19:00 h - 22:00 h). Por outro lado, aproximadamente entre as 14:00 horas e as 17:00 horas acontece uma diminução das concentrações de NO2; sendo quasi constante ao longo do ano.

A Figura 9 mostra ciclos diários de 24 horas para cada mês das concentrações de O3. Perto das 12:00 horas acontece as máximas concentrações de O3 devido que nesta hora é máxima os valores de irradiância solar. Durante a noite há pequenos incrementos; os quais poderiam estar relacionados com o transporte como sugere (citar esto).

5. Discuta o comportamento diário dos poluentes (tente relacionar com as variáveis de radiação, temperatura, chuva/umidade).

6. Prepare uma pequena apresentação contendo os resultados para discutirmos na próxima aula.

A apresentação mostra as figuras e referências de estudos de qualidade do ar para São Paulo assim como referência de livros relacionados com o tema de poluição do ar.

Referência

LS0tCnRpdGxlOiBBbsOhbGlzZSBkb3MgcG9sdWVudGVzIGRlIHF1YWxpZGFkZSBkbyBhciBwYXJhIGEgZXN0YcOnw6NvIFPDo28gSm9zw6kgZG8gUmlvIFByZXRvCiAgbG9jYWxpemFkYSBuYSBjaWRhZGUgZGUgU8OjbyBQYXVsbwpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIGRmX3ByaW50OiBwYWdlZAogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKICB3b3JkX2RvY3VtZW50OiBkZWZhdWx0Ci0tLQojIyMjIyBSZWxhdMOzcmlvIGNvbW8gcGFydGUgZGEgZGlzY2lwbGluYSBBR001NzEwIE1ldGVvcm9sb2dpYSBkYSBQb2x1aWPMp2HMg28gZG8gQXIKCiMjIyMjIFByb2YuXmFeIE1hcmlhIGRlIEZhzIF0aW1hIEFuZHJhZGUKXAoKIyMjIyMgQWxlamFuZHJvIEhlcm1hbiBEZWxnYWRvIFBlcmFsdGEgJF57KGEpfSQsIExlYW5kcm8gQWxleCBNb3JlaXJhIFZpc2NhcmRpICReeyhiKX0kCgokXnsoYSl9JCBJQUctVVNQLCBOwrogVVNQOiAqKjExMzQwNTA0KiosIGFkZWxnYWRvQGlhZy51c3AuYnIgXAokXnsoYil9JCBJRi1VU1AsIE7CuiBVU1A6ICoqODYyNDQ1OSoqLCBsZWFuZHJvLnZpc2NhcmRpQHVzcC5icgpcCgoqKioKCgojIyMgSW50cm9kdcOnw6NvCkEgZXN0YcOnw6NvIFPDo28gSm9zw6kgZG8gUmlvIFByZXRvIChTSlJQKSByZWdpc3RyYSBwb2x1ZW50ZXMgYXRtb3Nmw6lyaWNvcywgb3MgcXVhaXMgZXN0w6NvIGRpc3BvbsOtdmVpcyBubyBlbmRlcmXDp28gd2ViICgqaHR0cHM6Ly9jZXRlc2Iuc3AuZ292LmJyL2FyL3F1YWxhci8qKSBkYSBDb21wYW5oaWEgQW1iaWVudGFsIGRvIEVzdGFkbyBkZSBTw6NvIFBhdWxvIChDRVRFU0IpLiBEZSB0b2RvcyBvcyBwb2x1ZW50ZXMgcmVnaXN0cmFkb3MsIGUgY29tbyBwYXJ0ZSBkbyBhbGNhbmNlIGRvIHByZXNlbnRlIHRyYWJhbGhvLCBmb3JhbSBiYWl4YWRvcyBkYWRvcyBwYXJhIG8gYW5vIDIwMTggKGphbmVpcm8gYXTDqSBkZXplbWJybykgZGUgb3rDtG5pbyAoT34zfiksIGRpw7N4aWRvIGRlIG5pdHJvZ8OqbmlvIChOT34yfikgZSBtYXRlcmlhbCBwYXJ0aWN1bGFkbyBtZW5vciBxdWUgMiw1ICRcbXUkbSAoUE1+Miw1fikgY29tbyBkacOibWV0cm8gYWVyb2RpbsOibWljby4gT3MgZ3LDoWZpY29zIGZvcmFtIGZlaXRvcyBwYXJhIGNhZGEgcG9sdWVudGUgY29tIGEgZmluYWxpZGFkZSBkZSBmYXplciBjb21wYXJhw6fDtWVzIGNvbSBvIGxpbWl0ZSBkYSBPcmdhbml6YcOnw6NvIE11bmRpYWwgZGEgU2F1ZGUgKE9NUykgZSBvcyBwYWRyw7VlcyBkZSBxdWFsaWRhZGUgZG8gYXIgZGEgQ0VURVNCLiBPIHByZXNlbnRlIHRyYWJhbGhvIMOpIGJhc2VhZG8gbmFzIHNlZ3VpbnRlcyBhdGl2aWRhZGVzOgoKMSkgRmHDp2EgbyBncsOhZmljbyBkYSBzw6lyaWUgdGVtcG9yYWwgZGUgdG9kb3Mgb3MgcG9sdWVudGVzIGJhaXhhZG9zLgoyKSBDYWxjdWxlIGFzIG3DqWRpYXMgZSBjb21wYXJlIGNvbSBvcyBQYWRyw7VlcyBFc3RhZHVhaXMvTmFjaW9uYWlzIGUgYXMgcmVjb21lbmRhw6fDtWVzIGRhIE9yZ2FuaXphw6fDo28gTXVuZGlhbCBkZSBTYcO6ZGUgKHF1ZSDDqSBvIHBhZHLDo28gZmluYWwgZG8gZGVjcmV0byBlIGRhIHJlc29sdcOnw6NvIENPTkFNQSkKMykgQ2FsY3VsZSBvIG7Dum1lcm8gZGUgdWx0cmFwYXNzYWdlbnMgZG9zIHBhZHLDtWVzL3JlY29tZW5kYcOnw7Vlcy4KNCkgQ2FsY3VsZSBhcyBtw6lkaWFzIGhvcsOhcmlhcyBkbyBQTX4yLDV+LCBPfjN+IGUgTk9+Mn4gZSBlc2JvY2Ugb3MgZ3LDoWZpY29zIGRvIGNpY2xvIGRpw6FyaW8gbcOpZGlvICgyNCBob3JhcykgcGFyYSBjYWRhIHVtIGRvcyBtZXNlcy4KNSkgRGlzY3V0YSBvIGNvbXBvcnRhbWVudG8gZGnDoXJpbyBkb3MgcG9sdWVudGVzICh0ZW50ZSByZWxhY2lvbmFyIGNvbSBhcyB2YXJpw6F2ZWlzIGRlIHJhZGlhw6fDo28sIHRlbXBlcmF0dXJhLCBjaHV2YS91bWlkYWRlKS4KNikgUHJlcGFyZSB1bWEgcGVxdWVuYSBhcHJlc2VudGHDp8OjbyBjb250ZW5kbyBvcyByZXN1bHRhZG9zIHBhcmEgZGlzY3V0aXJtb3MgbmEgcHLDs3hpbWEgYXVsYS4KNykgRmF6ZXIgdW0gcmVsYXTDs3Jpby4gCgojIyMgRGVzZW52b2x2aW1lbnRvIGRvIHRyYWJhbGhvCkEgZXN0YcOnw6NvIFNKUlAgZXN0w6EgbG9jYWxpemFkbyBuYXMgY29vcmRlbmFkYXMgNzcwMDg1NCBtIGRlIGxhdGl0dWRlIGUgNjY2LjcxOSBkZSBsb25naXR1ZGUsIGZ1c28gMjJrIChDRVRFU0IsIDIwMTkpLiBOYSBGaWd1cmEKCjxjZW50ZXI+CiFbXShlc3QucG5nKSAKCkZpZ3VyYSAxIEVzdGHDp8OjbyBTSlJQCjwvY2VudGVyPgoKeHh4eAoKPGNlbnRlcj4KIVtdKGxvY2FsLnBuZykgCkZpZ3VyYSAyIExvY2FsaXphw6fDo28gZGEgZXN0YcOnw6NvIFNKUlAKCjwvY2VudGVyPgpcCgoqKjEuIEZhw6dhIG8gZ3LDoWZpY28gZGEgc8OpcmllIHRlbXBvcmFsIGRlIHRvZG9zIG9zIHBvbHVlbnRlcyBiYWl4YWRvcyoqCgpQcmltZWlybyBiYWl4YW1vcyBvcyBkYWRvcyBkYSBDRVRFU0IgZGlzcG9uw612ZWlzIGVtIHNldSBlbmRlcmXDp28gd2ViLiBEZXBvaXMgdXNhbW9zIG8gcGFjb3RlIGBvcGVuYWlyYCBkZSBgUmAgbm8gcHJvZ3JhbWEgUiBTdHVkaW8uIENvbSBpc3NvIGZvaSBwb3Nzw612ZWwgZGV0ZXJtaW5hciBhIHPDqXJpZSB0ZW1wb3JhbCBkZSB0b2RvcyBvcyBwb2x1ZW50ZXMgYmFpeGFkb3MuIEFvIG1lc21vIHRlbXBvLCB0YW1iw6ltIGZvaSB1c2FkbyBvIHByb2dyYW1hIGBQeXRob25gLgpgYGB7ciBlY2hvID0gRkFMU0V9CmxpYnJhcnkob3BlbmFpcikgIyB0byBwcm9jZXNzIGFpciBxdWFsaXR5IGRhdGEgaW4gb3JkZXIgdG8gZ2V0IGdyYXBocwpsaWJyYXJ5KGx1YnJpZGF0ZSkgIyB0byBleHRyYWN0IG1vbnRoIGFuZCB5ZWFyIGVhc2lseSBmcm9tIGNvbHVtbiBjYWxsZWQgImRhdGUiCmxpYnJhcnkobGF0dGljZSk7IGxpYnJhcnkoUkNvbG9yQnJld2VyKSA7bGlicmFyeShsYXR0aWNlRXh0cmEpCiMgSW1wb3J0IGRhdGEgZnJvbSBwYXRoCnJtKGxpc3Q9bHMoKSkgIyByZW1vdmUgZGF0YSBpbiBHbG9iYWwgRW52aXJvbm1lbnQKc2pyX25vMiA8LSByZWFkLmNzdigiL2Nsb3VkL3Byb2plY3Qvc2pyX25vMi5jc3YiLCBzZXA9IjsiKQpzanJfbzMgPC0gcmVhZC5jc3YoIi9jbG91ZC9wcm9qZWN0L3Nqcl9vMy5jc3YiLCBzZXA9IjsiKQpzanJfcG0yNSA8LSByZWFkLmNzdigiL2Nsb3VkL3Byb2plY3Qvc2pyX3BtMjUuY3N2Iiwgc2VwPSI7IikKCiMgQ3JlYXRlIGEgZGF0YWZyYW1lCnN0YXJ0IDwtIGFzLlBPU0lYY3QoJzIwMTgtMDEtMDEgMDA6MDAnLCB0eiA9ICJHTVQiKQplbmQgIDwtIGFzLlBPU0lYY3QoJzIwMTgtMTItMzEgMjM6MDAnLCB0eiA9ICJHTVQiKQpkYXRlcyA8LSBkYXRhLmZyYW1lKGRhdGUgPSBzZXEoc3RhcnQsIGVuZCwgYnkgPSAnaG91cnMnKSkKCnNqcl9ubzIkZGF0ZSA8LSBwYXN0ZShzanJfbm8yJGRhdGUyLCBzanJfbm8yJGhvdXIpCnNqcl9ubzIkZGF0ZSA8LSBhcy5QT1NJWGN0KHN0cnB0aW1lKHNqcl9ubzIkZGF0ZSwgZm9ybWF0ID0gJyVkLyVtLyVZICVIOiVNJyksIHR6ID0gIkdNVCIpCm5vMiA8LSBtZXJnZShkYXRlcywgc2pyX25vMiwgYWxsID0gVCkKbm8yIDwtIG5vMlstODc2MSxdICMgcmV0aXJhbW9zIDIwMTkKbm8yIDwtIHN1YnNldChubzIsIHNlbGVjdCA9IGMoZGF0ZSwgbm8yKSkKCnNqcl9vMyRkYXRlIDwtIHBhc3RlKHNqcl9vMyRkYXRlMiwgc2pyX28zJGhvdXIpCnNqcl9vMyRkYXRlIDwtIGFzLlBPU0lYY3Qoc3RycHRpbWUoc2pyX28zJGRhdGUsIGZvcm1hdCA9ICclZC8lbS8lWSAlSDolTScpLCB0eiA9ICJHTVQiKQpvMyA8LSBtZXJnZShkYXRlcywgc2pyX28zLCBhbGwgPSBUKQpvMyA8LSBvM1stODc2MSxdICMgcmV0aXJhbW9zIDIwMTkKbzMgPC0gc3Vic2V0KG8zLCBzZWxlY3QgPSBjKGRhdGUsIG8zKSkKCnNqcl9wbTI1JGRhdGUgPC0gcGFzdGUoc2pyX3BtMjUkZGF0ZTIsIHNqcl9wbTI1JGhvdXIpCnNqcl9wbTI1JGRhdGUgPC0gYXMuUE9TSVhjdChzdHJwdGltZShzanJfcG0yNSRkYXRlLCBmb3JtYXQgPSAnJWQvJW0vJVkgJUg6JU0nKSwgdHogPSAiR01UIikKcG0yNSA8LSBtZXJnZShkYXRlcywgc2pyX3BtMjUsIGFsbCA9IFQpCnBtMjUgPC0gcG0yNVstODc2MSxdICMgcmV0aXJhbW9zIDIwMTkKcG0yNSA8LSBzdWJzZXQocG0yNSwgc2VsZWN0ID0gYyhkYXRlLCBwbTI1KSkKCnNqciA8LSBkYXRhLmZyYW1lKGRhdGVzLCBwbTI1JHBtMjUsIG5vMiRubzIsIG8zJG8zKQpuYW1lcyhzanIpIDwtIGMoImRhdGUiLCJwbTI1Iiwibm8yIiwibzMiKQpzanIkbW9udGggPC0gbW9udGgoc2pyJGRhdGUpIApzanIgPC0gc2pyWy1ucm93KHNqciksXQpybShkYXRlcywgbm8yLCBvMywgcG0yNSwgc2pyX25vMiwgc2pyX28zLCBzanJfcG0yNSwgZW5kLCBzdGFydCkKCnNqciRtb250aCA8LSBhcy5mYWN0b3IoZm9ybWF0KHNqciRkYXRlLCAiJW0iKSkgIyBnZW5lcmF0ZSBhbm90aGVyIGNvbHVtbgp0aW1lUGxvdChzanIsIHBvbGx1dGFudCA9IGMoIm8zIiwgIm5vMiIsInBtMjUiKSwgbWFpbiA9ICIgRmlndXJhIDEgXCAKICAgICAgICAgUmVzdW1vIGRlIGRhZG9zIGRhIGVzdGHDp8OjbyBTw6NvIEpvc8OpIGRvIFJpbyBQcmV0byAtIEFubyAyMDE4IiwgCiAgICAgICAgIHhsYWIgPSAiTcOqcyIsIGRhdGUuYnJlYWtzID0gMTIsIGtleSA9IEYsCiAgICAgICAgIHlsYWIgPSBleHByZXNzaW9uKCIgIiptdSoiZy8iKm1eezN9KiIgIiksIGF1dG8udGV4dCA9IFQpCmBgYApDb21vIG1vc3RyYSBhICoqRmlndXJhIDEqKiwgYXMgY29uY2VudHJhw6fDtWVzIGRlIE8kXzMkIHVsdHJhcGFzc2FtIDEwMCAkXG11JGcvbV4zXiBub3MgZGlhcyBlbnRyZSBvcyBtZXNlcyBkZSBzZXRlbWJybyBlIG5vdmVtYnJvLiBJZ3VhbG1lbnRlLCBuZXN0ZXMgbWVzZXMgYXMgY29uY2VudHJhw6fDtWVzIGRlIE5PJF8yJCBlIFBNJF97Miw1fSQgc8OjbyBhbHRhcy4gTm8gZW50YW50bywgYXMgY29uY2VudHJhw6fDtWVzIGRlIFBNJF97Miw1fSQgYXVtZW50YSBkdXJhbnRlIG8gaW52ZXJubywgZXN0YcOnw6NvIGRvIGFubyBlbSBxdWUgbyBhciBwZXJtYW5lY2UgZXN0YWduYWRvIG5hIHJlZ2nDo28gZGUgY2FtYWRhIGRlIG1pc3R1cmEgbWFpcyBiYWl4YSwgcHJpbmNpcGFsbWVudGUgZHVyYW50ZSBhIG5vaXRlIG9uZGUgcG9kZXJpYSBhY29udGVjZXIgcmVzZnJpYW1lbnRvIHJhZGlhdGl2byAoKipGYWx0YSBjaXRhciBlc3RvKiopLgoKKioyLiBDYWxjdWxlIGFzIG3DqWRpYXMgZSBjb21wYXJlIGNvbSBvcyBQYWRyw7VlcyBFc3RhZHVhaXMvTmFjaW9uYWlzIGUgYXMgcmVjb21lbmRhw6fDtWVzIGRhIE9yZ2FuaXphw6fDo28gTXVuZGlhbCBkZSBTYcO6ZGUgKHF1ZSDDqSBvIHBhZHLDo28gZmluYWwgZG8gZGVjcmV0byBlIGRhIHJlc29sdcOnw6NvIENPTkFNQSkuKioKCkFzIG3DqWRpYXMgZm9yYW0gY2FsY3VsYWRhcyBwYXJhIGNhZGEgcG9sdWVudGUgZGUgYWNvcmRvIGNvbSBhcyBtw6lkaWFzIGRvcyBwYWRyw7VlcyBkZSBxdWFsaWRhZGUgZG8gYXIgbmFjaW9uYWwgZSBkYSBPcmdhbml6YcOnw6NvIE11bmRpYWwgZGUgU2HDumRlIChPTVMpLiBOYSAqKlRhYmVsYSAxKiogbW9zdHJhLXNlIG9zIHBhZHLDtWVzIGRlIHF1YWxpZGFkZSBkbyBhci4gRXN0ZXMgcGFkcsO1ZXMgc8OjbyB1c2Fkb3MgbmEgY29tcGFyYcOnw6NvIGNvbSBhcyBtw6lkaWFzIGNhbGN1bGFkYXMgcGFyYSBhIGVzdGHDp8OjbyBTSlJQLiBTZWd1bmRvIGEgQ0VURVNCLCBhcyBNZXRhcyBJbnRlcm1lZGnDoXJpYXMgKE1JKSBzw6NvIHBhZHLDtWVzIHRlbXBvcsOhcmlvcyBhIHNlcmVtIGFsY2Fuw6dhZG9zIGNvbSBvIG9iamV0aXZvIGRlIG1lbGhvcmFyIGEgcXVhbGlkYWRlIGRvIGFyIG5vIEVzdGFkbyBkZSBTw6NvIFBhdWxvLiBPcyBQYWRyw7VlcyBGaW5haXMgKFBGKSBzw6NvIGFxdWVsZXMgcXVlIG9mZXJlY2VtIG1lbm9yIHJpc2NvIGEgc2HDumRlIGRhIHBvcHVsYcOnw6NvIGUgc8OjbyBjb25zaWRlcmFkb3MgcGVsYSBPTVMuCgotLS0Kb3V0cHV0OiBwZGZfZG9jdW1lbnQKLS0tCgpUYWJsZTogVGFiZWxhIDEgUGFkcsO1ZXMgZGUgcXVhbGlkYWRlIGRvIGFyIChDRVRFU0IgRGVjcmV0byBFc3RhZHVhbCBuwrogNTkxMTMgZGUgMjMvMDQvMjAxMykKClBvbHVlbnRlIHwgVGVtcG8gZGUgQW1vc3RyYWdlbSB8IE1JJF8xJCB8IE1JJF8yJCB8IE1JJF8zJCB8IFBGIAotLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0KUE0kX3syLDV9JCB8IDI0IGhvcmFzIChtw6lkaWEpIHwgNjAgfCA1MCB8IDM3IHwgMjUKTk8kXzIkfCAxIGhvcmEgKG3DqWRpYSkgfCAyNjAgfCAyNDAgfCAyMjAgfCAyMDAKTyRfMyQgfCA4IGhvcmFzIChtw6F4aW1hIG3DqWRpYSBtb3ZpbCBkaWFyaWEpIHwgMTQwIHwgMTMwIHwgMTIwIHwgMTAwCgoKUGFyYSBvIGPDoWxjdWxvIGRhIG3DqWRpYSBkZSBjYWRhIHBvbHVlbnRlLCB1c2Ftb3MgbyBwYWNvdGUgYG9wZW5haXIgYCBkbyBgUmAuIEFzIG9ww6fDtWVzIGB0aW1lUGxvdGAsIGByb2xsaW5nTWVhbmAgZSBgYWdncmVnYXRlYCBmb3JhbSB1c2Fkb3MgY29tbyBtb3N0cmFkbyBhYmFpeG8uIEEgb3DDp8OjbyBgdGltZVBsb3RgIHBlcm1pdGUgZmF6ZXIgbcOpZGlhcyBkacOhcmlhczsgaW1wb3J0YW50ZSBwYXJhIG9idGVyIG3DqWRpYXMgZGUgMjQgaG9yYXMgcGFyYSBvIFBNJF97Miw1fSQuIE8gYHJvbGxpbmdNZWFuYCDDqSB1bWEgZnVuw6fDo28gZG8gYG9wZW5haXJgIHF1ZSBwZXJtaXRlIGNhbGN1bGFyIGFzIG3DqWRpYXMgbcOzdmVpcyBwYXJhIGNhZGEgOCBob3JhcyBxdWUgdGVuaGFtIGFvIG1lbm9zIDc1JSBkZSBkYWRvcyAocGVsbyBtZW5vcyA2IGhvcmFzKS4gRXN0YSBvcMOnw6NvIGZvaSB1c2FkYSBwYXJhIHByb2Nlc3NhciBhcyBjb25jZW50cmHDp8O1ZXMgaG9yw6FyaWFzIGRlIE8kXzMkLiBGaW5hbG1lbnRlLCBhcyBtw6F4aW1hcyBkaWFyaWFzIGRhcyBtw6lkaWFzIG3Ds3ZlaXMgZm9yYW0gY29uc2lkZXJhZGFzIHBhcmEgbyBhbsOhbGlzZS4KCmBgYHtyIGVjaG8gPSBGQUxTRX0KIyBPYnRhaW4gcm9sbGluZyBtZWFucyBvZiA4IGhvdXJzIGZvciBvem9uZQpvM184aCA8LSByb2xsaW5nTWVhbihzanIsIHBvbGx1dGFudCA9ICJvMyIsIGhvdXJzID0gOCwgbmV3Lm5hbWUgPSAicm9sbGluZ28zIiwgZGF0YS50aHJlc2ggPSA3NSwgbmEucm0gPSBUKQptYXhfbzNfZGF5IDwtIGFnZ3JlZ2F0ZShvM184aFsncm9sbGluZ28zJ10sIGZvcm1hdChvM184aFsnZGF0ZSddLCAnJVktJW0tJWQnKSwgbWF4LCBuYS5ybSA9IEYpCm1heF9vM19kYXkkZGF0ZSA8LSBzZXEobWluKG8zXzhoJGRhdGUpLCBtYXgobzNfOGgkZGF0ZSksIGJ5ID0gJ2RheScsIHR6ID0gIkdNVCIpCm1heF9vM19kYXkgPC0gbWF4X28zX2RheVstMzY2LF0KbmFtZXMobWF4X28zX2RheSlbMl0gPSAibzMiCgojIFBhZHLDtWVzIGRlIHF1YWxpZGFkZSBkbyBhciBkYSBDRVRFU0IKcGFfcG0yNSA9IGMoMjUsMzcsNTAsNjApOyBwYV9ubzIgPSBjKDIwMCwyMjAsMjQwLDI3MCk7IHBhX28zID0gYygxMDAsMTIwLDEzMCwxNDApCmBgYApBICoqRmlndXJhIDIqKiBtb3N0cmEgYSBtw6lkaWEgZGnDoXJpYSBkbyBQTSRfezIsNX0kIGNvbXBhcmFkbyBjb20gb3MgcGFkcsO1ZXMgZGUgcXVhbGlkYWRlIGRvIGFyLiBObyBpbnZlcm5vIGFjb250ZWNlbSB1bHRyYXBhc3NhZ2VucyBkb3MgcGFkcsO1ZXMuIEEgaW5mbHXDqm5jaWEgbm8gYXVtZW50byBkYXMgY29uY2VudHJhw6fDtWVzIMOpIHBvciBjYXVzYSBkZSB1bWEgbWVub3IgYWx0dXJhIGRvIG1lemNsYWRvICgqKmNpdGFyIGVzdG8qKikuCmBgYHtyIGluY2x1ZGUgPSBGQUxTRX0KIyBtb250aCA9IGMoIkphbiIsICJGZWIiLCAiTWFyIiwgIkFiciIpCiMgRmlndXJlcwp0aW1lUGxvdChzanIsIHBvbGx1dGFudCA9ICJwbTI1IiwgYXZnLnRpbWUgPSAiZGF5IiwgeWxhYiA9IGV4cHJlc3Npb24oUE1bIjIsNSJdfiJbIiptdSoiZy8iKm1eezN9KiJdIiksIGRhdGUuYnJlYWtzID0gMTIsIG1haW4gPSAiRmlndXJhIDIgXCBNw6lkaWEgZGnDoXJpYSBkbyBQTTIsNSIsIHNtb290aCA9IEYsIHJlZi55ID0gbGlzdChoID0gcGFfcG0yNSwgbHR5ID0gYygyLDIsMiwyKSkpCmBgYApFc3BlY2lmaWNhbWVudGUsIG8gcHJpbmNpcGFsIGZhdG9yIMOpIG8gZW5mcmFxdWVjaW1lbnRvIGRvIHR1cmJ1bMOqbmNpYSB0w6lybWljYSBkZXZpZG8gw6AgZGlzbWludcOnw6NvIGRhcyB0ZW1wZXJhdHVyYXMgKCoqY2l0YXIgZXN0byoqKQpgYGB7ciBlY2hvID0gRkFMU0V9CnRyZWxsaXMubGFzdC5vYmplY3QoKSArIAogIGxheWVyKGx0ZXh0KHggPSBhcy5QT1NJWGN0KCIyMDE4LTAxLTE1IiksIHkgPSBwYV9wbTI1KzMsIAogICAgICAgICAgICAgIGxhYmVscyA9IGMoIlBGIiwgZXhwcmVzc2lvbigiTUkiWzNdKSwgZXhwcmVzc2lvbigiTUkiWzJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24oIk1JIlsxXSkpLCBjZXggPSAwLjc1KSwgcm93cyA9IDEpCmBgYApOYSAqKkZpZ3VyYSAzKiogbW9zdHJhLXNlIGEgY29tcGFyYcOnw6NvIGRhcyBjb25jZW50cmHDp8O1ZXMgbcOpZGlhcyBob3LDoXJpYXMgZG8gTk8kXzIkLCBtYXMgbsOjbyBhY29udGVjZW0gdWx0cmFwYXNhZ2VucyBkb3MgcGFkcsO1ZXMgcGFyYSBlc3RlIHBvbHVlbnRlLgpgYGB7ciBpbmNsdWRlID0gRkFMU0V9CnRpbWVQbG90KHNqciwgcG9sbHV0YW50ID0gIm5vMiIsIGRhdGUuYnJlYWtzID0gMTIsIG1haW4gPSAiRmlndXJhIDMgXCBNw6lkaWEgaG9yw6FyaWEgZG8gTk8yIiwgY29scyA9ICJibHVlIiwgeWxhYiA9IGV4cHJlc3Npb24oTk9bMl1+IlsiKm11KiJnLyIqbV57M30qIl0iKSwgeWxpbT0gMDoyODAsICByZWYueSA9IGxpc3QoaCA9IHBhX25vMiwgbHR5ID0gYygyLDIsMiwyKSkpCmBgYApgYGB7ciBlY2hvID0gRkFMU0V9CnRyZWxsaXMubGFzdC5vYmplY3QoKSArIAogIGxheWVyKGx0ZXh0KHggPSBhcy5QT1NJWGN0KCIyMDE4LTAxLTE1IiksIHkgPSBwYV9ubzIrNSwgCiAgICAgICAgICAgICAgbGFiZWxzID0gYygiUEYiLCBleHByZXNzaW9uKCJNSSJbM10pLCBleHByZXNzaW9uKCJNSSJbMl0pLAogICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbigiTUkiWzFdKSksIGNleCA9IDAuNSksIHJvd3MgPSAxKQpgYGAKQSAqKkZpZ3VyYSA0KiogbW9zdHJhIGFzIGNvbmNlbnRyYcOnw7VlcyBtw6F4aW1hcyBkacOhcmlhcyBkYXMgbcOpZGlhcyBtw7N2ZWlzIHBhcmEgbyBPJF8zJCB0cm9wb3Nmw6lyaWNvLiBEdXJhbnRlIG8gdmVyw6NvIGEgbnVib3NpZGFkZSByZWR1emUgYSBpcnJhZGnDom5jaWEgc29sYXIgcXVlIMOpIHVuIGZhdG9yIGRldGVybWluYW50ZSBuYXMgcmVhw6fDtWVzIHF1w61taWNhcyBkZSBmb3JtYcOnw6NvIGRvIE8kXzMkOyBuYSBwcmltYXZlcmEsIGVtIGF1c8OqbmNpYSBkZSBudXZlbnMsIGjDoSB1bSBtYWlvciBuw7ptZXJvIGRlIGhvcmFzIGRlIGlycmFkacOibmNpYSBzb2xhciAoKipjaXRhciBlc3RvKiopLgoKYGBge3IgaW5jbHVkZSA9IEZBTFNFfQp0aW1lUGxvdChtYXhfbzNfZGF5LCBwb2xsdXRhbnQgPSAibzMiLCBkYXRlLmJyZWFrcyA9IDEyLCBtYWluID0gIkZpZ3VyYSA0IFwgTcOpZGlhIG3Ds3ZlbCBkZSA4IGhvcmFzIG3DoXhpbWEgZGlhcmlhIChhbm8gMjAxOCkiLCBjb2xzID0gImRhcmtncmVlbiIsIHlsYWIgPSBleHByZXNzaW9uKE9bM11+IlsiKm11KiJnLyIqbV57M30qIl0iKSwgeWxpbT0gMDoxNjAsICByZWYueSA9IGxpc3QoaCA9IHBhX28zLCBsdHkgPSBjKDIsMiwyLDIpKSkKYGBgCmBgYHtyIGVjaG8gPSBGQUxTRX0KdHJlbGxpcy5sYXN0Lm9iamVjdCgpICsgCiAgbGF5ZXIobHRleHQoeCA9IGFzLlBPU0lYY3QoIjIwMTgtMDEtMTUiKSwgeSA9IHBhX28zKzUsIAogICAgICAgICAgICAgIGxhYmVscyA9IGMoIlBGIiwgZXhwcmVzc2lvbigiTUkiWzNdKSwgZXhwcmVzc2lvbigiTUkiWzJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24oIk1JIlsxXSkpLCBjZXggPSAwLjUpLCByb3dzID0gMSkKYGBgCgoqKjMuIENhbGN1bGUgbyBuw7ptZXJvIGRlIHVsdHJhcGFzc2FnZW5zIGRvcyBwYWRyw7Vlcy9yZWNvbWVuZGHDp8O1ZXMuKioKCkEgKipUYWJlbGEgMioqIG1vc3RyYSBvIG7Dum1lcm8gZGUgdWx0cmFwYXNzYWdlbnMgZG9zIHBhZHLDtWVzIGRlIHF1YWxpZGFkZSBkbyBhciBwYXJhIG9zIHBvbHVlbnRlcy4gQXMgb3DDp8O1ZXMgYHRpbWVBdmVyYWdlYCBmb2kgdXNhZG8gcGFyYSBjYWxjdWxhciBhIG3DqWRpYSBkacOhcmlhIGRvIFBNfjIsNX4uCmBgYHtyIGVjaG8gPSBGQUxTRX0KcG0yNV9kYXkgPSB0aW1lQXZlcmFnZShzdWJzZXQoc2pyLCBzZWxlY3QgPSBjKGRhdGUsIG1vbnRoLCBwbTI1KSksCiAgICAgICAgICAgICAgICAgICAgICAgYXZnLnRpbWUgPSAiZGF5Iiwgc3RhdGlzdGljID0gIm1lYW4iKQoKdWx0cl9wbTI1IDwtIHN1YnNldChwbTI1X2RheSwgcG0yNSA+PSAyNSwgc2VsZWN0ID0gYyhkYXRlLCBwbTI1KSkKY291bnRfcG0yNSA8LSBkYXRhLmZyYW1lKFBvbHVlbnRlID0gIlBNMjUiLAogICAgICAgICAgICAgICAgICAgICAgICAgTUkxID0gbGVuZ3RoKHdoaWNoKHBtMjVfZGF5WzJdID49IDYwKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBNSTIgPSBsZW5ndGgod2hpY2gocG0yNV9kYXlbMl0gPj0gNTApKSwKICAgICAgICAgICAgICAgICAgICAgICAgIE1JMyA9IGxlbmd0aCh3aGljaChwbTI1X2RheVsyXSA+PSAzNykpLAogICAgICAgICAgICAgICAgICAgICAgICAgUEYgPSBsZW5ndGgod2hpY2gocG0yNV9kYXlbMl0gPj0gMjUpKSkKCnVsdHJfbm8yIDwtIHN1YnNldChzanIsIG5vMiA+PSAyMDAsIHNlbGVjdCA9IGMoZGF0ZSwgbm8yKSkKY291bnRfbm8yIDwtIGRhdGEuZnJhbWUoUG9sdWVudGUgPSAiTk8yIiwKICAgICAgICAgICAgICAgICAgICAgICAgTUkxID0gbGVuZ3RoKHdoaWNoKHNqclszXSA+PSAyNjApKSwKICAgICAgICAgICAgICAgICAgICAgICAgTUkyID0gbGVuZ3RoKHdoaWNoKHNqclszXSA+PSAyNDApKSwKICAgICAgICAgICAgICAgICAgICAgICAgTUkzID0gbGVuZ3RoKHdoaWNoKHNqclszXSA+PSAyMjApKSwKICAgICAgICAgICAgICAgICAgICAgICAgUEYgPSBsZW5ndGgod2hpY2goc2pyWzNdID49IDIwMCkpKQoKdWx0cl9vMyA8LSBzdWJzZXQobWF4X28zX2RheSwgbzMgPj0gMTAwLCBzZWxlY3QgPSBjKGRhdGUsIG8zKSkKCmNvdW50X28zIDwtIGRhdGEuZnJhbWUoUG9sdWVudGUgPSAiTzMiLAogICAgICAgICAgICAgICAgICAgICAgIE1JMSA9IGxlbmd0aCh3aGljaChtYXhfbzNfZGF5WzJdID49IDE0MCkpLAogICAgICAgICAgICAgICAgICAgICAgIE1JMiA9IGxlbmd0aCh3aGljaChtYXhfbzNfZGF5WzJdID49IDEzMCkpLAogICAgICAgICAgICAgICAgICAgICAgIE1JMyA9IGxlbmd0aCh3aGljaChtYXhfbzNfZGF5WzJdID49IDEyMCkpLAogICAgICAgICAgICAgICAgICAgICAgIFBGID0gbGVuZ3RoKHdoaWNoKG1heF9vM19kYXlbMl0gID49IDEwMCkpKQoKdWx0ciA8LSBSZWR1Y2UoZnVuY3Rpb24oeCwgeSkgbWVyZ2UoeCwgeSwgYWxsPVRSVUUpLCBsaXN0KHVsdHJfcG0yNSwgdWx0cl9ubzIsIHVsdHJfbzMpKQp1bHRyIDwtIGRhdGEuZnJhbWUodWx0clsxXSwgcm91bmQodWx0clsyOjRdLCBkaWdpdHMgPSAyKSkKCmNvdW50IDwtIFJlZHVjZShmdW5jdGlvbih4LCB5KSBtZXJnZSh4LCB5LCBhbGw9VFJVRSksIGxpc3QoY291bnRfcG0yNSwgY291bnRfbm8yLCBjb3VudF9vMykpIAoKcm0oY291bnRfbm8yLCBjb3VudF9vMywgY291bnRfcG0yNSwgdWx0cl9ubzIsIHVsdHJfbzMsIHVsdHJfcG0yNSkKYGBgCgotLS0Kb3V0cHV0OiBwZGZfZG9jdW1lbnQKLS0tCgpUYWJsZTogVGFiZWxhIDIgTsO6bWVybyBkZSB1bHRyYXBhc3NhZ2VucyBkb3MgcGFkcsO1ZXMgZGUgcXVhbGlkYWRlIGRvIGFyIChDRVRFU0IsIDIwMTkpCgpQb2x1ZW50ZSAgICAgIHwgTUkkXzEkICAgICAgICAgfCBNSSRfMiQgICAgICAgIHwgTUkkXzMkICAgICAgICB8IFBGIAotLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLSAKUE0kX3syLDV9JCAgICB8IDEgICAgICAgICAgICAgfCAyICAgICAgICAgICAgIHwgOCAgICAgICAgICAgICB8IDQ4Ck5PJF8yJCAgICAgICAgfCAwICAgICAgICAgICAgIHwgMCAgICAgICAgICAgICB8IDAgICAgICAgICAgICAgfCAwCk8kXzMkICAgICAgICAgfCAwICAgICAgICAgICAgIHwgMiAgICAgICAgICAgICB8IDMgICAgICAgICAgICAgfCAyMgoKYGBge3IgaW5jbHVkZSA9IEZBTFNFfQpsaWJyYXJ5KGtuaXRyKTsgbGlicmFyeShrYWJsZUV4dHJhKSAjIHRvIG1ha2UgdGFibGVzCgpjb3VudCAlPiUKICBrYWJsZShjYXB0aW9uID0gIlRhYmVsYSAyICBcICBOw7ptZXJvIGRlIHVsdHJhcGFzc2FnZW5zIGRvcyBwYWRyw7VlcyBkZSBxdWFsaWRhZGUgZG8gYXIiKSAlPiUKICBrYWJsZV9zdHlsaW5nKGZvbnRfc2l6ZSA9IDEyKSAlPiUKICBmb290bm90ZShnZW5lcmFsX3RpdGxlID0gIk5vdGE6IiwgZ2VuZXJhbCA9ICJCYXNlYWRvIG5vcyBkYWRvcyBkYSBDRVRFU0IgKDIwMTkpLiIpCmBgYApQYXJhIGVudGVuZGVyIHF1ZSBhY29udGVjZXUsIGFzIGRhdGFzIGNvbSB1bHRyYXBhc3NhZ2VucyBmb3JhbSBjb250YWRvcyBwYXJhIGNhZGEgcG9sdWVudGUgbWVkaWFudGUgbyBwcm9ncmFtYSBgUmAuIEFsw6ltIGRpc3NvLCBhIGZ1bsOnw6NvIGBjYWxlbmRhclBsb3RgIGRvIHBhY290ZSBgb3BlbmFpcmAgZm9pIHVzYWRvIHBhcmEgdmlzdWFsaXphciBjb20gbWVsaG9yIGZhY2lsaWRhZGUgb3MgZGlhcyBxdWUgZXhjZWRlcmFtIG9zIHBhZHLDtWVzIGRlIHF1YWxpZGFkZSBkbyBhciBwYXJhIG8gUE0kX3syLDV9JCAoKipGaWd1cmEgNSoqKSBlIG8gTyRfMyQgKCoqRmlndXJhIDYqKikuCgpKdWxobyBhcHJlc2VudGEgbWFpcyBkaWFzIGRlIHVsdHJhcGFzc2FnZW5zIGRvcyBwYWRyw7VlcyBkZSBxdWFsaWRhZGUgZG8gYXIuIEVzdGUgbcOqcyBhcHJlc2VudGEgYmFpeGFzIHRlbXBlcmF0dXJhcyBlIGNvbmRpw6fDtWVzIGRlIGVzdGFnbmFtZW50byBkYSBjYW1hZGEgZGUgbWlzdHVyYSAoKipjaXRhciBlc3RvKiopLiBPIHNlZ3VuZG8gbcOqcyBjb20gbWFpcyBkaWFzIGRlIHVsdHJhcGFzYWdlbnMgw6kgc2V0ZW1icm8uIE5lc3RlIG3DqnMgdGFtYmVtIGFjb250ZWNlIG9zIG1haW9yZXMgZGlhcyBjb20gY29uY2VudHJhw6fDtWVzIGFsdGFzIGRlIE8kXzMkLgoKYGBge3IgZWNobyA9IEZBTFNFfQpjYWxlbmRhclBsb3QodWx0cixwb2xsdXRhbnQgPSAicG0yNSIsIG1haW4gPSBleHByZXNzaW9uKCJGaWd1cmEgNSBcIERpYXMgY29tIHVsdHJhcGFzc2FnZW5zIHBhcmEgbyBQTSJbIjIsNSJdKSwga2V5LmhlYWRlciA9ICJ1Zy9tMyIsIGF1dG8udGV4dCA9IFQpCmBgYApOZXN0ZSBzZW50aWRvLCBhICoqRmlndXJhIDUqKiBtb3N0cmEgY2xhcmFtZW50ZSBxdWUgb3MgbWVzZXMgZGUgYWdvc3RvIGUgc2V0ZW1icm8gYXByZXNlbnRhbSBvcyBtYWlvcmVzIGRpYXMgY29tIHVsdHJhcGFzYWdlbnMgZG9zIHBhZHLDtWVzIGRlIHF1YWxpZGFkZSBkbyBhciBwYXJhIG8gTyRfMyQuIFByaW5jaXBhbG1lbnRlLCBzZXRlbWJybyB0ZW0gbWFpcyBkaWFzIGFzc2ltIGNvbW8gYXMgY29uY2VudHJhw6fDtWVzIG1haXMgYWx0YXMuCmBgYHtyIGVjaG8gPSBGQUxTRX0KY2FsZW5kYXJQbG90KHVsdHIscG9sbHV0YW50ID0gIm8zIiwgbWFpbiA9IGV4cHJlc3Npb24oIkZpZ3VyYSA2IFwgRGlhcyBjb20gdWx0cmFwYXNzYWdlbnMgcGFyYSBvIE8iWzNdKSwga2V5LmhlYWRlciA9ICJ1Zy9tMyIsIGF1dG8udGV4dCA9IFQpCmBgYAoKKio0LiBDYWxjdWxlIGFzIG3DqWRpYXMgaG9yw6FyaWFzIGRvIFBNfjIsNX4sIE9+M34gZSBOT34yfiBlIGVzYm9jZSBvcyBncsOhZmljb3MgZG8gY2ljbG8gZGnDoXJpbyBtw6lkaW8gKDI0IGhvcmFzKSBwYXJhIGNhZGEgdW0gZG9zIG1lc2VzLioqCgpBcyBtw6lkaWFzIGhvcsOhcmlhcyBmb3JhbSBjYWxjdWxhZGFzIHBhcmEgY2FkYSBwb2x1ZW50ZS4gQSAqKkZpZ3VyYSA3KiogbW9zdHJhIGEgdmFyaWHDp8OjbyBkYXMgY29uY2VudHJhw6fDtWVzIGRvIFBNfjIsNX4uIEp1bGhvIMOpIG8gbcOqcyBxdWUgdGVtIG3DoXhpbWFzIGNvbmNlbnRyYcOnw7VlcyBkdXJhbnRlIG8gY2ljbG8gZGnDoXJpbyBtw6lkaW8gZGUgMjQgaG9yYXMuCgpgYGB7ciBlY2hvID0gRkFMU0V9CnNqciRob3VyIDwtIGhvdXIoc2pyJGRhdGUpCm1lYW5zIDwtIGFnZ3JlZ2F0ZShzanJbInBtMjUiXSwgZm9ybWF0KHNqclsiZGF0ZSJdLCIlbS0lSCIpLCBtZWFuLCBuYS5ybSA9IFRSVUUpCiAgICAgICAgICAgICAgICAgICAgICAKcGxvdChtZWFucyRwbTI1LCB4YXh0ID0gIm4iLCB0eXBlID0gIm4iLCB4bGFiID0gIkhvcmEiLCBjZXguYXhpcyA9IDAuNzUsIHlsYWIgPSBleHByZXNzaW9uKFBNWyIyLDUiXX4iWyIqbXUqImcvIiptXnszfSoiXSIpICkKYXhpcygxLCBhdCA9IHNlcSgxLCAyODgsIDI0KSwgbGFiZWxzID0gRkFMU0UpICMgYWRkIHNvbWUgdGljayBtYXJrcyBhdCAyNCBociBpbnRlcnZhbHMKbW9udGhzID0gYygiSmFuIiwgIkZlYiIsICJNYXIiLCAiQWJyIiwgIk1heSIsICJKdW4iLCAiSnVsIiwgIkFnbyIsICJTZXQiLCAiT3V0IiwgIk5vdiIsICJEZXoiKSAjIGFkZCBzb21lIGxhYmVscyB0byB4LWF4aXMKbG9jLm1vbnRocyA9IHNlcSgxMiwgMjc2LCAyNCkgIyBsb2NhdGlvbiBvZiBsYWJlbHMgb24geC1heGlzCm10ZXh0KG1vbnRocywgc2lkZSA9IDEsIGxpbmUgPSAyLCBhdCA9IGxvYy5tb250aHMpICMgd3JpdGUgdGV4dCBpbiBtYXJnaW4KbGluZXMobWVhbnMkcG0yNSwgY29sID0gIm9yYW5nZSIsIGx3ZCA9IDIpICMgYWRkIHRoZSBsaW5lCmF4aXMoMSwgYXQgPSBzZXEoMSwgMjg4LCAxMiksIGxhYmVscyA9IEZBTFNFKQpob3VyID0gcmVwbGljYXRlKDEyLCAiMTI6MDAiLCBzaW1wbGlmeSA9IEZBTFNFKSAjIGFkZCBzb21lIGxhYmVscyB0byB4LWF4aXMKbXRleHQoaG91ciwgc2lkZSA9IDEsIGxpbmUgPSAxLCBhdCA9IGxvYy5tb250aHMsIGNleCA9IDAuNzUpICMgd3JpdGUgdGV4dCBpbiBtYXJnaW4KYWJsaW5lKHYgPSBzZXEoMSwgMjg4LCAxMiksIGNvbCA9ICJncmV5ODAiLCBsdHkgPSA0KQphYmxpbmUodiA9IHNlcSgxLCAyODgsIDI0KSwgY29sID0gImdyZXk3MCIpICMgYWRkIHNvbWUgZ3JpZCBsaW5lcwp0aXRsZShleHByZXNzaW9uKCJGaWd1cmEgNyBcIFZhcmlhw6fDo28gbcOpZGlhIGhvcsOhcmlhIHBvciBtw6pzIGRvIFBNIlsiMiw1Il0pLCBzdWIgPSAiTcOqcyIsCiAgICAgIGNleC5tYWluID0gMS4yNSwgICBmb250Lm1haW49IDQsIGNvbC5tYWluPSAiYmxhY2siLAogICAgICBjZXguc3ViID0gMC43NSwgZm9udC5zdWIgPSAzLCBjb2wuc3ViID0gImJsYWNrIikKCmBgYApBICoqRmlndXJhIDgqKiBtb3N0cmEgY2ljbG9zIGRpw6FyaW9zIGRlIDI0IGhvcmFzIHBhcmEgY2FkYSBtw6pzIGRhcyBjb25jZW50cmHDp8O1ZXMgZGUgTk9+Mn4uIEFsdGFzIGNvbmNlbnRyYcOnw7VlcyBlc3TDo28gcHJlc2VudGVzIG5vIGludmVybm8gZSBiYWl4YXMgZHVyYW50ZSBvIHZlcsOjby4gQWzDqW0gZGlzc28sIHRhbWLDqW0gaMOhIGNvbmNlbnRyYcOnw7VlcyBhbHRhcyBkdXJhbnRlIGEgbWFuaMOjICgwNzowMCBoIC0gMDk6MDAgaCkgZSBhIG5vaXRlICgxOTowMCBoIC0gMjI6MDAgaCkuIFBvciBvdXRybyBsYWRvLCBhcHJveGltYWRhbWVudGUgZW50cmUgYXMgMTQ6MDAgaG9yYXMgZSBhcyAxNzowMCBob3JhcyBhY29udGVjZSB1bWEgZGltaW51w6fDo28gZGFzIGNvbmNlbnRyYcOnw7VlcyBkZSBOT34yfjsgc2VuZG8gcXVhc2kgY29uc3RhbnRlIGFvIGxvbmdvIGRvIGFuby4KCmBgYHtyIGVjaG8gPSBGQUxTRX0KbWVhbnMgPC0gYWdncmVnYXRlKHNqclsibm8yIl0sIGZvcm1hdChzanJbImRhdGUiXSwiJW0tJUgiKSwgbWVhbiwgbmEucm0gPSBUUlVFKQogICAgICAgICAgICAgICAgICAgICAgCnBsb3QobWVhbnMkbm8yLCB4YXh0ID0gIm4iLCB0eXBlID0gIm4iLCB4bGFiID0gIkhvcmEiLCB5bGFiID0gZXhwcmVzc2lvbihOT1syXX4iWyIqbXUqImcvIiptXnszfSoiXSIpICkKYXhpcygxLCBhdCA9IHNlcSgxLCAyODgsIDI0KSwgbGFiZWxzID0gRkFMU0UpICMgYWRkIHNvbWUgdGljayBtYXJrcyBhdCAyNCBociBpbnRlcnZhbHMKbW9udGhzID0gYygiSmFuIiwgIkZlYiIsICJNYXIiLCAiQWJyIiwgIk1heSIsICJKdW4iLCAiSnVsIiwgIkFnbyIsICJTZXQiLCAiT3V0IiwgIk5vdiIsICJEZXoiKSAjIGFkZCBzb21lIGxhYmVscyB0byB4LWF4aXMKbG9jLm1vbnRocyA9IHNlcSgxMiwgMjc2LCAyNCkgIyBsb2NhdGlvbiBvZiBsYWJlbHMgb24geC1heGlzCm10ZXh0KG1vbnRocywgc2lkZSA9IDEsIGxpbmUgPSAyLCBhdCA9IGxvYy5tb250aHMpICMgd3JpdGUgdGV4dCBpbiBtYXJnaW4KbGluZXMobWVhbnMkbm8yLCBjb2wgPSAicmVkIiwgbHdkID0gMikgIyBhZGQgdGhlIGxpbmUKYXhpcygxLCBhdCA9IHNlcSgxLCAyODgsIDEyKSwgbGFiZWxzID0gRkFMU0UpCmhvdXIgPSByZXBsaWNhdGUoMTIsICIxMjowMCIsIHNpbXBsaWZ5ID0gRkFMU0UpICMgYWRkIHNvbWUgbGFiZWxzIHRvIHgtYXhpcwptdGV4dChob3VyLCBzaWRlID0gMSwgbGluZSA9IDEsIGF0ID0gbG9jLm1vbnRocywgY2V4ID0gMC43NSkgIyB3cml0ZSB0ZXh0IGluIG1hcmdpbgphYmxpbmUodiA9IHNlcSgxLCAyODgsIDEyKSwgY29sID0gImdyZXk4MCIsIGx0eSA9IDQpCmFibGluZSh2ID0gc2VxKDEsIDI4OCwgMjQpLCBjb2wgPSAiZ3JleTcwIikgIyBhZGQgc29tZSBncmlkIGxpbmVzCnRpdGxlKGV4cHJlc3Npb24oIkZpZ3VyYSA4IFwgVmFyaWHDp8OjbyBtw6lkaWEgaG9yw6FyaWEgcG9yIG3DqnMgZG8gTk8iWzJdKSwgc3ViID0gIk3DqnMiLAogICAgICBjZXgubWFpbiA9IDEuMjUsICAgZm9udC5tYWluPSA0LCBjb2wubWFpbj0gImJsYWNrIiwKICAgICAgY2V4LnN1YiA9IDAuNzUsIGZvbnQuc3ViID0gMywgY29sLnN1YiA9ICJibGFjayIpCmBgYApBICoqRmlndXJhIDkqKiBtb3N0cmEgY2ljbG9zIGRpw6FyaW9zIGRlIDI0IGhvcmFzIHBhcmEgY2FkYSBtw6pzIGRhcyBjb25jZW50cmHDp8O1ZXMgZGUgT34zfi4gUGVydG8gZGFzIDEyOjAwIGhvcmFzIGFjb250ZWNlIGFzIG3DoXhpbWFzIGNvbmNlbnRyYcOnw7VlcyBkZSBPfjN+IGRldmlkbyBxdWUgbmVzdGEgaG9yYSDDqSBtw6F4aW1hIG9zIHZhbG9yZXMgZGUgaXJyYWRpw6JuY2lhIHNvbGFyLiBEdXJhbnRlIGEgbm9pdGUgaMOhIHBlcXVlbm9zIGluY3JlbWVudG9zOyBvcyBxdWFpcyBwb2RlcmlhbSBlc3RhciByZWxhY2lvbmFkb3MgY29tIG8gdHJhbnNwb3J0ZSBjb21vIHN1Z2VyZSAoKipjaXRhciBlc3RvKiopLgpgYGB7ciBlY2hvID0gRkFMU0V9Cm1lYW5zIDwtIGFnZ3JlZ2F0ZShzanJbIm8zIl0sIGZvcm1hdChzanJbImRhdGUiXSwiJW0tJUgiKSwgbWVhbiwgbmEucm0gPSBUUlVFKQogICAgICAgICAgICAgICAgICAgICAgCnBsb3QobWVhbnMkbzMsIHhheHQgPSAibiIsIHR5cGUgPSAibiIsIHhsYWIgPSAiSG9yYSIsIHlsYWIgPSBleHByZXNzaW9uKE9bM11+IlsiKm11KiJnLyIqbV57M30qIl0iKSApCmF4aXMoMSwgYXQgPSBzZXEoMSwgMjg4LCAxMiksIGNvbCA9ICJibGFjayIgLGxhYmVscyA9IEZBTFNFKQpheGlzKDEsIGF0ID0gc2VxKDEsIDI4OCwgMjQpLCBjb2wgPSAiYmxhY2siLGxhYmVscyA9IEZBTFNFKSAjIGFkZCBzb21lIHRpY2sgbWFya3MgYXQgMjQgaHIgaW50ZXJ2YWxzCm1vbnRocyA9IGMoIkphbiIsICJGZWIiLCAiTWFyIiwgIkFiciIsICJNYXkiLCAiSnVuIiwgIkp1bCIsICJBZ28iLCAiU2V0IiwgIk91dCIsICJOb3YiLCAiRGV6IikgIyBhZGQgc29tZSBsYWJlbHMgdG8geC1heGlzCmxvYy5tb250aHMgPSBzZXEoMTIsIDI3NiwgMjQpICMgbG9jYXRpb24gb2YgbGFiZWxzIG9uIHgtYXhpcwptdGV4dChtb250aHMsIHNpZGUgPSAxLCBsaW5lID0gMiwgYXQgPSBsb2MubW9udGhzKSAjIHdyaXRlIHRleHQgaW4gbWFyZ2luCmxpbmVzKG1lYW5zJG8zLCBjb2wgPSAiYmx1ZSIsIGx3ZCA9IDIpICMgYWRkIHRoZSBsaW5lCmhvdXIgPSByZXBsaWNhdGUoMTIsICIxMjowMCIsIHNpbXBsaWZ5ID0gRkFMU0UpICMgYWRkIHNvbWUgbGFiZWxzIHRvIHgtYXhpcwptdGV4dChob3VyLCBzaWRlID0gMSwgbGluZSA9IDEsIGF0ID0gbG9jLm1vbnRocywgY2V4ID0gMC43NSkgIyB3cml0ZSB0ZXh0IGluIG1hcmdpbgphYmxpbmUodiA9IHNlcSgxLCAyODgsIDEyKSwgY29sID0gImdyZXk4MCIsIGx0eSA9IDQpCmFibGluZSh2ID0gc2VxKDEsIDI4OCwgMjQpLCBjb2wgPSAiZ3JleTcwIikgIyBhZGQgc29tZSBncmlkIGxpbmVzCnRpdGxlKGV4cHJlc3Npb24oIkZpZ3VyYSA5IFwgVmFyaWHDp8OjbyBtw6lkaWEgaG9yw6FyaWEgcG9yIG3DqnMgZG8gTyJbM10pLCBzdWIgPSAiTcOqcyIsCiAgICAgIGNleC5tYWluID0gMS4yNSwgICBmb250Lm1haW49IDQsIGNvbC5tYWluPSAiYmxhY2siLAogICAgICBjZXguc3ViID0gMC43NSwgZm9udC5zdWIgPSAzLCBjb2wuc3ViID0gImJsYWNrIikKCmBgYAoqKjUuIERpc2N1dGEgbyBjb21wb3J0YW1lbnRvIGRpw6FyaW8gZG9zIHBvbHVlbnRlcyAodGVudGUgcmVsYWNpb25hciBjb20gYXMgdmFyacOhdmVpcyBkZSByYWRpYcOnw6NvLCB0ZW1wZXJhdHVyYSwgY2h1dmEvdW1pZGFkZSkuKioKCiogUGFyYSBvIHBvbHVlbnRlIFBNfjIsNX4sIGR1cmFudGUgb3MgbWVzZXMgY29tIGNodXZhIChlbnRyZSBub3ZlbWJybyBlIG1hcsOnbykgKCoqIHZlcmlmaWNhciBlc3RvIGUgY2l0YXIqKikgYSBhdG1vc2ZlcmEgw6kgbGltcGEgcGVsbyBpbXBhY3RvIGRhcyBnb3RhcyBkZSBjaHV2YSBjb20gYXMgcGFydMOtY3VsYXMuCiogQSBleGNlw6fDo28gCgoqKjYuIFByZXBhcmUgdW1hIHBlcXVlbmEgYXByZXNlbnRhw6fDo28gY29udGVuZG8gb3MgcmVzdWx0YWRvcyBwYXJhIGRpc2N1dGlybW9zIG5hIHByw7N4aW1hIGF1bGEuKioKCkEgYXByZXNlbnRhw6fDo28gbW9zdHJhIGFzIGZpZ3VyYXMgZSByZWZlcsOqbmNpYXMgZGUgZXN0dWRvcyBkZSBxdWFsaWRhZGUgZG8gYXIgcGFyYSBTw6NvIFBhdWxvIGFzc2ltIGNvbW8gcmVmZXLDqm5jaWEgZGUgbGl2cm9zIHJlbGFjaW9uYWRvcyBjb20gbyB0ZW1hIGRlIHBvbHVpw6fDo28gZG8gYXIuCgojIyMgUmVmZXLDqm5jaWEKCiogeHh4eAoqIHh4eHgKCg==