Jump to content

2 Dia do ACBr

Visite Stands dos Patrocinadores
Control iD, CS Devices, Elgin, Gertec, Bematech, Jetway, PlugMobile, Epson, Custom e Sweda
Inscreva-se

Nova Loja Oficial
loja.projetoacbr.com.br
Ajude o projeto a crescer, com estilo

Comprar

Balança SM100 performance surpreendente

Tecnologia Japonesa   Teclado e Visor resistentes a água
Consumo inteligente de etiquetas   Baixo custo de manutenção
Comunicação Ethernet e WIFI independentes

Saiba mais

Impressora de Etiquetas ELGIN - L42 PRO

Protocolos PPLA, PPLB, ZPL, EPL (automático)
Porta USB padrão Opcionais: Ethernet, Serial, Paralela
Sensor de Etiquetas Móvel Garantia de 18 meses

Saiba mais

OFF-TI

Importar as assinaturas via C#?

Recommended Posts

Olá, 

Gostaria de saber se há porte da "ACBRSAT32.dll" para importar as assinaturas via C#?

Exemplo:

[DllImport("ACBRSAT32.dll")]
public static extern string Inicializar()

string ret = ACBrSAT32.Inicializar();

Grato.

Share this post


Link to post
Share on other sites

No SVN tem os Imports já prontos em "Projetos\ACBrLib\Demos\Sat\C#\Imports".

E neste link você encontra o demo em Alto Nivel em C#.

  • Like 1

Consultor SAC ACBr Rafael Dias
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

ACBrFramework Desenvolvedor ACBrFramework.

 

Share this post


Link to post
Share on other sites

Olá,

 

Baixei o arquivo Cdecl.zip, com a ACBrSAT32.dll versão 0.0.1.0 

ACBr\Projetos\ACBrLib\Demos\Sat\C#\Demo\ACBrLibSat.Demo\bin\Debug\ACBrSAT32.dll 

var ret = ACBrSat.SAT_Inicializar("".ToUTF8(), "".ToUTF8());  

System.DllNotFoundException: 'Não é possível carregar a DLL 'ACBrSAT32.dll': Não foi possível encontrar o módulo especificado. (Exceção de HRESULT: 0x8007007E)'

obs: como gerar as dll?

private const string ACBr = "ACBrSAT32.dll";

private const string ACBr = "ACBrETQ32.dll";

private const string ACBr = "ACBrMail32.dll";

private const string ACBr = "ACBrPosPrinter32.dll";

 

 

Share this post


Link to post
Share on other sites

As dll precisa estar em algum Path do windows ou no mesmo local do executavel no caso na pasta "bin\debug" ou "bin\release", também é necessário as dll do OpenSSL e LibXml2 você encontra as mesma no SVN em "DLLs\LibXml2\x86" e "DLLs\OpenSSL\1.0.2.13\x86", a dll não podem ficar junto do download pois as dll de openssl e libxml2 tem o mesmo nome tanto em x64 como em x86.

Para compilar as dlls vocês precisa.

  1. Baixar os fontes do SVN.
  2. Instalar o Lazarus.
  3. Instalar os componentes ACBr no Lazarus.
  4. Abrir o projeto da lib que você deseja que estarão na pasta "Projetos\ACBrLib\Fontes" dos fontes.

Consultor SAC ACBr Rafael Dias
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

ACBrFramework Desenvolvedor ACBrFramework.

 

Share this post


Link to post
Share on other sites

Olá,

Copiei as dll´s acima e ao ativar o sistema mostrou o a tela e mostrou o erro:

// Inicializando a dll
var ret = ACBrSat.SAT_Inicializar("ACBrLib.ini".ToUTF8(), "123456".ToUTF8());
System.ApplicationException: 'Chave não existe no arquivo de configuração'

obs: ACBrLib.ini criado com sucesso!

Share this post


Link to post
Share on other sites

Olá,.

Eu estudei os fontes em pascal e em C#, já uso ACBrMonitorPlus, no intuído de apreender e ajudar!

Mais eu queria tirar algumas duvidas!

1) Para eu ter acesso as dll´s (ACBrSAT32.dll, ACBrETQ32.dll", ACBrMail32.dll, ACBrPosPrinter32.dll), é necessário compilar projeto em pascal?

2) Não exite um ACBrStarKit_C# _1.0.0 com "DLLs\LibXml2\x86" e "DLLs\OpenSSL\1.0.2.13\x86" e mais as dll´s acima, com todo ambiente preparado para desenvolvimento com manual?

3) Será possível simplificar o desenvolvimento como no estilo pascal? 

Exemplo:

 ACBrSAT1.EnviarDadosVenda( mVendaEnviar.Text );

if (ACBrSAT1.Resposta.codigoDeRetorno == 6000) {...}

Grato.

Share this post


Link to post
Share on other sites
  1. Não será preciso vai ter os downloads disponíveis no fórum igual temos do ACBrMonitor.
  2. Podemos adicionar as mesma para Download sem problema.
  3. No demo de alto nível tem uma simplificação do uso da lib usando classe em vez de chamada direta da dll, mas o retorno ainda fico no estilo ini do monitor para o pessoal que já trabalha com ele ter um acesso melhor, lembrando que o retorno pode ser em xml, ini e json.
  • Like 1

Consultor SAC ACBr Rafael Dias
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

ACBrFramework Desenvolvedor ACBrFramework.

 

Share this post


Link to post
Share on other sites

Obrigado pelo pronto retorno,

Pelo que entendi por suas respostas o projeto está em homologação!

Quanto tempo você acredita ter uma biblioteca para podermos colocar em Produção?

Share this post


Link to post
Share on other sites

Olá,

Framework simplificado, exemplo SAT:

namespace ACBrFrameWork
{
    public class ACBrSAT32
    {         
        #region Comandos

        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_Ativar(string CNPJ, string cUF);
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_Inicializar();
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_Desinicializar();
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_AssociarAssinatura;
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_AssociarAssinatura(string CNPJ, string Assinatura);
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_Bloquear();
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_Desbloquear();
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_TrocarCodigoAtivacao(string codigoDeAtivacaoOuEmergencia, string opcao, string novoCodigo);
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_ConsultarSAT();
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_ConsultarStatusOperacional();
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_ConsultarNumeroSessao(string NumeroDeSessao);
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_AtualizaSoftware();
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_ComunicarCertificadoICPBRASIL();
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_ExtrairLogs(string CaminhoArquivo);
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_CriarCFe(string ArqINI);
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_CriarEnviarCFe(string ArqINI);
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_EnviarCFe(string ArqXML);
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_CancelarCFe(string ArqXMLVenda);
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_ImprimirExtratoVenda(string ArqXMLVenda, string NomeImpressora);
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_ImprimirExtratoResumido(string ArqXMLVenda, string NomeImpressora);
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_ImprimirExtratoCancelamento(string ArqXMLVenda, string ArqXMLCancelamento, string NomeImpressora);
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_GerarImpressaoFiscalMFe(string cArqXMLVenda, string cNomeImpressora);
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_TesteFimAFim(string ArqXMLVenda);
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_GerarPDFExtratoVenda(string ArqXMLVenda, string NomeArquivo);
        [DllImport("ACBrFrameWork32.dll")]
        public static extern int SAT_SetLogomarca(string nLogo)

        #endregion

        #region Retornos

        [DllImport("ACBrFrameWork32.dll")]
        public static extern string SAT_Arquivo();
        [DllImport("ACBrFrameWork32.dll")]
        public static extern string SAT_CodigoDeRetorno();
        [DllImport("ACBrFrameWork32.dll")]
        public static extern string SAT_NumeroSessao();
        [DllImport("ACBrFrameWork32.dll")]
        public static extern string SAT_ChaveAcesso();
        [DllImport("ACBrFrameWork32.dll")]
        public static extern string SAT_ArquivoXML();
        [DllImport("ACBrFrameWork32.dll")]
        public static extern bool SAT_VendaAprovada();
        [DllImport("ACBrFrameWork32.dll")]
        public static extern bool SAT_VendaCancelada();
        [DllImport("ACBrFrameWork32.dll")]
        public static extern bool SAT_TesteFimConcluido();
        [DllImport("ACBrFrameWork32.dll")]
        public static extern bool SAT_StatusOperacionalConcluido();
        [DllImport("ACBrFrameWork32.dll")]
        public static extern bool SAT_AtivacaoConcluido();
        [DllImport("ACBrFrameWork32.dll")]
        public static extern string SAT_CodigoDeErro();
        [DllImport("ACBrFrameWork32.dll")]
        public static extern string SAT_Mensagem();

        #endregion 

        #region TratarRetorno

        public static string TratarRetorno(int ret) {}

        #endregion

        #region Configuração

        [DllImport("ACBrFrameWork32.dll")]

        public static extern int SAT_ConfigLoad(string ArqINI);
        public static extern int SAT_ConfigSave(string ArqINI);

        #endregion

    }
}

Grato a Equipe ACBr

 

Share this post


Link to post
Share on other sites

Não esta em homologação pode ser usado em produção.

Esta sua interface em C# está incorreta, tem varias coisas ali que nem se quer existem.

Recomendo muito olhar o demo abaixo.
 

 

  • Like 1

Consultor SAC ACBr Rafael Dias
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

ACBrFramework Desenvolvedor ACBrFramework.

 

Share this post


Link to post
Share on other sites

Olá,

O modelo acima era apenas um ideia.

Eu baixei o seu novo demostrativo Enviado Ontem às 16:06

Mais o ACBrLib.Core, está apresentando erro para mim!

Pode auxiliar por favor!

 

projeto.PNG

Share this post


Link to post
Share on other sites

Olá Rafael,

> Restaurar Pacotes NuGet

Todos os pacotes já estão instalados e não há nada para ser restaurado.
Tempo Decorrido: 00:00:00.0658963
========== Concluído ==========

1>C:\Users\marco\Desktop\ACBr_C#\DemoCSharpSat\Shared\ACBrLib.Core\ACBrLib.Core.csproj(92,5): error : Este projeto faz referência a pacotes do NuGet que não estão presentes neste computador. Use a Restauração de Pacotes do NuGet para baixá-los.  Para obter mais informações, consulte http://go.microsoft.com/fwlink/?LinkID=322105. O arquivo ausente é ..\..\PosPrinter\Demos\packages\Fody.2.0.0\build\portable-net+sl+win+wpa+wp\Fody.targets.

obs: Comando executado Restaurar Pacotes NuGet, mais não encontra o pacote PosPrinter.

Share this post


Link to post
Share on other sites

 Baixei o exemplo e não compilou!

Fiz novamente procedimento de restaurar a NuGet

Todos os pacotes já estão instalados e não há nada para ser restaurado.
Tempo Decorrido: 00:00:00.0575676
========== Concluído ==========

Erro:   Este projeto faz referência a pacotes do NuGet que não estão presentes neste computador. Use a Restauração de Pacotes do NuGet para baixá-los.  Para obter mais informações, consulte http://go.microsoft.com/fwlink/?LinkID=322105. O arquivo ausente é ..\..\PosPrinter\Demos\packages\Fody.2.0.0\build\portable-net+sl+win+wpa+wp\Fody.targets.    ACBrLib.Core   

Procedimentos:

> Para compilar o mesmo basta baixar a versão CDECL da lib e colocar em Import\ACBrLibPosPrinter\Resources.

> ACBrSAT32.dll (copiado para pasta)

obs: Mesmo aviso como na lib anterior!

 


 

Share this post


Link to post
Share on other sites

Bom dia Rafael,

> Demo e Classe de Alto de Nivel em C# 20181211

>: Esta biblioteca necessita das dlls do OpenSSL e LibXml2 que se encontram no repositório SVN em "DLLs\LibXml2" e ""DLLs\OpenSSL\1.0.2.13\".

> ACBrSAT32.dll -> StdCall

>>> Perfeito compilou ACBrLibSat -

obs:    Como informar os parâmetros, para start da lib? ->  public ACBrSat(string eArqConfig = "", string eChaveCrypt = "") :

ps: Existe um manual ?

Grato.

sat_init.PNG

Edited by OFF-TI
anexo:Imagem configuração exceção

Share this post


Link to post
Share on other sites

Olá,

Rafael, pesquisando o fonte eu notei o seguinte:

 ACBrMonitorPlus 1.2.0.25

Parâmetro que está funcionando normalmente com SAT:

>>> satDinamico_stdcal

ACBrSAT.Inicializado
NumeroSessao: 373279 - Comando: ConsultarStatusOperacional
NumeroSessao: 373279 - Resposta:373279|10000|Resposta com sucesso|||900009261|DHCP|192.168.000.021|70:51:16:24:61:92|255.255.255.000|192.168.000.003|008.008.008.008|008.008.004.004|CONECTADO|ALTO|4 GB|14 MB|20181212083612|02.02.00|00.07|35181208723218000186599000092610054943431246|35180908723218000186599000092610053604998019|35181208723218000186599000092610054943431246|20180914105654|20181212080336|20160824|20210824|0

namespace ACBrLib.Sat

private class Delegates
{
   [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
    public delegate int SAT_Inicializar(string eArqConfig, string eChaveCrypt);
}

Troquei a ACBrSAT32.dll para versão ->  Cdecl

> Criou automaticamente o arquivo de ACBrLib.ini 

obs: CheckResult igual -3  (System.StackOverflowException: 'Exception of type 'System.StackOverflowException' was thrown.')

Grato.

sat_erro_3.PNG

Share this post


Link to post
Share on other sites

Uma coisa é a convenção de chamada da DLL do equipamento SAT e outra a do ACBrLibSAT

A versão da ACBrLibSAT dependerá de como a sua linguagem tem mais aptidão para instância-la... Creio que a classe em alto nível, desenvolvida pelo @Rafael Dias, usa por padrão CDECL...

O ACBrLibSAT, quando inicializada, fará a carga da DLL do Fabricante, para que a mesma fale com o SAT... A configuração de ACBrSAT.Modelo, diz respeito a como a DLL do fabricante foi construida... a grande maioria, usa satDinamico_stdcal , mas alguns como a Gertec e o Emulador de SP usam satDinamico_cdecl .. Usar o modelo errado, pode causar A.V.

  • Like 2

Consultor SAC ACBr

Daniel Simões de Almeida
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Share this post


Link to post
Share on other sites

Bom dia Daniel,

Segue a configuração:

Uso: Tanca [email protected] SDK, versão 2.0.0.0

em anexo arquivo log e ACBrLib.ini (criado automáticamente)

17/12/18 08:52:58:816 - Destravar
17/12/18 08:52:58:822 -    SetRetorno(0, )
17/12/18 08:52:58:829 - LIB_ConfigLerValor(SAT, NomeDLL)
17/12/18 08:52:58:834 -    Valor:, len:0
17/12/18 08:52:58:839 -    SetRetorno(0, )
17/12/18 08:52:58:845 - LIB_ConfigLerValor(SAT, Modelo)
17/12/18 08:52:58:850 -    Valor:0, len:1
17/12/18 08:52:58:855 -    SetRetorno(0, 0)
17/12/18 08:52:58:860 - LIB_ConfigLerValor(SAT, CodigoDeAtivacao)
17/12/18 08:52:58:865 -    Valor:, len:0
17/12/18 08:52:58:870 -    SetRetorno(0, )
17/12/18 08:52:58:875 - LIB_ConfigLerValor(SATConfig, infCFe_versaoDadosEnt)
17/12/18 08:52:58:880 -    Valor:0,07, len:4
17/12/18 08:52:58:885 -    SetRetorno(0, 0,07)
17/12/18 08:52:58:890 - LIB_ConfigLerValor(SATConfig, PaginaDeCodigo)
17/12/18 08:52:58:895 -    Valor:0, len:1
17/12/18 08:52:58:899 -    SetRetorno(0, 0)
17/12/18 08:52:58:904 - LIB_ConfigLerValor(SAT, SignAC)
17/12/18 08:52:58:908 -    Valor:, len:0
17/12/18 08:52:58:913 -    SetRetorno(0, )
17/12/18 08:52:58:919 - LIB_ConfigLerValor(SATConfigArquivos, SalvarCFe)
17/12/18 08:52:58:923 -    Valor:0, len:1
17/12/18 08:52:58:928 -    SetRetorno(0, 0)
17/12/18 08:52:58:940 - LIB_ConfigLerValor(SATConfigArquivos, SalvarEnvio)
17/12/18 08:52:58:945 -    Valor:0, len:1
17/12/18 08:52:58:952 -    SetRetorno(0, 0)
17/12/18 08:52:58:959 - LIB_ConfigLerValor(SATConfigArquivos, SalvarCFeCanc)
17/12/18 08:52:58:966 -    Valor:0, len:1
17/12/18 08:52:58:972 -    SetRetorno(0, 0)
17/12/18 08:52:58:979 - LIB_ConfigLerValor(SATConfigArquivos, SepararPorCNPJ)
17/12/18 08:52:58:984 -    Valor:0, len:1
17/12/18 08:52:58:990 -    SetRetorno(0, 0)
17/12/18 08:52:58:997 - LIB_ConfigLerValor(SATConfigArquivos, SepararPorDia)
17/12/18 08:52:59:003 -    Valor:0, len:1
17/12/18 08:52:59:008 -    SetRetorno(0, 0)
17/12/18 08:52:59:017 - LIB_ConfigLerValor(Extrato, Tipo)
17/12/18 08:52:59:022 -    Valor:0, len:1
17/12/18 08:52:59:027 -    SetRetorno(0, 0)
17/12/18 08:52:59:033 - LIB_ConfigLerValor(Extrato, NumCopias)
17/12/18 08:52:59:038 -    Valor:1, len:1
17/12/18 08:52:59:043 -    SetRetorno(0, 1)
17/12/18 08:52:59:047 - LIB_ConfigLerValor(Extrato, SoftwareHouse)
17/12/18 08:52:59:053 -    SetRetorno(-3, Chave não existe no arquivo de configuração)

===================================================================================================

17/12/18 08:52:59:060 - LIB_UltimoRetorno
17/12/18 08:52:59:065 -    Codigo:-3, Mensagem:Chave n[195][163]o existe no arquivo de configura[195][167][195][163]o

===================================================================================================

obs: [email protected] TANCA SDK. compatível com a versão ACBrMonitorPLUS 1.2.025

Qualquer coisa me prontifico caso necessário a disponibilizar o terminal para remoto e testes!

ps: Ao mostrar a janela de configuração já mostra a mensagem, será que tenho que configurar editando o arquivo ACBrLib.ini?

Grato.

sat-ini-log.PNG

Edited by OFF-TI
observações

Share this post


Link to post
Share on other sites
Em 17/12/2018 at 09:02, OFF-TI disse:

17/12/18 08:52:59:060 - LIB_UltimoRetorno
17/12/18 08:52:59:065 -    Codigo:-3, Mensagem:Chave n[195][163]o existe no arquivo de configura[195][167][195][163]o

Faltou anexar o INI de configuração.. o erro acima, é porque essa chave não existe no INI

Você conseguiu rodar o Demo na sua linguagem ? é bem mais simples iniciar por ele..

  • Like 1

Consultor SAC ACBr

Daniel Simões de Almeida
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Share this post


Link to post
Share on other sites

Acabei de enviar uma nova versão do Demo pois o Antigo estava com as Chaves Antigas de antes do Refactory das impressões, o manual vai estar sendo enviado amanha para download.
 

 

  • Like 1

Consultor SAC ACBr Rafael Dias
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

ACBrFramework Desenvolvedor ACBrFramework.

 

Share this post


Link to post
Share on other sites

Bom dia Pessoal.

Grato pelo pronto atendimento:

Sim, muito fácil a Equipe ACBr realmente é muito qualificada e tenho certeza que será um sucesso está nova fase!

Segue em anexo arquivo log e ini e demais telas para analise;

obs: Abriu o form de configuração, mais não pode gravar os parametros!!! 

Grato.

 

SAT_DLL_BUG2.PNG

sat_dll_bug1.PNG

ACBrLib.ini

ACBrLibSAT-20181220.log

Share this post


Link to post
Share on other sites

Olha eu montei uma VM baixei o demo do Site, copie as dll do ACBrSat (Cdecl) e as dll do OpenSSL e LibXml2, e não consegui emular este problema.

Obs: todas as dll foram x86 pois o demo é 32 bits.

 

  • Like 1

Consultor SAC ACBr Rafael Dias
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

ACBrFramework Desenvolvedor ACBrFramework.

 

Share this post


Link to post
Share on other sites

Bom dia Rafael.

Apaguei a pasta e montei novamente ambiente 32bit.

Eu baixei o demo do Site, copie ACBrSAT32.dll do ACBrSat (Cdecl) e as dll do OpenSSL e LibXml2. (SVN UpDate)

> [email protected] SDK TANCA (ok)

> ACBrLibSAT-0.1.0.0 (Cdecl)

> C:\Windows\system32>ver

Microsoft Windows [versão 10.0.17763.195]
(c) 2018 Microsoft Corporation. Todos os direitos reservados.

>>> O mesmo problema:

MDA loaderLock

MDA (Assistente de Depuração Gerenciado) de loaderLock detecta tentativas de executar código gerenciado em um thread que mantém o bloqueio do carregador do sistema operacional Microsoft Windows. Qualquer execução desse tipo é inválida porque pode levar a deadlocks e ao uso de DLLs antes de elas terem sido inicializadas pelo carregador do sistema operacional.

Grato.

SAT_ONLINE.PNG

ACBrLib.ini

ACBrLibSAT-20181221.log

Edited by OFF-TI

Share this post


Link to post
Share on other sites

Eu nunca usei o Visual Studio... mas resolvi baixar uma versão communit e testar...

Conseguiu Debugar e rodar a aplicação...

 

image.png

 

Senti falta de botões importantes como o "Consultar SAT" e "Consultar Status Operacional"... e já comuniquei isso ao @Rafael Dias...

Usei o emulador SAT do SEFAZ e consegui comunicação e envio de um CFe...

 

Nossa suspeita é que há alguma mistura de DLLs 32 e 64 em sua máquina... por via das dúvidas, copie as DLLs APENAS na mesma pasta do .EXE, pois lá é o 1o Local que o Windows irá procurar


Consultor SAC ACBr

Daniel Simões de Almeida
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Share this post


Link to post
Share on other sites

×
×
  • Create New...