open-source-dimas commited on
Commit
9cb4eda
·
verified ·
1 Parent(s): 92c5bfe

Publicar modelo de jogo da velha treinado do zero

Browse files
README.md ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: mit
3
+ language:
4
+ - pt
5
+ - en
6
+ tags:
7
+ - text-generation
8
+ - code-generation
9
+ - from-scratch
10
+ ---
11
+
12
+ # Modelo de jogo da velha treinado do zero
13
+
14
+ Este é um pequeno modelo causal treinado a partir de pesos aleatórios para responder a pedidos de geração de código web, com foco em um jogo simples da velha. Ele não usa Qwen, Llama, GPT ou qualquer peso pré-treinado. O tokenizer também foi treinado localmente.
15
+
16
+ ## Uso
17
+
18
+ ```bash
19
+ python3 usar_gpt_zero.py --checkpoint modelo_jogo_zero_publicado_v2.pt --system "Você é um assistente local útil e educado." --pergunta "Crie um jogo simples da velha em HTML, CSS e JavaScript." --device cpu
20
+ ```
21
+
22
+ O arquivo `jogo_gerado_pelo_modelo.html` é uma amostra gerada pelo checkpoint. A validação registra que o HTML abriu no navegador, alternou X e O e detectou uma vitória.
23
+
24
+ ## Dados
25
+
26
+ O treinamento combinou diálogos curados deste projeto com um subconjunto filtrado do dataset `cfahlgren1/react-code-instructions`, publicado sob licença MIT: https://huggingface.co/datasets/cfahlgren1/react-code-instructions. O subconjunto foi usado para ampliar exemplos de aplicações web; os exemplos específicos da velha foram escritos para este projeto.
27
+
28
+ ## Limitações
29
+
30
+ Este é um modelo educacional pequeno, com aproximadamente 751 mil parâmetros. Ele não é um assistente geral e pode produzir código incompleto para pedidos fora dos padrões aprendidos.
VALIDACAO_JOGO_GERADO.md ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ # Validação do jogo gerado pelo modelo
2
+
3
+ O checkpoint `modelo_jogo_zero_publicado_v2.pt` gerou `jogo_gerado_pelo_modelo.html`. A página abriu no navegador com nove botões, mensagem inicial `Vez de X` e o tabuleiro visível. O primeiro clique colocou `X` na primeira casa e mudou o status para `Vez de O`, confirmando que o JavaScript foi executado.
4
+ Após o primeiro clique, o segundo clique colocou `O` e o terceiro clique colocou `X`; o status alternou corretamente entre os jogadores. O HTML gerado pelo modelo passou na checagem de sintaxe JavaScript com `node --check`.
5
+ Na sequência de teste, X ocupou as casas 1, 4 e 7; o jogo exibiu `X venceu!`. A detecção de vitória funciona no HTML gerado pelo modelo.
conversar_zero.py ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Chat interativo usando exclusivamente pesos treinados do zero."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ from pathlib import Path
8
+
9
+ import torch
10
+
11
+ from usar_gpt_zero import carregar
12
+ from treinar_gpt_zero import gerar
13
+
14
+
15
+ SYSTEM_DEFAULT = "Você é um assistente local útil e educado."
16
+
17
+
18
+ def main() -> None:
19
+ parser = argparse.ArgumentParser(description="Conversa com o GPT treinado do zero.")
20
+ parser.add_argument("--checkpoint", type=Path, default=Path("modelo_dialogos_multi_v2.pt"))
21
+ parser.add_argument("--system", default=SYSTEM_DEFAULT)
22
+ parser.add_argument("--tokens", type=int, default=80)
23
+ parser.add_argument("--temperature", type=float, default=0.05)
24
+ parser.add_argument("--top-k", type=int, default=20)
25
+ parser.add_argument("--top-p", type=float, default=0.9)
26
+ parser.add_argument("--repetition-penalty", type=float, default=1.15)
27
+ parser.add_argument("--device", choices=["auto", "cpu", "cuda"], default="auto")
28
+ args = parser.parse_args()
29
+
30
+ if args.device == "auto":
31
+ device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
32
+ else:
33
+ device = torch.device(args.device)
34
+ modelo, tokenizer, checkpoint, bos_id, eos_id = carregar(args.checkpoint, device)
35
+ print("Modelo treinado do zero pronto. Digite /sair para terminar.")
36
+ historico: list[tuple[str, str]] = []
37
+ while True:
38
+ pergunta = input("Você: ").strip()
39
+ if pergunta == "/sair":
40
+ break
41
+ historico.append(("user", pergunta))
42
+ partes = [f"<|system|>{args.system}<|end|>"]
43
+ for indice, (papel, conteudo) in enumerate(historico[-4:]):
44
+ partes.append(f"<|{papel}|>{conteudo}<|end|>")
45
+ if indice == len(historico[-4:]) - 1 and papel == "user":
46
+ partes.append("<|assistant|>")
47
+ prompt = "".join(partes)
48
+ resposta = gerar(modelo, tokenizer, prompt, device, args.tokens, args.temperature, args.top_k, args.top_p, bos_id, eos_id, args.repetition_penalty)
49
+ historico.append(("assistant", resposta))
50
+ print(f"Modelo: {resposta}\n")
51
+
52
+
53
+ if __name__ == "__main__":
54
+ main()
jogo_gerado_pelo_modelo.html ADDED
@@ -0,0 +1 @@
 
 
1
+ <!doctype html><style>button{width:60px;height:60px;font-size:30px}</style><div id="g"></div><p id="m">Vez de X</p><script>let b=Array(9).fill(''),p='X',g=document.querySelector('#g'),m=document.querySelector('#m');function d(){g.innerHTML=b.map((x,i)=>`<button onclick="j(${i})">${x}</button>`).join('')}function j(i){if(b[i])return;b[i]=p;d();let w=[[0,1,2],[3,4,5],[6,7,8],[0,3,6],[1,4,7],[2,5,8],[0,4,8],[2,4,6]].some(a=>a.every(k=>b[k]==p));if(w)m.textContent=p+' venceu!';else if(b.every(x=>x))m.textContent='Empate!';else p=p=='X'?'O':'X',m.textContent='Vez de '+p}d();</script>
modelo_jogo_zero_publicado_v2.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c51a512c3d18ef83d28c5e3beaa98085b3293b8658694f216d7bdfd6e440b781
3
+ size 3019103
requirements_zero.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ torch
2
+ tokenizers
tokenizer.json ADDED
@@ -0,0 +1,4459 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "version": "1.0",
3
+ "truncation": null,
4
+ "padding": null,
5
+ "added_tokens": [
6
+ {
7
+ "id": 0,
8
+ "content": "<pad>",
9
+ "single_word": false,
10
+ "lstrip": false,
11
+ "rstrip": false,
12
+ "normalized": false,
13
+ "special": true
14
+ },
15
+ {
16
+ "id": 1,
17
+ "content": "<unk>",
18
+ "single_word": false,
19
+ "lstrip": false,
20
+ "rstrip": false,
21
+ "normalized": false,
22
+ "special": true
23
+ },
24
+ {
25
+ "id": 2,
26
+ "content": "<bos>",
27
+ "single_word": false,
28
+ "lstrip": false,
29
+ "rstrip": false,
30
+ "normalized": false,
31
+ "special": true
32
+ },
33
+ {
34
+ "id": 3,
35
+ "content": "<eos>",
36
+ "single_word": false,
37
+ "lstrip": false,
38
+ "rstrip": false,
39
+ "normalized": false,
40
+ "special": true
41
+ },
42
+ {
43
+ "id": 4,
44
+ "content": "<|system|>",
45
+ "single_word": false,
46
+ "lstrip": false,
47
+ "rstrip": false,
48
+ "normalized": false,
49
+ "special": true
50
+ },
51
+ {
52
+ "id": 5,
53
+ "content": "<|user|>",
54
+ "single_word": false,
55
+ "lstrip": false,
56
+ "rstrip": false,
57
+ "normalized": false,
58
+ "special": true
59
+ },
60
+ {
61
+ "id": 6,
62
+ "content": "<|assistant|>",
63
+ "single_word": false,
64
+ "lstrip": false,
65
+ "rstrip": false,
66
+ "normalized": false,
67
+ "special": true
68
+ },
69
+ {
70
+ "id": 7,
71
+ "content": "<|end|>",
72
+ "single_word": false,
73
+ "lstrip": false,
74
+ "rstrip": false,
75
+ "normalized": false,
76
+ "special": true
77
+ }
78
+ ],
79
+ "normalizer": null,
80
+ "pre_tokenizer": {
81
+ "type": "ByteLevel",
82
+ "add_prefix_space": false,
83
+ "trim_offsets": true,
84
+ "use_regex": true
85
+ },
86
+ "post_processor": null,
87
+ "decoder": {
88
+ "type": "ByteLevel",
89
+ "add_prefix_space": true,
90
+ "trim_offsets": true,
91
+ "use_regex": true
92
+ },
93
+ "model": {
94
+ "type": "BPE",
95
+ "dropout": null,
96
+ "unk_token": "<unk>",
97
+ "continuing_subword_prefix": null,
98
+ "end_of_word_suffix": null,
99
+ "fuse_unk": false,
100
+ "byte_fallback": false,
101
+ "ignore_merges": false,
102
+ "vocab": {
103
+ "<pad>": 0,
104
+ "<unk>": 1,
105
+ "<bos>": 2,
106
+ "<eos>": 3,
107
+ "<|system|>": 4,
108
+ "<|user|>": 5,
109
+ "<|assistant|>": 6,
110
+ "<|end|>": 7,
111
+ "!": 8,
112
+ "\"": 9,
113
+ "#": 10,
114
+ "$": 11,
115
+ "%": 12,
116
+ "&": 13,
117
+ "'": 14,
118
+ "(": 15,
119
+ ")": 16,
120
+ "*": 17,
121
+ "+": 18,
122
+ ",": 19,
123
+ "-": 20,
124
+ ".": 21,
125
+ "/": 22,
126
+ "0": 23,
127
+ "1": 24,
128
+ "2": 25,
129
+ "3": 26,
130
+ "4": 27,
131
+ "5": 28,
132
+ "6": 29,
133
+ "7": 30,
134
+ "8": 31,
135
+ "9": 32,
136
+ ":": 33,
137
+ ";": 34,
138
+ "<": 35,
139
+ "=": 36,
140
+ ">": 37,
141
+ "?": 38,
142
+ "@": 39,
143
+ "A": 40,
144
+ "B": 41,
145
+ "C": 42,
146
+ "D": 43,
147
+ "E": 44,
148
+ "F": 45,
149
+ "G": 46,
150
+ "H": 47,
151
+ "I": 48,
152
+ "J": 49,
153
+ "K": 50,
154
+ "L": 51,
155
+ "M": 52,
156
+ "N": 53,
157
+ "O": 54,
158
+ "P": 55,
159
+ "Q": 56,
160
+ "R": 57,
161
+ "S": 58,
162
+ "T": 59,
163
+ "U": 60,
164
+ "V": 61,
165
+ "W": 62,
166
+ "X": 63,
167
+ "Y": 64,
168
+ "Z": 65,
169
+ "[": 66,
170
+ "\\": 67,
171
+ "]": 68,
172
+ "^": 69,
173
+ "_": 70,
174
+ "`": 71,
175
+ "a": 72,
176
+ "b": 73,
177
+ "c": 74,
178
+ "d": 75,
179
+ "e": 76,
180
+ "f": 77,
181
+ "g": 78,
182
+ "h": 79,
183
+ "i": 80,
184
+ "j": 81,
185
+ "k": 82,
186
+ "l": 83,
187
+ "m": 84,
188
+ "n": 85,
189
+ "o": 86,
190
+ "p": 87,
191
+ "q": 88,
192
+ "r": 89,
193
+ "s": 90,
194
+ "t": 91,
195
+ "u": 92,
196
+ "v": 93,
197
+ "w": 94,
198
+ "x": 95,
199
+ "y": 96,
200
+ "z": 97,
201
+ "{": 98,
202
+ "|": 99,
203
+ "}": 100,
204
+ "~": 101,
205
+ "¡": 102,
206
+ "¢": 103,
207
+ "£": 104,
208
+ "¤": 105,
209
+ "¥": 106,
210
+ "¦": 107,
211
+ "§": 108,
212
+ "¨": 109,
213
+ "©": 110,
214
+ "ª": 111,
215
+ "«": 112,
216
+ "¬": 113,
217
+ "®": 114,
218
+ "¯": 115,
219
+ "°": 116,
220
+ "±": 117,
221
+ "²": 118,
222
+ "³": 119,
223
+ "´": 120,
224
+ "µ": 121,
225
+ "¶": 122,
226
+ "·": 123,
227
+ "¸": 124,
228
+ "¹": 125,
229
+ "º": 126,
230
+ "»": 127,
231
+ "¼": 128,
232
+ "½": 129,
233
+ "¾": 130,
234
+ "¿": 131,
235
+ "Â": 132,
236
+ "Ã": 133,
237
+ "Î": 134,
238
+ "Ï": 135,
239
+ "Ð": 136,
240
+ "Ñ": 137,
241
+ "Ò": 138,
242
+ "×": 139,
243
+ "Ø": 140,
244
+ "Ù": 141,
245
+ "à": 142,
246
+ "á": 143,
247
+ "â": 144,
248
+ "ã": 145,
249
+ "ä": 146,
250
+ "å": 147,
251
+ "æ": 148,
252
+ "ç": 149,
253
+ "è": 150,
254
+ "é": 151,
255
+ "ë": 152,
256
+ "ï": 153,
257
+ "ð": 154,
258
+ "ĉ": 155,
259
+ "Ċ": 156,
260
+ "Ġ": 157,
261
+ "Ģ": 158,
262
+ "ģ": 159,
263
+ "Ĥ": 160,
264
+ "ĥ": 161,
265
+ "Ħ": 162,
266
+ "ħ": 163,
267
+ "Ĩ": 164,
268
+ "ĩ": 165,
269
+ "Ī": 166,
270
+ "ī": 167,
271
+ "Ĭ": 168,
272
+ "ĭ": 169,
273
+ "Į": 170,
274
+ "į": 171,
275
+ "İ": 172,
276
+ "ı": 173,
277
+ "IJ": 174,
278
+ "ij": 175,
279
+ "Ĵ": 176,
280
+ "ĵ": 177,
281
+ "Ķ": 178,
282
+ "ķ": 179,
283
+ "ĸ": 180,
284
+ "Ĺ": 181,
285
+ "ĺ": 182,
286
+ "Ļ": 183,
287
+ "ļ": 184,
288
+ "Ľ": 185,
289
+ "ľ": 186,
290
+ "Ŀ": 187,
291
+ "ŀ": 188,
292
+ "Ł": 189,
293
+ "ł": 190,
294
+ "Ń": 191,
295
+ "ĠĠ": 192,
296
+ "ĠĠĠĠ": 193,
297
+ "te": 194,
298
+ "en": 195,
299
+ "Ġa": 196,
300
+ "on": 197,
301
+ "ĠĠĠĠĠĠĠĠ": 198,
302
+ "in": 199,
303
+ "<|": 200,
304
+ "|>": 201,
305
+ "Ġc": 202,
306
+ "er": 203,
307
+ "ti": 204,
308
+ "or": 205,
309
+ "es": 206,
310
+ "Ġs": 207,
311
+ "le": 208,
312
+ "Ġe": 209,
313
+ "Ġp": 210,
314
+ "ar": 211,
315
+ "is": 212,
316
+ "as": 213,
317
+ "al": 214,
318
+ "us": 215,
319
+ "an": 216,
320
+ "Ġf": 217,
321
+ "end": 218,
322
+ "Ġd": 219,
323
+ "Ġt": 220,
324
+ "re": 221,
325
+ "ro": 222,
326
+ "nd": 223,
327
+ "tion": 224,
328
+ "oc": 225,
329
+ "Ġ-": 226,
330
+ "Ġ<": 227,
331
+ "ass": 228,
332
+ "=\"": 229,
333
+ "ad": 230,
334
+ "ent": 231,
335
+ "ing": 232,
336
+ "me": 233,
337
+ "Ġand": 234,
338
+ "ĠÃ": 235,
339
+ "Ġl": 236,
340
+ "um": 237,
341
+ "|><|": 238,
342
+ "mp": 239,
343
+ ".<|": 240,
344
+ "ra": 241,
345
+ "ta": 242,
346
+ "Ġum": 243,
347
+ "ut": 244,
348
+ "ed": 245,
349
+ "ri": 246,
350
+ "00": 247,
351
+ "ment": 248,
352
+ "Ġus": 249,
353
+ "ic": 250,
354
+ "Ġm": 251,
355
+ "he": 252,
356
+ "ame": 253,
357
+ "Ġcl": 254,
358
+ "ig": 255,
359
+ "ac": 256,
360
+ "ĠĠĠĠĠĠĠĠĠĠĠĠ": 257,
361
+ "xt": 258,
362
+ "ten": 259,
363
+ "Ġclass": 260,
364
+ "text": 261,
365
+ "ado": 262,
366
+ "Ġn": 263,
367
+ "Ġé": 264,
368
+ "Ġi": 265,
369
+ "iv": 266,
370
+ "\">": 267,
371
+ "Ġco": 268,
372
+ "ag": 269,
373
+ "ا": 270,
374
+ "ation": 271,
375
+ "Ġw": 272,
376
+ "Ġfor": 273,
377
+ "Name": 274,
378
+ "tem": 275,
379
+ "de": 276,
380
+ "Ġin": 277,
381
+ "ul": 278,
382
+ "ĠclassName": 279,
383
+ "ant": 280,
384
+ "ist": 281,
385
+ "Ġpro": 282,
386
+ "lement": 283,
387
+ "Ġh": 284,
388
+ "ê": 285,
389
+ "istant": 286,
390
+ "gra": 287,
391
+ "uc": 288,
392
+ "Ġ=": 289,
393
+ "se": 290,
394
+ "Ġo": 291,
395
+ "Ġde": 292,
396
+ "user": 293,
397
+ "Ġto": 294,
398
+ "Ġv": 295,
399
+ "st": 296,
400
+ "Ġas": 297,
401
+ "it": 298,
402
+ "assistant": 299,
403
+ "sis": 300,
404
+ "Ġcon": 301,
405
+ "ol": 302,
406
+ "il": 303,
407
+ "sisten": 304,
408
+ "at": 305,
409
+ "</": 306,
410
+ "ue": 307,
411
+ "ys": 308,
412
+ "ĠI": 309,
413
+ "Ġb": 310,
414
+ "ter": 311,
415
+ "ystem": 312,
416
+ "ÙĦ": 313,
417
+ "div": 314,
418
+ "ocal": 315,
419
+ "ĠT": 316,
420
+ "Ġlocal": 317,
421
+ "ĠU": 318,
422
+ "til": 319,
423
+ "per": 320,
424
+ "ve": 321,
425
+ "system": 322,
426
+ "ocê": 323,
427
+ "ĠĠĠĠĠĠĠĠĠĠ": 324,
428
+ "ate": 325,
429
+ "duc": 326,
430
+ "age": 327,
431
+ "Ġ</": 328,
432
+ "et": 329,
433
+ "mplement": 330,
434
+ "HT": 331,
435
+ "Você": 332,
436
+ "Ġ`": 333,
437
+ "ign": 334,
438
+ "Ġassisten": 335,
439
+ "Ġassistente": 336,
440
+ "?<|": 337,
441
+ "Ġ{": 338,
442
+ "Ġú": 339,
443
+ "Ġ'": 340,
444
+ "Ġeduc": 341,
445
+ "id": 342,
446
+ "Ġútil": 343,
447
+ "Ġeducado": 344,
448
+ "ML": 345,
449
+ "HTML": 346,
450
+ ");": 347,
451
+ "Ġthe": 348,
452
+ "pp": 349,
453
+ "ec": 350,
454
+ "ĠImplement": 351,
455
+ "ur": 352,
456
+ "Ġre": 353,
457
+ "Ġ}": 354,
458
+ "gray": 355,
459
+ "Ġ(": 356,
460
+ "ess": 357,
461
+ "ke": 358,
462
+ "Ġ0": 359,
463
+ "tate": 360,
464
+ "un": 361,
465
+ "ark": 362,
466
+ "á": 363,
467
+ "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 364,
468
+ "Ġ1": 365,
469
+ "Ġproper": 366,
470
+ "ce": 367,
471
+ "os": 368,
472
+ "Ġst": 369,
473
+ "esign": 370,
474
+ "ction": 371,
475
+ "ĠC": 372,
476
+ "Re": 373,
477
+ "ĠĠĠĠĠĠ": 374,
478
+ "Ùħ": 375,
479
+ "iz": 376,
480
+ "ht": 377,
481
+ "ĠHTML": 378,
482
+ "Ġex": 379,
483
+ "اÙĦ": 380,
484
+ "ĠD": 381,
485
+ "Ġtext": 382,
486
+ "ode": 383,
487
+ "lo": 384,
488
+ "ت": 385,
489
+ "ver": 386,
490
+ "ÙĬ": 387,
491
+ "Ġq": 388,
492
+ "ly": 389,
493
+ "th": 390,
494
+ "ab": 391,
495
+ "£o": 392,
496
+ "ão": 393,
497
+ "cri": 394,
498
+ "Ġconst": 395,
499
+ "ton": 396,
500
+ "ite": 397,
501
+ "Ġ2": 398,
502
+ "Ġuse": 399,
503
+ "rou": 400,
504
+ "ç": 401,
505
+ "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 402,
506
+ "ĠRe": 403,
507
+ "crip": 404,
508
+ "act": 405,
509
+ "ĠA": 406,
510
+ "yp": 407,
511
+ "Ġcle": 408,
512
+ "ĠS": 409,
513
+ "Ġon": 410,
514
+ "eed": 411,
515
+ "out": 412,
516
+ "bg": 413,
517
+ "Ġpar": 414,
518
+ "Ġ=>": 415,
519
+ "av": 416,
520
+ "om": 417,
521
+ "but": 418,
522
+ "ĠP": 419,
523
+ "Ġque": 420,
524
+ "est": 421,
525
+ "el": 422,
526
+ "ĠUse": 423,
527
+ "ont": 424,
528
+ "der": 425,
529
+ "Ġda": 426,
530
+ "``": 427,
531
+ "Ġcom": 428,
532
+ "ĠاÙĦ": 429,
533
+ "ma": 430,
534
+ "ĠReact": 431,
535
+ "ual": 432,
536
+ "Ġg": 433,
537
+ "ĠE": 434,
538
+ "={": 435,
539
+ "Ġen": 436,
540
+ "round": 437,
541
+ "Ġdark": 438,
542
+ "and": 439,
543
+ "Ġif": 440,
544
+ "cript": 441,
545
+ "ort": 442,
546
+ "Ġapp": 443,
547
+ "Ġr": 444,
548
+ "button": 445,
549
+ "ful": 446,
550
+ "Ġal": 447,
551
+ "gin": 448,
552
+ "ity": 449,
553
+ "Ġuser": 450,
554
+ "Ġstate": 451,
555
+ "Ġclear": 452,
556
+ "ay": 453,
557
+ "reate": 454,
558
+ "',": 455,
559
+ "lic": 456,
560
+ "ch": 457,
561
+ "ns": 458,
562
+ "ure": 459,
563
+ "im": 460,
564
+ "Ġuma": 461,
565
+ "()": 462,
566
+ "Ġset": 463,
567
+ "Ġis": 464,
568
+ "unction": 465,
569
+ "og": 466,
570
+ "ĠM": 467,
571
+ "Ġwe": 468,
572
+ "Ġan": 469,
573
+ "**": 470,
574
+ "han": 471,
575
+ "Ġth": 472,
576
+ "Ø©": 473,
577
+ "oo": 474,
578
+ "Ġem": 475,
579
+ "tive": 476,
580
+ "ou": 477,
581
+ "qu": 478,
582
+ "Ġneed": 479,
583
+ "ype": 480,
584
+ "Ġvis": 481,
585
+ "اØ": 482,
586
+ "si": 483,
587
+ "Ġdesign": 484,
588
+ "ks": 485,
589
+ "ocus": 486,
590
+ "SS": 487,
591
+ "Ġneeded": 488,
592
+ "ith": 489,
593
+ "Ġpara": 490,
594
+ "Ġvisual": 491,
595
+ "ud": 492,
596
+ "lin": 493,
597
+ "orm": 494,
598
+ "ci": 495,
599
+ "ÙĪ": 496,
600
+ "tic": 497,
601
+ "Ġval": 498,
602
+ "ĠØ": 499,
603
+ "Ġwith": 500,
604
+ "ts": 501,
605
+ "Ġfont": 502,
606
+ "ind": 503,
607
+ "Ġsu": 504,
608
+ "ace": 505,
609
+ "Ġpá": 506,
610
+ "Ġpágin": 507,
611
+ "ror": 508,
612
+ "ĠĠĠ": 509,
613
+ "Ġweb": 510,
614
+ "ção": 511,
615
+ "old": 512,
616
+ "over": 513,
617
+ "ĠDesign": 514,
618
+ "Ġres": 515,
619
+ "ff": 516,
620
+ "ml": 517,
621
+ "Ġ[": 518,
622
+ "ÙĨ": 519,
623
+ "ile": 520,
624
+ "hite": 521,
625
+ "Script": 522,
626
+ "ons": 523,
627
+ "rid": 524,
628
+ "Ġstates": 525,
629
+ "ĠF": 526,
630
+ "ive": 527,
631
+ "ew": 528,
632
+ "Ġfocus": 529,
633
+ "Ġsh": 530,
634
+ "ling": 531,
635
+ "rounded": 532,
636
+ "ring": 533,
637
+ "tif": 534,
638
+ "Ġ/": 535,
639
+ "tent": 536,
640
+ "Ġrounded": 537,
641
+ "Ġfunction": 538,
642
+ "ran": 539,
643
+ "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 540,
644
+ "pl": 541,
645
+ "ail": 542,
646
+ "],": 543,
647
+ "Ġdata": 544,
648
+ "lex": 545,
649
+ "uage": 546,
650
+ "bl": 547,
651
+ "Ġse": 548,
652
+ "wind": 549,
653
+ "ĠUI": 550,
654
+ "ailwind": 551,
655
+ "ill": 552,
656
+ "bo": 553,
657
+ "Ġhand": 554,
658
+ "';": 555,
659
+ "roke": 556,
660
+ "ĠTailwind": 557,
661
+ "Ġstroke": 558,
662
+ "Ġmo": 559,
663
+ "Ġer": 560,
664
+ "><": 561,
665
+ "Ġfunctional": 562,
666
+ "Con": 563,
667
+ "Ġusing": 564,
668
+ "cess": 565,
669
+ "Ġelement": 566,
670
+ "enter": 567,
671
+ "ayout": 568,
672
+ "col": 569,
673
+ "white": 570,
674
+ "lg": 571,
675
+ "ib": 572,
676
+ "center": 573,
677
+ "د": 574,
678
+ "Ġcreate": 575,
679
+ "State": 576,
680
+ "to": 577,
681
+ "Ġim": 578,
682
+ "'s": 579,
683
+ "ens": 580,
684
+ "Ġ```": 581,
685
+ "arch": 582,
686
+ "Ġcomp": 583,
687
+ "if": 584,
688
+ "Ġor": 585,
689
+ "ow": 586,
690
+ "ard": 587,
691
+ "('": 588,
692
+ "],[": 589,
693
+ "ps": 590,
694
+ "ock": 591,
695
+ "Ġof": 592,
696
+ "ر": 593,
697
+ "Ġbe": 594,
698
+ "Ġerror": 595,
699
+ "adow": 596,
700
+ "ura": 597,
701
+ "ack": 598,
702
+ "px": 599,
703
+ "ial": 600,
704
+ "Ġid": 601,
705
+ "Ġimp": 602,
706
+ "avig": 603,
707
+ "Ġinter": 604,
708
+ "form": 605,
709
+ "//": 606,
710
+ "tle": 607,
711
+ "avigation": 608,
712
+ "12": 609,
713
+ "Ġform": 610,
714
+ "Ġcode": 611,
715
+ "ations": 612,
716
+ "Ġenhan": 613,
717
+ "urn": 614,
718
+ "='": 615,
719
+ "grid": 616,
720
+ "emp": 617,
721
+ "Ġno": 618,
722
+ "Ġy": 619,
723
+ "://": 620,
724
+ "line": 621,
725
+ "500": 622,
726
+ "300": 623,
727
+ "ÃŃ": 624,
728
+ "sv": 625,
729
+ "all": 626,
730
+ "turn": 627,
731
+ "Ġ/>": 628,
732
+ ")}": 629,
733
+ "Ġhover": 630,
734
+ "one": 631,
735
+ "svg": 632,
736
+ "Ġpágina": 633,
737
+ "arg": 634,
738
+ "Ġser": 635,
739
+ "cre": 636,
740
+ "dd": 637,
741
+ "Ġ},": 638,
742
+ "Ġresp": 639,
743
+ "ber": 640,
744
+ "Mode": 641,
745
+ "xl": 642,
746
+ "ui": 643,
747
+ "Ġj": 644,
748
+ "Ġmb": 645,
749
+ "put": 646,
750
+ "ight": 647,
751
+ "Ġlayout": 648,
752
+ "Ġsub": 649,
753
+ "600": 650,
754
+ "Ġtran": 651,
755
+ "Ġthat": 652,
756
+ "ect": 653,
757
+ "tions": 654,
758
+ "تØ": 655,
759
+ "Ġare": 656,
760
+ "blue": 657,
761
+ "ÙĤ": 658,
762
+ "abel": 659,
763
+ "Ġall": 660,
764
+ "tera": 661,
765
+ "lick": 662,
766
+ "Ġat": 663,
767
+ "order": 664,
768
+ "700": 665,
769
+ "Ġar": 666,
770
+ "cl": 667,
771
+ "ult": 668,
772
+ "ir": 669,
773
+ "omo": 670,
774
+ "Ġ};": 671,
775
+ "ress": 672,
776
+ "ath": 673,
777
+ "tes": 674,
778
+ "ap": 675,
779
+ "ari": 676,
780
+ "ĠJ": 677,
781
+ "Ġ**": 678,
782
+ "back": 679,
783
+ "arkMode": 680,
784
+ "ع": 681,
785
+ "ĠEns": 682,
786
+ "Ġtransi": 683,
787
+ "htt": 684,
788
+ "ct": 685,
789
+ "dic": 686,
790
+ "Ġpre": 687,
791
+ "ĠEnsure": 688,
792
+ "Ġreturn": 689,
793
+ "Ġnavigation": 690,
794
+ "==": 691,
795
+ "Ġexp": 692,
796
+ "Ġflex": 693,
797
+ "co": 694,
798
+ "CSS": 695,
799
+ "St": 696,
800
+ "ence": 697,
801
+ "ize": 698,
802
+ "none": 699,
803
+ "Ġmode": 700,
804
+ "Ġx": 701,
805
+ "à¦": 702,
806
+ "ĠuseState": 703,
807
+ "full": 704,
808
+ "ading": 705,
809
+ "Ġhandling": 706,
810
+ "emplo": 707,
811
+ "Ġdef": 708,
812
+ "ĠN": 709,
813
+ "ĠApp": 710,
814
+ "ages": 711,
815
+ "vic": 712,
816
+ "ility": 713,
817
+ "Ġshadow": 714,
818
+ "bold": 715,
819
+ "am": 716,
820
+ "tific": 717,
821
+ "vo": 718,
822
+ "Ġap": 719,
823
+ "Content": 720,
824
+ "-.": 721,
825
+ "Ġ3": 722,
826
+ "ĠCSS": 723,
827
+ "ang": 724,
828
+ "Ġke": 725,
829
+ "ase": 726,
830
+ "Ġwh": 727,
831
+ "ĠIn": 728,
832
+ "ados": 729,
833
+ "Ġvalid": 730,
834
+ "nci": 731,
835
+ "Como": 732,
836
+ "Ġest": 733,
837
+ ">`": 734,
838
+ "ĠL": 735,
839
+ "urr": 736,
840
+ "Ġfile": 737,
841
+ "ata": 738,
842
+ "Ġconte": 739,
843
+ "Ġac": 740,
844
+ "14": 741,
845
+ "idth": 742,
846
+ "urrent": 743,
847
+ "html": 744,
848
+ "Ġcol": 745,
849
+ "rom": 746,
850
+ "ĠonC": 747,
851
+ "ge": 748,
852
+ "ada": 749,
853
+ "Ġper": 750,
854
+ "ypeScript": 751,
855
+ "aceh": 752,
856
+ "Ġme": 753,
857
+ "head": 754,
858
+ "ênci": 755,
859
+ "Ùĥ": 756,
860
+ "textContent": 757,
861
+ "..": 758,
862
+ "rut": 759,
863
+ "Ġestrut": 760,
864
+ "Ġic": 761,
865
+ "ĠTypeScript": 762,
866
+ "Ùģ": 763,
867
+ "les": 764,
868
+ "Ġma": 765,
869
+ "heme": 766,
870
+ "site": 767,
871
+ "tsx": 768,
872
+ "able": 769,
873
+ "tui": 770,
874
+ "\"></": 771,
875
+ "ha": 772,
876
+ "Ġprogra": 773,
877
+ "li": 774,
878
+ "ava": 775,
879
+ "ĠÙħ": 776,
880
+ "ted": 777,
881
+ "imp": 778,
882
+ "Ġ24": 779,
883
+ "avaScript": 780,
884
+ "let": 781,
885
+ "ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ": 782,
886
+ "Ġwebsite": 783,
887
+ "ost": 784,
888
+ "ĠاÙĦØ": 785,
889
+ "DarkMode": 786,
890
+ "oading": 787,
891
+ "tul": 788,
892
+ "ÃŃtul": 789,
893
+ "sp": 790,
894
+ "}</": 791,
895
+ "Ġdo": 792,
896
+ "wor": 793,
897
+ "ooks": 794,
898
+ "reat": 795,
899
+ "umber": 796,
900
+ "Ġscre": 797,
901
+ "ument": 798,
902
+ "Ġsp": 799,
903
+ "Ġ>": 800,
904
+ "Ġimage": 801,
905
+ "Ġsimp": 802,
906
+ "ors": 803,
907
+ "ocument": 804,
908
+ "');": 805,
909
+ "cor": 806,
910
+ "Ġtype": 807,
911
+ ").": 808,
912
+ "eedback": 809,
913
+ "onsive": 810,
914
+ "ات": 811,
915
+ "gh": 812,
916
+ "inguage": 813,
917
+ "inguagem": 814,
918
+ "800": 815,
919
+ "ência": 816,
920
+ "onent": 817,
921
+ "ination": 818,
922
+ "ĠtÃŃtul": 819,
923
+ "tems": 820,
924
+ "Ġpy": 821,
925
+ "ion": 822,
926
+ "ization": 823,
927
+ "ome": 824,
928
+ "Lin": 825,
929
+ "**:": 826,
930
+ "Ġfrom": 827,
931
+ "((": 828,
932
+ "Ġsty": 829,
933
+ "anguage": 830,
934
+ "olor": 831,
935
+ "Ġvalidation": 832,
936
+ "Ġfeedback": 833,
937
+ "Ġsubtle": 834,
938
+ "ph": 835,
939
+ "ĠCreate": 836,
940
+ "Ġclasses": 837,
941
+ "vi": 838,
942
+ "aries": 839,
943
+ "tuitive": 840,
944
+ "Ġintuitive": 841,
945
+ "Ġconsisten": 842,
946
+ "hange": 843,
947
+ "ĠTailwindCSS": 844,
948
+ "Ġ4": 845,
949
+ "label": 846,
950
+ "lication": 847,
951
+ "Ġenhanc": 848,
952
+ "Ġ()": 849,
953
+ "ire": 850,
954
+ "ary": 851,
955
+ "ww": 852,
956
+ "س": 853,
957
+ "70": 854,
958
+ "ĠThe": 855,
959
+ "Ġlinguagem": 856,
960
+ "Ġscreens": 857,
961
+ "ption": 858,
962
+ "Ġadd": 859,
963
+ "Ġlin": 860,
964
+ "##": 861,
965
+ "up": 862,
966
+ "Ġ:": 863,
967
+ "ance": 864,
968
+ "ĠstrokeLin": 865,
969
+ "bu": 866,
970
+ "igh": 867,
971
+ "ave": 868,
972
+ "Ġman": 869,
973
+ "Ġapplication": 870,
974
+ "10": 871,
975
+ "Ġrequ": 872,
976
+ "Ġlanguage": 873,
977
+ "yth": 874,
978
+ "ĠPro": 875,
979
+ "iti": 876,
980
+ "Ġitems": 877,
981
+ "Ġstring": 878,
982
+ "Ġpr": 879,
983
+ "Ġdes": 880,
984
+ "ython": 881,
985
+ "https": 882,
986
+ "mo": 883,
987
+ "Ġro": 884,
988
+ "dern": 885,
989
+ "Ġresponsive": 886,
990
+ "ask": 887,
991
+ "tain": 888,
992
+ "current": 889,
993
+ "Ġcomponent": 890,
994
+ "agement": 891,
995
+ "mon": 892,
996
+ "ب": 893,
997
+ "orage": 894,
998
+ "con": 895,
999
+ "200": 896,
1000
+ "ador": 897,
1001
+ "Ġmodern": 898,
1002
+ "our": 899,
1003
+ "Ġname": 900,
1004
+ "Ġkey": 901,
1005
+ "do": 902,
1006
+ "low": 903,
1007
+ "outline": 904,
1008
+ "oin": 905,
1009
+ "Ġpx": 906,
1010
+ "Ġborder": 907,
1011
+ "Ġht": 908,
1012
+ "Ġ?": 909,
1013
+ "Ġhe": 910,
1014
+ "Ġdep": 911,
1015
+ "tern": 912,
1016
+ "ty": 913,
1017
+ "ye": 914,
1018
+ "Ġhigh": 915,
1019
+ "ref": 916,
1020
+ "Ġindic": 917,
1021
+ "${": 918,
1022
+ "Storage": 919,
1023
+ "az": 920,
1024
+ "Ġvalue": 921,
1025
+ "```": 922,
1026
+ "Use": 923,
1027
+ "|>```": 924,
1028
+ "rein": 925,
1029
+ "tify": 926,
1030
+ "ação": 927,
1031
+ "ú": 928,
1032
+ "ient": 929,
1033
+ "md": 930,
1034
+ "Ġpode": 931,
1035
+ "ĠJavaScript": 932,
1036
+ "Ol": 933,
1037
+ "aç": 934,
1038
+ "Olá": 935,
1039
+ "gle": 936,
1040
+ "Ġcomo": 937,
1041
+ "Ġpáginas": 938,
1042
+ "Ġconteú": 939,
1043
+ "Ġestrutura": 940,
1044
+ "Ġconteúdo": 941,
1045
+ "Ġ```<|": 942,
1046
+ "ender": 943,
1047
+ "arget": 944,
1048
+ "io": 945,
1049
+ "In": 946,
1050
+ "Ġpl": 947,
1051
+ "Ġbg": 948,
1052
+ "You": 949,
1053
+ "Ġcolor": 950,
1054
+ "cy": 951,
1055
+ "vices": 952,
1056
+ "tom": 953,
1057
+ "Ġ00": 954,
1058
+ "Ġvisually": 955,
1059
+ "){": 956,
1060
+ "ustify": 957,
1061
+ "Ġexper": 958,
1062
+ "Ġintera": 959,
1063
+ "Eff": 960,
1064
+ "pport": 961,
1065
+ "Ġapar": 962,
1066
+ "cols": 963,
1067
+ "Ġmar": 964,
1068
+ "fo": 965,
1069
+ "Ġtag": 966,
1070
+ "uld": 967,
1071
+ "Ġos": 968,
1072
+ "Effect": 969,
1073
+ "pre": 970,
1074
+ "ctive": 971,
1075
+ "vent": 972,
1076
+ "Ġ|": 973,
1077
+ "izes": 974,
1078
+ "ĠاÙĦÙħ": 975,
1079
+ "aveg": 976,
1080
+ "ÙĬØ©": 977,
1081
+ "avegador": 978,
1082
+ "Ġ`<": 979,
1083
+ "Ġclean": 980,
1084
+ "ágra": 981,
1085
+ "ĠtÃŃtulo": 982,
1086
+ "tiv": 983,
1087
+ "ould": 984,
1088
+ "ake": 985,
1089
+ "art": 986,
1090
+ "64": 987,
1091
+ "essages": 988,
1092
+ "red": 989,
1093
+ "ault": 990,
1094
+ "ĠuseEffect": 991,
1095
+ "Ġany": 992,
1096
+ "ability": 993,
1097
+ "Ġeff": 994,
1098
+ "ĠH": 995,
1099
+ "his": 996,
1100
+ "Ġass": 997,
1101
+ "Ġstyling": 998,
1102
+ "dal": 999,
1103
+ "Ġincl": 1000,
1104
+ "Ġ===": 1001,
1105
+ "imations": 1002,
1106
+ "ĠO": 1003,
1107
+ "sm": 1004,
1108
+ ".</": 1005,
1109
+ "ste": 1006,
1110
+ "gress": 1007,
1111
+ "path": 1008,
1112
+ "Ġwill": 1009,
1113
+ "]);": 1010,
1114
+ "uccess": 1011,
1115
+ "hes": 1012,
1116
+ "king": 1013,
1117
+ "Ġsizes": 1014,
1118
+ "ĠThis": 1015,
1119
+ "Ġcri": 1016,
1120
+ "graph": 1017,
1121
+ "Ġfunctionality": 1018,
1122
+ "Ġinterf": 1019,
1123
+ "we": 1020,
1124
+ "Ġproj": 1021,
1125
+ "hesive": 1022,
1126
+ "are": 1023
1127
+ },
1128
+ "merges": [
1129
+ [
1130
+ "Ġ",
1131
+ "Ġ"
1132
+ ],
1133
+ [
1134
+ "ĠĠ",
1135
+ "ĠĠ"
1136
+ ],
1137
+ [
1138
+ "t",
1139
+ "e"
1140
+ ],
1141
+ [
1142
+ "e",
1143
+ "n"
1144
+ ],
1145
+ [
1146
+ "Ġ",
1147
+ "a"
1148
+ ],
1149
+ [
1150
+ "o",
1151
+ "n"
1152
+ ],
1153
+ [
1154
+ "ĠĠĠĠ",
1155
+ "ĠĠĠĠ"
1156
+ ],
1157
+ [
1158
+ "i",
1159
+ "n"
1160
+ ],
1161
+ [
1162
+ "<",
1163
+ "|"
1164
+ ],
1165
+ [
1166
+ "|",
1167
+ ">"
1168
+ ],
1169
+ [
1170
+ "Ġ",
1171
+ "c"
1172
+ ],
1173
+ [
1174
+ "e",
1175
+ "r"
1176
+ ],
1177
+ [
1178
+ "t",
1179
+ "i"
1180
+ ],
1181
+ [
1182
+ "o",
1183
+ "r"
1184
+ ],
1185
+ [
1186
+ "e",
1187
+ "s"
1188
+ ],
1189
+ [
1190
+ "Ġ",
1191
+ "s"
1192
+ ],
1193
+ [
1194
+ "l",
1195
+ "e"
1196
+ ],
1197
+ [
1198
+ "Ġ",
1199
+ "e"
1200
+ ],
1201
+ [
1202
+ "Ġ",
1203
+ "p"
1204
+ ],
1205
+ [
1206
+ "a",
1207
+ "r"
1208
+ ],
1209
+ [
1210
+ "i",
1211
+ "s"
1212
+ ],
1213
+ [
1214
+ "a",
1215
+ "s"
1216
+ ],
1217
+ [
1218
+ "a",
1219
+ "l"
1220
+ ],
1221
+ [
1222
+ "u",
1223
+ "s"
1224
+ ],
1225
+ [
1226
+ "a",
1227
+ "n"
1228
+ ],
1229
+ [
1230
+ "Ġ",
1231
+ "f"
1232
+ ],
1233
+ [
1234
+ "en",
1235
+ "d"
1236
+ ],
1237
+ [
1238
+ "Ġ",
1239
+ "d"
1240
+ ],
1241
+ [
1242
+ "Ġ",
1243
+ "t"
1244
+ ],
1245
+ [
1246
+ "r",
1247
+ "e"
1248
+ ],
1249
+ [
1250
+ "r",
1251
+ "o"
1252
+ ],
1253
+ [
1254
+ "n",
1255
+ "d"
1256
+ ],
1257
+ [
1258
+ "ti",
1259
+ "on"
1260
+ ],
1261
+ [
1262
+ "o",
1263
+ "c"
1264
+ ],
1265
+ [
1266
+ "Ġ",
1267
+ "-"
1268
+ ],
1269
+ [
1270
+ "Ġ",
1271
+ "<"
1272
+ ],
1273
+ [
1274
+ "as",
1275
+ "s"
1276
+ ],
1277
+ [
1278
+ "=",
1279
+ "\""
1280
+ ],
1281
+ [
1282
+ "a",
1283
+ "d"
1284
+ ],
1285
+ [
1286
+ "en",
1287
+ "t"
1288
+ ],
1289
+ [
1290
+ "in",
1291
+ "g"
1292
+ ],
1293
+ [
1294
+ "m",
1295
+ "e"
1296
+ ],
1297
+ [
1298
+ "Ġa",
1299
+ "nd"
1300
+ ],
1301
+ [
1302
+ "Ġ",
1303
+ "Ã"
1304
+ ],
1305
+ [
1306
+ "Ġ",
1307
+ "l"
1308
+ ],
1309
+ [
1310
+ "u",
1311
+ "m"
1312
+ ],
1313
+ [
1314
+ "|>",
1315
+ "<|"
1316
+ ],
1317
+ [
1318
+ "m",
1319
+ "p"
1320
+ ],
1321
+ [
1322
+ ".",
1323
+ "<|"
1324
+ ],
1325
+ [
1326
+ "r",
1327
+ "a"
1328
+ ],
1329
+ [
1330
+ "t",
1331
+ "a"
1332
+ ],
1333
+ [
1334
+ "Ġ",
1335
+ "um"
1336
+ ],
1337
+ [
1338
+ "u",
1339
+ "t"
1340
+ ],
1341
+ [
1342
+ "e",
1343
+ "d"
1344
+ ],
1345
+ [
1346
+ "r",
1347
+ "i"
1348
+ ],
1349
+ [
1350
+ "0",
1351
+ "0"
1352
+ ],
1353
+ [
1354
+ "m",
1355
+ "ent"
1356
+ ],
1357
+ [
1358
+ "Ġ",
1359
+ "us"
1360
+ ],
1361
+ [
1362
+ "i",
1363
+ "c"
1364
+ ],
1365
+ [
1366
+ "Ġ",
1367
+ "m"
1368
+ ],
1369
+ [
1370
+ "h",
1371
+ "e"
1372
+ ],
1373
+ [
1374
+ "a",
1375
+ "me"
1376
+ ],
1377
+ [
1378
+ "Ġc",
1379
+ "l"
1380
+ ],
1381
+ [
1382
+ "i",
1383
+ "g"
1384
+ ],
1385
+ [
1386
+ "a",
1387
+ "c"
1388
+ ],
1389
+ [
1390
+ "ĠĠĠĠĠĠĠĠ",
1391
+ "ĠĠĠĠ"
1392
+ ],
1393
+ [
1394
+ "x",
1395
+ "t"
1396
+ ],
1397
+ [
1398
+ "te",
1399
+ "n"
1400
+ ],
1401
+ [
1402
+ "Ġcl",
1403
+ "ass"
1404
+ ],
1405
+ [
1406
+ "te",
1407
+ "xt"
1408
+ ],
1409
+ [
1410
+ "ad",
1411
+ "o"
1412
+ ],
1413
+ [
1414
+ "Ġ",
1415
+ "n"
1416
+ ],
1417
+ [
1418
+ "ĠÃ",
1419
+ "©"
1420
+ ],
1421
+ [
1422
+ "Ġ",
1423
+ "i"
1424
+ ],
1425
+ [
1426
+ "i",
1427
+ "v"
1428
+ ],
1429
+ [
1430
+ "\"",
1431
+ ">"
1432
+ ],
1433
+ [
1434
+ "Ġc",
1435
+ "o"
1436
+ ],
1437
+ [
1438
+ "a",
1439
+ "g"
1440
+ ],
1441
+ [
1442
+ "Ø",
1443
+ "§"
1444
+ ],
1445
+ [
1446
+ "a",
1447
+ "tion"
1448
+ ],
1449
+ [
1450
+ "Ġ",
1451
+ "w"
1452
+ ],
1453
+ [
1454
+ "Ġf",
1455
+ "or"
1456
+ ],
1457
+ [
1458
+ "N",
1459
+ "ame"
1460
+ ],
1461
+ [
1462
+ "te",
1463
+ "m"
1464
+ ],
1465
+ [
1466
+ "d",
1467
+ "e"
1468
+ ],
1469
+ [
1470
+ "Ġ",
1471
+ "in"
1472
+ ],
1473
+ [
1474
+ "u",
1475
+ "l"
1476
+ ],
1477
+ [
1478
+ "Ġclass",
1479
+ "Name"
1480
+ ],
1481
+ [
1482
+ "an",
1483
+ "t"
1484
+ ],
1485
+ [
1486
+ "is",
1487
+ "t"
1488
+ ],
1489
+ [
1490
+ "Ġp",
1491
+ "ro"
1492
+ ],
1493
+ [
1494
+ "le",
1495
+ "ment"
1496
+ ],
1497
+ [
1498
+ "Ġ",
1499
+ "h"
1500
+ ],
1501
+ [
1502
+ "Ã",
1503
+ "ª"
1504
+ ],
1505
+ [
1506
+ "ist",
1507
+ "ant"
1508
+ ],
1509
+ [
1510
+ "g",
1511
+ "ra"
1512
+ ],
1513
+ [
1514
+ "u",
1515
+ "c"
1516
+ ],
1517
+ [
1518
+ "Ġ",
1519
+ "="
1520
+ ],
1521
+ [
1522
+ "s",
1523
+ "e"
1524
+ ],
1525
+ [
1526
+ "Ġ",
1527
+ "o"
1528
+ ],
1529
+ [
1530
+ "Ġd",
1531
+ "e"
1532
+ ],
1533
+ [
1534
+ "us",
1535
+ "er"
1536
+ ],
1537
+ [
1538
+ "Ġt",
1539
+ "o"
1540
+ ],
1541
+ [
1542
+ "Ġ",
1543
+ "v"
1544
+ ],
1545
+ [
1546
+ "s",
1547
+ "t"
1548
+ ],
1549
+ [
1550
+ "Ġa",
1551
+ "s"
1552
+ ],
1553
+ [
1554
+ "i",
1555
+ "t"
1556
+ ],
1557
+ [
1558
+ "ass",
1559
+ "istant"
1560
+ ],
1561
+ [
1562
+ "s",
1563
+ "is"
1564
+ ],
1565
+ [
1566
+ "Ġc",
1567
+ "on"
1568
+ ],
1569
+ [
1570
+ "o",
1571
+ "l"
1572
+ ],
1573
+ [
1574
+ "i",
1575
+ "l"
1576
+ ],
1577
+ [
1578
+ "sis",
1579
+ "ten"
1580
+ ],
1581
+ [
1582
+ "a",
1583
+ "t"
1584
+ ],
1585
+ [
1586
+ "<",
1587
+ "/"
1588
+ ],
1589
+ [
1590
+ "u",
1591
+ "e"
1592
+ ],
1593
+ [
1594
+ "y",
1595
+ "s"
1596
+ ],
1597
+ [
1598
+ "Ġ",
1599
+ "I"
1600
+ ],
1601
+ [
1602
+ "Ġ",
1603
+ "b"
1604
+ ],
1605
+ [
1606
+ "te",
1607
+ "r"
1608
+ ],
1609
+ [
1610
+ "ys",
1611
+ "tem"
1612
+ ],
1613
+ [
1614
+ "Ù",
1615
+ "Ħ"
1616
+ ],
1617
+ [
1618
+ "d",
1619
+ "iv"
1620
+ ],
1621
+ [
1622
+ "oc",
1623
+ "al"
1624
+ ],
1625
+ [
1626
+ "Ġ",
1627
+ "T"
1628
+ ],
1629
+ [
1630
+ "Ġl",
1631
+ "ocal"
1632
+ ],
1633
+ [
1634
+ "Ġ",
1635
+ "U"
1636
+ ],
1637
+ [
1638
+ "ti",
1639
+ "l"
1640
+ ],
1641
+ [
1642
+ "p",
1643
+ "er"
1644
+ ],
1645
+ [
1646
+ "v",
1647
+ "e"
1648
+ ],
1649
+ [
1650
+ "s",
1651
+ "ystem"
1652
+ ],
1653
+ [
1654
+ "oc",
1655
+ "ê"
1656
+ ],
1657
+ [
1658
+ "ĠĠĠĠĠĠĠĠ",
1659
+ "ĠĠ"
1660
+ ],
1661
+ [
1662
+ "a",
1663
+ "te"
1664
+ ],
1665
+ [
1666
+ "d",
1667
+ "uc"
1668
+ ],
1669
+ [
1670
+ "ag",
1671
+ "e"
1672
+ ],
1673
+ [
1674
+ "Ġ<",
1675
+ "/"
1676
+ ],
1677
+ [
1678
+ "e",
1679
+ "t"
1680
+ ],
1681
+ [
1682
+ "mp",
1683
+ "lement"
1684
+ ],
1685
+ [
1686
+ "H",
1687
+ "T"
1688
+ ],
1689
+ [
1690
+ "V",
1691
+ "ocê"
1692
+ ],
1693
+ [
1694
+ "Ġ",
1695
+ "`"
1696
+ ],
1697
+ [
1698
+ "ig",
1699
+ "n"
1700
+ ],
1701
+ [
1702
+ "Ġas",
1703
+ "sisten"
1704
+ ],
1705
+ [
1706
+ "Ġassisten",
1707
+ "te"
1708
+ ],
1709
+ [
1710
+ "?",
1711
+ "<|"
1712
+ ],
1713
+ [
1714
+ "Ġ",
1715
+ "{"
1716
+ ],
1717
+ [
1718
+ "ĠÃ",
1719
+ "º"
1720
+ ],
1721
+ [
1722
+ "Ġ",
1723
+ "'"
1724
+ ],
1725
+ [
1726
+ "Ġe",
1727
+ "duc"
1728
+ ],
1729
+ [
1730
+ "i",
1731
+ "d"
1732
+ ],
1733
+ [
1734
+ "Ġú",
1735
+ "til"
1736
+ ],
1737
+ [
1738
+ "Ġeduc",
1739
+ "ado"
1740
+ ],
1741
+ [
1742
+ "M",
1743
+ "L"
1744
+ ],
1745
+ [
1746
+ "HT",
1747
+ "ML"
1748
+ ],
1749
+ [
1750
+ ")",
1751
+ ";"
1752
+ ],
1753
+ [
1754
+ "Ġt",
1755
+ "he"
1756
+ ],
1757
+ [
1758
+ "p",
1759
+ "p"
1760
+ ],
1761
+ [
1762
+ "e",
1763
+ "c"
1764
+ ],
1765
+ [
1766
+ "ĠI",
1767
+ "mplement"
1768
+ ],
1769
+ [
1770
+ "u",
1771
+ "r"
1772
+ ],
1773
+ [
1774
+ "Ġ",
1775
+ "re"
1776
+ ],
1777
+ [
1778
+ "Ġ",
1779
+ "}"
1780
+ ],
1781
+ [
1782
+ "gra",
1783
+ "y"
1784
+ ],
1785
+ [
1786
+ "Ġ",
1787
+ "("
1788
+ ],
1789
+ [
1790
+ "es",
1791
+ "s"
1792
+ ],
1793
+ [
1794
+ "k",
1795
+ "e"
1796
+ ],
1797
+ [
1798
+ "Ġ",
1799
+ "0"
1800
+ ],
1801
+ [
1802
+ "ta",
1803
+ "te"
1804
+ ],
1805
+ [
1806
+ "u",
1807
+ "n"
1808
+ ],
1809
+ [
1810
+ "ar",
1811
+ "k"
1812
+ ],
1813
+ [
1814
+ "Ã",
1815
+ "¡"
1816
+ ],
1817
+ [
1818
+ "ĠĠĠĠĠĠĠĠĠĠĠĠ",
1819
+ "ĠĠ"
1820
+ ],
1821
+ [
1822
+ "Ġ",
1823
+ "1"
1824
+ ],
1825
+ [
1826
+ "Ġpro",
1827
+ "per"
1828
+ ],
1829
+ [
1830
+ "c",
1831
+ "e"
1832
+ ],
1833
+ [
1834
+ "o",
1835
+ "s"
1836
+ ],
1837
+ [
1838
+ "Ġs",
1839
+ "t"
1840
+ ],
1841
+ [
1842
+ "es",
1843
+ "ign"
1844
+ ],
1845
+ [
1846
+ "c",
1847
+ "tion"
1848
+ ],
1849
+ [
1850
+ "Ġ",
1851
+ "C"
1852
+ ],
1853
+ [
1854
+ "R",
1855
+ "e"
1856
+ ],
1857
+ [
1858
+ "ĠĠĠĠ",
1859
+ "ĠĠ"
1860
+ ],
1861
+ [
1862
+ "Ù",
1863
+ "ħ"
1864
+ ],
1865
+ [
1866
+ "i",
1867
+ "z"
1868
+ ],
1869
+ [
1870
+ "h",
1871
+ "t"
1872
+ ],
1873
+ [
1874
+ "Ġ",
1875
+ "HTML"
1876
+ ],
1877
+ [
1878
+ "Ġe",
1879
+ "x"
1880
+ ],
1881
+ [
1882
+ "ا",
1883
+ "ÙĦ"
1884
+ ],
1885
+ [
1886
+ "Ġ",
1887
+ "D"
1888
+ ],
1889
+ [
1890
+ "Ġ",
1891
+ "text"
1892
+ ],
1893
+ [
1894
+ "o",
1895
+ "de"
1896
+ ],
1897
+ [
1898
+ "l",
1899
+ "o"
1900
+ ],
1901
+ [
1902
+ "Ø",
1903
+ "ª"
1904
+ ],
1905
+ [
1906
+ "v",
1907
+ "er"
1908
+ ],
1909
+ [
1910
+ "Ù",
1911
+ "Ĭ"
1912
+ ],
1913
+ [
1914
+ "Ġ",
1915
+ "q"
1916
+ ],
1917
+ [
1918
+ "l",
1919
+ "y"
1920
+ ],
1921
+ [
1922
+ "t",
1923
+ "h"
1924
+ ],
1925
+ [
1926
+ "a",
1927
+ "b"
1928
+ ],
1929
+ [
1930
+ "£",
1931
+ "o"
1932
+ ],
1933
+ [
1934
+ "Ã",
1935
+ "£o"
1936
+ ],
1937
+ [
1938
+ "c",
1939
+ "ri"
1940
+ ],
1941
+ [
1942
+ "Ġcon",
1943
+ "st"
1944
+ ],
1945
+ [
1946
+ "t",
1947
+ "on"
1948
+ ],
1949
+ [
1950
+ "i",
1951
+ "te"
1952
+ ],
1953
+ [
1954
+ "Ġ",
1955
+ "2"
1956
+ ],
1957
+ [
1958
+ "Ġus",
1959
+ "e"
1960
+ ],
1961
+ [
1962
+ "ro",
1963
+ "u"
1964
+ ],
1965
+ [
1966
+ "Ã",
1967
+ "§"
1968
+ ],
1969
+ [
1970
+ "ĠĠĠĠĠĠĠĠ",
1971
+ "ĠĠĠĠĠĠĠĠ"
1972
+ ],
1973
+ [
1974
+ "Ġ",
1975
+ "Re"
1976
+ ],
1977
+ [
1978
+ "cri",
1979
+ "p"
1980
+ ],
1981
+ [
1982
+ "ac",
1983
+ "t"
1984
+ ],
1985
+ [
1986
+ "Ġ",
1987
+ "A"
1988
+ ],
1989
+ [
1990
+ "y",
1991
+ "p"
1992
+ ],
1993
+ [
1994
+ "Ġc",
1995
+ "le"
1996
+ ],
1997
+ [
1998
+ "Ġ",
1999
+ "S"
2000
+ ],
2001
+ [
2002
+ "Ġ",
2003
+ "on"
2004
+ ],
2005
+ [
2006
+ "e",
2007
+ "ed"
2008
+ ],
2009
+ [
2010
+ "o",
2011
+ "ut"
2012
+ ],
2013
+ [
2014
+ "b",
2015
+ "g"
2016
+ ],
2017
+ [
2018
+ "Ġp",
2019
+ "ar"
2020
+ ],
2021
+ [
2022
+ "Ġ=",
2023
+ ">"
2024
+ ],
2025
+ [
2026
+ "a",
2027
+ "v"
2028
+ ],
2029
+ [
2030
+ "o",
2031
+ "m"
2032
+ ],
2033
+ [
2034
+ "b",
2035
+ "ut"
2036
+ ],
2037
+ [
2038
+ "Ġ",
2039
+ "P"
2040
+ ],
2041
+ [
2042
+ "Ġq",
2043
+ "ue"
2044
+ ],
2045
+ [
2046
+ "es",
2047
+ "t"
2048
+ ],
2049
+ [
2050
+ "e",
2051
+ "l"
2052
+ ],
2053
+ [
2054
+ "ĠU",
2055
+ "se"
2056
+ ],
2057
+ [
2058
+ "on",
2059
+ "t"
2060
+ ],
2061
+ [
2062
+ "d",
2063
+ "er"
2064
+ ],
2065
+ [
2066
+ "Ġd",
2067
+ "a"
2068
+ ],
2069
+ [
2070
+ "`",
2071
+ "`"
2072
+ ],
2073
+ [
2074
+ "Ġco",
2075
+ "m"
2076
+ ],
2077
+ [
2078
+ "Ġ",
2079
+ "اÙĦ"
2080
+ ],
2081
+ [
2082
+ "m",
2083
+ "a"
2084
+ ],
2085
+ [
2086
+ "ĠRe",
2087
+ "act"
2088
+ ],
2089
+ [
2090
+ "u",
2091
+ "al"
2092
+ ],
2093
+ [
2094
+ "Ġ",
2095
+ "g"
2096
+ ],
2097
+ [
2098
+ "Ġ",
2099
+ "E"
2100
+ ],
2101
+ [
2102
+ "=",
2103
+ "{"
2104
+ ],
2105
+ [
2106
+ "Ġ",
2107
+ "en"
2108
+ ],
2109
+ [
2110
+ "rou",
2111
+ "nd"
2112
+ ],
2113
+ [
2114
+ "Ġd",
2115
+ "ark"
2116
+ ],
2117
+ [
2118
+ "an",
2119
+ "d"
2120
+ ],
2121
+ [
2122
+ "Ġi",
2123
+ "f"
2124
+ ],
2125
+ [
2126
+ "crip",
2127
+ "t"
2128
+ ],
2129
+ [
2130
+ "or",
2131
+ "t"
2132
+ ],
2133
+ [
2134
+ "Ġa",
2135
+ "pp"
2136
+ ],
2137
+ [
2138
+ "Ġ",
2139
+ "r"
2140
+ ],
2141
+ [
2142
+ "but",
2143
+ "ton"
2144
+ ],
2145
+ [
2146
+ "f",
2147
+ "ul"
2148
+ ],
2149
+ [
2150
+ "Ġa",
2151
+ "l"
2152
+ ],
2153
+ [
2154
+ "g",
2155
+ "in"
2156
+ ],
2157
+ [
2158
+ "it",
2159
+ "y"
2160
+ ],
2161
+ [
2162
+ "Ġus",
2163
+ "er"
2164
+ ],
2165
+ [
2166
+ "Ġs",
2167
+ "tate"
2168
+ ],
2169
+ [
2170
+ "Ġcle",
2171
+ "ar"
2172
+ ],
2173
+ [
2174
+ "a",
2175
+ "y"
2176
+ ],
2177
+ [
2178
+ "re",
2179
+ "ate"
2180
+ ],
2181
+ [
2182
+ "'",
2183
+ ","
2184
+ ],
2185
+ [
2186
+ "l",
2187
+ "ic"
2188
+ ],
2189
+ [
2190
+ "c",
2191
+ "h"
2192
+ ],
2193
+ [
2194
+ "n",
2195
+ "s"
2196
+ ],
2197
+ [
2198
+ "u",
2199
+ "re"
2200
+ ],
2201
+ [
2202
+ "i",
2203
+ "m"
2204
+ ],
2205
+ [
2206
+ "Ġum",
2207
+ "a"
2208
+ ],
2209
+ [
2210
+ "(",
2211
+ ")"
2212
+ ],
2213
+ [
2214
+ "Ġs",
2215
+ "et"
2216
+ ],
2217
+ [
2218
+ "Ġ",
2219
+ "is"
2220
+ ],
2221
+ [
2222
+ "un",
2223
+ "ction"
2224
+ ],
2225
+ [
2226
+ "o",
2227
+ "g"
2228
+ ],
2229
+ [
2230
+ "Ġ",
2231
+ "M"
2232
+ ],
2233
+ [
2234
+ "Ġw",
2235
+ "e"
2236
+ ],
2237
+ [
2238
+ "Ġa",
2239
+ "n"
2240
+ ],
2241
+ [
2242
+ "*",
2243
+ "*"
2244
+ ],
2245
+ [
2246
+ "h",
2247
+ "an"
2248
+ ],
2249
+ [
2250
+ "Ġt",
2251
+ "h"
2252
+ ],
2253
+ [
2254
+ "Ø",
2255
+ "©"
2256
+ ],
2257
+ [
2258
+ "o",
2259
+ "o"
2260
+ ],
2261
+ [
2262
+ "Ġe",
2263
+ "m"
2264
+ ],
2265
+ [
2266
+ "ti",
2267
+ "ve"
2268
+ ],
2269
+ [
2270
+ "o",
2271
+ "u"
2272
+ ],
2273
+ [
2274
+ "q",
2275
+ "u"
2276
+ ],
2277
+ [
2278
+ "Ġn",
2279
+ "eed"
2280
+ ],
2281
+ [
2282
+ "yp",
2283
+ "e"
2284
+ ],
2285
+ [
2286
+ "Ġv",
2287
+ "is"
2288
+ ],
2289
+ [
2290
+ "ا",
2291
+ "Ø"
2292
+ ],
2293
+ [
2294
+ "s",
2295
+ "i"
2296
+ ],
2297
+ [
2298
+ "Ġd",
2299
+ "esign"
2300
+ ],
2301
+ [
2302
+ "k",
2303
+ "s"
2304
+ ],
2305
+ [
2306
+ "oc",
2307
+ "us"
2308
+ ],
2309
+ [
2310
+ "S",
2311
+ "S"
2312
+ ],
2313
+ [
2314
+ "Ġneed",
2315
+ "ed"
2316
+ ],
2317
+ [
2318
+ "it",
2319
+ "h"
2320
+ ],
2321
+ [
2322
+ "Ġpar",
2323
+ "a"
2324
+ ],
2325
+ [
2326
+ "Ġvis",
2327
+ "ual"
2328
+ ],
2329
+ [
2330
+ "u",
2331
+ "d"
2332
+ ],
2333
+ [
2334
+ "l",
2335
+ "in"
2336
+ ],
2337
+ [
2338
+ "or",
2339
+ "m"
2340
+ ],
2341
+ [
2342
+ "c",
2343
+ "i"
2344
+ ],
2345
+ [
2346
+ "Ù",
2347
+ "Ī"
2348
+ ],
2349
+ [
2350
+ "ti",
2351
+ "c"
2352
+ ],
2353
+ [
2354
+ "Ġv",
2355
+ "al"
2356
+ ],
2357
+ [
2358
+ "Ġ",
2359
+ "Ø"
2360
+ ],
2361
+ [
2362
+ "Ġw",
2363
+ "ith"
2364
+ ],
2365
+ [
2366
+ "t",
2367
+ "s"
2368
+ ],
2369
+ [
2370
+ "Ġf",
2371
+ "ont"
2372
+ ],
2373
+ [
2374
+ "in",
2375
+ "d"
2376
+ ],
2377
+ [
2378
+ "Ġs",
2379
+ "u"
2380
+ ],
2381
+ [
2382
+ "ac",
2383
+ "e"
2384
+ ],
2385
+ [
2386
+ "Ġp",
2387
+ "á"
2388
+ ],
2389
+ [
2390
+ "Ġpá",
2391
+ "gin"
2392
+ ],
2393
+ [
2394
+ "r",
2395
+ "or"
2396
+ ],
2397
+ [
2398
+ "ĠĠ",
2399
+ "Ġ"
2400
+ ],
2401
+ [
2402
+ "Ġwe",
2403
+ "b"
2404
+ ],
2405
+ [
2406
+ "ç",
2407
+ "ão"
2408
+ ],
2409
+ [
2410
+ "ol",
2411
+ "d"
2412
+ ],
2413
+ [
2414
+ "o",
2415
+ "ver"
2416
+ ],
2417
+ [
2418
+ "ĠD",
2419
+ "esign"
2420
+ ],
2421
+ [
2422
+ "Ġr",
2423
+ "es"
2424
+ ],
2425
+ [
2426
+ "f",
2427
+ "f"
2428
+ ],
2429
+ [
2430
+ "m",
2431
+ "l"
2432
+ ],
2433
+ [
2434
+ "Ġ",
2435
+ "["
2436
+ ],
2437
+ [
2438
+ "Ù",
2439
+ "Ĩ"
2440
+ ],
2441
+ [
2442
+ "i",
2443
+ "le"
2444
+ ],
2445
+ [
2446
+ "h",
2447
+ "ite"
2448
+ ],
2449
+ [
2450
+ "S",
2451
+ "cript"
2452
+ ],
2453
+ [
2454
+ "on",
2455
+ "s"
2456
+ ],
2457
+ [
2458
+ "ri",
2459
+ "d"
2460
+ ],
2461
+ [
2462
+ "Ġstate",
2463
+ "s"
2464
+ ],
2465
+ [
2466
+ "Ġ",
2467
+ "F"
2468
+ ],
2469
+ [
2470
+ "iv",
2471
+ "e"
2472
+ ],
2473
+ [
2474
+ "e",
2475
+ "w"
2476
+ ],
2477
+ [
2478
+ "Ġf",
2479
+ "ocus"
2480
+ ],
2481
+ [
2482
+ "Ġs",
2483
+ "h"
2484
+ ],
2485
+ [
2486
+ "l",
2487
+ "ing"
2488
+ ],
2489
+ [
2490
+ "round",
2491
+ "ed"
2492
+ ],
2493
+ [
2494
+ "r",
2495
+ "ing"
2496
+ ],
2497
+ [
2498
+ "ti",
2499
+ "f"
2500
+ ],
2501
+ [
2502
+ "Ġ",
2503
+ "/"
2504
+ ],
2505
+ [
2506
+ "ten",
2507
+ "t"
2508
+ ],
2509
+ [
2510
+ "Ġ",
2511
+ "rounded"
2512
+ ],
2513
+ [
2514
+ "Ġf",
2515
+ "unction"
2516
+ ],
2517
+ [
2518
+ "r",
2519
+ "an"
2520
+ ],
2521
+ [
2522
+ "ĠĠĠĠĠĠĠĠ",
2523
+ "ĠĠĠĠĠĠĠĠĠĠ"
2524
+ ],
2525
+ [
2526
+ "p",
2527
+ "l"
2528
+ ],
2529
+ [
2530
+ "a",
2531
+ "il"
2532
+ ],
2533
+ [
2534
+ "]",
2535
+ ","
2536
+ ],
2537
+ [
2538
+ "Ġda",
2539
+ "ta"
2540
+ ],
2541
+ [
2542
+ "le",
2543
+ "x"
2544
+ ],
2545
+ [
2546
+ "u",
2547
+ "age"
2548
+ ],
2549
+ [
2550
+ "b",
2551
+ "l"
2552
+ ],
2553
+ [
2554
+ "Ġs",
2555
+ "e"
2556
+ ],
2557
+ [
2558
+ "w",
2559
+ "ind"
2560
+ ],
2561
+ [
2562
+ "ĠU",
2563
+ "I"
2564
+ ],
2565
+ [
2566
+ "ail",
2567
+ "wind"
2568
+ ],
2569
+ [
2570
+ "il",
2571
+ "l"
2572
+ ],
2573
+ [
2574
+ "b",
2575
+ "o"
2576
+ ],
2577
+ [
2578
+ "Ġh",
2579
+ "and"
2580
+ ],
2581
+ [
2582
+ "'",
2583
+ ";"
2584
+ ],
2585
+ [
2586
+ "ro",
2587
+ "ke"
2588
+ ],
2589
+ [
2590
+ "ĠT",
2591
+ "ailwind"
2592
+ ],
2593
+ [
2594
+ "Ġst",
2595
+ "roke"
2596
+ ],
2597
+ [
2598
+ "Ġm",
2599
+ "o"
2600
+ ],
2601
+ [
2602
+ "Ġ",
2603
+ "er"
2604
+ ],
2605
+ [
2606
+ ">",
2607
+ "<"
2608
+ ],
2609
+ [
2610
+ "Ġfunction",
2611
+ "al"
2612
+ ],
2613
+ [
2614
+ "C",
2615
+ "on"
2616
+ ],
2617
+ [
2618
+ "Ġus",
2619
+ "ing"
2620
+ ],
2621
+ [
2622
+ "c",
2623
+ "ess"
2624
+ ],
2625
+ [
2626
+ "Ġe",
2627
+ "lement"
2628
+ ],
2629
+ [
2630
+ "en",
2631
+ "ter"
2632
+ ],
2633
+ [
2634
+ "ay",
2635
+ "out"
2636
+ ],
2637
+ [
2638
+ "c",
2639
+ "ol"
2640
+ ],
2641
+ [
2642
+ "w",
2643
+ "hite"
2644
+ ],
2645
+ [
2646
+ "l",
2647
+ "g"
2648
+ ],
2649
+ [
2650
+ "i",
2651
+ "b"
2652
+ ],
2653
+ [
2654
+ "c",
2655
+ "enter"
2656
+ ],
2657
+ [
2658
+ "Ø",
2659
+ "¯"
2660
+ ],
2661
+ [
2662
+ "Ġc",
2663
+ "reate"
2664
+ ],
2665
+ [
2666
+ "S",
2667
+ "tate"
2668
+ ],
2669
+ [
2670
+ "t",
2671
+ "o"
2672
+ ],
2673
+ [
2674
+ "Ġi",
2675
+ "m"
2676
+ ],
2677
+ [
2678
+ "'",
2679
+ "s"
2680
+ ],
2681
+ [
2682
+ "en",
2683
+ "s"
2684
+ ],
2685
+ [
2686
+ "Ġ`",
2687
+ "``"
2688
+ ],
2689
+ [
2690
+ "ar",
2691
+ "ch"
2692
+ ],
2693
+ [
2694
+ "Ġco",
2695
+ "mp"
2696
+ ],
2697
+ [
2698
+ "i",
2699
+ "f"
2700
+ ],
2701
+ [
2702
+ "Ġ",
2703
+ "or"
2704
+ ],
2705
+ [
2706
+ "o",
2707
+ "w"
2708
+ ],
2709
+ [
2710
+ "ar",
2711
+ "d"
2712
+ ],
2713
+ [
2714
+ "(",
2715
+ "'"
2716
+ ],
2717
+ [
2718
+ "],",
2719
+ "["
2720
+ ],
2721
+ [
2722
+ "p",
2723
+ "s"
2724
+ ],
2725
+ [
2726
+ "oc",
2727
+ "k"
2728
+ ],
2729
+ [
2730
+ "Ġo",
2731
+ "f"
2732
+ ],
2733
+ [
2734
+ "Ø",
2735
+ "±"
2736
+ ],
2737
+ [
2738
+ "Ġb",
2739
+ "e"
2740
+ ],
2741
+ [
2742
+ "Ġer",
2743
+ "ror"
2744
+ ],
2745
+ [
2746
+ "ado",
2747
+ "w"
2748
+ ],
2749
+ [
2750
+ "u",
2751
+ "ra"
2752
+ ],
2753
+ [
2754
+ "ac",
2755
+ "k"
2756
+ ],
2757
+ [
2758
+ "p",
2759
+ "x"
2760
+ ],
2761
+ [
2762
+ "i",
2763
+ "al"
2764
+ ],
2765
+ [
2766
+ "Ġi",
2767
+ "d"
2768
+ ],
2769
+ [
2770
+ "Ġi",
2771
+ "mp"
2772
+ ],
2773
+ [
2774
+ "av",
2775
+ "ig"
2776
+ ],
2777
+ [
2778
+ "Ġin",
2779
+ "ter"
2780
+ ],
2781
+ [
2782
+ "f",
2783
+ "orm"
2784
+ ],
2785
+ [
2786
+ "/",
2787
+ "/"
2788
+ ],
2789
+ [
2790
+ "t",
2791
+ "le"
2792
+ ],
2793
+ [
2794
+ "avig",
2795
+ "ation"
2796
+ ],
2797
+ [
2798
+ "1",
2799
+ "2"
2800
+ ],
2801
+ [
2802
+ "Ġfor",
2803
+ "m"
2804
+ ],
2805
+ [
2806
+ "Ġco",
2807
+ "de"
2808
+ ],
2809
+ [
2810
+ "ation",
2811
+ "s"
2812
+ ],
2813
+ [
2814
+ "Ġen",
2815
+ "han"
2816
+ ],
2817
+ [
2818
+ "ur",
2819
+ "n"
2820
+ ],
2821
+ [
2822
+ "=",
2823
+ "'"
2824
+ ],
2825
+ [
2826
+ "g",
2827
+ "rid"
2828
+ ],
2829
+ [
2830
+ "e",
2831
+ "mp"
2832
+ ],
2833
+ [
2834
+ "Ġn",
2835
+ "o"
2836
+ ],
2837
+ [
2838
+ "Ġ",
2839
+ "y"
2840
+ ],
2841
+ [
2842
+ ":",
2843
+ "//"
2844
+ ],
2845
+ [
2846
+ "lin",
2847
+ "e"
2848
+ ],
2849
+ [
2850
+ "5",
2851
+ "00"
2852
+ ],
2853
+ [
2854
+ "3",
2855
+ "00"
2856
+ ],
2857
+ [
2858
+ "Ã",
2859
+ "Ń"
2860
+ ],
2861
+ [
2862
+ "s",
2863
+ "v"
2864
+ ],
2865
+ [
2866
+ "al",
2867
+ "l"
2868
+ ],
2869
+ [
2870
+ "t",
2871
+ "urn"
2872
+ ],
2873
+ [
2874
+ "Ġ/",
2875
+ ">"
2876
+ ],
2877
+ [
2878
+ ")",
2879
+ "}"
2880
+ ],
2881
+ [
2882
+ "Ġh",
2883
+ "over"
2884
+ ],
2885
+ [
2886
+ "on",
2887
+ "e"
2888
+ ],
2889
+ [
2890
+ "sv",
2891
+ "g"
2892
+ ],
2893
+ [
2894
+ "Ġpágin",
2895
+ "a"
2896
+ ],
2897
+ [
2898
+ "ar",
2899
+ "g"
2900
+ ],
2901
+ [
2902
+ "Ġs",
2903
+ "er"
2904
+ ],
2905
+ [
2906
+ "c",
2907
+ "re"
2908
+ ],
2909
+ [
2910
+ "d",
2911
+ "d"
2912
+ ],
2913
+ [
2914
+ "Ġ}",
2915
+ ","
2916
+ ],
2917
+ [
2918
+ "Ġres",
2919
+ "p"
2920
+ ],
2921
+ [
2922
+ "b",
2923
+ "er"
2924
+ ],
2925
+ [
2926
+ "M",
2927
+ "ode"
2928
+ ],
2929
+ [
2930
+ "x",
2931
+ "l"
2932
+ ],
2933
+ [
2934
+ "u",
2935
+ "i"
2936
+ ],
2937
+ [
2938
+ "Ġ",
2939
+ "j"
2940
+ ],
2941
+ [
2942
+ "Ġm",
2943
+ "b"
2944
+ ],
2945
+ [
2946
+ "p",
2947
+ "ut"
2948
+ ],
2949
+ [
2950
+ "ig",
2951
+ "ht"
2952
+ ],
2953
+ [
2954
+ "Ġl",
2955
+ "ayout"
2956
+ ],
2957
+ [
2958
+ "Ġsu",
2959
+ "b"
2960
+ ],
2961
+ [
2962
+ "6",
2963
+ "00"
2964
+ ],
2965
+ [
2966
+ "Ġt",
2967
+ "ran"
2968
+ ],
2969
+ [
2970
+ "Ġth",
2971
+ "at"
2972
+ ],
2973
+ [
2974
+ "ec",
2975
+ "t"
2976
+ ],
2977
+ [
2978
+ "tion",
2979
+ "s"
2980
+ ],
2981
+ [
2982
+ "ت",
2983
+ "Ø"
2984
+ ],
2985
+ [
2986
+ "Ġa",
2987
+ "re"
2988
+ ],
2989
+ [
2990
+ "bl",
2991
+ "ue"
2992
+ ],
2993
+ [
2994
+ "Ù",
2995
+ "Ĥ"
2996
+ ],
2997
+ [
2998
+ "ab",
2999
+ "el"
3000
+ ],
3001
+ [
3002
+ "Ġal",
3003
+ "l"
3004
+ ],
3005
+ [
3006
+ "te",
3007
+ "ra"
3008
+ ],
3009
+ [
3010
+ "lic",
3011
+ "k"
3012
+ ],
3013
+ [
3014
+ "Ġa",
3015
+ "t"
3016
+ ],
3017
+ [
3018
+ "or",
3019
+ "der"
3020
+ ],
3021
+ [
3022
+ "7",
3023
+ "00"
3024
+ ],
3025
+ [
3026
+ "Ġa",
3027
+ "r"
3028
+ ],
3029
+ [
3030
+ "c",
3031
+ "l"
3032
+ ],
3033
+ [
3034
+ "ul",
3035
+ "t"
3036
+ ],
3037
+ [
3038
+ "i",
3039
+ "r"
3040
+ ],
3041
+ [
3042
+ "om",
3043
+ "o"
3044
+ ],
3045
+ [
3046
+ "Ġ}",
3047
+ ";"
3048
+ ],
3049
+ [
3050
+ "r",
3051
+ "ess"
3052
+ ],
3053
+ [
3054
+ "at",
3055
+ "h"
3056
+ ],
3057
+ [
3058
+ "te",
3059
+ "s"
3060
+ ],
3061
+ [
3062
+ "a",
3063
+ "p"
3064
+ ],
3065
+ [
3066
+ "ar",
3067
+ "i"
3068
+ ],
3069
+ [
3070
+ "Ġ",
3071
+ "J"
3072
+ ],
3073
+ [
3074
+ "Ġ",
3075
+ "**"
3076
+ ],
3077
+ [
3078
+ "b",
3079
+ "ack"
3080
+ ],
3081
+ [
3082
+ "ark",
3083
+ "Mode"
3084
+ ],
3085
+ [
3086
+ "Ø",
3087
+ "¹"
3088
+ ],
3089
+ [
3090
+ "ĠE",
3091
+ "ns"
3092
+ ],
3093
+ [
3094
+ "Ġtran",
3095
+ "si"
3096
+ ],
3097
+ [
3098
+ "ht",
3099
+ "t"
3100
+ ],
3101
+ [
3102
+ "c",
3103
+ "t"
3104
+ ],
3105
+ [
3106
+ "d",
3107
+ "ic"
3108
+ ],
3109
+ [
3110
+ "Ġp",
3111
+ "re"
3112
+ ],
3113
+ [
3114
+ "ĠEns",
3115
+ "ure"
3116
+ ],
3117
+ [
3118
+ "Ġre",
3119
+ "turn"
3120
+ ],
3121
+ [
3122
+ "Ġn",
3123
+ "avigation"
3124
+ ],
3125
+ [
3126
+ "=",
3127
+ "="
3128
+ ],
3129
+ [
3130
+ "Ġex",
3131
+ "p"
3132
+ ],
3133
+ [
3134
+ "Ġf",
3135
+ "lex"
3136
+ ],
3137
+ [
3138
+ "c",
3139
+ "o"
3140
+ ],
3141
+ [
3142
+ "C",
3143
+ "SS"
3144
+ ],
3145
+ [
3146
+ "S",
3147
+ "t"
3148
+ ],
3149
+ [
3150
+ "en",
3151
+ "ce"
3152
+ ],
3153
+ [
3154
+ "iz",
3155
+ "e"
3156
+ ],
3157
+ [
3158
+ "n",
3159
+ "one"
3160
+ ],
3161
+ [
3162
+ "Ġm",
3163
+ "ode"
3164
+ ],
3165
+ [
3166
+ "Ġ",
3167
+ "x"
3168
+ ],
3169
+ [
3170
+ "à",
3171
+ "¦"
3172
+ ],
3173
+ [
3174
+ "Ġuse",
3175
+ "State"
3176
+ ],
3177
+ [
3178
+ "ful",
3179
+ "l"
3180
+ ],
3181
+ [
3182
+ "ad",
3183
+ "ing"
3184
+ ],
3185
+ [
3186
+ "Ġhand",
3187
+ "ling"
3188
+ ],
3189
+ [
3190
+ "emp",
3191
+ "lo"
3192
+ ],
3193
+ [
3194
+ "Ġde",
3195
+ "f"
3196
+ ],
3197
+ [
3198
+ "Ġ",
3199
+ "N"
3200
+ ],
3201
+ [
3202
+ "ĠA",
3203
+ "pp"
3204
+ ],
3205
+ [
3206
+ "ag",
3207
+ "es"
3208
+ ],
3209
+ [
3210
+ "v",
3211
+ "ic"
3212
+ ],
3213
+ [
3214
+ "il",
3215
+ "ity"
3216
+ ],
3217
+ [
3218
+ "Ġsh",
3219
+ "adow"
3220
+ ],
3221
+ [
3222
+ "b",
3223
+ "old"
3224
+ ],
3225
+ [
3226
+ "a",
3227
+ "m"
3228
+ ],
3229
+ [
3230
+ "tif",
3231
+ "ic"
3232
+ ],
3233
+ [
3234
+ "v",
3235
+ "o"
3236
+ ],
3237
+ [
3238
+ "Ġa",
3239
+ "p"
3240
+ ],
3241
+ [
3242
+ "Con",
3243
+ "tent"
3244
+ ],
3245
+ [
3246
+ "-",
3247
+ "."
3248
+ ],
3249
+ [
3250
+ "Ġ",
3251
+ "3"
3252
+ ],
3253
+ [
3254
+ "ĠC",
3255
+ "SS"
3256
+ ],
3257
+ [
3258
+ "an",
3259
+ "g"
3260
+ ],
3261
+ [
3262
+ "Ġ",
3263
+ "ke"
3264
+ ],
3265
+ [
3266
+ "as",
3267
+ "e"
3268
+ ],
3269
+ [
3270
+ "Ġw",
3271
+ "h"
3272
+ ],
3273
+ [
3274
+ "ĠI",
3275
+ "n"
3276
+ ],
3277
+ [
3278
+ "ado",
3279
+ "s"
3280
+ ],
3281
+ [
3282
+ "Ġval",
3283
+ "id"
3284
+ ],
3285
+ [
3286
+ "n",
3287
+ "ci"
3288
+ ],
3289
+ [
3290
+ "C",
3291
+ "omo"
3292
+ ],
3293
+ [
3294
+ "Ġ",
3295
+ "est"
3296
+ ],
3297
+ [
3298
+ ">",
3299
+ "`"
3300
+ ],
3301
+ [
3302
+ "Ġ",
3303
+ "L"
3304
+ ],
3305
+ [
3306
+ "ur",
3307
+ "r"
3308
+ ],
3309
+ [
3310
+ "Ġf",
3311
+ "ile"
3312
+ ],
3313
+ [
3314
+ "a",
3315
+ "ta"
3316
+ ],
3317
+ [
3318
+ "Ġcon",
3319
+ "te"
3320
+ ],
3321
+ [
3322
+ "Ġa",
3323
+ "c"
3324
+ ],
3325
+ [
3326
+ "1",
3327
+ "4"
3328
+ ],
3329
+ [
3330
+ "id",
3331
+ "th"
3332
+ ],
3333
+ [
3334
+ "urr",
3335
+ "ent"
3336
+ ],
3337
+ [
3338
+ "ht",
3339
+ "ml"
3340
+ ],
3341
+ [
3342
+ "Ġco",
3343
+ "l"
3344
+ ],
3345
+ [
3346
+ "ro",
3347
+ "m"
3348
+ ],
3349
+ [
3350
+ "Ġon",
3351
+ "C"
3352
+ ],
3353
+ [
3354
+ "g",
3355
+ "e"
3356
+ ],
3357
+ [
3358
+ "ad",
3359
+ "a"
3360
+ ],
3361
+ [
3362
+ "Ġp",
3363
+ "er"
3364
+ ],
3365
+ [
3366
+ "ype",
3367
+ "Script"
3368
+ ],
3369
+ [
3370
+ "ace",
3371
+ "h"
3372
+ ],
3373
+ [
3374
+ "Ġ",
3375
+ "me"
3376
+ ],
3377
+ [
3378
+ "he",
3379
+ "ad"
3380
+ ],
3381
+ [
3382
+ "ê",
3383
+ "nci"
3384
+ ],
3385
+ [
3386
+ "Ù",
3387
+ "ĥ"
3388
+ ],
3389
+ [
3390
+ "text",
3391
+ "Content"
3392
+ ],
3393
+ [
3394
+ ".",
3395
+ "."
3396
+ ],
3397
+ [
3398
+ "r",
3399
+ "ut"
3400
+ ],
3401
+ [
3402
+ "Ġest",
3403
+ "rut"
3404
+ ],
3405
+ [
3406
+ "Ġ",
3407
+ "ic"
3408
+ ],
3409
+ [
3410
+ "ĠT",
3411
+ "ypeScript"
3412
+ ],
3413
+ [
3414
+ "Ù",
3415
+ "ģ"
3416
+ ],
3417
+ [
3418
+ "l",
3419
+ "es"
3420
+ ],
3421
+ [
3422
+ "Ġm",
3423
+ "a"
3424
+ ],
3425
+ [
3426
+ "he",
3427
+ "me"
3428
+ ],
3429
+ [
3430
+ "s",
3431
+ "ite"
3432
+ ],
3433
+ [
3434
+ "ts",
3435
+ "x"
3436
+ ],
3437
+ [
3438
+ "ab",
3439
+ "le"
3440
+ ],
3441
+ [
3442
+ "t",
3443
+ "ui"
3444
+ ],
3445
+ [
3446
+ "\">",
3447
+ "</"
3448
+ ],
3449
+ [
3450
+ "h",
3451
+ "a"
3452
+ ],
3453
+ [
3454
+ "Ġpro",
3455
+ "gra"
3456
+ ],
3457
+ [
3458
+ "l",
3459
+ "i"
3460
+ ],
3461
+ [
3462
+ "av",
3463
+ "a"
3464
+ ],
3465
+ [
3466
+ "Ġ",
3467
+ "Ùħ"
3468
+ ],
3469
+ [
3470
+ "te",
3471
+ "d"
3472
+ ],
3473
+ [
3474
+ "i",
3475
+ "mp"
3476
+ ],
3477
+ [
3478
+ "Ġ2",
3479
+ "4"
3480
+ ],
3481
+ [
3482
+ "ava",
3483
+ "Script"
3484
+ ],
3485
+ [
3486
+ "le",
3487
+ "t"
3488
+ ],
3489
+ [
3490
+ "ĠĠĠĠĠĠĠĠ",
3491
+ "ĠĠĠĠĠĠĠĠĠĠĠĠ"
3492
+ ],
3493
+ [
3494
+ "Ġweb",
3495
+ "site"
3496
+ ],
3497
+ [
3498
+ "o",
3499
+ "st"
3500
+ ],
3501
+ [
3502
+ "ĠاÙĦ",
3503
+ "Ø"
3504
+ ],
3505
+ [
3506
+ "D",
3507
+ "arkMode"
3508
+ ],
3509
+ [
3510
+ "o",
3511
+ "ading"
3512
+ ],
3513
+ [
3514
+ "t",
3515
+ "ul"
3516
+ ],
3517
+ [
3518
+ "ÃŃ",
3519
+ "tul"
3520
+ ],
3521
+ [
3522
+ "s",
3523
+ "p"
3524
+ ],
3525
+ [
3526
+ "}",
3527
+ "</"
3528
+ ],
3529
+ [
3530
+ "Ġd",
3531
+ "o"
3532
+ ],
3533
+ [
3534
+ "w",
3535
+ "or"
3536
+ ],
3537
+ [
3538
+ "oo",
3539
+ "ks"
3540
+ ],
3541
+ [
3542
+ "re",
3543
+ "at"
3544
+ ],
3545
+ [
3546
+ "um",
3547
+ "ber"
3548
+ ],
3549
+ [
3550
+ "Ġs",
3551
+ "cre"
3552
+ ],
3553
+ [
3554
+ "um",
3555
+ "ent"
3556
+ ],
3557
+ [
3558
+ "Ġs",
3559
+ "p"
3560
+ ],
3561
+ [
3562
+ "Ġ",
3563
+ ">"
3564
+ ],
3565
+ [
3566
+ "Ġim",
3567
+ "age"
3568
+ ],
3569
+ [
3570
+ "Ġs",
3571
+ "imp"
3572
+ ],
3573
+ [
3574
+ "or",
3575
+ "s"
3576
+ ],
3577
+ [
3578
+ "oc",
3579
+ "ument"
3580
+ ],
3581
+ [
3582
+ "'",
3583
+ ");"
3584
+ ],
3585
+ [
3586
+ "c",
3587
+ "or"
3588
+ ],
3589
+ [
3590
+ "Ġt",
3591
+ "ype"
3592
+ ],
3593
+ [
3594
+ ")",
3595
+ "."
3596
+ ],
3597
+ [
3598
+ "eed",
3599
+ "back"
3600
+ ],
3601
+ [
3602
+ "ons",
3603
+ "ive"
3604
+ ],
3605
+ [
3606
+ "ا",
3607
+ "ت"
3608
+ ],
3609
+ [
3610
+ "g",
3611
+ "h"
3612
+ ],
3613
+ [
3614
+ "ing",
3615
+ "uage"
3616
+ ],
3617
+ [
3618
+ "inguage",
3619
+ "m"
3620
+ ],
3621
+ [
3622
+ "8",
3623
+ "00"
3624
+ ],
3625
+ [
3626
+ "ênci",
3627
+ "a"
3628
+ ],
3629
+ [
3630
+ "on",
3631
+ "ent"
3632
+ ],
3633
+ [
3634
+ "in",
3635
+ "ation"
3636
+ ],
3637
+ [
3638
+ "Ġt",
3639
+ "ÃŃtul"
3640
+ ],
3641
+ [
3642
+ "tem",
3643
+ "s"
3644
+ ],
3645
+ [
3646
+ "Ġp",
3647
+ "y"
3648
+ ],
3649
+ [
3650
+ "i",
3651
+ "on"
3652
+ ],
3653
+ [
3654
+ "iz",
3655
+ "ation"
3656
+ ],
3657
+ [
3658
+ "o",
3659
+ "me"
3660
+ ],
3661
+ [
3662
+ "L",
3663
+ "in"
3664
+ ],
3665
+ [
3666
+ "**",
3667
+ ":"
3668
+ ],
3669
+ [
3670
+ "Ġf",
3671
+ "rom"
3672
+ ],
3673
+ [
3674
+ "(",
3675
+ "("
3676
+ ],
3677
+ [
3678
+ "Ġst",
3679
+ "y"
3680
+ ],
3681
+ [
3682
+ "ang",
3683
+ "uage"
3684
+ ],
3685
+ [
3686
+ "ol",
3687
+ "or"
3688
+ ],
3689
+ [
3690
+ "Ġvalid",
3691
+ "ation"
3692
+ ],
3693
+ [
3694
+ "Ġf",
3695
+ "eedback"
3696
+ ],
3697
+ [
3698
+ "Ġsub",
3699
+ "tle"
3700
+ ],
3701
+ [
3702
+ "p",
3703
+ "h"
3704
+ ],
3705
+ [
3706
+ "ĠC",
3707
+ "reate"
3708
+ ],
3709
+ [
3710
+ "Ġclass",
3711
+ "es"
3712
+ ],
3713
+ [
3714
+ "v",
3715
+ "i"
3716
+ ],
3717
+ [
3718
+ "ari",
3719
+ "es"
3720
+ ],
3721
+ [
3722
+ "tui",
3723
+ "tive"
3724
+ ],
3725
+ [
3726
+ "Ġin",
3727
+ "tuitive"
3728
+ ],
3729
+ [
3730
+ "Ġcon",
3731
+ "sisten"
3732
+ ],
3733
+ [
3734
+ "han",
3735
+ "ge"
3736
+ ],
3737
+ [
3738
+ "ĠTailwind",
3739
+ "CSS"
3740
+ ],
3741
+ [
3742
+ "Ġ",
3743
+ "4"
3744
+ ],
3745
+ [
3746
+ "l",
3747
+ "abel"
3748
+ ],
3749
+ [
3750
+ "lic",
3751
+ "ation"
3752
+ ],
3753
+ [
3754
+ "Ġenhan",
3755
+ "c"
3756
+ ],
3757
+ [
3758
+ "Ġ(",
3759
+ ")"
3760
+ ],
3761
+ [
3762
+ "i",
3763
+ "re"
3764
+ ],
3765
+ [
3766
+ "ar",
3767
+ "y"
3768
+ ],
3769
+ [
3770
+ "w",
3771
+ "w"
3772
+ ],
3773
+ [
3774
+ "Ø",
3775
+ "³"
3776
+ ],
3777
+ [
3778
+ "7",
3779
+ "0"
3780
+ ],
3781
+ [
3782
+ "ĠT",
3783
+ "he"
3784
+ ],
3785
+ [
3786
+ "Ġl",
3787
+ "inguagem"
3788
+ ],
3789
+ [
3790
+ "Ġscre",
3791
+ "ens"
3792
+ ],
3793
+ [
3794
+ "p",
3795
+ "tion"
3796
+ ],
3797
+ [
3798
+ "Ġa",
3799
+ "dd"
3800
+ ],
3801
+ [
3802
+ "Ġl",
3803
+ "in"
3804
+ ],
3805
+ [
3806
+ "#",
3807
+ "#"
3808
+ ],
3809
+ [
3810
+ "u",
3811
+ "p"
3812
+ ],
3813
+ [
3814
+ "Ġ",
3815
+ ":"
3816
+ ],
3817
+ [
3818
+ "an",
3819
+ "ce"
3820
+ ],
3821
+ [
3822
+ "Ġstroke",
3823
+ "Lin"
3824
+ ],
3825
+ [
3826
+ "b",
3827
+ "u"
3828
+ ],
3829
+ [
3830
+ "ig",
3831
+ "h"
3832
+ ],
3833
+ [
3834
+ "a",
3835
+ "ve"
3836
+ ],
3837
+ [
3838
+ "Ġm",
3839
+ "an"
3840
+ ],
3841
+ [
3842
+ "Ġapp",
3843
+ "lication"
3844
+ ],
3845
+ [
3846
+ "1",
3847
+ "0"
3848
+ ],
3849
+ [
3850
+ "Ġre",
3851
+ "qu"
3852
+ ],
3853
+ [
3854
+ "Ġl",
3855
+ "anguage"
3856
+ ],
3857
+ [
3858
+ "y",
3859
+ "th"
3860
+ ],
3861
+ [
3862
+ "ĠP",
3863
+ "ro"
3864
+ ],
3865
+ [
3866
+ "i",
3867
+ "ti"
3868
+ ],
3869
+ [
3870
+ "Ġi",
3871
+ "tems"
3872
+ ],
3873
+ [
3874
+ "Ġst",
3875
+ "ring"
3876
+ ],
3877
+ [
3878
+ "Ġp",
3879
+ "r"
3880
+ ],
3881
+ [
3882
+ "Ġd",
3883
+ "es"
3884
+ ],
3885
+ [
3886
+ "yth",
3887
+ "on"
3888
+ ],
3889
+ [
3890
+ "htt",
3891
+ "ps"
3892
+ ],
3893
+ [
3894
+ "m",
3895
+ "o"
3896
+ ],
3897
+ [
3898
+ "Ġ",
3899
+ "ro"
3900
+ ],
3901
+ [
3902
+ "der",
3903
+ "n"
3904
+ ],
3905
+ [
3906
+ "Ġresp",
3907
+ "onsive"
3908
+ ],
3909
+ [
3910
+ "as",
3911
+ "k"
3912
+ ],
3913
+ [
3914
+ "ta",
3915
+ "in"
3916
+ ],
3917
+ [
3918
+ "c",
3919
+ "urrent"
3920
+ ],
3921
+ [
3922
+ "Ġcomp",
3923
+ "onent"
3924
+ ],
3925
+ [
3926
+ "age",
3927
+ "ment"
3928
+ ],
3929
+ [
3930
+ "m",
3931
+ "on"
3932
+ ],
3933
+ [
3934
+ "Ø",
3935
+ "¨"
3936
+ ],
3937
+ [
3938
+ "or",
3939
+ "age"
3940
+ ],
3941
+ [
3942
+ "c",
3943
+ "on"
3944
+ ],
3945
+ [
3946
+ "2",
3947
+ "00"
3948
+ ],
3949
+ [
3950
+ "ad",
3951
+ "or"
3952
+ ],
3953
+ [
3954
+ "Ġmo",
3955
+ "dern"
3956
+ ],
3957
+ [
3958
+ "o",
3959
+ "ur"
3960
+ ],
3961
+ [
3962
+ "Ġn",
3963
+ "ame"
3964
+ ],
3965
+ [
3966
+ "Ġke",
3967
+ "y"
3968
+ ],
3969
+ [
3970
+ "d",
3971
+ "o"
3972
+ ],
3973
+ [
3974
+ "lo",
3975
+ "w"
3976
+ ],
3977
+ [
3978
+ "out",
3979
+ "line"
3980
+ ],
3981
+ [
3982
+ "o",
3983
+ "in"
3984
+ ],
3985
+ [
3986
+ "Ġp",
3987
+ "x"
3988
+ ],
3989
+ [
3990
+ "Ġb",
3991
+ "order"
3992
+ ],
3993
+ [
3994
+ "Ġh",
3995
+ "t"
3996
+ ],
3997
+ [
3998
+ "Ġ",
3999
+ "?"
4000
+ ],
4001
+ [
4002
+ "Ġ",
4003
+ "he"
4004
+ ],
4005
+ [
4006
+ "Ġde",
4007
+ "p"
4008
+ ],
4009
+ [
4010
+ "ter",
4011
+ "n"
4012
+ ],
4013
+ [
4014
+ "t",
4015
+ "y"
4016
+ ],
4017
+ [
4018
+ "y",
4019
+ "e"
4020
+ ],
4021
+ [
4022
+ "Ġh",
4023
+ "igh"
4024
+ ],
4025
+ [
4026
+ "re",
4027
+ "f"
4028
+ ],
4029
+ [
4030
+ "Ġin",
4031
+ "dic"
4032
+ ],
4033
+ [
4034
+ "$",
4035
+ "{"
4036
+ ],
4037
+ [
4038
+ "St",
4039
+ "orage"
4040
+ ],
4041
+ [
4042
+ "a",
4043
+ "z"
4044
+ ],
4045
+ [
4046
+ "Ġval",
4047
+ "ue"
4048
+ ],
4049
+ [
4050
+ "``",
4051
+ "`"
4052
+ ],
4053
+ [
4054
+ "U",
4055
+ "se"
4056
+ ],
4057
+ [
4058
+ "|>",
4059
+ "```"
4060
+ ],
4061
+ [
4062
+ "re",
4063
+ "in"
4064
+ ],
4065
+ [
4066
+ "tif",
4067
+ "y"
4068
+ ],
4069
+ [
4070
+ "a",
4071
+ "ção"
4072
+ ],
4073
+ [
4074
+ "Ã",
4075
+ "º"
4076
+ ],
4077
+ [
4078
+ "i",
4079
+ "ent"
4080
+ ],
4081
+ [
4082
+ "m",
4083
+ "d"
4084
+ ],
4085
+ [
4086
+ "Ġp",
4087
+ "ode"
4088
+ ],
4089
+ [
4090
+ "ĠJ",
4091
+ "avaScript"
4092
+ ],
4093
+ [
4094
+ "O",
4095
+ "l"
4096
+ ],
4097
+ [
4098
+ "a",
4099
+ "ç"
4100
+ ],
4101
+ [
4102
+ "Ol",
4103
+ "á"
4104
+ ],
4105
+ [
4106
+ "g",
4107
+ "le"
4108
+ ],
4109
+ [
4110
+ "Ġcom",
4111
+ "o"
4112
+ ],
4113
+ [
4114
+ "Ġpágin",
4115
+ "as"
4116
+ ],
4117
+ [
4118
+ "Ġconte",
4119
+ "ú"
4120
+ ],
4121
+ [
4122
+ "Ġestrut",
4123
+ "ura"
4124
+ ],
4125
+ [
4126
+ "Ġconteú",
4127
+ "do"
4128
+ ],
4129
+ [
4130
+ "Ġ```",
4131
+ "<|"
4132
+ ],
4133
+ [
4134
+ "end",
4135
+ "er"
4136
+ ],
4137
+ [
4138
+ "arg",
4139
+ "et"
4140
+ ],
4141
+ [
4142
+ "i",
4143
+ "o"
4144
+ ],
4145
+ [
4146
+ "I",
4147
+ "n"
4148
+ ],
4149
+ [
4150
+ "Ġp",
4151
+ "l"
4152
+ ],
4153
+ [
4154
+ "Ġb",
4155
+ "g"
4156
+ ],
4157
+ [
4158
+ "Y",
4159
+ "ou"
4160
+ ],
4161
+ [
4162
+ "Ġcol",
4163
+ "or"
4164
+ ],
4165
+ [
4166
+ "c",
4167
+ "y"
4168
+ ],
4169
+ [
4170
+ "vic",
4171
+ "es"
4172
+ ],
4173
+ [
4174
+ "t",
4175
+ "om"
4176
+ ],
4177
+ [
4178
+ "Ġ",
4179
+ "00"
4180
+ ],
4181
+ [
4182
+ "Ġvisual",
4183
+ "ly"
4184
+ ],
4185
+ [
4186
+ ")",
4187
+ "{"
4188
+ ],
4189
+ [
4190
+ "us",
4191
+ "tify"
4192
+ ],
4193
+ [
4194
+ "Ġex",
4195
+ "per"
4196
+ ],
4197
+ [
4198
+ "Ġin",
4199
+ "tera"
4200
+ ],
4201
+ [
4202
+ "E",
4203
+ "ff"
4204
+ ],
4205
+ [
4206
+ "pp",
4207
+ "ort"
4208
+ ],
4209
+ [
4210
+ "Ġap",
4211
+ "ar"
4212
+ ],
4213
+ [
4214
+ "col",
4215
+ "s"
4216
+ ],
4217
+ [
4218
+ "Ġm",
4219
+ "ar"
4220
+ ],
4221
+ [
4222
+ "f",
4223
+ "o"
4224
+ ],
4225
+ [
4226
+ "Ġt",
4227
+ "ag"
4228
+ ],
4229
+ [
4230
+ "ul",
4231
+ "d"
4232
+ ],
4233
+ [
4234
+ "Ġo",
4235
+ "s"
4236
+ ],
4237
+ [
4238
+ "Eff",
4239
+ "ect"
4240
+ ],
4241
+ [
4242
+ "p",
4243
+ "re"
4244
+ ],
4245
+ [
4246
+ "c",
4247
+ "tive"
4248
+ ],
4249
+ [
4250
+ "v",
4251
+ "ent"
4252
+ ],
4253
+ [
4254
+ "Ġ",
4255
+ "|"
4256
+ ],
4257
+ [
4258
+ "iz",
4259
+ "es"
4260
+ ],
4261
+ [
4262
+ "ĠاÙĦ",
4263
+ "Ùħ"
4264
+ ],
4265
+ [
4266
+ "ave",
4267
+ "g"
4268
+ ],
4269
+ [
4270
+ "ÙĬ",
4271
+ "Ø©"
4272
+ ],
4273
+ [
4274
+ "aveg",
4275
+ "ador"
4276
+ ],
4277
+ [
4278
+ "Ġ`",
4279
+ "<"
4280
+ ],
4281
+ [
4282
+ "Ġcle",
4283
+ "an"
4284
+ ],
4285
+ [
4286
+ "á",
4287
+ "gra"
4288
+ ],
4289
+ [
4290
+ "ĠtÃŃtul",
4291
+ "o"
4292
+ ],
4293
+ [
4294
+ "ti",
4295
+ "v"
4296
+ ],
4297
+ [
4298
+ "o",
4299
+ "uld"
4300
+ ],
4301
+ [
4302
+ "a",
4303
+ "ke"
4304
+ ],
4305
+ [
4306
+ "ar",
4307
+ "t"
4308
+ ],
4309
+ [
4310
+ "6",
4311
+ "4"
4312
+ ],
4313
+ [
4314
+ "ess",
4315
+ "ages"
4316
+ ],
4317
+ [
4318
+ "re",
4319
+ "d"
4320
+ ],
4321
+ [
4322
+ "a",
4323
+ "ult"
4324
+ ],
4325
+ [
4326
+ "Ġuse",
4327
+ "Effect"
4328
+ ],
4329
+ [
4330
+ "Ġan",
4331
+ "y"
4332
+ ],
4333
+ [
4334
+ "ab",
4335
+ "ility"
4336
+ ],
4337
+ [
4338
+ "Ġe",
4339
+ "ff"
4340
+ ],
4341
+ [
4342
+ "Ġ",
4343
+ "H"
4344
+ ],
4345
+ [
4346
+ "h",
4347
+ "is"
4348
+ ],
4349
+ [
4350
+ "Ġas",
4351
+ "s"
4352
+ ],
4353
+ [
4354
+ "Ġsty",
4355
+ "ling"
4356
+ ],
4357
+ [
4358
+ "d",
4359
+ "al"
4360
+ ],
4361
+ [
4362
+ "Ġin",
4363
+ "cl"
4364
+ ],
4365
+ [
4366
+ "Ġ=",
4367
+ "=="
4368
+ ],
4369
+ [
4370
+ "im",
4371
+ "ations"
4372
+ ],
4373
+ [
4374
+ "Ġ",
4375
+ "O"
4376
+ ],
4377
+ [
4378
+ "s",
4379
+ "m"
4380
+ ],
4381
+ [
4382
+ ".",
4383
+ "</"
4384
+ ],
4385
+ [
4386
+ "s",
4387
+ "te"
4388
+ ],
4389
+ [
4390
+ "g",
4391
+ "ress"
4392
+ ],
4393
+ [
4394
+ "p",
4395
+ "ath"
4396
+ ],
4397
+ [
4398
+ "Ġw",
4399
+ "ill"
4400
+ ],
4401
+ [
4402
+ "]",
4403
+ ");"
4404
+ ],
4405
+ [
4406
+ "uc",
4407
+ "cess"
4408
+ ],
4409
+ [
4410
+ "h",
4411
+ "es"
4412
+ ],
4413
+ [
4414
+ "k",
4415
+ "ing"
4416
+ ],
4417
+ [
4418
+ "Ġs",
4419
+ "izes"
4420
+ ],
4421
+ [
4422
+ "ĠT",
4423
+ "his"
4424
+ ],
4425
+ [
4426
+ "Ġc",
4427
+ "ri"
4428
+ ],
4429
+ [
4430
+ "gra",
4431
+ "ph"
4432
+ ],
4433
+ [
4434
+ "Ġfunctional",
4435
+ "ity"
4436
+ ],
4437
+ [
4438
+ "Ġinter",
4439
+ "f"
4440
+ ],
4441
+ [
4442
+ "w",
4443
+ "e"
4444
+ ],
4445
+ [
4446
+ "Ġpro",
4447
+ "j"
4448
+ ],
4449
+ [
4450
+ "hes",
4451
+ "ive"
4452
+ ],
4453
+ [
4454
+ "ar",
4455
+ "e"
4456
+ ]
4457
+ ]
4458
+ }
4459
+ }
treinar_gpt_zero.py ADDED
@@ -0,0 +1,252 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Treina um pequeno GPT causal do zero com tokenizer BPE local."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ import json
8
+ import math
9
+ import random
10
+ from pathlib import Path
11
+
12
+ import torch
13
+ from tokenizers import Tokenizer
14
+ from torch import nn
15
+ from torch.nn import functional as F
16
+
17
+
18
+ class GPTZero(nn.Module):
19
+ def __init__(self, vocab_size: int, block_size: int, d_model: int, nhead: int, num_layers: int, dropout: float):
20
+ super().__init__()
21
+ self.block_size = block_size
22
+ self.token_embedding = nn.Embedding(vocab_size, d_model)
23
+ self.position_embedding = nn.Embedding(block_size, d_model)
24
+ camada = nn.TransformerEncoderLayer(
25
+ d_model=d_model,
26
+ nhead=nhead,
27
+ dim_feedforward=4 * d_model,
28
+ dropout=dropout,
29
+ activation="gelu",
30
+ batch_first=True,
31
+ norm_first=True,
32
+ )
33
+ self.transformer = nn.TransformerEncoder(camada, num_layers=num_layers)
34
+ self.norm = nn.LayerNorm(d_model)
35
+ self.lm_head = nn.Linear(d_model, vocab_size, bias=False)
36
+ self.lm_head.weight = self.token_embedding.weight
37
+ self.apply(self._init_weights)
38
+
39
+ @staticmethod
40
+ def _init_weights(modulo):
41
+ if isinstance(modulo, (nn.Linear, nn.Embedding)):
42
+ nn.init.normal_(modulo.weight, mean=0.0, std=0.02)
43
+ if isinstance(modulo, nn.Linear) and modulo.bias is not None:
44
+ nn.init.zeros_(modulo.bias)
45
+ elif isinstance(modulo, nn.LayerNorm):
46
+ nn.init.ones_(modulo.weight)
47
+ nn.init.zeros_(modulo.bias)
48
+
49
+ def forward(self, indices: torch.Tensor, alvos: torch.Tensor | None = None):
50
+ _, comprimento = indices.shape
51
+ if comprimento > self.block_size:
52
+ raise ValueError("A sequência excede o contexto do modelo.")
53
+ posicoes = torch.arange(comprimento, device=indices.device)
54
+ x = self.token_embedding(indices) + self.position_embedding(posicoes)[None, :, :]
55
+ mascara = torch.triu(
56
+ torch.ones(comprimento, comprimento, device=indices.device, dtype=torch.bool),
57
+ diagonal=1,
58
+ )
59
+ x = self.transformer(x, mask=mascara)
60
+ logits = self.lm_head(self.norm(x))
61
+ perda = None
62
+ if alvos is not None:
63
+ perda = F.cross_entropy(logits.reshape(-1, logits.size(-1)), alvos.reshape(-1))
64
+ return logits, perda
65
+
66
+
67
+ def carregar_textos(path: Path) -> list[str]:
68
+ textos = []
69
+ with path.open(encoding="utf-8") as arquivo:
70
+ for linha in arquivo:
71
+ if linha.strip():
72
+ registro = json.loads(linha)
73
+ if isinstance(registro.get("text"), str):
74
+ textos.append(registro["text"])
75
+ return textos
76
+
77
+
78
+ def ids_textos(textos: list[str], tokenizer: Tokenizer, bos_id: int, eos_id: int) -> list[torch.Tensor]:
79
+ return [torch.tensor([bos_id] + tokenizer.encode(texto).ids + [eos_id], dtype=torch.long) for texto in textos]
80
+
81
+
82
+ def amostrar_lote(streams: list[torch.Tensor], block_size: int, batch_size: int, device: torch.device):
83
+ possiveis = [stream for stream in streams if len(stream) > block_size]
84
+ if not possiveis:
85
+ raise ValueError("Nenhum exemplo é maior que o contexto escolhido.")
86
+ xs, ys = [], []
87
+ for _ in range(batch_size):
88
+ stream = random.choice(possiveis)
89
+ inicio = random.randint(0, len(stream) - block_size - 1)
90
+ janela = stream[inicio : inicio + block_size + 1]
91
+ xs.append(janela[:-1])
92
+ ys.append(janela[1:])
93
+ return torch.stack(xs).to(device), torch.stack(ys).to(device)
94
+
95
+
96
+ @torch.no_grad()
97
+ def avaliar(modelo, streams, block_size, batch_size, batches, device):
98
+ modelo.eval()
99
+ perdas = []
100
+ for _ in range(batches):
101
+ xb, yb = amostrar_lote(streams, block_size, batch_size, device)
102
+ _, perda = modelo(xb, yb)
103
+ perdas.append(float(perda))
104
+ modelo.train()
105
+ return sum(perdas) / len(perdas)
106
+
107
+
108
+ def selecionar(logits: torch.Tensor, temperature: float, top_k: int, top_p: float) -> torch.Tensor:
109
+ logits = logits / max(temperature, 1e-5)
110
+ if top_k > 0:
111
+ valores, indices = torch.topk(logits, min(top_k, logits.size(-1)))
112
+ filtrados = torch.full_like(logits, -float("inf"))
113
+ filtrados.scatter_(1, indices, valores)
114
+ logits = filtrados
115
+ if 0 < top_p < 1:
116
+ valores, indices = torch.sort(logits, descending=True)
117
+ probabilidades = F.softmax(valores, dim=-1)
118
+ acumuladas = torch.cumsum(probabilidades, dim=-1)
119
+ remover = acumuladas > top_p
120
+ remover[:, 1:] = remover[:, :-1].clone()
121
+ remover[:, 0] = False
122
+ valores[remover] = -float("inf")
123
+ filtrados = torch.full_like(logits, -float("inf"))
124
+ filtrados.scatter_(1, indices, valores)
125
+ logits = filtrados
126
+ return torch.multinomial(F.softmax(logits, dim=-1), num_samples=1)
127
+
128
+
129
+ @torch.no_grad()
130
+ def gerar(modelo, tokenizer, prompt: str, device: torch.device, max_new_tokens: int, temperature: float, top_k: int, top_p: float, bos_id: int, eos_id: int, repetition_penalty: float = 1.0) -> str:
131
+ ids = [bos_id] + tokenizer.encode(prompt).ids
132
+ contexto = torch.tensor([ids], dtype=torch.long, device=device)
133
+ fim_id = tokenizer.token_to_id("<|end|>")
134
+ modelo.eval()
135
+ for _ in range(max_new_tokens):
136
+ entrada = contexto[:, -modelo.block_size :]
137
+ logits, _ = modelo(entrada)
138
+ logits = logits[:, -1, :]
139
+ if repetition_penalty > 1.0:
140
+ vistos = torch.unique(contexto[0])
141
+ logits[:, vistos] = torch.where(logits[:, vistos] < 0, logits[:, vistos] * repetition_penalty, logits[:, vistos] / repetition_penalty)
142
+ proximo = selecionar(logits, temperature, top_k, top_p)
143
+ contexto = torch.cat([contexto, proximo], dim=1)
144
+ token_id = int(proximo.item())
145
+ if token_id == eos_id or (fim_id is not None and token_id == fim_id):
146
+ break
147
+ return tokenizer.decode(contexto[0].tolist()[len(ids):], skip_special_tokens=True)
148
+
149
+
150
+ def main() -> None:
151
+ parser = argparse.ArgumentParser()
152
+ parser.add_argument("--data-dir", type=Path, required=True)
153
+ parser.add_argument("--tokenizer", type=Path, required=True)
154
+ parser.add_argument("--steps", type=int, default=3000)
155
+ parser.add_argument("--batch-size", type=int, default=8)
156
+ parser.add_argument("--block-size", type=int, default=256)
157
+ parser.add_argument("--d-model", type=int, default=192)
158
+ parser.add_argument("--nhead", type=int, default=6)
159
+ parser.add_argument("--num-layers", type=int, default=4)
160
+ parser.add_argument("--dropout", type=float, default=0.1)
161
+ parser.add_argument("--lr", type=float, default=3e-4)
162
+ parser.add_argument("--eval-interval", type=int, default=250)
163
+ parser.add_argument("--eval-batches", type=int, default=10)
164
+ parser.add_argument("--seed", type=int, default=42)
165
+ parser.add_argument("--checkpoint", type=Path, default=Path("modelo_gpt_zero.pt"))
166
+ parser.add_argument("--resume", type=Path, default=None, help="checkpoint do próprio GPT do zero para continuar")
167
+ parser.add_argument("--device", choices=["auto", "cpu", "cuda"], default="auto")
168
+ args = parser.parse_args()
169
+
170
+ random.seed(args.seed)
171
+ torch.manual_seed(args.seed)
172
+ if torch.cuda.is_available():
173
+ torch.cuda.manual_seed_all(args.seed)
174
+ if args.device == "auto":
175
+ device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
176
+ else:
177
+ device = torch.device(args.device)
178
+ if device.type == "cuda" and not torch.cuda.is_available():
179
+ raise RuntimeError("CUDA foi solicitado, mas não está disponível.")
180
+
181
+ tokenizer = Tokenizer.from_file(str(args.tokenizer))
182
+ bos_id = tokenizer.token_to_id("<bos>")
183
+ eos_id = tokenizer.token_to_id("<eos>")
184
+ if bos_id is None or eos_id is None:
185
+ raise ValueError("Tokenizer sem <bos> ou <eos>.")
186
+ train_textos = carregar_textos(args.data_dir / "train_conversacional.jsonl")
187
+ val_textos = carregar_textos(args.data_dir / "validation_conversacional.jsonl")
188
+ test_textos = carregar_textos(args.data_dir / "test_conversacional.jsonl")
189
+ train_streams = ids_textos(train_textos, tokenizer, bos_id, eos_id)
190
+ val_streams = ids_textos(val_textos, tokenizer, bos_id, eos_id)
191
+ test_streams = ids_textos(test_textos, tokenizer, bos_id, eos_id)
192
+ # O corpus é concatenado para permitir janelas maiores que um exemplo isolado.
193
+ # Os marcadores <bos>/<eos> preservam as fronteiras entre diálogos.
194
+ train_streams = [torch.cat(train_streams)]
195
+ val_streams = [torch.cat(val_streams)]
196
+ test_streams = [torch.cat(test_streams)]
197
+
198
+ modelo = GPTZero(tokenizer.get_vocab_size(), args.block_size, args.d_model, args.nhead, args.num_layers, args.dropout).to(device)
199
+ if args.resume is not None:
200
+ estado = torch.load(args.resume, map_location=device, weights_only=False)
201
+ if estado.get("pretrained", True):
202
+ raise ValueError("O checkpoint indicado não está marcado como treinado do zero.")
203
+ modelo.load_state_dict(estado["model_state"])
204
+ print(f"Checkpoint do zero retomado: {args.resume}")
205
+ otimizador = torch.optim.AdamW(modelo.parameters(), lr=args.lr, betas=(0.9, 0.95), weight_decay=0.1)
206
+ total_parametros = sum(param.numel() for param in modelo.parameters())
207
+ melhor_validacao = math.inf
208
+
209
+ print(f"Dispositivo: {device}")
210
+ print(f"Pesos inicializados aleatoriamente; nenhum modelo pré-treinado é carregado.")
211
+ print(f"Vocabulário: {tokenizer.get_vocab_size()} tokens")
212
+ print(f"Parâmetros: {total_parametros:,}")
213
+ print(f"Tokens: treino={sum(map(len, train_streams))}, validação={sum(map(len, val_streams))}, teste={sum(map(len, test_streams))}")
214
+
215
+ for passo in range(1, args.steps + 1):
216
+ xb, yb = amostrar_lote(train_streams, args.block_size, args.batch_size, device)
217
+ _, perda = modelo(xb, yb)
218
+ otimizador.zero_grad(set_to_none=True)
219
+ perda.backward()
220
+ torch.nn.utils.clip_grad_norm_(modelo.parameters(), 1.0)
221
+ otimizador.step()
222
+ if passo == 1 or passo % args.eval_interval == 0 or passo == args.steps:
223
+ treino = avaliar(modelo, train_streams, args.block_size, args.batch_size, args.eval_batches, device)
224
+ validacao = avaliar(modelo, val_streams, args.block_size, args.batch_size, args.eval_batches, device)
225
+ print(f"passo={passo:06d} treino={treino:.4f} validação={validacao:.4f}", flush=True)
226
+ if validacao < melhor_validacao:
227
+ melhor_validacao = validacao
228
+ torch.save(
229
+ {
230
+ "model_state": modelo.state_dict(),
231
+ "vocab_size": tokenizer.get_vocab_size(),
232
+ "block_size": args.block_size,
233
+ "d_model": args.d_model,
234
+ "nhead": args.nhead,
235
+ "num_layers": args.num_layers,
236
+ "dropout": args.dropout,
237
+ "tokenizer": str(args.tokenizer),
238
+ "validacao": validacao,
239
+ "seed": args.seed,
240
+ "pretrained": False,
241
+ },
242
+ args.checkpoint,
243
+ )
244
+
245
+ print(f"Checkpoint do zero salvo em: {args.checkpoint}")
246
+ prompt = "<|system|>Você é um assistente útil.<|end|><|user|>Olá! Quem é você?<|end|><|assistant|>"
247
+ print("Amostra:")
248
+ print(gerar(modelo, tokenizer, prompt, device, 120, 0.7, 40, 0.9, bos_id, eos_id))
249
+
250
+
251
+ if __name__ == "__main__":
252
+ main()
usar_gpt_zero.py ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Gera respostas usando exclusivamente o GPT treinado do zero."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ from pathlib import Path
8
+
9
+ import torch
10
+ from tokenizers import Tokenizer
11
+
12
+ from treinar_gpt_zero import GPTZero, gerar
13
+
14
+
15
+ def carregar(checkpoint_path: Path, device: torch.device):
16
+ checkpoint = torch.load(checkpoint_path, map_location=device, weights_only=False)
17
+ tokenizer_path = Path(checkpoint["tokenizer"])
18
+ if not tokenizer_path.is_absolute():
19
+ tokenizer_path = checkpoint_path.parent / tokenizer_path
20
+ tokenizer = Tokenizer.from_file(str(tokenizer_path))
21
+ modelo = GPTZero(
22
+ checkpoint["vocab_size"],
23
+ checkpoint["block_size"],
24
+ checkpoint["d_model"],
25
+ checkpoint["nhead"],
26
+ checkpoint["num_layers"],
27
+ checkpoint["dropout"],
28
+ ).to(device)
29
+ modelo.load_state_dict(checkpoint["model_state"])
30
+ modelo.eval()
31
+ bos_id = tokenizer.token_to_id("<bos>")
32
+ eos_id = tokenizer.token_to_id("<eos>")
33
+ return modelo, tokenizer, checkpoint, bos_id, eos_id
34
+
35
+
36
+ def main() -> None:
37
+ parser = argparse.ArgumentParser()
38
+ parser.add_argument("--checkpoint", type=Path, default=Path("modelo_gpt_zero_stage2.pt"))
39
+ parser.add_argument("--pergunta", default="Olá! Tudo bem? Quem é você?")
40
+ parser.add_argument("--system", default="Você é um assistente útil e claro.")
41
+ parser.add_argument("--tokens", type=int, default=180)
42
+ parser.add_argument("--temperature", type=float, default=0.45)
43
+ parser.add_argument("--top-k", type=int, default=40)
44
+ parser.add_argument("--top-p", type=float, default=0.9)
45
+ parser.add_argument("--repetition-penalty", type=float, default=1.15)
46
+ parser.add_argument("--device", choices=["auto", "cpu", "cuda"], default="auto")
47
+ args = parser.parse_args()
48
+ if args.device == "auto":
49
+ device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
50
+ else:
51
+ device = torch.device(args.device)
52
+ modelo, tokenizer, checkpoint, bos_id, eos_id = carregar(args.checkpoint, device)
53
+ prompt = f"<|system|>{args.system}<|end|><|user|>{args.pergunta}<|end|><|assistant|>"
54
+ resposta = gerar(modelo, tokenizer, prompt, device, args.tokens, args.temperature, args.top_k, args.top_p, bos_id, eos_id, args.repetition_penalty)
55
+ print(f"Checkpoint: {args.checkpoint}")
56
+ print(f"Pré-treinado: {checkpoint.get('pretrained')}")
57
+ print(f"Pergunta: {args.pergunta}")
58
+ print(f"Modelo: {resposta}")
59
+
60
+
61
+ if __name__ == "__main__":
62
+ main()