Adicionado funcoes extras e algumas outras refatoradas