From libssh2-devel-bounces@cool.haxx.se  Fri Oct  1 02:52:29 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o910q7kE002722;
	Fri, 1 Oct 2010 02:52:25 +0200
Received: from mail-gy0-f182.google.com (mail-gy0-f182.google.com
	[209.85.160.182])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o910q58o002606
	for <libssh2-devel@cool.haxx.se>; Fri, 1 Oct 2010 02:52:05 +0200
Received: by gyg4 with SMTP id 4so1534325gyg.41
	for <libssh2-devel@cool.haxx.se>; Thu, 30 Sep 2010 17:51:55 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:mime-version:received:received:in-reply-to
	:references:date:message-id:subject:from:to:content-type;
	bh=boB2F3UdUe6QVoqp5v/9nfiDzO54DUW2ZLU0lNoSI4U=;
	b=ggTQ21nB+yqqwharH5HV3+O64svI7NlGuOryKq4m02Dx/RgZF7fLN6ovxCwb6lBW4S
	VP63JMfq+n3aPFosSrzZ15KRtnjBBjJFgjURW0qwAMkUAsTrwQh/ujiSCjXIgSzbGV+d
	Kz5wXx5cXlikBXf252VRQhhUP4NmCd6fkmQcQ=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=mime-version:in-reply-to:references:date:message-id:subject:from:to
	:content-type;
	b=E9seXyVYbJVmVadyJQsajOO7e5QvK4NcSJ2O7qQ1JIE15NNa/3J2bdMeVoMx/KmYMv
	TMtf3OS1Ov3SadEc2i8WR31mSbGy5lMTh/AJnmsESnjUIPtbryDpoefJqnHsvn6rFBEs
	Sb1d1kWwqTzDnOOGPW5vY8OSKXDVqNMCeCdBs=
MIME-Version: 1.0
Received: by 10.220.52.203 with SMTP id j11mr1184763vcg.173.1285894315106;
	Thu, 30 Sep 2010 17:51:55 -0700 (PDT)
Received: by 10.220.169.21 with HTTP; Thu, 30 Sep 2010 17:51:55 -0700 (PDT)
In-Reply-To: <alpine.DEB.2.00.1009302339090.499@tvnag.unkk.fr>
References: <AANLkTi=UhWvoEqBZ5izQ12_pEnsgmQrON3nZ_zFOjKYn@mail.gmail.com>
	<AANLkTikYY1xRfDnGet498uZB2Vb_jLGcmGTqZtbW1xpU@mail.gmail.com>
	<alpine.DEB.2.00.1009302339090.499@tvnag.unkk.fr>
Date: Thu, 30 Sep 2010 17:51:55 -0700
Message-ID: <AANLkTikVNB37SB4wHEjNTxdMSs3gZ+ZySXAprWcBArWU@mail.gmail.com>
Subject: Re: Unable to connect to SFTP server using SSH-2.0-SSHD
From: Sriram Swaminathan <sriramswamy@gmail.com>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 01 Oct 2010 02:52:29 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 01 Oct 2010 02:52:06 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============1899793416=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--===============1899793416==
Content-Type: multipart/alternative; boundary=00235451e7dadee1300491839917

--00235451e7dadee1300491839917
Content-Type: text/plain; charset=ISO-8859-1

You are correct. My system will not understand ~/.
The control does not even reach the place where keyfile1 is used. The server
that I connect to supports password authentication, so control will never
reach the place where keyfile1 is used.

I am able to connect to the server using winscp while the libssh2 fails.

On Thu, Sep 30, 2010 at 2:40 PM, Daniel Stenberg <daniel@haxx.se> wrote:

> On Wed, 29 Sep 2010, Sriram Swaminathan wrote:
>
>  const char *keyfile1="~/.ssh/id_rsa.pub";
>> const char *keyfile2="~/.ssh/id_rsa";
>>
>
> Can your system really convert "~/" in the file name to look relative your
> home directory? That's usually a feature of the shell, not the open or fopen
> calls...
>
> --
>
>  / daniel.haxx.se
> _______________________________________________
> libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
>

--00235451e7dadee1300491839917
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

You are correct. My system will not understand ~/.<br>The control does not =
even reach the place where keyfile1 is used. The server that I connect to s=
upports password authentication, so control will never reach the place wher=
e keyfile1 is used.<br>
<br>I am able to connect to the server using winscp while the libssh2 fails=
.<br><br><div class=3D"gmail_quote">On Thu, Sep 30, 2010 at 2:40 PM, Daniel=
 Stenberg <span dir=3D"ltr">&lt;<a href=3D"mailto:daniel@haxx.se">daniel@ha=
xx.se</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin: 0pt 0pt 0pt 0.8ex; borde=
r-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">On Wed, 29 Sep 20=
10, Sriram Swaminathan wrote:<br>
<br>
<blockquote class=3D"gmail_quote" style=3D"margin: 0pt 0pt 0pt 0.8ex; borde=
r-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
const char *keyfile1=3D&quot;~/.ssh/id_rsa.pub&quot;;<br>
const char *keyfile2=3D&quot;~/.ssh/id_rsa&quot;;<br>
</blockquote>
<br>
Can your system really convert &quot;~/&quot; in the file name to look rela=
tive your home directory? That&#39;s usually a feature of the shell, not th=
e open or fopen calls...<br><font color=3D"#888888">
<br>
-- <br>
<br>
=A0/ <a href=3D"http://daniel.haxx.se" target=3D"_blank">daniel.haxx.se</a>=
<br>
_______________________________________________<br>
libssh2-devel <a href=3D"http://cool.haxx.se/cgi-bin/mailman/listinfo/libss=
h2-devel" target=3D"_blank">http://cool.haxx.se/cgi-bin/mailman/listinfo/li=
bssh2-devel</a><br>
</font></blockquote></div><br>

--00235451e7dadee1300491839917--

--===============1899793416==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============1899793416==--

From libssh2-devel-bounces@cool.haxx.se  Fri Oct  1 16:11:06 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o91EAZ7p029883;
	Fri, 1 Oct 2010 16:11:00 +0200
Received: from mail-ey0-f182.google.com (mail-ey0-f182.google.com
	[209.85.215.182])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o91EAXIR029879
	for <libssh2-devel@cool.haxx.se>; Fri, 1 Oct 2010 16:10:33 +0200
Received: by eyx24 with SMTP id 24so1860850eyx.41
	for <libssh2-devel@cool.haxx.se>; Fri, 01 Oct 2010 07:10:31 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:received:received:message-id:date:from
	:user-agent:mime-version:to:subject:content-type;
	bh=4s7RcQ6D0CdgTCiBS1bQNKOMY8ckZdq4k8/q1W4N3y4=;
	b=J+Xr2Ew3eJjUCc5OkqBmFrEaAmidrw4a6txy5SZQYVjvwppSQXNpQj6iGTgU4aG/Is
	A4fZH6984DL48aSN2aqtp9oicPEkwTSN7p17Ily4VhxsjeVK96pCVBhofMkBjW/7eiZt
	Ymj+r9FmzBPj9+EYhR69lM7E/vC6o1KfFcQMc=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=message-id:date:from:user-agent:mime-version:to:subject
	:content-type;
	b=Vdk3Vc4KG721gTT45qzK+g29dH6pjTsOd/ktEuPa/k4cAssUYOiHwDSzTrpKFr0Bwo
	tqkcI8SADMr7aDTooVCve71IlciwDEfmSs4UA778Bj2pFuudVH4fncXg4kK21Ux4K18P
	HjC8QwZGsU1YUQL4fYgj/8SIedBV7oMVOhfs0=
Received: by 10.14.22.3 with SMTP id s3mr3505790ees.27.1285942231315;
	Fri, 01 Oct 2010 07:10:31 -0700 (PDT)
Received: from [172.31.2.230] (stockholm.ardendo.se [83.241.192.2])
	by mx.google.com with ESMTPS id u9sm1814454eeh.11.2010.10.01.07.10.29
	(version=SSLv3 cipher=RC4-MD5); Fri, 01 Oct 2010 07:10:30 -0700 (PDT)
Message-ID: <4CA5EBD4.4000206@gmail.com>
Date: Fri, 01 Oct 2010 16:10:28 +0200
From: Tommy Lindgren <tommy.lindgren@gmail.com>
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US;
	rv:1.9.1.12) Gecko/20100915 Lightning/1.0b1 Thunderbird/3.0.8
MIME-Version: 1.0
To: libssh2-devel@cool.haxx.se
Subject: [PATCH] Support for exit-signal messages
Content-Type: multipart/mixed; boundary="------------080908030106000902020200"
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 01 Oct 2010 16:11:06 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 01 Oct 2010 16:10:33 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

This is a multi-part message in MIME format.
--------------080908030106000902020200
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Hi,

I've implemented rudimentary support for exit-signal messages (see RFC 
4254 section 6.10) which I'd like to see included in libssh2, please see 
attached patch. The patch only adds support for retrieving the signal 
name, I skipped the part about the (optional) error message.

Regards,
Tommy


--------------080908030106000902020200
Content-Type: text/x-patch;
 name="exit_signal.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="exit_signal.patch"

diff --git a/src/channel.c b/src/channel.c
index 2698777..e40af22 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -1460,6 +1460,22 @@ libssh2_channel_get_exit_status(LIBSSH2_CHANNEL *channel)
 }
 
 /*
+ * libssh2_channel_get_exit_signal
+ *
+ * Return the channel's program exit signal (without the SIG prefix). NULL
+ * if the program exited cleanly.
+ *
+ */
+LIBSSH2_API unsigned char *
+libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL *channel)
+{
+    if(!channel)
+        return NULL;
+
+    return channel->exit_signal;
+}
+
+/*
  * _libssh2_channel_receive_window_adjust
  *
  * Adjust the receive window for a channel by adjustment bytes. If the amount
@@ -2394,6 +2410,10 @@ int _libssh2_channel_free(LIBSSH2_CHANNEL *channel)
 
     channel->free_state = libssh2_NB_state_idle;
 
+    if (channel->exit_signal) {
+        LIBSSH2_FREE(session, channel->exit_signal);
+    }
+
     /*
      * channel->remote.close *might* not be set yet, Well...
      * We've sent the close packet, what more do you want?
diff --git a/src/libssh2_priv.h b/src/libssh2_priv.h
index 037e781..91b89e6 100644
--- a/src/libssh2_priv.h
+++ b/src/libssh2_priv.h
@@ -347,6 +347,9 @@ struct _LIBSSH2_CHANNEL
     /* channel's program exit status */
     int exit_status;
 
+    /* channel's program exit signal (without the SIG prefix) */
+    unsigned char *exit_signal;
+
     libssh2_channel_data local, remote;
     /* Amount of bytes to be refunded to receive window (but not yet sent) */
     unsigned long adjust_queue;
diff --git a/src/packet.c b/src/packet.c
index 8315f9c..ca04d63 100644
--- a/src/packet.c
+++ b/src/packet.c
@@ -762,6 +762,34 @@ _libssh2_packet_add(LIBSSH2_SESSION * session, unsigned char *data,
                 return 0;
             }
 
+            if (strlen == sizeof("exit-signal") - 1
+                && !memcmp("exit-signal", data + 9,
+                           sizeof("exit-signal") - 1)) {
+
+                /* command terminated due to signal */
+                session->packAdd_channel =
+                    _libssh2_channel_locate(session, channel);
+
+                if (session->packAdd_channel) {
+                    /* set signal name (without SIG prefix) */
+                    uint32_t namelen = _libssh2_ntohu32(data + 9 + sizeof("exit-signal"));
+                    session->packAdd_channel->exit_signal =
+                        LIBSSH2_ALLOC(session, namelen + 1);
+                    memcpy(session->packAdd_channel->exit_signal,
+                        data + 13 + sizeof("exit_signal"), namelen);
+                    session->packAdd_channel->exit_signal[namelen] = '\0';
+                    _libssh2_debug(session, LIBSSH2_TRACE_CONN,
+                                   "Exit signal %s received for channel %lu/%lu",
+                                   session->packAdd_channel->exit_signal,
+                                   session->packAdd_channel->local.id,
+                                   session->packAdd_channel->remote.id);
+                }
+
+                LIBSSH2_FREE(session, data);
+                session->packAdd_state = libssh2_NB_state_idle;
+                return 0;
+            }
+
             if (want_reply) {
               libssh2_packet_add_jump_point4:
                 session->packAdd_state = libssh2_NB_state_jump4;

--------------080908030106000902020200
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--------------080908030106000902020200--

From libssh2-devel-bounces@cool.haxx.se  Fri Oct  1 16:30:15 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o91EU9hl011930;
	Fri, 1 Oct 2010 16:30:14 +0200
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o91EU23c011388
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Fri, 1 Oct 2010 16:30:07 +0200
Received: from mocca (c80-216-27-64.bredband.comhem.se [80.216.27.64])
	(authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5+lenny1) with ESMTP id
	o91ETeIY030211
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Fri, 1 Oct 2010 16:29:49 +0200
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: [PATCH] Support for exit-signal messages
References: <4CA5EBD4.4000206@gmail.com>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:101001:libssh2-devel@cool.haxx.se::GxVLeuq8Foo1cZ8A:0RE1
Date: Fri, 01 Oct 2010 16:29:38 +0200
In-Reply-To: <4CA5EBD4.4000206@gmail.com> (Tommy Lindgren's message of "Fri,
	01 Oct 2010 16:10:28 +0200")
Message-ID: <877hi2c7fx.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.2 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.8 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.96.3 at yxa-v
X-Virus-Status: Clean
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 01 Oct 2010 16:30:15 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 01 Oct 2010 16:30:08 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Tommy Lindgren <tommy.lindgren@gmail.com> writes:

> Hi,
>
> I've implemented rudimentary support for exit-signal messages (see RFC
> 4254 section 6.10) which I'd like to see included in libssh2, please
> see attached patch. The patch only adds support for retrieving the
> signal name, I skipped the part about the (optional) error message.

It looks good to me, thanks for this!  However a question: why skip the
error message part?  If we are adding a new libssh2 API for this, I
think we should support all the protocol elements in the API interface
since someone may want to use that feature in the future.  Applications
not interested in the error message can supply a NULL pointer.

/Simon

> Regards,
> Tommy
>
> diff --git a/src/channel.c b/src/channel.c
> index 2698777..e40af22 100644
> --- a/src/channel.c
> +++ b/src/channel.c
> @@ -1460,6 +1460,22 @@ libssh2_channel_get_exit_status(LIBSSH2_CHANNEL *channel)
>  }
>  
>  /*
> + * libssh2_channel_get_exit_signal
> + *
> + * Return the channel's program exit signal (without the SIG prefix). NULL
> + * if the program exited cleanly.
> + *
> + */
> +LIBSSH2_API unsigned char *
> +libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL *channel)
> +{
> +    if(!channel)
> +        return NULL;
> +
> +    return channel->exit_signal;
> +}
> +
> +/*
>   * _libssh2_channel_receive_window_adjust
>   *
>   * Adjust the receive window for a channel by adjustment bytes. If the amount
> @@ -2394,6 +2410,10 @@ int _libssh2_channel_free(LIBSSH2_CHANNEL *channel)
>  
>      channel->free_state = libssh2_NB_state_idle;
>  
> +    if (channel->exit_signal) {
> +        LIBSSH2_FREE(session, channel->exit_signal);
> +    }
> +
>      /*
>       * channel->remote.close *might* not be set yet, Well...
>       * We've sent the close packet, what more do you want?
> diff --git a/src/libssh2_priv.h b/src/libssh2_priv.h
> index 037e781..91b89e6 100644
> --- a/src/libssh2_priv.h
> +++ b/src/libssh2_priv.h
> @@ -347,6 +347,9 @@ struct _LIBSSH2_CHANNEL
>      /* channel's program exit status */
>      int exit_status;
>  
> +    /* channel's program exit signal (without the SIG prefix) */
> +    unsigned char *exit_signal;
> +
>      libssh2_channel_data local, remote;
>      /* Amount of bytes to be refunded to receive window (but not yet sent) */
>      unsigned long adjust_queue;
> diff --git a/src/packet.c b/src/packet.c
> index 8315f9c..ca04d63 100644
> --- a/src/packet.c
> +++ b/src/packet.c
> @@ -762,6 +762,34 @@ _libssh2_packet_add(LIBSSH2_SESSION * session, unsigned char *data,
>                  return 0;
>              }
>  
> +            if (strlen == sizeof("exit-signal") - 1
> +                && !memcmp("exit-signal", data + 9,
> +                           sizeof("exit-signal") - 1)) {
> +
> +                /* command terminated due to signal */
> +                session->packAdd_channel =
> +                    _libssh2_channel_locate(session, channel);
> +
> +                if (session->packAdd_channel) {
> +                    /* set signal name (without SIG prefix) */
> +                    uint32_t namelen = _libssh2_ntohu32(data + 9 + sizeof("exit-signal"));
> +                    session->packAdd_channel->exit_signal =
> +                        LIBSSH2_ALLOC(session, namelen + 1);
> +                    memcpy(session->packAdd_channel->exit_signal,
> +                        data + 13 + sizeof("exit_signal"), namelen);
> +                    session->packAdd_channel->exit_signal[namelen] = '\0';
> +                    _libssh2_debug(session, LIBSSH2_TRACE_CONN,
> +                                   "Exit signal %s received for channel %lu/%lu",
> +                                   session->packAdd_channel->exit_signal,
> +                                   session->packAdd_channel->local.id,
> +                                   session->packAdd_channel->remote.id);
> +                }
> +
> +                LIBSSH2_FREE(session, data);
> +                session->packAdd_state = libssh2_NB_state_idle;
> +                return 0;
> +            }
> +
>              if (want_reply) {
>                libssh2_packet_add_jump_point4:
>                  session->packAdd_state = libssh2_NB_state_jump4;
> _______________________________________________
> libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Oct  1 17:33:55 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o91FXeW4027863;
	Fri, 1 Oct 2010 17:33:53 +0200
Received: from mail-ew0-f54.google.com (mail-ew0-f54.google.com
	[209.85.215.54])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o91FXcWN027853
	for <libssh2-devel@cool.haxx.se>; Fri, 1 Oct 2010 17:33:38 +0200
Received: by ewy22 with SMTP id 22so1938387ewy.41
	for <libssh2-devel@cool.haxx.se>; Fri, 01 Oct 2010 08:33:35 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:received:received:message-id:date:from
	:user-agent:mime-version:to:subject:references:in-reply-to
	:content-type:content-transfer-encoding;
	bh=wk6uVAao4oqv86+J4eiiM5baJitUhRBmxd+qfdz9dWQ=;
	b=EUHgq4rma1fdFvweZ4vqEvLKgLKqTva+eNxlqxv8Qk3PNWnQrSID42Yp0dAfD48GuZ
	h0LHp38DjKyUYNKdz2I210uh1O+NbmbWF9riEMrUOrfksrmlBYBYVlq8vcCyokULanC6
	E4sS0nJVpj9zPMrkbWH3UD8pUz3HRNwOdx9JA=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=message-id:date:from:user-agent:mime-version:to:subject:references
	:in-reply-to:content-type:content-transfer-encoding;
	b=WEmP7/yK6/d/K1O+ubERP5pkdxOZAAkzRvgy0KIDdQOjw2g0AZhXU1E7DoADF6RCN1
	Sat69K1wTVpjSjVQje0k4eLU5vf40vlI9pACjeP4vqZ1GHeWk19SbISvLtCKFbYa3tNB
	bJ+O6+HZhKzVj2kk6/RMQsJnNB1oh+KJo1ha8=
Received: by 10.213.105.66 with SMTP id s2mr5650859ebo.92.1285947215483;
	Fri, 01 Oct 2010 08:33:35 -0700 (PDT)
Received: from [172.31.2.230] (stockholm.ardendo.se [83.241.192.2])
	by mx.google.com with ESMTPS id u9sm1933142eeh.5.2010.10.01.08.33.32
	(version=SSLv3 cipher=RC4-MD5); Fri, 01 Oct 2010 08:33:33 -0700 (PDT)
Message-ID: <4CA5FF4A.9040200@gmail.com>
Date: Fri, 01 Oct 2010 17:33:30 +0200
From: Tommy Lindgren <tommy.lindgren@gmail.com>
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US;
	rv:1.9.1.12) Gecko/20100915 Lightning/1.0b1 Thunderbird/3.0.8
MIME-Version: 1.0
To: libssh2-devel@cool.haxx.se
Subject: Re: [PATCH] Support for exit-signal messages
References: <4CA5EBD4.4000206@gmail.com> <877hi2c7fx.fsf@mocca.josefsson.org>
In-Reply-To: <877hi2c7fx.fsf@mocca.josefsson.org>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 01 Oct 2010 17:33:55 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 01 Oct 2010 17:33:39 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On 2010-10-01 16:29, Simon Josefsson wrote:
> Tommy Lindgren<tommy.lindgren@gmail.com>  writes:
>
>> Hi,
>>
>> I've implemented rudimentary support for exit-signal messages (see RFC
>> 4254 section 6.10) which I'd like to see included in libssh2, please
>> see attached patch. The patch only adds support for retrieving the
>> signal name, I skipped the part about the (optional) error message.
>
> It looks good to me, thanks for this!  However a question: why skip the
> error message part?

Simply because the error message didn't seem to get set in my test 
cases, so I didn't bother to write code for it.

Regards,
Tommy
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Oct  1 18:21:59 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o91GLn13030317;
	Fri, 1 Oct 2010 18:21:58 +0200
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o91GLgcT030145
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Fri, 1 Oct 2010 18:21:46 +0200
Received: from mocca (c80-216-27-64.bredband.comhem.se [80.216.27.64])
	(authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5+lenny1) with ESMTP id
	o91GLJrK005242
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Fri, 1 Oct 2010 18:21:27 +0200
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: [PATCH] Support for exit-signal messages
References: <4CA5EBD4.4000206@gmail.com> <877hi2c7fx.fsf@mocca.josefsson.org>
	<4CA5FF4A.9040200@gmail.com>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:101001:libssh2-devel@cool.haxx.se::r4jrErq63Lf+9oEj:9WfF
Date: Fri, 01 Oct 2010 18:21:18 +0200
In-Reply-To: <4CA5FF4A.9040200@gmail.com> (Tommy Lindgren's message of "Fri,
	01 Oct 2010 17:33:30 +0200")
Message-ID: <87r5g9994x.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.2 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.8 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.96.3 at yxa-v
X-Virus-Status: Clean
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 01 Oct 2010 18:21:59 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 01 Oct 2010 18:21:48 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Tommy Lindgren <tommy.lindgren@gmail.com> writes:

> On 2010-10-01 16:29, Simon Josefsson wrote:
>> Tommy Lindgren<tommy.lindgren@gmail.com>  writes:
>>
>>> Hi,
>>>
>>> I've implemented rudimentary support for exit-signal messages (see RFC
>>> 4254 section 6.10) which I'd like to see included in libssh2, please
>>> see attached patch. The patch only adds support for retrieving the
>>> signal name, I skipped the part about the (optional) error message.
>>
>> It looks good to me, thanks for this!  However a question: why skip the
>> error message part?
>
> Simply because the error message didn't seem to get set in my test
> cases, so I didn't bother to write code for it.

I think it would be an improvement if the API was modified to make it
possible for a future libssh2 to supply the error message to the
application, when someone improves the protocol parser.

Btw, shouldn't the return value of the API use a 'const' qualifier?  The
string should not be modifiable by the application.

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Oct  1 19:56:31 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o91Hu91b002716;
	Fri, 1 Oct 2010 19:56:26 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o91Hu8qc002694
	for <libssh2-devel@cool.haxx.se>; Fri, 1 Oct 2010 19:56:08 +0200
Date: Fri, 1 Oct 2010 19:56:08 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: [PATCH] Support for exit-signal messages
In-Reply-To: <4CA5EBD4.4000206@gmail.com>
Message-ID: <alpine.DEB.2.00.1010011954560.26243@tvnag.unkk.fr>
References: <4CA5EBD4.4000206@gmail.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 01 Oct 2010 19:56:31 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 01 Oct 2010 19:56:08 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Fri, 1 Oct 2010, Tommy Lindgren wrote:

> I've implemented rudimentary support for exit-signal messages (see RFC 4254 
> section 6.10) which I'd like to see included in libssh2, please see attached 
> patch. The patch only adds support for retrieving the signal name, I skipped 
> the part about the (optional) error message.

I second Simon's request for getting the optional error message too if the 
caller wants it, at least in the prototype.

Also, I would like to ask for at least a basic man page/documentation for the 
new function.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Sat Oct  2 00:32:14 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o91MVZGc021304;
	Sat, 2 Oct 2010 00:32:10 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o91MVXCE021297
	for <libssh2-devel@cool.haxx.se>; Sat, 2 Oct 2010 00:31:33 +0200
Date: Sat, 2 Oct 2010 00:31:33 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Unable to connect to SFTP server using SSH-2.0-SSHD
In-Reply-To: <AANLkTikVNB37SB4wHEjNTxdMSs3gZ+ZySXAprWcBArWU@mail.gmail.com>
Message-ID: <alpine.DEB.2.00.1010020031100.8660@tvnag.unkk.fr>
References: <AANLkTi=UhWvoEqBZ5izQ12_pEnsgmQrON3nZ_zFOjKYn@mail.gmail.com>
	<AANLkTikYY1xRfDnGet498uZB2Vb_jLGcmGTqZtbW1xpU@mail.gmail.com>
	<alpine.DEB.2.00.1009302339090.499@tvnag.unkk.fr>
	<AANLkTikVNB37SB4wHEjNTxdMSs3gZ+ZySXAprWcBArWU@mail.gmail.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Sat, 02 Oct 2010 00:32:14 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Sat, 02 Oct 2010 00:31:34 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Thu, 30 Sep 2010, Sriram Swaminathan wrote:

> You are correct. My system will not understand ~/. The control does not even 
> reach the place where keyfile1 is used. The server that I connect to 
> supports password authentication, so control will never reach the place 
> where keyfile1 is used.

> I am able to connect to the server using winscp while the libssh2 fails.

Right, so good old fashioned debugging is what's left now...

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Sat Oct  2 11:51:27 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o929p0PX000391;
	Sat, 2 Oct 2010 11:51:22 +0200
Received: from ch-smtp02.sth.basefarm.net (ch-smtp02.sth.basefarm.net
	[80.76.149.213])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o929owQv000382
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Sat, 2 Oct 2010 11:50:58 +0200
Received: from c83-250-124-221.bredband.comhem.se ([83.250.124.221]:55729
	helo=reason) by ch-smtp02.sth.basefarm.net with esmtp (Exim 4.68)
	(envelope-from <tommy.lindgren@gmail.com>) id 1P1yk2-0003CK-6X
	for libssh2-devel@cool.haxx.se; Sat, 02 Oct 2010 11:50:56 +0200
From: Tommy Lindgren <tommy.lindgren@gmail.com>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: [PATCH] Support for exit-signal messages
In-Reply-To: <87r5g9994x.fsf@mocca.josefsson.org> (Simon Josefsson's message
	of "Fri, 01 Oct 2010 18:21:18 +0200")
References: <4CA5EBD4.4000206@gmail.com> <877hi2c7fx.fsf@mocca.josefsson.org>
	<4CA5FF4A.9040200@gmail.com> <87r5g9994x.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (gnu/linux)
Date: Sat, 02 Oct 2010 11:50:53 +0200
Message-ID: <8762xkhqiq.fsf@gmail.com>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Originating-IP: 83.250.124.221
X-Scan-Result: No virus found in message 1P1yk2-0003CK-6X.
X-Scan-Signature: ch-smtp02.sth.basefarm.net 1P1yk2-0003CK-6X
	f874eb5a98628ad65d353793a6775e62
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Sat, 02 Oct 2010 11:51:27 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Sat, 02 Oct 2010 11:50:58 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--=-=-=

Simon Josefsson <simon@josefsson.org> writes:

> Tommy Lindgren <tommy.lindgren@gmail.com> writes:
>
>> On 2010-10-01 16:29, Simon Josefsson wrote:
>>> Tommy Lindgren<tommy.lindgren@gmail.com>  writes:
>>>
>>>> Hi,
>>>>
>>>> I've implemented rudimentary support for exit-signal messages (see RFC
>>>> 4254 section 6.10) which I'd like to see included in libssh2, please
>>>> see attached patch. The patch only adds support for retrieving the
>>>> signal name, I skipped the part about the (optional) error message.
>>>
>>> It looks good to me, thanks for this!  However a question: why skip the
>>> error message part?
>>
>> Simply because the error message didn't seem to get set in my test
>> cases, so I didn't bother to write code for it.
>
> I think it would be an improvement if the API was modified to make it
> possible for a future libssh2 to supply the error message to the
> application, when someone improves the protocol parser.

Any opinion on how that modification should look? Personally I think it
looks nicer with a separate function for retrieving the error message
(and language tag). But if we are extending the new function I guess the
signature could look something like

LIBSSH2_API const char *
libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL *channel, char *errmsg,
                                char **langtag)

or possibly 

LIBSSH2_API const char *
libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL *channel, char *errmsg,
                                int *errmsg_len, char **langtag, int *langtag_len)

Thoughts?

> Btw, shouldn't the return value of the API use a 'const' qualifier?  The
> string should not be modifiable by the application.

True, fixed. I'm not really a C coder, I just pretend to be one.

Attached new patch with const fix and modified ssh2_exec.c example. The
patch can be tested with:

$ example/ssh2_exec host user pass "kill -TERM \$\$"

Regards,
Tommy


--=-=-=
Content-Type: text/x-diff
Content-Disposition: inline; filename=exit_signal2.patch

diff --git a/example/ssh2_exec.c b/example/ssh2_exec.c
index 1b74abc..20afded 100644
--- a/example/ssh2_exec.c
+++ b/example/ssh2_exec.c
@@ -86,6 +86,7 @@ int main(int argc, char *argv[])
     LIBSSH2_CHANNEL *channel;
     int rc;
     int exitcode;
+    const char *exitsignal;
     int bytecount = 0;
     size_t len;
     LIBSSH2_KNOWNHOSTS *nh;
@@ -286,8 +287,9 @@ int main(int argc, char *argv[])
     if( rc == 0 )
     {
         exitcode = libssh2_channel_get_exit_status( channel );
+        exitsignal = libssh2_channel_get_exit_signal( channel );
     }
-    printf("\nEXIT: %d bytecount: %d\n", exitcode, bytecount);
+    printf("\nEXIT: %d signal: %s bytecount: %d\n", exitcode, exitsignal, bytecount);
 
     libssh2_channel_free(channel);
     channel = NULL;
diff --git a/src/channel.c b/src/channel.c
index 2698777..164826b 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -1460,6 +1460,22 @@ libssh2_channel_get_exit_status(LIBSSH2_CHANNEL *channel)
 }
 
 /*
+ * libssh2_channel_get_exit_signal
+ *
+ * Return the channel's program exit signal (without the SIG prefix). NULL
+ * if the program exited cleanly.
+ *
+ */
+LIBSSH2_API const char *
+libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL *channel)
+{
+    if(!channel)
+        return NULL;
+
+    return channel->exit_signal;
+}
+
+/*
  * _libssh2_channel_receive_window_adjust
  *
  * Adjust the receive window for a channel by adjustment bytes. If the amount
@@ -2394,6 +2410,10 @@ int _libssh2_channel_free(LIBSSH2_CHANNEL *channel)
 
     channel->free_state = libssh2_NB_state_idle;
 
+    if (channel->exit_signal) {
+        LIBSSH2_FREE(session, channel->exit_signal);
+    }
+
     /*
      * channel->remote.close *might* not be set yet, Well...
      * We've sent the close packet, what more do you want?
diff --git a/src/libssh2_priv.h b/src/libssh2_priv.h
index 037e781..a7aba9f 100644
--- a/src/libssh2_priv.h
+++ b/src/libssh2_priv.h
@@ -347,6 +347,9 @@ struct _LIBSSH2_CHANNEL
     /* channel's program exit status */
     int exit_status;
 
+    /* channel's program exit signal (without the SIG prefix) */
+    char *exit_signal;
+
     libssh2_channel_data local, remote;
     /* Amount of bytes to be refunded to receive window (but not yet sent) */
     unsigned long adjust_queue;
diff --git a/src/packet.c b/src/packet.c
index 8315f9c..ca04d63 100644
--- a/src/packet.c
+++ b/src/packet.c
@@ -762,6 +762,34 @@ _libssh2_packet_add(LIBSSH2_SESSION * session, unsigned char *data,
                 return 0;
             }
 
+            if (strlen == sizeof("exit-signal") - 1
+                && !memcmp("exit-signal", data + 9,
+                           sizeof("exit-signal") - 1)) {
+
+                /* command terminated due to signal */
+                session->packAdd_channel =
+                    _libssh2_channel_locate(session, channel);
+
+                if (session->packAdd_channel) {
+                    /* set signal name (without SIG prefix) */
+                    uint32_t namelen = _libssh2_ntohu32(data + 9 + sizeof("exit-signal"));
+                    session->packAdd_channel->exit_signal =
+                        LIBSSH2_ALLOC(session, namelen + 1);
+                    memcpy(session->packAdd_channel->exit_signal,
+                        data + 13 + sizeof("exit_signal"), namelen);
+                    session->packAdd_channel->exit_signal[namelen] = '\0';
+                    _libssh2_debug(session, LIBSSH2_TRACE_CONN,
+                                   "Exit signal %s received for channel %lu/%lu",
+                                   session->packAdd_channel->exit_signal,
+                                   session->packAdd_channel->local.id,
+                                   session->packAdd_channel->remote.id);
+                }
+
+                LIBSSH2_FREE(session, data);
+                session->packAdd_state = libssh2_NB_state_idle;
+                return 0;
+            }
+
             if (want_reply) {
               libssh2_packet_add_jump_point4:
                 session->packAdd_state = libssh2_NB_state_jump4;

--=-=-=
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--=-=-=--

From libssh2-devel-bounces@cool.haxx.se  Sat Oct  2 11:53:15 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o929rDxP001292;
	Sat, 2 Oct 2010 11:53:15 +0200
Received: from ch-smtp03.sth.basefarm.net (ch-smtp03.sth.basefarm.net
	[80.76.149.214])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o929rBfl001280
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Sat, 2 Oct 2010 11:53:11 +0200
Received: from c83-250-124-221.bredband.comhem.se ([83.250.124.221]:55732
	helo=reason) by ch-smtp03.sth.basefarm.net with esmtp (Exim 4.68)
	(envelope-from <tommy.lindgren@gmail.com>) id 1P1ykw-0002yU-9o
	for libssh2-devel@cool.haxx.se; Sat, 02 Oct 2010 11:51:51 +0200
From: Tommy Lindgren <tommy.lindgren@gmail.com>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: [PATCH] Support for exit-signal messages
In-Reply-To: <alpine.DEB.2.00.1010011954560.26243@tvnag.unkk.fr> (Daniel
	Stenberg's message of "Fri, 1 Oct 2010 19:56:08 +0200 (CEST)")
References: <4CA5EBD4.4000206@gmail.com>
	<alpine.DEB.2.00.1010011954560.26243@tvnag.unkk.fr>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (gnu/linux)
Date: Sat, 02 Oct 2010 11:51:49 +0200
Message-ID: <871v88hqh6.fsf@gmail.com>
MIME-Version: 1.0
X-Originating-IP: 83.250.124.221
X-Scan-Result: No virus found in message 1P1ykw-0002yU-9o.
X-Scan-Signature: ch-smtp03.sth.basefarm.net 1P1ykw-0002yU-9o
	c3c7d2cc37e57f73f4a2589579464e33
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Sat, 02 Oct 2010 11:53:15 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Sat, 02 Oct 2010 11:53:11 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Daniel Stenberg <daniel@haxx.se> writes:

> On Fri, 1 Oct 2010, Tommy Lindgren wrote:
>
>> I've implemented rudimentary support for exit-signal messages (see
>> RFC 4254 section 6.10) which I'd like to see included in libssh2,
>> please see attached patch. The patch only adds support for
>> retrieving the signal name, I skipped the part about the (optional)
>> error message.
>
> I second Simon's request for getting the optional error message too if
> the caller wants it, at least in the prototype.
>
> Also, I would like to ask for at least a basic man page/documentation
> for the new function.

Sure, will add that once we agree on the API.

Regards,
Tommy
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Sun Oct  3 21:50:45 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o93JoKUe002693;
	Sun, 3 Oct 2010 21:50:41 +0200
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o93JoHgD002688
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Sun, 3 Oct 2010 21:50:18 +0200
Received: from mocca (c80-216-27-64.bredband.comhem.se [80.216.27.64])
	(authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5+lenny1) with ESMTP id
	o93Jo6EH007294
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Sun, 3 Oct 2010 21:50:10 +0200
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: [PATCH] Support for exit-signal messages
References: <4CA5EBD4.4000206@gmail.com> <877hi2c7fx.fsf@mocca.josefsson.org>
	<4CA5FF4A.9040200@gmail.com> <87r5g9994x.fsf@mocca.josefsson.org>
	<8762xkhqiq.fsf@gmail.com>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:101003:libssh2-devel@cool.haxx.se::CR7D5WJ54DfF5TCy:HRxf
Date: Sun, 03 Oct 2010 21:50:04 +0200
In-Reply-To: <8762xkhqiq.fsf@gmail.com> (Tommy Lindgren's message of "Sat, 02
	Oct 2010 11:50:53 +0200")
Message-ID: <87r5g7vyxf.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.2 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.8 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.96.3 at yxa-v
X-Virus-Status: Clean
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Sun, 03 Oct 2010 21:50:45 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Sun, 03 Oct 2010 21:50:18 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Tommy Lindgren <tommy.lindgren@gmail.com> writes:

> Any opinion on how that modification should look? Personally I think it
> looks nicer with a separate function for retrieving the error message
> (and language tag). But if we are extending the new function I guess the
> signature could look something like
>
> LIBSSH2_API const char *
> libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL *channel, char *errmsg,
>                                 char **langtag)
>
> or possibly 
>
> LIBSSH2_API const char *
> libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL *channel, char *errmsg,
>                                 int *errmsg_len, char **langtag, int *langtag_len)
>
> Thoughts?

Generally I think it is a bad idea for functions to return strings --
there is no way to do useful error handling, since there is only one
type of error (NULL) which often is insufficient to describe what the
problem is.

Thus, I would suggest something like this:

/* Get exit signal (without leading "SIG"), error message, and language
   tag into newly allocated buffers of indicated length.  Caller can
   use NULL pointers to indicate that the value should not be set.  The
   *_len variables are set if they are non-NULL even if the
   corresponding string parameter is NULL.   Returns LIBSSH2_ERROR_NONE
   on success, or an API error code. */
LIBSSH2_API int
libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL *channel,
                                char **exitsignal,
                                size_t *exitsignal_len
                                char **errmsg,
                                size_t *errmsg_len,
                                char **langtag,
                                size_t *langtag_len)

There is precedent for libssh2 functions to allocate memory (e.g.,
libssh2_base64_decode), but we could also consider an interface that
doesn't allocate memory.  I find that alternative more difficult to use
from an application, though.

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct  4 16:16:56 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o94DuHFA016317;
	Mon, 4 Oct 2010 15:56:56 +0200
Received: from earth.stuge.se (earth.stuge.se [213.88.146.15])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o94DuFKV016299
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Mon, 4 Oct 2010 15:56:15 +0200
Received: (qmail 17407 invoked from network); 4 Oct 2010 13:56:10 -0000
Received: from unknown (HELO earth.stuge.se) (127.0.0.1)
	by localhost with SMTP; 4 Oct 2010 13:56:10 -0000
MIME-Version: 1.0
From: "libssh2 Trac" <trac@libssh2.stuge.se>
X-Trac-Version: 0.12b1
Precedence: bulk
Cc: libssh2-devel@cool.haxx.se
Auto-Submitted: auto-generated
X-Mailer: Trac 0.12b1, by Edgewall Software
X-Trac-Project: libssh2
Date: Mon, 04 Oct 2010 13:56:10 -0000
X-URL: http://trac.libssh2.org/
Subject: [libssh2] #188: libssh2_userauth_authenticated documentation is
	inaccurate
X-Trac-Ticket-URL: http://trac.libssh2.org/ticket/188
Message-ID: <108.1591b7ea17e510b29b38af20edfb3a72@libssh2.stuge.se>
X-Trac-Ticket-ID: 188
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 04 Oct 2010 15:57:01 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 04 Oct 2010 15:56:15 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Reply-To: trac@libssh2.stuge.se,
        libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

#188: libssh2_userauth_authenticated documentation is inaccurate
--------------------------------------------------------------------------------------+
 Reporter:  www.google.com/accounts/o8/id?id=aitoawmvjpzhdvrzdugilqti7ni8qkfjov_hilk  |       Owner:       
     Type:  defect                                                                    |      Status:  new  
 Priority:  normal                                                                    |   Milestone:  1.2.6
Component:  API                                                                       |     Version:  1.2.6
 Keywords:                                                                            |      Blocks:       
Blocked By:                                                                            |  
--------------------------------------------------------------------------------------+
 The documentation for libss2_userauth_authenticated is inaccurate.  It
 says:

 "Returns 1 if authenticated and 0 if not."

 It should say:

 "Returns a non-zero number if authenticated and 0 if not."

 The comments in userauth.c are consistent with this as well as observed
 behavior.

-- 
Ticket URL: <http://trac.libssh2.org/ticket/188>
libssh2 <http://trac.libssh2.org/>
C library for writing portable SSH2 clients
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct  4 16:18:21 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o94E5SUM025034;
	Mon, 4 Oct 2010 16:05:32 +0200
Received: from earth.stuge.se (earth.stuge.se [213.88.146.15])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o94E5Q7U025010
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Mon, 4 Oct 2010 16:05:26 +0200
Received: (qmail 18565 invoked from network); 4 Oct 2010 14:05:23 -0000
Received: from unknown (HELO earth.stuge.se) (127.0.0.1)
	by localhost with SMTP; 4 Oct 2010 14:05:23 -0000
MIME-Version: 1.0
From: "libssh2 Trac" <trac@libssh2.stuge.se>
X-Trac-Version: 0.12b1
Precedence: bulk
Cc: libssh2-devel@cool.haxx.se
Auto-Submitted: auto-generated
X-Mailer: Trac 0.12b1, by Edgewall Software
X-Trac-Project: libssh2
Date: Mon, 04 Oct 2010 14:05:23 -0000
X-URL: http://trac.libssh2.org/
Subject: [libssh2] #189: Error is not correctly reported when authenticated
	user does not have access to remote_file
X-Trac-Ticket-URL: http://trac.libssh2.org/ticket/189
Message-ID: <108.1fa0ce76573f0cda17767ac0f906d77e@libssh2.stuge.se>
X-Trac-Ticket-ID: 189
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 04 Oct 2010 16:05:33 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 04 Oct 2010 16:05:26 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Reply-To: trac@libssh2.stuge.se,
        libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

#189: Error is not correctly reported when authenticated user does not have
access to remote_file
--------------------------------------------------------------------------------------+
 Reporter:  www.google.com/accounts/o8/id?id=aitoawmvjpzhdvrzdugilqti7ni8qkfjov_hilk  |       Owner:       
     Type:  defect                                                                    |      Status:  new  
 Priority:  normal                                                                    |   Milestone:  1.2.6
Component:  protocol                                                                  |     Version:  1.2.6
 Keywords:                                                                            |      Blocks:       
Blocked By:                                                                            |  
--------------------------------------------------------------------------------------+
 I noticed this when trying to use scp_send (indirectly via scp_send64) to
 send to a remote file to which the authenticated user did not have access.
 scp_send returns a null pointer, but the error is LIBSSH2_ERROR_NONE.

 For SFTP (using various functions) if a request is made involving a remote
 file to which the authenticated user does not have access, it will fail
 with LIBSSH2_ERROR_SOCKET_TIMEOUT.  That makes more sense than the
 previous case, but still isn't very helpful.

 This is a problem for both SCP and SFTP so I made it a protocol problem,
 but maybe it should be two tickets?

-- 
Ticket URL: <http://trac.libssh2.org/ticket/189>
libssh2 <http://trac.libssh2.org/>
C library for writing portable SSH2 clients
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct  4 16:32:11 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o94EW4X3010308;
	Mon, 4 Oct 2010 16:32:10 +0200
Received: from mail-ew0-f54.google.com (mail-ew0-f54.google.com
	[209.85.215.54])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o94EW29k010256
	for <libssh2-devel@cool.haxx.se>; Mon, 4 Oct 2010 16:32:02 +0200
Received: by ewy22 with SMTP id 22so2831109ewy.41
	for <libssh2-devel@cool.haxx.se>; Mon, 04 Oct 2010 07:31:59 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:received:received:message-id:date:from
	:user-agent:mime-version:to:subject:references:in-reply-to
	:content-type; bh=mdk83+tAKo7h2WFHWxCNGzATVEjEL/JpbTo+7luycCw=;
	b=dVZ9AQuMK+1r790zkQKHql1X2tiBkyJoVek+l0hbaic9F4cWNxvGqXTQqYOfSs4PxE
	7SME360Y7K0MUhk4PUdW/W2wNNJaUP/Dzq7JKMB4CcqT8Lji5tnMhZqOUuCAL4AJKSFl
	qpXiXYV0BknwzBWsdnqDWv6LihgWpfuNz4P1Y=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=message-id:date:from:user-agent:mime-version:to:subject:references
	:in-reply-to:content-type;
	b=eIQHUgDBC+oeIdv+0deuFW6j0OlcBNMKqMGLw4FpE7d6oMgALr2S8/XdxJLadoS9g7
	V1qzV0aGMQFHf0h6liu8EdoceTnrYNS74JJMgScshacr0F+Edu0eBtSdu9sYw0vTLz3F
	FDGGGA/eGnQVvblnhqacgQabj/bhb8B10M3lQ=
Received: by 10.213.35.145 with SMTP id p17mr8395948ebd.84.1286202719548;
	Mon, 04 Oct 2010 07:31:59 -0700 (PDT)
Received: from [172.31.2.230] (stockholm.ardendo.se [83.241.192.2])
	by mx.google.com with ESMTPS id u9sm7289249eeh.17.2010.10.04.07.31.44
	(version=SSLv3 cipher=RC4-MD5); Mon, 04 Oct 2010 07:31:46 -0700 (PDT)
Message-ID: <4CA9E54E.1060001@gmail.com>
Date: Mon, 04 Oct 2010 16:31:42 +0200
From: Tommy Lindgren <tommy.lindgren@gmail.com>
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US;
	rv:1.9.1.12) Gecko/20100915 Lightning/1.0b1 Thunderbird/3.0.8
MIME-Version: 1.0
To: libssh2-devel@cool.haxx.se
Subject: Re: [PATCH] Support for exit-signal messages
References: <4CA5EBD4.4000206@gmail.com>
	<877hi2c7fx.fsf@mocca.josefsson.org>	<4CA5FF4A.9040200@gmail.com>
	<87r5g9994x.fsf@mocca.josefsson.org>	<8762xkhqiq.fsf@gmail.com>
	<87r5g7vyxf.fsf@mocca.josefsson.org>
In-Reply-To: <87r5g7vyxf.fsf@mocca.josefsson.org>
Content-Type: multipart/mixed; boundary="------------030704000200040901000703"
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 04 Oct 2010 16:32:11 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 04 Oct 2010 16:32:02 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

This is a multi-part message in MIME format.
--------------030704000200040901000703
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

On 2010-10-03 21:50, Simon Josefsson wrote:
>
> Thus, I would suggest something like this:
>
> /* Get exit signal (without leading "SIG"), error message, and language
>     tag into newly allocated buffers of indicated length.  Caller can
>     use NULL pointers to indicate that the value should not be set.  The
>     *_len variables are set if they are non-NULL even if the
>     corresponding string parameter is NULL.   Returns LIBSSH2_ERROR_NONE
>     on success, or an API error code. */
> LIBSSH2_API int
> libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL *channel,
>                                  char **exitsignal,
>                                  size_t *exitsignal_len
>                                  char **errmsg,
>                                  size_t *errmsg_len,
>                                  char **langtag,
>                                  size_t *langtag_len)
>
> There is precedent for libssh2 functions to allocate memory (e.g.,
> libssh2_base64_decode), but we could also consider an interface that
> doesn't allocate memory.  I find that alternative more difficult to use
> from an application, though.

Thanks! Attached new patch with suggested change above.

The function is always returning LIBSSH2_ERROR_NONE. I'm not sure if it 
should returning anything else? (Perhaps if the malloc fails? Other API 
functions don't seem to do this though.)

Added a man page too. It should perhaps mention that errmsg/langtag 
aren't populated yet..

I'm slightly confused about returning pointers to allocated buffers 
though. The man page for libssh2_base64_decode says that the calling 
function can't free the memory in a reliable way. Why is that?

Regards,
Tommy

--------------030704000200040901000703
Content-Type: text/x-patch;
 name="exit_signal3.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="exit_signal3.patch"

diff --git a/docs/Makefile.am b/docs/Makefile.am
index 9f905d8..0207a65 100644
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@ -26,6 +26,7 @@ dist_man_MANS = \
 	libssh2_channel_forward_listen_ex.3 \
 	libssh2_channel_free.3 \
 	libssh2_channel_get_exit_status.3 \
+	libssh2_channel_get_exit_signal.3 \
 	libssh2_channel_handle_extended_data.3 \
 	libssh2_channel_handle_extended_data2.3 \
 	libssh2_channel_ignore_extended_data.3 \
diff --git a/docs/libssh2_channel_get_exit_signal.3 b/docs/libssh2_channel_get_exit_signal.3
new file mode 100644
index 0000000..3a18653
--- /dev/null
+++ b/docs/libssh2_channel_get_exit_signal.3
@@ -0,0 +1,36 @@
+.\" $Id$
+.\"
+.TH libssh2_channel_get_exit_signal 3 "4 Oct 2010" "libssh2 1.2.8" "libssh2 manual"
+.SH NAME
+libssh2_channel_get_exit_signal - get the remote exit signal
+.SH SYNOPSIS
+#include <libssh2.h>
+
+int 
+libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL *channel, char **exitsignal, size_t *exitsignal_len, char **errmsg, size_t *errmsg_len, char **langtag, size_t *langtag_len);
+
+.SH DESCRIPTION
+\fIchannel\fP - Closed channel stream to retrieve exit signal from.
+
+\fIexitsignal\fP - If not NULL, is populated by reference with the exit signal
+(without leading "SIG"). Note that the string is stored in a newly allocated
+buffer. If the remote program exited cleanly, the referenced string pointer
+will be set to NULL. 
+
+\fIexitsignal_len\fP - If not NULL, is populated by reference with the length
+of exitsignal. 
+
+\fIerrmsg\fP - If not NULL, is populated by reference with the error message
+(if provided by remote server, if not it will be set to NULL). Note that the
+string is stored in a newly allocated buffer.
+
+\fIerrmsg_len\fP - If not NULL, is populated by reference with the length of errmsg.
+
+\fIlangtag\fP - If not NULL, is populated by reference with the language tag 
+(if provided by remote server, if not it will be set to NULL). Note that the
+string is stored in a newly allocated buffer.
+
+\fIlangtag_len\fP - If not NULL, is populated by reference with the length of langtag.
+
+.SH RETURN VALUE
+Numeric error code corresponding to the the Error Code constants.
diff --git a/example/ssh2_exec.c b/example/ssh2_exec.c
index 1b74abc..90d81c5 100644
--- a/example/ssh2_exec.c
+++ b/example/ssh2_exec.c
@@ -86,6 +86,7 @@ int main(int argc, char *argv[])
     LIBSSH2_CHANNEL *channel;
     int rc;
     int exitcode;
+    char *exitsignal;
     int bytecount = 0;
     size_t len;
     LIBSSH2_KNOWNHOSTS *nh;
@@ -286,8 +287,13 @@ int main(int argc, char *argv[])
     if( rc == 0 )
     {
         exitcode = libssh2_channel_get_exit_status( channel );
+        libssh2_channel_get_exit_signal(channel, &exitsignal, NULL, NULL, NULL, NULL, NULL);
     }
-    printf("\nEXIT: %d bytecount: %d\n", exitcode, bytecount);
+
+    if (exitsignal)
+        printf("\nGot signal: %s\n", exitsignal);
+    else 
+        printf("\nEXIT: %d bytecount: %d\n", exitcode, bytecount);
 
     libssh2_channel_free(channel);
     channel = NULL;
diff --git a/include/libssh2.h b/include/libssh2.h
index df065a0..fd2b8bf 100644
--- a/include/libssh2.h
+++ b/include/libssh2.h
@@ -701,6 +701,13 @@ LIBSSH2_API int libssh2_channel_flush_ex(LIBSSH2_CHANNEL *channel,
  libssh2_channel_flush_ex((channel), SSH_EXTENDED_DATA_STDERR)
 
 LIBSSH2_API int libssh2_channel_get_exit_status(LIBSSH2_CHANNEL* channel);
+LIBSSH2_API int libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL* channel,
+                                                char **exitsignal,
+                                                size_t *exitsignal_len,
+                                                char **errmsg,
+                                                size_t *errmsg_len,
+                                                char **langtag,
+                                                size_t *langtag_len);
 LIBSSH2_API int libssh2_channel_send_eof(LIBSSH2_CHANNEL *channel);
 LIBSSH2_API int libssh2_channel_eof(LIBSSH2_CHANNEL *channel);
 LIBSSH2_API int libssh2_channel_wait_eof(LIBSSH2_CHANNEL *channel);
diff --git a/src/channel.c b/src/channel.c
index 2698777..e35693e 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -1459,6 +1459,63 @@ libssh2_channel_get_exit_status(LIBSSH2_CHANNEL *channel)
     return channel->exit_status;
 }
 
+/* 
+ * libssh2_channel_get_exit_signal 
+ * 
+ * Get exit signal (without leading "SIG"), error message, and language
+ * tag into newly allocated buffers of indicated length.  Caller can
+ * use NULL pointers to indicate that the value should not be set.  The
+ * *_len variables are set if they are non-NULL even if the
+ * corresponding string parameter is NULL.  Returns LIBSSH2_ERROR_NONE
+ * on success, or an API error code.
+ */
+LIBSSH2_API int
+libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL *channel,
+                                char **exitsignal,
+                                size_t *exitsignal_len,
+                                char **errmsg,
+                                size_t *errmsg_len,
+                                char **langtag,
+                                size_t *langtag_len)
+{
+    LIBSSH2_SESSION *session = channel->session;
+    size_t namelen = 0;
+
+    if (channel) {
+        if (channel->exit_signal) {
+            namelen = strlen(channel->exit_signal);
+            if (exitsignal) {
+               *exitsignal = LIBSSH2_ALLOC(session, namelen + 1); 
+                memcpy(*exitsignal, channel->exit_signal, namelen);
+                (*exitsignal)[namelen] = '\0';
+            }
+            if (exitsignal_len)
+                *exitsignal_len = namelen;
+        } else {
+            if (exitsignal)
+                *exitsignal = NULL; 
+            if (exitsignal_len)
+                *exitsignal_len = 0;
+        }
+
+        /* TODO: set error message and language tag */
+
+        if (errmsg)
+            *errmsg = NULL;
+
+        if (errmsg_len)
+            *errmsg_len = 0;
+
+        if (langtag)
+            *langtag = NULL;
+
+        if (langtag_len)
+            *langtag_len = 0;
+    }
+
+    return LIBSSH2_ERROR_NONE;
+}
+
 /*
  * _libssh2_channel_receive_window_adjust
  *
@@ -2394,6 +2451,10 @@ int _libssh2_channel_free(LIBSSH2_CHANNEL *channel)
 
     channel->free_state = libssh2_NB_state_idle;
 
+    if (channel->exit_signal) {
+        LIBSSH2_FREE(session, channel->exit_signal);
+    }
+
     /*
      * channel->remote.close *might* not be set yet, Well...
      * We've sent the close packet, what more do you want?
diff --git a/src/libssh2_priv.h b/src/libssh2_priv.h
index 037e781..a7aba9f 100644
--- a/src/libssh2_priv.h
+++ b/src/libssh2_priv.h
@@ -347,6 +347,9 @@ struct _LIBSSH2_CHANNEL
     /* channel's program exit status */
     int exit_status;
 
+    /* channel's program exit signal (without the SIG prefix) */
+    char *exit_signal;
+
     libssh2_channel_data local, remote;
     /* Amount of bytes to be refunded to receive window (but not yet sent) */
     unsigned long adjust_queue;
diff --git a/src/packet.c b/src/packet.c
index 8315f9c..d06b42e 100644
--- a/src/packet.c
+++ b/src/packet.c
@@ -762,6 +762,35 @@ _libssh2_packet_add(LIBSSH2_SESSION * session, unsigned char *data,
                 return 0;
             }
 
+            if (strlen == sizeof("exit-signal") - 1
+                && !memcmp("exit-signal", data + 9,
+                           sizeof("exit-signal") - 1)) {
+
+                /* command terminated due to signal */
+                session->packAdd_channel =
+                    _libssh2_channel_locate(session, channel);
+
+                if (session->packAdd_channel) {
+                    /* set signal name (without SIG prefix) */
+                    uint32_t namelen = _libssh2_ntohu32(data + 9 + sizeof("exit-signal"));
+                    session->packAdd_channel->exit_signal =
+                        LIBSSH2_ALLOC(session, namelen + 1);
+                    memcpy(session->packAdd_channel->exit_signal,
+                        data + 13 + sizeof("exit_signal"), namelen);
+                    session->packAdd_channel->exit_signal[namelen] = '\0';
+                    /* TODO: save error message and language tag */
+                    _libssh2_debug(session, LIBSSH2_TRACE_CONN,
+                                   "Exit signal %s received for channel %lu/%lu",
+                                   session->packAdd_channel->exit_signal,
+                                   session->packAdd_channel->local.id,
+                                   session->packAdd_channel->remote.id);
+                }
+
+                LIBSSH2_FREE(session, data);
+                session->packAdd_state = libssh2_NB_state_idle;
+                return 0;
+            }
+
             if (want_reply) {
               libssh2_packet_add_jump_point4:
                 session->packAdd_state = libssh2_NB_state_jump4;

--------------030704000200040901000703
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--------------030704000200040901000703--

From libssh2-devel-bounces@cool.haxx.se  Tue Oct  5 12:03:04 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o95A2bwu015788;
	Tue, 5 Oct 2010 12:02:59 +0200
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o95A2YVM015732
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Tue, 5 Oct 2010 12:02:35 +0200
Received: from mocca (c80-216-27-64.bredband.comhem.se [80.216.27.64])
	(authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5+lenny1) with ESMTP id
	o95A2PT0010102
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Tue, 5 Oct 2010 12:02:27 +0200
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: [PATCH] Support for exit-signal messages
References: <4CA5EBD4.4000206@gmail.com> <877hi2c7fx.fsf@mocca.josefsson.org>
	<4CA5FF4A.9040200@gmail.com> <87r5g9994x.fsf@mocca.josefsson.org>
	<8762xkhqiq.fsf@gmail.com> <87r5g7vyxf.fsf@mocca.josefsson.org>
	<4CA9E54E.1060001@gmail.com>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:101005:libssh2-devel@cool.haxx.se::8M8yNfSdhVs0cC6D:0Fo3
Date: Tue, 05 Oct 2010 12:02:22 +0200
In-Reply-To: <4CA9E54E.1060001@gmail.com> (Tommy Lindgren's message of "Mon,
	04 Oct 2010 16:31:42 +0200")
Message-ID: <871v85j6tt.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.2 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.8 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.96.3 at yxa-v
X-Virus-Status: Clean
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Tue, 05 Oct 2010 12:03:04 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Tue, 05 Oct 2010 12:02:35 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Tommy Lindgren <tommy.lindgren@gmail.com> writes:

> The function is always returning LIBSSH2_ERROR_NONE. I'm not sure if
> it should returning anything else? (Perhaps if the malloc fails? Other
> API functions don't seem to do this though.)

It needs to handle memory allocation errors and return
LIBSSH2_ERROR_ALLOC when it happens.  Something like this:

        s = LIBSSH2_ALLOC(session, len);
        if (!s) {
            return _libssh2_error(session, LIBSSH2_ERROR_ALLOC,
                                  "Unable to allocate memory for foo");
        }

> I'm slightly confused about returning pointers to allocated buffers
> though. The man page for libssh2_base64_decode says that the calling
> function can't free the memory in a reliable way. Why is that?

It can be issue under Windows when multiple runtime libraries are used
(one runtime library cannot free memory maintained by another runtime
library).  The workaround is for the application to provide malloc/free
callbacks.  Possibly libssh2 should have a 'libssh2_free' function.

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Oct  5 12:49:42 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o95AnWY0016797;
	Tue, 5 Oct 2010 12:49:41 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o95AnVmR016776
	for <libssh2-devel@cool.haxx.se>; Tue, 5 Oct 2010 12:49:31 +0200
Date: Tue, 5 Oct 2010 12:49:31 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: [PATCH] Support for exit-signal messages
In-Reply-To: <871v85j6tt.fsf@mocca.josefsson.org>
Message-ID: <alpine.DEB.2.00.1010051248570.25613@tvnag.unkk.fr>
References: <4CA5EBD4.4000206@gmail.com> <877hi2c7fx.fsf@mocca.josefsson.org>
	<4CA5FF4A.9040200@gmail.com>
	<87r5g9994x.fsf@mocca.josefsson.org> <8762xkhqiq.fsf@gmail.com>
	<87r5g7vyxf.fsf@mocca.josefsson.org> <4CA9E54E.1060001@gmail.com>
	<871v85j6tt.fsf@mocca.josefsson.org>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Tue, 05 Oct 2010 12:49:42 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Tue, 05 Oct 2010 12:49:31 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Tue, 5 Oct 2010, Simon Josefsson wrote:

> Possibly libssh2 should have a 'libssh2_free' function.

I think so, to be used when the default memory allocations are in use.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Oct  5 18:15:34 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o95GF6ju016112;
	Tue, 5 Oct 2010 18:15:30 +0200
Received: from mail2.barcelona04.com (mx2.barcelona04.com [190.139.108.163])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o95GF2YF015697
	for <libssh2-devel@cool.haxx.se>; Tue, 5 Oct 2010 18:15:03 +0200
X-Spam-Status: No, hits=0.0 required=4.0
	tests=BAYES_00: -1.665, CUSTOM_RULE_FROM: ALLOW, TOTAL_SCORE: -1.665,
	autolearn=ham
X-Spam-Level: 
Received: from localhost ([127.0.0.1]) by mail2.barcelona04.com
	for libssh2-devel@cool.haxx.se; Tue, 5 Oct 2010 12:19:50 -0300
Message-ID: <4CAB41F1.5090803@barcelona04.com>
Date: Tue, 05 Oct 2010 12:19:13 -0300
From: Ezequiel Ruiz <eruiz@barcelona04.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; es-AR;
	rv:1.9.2.9) Gecko/20100915 Thunderbird/3.1.4
MIME-Version: 1.0
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: ctime support on SFTP subsystem
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Tue, 05 Oct 2010 18:15:34 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Tue, 05 Oct 2010 18:15:04 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

  Hello guys.

I'm wondering if it would be possible to add ctime support for the 
_LIBSSH2_SFTP_ATTRIBUTES file attributes. Is this unsupported for some 
reason? (I mean, only atime and mtime are listed in there).

Regards,

Ezequiel

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Oct  5 18:44:30 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o95GiNv7005717;
	Tue, 5 Oct 2010 18:44:29 +0200
Received: from mail-ew0-f54.google.com (mail-ew0-f54.google.com
	[209.85.215.54])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o95GiLFl005701
	for <libssh2-devel@cool.haxx.se>; Tue, 5 Oct 2010 18:44:21 +0200
Received: by ewy22 with SMTP id 22so3820334ewy.41
	for <libssh2-devel@cool.haxx.se>; Tue, 05 Oct 2010 09:44:18 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:received:received:message-id:date:from
	:user-agent:mime-version:to:subject:references:in-reply-to
	:content-type; bh=ko3aCroL9RO/XUFZtzgqmmQa1ZHRcr5tgsGSlMMXyr4=;
	b=myOgvsg2c6Rz+cTWadrEwWDMzD21rgXjroTIbQrXrMGXlI2iM3T4aHaV2+Sb2flnXX
	ZF4k7CB3yOg8t7Q845Bmv1ii6q0qQu8nR+ud0uBckTIHRYsZcc5Hry5NEkNEmRETZO7C
	6ZYIjsbf4BoMBUzJ7m8nhvR2raYwUrxYts9Zc=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=message-id:date:from:user-agent:mime-version:to:subject:references
	:in-reply-to:content-type;
	b=HOyPydYynsfs2Y35o1Iah/yGT5KPdtyIUpb7Y4Rc2OyKZ1930ppl3jsgHtWMZxkQ1L
	gb+PAqHbeJURV8WQ+stXMujQ7OENnirI2G2xhyXrotKc+BY1U2C+hzl4nzO3HZ9JHN3R
	XP4QMyAUHu6T/FU/+pugYr4+AyUPbg2spAQb4=
Received: by 10.213.15.202 with SMTP id l10mr1311852eba.72.1286297057899;
	Tue, 05 Oct 2010 09:44:17 -0700 (PDT)
Received: from [172.31.2.230] (stockholm.ardendo.se [83.241.192.2])
	by mx.google.com with ESMTPS id u9sm9618402eeh.5.2010.10.05.09.44.15
	(version=SSLv3 cipher=RC4-MD5); Tue, 05 Oct 2010 09:44:16 -0700 (PDT)
Message-ID: <4CAB55DE.1080901@gmail.com>
Date: Tue, 05 Oct 2010 18:44:14 +0200
From: Tommy Lindgren <tommy.lindgren@gmail.com>
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US;
	rv:1.9.1.12) Gecko/20100915 Lightning/1.0b1 Thunderbird/3.0.8
MIME-Version: 1.0
To: libssh2-devel@cool.haxx.se
Subject: Re: [PATCH] Support for exit-signal messages
References: <4CA5EBD4.4000206@gmail.com>
	<877hi2c7fx.fsf@mocca.josefsson.org>	<4CA5FF4A.9040200@gmail.com>
	<87r5g9994x.fsf@mocca.josefsson.org>	<8762xkhqiq.fsf@gmail.com>
	<87r5g7vyxf.fsf@mocca.josefsson.org>	<4CA9E54E.1060001@gmail.com>
	<871v85j6tt.fsf@mocca.josefsson.org>
In-Reply-To: <871v85j6tt.fsf@mocca.josefsson.org>
Content-Type: multipart/mixed; boundary="------------050406030401070501040901"
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Tue, 05 Oct 2010 18:44:30 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Tue, 05 Oct 2010 18:44:21 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

This is a multi-part message in MIME format.
--------------050406030401070501040901
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

On 2010-10-05 12:02, Simon Josefsson wrote:
> Tommy Lindgren<tommy.lindgren@gmail.com>  writes:
>
>> The function is always returning LIBSSH2_ERROR_NONE. I'm not sure if
>> it should returning anything else? (Perhaps if the malloc fails? Other
>> API functions don't seem to do this though.)
>
> It needs to handle memory allocation errors and return
> LIBSSH2_ERROR_ALLOC when it happens.

OK. Updated patch attached.

Regards,
Tommy

--------------050406030401070501040901
Content-Type: text/x-patch;
 name="exit_signal4.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="exit_signal4.patch"

diff --git a/docs/Makefile.am b/docs/Makefile.am
index 9f905d8..0207a65 100644
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@ -26,6 +26,7 @@ dist_man_MANS = \
 	libssh2_channel_forward_listen_ex.3 \
 	libssh2_channel_free.3 \
 	libssh2_channel_get_exit_status.3 \
+	libssh2_channel_get_exit_signal.3 \
 	libssh2_channel_handle_extended_data.3 \
 	libssh2_channel_handle_extended_data2.3 \
 	libssh2_channel_ignore_extended_data.3 \
diff --git a/docs/libssh2_channel_get_exit_signal.3 b/docs/libssh2_channel_get_exit_signal.3
new file mode 100644
index 0000000..3a18653
--- /dev/null
+++ b/docs/libssh2_channel_get_exit_signal.3
@@ -0,0 +1,36 @@
+.\" $Id$
+.\"
+.TH libssh2_channel_get_exit_signal 3 "4 Oct 2010" "libssh2 1.2.8" "libssh2 manual"
+.SH NAME
+libssh2_channel_get_exit_signal - get the remote exit signal
+.SH SYNOPSIS
+#include <libssh2.h>
+
+int 
+libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL *channel, char **exitsignal, size_t *exitsignal_len, char **errmsg, size_t *errmsg_len, char **langtag, size_t *langtag_len);
+
+.SH DESCRIPTION
+\fIchannel\fP - Closed channel stream to retrieve exit signal from.
+
+\fIexitsignal\fP - If not NULL, is populated by reference with the exit signal
+(without leading "SIG"). Note that the string is stored in a newly allocated
+buffer. If the remote program exited cleanly, the referenced string pointer
+will be set to NULL. 
+
+\fIexitsignal_len\fP - If not NULL, is populated by reference with the length
+of exitsignal. 
+
+\fIerrmsg\fP - If not NULL, is populated by reference with the error message
+(if provided by remote server, if not it will be set to NULL). Note that the
+string is stored in a newly allocated buffer.
+
+\fIerrmsg_len\fP - If not NULL, is populated by reference with the length of errmsg.
+
+\fIlangtag\fP - If not NULL, is populated by reference with the language tag 
+(if provided by remote server, if not it will be set to NULL). Note that the
+string is stored in a newly allocated buffer.
+
+\fIlangtag_len\fP - If not NULL, is populated by reference with the length of langtag.
+
+.SH RETURN VALUE
+Numeric error code corresponding to the the Error Code constants.
diff --git a/example/ssh2_exec.c b/example/ssh2_exec.c
index 1b74abc..90d81c5 100644
--- a/example/ssh2_exec.c
+++ b/example/ssh2_exec.c
@@ -86,6 +86,7 @@ int main(int argc, char *argv[])
     LIBSSH2_CHANNEL *channel;
     int rc;
     int exitcode;
+    char *exitsignal;
     int bytecount = 0;
     size_t len;
     LIBSSH2_KNOWNHOSTS *nh;
@@ -286,8 +287,13 @@ int main(int argc, char *argv[])
     if( rc == 0 )
     {
         exitcode = libssh2_channel_get_exit_status( channel );
+        libssh2_channel_get_exit_signal(channel, &exitsignal, NULL, NULL, NULL, NULL, NULL);
     }
-    printf("\nEXIT: %d bytecount: %d\n", exitcode, bytecount);
+
+    if (exitsignal)
+        printf("\nGot signal: %s\n", exitsignal);
+    else 
+        printf("\nEXIT: %d bytecount: %d\n", exitcode, bytecount);
 
     libssh2_channel_free(channel);
     channel = NULL;
diff --git a/include/libssh2.h b/include/libssh2.h
index df065a0..fd2b8bf 100644
--- a/include/libssh2.h
+++ b/include/libssh2.h
@@ -701,6 +701,13 @@ LIBSSH2_API int libssh2_channel_flush_ex(LIBSSH2_CHANNEL *channel,
  libssh2_channel_flush_ex((channel), SSH_EXTENDED_DATA_STDERR)
 
 LIBSSH2_API int libssh2_channel_get_exit_status(LIBSSH2_CHANNEL* channel);
+LIBSSH2_API int libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL* channel,
+                                                char **exitsignal,
+                                                size_t *exitsignal_len,
+                                                char **errmsg,
+                                                size_t *errmsg_len,
+                                                char **langtag,
+                                                size_t *langtag_len);
 LIBSSH2_API int libssh2_channel_send_eof(LIBSSH2_CHANNEL *channel);
 LIBSSH2_API int libssh2_channel_eof(LIBSSH2_CHANNEL *channel);
 LIBSSH2_API int libssh2_channel_wait_eof(LIBSSH2_CHANNEL *channel);
diff --git a/src/channel.c b/src/channel.c
index 2698777..c88de48 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -1459,6 +1459,67 @@ libssh2_channel_get_exit_status(LIBSSH2_CHANNEL *channel)
     return channel->exit_status;
 }
 
+/* 
+ * libssh2_channel_get_exit_signal 
+ * 
+ * Get exit signal (without leading "SIG"), error message, and language
+ * tag into newly allocated buffers of indicated length.  Caller can
+ * use NULL pointers to indicate that the value should not be set.  The
+ * *_len variables are set if they are non-NULL even if the
+ * corresponding string parameter is NULL.  Returns LIBSSH2_ERROR_NONE
+ * on success, or an API error code.
+ */
+LIBSSH2_API int
+libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL *channel,
+                                char **exitsignal,
+                                size_t *exitsignal_len,
+                                char **errmsg,
+                                size_t *errmsg_len,
+                                char **langtag,
+                                size_t *langtag_len)
+{
+    LIBSSH2_SESSION *session = channel->session;
+    size_t namelen = 0;
+
+    if (channel) {
+        if (channel->exit_signal) {
+            namelen = strlen(channel->exit_signal);
+            if (exitsignal) {
+               *exitsignal = LIBSSH2_ALLOC(session, namelen + 1); 
+                if (!*exitsignal) {
+                    return _libssh2_error(session, LIBSSH2_ERROR_ALLOC,
+                        "Unable to allocate memory for signal name");
+                }
+                memcpy(*exitsignal, channel->exit_signal, namelen);
+                (*exitsignal)[namelen] = '\0';
+            }
+            if (exitsignal_len)
+                *exitsignal_len = namelen;
+        } else {
+            if (exitsignal)
+                *exitsignal = NULL; 
+            if (exitsignal_len)
+                *exitsignal_len = 0;
+        }
+
+        /* TODO: set error message and language tag */
+
+        if (errmsg)
+            *errmsg = NULL;
+
+        if (errmsg_len)
+            *errmsg_len = 0;
+
+        if (langtag)
+            *langtag = NULL;
+
+        if (langtag_len)
+            *langtag_len = 0;
+    }
+
+    return LIBSSH2_ERROR_NONE;
+}
+
 /*
  * _libssh2_channel_receive_window_adjust
  *
@@ -2394,6 +2455,10 @@ int _libssh2_channel_free(LIBSSH2_CHANNEL *channel)
 
     channel->free_state = libssh2_NB_state_idle;
 
+    if (channel->exit_signal) {
+        LIBSSH2_FREE(session, channel->exit_signal);
+    }
+
     /*
      * channel->remote.close *might* not be set yet, Well...
      * We've sent the close packet, what more do you want?
diff --git a/src/libssh2_priv.h b/src/libssh2_priv.h
index 037e781..a7aba9f 100644
--- a/src/libssh2_priv.h
+++ b/src/libssh2_priv.h
@@ -347,6 +347,9 @@ struct _LIBSSH2_CHANNEL
     /* channel's program exit status */
     int exit_status;
 
+    /* channel's program exit signal (without the SIG prefix) */
+    char *exit_signal;
+
     libssh2_channel_data local, remote;
     /* Amount of bytes to be refunded to receive window (but not yet sent) */
     unsigned long adjust_queue;
diff --git a/src/packet.c b/src/packet.c
index 8315f9c..bcf84bb 100644
--- a/src/packet.c
+++ b/src/packet.c
@@ -762,6 +762,40 @@ _libssh2_packet_add(LIBSSH2_SESSION * session, unsigned char *data,
                 return 0;
             }
 
+            if (strlen == sizeof("exit-signal") - 1
+                && !memcmp("exit-signal", data + 9,
+                           sizeof("exit-signal") - 1)) {
+
+                /* command terminated due to signal */
+                session->packAdd_channel =
+                    _libssh2_channel_locate(session, channel);
+
+                if (session->packAdd_channel) {
+                    /* set signal name (without SIG prefix) */
+                    uint32_t namelen = _libssh2_ntohu32(data + 9 + sizeof("exit-signal"));
+                    session->packAdd_channel->exit_signal =
+                        LIBSSH2_ALLOC(session, namelen + 1);
+                    if (!session->packAdd_channel->exit_signal) {
+                        _libssh2_error(session, LIBSSH2_ERROR_ALLOC,
+                            "Unable to allocate memory for signal name");
+                    } else {
+                        memcpy(session->packAdd_channel->exit_signal,
+                            data + 13 + sizeof("exit_signal"), namelen);
+                        session->packAdd_channel->exit_signal[namelen] = '\0';
+                        /* TODO: save error message and language tag */
+                        _libssh2_debug(session, LIBSSH2_TRACE_CONN,
+                                       "Exit signal %s received for channel %lu/%lu",
+                                       session->packAdd_channel->exit_signal,
+                                       session->packAdd_channel->local.id,
+                                       session->packAdd_channel->remote.id);
+                    }
+                }
+
+                LIBSSH2_FREE(session, data);
+                session->packAdd_state = libssh2_NB_state_idle;
+                return 0;
+            }
+
             if (want_reply) {
               libssh2_packet_add_jump_point4:
                 session->packAdd_state = libssh2_NB_state_jump4;

--------------050406030401070501040901
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--------------050406030401070501040901--

From libssh2-devel-bounces@cool.haxx.se  Tue Oct  5 18:47:59 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o95GltQ1007324;
	Tue, 5 Oct 2010 18:47:58 +0200
Received: from ponderosa.fch.wimsey.bc.ca (zz20920564179.cipherkey.net
	[209.205.64.179])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o95Glr6R007319
	for <libssh2-devel@cool.haxx.se>; Tue, 5 Oct 2010 18:47:54 +0200
Received: by coneharvesters.com
	via sendmail with stdio id <m1P3Ag5-000l6IC@ponderosa.fch.wimsey.bc.ca>
	for libssh2-devel@cool.haxx.se; Tue, 5 Oct 2010 09:47:45 -0700 (PDT)
Date: Tue, 5 Oct 2010 09:47:44 -0700
From: Dan Fandrich <dan@coneharvesters.com>
To: libssh2-devel@cool.haxx.se
Subject: Re: ctime support on SFTP subsystem
Message-ID: <20101005164743.GA13207@coneharvesters.com>
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <4CAB41F1.5090803@barcelona04.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <4CAB41F1.5090803@barcelona04.com>
User-Agent: Mutt/1.5.21 (2010-09-15)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Tue, 05 Oct 2010 18:47:59 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Tue, 05 Oct 2010 18:47:54 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Tue, Oct 05, 2010 at 12:19:13PM -0300, Ezequiel Ruiz wrote:
> I'm wondering if it would be possible to add ctime support for the
> _LIBSSH2_SFTP_ATTRIBUTES file attributes. Is this unsupported for
> some reason? (I mean, only atime and mtime are listed in there).

You can't change ctime to an arbitrary value, by definition. ctime is
always updated by the system when the inode changes. That's why system
calls like utimes(2) only allow changes to atime and mtime as well.

>>> Dan
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Oct  5 18:53:08 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o95Gr49s009169;
	Tue, 5 Oct 2010 18:53:07 +0200
Received: from mail2.barcelona04.com (mx2.barcelona04.com [190.139.108.163])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o95Gr1jH009052
	for <libssh2-devel@cool.haxx.se>; Tue, 5 Oct 2010 18:53:02 +0200
X-Spam-Status: No, hits=0.0 required=4.0
	tests=BAYES_00: -1.665, CUSTOM_RULE_FROM: ALLOW, TOTAL_SCORE: -1.665,
	autolearn=ham
X-Spam-Level: 
Received: from localhost ([127.0.0.1]) by mail2.barcelona04.com
	for libssh2-devel@cool.haxx.se; Tue, 5 Oct 2010 13:53:31 -0300
Message-ID: <4CAB57E2.8050406@barcelona04.com>
Date: Tue, 05 Oct 2010 13:52:50 -0300
From: Ezequiel Ruiz <eruiz@barcelona04.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; es-AR;
	rv:1.9.2.9) Gecko/20100915 Thunderbird/3.1.4
MIME-Version: 1.0
To: libssh2-devel@cool.haxx.se
Subject: Re: ctime support on SFTP subsystem
References: <4CAB41F1.5090803@barcelona04.com>
	<20101005164743.GA13207@coneharvesters.com>
In-Reply-To: <20101005164743.GA13207@coneharvesters.com>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Tue, 05 Oct 2010 18:53:08 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Tue, 05 Oct 2010 18:53:02 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="iso-8859-1"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

  El 05/10/2010 01:47 p.m., Dan Fandrich escribi=F3:
> On Tue, Oct 05, 2010 at 12:19:13PM -0300, Ezequiel Ruiz wrote:
>> I'm wondering if it would be possible to add ctime support for the
>> _LIBSSH2_SFTP_ATTRIBUTES file attributes. Is this unsupported for
>> some reason? (I mean, only atime and mtime are listed in there).
> You can't change ctime to an arbitrary value, by definition. ctime is
> always updated by the system when the inode changes. That's why system
> calls like utimes(2) only allow changes to atime and mtime as well.
>
>>>> Dan
> _______________________________________________
> libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
Yes I understand, but I don't want to change it, just want to "read" it =

with the stat() based functions. Would it be possible to add support for =

reading that value with stat() ?

Regards,

Ezequiel

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Oct  5 19:13:05 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o95HCvpL021901;
	Tue, 5 Oct 2010 19:13:03 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o95HCu9G021896
	for <libssh2-devel@cool.haxx.se>; Tue, 5 Oct 2010 19:12:56 +0200
Date: Tue, 5 Oct 2010 19:12:56 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: ctime support on SFTP subsystem
In-Reply-To: <4CAB57E2.8050406@barcelona04.com>
Message-ID: <alpine.DEB.2.00.1010051911520.25613@tvnag.unkk.fr>
References: <4CAB41F1.5090803@barcelona04.com>
	<20101005164743.GA13207@coneharvesters.com>
	<4CAB57E2.8050406@barcelona04.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Tue, 05 Oct 2010 19:13:04 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Tue, 05 Oct 2010 19:12:56 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Tue, 5 Oct 2010, Ezequiel Ruiz wrote:

> Yes I understand, but I don't want to change it, just want to "read" it with 
> the stat() based functions. Would it be possible to add support for reading 
> that value with stat() ?

No, I don't think that field is sent by the server. See section "5. File 
Attributes" of the draft-ietf-secsh-filexfer-02.txt for full details.

http://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/draft-ietf-secsh-filexfer-02.txt

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Oct  5 19:47:23 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o95HlCGj008076;
	Tue, 5 Oct 2010 19:47:22 +0200
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o95HlB1P008072
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Tue, 5 Oct 2010 19:47:11 +0200
Received: from mocca (c80-216-27-64.bredband.comhem.se [80.216.27.64])
	(authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5+lenny1) with ESMTP id
	o95Hl2rZ006418
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Tue, 5 Oct 2010 19:47:04 +0200
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: [PATCH] Support for exit-signal messages
References: <4CA5EBD4.4000206@gmail.com> <877hi2c7fx.fsf@mocca.josefsson.org>
	<4CA5FF4A.9040200@gmail.com> <87r5g9994x.fsf@mocca.josefsson.org>
	<8762xkhqiq.fsf@gmail.com> <87r5g7vyxf.fsf@mocca.josefsson.org>
	<4CA9E54E.1060001@gmail.com> <871v85j6tt.fsf@mocca.josefsson.org>
	<alpine.DEB.2.00.1010051248570.25613@tvnag.unkk.fr>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:101005:libssh2-devel@cool.haxx.se::71CbxfX23QkI0deI:LZmo
Date: Tue, 05 Oct 2010 19:46:59 +0200
In-Reply-To: <alpine.DEB.2.00.1010051248570.25613@tvnag.unkk.fr> (Daniel
	Stenberg's message of "Tue, 5 Oct 2010 12:49:31 +0200 (CEST)")
Message-ID: <87fwwkv8fg.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.2 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.8 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.96.3 at yxa-v
X-Virus-Status: Clean
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Tue, 05 Oct 2010 19:47:23 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Tue, 05 Oct 2010 19:47:11 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Daniel Stenberg <daniel@haxx.se> writes:

> On Tue, 5 Oct 2010, Simon Josefsson wrote:
>
>> Possibly libssh2 should have a 'libssh2_free' function.
>
> I think so, to be used when the default memory allocations are in use.

How about something like this?

/Simon

diff --git a/NEWS b/NEWS
index f706192..b907919 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,7 @@
+This release includes the following changes:
+
+ o Added libssh2_free()
+
 libssh2 1.2.7 (August 17, 2010)
 
 This release includes the following changes:
diff --git a/include/libssh2.h b/include/libssh2.h
index df065a0..ad7c51f 100644
--- a/include/libssh2.h
+++ b/include/libssh2.h
@@ -400,6 +400,13 @@ LIBSSH2_API int libssh2_init(int flags);
  */
 LIBSSH2_API void libssh2_exit(void);
 
+/*
+ * libssh2_free()
+ *
+ * Deallocate memory using the default memory allocator.
+ */
+LIBSSH2_API void libssh2_free(void *ptr)
+
 /* Session API */
 LIBSSH2_API LIBSSH2_SESSION *
 libssh2_session_init_ex(LIBSSH2_ALLOC_FUNC((*my_alloc)),
diff --git a/src/misc.c b/src/misc.c
index e6c5e99..767c3cd 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -1,5 +1,6 @@
 /* Copyright (c) 2004-2007 Sara Golemon <sarag@libssh2.org>
  * Copyright (c) 2009 by Daniel Stenberg
+ * Copyright (c) 2010  Simon Josefsson
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms,
@@ -348,6 +349,12 @@ size_t _libssh2_base64_encode(LIBSSH2_SESSION *session,
 }
 /* ---- End of Base64 Encoding ---- */
 
+LIBSSH2_API void
+libssh2_free(void *ptr)
+{
+  free (ptr);
+}
+
 #ifdef LIBSSH2DEBUG
 LIBSSH2_API int
 libssh2_trace(LIBSSH2_SESSION * session, int bitmask)
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Oct  5 19:48:28 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o95HmQMj008483;
	Tue, 5 Oct 2010 19:48:27 +0200
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o95HmPhj008470
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Tue, 5 Oct 2010 19:48:25 +0200
Received: from mocca (c80-216-27-64.bredband.comhem.se [80.216.27.64])
	(authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5+lenny1) with ESMTP id
	o95HmHS6006462
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Tue, 5 Oct 2010 19:48:19 +0200
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: [PATCH] Support for exit-signal messages
References: <4CA5EBD4.4000206@gmail.com> <877hi2c7fx.fsf@mocca.josefsson.org>
	<4CA5FF4A.9040200@gmail.com> <87r5g9994x.fsf@mocca.josefsson.org>
	<8762xkhqiq.fsf@gmail.com> <87r5g7vyxf.fsf@mocca.josefsson.org>
	<4CA9E54E.1060001@gmail.com> <871v85j6tt.fsf@mocca.josefsson.org>
	<4CAB55DE.1080901@gmail.com>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:101005:libssh2-devel@cool.haxx.se::jpk7qwPIFJ2iHkk6:Rngj
Date: Tue, 05 Oct 2010 19:48:14 +0200
In-Reply-To: <4CAB55DE.1080901@gmail.com> (Tommy Lindgren's message of "Tue,
	05 Oct 2010 18:44:14 +0200")
Message-ID: <87bp78v8dd.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.2 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.8 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.96.3 at yxa-v
X-Virus-Status: Clean
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Tue, 05 Oct 2010 19:48:28 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Tue, 05 Oct 2010 19:48:25 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Tommy Lindgren <tommy.lindgren@gmail.com> writes:

> On 2010-10-05 12:02, Simon Josefsson wrote:
>> Tommy Lindgren<tommy.lindgren@gmail.com>  writes:
>>
>>> The function is always returning LIBSSH2_ERROR_NONE. I'm not sure if
>>> it should returning anything else? (Perhaps if the malloc fails? Other
>>> API functions don't seem to do this though.)
>>
>> It needs to handle memory allocation errors and return
>> LIBSSH2_ERROR_ALLOC when it happens.
>
> OK. Updated patch attached.

All general issues I can think of looks resolved.

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Oct  5 19:50:57 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o95HouHw009649;
	Tue, 5 Oct 2010 19:50:57 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o95HosqQ009639
	for <libssh2-devel@cool.haxx.se>; Tue, 5 Oct 2010 19:50:54 +0200
Date: Tue, 5 Oct 2010 19:50:54 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: [PATCH] Support for exit-signal messages
In-Reply-To: <87fwwkv8fg.fsf@mocca.josefsson.org>
Message-ID: <alpine.DEB.2.00.1010051948350.25613@tvnag.unkk.fr>
References: <4CA5EBD4.4000206@gmail.com> <877hi2c7fx.fsf@mocca.josefsson.org>
	<4CA5FF4A.9040200@gmail.com>
	<87r5g9994x.fsf@mocca.josefsson.org> <8762xkhqiq.fsf@gmail.com>
	<87r5g7vyxf.fsf@mocca.josefsson.org> <4CA9E54E.1060001@gmail.com>
	<871v85j6tt.fsf@mocca.josefsson.org>
	<alpine.DEB.2.00.1010051248570.25613@tvnag.unkk.fr>
	<87fwwkv8fg.fsf@mocca.josefsson.org>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Tue, 05 Oct 2010 19:50:57 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Tue, 05 Oct 2010 19:50:54 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Tue, 5 Oct 2010, Simon Josefsson wrote:

> +LIBSSH2_API void
> +libssh2_free(void *ptr)
> +{
> +  free (ptr);
> +}

I think it's too simple. For example, to be able to free the memory returned 
by libssh2_base64_decode() it would have to use the internal LIBSSH2_FREE() 
call which needs the session pointer (and will then use the correct free 
callback).

Thus it would need to be something like:

LIBSSH2_API void
libssh2_free(LIBSSH2_SESSION *session, void *ptr)
{
   LIBSSH2_FREE(session, ptr);
}


-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Oct  5 20:45:46 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o95IjVg6011762;
	Tue, 5 Oct 2010 20:45:43 +0200
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o95IjTRv011751
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Tue, 5 Oct 2010 20:45:29 +0200
Received: from mocca (c80-216-27-64.bredband.comhem.se [80.216.27.64])
	(authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5+lenny1) with ESMTP id
	o95IjK5t010087
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Tue, 5 Oct 2010 20:45:23 +0200
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: [PATCH] Support for exit-signal messages
References: <4CA5EBD4.4000206@gmail.com> <877hi2c7fx.fsf@mocca.josefsson.org>
	<4CA5FF4A.9040200@gmail.com> <87r5g9994x.fsf@mocca.josefsson.org>
	<8762xkhqiq.fsf@gmail.com> <87r5g7vyxf.fsf@mocca.josefsson.org>
	<4CA9E54E.1060001@gmail.com> <871v85j6tt.fsf@mocca.josefsson.org>
	<alpine.DEB.2.00.1010051248570.25613@tvnag.unkk.fr>
	<87fwwkv8fg.fsf@mocca.josefsson.org>
	<alpine.DEB.2.00.1010051948350.25613@tvnag.unkk.fr>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:101005:libssh2-devel@cool.haxx.se::A9Isn9FIBiUpV80S:c55
Date: Tue, 05 Oct 2010 20:45:17 +0200
In-Reply-To: <alpine.DEB.2.00.1010051948350.25613@tvnag.unkk.fr> (Daniel
	Stenberg's message of "Tue, 5 Oct 2010 19:50:54 +0200 (CEST)")
Message-ID: <87sk0kscle.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.2 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.8 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.96.3 at yxa-v
X-Virus-Status: Clean
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Tue, 05 Oct 2010 20:45:46 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Tue, 05 Oct 2010 20:45:29 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Daniel Stenberg <daniel@haxx.se> writes:

> On Tue, 5 Oct 2010, Simon Josefsson wrote:
>
>> +LIBSSH2_API void
>> +libssh2_free(void *ptr)
>> +{
>> +  free (ptr);
>> +}
>
> I think it's too simple. For example, to be able to free the memory
> returned by libssh2_base64_decode() it would have to use the internal
> LIBSSH2_FREE() call which needs the session pointer (and will then use
> the correct free callback).

Yeah, I thought about that, but kind of preferred the other way around
to avoid the LIBSSH2_SESSION dependency.  But I guess the library is
already too deeply married into the LIBSSH2_SESSION parameter anyway
that it doesn't make any sense to try and avoid it here.  I can prepare
an updated patch tomorrow..

/Simon

> Thus it would need to be something like:
>
> LIBSSH2_API void
> libssh2_free(LIBSSH2_SESSION *session, void *ptr)
> {
>   LIBSSH2_FREE(session, ptr);
> }
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct  6 00:47:12 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o95MkQhI027231;
	Wed, 6 Oct 2010 00:47:07 +0200
Received: from bxwall.lpma.nsw.gov.au (bxwall.lpma.nsw.gov.au [203.57.8.11])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o95MkKi9027221
	for <libssh2-devel@cool.haxx.se>; Wed, 6 Oct 2010 00:46:24 +0200
From: Phillip Wu <Phillip.Wu@lpma.nsw.gov.au>
To: "libssh2-devel@cool.haxx.se" <libssh2-devel@cool.haxx.se>
Date: Wed, 6 Oct 2010 09:47:30 +1100
Subject: libssh2 & Visual Studio 2010 Express
Thread-Topic: libssh2 & Visual Studio 2010 Express
Thread-Index: Actk30rsx2gNUIAhQ6qmEz9Bmbjgdg==
Message-ID: <137CA4FE5CCDB7449ED3CD4445077AC30502D37803@SRV-QS-MAIL6.lands.nsw>
Accept-Language: en-US, en-AU
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US, en-AU
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 06 Oct 2010 00:47:12 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 06 Oct 2010 00:46:24 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============0390079931=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--===============0390079931==
Content-Language: en-US
Content-Type: multipart/alternative; 
    boundary="_000_137CA4FE5CCDB7449ED3CD4445077AC30502D37803SRVQSMAIL6lan_"

--_000_137CA4FE5CCDB7449ED3CD4445077AC30502D37803SRVQSMAIL6lan_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Hi,

Has anyone compiled libssh2 1.2.7 with Visual Studio?

I presume that I would use c#.

If so what is the process?

Thanks for any help.


***************************************************************
This message is intended for the addressee named and may contain confidenti=
al information. If you are not the intended recipient, please delete it and=
 notify the sender. Views expressed in this message are those of the indivi=
dual sender, and are not necessarily the views of the Land and Property Man=
agement Authority. This email message has been swept by MIMEsweeper for the=
 presence of computer viruses.
***************************************************************
Please consider the environment before printing this email.

--_000_137CA4FE5CCDB7449ED3CD4445077AC30502D37803SRVQSMAIL6lan_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">

<head>
<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; charset=3Dus-ascii">
<meta name=3DGenerator content=3D"Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:purple;
	text-decoration:underline;}
span.EmailStyle17
	{mso-style-type:personal-compose;
	font-family:"Calibri","sans-serif";
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
	{page:WordSection1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext=3D"edit">
  <o:idmap v:ext=3D"edit" data=3D"1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=3DEN-AU link=3Dblue vlink=3Dpurple>

<div class=3DWordSection1>

<p class=3DMsoNormal>Hi,<o:p></o:p></p>

<p class=3DMsoNormal><o:p>&nbsp;</o:p></p>

<p class=3DMsoNormal>Has anyone compiled libssh2 1.2.7 with Visual Studio?<=
o:p></o:p></p>

<p class=3DMsoNormal><o:p>&nbsp;</o:p></p>

<p class=3DMsoNormal>I presume that I would use c#. <o:p></o:p></p>

<p class=3DMsoNormal><o:p>&nbsp;</o:p></p>

<p class=3DMsoNormal>If so what is the process?<o:p></o:p></p>

<p class=3DMsoNormal><o:p>&nbsp;</o:p></p>

<p class=3DMsoNormal>Thanks for any help.<o:p></o:p></p>

<p class=3DMsoNormal><o:p>&nbsp;</o:p></p>

</div>

<font size=3D"1"><font size=3D"2"><p /><hr /><p /><p>This message is intend=
ed for the addressee named and may contain confidential information. If you=
 are not the <font size=3D"2">intended recipient, please delete it and noti=
fy the sender. </font><font size=3D"2">Views expressed in this message are =
those of the </font><font size=3D"2">individual sender, and are not necessa=
rily the views of </font><font size=3D"2">the Land and Property Management =
Authority. </font><font size=3D"2">This email message has been swept by MIM=
Esweeper </font><font size=3D"2">for the presence of computer viruses.</fon=
t> </p><p /><hr /><p><font face=3D"Helvetica-Bold" color=3D"#003200" size=
=3D"2"></font></p><p align=3D"left"><font face=3D"arial,helvetica,sans-seri=
f"><strong>Please consider the environment before printing this email.</str=
ong></font></p></font></font>
</body>

</html>

--_000_137CA4FE5CCDB7449ED3CD4445077AC30502D37803SRVQSMAIL6lan_--

--===============0390079931==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============0390079931==--

From libssh2-devel-bounces@cool.haxx.se  Wed Oct  6 00:56:54 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o95MumB1031319;
	Wed, 6 Oct 2010 00:56:53 +0200
Received: from mail2.barcelona04.com (mx2.barcelona04.com [190.139.108.163])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o95Mujf8031316
	for <libssh2-devel@cool.haxx.se>; Wed, 6 Oct 2010 00:56:46 +0200
X-Spam-Status: No, hits=0.0 required=4.0
	tests=AWL: -0.000,BAYES_00: -1.665,HTML_MESSAGE: 0.001,
	CUSTOM_RULE_FROM: ALLOW,TOTAL_SCORE: -1.665,autolearn=ham
X-Spam-Level: 
Received: from localhost ([127.0.0.1]) by mail2.barcelona04.com;
	Tue, 5 Oct 2010 19:57:11 -0300
Message-ID: <4CABAD1E.5070106@barcelona04.com>
Date: Tue, 05 Oct 2010 19:56:30 -0300
From: Ezequiel Ruiz <eruiz@barcelona04.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; es-AR;
	rv:1.9.2.9) Gecko/20100915 Thunderbird/3.1.4
MIME-Version: 1.0
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: libssh2 & Visual Studio 2010 Express
References: <137CA4FE5CCDB7449ED3CD4445077AC30502D37803@SRV-QS-MAIL6.lands.nsw>
In-Reply-To: <137CA4FE5CCDB7449ED3CD4445077AC30502D37803@SRV-QS-MAIL6.lands.nsw>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 06 Oct 2010 00:56:54 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 06 Oct 2010 00:56:47 +0200 (CEST)
Cc: Phillip Wu <Phillip.Wu@lpma.nsw.gov.au>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============0020331136=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

This is a multi-part message in MIME format.
--===============0020331136==
Content-Type: multipart/alternative;
 boundary="------------090907030604020703050207"

This is a multi-part message in MIME format.
--------------090907030604020703050207
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit

  El 05/10/2010 07:47 p.m., Phillip Wu escribió:
>
> Hi,
>
> Has anyone compiled libssh2 1.2.7 with Visual Studio?
>
> I presume that I would use c#.
>
> If so what is the process?
>
> Thanks for any help.
>
> ------------------------------------------------------------------------
>
> This message is intended for the addressee named and may contain 
> confidential information. If you are not the intended recipient, 
> please delete it and notify the sender. Views expressed in this 
> message are those of the individual sender, and are not necessarily 
> the views of the Land and Property Management Authority. This email 
> message has been swept by MIMEsweeper for the presence of computer 
> viruses.
>
> ------------------------------------------------------------------------
>
> *Please consider the environment before printing this email.*
>
>
> _______________________________________________
> libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
I'm using Visual C++ 2010 to compile libssh2 1.2.7 without any issue. 
Managed code should work too after compiling the DLL; I didn't tried 
.NET, but I've tested SWIG for Python (still from MSVC2010) and it works 
as expected.

Regards,

Ezequiel

--------------090907030604020703050207
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#ffffff" text="#000000">
    El 05/10/2010 07:47 p.m., Phillip Wu escribi&oacute;:
    <blockquote
cite="mid:137CA4FE5CCDB7449ED3CD4445077AC30502D37803@SRV-QS-MAIL6.lands.nsw"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html;
        charset=ISO-8859-1">
      <meta name="Generator" content="Microsoft Word 12 (filtered
        medium)">
      <style>
<!--
 /* Font Definitions */
 @font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:purple;
	text-decoration:underline;}
span.EmailStyle17
	{mso-style-type:personal-compose;
	font-family:"Calibri","sans-serif";
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
	{page:WordSection1;}
-->
</style><!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
      <div class="WordSection1">
        <p class="MsoNormal">Hi,<o:p></o:p></p>
        <p class="MsoNormal"><o:p>&nbsp;</o:p></p>
        <p class="MsoNormal">Has anyone compiled libssh2 1.2.7 with
          Visual Studio?<o:p></o:p></p>
        <p class="MsoNormal"><o:p>&nbsp;</o:p></p>
        <p class="MsoNormal">I presume that I would use c#. <o:p></o:p></p>
        <p class="MsoNormal"><o:p>&nbsp;</o:p></p>
        <p class="MsoNormal">If so what is the process?<o:p></o:p></p>
        <p class="MsoNormal"><o:p>&nbsp;</o:p></p>
        <p class="MsoNormal">Thanks for any help.<o:p></o:p></p>
        <p class="MsoNormal"><o:p>&nbsp;</o:p></p>
      </div>
      <hr>
      <p><font size="1"><font size="2">This message is intended for the
            addressee named and may contain confidential information. If
            you are not the <font size="2">intended recipient, please
              delete it and notify the sender. </font><font size="2">Views
              expressed in this message are those of the </font><font
              size="2">individual sender, and are not necessarily the
              views of </font><font size="2">the Land and Property
              Management Authority. </font><font size="2">This email
              message has been swept by MIMEsweeper </font><font
              size="2">for the presence of computer viruses.</font> </font></font></p>
      <hr>
      <p align="left"><font size="1"><font size="2"><font
              face="arial,helvetica,sans-serif"><strong>Please consider
                the environment before printing this email.</strong></font></font></font></p>
      <pre wrap="">
<fieldset class="mimeAttachmentHeader"></fieldset>
_______________________________________________
libssh2-devel <a class="moz-txt-link-freetext" href="http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel">http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel</a>
</pre>
    </blockquote>
    I'm using Visual C++ 2010 to compile libssh2 1.2.7 without any
    issue. Managed code should work too after compiling the DLL; I
    didn't tried .NET, but I've tested SWIG for Python (still from
    MSVC2010) and it works as expected.<br>
    <br>
    Regards,<br>
    <br>
    Ezequiel<br>
  </body>
</html>

--------------090907030604020703050207--


--===============0020331136==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============0020331136==--

From libssh2-devel-bounces@cool.haxx.se  Wed Oct  6 11:50:39 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o969oLhB021998;
	Wed, 6 Oct 2010 11:50:35 +0200
Received: from mail-qy0-f175.google.com (mail-qy0-f175.google.com
	[209.85.216.175])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o969oKS0021986
	for <libssh2-devel@cool.haxx.se>; Wed, 6 Oct 2010 11:50:20 +0200
Received: by qyk30 with SMTP id 30so40392qyk.20
	for <libssh2-devel@cool.haxx.se>; Wed, 06 Oct 2010 02:50:13 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:mime-version:received:sender:received
	:in-reply-to:references:date:x-google-sender-auth:message-id:subject
	:from:to:content-type;
	bh=fdFiZizHg4blvOsxhsAsWKiFSBMpv1byRT3oJ6gsl7M=;
	b=H4x5ILCUkKbHFINpQmvnkDTYUMTMndlF8VTHAsaX9ms0c/0g4ofes6kT/Zth78Bo9E
	KUh/2KwlowJy2YPseVrB8CUCDjXeVL6UbJZXZ75ZibXNDCVPTETrIECnqN8X4TptOm8z
	1m7CnCrqbIf7PiFIPhTCWxkFk2CMZj3GyJpQE=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=mime-version:sender:in-reply-to:references:date
	:x-google-sender-auth:message-id:subject:from:to:content-type;
	b=PfvJZvyr2yO0ItLMpQmVtZOGXgDMKktHbFkhYqCRKdoJk7Wjc1M5UU5ieGVi5l+AB1
	qglEkmayYsjqyJ0HD2znZfXqXXeZ2cihMOU5pmA65mW8ZCcsZ1MweTevn5NwjgfLOhPg
	GgGO5jClATZF04CZVoYn/tjl3WwwKOl9aw8nE=
MIME-Version: 1.0
Received: by 10.224.60.213 with SMTP id q21mr9453443qah.81.1286358613704; Wed,
	06 Oct 2010 02:50:13 -0700 (PDT)
Received: by 10.229.66.157 with HTTP; Wed, 6 Oct 2010 02:50:13 -0700 (PDT)
In-Reply-To: <alpine.DEB.2.00.1010051911520.25613@tvnag.unkk.fr>
References: <4CAB41F1.5090803@barcelona04.com>
	<20101005164743.GA13207@coneharvesters.com>
	<4CAB57E2.8050406@barcelona04.com>
	<alpine.DEB.2.00.1010051911520.25613@tvnag.unkk.fr>
Date: Wed, 6 Oct 2010 11:50:13 +0200
X-Google-Sender-Auth: IYwSj16l0n3TdgKgwwSnvfk38Ec
Message-ID: <AANLkTimm7invDZBmW780aN2QRsWS_qym79_Gi2mtch6i@mail.gmail.com>
Subject: Re: ctime support on SFTP subsystem
From: Tor Arntsen <tor@spacetec.no>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 06 Oct 2010 11:50:39 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 06 Oct 2010 11:50:20 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Tue, Oct 5, 2010 at 19:12, Daniel Stenberg <daniel@haxx.se> wrote:
> On Tue, 5 Oct 2010, Ezequiel Ruiz wrote:
>
>> Yes I understand, but I don't want to change it, just want to "read" it
>> with the stat() based functions. Would it be possible to add support for
>> reading that value with stat() ?
>
> No, I don't think that field is sent by the server. See section "5. File
> Attributes" of the draft-ietf-secsh-filexfer-02.txt for full details.
>
> http://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/draft-ietf-secsh-filexfer-02.txt

Indeed, there is no ctime in there.. it's a bit strange that it's so,
I can definitely see the point of checking the ctime value of a remote
file: if it had been copied into the remote location with e.g. cp -p
you won't be able to figure out when the file was placed there without
it.  Is there some other mechanism in the protocol to do the
equivalent thing of checking ctime?

-Tor
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct  6 14:40:13 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o96Cdpl6001633;
	Wed, 6 Oct 2010 14:40:09 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o96CdnHP001622
	for <libssh2-devel@cool.haxx.se>; Wed, 6 Oct 2010 14:39:49 +0200
Date: Wed, 6 Oct 2010 14:39:49 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: ctime support on SFTP subsystem
In-Reply-To: <AANLkTimm7invDZBmW780aN2QRsWS_qym79_Gi2mtch6i@mail.gmail.com>
Message-ID: <alpine.DEB.2.00.1010061437520.25613@tvnag.unkk.fr>
References: <4CAB41F1.5090803@barcelona04.com>
	<20101005164743.GA13207@coneharvesters.com>
	<4CAB57E2.8050406@barcelona04.com>
	<alpine.DEB.2.00.1010051911520.25613@tvnag.unkk.fr>
	<AANLkTimm7invDZBmW780aN2QRsWS_qym79_Gi2mtch6i@mail.gmail.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 06 Oct 2010 14:40:12 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 06 Oct 2010 14:39:49 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Wed, 6 Oct 2010, Tor Arntsen wrote:

> Indeed, there is no ctime in there.. it's a bit strange that it's so, I can 
> definitely see the point of checking the ctime value of a remote file: if it 
> had been copied into the remote location with e.g. cp -p you won't be able 
> to figure out when the file was placed there without it.  Is there some 
> other mechanism in the protocol to do the equivalent thing of checking 
> ctime?

It was added in a later SFTP protocol version. If you check section 7 of the 
most recent internet-draft (SFTP v6) you find it there:

http://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/draft-ietf-secsh-filexfer-13.txt

Actually, even SFTP v4 has it added in section 5:

http://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/draft-ietf-secsh-filexfer-04.txt

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct  6 22:35:01 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o96KYFxk029901;
	Wed, 6 Oct 2010 22:34:55 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o96KYECw029896
	for <libssh2-devel@cool.haxx.se>; Wed, 6 Oct 2010 22:34:14 +0200
Date: Wed, 6 Oct 2010 22:34:14 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: BUG: libssh2_channel_read() does not handle files with size =
	0 correctly
In-Reply-To: <2E4E2ECE-8ABC-4BBB-8F15-F4949FDEB998@spring.local>
Message-ID: <alpine.DEB.2.00.1010062232500.19250@tvnag.unkk.fr>
References: <2E4E2ECE-8ABC-4BBB-8F15-F4949FDEB998@spring.local>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 06 Oct 2010 22:35:01 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 06 Oct 2010 22:34:14 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Sat, 11 Sep 2010, Uli Zappe wrote:

> there's a bug in libssh2_channel_read() that makes it return 
> LIBSSH2_ERROR_EAGAIN instead of 0 when a file of size 0 is to be copied 
> (using the code of the scp_nonblock.c example). As a result, scp times out 
> instead of immediately returning normally after copying a remote file with 
> size 0. (Lock files are a real world example of files with size 0.)

Is this testet with the current git?

I just tried, and I can't repeat this problem...! I scp a zero byte file from 
localhost, and scp_nonblock reports:

libssh2_scp_recv() is done, now receive data!
Got 0 bytes in 134 ms = 0.0 bytes/sec spin: 0

... just as I wanted!

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct  6 22:55:28 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o96KtJU0013894;
	Wed, 6 Oct 2010 22:55:26 +0200
Received: from mail.ritual.org (146.n01.hh.clusters.de [213.238.52.146])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o96KtGAi013875
	for <libssh2-devel@cool.haxx.se>; Wed, 6 Oct 2010 22:55:17 +0200
Received: from spring.local (spring.ritual.org [217.91.25.149])
	(authenticated bits=0)
	by mail.ritual.org (8.12.9/8.12.9) with ESMTP id o96KtBUF031999
	for <libssh2-devel@cool.haxx.se>; Wed, 6 Oct 2010 22:55:11 +0200
Received: from [IPv6:::1] (localhost [IPv6:::1])
	by spring.local (Postfix) with ESMTP id 60A0532D1285
	for <libssh2-devel@cool.haxx.se>; Wed,  6 Oct 2010 22:55:11 +0200 (CEST)
Mime-Version: 1.0 (Apple Message framework v1081)
Subject: Re: BUG: libssh2_channel_read() does not handle files with size = 0
	correctly
From: Uli Zappe <uli@ritual.org>
In-Reply-To: <alpine.DEB.2.00.1010062232500.19250@tvnag.unkk.fr>
Date: Wed, 6 Oct 2010 22:55:10 +0200
Message-Id: <86C7C1F8-FEB1-494D-87D1-BFAF12F51C8A@spring.local>
References: <2E4E2ECE-8ABC-4BBB-8F15-F4949FDEB998@spring.local>
	<alpine.DEB.2.00.1010062232500.19250@tvnag.unkk.fr>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-Mailer: Apple Mail (2.1081)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 06 Oct 2010 22:55:28 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 06 Oct 2010 22:55:17 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Am 06.10.2010 um 22:34 schrieb Daniel Stenberg:

>> there's a bug in libssh2_channel_read() that makes it return LIBSSH2_ERR=
OR_EAGAIN instead of 0 when a file of size 0 is to be copied (using the cod=
e of the scp_nonblock.c example). As a result, scp times out instead of imm=
ediately returning normally after copying a remote file with size 0. (Lock =
files are a real world example of files with size 0.)
> =

> Is this testet with the current git?

No, that was with the latest release version, libssh2-1.2.7.

> I just tried, and I can't repeat this problem...! I scp a zero byte file =
from localhost, and scp_nonblock reports:
> =

> libssh2_scp_recv() is done, now receive data!
> Got 0 bytes in 134 ms =3D 0.0 bytes/sec spin: 0

Hm, this looks indeed correct. I'm currently out of town, so unfortunately =
I can't test it right now, but I could try a few weeks from now.

            Bye
                    Uli
________________________________________________________

  Uli Zappe, Solmsstra=DFe 5, D-65189 Wiesbaden, Germany
  http://www.ritual.org
  Fon: +49-700-ULIZAPPE
  Fax: +49-700-ZAPPEFAX
________________________________________________________

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct  6 22:58:23 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o96KwLki015777;
	Wed, 6 Oct 2010 22:58:22 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o96KwKg3015754
	for <libssh2-devel@cool.haxx.se>; Wed, 6 Oct 2010 22:58:20 +0200
Date: Wed, 6 Oct 2010 22:58:20 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Buffersize bigger than 1024
In-Reply-To: <4C91E8FD.7040107@gmx.at>
Message-ID: <alpine.DEB.2.00.1010062252510.19250@tvnag.unkk.fr>
References: <4C91E8FD.7040107@gmx.at>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 06 Oct 2010 22:58:23 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 06 Oct 2010 22:58:20 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Thu, 16 Sep 2010, double wrote:

> To use a buffer-size bigger than 1024 byte still has some issues. The 
> attached testcase works perfectly, if the buffersize is 1024, otherwise it 
> won't.

So how is your test case different than the sftp_write_nonblock example? It 
uses a 100K buffer and I just tried it against my localhost:

libssh2_sftp_open() is done, now send data!
1024000000 bytes in 55 seconds makes 18618181.8 bytes/sec
all done

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct  6 23:13:47 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o96LDdpM028679;
	Wed, 6 Oct 2010 23:13:46 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o96LDcIx028662
	for <libssh2-devel@cool.haxx.se>; Wed, 6 Oct 2010 23:13:38 +0200
Date: Wed, 6 Oct 2010 23:13:38 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Packet drop on full socket problem
In-Reply-To: <2A05B543BABBE34893295B03A215B9E0011757A8@diamond.office.loytec.com>
Message-ID: <alpine.DEB.2.00.1010062305230.19250@tvnag.unkk.fr>
References: <2A05B543BABBE34893295B03A215B9E0011757A8@diamond.office.loytec.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 06 Oct 2010 23:13:47 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 06 Oct 2010 23:13:38 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Fri, 17 Sep 2010, Thomas Rauscher wrote:

(First, I'm sorry its taken me this long to respond...)

> I think I've found a problem that occurs when writing to the send socket 
> returns -1 (EGAIN). Additional preconditions to trigger the problem are 
> writing in larger chunks than the advertized window size, e.g. 128k writes 
> vs. 12k window size.

I don't quite understand your problem. I'll add my questions and thoughts 
inline below.

> The remote side is a dropbear SSH server which seems use 12k window size 
> increments. This means that packets need to be split very often. If 
> additionally the socket buffer gets full, the saved packet is never sent.
>
> A workaround is to use smaller writes (1k), but this only hides the problem.
>
> Details:
>
> 1) The application calls _libssh2_channel_write(..., 128*1024);

First, _libssh2_channel_write() will internally ignore everything that is 
larger than 32768 bytes. It will only try to send the first 32768 bytes in 
each function invoke.

The function will/should then make sure that it doesn't try to send any more 
data than the remote has a window for. In this case, it should further 
decrease the amount of data this function will attempt to send.

>  * In _libssh2_transport_write()
>
> _libssh2_send returns -1 (EAGAIN) and the current packet is saved to 
> p->odata, p->olen ...

You mean that it returns EAGAIN immediately or after having sent the first 12K 
of data? I assume you mean that it first sends some data and then when it 
loops it gets EAGAIN back.

>  * _libssh2_transport_write() returns LIBSSH2_ERROR_EAGAIN to 
> _libssh2_channel_write() which executes
>
>    if(wrote) {
>      _libssh2_transport_drain(session);
>      goto _channel_write_done;
>    }

... as it would only execute that if 'wrote' actually wasn't zero.

>    _libssh2_transport_drain() frees p->outbuf and sets it to NULL.
>
>  * _libssh2_transport_write then returns "wrote" (12k) to the application.

Right, as it did in fact successfully send away 12K.

> 2) Application calls _libssh2_channel_write(..., 128*1024) again.

Right, but that buffer should now be pointing 12K further into the data as 12K 
was in fact sent in the previous invoke.

>  _libssh2_transport_write() now calls send_existing() first which 
> immediately returns because p->outbuf is NULL.
>
>  if (!p->outbuf) {
>    *ret = 0;
>    return LIBSSH2_ERROR_NONE;
>  }

Right, there's nothing save there. What do you think it should have saved 
there?

> * This results in not sending the saved packet, but sending the next packet. 
> The SSH server then bails out and terminates the connection (saying "bad 
> packet size").

... as you can see I didn't follow how it ended up like this! I'll get myself 
a dropbear install and see if I can repeat this. Is uploading data with a 128K 
buffer enough to trigger it? Like with the sftp_write_nonblock.c example?

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Oct  7 11:31:01 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o979UJqh006010;
	Thu, 7 Oct 2010 11:30:57 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o979UHHT005997
	for <libssh2-devel@cool.haxx.se>; Thu, 7 Oct 2010 11:30:17 +0200
Date: Thu, 7 Oct 2010 11:30:17 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Packet drop on full socket problem
In-Reply-To: <alpine.DEB.2.00.1010062305230.19250@tvnag.unkk.fr>
Message-ID: <alpine.DEB.2.00.1010071125200.19250@tvnag.unkk.fr>
References: <2A05B543BABBE34893295B03A215B9E0011757A8@diamond.office.loytec.com>
	<alpine.DEB.2.00.1010062305230.19250@tvnag.unkk.fr>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Thu, 07 Oct 2010 11:31:01 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Thu, 07 Oct 2010 11:30:17 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Wed, 6 Oct 2010, Daniel Stenberg wrote:

> I'll get myself a dropbear install and see if I can repeat this. Is 
> uploading data with a 128K buffer enough to trigger it? Like with the 
> sftp_write_nonblock.c example?

I installed dropbear and I managed to repeat a problem when uploading to it, 
but it was due to dropbear's maximum SSH packet size limit at 32768 bytes. 
Once I fixed that I could upload fine using the scp_write_nonblock example, 
which uses 100K buffers. I tried dropbear with default window (24576) and with 
200000, both worked fine. (My change is pushed, together with a bunch of other 
cleanups in the error code department.)

To fix the problem, I had to once again do a rather lame fix in 
_libssh2_channel_write() to limit the amount of data it passes on to 
transport_write(). I'm slowly starting to build up motivation for myself to 
start working on a rather major internal overhaul regarding how we deal with 
buffers/packets when sending data. More about that later on.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Oct  7 11:34:44 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o979Yfok007342;
	Thu, 7 Oct 2010 11:34:43 +0200
Received: from fep20.mx.upcmail.net (fep20.mx.upcmail.net [62.179.121.40])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o979Ydas007313
	for <libssh2-devel@cool.haxx.se>; Thu, 7 Oct 2010 11:34:40 +0200
Received: from edge05.upcmail.net ([192.168.13.212]) by viefep20-int.chello.at
	(InterMail vM.8.01.02.02 201-2260-120-106-20100312) with ESMTP
	id <20101007093432.CEOC17643.viefep20-int.chello.at@edge05.upcmail.net>
	for <libssh2-devel@cool.haxx.se>; Thu, 7 Oct 2010 11:34:32 +0200
Received: from lexx.office.loytec.com ([212.17.98.150])
	by edge05.upcmail.net with edge
	id FlaX1f0113EgbyC05laY8X; Thu, 07 Oct 2010 11:34:32 +0200
X-SourceIP: 212.17.98.150
Received: from office.loytec.com (diamond.office.loytec.com [10.101.17.6])
	by lexx.office.loytec.com (8.14.3/8.14.3/Some OS 1.2.3-4.5) with ESMTP
	id o979YUBL004211
	for <libssh2-devel@cool.haxx.se>; Thu, 7 Oct 2010 11:34:31 +0200
X-MimeOLE: Produced By Microsoft Exchange V6.5
Content-class: urn:content-classes:message
MIME-Version: 1.0
Subject: RE: Packet drop on full socket problem
Date: Thu, 7 Oct 2010 11:34:30 +0200
Message-ID: <2A05B543BABBE34893295B03A215B9E00121BD52@diamond.office.loytec.com>
In-Reply-To: <alpine.DEB.2.00.1010062305230.19250@tvnag.unkk.fr>
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
Thread-Topic: Packet drop on full socket problem
Thread-Index: Actlm5/zIqE6tJC8SceV7aBNWQPNqQAYxlrg
References: <2A05B543BABBE34893295B03A215B9E0011757A8@diamond.office.loytec.com>
	<alpine.DEB.2.00.1010062305230.19250@tvnag.unkk.fr>
From: "Thomas Rauscher" <trauscher@loytec.com>
To: "libssh2 development" <libssh2-devel@cool.haxx.se>
X-Cloudmark-Analysis: v=1.1 cv=WPXthVDctC5K37chdIuWDfGL2h54X6uWtZ5SeJIYSNg=
	c=1 sm=0 a=4lZQqYuhhK4A:10 a=kj9zAlcOel0A:10
	a=_Y4vn6uUE81DiU-YyEIA:9 a=Ay-FtlZtauEJD8kBAS0A:7
	a=W3Ayi9nPW5eLK4dNegqObzRFlvEA:4 a=CjuIK1q_8ugA:10
	a=HpAAvcLHHh0Zw7uRqdWCyQ==:117
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Thu, 07 Oct 2010 11:34:44 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Thu, 07 Oct 2010 11:34:40 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se


I just had to recall some details. The core problem is not the SSH window, 
but the socket buffer. If the socket is non-blocking and send() returns 
with a short write, then the problem is triggered.

> 
> The function will/should then make sure that it doesn't try to send any more 
> data than the remote has a window for. In this case, it should further 
> decrease the amount of data this function will attempt to send.
> 
> >  * In _libssh2_transport_write()
> >
> > _libssh2_send returns -1 (EAGAIN) and the current packet is 
> saved to 
> > p->odata, p->olen ...
> 
> You mean that it returns EAGAIN immediately or after having sent the first 12K 
> of data? I assume you mean that it first sends some data and then when it 
> loops it gets EAGAIN back.
> 

The problem here seem to be not the window size, but the socket buffer. The socket
send() returned less than 12k, so the code decided to save the entire packet into
the p->odata buffer.

> >  * _libssh2_transport_write() returns LIBSSH2_ERROR_EAGAIN to 
> > _libssh2_channel_write() which executes
> >
> >    if(wrote) {
> >      _libssh2_transport_drain(session);
> >      goto _channel_write_done;
> >    }
> 
> ... as it would only execute that if 'wrote' actually wasn't zero.

Yes, but wrote is not zero, as this happens in a later iteration of the
while(buflen>0) loop.

> 
> >    _libssh2_transport_drain() frees p->outbuf and sets it to NULL.
> >
> >  * _libssh2_transport_write then returns "wrote" (12k) to 
> the application.
> 
> Right, as it did in fact successfully send away 12K.

I think that this is the core problem. The code has sent away 12k, but failed
to send the rest. It saves the 12k-Buffer to odata and the upper level function
_libssh2_channel_write throws it away again. 
This means that this buffer is missing in the SSH stream.

> 
> > 2) Application calls _libssh2_channel_write(..., 128*1024) again.
> 
> Right, but that buffer should now be pointing 12K further into the data as 12K 
> was in fact sent in the previous invoke.
> 
> >  _libssh2_transport_write() now calls send_existing() first which 
> > immediately returns because p->outbuf is NULL.
> >
> >  if (!p->outbuf) {
> >    *ret = 0;
> >    return LIBSSH2_ERROR_NONE;
> >  }
> 
> Right, there's nothing save there. What do you think it 
> should have saved there?

The buffer which did not fit into the socket buffer. The former call to 
_libssh2_transport_write has stored the "not-sent" packet there.

> ... as you can see I didn't follow how it ended up like this! 
> I'll get myself a dropbear install and see if I can repeat this. Is uploading 
> data with a 128K buffer enough to trigger it? Like with the 
> sftp_write_nonblock.c example?

I'm not sure if it is that easy. It only occurred on XP PCs here, 
but not on Windows 7. Also, the target file was a unix pipe on an embedded device
which could delay the SSH stream for some time. This is probably the cause why the
Windows socket buffer filled up. 

Thomas.
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Oct  7 11:42:45 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o979gdfU013877;
	Thu, 7 Oct 2010 11:42:44 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o979gbJs013843
	for <libssh2-devel@cool.haxx.se>; Thu, 7 Oct 2010 11:42:37 +0200
Date: Thu, 7 Oct 2010 11:42:37 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: RE: Packet drop on full socket problem
In-Reply-To: <2A05B543BABBE34893295B03A215B9E00121BD52@diamond.office.loytec.com>
Message-ID: <alpine.DEB.2.00.1010071136410.19250@tvnag.unkk.fr>
References: <2A05B543BABBE34893295B03A215B9E0011757A8@diamond.office.loytec.com>
	<alpine.DEB.2.00.1010062305230.19250@tvnag.unkk.fr>
	<2A05B543BABBE34893295B03A215B9E00121BD52@diamond.office.loytec.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Thu, 07 Oct 2010 11:42:45 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Thu, 07 Oct 2010 11:42:37 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Thu, 7 Oct 2010, Thomas Rauscher wrote:

>>>  * _libssh2_transport_write then returns "wrote" (12k) to
>> the application.
>>
>> Right, as it did in fact successfully send away 12K.
>
> I think that this is the core problem. The code has sent away 12k, but 
> failed to send the rest. It saves the 12k-Buffer to odata and the upper 
> level function _libssh2_channel_write throws it away again. This means that 
> this buffer is missing in the SSH stream.

When libssh2_channel_write_ex() returns 12K and thus informs the application 
that 12K data was indeed sent, the appliction will advance its pointer and the 
next call will be 12K further into the data.

Thus, the application will deliver the rest of the data (again) and libssh2 
won't need to have it buffered anywhere. That buffer is only needed and used 
as long as it truly and only gets EAGAIN back from the socket.

A short send() is very common for anything except very small files when sent 
over a slower network, so I don't think it is "just" that's required to 
trigger this.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Oct  7 11:44:25 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o979iNlJ016562;
	Thu, 7 Oct 2010 11:44:25 +0200
Received: from mail-iw0-f182.google.com (mail-iw0-f182.google.com
	[209.85.214.182])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o979iLae016545
	for <libssh2-devel@cool.haxx.se>; Thu, 7 Oct 2010 11:44:22 +0200
Received: by iwn8 with SMTP id 8so163966iwn.41
	for <libssh2-devel@cool.haxx.se>; Thu, 07 Oct 2010 02:44:19 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:mime-version:received:received:date:message-id
	:subject:from:to:content-type;
	bh=pJuY2WKTAxegDNuhrrLqsUQuALTKs7LeYp2Xf/agEVg=;
	b=HVo417p0cU0J7Ogo4grf/OBqY5kCUXuFM14zF9YOny2hLi3YlRleWZu1lTVzPHg8uD
	VlX47PWQM8Q98Q1Saw4hrE+lMk20QfLSo5Rv4Dy0m0iw4R/EGmrcQLtJDkr2l8oCN2sC
	eBOr2X86s8rM/viREz2vWSZn877jPnSM5kmWA=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=mime-version:date:message-id:subject:from:to:content-type;
	b=cbLPMRvQH4O+k6ACfabGK51SbUR0JLwFIqVqZ6z1r8OdlCdftS4lA5L+vPOh/XXcy8
	DSUGYS6Xtg1Fq8b31kNuQJleOKjNASoovhvFM+FuaxIxKGFQcdU3yt1ULFxUN7/TyzjV
	l+CGkSiLiz1KKJaOqnvehXB9JFcQDhHhs99b8=
MIME-Version: 1.0
Received: by 10.231.30.68 with SMTP id t4mr561422ibc.129.1286444657815; Thu,
	07 Oct 2010 02:44:17 -0700 (PDT)
Received: by 10.231.67.142 with HTTP; Thu, 7 Oct 2010 02:44:17 -0700 (PDT)
Date: Thu, 7 Oct 2010 17:44:17 +0800
Message-ID: <AANLkTimzJDbdLKQeKwm5Ceig74fMYsakXu=A+bZhRde_@mail.gmail.com>
Subject: libssh2 general question
From: Alan Ong <sarcasigan@gmail.com>
To: libssh2-devel@cool.haxx.se
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Thu, 07 Oct 2010 11:44:25 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Thu, 07 Oct 2010 11:44:22 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Hello,

I am currently using libssh2 to create a SFTP client that uses ssh2
protocol, SHA-1, and aest128-ctr. Based on my research, libssh2
chooses the "best" mutually supported algorithm
(http://comments.gmane.org/gmane.network.ssh.libssh2.devel/4028) for
cipher, so does that mean that if the SFTP server uses aes128-ctr
cipher, then libssh2 automatically chooses aes-128-ctr as default
cipher?

Another question, how do i set libssh2 to use hmac-sha1? I have browse
the API document, and I have not found a function that could set the
mac hashing to hmac-sha1.

Thank you for your time.
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Oct  7 12:33:10 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o97AWshG010782;
	Thu, 7 Oct 2010 12:33:08 +0200
Received: from fep15.mx.upcmail.net (fep15.mx.upcmail.net [62.179.121.35])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o97AWrYQ010756
	for <libssh2-devel@cool.haxx.se>; Thu, 7 Oct 2010 12:32:53 +0200
Received: from edge03.upcmail.net ([192.168.13.238]) by viefep15-int.chello.at
	(InterMail vM.8.01.02.02 201-2260-120-106-20100312) with ESMTP
	id <20101007103244.EWMR1472.viefep15-int.chello.at@edge03.upcmail.net>
	for <libssh2-devel@cool.haxx.se>; Thu, 7 Oct 2010 12:32:44 +0200
Received: from lexx.office.loytec.com ([212.17.98.150])
	by edge03.upcmail.net with edge
	id FmYi1f04D3EgbyC03mYjfX; Thu, 07 Oct 2010 12:32:44 +0200
X-SourceIP: 212.17.98.150
Received: from office.loytec.com (diamond.office.loytec.com [10.101.17.6])
	by lexx.office.loytec.com (8.14.3/8.14.3/Some OS 1.2.3-4.5) with ESMTP
	id o97AWfth025837
	for <libssh2-devel@cool.haxx.se>; Thu, 7 Oct 2010 12:32:42 +0200
X-MimeOLE: Produced By Microsoft Exchange V6.5
Content-class: urn:content-classes:message
MIME-Version: 1.0
Subject: RE: Packet drop on full socket problem
Date: Thu, 7 Oct 2010 12:32:41 +0200
Message-ID: <2A05B543BABBE34893295B03A215B9E00121BD58@diamond.office.loytec.com>
In-Reply-To: <alpine.DEB.2.00.1010071136410.19250@tvnag.unkk.fr>
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
Thread-Topic: Packet drop on full socket problem
Thread-Index: ActmBDwC7yJ31zCPQr+ekUs5pO+24QABBN6Q
References: <2A05B543BABBE34893295B03A215B9E0011757A8@diamond.office.loytec.com><alpine.DEB.2.00.1010062305230.19250@tvnag.unkk.fr><2A05B543BABBE34893295B03A215B9E00121BD52@diamond.office.loytec.com>
	<alpine.DEB.2.00.1010071136410.19250@tvnag.unkk.fr>
From: "Thomas Rauscher" <trauscher@loytec.com>
To: "libssh2 development" <libssh2-devel@cool.haxx.se>
X-Cloudmark-Analysis: v=1.1 cv=O+FWVpunvrlG1gSnSO6WiIQ7o0MJ4laHqrEcUJ8XjIg=
	c=1 sm=0 a=4lZQqYuhhK4A:10 a=kj9zAlcOel0A:10
	a=49DJTPoo9DhzkEIx1bsA:9 a=MafbzVAMbyIhQyixLRyFrJj994oA:4
	a=CjuIK1q_8ugA:10 a=HpAAvcLHHh0Zw7uRqdWCyQ==:117
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Thu, 07 Oct 2010 12:33:10 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Thu, 07 Oct 2010 12:32:53 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se



> When libssh2_channel_write_ex() returns 12K and thus inform the application 
> that 12K data was indeed sent, the appliction will advance its pointer and the 
> next call will be 12K further into the data.
> 
> Thus, the application will deliver the rest of the data (again) and libssh2 
> won't need to have it buffered anywhere. That buffer is only needed and used 
> as long as it truly and only gets EAGAIN back from the socket.
> 
> A short send() is very common for anything except very small files when sent 
> over a slower network, so I don't think it is "just" that's required to 
> trigger this.

You are right, the return value can't be the problem. 

I'm not very familiar with SSH internals, so I may be wrong
with the following idea. 

What happens when the same packet is encrypted twice? 
Are the packets binary identical or has the internal 
state of the crypt function changed? Could this confuse the
receiver then?

Thomas.
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Oct  7 12:59:30 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o97AxNdL025627;
	Thu, 7 Oct 2010 12:59:30 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o97AxMgh025608
	for <libssh2-devel@cool.haxx.se>; Thu, 7 Oct 2010 12:59:22 +0200
Date: Thu, 7 Oct 2010 12:59:22 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: RE: Packet drop on full socket problem
In-Reply-To: <2A05B543BABBE34893295B03A215B9E00121BD58@diamond.office.loytec.com>
Message-ID: <alpine.DEB.2.00.1010071234310.10538@tvnag.unkk.fr>
References: <2A05B543BABBE34893295B03A215B9E0011757A8@diamond.office.loytec.com><alpine.DEB.2.00.1010062305230.19250@tvnag.unkk.fr><2A05B543BABBE34893295B03A215B9E00121BD52@diamond.office.loytec.com>
	<alpine.DEB.2.00.1010071136410.19250@tvnag.unkk.fr>
	<2A05B543BABBE34893295B03A215B9E00121BD58@diamond.office.loytec.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Thu, 07 Oct 2010 12:59:30 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Thu, 07 Oct 2010 12:59:22 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Thu, 7 Oct 2010, Thomas Rauscher wrote:

> You are right, the return value can't be the problem.
>
> I'm not very familiar with SSH internals, so I may be wrong with the 
> following idea.
>
> What happens when the same packet is encrypted twice? Are the packets binary 
> identical or has the internal state of the crypt function changed? Could 
> this confuse the receiver then?

Your mails got me thinking about what happens on a short send()s and what 
effect libssh2's way of dumping the "resend" buffer like that has.

It has made me completely switch in this matter and now I think you are 
absolutely right. What I think may happen is this:

within _libssh2_channel_write()

   _libssh2_transport_write() gets called once to send X bytes. It only manages
   to send off Y bytes (which is less than X). The remaining data that wasn't
   sent is the remainder of the single SSH packet. Only a half SSH packet was
   sent. It is incomplete. The rest is saved in "outbuf" buffer.

   _libssh2_transport_write() gets called again to send the remaining (X-Y)
   bytes and gets EAGAIN back. The second part of the packet didn't get sent.
   The call to _libssh2_transport_drain() is then completely wrong. It will
   discard the second part of the packet.

How to fix?

   The _libssh2_transport_write() function returns data that it sent, even if
   the amount is not a full SSH packet. We can't allow it to do that. We need
   to keep the application thinking EAGAIN until the full packet has been sent,
   as only when the full packet has been sent we can say that the data has
   actually been sent and we are prepared to get more data to send.

   I'll think a bit more and provide something I think is an improvement. Hang
   on.

And to answer your question: each packet has an sequence number that gets 
increased in each packet, so if there's a bad packet in between that the 
receiver will through away as garbage, the receiver will be out of sync with 
the sequence number..

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Oct  7 13:35:25 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o97BZ3UU015897;
	Thu, 7 Oct 2010 13:35:19 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o97BZ1w7015708
	for <libssh2-devel@cool.haxx.se>; Thu, 7 Oct 2010 13:35:01 +0200
Date: Thu, 7 Oct 2010 13:35:01 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: RE: Packet drop on full socket problem
In-Reply-To: <alpine.DEB.2.00.1010071234310.10538@tvnag.unkk.fr>
Message-ID: <alpine.DEB.2.00.1010071330550.10538@tvnag.unkk.fr>
References: <2A05B543BABBE34893295B03A215B9E0011757A8@diamond.office.loytec.com><alpine.DEB.2.00.1010062305230.19250@tvnag.unkk.fr><2A05B543BABBE34893295B03A215B9E00121BD52@diamond.office.loytec.com>
	<alpine.DEB.2.00.1010071136410.19250@tvnag.unkk.fr>
	<2A05B543BABBE34893295B03A215B9E00121BD58@diamond.office.loytec.com>
	<alpine.DEB.2.00.1010071234310.10538@tvnag.unkk.fr>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Thu, 07 Oct 2010 13:35:25 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Thu, 07 Oct 2010 13:35:02 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Thu, 7 Oct 2010, Daniel Stenberg wrote:

>  The _libssh2_transport_write() function returns data that it sent, even if
>  the amount is not a full SSH packet. We can't allow it to do that. We need
>  to keep the application thinking EAGAIN until the full packet has been
>  sent, as only when the full packet has been sent we can say that the data
>  has actually been sent and we are prepared to get more data to send.

It was slightly incorrect there, but the main point was right.

  _libssh2_transport_write() always just returns success or EAGAIN, the mistake 
was done in channel_write(). It would continue to try sending more data after 
a successful call to _libssh2_transport_write(), which would risk that it 
would first send data and then get EAGAIN back, and our API can't return back 
such info.

Now, _libssh2_channel_write() will return success immediately when a SSH 
packet has been sent off successfully. This short remove all problems with 
short sends and in fact I remove the transport_drain() function again since 
adding/using that was a mistake.

Please, get the latest git version and have a try and see if things work 
better now. If not, I think getting a trace output for the problem will be 
very useful!

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Oct  7 14:15:29 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o97CFLvg012750;
	Thu, 7 Oct 2010 14:15:28 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o97CFK5P012743
	for <libssh2-devel@cool.haxx.se>; Thu, 7 Oct 2010 14:15:20 +0200
Date: Thu, 7 Oct 2010 14:15:20 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: libssh2 general question
In-Reply-To: <AANLkTimzJDbdLKQeKwm5Ceig74fMYsakXu=A+bZhRde_@mail.gmail.com>
Message-ID: <alpine.DEB.2.00.1010071412590.10538@tvnag.unkk.fr>
References: <AANLkTimzJDbdLKQeKwm5Ceig74fMYsakXu=A+bZhRde_@mail.gmail.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Thu, 07 Oct 2010 14:15:29 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Thu, 07 Oct 2010 14:15:20 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Thu, 7 Oct 2010, Alan Ong wrote:

> I am currently using libssh2 to create a SFTP client that uses ssh2 
> protocol, SHA-1, and aest128-ctr. Based on my research, libssh2 chooses the 
> "best" mutually supported algorithm 
> (http://comments.gmane.org/gmane.network.ssh.libssh2.devel/4028) for cipher, 
> so does that mean that if the SFTP server uses aes128-ctr cipher, then 
> libssh2 automatically chooses aes-128-ctr as default cipher?

Yeps!

> Another question, how do i set libssh2 to use hmac-sha1? I have browse the 
> API document, and I have not found a function that could set the mac hashing 
> to hmac-sha1.

It selects hmac the same way. It is a negotiation where libssh2 will prefer 
the one it considers best.

If you switch on tracing during the session handshake you'll get to see (and 
learn) all those details!

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Oct  8 16:35:14 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o98EYlYT011171;
	Fri, 8 Oct 2010 16:35:09 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o98EYjdW011150
	for <libssh2-devel@cool.haxx.se>; Fri, 8 Oct 2010 16:34:45 +0200
Date: Fri, 8 Oct 2010 16:34:45 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Improving data send buffers and more
Message-ID: <alpine.DEB.2.00.1010081628040.10538@tvnag.unkk.fr>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 08 Oct 2010 16:35:14 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 08 Oct 2010 16:34:46 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Hi!

The way data is allocated and copied multiple times when data is sent is bad. 
Here's my first summary of changes I want to see happen to make things better 
(faster) and less resource wasteful.

Consider this a first rough draft and I certainly will change a few things as 
I go along, and if there's anything in here that isn't clear by all means go 
ahead and ask. I plan to slowly move through this list of stuff and do changes 
in as small pieces as possible one by one, but of course some of them will 
require a larger "switch" to the new concept.

Of course, if you have comments, suggestions or want to help out, just speak 
up.

compression

   - needs to ne able to take the input to compress from two pointers (with two
   sizes) and generate a single compressed output chunk

   - should also not allocate the compressed output buffer but use a single one
   within the session struct (as transport_write() will copy the data off from
   that buffer immediately anyway), or even better the transport_write()
   function could allocate a buffer to fix an uncompressed buffer as then the
   compression function can write its output directly into the allocated send
   buffer

   - should probably be split off into a separate compression and decompression
   function instead of a single unified as they are now, to make these changes
   easier

transport_write

   - should accept a "packet struct" input with separate pointers to headers
   and to payload (each of which may be allocated or not)

   - Separating the headers from the payload will greatly enhance our ability
   to use a fixed buffer within the session handle for the header part and
   provide the payload part as a mere pointer.

   - This function is used >30 times in the code.

   - If this function gets called with a total packet size that is larger than
   32K, it should create more than one SSH packet so that it keeps the largest
   one below 32K

channel_write

   - should not copy/allocate anything for the data, only create a header chunk
   and pass on the payload data to transport_write "pointed to"

sftp_write

   - should not copy/allocate anything for the data, only create a header chunk
   and pass on the payload data to channel_write "pointed to"



-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Oct  8 17:06:58 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o98F6k9H007539;
	Fri, 8 Oct 2010 17:06:56 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o98F6i7x007522
	for <libssh2-devel@cool.haxx.se>; Fri, 8 Oct 2010 17:06:44 +0200
Date: Fri, 8 Oct 2010 17:06:44 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Disabling compression by API?
Message-ID: <alpine.DEB.2.00.1010081703030.10538@tvnag.unkk.fr>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 08 Oct 2010 17:06:58 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 08 Oct 2010 17:06:44 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Hi friends.

It came to my attention that we don't enable compression properly. I forced my 
local sshd to do compression but my test app still didn't do compression until 
I changed the order of the algorithms in src/comp.c. (commit and push coming 
up in a second)

Of course this makes me think many users of libssh2 might not use compression 
as well even though they may benefit from it. It also made me think about 
having a way in the API to make it preferred or not. After all, compression 
does take a little time and CPU and for the cases where no compression is to 
expect an application might want to not do compression.

Any thoughts on this?

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Oct  8 17:30:49 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o98FUdxY024006;
	Fri, 8 Oct 2010 17:30:48 +0200
Received: from hrndva-omtalb.mail.rr.com (hrndva-omtalb.mail.rr.com
	[71.74.56.125])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o98FUb4j023970
	for <libssh2-devel@cool.haxx.se>; Fri, 8 Oct 2010 17:30:38 +0200
X-Authority-Analysis: v=1.1 cv=vbQZhf6WRU4XF+4tPWNJEMYU0N1CowIjcRZ/qR/IBDs=
	c=1 sm=0 a=oBKqQ0DKYjUA:10 a=FNAO34qeONcA:10 a=kj9zAlcOel0A:10
	a=9At4Jy2cJ7Ox3H4DxHCJAg==:17 a=fmoIv0Kobw8L06JHHvIA:9
	a=KE7__AVdalsKOXigiEyZWgv_iGQA:4 a=CjuIK1q_8ugA:10
	a=9At4Jy2cJ7Ox3H4DxHCJAg==:117
X-Cloudmark-Score: 0
X-Originating-IP: 70.116.71.237
Received: from [70.116.71.237] ([70.116.71.237:55185] helo=dc7100.roadrunn.com)
	by hrndva-oedge02.mail.rr.com (envelope-from <ngierman@roadrunn.com>)
	(ecelerity 2.2.3.46 r()) with ESMTP
	id 73/86-23284-4193FAC4; Fri, 08 Oct 2010 15:30:29 +0000
Received: by dc7100.roadrunn.com (Postfix, from userid 501)
	id 9D247830988; Fri,  8 Oct 2010 10:27:25 -0500 (CDT)
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on dc7100.roadrunn.com
X-Spam-Level: 
X-Spam-Status: No, score=-4.3 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00
	autolearn=ham version=3.2.5
Received: from ngierman3 (dc7100 [192.168.1.6])
	by dc7100.roadrunn.com (Postfix) with ESMTP id C71EC830988
	for <libssh2-devel@cool.haxx.se>; Fri,  8 Oct 2010 10:27:22 -0500 (CDT)
From: "Neil Gierman" <ngierman@roadrunn.com>
To: "'libssh2 development'" <libssh2-devel@cool.haxx.se>
References: <alpine.DEB.2.00.1010081703030.10538@tvnag.unkk.fr>
In-Reply-To: <alpine.DEB.2.00.1010081703030.10538@tvnag.unkk.fr>
Subject: RE: Disabling compression by API?
Date: Fri, 8 Oct 2010 10:31:06 -0500
Message-ID: <000001cb66fd$d3275380$7975fa80$@com>
MIME-Version: 1.0
X-Mailer: Microsoft Office Outlook 12.0
Thread-Index: Actm+uIEX4yUNVmyQ/mm6KXeP245HAAAouhQ
Content-Language: en-us
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 08 Oct 2010 17:30:49 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 08 Oct 2010 17:30:38 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

> Hi friends.
> 
> It came to my attention that we don't enable compression properly. I
> forced my
> local sshd to do compression but my test app still didn't do
> compression until
> I changed the order of the algorithms in src/comp.c. (commit and push
> coming
> up in a second)
> 
> Of course this makes me think many users of libssh2 might not use
> compression
> as well even though they may benefit from it. It also made me think
> about
> having a way in the API to make it preferred or not. After all,
> compression
> does take a little time and CPU and for the cases where no compression
> is to
> expect an application might want to not do compression.
> 
> Any thoughts on this?
> 
> --
> 
>   / daniel.haxx.se

For my specific use case, I am transferring binary files (already bzipped)
using SFTP to an embedded system.
Not only would I not benefit from compressing my files again, but I am not
sure that the embedded CPU could handle it.
I would prefer compression as optional and maybe even disabled by default
and an API call to specifically enable it.

Neil

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Oct  8 19:53:21 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o98Hr3kM029476;
	Fri, 8 Oct 2010 19:53:17 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o98Hr1xZ029433
	for <libssh2-devel@cool.haxx.se>; Fri, 8 Oct 2010 19:53:01 +0200
Date: Fri, 8 Oct 2010 19:53:01 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: RE: Disabling compression by API?
In-Reply-To: <000001cb66fd$d3275380$7975fa80$@com>
Message-ID: <alpine.DEB.2.00.1010081950120.10538@tvnag.unkk.fr>
References: <alpine.DEB.2.00.1010081703030.10538@tvnag.unkk.fr>
	<000001cb66fd$d3275380$7975fa80$@com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 08 Oct 2010 19:53:20 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 08 Oct 2010 19:53:01 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Fri, 8 Oct 2010, Neil Gierman wrote:

> For my specific use case, I am transferring binary files (already bzipped) 
> using SFTP to an embedded system. Not only would I not benefit from 
> compressing my files again, but I am not sure that the embedded CPU could 
> handle it.

In such a specific case you can (should?) of course build libssh2 completely 
without zlib...

> I would prefer compression as optional and maybe even disabled by default 
> and an API call to specifically enable it.

I was considering using the libssh2_session_flag() function to add that 
ability. The function already exists but currently has no documented flags it 
can set...

As for what default to use, I would love to hear some more opinions!

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Oct  8 20:09:55 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o98I9lWD010118;
	Fri, 8 Oct 2010 20:09:54 +0200
Received: from mail-ew0-f54.google.com (mail-ew0-f54.google.com
	[209.85.215.54])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o98I9jcV010105
	for <libssh2-devel@cool.haxx.se>; Fri, 8 Oct 2010 20:09:45 +0200
Received: by ewy27 with SMTP id 27so912526ewy.41
	for <libssh2-devel@cool.haxx.se>; Fri, 08 Oct 2010 11:09:42 -0700 (PDT)
Received: by 10.213.27.76 with SMTP id h12mr187559ebc.60.1286561381890;
	Fri, 08 Oct 2010 11:09:41 -0700 (PDT)
Received: from [192.168.0.35] (96-160.ftth.onsbrabantnet.nl [88.159.160.96])
	by mx.google.com with ESMTPS id v59sm5815497eeh.16.2010.10.08.11.09.40
	(version=SSLv3 cipher=RC4-MD5); Fri, 08 Oct 2010 11:09:41 -0700 (PDT)
Message-ID: <4CAF5E61.8080107@peut.org>
Date: Fri, 08 Oct 2010 20:09:37 +0200
From: Jose Baars <peut@peut.org>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; nl;
	rv:1.9.2.9) Gecko/20100915 Thunderbird/3.1.4
MIME-Version: 1.0
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Disabling compression by API?
References: <alpine.DEB.2.00.1010081703030.10538@tvnag.unkk.fr>	<000001cb66fd$d3275380$7975fa80$@com>
	<alpine.DEB.2.00.1010081950120.10538@tvnag.unkk.fr>
In-Reply-To: <alpine.DEB.2.00.1010081950120.10538@tvnag.unkk.fr>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 08 Oct 2010 20:09:55 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 08 Oct 2010 20:09:45 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============0542384105=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

This is a cryptographically signed message in MIME format.

--===============0542384105==
Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary="------------ms040502060608040400050801"

This is a cryptographically signed message in MIME format.

--------------ms040502060608040400050801
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: quoted-printable

  Op 10/8/2010 7:53 PM, Daniel Stenberg schreef:
> As for what default to use, I would love to hear some more opinions!

My vote is for default on. As compression usually will shrink the data=20
to about
half, the CPU spent on compression will partly be earned back by having t=
o
encrypt only half of the data. In normal situations you would always want=

to use compression to lessen the burden on the network, and to avoid havi=
ng
to compress files or data separately.

Just my view.

Regards,
Jose





--------------ms040502060608040400050801
Content-Type: application/pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
Content-Description: S/MIME Cryptographic Signature

MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIPWjCC
BMwwggQ1oAMCAQICEByunWua9OYvIoqj2nRhbB4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UE
BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1Ymxp
YyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA1MTAyODAwMDAwMFoXDTE1
MTAyNzIzNTk1OVowgd0xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEf
MB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazE7MDkGA1UECxMyVGVybXMgb2YgdXNl
IGF0IGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEgKGMpMDUxHjAcBgNVBAsTFVBlcnNv
bmEgTm90IFZhbGlkYXRlZDE3MDUGA1UEAxMuVmVyaVNpZ24gQ2xhc3MgMSBJbmRpdmlkdWFs
IFN1YnNjcmliZXIgQ0EgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMnf
rOfq+PgDFMQAktXBfjbCPO98chXLwKuMPRyVzm8eECw/AO2XJua2x+atQx0/pIdHR0w+VPhs
+Mf8sZ69MHC8l7EDBeqV8a1AxUR6SwWi8mD81zplYu//EHuiVrvFTnAt1qIfPO2wQuhejVch
rKaZ2RHp0hoHwHRHQgv8xTTq/ea6JNEdCBU3otdzzwFBL2OyOj++pRpu9MlKWz2VphW7NQIZ
+dTvvI8OcXZZu0u2Ptb8Whb01g6J8kn+bAztFenZiHWcec5gJ925rXXOL3OVekA6hXVJsLjf
aLyrzROChRFQo+A8C67AClPN1zBvhTJGG+RJEMJs4q8fef/btLUCAwEAAaOCAYQwggGAMBIG
A1UdEwEB/wQIMAYBAf8CAQAwRAYDVR0gBD0wOzA5BgtghkgBhvhFAQcXATAqMCgGCCsGAQUF
BwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMAsGA1UdDwQEAwIBBjARBglghkgB
hvhCAQEEBAMCAQYwLgYDVR0RBCcwJaQjMCExHzAdBgNVBAMTFlByaXZhdGVMYWJlbDMtMjA0
OC0xNTUwHQYDVR0OBBYEFBF9Xhl9PATfamzWoooaPzHYO5RSMDEGA1UdHwQqMCgwJqAkoCKG
IGh0dHA6Ly9jcmwudmVyaXNpZ24uY29tL3BjYTEuY3JsMIGBBgNVHSMEejB4oWOkYTBfMQsw
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1BgNVBAsTLkNsYXNzIDEg
UHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHmCEQDNun9W8N/kvFT+Iqyz
cqpVMA0GCSqGSIb3DQEBBQUAA4GBALEv2ZbhkqLugWDlyCog++FnLNYAmFOjAhvpkEv4GESf
D0b3+qD+0x0Yo9K/HOzWGZ9KTUP4yru+E4BJBd0hczNXwkJavvoAk7LmBDGRTl088HMFN2Pr
v4NZmP1m3umGMpqSKTw6rlTaphJRsY/IytNHeObbpR6HBuPRFMDCIfa6MIIFQTCCBCmgAwIB
AgIQQkuBnab/mKbwbYynoi4GkzANBgkqhkiG9w0BAQUFADCB3TELMAkGA1UEBhMCVVMxFzAV
BgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3Jr
MTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3Jw
YSAoYykwNTEeMBwGA1UECxMVUGVyc29uYSBOb3QgVmFsaWRhdGVkMTcwNQYDVQQDEy5WZXJp
U2lnbiBDbGFzcyAxIEluZGl2aWR1YWwgU3Vic2NyaWJlciBDQSAtIEcyMB4XDTA5MTExMjAw
MDAwMFoXDTEwMTExMjIzNTk1OVowggEKMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0G
A1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazFGMEQGA1UECxM9d3d3LnZlcmlzaWduLmNv
bS9yZXBvc2l0b3J5L1JQQSBJbmNvcnAuIGJ5IFJlZi4sTElBQi5MVEQoYyk5ODEeMBwGA1UE
CxMVUGVyc29uYSBOb3QgVmFsaWRhdGVkMTMwMQYDVQQLEypEaWdpdGFsIElEIENsYXNzIDEg
LSBOZXRzY2FwZSBGdWxsIFNlcnZpY2UxEzARBgNVBAMUCkpvc2UgQmFhcnMxHDAaBgkqhkiG
9w0BCQEWDXBldXRAcGV1dC5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCi
x8yI3kFLmfYElzZSqsup782ajeuv3TASyn8mUfGrnr2aW1M7jN4vlM8/7/sVL883rH+kWPzV
Q4ITYrfW5QFxH+CBqtX0F1xsS1A7AR8xZIs8o7/sMxV2xOSXYEJXlKP4XVWY8oU+TKH5dWYZ
9BJ9pkJ840ayiqqI/P3MHqmu7vS2nPDu8YZFa+46EtWkGbJTjzFdnrU5Jmdudp37fd1btNss
RIkqztDOeQOTaZ6pS9RqjhmNuWVtgZucKho6c9Qf2htGz8AL95MqttF2OZYL9AlXZhjJcIMO
aZBVjuwLowX/kYL2lo1vyUGt3eZxSkZR/ICfkQwj1BKpFZGFtM5XAgMBAAGjgcwwgckwCQYD
VR0TBAIwADBEBgNVHSAEPTA7MDkGC2CGSAGG+EUBBxcBMCowKAYIKwYBBQUHAgEWHGh0dHBz
Oi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwCwYDVR0PBAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
BwMEBggrBgEFBQcDAjBKBgNVHR8EQzBBMD+gPaA7hjlodHRwOi8vSW5kQzFEaWdpdGFsSUQt
Y3JsLnZlcmlzaWduLmNvbS9JbmRDMURpZ2l0YWxJRC5jcmwwDQYJKoZIhvcNAQEFBQADggEB
ABcuOD4QwMrXJgD8zvCWBRjBqsQLXn0ybqrLZHlcic7+lstAl06fi7fGD3+1Nrcp4VImkyUv
JQEvFSvkB+/Mt8kOVSdt+eiYIInKt/lBkSzy0sardsh0u7Ifcgt+nmLZYW+azviXnD4VNMqe
Q9QIZPHSUhWDe3IA5NSYE4hfqwXX5c13HllqpUcXRmWIGA9MPr9SQxZ0jg7MFUsZVgG9f5Ts
A3yIEmvUgutyX6GRzZQL+wlWymRzh/XA7j2QnYk+IPlNQHJ62MHHlAI48y3ssSXwR8hfbH4e
0sw+8ezuh785OuFMBI3qhxlQX4wT8+v8rKHtiLcddoIohWM0ID+IdOEwggVBMIIEKaADAgEC
AhBCS4Gdpv+YpvBtjKeiLgaTMA0GCSqGSIb3DQEBBQUAMIHdMQswCQYDVQQGEwJVUzEXMBUG
A1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsx
OzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBh
IChjKTA1MR4wHAYDVQQLExVQZXJzb25hIE5vdCBWYWxpZGF0ZWQxNzA1BgNVBAMTLlZlcmlT
aWduIENsYXNzIDEgSW5kaXZpZHVhbCBTdWJzY3JpYmVyIENBIC0gRzIwHhcNMDkxMTEyMDAw
MDAwWhcNMTAxMTEyMjM1OTU5WjCCAQoxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYD
VQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMUYwRAYDVQQLEz13d3cudmVyaXNpZ24uY29t
L3JlcG9zaXRvcnkvUlBBIEluY29ycC4gYnkgUmVmLixMSUFCLkxURChjKTk4MR4wHAYDVQQL
ExVQZXJzb25hIE5vdCBWYWxpZGF0ZWQxMzAxBgNVBAsTKkRpZ2l0YWwgSUQgQ2xhc3MgMSAt
IE5ldHNjYXBlIEZ1bGwgU2VydmljZTETMBEGA1UEAxQKSm9zZSBCYWFyczEcMBoGCSqGSIb3
DQEJARYNcGV1dEBwZXV0Lm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKLH
zIjeQUuZ9gSXNlKqy6nvzZqN66/dMBLKfyZR8auevZpbUzuM3i+Uzz/v+xUvzzesf6RY/NVD
ghNit9blAXEf4IGq1fQXXGxLUDsBHzFkizyjv+wzFXbE5JdgQleUo/hdVZjyhT5Mofl1Zhn0
En2mQnzjRrKKqoj8/cweqa7u9Lac8O7xhkVr7joS1aQZslOPMV2etTkmZ252nft93Vu02yxE
iSrO0M55A5NpnqlL1GqOGY25ZW2Bm5wqGjpz1B/aG0bPwAv3kyq20XY5lgv0CVdmGMlwgw5p
kFWO7AujBf+RgvaWjW/JQa3d5nFKRlH8gJ+RDCPUEqkVkYW0zlcCAwEAAaOBzDCByTAJBgNV
HRMEAjAAMEQGA1UdIAQ9MDswOQYLYIZIAYb4RQEHFwEwKjAoBggrBgEFBQcCARYcaHR0cHM6
Ly93d3cudmVyaXNpZ24uY29tL3JwYTALBgNVHQ8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUH
AwQGCCsGAQUFBwMCMEoGA1UdHwRDMEEwP6A9oDuGOWh0dHA6Ly9JbmRDMURpZ2l0YWxJRC1j
cmwudmVyaXNpZ24uY29tL0luZEMxRGlnaXRhbElELmNybDANBgkqhkiG9w0BAQUFAAOCAQEA
Fy44PhDAytcmAPzO8JYFGMGqxAtefTJuqstkeVyJzv6Wy0CXTp+Lt8YPf7U2tynhUiaTJS8l
AS8VK+QH78y3yQ5VJ2356Jggicq3+UGRLPLSxqt2yHS7sh9yC36eYtlhb5rO+JecPhU0yp5D
1Ahk8dJSFYN7cgDk1JgTiF+rBdflzXceWWqlRxdGZYgYD0w+v1JDFnSODswVSxlWAb1/lOwD
fIgSa9SC63JfoZHNlAv7CVbKZHOH9cDuPZCdiT4g+U1AcnrYwceUAjjzLeyxJfBHyF9sfh7S
zD7x7O6Hvzk64UwEjeqHGVBfjBPz6/ysoe2Itx12giiFYzQgP4h04TGCBOwwggToAgEBMIHy
MIHdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
cmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczov
L3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTA1MR4wHAYDVQQLExVQZXJzb25hIE5vdCBWYWxp
ZGF0ZWQxNzA1BgNVBAMTLlZlcmlTaWduIENsYXNzIDEgSW5kaXZpZHVhbCBTdWJzY3JpYmVy
IENBIC0gRzICEEJLgZ2m/5im8G2Mp6IuBpMwCQYFKw4DAhoFAKCCAs4wGAYJKoZIhvcNAQkD
MQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTAxMDA4MTgwOTM3WjAjBgkqhkiG9w0B
CQQxFgQUbzNHx5pLtuDWn7vbe2VYvS2lH+cwXwYJKoZIhvcNAQkPMVIwUDALBglghkgBZQME
AQIwCgYIKoZIhvcNAwcwDgYIKoZIhvcNAwICAgCAMA0GCCqGSIb3DQMCAgFAMAcGBSsOAwIH
MA0GCCqGSIb3DQMCAgEoMIIBAwYJKwYBBAGCNxAEMYH1MIHyMIHdMQswCQYDVQQGEwJVUzEX
MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
cmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20v
cnBhIChjKTA1MR4wHAYDVQQLExVQZXJzb25hIE5vdCBWYWxpZGF0ZWQxNzA1BgNVBAMTLlZl
cmlTaWduIENsYXNzIDEgSW5kaXZpZHVhbCBTdWJzY3JpYmVyIENBIC0gRzICEEJLgZ2m/5im
8G2Mp6IuBpMwggEFBgsqhkiG9w0BCRACCzGB9aCB8jCB3TELMAkGA1UEBhMCVVMxFzAVBgNV
BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTsw
OQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAo
YykwNTEeMBwGA1UECxMVUGVyc29uYSBOb3QgVmFsaWRhdGVkMTcwNQYDVQQDEy5WZXJpU2ln
biBDbGFzcyAxIEluZGl2aWR1YWwgU3Vic2NyaWJlciBDQSAtIEcyAhBCS4Gdpv+YpvBtjKei
LgaTMA0GCSqGSIb3DQEBAQUABIIBABiruFoFRIux/ic1hmkfaYpihJMCZtBxRJDCmGBTOU9I
oB2Cefew9Fp9lEm+HazRqSxcixPOGuUQJMl3ujNpMG0w/WYRt7F/NmBLQcy2I3kf0Y6xai3Z
QSFRW55R3Adt2Rhm6baMF1MW3OiNd9psl+209TprzyVd/fDucY1QQJ+51RTIoic/QO/VZRwh
p1J5g5dfIFZqGCt9PGtKtx2bvpyANhOBAzPHh9E2IQz9MkiKZ8aETn6a+RI92DYhLYzgu0RM
X0x/9+4gKuIJnzUCeMVd3cZvIqmSOK9k9xjeHKKcyUX5ao7rgZE32z7EIHPAAGrhNCxxtd9E
DW/0hWaiMbsAAAAAAAA=
--------------ms040502060608040400050801--

--===============0542384105==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============0542384105==--

From libssh2-devel-bounces@cool.haxx.se  Fri Oct  8 20:21:12 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o98IL5tI017104;
	Fri, 8 Oct 2010 20:21:11 +0200
Received: from mx1.belnet.be (mx1.belnet.be [193.190.198.9])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o98IL351016930
	for <libssh2-devel@cool.haxx.se>; Fri, 8 Oct 2010 20:21:04 +0200
X-IronPort-AV: E=Sophos;i="4.57,304,1283724000"; 
   d="scan'208";a="1093907"
Received: from firewall.belnet.be (HELO relay.fw.belnet.be) ([193.190.198.37])
	by mx1-out.belnet.be with ESMTP; 08 Oct 2010 20:20:54 +0200
Received: from [192.168.2.4] (unknown [79.132.236.226])
	(using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
	(No client certificate requested)
	by relay.fw.belnet.be (Postfix) with ESMTPSA id AC5D41E
	for <libssh2-devel@cool.haxx.se>; Fri,  8 Oct 2010 20:21:03 +0200 (CEST)
Message-ID: <4CAF6106.7020805@0xbadc0de.be>
Date: Fri, 08 Oct 2010 20:20:54 +0200
From: Aris Adamantiadis <aris@0xbadc0de.be>
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US;
	rv:1.9.1.12) Gecko/20100915 Thunderbird/3.0.8
MIME-Version: 1.0
To: libssh2-devel@cool.haxx.se
Subject: Re: Disabling compression by API?
References: <alpine.DEB.2.00.1010081703030.10538@tvnag.unkk.fr>	<000001cb66fd$d3275380$7975fa80$@com>	<alpine.DEB.2.00.1010081950120.10538@tvnag.unkk.fr>
	<4CAF5E61.8080107@peut.org>
In-Reply-To: <4CAF5E61.8080107@peut.org>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 08 Oct 2010 20:21:12 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 08 Oct 2010 20:21:04 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Hi,

OpenSSH's man page tell this:
        tocol version 1.  Compression is desirable on modem lines and
        other slow connections, but will only slow down things on fast
        networks.  The default value can be set on a host-by-host basis
        in the configuration files; see the Compression option.
The idea is that interactive sessions send a lot of small packets (<8
bytes) which are padded to blocksize (32 bytes for AES256) and then
have an additional 20 bytes for the HMAC.
While compression may enhance the throughput when used with large
packets and on slow networks, it adds latency which may not be
desirable for interactive sessions, with a marginal benefit (ethernet
frames take a fixed amount of bytes per packet on anyway).
My opinion is that compression is useful when transferring files of
unknown type, or mainly text files. Some content with high entropy
(compressed files, video, ...) are slow to compress and decompress ; If
there is an API call do enable/disable it (libssh does), everybody
should be happy.

Aris


Le 08/10/10 20:09, Jose Baars a =E9crit :
>  Op 10/8/2010 7:53 PM, Daniel Stenberg schreef:
>> As for what default to use, I would love to hear some more opinions!
> =

> My vote is for default on. As compression usually will shrink the data
> to about
> half, the CPU spent on compression will partly be earned back by having to
> encrypt only half of the data. In normal situations you would always want
> to use compression to lessen the burden on the network, and to avoid havi=
ng
> to compress files or data separately.
> =

> Just my view.
> =

> Regards,
> Jose
> =

> =

> =

> =

> =

> =

> _______________________________________________
> libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Oct  8 22:03:01 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o98K2f9s015378;
	Fri, 8 Oct 2010 22:02:57 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o98K2etn015324
	for <libssh2-devel@cool.haxx.se>; Fri, 8 Oct 2010 22:02:40 +0200
Date: Fri, 8 Oct 2010 22:02:40 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Disabling compression by API?
In-Reply-To: <4CAF6106.7020805@0xbadc0de.be>
Message-ID: <alpine.DEB.2.00.1010082158510.10538@tvnag.unkk.fr>
References: <alpine.DEB.2.00.1010081703030.10538@tvnag.unkk.fr>
	<000001cb66fd$d3275380$7975fa80$@com>
	<alpine.DEB.2.00.1010081950120.10538@tvnag.unkk.fr>
	<4CAF5E61.8080107@peut.org> <4CAF6106.7020805@0xbadc0de.be>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 08 Oct 2010 22:03:01 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 08 Oct 2010 22:02:40 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Fri, 8 Oct 2010, Aris Adamantiadis wrote:

> While compression may enhance the throughput when used with large packets 
> and on slow networks, it adds latency which may not be desirable for 
> interactive sessions, with a marginal benefit (ethernet frames take a fixed 
> amount of bytes per packet on anyway).

Well, on a modern PC that sends a small packet compressed, is the very tiny 
microsecond or whatever the compression function call takes really a factor at 
all?

I'm not saying that it does any good, I just question that it actually is 
noticable. I guess if you send a large pre-compressed stream it will be 
measureable at least.

> My opinion is that compression is useful when transferring files of unknown 
> type, or mainly text files. Some content with high entropy (compressed 
> files, video, ...) are slow to compress and decompress ; If there is an API 
> call do enable/disable it (libssh does), everybody should be happy.

Right, but the question right now is mostly: what is the default?

Out of curiosity, what does libssh default to?

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Oct  8 22:18:09 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o98KI1vr024018;
	Fri, 8 Oct 2010 22:18:08 +0200
Received: from mx2.belnet.be (mx2.belnet.be [193.190.198.13])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o98KHw6j024001
	for <libssh2-devel@cool.haxx.se>; Fri, 8 Oct 2010 22:17:59 +0200
X-IronPort-AV: E=Sophos;i="4.57,305,1283724000"; 
   d="scan'208";a="1064057"
Received: from firewall.belnet.be (HELO relay.fw.belnet.be) ([193.190.198.37])
	by mx2-out.belnet.be with ESMTP; 08 Oct 2010 22:17:49 +0200
Received: from [192.168.2.4] (unknown [79.132.236.226])
	(using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
	(No client certificate requested)
	by relay.fw.belnet.be (Postfix) with ESMTPSA id 7E55A1E
	for <libssh2-devel@cool.haxx.se>; Fri,  8 Oct 2010 22:17:58 +0200 (CEST)
Message-ID: <4CAF7C6C.7030505@0xbadc0de.be>
Date: Fri, 08 Oct 2010 22:17:48 +0200
From: Aris Adamantiadis <aris@0xbadc0de.be>
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US;
	rv:1.9.1.12) Gecko/20100915 Thunderbird/3.0.8
MIME-Version: 1.0
To: libssh2-devel@cool.haxx.se
Subject: Re: Disabling compression by API?
References: <alpine.DEB.2.00.1010081703030.10538@tvnag.unkk.fr>	<000001cb66fd$d3275380$7975fa80$@com>	<alpine.DEB.2.00.1010081950120.10538@tvnag.unkk.fr>	<4CAF5E61.8080107@peut.org>
	<4CAF6106.7020805@0xbadc0de.be>
	<alpine.DEB.2.00.1010082158510.10538@tvnag.unkk.fr>
In-Reply-To: <alpine.DEB.2.00.1010082158510.10538@tvnag.unkk.fr>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 08 Oct 2010 22:18:09 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 08 Oct 2010 22:17:59 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Le 08/10/10 22:02, Daniel Stenberg a =E9crit :
> Well, on a modern PC that sends a small packet compressed, is the very
> tiny microsecond or whatever the compression function call takes really
> a factor at all?
Probably. but compressing certainly is as costly as encryption. And
can't be speeded up with hardware or threading tricks (like aes128-ctr
which can be pre-computed by a thread on another cpu/core).

fyi:
aris@darkforce:~$ dd if=3D/dev/urandom of=3Dfile count=3D1000000
1000000+0 enregistrements lus
1000000+0 enregistrements =E9crits
512000000 octets (512 MB) copi=E9s, 73,3125 s, 7,0 MB/s
aris@darkforce:~$ time dd if=3Dfile of=3D/dev/null
[...]
real	0m0.525s
aris@darkforce:~$ time gzip -c file > /dev/null

real	0m20.975s
user	0m20.740s
sys	0m0.130s
on
model name	: AMD Phenom(tm) II X4 945 Processor

I'm sorry I don't have statistics for aes encryption.

> =

> I'm not saying that it does any good, I just question that it actually
> is noticable. I guess if you send a large pre-compressed stream it will
> be measureable at least.
Here the throughput I got from my gzip (on a quite worst case, I ack)
is around 200mbps (512000000 * 8 /20 /(1024*1024)). It's less than the
speed I'd expect to have using SSH on high speed link, and it doesn't
even count time spent on encryption and basic protocol handling.
> =

>> My opinion is that compression is useful when transferring files of
>> unknown type, or mainly text files. Some content with high entropy
>> (compressed files, video, ...) are slow to compress and decompress ;
>> If there is an API call do enable/disable it (libssh does), everybody
>> should be happy.
> =

> Right, but the question right now is mostly: what is the default?
> =

> Out of curiosity, what does libssh default to?
> =

It defaults to "none". If application designer thinks it's interesting
to have compression by default, it's easy to enable.
Also, it's a lot less of complicated code that is running in the lib
and makes the debugging really easier when some bug report comes in
(even if I don't remember having a bug report related to compression,
except maybe the feature request for libz@openssh.com).

Aris
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Oct  8 22:27:20 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o98KRGkW000850;
	Fri, 8 Oct 2010 22:27:19 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o98KRFcr000845
	for <libssh2-devel@cool.haxx.se>; Fri, 8 Oct 2010 22:27:15 +0200
Date: Fri, 8 Oct 2010 22:27:15 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Disabling compression by API?
In-Reply-To: <4CAF7C6C.7030505@0xbadc0de.be>
Message-ID: <alpine.DEB.2.00.1010082225430.10538@tvnag.unkk.fr>
References: <alpine.DEB.2.00.1010081703030.10538@tvnag.unkk.fr>
	<000001cb66fd$d3275380$7975fa80$@com>
	<alpine.DEB.2.00.1010081950120.10538@tvnag.unkk.fr>
	<4CAF5E61.8080107@peut.org> <4CAF6106.7020805@0xbadc0de.be>
	<alpine.DEB.2.00.1010082158510.10538@tvnag.unkk.fr>
	<4CAF7C6C.7030505@0xbadc0de.be>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 08 Oct 2010 22:27:20 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 08 Oct 2010 22:27:15 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Fri, 8 Oct 2010, Aris Adamantiadis wrote:

> Also, it's a lot less of complicated code that is running in the lib

In our case, compression or not is only a very minor difference in the code so 
I don't consider that a particular factor.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Sat Oct  9 12:53:07 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o99AqMcP005072;
	Sat, 9 Oct 2010 12:53:03 +0200
Received: from mail-qy0-f182.google.com (mail-qy0-f182.google.com
	[209.85.216.182])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o99AqKTu005047
	for <libssh2-devel@cool.haxx.se>; Sat, 9 Oct 2010 12:52:20 +0200
Received: by qyk35 with SMTP id 35so2593069qyk.20
	for <libssh2-devel@cool.haxx.se>; Sat, 09 Oct 2010 03:52:13 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:mime-version:received:sender:received
	:in-reply-to:references:date:x-google-sender-auth:message-id:subject
	:from:to:content-type;
	bh=Xafkzv1OyZgEfD8dvi/ZaIdrbpbcur340wK2DylVES4=;
	b=gKI0pcPk9PGfra/FzwbVEAw0mlYMmefgZR1AMGAxDUgHOR4VNsFDBdYm53Wk6gHWOM
	Of2KURfahxyxzfJDIiAJQEpcn3XyMJRPNPDAj/iYE0q0fuao0/8Ci0VZrzkvB4bzg+Gw
	dDl6h1RGHwSfnq6VXCEUHBBZFodl8MX3e1YC8=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=mime-version:sender:in-reply-to:references:date
	:x-google-sender-auth:message-id:subject:from:to:content-type;
	b=oX9ojY/jMRlnV4i0JOMMs9c6QC/2r9JcQNg8neJPplkK5X2FOCJfSvG5KxWKtlHnN8
	0sDyccgjcQX6NyRA/qPKUQ0sWltDBHEQu+VcKiSpdOC6SFWD6DOGgnG4fVFWJ0Oo/1vO
	N2tWE4GALhweHct779VbzIwtmb2kpOj1BjEx0=
MIME-Version: 1.0
Received: by 10.224.26.106 with SMTP id d42mr2524022qac.160.1286621533332;
	Sat, 09 Oct 2010 03:52:13 -0700 (PDT)
Received: by 10.229.66.157 with HTTP; Sat, 9 Oct 2010 03:52:13 -0700 (PDT)
In-Reply-To: <alpine.DEB.2.00.1010082225430.10538@tvnag.unkk.fr>
References: <alpine.DEB.2.00.1010081703030.10538@tvnag.unkk.fr>
	<000001cb66fd$d3275380$7975fa80$@com>
	<alpine.DEB.2.00.1010081950120.10538@tvnag.unkk.fr>
	<4CAF5E61.8080107@peut.org> <4CAF6106.7020805@0xbadc0de.be>
	<alpine.DEB.2.00.1010082158510.10538@tvnag.unkk.fr>
	<4CAF7C6C.7030505@0xbadc0de.be>
	<alpine.DEB.2.00.1010082225430.10538@tvnag.unkk.fr>
Date: Sat, 9 Oct 2010 12:52:13 +0200
X-Google-Sender-Auth: oMVCmxZ_ttPJLPPFpggq4eV2s6o
Message-ID: <AANLkTin3gocFFVm5vN43goaex5mMESYYkO7GsR+nUfDK@mail.gmail.com>
Subject: Re: Disabling compression by API?
From: Tor Arntsen <tor@spacetec.no>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Sat, 09 Oct 2010 12:53:07 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Sat, 09 Oct 2010 12:52:20 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

[re. compression opinions]

My own experience with compressing and OpenSSH is that I wouldn't want
it on anywhere except on remote connections. The encryption itself
takes some CPU, on some of the older CPU it takes a _lot_ of CPU if
the transmission is over a local, fast network (which is why I still
select a faster, less safe encryption algorithm now and then, for such
cases). Adding compression makes the CPU hit the roof.  Not long ago I
had to copy 70 gigs from one fast computer to another, over a LAN, and
initially I started with compression on. It tooks so long I had to
break it off and restart, now with compression off, to get anywhere in
a reasonable time.

So, in short, I prefer compression off as default, just as it is with OpenSSH.

-Tor
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Sat Oct  9 12:55:06 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o99At3XZ006076;
	Sat, 9 Oct 2010 12:55:05 +0200
Received: from mail-qy0-f182.google.com (mail-qy0-f182.google.com
	[209.85.216.182])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o99At1LO005738
	for <libssh2-devel@cool.haxx.se>; Sat, 9 Oct 2010 12:55:02 +0200
Received: by qyk35 with SMTP id 35so2594728qyk.20
	for <libssh2-devel@cool.haxx.se>; Sat, 09 Oct 2010 03:54:55 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:mime-version:received:sender:received
	:in-reply-to:references:date:x-google-sender-auth:message-id:subject
	:from:to:content-type:content-transfer-encoding;
	bh=w8D7Fsf3R9MjiuhBostL203Z7fi3Y9z4iLMIrUE3loE=;
	b=PU4mRLWc9zqvFGjnuIy7oHENyS/mi/iyBogQv429zhHvMSaX0VFWTl/epbzRLpQr+p
	uU6k4OyYQrJ8+JBZVuRBapPzxvfgNb+dTqGCgcdI917AW6A7jmNUNiCC3elNYwPSZA+G
	JXaletzSkYfxSwY5Tcd2Rl9M1VWYRr5uRCKJ8=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=mime-version:sender:in-reply-to:references:date
	:x-google-sender-auth:message-id:subject:from:to:content-type
	:content-transfer-encoding;
	b=kz47nYKJDDnOETi/Xqn1c11XWf6kYFIot1SLEDWEQHBmRw+G247tsOZ26+s0BVel/t
	5JIrIiKCXL6x2yYVZh0FWEfPHLH/MuJwZ7V+nM0wIbVh+FdRyCN/nNQSmBGoa4AaNcN7
	H28XDvcb/jht2Xo2E8mHZUXn0yNHMqM2TlV9M=
MIME-Version: 1.0
Received: by 10.224.19.84 with SMTP id z20mr2538340qaa.287.1286621695044; Sat,
	09 Oct 2010 03:54:55 -0700 (PDT)
Received: by 10.229.66.157 with HTTP; Sat, 9 Oct 2010 03:54:54 -0700 (PDT)
In-Reply-To: <4CAF5E61.8080107@peut.org>
References: <alpine.DEB.2.00.1010081703030.10538@tvnag.unkk.fr>
	<000001cb66fd$d3275380$7975fa80$@com>
	<alpine.DEB.2.00.1010081950120.10538@tvnag.unkk.fr>
	<4CAF5E61.8080107@peut.org>
Date: Sat, 9 Oct 2010 12:54:54 +0200
X-Google-Sender-Auth: 9Q2smq-22UmTUtYNOpbC1F-sX3o
Message-ID: <AANLkTikx69Esuja39G97NhMfAEnzVsJ65hr_6eVO5vY2@mail.gmail.com>
Subject: Re: Disabling compression by API?
From: Tor Arntsen <tor@spacetec.no>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Sat, 09 Oct 2010 12:55:06 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Sat, 09 Oct 2010 12:55:02 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Fri, Oct 8, 2010 at 20:09, Jose Baars <peut@peut.org> wrote:
> =A0Op 10/8/2010 7:53 PM, Daniel Stenberg schreef:
>>
>> As for what default to use, I would love to hear some more opinions!
>
> My vote is for default on. As compression usually will shrink the data to
> about
> half, [...]

Shrink to half is normally only true for text.
Almost all the data I transfer is some kind of binary data, and it
doesn't compress nearly as well. The satellite data I transfer
compresses somewhere between 0 % (SAR data) and 10-15% (optical).

-Tor
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Sun Oct 10 05:57:57 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9A3vYvH027520;
	Sun, 10 Oct 2010 05:57:53 +0200
Received: from ponderosa.fch.wimsey.bc.ca (zz20920564179.cipherkey.net
	[209.205.64.179])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9A3vVtw027513
	for <libssh2-devel@cool.haxx.se>; Sun, 10 Oct 2010 05:57:32 +0200
Received: by coneharvesters.com
	via sendmail with stdio id <m1P4n2L-000l6IC@ponderosa.fch.wimsey.bc.ca>
	for libssh2-devel@cool.haxx.se; Sat, 9 Oct 2010 20:57:25 -0700 (PDT)
Date: Sat, 9 Oct 2010 20:57:24 -0700
From: Dan Fandrich <dan@coneharvesters.com>
To: libssh2-devel@cool.haxx.se
Subject: Re: Disabling compression by API?
Message-ID: <20101010035724.GA31863@coneharvesters.com>
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <alpine.DEB.2.00.1010081703030.10538@tvnag.unkk.fr>
	<000001cb66fd$d3275380$7975fa80$@com>
	<alpine.DEB.2.00.1010081950120.10538@tvnag.unkk.fr>
	<4CAF5E61.8080107@peut.org>
	<AANLkTikx69Esuja39G97NhMfAEnzVsJ65hr_6eVO5vY2@mail.gmail.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <AANLkTikx69Esuja39G97NhMfAEnzVsJ65hr_6eVO5vY2@mail.gmail.com>
User-Agent: Mutt/1.5.21 (2010-09-15)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Sun, 10 Oct 2010 05:57:57 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Sun, 10 Oct 2010 05:57:32 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Sat, Oct 09, 2010 at 12:54:54PM +0200, Tor Arntsen wrote:
> Shrink to half is normally only true for text.
> Almost all the data I transfer is some kind of binary data, and it
> doesn't compress nearly as well. The satellite data I transfer
> compresses somewhere between 0 % (SAR data) and 10-15% (optical).

I'm also willing to guess that most users of libssh2 aren't doing
interactive shell sessions but automating some kind of file transfer. I'm
further willing to guess that more often than not those files are either
in some kind of binary foramt or already compressed.  I think that
compression should default to off, for those reasons and because it means
one less thing that can go wrong as somebody starts to integrating libssh2
into his app.

>>> Dan
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Sun Oct 10 23:55:38 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9ALsWAf021310;
	Sun, 10 Oct 2010 23:55:32 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9ALsURU021303
	for <libssh2-devel@cool.haxx.se>; Sun, 10 Oct 2010 23:54:30 +0200
Date: Sun, 10 Oct 2010 23:54:30 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Disabling compression by API?
In-Reply-To: <20101010035724.GA31863@coneharvesters.com>
Message-ID: <alpine.DEB.2.00.1010102343181.17481@tvnag.unkk.fr>
References: <alpine.DEB.2.00.1010081703030.10538@tvnag.unkk.fr>
	<000001cb66fd$d3275380$7975fa80$@com>
	<alpine.DEB.2.00.1010081950120.10538@tvnag.unkk.fr>
	<4CAF5E61.8080107@peut.org>
	<AANLkTikx69Esuja39G97NhMfAEnzVsJ65hr_6eVO5vY2@mail.gmail.com>
	<20101010035724.GA31863@coneharvesters.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Sun, 10 Oct 2010 23:55:38 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Sun, 10 Oct 2010 23:54:31 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Sat, 9 Oct 2010, Dan Fandrich wrote:

> I think that compression should default to off

Thanks for all the input. Default off it will be, now I just have to think of 
how to do the API to alter it.

If we follow the tradition we should probably have a 
libssh2_session_set_compressed() function that sets the option on how to do 
the negotiation.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 11 09:54:27 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9B7rZ4p013998;
	Mon, 11 Oct 2010 09:54:21 +0200
Received: from baruapepe.africonnect.co.zm (afcz-office-lsk-129.iconnect.zm
	[196.12.12.129])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9B7rX7J013984
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 09:53:34 +0200
Received: from localhost (localhost [127.0.0.1])
	by baruapepe.africonnect.co.zm (Postfix) with ESMTP id 7513A68015DCA
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 09:51:19 +0200 (CAT)
X-Virus-Scanned: amavisd-new at baruapepe.africonnect.co.zm
Received: from baruapepe.africonnect.co.zm ([127.0.0.1])
	by localhost (baruapepe.africonnect.co.zm [127.0.0.1]) (amavisd-new,
	port 10024)
	with ESMTP id fiowhxYH05zf for <libssh2-devel@cool.haxx.se>;
	Mon, 11 Oct 2010 09:51:18 +0200 (CAT)
Received: from baruapepe.africonnect.co.zm (baruapepe.africonnect.co.zm
	[127.0.1.1])
	by baruapepe.africonnect.co.zm (Postfix) with ESMTP id 2B51168040F11
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 09:51:18 +0200 (CAT)
Date: Mon, 11 Oct 2010 09:51:18 +0200 (CAT)
From: Tim Martin <timm@africonnect.co.zm>
To: libssh2-devel@cool.haxx.se
Message-ID: <26526592.151952.1286783478033.JavaMail.root@baruapepe>
In-Reply-To: <30604123.151936.1286783450819.JavaMail.root@baruapepe>
Subject: Debugging SCP failure: "Timed out waiting for SCP response"
MIME-Version: 1.0
X-Originating-IP: [172.20.1.90]
X-Mailer: Zimbra 6.0.5_GA_2213.UBUNTU8 (ZimbraWebClient - FF3.0
	(Win)/6.0.5_GA_2213.UBUNTU8)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 11 Oct 2010 09:54:27 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 11 Oct 2010 09:53:34 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Hi,

I am trying to transfer a file from an SSH server using libssh2. The SSH server in question is running under RouterOS (http://www.mikrotik.com) and seems to be misbehaving, but I don't know enough to narrow the problem down further.

The client can connect to the server and authenticate OK. I can also execute commands on the remote shell OK. However, when I try and call libssh2_scp_recv() I always get a null result. After the failure, libssh2_session_lasterror returns an empty string, and libssh2_session_lasterrno returns zero.

Test code and debug logs are available here:

http://gist.github.com/620189

The most noticeable log line is

[libssh2] 1.001111 Failure Event: -28 - Timed out waiting for SCP response

I believe on one occasion I got this error message returned by libssh2_session_lasterror() but I can't reproduce that. I don't know what the timeout should be, but it certainly isn't waiting very long before timing out (a fraction of a second at most).

I'd be grateful for any pointers as to how to proceed with this. I don't mind dipping into the libssh2 code, but I don't have the time to grok it at the moment. I'm fairly sure the problem ultimately lies on the RouterOS side, but I don't want to give up if there's a simple workaround.

Tim
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 11 11:50:14 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9B9ncmx030043;
	Mon, 11 Oct 2010 11:50:11 +0200
Received: from mail.ritual.org (146.n01.hh.clusters.de [213.238.52.146])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9B9naYp030035
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 11:49:37 +0200
Received: from spring.local (spring.ritual.org [217.91.25.149])
	(authenticated bits=0)
	by mail.ritual.org (8.12.9/8.12.9) with ESMTP id o9B9nYUF030462
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 11:49:35 +0200
Received: from [IPv6:::1] (localhost [IPv6:::1])
	by spring.local (Postfix) with ESMTP id BCE3E32DEE57
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 11:49:33 +0200 (CEST)
Mime-Version: 1.0 (Apple Message framework v1081)
Subject: Re: Debugging SCP failure: "Timed out waiting for SCP response"
From: Uli Zappe <uli@ritual.org>
In-Reply-To: <26526592.151952.1286783478033.JavaMail.root@baruapepe>
Date: Mon, 11 Oct 2010 11:49:33 +0200
Message-Id: <7B75CEA2-8D99-40E1-8BEA-F4291C28A79E@spring.local>
References: <26526592.151952.1286783478033.JavaMail.root@baruapepe>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-Mailer: Apple Mail (2.1081)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 11 Oct 2010 11:50:14 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 11 Oct 2010 11:49:37 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Am 11.10.2010 um 09:51 schrieb Tim Martin:

> The client can connect to the server and authenticate OK. I can also exec=
ute commands on the remote shell OK. However, when I try and call libssh2_s=
cp_recv() I always get a null result.
> [...]
> The most noticeable log line is
> =

> [libssh2] 1.001111 Failure Event: -28 - Timed out waiting for SCP response
> [...]
> I'd be grateful for any pointers as to how to proceed with this. I don't =
mind dipping into the libssh2 code, but I don't have the time to grok it at=
 the moment. I'm fairly sure the problem ultimately lies on the RouterOS si=
de

Could it possibly be (due to an error on the RouterOS side or whatever) tha=
t the file you're trying to receive has a size of 0 Byte? I encountered the=
 issue that in this case libssh2 (at least libssh2-1.2.7) immediately retur=
ns but logs a timeout error. (But Daniel Stenberg could not reproduce this =
with the current github build.)

> I don't know what the timeout should be, but it certainly isn't waiting v=
ery long before timing out (a fraction of a second at most).

The (fixed) timeout of libssh2 is 60 seconds. You should never get a timeou=
t error message before this timespan, if I understand this correctly.

            Bye
                    Uli
________________________________________________________

  Uli Zappe, Solmsstra=DFe 5, D-65189 Wiesbaden, Germany
  http://www.ritual.org
  Fon: +49-700-ULIZAPPE
  Fax: +49-700-ZAPPEFAX
________________________________________________________

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 11 12:01:02 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9BA0ujk003742;
	Mon, 11 Oct 2010 12:01:01 +0200
Received: from baruapepe.africonnect.co.zm (baruapepe.africonnect.co.zm
	[196.12.12.129])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9BA0rCg003583
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 12:00:54 +0200
Received: from localhost (localhost [127.0.0.1])
	by baruapepe.africonnect.co.zm (Postfix) with ESMTP id 4E47D68015DC9
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 11:58:39 +0200 (CAT)
X-Virus-Scanned: amavisd-new at baruapepe.africonnect.co.zm
Received: from baruapepe.africonnect.co.zm ([127.0.0.1])
	by localhost (baruapepe.africonnect.co.zm [127.0.0.1]) (amavisd-new,
	port 10024)
	with ESMTP id pkTtxmoCs+4n for <libssh2-devel@cool.haxx.se>;
	Mon, 11 Oct 2010 11:58:39 +0200 (CAT)
Received: from baruapepe.africonnect.co.zm (baruapepe.africonnect.co.zm
	[127.0.1.1])
	by baruapepe.africonnect.co.zm (Postfix) with ESMTP id 1F35A680619E0
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 11:58:39 +0200 (CAT)
Date: Mon, 11 Oct 2010 11:58:39 +0200 (CAT)
From: Tim Martin <timm@africonnect.co.zm>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Message-ID: <15258831.152899.1286791119034.JavaMail.root@baruapepe>
In-Reply-To: <29889350.152876.1286791006964.JavaMail.root@baruapepe>
Subject: Re: Debugging SCP failure: "Timed out waiting for SCP response"
MIME-Version: 1.0
X-Originating-IP: [172.20.1.90]
X-Mailer: Zimbra 6.0.5_GA_2213.UBUNTU8 (ZimbraWebClient - FF3.0
	(Win)/6.0.5_GA_2213.UBUNTU8)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 11 Oct 2010 12:01:02 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 11 Oct 2010 12:00:54 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se


----- "Uli Zappe" <uli@ritual.org> wrote:

> Am 11.10.2010 um 09:51 schrieb Tim Martin:
> 
> > The client can connect to the server and authenticate OK. I can also
> execute commands on the remote shell OK. However, when I try and call
> libssh2_scp_recv() I always get a null result.
> > [...]
> > The most noticeable log line is
> > 
> > [libssh2] 1.001111 Failure Event: -28 - Timed out waiting for SCP
> response
> 
> Could it possibly be (due to an error on the RouterOS side or
> whatever) that the file you're trying to receive has a size of 0 Byte?

I don't think so. If I do

$ scp admin@192.168.88.1:firewall.rsc ./

then it successfully downloads as a 27Kb file.
 
Thanks for the suggestions and info on timeouts,

Tim
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 11 14:14:39 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9BCECsx000615;
	Mon, 11 Oct 2010 14:14:35 +0200
Received: from mail-ew0-f54.google.com (mail-ew0-f54.google.com
	[209.85.215.54])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9BCEBE6000609
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 14:14:11 +0200
Received: by ewy27 with SMTP id 27so2214520ewy.41
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 05:14:09 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:received:received:message-id:date:from
	:user-agent:mime-version:to:subject:references:in-reply-to
	:content-type:content-transfer-encoding;
	bh=BzRaba/3MAMl4icWeAdB/FrgZTb3wPL4G1MgASQ2AN4=;
	b=VT51QTVfIt34TUC080NFSD/5xAPchdjK2F2OidocOG37HZZ2FZ8a3EkoKVtxhDDyv/
	FcyDuhNQ/AAyWK3sFdC+bWmp4jaEdj6xM2H/jiaByC4dK9XIiymVRPHaYNQ/A0LGX5kv
	vOMSHNLG+0Ls0WFhRzewtvDEEny6iUxrk04Ew=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=message-id:date:from:user-agent:mime-version:to:subject:references
	:in-reply-to:content-type:content-transfer-encoding;
	b=XBqil4BcTe6Eo7pJvpRYgWgypwkJFcOadN0RaRQSRORCbk4rOuCiSYvy48tc2Kl0rj
	tOg2L2T5qgRGNy9MaMPSUFrM6F+lq2uMwJiVkAUbkSyHXGsZdBJS7DxR3lxtPeGLtTV/
	q98Ut3Vmh2GLtLo+23lh1ZOqN3DHCz+ezpaq4=
Received: by 10.14.22.3 with SMTP id s3mr3314842ees.29.1286799249003;
	Mon, 11 Oct 2010 05:14:09 -0700 (PDT)
Received: from [172.31.2.230] (stockholm.ardendo.se [83.241.192.2])
	by mx.google.com with ESMTPS id p53sm3384642eeh.19.2010.10.11.05.14.06
	(version=SSLv3 cipher=RC4-MD5); Mon, 11 Oct 2010 05:14:07 -0700 (PDT)
Message-ID: <4CB2FF8D.9040509@gmail.com>
Date: Mon, 11 Oct 2010 14:14:05 +0200
From: Tommy Lindgren <tommy.lindgren@gmail.com>
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US;
	rv:1.9.1.12) Gecko/20100915 Lightning/1.0b1 Thunderbird/3.0.8
MIME-Version: 1.0
To: libssh2-devel@cool.haxx.se
Subject: Re: [PATCH] Support for exit-signal messages
References: <4CA5EBD4.4000206@gmail.com>
	<877hi2c7fx.fsf@mocca.josefsson.org>	<4CA5FF4A.9040200@gmail.com>
	<87r5g9994x.fsf@mocca.josefsson.org>	<8762xkhqiq.fsf@gmail.com>
	<87r5g7vyxf.fsf@mocca.josefsson.org>	<4CA9E54E.1060001@gmail.com>
	<871v85j6tt.fsf@mocca.josefsson.org>	<4CAB55DE.1080901@gmail.com>
	<87bp78v8dd.fsf@mocca.josefsson.org>
In-Reply-To: <87bp78v8dd.fsf@mocca.josefsson.org>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 11 Oct 2010 14:14:39 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 11 Oct 2010 14:14:11 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On 2010-10-05 19:48, Simon Josefsson wrote:
> Tommy Lindgren<tommy.lindgren@gmail.com>  writes:
>
>> On 2010-10-05 12:02, Simon Josefsson wrote:
>>> Tommy Lindgren<tommy.lindgren@gmail.com>   writes:
>>>
>>>> The function is always returning LIBSSH2_ERROR_NONE. I'm not sure if
>>>> it should returning anything else? (Perhaps if the malloc fails? Other
>>>> API functions don't seem to do this though.)
>>>
>>> It needs to handle memory allocation errors and return
>>> LIBSSH2_ERROR_ALLOC when it happens.
>>
>> OK. Updated patch attached.
>
> All general issues I can think of looks resolved.

Cool. How do you typically go about submitting patches? Should I create 
a Trac issue?

Regards,
Tommy
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 11 14:27:13 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9BCR8Bo012394;
	Mon, 11 Oct 2010 14:27:13 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9BCR6qI012377
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 14:27:06 +0200
Date: Mon, 11 Oct 2010 14:27:06 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Debugging SCP failure: "Timed out waiting for SCP response"
In-Reply-To: <26526592.151952.1286783478033.JavaMail.root@baruapepe>
Message-ID: <alpine.DEB.2.00.1010111424170.22655@tvnag.unkk.fr>
References: <26526592.151952.1286783478033.JavaMail.root@baruapepe>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 11 Oct 2010 14:27:13 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 11 Oct 2010 14:27:06 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Mon, 11 Oct 2010, Tim Martin wrote:

> [libssh2] 1.001111 Failure Event: -28 - Timed out waiting for SCP response

Okay, the human readable text there is not really helpful and even downright 
wrong. (I'll change that in a minute.)

The -28 is however more interesting. -28 equals LIBSSH2_ERROR_SCP_PROTOCOL, 
and if you check where that pair (error code + text) is return you find two 
spots in src/scp.c and both returns due to an error in 
_libssh2_channel_read().

I would suggest you start by checking which of those two that fails and what 
the actual return code is from _libssh2_channel_read() in that case.

With that info at hand, we can dig deeper...

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 11 14:54:24 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9BCsGrD024852;
	Mon, 11 Oct 2010 14:54:23 +0200
Received: from baruapepe.africonnect.co.zm (afcz-office-lsk-129.iconnect.zm
	[196.12.12.129])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9BCsDKd024811
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 14:54:14 +0200
Received: from localhost (localhost [127.0.0.1])
	by baruapepe.africonnect.co.zm (Postfix) with ESMTP id 7D4CC68015DCA
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 14:51:58 +0200 (CAT)
X-Virus-Scanned: amavisd-new at baruapepe.africonnect.co.zm
Received: from baruapepe.africonnect.co.zm ([127.0.0.1])
	by localhost (baruapepe.africonnect.co.zm [127.0.0.1]) (amavisd-new,
	port 10024)
	with ESMTP id U9fqRGKUeyaC for <libssh2-devel@cool.haxx.se>;
	Mon, 11 Oct 2010 14:51:58 +0200 (CAT)
Received: from baruapepe.africonnect.co.zm (baruapepe.africonnect.co.zm
	[127.0.1.1])
	by baruapepe.africonnect.co.zm (Postfix) with ESMTP id 39B9D68040F11
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 14:51:58 +0200 (CAT)
Date: Mon, 11 Oct 2010 14:51:58 +0200 (CAT)
From: Tim Martin <timm@africonnect.co.zm>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Message-ID: <16743142.154318.1286801518124.JavaMail.root@baruapepe>
In-Reply-To: <12106967.154255.1286801140965.JavaMail.root@baruapepe>
Subject: Re: Debugging SCP failure: "Timed out waiting for SCP response"
MIME-Version: 1.0
X-Originating-IP: [172.20.1.90]
X-Mailer: Zimbra 6.0.5_GA_2213.UBUNTU8 (ZimbraWebClient - FF3.0
	(Win)/6.0.5_GA_2213.UBUNTU8)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 11 Oct 2010 14:54:24 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 11 Oct 2010 14:54:15 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se


----- "Daniel Stenberg" <daniel@haxx.se> wrote:

> On Mon, 11 Oct 2010, Tim Martin wrote:
> 
> > [libssh2] 1.001111 Failure Event: -28 - Timed out waiting for SCP
> response
> 
> Okay, the human readable text there is not really helpful and even
> downright 
> wrong. (I'll change that in a minute.)
> 
> The -28 is however more interesting. -28 equals
> LIBSSH2_ERROR_SCP_PROTOCOL, 
> and if you check where that pair (error code + text) is return you
> find two 
> spots in src/scp.c and both returns due to an error in 
> _libssh2_channel_read().
> 
> I would suggest you start by checking which of those two that fails
> and what 
> the actual return code is from _libssh2_channel_read() in that case.

The call that is triggering the error is the one on line 385, and the return code from _libssh2_channel_read() is zero. I'll do a little more digging myself to see if I can trace any further what's happening immediately before this, but I don't konw if this makes any sense on its own?

Tim
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 11 15:04:34 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9BD4SbE002262;
	Mon, 11 Oct 2010 15:04:33 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9BD4RpB002211
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 15:04:27 +0200
Date: Mon, 11 Oct 2010 15:04:27 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Debugging SCP failure: "Timed out waiting for SCP response"
In-Reply-To: <16743142.154318.1286801518124.JavaMail.root@baruapepe>
Message-ID: <alpine.DEB.2.00.1010111501500.22655@tvnag.unkk.fr>
References: <16743142.154318.1286801518124.JavaMail.root@baruapepe>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 11 Oct 2010 15:04:34 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 11 Oct 2010 15:04:27 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Mon, 11 Oct 2010, Tim Martin wrote:

> The call that is triggering the error is the one on line 385, and the return 
> code from _libssh2_channel_read() is zero. I'll do a little more digging 
> myself to see if I can trace any further what's happening immediately before 
> this, but I don't konw if this makes any sense on its own?

I was just reading that code and returning error due to 0 there is a bug. It 
just means that _libssh2_channel_read() didn't return any payload data in that 
call.

Try changing the error codition to (rc < 0 and add a

  else if(rc == 0)
     continue;

... and see if that makes anything different. I think that's more appropriate 
and I'm working in my end to try out such a modfication.

The second place has the same flaw but is harder to fix...

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 11 15:10:48 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9BDAhVg006916;
	Mon, 11 Oct 2010 15:10:47 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9BDAf5l006903
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 15:10:41 +0200
Date: Mon, 11 Oct 2010 15:10:41 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Debugging SCP failure: "Timed out waiting for SCP response"
In-Reply-To: <alpine.DEB.2.00.1010111501500.22655@tvnag.unkk.fr>
Message-ID: <alpine.DEB.2.00.1010111510130.22655@tvnag.unkk.fr>
References: <16743142.154318.1286801518124.JavaMail.root@baruapepe>
	<alpine.DEB.2.00.1010111501500.22655@tvnag.unkk.fr>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 11 Oct 2010 15:10:47 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 11 Oct 2010 15:10:41 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Mon, 11 Oct 2010, Daniel Stenberg wrote:

> The second place has the same flaw but is harder to fix...

Sorry, I confused myself. The second spot should be possible to fix the same 
way, I mixed it up with another piece of code.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 11 15:14:53 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9BDEisp008160;
	Mon, 11 Oct 2010 15:14:52 +0200
Received: from mail.ritual.org (146.n01.hh.clusters.de [213.238.52.146])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9BDEgic008152
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 15:14:43 +0200
Received: from spring.local (spring.ritual.org [217.91.25.149])
	(authenticated bits=0)
	by mail.ritual.org (8.12.9/8.12.9) with ESMTP id o9BDEeUF031628
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 15:14:40 +0200
Received: from [IPv6:::1] (localhost [IPv6:::1])
	by spring.local (Postfix) with ESMTP id 2991E32DFAFF
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 15:14:40 +0200 (CEST)
Mime-Version: 1.0 (Apple Message framework v1081)
Subject: Re: Debugging SCP failure: "Timed out waiting for SCP response"
From: Uli Zappe <uli@ritual.org>
In-Reply-To: <alpine.DEB.2.00.1010111501500.22655@tvnag.unkk.fr>
Date: Mon, 11 Oct 2010 15:14:39 +0200
Message-Id: <A71BFC7D-0CFE-4C63-95CE-74B343D96398@spring.local>
References: <16743142.154318.1286801518124.JavaMail.root@baruapepe>
	<alpine.DEB.2.00.1010111501500.22655@tvnag.unkk.fr>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-Mailer: Apple Mail (2.1081)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 11 Oct 2010 15:14:53 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 11 Oct 2010 15:14:43 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Am 11.10.2010 um 15:04 schrieb Daniel Stenberg:

> On Mon, 11 Oct 2010, Tim Martin wrote:
> =

>> The call that is triggering the error is the one on line 385, and the re=
turn code from _libssh2_channel_read() is zero. I'll do a little more diggi=
ng myself to see if I can trace any further what's happening immediately be=
fore this, but I don't konw if this makes any sense on its own?
> =

> I was just reading that code and returning error due to 0 there is a bug.

Hm, but isn't this exactly the issue I reported in "BUG: libssh2_channel_re=
ad() does not handle files with size =3D 0 correctly" where you replied tha=
t the issue does not occur anymore in current builds?

            Bye
                    Uli
________________________________________________________

  Uli Zappe, Solmsstra=DFe 5, D-65189 Wiesbaden, Germany
  http://www.ritual.org
  Fon: +49-700-ULIZAPPE
  Fax: +49-700-ZAPPEFAX
________________________________________________________

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 11 15:17:58 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9BDHsTN009656;
	Mon, 11 Oct 2010 15:17:56 +0200
Received: from mail.ritual.org (146.n01.hh.clusters.de [213.238.52.146])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9BDHqqV009622
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 15:17:52 +0200
Received: from spring.local (spring.ritual.org [217.91.25.149])
	(authenticated bits=0)
	by mail.ritual.org (8.12.9/8.12.9) with ESMTP id o9BDHnUF031672
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 15:17:49 +0200
Received: from [IPv6:::1] (localhost [IPv6:::1])
	by spring.local (Postfix) with ESMTP id 9F93132DFB54
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 15:17:49 +0200 (CEST)
Mime-Version: 1.0 (Apple Message framework v1081)
Subject: Re: Debugging SCP failure: "Timed out waiting for SCP response"
From: Uli Zappe <uli@ritual.org>
In-Reply-To: <A71BFC7D-0CFE-4C63-95CE-74B343D96398@spring.local>
Date: Mon, 11 Oct 2010 15:17:49 +0200
Message-Id: <2FAD4AEC-8069-496E-A999-D1BDE444A6DF@spring.local>
References: <16743142.154318.1286801518124.JavaMail.root@baruapepe>
	<alpine.DEB.2.00.1010111501500.22655@tvnag.unkk.fr>
	<A71BFC7D-0CFE-4C63-95CE-74B343D96398@spring.local>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-Mailer: Apple Mail (2.1081)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 11 Oct 2010 15:17:58 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 11 Oct 2010 15:17:52 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Am 11.10.2010 um 15:14 schrieb Uli Zappe:
> Hm, but isn't this exactly the issue I reported in "BUG: libssh2_channel_=
read() does not handle files with size =3D 0 correctly" where you replied t=
hat the issue does not occur anymore in current builds?

Uhm, forget that - I'm afraid I mixed something up.

            Bye
                    Uli
________________________________________________________

  Uli Zappe, Solmsstra=DFe 5, D-65189 Wiesbaden, Germany
  http://www.ritual.org
  Fon: +49-700-ULIZAPPE
  Fax: +49-700-ZAPPEFAX
________________________________________________________

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 11 15:22:10 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9BDM8J4013941;
	Mon, 11 Oct 2010 15:22:10 +0200
Received: from baruapepe.africonnect.co.zm (baruapepe.africonnect.co.zm
	[196.12.12.129])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9BDM4mq013682
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 15:22:06 +0200
Received: from localhost (localhost [127.0.0.1])
	by baruapepe.africonnect.co.zm (Postfix) with ESMTP id 4ECB968015DC8
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 15:19:49 +0200 (CAT)
X-Virus-Scanned: amavisd-new at baruapepe.africonnect.co.zm
Received: from baruapepe.africonnect.co.zm ([127.0.0.1])
	by localhost (baruapepe.africonnect.co.zm [127.0.0.1]) (amavisd-new,
	port 10024)
	with ESMTP id 22XCawwAciD1 for <libssh2-devel@cool.haxx.se>;
	Mon, 11 Oct 2010 15:19:48 +0200 (CAT)
Received: from baruapepe.africonnect.co.zm (baruapepe.africonnect.co.zm
	[127.0.1.1])
	by baruapepe.africonnect.co.zm (Postfix) with ESMTP id CB0F5680619E0
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 15:19:48 +0200 (CAT)
Date: Mon, 11 Oct 2010 15:19:48 +0200 (CAT)
From: Tim Martin <timm@africonnect.co.zm>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Message-ID: <21694742.154568.1286803188742.JavaMail.root@baruapepe>
In-Reply-To: <alpine.DEB.2.00.1010111501500.22655@tvnag.unkk.fr>
Subject: Re: Debugging SCP failure: "Timed out waiting for SCP response"
MIME-Version: 1.0
X-Originating-IP: [172.20.1.90]
X-Mailer: Zimbra 6.0.5_GA_2213.UBUNTU8 (ZimbraWebClient - FF3.0
	(Win)/6.0.5_GA_2213.UBUNTU8)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 11 Oct 2010 15:22:10 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 11 Oct 2010 15:22:06 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se


----- "Daniel Stenberg" <daniel@haxx.se> wrote:

> On Mon, 11 Oct 2010, Tim Martin wrote:
> 
> > The call that is triggering the error is the one on line 385, and
> the return 
> > code from _libssh2_channel_read() is zero. I'll do a little more
> digging 
> > myself to see if I can trace any further what's happening
> immediately before 
> > this, but I don't konw if this makes any sense on its own?
> 
> I was just reading that code and returning error due to 0 there is a
> bug. It 
> just means that _libssh2_channel_read() didn't return any payload data
> in that 
> call.
> 
> Try changing the error codition to (rc < 0 and add a
> 
>   else if(rc == 0)
>      continue;
> 
> ... and see if that makes anything different. I think that's more
> appropriate 
> and I'm working in my end to try out such a modfication.

If I do that, I get what looks like an infinite loop (I gave up after 60 seconds).

All I've been able to figure out so far is that within _libssh2_channel_read it gets a NULL pointer from the call to _libssh2_list_first on line ~1708. Changing the condition as described above just causes it to hit that line again and again, getting NULL each time. I'm assuming it's to do with the call to _libssh2_transport_read() above not getting any data.

Tim
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 11 15:32:19 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9BDWBjO021305;
	Mon, 11 Oct 2010 15:32:18 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9BDW9qm021296
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 15:32:09 +0200
Date: Mon, 11 Oct 2010 15:32:09 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Debugging SCP failure: "Timed out waiting for SCP response"
In-Reply-To: <21694742.154568.1286803188742.JavaMail.root@baruapepe>
Message-ID: <alpine.DEB.2.00.1010111524220.22655@tvnag.unkk.fr>
References: <21694742.154568.1286803188742.JavaMail.root@baruapepe>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 11 Oct 2010 15:32:18 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 11 Oct 2010 15:32:09 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Mon, 11 Oct 2010, Tim Martin wrote:

>> Try changing the error codition to (rc < 0 and add a
>>
>>   else if(rc == 0)
>>      continue;

> If I do that, I get what looks like an infinite loop (I gave up after 60 
> seconds).

Hm, it shouldn't get into an infinite loop. _libssh2_channel_read() should 
return EAGAIN if called again without there being any data to return.

Oh, it deliberately returns 0 when there's an EOF... see below:

> All I've been able to figure out so far is that within _libssh2_channel_read 
> it gets a NULL pointer from the call to _libssh2_list_first on line ~1708. 
> Changing the condition as described above just causes it to hit that line 
> again and again, getting NULL each time. I'm assuming it's to do with the 
> call to _libssh2_transport_read() above not getting any data.

Right, that code reads data off the socket, puts packets in queues for each 
channel and the _libssh2_list_first() then returns the first packet for your 
channel and when that is NULL there's nothing there to take care of.

In your log you posted there's an interesting EOF just before the -28:

[libssh2] 1.001004 Transport: Packet type 96 received, length=5
[libssh2] 1.001055 Conn: EOF received for channel 0/0
[libssh2] 1.001111 Failure Event: -28 - Timed out waiting for SCP response
[libssh2] 1.001164 Conn: Freeing channel 0/0 resources

... something makes the remote end close the channel!

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 11 16:03:59 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9BE3TJ9012890;
	Mon, 11 Oct 2010 16:03:57 +0200
Received: from baruapepe.africonnect.co.zm (afcz-office-lsk-129.iconnect.zm
	[196.12.12.129])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9BE3PFW012613
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 16:03:27 +0200
Received: from localhost (localhost [127.0.0.1])
	by baruapepe.africonnect.co.zm (Postfix) with ESMTP id 73A3668015DC8
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 16:01:10 +0200 (CAT)
X-Virus-Scanned: amavisd-new at baruapepe.africonnect.co.zm
Received: from baruapepe.africonnect.co.zm ([127.0.0.1])
	by localhost (baruapepe.africonnect.co.zm [127.0.0.1]) (amavisd-new,
	port 10024)
	with ESMTP id O0gVL8mM43Vy for <libssh2-devel@cool.haxx.se>;
	Mon, 11 Oct 2010 16:01:09 +0200 (CAT)
Received: from baruapepe.africonnect.co.zm (baruapepe.africonnect.co.zm
	[127.0.1.1])
	by baruapepe.africonnect.co.zm (Postfix) with ESMTP id DB6E368040F11
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 16:01:09 +0200 (CAT)
Date: Mon, 11 Oct 2010 16:01:09 +0200 (CAT)
From: Tim Martin <timm@africonnect.co.zm>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Message-ID: <27519398.154917.1286805669793.JavaMail.root@baruapepe>
In-Reply-To: <21962636.154873.1286805609957.JavaMail.root@baruapepe>
Subject: Re: Debugging SCP failure: "Timed out waiting for SCP response"
MIME-Version: 1.0
X-Originating-IP: [172.20.1.90]
X-Mailer: Zimbra 6.0.5_GA_2213.UBUNTU8 (ZimbraWebClient - FF3.0
	(Win)/6.0.5_GA_2213.UBUNTU8)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 11 Oct 2010 16:03:59 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 11 Oct 2010 16:03:28 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se


----- "Daniel Stenberg" <daniel@haxx.se> wrote:

> On Mon, 11 Oct 2010, Tim Martin wrote:
> 
> >> Try changing the error codition to (rc < 0 and add a
> >>
> >>   else if(rc == 0)
> >>      continue;
> 
> > If I do that, I get what looks like an infinite loop (I gave up
> after 60 
> > seconds).
> 
> Hm, it shouldn't get into an infinite loop. _libssh2_channel_read()
> should 
> return EAGAIN if called again without there being any data to return.
> 
> Oh, it deliberately returns 0 when there's an EOF... see below:
> 
> > All I've been able to figure out so far is that within
> _libssh2_channel_read 
> > it gets a NULL pointer from the call to _libssh2_list_first on line
> ~1708. 
> > Changing the condition as described above just causes it to hit that
> line 
> > again and again, getting NULL each time. I'm assuming it's to do
> with the 
> > call to _libssh2_transport_read() above not getting any data.
> 
> Right, that code reads data off the socket, puts packets in queues for
> each 
> channel and the _libssh2_list_first() then returns the first packet
> for your 
> channel and when that is NULL there's nothing there to take care of.

Just to summarise what I've found, the chain of return codes is:

    _libssh2_recv() returns EAGAIN
  _libssh2_transport_read() returns LIBSSH2_ERROR_EAGAIN
_libssh2_channel_read() returns 0

> In your log you posted there's an interesting EOF just before the
> -28:
> 
> [libssh2] 1.001004 Transport: Packet type 96 received, length=5
> [libssh2] 1.001055 Conn: EOF received for channel 0/0
> [libssh2] 1.001111 Failure Event: -28 - Timed out waiting for SCP
> response
> [libssh2] 1.001164 Conn: Freeing channel 0/0 resources
> 
> ... something makes the remote end close the channel!

FWIW, the backtrace to the point where it logs "EOF received" is

#0  _libssh2_packet_add (session=0x804b008, data=0x8054288 "`", datalen=5, macstate=0) at packet.c:720
#1  0x0014f3ae in fullpacket (session=0x804b008, encrypted=1) at transport.c:253
#2  0x0014fc2c in _libssh2_transport_read (session=0x804b008) at transport.c:587
#3  0x00134fda in _libssh2_channel_read (channel=0x8052fd8, stream_id=0, buf=0x804f664 "", buflen=1) at channel.c:1693
#4  0x00141df1 in scp_recv (session=0x804b008, path=0x8048e18 "firewall.rsc", sb=0xbffff38c) at scp.c:385
#5  0x00142b03 in libssh2_scp_recv (session=0x804b008, path=0x8048e18 "firewall.rsc", sb=0xbffff38c) at scp.c:777
#6  0x08048b3b in main (argc=2, argv=0xbffff4c4) at test.c:74

Are we likely to be able to get much further with this without being able to peer inside the server code? The RouterOS guys are not unhelpful, but it's closed source and since this bug has been fixed in the (yet to be released) new version, I can't imagine I'd get a lot of support from them. 

If it seems to be a server error with no simple workaround I'll probably have to give up on it. At least I know where I stand.

Tim
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 11 16:09:00 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9BE8tf2017085;
	Mon, 11 Oct 2010 16:08:59 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9BE8tR4017079
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 16:08:55 +0200
Date: Mon, 11 Oct 2010 16:08:55 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Debugging SCP failure: "Timed out waiting for SCP response"
In-Reply-To: <27519398.154917.1286805669793.JavaMail.root@baruapepe>
Message-ID: <alpine.DEB.2.00.1010111606070.22655@tvnag.unkk.fr>
References: <27519398.154917.1286805669793.JavaMail.root@baruapepe>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 11 Oct 2010 16:09:00 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 11 Oct 2010 16:08:55 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Mon, 11 Oct 2010, Tim Martin wrote:

> Are we likely to be able to get much further with this without being able to 
> peer inside the server code? The RouterOS guys are not unhelpful, but it's 
> closed source and since this bug has been fixed in the (yet to be released) 
> new version, I can't imagine I'd get a lot of support from them.
>
> If it seems to be a server error with no simple workaround I'll probably 
> have to give up on it. At least I know where I stand.

Right, I agree with that. It looks like the server closes the channel at this 
early point - for some reason that certainly isn't clear to me.

So no, I can't think of any easy work-around off the top of my head.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 11 16:21:01 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9BEKlRt024016;
	Mon, 11 Oct 2010 16:20:59 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9BEKjWH023977
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 16:20:45 +0200
Date: Mon, 11 Oct 2010 16:20:45 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: [PATCH] Support for exit-signal messages
In-Reply-To: <4CB2FF8D.9040509@gmail.com>
Message-ID: <alpine.DEB.2.00.1010111619270.22655@tvnag.unkk.fr>
References: <4CA5EBD4.4000206@gmail.com> <877hi2c7fx.fsf@mocca.josefsson.org>
	<4CA5FF4A.9040200@gmail.com>
	<87r5g9994x.fsf@mocca.josefsson.org> <8762xkhqiq.fsf@gmail.com>
	<87r5g7vyxf.fsf@mocca.josefsson.org> <4CA9E54E.1060001@gmail.com>
	<871v85j6tt.fsf@mocca.josefsson.org>
	<4CAB55DE.1080901@gmail.com> <87bp78v8dd.fsf@mocca.josefsson.org>
	<4CB2FF8D.9040509@gmail.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 11 Oct 2010 16:21:01 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 11 Oct 2010 16:20:45 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Mon, 11 Oct 2010, Tommy Lindgren wrote:

>> All general issues I can think of looks resolved.
>
> Cool. How do you typically go about submitting patches? Should I create a 
> Trac issue?

In my opinion, just posting it like this on the mailing list is good enough - 
at least if someone seems to receive it. Otherwise submitting it to trac is a 
good way to make sure it doesn't get lost.

I was under the impression Simon was "receiving" this patch so I've not done 
anything with it.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 11 17:52:30 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9BFqBVq030364;
	Mon, 11 Oct 2010 17:52:26 +0200
Received: from nm14-vm0.bullet.mail.ukl.yahoo.com
	(nm14-vm0.bullet.mail.ukl.yahoo.com [217.146.183.250])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with SMTP id o9BFq90R030334
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 17:52:09 +0200
Received: from [217.146.183.184] by nm14.bullet.mail.ukl.yahoo.com with NNFMP;
	11 Oct 2010 15:52:00 -0000
Received: from [217.146.183.166] by tm15.bullet.mail.ukl.yahoo.com with NNFMP;
	11 Oct 2010 15:52:00 -0000
Received: from [127.0.0.1] by omp1007.mail.ukl.yahoo.com with NNFMP;
	11 Oct 2010 15:51:59 -0000
X-Yahoo-Newman-Property: ymail-3
X-Yahoo-Newman-Id: 845254.62433.bm@omp1007.mail.ukl.yahoo.com
Received: (qmail 37600 invoked by uid 60001); 11 Oct 2010 15:51:59 -0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024;
	t=1286812319; bh=pNupx9Mw8NCdGP8Yl7LAAcPn4LrTWfGe5/h16GnTLX4=;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:Date:From:Subject:To:MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=oQzdHr5/fdLeFW4EnQjRojrGskZuIs4DSGJknz3UMPZ1mTFnSsyYK0TRE6yvy9JZlIP0+I/egmUUNIc0f9C1OeOU1DyfqEuXMw9GZ3tzAMRWKFGhEMg8H2ZjzSZRyo0UP5pCswm64NOp+0o9QkxAIAUn2ThuQF/Cmmt9zWxFzdc=
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:Date:From:Subject:To:MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=dU6b06lsoW1zKp5t0ks/AFtYLVZQ+bxN+ZWth3LldLxltHbLQtGQYDwM3k0N94+ofqNC9JLBH3FOTYcf4pxbdjuIZty3ulNvrLRLSIDhrBoVWyVy7T665IKA56BzeeU9H9X6UtUSuMFeGtB0lCwTPWx/+drJPVJeJRtPAyPvWEE=;
Message-ID: <462466.37328.qm@web29707.mail.ird.yahoo.com>
X-YMail-OSG: EHz03ykVM1myIvP1UayuwrGrDVSv26UBir1tJIPOVtXbH98
	_rpgpaZbkh.kwiIMyuyUj47mFlptf7fJPJtUICIq2F_SJIp7n2NPGakH5PJe
	QY9sn_6yTT6ccZx7TbdHG5ttVOXU2D1orA3Mw9m2KLYTYlxml5o3lUIpdWpj
	sae7eoM6rerIMhrxvbvXCGBOlj7DiXhtHyyaDpMv89NBzmv.oCdHKwDd8Rgu
	Nves7BVNjmDxw85V72tZtf5dvOcUMeeOjp1T9WJhOgX1OSHqPnLAf18m_n8Q -
Received: from [87.189.244.54] by web29707.mail.ird.yahoo.com via HTTP;
	Mon, 11 Oct 2010 16:51:58 BST
X-Mailer: YahooMailRC/504.5 YahooMailWebService/0.8.106.282862
Date: Mon, 11 Oct 2010 16:51:58 +0100 (BST)
From: may nothing <may_241913@yahoo.com>
Subject: libssh2_sftp_init ... I don't get it.
To: libssh2-devel@cool.haxx.se
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 11 Oct 2010 17:52:30 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 11 Oct 2010 17:52:09 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Hi everyone,

I'm trying to get this code to run but libssh2_sftp_init always fails, and I 
don't have the any idea why. Could you help me

TIA
may

/data/work > more sftptest.c
#include <libssh2.h>
#include <libssh2_sftp.h>
 

#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <arpa/inet.h>
 
#include <sys/types.h>
#include <fcntl.h>
#include <errno.h>
#include <stdio.h>
#include <ctype.h>
 
int main(int argc, char *argv[])
{
    unsigned long hostaddr;
    int sock, i, auth_pw = 1;
    struct sockaddr_in sin;
    const char *fingerprint;
    LIBSSH2_SESSION *session;
    const char *username="username";
    const char *password="password";
    const char *loclfile="FBMON.ZIP";
    const char *sftppath="/eclipse/";
    int rc;
    FILE *local;
    LIBSSH2_SFTP *sftp_session;
    LIBSSH2_SFTP_HANDLE *sftp_handle;
    char mem[1024];
    size_t nread;
    char *ptr;

 
        if (argc > 1) 
    {
           hostaddr = inet_addr(argv[1]);
        } 
    else 
    {
           hostaddr = htonl(0x7F000001);
        }
 
        if(argc > 2) 
    {
           username = argv[2];
        }
        if(argc > 3) 
    {
           password = argv[3];
        }
        if(argc > 4) 
    {
           loclfile = argv[4];
        }
        if(argc > 5) 
    {
           sftppath = argv[5];
        }    
 
    rc = libssh2_init (0);

    if (rc != 0) 
    {
        fprintf (stderr, "libssh2 initialization failed (%d)\n", rc);
        return 1;
    }
 
    local = fopen(loclfile, "wb");
    if (!local) 
    {
        printf("Can't local file %s\n", loclfile);
        return -1;
    }
 
    /*
     * The application code is responsible for creating the socket
     * and establishing the connection
     */ 
    sock = socket(AF_INET, SOCK_STREAM, 0);
 
    sin.sin_family = AF_INET;
    sin.sin_port = htons(22);
    sin.sin_addr.s_addr = hostaddr;
    if (connect(sock, (struct sockaddr*)(&sin), sizeof(struct sockaddr_in)) != 
0) 

    {
           fprintf(stderr, "failed to connect!\n");
           return -1;
        }
 
    session = libssh2_session_init();

    if(!session)
        return -1;
 
    libssh2_session_set_blocking(session, 1);

    rc = libssh2_session_startup(session, sock);

    if(rc) 
    {
        fprintf(stderr, "Failure establishing SSH session: %d\n", rc);
        return -1;
    }
 

    fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);

    printf("Fingerprint: ");
    for(i = 0; i < 20; i++) 
    {
        printf("%02X ", (unsigned char)fingerprint[i]);
    }
    printf("\n");
 
    if (libssh2_userauth_password(session, username, password)) 
    {
        fprintf(stderr, "Authentication OK\n");
    }
    else
    {
    fprintf(stderr, "Authentication by password failed\n");
        goto shutdown;
    }
 
    fprintf(stderr, "libssh2_sftp_init()!\n");

    sftp_session = libssh2_sftp_init(session);
 
    if (!sftp_session) 
    {
        fprintf(stderr, "Unable to init SFTP session\n");
    
        goto shutdown;
    }
 
    fprintf(stderr, "libssh2_sftp_open()!\n");

    /* Request a file via SFTP */ 
    sftp_handle = libssh2_sftp_open(sftp_session, sftppath,LIBSSH2_FXF_READ,0);
 
    if (!sftp_handle) 
    {
        fprintf(stderr, "Unable to open file with SFTP\n");
        goto shutdown;
    }
    fprintf(stderr, "libssh2_sftp_open() is done, now receive data!\n");

    do {
        char mem[1024];
 
        /* loop until we fail */ 
        fprintf(stderr, "libssh2_sftp_read()!\n");

        rc = libssh2_sftp_read(sftp_handle, mem, sizeof(mem));

        if (rc > 0) 
    {
            write(1, mem, rc);
        } 
    else 
    {
            break;
        }
    } while (1);
 
    libssh2_sftp_close(sftp_handle);

    libssh2_sftp_shutdown(sftp_session);

 
  shutdown:
 
    libssh2_session_disconnect(session, "Normal Shutdown, Thank you for 
playing");

    libssh2_session_free(session);

    close(sock);

    fprintf(stderr, "all done\n");
 
    libssh2_exit();

 
    return 0;
}



_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 11 19:40:17 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9BHdwDu006680;
	Mon, 11 Oct 2010 19:40:13 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9BHdvvM006670
	for <libssh2-devel@cool.haxx.se>; Mon, 11 Oct 2010 19:39:57 +0200
Date: Mon, 11 Oct 2010 19:39:57 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: libssh2_sftp_init ... I don't get it.
In-Reply-To: <462466.37328.qm@web29707.mail.ird.yahoo.com>
Message-ID: <alpine.DEB.2.00.1010111937390.22655@tvnag.unkk.fr>
References: <462466.37328.qm@web29707.mail.ird.yahoo.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 11 Oct 2010 19:40:17 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 11 Oct 2010 19:39:57 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Mon, 11 Oct 2010, may nothing wrote:

> I'm trying to get this code to run but libssh2_sftp_init always fails, and I 
> don't have the any idea why. Could you help me

First, a minor clue could be extracted by checking the error code that was 
stored when it returns NULL.

The even better way is to use libssh2_trace() on a debug-enabled libssh2 and 
check all the gory details.

Are you sure your target SSH server even supports/allows SFTP?

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Oct 12 08:52:50 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9C6qTMf027101;
	Tue, 12 Oct 2010 08:52:46 +0200
Received: from nm15-vm0.bullet.mail.ukl.yahoo.com
	(nm15-vm0.bullet.mail.ukl.yahoo.com [217.146.183.252])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with SMTP id o9C6qRVv027087
	for <libssh2-devel@cool.haxx.se>; Tue, 12 Oct 2010 08:52:28 +0200
Received: from [217.146.183.213] by nm15.bullet.mail.ukl.yahoo.com with NNFMP;
	12 Oct 2010 06:52:20 -0000
Received: from [217.146.183.40] by tm6.bullet.mail.ukl.yahoo.com with NNFMP;
	12 Oct 2010 06:52:20 -0000
Received: from [127.0.0.1] by omp1025.mail.ukl.yahoo.com with NNFMP;
	12 Oct 2010 06:52:19 -0000
X-Yahoo-Newman-Property: ymail-3
X-Yahoo-Newman-Id: 772223.15349.bm@omp1025.mail.ukl.yahoo.com
Received: (qmail 97034 invoked by uid 60001); 12 Oct 2010 06:52:19 -0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024;
	t=1286866339; bh=D3NP4EBWrLyHzsnuPeQ0BvfoY5FuE4iAE/kNJE9HQVY=;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=TOHNOY6/FT8itIwK1tge9XizxEVNLt8OMlk+IduDFtPo2klLXgGavjpx5VHG4BX+7JahR1NjPaARYHJkcy3//9/lxaOW9bg1dYHAbGvhqLdxRpN38CEyZSdROc3nkxZrB1LE5jbpn3FX1kBFVZwS2wjivmHtw37DkgygpQadsWA=
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=yclyYqcccSJmV25+J+ZZQgWmYWqLgcAJ4qha7fMHBaE1BMQnzzq55orqnxIv++sXQZmSSniRIqDw7MSzIK9UyaNTFCfhCs0wCRFQxevLD0KPzg5ibN0UikBYnC7M1eAEZ32f++fiYPuqC/Gu2pKSHt8Yzw5BI05Hrpok9A1Q3YY=;
Message-ID: <570457.90454.qm@web29709.mail.ird.yahoo.com>
X-YMail-OSG: o_ehuOsVM1mWNqVWwsGrMil2XUEwCmXmY.uzZ.sA0LClvD0
	g2WW4kmcWmJRrXfLk0nFHUy6v20rOUu7j8fmQwBKCNl8lQ2bCRsHSK0o6qOz
	zJH0ceQocvRlELWwVJ1.0G4YkGVH8B02JwfSCNEmJ4EHNSfLd4zjJT2uo4AO
	abeVZPgP7aix.sUDIp6pUP14e8KrHflZ0iybmKCk3OSS_jGUx8j.IkDgZ6Y4
	qtayJLXl4ymWhoRtk5bJmEUPcY9X60cvWdz_g6kB1h3FBLQyPrPDAk4Ztmgx
	XFtVCMZtinP1mG1TCv.xr5T6jEZT_
Received: from [62.143.24.194] by web29709.mail.ird.yahoo.com via HTTP;
	Tue, 12 Oct 2010 07:52:19 BST
X-Mailer: YahooMailRC/504.5 YahooMailWebService/0.8.106.282862
References: <462466.37328.qm@web29707.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010111937390.22655@tvnag.unkk.fr>
Date: Tue, 12 Oct 2010 07:52:19 +0100 (BST)
From: may nothing <may_241913@yahoo.com>
Subject: AW: libssh2_sftp_init ... I don't get it.
To: libssh2 development <libssh2-devel@cool.haxx.se>
In-Reply-To: <alpine.DEB.2.00.1010111937390.22655@tvnag.unkk.fr>
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Tue, 12 Oct 2010 08:52:50 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Tue, 12 Oct 2010 08:52:28 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

How ?

Either libssh2_session_last_errno and libssh2_trace getting completely igno=
red =

and return nothing.
I compiled libssh2 with enable-debug and tested the whole thing on my local =

machine which is runnig openssh-5.2p1-9.1.i586 ...
 =


    fprintf(stderr, "libssh2_sftp_init()!\n");

    sftp_session =3D libssh2_sftp_init(session);

    if (!sftp_session)
    {
        fprintf(stderr, "Unable to init SFTP session\n");
        int errLast =3D libssh2_session_last_errno(sftp_session);
        printf("error is: ",errLast);
        libssh2_trace(session, 0);

        goto shutdown;
    }


Any help would be highly appreciated

cu
May




----- Urspr=FCngliche Mail ----
Von: Daniel Stenberg <daniel@haxx.se>
An: libssh2 development <libssh2-devel@cool.haxx.se>
Gesendet: Montag, den 11. Oktober 2010, 19:39:57 Uhr
Betreff: Re: libssh2_sftp_init ... I don't get it.

On Mon, 11 Oct 2010, may nothing wrote:

> I'm trying to get this code to run but libssh2_sftp_init always fails, an=
d I =

>don't have the any idea why. Could you help me

First, a minor clue could be extracted by checking the error code that was =

stored when it returns NULL.

The even better way is to use libssh2_trace() on a debug-enabled libssh2 an=
d =

check all the gory details.

Are you sure your target SSH server even supports/allows SFTP?

-- =

/ daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel



_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Oct 12 12:58:12 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9CAvnna026344;
	Tue, 12 Oct 2010 12:58:07 +0200
Received: from earth.stuge.se (earth.stuge.se [213.88.146.15])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9CAvlSZ026339
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Tue, 12 Oct 2010 12:57:48 +0200
Received: (qmail 1604 invoked from network); 12 Oct 2010 10:57:44 -0000
Received: from unknown (HELO earth.stuge.se) (127.0.0.1)
	by localhost with SMTP; 12 Oct 2010 10:57:44 -0000
MIME-Version: 1.0
From: "libssh2 Trac" <trac@libssh2.stuge.se>
X-Trac-Version: 0.12b1
Precedence: bulk
Cc: libssh2-devel@cool.haxx.se
Auto-Submitted: auto-generated
X-Mailer: Trac 0.12b1, by Edgewall Software
X-Trac-Project: libssh2
Date: Tue, 12 Oct 2010 10:57:44 -0000
X-URL: http://trac.libssh2.org/
Subject: [libssh2] #190: Support for exit-signal messages
X-Trac-Ticket-URL: http://trac.libssh2.org/ticket/190
Message-ID: <041.b7e2758498458b9d0e22f91233a8a038@libssh2.stuge.se>
X-Trac-Ticket-ID: 190
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Tue, 12 Oct 2010 12:58:12 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Tue, 12 Oct 2010 12:57:48 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Reply-To: trac@libssh2.stuge.se,
        libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

#190: Support for exit-signal messages
-------------------------+--------------------------------------------------
 Reporter:  tomyl        |       Owner:     
     Type:  enhancement  |      Status:  new
 Priority:  normal       |   Milestone:     
Component:  API          |     Version:     
 Keywords:               |      Blocks:     
Blocked By:               |  
-------------------------+--------------------------------------------------
 The attached patch implements support for exit-signal messages. The API is
 extended with the following method:

 {{{
 LIBSSH2_API int libssh2_channel_get_exit_signal(LIBSSH2_CHANNEL* channel,
                                                 char **exitsignal,
                                                 size_t *exitsignal_len,
                                                 char **errmsg,
                                                 size_t *errmsg_len,
                                                 char **langtag,
                                                 size_t *langtag_len);
 }}}



 The patch has been discussed in the thread
 http://www.libssh2.org/mail/libssh2-devel-archive-2010-10/0001.shtml.

-- 
Ticket URL: <http://trac.libssh2.org/ticket/190>
libssh2 <http://trac.libssh2.org/>
C library for writing portable SSH2 clients
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Oct 12 22:49:55 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9CKnBKQ003770;
	Tue, 12 Oct 2010 22:49:48 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9CKn90c003762
	for <libssh2-devel@cool.haxx.se>; Tue, 12 Oct 2010 22:49:09 +0200
Date: Tue, 12 Oct 2010 22:49:09 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: AW: libssh2_sftp_init ... I don't get it.
In-Reply-To: <570457.90454.qm@web29709.mail.ird.yahoo.com>
Message-ID: <alpine.DEB.2.00.1010122245290.452@tvnag.unkk.fr>
References: <462466.37328.qm@web29707.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010111937390.22655@tvnag.unkk.fr>
	<570457.90454.qm@web29709.mail.ird.yahoo.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Tue, 12 Oct 2010 22:49:55 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Tue, 12 Oct 2010 22:49:09 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Tue, 12 Oct 2010, may nothing wrote:

> How ?

How what?

Please don't use top-posting in mailing list discussions. It breaks the 
quoting, it makes reading the mails hard and old grumpy people like me only 
get annoyed.

>    sftp_session = libssh2_sftp_init(session);
>
>    if (!sftp_session)
>    {
>        fprintf(stderr, "Unable to init SFTP session\n");
>        int errLast = libssh2_session_last_errno(sftp_session);
>        printf("error is: ",errLast);
>        libssh2_trace(session, 0);

I don't know why libssh2_session_last_errno() returns zero (I assume you mean 
that by "nothing"), but perhaps the full trace will help us...

libssh2_trace should be called _before_ libssh2_sftp_init, and you should of 
course set something _else_ than 0 as a flag. For simplicity I suggest you 
call it like:

    libssh2_trace(session, ~0);

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 13 15:06:35 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9DD66o5012464;
	Wed, 13 Oct 2010 15:06:28 +0200
Received: from nm14-vm0.bullet.mail.ukl.yahoo.com
	(nm14-vm0.bullet.mail.ukl.yahoo.com [217.146.183.250])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with SMTP id o9DD63wK012385
	for <libssh2-devel@cool.haxx.se>; Wed, 13 Oct 2010 15:06:03 +0200
Received: from [217.146.183.184] by nm14.bullet.mail.ukl.yahoo.com with NNFMP;
	13 Oct 2010 13:05:56 -0000
Received: from [217.146.183.72] by tm15.bullet.mail.ukl.yahoo.com with NNFMP;
	13 Oct 2010 13:05:56 -0000
Received: from [127.0.0.1] by omp1033.mail.ukl.yahoo.com with NNFMP;
	13 Oct 2010 13:05:55 -0000
X-Yahoo-Newman-Property: ymail-3
X-Yahoo-Newman-Id: 498346.44460.bm@omp1033.mail.ukl.yahoo.com
Received: (qmail 89041 invoked by uid 60001); 13 Oct 2010 13:05:55 -0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024;
	t=1286975155; bh=rrwafW7nWIxjh6d3Z3XXcx+LwvQY/OQhkdsNLK6ZnMg=;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=H4K6jl40XN1Y4lytQAuYEJ7dJehG1H+A70vok/qxngFaB/RFH3xgf6E/OXID/OAwdb+1Ts2cFfXPB0SLPn+G5M4hDHP50a9f9eMB7DsvD+ihFszJKPQSVhIZnR6U8sq+3Zq7noiotUxU5qVsl1+YQZekBfXMyRj6JfK9ut6+Wf8=
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=McJ1IZ6D200gsQu/jmE2iOlZ/V6DeFwE8dQKQ/7uEEgdmrA7/YL7LRdkzyRJ8KINZcWcsdSU+769dZgLDjMPjKhJZwcOkPiEIIMTKBm2/GL0et1GrI2m/TGqxyWTDzLDSjumL1/kqYNL1FCqT63aKKRFA2pWGVqMHxzZhRvfUac=;
Message-ID: <253340.81469.qm@web29719.mail.ird.yahoo.com>
X-YMail-OSG: y6wsZ0EVM1kyNhpBLAJ1j8QSbhQ_Dkn2yI8tzVdvs3Hrz2F
	mgC7tmt3Pc6Td0P2XG66F5Kx4QQM7qi.aAeQyDlBkph2WIWMrbEyBvWBOwzQ
	weiXHuMPIRNQe3CSEzNYkAngwwqa3sV_5p2vLASMPczzT09ytAt9op8I3mPs
	xLLl_DVmS61qpjNfvdYW8SRx7E0KHQI_OLzmOgOpuYOvkSfSmFEdDPGk3Y_O
	3RttNgokxpaslA0kFAfdYRauZX4MFQViErO_YEOBD3aR89mXfv6Nzx_vg.j4 -
Received: from [87.189.245.223] by web29719.mail.ird.yahoo.com via HTTP;
	Wed, 13 Oct 2010 14:05:55 BST
X-Mailer: YahooMailRC/504.5 YahooMailWebService/0.8.106.282862
References: <462466.37328.qm@web29707.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010111937390.22655@tvnag.unkk.fr>
	<570457.90454.qm@web29709.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010122245290.452@tvnag.unkk.fr>
Date: Wed, 13 Oct 2010 14:05:55 +0100 (BST)
From: may nothing <may_241913@yahoo.com>
Subject: AW: AW: libssh2_sftp_init ... I don't get it.
To: libssh2 development <libssh2-devel@cool.haxx.se>
In-Reply-To: <alpine.DEB.2.00.1010122245290.452@tvnag.unkk.fr>
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 13 Oct 2010 15:06:35 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 13 Oct 2010 15:06:03 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

>> How ?
How to provoke the whole thing to output any debug information. The point is 
that whatever I set 'libssh2_session_last_errno()' or  'libssh2_trace()' I never 
get any output.


>How what?

>Please don't use top-posting in mailing list discussions. It breaks the quoting, 
>it makes reading the mails hard and old grumpy people like me only get annoyed.

>>    sftp_session = libssh2_sftp_init(session);
>> 
>>    if (!sftp_session)
>>    {
>>        fprintf(stderr, "Unable to init SFTP session\n");
>>        int errLast = libssh2_session_last_errno(sftp_session);
>>        printf("error is: ",errLast);
>>        libssh2_trace(session, 0);

>I don't know why libssh2_session_last_errno() returns zero (I assume you mean 
>that by "nothing"), but perhaps the full trace will help us...

>libssh2_trace should be called _before_ libssh2_sftp_init, and you should of 
>course set something _else_ than 0 as a flag. For simplicity I suggest you call 
>it like:

>   libssh2_trace(session, ~0);
Ok, I'd tried that, but still I don't get any debug lines. As far as I got this 
from the documentation, the   libssh2_trace doesn't retrun anything but writes 
all its output to stderr ...
I also double checked the config.log of the libssh2-1.2.8 (devel version) and I 
can asure you it definitely got build with --enable-debug.


_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 13 15:20:44 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9DDKZac019538;
	Wed, 13 Oct 2010 15:20:42 +0200
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9DDKWtk019534
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 13 Oct 2010 15:20:32 +0200
Received: from mocca (c80-216-27-64.bredband.comhem.se [80.216.27.64])
	(authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5+lenny1) with ESMTP id
	o9DDKMko001414
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 13 Oct 2010 15:20:25 +0200
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: [PATCH] Support for exit-signal messages
References: <4CA5EBD4.4000206@gmail.com> <877hi2c7fx.fsf@mocca.josefsson.org>
	<4CA5FF4A.9040200@gmail.com> <87r5g9994x.fsf@mocca.josefsson.org>
	<8762xkhqiq.fsf@gmail.com> <87r5g7vyxf.fsf@mocca.josefsson.org>
	<4CA9E54E.1060001@gmail.com> <871v85j6tt.fsf@mocca.josefsson.org>
	<alpine.DEB.2.00.1010051248570.25613@tvnag.unkk.fr>
	<87fwwkv8fg.fsf@mocca.josefsson.org>
	<alpine.DEB.2.00.1010051948350.25613@tvnag.unkk.fr>
	<87sk0kscle.fsf@mocca.josefsson.org>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:101013:libssh2-devel@cool.haxx.se::jTelXWZDLeRa7C4t:0ZZO
Date: Wed, 13 Oct 2010 15:20:20 +0200
In-Reply-To: <87sk0kscle.fsf@mocca.josefsson.org> (Simon Josefsson's message
	of "Tue, 05 Oct 2010 20:45:17 +0200")
Message-ID: <87k4lmrzzf.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.2 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.8 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.96.3 at yxa-v
X-Virus-Status: Clean
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 13 Oct 2010 15:20:43 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 13 Oct 2010 15:20:33 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Simon Josefsson <simon@josefsson.org> writes:

> Daniel Stenberg <daniel@haxx.se> writes:
>
>> On Tue, 5 Oct 2010, Simon Josefsson wrote:
>>
>>> +LIBSSH2_API void
>>> +libssh2_free(void *ptr)
>>> +{
>>> +  free (ptr);
>>> +}
>>
>> I think it's too simple. For example, to be able to free the memory
>> returned by libssh2_base64_decode() it would have to use the internal
>> LIBSSH2_FREE() call which needs the session pointer (and will then use
>> the correct free callback).
>
> Yeah, I thought about that, but kind of preferred the other way around
> to avoid the LIBSSH2_SESSION dependency.  But I guess the library is
> already too deeply married into the LIBSSH2_SESSION parameter anyway
> that it doesn't make any sense to try and avoid it here.  I can prepare
> an updated patch tomorrow..

I have pushed the patch below.  I now realize there should be a man page
too, will add it next...

/Simon

From 98e38c4f3ac4ac973ea5929a6fa8d595cc003aa5 Mon Sep 17 00:00:00 2001
From: Simon Josefsson <simon@josefsson.org>
Date: Wed, 13 Oct 2010 15:19:12 +0200
Subject: [PATCH] Add libssh2_free.

---
 NEWS              |    4 ++++
 include/libssh2.h |    7 +++++++
 src/misc.c        |    7 +++++++
 3 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/NEWS b/NEWS
index f706192..b907919 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,7 @@
+This release includes the following changes:
+
+ o Added libssh2_free()
+
 libssh2 1.2.7 (August 17, 2010)
 
 This release includes the following changes:
diff --git a/include/libssh2.h b/include/libssh2.h
index 6040ab8..9d1e565 100644
--- a/include/libssh2.h
+++ b/include/libssh2.h
@@ -420,6 +420,13 @@ LIBSSH2_API int libssh2_init(int flags);
  */
 LIBSSH2_API void libssh2_exit(void);
 
+/*
+ * libssh2_free()
+ *
+ * Deallocate memory allocated by earlier call to libssh2 functions.
+ */
+LIBSSH2_API void libssh2_free(LIBSSH2_SESSION *session, void *ptr)
+
 /* Session API */
 LIBSSH2_API LIBSSH2_SESSION *
 libssh2_session_init_ex(LIBSSH2_ALLOC_FUNC((*my_alloc)),
diff --git a/src/misc.c b/src/misc.c
index 7a92492..8809b6b 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -1,5 +1,6 @@
 /* Copyright (c) 2004-2007 Sara Golemon <sarag@libssh2.org>
  * Copyright (c) 2009 by Daniel Stenberg
+ * Copyright (c) 2010  Simon Josefsson
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms,
@@ -352,6 +353,12 @@ size_t _libssh2_base64_encode(LIBSSH2_SESSION *session,
 }
 /* ---- End of Base64 Encoding ---- */
 
+LIBSSH2_API void
+libssh2_free(LIBSSH2_SESSION *session, void *ptr)
+{
+    LIBSSH2_FREE(session, ptr);
+}
+
 #ifdef LIBSSH2DEBUG
 LIBSSH2_API int
 libssh2_trace(LIBSSH2_SESSION * session, int bitmask)
-- 
1.7.1

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 13 15:25:26 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9DDPOn5021890;
	Wed, 13 Oct 2010 15:25:25 +0200
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9DDPMBv021887
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 13 Oct 2010 15:25:22 +0200
Received: from mocca (c80-216-27-64.bredband.comhem.se [80.216.27.64])
	(authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5+lenny1) with ESMTP id
	o9DDPANU001694
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 13 Oct 2010 15:25:12 +0200
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: [PATCH] Support for exit-signal messages
References: <4CA5EBD4.4000206@gmail.com> <877hi2c7fx.fsf@mocca.josefsson.org>
	<4CA5FF4A.9040200@gmail.com> <87r5g9994x.fsf@mocca.josefsson.org>
	<8762xkhqiq.fsf@gmail.com> <87r5g7vyxf.fsf@mocca.josefsson.org>
	<4CA9E54E.1060001@gmail.com> <871v85j6tt.fsf@mocca.josefsson.org>
	<alpine.DEB.2.00.1010051248570.25613@tvnag.unkk.fr>
	<87fwwkv8fg.fsf@mocca.josefsson.org>
	<alpine.DEB.2.00.1010051948350.25613@tvnag.unkk.fr>
	<87sk0kscle.fsf@mocca.josefsson.org>
	<87k4lmrzzf.fsf@mocca.josefsson.org>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:101013:libssh2-devel@cool.haxx.se::dftvbxdr/1XMZUjG:DNJ0
Date: Wed, 13 Oct 2010 15:25:08 +0200
In-Reply-To: <87k4lmrzzf.fsf@mocca.josefsson.org> (Simon Josefsson's message
	of "Wed, 13 Oct 2010 15:20:20 +0200")
Message-ID: <87fwwarzrf.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.2 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.8 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.96.3 at yxa-v
X-Virus-Status: Clean
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 13 Oct 2010 15:25:26 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 13 Oct 2010 15:25:22 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Simon Josefsson <simon@josefsson.org> writes:

> I have pushed the patch below.  I now realize there should be a man page
> too, will add it next...

Done.

/Simon

From 70d6bd6c6fa7be8256e22195516f74ccc7614ebc Mon Sep 17 00:00:00 2001
From: Simon Josefsson <simon@josefsson.org>
Date: Wed, 13 Oct 2010 15:24:18 +0200
Subject: [PATCH] Add libssh2_free man page and fix typo.

---
 docs/Makefile.am    |    1 +
 docs/libssh2_free.3 |   19 +++++++++++++++++++
 include/libssh2.h   |    2 +-
 3 files changed, 21 insertions(+), 1 deletions(-)
 create mode 100644 docs/libssh2_free.3

diff --git a/docs/Makefile.am b/docs/Makefile.am
index 9f905d8..4ed40df 100644
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@ -59,6 +59,7 @@ dist_man_MANS = \
 	libssh2_channel_x11_req.3 \
 	libssh2_channel_x11_req_ex.3 \
 	libssh2_exit.3 \
+	libssh2_free.3 \
 	libssh2_free_host_entry.3 \
 	libssh2_host_entry_match.3 \
 	libssh2_hostkey_hash.3 \
diff --git a/docs/libssh2_free.3 b/docs/libssh2_free.3
new file mode 100644
index 0000000..30176d5
--- /dev/null
+++ b/docs/libssh2_free.3
@@ -0,0 +1,19 @@
+.TH libssh2_exit 3 "13 Oct 2010" "libssh2 1.2.8" "libssh2 manual"
+.SH NAME
+libssh2_free - deallocate libssh2 memory
+.SH SYNOPSIS
+#include <libssh2.h>
+
+void
+libssh2_free(LIBSSH2_SESSION *session, void *ptr);
+.SH DESCRIPTION
+Deallocate memory allocated by earlier call to libssh2 functions.  It
+uses the memory allocation callbacks provided by the application, if
+any.  Otherwise, this will just call free().
+
+This function is mostly useful under Windows when libssh2 is linked to
+one run-time library and the application to another.
+.SH AVAILABILITY
+Added in libssh2 1.2.8
+.SH SEE ALSO
+.BR libssh2_session_init_ex(3)
diff --git a/include/libssh2.h b/include/libssh2.h
index 9d1e565..038b61f 100644
--- a/include/libssh2.h
+++ b/include/libssh2.h
@@ -425,7 +425,7 @@ LIBSSH2_API void libssh2_exit(void);
  *
  * Deallocate memory allocated by earlier call to libssh2 functions.
  */
-LIBSSH2_API void libssh2_free(LIBSSH2_SESSION *session, void *ptr)
+LIBSSH2_API void libssh2_free(LIBSSH2_SESSION *session, void *ptr);
 
 /* Session API */
 LIBSSH2_API LIBSSH2_SESSION *
-- 
1.7.1

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 13 15:37:06 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9DDb0Nx029235;
	Wed, 13 Oct 2010 15:37:06 +0200
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9DDawHW029183
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 13 Oct 2010 15:36:58 +0200
Received: from mocca (c80-216-27-64.bredband.comhem.se [80.216.27.64])
	(authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5+lenny1) with ESMTP id
	o9DDapXT002423
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 13 Oct 2010 15:36:53 +0200
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: [PATCH] Support for exit-signal messages
References: <4CA5EBD4.4000206@gmail.com> <877hi2c7fx.fsf@mocca.josefsson.org>
	<4CA5FF4A.9040200@gmail.com> <87r5g9994x.fsf@mocca.josefsson.org>
	<8762xkhqiq.fsf@gmail.com> <87r5g7vyxf.fsf@mocca.josefsson.org>
	<4CA9E54E.1060001@gmail.com> <871v85j6tt.fsf@mocca.josefsson.org>
	<4CAB55DE.1080901@gmail.com> <87bp78v8dd.fsf@mocca.josefsson.org>
	<4CB2FF8D.9040509@gmail.com>
	<alpine.DEB.2.00.1010111619270.22655@tvnag.unkk.fr>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:101013:libssh2-devel@cool.haxx.se::nE7rUEUWCOBST/TA:2ewp
Date: Wed, 13 Oct 2010 15:36:50 +0200
In-Reply-To: <alpine.DEB.2.00.1010111619270.22655@tvnag.unkk.fr> (Daniel
	Stenberg's message of "Mon, 11 Oct 2010 16:20:45 +0200 (CEST)")
Message-ID: <87zkuiqknh.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.2 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.8 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.96.3 at yxa-v
X-Virus-Status: Clean
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 13 Oct 2010 15:37:06 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 13 Oct 2010 15:36:58 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Daniel Stenberg <daniel@haxx.se> writes:

> On Mon, 11 Oct 2010, Tommy Lindgren wrote:
>
>>> All general issues I can think of looks resolved.
>>
>> Cool. How do you typically go about submitting patches? Should I
>> create a Trac issue?
>
> In my opinion, just posting it like this on the mailing list is good
> enough - 
> at least if someone seems to receive it. Otherwise submitting it to
> trac is a good way to make sure it doesn't get lost.
>
> I was under the impression Simon was "receiving" this patch so I've
> not done anything with it.

Sorry for slow response...  I have applied the patch now.

Btw, every time I look at packet.c I get scared, we are just waiting for
some badness to happen there.  No time to work on it though.

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 13 15:48:34 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9DDmR7V007046;
	Wed, 13 Oct 2010 15:48:33 +0200
Received: from earth.stuge.se (earth.stuge.se [213.88.146.15])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9DDmPfg007037
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 13 Oct 2010 15:48:25 +0200
Received: (qmail 16867 invoked from network); 13 Oct 2010 13:48:23 -0000
Received: from unknown (HELO earth.stuge.se) (127.0.0.1)
	by localhost with SMTP; 13 Oct 2010 13:48:23 -0000
MIME-Version: 1.0
From: "libssh2 Trac" <trac@libssh2.stuge.se>
X-Trac-Version: 0.12b1
Precedence: bulk
Cc: libssh2-devel@cool.haxx.se
Auto-Submitted: auto-generated
X-Mailer: Trac 0.12b1, by Edgewall Software
X-Trac-Project: libssh2
Date: Wed, 13 Oct 2010 13:48:23 -0000
X-URL: http://trac.libssh2.org/
Subject: [libssh2] #191: src/packet.c:_libssh2_packet_add problems
X-Trac-Ticket-URL: http://trac.libssh2.org/ticket/191
Message-ID: <049.68af1c01c6a3761f21f1486757cc186b@libssh2.stuge.se>
X-Trac-Ticket-ID: 191
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 13 Oct 2010 15:48:34 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 13 Oct 2010 15:48:25 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Reply-To: trac@libssh2.stuge.se,
        libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

#191: src/packet.c:_libssh2_packet_add problems
---------------------------+------------------------------------------------
 Reporter:  josefsson.org  |       Owner:       
     Type:  defect         |      Status:  new  
 Priority:  normal         |   Milestone:       
Component:  misc           |     Version:  1.2.7
 Keywords:                 |      Blocks:       
Blocked By:                 |  
---------------------------+------------------------------------------------
 This function does two things in a bad way:

 1) It may potentially read from DATA beyond the DATALEN limit.  For
 example:

             reason = _libssh2_ntohu32(data + 1);
             message_len = _libssh2_ntohu32(data + 5);
             /* 9 = packet_type(1) + reason(4) + message_len(4) */
             message = (char *) data + 9;

 2) It does no checking that the data provided is within proper range.  For
 example:

             language_len = _libssh2_ntohu32(data + 9 + message_len);
 ...
             message[message_len] = '\0';
             language = (char *) data + 9 + message_len + 3;
             if (language_len) {
                 memmove(language, language + 1, language_len);
             }
             language[language_len] = '\0';

 Since the idiom is used throughout the function, it is rather time
 consuming to fix.  I have no time to work on it. :-(

-- 
Ticket URL: <http://trac.libssh2.org/ticket/191>
libssh2 <http://trac.libssh2.org/>
C library for writing portable SSH2 clients
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 13 15:56:36 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9DDuW0e010153;
	Wed, 13 Oct 2010 15:56:36 +0200
Received: from earth.stuge.se (earth.stuge.se [213.88.146.15])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9DDuVCg010150
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 13 Oct 2010 15:56:32 +0200
Received: (qmail 17102 invoked from network); 13 Oct 2010 13:49:49 -0000
Received: from unknown (HELO earth.stuge.se) (127.0.0.1)
	by localhost with SMTP; 13 Oct 2010 13:49:49 -0000
MIME-Version: 1.0
From: "libssh2 Trac" <trac@libssh2.stuge.se>
X-Trac-Version: 0.12b1
Precedence: bulk
Cc: libssh2-devel@cool.haxx.se
Auto-Submitted: auto-generated
X-Mailer: Trac 0.12b1, by Edgewall Software
X-Trac-Project: libssh2
Date: Wed, 13 Oct 2010 13:49:48 -0000
X-URL: http://trac.libssh2.org/
Subject: Re: [libssh2] #190: Support for exit-signal messages
X-Trac-Ticket-URL: http://trac.libssh2.org/ticket/190#comment:1
Message-ID: <056.4d330878de1cd1b96deb7bebe1391a7c@libssh2.stuge.se>
References: <041.b7e2758498458b9d0e22f91233a8a038@libssh2.stuge.se>
X-Trac-Ticket-ID: 190
In-Reply-To: <041.b7e2758498458b9d0e22f91233a8a038@libssh2.stuge.se>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 13 Oct 2010 15:56:36 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 13 Oct 2010 15:56:32 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Reply-To: trac@libssh2.stuge.se,
        libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

#190: Support for exit-signal messages
--------------------------+-------------------------------------------------
  Reporter:  tomyl        |       Owner:        
      Type:  enhancement  |      Status:  closed
  Priority:  normal       |   Milestone:        
 Component:  API          |     Version:        
Resolution:  fixed        |    Keywords:        
    Blocks:               |   Blocked By:        
--------------------------+-------------------------------------------------
Changes (by josefsson.org):

  * status:  new => closed
  * resolution:  => fixed


Comment:

 Sorry for dropping the ball here.  I have applied the patch now.

 The patch is vulnerable to the problem discussed in #191 but since the
 code elsewhere in the function is equally bad, I don't see a reason to
 reject the patch.

 If you have time to update the patch to fix the problem, that would be
 great.

 /Simon

-- 
Ticket URL: <http://trac.libssh2.org/ticket/190#comment:1>
libssh2 <http://trac.libssh2.org/>
C library for writing portable SSH2 clients
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Oct 14 14:36:32 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9ECZqrr010796;
	Thu, 14 Oct 2010 14:36:28 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9ECZp4O010781
	for <libssh2-devel@cool.haxx.se>; Thu, 14 Oct 2010 14:35:51 +0200
Date: Thu, 14 Oct 2010 14:35:51 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: AW: AW: libssh2_sftp_init ... I don't get it.
In-Reply-To: <253340.81469.qm@web29719.mail.ird.yahoo.com>
Message-ID: <alpine.DEB.2.00.1010141435100.14153@tvnag.unkk.fr>
References: <462466.37328.qm@web29707.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010111937390.22655@tvnag.unkk.fr>
	<570457.90454.qm@web29709.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010122245290.452@tvnag.unkk.fr>
	<253340.81469.qm@web29719.mail.ird.yahoo.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Thu, 14 Oct 2010 14:36:31 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Thu, 14 Oct 2010 14:35:51 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Wed, 13 Oct 2010, may nothing wrote:

>>   libssh2_trace(session, ~0);

> Ok, I'd tried that, but still I don't get any debug lines. As far as I got 
> this from the documentation, the libssh2_trace doesn't retrun anything but 
> writes all its output to stderr ...

Yes, that's what it does. That's the trace that shows everything that 
happened, and that helps understanding what went wrong...

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Oct 14 15:09:07 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9ED8xTF030569;
	Thu, 14 Oct 2010 15:09:06 +0200
Received: from nm2.bullet.mail.ukl.yahoo.com (nm2.bullet.mail.ukl.yahoo.com
	[217.146.183.219])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with SMTP id o9ED8wJL030504
	for <libssh2-devel@cool.haxx.se>; Thu, 14 Oct 2010 15:08:59 +0200
Received: from [217.146.183.181] by nm2.bullet.mail.ukl.yahoo.com with NNFMP;
	14 Oct 2010 13:08:51 -0000
Received: from [217.146.183.174] by tm12.bullet.mail.ukl.yahoo.com with NNFMP;
	14 Oct 2010 13:08:51 -0000
Received: from [127.0.0.1] by omp1015.mail.ukl.yahoo.com with NNFMP;
	14 Oct 2010 13:08:50 -0000
X-Yahoo-Newman-Property: ymail-3
X-Yahoo-Newman-Id: 520901.13279.bm@omp1015.mail.ukl.yahoo.com
Received: (qmail 29268 invoked by uid 60001); 14 Oct 2010 13:08:50 -0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024;
	t=1287061730; bh=orjU8Ox291Ni1rMJbtZkOepFfxm+nRsFZCo7HS6jsAo=;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=I9Vvzaru1iBKhEBLkFuZg8cQOXKRfZf+5RWnbsPXPtzQd2adD40jGeo9uAjm466mui9Q0VXhhAipThDxBzn9dl8Nx8ixYxd2J8Za2x5X3pCszR7NchPX/D+FNffQYk/IJku3S7pC1wfdsqgEY8sX4QbY1kEOHFFeqL0t49VxJZA=
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=O4TnCD6K74IfpCEsGqFxqWSsXWJuZT/tYqNRFcR1BIWz9sP0+6v64TkLElYn/2wjwSvquQAkd7Iujj2s7zLDOPYxb4GetyYK77adroUyoAgCi/FEvzbxK2jch/8lLloxDvnokClDMUIayDTv0Nm9RS7ABeCE128wBYyxzOq6jCY=;
Message-ID: <216293.20633.qm@web29719.mail.ird.yahoo.com>
X-YMail-OSG: ne8qjdYVM1nH52kE8_zEbG3SRMqvZNBjm_jfDZEehVenpmE
	8.CQoYNH8hEwccXJfDYMWATQxRLtdQYfpeWO_KO7bPueGL5DD7RoWm2qdwio
	qNu9xkYgegKKYMM6WFghFpioPvixecdPqacetDu77O2a9zlR24BqSYQ_dBzN
	l0u3IgW6UadCpo1MxVbD8xrRzDdrDdEsYaGky6PcPJndqPW4zm4h8bGthJQk
	Q06pP88oDR_Ki28NO88V1HCXN.6tTXkRBKiBXLPgcoHl7hwtuEYEkN8ochdk -
Received: from [192.100.130.229] by web29719.mail.ird.yahoo.com via HTTP;
	Thu, 14 Oct 2010 14:08:50 BST
X-Mailer: YahooMailRC/504.5 YahooMailWebService/0.8.106.282862
References: <462466.37328.qm@web29707.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010111937390.22655@tvnag.unkk.fr>
	<570457.90454.qm@web29709.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010122245290.452@tvnag.unkk.fr>
	<253340.81469.qm@web29719.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010141435100.14153@tvnag.unkk.fr>
Date: Thu, 14 Oct 2010 14:08:50 +0100 (BST)
From: may nothing <may_241913@yahoo.com>
Subject: AW: AW: AW: libssh2_sftp_init ... I don't get it.
To: libssh2 development <libssh2-devel@cool.haxx.se>
In-Reply-To: <alpine.DEB.2.00.1010141435100.14153@tvnag.unkk.fr>
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Thu, 14 Oct 2010 15:09:07 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Thu, 14 Oct 2010 15:08:59 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se



>On Wed, 13 Oct 2010, may nothing wrote:

>>>   libssh2_trace(session, ~0);

>> Ok, I'd tried that, but still I don't get any debug lines. As far as I got this 
>>from the documentation, the libssh2_trace doesn't retrun anything but writes all 
>>its output to stderr ...

>Yes, that's what it does. That's the trace that shows everything that happened, 
>and that helps understanding what went wrong...

OK, I fiddled around "a bit" and the tracing works now ... I don't know what 
caused the  libssh2_trace to jam, but I've changed so much of my code I can't 
say anymore what fixed it.
However, I've a new problem. The authentification seem to fail with Error -18 
but the username/password is 100% correct.
According to the header file Error 18 means LIBSSH2_ERROR_PUBLICKEY_UNRECOGNIZED 
...

cu
may



_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Oct 14 16:04:00 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9EE3kcC031470;
	Thu, 14 Oct 2010 16:03:59 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9EE3ihG031442
	for <libssh2-devel@cool.haxx.se>; Thu, 14 Oct 2010 16:03:44 +0200
Date: Thu, 14 Oct 2010 16:03:44 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: AW: AW: AW: libssh2_sftp_init ... I don't get it.
In-Reply-To: <216293.20633.qm@web29719.mail.ird.yahoo.com>
Message-ID: <alpine.DEB.2.00.1010141603140.14153@tvnag.unkk.fr>
References: <462466.37328.qm@web29707.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010111937390.22655@tvnag.unkk.fr>
	<570457.90454.qm@web29709.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010122245290.452@tvnag.unkk.fr>
	<253340.81469.qm@web29719.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010141435100.14153@tvnag.unkk.fr>
	<216293.20633.qm@web29719.mail.ird.yahoo.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Thu, 14 Oct 2010 16:04:00 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Thu, 14 Oct 2010 16:03:45 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Thu, 14 Oct 2010, may nothing wrote:

> However, I've a new problem. The authentification seem to fail with Error 
> -18 but the username/password is 100% correct. According to the header file 
> Error 18 means LIBSSH2_ERROR_PUBLICKEY_UNRECOGNIZED ...

Can you please show us a small application that repeats this problem?

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Oct 15 10:30:58 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9F8UGtx016897;
	Fri, 15 Oct 2010 10:30:53 +0200
Received: from nm20.bullet.mail.ukl.yahoo.com (nm20.bullet.mail.ukl.yahoo.com
	[217.146.183.194])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with SMTP id o9F8UDWl016847
	for <libssh2-devel@cool.haxx.se>; Fri, 15 Oct 2010 10:30:13 +0200
Received: from [217.146.183.181] by nm20.bullet.mail.ukl.yahoo.com with NNFMP;
	15 Oct 2010 08:30:07 -0000
Received: from [217.146.183.176] by tm12.bullet.mail.ukl.yahoo.com with NNFMP;
	15 Oct 2010 08:30:07 -0000
Received: from [127.0.0.1] by omp1017.mail.ukl.yahoo.com with NNFMP;
	15 Oct 2010 08:30:06 -0000
X-Yahoo-Newman-Property: ymail-3
X-Yahoo-Newman-Id: 224119.82241.bm@omp1017.mail.ukl.yahoo.com
Received: (qmail 3009 invoked by uid 60001); 15 Oct 2010 08:30:06 -0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024;
	t=1287131405; bh=IoPzwgr53M040wYojNPNi5Rju14qxhpZIelCkul+kOU=;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=yLYlViIlEiuIc0Wh3rMjhl+raTsu3U1Jl/8kB9SrbgXOXxjRDh9bX5I/iP6i06NCG36Ise1Jr9qEZi4Mj+oa+TtmE4klAhb9Odz4W4qmk/ND6lTYRVfH9r4dSAtRJK3VMcXEn0RhN6fJ3rx0HX7y0RauZtLBvN4mCTo0C88oes4=
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=HmLn0Z2bng3gror+NdnB4fUsABrRyMsQCIjPGCLHYg/6Mp96UZ4sH87gKtZOOhE/h1p6t8zpesMsZlhnzMy8B/m+8PwFQW2ONdTcG5TU1lG5uRGVZyFsqJjBxlHvmmxwuyrL8KwibHekEHfvdNxO6tvjJoxjCHk4QjoETGdAz1E=;
Message-ID: <997273.2424.qm@web29717.mail.ird.yahoo.com>
X-YMail-OSG: HJE67swVM1nxHjUSsqoE6JxUk9VoKhiL78Jp5RGttKJjPsN
	atDJrlFc8e5j5gYpmsr3osCFq0QJuKzvi3PnP552s0i6ieLA77fhjVqpnV5Z
	adEVCm6LUZlvlxnwoMI7dvUn2srThdEai_AwHiF5JEyiHcYcvNbzgFetkbB_
	6ZeCKmF9xmTGJfySXeoL3amU6K9IxPA7totvHHJQ4GXXQ2oo1GdlwgK4RSfi
	ULTWEVGYoDkZg3tWN4n_HC4A_oogDJ7w0N1PyOHrJEcZKVIS.Z5_qws6DcJU -
Received: from [192.100.130.229] by web29717.mail.ird.yahoo.com via HTTP;
	Fri, 15 Oct 2010 09:30:05 BST
X-Mailer: YahooMailRC/504.5 YahooMailWebService/0.8.107.284920
References: <462466.37328.qm@web29707.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010111937390.22655@tvnag.unkk.fr>
	<570457.90454.qm@web29709.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010122245290.452@tvnag.unkk.fr>
	<253340.81469.qm@web29719.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010141435100.14153@tvnag.unkk.fr>
	<216293.20633.qm@web29719.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010141603140.14153@tvnag.unkk.fr>
Date: Fri, 15 Oct 2010 09:30:05 +0100 (BST)
From: may nothing <may_241913@yahoo.com>
Subject: libssh2_sftp_init ... I don't get it.
To: libssh2 development <libssh2-devel@cool.haxx.se>
In-Reply-To: <alpine.DEB.2.00.1010141603140.14153@tvnag.unkk.fr>
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 15 Oct 2010 10:30:58 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 15 Oct 2010 10:30:13 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se



>On Thu, 14 Oct 2010, may nothing wrote:

>> However, I've a new problem. The authentification seem to fail with Error -18 
>>but the username/password is 100% correct. According to the header file Error 18 
>>means >LIBSSH2_ERROR_PUBLICKEY_UNRECOGNIZED ...

>Can you please show us a small application that repeats this problem?

Ah, sorry guys. I found the problem. My sshd had only public key and keyboard 
interactive authentification enabled. But not "by password".
Honestly I can't realy see the "big" difference between authentification by 
password and "keyboard interactive" besides the interactive part ... but I guess 
that's a different story.

However, my small sftp client works now. I just modified the  example code a 
little bit. 

One last thing: your example creates a char "buffer" of 1kb. But is that 
suitable/adviceable for "real world" applications? Shouldn't it be (much) bigger 
like 512kb ?
Waht's your suggestions ?

Thanks a lot

cu
may



_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Oct 15 15:07:34 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9FD7DwM015970;
	Fri, 15 Oct 2010 15:07:31 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9FD7B81015965
	for <libssh2-devel@cool.haxx.se>; Fri, 15 Oct 2010 15:07:11 +0200
Date: Fri, 15 Oct 2010 15:07:11 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: libssh2_sftp_init ... I don't get it.
In-Reply-To: <997273.2424.qm@web29717.mail.ird.yahoo.com>
Message-ID: <alpine.DEB.2.00.1010151505370.14153@tvnag.unkk.fr>
References: <462466.37328.qm@web29707.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010111937390.22655@tvnag.unkk.fr>
	<570457.90454.qm@web29709.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010122245290.452@tvnag.unkk.fr>
	<253340.81469.qm@web29719.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010141435100.14153@tvnag.unkk.fr>
	<216293.20633.qm@web29719.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010141603140.14153@tvnag.unkk.fr>
	<997273.2424.qm@web29717.mail.ird.yahoo.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 15 Oct 2010 15:07:34 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 15 Oct 2010 15:07:11 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Fri, 15 Oct 2010, may nothing wrote:

> Honestly I can't realy see the "big" difference between authentification by 
> password and "keyboard interactive" besides the interactive part ... but I 
> guess that's a different story.

It is. Peter Stuge has explained that before on this mailing list and I'm sure 
you can find other resources that detail the differences.

> One last thing: your example creates a char "buffer" of 1kb. But is that 
> suitable/adviceable for "real world" applications? Shouldn't it be (much) 
> bigger like 512kb ? Waht's your suggestions ?

Currently, you will not gain anything at all (libssh2-wise at least) by going 
above 32K so I would probably recommend exactly that size.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Sat Oct 16 11:22:06 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9G9LRbb018804;
	Sat, 16 Oct 2010 11:22:01 +0200
Received: from mail-qy0-f182.google.com (mail-qy0-f182.google.com
	[209.85.216.182])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9G9LOJ9018677
	for <libssh2-devel@cool.haxx.se>; Sat, 16 Oct 2010 11:21:25 +0200
Received: by qyk30 with SMTP id 30so2034677qyk.20
	for <libssh2-devel@cool.haxx.se>; Sat, 16 Oct 2010 02:21:16 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:mime-version:received:sender:received:date
	:x-google-sender-auth:message-id:subject:from:to:content-type;
	bh=irMn40ZLAejRH/jNI5Fa60NGVpGdKgxfs7fLPJ5k4JI=;
	b=PRVKE1Q0XPNxD9bB7mKqFRdO4x8PLRbzvrvRqDD3jYO3r7H4FV6j/UTk4pPLVZJSpi
	IS9wIRvr8HE1KJC+DHkQurR7r9fTEAKZxckgkA76Knl7QyXvd331UxmaGT2iNfDXnEc3
	NKUK/pWNaeoVwcEYCmxoGVo2gtYuBZK0n8ccg=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=mime-version:sender:date:x-google-sender-auth:message-id:subject
	:from:to:content-type;
	b=fdgynroOLhQ8aEC9BZYsupWtP+3e/S0KHCf9UeKda770CH5RLQttjBzU7AHfp7evcr
	3JaUuMgxboZNVqpE8oUuXpVg/I37Qvwiy3d9Vvbd9J6NR41JBEdTh3qkygm54haiBeTK
	gVfTnI6CiUUOos8dg6JlJ/mlD3KZyxTuBWiLQ=
MIME-Version: 1.0
Received: by 10.229.191.135 with SMTP id dm7mr1686850qcb.29.1287220876660;
	Sat, 16 Oct 2010 02:21:16 -0700 (PDT)
Received: by 10.229.241.10 with HTTP; Sat, 16 Oct 2010 02:21:16 -0700 (PDT)
Date: Sat, 16 Oct 2010 11:21:16 +0200
X-Google-Sender-Auth: XKHriAQKDCvc5X_RMgMQamA2P_E
Message-ID: <AANLkTim6o9Cp5HofGuis+F5_RY=Ei5K=4VjXaVu1CxGq@mail.gmail.com>
Subject: Crypt a password with SSH keys ?
From: =?ISO-8859-1?Q?Judica=EBl_Bedouet?= <j.bedouet@infonie.fr>
To: libssh2-devel@cool.haxx.se
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Sat, 16 Oct 2010 11:22:05 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Sat, 16 Oct 2010 11:21:25 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============1980994662=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--===============1980994662==
Content-Type: multipart/alternative; boundary=00163628452c19da780492b87734

--00163628452c19da780492b87734
Content-Type: text/plain; charset=ISO-8859-1

Hi,

I would like to use the libssh2 library to automatically exec several
programs on remote machines. One of the arguments of these programs is a
password for a database connection. I intend to use an SSH agent to
automatically connect to the remote machines but I have to encrypt the
password so that users on remote machines can't see it. I can modify the
remote programs to decrypt the password.

Since I have already a private / public key pair with SSH, I wonder if it's
possible to encrypt the password with the SSH public key and, within the
remote programs, to decrypt the encrypted password with the SSH private key.
I have looked the libssh2 documentation and it seems to me that there is no
function to do this. Is there a way to do it with the libssh2 library ?

Otherwise, I can generate a key of my own, use the libssh2 scp functions to
copy it on the remote machines, encrypt the password and exec the commands.
The remote programs use the key to decrypt the password, then connect to the
database. Of course, the key would be in a file only readable by the SSH
user.

Do you think there is a better way to do this ?

Thanks,

J. B.

--00163628452c19da780492b87734
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

Hi,<br><br>I would like to use the libssh2 library to automatically exec se=
veral programs on remote machines. One of the arguments of these programs i=
s a password for a database connection. I intend to use an SSH agent to aut=
omatically connect to the remote machines but I have to encrypt the passwor=
d so that users on remote machines can&#39;t see it. I can modify the remot=
e programs to decrypt the password.<br>
<br>Since I have already a private / public key pair with SSH, I wonder if =
it&#39;s possible to encrypt the password with the SSH public key and, with=
in the remote programs, to decrypt the encrypted password with the SSH priv=
ate key. I have looked the libssh2 documentation and it seems to me that th=
ere is no function to do this. Is there a way to do it with the libssh2 lib=
rary ?<br>
<br>Otherwise, I can generate a key of my own, use the libssh2 scp function=
s to copy it on the remote machines, encrypt the password and exec the comm=
ands. The remote programs use the key to decrypt the password, then connect=
 to the database. Of course, the key would be in a file only readable by th=
e SSH user. <br>
<br>Do you think there is a better way to do this ?<br><br>Thanks,<br><br>J=
. B.<br><br>

--00163628452c19da780492b87734--

--===============1980994662==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============1980994662==--

From libssh2-devel-bounces@cool.haxx.se  Sat Oct 16 16:46:18 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9GEjrQg031482;
	Sat, 16 Oct 2010 16:46:13 +0200
Received: from listserv.isdn4linux.de (listserv.isdn4linux.de [87.106.208.227])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9GEjpU1031478
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Sat, 16 Oct 2010 16:45:52 +0200
Received: from fsun.fe.think (dslb-084-057-136-150.pools.arcor-ip.net
	[84.57.136.150]) (authenticated bits=128)
	by listserv.isdn4linux.de (8.14.4/8.14.3) with ESMTP id o9GEjkeD016802
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK)
	for <libssh2-devel@cool.haxx.se>; Sat, 16 Oct 2010 16:45:48 +0200
X-Virus-Status: Clean
X-Virus-Scanned: clamav-milter 0.95.3 at listserv.isdn4linux.de
Received: from [192.168.2.25] (fritz.fe.think [192.168.2.25])
	by fsun.fe.think (8.14.1/8.14.1) with ESMTP id o9GEjk8L011041
	(version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=OK)
	for <libssh2-devel@cool.haxx.se>; Sat, 16 Oct 2010 16:45:46 +0200
Message-ID: <4CB9BA92.8060308@fritz-elfert.de>
Date: Sat, 16 Oct 2010 16:45:38 +0200
From: Fritz Elfert <fritz@fritz-elfert.de>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;
	rv:1.9.2.9) Gecko/20100915 Thunderbird/3.1.4
MIME-Version: 1.0
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Crypt a password with SSH keys ?
References: <AANLkTim6o9Cp5HofGuis+F5_RY=Ei5K=4VjXaVu1CxGq@mail.gmail.com>
In-Reply-To: <AANLkTim6o9Cp5HofGuis+F5_RY=Ei5K=4VjXaVu1CxGq@mail.gmail.com>
X-Enigmail-Version: 1.1.1
OpenPGP: id=0332A6B0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Sat, 16 Oct 2010 16:46:18 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Sat, 16 Oct 2010 16:45:52 +0200 (CEST)
X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.3
	(listserv.isdn4linux.de [87.106.208.227]);
	Sat, 16 Oct 2010 16:45:48 +0200 (CEST)
X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,UNPARSEABLE_RELAY
	autolearn=ham version=3.3.1-i4l
X-Spam-Checker-Version: SpamAssassin 3.3.1-i4l (2010-03-16) on
	listserv.isdn4linux.de
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 16.10.2010 11:21, Judica=EBl Bedouet wrote:
> Hi,
> =

> I would like to use the libssh2 library to automatically exec several
> programs on remote machines. One of the arguments of these programs is a
> password for a database connection. I intend to use an SSH agent to
> automatically connect to the remote machines but I have to encrypt the
> password so that users on remote machines can't see it. I can modify the
> remote programs to decrypt the password.
> =

> Since I have already a private / public key pair with SSH, I wonder if it=
's
> possible to encrypt the password with the SSH public key and, within the
> remote programs, to decrypt the encrypted password with the SSH private k=
ey.
> I have looked the libssh2 documentation and it seems to me that there is =
no
> function to do this. Is there a way to do it with the libssh2 library ?
> =

> Otherwise, I can generate a key of my own, use the libssh2 scp functions =
to
> copy it on the remote machines, encrypt the password and exec the command=
s.
> The remote programs use the key to decrypt the password, then connect to =
the
> database. Of course, the key would be in a file only readable by the SSH
> user.
> =

> Do you think there is a better way to do this ?
> =

Yes. Make the remote program read the password from stdin. Send the
password to it through the already encrypted ssh channel. No need for
fancy things.

- -Fritz
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iD8DBQFMubqSboM4mAMyprARAndNAJ9XfP5sxCD5KZtjz3ipGFDLVUVf3gCgghkZ
dc2wBYSP80Q2XJUj6Upcrvg=3D
=3DqQiJ
-----END PGP SIGNATURE-----
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Sat Oct 16 19:57:45 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9GHvHCO023963;
	Sat, 16 Oct 2010 19:57:38 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9GHvGWc023952
	for <libssh2-devel@cool.haxx.se>; Sat, 16 Oct 2010 19:57:16 +0200
Date: Sat, 16 Oct 2010 19:57:16 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: "negative" filesize with libssh2_sftp_stat_ex!
Message-ID: <alpine.DEB.2.00.1010161945060.29078@tvnag.unkk.fr>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Sat, 16 Oct 2010 19:57:45 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Sat, 16 Oct 2010 19:57:16 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Hi friends,

Over in the curl project Ernest Beinrohr reported a problem with SFTP[1] when 
downloading from certain servers. It turns out libssh2 reports a negative file 
size then in the stat struct returned from libssh2_sftp_stat_ex()! The actual 
file sizes have been > 2GB and < 4GB (while >4GB worked fine!).

libssh2 returns a uint64_t for file size, so it's not really negative, but due 
to non-relevant circumstances, libcurl works with that as a signed 64bit 
variable and _that_ turns negative at these times. It would mean that the 
highest bit is set, which doesn't reflect reality.

I've personally not been able to repeat this problem so I've not yet 
detirmined if libssh2 is wrong or if the error is simply passed on from the 
server.

I'm very interested to hear if anyone else have seen this problem or have any 
ideas on what's going on!

[1] = 
http://sourceforge.net/tracker/?func=detail&aid=3076430&group_id=976&atid=100976

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 18 18:26:25 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9IGQ4ru019898;
	Mon, 18 Oct 2010 18:26:21 +0200
Received: from nm11-vm0.bullet.mail.ukl.yahoo.com
	(nm11-vm0.bullet.mail.ukl.yahoo.com [217.146.183.244])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with SMTP id o9IGQ1Qd019780
	for <libssh2-devel@cool.haxx.se>; Mon, 18 Oct 2010 18:26:02 +0200
Received: from [217.146.183.182] by nm11.bullet.mail.ukl.yahoo.com with NNFMP;
	18 Oct 2010 16:25:49 -0000
Received: from [217.146.183.166] by tm13.bullet.mail.ukl.yahoo.com with NNFMP;
	18 Oct 2010 16:25:48 -0000
Received: from [127.0.0.1] by omp1007.mail.ukl.yahoo.com with NNFMP;
	18 Oct 2010 16:25:48 -0000
X-Yahoo-Newman-Property: ymail-3
X-Yahoo-Newman-Id: 319515.60734.bm@omp1007.mail.ukl.yahoo.com
Received: (qmail 89640 invoked by uid 60001); 18 Oct 2010 16:25:47 -0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024;
	t=1287419147; bh=NyQSP3rbq7SAzzeOn85hnJoVO8WNzT4K4XT1g99Sd+8=;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:Date:From:Subject:To:MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=l7Q/ThqjHVH09ZMUB1HIRAq6hSefsPiycUmigS0cfU2Q70qK7zzU//idmwRHSBRpgmGc3gdMCGibHguDMhSxwBL1P2G3Bil60FSv9LB08AT8U/yIfm1yWG8P9ap92GgfoYw7LHQov6q+iqb/rFZRlQ8yDYtZvlK4hA0s14/7w10=
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:Date:From:Subject:To:MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=x96rcXmYX5ZLCAu6EinHAvyk8k7/FeCcBiVAeFR2MzJK+3wTzOfP4HanqfQfV0Y1ELn8TbVROQwCB9H4QsEvz4iXpu+2aTTZjVsmEFAxVUhEyEti35i7+B5Pqo6azEIBgyVIyix0mdd1ObZqZutLTnx0gGoBqf5Nv+8cS3dYJpA=;
Message-ID: <646951.89598.qm@web29711.mail.ird.yahoo.com>
X-YMail-OSG: XLKEWT4VM1nabA2zGubuykpJmU0DLMzQpEj1lV4wZ93ag3W
	A2GTSRkvPO.IFS0TC4oyHhyPWXzO_O76UrIPRFRSfXfitYebFs1pGYCOY9VC
	UoPQjjMQaEpuZ3K5cLfs14t5Ouaap9vrE2ML32tBKOOHAPqdPvLUYjhLwH2D
	3C.tCIbfJsnBL_F0J8ulkSXjxI2EQnfge0yp6yzgPPpD3tSnOOcIbuoSMSgL
	u.TxbhHwNgB0khmoU.IaA1vsWhV_2ORksXNsIy.M3VH.l1XKmneotT1VUJKw -
Received: from [91.55.153.163] by web29711.mail.ird.yahoo.com via HTTP;
	Mon, 18 Oct 2010 17:25:47 BST
X-Mailer: YahooMailRC/504.5 YahooMailWebService/0.8.107.284920
Date: Mon, 18 Oct 2010 17:25:47 +0100 (BST)
From: may nothing <may_241913@yahoo.com>
Subject: static linking problem
To: libssh2-devel@cool.haxx.se
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 18 Oct 2010 18:26:25 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 18 Oct 2010 18:26:02 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Hi all,

I'm trying to create a binary statically linked to the libssh2 libraries. 
Unfortunately this task fails ...

root@server: /data/work > gcc -I/usr/local/include -I/usr/include 
-L/usr/local/lib -L/usr/lib -static sftptest.c -o sftptest
/tmp/ccUiruqf.o: In function `main':
sftptest.c:(.text+0xc7): undefined reference to `libssh2_init'
sftptest.c:(.text+0x219): undefined reference to `libssh2_session_init_ex'
sftptest.c:(.text+0x24b): undefined reference to `libssh2_session_set_blocking'
sftptest.c:(.text+0x265): undefined reference to `libssh2_session_startup'
sftptest.c:(.text+0x2b8): undefined reference to `libssh2_hostkey_hash'
sftptest.c:(.text+0x371): undefined reference to `libssh2_userauth_password_ex'
sftptest.c:(.text+0x3fe): undefined reference to `libssh2_sftp_init'
sftptest.c:(.text+0x4a9): undefined reference to `libssh2_sftp_open_ex'
sftptest.c:(.text+0x52e): undefined reference to `libssh2_sftp_read'
sftptest.c:(.text+0x57a): undefined reference to `libssh2_sftp_close_handle'
sftptest.c:(.text+0x5b1): undefined reference to `libssh2_sftp_shutdown'
sftptest.c:(.text+0x5d8): undefined reference to `libssh2_session_disconnect_ex'
sftptest.c:(.text+0x5e7): undefined reference to `libssh2_session_free'
sftptest.c:(.text+0x623): undefined reference to `libssh2_exit'
collect2: ld returned 1 exit status

libssh2.h and libssh2_sftp.h are present in /usr/local/include
Any ideas ?

cu
may



_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 18 18:47:51 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9IGlif2000539;
	Mon, 18 Oct 2010 18:47:49 +0200
Received: from mail-qy0-f182.google.com (mail-qy0-f182.google.com
	[209.85.216.182])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9IGlfAt000489
	for <libssh2-devel@cool.haxx.se>; Mon, 18 Oct 2010 18:47:42 +0200
Received: by qyk30 with SMTP id 30so1161617qyk.20
	for <libssh2-devel@cool.haxx.se>; Mon, 18 Oct 2010 09:47:34 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:mime-version:received:received:in-reply-to
	:references:date:message-id:subject:from:to:content-type;
	bh=kztjJUAMauKXZAlKbcEqvwb4SyVgNGHvDHTySrqTYZI=;
	b=Y41N2Xoood40PPY05fiL20AEk9vZqoO/N2EKFM/eV4erBe63NH/nq/T0bILvuowXkZ
	6umNTpirgFcQhd29c2OkDMVZFomK/M3CRhHiPfBZAw/8gNvO6s1o3dAyi5T5iN48XTAP
	VgxpwRHw49Vth5pbhS6m6+4DfO4WtHlVyF2y0=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=mime-version:in-reply-to:references:date:message-id:subject:from:to
	:content-type;
	b=JZvil3027IpCPDXW+2v46xLVeubb5L4Q+RGYWl0/bvDOxcRlTcV8Rj79sI9Ty2wj7f
	ZTVS8C+o+i0ko4ktn4tnyQH7qQSADhLY+kBIx9XEWUqmnTV3TKJKYQsrn0rRN7iqo2hk
	fIlnvUi4cI1mcGg3NTsyEfIojoMI4HRnAa1rE=
MIME-Version: 1.0
Received: by 10.224.186.10 with SMTP id cq10mr2735638qab.332.1287420454220;
	Mon, 18 Oct 2010 09:47:34 -0700 (PDT)
Received: by 10.229.9.210 with HTTP; Mon, 18 Oct 2010 09:47:34 -0700 (PDT)
In-Reply-To: <646951.89598.qm@web29711.mail.ird.yahoo.com>
References: <646951.89598.qm@web29711.mail.ird.yahoo.com>
Date: Mon, 18 Oct 2010 20:47:34 +0400
Message-ID: <AANLkTi=A=qKHErA97jhf1izrp5UAh+JidAM15fq3O8k-@mail.gmail.com>
Subject: Re: static linking problem
From: Ivan Pechorin <ivan.pechorin@gmail.com>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 18 Oct 2010 18:47:51 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 18 Oct 2010 18:47:42 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

2010/10/18 may nothing <may_241913@yahoo.com>:

> I'm trying to create a binary statically linked to the libssh2 libraries.
> Unfortunately this task fails ...
>
> root@server: /data/work > gcc -I/usr/local/include -I/usr/include
> -L/usr/local/lib -L/usr/lib -static sftptest.c -o sftptest

> Any ideas ?

Did you try adding "-lssh2" to linker flags?
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 18 19:08:49 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9IH8dXQ016738;
	Mon, 18 Oct 2010 19:08:48 +0200
Received: from hrndva-omtalb.mail.rr.com (hrndva-omtalb.mail.rr.com
	[71.74.56.123])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9IH8bsR016726
	for <libssh2-devel@cool.haxx.se>; Mon, 18 Oct 2010 19:08:38 +0200
X-Authority-Analysis: v=1.1 cv=vbQZhf6WRU4XF+4tPWNJEMYU0N1CowIjcRZ/qR/IBDs=
	c=1 sm=0 a=FNAO34qeONcA:10 a=kj9zAlcOel0A:10
	a=9At4Jy2cJ7Ox3H4DxHCJAg==:17 a=OW5zc-xMgKZkC_mWszAA:9
	a=i81SAgOui6xTX_fmiXf2kGzkw1kA:4 a=CjuIK1q_8ugA:10
	a=9At4Jy2cJ7Ox3H4DxHCJAg==:117
X-Cloudmark-Score: 0
X-Originating-IP: 70.116.71.237
Received: from [70.116.71.237] ([70.116.71.237:50633] helo=dc7100.roadrunn.com)
	by hrndva-oedge02.mail.rr.com (envelope-from <ngierman@roadrunn.com>)
	(ecelerity 2.2.3.46 r()) with ESMTP
	id 9F/42-23284-D0F7CBC4; Mon, 18 Oct 2010 17:08:29 +0000
Received: by dc7100.roadrunn.com (Postfix, from userid 501)
	id 5F47F8309B8; Mon, 18 Oct 2010 12:06:12 -0500 (CDT)
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on dc7100.roadrunn.com
X-Spam-Level: 
X-Spam-Status: No, score=-4.3 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00
	autolearn=ham version=3.2.5
Received: from ngierman3 (dc7100 [192.168.1.6])
	by dc7100.roadrunn.com (Postfix) with ESMTP id 872BB8309AB
	for <libssh2-devel@cool.haxx.se>; Mon, 18 Oct 2010 12:06:11 -0500 (CDT)
From: "Neil Gierman" <ngierman@roadrunn.com>
To: "'libssh2 development'" <libssh2-devel@cool.haxx.se>
References: <646951.89598.qm@web29711.mail.ird.yahoo.com>
In-Reply-To: <646951.89598.qm@web29711.mail.ird.yahoo.com>
Subject: RE: static linking problem
Date: Mon, 18 Oct 2010 12:09:12 -0500
Message-ID: <001401cb6ee7$2f9adc90$8ed095b0$@com>
MIME-Version: 1.0
X-Mailer: Microsoft Office Outlook 12.0
Thread-Index: Actu4bfEC/GQhq7mQPuceL6FCOsh5AABQmGw
Content-Language: en-us
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 18 Oct 2010 19:08:48 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 18 Oct 2010 19:08:38 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

> I'm trying to create a binary statically linked to the libssh2
> libraries.
> Unfortunately this task fails ...
> 

If you want static linking, try:

gcc -I/usr/local/include /usr/local/lib/libssh2.a sftptest.c -o sftptest

The "-l" and "-L" I only use for dynamic linking.

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 18 19:36:52 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9IHaf1F029743;
	Mon, 18 Oct 2010 19:36:51 +0200
Received: from dottedmag.net (mail.dottedmag.net [78.46.75.124])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9IHad0h029740
	for <libssh2-devel@cool.haxx.se>; Mon, 18 Oct 2010 19:36:40 +0200
Received: from leibnitz.dottedmag.net (unknown [109.230.128.216])
	by dottedmag.net (Postfix) with ESMTPSA id CEF8E34610C
	for <libssh2-devel@cool.haxx.se>; Mon, 18 Oct 2010 21:36:36 +0400 (MSD)
Received: from dottedmag by leibnitz.dottedmag.net with local (Exim 4.72)
	(envelope-from <dottedmag@leibnitz.dottedmag.net>)
	id 1P7tdT-0001b2-Qu
	for libssh2-devel@cool.haxx.se; Mon, 18 Oct 2010 21:36:35 +0400
From: Mikhail Gusarov <dottedmag@dottedmag.net>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: static linking problem
References: <646951.89598.qm@web29711.mail.ird.yahoo.com>
	<001401cb6ee7$2f9adc90$8ed095b0$@com>
Date: Mon, 18 Oct 2010 21:36:35 +0400
In-Reply-To: <001401cb6ee7$2f9adc90$8ed095b0$@com> (Neil Gierman's message of
	"Mon, 18 Oct 2010 12:09:12 -0500")
Message-ID: <87iq0ze730.fsf@leibnitz.dottedmag.net>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.2 (gnu/linux)
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 18 Oct 2010 19:36:52 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 18 Oct 2010 19:36:40 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============1838924877=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--===============1838924877==
Content-Type: multipart/signed; boundary="=-=-=";
	micalg=pgp-sha1; protocol="application/pgp-signature"

--=-=-=
Content-Transfer-Encoding: quoted-printable


Twas brillig at 12:09:12 18.10.2010 UTC-05 when ngierman@roadrunn.com did g=
yre and gimble:

 NG> If you want static linking, try:

 NG> gcc -I/usr/local/include /usr/local/lib/libssh2.a sftptest.c -o sftpte=
st

 NG> The "-l" and "-L" I only use for dynamic linking.

No.

=2D-=20
  http://fossarchy.blogspot.com/

--=-=-=
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iQEcBAEBAgAGBQJMvIWjAAoJECpjKNNpjIPFiZQIAMLPAUkmoG0cQ51OS7d3QO/9
j6pkvckMYVAH3wYed/boUNpiWcjwE/r8eiUt4DYnsJYVWy2lGI3q2R8jJtRyHxW0
cBy/FsIL7gxBkQkYw7tOYfAcsXZrTINg99FbG8XoIuU2zX0sprSpTas45gwZWu+6
9leAK/rp91OjDg1yp6LVcWUf1OkaRSi+aq4kBVV6vcp3x7urNZLuXyGxJ2P8H3JD
7k+nPro5qNGi6q/qIqfDAro0ZM900afYYm3QUL5UUaHtz6siBa0h47a/25wyytL9
ylGve/qf2R9Xn5wFmsj4iYPSS8YsW9BWbOMP3Ls1RLDGljHJ5TFHSUuaAnHeHxk=
=AnIv
-----END PGP SIGNATURE-----
--=-=-=--

--===============1838924877==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============1838924877==--

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 18 20:20:15 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9IIK373026500;
	Mon, 18 Oct 2010 20:20:13 +0200
Received: from nm9.bullet.mail.ukl.yahoo.com (nm9.bullet.mail.ukl.yahoo.com
	[217.146.182.250])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with SMTP id o9IIK1KO026353
	for <libssh2-devel@cool.haxx.se>; Mon, 18 Oct 2010 20:20:01 +0200
Received: from [217.146.183.209] by nm9.bullet.mail.ukl.yahoo.com with NNFMP;
	18 Oct 2010 18:19:53 -0000
Received: from [217.146.183.174] by tm2.bullet.mail.ukl.yahoo.com with NNFMP;
	18 Oct 2010 18:19:52 -0000
Received: from [127.0.0.1] by omp1015.mail.ukl.yahoo.com with NNFMP;
	18 Oct 2010 18:19:52 -0000
X-Yahoo-Newman-Property: ymail-3
X-Yahoo-Newman-Id: 80385.33681.bm@omp1015.mail.ukl.yahoo.com
Received: (qmail 12365 invoked by uid 60001); 18 Oct 2010 18:19:48 -0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024;
	t=1287425988; bh=9D79rrbjKX/V1joBUPfPAQhBXrdUR42OtN9vGqOpfAM=;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=sG9sb/5PsP75VnpY75ytFz7jriCweCmQs2GGOtAzOQcs8KP06H3WGR8MXa9AqfsM59sKejlLmOZDnwSZs8kvk5V56A85FFPvQ6u+j2UfXIhjw+ck0e2xQ0GKLGre2lgItWZbQ8PMQZaNq+JNGrsEDrmPoZPbtr7wwtdfV+vpCY4=
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=wF9kaJgFZqQi/S/mAxLGZrou+vLKEv7g5KohKIoH8W2A5m6lfpGU3LdM6j9r8TtEpTjH46XGBkYbPER3Cq7VzbNRSlMsA6SOrGlyJecrb/H1X8V4EUCNRp3ZY6AVZ4G4Im3Aq8EoLPALe43HGMnl2+3/zuYKKOApFTsebQJWfUY=;
Message-ID: <486592.11766.qm@web29717.mail.ird.yahoo.com>
X-YMail-OSG: j6ngLhIVM1mERrS_b4uP.w.vLDk6oO9ENHQEpuzPBq.vhfa
	nZ_e175uvHRDuem1yE6hj5tmZaZoMB26d25ctZGIVMQy7bc9UsVfLro8bZsl
	yJnAGGUEd19CTNQeKw_Iz1VHY9W.e5pswI588iDesu.s4oeorxnY9V4Z58uN
	hcOLYKUZY0H9MH5pHk2822mQ2JqZ6shatnRXB58NdYiZJI9sta7isZ.1gCqP
	.S5heBtO4YQlxfBpWiOFXEP8zWsQUF0Kj4rcb3lyvxg.aF5exlvxfFirBye4 -
Received: from [62.143.24.194] by web29717.mail.ird.yahoo.com via HTTP;
	Mon, 18 Oct 2010 19:19:48 BST
X-Mailer: YahooMailRC/504.5 YahooMailWebService/0.8.107.284920
References: <646951.89598.qm@web29711.mail.ird.yahoo.com>
	<001401cb6ee7$2f9adc90$8ed095b0$@com>
Date: Mon, 18 Oct 2010 19:19:48 +0100 (BST)
From: may nothing <may_241913@yahoo.com>
Subject: AW: static linking problem
To: libssh2 development <libssh2-devel@cool.haxx.se>
In-Reply-To: <001401cb6ee7$2f9adc90$8ed095b0$@com>
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 18 Oct 2010 20:20:15 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 18 Oct 2010 20:20:01 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

>> I'm trying to create a binary statically linked to the libssh2

>> libraries.
>> Unfortunately this task fails ...
>> 

>If you want static linking, try:

>gcc -I/usr/local/include /usr/local/lib/libssh2.a sftptest.c -o sftptest

>The "-l" and "-L" I only use for dynamic linking.

Tried, but no effect. I also tried adding -lssh2 ...
Given the fact that the linker complains about "libssh2_init" it looks more like 
a ssh.h problem to me. But still, libssh2.h and libssh2_sftp.h are available in 
/usr/local/include

cu
may



_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 18 20:42:43 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9IIgTVU009294;
	Mon, 18 Oct 2010 20:42:40 +0200
Received: from dottedmag.net (mail.dottedmag.net [78.46.75.124])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9IIgQoi009276
	for <libssh2-devel@cool.haxx.se>; Mon, 18 Oct 2010 20:42:27 +0200
Received: from leibnitz.dottedmag.net (unknown [109.230.128.216])
	by dottedmag.net (Postfix) with ESMTPSA id C281134610C
	for <libssh2-devel@cool.haxx.se>; Mon, 18 Oct 2010 22:42:23 +0400 (MSD)
Received: from dottedmag by leibnitz.dottedmag.net with local (Exim 4.72)
	(envelope-from <dottedmag@leibnitz.dottedmag.net>)
	id 1P7uf8-0002j1-VA
	for libssh2-devel@cool.haxx.se; Mon, 18 Oct 2010 22:42:23 +0400
From: Mikhail Gusarov <dottedmag@dottedmag.net>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: AW: static linking problem
References: <646951.89598.qm@web29711.mail.ird.yahoo.com>
	<001401cb6ee7$2f9adc90$8ed095b0$@com>
	<486592.11766.qm@web29717.mail.ird.yahoo.com>
Date: Mon, 18 Oct 2010 22:42:22 +0400
In-Reply-To: <486592.11766.qm@web29717.mail.ird.yahoo.com> (may nothing's
	message of "Mon, 18 Oct 2010 19:19:48 +0100 (BST)")
Message-ID: <87eibne41d.fsf@leibnitz.dottedmag.net>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.2 (gnu/linux)
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 18 Oct 2010 20:42:43 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 18 Oct 2010 20:42:27 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============1141410833=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--===============1141410833==
Content-Type: multipart/signed; boundary="=-=-=";
	micalg=pgp-sha1; protocol="application/pgp-signature"

--=-=-=
Content-Transfer-Encoding: quoted-printable


Twas brillig at 19:19:48 18.10.2010 UTC+01 when may_241913@yahoo.com did
gyre and gimble:

 mn> Given the fact that the linker complains about "libssh2_init" it
 mn> looks more like a ssh.h problem to me.

It is not. Please read something about the difference between compilers
and linkers.

=2D-=20
  http://fossarchy.blogspot.com/

--=-=-=
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iQEcBAEBAgAGBQJMvJUOAAoJECpjKNNpjIPF0WYIAKKI29UuQAmK/glttzfkzOs6
luJiiseU3g+wmk0L/h+0pRdbWYkRcD98pdqmZH+j0xQqv9XO80ajGEXUR7gDlHt1
s62QuQP7/7xjodZhO8ahVK0BRAhzgn/7iBcCwYlk0AymLbI0W5TAT8oK3cv3wMVc
9L0N5o3NS7aZw8FM5E/nF/CuIu3x+82kUCc4nQu1+/ZHMLTUMB+LZWD3pZyc4zyV
XjHHBrrEaLmnZH/PV+9h02bYsEnJe0o6CLMIszS2KaclrxPnahGlX7QE86g+AUiM
B3HlQwAMdFC3NM7G0h259VfAH2j+presjU1f9YvWiYZGy3Xn2gLiVVBW/u+TtHA=
=R2zR
-----END PGP SIGNATURE-----
--=-=-=--

--===============1141410833==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============1141410833==--

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 18 20:45:44 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9IIjgo4010953;
	Mon, 18 Oct 2010 20:45:43 +0200
Received: from ponderosa.fch.wimsey.bc.ca (zz20920564179.cipherkey.net
	[209.205.64.179])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9IIjekO010943
	for <libssh2-devel@cool.haxx.se>; Mon, 18 Oct 2010 20:45:41 +0200
Received: by coneharvesters.com
	via sendmail with stdio id <m1P7uiE-000l6IC@ponderosa.fch.wimsey.bc.ca>
	for libssh2-devel@cool.haxx.se; Mon, 18 Oct 2010 11:45:34 -0700 (PDT)
Date: Mon, 18 Oct 2010 11:45:33 -0700
From: Dan Fandrich <dan@coneharvesters.com>
To: libssh2-devel@cool.haxx.se
Subject: Re: static linking problem
Message-ID: <20101018184531.GA21791@coneharvesters.com>
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <646951.89598.qm@web29711.mail.ird.yahoo.com>
	<001401cb6ee7$2f9adc90$8ed095b0$@com>
	<486592.11766.qm@web29717.mail.ird.yahoo.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <486592.11766.qm@web29717.mail.ird.yahoo.com>
User-Agent: Mutt/1.5.21 (2010-09-15)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 18 Oct 2010 20:45:44 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 18 Oct 2010 20:45:41 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Mon, Oct 18, 2010 at 07:19:48PM +0100, may nothing wrote:
> Tried, but no effect. I also tried adding -lssh2 ...
> Given the fact that the linker complains about "libssh2_init" it looks more like 
> a ssh.h problem to me. But still, libssh2.h and libssh2_sftp.h are available in 
> /usr/local/include

Do you even have a static library available?  Try adding the path to that library
on your link command, e.g. gcc -o foo foo.o /usr/local/lib/libssh2.a
And don't forget to add any libraries given by "pkg-config libssh2 --static".

>>> Dan
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 18 21:57:20 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9IJuxkb020576;
	Mon, 18 Oct 2010 21:57:15 +0200
Received: from nm12.bullet.mail.ukl.yahoo.com (nm12.bullet.mail.ukl.yahoo.com
	[217.146.183.186])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with SMTP id o9IJuvJO020542
	for <libssh2-devel@cool.haxx.se>; Mon, 18 Oct 2010 21:56:57 +0200
Received: from [217.146.183.214] by nm12.bullet.mail.ukl.yahoo.com with NNFMP;
	18 Oct 2010 19:56:49 -0000
Received: from [217.146.183.32] by tm7.bullet.mail.ukl.yahoo.com with NNFMP;
	18 Oct 2010 19:56:48 -0000
Received: from [127.0.0.1] by omp1021.mail.ukl.yahoo.com with NNFMP;
	18 Oct 2010 19:56:47 -0000
X-Yahoo-Newman-Property: ymail-3
X-Yahoo-Newman-Id: 422665.82718.bm@omp1021.mail.ukl.yahoo.com
Received: (qmail 28086 invoked by uid 60001); 18 Oct 2010 19:56:46 -0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024;
	t=1287431806; bh=20wGfOP4YDcvP/RMjBN2KR41DlSBff2sB2y3RzTVwtc=;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=cjS3I1cgOQdYXz6z0deblJSFgeZ1mVvjwqm42bTJZ7eLKepuQRjuaRzXq9339eMBwUGblpKDOcCFjVnaU0qyzqApvgJxOIuV20MCgOVr8imAk5wn+T1BfA4t3KHOxh+ebhIJgU+Z5U9rdcJcjzhSVFXCqGZ1dhjf7sPTlhy4Fj0=
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=HbGEmVcxb52oPEMm7rJ0DPnUeXgkdUgkILEtytxcUPYg/ApGFjaA2/ScvE7YFkyXm5Tf/oOQRqAU/9iHvd2f87g/3+f0awDstnw44Lr7id2PcHpgferqnUmIfHxrVEKTeigpXyPDBz+aTENndLXGURMa02A27Sp1X9D6Na8KsvA=;
Message-ID: <609856.28056.qm@web29720.mail.ird.yahoo.com>
X-YMail-OSG: pzt5mZAVM1mo7fXdtN8XdGFOI2ygEzypcCWdYo2MG0Sga1G
	8TC0l2LNRr9f5yuZWr9R8Kjww4Du41JP1no4DW5QDHHmfMytF85JIpK0Roar
	sHrbvqDqXbXMUB6SIqAEmMS6TLhFPhwr3_nVlWYxfc2r1OlAlKFc2KyZLNNP
	Owdif4FqMz7xj.tQuEANb51_najEkN5Y.ON45EtZKkiklVRyi8VELUGjUhFr
	bJIt9fYU5CffiM_fKvTa3Go.uY7tYLXw2fl_dEZ3wHY5Jg18iUlBpl1NeQbs -
Received: from [62.143.24.194] by web29720.mail.ird.yahoo.com via HTTP;
	Mon, 18 Oct 2010 20:56:46 BST
X-Mailer: YahooMailRC/504.5 YahooMailWebService/0.8.107.284920
References: <646951.89598.qm@web29711.mail.ird.yahoo.com>
	<001401cb6ee7$2f9adc90$8ed095b0$@com>
	<486592.11766.qm@web29717.mail.ird.yahoo.com>
	<20101018184531.GA21791@coneharvesters.com>
Date: Mon, 18 Oct 2010 20:56:46 +0100 (BST)
From: may nothing <may_241913@yahoo.com>
Subject: AW: static linking problem
To: libssh2 development <libssh2-devel@cool.haxx.se>
In-Reply-To: <20101018184531.GA21791@coneharvesters.com>
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 18 Oct 2010 21:57:20 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 18 Oct 2010 21:56:58 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se



>On Mon, Oct 18, 2010 at 07:19:48PM +0100, may nothing wrote:
>> Tried, but no effect. I also tried adding -lssh2 ...
>> Given the fact that the linker complains about "libssh2_init" it looks more 
>>like 
>>
>> a ssh.h problem to me. But still, libssh2.h and libssh2_sftp.h are available in 
>>
>> /usr/local/include

>Do you even have a static library available?  Try adding the path to that 
>library
>on your link command, e.g. gcc -o foo foo.o /usr/local/lib/libssh2.a
>And don't forget to add any libraries given by "pkg-config libssh2 --static".

>>> Dan

Hi Dan,

sorry but that doesn't work. libssh2.a is definitely present in /usr/local/lib.
Surprisingly "pkg-config libssh2 --static" doesn't returns anything ...

However, this is the farest I could get:

root@server: /data/work > gcc -Wall -I/usr/include -I/usr/local/include 
/usr/local/lib/libssh2.a -static -lssh2 sftptest.c -o sftptest
sftptest.c: In function \u2018main\u2019:
sftptest.c:26: warning: unused variable \u2018mem\u2019
/tmp/ccEzyeoH.o: In function `main':
sftptest.c:(.text+0xc7): undefined reference to `libssh2_init'
sftptest.c:(.text+0x219): undefined reference to `libssh2_session_init_ex'
sftptest.c:(.text+0x24b): undefined reference to `libssh2_session_set_blocking'
sftptest.c:(.text+0x265): undefined reference to `libssh2_session_startup'
sftptest.c:(.text+0x2b8): undefined reference to `libssh2_hostkey_hash'
sftptest.c:(.text+0x371): undefined reference to `libssh2_userauth_password_ex'
sftptest.c:(.text+0x3fe): undefined reference to `libssh2_sftp_init'
sftptest.c:(.text+0x4a9): undefined reference to `libssh2_sftp_open_ex'
sftptest.c:(.text+0x52e): undefined reference to `libssh2_sftp_read'
sftptest.c:(.text+0x57a): undefined reference to `libssh2_sftp_close_handle'
sftptest.c:(.text+0x5b1): undefined reference to `libssh2_sftp_shutdown'
sftptest.c:(.text+0x5d8): undefined reference to `libssh2_session_disconnect_ex'
sftptest.c:(.text+0x5e7): undefined reference to `libssh2_session_free'
sftptest.c:(.text+0x623): undefined reference to `libssh2_exit'
collect2: ld returned 1 exit status


cu
May



_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 18 22:07:08 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9IK74rr031945;
	Mon, 18 Oct 2010 22:07:08 +0200
Received: from dottedmag.net (mail.dottedmag.net [78.46.75.124])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9IK71ah031885
	for <libssh2-devel@cool.haxx.se>; Mon, 18 Oct 2010 22:07:02 +0200
Received: from leibnitz.dottedmag.net (unknown [109.230.128.216])
	by dottedmag.net (Postfix) with ESMTPSA id 6613F34610C
	for <libssh2-devel@cool.haxx.se>; Tue, 19 Oct 2010 00:06:58 +0400 (MSD)
Received: from dottedmag by leibnitz.dottedmag.net with local (Exim 4.72)
	(envelope-from <dottedmag@leibnitz.dottedmag.net>)
	id 1P7vyz-0004Mu-MN
	for libssh2-devel@cool.haxx.se; Tue, 19 Oct 2010 00:06:57 +0400
From: Mikhail Gusarov <dottedmag@dottedmag.net>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: AW: static linking problem
References: <646951.89598.qm@web29711.mail.ird.yahoo.com>
	<001401cb6ee7$2f9adc90$8ed095b0$@com>
	<486592.11766.qm@web29717.mail.ird.yahoo.com>
	<20101018184531.GA21791@coneharvesters.com>
	<609856.28056.qm@web29720.mail.ird.yahoo.com>
Date: Tue, 19 Oct 2010 00:06:57 +0400
In-Reply-To: <609856.28056.qm@web29720.mail.ird.yahoo.com> (may nothing's
	message of "Mon, 18 Oct 2010 20:56:46 +0100 (BST)")
Message-ID: <87aambe04e.fsf@leibnitz.dottedmag.net>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.2 (gnu/linux)
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 18 Oct 2010 22:07:08 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 18 Oct 2010 22:07:02 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============1067606370=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--===============1067606370==
Content-Type: multipart/signed; boundary="=-=-=";
	micalg=pgp-sha1; protocol="application/pgp-signature"

--=-=-=
Content-Transfer-Encoding: quoted-printable


Twas brillig at 20:56:46 18.10.2010 UTC+01 when may_241913@yahoo.com did
gyre and gimble:

 mn> sorry but that doesn't work. libssh2.a is definitely present in /usr/l=
ocal/lib.
 mn> Surprisingly "pkg-config libssh2 --static" doesn't returns anything ...

'cause it's pkg-config libssh2 --static --libs

=2D-=20
  http://fossarchy.blogspot.com/

--=-=-=
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iQEcBAEBAgAGBQJMvKjhAAoJECpjKNNpjIPFrToIAKMDj6yTZlRVDWUPa3VVrKWO
wOLFPr1LqPoV+Zd3DYIK3mr8wmk6uk0r7xOCKGCb1pzxYozDj24Hk5KL3zsp/Hha
WYwhe2ZZmRbthHMhd2IgIbJeTKJt4eWSlsZmPonC5mzLWUUuvMxzsJUBd4Rrqn4o
MBvAjDavCDBF8O1ZASq4XT8xKKx/JVtM80qJei3FgX7S+PAQ6SPSrQAukrzN2qKP
i5T5z/5NB1GkuFU6vv3lAOMheTebnkBDR0GYcSQsm6GldbP9/jXB79pnlRm6+DKP
D/7wWyXCQo4waIa32v4V1CbyGP7vORD/zGUeY7P7g1VMN73fQeNADcuP1IpzZ20=
=1T5M
-----END PGP SIGNATURE-----
--=-=-=--

--===============1067606370==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============1067606370==--

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 18 22:10:43 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9IKAej4001691;
	Mon, 18 Oct 2010 22:10:43 +0200
Received: from ponderosa.fch.wimsey.bc.ca (zz20920564179.cipherkey.net
	[209.205.64.179])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9IKAcmU001677
	for <libssh2-devel@cool.haxx.se>; Mon, 18 Oct 2010 22:10:38 +0200
Received: by coneharvesters.com
	via sendmail with stdio id <m1P7w2Q-000l6IC@ponderosa.fch.wimsey.bc.ca>
	for libssh2-devel@cool.haxx.se; Mon, 18 Oct 2010 13:10:30 -0700 (PDT)
Date: Mon, 18 Oct 2010 13:10:30 -0700
From: Dan Fandrich <dan@coneharvesters.com>
To: libssh2-devel@cool.haxx.se
Subject: Re: static linking problem
Message-ID: <20101018201028.GA22129@coneharvesters.com>
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <646951.89598.qm@web29711.mail.ird.yahoo.com>
	<001401cb6ee7$2f9adc90$8ed095b0$@com>
	<486592.11766.qm@web29717.mail.ird.yahoo.com>
	<20101018184531.GA21791@coneharvesters.com>
	<609856.28056.qm@web29720.mail.ird.yahoo.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <609856.28056.qm@web29720.mail.ird.yahoo.com>
User-Agent: Mutt/1.5.21 (2010-09-15)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 18 Oct 2010 22:10:43 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 18 Oct 2010 22:10:39 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Mon, Oct 18, 2010 at 08:56:46PM +0100, may nothing wrote:
> sorry but that doesn't work. libssh2.a is definitely present in /usr/local/lib.
> Surprisingly "pkg-config libssh2 --static" doesn't returns anything ...
> 
> However, this is the farest I could get:
> 
> root@server: /data/work > gcc -Wall -I/usr/include -I/usr/local/include 
> /usr/local/lib/libssh2.a -static -lssh2 sftptest.c -o sftptest

The order of arguments makes a difference. Try this order:

 gcc -Wall -I/usr/include -I/usr/local/include -static sftptest.c -o sftptest /usr/local/lib/libssh2.a 

and since you have already have -static there, this ought to work, too:

 gcc -Wall -I/usr/include -I/usr/local/include -static sftptest.c -o sftptest -lssh2

>>> Dan
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Oct 19 01:09:44 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9IN95RW007628;
	Tue, 19 Oct 2010 01:09:41 +0200
Received: from nm9-vm0.bullet.mail.ukl.yahoo.com
	(nm9-vm0.bullet.mail.ukl.yahoo.com [217.146.183.240])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with SMTP id o9IN93q0007534
	for <libssh2-devel@cool.haxx.se>; Tue, 19 Oct 2010 01:09:03 +0200
Received: from [217.146.183.213] by nm9.bullet.mail.ukl.yahoo.com with NNFMP;
	18 Oct 2010 23:08:54 -0000
Received: from [217.146.183.72] by tm6.bullet.mail.ukl.yahoo.com with NNFMP;
	18 Oct 2010 23:08:53 -0000
Received: from [127.0.0.1] by omp1033.mail.ukl.yahoo.com with NNFMP;
	18 Oct 2010 23:08:52 -0000
X-Yahoo-Newman-Property: ymail-3
X-Yahoo-Newman-Id: 918130.11895.bm@omp1033.mail.ukl.yahoo.com
Received: (qmail 47554 invoked by uid 60001); 18 Oct 2010 23:08:51 -0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024;
	t=1287443331; bh=kZgSm1990Lt9uwYID+tl61ob8NPQMLg0+5YS21hIVp4=;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=R6qh1+MyuTx7RynSX4W/rrSddrkSxL2WU6ORoyqBu8nXMZGb1CElfvzDdOdxi6XmsMlRXZ+X4L9rfxlsvtjDBxjHZ3mYQs6MPln+9Yf9z9aRNa9Q+CszKea8W5JlOIQTKWoIae76m4FpXKMzHmu9xnhp16arNOVWmZbrL9SYbaA=
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=J5ceOEWdzQhRySAWrKFHTznh5xngrJvDxpXlDQwZ+otA4djmdOj/dPtXV3/UVKkL2l0q/KNs/8sg2jFQdpAtBC3TUiAYAKxduhy33Yeiit0fVxa9GHEl/3Xyc/hEDTFK7Lsr7Xz5Nli3nmj9Quv4JrUpCRegfUHrD2SE1V7FaWk=;
Message-ID: <327777.46622.qm@web29707.mail.ird.yahoo.com>
X-YMail-OSG: drXzKrYVM1kSfkiYQeD0aLoYTsJFekX75VFGzuSk7XCjTAh
	mDdHwbyeLUAXrVCVFXw8uM7fm3I7CCnXnUp_uBscuGm8Uxwrv2k3n5YLvVAM
	n3cwcNpxGfk648XWJLR75rt9ccwuExIDLNerTn7RYiHrMK3LbUETcDuhEf0d
	QI2G3eRRwPF3jr6wdEUeAHQTtT06vbUyBZkdHDZZryPlbrhHKO4Evww6mPK6
	QE33CQCMfsenNuN7DkWpOchtAac9blUg3VgAms5wZ72JC6CGr6All3W3hRjQ -
Received: from [62.143.24.194] by web29707.mail.ird.yahoo.com via HTTP;
	Tue, 19 Oct 2010 00:08:51 BST
X-Mailer: YahooMailRC/504.5 YahooMailWebService/0.8.107.284920
References: <646951.89598.qm@web29711.mail.ird.yahoo.com>
	<001401cb6ee7$2f9adc90$8ed095b0$@com>
	<486592.11766.qm@web29717.mail.ird.yahoo.com>
	<20101018184531.GA21791@coneharvesters.com>
	<609856.28056.qm@web29720.mail.ird.yahoo.com>
	<20101018201028.GA22129@coneharvesters.com>
Date: Tue, 19 Oct 2010 00:08:51 +0100 (BST)
From: may nothing <may_241913@yahoo.com>
Subject: AW: static linking problem
To: libssh2 development <libssh2-devel@cool.haxx.se>
In-Reply-To: <20101018201028.GA22129@coneharvesters.com>
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Tue, 19 Oct 2010 01:09:44 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Tue, 19 Oct 2010 01:09:03 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se



>The order of arguments makes a difference. Try this order:

>gcc -Wall -I/usr/include -I/usr/local/include -static sftptest.c -o sftptest 
>/usr/local/lib/libssh2.a 
>

>and since you have already have -static there, this ought to work, too:

>gcc -Wall -I/usr/include -I/usr/local/include -static sftptest.c -o sftptest 
>-lssh2

>>>> Dan

Hi,

sorry but that's even worse. It produces: 

root@server: /data/work > gcc -Wall -I/usr/include -I/usr/local/include -static 
sftptest.c -o sftptest -lssh2
sftptest.c: In function \u2018main\u2019:
sftptest.c:26: warning: unused variable \u2018mem\u2019
/usr/local/lib/libssh2.a(hostkey.o): In function `hostkey_method_ssh_rsa_signv':
/root/libssh2-1.2.8-20101011/src/hostkey.c:173: undefined reference to 
`EVP_get_digestbyname'
/root/libssh2-1.2.8-20101011/src/hostkey.c:173: undefined reference to 
`EVP_DigestInit'
/root/libssh2-1.2.8-20101011/src/hostkey.c:175: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/hostkey.c:177: undefined reference to 
`EVP_DigestFinal'
/usr/local/lib/libssh2.a(hostkey.o): In function `hostkey_method_ssh_rsa_dtor':
/root/libssh2-1.2.8-20101011/src/hostkey.c:199: undefined reference to 
`RSA_free'
/usr/local/lib/libssh2.a(hostkey.o): In function `hostkey_method_ssh_dss_signv':
/root/libssh2-1.2.8-20101011/src/hostkey.c:358: undefined reference to 
`EVP_get_digestbyname'
/root/libssh2-1.2.8-20101011/src/hostkey.c:358: undefined reference to 
`EVP_DigestInit'
/root/libssh2-1.2.8-20101011/src/hostkey.c:360: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/hostkey.c:362: undefined reference to 
`EVP_DigestFinal'
/usr/local/lib/libssh2.a(hostkey.o): In function `hostkey_method_ssh_dss_dtor':
/root/libssh2-1.2.8-20101011/src/hostkey.c:383: undefined reference to 
`DSA_free'
/usr/local/lib/libssh2.a(transport.o): In function `_libssh2_transport_write':
/root/libssh2-1.2.8-20101011/src/transport.c:785: undefined reference to 
`RAND_bytes'
/usr/local/lib/libssh2.a(openssl.o): In function `_libssh2_rsa_new':
/root/libssh2-1.2.8-20101011/src/openssl.c:69: undefined reference to `RSA_new'
/root/libssh2-1.2.8-20101011/src/openssl.c:71: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/openssl.c:72: undefined reference to 
`BN_bin2bn'
/root/libssh2-1.2.8-20101011/src/openssl.c:74: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/openssl.c:75: undefined reference to 
`BN_bin2bn'
/root/libssh2-1.2.8-20101011/src/openssl.c:78: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/openssl.c:79: undefined reference to 
`BN_bin2bn'
/root/libssh2-1.2.8-20101011/src/openssl.c:81: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/openssl.c:82: undefined reference to 
`BN_bin2bn'
/root/libssh2-1.2.8-20101011/src/openssl.c:84: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/openssl.c:85: undefined reference to 
`BN_bin2bn'
/root/libssh2-1.2.8-20101011/src/openssl.c:87: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/openssl.c:88: undefined reference to 
`BN_bin2bn'
/root/libssh2-1.2.8-20101011/src/openssl.c:90: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/openssl.c:91: undefined reference to 
`BN_bin2bn'
/root/libssh2-1.2.8-20101011/src/openssl.c:93: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/openssl.c:94: undefined reference to 
`BN_bin2bn'
/usr/local/lib/libssh2.a(openssl.o): In function `_libssh2_rsa_sha1_verify':
/root/libssh2-1.2.8-20101011/src/openssl.c:109: undefined reference to 
`RSA_verify'
/usr/local/lib/libssh2.a(openssl.o): In function `_libssh2_dsa_new':
/root/libssh2-1.2.8-20101011/src/openssl.c:127: undefined reference to `DSA_new'
/root/libssh2-1.2.8-20101011/src/openssl.c:129: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/openssl.c:130: undefined reference to 
`BN_bin2bn'
/root/libssh2-1.2.8-20101011/src/openssl.c:132: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/openssl.c:133: undefined reference to 
`BN_bin2bn'
/root/libssh2-1.2.8-20101011/src/openssl.c:135: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/openssl.c:136: undefined reference to 
`BN_bin2bn'
/root/libssh2-1.2.8-20101011/src/openssl.c:138: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/openssl.c:139: undefined reference to 
`BN_bin2bn'
/root/libssh2-1.2.8-20101011/src/openssl.c:142: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/openssl.c:143: undefined reference to 
`BN_bin2bn'
/usr/local/lib/libssh2.a(openssl.o): In function `_libssh2_dsa_sha1_verify':
/root/libssh2-1.2.8-20101011/src/openssl.c:158: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/openssl.c:159: undefined reference to 
`BN_bin2bn'
/root/libssh2-1.2.8-20101011/src/openssl.c:160: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/openssl.c:161: undefined reference to 
`BN_bin2bn'
/root/libssh2-1.2.8-20101011/src/openssl.c:164: undefined reference to 
`DSA_do_verify'
/root/libssh2-1.2.8-20101011/src/openssl.c:165: undefined reference to 
`BN_clear_free'
/root/libssh2-1.2.8-20101011/src/openssl.c:166: undefined reference to 
`BN_clear_free'
/usr/local/lib/libssh2.a(openssl.o): In function `_libssh2_cipher_init':
/root/libssh2-1.2.8-20101011/src/openssl.c:177: undefined reference to 
`EVP_CIPHER_CTX_init'
/root/libssh2-1.2.8-20101011/src/openssl.c:178: undefined reference to 
`EVP_CipherInit'
/usr/local/lib/libssh2.a(openssl.o): In function `_libssh2_cipher_crypt':
/root/libssh2-1.2.8-20101011/src/openssl.c:197: undefined reference to 
`EVP_Cipher'
/usr/local/lib/libssh2.a(openssl.o): In function `aes_ctr_init':
/root/libssh2-1.2.8-20101011/src/openssl.c:229: undefined reference to 
`EVP_aes_128_ecb'
/root/libssh2-1.2.8-20101011/src/openssl.c:232: undefined reference to 
`EVP_aes_192_ecb'
/root/libssh2-1.2.8-20101011/src/openssl.c:235: undefined reference to 
`EVP_aes_256_ecb'
/root/libssh2-1.2.8-20101011/src/openssl.c:244: undefined reference to 
`EVP_EncryptInit'
/root/libssh2-1.2.8-20101011/src/openssl.c:248: undefined reference to 
`EVP_CIPHER_CTX_set_padding'
/root/libssh2-1.2.8-20101011/src/openssl.c:252: undefined reference to 
`EVP_CIPHER_CTX_set_app_data'
/usr/local/lib/libssh2.a(openssl.o): In function `aes_ctr_do_cipher':
/root/libssh2-1.2.8-20101011/src/openssl.c:262: undefined reference to 
`EVP_CIPHER_CTX_get_app_data'
/root/libssh2-1.2.8-20101011/src/openssl.c:281: undefined reference to 
`EVP_EncryptUpdate'
/usr/local/lib/libssh2.a(openssl.o): In function `aes_ctr_cleanup':
/root/libssh2-1.2.8-20101011/src/openssl.c:301: undefined reference to 
`EVP_CIPHER_CTX_get_app_data'
/usr/local/lib/libssh2.a(openssl.o): In function `read_private_key_from_file':
/root/libssh2-1.2.8-20101011/src/openssl.c:383: undefined reference to 
`BIO_new_file'
/root/libssh2-1.2.8-20101011/src/openssl.c:391: undefined reference to 
`BIO_free'
/usr/local/lib/libssh2.a(openssl.o): In function `_libssh2_rsa_new_private':
/root/libssh2-1.2.8-20101011/src/openssl.c:401: undefined reference to 
`PEM_read_bio_RSAPrivateKey'
/usr/local/lib/libssh2.a(openssl.o): In function `_libssh2_dsa_new_private':
/root/libssh2-1.2.8-20101011/src/openssl.c:417: undefined reference to 
`PEM_read_bio_DSAPrivateKey'
/usr/local/lib/libssh2.a(openssl.o): In function `_libssh2_rsa_sha1_sign':
/root/libssh2-1.2.8-20101011/src/openssl.c:438: undefined reference to 
`RSA_size'
/root/libssh2-1.2.8-20101011/src/openssl.c:445: undefined reference to 
`RSA_sign'
/usr/local/lib/libssh2.a(openssl.o): In function `_libssh2_dsa_sha1_sign':
/root/libssh2-1.2.8-20101011/src/openssl.c:468: undefined reference to 
`DSA_do_sign'
/root/libssh2-1.2.8-20101011/src/openssl.c:473: undefined reference to 
`BN_num_bits'
/root/libssh2-1.2.8-20101011/src/openssl.c:475: undefined reference to 
`DSA_SIG_free'
/root/libssh2-1.2.8-20101011/src/openssl.c:478: undefined reference to 
`BN_num_bits'
/root/libssh2-1.2.8-20101011/src/openssl.c:480: undefined reference to 
`DSA_SIG_free'
/root/libssh2-1.2.8-20101011/src/openssl.c:486: undefined reference to 
`BN_bn2bin'
/root/libssh2-1.2.8-20101011/src/openssl.c:487: undefined reference to 
`BN_bn2bin'
/root/libssh2-1.2.8-20101011/src/openssl.c:489: undefined reference to 
`DSA_SIG_free'
/usr/local/lib/libssh2.a(openssl.o): In function `libssh2_sha1':
/root/libssh2-1.2.8-20101011/src/openssl.c:501: undefined reference to 
`EVP_get_digestbyname'
/root/libssh2-1.2.8-20101011/src/openssl.c:501: undefined reference to 
`EVP_DigestInit'
/root/libssh2-1.2.8-20101011/src/openssl.c:502: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/openssl.c:503: undefined reference to 
`EVP_DigestFinal'
/usr/local/lib/libssh2.a(openssl.o): In function `libssh2_md5':
/root/libssh2-1.2.8-20101011/src/openssl.c:512: undefined reference to 
`EVP_get_digestbyname'
/root/libssh2-1.2.8-20101011/src/openssl.c:512: undefined reference to 
`EVP_DigestInit'
/root/libssh2-1.2.8-20101011/src/openssl.c:513: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/openssl.c:514: undefined reference to 
`EVP_DigestFinal'
/usr/local/lib/libssh2.a(global.o): In function `libssh2_init':
/root/libssh2-1.2.8-20101011/src/global.c:48: undefined reference to 
`OPENSSL_add_all_algorithms_noconf'
/usr/local/lib/libssh2.a(channel.o): In function `channel_x11_req':
/root/libssh2-1.2.8-20101011/src/channel.c:1153: undefined reference to 
`RAND_bytes'
/usr/local/lib/libssh2.a(kex.o): In function `diffie_hellman_sha1':
/root/libssh2-1.2.8-20101011/src/kex.c:95: undefined reference to `BN_CTX_new'
/root/libssh2-1.2.8-20101011/src/kex.c:96: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/kex.c:97: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/kex.c:98: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/kex.c:99: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/kex.c:105: undefined reference to `BN_rand'
/root/libssh2-1.2.8-20101011/src/kex.c:106: undefined reference to `BN_mod_exp'
/root/libssh2-1.2.8-20101011/src/kex.c:112: undefined reference to `BN_num_bits'
/root/libssh2-1.2.8-20101011/src/kex.c:113: undefined reference to `BN_num_bits'
/root/libssh2-1.2.8-20101011/src/kex.c:128: undefined reference to `BN_num_bits'
/root/libssh2-1.2.8-20101011/src/kex.c:129: undefined reference to `BN_bn2bin'
/root/libssh2-1.2.8-20101011/src/kex.c:133: undefined reference to `BN_bn2bin'
/root/libssh2-1.2.8-20101011/src/kex.c:219: undefined reference to 
`EVP_get_digestbyname'
/root/libssh2-1.2.8-20101011/src/kex.c:219: undefined reference to 
`EVP_DigestInit'
/root/libssh2-1.2.8-20101011/src/kex.c:220: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:222: undefined reference to 
`EVP_DigestFinal'
/root/libssh2-1.2.8-20101011/src/kex.c:241: undefined reference to 
`EVP_get_digestbyname'
/root/libssh2-1.2.8-20101011/src/kex.c:241: undefined reference to 
`EVP_DigestInit'
/root/libssh2-1.2.8-20101011/src/kex.c:242: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:244: undefined reference to 
`EVP_DigestFinal'
/root/libssh2-1.2.8-20101011/src/kex.c:272: undefined reference to `BN_bin2bn'
/root/libssh2-1.2.8-20101011/src/kex.c:280: undefined reference to `BN_mod_exp'
/root/libssh2-1.2.8-20101011/src/kex.c:282: undefined reference to `BN_num_bits'
/root/libssh2-1.2.8-20101011/src/kex.c:283: undefined reference to `BN_num_bits'
/root/libssh2-1.2.8-20101011/src/kex.c:296: undefined reference to `BN_num_bits'
/root/libssh2-1.2.8-20101011/src/kex.c:297: undefined reference to `BN_bn2bin'
/root/libssh2-1.2.8-20101011/src/kex.c:300: undefined reference to `BN_bn2bin'
/root/libssh2-1.2.8-20101011/src/kex.c:303: undefined reference to 
`EVP_get_digestbyname'
/root/libssh2-1.2.8-20101011/src/kex.c:303: undefined reference to 
`EVP_DigestInit'
/root/libssh2-1.2.8-20101011/src/kex.c:307: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:309: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:315: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:317: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:324: undefined reference to 
`EVP_DigestUpdate'
/usr/local/lib/libssh2.a(kex.o):/root/libssh2-1.2.8-20101011/src/kex.c:326: more 
undefined references to `EVP_DigestUpdate' follow
/usr/local/lib/libssh2.a(kex.o): In function `diffie_hellman_sha1':
/root/libssh2-1.2.8-20101011/src/kex.c:394: undefined reference to 
`EVP_DigestFinal'
/root/libssh2-1.2.8-20101011/src/kex.c:468: undefined reference to 
`EVP_get_digestbyname'
/root/libssh2-1.2.8-20101011/src/kex.c:468: undefined reference to 
`EVP_DigestInit'
/root/libssh2-1.2.8-20101011/src/kex.c:468: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:468: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:468: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:468: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:468: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:468: undefined reference to 
`EVP_DigestFinal'
/root/libssh2-1.2.8-20101011/src/kex.c:475: undefined reference to 
`EVP_get_digestbyname'
/root/libssh2-1.2.8-20101011/src/kex.c:475: undefined reference to 
`EVP_DigestInit'
/root/libssh2-1.2.8-20101011/src/kex.c:475: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:475: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:475: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:475: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:475: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:475: undefined reference to 
`EVP_DigestFinal'
/root/libssh2-1.2.8-20101011/src/kex.c:515: undefined reference to 
`EVP_get_digestbyname'
/root/libssh2-1.2.8-20101011/src/kex.c:515: undefined reference to 
`EVP_DigestInit'
/root/libssh2-1.2.8-20101011/src/kex.c:515: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:515: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:515: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:515: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:515: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:515: undefined reference to 
`EVP_DigestFinal'
/root/libssh2-1.2.8-20101011/src/kex.c:522: undefined reference to 
`EVP_get_digestbyname'
/root/libssh2-1.2.8-20101011/src/kex.c:522: undefined reference to 
`EVP_DigestInit'
/root/libssh2-1.2.8-20101011/src/kex.c:522: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:522: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:522: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:522: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:522: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:522: undefined reference to 
`EVP_DigestFinal'
/root/libssh2-1.2.8-20101011/src/kex.c:560: undefined reference to 
`EVP_get_digestbyname'
/root/libssh2-1.2.8-20101011/src/kex.c:560: undefined reference to 
`EVP_DigestInit'
/root/libssh2-1.2.8-20101011/src/kex.c:560: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:560: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:560: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:560: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:560: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:560: undefined reference to 
`EVP_DigestFinal'
/root/libssh2-1.2.8-20101011/src/kex.c:586: undefined reference to 
`EVP_get_digestbyname'
/root/libssh2-1.2.8-20101011/src/kex.c:586: undefined reference to 
`EVP_DigestInit'
/root/libssh2-1.2.8-20101011/src/kex.c:586: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:586: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:586: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:586: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:586: undefined reference to 
`EVP_DigestUpdate'
/root/libssh2-1.2.8-20101011/src/kex.c:586: undefined reference to 
`EVP_DigestFinal'
/root/libssh2-1.2.8-20101011/src/kex.c:640: undefined reference to 
`BN_clear_free'
/root/libssh2-1.2.8-20101011/src/kex.c:642: undefined reference to 
`BN_clear_free'
/root/libssh2-1.2.8-20101011/src/kex.c:644: undefined reference to 
`BN_clear_free'
/root/libssh2-1.2.8-20101011/src/kex.c:646: undefined reference to 
`BN_clear_free'
/root/libssh2-1.2.8-20101011/src/kex.c:648: undefined reference to `BN_CTX_free'
/usr/local/lib/libssh2.a(kex.o): In function 
`kex_method_diffie_hellman_group1_sha1_key_exchange':
/root/libssh2-1.2.8-20101011/src/kex.c:704: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/kex.c:705: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/kex.c:708: undefined reference to `BN_set_word'
/root/libssh2-1.2.8-20101011/src/kex.c:709: undefined reference to `BN_bin2bn'
/root/libssh2-1.2.8-20101011/src/kex.c:723: undefined reference to 
`BN_clear_free'
/root/libssh2-1.2.8-20101011/src/kex.c:725: undefined reference to 
`BN_clear_free'
/usr/local/lib/libssh2.a(kex.o): In function 
`kex_method_diffie_hellman_group14_sha1_key_exchange':
/root/libssh2-1.2.8-20101011/src/kex.c:779: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/kex.c:780: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/kex.c:784: undefined reference to `BN_set_word'
/root/libssh2-1.2.8-20101011/src/kex.c:785: undefined reference to `BN_bin2bn'
/root/libssh2-1.2.8-20101011/src/kex.c:800: undefined reference to 
`BN_clear_free'
/root/libssh2-1.2.8-20101011/src/kex.c:802: undefined reference to 
`BN_clear_free'
/usr/local/lib/libssh2.a(kex.o): In function 
`kex_method_diffie_hellman_group_exchange_sha1_key_exchange':
/root/libssh2-1.2.8-20101011/src/kex.c:823: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/kex.c:824: undefined reference to `BN_new'
/root/libssh2-1.2.8-20101011/src/kex.c:878: undefined reference to `BN_bin2bn'
/root/libssh2-1.2.8-20101011/src/kex.c:883: undefined reference to `BN_bin2bn'
/root/libssh2-1.2.8-20101011/src/kex.c:900: undefined reference to 
`BN_clear_free'
/root/libssh2-1.2.8-20101011/src/kex.c:902: undefined reference to 
`BN_clear_free'
/usr/local/lib/libssh2.a(kex.o): In function `kexinit':
/root/libssh2-1.2.8-20101011/src/kex.c:1067: undefined reference to `RAND_bytes'
/usr/local/lib/libssh2.a(mac.o): In function `mac_method_hmac_sha1_hash':
/root/libssh2-1.2.8-20101011/src/mac.c:116: undefined reference to `EVP_sha1'
/root/libssh2-1.2.8-20101011/src/mac.c:116: undefined reference to `HMAC_Init'
/root/libssh2-1.2.8-20101011/src/mac.c:117: undefined reference to `HMAC_Update'
/root/libssh2-1.2.8-20101011/src/mac.c:118: undefined reference to `HMAC_Update'
/root/libssh2-1.2.8-20101011/src/mac.c:120: undefined reference to `HMAC_Update'
/root/libssh2-1.2.8-20101011/src/mac.c:122: undefined reference to `HMAC_Final'
/root/libssh2-1.2.8-20101011/src/mac.c:123: undefined reference to 
`HMAC_CTX_cleanup'
/usr/local/lib/libssh2.a(mac.o): In function `mac_method_hmac_md5_hash':
/root/libssh2-1.2.8-20101011/src/mac.c:188: undefined reference to `EVP_md5'
/root/libssh2-1.2.8-20101011/src/mac.c:188: undefined reference to `HMAC_Init'
/root/libssh2-1.2.8-20101011/src/mac.c:189: undefined reference to `HMAC_Update'
/root/libssh2-1.2.8-20101011/src/mac.c:190: undefined reference to `HMAC_Update'
/root/libssh2-1.2.8-20101011/src/mac.c:192: undefined reference to `HMAC_Update'
/root/libssh2-1.2.8-20101011/src/mac.c:194: undefined reference to `HMAC_Final'
/root/libssh2-1.2.8-20101011/src/mac.c:195: undefined reference to 
`HMAC_CTX_cleanup'
/usr/local/lib/libssh2.a(mac.o): In function `mac_method_hmac_ripemd160_hash':
/root/libssh2-1.2.8-20101011/src/mac.c:260: undefined reference to 
`EVP_ripemd160'
/root/libssh2-1.2.8-20101011/src/mac.c:260: undefined reference to `HMAC_Init'
/root/libssh2-1.2.8-20101011/src/mac.c:261: undefined reference to `HMAC_Update'
/root/libssh2-1.2.8-20101011/src/mac.c:262: undefined reference to `HMAC_Update'
/root/libssh2-1.2.8-20101011/src/mac.c:264: undefined reference to `HMAC_Update'
/root/libssh2-1.2.8-20101011/src/mac.c:266: undefined reference to `HMAC_Final'
/root/libssh2-1.2.8-20101011/src/mac.c:267: undefined reference to 
`HMAC_CTX_cleanup'
/usr/local/lib/libssh2.a(comp.o): In function `comp_method_zlib_init':
/root/libssh2-1.2.8-20101011/src/comp.c:137: undefined reference to 
`deflateInit_'
/root/libssh2-1.2.8-20101011/src/comp.c:140: undefined reference to 
`inflateInit_'
/usr/local/lib/libssh2.a(comp.o): In function `comp_method_zlib_comp':
/root/libssh2-1.2.8-20101011/src/comp.c:206: undefined reference to `deflate'
/root/libssh2-1.2.8-20101011/src/comp.c:208: undefined reference to `inflate'
/root/libssh2-1.2.8-20101011/src/comp.c:274: undefined reference to `deflate'
/root/libssh2-1.2.8-20101011/src/comp.c:276: undefined reference to `inflate'
/usr/local/lib/libssh2.a(comp.o): In function `comp_method_zlib_dtor':
/root/libssh2-1.2.8-20101011/src/comp.c:306: undefined reference to `deflateEnd'
/root/libssh2-1.2.8-20101011/src/comp.c:309: undefined reference to `inflateEnd'
/usr/local/lib/libssh2.a(crypt.o): In function `crypt_dtor':
/root/libssh2-1.2.8-20101011/src/crypt.c:111: undefined reference to 
`EVP_CIPHER_CTX_cleanup'
/usr/local/lib/libssh2.a(crypt.o):(.rodata+0x100): undefined reference to 
`EVP_aes_128_cbc'
/usr/local/lib/libssh2.a(crypt.o):(.rodata+0x140): undefined reference to 
`EVP_aes_192_cbc'
/usr/local/lib/libssh2.a(crypt.o):(.rodata+0x180): undefined reference to 
`EVP_aes_256_cbc'
/usr/local/lib/libssh2.a(crypt.o):(.rodata+0x1c0): undefined reference to 
`EVP_aes_256_cbc'
/usr/local/lib/libssh2.a(crypt.o):(.rodata+0x200): undefined reference to 
`EVP_bf_cbc'
/usr/local/lib/libssh2.a(crypt.o):(.rodata+0x240): undefined reference to 
`EVP_rc4'
/usr/local/lib/libssh2.a(crypt.o):(.rodata+0x280): undefined reference to 
`EVP_rc4'
/usr/local/lib/libssh2.a(crypt.o):(.rodata+0x2c0): undefined reference to 
`EVP_cast5_cbc'
/usr/local/lib/libssh2.a(crypt.o):(.rodata+0x300): undefined reference to 
`EVP_des_ede3_cbc'
collect2: ld returned 1 exit status
root@server: /data/work > 

also adding -lssl has no impact. 
Using gcc 4.4 (32-Bit) on Suse 11.0

Another point is, when I do dynamical linking like: 'gcc -o sftptest sftptest.c 
-lssh2' everything works fine ...
But in this case I need the statical linked version since the target box doesn't 
have the libraries needed to run the binary.

TIA
may


_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Oct 19 01:44:01 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9INhnsX020898;
	Tue, 19 Oct 2010 01:44:00 +0200
Received: from ponderosa.fch.wimsey.bc.ca (zz20920564179.cipherkey.net
	[209.205.64.179])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9INhljl020894
	for <libssh2-devel@cool.haxx.se>; Tue, 19 Oct 2010 01:43:48 +0200
Received: by coneharvesters.com
	via sendmail with stdio id <m1P7zMg-000l6IC@ponderosa.fch.wimsey.bc.ca>
	for libssh2-devel@cool.haxx.se; Mon, 18 Oct 2010 16:43:38 -0700 (PDT)
Date: Mon, 18 Oct 2010 16:43:38 -0700
From: Dan Fandrich <dan@coneharvesters.com>
To: libssh2-devel@cool.haxx.se
Subject: Re: static linking problem
Message-ID: <20101018234337.GA23034@coneharvesters.com>
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <646951.89598.qm@web29711.mail.ird.yahoo.com>
	<001401cb6ee7$2f9adc90$8ed095b0$@com>
	<486592.11766.qm@web29717.mail.ird.yahoo.com>
	<20101018184531.GA21791@coneharvesters.com>
	<609856.28056.qm@web29720.mail.ird.yahoo.com>
	<20101018201028.GA22129@coneharvesters.com>
	<327777.46622.qm@web29707.mail.ird.yahoo.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <327777.46622.qm@web29707.mail.ird.yahoo.com>
User-Agent: Mutt/1.5.21 (2010-09-15)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Tue, 19 Oct 2010 01:44:01 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Tue, 19 Oct 2010 01:43:48 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Tue, Oct 19, 2010 at 12:08:51AM +0100, may nothing wrote:
> >The order of arguments makes a difference. Try this order:
> 
> >gcc -Wall -I/usr/include -I/usr/local/include -static sftptest.c -o sftptest 
> >/usr/local/lib/libssh2.a 
> >
> 
> >and since you have already have -static there, this ought to work, too:
> 
> >gcc -Wall -I/usr/include -I/usr/local/include -static sftptest.c -o sftptest 
> >-lssh2
> 
> >>>> Dan
> 
> Hi,
> 
> sorry but that's even worse. It produces: 

That's actually *better*. It means that it's finally trying to link with
libssh2 statically.

> also adding -lssl has no impact. 
> Using gcc 4.4 (32-Bit) on Suse 11.0

You need to add all the libraries given by "pkg-config libssh2 --static
--libs". If that command doesn't give you anything, then your libssh2
installation is broken.  That command should give you at least -lssl
and -lcrypto if your libssh2 uses OpenSSL.

> Another point is, when I do dynamical linking like: 'gcc -o sftptest sftptest.c 
> -lssh2' everything works fine ...
> But in this case I need the statical linked version since the target box doesn't 
> have the libraries needed to run the binary.

Yes, because the dynamic libraries include all the dependencies themselves.
When you link statically, without libtool, you need to provide them yourself.
pkg-config is the easiest way to get them.

>>> Dan
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Oct 19 08:44:58 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9J6ieMF001238;
	Tue, 19 Oct 2010 08:44:54 +0200
Received: from nm2-vm0.bullet.mail.ukl.yahoo.com
	(nm2-vm0.bullet.mail.ukl.yahoo.com [217.146.183.226])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with SMTP id o9J6iclr001187
	for <libssh2-devel@cool.haxx.se>; Tue, 19 Oct 2010 08:44:38 +0200
Received: from [217.146.183.180] by nm2.bullet.mail.ukl.yahoo.com with NNFMP;
	19 Oct 2010 06:44:31 -0000
Received: from [217.146.183.177] by tm11.bullet.mail.ukl.yahoo.com with NNFMP;
	19 Oct 2010 06:44:30 -0000
Received: from [127.0.0.1] by omp1018.mail.ukl.yahoo.com with NNFMP;
	19 Oct 2010 06:44:29 -0000
X-Yahoo-Newman-Property: ymail-3
X-Yahoo-Newman-Id: 837305.19403.bm@omp1018.mail.ukl.yahoo.com
Received: (qmail 78982 invoked by uid 60001); 19 Oct 2010 06:44:29 -0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024;
	t=1287470669; bh=c4Bwuv8CUu1QEk1TT+pU1Q3iL58RhcnyIbszCc6c03M=;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=yqqemhZvWCjU6+KeILGyztdL03qQylS/y7aDoxZZjJXP/KF7jKfLV+qL74e3IrGCFtccwPXlBqiROWI9WlxXuEpJqRZk1RAU5use3GNCCF7uyXhXfpBD7Vrf0CmukYExP1dtp3r3ZB6RmmsDtl26i0kbAUz6NZyJxLdKlJ/M7i4=
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding;
	b=ZwMVWLHUBfvkZv0CYeJoeueMOWaGcPCLxlRRdWwOHxuf1/l/5y34SnwsvrPeOn+emxwlGw0gGPT+3ANfb2twO5bTZ8jUfCzVz1/4fJ1HUGuaGjbKoltglxtZvBBaT+1OAmwZ95b2aW91gviAsoqyVbmRhCydP9EIu0RlVvinNC8=;
Message-ID: <379988.74323.qm@web29708.mail.ird.yahoo.com>
X-YMail-OSG: i_eBxfkVM1ku8mz..ouB.aLHQHPVFiJNrrHMpL7uGxugxSQ
	oeank7zL_WxsNIyT7zu2ca1xlbkf0VTPoaLeWJ0IVJvx3izTYIaIEebL92RN
	JIvP3fCCfSC6aAptll2NDrPQdjOctZi2DxgDSaiHmpmHE0.7UK._7ui1WN20
	lGiWize9gFVsBj3u0438asDtZhTvGnOIcl4ezcM9NcCJqTZzCvjGWCBiRV0C
	kIm3U7VBM.Wac_NraWmfJRx3wKb1vN7Es5AUUIQdaPvAZSyFBFjggETBKGeM -
Received: from [62.143.24.194] by web29708.mail.ird.yahoo.com via HTTP;
	Tue, 19 Oct 2010 07:44:29 BST
X-Mailer: YahooMailRC/504.5 YahooMailWebService/0.8.107.284920
References: <646951.89598.qm@web29711.mail.ird.yahoo.com>
	<001401cb6ee7$2f9adc90$8ed095b0$@com>
	<486592.11766.qm@web29717.mail.ird.yahoo.com>
	<20101018184531.GA21791@coneharvesters.com>
	<609856.28056.qm@web29720.mail.ird.yahoo.com>
	<20101018201028.GA22129@coneharvesters.com>
	<327777.46622.qm@web29707.mail.ird.yahoo.com>
	<20101018234337.GA23034@coneharvesters.com>
Date: Tue, 19 Oct 2010 07:44:29 +0100 (BST)
From: may nothing <may_241913@yahoo.com>
Subject: AW: static linking problem
To: libssh2 development <libssh2-devel@cool.haxx.se>
In-Reply-To: <20101018234337.GA23034@coneharvesters.com>
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Tue, 19 Oct 2010 08:44:58 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Tue, 19 Oct 2010 08:44:38 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se



>You need to add all the libraries given by "pkg-config libssh2 --static
>--libs". If that command doesn't give you anything, then your libssh2
>installation is broken.  That command should give you at least -lssl
>and -lcrypto if your libssh2 uses OpenSSL.

Ok, my line now looks like: gcc -Wall -I/usr/include -I/usr/local/include 
-static sftptest.c -o sftptest -lssh2 -lssl -lcrypto -ldl -lz -lcrypto

... it just thows me one warning:
/usr/lib/gcc/i586-suse-linux/4.4/../../../libcrypto.a(dso_dlfcn.o): In function 
`dlfcn_load':
/usr/src/packages/BUILD/openssl-0.9.8k/crypto/dso/dso_dlfcn.c:159: warning: 
Using 'dlopen' in statically linked applications requires at runtime the shared 
libraries from the glibc version used for linking

That might cause some problems since my compiling system is on Suse 11.0 and 
target is RHEL 4.5
Is there a way to include this as well ?

cu
may


_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Oct 19 08:59:40 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9J6xZ79006663;
	Tue, 19 Oct 2010 08:59:40 +0200
Received: from ponderosa.fch.wimsey.bc.ca (zz20920564179.cipherkey.net
	[209.205.64.179])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9J6xWWE006659
	for <libssh2-devel@cool.haxx.se>; Tue, 19 Oct 2010 08:59:33 +0200
Received: by coneharvesters.com
	via sendmail with stdio id <m1P86AR-000l6IC@ponderosa.fch.wimsey.bc.ca>
	for libssh2-devel@cool.haxx.se; Mon, 18 Oct 2010 23:59:27 -0700 (PDT)
Date: Mon, 18 Oct 2010 23:59:26 -0700
From: Dan Fandrich <dan@coneharvesters.com>
To: libssh2-devel@cool.haxx.se
Subject: Re: static linking problem
Message-ID: <20101019065924.GC24213@coneharvesters.com>
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <646951.89598.qm@web29711.mail.ird.yahoo.com>
	<001401cb6ee7$2f9adc90$8ed095b0$@com>
	<486592.11766.qm@web29717.mail.ird.yahoo.com>
	<20101018184531.GA21791@coneharvesters.com>
	<609856.28056.qm@web29720.mail.ird.yahoo.com>
	<20101018201028.GA22129@coneharvesters.com>
	<327777.46622.qm@web29707.mail.ird.yahoo.com>
	<20101018234337.GA23034@coneharvesters.com>
	<379988.74323.qm@web29708.mail.ird.yahoo.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <379988.74323.qm@web29708.mail.ird.yahoo.com>
User-Agent: Mutt/1.5.21 (2010-09-15)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Tue, 19 Oct 2010 08:59:40 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Tue, 19 Oct 2010 08:59:34 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Tue, Oct 19, 2010 at 07:44:29AM +0100, may nothing wrote:
> Ok, my line now looks like: gcc -Wall -I/usr/include -I/usr/local/include 
> -static sftptest.c -o sftptest -lssh2 -lssl -lcrypto -ldl -lz -lcrypto
> 
> ... it just thows me one warning:
> /usr/lib/gcc/i586-suse-linux/4.4/../../../libcrypto.a(dso_dlfcn.o): In function 
> `dlfcn_load':
> /usr/src/packages/BUILD/openssl-0.9.8k/crypto/dso/dso_dlfcn.c:159: warning: 
> Using 'dlopen' in statically linked applications requires at runtime the shared 
> libraries from the glibc version used for linking
> 
> That might cause some problems since my compiling system is on Suse 11.0 and 
> target is RHEL 4.5
> Is there a way to include this as well ?

This warning is to remind you that glibc is a lousy library when it comes
to statically linking. You basically can't do it entirely. Even though you
specified -static, glibc still needs some dynamic libraries for certain
functions, and those can't be compile statically.  You either heed the
warning and ship your app with those dynamic libraries (if they're needed),
or you can use another libc that's better suited to static linking,
like uClibc.

>>> Dan
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Oct 19 14:43:21 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9JCh0L2031185;
	Tue, 19 Oct 2010 14:43:18 +0200
Received: from nm8.bullet.mail.ukl.yahoo.com (nm8.bullet.mail.ukl.yahoo.com
	[217.146.182.249])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with SMTP id o9JCgwZP031146
	for <libssh2-devel@cool.haxx.se>; Tue, 19 Oct 2010 14:42:59 +0200
Received: from [217.146.183.180] by nm8.bullet.mail.ukl.yahoo.com with NNFMP;
	19 Oct 2010 12:42:51 -0000
Received: from [217.146.183.73] by tm11.bullet.mail.ukl.yahoo.com with NNFMP;
	19 Oct 2010 12:42:46 -0000
Received: from [127.0.0.1] by omp1034.mail.ukl.yahoo.com with NNFMP;
	19 Oct 2010 12:42:46 -0000
X-Yahoo-Newman-Property: ymail-3
X-Yahoo-Newman-Id: 407459.15568.bm@omp1034.mail.ukl.yahoo.com
Received: (qmail 87491 invoked by uid 60001); 19 Oct 2010 12:42:17 -0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024;
	t=1287492137; bh=NLHMhuolNaug7vYwDEB70vkWqmpCwyqjQvnguXgKZVQ=;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type;
	b=hsdrDZlQkqqL05MS5YvgxFb63oPzVBcsNjKyYna4razQrzn+Y2R3R91l4ah8CePCxPXn3m3U8Q11e2HcwNL4rRZJhWUMuoyLHsNfbZadg3tu+Zc8ArEeu57ORxEqabKjJHh+sdrAnuDeZV9zjRG3SlCQzTOmLOuaLyfUsW5KtSQ=
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type;
	b=H8E8sLPgXnjN04iIdO4gIfBOylK5VwbqS18O0THfOzOPQ3UkcaJ6laDYKmvx7IBQnzo0LGaFtv6EM473QePObf5F/GPdb0BInmy6CT0zfsLlstny1awb0cO0swg3c/bx/oI2RTyduJ7D0RAaiuRoWSuau0MEakdawuOr8gNLQ9M=;
Message-ID: <445857.87466.qm@web29707.mail.ird.yahoo.com>
X-YMail-OSG: 23krTr0VM1kgVs81xpu2rLE8FcC9iLcmgvqNbAhIf_cnCO7
	Gwopc7FMKT5biRsz82z7yyFWf4kxzDFEzjMJ8dfYAHFqZV_rWJAzI8EPUOOc
	vCow7tZrbCRuuRcYHPMnn6uXpIx8oPbc.ERK0jtmKZ0Z2s53UqhrZaTXZOEC
	7BtahMgF0FaFIsb9afK3S5BwKUpSia76Vp1DLAxiXtk3bdeTLgI11Vvemqty
	YcmicCtbGnODUehaXJc_CJssINmYBzzgi2t42XbqiolHnDDynLF3XFn5BOVU -
Received: from [87.189.255.175] by web29707.mail.ird.yahoo.com via HTTP;
	Tue, 19 Oct 2010 13:42:17 BST
X-Mailer: YahooMailRC/504.5 YahooMailWebService/0.8.107.284920
References: <646951.89598.qm@web29711.mail.ird.yahoo.com>
	<001401cb6ee7$2f9adc90$8ed095b0$@com>
	<486592.11766.qm@web29717.mail.ird.yahoo.com>
	<20101018184531.GA21791@coneharvesters.com>
	<609856.28056.qm@web29720.mail.ird.yahoo.com>
	<20101018201028.GA22129@coneharvesters.com>
	<327777.46622.qm@web29707.mail.ird.yahoo.com>
	<20101018234337.GA23034@coneharvesters.com>
	<379988.74323.qm@web29708.mail.ird.yahoo.com>
	<20101019065924.GC24213@coneharvesters.com>
Date: Tue, 19 Oct 2010 13:42:17 +0100 (BST)
From: may nothing <may_241913@yahoo.com>
Subject: Openssh vs ssh2
To: libssh2 development <libssh2-devel@cool.haxx.se>
In-Reply-To: <20101019065924.GC24213@coneharvesters.com>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="0-419548699-1287492137=:87466"
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Tue, 19 Oct 2010 14:43:21 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Tue, 19 Oct 2010 14:42:59 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--0-419548699-1287492137=:87466
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Hi all,=0A=0AI finally finished my little sftp-client taht uses the libssh2=
 library and made =0Asome tests.=0A=0AI downloaded a 260MB testfile from a =
remote machine via openssh's sftp clienet =0Aand my own binary. The linux "=
time" command measured the time spend.=0AFor openssh's sftp client: 3:48 =
=0AFor libssh2 sftp client: 5:56=0A=0A(For curl sftp client: 12:44)=0A=0AQu=
estion: Why is the libssh2 sftp so much slower (or is it an issue of my cod=
e) =0Athat the openssh one ?=0AWhat can be done to increase the transfer sp=
eed ?=0A=0APlease find attached my sourcecode.=0A=0Acu=0Amay=0A=0A
--0-419548699-1287492137=:87466
Content-Type: text/plain; name="sftptest.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="sftptest.c"

I2luY2x1ZGUgPGxpYnNzaDIuaD4NCiNpbmNsdWRlIDxsaWJzc2gyX3NmdHAu
aD4NCiANCg0KI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCiNpbmNsdWRlIDxu
ZXRpbmV0L2luLmg+DQojaW5jbHVkZSA8dW5pc3RkLmg+DQojaW5jbHVkZSA8
YXJwYS9pbmV0Lmg+DQogDQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojaW5j
bHVkZSA8ZmNudGwuaD4NCiNpbmNsdWRlIDxlcnJuby5oPg0KI2luY2x1ZGUg
PHN0ZGlvLmg+DQojaW5jbHVkZSA8Y3R5cGUuaD4NCiANCmludCBtYWluKGlu
dCBhcmdjLCBjaGFyICphcmd2W10pDQp7DQogICAgdW5zaWduZWQgbG9uZyBo
b3N0YWRkcjsNCiAgICBpbnQgc29jaywgaSwgcmM7DQogICAgc3RydWN0IHNv
Y2thZGRyX2luIHNpbjsNCiAgICBjb25zdCBjaGFyICpmaW5nZXJwcmludDsN
CiAgICBMSUJTU0gyX1NFU1NJT04gKnNlc3Npb247DQogICAgRklMRSAqbG9j
YWxfZmlsZV9oYW5kbGU7DQogICAgTElCU1NIMl9TRlRQICpzZnRwX3Nlc3Np
b247DQogICAgTElCU1NIMl9TRlRQX0hBTkRMRSAqc2Z0cF9oYW5kbGU7DQoN
CiAgICBjb25zdCBjaGFyICp1c2VybmFtZT0iYmxhIjsNCiAgICBjb25zdCBj
aGFyICpwYXNzd29yZD0iYmx1YiI7DQogICAgY29uc3QgY2hhciAqbG9jYWxf
ZmlsZT0iY29yZS1uIjsNCiAgICBjb25zdCBjaGFyICpyZW1vdGVfZmlsZT0i
L3RtcC9jb3JlLW4iOw0KDQogDQogICAgCWlmIChhcmdjID4gMSkgDQoJew0K
ICAgICAgICAgICBob3N0YWRkciA9IGluZXRfYWRkcihhcmd2WzFdKTsNCiAg
ICAJfSANCgllbHNlIA0KCXsNCgkgICBob3N0YWRkciA9IGh0b25sKDB4QzBB
ODAwMDEpOyAvLyBob3N0YWRkcmVzcyBhcyBoZXggdmFsdWUgd2l0aG91dCBk
b3Qgc2VwYXJhdGlvbg0KICAgIAl9DQogDQogICAgCWlmKGFyZ2MgPiAyKSAN
Cgl7DQogICAgICAgICAgIHVzZXJuYW1lID0gYXJndlsyXTsNCiAgICAJfQ0K
ICAgIAlpZihhcmdjID4gMykgDQoJew0KICAgICAgICAgICBwYXNzd29yZCA9
IGFyZ3ZbM107DQogICAgCX0NCiAgICAJaWYoYXJnYyA+IDQpIA0KCXsNCiAg
ICAgICAgICAgbG9jYWxfZmlsZSA9IGFyZ3ZbNF07DQogICAgCX0NCiAgICAJ
aWYoYXJnYyA+IDUpIA0KCXsNCiAgICAgICAgICAgcmVtb3RlX2ZpbGUgPSBh
cmd2WzVdOw0KICAgIAl9CQ0KIA0KICAgIHJjID0gbGlic3NoMl9pbml0ICgw
KTsNCg0KICAgIGlmIChyYyAhPSAwKSANCiAgICB7DQogICAgICAgIGZwcmlu
dGYgKHN0ZGVyciwgImxpYnNzaDIgaW5pdGlhbGl6YXRpb24gZmFpbGVkICgl
ZClcbiIsIHJjKTsNCiAgICAgICAgcmV0dXJuIDE7DQogICAgfQ0KIA0KICAg
IGxvY2FsX2ZpbGVfaGFuZGxlID0gZm9wZW4obG9jYWxfZmlsZSwgIndiIik7
DQogICAgaWYgKCFsb2NhbF9maWxlX2hhbmRsZSkgDQogICAgew0KICAgICAg
ICBwcmludGYoIkNhbid0IGNyZWF0ZSBsb2NhbCBmaWxlICVzXG4iLCBsb2Nh
bF9maWxlKTsNCiAgICAgICAgcmV0dXJuIC0xOw0KICAgIH0NCiANCiAgICAv
Kg0KICAgICAqIFRoZSBhcHBsaWNhdGlvbiBjb2RlIGlzIHJlc3BvbnNpYmxl
IGZvciBjcmVhdGluZyB0aGUgc29ja2V0DQogICAgICogYW5kIGVzdGFibGlz
aGluZyB0aGUgY29ubmVjdGlvbg0KICAgICAqLyANCiAgICBzb2NrID0gc29j
a2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsNCiANCiAgICBzaW4uc2lu
X2ZhbWlseSA9IEFGX0lORVQ7DQogICAgc2luLnNpbl9wb3J0ID0gaHRvbnMo
MjIpOw0KICAgIHNpbi5zaW5fYWRkci5zX2FkZHIgPSBob3N0YWRkcjsNCiAg
ICBpZiAoY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyKikoJnNpbiks
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSAhPSAwKSANCgl7DQogICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiZmFpbGVkIHRvIGNvbm5lY3QhXG4i
KTsNCiAgICAgICAgICAgcmV0dXJuIC0xOw0KICAgIAl9DQogDQogICAgc2Vz
c2lvbiA9IGxpYnNzaDJfc2Vzc2lvbl9pbml0KCk7DQoNCiAgICBpZighc2Vz
c2lvbikNCiAgICAgICAgcmV0dXJuIC0xOw0KDQogICAgLy8gbGlic3NoMl90
cmFjZShzZXNzaW9uLCBMSUJTU0gyX1RSQUNFX0VSUk9SIHwgTElCU1NIMl9U
UkFDRV9BVVRIIHwgTElCU1NIMl9UUkFDRV9TRlRQKTsgLy9lbmFibGUgdG8g
dHJhY2UNCg0KICAgIGxpYnNzaDJfc2Vzc2lvbl9zZXRfYmxvY2tpbmcoc2Vz
c2lvbiwgMSk7DQoNCiAgICByYyA9IGxpYnNzaDJfc2Vzc2lvbl9zdGFydHVw
KHNlc3Npb24sIHNvY2spOw0KDQogICAgaWYocmMgIT0gMCkgDQogICAgew0K
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWx1cmUgZXN0YWJsaXNoaW5n
IFNTSCBzZXNzaW9uOiAlZFxuIiwgcmMpOw0KICAgICAgICByZXR1cm4gLTE7
DQogICAgfQ0KIA0KICAgIGZpbmdlcnByaW50ID0gbGlic3NoMl9ob3N0a2V5
X2hhc2goc2Vzc2lvbiwgTElCU1NIMl9IT1NUS0VZX0hBU0hfU0hBMSk7DQoN
CiAgICBwcmludGYoIkZpbmdlcnByaW50OiAiKTsNCiAgICBmb3IoaSA9IDA7
IGkgPCAyMDsgaSsrKSANCiAgICB7DQogICAgICAgIHByaW50ZigiJTAyWCAi
LCAodW5zaWduZWQgY2hhcilmaW5nZXJwcmludFtpXSk7DQogICAgfQ0KICAg
IHByaW50ZigiXG4iKTsNCg0KICAgIHJjID0gbGlic3NoMl91c2VyYXV0aF9w
YXNzd29yZF9leChzZXNzaW9uLCB1c2VybmFtZSwgc3RybGVuKHVzZXJuYW1l
KSwgcGFzc3dvcmQsIHN0cmxlbihwYXNzd29yZCksIE5VTEwpOw0KICAgICAN
CiAgICBpZiAocmMgIT0gMCkgDQogICAgew0KCSAgZnByaW50ZihzdGRlcnIs
ICJBdXRoZW50aWNhdGlvbiBieSBwYXNzd29yZCBmYWlsZWRcbiIpOw0KCSAg
cHJpbnRmKCJFcnJvcjogJWRcbiIsIHJjKTsNCgkgIGdvdG8gc2h1dGRvd247
DQogICAgfQ0KIA0KICAgIGZwcmludGYoc3RkZXJyLCAibGlic3NoMl9zZnRw
X2luaXQoKSFcbiIpOw0KDQogICAgc2Z0cF9zZXNzaW9uID0gbGlic3NoMl9z
ZnRwX2luaXQoc2Vzc2lvbik7DQogDQogICAgaWYgKCFzZnRwX3Nlc3Npb24p
IA0KICAgIHsNCiAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8g
aW5pdCBTRlRQIHNlc3Npb25cbiIpOw0KICAgICAgICBnb3RvIHNodXRkb3du
Ow0KICAgIH0NCiANCiAgICBmcHJpbnRmKHN0ZGVyciwgImxpYnNzaDJfc2Z0
cF9vcGVuKCkhXG4iKTsNCg0KICAgIC8qIFJlcXVlc3QgYSBmaWxlIHZpYSBT
RlRQICovIA0KICAgIHNmdHBfaGFuZGxlID0gbGlic3NoMl9zZnRwX29wZW4o
c2Z0cF9zZXNzaW9uLCByZW1vdGVfZmlsZSAsTElCU1NIMl9GWEZfUkVBRCww
KTsNCiANCiAgICBpZiAoIXNmdHBfaGFuZGxlKSANCiAgICB7DQogICAgICAg
IGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIG9wZW4gZmlsZSB3aXRoIFNG
VFBcbiIpOw0KICAgICAgICBnb3RvIHNodXRkb3duOw0KICAgIH0NCiAgICBm
cHJpbnRmKHN0ZGVyciwgImxpYnNzaDJfc2Z0cF9yZWFkKCkgLi4uIHJlY2Vp
dmVpbmcgZGF0YSFcbiIpOw0KDQogICAgZG8gew0KICAgICAgICBjaGFyIG1l
bVszMjc2OF07DQogDQogICAgICAgIHJjID0gbGlic3NoMl9zZnRwX3JlYWQo
c2Z0cF9oYW5kbGUsIG1lbSwgc2l6ZW9mKG1lbSkpOw0KDQogICAgICAgIGlm
IChyYyA+IDApIA0KCSAgew0KCSAgICBmd3JpdGUobWVtLHJjLDEsbG9jYWxf
ZmlsZV9oYW5kbGUpOw0KICAgICAgICB9IA0KCSAgZWxzZSANCgkgIHsNCiAg
ICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgIH0gd2hpbGUgKDEpOw0K
IA0KICAgIGxpYnNzaDJfc2Z0cF9jbG9zZShzZnRwX2hhbmRsZSk7DQogICAg
ZnByaW50ZihzdGRlcnIsICJsaWJzc2gyX3NmdHBfY2xvc2UoKSFcbiIpOw0K
DQogICAgbGlic3NoMl9zZnRwX3NodXRkb3duKHNmdHBfc2Vzc2lvbik7DQoN
CiANCiAgc2h1dGRvd246DQogDQogICAgbGlic3NoMl9zZXNzaW9uX2Rpc2Nv
bm5lY3Qoc2Vzc2lvbiwgIlNodXRkb3duIik7DQoNCiAgICBsaWJzc2gyX3Nl
c3Npb25fZnJlZShzZXNzaW9uKTsNCg0KDQogICAgY2xvc2Uoc29jayk7DQoN
CiAgICBmcHJpbnRmKHN0ZGVyciwgImRvbmVcbiIpOw0KIA0KICAgIGxpYnNz
aDJfZXhpdCgpOw0KDQogDQogICAgcmV0dXJuIDA7DQp9DQo=

--0-419548699-1287492137=:87466
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--0-419548699-1287492137=:87466--

From libssh2-devel-bounces@cool.haxx.se  Tue Oct 19 14:55:35 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9JCtS5g004256;
	Tue, 19 Oct 2010 14:55:33 +0200
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9JCtRAD004240
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Tue, 19 Oct 2010 14:55:27 +0200
Received: from mocca (c80-216-27-64.bredband.comhem.se [80.216.27.64])
	(authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5+lenny1) with ESMTP id
	o9JCtHqc027983
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Tue, 19 Oct 2010 14:55:20 +0200
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Openssh vs ssh2
References: <646951.89598.qm@web29711.mail.ird.yahoo.com>
	<001401cb6ee7$2f9adc90$8ed095b0$@com>
	<486592.11766.qm@web29717.mail.ird.yahoo.com>
	<20101018184531.GA21791@coneharvesters.com>
	<609856.28056.qm@web29720.mail.ird.yahoo.com>
	<20101018201028.GA22129@coneharvesters.com>
	<327777.46622.qm@web29707.mail.ird.yahoo.com>
	<20101018234337.GA23034@coneharvesters.com>
	<379988.74323.qm@web29708.mail.ird.yahoo.com>
	<20101019065924.GC24213@coneharvesters.com>
	<445857.87466.qm@web29707.mail.ird.yahoo.com>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:101019:libssh2-devel@cool.haxx.se::BSN83GFXeKHzT5Tz:GVO
Date: Tue, 19 Oct 2010 14:55:17 +0200
In-Reply-To: <445857.87466.qm@web29707.mail.ird.yahoo.com> (may nothing's
	message of "Tue, 19 Oct 2010 13:42:17 +0100 (BST)")
Message-ID: <87zkuacpfu.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.2 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.8 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.96.3 at yxa-v
X-Virus-Status: Clean
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Tue, 19 Oct 2010 14:55:35 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Tue, 19 Oct 2010 14:55:27 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

may nothing <may_241913@yahoo.com> writes:

> Hi all,
>
> I finally finished my little sftp-client taht uses the libssh2 library and made 
> some tests.
>
> I downloaded a 260MB testfile from a remote machine via openssh's sftp clienet 
> and my own binary. The linux "time" command measured the time spend.
> For openssh's sftp client: 3:48 
> For libssh2 sftp client: 5:56
>
> (For curl sftp client: 12:44)
>
> Question: Why is the libssh2 sftp so much slower (or is it an issue of my code) 
> that the openssh one ?

Could you run your tool under callgrind and analyze the output to see
what functions your client is spending its time?  If it is something
silly, we should be able to spot it easily.  However, if it is buffer
size related (which I suspect) the answer is probably just because
OpenSSH is better designed.

Running under callgrind is relatively easily, just run your program like
this:

time valgrind --tool=callgrind --quiet ./foo

which will generate a callgrind.out.* file.  Gzip it and post it to the
list, or use kcachegrind on it to see what the top-10 functions are.

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Oct 19 14:59:44 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9JCxeb2005706;
	Tue, 19 Oct 2010 14:59:43 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9JCxd8Y005701
	for <libssh2-devel@cool.haxx.se>; Tue, 19 Oct 2010 14:59:39 +0200
Date: Tue, 19 Oct 2010 14:59:39 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Openssh vs ssh2
In-Reply-To: <445857.87466.qm@web29707.mail.ird.yahoo.com>
Message-ID: <alpine.DEB.2.00.1010191456070.32431@tvnag.unkk.fr>
References: <646951.89598.qm@web29711.mail.ird.yahoo.com>
	<001401cb6ee7$2f9adc90$8ed095b0$@com>
	<486592.11766.qm@web29717.mail.ird.yahoo.com>
	<20101018184531.GA21791@coneharvesters.com>
	<609856.28056.qm@web29720.mail.ird.yahoo.com>
	<20101018201028.GA22129@coneharvesters.com>
	<327777.46622.qm@web29707.mail.ird.yahoo.com>
	<20101018234337.GA23034@coneharvesters.com>
	<379988.74323.qm@web29708.mail.ird.yahoo.com>
	<20101019065924.GC24213@coneharvesters.com>
	<445857.87466.qm@web29707.mail.ird.yahoo.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Tue, 19 Oct 2010 14:59:43 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Tue, 19 Oct 2010 14:59:39 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Tue, 19 Oct 2010, may nothing wrote:

> Question: Why is the libssh2 sftp so much slower (or is it an issue of my 
> code) that the openssh one ?

There are several problems, and I would assume the two primary reasons are:

  1 - the lack of "pipelining", so that it only sends a package at a time and
      then awaits the ACK for it before next packet is sent.

  2 - the multiple malloc+copy + malloc+copy series that libssh2 does, as I've
      mentioned before

> What can be done to increase the transfer speed ?

Fixing these two issues. I've previously posted about what I think needs to be 
done to fix #2. #1 might need a slightly modified API to work really nice, but 
I haven't really finished my thoughts on that yet.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Oct 21 23:09:22 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9LL8vaC031038;
	Thu, 21 Oct 2010 23:09:17 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9LL8ujf031028
	for <libssh2-devel@cool.haxx.se>; Thu, 21 Oct 2010 23:08:56 +0200
Date: Thu, 21 Oct 2010 23:08:56 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: so compression is a bit broken
Message-ID: <alpine.DEB.2.00.1010212242100.31301@tvnag.unkk.fr>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Thu, 21 Oct 2010 23:09:22 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Thu, 21 Oct 2010 23:08:56 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Hi friends,

o I committed my recent ramblings into the TODO document to keep them
   available, not the least for myself to find when I get some inspiration to
   work on libssh2.

o In my local version I've now introduced an API to enable/disable compression
   negotiation.

o I've reworked the buffer/malloc handling in _libssh2_transport_write() and
   the compression of outgoing data. It no longer uses malloc at all and the
   compressed data gets copied one less time. It seems to have boosted SFTP
   upload speed by perhaps 10% but it's not complete yet so all comparisons
   are a bit uncertain still. (and it is only within that single function,
   there's much more to gain by doing similar work in other functions too)

   The speed comparison was SFTP upload ~1000MB to localhost (dual core
   2800MHz Athlon 64):

      Before my patch: 56 seconds (18MB/sec)
      With my patch:   49 seconds (20MB/sec)
      OpenSSH's sftp:  19 seconds (52MB/sec)

o I then found out that uploading with compression failed. I reverted all
   the way back to 1.2.7 status and what do you know? It still fails. I wonder
   if sending compressed SSH packets have not worked for a very long
   time! The good news is of course that I didn't break it now. The bad news is
   of course that it is a pain to debug and fix...

   But since it already was broken, I think I'll postpone the debugging of it
   for now and focus more on the buffer reworks.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Oct 22 01:36:06 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9LNZmVp009211;
	Fri, 22 Oct 2010 01:36:03 +0200
Received: from m1.imap-partners.net (m1.imap-partners.net [64.13.152.131])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9LNZjZj009205
	for <libssh2-devel@cool.haxx.se>; Fri, 22 Oct 2010 01:35:46 +0200
Received: from familiar.netflix.com (lg-nat.corp.netflix.com [208.75.77.65])
	by m1.imap-partners.net (MOS 4.1.8-GA)
	with ESMTP id CHT83408 (AUTH via LOGINBEFORESMTP);
	Thu, 21 Oct 2010 16:35:36 -0700
X-Mirapoint-Received-SPF: 208.75.77.65 familiar.netflix.com <tj@castaglia.org>
	5 none
Date: Thu, 21 Oct 2010 16:35:39 -0700 (PDT)
From: TJ Saunders <tj@castaglia.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: so compression is a bit broken
In-Reply-To: <alpine.DEB.2.00.1010212242100.31301@tvnag.unkk.fr>
Message-ID: <alpine.DEB.2.00.1010211634590.31684@familiar.castaglia.org>
References: <alpine.DEB.2.00.1010212242100.31301@tvnag.unkk.fr>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 22 Oct 2010 01:36:06 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 22 Oct 2010 01:35:47 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se


> o I then found out that uploading with compression failed. I reverted all
>   the way back to 1.2.7 status and what do you know? It still fails. I wonder
>   if sending compressed SSH packets have not worked for a very long
>   time! The good news is of course that I didn't break it now. The bad news is
>   of course that it is a pain to debug and fix...

A related issue is:

  http://trac.libssh2.org/ticket/184

The patch there adds some trace logging of the zlib return value for 
failed zlib calls; perhaps that can help aid in the debugging of why 
compressed uploads are failing?

Cheers,
TJ

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   Who can separate his faith from his actions, or his belief from
   his occupations?

     -Kahlil Gibran

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Oct 22 02:58:29 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9M0voDp013902;
	Fri, 22 Oct 2010 02:58:25 +0200
Received: from imail.ipswitch.com (imail.ipswitch.com [156.21.1.5])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9M0vlVf013882
	for <libssh2-devel@cool.haxx.se>; Fri, 22 Oct 2010 02:57:48 +0200
DKIM-Signature: q=dns/txt; v=1; c=relaxed/relaxed; s=ipswitch;
	d=ipswitch.com; a=rsa-sha1;
	h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type;
	b=HiXCcFsa4DBk/5IVzh9f5B87ZdaiwblMcHFBdOBYMrX5Jp3bXs3WGlJf5WdrzmwBLc
	dKzLjIBqLyplwzEBFzgczxE3TXZifyZzf/AOB3mAh1dvXqMAyP6pJGGrJE5TEjzTmJaq
	UkXHBF4PpWQCQfgCbOrcj5nWMx3CV/POq9eEc=;
	bh=FnSKE6cJIQC2X8i5yPsDp2GQJbA=; t=1287709061;
Received: from mrrnt [66.170.5.130] by ipswitch.com with ESMTP
	(SMTPD-11.02) id b7d2000b6cd6859f; Thu, 21 Oct 2010 20:57:39 -0400
From: "Mark Riordan" <mriordan@ipswitch.com>
To: <libssh2-devel@cool.haxx.se>
Subject: Slow SFTP uploads; failure if compression enabled
Date: Thu, 21 Oct 2010 19:57:35 -0500
Message-ID: <000001cb7184$1de77180$59b65480$@com>
MIME-Version: 1.0
X-Mailer: Microsoft Office Outlook 12.0
Thread-Index: ActxhB1pKUdQ2RUHRhuDEBYW3244sw==
Content-Language: en-us
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 22 Oct 2010 02:58:29 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 22 Oct 2010 02:57:49 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============0577847306=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

This is a multi-part message in MIME format.

--===============0577847306==
Content-Type: multipart/alternative;
	boundary="----=_NextPart_000_0001_01CB715A.35116980"
Content-Language: en-us

This is a multi-part message in MIME format.

------=_NextPart_000_0001_01CB715A.35116980
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: 7bit

[This is a resend; it looks as if my message didn't make it to the list the
first time.]

 

I'm having two types of libssh2 file transfer problems, and I hope someone
can help me.

 

First, upload performance is slow, especially on Windows.

Secondly, uploads don't work at all if I enable compression.

 

I am using libssh2-1.2.7 with the compression patch that can be found at:

http://www.libssh2.org/mail/libssh2-devel-archive-2010-09/0000.shtml

 

I am using libssh2 on two platforms:  Windows 2003 R2, and Ubuntu 10.04.

The target servers are Solaris 10 x86 and Linux (standard sshd server).

 

When I enable compression, uploads fail with error -40 (compression error).

 

Without compression, uploads succeed, but performance is horrible on Windows
(0.4 MB/sec) and mediocre on Linux (2 MB/sec).

 

Download performance is good. 

 

The client and server are running on different VMware hosts, with Xeon L5520
CPUs, lots of memory, little competing workload, and a 1 Gbit/sec Ethernet
between the two.  So, the hardware is not the limiting factor.  At any rate,
other clients on the same VMs get better performance.

 

Here's a table of performance.  In case this doesn't render well in your
email client, I've also uploaded it here:
http://60bits.net/sni/libssh2-perf.htm 

 


Client

Client OS

Server 

Comp
Enable

File 
Compressible

DL Speed

UL Speed


libssh2

Win

Solaris

No

No

12.98 MB/sec

0.42 MB/sec


libssh2

Win

Solaris

Yes

No

6.59 MB/sec

Fails


libssh2

Linux

Solaris

No

No

9.87 MB/sec

1.85 MB/sec


libssh2

Linux

Solaris

Yes

No

6.58 MB/sec

Fails


libssh2

Win

Linux

No

No

6.63 MB/sec

6.70 MB/sec


libssh2

Win

Linux

Yes

No

 

Fails: -5


BitVise Tunnelier

Win

Solaris

No

No

13.50 MB/sec

3.95 MB/sec


BitVise Tunnelier

Win

Solaris

Yes

No

8.541 MB/sec

10.2 MB/sec


Ubuntu sftp

Linux

Solaris

?

No

29.6 MB/sec

11.5 MB/sec


psftp

Win

Solaris

No

No

 

5.06 MB/sec


psftp

Win

Linux

No

No

 

6.58 MB/sec

 

I'm attaching a file containing the source (derived from a libssh2 sample)
and a Windows executable.

 

In case you don't want to look at the attachment, the relevant upload code
is:

 

      hand = open(settings.localfile.c_str(), O_BINARY | O_RDONLY,
_S_IREAD);

      if (-1 == hand) {

         perror("opening local file");

         exit(2);

      }

      int             nwrites = 0;

 

      // 32500 seems to be the buffer size that actually gets used,

      // so to avoid partial buffers, I'm using exactly that size.

      char            mem[32500];

 

      printf("Using output buffer size of %d bytes\n", sizeof(mem));

      do {

         /* loop until we fail */

         int             nbytes = read(hand, mem, sizeof(mem));

 

         if (nbytes > 0) {

            filesize += nbytes;

            int             offset = 0, bytes_to_send = nbytes;

 

            // Loop to ensure that all of the input buffer is sent.

            do {

               rc = libssh2_sftp_write(sftp_handle, mem + offset,
bytes_to_send);

               if (rc < 0) {

                  printf("libssh2_sftp_write failed with code %d\n", rc);

                  break;

               }

               ++nwrites;

               if (0 == (nwrites % 100)) {

                  printf("libssh2_sftp_write %d sent %d bytes\n", nwrites,
rc);

               }

               offset += rc;

               bytes_to_send -= rc;

            } while (bytes_to_send > 0);

         } else {

            break;

         }

      } while (rc >= 0);

   } else {

      puts("action must be get or put.");

      exit(1);

   }

   close(hand);

   libssh2_sftp_close(sftp_handle);

 

Thanks for any ideas you might have!

 

Mark R

 


------=_NextPart_000_0001_01CB715A.35116980
Content-Type: text/html;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" =
xmlns:o=3D"urn:schemas-microsoft-com:office:office" =
xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" =
xmlns=3D"http://www.w3.org/TR/REC-html40">

<head>
<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; =
charset=3Dus-ascii">
<meta name=3DGenerator content=3D"Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
	{font-family:Verdana;
	panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
	{font-family:"Lucida Console";
	panose-1:2 11 6 9 4 5 4 2 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:purple;
	text-decoration:underline;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
	{mso-style-priority:99;
	mso-style-link:"Balloon Text Char";
	margin:0in;
	margin-bottom:.0001pt;
	font-size:8.0pt;
	font-family:"Tahoma","sans-serif";}
span.EmailStyle17
	{mso-style-type:personal-compose;
	font-family:"Verdana","sans-serif";
	color:windowtext;
	font-weight:normal;
	font-style:normal;}
span.BalloonTextChar
	{mso-style-name:"Balloon Text Char";
	mso-style-priority:99;
	mso-style-link:"Balloon Text";
	font-family:"Tahoma","sans-serif";}
.MsoChpDefault
	{mso-style-type:export-only;}
@page WordSection1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
	{page:WordSection1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext=3D"edit">
  <o:idmap v:ext=3D"edit" data=3D"1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=3DEN-US link=3Dblue vlink=3Dpurple>

<div class=3DWordSection1>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>[This
is a resend; it looks as if my message didn't make it to the list the =
first
time.]<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;=
</o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>I'm
having two types of libssh2 file transfer problems, and I hope someone =
can help
me.<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;=
</o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>First,
upload performance is slow, especially on Windows.<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Secondly,
uploads don't work at all if I enable compression.<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;=
</o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>I
am using libssh2-1.2.7 with the compression patch that can be found =
at:<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'><a
href=3D"http://www.libssh2.org/mail/libssh2-devel-archive-2010-09/0000.sh=
tml">http://www.libssh2.org/mail/libssh2-devel-archive-2010-09/0000.shtml=
</a><o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;=
</o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>I
am using libssh2 on two platforms:&nbsp; Windows 2003 R2, and Ubuntu =
10.04.<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>The
target servers are Solaris 10 x86 and Linux (standard sshd =
server).<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;=
</o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>When
I enable compression, uploads fail with error -40 (compression =
error).<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;=
</o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Without
compression, uploads succeed, but performance is horrible on Windows =
(0.4
MB/sec) and mediocre on Linux (2 MB/sec).<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;=
</o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Download
performance is good. <o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;=
</o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>The
client and server are running on different VMware hosts, with Xeon L5520 =
CPUs,
lots of memory, little competing workload, and a 1 Gbit/sec Ethernet =
between
the two. &nbsp;So, the hardware is not the limiting factor.&nbsp; At any =
rate,
other clients on the same VMs get better =
performance.<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;=
</o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Here's
a table of performance.&nbsp; In case this doesn't render well in your =
email
client, I've also uploaded it here: <a
href=3D"http://60bits.net/sni/libssh2-perf.htm">http://60bits.net/sni/lib=
ssh2-perf.htm</a>
<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;=
</o:p></span></p>

<table class=3DMsoNormalTable border=3D1 cellspacing=3D0 =
cellpadding=3D0>
 <tr>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Client<o:p>=
</o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Client
  OS<o:p></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Server
  <o:p></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Comp<br>
  Enable<o:p></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>File
  <br>
  Compressible<o:p></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>DL
  Speed<o:p></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>UL
  Speed<o:p></o:p></span></p>
  </td>
 </tr>
 <tr>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>libssh2<o:p=
></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Win<o:p></o=
:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Solaris<o:p=
></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>No<o:p></o:=
p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>No<o:p></o:=
p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>12.98
  MB/sec<o:p></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>0.42
  MB/sec<o:p></o:p></span></p>
  </td>
 </tr>
 <tr>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>libssh2<o:p=
></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Win<o:p></o=
:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Solaris<o:p=
></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Yes<o:p></o=
:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>No<o:p></o:=
p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>6.59
  MB/sec<o:p></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Fails<o:p><=
/o:p></span></p>
  </td>
 </tr>
 <tr>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>libssh2<o:p=
></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Linux<o:p><=
/o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Solaris<o:p=
></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>No<o:p></o:=
p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>No<o:p></o:=
p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>9.87
  MB/sec<o:p></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>1.85
  MB/sec<o:p></o:p></span></p>
  </td>
 </tr>
 <tr>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>libssh2<o:p=
></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Linux<o:p><=
/o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Solaris<o:p=
></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Yes<o:p></o=
:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>No<o:p></o:=
p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>6.58
  MB/sec<o:p></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Fails<o:p><=
/o:p></span></p>
  </td>
 </tr>
 <tr>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>libssh2<o:p=
></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Win<o:p></o=
:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Linux<o:p><=
/o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>No<o:p></o:=
p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>No<o:p></o:=
p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>6.63
  MB/sec<o:p></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>6.70
  MB/sec<o:p></o:p></span></p>
  </td>
 </tr>
 <tr>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>libssh2<o:p=
></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Win<o:p></o=
:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Linux<o:p><=
/o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Yes<o:p></o=
:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>No<o:p></o:=
p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>&nbsp;<o:p>=
</o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Fails:
  -5<o:p></o:p></span></p>
  </td>
 </tr>
 <tr>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>BitVise
  Tunnelier<o:p></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Win<o:p></o=
:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Solaris<o:p=
></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>No<o:p></o:=
p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>No<o:p></o:=
p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>13.50
  MB/sec<o:p></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>3.95
  MB/sec<o:p></o:p></span></p>
  </td>
 </tr>
 <tr>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>BitVise
  Tunnelier<o:p></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Win<o:p></o=
:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Solaris<o:p=
></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Yes<o:p></o=
:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>No<o:p></o:=
p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>8.541
  MB/sec<o:p></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>10.2
  MB/sec<o:p></o:p></span></p>
  </td>
 </tr>
 <tr>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Ubuntu
  sftp<o:p></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Linux<o:p><=
/o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Solaris<o:p=
></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>?<o:p></o:p=
></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>No<o:p></o:=
p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>29.6
  MB/sec<o:p></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>11.5
  MB/sec<o:p></o:p></span></p>
  </td>
 </tr>
 <tr>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>psftp<o:p><=
/o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Win<o:p></o=
:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Solaris<o:p=
></o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>No<o:p></o:=
p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>No<o:p></o:=
p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>&nbsp;<o:p>=
</o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>5.06
  MB/sec<o:p></o:p></span></p>
  </td>
 </tr>
 <tr>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>psftp<o:p><=
/o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Win<o:p></o=
:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Linux<o:p><=
/o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>No<o:p></o:=
p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>No<o:p></o:=
p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>&nbsp;<o:p>=
</o:p></span></p>
  </td>
  <td style=3D'padding:.75pt .75pt .75pt .75pt'>
  <p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>6.58
  MB/sec<o:p></o:p></span></p>
  </td>
 </tr>
</table>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;=
</o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>I'm
attaching a file containing the source (derived from a libssh2 sample) =
and a
Windows executable.<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;=
</o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>In
case you don't want to look at the attachment, the relevant upload code =
is:<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;=
</o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
hand =3D open(settings.localfile.c_str(), O_BINARY | O_RDONLY, =
_S_IREAD);<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (-1 =3D=3D hand) {<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
perror(&quot;opening local file&quot;);<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
exit(2);<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;
nwrites =3D 0;<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// 32500 seems to be the buffer size that actually gets =
used,<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// so to avoid partial buffers, I'm using exactly that =
size.<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
mem[32500];<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
printf(&quot;Using output buffer size of %d bytes\n&quot;, =
sizeof(mem));<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
do {<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
/* loop until we fail */<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;
nbytes =3D read(hand, mem, sizeof(mem));<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (nbytes &gt; 0) {<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;
filesize +=3D nbytes;<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;
int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;
offset =3D 0, bytes_to_send =3D nbytes;<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;
// Loop to ensure that all of the input buffer is =
sent.<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;
do {<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;
rc =3D libssh2_sftp_write(sftp_handle, mem + offset, =
bytes_to_send);<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;
if (rc &lt; 0) {<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
printf(&quot;libssh2_sftp_write failed with code %d\n&quot;, =
rc);<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
break;<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;
}<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;
++nwrites;<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;
if (0 =3D=3D (nwrites % 100)) {<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
printf(&quot;libssh2_sftp_write %d sent %d bytes\n&quot;, nwrites, =
rc);<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;
}<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;
offset +=3D rc;<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;
bytes_to_send -=3D rc;<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;
} while (bytes_to_send &gt; 0);<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
} else {<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;
break;<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
} while (rc &gt;=3D 0);<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;
} else {<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
puts(&quot;action must be get or put.&quot;);<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
exit(1);<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;
}<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;
close(hand);<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'>&nbsp;&nbsp;
libssh2_sftp_close(sftp_handle);<o:p></o:p></span></p>

<p class=3DMsoNormal><span style=3D'font-size:10.0pt;font-family:"Lucida =
Console"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Thanks
for any ideas you might have!<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;=
</o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'>Mark
R<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif"'><o:p>&nbsp;=
</o:p></span></p>

</div>

</body>

</html>

------=_NextPart_000_0001_01CB715A.35116980--



--===============0577847306==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============0577847306==--


From libssh2-devel-bounces@cool.haxx.se  Fri Oct 22 09:20:45 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9M7KKGj030707;
	Fri, 22 Oct 2010 09:20:40 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9M7KIaN030655
	for <libssh2-devel@cool.haxx.se>; Fri, 22 Oct 2010 09:20:18 +0200
Date: Fri, 22 Oct 2010 09:20:18 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Slow SFTP uploads; failure if compression enabled
In-Reply-To: <000001cb7184$1de77180$59b65480$@com>
Message-ID: <alpine.DEB.2.00.1010220906020.31301@tvnag.unkk.fr>
References: <000001cb7184$1de77180$59b65480$@com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 22 Oct 2010 09:20:45 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 22 Oct 2010 09:20:18 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Thu, 21 Oct 2010, Mark Riordan wrote:

> First, upload performance is slow, especially on Windows.

This is known and has been discussed several times. I have added comments to 
the TODO file about ideas I have to improve things, but afaik I am the only 
one (slowly) working on this so don't expect any sudden changes.

> Secondly, uploads don't work at all if I enable compression.

Exactly what I found out yesterday:

http://www.libssh2.org/mail/libssh2-devel-archive-2010-10/0104.shtml

> Without compression, uploads succeed, but performance is horrible on Windows 
> Here's a table of performance. http://60bits.net/sni/libssh2-perf.htm

Gosh! Those are really terrible numbers. Well I have nothing better to offer 
than just roll up your sleeves and get cracking on finding the bottle necks 
and improving the code flow. I've mentioned my thoughts on this a few times 
already and I believe most of them are now collected in the TODO.

Thanks a lot for the table though, it certainly is an eye-opener that we need 
to get this fixed.

I wonder why I get so much higher performance when I do uploads over 
localhost. I would expect a gigabit link with really fast roundtrips to get 
similar speeds.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Oct 22 11:16:21 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9M9FlC4005988;
	Fri, 22 Oct 2010 11:16:19 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9M9Fkkd005981
	for <libssh2-devel@cool.haxx.se>; Fri, 22 Oct 2010 11:15:46 +0200
Date: Fri, 22 Oct 2010 11:15:46 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: so compression is a bit broken
In-Reply-To: <alpine.DEB.2.00.1010211634590.31684@familiar.castaglia.org>
Message-ID: <alpine.DEB.2.00.1010221109590.31301@tvnag.unkk.fr>
References: <alpine.DEB.2.00.1010212242100.31301@tvnag.unkk.fr>
	<alpine.DEB.2.00.1010211634590.31684@familiar.castaglia.org>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 22 Oct 2010 11:16:21 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 22 Oct 2010 11:15:46 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Thu, 21 Oct 2010, TJ Saunders wrote:

> A related issue is:
>
>  http://trac.libssh2.org/ticket/184
>
> The patch there adds some trace logging of the zlib return value for failed 
> zlib calls; perhaps that can help aid in the debugging of why compressed 
> uploads are failing?

Ah yes, thanks. Although my current work has now split the single compression 
function into two separate ones: one for compression and one for decompression 
since it now does the entire transport_write + compression without extra 
mallocs. Which probably means the logging will have to be done slightly 
different.

I'll probably push these initial transport changes soon anyway and then anyone 
interested can join in and help out with the compression problem while I 
continue on changing the _libssh2_transport_write() proto to accept two data 
areas which should help decrease the amount of mallocs even further...

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Oct 22 13:46:12 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9MBjmkc007137;
	Fri, 22 Oct 2010 13:46:08 +0200
Received: from dottedmag.net (mail.dottedmag.net [78.46.75.124])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9MBjknD007133
	for <libssh2-devel@cool.haxx.se>; Fri, 22 Oct 2010 13:45:47 +0200
Received: from leibnitz.dottedmag.net (unknown [109.230.128.216])
	by dottedmag.net (Postfix) with ESMTPSA id CE0E5346135
	for <libssh2-devel@cool.haxx.se>; Fri, 22 Oct 2010 15:45:44 +0400 (MSD)
Received: from dottedmag by leibnitz.dottedmag.net with local (Exim 4.72)
	(envelope-from <dottedmag@leibnitz.dottedmag.net>)
	id 1P9G47-0000VR-PM
	for libssh2-devel@cool.haxx.se; Fri, 22 Oct 2010 15:45:43 +0400
From: Mikhail Gusarov <dottedmag@dottedmag.net>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: libssh2_sftp_init ... I don't get it.
References: <462466.37328.qm@web29707.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010111937390.22655@tvnag.unkk.fr>
	<570457.90454.qm@web29709.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010122245290.452@tvnag.unkk.fr>
	<253340.81469.qm@web29719.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010141435100.14153@tvnag.unkk.fr>
	<216293.20633.qm@web29719.mail.ird.yahoo.com>
	<alpine.DEB.2.00.1010141603140.14153@tvnag.unkk.fr>
	<997273.2424.qm@web29717.mail.ird.yahoo.com>
Date: Fri, 22 Oct 2010 15:45:43 +0400
In-Reply-To: <997273.2424.qm@web29717.mail.ird.yahoo.com> (may nothing's
	message of "Fri, 15 Oct 2010 09:30:05 +0100 (BST)")
Message-ID: <87aam630yg.fsf@leibnitz.dottedmag.net>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.2 (gnu/linux)
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 22 Oct 2010 13:46:12 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 22 Oct 2010 13:45:47 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============0682448812=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--===============0682448812==
Content-Type: multipart/signed; boundary="=-=-=";
	micalg=pgp-sha1; protocol="application/pgp-signature"

--=-=-=
Content-Transfer-Encoding: quoted-printable


Twas brillig at 09:30:05 15.10.2010 UTC+01 when may_241913@yahoo.com did gy=
re and gimble:

 mn> Honestly I can't realy see the "big" difference between
 mn> authentification by password and "keyboard interactive" besides the
 mn> interactive part ... but I guess that's a different story.

You couldn't implement OTP or multi-challenge/multi-response with
"password" scheme.

=2D-=20
  http://fossarchy.blogspot.com/

--=-=-=
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iQEcBAEBAgAGBQJMwXlnAAoJECpjKNNpjIPFSEgH/0pktDH8ogzCXGKnIQihH+5s
s4MblgoF3F0YS3JQ6BeZ8xypxedSlSde9AgeQCBpkq1s7mfrdvJpw/r3dNS1PHrc
Ix2gLs9mnCx9jCnXJOGlj5GQQvxYPJ9KOAjThUZLGuEoascfiNR/pRZbdRfXBPcR
9X5Sw9N7QLwXEMu0LsuFqA+NbxacRz8TiMQ7mC+CiDZfFNWtRjbAOafyT9w8zBab
3bZGKKvVAiRSfKGboh14vZpCdfRDlTCE0qRUP74sCLiLpQO4gasOzuWjn+RW4k2D
GdS6Xe6RF54N16WT+2ss2pNMOHmwfwAHeTlyXjNZGq2xANbKLIvCP75LUQWzRyA=
=KXK2
-----END PGP SIGNATURE-----
--=-=-=--

--===============0682448812==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============0682448812==--

From libssh2-devel-bounces@cool.haxx.se  Fri Oct 22 16:50:02 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9MEngus028894;
	Fri, 22 Oct 2010 16:49:59 +0200
Received: from imail.ipswitch.com (imail.ipswitch.com [156.21.1.5])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9MEml8d028499
	for <libssh2-devel@cool.haxx.se>; Fri, 22 Oct 2010 16:48:48 +0200
DKIM-Signature: q=dns/txt; v=1; c=relaxed/relaxed; s=ipswitch;
	d=ipswitch.com; a=rsa-sha1;
	h=From:To:References:In-Reply-To:Subject:Date:Message-ID:
	MIME-Version:Content-Type;
	b=K/S2za6Lr7AXkmKRfuYEWuURGJuC5VNW/3h3At07dDgI+TOiRLjufuAxldC0uqado7
	hhk/v3AwFCjcefmABI3UOJZjHVO1wSoPNhqobE3ydP5f9RaGTHNHNBTy7lrHOeF2nCbT
	Bmyy0O9R4ulePsRMkZpqRp4BNTbsvYpvwNJks=;
	bh=TXKt0WTTXP9LbGyb/7e43O9Vi24=; t=1287758922;
Received: from mrrnt [66.170.5.130] by ipswitch.com with ESMTP
	(SMTPD-11.02) id 4e000001251908ae; Fri, 22 Oct 2010 10:48:35 -0400
From: "Mark Riordan" <mriordan@ipswitch.com>
To: <libssh2-devel@cool.haxx.se>
References: <mailman.7.1287741603.32245.libssh2-devel@cool.haxx.se>
In-Reply-To: <mailman.7.1287741603.32245.libssh2-devel@cool.haxx.se>
Subject: RE: Slow SFTP uploads; failure if compression enabled
Date: Fri, 22 Oct 2010 09:48:32 -0500
Message-ID: <000c01cb71f8$32ec5bd0$98c51370$@com>
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="----=_NextPart_000_000D_01CB71CE.4A1653D0"
X-Mailer: Microsoft Office Outlook 12.0
Thread-Index: Actx0CZOgIcUo75pRGW5YbD4g+XN1AAJywTg
Content-Language: en-us
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 22 Oct 2010 16:50:02 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 22 Oct 2010 16:48:56 +0200 (CEST)
X-Mailman-Approved-At: Fri, 22 Oct 2010 16:49:40 +0200
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

This is a multi-part message in MIME format.

------=_NextPart_000_000D_01CB71CE.4A1653D0
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: 7bit

Mark said:
>> First, upload performance is slow, especially on Windows.

Daniel said:
> This is known and has been discussed several times. I have added comments
to 
> the TODO file about ideas I have to improve things, but afaik I am the
only 
> one (slowly) working on this so don't expect any sudden changes.

Sorry - I thought I had done due diligence searching the mail list archives,
but I guess not.

I see that I forgot to attach my test program on the repost of my message.
It's probably not necessary at this point, but just in case, here's the 
attachment.  

Thanks for your extensive work on libssh2, which of course I realize is 
strictly volunteer work.

Mark R

------=_NextPart_000_000D_01CB71CE.4A1653D0
Content-Type: application/x-zip-compressed;
	name="sftpmrr.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="sftpmrr.zip"

UEsDBBQAAAAIAGxUUz39AA6tdwUAAKIVAAAOAHEAc2Z0cG1yci52Y3Byb2pTRFwApAAAAAAIAJtq
p6ZjZGBpEGFgYFBhgAAHIGZkAjNZFYCEApDNyArhiwKJMwHGzOGxjoJdvHpCIHVMDCkMLGBpCYb/
jPIYehkYRCDijBBxIbxqJRhWMgihiCsC2QBVVA0AB7u6vUwEu71MOLm9TO1YW2/bNhR+doH+h0DY
w4YuvqVNmyleYctxasC5IM5lDwYCijq2mUgUQVKO3W3/fYcSZVleHHsDOixAgSggqXO/8bOOP8+j
cG8GUrGYt5xGte7sAadxwPik5dwxHsRPar/R/NB0Pv/69s3xLVMJCYc6CVh8KeMHoPrtm4pdXS8E
tJyMZM97987BV7e56KNqvW4OzkmERGqsRSSlUzCf3vS7Lef3w/bHT51PHxv7h73G+/33De9o/5PX
6+x7h0ftbr1Xrx96R38atmsiJ6B7EsU9xfJxqSdVgqZWji9DosexjJTZFVuzsVagfwdNQ1+ppRy1
EsvxdRyHPRZCtquVt17Mx2ySSKJRrVVROlvR0wU/mfxRaKtcJFokusskOh7LRcupjlKa7G2fa5AR
BIxo2ERTUpUFvpFzT0EyDQEGVoDUi+EUQKuW88OPt16fK03CEKX+dOvZyHdhTJJQq9GNmEgSQE/G
0a13WK/OlEARKhN7o+BifNbzbIQrlfb14IxxFrGvoLyrhF+zCAbMl0QubhSZoEFjEiqw5k6JJBTd
GoJuOTYKadCyMKcrGy1jGHQSFgYnM+DavM7oaxsZvETpOEp5diH/7WzQJZqcAgcMYCx34bkDfwhy
xihg2OaLf8R71u8OCrqKSZeNVEZhM1vToLSq6tC3hF8A0yFNzWV0W8Mw8OJIIPmKVZULoU2S0kJZ
Jq/SDgJmTkjY5zRMgmWhMcBSqVZHLDv+GZdPReFitwIWBQWlYomFgwWQ1j/2Uv/8oOned086N6fu
oN8ZDr807+2hd3E+vBicWBFp1ZDwCl3GfLUcLRNbJZUOUYxiLaHF4E2BPqLgA/vOHtvAFedoEc28
Dop4rcdU0GnuuFIQ+RiiAVMap9wgpjY0OUceN980R1nYUmWMnRKZGkKLoUjQGt0dkdyogBmEhcHD
RAiJARxqInUiOoRjKZXCkArpczOJUtt66aLlvN9aaIRj5wVXoOJEUvh7NWxm3cyzOedZti2VhzMk
kWYO1Q8OtmlDkQPGH3ducENcsqmo3y4I4AFeWmnlxoFPD5rVkPl7ZkmF3Typ5r1d4qPUtBmkG++X
EU5JrlSogsdRpGZ0hMfmAbKwDBtocF/QYJvg31dc7jeqzeqHrGlGV4A0CtIXhi6vrXT+Z7Vlr8Iq
zPP0G2exKyVEGB0SLuflDpVThMX2SamtV+6PSn/CYwl29q9MIyQzHkq9Yq4ddrBelyXVK03h26Yo
GkKxSIRQFYG/dMUfLpSGaHlvVa4Iog1znQSmqdAT42rx2gg+mQNNjGasH1M6pZGWIYIzQqeMF9fh
5ppqmzjvNL4JZ2McIztdLV0kf4RdSDuKlkl3yO9q4ZQnnK/oNoW9uReLXSxrC4F4io3ZbqPjMlZ6
8319XCthlZeRku2XLVjJUm1BSyWq73ipBBReO16yuf0vEFM+fPs8xLnSSzg15ydzQbj90fRtIdX5
S5Bqedy+7LfyKaIlgo5L9Cf9EbcyPdYhVG7BCSeIiHLXUrhiZuM6+0akVc5GgbXSIAVtjQb5CXbY
MEUY5QvrBTiWi30WkK29fAGSrVH+S1D2vwFd568SdOU1P5JZNu4tyjJI7PUAscau1bIFiJWupk3I
Ka/b79jpW2Cn8sx6Tehp7Sj7HHUFY5DYj/nHqrX98rtVukRcsYK5sqm8l5JkqjOSlkOFcKlL53NX
UjeAsSvdOAhdhs9UPLg+0SVgYiTYcoQQbZvBJdHT9OpLozzKOwzl2pxYzpphtf5myjfYmt07z9k6
RZOEO0Vbp5HLeLhi2RaZ+RB+TiqjsUsT6fqRcINwgnFo4qNdn3FXTpQ7YWP3QUzwgfTfBq2Zg1kq
TsPYR6CXHReb49oz31bx/C9QSwMEFAAAAAgAbVRTPVNFmVqdjQQAAAQJAAsAcQBzZnRwbXJyLmV4
ZVNEXACkAAAAAAgAm2qnpmNkYGkQYWBgUGGAAAcgZmQCM1kVgIQCkM3ICuGLAokzAcbM4bGOgl28
ekIgdUwMKQwsYGkJhv+M8hh6GRhEIOKMEHEhvGolGFYyCKGIKwLZAFVUDQAHvrq9TL66vUy8ur1M
7P17fFTVtTiAzyvJBAZm0AFGHWHU0QYT22iiJkzUCYRJwJjMTJIZEEiwRRxTiggzEDWEx8mEHDaD
tFW0vZbae9tee69Ve2sBX5gQyACi8vCBYitae7tDRPEF4Tm/tdY+Zx4hWnvv/f5+//zgk+ScffZj
7bXXcz/Wvu329Rq9RqMxwE8iodFs0Yh/bs0//mfUajQjxz8/UvNs7quXbdFWv3pZfejuxY6Fi+65
a9EdP3L84I4FC+4JO75/p2NRZIHj7gWOito6x4/umXvnd0eMGOZU6vj15VOuODw5f6H6M9v00sKP
4G+fa+vCI/R3i/L+rwu5kudj+IlHPQu7J2H6Ewt3UPrVC5dSundhP+V/euFf6e9zCz+gv8/TX//d
PwhhHYP74p2i0VRrDZqXnn+pWk07rNFrh2tz4UO2RvOsjtJe9cKzBR7mZAss4TN8ylLKqH817lxC
anRaLuJ3BWXEvMm/SjWNRk3bcI1mu9+oWYuJhbmaZ3TfAvlf82/Aa8wcO4Cz+Bvq+274zpYw/P3d
rUq/sK+GzDwOqOW7i+beEb5Do/lLrk70fRj8RVyk/YN23d8V2TTv/QF+LTRqNL+Fv7cbB+fr+u6i
xYt+AM/U18Jcpc3c8+r7Nn3+///7n/8r2uXaF76DTbK7usO3y1V2eZpVnmaUp9nikwqBvTWyUa4y
yFUmucohV+XJVQVyVaFcVSJXlcU6C4HY424rErdcNV+u8spV1fEVXZdoNFgyvmL7JShTEomirp4t
5+Bvz549ewLRRPhmttQePR6+kXmKo13hi6U2pzlsZbVOL6vM8yb2SduNcU8xAhf3GKkmj9MMf9jb
jX23QTVUVyNWBv8aio4G2UnXDnM7QKFZUXJt5AGp1WkqiYRdZyPZTbEp52b3yPfYSu9xRIbFKx17
a9wa+Z680nuckZx4pfMYvEKjrNYRCO0BaJu10D47Jm03ub6K5DY2bTkDTUEFS+118oJifgu8sYOu
P4ctLJjHKp0Bf2IvQCvfY2c9MxubZvc0bTlFBfYk/7EKp4lVOw1efOA18FXabkj73hBgi+3Yh4HS
BcWR77AaJ6tzbMFeHzjMbs0DgHyJ/QCP7Cl27YjkNDXGpmhn95QuyItcCHmVjPKCQnlBgezJy3/A
wjx5roFFl7NbTSxQ7M3f6fNz4y3ZGkiGWpowp6egsahrdk++p5Bx16dLdOxTkVkfKGzIfx3yH7w5
WwOZ88+GL2eTTaymOJgf9/p4NySzAFYjtxU2yQFRjXZBIaspxFZ3Ako9hThurKbAtXNxlv5Vuaag
iXKl8FHvNEgfFwSj+83tV4yGrPfbowlzuw0epftNGnP7SHyaqIkMk+43aMzRhBVebxkeyY7nmLDm
aRY2yVTHmkoa2NVytdMKP05mliucdjbJEGBLy+DRAj8l8QonwSKdHLdklCCZ2TObpO0FPQCCO+GM
PfMdt0ZabtREhouq+y65EHKfsyx2RLvM7SF4MW9q0LDXDnxYJfUap+jfxZrh+6LDxyuNunDlytPj
mUYTuaVZU7S/aBf/aQmU3m54HuVZrNpplyttvQDVePh1KeNR+AopQASWokNFx+M5OHB9v7sAelTp
iFeSQgBeyIm7C5FjoAWtuf03GoShp/uwkb3S3WfUdxftf248pJ34DLAXXY3oOLDiQ/OKU0Zgnwqn
O+62PVFTpcFG+qqoamd3v4G9In1glj4xSN3GaFekTK51Pk9U82FRV9EuOWgt2s+/cy1krna6u/uN
Jw5If9VJr+QCsHJ5IVYlj0eI+86O0mhcO5f0YD5MjpfbtkNjfe9DOmKU0ibZ1mPaK6MEJi9nCcSl
/YKvx6XcZFlx2ggMBdVClQh/31oofqIH1K8G0qFqqPYgpoexqVpHdFd4GDvQfcQofaiVR50A5AHO
w1ewSlvnLKcd+pAcA3i/lA+7cRDq8Wt/jnTOocLXOupr4HMsOiza08szDGpD17MeGA5u7O6zYHud
OL7QdLVzXHe/7XlDqunx/MEbBjWNlla/CVHzndivnWLQze1nLF+PH9H+GHZg5YcJFMc+Iws6iBzk
aaZ/2PeRgwFA8LAU/A3PTRL7A98MgNzkFjiw/sMGf3F9RoP9IwX8OfFyIvF4TlYKAHP7vyIJ17qR
j4G0stlOaNUa3WVuX44fgo7o/nA581vkemcxPN4ArMLc1vxKN6LAb9PvdO1eYsjfCyRe77QCARX7
9TsbfPyiidlIzQ4Awg7CKglz9GjEULS/30a5AcZX+afFRPdWtpcIPWjL79b3TQCAsPPL3SB+7gDF
E690C9izFdiNCPtPlcG7xYxK1LzJOqEc+4Hoqnc6oc9XMp9dgfxiFnS7fI7FF0AzxWtAYnWaLIlK
YhlQVk6CIWxw7Vy0JRPYXf3WFLCTENidBGitDUsgsFQcwTVHN40E2krh204wq6DnKKBb0kFvH/n1
oDszQM/734G+uuibQT89IgN0p4DZqMCMlVYgrV4Rm0pw7xnx9eRq3lxrc72TlBtfotwog/xIjUA/
IGPHsFpL98lc6QMtWDNASYqho4jxPdcRSVQk5Z8VhHo8ZziK61MmFGsOwTOVXwcECo1XVn6gSaB4
7v7Qot9Nwqr7A+PKDzER3utR1Nr0rwA25GmFgjOHoa5ajhrwP6EZkM0Izbp8IZhT0liAghBKJ7PM
7d0I0slsc/sWfFhu0IAmeE36IOdAf/5n8ZyLEeoKglq/+Mp+vYK/taavAV2PoANi9vXLtaQ39DXS
Sf3SBaAtC/Lcmu5+XTxnBML5ia7vKMABQ1iRHa+s5lOqgNTqc4nivPw2fJueRYMIalQTuQZKYpkL
oWGqxKJU8sRwoTxgpIy1UCrnUg3lwG9r8Rv2Jf+zA/2IdmdsrlOM//BvQP0B9sqJ/Ss/QF+2+4jF
tTupWuzQQN+1wwUpEORyrTueMxKVbPt9wxFYc0oeoRT6XTapPEUuAZw2EDjZbLf6vUJAj7rX4W/w
8sevz0bl65gAggd+nNoKZ4GegwiaIBim77lhOBQjBQFlf10vRopRGN/dn7WyW6tFMpJr58AbpH44
HpT5JKnbAIpd+mTkyuVzxkEGOThXrp1lXv0RovXUOPPqQzQSIcFHo6hXIVftrMXV65ESqPnVw76B
CIIh82ZrQwiNCYAkZ55cHVyYqAxBLd39eukTPdS16E9bcGxLK0NAWbmKNmMJKmqiokX758n1tVgO
Mi3679hq9BditfNlbeyRY8DUfrmyOlZZ7/U1XxirXdisiWtQSvHm69CQsgIwhcCtTsWwmVOrGDb3
5CZJpgxHtAnfkTHU7l5A3Z2rr51TWhsyS+cQgbX1is3DaqunXXGAmX7M9gFPmjftJ93z1pKbESXh
3BRKoAhiRf9uquAUxM9QpZduw3eLdMqy2K9+cX2++GqVXu3p9UIJUbF505tUo+vzRe/Ogx6NMW96
FdkWkKzire86aFz9Bm0VzIM2IrNjPh1Un5/k5xeNGfUXiPohV7J+pV4k2lFQpXlzRe0C+OZkPdJh
vdSlV1juIegqNDEqMjnm00MTecI+mvU19evT6n/+LPpGUF0OVafvvyXmy4EqrsIKLvmaCnLSKzip
VLBc6hre3Z+Tv0//OdjwgqyCcwF6fXAOqvyl3weyQC1C8gDorUolTzBvjyEppEZ/lQ4Mf+mWS83t
N+dg115eiNZKpFgRCY8iAY3LSRJUK76PzCGCQqJrVYnuFEiC8+mXBeeoJOxHCtbGaQKDP/G9dApW
TfMutbLfZ2OP5mNNQa9SVaxyutfHaufENWhksMq53lg11Kjjs9LrwuJJ1fYeAntHtiqFSdKa25/J
Rh6woiAYyF60aGWr06aDEV8UQihQhKFlJHuxEvDm0TW1+GV4MnjlphJ5aRl/4DvU/SoGHyFbHnMb
wNsCxwocXXDEZCwO1QjFzXEGYLXq5/e9kzWI18Q3/Id8Y/0x2w2Gq3nTLqjB6nptiVvQ15msb8d3
g8sv3dYOXmQc8h3fdswc3YqYwwwAYzFmAhIxb9qthz+Qv0CtEF6hsgNHkBPBhtfvgyaApWV6hcr3
mTdBef0+kAqzFPrPGop8gX+hEf1utJnS6lahPXDEvLna+d3zq9dDfpAZv8VmrkH1gcwpP4iIUrun
pTdKR/cWUsFwcrfvR1f1ItTpCw3YZ0d4dAr5io0SoC/ulAGEVOJCa3vTblAdcm1VPGc0ScgqMLZu
dn0mtMF9hiG1gWtpFXoAVUr/8j+DjmmD7gP9AkLUlQ/uvAQpbgzVOT05at4hB/yW9diYyZA+3tMH
jbf3G8abxvnF//E4e79mnG9HqJbo/3ej7P3Ho6z9hlFOHzSLFwatQ4dZQZUA8NKHMHIVchAGb+z5
g/ei7p8YvAp18OI5Ng0JDxvaPzoSgnn5KCFqK8DOuT2f7BxXbcGSi6SXcVJPkzSl8hC+/0bFGiyE
rJb83SxYrA/mYYH8ff0meAPxHSxE1OOQgA+B7gRkvYjt7h8FDTny9yHxwDccRPI+Msyr/H0oZCAN
KpKDKLgKUHCtuaBzFHVHCwn63RPqaQLIEXlfeGsztKrw66vRJvv2Cy0ZzI41QXfnqPJENQgveFPy
XYX5lhs1Qo4krfu7td9gYqp4AmRofVZtEN28PPCVbpaWWzTgX0Dt+bvDV2E+8H+4fBV4N+g/5WHH
Wa0tfy//03jVI8IhF34AlmYCujz2SsR5vg8hHAjwJMS7Tb/bVWsLj1BGpQpGpb9OeBOXaNRuraYn
CzwtS+9gp+brO+hqsodrlUrneFWznJmlk+PMHVs/ppk0mlET02moEaaZCPKr5UkGeZoF9EjjbNAn
M7eguqVcAix0SnFiDoew34hPZDZUk2pyyD4TUoHss8gT5HKDtDxPI5RSZKR0y8XLrkEUusotZBPm
sVlON996JAESOnxhPGcc1IhgnUmCFaY5qZJ8jwGy5uU3WrQeo7bRqm2yI2JwijB8Q/RQ+DoatLGs
xpT/CowWuK5d/TZ2gB8Ay6PfzAImHLADrIfrxtHUhuwpZDnSwIXhXGlgZNhQdLQ/6yUNsYLhxLuX
gNMmfeiWBoabH+7Wvzl15Qc4K63fra8tA2Is0cg1BREDNJqDOtsQuYiRWjdH7+gXSD2dhB4+qPOV
KVSDvXfuArdmhtWtOQk/4dFuzRfwEx7j1hSOdWv64eeXNni+yK2Jwc8m+NkDPxsvdmuGX+LWjIKf
e+Hn7/Dzlt2teWO8W/Mu/Axc5tZUX+7W/OkKt0bjdGvegx/DlW7NIfhZdJVb0wo/e+CnAOq5CX7u
hZ9V8IPzuQHAszF6PDyReewwEkWsBicQCpgbp/aHeZlHmdFnNXYWyGMep0/Mmcc9NEFR1NXYkzGf
TyxR7TQGWavTiJPmVh/HiQAo0oRZgL4b2HynydUDEltLM/7m6I8Es1tKzNHvw6PrdMQ4m2qd2SM3
2Uqb0ub+m/JKm1Jz/9LZRCTnJTS5+nNd/a27pbO5y3eoCwLbx2QsCHwBhgrOwC21P4crHs+js7gl
sRxSbo57bLRW0miXA4UwxrKnWA545Zpq2VMf95AnTAsGjmYddp9hjpLMFMjqTk+RPRXyxi6AIN7x
GOpWN0r9PBZ0NBtC+OJL7Gfr8Iu0vTBmjSEuZY9RDphKG0vC7tJGd9hV2lgRvsHVE76O7dt3JGb1
xgxV+m6541EoJD/VjgU2ohSQN/waUno9TmPjbBaf2Xc18qjH8HNg3WC80vY4CAB+VS5NbjfOJv6a
2TOb1jlmwoAEixKueDjEvHbX2+E7Slsc4VmlLc5wUG6xyi1GucUWdxegEGC4qGRh02yu1+X7rcuy
TrwjT7MF2CIbe+3EO5fskj54Tuq+V55mAP45pwPmwWWm+/P4bROg6Od8CbTfWNTVpPBC2vpJgC0E
Wmmxkt/Vab2ZtRi3koJYaGVea6dpIjw0Nfak5T8GlMpqLFjIdXKJjp2MJsLXM7cFJEDQ6+OHrsTF
Eru2zaRtsWjbrBPaLPA6AVpYgrOJUptVE8lmAUC1BesNIKGacAmjH/0GXNgytx/OIY1jwSma1Qdy
1Imdbfh0Cy5tLMeljT9iLo/hJsR0JFc6aTBHH88RwjpiBsyvB8w3kUho7AHeqQMtY6HZ1gb5Zrkm
L3Z7Qhq42hyNQlJpwGaOfonar1IswHisrMbYazCOB4mXfGHpL0Z6sbMFVhRAtJjggfQ8TXqmf+al
A0mK1VilgdyIgW3rH126AclrmdG1rRWFatYWnHwGzHUaRqUXHg4vQG/3ojZ+DgWp18mqCk68e/H+
FR9aTrxz8a4VH+h0+1iVXTwb8VlJN+j2SSXQptH8cJdub6d1glJvwG7e5DdAeqeVulkD71Oz6Iux
02TBJMqSLYBIz5WTkSu9TzmkzPrHSluxW7plIP91Q3YMJB3VsWaqSanGY5daQLcHrOHL1ripRcOw
zJyjVbBE5gI0I2qMrLIwuos0UhafTOqnMO5xaASDTkGEdRJ8hVKfsfsD08punJpW0D6eEY+7jrSO
ls5mLzOwnv6RRV3wCLjSb+vXFXV1H84evlNqm68J66Vdji1RyyTjiQ/yd+/r04OBatC/wrq7P8jK
38l6ldHh64H5Kf8F5s211/GV8AoPhbwFHuSmQqnNMMUc3UWURB02t/8JrYzNVVagstIax+IfsQR0
2OUxRSbCAEj3Qzcdrh1L7NjVpsL8HfpXqbO5bC/oW/+l1GEW51VQPyKKQ8nwBMSaD7jVscY6jDXC
4NloFVTrsWo9DmgZ24PGFj2sNnEZtrljycXQCjYBlVcWKkj9xC7aQIngcFVZIyNT+J2KWqfNMNUc
fZqGFyqzQ5f+BV8WWJP9qLFL931jP9bY1X6sOJ3WDwe0CJUyP1CdfVi5DG9AF3ZjwmONHoo83p/1
glZt9pv7cLWoHwoNkxsdAPhMAfhMc/RJdSycAPij/yzg+y5RAY+fGgpw5/8S8HsvUQHPAajvElDf
FalXOaACGa9b56oxLckBICYJIGJenStgWvrdNeBeEOsC/zxHBFCDfVvTdG2n3QLPiiRUaBfFdvgS
qOXMSaBhlLBXxD156DeDkYVGCIrkiBnsDZsLbI7lWdKAIWJJSuexNLU+dvbMQWKZStmltrAmMkbx
Nv4OrVEhc/t7iIeOTpqL0UVGYeVe1sunXkDKtP9aaUAPqbOctjpIlcwidbwidMAQjpnczBBbOKVK
4w+Q0YR5oapwFpbMUZR00VHc/VCrpVbM7R560Ea+7zoYyYV6868DoTVFOp0Vdjc0FO2ClPuuJXNK
Oq2PXAOGBwtUFHXNkyumncMXT0WsPvcczmYfHEe7AEoXhCPZ8oL58oJZgL6XBhKJ0nss5vatOLEG
PQal9fw5HBhbtGv5MEAmMSNgBmCJdgjpuQaIiKQj/FZ51byp6Vr41GkfJV6ugxfMpL4XDXo3DnrP
HfQ+bND78PT3fisKLOj6aycUkbUDHqA7n5xQQG/LOnFQ9thmF3WVeqwzm8wPAUlgP6N/PkskohAL
UgqQQBeRQLrZmmZfkD0MTrngPfS1cCsUmBsGKXF1eIKUmBJ2Somp4fFSYmb4YilxV3i0lLg3bFmZ
wNEMG9WKmdsIJvQIMKjTrGjgu0kVQye7h04uGTLZkwdJfvEOWiFxL2iFJsUmb6ySDp9VrXLmKRA0
ou+SPWUZhBIkSilKBL38STsYTUS3MYNb32XevFbTDGQLZdatIBWwPgSv8oa19NI5H1/WrRdfFsAL
qVbaWDJfbpslt4XltpDcViUHWmVPi+yZk7L4pI+trLaVBefXNbB7WgJsM9YCHrOF1ZbIYaeVLS2I
bTwFsINvfGDJyPy3Vm7LxhUSYCdyOHHOAxzf+gmJznrnSFz7jP0BJ0jhzex6GuFblNU932nRsWC4
tN5pXWLAuScWLFkzy2nW7y2xg8X1b5ALXkeWzLo6YY4+jG8XT7zIHGX4dLt20sQZWnO0DXvUrZu0
Zoa2fNLEiyOT1YeJ6sO16kOe+jBefRijPoxQHwyu1xY9y/ZhfxBc15uxdeegl20Xu3AOpHIhO7Ks
YM2sYQlQip0AGnaHBYuvAHHrNm82eEGo2ZYMl6BjANp30eeuDLv4Uh3bAV6mtN2ahl8jYHZBQVBd
0Wkry28LM898cFryB2IPTUDcymDyurYt+gHzlDTETHk+L//Nxbg3CKliwoKFExbMx0WvBbNiJq95
c/k5qU/n2rHIkL8DrQ7piHaerI38ndW42Zsx091fm0F/FpthN5Ox3I7zNCwQ1gfms0qDPlAC5rWJ
HUST2PUOGPHvgFPtze+RKw2s0s7cNpSAI9lYVlsIiqwKV8YvQhl8CTOnbKrh4OUftZKotaCeM9f5
/Py9i7I12vEAvrYJjMIwawyDnFw0HnrKoOma6fq95k062VN14LB50zRtUfcVnnp4W3kaiWyxiY0R
u5Z6USR2oPvGaspc3Yt/yNrm60+74ouvzX+dvbPyNA7hkqwX8A/UXKePN2u8/K6LSODq32+aLVw/
GBhjT+wRGu9ti7+TP7Ayjs/5O4XfwmpKgvqdzRofv0aU1G7FUk2zqZwynr46lEigyUxS1+kgMIAJ
V0Zvwl+LDTJuTvOEAVlLLVxHYjyMAutGLcpo6O4s2r4WmB/34B5RYG5t2Ojaa16FTJ2/Vw6EZc/8
6K7WHBYo0e+DwdvfrMnv9rPX+G+uwa7PZ+CozMIRmQ5cawGwkoN1PS4uVJrq/F5+tw1op9KubTJp
p1u0TdYJTfDFPgGKLCePazl5XLVGudaC+EW78kGyMGYpZLltZR+i39VtXoWkHd0PANWU6HcDQLsA
PQDOGAQngOAEvg4ccABrTXXgAL479tuAEzTKQQvLJjM3irIS97nNnNED3qANHMrPALoMOFDIGkCt
gBie78vfBjCtKhAoysYdhDWz+Pc/A/yPAQU0yRIxY2aQyI0zQRbrZvSIsvAaq9BoZ6TrnLoGGt8g
GV2xqUBO4ZuIFq/g15LZHEaIRJIR3VScVsYxRrcRzIhFdzNPFdA1Yqet+MBhANi8qXqUjiib1VRc
cYoF3EDh85ihfJ5suB8gvqKmGNJAqkxjNVWgGeYBcc+Ty6aBorFjhwIF+TtXHqER2b10GDvHq8By
AyEutc3Rm1ddQUuaNfPn5dcsZBseB4Jd45nDtuIchHnzrnmyKcg24BQF24rfCvSdhonajfho3tRl
3rT+4GVVmnnaxzY8Cj5XrJ3+rOwWG9exYtfOxSaoxrxp5cHxVZr+EebN+7qP5Jg3rTrooHIdnbhc
TFMqRbvye0o7sGbmmWN+qHsCoAp4KuzqQOpeWied1C+qqQK4tY3zETsLCE0eQE+FTnfgb4Cboh2I
owXFgB7ARvkVRwAtgKNm82akS0KNbJgmeeYkIi/0RTUKT80nZoG64p45QhmdL0/6Z2OLnpI1Bh1b
RyDSJE1RAvEssMbWIZbQ5VSxg93DFVwxLxRrp5ei/fmvlFIV5oe2JWrC7BR0B+ngABg2g4kUaBP4
hajzI5x48SDHeIhjQirH9AHH9EWPAsdUWVjQ1AAy8wmr4Jh7TNqQRXuPdcI9xDGhTI6pNMqVFjZS
ug85puEscgyYWzN7/jGnTJ+QySklnwzBKbOJVZKcMptYpSfJHy+p/FETXnmSuMHJLeALwDsyiJJG
HDIHOWSXub1Sj/OTSAZT/894hNXMYYGFL6C5I9e0yIG5cuMc4JtKF9lJi28hJVOQv1eRaPuWXgP8
Yzwh+Gcga+m40qfQnwhfKHyHwPz8wMKVp3Bb1xI9VMU8LfDBvOrXULgUqHr1vxC3BYDbAnNJWobZ
RqSkWKvx7BpPy7z8N82bdwuCAtarU1hvo8p6F2ufGsx6T/4PWe/JNNbL31F0SGW9FvNDPezV/J3a
mrDUdQ7MPe0CZDfX20tvVrC+YAiUfzPL0WBLnpZE5L+wNg/oL7E5xINjq4keMrd/OQT5q7TPr/r2
yuvJUf+s8orel6J9qS0E2myvRvBaTcmaCmNCZe8kw/uUUSEuxpkjZUz24mAgj8NgEN8ruBWYjSz6
Bu7O/id6uNvyrXsIyAYR03chKGHxKC8I9a2hWaOQJuz5mj4emifbv20f5cbQP5YXeVdmygvjkX9K
XgTZMdKmtL+GtYVXJnRCXhz+EuoBY3i+06qkGaNHze0XoLwAuTFKRxSGhCYlgAl/K4YVlG0HTRrV
lMSsWpDyidikhHlTgU3f43rVHCX/SHmLLEk+zRd2/vpkwrTkkzv5dEPyqSD5dHnyyZZ8Gpl8MoDZ
/mT+tiysG0SKKw5io400sxiSRT9CbUzjUqBnp4n6FAX0qDIyirrZi5wtlHEHioJ52o3E4KrywTRQ
rPmvFO0X+kdVdw9tA02LmnB3fwOOEmo5Ywa5f02DqPbPJ/eeol2C4EGFA8WhdgPZPeXcN2q37Csy
6X8I7Ub034D0P+LbaLcMDo9/o3Y7m0mt91+eSa23/z2dWs9mUuvZTGoF+w/JlSagzNz9OXJaGCQK
T0oUMawK7r8Z0YBiMZFGyfO0awnN2hpkZBXnGx4joT0/f18pVRxp/zoh+m+XZRoQQ4gYMiDQ6brL
9G1ETIYBkZtQTG60uC1gcX/+j+WC5bJMTB/7WwrTIzMs7kyDO8PeBnyfZAe7P7WIPabsc+m0NnKd
eVO2fufKk59ByqLslX34V39yZQL/mlddAoJh5af4zOJN3YctjcO7Z/ZEj0dymmIebSNogdOWxTcD
Riwgb8ybxuh33+rRn4weinyRWeGWe1fkrDjx9+4jZrat+7Ahf5s+VdvK08+MxqbewkXJp3+3oPHE
XxvYke6jw1f244ctM7WKPKP6zZsCWv1J+qtT/uqVvwblb5byN1v5m6P8NSp/c5W/w5S/w5W/JuXv
COXvSOWvGf/qT0q9FolrzdEInuOi/nwA/bl7v1mDMzapHiopp6SjkLkEp2lRae9H0XraYl5FtNjT
zQ3r/3/aH6nfkurSInQ9D4VHECmoI/ht+phGFDj/UkYqqNrpZeV25jOw6SVswm2x+qtP00TUvSY2
1cL25dc762v0b8XWXpvA+Zh6Zwnz4vabAlZVgLtRmLcQ3spYVTG8VTBvtYx7LKq8Mm6zwD1lVcld
elXT5QqnjbWUxSuc9TR1D38PHJ4mz3fiyYuqKtx7KCXMix3mTVO0U9jrBw5PkeJG9rr+ICTg6TPI
qD+ISdVOxxUHmOHHbC9tggU87T3Qn38Sj3Ec32aJVB7f5jZHjwA3kJwBOOoZboavP/BhN8fdVHo8
h+FghvVsp9gilawg8rIHsnRm9+VDaXjCDVEAZvhq16nFFyThSkGyWzkZV3VFjxa7059/SulCg3YK
5mevTznwIXXjwGH9u+ldKASInFe8wqxrgM04QLHTvGkbQgHIsD9hiZQ+AZ2w4X6pnebNFc5xmfvN
oAvWHw9ZMBzHPcKHzfjmGlicR6BA8wgFtf8upF6QTBVJ8I1wxfaxnQc+zB/AbXGIMjt4kDtZb36F
s+RAP9W419zxXZxOOpLPXfOdZUtouUHaQhu3zNGg2AOFO2IqpuKWq2hX5HLcRpO/Q78T8tcvbp0A
v1liTbm23ANc15kd+bJ/rmvHYg/bm/+mHrc8cf1uyunHnGt8Sr4xkS/x6I0LsLy4ZAL8Zjy9DvZa
frXT3j8u2Y6VSmfm2I0kJw3ollwX857d8p//8R//ceJDdmTf0SkMDKVyrQQl9OWezmxqtHMMpqnF
3wdrrB4U9gXKN+msdkk2VA+54QvurrK6jpilX+JSaNhZYJYeFosrVX0T0APozd9m3lSldXfWaNd4
tR431Q7vns6R0Kt6qU+PVCqd1C09GN0V/gPkwSzSSe2S36xxYyP9vyBWnU8H4nBfXD/u9vMqm/j6
7bhLk/ZGxbW4P7N/tPL1S7Eb2BbXXKpRThHEu7k+ZtqBijqf559kr6vHQKGB/DelbVlVVxyMTdHK
WtAacrkJShfk92bhAQG53IJ1yT6D3FIG1oE8vWSmtL0M9VZ0V0Rf1IX7iQx9WHOAfX5ib/R4WD1/
drxbH77EvGlU0V5xwAwIt8jwsOPKKk259Ik2crguKJ1zmFc5kN7PdX+aVaSVug3I3xZQgv1GUYhZ
H3ZMqNKs/Cu+FFl/4bgGOgefbfgMVV0p0qOOa6s0ULzIdwYrASaxsHehEvrMDNG0OgyijnexDgPV
IVpC2JRKygdSkGSAgWB9a0i+/N+AATD8bwAAPFDrouF3laZTpb8NEgiTe6GFI5b/2XB84sgEQwBB
CPmWYHwKyu9vwEzSOcMiL3ur+4hOEMkAGkl/p0rLXqJKD6YqLUuDqiwNqjIFKoN0RMvikT81zQRi
vbLfqJDr+q8n1b+d2NvYg/vHjOanK5wmb2L0e3M8mszT1rS/zAifDsMnmkdd+TGu+fzq8IVTNUXb
5XYnbahodz6Ofx5yop1Rxx6jV9weWdQVYJ+ZN+/ErRGW4d1B9qLz1+JTPfygIp0FP3PgZy78hOBn
PvwsLOqSw06v3OoslGc5q6L7l1zSn6N0yLzZ5JmXqKiuj1VX17vBO/uE6bEl2l4G9to8qbW+Hqzf
adIp7eLPUX27ti3JxnUPtg3UYjkz90Jn3fBrhHYeJI/EGXtZK+UYmJn+NDXG9ShHwFRma6l7RXs4
P5ulWbkde95D6sW1b8mFMXRSsb1qaC+r3LV70Reu7sUGXFsTK/o9DWg/bp5fMV1/KP/PLRe5pQHz
kk+jh9rGSi8ShjThLIAybJR2Jvruw8kzPADkvF/sm8lW6mf1hpZ5+nrDdKlLB58NLdLAuEV97ElC
JJvltBd1RY8uuWqeVObRhC82b7Z6zJvr61vmyYY6fAFc1bfEIMHt2rHoXWWkJK55Hpdnw+VgiYXH
gCFT0uKsop2mW+AvbjPuv2HLwBVVmmt0Ohquki0lztRbIeQswEmsfgsMEA4SHh8vwBMVLAcQQGcW
IZ96ML/oaNEhtLJiVQmyq9aqBFIBP2WgHSI5N9UDAvqHgeaIDL/Ji9sBpDvEHmvcLWxPjv8atL3C
TjvucL66p7PCOcq8ORsozLV7WQ4MqkXTn9c2HpLQMNF3rbGihVLSCcM/j1mNiN4L+k2Ybw4tzTov
QFWDSj7/FdUueYWdPfApbdKtcHpjxaj/NPqBmOk5dJzW52/Lf00uBWvgOO04mJZQuhjdER6G52v2
8eiOyKloV3g4dPaKV/U7WR84V0elCqddtwUdoHnaivrpYAjVT58HtYx3gfGk+J+g982b0QypByL3
Ehr34WqluSMHFyDDTvcVXwFfVIFezjO3f3EOzecIbta10j5phNa0CrdqY5/yXyHAYtbhBw5jG4sd
sXD9dLAPNt+cH492tY2YVC716vRd+G3REai8CiopUzqj34tjoxAL4KwMlweNK0/RGA3HhUHTylNi
kGjZ/i0oX8yyO03r2UgYIGtnxY+1LJv2de/sPqnDoZ8nV6/X9d2M0wytzuI1267uKdqF4+DGIYSP
zgvAKAlCPQ7wCcbh4ZsrdoCNlBfGjeBWdiMQEIw8Zgbp/QrbcYDjhkHZ1JExBDnrh8B/5PfYNSTJ
mIFGU5sDCdXyMNqLRqy61om7fWaD/wrMfvpkktn37ImR7xRbg3M18iob2CTyGiceitwVW9U6TKOJ
r3KgnWKdCk8F8GSFJ3lVIR6PXFUCv/PgfZ68ZgtuIl3zIk4trHoWfuMWXbIvRP3P4anEANJP0fF5
cqHUZZD6tJEvYquw2edwr/agdGz6uQsHp1Nn5smrHjKg/JJXPYmtrnqCfj9Dv3EOImMPho+t91o1
GjHrz558ZhbAHDPd4NoN9rTR/OAGFOjLrmPPds7Bw5tPduJ3kCubzZvtT89zHVh0QWTUmoeyp0MV
Ex/Kwz9LteW43xhKKFmfhqybMes1EcsakWeiKLEkH+04+dn1mFPAgWcZ9Ltcu9sYjtfMRlm0OHsG
RqGg9/XKuyxgbZydsbwH/qCD/EFwBC9iU414DAWfJ9CxCp+R3WspwtMxeebN+9ju7g8tw3fLnWU4
qp1u+l1Bv6vodzX99tLvevo9HQHtrMdF8IcIsKJdQLs/1bEtmFa5MnETCkgQT8mdEzHcdP0cJue/
HntoC5bRo4ND5zBAw1n6DSTO8EQHiDKoC34xXbnrtbbsBMq615BDqZHlFcA6efMS7VUIcNFx19ut
w9nn+ScgtYAVw4iU/VT/mvnp17WdOOLAThbQBA/r9G+Zn35bux5pASUYSCKrATwEhzbSAQNlwxnZ
/Yr4ifnQNS6IPUstiPlcOkX5IiVoYg/R38gw6Yhu6jxpoiZ8fJ7UXnUzpOmeF8JN5GC752lHSkd1
0aPLt6IIB4/2XkCLA+XPDYgfMFK8sScJHey2Mwnc+3vU4MITSfOdBcuvMW9uZbpYmOlcp8I2kIYM
3LRPzU/3aZ/ArgHYBfPkMVDKzqiuyAvYMxQe06RPdNgQqPqHm2irhiNzx5H0sVM1XkA/BWJhZ3bR
LuKb/LeQ/2LFk+axcLFhnv6zefrj5s2vAeorDKi62z4qOh491DqxAbC6WQc9uhqluBF0jxs0Sb2x
qIvOV/ZJf9MO3zFtX5++K7p/+bF9HDTxZo/ri7ads9HlbQQB8/OvssDOcvYo+0fQAqlrCLIS5jbi
KUJL0SHp1URRl+sVtCUAISZ5I/JGvAOJDEmp7YZ5pfbV4csTHZjO1hHntK9DbOIWhc7HCpG9GO/P
IfpcrXODKLW07pa2Yk7dMp90Vrcsawqj/SNDVPKckCOm1Z2PEaMm1iHaXQfCw6HLq3QTOpCYlMpa
/4gQ0mmWuw2M6vpZ/jbG950F17J1VAPr5Y+eTiRuA8MSEpZ9CvrKkn7+WbT+UAeRwlMoZapkSmvW
sl55AybwIG4E7cBHaXdCu4H4bx3+lp8keDOSRBfmMdPqeXrT09AsdOSXa9ZSR9Y89F2SP/sWZZk3
7e7XmzftOtfduXYcJpo3v0K4gl9P6+SN2BqCMJm/c4qCECn9NcemoulEbTEaEUZAEgaUbvTyCEI8
y2mKbUB24B04wZ2xzyRFjyaUV+bNLbqi/ewdlBtYfWxaTmyRIZqIGJ9bg4y3SP8S8Zc8/9Hs6CHz
WlogAe6VurIny2gBzCJ7xbKexZEVzJtvmeTat8zgiofnut5aNgz4UkKV0f9d0IyjXTvCRhAjlDIv
Ib2IH0ZLp4Ytz4W3LnzLgYftw9AiZRyAGKYC0T/GFYc3PAASu/dsv/G5HPEEQsWCQsUKrs39NNOM
nTXR/JytDjimWRcoOh6k/tmxf0Az1lhNTqzNED2q9nGZHnv2GuguaRv0Ck82Qa9eEmefVH8Gt3Sa
N1+C2kD/leszlO/Yf+B5yzKj64C5fTmUd50wx/5V+APmzS+ubxuGUhuV7wsYSCH/fdcrbTPNm59d
jwhgb+GcnnFe7vottGzyKP7BoxD2UdqQlVVZIek5SsLNkWw9VgMf/mC5eve8A5/EqiceYySgn6Fy
AEa/dR57jKqed+Cv83KpPv3r+V/JBAECao7Ow9O//w7WFIZ1+g2uXIOQNLc/Rg7OkACDqrCnAX3u
wN8J6C3pQLcA0KUAmwpxlZGSzOzRFNCvANAk6quHH0sH2jaPvagA/XelWiAk+yDAN2/Z+jWg3W7e
/MyL/08gGzuPbXlxCMCk3rPSyZECuLa6b9duCwyocYh2pZ7PZUpSGu4bDlL2wH/Py6U3qVvXh4dF
pHPD0rpufvBLGq4t24YNwkPX/zM8dH0dHkb8X+Hhi0w8oCuchgd938eiz72D+7z9/1mftw/Z56+k
k7lKn73/2z6fyOhz/wVpHc4RbaB5VnQcHdHoLlUatqE03KdKw/uS0vA+lIY2wwQwsczR206rwtDW
kzxPtc6ORjZtNwqAtwGaYl0epaC1H+B9kBLrQBfCy/98AnWPaQsG6VDWozoNF1dpwCRbh1JCE7nb
vGm9XqRsECklkEeXkacI8mgz8hRK3CAN6Jc9E6t2j9KSem/sqUp/kbgu81Wf/prmPxCCpJPD69AT
BVVGArutEcbPtrIXV1uEhLUOlrBGIWGTZGEdJGFRpSlSVtr2lbw+fYjQ/bet3Ia1H/hQqVjqzlIG
S4WobTaahzVK+6AmLP8DGCxfB8NYNGynfX3zpraZscVn/q8a/zKz8dGxujNpTRtE00UJ0KDrUIsk
50tUaEaYNz2ChNM2C3VIW1Lx/e+G5YtMqC6Zxx6iuuelwaYXsOnPuk6b1/5IHF+2TY2tR/In+kbG
Bx6BJKR/YBVDXy8kq+cDPkt2oe0HirKuG0pbKxAn3NZBQEOKAjBugp4JUPtw7kABWvSAh5UTmz0H
/jsJMp6rVSQBleC1aqa0+VHKSccMD3xYFwiq3T45go5Vtk1LwUjiZ5R24dfhdiGB+TJWNe/Ap2nI
JbHWn5uCSwz2/hSST+a2Vf6zDRUlqJUT57WiyDy+Mkdtiq3HOYv8fdK24dKpXHPsQ02yy6n+/n+v
q9P/6a4eJ2o9kUGt/FcguJsa4yuwbyi5Z/ak+h4971ty/zCuXQFVSlvx+IYmyA6qvn5bPW6+L9BF
jPytLDyqVRDrsJEUH/s5SPR1OG3k48Nx08l2I/gIn6Hk30AO7TpyqLYNk7qHdR/Rd/fhlLbNtXtp
Dsj8W7PYvthkg2vbUpyotIIBb6nzslehgsNnwIqsRsOEjlgazO3P4dz0bnGChq1T2OZlmghsMICi
3IY7A4HlOwT3bCQsegBfWm0boHAjoRDPhWES20gobFMU5RE0DjYKBG5QFCWMygaVy6k5XFYT2oxt
QC3n9upf9+nf9gO0+0mtIYt7Y+uQ+X2Q+HsNhevpk9MBjk3RtTWwvcDqNVYCXmlFBVgcU8oAmJLY
hhTAwO4c6WqDALhDAfiw0vckwKE546s0ocMgGQGa8QSNkb3F7/wY9Hb0aHgY6wXt3XfcQNESeoS/
RoquaFcgWNpJG6navwOWvCpv14ud2QXT2PpHCebiUeU0l0uEBd7OcvPm1j/qnifr+W3XbrSeiv+o
CLah1ATKNhBhQxM4SruUmkBvRLXclunQCbb+MSWK9a/3hSjyyQbchwZ+xk+zDZlmvAWsK4xWZG27
Az4/YsAtaW9/rXskJO0Q7lFS4OI0uiVWP+yYYDx02lQWHwf+BjWQYdpZ9K8rfF/28PqLqnB9wxFN
hFvyix8+eHmVIg1SqKv9BuftH6DMcT7K+ocnDT8VjNtWnsVljsW55k0v0S5dE3uTNuk+j5t0cT7H
vLn+OZ2AayvB9bnrNYFBdAthaJ//38NIU9dJLKrQXgzGjXMeK946LwX2bgV7xS/ZgKLxWF1r0gbI
L3jJe0WVgr23AHt17E2V6M6zAr4FdMoYH41VXwcYfELB4N/m5dKj/rWkDrW5BJusOkwHoF/QGTTn
jeS95s1/xBinKT5wKCABLGsIKIXi0Cc3rllPYEGuTuuEwVoeh7RJtK7gyrz5pzriYJkUGU1NzGM/
1RjSLRX960oh82am5O5M5k7q++eXdyW+KOoSEgzs8ePbtOHseVKpJuJxgx2274g0ML7tyDxpK10M
ECmGpxfp6Wp42klPji0OLLvOivtVqehILHoTUlrrpxj8WyvWHlL2RZ100hK5cbDaG2KAIAmn/DrJ
sqGioNVOGlvz4DNkUjE5bB54BIq1JK3AbAPzZMLCzEETVKrxZaxru3yI9kXDChT9luiutgvQwcsc
s/MgSq+fBk86ZSTFagoESeC3XZnW1kJo6zptS7KvC0Vfx/RfGN0PzUHHFiabw3xQAFdS16esO6hF
qHJcduk0iUxWNt2oRMEYl0xYs+/4/vR3tu/E/vQs0V3hsWtmC2k3RiTlv67/FLzCviZSECs/xmhd
qfVxo4HWx20GWmVywh/o6JPOQgNuLXnWaTegCXHTi3M8mlDLDzw4fYsrA7bE26E58Jp4m126Bb4l
DrCHnAU4M9bl8PqbtQF2/bOY/FZoFuUKldEfyFbtLMQ80KQXsnubtb5kJqhiLqT5Q056LToubS8r
fZZAMa87qyHljau2ln5L2nwbtR8IGZUGqHKMHl5lYBZfs9afGI2QqHAc+77I5o1VOMtCyGDexOhn
IAO8V0jbC2JV2jUWjMx2Mr+bHQxfC8k23DBn7R8m1rsRBvNWk80X+hirGv0k7UnAk71ZUr82cjgG
jp+/t8Juh29PEGR7v49o+0ojz/rKAE2PRnhZ9VcaAelXBsKBAHIPQQfueaHJI213uJTOrx0LXklo
LX2EQcIxASsfx7NoDz/6Z1wNxEElsm1OhP7rdo9m7q8QWK/0cUkgqAw2drli7r9RJ1qd9c0TgwJ6
jIaDEX/uzY97gzEQ5YnRrQSic7oXTEcvFkiMXov9fD0B302giKsTozshwROA94LE6HaRfxbl1ybz
w8e8VGaMcTtXxnCzmhlNjdL2Cow0NR2AWKGUDh3yVmmSr4PyqvwI/fswvX8VqdUSN05Up3V2utLZ
Cud86PBC8vtL59MuDgzlPlZrXncjLuFf34ItXoo0zrCDJYnRYQE9LpPNEf0PC6hszPC7FSXXQPE5
WnP091AlDLjdD3nLfG4vbwOHHxIq/CHLXCR/MB3bu8IXADB2L3tdYKVvg5YCbJf4QiYlkxEyjREV
Pbg2ib4+DIMERUu8IWNaxgsRMF+s1q7kqhRAlPhDhoxc2GastkTJdVmyUU1aLqfU6izGvWaOxQYo
4ABm2Ck22cirn8Al4CMatfIzPzi/8nql8u0atfKBjFzUo9qFSq6NGrU7x9JyXXY+CNtVEDDeRX+z
qPmjb1nmGSxzA2TwYoYyylDmDe2E4v2jz0t+Ems9AMM5HrkYMYtDqxEUiw0jBeCCgEiZ4gL6Ma99
G3dHLbdqAH/LQ5rwOGl5tSZsk14mjytslpYXasK50suPkzo1XNfVb1gD9IbkniLq2TNx/yYwcMG7
uNrm7VHnE67fg6JgJ41S6CHxxyv+WJWhszSm88PUmUl+8AXS6N+k0P9ncthpVGi6BknamiLpWE0J
dNiqVd/q8U2nvi3EN73ytg4pExMMCjf04nSF2iFgUkvPPwGPqA6BoZuKBL6TDXZmANOZAah4w3Gy
KuXYa1hPapSGgisNXw+k4NuycKVWw3cezErTiPMhKUOStDvbIUkB/lnno/ACaRg7zFt0qFkHtmAe
2oOJ0bbvC5rhd+Gs4kPOhzAnEm/ALz9G5eLtTpygdk8y4+MxeASlr4GPOFXPHadpMrW9KzKC43m2
ZujtQehPHe/NIZHv6gnf6A0NhFDxoBqRutxA+m8Q6ZuIWtuda6EZxARfBECQpdY3E0rXNWubAZV2
AFEwwQCyAUjnYoUVEqMd30dlQLu7msfMkwV8idFOSG62xNbSqy+IH04h0M8SChKj8+A7qL/i0EdD
wmUcDNe7yDw7E307sgEq+McnoDcOSsiC8R5cX4RfK33MiRuO2q4OvQdVNmcH+IZfgCdMLzkBLuPL
dmrsRWrC3j8y9ETauwEMEF4HmA0GeJkdMWcBzI3zhlYMjbm+GTjrB05Rs87PZ0YAmmu2CNhDC6EE
G0i8yS59Qy11AENsHFf3v5k3GW72hkJY8ZviswdPuJyztv4tNDctFZwhPJg6B933OAa/R6xPj3m1
a4zu9l1gbmxjr4tk1Ls4nWf3cXM9wkKK6VggVEXVsZt+jfKhDF4CYCtst9NmvmgX7bRyhJxqOpok
eukVXcg2KMVwvEernLh/VmyPrHCGVYjCKYiguvlg8k4HyF7FEy0EWew+7ZpR5WQfIbjYK/iAfXtT
5Kl3Tm/WeAM+P0bL9PNrpiP6bXhAHckndPiuIWmkbyaGue3RheugRtTW0/8xkkKOBW4N2XoYr2Ih
DTPGKAw9CW30ZUGFoRZ46l9yvMcAretpyeab6pZeJHTgHvMw9SSc1pqfjTYurNLAHwP+wXad0O6y
kNI/aNeL7cagnZDzLhr47QZ2E3Y1ZLpLmMopGhLj+z2noHwTUH5h9HhkdOjjeWQBqnTWNxmreyMt
kV2D1krsIeceDZrKe+ETeSTYnAVUY9bLuH7CHnN2aciwRxWKI5MTE89p47uWEqDf9Fm8NWtCCagu
CJKbr8Rj2gehdyDd7BiOKvQMtNZ3E8iV0Pp5Q45jYvT0OeQk5EFzaBV4Q2vnCVyA3ja3r0NoxB5b
CwCHsV4IMnwIrcBfupVkklvuALThvVMA13pI8tWxAd5VINBlix5vK2LXPApNrQ8AKtohgz+YeFMb
djpFoXYq5K3jsVSR5W8EQvPnpaSEse9CtInWEpw+wmQSzie13wAn+sEhDBmpwMkGcARbnQ4pkYiM
CU2nNvYqkkgnRHjoyzYoVAifio4mAcD9OPQB+rBeR30Y/ZAQSdGuthYt2KlFh0BQA60EY+12zOL1
8d3XKkQTPd56/ZQt46P9vhNHu09l4Z7v8fptP+yai8evI5ZAQ8iY1l1T/jn9X6KJ5X/oNwdCh+9M
wwNOquFG3ehxcwzXPwCKx0nrOG7UpAY1HwYVB/YQ/ES7lmW/l3UQKnlvxF74jatdfwbpA99s0f3q
N3Y9NvBnkAPvjdgJ79LHxj/bnaFnsO23/lzhLIafAsDuG4DU906i1HzRiSG2LO/sEgUI5TgnIX1s
geqxNNATFceI5l7+9OUaEv+O0ELq0B5V/CtIr7hT5UPQLORehOyQ1Dw8wB8ag0uZjWIGqArsdPDB
CkCThSx3DknZfLFi46arMvMJDCEFjEQGQrppt5bMCLDuavaie9YKL8IKkW5yW6fiJnToT2QYiOJI
Fu88rdHkXloB6Yks/IqnIJP7b0T+cHZiBD70KO8RY7OGPwMwzBg8H1LhNKRvlVfek/vjcb883V8G
/f1IdC2jBh8GZA2WbpxVDo2MLErEO/CJdnxb2dY5kzSalQlkAHMMF5lZwnU6PGzFizc2QaZh4fvZ
OrzgTfqtBX6fA5MDROxYr4/uTup5FLJzVMX9yy5OjOao1Cx+yHAhOMD8zX+heFH9IwHFZl8D30Hv
Rld/6wPm9qc0tK/aPLFHSJDO9hvnlNN2RoJkbQvgAeCwIT+tab8ZYSkbFjaUjYhkSZ9qIx/L1Bt5
I0IP+W5nHkMsqFUve/O0unois0L2u4EwTgX4K48QJE2zZ87oEWBKJcMjF8vU96bZ8Q7sG0rcLYcw
ZOqMnvTam2aDZQNpTfBnttxhgnzwFoytQ3hBXdTsy9KwQGunfSzztHr5+z8nrdU0m0LNiPHeirWB
ARp8oQogehnDg0euYhueRSW/P3wB2xZrSaqsOAiHd1MjxDoQBrYhNQZnmzXs9fydPn2P189XPoIj
ULQLx6Bv2ThlDDDDOiwHoqWW4DEW7eofI+rysrfr8vf6G/j1AtJ8woLr0/AkV9/yKzHa7ogkjsKj
i3ZR/2WqTl6HYM3s0T6VjjhdEnE92OvMrER/MZPTF2qbZ1jhx62CidHG7yuUq/DDx8aYwekFMjH6
QnjvTAj3nflTjoSJzFEyfMEkAurPpHBlFg93n7KzsVrtmpxKsLdP5p/s1xUlaI9xB6G6K2wNeJnH
JIIbUxr+iybC81nAEKvVB+geP6OsZI9YQ3MUCpIfFhTUOLsn2ODlt78OY065eg05GrYOn3z8I2SH
DSJ17AjxHRBcCXmGiTy9FaVazaDb9gR/o3fysqbNrXnJAr9ecMAvgFdHJr2NnjiaRfR0kPzjUCHI
DLBAlKmeQnpvBgHY81qWRm4zyAtMciPKhQJUZSPjngrEH78FgORrcIsILTOp8kMaMCz1J5zRnavc
KD3xui4TK7fIPktP6tUq+6xprzbZZ0t7tcs+e9qrQ/Y5erz8deI9Q1FXz/qFUPdy+FkHP7+AnydX
qfGpj0lbFwLRaIK0PBsBwn5UFJNOJSIXhNzNHo0/wA0PKYPQIxM/8B5wO04cvKRL6tLKHTi1DQRA
X4hUeDt8lqniuhfwVrdSeo5czn94RoQkD+VBxd4A/8+fUsUzseaNmOdlpLvSjUr2F08p2S0ie2ta
dqryhaxU7d+LdTyBXIYj8dN1GqH4oezHd1NZ9+CmlFam8t9uwAn6ZfDSbPJ1bmyFB/596DEb/R4U
lTesnIRzvPjYEUWRMOKju0nUy+vkSbhRF6vBbUECldkv4xJy5HvNo2IbsCpA35/+KwXNswKa//rJ
oJ6ITpijNK/T8ajoCP6PrWuBF19saxj+BNF/W/JbLOsANrmPjZ3k5zdQzwxyx/pJGLXKFJnoZTkg
pEIIfmL0l6oRFLmcYch2hddmxhFOTZOAH/9h/EaWw2pMAW9iX2gtMuDnAZGL6wheK8K75S8ocShs
tLT18ckoX4MUsydiJjkcfFiA01hQuhE/R26JbUWPPMjPEhkZAA9XCn/Py59/R1DbwCFz+3/h9Dg/
qGaKfBD3FCD1SG0F+sjE2FZUFEG+JVmJYz2UP5Qqv4jKP5pRHsmpvbHA3P4BinRPFRQbxdzIzcNi
NdU+JXJoR5cipcSnEbENaMaqcUU73hBfxzA3jqE5tu4gSh3wi/G7iXXsTJa2itJ700t3Dqqb5mqS
LT82qO4Nj2NZoGGl7vWD6l73aFppTxl2BMfUS2MK+MeElKxNyt9hyrBSJufgUnmDS205v1THe2pa
qmDHYSUtvexHQ5TlQ5RdMUTZXw9R9okhyj45RNlnhigbmnR+2fCk88s+Mfn8si9OPr/sG5PPL3t4
iLJnhihrqDi/7JdDlLVXnF/WOUTZgorzy1YPUbZ+iLKhIco+NkTZXw9R9tkhyu4couzHQ5R9z3N+
WWPV+WUHKs8vi5Z6ZtnYRpz/q+O/ASZBv9EABsVVQf5bfA1iVMcA3R4AFkpiXx1fruSyRRORd1lH
VfngZqWtqMk04RFClRV18RePY5BA7yBIoMIAtd+EvkWTYoGRvdUQLEoUHS3d+uvJKMs3azTqFXgW
f52X37Re6IFDIIN6YiHtetX03ME4mKMWMEfTZ2cGWI0hVvG9EQGv3PEkVEhtykSrYM3hfbUXh+qb
yUySO7BFPmutYm7TCSpLr0abgIzoF5i8/OWYRtOAS1J1Pn4gRpDlBfGb08t7YqRS4lQNWb/rsEW2
ARvzgQr7/D+pZpCzEQNVT2CkhqKoq0mBjKpQzmkJ+yZ36XKwbw4zxb4pL+6vFQ9V/R56WInit3+i
eEZx2f9d8YyCtf9y8YyCsH+MeEaB3D9MPAsBGrkw9Ayi4lMfDzICFc/1a3q2oJ9KB/xD7fj9L15+
Y/L7ei/ANAN+vg8/C+DnfvjpgJ+fwM9G+Nmm/KTbi+n2o7jfoOh46WY7EEzkZjR5wSK8gqJdg0yv
NATBfSbHKBtPKfbiUd94NsKk7O7KjpPqpSjbaE1b6WDkarwxo44dhH5lvUC5e4AyWCI1u9bqdGjY
sXAeCxpiNdqgYj5PQYoeGwBSu2472MlTsJ+9hmxNv16erZmJBu1stGPlQrYaAW4aHKAZ+8dW4CfF
f4LeIaSG8HDcHplbVcjchUhaxhP7L/PSS2b5eig/qQKPF5qe2wP4jh6PZD23Ex583B0TZsGiilSr
fa8k1K2fqfbdqfVJuucE2DUrVvlOUw+rrKjLQo4PePl/rRXzNgZAdxXuTxHn1zwWt5dftYZaKq20
RcZh/KERrMayRlvWFL6yrLF/WPRQxMgClhUTG8OjA3zYPr1aT6S7cSbeotE4k4xYjKq88mO7Dt3H
QNHRYNEhYO1duGdLbqVriJzyk848jC8Bo1b6pLMYd1t1/BRDiTzkLMT4odsM5k2TzkhcG5+EWxE0
5vbdaM1wbXgexcQ5ocVQikvGsOvYEhPbhDKnNNyeF85yu7oXfeXqjlwqnXQvtrFhbKqJyfhZrm7P
w31I5RSlRscWgoGA6a74EnBYoofM0c804vBGHyeDTq2+4purr/ia6isGV/8TtXrawnc7zn6Hr6dm
zNBMIrN+K9ZvZsMGVStqO95jCFfSaXYbu06d/y99tr0AnYksPL/+uWsHgHgWQbxOFh+YwPgUBfNq
XchLbmkb3mxudbXTSCzOxZ1yfQ+IeMw26UVK1bAXnSU6WimjG5fNHRjMlz1L48UeozxSr0l6NaHs
T6g5w8bgFssvMPMmz5cS14XvpMFDe/J4tzbsPL5NGxnPPANSl83LLxGkh67RiYPPUxMPb8sdA59Z
lan0dziF0YfRVjCeVWgvCqQ/1/HfdqguLs53rNyONNeDdV+CdY9hgYFmjZ8fO0NbSUXVudnHPWd0
YfvxbF1kLNTerAV/L5VBOqyjHIbwWJb9hCEyitUMMJ8Dr2CSPjQM3ysjRCtayjSR7BUteZpw9sqR
aI0B65U+gTBGIAHlrXSzJmxI4M1XvRapH3rdD/gsBcSGwb/fcuC271tOfNp9KluZLMV75u/u4mCy
5w/g4u/dCXym1ZdmnJXFi61Q3xR6y324VpYYraHpBfO6j8TQFItYgR1valKDMh8bN4gYCwkYgjP5
PeH58DMxv8ccpUhX2YDaWL3T6Wc/RmL18zd2ZlEQ3yXqV9B3v1ScguWf9H8f0yoySvwrlQBBgl98
/DdpuYtZNmX18mUikz4XfPsxsbVEgT4/nyeSDVKN0SC1GTVhnb4f0JV/2hy9jQ7HsR2z1UHF3mQk
ZIpfRf5akvJ35cdWnbJ1SEfL/QZvIN6B8pmcsksPaMR2GfNanMkLBvgLYse9qWg/ev4Yf8GE0TCe
0IIy2kosDsyA0zu0S7jVaX1CFx4vzB35ISdWHG932pQ5ORgyfMQbiNCCuGKnT8xIAjUGy31i9JoA
SRduOYGH/AiuxpXbEeQe0GfKU3r/KP5/kI7vvs16+bJPgWLBorhMaqvQhC8JcFOCDl+C2htJGWaJ
DOH3FU1F5XnHZ6LYuPVUbmyAv3FOLTeMh8TX8F+hCE4MW5Q93BjnFifngw284ThxCtZxOVVhD/Af
J6swQ46iZI7wX5qUyRocn262TzqslT7UxQyT4PFDY6xilUH6wKDvTto7bCRGvbF1jqLgN3WdPm2Q
In51+nQ0PTPA3jU/edrWOcPQ/alNebN0zsjChx5j96eWznJ954zspk5fjpRt7ObGtB10YG8MgIcO
crnGEGh2kOVFto/1h2K2bOYqdaIG2wJ1ZZSrDHIV/DbJVXju3OKV4qag7LXIVda424bTJ/yGqLhB
DG2QTHpUzqvSmkYOu8cB3KHsWbNgVCnW5GRL8+KVDqTGPtwE0GygbSoYsL3rZZqDI88c3X9pwBC2
oyUc+jUC2+/lT61U5R7tugSRYfPxu1eJdTLDytNuMO2W4OEfS2gtFvm7nz+QWUQEbzcE6sDM54iL
oxFbaL6Ci9pBeSvwVJfrL0uvq2tgcf4H3FUgZvDM7ZKGFm4tICu8DcK0pzk6tRx7Jf81X8z6XerY
37cKP8IiJUCKRxOtV+lPQLVvI5b6/w330cghhzzdKS/Mg7aFd5AC1hRoSOwNVQCMwK5PrqBZFRVE
jBiXOkxL+LeldmShG2FvCNB1DhjqwMh8FVKXKYhh66z8VxLJLDbQOctpW3FaF8kRZ2nHYiQsnOG9
1PcSjXbnSiE0EuHp69lSC9uBeJfOGhaNYQlQdqMi1+FpsW4DSF0YssUfg2yrWDNq4pjIxdKAdknp
Gp92YgBsKgxIVrCmXDfRows7g3xbXK+6YJHfNTXijD0do9vDf74Jd+TYelgtxRuTh7FKK4qooKzl
Z1aJPYDMa/IGE/uVKVMMDroHvK85SskUPfrQ9Kxbc5DkNJnLfhRxARAWr/LXiYORH7LFEgB5H1tM
NHk9kezDAL/6rDjeDYxdGO1qux5ZwifKP6iWD3dhM9LzVDL8yuwtX4i1idnqIoWyLgH87ikUV0LM
dzqLDg33FAcjlrrE6AFl+5SnUA4UgzzwVZT+nNTqA0WoPW1t31PPD1RQ/BYnLoA71thzAuxNbkyC
MbvSBdK69d2iQwG+CMPVI35dp5flAOFFCl2nl49X2mI1hfk7pe4ybBO4Jbqr7VqkzZvZGDDGSx/F
psPRptlyY6HcWIyw4yw+sPtshNBTLF6VzyTLlRSVdlP3Jch2JwzwqGAdL19OZES3ewGqc6TDZqQy
A/hf4svxHFQ6QROrNAb83hh4BPzPdLbe2Hg8B7VOrcUHwsLg51dBASAKLA6q2kbFLcdzDOAlB21+
0npcp1ZqxJJ2peTHbVjSoZT8SxuVZAZnfo/wP4u65GzZY8C7/zwm2WORPVbZY5M99qDscdTJHic/
tUx4JdmxBwygJS8IclubSKH7AqW4EUys8CVBvg8zxg1Q0MJ3UCGo0wopx7MNYXOQ/0GpyGOjNCOW
+UWyjJ3/WC3jgBQWz+9B/wJlToAVMo9DXJSH0xG1wNHKPN0cSghiAk2LVJqCYuJPddx84oASEEjp
L170AIFZ5F90wd94FN/o2piX6In9CZMj99bV0Vo7res354RafuTRNPD/JnPHLke3Qx5XT6S8gX/x
mcomuAYPubwNPPEAydNGwVyhsh+hFG/gXEmWCQLxUbSvT7avD0bqGFXfbAgVY8HcUB7Wyt99liQg
NjQ2pBENbXhAFdxUmasnbAq9Nx9b61usVTtnSFaONwMiL8Wofq2PZ+8iVIs6n5lPdU7KrJM1GBpC
6CKB0EElIEcRP64vIqZQJ7Z0qi8X9yVgjroA738WnGkCPxbbiY1k+YCuGg28rBWSHn4Vk/T+3uge
eNDy77QKdP7ijeRIZCWBzYqEWBQ/PIeXoefv9MUeysMqRfU4SVTygqo3Afq5Avr2+wdhZFluqArh
PNk/V0vVSS/h79zIMNEgnVJG0VYHRp7jGR3fdipp8owNWUSt3x1cazg39B4qzw/7R+IMRtZif2gL
vn/QwHUiL3uYwOT6beq0e/hjRriTfyGoJ2xp8LIpYqZMEGNTBmmgRRZ7QBvkK+4XVcSR1aQB/ZKc
uMeIJIMbg/XvuE4vtq8P8tvvRzs1xxDkXuUJF7JPL/obmgXQTgPO8I2U763CUMXxSdVzfu7WyIQC
MaSCqGMeq5d/r1V0lzT7jJQ9GT0eHnPcU2CIWEMrkDT/EuDW+5QposYe0NIbzghmAEuRDYDaSEQK
AnzfJ0kOGRfgdV+q1uOoAJ+Xnj+yl8WT8ywsuy7IWiqA34sOAapGpJhdbnQwTxmlJfldbiwDGYBp
QS/wvkApXmMwf3DZ+czTMrhsi7hyCkckrfhGuj6NVhXwS1olG9fTl8fVL6mqNhJ70Zz74NroDj1a
LRhc2xb6sn2I2rbTl71D1Eah/mmdYXBtdFncGD9nL4vd+jPV8/U0fpGsmOedxh7+i3PCMbhanU8A
3Tu1QroPnQQff/rzlJOwWOQM/yXT4pU+LsbJnkNB0NO4te0YVHB3hfmhHoxUhdFMUOqAC+WEH9yM
X0BRC8GVhZ8S+CmTQbuXtpWYozk4bfJ+eESs1sB7wX6QugwYfgdouzpWYRwhe9xyWwVKIQUrnjIM
keiKRy4O7VmAAqiBP7gkjT2l7cU9eClUD7r3V+Idt1n4aziGhu0zoDqchUv8ZfydpcRBc1zvmx/q
ihl2IEd1asFITmDoRU8VC1S5QSWiWp3r5f8pcs8Cbpruw7SFXr55KckvgB5vFfeKuvnKpXQEC7dc
gkix88/ATtACyFu2A7hFif6sLVsWoECfcZ/gYMB03FNCKqitRKfeoVrBAu78vX4WKNPv9Qd9/NZN
SWF3cagdO34I5H9kUMdd8WUTQqEFJLTuwx2lnjJ2m6mBiMMqt5XJbSWpzFpoxFNR6nFHxkIziohA
FLeVAUBiPbFEH/kV81ThZDh2z+r3hs7gZIyOX02OH+mjYSE3NNnXjL5tW4krHr4oZBcwfBUePDIg
1Fa47jRH8VYDEJ3W3MWXhQwLhOiMQ24Et47ATRWK1WX5+f0RxWyww9iX80taIO8UzLsXBoo8Ij+g
2/nMPK75CiEjVI1qUnqSAQAYC1eH+I9Eo35s1GP38l1L01q3pVpHKIcBlHuVApdhgQbMtz8DSjYF
NOV0GEeAaID8BtCRj/+IdKQDT9Lgt2ZNkPf+Pgu77tTEJmeZH9rm7XwE52/4zwhXFnk1XnRMp96W
DIvTC90LDsa/1HWilBKWZItc7EH87YvV5fpjqydocZn4B1C50otYwBr081VL6PoZULNLTfJqpDN5
dRm29w58QIk7m6AfNL+iygsDLXWj41FNUZDplK8DbSlHsK7B68MTzMcwqNMAeBruCiSIFhAi1dD5
Ki9/iydF/0Sy7v287hNVtuQpNj0FrVDr+vV5dUWeBSBnzxzkcEsfO8GiOxhgf0QMBNkDJpaD2wSh
HAYwgw73XoSzbHIYRBDYjqWV1ZFLGR6X4R8AIcXqLMIFsMUrq8n7G80qvay2ngUpjDlIMTsFRwVB
UQrFF10BBnKlV66sRkNU4MzZkx6vC9oBpJTlz6d7x7EC68qzReiXZ72Ef1hlNUaLvE/qPYN8FPDz
GYtpVO29mqwEnhyrNHjhiyNWpUX5VCCDPLwBs0jYQ2+M4fgiDxb4+c2UjqPIWAltzwSvoYT/O15o
9FaDn59bRLuOvdL2Augf7aLLwvCUFXQOvdqZF/DifW8n/pCaeDiBuuSYOTpKS+tdNjrMhnHWwGuu
rJdrp0NFyEj9uXgzUBQvAqDINPXOQjFT6Qtp0ALSsRPc/LkqGsztf6NFJ3P0pIamKBEeA00RT9FI
/E5z+6W4aYzrItNjDcDkD9+LixXQdjHQOvpwx8yruXD/StCOCcRuy/WBQOSt/5Gl0f4R+05eu/TT
Mpq0rjJpw0CeJD+UkcUgl6VQ1Lxq+jncNnn+MCpIsYsL/Lxybb0cnJ42IeHsKeoKOe7xaJJFnc0n
vfyihWmzJk7cVeQgOdh8yMfP3pP5DcZViER/vJJOtgFwNDH5RmZGFTxlhhuTYlOyvHzZQtIpTnar
Ccj+WGIfcrRJ5JXOac3td4K3HjLdgxKqTl5q562Z9Q7S/zTbh46ULYh3xj59JmnyFqkUXWNio9g0
YRKM8/HHjiTNNirSmiwSfqMJmFP6uJA8rLIAi5iAfadXBNlLSLhSfITUNouiHuOBanN0OQ74S6Tv
zO24RsVeciML85/do4y9Vxi77C+4hOQ6tigHT0Ja2EHcfFsX9PIVT2Qh7dXrzwV7DcM1fI5acA4S
c5x2zVDU9ZPaJXb2F9dni/SxGQks6cGSoKRpse9CJJ3p+nOQ/bJB83845ydX2eQqu1zlkKuc/bhp
38beZ8f4gWOJhD4uRbEDCTmKoEesJCBjxI9ek1csMSKFeXn43uShSWl7YQ+bbKgLJvbiLVygZ/Hs
Z9scTcQWcuPInarjO36UNmyFPbHaM8jxVX5ecA9RenWvxgTCopqhqz6X1czFz163H+wUnotZokJY
xFRhAfbIKFG0AFRA3DNL2BmzdJF7+EEkqpo5QR/O1fX/PmlfjEij/cKeOtdAeAILzGGTTWAeEB8U
dTWfrIM+yJ5Z/MIfpU3MQQdr5rA6k8CAclsMNErOSmBuDFEiVHXIQMKCf3RUFRVhcEPC44lLmj+s
g0LEH8/Oz0AIkKx1xS13RjyxSuCKu6Bt5Igg48jxJqWQdFYbGabq5cKeJFsssPM7M6uLBbP8aksX
Y2XHAnzbPWLW7/hSG3QZR0uZ5DxxcPYlokY8UYf3TSCt4qKNF0+deL0++SUkAb8Uz22Q/0Salkib
v0/MYlNbPd8epxnVaqFc7chGdmTOPNKwAf64KI5DcwMLmGgZkvgyz8cNf1f5EmP/4awxsHSD3xvg
zclS4d1D6U8M/G8jnrWx2SY2PMDurQii2sJVy5vweMASExjyefiENzxID4Q07GEkr1ir7iJzFGOq
ePlDC9B6MgSQqCfjda2ofaUH5iNRh+8R08vHmjNnrwVRO/08OF9U3avBmK55wBzy5IXs1oWk5YCo
Jxt48fwhiLrEz8sonTgultSAFfw3f6cTVSijq/xe9pqPXzifFFUFxokG5Mcnh4gDHgjpItNY3fyg
HxXhJ/+hEcd4zGvxfIvggJPqdLRrwBzFG+jZ5PmpbRzxyfOJuCeHiLgnLxTWMU0i3Mm+4A8cScpU
o9pzkDK3hlzd4UtQsQp94OP7786cfIdqpG2gCtc004FpKzh3JNxswsUzAdGgcs7TkghqGvUnRIJS
WCH1oLzYzu/PrPdr7Lvz9UGAH6aZX9rBkp+hBy718Yc+UunNgln/lMwafrMpncaAvtBuphONYM8t
RZ0QQtPMBr432n1G/s7fEgm6qLctrBiysVng75GS6BLegVOzxbbQo4lkbbEsRJfpKhxMcAXB9JY9
LYLaLFJbC1Lbe/cIZ3BVKJPaJp/xkvfC++6mOgsoGI/54W2x+guMnRYKJozStJXVtCJx2YU0fQFy
MzKyvSvjE8QpZif4YT2EVjsBFx6tnGGxcNMRcvIsuMEi7gkLKRvWRZaxQAsxGi2I4A69IYSsqafB
dTBcwmpawK8A2YnK3Qhmp5NurQ5v6bqHcPAY/PE2n2zgv7wrk2Q8LWDxK2TpaREyN0xkWdNKgQFA
8OaBgWYUMnchT5lnS/A28l1yTRjI0qYI3wZ+86AGoLModYtRXvLP7sJ1J/S9SDbiJq1rFcJrkBvt
XDuoMBhksaYs/vM+YM3bsBCtGiniWSVMsd4ZPR6uUe7h8tTRjfZBsDWeOZtkpYLBdonhw6RdQnnb
z6bsEtx527TlHXH/eIXTQJtDq51GuZN2Nqwgk1EjFl7Tv6ObI/LI68t06d8j2h62ooTWp6vhfVck
q6iraH8PW0mG6I/VzHvU+6/ng6E/hD30UhW2jAtVye0V0Z+hDvIg0QkTgaZaMZa8TFvqgcCrFgob
4Vd3puHXqIpTh58b7yJx6uzVGGhfDtCjk9UY5Bh6AFqPgT2MD4IY+KF5KDqF+/jwBGW/QbGX/3Ue
VVKI1kIU4RRz4/QUWc5iCJKwGJ77zZDEbCSL4Tr2MOZUjAbnQtVoEF2iivnBuWmmg7FH1J2yHigr
ETNl1yfh0EdmMuoT2RM+nGR55k4+7G/qyJvb8TgZjOblSWuCaiA1/4O5GdhDzSu+GshREV35i9oV
qQvMDM2dyubEATQI/ILoE+ErFaKX2+zpDegyG2jg5cQPhhUvoZevjVykGL9hi2Ix1pnq1B6rlWA7
Dcr6heCTwQGSM+V3gK9NrtZFrqF42+l8comPv/eX5H6BAG9KLe293diToldl/foY+y6bXYGEunWF
IM6fCBfM7uW/RvK4FSkUdZFME6cohIlCH1MoNPH9TAoNnkHisnr5vLliyqtXO0LMs9lk2vTNNuBv
dbYNmrlJZMQ7tAp8CsVOJcTa47QdmqiSwEOqXIdgIFU28Cv+7RupckO7JkmVLUmqFN2givmk72dS
JdWdokrKSlRJ2UnKrkPo6cCLSozLPkwRoyJi6WbeNClbxw/ekUmK80FQohO8/vu4bJ6kARNGmk7R
QdKcbbPzDZk1fCv9DkLSfC4pUAtVfy85/wtC9en3Mp2991NC9W1Fy/vwQuRjzIObOGZUSANZuF/q
jLTNoAd9gy05cfU9Nn/iKGlAt3hMqOVeApp/NCcJ8YyeokTp1rVEYH/UJJd4bWAT3YzDX2eA/gPO
LbGtdGUrTcXLOQDVmFDVvYLSHk6vLjbljDfIdYg9c6/2AqSwHLnjUaIv/O13B1Gzf3CH8IdwHsTr
C/LP7iD2xjvNyvxQwQeE1DypzZi1CG/vyoM8v6c0PKlkiXesVeivKCER+LpIq1gnYHS5Zf5eqMXH
f/54khCHJwlxBpAhD39XyX4rKu2QE/sCRLiV+kc18peakkQ4o4dtWJ8kWlQLlFGAoU92jqKz4Axo
AZDfufeTA9aOpLdWkN6YJOnNbkrDG/obNMswdo7wpxrYgGDvNjvIuWopYQxfKyWGQ3mF9vil6eVD
Hy0UqTkZqXuU1M8a01LVJbRv7/8A/T14NjnV7FLpdYwq3Cb4eOIdlV7tyrSVTS1anywa3pPuBaH/
A4MJRHyvME2D7Dmhnq+UtuJGaVLP5igeqeBPI4VMMTQoahmnMipwDToyNvTGvcLqNCU7mebiWPw8
3CSmbns1OxM4SQCWJh3dYOvwN2ayCXvzVsjYbEUhEnrxXrR1b29Spr06SUln0fQuTbfxW8SnMqDS
OB2LoRm+YWzd4xq6KsQiuqCL/AintIJkeg7fKGaXAT8klX5M6q7V6Iqb10Y1yqYesVSgmp92mda4
ll1KTj8YnjI1xh2z0/sqINAn+0QCXMjBXTzy5yQhXlOUcMXDRaqNKROI/I1Z6XXRDByd62lqJIah
VHQkZi/OI/9WLFKEHr1XmJuikgdnqdyC2UUihjiO1WT5+CKAVq4zxAIj/LKez8W3ycaYZ7RXrjPx
BniN1Vzqkydb5Dor91BeeyxwJTifNn4jZXbEPNdAZifPo8zXQ+Y8ua6AX0SZi2OBmyBzIR9GmUti
nimQuYyfnoWZb4PMbrmugn+Mr4EGPxvgH8zCjJCpnsWlw9qfyZOr5LpqfNb9LHdyVS48Qy9p+0Ix
ncPETtXRTnGwjyfRAsah8MQAL0np/Gsz9P0VPv7xWypLjAlwc7q+n9kjTOKZg9bzTCn1j/wgxZ3S
1idSjPDbpAnwq0ZcJzE0KCbAUNxw7vYMbhD63wL6fxapdWuvdqfQ/1aZDiOxDc+k6X8b6H/I2IwR
pxwh4yLcE189S8zkIkf40aEr9PGSWWls8ESKDTbgWivO3osOIBsATwij1fAvKhs4hmaD1GK5ygYO
mRZ009mApMJFt2eywRMqG1CXyCT3Kmyw4N2vZwOq69UZGWyA8+7rnvwaNsCbrBpMDWCPDGKDzhmZ
bPCEYAOgX5DtP7wd6XGET9YDM/DZtyPtmmKB0UC7Rl6Dr5MtMc+lXmSDWyjvlUC7NuAGXkiZnbHA
NZDZwS+jzHkxz/VeZIMLKPNNkLkQuIHrKXNZLDAFMpfwL2dgZnfMc5sX2eBvMzBzgw/Y4N0Z/5AN
GpAN9qezQZJek/xQj24i8EM1eVtIwfYgXq6Sn+Y04nmHdPvm9QMp+wbzJs6k2TezgTMaiUXSOUT6
uKSuoehQgH0WpOWpUMVzBsEbdrqxSARjKlCufSvGq9/gB1e53fzYG7TV2EvL2UDzpRufJaPnRUFv
1UE/v22mRoO7QQzI9RZagQKGcfWAUW1fJHjqP4Jptl4J0ohV6iY1Y135Oq5w++VWaEw/g5jC1qsZ
mTSxqaF1LyoKR5ngeHc6ZZxDAfQwPc/P/3s6LTPgVDFOZPEb3lFmNVppQcgqDqST7XOoP5tRME9p
K6VFfkhb84J1Xv74I0nL50KZ8qQZ4iU9DUHULeErQNuA9aPyFOGE7wikGd/QyQaTYnU/qzCXsl2C
OgOiwkuaxgkmz/C3k2P4Y1GZqydtRmN+IBN79U4vzbI5g7ToSycj6sU6ucl1OmLmL8wgsMnoLulJ
zm+A0X1ZZlVfa28n7Rg7GNE72Gt8S4ok81P06PDxW/ap9HihkjWWsrjfJLPla/yzrsH+mWFGpn+2
Pd0/W7hIWM1NDV/jn/UGVP/MnCSenSSfd2b6Z78InO+f/S6g+GddSf+sS/XPtif9M+nhb/bPtqf8
s+pFSf+MukEV83+tH+Sfbc/0z7Yn/bOupF2yc7B/9uc3zvfPugb7ZyX1Q/tnx+q/rX92vO7/iX9m
fv0f+mdi/tWmI6L5TBFZKFciuczMG/cqU69b91Dl1U5nau71mEaZ8B/QRXK2WBd7NP1maUC7xQhP
4awtZxZR4B1QbvyRgLCL64TUop1KSWLbo8itz/2Z87G3Cpnl5zPqxUwT3aoF4OeDgwI/uWiJ9mpG
9VvoYKYutz9HpOQASWpRM9Ipc7buDUWeWYU8G1af7taJGbExglYAE3m6yCiaqP3BG2kTtR17kqRK
T+Yo7W+njiAf1NEy+d6ffMOsLZAs5Z5CJPu4QrINCjKoAf6pL41kQb2voxINSZLdmyTZPUmf7g1B
shRyBFgsZBJzt8/uT83dLlQId08m4Tbw5b7MGVhQTitcOH07GQyB6/zKNhfFyQMPz58u3iZlFi7q
knPkSoNcaZQrTXKlRa60ypU2udIuVzqknix2Qq508q0HaNklL7WHaMj53XR/zybCxatKG3eTgNyb
klp6+G6K5MGete9J2rM4xSlyj02tPuwftMQl9vs6cI5iZJDdVyEOYkSQuJzKDjNw8PXoU8RmWUYs
vkQ6qwP/li+m9RN+kzfNZ5W2HhRiFo8M4knVOuEH0v47meJSRcaEnsCip4Jcl1H0LPLQY8hDI7c8
BH+e64Rf0aPhrOdWLBYBrPxeH68BOaEsVJT4uBtGgO3AUeaa8Fg8SJeLyO3VXdhvEctlFuAJIPNe
rVWI6TyZ4guwDYfTxHSBlx/3CuZGfiUxXeLlOkGMgIyxGZ8KvfzvAnQxy3EwyRr0FHmAbcD+1tGC
2UsPDjm5EQSGKBT7ElktTW5MXywYIqhgi6rlf6nJmN6g/JXK9EacMgp2OJg0qbFjtE1X2NUhi2CH
37yeYoewwg4HNRmTHUG+sGbQZMeKZZo7IxNjt4F36KyF2oMmMAMPIjOaomK5TmzcVlfTGu28IL0O
miw5UqNs7NUuvhQ3YDbgVI5CPuduS+tfrCHXz1+sUfYo5NGulkX62EK8CM8RiE0Z4a3jv1+dpek1
jNMoFWHZtM23/9R6cdKe/fr5ktd3fu18yfYzQ8+XpNY/3Haa/5O2bsGAJg1gDr9Eezlo3yJIi46d
dLZ9D/yOVY4PgNaejAGdPAaFaV5MHcofE3omLJaIX60W6AUzf0aP8NZidCz/OjxTCfYxoK95JPqG
ocfDODtSVkNHqICAQ4+G0UHMp+Fwyk8hWKX0O9LCNmDjIkAFrokHcP0Qw+bhuZAxoYXY+qEAr81o
fR3mVqK/FB1FmJ/CFNfZsD1UhSVOBvilSgnRHJWLd+AjbZHCi40JPXpz9HdIuIQTb0NDQ2wdAuSL
bcUagyErVBfghTTjLPzREMYU2xG+JFQYpug3z956XkMsZ0VJceTqkBNyNAT4TyAHG6uEcJBqCgy4
0/N76QXc4E8DvIyznIZYVZbPmxh9Bs/CjO01XK1hOV7+umDHoqMCU0rZjBtkkdJMyoIWng8EM5UP
nE3f7V0MZtB3A/yvXclJCUeA39mbtGyxRG96ichrYveheh7QwNwF0mElagDQ115BXwp10dUt4AEj
hXGisI+RwirG5wGJvaeQWG/HQXjqUSjtjRSlWUPVSwSl/WCaQOjQdPa3WwfR2RuYYCQ6w9CnPt5z
q5h0QMu3DgV2ca9OA4WLffwJGqtCvgK4X35qL9Eh/o4sAhFHdPiGQoev3Z1GhxeGnEtorHdOTYG2
7o00IuxKdgds5ItDAxEiQjAxMJLFT1Kl4pSCJLie0aM0oA+XSwMGczsGS5IGssztDwvrAmsXJBM6
HCER/UlAwZio1jVViDCoNkYITwZZek9Q8BtEwTai4AVNKQr+bwwIctS1AwxJ3CM4do2urNjcfg6e
y4rM7Zfh8t9TGAhGfuqjySjjsTWDMOjgaUVpWXjEiq04jGXmaB0e0qUcYmTL8GjkFdCP8I2hZxEL
nwVEBRqa/6hKYoKfuVV00KfolDeUTLjPL7rL3H7ynFozoifao8F7prciRMEYgddAgUss0jLcpvYL
7IlZj5cRBwyxiosKMNAI4kGJxZaiNHN7VOyMRJpClxnDiniVyeDVUwdR15Kpg6jrzqnnU5dWUNe0
qcTnUzQ0/eX28VIaoTKBADw3g1szs8zRcdi1QQQ3+64UwYUrM6hLhOXBjS1FR73yU28o4VMsYpRc
Z83tv8G9he2C6PgVlUkkhxZGhPw0D047ERD0z7/ypIbk7mmDKE8IK2OTaFSUIIHFb56m0oMCZKgC
qwUSTcvKH/UkSTRkF9TA21MNpjqGhsh7QtPEKZHIZUaqOMkftHuMtOuANkUlz0HnBUE18h+eTm4q
/15sqoYOQ18F7XWrAu6i5P6rBnCNypLZw2+kHYtOm08yBoLeogSvg1Gk8PUgle13eNQQq5GLkXhC
3qUA9TEv//0UxfwgT5ldarsDZT/G6sWmx7NrrHdgtGWMOVo2ImwuGxYeHqhUPof/rmYMa2sDidGP
iTOXUkK79Ap4Nd1BkcsdoUJqy8fLqS3L7JmiNbQucM9NUOxqPBgAE2mcKBbSLBU+3sjMIsFmbV1i
tPEObMfiioevUjbqK62F3kNZfKyBv12BxWxqMeWziE7kYNcb4MW8qdqV8GHweYQ/h+Jq9uPR2fHK
FvzQdqWyNVSZNQn2NRooHmx21CXeVHF6BV0pDsQHsISepHIB7s8s52Gv578Wq79I6292EEJxZlsf
M4zHiZz8Xm9A3EGAq21B/t9ThC3dFR6PRiSC007VBvnpyZngKOdXaYWD9m/lf1EzW76WpnrR082b
2SQPK+pqVOYJBAny6y8CScSO8WsqxTKSiDEnIuGwbIGUUqAHilxXogkXSC0mDKej7KpnGp+fIjrj
gUkTKEipF+nlzX4DGymbZzJcTMX7Gk2hx3AkP/XzCgLb1Di7R9nw78B5VuY2+fxiScJCsfkWLhXI
G53MPihgJM5X0YZlPd2IgsxkZR2FFTgNxNZhQC4/ScUyfyDW6ixU4hnYAJ670EVD7wanQ3A2gba8
IyS0hoA7FOlrpbVZ6xOh4zD45MXScrsGD4Xa65SQU43q+V36MpJV2qkmcS60qKupMX1ORvq4PnV+
HGcyp9fJGDSp2hmS0bGtdy4sOtSAywbwLYT7JPPwSvjSjccoftUyPd55L6+zVGBYUWtFyllx+mNb
jRWkVjCsGRhsWmFiuzAqB15/k0NrDrOcrTGTBVRMKAC/WmLVFxXL6zRQQo9LJbH6UYp7FNtowjYo
bpqsB3zdzG5LinLcRInyLj6FKATE3jMtwuyZX06Tc010/YO3aA+/pgWPjNfjTGhIqCpnQu8HV+TD
SaikSEHV8TfxJTf06xZ82TkJtSBrAKKq4y9MIop0Y3VeXx3/z0k0mT1LjSW21kkTtfXO+dL2Ciyw
BjO0i8jv4OZimaWiTBWNuNkPNXvJFa3wIlGU8RPKUe5CkAe3pHWTOp/ZUTzNHMdor2cU8a72c8pS
pZ8BN1Y93cv/UI4ayI1HnsCehHGaBaPpZuvOCCVeISNEGxD1Mk3aizkYtw/S65v1NFFO7jJeOkOG
S62VKM4BVFgPfVAxQBUSyCqUuJkhBaFClrV2kigK0dK2fwX0NUsE6On0a1eDJWIAH+AHcwfN/RK4
+g1IaKJdEFM6kze6Kzzcx2qMNNHTb2Q1BjUQRgOJh/MgBeROUTCbhBOoaI6gIqUffPwt5GuliOlw
REAqyJJ2wysQ0fs6hEu+MFavNQIh3OFGy4RAvU2DZLAQE1J4E9PKxUAzanu1boXW1N23hdw+CW3H
Y5PV1QhpKz2bo0RfAowNyCm4GwPsH7E8T3FMQvUtwmyZfrNiK6jduEjpRsDVE3YmqQythzwoIm8k
CiGObz7Z9zrh/YwwZ5SdGZRDgEXb1QgocAIxBlSMhIOvrq5O3E+z9UsyoO1kQF9TnzKgZ+ExOmoF
wLg8ZEdojwb4f9w0CNofhhXKJn9wAs8tx3hfIvaesKzk8RTiWcnvUvOv+zLNsNq5FHuGKdjIFGoE
BeysJrrmKVstpBwHUo+A5aGCykvaSCU4f4DiB7fDl6C0BqfzCTpJjdsNIreQvVQa4PVbVHsJJ2oL
SMFU4ApJA5bMw5JltKfeze9OFg93n2dCSR9bcAdS2OkoOhTsBYIrhl+ji+DXmLLOWc6xpRttFSiY
yXJvdRZLCcNiW+iN+wQuG8vS5jgtaOIUyhvdSKQbK1BIl25EDRWZz7MIHwaZNJcrvsQW6lKquCSz
ikDaDAeWpaU7YR4F+KeuzObWYW2+WIMBDMU/Es2Z+i38Z1SjoZTaimwQ2hJgRyQVx0wlsepR18jr
8tJVghpLnKJeguxyQrP5Qr2q46soAJl6xO90pc1EW3qE4M9L4IyqmGjmfy0jHwWaJBXg5/sxIRdk
lJuu9PDy7jLixiq5owSq7LSJ7rAN2ADUVEUi3Oul/sBA0hGV6Q1+LlP/yvgdNyOP4PCI6UV6ellP
Xv4q4t48EmPYJzz+8Kvbk7xrS/LuYxMzUAqcUsE2YImkTEsiQd6I6YCKh+4TfjOhQiYC4fUThV5U
6pEJmtKtgngm4rbvDqQLL7LtOgcN21Y7qXOyJXjYm2LcJpy7QUBoOBRhJfBCUCmA7A21CxrKAOSV
0gxAWM4a44qTxZFb+XU3pdWV7KE8fsg+Csa3NaVXrczEI42uOFkUuZUkhECvKDseVWqBCrJS1b7Q
rPuEy5UO5ZWlQvKrUAZMWBbpQB7fq9GSq40ZDcmRBed6FO5yJcIFJRyrGGXAmEzYHTwli9eruk7j
Ovd9glm2lWQyS8DNPGV+cWyIT5mIlEZVCSSDoYsT6D9alEVrVnpBO6Cp6QwlXS2HtwxB6QpfIAG2
DnYZzwuBLi6RzsKo/Q68W1c/jlpBxZCYpv7DqBnUUXOm8DG6JHPU8Hpi8NbNtDmPbSgkHZgiZ6GV
Xa8MqZWBd2vJh1QpODlCQ49PVzpnK/BEb8wYHyEY6HwjQaEX3SKGxQ0ypJFp6VfeiIPId5SonwXd
Ei87vPxVSk+TK3hEU5hxKCoUJPHfllBrFWmKevFEGg+LvKG4QuX7rCR1ZEXmKgO5Dj/n7/SBsn4m
oDK8uX04mICojsclRwSnrJCTBR5AEfdoVPQCbEp4T/omGqMAH9/IxKAvbuD/Wa0ycmQsTQwDIDfe
MFjIjEvxrhj/zBxCFV/J20qHUMWDuFGdmCAFPD5V5bbrM0R0Ut9Zg0UJ9ICAYQzwg9sQTbiqhTGt
hMCKXBPDySa6oyBGtOePEd2gZi4O8M5PyfEA3esCtYIh8NGMdNSRq4LOacjyhlvjp0t4Hhsg5csO
gulNgX8V979nZhNU0bNH2YyQhyFHX6a4q7NAk88XMyDk6ILDhzbB27w8kVzTu4bMgO8E+G3PqGbA
xbTOStq/EDJbk5nDB9KV/qD18gZaLGfxmFcr4lekLo/KwxBTOKEBleZvo+ugvMEAf+VE0hhxq/M3
Nwb49qdVQK6m2tR6zivPkuXDPecfp8P1xqKjQTZA4d1Ln6oi/bFLrIg8NQfZ7akQ/Z5PhLmwQgQO
lJ8KU2oL+XQr6Hc7eo+VNwbkjukV6SsnON4Uttq1IzI6VNUqxOVPi1SzkCa0rTShbRUT2lY/t16v
TDnalSlH/fW0zxRsLbqzy8c/L6bNaoWgoePF4qbEBi9/sRirLebP3oCyBbtTulF0ilT0uukkIqor
RMzjc/6kih6dVNEnr0tBFnDtCF8jgm4rFrWtVSjjp6oJAVg3j1+nzMjRqmB1kt9pDaaaEIf5xIog
PtFR9NV6NK4Rd76iRDAYjG3wEulTiYaQgwzsPVUpPX076um4OTrHgOv2GlK05vYfwRvoR3P7egPe
z44zDzwbkAvjMEsZhxdQrWlnOW207UPumENGIciLvQ+IwcgWXS462lekRyzNEsrI5ANDb/cPSUXZ
9KI63DnGf3sd1WeHNuamjbVNprDjVPUKper/vFat+iCp07lpVd+TrHpusupbrxPaMVahNWCKg5eK
xhwxq1u/X79f7phPCDYII9Iud4TVNkuUNm9MtjmX2sQCMdNU/S79Ll/Qy881Q7MblFqwSv1+UZdV
7mhR6zp2v6irv1Cty5asCysSVf2xmazgokOlW/GDuX2NmDww+fkqvHdqHbFJhdnANuCTBINjYBVj
k5YEpcqGsYw6wUwl+jhOeu0ytx/Hirx4I4sJDYUKhJlqixnMFD+pyjAZbxZeM6rTa8QdT0jHcZNr
I8ERxTt+ihKM+iPKiR6DdCdk+9g6HCo/2yCIhGgCJ93qnSVAbzxchBNDcWJlcQMHlg5/R9QodRnU
9VmLtM2g3YDZyqUuo4vwE+lTvXHs4vT04aI9t/IUxPF3Q08oOF79PRXHuP8tNEdJXphM/gUk92pu
EtiHzpqUhYnXaHCMEgGnCV/N1B5XDxiYdSBmGPApO8S2Q85K3CNHWSMHBUciXxQdxRgThkjZYOHw
QU1Knb9/mpY3Lwg57xfLCW98lz72Z8tPLSSrrjplhCXZvpSkZLgYyIPkZ/hqGBIacgZDruKHSKBg
7GTsiDqAkYOlJFuhbEItK+Jfi/6ZBpIGFonggoFKtMRE5w4pA56eQ5hgBI+yStJCAC4kqp2Fd9YI
YaZEPhT2AljRW0nC/e2alEzk069V0ZS5ICJvJZlIJZQ7mngBcUF1CpzQl2rFqcy845qUAM3UT4PX
b8WWG7aDTz6Z3GvmJKU4LsCffiJ9f9kOPj6ZJ/yeopRR1TARIAVnmXFqAH13i9T9mU/aZgah9PN2
giV5HrI4Nb9aSEtc1XhzMkDkDighO6czgmt66D3QDciTFK7T/xCee6DY+8Efa5TISqai49FDbZcw
0wlWf8LgU2Lz37heo8FrMF1ftP6tWUObxMVB85ofazIjSPpABeJ9yd4G7l8l3FQym8UZ/6I9fOQP
UCClwuLQdmOW7eWTxZ0tcTQrNak4sLgbQ+ACMCCdzAuPxgjvoY9Qy33u50fzadx7VLQhwkx+qdvs
8/J9Ei2eDD6fX5DCVx7Z1HR5WzG71YBIq0KAKhBdFXXNeEGeTfBLDi5B/gbXCLLzUKyYwf7QyuUG
udwol5vkcotcbpXLbXK5XS53CESXO/knPxFnS+x+/sWD0K3jAGtp2FnddlUyPljFV3h7uIHsfci2
Z52CasjV+mGzhraA0qoI/+BBWqhEz4wOtICPwGdTKFW81eVy+KSeojQqYU5w5gfjn96BOC9AJJWI
W8aLunhUSRy0fpYcj8UbhhyPLaaFVekRlSnCKdeGLfhLjzce4BVdXSHl7/Tz1+fsKfzbnlkcYJ9d
twsPfQ//r2s6q50G+MmCn+zeCmdOTidUDj+58DIs1FnvHA4PpkWQMgIeRt4B+SzwMwp+LoCECzG/
FX5G42wV5h8LD7a5kHIR/Fy8+ALoBqomQMnqOdh7e8/zw3EMejFsaFDIr1JXSWSidARgpxC0pwyL
P15jmTgqctUar3aiTxsZt8atm1iui4xporPAaoU3nFehch/Ata7Cb1ufLq2+/24S9aHB3NRII3ZA
STpvvIzMU4+ht5D2o7vCOlmL9GsFD2MUfGE1Xi+PitjScg7zeJton5MpdfVDetRlEmW4OB8AToNc
YLLOELv4lUljlHIBPmWC2KSFEXpzIs3e0EOtuE6adtNToC4o9eYE+CWYs9fABthf9CcC3DRBo2n+
mv9eyBfAK+vn1vm4vgVbqG6aidHycFK9UW7QzO6huL49mf23SjdrKHpp2BII8v84LcDNFuwlImyJ
jatBP59FQVBxsS0bL/UTWybl7GTkaeljE81+Ytx5Cj8T8HJ+Jr3GMK4fTslL6785irfvekNrB+Pg
AfCnCAlj8hQkyFAa0ZClJBykhC8C/MvviASOV8fqvwrwv36HxGcxzuQScujwOCCowVfnp0lFYP9z
S6mLIZyYkbaXgX6SLbTWaerBzklDx6fIxNewM9+Ir9Z/hK9CloM+mjzfacTNKddiIPd7DPI9Rvke
L78UpLpcWcz/9gj+LeF/pr9l/E366+av0t8KDM/UIle2yqtXABDNCXl1uwCmitWW4C6BP/0BXoPF
GBgGUkRYGFZZhkZ689O4VFTm4z9GidWV8zPpwxz9NhYs6x7QS13Zfrkyjy8hYVZwZQ64IvdlVUk7
B9xhfaI2j1XmKZYuyvhKA3iAF4U6Vwjz7sdXkm7B/Sd9F44EV7jeWdVpwSK1Bolnect9fOtVCFaZ
n4+mBkwZDRhZJXB9Vv8IFjT0TsrS0Gs2gAr9+Y24mTGek4ohNoUFAR4DrqrkTEm6fcPTIgaBgWcL
hVbQFMqXzhRwS0aAWsrRKzXpI8XHPSXa8FWxB3HNxhfgB0uFFQpmxh9cO5bnUqFyKCTNKzkXzzEo
W1wM5uhyAxFddSzY4sdddZUF3liTsQ7qaC9J+Xl3i710F4WqVtCeFH5XGjB9JqjikthkrVeurOKX
Ag5lT71UWWVggfqklW2SPV7CtUXB9ZVpNfw71lBTz4JVOLz9swFznnptZVXIBJn5vzBUqRRw7vFO
tNqgVi9NY1b5+LrVeMFQYDraLfVe/nQnXjMOXMnvVErN8fHmzFLzfXz6amy8CgqGlA27S5Q8NVVs
qjHmqfZSblpKRF17Ueij5QD38QD/0RUpuD/Fe8+DVX6e50SKrAJxL9dWs2C1fqdcC4Ts9nmBGKfz
3+G9nZVVXq6hfMWEHGBgH2SRK+fAJz8LVsiV9awSVLyfy09i/govf+anmL8iSeNE4Fk+uXIWf5gu
4CscTOCzWHBWEulA4ALp25cLpD9zeQr46xD42lkYydPL/34F9qTCz2/+6ZBk7cWd3kDW3t5JBg29
ZgFcQNav0QklI+E81jSXfyLTrc0nOjQa9UpME1BOAKeXhH+Wuk+o65w3do+lgTdfgTtQG+p4d1Sj
XK/JuqEAur9gt66xuOm6cgrbeA6XOX8WFa6OE4o3j27gE9QKVsCH5tGhJ5fjIvtiyuVgntb0G67A
Tj11uZLdh+3VtKY3xhJpzWFb12AeOvcFJbvUkmMJUjoNtgFX53FZXk8520XODWrOo+2Yk4TbhhWE
DzdmfguTPfWQc76as6ddcEHAixn+REZ/wYpWZ5UjUhRCx7CBuy/HCS1rCKdivfw6fKu1hTRGvI/U
ifWYoJ4HqKQTTCyvJnyhGl0LNyTcQV9MrBavcJrqmwTN1GCjldMBjo8uU+BwYVLtdCBjhOMayjCL
1dLehPHtqMwhkwc7WwvAVjG/RdpeQSxTOafZinG2cILTRlzTiYQHuu1GR4rwngNweyudo+M5WYoA
y4qUNWtjlU6QcuduSbm4X4ibOEECLicJ+Pn4VCVhI0rAbEWQZZujPzAiMlp8yt7KYKE/1mSqax4d
4C8UpQTZ42qVVaLKX6ZVeRnUAH6jjulTXrPUVqaJ1LKAIdBsVYPm4g61kF3hqMa0Cg7nIE4sspEF
rbLXwGptchU822UvoNwhV1niHreVCKELf09Srmbcrkm7mhG/SC1W8IArdbgaT3c/zcLbCoy46Wib
lRY08N4JUL+m6FFzez6uy9KRq9IZRnPHzzWqBPxBh3BFHH4eklKDKOJeBlbR5GWlxSvOMnhWEdFE
Dy0ZhbPY9gYfL1oluOwqGBvwVEK25biIeSk6eR43qylTqxpO+WyAdEM+yleHj+dJai+lHitKgNuN
5lXzaAsqdb3KBCiVuq0BX9GhxH7lGg1z+2majqSuTDeZO3DDN0uIzmyICnFe6OP/ghCAlKsU4hzU
grwy2RkK8XffSrUz4+rw+AaYtPPExRz9RXEYKbz6u++6bIzcjku1IetynL6dvJKW1dQ1Mqj32pVq
z6z5ip6oWaViW+nZDJN51YxUz2Y5TcqICqz5mdfaQEip8xJf4N6WCcrOOaQzOqNg6XssS8zSqfMX
2419MiQBE1s0YbtKMUZvMwi2vYEsmj0RwX0pOFgqi8mLZwN/r2QRJyBEUJgkwWXcBdqZJLgL0wnO
NCTBWXGUPkOTgQK1DCK4z6VkXIUTKzIIDuylvy1PIzhQhW8uzyC4AiC4bcvTCa4gZCGCe3J5BsFB
VT9fnklwQBObsT3q5XkE1/kNBPc68g7lIIJD/3y96MtVkqA3IOb8FRn0VuDjFy1Po7cSP89N7wte
mOLlx9tSfQF2CpmIxA63ZZAYVPVaWyaJOcD+Wa7iN43E0voC0kAZw2YNnf8bgsTM0Z+dTSQw3i5S
Rmca8fy0fhDxmDSpLIJ4FtZnEg+dW52kXAW7N514dhLxmIB4LtcqxDOEpEJMv0hT1TtVokEdr9gD
At+bViZp54W2wbTzu2WZtPOzZSq+nSrtdCwT+C6l8FIpJqrQEZcjORmJnGYvG0xOty47j5xCCAL1
O42cxBZ6QobbpCCCYsIp2zlVRqReMp/Rj7h01mVplAt4EJfrKP5MuXJlL4XSUXG5PolLvO8KnBQF
nW6j1GWleVkVlwvxO0WyKb09gwHvXSEm+NCeXUbWHVhsNKVX5uVzW5NIJMu5vjWNaAE/DX5e3poi
WhCbIQMqSZ7fiuDgLj+1qotaVYyZ8n1i0G7A9kQfBMamqwwoujzVpHSXolKoRwJU0bU+SaAN/HNf
BvWddxHyBjyV5k9dhKx8v5i5cQvvhYMuSgZlXfGPLzxWvl8u6rgkRuFffOp3SDKi2jiN3QkCv09F
Z6GyrOiQV24q4S58A1tfbirj3+sUdrTc5OZXUK5iyFPB70J7uJIOFDUV060JqYn5JgOrNFJa8lZY
uQltbkxLXQErN+GEgHG2PD4Z+jQ1Hy25NIHITXwhNClLFAfjTnhs1nllCYNf8PgaaJ8+eENohYbm
LAN6GUW3klrjeor4zCjKxU+fFFMepiBZUuObx1EBX+wBm59rjom17GNN0rlDEWOjcg2tUjO/djVW
gxX44pSE//gl5GwZWW9jnIDBf3H0XTW0Jp0O/zOrk/D/ZnU6/Dlp8ONyb+gwwu9b863g12hV+N2f
fhP8Aij+w46hetHQcX4vUvAzPU6jmQJFx4NAcXfyv3ckO/IePWKRmIRHr8iU9/ZKGNrkcr5gDKSz
P1F6NprxszHhp89RghGvPakeQ8wWl9CqGEG4S00hVDFK9sYYVudr4FuLkxMJw5LHSXuQ9kNdK+gi
gSetwgk41vcRVZaaRZgWq0OhRfaztFNU20WMML6BR/JUKzr871TdY6K62cnqHqbq0uYWyOl5AWuo
DPKs0Tg4iBE/OybFDYEg/wmQqP5ckB+xJhHuxauL+H3IOT8lMSp1JYd2ml8MrtvbfFmzI0Ajyr7i
84+KS9XKYEhBdiKPikLqbQ1GUawo4ZddHD0xZbjlF4i0WskpMsovYKI4K5p5f2DR8eiu8PVMC73+
XpAl8HDAZUwTa1H3Syj+Yhy8/1g4W4sZI+82xTyJRryREOMNHaQzMZ+Bv7HcKiZmeg3RQ2EP00Od
7oYgVnkNy2M7wA9dn3YXc7AhwP9cnaXRn5B6DL3ZBUwPmPZA9a/hrF3T7EbwyjHEikGlRTE/lye9
PHeShu6QNUdfQWutEm9fH4U++NSU/90/7DnbwirgT9wliwBW4pXsI9Od5X4TP4txgHfy4+cok4Wt
Vq5kvxDy0Xx3euaFeKHDTr5LZLay1b8WmQdXWiXy/Urks7HVh4fO9/giynefyGdnq58YOl+LyOcT
+Rxs9UcinzXjbutjeIVB/wX8/gWU+wq6jQ/3erLVTw6Vn4PFmwf5p4n8X4BFBWm4iLSaD5X/IMat
6R9RtIvvxKwHcd8cW/3M1+IrB3JuPEsRbSy0lhc06Hv0O/S9egz/gr/gx67H7Qh4eGOW8ea6pO0a
GRuyrRTH5A9ZiANpl1NeTyyibbYEeqdorPy/NorpXSI4i7TcqfGGLwvw06Noys/Kgk6fH+eX+X3T
cJ3Bqgep2T9qCxIFe41XiBOm+mPS8jxN+CpxaR3fOkojLjWozPPT7D0vSxa29I/hr/1N9McHNeiS
NbxMB9HB70FzFdobRYDZ2YOY7vVRPV9OVeuxQj1XLaJ2wLh9jT9/JlnPr5V60IgI8GtFTxzsEUxX
OvNksh4b1POXeymLDeFZlKrncBIeO8DTZyF4nOzBwyl45ibrsUM9YxYSPHaE5+pUPU8k4XEAPL+y
UGN57JEnUvDYk/U4ED/3CJARng9PJ+v5KAmPE+CZIeApYA9+lILnjSq1HifUs+mHBI8T4fl5qp4n
k/DkATyjBDyF7JEnU/CsTdaTB/Us+KEAGeHxp+pB+sb6C/xhZ4DvMhM8xexBnoKnIllPQf/Ioi4o
f0Gq/DNUHi1RLC+bqZES9sgzKTgMyfKFSvn9p5TyvdmggjwB7jOLOfPVKM5I6V3Mng7hUZdfzp9E
G8JW45u8Gt/qGoK86xqNOPaH6v3CRpkyz5YpN3FH9Hj4O2qIAQ4KLBAUlZOK/8kIMicURmKrtwjO
TbsND2rERKgRp/5SRWkjYl5Pcj3N6Pp0sQGPcaHgD3rr0peIRrrOhrNXlLkKIgbWM7sn0FwAn5+c
I84r4sVg5Xjzp/5V1+tLbhRBBz0ZS0wW1pvfo4+7doQvXVF2c0F4bHNBIKOCyMt0ggw1GZ1/Exe4
QkeK2TVYDbOwbbGFSbnV6+qJ4OYDS53Xr5zSC1vQVsXrHyL7m0RlOU2Ns9X7/0B1//0DYnMruzeP
QtYdN7c/osGZ+KmaFTdrwktSMAlxFc5mZ/PP9QPsGRJzAEmYgjf4+fbkHZTXMLqi8H1lvyPdQrEG
nGi8njpbarFpwsOPd+vCF0stFk0EL6/PAaEH/Y7OFifVaPueDV7k8ira8yGCEYtP60kX0xG/jzMx
gREgcJ3Jmd+LwQWLk/A414C4eUIbNtHWhFHS/QCB5Qld+BKqyijdB2CYJXg2RP41CQHO5egQRSkw
hH72oRWPJy4WOoMvoaxF5KEBqPjDgD9zO7rjSRyKLYu0IscGhsRiNcVOtwd8vI2UlMD59QEhy9+n
+ALqzfWFFF6GAlobceunHyO3foc6ayE/CgQ5ZMuVerXm6D10m7SyA4dVlshLi5/Qmttx9qF0PgjG
NukmbEITfpdNIZzuZ0bWjTgVVhGdSpmFxz19iNPDZ5IX4IKzhZoU97c24NkMmxccQJ83yB87q4Jy
gbTDgAvTkX9LB4HdppFrAYrwMNdfItnS4XNyZYkaZ0SlT3aQ/+2HipZTKTT8QAPpX6TPKf8EfdqB
NvPOqNe8ppHbphS5KfT64zMqvX6UpECTuIEQBclkah+xVKpQHsaXVlpDyrMLynv+tNIa0ldkNBh5
ZJ5hTO1tySYxtjrS1jRTGm2l9f/Ou9X+F/wf9P/0t+v/6fP7b/0f9P/UP9N/69D9f3iu2v/C/4P+
n/p2/T91fv8d/4P+n/xn+u8Y1H9xnyDuaZJ6RwV4DBclDsY84JuMM+D+MBu/H5N4rAaSvmvAu51t
/K4cDKqK/gvlceJJXe7HxJpkYiHkLOY3ZeYsg5xunpeZswpyVvMLM3PWQ87p/Fw2Ha+aZd6UXQS8
/Fo+7hc7rL22sqQcvMvSameVeVWRVpkLB7Q2+OtAJuw8pey3N0fHaJVxhZ74Yk/jRGIDN6r8aY4e
F4YL7p53+GNNrXW8/3Ty4zvCKqGdawUNfF+q2MsaqrYAbRZfHd+c+vIbUWExxUtt4L84m/zCRG1l
XsBunXpfAgzSElZbzEb5+TYjul5VzOjjm/HxEXJLdV7+O3yjtXrM9i/4tpq8XcgZo5zrlZzLKecb
Ss57KedjSk5c8QKcJW/NUy+6GnQDnU9QA8U1skm1BUZWWSCm+UvHRQqlnVq5sqAURHR4HMAqZqdG
Mbcd/gyL1Vb7lEjNTVXxbNqQ31QctpQ2VYWHx7Nx+a5vCo5HNs5FXMUeQeNI3kBh71ajhSR34C3s
8i8xPZ6dmmmo5oHPxLWZZumughNpca+g2e+wdViD/CAde95ANTxCtY2DzMeTuiCenTbXgBMmMY9R
Da2yEa/Dqos9hfZqQ7M1yDeNTU5fxIAVb0mz7lKXHxPk8iPiGlFql3ohNspktM1o28qg4g1QFpOZ
XtnNMpxOeCv3BxmVaUQLTiMWHQKUWwQK+/W4AnotqyxmXkOsxuYTB0RovfIv5+ggnDVUjM7eQJB/
olPXGy2iC4PuMyVUC+gG3Wf6yxVKJ5CtmuRxakwsFDLSx8bB5z/yt2FAKuQyaSDXvPoqvKTLGX1v
TDnePWeNTXFCV2yo+/vexxYx7bY84Hsjf+Vt4dX37VY/PEwBy+rhW+1cYn9b31Pqtyi6brh8yovU
bz9Rv8XQHaM6H/m++NZ/n6jwCbXCNvXDHFHbR2ptDzcqHypFVU+qVbWqH74rquJKVdgf7H//GFET
uipqGtbIbjPUBSoxVjM7iPjEufkvoniScu1KEbvDrxWO+Mym2RSoAkzJoL+OX+IS51KV/Z/n23fK
HZegg97P/8t5OggnjxwBfn3ytt/vQNZiypQ5n5Df441VasHt+4+J1CCG/ogtBU0VvgjXjPo78Lfr
iyXZvZ4EsA04Wf0GTGI96e1Fxit3XoamY7feb8C7tsktUrsF9iHLJtJvMKlXyY6DrxRYGK9wR5cN
iKq92YMINOIVIH034JgmfmUt1/wJfl6DnyPwkz26XDMefkrgxwc/zfCzCn7S5RfeD4M0Kq+0ics7
jfJKuzZ5PcyexOgzd3g011i/A1aoXeLjw6Mkrg9nb0HW6tmSS7+H028UFz171IhveGgrgIoAD34k
Rlu/jw5U9PiyC4OJ0ZxGhf8KZ8ZyWG9TY+b+16HKW4Yof8eQ5aE/5k1a8yaftvuwcfg2eNCZN03V
0wv+6s6U3yL/KPOmcm3AvOleQ/eHxuF74U0XNG+6L6v7v43DT8BDtpqsh7pyKJVS8Omzoq6iXU3D
e4fvaxTxeYyE073dR2ydo/CPpdOnxb/GTp+us1w/qH3IL/acjvT6+FZ0ybJxb73ap+QueBP4ha8n
hKg7Hr6Q8GQOQJmLS4getTcSHminugm4iY69OWOG5d1c527wFh0qOg68BQ4DEpQOCH10aFa74CwR
H40OB9L+WP1J1ud6ffGdaD+ZN92mMW823WZc5dHMi+5qvZUdWPmhnrYvTZN2n5kkndIvvSHhfPjg
ReUa3S7drk5TYf9VbF/3KYPRWujp+sCACaMxQScSsjHBYDQVeiZPcX266Jcr/ypqu1V65cxk6bQW
FF1Y2B9ghClHCKrbxSXeteKSBAFohdPeJBeSfu5hiVnQ/p3wswR+Vl+UovGirvPwbRC7dONupFjN
oA2d6vjJVUYles0o2WuQtaA8ovvDelnXI5cbMunVwNypFHrHSDLRXWGDPKo/m1UZZZ+BGeE9BzJi
aUiC6uRRWGjwflIRD9QSi+KyStDLH8MZ94MUQqe3wmnF2e/lZGrEQe1SvPy4ISh7irk++VxC8UjE
cxnvF89yW4F+ABKq+LvJj27+mvqxkD5W85fQhcTVyAKfX/ZUeJmn0MunE9kVxLO1GvVe1fZP4DkK
KvQwSo1bra4ad2Qxe8CSfjYRpOtO5qly7YzMYDUFYEcsGsMSbKxrVGSqxGnzdtwAqYs/BmnnWDNq
4tjItdKAdsnoNT7txKA24gSrZ4lxTbluYqUuMpZlxz10ISlkCV8Gn8ztKKZA/k/Wa1BlGACa6CIU
hrchSJNxTj7XNdlhXkc27W2GhhCu/CqnuaMJc/swXOnCtGZNUG7z8reLszTyPRXxSosZx73B0NBs
oauT5UoTnla4D+uptZT7QvYortz+CvKzQPEWPCHZIAcL5MpCubI4XlmiAVuA//RS3IlrYzUlcq2d
BUrkoIMFS1hNmZ8FHT651glmrI/VFvh9Xn4Cxg6sXNCDxb2amRhGjQULlDCoh/Ci4VobLgS7/fxV
fKssVBaZXz5NS6bSdrdyb8FT6l5tNCabR4F/ADZ17sXJTV/RfRo8qqOag0hRBn4ftN4/OvSxIg2O
kH9kom/CqhS/Y20GFkdXqVczC7qNp7KUVkugVfNWPFNBC/bkzzaPpitC3mhHTN14muaz8jAi6yFw
NpqvCjbwRRfRFsvkDlgYr7tCWzB/gzAJ+RwBCZ0SSoJ368m069msfQ2i5MWhteklr0oryTxeb+xW
m49fJgzFxGQHKlM5mww0n3SLRiwusqUVqE8Rc5FZdUBSPcY6/nusqMdQB2PLf5V8LuYPJ59LuCye
5aYC/cE63ITdgiDWFsIY0g7VMj6WWnbE8Qp5zUxpmUMTLmI5QMnm6L8hUU1RiXOvMn1jjuJqfrLP
QTrkjLdcGlFmxZYaWK9MsaZnATEklNtKrT7+1EmKb2xRop//El6bx1LYvsIo7pBRvhc0a/zcjx/z
Ag28b2xqIHC3OdL6YuQNZTAolBc/QOeKTY0YxE4wTYD/5lrgmAUVcY+FjroCjzUbxA3uHpxLtSc7
sAEKJ29JsPYVoVCrQU4qIE4KQj0sWKhwUqBA9hSCSIt7BCdNvRj3PNuAX+QaOwsWywEH8BNtWw8A
J9U4WQ1wUg1x0u+BumKVyEklgpNKQJQp+yp+PICtEidV+LmEbx7ipGofj+BbQOUkq5fPHRCcJDaU
56LAibaDuwBMVWvwNfBnxyRXgnOVuy9wJlQhxOaTKtoeO55EW2Dlji/Jn34UR8FTwYJlwP9eP/M6
fGJngr2oq1HOmZ0536KG6Lfg8jcehyv9k2kKBn0JDSAtRG1T8JSn/Ccr/OUXFmZpmutjMYsHEn3c
gK9VsYfn4quff/W9LFDoelArUWKQAjwolIjY2BS7qze8pCEoAsVjXPS7cTUvHsWW6HJqepIGhpvb
30QfacBkbv897qAbGGFuvywbH0aa23E1VBowm9tzKQ+Qd3c2XqGtR4+gShq4w7z6t5Swvn5COTg8
DzvhD5tig8bHNARCeDy/2RrydgACswgSu2otU9qZBn7bV0kLYEYPbornwwHBsVuzfDT3cu4rnAGN
1Y/L9fPPKSv6crbeiqJcTax1HG1P8cZqteAEUmhZXFoHkdVrGItgwNfRDWw3Tv34goHYrbk+v4Ai
GJuc66VVMV49IMQPAlWGQH3RAFhC3oV/Al807r8mh8KhRNdOZC26KhZM+BHiOtF0r8EFbVpwM09v
+NKG2mDsVoOvfyQkwfsIBRtiOJQIgngOTaaxV+ZjY5N10H/R5epx2T6e+FLEITNCh7M14KFcGKsY
lxsElez3JjuMSb2GEmgc90mNbQhC2VwfdDcbD/sV+ESXY5OzvbxJYVtqHOzDVP9UAGAA1kCja6pt
WeZN+/yxuiy/l+eRqLC07zK3bzbgBrE6URDVakOv3s+XXpjahkyuqgi7eF4HpSgStUH8yY3dqvVx
O7TmbeBRwX5y1AJfXL2RK0MmHIy+Bp7/RRrM1sz6VrTcrI3cusLVFPEoTcZqv/DxFsGj7GGsLBCQ
4l8E/QJi9Gz4O3T0l26fjz5wjmbsVQXKXs+PIWylVSWLx4d2gjBr/nsDf+JzAIEqY/eDSDHpX8I8
jGAtXVi89MrQQ5iTN/A2zKl2fhCwve6boAyVjFFdb+fvdfmKlzhD9UppN5amWllLcbKdPjCINPlx
bXlxXylGHECs/ffnhLXa0RlYM7f/K65cVBUwr83n5/d+pVYHTWsVIoeODyK6Oq2fb/hcbEGgQP3y
50QAuUgAFKd+cW7A6++sdhbyccSDNpQbNBMBBmHv1ioAvz8nGe/bZRF7WaQ+OtPXa5BOGhbzNcaJ
IyML8UxfQBsJ4Zk+jy4yh9a+G/hqsc9D9AOIuCBWN9rPtYgOQpVcblXw4i1gVTbcwgn9+zGxpCWN
2M4j6DXVThuSLUYBLjrenKUQ7khBuHP5VkvKlNqmpYtXVJRInxGKP75wEIod6Sge+WUKxWVaAWxv
OSBbJdhByJYSVvOqDhTzyGmOz5SQ1eZIhO3cglZobHEWYjByZwb2Pibs+RTsTVWwV14X+xPqhQbR
KRPSduwLZcmItvdcfjYp3CRxl3gagggco3nVhwgO9vjHxxRw9Oboqzj18kBWi4hQ/My1JZOzzVGc
LCuZnGOOPo1FXkIl1MB6RJW41YovP64snFHrvz6TxgxDtI5SntuhUWwd/P9Rxwjj919A7KliPJzj
OhfWa1scTE0Yy6ocSAhumy8I0mnN50QG/Vl8xecZ3c3AfNFx0TiFx3uJniLzyCdwkCQGmWPlt3yO
x+iVYsmVSWfRLtkoV6ELKVeZ5CqbXGWXp1vkFisjYeHFJK89FsVZVIDnM2FpUHNo3q1wWWl6JZJ9
fEqBNmwspS+RBgGGITKcx6GITKlFXWQFeGN/emIShgCJPoOh/6Jl5fgbM8jRJwHt/PR3sjSBZm0D
r+5TOBIQXoRRAM7jAZbYc1m5JnI5+NDwc9sV5ZqnrirXvPCdcs2z8Px7+PnMWa6ph7TyK8s1V+dB
U9rhuuH/d//0ySfD8OFZ2TnG3GGZ/nZdQyALcQd2zDKgAfMmdD0Y588cE9MjR8MRCkc3y+lczxos
uL5coov4YyZX6W3WRdPQEwFvfAb4qsUXSwnDIiuw0KjIdYpT2pt0Sm8Ep3RM5GJ0SgvQKQVeGoFO
6Xh0Sj060J38F8V6WuQyRI9GHlLmr3vYbRh+0C4PAxWL8ykNspZ/9CnQGk5qeE3eBkWd0tTFYP8f
p7xSPjR0NX8b2H1ihbrtFuhXIV58hUENxXnoCorVizEP8WoSr3mTYQzpca+P76VlZzyWYPG4wk5L
6/7kDHtySVeJf2ulVYxi5jEO95joLqiXkCIityhHZjESQgHViyK+AM9QBflCtX715nhjT0Ni9IAI
2yx7jHLAVPo02kaRK4P8imxxwnfgUNjp2tEKgL7i6g5f5doRrhOZwodQsX6hXrOUceeSskJUmAKA
4PF7AYojNClkb5IXGOUFpkw4WI0xf6fUXYbwgFUX3bX8wmS+LSfSmlJD8O5Z+THCoh6pb3eiq1PH
HnPi7Chuow2yF5048RD5EXpcdGR9aqdBC7oaHlu/UhZIkqGXKQprkF+VxFQ+jq95U2FqUQEF3Uy2
lloq2sNvuixLs3I7AtHD3z8KNiXtR5VexhRN5KYgf9cgduGg0AxPix5vvTc8TmlWadHuDwT5gTPq
4E9WCoehowK/qdZedyRbU67wS/v4X6mPtBcjtRaz1mnViu2cylZjyN2eyp05n0b3dqBRrdAaeTM2
HEEnRfPye30NdWL+ilB0EY707IxJOuXKKiTMYjZ2eNAQMftTlJYjBw3SC2SEB8K1dXyLXsFQ9Piy
HNyr1BA9vnx8s0ahCXMmSbS5EJE3BRqS20Ew8JhSX+QPhLFGJZ51JUHTpNyz1dv/dyKi/sONTd+G
WKGXl4pRaWxSL9oScw+4FiTRiuVCg+uTVne/UTGP1jNGyT5bTMJtId6gsMUBxMtoXRxk4EWXZ2m0
Yac9/xO0Ac+5Plm2W9lWxNwYQjh5b3fT4MP+e3A925mKH+GQtqK20DQEzdFxePV8xzMeoRpYRyFU
VQX+YqFG7njWg0FkforpdP5AOXzgZR3YIPzB64Wbs2IbHOWUXG5RI1or5xWoBjbVoKcC4CfFWoE8
TqIoHgvWzHWKNRMX1gwI66vXWCaOBVF8UgvS10vzgyOkk7olF6BtU6kLDxOgohOWoNbNm9YVQ9UT
1lFL4qbVp/AZZ/7wilqW8xxeyEKxIy5u3x++QIkfMVLq0knduvb9kY+KuvqzLumSDiZwRuQrghvB
Vc43NAgOD7kfo7hkdhHbJQ5DTQ5zrREPOOzDMyBdYSfbQEORPDmDZ/9no8wGxrn1UpzAd/aI02hX
sXWUNRm+kOIHyAqijDJ1qL9ZgFKKWxhorUTeQOl+5UQDhcANGAI08EppvMimacspnKpQWt5nFy3j
hQJqjK5Xxmcp21pNYqAFPOZNo+QNWzxIE0giIiIqPUUuZ4R7JlBNHfViPKXyT5WtRhEL60gVJXIC
Fdw0GyCoVSBIo8fCFD0WIHeUsCkF0m8sgNRzQRmnxl9yaGntEKWU5glt+IonjJHx/I8cDMMoWkFe
tHPmHiafDjcSHNCjCYeG0fC6QOQOFnsWgx+TpYT/MDah2FP7Ff/kjHopjDm6Xq9afhi5AiNDPpwq
iI5h48wmMfGDjA59kS7BvhT2QCEUHeb2OGAJTDhd2MweFifAcGLK2m8F4K1o4VGkfOBiQskvTW74
vdkIv/O/cB0zx35Bgs91LOwI6N+vS81YxFdjTgKdcveb5NX4V6Z09rCYnduCV23m93pjppvB8bjz
I1xGwNE4tGy0soKm8Qaew0zB/Nd8/cMDz4vnt/x1/K6/i5E7ZF6HQdC0vzQmQVPABMDzv5BetiMg
5ijOawLEawe0yplKb/h6Om0XM7jYn7kttUVkii5ZhcklP4hNrql3GTofMWBHRkF+5Cqnj1cQUyBp
Y2geu/5dr0zF+CUficgrqy1uMce06ldqq+C9OToftEJ6eDh7mATNNLxBbVesQpu4CflUXo0Qmx9s
16ZdY2qUVzvcYtoT09Eakk5nyaudkNh2SezW06hTrwTWeAaINTb5NC620Uf2IP7Of9BBQyY/aMM0
aoH9kp535r/i+qxNxz4TrD1fAcpv0P8lf5vrYFt2/m7W1z+K9f7sBMg/9kl0f9iQf6ToePRoWxkT
TeAtH15GI6uP89dOJjGJp3m1T2O69mkn/cYm879i/f0G1K/R42357EHC9CP4PaB/HejgKNCodjOV
2oyp2JfNKbjzV+Ozuf1j5AOFjKOlZ/EWZpwzVwj95zZB6MuuFpQklQyPjJdiyKLawUyxQMkL6YrI
w9TpqdQtb6fldqeln0pLz1PS4wSlhpgPLVOSIcOVj8n1UiPrqCJ5Fx6XOuAVpzTS4h3VylMj2L9b
KTmSq4bu6XGt86K8i74Cr64N9fSM+5fqGoJxMRfaMR0F9Fasha3D4myD4Ln8gaB+J2D5Rty/ew0x
mcJzlsSbwG9BPoKo19hvY+uokg1Y3OcP1vEv/ko853o/UiTAT51hw6ukMEUmwLUbsSQIhvfNv+gC
O6JKOnyoB5r4e+JNGIhwjgjN3yOtw/HQqYaJuEwb7X2L2LB03AOCabhyrjpk6M96ySgEswMkkl2j
ESK/nlbinRivVY3hSudPkAJ/hZO8v8VWzoIeMoaz8T5nSw/zFOzj0mEt+iymcAvbSvurhLbF+A/f
St+G3bTTH5umy/XEOUuwpCqNIc0yurWiTBwwVY4iopYFl2rLQXELNYDR6syT4lks/rMTZ+vYn/Pf
lU4blun0f96SgOryeyCV7UQxVv6zEyfNT7+pf1d/WnDpcPVILl2+GCsowYAfDUr8ckFXkREzoalT
alOx2jM+L9cdxuuMMEPn7QYl7HChSPD66A7fhUCoythWO92xemNWnZ//cD5FHMOZeLw8Qb0ZQ8RH
UMSGKCPA8luUw7GM7tNEuz/o9enjyuHkokPRRNvENPtRKYvDLI7O63t8XjbJljzA+SNx4F4/w+B6
v3Vvgq72FGCzDkHWeE/Q3L9A7y7lyn4aSzQBJH2AGX0NfOIHgqRHiUL+hiD/DiWZXGfD06OJ5WOl
RCKSkziA1Dl8pjBCEW0KhSqBeO3s7Ukn3p15yf4r3m6SO5AF5aeQ3OV1yILyBiT65CXjMLzUr6KE
vJWybq3P4JiZMrE1Xp4yOzNkHW2LMLHNZxAfq3E9xstLDqsbS8euZ1U212tLQGR7ebdTrxF7go7E
arTyg1gEXZ7M82sob2K0nQ1M8U/eByyhKUu1jQb/vLTFFm7w8kiyrk9W9qIUCfBt76d2jV+LG9P4
M++rcFyAxcZ5+c2pYgF+LbwoBSKvY9d61PUh4b1bi44GS5/qpHCgu8RmnsJYtX5UQH7qUQy9+NRj
9PvX+Hvd4xiG8VM80dXxZIW4D3E9fuh4iEI3GgJiQXI/mYFY3LUjYgtVrRZxOXoPqTtGxAWURtKn
/OHRSODU2HQLBoKqw3iX9D7JJD4wtwnvlNkRyQ/ZlMruO4TnmB9NhYykqXCCWakf4zXXQf3fS9bP
1iHUOBsiV9mUJu4vVr6B/yW3FIoqZV+JAtHCCpHii9GmRz8fhSTd8TgFy1RiVtnlDkISkCTeOBTi
HQLEt96l/hYd7duD8wFo7jf0am5P4C5YPuM9rAfhQdslz8fzIAEdnqCfX/oeTftUKDemjhSvXiGv
LkH4cZUG16CCXj+vtYqtPK1OW7wDB5LuDDkqbaVnunogMlUBeR0CihGwrz6VDFs9NvRiBwVeuerd
jPFx7QibQo9iX0726bTILlhh6VZBKydJp2F1sQ1IA368r9KWhSE2NjyB77GtSDPBUKgDIxRfTbNs
SgByjKEM7W16Z1B75ui/kdTHmMUzzdGV6C50ZXn57HfVsZbLC9hYaVuun09NS3MoadenpdkxbYSf
X5aWBg7VY6l4pMwsLgggCscIqJgJYKTrJTuJjnD15+SsiCW0AtHQH+B6ATLrwL6JHiKa0k6Ef08g
BVIt6YFeqV2FJcztf8Ruek3JWPhEYfw4kjRRJUhaJdDFh9SgNbYRcQooxuN3zdq6YHMjjFe/Mvmx
7GL4ggvQ9KUpwE3ql1aL0kuxJfB7/S8q1L6C7pHdER6TDDArem+U/+OgRgU1vQP4nsTLoO3tyfjl
Bjxcq4hm8n7oliz0x5zKFSpOH4ZWaz0two2LuzUr10cTkUkB3nGb6kdFigPcWJfcXKlcLUZ3qYhg
6jj9E+DXp1cTeR6vSBKhy33S1mcqhPXFBtg75mg39qnn/P20oM3j8rotOJgh9XxM/g60hOWOFzG1
wohuntUHNckdXSj+ViBBbegiOlJiekHmZ4UAMJEAaFdk1JtvKRtKhDyidigmMWjwGQeJqR1KWNGr
8XXDixUiGoMTtEIJpCiBNEYcxHrylFapLb83hNscQrjQ3mwKhVcjk115Cldyiw4BTlynI+MDvLg6
idFReH3UM6p0EPA8q0pPeeMzFcp1j4hEeSN+SRviweOLswup63nxel0uK7e6iyEthRG9Hu93Tbb/
nQC/wZcKiy/C1dqgoDe9YCSeGsSM+SYT7XCzFR0Klm7cTgLoABJwP3DZDjHxPfEVOsCbtQUn3XDH
g9yxB0m66xK5Yy8pKxjBg/DQIHe8hwO5+SBdkpkuyS1yx05lIF09kYtCOzvFQJreTA0khnNsHoGj
GNoCn3s1XhGLvvMtMVcPiloJtM12uPojWVuegVxgduHYe8Xd8LMhK8bcgFG+jkjEGu/YXqHOj2yv
SN0Yg6t4bB3BuAEhwxmSe75Mim5bKNRJovSHb2QC6OoJXxfK6xRRqGveoCAp6QxtxUGmrhI2lVKi
jdR8k5KFICrdKtC+VosmIeJRuezJKaawQvNJzk86kpTzNlXOv3bgPODGh+wI3OcB/gf1YyYk4Das
0Zb5zFGtCLwSaC5WNuEBZY8Ofaxw2GJRum8rGrXFdUFeNQKjtu8R3DlJDdheaYHhHJcsdRNe6F6D
tz4gKooSfctxWmSpib2KA/YcDRjVgZuDjpkwaKRFjCC01WlHC9uatWh86Syngy7GtEzy8+egTq9c
aeVz3hKWbQ7SOCSgSxLbQBsz/XKTQ6518lffJFIpwN70hLNYrVU2UrjpJOYFFyJCCB1l/sjYgA9A
TuwLvYidOBzgLfvFppZMxA3Nr4Ov08brsPm/07SVReFYF3DsjQGuq0py7IQAb79N5Vi7ev9nHdr1
89OLRnacx7N1QeiKl9/5sdhZYgB7/pNYo62O699UjdUJdfw40uVAkJ+Dv4kaB6utWNlNJrGP/+cb
YtU93gQ+aQJsBhBTIZPsARzy5fsExdAWXo8pNICU1Ofld6WlD1ofy8BHkM/GnWQDUFZqqdCEi1kC
L3f28uzKZN8dBH+0Wu2+hU9ILyMud06ffzRJbV4NyShHkLVVsINmOqyANABm0Wi5Zjp6K2Awe+bI
nrksUMA8Nr8XZPu1iITAdFZpCCq6xFOfVCRC/gT52r3qzkQc417N91lNQVqA+6PQ82Y93bz7qIxb
487so62TDnVRwd+rRaHkVEzNP8PnOuVWjH37xDZdj5ekT5tXF1nEPNNZTT2eQdUfS8oaU2q1wtQD
chgo9yqMzkk324dmyShrgnJjvdzo5e+9rtCmYGYMI4p310CfvbGaWT7IxXOpXQu0qxft6iNzY4E5
aEZ6ZnkpQpdTxDcPLQTJEuT8b6pkMbffS8d18DgUkH+jV7QCZL6i5AdBb8SaXCTDj6pEqTWRJRMq
QEiPBJWNwfza19NRO4hekvfR24TDhKdQlODyDTznXBI3V7Macf38ZT7unaYSDe5HR7uH//msmjP8
FnEK0UtI0ItdpZe/oXNZkT9B9ixEOmmRPa0wzCyAW0CG78fNfwtZrSGoKCrP/CSVnJEFlcx7bTCV
BArSNtzGoafNOXjTVOhLGfd1vvU6iSE8fOygdYk8cR0zUMgLr9OWzyolwt7a14me6n0ittoyUXCO
clXzApF5vl9EAmsSmedK2911PqHw5gskxz0hQWQhXWQxdqdmPhLZxqNimtkknR5MZkeDrj+Hr2SB
+QqZ7QXA64LygvnyghBf8momlc1Pp7KwD3Lxf3tNobKQoLKQPnJHLNBCVBbOpLIwUdmqv6aoDPeF
413f4RFN0Jyy2isIbY0t7XzXgtCK0z+I5Cb1W+gxQWL8zT1D0NaQ9GVPN5jF7YO0bJm8eNCPf9y8
R6x3Is3drNLc9T7+XqVKc3nKDFjmvYNYuMzHo8nS4W0ZEhvv9zmEdEjX0Zc2hszRF8hMjHsWfgd1
o6BGTwGrsYHmoPEPLEzKLJUaQcmOTlLjwVdSu6nPk1guGDowolBiVa9BiTXtVaIhBN9BBkXnRSSw
+KhXiZqKlcCWuleJ9Nx0e7iPf7GHilUrm3U/IoQXw4iULghF7mE1C4F0fP4gd/WLI/gm6eyhSBbB
FATj8QrmmQ+Cge7ABDDAxm+cLzeGuP0VlbLATFaJj3YBB8J+yMNvpYYsYFMLyiKDGsVNSOyU+Br9
kxxvU+ombjpxg+PMl4gD/zi4+ergXu7jiSnq4I5GkxkHld+azBp+c0h7OS+1HuYEMbOgIshO0sp1
Imxl8dj05HGLHjp3RyftLoCORPeDS7gt/TuF0LH04z5yi0NDiwsWaesKmuuNNogZI1usWj8OhBZF
SJQp5JxMC6psd3Q/WFRfAnJZHG/T2nIYHhNhugO+zIfkBFSFV9dMwIEVIQ+nGBqIrMCCxy1+ipwz
KZTVh2vM5xHUkd0k3JCgDhJBndwtVCBoPlTCbhFYsYRqMz+8rdOChel+L4SItuniTWFge7y8myZi
bOCkPbSbqC1P3II9qg75yOrlf9aJ04MT0XdrtgD/BQDsSx10vbexKLHevKm+DK0lEL2mltBeaMCX
OIAXy0gJS+uHiEHsvnZWUjbn7xbbuToQr8INoCdlAyThlW1AbPj8DfxHXNhVJjKNVIGJbnHRHn5d
wqDBwCdFhxpcp8OlIvoxu42I/BmAJNggbyS0blxB+m+nSupK+c/PifKiOTYlSfobcCuBXxTm03YJ
wUoA65MA6yOtMRp+L0hYJSCmluLd0hUaoRYQsg380r+khOzN4ijGBaG1AJuoDv95+yeSn3mbaY1N
CRmW+oji1qpe/oow36zAHJq1BiVvA58Zp9EvEwIIctiVHEPyY7WQuxZFHRM/sjf5JnH0YzA/3jMp
nR/tlJUls34NPxrFiW8bXqPWVlH61KPEPgeFiYjhVvKkrmFyx+MaMatKZ2k78Hws6L9RuJ4ldRu0
FAKR9YCP+ywDmg3ghi6HV1iSnO/CiS7KETQEacLHJlMURQzTBdDaQiDBSTTf1KtOvNF+EmQmDzKT
XZl0+kVcHPigQQPB9HuBzUJhRRYiNxyi+UfK4ajzchYXCr7jUU1q/vFRQcHriIIJsA2PEQUH+X/+
LU3lj8jYtYUa/3si/KMimmcxUvpPUV8Ic/yBHckd/bR5hipOE9Mbfk20SkX4xl6FVh9N0io9Re6L
EaKJVn+dpFXVoW0lg+DeQylarRch9y8NlQBE3qACy6fbM7BJ7tb/h7Y/AWyq6P7G8aQJJUAgAQIU
KFA1aLEVq61abMEWSiiCkKVJ0EKLihojriS4lQKmVcIliPu+74/6uDyKuGFLpQVZVHBBUcF9amVx
K0WW/M/nzL1JWvD5ft//+/7Qk947d/Y5c+bMzFmmm8EhaEdnKsr2rFbtApiaAjpFsgivdk78f7Je
+MRTUrMRCJqrIehxLrH5LA1BB2oLho/1tWTc0CdHYCjkI3EVpjjhH9zYWnwmbv26fg/rm5QSdnnE
9YushiI++7CwSpMMi2A7NHy64igxtIyFVOq8EzUOlnbmLUxL7fraEiliUdeMMZtWUB01YVtGtHjo
mNoSqjOfo1vqnsFnH3228i7WkWuopWV/OY7yXC2OEpTdfDMuoWaJd6gXY3evRW3c4qX3wStLVsUv
PubBz2xhc/Fsk9JRFuwR46st2ske+32CiTfQjg4G0qknA+9gePa7orUlwtqkjlCTvraAhdIcBTI3
/JOeXqpTnbekjF93vj+tamLqwsYemNz7PT7xZnKxz12RQl36jtMGbxh7rkTcWMpqTx+MbC0gdQi7
+I88Yq/iE2cnixulxLXyhrvEY2O18vpyxGOSZX2RwJPE+ZtPCZcRpxgN2W3EFWSNeQj3fmE707Bz
chUvC+jlQSLo3LVy0tVvVPvdJ3xfSSEMlkpduEfpqI8vyKQlLDQooFtGc80nnmxMmQ3mpsi7SNzL
UncjsRmLm3/lXBreT9yASW3O2GRd0Ux7riXWi2/ISnoYdKwmxm4Bj13Dd2u5LPiPG1BigAgprYvG
VFvqYQxhzMQMeTwcaexG/CRXwFjUEcprZaOlPuvSnov2V4W7UbxQ5qL9lOpOLRVsjSxaMC5N3lQo
DhsKynFk5BygvWlHTR+l423c/K/qIGQims1+RBOdlO3EpMhnXLUaHBB1hNOwAr/T8IFL3Pi3Uaev
zdDX2EtgO3o7/JZ93sRNIfzTTEjACJpUjmP/pLS8YC5CEbANt+3bw/mLFozVySHAv/DgRQuKdeH+
+Q3U65a7GsqPa9G6WiNN5qbFCwp0uuG65MDNK8V1cUCnK4YSAI8IyF7HgQRGmbRccKjl9IhZTapw
upYFfVeajnI+9c/4uvTQP+Drb2d2xtfzDx0FX12SXPL9JtZbWlKp44B4iw/g2Hx+t7fxB8v9GDZW
bKm/j4kRiJXX5fZEb4bRCnHnGs680JEN46qEo8Gf/CK+OoGk5zYVOkbRpzn49KNf/JD6KX99kbDc
1eiPmWOweBAzDo7evFMuz6qFBhZSAJkO5C6TK/MTqRm0cNWk8AiqoyeEztlWv91ys5MC23qqt/Xs
7w8xWXcO5nRW+MUv29RuWvhHpDZLZ7l5GDh1WeAuqlVsNdv/6L6osSr6MMxtLDHhtKA74eQj70lx
oV2hnl6/uE2+KY6sMTcj3vyhiV5yilAj0DeLD84FzwH7UWJN41j2ZKzl/EtcIaaA8z2NXCt3s2kY
eFsZ2si4XsCU+xMVi6R53emyFcpyNAAulf1i1tdJfjhUXR9XzQBxYaMcWeg3Pfcgpk/ONnq3JvuW
+vOWd2B2VGabEFfOb6iWAxTlqFiEpVoei1fw7atbNG3nemZSV7etxsIVsGIktzvFF++kjCSwUWEj
2KpcLUfLb/B7UosQT72T4GrOPVJe4L/Ol57/NF8az+g8X749eHT6ntwvmuRoYN7Qvgzjr2rD9nVC
vXu2mPYu7bW6sctyv/h2e+JEwloNkVBitl/6Hcy2GatpVqBhGZ8MinVvyw5R4yhqHJxMV+dvbHaM
0uc3iLAa+l/3z+IcmBagArMT/vvU9g5yiY9P19rbU4yU8UI7u/Lj6DcTNn+xSV9UNymTylgzxOcU
F65OilcQz487iKqQsbg6bCl1ic+4BcYxkzJCA31iW1pSsOJTy+pJY6uqm6oIaVBUZHWHZI1qy8JD
EscmjtXqJq9DRehFtWN14aE0f/3izE+1s+cQbTVrBuFTSGArgMjVTcwfV8OfmEyu49B/6J8F/6V/
Xjkt2T/ef+ofppzm/F2LarO5ESFzdfTf6CKWEF9UO0oX7i1a4Fp+rdzEjOGv4VMSbT3vXRVtbv4N
HHbzzTDjdL7o/7bKiv+q0/a5/BQeTwjFJqYIpZZ/keDJjDBxyV5rdi6TLDeii5o3tcnVJLMyJLIy
hLMWwUHMkPpdhPHiO74gMiJIEaG2yKHtoWMUx9RmRzZsR5tjvnK3z8/2tNRK4V9+A9HIh2h5XKta
2Ozcvz7x1eHETUE27J1o/TvUJVwFWv/28YnXEvFCX6X2MfrUJ+Yf0qL2C5hiMFbiF4+vki1riqw+
yEt2En26v6Oiz8EE+hQDfah8v/h7S6KdYVD9XYREZhlVtqj6n88fxeX/BV8W5yfxZeI/4Qvtb1lE
yhZ5T65X1wLvJ+Uq01HxaW/Lit+Cb1zxhdm68LDIaqmdYvOLZYcS/ZleXcW7KH+GdEsgU+Gf+Iz7
xgRBEyI9vFdTI0EaIoOPUCANcezRYlT7RPt6NUZNb5Zdl3IRbS8osNQR6pkU4vCLy96CxYwKeVXV
MykHoUyaywEJrwAKWxXrnFyag+uS8JZtWlgyrQNXkHxRwe4CTf8wn33iwX/Gt29PScG30D/gG1YM
E/GDRr4zk3ZLuylT8qImthFAS71X8ZT5/IvXYAq48+PivDeThLBgRSolHESUcONKySZPyAhTK2zE
8xo6fKL5UFqCIm6KLiCuT5lQoPnTNdavD6ueSU1cuiszalVKs1R+TfJqxG4rV5iVNf7YdYkDyJYI
ESFlW2zCseDfLPW3MH5CNbd9FZS2jbB3xeKF4PGIqGvX9l7hfZ0nU2zS33JJZYetmQEnzbXm7ri2
z3KKj1fy2Ya9WQ9mH2fOHik0Kt7AFyqIkKjALaIr5WUJLHI4spkdMSi1uVS5tPBMp98rtn2SoFp9
orW5KfreuO1UL+O9ovE1qa/ql8rblBdwmyLvV5XDNSslJvrEFlR8xGdseCNxkxoarsT94ryDaTqY
1LwpefAUUw7QEP+A7YE0s0/7qTdSLWhU41op+wjm4ij4NvcIfDNr+Hb1ySn4VvZP+CbXj+1jHn6Z
mWs2AOko0/QvD61UWxN9GLYiow+z0bwDljqoAXt5PbzhAOGSUCZZl2aArB2oCvVYdEDdfJU4xZTX
JAI6MuTmiyIAudssynQrb+ROlBGwX4/sPxwaTInDvSL74yFL0bpQrzYnEkwhlJyEU7TptpzpGW5i
V3EQ/SgqN8mmX45KRURvPTvGgeWN6VboYRLJ8IspK9kYh1MpMfNA2pVDtGTUl/G9JARttI2PdLgH
c4Eej9MnmnYn2DRDFU3Fm9k6I/dSVeU/7ef5hIV2x08fTpxHjtQoQKZL7DhJGxELRVqciATVSM1/
s2YvLLLayDR3nGTPwWq//Lp6dGfUa0syx1niGBceRFuKcL9g3CdOTJadVtUkI8uFBWUcvb43x49a
35M71ff8+FHq2/o8habgp+p/2hjZrw8PyV8/hqh3y6KsybK+tJuJLrHTS1N0CcLk92Toxq7+ptnT
dORtxOXTq2IiHKbwMFj7kxp71fJkGV6bf/gZDGluk9eX0ARUkFDZq/yiNN4H0+iRbHrHiUj/O3Lp
qehTy63YTNaYipott8An7dII6vEmsl69jGhPjDYMfzwVHCr9Qy0ps48XD3wkyS1s4p4IzcKRgQA4
gv0eseJlHh+YDq/WajVNrRWfNVbYbdE7uA7Po3w21s11pAQ4WtMSDVYTUTvNCifI+czwcRS+rAuR
N7s3/vMnGakLffCL64fo2IVLNF08fAw99oG5hIHKeJt2cwlcqrBDP1/9bMVnqyaRj8+n2XkLVghP
hHFLHfQjhEuNnYHYkBu049SuFzI6HZ8GRsdnKulKOQRQCiEgjx3lr8fR50FqyiykhDTZVNxYo5xN
+NyRJT/b8dlOn2fT55n4/G98/kL9nI3PuHYM0eer8PlWfH5L/ZyLz7nKMjvfwNxpx2qPSEF2OVqu
HvxR/3wxNNE/tWpaM9KaU/unAFlXZ/1T/wzA55KsLr2LqzJ2Qdp+LH0+JqtLfzlx/4nPnx/LvTsn
8j7Eg4eLfSNkzEzExAVzntNP/L90N9r5xJLnr08MmKDTpVxGg/JSxvEKduyQMZZNTnK6zvqfrH7A
SrqFPuVqoz9yWB/uthqKIT4P3/87xQbkjDU6EteHLT4+BfWIuxgjzayu00Bfqqssd7F/+it+MHZS
8PMow76iqaeKl2/VmAyQUGZglIkz/JEOaygj0pERoiU4K3yWME2Gkpv4bRIODsQN9CeA+yilI74V
Kw8L37P/KVoigrTtcIr5xarJFj30YaqYV2Kpbxi+ipaqVzWm6HJswGCL726w1zDVtxw8Ki0OPm/0
blBGcaODs6JcWNm7q0BS5NeMZP9BTCST+Z9spzjVIRXea+x5VkVAXxEEKdS/SipS2ahzXN+jczKa
iGtrVe5igamgNfYuKuVnKWCWKHWLQdwcG5pjq05J31dND24mfz3bA7CsrDBbT6WV07hkoGWlU39q
hbl3pMG4xKfHlz6nOg9HmuntMN4spzrjS3zxyH7rNesWvQslvvgq2OgJ9zlshEeDPuWLirvHQ78f
rsvmfmLX6bPyN3JHiDu/k4V37g/Qdtp9nwbjKyrTOVxa+/UrY3fSyMPOvjP+OX3y8a/q9l3LJlgQ
1AXKbZN1ovxHI4q0roJ65BNTKeiJCvqBQkJvJz20dJtJv4suLaWn2fTkDOJpDj3NvqxUtwp5UKZB
q3hO+jmQJQQzxH2d3rNENPWdNz8ZbMaws/1XWiYI1cuL9tamKXvlFskvHmbsNjcbx2maIb5Ax4W0
vVWtf13h0iX8RnST7r5p/XMFsuaWwoAa5qMv2l0MKoesPI3wvm1DG/ZtK0+Zz35xYl9mV3EkbeJb
60DD6lKduEOuttVdz0PE39au8bPeo/gXHj2+tC/m83vEd355qga9LZtTmWSU1uiwjo1KiGzzRYbP
7QyWiFPd7DkLe14ctfmkEZWkgwa7Ij0QmKujp1bx6nVuk2ofkxZ1vzNoc4na8yQx4et7SlndpAzy
Er7DYmHC87hoPGSITZTcaX/LLSxIO93ocYm9g1OjbWs8YIh5ONrf/a/15Dew3/loetTBtigc5qjD
GnXYoo6MqCMz6siKOuyKRWnOWRtpsBGzeOFwPs/N+SPSnO2j9Y9eaXzPVY3zzsK22y+W87uxchbX
1S9q5bt8VemBVXoLnGCV3gJNTlHemyePXZ6TSvtyBWYOI2x3SSeyHnaPUtCVn+9CXyrYhno2Nw04
mE0DYsI6WhfnUS/0Of20N4IsFA3RI26pakYEuHzftuqhDVVENL76JnXeRn7NSuafCWTIQ+Z5yDxP
1A7GnapNGrYvzSSMnitDIs0cmC1yM7mICt5ouTziIHGXft5nUUhJkFr61gyOUeZS9oorMvi0uMwt
5mRwKC1xxUpzefW+bVVDeb0Yx7XLSrWnmqnaA86K6lUB2IyotUUvedau/QXcsrykMplE2Z1SX6Kz
fVYcGUj+P/VTcv6bIQ8VLEyYYwz3D6yLyWP9jU9rd4jBQphAfHwnUwA+Sg4WRmuzWxxZO68kSuSw
664q1QWWDC7XhXqD7+636jA2DG09fOLzR/EoXcEkp46kD/A7ED01saZjodJstPgUmGHJoy21kbaH
3WPFuCaFJjxMOemomiNY5RA91VPFt9yoHtNPvauOxAcv6PbeYEnLs4v2EynbjyQsLRHtQzMFm3C/
6orZzA4Iaq0scPDacrkR3/gUt39WdZXMsdaoC5/Mq6lkb7KjppxaK1vwiJ5ZXSU1ZtXief85054V
1Pvqt4e6i5ffPBynBf0L7g1Wai7Ss7Q37oyXqCuOsiOnCsZ0u8FHerqhgf/rKKqx59YOol2fNIS8
roSvItdb6jOlGFOx10+920vxmviAxtxm0pS9kTcWdjTOgCuALB01lQoN9aIS9A5rK26rZTl4wwYg
UmulrS82APu2D92++HtTRzy+uAkOBGGnXLXzTROgqMMSg9pwTkvRNupb2BYvNhzwRqussjbnmPgI
CbXxGuXBkYDL0beQpsnQwrUJ6qNz7SVUJx91UWwVd9HKRxJdBF82fNvlsIZuQfdb6p+lOdd63WEp
J4NDAlxL3IkB+94rhj7JNxHagKFK6qFC22i+qZxohoxWYI46wG1PdI6fkmWxmuW6LlFCLE9erB6R
BUzLpWz+Y0eJ5oPnUa1yPlHbOYo2/2zKGbTqjORJhV645z3uhUWvHQaNs4KZpe26dO2a3xDtniLA
vSr7qvJUAzQqxWDzFlETLDJ0php8vMEG1/sgmsuplJq1fNOrYA+oQZdqD4id0tfZcR0Ks0C4ivIq
L9hxH+1TXuN3mAjaqZPagLTG/UJtFD9ice1PhFNKT4mwj3XAYG9RHkrN8XK+4IrZPTbx9y4v22Wl
nhhCX36VTK4FiicZtEDl81czGxvK8Dr5Xcr8fIGsltlxqQbGtWqW3A/+sM2oW/w+WpNK8Y5YXwqZ
hqhrjB32a4rxkwfx02IX7z2kdVmX2HmYhYu0hT43OpAoCIT9psGEdkYVF3v5tk5s4v99f97/OPXn
62p/WtX+HOnt0p+2iiP6U1/x3/rze0/n/sS77M9oxVH7887Pj96ftmR/WllqX/o9sfOaja4sZKNA
6MpCaanrf9efNtmfwz5Hf9r+3/Xn2Y9Rfz7l64yfn3q69Of77iP68xX3f+vPO9yd+xPvsj/HeI7a
n2WfHa0/VxV0ns/J9TmAA8TEEh06XV3xrK5oH3mIAJ2JDOKNqBPhu0R8yxoQtn9YdbNVZces6Kly
0apu0esTx2Kp9MSs6JiiWF1KudHtijRQ3q9z3tYmSU9AvJimjOCP2QXy0lnpk+A6zNJQdZfMNx5x
f1shFTBZ+RK8PFbqJIOWG4W3iJC92MciPV6PH2pOXxyWEtJZ9bvCucrpsSrTe+hV9T6oj+Iz8qbd
5faIw9JET2SPPvyTshaTVg6HeOMT9fZ2lbNz/wvlfOICf5qp07XeVqnT8X0AkUp9tNQYLTVFS7te
+EbOIrz7zVIXRdkTcAfTwykmsc0D7A1P9om3LtOpOu6nBL6hWIHs2x26ALj8AO7+g+li1cWJ8wql
O3zznMEBRjiEoI4epKQ5fWICh8F2V/cAcLHtjWj36DyjurtsmWBE69W3SJEu/FPgYKIwJaWwKcnC
UH++b4lcaDoUudEIO0AGdaUwE0syU+lRZAr5sEn1x2itEhaWgK0Op1U2KQb23FDUHDqNfa1BPcms
eMxu8fccrnw0X3GUsavf0Xq1Hk4x+kJpPXSCuUoxKOVWtkxprOy8nhkVOKwzKqW2+E7V3kl65DpT
ib92UKAEzXFqGYrRF+hUKzpWGvjSDDbBBbczmdxVoe4U6jJFrUq6UpLFV19Y+4yRaaY0fClTHGZ3
kOr1zqfyeKeTqlRi/TQxrpfILMztDlNaOF1mxB9OUErQ0CziD6jTBtN3Y7g/kbtTLmMNRacQstXM
+AE9soPcQ1iBE5s37ZSgM745cTRHM4ty80gdniP2A5h3U9Uzcz9UjT+giD6lQ4znDbG1S5uYvOBI
ExJlhLyWOlY4nsSKbk7R+1INWTMDV2rdHDw+eAVhTt85KuZUN/GtCfVqUfdwD6XKTP0JYyLbfWIT
5qaFKJTfGPXBMzm1johRdBqfMJbJW8rTiDvuFq0ytw0MLEriRr/zJW4Qs5qulJcpfiidY+s3WM5V
DDDM/fXyS8aoqrK6qaqS+626KRBIVPZKruycCxOV7dRffNoiPvuIz17s1NNGO5ANsvaRdXofu0rj
rR6ReULmr/nSCjsZj2bpj/2oE2m0cQzmd9k7plzYstxYPswuMeGQlnIwRTS6V/Oh0ovy+lhprmLD
KviQ3y7u6RR6NPzzBdOc4iM5OE7xeUinuvNMI5LRhz4SfgTVj2/Jj1Wp9oLS/U5x+6VYIjuCer+4
h6Ng49ONT1eRhd4lrFoW12r5h3Yq04xj+oTO8Af0i6D4f45WhYpElHeJ4MrPbrFZ+3ya/HzEdOL5
jbbMmcfkrInf9ZSf+u7zB+DAKbACQzlDHKrCAVM+erJoX3hY4K7Et9JgMGgUCxhpbNyKx2psk3VF
LeGe4tr5Ot0TeOPDn6IdhISh0z0i72INue2BRxIZHc8ZFZwPicxxs/nMp5LzA4aaxNA7dHIDZS5q
CY118jvu81oo0/BJgRe75PPrbHXSg177xK5qtn4jM1SmmWJVeZ7ouGitkfad0VpbtDYjWpsZrc2K
1tppbx2tzW1xFAJRorUl0dqyaG15tNYZra2I1k5VXHZfMD3qKxajYijCpJRkoldaQqMlLUKzZC2J
xKy9iGvpoSTi3BhqciHXxJrfXtnJxot6H6Z6C/k50ZoeMUdhMO4U5vO4g2lnxt574fWzFGRQI4Bw
hIACK2SBMV+eG2X+uAx1tEoMoc/e7nJFc9jk+0TtPUO+n6a9Z8r3kdp7lnwfoL3b5Xs37T1bvv+V
rr7nyvcftXenfA/fpr5XyPeLtPepav1m8rtPFFfxQ6KDgJ+B3vpEt0QaCoGuf83A7Z08s7Y80qgk
vC4FdWLMoU7nrQFcxAQ+QuoycdLMzvh8S+JbafCSYE/xYlUKPi/S8LmFWMEnFqXiczHwefaFSXxe
kcjoeM5oThUG/YpZnfC5hPC5F8zEOUoUR4nEZyVLr+FzMeHzw13yycQEdJQ4xbwLkeGwWZ3wuZjJ
b6yqQEVqWspqzUdDbbi8UFxZvmD3qC9bXLIUmRYrJRlHweASicGGCzUMpv3xUpT92MyjYHACf7Ge
BT5P1N4Uc+QBf6f6E/j7LONvsVxFEvhbIhHgzgtU/C1wo8SRXENzAn/vMqr4YpXv9cbO+Bw2dsbn
i4yd8dlr7IzPE42d8fk0o4p/71QeBf/2J5sVacgD/mF//U/4F03FPyIUYxxGjz88B+xQLLPk47a2
bm9nIUM4nIsZYYVRFxC8BN96bvK42lANnXUs1zZlYMxcj2gQglU2ygPBWhNMiaU7RU9ZY0KAKhOt
FsyQDIwalzJq6B3G6k5XSsRyhCZ5fEn7+Ge8jRU5Mk4X6uETow3yTqnZFmnTh38hbnhJGXZk0elG
8fh5fIANPNkSHRRullIIxHQVTbOG5/kD9+nVdgTKca/VNCPZljTiWLzKjndRkkdcqhbSZIvs0of3
UA9FbynRwyF3mSoqQLWZVRmmJrX1IIIXfRPhEYfVGnGY9Uy7YfWgqX592KgMbOvT3mgJg7lTViAe
2B76vzGy0xIzLoo06mPGm4j9SYznNHOsNJ7zAX2mZkwzh46J/AKnV/3RdVFUg6+ootOMbYaI0Ndv
Ce/otIQGtmnDFcwVO/wSC8xFjeGhge2JL1gbDeL881QWqIkttRthtN3KFtttsNgOu+1Z0XJ7tDy7
C38Ib4JZkYWZ4Ogn2YhflbcAogRn32KIfFP5Ko6vTLLDpvCYSdnh05VJWT5n7FqbuEmTGawKn8C3
obJulwcgBUPVWyPvHiKT7PrqpkiDPjrJXt2k8is8LQjX41GHnbYzjow4zSxlmk3xZfmV4sVFf8/r
nvO5eBnmvWqzEpJJSX2fWrsufDakscJlfvEFrP53EBrYAycmqxEMBQ2UkLmyM85NUt2gzi8+Zwwx
RRxZemafU7axq+494vzN+BwM84aOew779VCfRpFhWb0o7w6HLtKQ0dQorIk3a9NzurhOhyimRKCp
SX1U5yuxhMp46rVYeRxaTGmKbYlb3E28fOO33SDD0XgU/pC2ieW8FTmW0NWw3rCedsn/4ZXE1O6w
poV7KQPd4gKmhEa/UmsN2nyRn/VihYxSH6/G3Bvv70x5Oud/Gudv4eywHvs1evisPtTLJ7ppiXtD
WyHqsMr9P98Hdt4/R0s7cbiBoRiSvDtpSGzC4k3F52GJL6XBqwlhbvNr+NxSYmUmCT4IzEDuTvcf
prHUWzqueG1m4LRELtcEr6Ncpmi5VDWhMaHMwJmJGJdyjFHJGIGxenlWzt+d4ooKlevFPoG2SCUp
VUTS3b7kTr4PbQZnEylo/DutfkvtKR6vn+8HrjYq15uUc83KqGh29Cpj9DpTdIaZaAChR6TRWr9l
4dcQL4SSq88Y+c5AX0ID8dOLfsJW7GadJsVljDqNSo+oiWX9U/sTHIKZD2mKqkz+2myPT7QeVr3m
0BQwVkOWK10uOk5vknKzlXZVPooN5JuLDktP7UTZiiaZFhqVlraeTr94QPXR2MBaaCB1tMmWbczz
eFf879oH7R/b/7aJPmPUD0YzOukoG3Rtf5MfJ7ahn4b+tN1pXcvrFPMjxmQqlT6Y9P4Fo4J6n9h4
KNE5oTFax5xRoXZMi4ONMPMhe5/8LcRF3LWmxcHXUVG9vNknel/VlJRRYTehYv4ao84jtWi3F/0R
nWk3hQeIvpBCb+Jjr73h9Cpp2arMbitqUtbBjXa4R7QKe0AK9hLp8ysdjXvSIi36yE5DEa04goag
ua2P3ycy5FVIthyGwaqULNV7ujTvLCVCOHPiwYyGOO1kDHF5PmZZaW383tTrS+XTSCuNiZ6WQFpj
LMrAyB5jNHNQ/vZ3IclJS9tnvPjXZil9YmWLD0bWq+kVa0TQAhw26Wlj6DMu3FM9S1Y5Bf9MfBDm
9REJC/VXDEzBPvk7ScGSd9p7Gw8blN2hs1goQfo3361Xmumrgb72VzY3dqQt/lY60JwcWX+wVDHe
hAE2rN8qqGfq25dMioc3Vlcpa2dVptDPs43y2qMxx2EMn0DrbX2DXzlTGViTETPflPO3YrMopxT9
HrbQAhtppaou2MXmJoc2RHamVVPXp8onyPXQUlfHJ8whKK2Fwsokc5HDHLLmryeUuLOxqjo2tUec
mDBqdbgno0VkU7zNFFkXf5fxZzp4gqIPFp6yIJ2qWlXdFHPF67d4aoYrpysjYua7c75RCnopY4r2
Xdvnmr6YLFSrLQvaaBQRuVKmqeJb+PyGMTTnqy13yUsenP3Ur1/A8sqN93ki343wQlZAafU1Hui2
+McR1HX+67udE9m0cyLoypgq48KzYjfqCaEYnXoSOq3XzFeHu0nPozThWxYM1M5TW4yLmSdq0Be1
1OwlfCJ20Hi/suktPnnZ+h0l6WHlNjcdUR+qDtWGhqSxo9uY8cba1sXfokZKPx7OnRjOrbClm2Kf
iLob880Y6hO5zqgLmVpKWPaeaD5Pu6Oef1Xw+ddNB+XZ+dRbDhb9FuqVMpqx8sP162nwjUsx+N2V
PBr8ncB/QuX1C3alSpjJycRUlPWWfLFwfMFg5bOcj5R1MdsdKyJn6sITiKuL/EJJa34DYhEpqx1k
2BszvwH8HaMLn6jh1cLflLKXDipTnz9YtC40HPIJVKVZVKVK1d06ewGRYlexc9Q6KjkHtDpuSqmj
6k1F0wcy4mTLJ96FuzYcEw+igSz5WxvIPj4xgR38GVnPh2aodgy26n0+/3rXiNsO3Jq0l1iN2hV7
6NgAzG4HyrGijQ8uoBUt0ym5tHXxxe8jaZNTnLtPZeyiRjtRnzo77PZiU/KoLF+N6MG9DO5h/F7x
2V/xuFfMbqdfZZuYIf2R1W9XOqI1dqel7q006bfg1TS+Q8n0ucScRwn3XrMLneTVa81UOZ9HzEoY
CK+ro8heSO1lt0zg2rvbunt98noH1gmk6vbyWWmJ2xivz+UXbU+oZ1+WuvEw8LzQqAuPUO60g6+G
9Nx2WQKMRGNgWoelSfo/9hF6qO0J0/ZgbdpOG7tHpwWwH3Z7pGO6fMUS0DaAGJmOQbQ3I9Kgj+zX
E4W31V7hZYV9v98jvn9c25jWYSbhFiTSGH8PZW79mQ8Liw7XnrnCK078S+vustcqLHUxRK54zell
IRiP2ynuS+Z0FTYqzfqifTUtvGa9xs2KXRenpQ52U3jBqrFnib86Ev1YDA3NjIQ+jUySoMc0vDyG
TnGs5oc+nEcUyBoeLGvg8/nEoGQNduvkUH6Kgdujh6JD29uSCP6Vv30MkaDa/EhLvD5ek0udzlm7
RYtGgWhHuTlnw9YflW8im/TUEMqhiJLUfMRX5US3wmPy2+vjtfnJ/WMd44iT/mKIuUpOp1PUPaZW
KTRDdshnVBxiSpMJarM+PqRMfWEmJRAVifjZhLaMdh/Ec7bqK+wZmgcDS3QHLbwaYrR1V+NVecWk
P9hKYpZTfP0QY0sWm/SqVGdCKr1iIVC/sj+VAJe3J1mqWU1jauWlzoIMqc9A9LbFuFQnN9P0seZX
Qzx/vSEeGqpZYbIatirDl2YOXjLEsM7wadGH1/xWScnq19cOIVI9delBaokyBgQpTsu2D3lg2W5K
1MdUdIVaGa9PvP2XVpm0WU3+WDEOOKFmFp8/XJMPNnzgWTpYGWigmbok08oLwzW7K+t3Ra8wEr+Q
HqspPEj0QsUnCzEWxE6YUPlpKJgbl/DSsgpbN+F408hnW8WKwZff3q7T+5UbjdEQXwCaCbLhrZMg
g9X5aREmvMoMHxNwp2nU6uJgDVGrK6bIjZwUCMrG7qPE6xLP/C5vDI1Fu6Nz7QXhQbj1D+rdYrds
rJTPyIYIx1SfGPVbPO4T//lN9RxX347CLXW9DDy0OFBMx913W7ZY+BzuhFnZp85h4Ek81eUh/vFp
jfzUfUU1XHzoOYNKKsqZdpyy+NCpei2EiceIyKFz5SsTD2v+lsihgZZH1sQq+umjFfZyyrmcZ9HW
HwMhrdHKWstLLdidRKHt01DiFJsnJfcnuZa6GWksjpatrIt8e5Y7hxivkqDOyXJtH7zFNyAz5F2Z
2RW7zkjM/XA4+fOJa59JzOcBMgv2v+UFfSzS7jUsdfulLNJUord7mSN1Kntd1FlZYr7qqawdQheW
uo/00v3EOj1LnpeAnIf70NZkmob5NcdCNhzcsNvjcwZ1IvRiogq3y1Q2VW4ewlc2l9vvc4oPn05E
ulylofJOXJz2R4K+efQJUXEYHrB5+fzsYKIV+fg+014eOaCvnfkeBGiK9tR6EvQwWWgGpBmgeOMU
vmTBEP3VOggMv5fo2aBk7kwHW/RFh2peh0pArMwQv2/fAaXD8tIBIm6WJTHMru357WOoBrUlSjyl
PBggJsr0y1OJspbIvUgZUeM70XNNepxSEI2kxLGCq2rWsJ152MhjYQzqB+mPCduD6RgpXOVKK23K
Z5S5WK7lHcojoh2bJ4UsORpL+sN+Ga7gmh9XF80QFsY8ZnBp5daF+yY3H2lPyCMBNuETwrV+NvVU
7jTungK3+M4hb0Fp9GSC0t/lrRcbUUFAXiKAUOqPXVyXAoifqtOT6YUN9GLg60Zmxu2076NdvBFq
MVhqQscE9qQlGZgwkYTKSZIkQA4CciUsrlJKHK5l+WBM2R5Kj/ZGvaXOjDOfDn0YFbTnb9n3G007
u0/M3S3Vt+AZ3BYegM4F4XhdOjWs5izH1NjtvA3LooF5QP0iL3Txme2RFHrFx7+CCarcBSaoQ3j4
714xZZccoThbL8uw1A0FM9RuqeufJj3Q95IMSHEK3en+VJLuGNOkoK2XOvu9x5J0R8P6Gnvumzxe
DYfBgkAK1rJkjj4hL7HD8tKO/C1K0759tIG+sX693xc6XXy2NzF9lsmMrF5npMHopMX+vCc6sRtg
eJBR2+li0cuqiIKlzqeXww4+wuv2+WlGP/5cIh2uuJRmZV9Utb/Nxkfq1ysH5GbW6wRT8XuSqTDJ
yZ3JclpucW9ycqtSlLmWl77gRvxGjQjD6K2O29En2Y73dV3acXsyf9wMJNpxqlj1UqIdy2Uq2Q4n
t+PLZ7U5E0q0AR4LD0TmEmeA5lii0H+DJYVInDDrIW4c1edqUbtHY3QKO9UlXatLKEsV6Mum0lxi
2iOp8y5LnXfFnebdUo5j9IrGX6TZIsyYSomZYte/1aaEWiSS+DzUhEGJJryi/NEWq18fimKZAGJ/
xfhualsW6EhZWzGR+pUlDklT5LNWsd2qm1/h/QT6Ees3bSnUxdoYslYtfl817WVu7dMBpH/BDk3D
MWGjZfnzmILn6Nr11E+PGOCs4sAvcsKxA/jwUOLanuXthVuUyqrNUjNs8kDQqwEcpJjfipNpHTpg
mx/mfsSfCMG6KH5plRNsu7IXHAXNGAP3YpaOVjB1rv2WxpwkcCQxzezi0ceS0+yXNGxknGLmw4kp
1oxED3JbIjfSgtbP6xELtAFeYFSa2gb6vbTIXX9PYscRRZJmbGxpz1Fnf5n3HE5xyS5tz2HnPccF
ck5b/a6Yy+h2+ogUFYvvHkngKzYuQK/FBxKbkkxmLE5ffCCxK8lUdyUH5K4kU92VNEQO0K6kIVam
0xO5AzmovY7pPYx0EDfvFdcnC/pCnXi0M+E5uvV7uTP5prZE5b/9YqlI7k+od5+WM59w+LVsvxtU
aVQyv6i6P/mD9icz2WkiFjqKF2mKO7Xm8/jdCcOBNFzEjbQ+nEg/GXsVM8SRE+vzMjsUUz0ucdOe
1P1JhjR37XeDlDyTzAFaQKCqsMkeadOzfPPbvOtS9uXvov1JJu1PmuL122l/UiezdooT9qTuTzZt
/VnZHfmQ9ydt2J9k8v4kQxebpQ+fTvuT7bV5yf3JMkZRtaVZckkf9HCChMje+ILKapCkzCp9D3wc
VyreKcAa/ctDWuRJKr5jbaflLGetXvpXy5C7kx/lsaCVpgwQiwbTLXo/oBGQvlr30sZFZhN5hxG+
EzEZ+4C8JBChnzR7ksbqysSUC2AANaJwORGFQ2dx5WYRUVCjdD2foQpFrjfqamcoeuLrQ/D/aqIJ
oIfAsi88KnIdzZzj2sdbjeFhfDCsU6A5BFbLBh1nM29UM6rAm2fgA4RLM5xuETmgfoDfptaRe1Qt
XMkftL9gBMlV/tbU0sIZWAwJGQ8yNTBJsSHQsVhpdxybdcexmYidG288ZFj8fXedbpHv+m5TIhs6
JsSm6Nmn0tadUmhvNrXeC2OlYnax1H4y17eH7YGo9jFYGlxIXfPdOF46YJGziugxl8UOFCpfwsm0
cRUqJqZSTb/Y/XWmHeb8gia32JAmRyzu9YUcIqbeRHXQlpq1vONpYeJ56nfVuiT+07azPxjaORRx
aZl9KEUuXnTNUNojD1o69Yz4EvMZbVni5zR1Fai9tm1w8Ynz0puNZ+jaTMUV84z0FE/yp7lUUAh3
bxn128M9Fk3TL2pO17f1j02Jv2rY8p1pYJvpZb2yYctOUzqcDrd/lJXOHjND3RZNHR3XM8tHW8gO
oYk+gaTBk6qOQo8twyX+V8XaBtms9UrX8zyrqg9jdAILrO78Lap/WXPTUb/zQaQwHF0+jupn1Hnf
3fl4qS7c7d0G+hNZaGbvinMwaeoH6OUZEPFZ9OTxixtVT4JG2g+ErVCBWc/eAk1KU+WsptiEw7RN
GtSmsRX1uCGJTTnk8os0LTB8IzHmQV0w7vHFP1UJP+4Gaaf/71Ztv5PnJ7oUfy6xmCyREWKJCBZE
+EaLELqMuAuzPjSQ4lyqxVlwf6W6mWYJlbaC2GRdp3JDpyVT5SdSfZVIxTdsjLJXB28glD1Z6mFW
wnROYHcCn+fxx37F6t1WJw+rUu4QavTEV9wqjSyk3tE8dqdtMgyHne4TfV/DdKlvDw31iQGvqaIr
T+B7uMQn+pfKS+Yp/9LpnpCJqkInKOWQqcyScyXrOaPua6mFaqUZAwriZAE8a1P0tHspSduG1PIe
+0+yvKf+06m8Y3ziiRJZ3vbnUsrrq5SwGZX4TjXDX4jOdkKplPxLU/KfeET+E9T8b+ySv/V/nf+3
rybz//HVrvl/f5bMf2iX/G2d8++qQabKb/NJeaiHX2zslti1KaobY6fLTWjvF+ezjFVG5xu3rumX
JdIzJ0+kyMWJ7UdLLOe3Td1emon1wVDKWUy0fi8LbXXWuOWbofr4QtaD0nwY0l71zqQUapW5fjt4
hvC4+tpAeIzq/sGm9FEmZ/iJe2IMweU1Vo6qyuiZqswo6lxVqeVJ7328yqXGyKGs2kGBVYT3AShK
BR6lJ9F8mpyH20OhmK2o6NMFJ8rdXmxqfp5LXEd4Cf6ZYuhrzbMoT1bDSRZj58OBr3O2wcp8Xp5b
OGQKO+SSM7yxabSrYXkk7JxL9dSWnANwgaGHd5+ctp54lo6oI2vjx+3JOUTk/ThVZzWjazvD3akG
aI++qH4Xe3bN8ho+d8cceU6x+Vl5KXoFaqnWr/P4aPepynXGSDxr/qDAJ+iJLxI98U4B9wQrx/N5
S0u1VFWsatrnmMnK5dPModMxaQM/aKkCOL6kRTFdbDojKWnBqoApXUUhLTmNRR/Os1C/npJHCDFS
VpeZJ/SUP9lTGNB0VCA6phOOsTnF+u1d8GU74UtlE+OuWstQAt0R0cO+nlZIw7O4Ie/jV65XO+BX
NABso+yAt/NlB9TO0bFSQmiIP+ab6/aKa57hyhr2JBgtZuh1cgeZhYplOWHXbtQhVU8j3A0nG03U
l/OP4yOxYaOKWhxzmBnt5TdsckWa5/rEEJlvW3f6pJMbQLsulKYvosRHquzz+TI3tGUit14bFR7S
UA7KsdTByk1gjL7T8FxEwzP69MT56SzUy8LeEjkNm/dGqy119zMjkugbR6JvHjmV+8aysuyMy2h8
/EUtCz24Na8dGpt6xlxVf//6eKRVX9QRPjWyRl/0Uc1u4K8xZx2N0vrafrhMW1qRPneJrRDnyo01
v1dXRc/RaQuWC8tct8DZWonBOVzta09LqXZgQuLr5fz13NSv1VVqv6hZSn0DxWWt23I9LCWagjo3
+KlP9MyGsevoMeUzQrQM1fZpX2MK9YiWz5C3nYFrEh14EzrwBiprV4Emo5LkP9T7zN6LZ8+M0wIp
Ey8u52FJ3Jum0Edj5DqTjsqhp9ZDf8fj/GA/JBncLt/POah+Nx5OfmfrEdhX/vjkETYKfcpvUi3l
uDHqihI+JQBOMmC8S1NL4eTp4hitLZpaylUvSFqfqpZS84LKWoa7B2CG9r+ppaTQF2gbKCUgd+aE
7Cdk2R2zmVD3UVxZbqfYw3U0yVDanUj8MiYUKXYU8rvaXp/46wlub6rFhVR9koz4TtavUCBwN1yq
DHCrI0hfA/zP14ZPKcnlSJcnItVpkXokI8Ggf/LHxYSJWOjwsMC8RLp6Ld3Hp3bBDaZXfFRrz98V
ORwnigp7+xNQXbuyt21Q0V8hs0ZNEAufo/NMYy6DirctlKEYitaG+hVtstTtRIy+RVZL3WfYn29S
OU6PWCY3hVmQbYVh2Xkmsf8Qa/GEzsJpONR0siiXQlYq4ho7xS0n8zwuWhudMDt8TGCP9oV2NjdS
Q0yyIfJGOnrZbAij94pOmBG9bGZ7qbUk5PN6vR5x+2H16DnsCBzqhGCcSdMpKZmMyaFijJ3HA5Ee
To2k9FfGG2Ej5JhIhymUCSsqgwIzEL+3llIMGy0PmXsppdZnoTqWFZ4d2dk90mG03DI1Tv/s9ate
KtVFL3NGrjdbaaHPRPrhifRfnyRb/hcLrpSbXTGPlbbRdz8mFyItyB2bkOUUi9RQ4p2K1oapD6j1
WaEhrKjXX3HbXD6nh/3Tg8HfjIEwRC8zRy+bo5Qbq4gIzopOCagUfMU8qhVgFMHxKqj4Qfu9MTjb
Pg9HNF5x3iijND0SOWydbwt8hHG5ILAKtR9xknbEnuGLzbJ6nGLBc6oUbNHhEGwfs9ABcQ99fJ7I
2iyvePfRhOKTlKBhyQesmKEzfdI6lmjN7lTgDygwJAv8dy4X6Iu0WAnXGvhY0Vydah9Mpa+lxqaU
95KKTvJ6mJPRUhkmv8/obM+gpCT5jvnbVxmfzed09BLfuW+8VWfVgSLSa+sGoF2SqV7VcZcjlcCu
yr278/vsLu93dn5H+bFy3mnaYs4spWQ2z3Un3wcRiVr2GfOsCTq+al2X/A52ec+7p/P7nHuOKE8p
N/1jeab1ncvT4secTrfinB0rz9JuqmxImAlzS6YtSJN5xFqTHB9wO4RjtmuKRtGvR0q+QKE9f3vO
7jYjs9NOEyrjjJlHu3ziok91OsMOQm3DviLia+Z/TehzVH5y1b1d2ruxy7vu3s7vBV3eA13eH7z3
iP7aVzJTlyUPz8LpUjyMautGlyS7MIPHENaG7tua0h2rPuqSv/G+zu+F9x11fP5bf3ds/ef+XjX3
KPmZlMnWyLfdI/sNoeMj+41E4CDuEB5CBdBcAAuCW163oYF44tBmiGsc7cuNG9TDggXDg1cEHqVy
AjDpIBegdOHO1Zaf1Ip5EgyjlehMrKrQw199/uhoKekOAUpHF4WObOh0OHKjtXnR2gJxHyTtJ6rK
SJmJ5byfh7aBX89QSQJT8KS0U6L9nfzdBcOBVVTt4ICYIxfKG7eOVI8+F05QVRGCOFjBf9Iregbx
lifFphW6fEGduBr1SJfHJf1VZU2K5ROBE5mN6GyISet/aDoDhz4+ptzWpNEb23FElppS6mepQy8y
37IQR5ah61NNW9fC2GU/1M3jDaax3SfUTDL1xwYgZiUbdl3wymCWWMf1sa06DEPJMGwNhUczUXpV
mbDWoHfAMNr3TmTIzKXMkyMH1iayu56zuz4luyP07Tr7V0yHvFqtMXQjs5Dh+njSWUei/oYj6v9H
Sv2vpgJNKQXiponrb+pc/4Jk/SOJ+nPkQGtK/ZHdm6Mkf37UBmjy5wu576+PXGfVheapTiq42/tL
lPAEjV3qfUwAJ49ava+ggpyjUvpd7XarR+rJJ2v9o5PzY35P7Xb0ukmfrDUyM4w6aq9r9a3l+l4X
uc6mC13zj7jS7Yi+Pi2lzgEq5sHso+CKLdHX8dAvspPruyDJqJTqIp+K7KMjyRH4EaqMXJehC3lT
3bhwnQeA0AX1XqcnmJ6o9ijW4Ifqtcerbcwh9As9Wa/Lw+xearUCKdW6hKr17gldquULOuT3EqEf
mTxeHxycLINLg3Mp2c0nJLcmMEHlEwUJIdZePnHt8bwvyG/v6s1ezu/89aw2kMn6L7bOZLpTf8Au
jtwyh4ZL1a1BTvHWPXx83+LIwtamxWGTf8xdNjqp+eU3jHGYQ0FVrf4CyorvppxuaN3OofzgrpMY
ysvvNapXPUUB1mf7gZocH+CcTUx5sFcwTSynhgU2aF+CaXLjmSXmc4OzVWMPqULyOCen4sebQ3Yp
mhvKVMZnMb13EhF1icfuMKo3RGnoLUSSexIr3CU0xhfvx0Tws/CR5Zbn9RAhj656p1QXt8eW0R8s
ekH4p9nM/UKkXhHESjrFvXdzPyXen70n9d3H+wN2BtJ03FpaYXBM5oTZsivM4lqOampvsoYGBHQl
uBaukkGqqDd7lHaKyZ0CfeIsLcsNx22iotqbTNFp1tCQ9qa0oDFkDmTc79DBtb27rTxgnuPQtRUr
TZGdaaH+7U205gaNARsigEloOwFBfSjImkjD14c4DqFQ2MBjoybiVwqhjRXuMyItcapxeMDSSXrD
obqG8L6Lld46KubiqKWtf0rgAPP9CBwEjwhsLM0vrrnLqO6ifQGc/6QOPK0o4m47hZlk7XJdASM9
+QMHgQLdxFLgxMX6BE4EQ4QQF9mBECX5u9S+od2x2re99quSK7IjXYmEF3HCXLt6QLdLRsDekZBm
VXVVVC8DrrCqaTHy1VGfVb45xet3aQOM99hk3dVvleqWENxLcD6hymUE1xNYCZ6lMCf9PUB/+9Bf
nT6tJ/0zGHt2S+/5/+W/7qYeRwnV4SdN48cqVBUaf3O6TinPcrl9+XFxzQrG70XjdLTxbk7aT4w0
6OvWh/dV56zpMvXk/OdNVKq9RTU+iAGsLtLkLDWHhhDVHKiUZmFO+kXvFSlzsvoI/R6TZNd8HnHm
HUadptpzY7C2E73QE95UHavijY9xxqPhjI9HOVesup0KKkyjtXKxRlQCi4DilxMqHHNs4tyMECWS
pDr81dDp6wtXletY/lwzeGrxi9tuV/EBMXA8s6I9HvdTvYI+Uc9YmKFpHXWiz4n7PR/uEtxi/9dy
HbBStmlVTX6i79vZlIG49Wt5+BTX7BhI9YzeUEs9TvpHio7rPCZHyf++I/L3q/mf/F/yjzQdNf9V
ebipmr/cSIsyhr4if3v+rvZJxSWQsQcNDeUpk2gnlctOiVWbuH7sH5zYPzjlE58kZbA31jyscCWR
jmt84dNX4zR5TMg+NXRs0B9Ydr92VBIOGsW8LHlUovp2zYMnl/JWmDmAiLwzSpNVxI+X4hxRPUtT
6SFn0xQeEbyU86JskNGJXTMaM8NMca6QcUIcJ71rHNh4hIQSZE6iM+32qAtHVOVoHPzyQswEdpI8
Ttqjl1BdCsXW3fJsb69fQOY1Vv4XavMbxOxqRxAqc2lXcWn3juhSGm2Pyq4J+Xj1o+nEcZ3iY5hq
hOfU+l3ESNXzSeb9zDIgE0/XTKjKM6Rlquhc+2wxQa3P1xiAoN7v8vjErQZt/0G8RFtPak0FUCCa
JiswCPtiKt/pFROJV/GK+DB5/tJcpQ4d4QP4AnHxMimvmO3TVC2ER8oLQ8CiaF1oRODxRH2vpf+M
4onhGouDE9x2R3FJ6ES2+pDHUmIV0JLgC3ccNwF17C7plZvje/kwlvNziVVDEx1DTTVR57yU0jko
7PTh2q28bRanZ4NM7LMnEr8mPDJywB7KCqzUUkmsQ8JD3GJb6wQppJgL+2lEwuC0nYWY9qL72i3L
j4MEQvwaSz1LSx22q74WcVL2qXJq0SnhfhFhjDQaI2uMkQ7jvF+pjbMsK8dYVp6asy88Efo0jfrI
GjhCcSSCR6cGn5wIHpQanGFZqUfw3lCf+nbmzhZ2JyapLS2/gRbb3pp4QmsEy+D6RK8EuHFZauOw
uPqYLwjqqAPtYl9bokMtdWWqwJPhd5qZGaGeAThIau2H0Ik6eZ+c4RSwH4YjtI5uFONrxIALGeUc
ndLXLVokv0rb56JI3BgeiPPNoYGORHXmtLK1nrgh/Euko3v4x8CTFCp2RYm+Qupbt5S5B+Uc45jB
lvo7EPWAUZls4hvGpmts/9zBp1KvHaWD1eCuHawGd+1gCtb/Qwf31Dq4LSMQ79K7a4Zy73pF6y/y
VH8uU+Y8l1fsOwaz6ZUhCVERiCClyH+Um9j43GRz/NtO7yZ+N9KuziX+A4domqIhZd/YYeDzOdbP
/GyJUcc3My1GvqCz1L0ub9ZwOfYv+WilR5BPouM+MaAROgGP4FfZJu7hv0Lc2iiVR7HnuVB8S284
p8skejByiSa4MUWsb+Qj+ExYi++dCM/3+b0e8e4cTT4L97k2n8cd1InsXRyIFWhXgxSJbpEOnqmC
PvFFp7D8hk4+MlT5p1uMOu1igVa1vmLte1JPLJxeNYtlkqlNpQ1o04YG9guWB5kXOF7JCryJgfqK
iUNgCfO7YuAQOROwginVNoo2VpmUpUzPVPzsmYHlXbfxDXn4uMAaLQO+mNHy2DJY5gFtMTFgB+4g
wicrkyD7nT0mm7Yn66SUx5m3QCJKKTVBxKMHjreImLz+NV8m7JtUjFuz8JnKJKtijeJe2GmEs2jF
aYpiJ+o0Y6FTSiBfkBXZeTjynb7Xmsi6dNh1hgH4NgN8Y0wqUfwmpzI+w+lzQR7WP1XO5wxaOYZJ
I23cfkOi/bLubRbxQj/aeHjFgKm8WvjE1PekX5Eae64u3MMn3lkt3xfa6JXGV45VdSWYYnR8cGrg
T2RtEscOVFEhrG+SF9UtJXxb1okf0s4TsjXd5MvU0dfuwCrlu0/cNIinURf+k/Ujy4vZrtVkozY/
iuWFmCm+U86fYp4/peb4zlUYMrGy3phic5GFrOvsj+pYnBFmCWF6Ea9e2FzUpHtxa+CHjHmoh9SM
Ht6WpgyvXy/dJ3jEKaovaOPiOHjMWltg6gPUExWBAvojLrTJtfMFlvctOrRgNM5zXbFao8cvfK+w
5cgsr9svvqTn2BUF3pijkHZOX72C5tvbihYfQqbzbQEzMq2SmfZRM6VKeV0xX6FbbLyFJZWxDFEm
kIUgIn25TqYODXsTf3I2uWIVowvBGz5xi7x8R2dfn9+gxJdOTS9c9NvpS6YaM2jlH4voNW0gXd5Y
rY1q+sLL8bhHOH4mUsBu4P3iRK5hZn6D5P85/czO6SmtndJexWl7pqTdzR41MmMOmzPSTGM87lXq
h2Xc9byHY1uGbREYllwmMQd8LdF49o37MqVeVY7x/CmSHM8yexlW9wqc7czk7clMpbtT3PETdSsM
ZvJuN3YtlbYIpbfYiVQ0vyKlQWHbLM/lEz76AtHmqpe5PnVcnzy1PpUR9Fl5iv0x1F+8+m8qYJrd
JZ6jB27No/9mkb0jz0s4/k0vq/Gvx4PP6Ob+CUAKEpuJHjez3dWu5zuqIWlm1HnrFToWPkljsGOS
hxpMpxxPwIOfchwua8AnWzqPk7ZeB1lhxpa4w1rVgP57+ibjkTZIv1InAs4EINQOvUnNBikKf8f+
iZwZ1nC31Y/aJmPznu0S/3qRnbYXu8WjL2pqg3e/qGrEhkbSUnKMjLg4EfHaRMTLZURVoTWo87N1
dY9blFG9qU7gGXiQvC7xyr950uSByS30OcVvh3iEK6j9L3HOAbcY9hLnPNUp+r/EQ2lkuYdCbMx4
MJcv7my1dFXggaPch5j56m3vbl6wE+8le5gzMirjzSyj8CjRbvU7JC1o3bhCD+NTqSbKV73cOf9V
Hf9c3gqjvlN5Wd30ncp7Ob9reVWjjyiv5MHO5S3p/J6an7Oga37DTzsiv4/+OX3e9K7pD08/In3G
Q53Ss34mMZKQ3sEt8DVOkMVR9OTRLug2g+a29Uzoq9mUibMVr8kdW4G1kv6AyLidhs00cXu79Hxv
l6He231UVdlZIZPvV0tnx1xOd6QxyxVbgjzkbaTMhy+5+LAO/mlcqH9WyhGqml5xmf436R8OH5Ee
/eM0KeWz+f4u0pDljC1GHkiTFbtNyyMLeWYhj/uvRR52NQ/J37XXGnXqtbmFfalrPqHjfF69I/J9
d3ZylLOBk23dyQJ6+xp3G5aa+xzbqJxtat82pMEVWZPlHokSl5TZhyjjS7QeXYIwF45Y4LfvZEyw
U53Cdb0eIthnKBvewvetf9sXLd2wRbRvOdY2OtKi7wnnW0U1dvsS22jLTSEceGt3pikc3P9B/wWB
QV9dl9p63Gc/1OU+u8v7ui7veQ93uY/u8n5v53fVPtNspq20/tYsIpyeNntxI3dJpMXkF5ciaP7s
2GqdlKF6M4s+/fFU9VHv37rml9spv5jf5BaDEeSY3Y2xAJIGovsiNDrjaDmCq08PGSEBoPpUZnPK
M5w+8e1W9YpgoTzN8YmzFrLtu8jCGdYac2yaySVOSoRk1JgjzVafGCpDtLJWHezSfxsf/j+6v79i
uf7/+P7+uhX6/9f3997b9f+7+/v/Sf7h19s7t2dV4JEu9/Vd3j/q8m58tGv/SVu2NGB74Sx52uwI
fDuJyJ36rrJdnL6wc/pVc/85v0dT85vwzFHzU+VRzFojYel1ttslQs8iuvWIMfifxvv3//yfj7dp
5f/z8f7xjf9H412zqst4P9ql/z/p8m56rPN78WP/OD66r1LGp/9bRx0f8fY7ep1TjHwuHhez+XEI
Hus7iGkWFnoMHKQC2BxtYC89ieeH0VMy7AeE3UNhYsvbSP3Vs5T6Fn78GI+Z+5BRMz0Gvkok+giJ
LkBG7yfCViFsGp8QlYuBnMEKpHohEeNBxMhFqmTYnQjL6By2DGFGVOmRt5DNZNTjT67HOOS4KBHz
OsT8MpOekmFXIaw5U9ZjdTtSmZBBEz8eeoYeMziv3/E4jB9/fka15k79eWMLyrwLHx/lx6V4fIof
F+Lxrf1IEsLjDn68FI8VHKEKj89xqAePm/mxHI9bOcJYegz8+ThVNg2V/ZWexGA0IBn2A8K6wffO
zmYk6cmVKwl8lYixDTG+H4pdeSLsE4R9SGGiJ5f5ydNU5sn8uJ4eA+8nYr6DmE8hdTLsNYTdhtQP
cpl3I/UxfyO1wg5wSsRx/LYAH+49gMdr8PgQP16Cx1cbkXImHm/hRxcel/GjA4/n82MRHp/mxzw8
Kvw4EnV8IVGfZ1EfPeqYDHsSYbuGUB3XHeTxe0pW7H5++4HexCP8+AUeQ/y4mR4DDyayuBdZ/GsI
cDERdifC7u4ctgRhN6Goy7nVtyDH8fxYg8dJ/Hg1HjP58WJZl0BNIosQsjgL2SbD5iIsp3PYbIQN
6hxWgTADiq/dxviLgibw46En6bGcH3/H464vGH+flF0x/UtuPz4UcJzN9BgoT2Rcwu0fDJXFRFgh
t5/CxGJO8gBSO/hxBR6n8GM9HldwYTfg8S9+vBKPZ3KEOSgpN5GrHbmW8ClRWUpwJoJHoTA7ZzAa
GbRyBsfhcTc/ZuBxHkfojcdt/JiGx685wr4nqDBrIlcTct2aQU/JMB3C3stABYrFCe/qda03ETHZ
uPGxP6U+UXp85NTZDl18Z9f1RNrrsjy2k+OFBtBmwhTf+dgP8jVdvqboc+2VH9Iozk7VIrEmJsKa
OjXdtLQ9PV5/sAfLhOCUyafkGUKIEc3jlF0i9pQR+eokZX2IjD1IkXTh8QHdEw5dSze8sb7fZdfy
7SKOoIMs7F7BAebeOtoBPNEB73hiT5Nel/KO/LzKr/KYces12pZ+bXTiQY/PHx8gzsft6a/0q2yD
jjDr9k3sYHmgYJonPuDP8+HfL3ytvGKNdNwQnqtM7BgL367XXhC7Sh/56XDMkRYNd4gf5xt1ysHY
OR0unz8laaiY4sPq3s7D0YkdH4uAlRrlv7jFOAnUfz4f40sfebGLfq2uqlTOOZi/SfSkqio/zmqC
UZ2U4D+ulsGdxnMV5JRE+9Wp5xXY0wf/jA8olO4JS53xAWXy8XTa8eNMN1Znh0VNWnbvvVq9VPDO
l5LB8kggf6OouxonAci+SamTqe7kVNLiPZ/vu0QGJ7M219kNGKb4gHIqaSw9LZo3Qyw8jFPf0HRf
oJDaDTe1utn4q+xlR3IQ69PE+3BpCb337PgAI/xpxgeY6E9Vsjp/XZWoTtAayH6CZSPMLmS6FyOY
iLgxGXFj0l+C1B91B0oooWiRouqtl4SNuqPwW9RfX11VDmxrSsgrO13xAT9wYGcHa2r8vVr8x8wD
gOPM4oRM8IkI3wXUnA6KwR8ZiatCPdB2/tgpP77vz19f9MVC9oj+mJFSFDXy2b6ccdHen1BOISsh
mscV7b2NXthfN73GB+ykN0VwInnr0AvyBR4vx6jfFbIuPgAvX7WmR7MpypKJulRTihvlfJlLBGIX
G+ZIKO6BSZX+Fs2z+KrQWr99YTdWG33MlGhvJuqXGeoNfUBPUMeFZnDpAwTq1dvE1bLWr8elb8jK
VXN64x+zIjJ0BytnNWn27gZrGoaK6qD2e6nvWy23efXtC7uxqTu1fNa2Qt2zUL4HPpHZ+3UGJOdk
t6i+H49Bxk6/T7x6tfQJ4fKLa7vrKPqAX3kQM9QsQ1YWddJD0E3mNasyxbCeRh//abx//d+N92MZ
AzT6elT+/7HM//6d8S9gp0ji24auh0sbtfMFSM/DfJjJHdSxGwuXplPXDRk0BWsD19HECOAuMQDv
bcHjRT/dUdRX4E941Do9nEzfXKfn2/iRFjbXWR5Zt7dEWb6EAosao/wxPDDSqF/8rUUz57m3NMrf
LSvlhsuWH4/W3Izdi3VknGI17jQ3fpvRq1FZjtSLv0NYrzXRsuVlyt0IwchF69iNrYyCAYreuZxv
ZLnEMe/cjLPp0BntdTfD1oE+dIZSx0FO4cadFSeLvrMcQTJTyHS8czciV1c1Rd+5WX1S1lEs9bkT
veXzppvn4r7NL4YT08vGXM2xV5AlWxzPjyvpRS3R2kXRWlpf2x0l+pDFKbYektYaWIYE7h5W48Sj
5WYctUJRJdJshHny96Nvoouib6Ju1VWzzu0y4FToc8TCKh3KG4gBP6yrLXw+/QYqQCNKbX9Dtt3h
FLMO8UE+LlptLTKKTicbLd+iy97QWlzBrlCs0Tvlh7rEB3V7TFH5w51vpPSLXFznXwb7t36pincv
aL1rtRMfTjqAO6D87RAWPyCNqo4BA7FkRJSoSO1lkMdQAsZIg7F+F1OFcmVtzKlPSE3lrDFsK/qm
NisAq16xeTbOPObQO/3CfUAzdVWodMSm6V1ev3j4qcQVMvd1o74I4i/0WHNf0OAXqw+n2H8zNfnF
WGlBN+mwzy/OXsvdewtj8i2Mx2x80+ujFX/xTxKbp0U273Uoc98oQzFE0N5A7JayN8rQuyG4zbbV
bwll0agAW/lmXH8nVT2a1tYrqqdgNh2fBrnZ+vXq2IXzqS3DE6Nnc4pHuInGlIFrkV/xD5S7uomy
HqKwCa4W/XYnLQwjquTlIn9lD6PskkCR4xw1yWQJfBKV71Nzl3Bjl3BjYcq167xVypaUyTQih+Pz
ZONUHD/5XbW3XCFFY8N9lWl59evhh+ljybyZIg6nPuKo0Kf6q6H3uJ+NsoQnR2oLdKEJfK1Tvz3U
P3h+4AXg0/BgT1Hyl/Rw5ChQlQ62Kx2VFGWOFqWHGPaXal0rdAIujVY361U5y2HBa2SsYOA9Sd9O
PSBvfljQKyHTpckDDyaSyPEnBK+lyN1kZMT1S9m5RJH/+lP6HKM2yyb0Vxx5qi4CX39SZRKtlmJ1
iRZd8WdXn01a+ZmB5YmYE4KXURVu+julCrd1qsIJahWoG2UVTuNePDm18wwUR/ZcSn8pHaKNjWvZ
tR5btlbrsSFH9JhOrUFcrhOJrJ/9Q+308LDA3YkvQa71xv1H6+WU9YkWpfotHsvKYeBIpBnnZuWD
0DC/vN9YgmtT6sZWfeRnS/362MyivuG2asvKJihw9w4aVT7HHCsznFX1OPKobKpaMkw+gD7hMFp8
drGRXaSPPc9ArPvx0CyJmUsixZsCt5RTd3Vnq/Rtk2PGkphx7exbwAZkNSm9c7H2rg+V4U4vZrTj
ltbsgi0R6OYTs2oWwz5QuyvUXSmBb8OmQC5oYM3vLGF7SdAkPuhQx43dAMv6OP6n+sBxbNuUmK1E
MX56RH0c/1yf2HqtPj2UciMk/qhGU1NqFKAaFXaqUed/sn5PX/Q/1K8S9Zsq6zena/0m/XP9dq3T
6tcT9SuVXTY3pYIXUwXv2fePFeTzUOkBdbxZ6eFT9uZcbQ7BjHpTpMOoTLYqbqv/H0Wgqo4uAjXp
6CJQeUcXgRrMwX1zfg9ZNBEo1e0iWxXvXF+pbuXPb4cRn3C6VEr35G+v31U7BfZeY8ac+1Rn7LaP
DyuHLS/V2LMMcFvujFeALZa2xXa3davtHqvSF31dswmsaXuZPVsfnpwfr2RVzia8p4XG1LeDBa7N
jtXGLS8dUr7etx1ZYfH3uxLZhXtEdusNB4iF/sny0l/YoyuH1Wz+u72OPN4CdLbXoa7/FzIvbYZZ
/g/D3akf2NdXqamoxVKPtesxoEZRS2gkzhdo42Z0OaM1hA9fSwJNX3opTqMy3sQJiWl/+3jCmdhk
6p8i7p+PD8dyX1/yezmL4Xud4s9DScNr33Dn1OqLDtR8RM0jViLcE7fZai3O0VFFpPEhU9OqQtS3
+YJU+YgCrDZlGKkyECBnfTuYE81AoKWuHcKMcJlc92sai4pV6PzhSp8A36ZR+Kl+0XgwKQ7dyy/6
SdZC2Uv7rl4en1e88qAqLZrK4FCv56yphK0+2rr2vQD0rLBJmWaF/wM4rFvPBukyNWuAYGUsy0+g
arT1kPaaKSA/nt+esI9Gs3YpaCZbJ4RiedhUt92yxMKW70LDLSu3Rr5b6HaJ/FmqIr+lbo9eKlO2
mYiuRnYu7NVRt/36C6kVZy4GZ6qfPx2OqUXpg9jNS/N4m5Bknd8lHnw4YXHxWTUbNhkX7O5yiSu/
1utUe0eK+rG1Eq5Nfu7e6gEywSpf6KII24ID4dFdc0J9+9swERIaHCSMm5as5NlaJTMie5xt/Vdt
IuTb97PyZWNbN2XrZVu2Gf6mfh7ApiBr+yxqylsySxdZi16w6SOwhE2Nn+cSL35G3Ms25h0sdftw
3tOJ2azfpXSETpMbzNqezRN1o5HHbr3P4xW/3y9VxQ/Xmg27E9YjTYY9OftgpRibk9jUQr2HhihT
/MhWQY1tc/yBe39njZK84BC32PypHghcSKslFYz537Xwk9XCT/CxB3qvuPG/F6un+U2NztRZbv1N
5fWlnFj+/Qlrq5DTUTHspWoVw5htDfVwiV73qzacWFdcjbYkGa2kirpBp/q0vUoN77pezK+W6wXE
wniqUx1yYja7G2c0GFxTmkRes2hbk1wBSoxKiQk0nrXe29+twJw3jqYJ/3GHYq4v/JG27SxYnhkr
lm/xpYPPHBIeUrc91G/pufozz9OH+0Qa0yJr0uq2h3/IX9/Wbej6yBfx+vVEFQRThav0RX/VPA/X
TcSe9JR6qbxYDQKxqZpV2WWJUde/qkR7TEdvj15rz9D/fXvE59SCvuD5qTl4gXzY/9ftkfKvs4xS
2hVEzhw+3itscdWKY7i3V5xxWH0JmZ3ig3a5JTq3yR+Me3E6J06YK60KEIu3MJ1YOfoGT4Owjnrw
K70u8Bzm5jZewT3izF2SDGaw9GllNUWmTNL9sNQPa9Qhe564e6dex6LjcS/RkHWX6XQw7F/oDuro
c4m49hqpj/EIWwAtqMLqpO6Ek/5ulPQcQzjwWB6Pjp8mzjinqP1BdW5Xm8Uf/E5xIwUpU0yKz0TD
I0XmrewUh8IcphVLrWf2DWfWbaH+d+rPdOnD1khDGg1B3ZbwD1KTZWhDZFs8IR+mlifNoMlCexxZ
aDoKnQaXyuwcWVmnULc1wt6JySnefJfjJwI78QuRsYWUhS6ULk97ggYR/JF6eO/eUl3gqt9KdWI7
pQ6mPYFYYjp9ApNkHdMN7/ARIv2d/lRJ+3E+jiNOIx42VTOWWJvGDEO8cA9xF3v2Df2MzbLSu5BZ
770j4wvZugwx0zjzW/wT+3aiTMTp72lIfgp76Sigsc2DOeoDPReOUJxmmYVMxpon3bQE4Q+rtMKV
EnNVdWUXj6dqe8NnUEsX/dCppb+9k2zpRT90bSms59POk/cmgUfBO1rFe79ohgh/ZBsT5SZmFD9e
/B1asvhbtM8HN0MDkEnUxOY33dFys/C+q9dpnrcnq2McyvNjeE/8ThveEdrwnvAdhtesDHTRILsV
p4mH2VbtE7vYKKBmDucxFBO5bqYutFtzObJqDvP/56XyH7OB1NdBpBBHQkCtEMauxicebk/YWrVb
Q4OV3sWym620Nn7H9YKpyPBFwXMD7//OSrahYLqY8as0ONUe7h8ED24PzN7s0LlF3p20cvTGwmIP
Op2ilL1Wm9mJeeAdJE8TJ+2Wp6xMV6h7ZtNicOO5IPpzmtgLSXvbcOU1ricM2PRTPoxdrV/al3hj
mjD7cjYrvykDUEenW6R9q9fEh9FD8C1OmOLy+Pxe9BY8yJ0YvEjW+zqu96NtqixmSuGHZ8jC6fUq
KW/KfSt+UsMjY4sZf/oF8t6dqBMPfcOD9QQCg9fLzK3iGc1AZTgjeIMMLA3Og/2fNnWjwX7LsBdl
pDADR3DuDF9jTvNj3CLxyg7u8M7HsKuy4+Wd5R9Qu4updjz9lElWLBdm8FHCejuP5lhouNZmBZ4A
5v75O/shCwSN4jHGXrhekXzrdJvit7rcYvA9mhxTVuC5RJqLOM3lXdJQceK529RizFRMBmXjEnfL
oEhHSW33wKtgIN7yiMduhRA/GKFdeoh2e8SIFRBIfg6/YIvFI/REdXBDkl64b0tRsFD2BiAV23jY
wLXxiTI2mplJi0y2ThGWuln6hFIF/E5CceZseYSbG2mIRzoMlluwUY7b60s6ShP2+p0u4pN7/KrX
tY1TzfplYQGivb5X3PQjS6K0naBaBoeapldMpVnQ1rdT+uu/1UsdC8tyWDKCpT7EdN+ZMNLPHk8m
sdltmkhv3qXZ4LRJXQC0iM0BtGKI2icVp4WGUjd43LFJJUFirbZNUpU4VHvh/hJkNt2kTM5wK34b
bJp5sHMqcDv9OPeCykPAL/quSOnAxg4DnAwZUDm/WEl1UzbnrEP91tdKZwC447SdK+33EaPXdjwr
GsnBn99mloTvT4nLQIULGMltNH7LMYrHLZet2hWyUuPv2g1b9NN/lgLYs3ArJvdDze2luj8I0veV
6r6gvx6/tMvEGfcIdsuPi/Xf8vHOmFpneKI0i6B+TBf/pk+BHilBPcQDHDsrUutUj8PY2rDTJ9yb
uEJRh1OpctZvD9V6PeLfQ6QqkBBllKxIzArj3NbcomcdopnYhEqDgThdC08mCjQ6kN2pBrmowahO
NRgsa8ClczqtBh9tVGtQoVRV0J5tqLS+oCbsKXbu5IZWK02VTYEzOhWzNuVT5/Ua9mZ9ym8hCyyt
+8VMlgmwVqlm6TiDwcFuom4nM+eZPo/TL86AiMLElO/pyl5xAReR18WEQdf8czO1/N0p6XsIe2r+
3SFxU5HyvSfln3bU/OV+eKWH7zPy45HNcbbkXsMuV7LEAgWeVIr2WOquMkCqVhxUgEg3LwPp8NI2
uVDcQM+wj1worlrGNrwDIBeKgyjRiFgqyegIBKlKjXFJMvyUf6Ho/T2PVf12mG6XjqFUqvFSmvQh
8oy0jT4z0qoPnRNpTQudhp9hgdpE8+YHLyb0v/BHRv/Wu9ISTjycLjct1me3EoWwdwryf81EIzXI
/lOCaHikbmOeh4KHrUgQjWIET7O6PGLJbRrByAos0acSDK7JFz/ImsCRQ7ujeFG4ktZgm9ctHtU8
KvG2fFjgtkQTyjjho2rCLXKry7cILuWAW9mkbBN3aAcelrp/66XDJnZD4Ch+NstS/z7jeqYulBmp
pS31QHhEDVnhETXUM1Kbq7PUQ9/0OVammkIMQIFTuDFajgxWqyokJqAQ5w20StOfYqleVSIF7csU
JyhSeeS7w5Gd+l44eY98kE7fy9q6K9MyKEYWNRM00mf1umMOppGvjU/QSAgGKL4SwgiwxKCRxJJ4
WXPO7XGqBDKc1Qp/tmDTcV11to3WI6dq4dRS16CebBAhPZEd3OBiuAYm+LhvPj+Y6Bs4k9f6hjBp
ZrfwSDYn6rC6nR5BRAmG9TI9PtF/hWqVM2RS/mgzQoPEJ65YygYlZnQi0x/mrDNscPlEX6yXH2pE
GqIHHjHPIwk0LfVtqvFAlSRjQD/8jsug3OFOQlijmDtLl/AsKWRmszJk9fvEPgHNvFe+TSinYDdO
22zWyuiy3y7AfE13dpqvKN8Gfyhi0y3afJ0g5+vUJSjzsyXSCcnmJdpcfV/WYg6bHsRcnRdNnavb
AjgUajwg56qHJnqJOH+HnKtx6WzoNjlXbTRXb1bnaq2cOeVFTbXDAn8nOmMuMStGseZbid3XqhPU
T0vv6mWJ6TUbwT4rLYajlienlyGt0/RCPjeo+ZysTS/4WMvwEj+7Pzm9Mml6mdOS0wsJS9WE7cnp
leGSk+v0vxMIBEOgbFNkWnF7I82sN/7HmXUXxdjXyFNrnKr8btcmVp7UVyyQE6pQ6isWS33FkhR9
RUpTQrPJkYHE7Y2YTNOsUGGjyeQWl5yVmEww4qpMK6GeYuVwliTO9koNCb9btZFFk6kvxzOxwdtS
mkzyG2cBY7B8ZBTK1roBLAuMDqM7RDTpcw9XidwZIaI0ZXabzyl6LeN77NmRRkSK7Ddce3XcHpur
H48+dXqcPo9L7ANTdhpoK5tWojC3+J7PAjPbjmHWaAbNbuH8gqL1SSbL2oYoNrnbWeAOOBMDeA0P
4KIdcjoVBqamJYk/vlysfhke+D1lCuLL1B3aFISAiIjVYzp0r2fkL5D7PStRg/CPmIEnf6PNQGsl
T8ECbQoWwL6Johuve5VgDcEDBCnn31M78/sm5vezbu7E789NS/L7l1DVXvnm6Pz+KCXJ71+TluT3
kWZBlzTg99+sP4Lff7o+hd+/EafFb3nFKxHQBnDimNs4kT65Dr3xZp100/hKXYLbt4s59Z25/fq0
VG7ft525fV62sy11VfoEKfDoJSmYIpn9zKLm2r6BFYlWzG0dh7LZJ5VTvLckMf3ZK9d0rK4nLk2y
4/d2mv6tafoUdtyrseOTixOzY1cqOw5enJaZ0gw39tfZHnVySKyGAm+38BCll9I38p1l0d/mUB9K
5aE14ryz5TE97WT8HpEZZXQHqoADKQPzcTJ+hgReT0FCjM23X0lUuxJSRT6nH/58aCtCG+YK+e4W
4z4FxvvQ/Fw4NBv+TSrGnx54MwXjkeVyNcvMwJK0JF7jS0h+QS294o2bMI6n3CQ7Lk4cv1888R1c
5MzaLjn+Ssixzao+Qjxo46olzP9Nhv0SH3QYoY3rh/8YsN2i903I5R78EobcepN0spMl6ulJeU36
wnnfus/BatpQNbXUw8MZkcFyp9gLhHNkKqYoOC0mhE7o7k+1V+DMiJg6CplBxBCE8Ft9r0boNhIx
dMfm2uG1brb4d4TVFXEOmwkrWibmUTinbJlTrsypgGltMicMF1PV3Laeii9LuSITWuO0XBhDBX5v
zFEGxLGemUCcHkapSucnklsOkvvnmCRSGXihAdY5rH5nbBphnUtsTUbYaIDZbe4C5QX7o+jA8Fhl
olE5x6R40SuFykQrs1XETMka8prgNVNF16Uzp+XLQu+x6qazrZsyLcvlhab6rHGqRRJL3cXJUsJn
Ko5sXl9mys6YLdeXOXJ9Ccj1ZW5nffiZVMDcNoMyLVvxldPi4aYy/W7FyUtIloePsHh6HEpLFIR2
nGNUvNBIpAYUKudYef0i3i/yLTLHMYEy0dzrg8h6XsNouMExQkK00EXt8GW6uR13jU204+Fk9mGK
b+d2XCXbEZLtuE62owbtuFMeNnVqylXROg5Fa+yKr0y2JlNtzTI7bKGkNChXdenqVJXanU4Rdui0
m6k+0hcUtNrZ0uMwZVomPIQeOykRpU2fiKL4cv3gJP88NjH8uAvTGjRV6RWV+tGKxxi9U6rSTzFR
GLtW95gpbAWHoWU4G5P9yB0Yq7NLkSz+0JamNFFVKBrK9bucMBVxTnGiH336o9c7mGxafmq9s7je
xcl6D5Ak2kodhhhOWoFHJ9PickyZZoM6PxScCfXZQRQeqwhdTaCp5X6n6gXMpZyd4fSovDzt43Tw
1esRfSYm8nuGK2H1uz3Ah/qiRDtwhAJ/WqF+4EMp0XNaotD8yI1GXSiQgvWSq8qU2JIlscUusSVb
Yn1uZ1TJZBpAeJLBWxDgibUTnng1PGHnNewx1y8uXiB30/JirHLx+0u0Mz/IH0TKi9O1U0BVn7FE
XrrtPkWeZzjK5Ps36vv8cuIzevjEZvmeouTE8gwgPaYc9ortC8AvTcD8Bxve6sF3qWLSR1K+Z2wZ
n3UOCzT0GK8L7K0q04mNT6kH7U/gWzgtvz3QJyWDnqKXTKtt+1unfKp6TpL/1PobA3k9x+uc4sWN
elreT/g0oagv7RndPYG2OWrpvcUMvjwIG2GhxS/lXbT6wr+WuPdD6r3eZfKo2kZs/r6n9Xx/lFEf
D0/2BfISKczCvFXeFkE096To8GitSQzeoIcbNofRF+4pHvxEXqT2VQYgQ7d4XjZYOVwVKO3U0GM/
1KSQMuTZC38pJWbLIhyfytWypbqryyCPLzA9EdkW2RAXN2xJ1Cg8XJ6yqDkFKKeDXB9bFRvWVoXL
gXa2wHlazGg6zi2j03BxaedO8ZlgUneaWdRuBotldItPWU7HVjTJtPA4ZZIRZ33uhOjOBGW60SVe
XS/vHSaZar9Wqk0Uyxfz6D3OqN8kmvmbOXBJpx7I2sw9UMXnV9VdKj7hE3C457BObEbb2sT4B65O
HT/x1aZ4/LHr4uU6adEe4dQZDXoU8ATCxVt8jpelIpSGFT3EeDYzH8p/DAGBEkanKx6lgWdMoPY8
wnVu6cYJ6F9LtxL1KWVEWP5d3Mx5VYZZr1dRHXf4pT9W3rbxk4t2tMWH5Z2BlkVkLGcaPkuazUy0
y7hJnULyc09Z+Gw0dLMutRO38yGh9TF8VsrN8W8780v/lP+TG/+X+d/YKX9b1/xZ/j1yli58gui7
judB93Bm4Ny05GBeTIM5f4t6b1HdpHT3ECNZD0FkeNiD/EnRHwszFEuQ+vywJv8YOoYdz9UK3u11
d9Pu66YWHo+EX5jAhV0K6SsLkc5lOo2PPz8uvj8gbw/ChmqeCLTHDNyXgkrdooXi1g0UZwrh8k8Q
WRasg1BbFngIsrw2djTNsd0i/UMpSQMDt/b8doo1XPOnN8FIzVtJ6aPGN+CB731T0V81rYEnU4pK
F8dvkHN/V+1xNP9HBJ5JQf65mP8fy6bMwl1kExdQqcrLGN+AABjbRy7FFlgx0Pswp8hvltNvb40x
v6HNrPQidv5k2Z2K+Q3FZXQrfZXJJrePNzO58hwLnYzr+ThcJX3LBMlIhaYYwZb38Y5xqr2mjPxd
Y0aHe0jHLrhWh9yruOVvtW+7VUIC3B9Ym9qxovAD+jzB6BS3QlS5D6ZBPYttZhS1LEhTOurjtSWB
jdzJ76Z08mObpFdsc/2uUBa7VR+ixGX/+ih5tOx1ndrB+2pEYGunDl67XiWutfb6XeGswGcpHRyk
Dv7xQzkNK6tYOoBzv4b9meP0QO3Sne8f2aVfcZi050UVYEyFzeehEAczudnanY9N1ChOq8rTqQLt
mfCYuhFHf6i1mWp9O7Wsh1cENkuRlspEt3ahL8Df4/Zrt1/D+fYrsLdTH3+yTu1jlndWUXds4E/0
qjmJui4xZWMSdYcxZg0i1o/2emnvd8XZA5269Jp1Gs4ew5Kzh1O69DLq0ts3azhbCduOmZy3S+Lr
BOb4xmode0tT5441+GCvsiuumo+Gqy9JXD1tk5QWQoYWp0iXGUofVFwDrf+C+kA5LuRDy6WyibSf
ntxVavaryjX7Vc+HZc6a/aoHtHeTfFe0d7N8v1G++8TjG+X06WJfFQe1kXE6KS4eKpP5jlXlmXAv
fuK16vkBMUNx1iLCTb2UZIR/zb+PVVlP/g6RZHnrZ0fXXxacEzSIQZuSQsudybNqLz4pwqDph0VL
ZRjr5tMM8/nfzsLt10JpE40zt4vhHyR5ixFSwtuuEVyDeHSjLJZt8TSx9EZDNJ0YoaiDGAg2y++w
RR0ZUUemP+rIEjtv1KQDHGZ54/omqEvddGvI0KPcGq2y0R7iLxizx6khdVrYImpCLMSXbqkbibBa
oy5sFZfIQIfRUmdR7xYILTITY/TzPC7IL66QJVJ9IrUmnaXu2+S5vIFqhFMd+UhpzUofGo2NtyYO
E1+TR/NZis+spCvTjH7IlOY+rO5Hwh7xKBERVgSKdMy11LMB/q2RNn39ltAQUYdppuZ5nZZn+LW2
CwLn6LVevFrasjUI/wZ5bDKRdj2UeiTtjAg5hivpLsIFP4Q2aKOksf1ZWn9TtabBFZobu6gCRb0e
CPcngmchjO7lEyP4DsaY364mYf5RyiLlb4cQ0sVjqoyh8yMOGy1CY6pMoSHtjoy0MGQDbR4P7W18
4qtDkgE7hb7owyfzwSvqBDexs7NUzAydTmhN9fGz99jJieAR7JS3LUOa7FMR9hJq8MUfyGPBWptO
aQp3b3HYgHwQWtLmS2ianCmTpFFyVuP1e0LdqU+d2KhPM7ukLUOn+GKElPay1cdr+lGVB8e17jay
Ff0Wto/fkVKFi6gK369XWZIu+lI1XeQj+L7RcYY8b8rfzmau4AgdO4f8OORAWVicCJ54+Wo2YFXo
Ek9fzQe2M6kaY6oI18Hfj6myWurO5Aebpe4UPTRqEa0DikYn6uVtgnjwKgqaa69IvdEBqRSWW//E
xvPQqZZb21ClO67Q1oPdvPPNyt9S9EFokOKwF60JWdmVOp/RWKM+e1smy+BQ3TJgNvbelyUlJxx/
VU6IqTjJcnud4ut5iRPOezhbq7yNyoQHOkpf5hLB4drwXsep+AjIL544XdsFn49bR7+4IKwOQ20f
vifxi5ell0JcrE2FyIGLwjITuZ0oFr2kCuxmhIaxApc1ep2xbSwO9yCFxP7qMi+SNc4M4I4t4PwD
pqSvIj61/zo++LS7ROuVOAP8/kr1yDfUwyOaL+eJwPUVl17Jh3SFTlF9pbZtpmpi4wzicfaVksAT
oex8lSXxge0nn36ayg8V09JMLFGtOTqXb7VoiEcTWzqmlh5G8gONdWYanzBSi0XsSkaRPJeIXMlX
d04stjuI0DXN1cbzRqBGHT4TZ2Spm6uihrTnnqsk6BOOrsfMtWeGvlUc2c+mhbtFptqzjc/qcRdj
9rhivlz4690+MnGAciyOox3ZaeHrcAMlbeWJ569KZJiWLCnPqaxziQ8LEschP+nYUHOuW/x9Odgy
voPbw91qKhILMzHmkBp2K2uc4p5kOhgrhUoBDMO3GYGBiq9YGU8Drvhy3Z5QPyIbxDVNs7n80sNk
Wz+e4hwixvERMajepVQxDyFRUCf2j9JQpoJq4XGyQBiF33avtJJJLEroTBqbqdqSfp0c/ehoCMsT
6dslg89Xg8cljMCejppKr7NArKCBaEVP8eZaSVqZV8uViSQXMkK+RGrs5WxNs/oy+XFXJaLqE0hn
c4s/5zLS5TrFL3MZ6TKkgURYYZaCMlziRVziJFkiK19IM81J/Cvh8+9Tob9IzZmRv50IjHaDY6m7
Ii1x9IXtEZOa89KgTjphrrx1wYFiqK8UF+EiL26dyInMTjFCjWM9Qaer7RsYm4hzSesxFMcbY5/v
Yt1cNs9HuLBatqrMKV7jpGZx8FINb1mCfq59pjJRN2aGUR47jplhttS/r5eCCYQ/CdyLvYTAiUaO
+YQW834VIZ1ibTJmvZ6bqJxj9DuBcgVucc/dnQ8Jp9pnwBa2PM1xC9OVCaLWLo8G/RL5mR4AYe8e
nDje+0QlexOl7cI8t1P5wCXCyQj/0fEs0hONwooHV0Ampwgdq2NBfStmMJ+YTitWSq1Ac7PH7w6N
UHwZVGaBy634bGw/EbLZM1yM9Pa2Ecq0DBZzUBxs4TKbqe0Ml3iBFZDg2mMcnwRyb2sYv+d4bSYc
o3h1bp7V4n5uLZtpgFpFh55lMTMC16ag9dWEZN+tkWjNmPxUQOIqDGyKZ4Pa+D4c1Mb3zqBGKs3V
s6B8WtIEpZO2ZwOn6JPIi3yXrkmeOCHakfxopDxbr51HSv40V87I6mHJ48amBP8+Ffz7azdJ/t3n
D14ZeBSlTRWL2Ghwfpw3U6z/96h2hNZNGNYkeeLHnKzNE+4pXiQsfAJvbBWgaEfUURbK99B+XeVM
w8cEa2Qux3Mu77Jd5Ra2YZtRyZlFq8rbTOKHj2i35ChXHOVFLaGx1D+s0mgsaqEcwydJZ+sp+YRh
Y9lR7hQbm5HhfM4wU2aoTCuLVRV7oGWtObSqTTi0srM3K9WVVbQ2q8VRiN5RXBm+oCnqyxRvQ3zd
UYa7JHZwNTrh4MouK0f96pfN81AS0bYLFfiLzQJb89srqzsLWCX8SX2JFryaaMaQmKMQLq8efEvl
My23rmIsL1NKgYDpslgqUg7lD2slQvmK3Sg1zLU0SQaBPv94Sedd1Kfau12+r9Xes+X769q7iimn
vae+F8j3u7TvNvler71nyPfwJeou7eDqzrs0mkXPSS5ZhngTliEyig4vkBYdWpTDrPCGs3kb1GWk
BTNWXrMu7BvU+WFxeQsLZEErjQU++7oRGv+YQnfr2XlDtOxdnWX5SpV/8cRmvmuKrDVFGnCYkJnQ
h0Ja10EsEJRB7JyDLhHdnJLHhIO181nUlHWxnX6XV1ya+t1Q6+fP443q95jX6BaOTlkYa/NZALXc
xGeTRFQmEgU7FnFohbJGJ5hk3EiTNbKWUlhuvZgWl0pWuFuVwfxPLuvP5fEdbI29UGnRlAKLPz4c
iZtimemx3D7hEwgLs+vXEybi2o3i474DFLldKlpJ/Y+MpkjcugDnpAWQ2zB8iEOUArehxenyibnS
P6iT6bmxr0S92L24W9zGtrdjxusNa2Lmm3F8eNdoY2q2XGJzTpMzZnvF43ZBZA/3LmLVXM6zTOnI
B7eZy/J/a3OanV6K6II8QRnuO8UKrG62hdTAObEyK1Q/Ix0myy07dCwH/OtIFiHJ4xPKJkpNLLJf
PPuZXhPWKaey17Y+hpPjMjZEo2uFj2KYvOVt/oaczS6Pm1jnkExTyGloS+rywizeGy5RSR8obRkz
J4GEQ20q1A3uWRR9xgZbs9mVxWc5nxIH74rZ3nCLY1MTnsxKE/JQOk/WMk0mLFR9YGQ7vbQcGd9w
itZPMTDZkcNG1VB/jb1YZ6nvIQUmSujxsI5FbAoN2w3bWfQRy0C4X2y61WXY4feIUSzNbG4bathB
vWsgbCN8ik4wRycQYtmiEzKiEzJ5qGk0aP7kummW/CXVaxBeEjOOosfiyBqrO9JITAIkNsQnO/m4
sBVsWuSwKVzD9QqHuU7hK46sjyXmz3JzfZTtel2bOVhi2MHyb7msKFWCIqj0Qqqpk6bQxdvZMi9k
sqkCENkrhnVT2FeVFZi4XVZA7RMr914stwXuFsLHsdZRLBMnADof+hEuRrj0TSzpl9k2SOJqZiFV
AtNd/JIjzRcRpmNYcAqTh1x8LrdX3HOQEbREwYU5ISgmxExMkEI8lfjchrXcMeXics4fmFOIAyPq
TL+Y+BFTIhaZwh13CBhT6PJQdYYQkSJ0pk2HNaejDQhR6PZ7PKKfTKJHz9Rw7xS6YmWv6zy0vW7/
kL8ZOkKQTCw0/I5zz9jc13WGFlrtJurm9SG+LbLWSMwGvYV+T8y++OZjx+v+Ikg7Tv7VoEh9D9Hf
VZDbED+dYOQVOS9ywLQghzGTKEXMbADhQJtz0fpcwzbCXnGuVOunQjKbWJpMbsR4DsZs9/kSMz1L
bA6w84AKxnOhtBAt8FMUlxuTA6NFMYshliCeDGBjdjk41kCszJSY7J/KyV5+4nidSsSsNNO2un1A
m7e38DRysmTu1pzPW++WFLyAN82gPDycd8poeZoAL1Fl4tUeIqb8hi08T6fyPA2ykV+kRKN9mBjn
bWG8xEnHVKIXHxKtJubvISJ1Jakp81TSYGXCyVXLkinzOCVc9jCz/BDuLrbIKX7AFDMODc+PnZNF
Q12v8wKhcsXMbZyuTJskOPMql2HlyMdPiWLGm1ApzBCfNkVKxJoONuc9kyIo63I253xoWG9oNqx3
GVooPi4M92WzMmYrxIhjU9fqXMB3QwNEZDyGBm4WBs6wlqtSLG7bzxmCUlQomv8hKaBHWDAPX5tY
VZEyLdqHaapsXpimfIhm56yrXw+KEvYYPgCBRlpbToc/Zy8LM011EpIQGRUn7ZdLQcy4iVffj4B7
OWuc3EpucMy2GIb2z+TKZ7die1A7Xcv085yP3FCLSFg9TmQMf+jsXeifeqP1BJkhDGy4aGWDqiEk
lT7mcHPksHVBFtbFoVhUtUtbPxBKzJDmBtqmgPZzDxQ11wyV/ENRS03foubQHGL8ZqufFrTxEjVV
ugHPSO0FyuxGSaFUPfq8WMFQxh/dRo2I2GFdhmrmC53i9DrF55v4A5GPk9U1pZhvN5PZZgFnPqE6
tj3jJfqxcoNKPxhJicz5gPs42X5Q+xI63vCHMpWoClEWw4dFH0ZN82zafVo5jO1EGvVRU+gPSVoy
Idv49vHjdd+pkHlCZ/CpwPtllge4+TjmVzI8XuVSI7sNUqqN+Q1F25ijK7ObLXUzaINbJCx1EOIE
QcmN2XJg4C1DvFnJWx87s/ehnkXU6SGjsretv0+MnplQobfUHcLWcxJIenZ+qVk5kHMo6jCHHTTR
wqXvQc1xTK2pxqg0t/X0+8SfVYljF1yWqULixO0bibPr61TSadP70Se8lLbC417kgNWyDAc4kUP0
MBhTaLo+sj/Ncguci9fHa3p7hHWmPNAgQhCJx6Eoe7gyEaKiUG6kUdpccW/9WVwpP9M2iCIsvLho
z8ILYuazDOuLWFQto7Yf7dGnVMnjCoWdtJuKpplq+xBfVlCVOMVQJMPTl4UkFVPOHm/ODtryKgMJ
uzb9xdHyaNSiDmPr/ThFQgmdy/h51lHL+GjW/6qMN/enltE2BmfURbWmhVpXR2epXR2q4kzKZDf3
VUxeygArSvc/pbgFTpxrRyh9YmWLD2r4Z40IY/2WcI+Iwxgf4zMu3A0MpxnW0+cUV8qcNTkcvqsS
X56bkMWRbrbMvCGgOZElx7xadTLMoh3yfvWnLGZLrKq345hZF7sqLh1EZLaUxQ7yUkUD2DKR5Q9i
s4y1Q5XukRaj00er+v24DTX+R/YBce20pzgsHQ/H0cXKoMhcqiDFdsM0ACU4Yw0nUCPTVke38EsW
OPN6vSJ9nV7ja3MhdOxy0wa4WS9b56MIP/JFfC4m47lNUp74+Cy5fmcwRfbB/EXkgDGcoQ4qZGrO
/4o38NJuFeZEBlMlmn+E6Rds6/TRumC4uhZyBHDJYqu0gSijoJsy/bGa13U+v5cVf+6crZ7x0GDw
wNX2461JHjFEdpY+sbZlLegHBPBBh9uqhmHw7Hp505PN1C5m5OkQHsCMsc8dK37ELwbwnYK1bUDM
+BBydxo6oN1kP1ZycayvhUple8UvcscCDsYeM3/hUskddhVi82HGDVjhKvcQ0y3ua+aldQbhMgRV
54jrqPdH0UPk/RIPyKGf6GSomUekALRyXegYopUaB9ZY1Hg0DmyWZh1Mk5e9eTjuL5QX7PA1oMzS
SJ95YYaq8TorWiqPXTTZMZatxXbFL970sewsDg5BLHbDWMhpfrm/3usXJ8pH2g13yEs6HP7hDJWW
viIH35TLqej0icPnJqjeAR27AQvbFK+OqV3Jl4wDrQ/zBxN9OEfH83viZ/JDPX+wLkjHOVfbpR6R
RSUr6yKtetVJAmq3jeZOOC9m7AFRJaPSQsX6xS3JYlnUsTtnja2QKKZ1ug0cpzU1gU9LEPKnRp7O
a6VVdaYL92kz7z1oeWND0RdhtjgXWROP+oxt3ZEdkSJVlLFoLxOL8TJPlpBj/R0b9T162CWe8UoB
AL6lSxHe085jfMJLTWWvM1PpAYrlpqgjO+rI+yd/2qFjfOJbn5pmm49Lbnfk6SHUt//FlCMQaRgA
uklEKR+Zod2cGaqrmigtGJXgubhOMXIeZiq1usWRi+Yf1V3CRg/Pukw/JNMWVSBlT69cI1Er3udk
en3ix0qtgzM1GkG8DfbwQ/tpZ5ppytez/EKpkH1TJVUZJb1ZOVSV/66x50L4G4cSOmHl8u6vQHn+
aIh2Wcsr+K6iDG4MoU7dwy9ulPlBzoPVATKBzhergduwjkMSBVoH7+tVvRNL3ZsI2m6pe0XP+li8
htCQnnye2ooF4NAyUf3iGcz35bo9wuVXr9nCqqELGPB7x6M2J7EIsEyC3SkeR107FEe2oUGq76cp
HUW1uaGB2P64/DGfzecWD0kqGHXkRmpzaZ5l8mE4sw6a4dFf7kkYsTmsLkr8KTbNhs1IW3vi8g8H
GTm12cwPEZl8JZlwrbaa+X3elknSIeSryYRP63Q6Se084saMxF3Prdj+5sc90RvNwqbNoJozlQ8j
LWBVFp7po63mFC1+6EJpr5T42QGq1ZyQ0+cRX2pIuKAZ4rThY/Ib2rKkz7ZVfMosnUobxDEvSDZ4
qDIRTFdmdIKZnvIdZu0+J1pqZgQRk9waI2HURiKJr3ze58vfLj524WS00i3lY6CXcLbC9g5Dx2MV
Kmr0hc1EG/7F209zWy8XvTyk2u9rCA1nrTmbqtlt9dEmD/LPhyRnsc0n1rg6IXLyPJytgyXmoY0S
0kQQ/S2a2AfmIntfN2lOPiILzbpVL58zXhfutmrRtPE6v49PX83VVZqIp+qzgJioXoM1N25pbDNT
XXJ9PrFYrmmdp/AR6d8ekJKez0WJUJzu10a3D5UtrpWu4qj4I1yeHJHf84NS8mPX5X2xs3FTNrMl
alQ1pWSSMj6nODE+bzuT4zNR3bVkaGPTZ3/K2Oj/1MZmWOqoiOhhLbwbyyf4xAnOow2NVv/k2GQQ
jRL/6lA5DR4YqYThw4id35tHrLNJtUR6SvnybZqREbUrbdSVRb5OXbnsn7sykR/LXBZ1hOCP5ld3
Qnqoukm1Qun11YZgVw3ybH5xtlPqUGaKEnTdXvXCO2fvdecW/UFE5g+iy/19fr+4+nZ1/odm5HzT
1pdC4is0cUxHpE1PJGK5V6usxUvfd2i4ETq+fvvCO5M+OwJQ5wt8hOl6RfBamqvhZ1XhsE7CmeBP
5PnPAMk/5iqG+yLfjfAp8zINa/xKR2O8G9RFLXXr2ByYpa4hTVKegljZOH3RRKzYa2nF9oonXYkl
HhsiZYL9FKIKUzL4PGWiUZkF/tkWm3qmvqgxVvCfBRkaf+/VtRhBUGAauKixZg8OAKLnGJXyEoVt
U/EmZQaUYtq6Q6cO87W/5SVs/6UAikeIlXqdPh0GccFQG8c4Ds7LiqTrw0Npz6APD4g4TPqYwxQ2
YzywmdXpQx3Ekhfqw69Q1YhTzyQWg/cck1P2GxNpv+HFfmMiLQYLMW3zVAeMs6qrtMUjEz6f83Ja
aL+jbMPJZ2LXc4dTQ4yes9gwECLn7Gg8MCLyvX7fdmXDvo+VrcdR7xz3YS+cZtggAD6RFngIOxHH
sy8HPrzdsdw3Gw+P8EZ+0vOB475vxGfvMjdavm9br6Zezfs+O65Z2Uu/vx23ttfeyB70Qf6Wemj5
ZluWY0VQvs75BsIyOKTN+YY6Qvkr0mik3AspNAva+8qMg8pVHai9ktFSdhdvcSBQo8ww4iAV+4oW
42CdPHjOil59EMxTizGdQ+Dv+BTQCErJC1W0wADHotGrTTCk2GiNNFiLPq95gFlyqhRtg4o+XzAs
57ec1pjxtpy/FXN61NRizJYoYIzs0Yd/5ZO+cmP9+toMxRqbuvSg0jfSKkelhEbFKXeBeRzFsvxy
MPUcDeMnY1rq/aAyauxfOo8YLazVVepYJoM7809E70qngJ3ZMCXJPp0AekeEZN80jXsaoJ7BWF3E
HLzM7KlZ2eYX3in/QNE0/vCkmMPoFKunwodhhku8jgdfrlu8MJXzaHeUMa+46YkuQo2r7Hz/00/6
iy7wJx1G3342yHPmlAR5ttThdBLTugBTtjg2IcPrjM0zMi0qmJaYr9h+eVsm8HQUD6LiDSNABSD7
1K1xZ7egzhc1iO8pQTCL1g+XdgFZ16Yy4Sbc4+fvcuNqLkp0T5wwlZmwsvz1kI+B4IybFT/vaoRR
L9ozU6WL2cLbXHsJ9MSEd37ifh/4F8wi6nZ+LMEPLcbpzZXGUM+g3i8u7Q1ZpCCNzfTEOFyIc3lc
3NvdfqKTvu4aE3s2JatNp02EDi6Hvb7ohBKRQcmUXob1tBp+7dTWomNw+aGtzV5hS+Rg0m6P2Che
oUtcP5m5GTOPb+R9+5Hjy/x80b7QlNgkI/F9RpdYO1WjBtK3WMyf4Y45MpzqeKMJP8em57oYB+5N
hG1VukfTlekl0Wkl6j2xPK843SrptZX5eZ8Szowc1vMKicpiIC3LIS06Zp5RFYwss2eNucoYrim6
Vt1l+fxi7xStUunyMEHxZvBJY+ycEpdiUrq7lf7w6VTOR44ZLDc7BRutrPyzzfXt0enm6LXG2uFK
91jo5YNwPgH57T6R3TQrwyb9JOOY6caFexKcNmUv9+eToHwaKk9Oq2I+0tnmDZs9PrFhr8pCOOll
dZs2PJhkdjdVesp+dfnnjVyYDTF4xY+TUnZwqfLbvsAQqCkILIXlYvPDSXnaNOywjM4WJmMiNFmd
iZdNVmfiBZO5oBZHCSK0OPgyr4s1FJU/svoDTVopvmA3oh1r7+eLjyzYwRkRviDQnPycLp6lj4GW
ZEgPcTcbVcyKnKVjjih8ildMiEvt69Cx6vVhJo6FDx3QmJ9eXvGyNPfdlhY9eVb9duWs0NDA58lc
e4oSzpWtRVc2Bb5IrcLI1E+p7VmFaxnxWW8+D3PCeJtf2R8+NrASDIXuT8giBZaq/P+jTAnYbGoZ
8z4zYRSqpwPmhO50aEahljrQEA9N9TxR65DjSYNAC09u2OIRlzm0I1JbmxF2KcBmzDckFMQvM/CV
zmyX0NMYjxyhOQ/Yidu5Oe9lYQ/V4Xf7xKlRzSJL3RkGxviZkZYsv9OrHhdQ3iWidzRBU/oh0jnG
lonyMMFhjDn1RR8sdEYa0lIZmw3lCUK5ky26GHHY05hW1LhgCNabBP9CXyDvgy81rYrPGFmTFvUa
206OlXZilG5M5gc1d/BG51AWi3n9m2jUK1VGGaacrnTkHIgc0Mdsb7LKb8XDB7Ec40ycHaezxnWb
icI7WMeRFmUwMegsxWWWGhL2mflOc2ySHgdBPnPiHKh9UqIS3VGJPrGyN5EwO+aHtY7ZsQn6qM9Y
VAp1yTxK1dgGOeqGSUzWC9WUmzSB8B5qD7d1I65qNlbf5aP1bMA5bwUfe+uV6w/KbULYFNkcb1Uo
cn67z5W/pVdzr8+dbnG8xSgvoPdaXirDXUZ+g9NF9exDdA5kTqnsAAeYvyu/Qfmw16ZeTUUfX1N6
bfoYCps/BjtLQ0dkt76o4xpYncgcRcGreEg+HPoRM4wlHZR0OyXcVvTxtR9ekz6GeKFrW8CjK2Bw
oBbeFweQSncfzjrXv0QsloUvdWvszqjxPuoPp5JG3JXTDztEs4XrNU0sLEumhmwkVUGUv6piYYhP
oYjXpD+z0QvRvEjjQViYpomgj0p/47Mt9dsPs6iyTXKigwmfYmU3HVRMYEPXq2zoOWB4auwzaMs1
gnkj3EufZ8Zlc80tjNCRhUZdyBCtNssz9KHqGfrko5+fz4G9HclYaFsGTGHqizkecX/iizqzNx5J
H1b2kPYrKpRJKC5bsURqFh/UhUcEmnQanbiM/jOIgw+kEon2SVYjCOZMS/2vrCVvpfXpO4OKR1mB
TxOpL+HUq2XqKjU5kf9ibfos4HtJ6uc+fqe4eKK2Yn4CssWObHROcTLTFlNVsomgUnO8HnFRKYjU
nlJJpArFj6VgmzxMI74oVQ+tAjyQRLgyIVy6plQVLpUWjQcbpOGKvgbsYC8afwRtCqxm2rTX5/YK
eA5RadO3Url8dqQ5i3bDKvVhK6ZX1yVo0zuINMmoHv0os4zK3pw/cN3Mr4Ni5tfxYPgYdIFoQpky
3ZSzmUhFFPfsl+uUiodAKrJxB8+kwq6SiqkPdbBFhEFAyNjcmyDnBCMAqBAIhUOPOT+XNiMuc2La
r5/AB+oZ6rSHNHX0aqPSI1bxCmZ1Lk0OSSkyOElPSnL3hAR9ga1A3qdJ6fUah7aDPV6KUbGKUbnT
KQ6/rErusD8Oq2rTjc07gY/HUkSUpiRJaTKMkeY4rRbLT9BzD1qZ/5iITLKKGpUFB/+B2LzZUzry
kcQmK0FsHutF4bOOJDQTr+3JhGYs5w+FgxRiY+9KbGwgNtvzd/Xa0EuoxGYuExsaD7jhlMJpOBdT
ic3M50FsiMjwgiuMsSl63MNXKINwRyte0gjNMXyIgv4o8bicThCb7S9qxMYYmciUJoOozFqVylj1
PJIUaKn/8TDzI3lyvg4lFCIiE1kfX6HRB5N+unGMn/g1zE7iyUawGAVI1wyzi7aztoikM7VMZ6rA
BQbc4opxPCdmVVZ1oiIBj6hIfFHnrkoGK4j7x331bHH7Pnn81ZnGSP7W183IxwzW+l2EvbxRC6cT
h6lqPFr5YDK9knUHiVm/hwrTZpuy2ePB5nfrjyJrsdo9YdxscWq/ciO2mNednpD3MygFqzAbvD6X
CL1AQ9FL+cjy0qc5v6O1e/TRsjeNwK3rP8MeV5lA3Vdda1H6R2puOog6NcSjE4x8yLa5qnKrOML/
DvsXro+Hu6snM1L9x8GGlKlbY6WSQlXLo7iRtJ+Ta6mAXAKskqDDr6CN1DSz5c7G6DQzRVUGKlNp
9Br14WE4NHGYEuv68JLEBQLFy1+vxIumGWvA73enRMalhpaiDmVg1Lh0fg++hDZ82PYNVaZoXU06
Lq8cqqWB6k7nh7xBkDLBUvt/Gq1M/nAWlbe5JHkYCNdhYlYZV4DV5LhFQ52JFv0mnelU07t6jLpf
Hx6s9Bmjn9c/R18d1asf1HM3ZSC1Om3eiPwtyrhRxjMNnyvjqMn8MWaD0RjdGOOZ13yvDBxlXKqk
R4qXUPDScG9qDg1K0bqwgZpz5BleSgtC52HjTrjfj7hHo+w5LYGSzlpdDc/oNUPWoVzOuVN3vzQu
9b4GOlh9osWLceqUKBhnr7BJThhS5DQu6AML4bADrjTii8erBIxyB6Fcb1R2EKeW87VWQh8q4Zxx
THuztL0jK55BErYWViDGKKd74Zps63N6TcsUd5S/GfYTSTipfnto8AqlOwY2PdKG++dIM/DOVr89
jOXN1pKOShJx1asCtdtDA2jX2pdW8zZ9tA8O1FqMFBl7OJXwpmgmp87Xp/VMUnk7iuM+Hzdnbw6k
gszXjwiAQAYysK7PCc6jdf2nO6RwuNT+5ZvroglodRP1q0f4x2rLuY+FVoimn6j04mMt2lOFLlFm
6ZRCHBatJdKFk6pQv6IdQ7dENsRz6CWyRm840GYqOjB0y74vcw5Ex8CnB7F6+nBL/ZbQ8bT161mp
lqzg4OiGOEXZrWcxF5BC+GMQXKV1ofFECscRjdytj/ZVPqM/lMNoWBOhIVVfR8CqiMukvVphXcRl
lgdflNMa9RhzgrFlAnchbZh7MXMm6U+CP5tA/JmH+LPK6lQ1ZLZfDnMn0lt5KJdn1QilSflG2Uvk
iFC5qHFhGqFTjbxCLaTJPu49uXZy3C/z45yWttNXHtJ2j+nSVnm01qydjDU5/WJHkdbvO2kj97GG
3QtGeIjz6ndYTRxqIr6EqZmW1Ofxiz+0vENPqmxL4vOR+2WlysynFcokc35TaA4hXrrSrOxTOgiZ
z0sUO0q22Sfu6VrvBA1RS/CzbrxPXJGoxOfVKtnpGuUyeUhXTWsYtr6rXuisb+gL9CeMDsyAzsOK
e+Lx/PagLTB38GRd9LRF/FtHv2I+ffliN821r4et4NAl/LuMf++l3wTJWVWM+XHzYUOK/e7CyNgH
KQ4Lwnqk9NOPmCBf4Wc2Zkn/YDdx09J4XMyin/ztY7o9SvFZ7dhyZ5MWJR27QVHJ5s+yaJoODHyf
yKBfsIcoXSr3+ANQucdQN6U3ah/FkfwAtAldMhUMwmNXyfBcZUCInmjLb9i8eH/cwAKaBY9dJ78W
KgNq8CRlNkuinFvNuFWH9u1YuK815+PGv3soaxrFCMOaSxuQ1rBORmnphq5DSNsJ2nJOaG1snRKP
xx/Dt7H4uKBn0bra9GhvBKy65OKLL963u/Fvg5pjzLwIUkvKZzkf56+nHeYjjYZ1+t5oFLccNkO1
lvcUk6LccqlueF62Kh9hWY6bCa+ym9hG6Q7kp8ZfaJsO41q2yCGb8ldtt9VwlxHUidNujMedUl/s
b0oftDH3yj4HxPWj4vHYg+P0jEgZ9dtjtwJbcPZYewwLnbrcwktxPFAoYkxyiomjOHJbL8gPFo6S
58REYmBcPdvjFCMpKAhHN7lqITYEQGvRqTLO/SkA1+A6Pb0avom8b89vYMczGbUntPXQblPiSyuM
BXn3oFDD/sVxdGtNWn7c0FjUXPNDZJdt1FS7zVJvibPuo3UWa9Oq9SFKX11FXTlan4pEB2/hrsxv
UEuwrJxqzM5bAuyxrKwwjsL7iXkrLqf3vCVXqKE5CM3NW3ElhwK3Ig3dIh22msavu82gnL/uhlmz
7eMdO7/+ov39bjeYv6KtjZxKbWlfb6vfXkn1GNNpSEOyHjiBzd8oMg4YaKUrpkm2ndZTKZNwLIWp
t7nmrzPttAtZJMVFOp9vsT5x+9+Grv58SjAZyuvbocuHhi4cqFIORbo4eepvFFnYBOuhNtpyGo7H
gWFcImpr499pygeBhZSgsXUE1zpW1lMfK16ETjTExes3x+OBm/TJ+d1DPE5BYgHC61LCez6BqS7q
2RRkQWQsiInuXb5NPwlEI9xLXL9aTy/4oAx4EhNgi7IpBHUT69F6V//F7rDp6y9oK2BtG0m95dRO
iL/55Yv1Xw/gqF/s2IlhSJev9etDZ66G2VjiCojKyd59f79BR71KxPB9KkKMlM4Uc/4Kf8Pi+KGe
0ZOeVIdPJTh1THAWSdKRrQxYliAxc+VTnjJAJTsFkuxIEgNio+wlTrWRTccxyVFaQXCeQJa1Pe7b
tz86AI+RbihIH9iciikt3Zi2os4l9RJnsK/q6FnT672e8hjQ1gbbczalI6clCGpWIRzXyulOk6HX
SHW683VCrlssHclTs0yzUieupwA/fSvxuMXl9KwczjkUaekZeT+vPh5brtKCjFr7KhSX0wJy4OAk
NNVVcnD6SEkOzMGe9DWb38w83QukcqGwy7D89avSeClXp9+KpRXmvLy7kYu0x5GW387ylh8u6EGf
zlzSP9Kkp4dTusSJOeNFn3OUIi3KqV2iFLXw92Lte/4RWejVLMZqUQqOiJKmRhnHUTDrG2nimy3L
yqT7JqfOcitUiojEbgkn+vye41TqV6j2+UA7DwJEpGWfd6OAwP5OlOmCCMepsDt5fXaLb49Dl5Vw
N2ZymFN8TWGBg50oyYkRVgEvcIkSuzx1BwJXz7LU9yJ6IS0Iz5as6pygXRTRWhK4Du96cZbC3PiM
yPuZVdLB0a3tkip02i/BvoeP6M+KcxJ3HOHjxRoYwv1o8Xc0ivHFf9OvPWxRrVfMCXcTW2E4tOvt
AuxHMTr7/HzdIQ3qBUampTIK594E//b0Q/slySjA3xftFhOMgrKfv7Mx5vDUwOi01H4cQl8Cp6Sl
kqbuyPE7Wj4C+WlHkKZfFiOnvOhpqJhKoIgqfU+Lk+R9JBX6isk5CEvpjWmw7xPODJSlFNwzyi0T
D3B2Vr7eyo+3Vsc7mZuD/umziFZQnmo/JrMppb+NzsALiNK3/B/9Gdv/Z3/GO6laAVgDZ2MZwePF
+FvUk8vO93tBoygPS+cv2CgYWYNUXXYgX1MZ0qQ4fkSBFN8tLvGxnMbRBEpQfKTQGM5lPznHwyVU
ucmn5LFE5N4FaUqztETjFKfuM7CsK/VT0BM4iF68PHAL6tpb3M3LBcz8HmEvoRyUMP3P1PWujDU6
IPWK/VqFD7rYrL5RZp/pxyWutFSBKwYcqtDfPPBsIN4ic60ePZgJnQxrgx6+2I1KB824Yhy4DqeN
h6EjaPXTZOk3j8WUlW1i1XXoL9pJDfbAZeiYeWoPhYf7xFTuLmPCh0sZLbVn/oGWljcp00yUvdXP
5emjw3HBbBdL57NPNLuTuSWhvCcrwZroTDHEvTRXfEGrV+yp0MGlzDLeFxemuoP5/HdZhGpP4qff
mXcooH1O5ENiuPPbI4XW8DljZhhD5XJIolAHw2JhNjRCUQe+i3CIj1qACJXBj1ExzJFcjgw/na+J
GjkorPBR4BUsg2vjdrMct2/q5GU6G3ss5X4xSosZBfKFL+hggoDl7ivU8lxBDEaxuHK19E5npjSP
MhJWsJZTds5Hhg+gy+NiFfwgZG8KxG+r9ZpXc0vdFXEmZXk5U/maKNvQ2F4mHQBmh7HTbrA8vEZZ
09bPyTkI71Wa2S2+o4dnR1p2ynDs4xEd0vpTtLsyDlotLDrZAhEVGAPNQlSfyel2iav+ZAxu7Z0y
xyU/dvFvnfgxVRGT7d964SPyc6jmwAFkbK7dDnnTDLmSm8L94V5MZdHSfpPEOPJ33BcepDTGrtKv
WGqFvzz4GmrmQ9WPLKv1sav1sfKPIr9AKBLu9+yWW0YTo1z0+cKTgvMCGX8RIeArzjk0QsURHqHK
qpRy7t8ry7GsTkcmtPqhfhmQeIWBYsvys2FBu7f0tyila+2RjtGhHpGOLEs9iCBhWBzXZGwvnZIl
cqIYyELLzlL3FHC3Y7Sljo2y7o0czrMsc8GS/uExllvLIZUVDxctPnDfffcNnn85r2SqFxWx5sSk
+0UhrTJYPS4x9KTE0fwWqfhiDfZ0ix9+TQS/LU/srZHmj3xOUdSW+PC4jD8D7WnrHjM+EJvp+Iia
ceuYOEtEQFhyHPXpgh6RA9mWyNssix4zR0M46rdi+2ZYT+xO6y+JHJ2yKBtype7K3ICFwlK3Ticr
5ha9R7GIeWP6qjvsk2/f12r4GJz23417Rhj+hpRujT2r9jTs04oETH48vIh3MkzCY5OyeCylXt0n
tQljdnIRJdQ9VvWHyWagXJE9elHbGo8vMY7GuWuznnr2W26uFHLMhmffWHE6lem03ApPQTjwaa/t
vzRz9KINi5Zk6vkQiYIW7lo6S4f3Bn2bbemGRd8uXGIeTRk2tnUP7217zdBcvwUTyXLrjkPS0EPR
L6j8twulEHSZ5pLx0WwtAPinYV/mbol9wQUSVSMaqt7Gjbcle2NF1wynyww7IfOmXTK7gMJndMgR
19ltL0h/UxwArdu2BwIfagHBy9piRMT48QYue8AijTPiqjJvNG9XF95IXe9YHpU6FlZMCR3uX5q6
S1s1g8//d6XSgwosU7NZMGtufRyWfmIhYDWMFUYWwvkLbILA3Y3SDEdl5fDKAVsgkQPTaycE/gIy
XKbn6nrFhpqkCMjAymqYyUBXVFBXrPkVFZ7RRBl5fSJtKVuCymKbIguPC/YIFHAGH7Csuhnq+Gq6
pWo6mMh/oYK5yywYg/gNVL1XrRyEppQE52oFGdnTmlfMr+Dum6u6UtsozlBjbAxM02udniEsNWDy
kHVjeGjAlfhSGrwR41+rMSzRcnO03ApnZKZoubGlxJY06KHJn13U7rAZQ7maiZ6LFshaalb3vPK9
xcGHNVJGhlKYQsPZug2inKpF4d2ketpGcVhubcACVW4NQ2eq3+UL9VbCcCibjhjhPsIOkkE8QdgA
gw1QvVIyOGsWvwv1G1NrXhCUBa2vkccTcaUl3I2X70CB1nSnOHADfZ1mk6Ytog5ruCBQluyYwPty
oQ0vkAvtrlC3MWEdaviH9GEpLVDCg66fiONmRlmzYUf9rmitWTZb7YOQIRoGUcqojg6phJiR7E+p
3/j0LwbWb+QzRiUduxjpBY1dHPKSzUZlxItz2Y5vXcP13VddjFllhsOm9NDxq0Jo19BEu3jOUcXf
qVEHtYoV2cp45tiQZSbNnYcTZ7LpKD7ap6qrvWIsmvnd86uN+dNN+X6z8sZezIbQ6YdjBfAHa402
L/4pzqvQXzrLynh+6JAh+mHjHuvinxFKr2nRzxv3ZNCDnqIbo9/I6I1tVpniEKf4vHOKlmQKU3Sz
mqI1Q6Y4zClakOI7fEimk+XrcWOmVHxKUd/Pr1gLFXTj4u85TsXXaTDHmV+xSR/9bXELEC+lbUXS
CZXZctMJhFwpDUuTT5S9UnOIytPR2ymHU5qpBlM4BaO5FJCGAF2cAo5odiK/Q53y+/zo+bUcmV+X
Tknkd7hTfl27KDVX2ZZEnugyGZU6Lk0+UfcpZWt1Izm3NcleVGZ+rVv8PWfzJXpTmbopbfG3nM8H
R+nVphX/V/+aL7zwKUBHTU0dYPe1194HaL/xxhgg/vvvvQGfXXbZu4BvrrzyFcBta9dWAGbn5TkB
aXq9AbD5kkueA/hychYAfj58eDDg9c8/vwBwzvPP/wT4df78+wG3fvDBRMCIm256CBBdv74E8PeC
BbcA9vz99wDAq+ee2wZYPmnSesCBvXt7AUpffPFXwH8++eQSQPXjjx8CTHzppV8Axz344HsAz5NP
7gP8cM01dwMeaGioBITfeGMN4NtDhzIBY++449+AqccfHwTMPf308wC1Z51VCvhr3740QGTjxumA
QEHBTIDrqaf+BHz8448FgP2//WYCfHf11XcAnt+2bR7gglNO8QBOHDDgLIDJaDQD7mppcQMcxx13
EeChpqYqQF5GRjbgjLvvfgzQs1s3C+Dk++9/HdCne/ceAHu/fqcDhi5a9ABgx3ffjQVsams7HjDt
hBMuBSx89dVNgF/C4UcA/Xr0GAoYFok8DJiRmxsCFAwZMhpw+tChJwG+uuKKVwGvnXfebkDlo48e
ADzpdrcD5hcVnQN447PPzgcs+M9/NgPco0bdCPj6++/HAapOPvlqQP+6unsAT3s8fwHe/PjjAECn
/mvctSsXUJKVNRvw/cGDIwDXv/LKOsDKyspdgE+CwdWA2IYNDsAlq1d/AbhmzJgpgDvPPvsbwL1T
p34CeHnGDAGo//DDswFvf/TRZYC1e/acCJj+r3/9CNh14MBAwM0TJqwF3H/OOZ8DLs7P9wL61tff
CVg6ceKHgNb9+60AY1paOuDwwoWLAY86nXsB1xUXlwFGPvLIW4Apzz77PeBxl+sPwKwnnjgMWFRS
0gDoduutSwFn3X77i4BjHnroHcBVhYXlgN/++ssIuPCdd3YArl25shHw0pdfhgHjjznmQkCW1ZoH
+DEeHwI49McffQDvbdlyOWDxpk1TARlmsw1wfP/+pwGafv31ZMDq6upvAafdc8/jgCVlZRsBowcN
GgO44/33/QDvM8/8DjhYW3sT4IaxYycB1s2Z8wLgrVmzfgacOnhwDuCnefPuAjTMnv0oYPDixfcC
Hp4+/WPAE199tRBQduyxFwMqTjyxFlC0YsXzgF5LlkQAyxyODwAtu3ePAly2atVWQLbNVgx45ptv
rge8U1X1HWBgr17DAC9u3z4fsH3nziLAnFNP9QFCZ545DWDr2XM44PbJk7cDzOnpPQHldvtcwKqZ
M38APLJmzSzAu1u3XgGY8MILewDvX3DB04Axt932LOCUu+56ErD1hx/OAPx+/fUK4NOffz4VoKxb
NwFwxRlnnAv48vLL3wDoY7FlgFc+/XQO4MFp07YAJj/33E7AtrlzXwO84PP9Dfjjzz+7Az785ZeR
gA8uuuglwJ833LAcMOnf/24FWE2mDMCVb731KWDvddctAZw9cuSVgJmjR18DKMzMtAP8Tz/9G2De
a6+1AO5pbnYBNghxHOCxr7+uAYhQ6EHAuBEjjgHcPWXK14Dz3333K0BvRbkZYFm6tB6w86qrVgBq
xo0bD7j69dffB2y8+OJ/AVaUl28DpBsM3QD72tv1gMw+ffoB1px//hOA4GmnVQP+7ffvB1z65psf
AQbdfPNtgPsaG2cAzhw27ATACQ8//Cbgi2+/LQS0dXT0B+Tce+9/AMf27ZsP2HLppW8Dnvvii6sA
3ZcvjwLy77zzGcBJDzywElA8fPixgAG33HI7YH1raxbgls2bJwP+5fXGAc7s7OsAT+3YcQPAsGzZ
rYBzH3usA9AjGl0EGNK79yDARe+99yXg859+OgVQN358M+CjQGAV4KbS0ibAqPvuexlw3kknXQsY
brH0Bdz48ssbAM9WVBwEXP72258BcgcOPBMAdh03GOChcZEE7gKHiiUE2HYPJThd98//vFDICbH3
xszozsW/4uBn8Q8NxOAtfp8PJWnrIBBxVuzFe/bRniIdAtTTTIrPLHQwfjHHbgVTHk2PVhmj0yAF
XV1VOavp/4wvPnw0vnjHUfhiGf3g0ZjiD4/CFKdy3S1H57o7sXYUeRNxv4bob8SJdmaKG0UGcct6
5vP+mTMemcIZW1a+dhrGhJpnWfnOWDw2/mzqxBgnw60UjgYnQzI6s8bJ3A52zu3zf8jtw6PkluiY
ZG7xzrm1/ENun3fNLdlvlpV3DpB5bbKsXNabY3xrArOb6ETLygeHcfj3VskUU29aVtZ147CdGSr7
/P8Pa+z68xknoLb0Ig9gyKAnmwBnnlB1N6Do+cs2AEY8NPE3wAt/z3geMOV7wx2ArLy/vYAX51/e
Dliycf5tgL/Spo4ETP/x84OAtSdu+Bxw/GlliwCvX/DErYBvXjlvMmDkW0MvAUz8pc+9gFmHG74F
NJ0cTgMsnrq3HyDmuOcJwGVb9zcDDLdW/wwYcPuDdwHeu/yGNsBd7nO/BHyyOnISYEbomK2AyTsv
HQVYvn5dGSC8JhoE/Ln8+usA980YdxnghDev/hqw+tvpKwF7l7w4CLA+64WLAQs2n/ka4MIdZ2cA
fhxyyk2Ae1z5swEXeBZOBLwy59qdgLcv+3cd4PDiRzMB+005dwKuKg/MANw68dBgwJ3fzL0F4L6x
4w3A8/O2Hge4Zkrad4DvR9zqB1zsff5EwKtt2d0BJ7++xgC4ee2N9wO2nmF6CpCXfcvvgOPee+pV
QJoh+BZg18CbZgKWfpiZA3jm+tduB/zR/fe9gGmXfvcY4KIv/9wESO+2+lPAxwUXjAC8//ThpYCC
0Z6HAI//4X0U0G3pt6cCnmxvCwN6RX4dAyiZvedfgKqrH0kHvHuF1QUYd8zS/YC7v04fC/h6XLd/
A8756V0H4LaK2OuAq9+f1Q1gTP/kSsBs54A4YPC9B+yAz95tvQcQLZmwEXDJFw9fC3hZjH8X0D2q
LAH8PLiyEHD9ut3bAY/V9JwEqBlvaQV01A1fD9Doe49FN0cAp+bsKgcM73vVC4C5510zDXCoT/wA
wFJf6AOM/fenwwGnnzTmBEBPyxdzAIGZTx8DeKCy4mOA/fTRZwLMPS95BXCH/2cL4LXdd28BDH3g
tocBixrWTgec/1XW44Dzrp1yKSCz35CBgO/ueKsnoOHRE38EFB+7cwKg39BBwwB9evTuBfhdaXkR
cNLKZ98E2IY/tw7g/21wPeClcPepgN33ff024ImFsw8B9umPfwQw85q/3gGUXVy0FlB5oLYAoEwY
NR+w4bjmrwArdx0MAFb98NuFgM9P+eoDwPgL662A/vccWwKoa+6bBag/274AsOXtsR2Af+8/tS+g
ZdRjlwOGPXzyFMBXr+b9Aeh9s/tXwLWN338EyPnPwLmA56568z5A3zvL/wZMap1zLODZg8veBzy6
96whAN+C3G2AY/NX7AHcMnlaC+CLwo8bAcs+ePww4N5Pep0OePqvxR8Cnrrhm2zAl28sPx5w1ovv
PQnIPfOhHwDO627vDQhWb3wAUFHruADQHuu/BrBi2yoBGD1mXxXgpqaX/gI8MmvRasClH91RA7jy
05OeA3w4st9/AOteuK8IYM1Y8AxAPHjhFYDtRW/fCNh0/HU9AFecm/En4Nf739ADItPvfxbw011X
XAT4V/ynWsAx73xoAuwZIH4CvPXzA18Azr7y9M2AXx7p8Qlg1Ms1nwFOefLVlwAnnnXcKYDmp+7M
A5z2+MUNgNC0d84AHLzpg6cBO1d89DIg/5ltAwC/Ge89G1D665f7AAs3OfsABt3WfjJg/jmfxQAT
9rx8DmDjv86pAPxwt3EH4OGPX/8eMDW4ZCigMXfEKoDjItdCwENVvxgB+mWnzQL8fUtoHuBAr9LR
gP9cMuw8wO3bt7gBrVZfPuDyzyb1B9z/+fnLAGc8Zr4BcG6HbTmgrX9xFLD5uRN2A944f/1pgG8z
f9wFuGHSK8WAB7fsOBfg/X3eWYAM2+brAfNazngP4Nm36RdA9aF/VQJ2jL3SBriubPvNgA9e+mMx
4M3A++MAhfaCXMCaJ0qqAQOHNV0DeOe7kWZAdvFkBRDvfVcpYMyz+qsBJvN/vgFse+2HBwFzfI0r
ADduqDsf8OmpK68ClM+dGQJ8tMo/HuDuEfw07/SnCt8reeLhxX98fqDm+zE3PXBy/JaC5RPK3v+m
dUPFjXee+vSa48bunnpXr/F/N00zjX7s4uwv7K/Or3x88uXKxyOv6Wifc3Pg3oGfPDlz46yLVt4+
96py56Fdb35ZNcDhfyb2UN2Kbc/rlr2ztee+H2Z0W/Wfiekf5Q6/9YOzLGmNL71r0PdfetmZt/Ut
nX7JV7/c8/uHm/e+9tO8u18IHfvzi6fVf7f/DJEZ3nHFpN+GXD1s1NrolW9c0OdfGauHHvSNm9K8
5fqs+7c3HL5u03l/jvj62fwl3VtOeaWf9dwTFv1aPdu18LnBr5/d+6Qfb3jkjvUP7nl0Z9E5/z7x
r5fXtb1dHPHcd/6gHGPtW9d+dvy3l9ou9B5jXvB/wr9/3h6Px15cZIJW5CJl1qPKOQ2Kdyekv2dl
KeeUKN7Z9LULj1/w5z/z+Fz2VHvm4v0owFL3Om1GZFkPHlxcY8+Vob/AVNaLl7VR2e/YNx6miv2M
6kVF7CGwf9G/WUiH+ET8foffMV9abupBaUd9Oerz1v54WCM/LF5TQpmN+pz4Pr73nckmde0we3DL
z2p7a1jxz8YuTKbyhTFsMNhb6uxwjIh/0a1vjkWmbdHPZKmxGnvx4gPMwt6E64bFB8wWPJtkflnR
9j+eijazicMVXXqLgqZb6n9Gd+9CBqx9VGO372vcy/4KntOxOa5qozLdpPjN+en5Vcb8aaZ8Hyz3
ZInVP6vKiTVU2+7RamN0uinqZ2s/sfnWKDRO/XCwmbG4FaXLXNEsS/3z9LSv0YIurp/AWx3qCC4k
ZZgWv5NoNcqz1PWmpzchMn1Kw4oV1K7nMbYP8Wg+uCLagXo430ZRozaM2Wep64UmI96TrfACEyse
E/3ilAZ6/1c138SgZRBjQYpW+KVZQSPdfrSR7vE/j3Tfo430/wfj3ON/GOd+/9M4UwZF1HpL3duy
X+2UOBs4mZw3PLode1mKIxsSCCnbmsW70V2Wm7w6VqvLPAoCQMFKQ4CF2FpmWOofjidys6egVMpo
t37Iw7WC2pmbkllsmjV6mAugcYQwY+ubGCkZL6XOqQiI6o+R1bezW7xk9VMKlFXMiIX+MR80QLaD
CUWrbDmwVmLx9VST1gzZjZwPoVgsdIp13xeoLNXxCAzulcTgzvibSgn3NUt3Ie/Ct3GLfH4lTaNO
sRc3/SRVLhfvX8Q06lhgw/4Gfn6Dn+Hg1lIXoN9Vh1HH66AxetQ2nrK+1ST7nUbFb7as/F2Z+Vea
ZWU7LoF08VO24bXxl8RO+HcO0ckIuDviV/XGaFt+XYyp4iRr/iRjdJItf5IpOikjf5I5OimzVO6Q
F++H4KtlWYzq1TLJ2ZP7ovVz/T9VEN4+fLbodGvUb6PKdufKoq62/1d1zeC6ZnJds7iu9sX7u3Nv
YmxL8ydZo5Oy8yfZopNyF7cgqLWGK19ulpUf8s+Vd1iVKhu7C86kTolWU0Myov5MaoiR56k/U+n+
/6odWdwOO7cjm9uRu3h/OrcDbplKo2uUSdbUwpC7zIsLQ9ZdCuMCEF+rWXRSHndEQf6kjOikwvxJ
1KzixS1Z6JSTuVPy+shO6UZ/VgF3Gb1ZMFMKdpgX/4p+ixrtUXi6q7CbRPwgFnyEjpWrLkskqFMi
U1nOp29m1uqLFS9P0CqL4jfKzu4T9cEHoFJlVskK9UG1WV1Fmhnt9rCN38OWehB1dSa9G9kNniLy
Pa9jakGTMW85jZIeXWNZ+RV1zkg5EGVrqeNmfp2mGFvyy3YYLCu/0c6QKj6VX/LLPifYoY+mKw7j
//+pHWjN/0Vyk+Iw/18kN0+21O8nwnFKAw9eirwxDC5CzMHj9SmnSmEMV3085GBDCXPtGZE9+vr2
cH/oQcP59sxfpJFwaUvftlR/qnF4pFm/ZKJuSdnweKRRH1mrj/xkqQdXYAuvqY6eChVGyvCvzhla
oOXoogx7/SKVY5CZbTjl99ESr24JZ9o1t7UQXKyO5qmu9aQ8BstzDlyfKj8EPe1C1vGITYlH9i9E
q6D2BLX3csstt2JyD1KmG70+J3sJ95tYSX662e+HmgILT4ZaCY8mqD7hWJCs8ZCBOmuGLpRfv6u2
BqKKsP6mfI5VIufjnN9yvoC++FJjz1O54rv0S8r6xJeU9YqH29oms3POSbCRBHEtZV2OVB3fkfNF
TiOzDDCHwvbO6CU2tSCX8lma2evUbUtwwmtjifslmaaanfR9qrJh8bfd2fbA5Mj6jlKlKeG5rn49
d1SeMtVIHIoxK1ZmzIxaIM7qNypOcxXRsFlExKoheZubv1E0tED+Ja/pVdOJHy+psPePtOhjIeOw
d0HKpL6iZaUvvjR9y3eWlVPt/Zdu29KGgdqyk197bl3ijy/16Zd+qQbLWD2blnRf6khD5EQ0PeVj
2PKLTCwVTXt+hD7yHw4/yHJSBdWVVKGT1Qol5Zml/aMWlrcxSwXBmKN7ozA4Yf6z/wcswJMPuwA3
L6SoHi/bXNwR+b67su9d0PzG3YalxoE5bcqmt9hs7XeQ7Tt2DRi49m1DGkZixV1SZu8HC2NOlzuo
pxE6DgI3x7vEw4dopV5ZZs9RNsEI3qv6Ld/ZFy3dsEW0bznWNpp6ixrxfgakEpfYRl9TP6uyuqqL
Qjirr9dvn18MwSi7qvpLvEXOYVUftIztkWR5na6gKWY7w+0To6QLSEyANn34m+pUdMd8tepTheqo
yuEeYu1PPIuaRM3v8iFF/i5D1az3KXmhKVwfroEsn8YgMb0xvZxOcf1P2oy0L7X1ObU/pvcgmBRt
4rm4K7yB52ElJiLsMZqTNhvzabrp5w9eaq3bEuq/ZGCklWVcG/RskFR/7c/160OG5nRdzKlfaoKc
7vrwvpw1hpYUE45q04wedpg5v9+iMbpQ74jgwhv19Q3X7qYyOvSMCPOHKvGlA7movojSyKW1wAcX
FdVARel1SjMVVtW5NEOKjTb291u/HXL9lU0scmgLllMegZK/HDq/iFUkpQeHBqdwKDtM7y76+RM6
zZVNfo9P1Xc3Q7MhmT+GqH5L2JDf0KSs8cWuSml4s9MtFkjfmcn2QzxMLzs0L9xHnDRV+rrPgPmq
o+kTrMpud3TSZ/Wr3llPUVqo5StSWs6mKK1Fe2vT+Mns8zvFpmaeP6yNIXTrof1eHw93e694nwM7
ODNbuJRGhNHE3es0CwulmgZic+fBjHQYFziCxoCJMhCVTZR7Q4lTXEEPnMGLnEEmDU5z8NLA3nYI
xwfnBHuI973xOGsLlHKNsiCmSbNJyhMqG5S1anlLrWf2DQ+hMe+31Kk/06UP94k0pEUa0+q2hH/I
b2jrNrQhsi1O9ZP2F2bRkL63Dm35682B9J7f8MfT4YHvrULIH2/y9c6WP5621C2iyO+9IOOZ/0u8
GYg3836OZ/0v8fIQb+7/HM+EeDUynuW/xNtJT+/dK+vXNxnPeT/HMyfiQe/+vTyZX0YyXqaMZ0vE
g8M8mTqlvf3eq9vXKV5o7hFlHhmn/Cj5lMvy0rU49veukvnYtDhDu8YJ99DU4JtYVz+hT/2OEfS/
Mbm+19mxJih32tcZWdtjI/7U2T8yQtf3RJ/yGn+AC2jlHQ6Fuq+lrgLS6etp0QjgbjpsiVESHRw1
fkCsalvP2J386obra8LvhacG7oZsJmNoIBgkDD3Wk7RhQMWiErRg1TYYdIvfRyWbCH1jy+wvUC6u
oN5JGW5DhrEqo0e0nxWPO5V0p4gRSaKlpdgVpeVEVA/H4ZZHKzuow7LjdImfM5jJKndDh7ACgbP9
LnHKUJa6nx15fyrLmxo6IHhMHzIyWaw8263sFS9QltQ0FM0NdYq3ZlDIMjs2k8Esl3h+hvTeYCgD
E5cFN2l2a2X41MALifZexO091X209i5/L9FeNmKaRp9wAMJizFLX5rJkFKnvBNbyN3hXKKy1stQs
Vu5z1zDlieWezrzRLG1+dy/OqzEXj1losqzeFmnLaxteXErvDvX9jLY+xefXlBRfvLCY3/3K5n0f
R77VK833GdbnYFHPMKzf8v3HHYY1tBaYMoiSF/1V8y/wUNHChGnCpkA80dhLqLk9xESX2lioJXWy
l7sCh4grV6fi3zI9Y9y9esa/B/WMjY/C9qZXmvHX8zlnIcV5TQ/lDxyYgKuERhX7SoJZN1qHYZBV
/OsDqOmw+fRH8CjEvfSn6A9WGag7kXZdRW2WumPxt8lSN4T+BmBnnIb0UaCaf8mD9qdRx9tP4OWH
Ii2HLLHan4veMUKTJGthN1ohr/8t2IsoNeEbkgb+pEnZXGeETfye7iUPGnE4KFoaDKq21qmER88g
J5XAn7lBriLB9FhdAfRUAr/ug0T2XVqK0Mmdaybix2tVujVEC11gaZrW63NbjzfyCUpmzNfD7Rcj
P9D0p/oG7kvEKm0FCtOeMOb420nZPo9s3SKDClQmGQM4E/EumZn3d35c/MD+JWycwRMpGbwnTQNm
KOcYZeVk293OJYPF7OPVxb3oD8vy9/BxMvVXgdZfu6m/CIma6zikJ9igB/lx0TvsZ6CnpQ5qQ7Gp
43q4vOLC9Zrt5upgD62Hd1IHuUXoPa2DvFQNH3UrPjoNH7rEOfRJ8WIj/f9j71vgo6quvTM5QzJk
QmYgIww64uiMOpW0TTypjRLtaKdhpBEmrwlqfLSXr05z0xY1UUoRxUnaDIfUtpc+1bb20tsXbW0v
UtpSy0kkA0HAgCQkGlC0eJIUAomYF0m+tdbe5zF5UPv1+7i/3/czP3Fmztl7r73X/u/12I+1vax6
tSRAhLZQveumImFc2Xk1q6MT6vgUHpbsXRj5raF9x5PpwJ6bglWCTUSDPowuhdK6R+fpTkOWrXhR
bQXes26uv9RWdwc7K+RU6VPdipRPXm1gDp7NZ/biBfkTHb+Vs6hau+djMjMeeFFQo57hDARksT3V
yQxhO1pfDYUpswE6r6qVrw5DV4Owsoe1rlMWvCiwme2l5gZHBpRW70o2gWUNrWJsrLkeg42pQCxW
HvHqjaHTS71fjBwwsOT7jAcurfkwqH6Oo+FmL0fw+pvV9ieMJxgWMIKo/TCA8KqSXoe0GyeDpdPs
zDkPU8/uiEwcSpWzpTOcIjEnpCz7i8qcOjwxzHOFoSE4NotCyof0BHioCYbiptxfqEOxSEnTX/8p
iS6Qzi9WvtxowuGCvldRCM9WFocozoRif4nHeX1sbmRQ48YqiqAGg04opWuk8eZcupL2m038HOdj
GZExPXnvfdh10EM+uvj2HuqYIozTitEUs2LzEd/VIPzm02xo2BxbgMcWi2LJyvFlGBq2gwIZH15G
nCYB3ftA5JRG4HNgIc5WtlDsWgr3H1L+sNuUVKb8bje7xbBI+dludgfiR8LKM/TqO7vZ/YLFyib4
Fnlc72oqrJwKc4u7uPhmJ0WV3+9AxYUCX9cAaH+S2wkeAL8NyFZbDUk2ptQChCvhWz4Igs/CZ6U1
kjRUACZs7Z/V8X555EVN0WB8xNnK68vUCIf3NEWbrU/cklszACPniVuyanorZ8O3SOkgluE3lNGk
lVFJZXzPUMbGlPy06ozaXdW2jQXo/uSn1fQ/cUtSzeWRuJZrNeX6rCFXJY7WyCqi1PYnnVKLlufz
lOcjhjwl0ea0cml846InRm9dN+uJ0bvWz3li9MPVlo1NWdn5sx+dBSX2nigH7045uhIDaV+ljKNr
E/tUUj1O5tTtug/32d0NNXtbo/IQUdlzu4Enu/FS5PSyIimYrvyVQsbR1cr3Dh69p0m1EI36mc6T
zv9D4nnSQgrtnI8X2KEHU0hXFq6kCJaghxGoeEXqKjpVg1M+NCrwLGwDj1zoEk8VhfGySfjng39Z
ysAgj4NdHWJHFT87wI4p7ap5GAdASJkbZJP4RUpqkOw3d7EytpQudPaFaCCRkcZCYiv/OcgO6O+q
eV75buHEBA8NUFVjL4mkA4wqk5VdbEhoZ6Xx+F7GdnbIDv0yulO7RLlzjCY7Wcyw6gC/mzCLbrT2
Is38cLGy7V21+p66CT7pgItYvlh2LK06BVsQS62boMgjNXPwlGSR4mdBlkuUjy/loTBrZoeV69gP
nAC7715pN42cNS+oR/92vDyU4I/u2DSc+Pt84m864WSR5uKsMU0ps+/m7pIbTEnq+yS6t8aPtb8E
HeRZNRmRH3/vNhCYv76J1IR+g/WO/POJ9Oxjib+zEn9jcULNPF6NIpAYywTjpdg7Vo0n5v/5pN9J
ExcqD3CylqSsVl5uYvodr0/6XZu0NOH3nkm/3078TfMFNQ4+Y1C5Qll8B4uvnHKv8Vpv7Y9dMp+V
vBTPF/72kxMT4iHUb401l0X82ptbQdCkKDkF6vlCikMUowOGofRYyBELakF2aN4nektKtSvyWS3/
45VfhvxnP6UeZWui2+7lk+MT8CUhvL2av7r6isgjav7IBlRta6CI30wqYlyZXATFUxgqeNxbnR/d
NRIduvnRxbbtT/ifvg1vEc2Gjx3oYTbRtRdN0aEHAUBD1dX2m9F4r8ZZmR34rYmO4+E9hybIkgr/
roV/i+BfkmD4036YhPfzl5wM9TNh7a6vXh5VUqJD+Y+GoHbvstq9DR/S7elFSv3bKCnNTVJRerHS
SwfQzVTXhVhXB9W1ZoF0KzDgjhQCZxPls78zPoEx7X4EBW2Ff+3w781/tc6T8MLPj7K4FxRfLlU6
oFzDoglAHdaNT0zEUsi/Wm7Gs6ogEG3flmMF6fdKcpN+/vSTkWYNHmkNBRa823zXzVwmPX41lHkI
Q5bSfeIZEfdVARjcfja4w8ofeIhilC8unA+45ndGf8zJJgKy2ESA24yXIDzj9dGEwFaKZVFUFhIP
RXBaBaUvqIAsEo7kj+FCfSnFznXxaDQ/p5DzLhDNC+65Gwp2Mtf3P55H88BFri+0N8wjbrvK2YzQ
GW2+pmYRehwsqEYJxn+nm9Zwe4C9+x5tZmim9NXKGkP6D2szRGfYDBGmv9KQPoLoUD5lyIKWI5vM
OqNNDdVcqmcpVn52mOwl6Uw3WqxsguwMmyDD6aG6vzJ7XEu/YG4ShcVMx8P6P0nC67qqL6EA/RR8
J5vNNEwc6cW7s7xFFHOFPSxW/l0N6f/45ZVfiASw/yOVXwGtf+hWtBLO2xHQzt5VLPpaufLpDlNS
uXRGeYte2AE6uWHlhsM8VIY0hLZ19VxJYGeFn2V3yceWhJV+umfXTDERai6pfIzRmkO0Pncrsx4p
1NLn/aSd8SI0NzgTP1hKWPYVKSF8scmbZ2b3J7Db5VG9ff83xp5HlZ+peE6MYzZLzITmSfSNZBix
yTWXs3iv84uV/36DBjU7U0xBnfgE7szn4yOlwlI6Iv+HH1JvNr2sxxfi7xTXL6nrEuaLDfrGUqxs
pChomr7JMk/RF0k111V+OvJ8CrDHovzqZmq+I062Lb8lJWZCUzyZJGdinbX2/+dbF27/wyf++fa/
bebtf9bYfv39y7PY++/q73fkpSydZE84aU0CY/FgWuu1+gx+GouYjKIs8jzQIniHlT0/J2/BGwaX
5BmasrBrU+1s/Wn7ViEpHD0wodxxDQ+yYab4xPfeSdFZqTAWyItm5pT3nlEDNePQdlNQIjzGjXID
b9j4DqMincE3Rcq11zCTqnny6tHLL1feHtmDHeVWkvMNwQAqC9njWyPbUVfaldpbVGUdTyJtHTSj
uqbAAHG/w0x962RvXAYiWnyAyi+xEq9sKHCicPbkqcJ5mRYloG8vC1JTYGG/n9rFf6ez34//jfq8
YTn4ZJ/EOD3usLIkgN7duXwW/JlHFFYL/CEvEE/NK5952ZRk1CBm1CAs/pOOd56fVyBDrYCZhWNS
uuABWjQYbeTbjbECy71S4+T71sxS0IUbFbqTwDnDKbvIH1A1sdaDsBi+gfYZ5dLGpgpvNniAWVKB
qxwcIFdZSGn5C4/QXTMXrf3ykjKA0CX00BH5s6GkNOW3N7BYV4YVvB2bLIn23M5JvytmT3o/6XdS
WuLvlZN+V0/6HbAm/kalo5z8hQAtF09JHdInzUt2h8spcngV+ABVuI+sEAbtjT5bbQA/I2Zb7ZIU
vOLLsmS3rdbO31nwkeXGz1tstWOz4KvfjG/7Z2EOeIa7RaQSi5QMUilkKYOB2I/mHyqRJWMYk6/G
HRlHt/xlqF+lEHmWwfgvFJHW0f0DMxHEWExq/t9jfjaQ0ZGsSY2YMcLoixgU11Kk/AeZiuabv4sb
peo8uD2qxCw9ZJZSbv52Ms3HutZ7Ig6Bk6SIPyrVpZwqhipV1qJgU8DXcUcuVVPDOONJXTzpsEB3
iISUyzjdXwKRmkcJmZDzWi3nw2rOEzexnDgjGVK2rTXRjR8Y1GZwvatuYr0zXKbcwnxmnBz7HiQr
78bRHfmoVumYodLf4uV9Cd7e/CuMAFd3EvX2ekvdBNTgtqk1uJ/nuBnrfoO01LLkDL8ybIV5iWz7
Orurdcme9evrdq1fC9X57TtadWZjHltRmfK0/uxcMs0TFZcpX9Uf0qUpSy2hMuVB/eG+ZIyyWqbc
qz9ClSDxa9Yrk/CmzM+cNSV144W2kaDW4FpDg5+7kVV/PeS8+RfIbnekTGvlejXZWp6sHNF111Qu
3MXffxyL+Q6hxYWNAxj5zdR5D0zNdDXPlEwNCSkfw+5TsCmIky9oGeaoGd5l4rO7FQhEH0sHIt/F
KE6PmZNstQ14qZ5yFTMQjOhcOy06f8GL+irOMeEFzMrX+lhkL4w37Y7ENOp2NcsjPEsJzmt+2hL9
siWpepVUkM+kZuTjTN3A8LwNrIbIt9QCipRnP8YDjMQK8mvmRr6tD4BujICEWZaBhy7dbikuAvn/
cyFJLQUvq13uj34Fw/M8jWQ/SXO8OJsWXWOBh1j9sLL1jyzCuplie4Os+RkVmw5l2LZbom+OgzD9
3nYTZpfskt9SmVSMEc+PvMjXjcHz/7Xe3l6cbXRIJXaQDz9Zw0q2UMkOSLhN75beXLzD01Y3iFPO
j2MnnErCu5afPTbO4q3LJhyJ8vqHIy9qudaq7LyWGOYIK19kkc9oRrfCa8eVKwy89M6xcRaxpnp2
udLJf1BYt/3sB935XT0Hl6eKlTv/yELg0d1VaMZId2OI9hvYtNLTLAfdzgfqpaQcGPK13eqy+1OR
V/XWd1ewOFz2UImy5VEWGs5S9xpmrWmKHNBb3y3i6ssf4UH3VfjtRzrAu5344GHtwQNqm8UbGITs
+D469X0mf38G3LbIUPKUETPwMfb+FXzfN/X9Yf7++fGEAJDcvlwUeVcjuS7yQ5blxx9TbRzJUrc3
XFMAAxbsd1xbVQKvsiGBvuoVkXEt86Nq5n9TM9/bhBcXeOlCHwvue8BrCfKloFl5Y4jHKLoiMtus
jylewFWGAgDIb/23oYDk6ssiDrPeRp6lL1fLYmgf2bPlEVTMIbyzdu+3tEsHaq6LeLViaiLfZMX8
HIqh5IDX/6JxgJd6hsuVg+PMtjWTHFis5XxczfnFXHVmlV1WagdUar7Tc8x4iom87FupbAsGO9Iv
hOD273NCUuR5SKWG81ZW/YR5ZLtiZi/wK6zRvpWCagLtfpE3/k4tXiYVESqiiJzKoW9yUGMJH4lU
GDjOS3heZGHmWDbluZ/ytt/JNurgJQ0p0seh7TnKkXd517kjn5talQdYVbo/RBHqqpNjH8cuIKno
0WzRb/2VjW2ciLzNElIe4q5lgZkuK5obWaPXsJsC+aFbMjc2H30vjObJgvehybKcyS609M93jasC
NR3K+JpWhtAd5WVEvwySiS5z1uzaz73A6hI2Fytrt6mcLrCAUHtGr0VvgKpwezr4fdJs2/abUI9C
nlD0nfHi2HqH8qM/qouiuZH/MuRLj3xd+/WYyqTbrudCrptNbIvvsbtAqjM4/6/cQvi4L8FNofsK
AFUPRpckVVdN6pcrlJsHeL9kRPyztH7p9fFeoDmG5eaSIuXt81zx1FwZ+fQsHQrfYJX7aY5hsxXb
YRXJ05J9Uk22PodjTrO3NX81+uDEhf3V1RPvx1/dsTl9sr+p+6f4Dn3Owa9P9d/ZO6XiB4n+O9aP
vVPkn0wXzxbnN/EqJEs0bxZNWEoJNVLfV1/dEKAIe0raj2hZLJ1u4sV5OXRT0nEl5lYz7tmwxOzk
j2JAU3jycuIfu++r+VkhqSws7irH6wpwVsmneNrGJ0qUX+P/pTPKT+lzSHkWP+n9f/BveUqMf8tV
Hm8b164CfLhtnK132Go/xK7EKsUbThTr0XHmUaeDb8FeOCpNIeXfOscn0GS8u5M0dKSoXFndgUU4
sYiTLDRlRXFYuatDsylfMWmB6VDd12SAjBx9jb9ed7uUSlFvV5hxAhB3/WL01KXIqDxaNVphLwED
JHrChFH6s60toejeFIyPG1Sao3wSy1ZbZWIWBB4zYgc56NRNBqTLx8VNvLmvwEJRd5fjzshCuqMr
bI+eGI++YbLivl93SbQlpRzD/ENqDMzrRknxrW9xh5ttCyPDBl6VFEmni6VBPPhSpvxwjVaPt/ma
eaisTPnuM3zw2Gr3s8cu1bQePIqVxUuV8RoIfkGUy1aHVzHU7ZJ6HlsIJVeUgVH55NNaIfVJFAwe
XoDoM9V8RsqI3miquYsuRS9Fa7ZmEWR4rpNz9jGklF5WrBxspye9iLv0knJwlhue5BWuRpGbjtFX
fYrv1XGU6z4WBxivg4rUoYHwPAyDyioKTFkpKL//MItxvM5biitSpDPWHxlnK1J/Ozy5CBW/dL91
ytO0QcAnErBoIT7g9b7nt5tLbHXfBLnx3q14E93X4BstDeaBiXkbFBlWXsb/0425jfgNIP4n/iRL
eZ6eHFV+Tp+K8mP+Jlf5zmECN0YABKYCeGy142a8Lw4Aft0RDnAXeMVsatGJAH+ynYDtws1Qj+D3
Um+guFyR2jSQ/5mlzsO+BNHxYJsG9OfMLGBq/DYd7HapMVSupKujYR1Og9nDReXlimWDhpoILxJF
BiA4lxD8dbzHQLK/l2xiS9sh5auHmW9CZxCfut+kGs0SOkp4qVm1un9YfK2kXFmgIqHmXtynC+py
/SIp5b0kUzVePJdXFA4rb39HQ9fbeINeWGl08B0ettpD8ASKeUWte/Uf615bn1kCVW+Yr92Rh2Y/
thkoFis/VZPWPIAUwa1af4X0qSSdJIyKB3WSD0JeeLJCJ3kfLw3KulMjuw3ILqDglKGQMk8nfb1A
F5jYoY5b2zX+lkEj5ug05lAjynvnh4HSuW9rz9FLLi8pURr1pCeSOUPr/gIWXPfH1J+1izGtYjk0
zu6Nd4D90Er0ljTXXFtpKlHuOKJh4FnuQJeDU978XSq7+yQ5NXsgD+61iO4yITyzlT/wQvBO5rrf
sY0l7vJi5al5Gj9WMNGLl3ztVXH2mBtJdr6qkbwOqxcuU8oZud61NKEODwq+q7UtJVktvkSZ0B/3
4fa4sPIFrew5lcklynpWdm9OpVCiPKgTkiF1ObDxNONZ71xczQc/sKxE+fcGTUwyN9McHTLRreS4
6WbMVofRvyXrjXgR/FdgWOC1njj6ncWhbtwXB6lrqiRr9MbkmvmUwE5eWVh5ci4xo/ffMMUyTGGu
cVKKeZiiMhnSvDiPbTT5BKa5hsyXsNJxSJ8lwRpZpbmQNEpXXll6HRILbO0MFUH7ux7ShmIX6wdH
McCoTcdGM7MKc2kiG4baYAcJcFTk1WwXoa2uA0zTur2PXSaxUMp5IVAfTTriolw1wCBH4W1hwnsN
Cm8kGF2bniT11+A9w3lQfa1/H0O7wBUuIvxh1fEO5nwugFzFIXjz4jpVnF+FKyigUry9WZFekya8
K78IknvoWlVyZ6Pkpi07Lx0c57sG8ouUaw8YpTe7pL2UTbYWhYqVNYMs4i5/bimjbfl1E1KPrXYX
tI1dKVXgaEgfWrLnYXO0wGmS4rJyuanAKRVU1O0qiS13VFdGJ/wNX3Q9fFVDel502P/wpeXFglKm
vP5d2u1iWl9x97338e0kf/bDx+KjJcUNDl+x8idIUWkqCytXHjchG7Mr/Q3pApgiqOEXj8YLKsgB
+j4kw1vWoy95peNyb0r1vBLIc+qYKUl+KwVjyvYuHgUrd255bH1FWbTZFVY+w0jrdMl+ZmcOpPsq
Gh51NZvFJ1CcjeY94t5BlWoKVSYJx0qUxVSpMF5Tv/EY7dr6I258WbyviL23wnvb9vLL6sN5tu1L
L40259UXmGzbVyzEXYvL4Vs5niepD8O3pQvwG72dr729BHfvwY/58B5PG9WnVJqipz8B9tNlQK7S
Dx5vfClr+I+/I+BluWgwtco9znoMuI7f7No3S729PmgCOwtPfrBHMySDb/UWaYVlUirgqZpQSxua
wJTpFy6PyNovRPY+SncvJJzmsjJuT4t740kmz6ceiPvNsV/t74v7LeOv/+l7cX/6I6XX2+N++5k3
DzXFgo5Y0BkLVkyzPob5j/5wlgz5U4+suwHyL+hanQ35b7wzYxDy51h3TcT9jrmXrIzE/c6fPTW8
Ku53bVkx8mIs6I4FvbEgPK5CO2b69TIq/4GTsyuh/LrfPPBnKP+hgS/mQ/k3nVvxUyj/8eKMIih/
U2TW01D+rzqiV0D5C/e/cbexfPf05e94guz/bwJUd9JFCri3mSaGa71oFtpqO+xsozM/v7TMLFXa
pZukhxzSXRjDPt+2PVs+6cQ+2ErbZPGSWre0DM/YOaRl6VIxio2AbbtdPmG39ouHNq42sQ7Diwsr
vH7ccQVfrf227aFxaz8FZ6v2hqQjcuOl0jm5+RKxDT9SxTbcoCidG2zzDIDkyPd0iQNCPx2x2zz/
ex/deJvQQjef4Xaofk+7OAjDtGmR1CfvzhS78CNN7LJtj0wIFUQgzwMaE+8mEvtZ3eS/Oa09avWE
ATwiaO2Br/CWPgFVUKEOuekS8TB+pOLH4GEPVAVXUgRmbpeCjPB5usUuoRNq4m/YnPnNwMcfRMEu
9FD1jmGl2uTGTLETP9LETqwQSnVPm4gHLXfhfWUB4bBtO5rwWcCVCfktqKDTelh8beManXme/Wje
WyHhygnrYTL3MZo98a2LVbOLqkl866Kq+sQOFMlUuayGTdaDo7teMGF/deJlF1i1FlnOhETwkSZ2
UNVaxIOeA8DQFqiKSdgHCbNt2y3IsTed1haoSGKfav9ZMcN5awvdhV3orUDjIZGJnm69flgvH9XR
y5mXDfX76WsvdENnZwnDWIrUI+/mNexmNewW8ELKfWKLpxPh4zkg7hP2Qy+PGTsU54dd1h7qSOwq
7Mx2rMdxVo/jWi3g7f0YE97TJx2nujikYV4bL3Tl3Y3hGwFyuEbYDTWR45linzQsx9PEPqEHuSON
ejrEYc86bxbQF0eFMdt2xHYCtLi0OobqHSsVmrD2IBIuZZU5xpB1DODpoiq4hSPiMdCAWVQNB1Tj
7Nyzdwr9tHyHnCOYtxOi4NmqGEZDaNeQRcgV2z3o+3Z7+sQjiKzIBB2SmYp7tXK8B7F6Y4xpehXh
VwQP9npO88pS/x2jyroQDoxhbqjplic/8S0THrFlA9PBOrBTbsoUe/EjTeylDjwudno66KLr4x7M
G4BCj2A34m4d7NiE7jR0JcLE0y91IpObLoUnVUjiEhjw8JEKNUEA96DtMnjEg4eRoXqnhd6Gzdcd
udf1K4PE6JT6gY1ycybwul9uTiOWO6TTnn4RqWE5wLzTtu2rJ0DaTRZlQi+CAsdkB8mxCU2OrWaI
P8vk2Fldjp0FOQY9hQ4yl2NOlGO/TD2KezuFEapZG15ODuj1ikc856C0XJSEi3BYZ4oDKNHOCWga
9UDT0PoXq+jMSR5WeKaqYvd2eI7jwu+kqlazQTHIqjqoV3WQqorN4zXNatg233R3FO1kh9CG2bFK
i7ByyL9zxD9iPcrZc4g3ESoPPSgMgFgDcWbtNcgyxKK1F15Ye/ma9BqsJeDj0ul6E3qyWzroacG+
BwHQ27DpuhfrcrwoxkhIkIQ9wMQYk7DY/5T3AAiKQkIB9Cz2q4jCYgIqhmwyjgJhn4p/HJ64Z4zV
bN2FqtWHpp1nBLfZivjdRUhreiy9TBiROkhCw0OsXitTAK0Jw7RNbPXgYebToD/0YeqbeZgeTxym
1H/qELXHtnpRt6viTB+pXLIZ5Fr1PS8+BMPUyUeDb6Zh2gHD9BgN046EYTqOjgEpKr2e2brypBPa
nVzy4jDdyiyMaZjoaadx6kas9RC8kIPjvzv2BAg8VjsvjNURHKsgfY/DN5C+xykuTZ9nRB+r3WKf
bfsaqtA7TuvI5LGKEPAcs45Q/45QMJ+dZO+QmJPG5fglYjt+pIrtxLTxwXYPhriCgQZyfYTJtwU/
S3n9aayW0IJqdxGGPPB0SWNYtXb8SOO5cQSPQX7oSx9mR10BVZtBNXTgjVyr5ixN0vDXqqkHZnho
BsdWstm4HcKQw7rVhd169mnZVMqupZ+sKbiGIBbjyiYqCC9TD7gz8k94ApRuc+yMvmVrqHgmhKaa
dBmuNTbcNQbPoo0T0RPqm6B0WUPp5pDUS1c6HpZ70+TdNrlxjtgDAELKAKKFcmMGEbTLPQJ9yRJ6
o41DUIpQtRk32eebriP0TR1hhLlOaOQx0GE9hLwu4TDKXKHkPBqDQqZ0HBjihOZ6OU5coA4rwJcF
jQKfuYCaHkQNWoNq0/M8avPB8KLycHuos6HEhE2DBqElJs3DAhtKxvVnhdI8rKQNSuyBls4Ru1jD
sLbUzB61mT3UzK5o4zA2s4Ka6TddymA8pZlkO/bgKUGJNCg0uENraCYGuKD/O4U2EyrTXhylAyhz
T+NHGnyAvBWIpmcAJW60MVk4p9c7j7WF3Px/ugUjegsC1ALH9C3wUgtyqQW53OjUOssMHwFoxDGh
VVVxOG5IWrfiR5rYSiMGj2R0TMJ0VrRR0BuTqzXGD43ZpzZn9xwMpQV93JN2wSZFG0ehVVqT8qBJ
82gyH6c7DdahJju53PTqjbFIHQLmOA3/B5vfxGZI7DhaF6HspNGaptpHrDl6U8x6U/xaUxBtFTgE
EKw2aAw2Y+a+EbpYWef1huRiQzBiGYkrLPEwNqYXe+mI1MtkP/bVEfE4NGQdNITibfkETIuDyCt1
a8qgXWvKca0pwJEO8bjnmN6UWVOGi0RgkxAJBHTb+4FZUOgSLuUDBJuAVQgmVp8qLvWipckUBWim
I6w37Ch9BczRK+CwZvriMDYAxjzlTQPxhg/7PKNiL6oIgUMhRW9AUGsAAAzViw1lvjZOxsSRmRtQ
KIwJN9H4uAnyVlEDCqfRKKo28ZwWx4R21gcOAfPDoNeMUoc0AmTiVP0xJJgGqXHSs9fTKaLJ52OV
T4XKS1B5sdcwHjqFsfc9vPM534N8DBTO7Oqqw5GPACcBBqvtMrE99fYZVUwUlJpb6hH7PCgj2tVR
aBG6GionomN+gIqLHN5N9cMTE9Jm72bUbNeBur7LLByX1lpid6H0cAij2NGxtRZpbTp998XWpktr
7cJobK1dWusQhqVlTuEABYxc5pSWuYQDUXaANyl2XWytI7bMZav7WB+Gtbrn7g0vPZE4JXKB+Ue3
Nv/oVecfvVJBhOYf3Xz+0Td5/rEiyucfIzPNP94U5fOPD55mJ/Unzz/SnSbKwuh08483Q54p84+R
smizL6y8+eS084/UmHsj5Q3rfc3mJdPNPx4vUX71JFaqPCy+pnSeovA0hvlHeC89ifOP4Wvry8HZ
KLgmGs+rXwrG3vKro3FT/QqM/uPFbxgHqMCD3+jtVdrbKzFsC/xYAO/d+CW10hTt+0R5WPl3IIfz
j+Vqw91ASiqognZHh1y22jW4ODXkri57JIXtDhAnfnEeV7W+ujqZnypOf3HKXKDUiraWPgW5vAqI
yt3J8GvJ8EP7eSyKu5ukDJpIN0wohsa1UkLjhqnJ5QmznaEJPZX6VU1oeb8J38dk5/ILTnYaG+jg
Tb5QYc6Ewnit2JNJ7HJ1n6VV7/+vuTOl1U4jc+jdZJIacGaYD77n2T/vi/stbFo4/boP/eCzcb+d
zQ477jLd+c2438kmiV1H//7RS+J+N5sr9j5wjfhA3O9jU8ZZX1u27etxfzabOc6d85H01+L+PJxA
jvvzLw++sDQW9MeCgVgwGAsWxuoxtkj8iVfh/9lT53zV+ln27hyA+rFpZcuSn7XUQv3Y7LJ98dDm
cagfm2R2nr3h8vugfmyu2d365MlfQ/3YlLPviqpbFkP92Mxz9r//5dZRqB+bgM778pXrM6F+bB56
+vr5p6nfXOlWs63Ftke9LxIv+1Ou+YqQNDhryEEXv5ulTd5CFpIjSNt5H/ZhqBdb7SM+nKmONtrD
oEcqytn9rCFztNskrXZLa7yxTd4KzGehLRp0529ICtpJ44Xwtt88KeikLRohB85ySkEf+TMhPD7g
k4LZZHWGsmiCO5hH7lEoF/dagLl6P/rAUig/KmNsDz8Yobjbw6Usxgi0m70YqUfcK7VJx21bDi+w
7pNPLIjVerehUtoExifU6pjUZ9vaOw81y2xro3jIelg+NQ9M4jczrPtzWBqxkafKEPda94FhcWKe
fCrDegT9BlGWeKIWpDJ4yMMcCHRJ0S/IEjFZyDMoHhMaM/cJjDi8yM7cRLUTWKTb0kwwvWdd9Rtf
+4ZWnFWnafwjwpm5hXTOOii2QmueYGuZheBiPcN8+S6av1uDBZC/tQ7shrfM8Jbute2wbT3skntc
szez35j1lLVX6rRtaVkETuz3kDunrD05bAkBKhqU31wk9yZbO3KeobdAGswS25buhXJPqviatQNa
i8/lvy2E9rMJBTAs8qH1jIZY5V0HZsszVFfgQh70SrYIVRT2ZR4R9mRiMBvec1F5iLrqiTHoqlrv
TuyUzRRAhw5hHwKfE4+HyNIx25auBdYj8lsLsI+axNcgGV1xe9q2df88K3o/uWKT3D0PuybD2prD
XkO/H8NOgy4Dxwh6jPqKMmIXUv/5xRbPaequLOg+cONE1oU+6jYX77KdjHnOTBbfR8CzRiPQYd5Z
+/9Xn2dDK641UFfly++YYzsppoU0Ytva5wKWHacY3c94Mf4LwrB9kXzKNXsrJZJPELdp5iCHJYH+
6MvZyovABRO5LxVtWtuWnoVQWqfEYIAzVtAJ4EGvsY5JLD30f5XES0GqVWKftJN1EVRBXOddJ3Rm
9glHM7tp4FTQ7JpXSTpPQ4XfDpwvdUJnvMTGTaM0btsyiuPmnQXia8j9ODL9CGN6PjC9Zx4Y1+9k
WEfEg4zb4oR1FHitszhbxCnDfDEO42EcI1SQEe6XOj39xPgAGPfHhDgxGskCk/cwJvuAxVmzPrrk
jr/j9rgNrbRqEgDhUU1Tjg5geCmehIRiAenHXXKvS2qW3zAjRKRu25Zzi6xdIh7hd8OwbpdPLpKG
5b5k6zh4AvC2ayFUdUx+a6F0VoxjkGH5dKp1QEQUBKVuwHGhB8AP4HZJx8VjaIR7xkXiHHpwmbvR
pcnEoJGyhQ624talF0YoRkBpjIWagnaHQHSMIA+BqS/jo2ZgJWNkj23ruXkkUUbk0/OAvcDGcawx
sLJfxEtyS+WT4FIQhkfFOMqcc/A0T0Qru9TTwyf/cyX0jfI9bWInsTYbA2aDz8JYSkTHgamvMKb6
gamBWTtfi23Y0IrLPMDQIDITWTwXRztu2mvWGDodO30zsxMnIoiljJnEV2KpT2ciHvgSu5GxnrPi
cfG0ykxkLWMo6gY/7u1TVg0TQwuBe68y+XCU8TWIo5txlqMTOKuzlfBZCPg8jc4kMlY8CCw18lLq
B+4SQ0PE0EJgKDKylJiIy4JjEq5G+Nlio9jJGfqqytCjjKHZwNDcWXkvBAc2tOJKlSlA+0dUhroo
hCmxE9lGAEWgDlubgHuTOOsHrk5haNYkhvqIoX5ioZez1U1szfKcZfjUmcoY6qSAq7iFLnOIh+w9
Brx8g8s14O7rhE3GUGQnwBLqpvPSRcw1MpQxk2EVhvxJ0onnxDgx0wWsPEaMDBH7SkFeBT3AZHFE
G+yv64rwDcbKPOArCNFZC1+ZtX1DK663mQJsqHNmemnLzoXRmX1BdAYmMdNPzMwmZmZxZvqImYGZ
mInn2HEna77S/B4x0wusVBgr3dhuPtzfZsNdmc34GZ/EUe/7RKeTGOrl6HR52oitQemYOEasLSS1
paLzbRWdCmNpCBhaOuvpFQt/u6GVlgXZwXyVoVm4LH0BhgIrial5OkM5O9uBi28tBEYCYwesY2Ib
sTNbOk4RiVAjIysZSgPE0NyZGIrmHl4nX6rUnCOGZuHgBg7+nQ35M4y3PhWfCepIZ2jWTAxF1R/X
GeomhmZxhno9bTTMQ8RWJ1tOBZWkMvTvTCWdYewMAjsLZzk3fKFzQysuZQI7/bR3m6mjAFQRldL4
BREauiBC8ychNI8QGiJG5nKEZhND82diKFrMQahWoeJ9lxgaoOE+xPjo1xTSuzMoJOCtykhkbADq
SEpJ6hQngIsaV4mdPmJnAPQ7Y2gWMdJN8hM3ZiBzs/kcbidNNzLGEnFgBjB3SLWD13kLyQ6+LVn4
T7CDf5l6FBnLreB9YgsY7WQD7xcPwleygPd5cKfDGmm/5yA2YAydhnVSC5hKXXKfS37TbD1Icamf
8aJLwwwwtLEMpldhDnspYvThIHJHM7XwMRhgaO6OQT/tJPLiPlQQEjPB0b4l/bDOuwbs3HVCO7Tu
lcxCWvuhOyqYrZunfK+f7Kwktqc+FzCOltZ5GrBGPdZoMLFyVbE7xc5CUIPcTTBlqVjVzgqAfYU9
4aMlASf1BtvakEWr7Hm8H6gCndALWDE0bcmwffFLqz+1oRVXm5lhCyRd5JO0AATeNIMJax1F6xSs
3XwTCzHIeGvdr3IWuJpv4tHVcAoemI687Vwo7keWvrUQas+SoA9isGvBeDWYrWDhoukq7gfj9SAY
r4V0+4c7xrQBcNav3HKWOGsxGSxYM/7g9quu0AzG6xTOcvv1oNRGCk138rJBqZENC3xlJhazCQLk
4eWKY55+TakRWbBPgZ8Wxk8fKbWsWZt+//byDa20ZA5i2SCDmQ37P2rBBjULdqBPs2DtJm7B6iot
3XRBlVb6PlWabsFyy5XbrapKyyULVpXARBRVmt1ksGBPbJs4sqEVF/n/SQtWVWm+aVXaaQLmADKW
GOlmJhdIMdTYx2ktidmudFbEM0zsPCb2JTI0pFmwPznNLFiu0hwmUmlOxtvgP1BpM1qwk1TaJAuW
qzQ/s2S5/aqrNKwDsNNpMtivX4p9pX9DK+1ICFCcfFWlASCh6rjCRBafzlLrQer7ROMVqkr4RFkM
LEVs9jNUcluWKupjphf0NzLUTasqXmJolmeEmLkPmFnImElTQjTQV5IFW3TKYMG6TZoF6zLpFiyO
dmAo12iMrcyMncmC5fbrqNGCRZuV2bC0LwxsV2bLaoPdZdIsWLcpwYL93XfmL9nQihso/nULVkWn
wS7gtiwzuQzuQBZnqY+YGZgJnfdrFqz578yCJWx6GTZ9jKdu6PYLo/NftmDJcuVWrIZOrzrcfSaD
BfuxefGrN7Tixo9pLVhiJyAVPSxipcpa4OHJReRokW+NQ/8s2rOMqcyC1RiaazC4mEsQ4Az1E0Nz
Z2JoRLNg/7uHWbCEzmzGSV+M3U51If8qa0b/irR8PzBUt18ZQrMAobia52WWq7oVEA0vjZlZDKFo
ZGUzdgYJoYWzNl/z+YMw4HGvymQbFlUSaiENpO/XggV2qkas0YINEUPzOCuziZX5zJ71DBuZGQ94
q49mLE2iYc9N2B20JSbgXS3taVg91rBmOLprIvqGLfqmrWHzyzSXmgacxoOpUrG5ofalbWwHTUX0
pE3a/C79YrFfG7bRL6kxts37PH55xIzmgJIJ0DgKOVbF2E5smnWLSM22LW2CcEhWLhcOCYesGPN6
lXhUCngjtq2NKfKpTPmdOaAjTllPy0qK2Ak8H4KXFZJCs3DAuV6L+J51QGqVOoCxK21bZZN8wimf
srQq1iOQDfXwSvmtK6xYZgW8TpWVVPGceFh8Raqlioho3VcJBzJHWJOFTdS4zJ0v4byxxFplspBF
D+be3DVmaYTmPNURK/VAK0gAMjOeQ4zwxdAFaCNhneDCk03PIBZQbfoEJ4nPbyPM4F01Qe02vESu
NHPZeYmFDxaSM5eZyaZvR4veFKD5BxVjNKUNw1WGviGDHjpafCXGt8C3eVqhP9ZI7Z5X4HOd1Cq+
B0A7YZaOqng8bB0ERCq2LfsXyW8iKHFhPCgNIRqHxUFpj23L0YVyN+nyfcBH5iuANZQvTojgH1iH
JEbYAyIbhELAu0Y4k9mKuzpxhlrEDYAYtnN1wzITIE2qJaQ1bKKPaOM4OB+0TH477iahTdabXqUU
m+kDGrKVAVLqwDHemwlpVpHB7JTOQtkRmoIXhL2Io5NzhL3Wc/C993LABW7IjtDmvVW2rS0p4qh4
Tu5OAd6tFEcIERUxnNmdkLqRHb0WtAUs0iv4Yw8iDOfJr2jtpnJWQnkKwkscQ4CJKL2qxMMINBVk
wsHMfgO2tqnY+gZha+5qPMCME4q50P8HpCEuvoD1iKtDuDee+ynds8Eg2Ifia4iJr6MkvtqlM3xG
WBVffhBpbVTiEPNPPFjFABdfWZ5mwBWOiWqo2mHBkhkyC7jww6oEveOlZyZcNgrQVg/H3FKKQeuS
jhKzXSQxz4CLglxuXCSfNINWBxdDfmORSPoI3ZOjdHz3FdsWZaE4yhY3juqgoLl1QAUM1RF+MsOD
e9sGwB1ZJ+BIX53Zr0J9OBPvuwsmT0EK9HoVYIQAkmZEQzVdHugGux0MjzkAAsAG9DCiBNEBfOL4
IFQAPAgVgIVTBmScE0cAGQwT0PRuRAPfTkkcUDFxyjITLAgUYwCLTZQLcXE4ARm4nwjXdjWASCM6
RDYz8dODIKmGHiDBwyXOXqPJoC0W/APLi1ytAzSx0QOKAwVPLgoe5mwxx4uJHD67fZslc1k637Ki
ChxaNJjiYfHrf0Aan0WudJLpBbgYUMUIyJAB8rMmrCMgUqRX5J5kayu+Y2ptRNoD8gSEySGABI4j
t9hPBjxuzsUNOgr5WwHmb3laxA5REUYzz+HOIYQH3hVJRwRQkzF91RAUpiJmE9NB04EGwIGAAagk
ChD438k5XIBwoCTARAMJ4GdEAwrATXrFCBdVgABerEdau1WMoIoi0KgqaowwAs3QcEMyZNfoVDES
8FYxGVJNFoUymzwJzaEkjIBGuoALyYAyRT9pDiSHSb4GE7a6lJ0IE3vmMjzAWaVihDzIKW5jgGxJ
n44RxAJXMhwtKjJAWLRCdfcQZnw4DlPFQwwsNGPgJXC4mfoZpiPyCvnhnWw7oqcVfX6q5GrPHrFb
RUrDMjOChUN6OnR8YyZ0wNhAhOj4iOG031lECWGEo4QpGUKHKla4MBnVcTKiKpdJ4gRBw8QJYgXN
GINQmVakqMoG4MLlSTC66/z08mRTgjwpTDBlcHlH94qn2MoqUNTFx8mOsTY5WcqdjzwOl/xEI8aZ
ucwFzN9kkCfkHk+zpuMnpQVYAWBoIgXliY4aLlP8ujwBFW6ECa7sEFJ8qnRBrPgJK16OFTdhJQtR
wvCiY2UWYQVwPR1QNs8MlGywb1D/nmVWCUAFADPZHiG9I57CLjfaJGiPEGAMuqdbg4lqkhh1z1tX
kPqZ0SRJBEot2eaIFcFCS+4ABtUawY2ZDBwuo7LR3Kl/sFDFHalpF6oADLhAhQtVOI+CPssx2nLK
geHOXOblYlsFRh46+lO8exYWP/sfKppsAAUhZVpgBFRg+I3AyOaQ8BEkAgSTaYGRwoXIpmmFCDdK
1tHejHxud6ggEScYTECKkL4x6hqjtple1zBjVTVUDVLk+clGiaZnNP0yjVHyfIJRstUIDDcDxuZJ
wPCqwFAXNdj6Oi2uT5q3mKJedBNVm7Dg6sWlqZdCNnWRqF58mcuyJlkhNGkxZaaChSjIuyA4ABME
kDyj1GDQEA+hQkF85KqwQIxkEzjyEBwACZyrwBU3hEguggM+V4udRlskKqciKja/zATvy6rLzAE+
xeqI4XAw6pVSplc4Hi6ECEQDgGIavbKVI4IZIu/L+hDHGBgQGpT9Fe4Ea6jwZZLDUmWERBaDhD7p
0nyBSRejItFlhb5oqCkSrwYJF5t+SYREduayXKPFQeuG6kQL1DCEEy20noLW6Ss4X9DpQldJ6kY1
MgKosG3ZvQjnD8jcANfF2mV9hZARImHRrQmLfFVY5EkyMMjaRDMRIcDDUZpuQe2rTrfIokKmWyIe
wNnyR3dZpPaGNRPRCdqOH6umu1xX2zbV4gR2rRfv5DPhNvcQsNUUQm7nzw1iUK48UxD3bmTPDTlM
QSft4AclNjfkMgXdNHEM5s/ckNcUpI3zaDrPDWWZgtl0GqfQ65wbyjUF88iBYzsF54byNwS896Mr
VrfXVvd8u7ppHFfjmjCI07NbKUAIf6Lvr/4hbnIpb1gf0rZYr37kSjprr22xDpZRiAepXXxNmd9O
ETT+uDrJsMf62jLaY+2vL39cKvBLywOATEv90vVS2C8VwI9Ge335Y1I4IHdbpOV+29ZWZ/2KdbJi
h8RyjxNeQMV+51Z6wkJS/dKvYBHhwO98Sif9XmvbXlBQv/TLtu3Ll9avWAN0gvXlj0oFQWl5IaPz
iBQOSgWFjE6NFC4kOkFGp5roBIlOIRCpo0Ifxvzw26fU0O+HgMjy+qUPApEV1NT6FauV69pom7uT
hfPhm7ilr+Nuluhwtq32p7jBe9hfczLabP8rxmUrk5a/K4XP0Mk4uddZv3JCPScn99rrV47jp4U9
lTrgE8Y2Dh1nPYxh2sHLftvr1e3O8GsfZqi3S+Eh3NaLDTvPCndqBavfLPRNPmWHwp1SNy+AF6+V
vdJYMj/IB+XPp7LNWt15oafssqE+/0r9LWr90/+l+mNtnaxg+kq1x2p20/7sZne0z2Sre3h8YuIe
fa/8crM0//33yjAWP4pk+6hq7Pe/2Ko+1qphXgAvXit7hl4J26lwx+Ru6btgt/wzDXCqDXAlMohz
Z8JQPm+DXuL0FHjxzvqQSQq71eK9k5swhUVYNpCgEqRhVrzUqRJgxdP5ea141hwq3ic9kiW1advk
27QN8G20AZ6X2wYtHpdabVtHeHbsAvZAO09g29pvYR12n3z6AhFZMH4ihWhL5xfbNnwR1zPsttq9
aBEsD0jxP1ng2+CJEulev9CU2bqk9dGMh8xLmh62RAuCpmi4MCkGou6rKIDrdsXCgeo7/0xy96iw
e8now1dQDPeikNK0gh3MeRET3q1dRoqmfgkI9i3wGidrKk2LR8PSkTiVh3/CUSXSStK6l44jbZjA
0h9ySgfBECoKS4eV2+G1cDz6zuMg4RYfpzM5JWVKCaMXm0pvpvNGdu28kUM9b+SQClbSeSM7P2/k
nHze6O/L+XmjlTOdN2pZzs8bfebX08c7WonNVH6xfLrzRh/+9TTxjlaWRZudYeXB5ReKd7Sy4VHn
zPGOlizX4h21bJ0m3tFlyynekZ3FO5qrxTuap0U0ytTiHTm0eEeXaG/nG+IdLUiId3T3Vi3eEWv4
83eo8Y7q1ThFlklnSeRuJwYnMgOG9QMnMyQieTq5IEPAI54snZWlH0Ghb/dRKkgyYwCjfxi/KBa0
U+yileygBV18pLTdTvF+ELkIgXW22piTRfmxbc/mjrBUlE62eBFugr0/8Yi6bfsaFrBngsJLUIQC
J4aZgHeQTrrTLH3eoqWObmV+MztujzlGeI4RaS7Z4/shlbhPaBEOgLm3EuqQSE6WrUKh9355d9o0
RNF3RM6dEwfEs8KgUO29H/yEUtv2PEMhcnMGvKiQm9LwqkxOH+pBbeFVaQOLHg8fY2kCLtztMkFB
QQoj0GgTjshyGsaXEPdu9OlN04LdDNu2B0flN+305TyGxhnGqVZpHIzkdZgLjNzgxsi4MCbH04VR
uTlNwhAdY9azkH4CM57FqDqQDy+ZxBlaZMPejREVYl1ip3hcAKebEsIXJ89EwJGbZuEhS8pPm/Ub
08CbHBQHoNlZ2CAQKXKzRTgnx9NYwxzYsPffGIxPKu4TD0BH5EHuXMg9JuyX5VShBbgqUTyP8WmK
GrVtXzmMET/wy4j8lhM8LdxiMwyu9TjwJFeg4Azn5fhs+OVAvhwDvoxST4/xnsYAMNDVGMiGziBn
o1eAAU7wpC/GJADq0GQrdZJ1ACgRT4Cq/t1pHcDlDmTlWWBMv4DTcRiEBHjSPIf4E0+T+gA31lGC
hVbGqKGMUeoHDG6CJVEsKXBKIZPclCF0ANeRueClSRQDQ2NDjAVoQYbgIDjPBwE2EKHXLo2Razcu
jgITQsKwHLcBUJrTEAA4R+aExo5zhBg6HXsbOwZPHEmDYjULcDMg9AvnbNt9cnOKcJZB3p4YOkrv
nl5o23kKyAJfxrCFGIMlIPWJp8UqzCZUef0b10wI3UBzXN6dKuCyVTwNA5kgq/bJ79itB1EeSCyK
CYbbwI2OLmgMHlcOIJvWYZ7ZhPoYbmU6Jw4KZ4UBBGS11wXjGrjKTpRXeHPpvHWV19XwzOLvf/nJ
u+SmVHjqZjSdWDFPr9gn4PHndV53w86PUqJ4ioqeXkgAibDeFJkGl8S2fYQSETkng2uf5zRFNSnF
c8e4LVAjN4cGEmJBI8UWyXBKSyVnFTCSCw5isZeTw1ksjJTq0sjNBnJuI7lulD64upPQNgcSOw1J
GLEgRbbEq3FVYjZioEoMr44Ggj0UlFUllUoATmjZSgokgQE7VGLpQMyV2LJClAR0L7ORmDuxZVm0
XgxtSWiZA8n1QSJGLp+uMMBrKlVyVhJSCeQCiBs07DRyqej8J5ILIUbQBtLIzSGYJLQOL9XGSxlc
Ca1zEysHj1h1Vjo5TJ7r7fgi6zcGE0jEyHkNMKFERI5g0geJGLmAASaUqClFhYlOzmeACSOXqsJE
J1dogAkjh6rJzWixWDtGmDBiszWYaMSyDTBhxOZwmCBADARLOVAYMZsKFL1t+QagMHIZKlB0crkG
oDByFhUoOqmVBqDorHQkksszAEVnpZPRYsHUqugApQoURm6WChSdnA6UrYzc7nQBF7cGB9uApPUc
034aULYtwkRSFxstCJXBw9ZjoFQ7dZgs0Yk5QC5RjDHcLoSzdA6S+6VQ7dd3XvaUiu9mdRD08c51
cX5TouZ0VbMwudRL1dZhQoniGQSTJlUKMFTq+GbkbITvZnUQ9E3iNyOXQfxOIGcECiPH5ImBXI8B
3YzYbEJ3Qtt8hmHJiDHpnUDMb4AJIzabYNKkSoHTNCx1fDNyGYTvBHK5hmHJyM2iYWkg120ACSOW
QiBJYGTAgG5GzELoRmI4FDWCWXxQMmIpHCJcLjHg6tKEkWMwSSBnFIOYiLZ5kGxSh+Zgm5XZZT4g
tnys5BeQxM5Eqp1pOfdgu3WUrKOVQIoncbF+czGF7uDQrfBmASGexM2sQDcj5NQIFeqEgMlWDhGE
hUYoVyfkRDaOMTIudYRwIox5BIwqChrn1ojkcyKqtI5jEgxe59CIeHUibrSCGTAQDFprAnprHKw1
DtYau0aoVG+Nk40v1SDRCAV1QnYmF+2MkFsjlK0TcqkCjwg5NEIhrUVWDgYEgEYEDxe5dUIOlIic
bXZOpkMn4sTWdE2GAEY9qUqAQQqZ6LFtbDsapMXIfEB3tcQDlD2aDk8qpGPSoxakAj9WSR/HmHnS
l8zS43awofDZOlwkaNgmnpR+EgI0rsLBOqhDp4tEGWrj+0HmYSI2UCswkF9ij+TyeI8V0BYqjXpm
ttoWvV9WQjt4Aiey7NzkXikEZvEE1Ctjk/skXyfhQnnXNV2P8ARuVGXnJveJTyfhwOE5qT8qvH6d
hBOtryk9kqeTsKOiOJc4JId1Ai5DhzsScKVVEVRE1+TBWArKihLgKNydIZw2DsUxNko+zhM4UTWM
60Oxi0igVePQ+9aOg2CAKSs31409DTsX89cOJhUnqZc8g3rxtt5RwST+JPUSMqgXSsTVeYLEN5qr
lEhTL6RUdJK5XMEwcqlTFcxKg4Jh5NIvrGAYOctUBZNlUDB66yYpGKPdx8hZJyuYRIOVkUudrGK6
DQpGb5tLI0ZKhiw2rmD0tiUomB6DetFJTVIvPoN6YcRSLmyFMGK2qVZIqcEKYeTmTIVJ/hSYoNHD
jNVeCjkHzddBMnDL6i+ozkGcWWpctxpAQomobcwGIchOdsUoEZk8DCRkhzLbQQcJI2fVQKKRMxqr
jJwGEp1cwAASRi5FA4lGLs8AEkYODQMno6Uaq4UGkDByGRpINHIhA0wYuXSD0jGQVGHCyM1RYaK2
zggTRky3QjRiRiuEEcvQYKIR8hpgohOzJ7JypQEmjJwOE42czwATRi5VlSY6Of8UoMzSpYkqcozG
avcjX1hrMFZ16OYZgEKJ+ORXc+JI0YFCiXRzVR8ppQagMHJWFShGCacDhZEzmKuqyAkZgMLIZajS
RCVnNFcZMc1c1YkZvXadmCuxbVkGH5IR08xVlZgRJozYbF2aqBatESaMmGqoGoj5DTBhxFRTNUHk
6DBh5NJVmOhtyzXARO83dyI5rwaTrYzcbptQxWAygOAQBz04fYSbCgkmtzByFhUmAzS7hNN7Turc
UuwpC9V4d5o0Jo6gFie+w8AZxXnSFvGAeFAo9HqFfbKcLuzH+nSITJ37hC6pG9VHJw525gqXCj3o
aZ6W5TSpVdwn7oe8WcIBWZ4lHFRrcBYIZoPFBSjoZ3SH1elO7PZRyisdFFvYjCpStjDKx8UOMs7y
EVBgPjTNIdrA625NAbqwBim8BlK/OECBoANskncWGXrSKJ9gXUn9AMNoBOtxUNxPFINCiyzPAbJA
sV1spUjPhcJhNocaZ7XAwMQhAT3f1Sj3jwE1yBmBf1UUAqnQu0rAk8rVwkFunMZW4I0fFcJ+ir+3
JrYC70K7Xzgg7IutwB0a6yRm18KTluhOWhWgE16xFfbYAlvd4++wDRbRl6q1+9z+L98H8rL4j+4D
+aXI18daT04fj49dixETp1sfe/bkNPH4+H0gReL/+X0gl4na+thNJyfH44P3o9fT+piDrY9doq2P
6Td+LNDWx5za+ph+W8ilhvWxyxLWx/b9jcXj0+4D+cb1/4PrYxcuy/7PL6LtwMVkpfkjtNqbbttu
mXKZQdi2PZuuMsAg9PRlAift+cUH2XizOM7SYyhBa/9Gmp8/EAUrHvc3Wu6tvoz2E7Fb6h3F6mWY
NndSUu9CfnEbblVyhIqKG+ha9EVXsnue8Hamf8DhQlpUgC+YIkpbG3iYuuhL2GAKUZd4xeCOXFr/
+7CQ9NwbmbcniS/hhVG0HxDPEOBeMHZ5Gu65cuKlfTGztwRDm4mHaFm+YuMjpnIpr6HAhKe0+eIG
XlK0PYPxBumrfKLvTvYdV2iwCagpQZzHofgktgnUVQ8CkF9usdGJW8cs9QHvjfjFDl9uwtWJw/jL
Cb+WSI3s/c34Bd/fgl+cdafwqoD6Um8+PPqErfZy6OeGVd6kv2B/f6gKxUfN52hXfSm1N7eoONQA
P4uU2kW0BppFL47itokK7+3SUWkPFBSUe+1It8K7DH59WmpUE9whHYUHhew1MNsE7iQ8vgWJbwzk
5+EpsOsF3OIZhVIo1OWnkqK7TdF3UgEbjiSMd2Wru28ChjJdFbyyPoN2CFLjU2AAstbjN+zHDBi5
bIRKLXK3BRIDQPAX8SAFN2iETbEbUXbiBjjxZaVtMQqbXNxfYI/dZHjxF/UFu6PVH8vDl/BiC3+R
uL4M4qnam56zt6RMSkHNLa03y7vMseacoavPwF9Oc05cjjtiQzmDG96xJZ2ZyBnKGZd3ZcTiOWeu
FuEvJ57TLDfPj53JGd9w8rxwXsg5kzMo75pNJfwS/rCE1njDh3c0LkXYOzeMIixstY5U6BZTzmtS
kRmy7M3pv/o8/G04cRD+6pvq35RbzGL+4vrD4s4PJSUnJdWfBU6IOxdj7Ij6t2AE4HMBn189AeVt
OIH/x/cp+PGhpFQaZE5xpy/JjE+uS8IL7G+1IMF0aMTenJFpCOYiwW0GgtsMBLdNQ3AbI7hNJ7iN
EdzGCdqRoOMittCJBF0XsYVuJOi9iC30IcGsi9jCbCSYexFbmIcE8y9iC/1IMHARWxhEgoUXsYUh
JFh6EVu4EglWXMQW3o8EV13EFkaQYNVFbOFqJFh9EVu4Bgmuu2gt7LalGqhevGZyvl68juTIuXgt
5GPj4rWQj/6L10Iu3y5eC7kEv3gt5Drq4rWQa+GL10JuZ1y8FnJL6uK1kNuKF6+F3Bq+eC3k9v7F
ayH3aC5aC7nLdtEaWOp1tB5g/ie5k+R/LiD/k9xN9D/jaSwBOaSYoHlebDCnecNJ8lgHc87I8fTY
eE58wzvk047nDMl7zLHk2EPme+6+794m8IED3AfOlmguXpDWmOW48IHX+oHX+oHX+oHX+oHX+oHX
+oHX+oHX+oHX+oHX+oHX+oHX+oHX+oHXesEGygcFcCkd8gEhlhdbzbzMEnAtLWXgay6RHjZv+Hs6
FCPHzbERdFzJLR1Bx9UBjmub5rj2y/EMcFzbuWs7njMiN86Ptef0bzhBzm97Tpscn83KIO8Yy2gR
5APJsYcxPo03lklBxau9WfEAxYnHCLfmmMurpJ6dmMBn6NfG1rFnA2fYM0pXzZ4dh2cbXsLaUsXl
5mRwjP+f+OMC1BnXqv8HOFWtcSrAOJVk4FRXn4ErnFN7+wzc45x6oe+ic6oMtxdV0V5JryRKXzGX
h8vDsbcoPhW25n+Td/WxURxZvsce7Elmkp7kJsQLczm06ksM8TmM2+t1FCvhhMGG2GGSDB/ZmMAf
aJc/uISLzNeJy2UydjQ9he84CUc5XXy3e0InVndI0SqZRacQeQwEY1CwISFAQkhgAX9s+DAJmC/P
vd+raveMMcas2ZVOh1JOd3VVvarfe/XqTdfrVzVG+fNwhgi/GL0iX2D8FjJ8aiDNrk8++CHqDU+h
y/eLBe5Qe+ggjdoHr8HuE8edMla+tcQd/QTDje7mv9/hr964Cw2tMMqjp/K5eUQnx4Ew2s+aEssR
Erro167PadIdSJ9KrM5LnfAkVk9ILHCL+3u8VCjxak7qW0/iVVfi/izSvxhOuqc9s9twMSzQG8Lo
dp54xT1U74mMenCeQbCHUCp0VJbSrYUoiu+JC0Yay/vDxhK5qf39X4/SfqrDH1+YBweeNRPiREnv
uR+Cu8cfn0ej9MdfdcXv7wE08MqI7gxCclzWS8TIlxfv2PiH/kODxZQep/SXlB6hNJkSnG8epHS7
+hkSVDSyBCH+YHnY+TOyKLGX6c2i5IdHaLfrmlPmdqJUMZIoLf4DREmSfvvqMNLZogS332C2KMl6
azO6rFy4gjeJUgH8lEcRpYqRREm2XzBa+3ciSjXRnVPGIUrjlR/pX/fz/Fwttt4ogqMVZCbw4vwF
YvpCveFelzy6816c3bveKN0Y63E1XmKHssbfAJqkbh5oes0ldmV8TA/Puy8T5exXdsN2Nhsc8jRT
QRqkR97BhAc6G155ODll+gvq0Mci9sQLvtDdiHPIaowpcZ296MSuYWe92p52hu1bOIqrHSLdJdxP
g1clObE2lwrePSWeE3c/Df+tNlfsdH7jHriq6Y0PSBErX2JNZ59Xzw4goclDbEqbNhvA/k+Ox6rL
dxcPgJGwwUgEniYkShDDfgq8THOyEdFvQmTftmrIz6MTMv0VEchtKQL7ITCfOn5nEVpAXFV4Xc5H
/N6muflwUUQUvlRPbuzqjAV8nAw1T0V8+j/9GgYanD1f1JMFC5vWwjXW5cWnwBWx3fCJhdceAgF+
4/cels8og2qsccnDq3FIK90kHgbkbSTe6zUZqegSCfOTiGf7lotoNK1Lwze+zyvPo4WbfMdUCTrA
KVednC4dQEvxmUh59zmcPxYxDAIzt9/cY7bG0vlrXk4b27vnzSQheC4dO4voD3pyAV+B5/R/szXx
qLddZYL5s/npN5nl2lDuQKLM22aXAzcCJk1ME27s/bm9oPUS0fKEZ2qx79QJyPPtS79z6ZGX8VrO
6HSKdTrFOmUx0EDRWUBgGWhMWXUP1smerYj3lp6xyitwxpa/51eYAAdRK2LMwoU/XmdU0s1sPrO+
D36WVeIo/DAjRjU7ax4F5YjxrCQWMWpFJ3tn9sI7EyGxIsZzlDEPfpwiJbriNUY41e3B854CcTx6
krTwm1TgeSr4Aj18cd2EZ2N7B2Zu44WsuTXW6gmL3f8SO5Gf25YayG2qcVdjttS80N08gX26G7/U
G/6dpyf1ObH3wDKj8n3PtB2J9gO9fDcr0e6JGJV4PFtlzeasWciqUllVnDUbWdUqq5qzqpA1R2XN
4axqZM1VWXM5aw6ynkVWos6ooYy5CdyfoF703XsQ+OjJSlCsQ09qJKGq1DceiDd8XUknHMGDOVAd
R7k1WjO9KeTNpQXV28UCxJEjiZ1PRthD2K/HHruRTvc8lGtLvTfXkXp8DxC4rbhrF6W4s6RD5EkE
MbGpcHDNqySKhWGIvS3OFqKot48u/KieVSOYOQloBqx2hF9PvsE3u1GM5bMf8nkf25c0wp7tw2R0
6/8lGb2Q8/9KRrE2MY/BWRXlNMjHv9oqbkjBVY9FwdmaSyq5dqxtQ5d+59IjL6HgiGZuL2aHHhu8
zoKNc1Eq4pPEXnbehuM2ywy+zoCwPMJfXIh29vaGd3cnrlgylsQnxme74Lxd88pic1/34I0cYmb1
jsfnztR+TGkiJR+lXEpX58zUzlL6HaX36L6J0luU1lD6W0o/p/QypTCln9TO1B6jNJnSfZQ0Spdr
Zmp9lL6k9Pe0zrxO6ReU6igtoFRFqYJSiFJm/DE96dGT/1z4QJWGuERxv3OTEw+7nLvceDjHuXPH
w7nO3YR42O3c5cXDE5y7/Hg4T93Fw/nZDurb3LAP8ggVgshDZqWeDC1sWsfrN0kB2T1PyNV66D+I
AyIozbuBgGWJNWmOokT3g96OjAW9A/x3m4eiJ3T6Z/anTrhxsnrqxIPI0wgAHDH2oHmVylFel8wz
L6tcc7/o6upF0fn0z+zPPcC1ez0omdbSmtlB0mr2j1DqSuqcj37P66RiQF3TziNUVFfqnJujRkW/
pdqa90r0NFlL+m4azVfpaq0vr+lflcUfjK27zsfJ19+fOjkpdTYndWpS6lxO372pk5O7zqZOTe46
5/06ehK1vefEwa5e0UFtalq+uBg9rWmtmvfTrh557adr0Y+rPC3VExC+pi0PVSFEcwENFx28Fj2j
fePSvJdTZ+/z+j7cEqjSULOVmvPSaPO8vuYtf1ZFv6dATRyMnXgGOQ9Sqc+JLres5Vk4c/kGtURN
eQHg2YfoBp9lfB498SapWu9VEfhwy4+qcAKmN7B9y8NU/4fUWT12+hkvPSjArbqeSBLz2wsIouyn
TvX4U58+As6k0xbZy25vR2rPJMvDILW6Y09q9RPFxVRfTur0JO9FcQxwfZfjPdb3IEHlxYeQpyZ7
EQGGnkm4xaEMuAbRZYJrP8HF1wTXfnEVV7eA62z0FMN1I3WO4NrOcFFNhuuLDLhOSloZcIFN3LKC
q49aAlw3RG/q3EN0A7gOKrh6BYEEuL4juLYyXNdS5/TYmWeAHuC6pq4ZrivUxik/dYrg2m/DVX4z
XOvcwGtQ9KXO2GLVl+Md9PYRXqcne/G1K8OGaKB90TM8hi8y8LqcIV6XxyRetOwxXhczxOvyLcXr
i1HE6xi1BLwu0kJM4nUyS7yO2uLVR3i1jEG8jnJouduJ1zoP8LpMcw/ydVncAG4kXzcIrzOTvesd
+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
8Ao0FDJfzx0pVA2i3x2tP7HFnjbrB526HmUfeLdX19hNTb4Jaw/tFy+ZuurFE9fcNd9P79o3NPRU
v+d2lvaH+m3Kz2pwPcVxhkuh5I/v/btsfNv2tKdm1lVNf3dRtU8vP9sccXl7X+BhdUqwuX3ehTob
6h0emKxs7Ptuea+v29P7359376jwwAv3iMi9A3a9PRLmPlQZsXiV2+Hqo+59v7a0uZldRMLSv6pY
fqk61e/W8xP0mLVhUZ/X/+b7rdbmMeYzltCWdvE1DxvGbr7/pmWuX7WFk88/qbTLburCKUs3qfZ1
+VbYIvn961dhA1amtZ5t/3TU5LUuI9o/vrnqnu3w1t1unF/0LTCq4d2UZMHOk+ZWvy3f2+1tj4n1
FFb2r2RD25hv19U5VKQ+N2Ce6/VTHdbl75zmnfbkrveZB00+x655uuLgof6LAwZOmxwi+OjVcdpp
5bfK36PsH1n7VlodHbS0e/qmaKvJB8blL1q86vvc+Oe75828699w/R/J6i73vASG6ym2+xy3xl+9
Hl/pWuD0vNrjC0aurFZr/AFx2qQPIwc8NHN4Ex/e6lCT9RZ/aQ7aL33xeutD+fLhdfMb361/YY1Z
ZP7smv0aPtNfWn35qHPkIbMBO9I2fn1d1+H+U/XEIbsXWq5XpCa7r38bczsl/NUu+d+/XbbKch0/
+OU3Ra8Rn8+8v3/uUN/PB65/SaaujXy7/hId+GRyyp26NfStN+x7HvduQ9sxJ8ziJkT0P7x5l1P8
97uRlM36ByfWdWjf6Pzwm1ldlh1LaVzn6Ov6+z8OtZkd3vRwmpNZho3wgee8a+mjTvZo8+71uz3m
n/Zc6hcWc3bN4RY2E6ttdjy/6mzPNXb2n1tebH3p/LU7W3zp1pX/nnQyvo1T1t2bN7avG6Kb42vX
dmez95N+G+F/Wxffe84A8yt73HqkWZ3vmqFf02KcZv6LtSm/6l/uXHm2X/q7oIeR0YrZVBfZ+gZ5
QwcMDfswPtL8zxfdWzwItpleSx1QaVKEZmPzrDznQNtd+xMOjXozc1jfbF206xiXHo1u1vdYk7t2
3NJq5xc22ezh3td53IqZ8+prV55qd2dOO/Y063rp1cXhcfsvR3288zo7IrPaI9c+tgcWeiYPykvQ
vBncutqULvuPjjDfnpN7/Oia16c6ZRUmThQuHDCDvXwrcbuZaPeSjqKFj1+po+rkunWs1cAj993r
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
Kf3znN4pM/tePlb5+Pii+Z3dLo4Ict3iu6JDyx2Fk3o/PhfcfU0jlaKwncuRKbfqDmgoavRm0Qp1
WnD9LvuPNC+oUutlo54KdZUu91tO2HBvy9xKMcmfm1V37lrz09O/XS5s8ws5tOfmrXbuas0w1yp2
WU/sL9Z7tOxsVOpKfcLiYZdGPNyx/dueO/o2A7bOGrbz/YsPvXsmtki0SNQO/npylZfyneWfbI8j
X+TnJV3Vg7stq/1iOD1gVUJnQZPtbYp6+P75YNs0tTZe16jtjrFv2kbN+3r1lfJ5/pvd20YO3/Mx
JTb/tzUH418VrN108YtWV/dxryHXPUcVOnYZcmtywvjf2mVpc9qsFY6PPzu6+TXzQzeXV950wmrQ
loikxS6zl+QXrK/Rf4PtlSU35to2TJFoxXvNvdo/GL39ha1f0bRfnL9leXqGbKp5fcHCyk6vhs1N
f5kWMPjShivfKqnazDh2a26r/kejzTq7xHwaXGnR3nXmRf4n7jn4j/4wnR4W2qNS88Q96yot1gX0
qvbixrC3O5e2TRQk9b1CnZ99zyX5kdJn0tXdsVL33btbPzu85dr6rePm9v3yuLtnu2O2d6yyR5j1
aRZil6vy7TOhT0Lu7WGbZrXIXdthV80vG2ef7hkf93Tdwi82p/uEXNjrtKJF5+cxtT/c062+WHXo
vCauLTPuHzibvTfqZutjO+rJFQf3X5WKp5+vMih5wm+fHFNvCBLDFMdUjY+//XRa0WP3Mo+G+9rP
Tl3VUa2YHx3mP+j09hlbp836zeWsW57Tjn61Gp7rvVdwoKvH6A3suLne21dn/bU2S94laFlEm8Ks
SVtPdZ+//+DuSMOzD06xfa+N0Xra5Z3d3+JE88tbVIEx2s1LHtSdvNzyduftL85+mju9ZcMut0Y/
T67zbNj0jbtH7nzXyJdZalF74YITr2Zu1u0c3KLLwxkxbnfHnuug3/xxXt2Am40bLxo2eUmzh0nx
z08/Dzpw6X2r9+nZlqHt7D71cFtyZ4DZsFXDV9yznTHxbtPg9l/HPZxyXjr74oYXDVqOqm/eePnZ
3/v+0dfsXNPjJwMa9u1z3G+O14yNr1bkrj3XvvnbEe27LQ+8cW9hjRtfl68Kn/Fp4tMxe08/ONIm
OCAw5eyHgEauhePNEnrGJxY81Tj+/n5059O3z2RauW3OfDPCTzfXYtsLvZXb7Md75rUZ1+RJTf8p
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
RVbLrFZYrbHaYXXI6rDVcauTVmetLlvdt3pt9dnKupJDJZdK1Sp5VfKpVL9SUKWQSnSl8EqRlVpU
iq0UX6lDJUOlwkr9Kw2uNLTSrEpzK82vtKLSpkpbKu2rdLTS6UoXK12v9LLS+0qfK32tZGvtau1l
7W+tsGatm1lHW7e0jrduY62zzrTOsy60HmU9xnqW9RzrddZbrPdYH7I+an3c+rT1Zeub1o+tn1q/
t7aycbJxs/G28bHxtwm0kdiE2tA2LW1ibdrZdLJJsEm36WYz2GaGzRybhTYrbLbZ7LDZY3PY5rLN
VZubNg9tntu8tfloY2Vrbetp62PrZ1vfNshWZsvYRtq2sI22jbdtZ5tg29W2m20P26G2I23H2s6w
nW+7xHaF7QHbi7a3bR/bPrd9a/ve9qutq52XnbedyE5lF2IXadfGTmeXbJdql21XYNfbrr/dQLuh
dqPsJtpNsZtmN8duid0yu3V22+x22R23u2h31+6+3VO7l3av7Swqu1R2q+xR2adyYOWGlUMrh1du
WblN5U6VDZWzK/euPLLymMoTK0+rPKPyhsqbKu+pfLjy8cpXK9+s/LDy28qfK1vbV7Z3sfezD7IX
2dP2HewT7HX2mfZ59j3sB9uPtB9vP9l+lv0a+3X2m+y32B+wv21/1/6x/Uv79/af7c0cLBycHFwd
vBy8Heo7NHQIcQh1iHaId0h3KHQY6DDUYbjDKIcxDvMdljlscNjmcMDhkMNRh9MOZx0uO9x1uO/w
2uGrw3cHW8dqjp6O3o7+jkGOMsdgx2aObRzbOXZy7OrYzbHAsa/jcMexjpMdZziudtzguMlxj+NJ
x7OOlx2fOj53/Oho7VTZycGpmpOfU6CTyIlxCndq4RTtFOvUzqmDU6pTV6f+TpOd5jrNd1rktMJp
jdM6py1OJ51OO110euj03Omz01cnC2cnZy9nb2c/5/rOKucQ51Dnls7pznnOhc69nYc6D3ce7zzR
eZbzfOeFziudVztvcd7lfMj5vvNL59fOX52tXCq7uLn4uzR0UbmwLuEu7VwSXJJd0l2yXQa6DHYZ
4zLDZa7LQpdFLstc9rjscznpct7lvstzl7cun10cqnhW8ariUyWwSv0qoiqKKnSV8CqxVRKqdKuS
V6WwSt8qY6tMqbKyypoq66psqrKjyq4qR6ucrHK9ytcq1q4OrjVc/V0buipcGVfWNdI12rWNayfX
VNd010zX3q4DXYe7jnId7zrRdZbrHNeVrltc97iedb3oet31setT19euH12/u3pU9a4aVFVSNbgq
W7VF1XZVu1bNrtqtakHVMVWnVZ1TdW7V1VU3VN1W9XDVs1VvV71f1cqtspuLWzU3Lzc/t0C3+m4K
txA32o1xi3RLcDO4pbp1devr1t9tsNtYt/FuU9xmuK1z2+K2y22f21G3827v3azdbd2d3F3d3dxr
uHu4+7lL3FXuIe6se7R7vHu6e6Z7tnuB+0T3Ke5z3Je4r3Rf577NfY/7cffT7hfdL7vfdL/r/tj9
qft794/uttWcqvlU868mqUZX61QtuVqPar2rjak2udqManOqLay2ptqmajuqHap2uNrZajerPaz2
utrbat+rWVd3re5ZXVZdUT24OlM9snqL6vHVU6t3q96jet/q/asPrT62+ozqs6ovqr6i+prqm6rv
qn6g+snq56tfrH69+t3qj6u/rf61ulsNjxqiGpIabI3IGi1rdKhRWGNgjYk1ptSYVmN+jSU1ltVY
XWNdjQM1jte4XONpja81LGpa1XSpWa2md02fmg1rBtWU1Qyt2aJmy5rpNbvW7F2zb83hNUfWnFhz
Uc1lNVfUXF1zU81DNY/XPFvzfM3bNV/X/Fzze00rDx8PP48gD5GHwiPYg/YI94j2iPdo52Hw6OqR
59HfY7DHeI9ZHos8dnjs8zjpcd7josdzj/cetrVca9Wo5V+rfq2GtSS1QmqxtZrViq4VXyuv1sBa
o2qNqTWt1vxaC2utq7Wh1qFaN2u9rvWxlq2nh6e3p4+nzFPlGepJezbzjPXs5Jnsme7ZzbPAs7dn
X8/hniM9J3tO85zjudBzkecazw2e+zzPe172vOn51vOjp1lt69qVa7vWrlbbr3b92kG1Q2pH1m5R
O7p2Zu1utUfWHlt7cu25tVfU3lJ7V+19tQ/UPlz7au3btZ/Xfl/7a20zLwcvJy8PL5VXpFczr5Ze
qV4FXr29hnqN95riNc1rltdCr5Ve67y2eJ32uul13+ux12uv714uQg+hp9BfGChsKJQIw4UthC2F
CcJkIfRFYQ9hX+FI4VzhMuFq4SbhHuE+4W3hfeFT4XPhZ+F3oYO3q7fMm/aO9I72bufdwTvBO8+7
r/dQ78neU7zneq/0XuO9znuX9wHv895Xve96P/R+6f3W+7O3RR3bOk51POp41/GrU7+OqI6qTrM6
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
qAQAAAA=

------=_NextPart_000_000D_01CB71CE.4A1653D0
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

------=_NextPart_000_000D_01CB71CE.4A1653D0--


From libssh2-devel-bounces@cool.haxx.se  Sun Oct 24 16:33:37 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9OEXBRt012848;
	Sun, 24 Oct 2010 16:33:30 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9OEX9Qm012840
	for <libssh2-devel@cool.haxx.se>; Sun, 24 Oct 2010 16:33:09 +0200
Date: Sun, 24 Oct 2010 16:33:09 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: so compression is a bit broken
In-Reply-To: <alpine.DEB.2.00.1010212242100.31301@tvnag.unkk.fr>
Message-ID: <alpine.DEB.2.00.1010241631110.21275@tvnag.unkk.fr>
References: <alpine.DEB.2.00.1010212242100.31301@tvnag.unkk.fr>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Sun, 24 Oct 2010 16:33:37 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Sun, 24 Oct 2010 16:33:09 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Thu, 21 Oct 2010, Daniel Stenberg wrote:

>     Before my patch: 56 seconds (18MB/sec)
>     With my patch:   49 seconds (20MB/sec)
>     OpenSSH's sftp:  19 seconds (52MB/sec)

Hehe, I noticed that I did my tests when built with -g only and by using -O2 
instead we get higher performance, so it wasn't _that_ bad even if we still 
get beaten by OpenSSH by a very large margin.

I'll get back with more numbers when I've done some further work within a 
couple of days or so.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Sun Oct 24 19:43:43 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9OHh1fG031536;
	Sun, 24 Oct 2010 19:43:39 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9OHh0li031523
	for <libssh2-devel@cool.haxx.se>; Sun, 24 Oct 2010 19:43:00 +0200
Date: Sun, 24 Oct 2010 19:43:00 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Enhanced buffering made faster uploads!
Message-ID: <alpine.DEB.2.00.1010241851180.21275@tvnag.unkk.fr>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Sun, 24 Oct 2010 19:43:43 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Sun, 24 Oct 2010 19:43:00 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Hi

I've committed the changes I've done so far to the buffering/sending parts of 
the code. I'll present some speed test results below but first I'll briefly 
describe what I've done:

transport send

   - sends everything without doing any extra alloc, and if it compreses the
     sent data it also avoids an extra memcpy. This is achieved by having a
     large buffer area within the session handle struct that is used for this.

   - the compression functions are now split in separate compression and
     decompression functions

   - _libssh2_transport_write was converted to _libssh2_transport_send which
     takes two data areas two send, as this makes it easier for lots of code to
     pass on the payload part without doing an extra memcpy and by doing a
     smaller or no allocation at all

channel write

   - I cleaned up and simplified the function even further, now it approaches
     readable

   - I removed the 32500 size limit and instead made the
     _libssh2_channel_write function have a looping logic that splits up larger
     input buffer into smaller fragments that are passed one by one to
     _libssh2_transport_send().

   - Removed the 32500 limit from the SFTP write function so now it can create
     much larger SFTP packets and pass those on to _libssh2_channel_write as
     that now supports them properly.

Speed Comparisons
=================

- SFTP upload

I built libssh2 1.2.7 and my current dev version with CFLAGS=-O2 and I ran 
this example on both:

  time ./sftp_write_nonblock 127.0.0.1 user password /bigfile /tmp/remove

The 1.2.7 version it averaged at:

  1024000000 bytes in 43 seconds = 23813953 bytes/sec

The current git version averages at:

  1024000000 bytes in 30 seconds = 34133333 bytes/sec

... roughly 43% faster. OpenSSH's sftp tool still makes the same upload in 19 
seconds.

- SCP upload

   I only did a few tests with SCP and there wasn't a very big difference, even
   if I consistently measured the git version to be faster than 1.2.7. With SCP
   uploads we're much closer to OpenSSH speeds already so there's a much
   smaller motivation for me to make a lot of efforts there.


Further Improvements
====================

I have some more ideas of how to reach further:

  - I wanted to prevent the memcpy done in the sftp_write function as well, but
    that will require that we make a channel_write() function in a similar
    style to the transport_send() and that isn't as straight forward so I've
    decided to wait with that and consider another area instead...

  - The multiple outgoing packets thing. I think I'll proceed and do some
    experiments with a SFTP write function that (assuming that more than a
    certain amount of data is sent) sends the data in two SFTP packets, and as
    soon as the first packet is ACKed the function will return that amount.

    When the function is called again with a data pointer pointing to the
    second chunk, the SFTP write function is already waiting for the ACK for
    that so it sends off the second part only and returns as soon as the first
    part is ACKed etc.

    The idea here being that while waiting for an ACK we are better kept busy
    by sending the next part than by just waiting.

    I've seen that OpenSSH does something similar to this, but of course this
    operation is much easier for a "simple" command line tool rather than a
    library function like ours.

  - There's now a bunch of places in the code where we can skip the
    alloc/free for channel stuff and instead use a fixed sized array within the
    session struct. They're not likely to be sigificant or even measurable,
    but that still fits my general idea of restricting the number of mallocs
    to a minimum for the "normal" code flows, for all functions that are used
    frequently.

  - If anyone has any (other?) bright idea, I'm all ears!

It is a bit tricky to figure out exactly what to do to go faster. Doing 
profiling on the code doesn't really help much, as already before the vast 
majority of the time is spent on the crypto parts and it doesn't reveal much 
where we waste time as described above.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Sun Oct 24 20:10:46 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9OIAe0l017704;
	Sun, 24 Oct 2010 20:10:45 +0200
Received: from mx1.belnet.be (mx1.belnet.be [193.190.198.9])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9OIAcQ9017683
	for <libssh2-devel@cool.haxx.se>; Sun, 24 Oct 2010 20:10:38 +0200
X-IronPort-AV: E=Sophos;i="4.58,232,1286143200"; 
   d="scan'208";a="1154326"
Received: from firewall.belnet.be (HELO relay.fw.belnet.be) ([193.190.198.37])
	by mx1-out.belnet.be with ESMTP; 24 Oct 2010 20:10:28 +0200
Received: from [192.168.2.4] (unknown [79.132.236.226])
	(using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
	(No client certificate requested)
	by relay.fw.belnet.be (Postfix) with ESMTPSA id 062E62DB
	for <libssh2-devel@cool.haxx.se>; Sun, 24 Oct 2010 20:10:45 +0200 (CEST)
Message-ID: <4CC47693.5050501@0xbadc0de.be>
Date: Sun, 24 Oct 2010 20:10:27 +0200
From: Aris Adamantiadis <aris@0xbadc0de.be>
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US;
	rv:1.9.1.14) Gecko/20101006 Thunderbird/3.0.9
MIME-Version: 1.0
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Enhanced buffering made faster uploads!
References: <alpine.DEB.2.00.1010241851180.21275@tvnag.unkk.fr>
In-Reply-To: <alpine.DEB.2.00.1010241851180.21275@tvnag.unkk.fr>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Sun, 24 Oct 2010 20:10:46 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Sun, 24 Oct 2010 20:10:39 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Le 24/10/10 19:43, Daniel Stenberg a =E9crit :
>  - The multiple outgoing packets thing. I think I'll proceed and do some
>    experiments with a SFTP write function that (assuming that more than a
>    certain amount of data is sent) sends the data in two SFTP packets,
> and as
>    soon as the first packet is ACKed the function will return that amount.
> =

>    When the function is called again with a data pointer pointing to the
>    second chunk, the SFTP write function is already waiting for the ACK f=
or
>    that so it sends off the second part only and returns as soon as the
> first
>    part is ACKed etc.
> =

>    The idea here being that while waiting for an ACK we are better kept
> busy
>    by sending the next part than by just waiting.
Hi Daniel

Your implementation gave good results (only 50% slower than openssh)
because you were running in on localhost. Doing it on a high-latency
connection (like a 100mbps path between europe and US) would give
catastrophic results.

Your bandwidth is limited by one chuck of data for each RTT, which
gives a upper bound of 35KB/RTT ~=3D 350KB/s on a 100ms latency link.

The only way to avoid this is to use asynchronous SFTP read and writes
(that is, you send several requests without waiting for the responses).
So clearly it's the way to go.

libssh does this (despite its supposed terrible performances) since
0.4. You can have a look at the current API being used here:

http://api.libssh.org/master/group__libssh__sftp.html#ga4c2cca19b38c54d4b04=
bb3584b0517cd

I'm not that happy of this API (difficult to use) but it exists and I
know at least one application that uses it.

Kr,

Aris
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Sun Oct 24 20:25:38 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9OIPWIn028845;
	Sun, 24 Oct 2010 20:25:37 +0200
Received: from mail-ey0-f182.google.com (mail-ey0-f182.google.com
	[209.85.215.182])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9OIPVdR028837
	for <libssh2-devel@cool.haxx.se>; Sun, 24 Oct 2010 20:25:31 +0200
Received: by eyb7 with SMTP id 7so1335518eyb.41
	for <libssh2-devel@cool.haxx.se>; Sun, 24 Oct 2010 11:25:27 -0700 (PDT)
Received: by 10.213.108.143 with SMTP id f15mr613015ebp.59.1287944727704;
	Sun, 24 Oct 2010 11:25:27 -0700 (PDT)
Received: from [192.168.0.35] (96-160.ftth.onsbrabantnet.nl [88.159.160.96])
	by mx.google.com with ESMTPS id v51sm1902615eeh.10.2010.10.24.11.25.25
	(version=SSLv3 cipher=RC4-MD5); Sun, 24 Oct 2010 11:25:26 -0700 (PDT)
Message-ID: <4CC47A13.2010407@peut.org>
Date: Sun, 24 Oct 2010 20:25:23 +0200
From: Jose Baars <peut@peut.org>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; nl;
	rv:1.9.2.11) Gecko/20101013 Thunderbird/3.1.5
MIME-Version: 1.0
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Enhanced buffering made faster uploads!
References: <alpine.DEB.2.00.1010241851180.21275@tvnag.unkk.fr>
In-Reply-To: <alpine.DEB.2.00.1010241851180.21275@tvnag.unkk.fr>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Sun, 24 Oct 2010 20:25:38 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Sun, 24 Oct 2010 20:25:32 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============0934576824=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

This is a cryptographically signed message in MIME format.

--===============0934576824==
Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary="------------ms050907060008060402000605"

This is a cryptographically signed message in MIME format.

--------------ms050907060008060402000605
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: quoted-printable

Well done and thanks, Daniel!

Just a thought:

I think the 'multiple outgoing packets' is the best one. In my modest=20
experience
select() calls are very inefficient, adding far more time than the actual=

time needed to wait, and using the non blocking approach to avoid these=20
calls
is a bit of a blunt instrument, especially on a system with a couple of=20
hundred users.
Any chance the 'multiple outgoing packets' can be extended ad infinitum,
using a queue/stack/list for all packets sent?




--------------ms050907060008060402000605
Content-Type: application/pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
Content-Description: S/MIME Cryptographic Signature

MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIPWjCC
BMwwggQ1oAMCAQICEByunWua9OYvIoqj2nRhbB4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UE
BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1Ymxp
YyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA1MTAyODAwMDAwMFoXDTE1
MTAyNzIzNTk1OVowgd0xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEf
MB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazE7MDkGA1UECxMyVGVybXMgb2YgdXNl
IGF0IGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEgKGMpMDUxHjAcBgNVBAsTFVBlcnNv
bmEgTm90IFZhbGlkYXRlZDE3MDUGA1UEAxMuVmVyaVNpZ24gQ2xhc3MgMSBJbmRpdmlkdWFs
IFN1YnNjcmliZXIgQ0EgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMnf
rOfq+PgDFMQAktXBfjbCPO98chXLwKuMPRyVzm8eECw/AO2XJua2x+atQx0/pIdHR0w+VPhs
+Mf8sZ69MHC8l7EDBeqV8a1AxUR6SwWi8mD81zplYu//EHuiVrvFTnAt1qIfPO2wQuhejVch
rKaZ2RHp0hoHwHRHQgv8xTTq/ea6JNEdCBU3otdzzwFBL2OyOj++pRpu9MlKWz2VphW7NQIZ
+dTvvI8OcXZZu0u2Ptb8Whb01g6J8kn+bAztFenZiHWcec5gJ925rXXOL3OVekA6hXVJsLjf
aLyrzROChRFQo+A8C67AClPN1zBvhTJGG+RJEMJs4q8fef/btLUCAwEAAaOCAYQwggGAMBIG
A1UdEwEB/wQIMAYBAf8CAQAwRAYDVR0gBD0wOzA5BgtghkgBhvhFAQcXATAqMCgGCCsGAQUF
BwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMAsGA1UdDwQEAwIBBjARBglghkgB
hvhCAQEEBAMCAQYwLgYDVR0RBCcwJaQjMCExHzAdBgNVBAMTFlByaXZhdGVMYWJlbDMtMjA0
OC0xNTUwHQYDVR0OBBYEFBF9Xhl9PATfamzWoooaPzHYO5RSMDEGA1UdHwQqMCgwJqAkoCKG
IGh0dHA6Ly9jcmwudmVyaXNpZ24uY29tL3BjYTEuY3JsMIGBBgNVHSMEejB4oWOkYTBfMQsw
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1BgNVBAsTLkNsYXNzIDEg
UHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHmCEQDNun9W8N/kvFT+Iqyz
cqpVMA0GCSqGSIb3DQEBBQUAA4GBALEv2ZbhkqLugWDlyCog++FnLNYAmFOjAhvpkEv4GESf
D0b3+qD+0x0Yo9K/HOzWGZ9KTUP4yru+E4BJBd0hczNXwkJavvoAk7LmBDGRTl088HMFN2Pr
v4NZmP1m3umGMpqSKTw6rlTaphJRsY/IytNHeObbpR6HBuPRFMDCIfa6MIIFQTCCBCmgAwIB
AgIQQkuBnab/mKbwbYynoi4GkzANBgkqhkiG9w0BAQUFADCB3TELMAkGA1UEBhMCVVMxFzAV
BgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3Jr
MTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3Jw
YSAoYykwNTEeMBwGA1UECxMVUGVyc29uYSBOb3QgVmFsaWRhdGVkMTcwNQYDVQQDEy5WZXJp
U2lnbiBDbGFzcyAxIEluZGl2aWR1YWwgU3Vic2NyaWJlciBDQSAtIEcyMB4XDTA5MTExMjAw
MDAwMFoXDTEwMTExMjIzNTk1OVowggEKMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0G
A1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazFGMEQGA1UECxM9d3d3LnZlcmlzaWduLmNv
bS9yZXBvc2l0b3J5L1JQQSBJbmNvcnAuIGJ5IFJlZi4sTElBQi5MVEQoYyk5ODEeMBwGA1UE
CxMVUGVyc29uYSBOb3QgVmFsaWRhdGVkMTMwMQYDVQQLEypEaWdpdGFsIElEIENsYXNzIDEg
LSBOZXRzY2FwZSBGdWxsIFNlcnZpY2UxEzARBgNVBAMUCkpvc2UgQmFhcnMxHDAaBgkqhkiG
9w0BCQEWDXBldXRAcGV1dC5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCi
x8yI3kFLmfYElzZSqsup782ajeuv3TASyn8mUfGrnr2aW1M7jN4vlM8/7/sVL883rH+kWPzV
Q4ITYrfW5QFxH+CBqtX0F1xsS1A7AR8xZIs8o7/sMxV2xOSXYEJXlKP4XVWY8oU+TKH5dWYZ
9BJ9pkJ840ayiqqI/P3MHqmu7vS2nPDu8YZFa+46EtWkGbJTjzFdnrU5Jmdudp37fd1btNss
RIkqztDOeQOTaZ6pS9RqjhmNuWVtgZucKho6c9Qf2htGz8AL95MqttF2OZYL9AlXZhjJcIMO
aZBVjuwLowX/kYL2lo1vyUGt3eZxSkZR/ICfkQwj1BKpFZGFtM5XAgMBAAGjgcwwgckwCQYD
VR0TBAIwADBEBgNVHSAEPTA7MDkGC2CGSAGG+EUBBxcBMCowKAYIKwYBBQUHAgEWHGh0dHBz
Oi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwCwYDVR0PBAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
BwMEBggrBgEFBQcDAjBKBgNVHR8EQzBBMD+gPaA7hjlodHRwOi8vSW5kQzFEaWdpdGFsSUQt
Y3JsLnZlcmlzaWduLmNvbS9JbmRDMURpZ2l0YWxJRC5jcmwwDQYJKoZIhvcNAQEFBQADggEB
ABcuOD4QwMrXJgD8zvCWBRjBqsQLXn0ybqrLZHlcic7+lstAl06fi7fGD3+1Nrcp4VImkyUv
JQEvFSvkB+/Mt8kOVSdt+eiYIInKt/lBkSzy0sardsh0u7Ifcgt+nmLZYW+azviXnD4VNMqe
Q9QIZPHSUhWDe3IA5NSYE4hfqwXX5c13HllqpUcXRmWIGA9MPr9SQxZ0jg7MFUsZVgG9f5Ts
A3yIEmvUgutyX6GRzZQL+wlWymRzh/XA7j2QnYk+IPlNQHJ62MHHlAI48y3ssSXwR8hfbH4e
0sw+8ezuh785OuFMBI3qhxlQX4wT8+v8rKHtiLcddoIohWM0ID+IdOEwggVBMIIEKaADAgEC
AhBCS4Gdpv+YpvBtjKeiLgaTMA0GCSqGSIb3DQEBBQUAMIHdMQswCQYDVQQGEwJVUzEXMBUG
A1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsx
OzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBh
IChjKTA1MR4wHAYDVQQLExVQZXJzb25hIE5vdCBWYWxpZGF0ZWQxNzA1BgNVBAMTLlZlcmlT
aWduIENsYXNzIDEgSW5kaXZpZHVhbCBTdWJzY3JpYmVyIENBIC0gRzIwHhcNMDkxMTEyMDAw
MDAwWhcNMTAxMTEyMjM1OTU5WjCCAQoxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYD
VQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMUYwRAYDVQQLEz13d3cudmVyaXNpZ24uY29t
L3JlcG9zaXRvcnkvUlBBIEluY29ycC4gYnkgUmVmLixMSUFCLkxURChjKTk4MR4wHAYDVQQL
ExVQZXJzb25hIE5vdCBWYWxpZGF0ZWQxMzAxBgNVBAsTKkRpZ2l0YWwgSUQgQ2xhc3MgMSAt
IE5ldHNjYXBlIEZ1bGwgU2VydmljZTETMBEGA1UEAxQKSm9zZSBCYWFyczEcMBoGCSqGSIb3
DQEJARYNcGV1dEBwZXV0Lm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKLH
zIjeQUuZ9gSXNlKqy6nvzZqN66/dMBLKfyZR8auevZpbUzuM3i+Uzz/v+xUvzzesf6RY/NVD
ghNit9blAXEf4IGq1fQXXGxLUDsBHzFkizyjv+wzFXbE5JdgQleUo/hdVZjyhT5Mofl1Zhn0
En2mQnzjRrKKqoj8/cweqa7u9Lac8O7xhkVr7joS1aQZslOPMV2etTkmZ252nft93Vu02yxE
iSrO0M55A5NpnqlL1GqOGY25ZW2Bm5wqGjpz1B/aG0bPwAv3kyq20XY5lgv0CVdmGMlwgw5p
kFWO7AujBf+RgvaWjW/JQa3d5nFKRlH8gJ+RDCPUEqkVkYW0zlcCAwEAAaOBzDCByTAJBgNV
HRMEAjAAMEQGA1UdIAQ9MDswOQYLYIZIAYb4RQEHFwEwKjAoBggrBgEFBQcCARYcaHR0cHM6
Ly93d3cudmVyaXNpZ24uY29tL3JwYTALBgNVHQ8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUH
AwQGCCsGAQUFBwMCMEoGA1UdHwRDMEEwP6A9oDuGOWh0dHA6Ly9JbmRDMURpZ2l0YWxJRC1j
cmwudmVyaXNpZ24uY29tL0luZEMxRGlnaXRhbElELmNybDANBgkqhkiG9w0BAQUFAAOCAQEA
Fy44PhDAytcmAPzO8JYFGMGqxAtefTJuqstkeVyJzv6Wy0CXTp+Lt8YPf7U2tynhUiaTJS8l
AS8VK+QH78y3yQ5VJ2356Jggicq3+UGRLPLSxqt2yHS7sh9yC36eYtlhb5rO+JecPhU0yp5D
1Ahk8dJSFYN7cgDk1JgTiF+rBdflzXceWWqlRxdGZYgYD0w+v1JDFnSODswVSxlWAb1/lOwD
fIgSa9SC63JfoZHNlAv7CVbKZHOH9cDuPZCdiT4g+U1AcnrYwceUAjjzLeyxJfBHyF9sfh7S
zD7x7O6Hvzk64UwEjeqHGVBfjBPz6/ysoe2Itx12giiFYzQgP4h04TGCBOwwggToAgEBMIHy
MIHdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
cmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczov
L3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTA1MR4wHAYDVQQLExVQZXJzb25hIE5vdCBWYWxp
ZGF0ZWQxNzA1BgNVBAMTLlZlcmlTaWduIENsYXNzIDEgSW5kaXZpZHVhbCBTdWJzY3JpYmVy
IENBIC0gRzICEEJLgZ2m/5im8G2Mp6IuBpMwCQYFKw4DAhoFAKCCAs4wGAYJKoZIhvcNAQkD
MQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTAxMDI0MTgyNTIzWjAjBgkqhkiG9w0B
CQQxFgQUDSCTVLMIgHyoIqYUDrdvNj+KA5wwXwYJKoZIhvcNAQkPMVIwUDALBglghkgBZQME
AQIwCgYIKoZIhvcNAwcwDgYIKoZIhvcNAwICAgCAMA0GCCqGSIb3DQMCAgFAMAcGBSsOAwIH
MA0GCCqGSIb3DQMCAgEoMIIBAwYJKwYBBAGCNxAEMYH1MIHyMIHdMQswCQYDVQQGEwJVUzEX
MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
cmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20v
cnBhIChjKTA1MR4wHAYDVQQLExVQZXJzb25hIE5vdCBWYWxpZGF0ZWQxNzA1BgNVBAMTLlZl
cmlTaWduIENsYXNzIDEgSW5kaXZpZHVhbCBTdWJzY3JpYmVyIENBIC0gRzICEEJLgZ2m/5im
8G2Mp6IuBpMwggEFBgsqhkiG9w0BCRACCzGB9aCB8jCB3TELMAkGA1UEBhMCVVMxFzAVBgNV
BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTsw
OQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAo
YykwNTEeMBwGA1UECxMVUGVyc29uYSBOb3QgVmFsaWRhdGVkMTcwNQYDVQQDEy5WZXJpU2ln
biBDbGFzcyAxIEluZGl2aWR1YWwgU3Vic2NyaWJlciBDQSAtIEcyAhBCS4Gdpv+YpvBtjKei
LgaTMA0GCSqGSIb3DQEBAQUABIIBADbx6I4xB6r7JY4NsV8r8X1v1IEvxY1hyCGuBjPMEl6h
gLlnXMX7hC+EF7Bnf2jdXw84Uft60MgAOQqHDk+tdv8U7FDLXepaOx5AZfsOMtMwNUjq4wom
VyTwW1ptAuFajL8oStfH3t2hSj3HOI24G0f9Y3cA0c7QHpn3gKH+upBmhT+D7ywxVuqdZ7ZL
HhRMniuz/FtqR/s6GctlaLGycCPVGuKfeSN3uXg6uCNieQRhY5qTDSVkCSGvtBqCCmtm1BD6
EeichXSdWGNnvIxdJl+RokT4CgkGk/QlakYKDuKoaxknvsuVNAh1XdmC5TpxxZIVpPiO7gTg
h/IcriSxMecAAAAAAAA=
--------------ms050907060008060402000605--

--===============0934576824==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============0934576824==--

From libssh2-devel-bounces@cool.haxx.se  Sun Oct 24 23:28:11 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9OLRTp9010746;
	Sun, 24 Oct 2010 23:28:07 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9OLRRG6010733
	for <libssh2-devel@cool.haxx.se>; Sun, 24 Oct 2010 23:27:27 +0200
Date: Sun, 24 Oct 2010 23:27:27 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Enhanced buffering made faster uploads!
In-Reply-To: <4CC47693.5050501@0xbadc0de.be>
Message-ID: <alpine.DEB.2.00.1010242308350.21275@tvnag.unkk.fr>
References: <alpine.DEB.2.00.1010241851180.21275@tvnag.unkk.fr>
	<4CC47693.5050501@0xbadc0de.be>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Sun, 24 Oct 2010 23:28:11 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Sun, 24 Oct 2010 23:27:28 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Sun, 24 Oct 2010, Aris Adamantiadis wrote:

> Your implementation gave good results (only 50% slower than openssh) because 
> you were running in on localhost. Doing it on a high-latency connection 
> (like a 100mbps path between europe and US) would give catastrophic results.

I'm fully aware that more round-trips makes it worse, and I've repeatedly 
mentioned my thoughts around further improvements regarding that - even in 
this very mail you responded to now. My changes now didn't change anything 
about that but greatly improves the speed for low latency situations and that 
was certainly needed as well. If we can't keep up at almost-zero latency, then 
we certainly can't at high latency.

> You can have a look at the current API being used here:

Yes, the API really is the key here. That's what sets the restrictions or at 
least sets the challenge level for how to do the implementation of this. I 
need/want the API to remain like today as it's simple and elegant, but yet I 
want high speed. I would be sad to sacrifize it.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Sun Oct 24 23:29:15 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9OLTCNJ011285;
	Sun, 24 Oct 2010 23:29:13 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9OLTBK8011277
	for <libssh2-devel@cool.haxx.se>; Sun, 24 Oct 2010 23:29:11 +0200
Date: Sun, 24 Oct 2010 23:29:11 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Enhanced buffering made faster uploads!
In-Reply-To: <4CC47A13.2010407@peut.org>
Message-ID: <alpine.DEB.2.00.1010242327310.21275@tvnag.unkk.fr>
References: <alpine.DEB.2.00.1010241851180.21275@tvnag.unkk.fr>
	<4CC47A13.2010407@peut.org>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Sun, 24 Oct 2010 23:29:15 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Sun, 24 Oct 2010 23:29:11 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Sun, 24 Oct 2010, Jose Baars wrote:

> Any chance the 'multiple outgoing packets' can be extended ad infinitum, 
> using a queue/stack/list for all packets sent?

Yes, I think we need to do that. My description with two parts was mainly for 
explanatory reasons. I hope to be able to experiement with the number of 
packets and see what turns out useful.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 25 01:42:33 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9ONgEbn010081;
	Mon, 25 Oct 2010 01:42:31 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9ONgDMF010076
	for <libssh2-devel@cool.haxx.se>; Mon, 25 Oct 2010 01:42:13 +0200
Date: Mon, 25 Oct 2010 01:42:13 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Enhanced buffering made faster uploads!
In-Reply-To: <alpine.DEB.2.00.1010241851180.21275@tvnag.unkk.fr>
Message-ID: <alpine.DEB.2.00.1010250137070.21275@tvnag.unkk.fr>
References: <alpine.DEB.2.00.1010241851180.21275@tvnag.unkk.fr>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 25 Oct 2010 01:42:33 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 25 Oct 2010 01:42:13 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Sun, 24 Oct 2010, Daniel Stenberg wrote:

> The 1.2.7 version it averaged at:
>
> 1024000000 bytes in 43 seconds = 23813953 bytes/sec
>
> The current git version averages at:
>
> 1024000000 bytes in 30 seconds = 34133333 bytes/sec

I think I found a flaw in my test that made it not really acting correctly.

But it doesn't matter very much. My current git version is now averaging at 
around 25 seconds for the same file (now closing in on OpenSSH for real) using 
several outstanding packets and this approach should also be a lot better for 
high latencies. I've experimented with packet sizes between 10K and 30K for 
this but for my no-latency test I figure it's not really that telling.

I'll have to setup a way to run my tests over a network with very large 
latency. I believe I know how...

Time to call it a night!

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 25 10:49:23 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9P8mvVT021701;
	Mon, 25 Oct 2010 10:49:17 +0200
Received: from mail-qw0-f54.google.com (mail-qw0-f54.google.com
	[209.85.216.54])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9P8muIj021679
	for <libssh2-devel@cool.haxx.se>; Mon, 25 Oct 2010 10:48:56 +0200
Received: by qwe4 with SMTP id 4so1415891qwe.41
	for <libssh2-devel@cool.haxx.se>; Mon, 25 Oct 2010 01:48:48 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:mime-version:received:sender:received
	:in-reply-to:references:date:x-google-sender-auth:message-id:subject
	:from:to:content-type;
	bh=ThTPVHLSPUqolWa7UmnsD8zRyTx0NlwWLUynkdGkM4A=;
	b=FAPu5BQZptoTzFsIVtkrMOwTLt5HHJsq5xFYXSCr/BzWMTBbf5Xu5oqcv4EteSYU5F
	uV8cqjDJMkDEAjnkdKGrDxI3D1+jpI/mRA33naSS2HZXZ7vac4UIHD8ND8T/DF3eHzz1
	uc2gjaaMtMMCZYxMsCLUfmQUoXg8gGTWyF2Qk=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=mime-version:sender:in-reply-to:references:date
	:x-google-sender-auth:message-id:subject:from:to:content-type;
	b=Q+l6P8/l4XI+9+GxTAxrOpTmjKrpzmtwrXUQAlaenzGTHOFDjk/AaJ6XrhcwZoI1/u
	Z0/LNvpy7PbV3nfd0Xm+bX9pKCmv7/r7FXyHXunCHKdHONJzysWYd/NkcSEsVbNj4ajj
	QIO4uoGqcWEjXIEtHK1iRsncCeFB4y8ZPWrOw=
MIME-Version: 1.0
Received: by 10.229.234.2 with SMTP id ka2mr6037785qcb.170.1287996527982; Mon,
	25 Oct 2010 01:48:47 -0700 (PDT)
Received: by 10.229.69.210 with HTTP; Mon, 25 Oct 2010 01:48:47 -0700 (PDT)
In-Reply-To: <alpine.DEB.2.00.1010250137070.21275@tvnag.unkk.fr>
References: <alpine.DEB.2.00.1010241851180.21275@tvnag.unkk.fr>
	<alpine.DEB.2.00.1010250137070.21275@tvnag.unkk.fr>
Date: Mon, 25 Oct 2010 10:48:47 +0200
X-Google-Sender-Auth: o_ipOXwKRXR84ZsDxa3broZJ-yo
Message-ID: <AANLkTi=HtPgUGf7-nrz0NJ+8wV7BhAfJ7336OFuyYZ=V@mail.gmail.com>
Subject: Re: Enhanced buffering made faster uploads!
From: Tor Arntsen <tor@spacetec.no>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 25 Oct 2010 10:49:23 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 25 Oct 2010 10:48:56 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Mon, Oct 25, 2010 at 01:42, Daniel Stenberg <daniel@haxx.se> wrote:

> I'll have to setup a way to run my tests over a network with very large
> latency. I believe I know how...

When testing networking for a customer with high-speed, long-latency
network issues I used a nistnet setup with three computers: One in the
middle w/two network cards (gigabit, in this case), running nistnet,
and two others representing the endpoints.  The nistnet software let
me set bandwidth, latency, packet loss etc. In addition I used 'pload'
just for graphical monitoring of speed. This worked very well and you
can really simulate just about anything. (NB: As soon as you go into
high bandwith, long latency setups you'll begin to get affected by the
kernel's networking setup itself, which may affect things.)

-Tor
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 25 15:05:27 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9PD5Btn011499;
	Mon, 25 Oct 2010 15:05:25 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9PD5AuO011492
	for <libssh2-devel@cool.haxx.se>; Mon, 25 Oct 2010 15:05:10 +0200
Date: Mon, 25 Oct 2010 15:05:10 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Enhanced buffering made faster uploads!
In-Reply-To: <AANLkTi=HtPgUGf7-nrz0NJ+8wV7BhAfJ7336OFuyYZ=V@mail.gmail.com>
Message-ID: <alpine.DEB.2.00.1010251503280.4345@tvnag.unkk.fr>
References: <alpine.DEB.2.00.1010241851180.21275@tvnag.unkk.fr>
	<alpine.DEB.2.00.1010250137070.21275@tvnag.unkk.fr>
	<AANLkTi=HtPgUGf7-nrz0NJ+8wV7BhAfJ7336OFuyYZ=V@mail.gmail.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 25 Oct 2010 15:05:27 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 25 Oct 2010 15:05:10 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Mon, 25 Oct 2010, Tor Arntsen wrote:

> When testing networking for a customer with high-speed, long-latency network 
> issues I used a nistnet setup with three computers

Yeah, I bet that's a sweet setup for this - thanks for providing some idea. I 
only have one dev machine for this so my plan is to go with this approach to 
start with:

http://people.redhat.com/berrange/notes/network-delay.html

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 25 19:18:52 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9PHISJH009962;
	Mon, 25 Oct 2010 19:18:48 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9PHIRBg009943
	for <libssh2-devel@cool.haxx.se>; Mon, 25 Oct 2010 19:18:27 +0200
Date: Mon, 25 Oct 2010 19:18:27 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: remodelled SFTP code pushed
Message-ID: <alpine.DEB.2.00.1010251914250.15238@tvnag.unkk.fr>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 25 Oct 2010 19:18:52 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 25 Oct 2010 19:18:27 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Hi friends,

I've pushed my most recent SFTP changes as well now, so please have a go at it 
and see if it still works for you and perhaps even check how fast/slow it 
works for use cases. I'm sure I've made mistakes and that there are further 
tweaks to be done.

The fact that the code does some assumptions on the data provided in the 
function calls I fear that it might break some applications and I'm 
considering adding a way to disable this "write ahead" concept.

I intend to introduce the same concept for SFTP reading next.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 25 21:17:40 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9PJHN0g015882;
	Mon, 25 Oct 2010 21:17:36 +0200
Received: from ponderosa.fch.wimsey.bc.ca (zz20920564179.cipherkey.net
	[209.205.64.179])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9PJHLpp015876
	for <libssh2-devel@cool.haxx.se>; Mon, 25 Oct 2010 21:17:22 +0200
Received: by coneharvesters.com
	via sendmail with stdio id <m1PASXg-000l6IC@ponderosa.fch.wimsey.bc.ca>
	for libssh2-devel@cool.haxx.se; Mon, 25 Oct 2010 12:17:12 -0700 (PDT)
Date: Mon, 25 Oct 2010 12:17:11 -0700
From: Dan Fandrich <dan@coneharvesters.com>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: libssh2 test failure
Message-ID: <20101025191711.GA14976@coneharvesters.com>
Mail-Followup-To: libssh2 development <libssh2-devel@cool.haxx.se>
MIME-Version: 1.0
Content-Disposition: inline
User-Agent: Mutt/1.5.21 (2010-09-15)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 25 Oct 2010 21:17:40 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 25 Oct 2010 21:17:22 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

The second of the two libssh2 self-tests is now failing for me. I've
tried it on x86 Linux with both gcc 4.2.2 and OpenWatcom C 1.9, and
with both OpenSSL 0.9.8e and GnuTLS 2.8.3, using OpenSSH 4.7p1 as the test
server.  git bisect points to commit c48840ba as the culprit:
_libssh2_transport_send: replaces _libssh2_transport_write
I can get some logs if anyone else has trouble reproducing this.

>>> Dan
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Oct 25 22:07:26 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9PK6vir010522;
	Mon, 25 Oct 2010 22:07:25 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9PK6tfa010510
	for <libssh2-devel@cool.haxx.se>; Mon, 25 Oct 2010 22:06:55 +0200
Date: Mon, 25 Oct 2010 22:06:55 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: libssh2 test failure
In-Reply-To: <20101025191711.GA14976@coneharvesters.com>
Message-ID: <alpine.DEB.2.00.1010252206300.15238@tvnag.unkk.fr>
References: <20101025191711.GA14976@coneharvesters.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Mon, 25 Oct 2010 22:07:26 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Mon, 25 Oct 2010 22:06:55 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Mon, 25 Oct 2010, Dan Fandrich wrote:

> The second of the two libssh2 self-tests is now failing for me. I've tried 
> it on x86 Linux with both gcc 4.2.2 and OpenWatcom C 1.9, and with both 
> OpenSSL 0.9.8e and GnuTLS 2.8.3, using OpenSSH 4.7p1 as the test server. 
> git bisect points to commit c48840ba as the culprit: 
> _libssh2_transport_send: replaces _libssh2_transport_write I can get some 
> logs if anyone else has trouble reproducing this.

Thanks, I forgot about those and yeah I get the error too. I'll work on it!

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 27 10:11:39 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9R8BINN031654;
	Wed, 27 Oct 2010 10:11:35 +0200
Received: from earth.stuge.se (earth.stuge.se [213.88.146.15])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9R8BH85031651
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 27 Oct 2010 10:11:17 +0200
Received: (qmail 25767 invoked from network); 27 Oct 2010 08:11:15 -0000
Received: from unknown (HELO earth.stuge.se) (127.0.0.1)
	by localhost with SMTP; 27 Oct 2010 08:11:15 -0000
MIME-Version: 1.0
From: "libssh2 Trac" <trac@libssh2.stuge.se>
X-Trac-Version: 0.12
Precedence: bulk
Cc: libssh2-devel@cool.haxx.se
Auto-Submitted: auto-generated
X-Mailer: Trac 0.12, by Edgewall Software
X-Trac-Project: libssh2
Date: Wed, 27 Oct 2010 08:11:15 -0000
X-URL: http://trac.libssh2.org/
Subject: [libssh2] #192: fix memory leak in userauth_keyboard_interactive()
X-Trac-Ticket-URL: http://trac.libssh2.org/ticket/192
Message-ID: <108.2f778684bcb77375012a94a368ec89ac@libssh2.stuge.se>
X-Trac-Ticket-ID: 192
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 27 Oct 2010 10:11:39 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 27 Oct 2010 10:11:17 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Reply-To: trac@libssh2.stuge.se,
        libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

#192: fix memory leak in userauth_keyboard_interactive()
---------------------------------------------------------------------------------------+
  Reporter:  www.google.com/accounts/o8/id?id=aitoawle7oko7wvopccjqdxoim5mmykrk4imu8o  |       Owner:       
      Type:  defect                                                                    |      Status:  new  
  Priority:  normal                                                                    |   Milestone:  1.2.7
 Component:  SFTP                                                                      |     Version:  1.2.7
  Keywords:                                                                            |      Blocks:       
Blocked By:                                                                            |  
---------------------------------------------------------------------------------------+
 I had two memory leaks for a sftp session. Using libssh2 1.2.7 with
 libcurl 7.21.2.

-- 
Ticket URL: <http://trac.libssh2.org/ticket/192>
libssh2 <http://trac.libssh2.org/>
C library for writing portable SSH2 clients
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 27 10:14:27 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9R8EPvZ032763;
	Wed, 27 Oct 2010 10:14:27 +0200
Received: from earth.stuge.se (earth.stuge.se [213.88.146.15])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9R8EPe8032748
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 27 Oct 2010 10:14:25 +0200
Received: (qmail 26088 invoked from network); 27 Oct 2010 08:14:23 -0000
Received: from unknown (HELO earth.stuge.se) (127.0.0.1)
	by localhost with SMTP; 27 Oct 2010 08:14:23 -0000
MIME-Version: 1.0
From: "libssh2 Trac" <trac@libssh2.stuge.se>
X-Trac-Version: 0.12
Precedence: bulk
Cc: libssh2-devel@cool.haxx.se
Auto-Submitted: auto-generated
X-Mailer: Trac 0.12, by Edgewall Software
X-Trac-Project: libssh2
Date: Wed, 27 Oct 2010 08:14:23 -0000
X-URL: http://trac.libssh2.org/
Subject: [libssh2] #193: fix memory leaks (two times cipher_data) for each
	sftp session
X-Trac-Ticket-URL: http://trac.libssh2.org/ticket/193
Message-ID: <108.a829986f37e7ce38b9e9f1756b25519f@libssh2.stuge.se>
X-Trac-Ticket-ID: 193
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 27 Oct 2010 10:14:27 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 27 Oct 2010 10:14:25 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Reply-To: trac@libssh2.stuge.se,
        libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

#193: fix memory leaks (two times cipher_data) for each sftp session
---------------------------------------------------------------------------------------+
  Reporter:  www.google.com/accounts/o8/id?id=aitoawle7oko7wvopccjqdxoim5mmykrk4imu8o  |       Owner:       
      Type:  defect                                                                    |      Status:  new  
  Priority:  normal                                                                    |   Milestone:  1.2.7
 Component:  SFTP                                                                      |     Version:  1.2.7
  Keywords:                                                                            |      Blocks:       
Blocked By:                                                                            |  
---------------------------------------------------------------------------------------+
 I had a memory leak (cipher_data) for a sftp session. Using libssh2 1.2.7
 with libcurl 7.21.2.

-- 
Ticket URL: <http://trac.libssh2.org/ticket/193>
libssh2 <http://trac.libssh2.org/>
C library for writing portable SSH2 clients
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 27 11:46:48 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9R9katY025578;
	Wed, 27 Oct 2010 11:46:47 +0200
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9R9kZL0025574
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 27 Oct 2010 11:46:36 +0200
Received: from latte.josefsson.org (c80-216-27-64.bredband.comhem.se
	[80.216.27.64]) (authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5+lenny1) with ESMTP id
	o9R9kQDk011458
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 27 Oct 2010 11:46:28 +0200
X-Hashcash: 1:22:101027:libssh2-devel@cool.haxx.se::6ahNno4/OawAIh94:EXCj
From: Simon Josefsson <simon@josefsson.org>
To: libssh2-devel@cool.haxx.se
Subject: build error
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
Date: Wed, 27 Oct 2010 11:46:26 +0200
Message-ID: <87aam02cjx.fsf@latte.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.2 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.8 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.96.3 at yxa-v
X-Virus-Status: Clean
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 27 Oct 2010 11:46:48 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 27 Oct 2010 11:46:36 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Y2hhbm5lbC5jOjEyOTogZXJyb3I6IGNvbmZsaWN0aW5nIHR5cGVzIGZvciDigJhfbGlic3NoMl9j
aGFubmVsX29wZW7igJkKY2hhbm5lbC5oOjkxOiBub3RlOiBwcmV2aW91cyBkZWNsYXJhdGlvbiBv
ZiDigJhfbGlic3NoMl9jaGFubmVsX29wZW7igJkgd2FzIGhlcmUKCkluZGVlZCwgdGhlIGZvbGxv
d2luZyBjb21taXQgY2hhbmdlZCB0aGUgcHJvdG90eXBlIG9mIHRoZSBmdW5jdGlvbiBmcm9tCid1
bnNpZ25lZCBpbnQnIHRvICdzaXplX3QnLgoKaHR0cDovL2dpdC5saWJzc2gyLm9yZy8/cD1saWJz
c2gyLmdpdDthPWNvbW1pdGRpZmY7aD1jNDg4NDBiYTg4N2RhMDczN2Y5ZWZmYzQ3NDM2OTg5OGUy
YTRlODVlO2pzPTEKClRoYXQgbG9va2VkIGxpa2UgYSBnb29kIGNoYW5nZSwgc28gSSBmaXhlZCB0
aGUgaGVhZGVyIGZpbGU6CgpodHRwOi8vZ2l0LmxpYnNzaDIub3JnLz9wPWxpYnNzaDIuZ2l0O2E9
Y29tbWl0ZGlmZjtoPTFkYzM2NjEwOWRiMzAwYWIwZTRhM2U1ODMwYjQ2MGE5YjlmMzZjMzQ7anM9
MQoKL1NpbW9uCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CmxpYnNzaDItZGV2ZWwgaHR0cDovL2Nvb2wuaGF4eC5zZS9jZ2ktYmluL21haWxtYW4vbGlzdGlu
Zm8vbGlic3NoMi1kZXZlbAo=

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 27 12:29:51 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9RATeNG017744;
	Wed, 27 Oct 2010 12:29:50 +0200
Received: from nm7-vm0.bullet.mail.sp2.yahoo.com
	(nm7-vm0.bullet.mail.sp2.yahoo.com [98.139.91.192])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with SMTP id o9RATbI4017733
	for <libssh2-devel@cool.haxx.se>; Wed, 27 Oct 2010 12:29:37 +0200
Received: from [98.139.91.61] by nm7.bullet.mail.sp2.yahoo.com with NNFMP;
	27 Oct 2010 10:29:29 -0000
Received: from [98.139.91.7] by tm1.bullet.mail.sp2.yahoo.com with NNFMP;
	27 Oct 2010 10:29:29 -0000
Received: from [127.0.0.1] by omp1007.mail.sp2.yahoo.com with NNFMP;
	27 Oct 2010 10:29:29 -0000
X-Yahoo-Newman-Property: ymail-3
X-Yahoo-Newman-Id: 512683.37643.bm@omp1007.mail.sp2.yahoo.com
Received: (qmail 86254 invoked by uid 60001); 27 Oct 2010 10:29:29 -0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024;
	t=1288175369; bh=EBFcYWQPl+hTAX4jW5XwsTMfA1vazKif0vCiwZT1Da4=;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:Date:From:Subject:To:MIME-Version:Content-Type;
	b=PrRqhHpcTfGsFyfnqT1wAL2y6CQ031jOemJLxaKn3ce/ZZqU9lneX2ajGaxwXZYnzJAeWmCQbxEMd5UHnupAwGjjGhsIoRfp9rD0ANkbjjfs5jGu5kU7SCL1iBLrFmh+OKS30aKfCmZasf2T1bohGH0qtWLFo20ekTUMpJ562Gc=
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:Date:From:Subject:To:MIME-Version:Content-Type;
	b=C9szNmjpHY+pn4XMLq5kyxEa5ddQHoc61iwK8Q1acNI6nMSeHvEQM4S9v921KBTfIMN7LLEQQTpPKGdcbv4OSZ99x6JMm9rvvFJlx0zAHWnOLl4qmK2xaliYCJMIZnx0g2pWXOF76+XIB7NOvoh/6ZeKAE3dvM67PINzhuILumU=;
Message-ID: <243996.85925.qm@web46213.mail.sp1.yahoo.com>
X-YMail-OSG: pAYYzmcVM1nVOOcQLkg.DW123dZEelThA0tQD4ZUEUbn1PP
	pg6iF7MtQzgycL6GqWl6U7tRIBXZmF13GW5deI51UDyWjgsIL5s2PeUO1Zfe
	6exoKYLNAU1DZkaBIsbLGShMcX_GNx8Co4Or_YD5tYaJ2W3zxFHeEjhnQwJP
	gKccWpeTtagQ3xx5DzUQFk1lS8efq0n1zypP3T2hGYJhDv75A5Z9ZhVcIoxm
	YJpPnxm1SA3EgEF.FFkkCoEkxJJkFghg_Cg0BKFRtczrAIrXAnMXYTPfr
Received: from [41.100.119.109] by web46213.mail.sp1.yahoo.com via HTTP;
	Wed, 27 Oct 2010 03:29:29 PDT
X-Mailer: YahooMailClassic/11.4.9 YahooMailWebService/0.8.107.284920
Date: Wed, 27 Oct 2010 03:29:29 -0700 (PDT)
From: SIFE Abdelrazak <sife_php@yahoo.com>
Subject: Fail to login with libshh2
To: libssh2-devel@cool.haxx.se
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 27 Oct 2010 12:29:51 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 27 Oct 2010 12:29:39 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============2127979113=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--===============2127979113==
Content-Type: multipart/alternative; boundary="0-863845930-1288175369=:85925"

--0-863845930-1288175369=:85925
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable


I write this piece of code but when I try to connect to server I get "Inval=
id password":
#include<stdio.h>=0A#include<stdlib.h>=0A#include<libssh2.h>=0A#include<sys=
/socket.h>=0A#include<netinet/in.h>=0A#include<sys/types.h>=0A=0A#define PO=
RT 22=0A=0Amain()=0A {=0A  int ss, sshsock, lstat; =0A  char *ulogin =3D "t=
st";=0A  char *password =3D "pass";=0A  char *ADDR =3D "127.0.0.1";=0A  str=
uct sockaddr_in sin;=0A  LIBSSH2_SESSION *session;=0A  sshsock =3D socket(A=
F_INET, SOCK_STREAM, 0);=0A  sin.sin_family =3D AF_INET;=0A  sin.sin_port =
=3D htons(PORT);=0A  sin.sin_addr.s_addr =3D inet_addr(ADDR);=0A  connect(s=
shsock, (struct sockaddr*)(&sin), sizeof(struct sockaddr_in));=0A  session =
=3D libssh2_session_init();=0A  if(session =3D=3D NULL)=0A   {=0A    printf=
("Fail to initial SSH session\n");=0A    exit(0);=0A   }=0A  ss =3D libssh2=
_session_startup(session, sshsock);=0A  if(ss < 0)=0A   {=0A    printf("Fai=
l to startup SSH session\n");=0A     exit(0);=0A   }=0A  lstat =3D libssh2_=
userauth_password_ex(session, ulogin, strlen(ulogin), password, strlen(pass=
word), NULL);=0A  if(lstat =3D=3D 0)=0A   printf("Login successed\n");=0A  =
else=0A   printf("Invalid password\n");=0A  /* disconnect from ssh server *=
/ =0A  libssh2_session_disconnect(session, 0);=0A  /* free ssh session */=
=0A  libssh2_session_free(session);=0A  /* exit from libssh2 */=0A  libssh2=
_exit();=0A  /* close descriptor of socket */=0A  close(sshsock);=0A  retur=
n 0;=0A }
gcc -o sshc sshc.c -I/usr/local/include -L/usr/local/lib -lssh2

                                 =20
=0A=0A
--0-863845930-1288175369=:85925
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

<table cellspacing=3D"0" cellpadding=3D"0" border=3D"0" ><tr><td valign=3D"=
top" style=3D"font: inherit;"><br>I write this piece of code but when I try=
 to connect to server I get "Invalid password":<br><pre class=3D"alt2" dir=
=3D"ltr" style=3D"margin: 0px; padding: 6px; border: 1px inset; width: auto=
; height: 498px; text-align: left; overflow: auto;">#include&lt;stdio.h&gt;=
=0A#include&lt;stdlib.h&gt;=0A#include&lt;libssh2.h&gt;=0A#include&lt;sys/s=
ocket.h&gt;=0A#include&lt;netinet/in.h&gt;=0A#include&lt;sys/types.h&gt;=0A=
=0A#define PORT 22=0A=0Amain()=0A {=0A  int ss, sshsock, lstat; =0A  char *=
ulogin =3D "tst";=0A  char *password =3D "pass";=0A  char *ADDR =3D "127.0.=
0.1";=0A  struct sockaddr_in sin;=0A  LIBSSH2_SESSION *session;=0A  sshsock=
 =3D socket(AF_INET, SOCK_STREAM, 0);=0A  sin.sin_family =3D AF_INET;=0A  s=
in.sin_port =3D htons(PORT);=0A  sin.sin_addr.s_addr =3D inet_addr(ADDR);=
=0A  connect(sshsock, (struct sockaddr*)(&amp;sin), sizeof(struct sockaddr_=
in));=0A  session =3D libssh2_session_init();=0A  if(session =3D=3D NULL)=
=0A   {=0A    printf("Fail to initial SSH session\n");=0A    exit(0);=0A   =
}=0A  ss =3D libssh2_session_startup(session, sshsock);=0A  if(ss &lt; 0)=
=0A   {=0A    printf("Fail to startup SSH session\n");=0A     exit(0);=0A  =
 }=0A  lstat =3D libssh2_userauth_password_ex(session, ulogin, strlen(ulogi=
n), password, strlen(password), NULL);=0A  if(lstat =3D=3D 0)=0A   printf("=
Login successed\n");=0A  else=0A   printf("Invalid password\n");=0A  /* dis=
connect from ssh server */ =0A  libssh2_session_disconnect(session, 0);=0A =
 /* free ssh session */=0A  libssh2_session_free(session);=0A  /* exit from=
 libssh2 */=0A  libssh2_exit();=0A  /* close descriptor of socket */=0A  cl=
ose(sshsock);=0A  return 0;=0A }<br>gcc -o sshc sshc.c -I/usr/local/include=
 -L/usr/local/lib -lssh2<br></pre><br><div style=3D"text-align: center;"><f=
ont size=3D"3"><a rel=3D"nofollow" style=3D"font-weight: bold;" target=3D"_=
blank" href=3D"http://0xsife.org/">                 </a><font style=3D"font=
-weight: bold;" size=3D"4"><a rel=3D"nofollow" target=3D"_blank" href=3D"ht=
tp://0xsife.org/">                 </a></font><br style=3D"font-weight: bol=
d;"></font></div></td></tr></table><br>
--0-863845930-1288175369=:85925--

--===============2127979113==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============2127979113==--

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 27 13:58:22 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9RBvftL005254;
	Wed, 27 Oct 2010 13:58:16 +0200
Received: from mail-gy0-f182.google.com (mail-gy0-f182.google.com
	[209.85.160.182])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9RBvcnP005239
	for <libssh2-devel@cool.haxx.se>; Wed, 27 Oct 2010 13:57:39 +0200
Received: by gya6 with SMTP id 6so355724gya.41
	for <libssh2-devel@cool.haxx.se>; Wed, 27 Oct 2010 04:57:30 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.42.212.19 with SMTP id gq19mr3390830icb.512.1288180650152;
	Wed, 27 Oct 2010 04:57:30 -0700 (PDT)
Received: by 10.231.36.195 with HTTP; Wed, 27 Oct 2010 04:57:30 -0700 (PDT)
Date: Wed, 27 Oct 2010 13:57:30 +0200
Message-ID: <AANLkTik671+1fZwaEZiKAw2cRzxThoMFD+z=uRVgbeKx@mail.gmail.com>
Subject: sftp.h missing?
From: Jose Baars <peut@peut.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 27 Oct 2010 13:58:22 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 27 Oct 2010 13:57:39 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============0133356844=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--===============0133356844==
Content-Type: multipart/alternative; boundary=20cf303bf6680f138b049397eec5

--20cf303bf6680f138b049397eec5
Content-Type: text/plain; charset=ISO-8859-1

Pulling the latest snapshot, I couldn't find sftp.h as included in sftp.c.
Is it me or is it just missing?

Jose Baars

--20cf303bf6680f138b049397eec5
Content-Type: text/html; charset=ISO-8859-1

Pulling the latest snapshot, I couldn&#39;t find sftp.h as included in sftp.c.<br>Is it me or is it just missing?<br><br>Jose Baars<br>

--20cf303bf6680f138b049397eec5--

--===============0133356844==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============0133356844==--

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 27 14:44:41 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9RCiBfR001712;
	Wed, 27 Oct 2010 14:44:40 +0200
Received: from web29708.mail.ird.yahoo.com (web29708.mail.ird.yahoo.com
	[77.238.189.153])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with SMTP id o9RCi9aA001682
	for <libssh2-devel@cool.haxx.se>; Wed, 27 Oct 2010 14:44:10 +0200
Received: (qmail 59264 invoked by uid 60001); 27 Oct 2010 12:44:02 -0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024;
	t=1288183442; bh=VEUeeI+ntuUNhRe9guhJXvhpTj71ZJnYqTPv1PWLH58=;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type;
	b=2O7q8JPLd0BMfXIIuJiDy81j126HIMoB+xqAc18QugTBlCg3svCDutsNQr2QD19tVz4rm/nxkYjwo5ZhKkfz1VtwwRPs8H/Ittolgais3/h0gKjXJHWrx+6f6HO6mBU+YolT72MJG1cO+rfOtVOKTe4QokjQ9ItHbO6E5xSWzec=
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type;
	b=O7qEk0MW3dny9uOKcFAtphBzGmclf2Jh9uvOhBQuB/yPTkZM7iNltYmXOSGaIScQK+ipngaTMe3ZRlyXkJEjj6EAOO6EySu4krjW/iaTWLP/HAAie7tBYEV7h4fUBAZCElS3XTpERa/xkzhAkWD0NpmfhutFl5XvSoCjBinvPCg=;
Message-ID: <435147.58763.qm@web29708.mail.ird.yahoo.com>
X-YMail-OSG: ppQQnMIVM1l0yr_2nfM3HYEdzgI5evo9lnRPbXM3X3IbGXD
	Mmh_cqlWZy3MX8_TCMq2fP1qMgEOAK3WxYbUs3o_fJdEVl_TZpRCOlMIeAv6
	LhLBjKZtjjSloMDBgr6lDq.k2QVk3njtfBHdZRvPnPyCSDR7B.MQsvrJmN1K
	gZl_4Aq2PbkjXzZiXjkoNUpTjsrHsWU2zwbkn.5qKB4LtfdEU8N.PTrEqD1f
	TUV.gDDqu3jhw_u1q6CQENryZX8TbhWaXX6zBjZUnHDrg1R712mmItONFL5k -
Received: from [192.100.130.238] by web29708.mail.ird.yahoo.com via HTTP;
	Wed, 27 Oct 2010 13:44:02 BST
X-Mailer: YahooMailRC/504.5 YahooMailWebService/0.8.107.284920
References: <243996.85925.qm@web46213.mail.sp1.yahoo.com>
Date: Wed, 27 Oct 2010 13:44:02 +0100 (BST)
From: may nothing <may_241913@yahoo.com>
Subject: AW: Fail to login with libshh2
To: libssh2 development <libssh2-devel@cool.haxx.se>
In-Reply-To: <243996.85925.qm@web46213.mail.sp1.yahoo.com>
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 27 Oct 2010 14:44:41 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 27 Oct 2010 14:44:10 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============0997167865=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--===============0997167865==
Content-Type: multipart/alternative; boundary="0-779888655-1288183442=:58763"

--0-779888655-1288183442=:58763
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

=0A=0A>I write this piece of code but when I try to connect to server I get=
 "Invalid =0A>password": =0A>=0ADid you check if your server supports authe=
ntification by password (not by =0Akeyboard interactive - that's something =
different)=0A=0Acu=0Amay=0A=0A=0A
--0-779888655-1288183442=:58763
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

<html><head><style type=3D"text/css"><!-- DIV {margin:0px;} --></style></he=
ad><body><div style=3D"font-family:times new roman,new york,times,serif;fon=
t-size:12pt"><br><div style=3D"font-family: times new roman,new york,times,=
serif; font-size: 12pt;"><div style=3D"font-family: times new roman,new yor=
k,times,serif; font-size: 12pt;"><table border=3D"0" cellpadding=3D"0" cell=
spacing=3D"0"><tbody><tr><td style=3D"font: inherit;" valign=3D"top">&gt;I =
write this piece of code but when I try to connect to server I get "Invalid=
 password":</td></tr></tbody></table><br>Did you check if your server suppo=
rts authentification by password (not by keyboard interactive - that's some=
thing different)<br><br>cu<br>may<br><meta http-equiv=3D"x-dns-prefetch-con=
trol" content=3D"on"></div></div>=0A</div><br></body></html>
--0-779888655-1288183442=:58763--

--===============0997167865==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============0997167865==--

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 27 14:45:24 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9RCjM0o002925;
	Wed, 27 Oct 2010 14:45:23 +0200
Received: from web29708.mail.ird.yahoo.com (web29708.mail.ird.yahoo.com
	[77.238.189.153])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with SMTP id o9RCjKmc002827
	for <libssh2-devel@cool.haxx.se>; Wed, 27 Oct 2010 14:45:20 +0200
Received: (qmail 59906 invoked by uid 60001); 27 Oct 2010 12:45:12 -0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024;
	t=1288183512; bh=gvj+lBWpURy81xA28S7DVOnLUqaZfmzuRYwK7Q+mm2I=;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type;
	b=2kKAblnC8DxnMhp8ht4aocpPQOnWP2SjJaUej2wkqvrUmFZakk4c+v1BZNyP2cnN8Cxrmw1uu/I7uRLsSlw9oY54W0wWeYa04xcSWJwFxho/55Nswgj+rApQ1CDEyiqjAEXnfD86qVIM1imVAfmL5/rghSgwUuVP69tPwzRd+VQ=
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type;
	b=hMn9+pngsSX9FhT9lzfOESwR/H8zHwoCYkdljLBjiYE73o/VAfw3L7tp7/QQ1zLnxPrY601BBmyZn0UB4QR0QWFqEC2MSY1iwJ1jOAXisDJA9cS3ls5pSkUswKVH7U9qiNz8ie94tvoyWTKkw73e6LG6C9FiUU1ZPylkmiSq+x8=;
Message-ID: <697469.59036.qm@web29708.mail.ird.yahoo.com>
X-YMail-OSG: UZwM4ooVM1nKPgQVbjTtQdr7sxMSgZQWgpXpDgKIeBC0Gp6
	LYpwknpHl2ScPo5OrVfpsSjaWiWwLh.lNokRybUnqCuMIuvkfHs1XViElvEo
	BHH8zHhmUMvaw6Kz8ueMONZjzVGcaWPEj8PU.PFAl0cE2DD7zLQb88MOoSGh
	Nrlj6pkyWZWzx9Ias4UnWH_llsZ_HVrtmTzqDGb.mlslYz2EaXYbwWtYWOWE
	w.T5S2mZi8QeiktveCce1I_8gCvoD_1e9USLjD063WiuCfOIE6RLKc.onFGc -
Received: from [192.100.130.238] by web29708.mail.ird.yahoo.com via HTTP;
	Wed, 27 Oct 2010 13:45:12 BST
X-Mailer: YahooMailRC/504.5 YahooMailWebService/0.8.107.284920
References: <AANLkTik671+1fZwaEZiKAw2cRzxThoMFD+z=uRVgbeKx@mail.gmail.com>
Date: Wed, 27 Oct 2010 13:45:12 +0100 (BST)
From: may nothing <may_241913@yahoo.com>
Subject: AW: sftp.h missing?
To: libssh2 development <libssh2-devel@cool.haxx.se>
In-Reply-To: <AANLkTik671+1fZwaEZiKAw2cRzxThoMFD+z=uRVgbeKx@mail.gmail.com>
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 27 Oct 2010 14:45:24 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 27 Oct 2010 14:45:20 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============2049431115=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--===============2049431115==
Content-Type: multipart/alternative; boundary="0-1600050181-1288183512=:59036"

--0-1600050181-1288183512=:59036
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

=0A=0A>Pulling the latest snapshot, I couldn't find sftp.h as included in s=
ftp.c.=0A>Is it me or is it just missing?=0A=0AIt's supposed to be in /usr/=
local/include ...=0A=0Acu=0Amay=0A=0A=0A
--0-1600050181-1288183512=:59036
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

<html><head><style type=3D"text/css"><!-- DIV {margin:0px;} --></style></he=
ad><body><div style=3D"font-family:times new roman,new york,times,serif;fon=
t-size:12pt"><br><div style=3D"font-family: times new roman,new york,times,=
serif; font-size: 12pt;"><div style=3D"font-family: times new roman,new yor=
k,times,serif; font-size: 12pt;"><meta http-equiv=3D"x-dns-prefetch-control=
" content=3D"off">&gt;Pulling the latest snapshot, I couldn't find sftp.h a=
s included in sftp.c.<br>&gt;Is it me or is it just missing?<br><br>It's su=
pposed to be in /usr/local/include ...<br><br>cu<br>may<br>=0A<meta http-eq=
uiv=3D"x-dns-prefetch-control" content=3D"on"></div></div>=0A</div><br></bo=
dy></html>
--0-1600050181-1288183512=:59036--

--===============2049431115==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============2049431115==--

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 27 14:49:02 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9RCmxog003910;
	Wed, 27 Oct 2010 14:49:01 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9RCmvG1003904
	for <libssh2-devel@cool.haxx.se>; Wed, 27 Oct 2010 14:48:57 +0200
Date: Wed, 27 Oct 2010 14:48:57 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: sftp.h missing?
In-Reply-To: <AANLkTik671+1fZwaEZiKAw2cRzxThoMFD+z=uRVgbeKx@mail.gmail.com>
Message-ID: <alpine.DEB.2.00.1010271448160.10273@tvnag.unkk.fr>
References: <AANLkTik671+1fZwaEZiKAw2cRzxThoMFD+z=uRVgbeKx@mail.gmail.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 27 Oct 2010 14:49:02 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 27 Oct 2010 14:48:57 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Wed, 27 Oct 2010, Jose Baars wrote:

> Pulling the latest snapshot, I couldn't find sftp.h as included in sftp.c. 
> Is it me or is it just missing?

Sorry, my fault. It is present in git, but I had forgot to add it to 
./Makefile.inc.

Done now, so it should appear in tomorrow's snapshot. Thanks for pointing this 
out!

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 27 14:50:20 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9RCoHHI005000;
	Wed, 27 Oct 2010 14:50:19 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9RCoGWM004994
	for <libssh2-devel@cool.haxx.se>; Wed, 27 Oct 2010 14:50:16 +0200
Date: Wed, 27 Oct 2010 14:50:16 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: AW: sftp.h missing?
In-Reply-To: <697469.59036.qm@web29708.mail.ird.yahoo.com>
Message-ID: <alpine.DEB.2.00.1010271449190.10273@tvnag.unkk.fr>
References: <AANLkTik671+1fZwaEZiKAw2cRzxThoMFD+z=uRVgbeKx@mail.gmail.com>
	<697469.59036.qm@web29708.mail.ird.yahoo.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 27 Oct 2010 14:50:20 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 27 Oct 2010 14:50:16 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Wed, 27 Oct 2010, may nothing wrote:

>> Pulling the latest snapshot, I couldn't find sftp.h as included in sftp.c.
>> Is it me or is it just missing?
>
> It's supposed to be in /usr/local/include ...

It most certainly is not.

sftp.h is a new (private) include file that should be in the src/ dir when the 
current libssh2 source is unpacked.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 27 14:51:13 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9RCpCRZ005307;
	Wed, 27 Oct 2010 14:51:13 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9RCpBt7005300
	for <libssh2-devel@cool.haxx.se>; Wed, 27 Oct 2010 14:51:11 +0200
Date: Wed, 27 Oct 2010 14:51:11 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: build error
In-Reply-To: <87aam02cjx.fsf@latte.josefsson.org>
Message-ID: <alpine.DEB.2.00.1010271450560.10273@tvnag.unkk.fr>
References: <87aam02cjx.fsf@latte.josefsson.org>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 27 Oct 2010 14:51:13 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 27 Oct 2010 14:51:11 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Wed, 27 Oct 2010, Simon Josefsson wrote:

> That looked like a good change, so I fixed the header file:

Thanks!

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 27 22:51:17 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9RKoZwY025579;
	Wed, 27 Oct 2010 22:51:13 +0200
Received: from earth.stuge.se (earth.stuge.se [213.88.146.15])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9RKoXs6025574
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 27 Oct 2010 22:50:33 +0200
Received: (qmail 26453 invoked from network); 27 Oct 2010 20:50:29 -0000
Received: from unknown (HELO earth.stuge.se) (127.0.0.1)
	by localhost with SMTP; 27 Oct 2010 20:50:29 -0000
MIME-Version: 1.0
From: "libssh2 Trac" <trac@libssh2.stuge.se>
X-Trac-Version: 0.12
Precedence: bulk
Cc: libssh2-devel@cool.haxx.se
Auto-Submitted: auto-generated
X-Mailer: Trac 0.12, by Edgewall Software
X-Trac-Project: libssh2
Date: Wed, 27 Oct 2010 20:50:29 -0000
X-URL: http://trac.libssh2.org/
Subject: Re: [libssh2] #192: fix memory leak in userauth_keyboard_interactive()
X-Trac-Ticket-URL: http://trac.libssh2.org/ticket/192#comment:1
Message-ID: <123.f49619e48ee739ec233b90a7228b70c9@libssh2.stuge.se>
References: <108.2f778684bcb77375012a94a368ec89ac@libssh2.stuge.se>
X-Trac-Ticket-ID: 192
In-Reply-To: <108.2f778684bcb77375012a94a368ec89ac@libssh2.stuge.se>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 27 Oct 2010 22:51:17 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 27 Oct 2010 22:50:33 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Reply-To: trac@libssh2.stuge.se,
        libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

#192: fix memory leak in userauth_keyboard_interactive()
---------------------------------------------------------------------------------------+
  Reporter:  www.google.com/accounts/o8/id?id=aitoawle7oko7wvopccjqdxoim5mmykrk4imu8o  |        Owner:        
      Type:  defect                                                                    |       Status:  closed
  Priority:  normal                                                                    |    Milestone:  1.2.8 
 Component:  SFTP                                                                      |      Version:  1.2.7 
Resolution:  fixed                                                                     |     Keywords:        
    Blocks:                                                                            |   Blocked By:        
---------------------------------------------------------------------------------------+
Changes (by bagder):

  * status:  new => closed
  * resolution:  => fixed
  * milestone:  1.2.7 => 1.2.8


Comment:

 Many thanks, this was committed and pushed. Commit
 b84f69c96059d870373aac85

-- 
Ticket URL: <http://trac.libssh2.org/ticket/192#comment:1>
libssh2 <http://trac.libssh2.org/>
C library for writing portable SSH2 clients
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 27 22:55:46 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9RKtgt9027802;
	Wed, 27 Oct 2010 22:55:44 +0200
Received: from earth.stuge.se (earth.stuge.se [213.88.146.15])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9RKteLN027764
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 27 Oct 2010 22:55:40 +0200
Received: (qmail 26859 invoked from network); 27 Oct 2010 20:55:36 -0000
Received: from unknown (HELO earth.stuge.se) (127.0.0.1)
	by localhost with SMTP; 27 Oct 2010 20:55:36 -0000
MIME-Version: 1.0
From: "libssh2 Trac" <trac@libssh2.stuge.se>
X-Trac-Version: 0.12
Precedence: bulk
Cc: libssh2-devel@cool.haxx.se
Auto-Submitted: auto-generated
X-Mailer: Trac 0.12, by Edgewall Software
X-Trac-Project: libssh2
Date: Wed, 27 Oct 2010 20:55:36 -0000
X-URL: http://trac.libssh2.org/
Subject: Re: [libssh2] #187: Unable to connect to SFTP server using
	SSH-2.0-SSHD
X-Trac-Ticket-URL: http://trac.libssh2.org/ticket/187#comment:1
Message-ID: <062.2d1e6bf69ef7292d15cab1f8871e84e9@libssh2.stuge.se>
References: <047.ff473ed169991c7f4a9e3fa703b14621@libssh2.stuge.se>
X-Trac-Ticket-ID: 187
In-Reply-To: <047.ff473ed169991c7f4a9e3fa703b14621@libssh2.stuge.se>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 27 Oct 2010 22:55:46 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 27 Oct 2010 22:55:40 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Reply-To: trac@libssh2.stuge.se,
        libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

#187: Unable to connect to SFTP server using SSH-2.0-SSHD
--------------------------+-------------------------------------------------
  Reporter:  sriramswamy  |        Owner:       
      Type:  defect       |       Status:  new  
  Priority:  blocker      |    Milestone:  1.2.7
 Component:  SFTP         |      Version:  1.2.7
Resolution:               |     Keywords:       
    Blocks:               |   Blocked By:       
--------------------------+-------------------------------------------------

Comment (by bagder):

 What server software is this?

 Can you check the server logs and see what it thinks of the attempt?

 The error is quite simply that send() fails and returns -1, but the
 question is why that happens...

-- 
Ticket URL: <http://trac.libssh2.org/ticket/187#comment:1>
libssh2 <http://trac.libssh2.org/>
C library for writing portable SSH2 clients
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 27 23:02:44 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9RL2e5Y000758;
	Wed, 27 Oct 2010 23:02:44 +0200
Received: from earth.stuge.se (earth.stuge.se [213.88.146.15])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9RL2bej000702
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 27 Oct 2010 23:02:38 +0200
Received: (qmail 27785 invoked from network); 27 Oct 2010 21:02:34 -0000
Received: from unknown (HELO earth.stuge.se) (127.0.0.1)
	by localhost with SMTP; 27 Oct 2010 21:02:34 -0000
MIME-Version: 1.0
From: "libssh2 Trac" <trac@libssh2.stuge.se>
X-Trac-Version: 0.12
Precedence: bulk
Cc: libssh2-devel@cool.haxx.se
Auto-Submitted: auto-generated
X-Mailer: Trac 0.12, by Edgewall Software
X-Trac-Project: libssh2
Date: Wed, 27 Oct 2010 21:02:34 -0000
X-URL: http://trac.libssh2.org/
Subject: Re: [libssh2] #188: libssh2_userauth_authenticated documentation is
	inaccurate
X-Trac-Ticket-URL: http://trac.libssh2.org/ticket/188#comment:1
Message-ID: <123.d42b0a67050d559ccf976640480084ec@libssh2.stuge.se>
References: <108.1591b7ea17e510b29b38af20edfb3a72@libssh2.stuge.se>
X-Trac-Ticket-ID: 188
In-Reply-To: <108.1591b7ea17e510b29b38af20edfb3a72@libssh2.stuge.se>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 27 Oct 2010 23:02:44 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 27 Oct 2010 23:02:38 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Reply-To: trac@libssh2.stuge.se,
        libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

#188: libssh2_userauth_authenticated documentation is inaccurate
---------------------------------------------------------------------------------------+
  Reporter:  www.google.com/accounts/o8/id?id=aitoawmvjpzhdvrzdugilqti7ni8qkfjov_hilk  |        Owner:        
      Type:  defect                                                                    |       Status:  closed
  Priority:  normal                                                                    |    Milestone:  1.2.8 
 Component:  API                                                                       |      Version:  1.2.6 
Resolution:  fixed                                                                     |     Keywords:        
    Blocks:                                                                            |   Blocked By:        
---------------------------------------------------------------------------------------+
Changes (by bagder):

  * status:  new => closed
  * resolution:  => fixed
  * milestone:  1.2.6 => 1.2.8


Comment:

 Thanks a lot, but I decided to actually make sure the code follows the
 docs so it now returns 1. It of course is also non-zero so it still
 matches what the old code said in its comment.

-- 
Ticket URL: <http://trac.libssh2.org/ticket/188#comment:1>
libssh2 <http://trac.libssh2.org/>
C library for writing portable SSH2 clients
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 27 23:08:11 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9RL86Xa005561;
	Wed, 27 Oct 2010 23:08:10 +0200
Received: from earth.stuge.se (earth.stuge.se [213.88.146.15])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9RL85mT005545
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 27 Oct 2010 23:08:05 +0200
Received: (qmail 28491 invoked from network); 27 Oct 2010 21:08:01 -0000
Received: from unknown (HELO earth.stuge.se) (127.0.0.1)
	by localhost with SMTP; 27 Oct 2010 21:08:01 -0000
MIME-Version: 1.0
From: "libssh2 Trac" <trac@libssh2.stuge.se>
X-Trac-Version: 0.12
Precedence: bulk
Cc: libssh2-devel@cool.haxx.se
Auto-Submitted: auto-generated
X-Mailer: Trac 0.12, by Edgewall Software
X-Trac-Project: libssh2
Date: Wed, 27 Oct 2010 21:08:01 -0000
X-URL: http://trac.libssh2.org/
Subject: Re: [libssh2] #185: libssh2_sftp_write still returns wrong value
X-Trac-Ticket-URL: http://trac.libssh2.org/ticket/185#comment:1
Message-ID: <057.3b8fa7bc24a6198c9dc9b90734d7f6be@libssh2.stuge.se>
References: <042.88a5561560f4ceff783b6539731a5d1c@libssh2.stuge.se>
X-Trac-Ticket-ID: 185
In-Reply-To: <042.88a5561560f4ceff783b6539731a5d1c@libssh2.stuge.se>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 27 Oct 2010 23:08:11 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 27 Oct 2010 23:08:05 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Reply-To: trac@libssh2.stuge.se,
        libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

#185: libssh2_sftp_write still returns wrong value
---------------------+------------------------------------------------------
  Reporter:  mstrsn  |        Owner:        
      Type:  defect  |       Status:  closed
  Priority:  normal  |    Milestone:  1.2.8 
 Component:  SFTP    |      Version:  1.2.7 
Resolution:  fixed   |     Keywords:        
    Blocks:          |   Blocked By:        
---------------------+------------------------------------------------------
Changes (by bagder):

  * status:  new => closed
  * resolution:  => fixed
  * milestone:  1.2.7 => 1.2.8


Comment:

 A returned zero is not an error, that's a bug.

 However, I've modified both the channel and the sftp code quite a bit
 recently and I've done a fair amount of testing so I'm convinced this
 particular problem does not exist anymore.

 Please try the current git version and see if you find any problems with
 it, it is a new and much improved approach to SFTP uploads.

-- 
Ticket URL: <http://trac.libssh2.org/ticket/185#comment:1>
libssh2 <http://trac.libssh2.org/>
C library for writing portable SSH2 clients
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 27 23:18:28 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9RLIOYD008931;
	Wed, 27 Oct 2010 23:18:27 +0200
Received: from earth.stuge.se (earth.stuge.se [213.88.146.15])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9RLINSc008897
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 27 Oct 2010 23:18:23 +0200
Received: (qmail 29619 invoked from network); 27 Oct 2010 21:18:19 -0000
Received: from unknown (HELO earth.stuge.se) (127.0.0.1)
	by localhost with SMTP; 27 Oct 2010 21:18:19 -0000
MIME-Version: 1.0
From: "libssh2 Trac" <trac@libssh2.stuge.se>
X-Trac-Version: 0.12
Precedence: bulk
Cc: libssh2-devel@cool.haxx.se
Auto-Submitted: auto-generated
X-Mailer: Trac 0.12, by Edgewall Software
X-Trac-Project: libssh2
Date: Wed, 27 Oct 2010 21:18:19 -0000
X-URL: http://trac.libssh2.org/
Subject: Re: [libssh2] #193: fix memory leaks (two times cipher_data) for
	each sftp session
X-Trac-Ticket-URL: http://trac.libssh2.org/ticket/193#comment:1
Message-ID: <123.409994764ef02c4daa6d54ee2e5f42d1@libssh2.stuge.se>
References: <108.a829986f37e7ce38b9e9f1756b25519f@libssh2.stuge.se>
X-Trac-Ticket-ID: 193
In-Reply-To: <108.a829986f37e7ce38b9e9f1756b25519f@libssh2.stuge.se>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 27 Oct 2010 23:18:28 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 27 Oct 2010 23:18:23 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Reply-To: trac@libssh2.stuge.se,
        libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

#193: fix memory leaks (two times cipher_data) for each sftp session
---------------------------------------------------------------------------------------+
  Reporter:  www.google.com/accounts/o8/id?id=aitoawle7oko7wvopccjqdxoim5mmykrk4imu8o  |        Owner:        
      Type:  defect                                                                    |       Status:  closed
  Priority:  normal                                                                    |    Milestone:  1.2.8 
 Component:  SFTP                                                                      |      Version:  1.2.7 
Resolution:  fixed                                                                     |     Keywords:        
    Blocks:                                                                            |   Blocked By:        
---------------------------------------------------------------------------------------+
Changes (by bagder):

  * status:  new => closed
  * resolution:  => fixed
  * milestone:  1.2.7 => 1.2.8


Comment:

 Excellent! Many thanks, pushed now as commit 92d308c1578f9cb

-- 
Ticket URL: <http://trac.libssh2.org/ticket/193#comment:1>
libssh2 <http://trac.libssh2.org/>
C library for writing portable SSH2 clients
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Oct 27 23:21:26 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9RLLNmj010329;
	Wed, 27 Oct 2010 23:21:26 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9RLLMGe010324
	for <libssh2-devel@cool.haxx.se>; Wed, 27 Oct 2010 23:21:22 +0200
Date: Wed, 27 Oct 2010 23:21:22 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: so compression is a bit broken
In-Reply-To: <alpine.DEB.2.00.1010211634590.31684@familiar.castaglia.org>
Message-ID: <alpine.DEB.2.00.1010272320170.10273@tvnag.unkk.fr>
References: <alpine.DEB.2.00.1010212242100.31301@tvnag.unkk.fr>
	<alpine.DEB.2.00.1010211634590.31684@familiar.castaglia.org>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Wed, 27 Oct 2010 23:21:26 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Wed, 27 Oct 2010 23:21:22 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Thu, 21 Oct 2010, TJ Saunders wrote:

> A related issue is:
>
>  http://trac.libssh2.org/ticket/184
>
> The patch there adds some trace logging of the zlib return value for failed 
> zlib calls; perhaps that can help aid in the debugging of why compressed 
> uploads are failing?

Speaking of this, do you feel like adapting it to the current code?

The comp_method_zlib_decomp() function is now ONLY used for actually 
decompressing so we can simplify it a lot.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Oct 29 00:28:45 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9SMSKkX030005;
	Fri, 29 Oct 2010 00:28:42 +0200
Received: from nm10-vm0.bullet.mail.sp2.yahoo.com
	(nm10-vm0.bullet.mail.sp2.yahoo.com [98.139.91.198])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with SMTP id o9SMSHEU029967
	for <libssh2-devel@cool.haxx.se>; Fri, 29 Oct 2010 00:28:17 +0200
Received: from [98.139.91.66] by nm10.bullet.mail.sp2.yahoo.com with NNFMP;
	28 Oct 2010 22:28:08 -0000
Received: from [98.139.91.29] by tm6.bullet.mail.sp2.yahoo.com with NNFMP;
	28 Oct 2010 22:28:08 -0000
Received: from [127.0.0.1] by omp1029.mail.sp2.yahoo.com with NNFMP;
	28 Oct 2010 22:28:08 -0000
X-Yahoo-Newman-Property: ymail-3
X-Yahoo-Newman-Id: 234008.33296.bm@omp1029.mail.sp2.yahoo.com
Received: (qmail 35728 invoked by uid 60001); 28 Oct 2010 22:28:08 -0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024;
	t=1288304888; bh=2FxeK7ujgMuZA0AIg9dAdmC+4XnzcmioYEK5BfEJxfk=;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type;
	b=nPYCOtJ+kPBpkc8Dw0Ju25MZ89D4Wzx9Sd+YBcyPqN/50cmNUebLr1TlAA8B54ylrJMxObmFBig6lCgYZ2bEgQOC30j5wqZdGPNZvQUDyrmHzrIlb7oQZkEVd3UQRVjcgpV3elB/Zuu+K7e20audG7fnONjIov02msOh2ZM1BZM=
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com;
	h=Message-ID:X-YMail-OSG:Received:X-Mailer:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type;
	b=2aTrPCHcKh5ehcG54UuzM6KJOU922D1yAAKVUl6u77Rk/YWDGk7Ju+u1JnbX/FTEscKlwh/jJb0h/BRmJ/PlpUKl6YrfQF0IZin9g/II6K3UYYoSvsUWclYfuA6R+4Iztsj+vox96mcAio++2uCfqmfPMxkw8uuHfcdgjcXcyqE=;
Message-ID: <56689.32033.qm@web46202.mail.sp1.yahoo.com>
X-YMail-OSG: dR45pDQVM1kYEDuucA2z376DucDoXTwqf4v7zz4Wu4x2uP1
	h7HcxzBr.1APXDH9d8CF7fUBTBSjKLfb1uTzrhmwAa.7mY2hxUFVJ0PKwf1k
	STFEWkqrJuQoDf9qP8EvNeQHxbid_46jrmd3zox3ZXEIErctEuFVDxKDsJQl
	Myaue8pjV_nmjFQKYUzjqlV9geCOQ4htc9lEXkmB3rKy2u9S496m2wLg4PLp HOw--
Received: from [41.100.112.10] by web46202.mail.sp1.yahoo.com via HTTP;
	Thu, 28 Oct 2010 15:28:07 PDT
X-Mailer: YahooMailClassic/11.4.9 YahooMailWebService/0.8.107.284920
Date: Thu, 28 Oct 2010 15:28:07 -0700 (PDT)
From: SIFE Abdelrazak <sife_php@yahoo.com>
Subject: Re: AW: Fail to login with libshh2
To: libssh2 development <libssh2-devel@cool.haxx.se>
In-Reply-To: <435147.58763.qm@web29708.mail.ird.yahoo.com>
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 29 Oct 2010 00:28:45 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 29 Oct 2010 00:28:18 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============0326467412=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--===============0326467412==
Content-Type: multipart/alternative; boundary="0-1757045787-1288304887=:32033"

--0-1757045787-1288304887=:32033
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable

I found the type of authentication is keyboard-interactive, Now I am in doc=
umentation and I see this protype function:

#include <libssh2.h>=0Aint =0Alibssh2_userauth_keyboard_interactive_ex(LIBS=
SH2_SESSION *session, const=0A char *username, unsigned int username_len, =
=0ALIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC(*response_callback));=A0What is LI=
BSSH2_USERAUTH_KBDINT_RESPONSE_FUNC, and how I can set it?


=0A=0A
--0-1757045787-1288304887=:32033
Content-Type: text/html; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable

<table cellspacing=3D"0" cellpadding=3D"0" border=3D"0" ><tr><td valign=3D"=
top" style=3D"font: inherit;">I found the type of authentication is keyboar=
d-interactive, Now I am in documentation and I see this protype function:<b=
r><br><p class=3D"level0">#include &lt;libssh2.h&gt;=0A</p><p class=3D"leve=
l0">int =0Alibssh2_userauth_keyboard_interactive_ex(LIBSSH2_SESSION *sessio=
n, const=0A char *username, unsigned int username_len, =0A<span style=3D"fo=
nt-weight: bold;">LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC(*response_callback)=
</span>);&nbsp;</p><p class=3D"level0">What is <span style=3D"font-weight: =
bold;">LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC, and how I can set it?<br></sp=
an></p><p class=3D"level0"><br></p><br></td></tr></table><br>
--0-1757045787-1288304887=:32033--

--===============0326467412==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============0326467412==--

From libssh2-devel-bounces@cool.haxx.se  Fri Oct 29 01:04:15 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9SN44sX014424;
	Fri, 29 Oct 2010 01:04:13 +0200
Received: from ponderosa.fch.wimsey.bc.ca (zz20920564179.cipherkey.net
	[209.205.64.179])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9SN41tK014337
	for <libssh2-devel@cool.haxx.se>; Fri, 29 Oct 2010 01:04:02 +0200
Received: by coneharvesters.com
	via sendmail with stdio id <m1PBbVg-000l6IC@ponderosa.fch.wimsey.bc.ca>
	for libssh2-devel@cool.haxx.se; Thu, 28 Oct 2010 16:03:52 -0700 (PDT)
Date: Thu, 28 Oct 2010 16:03:51 -0700
From: Dan Fandrich <dan@coneharvesters.com>
To: libssh2-devel@cool.haxx.se
Subject: Re: AW: Fail to login with libshh2
Message-ID: <20101028230351.GA30081@coneharvesters.com>
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <435147.58763.qm@web29708.mail.ird.yahoo.com>
	<56689.32033.qm@web46202.mail.sp1.yahoo.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <56689.32033.qm@web46202.mail.sp1.yahoo.com>
User-Agent: Mutt/1.5.21 (2010-09-15)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 29 Oct 2010 01:04:15 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 29 Oct 2010 01:04:02 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Thu, Oct 28, 2010 at 03:28:07PM -0700, SIFE Abdelrazak wrote:
> I found the type of authentication is keyboard-interactive, Now I am in
> documentation and I see this protype function:
> 
> #include <libssh2.h>
> 
> int libssh2_userauth_keyboard_interactive_ex(LIBSSH2_SESSION *session, const
> char *username, unsigned int username_len,
> LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC(*response_callback)); 
> 
> What is LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC, and how I can set it?

It's documented in the man page for libssh2_userauth_keyboard_interactive_ex.

>>> Dan
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Oct 29 21:00:28 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9TIxddB032087;
	Fri, 29 Oct 2010 21:00:23 +0200
Received: from imail.ipswitch.com (imail.ipswitch.com [156.21.1.5])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9TIxZOU032020
	for <libssh2-devel@cool.haxx.se>; Fri, 29 Oct 2010 20:59:36 +0200
DKIM-Signature: q=dns/txt; v=1; c=relaxed/relaxed; s=ipswitch;
	d=ipswitch.com; a=rsa-sha1;
	h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:
	Content-Transfer-Encoding;
	b=nVExmipOoa1BEp/4YPqwinkThaoU58nyeekTU5qa3qHG91g7H602BCj1dpb/1Cz3S4
	2YXFbrk09v7lR7d0+5iY7ms+p3Kjl/YAPfxiT0j+Ah+W3x5TU/D+1Qi1EKzbYRemv3VO
	zW58pl3bQXoVPNHTkWRmz6gfFf+P1+mieiXY0=;
	bh=EVsajsTG2j8ppvTCf/CgVgLow5s=; t=1288378761;
Received: from mrrnt [66.170.5.130] by ipswitch.com with ESMTP
	(SMTPD-11.03) id 4e7a0002105219a3; Fri, 29 Oct 2010 14:59:19 -0400
From: "Mark Riordan" <mriordan@ipswitch.com>
To: <libssh2-devel@cool.haxx.se>
Subject: libssh2_sftp_write fails with return code -1
Date: Fri, 29 Oct 2010 13:59:25 -0500
Message-ID: <005301cb779b$68597340$390c59c0$@com>
MIME-Version: 1.0
X-Mailer: Microsoft Office Outlook 12.0
thread-index: Act3m2gD+47NVLcYS0Sul2sfIX0YUQ==
Content-Language: en-us
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 29 Oct 2010 21:00:28 +0200 (CEST)
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 29 Oct 2010 20:59:37 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Yesterday (2010-10-28) I did a "git" from the repository and rebuilt my test
program with the newest libssh2.  
Unfortunately, uploads now fail on the very first call to
libssh2_sftp_write, whereas with 1.2.7, the test program generally worked.
Here's the snippet of code that fails:

   remotemode = LIBSSH2_FXF_READ;
   if ("put" == settings.action)
      remotemode = LIBSSH2_FXF_WRITE | LIBSSH2_FXF_CREAT;
   sftp_handle =
     libssh2_sftp_open(sftp_session, settings.remotefile.c_str(),
remotemode, 0777);

   if (!sftp_handle) {
      fprintf(stderr, "Unable to open file with SFTP\n");
      goto shutdown;
   }
   fprintf(stderr, "libssh2_sftp_open() succeeded.\n");
   dwmsStart = GetTickCount();
   if ("get" == settings.action) {
      hand = open(settings.localfile.c_str(), O_BINARY | O_CREAT | O_RDWR,
_S_IWRITE);
      // On Ubuntu to Solaris, get gets 9.87 MB/sec!
      do {
         char            mem[65536];

         /* loop until we fail */
         // fprintf(stderr, "libssh2_sftp_read()!\n");
         rc = libssh2_sftp_read(sftp_handle, mem, sizeof(mem));
         if (rc > 0) {
            write(hand, mem, rc);
            filesize += rc;
         } else {
            printf("libssh2_sftp_read with code %d\n", rc);
            break;
         }
      } while (1);
   } else if ("put" == settings.action) {
      hand = open(settings.localfile.c_str(), O_BINARY | O_RDONLY,
_S_IREAD);
      if (-1 == hand) {
         perror("opening local file");
         exit(2);
      }
      int             nwrites = 0;

      char            mem[32500];

      printf("Using output buffer size of %d bytes\n", sizeof(mem));
      do {
         /* loop until we fail */
         int             nbytes = read(hand, mem, sizeof(mem));

         if (nbytes > 0) {
            filesize += nbytes;
            int             offset = 0, bytes_to_send = nbytes;

            do {
               // This is the code that fails with -1.
<<===========================<<
               rc = libssh2_sftp_write(sftp_handle, mem + offset,
bytes_to_send);
               if (rc < 0) {
                  printf("libssh2_sftp_write failed with code %d\n", rc);
                  break;
               }
               ++nwrites;
               if (0 == (nwrites % 100)) {
                  printf("libssh2_sftp_write %d sent %d bytes\n", nwrites,
rc);
               }
               offset += rc;
               bytes_to_send -= rc;
            } while (bytes_to_send > 0);
         } else {
            break;
         }
      } while (rc >= 0);
   } else {
      puts("action must be get or put.");
      exit(1);
   }

Thanks,

Mark R


_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Oct 29 22:21:13 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9TKKs3M008001;
	Fri, 29 Oct 2010 22:21:10 +0200
Received: from giant.haxx.se (giant.haxx.se [80.67.6.50])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9TKKrc4007982
	for <libssh2-devel@cool.haxx.se>; Fri, 29 Oct 2010 22:20:53 +0200
Date: Fri, 29 Oct 2010 22:20:53 +0200 (CEST)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: libssh2_sftp_write fails with return code -1
In-Reply-To: <005301cb779b$68597340$390c59c0$@com>
Message-ID: <alpine.DEB.2.00.1010292218040.5874@tvnag.unkk.fr>
References: <005301cb779b$68597340$390c59c0$@com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Fri, 29 Oct 2010 22:21:13 +0200 (CEST)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]);
	Fri, 29 Oct 2010 22:20:53 +0200 (CEST)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Fri, 29 Oct 2010, Mark Riordan wrote:

> Yesterday (2010-10-28) I did a "git" from the repository and rebuilt my test 
> program with the newest libssh2. Unfortunately, uploads now fail on the very 
> first call to libssh2_sftp_write, whereas with 1.2.7, the test program 
> generally worked.

Great, we need testing of the current git version to make it run properly!

Can you please build a debug-enabled libssh2 and call libssh2_trace(session, 
~0); after you've called session_init() and provide the log output?

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Sun Oct 31 15:14:22 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9VEDmLw021375;
	Sun, 31 Oct 2010 15:14:16 +0100
Received: from earth.stuge.se (earth.stuge.se [213.88.146.15])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9VEDloU021370
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Sun, 31 Oct 2010 15:13:47 +0100
Received: (qmail 13082 invoked from network); 31 Oct 2010 14:13:44 -0000
Received: from unknown (HELO earth.stuge.se) (127.0.0.1)
	by localhost with SMTP; 31 Oct 2010 14:13:44 -0000
MIME-Version: 1.0
From: "libssh2 Trac" <trac@libssh2.stuge.se>
X-Trac-Version: 0.12
Precedence: bulk
Cc: libssh2-devel@cool.haxx.se
Auto-Submitted: auto-generated
X-Mailer: Trac 0.12, by Edgewall Software
X-Trac-Project: libssh2
Date: Sun, 31 Oct 2010 14:13:44 -0000
X-URL: http://trac.libssh2.org/
Subject: [libssh2] #194: Scp Bug
X-Trac-Ticket-URL: http://trac.libssh2.org/ticket/194
Message-ID: <044.58182c24cc658b2182f74e694d2f6922@libssh2.stuge.se>
X-Trac-Ticket-ID: 194
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Sun, 31 Oct 2010 15:14:22 +0100 (CET)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]); Sun, 31 Oct 2010 15:13:47 +0100 (CET)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Reply-To: trac@libssh2.stuge.se,
        libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

#194: Scp Bug
-----------------------+----------------------------------------------------
  Reporter:  robocide  |       Owner:       
      Type:  defect    |      Status:  new  
  Priority:  high      |   Milestone:  1.2.7
 Component:  SCP       |     Version:  1.2.7
  Keywords:            |      Blocks:       
Blocked By:            |  
-----------------------+----------------------------------------------------
 after trying to send 40 files from multiple threads ,
 when the first file is 32mb,and all the rest are 124 bytes,

 when i reach to the 11th file i encouter a session problem,
 with error code of -21 , the below is part of the output of my
 program,marked is the error in the session ,

 i've changed the loop to do the same with 10 files and the problem does
 not occur.

 also the same does not occur using sftp.

 File Opened Sucessfully
 Handling file :myfile.check_9
 Sucessfully Read :124 Bytes
 Sucessfully Sent :124 Bytes
 File Sent!! Reached End of File
 File Opened Sucessfully
 Handling file :myfile.check_9
 Sucessfully Read :124 Bytes
 Sucessfully Sent :124 Bytes
 File Sent!! Reached End of File
 File Opened Sucessfully
 '''Unable to open a session: (-21) Channel open failure
 Thread 0 terminated
 Unable to open a session: (-21) Channel open failure'''
 Thread 1 terminated
 Round-trip Time: 14404095 us
 Main Thread : Shuting down Libssh2 Library

-- 
Ticket URL: <http://trac.libssh2.org/ticket/194>
libssh2 <http://trac.libssh2.org/>
C library for writing portable SSH2 clients
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Sun Oct 31 18:43:05 2010
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id o9VHgleq015749;
	Sun, 31 Oct 2010 18:43:01 +0100
Received: from earth.stuge.se (earth.stuge.se [213.88.146.15])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9.1) with ESMTP id
	o9VHgisF015721
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Sun, 31 Oct 2010 18:42:46 +0100
Received: (qmail 3329 invoked from network); 31 Oct 2010 17:42:40 -0000
Received: from unknown (HELO earth.stuge.se) (127.0.0.1)
	by localhost with SMTP; 31 Oct 2010 17:42:40 -0000
MIME-Version: 1.0
From: "libssh2 Trac" <trac@libssh2.stuge.se>
X-Trac-Version: 0.12
Precedence: bulk
Cc: libssh2-devel@cool.haxx.se
Auto-Submitted: auto-generated
X-Mailer: Trac 0.12, by Edgewall Software
X-Trac-Project: libssh2
Date: Sun, 31 Oct 2010 17:42:40 -0000
X-URL: http://trac.libssh2.org/
Subject: Re: [libssh2] #194: Scp Bug
X-Trac-Ticket-URL: http://trac.libssh2.org/ticket/194#comment:1
Message-ID: <059.f15659027d3a65321341154c9e04de1c@libssh2.stuge.se>
References: <044.58182c24cc658b2182f74e694d2f6922@libssh2.stuge.se>
X-Trac-Ticket-ID: 194
In-Reply-To: <044.58182c24cc658b2182f74e694d2f6922@libssh2.stuge.se>
X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.3.5 (giant.haxx.se [127.0.0.1]); Sun, 31 Oct 2010 18:43:05 +0100 (CET)
X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-4.3.5
	(giant.haxx.se [80.67.6.50]); Sun, 31 Oct 2010 18:42:46 +0100 (CET)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.13
Reply-To: trac@libssh2.stuge.se,
        libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

#194: Scp Bug
-----------------------+----------------------------------------------------
  Reporter:  robocide  |        Owner:        
      Type:  defect    |       Status:  closed
  Priority:  high      |    Milestone:  1.2.7 
 Component:  SCP       |      Version:  1.2.7 
Resolution:  invalid   |     Keywords:        
    Blocks:            |   Blocked By:        
-----------------------+----------------------------------------------------
Changes (by stuge):

  * status:  new => closed
  * resolution:  => invalid


Comment:

 This happens because the server only allows 10 open channels, nothing to
 do with the client side.

 Your client does not have to treat failure to open the 11th channel as a
 fatal error.

-- 
Ticket URL: <http://trac.libssh2.org/ticket/194#comment:1>
libssh2 <http://trac.libssh2.org/>
C library for writing portable SSH2 clients
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

