Applet Geogebra

Clique aqui para acessar o applet Geogebra com as respostas.

1 Instruções

2 Questão única: construindo uma casa 2D

Veja o seu número nesta lista.

Você vai achar equações para o chão, as paredes, a porta, e o telhado de uma casa no \(\mathbb{R}^2\).

Em todos os seus cálculos e respostas, use frações e radicais.

Não use valores numéricos com vírgulas decimais em momento algum.

Desenho

Sua casa vai ficar assim.

Não, o chão não vai ser horizontal.

A inclinação do chão vai depender do seu número nesta lista.

Chão

  • O chão da casa é o segmento que vai do ponto \(A\) até o ponto \(B\).

  • O ponto \(A\) é a origem: \(A = (0, 0)\).

  • Use as coordenadas de \(B\) que correspondem ao seu número.

  • Comece calculando o vetor \(\overrightarrow{AB}\).

    • Chame as coordenadas de \(B\) de \((x_B, y_B)\).

    • Então, \(\overrightarrow{AB} = (x_B - 0, y_B - 0) = (x_B, y_B)\).

  • Depois — vá por mim — ache um vetor unitário na mesma direção e sentido que \(\overrightarrow{AB}\).

    • Basta dividir \(\overrightarrow{AB}\) pelo seu módulo.

    • \(|\overrightarrow{AB}| = \sqrt{x_B^2 + y_B^2}\).

    • Independente das coordenadas do ponto \(B\) sorteado para você, este módulo vai ser \(12\) (porque eu quis assim).

    • O vetor unitário na mesma direção e sentido de \(\overrightarrow{AB}\) vai ser

      \[ \overrightarrow{AB_U} = \left( \frac{x_B}{12}, \frac{y_B}{12} \right) \]

  • Ache a equação da reta que contém o chão.

    • Paramétricas:

      \(\overrightarrow{AB} = (x_B, y_B)\) é um vetor diretor.

      Usando o ponto \(A\):

      \[ \begin{cases} x = 0 + x_B \cdot t \\ y = 0 + y_B \cdot t \end{cases} \]

      Ou, usando o ponto \(B\):

      \[ \begin{cases} x = x_B + x_B \cdot t \\ y = y_B + y_B \cdot t \end{cases} \]

    • Cartesiana:

      Precisamos de um vetor normal (perpendicular) ao chão.

      Podemos usar \(\overrightarrow{n_1} = (-y_B, x_B)\) ou \(\overrightarrow{n_2} = (y_B, -x_B)\).

      A equação fica

      \[ -y_Bx + x_By + \gamma = 0 \]

      ou

      \[ y_Bx - x_By + \gamma = 0 \]

      Como a reta passa pela origem, \(\gamma = 0\).

      A equação fica

      \[ -y_Bx + x_By = 0 \]

      ou

      \[ y_Bx - x_By = 0 \]

    • Reduzida:

      \[ y = \frac{\Delta y}{\Delta x}x + b \iff y = \frac{y_B}{x_B}x + b \] Como a reta passa pela origem, \(b = 0\). A equação fica \[ y = \frac{y_B}{x_B}x \]

  • Coordenadas de \(B\) — use o item que corresponde ao valor de \(n\) para a sua matrícula:

    1. \(\quad B = \left(\frac{4}{15},\;\; \frac{8}{15} \; \sqrt{506}\right)\)

    2. \(\quad B = \left(\frac{8}{15},\;\; \frac{4}{15} \; \sqrt{2021}\right)\)

    3. \(\quad B = \left(\frac{4}{5},\;\; \frac{16}{5} \; \sqrt{14}\right)\)

    4. \(\quad B = \left(\frac{16}{15},\;\; \frac{28}{15} \; \sqrt{41}\right)\)

    5. \(\quad B = \left(\frac{4}{3},\;\; \frac{16}{3} \; \sqrt{5}\right)\)

    6. \(\quad B = \left(\frac{8}{5},\;\; \frac{4}{5} \; \sqrt{221}\right)\)

    7. \(\quad B = \left(\frac{28}{15},\;\; \frac{8}{15} \; \sqrt{494}\right)\)

    8. \(\quad B = \left(\frac{32}{15},\;\; \frac{4}{15} \; \sqrt{1961}\right)\)

    9. \(\quad B = \left(\frac{12}{5},\;\; \frac{24}{5} \; \sqrt{6}\right)\)

    10. \(\quad B = \left(\frac{8}{3},\;\; \frac{4}{3} \; \sqrt{77}\right)\)

    11. \(\quad B = \left(\frac{44}{15},\;\; \frac{16}{15} \; \sqrt{119}\right)\)

    12. \(\quad B = \left(\frac{16}{5},\;\; \frac{4}{5} \; \sqrt{209}\right)\)

    13. \(\quad B = \left(\frac{52}{15},\;\; \frac{32}{15} \; \sqrt{29}\right)\)

    14. \(\quad B = \left(\frac{56}{15},\;\; \frac{4}{15} \; \sqrt{1829}\right)\)

    15. \(\quad B = \left(4,\;\; 8 \; \sqrt{2}\right)\)

    16. \(\quad B = \left(\frac{64}{15},\;\; \frac{4}{15} \; \sqrt{1769}\right)\)

    17. \(\quad B = \left(\frac{68}{15},\;\; \frac{8}{15} \; \sqrt{434}\right)\)

    18. \(\quad B = \left(\frac{24}{5},\;\; \frac{12}{5} \; \sqrt{21}\right)\)

    19. \(\quad B = \left(\frac{76}{15},\;\; \frac{32}{15} \; \sqrt{26}\right)\)

    20. \(\quad B = \left(\frac{16}{3},\;\; \frac{4}{3} \; \sqrt{65}\right)\)

    21. \(\quad B = \left(\frac{28}{5},\;\; \frac{16}{5} \; \sqrt{11}\right)\)

    22. \(\quad B = \left(\frac{88}{15},\;\; \frac{4}{15} \; \sqrt{1541}\right)\)

    23. \(\quad B = \left(\frac{92}{15},\;\; \frac{8}{15} \; \sqrt{374}\right)\)

    24. \(\quad B = \left(\frac{32}{5},\;\; \frac{4}{5} \; \sqrt{161}\right)\)

    25. \(\quad B = \left(\frac{20}{3},\;\; \frac{8}{3} \; \sqrt{14}\right)\)

    26. \(\quad B = \left(\frac{104}{15},\;\; \frac{4}{15} \; \sqrt{1349}\right)\)

    27. \(\quad B = \left(\frac{36}{5},\;\; \frac{48}{5}\right)\)

    28. \(\quad B = \left(\frac{112}{15},\;\; \frac{4}{15} \; \sqrt{1241}\right)\)

    29. \(\quad B = \left(\frac{116}{15},\;\; \frac{16}{15} \; \sqrt{74}\right)\)

    30. \(\quad B = \left(8,\;\; 4 \; \sqrt{5}\right)\)

    31. \(\quad B = \left(\frac{124}{15},\;\; \frac{8}{15} \; \sqrt{266}\right)\)

    32. \(\quad B = \left(\frac{128}{15},\;\; \frac{4}{15} \; \sqrt{1001}\right)\)

    33. \(\quad B = \left(\frac{44}{5},\;\; \frac{8}{5} \; \sqrt{26}\right)\)

    34. \(\quad B = \left(\frac{136}{15},\;\; \frac{4}{15} \; \sqrt{869}\right)\)

    35. \(\quad B = \left(\frac{28}{3},\;\; \frac{16}{3} \; \sqrt{2}\right)\)

    36. \(\quad B = \left(\frac{48}{5},\;\; \frac{36}{5}\right)\)

    37. \(\quad B = \left(\frac{148}{15},\;\; \frac{16}{15} \; \sqrt{41}\right)\)

    38. \(\quad B = \left(\frac{152}{15},\;\; \frac{4}{15} \; \sqrt{581}\right)\)

    39. \(\quad B = \left(\frac{52}{5},\;\; \frac{8}{5} \; \sqrt{14}\right)\)

    40. \(\quad B = \left(\frac{32}{3},\;\; \frac{4}{3} \; \sqrt{17}\right)\)

    41. \(\quad B = \left(\frac{164}{15},\;\; \frac{8}{15} \; \sqrt{86}\right)\)

    42. \(\quad B = \left(\frac{56}{5},\;\; \frac{4}{5} \; \sqrt{29}\right)\)

    43. \(\quad B = \left(\frac{172}{15},\;\; \frac{16}{15} \; \sqrt{11}\right)\)

    44. \(\quad B = \left(\frac{176}{15},\;\; \frac{4}{15} \; \sqrt{89}\right)\)

Paredes

  • A altura das paredes, sem contar o telhado (ou seja, a distância de \(A\) a \(D\)), é \(1/3\) da largura da casa.

  • As paredes são perpendiculares ao chão.

  • Calcule as coordenadas de \(C\) e \(D\).

    • A largura da casa é a distância de \(A\) a \(B\), ou, o que dá no mesmo, o módulo do vetor \(\overrightarrow{AB}\), que é \(12\).

    • Vamos chamar a largura da casa de \(L = 12\).

    • A altura das paredes vai ser \(L/3 = 4\).

    • Para achar o ponto \(D\), basta achar um vetor que seja perpendicular ao chão, com sentido do chão para o teto, com módulo \(4\).

    • É aqui que entra o vetor \(\overrightarrow{AB_U}\) que achamos antes. Se invertermos a ordem das coordenadas de \(\overrightarrow{AB_U}\) e trocarmos o sinal de uma delas, vamos ter o vetor \(\overrightarrow{\text{parede}_U}\), um vetor unitário perpendicular ao chão.

    • Como o sentido que queremos é para cima e para a esquerda, a coordenada \(x\) do vetor precisa ser negativa, e a coordenada \(y\) do vetor precisa ser positiva.

    • Vamos usar \(\overrightarrow{\text{parede}_U} = \left( \frac{-y_B}{12}, \frac{x_B}{12}\right)\). Perceba que, como \(x_B\) e \(y_B\) eram ambos maiores que zero, os sinais das coordenadas ficam como queremos.

    • Como \(\overrightarrow{\text{parede}_U}\) é unitário, basta multiplicá-lo por \(4\) e somar o resultado às coordenadas de \(A\) para achar o ponto \(D\):

      \[ D = (0, 0) + 4 \cdot \left( \frac{-y_B}{12}, \frac{x_B}{12}\right) = \left( \frac{-y_B}{3}, \frac{x_B}{3}\right) \]

    • Seguindo o mesmo raciocínio para \(B\), chegamos ao ponto \(C\):

      \[ C = (x_B, y_B) + 4 \cdot \left( \frac{-y_B}{12}, \frac{x_B}{12}\right) = \left( x_B - \frac{y_B}{3}, y_B + \frac{x_B}{3}\right) \]

  • Escreva as equações das duas retas que contêm as paredes.

    • Equações paramétricas da reta que contém \(AD\):

      \[ \begin{cases} x = -\frac{y_B}{3} \cdot t \\ y = \frac{x_B}{3} \cdot t \end{cases} \]

    • Equação cartesiana da reta que contém \(AD\):

      Usando o vetor \(\overrightarrow{AB} = (x_B, y_B)\), normal à reta, a equação fica

      \[ x_B \cdot x + y_B \cdot y + \gamma = 0 \]

      Como \(A = (0, 0)\) é ponto desta reta, \(\gamma = 0\):

      \[ x_B \cdot x + y_B \cdot y = 0 \]

    • Equação reduzida da reta que contém \(AD\):

      \[ y = \frac{\Delta y}{\Delta x}x + b \iff y = \frac{-x_B / 3}{y_B / 3}x + b \]

      Como a reta passa pela origem, \(b = 0\). Então, a equação fica

      \[ y = -\frac{x_B}{y_B}x \]

    • Equações paramétricas da reta que contém \(BC\):

      \[ \begin{cases} x = x_B -\frac{y_B}{3} \cdot t \\ y = y_B + \frac{x_B}{3} \cdot t \end{cases} \]

    • Equação cartesiana da reta que contém \(BC\):

      Usando o vetor \(\overrightarrow{AB} = (x_B, y_B)\), normal à reta, a equação fica

      \[ x_B \cdot x + y_B \cdot y + \gamma = 0 \]

      Como \(B = (x_B, y_B)\) é ponto desta reta:

      \[ x_B \cdot x_B + y_B \cdot y_B + \gamma = 0 \iff \gamma = -\left( x_B^2 + y_B^2 \right) \]

      e a equação fica

      \[ x_B \cdot x + y_B \cdot y - \left( x_B^2 + y_B^2 \right) = 0 \]

      Ou, como \(x_B^2 + y_B^2 = 144\),

      \[ x_B \cdot x + y_B \cdot y - 144 = 0 \]

    • Equação reduzida da reta que contém \(BC\):

      \[ \begin{align} y = \frac{\Delta y}{\Delta x}x + b &\iff y = \frac{y_B - y_B - x_B/3}{x_B - x_B + y_B/3}x + b \\ &\iff y = -\frac{x_B}{y_B}x + b \end{align} \]

      Como o ponto \(B = (x_B, y_B)\) pertence a esta reta:

      \[ \begin{align} y = -\frac{x_B}{y_B}x + b &\iff y_B = -\frac{x_B}{y_B}x_B + b \\ &\iff b = \frac{x_B^2}{y_B} + y_b \\ &\iff b = \frac{x_B^2 + y_B^2}{y_B} \\ &\iff b = \frac{144}{y_B} \end{align} \]

      E a equação fica

      \[ y = -\frac{x_B}{y_B}x + \frac{144}{y_B} \]

Telhado

  • A altura do teto até o topo do telhado (o ponto \(E\)) é \(1/6\) da largura da casa.

    Ou seja, a altura do chão até o topo do telhado é \(1/2\) da largura da casa.

  • As duas partes do telhado têm o mesmo comprimento.

  • Calcule as coordenadas de \(E\).

    • A distância do teto ao telhado é \(L/6 = 2\).

    • Para achar o ponto \(E\), primeiro achamos o ponto médio de \(CD\), que vamos chamar de \(M\):

      \[ \begin{align} M &= \left( \frac{x_B - y_B/3 - y_B/3}{2},\; \frac{y_B + x_B/3 + x_B/3}{2} \right) \\ &= \left( \frac{x_B}{2} - \frac{y_B}{3},\; \frac{y_B}{2} + \frac{x_B}{3} \right) \\ \end{align} \]

    • Agora, multiplicamos o mesmo vetor unitário \(\overrightarrow{\text{parede}_U}\) por \(2\) e somamos às coordenadas de \(M\) para “subir” de \(M\) até \(E\):

      \[ \begin{align} E &= \left( \frac{x_B}{2} - \frac{y_B}{3},\; \frac{y_B}{2} + \frac{x_B}{3} \right) + 2 \cdot \left( \frac{-y_B}{12}, \frac{x_B}{12}\right) \\ &= \left( \frac{x_B - y_B}{2},\; \frac{x_B + y_B}{2} \right) \end{align} \]

  • Ache as equações das retas que contêm os lados do telhado.

    • Vamos fazer só as equações paramétricas.

    • Para o lado \(ED\), vamos precisar do vetor \(\overrightarrow{ED}\):

      \[ \begin{align} \overrightarrow{ED} &= \left( \frac{-y_B}{3} - \frac{x_B - y_B}{2},\; \frac{x_B}{3} - \frac{x_B + y_B}{2} \right) \\ &= \left( \frac{y_B}{6} - \frac{x_B}{2},\; \frac{-y_B}{2} - \frac{x_B}{6} \right) \end{align} \]

    • Usando o ponto \(D\), fazemos as equações paramétricas da reta que contém \(ED\):

      \[ \begin{cases} x = \frac{-y_B}{3} + \left( \frac{y_B}{6} - \frac{x_B}{2}\right) \cdot t \\ y = \frac{x_B}{3} + \left( \frac{-y_B}{2} - \frac{x_B}{6} \right) \cdot t \end{cases} \]

    • Para o lado \(EC\), vamos precisar do vetor \(\overrightarrow{EC}\):

      \[ \begin{align} \overrightarrow{EC} &= \left( x_B - \frac{y_B}{3} - \frac{x_B - y_B}{2},\; y_B + \frac{x_B}{3} - \frac{x_B + y_B}{2} \right) \\ &= \left( \frac{y_B}{6} + \frac{x_B}{2},\; \frac{y_B}{2} - \frac{x_B}{6} \right) \end{align} \]

    • Usando o ponto \(C\), fazemos as equações paramétricas da reta que contém \(EC\):

      \[ \begin{cases} x = x_B - \frac{y_B}{3} + \left( \frac{y_B}{6} + \frac{x_B}{2} \right) \cdot t \\ y = y_B + \frac{x_B}{3} + \left( \frac{y_B}{2} - \frac{x_B}{6} \right) \cdot t \end{cases} \]

  • Use o produto escalar para descobrir o ângulo no topo do telhado (no ponto \(E\)).

    • Usamos as coordenadas de \(\overrightarrow{EC}\) e \(\overrightarrow{ED}\) para achar o produto escalar:

      \[ \begin{align} & \langle \overrightarrow{EC}, \overrightarrow{ED} \rangle \\ &= \left( \frac{y_B}{6} + \frac{x_B}{2} \right) \cdot \left(\frac{y_B}{6} - \frac{x_B}{2} \right) \;+\; \left( \frac{y_B}{2} - \frac{x_B}{6} \right) \cdot \left( \frac{-y_B}{2} - \frac{x_B}{6} \right) \\ &= - \frac29 \cdot \left(x_B^2 + y_B^2\right) \end{align} \]

      Lembrando que \(|\overrightarrow{AB}| = \sqrt{x_B^2 + y_B^2} = 12\), vemos que \(x_B^2 + y_B^2 = 144\).

      Daí, \(\langle \overrightarrow{EC}, \overrightarrow{ED} \rangle = -32\).

    • O cosseno do ângulo \(\theta\) entre \(\overrightarrow{EC}\) e \(\overrightarrow{ED}\) vai ser

      \[ \cos \theta = \frac{\langle \overrightarrow{EC}, \overrightarrow{ED} \rangle} {|\overrightarrow{EC}| \cdot |\overrightarrow{ED}|} \]

    • Precisamos do módulo de \(\overrightarrow{EC}\) (que, aliás, vai ser igual ao módulo de \(\overrightarrow{ED}\), pois os dois lados do telhado têm o mesmo comprimento):

      \[ \begin{align} |\overrightarrow{EC}| = |\overrightarrow{ED}| &= \sqrt{ \left(\frac{y_B}{6} + \frac{x_B}{2}\right)^2 \;+\; \left(\frac{y_B}{2} - \frac{x_B}{6}\right)^2 } \\ &= 2\; \sqrt{10} \end{align} \]

    • Então

      \[ \cos \theta = \frac{\langle \overrightarrow{EC}, \overrightarrow{ED} \rangle} {|\overrightarrow{EC}| \cdot |\overrightarrow{ED}|} = \frac{-32}{(2\;\sqrt{10})^2} = -\frac45 \]

    • O que dá (usando uma calculadora):

      \[ \theta = \arccos \left( -\frac45 \right) \approx 143^\circ \]

  • Use o produto escalar para achar a área do triângulo azul.

    • Na página \(70\) do livro (pdf), vemos que a área do triângulo formado pelos vetores \(\overrightarrow{EC}\) e \(\overrightarrow{ED}\) é

      \[ \frac12\; \sqrt{ |\overrightarrow{EC}|^2\;|\overrightarrow{ED}|^2 - \langle \overrightarrow{EC}, \overrightarrow{ED} \rangle^2 } \]

    • No nosso caso, a área fica:

      \[ \frac12\; \sqrt{ (2 \sqrt{10})^2\;(2 \sqrt{10})^2 - (-32)^2 } \;=\; 12 \]

Porta

  • A largura da porta é \(1/3\) da largura da casa.

  • A porta está centralizada horizontalmente na fachada.

  • A altura da porta é \(1/6\) da largura da casa.

  • Calcule as coordenadas de \(H\) e \(I\).

    • Primeiro, achamos os pontos \(F\) e \(G\).

    • A largura da porta é \(12/3 = 4\).

    • Como a porta está centralizada,

      \[ F = A + 4 \cdot \overrightarrow{AB_U} = (0, 0) + 4 \cdot \left( \frac{x_B}{12}, \frac{y_B}{12} \right) = \left( \frac{x_B}{3}, \frac{y_B}{3} \right) \] e

      \[ G = A + 8 \cdot \overrightarrow{AB_U} = (0, 0) + 8 \cdot \left( \frac{x_B}{12}, \frac{y_B}{12} \right) = \left( \frac{2x_B}{3}, \frac{2y_B}{3} \right) \]

    • A altura da porta é \(12/6 = 2\).

    • “Subindo” \(2\) unidades na direção de \(\overrightarrow{\text{parede}_U}\), a partir de \(G\), chegamos a \(H\):

      \[ \begin{align} H &= G + 2 \cdot \overrightarrow{\text{parede}_U} \\ &= \left( \frac{2x_B}{3}, \frac{2y_B}{3} \right) + 2 \cdot \left( \frac{-y_B}{12}, \frac{x_B}{12}\right) \\ &= \left( \frac{4x_B - y_B}{6}, \frac{x_B + 4y_B}{6} \right) \end{align} \]

    • “Subindo” \(2\) unidades na direção de \(\overrightarrow{\text{parede}_U}\), a partir de \(F\), chegamos a \(I\):

      \[ \begin{align} I &= F + 2 \cdot \overrightarrow{\text{parede}_U} \\ &= \left( \frac{x_B}{3}, \frac{y_B}{3} \right) + 2 \cdot \left( \frac{-y_B}{12}, \frac{x_B}{12}\right) \\ &= \left( \frac{2x_B - y_B}{6}, \frac{x_B + 2y_B}{6} \right) \end{align} \]

3 Números dos alunos, por matrícula

matrícula n
119060029 33
122060003 24
122060004 35
122060005 26
122060006 4
122060007 29
122060008 6
122060009 32
122060010 7
122060011 17
122060012 14
122060013 37
122060014 38
122060015 23
122060016 39
122060017 15
122060018 12
122060019 36
122060020 22
122060021 5
122060022 18
122060023 19
122060028 27
122060029 21
122060030 30
122060031 16
122060033 42
122060034 9
122060035 10
122060036 13
122060038 2
122060040 1
122060041 3
215060056 40
220060041 28
221060040 8
221060047 11
622060024 20
622060025 25
622060026 31
622060027 34
822060037 41
LS0tCnRpdGxlOiAnTGlzdGEgMTogcmVzcG9zdGFzJwpzdWJ0aXRsZTogJ0dlb21ldHJpYSBBbmFsw610aWNhIDIwMjIuMScKYXV0aG9yOiAnUHJvZi4gRmVybmFuZG8gTsOhdWZlbCcKZW1haWw6ICdodHRwczovL2ZuYXVmZWwuZ2l0aHViLmlvLycKZGF0ZTogJyh2LiBgciBmb3JtYXQoU3lzLkRhdGUoKSwgIiVkLyVtLyVZIilgKScKbGFuZzogJ3B0LWJyJwoKb3V0cHV0OiAKICAjIFRvIGluc3RhbGwgdGhlc2Ugb3V0cHV0IGZvcm1hdHMsIHJ1bgogICMgICBpbnN0YWxsLnBhY2thZ2VzKCJkZXZ0b29scyIpCiAgIyAgIGRldnRvb2xzOjppbnN0YWxsX2dpdGh1YigiZm5hdWZlbC9mbmF1ZmVsUm1kIikKICBmbmF1ZmVsUm1kOjpodG1sX3JlcG9ydDoKICAgIGNzczogCiAgICAgIC0gZGVmYXVsdAogICAgICAtIGh0bWxfZmlsZXMvd2ViZXguY3NzCiAgICBpbmNsdWRlczoKICAgICAgYWZ0ZXJfYm9keTogCiAgICAgIC0gaHRtbF9maWxlcy93ZWJleC5qcwotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQojIFRoZSBuZXh0IGNvbW1hbmQgY29uZmlndXJlcyBNQU5ZIHRoaW5ncyBhbmQgbG9hZHMgcXVpdGUgYSBmZXcgcGFja2FnZXMuCiMgCiMgSWYgeW91IHdhbnQgdG8gc2VlIHdoYXQncyBiZWluZyBkb25lLCBleGVjdXRlIAojIAojICAgY2F0KAojICAgICBzeXN0ZW0uZmlsZSgKIyAgICAgICAicm1hcmtkb3duL3Jlc291cmNlcy9SL19jb21tb25fcmVwb3J0LlIiLCAKIyAgICAgICBwYWNrYWdlID0gImZuYXVmZWxSbWQiCiMgICAgICkKIyAgICkKIyAKIyB0byBmaW5kIG91dCB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGUuIFRoZW4gb3BlbiB0aGUgZmlsZS4KIyAKIyBJZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24sIGNvcHkgdGhlIGZpbGUsIGVkaXQgaXQsIGFuZAojIHNvdXJjZSBpdCBpbnN0ZWFkIG9mIHRoZSBwYWNrYWdlIGZpbGUuIAojIAojIE9yIHNpbXBseSB3cml0ZSB5b3VyIGNvbW1hbmRzIGhlcmUgaW4gdGhpcyBjb2RlIGNodW5rLgoKc291cmNlKAogIHN5c3RlbS5maWxlKAogICAgInJtYXJrZG93bi9yZXNvdXJjZXMvUi9fY29tbW9uX3JlcG9ydC5SIiwKICAgIHBhY2thZ2UgPSAiZm5hdWZlbFJtZCIKICApCikKCmxpYnJhcnkoZXhlcmNpc2VzKQpleGVyY2lzZXM6OmluaWNpYXIoKQpgYGAKCjxkaXYgc3R5bGU9J2hlaWdodDogNjBweCc+PC9kaXY+CgoKOjo6IHsucm1kdGlwIGxhdGV4PTF9CgojIyMgQXBwbGV0IEdlb2dlYnJhIHstfQoKW0NsaXF1ZSBhcXVpIHBhcmEgYWNlc3NhciBvICphcHBsZXQqIEdlb2dlYnJhIGNvbSBhcyByZXNwb3N0YXMuXShodHRwczovL3d3dy5nZW9nZWJyYS5vcmcvbS9janF3bjZyeikKCjo6OgoKCiMgSW5zdHJ1w6fDtWVzCgoqIEZpcXVlIMOgIHZvbnRhZGUgcGFyYSBjb25zdWx0YXIgb3MgY29sZWd1aW5oYXMgZSBwYXJhIHVzYXIgcHJvZ3JhbWFzIGNvbW8gbyBHZW9nZWJyYSwgbWFzIFtzb21lbnRlIHNvbHXDp8O1ZXMgKmFuYWzDrXRpY2FzKiBzZXLDo28gYWNlaXRhcyAtLS0gbmFkYSBkZSByZXNwb25kZXIgbm8gb2xow7RtZXRyby5dey5obH0KCiogRG9jdW1lbnRlIGRhIGZvcm1hIG1haXMgY2xhcmEgcG9zc8OtdmVsIFt0b2RvcyBvcyBwYXNzb3Ndey5obH0gZGEgcmVzb2x1w6fDo28gZGUgY2FkYSBxdWVzdMOjby4KCiogRW50cmVndWUgWyh2aWEgTW9vZGxlKV17LmhsfSBzdWEgcmVzb2x1w6fDo28gZXNjcml0YSBubyBmb3JtYXRvIHF1ZSB2b2PDqiBwcmVmZXJpcjogbWFudXNjcml0byBlc2NhbmVhZG8gb3UgZm90b2dyYWZhZG8sIGRvY3VtZW50byBnZXJhZG8gdmlhICRcTGFUZVgkIGV0Yy4gTyBpbXBvcnRhbnRlIMOpIHF1ZSBhIHJlc29sdcOnw6NvIGVzdGVqYSBsZWfDrXZlbC4gW1NlIHZvY8OqIGZvciBmb3RvZ3JhZmFyIHN1YSByZXNvbHXDp8OjbywgdXNlIHVtIGFwbGljYXRpdm8gY29tbyBbQ2xlYXIgU2Nhbl0oaHR0cHM6Ly9wbGF5Lmdvb2dsZS5jb20vc3RvcmUvYXBwcy9kZXRhaWxzP2lkPWNvbS5pbmR5bW9iaWxlYXBwLmRvY3VtZW50LnNjYW5uZXIpIHBhcmEgZ2VyYXIgdW0gcmVzdWx0YWRvIG1lbGhvci5dey5obH0KCiogQWzDqW0gZGEgcmVzb2x1w6fDo28gcG9yIGVzY3JpdG8sIGVudHJlZ3VlIHRhbWLDqW0gWyh2aWEgTW9vZGxlKV17LmhsfSB1bSBhcnF1aXZvIGNvbnRlbmRvIHVtIHbDrWRlbyBkZSBubyBtw6F4aW1vIDUgbWludXRvcyBvbmRlIHZvY8OqIGV4cGxpY2EgZW0gZGV0YWxoZXMgYSByZXNvbHXDp8OjbyBkZSB1bWEgcGFydGUgZGEgc3VhIHF1ZXN0w6NvLgoKKiBCb20gdHJhYmFsaG8uCgoKIyBRdWVzdMOjbyDDum5pY2E6IGNvbnN0cnVpbmRvIHVtYSBjYXNhIDJECgpbVmVqYSBvIHNldSBuw7ptZXJvIG5lc3RhIGxpc3RhLl0oI251bXMpCgpWb2PDqiB2YWkgYWNoYXIgZXF1YcOnw7VlcyBwYXJhIG8gY2jDo28sIGFzIHBhcmVkZXMsIGEgcG9ydGEsIGUgbyB0ZWxoYWRvIGRlIHVtYSBjYXNhIG5vICRcbWF0aGJie1J9XjIkLgoKOjo6IHsucm1kaW1wb3J0YW50fQoKRW0gdG9kb3Mgb3Mgc2V1cyBjw6FsY3Vsb3MgZSByZXNwb3N0YXMsIFt1c2UgZnJhw6fDtWVzIGUgcmFkaWNhaXMuXXsuaGx9IAoKW07Do28gdXNlIHZhbG9yZXMgbnVtw6lyaWNvcyBjb20gdsOtcmd1bGFzIGRlY2ltYWlzIGVtIG1vbWVudG8gYWxndW0uXXsuaGx9Cgo6OjoKCgojIyBEZXNlbmhvIHstfQoKU3VhIGNhc2EgdmFpIGZpY2FyIGFzc2ltLiAKCk7Do28sIG8gY2jDo28gbsOjbyB2YWkgc2VyIGhvcml6b250YWwuCgpBIGluY2xpbmHDp8OjbyBkbyBjaMOjbyB2YWkgZGVwZW5kZXIgZG8gc2V1IG7Dum1lcm8gW25lc3RhIGxpc3RhXSgjbnVtcykuCgpgYGB7ciBlY2hvPUZBTFNFfQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygnY2FzYTJkLnBuZycpCmBgYAoKCiMjIENow6NvIHstfQoKKiBPIGNow6NvIGRhIGNhc2Egw6kgbyBzZWdtZW50byBxdWUgdmFpIGRvIHBvbnRvICRBJCBhdMOpIG8gcG9udG8gJEIkLiAKCiogTyBwb250byAkQSQgw6kgYSBvcmlnZW06ICRBID0gKDAsIDApJC4KCiogVXNlIGFzIGNvb3JkZW5hZGFzIGRlICRCJCBxdWUgW2NvcnJlc3BvbmRlbSBhbyBzZXUgbsO6bWVyb10oI251bXMpLgoKKiBDb21lY2UgY2FsY3VsYW5kbyBbbyB2ZXRvciAkXG92ZXJyaWdodGFycm93e0FCfSRdey5obH0uCgogIGByIGluaWNpb19yZXNwb3N0YSgpYAogIAogICogQ2hhbWUgYXMgY29vcmRlbmFkYXMgZGUgJEIkIGRlICQoeF9CLCB5X0IpJC4KICAKICAqIEVudMOjbywgJFxvdmVycmlnaHRhcnJvd3tBQn0gPSAoeF9CIC0gMCwgeV9CIC0gMCkgPSAoeF9CLCB5X0IpJC4KICAKICBgciBmaW1fcmVzcG9zdGEoKWAKCiogRGVwb2lzIC0tLSB2w6EgcG9yIG1pbSAtLS0gW2FjaGUgdW0gdmV0b3IgdW5pdMOhcmlvXXsuaGx9IG5hIG1lc21hIGRpcmXDp8OjbyBlIHNlbnRpZG8gcXVlICRcb3ZlcnJpZ2h0YXJyb3d7QUJ9JC4KCiAgYHIgaW5pY2lvX3Jlc3Bvc3RhKClgCiAgCiAgKiBCYXN0YSBkaXZpZGlyICRcb3ZlcnJpZ2h0YXJyb3d7QUJ9JCBwZWxvIHNldSBtw7NkdWxvLgogIAogICogJHxcb3ZlcnJpZ2h0YXJyb3d7QUJ9fCA9IFxzcXJ0e3hfQl4yICsgeV9CXjJ9JC4KICAKICAqIFtJbmRlcGVuZGVudGUgZGFzIGNvb3JkZW5hZGFzIGRvIHBvbnRvICRCJCBzb3J0ZWFkbyBwYXJhIHZvY8OqLCBlc3RlIG3Ds2R1bG8gdmFpIHNlciAkMTIkXXsuaGx9IChwb3JxdWUgZXUgcXVpcyBhc3NpbSkuCiAgCiAgKiBPIHZldG9yIHVuaXTDoXJpbyBuYSBtZXNtYSBkaXJlw6fDo28gZSBzZW50aWRvIGRlICRcb3ZlcnJpZ2h0YXJyb3d7QUJ9JCB2YWkgc2VyCiAgCiAgICAkJAogICAgXG92ZXJyaWdodGFycm93e0FCX1V9ID0gXGxlZnQoIFxmcmFje3hfQn17MTJ9LCBcZnJhY3t5X0J9ezEyfSBccmlnaHQpCiAgICAkJAogIAogIGByIGZpbV9yZXNwb3N0YSgpYAoKKiBBY2hlIFthIGVxdWHDp8OjbyBkYSByZXRhIHF1ZSBjb250w6ltIG8gY2jDo29dey5obH0uCgogIGByIGluaWNpb19yZXNwb3N0YSgpYAogIAogICogW1BhcmFtw6l0cmljYXM6XXsuaGx9CiAgCiAgICAkXG92ZXJyaWdodGFycm93e0FCfSA9ICh4X0IsIHlfQikkIMOpIHVtIHZldG9yIGRpcmV0b3IuCiAgICAKICAgIFVzYW5kbyBvIHBvbnRvICRBJDoKICAgIAogICAgJCQKICAgIFxiZWdpbntjYXNlc30KICAgICAgeCA9IDAgKyB4X0IgXGNkb3QgdCBcXAogICAgICB5ID0gMCArIHlfQiBcY2RvdCB0CiAgICBcZW5ke2Nhc2VzfQogICAgJCQKICAKICAgIE91LCB1c2FuZG8gbyBwb250byAkQiQ6CiAgICAKICAgICQkCiAgICBcYmVnaW57Y2FzZXN9CiAgICAgIHggPSB4X0IgKyB4X0IgXGNkb3QgdCBcXAogICAgICB5ID0geV9CICsgeV9CIFxjZG90IHQKICAgIFxlbmR7Y2FzZXN9CiAgICAkJAogICAgCiAgKiBbQ2FydGVzaWFuYTpdey5obH0KICAKICAgIFByZWNpc2Ftb3MgZGUgdW0gdmV0b3Igbm9ybWFsIChwZXJwZW5kaWN1bGFyKSBhbyBjaMOjby4KICAgIAogICAgUG9kZW1vcyB1c2FyICRcb3ZlcnJpZ2h0YXJyb3d7bl8xfSA9ICgteV9CLCB4X0IpJCBvdSAkXG92ZXJyaWdodGFycm93e25fMn0gPSAoeV9CLCAteF9CKSQuCiAgICAKICAgIEEgZXF1YcOnw6NvIGZpY2EKICAgIAogICAgJCQKICAgIC15X0J4ICsgeF9CeSArIFxnYW1tYSA9IDAKICAgICQkCiAgICAKICAgIG91IAogICAgCiAgICAkJAogICAgeV9CeCAtIHhfQnkgKyBcZ2FtbWEgPSAwCiAgICAkJAogICAgCiAgICBDb21vIGEgcmV0YSBwYXNzYSBwZWxhIG9yaWdlbSwgJFxnYW1tYSA9IDAkLgoKICAgIEEgZXF1YcOnw6NvIGZpY2EKICAgIAogICAgJCQKICAgIC15X0J4ICsgeF9CeSA9IDAKICAgICQkCiAgICAKICAgIG91IAogICAgCiAgICAkJAogICAgeV9CeCAtIHhfQnkgPSAwCiAgICAkJAogIAogICogW1JlZHV6aWRhOl17LmhsfQogIAogICAgJCQKICAgIHkgPSBcZnJhY3tcRGVsdGEgeX17XERlbHRhIHh9eCArIGIgXGlmZgogICAgeSA9IFxmcmFje3lfQn17eF9CfXggKyBiIAogICAgJCQKICAgIENvbW8gYSByZXRhIHBhc3NhIHBlbGEgb3JpZ2VtLCAkYiA9IDAkLiBBIGVxdWHDp8OjbyBmaWNhCiAgICAkJAogICAgeSA9IFxmcmFje3lfQn17eF9CfXgKICAgICQkCiAgICAKICBgciBmaW1fcmVzcG9zdGEoKWAKCiogQ29vcmRlbmFkYXMgZGUgJEIkIC0tLSB1c2UgbyBpdGVtIHF1ZSBjb3JyZXNwb25kZSBhbyBbdmFsb3IgZGUgJG4kIHBhcmEgYSBzdWEgbWF0csOtY3VsYV17LmhsfToKCiAgYGBge3IgZWNobz1GQUxTRSwgcmVzdWx0cz0nYXNpcyd9CiAgeEIgPC0gYygKICAgICdcXGZyYWN7NH17MTV9JywKICAgICdcXGZyYWN7OH17MTV9JywKICAgICdcXGZyYWN7NH17NX0nLAogICAgJ1xcZnJhY3sxNn17MTV9JywKICAgICdcXGZyYWN7NH17M30nLAogICAgJ1xcZnJhY3s4fXs1fScsCiAgICAnXFxmcmFjezI4fXsxNX0nLAogICAgJ1xcZnJhY3szMn17MTV9JywKICAgICdcXGZyYWN7MTJ9ezV9JywKICAgICdcXGZyYWN7OH17M30nLAogICAgJ1xcZnJhY3s0NH17MTV9JywKICAgICdcXGZyYWN7MTZ9ezV9JywKICAgICdcXGZyYWN7NTJ9ezE1fScsCiAgICAnXFxmcmFjezU2fXsxNX0nLAogICAgJzQnLAogICAgJ1xcZnJhY3s2NH17MTV9JywKICAgICdcXGZyYWN7Njh9ezE1fScsCiAgICAnXFxmcmFjezI0fXs1fScsCiAgICAnXFxmcmFjezc2fXsxNX0nLAogICAgJ1xcZnJhY3sxNn17M30nLAogICAgJ1xcZnJhY3syOH17NX0nLAogICAgJ1xcZnJhY3s4OH17MTV9JywKICAgICdcXGZyYWN7OTJ9ezE1fScsCiAgICAnXFxmcmFjezMyfXs1fScsCiAgICAnXFxmcmFjezIwfXszfScsCiAgICAnXFxmcmFjezEwNH17MTV9JywKICAgICdcXGZyYWN7MzZ9ezV9JywKICAgICdcXGZyYWN7MTEyfXsxNX0nLAogICAgJ1xcZnJhY3sxMTZ9ezE1fScsCiAgICAnOCcsCiAgICAnXFxmcmFjezEyNH17MTV9JywKICAgICdcXGZyYWN7MTI4fXsxNX0nLAogICAgJ1xcZnJhY3s0NH17NX0nLAogICAgJ1xcZnJhY3sxMzZ9ezE1fScsCiAgICAnXFxmcmFjezI4fXszfScsCiAgICAnXFxmcmFjezQ4fXs1fScsCiAgICAnXFxmcmFjezE0OH17MTV9JywKICAgICdcXGZyYWN7MTUyfXsxNX0nLAogICAgJ1xcZnJhY3s1Mn17NX0nLAogICAgJ1xcZnJhY3szMn17M30nLAogICAgJ1xcZnJhY3sxNjR9ezE1fScsCiAgICAnXFxmcmFjezU2fXs1fScsCiAgICAnXFxmcmFjezE3Mn17MTV9JywKICAgICdcXGZyYWN7MTc2fXsxNX0nCiAgKQogIAogIHlCIDwtIGMoCiAgICAnXFxmcmFjezh9ezE1fSBcXDsgXFxzcXJ0ezUwNn0nLAogICAgJ1xcZnJhY3s0fXsxNX0gXFw7IFxcc3FydHsyMDIxfScsCiAgICAnXFxmcmFjezE2fXs1fSBcXDsgXFxzcXJ0ezE0fScsCiAgICAnXFxmcmFjezI4fXsxNX0gXFw7IFxcc3FydHs0MX0nLAogICAgJ1xcZnJhY3sxNn17M30gXFw7IFxcc3FydHs1fScsCiAgICAnXFxmcmFjezR9ezV9IFxcOyBcXHNxcnR7MjIxfScsCiAgICAnXFxmcmFjezh9ezE1fSBcXDsgXFxzcXJ0ezQ5NH0nLAogICAgJ1xcZnJhY3s0fXsxNX0gXFw7IFxcc3FydHsxOTYxfScsCiAgICAnXFxmcmFjezI0fXs1fSBcXDsgXFxzcXJ0ezZ9JywKICAgICdcXGZyYWN7NH17M30gXFw7IFxcc3FydHs3N30nLAogICAgJ1xcZnJhY3sxNn17MTV9IFxcOyBcXHNxcnR7MTE5fScsCiAgICAnXFxmcmFjezR9ezV9IFxcOyBcXHNxcnR7MjA5fScsCiAgICAnXFxmcmFjezMyfXsxNX0gXFw7IFxcc3FydHsyOX0nLAogICAgJ1xcZnJhY3s0fXsxNX0gXFw7IFxcc3FydHsxODI5fScsCiAgICAnOCBcXDsgXFxzcXJ0ezJ9JywKICAgICdcXGZyYWN7NH17MTV9IFxcOyBcXHNxcnR7MTc2OX0nLAogICAgJ1xcZnJhY3s4fXsxNX0gXFw7IFxcc3FydHs0MzR9JywKICAgICdcXGZyYWN7MTJ9ezV9IFxcOyBcXHNxcnR7MjF9JywKICAgICdcXGZyYWN7MzJ9ezE1fSBcXDsgXFxzcXJ0ezI2fScsCiAgICAnXFxmcmFjezR9ezN9IFxcOyBcXHNxcnR7NjV9JywKICAgICdcXGZyYWN7MTZ9ezV9IFxcOyBcXHNxcnR7MTF9JywKICAgICdcXGZyYWN7NH17MTV9IFxcOyBcXHNxcnR7MTU0MX0nLAogICAgJ1xcZnJhY3s4fXsxNX0gXFw7IFxcc3FydHszNzR9JywKICAgICdcXGZyYWN7NH17NX0gXFw7IFxcc3FydHsxNjF9JywKICAgICdcXGZyYWN7OH17M30gXFw7IFxcc3FydHsxNH0nLAogICAgJ1xcZnJhY3s0fXsxNX0gXFw7IFxcc3FydHsxMzQ5fScsCiAgICAnXFxmcmFjezQ4fXs1fScsCiAgICAnXFxmcmFjezR9ezE1fSBcXDsgXFxzcXJ0ezEyNDF9JywKICAgICdcXGZyYWN7MTZ9ezE1fSBcXDsgXFxzcXJ0ezc0fScsCiAgICAnNCBcXDsgXFxzcXJ0ezV9JywKICAgICdcXGZyYWN7OH17MTV9IFxcOyBcXHNxcnR7MjY2fScsCiAgICAnXFxmcmFjezR9ezE1fSBcXDsgXFxzcXJ0ezEwMDF9JywKICAgICdcXGZyYWN7OH17NX0gXFw7IFxcc3FydHsyNn0nLAogICAgJ1xcZnJhY3s0fXsxNX0gXFw7IFxcc3FydHs4Njl9JywKICAgICdcXGZyYWN7MTZ9ezN9IFxcOyBcXHNxcnR7Mn0nLAogICAgJ1xcZnJhY3szNn17NX0nLAogICAgJ1xcZnJhY3sxNn17MTV9IFxcOyBcXHNxcnR7NDF9JywKICAgICdcXGZyYWN7NH17MTV9IFxcOyBcXHNxcnR7NTgxfScsCiAgICAnXFxmcmFjezh9ezV9IFxcOyBcXHNxcnR7MTR9JywKICAgICdcXGZyYWN7NH17M30gXFw7IFxcc3FydHsxN30nLAogICAgJ1xcZnJhY3s4fXsxNX0gXFw7IFxcc3FydHs4Nn0nLAogICAgJ1xcZnJhY3s0fXs1fSBcXDsgXFxzcXJ0ezI5fScsCiAgICAnXFxmcmFjezE2fXsxNX0gXFw7IFxcc3FydHsxMX0nLAogICAgJ1xcZnJhY3s0fXsxNX0gXFw7IFxcc3FydHs4OX0nCiAgKQogIAogIGIgPC0gcGFzdGUwKAogICAgJ0IgPSBcXGxlZnQoJywgeEIsICcsXFw7XFw7ICcsIHlCLCAnXFxyaWdodCkkJwogICkKICAKICBwYXN0ZTAoCiAgICAnMS4gJFxccXVhZCAnLAogICAgYiwKICAgIGNvbGxhcHNlID0gJ1xuXG4nCiAgKSAlPiUgCiAgICBjYXQoKQogIGBgYAoKCiMjIFBhcmVkZXMgey19CgoqIEEgW2FsdHVyYSBkYXMgcGFyZWRlc117LmhsfSwgc2VtIGNvbnRhciBvIHRlbGhhZG8gKG91IHNlamEsIGEgZGlzdMOibmNpYSBkZSAkQSQgYSAkRCQpLCBbw6kgJDEvMyQgZGEgbGFyZ3VyYSBkYSBjYXNhXXsuaGx9LgoKKiBBcyBwYXJlZGVzIHPDo28gcGVycGVuZGljdWxhcmVzIGFvIGNow6NvLgoKKiBDYWxjdWxlIGFzIFtjb29yZGVuYWRhcyBkZSAkQyQgZSAkRCRdey5obH0uCgogIGByIGluaWNpb19yZXNwb3N0YSgpYAogIAogICogQSBsYXJndXJhIGRhIGNhc2Egw6kgYSBkaXN0w6JuY2lhIGRlICRBJCBhICRCJCwgb3UsIG8gcXVlIGTDoSBubyBtZXNtbywgbyBtw7NkdWxvIGRvIHZldG9yICRcb3ZlcnJpZ2h0YXJyb3d7QUJ9JCwgcXVlIMOpICQxMiQuCiAgCiAgKiBWYW1vcyBjaGFtYXIgYSBsYXJndXJhIGRhIGNhc2EgZGUgJEwgPSAxMiQuCiAgCiAgKiBBIGFsdHVyYSBkYXMgcGFyZWRlcyB2YWkgc2VyICRMLzMgPSA0JC4KICAKICAqIFtQYXJhIGFjaGFyIG8gcG9udG8gJEQkXXsuaGx9LCBiYXN0YSBhY2hhciB1bSB2ZXRvciBxdWUgc2VqYSBwZXJwZW5kaWN1bGFyIGFvIGNow6NvLCBjb20gc2VudGlkbyBkbyBjaMOjbyBwYXJhIG8gdGV0bywgY29tIG3Ds2R1bG8gJDQkLgogIAogICogw4kgYXF1aSBxdWUgZW50cmEgbyB2ZXRvciAkXG92ZXJyaWdodGFycm93e0FCX1V9JCBxdWUgYWNoYW1vcyBhbnRlcy4gU2UgaW52ZXJ0ZXJtb3MgYSBvcmRlbSBkYXMgY29vcmRlbmFkYXMgZGUgJFxvdmVycmlnaHRhcnJvd3tBQl9VfSQgZSB0cm9jYXJtb3MgbyBzaW5hbCBkZSB1bWEgZGVsYXMsIHZhbW9zIHRlciBvIHZldG9yICRcb3ZlcnJpZ2h0YXJyb3d7XHRleHR7cGFyZWRlfV9VfSQsIHVtIHZldG9yIHVuaXTDoXJpbyBwZXJwZW5kaWN1bGFyIGFvIGNow6NvLgogIAogICogQ29tbyBvIHNlbnRpZG8gcXVlIHF1ZXJlbW9zIMOpIHBhcmEgY2ltYSBlIHBhcmEgYSBlc3F1ZXJkYSwgYSBjb29yZGVuYWRhICR4JCBkbyB2ZXRvciBwcmVjaXNhIHNlciBuZWdhdGl2YSwgZSBhIGNvb3JkZW5hZGEgJHkkIGRvIHZldG9yIHByZWNpc2Egc2VyIHBvc2l0aXZhLgogIAogICogVmFtb3MgdXNhciAkXG92ZXJyaWdodGFycm93e1x0ZXh0e3BhcmVkZX1fVX0gPSBcbGVmdCggXGZyYWN7LXlfQn17MTJ9LCBcZnJhY3t4X0J9ezEyfVxyaWdodCkkLiBQZXJjZWJhIHF1ZSwgY29tbyAkeF9CJCBlICR5X0IkIGVyYW0gYW1ib3MgbWFpb3JlcyBxdWUgemVybywgb3Mgc2luYWlzIGRhcyBjb29yZGVuYWRhcyBmaWNhbSBjb21vIHF1ZXJlbW9zLgogIAogICogW0NvbW8gJFxvdmVycmlnaHRhcnJvd3tcdGV4dHtwYXJlZGV9X1V9JCDDqSB1bml0w6FyaW8sIGJhc3RhIG11bHRpcGxpY8OhLWxvIHBvciAkNCQgZSBzb21hciBvIHJlc3VsdGFkbyDDoHMgY29vcmRlbmFkYXMgZGUgJEEkIHBhcmEgYWNoYXIgbyBwb250byAkRCQ6XXsuaGx9CiAgCiAgICAkJAogICAgRCA9ICgwLCAwKSArIDQgXGNkb3QgXGxlZnQoIFxmcmFjey15X0J9ezEyfSwgXGZyYWN7eF9CfXsxMn1ccmlnaHQpID0gXGxlZnQoIFxmcmFjey15X0J9ezN9LCBcZnJhY3t4X0J9ezN9XHJpZ2h0KQogICAgJCQKICAKICAqIFtTZWd1aW5kbyBvIG1lc21vIHJhY2lvY8OtbmlvIHBhcmEgJEIkLCBjaGVnYW1vcyBhbyBwb250byAkQyQ6XXsuaGx9CiAgCiAgICAkJAogICAgQyA9ICh4X0IsIHlfQikgKyA0IFxjZG90IFxsZWZ0KCBcZnJhY3steV9CfXsxMn0sIFxmcmFje3hfQn17MTJ9XHJpZ2h0KSA9IFxsZWZ0KCB4X0IgLSBcZnJhY3t5X0J9ezN9LCB5X0IgKyBcZnJhY3t4X0J9ezN9XHJpZ2h0KQogICAgJCQKICAgIAogIGByIGZpbV9yZXNwb3N0YSgpYAoKKiBFc2NyZXZhIGFzIFtlcXVhw6fDtWVzIGRhcyBkdWFzIHJldGFzIHF1ZSBjb250w6ptIGFzIHBhcmVkZXNdey5obH0uCgogIGByIGluaWNpb19yZXNwb3N0YSgpYAogIAogICogRXF1YcOnw7VlcyBbcGFyYW3DqXRyaWNhc117LmhsfSBkYSByZXRhIHF1ZSBjb250w6ltIFskQUQkXXsuaGx9OgogIAogICAgJCQKICAgIFxiZWdpbntjYXNlc30KICAgICAgeCA9IC1cZnJhY3t5X0J9ezN9IFxjZG90IHQgXFwKICAgICAgeSA9IFxmcmFje3hfQn17M30gXGNkb3QgdAogICAgXGVuZHtjYXNlc30KICAgICQkCiAgICAKICAqIEVxdWHDp8OjbyBbY2FydGVzaWFuYV17LmhsfSBkYSByZXRhIHF1ZSBjb250w6ltIFskQUQkXXsuaGx9OgogIAogICAgVXNhbmRvIG8gdmV0b3IgJFxvdmVycmlnaHRhcnJvd3tBQn0gPSAoeF9CLCB5X0IpJCwgbm9ybWFsIMOgIHJldGEsIGEgZXF1YcOnw6NvIGZpY2EKICAgIAogICAgJCQKICAgIHhfQiBcY2RvdCB4ICsgeV9CIFxjZG90IHkgKyBcZ2FtbWEgPSAwCiAgICAkJAogICAgCiAgICBDb21vICRBID0gKDAsIDApJCDDqSBwb250byBkZXN0YSByZXRhLCAkXGdhbW1hID0gMCQ6CgogICAgJCQKICAgIHhfQiBcY2RvdCB4ICsgeV9CIFxjZG90IHkgPSAwCiAgICAkJAoKICAqIEVxdWHDp8OjbyBbcmVkdXppZGFdey5obH0gZGEgcmV0YSBxdWUgY29udMOpbSBbJEFEJF17LmhsfToKCiAgICAkJAogICAgeSA9IFxmcmFje1xEZWx0YSB5fXtcRGVsdGEgeH14ICsgYiBcaWZmCiAgICB5ID0gXGZyYWN7LXhfQiAvIDN9e3lfQiAvIDN9eCArIGIgCiAgICAkJAoKICAgIENvbW8gYSByZXRhIHBhc3NhIHBlbGEgb3JpZ2VtLCAkYiA9IDAkLiBFbnTDo28sIGEgZXF1YcOnw6NvIGZpY2EKCiAgICAkJAogICAgeSA9IC1cZnJhY3t4X0J9e3lfQn14CiAgICAkJAogICAgCiAgKiBFcXVhw6fDtWVzIFtwYXJhbcOpdHJpY2FzXXsuaGx9IGRhIHJldGEgcXVlIGNvbnTDqW0gWyRCQyRdey5obH06CiAgCiAgICAkJAogICAgXGJlZ2lue2Nhc2VzfQogICAgICB4ID0geF9CIC1cZnJhY3t5X0J9ezN9IFxjZG90IHQgXFwKICAgICAgeSA9IHlfQiArIFxmcmFje3hfQn17M30gXGNkb3QgdAogICAgXGVuZHtjYXNlc30KICAgICQkCiAgICAKICAqIEVxdWHDp8OjbyBbY2FydGVzaWFuYV17LmhsfSBkYSByZXRhIHF1ZSBjb250w6ltIFskQkMkXXsuaGx9OgogIAogICAgVXNhbmRvIG8gdmV0b3IgJFxvdmVycmlnaHRhcnJvd3tBQn0gPSAoeF9CLCB5X0IpJCwgbm9ybWFsIMOgIHJldGEsIGEgZXF1YcOnw6NvIGZpY2EKICAgIAogICAgJCQKICAgIHhfQiBcY2RvdCB4ICsgeV9CIFxjZG90IHkgKyBcZ2FtbWEgPSAwCiAgICAkJAogICAgCiAgICBDb21vICRCID0gKHhfQiwgeV9CKSQgw6kgcG9udG8gZGVzdGEgcmV0YToKCiAgICAkJAogICAgeF9CIFxjZG90IHhfQiArIHlfQiBcY2RvdCB5X0IgKyBcZ2FtbWEgPSAwCiAgICBcaWZmCiAgICBcZ2FtbWEgPSAtXGxlZnQoIHhfQl4yICsgeV9CXjIgXHJpZ2h0KQogICAgJCQKICAgIAogICAgZSBhIGVxdWHDp8OjbyBmaWNhCgogICAgJCQKICAgIHhfQiBcY2RvdCB4ICsgeV9CIFxjZG90IHkgLSBcbGVmdCggeF9CXjIgKyB5X0JeMiBccmlnaHQpID0gMAogICAgJCQKICAgIAogICAgT3UsIGNvbW8gJHhfQl4yICsgeV9CXjIgPSAxNDQkLAoKICAgICQkCiAgICB4X0IgXGNkb3QgeCArIHlfQiBcY2RvdCB5IC0gMTQ0ID0gMAogICAgJCQKCiAgKiBFcXVhw6fDo28gW3JlZHV6aWRhXXsuaGx9IGRhIHJldGEgcXVlIGNvbnTDqW0gWyRCQyRdey5obH06CgogICAgJCQKICAgIFxiZWdpbnthbGlnbn0KICAgIHkgPSBcZnJhY3tcRGVsdGEgeX17XERlbHRhIHh9eCArIGIgCiAgICAmXGlmZgogICAgeSA9IFxmcmFje3lfQiAtIHlfQiAtIHhfQi8zfXt4X0IgLSB4X0IgKyB5X0IvM314ICsgYiBcXAogICAgJlxpZmYKICAgIHkgPSAtXGZyYWN7eF9CfXt5X0J9eCArIGIKICAgIFxlbmR7YWxpZ259CiAgICAkJAoKICAgIENvbW8gbyBwb250byAkQiA9ICh4X0IsIHlfQikkIHBlcnRlbmNlIGEgZXN0YSByZXRhOgogICAgCiAgICAkJAogICAgXGJlZ2lue2FsaWdufQogICAgeSA9IC1cZnJhY3t4X0J9e3lfQn14ICsgYgogICAgJlxpZmYKICAgIHlfQiA9IC1cZnJhY3t4X0J9e3lfQn14X0IgKyBiIFxcCiAgICAmXGlmZgogICAgYiA9IFxmcmFje3hfQl4yfXt5X0J9ICsgeV9iIFxcCiAgICAmXGlmZgogICAgYiA9IFxmcmFje3hfQl4yICsgeV9CXjJ9e3lfQn0gXFwKICAgICZcaWZmCiAgICBiID0gXGZyYWN7MTQ0fXt5X0J9CiAgICBcZW5ke2FsaWdufQogICAgJCQKICAgIAogICAgRSBhIGVxdWHDp8OjbyBmaWNhCiAgICAKICAgICQkCiAgICB5ID0gLVxmcmFje3hfQn17eV9CfXggKyBcZnJhY3sxNDR9e3lfQn0KICAgICQkCiAgICAKICBgciBmaW1fcmVzcG9zdGEoKWAKCgojIyBUZWxoYWRvIHstfQoKKiBBIFthbHR1cmEgZG8gdGV0byBhdMOpIG8gdG9wbyBkbyB0ZWxoYWRvXXsuaGx9IChvIHBvbnRvICRFJCkgW8OpICQxLzYkIGRhIGxhcmd1cmEgZGEgY2FzYV17LmhsfS4KCiAgT3Ugc2VqYSwgW2EgYWx0dXJhIGRvIGNow6NvIGF0w6kgbyB0b3BvIGRvIHRlbGhhZG8gw6kgJDEvMiQgZGEgbGFyZ3VyYSBkYSBjYXNhXXsuaGx9LgogIAoqIEFzIGR1YXMgcGFydGVzIGRvIHRlbGhhZG8gdMOqbSBvIG1lc21vIGNvbXByaW1lbnRvLgoKKiBDYWxjdWxlIGFzIFtjb29yZGVuYWRhcyBkZSAkRSRdey5obH0uCgogIGByIGluaWNpb19yZXNwb3N0YSgpYAogIAogICogQSBkaXN0w6JuY2lhIGRvIHRldG8gYW8gdGVsaGFkbyDDqSAkTC82ID0gMiQuCiAgCiAgKiBQYXJhIGFjaGFyIG8gcG9udG8gJEUkLCBwcmltZWlybyBhY2hhbW9zIG8gcG9udG8gbcOpZGlvIGRlICRDRCQsIHF1ZSB2YW1vcyBjaGFtYXIgZGUgJE0kOgogIAogICAgJCQKICAgIFxiZWdpbnthbGlnbn0KICAgICAgTSAKICAgICAgJj0gXGxlZnQoIAogICAgICAgIFxmcmFje3hfQiAtIHlfQi8zIC0geV9CLzN9ezJ9LFw7CiAgICAgICAgXGZyYWN7eV9CICsgeF9CLzMgKyB4X0IvM317Mn0gCiAgICAgIFxyaWdodCkgXFwKICAgICAgJj0gXGxlZnQoIAogICAgICAgICAgXGZyYWN7eF9CfXsyfSAtIFxmcmFje3lfQn17M30sXDsKICAgICAgICAgIFxmcmFje3lfQn17Mn0gKyBcZnJhY3t4X0J9ezN9CiAgICAgIFxyaWdodCkgXFwKICAgIFxlbmR7YWxpZ259CiAgICAkJAogIAogICogQWdvcmEsIG11bHRpcGxpY2Ftb3MgbyBtZXNtbyB2ZXRvciB1bml0w6FyaW8gJFxvdmVycmlnaHRhcnJvd3tcdGV4dHtwYXJlZGV9X1V9JCBwb3IgJDIkIGUgc29tYW1vcyDDoHMgY29vcmRlbmFkYXMgZGUgJE0kIHBhcmEgInN1YmlyIiBkZSAkTSQgYXTDqSAkRSQ6CiAgCiAgICAkJAogICAgXGJlZ2lue2FsaWdufQogICAgICBFIAogICAgICAmPSAKICAgICAgXGxlZnQoIAogICAgICAgICAgXGZyYWN7eF9CfXsyfSAtIFxmcmFje3lfQn17M30sXDsKICAgICAgICAgIFxmcmFje3lfQn17Mn0gKyBcZnJhY3t4X0J9ezN9CiAgICAgIFxyaWdodCkgKwogICAgICAyIFxjZG90IFxsZWZ0KCBcZnJhY3steV9CfXsxMn0sIFxmcmFje3hfQn17MTJ9XHJpZ2h0KSBcXAogICAgICAmPQogICAgICBcbGVmdCgKICAgICAgICBcZnJhY3t4X0IgLSB5X0J9ezJ9LFw7CiAgICAgICAgXGZyYWN7eF9CICsgeV9CfXsyfQogICAgICBccmlnaHQpICAKICAgIFxlbmR7YWxpZ259CiAgICAkJAogIAogIGByIGZpbV9yZXNwb3N0YSgpYAoKKiBBY2hlIGFzIFtlcXVhw6fDtWVzIGRhcyByZXRhcyBxdWUgY29udMOqbSBvcyBsYWRvcyBkbyB0ZWxoYWRvXXsuaGx9LgoKICBgciBpbmljaW9fcmVzcG9zdGEoKWAKICAKICAqIFZhbW9zIGZhemVyIHPDsyBhcyBlcXVhw6fDtWVzIFtwYXJhbcOpdHJpY2FzXXsuaGx9LgogIAogICogW1BhcmEgbyBsYWRvICRFRCRdey5obH0sIHZhbW9zIHByZWNpc2FyIGRvIHZldG9yICRcb3ZlcnJpZ2h0YXJyb3d7RUR9JDoKICAKICAgICQkCiAgICBcYmVnaW57YWxpZ259CiAgICAgIFxvdmVycmlnaHRhcnJvd3tFRH0KICAgICAgJj0gCiAgICAgIFxsZWZ0KAogICAgICAgIFxmcmFjey15X0J9ezN9IC0gXGZyYWN7eF9CIC0geV9CfXsyfSxcOwogICAgICAgIFxmcmFje3hfQn17M30gLSBcZnJhY3t4X0IgKyB5X0J9ezJ9CiAgICAgIFxyaWdodCkgXFwKICAgICAgJj0gCiAgICAgIFxsZWZ0KAogICAgICAgIFxmcmFje3lfQn17Nn0gLSBcZnJhY3t4X0J9ezJ9LFw7CiAgICAgICAgXGZyYWN7LXlfQn17Mn0gLSBcZnJhY3t4X0J9ezZ9CiAgICAgIFxyaWdodCkKICAgIFxlbmR7YWxpZ259CiAgICAkJAogIAogICogVXNhbmRvIG8gcG9udG8gJEQkLCBmYXplbW9zIGFzIGVxdWHDp8O1ZXMgcGFyYW3DqXRyaWNhcyBkYSByZXRhIHF1ZSBjb250w6ltICRFRCQ6CiAgCiAgICAkJAogICAgXGJlZ2lue2Nhc2VzfQogICAgICB4ID0gXGZyYWN7LXlfQn17M30gKyAKICAgICAgICBcbGVmdCggXGZyYWN7eV9CfXs2fSAtIFxmcmFje3hfQn17Mn1ccmlnaHQpIFxjZG90IHQgXFwKICAgICAgeSA9IFxmcmFje3hfQn17M30gKwogICAgICAgIFxsZWZ0KCBcZnJhY3steV9CfXsyfSAtIFxmcmFje3hfQn17Nn0gXHJpZ2h0KSBcY2RvdCB0CiAgICBcZW5ke2Nhc2VzfQogICAgJCQKICAKICAqIFtQYXJhIG8gbGFkbyAkRUMkXXsuaGx9LCB2YW1vcyBwcmVjaXNhciBkbyB2ZXRvciAkXG92ZXJyaWdodGFycm93e0VDfSQ6CiAgCiAgICAkJAogICAgXGJlZ2lue2FsaWdufQogICAgICBcb3ZlcnJpZ2h0YXJyb3d7RUN9CiAgICAgICY9IAogICAgICBcbGVmdCgKICAgICAgICB4X0IgLSBcZnJhY3t5X0J9ezN9IC0gXGZyYWN7eF9CIC0geV9CfXsyfSxcOwogICAgICAgIHlfQiArIFxmcmFje3hfQn17M30gLSBcZnJhY3t4X0IgKyB5X0J9ezJ9CiAgICAgIFxyaWdodCkgXFwKICAgICAgJj0gCiAgICAgIFxsZWZ0KAogICAgICAgIFxmcmFje3lfQn17Nn0gKyBcZnJhY3t4X0J9ezJ9LFw7CiAgICAgICAgXGZyYWN7eV9CfXsyfSAtIFxmcmFje3hfQn17Nn0KICAgICAgXHJpZ2h0KQogICAgXGVuZHthbGlnbn0KICAgICQkCiAgCiAgKiBVc2FuZG8gbyBwb250byAkQyQsIGZhemVtb3MgYXMgZXF1YcOnw7VlcyBwYXJhbcOpdHJpY2FzIGRhIHJldGEgcXVlIGNvbnTDqW0gJEVDJDoKICAKICAgICQkCiAgICBcYmVnaW57Y2FzZXN9CiAgICAgIHggPSB4X0IgLSBcZnJhY3t5X0J9ezN9ICsgCiAgICAgICAgXGxlZnQoIFxmcmFje3lfQn17Nn0gKyBcZnJhY3t4X0J9ezJ9IFxyaWdodCkgXGNkb3QgdCBcXAogICAgICB5ID0geV9CICsgXGZyYWN7eF9CfXszfSArCiAgICAgICAgXGxlZnQoIFxmcmFje3lfQn17Mn0gLSBcZnJhY3t4X0J9ezZ9IFxyaWdodCkgXGNkb3QgdAogICAgXGVuZHtjYXNlc30KICAgICQkCgogIGByIGZpbV9yZXNwb3N0YSgpYAoKKiBVc2UgbyBbcHJvZHV0byBlc2NhbGFyXXsuaGx9IHBhcmEgZGVzY29icmlyIG8gW8Oibmd1bG8gbm8gdG9wbyBkbyB0ZWxoYWRvXXsuaGx9IChubyBwb250byAkRSQpLgoKICBgciBpbmljaW9fcmVzcG9zdGEoKWAKICAKICAqIFVzYW1vcyBhcyBjb29yZGVuYWRhcyBkZSAkXG92ZXJyaWdodGFycm93e0VDfSQgZSAkXG92ZXJyaWdodGFycm93e0VEfSQgcGFyYSBhY2hhciBvIHByb2R1dG8gZXNjYWxhcjoKICAKICAgICQkCiAgICBcYmVnaW57YWxpZ259CiAgICAgICYKICAgICAgXGxhbmdsZSBcb3ZlcnJpZ2h0YXJyb3d7RUN9LCBcb3ZlcnJpZ2h0YXJyb3d7RUR9IFxyYW5nbGUgXFwKICAgICAgJj0KICAgICAgXGxlZnQoIFxmcmFje3lfQn17Nn0gKyBcZnJhY3t4X0J9ezJ9IFxyaWdodCkgXGNkb3QKICAgICAgXGxlZnQoXGZyYWN7eV9CfXs2fSAtIFxmcmFje3hfQn17Mn0gXHJpZ2h0KQogICAgICBcOytcOwogICAgICBcbGVmdCggXGZyYWN7eV9CfXsyfSAtIFxmcmFje3hfQn17Nn0gXHJpZ2h0KSBcY2RvdAogICAgICBcbGVmdCggXGZyYWN7LXlfQn17Mn0gLSBcZnJhY3t4X0J9ezZ9IFxyaWdodCkgXFwKICAgICAgJj0KICAgICAgLSBcZnJhYzI5IFxjZG90IFxsZWZ0KHhfQl4yICsgeV9CXjJccmlnaHQpCiAgICBcZW5ke2FsaWdufQogICAgJCQKICAKICAgIExlbWJyYW5kbyBxdWUgJHxcb3ZlcnJpZ2h0YXJyb3d7QUJ9fCA9IFxzcXJ0e3hfQl4yICsgeV9CXjJ9ID0gMTIkLCB2ZW1vcyBxdWUgJHhfQl4yICsgeV9CXjIgPSAxNDQkLgogICAgCiAgICBEYcOtLCAkXGxhbmdsZSBcb3ZlcnJpZ2h0YXJyb3d7RUN9LCBcb3ZlcnJpZ2h0YXJyb3d7RUR9IFxyYW5nbGUgPSAtMzIkLgogICAgCiAgKiBPIGNvc3Nlbm8gZG8gw6JuZ3VsbyAkXHRoZXRhJCBlbnRyZSAkXG92ZXJyaWdodGFycm93e0VDfSQgZSAkXG92ZXJyaWdodGFycm93e0VEfSQgdmFpIHNlcgogIAogICAgJCQKICAgIFxjb3MgXHRoZXRhID0gCiAgICBcZnJhY3tcbGFuZ2xlIFxvdmVycmlnaHRhcnJvd3tFQ30sIFxvdmVycmlnaHRhcnJvd3tFRH0gXHJhbmdsZX0KICAgIHt8XG92ZXJyaWdodGFycm93e0VDfXwgXGNkb3QgfFxvdmVycmlnaHRhcnJvd3tFRH18fQogICAgJCQKICAKICAqIFByZWNpc2Ftb3MgZG8gbcOzZHVsbyBkZSAkXG92ZXJyaWdodGFycm93e0VDfSQgKHF1ZSwgYWxpw6FzLCB2YWkgc2VyIGlndWFsIGFvIG3Ds2R1bG8gZGUgJFxvdmVycmlnaHRhcnJvd3tFRH0kLCBwb2lzIG9zIGRvaXMgbGFkb3MgZG8gdGVsaGFkbyB0w6ptIG8gbWVzbW8gY29tcHJpbWVudG8pOgogIAogICAgJCQKICAgIFxiZWdpbnthbGlnbn0KICAgICAgfFxvdmVycmlnaHRhcnJvd3tFQ318ID0gfFxvdmVycmlnaHRhcnJvd3tFRH18CiAgICAgICY9IAogICAgICBcc3FydHsKICAgICAgICBcbGVmdChcZnJhY3t5X0J9ezZ9ICsgXGZyYWN7eF9CfXsyfVxyaWdodCleMgogICAgICAgIFw7K1w7CiAgICAgICAgXGxlZnQoXGZyYWN7eV9CfXsyfSAtIFxmcmFje3hfQn17Nn1ccmlnaHQpXjIgCiAgICAgIH0gCiAgICAgIFxcCiAgICAgICY9CiAgICAgIDJcOyBcc3FydHsxMH0KICAgIFxlbmR7YWxpZ259CiAgICAkJAoKICAqIEVudMOjbwogIAogICAgJCQKICAgIFxjb3MgXHRoZXRhID0gCiAgICBcZnJhY3tcbGFuZ2xlIFxvdmVycmlnaHRhcnJvd3tFQ30sIFxvdmVycmlnaHRhcnJvd3tFRH0gXHJhbmdsZX0KICAgIHt8XG92ZXJyaWdodGFycm93e0VDfXwgXGNkb3QgfFxvdmVycmlnaHRhcnJvd3tFRH18fSA9IAogICAgXGZyYWN7LTMyfXsoMlw7XHNxcnR7MTB9KV4yfSA9IC1cZnJhYzQ1CiAgICAkJAogIAogICogTyBxdWUgZMOhICh1c2FuZG8gdW1hIGNhbGN1bGFkb3JhKToKICAKICAgICQkCiAgICBcdGhldGEgPSBcYXJjY29zIFxsZWZ0KCAtXGZyYWM0NSBccmlnaHQpIFxhcHByb3ggMTQzXlxjaXJjCiAgICAkJAogIAogIGByIGZpbV9yZXNwb3N0YSgpYAoKKiBVc2UgbyBbcHJvZHV0byBlc2NhbGFyXXsuaGx9IHBhcmEgYWNoYXIgYSBbw6FyZWEgZG8gdHJpw6JuZ3VsbyBhenVsXXsuaGx9LgoKICBgciBpbmljaW9fcmVzcG9zdGEoKWAKICAKICAqIE5hIHDDoWdpbmEgJDcwJCBkbyBbbGl2cm8gKHBkZildKGh0dHBzOi8vY2FuYWwuY2VjaWVyai5lZHUuYnIvcmVjdXJzby80NjkwKSwgdmVtb3MgcXVlIGEgw6FyZWEgZG8gdHJpw6JuZ3VsbyBmb3JtYWRvIHBlbG9zIHZldG9yZXMgJFxvdmVycmlnaHRhcnJvd3tFQ30kIGUgJFxvdmVycmlnaHRhcnJvd3tFRH0kIMOpCiAgCiAgICAkJAogICAgXGZyYWMxMlw7IAogICAgXHNxcnR7CiAgICAgIHxcb3ZlcnJpZ2h0YXJyb3d7RUN9fF4yXDt8XG92ZXJyaWdodGFycm93e0VEfXxeMiAtCiAgICAgIFxsYW5nbGUgXG92ZXJyaWdodGFycm93e0VDfSwgXG92ZXJyaWdodGFycm93e0VEfSBccmFuZ2xlXjIKICAgIH0KICAgICQkCiAgCiAgKiBObyBub3NzbyBjYXNvLCBhIMOhcmVhIGZpY2E6CiAgCiAgICAkJAogICAgXGZyYWMxMlw7IAogICAgXHNxcnR7CiAgICAgICgyIFxzcXJ0ezEwfSleMlw7KDIgXHNxcnR7MTB9KV4yIC0gKC0zMileMgogICAgfSBcOz1cOyAxMgogICAgJCQKCiAgYHIgZmltX3Jlc3Bvc3RhKClgCgoKIyMgUG9ydGEgey19CgoqIEEgW2xhcmd1cmEgZGEgcG9ydGFdey5obH0gw6kgWyQxLzMkIGRhIGxhcmd1cmEgZGEgY2FzYV17LmhsfS4gCgoqIEEgcG9ydGEgZXN0w6EgY2VudHJhbGl6YWRhIGhvcml6b250YWxtZW50ZSBuYSBmYWNoYWRhLgoKKiBBIFthbHR1cmEgZGEgcG9ydGFdey5obH0gw6kgWyQxLzYkIGRhIGxhcmd1cmEgZGEgY2FzYV17LmhsfS4KCiogQ2FsY3VsZSBhcyBbY29vcmRlbmFkYXMgZGUgJEgkIGUgJEkkXXsuaGx9LgoKICBgciBpbmljaW9fcmVzcG9zdGEoKWAKICAKICAqIFByaW1laXJvLCBhY2hhbW9zIG9zIHBvbnRvcyAkRiQgZSAkRyQuCiAgCiAgKiBBIGxhcmd1cmEgZGEgcG9ydGEgw6kgJDEyLzMgPSA0JC4KICAKICAqIENvbW8gYSBwb3J0YSBlc3TDoSBjZW50cmFsaXphZGEsIAogIAogICAgJCQKICAgIEYgPSBBICsgNCBcY2RvdCBcb3ZlcnJpZ2h0YXJyb3d7QUJfVX0gCiAgICA9ICgwLCAwKSArIDQgXGNkb3QgXGxlZnQoIFxmcmFje3hfQn17MTJ9LCBcZnJhY3t5X0J9ezEyfSBccmlnaHQpCiAgICA9IFxsZWZ0KCBcZnJhY3t4X0J9ezN9LCBcZnJhY3t5X0J9ezN9IFxyaWdodCkKICAgICQkCiAgICBlCiAgICAKICAgICQkCiAgICBHID0gQSArIDggXGNkb3QgXG92ZXJyaWdodGFycm93e0FCX1V9IAogICAgPSAoMCwgMCkgKyA4IFxjZG90IFxsZWZ0KCBcZnJhY3t4X0J9ezEyfSwgXGZyYWN7eV9CfXsxMn0gXHJpZ2h0KQogICAgPSBcbGVmdCggXGZyYWN7MnhfQn17M30sIFxmcmFjezJ5X0J9ezN9IFxyaWdodCkKICAgICQkCiAgICAKICAqIEEgYWx0dXJhIGRhIHBvcnRhIMOpICQxMi82ID0gMiQuCiAgCiAgKiAiU3ViaW5kbyIgJDIkIHVuaWRhZGVzIG5hIGRpcmXDp8OjbyBkZSAkXG92ZXJyaWdodGFycm93e1x0ZXh0e3BhcmVkZX1fVX0kLCBhIHBhcnRpciBkZSAkRyQsIGNoZWdhbW9zIGEgJEgkOgogICAgCiAgICAkJAogICAgXGJlZ2lue2FsaWdufQogICAgSCAKICAgICY9IEcgKyAyIFxjZG90IFxvdmVycmlnaHRhcnJvd3tcdGV4dHtwYXJlZGV9X1V9IFxcCiAgICAmPSAKICAgIFxsZWZ0KCBcZnJhY3syeF9CfXszfSwgXGZyYWN7MnlfQn17M30gXHJpZ2h0KSArCiAgICAyIFxjZG90IFxsZWZ0KCBcZnJhY3steV9CfXsxMn0sIFxmcmFje3hfQn17MTJ9XHJpZ2h0KSBcXAogICAgJj0KICAgIFxsZWZ0KCBcZnJhY3s0eF9CIC0geV9CfXs2fSwgXGZyYWN7eF9CICsgNHlfQn17Nn0gXHJpZ2h0KQogICAgXGVuZHthbGlnbn0KICAgICQkCgogICogIlN1YmluZG8iICQyJCB1bmlkYWRlcyBuYSBkaXJlw6fDo28gZGUgJFxvdmVycmlnaHRhcnJvd3tcdGV4dHtwYXJlZGV9X1V9JCwgYSBwYXJ0aXIgZGUgJEYkLCBjaGVnYW1vcyBhICRJJDoKICAgIAogICAgJCQKICAgIFxiZWdpbnthbGlnbn0KICAgIEkgCiAgICAmPSBGICsgMiBcY2RvdCBcb3ZlcnJpZ2h0YXJyb3d7XHRleHR7cGFyZWRlfV9VfSBcXAogICAgJj0gCiAgICBcbGVmdCggXGZyYWN7eF9CfXszfSwgXGZyYWN7eV9CfXszfSBccmlnaHQpICsKICAgIDIgXGNkb3QgXGxlZnQoIFxmcmFjey15X0J9ezEyfSwgXGZyYWN7eF9CfXsxMn1ccmlnaHQpIFxcCiAgICAmPQogICAgXGxlZnQoIFxmcmFjezJ4X0IgLSB5X0J9ezZ9LCBcZnJhY3t4X0IgKyAyeV9CfXs2fSBccmlnaHQpCiAgICBcZW5ke2FsaWdufQogICAgJCQKCiAgCiAgYHIgZmltX3Jlc3Bvc3RhKClgCgoKIyBOw7ptZXJvcyBkb3MgYWx1bm9zLCBwb3IgbWF0csOtY3VsYSB7ICNudW1zIH0KCmBgYHtyIGVjaG89RkFMU0V9CnNldC5zZWVkKDEyMzQpCgptYXRyw61jdWxhIDwtIGMoCiAgMjIwMDYwMDQxLAogIDEyMjA2MDAzMSwKICAxMjIwNjAwMjAsCiAgMTIyMDYwMDEzLAogIDEyMjA2MDAzNCwKICAxMjIwNjAwMjEsCiAgODIyMDYwMDM3LAogIDEyMjA2MDAwNiwKICA2MjIwNjAwMjcsCiAgMjE1MDYwMDU2LAogIDEyMjA2MDAwNSwKICAxMjIwNjAwMDgsCiAgMTIyMDYwMDE3LAogIDEyMjA2MDAxMiwKICA2MjIwNjAwMjQsCiAgMTIyMDYwMDA3LAogIDEyMjA2MDAwMywKICAxMjIwNjAwMDQsCiAgNjIyMDYwMDI1LAogIDEyMjA2MDAyOSwKICAyMjEwNjAwNDAsCiAgMTIyMDYwMDMzLAogIDEyMjA2MDA0MSwKICAxMjIwNjAwMDksCiAgMTIyMDYwMDE2LAogIDEyMjA2MDAzOCwKICAxMjIwNjAwMjgsCiAgMTIyMDYwMDMwLAogIDExOTA2MDAyOSwKICAyMjEwNjAwNDcsCiAgMTIyMDYwMDIzLAogIDEyMjA2MDAxNSwKICAxMjIwNjAwMTAsCiAgMTIyMDYwMDE0LAogIDEyMjA2MDAzNiwKICA2MjIwNjAwMjYsCiAgMTIyMDYwMDE4LAogIDEyMjA2MDAxMSwKICAxMjIwNjAwMTksCiAgMTIyMDYwMDIyLAogIDEyMjA2MDA0MCwKICAxMjIwNjAwMzUgIAopICAKCm4gPC0gc2FtcGxlKDE6bGVuZ3RoKG1hdHLDrWN1bGEpKQoKZGYgPC0gdGliYmxlKG1hdHLDrWN1bGEsIG4pICU+JSAKICBhcnJhbmdlKG1hdHLDrWN1bGEpCgpkZiAlPiUga2JsKCkgJT4lIAprYWJsZV9wYXBlcigKICBjKCdzdHJpcGVkJywgJ2hvdmVyJyksCiAgZnVsbF93aWR0aCA9IEZBTFNFCikKYGBgCgoKPGRpdiBzdHlsZT0naGVpZ2h0OiAxMDAwcHgnPjwvZGl2Pgo=