{******************************************************************************}
{ Projeto: Componentes ACBr                                                    }
{  Biblioteca multiplataforma de componentes Delphi para interao com equipa- }
{ mentos de Automao Comercial utilizados no Brasil                           }
{                                                                              }
{  Voc pode obter a ltima verso desse arquivo na pgina do Projeto ACBr     }
{ Componentes localizado em      http://www.sourceforge.net/projects/acbr      }
{                                                                              }
{  Esta biblioteca  software livre; voc pode redistribu-la e/ou modific-la }
{ sob os termos da Licena Pblica Geral Menor do GNU conforme publicada pela  }
{ Free Software Foundation; tanto a verso 2.1 da Licena, ou (a seu critrio) }
{ qualquer verso posterior.                                                   }
{                                                                              }
{  Esta biblioteca  distribuda na expectativa de que seja til, porm, SEM   }
{ NENHUMA GARANTIA; nem mesmo a garantia implcita de COMERCIABILIDADE OU      }
{ ADEQUAO A UMA FINALIDADE ESPECFICA. Consulte a Licena Pblica Geral Menor}
{ do GNU para mais detalhes. (Arquivo LICENA.TXT ou LICENSE.TXT)              }
{                                                                              }
{  Voc deve ter recebido uma cpia da Licena Pblica Geral Menor do GNU junto}
{ com esta biblioteca; se no, escreva para a Free Software Foundation, Inc.,  }
{ no endereo 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.          }
{ Voc tambm pode obter uma copia da licena em:                              }
{ http://www.opensource.org/licenses/lgpl-license.php                          }
{                                                                              }
{ Daniel Simes de Almeida - daniel@projetoacbr.com.br - www.projetoacbr.com.br}
{       Rua Coronel Aureliano de Camargo, 963 - Tatu - SP - 18270-170         }
{******************************************************************************}
{******************************************************************************
|* ACBr
|*
|* PROPSITO: Registro de Alteraes
******************************************************************************}

Smbolo : Significado

[+]     : Novo recurso
[*]     : Recurso modificado/melhorado
[-]     : Correo de Bug (assim esperamos)

30/03/2023
-- ACBr.inc --
[*] Remoo diretivas de compilao em desuso no componente ACBrCTe.
   Por: Italo Giurizzato Junior

04/01/2023
-- ACBrJSON --
[*] Possvel soluo para evitar um AV ao executar a funcion CreateJsonObject
    Por: Arimateia

05/12/22
-- ACBrUtil.DateTime --
[-] Ajuste em "Iso8601ToDateTime", para processar Strings onde hora, minutos ou
    segundos no so informados.. Exemplo: '2022-12-05T00:00Z'

-- ACBrUtil.Strings --
[-] Ajuste em 'TiraAcentos' e 'NativeStringToAnsi', para funcionamento correto
    em Android FMX
    (por: DSA)

30/11/2022
-- ACBrUtil.DateTime --
[*] Remoo de Warnings e Hints.
   Por: Italo Giurizzato Junior

11/11/2022
-- ACBrJSON --
[+] Implementado a leitura para datas no formato Brasil.
    Por: Italo Giurizzato Junior

08/11/2022
-- ACBrUtil.DateTime --
[*] Alterao visando a leitura de datas com somente ano e ms.
   Por: Italo Giurizzato Junior

27/10/2022
-- ACBrJSON --
[-] Correo de problema no Lazarus com objetos com valor Null
    https://www.projetoacbr.com.br/forum/topic/69458-acbrpixcd-sicredi-mensagem-erro-no-demo-duplicate-object-member-retirada/
    Por: Elias Csar

25/10/2022
-- ACBrUtil.DateTime --
[*] Possvel soluo para a leitura correta de data/hora cujo segundo tem frao.
   Por: Italo Giurizzato Junior

21/10/2022
-- ACBrUtil.XMLHTML --
[*] Includo no ParseText o caracter HTML (&#45;) na lista de converso.
   Por: Italo Giurizzato Junior

20/10/2022
-- ACBrJSON --
[-] Correo ao adicionar par utilizando um TACBrJsonObject
[+] Adicionando possibilidade de incluir elementos do tipo TACBrJsonObject em um TACBrJsonArray
    Por: Elias Csar

19/10/2022
-- ACBrUtil.DateTime --
[*] Ajustes para retornar o valor zero quando a data lida for: 0000/00/00 ou
    00/00/0000.
   Por: Italo Giurizzato Junior

04/10/2022
-- ACBrUtil.DateTime --
[*] Correo na verificao de presena de TimeZone na data/hora
   Por: Italo Giurizzato Junior

18/08/2022
-- ACBrUtil.DateTime --
[*] Criadas funes para testar se uma String  ou possui TimeZone.
    (Exemplos de TimeZones: 'Z', '-03:00', '+01:00')
	Por: Elias Csar

18/08/2022
-- ACBrUtil.DateTime --
[*] Alterao para remover o TimeZone do parmetro enviado para a funo 'StringToDateTime()'.
[*] Modificada funo 'ParseDataHora()' para tambm tratar TimeZones positivos (Exemplo: '+01:00').
    Por: Elias Csar

10/08/2022
-- ACBrUtil.DateTime --
[+] Adicionado funo DateTimeUniversal - Retorna ADateTime com hora convertida para TimeZone Universal, baseado no
  TimeZone passado por parmetro ou no TimeZone Local.
   por: Jos M S Junior

10/08/2022
-- ACBrJSON --
[*] Alteraes para compatibilizar unit com fpjsons(Lazarus).
[*] Movidas units Jsons e JsonDataObjects_ACBr do pacote ACBrDiversos para ACBrComum
[+] Incluso da unit ACBrJSON no pacote ACBrComum.
    Por: Elias Csar

08/08/2022
-- ACBrUtil.FilesIO --
[+] Implementado a procedure ParseNomeArquivo e alterado o nome da funo 
    DefinirNomePDF para DefinirNomeArquivo e ajustado a assinatura da mesma.
   Por: Italo Giurizzato Junior
-- ACBrUtil.DateTime --
[*] Correo para ler corretamente datas no formato AAAA-MM.
   Por: Cleverton Martins

02/08/2022
-- ACBrUtil.FilesIO --
[+] Acrescentado a funo DefinirNomePDF recebendo como parmetro:
    Path, NomePadrao, Sufixo e NomeOpcional (opcional), se NomeOpcional for
    informado ser considerado ele em vez de NomePadrao.
   Por: Pandaaa/Italo Giurizzato Junior

11/07/2022
-- ACBrUtil.DateTime --
[-] Correo de AV ao enviar uma string vazia para funo 'TimezoneToBias()'
[*] Remoo de warning

11/07/2022
-- ACBrUtil.DateTime --
[+] Incluso de funes para converses entre a string em Timezone e Bias 
    (Bias = minutos de diferena entre UTC e o horrio local)
	Por: Elias Csar

29/06/2022
-- ACBrUtil.DateTime --
[*] Possvel correo para datas que estejam no formato: "2022-06-27-03:00".
   Por: Gil Spider

24/06/2022
-- ACBrUtil.DateTime --
[*] Incluida a funo AjustarData com o objetivo de detectar datas que tem
    apenas 1 digito no dia e ou no ms e mudar para 2 digitos.
   Por: Italo Giurizzato Junior

20/06/2022
-- ACBrUtil.DateTime --
[*] Incluida a funo ParseDataHora com o objetivo de formatar a data/hora
    no seguinte formato: YYYY/MM/DD HH:NN:SS-HH:NN.
   Por: Italo Giurizzato Junior

26/04/2022
-- ACBrUtil.XMLHTML --
[*] Includo o parmetro: aTodas na funo RemoverDeclaracaoXML.
    por padro o valor  False, se for True vai remover todas as
    Declaraes que existam no XML.
   Por: Italo Giurizzato Junior

13/04/2022
-- ACBrUtil.DateTime --
[*] Incluida a remoo do caracter "Z" na funo:
    EncodeDataHora.
   Por: Victor H. Gonzales - Panda

27/03/2022
-- Diversos --
[*] Remoo de Warnings e Hints.
   Por: Waldir Paim

25/03/2022
-- ACBrUtil --
[*] Correo a funo StrIsHexa estava apontando para outro mtodo.
   Por: Waldir Paim
-- Diversos --
[*] Remoo de Warnings e Hints.
   Por: Italo Giurizzato Junior

21/03/2022
-- ACBrImage --
[+] Adiciondo o mtodo "PNGInfoIHDR", para obter informaes da Imagem PNG, por Stream
  procedure PNGInfoIHDR(S: TStream; out Width: LongWord; out Height: LongWord;
                       out BitDepth: Byte; out ColorType: Byte; out CompressionMethod: Byte;
                       out FilterMethod: Byte; out InterlaceMethod: Byte);
  (por: DSA)

16/03/2022
-- ACBrUtil --
[+] Adicionado o mtodo:
    function StringCrcCCITT(const s: AnsiString; initial:Word=$1D0F; polynomial:Word=$1021): Word;
    Calulo de CRC do PIX, Zebra e outros

-- ACBrImage --
[+] Adiciondo o mtodo:
    function IsPNG(S: TStream; CheckIsMono: Boolean = True): Boolean;
    Verifica se o contedo do Stream  um PNG e Monocromtico

12/11/2022
-- ACBrUtil --
[*] Ajuste em "Iso8601ToDateTime", para considerar os Milisegundos, caso eles
    estejam na String de entrada
    (por: DSA)

17/11/2021
-- ACBrUtil --
[-] Ajuste em StringToDateTime, para funcionar corretamente no Delphi Alexandria,
    quando informado Mascaras com Data e Hora
    (por: DSA)

08/11/2021
-- ACBrUtil --
[-] Ajuste em StringToDateTime, para funcionar corretamente no Delphi Alexandria
    https://www.projetoacbr.com.br/forum/topic/64828-acbrutilstringtodatetime-com-erro-no-alexandria/

09/09/2021
-- ACBrUtil --
[*] Depreciao do mtodo "LerTagXML" em prol do "SeparaDados" por o primeiro no
    suportar tags com atributos ou prefixos, e correo no "SeparaDados" para
    sempre procurar a tag completa como informado. Tambm adicionado no "SeparaDados"
    a funcionalidade de busca case sensitive que existia na "LerTagXML".
  Por: BigWings

22/06/2021
-- ACBrBase --
[*] Corrigido a grafia da palavra "ordenada"
   Por: Italo Giurizzato Junior

Data: 22/10/2020
-- ACBrUtil --
[+] Adicionado novo mtodo, PosExA, para funcionar sem a necessidade de converter
    AnsiStrings para Strings.
    function PosExA(const SubStr, S: AnsiString; Offset: Integer = 1): Integer;
    (por: DSA)

-- ACBrImage --
[-] Ajuste em "BMPMonoToRasterStr", para imagens que informam o valor de
    "Pixel Array", invlido.
    https://www.projetoacbr.com.br/forum/topic/59745-configurao-correta-para-impresso-de-imagem/
    (por: DSA)

Data: 22/09/2020
-- ACBrBase --
[+] TACBrInformacao, adicionada a propriedade: "AsBoolean"
[+] TACBrInformacao, adicionada a propriedade: "Tipo: TACBrInformacaoTipo"
      TACBrInformacaoTipo = ( tiString, tiAnsiString, tiBoolean,
                              tiInteger, tiInt64, tiFloat,
                              tiDate, tiTime, tiDateTime);
[+] TACBrInformacoes, adicionado sobrecarga no mtodo:
    function AddField(const AName: String): TACBrInformacao;
    (por: DSA)

Data: 07/07/2020
-- ACBrBase --
[+] Nova propriedade na Classe TACBrInformacao.AsInt64
    (por: DSA)

Data: 03/07/2020
-- ACBrBase --
[*] Ajuste em "TACBrInformacao.GetAsDate", para suportar Datas no formato DDMMYY
    (por: DSA)

Data: 26/06/2020
-- ACBrBase, ACBrReg --
[*] Ajustes no endereo de URL do ACBr, em TACBrAboutDialogProperty

-- ACBrBase --
[*] "TACBrThreadTimer.Destroy", modificao para que o mtodo "WaitFor" sempre
    seja chamado, antes da liberar, pois o "OnTimer" pode ainda estar em execuo
    (por: DSA)

Data: 27/05/2020
-- ACBr.inc --
[-] Ajuste para compilao em Android FMX, com Delphi 10.4 Sidney
    (por: DSA)

Data: 12/05/2020
-- ACBrUtil --
[+] Ajustes para use de UTF8 por padro, em NEXTGEN, Android, e POSIX, Linux
    (por: DSA)

Data: 20/04/2020
-- ACBrUtil --
[+] Adicionado mtodo "RemoverQuebraLinhaFinal" para tratar retornos de 
    TStrings.Text.
  Por: BigWings

Data: 19/04/2020
-- ACBrUtil --
[+] Adicionados novos mtodos, para manipulao de Strings em AnsiString,
    para evitar a perda do Encodig da Pgina de Cdigo
   function PadRightA(const AAnsiString : AnsiString; const nLen : Integer;
     const Caracter : AnsiChar = ' ') : AnsiString;
   function PadLeftA(const AAnsiString : AnsiString; const nLen : Integer;
     const Caracter : AnsiChar = ' ') : AnsiString;
   function PadCenterA(const AAnsiString : AnsiString; const nLen : Integer;
     const Caracter : AnsiChar = ' ') : AnsiString;
[-] Mtodo "TranslateString", corrigido para trabalhar corretamente em Delphi,
    Linux POSIX
[*] Mtodo "AcharProximaTag" modificado para trabalhar corretamente com
    AnsiStrings
    (por: DSA)

Data: 15/04/2020
-- ACBrBase -- 
[-] Correo em Busca "bubble sort", de TACBrObjectList. 
    Ajuste para localizao no menor "Match", exato
    (por: DSA)

Data: 30/03/2020
-- ACBrUtil --
[*] Mtodo "WriteToFile", com assinatura modificada, incluindo o parmetro "ForceDirectory"
    Procedure WriteToFile( const Arq: String; const ABinaryString : AnsiString;
       const ForceDirectory : Boolean = False);
    (por: DSA)

Data: 27/03/2020
-- ACBrUtil --
[*] Mtodo "FindSubDirectories", aplicado correo para funcionamento em ANDROID

-- ACBrBase --
[+] Adicionada a Classe "THttpHeader", usada em TACBrWinReqResp e TDFeSSLHttpClass
    (por: DSA)

Data: 06/03/2020
-- ACBrUtil --
[-] Correo em PadLeft, PadRight, e PadCenter, para funcionar corretamente com
    Strings em UTF8, no FPC
    (por: DSA)

Data: 21/02/2020
-- ACBrUtil --
[*] Mtodo AcharProximaTag modificado para receber parmetro de Entrada, como AnsiString

-- ACBrBase --
[+] Adicionada classe "TAnsiStringList", para evitar problemas de converso de
    AnsiString para String.

-- ACBrImage --
[*] Mtodos "RasterStrToColumnStr" e "AscIIToColumnStr" modificados para usar
    TAnsiStringList ao invez de TStringList, para funcionar corretamente em NEXTGEN
    (por: DSA)

Data: 07/02/2020
-- ACBrBase --
[+] Criado novo PID, "piacbrAllDesktopPlatforms", para ser usado nos componentes
    que no fazem sentido para Mobile
[*] TACBrObjectList, novos ajustes para compiladores NEXTGEN
    (por: DSA)
	
-- ACBr.inc --
[+] Novas verificaes e chaves, para definir se usa a Classe JSonDataObjects	
    (por: DSA)
		
Data: 23/01/2020
-- ACBrUtil --
[*] Reviso de alguns mtodos que usavam AnsiString desnecessriamente
[*] Otimizao e remoo de Hints
[+] Adicionado o mtodo: function GetFileVersion(AFile: String): String;

-- ACBrImage --
[*] Otimizao e remoo de Hints
    (por: DSA)

Data: 26/12/2019
-- ACBrUtil, ACBrBase, ACBr.inc, ACBrImage --
[*] Ajustes para compilao em FMX, Linux
    (por: DSA, Waldir Paim e Silvio Clecio)

Data: 02/12/2019
-- ACBrImage --
[-] Ajuste no mtodo "BMPMonoToRasterStr", para tratar corretamente imagens com
    sobra de Bits a esquerda
    (por: DSA)

Data: 01/12/2019
-- ACBrBase --
[+] Classe "TACBrInformacao", Adiconada a propriedade "AsBinary", para processar
    corretamente Strings com caracteres de controle
[*] Classe "TACBrInformacoes":
    - Mtodo "Add" modificado para ficar compatvel com classe ancestral.
    - Adicionado o mtodo "Insert", compatvel com ancestral
    - Adicionado o metodo "New: TACBrInformacao", com a mesma funcionalidade do antigo "Add"
    (por: DSA)

Data: 27/09/2019
-- ACBrUtil --
[*] Melhorias na validao do Arquivo ini na funo LerIniArquivoOuString
    (por: Jos M. S. Junior)

Data: 02/08/2019
-- ACBrUtil --
[*] Mtodo "HexToAscii" modificado para causar um exception, no caso de valor
    invlido
[+] Adicionado os mtodos:
    function TryHexToAscii(const HextStr: String; out Value: AnsiString): Boolean;
    function HexToAsciiDef(const HexStr: String; const Default: AnsiString): AnsiString;
    (por: BigWings e DSA)

Data: 24/05/2019
-- ACBrImage --
[-] Correo nos mtodos "BMPMonoToRasterStr", "AscIIToRasterStr",
    "AscIIToColumnStr" e "BitmapToRasterStr", para evitar problemas de converso
    de Char para AnsiChar
    (por: DSA)

Data: 26/04/2019
-- ACBrUtil --
[*] Ajustes de validao do Separador Data e Hora na funo StringToDateTime.
    (por: Jos M. S. Junior)

Data: 06/02/2019
-- ACBrUtil --
[*] Incluso de parmetro nos mtodos "SeparaDados" e "SeparaDadoArray" para
    permitir a leitura de chaves com qualquer prefixo.
[*] Incluso de parmetro no mtodo "PadSpace" para no remover os espaos
    (Trim) do retorno final.
    (por: BigWings)

Data: 31/01/2019
-- ACBrUtil --
[*] Otimizao do mtodo "TestBit"
[+] Adicionados vrios mtodos para manipulao de Bits
    procedure ClearBit(var AValue: Integer; const AIndex: Byte);
    procedure SetBit(var AValue: Integer; const AIndex: Byte);
    procedure PutBit(var AValue: Integer; const AIndex: Byte; State: Boolean);
    http://wiki.freepascal.org/Bit_manipulation
    (por: DSA)

Data: 27/01/2019
-- ACBrImage --
[+] Adicionado novos mtodos, para permitir o uso de Bitmaps em comandos legados
    de Esc/Pos, que apenas operam po NV Bitmap (definio de imagem por coluna)
   procedure RasterStrToColumnStr(const ARasterStr: AnsiString; AWidth: Integer;
     ColumnSliceLines: TStrings; BytesPerSlice: Integer = 3);
   procedure AscIIToColumnStr(AscIIArtLines: TStrings; out AWidth: Integer;
     out AHeight: Integer; ColumnSliceLines: TStrings; BytesPerSlice: Integer = 3);
[-] Ajuste no mtodo "BMPMonoToRasterStr", para evitar erros quando o BitMap no
    possui a informao de tamanho do "Pixel Array"
   (por: DSA)

Data: 19/01/2019
-- ACBrImage --
[*] Mtodo "BMPToRasterStr" renomeado para "BMPMonoToRasterStr"
[-] Corrigido Bug em "BMPMonoToRasterStr", para conseguir processar corretamente
    imagens cuja largura no  multiplo de 32
[+] Adiconado o mtodo:
    procedure RasterStrToBMPMono(ARasterStr: AnsiString; AWidth: Integer;
      InvertImg: Boolean; ABMPStream: TStream);
    - Para permite converter uma String em Raster para um BMP Mono. O contedo
      do BMP ser salvo em ABMPStream.
[+] Adiconado o mtodo:
    procedure BitmapToRasterStr(ABmpSrc: TBitmap; InvertImg: Boolean;
      out AWidth: Integer; out AHeight: Integer; out ARasterStr: AnsiString;
      LuminosityThreshold: Byte = C_LUMINOSITY_THRESHOLD);
    - Somente disponvel se no for compilao em modo console {$IfNDef NOGUI}
    - Permiter converter qualquer BitMap, Colorido ou em escala de Cinza, gerando
      uma String no formato Raster do equivalente em Monocromtico
    (por: DSA)

-- ACBrUtil --
[+] Adicionado os mtodos:
    function StrIsBinary(const S: String): Boolean;
    function StrIsBase64(const S: String): Boolean;
    function CharIsBinary(const C: Char): Boolean;
    function CharIsBase64(const C: Char): Boolean;
    (por: DSA)

Data: 16/01/2019
-- ACBrImage --
[+] Adicionado novos mtodos, para permitir transforma um BMP em ASCII ART e
    vice-versa:
    procedure RasterStrToAscII(AWidth: Integer; const RasterStr: AnsiString;
      AscIIArtLines: TStrings);
    procedure AscIIToRasterStr(AscIIArtLines: TStrings; var AWidth: Integer;
      var AHeight: Integer; var RasterStr: AnsiString);
[-] Mtodo "BMPToRasterStr", corrigido para no inverter Bits no utilizados
    no final da Imagem

Data: 14/01/2019
-- ACBrImage --
[+] Adicionada nova Unit ACBrImage.pas, para permitir a manipulaao de Imagens
    BMP, PCX, que sero usadas em ACBrPosPrinter e ACBrETQ
    (por: DSA)

Data: 11/01/2019
-- ACBrUtil --
[*] Ajuste no mtodo "XmlEhUTF8", para permitir Aspas Simples na Declarao de XML
    (por: DSA)

Data: 19/19/2018
-- ACBr.inc --
[*] Desabilitada por padro a diretiva $DEFINE USE_MINGW
	(por: Celso Marigo Junior)

Data: 19/19/2018
-- ACBr.inc --
[-] Ajustada diretiva de compilao que removia suporte a libXmlSec
	(por: Celso Marigo Junior)
	
Data: 17/12/2018
-- ACBrUtil --
[-] Correo para o mtodo "QuebraLinhas", que removia LineBreaks consecutivos
    (por: DSA)

Data: 11/12/2018
-- ACBrUtil --
[+] Adicionado o mtodo:
    function InserirDeclaracaoXMLSeNecessario(const AXML: String; const ADeclaracao: String): String;
      Insere uma Declarao no XML, caso o mesmo no tenha nenhuma
      Se "ADeclaracao" no for informado, usar '<?xml version="1.0" encoding="UTF-8"?>'
    (por: DSA)

Data: 09/08/2018
-- ACBrUtil --
[*] Mtodo "FindFiles", teve sua assinatura modificada, para permitir retornar os
    arquivos ordenados por Nome ou Data/Hora; Ascendente ou Descendente
    Procedure FindFiles( const FileMask : String; AStringList : TStrings;
      IncludePath : Boolean = True;
      SortType: TFindFileSortType = fstNone;
      SortDirection: TFindFileSortDirection = fsdNone );
    (por: DSA)
[*] Melhoria no mtodo "ParseText", para usar substituio mais rpida do que
    StringReplace
    https://www.projetoacbr.com.br/forum/topic/33768-parsetext-stringreplace-lento/

Data: 06/08/2018
-- ACBrUtil --
[*] Migrado a procedure LerIniArquivoOuString de ACBrDFeUtil para classe ACBrUtil, devido utilizao fora 
    das classes do DFe. 

Data: 21/05/2018
-- ACBrConsts --
[+] Adicionadas novas constantes para o uso de "Modo Pgina", no ACBrPosPrinter

Data: 10/05/2018
-- ACBrUtil --
[*] Mtodo "WriteToTXT". Ajuste para permitir a criao de Arquivos vazios (touch)
    Otimizao na verificao da criao ou no do diretrio
    (por: DSA)

Data: 23/04/2018
-- ACBrUtil --
[-] Aplicado Workround para BUG em FPC em:
    function FormatFloatBr(const AFormat: TFormatMask; const AValue: Extended): String;
    https://www.projetoacbr.com.br/forum/topic/42922-cteimprimirdactepdf-falta-ponto/
    (por: DSA)

Data: 06/04/2018
-- ACBr.Inc --
[+] Adicionado suporte a diretiva:   {$DEFINE HAS_STRICTDELIMITER}

-- ACBrUtil --
[*] Modificada a assinatura do mtodo "AddDelimitedTextToList" para:
    function AddDelimitedTextToList( const AText: String; const ADelimiter: Char;
      AStringList: TStrings; const AQuoteChar: Char = '"'): Integer;
    Informe AQuoteChar := #0, para que as Aspas Duplas sejam ignoradas, no
    calculo da separao de Linhas
    (por: DSA)

Data: 04/04/2018
-- ACBrBase --
[+] Adicionada propriedade possibilitando definir numero de digitos nos campos float em ACBrInformacao
[+] Adicionada funo FieldExists em ACBrInformacoes
    (por: Celso Marigo Junior)

Data: 06/03/2018
-- ACBrUtil --
[*] Refactoring no mtodo "Split" para utilizar mtodo j implementado "AddDelimitedTextToList"
[*] Ajuste no mtodo "AddDelimitedTextToList" para utilizar propriedade "StrictDelimiter" do
    Delphi 2006 ou superior
    (por: BigWings)


Data: 26/01/2018
-- ACBrBase --
[+] Adidciona a classe "TACBrObjectList", que implementa uma TObjectTist
    (por: DSA)

Data: 15/01/2018
-- ACBr.Inc --
[+] Adicionado suporte as diretivas {$DEFINE DFE_SEM_MSXML} e {$DEFINE DFE_SEM_INDY}
[+] Ajustes para Delphi POSIX
    (por Waldir e DSA)

Data: 09/01/2018
-- ACBrUtil --
[-] Correo no mtodo "WriteToTXT", que tentava criar diretrio, mesmo quando
    no definido
[*] Parmetro "ForceDirectory" do mtodo "WriteToTXT", modificado por Default
    para "False", por motivos de performance
    (por: DSA)

Data: 07/01/2018
-- ACBrUtil --
[-] Ajuste em mtodo "StrCrypt", para suportar Parmetros vazios
[*] Mtodo "RetornarConteudoEntre", adicionado o parmetro "IncluiInicioFim: Boolean
    default False
    (por: DSA)

Data: 26/12/2017
-- ACBrUtil --
[*] Ajuste no mtodo "WriteToTXT", para no tentar gravar algo, se o nome do
    arquivo ou o contedo a ser gravado, no foi informado
    (por: DSA)

Data: 23/12/2017
-- ACBrUtil --
[*] Ajustes para compilao em POSIX
[*] Otimizaes no cdigo
[*] Mtodo "WriteToTXT", modificado para Criar o diretrio de Destino, caso o
    mesmo no exista, e se o Parmetro: "ForceDirectory" estiver True (default)
    (por: Waldir Paim e DSA)

Data: 07/12/2017
-- ACBrAAC --
[-] Ajuste para o correto calculo do CRC quando o mesmo arquivo  aberto em
    Windows e Linux
    (por: DSA)

Data: 04/12/2017
-- ACBrUtil --
[+] Adicionado o mtodo:
    procedure EncontrarInicioFinalTag(aText, ATag: ansistring;
       var PosIni, PosFim: integer);
    (por: Rafael Teno)

-- ACBr.inc --
[+] Adicionada nova diretiva, que por padro est desabilitada:
    {.$DEFINE DFE_SEM_XMLSEC}
    Descomente essa linha, se voc quer que seu Executvel NO dependa das DLLs
    de LibXMLSEC, mas continue suportando a LibXML2
    (por: DSA)

Data: 22/11/2017
-- ACBrUtil --
[*] Mtodo "RetornarConteudoEntre", movido de pcnAuxiliar para ACBrUtil
    (por: DSA)

Data: 01/11/2017
-- ACBrUtil --
[-] Correo no mtodo "ChangeLineBreak". Veja Testes em:
     ACBrUtilTest.ChangeLineBreakTest
    (por: DSA)

Data: 28/09/2017
-- ACBrUtil --
[-] Correo no mtodo "DesligarMaquina", para Linux... usando o comando
    "shutdown"   (por: DSA)

Data: 31/08/2017
-- GZIPUtils --
[-] Correo no mtodo "unzipStream". Em algumas raras situaes o Stream no
    era descompatado, pois o cdigo original da GZipUtils modificava o tamanho
    do Stream de Entrada, o que no  esperado pot "Tdecompressionstream"
    (por: DSA)

Data: 21/08/2017
-- ACBrCompress --
[+] Adicionada nova Unit para centralizar todo tratamento da compactao e
    descompactao de Strings e Streams, nos formatos ZLib, GZip e ZipFile.
    Faz o uso nativo das classes de compactao do Lazarus/Delphi.
    (por: DSA)

-- ACBrUtil --
[*] Mtodos Zip e UnZip, modificados para usar a Unit ACBrCompress
    (por: DSA)

-- ACBr.inc --
[*] Adicionado suporte a diretiva {$DEFINE USE_ZLibExGZ}, que permite usar as
    Units da biblioteca ZLibExGZ ao invs das nativas do Delphi.
    (Delphi XE e inferiores no tem suporte a GZip, nesse caso esta diretiva
     sempre estar ligada)
    (por: DSA)

Data: 14/07/2017
-- ACBrUtil --
[+] Adicionado os mtodos:
    function FindDelimiterInText(const AText: String; ADelimiters: String): Char;
      Encontra qual  o primeiro Delimitador usado, em "AText", em uma lista de
      delimitadores, informada em "ADelimiters".
      Se "ADelimiters" for vazio, usa como padro ";,|"
    function AddDelimitedTextToList(const AText: String; const ADelimiter: Char;
       AStringList: TStrings): Integer;
     Quebra a String "AText", em vrias linhas, separando-a de acordo com a ocorrncia
     de "ADelimiter", e adiciona os Itens encontrados em "AStringList".
     Retorna o nmero de Itens Inseridos
[+] Adicionado novos testes em "ACBrComumTesteCases" para os novos mtodos
    (por: DSA)

Data: 22/06/2017
-- ACBrUtil --
[+] Adicionado os mtodos:
    function IsWorkingDay(ADate: TDateTime): Boolean;
      Retornar True, se a Data for de Segunda a Sexta-feira. Falso para Sbado e
      Domingo
    function WorkingDaysBetween(StartDate,EndDate: TDateTime): Integer;
       Retornar o total de dias teis em um perodo de datas, exceto feriados.
    function IncWorkingDay(ADate: TDateTime; WorkingDays: Integer): TDatetime;
      Retornar uma data calculando apenas dias teis, a partir de uma data inicial,
      exceto feriados.
[+] Adicionado novos testes em "ACBrComumTesteCases" para os novos mtodos
    (por: Junior Santos e DSA)

Data: 08/06/2017
-- ACBrUtil --
[*] Ajuste no mtodo "UTF8ToNativeString", para que no retorne vazio, caso
    ocorra falha nas rotinas de converso de String, nativas do Delphi
    http://www.projetoacbr.com.br/forum/topic/36234-cancelamento-com-erro-nao-encontrei-final-elemento/

Data: 06/06/2017
-- ACBrUtil --
[+] Adicionado os mtodos:
    function IntToBEStr(AInteger: Integer; BytesStr: Integer = 2): AnsiString;
    function BEStrToInt(ABEStr: AnsiString): Integer;
    (por: DSA)

Data: 24/05/2017
-- ACBrUtil --
[*] Ajuste para compilao em 64bits em verses inferiores a XE2
    http://www.projetoacbr.com.br/forum/topic/36053-instalador-n%C3%A3o-compila-pacotes-para-delphi-102-tokyo-win64/?do=findComment&comment=241530
    (por: bsoft)

Data: 19/04/2017
-- ACBrUtil --
[-] Mtodo "TruncFix". Correo de A.V. "Invalid floating point operation", quando
    informado valores muito altos
[+] Mtodo "SimpleRoundToEX", passou a ser pblico
    (por: DSA)

Data: 12/04/2017
-- ACBr.inc --
[+] Adicionada a diretiva "DFE_SEM_NCRYPT", para permitir a compatibilidade em
    Windows XP  (o padro  desligada)
    http://www.projetoacbr.com.br/forum/topic/36219-ncryptdll-faltando-no-xp/
    (por: DSA)

Data: 19/03/2017
-- ACBr.inc --
[+] Adicionada a diretiva "HAS_INLINE", para FPC ou DELPHI9_UP
[*] Definio forada para "USE_MINGW" modificado para ficar ligado quando no for
    Windows   (por: DSA)

Data: 08/02/2017
-- ACBrUtil --
[*] Ajuste para que RoundABNT suporte valores vrias casas decimais.
    http://www.projetoacbr.com.br/forum/topic/35068-roundabnt-invalid-floating-point-operation/
    (por: PauloRSA)

Data: 06/01/2017
-- ACBrUtil --
[*] Mtodo "FloatMask", modificado a assunatura para:
    function FloatMask(const DecimalDigits: SmallInt; UseThousandSeparator: Boolean = True): String;
    Se "UseThousandSeparator = False", no retornar mascara com a incluso de
    Separadores de Milhar
    (por: DSA)

Data: 22/12/2016
-- ACBrUtil --
[*] Mudana pra lazarus entender a formatao.
    http://www.projetoacbr.com.br/forum/topic/33727-impress%C3%A3o-dos-campos-peso-aferido-kg-e-nome-do-motorista/
    http://www.projetoacbr.com.br/forum/topic/33721-impress%C3%A3o-do-campo-da-quantidade-de-volumes-e-tipo-rodado/
    por: Juliomar Marchetti
		
Data: 21/12/2016
-- ACBrUtil --
[+] Adicionado os mtodos:
    function Zip(S: TStream): AnsiString; overload;
    function Zip(const ABinaryString: AnsiString): AnsiString; overload;
    (por: DSA)

Data: 20/12/2016
-- ACBrUtil --
[*] FormatFloatBr e FloatMask. Ajuste para usar separador de milhar, na mascara
    padro ',0.00'   (por: DSA)

Data: 08/12/2016
-- ACBrUtil --
[+] Adio de mais um formatmask
    por: Juliomar Marchetti

Data: 24/10/2016
-- ACBr.inc --
[*] Ajuste para permitir a compilao em 32 e 64 bits com suporte a
    Libxml2, libxslt, libxmlsec compiladas por MinGw (default em Win64)
    ftp://ftp.zlatkovic.com/libxml/64bit/    (por: DSA)

Data: 23/09/2016
-- ACBrUtil --
[+] Adicionado o mtodo: function ForceForeground(AppHandle:HWND): boolean;
    para resolver problemas de Foco na troca de aplicaes  (por: DSA)
[+] Adicionado o mtodo:
    procedure WriteToFile(const Arq: String; ABinaryString: AnsiString);
    para facilitar a escrita de arquivos de qualquer Tipo  (por: DSA)

Data: 02/09/2016
-- ACBrConsts --
[-] Ajustado cTAGS_BARRAS e cTAGS_BARRAS_HELP que estavo com o nmero de elementos 
    errados ocasionando erro ao solicitar cTAGS_BARRAS_HELP[13].
    (por: Rodrigo Frhwirth)
[+] Adicionado enumerador QrCode para que posso ser implementado nas demais ECFs.
    (por: Rodrigo Frhwirth)

Data: 08/09/2016
--ACBrAAC, ACBrPAFClass
[+] Adio do campo data para guardar no arquivo criptografado e imprimir na ecf
    do paf-ecf 02.04
    http://www.projetoacbr.com.br/forum/index.php?showtopic=32295
    por: Juliomar Marchetti

Data: 29/08/2016
--ACBrAAC
[+] Adio do nmero do credenciamento ao arquivo para gerar o bloco X
    por : Juliomar Marchetti

Data: 29/08/2016
-- ACBrUtil --
[-] Correo no mtodo "TruncTo", onde poderia ocorrer falha em valores
    especficos... Nova Implementao, baseada em "TruncFix".
    Novo teste adicionado em "ACBrComumTestCases"  (por: DSA)

Data: 25/08/2016
-- ACBrUtil --
[*] Ajuste para os mtodos "FunctionDetect" e "UnLoadLibrary" funcionarem
    adequadamente em FPC 64 bits   (por: DSA)

Data: 19/08/2016
-- ACBrUtil --
[-] Correo em PadLeft, PadRight, PadCenter, PadSpace, para considerar o tamanho
    correto da String, com caracteres acentuados (UTF8) em FPC
[+] Adicionado o mtodo
    function LenghtNativeString(const AString: String): Integer;
[-] Correo no mtodo "FindSubDirectories", para correto funcionamento em Linux
    (por: DSA)

Data: 18/08/2016
-- ACBrUtil --
[-] Correo para o mtodo "TruncTo", que poderia falhar em alguns casos.
[+] Adicionado o mtodo "SimpleTruncTo", para auxiliar "TruncTo"
[+] Adicionado Teste Unitrio para TruncTo em ACBrUtilTest
    http://www.projetoacbr.com.br/forum/topic/31778-testecase/
    (por: Waldir Paim)

Data: 16/08/2016
-- ACBrUtil --
[+] Adicionado o mtodo "RemoveZerosEsquerda"   (por: DSA)
[-] Correo em "AjustaLinhas", para processar corretamente linhas vazias e
    "PadLinhas = True"

Data: 13/06/2016
-- ACBrUtil --
[+] Adicionado os mtodos  (por: DSA)
    "ConverteXMLtoNativeString":  Se XML contiver a TAG de encoding em UTF8, no
      seu incio, remove a TAG e converte o conteudo do mesmo para String Nativa
      da IDE
    "ObtemDeclaracaoXML": Retorna a Declarao do XML, Ex: <?xml version="1.0"?>
    "RemoverDeclaracaoXML": Retorna XML sem a Declarao.
	
Data: 12/08/2016
-- ACBrUtil --	
[*] Adicionada funo RemoveZerosEsquerda() movida da unit ACBrValidador no pacote ACBrDiversos.

Data: 23/03/2016
-- ACBrUtil --
[*] Nova Reviso de mtodos que usavam AnsiString, modificando-os quando possvel,
    para usar "String", a fim de diminuir o nmero de Warnings de compilao
    (por: Waldir Paim e DSA)
    http://www.projetoacbr.com.br/forum/topic/28345-remoo-de-hints-e-warning-do-acbr/?do=findComment&comment=191110

Data: 22/03/2016
-- ACBrUtil --
[*] Reviso de mtodos que usavam AnsiString, modificando-os quando possvel,
    para usar "String", a fim de diminuir o nmero de Warnings de compilao
    (por:DSA)

Data: 11/03/2016
-- ACBr.inc --
[+] Adicionada a diretiva USE_DELAYED. Que deve ser ligada caso o programador
    deseje utilizar a carga tardia de DLLs (OpenSSL e XMLSec)
    A diretiva ser desligada se a IDE no suportar carga tardia com "DELAYED"
    http://www.projetoacbr.com.br/forum/index.php?showtopic=28561

Data: 08/03/2016
-- ACBrUtil --
[-] RoundABNT: Correo para calculos com valores negativos  (por: DSA)

Data: 04/03/2016
-- ACBr.inc --
[*] Adicionada verificao para saber se est usando FPC 3.0.0 ou superior
[*] Adicionada verificao para saber se o compilador tem o mtodo "CharInSet"

-- ACBrUtil --
[*] Lazarus, usando "LConvEncoding" por default
[*] Mtodo "ACBrStrToUTF8" renomeado para "NativeStringToUTF8"
[+] Adicionado os mtodos:
    function UTF8ToNativeString( AUTF8String : AnsiString ) : String;
    function NativeStringToAnsi( AString : String ) : AnsiString;
    function AnsiToNativeString( AAnsiString : AnsiString ) : String;
[*] Simplificao dos mtodos "ACBrStr" e "ACBrStrToAnsi", para Lazarus
[+] Adicionado o mtodo "CharInSet" se no estiver definido HAS_CHARINSET


Data: 26/02/2016
-- ACBrConsts --
[+] Adicionadas constantes para manipulao de Encoding UTF8

-- ACBrUtil --
[+] function ACBrUTF8ToAnsi( UTF8String : AnsiString ) : AnsiString;
    Converte uma String que est em UTF8 para ANSI, considerando as diferetes IDEs
    suportadas pelo ACBr

[+] function ACBrAnsiToUTF8( AAnsiString : AnsiString ) : AnsiString;
    Converte uma String que est em ANSI para UTF8, considerando as diferetes IDEs
    suportadas pelo ACBr

Data: 22/02/2016
-- ACBrUtil --
[*] RoundABNT, aplicado workaround para funcionamento em D7
    (problemas com funo "frac")
[*] CreateFormatSettings, modificado para considerar os valores atribudos as
    variveis Globais de ACBrUtil ex: "ThousandSeparator" (Delphi XE)
[*] StringToBinaryString, aplicado workaround para funcionamento em D7
    (problemas com StringReplace contendo caracter Nulo (#0)

Data: 10/12/2015
-- ACBrUtil --     (por: DSA)
[+] Adicionado os mtodos:
    function StrIsHexa(const S: String): Boolean;
    function CharIsHexa(const C: Char): Boolean;
[-] Correo em "StringToBinaryString" para no se confundir com Strings no
    Hexa (Ex: '\xml')

Data: 04/12/2015
-- ACBrUtil --
[-] Correo em RoundABNT, para evitar Erro de oveerflow em valores grandes
    (por: DSA)

Data: 13/11/2015
-- ACBrUtil --
[*] Ajuste em "FloatToString", para no remover o ThousandSeparator se ele for
    identico a DecimalSeparator
    http://www.projetoacbr.com.br/forum/index.php?showtopic=25929

Data: 18/09/2015
-- ACBrUtil --         (por: DSA)
[*] ACBrStr modificada para no tentar converter para UTF8, mas sim para UNICODE
    nas IDEs de Delphi XE
[*] ParseText modificada para no tentar converter de UTF8 para String nativa
    quando estiver efetuando um "Encode"

Data: 16/09/2015
-- ACBrUtil --         (por: DSA)
[+] Adiconado o mtodo:
    function ACBrStrToUTF8( AString : String ) : AnsiString;
    que pode ser usado para converter uma String nativa da IDE para UTF8

Data: 08/09/2015       (por: DSA)
-- ACBrUtil --
[-] Correo em "StripHTML", problema de Loop Infinito, quando usando Tags sem
    fechamento Ex: "><".
[+] Adicionado o mtodo: AcharProximaTag(const AString: AnsiString;
     const PosIni: Integer; var ATag: AnsiString; var PosTag: Integer);
     usado por StripHTML e TagProcessor

Data: 31/07/2015       (por: DSA)
-- ACBrUtil --
[-] Correo em "QuebraLinhas", quando o LineBreak era no mesmo ponto da Quebra

Data: 26/07/2015       (por: DSA)
-- ACBrUtil --
[+] Movido os seguintes mtodos de ACBrDFeUtil
function XmlEhUTF8(const AXML: String): Boolean;
function ConverteXMLtoUTF8(const AXML: String): String;

[*] Mtodo "QuebraLinhas" modificado para respeitar as Quebras de Linha 
   existentes no texto

Data: 14/07/2015       (por: Regys Silveira)
-- ACBrUtil --
[*] Adicionado overload de FormatFloatBr com parametro de mascara pre-definida.

Data: 06/07/2015       (por: DSA)
-- ACBrUtil --
[*] Ajuste para no carregar inpout32 e BlockInput na inicializao do sistema
    sem necessidade

Data: 04/05/2015       (por: DSA)
-- ACBrUtil --
[+] Adicionado o mtodo: OnlyCharsInSet

-- ACBrConsts --
[*] Modificao dos Arrays de Tags de formatao

Data: 22/12/2014
-- ACBrTXTClass --  (por: DSA)
[-] Ajustes para algumas situaes de erro de calculo de arredondamento em LFILL

Data: 20/12/2014   
-- ACBrBase --    (por: DSA)
[+] Adicionado evento padro para chamada de Log:
    TACBrGravarLog = procedure(const ALogLine: String; var Tratado: Boolean) of object ;

Data: 27/11/2014
[-] Corrigido problema na unit DFeUtil onde estava errado o Define impossibilitando
	compilar no lazarus
	Por: Juliomar
	
Data: 21/11/2014
-- ACBrEAD --        (por: DSA)
[+] Adicionada Propriedade "BufferSize: Integer" default 32768
    ( Valor de Bytes a serem lidos a cada interao nos Calculos )
[+] Adicionado evento: OnProgress = procedure(const PosByte, TotalSize: Int64)
    ( Chamado a cada Interao do Calculo )
[*] Mtodos: RemoveEAD, VerificarEAD, CalcularHash, CalcularAssinatura, CalcularEAD
    modificados para receber um tipo TStream ao inves de apenas TMemoryStream
[*] Mtodos: CalcularHashArquivo, CalcularAssinaturaArquivo, CalcularEADArquivo
    modificados, para permitir o calculo Hashs e Digest em arquivos gigantescos,
    e diminuir o consumo de memria
[-] Corrigido Bug no mtodo CalcularEAD(const AStream: TStream) que sempre
    adicionava "LineBreak" no calculo do Hash do arquivo.
[*] Mtodo AssinarArquivoComEAD modificado para verificar se precisa adicionar
    "LineBreak" no final do Arquivo, antes de calcular o EAD.
[+] Adicionado os mtodos: LeEADArquivo(const NomeArquivo: String): AnsiString;
    LeEAD(AStream: TStream): AnsiString; que Retornam o EAD encontrado no
    final do arquivo, se o mesmo existir.
[*] Refactoring em CalcularEAD(const AStream: TStream), para usar o mtodo
    "InternalDigest"
[*] Mtodos InternalDigest modificado para permitir o calculo em Streams
    genricos e arquivos gigantescos
[*] Mtodo "VerificarEAD" modificado para permitir o calculo em Streams
    genricos e arquivos gigantescos

-- EADTeste --
[*] Demos de Delphi e Lazarus modificados para demonstrar as novas propriedades
    mtodos e eventos.


Data: 29/10/2014
-- ACBrEAD --        (por: DSA)
[+] Adicionado suporte ao algortimo sha256
[+] Criado novo Tipo: TACBrEADDgstOutput = (outHexa, outBase64) ;
    que pode ser informado nos mtodos: CalcularHashArquivo, CalcularHash,
    CalcularAssinaturaArquivo, CalcularAssinatura
[*] Mtodos: CalcularHashArquivo, CalcularHash, modificados para receber como
    parmetro o Tipo de saida (OutputType: TACBrEADDgstOutput = outHexa)
[+] Adicionado os mtodos:
    function CalcularAssinaturaArquivo( const NomeArquivo: String;
       const Digest: TACBrEADDgst;
       const OutputType: TACBrEADDgstOutput = outHexa ): AnsiString ; overload ;
    function CalcularAssinatura( const AString : AnsiString;
       const Digest: TACBrEADDgst;
       const OutputType: TACBrEADDgstOutput = outHexa ): AnsiString ; overload ;
    function CalcularAssinatura( const AStringList : TStringList;
       const Digest: TACBrEADDgst;
       const OutputType: TACBrEADDgstOutput = outHexa ): AnsiString ; overload ;
    function CalcularAssinatura( const MS : TMemoryStream;
       const Digest: TACBrEADDgst;
       const OutputType: TACBrEADDgstOutput = outHexa ): AnsiString ; overload ;
[*] Ajuste nos Demos "EADTeste" de Delphi e Lazarus, para demonstrar e testar os
    novos mtodos.
[*] Pacote "ACBrComum" de Delphi e Lazarus modificado para conter dependencia
    do pacote "synapse"

Data: 20/10/2014
-- ACBrSpedFiscal --
[-] Corrigido problema com validao de variant para number, alterado ACBrTXTClass.pas na funo VLFill
    para utilizar nativa do delphi/lazarus VarIsNumeric.
	http://www.projetoacbr.com.br/forum/index.php?/topic/17921-aliq-icms-com-decimal/
	por: Juliomar Marchetti
	
Data: 08/10/2014
-- ACBrDFeUtil 
[-] Corrigito o calculo do DV na Funo Modulo 11.
    por: Italo Jurisato Junior 

Data: 28/05/2014
-- ACBrTXT ( por Isaque Pinheiro)
[*] Renomeado a funo LFill() com o tipo Variant para VLFill() para resolver
    problemas apresentados em verses adiversas do Delphi.

Data: 23/05/2014
-- ACBrTXT ( por Isaque Pinheiro)
[+] Adicionada a funo:
    LFill(Value: Variant;
          Size: Integer;
          Decimal: Integer;
          Caracter: Char;
          Mascara: String): String;
    Funo de sobrecarga com parmetro do tipo Variant para aceitar valor NULL.

Data: 23/05/2014
-- ACBrUtil
[+] Adicionada a funo:
    IsNumber(const Value: Variant): Boolean;
    Funo para checar se o contedo passado para ela  um valor numrico, usa
    a funo, nativa do delphi e lazaruz, Val() para reconhecimento.

Data: 12/09/2013
-- ACBrAAC --
[*] Modificao para no apagar os valores default do componente caso o arquivo
    AAC seja invlido... (isso permite re-criar o arquivo)      (por: DSA)

Data: 07/08/2013
-- ACBrUtil --
[+] Adicionada a funo:                                              (por: DSA)
    CompareVersions(const VersionStr1, VersionStr2: String; Delimiter: char ): Extended;
 Compara 2 Strings de controle de verso. Delimiter padro = '.'
 Retorna 0 se VersionStr1 = VersionStr2
 Retorna Valor Negativo se VersionStr1 < VersionStr2
 Retorna Valor Positivo se VersionStr1 > VersionStr2
 Retorna valor indicando as diferenas encontras de acordo com os niveis. Ex:
 1.0.3; 1=Major=100, 0=Minor=10, 3=Build=1
 VersionStr1 VersionStr2       Result
    1.0.3      1.0.4        0 + 0 -1 = -1
    1.2.5      1.1.4        0 +10 +1 = 11
    2.0.3      1.2.9       100-10 -1 = 89

Data: 24/07/2013
-- ACBrUtil --
[+] Adicionada a funo:                                              (por: DSA)
    FloatToIntStr(const AValue: Double; const DecimalDigits: SmallInt = 2): String;
    Converte um Double para string, SEM o separator decimal, considerando as
     decimais como parte final da String. Ex: 100,00 = "10000"; 1,23 = "123"

Data: 05/04/2013
-- ACBrUtil --
[+] Adicionado os metodos para converso de Inteiros em Strings binrias no
    formato Little Endian   (por: DSA)
    function IntToLEStr(AInteger: Integer; BytesStr: Integer = 2): AnsiString;
    function LEStrToInt(ALEStr: AnsiString): Integer;

Data: 04/04/2013
-- ACBrBase --
[+] Tratamento para compilar no D6
    (por: Isaque Pinheiro)

Data: 01/04/2013
-- ACBrBase --
[+] Adicionado os mtodos TACBrInformacoes.SaveToFile( AFileName: String) e
    TACBrInformacoes.LoadFromFile( AFileName: String)   (por: DSA)

Data: 27/03/2013
-- ACBrUtil --
[*] Ajustes para compilao em 64 bits (por: DSA)

Data: 17/03/2013
-- ACBr.inc --
[*] Ajuste para compilar corretamente nas ltimas verses do Lazarus e
    FPC 2.7.1, que por padro trazem a diretiva "CONSOLE" ligada   (por: DSA)

Data: 28/02/2013
-- ACBrAAC --
[*] Melhoria na gravao dos Logs   (por: DSA)

-- ACBrConsts --
[*] Remoo da exibio dos Valores do Grande Total na Mensagem de erro de
    divergncia do G.T. (a pedido de homologador PAF-ECF)     (por: DSA)

Data: 14/02/2013
-- ACBrUtil --
[+] Funo DesligarMaquina modificada para permitir efetuar apenas o LogOff
    DesligarMaquina(Reboot: Boolean = False; Forcar: Boolean = False;
                    LogOff: Boolean = False) ;                        (por: DSA)

Data: 01/02/2013
-- ACBrAAC --
[-] Correo para gravar a propriedade paraiba legal
    (Regys Silveira)

Data: 28/01/2013
-- ACBrUtil --
[+] Adicionada funo para ler conteudo de Tags de XML   (por: DSA)
    function LerTagXML( const AXML, ATag: String; IgnoreCase: Boolean = True) : String;
[-] Corrigido bug em DecodeToSys, quando operando com Parmetros utf-8

Data: 20/12/2012
-- ACBrUtil --
[*] Modificao em ACBrStr, para usar o mtodo: SysToUTF8 quando for Lazarus/FPC

22/11/2012
-- ACBrDFeUtil
[+] Unificao de funes de mesma funcionalidade das units:
    ACBrNFeUtil, ACBrNFEsUtil, ACBrCTeUtil
    (por Isaque Pinheiro)

22/10/2012
-- ACBrPafClass --
[+] Adicionado a impresso do Nota Legal e do Parba Legal no relatrio de 
    configuraes do Paf-ECF. 
    (por: Regys Silveira)

13/09/2012
-- ACBrUtil --
[-] Corrigido Bug de perda de acentos em sistemas com Unicode na
    function ParseText      (por: DSA)

27/08/2012
-- ACBrUtil --
[-] Ajuste em RunCommand para compatibilizar com FPC 2.7.1     (por: DSA)

20/08/2012
-- ACBrEAD --
[-] Ajuste no mtodo RemoverEAD, para suportar arquivos assinados com linha de
    EAD que terminam com LineBreak    (por: DSA)

20/06/2012
-- ACBrEAD --
[-] Acertos gerais que estavam impedindo a validao da assinatura, algo a ver
    com a converso de strings e ansistrings.
[*] Acerto nas exception do EAD e mensagem quando quando no conseguir 
    validar o EAD
    (por: Regys Silveira)

23/05/2012
-- ACBrAAC --
[+] Adicionado a propriedade virtual "ArquivoInvalido". Aps executar um comando
    e o mesmo detectar que o arquivo  invlido, podemos antes de disparar os demais 
    comandos, checar se o arquivo j foi invlidado, evitando assim achecagem 
    desnecessria por cada comando disparado. (por: Isaque Pinheiro)
[+] Implementado recurso para identificar se o arquivo auxiliar foi modificado
    ou editado por programas de terceiros, disparando mensagem de arquivo 
    invlido (por: Isaque Pinheiro e DSA)

08/05/2012
-- ACBrBase --
[+] Remoo de warning do ACBrBase para mtodos deprecated.
    (por: Regys Silveira)

06/05/2012
-- ACBrEAD --
[+] Adicionado mtodo: Function RemoveEAD( MS : TMemoryStream ) : AnsiString;
    (por: DSA)
[*] Mtodo: AssinarArquivoComEAD modificado para ser compatvel com arquivos que
    no usam a mesma quebra de Linha do Sistema Operacional.
    - Adicionada deteco da presena de quebra de linha no final do arquivo
      antes de adicionar a linha do EAD         (por: DSA)
[*] Mtodo: RemoveEADArquivo modificado para ser compatvel com arquivos que
    no usam a mesma quebra de Linha do Sistema Operacional.    (por: DSA)

01/05/2012
-- ACBrEAD --
[+] Adicionada Function CalcularChavePublica_eECFc( ArquivoXML: String) : AnsiString;
    que permite converter um arquivo no formado XML do padro eECFc para uma
    chave Pblica no formado OpenSSL  (por: DSA)
[*] Evento OnGetChavePublica modificado para aceitar Chaves no formato do
    arquivo XML usado pelo programa eECFc. Basta ler o Conteudo deste arquivo
    e informar o mesmo para a varivel "Chave" passada por referncia no evento.
    O ACBrEAD usar as Tags <modulo> e <expoente_publico> para computar a chave
    Publica e proceder com a verificao das assinaturas EAD  (por: DSA)

02/02/2012
-- ACBrEAD --
[*] Remoo das warnings por converso de string.
    (Rgys Silveira)

30/04/2012
-- ACBrEAD, ACBrUtil --
[*] Remoo das warnings por converso de string.
    (Rgys Silveira)

04/04/2012
-- ACBrUtil --
[*] Otimizao na funo AjustaLinhas  (DSA)

22/03/2012
-- ACBrAAC --
[-] Ocorria erro quando o arquivo era criado em branco e quando no se 
    habilitava a gravao de algumas sesses
    (por: Regys Silveira)

15/03/2012
-- ACBrAAC --
[+] Criado novo evento: OnVerificarRecomporNumSerie
    procedure( const NumSerie: String; const ValorGT : Double; var CRO: Integer;
               var CNI: Integer)
    Ser disparado quando o ACBrAAC no encontrar o Numero de Srie do ECF na
    lista de ECFs liberados, o que pode ocorrer quando o arquivo estiver
    corrimpido    (Por: DSA)

[+] Criada nova propriedade: IdentPAF.Paf.RecompoeNumSerie : Boolean
    Se for True, e no encontar o Num.Serie, tenta executar o evento
    OnVerificarRecomporNumSerie   (por: DSA)

[*] Evento OnVerificarRecomporValorGT somente ser disparado quando:
    sIdentPAF.Paf.RecompoeGT = True    (por: DSA)

-- TACBrTXTClass --
[*]  Mtodo TACBrTXTClass.WriteBuffer modificado para nao criar arquivos
     como UTF8, o que pode causar problemas nos programas de validao.
     Problema ocorria WinXP, em Sistemas compilados com IDE com suporte a
     Unicode     (por: DSA)

-- ACBrUtil --
[*]  Pequena otimizao na function: WriteToTXT   (por: DSA)

Data: 01/03/2012
-- ACBrPAF --
[-] Tentativa de correo da Ordanao da Lista DAVs Emitidos (DSA)

06/02/2012
-- ACBrAAC --
[+] Adicionada verificao de CRC na Gravacao/Abertura do arquivo AAC. Para
    testar por corrupo de dados (por: DSA)

02/02/2012
-- ACBrAAC, ACBrPaf --
[*] Adio do campo de Codigo Nacional de Identificao do ECF ao AAC
    conforme tpico: http://djsystem.com.br/acbr/forum/viewtopic.php?f=20&t=3048
    merge: RBS

17/01/2012
-- ACBrAAC, ACBrPAF --
[*] Adio de novos campos que devem ser informados no relatrio de configurao
    do paf-ECF, gravao dos campos no arquivo auxiliar.
    por: Rgys Silveira

05/12/2011
-- ACBrNFe2 --
[*] Incluso de diretivas de compilao para o Delphi XE2 nos Danfes para RAVE
    por: juaumkiko

29/11/2011
-- ACBrEAD --
[*] Adicionadas as configuraes do Paf-ECF ao AAC
    por: Rgys Silveira

20/10/2011
-- ACBrEAD --
[*] Acerto no mtodo UnLoadLibrary para compilar no delphi 9 acima
    por: Rgys Silveira

20/10/2011
-- ACBrEAD --
[+] Adicionado o mtodo:
    procedure TACBrEAD.RemoveEADArquivo(const NomeArquivo : String)

24/08/2011
-- ACBrAAC --
[-] Acerto no mtodo que atualizao do MD5.

11/08/2011
-- ACBrAAC --
[+] Adicionada a propriedade EfetuarFlush : Boolean = True
    Se True, chama rotina que descarrega Cache de memria no disco, para
    garantir a gravao do arquivo.

-- ACBrUtil --
[+] Adicionada a funo: FlushToDisk(sDriveLetter: string): boolean;

Data: 27/07/2011
-- ACBrUtil --
[-] Corrigido o mtodo AjustaLinhas para considerar as tags de formatao
    estava colocando a quebra de linha no meio delas e causando erros
    (por: Rgys Silveira)

Data: 05/06/2011
-- ACBTXTClass --
[-] Corrigido o mtodo DFill, que ao receber o parametro DFill(15.00, 3)
    retornava 15 e o correto pelo Guia Pratico deveria voltar 15,000
    (por Isaque Pinheiro)

Data: 03/06/2011
-- ACBPAFClass --
[*] Recebeu as class "TACBrECFDAV" e "TACBrECFDAVs" que estavam em ACBrECFClass 
    (por: Isaque Pinheiro)

01/06/2011
-- ACBrAAC --
[*] Ampla reforma nas propriedades de Identificao da S.H. e PAF, que foram
    substiuidas por tipos j existente no ABCrECF, mais completos e organizados
  ACBrAAC1.SH_RazaoSocial -> ACBrAAC1.IdentPAF.Empresa.RazaoSocial
  ACBrAAC1.SH_CNPJ        -> ACBrAAC1.IdentPAF.Empresa.CNPJ
  ACBrAAC1.SH_IM          -> ACBrAAC1.IdentPAF.Empresa.IM
  ACBrAAC1.SH_IE          -> ACBrAAC1.IdentPAF.Empresa.IE
  ACBrAAC1.PAF_Nome       -> ACBrAAC1.IdentPAF.Paf.Nome
  ACBrAAC1.PAF_Versao     -> ACBrAAC1.IdentPAF.Paf.Versao
  ACBrAAC1.PAF_MD5        -> ACBrAAC1.IdentPAF.ArquivoListaAutenticados.MD5

  Nota: Apesar da modificao os arquivos AAC gerados continuam compatveis.

[*] A Class "TACBrECFIdentificacaoPAF", que era instanciada avulsa, para guardar 
    informaes, passou a fazer parte do componente ACBrAAC, basta agora alimentar
    a propriedade IdentPAF do ACBrAAC, la esto todas as informaes necessrias
    (por Isaque Pinheiro)

[*] Melhor integrado com ACBrPAF. Quando inteligados com o ACBrPAF, se o ACBrAAC 
    tiver nele todos os dados, os registros N1, N2 e N3, sero automaticamente 
    preenchidos necessitando apenas chamar o mtodo ACBrPAF.SaveFileTXT_N(NomeArquivo), 
    para que o arquivo seja gerado e o MD5 seja atualizado no arquivo auxiliar.

   Nota: Caso no tenha todos os dados no ACBrAAC, poder alimentar as informaes
         manualmente antes de chamar o mtodo ACBrPAF.SaveFileTXT_N(NomeArquivo);

[*] Melhor integrado com o ACBrECF. Quando interligados o ACBrECF e a 
    propriedade ACBrAAC.IdentPAF, recebe todas as informaes que antes era 
    armazenadas em uma class "TACBrECFIdentificacaoPAF", essa proprieade ser 
    usada como parametro para a impresso da identificao do PAF-ECF pelo mtodo 
    do MF(PafMF_RelIdentificacaoPafECF;) bastando chamar o mtodo sem parametro.

   Nota: Caso no esteja interligado ao ACBrECF, mas queira usar a propriedade
         ACBrAAC.IdentPAF, para no ter que instanciar uma class 
         "TACBrECFIdentificacaoPAF", poder chamar o mtodo do MF passando a 
         propriedade como parametro:
         PafMF_RelIdentificacaoPafECF(ACBrAAC.IdentPAF);

12/05/2011
-- ACBrAAC --
[+] Adicionado o Evento "VerificarRecomporValorGT", que ser chamado sempre que
    o ACBrAAC detectar que o Valor do G.T. no confere com o do arquivo... Nesse 
    caso, programe o Evento, e caso a recuperao do GT seja permitida (de acordo 
    com as regras do PAF-ECF), informe na varivel ValorGT o valor correto. O 
    componente ACBrAAC ir atualizar o GT no arquivo e NAO informar o Erro -2
    (por: DSA)

09/05/2011
-- ACBrAAC --
[*] Componente ACBrAAC volta para o Package ACBrComum, para poder ser usado por
    ACBrECF e ACBrPAF.. (por: DSA)   
	** NOTA: Isso exige a completa re-instalao dos Packages ACBrComum e ACBrSerial

	05/05/2011
-- ACBrArqAuxCriptografado
[+] Componente movido para ACBrSerial, por favor leia ACBrSerial-change-log.txt

04/04/2011
-- ACBrEAD
[+] Mtodos para gerao do MD5 de arquivos e strings diretamente.
    por: Rgys Silveira

28/03/2011
-- ACBrArqAuxCriptografado
[+] Novo componente para controle do arquivo auxiliar criptografado do PAF-ECF
    por: Rgys Silveira

22/02/2011
-- ACBrEAD --
[*] Mtodos de MD5 modificados para permitir todos os mecanismos de Digest do
    OpenSSL. permitindo os seguintes calculos de HASH: (MD2, MD4, MD5, RMD160,
    SHA, SHA1).
    Infelizmente isso "quebrou" a assinatura do componente, mas o ajuste 
    rpido. Exemplo:
    ACBrEAD1.CalcularMD5Arquivo( StrArqEntrada )              mudou para:
    ACBrEAD1.CalcularHashArquivo( StrArqEntrada, dgstMD5 )

01/02/2011
-- ACBrEAD --
[*] Unit ACBrEAD modificada para se tornar um componente. Portanto o package
    ===>>> ACBrComum PRECISA SER RE-COMPILADO e INSTALADO <<<===

[+] Novo componente ACBrEAD destinado a ser uma interface com o OpenSSL para
    Fazer e Verificar assinatura digital, usando chaves RSA, implementando os
    seguinte mtodos:

    Procedure GerarChaves( var AChavePublica : AnsiString;
       var AChavePrivada : AnsiString ) ;
    function AssinarArquivoComEAD( const NomeArquivo: String) : AnsiString ;
    function VerificarEADArquivo( const NomeArquivo: String): Boolean ; overload ;
    function VerificarEAD( const AString : AnsiString): Boolean ; overload ;
    function VerificarEAD( const AStringList : TStringList): Boolean ; overload ;
    function VerificarEAD( const MS : TMemoryStream; EAD: AnsiString):
       Boolean ; overload ;
    Function GerarXMLeECFc( const NomeSwHouse, Diretorio : String ) : Boolean ;
    Procedure CalcularModuloeExpoente( var Modulo, Expoente : AnsiString );
    Function CalcularChavePublica : AnsiString ;
    function CalcularMD5Arquivo( const NomeArquivo: String): AnsiString ; overload ;
    function CalcularMD5( const AString : AnsiString): AnsiString ; overload ;
    function CalcularMD5( const AStringList : TStringList): AnsiString ; overload ;
    function CalcularMD5( const MS : TMemoryStream): AnsiString ; overload ;
    function CalcularEADArquivo( const NomeArquivo: String): AnsiString ; overload ;
    function CalcularEAD( const AString : AnsiString): AnsiString ; overload ;
    function CalcularEAD( const AStringList : TStringList): AnsiString ; overload ;
    function CalcularEAD( const MS : TMemoryStream): AnsiString ; overload ;

    - Veja na pasta ACBr\Exemplos\ACBrEAD projetos com Exemplos de uso para uma
      melhor compreenso de como usar o componente...
    - No Delphi isso causar a dependencia esttica da DLL libeay32.dll em todos
      os programas que usem os componentes ACBrECF, ACBrRFD ou ACBrPAF
    - A DLL pode ser encontrada em: ACBr\DLLs\OpenSSL
    - Copie-a para a pasta do seu executvel.

